Repository: openfl/lime Branch: develop Commit: ab8a3854eb76 Files: 2775 Total size: 194.9 MB Directory structure: gitextract_fz68o9ts/ ├── .dockerignore ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ └── main.yml ├── .gitignore ├── .gitmodules ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE.md ├── MAINTAINERS.md ├── NOTICE.md ├── README.md ├── assets/ │ └── docs-theme/ │ ├── config.json │ ├── resources/ │ │ ├── extra-styles.css │ │ └── index.js │ └── templates/ │ ├── package_description.mtt │ └── topbar.mtt ├── dependencies/ │ ├── extension-api/ │ │ ├── build.gradle │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── org/ │ │ └── haxe/ │ │ ├── HXCPP.java │ │ ├── extension/ │ │ │ └── Extension.java │ │ └── lime/ │ │ ├── HaxeObject.java │ │ ├── Lime.java │ │ └── Value.java │ ├── lzma_worker-min.js │ └── webgl-debug.js ├── docs/ │ ├── .editorconfig.txt │ ├── .gitignore │ ├── ImportAll.hx │ ├── build.hx │ ├── build.hxml │ └── hxml/ │ ├── android.hxml │ ├── flash.hxml │ ├── html5.hxml │ ├── ios.hxml │ ├── linux.hxml │ ├── mac.hxml │ └── windows.hxml ├── externs/ │ └── air/ │ ├── air/ │ │ ├── desktop/ │ │ │ └── URLFilePromise.hx │ │ ├── net/ │ │ │ ├── SecureSocketMonitor.hx │ │ │ ├── ServiceMonitor.hx │ │ │ ├── SocketMonitor.hx │ │ │ └── URLMonitor.hx │ │ └── update/ │ │ ├── ApplicationUpdater.hx │ │ ├── ApplicationUpdaterUI.hx │ │ └── events/ │ │ ├── DownloadErrorEvent.hx │ │ ├── StatusFileUpdateErrorEvent.hx │ │ ├── StatusFileUpdateEvent.hx │ │ ├── StatusUpdateErrorEvent.hx │ │ ├── StatusUpdateEvent.hx │ │ └── UpdateEvent.hx │ ├── flash/ │ │ ├── data/ │ │ │ ├── EncryptedLocalStore.hx │ │ │ ├── SQLCollationType.hx │ │ │ ├── SQLColumnNameStyle.hx │ │ │ ├── SQLColumnSchema.hx │ │ │ ├── SQLConnection.hx │ │ │ ├── SQLIndexSchema.hx │ │ │ ├── SQLMode.hx │ │ │ ├── SQLResult.hx │ │ │ ├── SQLSchema.hx │ │ │ ├── SQLSchemaResult.hx │ │ │ ├── SQLStatement.hx │ │ │ ├── SQLTableSchema.hx │ │ │ ├── SQLTransactionLockType.hx │ │ │ ├── SQLTriggerSchema.hx │ │ │ └── SQLViewSchema.hx │ │ ├── desktop/ │ │ │ ├── Clipboard.hx │ │ │ ├── DockIcon.hx │ │ │ ├── FilePromiseManager.hx │ │ │ ├── FilePromiseWrapper.hx │ │ │ ├── IFilePromise.hx │ │ │ ├── Icon.hx │ │ │ ├── InteractiveIcon.hx │ │ │ ├── InvokeEventReason.hx │ │ │ ├── JSClipboard.hx │ │ │ ├── MacFilePromiseWrapper.hx │ │ │ ├── NativeApplication.hx │ │ │ ├── NativeDragActions.hx │ │ │ ├── NativeDragManager.hx │ │ │ ├── NativeDragOptions.hx │ │ │ ├── NativeProcess.hx │ │ │ ├── NativeProcessStartupInfo.hx │ │ │ ├── NativeWindowIcon.hx │ │ │ ├── NotificationType.hx │ │ │ ├── SystemIdleMode.hx │ │ │ ├── SystemTrayIcon.hx │ │ │ └── Updater.hx │ │ ├── display/ │ │ │ ├── DisplayObject.hx │ │ │ ├── InteractiveObject.hx │ │ │ ├── Loader.hx │ │ │ ├── NativeMenu.hx │ │ │ ├── NativeMenuItem.hx │ │ │ ├── NativeWindow.hx │ │ │ ├── NativeWindowDisplayState.hx │ │ │ ├── NativeWindowInitOptions.hx │ │ │ ├── NativeWindowRenderMode.hx │ │ │ ├── NativeWindowResize.hx │ │ │ ├── NativeWindowSystemChrome.hx │ │ │ ├── NativeWindowType.hx │ │ │ ├── Screen.hx │ │ │ ├── Stage.hx │ │ │ ├── StageAspectRatio.hx │ │ │ └── StageOrientation.hx │ │ ├── display3D/ │ │ │ └── Context3DProfile.hx │ │ ├── errors/ │ │ │ ├── PermissionError.hx │ │ │ ├── SQLError.hx │ │ │ └── SQLErrorOperation.hx │ │ ├── events/ │ │ │ ├── BrowserInvokeEvent.hx │ │ │ ├── DNSResolverEvent.hx │ │ │ ├── DRMStatusEvent.hx │ │ │ ├── DatagramSocketDataEvent.hx │ │ │ ├── DeviceRotationEvent.hx │ │ │ ├── Event.hx │ │ │ ├── FileListEvent.hx │ │ │ ├── FocusEvent.hx │ │ │ ├── GestureEvent.hx │ │ │ ├── HTMLUncaughtScriptExceptionEvent.hx │ │ │ ├── IOErrorEvent.hx │ │ │ ├── InvokeEvent.hx │ │ │ ├── KeyboardEvent.hx │ │ │ ├── LocationChangeEvent.hx │ │ │ ├── MediaEvent.hx │ │ │ ├── MouseEvent.hx │ │ │ ├── NativeDragEvent.hx │ │ │ ├── NativeProcessExitEvent.hx │ │ │ ├── NativeWindowBoundsEvent.hx │ │ │ ├── NativeWindowDisplayStateEvent.hx │ │ │ ├── PermissionEvent.hx │ │ │ ├── ProgressEvent.hx │ │ │ ├── RemoteNotificationEvent.hx │ │ │ ├── SQLErrorEvent.hx │ │ │ ├── SQLEvent.hx │ │ │ ├── SQLUpdateEvent.hx │ │ │ ├── ScreenMouseEvent.hx │ │ │ ├── ServerSocketConnectEvent.hx │ │ │ ├── StageOrientationEvent.hx │ │ │ ├── StorageVolumeChangeEvent.hx │ │ │ ├── TouchEvent.hx │ │ │ └── TouchEventIntent.hx │ │ ├── external/ │ │ │ └── ExtensionContext.hx │ │ ├── filesystem/ │ │ │ ├── File.hx │ │ │ ├── FileMode.hx │ │ │ ├── FileStream.hx │ │ │ ├── StorageVolume.hx │ │ │ └── StorageVolumeInfo.hx │ │ ├── html/ │ │ │ ├── ControlInitializationError.hx │ │ │ ├── HTMLBitmap.hx │ │ │ ├── HTMLHistoryItem.hx │ │ │ ├── HTMLHost.hx │ │ │ ├── HTMLLoader.hx │ │ │ ├── HTMLPDFCapability.hx │ │ │ ├── HTMLPopupWindow.hx │ │ │ ├── HTMLSWFCapability.hx │ │ │ ├── HTMLWindowCreateOptions.hx │ │ │ ├── ResourceLoader.hx │ │ │ ├── __HTMLScriptArray.hx │ │ │ ├── __HTMLScriptFunction.hx │ │ │ ├── __HTMLScriptObject.hx │ │ │ └── script/ │ │ │ ├── Package.hx │ │ │ └── PropertyEnumHelper.hx │ │ ├── media/ │ │ │ ├── AudioPlaybackMode.hx │ │ │ ├── CameraPosition.hx │ │ │ ├── CameraRoll.hx │ │ │ ├── CameraRollBrowseOptions.hx │ │ │ ├── CameraUI.hx │ │ │ ├── IFilePromise.hx │ │ │ ├── InputMediaStream.hx │ │ │ ├── MediaPromise.hx │ │ │ ├── MediaType.hx │ │ │ ├── StageWebView.hx │ │ │ └── StageWebViewImpl.hx │ │ ├── net/ │ │ │ ├── DatagramSocket.hx │ │ │ ├── FileReference.hx │ │ │ ├── IPVersion.hx │ │ │ ├── InterfaceAddress.hx │ │ │ ├── NetworkInfo.hx │ │ │ ├── NetworkInterface.hx │ │ │ ├── ServerSocket.hx │ │ │ ├── Socket.hx │ │ │ ├── URLRequest.hx │ │ │ ├── URLRequestDefaults.hx │ │ │ ├── dns/ │ │ │ │ ├── AAAARecord.hx │ │ │ │ ├── ARecord.hx │ │ │ │ ├── DNSResolver.hx │ │ │ │ ├── MXRecord.hx │ │ │ │ ├── PTRRecord.hx │ │ │ │ ├── ResourceRecord.hx │ │ │ │ └── SRVRecord.hx │ │ │ └── drm/ │ │ │ ├── DRMAddToDeviceGroupContext.hx │ │ │ ├── DRMManager.hx │ │ │ ├── DRMRemoveFromDeviceGroupContext.hx │ │ │ └── VoucherAccessInfo.hx │ │ ├── notifications/ │ │ │ ├── NotificationStyle.hx │ │ │ ├── RemoteNotifier.hx │ │ │ └── RemoteNotifierSubscribeOptions.hx │ │ ├── permissions/ │ │ │ └── PermissionStatus.hx │ │ ├── printing/ │ │ │ ├── PaperSize.hx │ │ │ ├── PrintJob.hx │ │ │ ├── PrintJobOptions.hx │ │ │ ├── PrintMethod.hx │ │ │ └── PrintUIOptions.hx │ │ ├── sampler/ │ │ │ ├── ScriptMember.hx │ │ │ └── ScriptSampler.hx │ │ ├── security/ │ │ │ ├── AVMPlusDigest.hx │ │ │ ├── CryptContext.hx │ │ │ ├── IURIDereferencer.hx │ │ │ ├── ReferencesValidationSetting.hx │ │ │ ├── RevocationCheckSettings.hx │ │ │ ├── SignatureStatus.hx │ │ │ ├── SignerTrustSettings.hx │ │ │ ├── XMLCanonicalizer.hx │ │ │ ├── XMLSignatureEnvelopedTransformer.hx │ │ │ └── XMLSignatureValidator.hx │ │ ├── sensors/ │ │ │ └── DeviceRotation.hx │ │ ├── system/ │ │ │ ├── Capabilities.hx │ │ │ └── SecurityPrivilege.hx │ │ ├── text/ │ │ │ ├── AutoCapitalize.hx │ │ │ ├── ReturnKeyLabel.hx │ │ │ ├── SoftKeyboardType.hx │ │ │ ├── StageText.hx │ │ │ ├── StageTextClearButtonMode.hx │ │ │ ├── StageTextImpl.hx │ │ │ └── StageTextInitOptions.hx │ │ └── ui/ │ │ ├── ContextMenu.hx │ │ └── ContextMenuItem.hx │ └── sys/ │ ├── FileSystem.hx │ └── io/ │ ├── File.hx │ ├── FileInput.hx │ └── FileOutput.hx ├── extraParams.hxml ├── haxelib.json ├── haxelib.xml ├── hxformat.json ├── include.xml ├── ndll/ │ ├── Linux/ │ │ └── .gitignore │ ├── Linux64/ │ │ └── .gitignore │ ├── Mac/ │ │ └── .gitignore │ ├── Mac64/ │ │ └── .gitignore │ ├── MacArm64/ │ │ └── .gitignore │ └── Windows/ │ └── .gitignore ├── package.json ├── project/ │ ├── Build.xml │ ├── BuildHashlink.xml │ ├── README.md │ ├── include/ │ │ ├── app/ │ │ │ ├── Application.h │ │ │ └── ApplicationEvent.h │ │ ├── graphics/ │ │ │ ├── Image.h │ │ │ ├── ImageBuffer.h │ │ │ ├── PixelFormat.h │ │ │ ├── RenderEvent.h │ │ │ ├── format/ │ │ │ │ ├── JPEG.h │ │ │ │ └── PNG.h │ │ │ └── utils/ │ │ │ └── ImageDataUtil.h │ │ ├── hx/ │ │ │ └── CFFIExt.h │ │ ├── math/ │ │ │ ├── ColorMatrix.h │ │ │ ├── Matrix3.h │ │ │ ├── Rectangle.h │ │ │ ├── Vector2.h │ │ │ └── color/ │ │ │ └── RGBA.h │ │ ├── media/ │ │ │ ├── AudioBuffer.h │ │ │ ├── codecs/ │ │ │ │ └── vorbis/ │ │ │ │ └── VorbisFile.h │ │ │ └── containers/ │ │ │ ├── OGG.h │ │ │ └── WAV.h │ │ ├── system/ │ │ │ ├── CFFI.h │ │ │ ├── CFFIPointer.h │ │ │ ├── Clipboard.h │ │ │ ├── ClipboardEvent.h │ │ │ ├── Display.h │ │ │ ├── DisplayMode.h │ │ │ ├── Endian.h │ │ │ ├── FileWatcher.h │ │ │ ├── JNI.h │ │ │ ├── Locale.h │ │ │ ├── Mutex.h │ │ │ ├── OrientationEvent.h │ │ │ ├── SensorEvent.h │ │ │ ├── System.h │ │ │ └── ValuePointer.h │ │ ├── text/ │ │ │ └── Font.h │ │ ├── ui/ │ │ │ ├── Cursor.h │ │ │ ├── DropEvent.h │ │ │ ├── FileDialog.h │ │ │ ├── Gamepad.h │ │ │ ├── GamepadEvent.h │ │ │ ├── Haptic.h │ │ │ ├── Joystick.h │ │ │ ├── JoystickEvent.h │ │ │ ├── KeyCode.h │ │ │ ├── KeyEvent.h │ │ │ ├── MouseEvent.h │ │ │ ├── TextEvent.h │ │ │ ├── TouchEvent.h │ │ │ ├── Window.h │ │ │ └── WindowEvent.h │ │ ├── utils/ │ │ │ ├── ArrayBufferView.h │ │ │ ├── Bytes.h │ │ │ ├── Object.h │ │ │ ├── QuickVec.h │ │ │ ├── Resource.h │ │ │ ├── compress/ │ │ │ │ ├── LZMA.h │ │ │ │ └── Zlib.h │ │ │ └── stdint.h │ │ └── vm/ │ │ └── NekoVM.h │ ├── lib/ │ │ ├── README.md │ │ ├── cairo-files.xml │ │ ├── curl-files.xml │ │ ├── custom/ │ │ │ ├── cairo/ │ │ │ │ ├── configs/ │ │ │ │ │ ├── default/ │ │ │ │ │ │ └── config.h │ │ │ │ │ ├── linux/ │ │ │ │ │ │ └── config.h │ │ │ │ │ ├── mac/ │ │ │ │ │ │ └── config.h │ │ │ │ │ └── windows/ │ │ │ │ │ └── config.h │ │ │ │ └── src/ │ │ │ │ └── cairo-features.h │ │ │ ├── curl/ │ │ │ │ └── lib/ │ │ │ │ └── curl_config.h │ │ │ ├── freetype/ │ │ │ │ └── include/ │ │ │ │ ├── freetype/ │ │ │ │ │ └── config/ │ │ │ │ │ └── ftoption.h │ │ │ │ └── ft2build.h │ │ │ ├── hl-ssl/ │ │ │ │ └── threading_alt.h │ │ │ ├── jpeg/ │ │ │ │ ├── jconfig.h │ │ │ │ ├── jconfigint.h │ │ │ │ └── jversion.h │ │ │ ├── mbedtls_hxcpp/ │ │ │ │ └── mbedtls_config.h │ │ │ ├── ogg/ │ │ │ │ └── include/ │ │ │ │ └── ogg/ │ │ │ │ └── config_types.h │ │ │ ├── openal/ │ │ │ │ ├── alc/ │ │ │ │ │ └── hrtf_default.h │ │ │ │ ├── build/ │ │ │ │ │ ├── bsinc_inc.h │ │ │ │ │ ├── default-44100.mhr.h │ │ │ │ │ ├── default-48000.mhr.h │ │ │ │ │ └── version.h │ │ │ │ └── include/ │ │ │ │ ├── config-android.h │ │ │ │ ├── config-linux-x86_64.h │ │ │ │ ├── config-macos-arm64.h │ │ │ │ ├── config-macos-x86_64.h │ │ │ │ ├── config-windows-x86.h │ │ │ │ ├── config-windows-x86_64.h │ │ │ │ └── config.h │ │ │ ├── pixman/ │ │ │ │ ├── config.h │ │ │ │ └── pixman/ │ │ │ │ └── pixman-version.h │ │ │ ├── png/ │ │ │ │ └── pnglibconf.h │ │ │ └── sdl/ │ │ │ └── include/ │ │ │ ├── SDL2/ │ │ │ │ └── SDL.h │ │ │ ├── SDL_config.h │ │ │ ├── SDL_config_linux.h │ │ │ ├── SDL_config_macosx.h │ │ │ ├── SDL_config_rpi.h │ │ │ └── SDL_config_windows.h │ │ ├── efsw-files.xml │ │ ├── freetype-files.xml │ │ ├── harfbuzz-files.xml │ │ ├── jpeg-files.xml │ │ ├── lzma-files.xml │ │ ├── mbedtls-files.xml │ │ ├── mojoal-files.xml │ │ ├── neko-files.xml │ │ ├── ogg-files.xml │ │ ├── openal-files.xml │ │ ├── pixman-files.xml │ │ ├── png-files.xml │ │ ├── sdl-files.xml │ │ ├── tinyfiledialogs-files.xml │ │ ├── vorbis-files.xml │ │ ├── vpx-files.xml │ │ ├── webm-files.xml │ │ └── zlib-files.xml │ └── src/ │ ├── ExternalInterface.cpp │ ├── app/ │ │ └── ApplicationEvent.cpp │ ├── backend/ │ │ └── sdl/ │ │ ├── SDLApplication.cpp │ │ ├── SDLApplication.h │ │ ├── SDLCursor.h │ │ ├── SDLGamepad.cpp │ │ ├── SDLGamepad.h │ │ ├── SDLJoystick.cpp │ │ ├── SDLJoystick.h │ │ ├── SDLKeyCode.cpp │ │ ├── SDLMutex.cpp │ │ ├── SDLSystem.cpp │ │ ├── SDLWindow.cpp │ │ └── SDLWindow.h │ ├── graphics/ │ │ ├── Image.cpp │ │ ├── ImageBuffer.cpp │ │ ├── RenderEvent.cpp │ │ ├── cairo/ │ │ │ └── CairoBindings.cpp │ │ ├── format/ │ │ │ ├── JPEG.cpp │ │ │ └── PNG.cpp │ │ ├── opengl/ │ │ │ ├── OpenGL.h │ │ │ ├── OpenGLBindings.cpp │ │ │ ├── OpenGLBindings.h │ │ │ └── OpenGLExtensions.h │ │ └── utils/ │ │ └── ImageDataUtil.cpp │ ├── hashlink_main.c │ ├── hx/ │ │ └── CFFIExt.cpp │ ├── math/ │ │ ├── ColorMatrix.cpp │ │ ├── Matrix3.cpp │ │ ├── Rectangle.cpp │ │ └── Vector2.cpp │ ├── media/ │ │ ├── AudioBuffer.cpp │ │ ├── codecs/ │ │ │ └── vorbis/ │ │ │ ├── VorbisBindings.cpp │ │ │ └── VorbisFile.cpp │ │ ├── containers/ │ │ │ ├── OGG.cpp │ │ │ └── WAV.cpp │ │ └── openal/ │ │ └── OpenALBindings.cpp │ ├── net/ │ │ └── curl/ │ │ └── CURLBindings.cpp │ ├── system/ │ │ ├── CFFI.cpp │ │ ├── CFFIPointer.cpp │ │ ├── ClipboardEvent.cpp │ │ ├── Display.cpp │ │ ├── Display.mm │ │ ├── DisplayMode.cpp │ │ ├── FileWatcher.cpp │ │ ├── JNI.cpp │ │ ├── Locale.cpp │ │ ├── Locale.mm │ │ ├── OrientationEvent.cpp │ │ ├── SensorEvent.cpp │ │ ├── System.cpp │ │ ├── System.mm │ │ └── ValuePointer.cpp │ ├── text/ │ │ ├── Font.cpp │ │ └── harfbuzz/ │ │ └── HarfbuzzBindings.cpp │ ├── ui/ │ │ ├── DropEvent.cpp │ │ ├── FileDialog.cpp │ │ ├── GamepadEvent.cpp │ │ ├── Haptic.mm │ │ ├── JoystickEvent.cpp │ │ ├── KeyEvent.cpp │ │ ├── MouseEvent.cpp │ │ ├── TextEvent.cpp │ │ ├── TouchEvent.cpp │ │ └── WindowEvent.cpp │ ├── utils/ │ │ ├── ArrayBufferView.cpp │ │ ├── Bytes.cpp │ │ └── compress/ │ │ ├── LZMA.cpp │ │ └── Zlib.cpp │ └── vm/ │ └── NekoVM.cpp ├── release-checklist.md ├── run.n ├── src/ │ ├── cs/ │ │ └── ndll/ │ │ └── NDLLFunction.hx │ ├── haxe/ │ │ └── Timer.hx │ └── lime/ │ ├── _internal/ │ │ ├── backend/ │ │ │ ├── air/ │ │ │ │ ├── AIRApplication.hx │ │ │ │ └── AIRWindow.hx │ │ │ ├── flash/ │ │ │ │ ├── FlashApplication.hx │ │ │ │ ├── FlashAudioSource.hx │ │ │ │ ├── FlashHTTPRequest.hx │ │ │ │ └── FlashWindow.hx │ │ │ ├── html5/ │ │ │ │ ├── HTML5Application.hx │ │ │ │ ├── HTML5AudioSource.hx │ │ │ │ ├── HTML5HTTPRequest.hx │ │ │ │ ├── HTML5Thread.hx │ │ │ │ ├── HTML5WebGL2RenderContext.hx │ │ │ │ └── HTML5Window.hx │ │ │ └── native/ │ │ │ ├── NativeApplication.hx │ │ │ ├── NativeAudioSource.hx │ │ │ ├── NativeCFFI.hx │ │ │ ├── NativeHTTPRequest.hx │ │ │ ├── NativeOpenGLRenderContext.hx │ │ │ └── NativeWindow.hx │ │ ├── format/ │ │ │ ├── BMP.hx │ │ │ ├── Base64.hx │ │ │ ├── Deflate.hx │ │ │ ├── GZip.hx │ │ │ ├── JPEG.hx │ │ │ ├── LZMA.hx │ │ │ ├── PNG.hx │ │ │ └── Zlib.hx │ │ ├── graphics/ │ │ │ ├── ImageCanvasUtil.hx │ │ │ ├── ImageDataUtil.hx │ │ │ └── StackBlur.hx │ │ ├── macros/ │ │ │ ├── AssetsMacro.hx │ │ │ ├── CFFIMacro.hx │ │ │ ├── DefineMacro.hx │ │ │ ├── EventMacro.hx │ │ │ └── HTTPRequestMacro.hx │ │ └── unifill/ │ │ ├── CodePoint.hx │ │ ├── CodePointIter.hx │ │ ├── Exception.hx │ │ ├── InternalEncoding.hx │ │ ├── InternalEncodingBackwardIter.hx │ │ ├── InternalEncodingIter.hx │ │ ├── Unicode.hx │ │ ├── Unifill.hx │ │ ├── Utf16.hx │ │ ├── Utf32.hx │ │ └── Utf8.hx │ ├── app/ │ │ ├── Application.hx │ │ ├── Event.hx │ │ ├── Future.hx │ │ ├── IModule.hx │ │ ├── Module.hx │ │ └── Promise.hx │ ├── graphics/ │ │ ├── CairoRenderContext.hx │ │ ├── Canvas2DRenderContext.hx │ │ ├── DOMRenderContext.hx │ │ ├── FlashRenderContext.hx │ │ ├── Image.hx │ │ ├── ImageBuffer.hx │ │ ├── ImageChannel.hx │ │ ├── ImageFileFormat.hx │ │ ├── ImageType.hx │ │ ├── OpenGLES2RenderContext.hx │ │ ├── OpenGLES3RenderContext.hx │ │ ├── OpenGLRenderContext.hx │ │ ├── PixelFormat.hx │ │ ├── RenderContext.hx │ │ ├── RenderContextAttributes.hx │ │ ├── RenderContextType.hx │ │ ├── WebGL2RenderContext.hx │ │ ├── WebGLRenderContext.hx │ │ ├── cairo/ │ │ │ ├── Cairo.hx │ │ │ ├── CairoAntialias.hx │ │ │ ├── CairoContent.hx │ │ │ ├── CairoExtend.hx │ │ │ ├── CairoFTFontFace.hx │ │ │ ├── CairoFillRule.hx │ │ │ ├── CairoFilter.hx │ │ │ ├── CairoFontFace.hx │ │ │ ├── CairoFontOptions.hx │ │ │ ├── CairoFormat.hx │ │ │ ├── CairoGlyph.hx │ │ │ ├── CairoHintMetrics.hx │ │ │ ├── CairoHintStyle.hx │ │ │ ├── CairoImageSurface.hx │ │ │ ├── CairoLineCap.hx │ │ │ ├── CairoLineJoin.hx │ │ │ ├── CairoOperator.hx │ │ │ ├── CairoPattern.hx │ │ │ ├── CairoStatus.hx │ │ │ ├── CairoSubpixelOrder.hx │ │ │ └── CairoSurface.hx │ │ └── opengl/ │ │ ├── GL.hx │ │ ├── GLActiveInfo.hx │ │ ├── GLBuffer.hx │ │ ├── GLContextAttributes.hx │ │ ├── GLFramebuffer.hx │ │ ├── GLProgram.hx │ │ ├── GLQuery.hx │ │ ├── GLRenderbuffer.hx │ │ ├── GLSampler.hx │ │ ├── GLShader.hx │ │ ├── GLShaderPrecisionFormat.hx │ │ ├── GLSync.hx │ │ ├── GLTexture.hx │ │ ├── GLTransformFeedback.hx │ │ ├── GLUniformLocation.hx │ │ ├── GLVertexArrayObject.hx │ │ └── ext/ │ │ ├── AMD_compressed_3DC_texture.hx │ │ ├── AMD_compressed_ATC_texture.hx │ │ ├── AMD_performance_monitor.hx │ │ ├── AMD_program_binary_Z400.hx │ │ ├── ANGLE_framebuffer_blit.hx │ │ ├── ANGLE_framebuffer_multisample.hx │ │ ├── ANGLE_instanced_arrays.hx │ │ ├── ANGLE_pack_reverse_row_order.hx │ │ ├── ANGLE_texture_compression_dxt3.hx │ │ ├── ANGLE_texture_compression_dxt5.hx │ │ ├── ANGLE_texture_usage.hx │ │ ├── ANGLE_translated_shader_source.hx │ │ ├── APPLE_copy_texture_levels.hx │ │ ├── APPLE_framebuffer_multisample.hx │ │ ├── APPLE_rgb_422.hx │ │ ├── APPLE_sync.hx │ │ ├── APPLE_texture_format_BGRA8888.hx │ │ ├── APPLE_texture_max_level.hx │ │ ├── ARM_mali_program_binary.hx │ │ ├── ARM_mali_shader_binary.hx │ │ ├── ARM_rgba8.hx │ │ ├── DMP_shader_binary.hx │ │ ├── EXT_bgra.hx │ │ ├── EXT_blend_minmax.hx │ │ ├── EXT_color_buffer_float.hx │ │ ├── EXT_color_buffer_half_float.hx │ │ ├── EXT_debug_label.hx │ │ ├── EXT_debug_marker.hx │ │ ├── EXT_discard_framebuffer.hx │ │ ├── EXT_disjoint_timer_query.hx │ │ ├── EXT_frag_depth.hx │ │ ├── EXT_map_buffer_range.hx │ │ ├── EXT_multi_draw_arrays.hx │ │ ├── EXT_multisampled_render_to_texture.hx │ │ ├── EXT_multiview_draw_buffers.hx │ │ ├── EXT_occlusion_query_boolean.hx │ │ ├── EXT_packed_depth_stencil.hx │ │ ├── EXT_read_format_bgra.hx │ │ ├── EXT_robustness.hx │ │ ├── EXT_sRGB.hx │ │ ├── EXT_separate_shader_objects.hx │ │ ├── EXT_shader_framebuffer_fetch.hx │ │ ├── EXT_shader_texture_lod.hx │ │ ├── EXT_shadow_samplers.hx │ │ ├── EXT_texture_compression_dxt1.hx │ │ ├── EXT_texture_compression_s3tc.hx │ │ ├── EXT_texture_filter_anisotropic.hx │ │ ├── EXT_texture_format_BGRA8888.hx │ │ ├── EXT_texture_rg.hx │ │ ├── EXT_texture_storage.hx │ │ ├── EXT_texture_type_2_10_10_10_REV.hx │ │ ├── EXT_unpack_subimage.hx │ │ ├── FJ_shader_binary_GCCSO.hx │ │ ├── IMG_multisampled_render_to_texture.hx │ │ ├── IMG_program_binary.hx │ │ ├── IMG_read_format.hx │ │ ├── IMG_shader_binary.hx │ │ ├── IMG_texture_compression_pvrtc.hx │ │ ├── KHR_debug.hx │ │ ├── KHR_texture_compression_astc_ldr.hx │ │ ├── NVX_gpu_memory_info.hx │ │ ├── NV_coverage_sample.hx │ │ ├── NV_depth_nonlinear.hx │ │ ├── NV_draw_buffers.hx │ │ ├── NV_fbo_color_attachments.hx │ │ ├── NV_fence.hx │ │ ├── NV_read_buffer.hx │ │ ├── NV_read_buffer_front.hx │ │ ├── NV_read_depth.hx │ │ ├── NV_read_depth_stencil.hx │ │ ├── NV_read_stencil.hx │ │ ├── NV_texture_compression_s3tc_update.hx │ │ ├── NV_texture_npot_2D_mipmap.hx │ │ ├── OES_EGL_image.hx │ │ ├── OES_EGL_image_external.hx │ │ ├── OES_compressed_ETC1_RGB8_texture.hx │ │ ├── OES_compressed_paletted_texture.hx │ │ ├── OES_depth24.hx │ │ ├── OES_depth32.hx │ │ ├── OES_depth_texture.hx │ │ ├── OES_element_index_uint.hx │ │ ├── OES_get_program_binary.hx │ │ ├── OES_mapbuffer.hx │ │ ├── OES_packed_depth_stencil.hx │ │ ├── OES_required_internalformat.hx │ │ ├── OES_rgb8_rgba8.hx │ │ ├── OES_standard_derivatives.hx │ │ ├── OES_stencil1.hx │ │ ├── OES_stencil4.hx │ │ ├── OES_surfaceless_context.hx │ │ ├── OES_texture_3D.hx │ │ ├── OES_texture_float.hx │ │ ├── OES_texture_float_linear.hx │ │ ├── OES_texture_half_float.hx │ │ ├── OES_texture_half_float_linear.hx │ │ ├── OES_texture_npot.hx │ │ ├── OES_vertex_array_object.hx │ │ ├── OES_vertex_half_float.hx │ │ ├── OES_vertex_type_10_10_10_2.hx │ │ ├── QCOM_alpha_test.hx │ │ ├── QCOM_binning_control.hx │ │ ├── QCOM_driver_control.hx │ │ ├── QCOM_extended_get.hx │ │ ├── QCOM_extended_get2.hx │ │ ├── QCOM_perfmon_global_mode.hx │ │ ├── QCOM_tiled_rendering.hx │ │ ├── QCOM_writeonly_rendering.hx │ │ ├── VIV_shader_binary.hx │ │ ├── WEBGL_color_buffer_float.hx │ │ ├── WEBGL_compressed_texture_atc.hx │ │ ├── WEBGL_compressed_texture_etc.hx │ │ ├── WEBGL_compressed_texture_etc1.hx │ │ ├── WEBGL_compressed_texture_pvrtc.hx │ │ ├── WEBGL_compressed_texture_s3tc.hx │ │ ├── WEBGL_debug_renderer_info.hx │ │ ├── WEBGL_debug_shaders.hx │ │ ├── WEBGL_depth_texture.hx │ │ ├── WEBGL_draw_buffers.hx │ │ └── WEBGL_lose_context.hx │ ├── math/ │ │ ├── ARGB.hx │ │ ├── BGRA.hx │ │ ├── ColorMatrix.hx │ │ ├── Matrix3.hx │ │ ├── Matrix4.hx │ │ ├── RGBA.hx │ │ ├── Rectangle.hx │ │ ├── Vector2.hx │ │ └── Vector4.hx │ ├── media/ │ │ ├── AudioBuffer.hx │ │ ├── AudioContext.hx │ │ ├── AudioContextType.hx │ │ ├── AudioManager.hx │ │ ├── AudioSource.hx │ │ ├── FlashAudioContext.hx │ │ ├── HTML5AudioContext.hx │ │ ├── OpenALAudioContext.hx │ │ ├── WebAudioContext.hx │ │ ├── howlerjs/ │ │ │ ├── Howl.hx │ │ │ └── Howler.hx │ │ ├── openal/ │ │ │ ├── AL.hx │ │ │ ├── ALAuxiliaryEffectSlot.hx │ │ │ ├── ALBuffer.hx │ │ │ ├── ALC.hx │ │ │ ├── ALContext.hx │ │ │ ├── ALDevice.hx │ │ │ ├── ALEffect.hx │ │ │ ├── ALFilter.hx │ │ │ └── ALSource.hx │ │ └── vorbis/ │ │ ├── Vorbis.hx │ │ ├── VorbisComment.hx │ │ ├── VorbisFile.hx │ │ └── VorbisInfo.hx │ ├── net/ │ │ ├── HTTPRequest.hx │ │ ├── HTTPRequestHeader.hx │ │ ├── HTTPRequestMethod.hx │ │ ├── URIParser.hx │ │ ├── curl/ │ │ │ ├── CURL.hx │ │ │ ├── CURLCode.hx │ │ │ ├── CURLInfo.hx │ │ │ ├── CURLMulti.hx │ │ │ ├── CURLMultiCode.hx │ │ │ ├── CURLMultiMessage.hx │ │ │ ├── CURLMultiOption.hx │ │ │ ├── CURLOption.hx │ │ │ └── CURLVersion.hx │ │ └── oauth/ │ │ ├── OAuthClient.hx │ │ ├── OAuthConsumer.hx │ │ ├── OAuthRequest.hx │ │ ├── OAuthSignatureMethod.hx │ │ ├── OAuthToken.hx │ │ └── OAuthVersion.hx │ ├── system/ │ │ ├── BackgroundWorker.hx │ │ ├── CFFI.hx │ │ ├── CFFIPointer.hx │ │ ├── Clipboard.hx │ │ ├── Display.hx │ │ ├── DisplayMode.hx │ │ ├── Endian.hx │ │ ├── FileWatcher.hx │ │ ├── JNI.hx │ │ ├── Locale.hx │ │ ├── Orientation.hx │ │ ├── Sensor.hx │ │ ├── SensorType.hx │ │ ├── System.hx │ │ ├── ThreadPool.hx │ │ └── WorkOutput.hx │ ├── text/ │ │ ├── Font.hx │ │ ├── Glyph.hx │ │ ├── GlyphMetrics.hx │ │ ├── UTF8String.hx │ │ └── harfbuzz/ │ │ ├── HB.hx │ │ ├── HBBlob.hx │ │ ├── HBBuffer.hx │ │ ├── HBBufferClusterLevel.hx │ │ ├── HBBufferContentType.hx │ │ ├── HBBufferFlags.hx │ │ ├── HBBufferSerializeFlags.hx │ │ ├── HBBufferSerializeFormat.hx │ │ ├── HBDirection.hx │ │ ├── HBFTFont.hx │ │ ├── HBFace.hx │ │ ├── HBFeature.hx │ │ ├── HBFont.hx │ │ ├── HBGlyphExtents.hx │ │ ├── HBGlyphInfo.hx │ │ ├── HBGlyphPosition.hx │ │ ├── HBLanguage.hx │ │ ├── HBMemoryMode.hx │ │ ├── HBScript.hx │ │ ├── HBSegmentProperties.hx │ │ └── HBSet.hx │ ├── tools/ │ │ ├── AIRHelper.hx │ │ ├── AndroidHelper.hx │ │ ├── ApplicationData.hx │ │ ├── Architecture.hx │ │ ├── Asset.hx │ │ ├── AssetEncoding.hx │ │ ├── AssetHelper.hx │ │ ├── AssetType.hx │ │ ├── CLICommand.hx │ │ ├── CLIHelper.hx │ │ ├── CPPHelper.hx │ │ ├── CSHelper.hx │ │ ├── Command.hx │ │ ├── CommandHelper.hx │ │ ├── ConfigData.hx │ │ ├── ConfigHelper.hx │ │ ├── Dependency.hx │ │ ├── DeploymentHelper.hx │ │ ├── ElectronHelper.hx │ │ ├── FlashHelper.hx │ │ ├── GUID.hx │ │ ├── HTML5Helper.hx │ │ ├── HXProject.hx │ │ ├── HashlinkHelper.hx │ │ ├── IOSHelper.hx │ │ ├── Icon.hx │ │ ├── IconHelper.hx │ │ ├── ImageHelper.hx │ │ ├── JavaHelper.hx │ │ ├── Keystore.hx │ │ ├── LaunchStoryboard.hx │ │ ├── Library.hx │ │ ├── MetaData.hx │ │ ├── ModuleData.hx │ │ ├── ModuleHelper.hx │ │ ├── NekoHelper.hx │ │ ├── NodeJSHelper.hx │ │ ├── Orientation.hx │ │ ├── Platform.hx │ │ ├── PlatformTarget.hx │ │ ├── PlatformTargetMain.hx │ │ ├── PlatformType.hx │ │ ├── ProjectHelper.hx │ │ ├── ProjectXMLParser.hx │ │ ├── SplashScreen.hx │ │ ├── TVOSHelper.hx │ │ ├── TizenHelper.hx │ │ ├── WindowData.hx │ │ └── XCodeHelper.hx │ ├── ui/ │ │ ├── FileDialog.hx │ │ ├── FileDialogType.hx │ │ ├── Gamepad.hx │ │ ├── GamepadAxis.hx │ │ ├── GamepadButton.hx │ │ ├── Haptic.hx │ │ ├── Joystick.hx │ │ ├── JoystickHatPosition.hx │ │ ├── KeyCode.hx │ │ ├── KeyModifier.hx │ │ ├── MouseButton.hx │ │ ├── MouseCursor.hx │ │ ├── MouseWheelMode.hx │ │ ├── ScanCode.hx │ │ ├── Touch.hx │ │ ├── Window.hx │ │ └── WindowAttributes.hx │ └── utils/ │ ├── ArrayBuffer.hx │ ├── ArrayBufferView.hx │ ├── AssetBundle.hx │ ├── AssetCache.hx │ ├── AssetLibrary.hx │ ├── AssetManifest.hx │ ├── AssetType.hx │ ├── Assets.hx │ ├── BytePointer.hx │ ├── Bytes.hx │ ├── CompressionAlgorithm.hx │ ├── DataPointer.hx │ ├── DataView.hx │ ├── Float32Array.hx │ ├── Float64Array.hx │ ├── Int16Array.hx │ ├── Int32Array.hx │ ├── Int8Array.hx │ ├── Log.hx │ ├── LogLevel.hx │ ├── ObjectPool.hx │ ├── PackedAssetLibrary.hx │ ├── Preloader.hx │ ├── Resource.hx │ ├── UInt16Array.hx │ ├── UInt32Array.hx │ ├── UInt8Array.hx │ └── UInt8ClampedArray.hx ├── svg.n ├── templates/ │ ├── air/ │ │ ├── debug.pfx │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── template/ │ │ └── application.xml │ ├── android/ │ │ ├── MainActivity.java │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── template/ │ │ ├── app/ │ │ │ ├── build.gradle │ │ │ ├── libs/ │ │ │ │ └── readme.txt │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ ├── haxe/ │ │ │ │ │ └── lime/ │ │ │ │ │ └── GameActivity.java │ │ │ │ └── libsdl/ │ │ │ │ └── app/ │ │ │ │ ├── HIDDevice.java │ │ │ │ ├── HIDDeviceBLESteamController.java │ │ │ │ ├── HIDDeviceManager.java │ │ │ │ ├── HIDDeviceUSB.java │ │ │ │ ├── SDL.java │ │ │ │ ├── SDLActivity.java │ │ │ │ ├── SDLAudioManager.java │ │ │ │ ├── SDLControllerManager.java │ │ │ │ └── SDLSurface.java │ │ │ └── jniLibs/ │ │ │ └── armeabi/ │ │ │ └── readme.txt │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── local.properties │ │ └── settings.gradle │ ├── bin/ │ │ ├── batik/ │ │ │ ├── batik-rasterizer.jar │ │ │ ├── batik-slideshow.jar │ │ │ ├── batik-squiggle.jar │ │ │ ├── batik-svgpp.jar │ │ │ ├── batik-ttf2svg.jar │ │ │ ├── batik.jar │ │ │ └── lib/ │ │ │ ├── batik-anim.jar │ │ │ ├── batik-awt-util.jar │ │ │ ├── batik-bridge.jar │ │ │ ├── batik-codec.jar │ │ │ ├── batik-css.jar │ │ │ ├── batik-dom.jar │ │ │ ├── batik-ext.jar │ │ │ ├── batik-extension.jar │ │ │ ├── batik-gui-util.jar │ │ │ ├── batik-gvt.jar │ │ │ ├── batik-parser.jar │ │ │ ├── batik-script.jar │ │ │ ├── batik-svg-dom.jar │ │ │ ├── batik-svggen.jar │ │ │ ├── batik-swing.jar │ │ │ ├── batik-transcoder.jar │ │ │ ├── batik-util.jar │ │ │ ├── batik-xml.jar │ │ │ ├── js.jar │ │ │ ├── pdf-transcoder.jar │ │ │ ├── xalan-2.6.0.jar │ │ │ ├── xerces_2_5_0.jar │ │ │ ├── xml-apis-ext.jar │ │ │ └── xml-apis.jar │ │ ├── compiler.jar │ │ ├── debug.keystore │ │ ├── debug.p12 │ │ ├── fruitstrap │ │ ├── hxswfml.n │ │ ├── ios-deploy │ │ ├── lime.sh │ │ ├── node/ │ │ │ ├── http-server/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── bin/ │ │ │ │ │ └── http-server │ │ │ │ ├── doc/ │ │ │ │ │ └── http-server.1 │ │ │ │ ├── lib/ │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── aliases.json │ │ │ │ │ │ ├── defaults.json │ │ │ │ │ │ ├── etag.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── opts.js │ │ │ │ │ │ ├── show-dir/ │ │ │ │ │ │ │ ├── icons.json │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── last-modified-to-string.js │ │ │ │ │ │ │ ├── perms-to-string.js │ │ │ │ │ │ │ ├── size-to-string.js │ │ │ │ │ │ │ ├── sort-files.js │ │ │ │ │ │ │ └── styles.js │ │ │ │ │ │ └── status-handlers.js │ │ │ │ │ ├── http-server.js │ │ │ │ │ └── shims/ │ │ │ │ │ └── https-server-shim.js │ │ │ │ ├── node_modules/ │ │ │ │ │ ├── .package-lock.json │ │ │ │ │ ├── ansi-styles/ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── license │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── async/ │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── all.js │ │ │ │ │ │ ├── allLimit.js │ │ │ │ │ │ ├── allSeries.js │ │ │ │ │ │ ├── any.js │ │ │ │ │ │ ├── anyLimit.js │ │ │ │ │ │ ├── anySeries.js │ │ │ │ │ │ ├── apply.js │ │ │ │ │ │ ├── applyEach.js │ │ │ │ │ │ ├── applyEachSeries.js │ │ │ │ │ │ ├── asyncify.js │ │ │ │ │ │ ├── auto.js │ │ │ │ │ │ ├── autoInject.js │ │ │ │ │ │ ├── bower.json │ │ │ │ │ │ ├── cargo.js │ │ │ │ │ │ ├── compose.js │ │ │ │ │ │ ├── concat.js │ │ │ │ │ │ ├── concatLimit.js │ │ │ │ │ │ ├── concatSeries.js │ │ │ │ │ │ ├── constant.js │ │ │ │ │ │ ├── detect.js │ │ │ │ │ │ ├── detectLimit.js │ │ │ │ │ │ ├── detectSeries.js │ │ │ │ │ │ ├── dir.js │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ ├── async.js │ │ │ │ │ │ │ ├── async.min.js │ │ │ │ │ │ │ └── async.min.map │ │ │ │ │ │ ├── doDuring.js │ │ │ │ │ │ ├── doUntil.js │ │ │ │ │ │ ├── doWhilst.js │ │ │ │ │ │ ├── during.js │ │ │ │ │ │ ├── each.js │ │ │ │ │ │ ├── eachLimit.js │ │ │ │ │ │ ├── eachOf.js │ │ │ │ │ │ ├── eachOfLimit.js │ │ │ │ │ │ ├── eachOfSeries.js │ │ │ │ │ │ ├── eachSeries.js │ │ │ │ │ │ ├── ensureAsync.js │ │ │ │ │ │ ├── every.js │ │ │ │ │ │ ├── everyLimit.js │ │ │ │ │ │ ├── everySeries.js │ │ │ │ │ │ ├── filter.js │ │ │ │ │ │ ├── filterLimit.js │ │ │ │ │ │ ├── filterSeries.js │ │ │ │ │ │ ├── find.js │ │ │ │ │ │ ├── findLimit.js │ │ │ │ │ │ ├── findSeries.js │ │ │ │ │ │ ├── foldl.js │ │ │ │ │ │ ├── foldr.js │ │ │ │ │ │ ├── forEach.js │ │ │ │ │ │ ├── forEachLimit.js │ │ │ │ │ │ ├── forEachOf.js │ │ │ │ │ │ ├── forEachOfLimit.js │ │ │ │ │ │ ├── forEachOfSeries.js │ │ │ │ │ │ ├── forEachSeries.js │ │ │ │ │ │ ├── forever.js │ │ │ │ │ │ ├── groupBy.js │ │ │ │ │ │ ├── groupByLimit.js │ │ │ │ │ │ ├── groupBySeries.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── inject.js │ │ │ │ │ │ ├── internal/ │ │ │ │ │ │ │ ├── DoublyLinkedList.js │ │ │ │ │ │ │ ├── applyEach.js │ │ │ │ │ │ │ ├── breakLoop.js │ │ │ │ │ │ │ ├── consoleFunc.js │ │ │ │ │ │ │ ├── createTester.js │ │ │ │ │ │ │ ├── doLimit.js │ │ │ │ │ │ │ ├── doParallel.js │ │ │ │ │ │ │ ├── doParallelLimit.js │ │ │ │ │ │ │ ├── eachOfLimit.js │ │ │ │ │ │ │ ├── filter.js │ │ │ │ │ │ │ ├── findGetResult.js │ │ │ │ │ │ │ ├── getIterator.js │ │ │ │ │ │ │ ├── initialParams.js │ │ │ │ │ │ │ ├── iterator.js │ │ │ │ │ │ │ ├── map.js │ │ │ │ │ │ │ ├── notId.js │ │ │ │ │ │ │ ├── once.js │ │ │ │ │ │ │ ├── onlyOnce.js │ │ │ │ │ │ │ ├── parallel.js │ │ │ │ │ │ │ ├── queue.js │ │ │ │ │ │ │ ├── reject.js │ │ │ │ │ │ │ ├── setImmediate.js │ │ │ │ │ │ │ ├── slice.js │ │ │ │ │ │ │ ├── withoutIndex.js │ │ │ │ │ │ │ └── wrapAsync.js │ │ │ │ │ │ ├── log.js │ │ │ │ │ │ ├── map.js │ │ │ │ │ │ ├── mapLimit.js │ │ │ │ │ │ ├── mapSeries.js │ │ │ │ │ │ ├── mapValues.js │ │ │ │ │ │ ├── mapValuesLimit.js │ │ │ │ │ │ ├── mapValuesSeries.js │ │ │ │ │ │ ├── memoize.js │ │ │ │ │ │ ├── nextTick.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── parallel.js │ │ │ │ │ │ ├── parallelLimit.js │ │ │ │ │ │ ├── priorityQueue.js │ │ │ │ │ │ ├── queue.js │ │ │ │ │ │ ├── race.js │ │ │ │ │ │ ├── reduce.js │ │ │ │ │ │ ├── reduceRight.js │ │ │ │ │ │ ├── reflect.js │ │ │ │ │ │ ├── reflectAll.js │ │ │ │ │ │ ├── reject.js │ │ │ │ │ │ ├── rejectLimit.js │ │ │ │ │ │ ├── rejectSeries.js │ │ │ │ │ │ ├── retry.js │ │ │ │ │ │ ├── retryable.js │ │ │ │ │ │ ├── select.js │ │ │ │ │ │ ├── selectLimit.js │ │ │ │ │ │ ├── selectSeries.js │ │ │ │ │ │ ├── seq.js │ │ │ │ │ │ ├── series.js │ │ │ │ │ │ ├── setImmediate.js │ │ │ │ │ │ ├── some.js │ │ │ │ │ │ ├── someLimit.js │ │ │ │ │ │ ├── someSeries.js │ │ │ │ │ │ ├── sortBy.js │ │ │ │ │ │ ├── timeout.js │ │ │ │ │ │ ├── times.js │ │ │ │ │ │ ├── timesLimit.js │ │ │ │ │ │ ├── timesSeries.js │ │ │ │ │ │ ├── transform.js │ │ │ │ │ │ ├── tryEach.js │ │ │ │ │ │ ├── unmemoize.js │ │ │ │ │ │ ├── until.js │ │ │ │ │ │ ├── waterfall.js │ │ │ │ │ │ ├── whilst.js │ │ │ │ │ │ └── wrapSync.js │ │ │ │ │ ├── basic-auth/ │ │ │ │ │ │ ├── HISTORY.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── chalk/ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ ├── license │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── readme.md │ │ │ │ │ │ └── source/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── templates.js │ │ │ │ │ │ └── util.js │ │ │ │ │ ├── color-convert/ │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── conversions.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── route.js │ │ │ │ │ ├── color-name/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── corser/ │ │ │ │ │ │ ├── .npmignore │ │ │ │ │ │ ├── .travis.yml │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ └── corser.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── debug/ │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── node.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── src/ │ │ │ │ │ │ ├── browser.js │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── node.js │ │ │ │ │ ├── eventemitter3/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── umd/ │ │ │ │ │ │ ├── eventemitter3.js │ │ │ │ │ │ ├── eventemitter3.min.js │ │ │ │ │ │ └── eventemitter3.min.js.map │ │ │ │ │ ├── follow-redirects/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── debug.js │ │ │ │ │ │ ├── http.js │ │ │ │ │ │ ├── https.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── has-flag/ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── license │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── he/ │ │ │ │ │ │ ├── LICENSE-MIT.txt │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── bin/ │ │ │ │ │ │ │ └── he │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── man/ │ │ │ │ │ │ │ └── he.1 │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── html-encoding-sniffer/ │ │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ └── html-encoding-sniffer.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── http-proxy/ │ │ │ │ │ │ ├── .auto-changelog │ │ │ │ │ │ ├── .gitattributes │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── CODE_OF_CONDUCT.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── codecov.yml │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── http-proxy/ │ │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ └── passes/ │ │ │ │ │ │ │ │ ├── web-incoming.js │ │ │ │ │ │ │ │ ├── web-outgoing.js │ │ │ │ │ │ │ │ └── ws-incoming.js │ │ │ │ │ │ │ └── http-proxy.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── renovate.json │ │ │ │ │ ├── iconv-lite/ │ │ │ │ │ │ ├── .github/ │ │ │ │ │ │ │ └── dependabot.yml │ │ │ │ │ │ ├── Changelog.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── encodings/ │ │ │ │ │ │ │ ├── dbcs-codec.js │ │ │ │ │ │ │ ├── dbcs-data.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── internal.js │ │ │ │ │ │ │ ├── sbcs-codec.js │ │ │ │ │ │ │ ├── sbcs-data-generated.js │ │ │ │ │ │ │ ├── sbcs-data.js │ │ │ │ │ │ │ ├── tables/ │ │ │ │ │ │ │ │ ├── big5-added.json │ │ │ │ │ │ │ │ ├── cp936.json │ │ │ │ │ │ │ │ ├── cp949.json │ │ │ │ │ │ │ │ ├── cp950.json │ │ │ │ │ │ │ │ ├── eucjp.json │ │ │ │ │ │ │ │ ├── gb18030-ranges.json │ │ │ │ │ │ │ │ ├── gbk-added.json │ │ │ │ │ │ │ │ └── shiftjis.json │ │ │ │ │ │ │ ├── utf16.js │ │ │ │ │ │ │ ├── utf32.js │ │ │ │ │ │ │ └── utf7.js │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── bom-handling.js │ │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── streams.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── lodash/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── _DataView.js │ │ │ │ │ │ ├── _Hash.js │ │ │ │ │ │ ├── _LazyWrapper.js │ │ │ │ │ │ ├── _ListCache.js │ │ │ │ │ │ ├── _LodashWrapper.js │ │ │ │ │ │ ├── _Map.js │ │ │ │ │ │ ├── _MapCache.js │ │ │ │ │ │ ├── _Promise.js │ │ │ │ │ │ ├── _Set.js │ │ │ │ │ │ ├── _SetCache.js │ │ │ │ │ │ ├── _Stack.js │ │ │ │ │ │ ├── _Symbol.js │ │ │ │ │ │ ├── _Uint8Array.js │ │ │ │ │ │ ├── _WeakMap.js │ │ │ │ │ │ ├── _apply.js │ │ │ │ │ │ ├── _arrayAggregator.js │ │ │ │ │ │ ├── _arrayEach.js │ │ │ │ │ │ ├── _arrayEachRight.js │ │ │ │ │ │ ├── _arrayEvery.js │ │ │ │ │ │ ├── _arrayFilter.js │ │ │ │ │ │ ├── _arrayIncludes.js │ │ │ │ │ │ ├── _arrayIncludesWith.js │ │ │ │ │ │ ├── _arrayLikeKeys.js │ │ │ │ │ │ ├── _arrayMap.js │ │ │ │ │ │ ├── _arrayPush.js │ │ │ │ │ │ ├── _arrayReduce.js │ │ │ │ │ │ ├── _arrayReduceRight.js │ │ │ │ │ │ ├── _arraySample.js │ │ │ │ │ │ ├── _arraySampleSize.js │ │ │ │ │ │ ├── _arrayShuffle.js │ │ │ │ │ │ ├── _arraySome.js │ │ │ │ │ │ ├── _asciiSize.js │ │ │ │ │ │ ├── _asciiToArray.js │ │ │ │ │ │ ├── _asciiWords.js │ │ │ │ │ │ ├── _assignMergeValue.js │ │ │ │ │ │ ├── _assignValue.js │ │ │ │ │ │ ├── _assocIndexOf.js │ │ │ │ │ │ ├── _baseAggregator.js │ │ │ │ │ │ ├── _baseAssign.js │ │ │ │ │ │ ├── _baseAssignIn.js │ │ │ │ │ │ ├── _baseAssignValue.js │ │ │ │ │ │ ├── _baseAt.js │ │ │ │ │ │ ├── _baseClamp.js │ │ │ │ │ │ ├── _baseClone.js │ │ │ │ │ │ ├── _baseConforms.js │ │ │ │ │ │ ├── _baseConformsTo.js │ │ │ │ │ │ ├── _baseCreate.js │ │ │ │ │ │ ├── _baseDelay.js │ │ │ │ │ │ ├── _baseDifference.js │ │ │ │ │ │ ├── _baseEach.js │ │ │ │ │ │ ├── _baseEachRight.js │ │ │ │ │ │ ├── _baseEvery.js │ │ │ │ │ │ ├── _baseExtremum.js │ │ │ │ │ │ ├── _baseFill.js │ │ │ │ │ │ ├── _baseFilter.js │ │ │ │ │ │ ├── _baseFindIndex.js │ │ │ │ │ │ ├── _baseFindKey.js │ │ │ │ │ │ ├── _baseFlatten.js │ │ │ │ │ │ ├── _baseFor.js │ │ │ │ │ │ ├── _baseForOwn.js │ │ │ │ │ │ ├── _baseForOwnRight.js │ │ │ │ │ │ ├── _baseForRight.js │ │ │ │ │ │ ├── _baseFunctions.js │ │ │ │ │ │ ├── _baseGet.js │ │ │ │ │ │ ├── _baseGetAllKeys.js │ │ │ │ │ │ ├── _baseGetTag.js │ │ │ │ │ │ ├── _baseGt.js │ │ │ │ │ │ ├── _baseHas.js │ │ │ │ │ │ ├── _baseHasIn.js │ │ │ │ │ │ ├── _baseInRange.js │ │ │ │ │ │ ├── _baseIndexOf.js │ │ │ │ │ │ ├── _baseIndexOfWith.js │ │ │ │ │ │ ├── _baseIntersection.js │ │ │ │ │ │ ├── _baseInverter.js │ │ │ │ │ │ ├── _baseInvoke.js │ │ │ │ │ │ ├── _baseIsArguments.js │ │ │ │ │ │ ├── _baseIsArrayBuffer.js │ │ │ │ │ │ ├── _baseIsDate.js │ │ │ │ │ │ ├── _baseIsEqual.js │ │ │ │ │ │ ├── _baseIsEqualDeep.js │ │ │ │ │ │ ├── _baseIsMap.js │ │ │ │ │ │ ├── _baseIsMatch.js │ │ │ │ │ │ ├── _baseIsNaN.js │ │ │ │ │ │ ├── _baseIsNative.js │ │ │ │ │ │ ├── _baseIsRegExp.js │ │ │ │ │ │ ├── _baseIsSet.js │ │ │ │ │ │ ├── _baseIsTypedArray.js │ │ │ │ │ │ ├── _baseIteratee.js │ │ │ │ │ │ ├── _baseKeys.js │ │ │ │ │ │ ├── _baseKeysIn.js │ │ │ │ │ │ ├── _baseLodash.js │ │ │ │ │ │ ├── _baseLt.js │ │ │ │ │ │ ├── _baseMap.js │ │ │ │ │ │ ├── _baseMatches.js │ │ │ │ │ │ ├── _baseMatchesProperty.js │ │ │ │ │ │ ├── _baseMean.js │ │ │ │ │ │ ├── _baseMerge.js │ │ │ │ │ │ ├── _baseMergeDeep.js │ │ │ │ │ │ ├── _baseNth.js │ │ │ │ │ │ ├── _baseOrderBy.js │ │ │ │ │ │ ├── _basePick.js │ │ │ │ │ │ ├── _basePickBy.js │ │ │ │ │ │ ├── _baseProperty.js │ │ │ │ │ │ ├── _basePropertyDeep.js │ │ │ │ │ │ ├── _basePropertyOf.js │ │ │ │ │ │ ├── _basePullAll.js │ │ │ │ │ │ ├── _basePullAt.js │ │ │ │ │ │ ├── _baseRandom.js │ │ │ │ │ │ ├── _baseRange.js │ │ │ │ │ │ ├── _baseReduce.js │ │ │ │ │ │ ├── _baseRepeat.js │ │ │ │ │ │ ├── _baseRest.js │ │ │ │ │ │ ├── _baseSample.js │ │ │ │ │ │ ├── _baseSampleSize.js │ │ │ │ │ │ ├── _baseSet.js │ │ │ │ │ │ ├── _baseSetData.js │ │ │ │ │ │ ├── _baseSetToString.js │ │ │ │ │ │ ├── _baseShuffle.js │ │ │ │ │ │ ├── _baseSlice.js │ │ │ │ │ │ ├── _baseSome.js │ │ │ │ │ │ ├── _baseSortBy.js │ │ │ │ │ │ ├── _baseSortedIndex.js │ │ │ │ │ │ ├── _baseSortedIndexBy.js │ │ │ │ │ │ ├── _baseSortedUniq.js │ │ │ │ │ │ ├── _baseSum.js │ │ │ │ │ │ ├── _baseTimes.js │ │ │ │ │ │ ├── _baseToNumber.js │ │ │ │ │ │ ├── _baseToPairs.js │ │ │ │ │ │ ├── _baseToString.js │ │ │ │ │ │ ├── _baseTrim.js │ │ │ │ │ │ ├── _baseUnary.js │ │ │ │ │ │ ├── _baseUniq.js │ │ │ │ │ │ ├── _baseUnset.js │ │ │ │ │ │ ├── _baseUpdate.js │ │ │ │ │ │ ├── _baseValues.js │ │ │ │ │ │ ├── _baseWhile.js │ │ │ │ │ │ ├── _baseWrapperValue.js │ │ │ │ │ │ ├── _baseXor.js │ │ │ │ │ │ ├── _baseZipObject.js │ │ │ │ │ │ ├── _cacheHas.js │ │ │ │ │ │ ├── _castArrayLikeObject.js │ │ │ │ │ │ ├── _castFunction.js │ │ │ │ │ │ ├── _castPath.js │ │ │ │ │ │ ├── _castRest.js │ │ │ │ │ │ ├── _castSlice.js │ │ │ │ │ │ ├── _charsEndIndex.js │ │ │ │ │ │ ├── _charsStartIndex.js │ │ │ │ │ │ ├── _cloneArrayBuffer.js │ │ │ │ │ │ ├── _cloneBuffer.js │ │ │ │ │ │ ├── _cloneDataView.js │ │ │ │ │ │ ├── _cloneRegExp.js │ │ │ │ │ │ ├── _cloneSymbol.js │ │ │ │ │ │ ├── _cloneTypedArray.js │ │ │ │ │ │ ├── _compareAscending.js │ │ │ │ │ │ ├── _compareMultiple.js │ │ │ │ │ │ ├── _composeArgs.js │ │ │ │ │ │ ├── _composeArgsRight.js │ │ │ │ │ │ ├── _copyArray.js │ │ │ │ │ │ ├── _copyObject.js │ │ │ │ │ │ ├── _copySymbols.js │ │ │ │ │ │ ├── _copySymbolsIn.js │ │ │ │ │ │ ├── _coreJsData.js │ │ │ │ │ │ ├── _countHolders.js │ │ │ │ │ │ ├── _createAggregator.js │ │ │ │ │ │ ├── _createAssigner.js │ │ │ │ │ │ ├── _createBaseEach.js │ │ │ │ │ │ ├── _createBaseFor.js │ │ │ │ │ │ ├── _createBind.js │ │ │ │ │ │ ├── _createCaseFirst.js │ │ │ │ │ │ ├── _createCompounder.js │ │ │ │ │ │ ├── _createCtor.js │ │ │ │ │ │ ├── _createCurry.js │ │ │ │ │ │ ├── _createFind.js │ │ │ │ │ │ ├── _createFlow.js │ │ │ │ │ │ ├── _createHybrid.js │ │ │ │ │ │ ├── _createInverter.js │ │ │ │ │ │ ├── _createMathOperation.js │ │ │ │ │ │ ├── _createOver.js │ │ │ │ │ │ ├── _createPadding.js │ │ │ │ │ │ ├── _createPartial.js │ │ │ │ │ │ ├── _createRange.js │ │ │ │ │ │ ├── _createRecurry.js │ │ │ │ │ │ ├── _createRelationalOperation.js │ │ │ │ │ │ ├── _createRound.js │ │ │ │ │ │ ├── _createSet.js │ │ │ │ │ │ ├── _createToPairs.js │ │ │ │ │ │ ├── _createWrap.js │ │ │ │ │ │ ├── _customDefaultsAssignIn.js │ │ │ │ │ │ ├── _customDefaultsMerge.js │ │ │ │ │ │ ├── _customOmitClone.js │ │ │ │ │ │ ├── _deburrLetter.js │ │ │ │ │ │ ├── _defineProperty.js │ │ │ │ │ │ ├── _equalArrays.js │ │ │ │ │ │ ├── _equalByTag.js │ │ │ │ │ │ ├── _equalObjects.js │ │ │ │ │ │ ├── _escapeHtmlChar.js │ │ │ │ │ │ ├── _escapeStringChar.js │ │ │ │ │ │ ├── _flatRest.js │ │ │ │ │ │ ├── _freeGlobal.js │ │ │ │ │ │ ├── _getAllKeys.js │ │ │ │ │ │ ├── _getAllKeysIn.js │ │ │ │ │ │ ├── _getData.js │ │ │ │ │ │ ├── _getFuncName.js │ │ │ │ │ │ ├── _getHolder.js │ │ │ │ │ │ ├── _getMapData.js │ │ │ │ │ │ ├── _getMatchData.js │ │ │ │ │ │ ├── _getNative.js │ │ │ │ │ │ ├── _getPrototype.js │ │ │ │ │ │ ├── _getRawTag.js │ │ │ │ │ │ ├── _getSymbols.js │ │ │ │ │ │ ├── _getSymbolsIn.js │ │ │ │ │ │ ├── _getTag.js │ │ │ │ │ │ ├── _getValue.js │ │ │ │ │ │ ├── _getView.js │ │ │ │ │ │ ├── _getWrapDetails.js │ │ │ │ │ │ ├── _hasPath.js │ │ │ │ │ │ ├── _hasUnicode.js │ │ │ │ │ │ ├── _hasUnicodeWord.js │ │ │ │ │ │ ├── _hashClear.js │ │ │ │ │ │ ├── _hashDelete.js │ │ │ │ │ │ ├── _hashGet.js │ │ │ │ │ │ ├── _hashHas.js │ │ │ │ │ │ ├── _hashSet.js │ │ │ │ │ │ ├── _initCloneArray.js │ │ │ │ │ │ ├── _initCloneByTag.js │ │ │ │ │ │ ├── _initCloneObject.js │ │ │ │ │ │ ├── _insertWrapDetails.js │ │ │ │ │ │ ├── _isFlattenable.js │ │ │ │ │ │ ├── _isIndex.js │ │ │ │ │ │ ├── _isIterateeCall.js │ │ │ │ │ │ ├── _isKey.js │ │ │ │ │ │ ├── _isKeyable.js │ │ │ │ │ │ ├── _isLaziable.js │ │ │ │ │ │ ├── _isMaskable.js │ │ │ │ │ │ ├── _isMasked.js │ │ │ │ │ │ ├── _isPrototype.js │ │ │ │ │ │ ├── _isStrictComparable.js │ │ │ │ │ │ ├── _iteratorToArray.js │ │ │ │ │ │ ├── _lazyClone.js │ │ │ │ │ │ ├── _lazyReverse.js │ │ │ │ │ │ ├── _lazyValue.js │ │ │ │ │ │ ├── _listCacheClear.js │ │ │ │ │ │ ├── _listCacheDelete.js │ │ │ │ │ │ ├── _listCacheGet.js │ │ │ │ │ │ ├── _listCacheHas.js │ │ │ │ │ │ ├── _listCacheSet.js │ │ │ │ │ │ ├── _mapCacheClear.js │ │ │ │ │ │ ├── _mapCacheDelete.js │ │ │ │ │ │ ├── _mapCacheGet.js │ │ │ │ │ │ ├── _mapCacheHas.js │ │ │ │ │ │ ├── _mapCacheSet.js │ │ │ │ │ │ ├── _mapToArray.js │ │ │ │ │ │ ├── _matchesStrictComparable.js │ │ │ │ │ │ ├── _memoizeCapped.js │ │ │ │ │ │ ├── _mergeData.js │ │ │ │ │ │ ├── _metaMap.js │ │ │ │ │ │ ├── _nativeCreate.js │ │ │ │ │ │ ├── _nativeKeys.js │ │ │ │ │ │ ├── _nativeKeysIn.js │ │ │ │ │ │ ├── _nodeUtil.js │ │ │ │ │ │ ├── _objectToString.js │ │ │ │ │ │ ├── _overArg.js │ │ │ │ │ │ ├── _overRest.js │ │ │ │ │ │ ├── _parent.js │ │ │ │ │ │ ├── _reEscape.js │ │ │ │ │ │ ├── _reEvaluate.js │ │ │ │ │ │ ├── _reInterpolate.js │ │ │ │ │ │ ├── _realNames.js │ │ │ │ │ │ ├── _reorder.js │ │ │ │ │ │ ├── _replaceHolders.js │ │ │ │ │ │ ├── _root.js │ │ │ │ │ │ ├── _safeGet.js │ │ │ │ │ │ ├── _setCacheAdd.js │ │ │ │ │ │ ├── _setCacheHas.js │ │ │ │ │ │ ├── _setData.js │ │ │ │ │ │ ├── _setToArray.js │ │ │ │ │ │ ├── _setToPairs.js │ │ │ │ │ │ ├── _setToString.js │ │ │ │ │ │ ├── _setWrapToString.js │ │ │ │ │ │ ├── _shortOut.js │ │ │ │ │ │ ├── _shuffleSelf.js │ │ │ │ │ │ ├── _stackClear.js │ │ │ │ │ │ ├── _stackDelete.js │ │ │ │ │ │ ├── _stackGet.js │ │ │ │ │ │ ├── _stackHas.js │ │ │ │ │ │ ├── _stackSet.js │ │ │ │ │ │ ├── _strictIndexOf.js │ │ │ │ │ │ ├── _strictLastIndexOf.js │ │ │ │ │ │ ├── _stringSize.js │ │ │ │ │ │ ├── _stringToArray.js │ │ │ │ │ │ ├── _stringToPath.js │ │ │ │ │ │ ├── _toKey.js │ │ │ │ │ │ ├── _toSource.js │ │ │ │ │ │ ├── _trimmedEndIndex.js │ │ │ │ │ │ ├── _unescapeHtmlChar.js │ │ │ │ │ │ ├── _unicodeSize.js │ │ │ │ │ │ ├── _unicodeToArray.js │ │ │ │ │ │ ├── _unicodeWords.js │ │ │ │ │ │ ├── _updateWrapDetails.js │ │ │ │ │ │ ├── _wrapperClone.js │ │ │ │ │ │ ├── add.js │ │ │ │ │ │ ├── after.js │ │ │ │ │ │ ├── array.js │ │ │ │ │ │ ├── ary.js │ │ │ │ │ │ ├── assign.js │ │ │ │ │ │ ├── assignIn.js │ │ │ │ │ │ ├── assignInWith.js │ │ │ │ │ │ ├── assignWith.js │ │ │ │ │ │ ├── at.js │ │ │ │ │ │ ├── attempt.js │ │ │ │ │ │ ├── before.js │ │ │ │ │ │ ├── bind.js │ │ │ │ │ │ ├── bindAll.js │ │ │ │ │ │ ├── bindKey.js │ │ │ │ │ │ ├── camelCase.js │ │ │ │ │ │ ├── capitalize.js │ │ │ │ │ │ ├── castArray.js │ │ │ │ │ │ ├── ceil.js │ │ │ │ │ │ ├── chain.js │ │ │ │ │ │ ├── chunk.js │ │ │ │ │ │ ├── clamp.js │ │ │ │ │ │ ├── clone.js │ │ │ │ │ │ ├── cloneDeep.js │ │ │ │ │ │ ├── cloneDeepWith.js │ │ │ │ │ │ ├── cloneWith.js │ │ │ │ │ │ ├── collection.js │ │ │ │ │ │ ├── commit.js │ │ │ │ │ │ ├── compact.js │ │ │ │ │ │ ├── concat.js │ │ │ │ │ │ ├── cond.js │ │ │ │ │ │ ├── conforms.js │ │ │ │ │ │ ├── conformsTo.js │ │ │ │ │ │ ├── constant.js │ │ │ │ │ │ ├── core.js │ │ │ │ │ │ ├── core.min.js │ │ │ │ │ │ ├── countBy.js │ │ │ │ │ │ ├── create.js │ │ │ │ │ │ ├── curry.js │ │ │ │ │ │ ├── curryRight.js │ │ │ │ │ │ ├── date.js │ │ │ │ │ │ ├── debounce.js │ │ │ │ │ │ ├── deburr.js │ │ │ │ │ │ ├── defaultTo.js │ │ │ │ │ │ ├── defaults.js │ │ │ │ │ │ ├── defaultsDeep.js │ │ │ │ │ │ ├── defer.js │ │ │ │ │ │ ├── delay.js │ │ │ │ │ │ ├── difference.js │ │ │ │ │ │ ├── differenceBy.js │ │ │ │ │ │ ├── differenceWith.js │ │ │ │ │ │ ├── divide.js │ │ │ │ │ │ ├── drop.js │ │ │ │ │ │ ├── dropRight.js │ │ │ │ │ │ ├── dropRightWhile.js │ │ │ │ │ │ ├── dropWhile.js │ │ │ │ │ │ ├── each.js │ │ │ │ │ │ ├── eachRight.js │ │ │ │ │ │ ├── endsWith.js │ │ │ │ │ │ ├── entries.js │ │ │ │ │ │ ├── entriesIn.js │ │ │ │ │ │ ├── eq.js │ │ │ │ │ │ ├── escape.js │ │ │ │ │ │ ├── escapeRegExp.js │ │ │ │ │ │ ├── every.js │ │ │ │ │ │ ├── extend.js │ │ │ │ │ │ ├── extendWith.js │ │ │ │ │ │ ├── fill.js │ │ │ │ │ │ ├── filter.js │ │ │ │ │ │ ├── find.js │ │ │ │ │ │ ├── findIndex.js │ │ │ │ │ │ ├── findKey.js │ │ │ │ │ │ ├── findLast.js │ │ │ │ │ │ ├── findLastIndex.js │ │ │ │ │ │ ├── findLastKey.js │ │ │ │ │ │ ├── first.js │ │ │ │ │ │ ├── flake.lock │ │ │ │ │ │ ├── flake.nix │ │ │ │ │ │ ├── flatMap.js │ │ │ │ │ │ ├── flatMapDeep.js │ │ │ │ │ │ ├── flatMapDepth.js │ │ │ │ │ │ ├── flatten.js │ │ │ │ │ │ ├── flattenDeep.js │ │ │ │ │ │ ├── flattenDepth.js │ │ │ │ │ │ ├── flip.js │ │ │ │ │ │ ├── floor.js │ │ │ │ │ │ ├── flow.js │ │ │ │ │ │ ├── flowRight.js │ │ │ │ │ │ ├── forEach.js │ │ │ │ │ │ ├── forEachRight.js │ │ │ │ │ │ ├── forIn.js │ │ │ │ │ │ ├── forInRight.js │ │ │ │ │ │ ├── forOwn.js │ │ │ │ │ │ ├── forOwnRight.js │ │ │ │ │ │ ├── fp/ │ │ │ │ │ │ │ ├── F.js │ │ │ │ │ │ │ ├── T.js │ │ │ │ │ │ │ ├── __.js │ │ │ │ │ │ │ ├── _baseConvert.js │ │ │ │ │ │ │ ├── _convertBrowser.js │ │ │ │ │ │ │ ├── _falseOptions.js │ │ │ │ │ │ │ ├── _mapping.js │ │ │ │ │ │ │ ├── _util.js │ │ │ │ │ │ │ ├── add.js │ │ │ │ │ │ │ ├── after.js │ │ │ │ │ │ │ ├── all.js │ │ │ │ │ │ │ ├── allPass.js │ │ │ │ │ │ │ ├── always.js │ │ │ │ │ │ │ ├── any.js │ │ │ │ │ │ │ ├── anyPass.js │ │ │ │ │ │ │ ├── apply.js │ │ │ │ │ │ │ ├── array.js │ │ │ │ │ │ │ ├── ary.js │ │ │ │ │ │ │ ├── assign.js │ │ │ │ │ │ │ ├── assignAll.js │ │ │ │ │ │ │ ├── assignAllWith.js │ │ │ │ │ │ │ ├── assignIn.js │ │ │ │ │ │ │ ├── assignInAll.js │ │ │ │ │ │ │ ├── assignInAllWith.js │ │ │ │ │ │ │ ├── assignInWith.js │ │ │ │ │ │ │ ├── assignWith.js │ │ │ │ │ │ │ ├── assoc.js │ │ │ │ │ │ │ ├── assocPath.js │ │ │ │ │ │ │ ├── at.js │ │ │ │ │ │ │ ├── attempt.js │ │ │ │ │ │ │ ├── before.js │ │ │ │ │ │ │ ├── bind.js │ │ │ │ │ │ │ ├── bindAll.js │ │ │ │ │ │ │ ├── bindKey.js │ │ │ │ │ │ │ ├── camelCase.js │ │ │ │ │ │ │ ├── capitalize.js │ │ │ │ │ │ │ ├── castArray.js │ │ │ │ │ │ │ ├── ceil.js │ │ │ │ │ │ │ ├── chain.js │ │ │ │ │ │ │ ├── chunk.js │ │ │ │ │ │ │ ├── clamp.js │ │ │ │ │ │ │ ├── clone.js │ │ │ │ │ │ │ ├── cloneDeep.js │ │ │ │ │ │ │ ├── cloneDeepWith.js │ │ │ │ │ │ │ ├── cloneWith.js │ │ │ │ │ │ │ ├── collection.js │ │ │ │ │ │ │ ├── commit.js │ │ │ │ │ │ │ ├── compact.js │ │ │ │ │ │ │ ├── complement.js │ │ │ │ │ │ │ ├── compose.js │ │ │ │ │ │ │ ├── concat.js │ │ │ │ │ │ │ ├── cond.js │ │ │ │ │ │ │ ├── conforms.js │ │ │ │ │ │ │ ├── conformsTo.js │ │ │ │ │ │ │ ├── constant.js │ │ │ │ │ │ │ ├── contains.js │ │ │ │ │ │ │ ├── convert.js │ │ │ │ │ │ │ ├── countBy.js │ │ │ │ │ │ │ ├── create.js │ │ │ │ │ │ │ ├── curry.js │ │ │ │ │ │ │ ├── curryN.js │ │ │ │ │ │ │ ├── curryRight.js │ │ │ │ │ │ │ ├── curryRightN.js │ │ │ │ │ │ │ ├── date.js │ │ │ │ │ │ │ ├── debounce.js │ │ │ │ │ │ │ ├── deburr.js │ │ │ │ │ │ │ ├── defaultTo.js │ │ │ │ │ │ │ ├── defaults.js │ │ │ │ │ │ │ ├── defaultsAll.js │ │ │ │ │ │ │ ├── defaultsDeep.js │ │ │ │ │ │ │ ├── defaultsDeepAll.js │ │ │ │ │ │ │ ├── defer.js │ │ │ │ │ │ │ ├── delay.js │ │ │ │ │ │ │ ├── difference.js │ │ │ │ │ │ │ ├── differenceBy.js │ │ │ │ │ │ │ ├── differenceWith.js │ │ │ │ │ │ │ ├── dissoc.js │ │ │ │ │ │ │ ├── dissocPath.js │ │ │ │ │ │ │ ├── divide.js │ │ │ │ │ │ │ ├── drop.js │ │ │ │ │ │ │ ├── dropLast.js │ │ │ │ │ │ │ ├── dropLastWhile.js │ │ │ │ │ │ │ ├── dropRight.js │ │ │ │ │ │ │ ├── dropRightWhile.js │ │ │ │ │ │ │ ├── dropWhile.js │ │ │ │ │ │ │ ├── each.js │ │ │ │ │ │ │ ├── eachRight.js │ │ │ │ │ │ │ ├── endsWith.js │ │ │ │ │ │ │ ├── entries.js │ │ │ │ │ │ │ ├── entriesIn.js │ │ │ │ │ │ │ ├── eq.js │ │ │ │ │ │ │ ├── equals.js │ │ │ │ │ │ │ ├── escape.js │ │ │ │ │ │ │ ├── escapeRegExp.js │ │ │ │ │ │ │ ├── every.js │ │ │ │ │ │ │ ├── extend.js │ │ │ │ │ │ │ ├── extendAll.js │ │ │ │ │ │ │ ├── extendAllWith.js │ │ │ │ │ │ │ ├── extendWith.js │ │ │ │ │ │ │ ├── fill.js │ │ │ │ │ │ │ ├── filter.js │ │ │ │ │ │ │ ├── find.js │ │ │ │ │ │ │ ├── findFrom.js │ │ │ │ │ │ │ ├── findIndex.js │ │ │ │ │ │ │ ├── findIndexFrom.js │ │ │ │ │ │ │ ├── findKey.js │ │ │ │ │ │ │ ├── findLast.js │ │ │ │ │ │ │ ├── findLastFrom.js │ │ │ │ │ │ │ ├── findLastIndex.js │ │ │ │ │ │ │ ├── findLastIndexFrom.js │ │ │ │ │ │ │ ├── findLastKey.js │ │ │ │ │ │ │ ├── first.js │ │ │ │ │ │ │ ├── flatMap.js │ │ │ │ │ │ │ ├── flatMapDeep.js │ │ │ │ │ │ │ ├── flatMapDepth.js │ │ │ │ │ │ │ ├── flatten.js │ │ │ │ │ │ │ ├── flattenDeep.js │ │ │ │ │ │ │ ├── flattenDepth.js │ │ │ │ │ │ │ ├── flip.js │ │ │ │ │ │ │ ├── floor.js │ │ │ │ │ │ │ ├── flow.js │ │ │ │ │ │ │ ├── flowRight.js │ │ │ │ │ │ │ ├── forEach.js │ │ │ │ │ │ │ ├── forEachRight.js │ │ │ │ │ │ │ ├── forIn.js │ │ │ │ │ │ │ ├── forInRight.js │ │ │ │ │ │ │ ├── forOwn.js │ │ │ │ │ │ │ ├── forOwnRight.js │ │ │ │ │ │ │ ├── fromPairs.js │ │ │ │ │ │ │ ├── function.js │ │ │ │ │ │ │ ├── functions.js │ │ │ │ │ │ │ ├── functionsIn.js │ │ │ │ │ │ │ ├── get.js │ │ │ │ │ │ │ ├── getOr.js │ │ │ │ │ │ │ ├── groupBy.js │ │ │ │ │ │ │ ├── gt.js │ │ │ │ │ │ │ ├── gte.js │ │ │ │ │ │ │ ├── has.js │ │ │ │ │ │ │ ├── hasIn.js │ │ │ │ │ │ │ ├── head.js │ │ │ │ │ │ │ ├── identical.js │ │ │ │ │ │ │ ├── identity.js │ │ │ │ │ │ │ ├── inRange.js │ │ │ │ │ │ │ ├── includes.js │ │ │ │ │ │ │ ├── includesFrom.js │ │ │ │ │ │ │ ├── indexBy.js │ │ │ │ │ │ │ ├── indexOf.js │ │ │ │ │ │ │ ├── indexOfFrom.js │ │ │ │ │ │ │ ├── init.js │ │ │ │ │ │ │ ├── initial.js │ │ │ │ │ │ │ ├── intersection.js │ │ │ │ │ │ │ ├── intersectionBy.js │ │ │ │ │ │ │ ├── intersectionWith.js │ │ │ │ │ │ │ ├── invert.js │ │ │ │ │ │ │ ├── invertBy.js │ │ │ │ │ │ │ ├── invertObj.js │ │ │ │ │ │ │ ├── invoke.js │ │ │ │ │ │ │ ├── invokeArgs.js │ │ │ │ │ │ │ ├── invokeArgsMap.js │ │ │ │ │ │ │ ├── invokeMap.js │ │ │ │ │ │ │ ├── isArguments.js │ │ │ │ │ │ │ ├── isArray.js │ │ │ │ │ │ │ ├── isArrayBuffer.js │ │ │ │ │ │ │ ├── isArrayLike.js │ │ │ │ │ │ │ ├── isArrayLikeObject.js │ │ │ │ │ │ │ ├── isBoolean.js │ │ │ │ │ │ │ ├── isBuffer.js │ │ │ │ │ │ │ ├── isDate.js │ │ │ │ │ │ │ ├── isElement.js │ │ │ │ │ │ │ ├── isEmpty.js │ │ │ │ │ │ │ ├── isEqual.js │ │ │ │ │ │ │ ├── isEqualWith.js │ │ │ │ │ │ │ ├── isError.js │ │ │ │ │ │ │ ├── isFinite.js │ │ │ │ │ │ │ ├── isFunction.js │ │ │ │ │ │ │ ├── isInteger.js │ │ │ │ │ │ │ ├── isLength.js │ │ │ │ │ │ │ ├── isMap.js │ │ │ │ │ │ │ ├── isMatch.js │ │ │ │ │ │ │ ├── isMatchWith.js │ │ │ │ │ │ │ ├── isNaN.js │ │ │ │ │ │ │ ├── isNative.js │ │ │ │ │ │ │ ├── isNil.js │ │ │ │ │ │ │ ├── isNull.js │ │ │ │ │ │ │ ├── isNumber.js │ │ │ │ │ │ │ ├── isObject.js │ │ │ │ │ │ │ ├── isObjectLike.js │ │ │ │ │ │ │ ├── isPlainObject.js │ │ │ │ │ │ │ ├── isRegExp.js │ │ │ │ │ │ │ ├── isSafeInteger.js │ │ │ │ │ │ │ ├── isSet.js │ │ │ │ │ │ │ ├── isString.js │ │ │ │ │ │ │ ├── isSymbol.js │ │ │ │ │ │ │ ├── isTypedArray.js │ │ │ │ │ │ │ ├── isUndefined.js │ │ │ │ │ │ │ ├── isWeakMap.js │ │ │ │ │ │ │ ├── isWeakSet.js │ │ │ │ │ │ │ ├── iteratee.js │ │ │ │ │ │ │ ├── join.js │ │ │ │ │ │ │ ├── juxt.js │ │ │ │ │ │ │ ├── kebabCase.js │ │ │ │ │ │ │ ├── keyBy.js │ │ │ │ │ │ │ ├── keys.js │ │ │ │ │ │ │ ├── keysIn.js │ │ │ │ │ │ │ ├── lang.js │ │ │ │ │ │ │ ├── last.js │ │ │ │ │ │ │ ├── lastIndexOf.js │ │ │ │ │ │ │ ├── lastIndexOfFrom.js │ │ │ │ │ │ │ ├── lowerCase.js │ │ │ │ │ │ │ ├── lowerFirst.js │ │ │ │ │ │ │ ├── lt.js │ │ │ │ │ │ │ ├── lte.js │ │ │ │ │ │ │ ├── map.js │ │ │ │ │ │ │ ├── mapKeys.js │ │ │ │ │ │ │ ├── mapValues.js │ │ │ │ │ │ │ ├── matches.js │ │ │ │ │ │ │ ├── matchesProperty.js │ │ │ │ │ │ │ ├── math.js │ │ │ │ │ │ │ ├── max.js │ │ │ │ │ │ │ ├── maxBy.js │ │ │ │ │ │ │ ├── mean.js │ │ │ │ │ │ │ ├── meanBy.js │ │ │ │ │ │ │ ├── memoize.js │ │ │ │ │ │ │ ├── merge.js │ │ │ │ │ │ │ ├── mergeAll.js │ │ │ │ │ │ │ ├── mergeAllWith.js │ │ │ │ │ │ │ ├── mergeWith.js │ │ │ │ │ │ │ ├── method.js │ │ │ │ │ │ │ ├── methodOf.js │ │ │ │ │ │ │ ├── min.js │ │ │ │ │ │ │ ├── minBy.js │ │ │ │ │ │ │ ├── mixin.js │ │ │ │ │ │ │ ├── multiply.js │ │ │ │ │ │ │ ├── nAry.js │ │ │ │ │ │ │ ├── negate.js │ │ │ │ │ │ │ ├── next.js │ │ │ │ │ │ │ ├── noop.js │ │ │ │ │ │ │ ├── now.js │ │ │ │ │ │ │ ├── nth.js │ │ │ │ │ │ │ ├── nthArg.js │ │ │ │ │ │ │ ├── number.js │ │ │ │ │ │ │ ├── object.js │ │ │ │ │ │ │ ├── omit.js │ │ │ │ │ │ │ ├── omitAll.js │ │ │ │ │ │ │ ├── omitBy.js │ │ │ │ │ │ │ ├── once.js │ │ │ │ │ │ │ ├── orderBy.js │ │ │ │ │ │ │ ├── over.js │ │ │ │ │ │ │ ├── overArgs.js │ │ │ │ │ │ │ ├── overEvery.js │ │ │ │ │ │ │ ├── overSome.js │ │ │ │ │ │ │ ├── pad.js │ │ │ │ │ │ │ ├── padChars.js │ │ │ │ │ │ │ ├── padCharsEnd.js │ │ │ │ │ │ │ ├── padCharsStart.js │ │ │ │ │ │ │ ├── padEnd.js │ │ │ │ │ │ │ ├── padStart.js │ │ │ │ │ │ │ ├── parseInt.js │ │ │ │ │ │ │ ├── partial.js │ │ │ │ │ │ │ ├── partialRight.js │ │ │ │ │ │ │ ├── partition.js │ │ │ │ │ │ │ ├── path.js │ │ │ │ │ │ │ ├── pathEq.js │ │ │ │ │ │ │ ├── pathOr.js │ │ │ │ │ │ │ ├── paths.js │ │ │ │ │ │ │ ├── pick.js │ │ │ │ │ │ │ ├── pickAll.js │ │ │ │ │ │ │ ├── pickBy.js │ │ │ │ │ │ │ ├── pipe.js │ │ │ │ │ │ │ ├── placeholder.js │ │ │ │ │ │ │ ├── plant.js │ │ │ │ │ │ │ ├── pluck.js │ │ │ │ │ │ │ ├── prop.js │ │ │ │ │ │ │ ├── propEq.js │ │ │ │ │ │ │ ├── propOr.js │ │ │ │ │ │ │ ├── property.js │ │ │ │ │ │ │ ├── propertyOf.js │ │ │ │ │ │ │ ├── props.js │ │ │ │ │ │ │ ├── pull.js │ │ │ │ │ │ │ ├── pullAll.js │ │ │ │ │ │ │ ├── pullAllBy.js │ │ │ │ │ │ │ ├── pullAllWith.js │ │ │ │ │ │ │ ├── pullAt.js │ │ │ │ │ │ │ ├── random.js │ │ │ │ │ │ │ ├── range.js │ │ │ │ │ │ │ ├── rangeRight.js │ │ │ │ │ │ │ ├── rangeStep.js │ │ │ │ │ │ │ ├── rangeStepRight.js │ │ │ │ │ │ │ ├── rearg.js │ │ │ │ │ │ │ ├── reduce.js │ │ │ │ │ │ │ ├── reduceRight.js │ │ │ │ │ │ │ ├── reject.js │ │ │ │ │ │ │ ├── remove.js │ │ │ │ │ │ │ ├── repeat.js │ │ │ │ │ │ │ ├── replace.js │ │ │ │ │ │ │ ├── rest.js │ │ │ │ │ │ │ ├── restFrom.js │ │ │ │ │ │ │ ├── result.js │ │ │ │ │ │ │ ├── reverse.js │ │ │ │ │ │ │ ├── round.js │ │ │ │ │ │ │ ├── sample.js │ │ │ │ │ │ │ ├── sampleSize.js │ │ │ │ │ │ │ ├── seq.js │ │ │ │ │ │ │ ├── set.js │ │ │ │ │ │ │ ├── setWith.js │ │ │ │ │ │ │ ├── shuffle.js │ │ │ │ │ │ │ ├── size.js │ │ │ │ │ │ │ ├── slice.js │ │ │ │ │ │ │ ├── snakeCase.js │ │ │ │ │ │ │ ├── some.js │ │ │ │ │ │ │ ├── sortBy.js │ │ │ │ │ │ │ ├── sortedIndex.js │ │ │ │ │ │ │ ├── sortedIndexBy.js │ │ │ │ │ │ │ ├── sortedIndexOf.js │ │ │ │ │ │ │ ├── sortedLastIndex.js │ │ │ │ │ │ │ ├── sortedLastIndexBy.js │ │ │ │ │ │ │ ├── sortedLastIndexOf.js │ │ │ │ │ │ │ ├── sortedUniq.js │ │ │ │ │ │ │ ├── sortedUniqBy.js │ │ │ │ │ │ │ ├── split.js │ │ │ │ │ │ │ ├── spread.js │ │ │ │ │ │ │ ├── spreadFrom.js │ │ │ │ │ │ │ ├── startCase.js │ │ │ │ │ │ │ ├── startsWith.js │ │ │ │ │ │ │ ├── string.js │ │ │ │ │ │ │ ├── stubArray.js │ │ │ │ │ │ │ ├── stubFalse.js │ │ │ │ │ │ │ ├── stubObject.js │ │ │ │ │ │ │ ├── stubString.js │ │ │ │ │ │ │ ├── stubTrue.js │ │ │ │ │ │ │ ├── subtract.js │ │ │ │ │ │ │ ├── sum.js │ │ │ │ │ │ │ ├── sumBy.js │ │ │ │ │ │ │ ├── symmetricDifference.js │ │ │ │ │ │ │ ├── symmetricDifferenceBy.js │ │ │ │ │ │ │ ├── symmetricDifferenceWith.js │ │ │ │ │ │ │ ├── tail.js │ │ │ │ │ │ │ ├── take.js │ │ │ │ │ │ │ ├── takeLast.js │ │ │ │ │ │ │ ├── takeLastWhile.js │ │ │ │ │ │ │ ├── takeRight.js │ │ │ │ │ │ │ ├── takeRightWhile.js │ │ │ │ │ │ │ ├── takeWhile.js │ │ │ │ │ │ │ ├── tap.js │ │ │ │ │ │ │ ├── template.js │ │ │ │ │ │ │ ├── templateSettings.js │ │ │ │ │ │ │ ├── throttle.js │ │ │ │ │ │ │ ├── thru.js │ │ │ │ │ │ │ ├── times.js │ │ │ │ │ │ │ ├── toArray.js │ │ │ │ │ │ │ ├── toFinite.js │ │ │ │ │ │ │ ├── toInteger.js │ │ │ │ │ │ │ ├── toIterator.js │ │ │ │ │ │ │ ├── toJSON.js │ │ │ │ │ │ │ ├── toLength.js │ │ │ │ │ │ │ ├── toLower.js │ │ │ │ │ │ │ ├── toNumber.js │ │ │ │ │ │ │ ├── toPairs.js │ │ │ │ │ │ │ ├── toPairsIn.js │ │ │ │ │ │ │ ├── toPath.js │ │ │ │ │ │ │ ├── toPlainObject.js │ │ │ │ │ │ │ ├── toSafeInteger.js │ │ │ │ │ │ │ ├── toString.js │ │ │ │ │ │ │ ├── toUpper.js │ │ │ │ │ │ │ ├── transform.js │ │ │ │ │ │ │ ├── trim.js │ │ │ │ │ │ │ ├── trimChars.js │ │ │ │ │ │ │ ├── trimCharsEnd.js │ │ │ │ │ │ │ ├── trimCharsStart.js │ │ │ │ │ │ │ ├── trimEnd.js │ │ │ │ │ │ │ ├── trimStart.js │ │ │ │ │ │ │ ├── truncate.js │ │ │ │ │ │ │ ├── unapply.js │ │ │ │ │ │ │ ├── unary.js │ │ │ │ │ │ │ ├── unescape.js │ │ │ │ │ │ │ ├── union.js │ │ │ │ │ │ │ ├── unionBy.js │ │ │ │ │ │ │ ├── unionWith.js │ │ │ │ │ │ │ ├── uniq.js │ │ │ │ │ │ │ ├── uniqBy.js │ │ │ │ │ │ │ ├── uniqWith.js │ │ │ │ │ │ │ ├── uniqueId.js │ │ │ │ │ │ │ ├── unnest.js │ │ │ │ │ │ │ ├── unset.js │ │ │ │ │ │ │ ├── unzip.js │ │ │ │ │ │ │ ├── unzipWith.js │ │ │ │ │ │ │ ├── update.js │ │ │ │ │ │ │ ├── updateWith.js │ │ │ │ │ │ │ ├── upperCase.js │ │ │ │ │ │ │ ├── upperFirst.js │ │ │ │ │ │ │ ├── useWith.js │ │ │ │ │ │ │ ├── util.js │ │ │ │ │ │ │ ├── value.js │ │ │ │ │ │ │ ├── valueOf.js │ │ │ │ │ │ │ ├── values.js │ │ │ │ │ │ │ ├── valuesIn.js │ │ │ │ │ │ │ ├── where.js │ │ │ │ │ │ │ ├── whereEq.js │ │ │ │ │ │ │ ├── without.js │ │ │ │ │ │ │ ├── words.js │ │ │ │ │ │ │ ├── wrap.js │ │ │ │ │ │ │ ├── wrapperAt.js │ │ │ │ │ │ │ ├── wrapperChain.js │ │ │ │ │ │ │ ├── wrapperLodash.js │ │ │ │ │ │ │ ├── wrapperReverse.js │ │ │ │ │ │ │ ├── wrapperValue.js │ │ │ │ │ │ │ ├── xor.js │ │ │ │ │ │ │ ├── xorBy.js │ │ │ │ │ │ │ ├── xorWith.js │ │ │ │ │ │ │ ├── zip.js │ │ │ │ │ │ │ ├── zipAll.js │ │ │ │ │ │ │ ├── zipObj.js │ │ │ │ │ │ │ ├── zipObject.js │ │ │ │ │ │ │ ├── zipObjectDeep.js │ │ │ │ │ │ │ └── zipWith.js │ │ │ │ │ │ ├── fp.js │ │ │ │ │ │ ├── fromPairs.js │ │ │ │ │ │ ├── function.js │ │ │ │ │ │ ├── functions.js │ │ │ │ │ │ ├── functionsIn.js │ │ │ │ │ │ ├── get.js │ │ │ │ │ │ ├── groupBy.js │ │ │ │ │ │ ├── gt.js │ │ │ │ │ │ ├── gte.js │ │ │ │ │ │ ├── has.js │ │ │ │ │ │ ├── hasIn.js │ │ │ │ │ │ ├── head.js │ │ │ │ │ │ ├── identity.js │ │ │ │ │ │ ├── inRange.js │ │ │ │ │ │ ├── includes.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── indexOf.js │ │ │ │ │ │ ├── initial.js │ │ │ │ │ │ ├── intersection.js │ │ │ │ │ │ ├── intersectionBy.js │ │ │ │ │ │ ├── intersectionWith.js │ │ │ │ │ │ ├── invert.js │ │ │ │ │ │ ├── invertBy.js │ │ │ │ │ │ ├── invoke.js │ │ │ │ │ │ ├── invokeMap.js │ │ │ │ │ │ ├── isArguments.js │ │ │ │ │ │ ├── isArray.js │ │ │ │ │ │ ├── isArrayBuffer.js │ │ │ │ │ │ ├── isArrayLike.js │ │ │ │ │ │ ├── isArrayLikeObject.js │ │ │ │ │ │ ├── isBoolean.js │ │ │ │ │ │ ├── isBuffer.js │ │ │ │ │ │ ├── isDate.js │ │ │ │ │ │ ├── isElement.js │ │ │ │ │ │ ├── isEmpty.js │ │ │ │ │ │ ├── isEqual.js │ │ │ │ │ │ ├── isEqualWith.js │ │ │ │ │ │ ├── isError.js │ │ │ │ │ │ ├── isFinite.js │ │ │ │ │ │ ├── isFunction.js │ │ │ │ │ │ ├── isInteger.js │ │ │ │ │ │ ├── isLength.js │ │ │ │ │ │ ├── isMap.js │ │ │ │ │ │ ├── isMatch.js │ │ │ │ │ │ ├── isMatchWith.js │ │ │ │ │ │ ├── isNaN.js │ │ │ │ │ │ ├── isNative.js │ │ │ │ │ │ ├── isNil.js │ │ │ │ │ │ ├── isNull.js │ │ │ │ │ │ ├── isNumber.js │ │ │ │ │ │ ├── isObject.js │ │ │ │ │ │ ├── isObjectLike.js │ │ │ │ │ │ ├── isPlainObject.js │ │ │ │ │ │ ├── isRegExp.js │ │ │ │ │ │ ├── isSafeInteger.js │ │ │ │ │ │ ├── isSet.js │ │ │ │ │ │ ├── isString.js │ │ │ │ │ │ ├── isSymbol.js │ │ │ │ │ │ ├── isTypedArray.js │ │ │ │ │ │ ├── isUndefined.js │ │ │ │ │ │ ├── isWeakMap.js │ │ │ │ │ │ ├── isWeakSet.js │ │ │ │ │ │ ├── iteratee.js │ │ │ │ │ │ ├── join.js │ │ │ │ │ │ ├── kebabCase.js │ │ │ │ │ │ ├── keyBy.js │ │ │ │ │ │ ├── keys.js │ │ │ │ │ │ ├── keysIn.js │ │ │ │ │ │ ├── lang.js │ │ │ │ │ │ ├── last.js │ │ │ │ │ │ ├── lastIndexOf.js │ │ │ │ │ │ ├── lodash.js │ │ │ │ │ │ ├── lodash.min.js │ │ │ │ │ │ ├── lowerCase.js │ │ │ │ │ │ ├── lowerFirst.js │ │ │ │ │ │ ├── lt.js │ │ │ │ │ │ ├── lte.js │ │ │ │ │ │ ├── map.js │ │ │ │ │ │ ├── mapKeys.js │ │ │ │ │ │ ├── mapValues.js │ │ │ │ │ │ ├── matches.js │ │ │ │ │ │ ├── matchesProperty.js │ │ │ │ │ │ ├── math.js │ │ │ │ │ │ ├── max.js │ │ │ │ │ │ ├── maxBy.js │ │ │ │ │ │ ├── mean.js │ │ │ │ │ │ ├── meanBy.js │ │ │ │ │ │ ├── memoize.js │ │ │ │ │ │ ├── merge.js │ │ │ │ │ │ ├── mergeWith.js │ │ │ │ │ │ ├── method.js │ │ │ │ │ │ ├── methodOf.js │ │ │ │ │ │ ├── min.js │ │ │ │ │ │ ├── minBy.js │ │ │ │ │ │ ├── mixin.js │ │ │ │ │ │ ├── multiply.js │ │ │ │ │ │ ├── negate.js │ │ │ │ │ │ ├── next.js │ │ │ │ │ │ ├── noop.js │ │ │ │ │ │ ├── now.js │ │ │ │ │ │ ├── nth.js │ │ │ │ │ │ ├── nthArg.js │ │ │ │ │ │ ├── number.js │ │ │ │ │ │ ├── object.js │ │ │ │ │ │ ├── omit.js │ │ │ │ │ │ ├── omitBy.js │ │ │ │ │ │ ├── once.js │ │ │ │ │ │ ├── orderBy.js │ │ │ │ │ │ ├── over.js │ │ │ │ │ │ ├── overArgs.js │ │ │ │ │ │ ├── overEvery.js │ │ │ │ │ │ ├── overSome.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── pad.js │ │ │ │ │ │ ├── padEnd.js │ │ │ │ │ │ ├── padStart.js │ │ │ │ │ │ ├── parseInt.js │ │ │ │ │ │ ├── partial.js │ │ │ │ │ │ ├── partialRight.js │ │ │ │ │ │ ├── partition.js │ │ │ │ │ │ ├── pick.js │ │ │ │ │ │ ├── pickBy.js │ │ │ │ │ │ ├── plant.js │ │ │ │ │ │ ├── property.js │ │ │ │ │ │ ├── propertyOf.js │ │ │ │ │ │ ├── pull.js │ │ │ │ │ │ ├── pullAll.js │ │ │ │ │ │ ├── pullAllBy.js │ │ │ │ │ │ ├── pullAllWith.js │ │ │ │ │ │ ├── pullAt.js │ │ │ │ │ │ ├── random.js │ │ │ │ │ │ ├── range.js │ │ │ │ │ │ ├── rangeRight.js │ │ │ │ │ │ ├── rearg.js │ │ │ │ │ │ ├── reduce.js │ │ │ │ │ │ ├── reduceRight.js │ │ │ │ │ │ ├── reject.js │ │ │ │ │ │ ├── release.md │ │ │ │ │ │ ├── remove.js │ │ │ │ │ │ ├── repeat.js │ │ │ │ │ │ ├── replace.js │ │ │ │ │ │ ├── rest.js │ │ │ │ │ │ ├── result.js │ │ │ │ │ │ ├── reverse.js │ │ │ │ │ │ ├── round.js │ │ │ │ │ │ ├── sample.js │ │ │ │ │ │ ├── sampleSize.js │ │ │ │ │ │ ├── seq.js │ │ │ │ │ │ ├── set.js │ │ │ │ │ │ ├── setWith.js │ │ │ │ │ │ ├── shuffle.js │ │ │ │ │ │ ├── size.js │ │ │ │ │ │ ├── slice.js │ │ │ │ │ │ ├── snakeCase.js │ │ │ │ │ │ ├── some.js │ │ │ │ │ │ ├── sortBy.js │ │ │ │ │ │ ├── sortedIndex.js │ │ │ │ │ │ ├── sortedIndexBy.js │ │ │ │ │ │ ├── sortedIndexOf.js │ │ │ │ │ │ ├── sortedLastIndex.js │ │ │ │ │ │ ├── sortedLastIndexBy.js │ │ │ │ │ │ ├── sortedLastIndexOf.js │ │ │ │ │ │ ├── sortedUniq.js │ │ │ │ │ │ ├── sortedUniqBy.js │ │ │ │ │ │ ├── split.js │ │ │ │ │ │ ├── spread.js │ │ │ │ │ │ ├── startCase.js │ │ │ │ │ │ ├── startsWith.js │ │ │ │ │ │ ├── string.js │ │ │ │ │ │ ├── stubArray.js │ │ │ │ │ │ ├── stubFalse.js │ │ │ │ │ │ ├── stubObject.js │ │ │ │ │ │ ├── stubString.js │ │ │ │ │ │ ├── stubTrue.js │ │ │ │ │ │ ├── subtract.js │ │ │ │ │ │ ├── sum.js │ │ │ │ │ │ ├── sumBy.js │ │ │ │ │ │ ├── tail.js │ │ │ │ │ │ ├── take.js │ │ │ │ │ │ ├── takeRight.js │ │ │ │ │ │ ├── takeRightWhile.js │ │ │ │ │ │ ├── takeWhile.js │ │ │ │ │ │ ├── tap.js │ │ │ │ │ │ ├── template.js │ │ │ │ │ │ ├── templateSettings.js │ │ │ │ │ │ ├── throttle.js │ │ │ │ │ │ ├── thru.js │ │ │ │ │ │ ├── times.js │ │ │ │ │ │ ├── toArray.js │ │ │ │ │ │ ├── toFinite.js │ │ │ │ │ │ ├── toInteger.js │ │ │ │ │ │ ├── toIterator.js │ │ │ │ │ │ ├── toJSON.js │ │ │ │ │ │ ├── toLength.js │ │ │ │ │ │ ├── toLower.js │ │ │ │ │ │ ├── toNumber.js │ │ │ │ │ │ ├── toPairs.js │ │ │ │ │ │ ├── toPairsIn.js │ │ │ │ │ │ ├── toPath.js │ │ │ │ │ │ ├── toPlainObject.js │ │ │ │ │ │ ├── toSafeInteger.js │ │ │ │ │ │ ├── toString.js │ │ │ │ │ │ ├── toUpper.js │ │ │ │ │ │ ├── transform.js │ │ │ │ │ │ ├── trim.js │ │ │ │ │ │ ├── trimEnd.js │ │ │ │ │ │ ├── trimStart.js │ │ │ │ │ │ ├── truncate.js │ │ │ │ │ │ ├── unary.js │ │ │ │ │ │ ├── unescape.js │ │ │ │ │ │ ├── union.js │ │ │ │ │ │ ├── unionBy.js │ │ │ │ │ │ ├── unionWith.js │ │ │ │ │ │ ├── uniq.js │ │ │ │ │ │ ├── uniqBy.js │ │ │ │ │ │ ├── uniqWith.js │ │ │ │ │ │ ├── uniqueId.js │ │ │ │ │ │ ├── unset.js │ │ │ │ │ │ ├── unzip.js │ │ │ │ │ │ ├── unzipWith.js │ │ │ │ │ │ ├── update.js │ │ │ │ │ │ ├── updateWith.js │ │ │ │ │ │ ├── upperCase.js │ │ │ │ │ │ ├── upperFirst.js │ │ │ │ │ │ ├── util.js │ │ │ │ │ │ ├── value.js │ │ │ │ │ │ ├── valueOf.js │ │ │ │ │ │ ├── values.js │ │ │ │ │ │ ├── valuesIn.js │ │ │ │ │ │ ├── without.js │ │ │ │ │ │ ├── words.js │ │ │ │ │ │ ├── wrap.js │ │ │ │ │ │ ├── wrapperAt.js │ │ │ │ │ │ ├── wrapperChain.js │ │ │ │ │ │ ├── wrapperLodash.js │ │ │ │ │ │ ├── wrapperReverse.js │ │ │ │ │ │ ├── wrapperValue.js │ │ │ │ │ │ ├── xor.js │ │ │ │ │ │ ├── xorBy.js │ │ │ │ │ │ ├── xorWith.js │ │ │ │ │ │ ├── zip.js │ │ │ │ │ │ ├── zipObject.js │ │ │ │ │ │ ├── zipObjectDeep.js │ │ │ │ │ │ └── zipWith.js │ │ │ │ │ ├── mime/ │ │ │ │ │ │ ├── .npmignore │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── cli.js │ │ │ │ │ │ ├── mime.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── src/ │ │ │ │ │ │ │ ├── build.js │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ └── types.json │ │ │ │ │ ├── minimist/ │ │ │ │ │ │ ├── .eslintrc │ │ │ │ │ │ ├── .github/ │ │ │ │ │ │ │ └── FUNDING.yml │ │ │ │ │ │ ├── .nycrc │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── example/ │ │ │ │ │ │ │ └── parse.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test/ │ │ │ │ │ │ ├── all_bool.js │ │ │ │ │ │ ├── bool.js │ │ │ │ │ │ ├── dash.js │ │ │ │ │ │ ├── default_bool.js │ │ │ │ │ │ ├── dotted.js │ │ │ │ │ │ ├── kv_short.js │ │ │ │ │ │ ├── long.js │ │ │ │ │ │ ├── num.js │ │ │ │ │ │ ├── parse.js │ │ │ │ │ │ ├── parse_modified.js │ │ │ │ │ │ ├── proto.js │ │ │ │ │ │ ├── short.js │ │ │ │ │ │ ├── stop_early.js │ │ │ │ │ │ ├── unknown.js │ │ │ │ │ │ └── whitespace.js │ │ │ │ │ ├── mkdirp/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── bin/ │ │ │ │ │ │ │ ├── cmd.js │ │ │ │ │ │ │ └── usage.txt │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── readme.markdown │ │ │ │ │ ├── ms/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── license.md │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── opener/ │ │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── bin/ │ │ │ │ │ │ │ └── opener-bin.js │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ └── opener.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── portfinder/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── portfinder.d.ts │ │ │ │ │ │ │ └── portfinder.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── qs/ │ │ │ │ │ │ ├── .editorconfig │ │ │ │ │ │ ├── .eslintrc │ │ │ │ │ │ ├── .github/ │ │ │ │ │ │ │ └── FUNDING.yml │ │ │ │ │ │ ├── .nycrc │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── bower.json │ │ │ │ │ │ ├── component.json │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ └── qs.js │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── formats.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── parse.js │ │ │ │ │ │ │ ├── stringify.js │ │ │ │ │ │ │ └── utils.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── parse.js │ │ │ │ │ │ ├── stringify.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ ├── requires-port/ │ │ │ │ │ │ ├── .npmignore │ │ │ │ │ │ ├── .travis.yml │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── safe-buffer/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── safer-buffer/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── Porting-Buffer.md │ │ │ │ │ │ ├── Readme.md │ │ │ │ │ │ ├── dangerous.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── safer.js │ │ │ │ │ │ └── tests.js │ │ │ │ │ ├── secure-compare/ │ │ │ │ │ │ ├── .npmignore │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── supports-color/ │ │ │ │ │ │ ├── browser.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── license │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── union/ │ │ │ │ │ │ ├── .gitattributes │ │ │ │ │ │ ├── .travis.yml │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── examples/ │ │ │ │ │ │ │ ├── after/ │ │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ │ ├── simple/ │ │ │ │ │ │ │ │ ├── middleware/ │ │ │ │ │ │ │ │ │ ├── favicon.js │ │ │ │ │ │ │ │ │ ├── gzip-decode.js │ │ │ │ │ │ │ │ │ └── gzip-encode.js │ │ │ │ │ │ │ │ ├── simple.js │ │ │ │ │ │ │ │ └── spdy.js │ │ │ │ │ │ │ └── socketio/ │ │ │ │ │ │ │ ├── README │ │ │ │ │ │ │ ├── index.html │ │ │ │ │ │ │ └── server.js │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── buffered-stream.js │ │ │ │ │ │ │ ├── core.js │ │ │ │ │ │ │ ├── http-stream.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── request-stream.js │ │ │ │ │ │ │ ├── response-stream.js │ │ │ │ │ │ │ └── routing-stream.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test/ │ │ │ │ │ │ ├── after-test.js │ │ │ │ │ │ ├── body-parser-test.js │ │ │ │ │ │ ├── double-write-test.js │ │ │ │ │ │ ├── ecstatic-test.js │ │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── static/ │ │ │ │ │ │ │ └── some-file.txt │ │ │ │ │ │ ├── header-test.js │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── macros.js │ │ │ │ │ │ ├── prop-test.js │ │ │ │ │ │ ├── simple-test.js │ │ │ │ │ │ ├── status-code-test.js │ │ │ │ │ │ └── streaming-test.js │ │ │ │ │ ├── url-join/ │ │ │ │ │ │ ├── .travis.yml │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── bin/ │ │ │ │ │ │ │ └── changelog │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ └── url-join.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── test/ │ │ │ │ │ │ └── tests.js │ │ │ │ │ └── whatwg-encoding/ │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ ├── README.md │ │ │ │ │ ├── lib/ │ │ │ │ │ │ ├── labels-to-names.json │ │ │ │ │ │ ├── supported-names.json │ │ │ │ │ │ └── whatwg-encoding.js │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── node-linux64 │ │ │ ├── node-mac │ │ │ ├── terser/ │ │ │ │ ├── CHANGELOG.md │ │ │ │ ├── LICENSE │ │ │ │ ├── PATRONS.md │ │ │ │ ├── README.md │ │ │ │ ├── bin/ │ │ │ │ │ ├── package.json │ │ │ │ │ ├── terser │ │ │ │ │ └── uglifyjs │ │ │ │ ├── dist/ │ │ │ │ │ ├── .gitkeep │ │ │ │ │ └── package.json │ │ │ │ ├── lib/ │ │ │ │ │ ├── ast.js │ │ │ │ │ ├── cli.js │ │ │ │ │ ├── compress/ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ ├── compressor-flags.js │ │ │ │ │ │ ├── drop-side-effect-free.js │ │ │ │ │ │ ├── drop-unused.js │ │ │ │ │ │ ├── evaluate.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── inference.js │ │ │ │ │ │ ├── inline.js │ │ │ │ │ │ ├── native-objects.js │ │ │ │ │ │ ├── reduce-vars.js │ │ │ │ │ │ └── tighten-body.js │ │ │ │ │ ├── equivalent-to.js │ │ │ │ │ ├── minify.js │ │ │ │ │ ├── mozilla-ast.js │ │ │ │ │ ├── output.js │ │ │ │ │ ├── parse.js │ │ │ │ │ ├── propmangle.js │ │ │ │ │ ├── scope.js │ │ │ │ │ ├── size.js │ │ │ │ │ ├── sourcemap.js │ │ │ │ │ ├── transform.js │ │ │ │ │ └── utils/ │ │ │ │ │ ├── first_in_statement.js │ │ │ │ │ └── index.js │ │ │ │ ├── main.js │ │ │ │ ├── node_modules/ │ │ │ │ │ ├── .package-lock.json │ │ │ │ │ ├── @jridgewell/ │ │ │ │ │ │ ├── gen-mapping/ │ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ │ ├── gen-mapping.mjs │ │ │ │ │ │ │ │ ├── gen-mapping.mjs.map │ │ │ │ │ │ │ │ ├── gen-mapping.umd.js │ │ │ │ │ │ │ │ ├── gen-mapping.umd.js.map │ │ │ │ │ │ │ │ └── types/ │ │ │ │ │ │ │ │ ├── gen-mapping.d.ts │ │ │ │ │ │ │ │ ├── sourcemap-segment.d.ts │ │ │ │ │ │ │ │ └── types.d.ts │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── resolve-uri/ │ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ │ ├── resolve-uri.mjs │ │ │ │ │ │ │ │ ├── resolve-uri.mjs.map │ │ │ │ │ │ │ │ ├── resolve-uri.umd.js │ │ │ │ │ │ │ │ ├── resolve-uri.umd.js.map │ │ │ │ │ │ │ │ └── types/ │ │ │ │ │ │ │ │ └── resolve-uri.d.ts │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── set-array/ │ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ │ ├── set-array.mjs │ │ │ │ │ │ │ │ ├── set-array.mjs.map │ │ │ │ │ │ │ │ ├── set-array.umd.js │ │ │ │ │ │ │ │ ├── set-array.umd.js.map │ │ │ │ │ │ │ │ └── types/ │ │ │ │ │ │ │ │ └── set-array.d.ts │ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── set-array.ts │ │ │ │ │ │ ├── source-map/ │ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ │ ├── source-map.mjs │ │ │ │ │ │ │ │ ├── source-map.mjs.map │ │ │ │ │ │ │ │ ├── source-map.umd.js │ │ │ │ │ │ │ │ ├── source-map.umd.js.map │ │ │ │ │ │ │ │ └── types/ │ │ │ │ │ │ │ │ └── source-map.d.ts │ │ │ │ │ │ │ └── package.json │ │ │ │ │ │ ├── sourcemap-codec/ │ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ │ ├── sourcemap-codec.mjs │ │ │ │ │ │ │ │ ├── sourcemap-codec.mjs.map │ │ │ │ │ │ │ │ ├── sourcemap-codec.umd.js │ │ │ │ │ │ │ │ ├── sourcemap-codec.umd.js.map │ │ │ │ │ │ │ │ └── types/ │ │ │ │ │ │ │ │ └── sourcemap-codec.d.ts │ │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ │ └── src/ │ │ │ │ │ │ │ └── sourcemap-codec.ts │ │ │ │ │ │ └── trace-mapping/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ ├── trace-mapping.mjs │ │ │ │ │ │ │ ├── trace-mapping.mjs.map │ │ │ │ │ │ │ ├── trace-mapping.umd.js │ │ │ │ │ │ │ ├── trace-mapping.umd.js.map │ │ │ │ │ │ │ └── types/ │ │ │ │ │ │ │ ├── any-map.d.ts │ │ │ │ │ │ │ ├── binary-search.d.ts │ │ │ │ │ │ │ ├── by-source.d.ts │ │ │ │ │ │ │ ├── resolve.d.ts │ │ │ │ │ │ │ ├── sort.d.ts │ │ │ │ │ │ │ ├── sourcemap-segment.d.ts │ │ │ │ │ │ │ ├── strip-filename.d.ts │ │ │ │ │ │ │ ├── trace-mapping.d.ts │ │ │ │ │ │ │ └── types.d.ts │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── acorn/ │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── bin/ │ │ │ │ │ │ │ └── acorn │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ ├── acorn.d.ts │ │ │ │ │ │ │ ├── acorn.js │ │ │ │ │ │ │ ├── acorn.mjs │ │ │ │ │ │ │ ├── acorn.mjs.d.ts │ │ │ │ │ │ │ └── bin.js │ │ │ │ │ │ └── package.json │ │ │ │ │ ├── buffer-from/ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── readme.md │ │ │ │ │ ├── commander/ │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── Readme.md │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── typings/ │ │ │ │ │ │ └── index.d.ts │ │ │ │ │ └── source-map-support/ │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ ├── README.md │ │ │ │ │ ├── browser-source-map-support.js │ │ │ │ │ ├── node_modules/ │ │ │ │ │ │ └── source-map/ │ │ │ │ │ │ ├── CHANGELOG.md │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dist/ │ │ │ │ │ │ │ ├── source-map.debug.js │ │ │ │ │ │ │ ├── source-map.js │ │ │ │ │ │ │ ├── source-map.min.js │ │ │ │ │ │ │ └── source-map.min.js.map │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── array-set.js │ │ │ │ │ │ │ ├── base64-vlq.js │ │ │ │ │ │ │ ├── base64.js │ │ │ │ │ │ │ ├── binary-search.js │ │ │ │ │ │ │ ├── mapping-list.js │ │ │ │ │ │ │ ├── quick-sort.js │ │ │ │ │ │ │ ├── source-map-consumer.js │ │ │ │ │ │ │ ├── source-map-generator.js │ │ │ │ │ │ │ ├── source-node.js │ │ │ │ │ │ │ └── util.js │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ ├── source-map.d.ts │ │ │ │ │ │ └── source-map.js │ │ │ │ │ ├── package.json │ │ │ │ │ ├── register-hook-require.js │ │ │ │ │ ├── register.js │ │ │ │ │ └── source-map-support.js │ │ │ │ ├── package.json │ │ │ │ └── tools/ │ │ │ │ ├── domprops.js │ │ │ │ ├── exit.cjs │ │ │ │ ├── props.html │ │ │ │ └── terser.d.ts │ │ │ └── watch/ │ │ │ ├── LICENSE │ │ │ ├── cli-custom.js │ │ │ ├── cli.js │ │ │ ├── main.js │ │ │ ├── node_modules/ │ │ │ │ ├── exec-sh/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── lib/ │ │ │ │ │ │ └── exec-sh.js │ │ │ │ │ └── package.json │ │ │ │ ├── merge/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── bower.json │ │ │ │ │ ├── merge.js │ │ │ │ │ ├── merge.min.js │ │ │ │ │ └── package.json │ │ │ │ └── minimist/ │ │ │ │ ├── LICENSE │ │ │ │ ├── index.js │ │ │ │ └── package.json │ │ │ └── package.json │ │ ├── webify-linux32 │ │ ├── webify-linux64 │ │ ├── webify-mac │ │ └── yuicompressor-2.4.7.jar │ ├── blackberry/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── template/ │ │ ├── bar-descriptor.xml │ │ └── config.xml │ ├── cpp/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── static/ │ │ ├── BuildMain.xml │ │ └── Main.cpp │ ├── cppia/ │ │ └── hxml/ │ │ ├── debug.hxml │ │ ├── final.hxml │ │ └── release.hxml │ ├── cs/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── src/ │ │ └── cs/ │ │ └── ndll/ │ │ ├── CFFICSLoader.cs │ │ ├── CSAbstract.cs │ │ ├── CSHandleContainer.cs │ │ ├── CSHandleScope.cs │ │ ├── CSPersistent.cs │ │ ├── DelegateConverter.cs │ │ ├── HandleUtils.cs │ │ ├── NDLLFunction.cs │ │ └── NativeMethods.cs │ ├── electron/ │ │ ├── haxe/ │ │ │ └── ElectronSetup.hx │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── template/ │ │ └── package.json │ ├── extension/ │ │ ├── .gitignore │ │ ├── Extension.hx │ │ ├── dependencies/ │ │ │ └── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── haxe/ │ │ │ └── extension/ │ │ │ └── Extension.java │ │ ├── haxelib.json │ │ ├── include.xml │ │ └── project/ │ │ ├── Build.xml │ │ ├── common/ │ │ │ ├── Extension.cpp │ │ │ └── ExternalInterface.cpp │ │ └── include/ │ │ └── Utils.h │ ├── flash/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── templates/ │ │ ├── chrome/ │ │ │ ├── expressInstall.swf │ │ │ ├── index.html │ │ │ ├── manifest.json │ │ │ └── swfobject.js │ │ ├── opera/ │ │ │ ├── config.xml │ │ │ ├── expressInstall.swf │ │ │ ├── index.html │ │ │ └── swfobject.js │ │ └── web/ │ │ ├── expressInstall.swf │ │ ├── index.html │ │ └── swfobject.js │ ├── haxe/ │ │ ├── ApplicationMain.hx │ │ └── ManifestResources.hx │ ├── hl/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── mac-launch.sh │ ├── html5/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ ├── hxswfml.n │ │ ├── npm/ │ │ │ ├── package.json │ │ │ ├── webpack.common.js │ │ │ ├── webpack.dev.js │ │ │ └── webpack.prod.js │ │ ├── output.js │ │ └── template/ │ │ └── index.html │ ├── hxformat.json │ ├── ios/ │ │ ├── storyboards/ │ │ │ └── splash.storyboard │ │ └── template/ │ │ ├── {{app.file}}/ │ │ │ ├── Classes/ │ │ │ │ └── Main.mm │ │ │ ├── Images.xcassets/ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ └── LaunchImage.launchimage/ │ │ │ │ └── Contents.json │ │ │ ├── exportOptions-adhoc.plist │ │ │ ├── exportOptions-appstore.plist │ │ │ ├── exportOptions-development.plist │ │ │ ├── exportOptions-enterprise.plist │ │ │ ├── haxe/ │ │ │ │ ├── Build.hxml │ │ │ │ ├── BuildHxcppMbedtls.xml │ │ │ │ └── makefile │ │ │ ├── {{app.file}}-Info.plist │ │ │ ├── {{app.file}}-Prefix.pch │ │ │ └── {{app.file}}.entitlements │ │ └── {{app.file}}.xcodeproj/ │ │ └── project.pbxproj │ ├── java/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── lib/ │ │ ├── disruptor.jar │ │ └── lwjgl.jar │ ├── mac/ │ │ ├── Entitlements.plist │ │ └── Info.plist │ ├── neko/ │ │ └── hxml/ │ │ ├── debug.hxml │ │ ├── final.hxml │ │ └── release.hxml │ ├── nodejs/ │ │ └── hxml/ │ │ ├── debug.hxml │ │ ├── final.hxml │ │ └── release.hxml │ ├── project/ │ │ ├── Assets/ │ │ │ └── .gitignore │ │ ├── Source/ │ │ │ └── Main.hx │ │ ├── project.xml │ │ └── {{app.file}}.hxproj │ ├── tizen/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── template/ │ │ ├── CommandLineBuild/ │ │ │ └── build_data │ │ └── manifest.xml │ ├── tvos/ │ │ ├── PROJ/ │ │ │ ├── Classes/ │ │ │ │ └── Main.mm │ │ │ ├── Images.xcassets/ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ └── LaunchImage.launchimage/ │ │ │ │ └── Contents.json │ │ │ ├── PROJ-Entitlements.plist │ │ │ ├── PROJ-Info.plist │ │ │ ├── PROJ-Prefix.pch │ │ │ ├── exportOptions-adhoc.plist │ │ │ ├── exportOptions-appstore.plist │ │ │ ├── exportOptions-development.plist │ │ │ ├── exportOptions-enterprise.plist │ │ │ └── haxe/ │ │ │ ├── Build.hxml │ │ │ ├── BuildHxcppMbedtls.xml │ │ │ └── makefile │ │ └── PROJ.xcodeproj/ │ │ ├── project.pbxproj │ │ └── project.xcworkspace/ │ │ └── contents.xcworkspacedata │ ├── webassembly/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ ├── output.js │ │ └── template/ │ │ └── index.html │ ├── webos/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── template/ │ │ ├── appinfo.json │ │ └── package.properties │ ├── windows/ │ │ └── resource/ │ │ └── ApplicationMain.rc │ ├── winjs/ │ │ ├── hxml/ │ │ │ ├── debug.hxml │ │ │ ├── final.hxml │ │ │ └── release.hxml │ │ └── template/ │ │ ├── PowerShell_Set_Unrestricted.reg │ │ ├── source/ │ │ │ ├── css/ │ │ │ │ └── default.css │ │ │ ├── index.html │ │ │ ├── js/ │ │ │ │ └── main.js │ │ │ ├── lib/ │ │ │ │ └── winjs-4.0.1/ │ │ │ │ ├── css/ │ │ │ │ │ ├── ui-dark.css │ │ │ │ │ └── ui-light.css │ │ │ │ └── js/ │ │ │ │ ├── base.js │ │ │ │ └── ui.js │ │ │ ├── package.appxmanifest │ │ │ ├── uwp-project.jsproj │ │ │ └── uwp-project_TemporaryKey.pfx │ │ └── uwp-project.sln │ └── winrt/ │ ├── appx/ │ │ └── AppxManifest.xml │ ├── hxml/ │ │ ├── debug.hxml │ │ ├── final.hxml │ │ └── release.hxml │ ├── scripts/ │ │ └── newcertificate.ps1 │ ├── static/ │ │ ├── BuildMain.xml │ │ └── Main.cpp │ └── temp/ │ ├── embed.resfiles │ ├── layout.resfiles │ ├── pri.resfiles │ ├── priconfig.xml │ └── resources.resfiles ├── tests/ │ ├── runtime/ │ │ ├── .gitignore │ │ ├── .munit │ │ ├── README.md │ │ ├── project.xml │ │ ├── run.sh │ │ ├── test/ │ │ │ └── lime/ │ │ │ └── WindowTest.hx │ │ └── test.hxml │ └── unit/ │ ├── project.xml │ ├── src/ │ │ ├── TestMain.hx │ │ └── utils/ │ │ ├── ArrayBufferTest.hx │ │ ├── DataViewTest.hx │ │ ├── UInt16ArrayTest.hx │ │ ├── UInt32ArrayTest.hx │ │ └── UInt8ArrayTest.hx │ └── templates/ │ └── html5/ │ └── template/ │ └── index.html └── tools/ ├── AliasScript.hx ├── CommandLineTools.hx ├── RunScript.hx ├── SVGExport.hx ├── alias.hxml ├── include.xml ├── mpeg/ │ └── audio/ │ ├── Element.hx │ ├── Emphasis.hx │ ├── Frame.hx │ ├── FrameHeader.hx │ ├── Info.hx │ ├── Layer.hx │ ├── Mode.hx │ ├── MpegAudio.hx │ ├── MpegAudioReader.hx │ ├── MpegVersion.hx │ └── Utils.hx ├── platforms/ │ ├── AIRPlatform.hx │ ├── AndroidPlatform.hx │ ├── FlashPlatform.hx │ ├── HTML5Platform.hx │ ├── IOSPlatform.hx │ ├── LinuxPlatform.hx │ ├── MacPlatform.hx │ ├── TVOSPlatform.hx │ ├── TizenPlatform.hx │ ├── WebAssemblyPlatform.hx │ ├── WindowsPlatform.hx │ └── extraParams.hxml ├── resources/ │ └── cacert.pem ├── run.hxml ├── svg.hxml ├── tools.hxml └── utils/ ├── CreateTemplate.hx ├── JavaExternGenerator.hx ├── PlatformSetup.hx └── publish/ └── FirefoxMarketplace.hx ================================================ FILE CONTENTS ================================================ ================================================ FILE: .dockerignore ================================================ */.DS_Store .DS_Store .DS_Store? Export/ ndll/*/lime* ndll/*/liblime* ndll/*/nme* nddl/*/libnme* project/all_objs project/obj project/vc*.pdb project/winrt/shaders/ *.userprefs *.swp .idea/ *.iml tools/*.n tools/*.exe haxedoc.xml docs/*.xml docs/xml docs/pages* *.git* ================================================ FILE: .gitattributes ================================================ *.sh eol=lf ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: [jgranick, joshtynjala] patreon: openfl open_collective: openfl ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] ================================================ FILE: .github/workflows/main.yml ================================================ name: CI on: [push, pull_request] env: HAXE_VERSION: 4.2.5 HXCPP_COMPILE_CACHE: ${{ github.workspace }}/.hxcpp_cache jobs: linux: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v6 with: submodules: true - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev libmbedtls-dev libpng-dev libturbojpeg-dev libuv1-dev libvorbis-dev - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ env.HAXE_VERSION }} - name: Set HAXEPATH run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib --global update haxelib --quiet haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib install utest --quiet - name: Rebuild Lime tools run: | haxelib dev lime ${{ github.workspace }} haxelib run lime rebuild tools -nocolor -verbose -nocffi haxelib run lime setup -alias -y -nocffi - name: Rebuild Lime (Linux) run: | lime rebuild linux -32 -release -nocolor -verbose -nocffi lime rebuild linux -64 -release -nocolor -verbose -nocffi lime rebuild hl -clean -release -nocolor -verbose -nocffi - uses: actions/upload-artifact@v7 with: name: Linux-NDLL path: | ndll/Linux/ !**/.gitignore if-no-files-found: error - uses: actions/upload-artifact@v7 with: name: Linux64-NDLL path: | ndll/Linux64/ !**/.gitignore if-no-files-found: error - uses: actions/upload-artifact@v7 with: name: Linux64-Hashlink path: | templates/bin/hl/Linux64 if-no-files-found: error - name: Run unit tests working-directory: tests/unit run: | lime test neko -release -verbose -nocolor lime test hl -release -verbose -nocolor lime test linux -release -verbose -nocolor - name: Install samples run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor lime build HelloWorld linux -release -verbose -nocolor - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor lime build SimpleImage linux -release -verbose -nocolor - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor lime build SimpleAudio linux -release -verbose -nocolor linux-arm64: runs-on: ubuntu-22.04-arm steps: - uses: actions/checkout@v6 with: submodules: true - name: Install system dependencies run: | sudo add-apt-repository ppa:haxe/releases -y sudo apt-get update sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev libmbedtls-dev libpng-dev libturbojpeg-dev libuv1-dev libvorbis-dev # krdlab/setup-haxe doesn't support arm64 linux # so this is our workaround for now - name: Install Haxe run: | sudo add-apt-repository ppa:haxe/releases -y sudo apt-get update sudo apt-get install -y haxe mkdir $HOME/haxelib haxelib setup $HOME/haxelib - name: Set HAXEPATH run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib --global update haxelib --quiet haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib install utest --quiet - name: Enable HXCPP compile cache run: | echo "HXCPP_COMPILE_CACHE=~/.hxcpp" >> $GITHUB_ENV - name: Rebuild Lime tools run: | haxelib dev lime ${{ github.workspace }} haxelib run lime rebuild tools -nocolor -verbose -nocffi haxelib run lime setup -alias -y -nocffi - name: Rebuild Lime (Linux ARM64) run: | lime rebuild linux -release -nocolor -verbose -nocffi - uses: actions/upload-artifact@v7 with: name: LinuxArm64-NDLL path: | ndll/LinuxArm64/ !**/.gitignore if-no-files-found: error - name: Run unit tests working-directory: tests/unit run: | lime test neko -release -verbose -nocolor lime test linux -release -verbose -nocolor - name: Install samples run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor lime build HelloWorld linux -release -verbose -nocolor - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor lime build SimpleImage linux -release -verbose -nocolor - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor lime build SimpleAudio linux -release -verbose -nocolor macos: runs-on: macos-14 steps: - uses: actions/checkout@v6 with: submodules: true - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ env.HAXE_VERSION }} - name: Set HAXEPATH run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install HashLink dependencies run: | arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" pushd project/lib/hashlink arch -x86_64 /usr/local/bin/brew update rm /usr/local/bin/2to3* rm /usr/local/bin/idle3* rm /usr/local/bin/pydoc3* rm /usr/local/bin/python3* rm /usr/local/bin/pip3* arch -x86_64 /usr/local/bin/brew bundle popd - name: Install Haxe dependencies run: | curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib install utest --quiet - name: Rebuild Lime tools run: | haxelib dev lime ${{ github.workspace }} haxelib run lime rebuild tools -nocolor -verbose -nocffi haxelib run lime setup -alias -y -nocffi - name: Rebuild Lime (macOS) run: | lime rebuild macos -clean -release -64 -nocolor -verbose -nocffi lime rebuild macos -clean -release -arm64 -nocolor -verbose -nocffi lime rebuild hl -clean -release -nocolor -verbose -nocffi - uses: actions/upload-artifact@v7 with: name: Mac64-NDLL path: | ndll/Mac64/ !**/.gitignore if-no-files-found: error - uses: actions/upload-artifact@v7 with: name: MacArm64-NDLL path: | ndll/MacArm64/ !**/.gitignore if-no-files-found: error - uses: actions/upload-artifact@v7 with: name: Mac64-Hashlink path: | templates/bin/hl/Mac64 if-no-files-found: error - name: Run unit tests working-directory: tests/unit run: | lime test neko -release -verbose -nocolor lime test hl -release -verbose -nocolor lime test mac -release -verbose -nocolor - name: Install samples run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet # - name: Build HelloWorld sample # run: | # lime create HelloWorld -verbose -nocolor # lime build HelloWorld macos -release -verbose -nocolor - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor lime build SimpleImage macos -release -verbose -nocolor - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor lime build SimpleAudio macos -release -verbose -nocolor windows: runs-on: windows-latest steps: - uses: actions/checkout@v6 with: submodules: true - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ env.HAXE_VERSION }} - uses: joshtynjala/setup-adobe-air-action@v2 with: air-version: "33.1" accept-license: true - name: Set HAXEPATH run: | echo "HAXEPATH=$Env:HAXE_STD_PATH\.." >> $Env:GITHUB_ENV - name: Install Haxe dependencies run: | curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib install utest --quiet - name: Rebuild Lime tools run: | haxelib dev lime ${{ github.workspace }} haxelib run lime rebuild tools -nocolor -verbose -nocffi haxelib run lime setup -alias -y -nocffi haxelib run lime config AIR_SDK ${{ env.AIR_HOME }} -eval - name: Rebuild Lime (Windows) run: | lime rebuild windows -32 -release -nocolor -verbose -nocffi lime rebuild windows -64 -release -nocolor -verbose -nocffi lime rebuild hl -clean -release -nocolor -verbose -nocffi - uses: actions/upload-artifact@v7 with: name: Windows-NDLL path: | ndll/Windows/ !**/.gitignore if-no-files-found: error - uses: actions/upload-artifact@v7 with: name: Windows64-NDLL path: | ndll/Windows64/ !**/.gitignore if-no-files-found: error # - uses: actions/upload-artifact@v7 # with: # name: Windows-Hashlink # path: | # templates/bin/hl/Windows # if-no-files-found: error - uses: actions/upload-artifact@v7 with: name: Windows64-Hashlink path: | templates/bin/hl/Windows64 if-no-files-found: error - name: Run unit tests working-directory: tests/unit run: | lime test neko -release -verbose -nocolor lime test hl -release -verbose -nocolor lime test air -release -verbose -nocolor lime test windows -release -verbose -nocolor - name: Install samples run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor lime build HelloWorld windows -release -verbose -nocolor - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor lime build SimpleImage windows -release -verbose -nocolor - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor lime build SimpleAudio windows -release -verbose -nocolor - name: Rebuild Lime (Windows, Mingw) run: | rm ndll/Windows64/* lime rebuild windows -Dmingw -D MINGW_ROOT=C:\mingw64 -64 -clean -release -nocolor -verbose -nocffi - uses: actions/upload-artifact@v7 with: name: Windows64-MinGW-NDLL path: | ndll/Windows64/ !**/.gitignore if-no-files-found: error android: runs-on: ubuntu-22.04 strategy: matrix: ndk-version: [r28c, stable] fail-fast: false steps: - uses: actions/checkout@v6 with: submodules: true - name: Install Android NDK uses: nttld/setup-ndk@v1 id: setup-ndk if: matrix.ndk-version != 'stable' with: ndk-version: ${{ matrix.ndk-version }} - uses: actions/setup-java@v5 with: distribution: "zulu" java-version: 17 - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ env.HAXE_VERSION }} - name: Set HAXEPATH run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet - name: Prepare Lime run: | haxelib dev lime ${{ github.workspace }} haxelib run lime setup -alias -y -nocffi -eval - name: Configure Android support run: | lime config ANDROID_SDK $ANDROID_HOME -eval lime config ANDROID_NDK_ROOT ${{ env.LIME_NDK_ROOT }} -eval lime config JAVA_HOME $JAVA_HOME -eval lime config ANDROID_SETUP true -eval lime config -eval env: LIME_NDK_ROOT: ${{ matrix.ndk-version == 'stable' && '$ANDROID_NDK_ROOT' || steps.setup-ndk.outputs.ndk-path }} - name: Rebuild Lime (Android) run: | lime rebuild android -release -nocolor -verbose -nocffi -eval - uses: actions/upload-artifact@v7 with: name: Android-NDLL path: | ndll/Android/ !**/.gitignore if-no-files-found: error if: matrix.ndk-version != 'stable' - name: Install samples run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor -eval lime build HelloWorld android -release -verbose -nocolor -eval - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor -eval lime build SimpleImage android -release -verbose -nocolor -eval - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor -eval lime build SimpleAudio android -release -verbose -nocolor -eval ios: runs-on: macos-14 steps: - uses: actions/checkout@v6 with: submodules: true - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ env.HAXE_VERSION }} - name: Set HAXEPATH run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet - name: Prepare Lime run: | haxelib dev lime ${{ github.workspace }} haxelib run lime setup -alias -y -nocffi -eval - name: Rebuild Lime (iOS) run: | lime rebuild ios -clean -release -verbose -nocolor -eval - uses: actions/upload-artifact@v7 with: name: iPhone-NDLL path: | ndll/iPhone/ !**/.gitignore if-no-files-found: error - name: Install samples run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet # - name: Build HelloWorld sample # run: | # lime create HelloWorld -verbose -nocolor -eval # lime build HelloWorld ios -simulator -release -verbose -nocolor -eval - name: Build SimpleImage sample (Simulator) run: | lime create SimpleImage -verbose -nocolor -eval lime build SimpleImage ios -simulator -release -verbose -nocolor -eval - name: Build SimpleAudio sample (Device) run: | lime create SimpleAudio -verbose -nocolor -eval lime build SimpleAudio ios -release -nosign -verbose -nocolor -eval package-haxelib: needs: [linux, macos, windows, android, ios] runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v6 with: submodules: true - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ env.HAXE_VERSION }} - name: Set HAXEPATH run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib install svg --quiet haxelib install openfl --quiet - name: Rebuild Lime tools run: | haxelib dev lime ${{ github.workspace }} haxelib run lime rebuild tools -nocolor -verbose -nocffi haxelib run lime setup -alias -y -nocffi cp project/lib/hashlink/other/osx/entitlements.xml templates/bin/hl/entitlements.xml mkdir templates/bin/hl/include cp project/lib/hashlink/src/hlc.h templates/bin/hl/include/hlc.h cp project/lib/hashlink/src/hl.h templates/bin/hl/include/hl.h cp project/lib/hashlink/src/hlc_main.c templates/bin/hl/include/hlc_main.c - uses: actions/download-artifact@v8 with: name: Android-NDLL path: ndll/Android/ - uses: actions/download-artifact@v8 with: name: iPhone-NDLL path: ndll/iPhone/ # - uses: actions/download-artifact@v8 # with: # name: Linux-NDLL # path: ndll/Linux/ - uses: actions/download-artifact@v8 with: name: Linux64-NDLL path: ndll/Linux64/ - uses: actions/download-artifact@v8 with: name: Mac64-NDLL path: ndll/Mac64/ - uses: actions/download-artifact@v8 with: name: MacArm64-NDLL path: ndll/MacArm64/ - uses: actions/download-artifact@v8 with: name: Windows-NDLL path: ndll/Windows/ - uses: actions/download-artifact@v8 with: name: Windows64-NDLL path: ndll/Windows64/ # - uses: actions/download-artifact@v8 # with: # name: Windows-Hashlink # path: templates/bin/hl/Windows - uses: actions/download-artifact@v8 with: name: Windows64-Hashlink path: templates/bin/hl/Windows64 - uses: actions/download-artifact@v8 with: name: Mac64-Hashlink path: templates/bin/hl/Mac64 - uses: actions/download-artifact@v8 with: name: Linux64-Hashlink path: templates/bin/hl/Linux64 - name: Rebuild Lime run.n working-directory: tools run: | haxe run.hxml - name: Rebuild Lime svg.n working-directory: tools run: | haxe svg.hxml - uses: actions/upload-artifact@v7 with: name: lime-haxelib path: | ./ !project/ !haxe-*-*/ !neko-*-*/ !.git/ compression-level: 9 if-no-files-found: error docs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v6 - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ env.HAXE_VERSION }} - name: Set HAXEPATH run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | haxelib install dox --quiet haxelib dev lime ${{ github.workspace }} - name: Build docs working-directory: docs run: | haxe build.hxml - uses: actions/upload-artifact@v7 with: name: lime-docs path: docs/pages if-no-files-found: error flash-samples: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v6 - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ env.HAXE_VERSION }} - name: Set HAXEPATH run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - name: Prepare Lime run: | haxelib dev lime ${{ github.workspace }} haxelib run lime setup -alias -y -nocffi -eval - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor -eval lime build HelloWorld flash -release -verbose -nocolor -eval - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor -eval lime build SimpleImage flash -release -verbose -nocolor -eval - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor -eval lime build SimpleAudio flash -release -verbose -nocolor -eval air-samples: runs-on: windows-latest strategy: matrix: haxe-version: [4.0.5, 4.1.5, 4.2.5, 4.3.6] steps: - uses: actions/checkout@v6 with: submodules: true - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ matrix.haxe-version }} - uses: joshtynjala/setup-adobe-air-action@v2 with: air-version: "33.1" accept-license: true - name: Set HAXEPATH run: | echo "HAXEPATH=$Env:HAXE_STD_PATH\.." >> $Env:GITHUB_ENV - name: Install Haxe dependencies run: | curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - name: Prepare Lime run: | haxelib dev lime ${{ github.workspace }} haxelib run lime setup -alias -y -nocffi -eval haxelib run lime config AIR_SDK ${{ env.AIR_HOME }} -eval - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor -eval lime build HelloWorld air -release -verbose -nocolor -eval - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor -eval lime build SimpleImage air -release -verbose -nocolor -eval - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor -eval lime build SimpleAudio air -release -verbose -nocolor -eval hashlink-samples: needs: package-haxelib strategy: matrix: os: [windows-latest, ubuntu-22.04, macos-14] runs-on: ${{ matrix.os }} steps: - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ env.HAXE_VERSION }} - name: Set HAXEPATH (Windows) if: runner.os == 'Windows' run: | echo "HAXEPATH=$Env:HAXE_STD_PATH\.." >> $Env:GITHUB_ENV - name: Set HAXEPATH (Mac/Linux) if: runner.os != 'Windows' run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - uses: actions/download-artifact@v8 with: name: lime-haxelib path: lime-haxelib - name: Prepare Lime run: | haxelib dev lime lime-haxelib haxelib run lime setup -alias -y -nocffi - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor lime build HelloWorld hl -release -verbose -nocolor - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor lime build SimpleImage hl -release -verbose -nocolor - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor lime build SimpleAudio hl -release -verbose -nocolor hashlinkc-samples: needs: package-haxelib strategy: matrix: os: [windows-latest, ubuntu-22.04, macos-14] runs-on: ${{ matrix.os }} steps: - uses: krdlab/setup-haxe@v2 with: haxe-version: 4.3.3 # minimum required version for HL/C is 4.3.3 - name: Set HAXEPATH (Windows) if: runner.os == 'Windows' run: | echo "HAXEPATH=$Env:HAXE_STD_PATH\.." >> $Env:GITHUB_ENV - name: Set HAXEPATH (Mac/Linux) if: runner.os != 'Windows' run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - uses: actions/download-artifact@v8 with: name: lime-haxelib path: lime-haxelib - name: Prepare Lime run: | haxelib dev lime lime-haxelib haxelib run lime setup -alias -y -nocffi - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor lime build HelloWorld hlc -release -verbose -nocolor - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor lime build SimpleImage hlc -release -verbose -nocolor - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor lime build SimpleAudio hlc -release -verbose -nocolor html5-samples: needs: package-haxelib runs-on: ubuntu-22.04 strategy: matrix: haxe-version: [3.4.7, 4.0.5, 4.1.5, 4.2.5, 4.3.6] steps: - uses: actions/checkout@v6 - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ matrix.haxe-version }} - name: Set HAXEPATH run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | haxelib install genes --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - uses: actions/download-artifact@v8 with: name: lime-haxelib path: lime-haxelib - name: Prepare Lime run: | haxelib dev lime lime-haxelib haxelib run lime setup -alias -y -nocffi - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor lime build HelloWorld html5 -release -verbose -nocolor - name: Build HelloWorld variants if: ${{ matrix.haxe-version != '3.4.7' }} run: | lime build HelloWorld html5 -clean -release -verbose -nocolor --haxelib=genes lime build HelloWorld html5 -clean -release -verbose -nocolor -minify -terser - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor lime build SimpleImage html5 -release -verbose -nocolor - name: Build SimpleImage variants if: ${{ matrix.haxe-version != '3.4.7' }} run: | lime build SimpleImage html5 -clean -release -verbose -nocolor --haxelib=genes lime build SimpleImage html5 -clean -release -verbose -nocolor -minify -terser - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor lime build SimpleAudio html5 -release -verbose -nocolor - name: Build SimpleAudio variants if: ${{ matrix.haxe-version != '3.4.7' }} run: | lime build SimpleAudio html5 -clean -release -verbose -nocolor --haxelib=genes lime build SimpleAudio html5 -clean -release -verbose -nocolor -minify -terser neko-samples: needs: package-haxelib strategy: matrix: haxe-version: [3.4.7, 4.2.5] os: [windows-latest, ubuntu-22.04, macos-14] runs-on: ${{ matrix.os }} steps: - uses: krdlab/setup-haxe@v2 with: haxe-version: ${{ matrix.haxe-version }} - name: Set HAXEPATH (Windows) if: runner.os == 'Windows' run: | echo "HAXEPATH=$Env:HAXE_STD_PATH\.." >> $Env:GITHUB_ENV - name: Set HAXEPATH (Mac/Linux) if: runner.os != 'Windows' run: | echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV - name: Install Haxe dependencies run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - uses: actions/download-artifact@v8 with: name: lime-haxelib path: lime-haxelib - name: Prepare Lime run: | haxelib dev lime lime-haxelib haxelib run lime setup -alias -y -nocffi - name: Build HelloWorld sample run: | lime create HelloWorld -verbose -nocolor lime build HelloWorld neko -release -verbose -nocolor - name: Build SimpleImage sample run: | lime create SimpleImage -verbose -nocolor lime build SimpleImage neko -release -verbose -nocolor - name: Build SimpleAudio sample run: | lime create SimpleAudio -verbose -nocolor lime build SimpleAudio neko -release -verbose -nocolor notify: runs-on: ubuntu-22.04 needs: [package-haxelib, docs, android, flash-samples, air-samples, hashlink-samples, hashlinkc-samples, html5-samples, ios, linux, macos, neko-samples, windows] if: ${{ github.repository == 'openfl/lime' && github.event_name != 'pull_request' }} steps: - name: Notify Discord uses: nobrayner/discord-webhook@v1 with: github-token: ${{ secrets.github_token }} discord-webhook: ${{ secrets.DISCORD_WEBHOOK }} ================================================ FILE: .gitignore ================================================ */.DS_Store .DS_Store .DS_Store? Export/ ndll/*/lime* ndll/*/liblime* ndll/*/*.hdll ndll/*/*.hash ndll/*/*.so ndll/*/*.dylib ndll/*/*.lib ndll/*/hl* ndll/*/*.dll templates/bin/hl/* project/all_objs project/obj project/vc*.pdb *.userprefs *.swp .idea/ *.iml tools/*.n tools/*.exe tools/obj haxedoc.xml docs/*.xml docs/xml docs/pages* docs/dump .vscode/settings.json package-lock.json node_modules !templates/**/node_modules .vscode/ tests/**/bin/ ================================================ FILE: .gitmodules ================================================ [submodule "project/lib/vorbis"] path = project/lib/vorbis url = https://github.com/xiph/vorbis shallow = true [submodule "project/lib/sdl"] path = project/lib/sdl url = https://github.com/libsdl-org/SDL shallow = true [submodule "project/lib/openal"] path = project/lib/openal url = https://github.com/kcat/openal-soft shallow = true [submodule "project/lib/curl"] path = project/lib/curl url = https://github.com/curl/curl shallow = true [submodule "project/lib/ogg"] path = project/lib/ogg url = https://github.com/xiph/ogg shallow = true [submodule "project/lib/zlib"] path = project/lib/zlib url = https://github.com/madler/zlib shallow = true [submodule "project/lib/neko"] path = project/lib/neko url = https://github.com/HaxeFoundation/neko shallow = true [submodule "project/lib/png"] path = project/lib/png url = https://github.com/glennrp/libpng shallow = true [submodule "project/lib/jpeg"] path = project/lib/jpeg url = https://github.com/libjpeg-turbo/libjpeg-turbo shallow = true [submodule "project/lib/freetype"] path = project/lib/freetype url = https://github.com/freetype/freetype shallow = true [submodule "project/lib/harfbuzz"] path = project/lib/harfbuzz url = https://github.com/harfbuzz/harfbuzz shallow = true [submodule "project/lib/cairo"] path = project/lib/cairo url = https://gitlab.freedesktop.org/cairo/cairo.git shallow = true [submodule "project/lib/pixman"] path = project/lib/pixman url = https://gitlab.freedesktop.org/pixman/pixman.git shallow = true [submodule "project/lib/lzma"] path = project/lib/lzma url = https://github.com/openfl/liblzma shallow = true [submodule "project/lib/tinyfiledialogs"] path = project/lib/tinyfiledialogs url = https://github.com/openfl/libtinyfiledialogs shallow = true [submodule "project/lib/efsw"] path = project/lib/efsw url = https://github.com/SpartanJ/efsw shallow = true [submodule "project/lib/vpx"] path = project/lib/vpx url = https://github.com/webmproject/libvpx shallow = true [submodule "project/lib/webm"] path = project/lib/webm url = https://github.com/webmproject/libwebm shallow = true [submodule "project/lib/mbedtls"] path = project/lib/mbedtls url = https://github.com/Mbed-TLS/mbedtls shallow = true [submodule "project/lib/mojoal"] path = project/lib/mojoal url = https://github.com/icculus/mojoAL shallow = true [submodule "project/lib/hashlink"] path = project/lib/hashlink url = https://github.com/HaxeFoundation/hashlink shallow = true ================================================ FILE: CHANGELOG.md ================================================ Changelog ========= 8.3.1 (02/16/2026) ------------------ - Added validation for `ANDROID_SDK`, `ANDROID_NDK_ROOT`, `JAVA_HOME` and `AIR_SDK` paths to ensure that they exist and are directories. - Added verbose log message when rebuilding a Haxelib's tools to show the name of the Haxelib. - Added warning log message when rebuilding a Haxelib's tools when no rebuild script is found. - Added warning log message when `` value is unrecognized. - Added error when attemping to rebuild HashLink for ARM64. - Added internal exception message to error reported when NDLL loading fails. - Fixed exception on some targets in `AudioBuffer` when trying to read codec signature string from bytes. - Fixed `length` value of `Bytes` on HTML5 target when using `Bytes.fromBytes()`. - Fixed _lime.ndll_ build on systems with GCC 15 compiler. - Fixed _lime.ndll_ build on ARM64 Linux distributions other than Raspberry Pi OS. - Fixed `--no-output` behavior in Android build that exited before all architectures were handled. - Fixed `JNISafety` to make it safe for macro context. - Fixed warnings when building pixman with Android NDKs before r22. - Fixed _lime.ndll_ build when using MinGW compiler. - Fixed format of `PLATFORM` define for Android. - Fixed support for spaces in paths when building for iOS or tvOS. - Fixed DCE incorrectly disabling orientation change listeners on Android. - Fixed value of `context.attributes.hardware` for `HTML5Window` when creating context. - Fixed SDL submodule build for some Linux distributions including Raspberry Pi OS. - Fixed emulated `sys.io.File` on Adobe AIR to use `File.workingDirectory` for relative paths, if available. 8.3.0 (11/11/2025) ------------------ - Added `onDisplayOrientation` and `onDeviceOrientation` events to `Application` to detect mobile device orientation changes. - Added `safeArea` property to `Display` to detect region safe from cutouts and rounded corners. - Added `rumble()` method to `Gamepad`. - Added `-json` flag, which works similarly to the `-xml` flag, but outputs types in JSON format. - Added `layoutInDisplayCutoutMode` to ``, which may be set to `default`, `always`, `never`, or `shortEdges`. - Added support for Windows resource file to set metadata in executable. - Added `pannerAttr()` method to `Howler` to configure panner node's attributes for a sound or group of sounds. - Added `addString()` method to `HBBuffer` to properly handle encoding conversions in native code. - Added `screensize` and `screenDPI` to `` to customize the mobile simulator. - Added `onUncaughtError` event to `ThreadPool` to allow main thread to handle exceptions in `doWork`. - Added `strikethroughPosition` and `strikethroughThickness` to `Font`. - Added separate `lime-openalsoft` and `lime-mojoal` defines to help detect which library is used. - Added `gradle-properties` to `` to customize properties for Android Gradle builds. - Fixed missing `hl-ver` define to configure the Haxe compiler to target Lime's bundled HashLink (unless a custom `HL_PATH` is set). - Fixed display of preload progress for packed asset libraries. - Fixed mouse move and mouse up event failing to dispatch outside window bounds when mouse button is down. - Fixed `hardware` attribute not being set on context creation. - Fixed some window properties not getting set properly from attributes on window creation. - Fixed performance issues in `ThreadPool` by overhauling job scheduling. - Fixed exception on Windows when exiting program by using `SDL_QuitSubSystem` in native code. - Fixed separate private variables for `visible` and `hidden` that got out of sync. - Fixed crash on HashLink when passing `NULL` device to OpenAL bindings. - Fixed many variables that defaulted to `Dynamic` because they did not declare a type and were not initialized. - Fixed `ThreadPool` throwing an exception when `Application.current` is `null`. - Fixed old _run.n_ in Haxelib because the CI server did not build it. - Changed Android rebuild to use NDK r28c for Haxelib to support new 16KB native library aligment requirement. - Changed Android target SDK version to 35. May require updating to JDK 17 or newer. - Changed default Android architecture for x86 from x86_32 to x86_64 (can still rebuild x86_32 manually). - Changed default Android emulator architectures to include ARM64 to better support ARM64 on macOS. - Changed default Adobe AIR SDK version from 28.0 to 32.0 because 28.0 is no longer available for download from Adobe. - Changed `minimum-sdk-version` in `` to customize the `PLATFORM` or `PLATFORM_NUMBER` values used by Android builds. - Changed _index.html_ template to use `mobile-web-app-capable` instead of deprecated `apple-mobile-web-app-capable`. - Removed Linux x86_32 binaries from Haxelib (but can still rebuild them manually). - Removed custom implementation of `haxe.io.Bytes`. - Updated bundled HashLink executable version to 1.14. - Updated SDL submodule to version 2.30.12. 8.2.3 (10/01/2025) ------------------ - Fixed JPEG rendering on 32-bit platforms. - Fixed application hang in `FileDialog` on Windows by forcing `SINGLE_THREADED` flag. - Fixed iOS device installation on versions older than iOS 16. - Fixed how iOS 16 and newer devices are selected for testing to support more available devices. - Fixed ability to specify the version of a Haxelib when using a local _.haxelib_ repository. - Fixed exception when initializing vibration on Android and permission was disabled. - Fixed parent directory incorrectly opened in `FileDialog` if the default path is a directory. - Fixed Unicode system path conversions on Linux. - Fixed `password`, `alias`, and `aliasPassword` being assigned incorrectly in Lime tools. - Fixed crash in `AudioManager` when `alc.openDevice()` returns `null`. - Fixed references to certain types for stricter rules in Haxe 5. - Fixed `FFECT_AUTOWAH` typo by adding correct `EFFECT_AUTOWAH` value. - Fixed exception in `HTML5HTTPRequest` in some environments when `request.upload` is `null`. - Fixed `EXC_BAD_ACCESS` when decoding PNGs and the bytes are `null` or length is `0`. - Fixed iOS app sometimes running in iPhone simulator when `` is specified. - Fixed iOS app sometimes not starting in simulator by recognizing more valid simulator IDs. - Fixed incorrect request for confirmation when `-alias` or `-cli` flags are specified. - Fixed conversions between key codes and scan codes in both directions. - Fixed memory leak in cURL bindings from header values not getting freed. - Added `CURLOPT_ACCEPT_ENCODING` option for native HTTP requests. - Fixed missing macos define when using cpp target on macOS. - Fixed compatibility with Haxe 3 in `HTML5Thread` and Lime tools. - Fixed failed static build linking on Windows caused by missing _.lib_ file. - Fixed failed static builds caused by conflicts between hxcpp's and Lime's mbedtls versions. - Fixed missing UTF-8 conversion in `hb_buffer_add_utf8`. - Fixed `Font.getGlyphs()` returning an array of zeroes on HashLink. - Fixed `Font.getGlyphs()` getting stuck in an infinite loop on encountering an invalid character. - Fixed `System.getDirectory()` UTF-16 encoding. - Fixed error not getting displayed when NDK 20 or newer is required for Android. - Fixed OpenAL Soft build on Android by adding `-std=c++11` option. - Fixed deprecation warning on Android caused by using deprecated no-arg constructor in `android.os.Handler`. - Fixed unnecessary `untyped __js__` in `ImageCanvasUtil` because externs are now available. - Fixed crashes when SDL functions return `NULL` on some targets. - Fixed `Timer.stop()` performing redundant iterations. - Added `-cli`, `-alias`, and `-noalias` flags to usage instructions. - Added instructions to use `lime config remove HL_PATH` to clear a custom HashLink version. - Changed `non-exempt-encryption` default for iOS from `true` to `false`. - Removed usage of legacy `MAC_USE_CURRENT_SDK` define in Lime tools when targeting macOS. - Updated Cairo submodule to version 1.18.2 from a snapshot release. - Updated HarfBuzz submodule to version 10.2.0. - Updated cURL submodule to version 7.87.0. - Updated zlib submodule to version 1.2.13. - Updated png submodule to version 1.6.46. - Updated efsw submodule to version 1.4.1. - Updated tinyfiledialogs submodule to version 3.19.1 and fix compatibility with zenity. 8.2.2 (12/19/2024) ------------------ - Fixed broken breakpoints in HTML5 debug builds. - Fixed unecessary operations in `Promise` by inlining some getter functions. - Fixed failure to read `gradle-plugin` attribute in `` tag. - Fixed failed installation of app on iOS Simulator by choosing only simulators that are considered available. - Fixed `lime test ios` to install and launch on a device when using Xcode 16 or newer. - Fixed reported version of OpenAL library. - Fixed memory cleanup when encoding PNG and JPEG images. - Fixed error reporting `@rpath/libhl.dylib` not found on macOS when using HashLink nightly build. - Fixed building HashLink on macOS that required cleaning between compiles. - Fixed `embedBytes()` macro incorrectly running when `embedByteArray()` macro was also running. - Fixed `ImageDataUtil.copyPixels()` causing crash on HashLink. - Fixed missing `neko` target flag when cross-compiling to Windows without `-mingw` or `-cpp` flags. - Fixed occasional failure running Lime tools by switching certain paths from relative to absolute. - Fixed missing warning when `lime rebuild` commands fail because C++ source is not available from Haxelib. - Fixed command instructions to specify requirement for absolute paths when setting up a platform. - Added detection of `-cpp` flag when cross-compiling to Windows, which works like `-mingw`. - Updated FreeType submodule to version 2.12.1 again. Resolved issues encountered when using this version in Lime 8.2.0. 8.2.1 (11/01/2024) ------------------ - Fixed `Sys.exit()` causing hang instead of exiting application. - Fixed paths for _.ndll_ files when targeting Raspberry Pi. - Fixed compiling `BackgroundWorker` when targeting HashLink before Haxe 4. - Fixed errors compiling `ThreadPool` for HashLink with Haxe 4.0 and 4.1. - Fixed `Font.renderGlyph` to support 32-bit colors, including alpha. - Fixed OpenFL line height issues by rolling back FreeType submodule to version 2.9.1. 8.2.0 (10/21/2024) ------------------ - Added Apple Silicon (ARM64) support for macOS target. - Added new `hlc` target to support compiling for HashLink/C. Both generates C code and compiles to an executable (requires Haxe 4.3.4 or newer). - Added support for inserting attributes into the `` or `` elements of _AndroidManifest.xml_ - Added `createPerspective()` to `Matrix4`. - Added `removeLibrary()` to `lime.utils.Assets`, which removes a library, but makes unloading optional. - Added `SINGLE_THREADED` mode to `ThreadPool`, which is used by default when threading is not available. - Added `workLoad` property to `ThreadPool` to limit total time spent per frame on green threads. - Added optional `-noalias` flag to `lime setup` to skip creating the **lime** executable alias. - Added optional `-nosign` flag to `lime build ios` to skip code signing when targeting iOS. - Added support for `-64` flag to force compiling for 64-bit Raspberry Pi.without requiring a custom template. - Added option to configure `preserveDrawingBuffer` on HTML5 target. - Added LZMA compression to HTML5 target. - Added automatic deletion of "stale" assets and dependency files. - Added `VIEW` intents on Android target. - Added support for `-mingw` flag when cross-compiling to Windows from another operating system. - Added support for `-cpp` flag when cross-compiling to Linux from another operating system (requires homebrew-macos-cross-toolchains on macOS). - Added support for `tsa` option in `` to pass timestamp URL to Adobe AIR's adt tool. - Fixed `lime display` command incorrectly printing old _.hxml_ content after _project.xml_ file has been modified, skipping requirement to build project or restart editor to get valid code intelligence. - Fixed HashLink _.app_ bundles on macOS to include all Homebrew library dependencies, so that they run on computers without Homebrew. - Fixed `@android:style/Theme.NoTitleBarnull` in generated _AndroidManifest.xml_. - Fixed `Image` in a web worker by storing it as `DATA` type. - Fixed cURL C++ to Haxe callbacks when targeting HashLink. - Fixed icon generation for Android target with `accept-file-intent` config. - Fixed exception in Lime tools when resolving full path of Neko _.n_ file. - Fixed keyboard input incorrectly getting enabled by default when creating a new window, which could show an IME when unexpected. - Fixed `ALC.getContextsDevice()` when targeting HashLink. - Fixed potentially uninitialized values in `Matrix3`. - Fixed wrong type for `Socket.objectEncoding` in Flash/AIR externs. - Fixed `BackgroundWorker` not using threads on HashLink. - Improved support for Raspberry Pi 64-bit builds. - Changed custom `haxe.Timer` to fall back to the original in a macro context. - Changed `Promise` to remove `@:generic` when in a macro context. - Changed `Matrix3` to be an abstract over `Float32Array`, similar to `Matrix4`. - Changed Raspberry Pi keyboard shortcut to exit to Ctrl + Esc. - Changed `-64` and `-32` flags for Intel architectures to `-x86_64` and `-x86_32` to make their purpose more clear (the old flags still work, for now). - Removed Joystick trackball APIs because they is supported only on Linux, with a single piece of hardware, and will be removed from SDL 3. - Removed ARMV5 architecture from Android rebuilds by default because hxcpp doesn't support it with NDK versions >= 20. - Removed 32-bit _liblime.iphonesim.a_ as a default binary because 32-bit iOS is no longer supported by Apple. - Updated Cairo submodule to version 1.17.6 and point to upstream repository instead of fork. - Updated cURL submodule to version 7.83.1 and point to upstream repository instead of fork. - Updated efsw submodule to version 1.2.0 and point to upstream repository instead of fork. - Updated FreeType submodule to version 2.12.1 and point to upstream repository instead of fork. - Updated HarfBuzz submodule to version 6.0.0 and point to upstream repository instead of fork. - Updated libpng submodule to version 1.6.37 and point to upstream repository instead of fork. - Updated libjpg-turbo submodule to version 2.1.3 and point to upstream repository instead of fork. - Updated libvpx submodule to version 1.11.0 and point to upstream repository instead of fork. - Updated libwebm submodule to version 1.0.0.28 and point to upstream repository instead of fork. - Updated Mbed TLS submodule to version 2.28.7 and point to upstream repository instead of fork. - Updated MojoAL submodule to commit e08dbf3 and point to upstream repository instead of fork. - Updated Ogg submodule to version 1.3.5 and point to upstream repository instead of fork. - Updated OpenAL-Soft submodule to version 1.20.1 and point to upstream repository instead of fork. - Updated Pixman submodule to version 0.42.2 and point to upstream repository instead of fork. - Updated SDL submodule to version 2.24.0 and point to upstream repository instead of fork. - Updated Tinyfiledialogs submodule to version 3.8.8 (still uses fork due to SourceForge limitationss). - Updated Vorbis submodule to version 1.3.7 and point to upstream repository instead of fork. - Updated zlib submodule to version 1.2.12 and point to upstream repository instead of fork. 8.1.3 (07/22/2024) ------------------ - Fixed Unicode conversion issues with various APIs, including as clipboard, window text, file dialogs, and fonts. - Fixed Android builds with the `-emulator` flag that broke when using newer Android SDKs. - Fixed "Could not link to neko" error message on macOS when lime.ndll is built with Xcode 15. - Fixed system environment variables with the same name as common targets conflicting with other targets. - Fixed `` and `` output confusing Haxe's completion server. Now skipped when `display` is defined. - Fixed `Clipboard.text` incorrectly getting cleared to null when targeting HTML5. - Fixed integer value parsing in _project.xml_, including immediately reporting errors for invalid values. - Fixed incorrect path discovery for NDLL files that found source directory instead. - Fixed missing error message if HXP project class name does not match file name. - Fixed unspecified behavior from `null` keys in `ObjectPool`. - Fixed some issues when running Haxe built natively for Apple Silicon. - Fixed missing cancellation of vibration on Android when app is paused or destroyed. - Fixed static linking of native curl library on macOS. - Fixed deprecation warnings in Android Gradle builds. 8.1.2 (03/13/2024) ------------------ - Fixed error handling when failing to get joystick information in html5. - Fixed error handling when creating `openfl` alias on Linux. - Fixed error handling when getting information about Haxelibs. - Fixed error when loading fonts in HL. - Fixed error when loading grouped music/sound assets. - Fixed errors when building on Apple Silicon without Rosetta. - Fixed assets not being loaded when using nested asset tags (e.g., ` `). - Fixed VC runtime potentially not being bundled into HL apps built on Windows. - Fixed error in `AssetsMacro` when building with Haxe 4.3.4 or newer. - Fixed crash on iOS during network operations. - Updated howler.js to 2.2.3. - Removed ARMv7 architecture from Android default architectures. - Removed deprecated ARMv7 architecture from iOS default architectures. 8.1.1 (11/08/2023) ------------------ - Fixed subset of characters escaped in file paths to fix Android builds on Windows. - Fixed playback of very long sounds by changing arithmetic to avoid integer overflow. 8.1.0 (10/16/2023) ------------------ - Added `visible` property to `Window` to allow it to be shown and hidden - Added `opacity` property to `Window` - Added `minWidth`, `minHeight`, `maxWidth`, `maxHeight`, `setMinSize()`, and `setMaxSize()` to `Window` - Added new `onShow` and `onHide` events to `Window` - Added support for _include.hxp_ file in libraries, similar to _include.xml_ - Added support for multiple file extension filters on `FileDialog` operations - Added `-eval` option to run Lime tools without Neko - Added `-terser` option to Lime tools for html5 builds to optionally use Terser minifier - Added `-npx` option to Lime tools to run minifiers, or Electron, using `npx` instead of the bundled versions - Updated the bundled version of Node.js to 18 LTS for the html5 target's HTTP server - Exposed more information to _project.xml_, such as `${project.host}` and `${config.android.target-sdk-version}` - Updated the Android Gradle plugin - Disabled pointer tagging on Android - Fixed issues in `emscripten` target and renamed it to `webassembly` - Fixed unpopulated `responseData` on `HTTPRequest` when server returns error status code - Fixed `Clipboard` contents being empty when app starts up on Windows and macOS - Fixed Unicode string conversion for `alert()` method on `Window` on HashLink target - Fixed asset cache clearing when unloading asset library - Fixed incorrect timer pause and resume behavior when window goes into background and back to foreground - Fixed _.app_ file extension for macOS when building Adobe AIR captive runtime bundle - Fixed incorrect "Lime Application" window title for Adobe AIR applications - Fixed null check when opening file with `FileDialog` - Fixed expired Adobe AIR debug certificate - Fixed Haxe 3 compatibility for enum abstracts - Fixed running native apps with current working directory that does not match the program directory - Fixed assets being incorrectly located from `Sys.programPath()` instead of `System.applicationDirectory` - Fixed timing on html5 target by using `performance.now()` so that system clock changes don't cause issues - Fixed parsing of JNI class names - Fixed cleanup when windows are closed and the Lime application exits - Removed the defunct Kha backend 8.0.2 (05/31/2023) ------------------ - Resolve new `@:enum abstract` warnings for Haxe 4.3 by replacing with `enum abstract`, if current Haxe version supports it - Resolve new `@:extern` warnings for Haxe 4.3 by replacing with `extern`, if current Haxe version supports it - Fixed HTTPS requests failing on macOS by updating cURL and mbedtls dependencies - Fixed calling `JNI.callMember()` and `JNI.callStatic()` with more than 7 arguments - Fixed DPI detection on Android by using `getDisplayMetrics()` - Fixed passing `null` or empty string for default library to `Assets.registerLibrary()` to be more consistent with other APIs - Fixed failed Lime tools build with some Haxe versions by removing `-D no-inline` - Fixed Haxe argument type of OpenAL `alFilteri` wrapper that should be `Int` instead of `Dynamic` - Fixed bad UTF string conversion for `FileDialog` that sometimes displayed incorrect characters on some platforms - Fixed HTTP request status 400 being incorrectly treated as successful on html5 target - Fixed failed Adobe AIR for iOS build on Windows by removing check for simulators, which are available on macOS only - Fixed detection of default iPhone simulator to avoid exceptions and support future versions of Xcode - Fixed conflict between `window.Image` and `lime.graphics.Image` when using Genes on html5 target - Fixed exception in Lime tools if assets directory does not exist - Removed legacy `armv7` from default iOS target architectures because it now results in an error (now defaults to `arm64`) - AIR for iOS or Android may specify `listen="port"` in `` element to use USB debugging instead of wifi debugging - Improved fix for text fields updating properly on Android devices with html5 target - Replaced "Could not find Neko API interface" error message with more detailed explanation and instructions 8.0.1 (02/21/2023) ------------------ - Fixed error where low-priority SVG icons (such as the Flixel icon) would override normal- or high-priority PNGs - Fixed `NativeHTTPRequest` buffer management for neko - Fixed text field losing focus after copying in HTML5 - Fixed extra or missing slashes in certain cases when loading assets - Fixed `Assets.isLocal(null)` not checking all asset types - Fixed getting `Clipboard.text` on Linux - Fixed building `-static -debug` Windows apps - Fixed sounds playing twice on iOS - Fixed command line arguments not being passed to HashLink on macOS - Fixed a null pointer exception when setting sound position in HTML5 - Fixed cURL not resending data if there's a redirect - Fixed `FileDialog` behavior when filtering by multiple file extensions, or 0 file extensions - Fixed error when importing `JNI` during a macro while building for Android - Fixed building `-static` Linux apps - Fixed crash when compiling iOS apps with no background color - Fixed `System.openFile()` on Linux - Fixed requiring a keystore to sign AIR apps - Fixed requiring a path to create a keystore - Fixed HTML5 text fields not updating promptly on Android devices 8.0.0 (08/30/2022) ------------------ - Updated HashLink to version 1.12 - Updated Android minimum SDK version to 21 - Updated Electron template to version 18 - Updated HTML5 to high DPI by default - Added `--template` command line option to Lime tools - Added `--appstore` and `--adhoc` command line options for AIR on iOS to Lime tools (to match iOS native) - Added `-air-simulator` command line option for AIR to Lime tools (avoids packaging full AIR app) - Added `` to optionally support custom AIR profiles in simulator - Added `setTextInputRect` to `Window` to specify a rectangle that has focus for text input - Added `JNISafety` to improve JNI communication on Android - Added `manageCookies` to `HTTPRequest` to support cookies on native platforms (only session for now) - Added `pitch` property to `AudioSource` - Added `-Delectron` flag to Electron builds so that it's possible to use `#if electron` - Added icon priorities to allow a library to provide a default icon that the user can override - Improved HashLink _.app_ file generation on macOS - Improved performance of `HTTPRequest` on native platforms with better buffer management - Improved support for Android 12 (SDK 31) and newer - Improved output file size if no assets are defined (sets `disable_preloader_assets` define) - Improved stage sizing on Electron (defaults to `0` for fluid width/height, same as regular browsers) - Fixed garbage collector crash issue on iOS 12 - Fixed iOS build that failed because of missing _Metal.framework_ dependency - Fixed switching between light and dark modes on Android destroying the Lime activity - Fixed `getCurrentTime` on `AudioSource` for streaming sounds on native platforms - Fixed wrong types on `NativeMenuItem` Flash externs - Fixed set clipboard when `null` is passed (now changes to an empty string automatically) - Fixed warnings for deprecated "devicemotion" events on Firefox - Fixed incompatibility with "genes" Haxelib to allow generating JS Modules 7.9.0 (03/10/2021) ------------------ _Notice: We are moving from our custom build server to Github Actions for releases._ _As a result, official releases support only current macOS versions. Earlier macOS_ _releases are still supported when building Lime from the source._ - Updated support for Haxe 4.2 - Updated the default iOS deployment to 9.0 - Updated `ios-deploy` tool to support newer iOS and Xcode versions - Added `failIfMajorPerformanceCaveat` setting for window (default false) - Added bindings for OGG Vorbis on the HashLink target - Improved iOS target to exclude Core Bluetooth framework - Improved the performance for AIR application boot times - Improved error message when attempting to use HashLink target on Haxe 3 - Fixed support for Android screen orientation - Fixed touch support on Android hardware that return unusual touch IDs - Fixed an issue with excess bytes saved from `FileDialog` on HTML5 - Fixed null-termination issues on strings returned from `lime.system.System` - Fixed support for IEM input text on HTML5 - Fixed audio stutter on HTML5 when `force-html-audio` is defined 7.8.0 (06/24/2020) ------------------ - Updated to SDL 2.0.12 - Updated Google Closure to v20200315 - Added support for *.xcframework dependencies on iOS - Added support for merging "-Info.plist" files from native extensions on iOS - Fixed warnings when compiling on HTML5 using Haxe 4.1 - Fixed HTML5 focus to return to previous element after using `lime.app.Clipboard` - Fixed an unnecessary `setTextInputEnabled` workaround on Android - Fixed return type for `gl.getParameter(GL.RENDERBUFFER_BINDING)` - Fixed old default iOS simulator version - Fixed the search string for HaxeObject/JNI to be more precise - Fixed support for building using `-Djs-es=6` 7.7.0 (01/27/2020) ------------------ - Updated SDL with a patch for high DPI resolution on macOS - Updated tinyfiledialogs with a Unicode patch on Windows - Updated macOS to use OpenAL-Soft (rather than deprecated Apple OpenAL library) - Added missing properties/methods to `lime.utils.ArrayBuffer` - Added support for NVX_gpu_memory_info OpenGL extension - Added support for using launch storyboards instead of launch images on iOS - Updated Android template to use Gradle 5.6.3 and Android Gradle Plugin 3.5.1 - Improved `Assets.unloadLibrary` to allow unloading the default asset library - Improved HTML5 WebGL to fallback to canvas if "major performance caveat" - Improved the Electron output template to work without `-lib hxelectron` - Improved support for x86-64 on Android target - Improved handling of asset library root paths - Improved garbage collection performance on `GLRenderbuffer` - Fixed "auto" window orientation in the AIR template - Fixed launch of iOS simulator on some systems - Fixed support for `Clipboard` on HTML5 - Fixed minimize/maximize on some desktop windows that are not resizable - Fixed `Image.fromBitmapData` to set `buffer.transparent` - Fixed some issues when toggling fullscreen on Android - Fixed a potential crash when getting the system locale on iOS or macOS - Fixed cleanup of Howler.js sounds after they are stopped - Fixed `FileDialog` to not return as completed if the path is an empty string - Fixed the default launch screen sizes on the iOS target - Fixed Gradle paths to jcenter/Google for HTTPS support 7.6.3 (09/11/2019) ------------------ - Fixed copying of 64-bit binaries when using Neko on Windows with Haxe 4 - Fixed support for both 32- and 64-bit Neko on Windows (for Haxe 3 and 4) - Fixed support for loading `HTTPRequest` data using the HL target 7.6.2 (09/05/2019) ------------------ - Fixed support for 64-bit Neko on Windows (included in Haxe 4 RC 4) 7.6.1 (09/04/2019) ------------------ - Fixed support for array-based form parameters when making HTTP requests - Fixed incorrect default root path for asset manifests on some platforms - Fixed a crash on the HL target when pasting non-text data 7.6.0 (08/20/2019) ------------------ - Updated support for Haxe 4 dev versions - Updated SDL to 2.10 - Updated the default Android target API to 28 (per Google guidelines) - Updated HashLink support to 1.10 (requires Haxe 4 RC3 or greater) - Added official support for Android ARM64 architecture - Added ARM64 as a default architecture in Android builds - Added `lime.utils.AssetBundle` for standard compressed libraries - Added support for pure JSON-based asset manifest data - Added AMD support to generated JavaScript output - Added `remove` to `lime.utils.ObjectPool` - Added initial support for `window.onMove` on the AIR target - Improved the performance of `Image.loadFromBytes` on HTML5 - Improved `DataPointer` to be a more reliable implementation in JavaScript - Improved support for pre-generated asset libraries - Improved the same origin check for `HTTPRequest` data-based URIs - Improved the native main loop behavior on the Android target - Fixed a compile error when using `flash.system.SystemIdleMode` - Fixed issues with WebGL on the HTML5 target caused by `DataPointer` - Fixed an issue where antialiasing was always enabled on HTML5 - Fixed the behavior of `image.copyPixels` in a few cases - Fixed minor issues when using the `-npm` HTML5 template 7.5.0 (05/14/2019) ------------------ - Update version 7.4.0 (05/14/2019) ------------------ - Renamed the "ndll" folder to "lib" - Updated SDL to latest development version - Updated the minimum target Android API from 14 to 16 - Added support for CMYK JPEG decoding on native platforms - Added an `-npm` option for HTML5 to use Webpack - Added "hashlink" as an alias for the HL target - Improved the Zlib default compression level - Improved support for WinRT applications - Improved the internal blur implementation - Improved support for native joystick connection/disconnection - Improved the output HTML5 script wrapper with better Haxe 3.2 support - Fixed the values in `lime.ui.MouseButton` to match Lime's historic values (zero based) - Fixed issues effecting proper `Image` pixel-level APIs when targeting HL - Fixed a missing button value when dispatching HL mouse events 7.3.0 (04/01/2019) ------------------ - Updated support for Haxe 4 dev versions - Updated SDL to 2.0.9 - Updated howler.js to 2.1.1 - Added initial display options to improve debugging with VS Code - Added initial HashLink 1.9 support (requires Haxe 4 dev) - Added initial support for embedding HTML5 projects in unique isolated JS closures - Added support for appending dependency JS scripts to the application file - Added initial support for haptic feedback on HTML5 - Improved `lime display` when `lime build` has not been called - Improved support for WinRT native builds - Improved the behavior of `URLRequest` to re-use `Bytes` when writing - Improved the performance of `URLRequest` on native platforms - Improved `window.onDropFile` with an initial workaround for HTML5 support - Moved internal code style to use the Haxe "formatter" library for consistency - Fixed possible incorrect names in generated package.json for Electron output - Fixed support for building for Android using ARMv5 or ARMv6 only - Fixed the event types in `lime.system.ThreadPool` - Fixed a possible rounding error when calculating application update times - Fixed cases where HTML5 canvas was not properly enabling image smoothing - Fixed the behavior of `threadPool.minThreads` to keep threads active - Fixed incorrect extern in "lime/graphics/opengl/ext" classes on HTML5 - Fixed incorrect `imageBuffer.bitsPerPixel` handling in `Font.renderGlyph` - Fixed incorrect offset when using `image.copyPixels` with an alpha image - Fixed Java `HaxeObject.create` to return `null` if handle is `null` - Fixed exposure of generated `__ASSET__` classes to display completion 7.2.1 (01/07/2019) ------------------ - Updated howler.js to 2.1.0 - Improved the internal HTTP request limit for better transfer speed on HTML5 - Improved the performance for native HTTP requests - Improved the quality of embedded font meta-data on the HTML5 target - Improved `lime.utils.Assets` to allow disabling or setting the cache break number - Fixed `Window` to not dispatch `onClose` on HTML5 (due to some mobile browsers) - Fixed ability to cancel context menus on HTML5 when they occur on mouse down - Fixed font support for some video game console targets 7.2.0 (12/04/2018) ------------------ - Improved support for Haxe 4 preview 5 - Improved detection of HTML5 browser key codes to convert to Lime key values - Improved support for Turkish lowercase values in `lime.text.UTF8String` - Improved `HTTPRequest` with `-Dallow-status-0` to allow code 0 as success - Improved project XML to allow `` or `"transparent"` - Improved `fileDialog.save` support optional MIME types on HTML5 - Improved munit support by enabling headless testing on the AIR target - Improved the Electron target template with minor updates - Improved the standard index.html template for cases when the window is transparent - Improved performance when converting `lime.utils.DataPointer` on the C++ target - Improved support for native `Clipboard` events - Improved use of the `-rebuild` flag when targeting Neko on Windows - Fixed a memory leak when certain kinds of bytes were loaded from disk - Fixed a possible multi-thread crash in Lime native Bytes - Fixed the failure case when loading corrupted PNG images - Fixed an issue where `window.cursor = null` did not hide the cursor on HTML5 - Fixed cases where the HTML5 backend attempted to cancel non-cancelable events - Fixed support for `Font.renderGlyph` and `Font.renderGlyphs` - Fixed an error in `haxe.Timer` if `System.getTimer` returned 0 - Fixed native libraries to build with SSE3 support for better performance - Fixed use of the `-Ddom` define to force HTML5 DOM render mode 7.1.1 (10/02/2018) ------------------ - Improved the timing on native `HTTPRequest` to process more quickly - Improved handling of `haxe.Timer` to pause and resume when the application suspends - Fixed `lime rebuild mac` using Xcode 10 (disabled 32-bit rebuilds by default) - Fixed an issue in the newer howler.js library regarding IE support - Fixed a regression in older desktop CPU support - Fixed an issue when using larger than 64-bit background color values on Flash - Fixed `context.antialiasing` setting on HTML5 `Window` 7.1.0 (09/26/2018) ------------------ - Updated Harfbuzz to 1.8.8 - Updated OpenAL to 1.19.0 - Updated howler.js to 2.0.15 - Updated build configuration of pixman to better support each platform - Added `application.meta.version` to the default application template - Added support for `` for undefining values - Added support for `` in project.xml - Renamed `cairo.operator` to `cairo.setOperator`/`getOperator` on Haxe 4 builds - Updated `lime.text.Font` to allow for changes to the font metric meta values - Removed `-Ddisplay` on `lime display` output for better cached compilation - Removed prefixes on `imageSmoothingEnabled` internally to remove HTML5 warnings - Improved use of howler.js to enable sound position - Improved HTML5 support for certain MP3 audio files - Improved `Image.loadFromBase64`/`Image.fromBase64` to work on non-HTML5 platforms - Fixed a possible error when processing directories ending in ".bundle" - Fixed an issue where multiple `HTTPRequest` instances on native could hang - Fixed support for `` as an alias for type "deflate" - Fixed minor issues in `TextField` when working with non-UTF8 `String` values - Fixed use of specific iOS target devices in the AIR project template - Fixed an exception caused in garbage collection for cURL requests - Fixed an issue when using `window.readPixels` on HTML5 - Fixed possible exceptions when working with Harfbuzz languages - Fixed a minor encoding issue in `image.encode (BMP)` - Fixed setting of `window.parameters` using `WindowAttributes` on creation - Fixed default use of Visual Studio Community when older versions are installed - Fixed an exception when checking locale on certain iOS devices - Fixed compiler errors when using `webgl2.texImage2D` with certain parameters - Fixed use of WebGL 2, when available, as the default context on HTML5 - Fixed support for `-static` native builds for Windows - Fixed an issue where `Assets` cache breaking was not working properly - Fixed compilation issues in Haxe 4 development builds 7.0.0 (08/09/2018) ------------------ - Major API re-design to improve workflow outside of command-line tools - Migrated the core of the command-line tools into a new project called HXP - Updated Freetype to 2.9.1 - Updated Android minimum SDK to API 14 and the default target SDK to API 26 - Updated window defaults to always enable depth and stencil buffers - Updated window defaults to use a 32-bit (instead of 16-bit) backbuffer - Removed `lime.graphics.Renderer`, functionality moved to `Window` - Removed `lime.app.Config`, moved `app.frameRate` to `Window` - Removed `lime.graphics.format.*`, functionality moved to `image.encode` - Removed `lime.utils.compress.*`, functionality moved to `lime.utils.Bytes` - Removed `lime.ui.Mouse`, functionality moved to `Window` - Renamed `lime.app.Preloader` to `lime.utils.Preloader` - Removed `lime.text.TextLayout`, replaced with native Harfbuzz bindings - Moved `lime.project` types into `lime.tools` - Moved `lime.utils.GLUtils` functionality to `GLProgram` and `GLShader` - Added new `lime.graphics.RenderContext` with more lightweight API bindings - Divided OpenGL support into separate `OPENGL`, `OPENGLES` and `WEBGL` types - Compatibility APIs are provided in one direction (GL -> GLES -> WebGL) - Added `lime.ui.WindowAttributes` with broader context creation control - Sub-classing `Application` now requires no `window` argument for most methods - Multi-window applications should listen to `app.onWindowCreate` instead - Added support for Haxe Eval target, and beta support for HashLink (on dev) - Added Windows 64-bit support, Android ARM64 support, progress on WinRT support - Added bindings for the Harfbuzz native text layout library - Added `lime.ui.MouseButton` and `lime.ui.MouseWheelMode` - Added MojoAL support (as an alternative to OpenAL-Soft) in dev builds - Added cURL Multi support - Added support for `` - Exposed `window.stage` and `window.element` on Flash/HTML5 targets - Improved native build times by not relying on macros for CFFI - Improved mouse event bindings, improved consistency of mouse wheel behavior - Improved HTML5 fullscreen exit to dispatch a restore, not a resize event - Improved `lime.math.*` classes to allow for less GC activity - Improved support for Electron on Linux to allow for WebGL on more drivers - Improved quality for HTML5 frame rate when set to lower than VSync - Improved `HTTPRequest` to dispatch a progress event when loading locally - Fixed some cases where allocation could occur during native GC - Fixed use of future.then when the result is an error condition - Fixed issues with some of the equations in `lime.math.*` - Fixed warning in Chrome caused by default HTML5 template - Fixed unnecessary AL cleanup message on exit - Fixed replay of existing native AudioSource sounds - Fixed Unicode paths on Windows when returning paths from the system - Fixed pasting Clipboard data when application first launches - Fixed webfont loading on mobile Safari - Fixed issue with AL.source3i types - Fixed support for iOS entitlements paths that include spaces 6.4.0 (06/01/2018) ------------------ - Updated NPM dependency to `file-saver` from `file-saverjs` - Updated Android ARMv7 builds to use `armeabi-v7a` instead of `armeabi-v7` - Added (Beta) support for `electron` (`html5 -electron`) target - Added `window.onExpose` event (useful when not rendering every frame) - Added `raspberrypi` or `rpi` as a target alias - Improved `Locale` to better handle `en_US-en` style strings - Improved handling of iOS locale values - Improved support for current Xcode versions by using an `.entitlements` file - Improved support for mouse "release outside" behavior on HTML5 - Improved support for current Raspberry Pi OpenGL/EGL libraries - Improved Android Gradle template to include Maven for native extensions - Improved error handling when a library handler does not execute properly - Fixed crash in `ObjectPool` when setting initial size - Fixed setting `powerOfTwo = true` for an `ImageBuffer` with a canvas source - Fixed SWF font generation to limit kerning values to the SWF spec maximum - Fixed some cases where `HOME` environment variable might return `null` 6.3.1 (05/11/2018) ------------------ - Improved support for \*.bundle libraries within an asset folder - Improved the output of `lime help` - Fixed the behavior of `` to behave like `` + `` 6.3.0 (05/04/2018) ------------------ - Updated SDL to 2.0.8 - Updated howler.js to 2.0.9 - Updated Android NDK platform to a minimum of API 14 - Updated macOS minimum support version to 10.9 - Added support for `-D foo` in addition to `-Dfoo` - Added support for `--` in addition to `-args` for runtime arguments - Added catching of key/value runtime arguments as `window.config.parameters` - Added support for `--window-` flags at runtime on Lime applications - Added a workaround to fix memory leaks in Apple's OpenAL implementation - Added initial HTML5 accelerometer sensor support - Added support for exporting multiple iOS IPA types when using `lime deploy` - Added `ENHANCED` profile to AIR extern types - Improved the behavior of `lime setup` - Improved the output of `lime help` - Improved failed sound loading on HTML5 to print a runtime warning - Improved support for multiple threads in OpenAL, Cairo and cURL GC - Improved the generation of webfonts to ignore non-essential formats - Improved behavior when calling closure compiler to minify JS - Improved `openfl.Vector` to typed array conversion to support OpenFL 8 - Improved `Assets.getPath` to return the first path if using a path group - Improved support for `KHR_debug` in OpenGL - Improved handling of errors within OpenAL generation of sources and buffers - Improved window focus mouse clicks to still fire an event - Improvde handling of disposed native `AudioSource` objects - Improved support for opening files with spaces in the path - Improved the Gradle template to use jcenter instead of maven for dependencies - Fixed detection of font family names on some Android 4.x devices - Fixed support for `-dce full` with `embed=true` assets on native - Fixed a small memory leak in Zlib compress - Fixed a small memory leak when using cURL request headers - Fixed a small memory leak in `gamepad.guid` - Fixed support for a software fallback when GL support is too old - Fixed a regression in support for static desktop builds - Fixed a possible garbage collection issue in cURL support - Fixed calling `UTF8String.substr()` internally without a length field - Fixed request of keyboard input on WebKit when in fullscreen - Fixed a possible issue when building on macOS with spaces in the Lime directory - Fixed the behavior of `embed="false"` assets on HTML5 - Fixed a possible race condition in `-Dsimulate-preloader` on Flash target - Fixed support for additional iOS icon sizes - Fixed fullscreen text input on WebKit browsers - Fixed an issue using `Image.fromBase64` in ES6/NPM-based builds - Fixed disabling of vsync on native targets when not desired 6.2.0 (02/16/2018) ------------------ - Added new implementation of `Font.renderGlyphs` for native platforms - Added generation of font metrics for embedded HTML5 fonts - Improved support for ANGLE builds on Windows - Improved accuracy of file seeking in streaming OGG Vorbis sounds on native - Fixed regression in `renderer.readPixels` when using an OpenGL renderer - Fixed addition of an empty character when using arrow keys on HTML5 text input - Fixed fallback for OpenGL ES 2.0 on older iOS devices when 3.0 is not available - Fixed using environment variables to define the path to the Emscripten SDK - Fixed letting the user focus outside a Lime embed when text input is enabled - Fixed `FileDialog.save` to require FileSaver.js when using CommonJS 6.1.0 (02/07/2018) ------------------ - Added OpenGL ES 3.0 support on iOS - Added `System.deviceVendor` and `System.deviceModel` - Added `System.platformLabel`, `.platformName` and `.platformVersion` - Added support for `` - Added support for `` - Improved garbage collection behavior in `lime.net.curl.CURL` - Improved performance when requesting static `System` values repeatedly - Improved Xcode template for iPhone X and Xcode 9.2 - Renamed `-Dmodular` to `-Dlime-modular` (to allow for using lib modular) - Fixed a possible crash in `ImageDataUtil.gaussianBlur` - Fixed an iOS template path for "haxe/Build.hxml" - Fixed an issue when setting volume in HTML5 before playback starts - Fixed default framebuffer binding when using iOS simulator - Fixed support for properly detecting MP3 format in some files - Fixed support for builds on macOS/Linux when `$HOME` variable is not present - Fixed crash in continuous-testing when no window can be initialized 6.0.1 (01/16/2018) ------------------ - Minor fix for `haxelib run openfl setup` command-line alias installation 6.0.0 (01/15/2018) ------------------ - Added `-watch` for simple \*.hx file watching support on commands - Added support for OpenAL effects extension where available - Added support for forcing a WebGL 1 context at runtime - Added support for defining an HTML5 DOM renderer at runtime - Added support for automatic iOS device provisioning and registration - Added improved support for CommonJS output - Improved support for the `haxe-modular` library - Improved support for haxelibs that define `classPath` in haxelib.json - Improved performance of `image.copyPixels` on HTML5 when image is not a canvas - Improved use of external libraries when using CommonJS - Improved the quality of locale values returned on Windows - Improved handling of null responses in `HTTPRequest` - Improved `ObjectPool` to not use generics on HTML5 for better file size - Fixed issues preventing compilation of tools for Node.js - Fixed use of `rootPath` when loading packed asset libraries - Fixed launch image sizes for iPhone X - Fixed support for `-Dnocffi` when compiling CLI tools - Fixed a possible range error in `DataPointer` - Fixed a minor debug message when HXCPP "std" is statically linked 5.9.1 (11/30/2017) ------------------ - Updated howler.js with minor fixes for IE11 and Firefox browsers 5.9.0 (11/29/2017) ------------------ - Added support for {{variable}} substitution in template file/folder names - Added support for packed asset libraries, with optional compression - Added initial support for Adobe native extensions (ANE) for AIR - Added `-Dlime-default-timeout` to override the default HTTPRequest timeout - Added a prompt for keystore password on Android if no password is provided - Added a hint to request a discrete GPU on dual-GPU Windows systems - Added a general "ios/template" template path for copying additional files - Added ability to export iOS `-archive` on build - Added ability to `lime deploy ios` and output IPA for store or ad-hoc - Improved `-verbose` to be ignored by default on `lime display` for IDEs - Improved iOS launch image list to support iPhone X fullscreen resolution - Improved CSS font generation to skip formats that are not able to convert - Improved the behavior of `` on HTML5 - Fixed handling of HTTP status 0 as an error when not running on Tizen HTML5 - Fixed an issue with `ContextMenuItem`/`NativeContextMenuItem` for Flash/AIR - Fixed the AIR target install folder if `` is empty - Fixed reference to the `EMSCRIPTEN_SDK` when targeting Emscripten/WebAssembly - Fixed an issue with double playing of sound on Firefox using howler.js - Fixed a possible error in some web browsers when reloading the current page - Fixed handling of the newer iOS simulator and file extensions for AIR builds - Fixed return to Android fullscreen when dismissing an on-screen keyboard - Fixed a minor naming issue when using newer HXCPP and MSVC for static builds - Fixed setting of "ios" and "android" project values when using AIR iOS/Android - Fixed handling of Haxe version output with newer Haxe development build 5.8.2 (11/10/2017) ------------------ - Updated cURL to 7.56.1 and changed SSL library from axTLS to mbedTLS - Updated howler.js to 2.0.5, FileSaver.js to 1.3.3 - Added `-Dcurl-verbose` for additional cURL debug info in native `HTTPRequest` - Improved support for `` on HTML5 target - Improved `renderer.readPixels` on native platforms to allow transparency - Fixed the behavior of `` 5.8.1 (11/06/2017) ------------------ - Added support for `AudioBuffer.fromBytes` on HTML5 - Added initial support for `fileDialog.save` on HTML5 (using FileSaver.js) - Added initial support for native extensions on the Adobe AIR target - Improved the behavior of missing webfonts to no longer crash a web application - Improved `window.onClose` to be cancelable on HTML5 - Improved tools to print warning for unrecognized `` values - Fixed support for Adobe AIR where `nativeWindow` is `null` 5.8.0 (10/24/2017) ------------------ - Added `httpRequest.withCredentials` for sending cookies with web requests - Added initial support for `Touch.onCancel` events - Restored `false` as the default `httpRequest.enableResponseHeaders` value - Improved image loading to better support progress events on some browsers - Improved support for `HTTPRequest` headers on native platforms - Improved the handling of `lime.utils.Log` output on web browsers - Improved `lime.utils.ObjectPool` to allow abstract types - Improved AIR builds to support the `` tag for signing - Improved the default window size for AIR output for mobile platforms - Improved AIR template to respect `` for iOS - Improved AIR template to support additional icon sizes for mobile - Fixed the behavior of tailing the `trace` log on Windows/Flash target - Fixed HTML5 "same origin" calculation for CORS requests - Fixed return to Android fullscreen after losing window focus - Fixed support for `ANDROID_GRADLE_TASK` with command-line arguments - Fixed support for relative provisioning profile paths for AIR target 5.7.1 (10/12/2017) ------------------ - Updated default `MACOSX_DEPLOYMENT_TARGET` on macOS to 10.7 - Improved native `HTTPRequest` to complete as error if response status is error - Fixed `HTTPRequest` to treat HTTP status code 400 as an error 5.7.0 (10/10/2017) ------------------ - Updated Freetype to 2.7.1, compiled with Harfbuzz/PNG support enabled - Added initial Adobe AIR backend support for multiple windows, alerts, etc - Added `threadPool.onRun` to be notified when work is about to be run - Added `ModuleHelper.addModuleSource` to improve JS modules from HXP projects - Added initial Dockerfile script - Added a polyfill for `performance.now()` to restore iPhone 4 HTML5 support - Improved Raspberry Pi support by adding "Escape" as a default key to exit - Improved support for non-premultiplied alpha in `imageDataUtil.gaussianBlur` - Improved native `HTTPRequest` to size bytes initially based on Content-Length - Improved support for Xcode 9.1 - Improved support for combined characters in `TextLayout` - Fixed setting of `MACOSX_DEPLOYMENT_TARGET` on macOS - Fixed support for resolving iOS provisioning profiles for AIR/iOS on Windows - Fixed the addition of the HTML5 default cache break string for assets - Fixed default asset type assignment for files with upper-case file extensions - Fixed support for Raspberry Pi - Fixed `threadPool.onProgress` to dispatch in the proper foreground thread - Fixed native `HTTPRequest` to calculate timeout from when requests run 5.6.0 (09/26/2017) ------------------ - Added `lime.system.FileWatcher` for notifications of file events - Added support for color output on the Windows 10 standard command prompt - Added support for `lime config NAME VALUE` to add/set config values - Added initial template support for `lime test winjs` for HTML5/UWP support - Updated haxe.io.Bytes to match current official version - Improved key events to always set the key modifier on alt/ctrl/shift key press - Improved support for Adobe AIR iOS and Android builds - Improved Android builds to minimize to background on back button and not exit - Improved Linux target to build without HXCPP liblinuxcompat.a - Improved support for setting `-dce` on the command-line - Fixed support for setting `--window-minimized`, maximized and hidden using CLI - Fixed escaping of spaces in Windows paths - Fixed the behavior of `image.copyPixels` using an alpha image - Fixed the class path order when embedding Flash assets in certain conditions - Fixed support for Tizen HTML5 applications - Fixed progress event update on HTML5 HTTPRequest uploads - Fixed `ImageHelper.resizeImage` to properly handle null parameters 5.5.0 (09/12/2017) ------------------ - Added an instance-based API for cURL (such as `new CURL ()`) - Added `` setting value - Added generation of source map when minifying HTML5 on debug - Deprecated `lime.net.curl.CURLEasy` in favor of `CURL` - Updated tinyfiledialogs to 2.9.3 - Updated bundled Google Closure Compiler to v20170806 - Improved the functionality of `System.endianness` - Improved Adobe AIR `deploy` command to generate a \*.bundle file - Improved the behavior of native HTTPRequest for better memory management - Fixed endianness issues in `image.setPixels` - Fixed support for `image.copyPixels` using alpha image and offset point - Fixed support for newer HXCPP, including dynamic libs only on Haxe 3.2.1 - Fixed ability to exclude default architectures on builds - Fixed support for `` on Android - Fixed minor issues caused by detecting some AWD files as text 5.4.0 (08/25/2017) ------------------ - Added tooling for Adobe AIR (`lime test air`, `lime test windows -air`, etc) - Added externs for Adobe AIR classes and types - Added `` for choosing a custom haxelib repository path - Added OpenGL ES 3 API support (currently enabled on Linux and Emscripten) - Added support for setting `HAXELIB_PATH` environment variable in projects - Changed the output directory to not include the build type by default - Improved HTML5 to default images to canvas, not a typed array - Improved HXP to handle `-nocolor`, `-verbose` and other compile flags - Improved HXP to be able to update environment variables for build process - Fixed tvOS target to use `` - Fixed Android builds when using an Android SDK older than API 23 - Fixed an issue when running command-line tools from a root directory - Fixed UTF-8 `charCodeAt` when index is out of range - Fixed the `strength` property of `ImageDataUtils.gaussianBlur` 5.3.0 (07/31/2017) ------------------ - Added support for WebAssembly (`emscripten -webassembly` or `-wasm`) - Added `lime -version` for simpler Lime version output - Added `@:compiler` to add extra compiler arguments to HXP projects - Updated howler.js to 2.0.4, plus an additional Firefox WebAudio patch - Improved support for using Lime in local .haxelib directories - Improved detection of default asset type in command-line tools - Improved support for HTML5 -Dmodular builds - Improved handling of error messages from howler.js - Fixed support for asset libraries in Emscripten/WebAssembly target - Fixed `lime create extension` to preserve `ANDROID_GRADLE_PLUGIN` variable - Fixed support for preloading fonts on Safari 5.2.1 (06/21/2017) ------------------ - Improved HTTPRequest with default "Content-Type" headers when sending data - Fixed case where HTML5 could preload sounds twice, unintentionally - Fixed support for compiling HTML5 -Dmodular builds 5.2.0 (06/20/2017) ------------------ - Added ability to override the target output directory - Added `Assets.hasLibrary` to check if a given library is registered - Improved webfonts to cache upon generation and not save in asset directory - Updated JavaScript timers to use `performance.now()` instead of `new Date()` - Fixed support for *.bundle directories which include "include.xml" - Fixed `AssetLibrary` to preload non-embedded assets if set to preload - Fixed an issue when converting non-String values to `UTF8String` - Fixed an issue with Node http-server resolving properly to localhost - Fixed support for `lime test linux -32` on 64-bit systems 5.1.0 (06/07/2017) ------------------ - Added `lime.text.UTF8String` with unifill for handling UTF-8 text - Added support for `Clipboard.onUpdate` on native and HTML5 - Added initial support for HTML5 fullscreen - Added initial support for `window.setIcon` and `window.title` on HTML5 - Added support for 32-bit GL color depth on native platforms - Added support for making 64-bit Windows builds - Added support for automatically detecting latest Android build tools - Added support for setting `` - Added support for `` - Added support for `` - Updated Node http-server to version 0.10.0 - Improved handling of crossOrigin requests on HTML5 for same-origin - Improved the accuracy of `image.copyPixels` when using alpha image - Improved performance of ObjectPool when constantly recycling objects - Improved `image.setPixels` to accept bytes and offset - Improved performance of creating a new Image with no fill color - Fixed issue with OpenAL GC - Fixed loading of some WAV files - Fixed minor issues in using output of `lime display` for code completion - Fixed semi-transparent fillRect on canvas-based Image - Fixed minor issues with cURL 5.0.3 (05/24/2017) ------------------ - Reverted inclusion of custom haxelib build in Lime tools - Support for wildcard versioning requires a compatible install of haxelib - Added support for optional runtime overriding of haxelib script - Improved handling of haxelib errors during HXML generation - Fixed support for uploading larger byte objects using HTTPRequest - Fixed support for config.rootPath 5.0.2 (05/22/2017) ------------------ - Improved support for finding versioned haxelib path when using haxelib git 5.0.1 (05/22/2017) ------------------ - Fixed an issue with PathHelper.getHaxelib outside of Lime tools - Fixed regressions in haxelib path resolution 5.0.0 (05/19/2017) ------------------ - Updated the OpenGL bindings for better performance on HTML5 - WebGL-specific signatures are now available using "WEBGL" suffix - Added support for wildcard haxelib versions (such as "1.0.\*") - Added a new joystick.onTrackballMove with both x and y values - Added support for ThreadPool when there is no Application instance - Added haxelib to Lime tools to support path resolution fixes - Added ProjectXMLParser.fromFile for consistency - Updated default SWF version to 17 to prevent common compile issues - Removed deprecated config.assetsPrefix (use config.rootPath) - Improved support for HXP projects on Windows - Improved performance of image.copyPixels - Improved the `lime create extension ` template - Improved the behavior of Flash Player logging on Linux - Improved memory use in Matrix4 and TextLayout - Improved render event to allow canceling (avoids a screen flip) - Improved `lime setup` to quiet the "no setup required" message - Fixed dead-code-elimination with OpenGL extension classes - Fixed support for >, <, >=, <= and == in XML "unless" attribute - Fixed complete exit on Android when using the back button 4.1.0 (05/04/2017) ------------------ - Updated SDL to latest development version - Updated Freetype to 2.7.1 - Updated Harfbuzz to 1.4.6 - Updated Howler.js to 2.0.3 - Added window.alwaysOnTop, with initial support on Windows and Linux - Added WebP compatibility on HTML5, improved file format detection - Added EXT_texture_compression_s3tc to GL extensions - Added ability to specify architecture when performing iOS simulator builds - Removed deprecated HTML meta for Google Chrome Frame - Improved macro compile performance - Improved asset manifests to embed when all of their assets are embedded - Improved the web template for Flash for better relative URL resolution - Improved support for OpenGL extensions when dead-code-elimination is enabled - Improved the suspend/resume behavior on Android - Improved System.endianness to return BIG_ENDIAN on Flash Player - Improved file copying in tools to not copy templates that have not changed - Improved Cairo bindings to return the same object reference when possible - Improved OpenAL bindings to return the same object reference when possible - Fixed an issue with exiting fullscreen on HTML5 - Fixed an issue with escaped paths when generating Neko executables - Fixed possible cases where paths could have been escaped twice in Haxe 3.3 - Fixed support for GL.compressedTexImage on HTML5 - Fixed CORS exception on HTML5 if there is no content-type header - Fixed static initialization order of core lime.system.CFFI methods - Fixed a dead-code-elimination issue in NativeHTTPRequest - Fixed the Android Gradle Plugin setting in the Lime extension template 4.0.3 (03/28/2017) ------------------ - Added support for GL EXT_packed_depth_stencil - Improved safety around DataPointer when performing arithmetic - Improved Image.loadFromBytes when bytes are not a known image type - Improved the performance of Image.fillRect in some cases 4.0.2 (03/21/2017) ------------------ - Added an internal transfer queue for limiting simultaneous HTML5 requests - Added an internal thread pool for limiting simultaneous native HTTPRequests - Fixed compilation support with newer Haxe releases on Raspberry Pi - Fixed the default "end" argument value of ArrayBufferView subarray - Fixed a performance regression in WebGL support - Fixed native HTTPRequest so that it always returns on the correct thread - Fixed path resolution to APK-based assets using HTTPRequest on Android - Fixed "unused pattern" warning caused by duplicate constant in GL bindings - Fixed a mismatch between intptr_t and uintptr_t (affecting Android) - Fixed several Window properties when creating a new window without a config 4.0.1 (03/17/2017) ------------------ - Improved error message when an asset library is not found - Improved generated code performance when using ArrayBufferView - Fixed some issues with incorrect OpenGL garbage collection - Fixed AssetLibrary loadText to use text (not binary) loading on HTML5 - Fixed support `` tag without using a "path" attribute - Fixed premature loading of `embed="false"` assets on HTML5 - Fixed missing bufferData API in WebGLContext - Fixed OpenGL bindings to return null OpenGL objects if an ID is zero 4.0.0 (03/15/2017) ------------------ - Added support for WebGL 2 APIs on HTML5 - Recreated GL bindings in preparation for GLES3 support - Added support for running different Lime tools to match project version - Added WebGL, WebGL 2, GLES 2 and GLES 3 abstracts - Added initial support for WebGL/GLES2 extension constants - Added GL context, type and version properties - Added window.displayMode for full-screen display mode switching - Added lime.utils.DataPointer for managing native pointers - Added lime.utils.BytePointer for Bytes + offset without a new typed array - Added lime.utils.ObjectPool as a convenience API for object pooling - Added support for `` for library packing - Added support for loading \*.bundle directories as asset libraries - Added support for `${meta.title}` and other project data in project.xml - Added support for Cairo textPath - Added support for multiple Lime embeds, rewrote HTML5 embed code - Added asset type to verbose Preloader messages - Added `-Dwebgl1` to use a WebGL 1 context instead of WebGL 2 on HTML5 - Removed deprecated behaviors from Lime 3 - Updated Gamepad mappings to support additional models - Updated HTML5 window to dispatch resize event if parent element is resized - Improved support for deferred loading of asset libraries - Improved Asset error events, updated to throw errors when assets not found - Improved handling of GL context loss on WebGL - Improved behavior of asset manifests included as assets of another library - Improved behavior of path groups for audioBuffer assets - Improved error message if ANDROID_SDK or ANDROID_NDK_ROOT is not defined - Fixed caching for HTML5 cache groups - Fixed native HTTPRequest if file is not found or uses ~/ for home directory - Fixed copying of files when a directory exists of the same name - Fixed dispatch of Renderer.onRender when there is no context - Fixed dispatch of Renderer.onContextLost on native platforms - Fixed use of image.threshold when source is canvas or HTML5 image - Fixed missing warning if `` is null - Fixed `` to be relative to include.xml path - Fixed `` to be relative to include.xml path - Fixed case where assets could be processed as templates - Fixed support for ATF textures on Flash target - Fixed ID value for Joystick/Gamepad guid property - Fixed double dispatch of preloader complete verbose message - Fixed path of `-options` parameter when calling HXCPP 3.7.4 (02/15/2017) ------------------ - Improved AudioBuffer/Font/Image/Sound.loadFromFile to support URLs - Deprecated AudioBuffer.fromURL and onload/onerror callbacks - Added verbose log messages during asset library preload - Fixed crash on iOS when rewinding or looping sounds 3.7.3 (02/13/2017) ------------------ - Improved support for Raspberry Pi - Improved configuration for Gradle version on Android builds - Fixed a crash in VorbisFile.fromBytes - Fixed httpRequest.timeout to timeout only on opening a connection - Fixed setting of system clipboard when using Clipboard.text on HTML5 - Fixed Assets.getBytes for cached text assets - Fixed the final progress value when using -Dsimulate-preloader - Fixed valid image check when returning cached image assets - Fixed a minor memory leak in System application directories - Fixed filters and default file name in FileDialog - Fixed AudioBuffer.loadFromFile on native for remote assets 3.7.2 (01/26/2017) ------------------ - Reverted high-DPI HTML5 mouse scale change - Improved the DPI values returned from display.dpi - Fixed "Update to Recommended Settings" message on Xcode 8.2 3.7.1 (01/25/2017) ------------------ - Improved output of Flash Player log output - Fixed minor issues with Flash Player preload logic - Fixed use of AudioBuffer in multiple native AudioSource instances 3.7.0 (01/24/2017) ------------------ - Added `` (implies `` and ``) - Added `` (will default to false in Lime 4) - Added `-Dsimulate-preloader=3000` for simulating preload progress - Improved Image.loadFromBase64/loadFromBytes/loadFromFile on HTML5 - Improved Image.loadFromBytes/loadFromFile support on Flash target - Improved support for "library.json" files that are not embedded - Improved support for browsers that do not have context.isPointInPath - Improved `lime setup linux` command for some newer environments - Improved caching behavior of text assets in AssetLibrary - Improved seeking behavior for AudioSource on native targets - Improved preload behavior on Flash target - Fixed metadata-based font embedding for Flash Player - Fixed issues with Windows paths when building tools with Haxe 3.4 - Fixed preloading of fonts similar to default sans-serif on HTML5 - Fixed base path for assets loaded from non-default asset libraries - Fixed scale of mouse events dispatched for high-DPI HTML5 windows 3.6.2 (01/20/2017) ------------------ - Improved error when making a directory on an unavailable drive letter - Fixed regression in support for HTML5 font preloading - Fixed possible font overflow when embedding fonts on Flash target - Fixed crash on Neko when using AudioSource with no AudioBuffer 3.6.1 (01/18/2017) ------------------ - Added streaming audio support to AudioSource - Fixed issues in bytesLoaded/bytesTotal calculation - Fixed a regression in support for static-linking - Fixed a regression in support for lime.utils.JNI 3.6.0 (01/16/2017) ------------------ - Moved "lime.audio" to "lime.media" - Added Vorbis bindings under "lime.media.codecs.vorbis" - Added lime.ui.ScanCode, with conversion support to/from KeyCode on native - Added tool support for the "--no-output" argument - Migrated from NFD to tinyfiledialogs for better dialog support - Made window.close cancelable on desktop platforms - Updated libjpeg to 9b - Updated howler.js to 2.0.2 - Improved support for Haxe 3.4 - Improved support for progress events while preloading - Fixed force install when deploying to Android (API 16+ devices) - Fixed an invalid state when returning from background on Android - Fixed playback of a single audio buffer multiple times on HTML5 - Fixed initial volume level in AudioSource on HTML5 - Fixed a regression in the default architecture list for iOS - Fixed merging of multiple `` tags in project files - Fixed a possible crash when retrieving OpenGL strings - Fixed the default template for HTML5 when multiple projects are embedded - Fixed support for non-preloaded assets on HTML5 - Fixed support for image.copyChannel on HTML5 when using WebGL - Fixed support for command-line arguments with "lime rebuild" 3.5.2 (12/19/2016) ------------------ - Fixed issues related to @:bitmap, @:file and @:sound - Fixed support for HTML5 font preloading - Fixed issue with HTTPRequest and IE 11 - Fixed an issue when merging multiple project.config values - Reverted bytes changes to resolve C++ GC issues 3.5.1 (12/16/2016) ------------------ - Made major changes to Assets and the behavior of asset libraries - Made progress on a better asset manifest system - Made significant improvements to the iOS project templates - Moved lime.Assets to lime.utils.Assets - Added lime.utils.AssetLibrary, lime.utils.AssetType, lime.utils.AssetManifest - Added static "loadFrom" constructors for core types - Improved C++ performance on debug builds, added -Dlime-debug - Updated CFFI bytes to better support C# target - Fixed the 'cannot find build target "by"' error with current Haxe releases - Fixed support for *.hxp projects - Fixed some compile errors when core types were used in macros - Fixed a minor issue with HTTPRequest on HTML5 - Fixed Android template so READ\_PHONE\_STATE is not a required permission - Fixed support for `` - Fixed a regression with the quality of generated SVG icons 3.5.0 (12/07/2016) ------------------ - Significantly improved lime.net.HTTPRequest - Added support for lime.system.Clipboard on HTML5 - Added System.openURL to launch a website externally - Added System.openFile to open a file using a system default application - Added -nolaunch option for HTML5 "test" command - Added support for `` for iOS - Updated SDL to dev version to fix Linux keyboard events - Updated lime.app.Future with better progress events - Updated to initialize WebGL2 on HTML5, when available - Refactored certificate storage in HXProject - Improved the parsing and merge support for default Lime config - Improved the GL context in anticipation for GLES3/WebGL2 support - Improved HTML5 mouse events to allow canceling - Improved auto-build number detection to support SVN - Improved support for toggling window.resizable on native - Fixed audioBuffer.dispose for Howler.js buffers - Fixed use of deprecated APIs in lime.ui.Haptic implementation on iOS - Fixed use of deprecated APIs in accelerometer implementation on iOS - Fixed crash when resuming iOS applications from the background - Fixed crash if an asset manifest is not found and live reloading is enabled - Fixed handling of the default framebuffer on iOS - Fixed handling of \*.jpeg file extension when making Flash builds - Fixed an issue in bytes handling for C# - Fixed the behavior of window onEnter/onLeave on DOM - Fixed the behavior of image.scroll - Fixed garbage collection for lime.audio.openal.ALSource - Fixed incorrect window scale calculation on the iPhone Plus - Fixed some standard APIs when making modular HTML5 builds - Fixed crash when setting window.title - Fixed the return value of gl.shaderInfoLog on some platforms - Fixed the behavior of Event.ACTIVATE when resuming on iOS - Fixed missing input event initially on HTML5 3.4.1 (11/01/2016) ------------------ - Fixed order of Assets.registerLibrary and app.onPreloaderComplete - Added a workaround for HAXE_STD_PATH error on -Dmodular 3.4.0 (10/31/2016) ------------------ - Moved Lime config from ~/.hxcpp_config.xml to ~/.lime/config.xml - Added a new "lime config" command to print the current config - Added "lime config VARNAME" command to print a value from the current config - Added initial support for modular HTML5 builds (generates separate lime.js) - Added support for comparisons in project XML (like ${haxe >= 3.2.1}) - Added lime.ui.Haptic for initial support of vibrate on iOS/Android - Added `` to project XML for info/warning/error/verbose messages - Added a build-time error if Haxe is less than 3.2.0 - Added support for GIT-based meta build number value - Added initial high-DPI support for HTML5 - Updated SDL to version 2.0.5 - Improved support for Android immersive mode - Improved idle performance on macOS - Improved Gradle template to output APK filenames based on build type - Improved verbose messages for embedded fonts - Removed Neko template binaries, updated tools to use host version - Fixed IPHONE_VER issues with certain versions of HXCPP - Fixed iOS device deployment on macOS Sierra - Fixed iOS simulator deployment on macOS Sierra - Fixed node.js HTTP server support on macOS Sierra - Fixed duplicate symbol error on iOS - Fixed support for older CPUs without SSE4 instruction support - Fixed crash on negative seek position for HTML5 AudioSource - Fixed initial gain and position when playing HTML5 AudioSource sound - Fixed compatibility issues with current Haxe development versions 3.3.0 (10/10/2016) ----------------- - Added Future.ready and Future.result - Added AudioBuffer.loadFromFile and AudioBuffer.loadFromFiles - Added favicon support to HTML5 builds - Added automatic garbage collection to OpenAL bindings - Improved the behavior of AudioSource, added Howler.js for HTML5 - Improved CFFI bindings to prevent early GC of bytes - Improved the behavior of \*.hxp project files - Improved support for the C# target - Improved `` to allow a value of 0 - Improved support for "-lib lime" from plain HXML - Implemented relative mouse movement events for Flash and HTML5 - Implemented Locale support for Android - Updated the behavior of "lime run" to imply "trace" (unless "-notrace") - Updated Android template to allow submission to non-touchscreen devices - Fixed support for `` on Android - Fixed the value of Assets.isLocal for certain non-embedded assets - Fixed an issue affecting touch events after an HTML5 build was rotated - Fixed use of a custom HAXELIB_PATH for iOS builds (in Xcode) - Fixed numpad key values in HTML5 - Fixed C++ casting when converting openfl.Vector to Float32Array - Fixed support for `` - Fixed Android compilation using debug 3.2.1 (09/20/2016) ------------------ - Fixed an issue when GC was executed from another thread 3.2.0 (09/19/2016) ------------------ - Updated to support Xcode 8 and iOS 10 - Added lime.system.Locale - Added initial changes to support the C# target - Updated to OpenAL-Soft 1.17.2 - Cleaned up some API paths with GC optimizations - Changed macOS to use OpenAL.framework, not OpenAL-Soft - Changed Android to use the standard OpenAL-Soft release - Improved suspend/resume support for Android audio - Improved support for `lime setup` on Linux - Improved CADisplayLink support for iOS - Improved the behavior of ColorMatrix - Fixed some crash issues in lime.system.System - Fixed setting of window.title - Fixed an issue with the Android NDK and debuggable=false - Fixed a possible crash when using multiple windows - Fixed the Android template for `lime create extension` - Corrected support for high DPI windows 3.1.0 (08/29/2016) ------------------ - Switched from Ant to Gradle for Android builds - Added workarounds for some Haxe 3.3.0-rc1 issues - Added support for hidden windows on the desktop - Improved HTML5 mouse move by ignoring repeat events - Fixed issues in ArrayBuffer when values were null - Fixed a cross-origin issue that affected some browsers - Fixed support for System directories on Android - Fixed null fromBytes/fromImage conversion 3.0.3 (07/27/2016) ------------------ - Improved "lime test flash -web" behavior to use HTTP server - Fixed an issue with Neko native byte resizing 3.0.2 (07/22/2016) ------------------ - Added lime.utils.compress.* Deflate, GZip, LZMA and Zlib - Added -Dcairo to force use of Cairo software rendering on native - Deprecated lime.utils.LZMA - Fixed issue where assets were not found on Linux 3.0.1 (07/20/2016) ------------------ - Improved the exclude/include filter behavior on `` tags - Fixed an issue that caused Window to duplicate event dispatches - Fixed the name of generated folder for HTML5 output - Fixed support for OpenAL getSource3f 3.0.0 (07/08/2016) ------------------ - Changed to different build directories for release/debug/final - Added support for transparent HTML5 windows - Added support for cairo.showGlyphs - Added garbage collection to the OpenGL bindings - Added audioSource.position for panning - Improved the behavior of Image when using WebGL - Improved the behavior of the HTML5 cache string - Improved the Flash target to embed unsupported audio assets - Improved support for integer positioning of unscaled HTML5 content - Updated the SVG tool using the latest SVG/OpenFL versions - Updated the module system to be more resilient to API changes - Updated the iOS plist for newer app store submission guidelines - Updated the HTML5 canvas to allow for premultiplied alpha - Integrated changes to improve tvOS support - Fixed issues in the Cairo bindings for improved Neko support - Fixed image.copyPixels when using a negative destination - Fixed the fillRect behavior when using alpha on native - Fixed an issue with PNG encoding on HTML5 - Fixed an issue in typed arrays where offset/length were ignored - Fixed a crash in ExternalInterface - Fixed a case where displayInfo.currentMode is not active yet 2.9.1 (03/28/2016) ------------------ - Added automatic support for mouse capture when dragging - Added initial support for `` - Added window.onDropFile, window.maximized - Added a missing dependency in the iOS project template - Added a polyfill for context.isPointInStroke (for IE support) - Added a flag to disable "allow-high-dpi" support - Improved support for Assets.loadBytes on Flash - Fixed some minor memory leaks when allocating CFFI strings - Fixed a rare crash in the tools when `haxelib path` does not work - Fixed the name suffix for Windows builds on newer HXCPP versions - Fixed an issue where Cairo could render text at the wrong size - Fixed the default company meta to be blank instead of a dummy value - Fixed the window position and size to update after fullscreen 2.9.0 (01/22/2016) ------------------ - Updated to SDL 2.0.4 - Updated to Cairo 1.14.6 and pixman 0.32.8 - Changed default Android SDK version to 19 (enables immersive mode) - Added initial support for display.dpi - Added initial support for window.borderless and window.resizable - Added initial support for renderer.readPixels - Added support for image.threshold - Added open directory support to file dialog - Added support for stopping propagation of browser keyboard events - Added support for environment variables in if/unless conditionals - Added support for variable substitution in if/unless conditionals - Added MIPS and MIPSEL to architectures in tools - Improved guards against using lime.* classes with legacy - Improved support for the newer Android NDK - Improved handling of reference leaks in JNI access - Removed @:finalizer support, due to issues it caused - Fixed compatibility with HXCPP changes regarding Visual Studio 2015 - Fixed support for window.display on scaled windows - Fixed a tool crash when using an unrecognized -armvX flag 2.8.3 (01/02/2016) ------------------ - Improved support for the latest Android NDK - Improved cross-domain image loading on HTML5 - Improved support for rebuilding and using tools without haxelib - Ensured that OpenAL is disabled in static builds by default - Fixed support for the current Haxe development build - Fixed the setup command to ensure all requested dependencies - Fixed a compile error when using `` and an empty path - Fixed the -notrace flag (to disable "trace" on "test" commands) 2.8.2 (12/16/2015) ------------------ - Enabled WebGL by default on HTML5 - Added support for Lime event canceling - Added default keyboard shortcuts for toggling fullscreen - Added default Android back button behavior to quit - Added support for `` on HTML5 template - Changed iOS default system font path to be more generic - Fixed issues with OGG decoding on newer Android NDK - Fixed AudioSource complete event when setting currentTime or length - Fixed minor issue compiling Neko Windows binaries from Linux - Minor updates to the default Android ADB output filter - Updated ANGLE binaries to resolve ALT + Enter fullscreen issue - Fixed font paths on iOS (legacy) 2.8.1 (12/09/2015) ------------------ - Disable ANGLE by default on Windows, need to do additional testing - Added support for optional haxelib references in XML - Fixed an issue with incorrect joystick IDs on connect 2.8.0 (12/07/2015) ------------------ - Removed lime.utils.ByteArray in favor of Haxe (3.2+) Bytes - Enabled ANGLE on Windows builds by default - Restored compatibility with Windows XP - Added support for HTML5 gamepad/joystick events - Removed lime.net.URLLoader, added HTTPRequest as a temporary patch - Added cache-break support to HTML5 based on each build - Fixed use of 32-bit Windows builds on recent HXCPP versions - Fixed support for correct touch event coordinates in HTML5 fullscreen - Fixed importing of lime.system.JNI on platforms other than Android - Fixed an issue that could cause native crashes on null Vector2 values - Fixed embed of runtime-generate asset files - Fixed default font paths on new versions of iOS (legacy) 2.7.0 (10/28/2015) ------------------ - Added a minimum version check for OpenGL (software fallback otherwise) - Improved the consistency of frame time on native platforms - Fixed an issue where Android applications would crash on unfound files - Updated the Neko template for Lime legacy builds 2.6.9 (10/15/2015) ------------------ - Fixed an issue with certain predictive text keyboards on Android - Fixed an issue where ImageBuffer did not update after certain changes - Fixed a red tint that occurred on some mobile graphics - Fixed a crash on closing applications on OS X 10.11 due to OpenAL - Fixed an issue with VERIFY_HOST in the cURL bindings - Additional fixes for tvOS compatibility - Made minor template updates - Fixed the default virtual keyboard type on BlackBerry (legacy) 2.6.8 (10/05/2015) ------------------ - Updated to a new SDL development version - Added window.scale, window size and mouse events are in points - Added Lime Joystick events (alongside Gamepad events) - Added JPEG and PNG encode support for HTML5 - Improved tooling support for tvOS builds 2.6.7 (10/02/2015) ------------------ - Added initial changes to support Apple tvOS - Added System.allowScreenTimeout to allow screensaver/sleep - Updated CFFI to fix "hx_register_prim" issue on Android - Improved "lime setup linux" - Fixed preload when the same asset is listed twice - Fixed an issue with importing lime.Assets in legacy builds 2.6.6 (09/24/2015) ------------------ - Patch support for static C++ builds without use of HXCPP dev - Fixed a crash that could occur in Flixel 3.x 2.6.5 (09/23/2015) ------------------ - Improved automatic garbage collection for native references - Removed Cairo reference/destroy (handled internally now) - Added lime.system.CFFIPointer - Added *.fla to default exclude asset filter - Disabled ENABLE_BITCODE on iOS by default - Fixed an issue with Image.fromBitmapData when using OpenFL - Fixed a minor issue with copyPixels on Firefox 2.6.4 (09/21/2015) ------------------ - Changed cURL bindings to use Bytes instead of String for callbacks - Fixed iOS support for CFFI prime (requires HXCPP update) - Reverted SDL2 version to fix regression in iOS window size - Disabled Cairo finalizer (for now) to resolve some crash problems - Reduced "unreachable code" warnings in Firefox - Fixed iOS multitouch behavior (legacy) 2.6.3 (09/19/2015) ------------------ - Added initial support for CFFI-based finalizer callbacks - Added initial accelerometer support - Fixed an issue with erratic mouse values on Mac - Fixed a minor issue with touch events - Updated to a newer SDL development version - Improved the handling of alpha when using image.setPixel - Updated System.exit to go to background on Android if not an error - Improved dirty logic with Image pixel operations - Added an optimization for repeated Font path lookups - Improved support for non-US keyboard layouts (legacy) 2.6.2 (09/08/2015) ------------------ - Added support for Raspberry Pi 2 - Added lime.app.Future/lime.app.Promise - Migrated asynchronous lime.Assets calls to use futures - Added lime.system.CFFI and a new @:cffi macro to use prime - Migrated Lime CFFI bindings to use new (faster) prime bindings - Added window.alert (taskbar flash, optional message popup) - Set the "lime" shortcut on Mac and Linux to use "/usr/local/bin" - Set the Lime tools to use optional CFFI (can run without NDLL) - Added -Ddisplay when running "lime display" to help code completion - Added some minor Windows XP fixes - Improved lime.app.Event to be more resilient to other macros - Fixed lime.ui.FileDialog on Mac - Fixed dispatch of mouse events from touch on HTML5 - Added "onBackPressed" to Android extensions 2.6.1 (08/26/2015) ------------------ - Added window.focus for raising and focusing windows - Added lime.ui.FileDialog for save/open dialogs - Made application renderer and window return the first of each array - Added renderer.type for simpler comparisons - Implemented AudioBuffer.fromURL for OpenFL Sound support - Switched to current Lime architecture when processing SVG files - Fixed color order in image.getColorBoundsRect - Fixed font embedding for HTML5 - Fixed Cairo inFill, inStroke, inClip - Fixed some issues in image.copyPixels - Fixed missing callback in Assets.loadLibrary - Fixed multi-touch on iOS (legacy) 2.6.0 (08/20/2015) ------------------ - Added support for multiple windows - Improved Lime application config for multiple windows - Renamed application.init to application.onWindowCreate - Changed many application events to include a window reference - Expanded touch input support, added lime.ui.Touch - Moved game input events from Window to Gamepad - Added application onPreloadProgress/onPreloadComplete events - Added onModuleExit events (for a clean shutdown) - Added additional key mappings for Flash and HTML5 - Fixed HTML5 text input with spaces - Fixed event.remove - Fixed an issue with software-based windows - Fixed an unused reference in the Android template - Fixed "std@module_read" errors on Neko 2.5.3 (08/13/2015) ------------------ - Ported the JNI class for Android extension support without legacy - Added a new Display API for information on connected screens - Added lime.system.Clipboard and support for System.endianness - Added window.display and window.setTitle - Merged updates to the game console render context - Standardized touch events to use normalized x/y coordinates - Standardized touch events to dispatch mouse events as well - Added support for unicode text input on HTML5 - Added support for specifying the iOS simulator device type - Added conversion to/from UInt for Int abstracts - Fixed the output color order when image encoding - Reduced allocations when using gl.vertexAttribPointer - Improved font hinting when using Cairo - Fixed decoding support for some JPEG images - Fixed support for embedded assets on iOS and Android - Fixed a possible issue in the Flash preloader - Fixed passing of Haxe defines in the iOS build template - Fixed support for lime.utils.Log - Fixed support for event.has 2.5.2 (07/23/2015) ------------------ - Added support for automatic software fallback on native platforms - Improved the behavior of image getPixel/setPixel - Fixed native fillRect/floodFill when using certain color values - Improved color conversion support for Flash - Fixed issue preventing Neko from reading 32-bit integers correctly 2.5.1 (07/21/2015) ------------------ - Made Image properly support all PixelFormat/premultiplied types - Updated PixelFormat names to be more descriptive - Added prefix support for generated library class names - Fixed an issue with Assets.loadImage on HTML5 - Fixed support for OpenAL playback using a starting offset 2.5.0 (07/17/2015) ------------------ - Added guards against duplicate gamepad connect events - Added guards against gamepad events after a disconnect - Added dead zone and repeat value filtering for gamepad axis - Added CairoImageSurface, properly separate from CairoSurface - Improved HTML5 to use the project FPS setting - Improved asset libraries to have an "unload" method - Fixed repeated calls to Assets.load* with the same ID - Fixed "lime build" to not progress without sources - Fixed a regression in ByteArray.fromFile on Android - Fixed a bug in arrayBufferView.set - Quieted libpng "known incorrect profile" messages - Added a patch to allow Wii Remote detection (legacy) 2.4.9 (07/13/2015) ------------------ - Added lime.system.ThreadPool - Added lime.utils.Log - Added image.scroll - Added event.has - Improved performance of Flash target logging - Improved "lime upgrade" when Git is not in the PATH - Improved image.clone when using canvas - Updated for compatibility with newer lime-samples - Updated to use a default icon when none is available - Updated Assets to use a ThreadPool for asynchronous loads - Updated to pass -verbose during "run" when in verbose mode - Fixed an issue when tracing null typed arrays - Fixed image.copyChannel when clipping is necessary - Fixed use of cURL basic types as Int - Improved support for asynchronous SSL requests (legacy) 2.4.8 (07/09/2015) ------------------ - Improved lime.system.BackgroundWorker onComplete - Improved native bytes to guard against premature GC - Fixed ENABLE_BITCODE when targeting older iOS versions - Fixed possible double mouse events on iOS - Fixed embedded font support on iOS - Fixed "lime rebuild ios" with some versions of HXCPP - Fixed mouse middle/right/wheel events on desktop (legacy) 2.4.7 (07/06/2015) ------------------ - Fixed regression in HTML5 typed array support 2.4.6 (07/06/2015) ------------------ - Added lime.system.BackgroundWorker for easy threads - Made Assets loadImage/loadBytes asynchronous on native - Removed the ByteArray \__init__ and matching CFFI functions - Improved the help documentation when using "lime create" - Fixed a crash that could occur when using Bytes - Fixed audioSource.play on native when there is no data - Fixed event.remove when using during an event dispatch - Fixed the cleanup of OpenAL when closing applications - Fixed a crash that could occur using cURL on Mac - Fixed static builds for the Mac target 2.4.5 (07/02/2015) ------------------ - Changed to a new, better Haxe typed array implementation - Added an improved Bytes (internal) for native targets - Added lime.utils.LZMA for LZMA compression/decompression - Expanded support for gamepad devices - Improved desktop multitouch support - Exposed decodeBytes/decodeFile for PNG and JPG formats - Added support for header-only decoding of PNG or JPG - Improved support for Flash log output - Improved the "update" command to support GIT submodules - Restored previous rendering behavior on high-DPI Apple devices - Fixed support for non-embedded assets on HTML5 - Fixed other cases in the Assets loading code on HTML5 - Fixed imageBuffer.bitsPerPixel to default 32, not 4 (bytes) - Updated webgl-debug.js for use with HTML5 -Dwebgl -debug - Fixed a regression in middle and right click events (legacy) - Fixed possible file handle leaks in the audio code (legacy) - Added DPI-aware keyboard height for iOS (legacy) - Added a hack to identify the type of connected gamepads (legacy) - Fixed the sourceRect coordinates for blitChannel (legacy) - Added screen resolution width/height for BlackBerry (legacy) - Fixed a possible overflow in the LZMA buffer (legacy) 2.4.4 (06/08/2015) ------------------ - Handle Flash traces, similar to native logging - Improved performance of TextLayout - Improved the behavior of the Android Activity class - Added window activate/deactivate events on mobile - Added retina support on Mac desktop - Allow --meta overrides when using `lime create project` - Added sleep after Android touch events for better performance - Improved build support for Raspberry Pi 2 - Fixed -force_load flag on iOS builds - Fixed GL.clearDepth and GL.depthRange bindings - Fixed negative System.getTimer value on HTML5 - Added multi-touch desktop support (legacy) - Improved WAV format loading (legacy) - Fixed iswalpha crash on BlackBerry (legacy) 2.4.3 (06/01/2015) ------------------ - Improved support for embedded fonts - Fixed regression when embedding certain OTF fonts 2.4.2 (05/30/2015) ------------------ - Improved iOS and Android build support - Add support for application.frameRate - Reduce cURL connection timeout to 30 seconds - Improved handling of non-transparent image buffers - Add cubic support to font decomposition - Added Cairo window resize handling - Added Cairo Freetype support - Added check to remove duplicated `` references - Minor fix to image premultiply alpha - Minor fix to "lime create" command - Minor fix to rectangle.transform - Fixed Windows Neko builds when not running on Windows 2.4.1 (05/13/2015) ------------------ - Improve handling of custom error types in HTML5 target - Guard icon helpers if PNG encoding fails - Fixed Emscripten rebuild - Fixed issue on the build server 2.4.0 (05/12/2015) ------------------ - Added Cairo render context and bindings - Added support for software windows, using Cairo not OpenGL - Added text input/edit events - Added onEnter/onLeave events for Window mouse focus - Added Image getColorBoundsRect - Added build support for ANGLE - Removed prevent default for HTML5 arrow and space keys - Improved Image copyPixels with merge alpha - Fixed static build support - Fixed a case where fonts might not be embedded - Fixed occasional crash with OpenAL on Neko 2.3.3 (04/21/2015) ------------------ - Added audioSource.loops, audioSource.offset, audioSource.length - Renamed audioSource.timeOffset to audioSource.currentTime - Fixed onComplete for AudioSource instances - Fixed support for embedded bytes on HTML5 - Fixed support for hardware anti-aliasing on SDL2 targets - Fixed some loose file handles in the format decoders - Fixed a possible crash in copyPixels - Improved accuracy of URLLoader progress 2.3.2 (04/15/2015) ------------------ - Improved performance of pixel-based operations in Image - Added support for RGBA (default) and ARGB color order - Added --port=123 to change the webserver port on HTML5 builds - Added support for Unicode Windows system paths - Added larger icon sizes requested by Windows 10 - Improved functionality of BMP.encode - Fixed compilation on Android without Sound.java - Fixed support for -Doptional-cffi - Fixed haxe.Timer (legacy) 2.3.1 (04/08/2015) ------------------ - Renamed Lime legacy to "lime-legacy" to support hybrid builds - Added -Dhybrid for using Lime 2 and Lime legacy in the same project - Improved support for standalone Neko builds on Linux - Fixed loading of OGG sounds on Android - Fixed Emscripten support for newer HXCPP - Fixed a crash using gl.texSubImage2D on Neko - Fixed missing System.fontsDirectory on Linux - Fixed crash on NULL system directories - Fixed crash when font or JPEG file paths are not found - Added softKeyboardRect support for iOS (legacy) 2.3.0 (03/26/2015) ------------------ - Added initial Lime 2 support for iOS - Added Mouse.lock and Mouse.warp on native platforms - Added window.onMouseMoveRelative for use with mouse locking - Added System.exit - Added Lime 2 support for haxe.Timer - Changed window.onMouseMove to dispatch only (x, y) - Improved window width/height reporting after creation - Updated ios-deploy, fixed the run command for iOS - Fixed the ByteArray size returned from Image.getPixels - Fixed Flash builds for Mac and Haxe 3.2 - Fixed js.Boot for new changes in Haxe 3.2 - Fixed an issue in the Gamepad API - Fixed the ZipHelper for Haxe 3.2 - Fixed the -Dstats define for HTML5 builds 2.2.2 (03/25/2015) ------------------ - Restored support for OpenFL 2.2 - Added System.fontsDirectory - Improved Font.fromFile when the file is not available - Improved HTTP server to allow access from other devices - Improved System.getTimer to work without haxe.Timer - Fixed a crash when using GL.bufferData with zero-length data 2.2.1 (03/21/2015) ------------------ - Fixed -rebuild for 32-bit Mac/Linux with newer HXCPP - Fixed ImageBuffer with newer HXCPP - Compile fix 2.2.0 (03/20/2015) ------------------ - Added formal support for fonts - Added formal support for complex text layout - Added Gamepad input support - Added Haxe 3.2 support - Added support for Window fullscreen - Added support for Window minimized - Added System directories (user, documents, etc) - Added the foundation for iOS support - Improved support for node.js - Improved support for Lime modules - Added support for embedded images and sounds - Changed Module init() to occur sooner - Implemented Assets.getBytes for Flash BitmapData - Fixed Assets.isLocal for Flash sound assets - Fixed Image and ImageBuffer clone() - Fixed support for HXCPP 3.2.x - Fixed -rebuild when using the Lime 2 desktop NDLL - Fixed "lime rebuild" when in the Lime directory 2.1.3 (03/02/2015) ------------------ - Added lime.ui.KeyModifier - Added key modifier support to Flash and HTML5 keyboard events - Added support for iOS builds using HXCPP 3.2 - Now "create project" creates unique package IDs instead of a common one - Now "-clean" is ignored where it does not make sense (such as "run -clean") - Changed default fullscreen for native targets to SDL_WINDOW_FULLSCREEN_DESKTOP - Fixed escaping for quotes and spaces in macro calls on Flash target - Removed Lime native dependency defines from Flash and HTML5 builds - Improved the behavior of shader isValid/isInvalid - Added a request for focus after resuming on Android - Fixed an IME issue that affected some Android keyboards - Fixed Linux setup on Arch 32-bit systems - Fixed an issue when building iOS projects to an absolute build path - Fixed issue where iOS builds may lack some defines (such as HXCPP_API_LEVEL) - Patched support for Assets.loadSound on Flash target - Fixed a null check in lime_alc_open_device 2.1.2 (02/20/2015) ------------------ - Minor fixes for upcoming Haxe 3.2 release - Added "lime deploy" to zip and support upload targets - Added initial support for Google Drive using "lime deploy" - Added "Options.txt" reading for iOS builds to include -Dhxcpp_api_level - Changed "lime update ios" to only update, and not open Xcode - Added "-xcode" flag to open Xcode on iOS "build" or "run" command - Fixed the use of "lime" from Windows batch/command files - Improved "haxelib path" error message when a dependency haxelib is missing - Improved PathHelper.relocatePath to resolve issues with absolute paths - Fixed issue preventing projects from changing Flash scaleMode/align - Improved web font loading on HTML5 target - Fixed JavaScript minification that was failing on some systems - Fix issue with disappearing keyboards on certain Android devices - Fix "isValid" check in GLShader to check for zero - Set `` by default - Request focus in resume on Android, in case an extension has focus (legacy) - Added TILE_BLEND_SUBTRACT (legacy) 2.1.1 (02/13/2015) ------------------ - Added initial Emscripten target support - Fixed regression in HTML5 font asset embedding - Minor improvement to SWF embedding for Flash target 2.1.0 (02/11/2015) ------------------ - Refactored, made many events instance-based, not static - Removed event managers, moved input events to Window class instances - Moved many Lime tool classes into the public lime.* API - Added initial Lime 2 support for Android - Added official Android X86 emulator support - Added support for munit unit testing suite - Added System.getTimer for faster delta time calculations - Added application.removeWindow and window.close - Added support for a custom asset root URL on HTML5 - Added forced OpenAL cleanup, in case of an unclean exit - Fixed support for Haxe 3.2 haxelib behavior - Fixed createImageData issue on HTML5 for WebGL - Improvements to in-progress Lime text layout API - Improved handling of Android Debug Bridge on Linux - Improved handling of ANT_HOME for use with ADB - Fixed the output of textField.htmlText on Android (legacy) - Updated TextField implementation (legacy) - Fixed behavior of ColorMatrixFilter (legacy) - Fixed textField.setTextFormat with different font (legacy) - Fixed crash in Capabilities.language on iOS (legacy) 2.0.6 (01/22/2015) ------------------ - Resolved asset embedding for Lime resources - Added "js-flatten" and "dce full" to HTML5 -final builds - Made "-minify" occur by default on HTML5 -final builds - Improved the copy behavior for assets on Android and BlackBerry - Improved the getDeviceSDKVersion call for Android - Fixed support for making typed arrays from OpenFL Vector data - Removed unneeded iOS CFBundleIcon references - Updated the default iOS deployment to version 5.1.1 for arm64 - Updated to the latest Google Closure compiler version - Added a ConsoleRenderContext, to continue to grow with console efforts - Refactored Application, Window, Renderer and other "backend" classes - Fixed crash in BitmapData rendering (legacy) - Fixed rotation of TextField instances (legacy) 2.0.5 (01/13/2015) ------------------ - Improved the Windows ICO generation support - Added support for embedded ICO resources in Windows applications - Added caching to improve performance when icons exist - Added lime.graphics.format.JPEG/PNG/BMP classes for encoding - Improved KeyCode so it automatically casts to/from Int - Improved the behavior of Android ADB management - Migrated to an "Asset Catalog" for iOS icons and launch images - Added missing iOS icon and launch image sizes - Added image.merge support for software image blending - Fixed the color order for Windows icon generation - Fixed a possible crash issue in empty Image instances - Fixed support for forwarding HXCPP defines on iOS builds - Fixed support for dead-code elimination full - Guarded Android API calls that require newer device versions - Improved lime.embed to support either a DOM object or ID string - Improved the behavior of BitmapData getPixels (legacy) - Exposed support for shifting pitch on OpenAL (legacy) - Fixed a crash in iOS Capabilities.language (legacy) - Added bitmapData.merge support (legacy) 2.0.4 (12/31/2014) ------------------ - Added system mouse cursor support in lime.ui.Mouse - Added hide/show cursor support in lime.ui.Mouse - Improved the behavior of the embedded web server - Fixed the behavior of Image.getPixels - Fixed embedded font support for OpenFL HTML5 - Fixed the Windows application icon - Fixed handling of dummy ANT_HOME or JAVA_HOME HXCPP values - Improved default context menu behavior on Flash/OpenFL - Improved fixed orientation support on iOS (legacy) 2.0.3 (12/27/2014) ------------------ - Improved linking of OpenAL for Android - Added support for cached `` processing - Fixed exit code behavior when calling HXCPP - Fixed minor issues with "lime rebuild tools" 2.0.2 (12/21/2014) ------------------ - Added ARMV7S, ARM64 and X86_64 support for iOS - Added unofficial Java support - Added xxhdpi and xxxhdpi icons for Android - Added initial support for Android (without legacy) - Upgraded to a newer SDL2 release for desktop - Improved the behavior of Image.setPixels - Improved Image.fromBytes for HTML5 - Improved Image.fillRect for HTML5 - Fixed issue causing "bin" directories to appear on rebuild - Fixed issues with Android ADB - Fixed an issue with HTML5 copyPixels - Fixed an infinite loop when loading WAV audio - Fixed an infinite loop when loading WAV audio (legacy) - Fixed GL.getShaderPrecisionFormat (legacy) - Removed unnecessary iOS libraries (legacy) - Fixed Android x86 builds (legacy) - Fixed TextField leading (legacy) 2.0.1 (12/04/2014) ------------------ - Added GL.isContextLost - Added Renderer onRenderContextLost/onRenderContextRestored - Improved Android device version check - Changed Firefox to type WEB instead of MOBILE - Fixed HTML5 touch event coordinates 2.0.0 (11/20/2014) ------------------ - Improved the "lime rebuild" command - Added a "-dryrun" flag to help test the tools - Fixed zero width/height in lime.graphics.Image - Populate environment with HXCPP config defines - Fixed double dispatch of HTML5 mouse events - Improved the "lime.embed" JS command - Fixed "lime create openfl" - Made fixes to support the newer Blackberry SDK - Fixed GraphicsPath on Neko (legacy) 2.0.0-beta (11/13/2014) ----------------------- - Merged the Lime "legacy" codebase - Initial steps towards Lime node.js support - Sped up rasterization of SVG icon images - Sped up splash image generation - Improved lime.graphics.Image for some browsers - Added native PNG/JPG encoding - Improved $variable handling in project parsing - Other minor fixes 2.0.0-alpha.8 (11/08/2014) -------------------------- - Guarded certain CFFI calls - Fixed discovery of Java install on OS X - Omitting Android force downgrade on old devices 2.0.0-alpha.7 (11/01/2014) -------------------------- - Improved handling of haxelib library versions - Add patched haxe.CallStack to fix C++ stack order - Fix fonts to use the true font name - Automatically register fonts embedded in the project - Fixed and documented the "-args" tool flag - Added the force downgrade argument when installing on Android 2.0.0-alpha.6 (10/28/2014) -------------------------- - Added initial support for cubic bezier font outlines - Added better OpenFL ASCII color on Mac - Maybe Java optional during build process for SVG rasterizer - Improved "isText" file detection - Fixed loading of type BINARY files as TEXT 2.0.0-alpha.5 (10/23/2014) -------------------------- - Added patched Haxe Boot class, to fix Std.is on Safari - Added support for the "openfl" command - Using the proper font name when embedding in Flash - Improved the handling of font family name detection - Minor fixes 2.0.0-alpha.4 (10/21/2014) -------------------------- - Improved parsing of HXML when compiling for the Flash target - Improved the `` data system - Enabled splash screen generation for iOS again 2.0.0-alpha.3 (10/20/2014) -------------------------- - Fixed handling of HXML with comments when targeting Flash - Added initial support for ".bundle" asset folders - Added initial support for `` - Passing "-verbose" when appropriate to library handlers - Improved code completion for FlashDevelop - Improved population of defines in project file handling - Fixed "lime create extension" - Improvements to `` tag merging - Added Tilesheet TILE_RECT support (legacy) 2.0.0-alpha.2 (10/16/2014) -------------------------- - Added Lime "legacy" binaries for OpenFL v2 native support - Merged the Aether tools into Lime - Improved the "lime rebuild" command - Added onSaveInstanceState/onRestoreInstanceState on Android - Added TouchEvent handling on HTML5 - Fixed handling of GL depth and stencil buffers - Fixed ImageDataUtil fillRect, copyPixels, colorTransform - Fixed iOS framework paths which include spaces - Fixed ByteArray.writeBytes when the length is zero - Fixed the iOS linker flags project option - Moved to JSON asset libraries instead of serialized ones - Improved handling of SWF asset embedding - Improved handling of HTML5 key events - Disabled HTML5 page scrolling using the arrow keys - Improved ByteArray support on HTML5 - Fixed HTML5 mouse coordinates when letterboxing - Fixed "bin" tool paths when Lime is not included in the project - Many other small fixes - Fixed sound.length when using streaming OGG audio (legacy) - Added a proper shutdown for OpenAL audio (legacy) - Fixed null data in URLLoader on Neko (legacy) - Added a dead zone filter for joystick events (legacy) 2.0.0-alpha (10/14/2014) ------------------------ - Created an all-new Lime API - The core architecture is built around Application, Window and Renderer - Events are similar to C# or signals/slots, and strongly-typed - Add support for Flash, DOM, Canvas or GL render contexts - Added bindings to OpenAL, as well a simple unified audio API - Added networking support, with bindings to cURL on native platforms - Added cross-target pixel image manipulation features - Fixed support for Xcode 6 publishing for iOS 8 - Fixed support for BlackBerry 10.3 - Restored support for old Android devices - Added support for static linking on Windows, Mac and Linux - Added support for externally defined platform targets - Improved Flash asset embedding, to handle larger projects - Added Firefox OS publishing using "lime publish firefox" - Made the asset library system more flexible - Many other tool improvements 1.0.1 (06/24/2014) ------------------ - Fixed BlackBerry support - Fixed a memory leak when using LZMA decoding 1.0.0 (05/29/2014) ----------------- 0.9.9 (05/28/2014) ----------------- - Fixed ACTIVATE/DEACTIVATE for Windows on minimize/restore - Fixed Mac fullscreen handling - Silenced "missing NDLL" warning when not in -verbose mode - Added "-nocolor" option 0.9.8 (05/27/2014) ------------------ - Fixed issues with Android JNI - Fixed a GPU texture issue on iOS - Fixed keyboard to only show if a TextField is type INPUT - Fixed support for OpenGL on Nvidia drivers for Linux - Fixed a bug where OpenGL textures were freed improperly - Improved support for reading audio file length - Added support for custom user agents in URL requests - Other minor fixes 0.9.7 (04/22/2014) ------------------ - Merged Lime with NME for code collaboration - Fixed software rendering path - Fixed compile for older Android devices - Added OpenAL support for BlackBerry - Moved to C++11 by default for iOS builds - Added additional Android extension callbacks - Improved handling of Android keyboard/gamepad input - Confirmed support for the Amazon FireTV - Improved cursor visibility when switching to/from fullscreen - Improved support for iOS virtual text input - Fixed support for BWF wave files - Fixed color order for PNG encoding 0.9.6 (03/18/2014) ------------------ - Fixed Android library instantiation order - Fixed Android onKeyUp event - Fixed volume and back keys on Android - Added stereoscopic 3D support on Android - Fixed TextField.textColor rendering - Improved support for key codes - Improved support for looping audio - Minor fixes 0.9.5 (03/04/2014) ------------------ - Improvements to Lime wrapper - Fixed cURL to support larger header sizes - Updated the SDL2 backend to support initialization without AA if not supported - Added support for Android "immersive mode" - Improved default \_sans, \_serif and \_typewriter font matching for Mac and iOS - Multiple improvements to Android JNI support - Added "count" support for drawTiles rendering - Optimized renderer to perform more with a single draw array - Improvements for anti-aliased hardware lines - Optimizations to tessellation algorithm - Added better support for pre-multiplied alpha, currently per surface - Memory fixes for Freetype fonts - Fix listing of Lime samples when running "lime create openfl" - Added proper charCode and keyCode support for Android keyboard input - Minor improvement to OpenAL sound - Multi-threading fix for Android - Fixed OpenGL ES 2 context support for Tizen - Keyboard event support on Tizen - Resolved rare issue when loading BitmapData from bytes - Minor fixes for Emscripten - Updated for automated builds: 0.9.4 (01/27/2014) ------------------ - Fixed support for 8-bit PNG images with alpha - Fixed software fallback for certain older cards 0.9.3 (01/22/2014) ------------------ - Improved the Android extension API - Improved OpenAL audio panning behavior - Fixed crash in ColorMatrixFilter - Fixed GL drawArrays issue on desktop 0.9.2 (12/31/2013) ------------------ - Fixed Tizen storage directory - Fixed support for Emscripten 0.9.1 (12/18/2013) ------------------ - Lime wrapper improvements - Improved performance when loading OGG samples in memory - Added support for the Tizen emulator 0.9.0 (12/10/2013) ------------------ - Added Tizen support - Initial wrapper implementation - Android JNI improvements - Add OpenGL context lost/restored events - Fixed support for Android OpenAL audio ================================================ FILE: CONTRIBUTING.md ================================================ How To Contribute ================= We welcome your feedback and input in how to make Lime better! If you are interested in discussing new features, the direction the project or how to integrate some change, please open an issue so we can talk about. 1. Fork the repository 2. Make the desired change 3. Create a pull request You may consider creating a branch specific to the fix or improvement you wish to make, in case you have more than one that has not been accepted into the project, or to allow for item-specific changes. It is our goal to help Lime evolve as a clean, easy-to-use (but powerful) layer for cross-platform development. Thanks for being a part of making this possible! ## Versioning and Branching Guidelines We follow Semantic Versioning (semver): MAJOR.MINOR.PATCH. ### Patch Updates (x.x.x) All bug fixes should be submitted to the current stable development branch (e.g., develop). These changes are released as patch versions (e.g., 8.2.3 → 8.2.4). ### Minor Updates (x.x.0) All new features (non-breaking) should be submitted to the next minor development branch, named x.x.x-dev. For example, if the current version is 8.2.2, features targeting 8.3.0 should go into 8.3.0-dev. ### Major Updates (x.0.0) Any breaking changes or major version updates must be submitted to the next major development branch, named x.0.0-dev. For example, breaking changes intended for 9.0.0 go into 9.0.0-dev. ================================================ FILE: Dockerfile ================================================ ARG HAXE_VERSION=3.4.3 ARG UBUNTU_VERSION=16.04 FROM haxe:${HAXE_VERSION} as haxe FROM ubuntu:${UBUNTU_VERSION} RUN apt-get update -yqq && apt-get install -yq \ libgl1-mesa-dev \ libglu1-mesa-dev \ g++ \ g++-multilib \ gcc-multilib \ libasound2-dev \ libx11-dev \ libxext-dev \ libxi-dev \ libxrandr-dev \ libxinerama-dev \ libgc1c2 \ git \ vim COPY --from=haxe /usr/local/lib/haxe/ /usr/local/lib/haxe/ COPY --from=haxe /usr/local/bin/haxe* /usr/local/bin/ COPY --from=haxe /usr/local/bin/haxelib /usr/local/bin/ COPY --from=haxe /usr/local/lib/neko/ /usr/local/lib/neko/ COPY --from=haxe /usr/local/lib/libneko* /usr/local/lib/ COPY --from=haxe /usr/local/lib/libneko* /usr/lib/ COPY --from=haxe /usr/local/bin/neko* /usr/local/bin/ # TODO: Add Android SDK, Emscripten SDK, etc RUN haxelib setup /usr/lib/haxe/lib/ RUN haxelib install hxcpp RUN haxelib git format https://github.com/jgranick/format RUN haxelib install munit RUN haxelib install hxp COPY . /opt/lime/ COPY templates/bin/lime.sh /usr/local/bin/lime RUN haxelib dev lime /opt/lime/ RUN lime rebuild linux RUN lime rebuild tools RUN rm -rf /opt/lime/project/obj CMD [ "lime" ] ================================================ FILE: LICENSE.md ================================================ MIT License =========== Copyright (c) 2013-2025 Joshua Granick and other Lime contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: MAINTAINERS.md ================================================ # Maintainer Collaboration Guidelines ## Ownership Boundaries Core ownership includes final authority on major project direction, branding, external representation (e.g., website, GitHub org settings), and financial decisions. Project leadership roles should support this structure, not compete with it. Joshua Granick remains the primary owner of OpenFL and related projects under its umbrella, including all copyrights, branding, and rights to external representations. ## Commit Transparency All commits — especially those involving the website or project structure — should be clearly described. Avoid vague or misleading commit messages. ## No Unilateral Decisions Significant changes to the public-facing site, GitHub structure, or future policies (including donation links) must be discussed with the core team before being merged. High contribution volume does not entitle anyone to override team consensus or operate outside the established process. We value impact, but we expect humility and collaboration in return. ## Respect Other Maintainers’ Work Reverting, overwriting, or contradicting another maintainer’s contribution must go through discussion first — ideally via PR, not direct commit. ## Escalation Policy If collaboration issues persist after a discussion, core owners may revoke elevated roles or privileges to protect the health of the project. This isn’t personal — it’s structural. ## Donations & Monetization Any personal monetization links (Patreon, Ko-fi, etc.) require approval by the core **owners**. We want to keep funding equitable and transparent. ## Communication First If you disagree with a decision or direction, bring it up in team chat or discussion threads — not by taking action in silence. ## We Are a Team Leadership means contributing to both the codebase and the culture. If you’re not supporting both, you’re not fulfilling the role. ================================================ FILE: NOTICE.md ================================================ Notices ======= ### Lime Copyright (c) 2013-2025 Joshua Granick and other Lime contributors This product bundles cairo 1.15.2, which is available under an "MPL 1.1" license. For details, see [project/lib/cairo/](project/lib). This product bundles libcurl 7.56.1, which is available under an "MIT/X derivate" license. For details, see [project/lib/curl/](project/lib). This product bundles efsw, which is available under an "MIT" license. For details, see [project/lib/efsw/](project/lib). This product bundles freetype 2.9.1, which is available under an "FTL" (BSD-style) license. For details, see [project/lib/freetype/](project/lib). This product bundles harfbuzz 1.8.8, which is available under an "MIT" license. For details, see [project/lib/harfbuzz/](project/lib). This product bundles HashLink 1.9, which is available under an "MIT" license. For details, see [HaxeFoundation/hashlink/](https://github.com/HaxeFoundation/hashlink/blob/1.9/LICENSE). This product bundles libjpeg 6b, which is available under a "libjpeg" (BSD-style) license. For details, see [project/lib/jpeg/](project/lib). This product bundles libogg 1.3.0, which is available under a "BSD" license. For details, see [project/lib/ogg/](project/lib). This product bundles LZMA SDK 4.65, which is available under public domain. For details, see [project/lib/lzma/](project/lzma). This product bundles mbedTLS 2.6.0, which is available under an "Apache 2.0" license. For details, see [project/lib/mbedtls/](project/lib). This product bundles OpenAL-Soft 1.19.0, which is available under an "LGPLv2" license. For details, see [project/lib/openal/](project/lib). _OpenAL-Soft is only included in dynamically-linked builds, it is excluded from Lime static builds in order to preserve Lime's permissive nature._ This product bundles pixman 0.32.8, which is available under an "MIT" license. For details, see [project/lib/pixman/](project/lib). This product bundles libpng 1.6.12, which is available under a "zlib" (BSD-style) license. For details, see [project/lib/png/](project/lib). This product bundles SDL 2.0.12, which is available under a "zlib" (BSD-style) license. For details, see [project/lib/sdl/](project/lib). This product bundles tinyfiledialogs 2.9.3, which is available under a "zlib" (BSD-style) license. For details, see [project/lib/tinyfiledialogs/](project/lib). This product bundles libvorbis 1.3.3, which is available under a "BSD" license. For details, see [project/lib/vorbis/](project/lib). This product bundles zlib 1.2.8, which is available under a "zlib" (BSD-style) license. For details, see [project/lib/zlib/](project/lib). ------- Modifications and source-repository versions of Haxe core files are included in the [haxe/](haxe/) folder, which are available under an "MIT" license. For details, see https://github.com/haxefoundation/haxe The following files were developed in collaboration with the NME project, which is available under an "MIT" license. For details, see https://github.com/haxenme/nme lime/utils/JNI.hx project/include/utils/QuickVec.h project/src/graphics/format/ project/src/graphics/opengl/ project/src/system/JNI.cpp project/src/text/Font.cpp project/src/utils/compress/LZMA.cpp tools/utils/JavaExternGenerator.hx The typed array implementation was developed in collaboration with Sven Bergström and the hxtypedarray project, which is available under an "MIT" license. For details, see https://github.com/underscorediscovery/hxtypedarray The unifill project is included in the [lime/text/unifill/](lime/text/unifill/) directory, which is available under an "MIT" license. For details, see https://github.com/mandel59/unifill lime/_internal/graphics/StackBlur.hx is adapted from original code by Mario Klingemann and the EaselJS project, and is available under an "MIT" license. For details, see http://www.quasimondo.com/StackBlurForCanvas/StackBlur.js and https://github.com/createjs/easeljs ------- _The following are not embedded in Lime applications directly, but are used as dependencies for web-based builds. Their licensing does not affect products created with Lime._ This product bundles howler.js 2.1.1, which is available under an "MIT" license. For details, see [dependencies/howler.min.js](dependencies/howler.min.js). This product bundles FileSaver.js 1.3.3, which is available under an "MIT" license. For details, see [dependencies/FileSaver.min.js](dependencies/FileSaver.min.js). This product bundles pako 1.0.2, which is available under an "MIT" license. For details, see [dependencies/pako.min.js](dependencies/pako.min.js). This product bundles LZMA-JS 2.3.2, which is available under an "MIT" license. For details, see [dependencies/lzma_worker-min.js](dependencies/lzma_worker-min.js). This product bundles stats.js r16, which is available under an "MIT" license. For details, see [dependencies/stats.min.js](dependencies/stats.min.js). This product bundles SWFObject 2.2, which is available under an "MIT" license. For details, see [templates/flash/templates/web/swfobject.js](templates/flash/templates/web/swfobject.js). This product bundles webgl-debug.js 1.0.0, which is available under an "MIT" license. For details, see [dependencies/webgl-debug.min.js](dependencies/webgl-debug.min.js). ------- _The following are not included in Lime applications, but are used by the Lime command-line tools. Their licensing does not affect products created with Lime._ This product bundles Closure Compiler v20200315, which is available under an "Apache 2.0 License" license. For details, see https://github.com/google/closure-compiler. This product bundles ios-deploy 1.9.0, which is available under an "GPLv3" license. For details, see https://github.com/phonegap/ios-deploy. This product bundles node.js 0.10.26, which is available under an "MIT" license. For details, see https://github.com/joyent/node. This product bundles http-server 0.10.0 and its dependencies, which is available under an "MIT" license. For details, see https://github.com/nodeapps/http-server. This product bundles webify 0.1.1.0, which is available under an "MIT" license. For details, see https://github.com/ananthakumaran/webify. This product bundles YUI Compressor 2.4.7, which is available under an "MIT" license. For details, see https://github.com/yui/yuicompressor. ================================================ FILE: README.md ================================================ [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE.md) [![Haxelib Version](https://img.shields.io/github/tag/openfl/lime.svg?style=flat&label=haxelib)](http://lib.haxe.org/p/lime) [![Build Status](https://img.shields.io/github/actions/workflow/status/openfl/lime/main.yml?branch=develop)](https://github.com/openfl/lime/actions) [![Community](https://img.shields.io/discourse/posts?color=24afc4&server=https%3A%2F%2Fcommunity.openfl.org&label=community)](https://community.openfl.org/c/lime/19) [![Discord Server](https://img.shields.io/discord/415681294446493696.svg?color=7289da)](https://discordapp.com/invite/tDgq8EE) Lime ==== Lime is a flexible, lightweight layer for Haxe cross-platform developers. Lime supports native, Flash and HTML5 targets with unified support for: * Windowing * Input * Events * Audio * Render contexts * Network access * Assets Lime does not include a renderer, but exposes the current context: * Cairo * Canvas * DOM * Flash * GL The GL context is based upon the WebGL standard, implemented for both OpenGL and OpenGL ES as needed. Lime provides a unified audio API, but also provides access to OpenAL for advanced audio on native targets. License ======= Lime is free, open-source software under the [MIT license](LICENSE.md). Installation ============ First, install the latest version of [Haxe](http://www.haxe.org/download). Then, install Lime from Haxelib and run Lime's setup command. haxelib install lime haxelib run lime setup Development Builds ================== When there are changes, Lime is built nightly. Builds are available for download [here](https://github.com/openfl/lime/actions?query=branch%3Adevelop+is%3Asuccess). To install a development build, use the "haxelib local" command: haxelib local lime-haxelib.zip Building from Source ==================== 1. Clone the Lime repository, as well as the submodules: haxelib git lime https://github.com/openfl/lime 2. Install required dependencies: haxelib install format haxelib install hxp 3. Copy the ndll directory from the latest [Haxelib release](https://lib.haxe.org/p/lime/), or see [project/README.md](project/README.md) for details about building native binaries. 4. After any changes to the [tools](tools) or [lime/tools](src/lime/tools) directories, rebuild from source: lime rebuild tools 5. To switch away from a source build: haxelib set lime [version number] Sample ====== You can build a sample Lime project with the following commands: lime create HelloWorld cd HelloWorld lime test neko You can also list other projects that are available using "lime create". Targets ======= Lime currently supports the following targets: lime test windows lime test mac lime test linux lime test android lime test ios lime test html5 lime test flash lime test air lime test neko lime test hl Desktop builds are currently designed to be built on the same host OS Join the Community ================== Have a question? Want a new place to hang out? * [Forums](https://community.openfl.org/c/lime/19) * [Discord](https://discordapp.com/invite/tDgq8EE) ================================================ FILE: assets/docs-theme/config.json ================================================ { "name": "Lime Theme", "author": "Lime", "parentTheme": "default" } ================================================ FILE: assets/docs-theme/resources/extra-styles.css ================================================ body .navbar .brand:first-of-type { background: url(./images/logo.png) center left no-repeat; background-size: 32px 32px; padding-left: 40px; margin: 0.5em 0; } ================================================ FILE: assets/docs-theme/resources/index.js ================================================ function createCookie(name, value, days) { localStorage.setItem(name, value); } function readCookie(name) { return localStorage.getItem(name); } function isDarkTheme() { return document.querySelector("html").classList.contains("dark-theme"); } function toggleTheme() { const htmlTag = document.querySelector("html"); let isDark = isDarkTheme(); if (isDark) { htmlTag.classList.remove("dark-theme"); } else { htmlTag.classList.add("dark-theme"); } isDark = isDarkTheme(); localStorage.theme = isDark ? "dark" : "light"; } function toggleInherited(el) { var toggle = $(el).closest(".toggle"); toggle.toggleClass("toggle-on"); if (toggle.hasClass("toggle-on")) { $("i", toggle).removeClass("fa-arrow-circle-right").addClass("fa-arrow-circle-down"); } else { $("i", toggle).addClass("fa-arrow-circle-right").removeClass("fa-arrow-circle-down"); } return false; } function toggleCollapsed(el) { var toggle = $(el).closest(".expando"); toggle.toggleClass("expanded"); if (toggle.hasClass("expanded")) { $(toggle).find("i").first().removeClass("fa-arrow-circle-right").addClass("fa-arrow-circle-down"); } else { $(toggle).find("i").first().addClass("fa-arrow-circle-right").removeClass("fa-arrow-circle-down"); } updateTreeState(); return false; } function updateTreeState(){ var states = []; $("#nav .expando").each(function(i, e){ states.push($(e).hasClass("expanded") ? 1 : 0); }); var treeState = JSON.stringify(states); createCookie("treeState", treeState); } var filters = {}; function selectVersion(e) { setVersion($(e.target).parent().attr("data")); } function setPlatform(platform) { createCookie("platform", platform); $("#select-platform").val(platform); var styles = ".platform { display:inherit } "; var platforms = dox.platforms; styles += ".package-sys { display:" + ((platform == "Flash" || platform == "HTML5") ? "none" : "inherit") + " } "; styles += ".package-cpp { display:" + ((platform == "Flash" || platform == "HTML5" || platform == "Neko") ? "none" : "inherit") + " } "; styles += ".package-neko { display:" + ((platform == "Neko" || platform == "all") ? "inherit" : "none") + " } "; styles += ".package-js { display:" + ((platform == "HTML5" || platform == "all") ? "inherit" : "none") + " } "; for (var i = 0; i < platforms.length; i++) { var p = platforms[i]; if (platform == "all" || p == platform) { styles += ".platform-" + p + " { display:inherit } "; } else { styles += ".platform-" + p + " { display:none } "; } } $("#dynamicStylesheet").text(styles); } /* function setVersion(version) { createCookie("version", version); } */ $(document).ready(function(){ $("#nav").html(navContent); var treeState = readCookie("treeState"); $("#nav .expando").each(function(i, e){ $("i", e).first().addClass("fa-arrow-circle-right").removeClass("fa-arrow-circle-down"); }); $(".treeLink").each(function() { this.href = this.href.replace("::rootPath::", dox.rootPath); }); if (treeState != null) { var states = JSON.parse(treeState); $("#nav .expando").each(function(i, e){ if (states[i]) { $(e).addClass("expanded"); $("i", e).first().removeClass("fa-arrow-circle-right").addClass("fa-arrow-circle-down"); } }); } $("head").append(""); setPlatform(readCookie("platform") == null ? "all" : readCookie("platform")); //setVersion(readCookie("version") == null ? "3_0" : readCookie("version")); var searchBox = $("#search"); searchBox.on("input", function(e){ searchQuery(e.target.value); }); $(window).keydown(function(e){ if (searchBox.is(":focus")) { return true; } else if (e.key === "/" || e.keyCode == 191 /* slash */) { searchBox.focus(); return false; } else if (!e.ctrlKey && !e.metaKey && ( // e.key is only available in newer browsers. On older // browsers, we use an ugly blacklist of well-known // non-printable keyCodes, and assume everything else is // printable. (typeof e.key == "string" && e.key.length == 1 && e.key != " ") || (typeof e.key == "undefined" && [8, 9, 13, 16, 17, 32, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 91, 92, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 144, 145].indexOf(e.keyCode) >= 0))) { searchBox.focus(); return true; } else { return true; } }); searchBox.keydown(function(e){ if (e.keyCode == 27 /* Esc */) { this.blur(); return false; } return true; }); $("#select-platform").selectpicker().on("change", function(e){ var value = $(":selected", this).val(); setPlatform(value); }); $("#nav a").each(function () { if (this.href == location.href) { $(this.parentElement).addClass("active"); } }); $("a.expand-button").click(function (e) { var container = $(this).parent().next(); container.toggle(); $("i", this).removeClass("fa-arrow-circle-down") .removeClass("fa-arrow-circle-right") .addClass(container.is(":visible") ? "fa-arrow-circle-down" : "fa-arrow-circle-right"); return false; }); // Because there is no CSS parent selector $("code.prettyprint").parents("pre").addClass("example"); }); function searchQuery(query) { $("#searchForm").removeAttr("action"); query = query.replace(/[&<>"']/g, ""); if (!query || query.length<2) { $("#nav").removeClass("searching"); $("#nav li").each(function(index, element){ var e = $(element); e.css("display", ""); }); $("#nav ul:first-child").css("display", "block"); $("#search-results-list").css("display", "none"); return; } var queryParts = query.toLowerCase().split(" "); var listItems = []; var bestMatch = 200; $("#nav").addClass("searching"); $("#nav ul:first-child").css("display","none"); $("#nav li").each(function(index, element) { var e = $(element); if (!e.hasClass("expando")) { var content = e.attr("data_path"); var score = searchMatch(content, queryParts); if (score >= 0) { if (score < bestMatch) { var url = dox.rootPath + e.attr("data_path").split(".").join("/") + ".html"; $("#searchForm").attr("action", url); // best match will be form action bestMatch = score; } var elLink = $("a", element); // highlight matched parts var elLinkContent = elLink.text().replace(new RegExp("(" + queryParts.join("|").split(".").join("|") + ")", "ig"), "$1"); var liStyle = (score == 0) ? ("font-weight:bold") : ""; listItems.push({score: score, item: "
  • " + elLinkContent + "
  • "}); } } }); if ($("#search-results-list").length == 0) { // append to nav $("#nav").parent().append(""); } listItems.sort(function(x, y) { return x.score - y.score; }); // put in order $("#search-results-list").css("display","block").html(listItems.map(function(x) { return x.item; }).join("")); } function match(textParts, query) { var queryParts = query.split("."); if (queryParts.length == 1) { var queryPart = queryParts[0]; for (var i = 0; i < textParts.length; ++i) { var textPart = textParts[i]; if (textPart.indexOf(queryPart) > -1) { // We don't want to match the same part twice, so let's remove it textParts[i] = textParts[i].split(queryPart).join(""); return textPart.length - queryPart.length; } } } else { var offset = -1; outer: while (true) { ++offset; if (queryParts.length + offset > textParts.length) { return -1; } var scoreSum = 0; for (var i = 0; i < queryParts.length; ++i) { var queryPart = queryParts[i]; var textPart = textParts[i + offset]; var index = textPart.indexOf(queryPart); if (index != 0) { continue outer; } scoreSum += textPart.length - queryPart.length; } return scoreSum; } } } function searchMatch(text, queryParts) { text = text.toLowerCase(); var textParts = text.split("."); var scoreSum = 0; for (var i = 0; i < queryParts.length; ++i) { var score = match(textParts, queryParts[i]); if (score == -1) { return -1; } scoreSum += score + text.length; } return scoreSum; } ================================================ FILE: assets/docs-theme/templates/package_description.mtt ================================================

    ::api.currentPageName:: version ::api.getValue('version')::

    ::api.getValue("description")::

    ================================================ FILE: assets/docs-theme/templates/topbar.mtt ================================================ ================================================ FILE: dependencies/extension-api/build.gradle ================================================ buildscript { repositories { mavenCentral() google() } dependencies { classpath 'com.android.tools.build:gradle:::ANDROID_GRADLE_PLUGIN::' } } apply plugin: 'com.android.library' android { namespace 'org.haxe.extension' compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION) buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION defaultConfig { minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION) targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION) } } ================================================ FILE: dependencies/extension-api/src/main/AndroidManifest.xml ================================================ ================================================ FILE: dependencies/extension-api/src/main/java/org/haxe/HXCPP.java ================================================ package org.haxe; // Wrapper for native library public class HXCPP { private static boolean mInit = false; public static native void main (); public static void run (String inClassName) { System.loadLibrary (inClassName); if (!mInit) { mInit = true; main (); } } } ================================================ FILE: dependencies/extension-api/src/main/java/org/haxe/extension/Extension.java ================================================ package org.haxe.extension; import android.app.Activity; import android.content.res.AssetManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.View; public class Extension { public static AssetManager assetManager; public static Handler callbackHandler; public static Activity mainActivity; public static Context mainContext; public static View mainView; public static String packageName; /** * Called when an activity you launched exits, giving you the requestCode * you started it with, the resultCode it returned, and any additional data * from it. */ public boolean onActivityResult (int requestCode, int resultCode, Intent data) { return true; } public boolean onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { return true; } public boolean onBackPressed () { return true; } /** * Called when the activity is starting. */ public void onCreate (Bundle savedInstanceState) { } /** * Perform any final cleanup before an activity is destroyed. */ public void onDestroy () { } /** * Called when the overall system is running low on memory, * and actively running processes should trim their memory usage. * This is a backwards compatibility method as it is called at the same time as * onTrimMemory(TRIM_MEMORY_COMPLETE). */ public void onLowMemory () { } /** * Called when the a new Intent is received */ public void onNewIntent (Intent intent) { } /** * Called as part of the activity lifecycle when an activity is going into * the background, but has not (yet) been killed. */ public void onPause () { } /** * Called after {@link #onStop} when the current activity is being * re-displayed to the user (the user has navigated back to it). */ public void onRestart () { } /** * Called after {@link #onRestart}, or {@link #onPause}, for your activity * to start interacting with the user. */ public void onResume () { } /** * Called after onStart() when the activity is being re-initialized from * a previously saved state. */ public void onRestoreInstanceState (Bundle savedState) { } /** * Called to retrieve per-instance state from an activity before being * killed so that the state can be restored in onCreate */ public void onSaveInstanceState (Bundle outState) { } /** * Called after {@link #onCreate} — or after {@link #onRestart} when * the activity had been stopped, but is now again being displayed to the * user. */ public void onStart () { } /** * Called when the activity is no longer visible to the user, because * another activity has been resumed and is covering this one. */ public void onStop () { } /** * Called when the operating system has determined that it is a * good time for a process to trim unneeded memory from its process. * * See http://developer.android.com/reference/android/content/ComponentCallbacks2.html for the level explanation. */ public void onTrimMemory (int level) { } } ================================================ FILE: dependencies/extension-api/src/main/java/org/haxe/lime/HaxeObject.java ================================================ package org.haxe.lime; import android.util.Log; import java.lang.Boolean; import java.lang.Byte; import java.lang.Character; import java.lang.Short; import java.lang.Integer; import java.lang.Long; import java.lang.Float; import java.lang.Double; /** A placeholder for an object created in Haxe. You can call the object's functions using `callN("functionName")`, where N is the number of arguments. Caution: the Haxe function will run on whichever thread you call it from. Java code typically runs on the UI thread, not Haxe's main thread, which can easily cause thread-related errors. This cannot be easily remedied using Java code, but is fixable in Haxe using `lime.system.JNI.JNISafety`. Sample usage: ```haxe // MyHaxeObject.hx import lime.system.JNI; class MyHaxeObject implements JNISafety { @:runOnMainThread public function onActivityResult(requestCode:Int, resultCode:Int):Void { // Insert code to process the result. This code will safely run on the // main Haxe thread. } } ``` ```java // MyJavaTool.java import android.content.Intent; import org.haxe.extension.Extension; import org.haxe.lime.HaxeObject; public class MyJavaTool extends Extension { private static var haxeObject:HaxeObject; public static function registerHaxeObject(object:HaxeObject) { haxeObject = object; } // onActivityResult() always runs on the Android UI thread. @Override public boolean onActivityResult(int requestCode, int resultCode, Intent data) { haxeObject.call2(requestCode, resultCode); return true; } } ``` **/ public class HaxeObject { public long __haxeHandle; public HaxeObject(long value) { __haxeHandle = value; } public static HaxeObject create(long inHandle) { if (inHandle == 0) return null; return new HaxeObject(inHandle); } protected void finalize() throws Throwable { try { Lime.releaseReference(__haxeHandle); } finally { super.finalize(); } } public Object call0(String function) { //Log.e("HaxeObject","Calling obj0" + function + "()" ); return Lime.callObjectFunction(__haxeHandle,function,new Object[0]); } public Object call1(String function,Object arg0) { Object[] args = new Object[1]; args[0] = arg0; //Log.e("HaxeObject","Calling obj1 " + function + "(" + arg0 + ")" ); return Lime.callObjectFunction(__haxeHandle,function,args); } public Object call2(String function,Object arg0,Object arg1) { Object[] args = new Object[2]; args[0] = arg0; args[1] = arg1; //Log.e("HaxeObject","Calling obj2 " + function + "(" + arg0 + "," + arg1 + ")" ); return Lime.callObjectFunction(__haxeHandle,function,args); } public Object call3(String function,Object arg0,Object arg1,Object arg2) { Object[] args = new Object[3]; args[0] = arg0; args[1] = arg1; args[2] = arg2; //Log.e("HaxeObject","Calling obj3 " + function + "(" + arg0 + "," + arg1 + "," + arg2 + ")" ); return Lime.callObjectFunction(__haxeHandle,function,args); } public Object call4(String function,Object arg0,Object arg1,Object arg2,Object arg3) { Object[] args = new Object[4]; args[0] = arg0; args[1] = arg1; args[2] = arg2; args[3] = arg3; //Log.e("HaxeObject","Calling obj4 " + function + "(" + arg0 + "," + arg1 + "," + arg2 + "," + arg3 + ")" ); return Lime.callObjectFunction(__haxeHandle,function,args); } public double callD0(String function) { //Log.e("HaxeObject","Calling objD0 " + function + "()" ); return Lime.callNumericFunction(__haxeHandle,function,new Object[0]); } public double callD1(String function,Object arg0) { Object[] args = new Object[1]; args[0] = arg0; //Log.e("HaxeObject","Calling D1 " + function + "(" + arg0 + ")" ); return Lime.callNumericFunction(__haxeHandle,function,args); } public double callD2(String function,Object arg0,Object arg1) { Object[] args = new Object[2]; args[0] = arg0; args[1] = arg1; //Log.e("HaxeObject","Calling D2 " + function + "(" + arg0 + "," + arg1 + ")" ); return Lime.callNumericFunction(__haxeHandle,function,args); } public double callD3(String function,Object arg0,Object arg1,Object arg2) { Object[] args = new Object[2]; args[0] = arg0; args[1] = arg1; args[2] = arg2; //Log.e("HaxeObject","Calling D3 " + function + "(" + arg0 + "," + arg1 + "," + arg2 + ")" ); return Lime.callNumericFunction(__haxeHandle,function,args); } public Object call(String function, Object[] args) { return Lime.callObjectFunction(__haxeHandle,function,args); } public double callD(String function, Object[] args) { return Lime.callNumericFunction(__haxeHandle,function,args); } } ================================================ FILE: dependencies/extension-api/src/main/java/org/haxe/lime/Lime.java ================================================ package org.haxe.lime; public class Lime { static { System.loadLibrary("lime"); } public static native void onCallback (long inHandle); public static native Object callObjectFunction (long inHandle, String function, Object[] args); public static native double callNumericFunction (long inHandle, String function, Object[] args); public static native void releaseReference (long inHandle); } ================================================ FILE: dependencies/extension-api/src/main/java/org/haxe/lime/Value.java ================================================ package org.haxe.lime; public class Value { double mValue; public Value (double inValue) { mValue = inValue; } public Value (int inValue) { mValue = inValue; } public Value (short inValue) { mValue = inValue; } public Value (char inValue) { mValue = inValue; } public Value (boolean inValue) { mValue = inValue ? 1.0 : 0.0; } public double getDouble () { return mValue; } } ================================================ FILE: dependencies/lzma_worker-min.js ================================================ var e=function(){"use strict";function r(e,r){postMessage({action:xt,cbn:r,result:e})}function t(e){var r=[];return r[e-1]=void 0,r}function o(e,r){return i(e[0]+r[0],e[1]+r[1])}function n(e,r){return u(~~Math.max(Math.min(e[1]/Ot,2147483647),-2147483648)&~~Math.max(Math.min(r[1]/Ot,2147483647),-2147483648),c(e)&c(r))}function s(e,r){var t,o;return e[0]==r[0]&&e[1]==r[1]?0:(t=0>e[1],o=0>r[1],t&&!o?-1:!t&&o?1:h(e,r)[1]<0?-1:1)}function i(e,r){var t,o;for(r%=0x10000000000000000,e%=0x10000000000000000,t=r%Ot,o=Math.floor(e/Ot)*Ot,r=r-t+o,e=e-o+t;0>e;)e+=Ot,r-=Ot;for(;e>4294967295;)e-=Ot,r+=Ot;for(r%=0x10000000000000000;r>0x7fffffff00000000;)r-=0x10000000000000000;for(;-0x8000000000000000>r;)r+=0x10000000000000000;return[e,r]}function _(e,r){return e[0]==r[0]&&e[1]==r[1]}function a(e){return e>=0?[e,0]:[e+Ot,-Ot]}function c(e){return e[0]>=2147483648?~~Math.max(Math.min(e[0]-Ot,2147483647),-2147483648):~~Math.max(Math.min(e[0],2147483647),-2147483648)}function u(e,r){var t,o;return t=e*Ot,o=r,0>r&&(o+=Ot),[o,t]}function f(e){return 30>=e?1<e[1])throw Error("Neg");return s=f(r),o=e[1]*s%0x10000000000000000,n=e[0]*s,t=n-n%Ot,o+=t,n-=t,o>=0x8000000000000000&&(o-=0x10000000000000000),[n,o]}function d(e,r){var t;return r&=63,t=f(r),i(Math.floor(e[0]/t),e[1]/t)}function p(e,r){var t;return r&=63,t=d(e,r),0>e[1]&&(t=o(t,m([2,0],63-r))),t}function h(e,r){return i(e[0]-r[0],e[1]-r[1])}function P(e,r){return e.Mc=r,e.Lc=0,e.Yb=r.length,e}function l(e){return e.Lc>=e.Yb?-1:255&e.Mc[e.Lc++]}function v(e,r,t,o){return e.Lc>=e.Yb?-1:(o=Math.min(o,e.Yb-e.Lc),M(e.Mc,e.Lc,r,t,o),e.Lc+=o,o)}function B(e){return e.Mc=t(32),e.Yb=0,e}function S(e){var r=e.Mc;return r.length=e.Yb,r}function g(e,r){e.Mc[e.Yb++]=r<<24>>24}function k(e,r,t,o){M(r,t,e.Mc,e.Yb,o),e.Yb+=o}function R(e,r,t,o,n){var s;for(s=r;t>s;++s)o[n++]=e.charCodeAt(s)}function M(e,r,t,o,n){for(var s=0;n>s;++s)t[o+s]=e[r+s]}function D(e,r){Ar(r,1<a;a+=8)g(o,255&c(d(n,a)));r.yb=(_.W=0,_.oc=t,_.pc=0,Mr(_),_.d.Ab=o,Fr(_),wr(_),br(_),_.$.rb=_.n+1-2,Qr(_.$,1<<_.Y),_.i.rb=_.n+1-2,Qr(_.i,1<<_.Y),void(_.g=Gt),X({},_))}function w(e,r,t){return e.Nb=B({}),b(e,P({},r),e.Nb,a(r.length),t),e}function E(e,r,t){var o,n,s,i,_="",c=[];for(n=0;5>n;++n){if(s=l(r),-1==s)throw Error("truncated input");c[n]=s<<24>>24}if(o=ir({}),!ar(o,c))throw Error("corrupted input");for(n=0;64>n;n+=8){if(s=l(r),-1==s)throw Error("truncated input");s=s.toString(16),1==s.length&&(s="0"+s),_=s+""+_}/^0+$|^f+$/i.test(_)?e.Tb=At:(i=parseInt(_,16),e.Tb=i>4294967295?At:a(i)),e.yb=nr(o,r,t,e.Tb)}function L(e,r){return e.Nb=B({}),E(e,P({},r),e.Nb),e}function y(e,r,o,n){var s;e.Bc=r,e._b=o,s=r+o+n,(null==e.c||e.Kb!=s)&&(e.c=null,e.Kb=s,e.c=t(e.Kb)),e.H=e.Kb-o}function C(e,r){return e.c[e.f+e.o+r]}function z(e,r,t,o){var n,s;for(e.T&&e.o+r+o>e.h&&(o=e.h-(e.o+r)),++t,s=e.f+e.o+r,n=0;o>n&&e.c[s+n]==e.c[s+n-t];++n);return n}function F(e){return e.h-e.o}function I(e){var r,t,o;for(o=e.f+e.o-e.Bc,o>0&&--o,t=e.f+e.h-o,r=0;t>r;++r)e.c[r]=e.c[o+r];e.f-=o}function x(e){var r;++e.o,e.o>e.zb&&(r=e.f+e.o,r>e.H&&I(e),N(e))}function N(e){var r,t,o;if(!e.T)for(;;){if(o=-e.f+e.Kb-e.h,!o)return;if(r=v(e.cc,e.c,e.f+e.h,o),-1==r)return e.zb=e.h,t=e.f+e.zb,t>e.H&&(e.zb=e.H-e.f),void(e.T=1);e.h+=r,e.h>=e.o+e._b&&(e.zb=e.h-e._b)}}function O(e,r){e.f+=r,e.zb-=r,e.o-=r,e.h-=r}function A(e,r,o,n,s){var i,_,a;1073741567>r&&(e.Fc=16+(n>>1),a=~~((r+o+n+s)/2)+256,y(e,r+o,n+s,a),e.ob=n,i=r+1,e.p!=i&&(e.L=t(2*(e.p=i))),_=65536,e.qb&&(_=r-1,_|=_>>1,_|=_>>2,_|=_>>4,_|=_>>8,_>>=1,_|=65535,_>16777216&&(_>>=1),e.Ec=_,++_,_+=e.R),_!=e.rc&&(e.ub=t(e.rc=_)))}function H(e,r){var t,o,n,s,i,_,a,c,u,f,m,d,p,h,P,l,v,B,S,g,k;if(e.h>=e.o+e.ob)h=e.ob;else if(h=e.h-e.o,e.xb>h)return W(e),0;for(v=0,P=e.o>e.p?e.o-e.p:0,o=e.f+e.o,l=1,c=0,u=0,e.qb?(k=Tt[255&e.c[o]]^255&e.c[o+1],c=1023&k,k^=(255&e.c[o+2])<<8,u=65535&k,f=(k^Tt[255&e.c[o+3]]<<5)&e.Ec):f=255&e.c[o]^(255&e.c[o+1])<<8,n=e.ub[e.R+f]||0,e.qb&&(s=e.ub[c]||0,i=e.ub[1024+u]||0,e.ub[c]=e.o,e.ub[1024+u]=e.o,s>P&&e.c[e.f+s]==e.c[o]&&(r[v++]=l=2,r[v++]=e.o-s-1),i>P&&e.c[e.f+i]==e.c[o]&&(i==s&&(v-=2),r[v++]=l=3,r[v++]=e.o-i-1,s=i),0!=v&&s==n&&(v-=2,l=1)),e.ub[e.R+f]=e.o,S=(e.k<<1)+1,g=e.k<<1,d=p=e.w,0!=e.w&&n>P&&e.c[e.f+n+e.w]!=e.c[o+e.w]&&(r[v++]=l=e.w,r[v++]=e.o-n-1),t=e.Fc;;){if(P>=n||0==t--){e.L[S]=e.L[g]=0;break}if(a=e.o-n,_=(e.k>=a?e.k-a:e.k-a+e.p)<<1,B=e.f+n,m=p>d?d:p,e.c[B+m]==e.c[o+m]){for(;++m!=h&&e.c[B+m]==e.c[o+m];);if(m>l&&(r[v++]=l=m,r[v++]=a-1,m==h)){e.L[g]=e.L[_],e.L[S]=e.L[_+1];break}}(255&e.c[o+m])>(255&e.c[B+m])?(e.L[g]=n,g=_+1,n=e.L[g],p=m):(e.L[S]=n,S=_,n=e.L[S],d=m)}return W(e),v}function G(e){e.f=0,e.o=0,e.h=0,e.T=0,N(e),e.k=0,O(e,-1)}function W(e){var r;++e.k>=e.p&&(e.k=0),x(e),1073741823==e.o&&(r=e.o-e.p,T(e.L,2*e.p,r),T(e.ub,e.rc,r),O(e,r))}function T(e,r,t){var o,n;for(o=0;r>o;++o)n=e[o]||0,t>=n?n=0:n-=t,e[o]=n}function Z(e,r){e.qb=r>2,e.qb?(e.w=0,e.xb=4,e.R=66560):(e.w=2,e.xb=3,e.R=0)}function Y(e,r){var t,o,n,s,i,_,a,c,u,f,m,d,p,h,P,l,v;do{if(e.h>=e.o+e.ob)d=e.ob;else if(d=e.h-e.o,e.xb>d){W(e);continue}for(p=e.o>e.p?e.o-e.p:0,o=e.f+e.o,e.qb?(v=Tt[255&e.c[o]]^255&e.c[o+1],_=1023&v,e.ub[_]=e.o,v^=(255&e.c[o+2])<<8,a=65535&v,e.ub[1024+a]=e.o,c=(v^Tt[255&e.c[o+3]]<<5)&e.Ec):c=255&e.c[o]^(255&e.c[o+1])<<8,n=e.ub[e.R+c],e.ub[e.R+c]=e.o,P=(e.k<<1)+1,l=e.k<<1,f=m=e.w,t=e.Fc;;){if(p>=n||0==t--){e.L[P]=e.L[l]=0;break}if(i=e.o-n,s=(e.k>=i?e.k-i:e.k-i+e.p)<<1,h=e.f+n,u=m>f?f:m,e.c[h+u]==e.c[o+u]){for(;++u!=d&&e.c[h+u]==e.c[o+u];);if(u==d){e.L[l]=e.L[s],e.L[P]=e.L[s+1];break}}(255&e.c[o+u])>(255&e.c[h+u])?(e.L[l]=n,l=s+1,n=e.L[l],m=u):(e.L[P]=n,P=s,n=e.L[P],f=u)}W(e)}while(0!=--r)}function V(e,r,t){var o=e.o-r-1;for(0>o&&(o+=e.M);0!=t;--t)o>=e.M&&(o=0),e.Lb[e.o++]=e.Lb[o++],e.o>=e.M&&$(e)}function j(e,r){(null==e.Lb||e.M!=r)&&(e.Lb=t(r)),e.M=r,e.o=0,e.h=0}function $(e){var r=e.o-e.h;r&&(k(e.cc,e.Lb,e.h,r),e.o>=e.M&&(e.o=0),e.h=e.o)}function K(e,r){var t=e.o-r-1;return 0>t&&(t+=e.M),e.Lb[t]}function q(e,r){e.Lb[e.o++]=r,e.o>=e.M&&$(e)}function J(e){$(e),e.cc=null}function Q(e){return e-=2,4>e?e:3}function U(e){return 4>e?0:10>e?e-3:e-6}function X(e,r){return e.cb=r,e.Z=null,e.zc=1,e}function er(e,r){return e.Z=r,e.cb=null,e.zc=1,e}function rr(e){if(!e.zc)throw Error("bad state");return e.cb?or(e):tr(e),e.zc}function tr(e){var r=sr(e.Z);if(-1==r)throw Error("corrupted input");e.Pb=At,e.Pc=e.Z.g,(r||s(e.Z.Nc,Gt)>=0&&s(e.Z.g,e.Z.Nc)>=0)&&($(e.Z.B),J(e.Z.B),e.Z.e.Ab=null,e.zc=0)}function or(e){Rr(e.cb,e.cb.Xb,e.cb.uc,e.cb.Kc),e.Pb=e.cb.Xb[0],e.cb.Kc[0]&&(Or(e.cb),e.zc=0)}function nr(e,r,t,o){return e.e.Ab=r,J(e.B),e.B.cc=t,_r(e),e.U=0,e.ib=0,e.Jc=0,e.Ic=0,e.Qc=0,e.Nc=o,e.g=Gt,e.jc=0,er({},e)}function sr(e){var r,t,n,i,_,u;if(u=c(e.g)&e.Dc,vt(e.e,e.Gb,(e.U<<4)+u)){if(vt(e.e,e.Zb,e.U))n=0,vt(e.e,e.Cb,e.U)?(vt(e.e,e.Db,e.U)?(vt(e.e,e.Eb,e.U)?(t=e.Qc,e.Qc=e.Ic):t=e.Ic,e.Ic=e.Jc):t=e.Jc,e.Jc=e.ib,e.ib=t):vt(e.e,e.pb,(e.U<<4)+u)||(e.U=7>e.U?9:11,n=1),n||(n=mr(e.sb,e.e,u)+2,e.U=7>e.U?8:11);else if(e.Qc=e.Ic,e.Ic=e.Jc,e.Jc=e.ib,n=2+mr(e.Rb,e.e,u),e.U=7>e.U?7:10,_=at(e.kb[Q(n)],e.e),_>=4){if(i=(_>>1)-1,e.ib=(2|1&_)<_)e.ib+=ut(e.kc,e.ib-_-1,e.e,i);else if(e.ib+=Bt(e.e,i-4)<<4,e.ib+=ct(e.Fb,e.e),0>e.ib)return-1==e.ib?1:-1}else e.ib=_;if(s(a(e.ib),e.g)>=0||e.ib>=e.nb)return-1;V(e.B,e.ib,n),e.g=o(e.g,a(n)),e.jc=K(e.B,0)}else r=Pr(e.gb,c(e.g),e.jc),e.jc=7>e.U?vr(r,e.e):Br(r,e.e,K(e.B,e.ib)),q(e.B,e.jc),e.U=U(e.U),e.g=o(e.g,Wt);return 0}function ir(e){e.B={},e.e={},e.Gb=t(192),e.Zb=t(12),e.Cb=t(12),e.Db=t(12),e.Eb=t(12),e.pb=t(192),e.kb=t(4),e.kc=t(114),e.Fb=_t({},4),e.Rb=dr({}),e.sb=dr({}),e.gb={};for(var r=0;4>r;++r)e.kb[r]=_t({},6);return e}function _r(e){e.B.h=0,e.B.o=0,gt(e.Gb),gt(e.pb),gt(e.Zb),gt(e.Cb),gt(e.Db),gt(e.Eb),gt(e.kc),lr(e.gb);for(var r=0;4>r;++r)gt(e.kb[r].G);pr(e.Rb),pr(e.sb),gt(e.Fb.G),St(e.e)}function ar(e,r){var t,o,n,s,i,_,a;if(5>r.length)return 0;for(a=255&r[0],n=a%9,_=~~(a/9),s=_%5,i=~~(_/5),t=0,o=0;4>o;++o)t+=(255&r[1+o])<<8*o;return t>99999999||!ur(e,n,s,i)?0:cr(e,t)}function cr(e,r){return 0>r?0:(e.Ob!=r&&(e.Ob=r,e.nb=Math.max(e.Ob,1),j(e.B,Math.max(e.nb,4096))),1)}function ur(e,r,t,o){if(r>8||t>4||o>4)return 0;hr(e.gb,t,r);var n=1<e.O;++e.O)e.ec[e.O]=_t({},3),e.hc[e.O]=_t({},3)}function mr(e,r,t){if(!vt(r,e.wc,0))return at(e.ec[t],r);var o=8;return o+=vt(r,e.wc,1)?8+at(e.tc,r):at(e.hc[t],r)}function dr(e){return e.wc=t(2),e.ec=t(16),e.hc=t(16),e.tc=_t({},8),e.O=0,e}function pr(e){gt(e.wc);for(var r=0;e.O>r;++r)gt(e.ec[r].G),gt(e.hc[r].G);gt(e.tc.G)}function hr(e,r,o){var n,s;if(null==e.V||e.u!=o||e.I!=r)for(e.I=r,e.qc=(1<n;++n)e.V[n]=Sr({})}function Pr(e,r,t){return e.V[((r&e.qc)<>>8-e.u)]}function lr(e){var r,t;for(t=1<r;++r)gt(e.V[r].Ib)}function vr(e,r){var t=1;do t=t<<1|vt(r,e.Ib,t);while(256>t);return t<<24>>24}function Br(e,r,t){var o,n,s=1;do if(n=t>>7&1,t<<=1,o=vt(r,e.Ib,(1+n<<8)+s),s=s<<1|o,n!=o){for(;256>s;)s=s<<1|vt(r,e.Ib,s);break}while(256>s);return s<<24>>24}function Sr(e){return e.Ib=t(768),e}function gr(e,r){var t,o,n,s;e.jb=r,n=e.a[r].r,o=e.a[r].j;do e.a[r].t&&(st(e.a[n]),e.a[n].r=n-1,e.a[r].Ac&&(e.a[n-1].t=0,e.a[n-1].r=e.a[r].r2,e.a[n-1].j=e.a[r].j2)),s=n,t=o,o=e.a[s].j,n=e.a[s].r,e.a[s].j=t,e.a[s].r=r,r=s;while(r>0);return e.mb=e.a[0].j,e.q=e.a[0].r}function kr(e){e.l=0,e.J=0;for(var r=0;4>r;++r)e.v[r]=0}function Rr(e,r,t,n){var i,u,f,m,d,p,P,l,v,B,S,g,k,R,M;if(r[0]=Gt,t[0]=Gt,n[0]=1,e.oc&&(e.b.cc=e.oc,G(e.b),e.W=1,e.oc=null),!e.pc){if(e.pc=1,R=e.g,_(e.g,Gt)){if(!F(e.b))return void Er(e,c(e.g));xr(e),k=c(e.g)&e.y,kt(e.d,e.C,(e.l<<4)+k,0),e.l=U(e.l),f=C(e.b,-e.s),rt(Xr(e.A,c(e.g),e.J),e.d,f),e.J=f,--e.s,e.g=o(e.g,Wt)}if(!F(e.b))return void Er(e,c(e.g));for(;;){if(P=Lr(e,c(e.g)),B=e.mb,k=c(e.g)&e.y,u=(e.l<<4)+k,1==P&&-1==B)kt(e.d,e.C,u,0),f=C(e.b,-e.s),M=Xr(e.A,c(e.g),e.J),7>e.l?rt(M,e.d,f):(v=C(e.b,-e.v[0]-1-e.s),tt(M,e.d,v,f)),e.J=f,e.l=U(e.l);else{if(kt(e.d,e.C,u,1),4>B){if(kt(e.d,e.bb,e.l,1),B?(kt(e.d,e.hb,e.l,1),1==B?kt(e.d,e.Ub,e.l,0):(kt(e.d,e.Ub,e.l,1),kt(e.d,e.vc,e.l,B-2))):(kt(e.d,e.hb,e.l,0),1==P?kt(e.d,e._,u,0):kt(e.d,e._,u,1)),1==P?e.l=7>e.l?9:11:(Kr(e.i,e.d,P-2,k),e.l=7>e.l?8:11),m=e.v[B],0!=B){for(p=B;p>=1;--p)e.v[p]=e.v[p-1];e.v[0]=m}}else{for(kt(e.d,e.bb,e.l,0),e.l=7>e.l?7:10,Kr(e.$,e.d,P-2,k),B-=4,g=Tr(B),l=Q(P),mt(e.K[l],e.d,g),g>=4&&(d=(g>>1)-1,i=(2|1&g)<g?Pt(e.Sb,i-g-1,e.d,d,S):(Rt(e.d,S>>4,d-4),pt(e.S,e.d,15&S),++e.Qb)),m=B,p=3;p>=1;--p)e.v[p]=e.v[p-1];e.v[0]=m,++e.Mb}e.J=C(e.b,P-1-e.s)}if(e.s-=P,e.g=o(e.g,a(P)),!e.s){if(e.Mb>=128&&wr(e),e.Qb>=16&&br(e),r[0]=e.g,t[0]=Mt(e.d),!F(e.b))return void Er(e,c(e.g));if(s(h(e.g,R),[4096,0])>=0)return e.pc=0,void(n[0]=0)}}}}function Mr(e){var r,t;e.b||(r={},t=4,e.X||(t=2),Z(r,t),e.b=r),Ur(e.A,e.eb,e.fb),(e.ab!=e.wb||e.Hb!=e.n)&&(A(e.b,e.ab,4096,e.n,274),e.wb=e.ab,e.Hb=e.n)}function Dr(e){var r;for(e.v=t(4),e.a=[],e.d={},e.C=t(192),e.bb=t(12),e.hb=t(12),e.Ub=t(12),e.vc=t(12),e._=t(192),e.K=[],e.Sb=t(114),e.S=ft({},4),e.$=qr({}),e.i=qr({}),e.A={},e.m=[],e.P=[],e.lb=[],e.nc=t(16),e.x=t(4),e.Q=t(4),e.Xb=[Gt],e.uc=[Gt],e.Kc=[0],e.fc=t(5),e.yc=t(128),e.vb=0,e.X=1,e.D=0,e.Hb=-1,e.mb=0,r=0;4096>r;++r)e.a[r]={};for(r=0;4>r;++r)e.K[r]=ft({},6);return e}function br(e){for(var r=0;16>r;++r)e.nc[r]=ht(e.S,r);e.Qb=0}function wr(e){var r,t,o,n,s,i,_,a;for(n=4;128>n;++n)i=Tr(n),o=(i>>1)-1,r=(2|1&i)<s;++s){for(t=e.K[s],_=s<<6,i=0;e.$b>i;++i)e.P[_+i]=dt(t,i);for(i=14;e.$b>i;++i)e.P[_+i]+=(i>>1)-1-4<<6;for(a=128*s,n=0;4>n;++n)e.lb[a+n]=e.P[_+n];for(;128>n;++n)e.lb[a+n]=e.P[_+Tr(n)]+e.yc[n]}e.Mb=0}function Er(e,r){Nr(e),Wr(e,r&e.y);for(var t=0;5>t;++t)bt(e.d)}function Lr(e,r){var t,o,n,s,i,_,a,c,u,f,m,d,p,h,P,l,v,B,S,g,k,R,M,D,b,w,E,L,y,I,x,N,O,A,H,G,W,T,Z,Y,V,j,$,K,q,J,Q,X,er,rr;if(e.jb!=e.q)return p=e.a[e.q].r-e.q,e.mb=e.a[e.q].j,e.q=e.a[e.q].r,p;if(e.q=e.jb=0,e.N?(d=e.vb,e.N=0):d=xr(e),E=e.D,b=F(e.b)+1,2>b)return e.mb=-1,1;for(b>273&&(b=273),Y=0,u=0;4>u;++u)e.x[u]=e.v[u],e.Q[u]=z(e.b,-1,e.x[u],273),e.Q[u]>e.Q[Y]&&(Y=u);if(e.Q[Y]>=e.n)return e.mb=Y,p=e.Q[Y],Ir(e,p-1),p;if(d>=e.n)return e.mb=e.m[E-1]+4,Ir(e,d-1),d;if(a=C(e.b,-1),v=C(e.b,-e.v[0]-1-1),2>d&&a!=v&&2>e.Q[Y])return e.mb=-1,1;if(e.a[0].Hc=e.l,A=r&e.y,e.a[1].z=Yt[e.C[(e.l<<4)+A]>>>2]+nt(Xr(e.A,r,e.J),e.l>=7,v,a),st(e.a[1]),B=Yt[2048-e.C[(e.l<<4)+A]>>>2],Z=B+Yt[2048-e.bb[e.l]>>>2],v==a&&(V=Z+zr(e,e.l,A),e.a[1].z>V&&(e.a[1].z=V,it(e.a[1]))),m=d>=e.Q[Y]?d:e.Q[Y],2>m)return e.mb=e.a[1].j,1;e.a[1].r=0,e.a[0].bc=e.x[0],e.a[0].ac=e.x[1],e.a[0].dc=e.x[2],e.a[0].lc=e.x[3],f=m;do e.a[f--].z=268435455;while(f>=2);for(u=0;4>u;++u)if(T=e.Q[u],!(2>T)){G=Z+Cr(e,u,e.l,A);do s=G+Jr(e.i,T-2,A),x=e.a[T],x.z>s&&(x.z=s,x.r=0,x.j=u,x.t=0);while(--T>=2)}if(D=B+Yt[e.bb[e.l]>>>2],f=e.Q[0]>=2?e.Q[0]+1:2,d>=f){for(L=0;f>e.m[L];)L+=2;for(;c=e.m[L+1],s=D+yr(e,c,f,A),x=e.a[f],x.z>s&&(x.z=s,x.r=0,x.j=c+4,x.t=0),f!=e.m[L]||(L+=2,L!=E);++f);}for(t=0;;){if(++t,t==m)return gr(e,t);if(S=xr(e),E=e.D,S>=e.n)return e.vb=S,e.N=1,gr(e,t);if(++r,O=e.a[t].r,e.a[t].t?(--O,e.a[t].Ac?($=e.a[e.a[t].r2].Hc,$=4>e.a[t].j2?7>$?8:11:7>$?7:10):$=e.a[O].Hc,$=U($)):$=e.a[O].Hc,O==t-1?$=e.a[t].j?U($):7>$?9:11:(e.a[t].t&&e.a[t].Ac?(O=e.a[t].r2,N=e.a[t].j2,$=7>$?8:11):(N=e.a[t].j,$=4>N?7>$?8:11:7>$?7:10),I=e.a[O],4>N?N?1==N?(e.x[0]=I.ac,e.x[1]=I.bc,e.x[2]=I.dc,e.x[3]=I.lc):2==N?(e.x[0]=I.dc,e.x[1]=I.bc,e.x[2]=I.ac,e.x[3]=I.lc):(e.x[0]=I.lc,e.x[1]=I.bc,e.x[2]=I.ac,e.x[3]=I.dc):(e.x[0]=I.bc,e.x[1]=I.ac,e.x[2]=I.dc,e.x[3]=I.lc):(e.x[0]=N-4,e.x[1]=I.bc,e.x[2]=I.ac,e.x[3]=I.dc)),e.a[t].Hc=$,e.a[t].bc=e.x[0],e.a[t].ac=e.x[1],e.a[t].dc=e.x[2],e.a[t].lc=e.x[3],_=e.a[t].z,a=C(e.b,-1),v=C(e.b,-e.x[0]-1-1),A=r&e.y,o=_+Yt[e.C[($<<4)+A]>>>2]+nt(Xr(e.A,r,C(e.b,-2)),$>=7,v,a),R=e.a[t+1],g=0,R.z>o&&(R.z=o,R.r=t,R.j=-1,R.t=0,g=1),B=_+Yt[2048-e.C[($<<4)+A]>>>2],Z=B+Yt[2048-e.bb[$]>>>2],v!=a||t>R.r&&!R.j||(V=Z+(Yt[e.hb[$]>>>2]+Yt[e._[($<<4)+A]>>>2]),R.z>=V&&(R.z=V,R.r=t,R.j=0,R.t=0,g=1)),w=F(e.b)+1,w=w>4095-t?4095-t:w,b=w,!(2>b)){if(b>e.n&&(b=e.n),!g&&v!=a&&(q=Math.min(w-1,e.n),P=z(e.b,0,e.x[0],q),P>=2)){for(K=U($),H=r+1&e.y,M=o+Yt[2048-e.C[(K<<4)+H]>>>2]+Yt[2048-e.bb[K]>>>2],y=t+1+P;y>m;)e.a[++m].z=268435455;s=M+(J=Jr(e.i,P-2,H),J+Cr(e,0,K,H)),x=e.a[y],x.z>s&&(x.z=s,x.r=t+1,x.j=0,x.t=1,x.Ac=0)}for(j=2,W=0;4>W;++W)if(h=z(e.b,-1,e.x[W],b),!(2>h)){l=h;do{for(;t+h>m;)e.a[++m].z=268435455;s=Z+(Q=Jr(e.i,h-2,A),Q+Cr(e,W,$,A)),x=e.a[t+h],x.z>s&&(x.z=s,x.r=t,x.j=W,x.t=0)}while(--h>=2);if(h=l,W||(j=h+1),w>h&&(q=Math.min(w-1-h,e.n),P=z(e.b,h,e.x[W],q),P>=2)){for(K=7>$?8:11,H=r+h&e.y,n=Z+(X=Jr(e.i,h-2,A),X+Cr(e,W,$,A))+Yt[e.C[(K<<4)+H]>>>2]+nt(Xr(e.A,r+h,C(e.b,h-1-1)),1,C(e.b,h-1-(e.x[W]+1)),C(e.b,h-1)),K=U(K),H=r+h+1&e.y,k=n+Yt[2048-e.C[(K<<4)+H]>>>2],M=k+Yt[2048-e.bb[K]>>>2],y=h+1+P;t+y>m;)e.a[++m].z=268435455;s=M+(er=Jr(e.i,P-2,H),er+Cr(e,0,K,H)),x=e.a[t+y],x.z>s&&(x.z=s,x.r=t+h+1,x.j=0,x.t=1,x.Ac=1,x.r2=t,x.j2=W)}}if(S>b){for(S=b,E=0;S>e.m[E];E+=2);e.m[E]=S,E+=2}if(S>=j){for(D=B+Yt[e.bb[$]>>>2];t+S>m;)e.a[++m].z=268435455;for(L=0;j>e.m[L];)L+=2;for(h=j;;++h)if(i=e.m[L+1],s=D+yr(e,i,h,A),x=e.a[t+h],x.z>s&&(x.z=s,x.r=t,x.j=i+4,x.t=0),h==e.m[L]){if(w>h&&(q=Math.min(w-1-h,e.n),P=z(e.b,h,i,q),P>=2)){for(K=7>$?7:10,H=r+h&e.y,n=s+Yt[e.C[(K<<4)+H]>>>2]+nt(Xr(e.A,r+h,C(e.b,h-1-1)),1,C(e.b,h-(i+1)-1),C(e.b,h-1)),K=U(K),H=r+h+1&e.y,k=n+Yt[2048-e.C[(K<<4)+H]>>>2],M=k+Yt[2048-e.bb[K]>>>2],y=h+1+P;t+y>m;)e.a[++m].z=268435455;s=M+(rr=Jr(e.i,P-2,H),rr+Cr(e,0,K,H)),x=e.a[t+y],x.z>s&&(x.z=s,x.r=t+h+1,x.j=0,x.t=1,x.Ac=1,x.r2=t,x.j2=i+4)}if(L+=2,L==E)break}}}}}function yr(e,r,t,o){var n,s=Q(t);return n=128>r?e.lb[128*s+r]:e.P[(s<<6)+Zr(r)]+e.nc[15&r],n+Jr(e.$,t-2,o)}function Cr(e,r,t,o){var n;return r?(n=Yt[2048-e.hb[t]>>>2],1==r?n+=Yt[e.Ub[t]>>>2]:(n+=Yt[2048-e.Ub[t]>>>2],n+=wt(e.vc[t],r-2))):(n=Yt[e.hb[t]>>>2],n+=Yt[2048-e._[(t<<4)+o]>>>2]),n}function zr(e,r,t){return Yt[e.hb[r]>>>2]+Yt[e._[(r<<4)+t]>>>2]}function Fr(e){kr(e),Dt(e.d),gt(e.C),gt(e._),gt(e.bb),gt(e.hb),gt(e.Ub),gt(e.vc),gt(e.Sb),et(e.A);for(var r=0;4>r;++r)gt(e.K[r].G);jr(e.$,1<0&&(Y(e.b,r),e.s+=r)}function xr(e){var r=0;return e.D=H(e.b,e.m),e.D>0&&(r=e.m[e.D-2],r==e.n&&(r+=z(e.b,r-1,e.m[e.D-1],273-r))),++e.s,r}function Nr(e){e.b&&e.W&&(e.b.cc=null,e.W=0)}function Or(e){Nr(e),e.d.Ab=null}function Ar(e,r){e.ab=r;for(var t=0;r>1<>24;for(var t=0;4>t;++t)e.fc[1+t]=e.ab>>8*t<<24>>24;k(r,e.fc,0,5)}function Wr(e,r){if(e.Gc){kt(e.d,e.C,(e.l<<4)+r,1),kt(e.d,e.bb,e.l,0),e.l=7>e.l?7:10,Kr(e.$,e.d,0,r);var t=Q(2);mt(e.K[t],e.d,63),Rt(e.d,67108863,26),pt(e.S,e.d,15)}}function Tr(e){return 2048>e?Zt[e]:2097152>e?Zt[e>>10]+20:Zt[e>>20]+40}function Zr(e){return 131072>e?Zt[e>>6]+12:134217728>e?Zt[e>>16]+32:Zt[e>>26]+52}function Yr(e,r,t,o){8>t?(kt(r,e.db,0,0),mt(e.Vb[o],r,t)):(t-=8,kt(r,e.db,0,1),8>t?(kt(r,e.db,1,0),mt(e.Wb[o],r,t)):(kt(r,e.db,1,1),mt(e.ic,r,t-8)))}function Vr(e){e.db=t(2),e.Vb=t(16),e.Wb=t(16),e.ic=ft({},8);for(var r=0;16>r;++r)e.Vb[r]=ft({},3),e.Wb[r]=ft({},3);return e}function jr(e,r){gt(e.db);for(var t=0;r>t;++t)gt(e.Vb[t].G),gt(e.Wb[t].G);gt(e.ic.G)}function $r(e,r,t,o,n){var s,i,_,a,c;for(s=Yt[e.db[0]>>>2],i=Yt[2048-e.db[0]>>>2],_=i+Yt[e.db[1]>>>2],a=i+Yt[2048-e.db[1]>>>2],c=0,c=0;8>c;++c){if(c>=t)return;o[n+c]=s+dt(e.Vb[r],c)}for(;16>c;++c){if(c>=t)return;o[n+c]=_+dt(e.Wb[r],c-8)}for(;t>c;++c)o[n+c]=a+dt(e.ic,c-8-8)}function Kr(e,r,t,o){Yr(e,r,t,o),0==--e.sc[o]&&($r(e,o,e.rb,e.Cc,272*o),e.sc[o]=e.rb)}function qr(e){return Vr(e),e.Cc=[],e.sc=[],e}function Jr(e,r,t){return e.Cc[272*t+r]}function Qr(e,r){for(var t=0;r>t;++t)$r(e,t,e.rb,e.Cc,272*t),e.sc[t]=e.rb}function Ur(e,r,o){var n,s;if(null==e.V||e.u!=o||e.I!=r)for(e.I=r,e.qc=(1<n;++n)e.V[n]=ot({})}function Xr(e,r,t){return e.V[((r&e.qc)<>>8-e.u)]}function et(e){var r,t=1<r;++r)gt(e.V[r].tb)}function rt(e,r,t){var o,n,s=1;for(n=7;n>=0;--n)o=t>>n&1,kt(r,e.tb,s,o),s=s<<1|o}function tt(e,r,t,o){var n,s,i,_,a=1,c=1;for(s=7;s>=0;--s)n=o>>s&1,_=c,a&&(i=t>>s&1,_+=1+i<<8,a=i==n),kt(r,e.tb,_,n),c=c<<1|n}function ot(e){return e.tb=t(768),e}function nt(e,r,t,o){var n,s,i=1,_=7,a=0;if(r)for(;_>=0;--_)if(s=t>>_&1,n=o>>_&1,a+=wt(e.tb[(1+s<<8)+i],n),i=i<<1|n,s!=n){--_;break}for(;_>=0;--_)n=o>>_&1,a+=wt(e.tb[i],n),i=i<<1|n;return a}function st(e){e.j=-1,e.t=0}function it(e){e.j=0,e.t=0}function _t(e,r){return e.F=r,e.G=t(1<o;++o)t=vt(r,e.G,n),n<<=1,n+=t,s|=t<s;++s)n=vt(t,e,r+i),i<<=1,i+=n,_|=n<>>n&1,kt(r,e.G,s,o),s=s<<1|o}function dt(e,r){var t,o,n=1,s=0;for(o=e.F;0!=o;)--o,t=r>>>o&1,s+=wt(e.G[n],t),n=(n<<1)+t;return s}function pt(e,r,t){var o,n,s=1;for(n=0;e.F>n;++n)o=1&t,kt(r,e.G,s,o),s=s<<1|o,t>>=1}function ht(e,r){var t,o,n=1,s=0;for(o=e.F;0!=o;--o)t=1&r,r>>>=1,s+=wt(e.G[n],t),n=n<<1|t;return s}function Pt(e,r,t,o,n){var s,i,_=1;for(i=0;o>i;++i)s=1&n,kt(t,e,r+_,s),_=_<<1|s,n>>=1}function lt(e,r,t,o){var n,s,i=1,_=0;for(s=t;0!=s;--s)n=1&o,o>>>=1,_+=Yt[(2047&(e[r+i]-n^-n))>>>2],i=i<<1|n;return _}function vt(e,r,t){var o,n=r[t];return o=(e.E>>>11)*n,(-2147483648^o)>(-2147483648^e.Bb)?(e.E=o,r[t]=n+(2048-n>>>5)<<16>>16,-16777216&e.E||(e.Bb=e.Bb<<8|l(e.Ab),e.E<<=8),0):(e.E-=o,e.Bb-=o,r[t]=n-(n>>>5)<<16>>16,-16777216&e.E||(e.Bb=e.Bb<<8|l(e.Ab),e.E<<=8),1)}function Bt(e,r){var t,o,n=0;for(t=r;0!=t;--t)e.E>>>=1,o=e.Bb-e.E>>>31,e.Bb-=e.E&o-1,n=n<<1|1-o,-16777216&e.E||(e.Bb=e.Bb<<8|l(e.Ab),e.E<<=8);return n}function St(e){e.Bb=0,e.E=-1;for(var r=0;5>r;++r)e.Bb=e.Bb<<8|l(e.Ab)}function gt(e){for(var r=e.length-1;r>=0;--r)e[r]=1024}function kt(e,r,t,s){var i,_=r[t];i=(e.E>>>11)*_,s?(e.xc=o(e.xc,n(a(i),[4294967295,0])),e.E-=i,r[t]=_-(_>>>5)<<16>>16):(e.E=i,r[t]=_+(2048-_>>>5)<<16>>16),-16777216&e.E||(e.E<<=8,bt(e))}function Rt(e,r,t){for(var n=t-1;n>=0;--n)e.E>>>=1,1==(r>>>n&1)&&(e.xc=o(e.xc,a(e.E))),-16777216&e.E||(e.E<<=8,bt(e))}function Mt(e){return o(o(a(e.Jb),e.mc),[4,0])}function Dt(e){e.mc=Gt,e.xc=Gt,e.E=-1,e.Jb=1,e.Oc=0}function bt(e){var r,t=c(p(e.xc,32));if(0!=t||s(e.xc,[4278190080,0])<0){e.mc=o(e.mc,a(e.Jb)),r=e.Oc;do g(e.Ab,r+t),r=255;while(0!=--e.Jb);e.Oc=c(e.xc)>>>24}++e.Jb,e.xc=m(n(e.xc,[16777215,0]),8)}function wt(e,r){return Yt[(2047&(e-r^-r))>>>2]}function Et(e){for(var r,t,o,n=0,s=0,i=e.length,_=[],a=[];i>n;++n,++s){if(r=255&e[n],128&r)if(192==(224&r)){if(n+1>=i)return e;if(t=255&e[++n],128!=(192&t))return e;a[s]=(31&r)<<6|63&t}else{if(224!=(240&r))return e; if(n+2>=i)return e;if(t=255&e[++n],128!=(192&t))return e;if(o=255&e[++n],128!=(192&o))return e;a[s]=(15&r)<<12|(63&t)<<6|63&o}else{if(!r)return e;a[s]=r}16383==s&&(_.push(String.fromCharCode.apply(String,a)),s=-1)}return s>0&&(a.length=s,_.push(String.fromCharCode.apply(String,a))),_.join("")}function Lt(e){var r,t,o,n=[],s=0,i=e.length;if("object"==typeof e)return e;for(R(e,0,i,n,0),o=0;i>o;++o)r=n[o],r>=1&&127>=r?++s:s+=!r||r>=128&&2047>=r?2:3;for(t=[],s=0,o=0;i>o;++o)r=n[o],r>=1&&127>=r?t[s++]=r<<24>>24:!r||r>=128&&2047>=r?(t[s++]=(192|r>>6&31)<<24>>24,t[s++]=(128|63&r)<<24>>24):(t[s++]=(224|r>>12&15)<<24>>24,t[s++]=(128|r>>6&63)<<24>>24,t[s++]=(128|63&r)<<24>>24);return t}function yt(e){return e[1]+e[0]}function Ct(e,t,o,n){function s(){try{for(var e,r=(new Date).getTime();rr(a.c.yb);)if(i=yt(a.c.yb.Pb)/yt(a.c.Tb),(new Date).getTime()-r>200)return n(i),Nt(s,0),0;n(1),e=S(a.c.Nb),Nt(o.bind(null,e),0)}catch(t){o(null,t)}}var i,_,a={},c=void 0===o&&void 0===n;if("function"!=typeof o&&(_=o,o=n=0),n=n||function(e){return void 0!==_?r(e,_):void 0},o=o||function(e,r){return void 0!==_?postMessage({action:Ft,cbn:_,result:e,error:r}):void 0},c){for(a.c=w({},Lt(e),Vt(t));rr(a.c.yb););return S(a.c.Nb)}try{a.c=w({},Lt(e),Vt(t)),n(0)}catch(u){return o(null,u)}Nt(s,0)}function zt(e,t,o){function n(){try{for(var e,r=0,i=(new Date).getTime();rr(c.d.yb);)if(++r%1e3==0&&(new Date).getTime()-i>200)return _&&(s=yt(c.d.yb.Z.g)/a,o(s)),Nt(n,0),0;o(1),e=Et(S(c.d.Nb)),Nt(t.bind(null,e),0)}catch(u){t(null,u)}}var s,i,_,a,c={},u=void 0===t&&void 0===o;if("function"!=typeof t&&(i=t,t=o=0),o=o||function(e){return void 0!==i?r(_?e:-1,i):void 0},t=t||function(e,r){return void 0!==i?postMessage({action:It,cbn:i,result:e,error:r}):void 0},u){for(c.d=L({},e);rr(c.d.yb););return Et(S(c.d.Nb))}try{c.d=L({},e),a=yt(c.d.Tb),_=a>-1,o(0)}catch(f){return t(null,f)}Nt(n,0)}var Ft=1,It=2,xt=3,Nt="function"==typeof setImmediate?setImmediate:setTimeout,Ot=4294967296,At=[4294967295,-Ot],Ht=[0,-0x8000000000000000],Gt=[0,0],Wt=[1,0],Tt=function(){var e,r,t,o=[];for(e=0;256>e;++e){for(t=e,r=0;8>r;++r)0!=(1&t)?t=t>>>1^-306674912:t>>>=1;o[e]=t}return o}(),Zt=function(){var e,r,t,o=2,n=[0,1];for(t=2;22>t;++t)for(r=1<<(t>>1)-1,e=0;r>e;++e,++o)n[o]=t<<24>>24;return n}(),Yt=function(){var e,r,t,o,n=[];for(r=8;r>=0;--r)for(o=1<<9-r-1,e=1<<9-r,t=o;e>t;++t)n[t]=(r<<6)+(e-t<<6>>>9-r-1);return n}(),Vt=function(){var e=[{s:16,f:64,m:0},{s:20,f:64,m:0},{s:19,f:64,m:1},{s:20,f:64,m:1},{s:21,f:128,m:1},{s:22,f:128,m:1},{s:23,f:128,m:1},{s:24,f:255,m:1},{s:25,f:255,m:1}];return function(r){return e[r-1]||e[6]}}();return"undefined"==typeof onmessage||"undefined"!=typeof window&&void 0!==window.document||!function(){onmessage=function(r){r&&r.gc&&(r.gc.action==It?e.decompress(r.gc.gc,r.gc.cbn):r.gc.action==Ft&&e.compress(r.gc.gc,r.gc.Rc,r.gc.cbn))}}(),{compress:Ct,decompress:zt}}();this.LZMA=this.LZMA_WORKER=e; ================================================ FILE: dependencies/webgl-debug.js ================================================ /* ** Copyright (c) 2012 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ // Various functions for helping debug WebGL apps. WebGLDebugUtils = function() { /** * Wrapped logging function. * @param {string} msg Message to log. */ var log = function(msg) { if (window.console && window.console.log) { window.console.log(msg); } }; /** * Wrapped error logging function. * @param {string} msg Message to log. */ var error = function(msg) { if (window.console && window.console.error) { window.console.error(msg); } else { log(msg); } }; /** * Which arguments are enums based on the number of arguments to the function. * So * 'texImage2D': { * 9: { 0:true, 2:true, 6:true, 7:true }, * 6: { 0:true, 2:true, 3:true, 4:true }, * }, * * means if there are 9 arguments then 6 and 7 are enums, if there are 6 * arguments 3 and 4 are enums * * @type {!Object.} */ var glValidEnumContexts = { // Generic setters and getters 'enable': {1: { 0:true }}, 'disable': {1: { 0:true }}, 'getParameter': {1: { 0:true }}, // Rendering 'drawArrays': {3:{ 0:true }}, 'drawElements': {4:{ 0:true, 2:true }}, // Shaders 'createShader': {1: { 0:true }}, 'getShaderParameter': {2: { 1:true }}, 'getProgramParameter': {2: { 1:true }}, 'getShaderPrecisionFormat': {2: { 0: true, 1:true }}, // Vertex attributes 'getVertexAttrib': {2: { 1:true }}, 'vertexAttribPointer': {6: { 2:true }}, // Textures 'bindTexture': {2: { 0:true }}, 'activeTexture': {1: { 0:true }}, 'getTexParameter': {2: { 0:true, 1:true }}, 'texParameterf': {3: { 0:true, 1:true }}, 'texParameteri': {3: { 0:true, 1:true, 2:true }}, 'texImage2D': { 9: { 0:true, 2:true, 6:true, 7:true }, 6: { 0:true, 2:true, 3:true, 4:true } }, 'texSubImage2D': { 9: { 0:true, 6:true, 7:true }, 7: { 0:true, 4:true, 5:true } }, 'copyTexImage2D': {8: { 0:true, 2:true }}, 'copyTexSubImage2D': {8: { 0:true }}, 'generateMipmap': {1: { 0:true }}, 'compressedTexImage2D': {7: { 0: true, 2:true }}, 'compressedTexSubImage2D': {8: { 0: true, 6:true }}, // Buffer objects 'bindBuffer': {2: { 0:true }}, 'bufferData': {3: { 0:true, 2:true }}, 'bufferSubData': {3: { 0:true }}, 'getBufferParameter': {2: { 0:true, 1:true }}, // Renderbuffers and framebuffers 'pixelStorei': {2: { 0:true, 1:true }}, 'readPixels': {7: { 4:true, 5:true }}, 'bindRenderbuffer': {2: { 0:true }}, 'bindFramebuffer': {2: { 0:true }}, 'checkFramebufferStatus': {1: { 0:true }}, 'framebufferRenderbuffer': {4: { 0:true, 1:true, 2:true }}, 'framebufferTexture2D': {5: { 0:true, 1:true, 2:true }}, 'getFramebufferAttachmentParameter': {3: { 0:true, 1:true, 2:true }}, 'getRenderbufferParameter': {2: { 0:true, 1:true }}, 'renderbufferStorage': {4: { 0:true, 1:true }}, // Frame buffer operations (clear, blend, depth test, stencil) 'clear': {1: { 0: { 'enumBitwiseOr': ['COLOR_BUFFER_BIT', 'DEPTH_BUFFER_BIT', 'STENCIL_BUFFER_BIT'] }}}, 'depthFunc': {1: { 0:true }}, 'blendFunc': {2: { 0:true, 1:true }}, 'blendFuncSeparate': {4: { 0:true, 1:true, 2:true, 3:true }}, 'blendEquation': {1: { 0:true }}, 'blendEquationSeparate': {2: { 0:true, 1:true }}, 'stencilFunc': {3: { 0:true }}, 'stencilFuncSeparate': {4: { 0:true, 1:true }}, 'stencilMaskSeparate': {2: { 0:true }}, 'stencilOp': {3: { 0:true, 1:true, 2:true }}, 'stencilOpSeparate': {4: { 0:true, 1:true, 2:true, 3:true }}, // Culling 'cullFace': {1: { 0:true }}, 'frontFace': {1: { 0:true }}, // ANGLE_instanced_arrays extension 'drawArraysInstancedANGLE': {4: { 0:true }}, 'drawElementsInstancedANGLE': {5: { 0:true, 2:true }}, // EXT_blend_minmax extension 'blendEquationEXT': {1: { 0:true }} }; /** * Map of numbers to names. * @type {Object} */ var glEnums = null; /** * Map of names to numbers. * @type {Object} */ var enumStringToValue = null; /** * Initializes this module. Safe to call more than once. * @param {!WebGLRenderingContext} ctx A WebGL context. If * you have more than one context it doesn't matter which one * you pass in, it is only used to pull out constants. */ function init(ctx) { if (glEnums == null) { glEnums = { }; enumStringToValue = { }; for (var propertyName in ctx) { if (typeof ctx[propertyName] == 'number') { glEnums[ctx[propertyName]] = propertyName; enumStringToValue[propertyName] = ctx[propertyName]; } } } } /** * Checks the utils have been initialized. */ function checkInit() { if (glEnums == null) { throw 'WebGLDebugUtils.init(ctx) not called'; } } /** * Returns true or false if value matches any WebGL enum * @param {*} value Value to check if it might be an enum. * @return {boolean} True if value matches one of the WebGL defined enums */ function mightBeEnum(value) { checkInit(); return (glEnums[value] !== undefined); } /** * Gets an string version of an WebGL enum. * * Example: * var str = WebGLDebugUtil.glEnumToString(ctx.getError()); * * @param {number} value Value to return an enum for * @return {string} The string version of the enum. */ function glEnumToString(value) { checkInit(); var name = glEnums[value]; return (name !== undefined) ? ("gl." + name) : ("/*UNKNOWN WebGL ENUM*/ 0x" + value.toString(16) + ""); } /** * Returns the string version of a WebGL argument. * Attempts to convert enum arguments to strings. * @param {string} functionName the name of the WebGL function. * @param {number} numArgs the number of arguments passed to the function. * @param {number} argumentIndx the index of the argument. * @param {*} value The value of the argument. * @return {string} The value as a string. */ function glFunctionArgToString(functionName, numArgs, argumentIndex, value) { var funcInfo = glValidEnumContexts[functionName]; if (funcInfo !== undefined) { var funcInfo = funcInfo[numArgs]; if (funcInfo !== undefined) { if (funcInfo[argumentIndex]) { if (typeof funcInfo[argumentIndex] === 'object' && funcInfo[argumentIndex]['enumBitwiseOr'] !== undefined) { var enums = funcInfo[argumentIndex]['enumBitwiseOr']; var orResult = 0; var orEnums = []; for (var i = 0; i < enums.length; ++i) { var enumValue = enumStringToValue[enums[i]]; if ((value & enumValue) !== 0) { orResult |= enumValue; orEnums.push(glEnumToString(enumValue)); } } if (orResult === value) { return orEnums.join(' | '); } else { return glEnumToString(value); } } else { return glEnumToString(value); } } } } if (value === null) { return "null"; } else if (value === undefined) { return "undefined"; } else { return value.toString(); } } /** * Converts the arguments of a WebGL function to a string. * Attempts to convert enum arguments to strings. * * @param {string} functionName the name of the WebGL function. * @param {number} args The arguments. * @return {string} The arguments as a string. */ function glFunctionArgsToString(functionName, args) { // apparently we can't do args.join(","); var argStr = ""; var numArgs = args.length; for (var ii = 0; ii < numArgs; ++ii) { argStr += ((ii == 0) ? '' : ', ') + glFunctionArgToString(functionName, numArgs, ii, args[ii]); } return argStr; }; function makePropertyWrapper(wrapper, original, propertyName) { //log("wrap prop: " + propertyName); wrapper.__defineGetter__(propertyName, function() { return original[propertyName]; }); // TODO(gmane): this needs to handle properties that take more than // one value? wrapper.__defineSetter__(propertyName, function(value) { //log("set: " + propertyName); original[propertyName] = value; }); } // Makes a function that calls a function on another object. function makeFunctionWrapper(original, functionName) { //log("wrap fn: " + functionName); var f = original[functionName]; return function() { //log("call: " + functionName); var result = f.apply(original, arguments); return result; }; } /** * Given a WebGL context returns a wrapped context that calls * gl.getError after every command and calls a function if the * result is not gl.NO_ERROR. * * @param {!WebGLRenderingContext} ctx The webgl context to * wrap. * @param {!function(err, funcName, args): void} opt_onErrorFunc * The function to call when gl.getError returns an * error. If not specified the default function calls * console.log with a message. * @param {!function(funcName, args): void} opt_onFunc The * function to call when each webgl function is called. * You can use this to log all calls for example. * @param {!WebGLRenderingContext} opt_err_ctx The webgl context * to call getError on if different than ctx. */ function makeDebugContext(ctx, opt_onErrorFunc, opt_onFunc, opt_err_ctx) { opt_err_ctx = opt_err_ctx || ctx; init(ctx); opt_onErrorFunc = opt_onErrorFunc || function(err, functionName, args) { // apparently we can't do args.join(","); var argStr = ""; var numArgs = args.length; for (var ii = 0; ii < numArgs; ++ii) { argStr += ((ii == 0) ? '' : ', ') + glFunctionArgToString(functionName, numArgs, ii, args[ii]); } error("WebGL error "+ glEnumToString(err) + " in "+ functionName + "(" + argStr + ")"); }; // Holds booleans for each GL error so after we get the error ourselves // we can still return it to the client app. var glErrorShadow = { }; // Makes a function that calls a WebGL function and then calls getError. function makeErrorWrapper(ctx, functionName) { return function() { if (opt_onFunc) { opt_onFunc(functionName, arguments); } var result = ctx[functionName].apply(ctx, arguments); var err = opt_err_ctx.getError(); if (err != 0) { glErrorShadow[err] = true; opt_onErrorFunc(err, functionName, arguments); } return result; }; } // Make a an object that has a copy of every property of the WebGL context // but wraps all functions. var wrapper = {}; for (var propertyName in ctx) { if (typeof ctx[propertyName] == 'function') { if (propertyName != 'getExtension') { wrapper[propertyName] = makeErrorWrapper(ctx, propertyName); } else { var wrapped = makeErrorWrapper(ctx, propertyName); wrapper[propertyName] = function () { var result = wrapped.apply(ctx, arguments); return makeDebugContext(result, opt_onErrorFunc, opt_onFunc, opt_err_ctx); }; } } else { makePropertyWrapper(wrapper, ctx, propertyName); } } // Override the getError function with one that returns our saved results. wrapper.getError = function() { for (var err in glErrorShadow) { if (glErrorShadow.hasOwnProperty(err)) { if (glErrorShadow[err]) { glErrorShadow[err] = false; return err; } } } return ctx.NO_ERROR; }; return wrapper; } function resetToInitialState(ctx) { var numAttribs = ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS); var tmp = ctx.createBuffer(); ctx.bindBuffer(ctx.ARRAY_BUFFER, tmp); for (var ii = 0; ii < numAttribs; ++ii) { ctx.disableVertexAttribArray(ii); ctx.vertexAttribPointer(ii, 4, ctx.FLOAT, false, 0, 0); ctx.vertexAttrib1f(ii, 0); } ctx.deleteBuffer(tmp); var numTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS); for (var ii = 0; ii < numTextureUnits; ++ii) { ctx.activeTexture(ctx.TEXTURE0 + ii); ctx.bindTexture(ctx.TEXTURE_CUBE_MAP, null); ctx.bindTexture(ctx.TEXTURE_2D, null); } ctx.activeTexture(ctx.TEXTURE0); ctx.useProgram(null); ctx.bindBuffer(ctx.ARRAY_BUFFER, null); ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null); ctx.bindFramebuffer(ctx.FRAMEBUFFER, null); ctx.bindRenderbuffer(ctx.RENDERBUFFER, null); ctx.disable(ctx.BLEND); ctx.disable(ctx.CULL_FACE); ctx.disable(ctx.DEPTH_TEST); ctx.disable(ctx.DITHER); ctx.disable(ctx.SCISSOR_TEST); ctx.blendColor(0, 0, 0, 0); ctx.blendEquation(ctx.FUNC_ADD); ctx.blendFunc(ctx.ONE, ctx.ZERO); ctx.clearColor(0, 0, 0, 0); ctx.clearDepth(1); ctx.clearStencil(-1); ctx.colorMask(true, true, true, true); ctx.cullFace(ctx.BACK); ctx.depthFunc(ctx.LESS); ctx.depthMask(true); ctx.depthRange(0, 1); ctx.frontFace(ctx.CCW); ctx.hint(ctx.GENERATE_MIPMAP_HINT, ctx.DONT_CARE); ctx.lineWidth(1); ctx.pixelStorei(ctx.PACK_ALIGNMENT, 4); ctx.pixelStorei(ctx.UNPACK_ALIGNMENT, 4); ctx.pixelStorei(ctx.UNPACK_FLIP_Y_WEBGL, false); ctx.pixelStorei(ctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); // TODO: Delete this IF. if (ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL) { ctx.pixelStorei(ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL, ctx.BROWSER_DEFAULT_WEBGL); } ctx.polygonOffset(0, 0); ctx.sampleCoverage(1, false); ctx.scissor(0, 0, ctx.canvas.width, ctx.canvas.height); ctx.stencilFunc(ctx.ALWAYS, 0, 0xFFFFFFFF); ctx.stencilMask(0xFFFFFFFF); ctx.stencilOp(ctx.KEEP, ctx.KEEP, ctx.KEEP); ctx.viewport(0, 0, ctx.canvas.width, ctx.canvas.height); ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT | ctx.STENCIL_BUFFER_BIT); // TODO: This should NOT be needed but Firefox fails with 'hint' while(ctx.getError()); } function makeLostContextSimulatingCanvas(canvas) { var unwrappedContext_; var wrappedContext_; var onLost_ = []; var onRestored_ = []; var wrappedContext_ = {}; var contextId_ = 1; var contextLost_ = false; var resourceId_ = 0; var resourceDb_ = []; var numCallsToLoseContext_ = 0; var numCalls_ = 0; var canRestore_ = false; var restoreTimeout_ = 0; // Holds booleans for each GL error so can simulate errors. var glErrorShadow_ = { }; canvas.getContext = function(f) { return function() { var ctx = f.apply(canvas, arguments); // Did we get a context and is it a WebGL context? if (ctx instanceof WebGLRenderingContext) { if (ctx != unwrappedContext_) { if (unwrappedContext_) { throw "got different context" } unwrappedContext_ = ctx; wrappedContext_ = makeLostContextSimulatingContext(unwrappedContext_); } return wrappedContext_; } return ctx; } }(canvas.getContext); function wrapEvent(listener) { if (typeof(listener) == "function") { return listener; } else { return function(info) { listener.handleEvent(info); } } } var addOnContextLostListener = function(listener) { onLost_.push(wrapEvent(listener)); }; var addOnContextRestoredListener = function(listener) { onRestored_.push(wrapEvent(listener)); }; function wrapAddEventListener(canvas) { var f = canvas.addEventListener; canvas.addEventListener = function(type, listener, bubble) { switch (type) { case 'webglcontextlost': addOnContextLostListener(listener); break; case 'webglcontextrestored': addOnContextRestoredListener(listener); break; default: f.apply(canvas, arguments); } }; } wrapAddEventListener(canvas); canvas.loseContext = function() { if (!contextLost_) { contextLost_ = true; numCallsToLoseContext_ = 0; ++contextId_; while (unwrappedContext_.getError()); clearErrors(); glErrorShadow_[unwrappedContext_.CONTEXT_LOST_WEBGL] = true; var event = makeWebGLContextEvent("context lost"); var callbacks = onLost_.slice(); setTimeout(function() { //log("numCallbacks:" + callbacks.length); for (var ii = 0; ii < callbacks.length; ++ii) { //log("calling callback:" + ii); callbacks[ii](event); } if (restoreTimeout_ >= 0) { setTimeout(function() { canvas.restoreContext(); }, restoreTimeout_); } }, 0); } }; canvas.restoreContext = function() { if (contextLost_) { if (onRestored_.length) { setTimeout(function() { if (!canRestore_) { throw "can not restore. webglcontestlost listener did not call event.preventDefault"; } freeResources(); resetToInitialState(unwrappedContext_); contextLost_ = false; numCalls_ = 0; canRestore_ = false; var callbacks = onRestored_.slice(); var event = makeWebGLContextEvent("context restored"); for (var ii = 0; ii < callbacks.length; ++ii) { callbacks[ii](event); } }, 0); } } }; canvas.loseContextInNCalls = function(numCalls) { if (contextLost_) { throw "You can not ask a lost contet to be lost"; } numCallsToLoseContext_ = numCalls_ + numCalls; }; canvas.getNumCalls = function() { return numCalls_; }; canvas.setRestoreTimeout = function(timeout) { restoreTimeout_ = timeout; }; function isWebGLObject(obj) { //return false; return (obj instanceof WebGLBuffer || obj instanceof WebGLFramebuffer || obj instanceof WebGLProgram || obj instanceof WebGLRenderbuffer || obj instanceof WebGLShader || obj instanceof WebGLTexture); } function checkResources(args) { for (var ii = 0; ii < args.length; ++ii) { var arg = args[ii]; if (isWebGLObject(arg)) { return arg.__webglDebugContextLostId__ == contextId_; } } return true; } function clearErrors() { var k = Object.keys(glErrorShadow_); for (var ii = 0; ii < k.length; ++ii) { delete glErrorShadow_[k]; } } function loseContextIfTime() { ++numCalls_; if (!contextLost_) { if (numCallsToLoseContext_ == numCalls_) { canvas.loseContext(); } } } // Makes a function that simulates WebGL when out of context. function makeLostContextFunctionWrapper(ctx, functionName) { var f = ctx[functionName]; return function() { // log("calling:" + functionName); // Only call the functions if the context is not lost. loseContextIfTime(); if (!contextLost_) { //if (!checkResources(arguments)) { // glErrorShadow_[wrappedContext_.INVALID_OPERATION] = true; // return; //} var result = f.apply(ctx, arguments); return result; } }; } function freeResources() { for (var ii = 0; ii < resourceDb_.length; ++ii) { var resource = resourceDb_[ii]; if (resource instanceof WebGLBuffer) { unwrappedContext_.deleteBuffer(resource); } else if (resource instanceof WebGLFramebuffer) { unwrappedContext_.deleteFramebuffer(resource); } else if (resource instanceof WebGLProgram) { unwrappedContext_.deleteProgram(resource); } else if (resource instanceof WebGLRenderbuffer) { unwrappedContext_.deleteRenderbuffer(resource); } else if (resource instanceof WebGLShader) { unwrappedContext_.deleteShader(resource); } else if (resource instanceof WebGLTexture) { unwrappedContext_.deleteTexture(resource); } } } function makeWebGLContextEvent(statusMessage) { return { statusMessage: statusMessage, preventDefault: function() { canRestore_ = true; } }; } return canvas; function makeLostContextSimulatingContext(ctx) { // copy all functions and properties to wrapper for (var propertyName in ctx) { if (typeof ctx[propertyName] == 'function') { wrappedContext_[propertyName] = makeLostContextFunctionWrapper( ctx, propertyName); } else { makePropertyWrapper(wrappedContext_, ctx, propertyName); } } // Wrap a few functions specially. wrappedContext_.getError = function() { loseContextIfTime(); if (!contextLost_) { var err; while (err = unwrappedContext_.getError()) { glErrorShadow_[err] = true; } } for (var err in glErrorShadow_) { if (glErrorShadow_[err]) { delete glErrorShadow_[err]; return err; } } return wrappedContext_.NO_ERROR; }; var creationFunctions = [ "createBuffer", "createFramebuffer", "createProgram", "createRenderbuffer", "createShader", "createTexture" ]; for (var ii = 0; ii < creationFunctions.length; ++ii) { var functionName = creationFunctions[ii]; wrappedContext_[functionName] = function(f) { return function() { loseContextIfTime(); if (contextLost_) { return null; } var obj = f.apply(ctx, arguments); obj.__webglDebugContextLostId__ = contextId_; resourceDb_.push(obj); return obj; }; }(ctx[functionName]); } var functionsThatShouldReturnNull = [ "getActiveAttrib", "getActiveUniform", "getBufferParameter", "getContextAttributes", "getAttachedShaders", "getFramebufferAttachmentParameter", "getParameter", "getProgramParameter", "getProgramInfoLog", "getRenderbufferParameter", "getShaderParameter", "getShaderInfoLog", "getShaderSource", "getTexParameter", "getUniform", "getUniformLocation", "getVertexAttrib" ]; for (var ii = 0; ii < functionsThatShouldReturnNull.length; ++ii) { var functionName = functionsThatShouldReturnNull[ii]; wrappedContext_[functionName] = function(f) { return function() { loseContextIfTime(); if (contextLost_) { return null; } return f.apply(ctx, arguments); } }(wrappedContext_[functionName]); } var isFunctions = [ "isBuffer", "isEnabled", "isFramebuffer", "isProgram", "isRenderbuffer", "isShader", "isTexture" ]; for (var ii = 0; ii < isFunctions.length; ++ii) { var functionName = isFunctions[ii]; wrappedContext_[functionName] = function(f) { return function() { loseContextIfTime(); if (contextLost_) { return false; } return f.apply(ctx, arguments); } }(wrappedContext_[functionName]); } wrappedContext_.checkFramebufferStatus = function(f) { return function() { loseContextIfTime(); if (contextLost_) { return wrappedContext_.FRAMEBUFFER_UNSUPPORTED; } return f.apply(ctx, arguments); }; }(wrappedContext_.checkFramebufferStatus); wrappedContext_.getAttribLocation = function(f) { return function() { loseContextIfTime(); if (contextLost_) { return -1; } return f.apply(ctx, arguments); }; }(wrappedContext_.getAttribLocation); wrappedContext_.getVertexAttribOffset = function(f) { return function() { loseContextIfTime(); if (contextLost_) { return 0; } return f.apply(ctx, arguments); }; }(wrappedContext_.getVertexAttribOffset); wrappedContext_.isContextLost = function() { return contextLost_; }; return wrappedContext_; } } return { /** * Initializes this module. Safe to call more than once. * @param {!WebGLRenderingContext} ctx A WebGL context. If * you have more than one context it doesn't matter which one * you pass in, it is only used to pull out constants. */ 'init': init, /** * Returns true or false if value matches any WebGL enum * @param {*} value Value to check if it might be an enum. * @return {boolean} True if value matches one of the WebGL defined enums */ 'mightBeEnum': mightBeEnum, /** * Gets an string version of an WebGL enum. * * Example: * WebGLDebugUtil.init(ctx); * var str = WebGLDebugUtil.glEnumToString(ctx.getError()); * * @param {number} value Value to return an enum for * @return {string} The string version of the enum. */ 'glEnumToString': glEnumToString, /** * Converts the argument of a WebGL function to a string. * Attempts to convert enum arguments to strings. * * Example: * WebGLDebugUtil.init(ctx); * var str = WebGLDebugUtil.glFunctionArgToString('bindTexture', 2, 0, gl.TEXTURE_2D); * * would return 'TEXTURE_2D' * * @param {string} functionName the name of the WebGL function. * @param {number} numArgs The number of arguments * @param {number} argumentIndx the index of the argument. * @param {*} value The value of the argument. * @return {string} The value as a string. */ 'glFunctionArgToString': glFunctionArgToString, /** * Converts the arguments of a WebGL function to a string. * Attempts to convert enum arguments to strings. * * @param {string} functionName the name of the WebGL function. * @param {number} args The arguments. * @return {string} The arguments as a string. */ 'glFunctionArgsToString': glFunctionArgsToString, /** * Given a WebGL context returns a wrapped context that calls * gl.getError after every command and calls a function if the * result is not NO_ERROR. * * You can supply your own function if you want. For example, if you'd like * an exception thrown on any GL error you could do this * * function throwOnGLError(err, funcName, args) { * throw WebGLDebugUtils.glEnumToString(err) + * " was caused by call to " + funcName; * }; * * ctx = WebGLDebugUtils.makeDebugContext( * canvas.getContext("webgl"), throwOnGLError); * * @param {!WebGLRenderingContext} ctx The webgl context to wrap. * @param {!function(err, funcName, args): void} opt_onErrorFunc The function * to call when gl.getError returns an error. If not specified the default * function calls console.log with a message. * @param {!function(funcName, args): void} opt_onFunc The * function to call when each webgl function is called. You * can use this to log all calls for example. */ 'makeDebugContext': makeDebugContext, /** * Given a canvas element returns a wrapped canvas element that will * simulate lost context. The canvas returned adds the following functions. * * loseContext: * simulates a lost context event. * * restoreContext: * simulates the context being restored. * * lostContextInNCalls: * loses the context after N gl calls. * * getNumCalls: * tells you how many gl calls there have been so far. * * setRestoreTimeout: * sets the number of milliseconds until the context is restored * after it has been lost. Defaults to 0. Pass -1 to prevent * automatic restoring. * * @param {!Canvas} canvas The canvas element to wrap. */ 'makeLostContextSimulatingCanvas': makeLostContextSimulatingCanvas, /** * Resets a context to the initial state. * @param {!WebGLRenderingContext} ctx The webgl context to * reset. */ 'resetToInitialState': resetToInitialState }; }(); ================================================ FILE: docs/.editorconfig.txt ================================================ # http://editorconfig.org root = true [*] charset = utf-8 end_of_line = lf indent_size = 2 indent_style = space insert_final_newline = true max_line_length = 80 trim_trailing_whitespace = true [*.md] max_line_length = 0 trim_trailing_whitespace = false [COMMIT_EDITMSG] max_line_length = 0 ================================================ FILE: docs/.gitignore ================================================ _site .sass-cache .jekyll-metadata *.gem .bundle vendor/bundle ================================================ FILE: docs/ImportAll.hx ================================================ package; import lime.app.Application; import lime.app.Event; import lime.app.Future; import lime.app.IModule; import lime.app.Module; import lime.app.Promise; import lime.graphics.cairo.Cairo; import lime.graphics.cairo.CairoAntialias; import lime.graphics.cairo.CairoContent; import lime.graphics.cairo.CairoExtend; import lime.graphics.cairo.CairoFillRule; import lime.graphics.cairo.CairoFilter; import lime.graphics.cairo.CairoFontFace; import lime.graphics.cairo.CairoFontOptions; import lime.graphics.cairo.CairoFormat; import lime.graphics.cairo.CairoFTFontFace; import lime.graphics.cairo.CairoGlyph; import lime.graphics.cairo.CairoHintMetrics; import lime.graphics.cairo.CairoImageSurface; import lime.graphics.cairo.CairoLineCap; import lime.graphics.cairo.CairoLineJoin; import lime.graphics.cairo.CairoOperator; import lime.graphics.cairo.CairoPattern; import lime.graphics.cairo.CairoStatus; import lime.graphics.cairo.CairoSubpixelOrder; import lime.graphics.cairo.CairoSurface; import lime.graphics.opengl.GL; import lime.graphics.opengl.GLActiveInfo; import lime.graphics.opengl.GLBuffer; import lime.graphics.opengl.GLContextAttributes; import lime.graphics.opengl.GLFramebuffer; import lime.graphics.opengl.GLProgram; import lime.graphics.opengl.GLQuery; import lime.graphics.opengl.GLRenderbuffer; import lime.graphics.opengl.GLSampler; import lime.graphics.opengl.GLShader; import lime.graphics.opengl.GLShaderPrecisionFormat; import lime.graphics.opengl.GLSync; import lime.graphics.opengl.GLTexture; import lime.graphics.opengl.GLTransformFeedback; import lime.graphics.opengl.GLUniformLocation; import lime.graphics.opengl.GLVertexArrayObject; import lime.graphics.CairoRenderContext; import lime.graphics.Canvas2DRenderContext; import lime.graphics.DOMRenderContext; import lime.graphics.FlashRenderContext; import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.graphics.ImageChannel; import lime.graphics.ImageFileFormat; import lime.graphics.ImageType; import lime.graphics.OpenGLES2RenderContext; import lime.graphics.OpenGLES3RenderContext; import lime.graphics.OpenGLRenderContext; import lime.graphics.PixelFormat; import lime.graphics.RenderContext; import lime.graphics.RenderContextAttributes; import lime.graphics.RenderContextType; import lime.graphics.WebGL2RenderContext; import lime.graphics.WebGLRenderContext; import lime.math.ARGB; import lime.math.BGRA; import lime.math.ColorMatrix; import lime.math.Matrix3; import lime.math.Matrix4; import lime.math.Rectangle; import lime.math.RGBA; import lime.math.Vector2; import lime.math.Vector4; import lime.media.howlerjs.Howl; import lime.media.howlerjs.Howler; import lime.media.openal.AL; import lime.media.openal.ALAuxiliaryEffectSlot; import lime.media.openal.ALBuffer; import lime.media.openal.ALC; import lime.media.openal.ALContext; import lime.media.openal.ALDevice; import lime.media.openal.ALEffect; import lime.media.openal.ALFilter; import lime.media.openal.ALSource; import lime.media.vorbis.Vorbis; import lime.media.vorbis.VorbisComment; import lime.media.vorbis.VorbisFile; import lime.media.vorbis.VorbisInfo; import lime.media.AudioBuffer; import lime.media.AudioContext; import lime.media.AudioContextType; import lime.media.AudioManager; import lime.media.AudioSource; import lime.media.FlashAudioContext; import lime.media.HTML5AudioContext; import lime.media.OpenALAudioContext; import lime.media.WebAudioContext; import lime.net.curl.CURL; import lime.net.curl.CURLCode; import lime.net.curl.CURLInfo; import lime.net.curl.CURLMulti; import lime.net.curl.CURLMultiCode; import lime.net.curl.CURLMultiMessage; import lime.net.curl.CURLMultiOption; import lime.net.curl.CURLOption; import lime.net.curl.CURLVersion; import lime.net.oauth.OAuthClient; import lime.net.oauth.OAuthConsumer; import lime.net.oauth.OAuthRequest; import lime.net.oauth.OAuthSignatureMethod; import lime.net.oauth.OAuthToken; import lime.net.oauth.OAuthVersion; import lime.net.HTTPRequest; import lime.net.HTTPRequestHeader; import lime.net.HTTPRequestMethod; import lime.net.URIParser; import lime.system.BackgroundWorker; import lime.system.CFFI; import lime.system.CFFIPointer; import lime.system.Clipboard; import lime.system.Display; import lime.system.DisplayMode; import lime.system.Endian; import lime.system.FileWatcher; import lime.system.JNI; import lime.system.Locale; import lime.system.Sensor; import lime.system.SensorType; import lime.system.System; import lime.system.ThreadPool; import lime.system.WorkOutput; import lime.text.harfbuzz.HB; import lime.text.harfbuzz.HBBlob; import lime.text.harfbuzz.HBBuffer; import lime.text.harfbuzz.HBBufferClusterLevel; import lime.text.harfbuzz.HBBufferContentType; import lime.text.harfbuzz.HBBufferFlags; import lime.text.harfbuzz.HBBufferSerializeFlags; import lime.text.harfbuzz.HBBufferSerializeFormat; import lime.text.harfbuzz.HBDirection; import lime.text.harfbuzz.HBFace; import lime.text.harfbuzz.HBFeature; import lime.text.harfbuzz.HBFont; import lime.text.harfbuzz.HBFTFont; import lime.text.harfbuzz.HBGlyphExtents; import lime.text.harfbuzz.HBGlyphInfo; import lime.text.harfbuzz.HBGlyphPosition; import lime.text.harfbuzz.HBLanguage; import lime.text.harfbuzz.HBMemoryMode; import lime.text.harfbuzz.HBScript; import lime.text.harfbuzz.HBSegmentProperties; import lime.text.harfbuzz.HBSet; import lime.text.Font; import lime.text.Glyph; import lime.text.GlyphMetrics; import lime.text.UTF8String; import lime.ui.FileDialog; import lime.ui.FileDialogType; import lime.ui.Gamepad; import lime.ui.GamepadAxis; import lime.ui.GamepadButton; import lime.ui.Haptic; import lime.ui.Joystick; import lime.ui.JoystickHatPosition; import lime.ui.KeyCode; import lime.ui.KeyModifier; import lime.ui.MouseButton; import lime.ui.MouseCursor; import lime.ui.MouseWheelMode; import lime.ui.ScanCode; import lime.ui.Touch; import lime.ui.Window; import lime.ui.WindowAttributes; import lime.utils.ArrayBuffer; import lime.utils.ArrayBufferView; import lime.utils.AssetBundle; import lime.utils.AssetCache; import lime.utils.AssetLibrary; import lime.utils.AssetManifest; import lime.utils.Assets; import lime.utils.AssetType; import lime.utils.BytePointer; import lime.utils.Bytes; import lime.utils.CompressionAlgorithm; import lime.utils.DataPointer; import lime.utils.DataView; import lime.utils.Float32Array; import lime.utils.Float64Array; import lime.utils.Int16Array; import lime.utils.Int32Array; import lime.utils.Int8Array; import lime.utils.Log; import lime.utils.LogLevel; import lime.utils.ObjectPool; import lime.utils.PackedAssetLibrary; import lime.utils.Preloader; import lime.utils.Resource; import lime.utils.UInt16Array; import lime.utils.UInt32Array; import lime.utils.UInt8Array; import lime.utils.UInt8ClampedArray; ================================================ FILE: docs/build.hx ================================================ import hxp.*; class Build extends Script { public function new() { super(); var base = new HXML( { defines: ["display", "doc-gen", "lime-doc-gen"], classNames: ["ImportAll"], libs: ["lime"], noOutput: true }); var flash = base.clone(); flash.xml = "xml/Flash.xml"; flash.swf = "obj/docs"; flash.swfVersion = "17.0"; flash.build(); var native = base.clone(); native.cpp = "obj/docs"; native.define("native"); native.define("lime-cffi"); var windows = native.clone(); windows.xml = "xml/Windows.xml"; windows.define("windows"); windows.build(); var mac = native.clone(); mac.xml = "xml/macOS.xml"; mac.define("mac"); mac.build(); var linux = native.clone(); linux.xml = "xml/Linux.xml"; linux.define("linux"); linux.build(); var ios = native.clone(); ios.xml = "xml/iOS.xml"; ios.define("ios"); ios.build(); var android = native.clone(); android.xml = "xml/Android.xml"; android.define("android"); android.build(); var html5 = base.clone(); html5.xml = "xml/HTML5.xml"; html5.js = "obj/docs"; html5.define("html5"); html5.build(); System.runCommand("", "haxelib", [ "run", "dox", "-i", "xml", "-in", "lime", "--title", "Lime API Reference", "-D", "source-path", "https://github.com/openfl/lime/tree/develop/src/", "-D", "website", "https://lime.openfl.org", "-D", "textColor", "0x777777", "-theme", "../assets/docs-theme", "--toplevel-package", "lime" ]); } } ================================================ FILE: docs/build.hxml ================================================ hxml/flash.hxml --next hxml/windows.hxml --next hxml/mac.hxml --next hxml/linux.hxml --next hxml/ios.hxml --next hxml/android.hxml --next hxml/html5.hxml --next -cmd haxelib run dox -i xml -in lime --title "Lime API Reference" -D website "https://lime.openfl.org" -D source-path "https://github.com/openfl/lime/tree/develop/src/" -D textColor 0x777777 -theme ../assets/docs-theme --toplevel-package lime ================================================ FILE: docs/hxml/android.hxml ================================================ -xml xml/Android.xml -cpp obj/docs -D display -D native -D lime-cffi -D android -D doc_gen -D lime-doc-gen ImportAll -lib lime --no-output ================================================ FILE: docs/hxml/flash.hxml ================================================ -xml xml/Flash.xml -swf obj/docs -swf-version 17.0 -D display -D doc_gen -D lime-doc-gen ImportAll -lib lime --no-output ================================================ FILE: docs/hxml/html5.hxml ================================================ -xml xml/HTML5.xml -js obj/docs -D display -D html5 -D doc_gen -D lime-doc-gen ImportAll -lib lime --no-output ================================================ FILE: docs/hxml/ios.hxml ================================================ -xml xml/iOS.xml -cpp obj/docs -D display -D native -D lime-cffi -D ios -D doc_gen -D lime-doc-gen ImportAll -lib lime --no-output ================================================ FILE: docs/hxml/linux.hxml ================================================ -xml xml/Linux.xml -cpp obj/docs -D display -D native -D lime-cffi -D linux -D doc_gen -D lime-doc-gen ImportAll -lib lime --no-output ================================================ FILE: docs/hxml/mac.hxml ================================================ -xml xml/Mac.xml -cpp obj/docs -D display -D native -D lime-cffi -D mac -D doc_gen -D lime-doc-gen ImportAll -lib lime --no-output ================================================ FILE: docs/hxml/windows.hxml ================================================ -xml xml/Windows.xml -cpp obj/docs -D display -D native -D lime-cffi -D windows -D doc_gen -D lime-doc-gen ImportAll -lib lime --no-output ================================================ FILE: externs/air/air/desktop/URLFilePromise.hx ================================================ package air.desktop; extern class URLFilePromise extends flash.events.EventDispatcher implements flash.desktop.IFilePromise { var isAsync(default, never):Bool; var relativePath:String; var request:flash.net.URLRequest; function new():Void; function close():Void; function open():flash.utils.IDataInput; function reportError(e:flash.events.ErrorEvent):Void; } ================================================ FILE: externs/air/air/net/SecureSocketMonitor.hx ================================================ package air.net; extern class SecureSocketMonitor extends SocketMonitor { function new(host:String, port:Int):Void; } ================================================ FILE: externs/air/air/net/ServiceMonitor.hx ================================================ package air.net; extern class ServiceMonitor extends flash.events.EventDispatcher { var available:Bool; var lastStatusUpdate(default, never):Date; var pollInterval:Float; var running(default, never):Bool; function new():Void; function start():Void; function stop():Void; private function checkStatus():Void; static function makeJavascriptSubclass(constructorFunction:Dynamic):Void; } ================================================ FILE: externs/air/air/net/SocketMonitor.hx ================================================ package air.net; extern class SocketMonitor extends ServiceMonitor { var host(default, never):String; var port(default, never):Int; function new(host:String, port:Int):Void; private function createSocket():flash.net.Socket; } ================================================ FILE: externs/air/air/net/URLMonitor.hx ================================================ package air.net; extern class URLMonitor extends ServiceMonitor { var acceptableStatusCodes:Array; var urlRequest(default, never):flash.net.URLRequest; function new(urlRequest:flash.net.URLRequest, ?acceptableStatusCodes:Array):Void; } ================================================ FILE: externs/air/air/update/ApplicationUpdater.hx ================================================ package air.update; extern class ApplicationUpdater // extends air.update.states.HSM { { var configurationFile:flash.filesystem.File; var currentState(default, never):String; var currentVersion(default, never):String; var delay:Float; var isFirstRun(default, never):Bool; var isNewerVersionFunction:Dynamic; var previousApplicationStorageDirectory(default, never):flash.filesystem.File; var previousVersion(default, never):String; var updateDescriptor(default, never):flash.xml.XML; var updateURL:String; var wasPendingUpdate(default, never):Bool; function new():Void; function cancelUpdate():Void; function checkForUpdate():Void; function checkNow():Void; function downloadUpdate():Void; function initialize():Void; function installFromAIRFile(file:flash.filesystem.File):Void; function installUpdate():Void; private var configuration:Dynamic; // air.update.core.UpdaterConfiguration; private var state:Dynamic; // air.update.core.UpdaterState; private var updaterHSM:Dynamic; // air.update.core.UpdaterHSM; private function dispatchProxy(event:flash.events.Event):Void; private function handleFirstRun():Bool; private function handlePeriodicalCheck():Void; private function onDownloadComplete(event:air.update.events.UpdateEvent):Void; private function onFileInstall():Void; private function onFileStatus(event:air.update.events.StatusFileUpdateEvent):Void; private function onInitializationComplete():Void; private function onInitialize():Void; private function onInstall():Void; private function onStateClear(event:flash.events.Event):Void; private function onTimer(event:flash.events.TimerEvent):Void; private function stateCancelled(event:flash.events.Event):Void; private function stateInitializing(event:flash.events.Event):Void; private function stateReady(event:flash.events.Event):Void; private function stateRunning(event:flash.events.Event):Void; private function stateUninitialized(event:flash.events.Event):Void; } ================================================ FILE: externs/air/air/update/ApplicationUpdaterUI.hx ================================================ package air.update; extern class ApplicationUpdaterUI extends flash.events.EventDispatcher { var configurationFile:flash.filesystem.File; var currentVersion(default, never):String; var delay:Float; var isCheckForUpdateVisible:Bool; var isDownloadProgressVisible:Bool; var isDownloadUpdateVisible:Bool; var isFileUpdateVisible:Bool; var isFirstRun(default, never):Bool; var isInstallUpdateVisible:Bool; var isNewerVersionFunction:Dynamic; var isUnexpectedErrorVisible:Bool; var isUpdateInProgress(default, never):Bool; var localeChain:Array; var previousApplicationStorageDirectory(default, never):flash.filesystem.File; var previousVersion(default, never):String; var updateDescriptor(default, never):flash.xml.XML; var updateURL:String; var wasPendingUpdate(default, never):Bool; function new():Void; function addResources(lang:String, res:Dynamic):Void; function cancelUpdate():Void; function checkNow():Void; function initialize():Void; function installFromAIRFile(file:flash.filesystem.File):Void; private function dispatchError(event:flash.events.ErrorEvent):Void; private function dispatchProxy(event:flash.events.Event):Void; } ================================================ FILE: externs/air/air/update/events/DownloadErrorEvent.hx ================================================ package air.update.events; extern class DownloadErrorEvent extends flash.events.ErrorEvent { var subErrorID:Int; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, text:String = "", id:Int = 0, subErrorID:Int = 0):Void; static var DOWNLOAD_ERROR(default, never):String; } ================================================ FILE: externs/air/air/update/events/StatusFileUpdateErrorEvent.hx ================================================ package air.update.events; extern class StatusFileUpdateErrorEvent extends flash.events.ErrorEvent { function new(type:String, bubbles:Bool = false, cancelable:Bool = false, text:String = "", id:Int = 0):Void; static var FILE_UPDATE_ERROR(default, never):String; } ================================================ FILE: externs/air/air/update/events/StatusFileUpdateEvent.hx ================================================ package air.update.events; extern class StatusFileUpdateEvent extends UpdateEvent { var available:Bool; var path:String; var version:String; var versionLabel:String; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, available:Bool = false, version:String = "", path:String = "", versionLabel:String = ""):Void; static var FILE_UPDATE_STATUS(default, never):String; } ================================================ FILE: externs/air/air/update/events/StatusUpdateErrorEvent.hx ================================================ package air.update.events; extern class StatusUpdateErrorEvent extends flash.events.ErrorEvent { var subErrorID:Int; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, text:String = "", id:Int = 0, subErrorID:Int = 0):Void; static var UPDATE_ERROR(default, never):String; } ================================================ FILE: externs/air/air/update/events/StatusUpdateEvent.hx ================================================ package air.update.events; extern class StatusUpdateEvent extends UpdateEvent { var available:Bool; var details:Array; var version:String; var versionLabel:String; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, available:Bool = false, version:String = "", ?details:Array, versionLabel:String = ""):Void; static var UPDATE_STATUS(default, never):String; } ================================================ FILE: externs/air/air/update/events/UpdateEvent.hx ================================================ package air.update.events; extern class UpdateEvent extends flash.events.Event { function new(type:String, bubbles:Bool = false, cancelable:Bool = false):Void; static var BEFORE_INSTALL(default, never):String; static var CHECK_FOR_UPDATE(default, never):String; static var DOWNLOAD_COMPLETE(default, never):String; static var DOWNLOAD_START(default, never):String; static var INITIALIZED(default, never):String; } ================================================ FILE: externs/air/flash/data/EncryptedLocalStore.hx ================================================ package flash.data; extern class EncryptedLocalStore { static var isSupported(default, never):Bool; static function getItem(name:String):flash.utils.ByteArray; static function removeItem(name:String):Void; static function reset():Void; static function setItem(name:String, data:flash.utils.ByteArray, stronglyBound:Bool = false):Void; } ================================================ FILE: externs/air/flash/data/SQLCollationType.hx ================================================ package flash.data; @:native("flash.data.SQLCollationType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLCollationType(String) { var BINARY = "binary"; var NO_CASE = "noCase"; } ================================================ FILE: externs/air/flash/data/SQLColumnNameStyle.hx ================================================ package flash.data; @:native("flash.data.SQLColumnNameStyle") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLColumnNameStyle(String) { var DEFAULT = "default"; var LONG = "long"; var SHORT = "short"; } ================================================ FILE: externs/air/flash/data/SQLColumnSchema.hx ================================================ package flash.data; extern class SQLColumnSchema { var allowNull(default, never):Bool; var autoIncrement(default, never):Bool; var dataType(default, never):String; var defaultCollationType(default, never):SQLCollationType; var name(default, never):String; var primaryKey(default, never):Bool; function new(name:String, primaryKey:Bool, allowNull:Bool, autoIncrement:Bool, dataType:String, defaultCollationType:SQLCollationType):Void; } ================================================ FILE: externs/air/flash/data/SQLConnection.hx ================================================ package flash.data; extern class SQLConnection extends flash.events.EventDispatcher { var autoCompact(default, never):Bool; var cacheSize:UInt; // default 2000 var columnNameStyle:SQLColumnNameStyle; var connected(default, never):Bool; var inTransaction(default, never):Bool; var lastInsertRowID(default, never):Float; var pageSize(default, never):UInt; var totalChanges(default, never):Float; function new():Void; function analyze(?resourceName:String, ?responder:flash.net.Responder):Void; function attach(name:String, ?reference:Dynamic, ?responder:flash.net.Responder, ?encryptionKey:flash.utils.ByteArray):Void; function begin(?option:String, ?responder:flash.net.Responder):Void; function cancel(?responder:flash.net.Responder):Void; function close(?responder:flash.net.Responder):Void; function commit(?responder:flash.net.Responder):Void; function compact(?responder:flash.net.Responder):Void; function deanalyze(?responder:flash.net.Responder):Void; function detach(name:String, ?responder:flash.net.Responder):Void; function getSchemaResult():SQLSchemaResult; function loadSchema(?type:Class, ?name:String, ?database:String = "main", ?includeColumnSchema:Bool = true, ?responder:flash.net.Responder):Void; function open(?reference:Dynamic, ?openMode:SQLMode = SQLMode.CREATE, ?autoCompact:Bool = false, ?pageSize:Int = 1024, ?encryptionKey:flash.utils.ByteArray):Void; function openAsync(?reference:Dynamic, ?openMode:SQLMode = SQLMode.CREATE, ?responder:flash.net.Responder, ?autoCompact:Bool = false, ?pageSize:Int = 1024, ?encryptionKey:flash.utils.ByteArray):Void; function reencrypt(newEncryptionKey:flash.utils.ByteArray, ?responder:flash.net.Responder):Void; function releaseSavepoint(?name:String, ?responder:flash.net.Responder):Void; function rollback(?responder:flash.net.Responder):Void; function rollbackToSavepoint(?name:String, ?responder:flash.net.Responder):Void; function setSavepoint(?name:String, ?responder:flash.net.Responder):Void; static var isSupported(default, never):Bool; } ================================================ FILE: externs/air/flash/data/SQLIndexSchema.hx ================================================ package flash.data; extern class SQLIndexSchema extends SQLSchema { var table(default, never):String; function new(database:String, name:String, sql:String, table:String):Void; } ================================================ FILE: externs/air/flash/data/SQLMode.hx ================================================ package flash.data; @:native("flash.data.SQLMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLMode(String) { var CREATE = "create"; var READ = "read"; var UPDATE = "update"; } ================================================ FILE: externs/air/flash/data/SQLResult.hx ================================================ package flash.data; extern class SQLResult { var complete(default, never):Bool; var data(default, never):Array; var lastInsertRowID(default, never):Float; var rowsAffected(default, never):Float; function new(?data:Array, ?rowsAffected:Float = 0.0, ?complete:Bool = true, ?rowID:Float = 0.0):Void; } ================================================ FILE: externs/air/flash/data/SQLSchema.hx ================================================ package flash.data; extern class SQLSchema { var database(default, never):String; var name(default, never):String; var sql(default, never):String; function new(database:String, name:String, sql:String):Void; } ================================================ FILE: externs/air/flash/data/SQLSchemaResult.hx ================================================ package flash.data; extern class SQLSchemaResult { var indices(default, never):Array; var tables(default, never):Array; var triggers(default, never):Array; var views(default, never):Array; function new(tables:Array, views:Array, indices:Array, triggers:Array):Void; } ================================================ FILE: externs/air/flash/data/SQLStatement.hx ================================================ package flash.data; extern class SQLStatement extends flash.events.EventDispatcher { var executing(default, never):Bool; var itemClass:Class; var parameters(default, never):Dynamic; var sqlConnection:SQLConnection; var text:String; function new():Void; function cancel():Void; function clearParameters():Void; function execute(?prefetch:Int = -1, ?responder:flash.net.Responder):Void; function getResult():SQLResult; function next(?prefetch:Int = -1, ?responder:flash.net.Responder):Void; } ================================================ FILE: externs/air/flash/data/SQLTableSchema.hx ================================================ package flash.data; extern class SQLTableSchema extends SQLSchema { var columns(default, never):Array; function new(database:String, name:String, sql:String, columns:Array):Void; } ================================================ FILE: externs/air/flash/data/SQLTransactionLockType.hx ================================================ package flash.data; @:native("flash.data.SQLTransactionLockType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLTransactionLockType(String) { var DEFERRED = "deferred"; var EXCLUSIVE = "exclusive"; var IMMEDIATE = "immediate"; } ================================================ FILE: externs/air/flash/data/SQLTriggerSchema.hx ================================================ package flash.data; extern class SQLTriggerSchema extends SQLSchema { var table(default, never):String; function new(database:String, name:String, sql:String, table:String):Void; } ================================================ FILE: externs/air/flash/data/SQLViewSchema.hx ================================================ package flash.data; extern class SQLViewSchema extends SQLTableSchema { function new(database:String, name:String, sql:String, columns:Array):Void; } ================================================ FILE: externs/air/flash/desktop/Clipboard.hx ================================================ package flash.desktop; @:require(flash10) extern class Clipboard { var formats(default, never):Array; #if air var supportsFilePromise(default, never):Bool; #end function clear():Void; function clearData(format:ClipboardFormats):Void; function getData(format:ClipboardFormats, ?transferMode:ClipboardTransferMode):flash.utils.Object; function hasFormat(format:ClipboardFormats):Bool; function setData(format:ClipboardFormats, data:flash.utils.Object, serializable:Bool = true):Bool; function setDataHandler(format:ClipboardFormats, handler:flash.utils.Function, serializable:Bool = true):Bool; static var generalClipboard(default, never):Clipboard; } ================================================ FILE: externs/air/flash/desktop/DockIcon.hx ================================================ package flash.desktop; extern class DockIcon extends InteractiveIcon { var menu:flash.display.NativeMenu; function new():Void; function bounce(?priority:NotificationType = NotificationType.INFORMATIONAL):Void; } ================================================ FILE: externs/air/flash/desktop/FilePromiseManager.hx ================================================ package flash.desktop; extern class FilePromiseManager extends flash.events.EventDispatcher { function new():Void; function addPromises(clipboard:Clipboard, dropDirectoryPath:String):Bool; static var ASYNC_FILE_PROMISE_DONE_EVENT(default, never):String; static var DATA_EVENT_TIMEOUT(default, never):Int; static var FILE_PROMISE_ERR_CLOSE(default, never):Int; static var FILE_PROMISE_ERR_OPEN(default, never):Int; static var FILE_PROMISE_ERR_TIMEOUT(default, never):Int; static function newFilePromiseErrorEvent(code:Int):flash.events.Event; } ================================================ FILE: externs/air/flash/desktop/FilePromiseWrapper.hx ================================================ package flash.desktop; extern class FilePromiseWrapper { var filePromise(default, never):IFilePromise; function new(fp:IFilePromise):Void; } ================================================ FILE: externs/air/flash/desktop/IFilePromise.hx ================================================ package flash.desktop; extern interface IFilePromise { var isAsync(default, never):Bool; var relativePath(default, never):String; function close():Void; function open():flash.utils.IDataInput; function reportError(e:flash.events.ErrorEvent):Void; } ================================================ FILE: externs/air/flash/desktop/Icon.hx ================================================ package flash.desktop; extern class Icon extends flash.events.EventDispatcher { var bitmaps:Array; function new():Void; } ================================================ FILE: externs/air/flash/desktop/InteractiveIcon.hx ================================================ package flash.desktop; extern class InteractiveIcon extends Icon { var height(default, never):Int; var width(default, never):Int; function new():Void; } ================================================ FILE: externs/air/flash/desktop/InvokeEventReason.hx ================================================ package flash.desktop; @:native("flash.desktop.InvokeEventReason") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract InvokeEventReason(String) { var LOGIN = "login"; var NOTIFICATION = "notification"; var OPEN_URL = "openUrl"; var STANDARD = "standard"; } ================================================ FILE: externs/air/flash/desktop/JSClipboard.hx ================================================ package flash.desktop; extern class JSClipboard { var clipboard(default, never):Clipboard; var dragOptions:NativeDragOptions; var dropEffect:String; var effectAllowed:String; var propagationStopped:Bool; var types(default, never):Array; function new(writable:Bool, forDragging:Bool, ?clipboard:Clipboard, ?dragOptions:NativeDragOptions):Void; function clearAllData():Void; function clearData(mimeType:String):Void; function getData(mimeType:String):Dynamic; function setData(mimeType:String, data:Dynamic):Bool; static function urisFromURIList(uriList:String):Array; } ================================================ FILE: externs/air/flash/desktop/MacFilePromiseWrapper.hx ================================================ package flash.desktop; extern class MacFilePromiseWrapper extends flash.events.EventDispatcher { function new(promise:IFilePromise, dropDirectory:flash.filesystem.File):Void; function open():Bool; } ================================================ FILE: externs/air/flash/desktop/NativeApplication.hx ================================================ package flash.desktop; extern class NativeApplication extends flash.events.EventDispatcher { var activeWindow(default, never):flash.display.NativeWindow; var applicationDescriptor(default, never):flash.xml.XML; var applicationID(default, never):String; var autoExit:Bool; var executeInBackground:Bool; var icon(default, never):InteractiveIcon; var idleThreshold:Int; var isCompiledAOT(default, never):Bool; var menu:flash.display.NativeMenu; var openedWindows(default, never):Array; var publisherID(default, never):String; var runtimePatchLevel(default, never):UInt; var runtimeVersion(default, never):String; var startAtLogin:Bool; var systemIdleMode:SystemIdleMode; var timeSinceLastUserInput(default, never):Int; function new():Void; function activate(?window:flash.display.NativeWindow):Void; function clear():Bool; function copy():Bool; function cut():Bool; function exit(?errorCode:Int):Void; function getDefaultApplication(extension:String):String; function isSetAsDefaultApplication(extension:String):Bool; function paste():Bool; function removeAsDefaultApplication(extension:String):Void; function selectAll():Bool; function setAsDefaultApplication(extension:String):Void; static var nativeApplication(default, never):NativeApplication; static var supportsDefaultApplication(default, never):Bool; static var supportsDockIcon(default, never):Bool; static var supportsMenu(default, never):Bool; static var supportsStartAtLogin(default, never):Bool; static var supportsSystemTrayIcon(default, never):Bool; } ================================================ FILE: externs/air/flash/desktop/NativeDragActions.hx ================================================ package flash.desktop; @:native("flash.desktop.NativeDragActions") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeDragActions(String) { var COPY = "copy"; var LINK = "link"; var MOVE = "move"; var NONE = "none"; } ================================================ FILE: externs/air/flash/desktop/NativeDragManager.hx ================================================ package flash.desktop; extern class NativeDragManager { static var dragInitiator(default, never):flash.display.InteractiveObject; static var dropAction:NativeDragActions; static var isDragging(default, never):Bool; static var isSupported(default, never):Bool; static function acceptDragDrop(target:flash.display.InteractiveObject):Void; static function doDrag(dragInitiator:flash.display.InteractiveObject, clipboard:Clipboard, ?dragImage:flash.display.BitmapData, ?offset:flash.geom.Point, ?allowedActions:NativeDragOptions):Void; } ================================================ FILE: externs/air/flash/desktop/NativeDragOptions.hx ================================================ package flash.desktop; extern class NativeDragOptions { var allowCopy:Bool; var allowLink:Bool; var allowMove:Bool; function new():Void; function toString():String; } ================================================ FILE: externs/air/flash/desktop/NativeProcess.hx ================================================ package flash.desktop; extern class NativeProcess extends flash.events.EventDispatcher { var running(default, never):Bool; var standardError(default, never):flash.utils.IDataInput; var standardInput(default, never):flash.utils.IDataOutput; var standardOutput(default, never):flash.utils.IDataInput; function new():Void; function closeInput():Void; function exit(force:Bool = false):Void; function start(info:NativeProcessStartupInfo):Void; static var isSupported(default, never):Bool; static function isValidExecutable(f:flash.filesystem.File):Bool; } ================================================ FILE: externs/air/flash/desktop/NativeProcessStartupInfo.hx ================================================ package flash.desktop; extern class NativeProcessStartupInfo { var arguments:flash.Vector; var executable:flash.filesystem.File; var workingDirectory:flash.filesystem.File; function new():Void; } ================================================ FILE: externs/air/flash/desktop/NativeWindowIcon.hx ================================================ package flash.desktop; extern class NativeWindowIcon extends InteractiveIcon { function new():Void; } ================================================ FILE: externs/air/flash/desktop/NotificationType.hx ================================================ package flash.desktop; @:native("flash.desktop.NotificationType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NotificationType(String) { var CRITICAL = "critical"; var INFORMATIONAL = "informational"; } ================================================ FILE: externs/air/flash/desktop/SystemIdleMode.hx ================================================ package flash.desktop; @:native("flash.desktop.SystemIdleMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SystemIdleMode(String) { var KEEP_AWAKE = "keepAwake"; var NORMAL = "normal"; } ================================================ FILE: externs/air/flash/desktop/SystemTrayIcon.hx ================================================ package flash.desktop; extern class SystemTrayIcon extends InteractiveIcon { var menu:flash.display.NativeMenu; var tooltip:String; function new():Void; static var MAX_TIP_LENGTH(default, never):Float; } ================================================ FILE: externs/air/flash/desktop/Updater.hx ================================================ package flash.desktop; extern class Updater { function new():Void; function update(airFile:flash.filesystem.File, version:String):Void; static var isSupported(default, never):Bool; } ================================================ FILE: externs/air/flash/display/DisplayObject.hx ================================================ package flash.display; extern class DisplayObject extends flash.events.EventDispatcher implements IBitmapDrawable { #if (haxe_ver < 4.3) var accessibilityProperties:flash.accessibility.AccessibilityProperties; var alpha:Float; var blendMode:BlendMode; @:require(flash10) var blendShader(never, default):Shader; var cacheAsBitmap:Bool; #if air var cacheAsBitmapMatrix:flash.geom.Matrix; #end var filters:Array; var height:Float; var loaderInfo(default, never):LoaderInfo; var mask:DisplayObject; var mouseX(default, never):Float; var mouseY(default, never):Float; var name:String; var opaqueBackground:Null; var parent(default, never):DisplayObjectContainer; var root(default, never):DisplayObject; var rotation:Float; @:require(flash10) var rotationX:Float; @:require(flash10) var rotationY:Float; @:require(flash10) var rotationZ:Float; var scale9Grid:flash.geom.Rectangle; var scaleX:Float; var scaleY:Float; @:require(flash10) var scaleZ:Float; var scrollRect:flash.geom.Rectangle; var stage(default, never):Stage; var transform:flash.geom.Transform; var visible:Bool; var width:Float; var x:Float; var y:Float; @:require(flash10) var z:Float; #else @:flash.property var accessibilityProperties:flash.accessibility.AccessibilityProperties; @:flash.property var alpha:Float; @:flash.property var blendMode:BlendMode; @:flash.property @:require(flash10) var blendShader(never, default):Shader; @:flash.property var cacheAsBitmap:Bool; #if air @:flash.property var cacheAsBitmapMatrix:flash.geom.Matrix; #end @:flash.property var filters(get, set):Array; @:flash.property var height(get, set):Float; @:flash.property var loaderInfo(get, never):LoaderInfo; @:flash.property var mask(get, set):DisplayObject; @:flash.property var mouseX(get, never):Float; @:flash.property var mouseY(get, never):Float; @:flash.property var name(get, set):String; @:flash.property var opaqueBackground(get, set):Null; @:flash.property var parent(get, never):DisplayObjectContainer; @:flash.property var root(get, never):DisplayObject; @:flash.property var rotation(get, set):Float; @:flash.property @:require(flash10) var rotationX(get, set):Float; @:flash.property @:require(flash10) var rotationY(get, set):Float; @:flash.property @:require(flash10) var rotationZ(get, set):Float; @:flash.property var scale9Grid(get, set):flash.geom.Rectangle; @:flash.property var scaleX(get, set):Float; @:flash.property var scaleY(get, set):Float; @:flash.property @:require(flash10) var scaleZ(get, set):Float; @:flash.property var scrollRect(get, set):flash.geom.Rectangle; @:flash.property var stage(get, never):Stage; @:flash.property var transform(get, set):flash.geom.Transform; @:flash.property var visible(get, set):Bool; @:flash.property var width(get, set):Float; @:flash.property var x(get, set):Float; @:flash.property var y(get, set):Float; @:flash.property @:require(flash10) var z(get, set):Float; #end function getBounds(targetCoordinateSpace:DisplayObject):flash.geom.Rectangle; function getRect(targetCoordinateSpace:DisplayObject):flash.geom.Rectangle; function globalToLocal(point:flash.geom.Point):flash.geom.Point; @:require(flash10) function globalToLocal3D(point:flash.geom.Point):flash.geom.Vector3D; function hitTestObject(obj:DisplayObject):Bool; function hitTestPoint(x:Float, y:Float, shapeFlag:Bool = false):Bool; @:require(flash10) function local3DToGlobal(point3d:flash.geom.Vector3D):flash.geom.Point; function localToGlobal(point:flash.geom.Point):flash.geom.Point; #if (haxe_ver >= 4.3) private function get_accessibilityProperties():flash.accessibility.AccessibilityProperties; private function get_alpha():Float; private function get_blendMode():BlendMode; private function get_cacheAsBitmap():Bool; private function get_filters():Array; private function get_height():Float; private function get_loaderInfo():LoaderInfo; private function get_mask():DisplayObject; private function get_metaData():Dynamic; private function get_mouseX():Float; private function get_mouseY():Float; private function get_name():String; private function get_opaqueBackground():Null; private function get_parent():DisplayObjectContainer; private function get_root():DisplayObject; private function get_rotation():Float; private function get_rotationX():Float; private function get_rotationY():Float; private function get_rotationZ():Float; private function get_scale9Grid():flash.geom.Rectangle; private function get_scaleX():Float; private function get_scaleY():Float; private function get_scaleZ():Float; private function get_scrollRect():flash.geom.Rectangle; private function get_stage():Stage; private function get_transform():flash.geom.Transform; private function get_visible():Bool; private function get_width():Float; private function get_x():Float; private function get_y():Float; private function get_z():Float; #if air private function get_cacheAsBitmapMatrix():flash.geom.Matrix; #end private function set_accessibilityProperties(value:flash.accessibility.AccessibilityProperties):flash.accessibility.AccessibilityProperties; private function set_alpha(value:Float):Float; private function set_blendMode(value:BlendMode):BlendMode; private function set_blendShader(value:Shader):Shader; private function set_cacheAsBitmap(value:Bool):Bool; private function set_filters(value:Array):Array; private function set_height(value:Float):Float; private function set_mask(value:DisplayObject):DisplayObject; private function set_metaData(value:Dynamic):Dynamic; private function set_name(value:String):String; private function set_opaqueBackground(value:Null):Null; private function set_rotation(value:Float):Float; private function set_rotationX(value:Float):Float; private function set_rotationY(value:Float):Float; private function set_rotationZ(value:Float):Float; private function set_scale9Grid(value:flash.geom.Rectangle):flash.geom.Rectangle; private function set_scaleX(value:Float):Float; private function set_scaleY(value:Float):Float; private function set_scaleZ(value:Float):Float; private function set_scrollRect(value:flash.geom.Rectangle):flash.geom.Rectangle; private function set_transform(value:flash.geom.Transform):flash.geom.Transform; private function set_visible(value:Bool):Bool; private function set_width(value:Float):Float; private function set_x(value:Float):Float; private function set_y(value:Float):Float; private function set_z(value:Float):Float; #if air private function set_cacheAsBitmapMatrix(value:flash.geom.Matrix):flash.geom.Matrix; #end #end } ================================================ FILE: externs/air/flash/display/InteractiveObject.hx ================================================ package flash.display; extern class InteractiveObject extends DisplayObject { #if (haxe_ver < 4.3) var accessibilityImplementation:flash.accessibility.AccessibilityImplementation; // var contextMenu : #if air flash.display.NativeMenu #else flash.ui.ContextMenu #end; var contextMenu:NativeMenu; var doubleClickEnabled:Bool; var focusRect:Dynamic; var mouseEnabled:Bool; @:require(flash11) var needsSoftKeyboard:Bool; @:require(flash11) var softKeyboardInputAreaOfInterest:flash.geom.Rectangle; var tabEnabled:Bool; var tabIndex:Int; #else @:flash.property var accessibilityImplementation(get, set):flash.accessibility.AccessibilityImplementation; // @:flash.property var contextMenu : #if air flash.display.NativeMenu #else flash.ui.ContextMenu #end; @:flash.property var contextMenu(get, set):NativeMenu; @:flash.property var doubleClickEnabled(get, set):Bool; @:flash.property var focusRect(get, set):Dynamic; @:flash.property var mouseEnabled(get, set):Bool; @:flash.property @:require(flash11) var needsSoftKeyboard(get, set):Bool; @:flash.property @:require(flash11) var softKeyboardInputAreaOfInterest(get, set):flash.geom.Rectangle; @:flash.property var tabEnabled(get, set):Bool; @:flash.property var tabIndex(get, set):Int; #end function new():Void; @:require(flash11) function requestSoftKeyboard():Bool; #if (haxe_ver >= 4.3) private function get_accessibilityImplementation():flash.accessibility.AccessibilityImplementation; private function get_contextMenu():#if air flash.display.NativeMenu #else flash.ui.ContextMenu #end; private function get_doubleClickEnabled():Bool; private function get_focusRect():Dynamic; private function get_mouseEnabled():Bool; private function get_needsSoftKeyboard():Bool; private function get_softKeyboardInputAreaOfInterest():flash.geom.Rectangle; private function get_tabEnabled():Bool; private function get_tabIndex():Int; private function set_accessibilityImplementation(value:flash.accessibility.AccessibilityImplementation):flash.accessibility.AccessibilityImplementation; private function set_contextMenu(value:#if air flash.display.NativeMenu #else flash.ui.ContextMenu #end):#if air flash.display.NativeMenu #else flash.ui.ContextMenu #end; private function set_doubleClickEnabled(value:Bool):Bool; private function set_focusRect(value:Dynamic):Dynamic; private function set_mouseEnabled(value:Bool):Bool; private function set_needsSoftKeyboard(value:Bool):Bool; private function set_softKeyboardInputAreaOfInterest(value:flash.geom.Rectangle):flash.geom.Rectangle; private function set_tabEnabled(value:Bool):Bool; private function set_tabIndex(value:Int):Int; #end } ================================================ FILE: externs/air/flash/display/Loader.hx ================================================ package flash.display; extern class Loader extends DisplayObjectContainer { #if (haxe_ver < 4.3) var content(default, never):DisplayObject; var contentLoaderInfo(default, never):LoaderInfo; @:require(flash10_1) var uncaughtErrorEvents(default, never):flash.events.UncaughtErrorEvents; #else @:flash.property var content(get, never):DisplayObject; @:flash.property var contentLoaderInfo(get, never):LoaderInfo; @:flash.property @:require(flash10_1) var uncaughtErrorEvents(get, never):flash.events.UncaughtErrorEvents; #end function new():Void; function close():Void; function load(request:flash.net.URLRequest, ?context:flash.system.LoaderContext):Void; function loadBytes(bytes:flash.utils.ByteArray, ?context:flash.system.LoaderContext):Void; #if air function loadFilePromise(promise:flash.desktop.IFilePromise, ?context:flash.system.LoaderContext):Void; #end function unload():Void; @:require(flash10) function unloadAndStop(gc:Bool = true):Void; #if (haxe_ver >= 4.3) private function get_content():DisplayObject; private function get_contentLoaderInfo():LoaderInfo; private function get_uncaughtErrorEvents():flash.events.UncaughtErrorEvents; #end } ================================================ FILE: externs/air/flash/display/NativeMenu.hx ================================================ package flash.display; @:require(flash10_1) extern class NativeMenu extends flash.events.EventDispatcher { #if (haxe_ver < 4.3) #if air var items:Array; var numItems(default, never):Int; var parent(default, never):NativeMenu; static var isSupported(default, never):Bool; #end #else #if air @:flash.property var items(get, set):Array; @:flash.property var numItems(get, never):Int; @:flash.property var parent(get, never):NativeMenu; @:flash.property static var isSupported(get, never):Bool; #end #end function new():Void; #if air function addItem(item:NativeMenuItem):NativeMenuItem; function addItemAt(item:NativeMenuItem, index:Int):NativeMenuItem; function addSubmenu(submenu:NativeMenu, label:String):NativeMenuItem; function addSubmenuAt(submenu:NativeMenu, index:Int, label:String):NativeMenuItem; function clone():NativeMenu; function containsItem(item:NativeMenuItem):Bool; function dispatchContextMenuSelect(event:flash.events.MouseEvent):Dynamic; function display(stage:Stage, stageX:Float, stageY:Float):Void; function getItemAt(index:Int):NativeMenuItem; function getItemByName(name:String):NativeMenuItem; function getItemIndex(item:NativeMenuItem):Int; function removeAllItems():Void; function removeItem(item:NativeMenuItem):NativeMenuItem; function removeItemAt(index:Int):NativeMenuItem; function setItemIndex(item:NativeMenuItem, index:Int):Void; #end #if (haxe_ver >= 4.3) #if air private function get_items():Array; private function get_numItems():Int; private function get_parent():NativeMenu; private function set_items(value:Array):Array; private static function get_isSupported():Bool; #end #end } ================================================ FILE: externs/air/flash/display/NativeMenuItem.hx ================================================ package flash.display; @:require(flash10_1) extern class NativeMenuItem extends flash.events.EventDispatcher { #if (haxe_ver < 4.3) var checked:Bool; var data:Dynamic; var enabled:Bool; var isSeparator(default, never):Bool; var keyEquivalent:String; var keyEquivalentModifiers:Array; var label:String; var menu(default, never):NativeMenu; var mnemonicIndex:Int; var name:String; var submenu:NativeMenu; #else @:flash.property var checked(get, set):Bool; @:flash.property var data(get, set):Dynamic; @:flash.property var enabled(get, set):Bool; @:flash.property var isSeparator(get, never):Bool; @:flash.property var keyEquivalent(get, set):String; @:flash.property var keyEquivalentModifiers(get, set):Array; @:flash.property var label(get, set):String; @:flash.property var menu(get, never):NativeMenu; @:flash.property var mnemonicIndex(get, set):Int; @:flash.property var name(get, set):String; @:flash.property var submenu(get, set):NativeMenu; #end function new(?label:String = "", ?isSeparator:Bool = false):Void; function clone():NativeMenuItem; override function toString():String; #if (haxe_ver >= 4.3) private function get_checked():Bool; private function get_data():Dynamic; private function get_enabled():Bool; private function get_isSeparator():Bool; private function get_keyEquivalent():String; private function get_keyEquivalentModifiers():Array; private function get_label():String; private function get_menu():NativeMenu; private function get_mnemonicIndex():Int; private function get_name():String; private function get_submenu():NativeMenu; private function set_checked(value:Bool):Bool; private function set_data(value:Dynamic):Dynamic; private function set_enabled(value:Bool):Bool; private function set_keyEquivalent(value:String):String; private function set_keyEquivalentModifiers(value:Array):Array; private function set_label(value:String):String; private function set_mnemonicIndex(value:Int):Int; private function set_name(value:String):String; private function set_submenu(value:NativeMenu):NativeMenu; #end } ================================================ FILE: externs/air/flash/display/NativeWindow.hx ================================================ package flash.display; extern class NativeWindow extends flash.events.EventDispatcher { #if (haxe_ver < 4.3) var active(default, never):Bool; var alwaysInFront:Bool; var bounds:flash.geom.Rectangle; var closed(default, never):Bool; var displayState(default, never):NativeWindowDisplayState; var height:Float; var maxSize:flash.geom.Point; var maximizable(default, never):Bool; var menu:NativeMenu; var minSize:flash.geom.Point; var minimizable(default, never):Bool; var owner(default, never):NativeWindow; var renderMode(default, never):NativeWindowRenderMode; var resizable(default, never):Bool; var stage(default, never):Stage; var systemChrome(default, never):NativeWindowSystemChrome; var title:String; var transparent(default, never):Bool; var type(default, never):NativeWindowType; var visible:Bool; var width:Float; var x:Float; var y:Float; static var isSupported(default, never):Bool; static var supportsMenu(default, never):Bool; static var supportsNotification(default, never):Bool; static var supportsTransparency(default, never):Bool; static var systemMaxSize(default, never):flash.geom.Point; static var systemMinSize(default, never):flash.geom.Point; #else @:flash.property var active(get, never):Bool; @:flash.property var alwaysInFront(get, set):Bool; @:flash.property var bounds(get, set):flash.geom.Rectangle; @:flash.property var closed(get, never):Bool; @:flash.property var displayState(get, never):NativeWindowDisplayState; @:flash.property var height(get, set):Float; @:flash.property var maxSize(get, set):flash.geom.Point; @:flash.property var maximizable(get, never):Bool; @:flash.property var menu(get, set):NativeMenu; @:flash.property var minSize(get, set):flash.geom.Point; @:flash.property var minimizable(get, never):Bool; @:flash.property var owner(get, never):NativeWindow; @:flash.property var renderMode(get, never):NativeWindowRenderMode; @:flash.property var resizable(get, never):Bool; @:flash.property var stage(get, never):Stage; @:flash.property var systemChrome(get, never):NativeWindowSystemChrome; @:flash.property var title(get, set):String; @:flash.property var transparent(get, never):Bool; @:flash.property var type(get, never):NativeWindowType; @:flash.property var visible(get, set):Bool; @:flash.property var width(get, set):Float; @:flash.property var x(get, set):Float; @:flash.property var y(get, set):Float; @:flash.property static var isSupported(get, never):Bool; @:flash.property static var supportsMenu(get, never):Bool; @:flash.property static var supportsNotification(get, never):Bool; @:flash.property static var supportsTransparency(get, never):Bool; @:flash.property static var systemMaxSize(get, never):flash.geom.Point; @:flash.property static var systemMinSize(get, never):flash.geom.Point; #end function new(initOptions:NativeWindowInitOptions):Void; function activate():Void; function close():Void; function globalToScreen(globalPoint:flash.geom.Point):flash.geom.Point; function listOwnedWindows():flash.Vector; function maximize():Void; function minimize():Void; function notifyUser(type:flash.desktop.NotificationType):Void; function orderInBackOf(window:NativeWindow):Bool; function orderInFrontOf(window:NativeWindow):Bool; function orderToBack():Bool; function orderToFront():Bool; function restore():Void; function startMove():Bool; function startResize(?edgeOrCorner:NativeWindowResize = NativeWindowResize.BOTTOM_RIGHT):Bool; #if (haxe_ver >= 4.3) private function get_active():Bool; private function get_alwaysInFront():Bool; private function get_bounds():flash.geom.Rectangle; private function get_closed():Bool; private function get_displayState():NativeWindowDisplayState; private function get_height():Float; private function get_maxSize():flash.geom.Point; private function get_maximizable():Bool; private function get_menu():NativeMenu; private function get_minSize():flash.geom.Point; private function get_minimizable():Bool; private function get_owner():NativeWindow; private function get_renderMode():NativeWindowRenderMode; private function get_resizable():Bool; private function get_stage():Stage; private function get_systemChrome():NativeWindowSystemChrome; private function get_title():String; private function get_transparent():Bool; private function get_type():NativeWindowType; private function get_visible():Bool; private function get_width():Float; private function get_x():Float; private function get_y():Float; private function set_alwaysInFront(value:Bool):Bool; private function set_bounds(value:flash.geom.Rectangle):flash.geom.Rectangle; private function set_height(value:Float):Float; private function set_maxSize(value:flash.geom.Point):flash.geom.Point; private function set_maximizable(value:Bool):Bool; private function set_menu(value:NativeMenu):NativeMenu; private function set_minSize(value:flash.geom.Point):flash.geom.Point; private function set_minimizable(value:Bool):Bool; private function set_title(value:String):String; private function set_visible(value:Bool):Bool; private function set_width(value:Float):Float; private function set_x(value:Float):Float; private function set_y(value:Float):Float; private static function get_isSupported():Bool; private static function get_supportsMenu():Bool; private static function get_supportsNotification():Bool; private static function get_supportsTransparency():Bool; private static function get_systemMaxSize():flash.geom.Point; private static function get_systemMinSize():flash.geom.Point; #end } ================================================ FILE: externs/air/flash/display/NativeWindowDisplayState.hx ================================================ package flash.display; @:native("flash.display.NativeWindowDisplayState") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowDisplayState(String) { var MAXIMIZED = "maximized"; var MINIMIZED = "minimized"; var NORMAL = "normal"; } ================================================ FILE: externs/air/flash/display/NativeWindowInitOptions.hx ================================================ package flash.display; extern class NativeWindowInitOptions { #if (haxe_ver < 4.3) var maximizable:Bool; var minimizable:Bool; var owner:NativeWindow; var renderMode:NativeWindowRenderMode; var resizable:Bool; var systemChrome:NativeWindowSystemChrome; var transparent:Bool; var type:NativeWindowType; #else @:flash.property var maximizable(get, set):Bool; @:flash.property var minimizable(get, set):Bool; @:flash.property var owner(get, set):NativeWindow; @:flash.property var renderMode(get, set):NativeWindowRenderMode; @:flash.property var resizable(get, set):Bool; @:flash.property var systemChrome(get, set):NativeWindowSystemChrome; @:flash.property var transparent(get, set):Bool; @:flash.property var type(get, set):NativeWindowType; #end function new():Void; #if (haxe_ver >= 4.3) private function get_maximizable():Bool; private function get_minimizable():Bool; private function get_owner():NativeWindow; private function get_renderMode():NativeWindowRenderMode; private function get_resizable():Bool; private function get_systemChrome():NativeWindowSystemChrome; private function get_transparent():Bool; private function get_type():NativeWindowType; private function set_maximizable(value:Bool):Bool; private function set_minimizable(value:Bool):Bool; private function set_owner(value:NativeWindow):NativeWindow; private function set_renderMode(value:NativeWindowRenderMode):NativeWindowRenderMode; private function set_resizable(value:Bool):Bool; private function set_systemChrome(value:NativeWindowSystemChrome):NativeWindowSystemChrome; private function set_transparent(value:Bool):Bool; private function set_type(value:NativeWindowType):NativeWindowType; #end } ================================================ FILE: externs/air/flash/display/NativeWindowRenderMode.hx ================================================ package flash.display; @:native("flash.display.NativeWindowRenderMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowRenderMode(String) { var AUTO = "auto"; var CPU = "cpu"; var DIRECT = "direct"; var GPU = "gpu"; } ================================================ FILE: externs/air/flash/display/NativeWindowResize.hx ================================================ package flash.display; @:native("flash.display.NativeWindowResize") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowResize(String) { var BOTTOM = "bottom"; var BOTTOM_LEFT = "bottomLeft"; var BOTTOM_RIGHT = "bottomRight"; var LEFT = "left"; var NONE = "none"; var RIGHT = "right"; var TOP = "top"; var TOP_LEFT = "topLeft"; var TOP_RIGHT = "topRight"; } ================================================ FILE: externs/air/flash/display/NativeWindowSystemChrome.hx ================================================ package flash.display; @:native("flash.display.NativeWindowSystemChrome") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowSystemChrome(String) { var ALTERNATE = "alternate"; var NONE = "none"; var STANDARD = "standard"; } ================================================ FILE: externs/air/flash/display/NativeWindowType.hx ================================================ package flash.display; @:native("flash.display.NativeWindowType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowType(String) { var LIGHTWEIGHT = "lightweight"; var NORMAL = "normal"; var UTILITY = "utility"; } ================================================ FILE: externs/air/flash/display/Screen.hx ================================================ package flash.display; extern class Screen extends flash.events.EventDispatcher { #if (haxe_ver < 4.3) var bounds(default, never):flash.geom.Rectangle; var colorDepth(default, never):Int; var visibleBounds(default, never):flash.geom.Rectangle; static var mainScreen(default, never):Screen; static var screens(default, never):Array; #else @:flash.property var bounds(get, never):flash.geom.Rectangle; @:flash.property var colorDepth(get, never):Int; @:flash.property var visibleBounds(get, never):flash.geom.Rectangle; @:flash.property static var mainScreen(get, never):Screen; @:flash.property static var screens(get, never):Array; #end function new():Void; static function getScreensForRectangle(rect:flash.geom.Rectangle):Array; #if (haxe_ver >= 4.3) private function get_bounds():flash.geom.Rectangle; private function get_colorDepth():Int; private function get_visibleBounds():flash.geom.Rectangle; private static function get_mainScreen():Screen; private static function get_screens():Array; #end } ================================================ FILE: externs/air/flash/display/Stage.hx ================================================ package flash.display; extern class Stage extends DisplayObjectContainer { #if (haxe_ver < 4.3) var align:StageAlign; var allowsFullScreen(default, never):Bool; @:require(flash11_3) var allowsFullScreenInteractive(default, never):Bool; #if air var autoOrients:Bool; #end var browserZoomFactor(default, never):Float; @:require(flash10_2) var color:UInt; @:require(flash10) var colorCorrection:ColorCorrection; @:require(flash10) var colorCorrectionSupport(default, never):ColorCorrectionSupport; @:require(flash11_4) var contentsScaleFactor(default, never):Float; #if air var deviceOrientation(default, never):StageOrientation; #end @:require(flash11) var displayContextInfo(default, never):String; // var constructor : Dynamic; var displayState:StageDisplayState; var focus:InteractiveObject; var frameRate:Float; var fullScreenHeight(default, never):UInt; var fullScreenSourceRect:flash.geom.Rectangle; var fullScreenWidth(default, never):UInt; @:require(flash11_2) var mouseLock:Bool; #if air var nativeWindow(default, never):NativeWindow; var orientation(default, never):StageOrientation; #end var quality:StageQuality; var scaleMode:StageScaleMode; var showDefaultContextMenu:Bool; @:require(flash11) var softKeyboardRect(default, never):flash.geom.Rectangle; @:require(flash11) var stage3Ds(default, never):flash.Vector; var stageFocusRect:Bool; var stageHeight:Int; @:require(flash10_2) var stageVideos(default, never):flash.Vector; var stageWidth:Int; #if air var supportedOrientations(default, never):flash.Vector; #end @:require(flash10_1) var wmodeGPU(default, never):Bool; static var supportsOrientationChange(default, never):Bool; #else @:flash.property var align(get, set):StageAlign; @:flash.property var allowsFullScreen(get, never):Bool; @:flash.property @:require(flash11_3) var allowsFullScreenInteractive(get, never):Bool; #if air @:flash.property var autoOrients(get, set):Bool; #end @:flash.property var browserZoomFactor(get, never):Float; @:flash.property @:require(flash10_2) var color(get, set):UInt; @:flash.property @:require(flash10) var colorCorrection(get, set):ColorCorrection; @:flash.property @:require(flash10) var colorCorrectionSupport(get, never):ColorCorrectionSupport; @:flash.property @:require(flash11_4) var contentsScaleFactor(get, never):Float; #if air @:flash.property var deviceOrientation(get, never):StageOrientation; #end @:flash.property @:require(flash11) var displayContextInfo(get, never):String; @:flash.property var displayState(get, set):StageDisplayState; @:flash.property var focus(get, set):InteractiveObject; @:flash.property var frameRate(get, set):Float; @:flash.property var fullScreenHeight(get, never):UInt; @:flash.property var fullScreenSourceRect(get, set):flash.geom.Rectangle; @:flash.property var fullScreenWidth(get, never):UInt; @:flash.property @:require(flash11_2) var mouseLock(get, set):Bool; #if air @:flash.property var nativeWindow(get, never):NativeWindow; @:flash.property var orientation(get, never):StageOrientation; #end @:flash.property var quality(get, set):StageQuality; @:flash.property var scaleMode(get, set):StageScaleMode; @:flash.property var showDefaultContextMenu(get, set):Bool; @:flash.property @:require(flash11) var softKeyboardRect(get, never):flash.geom.Rectangle; @:flash.property @:require(flash11) var stage3Ds(get, never):flash.Vector; @:flash.property var stageFocusRect(get, set):Bool; @:flash.property var stageHeight(get, set):Int; @:flash.property @:require(flash10_2) var stageVideos(get, never):flash.Vector; @:flash.property var stageWidth(get, set):Int; #if air @:flash.property var supportedOrientations(get, never):flash.Vector; #end @:flash.property @:require(flash10_1) var wmodeGPU(get, never):Bool; @:flash.property static var supportsOrientationChange(get, never):Bool; #end #if air function assignFocus(objectToFocus:InteractiveObject, direction:FocusDirection):Void; #end function invalidate():Void; function isFocusInaccessible():Bool; #if air function setAspectRatio(newAspectRatio:StageAspectRatio):Void; function setOrientation(newOrientation:StageOrientation):Void; #end #if (haxe_ver >= 4.3) private function get_align():StageAlign; private function get_allowsFullScreen():Bool; private function get_allowsFullScreenInteractive():Bool; private function get_browserZoomFactor():Float; private function get_color():UInt; private function get_colorCorrection():ColorCorrection; private function get_colorCorrectionSupport():ColorCorrectionSupport; private function get_constructor():Dynamic; private function get_contentsScaleFactor():Float; private function get_displayContextInfo():String; private function get_displayState():StageDisplayState; private function get_focus():InteractiveObject; private function get_frameRate():Float; private function get_fullScreenHeight():UInt; private function get_fullScreenSourceRect():flash.geom.Rectangle; private function get_fullScreenWidth():UInt; private function get_mouseLock():Bool; private function get_quality():StageQuality; private function get_scaleMode():StageScaleMode; private function get_showDefaultContextMenu():Bool; private function get_softKeyboardRect():flash.geom.Rectangle; private function get_stage3Ds():Vector; private function get_stageFocusRect():Bool; private function get_stageHeight():Int; private function get_stageVideos():Vector; private function get_stageWidth():Int; private function get_wmodeGPU():Bool; private function set_align(value:StageAlign):StageAlign; private function set_color(value:UInt):UInt; private function set_colorCorrection(value:ColorCorrection):ColorCorrection; private function set_constructor(value:Dynamic):Dynamic; private function set_displayState(value:StageDisplayState):StageDisplayState; private function set_focus(value:InteractiveObject):InteractiveObject; private function set_frameRate(value:Float):Float; private function set_fullScreenSourceRect(value:flash.geom.Rectangle):flash.geom.Rectangle; private function set_mouseLock(value:Bool):Bool; private function set_quality(value:StageQuality):StageQuality; private function set_scaleMode(value:StageScaleMode):StageScaleMode; private function set_showDefaultContextMenu(value:Bool):Bool; private function set_stageFocusRect(value:Bool):Bool; private function set_stageHeight(value:Int):Int; private function set_stageWidth(value:Int):Int; #if air private static function get_supportsOrientationChange():Bool; private function get_autoOrients():Bool; private function get_deviceOrientation():StageOrientation; private function get_nativeWindow():NativeWindow; private function get_orientation():StageOrientation; private function get_supportedOrientations():Vector; private function get_vsyncEnabled():Bool; private function set_autoOrients(value:Bool):Bool; private function set_vsyncEnabled(value:Bool):Bool; #end #end } ================================================ FILE: externs/air/flash/display/StageAspectRatio.hx ================================================ package flash.display; @:native("flash.display.StageAspectRatio") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract StageAspectRatio(String) { var ANY = "any"; var LANDSCAPE = "landscape"; var PORTRAIT = "portrait"; } ================================================ FILE: externs/air/flash/display/StageOrientation.hx ================================================ package flash.display; @:native("flash.display.StageOrientation") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract StageOrientation(String) { var DEFAULT = "default"; var ROTATED_LEFT = "rotatedLeft"; var ROTATED_RIGHT = "rotatedRight"; var UNKNOWN = "unknown"; var UPSIDE_DOWN = "upsideDown"; } ================================================ FILE: externs/air/flash/display3D/Context3DProfile.hx ================================================ package flash.display3D; @:native("flash.display3D.Context3DProfile") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract Context3DProfile(String) { var BASELINE = "baseline"; var BASELINE_CONSTRAINED = "baselineConstrained"; var BASELINE_EXTENDED = "baselineExtended"; var STANDARD = "standard"; var STANDARD_CONSTRAINED = "standardConstrained"; var STANDARD_EXTENDED = "standardExtended"; #if air var ENHANCED = "enhanced"; #end } ================================================ FILE: externs/air/flash/errors/PermissionError.hx ================================================ package flash.errors; extern class PermissionError extends Error { function new(message:String, id:Int):Void; function toString():String; } ================================================ FILE: externs/air/flash/errors/SQLError.hx ================================================ package flash.errors; extern class SQLError extends flash.errors.Error { var detailArguments(default, never):Array; var detailID(default, never):Int; var details(default, never):String; var operation(default, never):SQLErrorOperation; function new(operation:SQLErrorOperation, ?details:String = "", ?message:String = "", ?id:Int = 0, ?detailID:Int = -1, ?detailArgs:Array):Void; function toString():String; } ================================================ FILE: externs/air/flash/errors/SQLErrorOperation.hx ================================================ package flash.errors; @:native("flash.errors.SQLErrorOperation") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLErrorOperation(String) { var ANALYZE = "analyze"; var ATTACH = "attach"; var BEGIN = "begin"; var CLOSE = "close"; var COMMIT = "commit"; var COMPACT = "compact"; var DEANALYZE = "deanalyze"; var DETACH = "detach"; var EXECUTE = "execute"; var OPEN = "open"; var REENCRYPT = "reencrypt"; var RELEASE_SAVEPOINT = "releaseSavepoint"; var ROLLBACK = "rollback"; var ROLLBACK_TO_SAVEPOINT = "rollbackToSavepoint"; var SCHEMA = "schema"; var SET_SAVEPOINT = "setSavepoint"; } ================================================ FILE: externs/air/flash/events/BrowserInvokeEvent.hx ================================================ package flash.events; extern class BrowserInvokeEvent extends Event { var arguments(default, never):Array; var isHTTPS(default, never):Bool; var isUserEvent(default, never):Bool; var sandboxType(default, never):String; var securityDomain(default, never):String; function new(type:String, bubbles:Bool, cancelable:Bool, arguments:Array, sandboxType:String, securityDomain:String, isHTTPS:Bool, isUserEvent:Bool):Void; static var BROWSER_INVOKE(default, never):String; } ================================================ FILE: externs/air/flash/events/DNSResolverEvent.hx ================================================ package flash.events; extern class DNSResolverEvent extends Event { var host:String; var resourceRecords:Array; function new(type:String, bubbles:Bool = "false", cancelable:Bool = false, host:String = "", ?resourceRecords:Array):Void; static var LOOKUP(default, never):String; } ================================================ FILE: externs/air/flash/events/DRMStatusEvent.hx ================================================ package flash.events; @:require(flash10_1) extern class DRMStatusEvent extends Event { var contentData:flash.net.drm.DRMContentData; #if air var detail(default, never):String; var isAnonymous(default, never):Bool; var isAvailableOffline(default, never):Bool; #end var isLocal:Bool; #if air var offlineLeasePeriod(default, never):UInt; var policies(default, never):flash.utils.Object; #end var voucher:flash.net.drm.DRMVoucher; #if air var voucherEndDate(default, never):Date; #end function new(?type:String, bubbles:Bool = false, cancelable:Bool = false, ?inMetadata:flash.net.drm.DRMContentData, ?inVoucher:flash.net.drm.DRMVoucher, inLocal:Bool = false):Void; static var DRM_STATUS(default, never):String; } ================================================ FILE: externs/air/flash/events/DatagramSocketDataEvent.hx ================================================ package flash.events; extern class DatagramSocketDataEvent extends Event { var data:flash.utils.ByteArray; var dstAddress:String; var dstPort:Int; var srcAddress:String; var srcPort:Int; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, srcAddress:String = "", srcPort:Int = 0, dstAddress:String = "", dstPort:Int = 0, ?data:flash.utils.ByteArray):Void; static var DATA(default, never):String; } ================================================ FILE: externs/air/flash/events/DeviceRotationEvent.hx ================================================ package flash.events; extern class DeviceRotationEvent extends Event { var pitch:Float; var quaternion:Array; var roll:Float; var timestamp:Float; var yaw:Float; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, timestamp:Float = 0, roll:Float = 0, pitch:Float = 0, yaw:Float = 0, ?quaternion:Array):Void; static var UPDATE(default, never):String; } ================================================ FILE: externs/air/flash/events/Event.hx ================================================ package flash.events; extern class Event { var bubbles(default, never):Bool; var cancelable(default, never):Bool; var currentTarget(default, never):Dynamic; var eventPhase(default, never):EventPhase; var target(default, never):Dynamic; var type(default, never):String; function new(type:String, bubbles:Bool = false, cancelable:Bool = false):Void; function clone():Event; function formatToString(className:String, ?p1:Dynamic, ?p2:Dynamic, ?p3:Dynamic, ?p4:Dynamic, ?p5:Dynamic):String; function isDefaultPrevented():Bool; function preventDefault():Void; function stopImmediatePropagation():Void; function stopPropagation():Void; function toString():String; static var ACTIVATE(default, never):String; static var ADDED(default, never):String; static var ADDED_TO_STAGE(default, never):String; static var BROWSER_ZOOM_CHANGE(default, never):String; static var CANCEL(default, never):String; static var CHANGE(default, never):String; static var CHANNEL_MESSAGE(default, never):String; static var CHANNEL_STATE(default, never):String; @:require(flash10) static var CLEAR(default, never):String; static var CLOSE(default, never):String; #if air static var CLOSING(default, never):String; #end static var COMPLETE(default, never):String; static var CONNECT(default, never):String; @:require(flash11) static var CONTEXT3D_CREATE(default, never):String; @:require(flash10) static var COPY(default, never):String; @:require(flash10) static var CUT(default, never):String; static var DEACTIVATE(default, never):String; #if air static var DISPLAYING(default, never):String; #end static var ENTER_FRAME(default, never):String; #if air static var EXITING(default, never):String; #end @:require(flash10) static var EXIT_FRAME(default, never):String; @:require(flash10) static var FRAME_CONSTRUCTED(default, never):String; @:require(flash11_3) static var FRAME_LABEL(default, never):String; static var FULLSCREEN(default, never):String; #if air static var HTML_BOUNDS_CHANGE(default, never):String; static var HTML_DOM_INITIALIZE(default, never):String; static var HTML_RENDER(default, never):String; #end static var ID3(default, never):String; static var INIT(default, never):String; #if air static var LOCATION_CHANGE(default, never):String; #end static var MOUSE_LEAVE(default, never):String; #if air static var NETWORK_CHANGE(default, never):String; #end static var OPEN(default, never):String; @:require(flash10) static var PASTE(default, never):String; #if air static var PREPARING(default, never):String; #end static var REMOVED(default, never):String; static var REMOVED_FROM_STAGE(default, never):String; static var RENDER(default, never):String; static var RESIZE(default, never):String; static var SCROLL(default, never):String; static var SELECT(default, never):String; @:require(flash10) static var SELECT_ALL(default, never):String; static var SOUND_COMPLETE(default, never):String; #if air static var STANDARD_ERROR_CLOSE(default, never):String; static var STANDARD_INPUT_CLOSE(default, never):String; static var STANDARD_OUTPUT_CLOSE(default, never):String; #end @:require(flash11_3) static var SUSPEND(default, never):String; static var TAB_CHILDREN_CHANGE(default, never):String; static var TAB_ENABLED_CHANGE(default, never):String; static var TAB_INDEX_CHANGE(default, never):String; @:require(flash11_3) static var TEXTURE_READY(default, never):String; @:require(flash11) static var TEXT_INTERACTION_MODE_CHANGE(default, never):String; static var UNLOAD(default, never):String; #if air static var USER_IDLE(default, never):String; static var USER_PRESENT(default, never):String; #end static var VIDEO_FRAME(default, never):String; static var WORKER_STATE(default, never):String; } ================================================ FILE: externs/air/flash/events/FileListEvent.hx ================================================ package flash.events; extern class FileListEvent extends Event { var files:Array; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?files:Array):Void; static var DIRECTORY_LISTING(default, never):String; static var SELECT_MULTIPLE(default, never):String; } ================================================ FILE: externs/air/flash/events/FocusEvent.hx ================================================ package flash.events; extern class FocusEvent extends Event { #if air var direction:flash.display.FocusDirection; #end @:require(flash10) var isRelatedObjectInaccessible:Bool; var keyCode:UInt; var relatedObject:flash.display.InteractiveObject; var shiftKey:Bool; function new(type:String, bubbles:Bool = true, cancelable:Bool = false, ?relatedObject:flash.display.InteractiveObject, shiftKey:Bool = false, keyCode:UInt = 0):Void; static var FOCUS_IN(default, never):String; static var FOCUS_OUT(default, never):String; static var KEY_FOCUS_CHANGE(default, never):String; static var MOUSE_FOCUS_CHANGE(default, never):String; } ================================================ FILE: externs/air/flash/events/GestureEvent.hx ================================================ package flash.events; @:require(flash10_1) extern class GestureEvent extends Event { var altKey:Bool; #if air var commandKey:Bool; #end var controlKey:Bool; var ctrlKey:Bool; var localX:Float; var localY:Float; var phase:String; var shiftKey:Bool; var stageX(default, never):Float; var stageY(default, never):Float; function new(type:String, bubbles:Bool = true, cancelable:Bool = false, ?phase:String, localX:Float = 0, localY:Float = 0, ctrlKey:Bool = false, altKey:Bool = false, shiftKey:Bool = false):Void; function updateAfterEvent():Void; static var GESTURE_TWO_FINGER_TAP(default, never):String; } ================================================ FILE: externs/air/flash/events/HTMLUncaughtScriptExceptionEvent.hx ================================================ package flash.events; extern class HTMLUncaughtScriptExceptionEvent extends Event { var exceptionValue:Dynamic; var stackTrace:Array<{sourceURL:String, line:Float, functionName:String}>; function new(exceptionValue:Dynamic):Void; static var UNCAUGHT_SCRIPT_EXCEPTION(default, never):String; } ================================================ FILE: externs/air/flash/events/IOErrorEvent.hx ================================================ package flash.events; extern class IOErrorEvent extends ErrorEvent { function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?text:String, id:Int = 0):Void; static var DISK_ERROR(default, never):String; static var IO_ERROR(default, never):String; static var NETWORK_ERROR(default, never):String; #if air static var STANDARD_ERROR_IO_ERROR(default, never):String; static var STANDARD_INPUT_IO_ERROR(default, never):String; static var STANDARD_OUTPUT_IO_ERROR(default, never):String; #end static var VERIFY_ERROR(default, never):String; } ================================================ FILE: externs/air/flash/events/InvokeEvent.hx ================================================ package flash.events; extern class InvokeEvent extends Event { var arguments(default, never):Array; var currentDirectory(default, never):flash.filesystem.File; var reason(default, never):flash.desktop.InvokeEventReason; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?dir:flash.filesystem.File, ?argv:Array, reason:flash.desktop.InvokeEventReason = flash.desktop.InvokeEventReason.STANDARD):Void; static var INVOKE(default, never):String; } ================================================ FILE: externs/air/flash/events/KeyboardEvent.hx ================================================ package flash.events; extern class KeyboardEvent extends Event { var altKey:Bool; var charCode:UInt; #if air var commandKey:Bool; #end var controlKey:Bool; var ctrlKey:Bool; var keyCode:UInt; var keyLocation:flash.ui.KeyLocation; var shiftKey:Bool; function new(type:String, bubbles:Bool = true, cancelable:Bool = false, charCodeValue:UInt = 0, keyCodeValue:UInt = 0, keyLocationValue:flash.ui.KeyLocation = STANDARD, ctrlKeyValue:Bool = false, altKeyValue:Bool = false, shiftKeyValue:Bool = false):Void; function updateAfterEvent():Void; static var KEY_DOWN(default, never):String; static var KEY_UP(default, never):String; } ================================================ FILE: externs/air/flash/events/LocationChangeEvent.hx ================================================ package flash.events; extern class LocationChangeEvent extends Event { var location:String; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?location:String):Void; static var LOCATION_CHANGE(default, never):String; static var LOCATION_CHANGING(default, never):String; } ================================================ FILE: externs/air/flash/events/MediaEvent.hx ================================================ package flash.events; extern class MediaEvent extends Event { var data(default, never):flash.media.MediaPromise; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?data:flash.media.MediaPromise):Void; static var COMPLETE(default, never):String; static var SELECT(default, never):String; } ================================================ FILE: externs/air/flash/events/MouseEvent.hx ================================================ package flash.events; extern class MouseEvent extends Event { var altKey:Bool; var buttonDown:Bool; #if air var clickCount(default, never):Int; var commandKey:Bool; var controlKey:Bool; #end var ctrlKey:Bool; var delta:Int; @:require(flash10) var isRelatedObjectInaccessible:Bool; var localX:Float; var localY:Float; @:require(flash11_2) var movementX:Float; @:require(flash11_2) var movementY:Float; var relatedObject:flash.display.InteractiveObject; var shiftKey:Bool; var stageX(default, never):Float; var stageY(default, never):Float; function new(type:String, bubbles:Bool = true, cancelable:Bool = false, localX:Null = 0, localY:Null = 0, ?relatedObject:flash.display.InteractiveObject, ctrlKey:Bool = false, altKey:Bool = false, shiftKey:Bool = false, buttonDown:Bool = false, delta:Int = 0):Void; function updateAfterEvent():Void; static var CLICK(default, never):String; @:require(flash11_2) static var CONTEXT_MENU(default, never):String; static var DOUBLE_CLICK(default, never):String; @:require(flash11_2) static var MIDDLE_CLICK(default, never):String; @:require(flash11_2) static var MIDDLE_MOUSE_DOWN(default, never):String; @:require(flash11_2) static var MIDDLE_MOUSE_UP(default, never):String; static var MOUSE_DOWN(default, never):String; static var MOUSE_MOVE(default, never):String; static var MOUSE_OUT(default, never):String; static var MOUSE_OVER(default, never):String; static var MOUSE_UP(default, never):String; static var MOUSE_WHEEL(default, never):String; @:require(flash11_3) static var RELEASE_OUTSIDE(default, never):String; @:require(flash11_2) static var RIGHT_CLICK(default, never):String; @:require(flash11_2) static var RIGHT_MOUSE_DOWN(default, never):String; @:require(flash11_2) static var RIGHT_MOUSE_UP(default, never):String; static var ROLL_OUT(default, never):String; static var ROLL_OVER(default, never):String; } ================================================ FILE: externs/air/flash/events/NativeDragEvent.hx ================================================ package flash.events; extern class NativeDragEvent extends MouseEvent { var allowedActions:flash.desktop.NativeDragOptions; var clipboard:flash.desktop.Clipboard; var dropAction:String; function new(type:String, ?bubbles:Bool = false, ?cancelable:Bool = true, ?localX:Float, ?localY:Float, ?relatedObject:flash.display.InteractiveObject, ?clipboard:flash.desktop.Clipboard, ?allowedActions:flash.desktop.NativeDragOptions, ?dropAction:String, controlKey:Bool = false, altKey:Bool = false, shiftKey:Bool = false, commandKey:Bool = false):Void; static var NATIVE_DRAG_COMPLETE(default, never):String; static var NATIVE_DRAG_DROP(default, never):String; static var NATIVE_DRAG_ENTER(default, never):String; static var NATIVE_DRAG_EXIT(default, never):String; static var NATIVE_DRAG_OVER(default, never):String; static var NATIVE_DRAG_START(default, never):String; static var NATIVE_DRAG_UPDATE(default, never):String; } ================================================ FILE: externs/air/flash/events/NativeProcessExitEvent.hx ================================================ package flash.events; extern class NativeProcessExitEvent extends Event { var exitCode:Float; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?exitCode:Float):Void; static var EXIT(default, never):String; } ================================================ FILE: externs/air/flash/events/NativeWindowBoundsEvent.hx ================================================ package flash.events; extern class NativeWindowBoundsEvent extends Event { var afterBounds(default, never):flash.geom.Rectangle; var beforeBounds(default, never):flash.geom.Rectangle; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?beforeBounds:flash.geom.Rectangle, ?afterBounds:flash.geom.Rectangle):Void; static var MOVE(default, never):String; static var MOVING(default, never):String; static var RESIZE(default, never):String; static var RESIZING(default, never):String; } ================================================ FILE: externs/air/flash/events/NativeWindowDisplayStateEvent.hx ================================================ package flash.events; extern class NativeWindowDisplayStateEvent extends Event { var afterDisplayState(default, never):String; var beforeDisplayState(default, never):String; function new(type:String, bubbles:Bool = true, cancelable:Bool = false, beforeDisplayState:String = "", afterDisplayState:String = ""):Void; static var DISPLAY_STATE_CHANGE(default, never):String; static var DISPLAY_STATE_CHANGING(default, never):String; } ================================================ FILE: externs/air/flash/events/PermissionEvent.hx ================================================ package flash.events; @:final extern class PermissionEvent extends Event { var status(default, never):String; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?status:String):Void; static var PERMISSION_STATUS(default, never):String; } ================================================ FILE: externs/air/flash/events/ProgressEvent.hx ================================================ package flash.events; extern class ProgressEvent extends Event { var bytesLoaded:Float; var bytesTotal:Float; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, bytesLoaded:Float = 0, bytesTotal:Float = 0):Void; static var PROGRESS(default, never):String; static var SOCKET_DATA(default, never):String; #if air static var STANDARD_ERROR_DATA(default, never):String; static var STANDARD_INPUT_PROGRESS(default, never):String; static var STANDARD_OUTPUT_DATA(default, never):String; #end } ================================================ FILE: externs/air/flash/events/RemoteNotificationEvent.hx ================================================ package flash.events; @:final extern class RemoteNotificationEvent extends Event { var data(default, never):Dynamic; var tokenId(default, never):String; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?data:Dynamic, ?tokenId:String):Void; static var NOTIFICATION(default, never):String; static var TOKEN(default, never):String; } ================================================ FILE: externs/air/flash/events/SQLErrorEvent.hx ================================================ package flash.events; extern class SQLErrorEvent extends ErrorEvent { var error(default, never):flash.errors.SQLError; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?error:flash.errors.SQLError):Void; static var ERROR(default, never):String; } ================================================ FILE: externs/air/flash/events/SQLEvent.hx ================================================ package flash.events; extern class SQLEvent extends Event { function new(type:String, bubbles:Bool = false, cancelable:Bool = false):Void; static var ANALYZE(default, never):String; static var ATTACH(default, never):String; static var BEGIN(default, never):String; static var CANCEL(default, never):String; static var CLOSE(default, never):String; static var COMMIT(default, never):String; static var COMPACT(default, never):String; static var DEANALYZE(default, never):String; static var DETACH(default, never):String; static var OPEN(default, never):String; static var REENCRYPT(default, never):String; static var RELEASE_SAVEPOINT(default, never):String; static var RESULT(default, never):String; static var ROLLBACK(default, never):String; static var ROLLBACK_TO_SAVEPOINT(default, never):String; static var SCHEMA(default, never):String; static var SET_SAVEPOINT(default, never):String; } ================================================ FILE: externs/air/flash/events/SQLUpdateEvent.hx ================================================ package flash.events; extern class SQLUpdateEvent extends Event { var rowID(default, never):Float; var table(default, never):String; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?table:String, rowID:Float = 0.0):Void; static var DELETE(default, never):String; static var INSERT(default, never):String; static var UPDATE(default, never):String; } ================================================ FILE: externs/air/flash/events/ScreenMouseEvent.hx ================================================ package flash.events; extern class ScreenMouseEvent extends MouseEvent { var screenX(default, never):Float; var screenY(default, never):Float; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, screenX:Float, screenY:Float, ctrlKey:Bool, altKey:Bool = false, shiftKey:Bool = false, buttonDown:Bool = false, commandKey:Bool = false, controlKey:Bool = false):Void; static var CLICK(default, never):String; static var MOUSE_DOWN(default, never):String; static var MOUSE_UP(default, never):String; static var RIGHT_CLICK(default, never):String; static var RIGHT_MOUSE_DOWN(default, never):String; static var RIGHT_MOUSE_UP(default, never):String; } ================================================ FILE: externs/air/flash/events/ServerSocketConnectEvent.hx ================================================ package flash.events; extern class ServerSocketConnectEvent extends Event { var socket:flash.net.Socket; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?socket:flash.net.Socket):Void; static var CONNECT(default, never):String; } ================================================ FILE: externs/air/flash/events/StageOrientationEvent.hx ================================================ package flash.events; extern class StageOrientationEvent extends Event { var afterOrientation(default, never):flash.display.StageOrientation; var beforeOrientation(default, never):flash.display.StageOrientation; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?beforeOrientation:flash.display.StageOrientation, ?afterOrientation:flash.display.StageOrientation):Void; static var ORIENTATION_CHANGE(default, never):String; static var ORIENTATION_CHANGING(default, never):String; } ================================================ FILE: externs/air/flash/events/StorageVolumeChangeEvent.hx ================================================ package flash.events; extern class StorageVolumeChangeEvent extends Event { var _rootDirectory:flash.filesystem.File; var _volume:flash.filesystem.StorageVolume; var rootDirectory(default, never):flash.filesystem.File; var storageVolume(default, never):flash.filesystem.StorageVolume; function new(type:String, bubbles:Bool = false, cancelable:Bool = false, ?path:flash.filesystem.File, ?volume:flash.filesystem.StorageVolume):Void; static var STORAGE_VOLUME_MOUNT(default, never):String; static var STORAGE_VOLUME_UNMOUNT(default, never):String; } ================================================ FILE: externs/air/flash/events/TouchEvent.hx ================================================ package flash.events; @:require(flash10_1) extern class TouchEvent extends Event { var altKey:Bool; #if air var commandKey:Bool; #end var controlKey:Bool; var ctrlKey:Bool; var isPrimaryTouchPoint:Bool; var isRelatedObjectInaccessible:Bool; #if air var isTouchPointCanceled:Bool; #end var localX:Float; var localY:Float; var pressure:Float; var relatedObject:flash.display.InteractiveObject; var shiftKey:Bool; var sizeX:Float; var sizeY:Float; var stageX(default, never):Float; var stageY(default, never):Float; #if air var timestamp:Float; var touchIntent:TouchEventIntent; #end var touchPointID:Int; function new(type:String, bubbles:Bool = true, cancelable:Bool = false, touchPointID:Int = 0, isPrimaryTouchPoint:Bool = false, localX:Float = 0. /*NaN*/, localY:Float = 0. /*NaN*/, sizeX:Float = 0. /*NaN*/, sizeY:Float = 0. /*NaN*/, pressure:Float = 0. /*NaN*/, ?relatedObject:flash.display.InteractiveObject, ctrlKey:Bool = false, altKey:Bool = false, shiftKey:Bool = false #if air, commandKey:Bool = false, controlKey:Bool = false, ?timestamp:Float, ?touchIntent:TouchEventIntent, ?samples:flash.utils.ByteArray, isTouchPointCanceled:Bool = false #end):Void; #if air function getSamples(buffer:flash.utils.ByteArray, append:Bool = false):UInt; function isToolButtonDown(index:Int):Bool; #end function updateAfterEvent():Void; static var PROXIMITY_BEGIN(default, never):String; static var PROXIMITY_END(default, never):String; static var PROXIMITY_MOVE(default, never):String; static var PROXIMITY_OUT(default, never):String; static var PROXIMITY_OVER(default, never):String; static var PROXIMITY_ROLL_OUT(default, never):String; static var PROXIMITY_ROLL_OVER(default, never):String; static var TOUCH_BEGIN(default, never):String; static var TOUCH_END(default, never):String; static var TOUCH_MOVE(default, never):String; static var TOUCH_OUT(default, never):String; static var TOUCH_OVER(default, never):String; static var TOUCH_ROLL_OUT(default, never):String; static var TOUCH_ROLL_OVER(default, never):String; static var TOUCH_TAP(default, never):String; } ================================================ FILE: externs/air/flash/events/TouchEventIntent.hx ================================================ package flash.events; @:native("flash.events.TouchEventIntent") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract TouchEventIntent(String) { var ERASER = "eraser"; var PEN = "pen"; var UNKNOWN = "unknown"; } ================================================ FILE: externs/air/flash/external/ExtensionContext.hx ================================================ package flash.external; @:final extern class ExtensionContext extends flash.events.EventDispatcher { var actionScriptData:flash.utils.Object; function new():Void; // function _disposed() : Bool; function call(functionName:String, ?p1:Dynamic, ?p2:Dynamic, ?p3:Dynamic, ?p4:Dynamic, ?p5:Dynamic):Dynamic; function dispose():Void; // function getActionScriptData() : flash.utils.Object; // function setActionScriptData(p1 : flash.utils.Object) : Void; static function createExtensionContext(extensionID:String, contextType:String):ExtensionContext; static function getExtensionDirectory(extensionID:String):flash.filesystem.File; } ================================================ FILE: externs/air/flash/filesystem/File.hx ================================================ package flash.filesystem; extern class File extends flash.net.FileReference { var downloaded:Bool; var exists(default, never):Bool; var icon(default, never):flash.desktop.Icon; var isDirectory(default, never):Bool; var isHidden(default, never):Bool; var isPackage(default, never):Bool; var isSymbolicLink(default, never):Bool; var nativePath:String; var parent(default, never):File; var preventBackup:Bool; var spaceAvailable(default, never):Float; var url:String; function new(?path:String):Void; function browseForDirectory(title:String):Void; function browseForOpen(title:String, ?typeFilter:Array):Void; function browseForOpenMultiple(title:String, ?typeFilter:Array):Void; function browseForSave(title:String):Void; function canonicalize():Void; function clone():File; function copyTo(newLocation:flash.net.FileReference, overwrite:Bool = false):Void; function copyToAsync(newLocation:flash.net.FileReference, overwrite:Bool = false):Void; function createDirectory():Void; function deleteDirectory(deleteDirectoryContents:Bool = false):Void; function deleteDirectoryAsync(deleteDirectoryContents:Bool = false):Void; function deleteFile():Void; function deleteFileAsync():Void; function getDirectoryListing():Array; function getDirectoryListingAsync():Void; function getRelativePath(ref:flash.net.FileReference, useDotDot:Bool = false):String; function moveTo(newLocation:flash.net.FileReference, overwrite:Bool = false):Void; function moveToAsync(newLocation:flash.net.FileReference, overwrite:Bool = false):Void; function moveToTrash():Void; function moveToTrashAsync():Void; function openWithDefaultApplication():Void; function resolvePath(path:String):File; static var applicationDirectory(default, never):File; static var applicationStorageDirectory(default, never):File; static var cacheDirectory(default, never):File; static var desktopDirectory(default, never):File; static var documentsDirectory(default, never):File; static var lineEnding(default, never):String; static var permissionStatus(default, never):String; static var separator(default, never):String; static var systemCharset(default, never):String; static var userDirectory(default, never):File; static function createTempDirectory():File; static function createTempFile():File; static function getRootDirectories():Array; } ================================================ FILE: externs/air/flash/filesystem/FileMode.hx ================================================ package flash.filesystem; @:native("flash.filesystem.FileMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract FileMode(String) { var APPEND = "append"; var READ = "read"; var UPDATE = "update"; var WRITE = "write"; } ================================================ FILE: externs/air/flash/filesystem/FileStream.hx ================================================ package flash.filesystem; extern class FileStream extends flash.events.EventDispatcher implements flash.utils.IDataInput implements flash.utils.IDataOutput { #if (haxe_ver < 4.3) var bytesAvailable(default, never):UInt; var endian:flash.utils.Endian; var objectEncoding:#if openfl openfl.net.ObjectEncoding #else UInt #end; #else @:flash.property var bytesAvailable(get, never):UInt; @:flash.property var endian(get, set):flash.utils.Endian; @:flash.property var objectEncoding(get, set):#if openfl openfl.net.ObjectEncoding #else UInt #end; #end var position:Float; var readAhead:Float; function new():Void; function close():Void; function open(file:File, fileMode:FileMode):Void; function openAsync(file:File, fileMode:FileMode):Void; function readBoolean():Bool; function readByte():Int; function readBytes(bytes:flash.utils.ByteArray, offset:UInt = 0, length:UInt = 0):Void; function readDouble():Float; function readFloat():Float; function readInt():Int; function readMultiByte(length:UInt, charSet:String):String; function readObject():Dynamic; function readShort():Int; function readUTF():String; function readUTFBytes(length:UInt):String; function readUnsignedByte():UInt; function readUnsignedInt():UInt; function readUnsignedShort():UInt; function truncate():Void; function writeBoolean(value:Bool):Void; function writeByte(value:Int):Void; function writeBytes(bytes:flash.utils.ByteArray, offset:UInt = 0, length:UInt = 0):Void; function writeDouble(value:Float):Void; function writeFloat(value:Float):Void; function writeInt(value:Int):Void; function writeMultiByte(value:String, charSet:String):Void; function writeObject(object:Dynamic):Void; function writeShort(value:Int):Void; function writeUTF(value:String):Void; function writeUTFBytes(value:String):Void; function writeUnsignedInt(value:UInt):Void; #if (haxe_ver >= 4.3) private function get_bytesAvailable():UInt; private function get_endian():flash.utils.Endian; private function get_objectEncoding():#if openfl openfl.net.ObjectEncoding #else UInt #end; private function set_endian(value:flash.utils.Endian):flash.utils.Endian; private function set_objectEncoding(value:#if openfl openfl.net.ObjectEncoding #else UInt #end):#if openfl openfl.net.ObjectEncoding #else UInt #end; #end } ================================================ FILE: externs/air/flash/filesystem/StorageVolume.hx ================================================ package flash.filesystem; extern class StorageVolume { var drive(default, never):String; var fileSystemType(default, never):String; var isRemovable(default, never):Bool; var isWritable(default, never):Bool; var name(default, never):String; var rootDirectory(default, never):File; function new(rootDirPath:File, name:String, writable:Bool, removable:Bool, fileSysType:String, drive:String):Void; } ================================================ FILE: externs/air/flash/filesystem/StorageVolumeInfo.hx ================================================ package flash.filesystem; @:final extern class StorageVolumeInfo extends flash.events.EventDispatcher { function new():Void; function getStorageVolumes():flash.Vector; static var isSupported(default, never):Bool; static var storageVolumeInfo(default, never):StorageVolumeInfo; } ================================================ FILE: externs/air/flash/html/ControlInitializationError.hx ================================================ package flash.html; extern class ControlInitializationError extends flash.errors.Error { function new():Void; } ================================================ FILE: externs/air/flash/html/HTMLBitmap.hx ================================================ package flash.html; extern class HTMLBitmap { function new(bitmap:flash.display.BitmapData):Void; } ================================================ FILE: externs/air/flash/html/HTMLHistoryItem.hx ================================================ package flash.html; extern class HTMLHistoryItem { var isPost(default, never):Bool; var originalUrl(default, never):String; var title(default, never):String; var url(default, never):String; function new(url:String, originalUrl:String, isPost:Bool, title:String):Void; } ================================================ FILE: externs/air/flash/html/HTMLHost.hx ================================================ package flash.html; extern class HTMLHost { var htmlLoader(default, never):HTMLLoader; var windowRect:flash.geom.Rectangle; function new(defaultBehaviors:Bool = true):Void; function createWindow(windowCreateOptions:HTMLWindowCreateOptions):HTMLLoader; // function setHTMLControl(loader : HTMLLoader) : Void; function updateLocation(locationURL:String):Void; function updateStatus(status:String):Void; function updateTitle(title:String):Void; function windowBlur():Void; function windowClose():Void; function windowFocus():Void; } ================================================ FILE: externs/air/flash/html/HTMLLoader.hx ================================================ package flash.html; extern class HTMLLoader extends flash.display.Sprite { var authenticate:Bool; var cacheResponse:Bool; var contentHeight(default, never):Float; var contentWidth(default, never):Float; var hasFocusableContent(default, never):Bool; var historyLength(default, never):UInt; var historyPosition:UInt; var htmlHost:HTMLHost; var idleTimeout:Float; var loaded(default, never):Bool; var location(default, never):String; var manageCookies:Bool; var navigateInSystemBrowser:Bool; var pageApplicationDomain(default, never):flash.system.ApplicationDomain; var paintsDefaultBackground:Bool; var placeLoadStringContentInApplicationSandbox:Bool; var runtimeApplicationDomain:flash.system.ApplicationDomain; var scrollH:Float; var scrollV:Float; var textEncodingFallback:String; var textEncodingOverride:String; var useCache:Bool; var userAgent:String; var window(default, never):Dynamic; function new():Void; function cancelLoad():Void; function getHistoryAt(position:UInt):HTMLHistoryItem; function historyBack():Void; function historyForward():Void; function historyGo(steps:Int):Void; function load(urlRequestToLoad:flash.net.URLRequest):Void; function loadString(htmlContent:String):Void; function reload():Void; static var isSupported(default, never):Bool; static var pdfCapability(default, never):Int; static var swfCapability(default, never):Int; static function createRootWindow(visible:Bool = true, ?windowInitOptions:flash.display.NativeWindowInitOptions, scrollBarsVisible:Bool = true, ?bounds:flash.geom.Rectangle):HTMLLoader; } ================================================ FILE: externs/air/flash/html/HTMLPDFCapability.hx ================================================ package flash.html; extern class HTMLPDFCapability { static var ERROR_CANNOT_LOAD_READER(default, never):Int; static var ERROR_INSTALLED_READER_NOT_FOUND(default, never):Int; static var ERROR_INSTALLED_READER_TOO_OLD(default, never):Int; static var ERROR_PREFERRED_READER_TOO_OLD(default, never):Int; static var STATUS_OK(default, never):Int; } ================================================ FILE: externs/air/flash/html/HTMLPopupWindow.hx ================================================ package flash.html; @:final extern class HTMLPopupWindow { function new(owner:HTMLLoader, closePopupWindowIfNeededClosure:Dynamic, setDeactivateClosure:Dynamic, computedFontSize:Float):Void; function close():Void; function isActive():Bool; } ================================================ FILE: externs/air/flash/html/HTMLSWFCapability.hx ================================================ package flash.html; extern class HTMLSWFCapability { static var ERROR_INSTALLED_PLAYER_NOT_FOUND(default, never):Int; static var ERROR_INSTALLED_PLAYER_TOO_OLD(default, never):Int; static var STATUS_OK(default, never):Int; } ================================================ FILE: externs/air/flash/html/HTMLWindowCreateOptions.hx ================================================ package flash.html; extern class HTMLWindowCreateOptions { var fullscreen:Bool; var height:Float; var locationBarVisible:Bool; var menuBarVisible:Bool; var resizable:Bool; var scrollBarsVisible:Bool; var statusBarVisible:Bool; var toolBarVisible:Bool; var width:Float; var x:Float; var y:Float; function new():Void; } ================================================ FILE: externs/air/flash/html/ResourceLoader.hx ================================================ package flash.html; extern class ResourceLoader { function new(urlReq:flash.net.URLRequest, htmlControl:HTMLLoader, ?isStageWebViewRequest:Bool):Void; function cancel():Void; // static var s_AboutURLScheme(default,never) : String; // static var s_AppStorageURLScheme(default,never) : String; // static var s_AppURLScheme(default,never) : String; // static var s_DataURLScheme(default,never) : String; // static var s_FileURLScheme(default,never) : String; // static var s_FtpURLScheme(default,never) : String; // static var s_HttpURLScheme(default,never) : String; // static var s_HttpsURLScheme(default,never) : String; // static var s_MailToURLScheme(default,never) : String; } ================================================ FILE: externs/air/flash/html/__HTMLScriptArray.hx ================================================ package flash.html; extern class __HTMLScriptArray extends Array implements Dynamic { function new():Void; } ================================================ FILE: externs/air/flash/html/__HTMLScriptFunction.hx ================================================ package flash.html; extern class __HTMLScriptFunction implements Dynamic { function new():Void; } ================================================ FILE: externs/air/flash/html/__HTMLScriptObject.hx ================================================ package flash.html; extern class __HTMLScriptObject implements Dynamic { function new():Void; } ================================================ FILE: externs/air/flash/html/script/Package.hx ================================================ package flash.html.script; extern class Package extends flash.utils.Proxy { function new(parent:Package, packageName:String, appDomain:flash.system.ApplicationDomain):Void; } ================================================ FILE: externs/air/flash/html/script/PropertyEnumHelper.hx ================================================ package flash.html.script; extern class PropertyEnumHelper { function new(enumPropertiesClosure:Dynamic, getPropertyClosure:Dynamic):Void; function nextName(index:Int):String; function nextNameIndex(lastIndex:Int):Int; function nextValue(index:Int):Dynamic; } ================================================ FILE: externs/air/flash/media/AudioPlaybackMode.hx ================================================ package flash.media; @:native("flash.media.AudioPlaybackMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract AudioPlaybackMode(String) { var AMBIENT = "ambient"; var MEDIA = "media"; var VOICE = "voice"; } ================================================ FILE: externs/air/flash/media/CameraPosition.hx ================================================ package flash.media; @:native("flash.media.CameraPosition") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract CameraPosition(String) { var BACK = "back"; var FRONT = "front"; var UNKNOWN = "unknown"; } ================================================ FILE: externs/air/flash/media/CameraRoll.hx ================================================ package flash.media; extern class CameraRoll extends flash.events.EventDispatcher { function new():Void; function addBitmapData(bitmapData:flash.display.BitmapData):Void; function browseForImage(?value:CameraRollBrowseOptions):Void; function requestPermission():Void; static var permissionStatus(default, never):String; static var supportsAddBitmapData(default, never):Bool; static var supportsBrowseForImage(default, never):Bool; } ================================================ FILE: externs/air/flash/media/CameraRollBrowseOptions.hx ================================================ package flash.media; extern class CameraRollBrowseOptions { var height:Float; var origin:flash.geom.Rectangle; var width:Float; function new():Void; } ================================================ FILE: externs/air/flash/media/CameraUI.hx ================================================ package flash.media; extern class CameraUI extends flash.events.EventDispatcher { function new():Void; function launch(requestedMediaType:String):Void; function requestPermission():Void; static var isSupported(default, never):Bool; static var permissionStatus(default, never):String; } ================================================ FILE: externs/air/flash/media/IFilePromise.hx ================================================ package flash.media; extern interface IFilePromise { // var file(default,never) : flash.filesystem.File; var isAsync(default, never):Bool; // var mediaType(default,never) : String; var relativePath(default, never):String; // function new() : Void; function close():Void; function open():flash.utils.IDataInput; function reportError(e:flash.events.ErrorEvent):Void; } ================================================ FILE: externs/air/flash/media/InputMediaStream.hx ================================================ package flash.media; extern class InputMediaStream extends flash.events.EventDispatcher implements flash.utils.IDataInput { var bytesAvailable(default, never):UInt; var endian:flash.utils.Endian; var objectEncoding:#if openfl openfl.net.ObjectEncoding #else UInt #end; // function new() : Void; function close():Dynamic; function open():Dynamic; function readBoolean():Bool; function readByte():Int; function readBytes(bytes:flash.utils.ByteArray, ?offset:UInt, ?length:UInt):Void; function readDouble():Float; function readFloat():Float; function readInt():Int; function readMultiByte(length:UInt, charSet:String):String; function readObject():Dynamic; function readShort():Int; function readUTF():String; function readUTFBytes(length:UInt):String; function readUnsignedByte():UInt; function readUnsignedInt():UInt; function readUnsignedShort():UInt; } ================================================ FILE: externs/air/flash/media/MediaPromise.hx ================================================ package flash.media; extern class MediaPromise extends flash.events.EventDispatcher implements flash.desktop.IFilePromise { var file(default, never):flash.filesystem.File; var isAsync(default, never):Bool; var mediaType(default, never):String; var relativePath(default, never):String; function new():Void; function close():Void; function open():flash.utils.IDataInput; function reportError(e:flash.events.ErrorEvent):Void; } ================================================ FILE: externs/air/flash/media/MediaType.hx ================================================ package flash.media; @:native("flash.media.MediaType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract MediaType(String) { var IMAGE = "image"; var VIDEO = "video"; } ================================================ FILE: externs/air/flash/media/StageWebView.hx ================================================ package flash.media; @:final extern class StageWebView extends flash.events.EventDispatcher { var isHistoryBackEnabled(default, never):Bool; var isHistoryForwardEnabled(default, never):Bool; var location(default, never):String; var mediaPlaybackRequiresUserAction:Bool; var stage:flash.display.Stage; var title(default, never):String; var viewPort:flash.geom.Rectangle; function new():Void; function assignFocus(direction:flash.display.FocusDirection = flash.display.FocusDirection.NONE):Void; function dispose():Void; function drawViewPortToBitmapData(bitmap:flash.display.BitmapData):Void; function historyBack():Void; function historyForward():Void; function loadString(text:String, ?mimeType:String):Void; function loadURL(url:String):Void; function reload():Void; function stop():Void; static var isSupported(default, never):Bool; } ================================================ FILE: externs/air/flash/media/StageWebViewImpl.hx ================================================ package flash.media; extern class StageWebViewImpl extends flash.display.Sprite { function new():Void; } ================================================ FILE: externs/air/flash/net/DatagramSocket.hx ================================================ package flash.net; extern class DatagramSocket extends flash.events.EventDispatcher { var bound(default, never):Bool; var connected(default, never):Bool; var localAddress(default, never):String; var localPort(default, never):Int; var remoteAddress(default, never):String; var remotePort(default, never):Int; function new():Void; function bind(localPort:Int = 0, localAddress:String = "0.0.0.0"):Void; function close():Void; function connect(remoteAddress:String, remotePort:Int):Void; function receive():Void; function send(bytes:flash.utils.ByteArray, offset:UInt = 0, length:UInt = 0, ?address:String, port:Int = 0):Void; static var isSupported(default, never):Bool; } ================================================ FILE: externs/air/flash/net/FileReference.hx ================================================ package flash.net; extern class FileReference extends flash.events.EventDispatcher { var creationDate(default, never):Date; var creator(default, never):String; @:require(flash10) var data(default, never):flash.utils.ByteArray; #if air var extension(default, never):String; #end var modificationDate(default, never):Date; var name(default, never):String; var size(default, never):Float; var type(default, never):String; function new():Void; function browse(?typeFilter:Array):Bool; function cancel():Void; function download(request:URLRequest, ?defaultFileName:String):Void; @:require(flash10) function load():Void; @:require(flash10) function save(data:Dynamic, ?defaultFileName:String):Void; function upload(request:URLRequest, ?uploadDataFieldName:String, testUpload:Bool = false):Void; #if air function uploadUnencoded(request:URLRequest):Void; #end } ================================================ FILE: externs/air/flash/net/IPVersion.hx ================================================ package flash.net; @:native("flash.net.IPVersion") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract IPVersion(String) { var IPV4 = "ipv4"; var IPV6 = "ipv6"; } ================================================ FILE: externs/air/flash/net/InterfaceAddress.hx ================================================ package flash.net; extern class InterfaceAddress { var address:String; var broadcast:String; var ipVersion:String; var prefixLength:Int; function new():Void; } ================================================ FILE: externs/air/flash/net/NetworkInfo.hx ================================================ package flash.net; extern class NetworkInfo extends flash.events.EventDispatcher { function new():Void; function findInterfaces():flash.Vector; static var isSupported(default, never):Bool; static var networkInfo(default, never):NetworkInfo; } ================================================ FILE: externs/air/flash/net/NetworkInterface.hx ================================================ package flash.net; extern class NetworkInterface { var active:Bool; var addresses:flash.Vector; var displayName:String; var hardwareAddress:String; var mtu:Int; var name:String; var parent:NetworkInterface; var subInterfaces:flash.Vector; function new():Void; } ================================================ FILE: externs/air/flash/net/ServerSocket.hx ================================================ package flash.net; extern class ServerSocket extends flash.events.EventDispatcher { var bound(default, never):Bool; var listening(default, never):Bool; var localAddress(default, never):String; var localPort(default, never):Int; function new():Void; function bind(localPort:Int = 0, localAddress:String = "0.0.0.0"):Void; function close():Void; function listen(backlog:Int = 0):Void; static var isSupported(default, never):Bool; } ================================================ FILE: externs/air/flash/net/Socket.hx ================================================ package flash.net; extern class Socket extends flash.events.EventDispatcher implements flash.utils.IDataOutput implements flash.utils.IDataInput { #if (haxe_ver < 4.3) var bytesAvailable(default, never):UInt; @:require(flash11) var bytesPending(default, never):UInt; var connected(default, never):Bool; var endian:flash.utils.Endian; var objectEncoding:#if openfl openfl.net.ObjectEncoding #else UInt #end; @:require(flash10) var timeout:UInt; #if air var localAddress(default, never):String; var localPort(default, never):Int; var remoteAddress(default, never):String; var remotePort(default, never):Int; #end #else @:flash.property var bytesAvailable(get, never):UInt; @:flash.property @:require(flash11) var bytesPending(get, never):UInt; @:flash.property var connected(get, never):Bool; @:flash.property var endian(get, set):flash.utils.Endian; @:flash.property var objectEncoding(get, set):#if openfl openfl.net.ObjectEncoding #else UInt #end; @:flash.property @:require(flash10) var timeout(get, set):UInt; #if air @:flash.property var localAddress(get, never):String; @:flash.property var localPort(get, never):Int; @:flash.property var remoteAddress(get, never):String; @:flash.property var remotePort(get, never):Int; #end #end function new(?host:String, port:Int = 0):Void; function close():Void; function connect(host:String, port:Int):Void; function flush():Void; function readBoolean():Bool; function readByte():Int; function readBytes(bytes:flash.utils.ByteArray, offset:UInt = 0, length:UInt = 0):Void; function readDouble():Float; function readFloat():Float; function readInt():Int; function readMultiByte(length:UInt, charSet:String):String; function readObject():Dynamic; function readShort():Int; function readUTF():String; function readUTFBytes(length:UInt):String; function readUnsignedByte():UInt; function readUnsignedInt():UInt; function readUnsignedShort():UInt; function writeBoolean(value:Bool):Void; function writeByte(value:Int):Void; function writeBytes(bytes:flash.utils.ByteArray, offset:UInt = 0, length:UInt = 0):Void; function writeDouble(value:Float):Void; function writeFloat(value:Float):Void; function writeInt(value:Int):Void; function writeMultiByte(value:String, charSet:String):Void; function writeObject(object:Dynamic):Void; function writeShort(value:Int):Void; function writeUTF(value:String):Void; function writeUTFBytes(value:String):Void; function writeUnsignedInt(value:UInt):Void; #if (haxe_ver >= 4.3) private function get_bytesAvailable():UInt; private function get_bytesPending():UInt; private function get_connected():Bool; private function get_endian():flash.utils.Endian; private function get_objectEncoding():#if openfl openfl.net.ObjectEncoding #else UInt #end; private function get_timeout():UInt; #if air private function get_localAddress():String; private function get_localPort():Int; private function get_remoteAddress():String; private function get_remotePort():Int; #end private function set_endian(value:flash.utils.Endian):flash.utils.Endian; private function set_objectEncoding(value:#if openfl openfl.net.ObjectEncoding #else UInt #end):#if openfl openfl.net.ObjectEncoding #else UInt #end; private function set_timeout(value:UInt):UInt; #end } ================================================ FILE: externs/air/flash/net/URLRequest.hx ================================================ package flash.net; @:final extern class URLRequest { #if air var authenticate:Bool; var cacheResponse:Bool; #end var contentType:String; var data:Dynamic; var digest:String; #if air var followRedirects:Bool; var idleTimeout:Float; var manageCookies:Bool; #end var method:String; var requestHeaders:Array; var url:String; #if air var useCache:Bool; var userAgent:String; #end function new(?url:String):Void; function useRedirectedURL(sourceRequest:URLRequest, wholeURL:Bool = false, ?pattern:Dynamic, ?replace:String):Void; } ================================================ FILE: externs/air/flash/net/URLRequestDefaults.hx ================================================ package flash.net; extern class URLRequestDefaults { static var authenticate:Bool; static var cacheResponse:Bool; static var followRedirects:Bool; static var idleTimeout:Float; static var manageCookies:Bool; static var useCache:Bool; static var userAgent:String; static function setLoginCredentialsForHost(hostname:String, user:String, password:String):Dynamic; } ================================================ FILE: externs/air/flash/net/dns/AAAARecord.hx ================================================ package flash.net.dns; extern class AAAARecord extends ResourceRecord { var address:String; function new():Void; } ================================================ FILE: externs/air/flash/net/dns/ARecord.hx ================================================ package flash.net.dns; extern class ARecord extends ResourceRecord { var address:String; function new():Void; } ================================================ FILE: externs/air/flash/net/dns/DNSResolver.hx ================================================ package flash.net.dns; extern class DNSResolver extends flash.events.EventDispatcher { function new():Void; function lookup(host:String, recordType:Class):Void; static var isSupported(default, never):Bool; } ================================================ FILE: externs/air/flash/net/dns/MXRecord.hx ================================================ package flash.net.dns; extern class MXRecord extends ResourceRecord { var exchange:String; var preference:Int; function new():Void; } ================================================ FILE: externs/air/flash/net/dns/PTRRecord.hx ================================================ package flash.net.dns; extern class PTRRecord extends ResourceRecord { var ptrdName:String; function new():Void; } ================================================ FILE: externs/air/flash/net/dns/ResourceRecord.hx ================================================ package flash.net.dns; extern class ResourceRecord { var name:String; var ttl:Int; function new():Void; } ================================================ FILE: externs/air/flash/net/dns/SRVRecord.hx ================================================ package flash.net.dns; extern class SRVRecord extends ResourceRecord { var port:Int; var priority:Int; var target:String; var weight:Int; function new():Void; } ================================================ FILE: externs/air/flash/net/drm/DRMAddToDeviceGroupContext.hx ================================================ package flash.net.drm; extern class DRMAddToDeviceGroupContext extends DRMManagerSession { function new():Void; function addToDeviceGroup(deviceGroup:DRMDeviceGroup, forceRefresh:Bool):Void; } ================================================ FILE: externs/air/flash/net/drm/DRMManager.hx ================================================ package flash.net.drm; extern class DRMManager extends flash.events.EventDispatcher { function new():Void; function addToDeviceGroup(deviceGroup:DRMDeviceGroup, forceRefresh:Bool = false):Void; function authenticate(serverURL:String, domain:String, username:String, password:String):Void; function loadPreviewVoucher(contentData:DRMContentData):Void; function loadVoucher(contentData:DRMContentData, setting:String):Void; function removeFromDeviceGroup(deviceGroup:DRMDeviceGroup):Void; function resetDRMVouchers():Void; function resetDRMVouchersInternal(isAutoReset:Bool):Void; function returnVoucher(inServerURL:String, immediateCommit:Bool, licenseID:String, policyID:String):Void; function setAuthenticationToken(serverUrl:String, domain:String, token:flash.utils.ByteArray):Void; function storeVoucher(voucher:flash.utils.ByteArray):Void; static var isSupported(default, never):Bool; static var networkIdleTimeout:Float; static function getDRMManager():DRMManager; static function getDRMManagerInternal():DRMManager; } ================================================ FILE: externs/air/flash/net/drm/DRMRemoveFromDeviceGroupContext.hx ================================================ package flash.net.drm; extern class DRMRemoveFromDeviceGroupContext extends DRMManagerSession { function new():Void; function removeFromDeviceGroup(deviceGroup:DRMDeviceGroup):Void; } ================================================ FILE: externs/air/flash/net/drm/VoucherAccessInfo.hx ================================================ package flash.net.drm; @:final extern class VoucherAccessInfo { var authenticationMethod(default, never):String; var deviceGroup(default, never):DRMDeviceGroup; var displayName(default, never):String; var domain(default, never):String; var policyID(default, never):String; function new():Void; } ================================================ FILE: externs/air/flash/notifications/NotificationStyle.hx ================================================ package flash.notifications; @:native("flash.notifications.NotificationStyle") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NotificationStyle(String) { var ALERT = "alert"; var BADGE = "badge"; var SOUND = "sound"; } ================================================ FILE: externs/air/flash/notifications/RemoteNotifier.hx ================================================ package flash.notifications; extern class RemoteNotifier extends flash.events.EventDispatcher { function new():Void; function subscribe(?options:RemoteNotifierSubscribeOptions):Void; function unsubscribe():Void; static var supportedNotificationStyles(default, never):flash.Vector; } ================================================ FILE: externs/air/flash/notifications/RemoteNotifierSubscribeOptions.hx ================================================ package flash.notifications; @:final extern class RemoteNotifierSubscribeOptions { var notificationStyles:flash.Vector; function new():Void; } ================================================ FILE: externs/air/flash/permissions/PermissionStatus.hx ================================================ package flash.permissions; extern class PermissionStatus { function new():Void; static var DENIED(default, never):String; static var GRANTED(default, never):String; static var UNKNOWN(default, never):String; } ================================================ FILE: externs/air/flash/printing/PaperSize.hx ================================================ package flash.printing; @:native("flash.printing.PaperSize") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract PaperSize(String) { var A4 = "a4"; var A5 = "a5"; var A6 = "a6"; var CHOUKEI3GOU = "choukei3gou"; var CHOUKEI4GOU = "choukei4gou"; var ENV_10 = "env_10"; var ENV_B5 = "env_b5"; var ENV_C5 = "env_c5"; var ENV_DL = "env_dl"; var ENV_MONARCH = "env_monarch"; var ENV_PERSONAL = "env_personal"; var EXECUTIVE = "executive"; var FOLIO = "folio"; var JIS_B5 = "jis_b5"; var LEGAL = "legal"; var LETTER = "letter"; var STATEMENT = "statement"; } ================================================ FILE: externs/air/flash/printing/PrintJob.hx ================================================ package flash.printing; extern class PrintJob extends flash.events.EventDispatcher { #if air var copies:Int; var firstPage(default, never):Int; var isColor(default, never):Bool; var jobName:String; var lastPage(default, never):Int; var maxPixelsPerInch(default, never):Float; #end var orientation(default, never):PrintJobOrientation; var pageHeight(default, never):Int; var pageWidth(default, never):Int; #if air var paperArea(default, never):flash.geom.Rectangle; #end var paperHeight(default, never):Int; var paperWidth(default, never):Int; #if air var printableArea(default, never):flash.geom.Rectangle; var printer:String; #end function new():Void; function addPage(sprite:flash.display.Sprite, ?printArea:flash.geom.Rectangle, ?options:PrintJobOptions, frameNum:Int = 0):Void; #if air function selectPaperSize(paperSize:PaperSize):Void; #end function send():Void; #if air function showPageSetupDialog():Bool; #end function start():Bool; #if air function start2(?uiOptions:PrintUIOptions, showPrintDialog:Bool = true):Bool; function terminate():Void; static var active(default, never):Bool; #end @:require(flash10_1) static var isSupported(default, never):Bool; #if air static var printers(default, never):flash.Vector; static var supportsPageSetupDialog(default, never):Bool; #end } ================================================ FILE: externs/air/flash/printing/PrintJobOptions.hx ================================================ package flash.printing; extern class PrintJobOptions { #if air var pixelsPerInch:Float; #end var printAsBitmap:Bool; #if air var printMethod:PrintMethod; #end function new(printAsBitmap:Bool = false):Void; } ================================================ FILE: externs/air/flash/printing/PrintMethod.hx ================================================ package flash.printing; @:native("flash.printing.PrintMethod") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract PrintMethod(String) { var AUTO = "auto"; var BITMAP = "bitmap"; var VECTOR = "vector"; } ================================================ FILE: externs/air/flash/printing/PrintUIOptions.hx ================================================ package flash.printing; @:final extern class PrintUIOptions { var disablePageRange:Bool; var maxPage:UInt; var minPage:UInt; function new():Void; } ================================================ FILE: externs/air/flash/sampler/ScriptMember.hx ================================================ package flash.sampler; @:final extern class ScriptMember { var id(default, never):Float; var propertyName(default, never):String; function new():Void; } ================================================ FILE: externs/air/flash/sampler/ScriptSampler.hx ================================================ package flash.sampler; extern class ScriptSampler { function new():Void; static function getFilename(p1:Float):String; static function getInvocationCount(p1:Float):Float; static function getMembers(p1:Float):flash.Vector; static function getName(p1:Float):String; static function getSize(p1:Float):Float; static function getType(p1:Float):String; } ================================================ FILE: externs/air/flash/security/AVMPlusDigest.hx ================================================ package flash.security; extern class AVMPlusDigest { function new():Void; function FinishDigest(inDigestToCompare:String):UInt; function Init(algorithm:UInt):Void; function Update(data:flash.utils.IDataInput):UInt; function UpdateWithString(data:String):UInt; static var DIGESTMETHOD_SHA256(default, never):UInt; } ================================================ FILE: externs/air/flash/security/CryptContext.hx ================================================ package flash.security; extern class CryptContext extends flash.events.EventDispatcher { var signerCN(default, never):String; var signerDN(default, never):String; var signerValidEnd(default, never):UInt; var verificationTime(default, never):UInt; function new():Void; function HasValidVerifySession():Bool; function VerifySigASync(sig:String, data:String, ignoreCertTime:Bool):Void; function VerifySigSync(sig:String, data:String, ignoreCertTime:Bool):Void; function addCRLRevEvidenceBase64(crl:String):Void; function addCRLRevEvidenceRaw(crl:flash.utils.ByteArray):Void; function addChainBuildingCertBase64(cert:String, trusted:Bool):Void; function addChainBuildingCertRaw(cert:flash.utils.ByteArray, trusted:Bool):Void; function addTimestampingRootRaw(cert:flash.utils.ByteArray):Void; function getDataTBVStatus():UInt; function getIDStatus():UInt; function getIDSummaryFromSigChain(version:UInt):String; function getOverallStatus():UInt; function getPublicKey(cert:String):flash.utils.ByteArray; function getRevCheckSetting():String; function getSignerExtendedKeyUsages():Array; function getSignerIDSummary(version:UInt):String; function getSignerTrustFlags():UInt; function getSignerTrustSettings():Array; function getTimestampRevCheckSetting():String; function getUseSystemTrustStore():Bool; function setRevCheckSetting(setting:String):Void; function setSignerCert(cert:String):Dynamic; function setSignerCertDN(dn:String):Dynamic; function setTimestampRevCheckSetting(setting:String):Void; function useCodeSigningValidationRules():Void; function useSystemTrustStore(trusted:Bool):Void; function verifyTimestamp(tsp:String, data:String, ignoreCertTime:Bool):Void; static var REVCHECK_ALWAYSREQUIRED(default, never):UInt; static var REVCHECK_BEST_EFFORT(default, never):UInt; static var REVCHECK_NEVER(default, never):UInt; static var REVCHECK_REQUIRED_IF_AVAILABLE(default, never):UInt; static var STATUS_INVALID(default, never):UInt; static var STATUS_TROUBLE(default, never):UInt; static var STATUS_UNKNOWN(default, never):UInt; static var STATUS_VALID(default, never):UInt; static var TRUSTFLAG_CODESIGNING(default, never):UInt; static var TRUSTFLAG_PLAYLISTSIGNING(default, never):UInt; static var TRUSTFLAG_SIGNING(default, never):UInt; } ================================================ FILE: externs/air/flash/security/IURIDereferencer.hx ================================================ package flash.security; extern interface IURIDereferencer { function dereference(uri:String):flash.utils.IDataInput; } ================================================ FILE: externs/air/flash/security/ReferencesValidationSetting.hx ================================================ package flash.security; @:native("flash.security.ReferencesValidationSetting") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract ReferencesValidationSetting(String) { var NEVER = "never"; var VALID_IDENTITY = "validIdentity"; var VALID_OR_UNKNOWN_IDENTITY = "validOrUnknownIdentity"; } ================================================ FILE: externs/air/flash/security/RevocationCheckSettings.hx ================================================ package flash.security; @:native("flash.security.RevocationCheckSettings") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract RevocationCheckSettings(String) { var ALWAYS_REQUIRED = "alwaysRequired"; var BEST_EFFORT = "bestEffort"; var NEVER = "never"; var REQUIRED_IF_AVAILABLE = "requiredIfAvailable"; } ================================================ FILE: externs/air/flash/security/SignatureStatus.hx ================================================ package flash.security; @:native("flash.security.SignatureStatus") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SignatureStatus(String) { var INVALID = "invalid"; var UNKNOWN = "unknown"; var VALID = "valid"; } ================================================ FILE: externs/air/flash/security/SignerTrustSettings.hx ================================================ package flash.security; @:native("flash.security.SignerTrustSettings") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SignerTrustSettings(String) { var CODE_SIGNING = "codeSigning"; var PLAYLIST_SIGNING = "playlistSigning"; var SIGNING = "signing"; } ================================================ FILE: externs/air/flash/security/XMLCanonicalizer.hx ================================================ package flash.security; extern class XMLCanonicalizer { function new():Void; function CanonicalizeXML(xml:flash.xml.XML):String; function CanonicalizeXMLList(xmlList:flash.xml.XMLList):String; } ================================================ FILE: externs/air/flash/security/XMLSignatureEnvelopedTransformer.hx ================================================ package flash.security; extern class XMLSignatureEnvelopedTransformer { function new():Void; function transform(sig:flash.xml.XML, doc:flash.xml.XML):flash.xml.XML; } ================================================ FILE: externs/air/flash/security/XMLSignatureValidator.hx ================================================ package flash.security; extern class XMLSignatureValidator extends flash.events.EventDispatcher { var digestStatus(default, never):String; var identityStatus(default, never):String; var referencesStatus(default, never):String; var referencesValidationSetting:ReferencesValidationSetting; var revocationCheckSetting:RevocationCheckSettings; var signerCN(default, never):String; var signerDN(default, never):String; var signerExtendedKeyUsages(default, never):Array; var signerTrustSettings(default, never):Array; var uriDereferencer:IURIDereferencer; var useSystemTrustStore:Bool; var validityStatus(default, never):String; function new():Void; function addCertificate(cert:flash.utils.ByteArray, trusted:Bool):Dynamic; function verify(signature:flash.xml.XML):Void; static var isSupported(default, never):Bool; } ================================================ FILE: externs/air/flash/sensors/DeviceRotation.hx ================================================ package flash.sensors; extern class DeviceRotation extends flash.events.EventDispatcher { var muted(default, never):Bool; function new():Void; function setRequestedUpdateInterval(interval:Float):Void; static var isSupported(default, never):Bool; } ================================================ FILE: externs/air/flash/system/Capabilities.hx ================================================ package flash.system; extern class Capabilities { static var _internal(default, never):UInt; static var avHardwareDisable(default, never):Bool; @:require(flash10_1) static var cpuArchitecture(default, never):String; static var hasAccessibility(default, never):Bool; static var hasAudio(default, never):Bool; static var hasAudioEncoder(default, never):Bool; static var hasEmbeddedVideo(default, never):Bool; static var hasIME(default, never):Bool; static var hasMP3(default, never):Bool; static var hasPrinting(default, never):Bool; static var hasScreenBroadcast(default, never):Bool; static var hasScreenPlayback(default, never):Bool; static var hasStreamingAudio(default, never):Bool; static var hasStreamingVideo(default, never):Bool; static var hasTLS(default, never):Bool; static var hasVideoEncoder(default, never):Bool; static var isDebugger(default, never):Bool; @:require(flash10) static var isEmbeddedInAcrobat(default, never):Bool; static var language(default, never):String; #if air static var languages(default, never):Array; #end static var localFileReadDisable(default, never):Bool; static var manufacturer(default, never):String; @:require(flash10) static var maxLevelIDC(default, never):String; static var os(default, never):String; static var pixelAspectRatio(default, never):Float; static var playerType(default, never):String; static var screenColor(default, never):String; static var screenDPI(default, never):Float; static var screenResolutionX(default, never):Float; static var screenResolutionY(default, never):Float; static var serverString(default, never):String; @:require(flash10_1) static var supports32BitProcesses(default, never):Bool; @:require(flash10_1) static var supports64BitProcesses(default, never):Bool; @:require(flash10_1) static var touchscreenType(default, never):TouchscreenType; static var version(default, never):String; @:require(flash11) static function hasMultiChannelAudio(type:String):Bool; } ================================================ FILE: externs/air/flash/system/SecurityPrivilege.hx ================================================ package flash.system; extern class SecurityPrivilege { function new():Void; static var FILE(default, never):Dynamic; static var FILE_APPSTORE(default, never):Dynamic; static var FILE_PATHACCESS(default, never):Dynamic; static var FILE_READ(default, never):Dynamic; static var FILE_TEMP(default, never):Dynamic; static var FILE_WRITE(default, never):Dynamic; static var FILE_WRITE_RESOURCE(default, never):Dynamic; static var HTML(default, never):Dynamic; static var HTTP_ALL(default, never):Dynamic; static var SCREEN(default, never):Dynamic; static var WINDOW(default, never):Dynamic; } ================================================ FILE: externs/air/flash/text/AutoCapitalize.hx ================================================ package flash.text; @:native("flash.text.AutoCapitalize") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract AutoCapitalize(String) { var ALL = "all"; var NONE = "none"; var SENTENCE = "sentence"; var WORD = "word"; } ================================================ FILE: externs/air/flash/text/ReturnKeyLabel.hx ================================================ package flash.text; @:native("flash.text.ReturnKeyLabel") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract ReturnKeyLabel(String) { var DEFAULT = "default"; var DONE = "done"; var GO = "go"; var NEXT = "next"; var SEARCH = "search"; } ================================================ FILE: externs/air/flash/text/SoftKeyboardType.hx ================================================ package flash.text; @:native("flash.text.SoftKeyboardType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SoftKeyboardType(String) { var CONTACT = "contact"; var DEFAULT = "default"; var EMAIL = "email"; var NUMBER = "number"; var PUNCTUATION = "punctuation"; var URL = "url"; } ================================================ FILE: externs/air/flash/text/StageText.hx ================================================ package flash.text; @:final extern class StageText extends flash.events.EventDispatcher { var autoCapitalize:AutoCapitalize; var autoCorrect:Bool; var clearButtonMode(never, default):StageTextClearButtonMode; var color:UInt; var displayAsPassword:Bool; var editable:Bool; var fontFamily:String; var fontPosture:flash.text.engine.FontPosture; var fontSize:Int; var fontWeight:flash.text.engine.FontWeight; var locale:String; var maxChars:Int; var multiline(default, never):Bool; var restrict:String; var returnKeyLabel:ReturnKeyLabel; var selectionActiveIndex(default, never):Int; var selectionAnchorIndex(default, never):Int; var softKeyboardType:SoftKeyboardType; var stage:flash.display.Stage; var text:String; var textAlign:flash.text.TextFormatAlign; var viewPort:flash.geom.Rectangle; var visible:Bool; function new(?initOptions:StageTextInitOptions):Void; function assignFocus():Void; function dispose():Void; function drawViewPortToBitmapData(bitmap:flash.display.BitmapData):Void; function selectRange(anchorIndex:Int, activeIndex:Int):Void; } ================================================ FILE: externs/air/flash/text/StageTextClearButtonMode.hx ================================================ package flash.text; @:native("flash.text.StageTextClearButtonMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract StageTextClearButtonMode(String) { var ALWAYS = "always"; var NEVER = "never"; var UNLESS_EDITING = "unlessEditing"; var WHILE_EDITING = "whileEditing"; } ================================================ FILE: externs/air/flash/text/StageTextImpl.hx ================================================ package flash.text; extern class StageTextImpl extends flash.display.Sprite { function new():Void; } ================================================ FILE: externs/air/flash/text/StageTextInitOptions.hx ================================================ package flash.text; extern class StageTextInitOptions { var multiline:Bool; function new(multiline:Bool = false):Void; } ================================================ FILE: externs/air/flash/ui/ContextMenu.hx ================================================ package flash.ui; @:final extern class ContextMenu extends flash.display.NativeMenu { var builtInItems:ContextMenuBuiltInItems; @:require(flash10) var clipboardItems:ContextMenuClipboardItems; @:require(flash10) var clipboardMenu:Bool; var customItems:Array; @:require(flash10) var link:flash.net.URLRequest; function new():Void; // function clone() : ContextMenu; function hideBuiltInItems():Void; @:require(flash10_1) static var isSupported(default, never):Bool; // override function clone() : flash.display.NativeMenu; } ================================================ FILE: externs/air/flash/ui/ContextMenuItem.hx ================================================ package flash.ui; @:final extern class ContextMenuItem #if air extends flash.display.NativeMenuItem #end { var caption:String; var separatorBefore:Bool; var visible:Bool; function new(caption:String, separatorBefore:Bool = false, enabled:Bool = true, visible:Bool = true):Void; #if !air function clone():ContextMenuItem; #end } ================================================ FILE: externs/air/sys/FileSystem.hx ================================================ package sys; import flash.filesystem.File in FlashFile; import lime.utils.Log; @:dce @:coreApi class FileSystem { public static function exists(path:String):Bool { return new FlashFile(path).exists; } public static function rename(path:String, newPath:String):Void { new FlashFile(path).moveTo(new FlashFile(newPath)); } public static function stat(path:String):sys.FileStat { Log.warn("stat is not implemented"); return null; } public static function fullPath(relPath:String):String { var flashFile = new FlashFile(relPath); flashFile.canonicalize(); return flashFile.nativePath; } public static function absolutePath(relPath:String):String { return new FlashFile(relPath).nativePath; } public static function isDirectory(path:String):Bool { return new FlashFile(path).isDirectory; } public static function createDirectory(path:String):Void { new FlashFile(path).createDirectory(); } public static function deleteFile(path:String):Void { new FlashFile(path).deleteFile(); } public static function deleteDirectory(path:String):Void { new FlashFile(path).deleteDirectory(false); } public static function readDirectory(path:String):Array { return new FlashFile(path).getDirectoryListing().map(function(f:FlashFile):String { return f.name; }); } } ================================================ FILE: externs/air/sys/io/File.hx ================================================ package sys.io; import flash.utils.ByteArray; import flash.filesystem.File in FlashFile; import flash.filesystem.FileMode; import flash.filesystem.FileStream; import lime.utils.Log; import haxe.io.Bytes; @:dce @:coreApi class File { public static function getContent(path:String):String { var file:FlashFile = null; if (Reflect.hasField(FlashFile, "workingDirectory")) { file = Reflect.field(FlashFile, "workingDirectory").resolvePath(path); } else { file = new FlashFile(path); } var stream = new FileStream(); stream.open(file, FileMode.READ); var content = stream.readUTFBytes(stream.bytesAvailable); stream.close(); return content; } public static function saveContent(path:String, content:String):Void { var file:FlashFile = null; if (Reflect.hasField(FlashFile, "workingDirectory")) { file = Reflect.field(FlashFile, "workingDirectory").resolvePath(path); } else { file = new FlashFile(path); } var stream = new FileStream(); stream.open(file, FileMode.WRITE); stream.writeUTFBytes(content); stream.close(); } public static function getBytes(path:String):haxe.io.Bytes { var file:FlashFile = null; if (Reflect.hasField(FlashFile, "workingDirectory")) { file = Reflect.field(FlashFile, "workingDirectory").resolvePath(path); } else { file = new FlashFile(path); } var stream = new FileStream(); stream.open(file, FileMode.READ); var byteArray = new ByteArray(); stream.readBytes(byteArray, 0, stream.bytesAvailable); stream.close(); return Bytes.ofData(byteArray); } public static function saveBytes(path:String, bytes:haxe.io.Bytes):Void { var byteArray:ByteArray = bytes.getData(); var file:FlashFile = null; if (Reflect.hasField(FlashFile, "workingDirectory")) { file = Reflect.field(FlashFile, "workingDirectory").resolvePath(path); } else { file = new FlashFile(path); } var stream = new FileStream(); stream.open(file, FileMode.WRITE); stream.writeBytes(byteArray); stream.close(); } public static function read(path:String, binary:Bool = true):FileInput { Log.warn("read is not implemented"); return null; } public static function write(path:String, binary:Bool = true):FileOutput { Log.warn("write is not implemented"); return null; } public static function append(path:String, binary:Bool = true):FileOutput { Log.warn("append is not implemented"); return null; } public static function update(path:String, binary:Bool = true):FileOutput { Log.warn("update is not implemented"); return null; } public static function copy(srcPath:String, dstPath:String):Void { var srcFile:FlashFile = null; var dstFile:FlashFile = null; if (Reflect.hasField(FlashFile, "workingDirectory")) { srcFile = Reflect.field(FlashFile, "workingDirectory").resolvePath(srcPath); dstFile = Reflect.field(FlashFile, "workingDirectory").resolvePath(dstPath); } else { srcFile = new FlashFile(srcPath); dstFile = new FlashFile(dstPath); } srcFile.copyTo(dstFile); } } ================================================ FILE: externs/air/sys/io/FileInput.hx ================================================ package sys.io; import haxe.io.Bytes; import haxe.io.Eof; import haxe.io.Error; @:coreApi class FileInput extends haxe.io.Input { private var fd:Int; private var pos:Int; @:allow(sys.io.File) private function new(fd:Int) { this.fd = fd; pos = 0; } override public function readByte():Int { return 0; } override public function readBytes(s:Bytes, pos:Int, len:Int):Int { return 0; } override public function close():Void {} public function seek(p:Int, pos:FileSeek):Void { switch (pos) { case SeekBegin: // this.pos = p; case SeekEnd: // this.pos = cast Fs.fstatSync(fd).size + p; case SeekCur: // this.pos += p; } } public function tell():Int { return 0; } public function eof():Bool { return false; } } ================================================ FILE: externs/air/sys/io/FileOutput.hx ================================================ package sys.io; import haxe.io.Bytes; import haxe.io.Eof; import haxe.io.Error; @:coreApi class FileOutput extends haxe.io.Output { private var fd:Int; private var pos:Int; @:allow(sys.io.File) private function new(fd:Int) { this.fd = fd; pos = 0; } override public function writeByte(b:Int):Void {} override public function writeBytes(s:Bytes, pos:Int, len:Int):Int { return 0; } override public function close():Void {} public function seek(p:Int, pos:FileSeek):Void { switch (pos) { case SeekBegin: // this.pos = p; case SeekEnd: // this.pos = cast Fs.fstatSync(fd).size + p; case SeekCur: // this.pos += p; } } public function tell():Int { return 0; } } ================================================ FILE: extraParams.hxml ================================================ --macro lime._internal.macros.DefineMacro.run() --macro haxe.macro.Compiler.addMetadata("@:autoBuild(lime._internal.macros.AssetsMacro.embedBytes())", "haxe.io.Bytes") ================================================ FILE: haxelib.json ================================================ { "name": "lime", "url": "https://github.com/openfl/lime", "license": "MIT", "tags": [], "description": "A foundational Haxe framework for cross-platform development", "version": "8.3.1", "releasenote": "Various bug fixes", "contributors": [ "singmajesty", "bowlerhat", "Dimensionscape" ], "classPath": "src" } ================================================ FILE: haxelib.xml ================================================ ================================================ FILE: hxformat.json ================================================ { "lineEnds": { "leftCurly": "both", "rightCurly": "both" }, "sameLine": { "ifBody": "same", "ifElse": "next", "doWhile": "next", "tryBody": "next", "tryCatch": "next" } } ================================================ FILE: include.xml ================================================
    ================================================ FILE: ndll/Linux/.gitignore ================================================ ================================================ FILE: ndll/Linux64/.gitignore ================================================ ================================================ FILE: ndll/Mac/.gitignore ================================================ ================================================ FILE: ndll/Mac64/.gitignore ================================================ ================================================ FILE: ndll/MacArm64/.gitignore ================================================ ================================================ FILE: ndll/Windows/.gitignore ================================================ ================================================ FILE: package.json ================================================ { "name": "lime", "private": true } ================================================ FILE: project/Build.xml ================================================
    ================================================ FILE: project/BuildHashlink.xml ================================================
    ================================================ FILE: project/README.md ================================================ # C++ backend project Lime uses this C/C++ code to build reusable binaries for native targets, stored in the [ndll directory](https://github.com/openfl/lime/tree/develop/ndll). Binaries for common targets are included in the Haxelib download, so you won't need to build those yourself unless you make changes. Tip: if you install Lime from Git, you can still copy the ndlls from Lime's latest Haxelib release. ## Project overview This directory contains two categories of code. - Lime-specific headers and source files can be found under [include](include) and [src](src), respectively. [`ExternalInterface`](src/ExternalInterface.cpp) serves as the entry point into this code. - [Submodules](#submodule-projects) such as Cairo, SDL, and OpenAL can be found under [lib](lib). ### Prerequisites - All platforms require [hxcpp](https://lib.haxe.org/p/hxcpp/). - Windows requires [Visual Studio C++ components](https://visualstudio.microsoft.com/vs/features/cplusplus/). - Mac requires [Xcode](https://developer.apple.com/xcode/). - Linux requires several packages (names may vary per distro). - Ubunutu requires the following packages. ```bash sudo apt install libgl1-mesa-dev libglu1-mesa-dev g++ g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev ``` - While Raspberry Pi OS also uses `apt`, it requires a slightly different set of packages. ```bash sudo apt install libgl1-mesa-dev libglu1-mesa-dev g++ libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev libxcursor-dev libdbus-1-dev libdrm-dev libgbm-dev libudev-dev ``` - Fedora requires the following packages. ```bash sudo dnf install g++ glibc-devel.x86_64 libstdc++-devel.x86_64 glibc-devel.i686 libstdc++-devel.i686 alsa-lib-devel pulseaudio-libs-devel libX11-devel libXi-devel libXrandr-devel libglvnd-devel ``` - Building HashLink requires [additional packages](https://github.com/HaxeFoundation/hashlink#readme). ### Rebuilding Use `lime rebuild ` to build or rebuild a set of binaries. Once finished, you can find them in the [ndll directory](https://github.com/openfl/lime/tree/develop/ndll). ```bash lime rebuild windows #Recompile the Windows binary (lime.ndll). lime rebuild android -clean #Compile the Android binaries (liblime-##.so) from scratch, even if no changes are detected. lime rebuild mac -64 #Recompile only the x86-64 binary (lime.ndll) for Mac. lime rebuild hl #Recompile the HashLink binaries (lime.hdll and others). ``` See `lime help rebuild` for details and additional options. > Note: even without an explicit `rebuild` command, running `lime` will automatically build lime.ndll for your machine. Even if you never target C++ or Neko, this binary will help with small tasks such as rendering icons. ### Build troubleshooting If errors appeared after updating Lime, the update process may not be complete. Run these commands: ```bash git submodule init git submodule sync git submodule update lime rebuild tools ``` For errors that appeared after changing a source file, you may need to update the build configuration. - Errors in the [src](src) and [include](include) directories usually require updating [Build.xml](Build.xml). - Errors in the [lib](lib) directory usually require updating that submodule's xml file. So for instance, if the error message points to lib/cairo/src/cairo.c, you most likely need to edit [cairo-files.xml](lib/cairo-files.xml). If the error message points to lib/hashlink/src/main.c, look at [BuildHashlink.xml](BuildHashlink.xml). (Though libraries do reference one another sometimes, so this isn't a hard rule.) Common errors and their solutions: - `[header].h: No such file or directory`: Include the header if it exists. If not, run `git status` to confirm that your submodules are up to date. ```xml ``` - `undefined reference to [symbol]`: Locate the source file that defines the symbol, then add it. ```xml ``` - `'std::istringstream' has no member named 'swap'`: Your Android NDK is out of date; switch to version 20 or higher. (Version 21 recommended.) See also [submodule troubleshooting](#submodule-troubleshooting). ## Submodule projects Lime includes code from several other C/C++ libraries, each of which is treated as a [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules). For more information on the individual libraries, see [lib/README.md](lib/README.md). ### Custom headers and source files All submodules are used as-is, meaning Lime never modifies the contents of the submodule folder. When Lime needs to modify or add a file, the file goes in [lib/custom](lib/custom). Caution: overriding a file requires extra maintenance. Always try to find a different solution first. lib/custom should contain as few files as possible. ### Updating a submodule Submodules are Git repositories in their own right, and are typically kept in "detached HEAD" state. Lime never modifies its submodules directly, but instead changes which commit the HEAD points to. To update to a more recent version of a submodule: 1. Open the project's primary repo or GitHub mirror. 2. Browse the tags until you find the version you wish to update to. (Or browse commits, but that's discouraged.) 3. Copy the commit ID for your chosen version. 4. Open your local submodule folder on the command line. (From here, any `git` commands will affect the submodule instead of Lime.) 5. Update the library: ```bash $ git checkout [commit ID] Previous HEAD position was [old commit ID] [old commit message] HEAD is now at [commit ID] [commit message] ``` If you get a "reference is not a tree" error, run `git fetch --unshallow`, then try again. (Lime downloads submodules in "shallow" mode to save time and space, and not all commits are fetched until you explicitly fetch them.) 6. If you exit the submodule and run `git status`, you'll find an unstaged change representing the update. Once you [finish testing](#rebuilding), you can commit this change and submit it as a pull request. ### Submodule troubleshooting Here are some submodule-specific problems you might run into while rebuilding. - The project is missing a crucial header file, or has `[header].h.in` instead of the header you need: 1. Look for an `autogen.sh` file. If it exists, run it. (On Windows, you may need [WSL](https://docs.microsoft.com/en-us/windows/wsl/about), or you might be able to find a .bat file that does what you need.) 2. If step 1 fails, look for instructions on how to configure the project. This will often involving using `make`, `cmake`, and/or `./configure`. (Again, Windows users may need WSL.) 3. One of the above steps should hopefully generate the missing header. Place the generated file inside [the custom folder](#custom-headers-and-source-files). - The compiler uses the submodule's original header instead of Lime's custom header: 1. Make sure the custom folder is included first. ```xml ``` 2. If the header is in the same directory as the corresponding source files, you cannot override it. Try setting compiler flags to get the result you want, or look for a different file to override. ```xml ``` 3. Approach the problem from a different angle. Upgrade or downgrade the submodule, or open an issue. ================================================ FILE: project/include/app/Application.h ================================================ #ifndef LIME_APP_APPLICATION_H #define LIME_APP_APPLICATION_H #include namespace lime { class Application { public: virtual ~Application () {}; static AutoGCRoot* callback; virtual int Exec () = 0; virtual void Init () = 0; virtual int Quit () = 0; virtual void SetFrameRate (double frameRate) = 0; virtual bool Update () = 0; }; Application* CreateApplication (); } #endif ================================================ FILE: project/include/app/ApplicationEvent.h ================================================ #ifndef LIME_APP_APPLICATION_EVENT_H #define LIME_APP_APPLICATION_EVENT_H #include #include namespace lime { enum ApplicationEventType { UPDATE, EXIT }; struct ApplicationEvent { hl_type* t; int deltaTime; ApplicationEventType type; static ValuePointer* callback; static ValuePointer* eventObject; ApplicationEvent (); static void Dispatch (ApplicationEvent* event); }; } #endif ================================================ FILE: project/include/graphics/Image.h ================================================ #ifndef LIME_GRAPHICS_IMAGE_H #define LIME_GRAPHICS_IMAGE_H #include #include #include namespace lime { struct Image { hl_type* t; ImageBuffer* buffer; bool dirty; int height; int offsetX; int offsetY; Rectangle* rect; venum* type; int version; int width; double x; double y; Image (value image); ~Image (); }; } #endif ================================================ FILE: project/include/graphics/ImageBuffer.h ================================================ #ifndef LIME_GRAPHICS_IMAGE_BUFFER_H #define LIME_GRAPHICS_IMAGE_BUFFER_H #include #include #include namespace lime { struct ImageBuffer { hl_type* t; int bitsPerPixel; ArrayBufferView* data; PixelFormat format; int height; bool premultiplied; bool transparent; int width; vdynamic* __srcBitmapData; vdynamic* __srcCanvas; vdynamic* __srcContext; vdynamic* __srcCustom; vdynamic* __srcImage; vdynamic* __srcImageData; ImageBuffer (value imageBuffer); ~ImageBuffer (); void Blit (const unsigned char* data, int x, int y, int width, int height); void Resize (int width, int height, int bitsPerPixel = 32); int Stride (); value Value (); value Value (value imageBuffer); }; } #endif ================================================ FILE: project/include/graphics/PixelFormat.h ================================================ #ifndef LIME_GRAPHICS_PIXEL_FORMAT_H #define LIME_GRAPHICS_PIXEL_FORMAT_H namespace lime { enum PixelFormat { RGBA32, ARGB32, BGRA32 }; } #endif ================================================ FILE: project/include/graphics/RenderEvent.h ================================================ #ifndef LIME_GRAPHICS_RENDER_EVENT_H #define LIME_GRAPHICS_RENDER_EVENT_H #include #include namespace lime { enum RenderEventType { RENDER, RENDER_CONTEXT_LOST, RENDER_CONTEXT_RESTORED }; struct RenderEvent { hl_type* t; RenderEventType type; static ValuePointer* callback; static ValuePointer* eventObject; RenderEvent (); static void Dispatch (RenderEvent* event); }; } #endif ================================================ FILE: project/include/graphics/format/JPEG.h ================================================ #ifndef LIME_GRAPHICS_FORMAT_JPEG_H #define LIME_GRAPHICS_FORMAT_JPEG_H #include #include #include namespace lime { class JPEG { public: static bool Decode (Resource *resource, ImageBuffer *imageBuffer, bool decodeData = true); static bool Encode (ImageBuffer *imageBuffer, Bytes *bytes, int quality); }; } #endif ================================================ FILE: project/include/graphics/format/PNG.h ================================================ #ifndef LIME_GRAPHICS_FORMAT_PNG_H #define LIME_GRAPHICS_FORMAT_PNG_H #include #include #include namespace lime { class PNG { public: static bool Decode (Resource *resource, ImageBuffer *imageBuffer, bool decodeData = true); static bool Encode (ImageBuffer *imageBuffer, Bytes *bytes); }; } #endif ================================================ FILE: project/include/graphics/utils/ImageDataUtil.h ================================================ #ifndef LIME_GRAPHICS_UTILS_IMAGE_DATA_UTIL_H #define LIME_GRAPHICS_UTILS_IMAGE_DATA_UTIL_H #include #include #include #include #include #include #include #include #include #include namespace lime { class ImageDataUtil { public: static void ColorTransform (Image* image, Rectangle* rect, ColorMatrix* ColorMatrix); static void CopyChannel (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int srcChannel, int destChannel); static void CopyPixels (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, Image* alphaImage, Vector2* alphaPoint, bool mergeAlpha); static void FillRect (Image* image, Rectangle* rect, int32_t color); static void FloodFill (Image* image, int x, int y, int32_t color); static void GetPixels (Image* image, Rectangle* rect, PixelFormat format, Bytes* pixels); static void Merge (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int redMultiplier, int greenMultiplier, int blueMultiplier, int alphaMultiplier); static void MultiplyAlpha (Image* image); static void Resize (Image* image, ImageBuffer* buffer, int width, int height); static void SetFormat (Image* image, PixelFormat format); static void SetPixels (Image* image, Rectangle* rect, Bytes* bytes, int offset, PixelFormat format, Endian endian); static int Threshold (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int operation, int32_t threshold, int32_t color, int32_t mask, bool copySource); static void UnmultiplyAlpha (Image* image); }; class ImageDataView { public: ImageDataView (Image* image, Rectangle* rect); void Clip (int x, int y, int width, int height); bool HasRow (int y); void Offset (int x, int y); int Row (int y); int x; int y; int width; int height; private: void __Update (); int byteOffset; Image* image; Rectangle rect; int stride; }; } #endif ================================================ FILE: project/include/hx/CFFIExt.h ================================================ #ifndef HX_CFFIEXT_INCLUDED #define HX_CFFIEXT_INCLUDED #include #if defined(STATIC_LINK) && defined(IMPLEMENT_CFFI_EXT) void *LoadFunc(const char *inName) { return 0; } #else extern void *LoadFunc(const char *inName); #endif #ifdef IMPLEMENT_CFFI_EXT #define DEFFUNC_EXT(name,ret,def_args,call_args) \ typedef ret (*FUNC_##name)def_args; \ FUNC_##name IMPL_##name = NULL; \ extern FUNC_##name EXT_##name; \ bool LOADED_##name = false; \ bool HAS_##name () \ { \ if (!LOADED_##name) \ { \ IMPL_##name = (FUNC_##name)LoadFunc(#name); \ LOADED_##name = true; \ } \ return IMPL_##name != NULL; \ } \ ret REAL_##name def_args \ { \ if (!HAS_##name()) \ { \ fprintf(stderr,"Could not find external function:" #name " \n"); \ abort(); \ } \ EXT_##name = IMPL_##name; \ return IMPL_##name call_args; \ } \ FUNC_##name EXT_##name = REAL_##name; #else #define DEFFUNC_EXT(name,ret,def_args,call_args) \ typedef ret (*FUNC_##name)def_args; \ extern bool HAS_##name (); \ extern FUNC_##name EXT_##name; #endif #define DEFFUNC_EXT_0(ret,name) DEFFUNC_EXT(name,ret, (), ()) #define DEFFUNC_EXT_1(ret,name,t1) DEFFUNC_EXT(name,ret, (t1 a1), (a1)) #define DEFFUNC_EXT_2(ret,name,t1,t2) DEFFUNC_EXT(name,ret, (t1 a1, t2 a2), (a1,a2)) #define DEFFUNC_EXT_3(ret,name,t1,t2,t3) DEFFUNC_EXT(name,ret, (t1 a1, t2 a2, t3 a3), (a1,a2,a3)) #define DEFFUNC_EXT_4(ret,name,t1,t2,t3,t4) DEFFUNC_EXT(name,ret, (t1 a1, t2 a2, t3 a3, t4 a4), (a1,a2,a3,a4)) #define DEFFUNC_EXT_5(ret,name,t1,t2,t3,t4,t5) DEFFUNC_EXT(name,ret, (t1 a1, t2 a2, t3 a3, t4 a4,t5 a5), (a1,a2,a3,a4,a5)) DEFFUNC_EXT_1(value,pin_buffer,buffer); DEFFUNC_EXT_1(void,unpin_buffer,value); DEFFUNC_EXT_2(value,alloc_array_type,int,hxValueType); static value alloc_array_type_wrap(int size, hxValueType type) { return HAS_alloc_array_type() ? EXT_alloc_array_type(size, type) : alloc_array (size); } #endif ================================================ FILE: project/include/math/ColorMatrix.h ================================================ #ifndef LIME_MATH_COLOR_MATRIX_H #define LIME_MATH_COLOR_MATRIX_H #include #include #include #include namespace lime { class ColorMatrix { public: ColorMatrix (); ColorMatrix (value colorMatrix); ColorMatrix (ArrayBufferView* colorMatrix); ~ColorMatrix (); float GetAlphaMultiplier (); float GetAlphaOffset (); void GetAlphaTable (unsigned char* table); float GetBlueMultiplier (); float GetBlueOffset (); void GetBlueTable (unsigned char* table); int32_t GetColor (); float GetGreenMultiplier (); float GetGreenOffset (); void GetGreenTable (unsigned char* table); float GetRedMultiplier (); float GetRedOffset (); void GetRedTable (unsigned char* table); float data[20]; private: void GetDataTable (unsigned char* table, float multiplier, float offset); }; } #endif ================================================ FILE: project/include/math/Matrix3.h ================================================ #ifndef LIME_MATH_MATRIX_3_H #define LIME_MATH_MATRIX_3_H #include namespace lime { struct Matrix3 { hl_type* t; double a; double b; double c; double d; double tx; double ty; Matrix3 (double a, double b, double c, double d, double tx, double ty); Matrix3 (value matrix3); void SetTo (double a, double b, double c, double d, double tx, double ty); value Value (); value Value (value matrix3); }; } #endif ================================================ FILE: project/include/math/Rectangle.h ================================================ #ifndef LIME_MATH_RECTANGLE_H #define LIME_MATH_RECTANGLE_H #include namespace lime { struct Rectangle { hl_type* t; double height; double width; double x; double y; Rectangle (); Rectangle (double x, double y, double width, double height); Rectangle (value rect); void Contract (double x, double y, double width, double height); void SetTo (double x, double y, double width, double height); value Value (); value Value (value rect); }; } #endif ================================================ FILE: project/include/math/Vector2.h ================================================ #ifndef LIME_MATH_VECTOR2_H #define LIME_MATH_VECTOR2_H #include namespace lime { struct Vector2 { hl_type* t; double x; double y; Vector2 (double x, double y); Vector2 (value vec); void SetTo (double x, double y); value Value (); value Value (value vec); }; } #endif ================================================ FILE: project/include/math/color/RGBA.h ================================================ #ifndef LIME_MATH_COLOR_RGBA_H #define LIME_MATH_COLOR_RGBA_H #include #include #include #include namespace lime { int __alpha16[0xFF + 1]; int __clamp[0xFF + 0xFF + 1]; static int a16; static double unmult; int initValues () { for (int i = 0; i < 256; i++) { __alpha16[i] = (int) ceil ((float)(i + 1) * ((1 << 16) / 0xFF)); } for (int i = 0; i < 0xFF; i++) { __clamp[i] = i; } for (int i = 0xFF; i < (0xFF + 0xFF + 1); i++) { __clamp[i] = 0xFF; } return 0; } static int initValues_ = initValues (); struct RGBA { public: inline RGBA () { r = 0; g = 0; b = 0; a = 0; } inline RGBA (int32_t rgba) { r = (rgba >> 24) & 0xFF; g = (rgba >> 16) & 0xFF; b = (rgba >> 8) & 0xFF; a = rgba & 0xFF; } inline RGBA (unsigned char r, unsigned char g, unsigned char b, unsigned char a) { Set (r, g, b, a); } inline int32_t Get () { int32_t value = ((r & 0xFF) << 24) | ((g & 0xFF) << 16) | ((b & 0xFF) << 8) | (a & 0xFF); return value; } inline void MultiplyAlpha () { if (a == 0) { Set (0, 0, 0, 0); } else if (a != 0xFF) { a16 = __alpha16[a]; Set ((r * a16) >> 16, (g * a16) >> 16, (b * a16) >> 16, a); } } inline void UnmultiplyAlpha () { if (a != 0 && a != 0xFF) { unmult = 255.0 / a; Set (__clamp[(int)(r * unmult)], __clamp[(int)(g * unmult)], __clamp[(int)(b * unmult)], a); } } inline void ReadUInt8 (const unsigned char* data, int offset, PixelFormat format, bool premultiplied, Endian endian) { switch (format) { case BGRA32: if (endian == LIME_LITTLE_ENDIAN) Set (data[offset + 1], data[offset + 2], data[offset + 3], data[offset]); else Set (data[offset + 2], data[offset + 1], data[offset], data[offset + 3]); break; case RGBA32: if (endian == LIME_LITTLE_ENDIAN) Set (data[offset + 3], data[offset + 2], data[offset + 1], data[offset]); else Set (data[offset], data[offset + 1], data[offset + 2], data[offset + 3]); break; case ARGB32: if (endian == LIME_LITTLE_ENDIAN) Set (data[offset + 2], data[offset + 1], data[offset], data[offset + 3]); else Set (data[offset + 1], data[offset + 2], data[offset + 3], data[offset]); break; } if (premultiplied) { UnmultiplyAlpha (); } } inline void Set (unsigned char r, unsigned char g, unsigned char b, unsigned char a) { this->r = r; this->g = g; this->b = b; this->a = a; } inline void WriteUInt8 (unsigned char* data, int offset, PixelFormat format, bool premultiplied) { if (premultiplied) { MultiplyAlpha (); } switch (format) { case BGRA32: data[offset] = b; data[offset + 1] = g; data[offset + 2] = r; data[offset + 3] = a; break; case RGBA32: data[offset] = r; data[offset + 1] = g; data[offset + 2] = b; data[offset + 3] = a; break; case ARGB32: data[offset] = a; data[offset + 1] = r; data[offset + 2] = g; data[offset + 3] = b; break; } } inline bool operator == (RGBA& rgba) { return (a == rgba.a && r == rgba.r && g == rgba.g && b == rgba.b); } unsigned char r; unsigned char g; unsigned char b; unsigned char a; }; } #endif ================================================ FILE: project/include/media/AudioBuffer.h ================================================ #ifndef LIME_MEDIA_AUDIO_BUFFER_H #define LIME_MEDIA_AUDIO_BUFFER_H #include #include #ifdef ANDROID #include #endif #ifdef ANDROID #define LOG_SOUND(args,...) __android_log_print(ANDROID_LOG_INFO, "Lime", args, ##__VA_ARGS__) #else #ifdef IPHONE //#define LOG_SOUND(args,...) printf(args, ##__VA_ARGS__) #define LOG_SOUND(args...) { } #elif defined(TIZEN) #include #define LOG_SOUND(args,...) AppLog(args, ##__VA_ARGS__) #else #define LOG_SOUND(args,...) printf(args, ##__VA_ARGS__) #endif #endif //#define LOG_SOUND(args...) { } namespace lime { struct AudioBuffer { hl_type* t; int bitsPerSample; int channels; ArrayBufferView* data; int sampleRate; vdynamic* __srcAudio; vdynamic* __srcBuffer; vdynamic* __srcCustom; vdynamic* __srcHowl; vdynamic* __srcSound; vdynamic* __srcVorbisFile; AudioBuffer (value audioBuffer); ~AudioBuffer (); value Value (value audioBuffer); value Value (); }; } #endif ================================================ FILE: project/include/media/codecs/vorbis/VorbisFile.h ================================================ #ifndef LIME_MEDIA_CODECS_VORBIS_VORBIS_FILE_H #define LIME_MEDIA_CODECS_VORBIS_VORBIS_FILE_H #include #include namespace lime { class VorbisFile { public: static OggVorbis_File* FromBytes (Bytes* bytes); static OggVorbis_File* FromFile (const char* path); }; } #endif ================================================ FILE: project/include/media/containers/OGG.h ================================================ #ifndef LIME_MEDIA_CONTAINERS_OGG_H #define LIME_MEDIA_CONTAINERS_OGG_H #include #include namespace lime { class OGG { public: static bool Decode (Resource *resource, AudioBuffer *audioBuffer); }; } #endif ================================================ FILE: project/include/media/containers/WAV.h ================================================ #ifndef LIME_MEDIA_CONTAINERS_WAV_H #define LIME_MEDIA_CONTAINERS_WAV_H #include #include namespace lime { struct RIFF_Header { char chunkID[4]; unsigned int chunkSize; //size not including chunkSize or chunkID char format[4]; }; struct WAVE_Format { char subChunkID[4]; unsigned int subChunkSize; short audioFormat; short numChannels; unsigned int sampleRate; unsigned int byteRate; short blockAlign; short bitsPerSample; }; struct WAVE_Data { char subChunkID[4]; //should contain the word data unsigned int subChunkSize; //Stores the size of the data block }; class WAV { public: static bool Decode (Resource *resource, AudioBuffer *audioBuffer); }; } #endif ================================================ FILE: project/include/system/CFFI.h ================================================ #ifndef LIME_SYSTEM_CFFI_H #define LIME_SYSTEM_CFFI_H #define HL_NAME(n) lime_##n #include #undef DEFINE_PRIM #define DEFINE_HL_PRIM(t, name, args) DEFINE_PRIM_WITH_NAME(t, name, args, name) typedef vdynamic hl_vdynamic; typedef vobj hl_vobj; typedef vvirtual hl_vvirtual; typedef varray hl_varray; typedef vclosure hl_vclosure; typedef vclosure_wrapper hl_vclosure_wrapper; typedef vdynobj hl_vdynobj; typedef venum hl_venum; typedef vstring hl_vstring; #undef hl_aptr #define hl_aptr(a,t) ((t*)(((hl_varray*)(a))+1)) #include #ifndef LIME_HASHLINK // define stubs in CFFI.cpp #endif #endif ================================================ FILE: project/include/system/CFFIPointer.h ================================================ #ifndef LIME_SYSTEM_CFFI_POINTER_H #define LIME_SYSTEM_CFFI_POINTER_H #include namespace hx { class Object; typedef void (*finalizer)(value v); } namespace lime { struct HL_CFFIPointer { void* finalizer; void* ptr; }; typedef void (*hl_finalizer)(void* v); value CFFIPointer (void* ptr, hx::finalizer finalizer = 0); value CFFIPointer (value handle, hx::finalizer finalizer = 0); HL_CFFIPointer* HLCFFIPointer (void* ptr, hl_finalizer finalizer = 0); } #endif ================================================ FILE: project/include/system/Clipboard.h ================================================ #ifndef LIME_SYSTEM_CLIPBOARD_H #define LIME_SYSTEM_CLIPBOARD_H namespace lime { class Clipboard { public: static const char* GetText (); static bool HasText (); static bool SetText (const char* text); }; } #endif ================================================ FILE: project/include/system/ClipboardEvent.h ================================================ #ifndef LIME_SYSTEM_CLIPBOARD_EVENT_H #define LIME_SYSTEM_CLIPBOARD_EVENT_H #include #include namespace lime { enum ClipboardEventType { CLIPBOARD_UPDATE }; struct ClipboardEvent { hl_type* t; ClipboardEventType type; static ValuePointer* callback; static ValuePointer* eventObject; ClipboardEvent (); static void Dispatch (ClipboardEvent* event); }; } #endif ================================================ FILE: project/include/system/Display.h ================================================ #ifndef LIME_SYSTEM_DISPLAY_H #define LIME_SYSTEM_DISPLAY_H #include namespace lime { class Display { public: static void GetSafeAreaInsets (int displayIndex, Rectangle * rect); }; } #endif ================================================ FILE: project/include/system/DisplayMode.h ================================================ #ifndef LIME_SYSTEM_DISPLAY_MODE_H #define LIME_SYSTEM_DISPLAY_MODE_H #include #include namespace lime { class DisplayMode { public: hl_type* t; int height; PixelFormat pixelFormat; int refreshRate; int width; DisplayMode (); DisplayMode (value DisplayMode); DisplayMode (int width, int height, PixelFormat pixelFormat, int refreshRate); void CopyFrom (DisplayMode* other); void* Value (); }; } #endif ================================================ FILE: project/include/system/Endian.h ================================================ #ifndef LIME_SYSTEM_ENDIAN_H #define LIME_SYSTEM_ENDIAN_H namespace lime { enum Endian { LIME_LITTLE_ENDIAN, LIME_BIG_ENDIAN }; } #endif ================================================ FILE: project/include/system/FileWatcher.h ================================================ #ifndef LIME_SYSTEM_FILE_WATCHER_H #define LIME_SYSTEM_FILE_WATCHER_H #include #include #include #include #include #ifdef RemoveDirectory #undef RemoveDirectory #endif namespace lime { struct FileWatcherEvent { long watchID; std::string dir; std::string file; int action; std::string oldFile; }; class FileWatcher { public: FileWatcher (value callback); ~FileWatcher (); long AddDirectory (const std::string directory, bool recursive); void QueueEvent (FileWatcherEvent event); void RemoveDirectory (long watchID); void Update (); private: AutoGCRoot* callback; void* fileWatcher; Mutex* mutex; std::vector queue; std::map listeners; }; } #endif ================================================ FILE: project/include/system/JNI.h ================================================ #ifndef LIME_SYSTEM_JNI_H #define LIME_SYSTEM_JNI_H namespace lime { class JNI { public: static void *GetEnv (); }; } #endif ================================================ FILE: project/include/system/Locale.h ================================================ #ifndef LIME_SYSTEM_LOCALE_H #define LIME_SYSTEM_LOCALE_H #include namespace lime { class Locale { public: static std::string* GetSystemLocale (); }; } #endif ================================================ FILE: project/include/system/Mutex.h ================================================ #ifndef LIME_SYSTEM_MUTEX_H #define LIME_SYSTEM_MUTEX_H namespace lime { class Mutex { public: Mutex (); ~Mutex (); bool Lock () const; bool TryLock () const; bool Unlock () const; private: void* mutex; }; } #endif ================================================ FILE: project/include/system/OrientationEvent.h ================================================ #ifndef LIME_SYSTEM_ORIENTATION_EVENT_H #define LIME_SYSTEM_ORIENTATION_EVENT_H #include #include namespace lime { enum OrientationEventType { DISPLAY_ORIENTATION_CHANGE, DEVICE_ORIENTATION_CHANGE }; struct OrientationEvent { hl_type* t; int orientation; int display; OrientationEventType type; static ValuePointer* callback; static ValuePointer* eventObject; OrientationEvent (); static void Dispatch (OrientationEvent* event); }; } #endif ================================================ FILE: project/include/system/SensorEvent.h ================================================ #ifndef LIME_SYSTEM_SENSOR_EVENT_H #define LIME_SYSTEM_SENSOR_EVENT_H #include #include namespace lime { enum SensorEventType { SENSOR_ACCELEROMETER }; struct SensorEvent { hl_type* t; int id; double x; double y; double z; SensorEventType type; static ValuePointer* callback; static ValuePointer* eventObject; SensorEvent (); static void Dispatch (SensorEvent* event); }; } #endif ================================================ FILE: project/include/system/System.h ================================================ #ifndef LIME_SYSTEM_SYSTEM_H #define LIME_SYSTEM_SYSTEM_H #include #include #include namespace lime { enum SystemDirectory { APPLICATION, APPLICATION_STORAGE, DESKTOP, DOCUMENTS, FONTS, USER }; class System { public: static void GCEnterBlocking (); static void GCExitBlocking (); static void GCTryEnterBlocking (); static void GCTryExitBlocking (); static bool GetAllowScreenTimeout (); static std::wstring* GetDeviceModel (); static std::wstring* GetDeviceVendor (); static std::wstring* GetDirectory (SystemDirectory type, const char* company, const char* title); static void* GetDisplay (bool useCFFIValue, int id); #ifdef IPHONE static std::wstring* GetIOSDirectory (SystemDirectory type); static bool GetIOSTablet (); #endif static int GetNumDisplays (); static int GetDeviceOrientation (); static std::wstring* GetPlatformLabel (); static std::wstring* GetPlatformName (); static std::wstring* GetPlatformVersion (); static double GetTimer (); #if defined(HX_WINDOWS) && !defined (HX_WINRT) static int GetWindowsConsoleMode (int handleType); #endif static void OpenFile (const char* path); static void OpenURL (const char* url, const char* target); static bool SetAllowScreenTimeout (bool allow); #if defined(HX_WINDOWS) && !defined (HX_WINRT) static bool SetWindowsConsoleMode (int handleType, int mode); #endif static void EnableDeviceOrientationChange(bool enable); private: static bool _isHL; }; struct FILE_HANDLE { void *handle; FILE_HANDLE (void* handle) : handle (handle) {} FILE* getFile (); int getLength (); bool isFile (); }; extern int fclose (FILE_HANDLE *stream); extern FILE_HANDLE *fdopen (int fd, const char *mode); extern FILE_HANDLE *fopen (const char *filename, const char *mode); //extern FILE* freopen (const char *filename, const char *mode, FILE *stream); extern size_t fread (void *ptr, size_t size, size_t count, FILE_HANDLE *stream); extern int fseek (FILE_HANDLE *stream, long int offset, int origin); extern long int ftell (FILE_HANDLE *stream); extern size_t fwrite (const void *ptr, size_t size, size_t count, FILE_HANDLE *stream); } #if !defined(HX_WINDOWS) || defined(__MINGW32__) #include #else // ISO C9x compliant stdint.h for Microsoft Visual Studio // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 // // Copyright (c) 2006-2013 Alexander Chemeris // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // 3. Neither the name of the product nor the names of its contributors may // be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////////// #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_STDINT_H_ // [ #define _MSC_STDINT_H_ #if _MSC_VER > 1000 #pragma once #endif #if _MSC_VER >= 1600 // [ #include #else // ] _MSC_VER >= 1600 [ #include // For Visual Studio 6 in C++ mode and for many Visual Studio versions when // compiling for ARM we should wrap include with 'extern "C++" {}' // or compiler give many errors like this: // error C2733: second C linkage of overloaded function 'wmemchr' not allowed #ifdef __cplusplus extern "C" { #endif # include #ifdef __cplusplus } #endif // Define _W64 macros to mark types changing their size, like intptr_t. #ifndef _W64 # if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 # define _W64 __w64 # else # define _W64 # endif #endif // 7.18.1 Integer types // 7.18.1.1 Exact-width integer types // Visual Studio 6 and Embedded Visual C++ 4 doesn't // realize that, e.g. char has the same size as __int8 // so we give up on __intX for them. #if (_MSC_VER < 1300) typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #else typedef signed __int8 int8_t; typedef signed __int16 int16_t; typedef signed __int32 int32_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; #endif typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; // 7.18.1.2 Minimum-width integer types typedef int8_t int_least8_t; typedef int16_t int_least16_t; typedef int32_t int_least32_t; typedef int64_t int_least64_t; typedef uint8_t uint_least8_t; typedef uint16_t uint_least16_t; typedef uint32_t uint_least32_t; typedef uint64_t uint_least64_t; // 7.18.1.3 Fastest minimum-width integer types typedef int8_t int_fast8_t; typedef int16_t int_fast16_t; typedef int32_t int_fast32_t; typedef int64_t int_fast64_t; typedef uint8_t uint_fast8_t; typedef uint16_t uint_fast16_t; typedef uint32_t uint_fast32_t; typedef uint64_t uint_fast64_t; // 7.18.1.4 Integer types capable of holding object pointers #ifdef _WIN64 // [ typedef signed __int64 intptr_t; typedef unsigned __int64 uintptr_t; #else // _WIN64 ][ typedef _W64 signed int intptr_t; typedef _W64 unsigned int uintptr_t; #endif // _WIN64 ] // 7.18.1.5 Greatest-width integer types typedef int64_t intmax_t; typedef uint64_t uintmax_t; // 7.18.2 Limits of specified-width integer types #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 // 7.18.2.1 Limits of exact-width integer types #define INT8_MIN ((int8_t)_I8_MIN) #define INT8_MAX _I8_MAX #define INT16_MIN ((int16_t)_I16_MIN) #define INT16_MAX _I16_MAX #define INT32_MIN ((int32_t)_I32_MIN) #define INT32_MAX _I32_MAX #define INT64_MIN ((int64_t)_I64_MIN) #define INT64_MAX _I64_MAX #define UINT8_MAX _UI8_MAX #define UINT16_MAX _UI16_MAX #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX // 7.18.2.2 Limits of minimum-width integer types #define INT_LEAST8_MIN INT8_MIN #define INT_LEAST8_MAX INT8_MAX #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MIN INT32_MIN #define INT_LEAST32_MAX INT32_MAX #define INT_LEAST64_MIN INT64_MIN #define INT_LEAST64_MAX INT64_MAX #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX // 7.18.2.3 Limits of fastest minimum-width integer types #define INT_FAST8_MIN INT8_MIN #define INT_FAST8_MAX INT8_MAX #define INT_FAST16_MIN INT16_MIN #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST64_MIN INT64_MIN #define INT_FAST64_MAX INT64_MAX #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX // 7.18.2.4 Limits of integer types capable of holding object pointers #ifdef _WIN64 // [ # define INTPTR_MIN INT64_MIN # define INTPTR_MAX INT64_MAX # define UINTPTR_MAX UINT64_MAX #else // _WIN64 ][ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX #endif // _WIN64 ] // 7.18.2.5 Limits of greatest-width integer types #define INTMAX_MIN INT64_MIN #define INTMAX_MAX INT64_MAX #define UINTMAX_MAX UINT64_MAX // 7.18.3 Limits of other integer types #ifdef _WIN64 // [ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX #else // _WIN64 ][ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX #endif // _WIN64 ] #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX #ifndef SIZE_MAX // [ # ifdef _WIN64 // [ # define SIZE_MAX _UI64_MAX # else // _WIN64 ][ # define SIZE_MAX _UI32_MAX # endif // _WIN64 ] #endif // SIZE_MAX ] // WCHAR_MIN and WCHAR_MAX are also defined in #ifndef WCHAR_MIN // [ # define WCHAR_MIN 0 #endif // WCHAR_MIN ] #ifndef WCHAR_MAX // [ # define WCHAR_MAX _UI16_MAX #endif // WCHAR_MAX ] #define WINT_MIN 0 #define WINT_MAX _UI16_MAX #endif // __STDC_LIMIT_MACROS ] // 7.18.4 Limits of other integer types #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 // 7.18.4.1 Macros for minimum-width integer constants #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 #define INT32_C(val) val##i32 #define INT64_C(val) val##i64 #define UINT8_C(val) val##ui8 #define UINT16_C(val) val##ui16 #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 // 7.18.4.2 Macros for greatest-width integer constants // These #ifndef's are needed to prevent collisions with . // Check out Issue 9 for the details. #ifndef INTMAX_C // [ # define INTMAX_C INT64_C #endif // INTMAX_C ] #ifndef UINTMAX_C // [ # define UINTMAX_C UINT64_C #endif // UINTMAX_C ] #endif // __STDC_CONSTANT_MACROS ] #endif // _MSC_VER >= 1600 ] #endif // _MSC_STDINT_H_ ] #endif #if defined(ANDROID) && !defined(HXCPP_CLANG) std::size_t _mbsrtowcs(wchar_t * ws, const char **src, std::size_t wn, std::mbstate_t *st); #endif #endif ================================================ FILE: project/include/system/ValuePointer.h ================================================ #ifndef LIME_SYSTEM_VALUE_POINTER_H #define LIME_SYSTEM_VALUE_POINTER_H #include namespace lime { class ValuePointer { public: ValuePointer (vobj* handle); ValuePointer (vdynamic* handle); ValuePointer (vclosure* handle); ValuePointer (value handle); ~ValuePointer (); void* Call (); void* Call (void* arg0); void* Call (void* arg0, void* arg1); void* Call (void* arg0, void* arg1, void* arg2); void* Call (void* arg0, void* arg1, void* arg2, void* arg3); void* Call (void* arg0, void* arg1, void* arg2, void* arg3, void* arg4); void* Get () const; bool IsCFFIValue (); bool IsHLValue (); void Set (vobj* handle); void Set (value handle); private: gcroot cffiRoot; value* cffiValue; vobj* hlValue; }; } #endif ================================================ FILE: project/include/text/Font.h ================================================ #ifndef LIME_TEXT_FONT_H #define LIME_TEXT_FONT_H #include #include #include #include #ifdef HX_WINDOWS #undef GetGlyphIndices #endif namespace lime { typedef struct { unsigned long codepoint; size_t size; int index; int height; } GlyphInfo; typedef struct { uint32_t index; uint32_t width; uint32_t height; uint32_t x; uint32_t y; unsigned char data; } GlyphImage; class Font { public: Font (Resource *resource, int faceIndex = 0); ~Font (); void* Decompose (bool useCFFIValue, int em); int GetAscender (); int GetDescender (); wchar_t *GetFamilyName (); int GetGlyphIndex (const char* character); void* GetGlyphIndices (bool useCFFIValue, const char* characters); void* GetGlyphMetrics (bool useCFFIValue, int index); int GetHeight (); int GetNumGlyphs (); int GetUnderlinePosition (); int GetUnderlineThickness (); int GetStrikethroughPosition (); int GetStrikethroughThickness (); int GetUnitsPerEM (); int RenderGlyph (int index, Bytes *bytes, int offset = 0); int RenderGlyphs (value indices, Bytes *bytes); void SetSize (size_t size, size_t dpi); void* library; void* face; void* faceMemory; private: size_t mSize; }; } #endif ================================================ FILE: project/include/ui/Cursor.h ================================================ #ifndef LIME_UI_CURSOR_H #define LIME_UI_CURSOR_H namespace lime { enum Cursor { HIDDEN, ARROW, CROSSHAIR, DEFAULT, MOVE, POINTER, RESIZE_NESW, RESIZE_NS, RESIZE_NWSE, RESIZE_WE, TEXT, WAIT, WAIT_ARROW, CUSTOM }; } #endif ================================================ FILE: project/include/ui/DropEvent.h ================================================ #ifndef LIME_UI_DROP_EVENT_H #define LIME_UI_DROP_EVENT_H #include #include namespace lime { enum DropEventType { DROP_FILE }; struct DropEvent { hl_type* t; vbyte* file; DropEventType type; static ValuePointer* callback; static ValuePointer* eventObject; DropEvent (); static void Dispatch (DropEvent* event); }; } #endif ================================================ FILE: project/include/ui/FileDialog.h ================================================ #ifndef LIME_UI_FILE_DIALOG_H #define LIME_UI_FILE_DIALOG_H #include #include namespace lime { class FileDialog { public: static std::wstring* OpenDirectory (std::wstring* title = 0, std::wstring* filter = 0, std::wstring* defaultPath = 0); static std::wstring* OpenFile (std::wstring* title = 0, std::wstring* filter = 0, std::wstring* defaultPath = 0); static void OpenFiles (std::vector* files, std::wstring* title = 0, std::wstring* filter = 0, std::wstring* defaultPath = 0); static std::wstring* SaveFile (std::wstring* title = 0, std::wstring* filter = 0, std::wstring* defaultPath = 0); }; } #endif ================================================ FILE: project/include/ui/Gamepad.h ================================================ #ifndef LIME_UI_GAMEPAD_H #define LIME_UI_GAMEPAD_H namespace lime { class Gamepad { public: static void AddMapping (const char* content); static const char* GetDeviceGUID (int id); static const char* GetDeviceName (int id); static void Rumble (int id, double lowFrequencyRumble, double highFrequencyRumble, int duration); }; } #endif ================================================ FILE: project/include/ui/GamepadEvent.h ================================================ #ifndef LIME_UI_GAMEPAD_EVENT_H #define LIME_UI_GAMEPAD_EVENT_H #include #include namespace lime { enum GamepadEventType { GAMEPAD_AXIS_MOVE, GAMEPAD_BUTTON_DOWN, GAMEPAD_BUTTON_UP, GAMEPAD_CONNECT, GAMEPAD_DISCONNECT }; struct GamepadEvent { hl_type* t; int axis; int button; int id; GamepadEventType type; double axisValue; static ValuePointer* callback; static ValuePointer* eventObject; GamepadEvent (); static void Dispatch (GamepadEvent* event); }; } #endif ================================================ FILE: project/include/ui/Haptic.h ================================================ #ifndef LIME_UI_HAPTIC_H #define LIME_UI_HAPTIC_H namespace lime { class Haptic { public: static void Vibrate (int period, int duration); }; } #endif ================================================ FILE: project/include/ui/Joystick.h ================================================ #ifndef LIME_UI_JOYSTICK_H #define LIME_UI_JOYSTICK_H namespace lime { class Joystick { public: static const char* GetDeviceGUID (int id); static const char* GetDeviceName (int id); static int GetNumAxes (int id); static int GetNumButtons (int id); static int GetNumHats (int id); }; } #endif ================================================ FILE: project/include/ui/JoystickEvent.h ================================================ #ifndef LIME_UI_JOYSTICK_EVENT_H #define LIME_UI_JOYSTICK_EVENT_H #include #include namespace lime { enum JoystickEventType { JOYSTICK_AXIS_MOVE = 0, JOYSTICK_HAT_MOVE = 1, JOYSTICK_BUTTON_DOWN = 3, JOYSTICK_BUTTON_UP = 4, JOYSTICK_CONNECT = 5, JOYSTICK_DISCONNECT = 6 }; struct JoystickEvent { hl_type* t; int id; int index; JoystickEventType type; int eventValue; double x; double y; static ValuePointer* callback; static ValuePointer* eventObject; JoystickEvent (); static void Dispatch (JoystickEvent* event); }; } #endif ================================================ FILE: project/include/ui/KeyCode.h ================================================ #ifndef LIME_UI_KEY_CODE_H #define LIME_UI_KEY_CODE_H #include namespace lime { class KeyCode { public: static int32_t FromScanCode (int32_t keyCode); static int32_t ToScanCode (int32_t keyCode); }; } #endif ================================================ FILE: project/include/ui/KeyEvent.h ================================================ #ifndef LIME_UI_KEY_EVENT_H #define LIME_UI_KEY_EVENT_H #include #include #include namespace lime { enum KeyEventType { KEY_DOWN, KEY_UP }; struct KeyEvent { hl_type* t; double keyCode; int modifier; KeyEventType type; int windowID; static ValuePointer* callback; static ValuePointer* eventObject; KeyEvent (); static void Dispatch (KeyEvent* event); }; } #endif ================================================ FILE: project/include/ui/MouseEvent.h ================================================ #ifndef LIME_UI_MOUSE_EVENT_H #define LIME_UI_MOUSE_EVENT_H #include #include #include namespace lime { enum MouseEventType { MOUSE_DOWN, MOUSE_UP, MOUSE_MOVE, MOUSE_WHEEL }; struct MouseEvent { hl_type* t; int button; double movementX; double movementY; MouseEventType type; int windowID; double x; double y; int clickCount; static ValuePointer* callback; static ValuePointer* eventObject; MouseEvent (); static void Dispatch (MouseEvent* event); }; } #endif ================================================ FILE: project/include/ui/TextEvent.h ================================================ #ifndef LIME_UI_TEXT_EVENT_H #define LIME_UI_TEXT_EVENT_H #include #include #include namespace lime { enum TextEventType { TEXT_INPUT, TEXT_EDIT }; struct TextEvent { hl_type* t; int id; int length; int start; vbyte* text; TextEventType type; int windowID; static ValuePointer* callback; static ValuePointer* eventObject; TextEvent (); static void Dispatch (TextEvent* event); }; } #endif ================================================ FILE: project/include/ui/TouchEvent.h ================================================ #ifndef LIME_UI_TOUCH_EVENT_H #define LIME_UI_TOUCH_EVENT_H #include #include #include namespace lime { enum TouchEventType { TOUCH_START, TOUCH_END, TOUCH_MOVE }; struct TouchEvent { hl_type* t; int device; double dx; double dy; int id; double pressure; TouchEventType type; double x; double y; static ValuePointer* callback; static ValuePointer* eventObject; TouchEvent (); static void Dispatch (TouchEvent* event); }; } #endif ================================================ FILE: project/include/ui/Window.h ================================================ #ifndef LIME_UI_WINDOW_H #define LIME_UI_WINDOW_H #ifdef CreateWindow #undef CreateWindow #endif #include #include #include #include #include #include namespace lime { class Window { public: virtual ~Window () {}; virtual void Alert (const char* message, const char* title) = 0; virtual void Close () = 0; virtual void ContextFlip () = 0; virtual void* ContextLock (bool useCFFIValue) = 0; virtual void ContextMakeCurrent () = 0; virtual void ContextUnlock () = 0; virtual void Focus () = 0; virtual void* GetContext () = 0; virtual const char* GetContextType () = 0; // virtual Cursor GetCursor () = 0; virtual int GetDisplay () = 0; virtual void GetDisplayMode (DisplayMode* displayMode) = 0; virtual int GetHeight () = 0; virtual uint32_t GetID () = 0; virtual bool GetMouseLock () = 0; virtual float GetOpacity () = 0; virtual double GetScale () = 0; virtual bool GetTextInputEnabled () = 0; virtual int GetWidth () = 0; virtual int GetX () = 0; virtual int GetY () = 0; virtual void Move (int x, int y) = 0; virtual void ReadPixels (ImageBuffer *buffer, Rectangle *rect) = 0; virtual void Resize (int width, int height) = 0; virtual void SetMinimumSize (int width, int height) = 0; virtual void SetMaximumSize (int width, int height) = 0; virtual bool SetBorderless (bool borderless) = 0; virtual void SetCursor (Cursor cursor) = 0; virtual void SetDisplayMode (DisplayMode* displayMode) = 0; virtual bool SetFullscreen (bool fullscreen) = 0; virtual void SetIcon (ImageBuffer *imageBuffer) = 0; virtual bool SetMaximized (bool minimized) = 0; virtual bool SetMinimized (bool minimized) = 0; virtual void SetMouseLock (bool mouseLock) = 0; virtual void SetOpacity (float opacity) = 0; virtual bool SetResizable (bool resizable) = 0; virtual void SetTextInputEnabled (bool enable) = 0; virtual void SetTextInputRect (Rectangle *rect) = 0; virtual const char* SetTitle (const char* title) = 0; virtual bool SetVisible (bool visible) = 0; virtual void WarpMouse (int x, int y) = 0; Application* currentApplication; int flags; }; Window* CreateWindow (Application* application, int width, int height, int flags, const char* title); enum WindowFlags { WINDOW_FLAG_FULLSCREEN = 0x00000001, WINDOW_FLAG_BORDERLESS = 0x00000002, WINDOW_FLAG_RESIZABLE = 0x00000004, WINDOW_FLAG_HARDWARE = 0x00000008, WINDOW_FLAG_VSYNC = 0x00000010, WINDOW_FLAG_HW_AA = 0x00000020, WINDOW_FLAG_HW_AA_HIRES = 0x00000060, WINDOW_FLAG_ALLOW_SHADERS = 0x00000080, WINDOW_FLAG_REQUIRE_SHADERS = 0x00000100, WINDOW_FLAG_DEPTH_BUFFER = 0x00000200, WINDOW_FLAG_STENCIL_BUFFER = 0x00000400, WINDOW_FLAG_ALLOW_HIGHDPI = 0x00000800, WINDOW_FLAG_HIDDEN = 0x00001000, WINDOW_FLAG_MINIMIZED = 0x00002000, WINDOW_FLAG_MAXIMIZED = 0x00004000, WINDOW_FLAG_ALWAYS_ON_TOP = 0x00008000, WINDOW_FLAG_COLOR_DEPTH_32_BIT = 0x00010000 }; } #endif ================================================ FILE: project/include/ui/WindowEvent.h ================================================ #ifndef LIME_UI_WINDOW_EVENT_H #define LIME_UI_WINDOW_EVENT_H #include #include #include namespace lime { enum WindowEventType { WINDOW_ACTIVATE, WINDOW_CLOSE, WINDOW_DEACTIVATE, WINDOW_ENTER, WINDOW_EXPOSE, WINDOW_FOCUS_IN, WINDOW_FOCUS_OUT, WINDOW_LEAVE, WINDOW_MAXIMIZE, WINDOW_MINIMIZE, WINDOW_MOVE, WINDOW_RESIZE, WINDOW_RESTORE, WINDOW_SHOW, WINDOW_HIDE }; struct WindowEvent { hl_type* t; int height; WindowEventType type; int width; int windowID; int x; int y; static ValuePointer* callback; static ValuePointer* eventObject; WindowEvent (); static void Dispatch (WindowEvent* event); }; } #endif ================================================ FILE: project/include/utils/ArrayBufferView.h ================================================ #ifndef LIME_UTILS_ARRAY_BUFFER_VIEW_H #define LIME_UTILS_ARRAY_BUFFER_VIEW_H #include #include namespace lime { struct ArrayBufferView { hl_type* t; /*TypedArrayType*/ int type; Bytes* buffer; int byteOffset; int byteLength; int length; int bytesPerElement; ArrayBufferView (value arrayBufferView); ~ArrayBufferView (); void Resize (int size); void Set (value bytes); void Set (const QuickVec data); value Value (); value Value (value arrayBufferView); }; } #endif ================================================ FILE: project/include/utils/Bytes.h ================================================ #ifndef LIME_UTILS_BYTES_H #define LIME_UTILS_BYTES_H #include #include namespace lime { struct Bytes { hl_type* t; int length; unsigned char* b; Bytes (); Bytes (value bytes); ~Bytes (); void ReadFile (const char* path); void Resize (int size); void Set (value bytes); void Set (const QuickVec data); value Value (value bytes); value Value (); }; } #endif ================================================ FILE: project/include/utils/Object.h ================================================ #ifndef LIME_UTILS_OBJECT_H #define LIME_UTILS_OBJECT_H namespace lime { class Object { protected: virtual ~Object () {} public: Object (bool has_initial_ref = false) : ref_count (has_initial_ref ? 1 : 0) {} Object *grab () { ref_count++; return this; } Object *IncRef () { ref_count++; return this; } void DecRef () { ref_count--; if (ref_count <= 0) { delete this; } } void drop () { ref_count--; if (ref_count <= 0) { delete this; } } int ref_count; }; } #endif ================================================ FILE: project/include/utils/QuickVec.h ================================================ #ifndef LIME_UTILS_QUICK_VEC_H #define LIME_UTILS_QUICK_VEC_H #include #include #include namespace lime { template void DoDelete(T &item) { } template void DoDelete(T *&item) { delete item; item = 0; } // Little vector/set class, optimised for small data and not using many malloc calls. // Data are allocated with "malloc", so they should not rely on constructors etc. template class QuickVec { enum { QBufSize = QBUF_SIZE_ }; public: typedef T_ *iterator; typedef const T_ * const_iterator; public: QuickVec () { mPtr = QBUF_SIZE_==0 ? 0 : mQBuf; mAlloc = QBufSize; mSize = 0; } QuickVec (const QuickVec &inRHS) { if (QBUF_SIZE_!=0 && inRHS.mSize<=QBufSize) { mAlloc = QBufSize; mPtr = mQBuf; } else { mAlloc = inRHS.mAlloc; mPtr = (T_ *)malloc(mAlloc * sizeof(T_)); } mSize = inRHS.mSize; memcpy (mPtr,inRHS.mPtr,sizeof(T_)*mSize); } int Mem() const { return mAlloc * sizeof(T_); } QuickVec (const T_ *inData,int inLen) { mPtr = QBUF_SIZE_==0 ? 0 : mQBuf; mAlloc = QBufSize; mSize = 0; resize(inLen); memcpy(mPtr,inData,sizeof(T_)*inLen); } QuickVec (int inLen) { mPtr = QBUF_SIZE_==0 ? 0 : mQBuf; mAlloc = QBufSize; mSize = 0; resize(inLen); } ~QuickVec () { if (QBUF_SIZE_==0 || mPtr!=mQBuf){ if (mPtr) { free(mPtr); } } } void clear () { if (QBUF_SIZE_==0) { if (mPtr) { free(mPtr); } mPtr = 0; mAlloc = 0; } else if (mPtr!=mQBuf) { free(mPtr); mPtr = mQBuf; mAlloc = QBufSize; } mSize = 0; } void Set(const T_ *inData,int inN) { resize(inN); if (inN) { memcpy(mPtr,inData,inN*sizeof(T_)); } } void Zero() { if (mPtr && mSize) memset(mPtr,0,mSize*sizeof(T_)); } // This assumes the values in the array are sorted. template void Change(X_ inValue,D_ inDiff) { if (mSize==0) { mPtr[mSize++] = T_(inValue,inDiff); return; } // Before/at start if (mPtr[0]==inValue) { mPtr[0] += inDiff; } else if (mPtr[0]>inValue) { InsertAt(0, T_(inValue,inDiff) ); } else { int last = mSize-1; // After/on end if (mPtr[last]==inValue) { mPtr[last] += inDiff; } else if (mPtr[last]min+1) { int middle = (max+min+1)/2; T_ &v = mPtr[middle]; if (v==inValue) { v += inDiff; return; } if (v=mPtr[last]) { if (inValue==mPtr[last]) EraseAt(last); else { Grow(); mPtr[mSize] = inValue; ++mSize; } } else { // between 0 ... last int min = 0; int max = last; while(max>min+1) { int middle = (max+min+1)/2; T_ v = mPtr[middle]; if (v==inValue) { EraseAt(middle); return; } if (v=mAlloc) { if (QBUF_SIZE_!=0 && mPtr==mQBuf) { mPtr = (T_ *)malloc(sizeof(T_)*(QBufSize*2)); memcpy(mPtr, mQBuf, sizeof(mQBuf)); mAlloc = QBufSize*2; } else { if (mAlloc) mAlloc *= 2; else mAlloc = 16; mPtr = (T_*)realloc(mPtr, sizeof(T_)*mAlloc); } } } void reserve(int inSize) { if (mAllocQBufSize) ) { mAlloc = inSize; if (QBUF_SIZE_==0 || mPtr!=mQBuf) { mPtr = (T_ *)realloc(mPtr,sizeof(T_)*mAlloc); } else { T_ *buf = (T_ *)malloc(sizeof(T_)*mAlloc); memcpy(buf,mPtr,mSize*sizeof(T_)); mPtr = buf; } } } void resize(int inSize) { if (mAllocmSize || inFirst<0) return; if (inFirst+inLen>=mSize || inLen<0) resize(inFirst); else { memmove(mPtr + inFirst, mPtr + inFirst + inLen, (mSize-inFirst-inLen) * sizeof(T_) ); mSize -= inLen; } } inline void InsertAt(int inPos,const T_ &inValue) { Grow(); memmove(mPtr + inPos + 1, mPtr + inPos, (mSize-inPos) * sizeof(T_) ); memcpy(mPtr+inPos,&inValue, sizeof(T_)); ++mSize; } inline void InsertAt(int inPos,const T_ *inValues,int inN) { resize(mSize+inN); memmove(mPtr + inPos + inN, mPtr + inPos, (mSize-inPos-inN) * sizeof(T_) ); memcpy(mPtr+inPos,inValues,inN*sizeof(T_)); } bool operator == (const QuickVec &inRHS) { return (*mPtr == *(inRHS.mPtr)); } bool operator != (const QuickVec &inRHS) { return !(*mPtr == *(inRHS.mPtr)); } inline int size() const { return mSize; } inline bool empty() const { return mSize==0; } inline T_& operator[](int inIndex) { return mPtr[inIndex]; } inline T_& last() { return mPtr[mSize-1]; } inline const T_& operator[](int inIndex) const { return mPtr[inIndex]; } inline iterator begin() { return mPtr; } inline iterator rbegin() { return mPtr + mSize -1; } inline iterator end() { return mPtr + mSize; } inline const_iterator begin() const { return mPtr; } inline const_iterator rbegin() const { return mPtr + mSize - 1; } inline const_iterator end() const { return mPtr + mSize; } void swap( QuickVec &inRHS ) { if (QBUF_SIZE_==0) { std::swap(mPtr,inRHS.mPtr); } else if (mPtr!=mQBuf) { // Both "real" pointers - just swap them if (inRHS.mPtr!=inRHS.mQBuf) { std::swap(mPtr,inRHS.mPtr); } else { // RHS in in the qbuf, we have a pointer memcpy(mQBuf,inRHS.mQBuf,inRHS.mSize*sizeof(T_)); inRHS.mPtr = mPtr; mPtr = mQBuf; } } else { // We have a qbuf, rhs has a pointer if (inRHS.mPtr!=inRHS.mQBuf) { memcpy(inRHS.mQBuf,mQBuf,mSize*sizeof(T_)); mPtr = inRHS.mPtr; inRHS.mPtr = inRHS.mQBuf; } else { // Both using QBuf ... if (mSize && inRHS.mSize) { T_ tmp[QBufSize]; memcpy(tmp,mPtr,mSize*sizeof(T_)); memcpy(mPtr,inRHS.mPtr,inRHS.mSize*sizeof(T_)); memcpy(inRHS.mPtr,tmp,mSize*sizeof(T_)); } else if (mSize) memcpy(inRHS.mQBuf,mQBuf,mSize*sizeof(T_)); else memcpy(mQBuf,inRHS.mQBuf,inRHS.mSize*sizeof(T_)); } } std::swap(mAlloc,inRHS.mAlloc); std::swap(mSize,inRHS.mSize); } QuickVec &operator=(const QuickVec &inRHS) { if ( (QBUF_SIZE_==0 || mPtr!=mQBuf) && mPtr ) free(mPtr); if (QBUF_SIZE_!=0 && inRHS.mSize<=QBufSize) { mPtr = mQBuf; mAlloc = QBufSize; } else { mAlloc = inRHS.mAlloc; mPtr = (T_ *)(mAlloc ? malloc( mAlloc * sizeof(T_)) : 0); } mSize = inRHS.mSize; if (mSize) memcpy(mPtr,inRHS.mPtr,mSize*sizeof(T_)); return *this; } void DeleteAll() { for(int i=0;i &inOther) { int s = mSize; resize(mSize+inOther.mSize); for(int i=0;i #include namespace lime { struct Resource { Resource () : data (NULL), path (NULL) {} Resource (const char* path) : data (NULL), path (path) {} Resource (hl_vstring* path) : data (NULL), path (path ? hl_to_utf8 ((const uchar*)path->bytes) : NULL) {} Resource (Bytes* data) : data (data), path (NULL) {} Bytes* data; const char* path; }; } #endif ================================================ FILE: project/include/utils/compress/LZMA.h ================================================ #ifndef LIME_UTILS_COMPRESS_LZMA_H #define LIME_UTILS_COMPRESS_LZMA_H #include namespace lime { class LZMA { public: static void Compress (Bytes* data, Bytes* result); static void Decompress (Bytes* data, Bytes* result); }; } #endif ================================================ FILE: project/include/utils/compress/Zlib.h ================================================ #ifndef LIME_UTILS_COMPRESS_ZLIB_H #define LIME_UTILS_COMPRESS_ZLIB_H #include namespace lime { enum ZlibType { DEFLATE, GZIP, ZLIB }; class Zlib { public: static void Compress (ZlibType type, Bytes* data, Bytes* result); static void Decompress (ZlibType type, Bytes* data, Bytes* result); }; } #endif ================================================ FILE: project/include/utils/stdint.h ================================================ #ifndef HX_WINDOWS #include #else // ISO C9x compliant stdint.h for Microsoft Visual Studio // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 // // Copyright (c) 2006-2013 Alexander Chemeris // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // 3. Neither the name of the product nor the names of its contributors may // be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // /////////////////////////////////////////////////////////////////////////////// #ifndef _MSC_VER // [ #error "Use this header only with Microsoft Visual C++ compilers!" #endif // _MSC_VER ] #ifndef _MSC_STDINT_H_ // [ #define _MSC_STDINT_H_ #if _MSC_VER > 1000 #pragma once #endif #if _MSC_VER >= 1600 // [ #include #else // ] _MSC_VER >= 1600 [ #include // For Visual Studio 6 in C++ mode and for many Visual Studio versions when // compiling for ARM we should wrap include with 'extern "C++" {}' // or compiler give many errors like this: // error C2733: second C linkage of overloaded function 'wmemchr' not allowed #ifdef __cplusplus extern "C" { #endif # include #ifdef __cplusplus } #endif // Define _W64 macros to mark types changing their size, like intptr_t. #ifndef _W64 # if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 # define _W64 __w64 # else # define _W64 # endif #endif // 7.18.1 Integer types // 7.18.1.1 Exact-width integer types // Visual Studio 6 and Embedded Visual C++ 4 doesn't // realize that, e.g. char has the same size as __int8 // so we give up on __intX for them. #if (_MSC_VER < 1300) typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #else typedef signed __int8 int8_t; typedef signed __int16 int16_t; typedef signed __int32 int32_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; #endif typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; // 7.18.1.2 Minimum-width integer types typedef int8_t int_least8_t; typedef int16_t int_least16_t; typedef int32_t int_least32_t; typedef int64_t int_least64_t; typedef uint8_t uint_least8_t; typedef uint16_t uint_least16_t; typedef uint32_t uint_least32_t; typedef uint64_t uint_least64_t; // 7.18.1.3 Fastest minimum-width integer types typedef int8_t int_fast8_t; typedef int16_t int_fast16_t; typedef int32_t int_fast32_t; typedef int64_t int_fast64_t; typedef uint8_t uint_fast8_t; typedef uint16_t uint_fast16_t; typedef uint32_t uint_fast32_t; typedef uint64_t uint_fast64_t; // 7.18.1.4 Integer types capable of holding object pointers #ifdef _WIN64 // [ typedef signed __int64 intptr_t; typedef unsigned __int64 uintptr_t; #else // _WIN64 ][ typedef _W64 signed int intptr_t; typedef _W64 unsigned int uintptr_t; #endif // _WIN64 ] // 7.18.1.5 Greatest-width integer types typedef int64_t intmax_t; typedef uint64_t uintmax_t; // 7.18.2 Limits of specified-width integer types #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 // 7.18.2.1 Limits of exact-width integer types #define INT8_MIN ((int8_t)_I8_MIN) #define INT8_MAX _I8_MAX #define INT16_MIN ((int16_t)_I16_MIN) #define INT16_MAX _I16_MAX #define INT32_MIN ((int32_t)_I32_MIN) #define INT32_MAX _I32_MAX #define INT64_MIN ((int64_t)_I64_MIN) #define INT64_MAX _I64_MAX #define UINT8_MAX _UI8_MAX #define UINT16_MAX _UI16_MAX #define UINT32_MAX _UI32_MAX #define UINT64_MAX _UI64_MAX // 7.18.2.2 Limits of minimum-width integer types #define INT_LEAST8_MIN INT8_MIN #define INT_LEAST8_MAX INT8_MAX #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MIN INT32_MIN #define INT_LEAST32_MAX INT32_MAX #define INT_LEAST64_MIN INT64_MIN #define INT_LEAST64_MAX INT64_MAX #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX // 7.18.2.3 Limits of fastest minimum-width integer types #define INT_FAST8_MIN INT8_MIN #define INT_FAST8_MAX INT8_MAX #define INT_FAST16_MIN INT16_MIN #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST64_MIN INT64_MIN #define INT_FAST64_MAX INT64_MAX #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX // 7.18.2.4 Limits of integer types capable of holding object pointers #ifdef _WIN64 // [ # define INTPTR_MIN INT64_MIN # define INTPTR_MAX INT64_MAX # define UINTPTR_MAX UINT64_MAX #else // _WIN64 ][ # define INTPTR_MIN INT32_MIN # define INTPTR_MAX INT32_MAX # define UINTPTR_MAX UINT32_MAX #endif // _WIN64 ] // 7.18.2.5 Limits of greatest-width integer types #define INTMAX_MIN INT64_MIN #define INTMAX_MAX INT64_MAX #define UINTMAX_MAX UINT64_MAX // 7.18.3 Limits of other integer types #ifdef _WIN64 // [ # define PTRDIFF_MIN _I64_MIN # define PTRDIFF_MAX _I64_MAX #else // _WIN64 ][ # define PTRDIFF_MIN _I32_MIN # define PTRDIFF_MAX _I32_MAX #endif // _WIN64 ] #define SIG_ATOMIC_MIN INT_MIN #define SIG_ATOMIC_MAX INT_MAX #ifndef SIZE_MAX // [ # ifdef _WIN64 // [ # define SIZE_MAX _UI64_MAX # else // _WIN64 ][ # define SIZE_MAX _UI32_MAX # endif // _WIN64 ] #endif // SIZE_MAX ] // WCHAR_MIN and WCHAR_MAX are also defined in #ifndef WCHAR_MIN // [ # define WCHAR_MIN 0 #endif // WCHAR_MIN ] #ifndef WCHAR_MAX // [ # define WCHAR_MAX _UI16_MAX #endif // WCHAR_MAX ] #define WINT_MIN 0 #define WINT_MAX _UI16_MAX #endif // __STDC_LIMIT_MACROS ] // 7.18.4 Limits of other integer types #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 // 7.18.4.1 Macros for minimum-width integer constants #define INT8_C(val) val##i8 #define INT16_C(val) val##i16 #define INT32_C(val) val##i32 #define INT64_C(val) val##i64 #define UINT8_C(val) val##ui8 #define UINT16_C(val) val##ui16 #define UINT32_C(val) val##ui32 #define UINT64_C(val) val##ui64 // 7.18.4.2 Macros for greatest-width integer constants // These #ifndef's are needed to prevent collisions with . // Check out Issue 9 for the details. #ifndef INTMAX_C // [ # define INTMAX_C INT64_C #endif // INTMAX_C ] #ifndef UINTMAX_C // [ # define UINTMAX_C UINT64_C #endif // UINTMAX_C ] #endif // __STDC_CONSTANT_MACROS ] #endif // _MSC_VER >= 1600 ] #endif // _MSC_STDINT_H_ ] #endif ================================================ FILE: project/include/vm/NekoVM.h ================================================ #ifndef LIME_VM_NEKOVM_H #define LIME_VM_NEKOVM_H namespace lime { class NekoVM { public: static void Execute (const char *module); }; } #endif ================================================ FILE: project/lib/README.md ================================================ # Submodule projects Lime includes code from several other C/C++ libraries, listed below. Lime prefers to use GitHub repositories as its submodules, purely so that the links will be clickable when viewed on github.com. However, some of these repos are mirrors, with the development being conducted elsewhere. **_Always submit issues and pull requests to the primary repo, not to a GitHub mirror._** - [**Cairo**](https://www.cairographics.org/) | [primary repo](https://gitlab.freedesktop.org/cairo/cairo) | [GitHub mirror](https://github.com/freedesktop/cairo) - [**cURL**](https://curl.se/) | [primary repo](https://github.com/curl/curl) - **efsw** | [primary repo](https://github.com/SpartanJ/efsw) - [**FreeType**](https://freetype.org/) | [primary repo](https://gitlab.freedesktop.org/freetype/freetype) | [GitHub mirror](https://github.com/freetype/freetype) - [**HarfBuzz**](https://harfbuzz.github.io/) | [primary repo](https://github.com/harfbuzz/harfbuzz) - [**HashLink**](https://hashlink.haxe.org/) | [primary repo](https://github.com/HaxeFoundation/hashlink) - [**libjpeg-turbo**](https://www.libjpeg-turbo.org/) | [primary repo](https://github.com/libjpeg-turbo/libjpeg-turbo) - **LZMA** | [download](https://www.7-zip.org/sdk.html) | [unofficial GitHub mirror](https://github.com/openfl/liblzma) - [**mbed TLS**](https://tls.mbed.org/) | [primary repo](https://github.com/Mbed-TLS/mbedtls) - [**MojoAL**](https://icculus.org/mojoAL/) | [primary repo](https://github.com/icculus/mojoAL/) - [**Neko**](https://nekovm.org/) | [primary repo](https://github.com/HaxeFoundation/neko) - [**Ogg**](https://www.xiph.org/ogg/) | [primary repo](https://github.com/xiph/ogg) - [**OpenAL Soft**](https://openal-soft.org/) | [primary repo](https://github.com/kcat/openal-soft) - [**Pixman**](http://pixman.org/) | [primary repo](https://gitlab.freedesktop.org/pixman/pixman) | [GitHub mirror](https://github.com/freedesktop/pixman) - [**libpng**](http://www.libpng.org/pub/png/libpng.html) | [primary repo](https://sourceforge.net/p/libpng/code) | [GitHub mirror](https://github.com/glennrp/libpng)[^1] - [**SDL**](https://www.libsdl.org/) | [primary repo](https://github.com/libsdl-org/SDL) - [**tiny file dialogs**](https://sourceforge.net/projects/tinyfiledialogs/) | [primary repo](https://sourceforge.net/p/tinyfiledialogs/code) | [unofficial GitHub mirror](https://github.com/openfl/libtinyfiledialogs)[^1] - [**Vorbis**](https://www.xiph.org/vorbis/) | [primary repo](https://github.com/xiph/vorbis) - [**libvpx**](https://www.webmproject.org/tools/) | [primary repo](https://chromium.googlesource.com/webm/libvpx/) | [GitHub mirror](https://github.com/webmproject/libvpx/) - [**libwebm**](https://www.webmproject.org/about/) | [primary repo](https://chromium.googlesource.com/webm/libwebm) | [GitHub mirror](https://github.com/webmproject/libwebm) - [**zlib**](https://zlib.net/) | [primary repo](https://github.com/madler/zlib) [^1]: Attempting to make a shallow clone of a SourceForge repo (as GitHub Actions does) usually produces the error "Server does not allow request for unadvertised object." Only the most recent commit is "advertised," and all others cause the error. As long as this is the case, Lime will have to use GitHub mirrors of SourceForge repos. ================================================ FILE: project/lib/cairo-files.xml ================================================ ================================================ FILE: project/lib/curl-files.xml ================================================
    ================================================ FILE: project/lib/custom/cairo/configs/default/config.h ================================================ #ifndef _cairo_config_h #define _cairo_config_h // #define CAIRO_HAS_PNG_FUNCTIONS 1 // #define CAIRO_HAS_XLIB_SURFACE 1 // #define CAIRO_HAS_XLIB_XRENDER_SURFACE 1 // #define CAIRO_HAS_XCB_SURFACE 1 // #define CAIRO_HAS_XLIB_XCB_FUNCTIONS 1 // #define CAIRO_HAS_XCB_SHM_FUNCTIONS 1 // #define CAIRO_HAS_QT_SURFACE 1 // #define CAIRO_HAS_QUARTZ_SURFACE 1 // #define CAIRO_HAS_QUARTZ_FONT 1 // #define CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1 // #define CAIRO_HAS_WIN32_SURFACE 1 // #define CAIRO_HAS_WIN32_FONT 1 // #define CAIRO_HAS_SKIA_SURFACE 1 // #define CAIRO_HAS_OS2_SURFACE 1 // #define CAIRO_HAS_BEOS_SURFACE 1 // #define CAIRO_HAS_DRM_SURFACE 1 // #define CAIRO_HAS_GALLIUM_SURFACE 1 // #define CAIRO_HAS_GL_SURFACE 1 // #define CAIRO_HAS_GLESV2_SURFACE 1 // #define CAIRO_HAS_COGL_SURFACE 1 // #define CAIRO_HAS_DIRECTFB_SURFACE 1 // #define CAIRO_HAS_VG_SURFACE 1 // #define CAIRO_HAS_EGL_FUNCTIONS 1 // #define CAIRO_HAS_GLX_FUNCTIONS 1 // #define CAIRO_HAS_WGL_FUNCTIONS 1 // #define CAIRO_HAS_SCRIPT_SURFACE 1 #define CAIRO_HAS_FT_FONT 1 // #define CAIRO_HAS_FC_FONT 1 // #define CAIRO_HAS_PS_SURFACE 1 // #define CAIRO_HAS_PDF_SURFACE 1 // #define CAIRO_HAS_SVG_SURFACE 1 // #define CAIRO_HAS_TEST_SURFACES 1 // #define CAIRO_HAS_TEE_SURFACE 1 // #define CAIRO_HAS_XML_SURFACE 1 #define CAIRO_HAS_PTHREAD 1 // #define CAIRO_HAS_GOBJECT_FUNCTIONS 1 // #define CAIRO_HAS_TRACE 1 // #define CAIRO_HAS_INTERPRETER 1 // #define CAIRO_HAS_SYMBOL_LOOKUP 1 #define CAIRO_HAS_DLSYM 1 // #define HAVE_BYTESWAP_H 1 // #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 // #define HAVE_SYS_INT_TYPES_H 1 #define HAVE_UNISTD_H 1 // #define HAVE_UINT128_T 1 #define HAVE_UINT64_T 1 // #define HAVE_INTEL_ATOMIC_PRIMITIVES 1 // #define HAVE_LIB_ATOMIC_OPS 1 // #define HAVE_OS_ATOMIC_OPS 1 // #define HAVE_FT_LIBRARY_SETLCDFILTER 1 // #define HAVE_FT_GLYPHSLOT_EMBOLDEN 1 // #define HAVE_FT_GLYPHSLOT_OBLIQUE 1 // #define HAVE_FT_LOAD_SFNT_TABLE 1 // #define HAVE_FT_GET_X11_FONT_FORMAT 1 // #define HAVE_FT_LOAD_SFNT_TABLE 1 // #define HAVE_MEMFAULT 1 // #define HAVE_LOCKDEP 1 // #define HAVE_FCFINI 1 // #define HAVE_CTIME_R 1 // #define HAVE_CLOCK_GETTIME 1 // #define HAVE_X11_EXTENSIONS_XSHM_H 1 // #define HAVE_X11_EXTENSIONS_SHMPROTO_H 1 // #define HAVE_X11_EXTENSIONS_SHMSTR_H 1 // #define HAVE_XRENDERCREATESOLIDFILL 1 // #define HAVE_XRENDERCREATELINEARGRADIENT 1 // #define HAVE_XRENDERCREATERADIALGRADIENT 1 // #define HAVE_XRENDERCREATECONICALGRADIENT 1 // #define HAVE_VALGRIND 1 #endif ================================================ FILE: project/lib/custom/cairo/configs/linux/config.h ================================================ #ifndef _cairo_config_h #define _cairo_config_h // #define CAIRO_HAS_PNG_FUNCTIONS 1 // #define CAIRO_HAS_XLIB_SURFACE 1 // #define CAIRO_HAS_XLIB_XRENDER_SURFACE 1 // #define CAIRO_HAS_XCB_SURFACE 1 // #define CAIRO_HAS_XLIB_XCB_FUNCTIONS 1 // #define CAIRO_HAS_XCB_SHM_FUNCTIONS 1 // #define CAIRO_HAS_QT_SURFACE 1 // #define CAIRO_HAS_QUARTZ_SURFACE 1 // #define CAIRO_HAS_QUARTZ_FONT 1 // #define CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1 // #define CAIRO_HAS_WIN32_SURFACE 1 // #define CAIRO_HAS_WIN32_FONT 1 // #define CAIRO_HAS_SKIA_SURFACE 1 // #define CAIRO_HAS_OS2_SURFACE 1 // #define CAIRO_HAS_BEOS_SURFACE 1 // #define CAIRO_HAS_DRM_SURFACE 1 // #define CAIRO_HAS_GALLIUM_SURFACE 1 // #define CAIRO_HAS_GL_SURFACE 1 // #define CAIRO_HAS_GLESV2_SURFACE 1 // #define CAIRO_HAS_COGL_SURFACE 1 // #define CAIRO_HAS_DIRECTFB_SURFACE 1 // #define CAIRO_HAS_VG_SURFACE 1 // #define CAIRO_HAS_EGL_FUNCTIONS 1 // #define CAIRO_HAS_GLX_FUNCTIONS 1 // #define CAIRO_HAS_WGL_FUNCTIONS 1 // #define CAIRO_HAS_SCRIPT_SURFACE 1 #define CAIRO_HAS_FT_FONT 1 // #define CAIRO_HAS_FC_FONT 1 // #define CAIRO_HAS_PS_SURFACE 1 // #define CAIRO_HAS_PDF_SURFACE 1 // #define CAIRO_HAS_SVG_SURFACE 1 // #define CAIRO_HAS_TEST_SURFACES 1 // #define CAIRO_HAS_TEE_SURFACE 1 // #define CAIRO_HAS_XML_SURFACE 1 #define CAIRO_HAS_PTHREAD 1 // #define CAIRO_HAS_GOBJECT_FUNCTIONS 1 // #define CAIRO_HAS_TRACE 1 // #define CAIRO_HAS_INTERPRETER 1 // #define CAIRO_HAS_SYMBOL_LOOKUP 1 #define CAIRO_HAS_DLSYM 1 #define HAVE_BYTESWAP_H 1 // #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 // #define HAVE_SYS_INT_TYPES_H 1 #define HAVE_UNISTD_H 1 // #define HAVE_UINT128_T 1 #define HAVE_UINT64_T 1 // #define HAVE_INTEL_ATOMIC_PRIMITIVES 1 // #define HAVE_LIB_ATOMIC_OPS 1 // #define HAVE_OS_ATOMIC_OPS 1 // #define HAVE_FT_LIBRARY_SETLCDFILTER 1 // #define HAVE_FT_GLYPHSLOT_EMBOLDEN 1 // #define HAVE_FT_GLYPHSLOT_OBLIQUE 1 // #define HAVE_FT_LOAD_SFNT_TABLE 1 // #define HAVE_FT_GET_X11_FONT_FORMAT 1 // #define HAVE_FT_LOAD_SFNT_TABLE 1 // #define HAVE_MEMFAULT 1 // #define HAVE_LOCKDEP 1 // #define HAVE_FCFINI 1 // #define HAVE_CTIME_R 1 // #define HAVE_CLOCK_GETTIME 1 // #define HAVE_X11_EXTENSIONS_XSHM_H 1 // #define HAVE_X11_EXTENSIONS_SHMPROTO_H 1 // #define HAVE_X11_EXTENSIONS_SHMSTR_H 1 // #define HAVE_XRENDERCREATESOLIDFILL 1 // #define HAVE_XRENDERCREATELINEARGRADIENT 1 // #define HAVE_XRENDERCREATERADIALGRADIENT 1 // #define HAVE_XRENDERCREATECONICALGRADIENT 1 // #define HAVE_VALGRIND 1 #endif ================================================ FILE: project/lib/custom/cairo/configs/mac/config.h ================================================ #ifndef _cairo_config_h #define _cairo_config_h // #define CAIRO_HAS_PNG_FUNCTIONS 1 // #define CAIRO_HAS_XLIB_SURFACE 1 // #define CAIRO_HAS_XLIB_XRENDER_SURFACE 1 // #define CAIRO_HAS_XCB_SURFACE 1 // #define CAIRO_HAS_XLIB_XCB_FUNCTIONS 1 // #define CAIRO_HAS_XCB_SHM_FUNCTIONS 1 // #define CAIRO_HAS_QT_SURFACE 1 // #define CAIRO_HAS_QUARTZ_SURFACE 1 // #define CAIRO_HAS_QUARTZ_FONT 1 // #define CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1 // #define CAIRO_HAS_WIN32_SURFACE 1 // #define CAIRO_HAS_WIN32_FONT 1 // #define CAIRO_HAS_SKIA_SURFACE 1 // #define CAIRO_HAS_OS2_SURFACE 1 // #define CAIRO_HAS_BEOS_SURFACE 1 // #define CAIRO_HAS_DRM_SURFACE 1 // #define CAIRO_HAS_GALLIUM_SURFACE 1 // #define CAIRO_HAS_GL_SURFACE 1 // #define CAIRO_HAS_GLESV2_SURFACE 1 // #define CAIRO_HAS_COGL_SURFACE 1 // #define CAIRO_HAS_DIRECTFB_SURFACE 1 // #define CAIRO_HAS_VG_SURFACE 1 // #define CAIRO_HAS_EGL_FUNCTIONS 1 // #define CAIRO_HAS_GLX_FUNCTIONS 1 // #define CAIRO_HAS_WGL_FUNCTIONS 1 // #define CAIRO_HAS_SCRIPT_SURFACE 1 #define CAIRO_HAS_FT_FONT 1 // #define CAIRO_HAS_FC_FONT 1 // #define CAIRO_HAS_PS_SURFACE 1 // #define CAIRO_HAS_PDF_SURFACE 1 // #define CAIRO_HAS_SVG_SURFACE 1 // #define CAIRO_HAS_TEST_SURFACES 1 // #define CAIRO_HAS_TEE_SURFACE 1 // #define CAIRO_HAS_XML_SURFACE 1 #define CAIRO_HAS_PTHREAD 1 // #define CAIRO_HAS_GOBJECT_FUNCTIONS 1 // #define CAIRO_HAS_TRACE 1 // #define CAIRO_HAS_INTERPRETER 1 // #define CAIRO_HAS_SYMBOL_LOOKUP 1 #define CAIRO_HAS_DLSYM 1 // #define HAVE_BYTESWAP_H 1 // #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 // #define HAVE_SYS_INT_TYPES_H 1 #define HAVE_UNISTD_H 1 // #define HAVE_UINT128_T 1 #define HAVE_UINT64_T 1 // #define HAVE_INTEL_ATOMIC_PRIMITIVES 1 // #define HAVE_LIB_ATOMIC_OPS 1 // #define HAVE_OS_ATOMIC_OPS 1 // #define HAVE_FT_LIBRARY_SETLCDFILTER 1 // #define HAVE_FT_GLYPHSLOT_EMBOLDEN 1 // #define HAVE_FT_GLYPHSLOT_OBLIQUE 1 // #define HAVE_FT_LOAD_SFNT_TABLE 1 // #define HAVE_FT_GET_X11_FONT_FORMAT 1 // #define HAVE_FT_LOAD_SFNT_TABLE 1 // #define HAVE_MEMFAULT 1 // #define HAVE_LOCKDEP 1 // #define HAVE_FCFINI 1 // #define HAVE_CTIME_R 1 // #define HAVE_CLOCK_GETTIME 1 // #define HAVE_X11_EXTENSIONS_XSHM_H 1 // #define HAVE_X11_EXTENSIONS_SHMPROTO_H 1 // #define HAVE_X11_EXTENSIONS_SHMSTR_H 1 // #define HAVE_XRENDERCREATESOLIDFILL 1 // #define HAVE_XRENDERCREATELINEARGRADIENT 1 // #define HAVE_XRENDERCREATERADIALGRADIENT 1 // #define HAVE_XRENDERCREATECONICALGRADIENT 1 // #define HAVE_VALGRIND 1 #endif ================================================ FILE: project/lib/custom/cairo/configs/windows/config.h ================================================ #ifndef _cairo_config_h #define _cairo_config_h // #define CAIRO_HAS_PNG_FUNCTIONS 1 // #define CAIRO_HAS_XLIB_SURFACE 1 // #define CAIRO_HAS_XLIB_XRENDER_SURFACE 1 // #define CAIRO_HAS_XCB_SURFACE 1 // #define CAIRO_HAS_XLIB_XCB_FUNCTIONS 1 // #define CAIRO_HAS_XCB_SHM_FUNCTIONS 1 // #define CAIRO_HAS_QT_SURFACE 1 // #define CAIRO_HAS_QUARTZ_SURFACE 1 // #define CAIRO_HAS_QUARTZ_FONT 1 // #define CAIRO_HAS_QUARTZ_IMAGE_SURFACE 1 // #define CAIRO_HAS_WIN32_SURFACE 1 // #define CAIRO_HAS_WIN32_FONT 1 // #define CAIRO_HAS_SKIA_SURFACE 1 // #define CAIRO_HAS_OS2_SURFACE 1 // #define CAIRO_HAS_BEOS_SURFACE 1 // #define CAIRO_HAS_DRM_SURFACE 1 // #define CAIRO_HAS_GALLIUM_SURFACE 1 // #define CAIRO_HAS_GL_SURFACE 1 // #define CAIRO_HAS_GLESV2_SURFACE 1 // #define CAIRO_HAS_COGL_SURFACE 1 // #define CAIRO_HAS_DIRECTFB_SURFACE 1 // #define CAIRO_HAS_VG_SURFACE 1 // #define CAIRO_HAS_EGL_FUNCTIONS 1 // #define CAIRO_HAS_GLX_FUNCTIONS 1 // #define CAIRO_HAS_WGL_FUNCTIONS 1 // #define CAIRO_HAS_SCRIPT_SURFACE 1 #define CAIRO_HAS_FT_FONT 1 // #define CAIRO_HAS_FC_FONT 1 // #define CAIRO_HAS_PS_SURFACE 1 // #define CAIRO_HAS_PDF_SURFACE 1 // #define CAIRO_HAS_SVG_SURFACE 1 // #define CAIRO_HAS_TEST_SURFACES 1 // #define CAIRO_HAS_TEE_SURFACE 1 // #define CAIRO_HAS_XML_SURFACE 1 // #define CAIRO_HAS_PTHREAD 1 // #define CAIRO_HAS_GOBJECT_FUNCTIONS 1 // #define CAIRO_HAS_TRACE 1 // #define CAIRO_HAS_INTERPRETER 1 // #define CAIRO_HAS_SYMBOL_LOOKUP 1 // #define CAIRO_HAS_DLSYM 1 #ifdef __MINGW32__ // #define HAVE_BYTESWAP_H 1 // #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 // #define HAVE_SYS_INT_TYPES_H 1 // #define HAVE_UNISTD_H 1 // #define HAVE_UINT128_T 1 #define HAVE_UINT64_T 1 #endif // #define HAVE_INTEL_ATOMIC_PRIMITIVES 1 // #define HAVE_LIB_ATOMIC_OPS 1 // #define HAVE_OS_ATOMIC_OPS 1 // #define HAVE_FT_LIBRARY_SETLCDFILTER 1 // #define HAVE_FT_GLYPHSLOT_EMBOLDEN 1 // #define HAVE_FT_GLYPHSLOT_OBLIQUE 1 // #define HAVE_FT_LOAD_SFNT_TABLE 1 // #define HAVE_FT_GET_X11_FONT_FORMAT 1 // #define HAVE_FT_LOAD_SFNT_TABLE 1 // #define HAVE_MEMFAULT 1 // #define HAVE_LOCKDEP 1 // #define HAVE_FCFINI 1 // #define HAVE_CTIME_R 1 // #define HAVE_CLOCK_GETTIME 1 // #define HAVE_X11_EXTENSIONS_XSHM_H 1 // #define HAVE_X11_EXTENSIONS_SHMPROTO_H 1 // #define HAVE_X11_EXTENSIONS_SHMSTR_H 1 // #define HAVE_XRENDERCREATESOLIDFILL 1 // #define HAVE_XRENDERCREATELINEARGRADIENT 1 // #define HAVE_XRENDERCREATERADIALGRADIENT 1 // #define HAVE_XRENDERCREATECONICALGRADIENT 1 // #define HAVE_VALGRIND 1 #endif ================================================ FILE: project/lib/custom/cairo/src/cairo-features.h ================================================ #ifndef CAIRO_FEATURES_H #define CAIRO_FEATURES_H #endif ================================================ FILE: project/lib/custom/curl/lib/curl_config.h ================================================ /* lib/curl_config.h. Generated from curl_config.h.in by configure. */ /* lib/curl_config.h.in. Generated from configure.ac by autoheader. */ /* Location of default ca bundle */ /* #define CURL_CA_BUNDLE "/etc/ssl/certs/ca-certificates.crt" */ /* define "1" to use built in CA store of SSL library */ /* #undef CURL_CA_FALLBACK */ /* Location of default ca path */ /* #undef CURL_CA_PATH */ /* Default SSL backend */ /* #undef CURL_DEFAULT_SSL_BACKEND */ /* to disable cookies support */ /* #undef CURL_DISABLE_COOKIES */ /* to disable cryptographic authentication */ /* #undef CURL_DISABLE_CRYPTO_AUTH */ /* to disable DICT */ /* #undef CURL_DISABLE_DICT */ /* to disable FILE */ /* #undef CURL_DISABLE_FILE */ /* to disable FTP */ /* #undef CURL_DISABLE_FTP */ /* to disable Gopher */ /* #undef CURL_DISABLE_GOPHER */ /* to disable HTTP */ /* #undef CURL_DISABLE_HTTP */ /* to disable IMAP */ /* #undef CURL_DISABLE_IMAP */ /* to disable LDAP */ #define CURL_DISABLE_LDAP 1 /* to disable LDAPS */ #define CURL_DISABLE_LDAPS 1 /* to disable --libcurl C code generation option */ /* #undef CURL_DISABLE_LIBCURL_OPTION */ /* to disable POP3 */ /* #undef CURL_DISABLE_POP3 */ /* to disable proxies */ /* #undef CURL_DISABLE_PROXY */ /* to disable RTSP */ /* #undef CURL_DISABLE_RTSP */ /* to disable SMB/CIFS */ /* #undef CURL_DISABLE_SMB */ /* to disable SMTP */ /* #undef CURL_DISABLE_SMTP */ /* to disable TELNET */ /* #undef CURL_DISABLE_TELNET */ /* to disable TFTP */ /* #undef CURL_DISABLE_TFTP */ /* to disable TLS-SRP authentication */ /* #undef CURL_DISABLE_TLS_SRP */ /* to disable verbose strings */ /* #undef CURL_DISABLE_VERBOSE_STRINGS */ /* Definition to make a library symbol externally visible. */ /* #define CURL_EXTERN_SYMBOL __attribute__ ((__visibility__ ("default"))) */ /* built with multiple SSL backends */ /* #undef CURL_WITH_MULTI_SSL */ /* your Entropy Gathering Daemon socket pathname */ /* #undef EGD_SOCKET */ /* Define if you want to enable IPv6 support */ #define ENABLE_IPV6 1 /* Define to the type of arg 2 for gethostname. */ #define GETHOSTNAME_TYPE_ARG2 size_t /* Define to the type qualifier of arg 1 for getnameinfo. */ #define GETNAMEINFO_QUAL_ARG1 const /* Define to the type of arg 1 for getnameinfo. */ #define GETNAMEINFO_TYPE_ARG1 struct sockaddr * /* Define to the type of arg 2 for getnameinfo. */ #define GETNAMEINFO_TYPE_ARG2 socklen_t /* Define to the type of args 4 and 6 for getnameinfo. */ #define GETNAMEINFO_TYPE_ARG46 socklen_t /* Define to the type of arg 7 for getnameinfo. */ #define GETNAMEINFO_TYPE_ARG7 int /* Specifies the number of arguments to getservbyport_r */ /* #define GETSERVBYPORT_R_ARGS 6 */ /* Specifies the size of the buffer to pass to getservbyport_r */ /* #define GETSERVBYPORT_R_BUFSIZE 4096 */ /* Define to 1 if you have the alarm function. */ #define HAVE_ALARM 1 /* Define to 1 if you have the header file. */ #define HAVE_ALLOCA_H 1 /* Define to 1 if you have the header file. */ #define HAVE_ARPA_INET_H 1 /* Define to 1 if you have the header file. */ #define HAVE_ARPA_TFTP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_ASSERT_H 1 /* Define to 1 if you have the basename function. */ #define HAVE_BASENAME 1 /* Define to 1 if bool is an available type. */ #define HAVE_BOOL_T 1 /* Define to 1 if using BoringSSL. */ /* #undef HAVE_BORINGSSL */ /* Define to 1 if you have the __builtin_available function. */ /* #undef HAVE_BUILTIN_AVAILABLE */ /* Define to 1 if you have the clock_gettime function and monotonic timer. */ #ifdef HX_LINUX #define HAVE_CLOCK_GETTIME_MONOTONIC 1 #else /* #undef HAVE_CLOCK_GETTIME_MONOTONIC */ #endif /* Define to 1 if you have the closesocket function. */ /* #undef HAVE_CLOSESOCKET */ /* Define to 1 if you have the CloseSocket camel case function. */ /* #undef HAVE_CLOSESOCKET_CAMEL */ /* Define to 1 if you have the connect function. */ #define HAVE_CONNECT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CRYPTO_H */ /* Define to 1 if you have the `CyaSSL_CTX_UseSupportedCurve' function. */ /* #undef HAVE_CYASSL_CTX_USESUPPORTEDCURVE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CYASSL_ERROR_SSL_H */ /* Define to 1 if you have the `CyaSSL_get_peer_certificate' function. */ /* #undef HAVE_CYASSL_GET_PEER_CERTIFICATE */ /* Define to 1 if you have the header file. */ /* #undef HAVE_CYASSL_OPTIONS_H */ /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `ENGINE_cleanup' function. */ /* #undef HAVE_ENGINE_CLEANUP */ /* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */ /* #undef HAVE_ENGINE_LOAD_BUILTIN_ENGINES */ /* Define to 1 if you have the header file. */ #define HAVE_ERRNO_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_ERR_H */ /* Define to 1 if you have the fcntl function. */ #define HAVE_FCNTL 1 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have a working fcntl O_NONBLOCK function. */ #define HAVE_FCNTL_O_NONBLOCK 1 /* Define to 1 if you have the fdopen function. */ #define HAVE_FDOPEN 1 /* Define to 1 if you have the freeaddrinfo function. */ #define HAVE_FREEADDRINFO 1 /* Define to 1 if you have the freeifaddrs function. */ #define HAVE_FREEIFADDRS 1 /* Define to 1 if you have the fsetxattr function. */ #define HAVE_FSETXATTR 1 /* fsetxattr() takes 5 args */ #define HAVE_FSETXATTR_5 1 /* fsetxattr() takes 6 args */ /* #undef HAVE_FSETXATTR_6 */ /* Define to 1 if you have the ftruncate function. */ #define HAVE_FTRUNCATE 1 /* Define to 1 if you have the gai_strerror function. */ /* #define HAVE_GAI_STRERROR 1 */ /* Define to 1 if you have a working getaddrinfo function. */ #define HAVE_GETADDRINFO 1 /* Define to 1 if the getaddrinfo function is threadsafe. */ #define HAVE_GETADDRINFO_THREADSAFE 1 /* Define to 1 if you have the `geteuid' function. */ #define HAVE_GETEUID 1 /* Define to 1 if you have the gethostbyaddr function. */ #define HAVE_GETHOSTBYADDR 1 /* Define to 1 if you have the gethostbyaddr_r function. */ /* #undef HAVE_GETHOSTBYADDR_R */ /* gethostbyaddr_r() takes 5 args */ /* #undef HAVE_GETHOSTBYADDR_R_5 */ /* gethostbyaddr_r() takes 7 args */ /* #undef HAVE_GETHOSTBYADDR_R_7 */ /* gethostbyaddr_r() takes 8 args */ /* #undef HAVE_GETHOSTBYADDR_R_8 */ /* Define to 1 if you have the gethostbyname function. */ #define HAVE_GETHOSTBYNAME 1 /* Define to 1 if you have the gethostbyname_r function. */ /* #undef HAVE_GETHOSTBYNAME_R */ /* gethostbyname_r() takes 3 args */ /* #undef HAVE_GETHOSTBYNAME_R_3 */ /* gethostbyname_r() takes 5 args */ /* #undef HAVE_GETHOSTBYNAME_R_5 */ /* gethostbyname_r() takes 6 args */ /* #undef HAVE_GETHOSTBYNAME_R_6 */ /* Define to 1 if you have the gethostname function. */ #define HAVE_GETHOSTNAME 1 /* Define to 1 if you have a working getifaddrs function. */ #if !defined(ANDROID) && !defined(HX_LINUX) && !defined(WEBOS) && !defined(BLACKBERRY) && !defined(TIZEN) #define HAVE_GETIFADDRS 1 #endif /* Define to 1 if you have the getnameinfo function. */ #define HAVE_GETNAMEINFO 1 /* Define to 1 if you have the `getpass_r' function. */ /* #undef HAVE_GETPASS_R */ /* Define to 1 if you have the `getppid' function. */ #define HAVE_GETPPID 1 /* Define to 1 if you have the `getpwuid' function. */ #define HAVE_GETPWUID 1 /* Define to 1 if you have the `getpwuid_r' function. */ /* #define HAVE_GETPWUID_R 1 */ /* Define to 1 if you have the `getrlimit' function. */ #define HAVE_GETRLIMIT 1 /* Define to 1 if you have the getservbyport_r function. */ /* #undef HAVE_GETSERVBYPORT_R */ /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 /* Define to 1 if you have a working glibc-style strerror_r function. */ /* #undef HAVE_GLIBC_STRERROR_R */ /* Define to 1 if you have a working gmtime_r function. */ #define HAVE_GMTIME_R 1 /* Define to 1 if you have the `gnutls_alpn_set_protocols' function. */ /* #undef HAVE_GNUTLS_ALPN_SET_PROTOCOLS */ /* Define to 1 if you have the `gnutls_certificate_set_x509_key_file2' function. */ /* #undef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2 */ /* Define to 1 if you have the `gnutls_ocsp_req_init' function. */ /* #undef HAVE_GNUTLS_OCSP_REQ_INIT */ /* if you have the function gnutls_srp_verifier */ /* #undef HAVE_GNUTLS_SRP */ /* if you have GSS-API libraries */ /* #undef HAVE_GSSAPI */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_GENERIC_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_GSSAPI_GSSAPI_KRB5_H */ /* if you have GNU GSS */ /* #undef HAVE_GSSGNU */ /* if you have Heimdal */ /* #undef HAVE_GSSHEIMDAL */ /* if you have MIT Kerberos */ /* #undef HAVE_GSSMIT */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IDN2_H */ /* Define to 1 if you have the header file. */ #if !defined(ANDROID) && !defined(HX_LINUX) && !defined(WEBOS) && !defined(BLACKBERRY) && !defined(TIZEN) #define HAVE_IFADDRS_H 1 #endif /* Define to 1 if you have the `if_nametoindex' function. */ /* #define HAVE_IF_NAMETOINDEX 1 */ /* Define to 1 if you have the inet_ntoa_r function. */ /* #undef HAVE_INET_NTOA_R */ /* inet_ntoa_r() takes 2 args */ /* #undef HAVE_INET_NTOA_R_2 */ /* inet_ntoa_r() takes 3 args */ /* #undef HAVE_INET_NTOA_R_3 */ /* Define to 1 if you have a IPv6 capable working inet_ntop function. */ #define HAVE_INET_NTOP 1 /* Define to 1 if you have a IPv6 capable working inet_pton function. */ #define HAVE_INET_PTON 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the ioctl function. */ #define HAVE_IOCTL 1 /* Define to 1 if you have the ioctlsocket function. */ /* #undef HAVE_IOCTLSOCKET */ /* Define to 1 if you have the IoctlSocket camel case function. */ /* #undef HAVE_IOCTLSOCKET_CAMEL */ /* Define to 1 if you have a working IoctlSocket camel case FIONBIO function. */ /* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */ /* Define to 1 if you have a working ioctlsocket FIONBIO function. */ /* #undef HAVE_IOCTLSOCKET_FIONBIO */ /* Define to 1 if you have a working ioctl FIONBIO function. */ #define HAVE_IOCTL_FIONBIO 1 /* Define to 1 if you have a working ioctl SIOCGIFADDR function. */ #define HAVE_IOCTL_SIOCGIFADDR 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_IO_H */ /* Define to 1 if you have the lber.h header file. */ /* #undef HAVE_LBER_H */ /* Define to 1 if you have the ldapssl.h header file. */ /* #undef HAVE_LDAPSSL_H */ /* Define to 1 if you have the ldap.h header file. */ /* #undef HAVE_LDAP_H */ /* Define to 1 if you have the `ldap_init_fd' function. */ /* #undef HAVE_LDAP_INIT_FD */ /* Use LDAPS implementation */ /* #undef HAVE_LDAP_SSL */ /* Define to 1 if you have the ldap_ssl.h header file. */ /* #undef HAVE_LDAP_SSL_H */ /* Define to 1 if you have the `ldap_url_parse' function. */ /* #undef HAVE_LDAP_URL_PARSE */ /* Define to 1 if you have the header file. */ #define HAVE_LIBGEN_H 1 /* Define to 1 if you have the `idn2' library (-lidn2). */ /* #undef HAVE_LIBIDN2 */ /* Define to 1 if using libressl. */ /* #undef HAVE_LIBRESSL */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBRTMP_RTMP_H */ /* Define to 1 if you have the `ssh2' library (-lssh2). */ /* #undef HAVE_LIBSSH2 */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBSSH2_H */ /* Define to 1 if you have the `ssl' library (-lssl). */ /* #undef HAVE_LIBSSL */ /* if zlib is available */ #define HAVE_LIBZ 1 /* Define to 1 if you have the header file. */ #define HAVE_LIMITS_H 1 /* if your compiler supports LL */ #define HAVE_LL 1 /* Define to 1 if you have the header file. */ #define HAVE_LOCALE_H 1 /* Define to 1 if you have a working localtime_r function. */ #define HAVE_LOCALTIME_R 1 /* Define to 1 if the compiler supports the 'long long' data type. */ #define HAVE_LONGLONG 1 /* Define to 1 if you have the malloc.h header file. */ /* #undef HAVE_MALLOC_H */ /* Define to 1 if you have the memory.h header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the memrchr function or macro. */ /* #undef HAVE_MEMRCHR */ /* Define to 1 if you have the MSG_NOSIGNAL flag. */ /* #undef HAVE_MSG_NOSIGNAL */ /* Define to 1 if you have the header file. */ #define HAVE_NETDB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_TCP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NET_IF_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_NGHTTP2_NGHTTP2_H */ /* Define to 1 if NI_WITHSCOPEID exists and works. */ /* #undef HAVE_NI_WITHSCOPEID */ /* if you have an old MIT Kerberos version, lacking GSS_C_NT_HOSTBASED_SERVICE */ /* #undef HAVE_OLD_GSSMIT */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENSSL_CRYPTO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENSSL_ENGINE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENSSL_ERR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENSSL_PEM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENSSL_RSA_H */ /* if you have the function SRP_Calc_client_key */ /* #undef HAVE_OPENSSL_SRP */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENSSL_SSL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENSSL_X509_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_PEM_H */ /* Define to 1 if you have the `pipe' function. */ #define HAVE_PIPE 1 /* Define to 1 if you have a working poll function. */ /* #undef HAVE_POLL */ /* If you have a fine poll */ /* #undef HAVE_POLL_FINE */ /* Define to 1 if you have the header file. */ #define HAVE_POLL_H 1 /* Define to 1 if you have a working POSIX-style strerror_r function. */ #define HAVE_POSIX_STRERROR_R 1 /* if you have */ #define HAVE_PTHREAD_H 1 /* Define to 1 if you have the header file. */ #define HAVE_PWD_H 1 /* Define to 1 if you have the `RAND_egd' function. */ /* #undef HAVE_RAND_EGD */ /* Define to 1 if you have the recv function. */ #define HAVE_RECV 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_RSA_H */ /* Define to 1 if you have the select function. */ #define HAVE_SELECT 1 /* Define to 1 if you have the send function. */ #define HAVE_SEND 1 /* Define to 1 if you have the header file. */ #define HAVE_SETJMP_H 1 /* Define to 1 if you have the `setlocale' function. */ #define HAVE_SETLOCALE 1 /* Define to 1 if you have the `setmode' function. */ /* #undef HAVE_SETMODE */ /* Define to 1 if you have the `setrlimit' function. */ #define HAVE_SETRLIMIT 1 /* Define to 1 if you have the setsockopt function. */ #define HAVE_SETSOCKOPT 1 /* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */ /* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */ /* Define to 1 if you have the header file. */ #define HAVE_SGTTY_H 1 /* Define to 1 if you have the sigaction function. */ #define HAVE_SIGACTION 1 /* Define to 1 if you have the siginterrupt function. */ #define HAVE_SIGINTERRUPT 1 /* Define to 1 if you have the signal function. */ #define HAVE_SIGNAL 1 /* Define to 1 if you have the header file. */ #define HAVE_SIGNAL_H 1 /* Define to 1 if you have the sigsetjmp function or macro. */ #ifndef ANDROID_X86 #define HAVE_SIGSETJMP 1 #endif /* Define to 1 if sig_atomic_t is an available typedef. */ #define HAVE_SIG_ATOMIC_T 1 /* Define to 1 if sig_atomic_t is already defined as volatile. */ /* #undef HAVE_SIG_ATOMIC_T_VOLATILE */ /* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */ #define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 /* Define to 1 if you have the socket function. */ #define HAVE_SOCKET 1 /* Define to 1 if you have the socketpair function. */ #define HAVE_SOCKETPAIR 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SOCKET_H */ /* Define to 1 if you have the `SSLv2_client_method' function. */ /* #undef HAVE_SSLV2_CLIENT_METHOD */ /* Define to 1 if you have the `SSL_get_shutdown' function. */ /* #undef HAVE_SSL_GET_SHUTDOWN */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SSL_H */ /* Define to 1 if you have the header file. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the strcasecmp function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the strcmpi function. */ /* #undef HAVE_STRCMPI */ /* Define to 1 if you have the strdup function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the strerror_r function. */ #define HAVE_STRERROR_R 1 /* Define to 1 if you have the stricmp function. */ /* #undef HAVE_STRICMP */ /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the strncasecmp function. */ #define HAVE_STRNCASECMP 1 /* Define to 1 if you have the strncmpi function. */ /* #undef HAVE_STRNCMPI */ /* Define to 1 if you have the strnicmp function. */ /* #undef HAVE_STRNICMP */ /* Define to 1 if you have the header file. */ /* #undef HAVE_STROPTS_H */ /* Define to 1 if you have the strstr function. */ #define HAVE_STRSTR 1 /* Define to 1 if you have the strtok_r function. */ #define HAVE_STRTOK_R 1 /* Define to 1 if you have the strtoll function. */ #define HAVE_STRTOLL 1 /* if struct sockaddr_storage is defined */ #define HAVE_STRUCT_SOCKADDR_STORAGE 1 /* Define to 1 if you have the timeval struct. */ #define HAVE_STRUCT_TIMEVAL 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_FILIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_POLL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_RESOURCE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SELECT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the header file. */ #if !defined(ANDROID) && !defined(HX_LINUX) && !defined(WEBOS) && !defined(BLACKBERRY) && !defined(TIZEN) && !defined(EMSCRIPTEN) #define HAVE_SYS_SOCKIO_H 1 #endif /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UN_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_UTIME_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_WAIT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_XATTR_H 1 /* Define to 1 if you have the header file. */ #define HAVE_TERMIOS_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_TERMIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the `utime' function. */ #define HAVE_UTIME 1 /* Define to 1 if you have the `utimes' function. */ #define HAVE_UTIMES 1 /* Define to 1 if you have the header file. */ #define HAVE_UTIME_H 1 /* Define to 1 if compiler supports C99 variadic macro style. */ #define HAVE_VARIADIC_MACROS_C99 1 /* Define to 1 if compiler supports old gcc variadic macro style. */ #define HAVE_VARIADIC_MACROS_GCC 1 /* Define to 1 if you have the winber.h header file. */ /* #undef HAVE_WINBER_H */ /* Define to 1 if you have the windows.h header file. */ /* #undef HAVE_WINDOWS_H */ /* Define to 1 if you have the winldap.h header file. */ /* #undef HAVE_WINLDAP_H */ /* Define to 1 if you have the winsock2.h header file. */ /* #undef HAVE_WINSOCK2_H */ /* Define to 1 if you have the winsock.h header file. */ /* #undef HAVE_WINSOCK_H */ /* Define to 1 if you have the `wolfSSLv3_client_method' function. */ /* #undef HAVE_WOLFSSLV3_CLIENT_METHOD */ /* Define to 1 if you have the `wolfSSL_CTX_UseSupportedCurve' function. */ /* #undef HAVE_WOLFSSL_CTX_USESUPPORTEDCURVE */ /* Define to 1 if you have the `wolfSSL_get_peer_certificate' function. */ /* #undef HAVE_WOLFSSL_GET_PEER_CERTIFICATE */ /* Define to 1 if you have the `wolfSSL_UseALPN' function. */ /* #undef HAVE_WOLFSSL_USEALPN */ /* Define this symbol if your OS supports changing the contents of argv */ #define HAVE_WRITABLE_ARGV 1 /* Define to 1 if you have the writev function. */ #define HAVE_WRITEV 1 /* Define to 1 if you have the ws2tcpip.h header file. */ /* #undef HAVE_WS2TCPIP_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_X509_H */ /* if you have the zlib.h header file */ #define HAVE_ZLIB_H 1 /* Define to the sub-directory where libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Define to 1 if you need the lber.h header file even with ldap.h */ /* #undef NEED_LBER_H */ /* Define to 1 if you need the malloc.h header file even with stdlib.h */ /* #undef NEED_MALLOC_H */ /* Define to 1 if you need the memory.h header file even with stdlib.h */ /* #undef NEED_MEMORY_H */ /* Define to 1 if _REENTRANT preprocessor symbol must be defined. */ /* #undef NEED_REENTRANT */ /* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */ /* #undef NEED_THREAD_SAFE */ /* Define to enable NTLM delegation to winbind's ntlm_auth helper. */ /* #define NTLM_WB_ENABLED 1 */ /* Define absolute filename for winbind's ntlm_auth helper. */ /* #define NTLM_WB_FILE "/usr/bin/ntlm_auth" */ /* cpu-machine-OS */ #define OS "x86_64-pc-linux-gnu" /* Name of package */ #define PACKAGE "curl" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "a suitable curl mailing list: https://curl.haxx.se/mail/" /* Define to the full name of this package. */ #define PACKAGE_NAME "curl" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "curl -" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "curl" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "-" /* a suitable file to read random data from */ #ifdef HX_LINUX #define RANDOM_FILE "/dev/urandom" #else /* #undef RANDOM_FILE */ #endif /* Define to the type of arg 1 for recv. */ #define RECV_TYPE_ARG1 int /* Define to the type of arg 2 for recv. */ #define RECV_TYPE_ARG2 void * /* Define to the type of arg 3 for recv. */ #define RECV_TYPE_ARG3 size_t /* Define to the type of arg 4 for recv. */ #define RECV_TYPE_ARG4 int /* Define to the function return type for recv. */ #define RECV_TYPE_RETV ssize_t /* Define as the return type of signal handlers (`int' or `void'). */ #define RETSIGTYPE void /* Define to the type qualifier of arg 5 for select. */ #define SELECT_QUAL_ARG5 /* Define to the type of arg 1 for select. */ #define SELECT_TYPE_ARG1 int /* Define to the type of args 2, 3 and 4 for select. */ #define SELECT_TYPE_ARG234 fd_set * /* Define to the type of arg 5 for select. */ #define SELECT_TYPE_ARG5 struct timeval * /* Define to the function return type for select. */ #define SELECT_TYPE_RETV int /* Define to the type qualifier of arg 2 for send. */ #define SEND_QUAL_ARG2 const /* Define to the type of arg 1 for send. */ #define SEND_TYPE_ARG1 int /* Define to the type of arg 2 for send. */ #define SEND_TYPE_ARG2 void * /* Define to the type of arg 3 for send. */ #define SEND_TYPE_ARG3 size_t /* Define to the type of arg 4 for send. */ #define SEND_TYPE_ARG4 int /* Define to the function return type for send. */ #define SEND_TYPE_RETV ssize_t /* The size of `curl_off_t', as computed by sizeof. */ #define SIZEOF_CURL_OFF_T 8 /* The size of `int', as computed by sizeof. */ #define SIZEOF_INT 4 /* The size of `long', as computed by sizeof. */ #ifdef HXCPP_M64 #define SIZEOF_LONG 8 #else #define SIZEOF_LONG 4 #endif /* The size of `long long', as computed by sizeof. */ /* #undef SIZEOF_LONG_LONG */ /* The size of `off_t', as computed by sizeof. */ #define SIZEOF_OFF_T 8 /* The size of `short', as computed by sizeof. */ #define SIZEOF_SHORT 2 /* The size of `size_t', as computed by sizeof. */ #ifdef HXCPP_M64 #define SIZEOF_SIZE_T 8 #else #define SIZEOF_SIZE_T 4 #endif /* The size of `time_t', as computed by sizeof. */ #ifdef HXCPP_M64 #define SIZEOF_TIME_T 8 #else #define SIZEOF_TIME_T 4 #endif /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to the type of arg 3 for strerror_r. */ #define STRERROR_R_TYPE_ARG3 size_t /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to enable c-ares support */ /* #undef USE_ARES */ /* if axTLS is enabled */ /* #undef USE_AXTLS */ /* if CyaSSL/WolfSSL is enabled */ /* #undef USE_CYASSL */ /* to enable Apple OS native SSL/TLS support */ /* #undef USE_DARWINSSL */ /* if GnuTLS is enabled */ /* #undef USE_GNUTLS */ /* if GnuTLS uses nettle as crypto backend */ /* #undef USE_GNUTLS_NETTLE */ /* PSL support enabled */ /* #undef USE_LIBPSL */ /* if librtmp is in use */ /* #undef USE_LIBRTMP */ /* if libSSH2 is in use */ /* #undef USE_LIBSSH2 */ /* If you want to build curl with the built-in manual */ #define USE_MANUAL 1 /* if mbedTLS is enabled */ /* #undef USE_MBEDTLS */ /* Define to enable metalink support */ /* #undef USE_METALINK */ /* if nghttp2 is in use */ /* #undef USE_NGHTTP2 */ /* if NSS is enabled */ /* #undef USE_NSS */ /* Use OpenLDAP-specific code */ /* #undef USE_OPENLDAP */ /* if OpenSSL is in use */ /* #undef USE_OPENSSL */ /* if PolarSSL is enabled */ /* #undef USE_POLARSSL */ /* to enable Windows native SSL/TLS support */ /* #undef USE_SCHANNEL */ /* if you want POSIX threaded DNS lookup */ /* #define USE_THREADS_POSIX 1 */ /* if you want Win32 threaded DNS lookup */ /* #undef USE_THREADS_WIN32 */ /* Use TLS-SRP authentication */ /* #undef USE_TLS_SRP */ /* Use Unix domain sockets */ /* #define USE_UNIX_SOCKETS 1 */ /* Define to 1 if you have the `normaliz' (WinIDN) library (-lnormaliz). */ /* #undef USE_WIN32_IDN */ /* Define to 1 if you are building a Windows target with large file support. */ /* #undef USE_WIN32_LARGE_FILES */ /* Use Windows LDAP implementation */ /* #undef USE_WIN32_LDAP */ /* Define to 1 if you are building a Windows target without large file support. */ /* #undef USE_WIN32_SMALL_FILES */ /* to enable SSPI support */ /* #undef USE_WINDOWS_SSPI */ /* Version number of package */ #define VERSION "7.56.1" /* Define to 1 to provide own prototypes. */ /* #undef WANT_IDN_PROTOTYPES */ /* Define to 1 if OS is AIX. */ #ifndef _ALL_SOURCE /* # undef _ALL_SOURCE */ #endif /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Type to use in place of in_addr_t when system does not provide it. */ /* #undef in_addr_t */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to `unsigned int' if does not define. */ /* #undef size_t */ /* the signed version of size_t */ /* #undef ssize_t */ ================================================ FILE: project/lib/custom/freetype/include/freetype/config/ftoption.h ================================================ /***************************************************************************/ /* */ /* ftoption.h */ /* */ /* User-selectable configuration macros (specification only). */ /* */ /* Copyright 1996-2018 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ /* this file you indicate that you have read the license and */ /* understand and accept it fully. */ /* */ /***************************************************************************/ #ifndef FTOPTION_H_ #define FTOPTION_H_ #include FT_BEGIN_HEADER /*************************************************************************/ /* */ /* USER-SELECTABLE CONFIGURATION MACROS */ /* */ /* This file contains the default configuration macro definitions for */ /* a standard build of the FreeType library. There are three ways to */ /* use this file to build project-specific versions of the library: */ /* */ /* - You can modify this file by hand, but this is not recommended in */ /* cases where you would like to build several versions of the */ /* library from a single source directory. */ /* */ /* - You can put a copy of this file in your build directory, more */ /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */ /* is the name of a directory that is included _before_ the FreeType */ /* include path during compilation. */ /* */ /* The default FreeType Makefiles and Jamfiles use the build */ /* directory `builds/' by default, but you can easily change */ /* that for your own projects. */ /* */ /* - Copy the file to `$BUILD/ft2build.h' and modify it */ /* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */ /* locate this file during the build. For example, */ /* */ /* #define FT_CONFIG_OPTIONS_H */ /* #include */ /* */ /* will use `$BUILD/myftoptions.h' instead of this file for macro */ /* definitions. */ /* */ /* Note also that you can similarly pre-define the macro */ /* FT_CONFIG_MODULES_H used to locate the file listing of the modules */ /* that are statically linked to the library at compile time. By */ /* default, this file is . */ /* */ /* We highly recommend using the third method whenever possible. */ /* */ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /**** ****/ /**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ /*#***********************************************************************/ /* */ /* If you enable this configuration option, FreeType recognizes an */ /* environment variable called `FREETYPE_PROPERTIES', which can be used */ /* to control the various font drivers and modules. The controllable */ /* properties are listed in the section @properties. */ /* */ /* You have to undefine this configuration option on platforms that lack */ /* the concept of environment variables (and thus don't have the */ /* `getenv' function), for example Windows CE. */ /* */ /* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */ /* multiple lines for better readability). */ /* */ /* { */ /* */ /* ':' */ /* '=' */ /* */ /* ':' */ /* '=' */ /* ... */ /* } */ /* */ /* Example: */ /* */ /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */ /* cff:no-stem-darkening=1 \ */ /* autofitter:warping=1 */ /* */ #define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES /*************************************************************************/ /* */ /* Uncomment the line below if you want to activate LCD rendering */ /* technology similar to ClearType in this build of the library. This */ /* technology triples the resolution in the direction color subpixels. */ /* To mitigate color fringes inherent to this technology, you also need */ /* to explicitly set up LCD filtering. */ /* */ /* Note that this feature is covered by several Microsoft patents */ /* and should not be activated in any default build of the library. */ /* When this macro is not defined, FreeType offers alternative LCD */ /* rendering technology that produces excellent output without LCD */ /* filtering. */ /* */ /* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ /*************************************************************************/ /* */ /* Many compilers provide a non-ANSI 64-bit data type that can be used */ /* by FreeType to speed up some computations. However, this will create */ /* some problems when compiling the library in strict ANSI mode. */ /* */ /* For this reason, the use of 64-bit integers is normally disabled when */ /* the __STDC__ macro is defined. You can however disable this by */ /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */ /* */ /* For most compilers, this will only create compilation warnings when */ /* building the library. */ /* */ /* ObNote: The compiler-specific 64-bit integers are detected in the */ /* file `ftconfig.h' either statically or through the */ /* `configure' script on supported platforms. */ /* */ #undef FT_CONFIG_OPTION_FORCE_INT64 /*************************************************************************/ /* */ /* If this macro is defined, do not try to use an assembler version of */ /* performance-critical functions (e.g. FT_MulFix). You should only do */ /* that to verify that the assembler function works properly, or to */ /* execute benchmark tests of the various implementations. */ /* #define FT_CONFIG_OPTION_NO_ASSEMBLER */ /*************************************************************************/ /* */ /* If this macro is defined, try to use an inlined assembler version of */ /* the `FT_MulFix' function, which is a `hotspot' when loading and */ /* hinting glyphs, and which should be executed as fast as possible. */ /* */ /* Note that if your compiler or CPU is not supported, this will default */ /* to the standard and portable implementation found in `ftcalc.c'. */ /* */ #define FT_CONFIG_OPTION_INLINE_MULFIX /*************************************************************************/ /* */ /* LZW-compressed file support. */ /* */ /* FreeType now handles font files that have been compressed with the */ /* `compress' program. This is mostly used to parse many of the PCF */ /* files that come with various X11 distributions. The implementation */ /* uses NetBSD's `zopen' to partially uncompress the file on the fly */ /* (see src/lzw/ftgzip.c). */ /* */ /* Define this macro if you want to enable this `feature'. */ /* */ #define FT_CONFIG_OPTION_USE_LZW /*************************************************************************/ /* */ /* Gzip-compressed file support. */ /* */ /* FreeType now handles font files that have been compressed with the */ /* `gzip' program. This is mostly used to parse many of the PCF files */ /* that come with XFree86. The implementation uses `zlib' to */ /* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */ /* */ /* Define this macro if you want to enable this `feature'. See also */ /* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */ /* */ #define FT_CONFIG_OPTION_USE_ZLIB /*************************************************************************/ /* */ /* ZLib library selection */ /* */ /* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */ /* It allows FreeType's `ftgzip' component to link to the system's */ /* installation of the ZLib library. This is useful on systems like */ /* Unix or VMS where it generally is already available. */ /* */ /* If you let it undefined, the component will use its own copy */ /* of the zlib sources instead. These have been modified to be */ /* included directly within the component and *not* export external */ /* function names. This allows you to link any program with FreeType */ /* _and_ ZLib without linking conflicts. */ /* */ /* Do not #undef this macro here since the build system might define */ /* it for certain configurations only. */ /* */ /* If you use a build system like cmake or the `configure' script, */ /* options set by those programs have precendence, overwriting the */ /* value here with the configured one. */ /* */ #define FT_CONFIG_OPTION_SYSTEM_ZLIB /*************************************************************************/ /* */ /* Bzip2-compressed file support. */ /* */ /* FreeType now handles font files that have been compressed with the */ /* `bzip2' program. This is mostly used to parse many of the PCF */ /* files that come with XFree86. The implementation uses `libbz2' to */ /* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */ /* Contrary to gzip, bzip2 currently is not included and need to use */ /* the system available bzip2 implementation. */ /* */ /* Define this macro if you want to enable this `feature'. */ /* */ /* If you use a build system like cmake or the `configure' script, */ /* options set by those programs have precendence, overwriting the */ /* value here with the configured one. */ /* */ /* #define FT_CONFIG_OPTION_USE_BZIP2 */ /*************************************************************************/ /* */ /* Define to disable the use of file stream functions and types, FILE, */ /* fopen() etc. Enables the use of smaller system libraries on embedded */ /* systems that have multiple system libraries, some with or without */ /* file stream support, in the cases where file stream support is not */ /* necessary such as memory loading of font files. */ /* */ /* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ /*************************************************************************/ /* */ /* PNG bitmap support. */ /* */ /* FreeType now handles loading color bitmap glyphs in the PNG format. */ /* This requires help from the external libpng library. Uncompressed */ /* color bitmaps do not need any external libraries and will be */ /* supported regardless of this configuration. */ /* */ /* Define this macro if you want to enable this `feature'. */ /* */ /* If you use a build system like cmake or the `configure' script, */ /* options set by those programs have precendence, overwriting the */ /* value here with the configured one. */ /* */ #ifdef NATIVE_TOOLKIT_HAVE_PNG #define FT_CONFIG_OPTION_USE_PNG #endif /*************************************************************************/ /* */ /* HarfBuzz support. */ /* */ /* FreeType uses the HarfBuzz library to improve auto-hinting of */ /* OpenType fonts. If available, many glyphs not directly addressable */ /* by a font's character map will be hinted also. */ /* */ /* Define this macro if you want to enable this `feature'. */ /* */ /* If you use a build system like cmake or the `configure' script, */ /* options set by those programs have precendence, overwriting the */ /* value here with the configured one. */ /* */ #ifdef NATIVE_TOOLKIT_HAVE_HARFBUZZ #define FT_CONFIG_OPTION_USE_HARFBUZZ #endif /*************************************************************************/ /* */ /* Glyph Postscript Names handling */ /* */ /* By default, FreeType 2 is compiled with the `psnames' module. This */ /* module is in charge of converting a glyph name string into a */ /* Unicode value, or return a Macintosh standard glyph name for the */ /* use with the TrueType `post' table. */ /* */ /* Undefine this macro if you do not want `psnames' compiled in your */ /* build of FreeType. This has the following effects: */ /* */ /* - The TrueType driver will provide its own set of glyph names, */ /* if you build it to support postscript names in the TrueType */ /* `post' table, but will not synthesize a missing Unicode charmap. */ /* */ /* - The Type 1 driver will not be able to synthesize a Unicode */ /* charmap out of the glyphs found in the fonts. */ /* */ /* You would normally undefine this configuration macro when building */ /* a version of FreeType that doesn't contain a Type 1 or CFF driver. */ /* */ #define FT_CONFIG_OPTION_POSTSCRIPT_NAMES /*************************************************************************/ /* */ /* Postscript Names to Unicode Values support */ /* */ /* By default, FreeType 2 is built with the `PSNames' module compiled */ /* in. Among other things, the module is used to convert a glyph name */ /* into a Unicode value. This is especially useful in order to */ /* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */ /* through a big table named the `Adobe Glyph List' (AGL). */ /* */ /* Undefine this macro if you do not want the Adobe Glyph List */ /* compiled in your `PSNames' module. The Type 1 driver will not be */ /* able to synthesize a Unicode charmap out of the glyphs found in the */ /* fonts. */ /* */ #define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST /*************************************************************************/ /* */ /* Support for Mac fonts */ /* */ /* Define this macro if you want support for outline fonts in Mac */ /* format (mac dfont, mac resource, macbinary containing a mac */ /* resource) on non-Mac platforms. */ /* */ /* Note that the `FOND' resource isn't checked. */ /* */ #define FT_CONFIG_OPTION_MAC_FONTS /*************************************************************************/ /* */ /* Guessing methods to access embedded resource forks */ /* */ /* Enable extra Mac fonts support on non-Mac platforms (e.g. */ /* GNU/Linux). */ /* */ /* Resource forks which include fonts data are stored sometimes in */ /* locations which users or developers don't expected. In some cases, */ /* resource forks start with some offset from the head of a file. In */ /* other cases, the actual resource fork is stored in file different */ /* from what the user specifies. If this option is activated, */ /* FreeType tries to guess whether such offsets or different file */ /* names must be used. */ /* */ /* Note that normal, direct access of resource forks is controlled via */ /* the FT_CONFIG_OPTION_MAC_FONTS option. */ /* */ #ifdef FT_CONFIG_OPTION_MAC_FONTS #define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK #endif /*************************************************************************/ /* */ /* Allow the use of FT_Incremental_Interface to load typefaces that */ /* contain no glyph data, but supply it via a callback function. */ /* This is required by clients supporting document formats which */ /* supply font data incrementally as the document is parsed, such */ /* as the Ghostscript interpreter for the PostScript language. */ /* */ #define FT_CONFIG_OPTION_INCREMENTAL /*************************************************************************/ /* */ /* The size in bytes of the render pool used by the scan-line converter */ /* to do all of its work. */ /* */ #define FT_RENDER_POOL_SIZE 16384L /*************************************************************************/ /* */ /* FT_MAX_MODULES */ /* */ /* The maximum number of modules that can be registered in a single */ /* FreeType library object. 32 is the default. */ /* */ #define FT_MAX_MODULES 32 /*************************************************************************/ /* */ /* Debug level */ /* */ /* FreeType can be compiled in debug or trace mode. In debug mode, */ /* errors are reported through the `ftdebug' component. In trace */ /* mode, additional messages are sent to the standard output during */ /* execution. */ /* */ /* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */ /* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */ /* */ /* Don't define any of these macros to compile in `release' mode! */ /* */ /* Do not #undef these macros here since the build system might define */ /* them for certain configurations only. */ /* */ /* #define FT_DEBUG_LEVEL_ERROR */ /* #define FT_DEBUG_LEVEL_TRACE */ /*************************************************************************/ /* */ /* Autofitter debugging */ /* */ /* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */ /* control the autofitter behaviour for debugging purposes with global */ /* boolean variables (consequently, you should *never* enable this */ /* while compiling in `release' mode): */ /* */ /* _af_debug_disable_horz_hints */ /* _af_debug_disable_vert_hints */ /* _af_debug_disable_blue_hints */ /* */ /* Additionally, the following functions provide dumps of various */ /* internal autofit structures to stdout (using `printf'): */ /* */ /* af_glyph_hints_dump_points */ /* af_glyph_hints_dump_segments */ /* af_glyph_hints_dump_edges */ /* af_glyph_hints_get_num_segments */ /* af_glyph_hints_get_segment_offset */ /* */ /* As an argument, they use another global variable: */ /* */ /* _af_debug_hints */ /* */ /* Please have a look at the `ftgrid' demo program to see how those */ /* variables and macros should be used. */ /* */ /* Do not #undef these macros here since the build system might define */ /* them for certain configurations only. */ /* */ /* #define FT_DEBUG_AUTOFIT */ /*************************************************************************/ /* */ /* Memory Debugging */ /* */ /* FreeType now comes with an integrated memory debugger that is */ /* capable of detecting simple errors like memory leaks or double */ /* deletes. To compile it within your build of the library, you */ /* should define FT_DEBUG_MEMORY here. */ /* */ /* Note that the memory debugger is only activated at runtime when */ /* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */ /* */ /* Do not #undef this macro here since the build system might define */ /* it for certain configurations only. */ /* */ /* #define FT_DEBUG_MEMORY */ /*************************************************************************/ /* */ /* Module errors */ /* */ /* If this macro is set (which is _not_ the default), the higher byte */ /* of an error code gives the module in which the error has occurred, */ /* while the lower byte is the real error code. */ /* */ /* Setting this macro makes sense for debugging purposes only, since */ /* it would break source compatibility of certain programs that use */ /* FreeType 2. */ /* */ /* More details can be found in the files ftmoderr.h and fterrors.h. */ /* */ #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS /*************************************************************************/ /* */ /* Position Independent Code */ /* */ /* If this macro is set (which is _not_ the default), FreeType2 will */ /* avoid creating constants that require address fixups. Instead the */ /* constants will be moved into a struct and additional intialization */ /* code will be used. */ /* */ /* Setting this macro is needed for systems that prohibit address */ /* fixups, such as BREW. [Note that standard compilers like gcc or */ /* clang handle PIC generation automatically; you don't have to set */ /* FT_CONFIG_OPTION_PIC, which is only necessary for very special */ /* compilers.] */ /* */ /* Note that FT_CONFIG_OPTION_PIC support is not available for all */ /* modules (see `modules.cfg' for a complete list). For building with */ /* FT_CONFIG_OPTION_PIC support, do the following. */ /* */ /* 0. Clone the repository. */ /* 1. Define FT_CONFIG_OPTION_PIC. */ /* 2. Remove all subdirectories in `src' that don't have */ /* FT_CONFIG_OPTION_PIC support. */ /* 3. Comment out the corresponding modules in `modules.cfg'. */ /* 4. Compile. */ /* */ /* #define FT_CONFIG_OPTION_PIC */ /*************************************************************************/ /*************************************************************************/ /**** ****/ /**** S F N T D R I V E R C O N F I G U R A T I O N ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* */ /* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */ /* embedded bitmaps in all formats using the SFNT module (namely */ /* TrueType & OpenType). */ /* */ #define TT_CONFIG_OPTION_EMBEDDED_BITMAPS /*************************************************************************/ /* */ /* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */ /* load and enumerate the glyph Postscript names in a TrueType or */ /* OpenType file. */ /* */ /* Note that when you do not compile the `PSNames' module by undefining */ /* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */ /* contain additional code used to read the PS Names table from a font. */ /* */ /* (By default, the module uses `PSNames' to extract glyph names.) */ /* */ #define TT_CONFIG_OPTION_POSTSCRIPT_NAMES /*************************************************************************/ /* */ /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */ /* access the internal name table in a SFNT-based format like TrueType */ /* or OpenType. The name table contains various strings used to */ /* describe the font, like family name, copyright, version, etc. It */ /* does not contain any glyph name though. */ /* */ /* Accessing SFNT names is done through the functions declared in */ /* `ftsnames.h'. */ /* */ #define TT_CONFIG_OPTION_SFNT_NAMES /*************************************************************************/ /* */ /* TrueType CMap support */ /* */ /* Here you can fine-tune which TrueType CMap table format shall be */ /* supported. */ #define TT_CONFIG_CMAP_FORMAT_0 #define TT_CONFIG_CMAP_FORMAT_2 #define TT_CONFIG_CMAP_FORMAT_4 #define TT_CONFIG_CMAP_FORMAT_6 #define TT_CONFIG_CMAP_FORMAT_8 #define TT_CONFIG_CMAP_FORMAT_10 #define TT_CONFIG_CMAP_FORMAT_12 #define TT_CONFIG_CMAP_FORMAT_13 #define TT_CONFIG_CMAP_FORMAT_14 /*************************************************************************/ /*************************************************************************/ /**** ****/ /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* */ /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */ /* a bytecode interpreter in the TrueType driver. */ /* */ /* By undefining this, you will only compile the code necessary to load */ /* TrueType glyphs without hinting. */ /* */ /* Do not #undef this macro here, since the build system might */ /* define it for certain configurations only. */ /* */ #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER /*************************************************************************/ /* */ /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */ /* subpixel hinting support into the TrueType driver. This modifies the */ /* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is */ /* requested. */ /* */ /* In particular, it modifies the bytecode interpreter to interpret (or */ /* not) instructions in a certain way so that all TrueType fonts look */ /* like they do in a Windows ClearType (DirectWrite) environment. See */ /* [1] for a technical overview on what this means. See `ttinterp.h' */ /* for more details on the LEAN option. */ /* */ /* There are three possible values. */ /* */ /* Value 1: */ /* This value is associated with the `Infinality' moniker, */ /* contributed by an individual nicknamed Infinality with the goal of */ /* making TrueType fonts render better than on Windows. A high */ /* amount of configurability and flexibility, down to rules for */ /* single glyphs in fonts, but also very slow. Its experimental and */ /* slow nature and the original developer losing interest meant that */ /* this option was never enabled in default builds. */ /* */ /* The corresponding interpreter version is v38. */ /* */ /* Value 2: */ /* The new default mode for the TrueType driver. The Infinality code */ /* base was stripped to the bare minimum and all configurability */ /* removed in the name of speed and simplicity. The configurability */ /* was mainly aimed at legacy fonts like Arial, Times New Roman, or */ /* Courier. Legacy fonts are fonts that modify vertical stems to */ /* achieve clean black-and-white bitmaps. The new mode focuses on */ /* applying a minimal set of rules to all fonts indiscriminately so */ /* that modern and web fonts render well while legacy fonts render */ /* okay. */ /* */ /* The corresponding interpreter version is v40. */ /* */ /* Value 3: */ /* Compile both, making both v38 and v40 available (the latter is the */ /* default). */ /* */ /* By undefining these, you get rendering behavior like on Windows */ /* without ClearType, i.e., Windows XP without ClearType enabled and */ /* Win9x (interpreter version v35). Or not, depending on how much */ /* hinting blood and testing tears the font designer put into a given */ /* font. If you define one or both subpixel hinting options, you can */ /* switch between between v35 and the ones you define (using */ /* `FT_Property_Set'). */ /* */ /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */ /* defined. */ /* */ /* [1] https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */ /* */ /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */ #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */ /*************************************************************************/ /* */ /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */ /* TrueType glyph loader to use Apple's definition of how to handle */ /* component offsets in composite glyphs. */ /* */ /* Apple and MS disagree on the default behavior of component offsets */ /* in composites. Apple says that they should be scaled by the scaling */ /* factors in the transformation matrix (roughly, it's more complex) */ /* while MS says they should not. OpenType defines two bits in the */ /* composite flags array which can be used to disambiguate, but old */ /* fonts will not have them. */ /* */ /* https://www.microsoft.com/typography/otspec/glyf.htm */ /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */ /* */ #undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED /*************************************************************************/ /* */ /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */ /* support for Apple's distortable font technology (fvar, gvar, cvar, */ /* and avar tables). This has many similarities to Type 1 Multiple */ /* Masters support. */ /* */ #define TT_CONFIG_OPTION_GX_VAR_SUPPORT /*************************************************************************/ /* */ /* Define TT_CONFIG_OPTION_BDF if you want to include support for */ /* an embedded `BDF ' table within SFNT-based bitmap formats. */ /* */ #define TT_CONFIG_OPTION_BDF /*************************************************************************/ /* */ /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */ /* number of bytecode instructions executed for a single run of the */ /* bytecode interpreter, needed to prevent infinite loops. You don't */ /* want to change this except for very special situations (e.g., making */ /* a library fuzzer spend less time to handle broken fonts). */ /* */ /* It is not expected that this value is ever modified by a configuring */ /* script; instead, it gets surrounded with #ifndef ... #endif so that */ /* the value can be set as a preprocessor option on the compiler's */ /* command line. */ /* */ #ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES #define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L #endif /*************************************************************************/ /*************************************************************************/ /**** ****/ /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* */ /* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */ /* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */ /* required. */ /* */ #define T1_MAX_DICT_DEPTH 5 /*************************************************************************/ /* */ /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */ /* calls during glyph loading. */ /* */ #define T1_MAX_SUBRS_CALLS 16 /*************************************************************************/ /* */ /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */ /* minimum of 16 is required. */ /* */ /* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */ /* */ #define T1_MAX_CHARSTRINGS_OPERANDS 256 /*************************************************************************/ /* */ /* Define this configuration macro if you want to prevent the */ /* compilation of `t1afm', which is in charge of reading Type 1 AFM */ /* files into an existing face. Note that if set, the T1 driver will be */ /* unable to produce kerning distances. */ /* */ #undef T1_CONFIG_OPTION_NO_AFM /*************************************************************************/ /* */ /* Define this configuration macro if you want to prevent the */ /* compilation of the Multiple Masters font support in the Type 1 */ /* driver. */ /* */ #undef T1_CONFIG_OPTION_NO_MM_SUPPORT /*************************************************************************/ /* */ /* T1_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe Type 1 */ /* engine gets compiled into FreeType. If defined, it is possible to */ /* switch between the two engines using the `hinting-engine' property of */ /* the type1 driver module. */ /* */ /* #define T1_CONFIG_OPTION_OLD_ENGINE */ /*************************************************************************/ /*************************************************************************/ /**** ****/ /**** C F F D R I V E R C O N F I G U R A T I O N ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* */ /* Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is */ /* possible to set up the default values of the four control points that */ /* define the stem darkening behaviour of the (new) CFF engine. For */ /* more details please read the documentation of the */ /* `darkening-parameters' property (file `ftdriver.h'), which allows the */ /* control at run-time. */ /* */ /* Do *not* undefine these macros! */ /* */ #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0 /*************************************************************************/ /* */ /* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF */ /* engine gets compiled into FreeType. If defined, it is possible to */ /* switch between the two engines using the `hinting-engine' property of */ /* the cff driver module. */ /* */ /* #define CFF_CONFIG_OPTION_OLD_ENGINE */ /*************************************************************************/ /*************************************************************************/ /**** ****/ /**** P C F D R I V E R C O N F I G U R A T I O N ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* */ /* There are many PCF fonts just called `Fixed' which look completely */ /* different, and which have nothing to do with each other. When */ /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */ /* random, the style changes often if one changes the size and one */ /* cannot select some fonts at all. This option makes the PCF module */ /* prepend the foundry name (plus a space) to the family name. */ /* */ /* We also check whether we have `wide' characters; all put together, we */ /* get family names like `Sony Fixed' or `Misc Fixed Wide'. */ /* */ /* If this option is activated, it can be controlled with the */ /* `no-long-family-names' property of the pcf driver module. */ /* */ /* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ /*************************************************************************/ /*************************************************************************/ /**** ****/ /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/ /**** ****/ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* */ /* Compile autofit module with CJK (Chinese, Japanese, Korean) script */ /* support. */ /* */ #define AF_CONFIG_OPTION_CJK /*************************************************************************/ /* */ /* Compile autofit module with fallback Indic script support, covering */ /* some scripts that the `latin' submodule of the autofit module doesn't */ /* (yet) handle. */ /* */ #define AF_CONFIG_OPTION_INDIC /*************************************************************************/ /* */ /* Compile autofit module with warp hinting. The idea of the warping */ /* code is to slightly scale and shift a glyph within a single dimension */ /* so that as much of its segments are aligned (more or less) on the */ /* grid. To find out the optimal scaling and shifting value, various */ /* parameter combinations are tried and scored. */ /* */ /* This experimental option is active only if the rendering mode is */ /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */ /* `warping' property of the auto-hinter (see file `ftdriver.h' for more */ /* information; by default it is switched off). */ /* */ #define AF_CONFIG_OPTION_USE_WARPER /*************************************************************************/ /* */ /* Use TrueType-like size metrics for `light' auto-hinting. */ /* */ /* It is strongly recommended to avoid this option, which exists only to */ /* help some legacy applications retain its appearance and behaviour */ /* with respect to auto-hinted TrueType fonts. */ /* */ /* The very reason this option exists at all are GNU/Linux distributions */ /* like Fedora that did not un-patch the following change (which was */ /* present in FreeType between versions 2.4.6 and 2.7.1, inclusive). */ /* */ /* 2011-07-16 Steven Chu */ /* */ /* [truetype] Fix metrics on size request for scalable fonts. */ /* */ /* This problematic commit is now reverted (more or less). */ /* */ /* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */ /* */ /* * This macro is obsolete. Support has been removed in FreeType * version 2.5. */ /* #define FT_CONFIG_OPTION_OLD_INTERNALS */ /* * This macro is defined if native TrueType hinting is requested by the * definitions above. */ #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER #define TT_USE_BYTECODE_INTERPRETER #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING #if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1 #define TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY #endif #if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2 #define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL #endif #endif #endif /* * Check CFF darkening parameters. The checks are the same as in function * `cff_property_set' in file `cffdrivr.c'. */ #if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \ \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \ \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \ \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \ CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500 #error "Invalid CFF darkening parameters!" #endif FT_END_HEADER #endif /* FTOPTION_H_ */ /* END */ ================================================ FILE: project/lib/custom/freetype/include/ft2build.h ================================================ /***************************************************************************/ /* */ /* ft2build.h */ /* */ /* FreeType 2 build and setup macros. */ /* */ /* Copyright 1996-2018 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ /* this file you indicate that you have read the license and */ /* understand and accept it fully. */ /* */ /***************************************************************************/ /*************************************************************************/ /* */ /* This is the `entry point' for FreeType header file inclusions. It is */ /* the only header file which should be included directly; all other */ /* FreeType header files should be accessed with macro names (after */ /* including `ft2build.h'). */ /* */ /* A typical example is */ /* */ /* #include */ /* #include FT_FREETYPE_H */ /* */ /*************************************************************************/ #ifndef FT2BUILD_H_ #define FT2BUILD_H_ #ifdef HX_WINRT #define NOMINMAX #define generic GenericFromFreeTypeLibrary #endif #include #endif /* FT2BUILD_H_ */ /* END */ ================================================ FILE: project/lib/custom/hl-ssl/threading_alt.h ================================================ #include typedef struct { CRITICAL_SECTION cs; char is_valid; } mbedtls_threading_mutex_t; ================================================ FILE: project/lib/custom/jpeg/jconfig.h ================================================ /* Version ID for the JPEG library. * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". */ #define JPEG_LIB_VERSION 62 /* libjpeg-turbo version */ #define LIBJPEG_TURBO_VERSION 2.0.7 /* libjpeg-turbo version in integer form */ #define LIBJPEG_TURBO_VERSION_NUMBER 2000007 /* Support arithmetic encoding */ #define C_ARITH_CODING_SUPPORTED 1 /* Support arithmetic decoding */ #define D_ARITH_CODING_SUPPORTED 1 /* Support in-memory source/destination managers */ #define MEM_SRCDST_SUPPORTED 1 /* Use accelerated SIMD routines. */ #ifndef __ANDROID__ #define WITH_SIMD 1 #endif /* * Define BITS_IN_JSAMPLE as either * 8 for 8-bit sample values (the usual setting) * 12 for 12-bit sample values * Only 8 and 12 are legal data precisions for lossy JPEG according to the * JPEG standard, and the IJG code does not support anything else! * We do not support run-time selection of data precision, sorry. */ #define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ /* Define to 1 if you have the header file. */ #define HAVE_LOCALE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define if you need to include to get size_t. */ #define NEED_SYS_TYPES_H 1 /* Define if you have BSD-like bzero and bcopy in rather than memset/memcpy in . */ /* #undef NEED_BSD_STRINGS */ /* Define to 1 if the system has the type `unsigned char'. */ #define HAVE_UNSIGNED_CHAR 1 /* Define to 1 if the system has the type `unsigned short'. */ #define HAVE_UNSIGNED_SHORT 1 /* Compiler does not support pointers to undefined structures. */ /* #undef INCOMPLETE_TYPES_BROKEN */ /* Define if your (broken) compiler shifts signed values as if they were unsigned. */ /* #undef RIGHT_SHIFT_IS_UNSIGNED */ /* Define to 1 if type `char' is unsigned and you are not using gcc. */ #ifndef __CHAR_UNSIGNED__ /* #undef __CHAR_UNSIGNED__ */ #endif /* If rpcndr.h has defined boolean, jmorecfg.h should not. */ #ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ typedef unsigned char boolean; #endif #define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ================================================ FILE: project/lib/custom/jpeg/jconfigint.h ================================================ /* libjpeg-turbo build number */ #define BUILD "20220513" /* Compiler's inline keyword */ #undef inline /* How to obtain function inlining. */ #if defined(__has_attribute) #define INLINE __inline__ __attribute__((always_inline)) #elif defined(_MSC_VER) #define INLINE __forceinline #else #define INLINE #endif /* How to obtain thread-local storage */ #define THREAD_LOCAL __thread /* Define to the full name of this package. */ #define PACKAGE_NAME "libjpeg-turbo" /* Version number of package */ #define VERSION "2.0.7" /* The size of `size_t', as computed by sizeof. */ #if (__WORDSIZE == 64) || defined(_WIN64) #define SIZEOF_SIZE_T 8 #else #define SIZEOF_SIZE_T 4 #endif /* Define if your compiler has __builtin_ctzl() and sizeof(unsigned long) == sizeof(size_t). */ #ifndef HX_WINDOWS #define HAVE_BUILTIN_CTZL #endif /* Define to 1 if you have the header file. */ /* #undef HAVE_INTRIN_H */ #if defined(_MSC_VER) && defined(HAVE_INTRIN_H) #if (SIZEOF_SIZE_T == 8) #define HAVE_BITSCANFORWARD64 #elif (SIZEOF_SIZE_T == 4) #define HAVE_BITSCANFORWARD #endif #endif #if defined(__has_attribute) #if __has_attribute(fallthrough) #define FALLTHROUGH __attribute__((fallthrough)); #else #define FALLTHROUGH #endif #else #define FALLTHROUGH #endif ================================================ FILE: project/lib/custom/jpeg/jversion.h ================================================ /* * jversion.h * * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding. * libjpeg-turbo Modifications: * Copyright (C) 2010, 2012-2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * * This file contains software version identification. */ #if JPEG_LIB_VERSION >= 80 #define JVERSION "8d 15-Jan-2012" #elif JPEG_LIB_VERSION >= 70 #define JVERSION "7 27-Jun-2009" #else #define JVERSION "6b 27-Mar-1998" #endif /* * NOTE: It is our convention to place the authors in the following order: * - libjpeg-turbo authors (2009-) in descending order of the date of their * most recent contribution to the project, then in ascending order of the * date of their first contribution to the project, then in alphabetical * order * - Upstream authors in descending order of the date of the first inclusion of * their code */ #define JCOPYRIGHT \ "Copyright (C) 2009-2022 D. R. Commander\n" \ "Copyright (C) 2015, 2020 Google, Inc.\n" \ "Copyright (C) 2019 Arm Limited\n" \ "Copyright (C) 2015-2016, 2018 Matthieu Darbois\n" \ "Copyright (C) 2011-2016 Siarhei Siamashka\n" \ "Copyright (C) 2015 Intel Corporation\n" \ "Copyright (C) 2013-2014 Linaro Limited\n" \ "Copyright (C) 2013-2014 MIPS Technologies, Inc.\n" \ "Copyright (C) 2009, 2012 Pierre Ossman for Cendio AB\n" \ "Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)\n" \ "Copyright (C) 1999-2006 MIYASAKA Masaru\n" \ "Copyright (C) 1991-2017 Thomas G. Lane, Guido Vollbeding" #define JCOPYRIGHT_SHORT \ "Copyright (C) 1991-2022 The libjpeg-turbo Project and many others" ================================================ FILE: project/lib/custom/mbedtls_hxcpp/mbedtls_config.h ================================================ ================================================ FILE: project/lib/custom/ogg/include/ogg/config_types.h ================================================ #ifndef __CONFIG_TYPES_H__ #define __CONFIG_TYPES_H__ #include typedef int16_t ogg_int16_t; typedef uint16_t ogg_uint16_t; typedef int32_t ogg_int32_t; typedef uint32_t ogg_uint32_t; typedef int64_t ogg_int64_t; typedef uint64_t ogg_uint64_t; #endif ================================================ FILE: project/lib/custom/openal/alc/hrtf_default.h ================================================ static const unsigned char hrtf_default[] = { 0x4d, 0x69, 0x6e, 0x50, 0x48, 0x52, 0x30, 0x32, 0x44, 0xac, 0x00, 0x00, 0x01, 0x00, 0x20, 0x01, 0x78, 0x05, 0x13, 0x01, 0x0c, 0x18, 0x24, 0x2d, 0x38, 0x3c, 0x48, 0x48, 0x48, 0x48, 0x48, 0x3c, 0x38, 0x2d, 0x24, 0x18, 0x0c, 0x01, 0xa3, 0x5d, 0x19, 0x97, 0xe7, 0x20, 0xbc, 0x3f, 0x0b, 0xff, 0xcb, 0x08, 0xb7, 0xa4, 0x01, 0x86, 0x64, 0xff, 0x5e, 0x88, 0x02, 0xd3, 0xb5, 0xfb, 0x56, 0x51, 0xf5, 0x75, 0xac, 0xfb, 0x2b, 0x52, 0x03, 0x59, 0x8d, 0xfe, 0x0f, 0x7e, 0xfc, 0xbe, 0x36, 0xfa, 0xea, 0xfb, 0xfa, 0xf7, 0xcb, 0xfe, 0x75, 0x4f, 0xff, 0xd0, 0xbe, 0xfe, 0xde, 0x5a, 0xff, 0xd7, 0x47, 0xff, 0x5f, 0x55, 0xfe, 0x4f, 0x20, 0xff, 0xc6, 0xf9, 0xfd, 0xae, 0x8b, 0xfe, 0x09, 0x42, 0xfe, 0x89, 0x33, 0xfd, 0xc0, 0xe9, 0xfd, 0x75, 0xa4, 0xfe, 0x82, 0x1e, 0xff, 0x1e, 0xa0, 0xff, 0x86, 0x03, 0x00, 0x76, 0x68, 0xff, 0x21, 0xe4, 0x1a, 0xd6, 0xe6, 0x1f, 0xf0, 0x6d, 0x08, 0xd4, 0x60, 0x09, 0xfc, 0xab, 0x01, 0x90, 0xce, 0xfe, 0x2d, 0xa0, 0x02, 0x16, 0x00, 0xfc, 0xa7, 0xbc, 0xf5, 0xdd, 0x49, 0xfb, 0xf6, 0x31, 0x03, 0xe8, 0x05, 0xff, 0x56, 0xcc, 0xfc, 0x13, 0x20, 0xfb, 0x4b, 0x98, 0xfb, 0xeb, 0xc5, 0xfd, 0xdb, 0x05, 0xff, 0x0c, 0x22, 0xff, 0xbb, 0x2a, 0xff, 0x38, 0x25, 0xff, 0x73, 0x2a, 0xfe, 0x07, 0xf0, 0xfe, 0xe9, 0x04, 0xfe, 0x0c, 0x97, 0xfe, 0xc8, 0x68, 0xfe, 0x1a, 0x87, 0xfd, 0xa3, 0x0a, 0xfe, 0xcc, 0xff, 0xfe, 0x16, 0x7c, 0xff, 0x2a, 0xbc, 0xff, 0xa7, 0x08, 0x00, 0x86, 0x57, 0xff, 0xbb, 0x47, 0x19, 0x2c, 0x52, 0x1e, 0x08, 0x38, 0x08, 0x5b, 0x44, 0x08, 0x2a, 0x93, 0x01, 0x19, 0xa7, 0xff, 0x44, 0xa4, 0x02, 0xbb, 0xad, 0xfb, 0xac, 0x21, 0xf6, 0xd0, 0x62, 0xfc, 0x7b, 0x1f, 0x03, 0x7a, 0x49, 0xfe, 0xa8, 0xe6, 0xfc, 0x65, 0x46, 0xfb, 0x27, 0x2f, 0xfc, 0x05, 0xeb, 0xfe, 0x46, 0x21, 0xff, 0xdb, 0x23, 0xff, 0xaf, 0xa5, 0xff, 0xd7, 0x42, 0xff, 0xd9, 0x59, 0xfe, 0x65, 0x43, 0xff, 0xde, 0x20, 0xfe, 0x9f, 0xa5, 0xfe, 0x94, 0x3f, 0xfe, 0x3d, 0x69, 0xfd, 0x4d, 0x38, 0xfe, 0x0f, 0xd3, 0xfe, 0xc8, 0x44, 0xff, 0x21, 0xbb, 0xff, 0x4b, 0x14, 0x00, 0xe4, 0x73, 0xff, 0xdf, 0x1d, 0x18, 0xd8, 0xc1, 0x1c, 0xc6, 0x97, 0x07, 0x28, 0xa9, 0x07, 0x38, 0x44, 0x01, 0xf0, 0xbb, 0xff, 0xaa, 0xba, 0x02, 0xb2, 0xdb, 0xfb, 0xe7, 0x8b, 0xf6, 0xe0, 0x27, 0xfd, 0xe0, 0xa2, 0x03, 0xc8, 0x75, 0xfe, 0x52, 0x42, 0xfd, 0xa4, 0x8b, 0xfb, 0x42, 0x51, 0xfc, 0x59, 0x72, 0xff, 0x62, 0x6f, 0xff, 0x52, 0xe4, 0xfe, 0xc4, 0x86, 0xff, 0xbe, 0x61, 0xff, 0xc2, 0x89, 0xfe, 0xe2, 0x6b, 0xff, 0x80, 0x41, 0xfe, 0x37, 0xdc, 0xfe, 0x08, 0x7e, 0xfe, 0xf5, 0x88, 0xfd, 0x3c, 0x47, 0xfe, 0x20, 0xdf, 0xfe, 0x1e, 0x49, 0xff, 0x78, 0xbd, 0xff, 0x4d, 0x0f, 0x00, 0x7a, 0x72, 0xff, 0xcd, 0xd8, 0x17, 0xe2, 0x74, 0x1c, 0x94, 0x7d, 0x07, 0xf3, 0x8d, 0x07, 0x7e, 0x49, 0x01, 0xc4, 0xf0, 0xff, 0xc9, 0x07, 0x03, 0x32, 0x30, 0xfc, 0xf5, 0xdb, 0xf6, 0x3d, 0x71, 0xfd, 0x4c, 0xd4, 0x03, 0x27, 0x88, 0xfe, 0x01, 0x22, 0xfd, 0x01, 0x49, 0xfb, 0xed, 0x39, 0xfc, 0xeb, 0x90, 0xff, 0x30, 0x81, 0xff, 0x03, 0xde, 0xfe, 0x61, 0x86, 0xff, 0x06, 0x6a, 0xff, 0xf3, 0x8f, 0xfe, 0x68, 0x77, 0xff, 0xb2, 0x57, 0xfe, 0x8a, 0xfe, 0xfe, 0xc4, 0xaa, 0xfe, 0xa3, 0xa7, 0xfd, 0x96, 0x56, 0xfe, 0xd3, 0xde, 0xfe, 0x60, 0x2f, 0xff, 0x8a, 0x9d, 0xff, 0x8d, 0xf3, 0xff, 0xcf, 0x5c, 0xff, 0x02, 0x3e, 0x18, 0xf4, 0x05, 0x1d, 0x70, 0x92, 0x07, 0xeb, 0x55, 0x07, 0x3e, 0xee, 0x00, 0xd3, 0xa1, 0xff, 0xa6, 0xcc, 0x02, 0xed, 0xde, 0xfb, 0xd2, 0x53, 0xf6, 0xed, 0xea, 0xfc, 0x84, 0xd5, 0x03, 0x50, 0xc0, 0xfe, 0x4e, 0x29, 0xfd, 0x81, 0x2a, 0xfb, 0xa2, 0x15, 0xfc, 0x7d, 0x91, 0xff, 0x44, 0xb2, 0xff, 0xa6, 0x13, 0xff, 0x5e, 0xa9, 0xff, 0x12, 0x90, 0xff, 0xfa, 0xab, 0xfe, 0x31, 0x7d, 0xff, 0xd6, 0x4f, 0xfe, 0x50, 0xe7, 0xfe, 0x93, 0x8f, 0xfe, 0x94, 0x96, 0xfd, 0x23, 0x5a, 0xfe, 0xec, 0xff, 0xfe, 0xab, 0x6c, 0xff, 0x19, 0xe4, 0xff, 0x5f, 0x21, 0x00, 0x05, 0x64, 0xff, 0x21, 0xb8, 0x19, 0x8b, 0xa7, 0x1e, 0xee, 0xbc, 0x07, 0x58, 0xb2, 0x07, 0x4e, 0x00, 0x01, 0x51, 0x9b, 0xff, 0x30, 0xc2, 0x02, 0x17, 0x32, 0xfb, 0x8d, 0x41, 0xf5, 0xae, 0x39, 0xfc, 0x59, 0x0b, 0x04, 0x95, 0xa8, 0xfe, 0x4c, 0x93, 0xfc, 0x31, 0x8c, 0xfa, 0x4f, 0xab, 0xfb, 0x8d, 0x5d, 0xff, 0xd7, 0x96, 0xff, 0xcf, 0xf0, 0xfe, 0x53, 0x9b, 0xff, 0x7c, 0x8d, 0xff, 0x51, 0x82, 0xfe, 0x91, 0x6f, 0xff, 0x5b, 0x4c, 0xfe, 0x51, 0xea, 0xfe, 0xd1, 0x8d, 0xfe, 0xc9, 0x8e, 0xfd, 0x60, 0x5a, 0xfe, 0x57, 0x0c, 0xff, 0xc7, 0x6a, 0xff, 0xc4, 0xd4, 0xff, 0xc1, 0x25, 0x00, 0xa6, 0x7d, 0xff, 0xe0, 0xb3, 0x1a, 0x77, 0x75, 0x20, 0xcc, 0x8d, 0x08, 0xc9, 0x0a, 0x08, 0x74, 0x16, 0x01, 0xa6, 0x20, 0xff, 0xe9, 0x96, 0x02, 0x3d, 0xbd, 0xfa, 0x39, 0xf1, 0xf4, 0x74, 0x36, 0xfc, 0x69, 0x54, 0x03, 0xca, 0x2e, 0xfe, 0x8a, 0xbd, 0xfc, 0x9a, 0x96, 0xfa, 0x9c, 0x8d, 0xfb, 0x91, 0x1b, 0xff, 0x3a, 0x59, 0xff, 0xc3, 0x27, 0xff, 0x21, 0xab, 0xff, 0x7a, 0x56, 0xff, 0xfa, 0x59, 0xfe, 0x7f, 0x47, 0xff, 0x1b, 0x23, 0xfe, 0xe7, 0xc2, 0xfe, 0x80, 0x5a, 0xfe, 0x35, 0x6b, 0xfd, 0x1e, 0x3f, 0xfe, 0x27, 0xdc, 0xfe, 0x34, 0x59, 0xff, 0x74, 0xca, 0xff, 0xa4, 0x22, 0x00, 0xee, 0x76, 0xff, 0x82, 0xe7, 0x1b, 0x1a, 0xfe, 0x20, 0xcd, 0x4c, 0x08, 0x4c, 0xff, 0x08, 0x29, 0xb7, 0x01, 0x58, 0x0b, 0xff, 0x22, 0x01, 0x02, 0x11, 0xdc, 0xf9, 0x05, 0x33, 0xf5, 0xb0, 0xde, 0xfd, 0x6d, 0xff, 0x02, 0xff, 0x16, 0xfc, 0x8f, 0x15, 0xfc, 0x1c, 0x0f, 0xfb, 0xb8, 0x99, 0xfc, 0x04, 0xb3, 0xff, 0xa0, 0xd8, 0xfe, 0x5c, 0xbd, 0xfe, 0x5f, 0xcd, 0xff, 0xc4, 0x49, 0xff, 0x26, 0x5e, 0xfe, 0xa1, 0x61, 0xff, 0xa4, 0xf7, 0xfd, 0x65, 0xa3, 0xfe, 0x43, 0x0d, 0xfe, 0x54, 0x1f, 0xfd, 0x8d, 0x2d, 0xfe, 0x27, 0xab, 0xfe, 0x31, 0x0a, 0xff, 0xdb, 0xa8, 0xff, 0xcb, 0x0d, 0x00, 0x70, 0x4f, 0xff, 0x07, 0x93, 0x1e, 0xe4, 0x0d, 0x23, 0x7a, 0x5d, 0x06, 0x69, 0x54, 0x07, 0x70, 0x36, 0x00, 0x9d, 0x25, 0xff, 0x40, 0xc4, 0x03, 0x01, 0x21, 0xfa, 0x60, 0x67, 0xf4, 0xb7, 0x8e, 0xfe, 0x1b, 0x2e, 0x05, 0xc5, 0x2a, 0xfc, 0x2f, 0xb3, 0xfa, 0x68, 0xe2, 0xf9, 0xb4, 0x73, 0xfc, 0x21, 0x41, 0x00, 0x4f, 0xa3, 0xfe, 0x67, 0x04, 0xfe, 0x67, 0xa6, 0xff, 0x68, 0x52, 0xff, 0x53, 0xfa, 0xfd, 0xb4, 0x60, 0xff, 0xb9, 0xe8, 0xfd, 0x44, 0xb3, 0xfe, 0xe4, 0x09, 0xfe, 0x64, 0xc1, 0xfc, 0x60, 0x0e, 0xfe, 0x6c, 0xcc, 0xfe, 0xf9, 0x17, 0xff, 0xf1, 0xa3, 0xff, 0x58, 0x12, 0x00, 0x75, 0x3f, 0xff, 0xc3, 0x6c, 0x1f, 0xc8, 0x0c, 0x24, 0x46, 0xee, 0x06, 0x31, 0xe2, 0x06, 0xa6, 0x0f, 0xff, 0x5c, 0x17, 0xff, 0xed, 0x1c, 0x04, 0xd4, 0xbf, 0xfa, 0x06, 0x57, 0xf3, 0x97, 0x53, 0xfd, 0xc3, 0x67, 0x06, 0x6b, 0x15, 0xfe, 0xcc, 0xd2, 0xfa, 0x49, 0xed, 0xf7, 0x8e, 0x3d, 0xfb, 0x4b, 0xc0, 0x00, 0xec, 0xbf, 0xff, 0x70, 0xd3, 0xfd, 0xd1, 0x0f, 0xff, 0xd7, 0x31, 0xff, 0xe1, 0xcf, 0xfd, 0x30, 0x34, 0xff, 0x04, 0xa8, 0xfd, 0x6c, 0xb5, 0xfe, 0x53, 0x29, 0xfe, 0x0b, 0xe6, 0xfc, 0xd6, 0xfa, 0xfd, 0x80, 0xe2, 0xfe, 0xd8, 0x37, 0xff, 0x20, 0x9e, 0xff, 0x46, 0xf9, 0xff, 0x57, 0x1a, 0xff, 0x33, 0x58, 0x1e, 0xfe, 0x8c, 0x23, 0x88, 0x16, 0x09, 0xfd, 0x0d, 0x08, 0x9c, 0x8c, 0xff, 0x4b, 0xe8, 0xfe, 0xec, 0x08, 0x03, 0xfc, 0x06, 0xfb, 0xdc, 0xa8, 0xf2, 0xf1, 0x6a, 0xfb, 0xe9, 0x53, 0x05, 0xdc, 0x21, 0xff, 0x4a, 0x9c, 0xfd, 0xcc, 0x55, 0xf8, 0x13, 0x1f, 0xf9, 0xfe, 0x0d, 0x00, 0x61, 0x61, 0x00, 0x18, 0xce, 0xfe, 0x47, 0x3a, 0xff, 0x31, 0x0f, 0xff, 0x0e, 0x1f, 0xfe, 0xde, 0x36, 0xff, 0x93, 0xa0, 0xfd, 0x5a, 0xd2, 0xfe, 0x0a, 0x27, 0xfe, 0xdd, 0x9b, 0xfc, 0x3d, 0xe0, 0xfd, 0x74, 0x93, 0xfe, 0xad, 0x3b, 0xff, 0xe8, 0xcc, 0xff, 0x72, 0x25, 0x00, 0x25, 0x68, 0xff, 0xa4, 0xfd, 0x1c, 0xd5, 0x6b, 0x22, 0xc7, 0x9e, 0x08, 0xf1, 0xc7, 0x08, 0xde, 0xf0, 0x00, 0xb2, 0xc8, 0xfe, 0x08, 0x4f, 0x02, 0x7a, 0xf8, 0xfa, 0x1c, 0xba, 0xf4, 0xcb, 0xe1, 0xfa, 0xb0, 0x59, 0x04, 0x3f, 0x03, 0xff, 0x4c, 0x7b, 0xfc, 0x38, 0xd2, 0xfa, 0xfa, 0x7e, 0xf9, 0x0a, 0x67, 0xfd, 0x2e, 0xe4, 0xff, 0xb5, 0x52, 0xff, 0x48, 0x9f, 0xff, 0xb8, 0xa2, 0xff, 0x90, 0x6b, 0xfe, 0x21, 0xe7, 0xfe, 0xf7, 0x7a, 0xfd, 0x79, 0x4e, 0xfe, 0x71, 0x8d, 0xfe, 0x48, 0x46, 0xfd, 0xfc, 0xcb, 0xfd, 0x7a, 0xc1, 0xfe, 0x74, 0x3c, 0xff, 0xa9, 0xce, 0xff, 0x45, 0x1b, 0x00, 0x29, 0x62, 0xff, 0xc7, 0x24, 0x1c, 0x0f, 0x56, 0x1e, 0x3a, 0xd2, 0x05, 0xd9, 0xb4, 0x0a, 0xfe, 0xb4, 0x01, 0xe3, 0xfa, 0xfd, 0xed, 0xc5, 0x02, 0x4d, 0x98, 0xfc, 0x69, 0x48, 0xf6, 0xe6, 0x5f, 0xfa, 0xc9, 0xff, 0x02, 0x2e, 0xf0, 0xff, 0xe4, 0x10, 0xfd, 0x87, 0x3d, 0xfc, 0x2c, 0x10, 0xfc, 0x69, 0x28, 0xfc, 0xe6, 0xf9, 0xfe, 0x20, 0xc3, 0xff, 0xf7, 0xca, 0xfe, 0x52, 0x07, 0xff, 0x21, 0x04, 0xfe, 0x92, 0xb4, 0xfe, 0xa2, 0x2c, 0xfe, 0x01, 0x9b, 0xfe, 0x70, 0x9b, 0xfe, 0x37, 0xef, 0xfd, 0xa6, 0x13, 0xfe, 0xaf, 0x68, 0xff, 0xc0, 0xda, 0xff, 0x53, 0xc3, 0xff, 0x7d, 0x05, 0x00, 0xf0, 0x45, 0xff, 0xb2, 0xda, 0x19, 0xa9, 0xbf, 0x1c, 0x75, 0x88, 0x06, 0x2c, 0xce, 0x09, 0x64, 0x7f, 0x01, 0xa0, 0xb9, 0xfe, 0x42, 0xb1, 0x02, 0x18, 0xf5, 0xfb, 0xcd, 0x11, 0xf7, 0xf8, 0xe7, 0xfb, 0x56, 0x2e, 0x02, 0x2f, 0xa5, 0xfe, 0x3b, 0x5f, 0xfd, 0x69, 0x88, 0xfc, 0x7f, 0x29, 0xfd, 0xa6, 0xc4, 0xfd, 0x73, 0x30, 0xfe, 0x48, 0x84, 0xff, 0x95, 0xea, 0xff, 0xac, 0x2a, 0xff, 0xbd, 0x1d, 0xfe, 0x85, 0x1d, 0xff, 0x6f, 0x57, 0xfe, 0x84, 0xcc, 0xfe, 0xc0, 0x70, 0xfe, 0x9e, 0xcf, 0xfd, 0x67, 0x84, 0xfe, 0x4d, 0x18, 0xff, 0xb4, 0x58, 0xff, 0x2c, 0x9e, 0xff, 0x2c, 0x17, 0x00, 0x14, 0x7a, 0xff, 0x80, 0x71, 0x18, 0x84, 0x29, 0x1b, 0x98, 0xce, 0x05, 0x24, 0x3c, 0x08, 0x76, 0xcd, 0x01, 0x0f, 0xf7, 0xff, 0x4d, 0x92, 0x02, 0x21, 0xd7, 0xfb, 0xb2, 0x47, 0xf7, 0xac, 0xc9, 0xfc, 0x5b, 0x84, 0x02, 0xe1, 0x40, 0xfe, 0xf6, 0x82, 0xfd, 0x96, 0x90, 0xfc, 0x8a, 0x5f, 0xfd, 0x59, 0x9e, 0xfe, 0xc0, 0xe3, 0xfe, 0x9f, 0xbb, 0xff, 0x71, 0xe4, 0xff, 0x79, 0x28, 0xff, 0xff, 0x66, 0xfe, 0x33, 0x66, 0xff, 0x94, 0x54, 0xfe, 0x75, 0xb3, 0xfe, 0x46, 0x38, 0xfe, 0x1c, 0xb6, 0xfd, 0x8c, 0x85, 0xfe, 0x62, 0xf5, 0xfe, 0xce, 0x67, 0xff, 0x36, 0xd1, 0xff, 0x45, 0x21, 0x00, 0xd4, 0x83, 0xff, 0xd7, 0x24, 0x17, 0x30, 0x98, 0x19, 0x67, 0x21, 0x05, 0xd9, 0xa6, 0x07, 0x2b, 0xc0, 0x01, 0x3d, 0xfb, 0xff, 0x5a, 0x80, 0x02, 0x40, 0xf5, 0xfb, 0x17, 0xb1, 0xf7, 0xe0, 0x9a, 0xfd, 0xd5, 0xb2, 0x02, 0xcf, 0xfe, 0xfd, 0xae, 0xe1, 0xfd, 0xd0, 0xe8, 0xfc, 0x1a, 0x72, 0xfd, 0x25, 0x47, 0xff, 0xf8, 0x3d, 0xff, 0xbc, 0x54, 0xff, 0x1a, 0xbb, 0xff, 0xd0, 0x47, 0xff, 0x99, 0x88, 0xfe, 0x76, 0x72, 0xff, 0x06, 0x6b, 0xfe, 0xb1, 0xfe, 0xfe, 0x17, 0x92, 0xfe, 0x62, 0xe0, 0xfd, 0x0f, 0x6f, 0xfe, 0x5d, 0xdd, 0xfe, 0xb2, 0x69, 0xff, 0xfb, 0xd5, 0xff, 0x51, 0x1a, 0x00, 0x1a, 0x79, 0xff, 0x51, 0xc5, 0x15, 0x73, 0xe6, 0x17, 0xee, 0xd3, 0x04, 0x72, 0x0a, 0x07, 0x58, 0x46, 0x01, 0x5f, 0x3f, 0x00, 0xe7, 0xc0, 0x02, 0x1a, 0x3a, 0xfc, 0x5c, 0x2e, 0xf8, 0x94, 0x6f, 0xfe, 0xda, 0x78, 0x03, 0xc4, 0x7e, 0xfe, 0x2c, 0x47, 0xfe, 0x0a, 0x15, 0xfd, 0x06, 0x99, 0xfd, 0x98, 0xca, 0xff, 0x54, 0x70, 0xff, 0xc0, 0x11, 0xff, 0x63, 0xae, 0xff, 0x08, 0x79, 0xff, 0xb5, 0xcc, 0xfe, 0x34, 0xb5, 0xff, 0x6b, 0x93, 0xfe, 0x0a, 0x27, 0xff, 0xcc, 0xb7, 0xfe, 0x87, 0xec, 0xfd, 0x06, 0x9e, 0xfe, 0x70, 0x0c, 0xff, 0x24, 0x6e, 0xff, 0x30, 0xd5, 0xff, 0x13, 0x15, 0x00, 0xf6, 0x81, 0xff, 0x5e, 0x30, 0x15, 0xc5, 0xe6, 0x16, 0x98, 0x0e, 0x04, 0x2c, 0x50, 0x06, 0x07, 0xfa, 0x00, 0x57, 0x67, 0x00, 0x68, 0x44, 0x03, 0x41, 0x21, 0xfd, 0xe2, 0x2d, 0xf9, 0x8f, 0x59, 0xff, 0x1f, 0x24, 0x04, 0xc8, 0xda, 0xfe, 0xe3, 0x38, 0xfe, 0x57, 0xc1, 0xfc, 0xb3, 0x6b, 0xfd, 0x6f, 0xf3, 0xff, 0xdc, 0xa5, 0xff, 0x7e, 0x26, 0xff, 0x11, 0xbe, 0xff, 0x04, 0x8b, 0xff, 0x08, 0xc9, 0xfe, 0x2a, 0xab, 0xff, 0xa3, 0xad, 0xfe, 0xab, 0x57, 0xff, 0x4c, 0xe1, 0xfe, 0xe0, 0x0b, 0xfe, 0xb8, 0xcc, 0xfe, 0x8b, 0x41, 0xff, 0x6c, 0x89, 0xff, 0x0d, 0xcc, 0xff, 0x22, 0xe8, 0xff, 0x90, 0x42, 0xff, 0xaa, 0x26, 0x15, 0x43, 0x49, 0x17, 0x80, 0xae, 0x04, 0x67, 0xd4, 0x06, 0x8c, 0x5a, 0x01, 0x96, 0xb7, 0x00, 0x02, 0x63, 0x03, 0x9e, 0xe5, 0xfc, 0x40, 0xcd, 0xf8, 0x44, 0x00, 0xff, 0x82, 0xd4, 0x03, 0xf5, 0x99, 0xfe, 0x13, 0xf7, 0xfd, 0xe6, 0x84, 0xfc, 0xbe, 0x76, 0xfd, 0x51, 0x18, 0x00, 0xe0, 0x90, 0xff, 0xd1, 0xfd, 0xfe, 0x0a, 0xaf, 0xff, 0x40, 0x8c, 0xff, 0x9a, 0xd8, 0xfe, 0xd1, 0xcd, 0xff, 0x0c, 0xc3, 0xfe, 0x72, 0x6f, 0xff, 0x89, 0x14, 0xff, 0xd9, 0x25, 0xfe, 0xfd, 0xb7, 0xfe, 0xfa, 0x06, 0xff, 0xe3, 0x32, 0xff, 0x27, 0x93, 0xff, 0xb9, 0xde, 0xff, 0x7b, 0x58, 0xff, 0x92, 0x63, 0x15, 0x9f, 0x76, 0x17, 0x37, 0x6d, 0x04, 0xe5, 0x68, 0x06, 0x06, 0x0c, 0x01, 0xf6, 0x9a, 0x00, 0x74, 0x6d, 0x03, 0x41, 0xe9, 0xfc, 0x0b, 0x92, 0xf8, 0x0e, 0xcd, 0xfe, 0xb3, 0xee, 0x03, 0x8e, 0xa1, 0xfe, 0x07, 0xc4, 0xfd, 0x5c, 0x3c, 0xfc, 0x35, 0x3c, 0xfd, 0xe6, 0x44, 0x00, 0x98, 0x18, 0x00, 0x11, 0x6d, 0xff, 0x8f, 0xde, 0xff, 0x95, 0x8f, 0xff, 0xfe, 0xc3, 0xfe, 0x1a, 0x9f, 0xff, 0x4c, 0x88, 0xfe, 0x5a, 0x38, 0xff, 0x01, 0xf4, 0xfe, 0x7d, 0x4b, 0xfe, 0x2b, 0x11, 0xff, 0x2a, 0x51, 0xff, 0x3a, 0x56, 0xff, 0xf8, 0x89, 0xff, 0xa4, 0xbe, 0xff, 0x6a, 0x3e, 0xff, 0x23, 0x0f, 0x16, 0xc8, 0x79, 0x18, 0xf1, 0xb3, 0x04, 0xdb, 0x4b, 0x06, 0x85, 0x98, 0x00, 0xdf, 0x1c, 0x00, 0xc6, 0xf2, 0x02, 0xc6, 0x3c, 0xfc, 0x69, 0xac, 0xf7, 0x6f, 0xf3, 0xfd, 0x34, 0xff, 0x03, 0x6a, 0x1c, 0xff, 0xee, 0xf7, 0xfd, 0x02, 0x3c, 0xfc, 0xef, 0x2b, 0xfd, 0x50, 0x24, 0x00, 0xec, 0x01, 0x00, 0x18, 0x6b, 0xff, 0x8e, 0xef, 0xff, 0x01, 0xd9, 0xff, 0xb5, 0x0d, 0xff, 0xa7, 0xd2, 0xff, 0xf9, 0xae, 0xfe, 0x3f, 0x3c, 0xff, 0xc3, 0xdc, 0xfe, 0xae, 0x06, 0xfe, 0x59, 0xc5, 0xfe, 0x38, 0x52, 0xff, 0x41, 0xb6, 0xff, 0x6a, 0x23, 0x00, 0x26, 0x33, 0x00, 0x1c, 0x5b, 0xff, 0x6b, 0x4c, 0x17, 0x51, 0xe4, 0x19, 0xab, 0xfb, 0x04, 0x90, 0xb3, 0x06, 0x50, 0xaa, 0x00, 0xb9, 0x1a, 0x00, 0xcb, 0xe4, 0x02, 0x8f, 0x9a, 0xfb, 0xda, 0x7b, 0xf6, 0xdf, 0xf3, 0xfc, 0x16, 0x14, 0x04, 0x17, 0x09, 0xff, 0x39, 0x50, 0xfd, 0xe5, 0x9b, 0xfb, 0xdb, 0xc7, 0xfc, 0x3d, 0x15, 0x00, 0xc4, 0x2a, 0x00, 0x95, 0x7a, 0xff, 0x6a, 0x17, 0x00, 0x52, 0x0c, 0x00, 0xab, 0xfe, 0xfe, 0x23, 0xc6, 0xff, 0x7e, 0xa3, 0xfe, 0x73, 0x41, 0xff, 0xcc, 0xfa, 0xfe, 0x72, 0x24, 0xfe, 0xe6, 0xed, 0xfe, 0xf2, 0x7e, 0xff, 0xdd, 0xa2, 0xff, 0xe1, 0xe9, 0xff, 0x85, 0x18, 0x00, 0x37, 0x88, 0xff, 0xb0, 0x73, 0x19, 0xbe, 0xcd, 0x1b, 0x25, 0x9a, 0x04, 0x84, 0x0e, 0x07, 0x25, 0xa7, 0x00, 0x98, 0x07, 0x00, 0x57, 0xdc, 0x02, 0xd4, 0xb2, 0xfa, 0x92, 0x67, 0xf5, 0x5e, 0xac, 0xfc, 0xc7, 0xb0, 0x04, 0x07, 0xd9, 0xfe, 0x6b, 0xa5, 0xfc, 0x36, 0xfb, 0xfa, 0x96, 0x66, 0xfc, 0x4b, 0xcd, 0xff, 0x18, 0xd3, 0xff, 0x8d, 0x23, 0xff, 0x8d, 0xd9, 0xff, 0x83, 0xd7, 0xff, 0xf1, 0xae, 0xfe, 0x34, 0xbf, 0xff, 0x64, 0xab, 0xfe, 0x51, 0x44, 0xff, 0xec, 0xd7, 0xfe, 0x41, 0xf5, 0xfd, 0x21, 0xc8, 0xfe, 0xc8, 0x6e, 0xff, 0x62, 0xae, 0xff, 0x8e, 0x00, 0x00, 0x95, 0x41, 0x00, 0xf0, 0x94, 0xff, 0x92, 0x33, 0x1b, 0xe3, 0x10, 0x1e, 0xce, 0xa6, 0x04, 0xc4, 0x17, 0x07, 0x59, 0xa2, 0x00, 0x8f, 0xc1, 0xff, 0x5c, 0xdf, 0x02, 0x29, 0xc9, 0xf9, 0x75, 0x9d, 0xf4, 0xc2, 0xa0, 0xfc, 0x72, 0xa4, 0x04, 0x19, 0xb7, 0xfe, 0xca, 0x95, 0xfc, 0xd7, 0x89, 0xfa, 0xfd, 0x18, 0xfc, 0x24, 0xa4, 0xff, 0xf9, 0xae, 0xff, 0x65, 0x46, 0xff, 0xc8, 0xb6, 0xff, 0xdd, 0xad, 0xff, 0xa9, 0x8c, 0xfe, 0x52, 0x83, 0xff, 0x20, 0x4b, 0xfe, 0xe3, 0xfe, 0xfe, 0xc4, 0x92, 0xfe, 0x47, 0xc2, 0xfd, 0x2a, 0xb7, 0xfe, 0x56, 0x61, 0xff, 0x75, 0xba, 0xff, 0x73, 0xfb, 0xff, 0x83, 0x4b, 0x00, 0x93, 0x8d, 0xff, 0xee, 0xb5, 0x1b, 0x5b, 0xab, 0x1f, 0x93, 0xf3, 0x05, 0x4a, 0x98, 0x07, 0x12, 0xbe, 0x00, 0x5b, 0xe6, 0xfe, 0x6c, 0x9b, 0x02, 0x50, 0xb4, 0xf9, 0xcd, 0xd0, 0xf4, 0x49, 0xbd, 0xfc, 0x93, 0x0e, 0x03, 0x39, 0xf5, 0xfd, 0x66, 0x2b, 0xfd, 0xcb, 0x08, 0xfb, 0xdf, 0x1e, 0xfc, 0x02, 0x3e, 0xff, 0xab, 0x58, 0xff, 0x22, 0xb4, 0xff, 0x16, 0xef, 0xff, 0xf6, 0x53, 0xff, 0xaa, 0x61, 0xfe, 0x53, 0x6f, 0xff, 0x8d, 0x58, 0xfe, 0x06, 0xf6, 0xfe, 0xc7, 0x6d, 0xfe, 0x9b, 0xb2, 0xfd, 0x4a, 0x94, 0xfe, 0x4f, 0x08, 0xff, 0x0f, 0x94, 0xff, 0x7e, 0xee, 0xff, 0x9a, 0x3d, 0x00, 0x86, 0x86, 0xff, 0x9e, 0x61, 0x1c, 0xc0, 0x35, 0x20, 0x61, 0x90, 0x06, 0x89, 0xec, 0x08, 0xb7, 0xa4, 0x01, 0x43, 0x88, 0xfe, 0x0b, 0x84, 0x01, 0xc5, 0xdb, 0xf8, 0x90, 0x2b, 0xf5, 0x4d, 0x28, 0xfe, 0x70, 0xe8, 0x01, 0x17, 0xf1, 0xfb, 0x58, 0x32, 0xfd, 0x39, 0xfe, 0xfb, 0xfe, 0x3e, 0xfd, 0x36, 0x4a, 0xff, 0x35, 0x64, 0xfe, 0x1c, 0x56, 0xff, 0x65, 0x31, 0x00, 0x1b, 0x66, 0xff, 0xc9, 0xa4, 0xfe, 0x3f, 0x91, 0xff, 0x6a, 0x3b, 0xfe, 0x4b, 0xdc, 0xfe, 0x57, 0x20, 0xfe, 0xfe, 0x72, 0xfd, 0xac, 0x79, 0xfe, 0xd2, 0xb0, 0xfe, 0x41, 0x3a, 0xff, 0xe1, 0xd1, 0xff, 0x13, 0x33, 0x00, 0xe0, 0x76, 0xff, 0x90, 0x78, 0x1e, 0xf7, 0x8d, 0x20, 0x7e, 0x33, 0x05, 0x7d, 0xda, 0x09, 0xb0, 0xea, 0x01, 0xa6, 0x84, 0xfe, 0x41, 0x47, 0x01, 0xd2, 0xd9, 0xf7, 0xc7, 0xa9, 0xf5, 0x16, 0x7c, 0x00, 0x37, 0xd2, 0x01, 0x05, 0x39, 0xf9, 0x84, 0x42, 0xfc, 0x51, 0x54, 0xfc, 0xe7, 0x66, 0xfe, 0x45, 0x4c, 0x00, 0xc3, 0x02, 0xfe, 0x25, 0xe2, 0xfe, 0x94, 0x5d, 0x00, 0x7f, 0x2e, 0xff, 0x69, 0x6e, 0xfe, 0x52, 0xaa, 0xff, 0x40, 0xed, 0xfd, 0xa1, 0xb9, 0xfe, 0xdd, 0xc5, 0xfd, 0xa5, 0x1a, 0xfd, 0x7b, 0x82, 0xfe, 0xc0, 0x9d, 0xfe, 0xb4, 0xec, 0xfe, 0x62, 0xb8, 0xff, 0x4c, 0x18, 0x00, 0x2e, 0x32, 0xff, 0x09, 0x7c, 0x21, 0xc1, 0x38, 0x23, 0x34, 0x72, 0x02, 0x3a, 0xb0, 0x07, 0xb4, 0xe7, 0x00, 0xbc, 0xa2, 0xfe, 0xf8, 0x91, 0x03, 0x04, 0xfd, 0xf7, 0xab, 0x7b, 0xf4, 0xc7, 0xa7, 0x01, 0xcb, 0xfb, 0x03, 0xd6, 0x95, 0xf8, 0xdb, 0x94, 0xfa, 0x8c, 0xbd, 0xfb, 0x31, 0xb4, 0xfe, 0x87, 0x21, 0x01, 0x8b, 0xcd, 0xfd, 0x72, 0x25, 0xfe, 0xbc, 0x6a, 0x00, 0x93, 0x52, 0xff, 0xab, 0x07, 0xfe, 0x02, 0xaa, 0xff, 0xd6, 0xd3, 0xfd, 0xb8, 0xac, 0xfe, 0xb1, 0xa5, 0xfd, 0x32, 0xa5, 0xfc, 0x18, 0x82, 0xfe, 0x9d, 0xc2, 0xfe, 0x5f, 0xc9, 0xfe, 0x02, 0x8b, 0xff, 0xe9, 0x3c, 0x00, 0x8e, 0x4e, 0xff, 0x9b, 0x9a, 0x24, 0x6c, 0x88, 0x24, 0x0f, 0x23, 0x00, 0x4c, 0x8b, 0x06, 0x76, 0xf6, 0xfe, 0xe1, 0x33, 0xff, 0x27, 0x51, 0x05, 0xf6, 0xf7, 0xf7, 0x82, 0xbc, 0xf3, 0x26, 0x49, 0x02, 0x42, 0xa6, 0x06, 0xb9, 0xc5, 0xf8, 0x81, 0x07, 0xf9, 0xb8, 0x05, 0xfa, 0x89, 0x69, 0xfe, 0x8b, 0xa1, 0x01, 0x8c, 0x60, 0xfd, 0x8c, 0x46, 0xfd, 0x2f, 0x39, 0x00, 0xd8, 0x4f, 0xff, 0x3d, 0x87, 0xfd, 0x66, 0xc4, 0xff, 0x8c, 0xcc, 0xfd, 0x5a, 0xe2, 0xfe, 0xd0, 0xb9, 0xfd, 0x9f, 0x43, 0xfc, 0x8e, 0x55, 0xfe, 0x41, 0xf4, 0xfe, 0x5e, 0x03, 0xff, 0xc0, 0xa8, 0xff, 0xf2, 0x23, 0x00, 0x41, 0x0c, 0xff, 0xc2, 0x38, 0x26, 0x3a, 0xcc, 0x25, 0x1c, 0xf4, 0xff, 0xd4, 0x6b, 0x05, 0x85, 0x4a, 0xfd, 0x39, 0xb1, 0xff, 0x7e, 0x64, 0x06, 0x00, 0xb5, 0xf8, 0x10, 0x50, 0xf2, 0xb2, 0x57, 0x01, 0x2e, 0xf4, 0x08, 0xe2, 0x6d, 0xfa, 0xce, 0x68, 0xf8, 0x1b, 0x77, 0xf7, 0xc3, 0x47, 0xfd, 0xef, 0xba, 0x02, 0x01, 0x23, 0xfe, 0x30, 0xaf, 0xfc, 0x99, 0x9b, 0xff, 0xdd, 0x14, 0xff, 0xb4, 0x7e, 0xfd, 0x76, 0xc7, 0xff, 0x97, 0x66, 0xfd, 0xa2, 0xd3, 0xfe, 0x35, 0xe2, 0xfd, 0xf2, 0x5b, 0xfc, 0xbe, 0x70, 0xfe, 0x30, 0x3b, 0xff, 0x9d, 0x21, 0xff, 0x79, 0xbd, 0xff, 0x35, 0x04, 0x00, 0x27, 0xd4, 0xfe, 0xbf, 0x8e, 0x26, 0x22, 0x94, 0x26, 0x81, 0x24, 0x01, 0x77, 0x58, 0x05, 0xc4, 0x6f, 0xfc, 0x39, 0x68, 0xff, 0xcc, 0x24, 0x06, 0xe4, 0x4b, 0xf9, 0xb3, 0x1c, 0xf1, 0x72, 0xc0, 0xff, 0xa1, 0xd3, 0x09, 0x00, 0xd8, 0xfc, 0xeb, 0xc0, 0xf8, 0x22, 0x77, 0xf5, 0xba, 0x2e, 0xfc, 0x32, 0x24, 0x03, 0x73, 0xce, 0xff, 0xbf, 0x83, 0xfc, 0x64, 0xe9, 0xfe, 0x50, 0x30, 0xff, 0xfb, 0x30, 0xfd, 0xa6, 0x6a, 0xff, 0x1b, 0x45, 0xfd, 0x41, 0xfa, 0xfe, 0x42, 0x02, 0xfe, 0xe1, 0x8e, 0xfc, 0xde, 0x1d, 0xfe, 0x02, 0x2c, 0xff, 0x8d, 0x46, 0xff, 0x0f, 0x92, 0xff, 0x98, 0xeb, 0xff, 0x2c, 0xbe, 0xfe, 0xd6, 0x9a, 0x25, 0xb7, 0xb4, 0x26, 0x10, 0xba, 0x03, 0x9c, 0x8c, 0x06, 0xb1, 0x37, 0xfc, 0x3d, 0xf2, 0xfe, 0x24, 0x48, 0x05, 0xb9, 0x68, 0xf9, 0x3c, 0x21, 0xf0, 0xd4, 0xb2, 0xfd, 0xd6, 0x39, 0x09, 0xf6, 0x18, 0xff, 0x36, 0xae, 0xfb, 0x2c, 0x68, 0xf4, 0x19, 0x22, 0xfa, 0x77, 0x2b, 0x03, 0xc2, 0x27, 0x01, 0x82, 0x73, 0xfd, 0xb5, 0x34, 0xfe, 0x46, 0x19, 0xff, 0x06, 0x7a, 0xfd, 0x44, 0x4e, 0xff, 0x1c, 0x7b, 0xfd, 0x23, 0x50, 0xff, 0xaa, 0xfa, 0xfd, 0x89, 0x56, 0xfc, 0xcd, 0xef, 0xfd, 0xf5, 0xb6, 0xfe, 0x99, 0x50, 0xff, 0xd9, 0x6f, 0xff, 0x1f, 0x06, 0x00, 0xef, 0x22, 0xff, 0x78, 0x13, 0x24, 0x0c, 0xbd, 0x25, 0xea, 0x40, 0x06, 0x35, 0x6e, 0x07, 0x8a, 0x32, 0xfd, 0x93, 0xd4, 0xfe, 0x77, 0xb6, 0x03, 0x36, 0x3e, 0xfa, 0x1b, 0x7c, 0xef, 0x8e, 0x8e, 0xfb, 0xdb, 0xe6, 0x07, 0x4d, 0x95, 0xff, 0x68, 0xdf, 0xfe, 0x5b, 0x99, 0xf5, 0x91, 0x29, 0xf7, 0xf4, 0x22, 0x02, 0x06, 0x7b, 0x01, 0x34, 0x98, 0xfe, 0xbd, 0x01, 0xff, 0x58, 0xd1, 0xfe, 0x0d, 0xf0, 0xfd, 0xd0, 0x5a, 0xff, 0x3a, 0x32, 0xfd, 0xc4, 0x3e, 0xff, 0xe6, 0xf4, 0xfd, 0xc3, 0xe4, 0xfb, 0xd3, 0xf5, 0xfd, 0xf7, 0x7e, 0xfe, 0x25, 0x66, 0xff, 0x7b, 0xfd, 0xff, 0xbe, 0x43, 0x00, 0xbf, 0x63, 0xff, 0x45, 0x4a, 0x22, 0x7e, 0x85, 0x24, 0x02, 0xb3, 0x06, 0xb2, 0x0d, 0x09, 0xd7, 0x65, 0xfe, 0x4b, 0x37, 0xfe, 0x9c, 0x7c, 0x03, 0xb1, 0x53, 0xfa, 0xcc, 0x7f, 0xf0, 0x18, 0xd2, 0xf9, 0x3e, 0x34, 0x07, 0xc1, 0x50, 0xff, 0xf1, 0xf0, 0xfe, 0x3d, 0xd5, 0xf8, 0x27, 0x0a, 0xf5, 0xcf, 0x80, 0xff, 0x73, 0x00, 0x02, 0xc0, 0x91, 0xff, 0x2d, 0xbd, 0xff, 0x02, 0xe5, 0xfe, 0xf6, 0x14, 0xfe, 0x82, 0xac, 0xff, 0x89, 0x01, 0xfd, 0x50, 0x04, 0xfe, 0x72, 0x6b, 0xfe, 0xf7, 0x35, 0xfc, 0xdb, 0xe5, 0xfd, 0x73, 0xe7, 0xfe, 0xc4, 0x60, 0xff, 0x3c, 0x2d, 0x00, 0x17, 0x3a, 0x00, 0x79, 0x5d, 0xff, 0x6f, 0xf7, 0x20, 0x26, 0x87, 0x23, 0x67, 0x84, 0x05, 0x34, 0x3f, 0x09, 0xc0, 0x31, 0x00, 0x83, 0x24, 0xfe, 0xb4, 0x0f, 0x02, 0xf1, 0x51, 0xfa, 0x5d, 0x42, 0xf4, 0xaa, 0xbd, 0xf9, 0x0c, 0xc8, 0x05, 0x9e, 0x97, 0xff, 0xa1, 0x53, 0xfc, 0xa4, 0xa1, 0xfb, 0x22, 0x55, 0xf7, 0xea, 0xe7, 0xfb, 0x90, 0x1a, 0x01, 0x3e, 0xf5, 0xff, 0xf7, 0xc5, 0xff, 0xd5, 0x05, 0x00, 0x91, 0x74, 0xfe, 0xfc, 0x8b, 0xfe, 0x68, 0xf1, 0xfc, 0x88, 0x1b, 0xfe, 0x0d, 0x06, 0xff, 0xeb, 0x50, 0xfd, 0xa7, 0x95, 0xfd, 0x26, 0xec, 0xfe, 0x1a, 0x5b, 0xff, 0xb0, 0x00, 0x00, 0xdc, 0x2b, 0x00, 0xdb, 0x58, 0xff, 0xf7, 0x01, 0x1f, 0xff, 0x0a, 0x21, 0x38, 0x48, 0x05, 0xc5, 0x10, 0x0a, 0x06, 0x31, 0x01, 0x85, 0x11, 0xfe, 0x77, 0x0d, 0x02, 0x3d, 0x1b, 0xfb, 0xa9, 0x60, 0xf5, 0x94, 0xff, 0xf9, 0x71, 0xec, 0x04, 0x77, 0x8a, 0x00, 0xce, 0xd0, 0xfb, 0xf6, 0xe5, 0xfb, 0x56, 0x7f, 0xfa, 0x37, 0x0a, 0xfb, 0x10, 0x88, 0xff, 0xbf, 0xee, 0xff, 0xfa, 0xf0, 0xfe, 0x98, 0x87, 0xff, 0xee, 0xa0, 0xfe, 0x66, 0xf8, 0xfe, 0x54, 0xa6, 0xfd, 0x49, 0x34, 0xfe, 0x7d, 0xdd, 0xfe, 0x75, 0xe6, 0xfd, 0xa4, 0x8e, 0xfd, 0x53, 0x02, 0xff, 0xab, 0x8c, 0xff, 0x9c, 0xd0, 0xff, 0x26, 0x4e, 0x00, 0x43, 0x4d, 0xff, 0x56, 0x0a, 0x1d, 0x97, 0x3f, 0x1c, 0x2f, 0xa1, 0x03, 0x46, 0xc7, 0x0c, 0x9f, 0x95, 0x01, 0xb6, 0xdb, 0xfc, 0x1b, 0x0b, 0x03, 0xb4, 0x8d, 0xfd, 0x85, 0xe2, 0xf6, 0xca, 0xca, 0xf8, 0x25, 0xdf, 0x02, 0x9a, 0x69, 0x01, 0xde, 0x27, 0xfd, 0xf6, 0x99, 0xfd, 0x33, 0x4f, 0xfc, 0x05, 0xe4, 0xf9, 0xfe, 0x5e, 0xff, 0x47, 0x9c, 0x00, 0xc6, 0x22, 0xfe, 0x7e, 0xfb, 0xfe, 0x54, 0xe2, 0xfd, 0xe9, 0x69, 0xfe, 0xb4, 0x79, 0xfe, 0xd4, 0x8d, 0xfe, 0x89, 0xde, 0xfe, 0x42, 0x6c, 0xfe, 0xa2, 0xfa, 0xfd, 0xe9, 0xe7, 0xff, 0x79, 0x37, 0x00, 0xcf, 0xb1, 0xff, 0x17, 0xfe, 0xff, 0x27, 0x36, 0xff, 0x45, 0x1b, 0x1a, 0x04, 0xf0, 0x1a, 0x5c, 0x58, 0x05, 0xa0, 0xd7, 0x0b, 0x73, 0x36, 0x01, 0x3f, 0x2f, 0xfd, 0x4d, 0xbe, 0x02, 0x21, 0xa5, 0xfc, 0x1f, 0x13, 0xf8, 0xae, 0xce, 0xfa, 0x96, 0x2a, 0x01, 0x74, 0xc4, 0xff, 0x12, 0xe9, 0xfd, 0xab, 0x2f, 0xfe, 0x08, 0xcd, 0xfd, 0xec, 0x8c, 0xfb, 0xbc, 0xa3, 0xfd, 0x3c, 0x3f, 0x00, 0xde, 0xf7, 0xff, 0x0e, 0x32, 0xff, 0xc3, 0xdf, 0xfd, 0xc8, 0xcf, 0xfe, 0xb7, 0xa3, 0xfe, 0x44, 0xf3, 0xfe, 0x18, 0xd7, 0xfe, 0xb7, 0x54, 0xfe, 0x1d, 0x79, 0xfe, 0x07, 0x59, 0xff, 0x54, 0xb2, 0xff, 0xd0, 0x90, 0xff, 0x95, 0x08, 0x00, 0xd0, 0x76, 0xff, 0x0e, 0x44, 0x18, 0x0a, 0x0b, 0x19, 0x4c, 0xfd, 0x04, 0x3e, 0x23, 0x0a, 0x2c, 0x95, 0x01, 0xf0, 0x43, 0xff, 0x39, 0x9c, 0x02, 0x9b, 0x56, 0xfc, 0xee, 0x90, 0xf8, 0xdb, 0xb6, 0xfb, 0xf0, 0x45, 0x01, 0x66, 0x05, 0xff, 0xe8, 0x07, 0xfe, 0x09, 0xf0, 0xfd, 0xe8, 0x51, 0xfe, 0xd4, 0x11, 0xfd, 0x63, 0xfe, 0xfd, 0x0c, 0x7c, 0x00, 0x1e, 0x1a, 0x00, 0xf6, 0xf5, 0xfe, 0x8d, 0x3f, 0xfe, 0xec, 0x51, 0xff, 0xdd, 0xa9, 0xfe, 0x15, 0xbb, 0xfe, 0x80, 0x4e, 0xfe, 0x52, 0x22, 0xfe, 0x2d, 0xd8, 0xfe, 0xfe, 0x20, 0xff, 0x2b, 0x4e, 0xff, 0xdc, 0xaf, 0xff, 0x5a, 0x38, 0x00, 0x99, 0x9c, 0xff, 0xf7, 0xb1, 0x16, 0xd6, 0x96, 0x17, 0x1a, 0x4a, 0x04, 0x8e, 0x8d, 0x08, 0x5f, 0x45, 0x02, 0xf7, 0x3f, 0x00, 0xc7, 0x46, 0x02, 0xb8, 0x4b, 0xfc, 0x71, 0xc1, 0xf8, 0xb6, 0xb8, 0xfc, 0xd0, 0x87, 0x01, 0x2e, 0x9e, 0xfe, 0x54, 0x47, 0xfe, 0xa1, 0x11, 0xfe, 0x3b, 0x7c, 0xfe, 0xf4, 0xd4, 0xfd, 0x8d, 0xb2, 0xfe, 0x1c, 0x92, 0x00, 0x3e, 0x07, 0x00, 0xc7, 0xf8, 0xfe, 0xed, 0x83, 0xfe, 0x84, 0x85, 0xff, 0x47, 0x98, 0xfe, 0xbe, 0xae, 0xfe, 0x39, 0x2f, 0xfe, 0x43, 0x1f, 0xfe, 0x5f, 0xca, 0xfe, 0x3e, 0x0a, 0xff, 0x68, 0x8a, 0xff, 0x5e, 0xe2, 0xff, 0x23, 0x2b, 0x00, 0x51, 0x9a, 0xff, 0x8a, 0x40, 0x15, 0x27, 0xf0, 0x15, 0x6b, 0xa3, 0x03, 0xdc, 0xf7, 0x07, 0x33, 0x76, 0x02, 0x5f, 0x43, 0x00, 0x75, 0x1d, 0x02, 0x87, 0x70, 0xfc, 0x18, 0x31, 0xf9, 0xd6, 0xac, 0xfd, 0x7b, 0xa4, 0x01, 0x6c, 0x40, 0xfe, 0xfc, 0xb1, 0xfe, 0x14, 0x65, 0xfe, 0xa5, 0x83, 0xfe, 0x7b, 0x98, 0xfe, 0x1d, 0x2f, 0xff, 0xb6, 0x1a, 0x00, 0xf5, 0xce, 0xff, 0xe1, 0x1d, 0xff, 0x7f, 0xb5, 0xfe, 0x19, 0x97, 0xff, 0x98, 0x94, 0xfe, 0x26, 0xe4, 0xfe, 0x61, 0x86, 0xfe, 0x5f, 0x5e, 0xfe, 0x52, 0xbf, 0xfe, 0xf8, 0xe8, 0xfe, 0x12, 0x89, 0xff, 0x26, 0xf4, 0xff, 0x85, 0x2b, 0x00, 0xd8, 0x85, 0xff, 0x95, 0x8c, 0x13, 0x81, 0x66, 0x14, 0x0a, 0x74, 0x03, 0x47, 0x31, 0x07, 0xc5, 0x01, 0x02, 0xda, 0x97, 0x00, 0x44, 0x5f, 0x02, 0xe7, 0x92, 0xfc, 0x55, 0x93, 0xf9, 0xef, 0x65, 0xfe, 0x38, 0x04, 0x02, 0x78, 0x6c, 0xfe, 0x02, 0x41, 0xff, 0xaa, 0x9b, 0xfe, 0x7d, 0x92, 0xfe, 0x2f, 0x4c, 0xff, 0x89, 0x44, 0xff, 0xba, 0xa4, 0xff, 0xed, 0xd0, 0xff, 0x24, 0x4b, 0xff, 0x2a, 0xd5, 0xfe, 0xe1, 0xd2, 0xff, 0xb7, 0xf7, 0xfe, 0x25, 0x43, 0xff, 0x20, 0xaf, 0xfe, 0x1d, 0x44, 0xfe, 0x84, 0xbf, 0xfe, 0x46, 0x06, 0xff, 0x61, 0x96, 0xff, 0xd9, 0xe0, 0xff, 0x0d, 0x12, 0x00, 0xbf, 0x9e, 0xff, 0xbf, 0x1c, 0x12, 0xc0, 0x8f, 0x12, 0x53, 0x4f, 0x03, 0x05, 0xb9, 0x06, 0x0b, 0x9f, 0x01, 0x80, 0xd9, 0x00, 0xc0, 0x87, 0x02, 0x4a, 0xeb, 0xfc, 0xe4, 0x37, 0xfa, 0x09, 0x5b, 0xff, 0x01, 0xd1, 0x02, 0x32, 0xd3, 0xfe, 0xf9, 0x89, 0xff, 0x12, 0xcb, 0xfe, 0x23, 0xc2, 0xfe, 0x40, 0xcb, 0xff, 0xe0, 0x63, 0xff, 0x16, 0x50, 0xff, 0x1f, 0xce, 0xff, 0xf5, 0x8e, 0xff, 0x6c, 0x21, 0xff, 0x2f, 0xf7, 0xff, 0xff, 0xf2, 0xfe, 0x67, 0x67, 0xff, 0x3e, 0xf1, 0xfe, 0x35, 0x61, 0xfe, 0x6a, 0xe8, 0xfe, 0x71, 0x2c, 0xff, 0x55, 0x90, 0xff, 0xc6, 0xe7, 0xff, 0x60, 0x15, 0x00, 0xaf, 0x99, 0xff, 0x7f, 0x68, 0x11, 0x00, 0x7e, 0x11, 0x27, 0xa4, 0x02, 0x4b, 0xcc, 0x05, 0x39, 0x1e, 0x01, 0x9d, 0xf3, 0x00, 0x96, 0x0d, 0x03, 0xbb, 0xcf, 0xfd, 0x26, 0x18, 0xfb, 0x20, 0x5c, 0x00, 0xa1, 0xc1, 0x03, 0x2c, 0x6f, 0xff, 0x41, 0xa2, 0xff, 0x37, 0x8c, 0xfe, 0xe4, 0x90, 0xfe, 0xe7, 0xe1, 0xff, 0x61, 0x87, 0xff, 0x71, 0x63, 0xff, 0x16, 0x04, 0x00, 0x23, 0xb8, 0xff, 0x5d, 0x17, 0xff, 0x4b, 0xeb, 0xff, 0x43, 0x18, 0xff, 0xcb, 0x96, 0xff, 0xa2, 0x0b, 0xff, 0xcb, 0x76, 0xfe, 0x49, 0x22, 0xff, 0x72, 0x72, 0xff, 0xac, 0xb5, 0xff, 0x28, 0xf4, 0xff, 0x65, 0xf2, 0xff, 0x2b, 0x4d, 0xff, 0x45, 0xea, 0x10, 0x4b, 0xcf, 0x10, 0x7d, 0x22, 0x02, 0x54, 0xcf, 0x05, 0xcc, 0xa8, 0x01, 0x8a, 0x73, 0x01, 0xa7, 0x81, 0x03, 0xd4, 0x72, 0xfe, 0x3f, 0xe7, 0xfb, 0xdc, 0xd8, 0x00, 0x37, 0xbe, 0x03, 0xdd, 0x19, 0xff, 0xac, 0xfd, 0xfe, 0xfa, 0xf2, 0xfd, 0x34, 0x99, 0xfe, 0xb8, 0x5a, 0x00, 0x6b, 0xce, 0xff, 0x12, 0x56, 0xff, 0xeb, 0xbb, 0xff, 0xba, 0x96, 0xff, 0x20, 0x25, 0xff, 0x0c, 0xf9, 0xff, 0x4c, 0x2f, 0xff, 0xd0, 0xd1, 0xff, 0x97, 0x5a, 0xff, 0xaa, 0x9c, 0xfe, 0xec, 0x2b, 0xff, 0xad, 0x6a, 0xff, 0x83, 0x91, 0xff, 0xeb, 0xad, 0xff, 0x50, 0xb2, 0xff, 0xd5, 0x3a, 0xff, 0xb0, 0x0c, 0x11, 0xcd, 0xa3, 0x11, 0xf1, 0x30, 0x03, 0xc2, 0x64, 0x06, 0x35, 0xcd, 0x01, 0x88, 0xa3, 0x01, 0x31, 0x84, 0x03, 0xb0, 0xee, 0xfd, 0x87, 0x23, 0xfb, 0xfa, 0x30, 0x00, 0x0d, 0x4f, 0x03, 0xfc, 0xed, 0xfe, 0x9a, 0xfa, 0xfe, 0xca, 0xe4, 0xfd, 0x24, 0xa6, 0xfe, 0x3e, 0x58, 0x00, 0x51, 0x8b, 0xff, 0xbd, 0x26, 0xff, 0x5e, 0xd3, 0xff, 0xd8, 0xaf, 0xff, 0xbf, 0x31, 0xff, 0xcb, 0x1e, 0x00, 0x6b, 0x3f, 0xff, 0x66, 0xd9, 0xff, 0xc8, 0x80, 0xff, 0xa3, 0xaf, 0xfe, 0x85, 0x08, 0xff, 0x6c, 0x1d, 0xff, 0xcf, 0x2b, 0xff, 0x1a, 0x83, 0xff, 0x5a, 0xc6, 0xff, 0x48, 0x5e, 0xff, 0x97, 0x53, 0x11, 0x2e, 0xcc, 0x11, 0x40, 0xf2, 0x02, 0xb5, 0x0c, 0x06, 0x17, 0xa6, 0x01, 0x14, 0xae, 0x01, 0xde, 0xa4, 0x03, 0xc9, 0xf2, 0xfd, 0xba, 0xd5, 0xfa, 0x0c, 0xd3, 0xff, 0x0f, 0x39, 0x03, 0xc0, 0xe2, 0xfe, 0x0d, 0xbf, 0xfe, 0x81, 0xb0, 0xfd, 0x16, 0x97, 0xfe, 0x3e, 0xa6, 0x00, 0x22, 0x28, 0x00, 0x8f, 0x85, 0xff, 0x80, 0xce, 0xff, 0xc1, 0x93, 0xff, 0x1e, 0x1f, 0xff, 0x39, 0xe0, 0xff, 0x9e, 0xf2, 0xfe, 0xa7, 0xb1, 0xff, 0xa8, 0x87, 0xff, 0xf2, 0x06, 0xff, 0x2c, 0x6b, 0xff, 0x55, 0x36, 0xff, 0x9f, 0x1d, 0xff, 0xc3, 0x5b, 0xff, 0x0e, 0xa3, 0xff, 0x59, 0x5a, 0xff, 0x37, 0xc2, 0x11, 0x64, 0x3c, 0x12, 0xf6, 0xa8, 0x02, 0x5d, 0x68, 0x05, 0x86, 0xde, 0x00, 0x1a, 0x27, 0x01, 0xb0, 0x72, 0x03, 0xe8, 0xe0, 0xfd, 0x3b, 0x8e, 0xfa, 0x1d, 0xb7, 0xff, 0x28, 0xc1, 0x03, 0x33, 0x5c, 0xff, 0x85, 0xda, 0xfe, 0x48, 0x3b, 0xfd, 0x97, 0xec, 0xfd, 0x3d, 0x87, 0x00, 0x8b, 0x6a, 0x00, 0xfd, 0x04, 0x00, 0xd3, 0x71, 0x00, 0x8c, 0xdb, 0xff, 0xfb, 0x16, 0xff, 0xfe, 0xe9, 0xff, 0xdc, 0xde, 0xfe, 0x97, 0x58, 0xff, 0xf3, 0x32, 0xff, 0x28, 0xbf, 0xfe, 0x07, 0x76, 0xff, 0xa4, 0xd6, 0xff, 0x59, 0xd1, 0xff, 0xda, 0xba, 0xff, 0xaa, 0x93, 0xff, 0x64, 0x08, 0xff, 0x55, 0x9b, 0x12, 0xc2, 0x7c, 0x13, 0x0a, 0xf9, 0x02, 0x83, 0x78, 0x05, 0x74, 0x9d, 0x00, 0xc5, 0xc3, 0x00, 0x1b, 0xe5, 0x02, 0x63, 0xe5, 0xfc, 0x4d, 0x58, 0xf9, 0xad, 0xa1, 0xfe, 0x19, 0xd2, 0x03, 0x78, 0xc5, 0xff, 0x3c, 0xe0, 0xfe, 0x33, 0x67, 0xfd, 0x50, 0x35, 0xfe, 0xe6, 0x7c, 0x00, 0xda, 0x4a, 0x00, 0x26, 0xca, 0xff, 0x7e, 0x2a, 0x00, 0x78, 0x25, 0x00, 0x60, 0x7c, 0xff, 0x9d, 0x1b, 0x00, 0xd2, 0x1b, 0xff, 0xda, 0x85, 0xff, 0x0e, 0x2c, 0xff, 0x2c, 0x86, 0xfe, 0x34, 0x26, 0xff, 0xb4, 0x9b, 0xff, 0x14, 0xfd, 0xff, 0x6a, 0x5e, 0x00, 0x2b, 0x38, 0x00, 0x76, 0x50, 0xff, 0xec, 0xec, 0x13, 0x2e, 0xf6, 0x14, 0x4b, 0x2b, 0x03, 0x8f, 0xd7, 0x05, 0x5a, 0xa1, 0x00, 0xcd, 0xac, 0x00, 0xae, 0xbd, 0x02, 0xe4, 0x21, 0xfc, 0xc0, 0x13, 0xf8, 0xdb, 0x91, 0xfd, 0x5a, 0xec, 0x03, 0xe5, 0xa9, 0xff, 0x11, 0x30, 0xfe, 0x5d, 0xdb, 0xfc, 0x6a, 0xf3, 0xfd, 0x7c, 0xa7, 0x00, 0x01, 0x9d, 0x00, 0x0b, 0xe1, 0xff, 0xc1, 0x57, 0x00, 0xfd, 0x31, 0x00, 0x00, 0x4c, 0xff, 0x08, 0x27, 0x00, 0x81, 0x11, 0xff, 0xbc, 0x96, 0xff, 0xf2, 0x5d, 0xff, 0xfd, 0xa6, 0xfe, 0x5e, 0x40, 0xff, 0xb3, 0xc8, 0xff, 0x49, 0xe6, 0xff, 0x48, 0xff, 0xff, 0x79, 0x3a, 0x00, 0x88, 0xc2, 0xff, 0xec, 0xf5, 0x15, 0xa5, 0x8e, 0x16, 0xb9, 0xe1, 0x02, 0xdb, 0x5a, 0x06, 0x27, 0x97, 0x00, 0x97, 0xc6, 0x00, 0xc6, 0xce, 0x02, 0x21, 0x5a, 0xfb, 0xa9, 0xc7, 0xf6, 0x5e, 0xe6, 0xfc, 0x8a, 0x8f, 0x04, 0x81, 0x80, 0xff, 0x9b, 0x58, 0xfd, 0x1c, 0x1e, 0xfc, 0xbd, 0x68, 0xfd, 0x68, 0x45, 0x00, 0xb4, 0x5b, 0x00, 0xe9, 0xa3, 0xff, 0xb7, 0x59, 0x00, 0xa2, 0x59, 0x00, 0xab, 0x3d, 0xff, 0xe8, 0x25, 0x00, 0x70, 0x1b, 0xff, 0x07, 0x84, 0xff, 0x22, 0x4c, 0xff, 0x9b, 0xb8, 0xfe, 0x93, 0x4d, 0xff, 0xb3, 0xdf, 0xff, 0xf7, 0xdc, 0xff, 0x1b, 0xf6, 0xff, 0xb8, 0x21, 0x00, 0xf6, 0x91, 0xff, 0xb3, 0x6c, 0x18, 0xc9, 0x79, 0x18, 0x8f, 0x15, 0x02, 0x2a, 0xc9, 0x06, 0x9b, 0x8d, 0x00, 0x90, 0x9b, 0x00, 0x21, 0xc3, 0x02, 0xb1, 0x46, 0xfa, 0xc8, 0xc7, 0xf5, 0x19, 0xed, 0xfc, 0xac, 0x49, 0x05, 0x42, 0x2d, 0xff, 0x5e, 0xa9, 0xfc, 0x06, 0x89, 0xfb, 0xef, 0x27, 0xfd, 0x70, 0x12, 0x00, 0x8d, 0x0d, 0x00, 0x9c, 0x59, 0xff, 0x07, 0x14, 0x00, 0xc9, 0x27, 0x00, 0x3d, 0xda, 0xfe, 0x53, 0x0e, 0x00, 0x1a, 0x1a, 0xff, 0x7d, 0x94, 0xff, 0x0c, 0x22, 0xff, 0x48, 0x69, 0xfe, 0xad, 0x2e, 0xff, 0x25, 0xcc, 0xff, 0x86, 0xe9, 0xff, 0x37, 0x24, 0x00, 0x53, 0x58, 0x00, 0xaf, 0xb0, 0xff, 0x6f, 0xa1, 0x1a, 0x28, 0xc6, 0x1a, 0xe7, 0x80, 0x01, 0x32, 0xe5, 0x06, 0x85, 0xae, 0x00, 0x7f, 0x59, 0x00, 0x23, 0xc2, 0x02, 0x67, 0x2e, 0xf9, 0x36, 0xe2, 0xf4, 0x3d, 0x14, 0xfd, 0xf8, 0xa4, 0x05, 0xd9, 0xff, 0xfe, 0xc6, 0x5c, 0xfc, 0x29, 0x0a, 0xfb, 0x96, 0xf8, 0xfc, 0x3b, 0x05, 0x00, 0x3e, 0xd4, 0xff, 0xfe, 0x3f, 0xff, 0x52, 0xf1, 0xff, 0xaf, 0x1c, 0x00, 0x81, 0xb3, 0xfe, 0x89, 0xc7, 0xff, 0x2a, 0xb8, 0xfe, 0x32, 0x66, 0xff, 0x72, 0xe1, 0xfe, 0x95, 0x37, 0xfe, 0x2d, 0x1f, 0xff, 0x52, 0xb8, 0xff, 0xce, 0xee, 0xff, 0x7b, 0x2e, 0x00, 0xda, 0x81, 0x00, 0xcc, 0xb9, 0xff, 0xe6, 0xe3, 0x1b, 0x60, 0x12, 0x1d, 0xa0, 0x24, 0x02, 0xd6, 0xde, 0x06, 0x52, 0x6a, 0x00, 0x6c, 0xc0, 0xff, 0xf4, 0xf1, 0x02, 0xad, 0x82, 0xf8, 0x75, 0x8e, 0xf4, 0xed, 0xf4, 0xfc, 0x22, 0x80, 0x04, 0x81, 0xcc, 0xfe, 0x00, 0xf9, 0xfc, 0x97, 0xcf, 0xfa, 0x3d, 0x73, 0xfc, 0x2f, 0xba, 0xff, 0xd5, 0xd1, 0xff, 0x10, 0xec, 0xff, 0xa2, 0xd2, 0xff, 0xb2, 0xb5, 0xff, 0x7c, 0x99, 0xfe, 0x49, 0x93, 0xff, 0x97, 0x6f, 0xfe, 0xf1, 0x19, 0xff, 0xc1, 0xa2, 0xfe, 0x45, 0x17, 0xfe, 0xf9, 0x0f, 0xff, 0xfb, 0x90, 0xff, 0x0f, 0x03, 0x00, 0x20, 0x1b, 0x00, 0xab, 0x66, 0x00, 0x3f, 0x93, 0xff, 0x43, 0x4c, 0x1c, 0x50, 0xa0, 0x1e, 0x78, 0x92, 0x03, 0x27, 0x69, 0x07, 0xd4, 0x96, 0x00, 0x5f, 0xa6, 0xfe, 0x06, 0x91, 0x02, 0xf2, 0xa0, 0xf8, 0x4b, 0xfb, 0xf4, 0xd7, 0x2a, 0xfd, 0x65, 0x79, 0x02, 0x13, 0xff, 0xfd, 0xb9, 0xc0, 0xfd, 0x9b, 0x84, 0xfb, 0x96, 0xa9, 0xfc, 0xe5, 0x2b, 0xff, 0x32, 0x5a, 0xff, 0xe7, 0x6b, 0x00, 0xb9, 0x1a, 0x00, 0x26, 0x41, 0xff, 0x8b, 0x71, 0xfe, 0x27, 0x96, 0xff, 0x30, 0x9d, 0xfe, 0x06, 0x20, 0xff, 0xde, 0x7c, 0xfe, 0xb6, 0x0d, 0xfe, 0x3a, 0xe4, 0xfe, 0x99, 0x27, 0xff, 0x3c, 0xd2, 0xff, 0x24, 0x0b, 0x00, 0x65, 0x55, 0x00, 0xdb, 0x98, 0xff, 0x03, 0xd7, 0x1c, 0x15, 0x53, 0x1f, 0x3c, 0x95, 0x04, 0xb0, 0xca, 0x08, 0xf1, 0x68, 0x01, 0xd7, 0xf7, 0xfd, 0x1d, 0x5e, 0x01, 0xad, 0xe2, 0xf7, 0xb7, 0x75, 0xf5, 0x52, 0xa6, 0xfe, 0xf0, 0xd8, 0x00, 0xa9, 0xdf, 0xfb, 0xdf, 0x36, 0xfe, 0x2e, 0xc9, 0xfc, 0x8b, 0xae, 0xfd, 0x35, 0xef, 0xfe, 0xb2, 0x3c, 0xfe, 0x97, 0x20, 0x00, 0xa0, 0x69, 0x00, 0xa8, 0x68, 0xff, 0xec, 0xd8, 0xfe, 0x8b, 0x9b, 0xff, 0x56, 0x69, 0xfe, 0x47, 0x12, 0xff, 0x91, 0x41, 0xfe, 0xe9, 0xd9, 0xfd, 0xfc, 0xcb, 0xfe, 0x13, 0xb3, 0xfe, 0x27, 0x76, 0xff, 0x8a, 0xfc, 0xff, 0xda, 0x55, 0x00, 0x45, 0x90, 0xff, 0x80, 0x61, 0x1e, 0x1a, 0x5f, 0x1f, 0x26, 0x0f, 0x04, 0x6a, 0x68, 0x0a, 0x05, 0x30, 0x02, 0x34, 0xb2, 0xfd, 0x05, 0x37, 0x00, 0xa3, 0xf4, 0xf6, 0x8d, 0x1a, 0xf6, 0x1a, 0x99, 0x00, 0x23, 0xad, 0xff, 0x03, 0x4e, 0xf9, 0x05, 0x2a, 0xfe, 0xc6, 0x76, 0xfd, 0x71, 0x2c, 0xff, 0xb1, 0x4a, 0xff, 0x91, 0x35, 0xfd, 0x20, 0xe2, 0xff, 0x66, 0xc9, 0x00, 0x9b, 0x24, 0xff, 0xdc, 0xe0, 0xfe, 0x50, 0xde, 0xff, 0x05, 0x3e, 0xfe, 0x16, 0xf4, 0xfe, 0x73, 0xb5, 0xfd, 0x58, 0x7f, 0xfd, 0x8f, 0xc4, 0xfe, 0xf7, 0x7c, 0xfe, 0x31, 0x24, 0xff, 0x02, 0xe2, 0xff, 0x28, 0x29, 0x00, 0x51, 0x4c, 0xff, 0xfa, 0x07, 0x21, 0x46, 0x8f, 0x1f, 0xcd, 0x16, 0x02, 0xb4, 0x70, 0x0b, 0x95, 0x20, 0x02, 0x43, 0xbd, 0xfd, 0x86, 0x5d, 0x00, 0xb9, 0xbb, 0xf5, 0xf0, 0xd4, 0xf6, 0x84, 0x6a, 0x03, 0x16, 0x8f, 0xff, 0x4b, 0x20, 0xf6, 0x47, 0x33, 0xfd, 0x54, 0xf2, 0xfd, 0x62, 0x4d, 0x00, 0x83, 0x7e, 0x00, 0xd4, 0xd4, 0xfc, 0x79, 0x4b, 0xff, 0xd6, 0x05, 0x01, 0x23, 0xea, 0xfe, 0xeb, 0x8e, 0xfe, 0xc1, 0xf8, 0xff, 0xa7, 0xd8, 0xfd, 0xfa, 0xce, 0xfe, 0x14, 0x6a, 0xfd, 0xde, 0x2c, 0xfd, 0x65, 0xe6, 0xfe, 0x1a, 0x75, 0xfe, 0xd8, 0xc9, 0xfe, 0x23, 0xd2, 0xff, 0x66, 0x21, 0x00, 0x45, 0x10, 0xff, 0xce, 0x62, 0x24, 0xde, 0xdb, 0x21, 0xec, 0xd0, 0xfe, 0x9c, 0xc6, 0x09, 0x8d, 0x8a, 0x01, 0xf2, 0xee, 0xfd, 0xf3, 0x5a, 0x02, 0x6c, 0x87, 0xf5, 0xed, 0xdf, 0xf5, 0x69, 0x21, 0x05, 0x49, 0x8f, 0x01, 0xdf, 0xb1, 0xf4, 0x66, 0x64, 0xfb, 0x7a, 0xae, 0xfd, 0x52, 0xfe, 0x00, 0x4a, 0x75, 0x01, 0x5d, 0x73, 0xfc, 0xd8, 0xac, 0xfe, 0x6e, 0x3e, 0x01, 0xb9, 0xd3, 0xfe, 0x11, 0x12, 0xfe, 0xc7, 0x31, 0x00, 0xba, 0xb4, 0xfd, 0xf5, 0xa0, 0xfe, 0x44, 0x33, 0xfd, 0xb2, 0xc4, 0xfc, 0x46, 0xf4, 0xfe, 0x34, 0x9a, 0xfe, 0xc8, 0xa4, 0xfe, 0xe1, 0xa1, 0xff, 0xd8, 0x3a, 0x00, 0x0c, 0x1a, 0xff, 0x8b, 0x8d, 0x28, 0xcc, 0x10, 0x24, 0x1e, 0xcc, 0xfa, 0x59, 0xc2, 0x07, 0x0d, 0xd1, 0xff, 0xa0, 0xa9, 0xfe, 0x85, 0x67, 0x05, 0x1a, 0x26, 0xf5, 0x57, 0x7c, 0xf4, 0xea, 0x6f, 0x06, 0x54, 0x7d, 0x04, 0x29, 0x5e, 0xf4, 0xb0, 0x53, 0xf9, 0x3e, 0x73, 0xfc, 0x08, 0x50, 0x01, 0xb0, 0x33, 0x02, 0xdf, 0xa2, 0xfb, 0x0b, 0x83, 0xfd, 0x5d, 0x81, 0x01, 0x44, 0x3a, 0xff, 0x65, 0x69, 0xfd, 0xe0, 0x27, 0x00, 0x21, 0xb9, 0xfd, 0x08, 0xd9, 0xfe, 0x97, 0x39, 0xfd, 0x15, 0x39, 0xfc, 0x0a, 0xdb, 0xfe, 0xed, 0xaf, 0xfe, 0xd1, 0xa1, 0xfe, 0x86, 0xb8, 0xff, 0xa4, 0x66, 0x00, 0xaa, 0x04, 0xff, 0x40, 0x8c, 0x2b, 0x42, 0x15, 0x25, 0xe8, 0x8a, 0xf8, 0x76, 0xd3, 0x06, 0xb1, 0xc7, 0xfd, 0x67, 0x8c, 0xff, 0x98, 0x27, 0x07, 0xbd, 0x13, 0xf5, 0x55, 0x7d, 0xf3, 0xaf, 0xe9, 0x06, 0xa5, 0x76, 0x07, 0x44, 0x53, 0xf4, 0x99, 0xbd, 0xf7, 0x55, 0xad, 0xfa, 0xab, 0xd1, 0x00, 0xec, 0xc8, 0x02, 0x43, 0x76, 0xfb, 0xe2, 0xaa, 0xfc, 0x2e, 0x1f, 0x01, 0x59, 0x2c, 0xff, 0x7a, 0xfb, 0xfc, 0x4d, 0x56, 0x00, 0xd1, 0x9b, 0xfd, 0x9b, 0x1b, 0xff, 0xe6, 0x4c, 0xfd, 0x8f, 0xbe, 0xfb, 0xee, 0xc6, 0xfe, 0xa9, 0x13, 0xff, 0x7e, 0xde, 0xfe, 0x3b, 0xb2, 0xff, 0xa0, 0x38, 0x00, 0xd4, 0xcc, 0xfe, 0x84, 0x88, 0x2d, 0x74, 0x7f, 0x26, 0xfe, 0x9e, 0xf7, 0xe5, 0x76, 0x05, 0xc8, 0xe0, 0xfb, 0xa1, 0x81, 0x00, 0xd8, 0xb5, 0x08, 0xa9, 0x85, 0xf5, 0xbd, 0xce, 0xf1, 0xc0, 0x2b, 0x06, 0x35, 0x68, 0x0a, 0x1a, 0xa8, 0xf5, 0x3d, 0xb5, 0xf6, 0x03, 0xcb, 0xf7, 0x61, 0xde, 0xff, 0x2c, 0x41, 0x04, 0x55, 0xe6, 0xfb, 0xb0, 0xe2, 0xfb, 0x42, 0x69, 0x00, 0x17, 0xff, 0xfe, 0x63, 0xf5, 0xfc, 0xde, 0x72, 0x00, 0xcf, 0x43, 0xfd, 0xcc, 0x09, 0xff, 0x36, 0x5d, 0xfd, 0xcc, 0xcc, 0xfb, 0xf8, 0xf9, 0xfe, 0xa2, 0x67, 0xff, 0x43, 0xff, 0xfe, 0xaf, 0xaf, 0xff, 0x8c, 0x18, 0x00, 0xc1, 0x9a, 0xfe, 0xe1, 0xd7, 0x2e, 0xd4, 0x4e, 0x27, 0x4c, 0x72, 0xf8, 0x4d, 0x9f, 0x04, 0x56, 0x93, 0xfa, 0xee, 0xc2, 0x00, 0x30, 0xea, 0x08, 0xfe, 0x9d, 0xf6, 0x8e, 0x0c, 0xf0, 0x25, 0xf2, 0x04, 0xef, 0x7c, 0x0c, 0x29, 0xde, 0xf7, 0x34, 0x19, 0xf6, 0x67, 0x2f, 0xf5, 0xae, 0x03, 0xff, 0x19, 0x5b, 0x05, 0x5d, 0x5a, 0xfd, 0x5f, 0x2d, 0xfb, 0x1a, 0xea, 0xff, 0xb4, 0xec, 0xfe, 0xb7, 0xe5, 0xfc, 0xe8, 0x2d, 0x00, 0x89, 0xb8, 0xfc, 0x9b, 0x34, 0xff, 0x01, 0xb0, 0xfd, 0x54, 0x03, 0xfc, 0x9d, 0xcd, 0xfe, 0x16, 0x8d, 0xff, 0xb3, 0x1a, 0xff, 0x3b, 0xd6, 0xff, 0xb3, 0xdf, 0xff, 0x7f, 0x5a, 0xfe, 0xe2, 0xe5, 0x2e, 0x6a, 0x2d, 0x28, 0xda, 0xd3, 0xf9, 0x30, 0x8d, 0x04, 0x00, 0xb3, 0xf9, 0x28, 0x70, 0x00, 0x7f, 0x89, 0x08, 0x84, 0x2d, 0xf7, 0xa7, 0xb4, 0xee, 0x7d, 0x1e, 0x03, 0x05, 0x75, 0x0d, 0x50, 0xa4, 0xfa, 0x0f, 0x65, 0xf6, 0x96, 0xe8, 0xf2, 0x53, 0xf6, 0xfd, 0xa4, 0xdc, 0x05, 0x71, 0x50, 0xff, 0xbf, 0xd7, 0xfa, 0xa7, 0x06, 0xff, 0x25, 0x3e, 0xff, 0x52, 0x6f, 0xfc, 0xb2, 0xce, 0xff, 0xd5, 0xc6, 0xfc, 0x8b, 0x61, 0xff, 0x7d, 0xc4, 0xfd, 0x27, 0x30, 0xfc, 0x44, 0x57, 0xfe, 0xd3, 0x7e, 0xff, 0x17, 0x46, 0xff, 0xe7, 0x7c, 0xff, 0x96, 0xdc, 0xff, 0xf4, 0x52, 0xfe, 0x72, 0xd7, 0x2d, 0x69, 0xce, 0x28, 0x92, 0x97, 0xfc, 0x41, 0x98, 0x05, 0x55, 0x11, 0xf9, 0x62, 0xe6, 0xff, 0x01, 0xc9, 0x07, 0x07, 0x38, 0xf7, 0xe0, 0xad, 0xed, 0xa4, 0xd3, 0x00, 0x30, 0x60, 0x0d, 0xb0, 0xa0, 0xfd, 0x8d, 0x1a, 0xf9, 0x41, 0xea, 0xf0, 0xe6, 0xe8, 0xfb, 0x63, 0x52, 0x06, 0xb2, 0x26, 0x01, 0xb9, 0x9b, 0xfb, 0x7d, 0xcd, 0xfd, 0xf4, 0x66, 0xff, 0x37, 0x8d, 0xfc, 0x02, 0xa7, 0xff, 0x4a, 0x2d, 0xfd, 0x65, 0xc2, 0xff, 0x06, 0xa0, 0xfd, 0x02, 0xf4, 0xfb, 0xf4, 0x34, 0xfe, 0x3f, 0x06, 0xff, 0x59, 0x65, 0xff, 0xff, 0x27, 0xff, 0x4a, 0x02, 0x00, 0xd0, 0xb0, 0xfe, 0x6b, 0x5f, 0x2c, 0xa3, 0x8c, 0x28, 0xae, 0xfc, 0xff, 0xf4, 0x5f, 0x06, 0x5d, 0x5a, 0xf9, 0x3a, 0x56, 0xff, 0xaf, 0x77, 0x06, 0x43, 0x37, 0xf8, 0x54, 0x39, 0xec, 0x19, 0x9b, 0xfe, 0xda, 0x42, 0x0c, 0x47, 0x6b, 0xff, 0x36, 0x1a, 0xfd, 0x21, 0x56, 0xf0, 0x67, 0x03, 0xf9, 0x75, 0x54, 0x06, 0x6f, 0xef, 0x01, 0x9c, 0xd5, 0xfc, 0x09, 0xbf, 0xfd, 0xe1, 0xf5, 0xfe, 0x3f, 0x6e, 0xfd, 0x87, 0x80, 0xff, 0x70, 0xea, 0xfc, 0x74, 0x21, 0x00, 0x22, 0xbf, 0xfd, 0x9a, 0x84, 0xfb, 0x14, 0x10, 0xfe, 0xce, 0x6c, 0xfe, 0x26, 0x7b, 0xff, 0x0e, 0x92, 0xff, 0x77, 0x2b, 0x00, 0xe7, 0x34, 0xff, 0x87, 0xa4, 0x2a, 0x1a, 0x43, 0x27, 0x1c, 0xc7, 0x02, 0xf9, 0x0b, 0x07, 0xa4, 0x8b, 0xfa, 0x40, 0x48, 0xff, 0x1a, 0x7d, 0x04, 0x5b, 0x51, 0xf9, 0xfe, 0xb8, 0xeb, 0x4b, 0x44, 0xfc, 0xce, 0x0c, 0x0b, 0xa8, 0xc2, 0xff, 0x22, 0x50, 0x00, 0x2a, 0xd5, 0xf1, 0x52, 0x4e, 0xf5, 0xde, 0x33, 0x05, 0x10, 0x6a, 0x02, 0xa4, 0x0e, 0xfe, 0x2a, 0xbe, 0xfe, 0x7a, 0x94, 0xfe, 0x1a, 0xcb, 0xfd, 0x67, 0x8b, 0xff, 0x2b, 0xa9, 0xfc, 0x1c, 0xdb, 0xff, 0x25, 0x9f, 0xfd, 0x0d, 0x0f, 0xfb, 0xae, 0x36, 0xfe, 0x21, 0x5f, 0xfe, 0x02, 0xa1, 0xff, 0xf8, 0x2e, 0x00, 0xdc, 0x5c, 0x00, 0xdc, 0x5b, 0xff, 0x5a, 0x70, 0x28, 0xd1, 0xbb, 0x25, 0xf8, 0x23, 0x04, 0x95, 0x57, 0x09, 0x85, 0x1b, 0xfb, 0x7a, 0x8b, 0xfe, 0xd5, 0x1b, 0x04, 0x1a, 0x75, 0xf9, 0xb3, 0xba, 0xec, 0x02, 0xaf, 0xf9, 0xfb, 0x35, 0x0a, 0x17, 0xe2, 0xff, 0x98, 0x56, 0x01, 0xbe, 0xe8, 0xf4, 0x9d, 0xd5, 0xf1, 0x9a, 0xe3, 0x02, 0x16, 0x89, 0x03, 0x7e, 0x0d, 0xff, 0x56, 0x45, 0xff, 0x62, 0xab, 0xfe, 0x8b, 0x13, 0xfe, 0xd4, 0xc7, 0xff, 0x51, 0x5f, 0xfc, 0x27, 0x7f, 0xfe, 0x56, 0x2c, 0xfe, 0xcd, 0x52, 0xfb, 0xe8, 0x0f, 0xfe, 0x29, 0x99, 0xfe, 0xbc, 0xb5, 0xff, 0x2f, 0xa4, 0x00, 0x3f, 0x36, 0x00, 0x80, 0x48, 0xff, 0xc9, 0x03, 0x27, 0x30, 0xfa, 0x24, 0x43, 0x2c, 0x03, 0x49, 0x34, 0x0a, 0x3a, 0x36, 0xfd, 0xa5, 0xe4, 0xfc, 0x3b, 0xc1, 0x03, 0xd4, 0x5c, 0xfa, 0x17, 0x2a, 0xef, 0x97, 0x90, 0xf8, 0x52, 0x3f, 0x09, 0xa6, 0x64, 0xff, 0xd8, 0x32, 0xff, 0x5d, 0x89, 0xf9, 0x83, 0x81, 0xf1, 0x0d, 0xa2, 0xfe, 0x09, 0xdd, 0x03, 0x8f, 0x00, 0x00, 0x7a, 0x2e, 0x00, 0xb8, 0x22, 0xff, 0x20, 0xe7, 0xfd, 0x54, 0x75, 0xff, 0x72, 0x33, 0xfc, 0xb4, 0xd2, 0xfd, 0xb8, 0xed, 0xfe, 0xf5, 0xf1, 0xfb, 0x50, 0x16, 0xfe, 0xba, 0x41, 0xff, 0x8f, 0x45, 0xff, 0x3f, 0x77, 0x00, 0xca, 0x37, 0x00, 0x5b, 0x33, 0xff, 0x81, 0x4f, 0x25, 0x45, 0x21, 0x24, 0x48, 0xfe, 0x01, 0xf0, 0x52, 0x0a, 0x44, 0x4d, 0xff, 0x50, 0x76, 0xfd, 0x06, 0xcb, 0x01, 0x72, 0xcd, 0xf9, 0x17, 0xe6, 0xf3, 0x25, 0x24, 0xf8, 0x70, 0xc8, 0x07, 0x55, 0x3b, 0x00, 0xb3, 0xf3, 0xfb, 0x27, 0xb7, 0xfc, 0x28, 0x54, 0xf4, 0x54, 0x76, 0xfa, 0x8b, 0x16, 0x03, 0xd9, 0x7e, 0x00, 0xbe, 0xc4, 0xff, 0xb7, 0x7a, 0x00, 0x73, 0x6c, 0xfe, 0xba, 0x0b, 0xfe, 0x73, 0x65, 0xfc, 0x25, 0xf6, 0xfd, 0x60, 0xb1, 0xff, 0x95, 0x46, 0xfd, 0xb6, 0x43, 0xfd, 0x93, 0x2d, 0xff, 0x59, 0x77, 0xff, 0x73, 0x36, 0x00, 0x48, 0x33, 0x00, 0x3e, 0x4e, 0xff, 0x7c, 0x5b, 0x23, 0x14, 0xb0, 0x21, 0xe1, 0xde, 0x01, 0x8e, 0x54, 0x0b, 0x68, 0x89, 0x00, 0xa2, 0x5c, 0xfd, 0xe4, 0x76, 0x01, 0x98, 0x2e, 0xfa, 0x25, 0x49, 0xf5, 0x0d, 0xeb, 0xf8, 0x5e, 0xd6, 0x06, 0xfb, 0x1a, 0x01, 0xa1, 0x0b, 0xfb, 0xdf, 0x4c, 0xfd, 0x3f, 0xf7, 0xf7, 0x10, 0x7e, 0xf8, 0x59, 0x2f, 0x01, 0x46, 0xc1, 0x00, 0x6f, 0xf9, 0xfe, 0x89, 0x5c, 0x00, 0xee, 0xef, 0xfe, 0xa2, 0x6b, 0xfe, 0xe8, 0xac, 0xfc, 0x3a, 0xfe, 0xfd, 0xae, 0x0f, 0x00, 0x12, 0x12, 0xfe, 0x9f, 0xb4, 0xfc, 0x96, 0x1d, 0xff, 0xf2, 0xcd, 0xff, 0x0d, 0xf7, 0xff, 0x6a, 0x5d, 0x00, 0x26, 0x52, 0xff, 0xf5, 0x5b, 0x20, 0xab, 0xdd, 0x1e, 0xc4, 0x9e, 0x02, 0x94, 0x45, 0x0c, 0xe5, 0x07, 0x01, 0x87, 0xe6, 0xfc, 0x54, 0x32, 0x02, 0x18, 0x20, 0xfc, 0x8a, 0x14, 0xf6, 0x80, 0x0f, 0xf8, 0xa5, 0x28, 0x05, 0x6a, 0x6e, 0x02, 0xff, 0x7e, 0xfb, 0xe7, 0x3e, 0xfd, 0xb7, 0xd6, 0xfa, 0x14, 0x96, 0xf8, 0xb8, 0x1a, 0x00, 0xe1, 0xc8, 0x00, 0x9d, 0xfc, 0xfd, 0x72, 0x5b, 0xff, 0xeb, 0x8c, 0xfe, 0x19, 0xcd, 0xfe, 0xfd, 0x34, 0xfe, 0xc1, 0x20, 0xfe, 0x4b, 0xd8, 0xfe, 0x1f, 0x65, 0xfe, 0x3e, 0x8d, 0xfd, 0x91, 0x8b, 0xff, 0xdc, 0xdc, 0xff, 0x83, 0xc4, 0xff, 0x80, 0x60, 0x00, 0x43, 0x2c, 0xff, 0x26, 0x7d, 0x1d, 0xb4, 0xb6, 0x19, 0x4a, 0x10, 0x02, 0x53, 0x87, 0x0f, 0x32, 0x22, 0x01, 0x21, 0x6c, 0xfb, 0xf3, 0x86, 0x03, 0x78, 0xec, 0xfe, 0xf5, 0x71, 0xf7, 0x67, 0x68, 0xf6, 0xc1, 0x01, 0x03, 0x87, 0x88, 0x03, 0xe1, 0xe0, 0xfc, 0xa5, 0x4b, 0xff, 0xc2, 0x3b, 0xfc, 0xae, 0xed, 0xf6, 0x15, 0x72, 0x00, 0xc4, 0x98, 0x01, 0x97, 0x18, 0xfd, 0x46, 0x17, 0xff, 0x2e, 0xc1, 0xfd, 0xa1, 0x0b, 0xfe, 0x06, 0xf7, 0xfe, 0x2e, 0x62, 0xfe, 0xe8, 0x39, 0xff, 0x3e, 0xfd, 0xfe, 0x43, 0xb4, 0xfd, 0x08, 0x8a, 0x00, 0x7b, 0x8c, 0x00, 0x49, 0x84, 0xff, 0xff, 0xf7, 0xff, 0xcb, 0x29, 0xff, 0x69, 0xb1, 0x19, 0x6e, 0xb7, 0x18, 0x9e, 0xea, 0x04, 0xe2, 0x23, 0x0e, 0x46, 0x8f, 0x00, 0xad, 0x77, 0xfb, 0x2d, 0x03, 0x03, 0x16, 0xb9, 0xfd, 0xdf, 0x31, 0xf9, 0xfa, 0x00, 0xf9, 0xa5, 0x29, 0x00, 0x0a, 0x9d, 0x01, 0xd7, 0x47, 0xfe, 0x8d, 0x23, 0x00, 0xf5, 0x1d, 0xfe, 0x17, 0x99, 0xf8, 0x1b, 0xb1, 0xfd, 0x4e, 0x50, 0x01, 0x75, 0xc8, 0xff, 0xf4, 0x4d, 0xff, 0x4e, 0xa0, 0xfd, 0x25, 0x79, 0xfe, 0x67, 0x1f, 0xff, 0xba, 0x01, 0xff, 0xfe, 0x4d, 0xff, 0xa4, 0xde, 0xfe, 0x56, 0x36, 0xfe, 0x5a, 0xa2, 0xff, 0xd5, 0x19, 0x00, 0xda, 0x76, 0xff, 0x4a, 0xf9, 0xff, 0x31, 0x7e, 0xff, 0x24, 0x44, 0x17, 0x77, 0xc7, 0x16, 0x82, 0xd3, 0x04, 0xa7, 0x60, 0x0c, 0xcc, 0x46, 0x01, 0xeb, 0xcd, 0xfd, 0x4c, 0xbf, 0x02, 0x9e, 0x4e, 0xfd, 0xfe, 0xf8, 0xf9, 0xb9, 0xfe, 0xf9, 0x6a, 0xf2, 0xff, 0xd8, 0xa3, 0x00, 0xe9, 0x82, 0xfe, 0x14, 0xc5, 0xff, 0x32, 0xfb, 0xfe, 0x19, 0xa1, 0xfa, 0x65, 0x7a, 0xfd, 0x24, 0x8f, 0x01, 0x9b, 0x23, 0x00, 0xdc, 0xb5, 0xfe, 0xdf, 0x0a, 0xfe, 0x5b, 0x1f, 0xff, 0x44, 0x21, 0xff, 0x6e, 0xc1, 0xfe, 0x74, 0x9a, 0xfe, 0xf6, 0xc1, 0xfe, 0x23, 0xf6, 0xfe, 0x4c, 0x61, 0xff, 0x44, 0x68, 0xff, 0x71, 0x80, 0xff, 0x24, 0x3f, 0x00, 0x48, 0xa9, 0xff, 0xb0, 0x61, 0x15, 0x89, 0xff, 0x14, 0xa9, 0x71, 0x04, 0x14, 0x34, 0x0a, 0xf7, 0x1a, 0x02, 0xbf, 0xd2, 0xff, 0xc8, 0x15, 0x02, 0xd9, 0x19, 0xfd, 0x5d, 0x48, 0xfa, 0xaa, 0x0c, 0xfb, 0xe9, 0x20, 0x00, 0x83, 0xf1, 0xff, 0x42, 0xbf, 0xfe, 0x2e, 0x95, 0xff, 0x45, 0x65, 0xff, 0x83, 0xcd, 0xfb, 0xe9, 0x0e, 0xfe, 0x4d, 0xbe, 0x01, 0x31, 0x09, 0x00, 0x64, 0xb5, 0xfe, 0x60, 0x88, 0xfe, 0x15, 0x63, 0xff, 0x99, 0x01, 0xff, 0x10, 0x98, 0xfe, 0xd5, 0x2d, 0xfe, 0xd4, 0x8e, 0xfe, 0x36, 0xf9, 0xfe, 0x74, 0x29, 0xff, 0x9f, 0x80, 0xff, 0x59, 0xbf, 0xff, 0x1e, 0x38, 0x00, 0xf8, 0xc2, 0xff, 0x18, 0x52, 0x13, 0xbd, 0x6f, 0x13, 0xb2, 0xba, 0x03, 0xae, 0x9d, 0x08, 0xa0, 0x46, 0x03, 0x86, 0x8f, 0x00, 0x16, 0xa1, 0x01, 0x99, 0x36, 0xfd, 0xe1, 0x9d, 0xfa, 0x03, 0x5d, 0xfc, 0x36, 0x46, 0x00, 0x79, 0x6d, 0xff, 0x03, 0x40, 0xff, 0x3b, 0xe4, 0xff, 0x3a, 0x71, 0xff, 0xd6, 0xbe, 0xfc, 0x91, 0xed, 0xfe, 0xda, 0xa0, 0x01, 0x61, 0xf5, 0xff, 0xad, 0xb8, 0xfe, 0xab, 0xc3, 0xfe, 0x96, 0xb4, 0xff, 0xbd, 0xec, 0xfe, 0x6f, 0x8c, 0xfe, 0x27, 0x30, 0xfe, 0xcc, 0xba, 0xfe, 0x62, 0x04, 0xff, 0x7a, 0x09, 0xff, 0x5f, 0xbc, 0xff, 0xb8, 0xff, 0xff, 0x03, 0x35, 0x00, 0x50, 0xb3, 0xff, 0x3d, 0xab, 0x11, 0xa8, 0x98, 0x11, 0xa5, 0x3c, 0x03, 0x03, 0x35, 0x08, 0x81, 0x5d, 0x03, 0x5d, 0x69, 0x00, 0x59, 0x7b, 0x01, 0xc4, 0x6a, 0xfd, 0x28, 0x27, 0xfb, 0x01, 0x62, 0xfd, 0x98, 0x3b, 0x00, 0x27, 0xfb, 0xfe, 0xf9, 0xcd, 0xff, 0xaa, 0x33, 0x00, 0x52, 0x6f, 0xff, 0x86, 0xa8, 0xfd, 0x61, 0x49, 0xff, 0xb1, 0xe0, 0x00, 0xc9, 0xba, 0xff, 0xd9, 0xfa, 0xfe, 0x6c, 0xfc, 0xfe, 0x57, 0xad, 0xff, 0x01, 0xe8, 0xfe, 0x0d, 0xe1, 0xfe, 0x11, 0xa4, 0xfe, 0xf2, 0xf8, 0xfe, 0x22, 0xe1, 0xfe, 0x34, 0xe2, 0xfe, 0x22, 0xb4, 0xff, 0xf2, 0x08, 0x00, 0xf9, 0x2f, 0x00, 0x61, 0x9a, 0xff, 0x3c, 0xa4, 0x0f, 0xdf, 0xfb, 0x0f, 0x8c, 0x30, 0x03, 0x57, 0x5e, 0x07, 0xbf, 0xf6, 0x02, 0x2c, 0xca, 0x00, 0xd9, 0xb2, 0x01, 0x62, 0x8d, 0xfd, 0x97, 0xa1, 0xfb, 0xde, 0x32, 0xfe, 0x2d, 0x7b, 0x00, 0x39, 0x06, 0xff, 0xfd, 0x77, 0x00, 0x43, 0x6d, 0x00, 0xb9, 0x76, 0xff, 0xb7, 0x80, 0xfe, 0x90, 0x3e, 0xff, 0x22, 0x45, 0x00, 0xda, 0xd3, 0xff, 0xaa, 0x32, 0xff, 0x29, 0x13, 0xff, 0xe9, 0xdd, 0xff, 0xda, 0x53, 0xff, 0x8c, 0x54, 0xff, 0x46, 0xd8, 0xfe, 0xe7, 0xd2, 0xfe, 0xd7, 0xce, 0xfe, 0x96, 0xfd, 0xfe, 0x15, 0xc3, 0xff, 0x29, 0xef, 0xff, 0xa3, 0x13, 0x00, 0x07, 0xb7, 0xff, 0x82, 0xac, 0x0d, 0x91, 0xfe, 0x0d, 0x63, 0x6c, 0x03, 0x52, 0xb1, 0x06, 0xaf, 0x89, 0x02, 0x28, 0x56, 0x01, 0x45, 0xdd, 0x01, 0x38, 0xd6, 0xfd, 0xb4, 0x30, 0xfc, 0x41, 0x20, 0xff, 0xb7, 0x3b, 0x01, 0x21, 0x64, 0xff, 0x35, 0xe6, 0x00, 0xdf, 0x90, 0x00, 0x29, 0xa1, 0xff, 0x5f, 0x39, 0xff, 0x19, 0x63, 0xff, 0xbf, 0xd4, 0xff, 0x01, 0xc8, 0xff, 0x2f, 0x75, 0xff, 0xdc, 0x78, 0xff, 0x32, 0x2e, 0x00, 0xd6, 0x60, 0xff, 0xef, 0x78, 0xff, 0xa4, 0x0a, 0xff, 0xaf, 0xdd, 0xfe, 0xc9, 0x09, 0xff, 0xe4, 0x2d, 0xff, 0x38, 0xb2, 0xff, 0xb2, 0xea, 0xff, 0x69, 0x0f, 0x00, 0x08, 0xca, 0xff, 0xe9, 0x3b, 0x0c, 0x6e, 0x4d, 0x0c, 0x82, 0x22, 0x03, 0x9a, 0xdf, 0x05, 0xa6, 0x0d, 0x02, 0xaa, 0x87, 0x01, 0xe3, 0x44, 0x02, 0x1f, 0x50, 0xfe, 0xd7, 0x1b, 0xfd, 0x6b, 0x76, 0x00, 0x9e, 0x3f, 0x02, 0xb8, 0x02, 0x00, 0xa8, 0x01, 0x01, 0xe2, 0xb1, 0x00, 0x01, 0xd4, 0xff, 0x5c, 0x8c, 0xff, 0x96, 0x4b, 0xff, 0xa8, 0x7b, 0xff, 0x0e, 0x15, 0x00, 0x9b, 0xde, 0xff, 0x97, 0x75, 0xff, 0x25, 0x18, 0x00, 0x8f, 0x8d, 0xff, 0x7c, 0xc0, 0xff, 0x65, 0x3f, 0xff, 0xd3, 0xeb, 0xfe, 0x7e, 0x39, 0xff, 0xef, 0x55, 0xff, 0xe3, 0xbf, 0xff, 0xf1, 0x03, 0x00, 0xaa, 0x0d, 0x00, 0x2f, 0xa7, 0xff, 0xb7, 0xab, 0x0b, 0x24, 0x4a, 0x0b, 0x03, 0x53, 0x02, 0x59, 0xf9, 0x04, 0x3d, 0xc7, 0x01, 0x20, 0xd0, 0x01, 0x2e, 0xf3, 0x02, 0x91, 0xa4, 0xff, 0xc4, 0x1a, 0xfe, 0xa4, 0x47, 0x01, 0x9e, 0xfc, 0x02, 0x14, 0x5b, 0x00, 0x5f, 0xe6, 0x00, 0x99, 0x19, 0x00, 0x85, 0x74, 0xff, 0xc1, 0xb5, 0xff, 0x6d, 0xaa, 0xff, 0x46, 0xc0, 0xff, 0x4d, 0x21, 0x00, 0x4f, 0xd5, 0xff, 0xe1, 0x74, 0xff, 0x85, 0x19, 0x00, 0x7e, 0xa6, 0xff, 0xdb, 0xe6, 0xff, 0x44, 0x5c, 0xff, 0x7d, 0x10, 0xff, 0xcd, 0x7d, 0xff, 0xf9, 0xaa, 0xff, 0x72, 0xdf, 0xff, 0x4e, 0xf1, 0xff, 0x77, 0xc4, 0xff, 0x6d, 0x3f, 0xff, 0x3a, 0x16, 0x0b, 0x41, 0xa0, 0x0a, 0x46, 0xe7, 0x01, 0x99, 0x32, 0x05, 0xf5, 0x8b, 0x02, 0xcf, 0x5b, 0x02, 0x3f, 0x5e, 0x03, 0x61, 0x35, 0x00, 0x59, 0xe5, 0xfe, 0xdb, 0xb1, 0x01, 0x9f, 0xd5, 0x02, 0xde, 0xe2, 0xff, 0xcc, 0x19, 0x00, 0x0b, 0x79, 0xff, 0xb0, 0xa5, 0xff, 0x77, 0x4f, 0x00, 0xd1, 0xe6, 0xff, 0xb5, 0x99, 0xff, 0x48, 0xc3, 0xff, 0x46, 0xb5, 0xff, 0x1a, 0x8f, 0xff, 0x6b, 0x2d, 0x00, 0xc7, 0xc0, 0xff, 0x11, 0x2d, 0x00, 0x0e, 0xba, 0xff, 0x70, 0x30, 0xff, 0xef, 0x7a, 0xff, 0xeb, 0x92, 0xff, 0xf6, 0xa8, 0xff, 0x2b, 0x9d, 0xff, 0x3a, 0x85, 0xff, 0x0c, 0x3f, 0xff, 0x12, 0x30, 0x0b, 0x82, 0x85, 0x0b, 0x6c, 0xf8, 0x02, 0x21, 0xca, 0x05, 0x01, 0xc9, 0x02, 0xec, 0x9b, 0x02, 0xb5, 0x55, 0x03, 0x45, 0x96, 0xff, 0xc3, 0x19, 0xfe, 0x6a, 0x1c, 0x01, 0xef, 0x76, 0x02, 0x79, 0xb2, 0xff, 0x27, 0xfa, 0xff, 0xc1, 0x56, 0xff, 0xd1, 0xc3, 0xff, 0x45, 0x5e, 0x00, 0xd9, 0x9f, 0xff, 0x82, 0x66, 0xff, 0x31, 0xd5, 0xff, 0x6b, 0xc6, 0xff, 0x37, 0xa2, 0xff, 0x94, 0x5e, 0x00, 0x93, 0xd0, 0xff, 0xc3, 0x3a, 0x00, 0x8e, 0xf0, 0xff, 0xc9, 0x3f, 0xff, 0xbc, 0x4c, 0xff, 0x22, 0x3b, 0xff, 0x66, 0x37, 0xff, 0x52, 0x74, 0xff, 0x61, 0x9d, 0xff, 0xc9, 0x68, 0xff, 0x0d, 0xae, 0x0b, 0x9c, 0x19, 0x0c, 0xa8, 0x4f, 0x03, 0x65, 0xb3, 0x05, 0xb5, 0x8d, 0x02, 0x76, 0xb2, 0x02, 0x66, 0x79, 0x03, 0xac, 0x6d, 0xff, 0x54, 0x77, 0xfd, 0xbd, 0x21, 0x00, 0xce, 0xea, 0x01, 0x05, 0xe1, 0xff, 0x2a, 0x28, 0x00, 0x10, 0x4f, 0xff, 0x80, 0xc5, 0xff, 0x7f, 0x84, 0x00, 0x9b, 0xeb, 0xff, 0x19, 0x98, 0xff, 0x30, 0xcc, 0xff, 0xe1, 0xac, 0xff, 0xa7, 0xa5, 0xff, 0xd9, 0x33, 0x00, 0xc5, 0x7d, 0xff, 0x09, 0x25, 0x00, 0xca, 0x3e, 0x00, 0x8f, 0xac, 0xff, 0xd8, 0x53, 0xff, 0x10, 0xf7, 0xfe, 0x08, 0x0a, 0xff, 0x45, 0x56, 0xff, 0x32, 0x94, 0xff, 0x89, 0x7e, 0xff, 0x8e, 0xd1, 0x0b, 0x33, 0x16, 0x0c, 0x2b, 0x9f, 0x02, 0x5b, 0x12, 0x05, 0xea, 0x44, 0x02, 0x81, 0x9a, 0x02, 0xdf, 0x8a, 0x03, 0xfb, 0x6c, 0xff, 0xa3, 0x43, 0xfd, 0xd2, 0x81, 0x00, 0xca, 0x99, 0x02, 0x2d, 0x98, 0xff, 0x6a, 0x85, 0xff, 0xf4, 0xdf, 0xfe, 0x94, 0x73, 0xff, 0x9b, 0xe7, 0x00, 0x71, 0xbe, 0x00, 0x95, 0x14, 0x00, 0xaa, 0x07, 0x00, 0x97, 0xbb, 0xff, 0x5d, 0x6a, 0xff, 0x41, 0xf1, 0xff, 0xea, 0x59, 0xff, 0x42, 0xdc, 0xff, 0x7d, 0xc7, 0xff, 0x6e, 0xc9, 0xff, 0xba, 0x18, 0x00, 0x1e, 0x90, 0xff, 0x57, 0x28, 0xff, 0xd1, 0x31, 0xff, 0x2a, 0x65, 0xff, 0x97, 0x52, 0xff, 0x7d, 0x8c, 0x0c, 0xd2, 0xf1, 0x0c, 0x46, 0x7b, 0x02, 0x76, 0x6f, 0x04, 0xff, 0x4b, 0x01, 0xb2, 0xed, 0x01, 0x12, 0x2a, 0x03, 0x6b, 0x16, 0xff, 0x49, 0xb5, 0xfc, 0x5f, 0xff, 0xff, 0xc1, 0x25, 0x03, 0xb5, 0x7b, 0x00, 0x02, 0xe3, 0xff, 0x60, 0x7a, 0xfe, 0x41, 0xdc, 0xfe, 0xfb, 0x8f, 0x00, 0xa3, 0xa0, 0x00, 0x84, 0x7f, 0x00, 0xba, 0xb2, 0x00, 0xa1, 0x1e, 0x00, 0xaf, 0x9b, 0xff, 0x59, 0x22, 0x00, 0xba, 0x4d, 0xff, 0xd1, 0x98, 0xff, 0x69, 0x82, 0xff, 0x21, 0x3f, 0xff, 0xbb, 0xcf, 0xff, 0xd4, 0x20, 0x00, 0x08, 0x19, 0x00, 0xbf, 0xe3, 0xff, 0x02, 0x7e, 0xff, 0x2d, 0xfa, 0xfe, 0x79, 0xa7, 0x0d, 0x68, 0x5f, 0x0e, 0xaf, 0xad, 0x02, 0xb2, 0x88, 0x04, 0x3d, 0x07, 0x01, 0xf0, 0x82, 0x01, 0xce, 0x90, 0x02, 0xfc, 0xf6, 0xfd, 0x5d, 0x4d, 0xfb, 0x9e, 0xce, 0xfe, 0x1e, 0x5c, 0x03, 0xd2, 0xe1, 0x00, 0xec, 0xcc, 0xff, 0xeb, 0xaa, 0xfe, 0x3a, 0x28, 0xff, 0xa7, 0x95, 0x00, 0xf1, 0x9c, 0x00, 0xa1, 0x32, 0x00, 0xb5, 0x55, 0x00, 0x8d, 0x79, 0x00, 0x1e, 0xf9, 0xff, 0xf4, 0x51, 0x00, 0x04, 0x9d, 0xff, 0x8c, 0xbd, 0xff, 0x9d, 0x81, 0xff, 0xcc, 0x16, 0xff, 0x51, 0x76, 0xff, 0x54, 0xde, 0xff, 0x04, 0x43, 0x00, 0x05, 0x95, 0x00, 0x9c, 0x2f, 0x00, 0x53, 0x47, 0xff, 0x71, 0x31, 0x0f, 0x68, 0xfd, 0x0f, 0x60, 0xbf, 0x02, 0x47, 0xec, 0x04, 0xb5, 0xfd, 0x00, 0xd1, 0x5a, 0x01, 0x76, 0x55, 0x02, 0x6a, 0x08, 0xfd, 0xba, 0xdf, 0xf9, 0x20, 0xa5, 0xfd, 0x28, 0x90, 0x03, 0x6f, 0xbd, 0x00, 0x1c, 0x06, 0xff, 0x3a, 0x2a, 0xfe, 0x21, 0xfd, 0xfe, 0x99, 0xed, 0x00, 0x94, 0x0b, 0x01, 0x12, 0x43, 0x00, 0xd3, 0x84, 0x00, 0xe5, 0x6a, 0x00, 0x32, 0xb3, 0xff, 0xbd, 0x77, 0x00, 0x04, 0x91, 0xff, 0x75, 0xd8, 0xff, 0xaa, 0xc4, 0xff, 0xf1, 0x38, 0xff, 0xc4, 0x84, 0xff, 0x98, 0x0e, 0x00, 0xdc, 0x23, 0x00, 0x06, 0x17, 0x00, 0x9a, 0x55, 0x00, 0x27, 0xf2, 0xff, 0xa5, 0x40, 0x11, 0x6c, 0x7d, 0x11, 0xa2, 0x6e, 0x02, 0x76, 0x8d, 0x05, 0x08, 0xef, 0x00, 0xdc, 0x79, 0x01, 0x88, 0x6e, 0x02, 0x41, 0x35, 0xfc, 0xbe, 0x6d, 0xf8, 0xcc, 0xe3, 0xfc, 0xfa, 0x4a, 0x04, 0x44, 0x8a, 0x00, 0x0f, 0x06, 0xfe, 0xf5, 0x5d, 0xfd, 0xdf, 0x72, 0xfe, 0x2b, 0x9b, 0x00, 0x8e, 0xfd, 0x00, 0x13, 0x31, 0x00, 0xcd, 0xb1, 0x00, 0x73, 0xde, 0x00, 0xba, 0xab, 0xff, 0xc9, 0x46, 0x00, 0x90, 0x8a, 0xff, 0x55, 0xcd, 0xff, 0xe6, 0xc6, 0xff, 0x95, 0x53, 0xff, 0x78, 0xc6, 0xff, 0xbf, 0x3a, 0x00, 0xae, 0xf8, 0xff, 0x3c, 0x0a, 0x00, 0x3c, 0x12, 0x00, 0xbf, 0xc5, 0xff, 0x9c, 0x39, 0x14, 0xde, 0x4e, 0x13, 0x6e, 0x66, 0x01, 0x62, 0x3e, 0x06, 0x8b, 0xbb, 0x00, 0x17, 0x80, 0x01, 0xf7, 0x69, 0x02, 0x06, 0x07, 0xfb, 0xee, 0x20, 0xf7, 0xad, 0xa9, 0xfc, 0xde, 0x44, 0x05, 0x5a, 0x0e, 0x00, 0xad, 0x18, 0xfd, 0x7d, 0xb5, 0xfc, 0xd3, 0x06, 0xfe, 0xdf, 0x3e, 0x00, 0xda, 0x97, 0x00, 0x1e, 0xc1, 0xff, 0x28, 0x83, 0x00, 0x79, 0xac, 0x00, 0xb6, 0x55, 0xff, 0x79, 0x70, 0x00, 0xb8, 0xa5, 0xff, 0x4c, 0xcc, 0xff, 0x95, 0x9b, 0xff, 0xc6, 0x33, 0xff, 0xbd, 0x9c, 0xff, 0x3f, 0x3c, 0x00, 0x8a, 0x0f, 0x00, 0xc8, 0x13, 0x00, 0x07, 0x34, 0x00, 0xfc, 0xaa, 0xff, 0xaf, 0x43, 0x17, 0x15, 0x7c, 0x15, 0xaa, 0x10, 0x00, 0x81, 0xd8, 0x06, 0x0d, 0xb8, 0x00, 0x54, 0x2b, 0x01, 0x1c, 0x66, 0x02, 0xca, 0xa2, 0xf9, 0xa6, 0x1e, 0xf6, 0x14, 0xf4, 0xfc, 0x7c, 0x13, 0x06, 0x95, 0xa4, 0xff, 0x8e, 0x69, 0xfc, 0x2f, 0x0b, 0xfc, 0xe6, 0xde, 0xfd, 0x9f, 0x2a, 0x00, 0xa7, 0x2c, 0x00, 0xf7, 0x92, 0xff, 0xf4, 0x39, 0x00, 0xf5, 0x63, 0x00, 0x2d, 0xf9, 0xfe, 0x67, 0x58, 0x00, 0xb9, 0x8b, 0xff, 0x92, 0xb9, 0xff, 0xe0, 0x5c, 0xff, 0xb7, 0xe9, 0xfe, 0xa2, 0x77, 0xff, 0x34, 0x16, 0x00, 0xcb, 0x20, 0x00, 0x99, 0x43, 0x00, 0x9b, 0x8b, 0x00, 0x34, 0xf2, 0xff, 0xe6, 0xd4, 0x19, 0x7e, 0xed, 0x17, 0x35, 0x1b, 0xff, 0x69, 0xfe, 0x06, 0x0e, 0xdc, 0x00, 0x71, 0xdf, 0x00, 0xc5, 0x6f, 0x02, 0xf7, 0x59, 0xf8, 0x26, 0x3a, 0xf5, 0xb7, 0x46, 0xfd, 0xad, 0x67, 0x06, 0x0c, 0x5d, 0xff, 0xab, 0x22, 0xfc, 0xc7, 0x8c, 0xfb, 0x09, 0xb7, 0xfd, 0x88, 0x19, 0x00, 0x55, 0xfe, 0xff, 0xc8, 0x76, 0xff, 0x77, 0x18, 0x00, 0x82, 0x76, 0x00, 0xb5, 0xc9, 0xfe, 0xf6, 0xf7, 0xff, 0xf2, 0x14, 0xff, 0xe6, 0x9f, 0xff, 0x03, 0x16, 0xff, 0x66, 0xad, 0xfe, 0x29, 0x7a, 0xff, 0xd7, 0x0a, 0x00, 0xf2, 0x27, 0x00, 0x05, 0x4f, 0x00, 0x65, 0xa8, 0x00, 0x3c, 0xd9, 0xff, 0xe9, 0x98, 0x1b, 0xbc, 0x99, 0x1a, 0xa4, 0x58, 0xff, 0x3a, 0xd0, 0x06, 0x4d, 0x7b, 0x00, 0x53, 0x53, 0x00, 0x85, 0xb9, 0x02, 0xac, 0x4d, 0xf7, 0x83, 0xd0, 0xf4, 0x9a, 0x2e, 0xfd, 0x34, 0x37, 0x05, 0xc3, 0x5d, 0xff, 0x3b, 0xca, 0xfc, 0xba, 0xfa, 0xfa, 0x97, 0x29, 0xfd, 0x27, 0xcb, 0xff, 0x19, 0x10, 0x00, 0xd8, 0x59, 0x00, 0xf6, 0xbb, 0xff, 0x46, 0xf9, 0xff, 0xea, 0xbd, 0xfe, 0x8d, 0xc0, 0xff, 0x55, 0xa9, 0xfe, 0x76, 0x38, 0xff, 0xd5, 0xcb, 0xfe, 0xb1, 0x87, 0xfe, 0x46, 0x74, 0xff, 0xb1, 0xfa, 0xff, 0x5c, 0x50, 0x00, 0xca, 0x1e, 0x00, 0x61, 0x7c, 0x00, 0x70, 0xaa, 0xff, 0xa9, 0x23, 0x1c, 0x09, 0xaf, 0x1c, 0x75, 0xb2, 0x00, 0x25, 0x16, 0x07, 0xf0, 0x80, 0x00, 0x07, 0x07, 0xff, 0x9c, 0xcf, 0x02, 0xe6, 0x61, 0xf7, 0x7e, 0x23, 0xf5, 0x87, 0x34, 0xfd, 0x76, 0xee, 0x02, 0x63, 0xda, 0xfe, 0x09, 0xf0, 0xfd, 0x8a, 0x8e, 0xfb, 0x9c, 0xd3, 0xfc, 0x64, 0x5f, 0xff, 0x48, 0xc5, 0xff, 0xdb, 0xf3, 0x00, 0xf5, 0xf8, 0xff, 0x16, 0x7d, 0xff, 0x83, 0x9d, 0xfe, 0x21, 0x9c, 0xff, 0x5e, 0xd2, 0xfe, 0x2a, 0x3b, 0xff, 0x2e, 0xa7, 0xfe, 0x46, 0x85, 0xfe, 0xec, 0x43, 0xff, 0x2f, 0x6b, 0xff, 0xd4, 0x36, 0x00, 0x88, 0x38, 0x00, 0x1e, 0x81, 0x00, 0xc9, 0xa0, 0xff, 0xeb, 0x9b, 0x1c, 0x7e, 0xf8, 0x1d, 0xf3, 0x4e, 0x02, 0x82, 0x21, 0x08, 0x31, 0xfa, 0x00, 0x7b, 0xb6, 0xfd, 0x8b, 0xc7, 0x01, 0x2e, 0x46, 0xf7, 0xe9, 0xc4, 0xf5, 0x9a, 0x3d, 0xfe, 0xd1, 0x66, 0x00, 0x1e, 0x21, 0xfd, 0xe1, 0x01, 0xff, 0x53, 0xdb, 0xfc, 0x05, 0x95, 0xfd, 0x57, 0x9d, 0xfe, 0xf3, 0xc4, 0xfe, 0x19, 0x3e, 0x01, 0xa4, 0x41, 0x00, 0xde, 0x45, 0xff, 0xea, 0xe2, 0xfe, 0xbd, 0x94, 0xff, 0x43, 0xbe, 0xfe, 0x81, 0x4f, 0xff, 0x20, 0x77, 0xfe, 0xde, 0x65, 0xfe, 0xc7, 0x1d, 0xff, 0x8d, 0xe0, 0xfe, 0xce, 0xea, 0xff, 0x21, 0x23, 0x00, 0x77, 0x68, 0x00, 0xfa, 0x9c, 0xff, 0x41, 0x6c, 0x1d, 0x8c, 0x7f, 0x1e, 0xaf, 0x04, 0x03, 0x23, 0xb8, 0x09, 0x31, 0xdc, 0x01, 0x32, 0x01, 0xfd, 0xd8, 0x71, 0x00, 0xe4, 0x5f, 0xf6, 0x96, 0x8f, 0xf6, 0xac, 0xfd, 0xff, 0x41, 0x5a, 0xfe, 0x65, 0x11, 0xfb, 0x2a, 0x9b, 0xff, 0xa7, 0x1b, 0xfe, 0x6c, 0xd3, 0xfe, 0x6e, 0x3f, 0xfe, 0x86, 0x74, 0xfd, 0x01, 0x09, 0x01, 0xc8, 0xce, 0x00, 0x8f, 0x48, 0xff, 0xde, 0x2c, 0xff, 0xe7, 0xc7, 0xff, 0x77, 0xaa, 0xfe, 0xe2, 0x15, 0xff, 0x35, 0x13, 0xfe, 0x12, 0x2f, 0xfe, 0x1e, 0x07, 0xff, 0xa7, 0x7d, 0xfe, 0xb8, 0x87, 0xff, 0xcf, 0x11, 0x00, 0x00, 0x73, 0x00, 0x8c, 0xab, 0xff, 0xf4, 0x85, 0x1f, 0xc8, 0x33, 0x1e, 0x59, 0x22, 0x02, 0x17, 0xdc, 0x0b, 0xb3, 0x7e, 0x02, 0xfd, 0x92, 0xfc, 0x2b, 0x14, 0xff, 0x61, 0x71, 0xf5, 0xf2, 0x7c, 0xf7, 0xa0, 0x61, 0x02, 0xee, 0xb0, 0xfc, 0x86, 0xd9, 0xf7, 0xa1, 0xeb, 0xff, 0xb9, 0xdf, 0xfe, 0x89, 0x9b, 0x00, 0xa0, 0x96, 0xfe, 0x2d, 0x29, 0xfc, 0x18, 0xea, 0x00, 0x0c, 0x40, 0x01, 0xdf, 0xd5, 0xfe, 0xb1, 0x3d, 0xff, 0x5a, 0x11, 0x00, 0x66, 0x57, 0xfe, 0xae, 0x09, 0xff, 0xc2, 0x63, 0xfd, 0xa5, 0xcd, 0xfd, 0x46, 0x12, 0xff, 0xa1, 0x3c, 0xfe, 0x41, 0x2f, 0xff, 0x01, 0x00, 0x00, 0x78, 0x2f, 0x00, 0x72, 0x43, 0xff, 0x2f, 0x9b, 0x22, 0xcd, 0xea, 0x1d, 0x7d, 0xeb, 0xff, 0xbb, 0x99, 0x0d, 0x65, 0x4c, 0x02, 0xe1, 0x91, 0xfc, 0x71, 0x2e, 0xff, 0xf0, 0xf9, 0xf3, 0x3d, 0x8e, 0xf8, 0x0f, 0xa9, 0x05, 0x82, 0x01, 0xfc, 0x36, 0xf7, 0xf3, 0x60, 0x58, 0xff, 0x9d, 0xb2, 0xff, 0xf0, 0x00, 0x02, 0x56, 0xc9, 0xff, 0x02, 0x6d, 0xfb, 0xc9, 0x5c, 0x00, 0xe1, 0x9f, 0x01, 0x8b, 0x81, 0xfe, 0xce, 0x04, 0xff, 0x7d, 0x3c, 0x00, 0x38, 0xc0, 0xfd, 0x4f, 0xec, 0xfe, 0x6b, 0x23, 0xfd, 0xca, 0x86, 0xfd, 0x76, 0x3a, 0xff, 0x62, 0x21, 0xfe, 0x60, 0xcf, 0xfe, 0xd5, 0xf8, 0xff, 0xe0, 0x1e, 0x00, 0x3d, 0x0a, 0xff, 0x02, 0x88, 0x26, 0x31, 0x5f, 0x1f, 0x38, 0x1e, 0xfc, 0x0b, 0x0e, 0x0d, 0x57, 0xf1, 0x01, 0x3b, 0xd9, 0xfc, 0xa6, 0xa5, 0x00, 0x92, 0x0b, 0xf3, 0x60, 0x60, 0xf8, 0xb2, 0x60, 0x08, 0x47, 0x3e, 0xfd, 0x36, 0x38, 0xf1, 0xd7, 0xaf, 0xfd, 0xa0, 0xd7, 0xff, 0x3d, 0xfa, 0x02, 0x38, 0x13, 0x01, 0x38, 0xf0, 0xfa, 0x15, 0x9d, 0xff, 0xb4, 0x00, 0x02, 0x43, 0x3a, 0xfe, 0x33, 0x57, 0xfe, 0x3b, 0x97, 0x00, 0x64, 0x8e, 0xfd, 0x70, 0xb3, 0xfe, 0xf2, 0xb8, 0xfc, 0x00, 0x0c, 0xfd, 0xce, 0x72, 0xff, 0x55, 0x47, 0xfe, 0xcb, 0x79, 0xfe, 0xe0, 0xd5, 0xff, 0x39, 0x39, 0x00, 0x1c, 0xdb, 0xfe, 0x82, 0xd6, 0x2a, 0x16, 0x91, 0x22, 0x00, 0x07, 0xf7, 0x26, 0x69, 0x0a, 0xf9, 0x01, 0x01, 0x9c, 0x6d, 0xfd, 0xc4, 0x92, 0x04, 0xd1, 0x88, 0xf2, 0x06, 0x16, 0xf6, 0xb7, 0x1f, 0x0a, 0x55, 0x64, 0x00, 0x28, 0x25, 0xf0, 0x58, 0x76, 0xfb, 0xc8, 0x61, 0xff, 0xb4, 0x52, 0x03, 0x6f, 0x07, 0x02, 0xbe, 0x5c, 0xfa, 0x7d, 0x85, 0xfe, 0xb0, 0x49, 0x02, 0xa7, 0xa6, 0xfe, 0x46, 0xbf, 0xfd, 0xff, 0x93, 0x00, 0x3e, 0x73, 0xfd, 0xf7, 0xc9, 0xfe, 0xf6, 0xab, 0xfc, 0x7a, 0x5c, 0xfc, 0x7d, 0x97, 0xff, 0xfe, 0x7d, 0xfe, 0x7c, 0x3e, 0xfe, 0x74, 0xa0, 0xff, 0x60, 0x92, 0x00, 0x79, 0x12, 0xff, 0xa6, 0x33, 0x30, 0xf5, 0x9a, 0x23, 0xd4, 0x24, 0xf2, 0x14, 0x6a, 0x09, 0x50, 0xca, 0xfe, 0xed, 0xd2, 0xfe, 0x17, 0x5b, 0x07, 0xee, 0x82, 0xf1, 0xe8, 0x33, 0xf5, 0x93, 0xee, 0x0b, 0x1d, 0xbf, 0x03, 0x53, 0x3f, 0xef, 0x0e, 0xe7, 0xf8, 0x18, 0xd3, 0xfd, 0x3a, 0x30, 0x04, 0xea, 0xc2, 0x02, 0xd1, 0xeb, 0xf8, 0xc6, 0x57, 0xfd, 0xa0, 0xe1, 0x02, 0xaa, 0xd8, 0xfe, 0x83, 0xc5, 0xfc, 0xbc, 0xdd, 0x00, 0xce, 0x7e, 0xfd, 0xc1, 0x0b, 0xff, 0xf5, 0xaf, 0xfc, 0xd6, 0xd1, 0xfb, 0xda, 0x61, 0xff, 0x1b, 0x8f, 0xfe, 0x73, 0x71, 0xfe, 0xa1, 0xe8, 0xff, 0xb5, 0x8b, 0x00, 0xab, 0xb0, 0xfe, 0x9a, 0x81, 0x33, 0x27, 0x67, 0x24, 0xaa, 0x9f, 0xef, 0xce, 0x99, 0x08, 0xdf, 0x71, 0xfc, 0xf2, 0x32, 0x00, 0x19, 0x40, 0x09, 0xc5, 0x4b, 0xf1, 0xa4, 0xe4, 0xf3, 0x62, 0x73, 0x0c, 0x6d, 0x51, 0x07, 0xde, 0xd9, 0xee, 0xe5, 0x20, 0xf7, 0xce, 0xd5, 0xfb, 0x8a, 0x9b, 0x03, 0x76, 0x92, 0x03, 0xd3, 0xdb, 0xf8, 0x2e, 0x5f, 0xfc, 0x60, 0x5b, 0x02, 0x14, 0xcf, 0xfe, 0xb2, 0x5b, 0xfc, 0x71, 0x22, 0x01, 0x56, 0x49, 0xfd, 0x50, 0x64, 0xff, 0x3a, 0xbd, 0xfc, 0x3b, 0x38, 0xfb, 0xad, 0x69, 0xff, 0x91, 0x1f, 0xff, 0x29, 0xa9, 0xfe, 0xfe, 0xc4, 0xff, 0xb8, 0x4f, 0x00, 0xea, 0x7e, 0xfe, 0xfe, 0x32, 0x36, 0x2f, 0xa8, 0x25, 0x04, 0x27, 0xee, 0x18, 0x26, 0x07, 0xc9, 0x2d, 0xfa, 0x8a, 0xcb, 0x01, 0x6d, 0x14, 0x0b, 0x44, 0x7f, 0xf1, 0x24, 0xd4, 0xf1, 0x8d, 0xf9, 0x0b, 0xaf, 0xfa, 0x0a, 0xe2, 0xf1, 0xef, 0x50, 0xba, 0xf5, 0x77, 0x6d, 0xf8, 0x2f, 0xea, 0x02, 0x59, 0x76, 0x05, 0x0c, 0x20, 0xf9, 0x42, 0x5d, 0xfb, 0xd8, 0x9d, 0x01, 0x33, 0xac, 0xfe, 0x71, 0x59, 0xfc, 0xa0, 0x4a, 0x01, 0x7c, 0xe3, 0xfc, 0xcf, 0x68, 0xff, 0x65, 0xc1, 0xfc, 0xe1, 0x3e, 0xfb, 0xaf, 0xb1, 0xff, 0x9e, 0x85, 0xff, 0x06, 0xc2, 0xfe, 0xa0, 0xba, 0xff, 0x04, 0x28, 0x00, 0x8a, 0x49, 0xfe, 0x15, 0xf8, 0x37, 0x08, 0xb9, 0x26, 0x9b, 0x83, 0xee, 0xac, 0xae, 0x05, 0x45, 0x9b, 0xf8, 0xfb, 0x99, 0x02, 0xff, 0xb1, 0x0b, 0x13, 0xbb, 0xf2, 0xef, 0x73, 0xef, 0x2e, 0xce, 0x0a, 0xa5, 0x3d, 0x0e, 0x07, 0xec, 0xf1, 0xb8, 0x64, 0xf4, 0xd2, 0x3d, 0xf5, 0x6b, 0x33, 0x02, 0xe8, 0x44, 0x07, 0xaa, 0x44, 0xfa, 0xdd, 0x3d, 0xfa, 0xed, 0x1e, 0x01, 0xa1, 0x8f, 0xfe, 0x75, 0x67, 0xfc, 0x59, 0x25, 0x01, 0xb8, 0x22, 0xfc, 0xb9, 0x89, 0xff, 0x17, 0x3d, 0xfd, 0x2d, 0x60, 0xfb, 0xf2, 0x9d, 0xff, 0x10, 0xd2, 0xff, 0x9f, 0xca, 0xfe, 0x40, 0xf5, 0xff, 0xe1, 0xe6, 0xff, 0xbf, 0xf6, 0xfd, 0xf5, 0xcd, 0x38, 0xd8, 0xab, 0x27, 0x6e, 0xb1, 0xef, 0x68, 0x02, 0x05, 0xbc, 0x76, 0xf7, 0xcc, 0x84, 0x02, 0xed, 0x99, 0x0b, 0x9c, 0xca, 0xf3, 0x8e, 0x68, 0xed, 0x97, 0x52, 0x09, 0x46, 0x29, 0x10, 0xa9, 0xc2, 0xf4, 0x53, 0xb4, 0xf3, 0x48, 0x77, 0xf2, 0xbc, 0x90, 0x01, 0x86, 0x31, 0x08, 0xc6, 0x51, 0xfc, 0x45, 0x57, 0xf9, 0xf1, 0x6b, 0x00, 0x53, 0xd5, 0xfe, 0xe8, 0x0d, 0xfc, 0x3e, 0xa5, 0x00, 0x7b, 0xec, 0xfb, 0xd4, 0xdd, 0xff, 0xc3, 0x4c, 0xfd, 0x83, 0xc3, 0xfb, 0xca, 0x20, 0xff, 0x92, 0xce, 0xff, 0x6b, 0x1c, 0xff, 0x37, 0xd3, 0xff, 0xce, 0xa5, 0xff, 0xa1, 0xd8, 0xfd, 0xf7, 0x34, 0x38, 0xdc, 0xee, 0x28, 0xd2, 0xc0, 0xf1, 0x6a, 0x20, 0x05, 0xfa, 0x66, 0xf6, 0x87, 0x1a, 0x02, 0x73, 0x0d, 0x0b, 0x38, 0x3d, 0xf4, 0x2a, 0xf3, 0xeb, 0x74, 0xd6, 0x06, 0x03, 0x52, 0x11, 0xe3, 0x52, 0xf8, 0x1b, 0x8e, 0xf4, 0x93, 0x7c, 0xef, 0x3d, 0x2b, 0x00, 0xd5, 0x0b, 0x09, 0xe8, 0xc2, 0xfe, 0xca, 0x03, 0xf9, 0x74, 0x0f, 0xff, 0x25, 0x76, 0xff, 0x4f, 0x74, 0xfb, 0xff, 0x66, 0x00, 0x62, 0x41, 0xfc, 0x2c, 0x1a, 0x00, 0x8f, 0x54, 0xfd, 0xad, 0xb3, 0xfb, 0xc4, 0xaf, 0xfe, 0x55, 0xb1, 0xff, 0xc5, 0x40, 0xff, 0x33, 0x3e, 0xff, 0xf5, 0xe2, 0xff, 0x18, 0xe5, 0xfd, 0xc2, 0xfc, 0x36, 0xac, 0x9f, 0x29, 0x09, 0x14, 0xf5, 0x03, 0xfc, 0x05, 0x45, 0x89, 0xf5, 0xda, 0x9c, 0x01, 0xaa, 0x20, 0x0a, 0xaf, 0x6d, 0xf4, 0xeb, 0xac, 0xea, 0x2a, 0x4f, 0x04, 0x3f, 0x6a, 0x11, 0xa4, 0xd7, 0xfb, 0x4c, 0x78, 0xf7, 0xd0, 0xca, 0xec, 0xf6, 0xfd, 0xfd, 0x04, 0xd5, 0x09, 0x6f, 0xd0, 0x00, 0x19, 0xb5, 0xf9, 0x06, 0x89, 0xfd, 0xbc, 0xc6, 0xff, 0xdf, 0xa6, 0xfb, 0x17, 0x2d, 0x00, 0x21, 0xc2, 0xfc, 0xa3, 0x75, 0x00, 0xc7, 0x1b, 0xfd, 0x3a, 0x7a, 0xfb, 0x63, 0x82, 0xfe, 0xbb, 0x26, 0xff, 0xec, 0x77, 0xff, 0xde, 0xd9, 0xfe, 0x8d, 0x17, 0x00, 0x35, 0x5e, 0xfe, 0x73, 0x4c, 0x35, 0x7b, 0x7e, 0x29, 0xa0, 0x49, 0xf9, 0x3c, 0x86, 0x06, 0x7a, 0x95, 0xf5, 0xf3, 0xe6, 0x00, 0x97, 0xae, 0x08, 0x72, 0xc0, 0xf5, 0x06, 0xbf, 0xe8, 0x74, 0xd9, 0x01, 0x88, 0x6b, 0x10, 0x4e, 0x58, 0xfe, 0x60, 0x01, 0xfc, 0x5c, 0x4c, 0xeb, 0x9b, 0xb9, 0xfa, 0xac, 0x54, 0x0a, 0xd5, 0xd2, 0x01, 0x69, 0x0c, 0xfb, 0x4c, 0x24, 0xfd, 0x73, 0x4c, 0xff, 0xa7, 0xce, 0xfc, 0xd9, 0xd3, 0xff, 0xb8, 0x83, 0xfc, 0x1f, 0xf9, 0x00, 0x87, 0x33, 0xfd, 0x62, 0xf6, 0xfa, 0x1a, 0x59, 0xfe, 0x1f, 0x72, 0xfe, 0xd4, 0xa5, 0xff, 0xdc, 0x47, 0xff, 0x56, 0x3b, 0x00, 0x35, 0xfe, 0xfe, 0x9f, 0x25, 0x33, 0x54, 0x42, 0x29, 0x3a, 0x92, 0xfc, 0x46, 0x32, 0x06, 0xa8, 0x58, 0xf7, 0x7c, 0x80, 0x00, 0x7a, 0x65, 0x06, 0x45, 0x58, 0xf7, 0xaa, 0x5e, 0xe7, 0x21, 0x90, 0xff, 0x37, 0x3a, 0x0f, 0x26, 0x24, 0xff, 0x5f, 0x37, 0x00, 0xcc, 0xd4, 0xeb, 0xc8, 0x7a, 0xf6, 0xf7, 0x02, 0x0a, 0x2c, 0x63, 0x02, 0xcf, 0x6e, 0xfc, 0x8b, 0xea, 0xfd, 0xff, 0x92, 0xfe, 0xcb, 0x60, 0xfd, 0x3c, 0xdb, 0xff, 0x40, 0x38, 0xfc, 0xe1, 0xe3, 0x00, 0x6f, 0x14, 0xfd, 0x18, 0x79, 0xfa, 0x53, 0x8e, 0xfe, 0x00, 0xee, 0xfd, 0x8d, 0xfb, 0xff, 0x13, 0xf0, 0xff, 0x14, 0x40, 0x00, 0x42, 0x75, 0xff, 0x2c, 0xe3, 0x30, 0x09, 0xd0, 0x26, 0xe2, 0x4a, 0x00, 0x26, 0x37, 0x08, 0xda, 0x93, 0xf7, 0xae, 0x1a, 0x00, 0xf8, 0xa7, 0x04, 0xd2, 0xa4, 0xf8, 0x4c, 0x9f, 0xe7, 0x90, 0xf9, 0xfb, 0x28, 0x4f, 0x0e, 0x24, 0xca, 0xff, 0x0e, 0x3a, 0x03, 0x4f, 0x32, 0xee, 0x43, 0x43, 0xf1, 0x0e, 0x84, 0x08, 0x9e, 0xab, 0x03, 0xa8, 0xc6, 0xfd, 0x8d, 0xda, 0xfe, 0xd7, 0x4f, 0xfe, 0x3b, 0xf0, 0xfd, 0xc6, 0xcc, 0xff, 0x09, 0xcb, 0xfb, 0x5a, 0x23, 0x00, 0x8b, 0x53, 0xfd, 0x7d, 0x0e, 0xfa, 0xa3, 0xa9, 0xfe, 0x32, 0x4a, 0xfe, 0x5e, 0xfc, 0xff, 0xb9, 0xbc, 0x00, 0xcc, 0x68, 0x00, 0x96, 0x3c, 0xff, 0x41, 0x44, 0x2e, 0x8b, 0xed, 0x25, 0x51, 0xe7, 0x00, 0x56, 0x83, 0x0a, 0x97, 0x9e, 0xf8, 0x34, 0xc0, 0xfe, 0xda, 0xec, 0x04, 0xe9, 0x88, 0xf8, 0xe5, 0x3b, 0xe9, 0x9a, 0x3a, 0xf9, 0xb5, 0xff, 0x0d, 0x93, 0x93, 0xff, 0xf7, 0x0c, 0x03, 0xcc, 0xde, 0xf2, 0x0d, 0x46, 0xed, 0x16, 0x85, 0x05, 0x53, 0x62, 0x05, 0x1d, 0xcc, 0xfe, 0x76, 0x65, 0xff, 0x7e, 0x4a, 0xfe, 0xa1, 0x15, 0xfe, 0xe9, 0x41, 0x00, 0xa9, 0x6e, 0xfb, 0xef, 0x45, 0xfe, 0x7a, 0x88, 0xfe, 0x35, 0x7d, 0xfa, 0x82, 0x61, 0xfe, 0xa8, 0xd3, 0xfe, 0x56, 0xdd, 0xff, 0x8e, 0xfa, 0x00, 0x2f, 0x29, 0x00, 0x38, 0x41, 0xff, 0x68, 0xa0, 0x2c, 0x8b, 0x17, 0x25, 0x76, 0xc3, 0xff, 0x0b, 0xbc, 0x0b, 0xe6, 0xfa, 0xfa, 0x8c, 0x49, 0xfc, 0x51, 0x96, 0x04, 0x6b, 0xf2, 0xf9, 0x04, 0x54, 0xec, 0x22, 0x80, 0xf7, 0xe2, 0xb3, 0x0c, 0x93, 0x45, 0xff, 0x2a, 0x60, 0x00, 0x2b, 0xbd, 0xf8, 0xd4, 0x9a, 0xec, 0x88, 0x23, 0x00, 0xc3, 0x57, 0x06, 0xf0, 0xd7, 0xff, 0x1a, 0x54, 0x00, 0x6e, 0xf0, 0xfe, 0x98, 0xc2, 0xfd, 0xca, 0xa0, 0xff, 0x42, 0x51, 0xfb, 0x15, 0xb4, 0xfd, 0x5f, 0x72, 0xff, 0x19, 0x37, 0xfb, 0x24, 0x55, 0xfe, 0xcd, 0x86, 0xff, 0x70, 0x3c, 0xff, 0xc9, 0xdc, 0x00, 0xd6, 0x29, 0x00, 0x42, 0x1b, 0xff, 0xa3, 0xb3, 0x2a, 0x02, 0xa6, 0x24, 0xfc, 0x34, 0xfe, 0x29, 0xe1, 0x0b, 0x3c, 0x8f, 0xfd, 0xc2, 0xb5, 0xfc, 0xee, 0xbf, 0x01, 0x0e, 0xdd, 0xf9, 0xd6, 0x82, 0xf2, 0x0f, 0xa3, 0xf5, 0x51, 0x53, 0x0b, 0xab, 0x41, 0x00, 0x31, 0xee, 0xfb, 0x8b, 0xa6, 0xfd, 0xd7, 0x1e, 0xef, 0xff, 0x86, 0xfa, 0x13, 0x40, 0x06, 0x72, 0x8e, 0x00, 0x0b, 0xf4, 0xff, 0x56, 0xcc, 0x00, 0x21, 0xfd, 0xfd, 0xc9, 0x97, 0xfd, 0x97, 0xec, 0xfb, 0x39, 0xb4, 0xfd, 0xba, 0x60, 0x00, 0xb3, 0xc4, 0xfc, 0x46, 0x2a, 0xfd, 0xb0, 0x9d, 0xff, 0x58, 0x65, 0xff, 0xa9, 0x89, 0x00, 0xba, 0x24, 0x00, 0xeb, 0x36, 0xff, 0x97, 0x28, 0x28, 0xae, 0x56, 0x22, 0x4f, 0x16, 0xfe, 0xdc, 0xfa, 0x0c, 0x28, 0x7b, 0xff, 0x19, 0xb8, 0xfc, 0x86, 0x01, 0x01, 0xfb, 0x0f, 0xf9, 0x07, 0xe0, 0xf5, 0xe1, 0xbd, 0xf6, 0xcc, 0xf8, 0x08, 0xfe, 0x1c, 0x02, 0xdb, 0xdb, 0xf9, 0xe5, 0x46, 0xff, 0xc5, 0xa6, 0xf3, 0x62, 0x54, 0xf6, 0x5d, 0xc3, 0x04, 0x30, 0x34, 0x01, 0x35, 0xb5, 0xfe, 0xcb, 0x6f, 0x01, 0x29, 0x00, 0xff, 0x8a, 0x3a, 0xfd, 0xc3, 0xeb, 0xfb, 0x1c, 0x20, 0xfe, 0x53, 0x0d, 0x01, 0x13, 0xeb, 0xfd, 0xbd, 0x0b, 0xfc, 0x2e, 0x7e, 0xff, 0x47, 0xec, 0xff, 0x4b, 0x2a, 0x00, 0xee, 0x55, 0x00, 0xcd, 0x58, 0xff, 0x21, 0x65, 0x25, 0xd1, 0x49, 0x1f, 0xce, 0xe5, 0xfe, 0x3d, 0x32, 0x0e, 0x58, 0x1c, 0x00, 0xb4, 0x0a, 0xfc, 0xfd, 0x72, 0x01, 0xe9, 0x3a, 0xfb, 0xc9, 0xeb, 0xf5, 0x04, 0x2d, 0xf6, 0x01, 0x67, 0x08, 0x99, 0x80, 0x03, 0xc0, 0x68, 0xf9, 0x6c, 0x3b, 0xff, 0x79, 0xcc, 0xf7, 0x8d, 0x1f, 0xf5, 0xd3, 0xb3, 0x02, 0x39, 0x9c, 0x01, 0xfa, 0x99, 0xfd, 0x31, 0x75, 0x00, 0x33, 0x0d, 0xff, 0x71, 0x45, 0xfe, 0xc2, 0x2e, 0xfd, 0x21, 0xb8, 0xfd, 0x26, 0x5f, 0x00, 0xf4, 0x9d, 0xfe, 0xaa, 0x3f, 0xfc, 0x94, 0xc6, 0xff, 0xe2, 0x03, 0x00, 0x55, 0xdd, 0xff, 0x36, 0xa0, 0x00, 0xd4, 0x19, 0xff, 0x5d, 0x83, 0x21, 0xdc, 0x52, 0x1c, 0x7b, 0x8e, 0x00, 0xc2, 0x39, 0x0f, 0xc1, 0x6a, 0x00, 0xc6, 0x74, 0xfb, 0x5c, 0x81, 0x02, 0x04, 0x77, 0xfd, 0xd1, 0xac, 0xf6, 0x35, 0x6d, 0xf5, 0xa2, 0xc2, 0x05, 0xf6, 0xaf, 0x04, 0x2a, 0xec, 0xfa, 0xd9, 0xf3, 0xfe, 0x69, 0x7b, 0xfa, 0x33, 0x8a, 0xf5, 0x09, 0x82, 0x01, 0x3c, 0xbc, 0x01, 0xd2, 0xc2, 0xfc, 0x75, 0x7b, 0xff, 0xdb, 0x7c, 0xfe, 0x83, 0x7a, 0xfe, 0x97, 0xcd, 0xfe, 0x31, 0xe8, 0xfd, 0x5d, 0x04, 0xff, 0x05, 0xf6, 0xfe, 0xdc, 0x54, 0xfd, 0x0c, 0x28, 0x00, 0x94, 0x2c, 0x00, 0x22, 0xa5, 0xff, 0x81, 0x65, 0x00, 0xcf, 0x14, 0xff, 0x02, 0x63, 0x1d, 0x08, 0xd9, 0x16, 0xcf, 0x52, 0x01, 0x2a, 0xd3, 0x12, 0x61, 0x32, 0x00, 0xc0, 0xb0, 0xf9, 0x5e, 0x54, 0x04, 0xd4, 0xbb, 0x00, 0x33, 0xd7, 0xf7, 0xa6, 0x1a, 0xf3, 0xe1, 0xa7, 0x03, 0x5b, 0x57, 0x06, 0x77, 0x00, 0xfc, 0xe0, 0x78, 0x01, 0x11, 0xb3, 0xfb, 0xc1, 0x40, 0xf3, 0xe3, 0x78, 0x02, 0x0e, 0x91, 0x02, 0x9d, 0x96, 0xfb, 0x09, 0x79, 0xff, 0x58, 0x96, 0xfd, 0x22, 0x96, 0xfd, 0xcd, 0xb1, 0xff, 0x38, 0x06, 0xfe, 0xff, 0xb9, 0xff, 0xae, 0x9e, 0xff, 0x75, 0x34, 0xfd, 0xfb, 0x5f, 0x01, 0xd8, 0xcf, 0x00, 0xc9, 0x38, 0xff, 0x2b, 0xfa, 0xff, 0x27, 0x21, 0xff, 0x38, 0xbd, 0x18, 0x53, 0x80, 0x16, 0x74, 0x77, 0x05, 0x1c, 0xc0, 0x10, 0xa2, 0x63, 0xff, 0x9a, 0x4b, 0xf9, 0x3e, 0xa9, 0x03, 0xf5, 0x40, 0xff, 0x1d, 0x42, 0xfa, 0x2e, 0x3c, 0xf6, 0x34, 0x59, 0xff, 0xaf, 0x66, 0x04, 0x1a, 0x37, 0xfe, 0x62, 0x87, 0x02, 0x44, 0xea, 0xfd, 0x87, 0xb2, 0xf4, 0x21, 0x92, 0xfe, 0x70, 0x90, 0x02, 0xd7, 0x41, 0xff, 0x11, 0x96, 0xff, 0xe2, 0x44, 0xfd, 0x89, 0x07, 0xfe, 0xfc, 0xd8, 0xff, 0x1d, 0xf1, 0xfe, 0xf8, 0xf0, 0xff, 0x17, 0x6e, 0xff, 0x4d, 0xa8, 0xfd, 0xc2, 0x13, 0x00, 0x71, 0x98, 0x00, 0x23, 0x3d, 0xff, 0x75, 0xe5, 0xff, 0x57, 0x8e, 0xff, 0x6e, 0xbf, 0x15, 0xfe, 0xda, 0x14, 0xb2, 0xa4, 0x05, 0x81, 0x1d, 0x0f, 0x83, 0x74, 0x00, 0x37, 0x89, 0xfb, 0x8c, 0x5c, 0x03, 0xc7, 0xb7, 0xfe, 0x6c, 0x5a, 0xfb, 0xf6, 0x2e, 0xf7, 0xb0, 0xae, 0xfe, 0x4f, 0x54, 0x03, 0x28, 0x91, 0xfe, 0xa4, 0x07, 0x02, 0xe7, 0x36, 0xff, 0x3f, 0x25, 0xf7, 0x1a, 0x6f, 0xfd, 0x58, 0xf5, 0x02, 0x4c, 0xef, 0xff, 0xf8, 0x6d, 0xfe, 0x3f, 0xc3, 0xfd, 0x57, 0xcb, 0xfe, 0x47, 0xd3, 0xff, 0xd8, 0xb3, 0xfe, 0x95, 0x13, 0xff, 0x60, 0x7a, 0xff, 0xe0, 0xd6, 0xfe, 0xb1, 0xc5, 0xff, 0xa0, 0x8c, 0xff, 0xbb, 0x27, 0xff, 0xa2, 0x47, 0x00, 0xa0, 0xb7, 0xff, 0x2b, 0x56, 0x13, 0xf3, 0xa6, 0x12, 0x02, 0xc3, 0x05, 0xd1, 0x88, 0x0c, 0x07, 0x84, 0x01, 0x93, 0x8f, 0xfe, 0x65, 0x3b, 0x02, 0x55, 0x79, 0xfe, 0x21, 0x0f, 0xfc, 0x3a, 0x4e, 0xf8, 0xa4, 0xbe, 0xfe, 0xf4, 0x41, 0x02, 0x62, 0x09, 0xff, 0xfa, 0xa1, 0x01, 0xf2, 0xd8, 0xff, 0x25, 0xef, 0xf8, 0xe1, 0xdb, 0xfd, 0xa8, 0x2b, 0x03, 0xd8, 0xd3, 0xff, 0x2a, 0x5f, 0xfe, 0xc6, 0x6c, 0xfe, 0xcf, 0x55, 0xff, 0xd3, 0xa7, 0xff, 0x37, 0x5a, 0xfe, 0x56, 0x78, 0xfe, 0x71, 0x53, 0xff, 0x83, 0x36, 0xff, 0xb8, 0x3c, 0xff, 0x50, 0x42, 0xff, 0x07, 0xa3, 0xff, 0x05, 0x74, 0x00, 0xee, 0xdb, 0xff, 0x21, 0x60, 0x11, 0x2f, 0x32, 0x11, 0x44, 0x58, 0x05, 0x3e, 0x34, 0x0a, 0x94, 0xe4, 0x02, 0xcc, 0x21, 0x00, 0x85, 0x44, 0x01, 0x01, 0x6d, 0xfe, 0x27, 0x35, 0xfc, 0x24, 0x7c, 0xf9, 0xd9, 0xcd, 0xfe, 0x71, 0xa0, 0x01, 0x33, 0x55, 0xff, 0xe7, 0x7b, 0x01, 0x1e, 0x41, 0x00, 0xa8, 0xda, 0xf9, 0x8e, 0x68, 0xfe, 0xcb, 0x40, 0x03, 0x43, 0xaa, 0xff, 0x60, 0x6f, 0xfe, 0xf2, 0xe8, 0xfe, 0x3b, 0x5a, 0xff, 0x23, 0x7a, 0xff, 0x06, 0x51, 0xfe, 0x25, 0x1c, 0xfe, 0x3c, 0x25, 0xff, 0xce, 0x04, 0xff, 0x00, 0x2f, 0xff, 0x8c, 0xb2, 0xff, 0x39, 0xc0, 0xff, 0xc9, 0x38, 0x00, 0xa1, 0xf6, 0xff, 0x6f, 0xec, 0x0e, 0xda, 0xb2, 0x0f, 0x63, 0xaf, 0x04, 0x7f, 0xa7, 0x08, 0xfd, 0x7d, 0x04, 0xb8, 0x8c, 0x00, 0x7f, 0xbf, 0x00, 0x6d, 0xb0, 0xfe, 0x94, 0xa0, 0xfc, 0x36, 0x02, 0xfb, 0x45, 0xc4, 0xfe, 0x39, 0x09, 0x01, 0xff, 0x12, 0x00, 0xb6, 0xe0, 0x01, 0xfa, 0x28, 0x00, 0xa6, 0xf6, 0xfa, 0xc5, 0x59, 0xff, 0x81, 0xea, 0x02, 0xf5, 0x9f, 0xff, 0xfb, 0x72, 0xfe, 0x41, 0x1c, 0xff, 0x8f, 0xc4, 0xff, 0x46, 0x5a, 0xff, 0x12, 0x47, 0xfe, 0x8c, 0x3a, 0xfe, 0x0d, 0x71, 0xff, 0xb4, 0x1a, 0xff, 0xc3, 0x02, 0xff, 0x56, 0xf0, 0xff, 0x96, 0x0a, 0x00, 0x6b, 0x39, 0x00, 0xbf, 0xd9, 0xff, 0xb0, 0x1e, 0x0d, 0x2e, 0xc3, 0x0d, 0xee, 0x4f, 0x04, 0x3d, 0x54, 0x08, 0x1c, 0xb5, 0x04, 0x12, 0x46, 0x00, 0x80, 0x8f, 0x00, 0x0a, 0xf5, 0xfe, 0x6c, 0x33, 0xfd, 0x67, 0x24, 0xfc, 0x10, 0x92, 0xfe, 0xb8, 0x80, 0x00, 0x6c, 0xbc, 0x00, 0xc2, 0x22, 0x02, 0x0c, 0x1d, 0x00, 0x7e, 0x05, 0xfc, 0xa1, 0xbe, 0xff, 0xf6, 0xfa, 0x01, 0xbc, 0x5f, 0xff, 0xa4, 0xcb, 0xfe, 0x5a, 0x62, 0xff, 0xbd, 0xb0, 0xff, 0x28, 0x3d, 0xff, 0x7d, 0x9a, 0xfe, 0x39, 0xba, 0xfe, 0xa8, 0xc0, 0xff, 0xb8, 0xf2, 0xfe, 0x59, 0xcf, 0xfe, 0xe2, 0xe3, 0xff, 0xbf, 0x1e, 0x00, 0x22, 0x37, 0x00, 0xf5, 0xb3, 0xff, 0xe5, 0xf2, 0x0a, 0x12, 0x31, 0x0c, 0x1d, 0x4e, 0x04, 0x84, 0xa9, 0x07, 0x32, 0x74, 0x04, 0x40, 0x70, 0x00, 0x20, 0xa3, 0x00, 0x79, 0x22, 0xff, 0xd6, 0xd4, 0xfd, 0xa1, 0xf9, 0xfc, 0xb3, 0x68, 0xfe, 0xf1, 0x2e, 0x00, 0xaf, 0x91, 0x01, 0x0a, 0x76, 0x02, 0xb5, 0x0f, 0x00, 0xba, 0xfc, 0xfc, 0xf7, 0x71, 0xff, 0x6e, 0x30, 0x01, 0xa4, 0xa6, 0xff, 0x4a, 0x09, 0xff, 0x9f, 0x55, 0xff, 0xd7, 0xa6, 0xff, 0xec, 0xac, 0xff, 0x1e, 0x43, 0xff, 0xfc, 0x18, 0xff, 0xfe, 0x86, 0xff, 0xe1, 0x96, 0xfe, 0xa5, 0xde, 0xfe, 0xcb, 0xfe, 0xff, 0x81, 0xfc, 0xff, 0xb1, 0x19, 0x00, 0x32, 0xc6, 0xff, 0x41, 0x69, 0x08, 0x6c, 0xac, 0x0a, 0x29, 0xbe, 0x04, 0xc0, 0x37, 0x06, 0xc9, 0xf8, 0x03, 0xb5, 0x72, 0x01, 0xf0, 0x04, 0x01, 0xc8, 0x2c, 0xff, 0x87, 0x2f, 0xfe, 0x22, 0xe3, 0xfd, 0x84, 0x22, 0xff, 0x96, 0xc4, 0x00, 0x65, 0x2f, 0x02, 0x90, 0x5a, 0x02, 0xc4, 0x29, 0x00, 0x52, 0xef, 0xfd, 0xef, 0x7f, 0xff, 0x6e, 0xb1, 0x00, 0x9f, 0xb6, 0xff, 0xf3, 0x3f, 0xff, 0x70, 0x9b, 0xff, 0x43, 0x43, 0x00, 0x4a, 0x28, 0x00, 0x2b, 0x61, 0xff, 0x21, 0xf0, 0xfe, 0xfa, 0x61, 0xff, 0x88, 0x07, 0xff, 0x7b, 0x1e, 0xff, 0xc1, 0xf4, 0xff, 0x27, 0xe2, 0xff, 0xa4, 0xfe, 0xff, 0xf8, 0x08, 0x00, 0xb5, 0x64, 0x06, 0xf4, 0x54, 0x08, 0xf2, 0x58, 0x05, 0xe2, 0xdf, 0x05, 0x63, 0xa7, 0x03, 0xaa, 0xe0, 0x01, 0x75, 0xec, 0x00, 0x60, 0xad, 0xff, 0x37, 0xf7, 0xfe, 0xaa, 0xea, 0xfe, 0x06, 0xde, 0xff, 0xc8, 0xe2, 0x00, 0xc7, 0x7f, 0x02, 0x08, 0x9c, 0x02, 0x44, 0x63, 0x00, 0x45, 0x9f, 0xfe, 0x4e, 0x91, 0xff, 0xd4, 0x29, 0x00, 0x10, 0xaf, 0xff, 0x22, 0x9d, 0xff, 0x42, 0x21, 0x00, 0xac, 0x55, 0x00, 0x05, 0xd3, 0xff, 0xd8, 0x90, 0xff, 0x4f, 0x6a, 0xff, 0x3d, 0x87, 0xff, 0x6c, 0x26, 0xff, 0x77, 0x40, 0xff, 0x77, 0xcf, 0xff, 0xb5, 0xf1, 0xff, 0x66, 0x0b, 0x00, 0xc0, 0xfd, 0xff, 0x44, 0xde, 0x04, 0x5e, 0xcb, 0x06, 0xc8, 0x08, 0x05, 0x5c, 0xcd, 0x04, 0xea, 0x2d, 0x03, 0xc8, 0x1d, 0x02, 0x71, 0x83, 0x01, 0xbd, 0x28, 0x00, 0x17, 0x02, 0x00, 0x5b, 0x6c, 0x00, 0x16, 0xea, 0x00, 0x19, 0x98, 0x01, 0x49, 0x75, 0x02, 0x78, 0xb5, 0x02, 0x6f, 0x97, 0x00, 0x1d, 0xdc, 0xfe, 0x6a, 0x5a, 0xff, 0xb3, 0xd3, 0xff, 0xb5, 0x33, 0x00, 0x70, 0x0e, 0x00, 0x52, 0xe1, 0xff, 0xe1, 0x30, 0x00, 0x1f, 0x33, 0x00, 0x29, 0xe4, 0xff, 0xe2, 0x86, 0xff, 0xe1, 0x87, 0xff, 0xad, 0x61, 0xff, 0xf3, 0x68, 0xff, 0x14, 0xe8, 0xff, 0x48, 0x10, 0x00, 0x71, 0x00, 0x00, 0xfd, 0xcd, 0xff, 0x01, 0x4f, 0x04, 0xf1, 0xc7, 0x05, 0x5e, 0x40, 0x04, 0x0e, 0xb6, 0x03, 0xf1, 0xd5, 0x02, 0x60, 0x6f, 0x02, 0xcf, 0x3f, 0x02, 0xaa, 0xa6, 0x01, 0x5b, 0xd7, 0x00, 0x71, 0x3f, 0x01, 0x7d, 0xd9, 0x01, 0x6f, 0x07, 0x02, 0x73, 0x67, 0x02, 0xe8, 0x03, 0x02, 0xb6, 0x1f, 0x00, 0x2f, 0xff, 0xfe, 0x5c, 0xc9, 0xff, 0x4a, 0x2f, 0x00, 0x21, 0x49, 0x00, 0xd8, 0xfd, 0xff, 0x48, 0xe3, 0xff, 0xe3, 0x37, 0x00, 0xaa, 0x4b, 0x00, 0x6d, 0x01, 0x00, 0x14, 0x97, 0xff, 0x64, 0xae, 0xff, 0xb3, 0xb5, 0xff, 0x80, 0xd2, 0xff, 0x4b, 0x09, 0x00, 0xbe, 0x04, 0x00, 0x8d, 0xae, 0xff, 0x2d, 0x4e, 0xff, 0x68, 0x74, 0x03, 0x8e, 0x81, 0x04, 0x10, 0x5b, 0x03, 0x5a, 0xb3, 0x03, 0x2b, 0x77, 0x03, 0xae, 0xff, 0x02, 0x44, 0x01, 0x03, 0x40, 0xec, 0x02, 0x14, 0x5d, 0x02, 0x52, 0xc3, 0x01, 0xfb, 0x7e, 0x01, 0x66, 0x87, 0x01, 0xda, 0xa7, 0x01, 0x62, 0x5a, 0x01, 0x4e, 0x4a, 0x00, 0xfd, 0xb4, 0xff, 0xd5, 0x22, 0x00, 0x71, 0x0d, 0x00, 0x1f, 0xdf, 0xff, 0xbf, 0xed, 0xff, 0x37, 0xeb, 0xff, 0x05, 0x27, 0x00, 0x00, 0x6b, 0x00, 0xae, 0x56, 0x00, 0xbd, 0xeb, 0xff, 0xbe, 0xd9, 0xff, 0x72, 0xc9, 0xff, 0xf9, 0xd9, 0xff, 0xb0, 0xf5, 0xff, 0x53, 0x9b, 0xff, 0x5a, 0x55, 0xff, 0x01, 0x38, 0xff, 0x41, 0x21, 0x03, 0x3e, 0xea, 0x04, 0x7f, 0xe0, 0x03, 0x22, 0x96, 0x04, 0xb8, 0xaf, 0x04, 0xf0, 0x6c, 0x03, 0xf9, 0xc6, 0x02, 0x3a, 0x48, 0x02, 0x5e, 0xee, 0x01, 0x6d, 0xdb, 0x01, 0x5e, 0x7f, 0x01, 0xd0, 0xff, 0x00, 0x09, 0xa3, 0x00, 0xf8, 0xd9, 0x00, 0xeb, 0xd5, 0x00, 0xa0, 0x41, 0x00, 0xc3, 0x06, 0x00, 0x6d, 0xba, 0xff, 0x64, 0x82, 0xff, 0xdd, 0xc8, 0xff, 0x74, 0x3b, 0x00, 0xf1, 0x79, 0x00, 0x10, 0x7f, 0x00, 0x11, 0x93, 0x00, 0x37, 0x63, 0x00, 0xe8, 0xcd, 0xff, 0xdf, 0x91, 0xff, 0x80, 0x81, 0xff, 0xad, 0x74, 0xff, 0xd7, 0x61, 0xff, 0x69, 0x4c, 0xff, 0x15, 0x76, 0xff, 0x79, 0x99, 0x03, 0xd5, 0x66, 0x06, 0xd1, 0x6c, 0x05, 0x40, 0xd4, 0x04, 0xe7, 0x0d, 0x04, 0xea, 0x8a, 0x03, 0xd3, 0xd4, 0x02, 0x1f, 0x88, 0x01, 0x2b, 0xcd, 0x00, 0x6e, 0xc6, 0x00, 0xe4, 0xdf, 0x00, 0xf3, 0x1f, 0x01, 0x7f, 0x3f, 0x01, 0x80, 0x02, 0x01, 0xa7, 0xab, 0x00, 0x99, 0xe6, 0xff, 0x06, 0x88, 0xff, 0x40, 0xa6, 0xff, 0x2e, 0xfe, 0xff, 0xbe, 0x04, 0x00, 0xed, 0x1d, 0x00, 0x87, 0x97, 0x00, 0x1d, 0x83, 0x00, 0x1b, 0x7b, 0x00, 0xaa, 0x6f, 0x00, 0x58, 0xe9, 0xff, 0x67, 0x5c, 0xff, 0x2c, 0x20, 0xff, 0xe0, 0x08, 0xff, 0xfe, 0x57, 0xff, 0x5b, 0x8e, 0xff, 0x49, 0x93, 0xff, 0xac, 0x30, 0x04, 0x35, 0xb1, 0x06, 0x7c, 0x52, 0x05, 0xf1, 0x8d, 0x04, 0xcf, 0xee, 0x03, 0x0b, 0xae, 0x03, 0xa9, 0x01, 0x03, 0x09, 0x84, 0x01, 0xdf, 0x3e, 0x00, 0x44, 0xc4, 0xff, 0xe6, 0x6d, 0x00, 0x07, 0x74, 0x01, 0x4d, 0x47, 0x01, 0x1c, 0xe1, 0x00, 0x20, 0xbe, 0x00, 0x98, 0x3e, 0x00, 0x23, 0x1e, 0x00, 0x64, 0xea, 0xff, 0x98, 0xbe, 0xff, 0x1d, 0xcc, 0xff, 0xb0, 0x31, 0x00, 0xee, 0x4b, 0x00, 0x18, 0x0c, 0x00, 0x44, 0x71, 0x00, 0xa9, 0xe5, 0x00, 0x81, 0x76, 0x00, 0x4f, 0x65, 0xff, 0xde, 0xd8, 0xfe, 0xbb, 0xf4, 0xfe, 0x92, 0x35, 0xff, 0xb1, 0x6f, 0xff, 0x0b, 0xac, 0xff, 0xf9, 0x32, 0x04, 0xd7, 0x83, 0x06, 0xe3, 0x6e, 0x04, 0xe5, 0xf6, 0x03, 0xd3, 0xdd, 0x03, 0x7a, 0xb5, 0x03, 0x34, 0x22, 0x03, 0x15, 0x7d, 0x01, 0xc5, 0x10, 0x00, 0xfc, 0x73, 0x00, 0xd9, 0x38, 0x01, 0x2f, 0xbe, 0x00, 0xe1, 0x5b, 0x00, 0xcb, 0x8a, 0x00, 0x57, 0x8f, 0x00, 0x21, 0xd8, 0x00, 0x46, 0x23, 0x01, 0xd2, 0x4f, 0x00, 0x28, 0xd1, 0xff, 0xc6, 0xd1, 0xff, 0x18, 0xe0, 0xff, 0x26, 0xf1, 0xff, 0x4d, 0xf3, 0xff, 0x0f, 0x2d, 0x00, 0x4f, 0x4b, 0x00, 0x8e, 0xc0, 0x00, 0x72, 0x80, 0x00, 0x08, 0x63, 0xff, 0xb0, 0xd2, 0xfe, 0xa4, 0xea, 0xfe, 0x87, 0x42, 0xff, 0x92, 0x8e, 0xff, 0x51, 0x08, 0x05, 0x06, 0x29, 0x07, 0x32, 0xff, 0x03, 0xce, 0x0c, 0x03, 0x45, 0x9b, 0x02, 0x03, 0x00, 0x03, 0xff, 0xf9, 0x02, 0xf7, 0x8d, 0x01, 0xec, 0xae, 0xff, 0x11, 0x29, 0x00, 0xdb, 0xff, 0x01, 0x1a, 0xb1, 0x01, 0x87, 0xc3, 0x00, 0xee, 0xa3, 0xff, 0xa0, 0x68, 0xff, 0x2e, 0xb9, 0x00, 0x7a, 0x59, 0x01, 0x15, 0x11, 0x01, 0xaf, 0xe9, 0x00, 0x5c, 0x07, 0x00, 0x30, 0xbf, 0xff, 0x52, 0x34, 0x00, 0x64, 0xcc, 0xff, 0x98, 0x8c, 0xff, 0x6c, 0x12, 0x00, 0x5c, 0x43, 0x00, 0x01, 0x44, 0x00, 0x33, 0x78, 0x00, 0x9a, 0xfd, 0xff, 0x69, 0x63, 0xff, 0x51, 0xfa, 0xfe, 0x5f, 0xf9, 0xfe, 0x3e, 0xdc, 0x05, 0xf4, 0x7a, 0x08, 0xd2, 0x08, 0x04, 0xfb, 0xc4, 0x02, 0xba, 0x0e, 0x02, 0x76, 0x81, 0x02, 0x52, 0x46, 0x02, 0x7d, 0x6f, 0x00, 0xcb, 0xb1, 0xfe, 0x85, 0x3e, 0xff, 0x68, 0x85, 0x02, 0x40, 0x97, 0x02, 0x3e, 0xd8, 0x00, 0x1a, 0xee, 0xff, 0x7b, 0xd6, 0xff, 0x1a, 0x0c, 0x00, 0x5a, 0xad, 0x00, 0x53, 0x0a, 0x01, 0xa7, 0xd8, 0x00, 0x93, 0xa6, 0x00, 0xff, 0x7e, 0x00, 0xac, 0x43, 0x00, 0xd4, 0xdb, 0xff, 0xb8, 0xe8, 0xff, 0x14, 0xb5, 0xff, 0x55, 0x82, 0xff, 0xb8, 0xfc, 0xff, 0xc2, 0x5d, 0x00, 0xff, 0xa1, 0x00, 0x71, 0x6c, 0x00, 0x24, 0x95, 0xff, 0x34, 0xec, 0xfe, 0x0f, 0x7e, 0x07, 0xe2, 0x14, 0x0a, 0x1c, 0x0f, 0x04, 0x01, 0x30, 0x03, 0x49, 0xf0, 0x01, 0x8f, 0x1e, 0x02, 0x71, 0xb7, 0x01, 0xc1, 0x2b, 0xff, 0xbf, 0xd9, 0xfc, 0x08, 0xdd, 0xfd, 0xe5, 0xd0, 0x02, 0xef, 0x96, 0x02, 0x47, 0x7d, 0x00, 0x08, 0x1c, 0x00, 0xb9, 0x0b, 0x00, 0xd0, 0x9a, 0x00, 0x16, 0x3a, 0x01, 0xc8, 0x6d, 0x00, 0xd4, 0x35, 0x00, 0x54, 0xf5, 0x00, 0x62, 0x86, 0x00, 0x29, 0x84, 0x00, 0x99, 0x6b, 0x00, 0xaf, 0xd2, 0xff, 0x95, 0xfb, 0xff, 0x88, 0xd4, 0xff, 0x05, 0x87, 0xff, 0x4b, 0xfe, 0xff, 0x22, 0x7d, 0x00, 0xc1, 0xf3, 0x00, 0x73, 0x5a, 0x00, 0x22, 0x6f, 0xff, 0xf0, 0x49, 0x09, 0x23, 0xb7, 0x0b, 0x53, 0xdc, 0x03, 0xf0, 0xa3, 0x03, 0x8e, 0xd9, 0x01, 0x0e, 0x07, 0x02, 0x04, 0x97, 0x01, 0x31, 0x3a, 0xfe, 0x12, 0x7b, 0xfb, 0xc9, 0xd3, 0xfc, 0x23, 0x3c, 0x03, 0xe3, 0x51, 0x02, 0xda, 0x70, 0xff, 0xec, 0x68, 0xff, 0x2b, 0xcc, 0xff, 0x8e, 0xf6, 0x00, 0x6a, 0xa1, 0x01, 0x2a, 0xac, 0x00, 0x7b, 0xb8, 0x00, 0xce, 0xb8, 0x00, 0x29, 0x1a, 0x00, 0xa1, 0xb4, 0x00, 0x75, 0x1c, 0x00, 0x42, 0x07, 0x00, 0xca, 0x44, 0x00, 0xee, 0xde, 0xff, 0x94, 0xc2, 0xff, 0xce, 0x69, 0x00, 0x04, 0x51, 0x00, 0xb2, 0x04, 0x00, 0x45, 0x65, 0x00, 0x83, 0x40, 0x00, 0xdb, 0x84, 0x0b, 0xc1, 0x13, 0x0d, 0x72, 0x62, 0x03, 0xe3, 0x69, 0x04, 0xd6, 0xb7, 0x01, 0x3e, 0x32, 0x02, 0x9f, 0xb8, 0x01, 0xf9, 0x53, 0xfd, 0xf3, 0xee, 0xf9, 0xd4, 0x25, 0xfc, 0xfa, 0x29, 0x04, 0x43, 0x06, 0x02, 0x6b, 0x52, 0xfe, 0x62, 0x9f, 0xfe, 0x0d, 0x44, 0xff, 0xee, 0x9f, 0x00, 0x41, 0xa5, 0x01, 0x8c, 0xa1, 0x00, 0xd8, 0xf1, 0x00, 0x53, 0x64, 0x01, 0xbf, 0x0d, 0x00, 0x57, 0x5e, 0x00, 0xfe, 0x1e, 0x00, 0xb6, 0xfa, 0xff, 0xaf, 0x49, 0x00, 0xf9, 0xfe, 0xff, 0xc3, 0x20, 0x00, 0xf4, 0x90, 0x00, 0x2b, 0x0c, 0x00, 0xff, 0x14, 0x00, 0xe1, 0x00, 0x00, 0x86, 0x03, 0x00, 0x86, 0xea, 0x0e, 0xca, 0xbc, 0x0e, 0xef, 0x1a, 0x02, 0xb3, 0x59, 0x05, 0xfc, 0x5d, 0x01, 0xd4, 0x5d, 0x02, 0xad, 0xb3, 0x01, 0xd6, 0x07, 0xfc, 0x40, 0x6e, 0xf8, 0xb5, 0xcf, 0xfb, 0xfe, 0x5f, 0x05, 0x03, 0x66, 0x01, 0x22, 0x44, 0xfd, 0xb3, 0xed, 0xfd, 0x6f, 0xc0, 0xfe, 0xa8, 0x3a, 0x00, 0x8b, 0x27, 0x01, 0xdf, 0x29, 0x00, 0xc7, 0xe3, 0x00, 0x62, 0x21, 0x01, 0xbf, 0xd7, 0xff, 0xcb, 0xbd, 0x00, 0xb0, 0x37, 0x00, 0xb7, 0xcc, 0xff, 0xf4, 0x20, 0x00, 0x9c, 0x1a, 0x00, 0x00, 0xda, 0xff, 0x8a, 0xa1, 0x00, 0x54, 0x28, 0x00, 0x1c, 0xf3, 0xff, 0x74, 0x26, 0x00, 0x8e, 0xca, 0xff, 0x5a, 0x46, 0x12, 0x85, 0x5f, 0x10, 0x31, 0x6a, 0x00, 0xdc, 0x4e, 0x06, 0x55, 0x12, 0x01, 0x1b, 0x32, 0x02, 0x18, 0xaa, 0x01, 0x7e, 0x98, 0xfa, 0x7a, 0x83, 0xf7, 0x14, 0x43, 0xfc, 0x98, 0x59, 0x06, 0xfa, 0x92, 0x00, 0x19, 0x71, 0xfc, 0x38, 0x75, 0xfd, 0x78, 0x9c, 0xfe, 0x6c, 0xf5, 0xff, 0xe5, 0xee, 0x00, 0x92, 0xc4, 0xff, 0x2f, 0x8b, 0x00, 0xd7, 0x0f, 0x01, 0xff, 0x2d, 0xff, 0x96, 0xac, 0x00, 0xcb, 0x4f, 0x00, 0x24, 0x1f, 0x00, 0x78, 0xde, 0xff, 0x84, 0x82, 0xff, 0x95, 0xe8, 0xff, 0x77, 0x95, 0x00, 0x64, 0x3c, 0x00, 0x83, 0x52, 0x00, 0x26, 0x4b, 0x00, 0x6c, 0xd5, 0xff, 0xb0, 0xd4, 0x15, 0xa5, 0xcf, 0x12, 0x15, 0x80, 0xfe, 0x1b, 0x21, 0x07, 0xcd, 0x22, 0x01, 0x6b, 0xa3, 0x01, 0x79, 0xc1, 0x01, 0x2b, 0xdf, 0xf8, 0xd5, 0x86, 0xf6, 0xea, 0xbc, 0xfc, 0x2c, 0x20, 0x07, 0xcb, 0x37, 0x00, 0xce, 0xd3, 0xfb, 0x15, 0x9d, 0xfc, 0x3a, 0x92, 0xfe, 0x19, 0x12, 0x00, 0xf6, 0x3c, 0x00, 0x43, 0xda, 0xff, 0xe4, 0x47, 0x00, 0x0b, 0x94, 0x00, 0x58, 0x13, 0xff, 0xe7, 0x9f, 0x00, 0x99, 0x05, 0x00, 0x02, 0xb0, 0xff, 0x40, 0x97, 0xff, 0x0f, 0x7e, 0xff, 0xbd, 0x9c, 0xff, 0x38, 0x56, 0x00, 0x8a, 0x59, 0x00, 0xad, 0x5d, 0x00, 0xcc, 0xdc, 0x00, 0xba, 0x50, 0x00, 0x42, 0x80, 0x18, 0xa2, 0x39, 0x15, 0xb5, 0x47, 0xfd, 0x55, 0x3f, 0x07, 0xcb, 0x4b, 0x01, 0xd2, 0x5c, 0x01, 0xc6, 0xd6, 0x01, 0xe6, 0x80, 0xf7, 0x75, 0xc0, 0xf5, 0xe4, 0x39, 0xfd, 0xab, 0x44, 0x07, 0x71, 0xda, 0xff, 0x8d, 0xb0, 0xfb, 0x4f, 0x37, 0xfc, 0x06, 0x6f, 0xfe, 0x15, 0xf2, 0xff, 0x50, 0x3d, 0x00, 0xa0, 0xad, 0xff, 0x8d, 0x32, 0x00, 0x7a, 0xe9, 0x00, 0x62, 0xce, 0xfe, 0xc1, 0x14, 0x00, 0x77, 0x78, 0xff, 0x0b, 0xca, 0xff, 0xc3, 0x46, 0xff, 0x6d, 0x2d, 0xff, 0x56, 0xca, 0xff, 0x5e, 0x5c, 0x00, 0x8b, 0x5b, 0x00, 0xe9, 0x69, 0x00, 0x3e, 0xce, 0x00, 0x0a, 0xf2, 0xff, 0x20, 0x9e, 0x1a, 0x5e, 0x18, 0x18, 0x29, 0x29, 0xfd, 0xf0, 0xf5, 0x06, 0xf3, 0xc9, 0x00, 0x7a, 0xde, 0x00, 0x24, 0x3e, 0x02, 0xff, 0x20, 0xf6, 0x92, 0x69, 0xf5, 0xee, 0x1f, 0xfd, 0x81, 0xe5, 0x05, 0x60, 0x1f, 0x00, 0x71, 0x6e, 0xfc, 0x88, 0x4b, 0xfb, 0x49, 0xe5, 0xfd, 0xce, 0xa0, 0xff, 0x20, 0x67, 0x00, 0x3f, 0xdb, 0x00, 0x90, 0x84, 0xff, 0x86, 0x50, 0x00, 0xb1, 0xdd, 0xfe, 0xf2, 0xe1, 0xff, 0x80, 0xf3, 0xfe, 0xdb, 0x46, 0xff, 0x12, 0xfc, 0xfe, 0x7b, 0x0c, 0xff, 0xdc, 0xc9, 0xff, 0x7c, 0x5d, 0x00, 0xc5, 0x95, 0x00, 0xe4, 0x13, 0x00, 0x7c, 0x97, 0x00, 0x05, 0xc6, 0xff, 0x63, 0x48, 0x1b, 0xa7, 0xa5, 0x1a, 0xfa, 0x38, 0xfe, 0xbe, 0xf0, 0x06, 0xe7, 0xb0, 0x00, 0xcf, 0x77, 0xff, 0x03, 0xe7, 0x02, 0xa0, 0x07, 0xf6, 0x99, 0x9c, 0xf5, 0x74, 0xf4, 0xfc, 0x76, 0x86, 0x03, 0x04, 0xfe, 0xff, 0x09, 0xdd, 0xfd, 0x00, 0x9d, 0xfb, 0x40, 0xf6, 0xfc, 0xb2, 0x8c, 0xff, 0x82, 0x48, 0x00, 0x8d, 0x7b, 0x01, 0x59, 0xaf, 0xff, 0xb1, 0xd8, 0xff, 0x80, 0xc5, 0xfe, 0x16, 0x8e, 0xff, 0xd6, 0x1e, 0xff, 0x9b, 0x47, 0xff, 0x39, 0xdc, 0xfe, 0x31, 0x11, 0xff, 0x00, 0x96, 0xff, 0xef, 0xa9, 0xff, 0xc3, 0xa1, 0x00, 0x43, 0x58, 0x00, 0x50, 0xac, 0x00, 0x72, 0xa4, 0xff, 0x3e, 0xca, 0x1b, 0x19, 0x5b, 0x1c, 0x84, 0xe6, 0xff, 0x25, 0x6e, 0x07, 0x44, 0xe6, 0x00, 0xef, 0xce, 0xfd, 0x75, 0x50, 0x02, 0x54, 0x7c, 0xf6, 0x0b, 0x56, 0xf6, 0x6d, 0x48, 0xfd, 0xc6, 0x64, 0x00, 0xb1, 0x6c, 0xff, 0x60, 0x12, 0xff, 0xe7, 0x81, 0xfc, 0x02, 0x9a, 0xfd, 0x7c, 0x51, 0xfe, 0x20, 0xa6, 0xff, 0xdd, 0x6d, 0x02, 0x1a, 0xe9, 0xff, 0xdd, 0x00, 0xff, 0x37, 0xbe, 0xfe, 0x2d, 0xd2, 0xff, 0x91, 0x65, 0xff, 0x43, 0x3c, 0xff, 0x72, 0x9b, 0xfe, 0x5a, 0x0e, 0xff, 0xed, 0x57, 0xff, 0xe4, 0x41, 0xff, 0xed, 0x67, 0x00, 0xbb, 0x24, 0x00, 0xe5, 0x81, 0x00, 0xa4, 0xcb, 0xff, 0x44, 0x5a, 0x1c, 0x20, 0x72, 0x1d, 0x4f, 0x89, 0x01, 0xe2, 0xe1, 0x08, 0x27, 0x7f, 0x01, 0xa2, 0x5a, 0xfc, 0xc8, 0xed, 0x00, 0x5a, 0x0e, 0xf6, 0xa6, 0x10, 0xf7, 0x71, 0x22, 0xff, 0x17, 0x7b, 0xfd, 0x9a, 0xca, 0xfc, 0x46, 0xc0, 0x00, 0x4c, 0x40, 0xfe, 0xd3, 0x54, 0xfe, 0xa0, 0xa0, 0xfd, 0xbd, 0x39, 0xfe, 0x24, 0x6a, 0x02, 0xb6, 0x3c, 0x00, 0x87, 0x47, 0xff, 0x00, 0x74, 0xff, 0x00, 0x69, 0xff, 0x0a, 0xf4, 0xfe, 0x75, 0x7b, 0xff, 0xcf, 0x68, 0xfe, 0x72, 0xd7, 0xfe, 0x59, 0x47, 0xff, 0x8c, 0x78, 0xfe, 0x1e, 0x1b, 0x00, 0x1b, 0x3b, 0x00, 0x3e, 0x79, 0x00, 0x71, 0xa2, 0xff, 0x1d, 0x70, 0x1d, 0x40, 0xab, 0x1d, 0x92, 0xe2, 0x01, 0x3a, 0xb5, 0x0a, 0x9b, 0x5d, 0x02, 0xa7, 0xaa, 0xfb, 0x53, 0x80, 0xff, 0x00, 0x09, 0xf5, 0x07, 0x36, 0xf8, 0x6f, 0x05, 0x01, 0xec, 0x0d, 0xfb, 0xa6, 0xff, 0xfa, 0x11, 0x65, 0x01, 0xb0, 0x65, 0xff, 0xda, 0xcc, 0xff, 0xd8, 0x16, 0xfd, 0x60, 0xc8, 0xfc, 0xf0, 0x57, 0x02, 0xa2, 0x06, 0x01, 0x34, 0x10, 0xff, 0x75, 0x9e, 0xff, 0x90, 0xdb, 0xff, 0x86, 0xfb, 0xfe, 0x2a, 0x06, 0xff, 0xf2, 0xe6, 0xfd, 0x6c, 0xa9, 0xfe, 0xa8, 0x33, 0xff, 0xb3, 0x32, 0xfe, 0x5c, 0xae, 0xff, 0x1d, 0x28, 0x00, 0xd3, 0x90, 0x00, 0xf5, 0xc9, 0xff, 0xe6, 0xe9, 0x1f, 0x33, 0xf6, 0x1c, 0xbf, 0xdf, 0x00, 0x5e, 0x5a, 0x0d, 0x63, 0xd1, 0x02, 0xa2, 0x11, 0xfb, 0xf8, 0xd6, 0xfd, 0xe6, 0x42, 0xf4, 0x11, 0x5e, 0xf9, 0x13, 0x99, 0x03, 0xac, 0xc7, 0xf8, 0x66, 0x79, 0xf7, 0xf4, 0x48, 0x02, 0xe8, 0x1d, 0x00, 0xed, 0xcf, 0x01, 0x01, 0x3c, 0xfd, 0x73, 0x3a, 0xfb, 0x7a, 0x70, 0x02, 0x92, 0x81, 0x01, 0x43, 0x6e, 0xfe, 0xc9, 0xc2, 0xff, 0x89, 0x2b, 0x00, 0xee, 0x91, 0xfe, 0x1b, 0x14, 0xff, 0x67, 0x03, 0xfd, 0x35, 0x48, 0xfe, 0x6b, 0x53, 0xff, 0xfc, 0xe3, 0xfd, 0x1c, 0x53, 0xff, 0x93, 0x20, 0x00, 0xc0, 0x34, 0x00, 0xdc, 0x3f, 0xff, 0xf3, 0x1d, 0x23, 0x19, 0xfa, 0x1b, 0x0e, 0xe6, 0xfe, 0xa1, 0x05, 0x10, 0xa9, 0x5d, 0x02, 0xd6, 0xf0, 0xfa, 0xc8, 0xce, 0xfd, 0x07, 0xb0, 0xf2, 0x16, 0xc7, 0xfa, 0x76, 0x1a, 0x07, 0xf3, 0x46, 0xf7, 0x54, 0x17, 0xf3, 0xf4, 0x73, 0x02, 0x4f, 0x4e, 0x01, 0x52, 0x7c, 0x03, 0xe9, 0x2a, 0xfe, 0xeb, 0x08, 0xfa, 0xbe, 0x2e, 0x02, 0xac, 0xf9, 0x01, 0x4e, 0xf7, 0xfd, 0x63, 0xdc, 0xff, 0x06, 0x58, 0x00, 0x99, 0xa9, 0xfd, 0xe8, 0x0f, 0xff, 0x96, 0xee, 0xfc, 0x70, 0x23, 0xfe, 0x21, 0x68, 0xff, 0x7a, 0xa6, 0xfd, 0xfa, 0x09, 0xff, 0xbe, 0x1e, 0x00, 0x8d, 0x0d, 0x00, 0xd5, 0x24, 0xff, 0x39, 0x65, 0x27, 0x1e, 0xc9, 0x1b, 0x04, 0x39, 0xfb, 0x7a, 0x5e, 0x11, 0x4b, 0xce, 0x01, 0x96, 0x61, 0xfb, 0x20, 0x4b, 0xfe, 0xfa, 0xb9, 0xf0, 0x14, 0x3b, 0xfc, 0x70, 0xd9, 0x0a, 0xf1, 0xb6, 0xf6, 0x12, 0xfb, 0xee, 0x81, 0xa2, 0x01, 0xad, 0xcf, 0x01, 0x10, 0x73, 0x04, 0xfe, 0xf0, 0xff, 0xea, 0x87, 0xf9, 0x4c, 0x03, 0x01, 0x77, 0x8c, 0x02, 0x55, 0x9e, 0xfd, 0x6c, 0xe5, 0xfe, 0xc3, 0xae, 0x00, 0x73, 0x7d, 0xfd, 0xbf, 0xf0, 0xfe, 0x34, 0x2d, 0xfc, 0x06, 0x84, 0xfd, 0xea, 0xf5, 0xff, 0x4e, 0xbe, 0xfd, 0x0f, 0x51, 0xfe, 0x44, 0x35, 0x00, 0xc9, 0x2e, 0x00, 0x75, 0x8c, 0xfe, 0xf5, 0x11, 0x2c, 0x2c, 0x48, 0x1e, 0x22, 0xd2, 0xf5, 0xc5, 0xc2, 0x0f, 0xbb, 0xac, 0x01, 0xf0, 0xa9, 0xfb, 0xb6, 0x25, 0x01, 0xd3, 0x35, 0xf0, 0xc8, 0x89, 0xfa, 0x62, 0x48, 0x0d, 0x51, 0x72, 0xf9, 0x02, 0x96, 0xec, 0xeb, 0x69, 0xff, 0x5d, 0x0e, 0x02, 0x80, 0xa6, 0x05, 0x48, 0xcc, 0x00, 0xe9, 0x8e, 0xf8, 0xf6, 0xa8, 0x00, 0x9b, 0x09, 0x03, 0xc3, 0x36, 0xfd, 0xd0, 0x6a, 0xfe, 0x8b, 0x59, 0x01, 0x65, 0x1a, 0xfd, 0xb4, 0x9b, 0xfe, 0x58, 0x11, 0xfc, 0x8e, 0x2b, 0xfd, 0x16, 0x05, 0x00, 0x49, 0xec, 0xfd, 0x47, 0x43, 0xfe, 0xfa, 0xe3, 0xff, 0x56, 0x52, 0x00, 0xae, 0xb8, 0xfe, 0x27, 0x15, 0x31, 0x81, 0x91, 0x21, 0x62, 0x37, 0xef, 0x91, 0x2b, 0x0d, 0x8b, 0xaa, 0x00, 0x04, 0xac, 0xfc, 0x68, 0x41, 0x06, 0x35, 0xca, 0xee, 0xcc, 0xa3, 0xf7, 0x7a, 0x87, 0x0f, 0x6d, 0x0d, 0xfd, 0x39, 0x48, 0xeb, 0x3c, 0xfc, 0xfc, 0x20, 0x9e, 0x01, 0x54, 0xbc, 0x05, 0xdf, 0xea, 0x01, 0xa8, 0xdb, 0xf7, 0x74, 0x1f, 0xff, 0x45, 0x81, 0x03, 0xee, 0x0b, 0xfe, 0x41, 0x90, 0xfd, 0xb8, 0x23, 0x01, 0xf3, 0x1a, 0xfd, 0x6b, 0xef, 0xfe, 0xd1, 0x03, 0xfc, 0xd4, 0x31, 0xfc, 0xb2, 0x5f, 0x00, 0xf2, 0x28, 0xfe, 0x56, 0xdb, 0xfd, 0xa5, 0xbd, 0xff, 0x97, 0xe1, 0x00, 0xa9, 0xed, 0xfe, 0x84, 0x97, 0x37, 0xcd, 0x89, 0x21, 0x27, 0x77, 0xe9, 0xc2, 0x0e, 0x0d, 0x03, 0x06, 0xfe, 0xa6, 0xbd, 0xfe, 0xec, 0xf9, 0x08, 0xa5, 0x20, 0xed, 0xe4, 0x25, 0xf7, 0xee, 0xcf, 0x11, 0x95, 0x91, 0x00, 0x74, 0xc4, 0xe9, 0xba, 0x1b, 0xfa, 0x89, 0x08, 0x00, 0x7f, 0x3e, 0x07, 0x64, 0x90, 0x02, 0x61, 0xd2, 0xf5, 0xb6, 0x0b, 0xfe, 0x5e, 0x80, 0x04, 0x52, 0x12, 0xfe, 0x66, 0x57, 0xfc, 0xa1, 0xb7, 0x01, 0x67, 0x22, 0xfd, 0x8d, 0x33, 0xff, 0xd6, 0xfc, 0xfb, 0xbb, 0xa8, 0xfb, 0xe5, 0x1e, 0x00, 0xbd, 0x30, 0xfe, 0x03, 0x2b, 0xfe, 0x0c, 0x26, 0x00, 0xb7, 0xbb, 0x00, 0x1a, 0x61, 0xfe, 0x83, 0x19, 0x3b, 0x85, 0x1f, 0x22, 0x90, 0x50, 0xe6, 0xdc, 0xab, 0x0c, 0x05, 0xaf, 0xfb, 0x6c, 0x3c, 0x00, 0x9c, 0xd6, 0x0a, 0x18, 0xa9, 0xec, 0xd8, 0xef, 0xf5, 0x20, 0xa9, 0x12, 0xa6, 0x8a, 0x04, 0x39, 0x57, 0xe8, 0xd0, 0xfc, 0xf7, 0x7a, 0xbf, 0xfe, 0xe0, 0xc0, 0x06, 0x65, 0x2a, 0x03, 0xeb, 0x9e, 0xf5, 0x7f, 0xf7, 0xfc, 0x33, 0x1f, 0x04, 0xce, 0x2c, 0xfe, 0xbe, 0xb3, 0xfb, 0x44, 0x1d, 0x02, 0xde, 0xdd, 0xfc, 0xc8, 0xab, 0xff, 0x2e, 0x22, 0xfc, 0x06, 0xc0, 0xfa, 0x77, 0x13, 0x00, 0x98, 0xdc, 0xfe, 0xbf, 0x66, 0xfe, 0x90, 0xee, 0xff, 0x5d, 0x77, 0x00, 0x24, 0x2e, 0xfe, 0x3b, 0x8f, 0x3f, 0x49, 0x2e, 0x22, 0xf5, 0xdf, 0xe3, 0xfd, 0x9b, 0x0b, 0x43, 0x79, 0xf8, 0x15, 0x35, 0x03, 0x35, 0x06, 0x0d, 0xa6, 0x0f, 0xec, 0x9f, 0xd6, 0xf3, 0x71, 0x3a, 0x13, 0xb0, 0x8f, 0x08, 0xa7, 0xb1, 0xe8, 0x81, 0x89, 0xf6, 0x56, 0xb9, 0xfa, 0x83, 0xa0, 0x06, 0xa4, 0x39, 0x05, 0x4c, 0x77, 0xf5, 0x35, 0xd7, 0xfb, 0x14, 0x70, 0x03, 0x17, 0xfc, 0xfd, 0x23, 0xb3, 0xfb, 0xed, 0x62, 0x02, 0x42, 0x8f, 0xfc, 0x68, 0xf9, 0xff, 0xb2, 0xc4, 0xfb, 0x4d, 0xaa, 0xfa, 0xe2, 0xa4, 0x00, 0x24, 0x65, 0xff, 0xbc, 0x64, 0xfe, 0xfc, 0xd4, 0xff, 0x2a, 0x47, 0x00, 0x80, 0x04, 0xfe, 0xa5, 0x04, 0x41, 0xd2, 0x5f, 0x24, 0x58, 0xbd, 0xe2, 0x68, 0xbc, 0x09, 0xf3, 0x09, 0xf7, 0x14, 0x5c, 0x04, 0x5d, 0x79, 0x0e, 0x12, 0xb7, 0xec, 0x28, 0x29, 0xf1, 0x9e, 0x08, 0x12, 0x7e, 0x04, 0x0d, 0xac, 0xda, 0xe9, 0xdc, 0x7e, 0xf4, 0xbd, 0x72, 0xf7, 0xf2, 0x15, 0x06, 0xa0, 0xa5, 0x07, 0x8f, 0xb7, 0xf5, 0x74, 0x9d, 0xfa, 0x3b, 0xb8, 0x02, 0x83, 0x14, 0xfe, 0x49, 0xb6, 0xfb, 0x59, 0x75, 0x02, 0xfb, 0xe3, 0xfb, 0x47, 0xca, 0xff, 0xfb, 0x37, 0xfc, 0x82, 0xd2, 0xfa, 0xbe, 0xab, 0x00, 0x27, 0xac, 0xff, 0x26, 0x86, 0xfe, 0xf4, 0xd2, 0xff, 0xdb, 0x20, 0x00, 0x89, 0xbd, 0xfd, 0xc2, 0x51, 0x43, 0x48, 0xb5, 0x24, 0x8c, 0xbc, 0xe3, 0x90, 0x1a, 0x08, 0x9e, 0x61, 0xf5, 0x53, 0x7a, 0x05, 0x81, 0x9a, 0x0e, 0xf3, 0x61, 0xee, 0x42, 0x2f, 0xee, 0x3b, 0x26, 0x11, 0x4f, 0x93, 0x10, 0xf1, 0xf5, 0xeb, 0x1d, 0xdb, 0xf2, 0x2d, 0xf1, 0xf3, 0x3a, 0xcc, 0x05, 0x5d, 0xa3, 0x09, 0xc9, 0x2a, 0xf7, 0x96, 0x15, 0xf9, 0xdb, 0x7b, 0x02, 0xda, 0xee, 0xfd, 0xb7, 0xd1, 0xfb, 0x66, 0x28, 0x02, 0xcb, 0xf7, 0xfa, 0xdb, 0x43, 0x00, 0x11, 0xc9, 0xfc, 0x49, 0xdd, 0xfa, 0x53, 0x80, 0x00, 0xf0, 0x0f, 0x00, 0x56, 0x73, 0xfe, 0xf6, 0x37, 0x00, 0xdf, 0xb7, 0xff, 0xb9, 0x61, 0xfd, 0xa4, 0x1d, 0x44, 0x54, 0xc3, 0x25, 0xc0, 0xf2, 0xe4, 0x4f, 0x44, 0x07, 0xd5, 0x42, 0xf4, 0x25, 0x5e, 0x05, 0x7e, 0x7e, 0x0e, 0x49, 0x8e, 0xef, 0x00, 0xc1, 0xeb, 0x50, 0xbb, 0x0f, 0x34, 0xca, 0x12, 0x27, 0x04, 0xef, 0x1b, 0xb3, 0xf1, 0x8d, 0xfe, 0xf0, 0x73, 0x7c, 0x05, 0xde, 0x9d, 0x0a, 0x94, 0x79, 0xf9, 0xf1, 0xcb, 0xf7, 0xed, 0xca, 0x01, 0xba, 0x66, 0xfe, 0x21, 0x50, 0xfb, 0x7e, 0x94, 0x01, 0xe1, 0xe4, 0xfa, 0x1d, 0xac, 0x00, 0x2a, 0xb4, 0xfc, 0x46, 0x65, 0xfb, 0x71, 0xd1, 0xff, 0x94, 0x0d, 0x00, 0x2a, 0xe8, 0xfe, 0x49, 0xf3, 0xff, 0x65, 0x6f, 0xff, 0x32, 0x53, 0xfd, 0x7e, 0xca, 0x43, 0x8c, 0x04, 0x27, 0x3e, 0xc9, 0xe6, 0x87, 0xe3, 0x06, 0x41, 0x1a, 0xf3, 0x59, 0x31, 0x05, 0x15, 0xdf, 0x0d, 0xd4, 0x4b, 0xf0, 0x4a, 0xe6, 0xe9, 0x1a, 0x55, 0x0d, 0xf4, 0x8b, 0x14, 0xc2, 0xae, 0xf2, 0xa8, 0x8e, 0xf1, 0x87, 0xb6, 0xed, 0x57, 0x9d, 0x04, 0x8f, 0x9b, 0x0b, 0x41, 0x18, 0xfc, 0x2d, 0xc7, 0xf6, 0xf8, 0x89, 0x00, 0xdb, 0x46, 0xff, 0x41, 0x63, 0xfa, 0x3e, 0x5d, 0x01, 0xb3, 0x3a, 0xfb, 0xce, 0xc6, 0x00, 0xdc, 0xd4, 0xfc, 0x6e, 0x71, 0xfb, 0x34, 0x1d, 0xff, 0x3b, 0x31, 0x00, 0x3e, 0x06, 0xff, 0xd5, 0x41, 0xff, 0x8e, 0xc2, 0xff, 0x36, 0x48, 0xfd, 0x19, 0x0b, 0x42, 0x34, 0x56, 0x29, 0x47, 0xee, 0xe9, 0x6e, 0x6e, 0x07, 0xe6, 0xba, 0xf1, 0x0a, 0x6d, 0x04, 0x29, 0x72, 0x0d, 0x9c, 0x69, 0xf0, 0xa8, 0x8d, 0xe8, 0x56, 0x0b, 0x0a, 0x45, 0xea, 0x15, 0xa5, 0x32, 0xf7, 0xfc, 0xe2, 0xf3, 0xc0, 0x99, 0xe9, 0x86, 0x90, 0x02, 0xef, 0x39, 0x0d, 0xdf, 0xd7, 0xfe, 0x87, 0xff, 0xf6, 0xaa, 0x58, 0xfe, 0x75, 0x44, 0x00, 0xcb, 0x0a, 0xfa, 0x3e, 0x42, 0x01, 0xe0, 0xda, 0xfb, 0x47, 0x58, 0x01, 0x9a, 0x76, 0xfc, 0xf9, 0x01, 0xfb, 0x39, 0x40, 0xff, 0x3e, 0x80, 0xff, 0x17, 0x5f, 0xff, 0x50, 0x9a, 0xfe, 0x5d, 0x34, 0x00, 0xa2, 0x7b, 0xfd, 0x87, 0x19, 0x41, 0x62, 0x9b, 0x28, 0xf4, 0x46, 0xee, 0xe6, 0xe8, 0x07, 0x44, 0x00, 0xf1, 0xb4, 0x68, 0x04, 0x8c, 0xc1, 0x0b, 0x1c, 0x09, 0xf1, 0x2e, 0xe6, 0xe6, 0xa4, 0x13, 0x08, 0xc7, 0x3c, 0x15, 0xe7, 0x81, 0xfa, 0xac, 0x53, 0xf7, 0xf6, 0xf5, 0xe6, 0xba, 0x71, 0x00, 0x7f, 0xde, 0x0d, 0x8f, 0x64, 0x00, 0x7a, 0xdb, 0xf7, 0x93, 0xfc, 0xfc, 0xf7, 0x54, 0x00, 0x53, 0xda, 0xfa, 0x68, 0xc1, 0x00, 0x98, 0x6f, 0xfc, 0xc5, 0x63, 0x01, 0xbc, 0x3f, 0xfc, 0xd3, 0x0c, 0xfb, 0x49, 0xb2, 0xfe, 0xa8, 0x07, 0xff, 0x99, 0xa8, 0xff, 0xbe, 0x56, 0xfe, 0xd7, 0x4d, 0x00, 0xbd, 0x5e, 0xfe, 0xfc, 0xa1, 0x3e, 0xee, 0x26, 0x29, 0x6b, 0x54, 0xf3, 0xc2, 0xad, 0x07, 0x44, 0x6a, 0xf1, 0x67, 0x27, 0x03, 0x44, 0x4a, 0x0a, 0xa2, 0x57, 0xf3, 0xce, 0x18, 0xe4, 0x99, 0x3f, 0x05, 0xa6, 0x5e, 0x14, 0x75, 0x4b, 0xfd, 0x71, 0xe4, 0xfc, 0x8a, 0xd0, 0xe4, 0x1f, 0x35, 0xfc, 0x00, 0x18, 0x0f, 0x90, 0x2d, 0x01, 0x58, 0x8a, 0xf9, 0x0c, 0xc3, 0xfc, 0xa2, 0x8c, 0xff, 0x98, 0x8c, 0xfc, 0xff, 0x28, 0x00, 0xf7, 0xc4, 0xfb, 0xf9, 0x52, 0x02, 0xea, 0x6a, 0xfc, 0x69, 0x19, 0xfa, 0x0e, 0xd5, 0xfe, 0x6c, 0x12, 0xfe, 0x30, 0xf8, 0xff, 0x3f, 0x33, 0xff, 0x85, 0x67, 0x00, 0x41, 0xf5, 0xfe, 0x09, 0x2e, 0x3c, 0xaa, 0x36, 0x29, 0x55, 0xc2, 0xf6, 0xd7, 0xa0, 0x06, 0x9d, 0xe7, 0xf3, 0xb3, 0x89, 0x02, 0x49, 0x8b, 0x07, 0x4f, 0x6e, 0xf5, 0x9f, 0x6d, 0xe2, 0x62, 0x02, 0x03, 0xf0, 0x44, 0x13, 0xb1, 0x03, 0xfe, 0xe8, 0x6b, 0x01, 0x62, 0x30, 0xe5, 0xb2, 0x42, 0xf7, 0x74, 0x2c, 0x0f, 0xe0, 0xc7, 0x01, 0xfd, 0xfe, 0xfa, 0xaa, 0x9d, 0xfd, 0x67, 0x95, 0xfe, 0xe1, 0x1d, 0xfd, 0xec, 0x39, 0x00, 0x7e, 0x81, 0xfb, 0x71, 0x16, 0x02, 0xa8, 0x38, 0xfc, 0xfe, 0xa6, 0xf9, 0xac, 0x2a, 0xff, 0x83, 0x78, 0xfd, 0x04, 0x7b, 0x00, 0x38, 0xda, 0xff, 0xed, 0x48, 0x00, 0x84, 0x84, 0xff, 0x99, 0xde, 0x39, 0x77, 0x5b, 0x26, 0x4d, 0x16, 0xfc, 0x2a, 0xe2, 0x07, 0x3f, 0x1b, 0xf4, 0x2d, 0x46, 0x02, 0x97, 0xf3, 0x04, 0x0c, 0xc5, 0xf7, 0x28, 0x03, 0xe2, 0x97, 0xef, 0xfe, 0x16, 0xa7, 0x12, 0x23, 0xf3, 0xfe, 0xb0, 0x62, 0x05, 0xcb, 0xfc, 0xe6, 0xd9, 0xf0, 0xf0, 0x1b, 0x7c, 0x0e, 0x7a, 0x24, 0x03, 0xd4, 0x8b, 0xfc, 0xb1, 0xc1, 0xfe, 0x49, 0xf0, 0xfd, 0x33, 0xe7, 0xfd, 0x85, 0xf4, 0xff, 0x65, 0x07, 0xfb, 0xbf, 0xb8, 0x01, 0xab, 0x47, 0xfc, 0xd7, 0xd8, 0xf8, 0x8a, 0x90, 0xff, 0x44, 0xf2, 0xfd, 0xce, 0x54, 0x00, 0x7c, 0xd6, 0x00, 0xe7, 0x96, 0x00, 0x49, 0x27, 0xff, 0x83, 0x6d, 0x36, 0x5a, 0x2c, 0x25, 0xb9, 0x22, 0xfe, 0x73, 0x50, 0x0b, 0xdd, 0x74, 0xf3, 0x40, 0x1c, 0x01, 0xa3, 0x3c, 0x05, 0xbe, 0x72, 0xf7, 0x7e, 0xca, 0xe3, 0x90, 0xb1, 0xfa, 0x2f, 0x5e, 0x12, 0xed, 0x7d, 0xff, 0xc7, 0x9f, 0x06, 0x00, 0xd6, 0xea, 0x10, 0xe8, 0xea, 0x9e, 0xa6, 0x0c, 0x9f, 0xb0, 0x05, 0xf0, 0x30, 0xfd, 0x31, 0xce, 0xfe, 0x1c, 0x41, 0xfe, 0x16, 0x3c, 0xfe, 0x3e, 0x3a, 0x00, 0x64, 0x90, 0xfa, 0xee, 0x7f, 0xff, 0x1f, 0xbd, 0xfd, 0x44, 0x4c, 0xf9, 0xf8, 0x07, 0xff, 0x3a, 0x10, 0xfe, 0x2f, 0xa0, 0x00, 0xfc, 0x81, 0x01, 0xb3, 0xe0, 0xff, 0xc9, 0x32, 0xff, 0xb1, 0x0d, 0x34, 0xd6, 0x42, 0x25, 0x40, 0x47, 0xfd, 0xa2, 0xa1, 0x0c, 0xe0, 0x58, 0xf6, 0x4b, 0xc2, 0xfe, 0xce, 0x07, 0x06, 0x61, 0x7a, 0xf7, 0xef, 0xbd, 0xe5, 0x0d, 0x86, 0xf8, 0x31, 0xd9, 0x12, 0x27, 0x43, 0xfe, 0x1b, 0x92, 0x04, 0x61, 0x2d, 0xf2, 0x46, 0xd1, 0xe6, 0x08, 0x84, 0x08, 0x73, 0xc4, 0x07, 0x36, 0x70, 0xfe, 0xbb, 0xdf, 0xff, 0x68, 0x9d, 0xfd, 0x0b, 0x32, 0xfe, 0x1b, 0x08, 0x01, 0xc2, 0x13, 0xfa, 0xf2, 0xa1, 0xfd, 0x34, 0x9b, 0xff, 0xf8, 0x6b, 0xf9, 0xf4, 0xde, 0xfe, 0xbe, 0x6e, 0xff, 0x03, 0xbb, 0xff, 0xe5, 0x4d, 0x01, 0xd3, 0x15, 0x00, 0x92, 0x45, 0xff, 0x78, 0x7d, 0x32, 0xe9, 0x0d, 0x24, 0xf7, 0xe2, 0xfb, 0x8e, 0x50, 0x0e, 0x85, 0xa0, 0xf8, 0xd5, 0x29, 0xfb, 0x5a, 0x84, 0x05, 0x35, 0x15, 0xfa, 0x5a, 0xe3, 0xe9, 0xcc, 0xfe, 0xf5, 0x8d, 0x9e, 0x10, 0xc7, 0xb7, 0xfe, 0x0e, 0xfc, 0x00, 0x42, 0x10, 0xf9, 0x48, 0xb4, 0xe6, 0xba, 0x67, 0x01, 0x52, 0x78, 0x09, 0x12, 0x53, 0xff, 0xfb, 0xb4, 0x00, 0xff, 0xfa, 0xfe, 0xe5, 0x7d, 0xfd, 0x68, 0x7b, 0xff, 0x52, 0x4c, 0xfa, 0xf7, 0xbb, 0xfd, 0x07, 0x47, 0x00, 0x7d, 0x75, 0xfa, 0xaf, 0xb9, 0xfe, 0x7d, 0xe7, 0xff, 0xe6, 0xf6, 0xfe, 0xf9, 0x5c, 0x01, 0x1d, 0xfc, 0xff, 0xb8, 0xf4, 0xfe, 0x47, 0x2d, 0x30, 0x58, 0x13, 0x24, 0xda, 0x0d, 0xfa, 0x7f, 0x63, 0x0e, 0xfc, 0xae, 0xfb, 0x0c, 0x1d, 0xfc, 0xf3, 0x94, 0x01, 0x21, 0xec, 0xf9, 0x73, 0x9a, 0xf1, 0x97, 0xd0, 0xf2, 0x74, 0x9e, 0x0f, 0xa1, 0x2b, 0x00, 0x39, 0x5f, 0xfb, 0xc4, 0x37, 0xff, 0xac, 0x49, 0xe9, 0x0c, 0xc6, 0xfa, 0xbd, 0xf9, 0x09, 0x87, 0x16, 0x00, 0x2a, 0xe7, 0xff, 0x23, 0x5a, 0x01, 0xac, 0x9d, 0xfd, 0x19, 0xf1, 0xfc, 0xde, 0x77, 0xfb, 0x7e, 0x92, 0xfd, 0x35, 0x6f, 0x01, 0x69, 0x3c, 0xfc, 0x53, 0xe0, 0xfc, 0xc8, 0x24, 0x00, 0x01, 0x52, 0xff, 0xe3, 0xdf, 0x00, 0x11, 0x08, 0x00, 0xd8, 0x2c, 0xff, 0xe5, 0x29, 0x2d, 0xa1, 0x10, 0x22, 0xab, 0xf7, 0xf9, 0xf3, 0x94, 0x0f, 0x4c, 0x1e, 0xfe, 0xbd, 0x06, 0xfc, 0x53, 0x79, 0x00, 0x28, 0x40, 0xf8, 0x93, 0xd6, 0xf6, 0xdb, 0xb1, 0xf3, 0x01, 0x09, 0x0c, 0x55, 0x29, 0x03, 0xcb, 0x1a, 0xf8, 0x8a, 0xfa, 0x01, 0x90, 0x46, 0xee, 0xb4, 0x7d, 0xf4, 0x26, 0x5d, 0x09, 0x18, 0xfe, 0x00, 0x58, 0x38, 0xfe, 0x39, 0xbb, 0x02, 0x23, 0xde, 0xfe, 0x82, 0xda, 0xfb, 0xd9, 0x63, 0xfb, 0x6e, 0x5c, 0xfe, 0x8c, 0x43, 0x02, 0x73, 0x99, 0xfd, 0x6e, 0x34, 0xfb, 0x09, 0x1b, 0x00, 0xa3, 0x03, 0x00, 0x09, 0x5a, 0x00, 0xfd, 0x46, 0x00, 0x23, 0x65, 0xff, 0xaf, 0xb2, 0x2a, 0xd5, 0xd4, 0x1e, 0x39, 0x16, 0xfb, 0x70, 0x10, 0x11, 0x6f, 0xad, 0xfe, 0xbf, 0x2a, 0xfb, 0xbd, 0xa2, 0x00, 0x52, 0x9c, 0xfa, 0xdf, 0x05, 0xf6, 0x8f, 0x1b, 0xf4, 0xff, 0x0b, 0x0c, 0xfc, 0xa2, 0x03, 0x2e, 0xc9, 0xf7, 0x4c, 0xea, 0x01, 0xbe, 0xee, 0xf2, 0x70, 0x4c, 0xf2, 0x53, 0x98, 0x06, 0x35, 0xf6, 0x01, 0x19, 0x4e, 0xfd, 0xa2, 0xe7, 0x01, 0x82, 0x32, 0xff, 0xb8, 0x43, 0xfd, 0xc8, 0xed, 0xfb, 0xd5, 0xb2, 0xfd, 0x5f, 0x87, 0x02, 0xea, 0x47, 0xfe, 0xc7, 0xa6, 0xfa, 0x32, 0x5c, 0x00, 0x1c, 0x51, 0x00, 0xc0, 0xf0, 0xff, 0x6f, 0xa8, 0x00, 0x7e, 0x27, 0xff, 0xee, 0x92, 0x26, 0xd1, 0xf5, 0x1b, 0x76, 0xba, 0xfc, 0x10, 0xfc, 0x11, 0xe8, 0x37, 0xff, 0x57, 0x53, 0xfa, 0xb4, 0xdf, 0x01, 0x5c, 0x12, 0xfd, 0xc7, 0x95, 0xf6, 0x03, 0xf7, 0xf1, 0x19, 0xa5, 0x0a, 0xf6, 0xfd, 0x06, 0x25, 0x83, 0xf6, 0xe5, 0x0e, 0x02, 0xbf, 0xc1, 0xf7, 0xe6, 0xad, 0xf0, 0x52, 0x55, 0x05, 0x02, 0x62, 0x02, 0x11, 0x61, 0xfb, 0x35, 0xc3, 0x00, 0xdf, 0x2e, 0xff, 0x16, 0x19, 0xfe, 0x4b, 0x4c, 0xfe, 0x8a, 0x1b, 0xfd, 0xc9, 0x6b, 0x00, 0x69, 0x77, 0xff, 0x03, 0xc2, 0xfb, 0x8b, 0xb8, 0x00, 0x60, 0x0b, 0x00, 0x7e, 0xab, 0xff, 0x45, 0x05, 0x01, 0xb1, 0xb6, 0xfe, 0x42, 0xf6, 0x21, 0x23, 0x28, 0x19, 0x1f, 0x6c, 0xff, 0x90, 0xe7, 0x12, 0x10, 0x39, 0xff, 0x18, 0xb6, 0xf9, 0x32, 0x31, 0x03, 0x6c, 0x6b, 0xff, 0x23, 0x21, 0xf7, 0x99, 0xcb, 0xf1, 0x26, 0xc7, 0x06, 0xa5, 0xa5, 0x07, 0x3d, 0xdf, 0xf9, 0xa6, 0x1a, 0x01, 0xa2, 0xbf, 0xf9, 0x35, 0xe2, 0xf1, 0x7f, 0xd7, 0x03, 0x1a, 0xa0, 0x02, 0xdb, 0x01, 0xfb, 0x4a, 0xde, 0xff, 0x07, 0x5a, 0xfe, 0x59, 0x11, 0xfe, 0x14, 0xc0, 0xff, 0x1b, 0x78, 0xfd, 0xd8, 0x37, 0xff, 0xf1, 0xa8, 0xff, 0x81, 0xfa, 0xfc, 0x6a, 0xf4, 0x00, 0x36, 0x71, 0x00, 0x75, 0x66, 0xff, 0x83, 0x68, 0x00, 0x41, 0x03, 0xff, 0x1f, 0xa2, 0x22, 0xa1, 0x3d, 0x16, 0x79, 0x9e, 0xff, 0xa0, 0x1f, 0x17, 0x10, 0xad, 0xf9, 0x64, 0xc9, 0xf6, 0xf5, 0xd4, 0x03, 0x3c, 0x0b, 0xfc, 0xce, 0xd4, 0xf1, 0x7b, 0xa4, 0xf4, 0x51, 0x29, 0x11, 0x76, 0x8f, 0x04, 0xcb, 0xf3, 0xfa, 0x74, 0xd3, 0x09, 0x0b, 0xf9, 0xfa, 0xd2, 0x80, 0xf3, 0xa0, 0x11, 0x05, 0xd8, 0x55, 0x00, 0x1c, 0x3a, 0xf9, 0xf3, 0x17, 0xfd, 0x94, 0x1a, 0xfb, 0x56, 0x57, 0xfe, 0x49, 0x14, 0xfe, 0x84, 0xc3, 0xfb, 0x90, 0x99, 0xff, 0x81, 0x08, 0xfe, 0x35, 0xac, 0xfd, 0x20, 0x6d, 0x01, 0x92, 0x9a, 0xff, 0xd7, 0xa5, 0xfe, 0x61, 0xd7, 0x00, 0x03, 0xee, 0xff, 0x7f, 0xe6, 0x1c, 0xcf, 0xe4, 0x15, 0x98, 0x4c, 0x02, 0x49, 0x84, 0x14, 0xe1, 0xae, 0xfd, 0xf5, 0x2b, 0xf5, 0xd3, 0x52, 0x00, 0x93, 0x71, 0xfc, 0xb3, 0x93, 0xf5, 0x01, 0x52, 0xf8, 0xdd, 0xbd, 0x0b, 0xeb, 0x9d, 0x05, 0x32, 0xa6, 0xfd, 0x08, 0x49, 0x06, 0x24, 0x91, 0xfc, 0xc9, 0x78, 0xf4, 0x74, 0x64, 0x00, 0x3c, 0x36, 0x00, 0x06, 0x99, 0xfb, 0x8b, 0x26, 0xff, 0x74, 0xcb, 0xfb, 0x3c, 0x62, 0xfe, 0xb3, 0x23, 0x00, 0x03, 0x2a, 0xfb, 0x7d, 0xc3, 0xff, 0x6c, 0x1d, 0xff, 0xa8, 0xf2, 0xfb, 0x6b, 0xf6, 0xff, 0xf6, 0xe4, 0xff, 0xab, 0x46, 0xff, 0x9b, 0x26, 0x00, 0x27, 0xce, 0xff, 0x51, 0x94, 0x18, 0xe3, 0xcf, 0x13, 0x06, 0x07, 0x04, 0x4c, 0xb6, 0x12, 0xf7, 0xf9, 0xfe, 0x95, 0xcc, 0xf7, 0x5a, 0x75, 0x00, 0x93, 0x58, 0xfc, 0x2b, 0x3a, 0xf8, 0x16, 0xcd, 0xf9, 0xc9, 0x46, 0x08, 0x45, 0x0b, 0x05, 0xfb, 0xf0, 0xfd, 0xe0, 0xb6, 0x04, 0x7f, 0x8f, 0xfd, 0xb3, 0x21, 0xf6, 0xa5, 0xb6, 0xff, 0x87, 0xb1, 0xff, 0x97, 0xb9, 0xfc, 0xb8, 0xc6, 0xff, 0xa0, 0xd3, 0xfc, 0xb8, 0x38, 0xff, 0x28, 0x02, 0x00, 0x2a, 0xe4, 0xfb, 0x48, 0xdb, 0xff, 0xd9, 0x00, 0xff, 0x51, 0x35, 0xfc, 0xa7, 0x4a, 0xff, 0x40, 0x5b, 0xff, 0x4f, 0x47, 0xff, 0x96, 0x06, 0x00, 0x4f, 0x93, 0xff, 0x8f, 0x52, 0x14, 0xeb, 0xd3, 0x11, 0xc4, 0xbb, 0x05, 0x44, 0x9b, 0x10, 0x00, 0x2d, 0x00, 0x37, 0x58, 0xfa, 0x25, 0x58, 0x00, 0x3a, 0x12, 0xfd, 0x18, 0x8d, 0xfa, 0x58, 0x98, 0xfa, 0xdf, 0xcc, 0x05, 0x1e, 0xe0, 0x03, 0x43, 0x26, 0xfe, 0x1e, 0x8b, 0x03, 0x0e, 0x2e, 0xfe, 0x0b, 0x03, 0xf8, 0x6a, 0xab, 0xfe, 0xc8, 0xaf, 0xff, 0x20, 0x6d, 0xfd, 0x43, 0x9e, 0xff, 0x61, 0xaf, 0xfe, 0x2e, 0x7d, 0x00, 0xc5, 0x18, 0x00, 0x67, 0x93, 0xfc, 0x76, 0x81, 0xff, 0xe7, 0x9b, 0xfe, 0xdc, 0xa3, 0xfc, 0xa6, 0xa9, 0xfe, 0xed, 0x8d, 0xfe, 0x89, 0xd6, 0xfe, 0xa1, 0x06, 0x00, 0xe7, 0xf9, 0xff, 0xcb, 0xdd, 0x10, 0xda, 0x48, 0x10, 0x61, 0x9f, 0x06, 0x9d, 0x6c, 0x0e, 0xb6, 0xae, 0x01, 0xea, 0xf6, 0xfb, 0x94, 0x2f, 0x00, 0xc0, 0xd2, 0xfe, 0xb5, 0x00, 0xfc, 0x70, 0x17, 0xfb, 0x15, 0x16, 0x04, 0xaf, 0xc4, 0x02, 0x0d, 0x4d, 0xfe, 0xb9, 0x87, 0x02, 0x72, 0x14, 0xff, 0x21, 0x33, 0xf9, 0x4b, 0x0a, 0xfe, 0x1c, 0xfd, 0xff, 0x82, 0xe9, 0xfd, 0x83, 0x61, 0x00, 0x22, 0x78, 0x00, 0xc8, 0x02, 0x01, 0x6c, 0xd5, 0xff, 0x55, 0x2a, 0xfd, 0x28, 0x06, 0xff, 0xb0, 0x50, 0xfe, 0x60, 0x08, 0xfd, 0x0c, 0x1a, 0xfe, 0x2c, 0x5d, 0xfe, 0xb9, 0xd3, 0xfe, 0x64, 0xe2, 0xff, 0xb8, 0x00, 0x00, 0xa5, 0x12, 0x0e, 0xe8, 0x1a, 0x0f, 0x29, 0x8b, 0x06, 0x07, 0x75, 0x0c, 0xcb, 0x05, 0x03, 0x67, 0xd6, 0xfc, 0xd1, 0xc9, 0x00, 0xc8, 0x2a, 0x00, 0x82, 0xd4, 0xfc, 0xfa, 0xd7, 0xfb, 0x03, 0x63, 0x02, 0x86, 0xbc, 0x01, 0x79, 0x84, 0xfe, 0x64, 0xe8, 0x01, 0xa3, 0x7a, 0xff, 0x3e, 0x40, 0xfa, 0x0d, 0xf6, 0xfd, 0xa9, 0x3f, 0x00, 0xcb, 0x57, 0xff, 0x96, 0x4f, 0x01, 0x19, 0xb3, 0x00, 0xc5, 0x83, 0x00, 0x92, 0xdb, 0xff, 0xc8, 0x9a, 0xfd, 0x8f, 0x97, 0xfe, 0x35, 0x2a, 0xfe, 0xb1, 0x3f, 0xfd, 0x0e, 0x72, 0xfe, 0x1d, 0x79, 0xfe, 0x9b, 0xc5, 0xfe, 0x0c, 0xaa, 0xff, 0x59, 0xbd, 0xff, 0xa8, 0x60, 0x0c, 0xc2, 0xe7, 0x0d, 0x59, 0x06, 0x06, 0x8b, 0xd2, 0x0a, 0xed, 0x3f, 0x03, 0x26, 0xcd, 0xfd, 0xaa, 0x90, 0x01, 0xf7, 0x79, 0x00, 0xf1, 0x95, 0xfd, 0xfe, 0x71, 0xfc, 0x3f, 0xc0, 0x00, 0x1f, 0xe9, 0x00, 0x86, 0xe4, 0xfe, 0x79, 0xad, 0x01, 0x0e, 0x7c, 0xff, 0x68, 0x20, 0xfb, 0xd8, 0xa4, 0xfe, 0xcf, 0xcc, 0x00, 0xd5, 0x5e, 0x00, 0x5a, 0x79, 0x01, 0xe0, 0x1c, 0x00, 0xec, 0x02, 0x00, 0xa8, 0x9c, 0xff, 0xa8, 0x9f, 0xfd, 0x9b, 0x72, 0xfe, 0x2c, 0xbf, 0xfe, 0x1b, 0xff, 0xfd, 0xe8, 0x3d, 0xfe, 0xd2, 0x52, 0xfe, 0x89, 0xe5, 0xfe, 0x0f, 0xab, 0xff, 0x50, 0xcd, 0xff, 0x79, 0x69, 0x0b, 0x80, 0x3e, 0x0c, 0xe4, 0xb1, 0x05, 0xf9, 0x9d, 0x09, 0xad, 0x0a, 0x03, 0x60, 0x5f, 0xff, 0xeb, 0x1c, 0x02, 0xf0, 0xa9, 0x00, 0xf7, 0x60, 0xfe, 0x51, 0xdd, 0xfc, 0xbc, 0xb8, 0xff, 0x08, 0x9e, 0x00, 0xef, 0x98, 0xff, 0x1f, 0xae, 0x01, 0x33, 0x15, 0x00, 0x44, 0x4a, 0xfc, 0x3d, 0x22, 0xff, 0x5e, 0x63, 0x01, 0xaf, 0x08, 0x01, 0x67, 0xf9, 0x00, 0xf5, 0xa0, 0xff, 0xf0, 0xe3, 0xff, 0x07, 0x51, 0xff, 0xe6, 0x47, 0xfe, 0xaa, 0x77, 0xff, 0x5d, 0x2b, 0xff, 0xf0, 0xf9, 0xfd, 0x16, 0x40, 0xfe, 0xcc, 0xb9, 0xfe, 0xd8, 0x3f, 0xff, 0xb5, 0xe7, 0xff, 0xb5, 0x1a, 0x00, 0x2d, 0x4f, 0x0a, 0x31, 0xf0, 0x0a, 0x94, 0x4e, 0x05, 0x74, 0x2c, 0x08, 0x4d, 0x3b, 0x03, 0x9e, 0xa8, 0x00, 0xef, 0x25, 0x02, 0x0e, 0xd3, 0x00, 0x87, 0xf1, 0xfe, 0xf6, 0x07, 0xfd, 0x7b, 0x2e, 0xff, 0x73, 0x72, 0x00, 0xc7, 0xc4, 0x00, 0xc4, 0x6b, 0x02, 0xe0, 0x1e, 0x00, 0x33, 0xd3, 0xfc, 0x3f, 0x68, 0xff, 0x98, 0xe4, 0x01, 0xfc, 0x2b, 0x01, 0x6b, 0x24, 0x00, 0xcb, 0x35, 0xff, 0x6e, 0x24, 0x00, 0xa6, 0x09, 0x00, 0x36, 0xef, 0xfe, 0xb5, 0x7e, 0xff, 0x7b, 0x3f, 0xff, 0xb1, 0x37, 0xfe, 0x7f, 0x6f, 0xfe, 0xa6, 0x44, 0xff, 0x72, 0xce, 0xff, 0x43, 0x4d, 0x00, 0x73, 0x34, 0x00, 0x33, 0xa5, 0x08, 0x0f, 0x51, 0x0a, 0x7a, 0xd1, 0x04, 0xb5, 0x5c, 0x06, 0xed, 0xee, 0x03, 0xc9, 0xc4, 0x01, 0x50, 0x03, 0x02, 0x39, 0xbb, 0x00, 0x6b, 0x3e, 0xff, 0x4b, 0x3c, 0xfd, 0xcf, 0x85, 0xff, 0x37, 0xd9, 0x01, 0x6e, 0x4b, 0x01, 0xf2, 0xc7, 0x01, 0xe5, 0x2f, 0x00, 0x99, 0x7a, 0xfd, 0x16, 0x95, 0xff, 0xa2, 0xf9, 0x01, 0x8a, 0xca, 0x00, 0xc7, 0xac, 0xff, 0x34, 0xe0, 0xff, 0x1d, 0x69, 0x00, 0x26, 0x3d, 0x00, 0x14, 0x4a, 0xff, 0xf9, 0x29, 0xff, 0x99, 0x49, 0xff, 0x48, 0xe1, 0xfe, 0xb1, 0x20, 0xff, 0x83, 0xd6, 0xff, 0xe1, 0x43, 0x00, 0xd8, 0xd5, 0xff, 0x56, 0x2d, 0xff, 0xde, 0x52, 0x06, 0x9d, 0xc7, 0x08, 0xff, 0x20, 0x05, 0xac, 0xd1, 0x05, 0x79, 0x78, 0x04, 0x86, 0xea, 0x01, 0xfc, 0xaf, 0x01, 0x3e, 0x00, 0x01, 0x08, 0x5d, 0x00, 0xe4, 0x3e, 0xff, 0x8e, 0x9d, 0xff, 0x89, 0xaf, 0x01, 0x2a, 0xd1, 0x01, 0x6c, 0x18, 0x01, 0x6a, 0x44, 0x00, 0xcd, 0x7e, 0xfe, 0xbb, 0x54, 0xff, 0x66, 0xa3, 0x01, 0x8b, 0x1d, 0x01, 0xe6, 0xe4, 0xff, 0xd7, 0x14, 0x00, 0xf6, 0x78, 0x00, 0x77, 0x24, 0x00, 0xb9, 0x62, 0xff, 0x8f, 0xa4, 0xff, 0x5f, 0xdd, 0xff, 0x4d, 0x73, 0xff, 0x86, 0xcf, 0xff, 0x58, 0xec, 0xff, 0xb3, 0x6d, 0xff, 0xfb, 0x24, 0xff, 0x2e, 0x21, 0xff, 0x4e, 0xf7, 0x04, 0xfe, 0x28, 0x08, 0xf3, 0x25, 0x05, 0x56, 0xc1, 0x03, 0xaa, 0xc8, 0x03, 0xf5, 0x66, 0x03, 0xa2, 0x59, 0x02, 0x25, 0x4c, 0x01, 0x1a, 0x0f, 0x01, 0x32, 0xc5, 0x00, 0x79, 0x9d, 0x00, 0xdd, 0x3e, 0x01, 0x9b, 0x3e, 0x01, 0xf3, 0x59, 0x00, 0xdd, 0x3b, 0x00, 0x42, 0x67, 0xff, 0x82, 0xb2, 0xff, 0x4d, 0x6e, 0x01, 0xe7, 0x1a, 0x01, 0x57, 0x19, 0x00, 0x12, 0xec, 0xff, 0xeb, 0x44, 0x00, 0x9a, 0x61, 0x00, 0xb8, 0x32, 0x00, 0x55, 0x0d, 0x00, 0xaf, 0x27, 0x00, 0x48, 0x0d, 0x00, 0xa4, 0x47, 0xff, 0x06, 0x06, 0xff, 0x94, 0x2c, 0xff, 0xf7, 0x57, 0xff, 0xd4, 0x75, 0xff, 0x8b, 0x38, 0x04, 0xa9, 0x4f, 0x06, 0x10, 0x4f, 0x04, 0x31, 0xa2, 0x03, 0x77, 0x2d, 0x04, 0x1f, 0xcc, 0x03, 0xb9, 0x44, 0x03, 0x9d, 0xb1, 0x02, 0x11, 0x89, 0x01, 0x60, 0x23, 0x01, 0x80, 0xcd, 0x00, 0xcd, 0x8a, 0x00, 0x56, 0xc6, 0x00, 0xc5, 0x63, 0x00, 0xa6, 0xa4, 0xff, 0x03, 0x06, 0x00, 0xb9, 0xd4, 0x00, 0x4d, 0xe9, 0x00, 0xa5, 0x92, 0x00, 0x83, 0x0a, 0x00, 0xbd, 0x0b, 0x00, 0xf3, 0xbe, 0x00, 0x9e, 0x02, 0x01, 0x95, 0x8e, 0x00, 0x6b, 0x42, 0x00, 0x53, 0xba, 0xff, 0xe4, 0x20, 0xff, 0xa7, 0x1c, 0xff, 0x34, 0x30, 0xff, 0xaf, 0x3f, 0xff, 0x86, 0x82, 0xff, 0xff, 0x7a, 0xff, 0x23, 0xe8, 0x03, 0x86, 0xc2, 0x04, 0x78, 0xfb, 0x03, 0x02, 0x48, 0x05, 0x0d, 0x12, 0x05, 0xab, 0x15, 0x04, 0x2c, 0xc4, 0x02, 0x5d, 0x55, 0x02, 0xfb, 0x4c, 0x02, 0xe7, 0x22, 0x01, 0xa6, 0x83, 0x00, 0x2a, 0x3e, 0x00, 0xed, 0x09, 0x00, 0xad, 0x41, 0x00, 0x78, 0x3e, 0x00, 0xa5, 0x45, 0x00, 0x90, 0xa8, 0x00, 0xc0, 0x76, 0x00, 0x24, 0x83, 0x00, 0x65, 0xea, 0x00, 0xed, 0xcd, 0x00, 0x12, 0xab, 0x00, 0x1a, 0xa7, 0x00, 0xe7, 0x57, 0x00, 0x95, 0xb6, 0xff, 0x76, 0x3f, 0xff, 0x79, 0xed, 0xfe, 0x9a, 0x1b, 0xff, 0x97, 0x62, 0xff, 0x2c, 0x50, 0xff, 0x02, 0x5a, 0xff, 0xfc, 0x4f, 0xff, 0xff, 0x13, 0x05, 0x7b, 0x83, 0x06, 0xaf, 0x64, 0x04, 0xec, 0x33, 0x05, 0xcd, 0xe8, 0x04, 0xe3, 0x09, 0x04, 0x0d, 0x7f, 0x02, 0xba, 0x02, 0x01, 0x03, 0xaa, 0x00, 0x88, 0xae, 0x00, 0x88, 0xde, 0x00, 0x7a, 0x5d, 0x00, 0x1c, 0x0e, 0x00, 0x59, 0x53, 0x00, 0xf7, 0x94, 0x00, 0x9e, 0x03, 0x00, 0xe3, 0xf9, 0xff, 0xe4, 0xcb, 0x00, 0xa1, 0x5a, 0x01, 0x57, 0x92, 0x01, 0x38, 0x14, 0x01, 0xa3, 0x36, 0x00, 0xdb, 0x8b, 0xff, 0x3a, 0x54, 0xff, 0x29, 0x39, 0xff, 0x66, 0x2c, 0xff, 0xb4, 0x4b, 0xff, 0xcf, 0x51, 0xff, 0x3f, 0x3e, 0xff, 0x8a, 0x43, 0xff, 0x84, 0x27, 0xff, 0xf1, 0x1d, 0xff, 0xce, 0x5f, 0x04, 0xd7, 0x83, 0x06, 0x69, 0x46, 0x05, 0x1c, 0x85, 0x05, 0x4e, 0xe3, 0x04, 0xe1, 0xd7, 0x03, 0x19, 0xed, 0x01, 0xca, 0xb6, 0x00, 0x06, 0xa5, 0x00, 0xf1, 0x89, 0x00, 0x9a, 0xe9, 0x00, 0xc1, 0xfe, 0x00, 0xa5, 0xaf, 0x00, 0x5d, 0x36, 0x00, 0x77, 0xca, 0xff, 0xfe, 0xd5, 0xff, 0x7d, 0x8b, 0x00, 0x58, 0xe5, 0x00, 0xd8, 0x5d, 0x01, 0x6f, 0xc5, 0x01, 0xcd, 0x3a, 0x01, 0x86, 0x61, 0x00, 0x79, 0x64, 0xff, 0xd8, 0xcc, 0xfe, 0x0d, 0x05, 0xff, 0x85, 0x2c, 0xff, 0x72, 0x5c, 0xff, 0xad, 0x6e, 0xff, 0xe4, 0x3f, 0xff, 0xcf, 0x62, 0xff, 0x9e, 0x2e, 0xff, 0xcb, 0x01, 0xff, 0x92, 0x3a, 0x05, 0xdc, 0x43, 0x07, 0x0e, 0x51, 0x04, 0xb6, 0x04, 0x05, 0x55, 0xea, 0x03, 0x8e, 0xe8, 0x02, 0x87, 0x68, 0x02, 0x7a, 0xb7, 0x00, 0xf8, 0x38, 0x00, 0x4d, 0x35, 0x01, 0x9b, 0x74, 0x01, 0x1e, 0xe3, 0x00, 0x85, 0xfa, 0x00, 0xde, 0xb0, 0xff, 0xc8, 0x77, 0xff, 0x75, 0x56, 0x00, 0xd8, 0x8d, 0x00, 0x29, 0xb9, 0x00, 0x2e, 0x5b, 0x01, 0x19, 0xd7, 0x01, 0x84, 0x23, 0x01, 0xab, 0x79, 0x00, 0x6a, 0x6b, 0xff, 0xea, 0xb7, 0xfe, 0xb2, 0x0b, 0xff, 0xd3, 0x1b, 0xff, 0x8d, 0xf2, 0xfe, 0x46, 0x7e, 0xff, 0x24, 0x7f, 0xff, 0x73, 0x3c, 0xff, 0xdf, 0x60, 0xff, 0x2b, 0x13, 0xff, 0x22, 0x27, 0x05, 0x22, 0xd2, 0x06, 0xd8, 0xba, 0x03, 0x50, 0x41, 0x04, 0x73, 0x76, 0x03, 0x57, 0x11, 0x03, 0x0c, 0x50, 0x02, 0xf8, 0xf6, 0x00, 0xf1, 0xa9, 0x00, 0x92, 0x38, 0x01, 0x23, 0x61, 0x01, 0xe6, 0x35, 0x01, 0x03, 0x42, 0x01, 0x8d, 0xfa, 0xff, 0x74, 0x26, 0x00, 0x22, 0x82, 0x00, 0x0c, 0x54, 0x00, 0xa6, 0x6c, 0x00, 0x30, 0xc0, 0x00, 0x9c, 0x23, 0x01, 0xf2, 0x97, 0x01, 0x3b, 0xe5, 0x01, 0x8a, 0x2a, 0x00, 0xba, 0x25, 0xff, 0x62, 0xf4, 0xfe, 0x18, 0xa4, 0xfe, 0x10, 0x3a, 0xff, 0xaa, 0x6d, 0xff, 0xcc, 0x58, 0xff, 0xa1, 0x6c, 0xff, 0xbc, 0x7f, 0xff, 0x0b, 0x44, 0xff, 0x27, 0xda, 0x05, 0xda, 0x90, 0x07, 0x84, 0x59, 0x03, 0xa7, 0x4f, 0x03, 0xe5, 0xa9, 0x02, 0xbd, 0x9a, 0x02, 0xeb, 0x3c, 0x02, 0xbf, 0xb4, 0x00, 0xda, 0xea, 0xff, 0x0b, 0x2a, 0x01, 0x93, 0x29, 0x02, 0x29, 0x49, 0x01, 0x6a, 0xa6, 0x00, 0x37, 0xb2, 0x00, 0x1f, 0x86, 0x00, 0x63, 0x32, 0x00, 0xe8, 0x3a, 0x01, 0x79, 0x89, 0x00, 0x80, 0x41, 0x00, 0xdb, 0xee, 0x00, 0x3c, 0x97, 0x00, 0xaf, 0x2d, 0x01, 0xd6, 0xa5, 0x01, 0x49, 0x0f, 0x01, 0x38, 0x2e, 0xff, 0x82, 0x7e, 0xfe, 0xff, 0xd2, 0xfe, 0x2f, 0x24, 0xff, 0x92, 0x7e, 0xff, 0x86, 0x8e, 0xff, 0x38, 0x93, 0xff, 0x88, 0x54, 0xff, 0x46, 0x23, 0x07, 0xa8, 0x2b, 0x09, 0x4a, 0x46, 0x03, 0x5c, 0x39, 0x03, 0x1b, 0x83, 0x01, 0x55, 0x5c, 0x01, 0xbf, 0x43, 0x02, 0x7b, 0x48, 0x00, 0x96, 0xf7, 0xfe, 0xf4, 0x7f, 0x00, 0xe9, 0x73, 0x02, 0x9b, 0x4e, 0x01, 0x2e, 0x19, 0x01, 0x3e, 0xaa, 0x00, 0x12, 0xec, 0xff, 0x8c, 0xe3, 0x00, 0x0c, 0x4b, 0x01, 0x0d, 0xa0, 0x00, 0xa0, 0x33, 0x01, 0xee, 0xd2, 0x00, 0xee, 0xe2, 0xff, 0x0d, 0xf2, 0x00, 0xe0, 0x13, 0x01, 0xf9, 0xed, 0x00, 0x1f, 0xfd, 0x00, 0x7e, 0xbb, 0xff, 0xcb, 0xb5, 0xfe, 0x5b, 0xff, 0xfe, 0xe5, 0x68, 0xff, 0xd2, 0x6e, 0xff, 0x7d, 0x9c, 0xff, 0x47, 0x8a, 0xff, 0x58, 0x44, 0x08, 0x90, 0xda, 0x09, 0x95, 0x47, 0x03, 0x81, 0xd5, 0x03, 0x76, 0xfa, 0x01, 0x03, 0xa7, 0x01, 0x34, 0x99, 0x01, 0x79, 0x88, 0xfe, 0x89, 0xf9, 0xfc, 0xa5, 0x59, 0x00, 0xd7, 0x58, 0x03, 0x83, 0xa6, 0x00, 0xc8, 0xbe, 0x00, 0xf9, 0x75, 0x00, 0xbc, 0xe3, 0xff, 0x97, 0x05, 0x01, 0x38, 0xa1, 0x00, 0xcf, 0xf8, 0x00, 0x3b, 0xe1, 0x01, 0xbc, 0xde, 0x00, 0x9e, 0x41, 0x00, 0xc2, 0x8b, 0x00, 0x56, 0xf8, 0xff, 0x47, 0xc2, 0x00, 0x85, 0xdd, 0x00, 0x6e, 0x29, 0x00, 0xf4, 0x75, 0x00, 0x0a, 0xec, 0xff, 0xc6, 0xe5, 0xfe, 0xde, 0xd1, 0xfe, 0x93, 0x9a, 0xff, 0xd3, 0x8a, 0xff, 0x6a, 0x0b, 0x0a, 0x75, 0x86, 0x0b, 0xe6, 0xe3, 0x02, 0x98, 0x21, 0x04, 0x07, 0x1f, 0x02, 0x43, 0x91, 0x01, 0xc1, 0x33, 0x01, 0x25, 0x2e, 0xfd, 0x29, 0xa3, 0xfb, 0x23, 0x48, 0x00, 0x18, 0xf8, 0x03, 0x65, 0x30, 0x00, 0x7d, 0xac, 0xff, 0x60, 0x60, 0xff, 0x3f, 0xb3, 0xff, 0x56, 0x37, 0x01, 0xbb, 0x2c, 0x01, 0xea, 0xf8, 0x00, 0xcb, 0x0b, 0x01, 0x27, 0x0a, 0x01, 0xbf, 0x41, 0x00, 0x7b, 0xce, 0x00, 0xdb, 0xa6, 0x00, 0xd7, 0x1a, 0x00, 0x34, 0xee, 0xff, 0xb5, 0xec, 0xff, 0x3d, 0x84, 0x00, 0xc1, 0xab, 0x00, 0x72, 0x2e, 0x00, 0xed, 0x6b, 0xff, 0x7a, 0xfd, 0xfe, 0xd7, 0x05, 0xff, 0xce, 0x42, 0x0c, 0x9e, 0xc5, 0x0d, 0x17, 0x74, 0x02, 0xcd, 0x0e, 0x04, 0x8d, 0xab, 0x01, 0xea, 0x53, 0x01, 0xa2, 0x88, 0x01, 0xbf, 0x0a, 0xfc, 0x57, 0x16, 0xfa, 0x12, 0x8e, 0x00, 0xf1, 0x9c, 0x04, 0x87, 0x81, 0xff, 0x33, 0x2e, 0xff, 0xe3, 0xa9, 0xfe, 0x4d, 0xe6, 0xfe, 0xdd, 0xf4, 0x00, 0x45, 0x08, 0x01, 0xaf, 0xe7, 0x00, 0xb7, 0x86, 0x01, 0xb5, 0xc9, 0x00, 0x5b, 0x49, 0xff, 0xa5, 0x25, 0x01, 0xfe, 0xb7, 0x00, 0x18, 0x40, 0x00, 0x52, 0x6c, 0x00, 0x99, 0x25, 0xff, 0xb0, 0xc2, 0xff, 0x61, 0xbd, 0x00, 0xb5, 0x65, 0x00, 0xbd, 0xfc, 0xff, 0x3f, 0x58, 0x00, 0xa4, 0xbf, 0xff, 0x10, 0x0f, 0x0f, 0xc0, 0xba, 0x0f, 0x18, 0x89, 0x01, 0x4a, 0x32, 0x04, 0xf1, 0x9f, 0x01, 0x37, 0x4c, 0x01, 0x15, 0x43, 0x01, 0x70, 0x84, 0xfa, 0x96, 0x06, 0xf9, 0x66, 0x80, 0x01, 0x00, 0xfd, 0x04, 0x14, 0xd1, 0xfe, 0xb8, 0xd4, 0xfe, 0xc6, 0xbd, 0xfd, 0x90, 0x9b, 0xfe, 0xd5, 0xe0, 0x00, 0x1b, 0x74, 0x00, 0x9c, 0xc6, 0x00, 0x93, 0x63, 0x01, 0x86, 0x2e, 0x00, 0xfc, 0x69, 0xff, 0x9b, 0x02, 0x01, 0xad, 0xe6, 0xff, 0x16, 0xa9, 0x00, 0x3e, 0x4e, 0x00, 0x1f, 0x1c, 0xff, 0x0c, 0x0f, 0x00, 0xcf, 0xbb, 0xff, 0xc4, 0xef, 0xff, 0x31, 0xa7, 0x00, 0xb3, 0xff, 0x00, 0xd3, 0x31, 0x00, 0x9a, 0xef, 0x11, 0x6c, 0xb2, 0x11, 0xa3, 0x8d, 0x00, 0x17, 0x81, 0x04, 0x9d, 0xc4, 0x01, 0x80, 0x50, 0x01, 0x86, 0xcb, 0x00, 0x06, 0x84, 0xf8, 0xca, 0x23, 0xf8, 0xb0, 0x0a, 0x03, 0xab, 0x6c, 0x05, 0xb1, 0x1d, 0xfe, 0x3d, 0x94, 0xfe, 0x32, 0xbd, 0xfc, 0x6e, 0x49, 0xfe, 0xf3, 0xff, 0x00, 0x46, 0x54, 0x00, 0xd5, 0x9e, 0x00, 0x4d, 0xec, 0x00, 0x1b, 0xbf, 0xff, 0x58, 0x10, 0xff, 0x65, 0x07, 0x01, 0x76, 0xec, 0xff, 0x5a, 0x01, 0x00, 0x16, 0xd8, 0xff, 0xc8, 0xff, 0xfe, 0x9f, 0xad, 0xff, 0xcb, 0x55, 0x00, 0x10, 0x33, 0x00, 0x49, 0xe4, 0xff, 0x98, 0xdf, 0x00, 0x3b, 0xa7, 0x00, 0x3c, 0xfb, 0x14, 0x63, 0xf0, 0x13, 0x86, 0xaf, 0xff, 0x2e, 0xa5, 0x04, 0x96, 0x4e, 0x01, 0x51, 0x1b, 0x01, 0x43, 0x75, 0x00, 0xb8, 0x93, 0xf6, 0x6b, 0xc0, 0xf7, 0xeb, 0x56, 0x04, 0x23, 0x64, 0x05, 0x5a, 0xc9, 0xfd, 0xfb, 0x7d, 0xfe, 0xcf, 0xbf, 0xfb, 0x05, 0xf5, 0xfd, 0xcd, 0xf4, 0x00, 0xfb, 0x41, 0x00, 0x62, 0xd0, 0x00, 0xb9, 0x90, 0x00, 0xec, 0x11, 0xff, 0xf7, 0xc4, 0xfe, 0x2b, 0xff, 0x00, 0x2f, 0xb4, 0xff, 0x75, 0xee, 0xff, 0xac, 0x12, 0xff, 0xde, 0x51, 0xfe, 0xd5, 0xa7, 0xff, 0xd4, 0x57, 0x00, 0xcb, 0x05, 0x00, 0x07, 0xfc, 0xff, 0x5c, 0x36, 0x01, 0x1e, 0x36, 0x00, 0x84, 0x67, 0x17, 0x7b, 0x8d, 0x16, 0xdc, 0x5c, 0xff, 0x50, 0x9e, 0x04, 0x5a, 0xd3, 0x00, 0x1a, 0x56, 0x00, 0x7a, 0x4a, 0x00, 0xdf, 0x06, 0xf5, 0xf0, 0x95, 0xf7, 0x66, 0x26, 0x05, 0xf3, 0xda, 0x04, 0x15, 0xb8, 0xfd, 0x66, 0x8a, 0xfe, 0x95, 0x4b, 0xfb, 0xe6, 0x71, 0xfd, 0xfc, 0x81, 0x00, 0xbc, 0x5b, 0x00, 0x27, 0x04, 0x01, 0x95, 0x3c, 0x00, 0xe5, 0xba, 0xfe, 0x4d, 0x61, 0xfe, 0x2e, 0x06, 0x01, 0xf1, 0x4c, 0xff, 0xc4, 0x56, 0xff, 0xc7, 0x33, 0xff, 0x07, 0x15, 0xfe, 0x5b, 0x40, 0xff, 0x01, 0xc8, 0xff, 0x62, 0xdd, 0xff, 0x87, 0x31, 0x00, 0xda, 0xee, 0x00, 0x86, 0x40, 0x00, 0xe7, 0xaf, 0x18, 0x1d, 0xa8, 0x19, 0x8b, 0x33, 0x00, 0x6d, 0x4e, 0x04, 0xab, 0xed, 0x00, 0x05, 0x01, 0xff, 0x5a, 0xe5, 0xff, 0xd7, 0x87, 0xf4, 0x4d, 0x8d, 0xf7, 0x6a, 0x5e, 0x05, 0xd6, 0x16, 0x04, 0x17, 0xd2, 0xfd, 0x1d, 0x8a, 0xfe, 0x74, 0x69, 0xfb, 0xa5, 0x49, 0xfd, 0x31, 0xa5, 0xff, 0x35, 0x2d, 0x00, 0x85, 0x8e, 0x01, 0xf9, 0x10, 0x00, 0xd6, 0xa8, 0xfe, 0xf4, 0x0b, 0xfe, 0xc7, 0x4e, 0x00, 0x6d, 0xe4, 0xff, 0xdc, 0x1f, 0xff, 0x0a, 0xb0, 0xfe, 0x75, 0x0f, 0xfe, 0xd9, 0xc5, 0xfe, 0x01, 0x11, 0x00, 0x01, 0xa2, 0xff, 0x08, 0x8e, 0xff, 0x64, 0xfd, 0x00, 0x36, 0xfc, 0xff, 0xf6, 0x4b, 0x18, 0x8e, 0x92, 0x1c, 0xb8, 0xed, 0x02, 0x9c, 0xa4, 0x03, 0xb4, 0x40, 0x01, 0xa0, 0xe2, 0xfd, 0x43, 0xbd, 0xfe, 0x1a, 0xae, 0xf4, 0xdf, 0x92, 0xf7, 0x31, 0xae, 0x04, 0x79, 0x64, 0x03, 0x4f, 0x11, 0xfe, 0x94, 0x28, 0xfe, 0x2e, 0xb3, 0xfb, 0x99, 0x42, 0xfd, 0xd9, 0xcc, 0xfe, 0x71, 0xe8, 0xff, 0x88, 0xa9, 0x01, 0x71, 0x39, 0x00, 0x45, 0x45, 0xfe, 0xb8, 0xc8, 0xfd, 0x7c, 0x56, 0x00, 0x3c, 0xe3, 0xff, 0x7e, 0x11, 0xff, 0x39, 0x28, 0xfe, 0xee, 0x0b, 0xfe, 0x7f, 0xa1, 0xfe, 0x80, 0x8e, 0xff, 0x97, 0x84, 0xff, 0x14, 0x2a, 0xff, 0x9e, 0xe5, 0x00, 0xd8, 0x5d, 0x00, 0xf6, 0x73, 0x17, 0x1c, 0x1e, 0x1e, 0x9b, 0xcf, 0x06, 0x5f, 0x19, 0x04, 0xe0, 0x27, 0x01, 0x0d, 0x79, 0xfd, 0xe5, 0xae, 0xfd, 0x12, 0xc1, 0xf4, 0x66, 0x85, 0xf7, 0x2d, 0x99, 0x03, 0x1f, 0xa9, 0x02, 0x02, 0xbb, 0xfe, 0x4d, 0xc6, 0xfd, 0x0a, 0xb2, 0xfb, 0x79, 0xa3, 0xfd, 0x34, 0xe0, 0xfd, 0xcd, 0xab, 0xff, 0xd7, 0xad, 0x01, 0xa8, 0xac, 0xff, 0xb5, 0x64, 0xff, 0x1e, 0xd5, 0xfd, 0xf0, 0x52, 0xff, 0x0c, 0xfb, 0xff, 0xd0, 0xf3, 0xfe, 0x3e, 0x89, 0xfe, 0xd8, 0xfa, 0xfd, 0xd3, 0xfe, 0xfd, 0x94, 0xe7, 0xfe, 0x9e, 0x58, 0xff, 0x36, 0xa6, 0xff, 0x96, 0x2d, 0x01, 0xea, 0x32, 0x00, 0x41, 0xc3, 0x17, 0x73, 0x01, 0x1e, 0xe8, 0x5f, 0x09, 0x3e, 0x73, 0x06, 0x8d, 0xae, 0x00, 0xb9, 0x64, 0xfd, 0xbd, 0x70, 0xfd, 0x85, 0xca, 0xf4, 0x78, 0xcf, 0xf7, 0xbd, 0xfe, 0x01, 0x04, 0x2f, 0x01, 0x6c, 0xcd, 0xff, 0x9a, 0xb1, 0xfd, 0x45, 0x62, 0xfb, 0x58, 0x22, 0xfe, 0xbf, 0x3f, 0xfd, 0x59, 0xcb, 0xfe, 0x01, 0x19, 0x02, 0xfb, 0x12, 0x00, 0x12, 0xf7, 0xfe, 0x48, 0x64, 0xfe, 0xae, 0x5b, 0xff, 0x54, 0x04, 0x00, 0xd5, 0xc4, 0xfe, 0x14, 0x0b, 0xfe, 0x59, 0xf8, 0xfd, 0x64, 0x79, 0xfd, 0x2e, 0x20, 0xff, 0x79, 0xd7, 0xff, 0x26, 0x8c, 0xff, 0xe6, 0xaa, 0x00, 0x21, 0x40, 0x00, 0xec, 0xeb, 0x18, 0x46, 0x49, 0x1d, 0x02, 0xeb, 0x09, 0x32, 0xc8, 0x09, 0xf6, 0xd4, 0x00, 0x12, 0x9f, 0xfc, 0xe2, 0x5a, 0xfd, 0xf8, 0xf7, 0xf4, 0xb4, 0xc2, 0xf8, 0xa8, 0x3c, 0x00, 0x8a, 0x0f, 0xfe, 0x84, 0x8f, 0x00, 0xa4, 0x28, 0xfe, 0xba, 0x7e, 0xfb, 0x2e, 0xdd, 0xfe, 0x0a, 0x92, 0xfb, 0xa2, 0xec, 0xfe, 0x45, 0x9b, 0x02, 0x3d, 0x66, 0xff, 0xbf, 0x77, 0xff, 0x3b, 0x97, 0xfe, 0x62, 0x03, 0xff, 0x2d, 0x12, 0x00, 0x71, 0xc5, 0xfe, 0x31, 0x77, 0xfd, 0x13, 0x30, 0xfe, 0xe1, 0x98, 0xfd, 0x79, 0x9f, 0xfe, 0xcf, 0x3a, 0xff, 0x6e, 0x92, 0xff, 0xb3, 0x50, 0x01, 0x79, 0x45, 0x00, 0xd8, 0xfd, 0x1a, 0x4a, 0x71, 0x1c, 0xe0, 0x00, 0x09, 0x97, 0xc5, 0x0c, 0x98, 0x8e, 0x01, 0xb0, 0x25, 0xfc, 0x71, 0x64, 0xfd, 0x7e, 0x79, 0xf5, 0xc1, 0x6b, 0xfa, 0xa1, 0x4b, 0xff, 0xa0, 0x7f, 0xf9, 0xe4, 0x6e, 0x00, 0x17, 0x67, 0xff, 0xdf, 0x9c, 0xfa, 0x84, 0x5a, 0x00, 0xa8, 0x9e, 0xfb, 0x15, 0xb1, 0xfd, 0x38, 0x1c, 0x03, 0xb4, 0x6f, 0xff, 0x3a, 0x95, 0xff, 0x80, 0xd8, 0xfe, 0xae, 0x74, 0xfe, 0xbb, 0x16, 0x00, 0x05, 0xf6, 0xfe, 0x8a, 0x3f, 0xfd, 0x68, 0xa6, 0xfe, 0xa0, 0x7b, 0xfd, 0x34, 0x01, 0xfe, 0x55, 0x48, 0xff, 0xa7, 0x91, 0xff, 0xfb, 0xe3, 0x00, 0x32, 0xd5, 0xff, 0x01, 0x66, 0x1e, 0xce, 0x5d, 0x1b, 0x7b, 0xc3, 0x06, 0x5a, 0x93, 0x0f, 0x89, 0x5a, 0x01, 0x42, 0x20, 0xfc, 0xbe, 0xb6, 0xfd, 0x19, 0xd3, 0xf5, 0xb6, 0x0d, 0xfd, 0x4a, 0xa7, 0xfe, 0xe2, 0x56, 0xf4, 0xb9, 0xd5, 0xff, 0x07, 0x2c, 0x00, 0xef, 0xca, 0xf9, 0x10, 0x0c, 0x02, 0xfe, 0x6c, 0xfb, 0x96, 0x89, 0xfd, 0x26, 0xb8, 0x03, 0x8c, 0x82, 0xfe, 0x42, 0x4d, 0xff, 0x68, 0x9d, 0xff, 0xb6, 0x9a, 0xfe, 0x26, 0xdc, 0xff, 0x5b, 0xf3, 0xfe, 0xfa, 0xb8, 0xfc, 0x99, 0xce, 0xfe, 0xc5, 0xff, 0xfd, 0x7e, 0xed, 0xfd, 0xf6, 0x91, 0xfe, 0xe3, 0x2a, 0xff, 0xba, 0xe4, 0x00, 0xbd, 0xb7, 0xff, 0x4a, 0xf5, 0x21, 0x67, 0x8e, 0x1a, 0xea, 0x8a, 0x03, 0xcb, 0xb7, 0x12, 0x7a, 0xb7, 0x00, 0xc9, 0x9a, 0xfb, 0x82, 0x2b, 0xff, 0xc2, 0x45, 0xf6, 0x80, 0xfc, 0xff, 0x52, 0x7c, 0xff, 0x23, 0xd5, 0xee, 0xee, 0x4c, 0xfd, 0xba, 0xa6, 0x02, 0x0d, 0xa9, 0xf8, 0xa4, 0xa0, 0x02, 0xb7, 0xd4, 0xfc, 0xa7, 0xba, 0xfc, 0x2a, 0xdc, 0x03, 0x44, 0x22, 0xfe, 0x88, 0x11, 0xff, 0xf4, 0x82, 0x00, 0x6f, 0xf9, 0xfe, 0x40, 0x5c, 0xff, 0x18, 0xf8, 0xfe, 0x1d, 0xb5, 0xfc, 0xd4, 0xd7, 0xfe, 0xbf, 0xf1, 0xfd, 0x7d, 0x72, 0xfd, 0x36, 0x60, 0xfe, 0xb5, 0x84, 0xff, 0x7d, 0xfc, 0x00, 0x91, 0xbe, 0xfe, 0xba, 0xe5, 0x25, 0x94, 0xa2, 0x1a, 0xc9, 0xc5, 0xfe, 0x06, 0xbe, 0x15, 0x65, 0x5b, 0x00, 0x1e, 0x4f, 0xf9, 0x0f, 0xff, 0x00, 0x29, 0x49, 0xf6, 0x47, 0x9d, 0x03, 0xac, 0xc5, 0x01, 0xa5, 0xfc, 0xe8, 0x23, 0x6c, 0xf9, 0xfd, 0xf2, 0x04, 0x31, 0x38, 0xf9, 0xcc, 0x44, 0x02, 0x9d, 0x68, 0xfd, 0x30, 0x5e, 0xfc, 0x4c, 0xdd, 0x03, 0x61, 0x36, 0xfe, 0xd4, 0x71, 0xfe, 0x0a, 0xaa, 0x00, 0x07, 0xba, 0xff, 0x8a, 0x58, 0xff, 0x5b, 0x13, 0xff, 0xb3, 0x4e, 0xfc, 0xcd, 0xf8, 0xfd, 0xb6, 0x1a, 0xfe, 0xe7, 0xd7, 0xfd, 0x10, 0x0e, 0xfe, 0xcc, 0x0b, 0xff, 0x42, 0x69, 0x00, 0x03, 0x75, 0xfe, 0x03, 0xdd, 0x29, 0xe6, 0xb6, 0x1c, 0xfa, 0xf0, 0xf8, 0x58, 0x52, 0x16, 0x00, 0xb5, 0x01, 0x81, 0x4d, 0xf7, 0x6a, 0xce, 0x02, 0xe9, 0x18, 0xf6, 0x24, 0x98, 0x06, 0xc5, 0x85, 0x05, 0xda, 0x6e, 0xe5, 0x45, 0x75, 0xf4, 0x19, 0x1d, 0x06, 0x58, 0xfb, 0xfa, 0x4f, 0xba, 0x01, 0x3e, 0x7d, 0xfe, 0xc7, 0x13, 0xfc, 0x8d, 0x68, 0x03, 0x8e, 0x5d, 0xfe, 0xf3, 0xf1, 0xfd, 0x28, 0x50, 0x00, 0xa6, 0x14, 0x01, 0x16, 0xda, 0xff, 0x76, 0x43, 0xfe, 0x03, 0x1b, 0xfc, 0x86, 0xce, 0xfd, 0xf5, 0x88, 0xfe, 0xb1, 0xeb, 0xfd, 0x30, 0xb7, 0xfc, 0xea, 0xe6, 0xfe, 0x29, 0x70, 0x01, 0x07, 0x42, 0xfe, 0x85, 0x9d, 0x2f, 0x2b, 0x81, 0x1f, 0x3a, 0x35, 0xf2, 0x92, 0x53, 0x13, 0xa1, 0xb7, 0x02, 0xcc, 0x0c, 0xf7, 0xfd, 0x09, 0x05, 0x54, 0x11, 0xf5, 0xc5, 0xff, 0x06, 0x19, 0xb1, 0x09, 0x1a, 0x79, 0xe4, 0x21, 0x03, 0xf0, 0xdc, 0x25, 0x05, 0xda, 0x3d, 0xfd, 0xa8, 0x04, 0x02, 0x3c, 0x43, 0xff, 0x74, 0x97, 0xfb, 0xe2, 0x57, 0x02, 0xe4, 0x86, 0xfe, 0xd7, 0x56, 0xfd, 0xb8, 0x35, 0x00, 0x8b, 0xbf, 0x01, 0xf0, 0xe1, 0xff, 0x62, 0x8e, 0xfd, 0x5e, 0x40, 0xfc, 0xfd, 0x8b, 0xfd, 0x1b, 0xd6, 0xfd, 0x50, 0x02, 0xfe, 0xfa, 0xa8, 0xfc, 0x1f, 0x23, 0xff, 0x51, 0xca, 0x01, 0x8c, 0xd7, 0xfd, 0xce, 0x19, 0x35, 0xa5, 0x73, 0x21, 0xf4, 0xf7, 0xec, 0xc4, 0xc7, 0x10, 0xbb, 0xd3, 0x02, 0x06, 0x2b, 0xf7, 0xb7, 0x04, 0x07, 0x8c, 0x6a, 0xf3, 0xdb, 0x5e, 0x07, 0xf6, 0x86, 0x0f, 0xbb, 0x3b, 0xe3, 0xc4, 0x68, 0xec, 0x93, 0x1f, 0x04, 0x5a, 0xe5, 0xfe, 0xb7, 0x37, 0x03, 0xbc, 0x1e, 0xff, 0x0c, 0x85, 0xfb, 0xfe, 0xf5, 0x00, 0x32, 0xc2, 0xfe, 0x6f, 0x55, 0xfd, 0x62, 0xe4, 0xff, 0x2c, 0x96, 0x01, 0xb0, 0x05, 0x00, 0x30, 0x90, 0xfd, 0xa7, 0xb3, 0xfb, 0x11, 0xfa, 0xfc, 0xe2, 0x71, 0xfd, 0x2e, 0xf4, 0xfe, 0x2d, 0xf3, 0xfc, 0xa8, 0x0d, 0xff, 0xa9, 0xcf, 0x01, 0x7c, 0xd3, 0xfd, 0x45, 0xc8, 0x3a, 0xec, 0xda, 0x24, 0x2e, 0xf1, 0xe6, 0x3d, 0x7e, 0x0b, 0x67, 0xcc, 0x00, 0xb1, 0x8a, 0xfa, 0xab, 0x11, 0x0a, 0xff, 0xad, 0xef, 0x09, 0x9a, 0x06, 0x4d, 0x75, 0x13, 0xee, 0xa0, 0xe3, 0x51, 0x6e, 0xeb, 0x75, 0xa3, 0x02, 0x69, 0x6a, 0xfe, 0xc1, 0x11, 0x04, 0xf8, 0xa9, 0xff, 0xd0, 0xff, 0xfa, 0xdd, 0xcc, 0xff, 0xc2, 0xcb, 0xfe, 0x3e, 0xe9, 0xfc, 0x67, 0x31, 0xff, 0xf6, 0x9a, 0x01, 0xfa, 0xe4, 0xff, 0xe9, 0xe1, 0xfc, 0x2d, 0xf9, 0xfa, 0x15, 0x86, 0xfc, 0x70, 0x76, 0xfd, 0x18, 0xd0, 0xff, 0xa4, 0x27, 0xfd, 0xc1, 0xc7, 0xfe, 0x3c, 0x0f, 0x02, 0x14, 0x07, 0xfe, 0x7a, 0x87, 0x40, 0x4e, 0x5b, 0x27, 0x29, 0xac, 0xe2, 0x12, 0xa6, 0x07, 0xd5, 0x0c, 0xfe, 0x7c, 0x38, 0xff, 0xbd, 0x8d, 0x0b, 0xd1, 0x83, 0xec, 0x37, 0xa4, 0x07, 0xa8, 0xee, 0x15, 0x09, 0x96, 0xe6, 0xb0, 0x42, 0xeb, 0x6f, 0xa7, 0x00, 0xaf, 0x20, 0xfd, 0x6f, 0x5e, 0x05, 0x48, 0x8e, 0x01, 0xa2, 0x5a, 0xfa, 0x1a, 0x8a, 0xfe, 0x14, 0xfa, 0xfe, 0xf7, 0x17, 0xfd, 0x9a, 0xa7, 0xfe, 0x3a, 0xb2, 0x01, 0x17, 0x5a, 0xff, 0x67, 0xf8, 0xfc, 0xb5, 0xcf, 0xfa, 0xc0, 0x04, 0xfc, 0x74, 0xbe, 0xfd, 0x6e, 0x84, 0x00, 0x72, 0x7f, 0xfd, 0xd2, 0x00, 0xff, 0x88, 0xce, 0x02, 0xdf, 0xc9, 0xfd, 0xf9, 0x4d, 0x45, 0xc2, 0x54, 0x29, 0x65, 0x63, 0xdf, 0x45, 0x60, 0x04, 0xec, 0x44, 0xfb, 0xa0, 0x85, 0x02, 0xc6, 0x5a, 0x0b, 0x36, 0xf1, 0xea, 0x97, 0xcf, 0x07, 0x9f, 0xff, 0x17, 0x98, 0x41, 0xea, 0x96, 0x32, 0xea, 0x8f, 0x29, 0xff, 0x21, 0x02, 0xfb, 0x43, 0xf3, 0x06, 0xb3, 0x1d, 0x03, 0x8f, 0xcd, 0xf8, 0xa9, 0xdd, 0xfd, 0xd1, 0x4d, 0xff, 0x55, 0xf7, 0xfc, 0x76, 0xba, 0xfd, 0xc4, 0x6d, 0x01, 0xf4, 0xcf, 0xfe, 0xde, 0xae, 0xfd, 0x44, 0x5a, 0xfa, 0xac, 0x12, 0xfb, 0xc2, 0x0a, 0xfe, 0x2d, 0xfb, 0x00, 0x1b, 0xf0, 0xfd, 0xac, 0x59, 0xff, 0xe2, 0xd5, 0x02, 0x80, 0x46, 0xfd, 0x5b, 0x4f, 0x49, 0xba, 0xef, 0x2a, 0x96, 0x5f, 0xdd, 0x95, 0xe9, 0x01, 0xdb, 0xe1, 0xf8, 0x84, 0x3d, 0x04, 0x9a, 0xbc, 0x0a, 0x56, 0x19, 0xeb, 0xd6, 0x9f, 0x06, 0xcd, 0xaf, 0x19, 0xd3, 0xd7, 0xee, 0x43, 0x1d, 0xe9, 0xd2, 0x3e, 0xfe, 0xdd, 0x86, 0xf8, 0x92, 0x07, 0x08, 0x01, 0x99, 0x04, 0x7d, 0x86, 0xf7, 0x34, 0xbf, 0xfd, 0x0d, 0xca, 0xff, 0xad, 0x26, 0xfc, 0x55, 0xe4, 0xfc, 0x03, 0xa9, 0x01, 0xe3, 0x70, 0xfe, 0xee, 0x57, 0xfe, 0xb8, 0xcd, 0xf9, 0x3d, 0x4c, 0xfa, 0x99, 0x5e, 0xfe, 0x7e, 0x5e, 0x01, 0xed, 0x7c, 0xfe, 0x24, 0x74, 0xff, 0x7a, 0x53, 0x02, 0x60, 0x51, 0xfd, 0x57, 0x05, 0x4b, 0x70, 0xc4, 0x2d, 0x74, 0x58, 0xdc, 0xb3, 0x02, 0x00, 0x92, 0xed, 0xf6, 0xc1, 0x19, 0x04, 0xc7, 0x3b, 0x0a, 0xc8, 0xdd, 0xeb, 0xe3, 0xcd, 0x03, 0x10, 0x1d, 0x1b, 0xfc, 0xbe, 0xf4, 0xa6, 0xda, 0xe7, 0xba, 0x21, 0xfd, 0xdd, 0x0d, 0xf6, 0x6d, 0xe0, 0x07, 0x87, 0x7d, 0x06, 0xd3, 0xca, 0xf6, 0x5d, 0x9c, 0xfd, 0x93, 0xfe, 0xff, 0xfe, 0x1b, 0xfb, 0x98, 0x39, 0xfc, 0x70, 0x33, 0x02, 0x4f, 0xad, 0xfd, 0xef, 0xba, 0xfe, 0x54, 0xda, 0xf9, 0xd9, 0x97, 0xf9, 0x0b, 0x81, 0xfe, 0x33, 0x9d, 0x01, 0x34, 0xbd, 0xfe, 0x4d, 0x28, 0xff, 0xc9, 0xf4, 0x01, 0xa8, 0x5c, 0xfd, 0xff, 0x58, 0x4d, 0xbe, 0x42, 0x2e, 0x71, 0x3c, 0xdd, 0xdb, 0x18, 0xff, 0xbb, 0xd2, 0xf4, 0x0d, 0xd1, 0x03, 0x52, 0x25, 0x09, 0x91, 0x2e, 0xec, 0x78, 0x5b, 0x01, 0xf5, 0x8e, 0x1c, 0x52, 0xaf, 0xf9, 0x13, 0x19, 0xe8, 0xe6, 0x78, 0xfb, 0x6f, 0xd8, 0xf3, 0x86, 0xd9, 0x07, 0xb8, 0x80, 0x07, 0x25, 0x49, 0xf7, 0xa3, 0x25, 0xfd, 0x24, 0x39, 0x00, 0xf9, 0x3d, 0xfa, 0x70, 0x0c, 0xfc, 0x0a, 0x55, 0x02, 0x9a, 0xe8, 0xfc, 0x2c, 0x36, 0xff, 0x34, 0x34, 0xfa, 0x26, 0x70, 0xf9, 0x76, 0x87, 0xfe, 0x29, 0xb4, 0x01, 0xc4, 0x3a, 0xfe, 0x45, 0x3b, 0xff, 0x10, 0x8c, 0x01, 0x3a, 0x3a, 0xfd, 0x35, 0xb7, 0x4d, 0x26, 0x62, 0x2f, 0x40, 0x45, 0xdf, 0x94, 0x6e, 0xfe, 0x9d, 0x7c, 0xf2, 0x2a, 0xca, 0x02, 0xf8, 0xe9, 0x08, 0xa5, 0x28, 0xeb, 0x88, 0xb1, 0xfe, 0x9c, 0xd5, 0x1d, 0xdf, 0xb5, 0xfd, 0x91, 0x7a, 0xe9, 0x53, 0xb1, 0xf9, 0x9d, 0xff, 0xf1, 0xa0, 0xd4, 0x06, 0x82, 0x24, 0x08, 0x01, 0xbe, 0xf8, 0x70, 0xe3, 0xfb, 0xe2, 0x4e, 0x00, 0x60, 0x53, 0xfa, 0xfe, 0x51, 0xfb, 0x6d, 0xdf, 0x01, 0x88, 0x94, 0xfc, 0xa8, 0xae, 0xff, 0x53, 0xba, 0xfa, 0x2a, 0xa7, 0xf9, 0x73, 0x05, 0xfe, 0x7d, 0x42, 0x01, 0xa8, 0xd3, 0xfd, 0xbf, 0xf8, 0xfe, 0xc7, 0x4e, 0x01, 0x48, 0x61, 0xfd, 0xb2, 0x59, 0x4c, 0x5f, 0x5c, 0x31, 0x8c, 0xa5, 0xe2, 0x94, 0x88, 0xfe, 0x60, 0x79, 0xef, 0x53, 0x97, 0x01, 0xc6, 0x4a, 0x0a, 0x30, 0xd3, 0xe8, 0x5d, 0x2b, 0xfc, 0x58, 0x5c, 0x1e, 0xa9, 0x22, 0x01, 0x1c, 0x8f, 0xec, 0xab, 0xb1, 0xf8, 0x86, 0x34, 0xf0, 0xd3, 0xc4, 0x04, 0x2d, 0x9e, 0x08, 0xd4, 0xf8, 0xfa, 0x6e, 0xbd, 0xfa, 0x48, 0xe1, 0xff, 0xcb, 0x21, 0xfb, 0xcf, 0x70, 0xfa, 0x73, 0x85, 0x01, 0x93, 0xb1, 0xfc, 0x9b, 0x24, 0x00, 0x50, 0xe1, 0xfb, 0xd8, 0x26, 0xf9, 0x3c, 0x32, 0xfd, 0x91, 0x14, 0x01, 0xf0, 0x30, 0xfd, 0xdf, 0x3e, 0xff, 0x45, 0xa4, 0x01, 0x28, 0x33, 0xfd, 0xd0, 0x72, 0x49, 0x8a, 0x9c, 0x33, 0x2f, 0x6b, 0xe7, 0x78, 0x2d, 0xff, 0x4c, 0x72, 0xec, 0x1e, 0x2e, 0x00, 0x1c, 0x47, 0x0c, 0x17, 0x39, 0xe6, 0x9d, 0x52, 0xf9, 0x4f, 0x7a, 0x1e, 0xd1, 0xd2, 0x03, 0x4c, 0xda, 0xf0, 0xcf, 0x7d, 0xf9, 0x38, 0x46, 0xed, 0x12, 0x79, 0x02, 0x11, 0x24, 0x09, 0x45, 0xa6, 0xfc, 0x79, 0xb7, 0xfa, 0x40, 0xc9, 0xfe, 0x5a, 0xa4, 0xfb, 0xe6, 0x56, 0xfa, 0x8f, 0x78, 0x01, 0xce, 0x4c, 0xfd, 0x40, 0xaf, 0x00, 0x80, 0xf2, 0xfb, 0x93, 0x17, 0xf9, 0x4e, 0x5d, 0xfc, 0x0c, 0x10, 0x00, 0xd7, 0x29, 0xfe, 0x59, 0x91, 0xff, 0x85, 0xb7, 0x01, 0x06, 0x48, 0xfd, 0xee, 0x4d, 0x46, 0x11, 0x69, 0x34, 0xf5, 0x4c, 0xed, 0x78, 0x01, 0x00, 0x54, 0xf1, 0xe9, 0x88, 0x3c, 0xff, 0x4c, 0x43, 0x0d, 0xfb, 0x10, 0xe5, 0x32, 0x59, 0xf5, 0xdb, 0x4e, 0x1e, 0xe7, 0x85, 0x06, 0x6e, 0x62, 0xf4, 0xdd, 0x7d, 0xfc, 0xfe, 0x8c, 0xe9, 0x6e, 0x1a, 0x00, 0x89, 0xe4, 0x09, 0x14, 0x05, 0xfd, 0xd5, 0x5a, 0xfb, 0x93, 0xa5, 0xfd, 0x54, 0x36, 0xfb, 0x3b, 0x7d, 0xfb, 0x9d, 0x5d, 0x02, 0x04, 0xd9, 0xfc, 0xfe, 0x08, 0x01, 0x9a, 0x1a, 0xfc, 0x43, 0x57, 0xf8, 0x19, 0x55, 0xfc, 0x33, 0xb2, 0xff, 0x7d, 0xf2, 0xfe, 0x0a, 0xd6, 0xff, 0x91, 0xd7, 0x01, 0x4d, 0x9a, 0xfd, 0xe8, 0x8c, 0x41, 0x1c, 0xd8, 0x35, 0x96, 0xbf, 0xf3, 0x36, 0x91, 0x00, 0x2f, 0xeb, 0xe8, 0x8f, 0xaf, 0xfc, 0xb4, 0xd7, 0x0c, 0xe7, 0xb1, 0xe7, 0x78, 0x6f, 0xef, 0xe5, 0x70, 0x1c, 0x2f, 0x52, 0x0b, 0xfe, 0xd7, 0xf5, 0x89, 0xc5, 0x01, 0x4d, 0xbf, 0xe6, 0x48, 0xee, 0xfb, 0x47, 0xe5, 0x0a, 0xb2, 0x3d, 0xfc, 0xf8, 0x68, 0xfc, 0x49, 0x83, 0xfd, 0xc6, 0x42, 0xfa, 0xbd, 0xe2, 0xfc, 0xb3, 0xcb, 0x02, 0x74, 0x0b, 0xfc, 0xd1, 0x00, 0x02, 0x46, 0x5f, 0xfb, 0x25, 0xeb, 0xf7, 0x5a, 0xc3, 0xfd, 0xbb, 0xc4, 0xfe, 0xc5, 0x93, 0xff, 0xa2, 0x6e, 0x00, 0xd8, 0x88, 0x01, 0xa5, 0x7e, 0xfd, 0xab, 0x3b, 0x3e, 0xcd, 0x9e, 0x34, 0xb1, 0x13, 0xfa, 0xd6, 0x36, 0x01, 0x57, 0x1b, 0xe8, 0xca, 0xea, 0xfa, 0xf2, 0x96, 0x09, 0xf8, 0x6b, 0xec, 0x0f, 0x0e, 0xeb, 0x33, 0x61, 0x18, 0xba, 0x41, 0x10, 0x15, 0x8f, 0xf6, 0x32, 0xd3, 0x06, 0x77, 0x9e, 0xe6, 0x94, 0xfe, 0xf5, 0xb3, 0x23, 0x0b, 0xd1, 0x5f, 0xfb, 0x61, 0xc9, 0xfc, 0xe5, 0x29, 0xff, 0x40, 0x47, 0xf9, 0x0c, 0x40, 0xfc, 0xe2, 0xb9, 0x03, 0xa7, 0xac, 0xfb, 0xdd, 0x67, 0x01, 0xb1, 0x50, 0xfc, 0x7d, 0x6e, 0xf7, 0x16, 0xd0, 0xfe, 0x98, 0x30, 0xff, 0xe8, 0x48, 0xff, 0x93, 0x6b, 0x00, 0x4c, 0x57, 0x01, 0x3a, 0xbf, 0xfd, 0x93, 0xe9, 0x3b, 0x68, 0x63, 0x32, 0x07, 0x41, 0xfe, 0x04, 0x53, 0x03, 0xce, 0x20, 0xe9, 0x29, 0xf4, 0xf8, 0xd0, 0x2e, 0x06, 0x18, 0xa7, 0xef, 0xb8, 0xd1, 0xe9, 0xfb, 0xae, 0x13, 0x76, 0xbd, 0x14, 0xc2, 0x31, 0xf8, 0x48, 0x24, 0x09, 0x4e, 0x2e, 0xea, 0x4b, 0x64, 0xef, 0xc4, 0xb0, 0x0a, 0xe4, 0x92, 0xfb, 0xd7, 0x3e, 0xfc, 0xb5, 0x97, 0x00, 0xf7, 0x41, 0xf9, 0x6f, 0x3f, 0xfc, 0x84, 0x25, 0x03, 0x27, 0x7d, 0xfb, 0xbc, 0x79, 0x01, 0x5a, 0xdc, 0xfd, 0xe2, 0x41, 0xf7, 0x88, 0x02, 0x00, 0xa4, 0x3e, 0xff, 0x84, 0xa5, 0xfe, 0x4c, 0x0d, 0x01, 0x31, 0xfc, 0x00, 0xee, 0x8a, 0xfd, 0x23, 0x39, 0x3a, 0x23, 0x39, 0x31, 0x19, 0xf5, 0xfd, 0x71, 0x54, 0x06, 0xac, 0x26, 0xec, 0xc4, 0xc0, 0xf4, 0xd1, 0x96, 0x04, 0x47, 0xfa, 0xf1, 0x30, 0x4f, 0xe8, 0xd9, 0x30, 0x10, 0xdc, 0xf2, 0x18, 0xe3, 0x8c, 0xf9, 0x9a, 0x55, 0x09, 0xce, 0x13, 0xef, 0xa5, 0x95, 0xe9, 0x96, 0xec, 0x09, 0xdb, 0xeb, 0xfc, 0x49, 0xef, 0xf9, 0xc8, 0x82, 0x01, 0xe2, 0x9e, 0xf9, 0x9e, 0xe9, 0xfb, 0x8f, 0x1e, 0x03, 0x51, 0x0b, 0xfb, 0xf8, 0x13, 0x01, 0x43, 0x0f, 0x00, 0x27, 0xea, 0xf7, 0x0f, 0x67, 0xff, 0x31, 0x87, 0xff, 0x0f, 0xfc, 0xfe, 0x0b, 0x98, 0x00, 0xb8, 0xa1, 0x00, 0x08, 0xe4, 0xfd, 0xd6, 0xc7, 0x3a, 0xb4, 0xa5, 0x2d, 0x9e, 0x23, 0xfc, 0x47, 0xf5, 0x0a, 0x0e, 0x63, 0xec, 0xf8, 0xd5, 0xf1, 0x53, 0x01, 0x05, 0xcc, 0xa8, 0xf3, 0xb7, 0x4b, 0xe7, 0xad, 0x84, 0x0c, 0x5a, 0xa2, 0x1b, 0x16, 0x22, 0xfb, 0x39, 0xe4, 0x09, 0x64, 0x8c, 0xf2, 0x14, 0xd8, 0xe6, 0x09, 0x18, 0x07, 0x5c, 0xd0, 0xfe, 0x7f, 0xd8, 0xf9, 0xf0, 0xde, 0xff, 0x81, 0x60, 0xf9, 0xd0, 0x69, 0xfb, 0x2b, 0x5e, 0x04, 0xef, 0x7a, 0xfb, 0x9a, 0x03, 0x00, 0x71, 0x91, 0x01, 0x6a, 0x7a, 0xf8, 0x61, 0x32, 0xff, 0x8f, 0xac, 0xff, 0xcb, 0x73, 0xfe, 0xca, 0xb2, 0x00, 0xd1, 0x97, 0x00, 0xe0, 0xb4, 0xfd, 0x5c, 0x69, 0x38, 0x2e, 0x5d, 0x2a, 0xec, 0x33, 0xfd, 0x85, 0x74, 0x0f, 0x6a, 0x14, 0xea, 0x64, 0xf9, 0xf0, 0xdb, 0x8e, 0x07, 0x82, 0xbe, 0xf3, 0x1c, 0x78, 0xe8, 0x84, 0x8a, 0x05, 0x27, 0x40, 0x1c, 0x7e, 0xfd, 0xfe, 0xb1, 0x53, 0x09, 0x93, 0x8f, 0xf8, 0x4c, 0x3c, 0xe4, 0xd6, 0xf4, 0x02, 0xd7, 0x73, 0x01, 0x93, 0x5b, 0xfa, 0xfa, 0x6c, 0xfe, 0x1b, 0x35, 0xf8, 0x71, 0x2d, 0xfa, 0x7f, 0x72, 0x05, 0xf9, 0x22, 0xfd, 0xe0, 0xf0, 0xfe, 0x89, 0x30, 0x03, 0x6f, 0xfd, 0xf7, 0xc6, 0xa9, 0xfd, 0xb5, 0x76, 0x01, 0x55, 0x48, 0xfe, 0x52, 0x49, 0x00, 0xbb, 0x2d, 0x00, 0x02, 0xa0, 0xfd, 0x94, 0x25, 0x34, 0x58, 0xdf, 0x26, 0x35, 0xf2, 0xfe, 0x55, 0x86, 0x12, 0x26, 0x6c, 0xeb, 0x5d, 0x7e, 0xf0, 0xe5, 0xa0, 0x07, 0xe2, 0xdb, 0xf5, 0x15, 0xa0, 0xe8, 0xeb, 0x0f, 0xff, 0x02, 0xf3, 0x1a, 0x8b, 0x91, 0x02, 0xa4, 0x5c, 0x08, 0x07, 0x7e, 0xfe, 0x41, 0x34, 0xe5, 0x96, 0xc3, 0xfd, 0x1b, 0xdf, 0x03, 0xdb, 0xf2, 0xf9, 0xc6, 0xaa, 0xfd, 0x18, 0xb8, 0xf8, 0x85, 0x06, 0xf8, 0xf0, 0x5f, 0x04, 0xb6, 0x2e, 0xfe, 0x9d, 0xb0, 0x00, 0x84, 0xe3, 0x03, 0xe1, 0xcf, 0xf5, 0x2d, 0xca, 0xfc, 0x0b, 0xae, 0x03, 0x64, 0x3c, 0xfe, 0x7e, 0x53, 0xff, 0x4a, 0xfc, 0xff, 0x53, 0x24, 0xfe, 0x98, 0x7e, 0x32, 0x4f, 0x2c, 0x22, 0xf2, 0xa5, 0xfa, 0x19, 0x11, 0x17, 0xa8, 0xe4, 0xf1, 0xbe, 0x8d, 0xf0, 0x62, 0x06, 0x06, 0x8e, 0x14, 0xf5, 0xd6, 0xa7, 0xe9, 0xef, 0xc2, 0xfa, 0xd7, 0x03, 0x1b, 0xe1, 0x20, 0x05, 0xc9, 0x40, 0x03, 0x38, 0xb4, 0x03, 0xf5, 0x0e, 0xea, 0xfd, 0xcb, 0xf9, 0x1d, 0xe0, 0x04, 0xcc, 0xf0, 0xfa, 0x18, 0xf4, 0xfb, 0x67, 0xe9, 0xf8, 0x7d, 0x7e, 0xf7, 0xa5, 0x30, 0x02, 0x18, 0x58, 0xff, 0xbf, 0xf7, 0x00, 0xad, 0xfc, 0x03, 0xf3, 0x13, 0xf6, 0xac, 0x7a, 0xfb, 0x19, 0xbe, 0x04, 0x68, 0xb0, 0xfe, 0x43, 0xc0, 0xfe, 0x50, 0xd7, 0xff, 0xe9, 0xba, 0xfe, 0xcf, 0x1c, 0x2f, 0xf6, 0x86, 0x1e, 0xc8, 0xf3, 0xfa, 0xf8, 0x1b, 0x19, 0x6d, 0x3c, 0xf4, 0x7d, 0x9d, 0xf0, 0x09, 0x21, 0x06, 0xae, 0x00, 0xf8, 0x8c, 0xdd, 0xea, 0x95, 0xa1, 0xf6, 0xb7, 0xae, 0x19, 0x00, 0xad, 0x05, 0xa1, 0x72, 0xfd, 0x4f, 0x2b, 0x0a, 0xa4, 0x26, 0xf1, 0xc2, 0xdb, 0xf3, 0xcd, 0xc0, 0x06, 0x47, 0xf2, 0xfb, 0xec, 0x8f, 0xf9, 0x47, 0x33, 0xfb, 0x0b, 0x18, 0xf8, 0xca, 0x03, 0x00, 0xf0, 0x63, 0xfe, 0x47, 0x6d, 0xff, 0x2f, 0x9f, 0x04, 0x32, 0x5c, 0xf9, 0x9b, 0x1e, 0xfa, 0x84, 0x19, 0x03, 0x87, 0x11, 0x00, 0x6c, 0x13, 0xff, 0xde, 0xef, 0xff, 0xb0, 0xd0, 0xfe, 0x64, 0xe5, 0x2a, 0xcb, 0x72, 0x1b, 0xf1, 0xc4, 0xfc, 0x1a, 0xac, 0x18, 0x29, 0x69, 0xf5, 0x1c, 0xc6, 0xf2, 0xac, 0x13, 0x05, 0xa2, 0xe3, 0xf9, 0x30, 0x1f, 0xed, 0xf5, 0x3a, 0xf4, 0xb4, 0xbb, 0x17, 0xcb, 0x72, 0x04, 0x92, 0x0a, 0xfb, 0xf0, 0x6d, 0x0c, 0xa9, 0xae, 0xf5, 0x25, 0x99, 0xf2, 0x81, 0xa2, 0x06, 0xc8, 0xdd, 0xfc, 0x89, 0x6c, 0xf8, 0x45, 0x74, 0xfc, 0x57, 0x1c, 0xf9, 0x0b, 0x39, 0xff, 0xa5, 0x29, 0xfd, 0x67, 0x10, 0xfd, 0xa1, 0xbf, 0x03, 0xb8, 0x5d, 0xfc, 0xdc, 0x31, 0xfb, 0x6c, 0x72, 0x01, 0x73, 0x53, 0xff, 0x8a, 0x86, 0xff, 0x8d, 0x19, 0x01, 0x7a, 0xf0, 0xfe, 0x92, 0x76, 0x27, 0xd2, 0x54, 0x18, 0xef, 0xab, 0xfd, 0x55, 0xb2, 0x18, 0x1f, 0xd8, 0xf6, 0x70, 0xde, 0xf4, 0x88, 0xb7, 0x04, 0x81, 0x6c, 0xfa, 0x52, 0xd1, 0xef, 0xaa, 0x15, 0xf4, 0x30, 0x59, 0x14, 0xa2, 0xb1, 0x04, 0x6a, 0x9a, 0xfa, 0xd8, 0x5a, 0x0b, 0x32, 0x46, 0xf8, 0x16, 0xb0, 0xf3, 0xe7, 0x3d, 0x06, 0x61, 0xad, 0xfd, 0x09, 0x17, 0xf9, 0x78, 0xb3, 0xfc, 0x4a, 0xe9, 0xf9, 0x84, 0xeb, 0xfe, 0xa2, 0x51, 0xfd, 0xb1, 0xff, 0xfb, 0x44, 0x5e, 0x01, 0x29, 0x66, 0xfd, 0xd6, 0x32, 0xfd, 0x6a, 0x8b, 0x01, 0x49, 0x76, 0xfe, 0xb5, 0x23, 0xff, 0x4d, 0xc1, 0x01, 0xba, 0x4e, 0xff, 0xeb, 0x27, 0x28, 0xe5, 0x4b, 0x18, 0xd3, 0xfb, 0xf2, 0xb9, 0x87, 0x19, 0x57, 0xed, 0x01, 0x5f, 0x32, 0xf1, 0x64, 0xb6, 0xff, 0x6d, 0xc0, 0xfd, 0x90, 0x63, 0xf2, 0xa7, 0x3c, 0xf5, 0xca, 0xc7, 0x14, 0x81, 0xc9, 0xfe, 0x7d, 0x52, 0xf6, 0xbf, 0x4b, 0x09, 0xc1, 0x72, 0xfd, 0x66, 0x83, 0xf9, 0xa1, 0xfe, 0x08, 0x2c, 0x28, 0x02, 0x5c, 0x39, 0xfc, 0x7b, 0x14, 0x00, 0xf3, 0x9e, 0xfb, 0xa7, 0x74, 0xfe, 0xbe, 0xbe, 0xf9, 0xa1, 0x17, 0xf8, 0xc3, 0x72, 0xfe, 0x00, 0x28, 0xfd, 0x8c, 0x86, 0xfb, 0xb7, 0x7b, 0xff, 0x9c, 0x52, 0xff, 0xaf, 0x0c, 0x00, 0x75, 0x7f, 0x01, 0xa4, 0xde, 0xfe, 0x8b, 0x98, 0x21, 0x5f, 0x07, 0x18, 0xed, 0x42, 0xf9, 0xfd, 0x28, 0x16, 0x6e, 0xf8, 0x00, 0x34, 0xb5, 0xf2, 0xe0, 0x29, 0x00, 0x5c, 0x2b, 0xfd, 0x6d, 0xa5, 0xf4, 0x76, 0x40, 0xf6, 0x77, 0xa6, 0x0f, 0xd0, 0x30, 0x01, 0xf6, 0xd1, 0xf9, 0xc4, 0xaa, 0x07, 0xc6, 0x2f, 0xfd, 0x99, 0xcc, 0xf9, 0xe0, 0x91, 0x06, 0xf8, 0xc6, 0x01, 0x0a, 0x7a, 0xfd, 0xf2, 0xc7, 0xff, 0xc3, 0x9b, 0xfb, 0x4a, 0xc7, 0xfe, 0x66, 0x3f, 0xfb, 0x39, 0x7e, 0xf9, 0x6b, 0xc9, 0xfe, 0xe7, 0xea, 0xfc, 0x88, 0x06, 0xfc, 0xcc, 0x73, 0xff, 0x38, 0x05, 0xff, 0xab, 0x5a, 0xff, 0xe9, 0x13, 0x01, 0x7b, 0x92, 0xff, 0xeb, 0x2f, 0x1c, 0xf3, 0x18, 0x16, 0x7c, 0x45, 0xfd, 0x33, 0xd8, 0x13, 0x51, 0x63, 0x01, 0x77, 0xbd, 0xf5, 0x01, 0x35, 0x01, 0x8b, 0x38, 0xfd, 0x3f, 0x71, 0xf5, 0x37, 0x6f, 0xf7, 0xc7, 0x6f, 0x0c, 0xdc, 0x9e, 0x01, 0x19, 0xd1, 0xfb, 0x4f, 0x29, 0x06, 0x50, 0xd4, 0xfd, 0x3a, 0x61, 0xfa, 0xc9, 0xb5, 0x04, 0x33, 0x03, 0x02, 0xa4, 0x9c, 0xfd, 0x2c, 0x7d, 0xff, 0x7b, 0x71, 0xfc, 0xaf, 0x58, 0xfe, 0x0a, 0x8a, 0xfc, 0x51, 0x46, 0xfb, 0x1f, 0xeb, 0xfe, 0x3b, 0xbb, 0xfd, 0x42, 0x6b, 0xfc, 0x0c, 0x16, 0xff, 0x33, 0x57, 0xff, 0x64, 0xe3, 0xfe, 0x58, 0x1d, 0x00, 0x39, 0x60, 0xff, 0x78, 0x71, 0x17, 0x64, 0xd4, 0x13, 0xb5, 0xba, 0x00, 0x60, 0x09, 0x12, 0xf2, 0x6d, 0x01, 0x60, 0x8d, 0xf8, 0x5e, 0xa8, 0x02, 0xa7, 0x33, 0xfd, 0xb0, 0xf8, 0xf5, 0x70, 0xc6, 0xf8, 0x7f, 0xf3, 0x09, 0x14, 0x31, 0x02, 0x0e, 0xab, 0xfc, 0x2c, 0xc9, 0x04, 0x9f, 0x03, 0xff, 0xaf, 0x4d, 0xfa, 0x0e, 0x3d, 0x03, 0x45, 0x69, 0x02, 0x69, 0xd4, 0xfd, 0xab, 0x4a, 0xff, 0xce, 0xef, 0xfc, 0x16, 0x71, 0xfe, 0x1b, 0x41, 0xfd, 0x75, 0xe1, 0xfc, 0x27, 0xf0, 0xff, 0x90, 0xfc, 0xfd, 0x10, 0xa9, 0xfc, 0x52, 0x2b, 0xff, 0x04, 0x63, 0xff, 0x9d, 0xa4, 0xfe, 0x96, 0x75, 0xff, 0x1a, 0xf3, 0xfe, 0x54, 0x19, 0x14, 0xb0, 0xf3, 0x11, 0x8f, 0x17, 0x02, 0xe9, 0x24, 0x10, 0x1f, 0x87, 0x02, 0xf8, 0xe0, 0xfa, 0x1e, 0x87, 0x02, 0x99, 0x8b, 0xfd, 0x50, 0x7f, 0xf7, 0xba, 0x47, 0xf9, 0x62, 0x43, 0x08, 0xa4, 0x02, 0x03, 0xbf, 0x61, 0xfc, 0xb0, 0xa9, 0x03, 0x72, 0xbb, 0xff, 0xba, 0x95, 0xfa, 0xb2, 0x67, 0x02, 0x56, 0x17, 0x02, 0xb0, 0x2b, 0xfe, 0x5f, 0x1b, 0xff, 0xf1, 0x4c, 0xfd, 0x3d, 0xb9, 0xfe, 0x67, 0x87, 0xfe, 0x26, 0x1f, 0xfe, 0x06, 0xe2, 0xff, 0x90, 0x4d, 0xfe, 0x37, 0x39, 0xfd, 0x3f, 0x52, 0xff, 0x63, 0xfa, 0xfe, 0x26, 0x2f, 0xfe, 0x0f, 0x28, 0xff, 0x20, 0xd2, 0xfe, 0x33, 0xe9, 0x11, 0x0d, 0x7b, 0x10, 0x24, 0x2d, 0x02, 0x20, 0x27, 0x0e, 0x13, 0x5a, 0x04, 0xb3, 0xfe, 0xfc, 0x34, 0x21, 0x01, 0xf7, 0x1d, 0xfe, 0xc1, 0xdd, 0xf9, 0xee, 0xd6, 0xf9, 0xf2, 0xbe, 0x06, 0xf4, 0x52, 0x03, 0x63, 0x8e, 0xfc, 0xb7, 0x5a, 0x02, 0x39, 0xd5, 0xff, 0x9e, 0xd9, 0xfb, 0x1d, 0xc3, 0x01, 0x39, 0x77, 0x01, 0x2b, 0x76, 0xfe, 0x9c, 0x18, 0xff, 0x0d, 0x31, 0xfe, 0xdc, 0xcb, 0xff, 0x3c, 0x88, 0xff, 0x98, 0x41, 0xfe, 0xef, 0x80, 0xff, 0x86, 0xe9, 0xfe, 0xb3, 0xe1, 0xfd, 0xaa, 0xe7, 0xfe, 0xd6, 0x7b, 0xfe, 0x94, 0x33, 0xfe, 0xbe, 0x6b, 0xff, 0xa1, 0xa7, 0xfe, 0x13, 0x13, 0x0f, 0xc3, 0xe5, 0x0e, 0xdf, 0x39, 0x03, 0xdf, 0xa3, 0x0c, 0x5d, 0xea, 0x04, 0xd7, 0x82, 0xfe, 0x15, 0xe8, 0x00, 0x9e, 0x87, 0xfe, 0x10, 0x54, 0xfb, 0x72, 0xc6, 0xfa, 0x3a, 0x30, 0x05, 0x84, 0xa7, 0x02, 0x66, 0x17, 0xfd, 0x9e, 0x65, 0x01, 0x0e, 0xdd, 0xff, 0x34, 0xcc, 0xfc, 0xb3, 0xea, 0x00, 0xcb, 0xf9, 0x00, 0x42, 0xd9, 0xfe, 0xc7, 0xfc, 0xff, 0x35, 0x28, 0xff, 0x77, 0xef, 0xff, 0x4d, 0xbd, 0xff, 0xc3, 0x41, 0xfe, 0x24, 0x3e, 0xff, 0x50, 0x04, 0xff, 0x95, 0x09, 0xfe, 0x65, 0x80, 0xfe, 0x2b, 0x81, 0xfe, 0x72, 0x95, 0xfe, 0x6a, 0x4f, 0xff, 0xb1, 0xa4, 0xfe, 0x4d, 0xd4, 0x0c, 0x55, 0x60, 0x0d, 0x44, 0x2c, 0x04, 0x00, 0x44, 0x0b, 0x54, 0x3e, 0x05, 0x75, 0xb8, 0xff, 0xc1, 0xb2, 0x00, 0xf6, 0x2e, 0xff, 0x4d, 0xbd, 0xfc, 0x43, 0xd3, 0xfb, 0x85, 0x5b, 0x03, 0x21, 0x18, 0x02, 0x17, 0xe1, 0xfd, 0xae, 0x8a, 0x00, 0xb3, 0x08, 0x00, 0x8f, 0x7e, 0xfd, 0x37, 0x63, 0x00, 0x2f, 0x58, 0x01, 0xc7, 0xf9, 0xff, 0x84, 0x05, 0x00, 0x42, 0x69, 0xff, 0xf9, 0x64, 0x00, 0x03, 0xa9, 0xff, 0xc1, 0x07, 0xfe, 0xe1, 0xf5, 0xfe, 0x31, 0x00, 0xff, 0x44, 0x44, 0xfe, 0x24, 0xd0, 0xfe, 0xfb, 0xc0, 0xfe, 0x4b, 0xc1, 0xfe, 0xee, 0x76, 0xff, 0x52, 0xed, 0xfe, 0xf0, 0x87, 0x0a, 0x19, 0xf9, 0x0b, 0x20, 0x23, 0x05, 0x10, 0x75, 0x0a, 0x44, 0xe0, 0x04, 0xf8, 0x3d, 0x00, 0x3c, 0x89, 0x01, 0x80, 0xd6, 0xff, 0xed, 0x7f, 0xfd, 0xa8, 0x66, 0xfc, 0x2c, 0x26, 0x02, 0xc3, 0x87, 0x01, 0xae, 0xe5, 0xfd, 0x0f, 0x88, 0x00, 0x94, 0x7a, 0x00, 0x32, 0xee, 0xfd, 0xe3, 0xdc, 0x00, 0xc0, 0xa6, 0x01, 0x30, 0xc2, 0xff, 0xcf, 0x08, 0x00, 0xba, 0xff, 0xff, 0xac, 0x63, 0x00, 0xa8, 0x0f, 0xff, 0x76, 0xa9, 0xfd, 0xcc, 0x0c, 0xff, 0xe9, 0x7d, 0xff, 0xf7, 0xa8, 0xfe, 0xba, 0xd1, 0xfe, 0x42, 0xe7, 0xfe, 0x55, 0x40, 0xff, 0x72, 0xc3, 0xff, 0xe8, 0x3e, 0xff, 0xd1, 0x3c, 0x09, 0x99, 0x00, 0x0b, 0x84, 0x1c, 0x05, 0x28, 0x83, 0x09, 0x34, 0xb9, 0x04, 0x3f, 0x83, 0x00, 0xd9, 0xe3, 0x01, 0x77, 0x86, 0x00, 0x1b, 0x51, 0xfe, 0xb4, 0x95, 0xfc, 0x7d, 0x06, 0x01, 0x05, 0x0b, 0x01, 0x13, 0x2e, 0xfe, 0xb5, 0xf3, 0x00, 0x23, 0x82, 0x01, 0xa8, 0x95, 0xfe, 0xf2, 0x40, 0x00, 0xa3, 0x55, 0x01, 0xb4, 0xff, 0xff, 0xc3, 0x42, 0x00, 0xb2, 0x15, 0x00, 0x63, 0x9a, 0xff, 0x08, 0x61, 0xfe, 0x64, 0x6d, 0xfe, 0x65, 0xb4, 0xff, 0x01, 0x7f, 0xff, 0x35, 0xca, 0xfe, 0xc4, 0xfb, 0xfe, 0xa9, 0x6d, 0xff, 0x7e, 0xc8, 0xff, 0x66, 0x85, 0xff, 0xbe, 0x88, 0xfe, 0x73, 0xc3, 0x08, 0x09, 0xe7, 0x09, 0x17, 0xc0, 0x04, 0x7a, 0xf2, 0x08, 0x0b, 0x11, 0x04, 0x20, 0xe1, 0x00, 0x7c, 0x85, 0x02, 0xf8, 0x0f, 0x01, 0xa8, 0x90, 0xfe, 0x30, 0xaa, 0xfc, 0xf0, 0x7e, 0x00, 0xa0, 0xa2, 0x00, 0xca, 0xaa, 0xff, 0x02, 0x52, 0x02, 0xc4, 0xec, 0x00, 0xf8, 0x46, 0xfe, 0x73, 0x4f, 0x00, 0x02, 0x2d, 0x01, 0x48, 0x57, 0x00, 0x21, 0x1b, 0x00, 0xfe, 0x6d, 0xff, 0x7d, 0x5c, 0xff, 0x53, 0x16, 0xff, 0x7c, 0x3a, 0xff, 0xdc, 0xd6, 0xff, 0xbc, 0x9a, 0xff, 0xaa, 0x08, 0xff, 0x6a, 0x85, 0xff, 0x61, 0x92, 0xff, 0xcb, 0x21, 0xff, 0x1e, 0xdf, 0xfe, 0x4e, 0x51, 0xfe, 0xfb, 0x60, 0x08, 0x48, 0x18, 0x09, 0xeb, 0x2d, 0x04, 0x26, 0x22, 0x08, 0x72, 0xc3, 0x03, 0x84, 0x5b, 0x01, 0x3f, 0x2a, 0x03, 0x2b, 0x24, 0x01, 0x3e, 0xae, 0xfe, 0xc4, 0x0e, 0xfd, 0x73, 0x96, 0x00, 0x90, 0xe8, 0x01, 0xdc, 0x72, 0x00, 0x94, 0xcd, 0x01, 0xd4, 0xb9, 0x00, 0xf7, 0x4d, 0xfe, 0x90, 0x35, 0x00, 0x1b, 0x44, 0x01, 0x9b, 0x0d, 0x00, 0x3b, 0xd2, 0xff, 0x96, 0xe6, 0xff, 0xe1, 0xc5, 0xff, 0x94, 0xac, 0xff, 0xc5, 0x92, 0xff, 0x8c, 0x1d, 0x00, 0x2f, 0xfc, 0xff, 0xda, 0x0a, 0xff, 0x7a, 0x0e, 0xff, 0xd9, 0xfc, 0xfe, 0x1c, 0xe3, 0xfe, 0xdb, 0xe9, 0xfe, 0xb9, 0xdd, 0xfe, 0xe8, 0xbf, 0x07, 0x88, 0x23, 0x08, 0x00, 0x95, 0x03, 0x96, 0x79, 0x07, 0xf8, 0xc2, 0x03, 0x31, 0xe4, 0x01, 0x67, 0x71, 0x03, 0x4c, 0x2e, 0x01, 0x4a, 0x49, 0xff, 0x70, 0xbd, 0xfe, 0x00, 0xc0, 0x00, 0xbb, 0x58, 0x01, 0x01, 0x0f, 0x01, 0x1f, 0x83, 0x01, 0x63, 0x4f, 0x00, 0x14, 0x5b, 0xfe, 0xac, 0xb2, 0xff, 0x3f, 0x2e, 0x01, 0x82, 0xa3, 0x00, 0xfc, 0x6d, 0x00, 0xf5, 0xe7, 0xff, 0x2a, 0xd0, 0xff, 0xa8, 0x33, 0x00, 0x37, 0x4a, 0x00, 0x03, 0x40, 0x00, 0x47, 0x1e, 0xff, 0xbc, 0x34, 0xfe, 0x2f, 0xd9, 0xfe, 0x11, 0x31, 0xff, 0x1a, 0x46, 0xff, 0xa0, 0x2f, 0xff, 0x66, 0xae, 0xfe, 0x50, 0x55, 0x07, 0x98, 0xea, 0x07, 0xcf, 0xe0, 0x02, 0x47, 0x83, 0x05, 0x65, 0xf8, 0x03, 0x11, 0x66, 0x03, 0xe6, 0xc1, 0x03, 0xbc, 0xe0, 0x01, 0x63, 0x5c, 0x00, 0x9f, 0xb8, 0xfe, 0x8e, 0xc7, 0x00, 0xf6, 0xe2, 0x01, 0x12, 0xb1, 0x00, 0x30, 0xb5, 0x00, 0x4e, 0xad, 0xff, 0x78, 0x5f, 0xfe, 0x60, 0xa2, 0x00, 0x8c, 0xf6, 0x01, 0x71, 0x94, 0x00, 0xf4, 0x1e, 0x00, 0xb9, 0x35, 0x00, 0x48, 0xda, 0x00, 0x7a, 0xc2, 0x00, 0x11, 0x7c, 0xff, 0x76, 0xe9, 0xfe, 0xec, 0xab, 0xfe, 0x2f, 0xa8, 0xfe, 0xaa, 0x41, 0xff, 0xf1, 0x81, 0xff, 0x8a, 0x1f, 0xff, 0xcb, 0xe1, 0xfe, 0x8d, 0xc9, 0xfe, 0xe7, 0xaf, 0x05, 0x7f, 0x3b, 0x07, 0x7d, 0x1b, 0x03, 0x53, 0xf8, 0x04, 0xa6, 0x52, 0x04, 0x3c, 0x96, 0x03, 0x52, 0x59, 0x05, 0x45, 0x26, 0x03, 0xe3, 0xa6, 0x00, 0x80, 0x36, 0xff, 0xfd, 0xc6, 0xff, 0xe0, 0x4c, 0x01, 0xe4, 0xc1, 0x00, 0xec, 0x30, 0x00, 0x60, 0xb2, 0xff, 0x07, 0x88, 0xff, 0x48, 0x11, 0x01, 0x21, 0xff, 0x01, 0xf1, 0xf0, 0x00, 0x66, 0x51, 0x00, 0x26, 0xb2, 0x00, 0x64, 0xd7, 0x00, 0xe8, 0xed, 0xff, 0xed, 0xc0, 0xfe, 0xc5, 0xe2, 0xfe, 0xef, 0xfd, 0xfe, 0xd9, 0xf7, 0xfe, 0x21, 0x6e, 0xff, 0x5e, 0x4a, 0xff, 0x0e, 0x0b, 0xff, 0xc5, 0xe9, 0xfe, 0xe8, 0xe1, 0xfe, 0xcc, 0xe3, 0x04, 0xd6, 0x1f, 0x07, 0x72, 0x02, 0x04, 0xe5, 0xe8, 0x04, 0xe7, 0x99, 0x05, 0x1c, 0x3e, 0x04, 0x90, 0x90, 0x03, 0x10, 0x1d, 0x03, 0xd9, 0x56, 0x01, 0x95, 0x8f, 0xff, 0xf8, 0x5c, 0xff, 0x1f, 0x88, 0xff, 0xf6, 0xfd, 0xff, 0xdc, 0x4a, 0x01, 0xb2, 0x3d, 0x01, 0x1d, 0x54, 0x00, 0xde, 0xff, 0x00, 0x0d, 0x9d, 0x01, 0xab, 0x1e, 0x01, 0xdb, 0x6d, 0x00, 0x98, 0x39, 0x00, 0x2e, 0xe4, 0xff, 0x88, 0x34, 0xff, 0xcd, 0xf7, 0xfe, 0x18, 0x18, 0xff, 0xdd, 0xf8, 0xfe, 0xc7, 0xed, 0xfe, 0xa8, 0x45, 0xff, 0xc2, 0x73, 0xff, 0x22, 0x2a, 0xff, 0x89, 0xdb, 0xfe, 0x14, 0x15, 0xff, 0x7a, 0xf8, 0x03, 0x6f, 0x1f, 0x07, 0xa4, 0x7c, 0x05, 0x1f, 0xf2, 0x04, 0xb9, 0x9e, 0x05, 0x51, 0x6a, 0x05, 0x13, 0xe2, 0x03, 0xdb, 0xb6, 0x01, 0xa5, 0x09, 0x00, 0xdd, 0x53, 0xff, 0x0d, 0x9c, 0xff, 0xc5, 0x4d, 0x00, 0x6b, 0x79, 0x00, 0x71, 0xc7, 0x00, 0xb9, 0x7b, 0x01, 0xed, 0x9f, 0x01, 0x43, 0x50, 0x01, 0x83, 0x2d, 0x01, 0x7b, 0xa3, 0x00, 0x60, 0xf7, 0xff, 0xe4, 0x9c, 0xff, 0x5c, 0x84, 0xff, 0xae, 0x55, 0xff, 0x97, 0x19, 0xff, 0x86, 0x32, 0xff, 0x08, 0x1d, 0xff, 0x50, 0xd5, 0xfe, 0x13, 0xff, 0xfe, 0x1f, 0x65, 0xff, 0x57, 0x5b, 0xff, 0x09, 0x5e, 0xff, 0x09, 0x47, 0xff, 0xe9, 0x17, 0x05, 0x2e, 0x7c, 0x07, 0x6c, 0x86, 0x04, 0xf5, 0xf5, 0x05, 0x04, 0xc0, 0x05, 0xfb, 0x11, 0x04, 0x8a, 0x2b, 0x04, 0x01, 0xc8, 0x01, 0x4a, 0xda, 0xfe, 0xd2, 0x07, 0xff, 0x4a, 0x8f, 0x00, 0xf2, 0x8f, 0x00, 0x64, 0xb3, 0x00, 0x25, 0x4e, 0x01, 0xcd, 0x3f, 0x01, 0x63, 0xdb, 0x01, 0xe5, 0x27, 0x02, 0x7b, 0xae, 0x00, 0x98, 0x6a, 0xff, 0xdd, 0x6d, 0xff, 0x9d, 0x9c, 0xff, 0x5a, 0x95, 0xff, 0xf6, 0x88, 0xff, 0x6b, 0x30, 0xff, 0xb8, 0xfb, 0xfe, 0x35, 0xf9, 0xfe, 0x23, 0x0a, 0xff, 0xed, 0x74, 0xff, 0x5d, 0x41, 0xff, 0xab, 0x24, 0xff, 0x01, 0x80, 0xff, 0x14, 0x78, 0xff, 0xbd, 0x05, 0x05, 0x83, 0x6e, 0x07, 0x26, 0x23, 0x05, 0x92, 0x67, 0x05, 0x1a, 0xe4, 0x04, 0x30, 0x9a, 0x03, 0xb7, 0x2b, 0x03, 0x8c, 0x21, 0x02, 0xa1, 0x2e, 0x00, 0x62, 0xf9, 0xff, 0x9b, 0xa3, 0x00, 0xab, 0x6f, 0x00, 0x6c, 0x82, 0x00, 0x24, 0x17, 0x01, 0x0e, 0xc0, 0x01, 0x05, 0x35, 0x02, 0xa2, 0xd3, 0x01, 0x20, 0x2b, 0x00, 0x2a, 0x5e, 0xff, 0x14, 0x69, 0xff, 0x91, 0x54, 0xff, 0x74, 0x91, 0xff, 0xb3, 0x9e, 0xff, 0x24, 0x7d, 0xff, 0xf3, 0x0d, 0xff, 0x1f, 0xc6, 0xfe, 0xd2, 0x07, 0xff, 0x11, 0x63, 0xff, 0x71, 0x5c, 0xff, 0x73, 0x69, 0xff, 0x90, 0x6a, 0xff, 0x47, 0x51, 0xff, 0xdc, 0x7c, 0x05, 0x7d, 0x31, 0x08, 0x86, 0x0a, 0x04, 0xd0, 0x84, 0x03, 0x1d, 0x10, 0x04, 0xea, 0x3c, 0x03, 0xc4, 0xc8, 0x02, 0x34, 0x30, 0x03, 0x19, 0x81, 0x01, 0x9e, 0xfd, 0xff, 0x77, 0x02, 0x01, 0x0f, 0x88, 0x00, 0x4f, 0x58, 0x00, 0xc2, 0x71, 0x01, 0xe7, 0xbe, 0x01, 0xe5, 0x47, 0x01, 0x40, 0xeb, 0x01, 0xcb, 0x37, 0x01, 0x8d, 0x0e, 0xff, 0xec, 0xca, 0xfe, 0xca, 0x8b, 0xff, 0xcf, 0xc7, 0xff, 0xc3, 0x55, 0xff, 0x8e, 0x66, 0xff, 0x55, 0x52, 0xff, 0x19, 0x04, 0xff, 0x36, 0xe9, 0xfe, 0x0a, 0x01, 0xff, 0xa9, 0x69, 0xff, 0xac, 0x9f, 0xff, 0x4b, 0x78, 0xff, 0xb1, 0x3c, 0xff, 0x6f, 0xb9, 0x05, 0xaa, 0xd7, 0x07, 0x1b, 0x0d, 0x03, 0xb6, 0x64, 0x02, 0xbb, 0xc2, 0x02, 0xde, 0x23, 0x03, 0x7c, 0xf9, 0x03, 0xcf, 0x00, 0x03, 0xc0, 0x4f, 0x01, 0xb0, 0xa2, 0x01, 0xcf, 0x48, 0x01, 0x61, 0xd9, 0xff, 0xaa, 0xe1, 0x00, 0xb9, 0x9b, 0x01, 0x92, 0x8e, 0x01, 0x06, 0xa4, 0x01, 0x0b, 0xaa, 0x01, 0x9a, 0x71, 0x01, 0x2a, 0x70, 0x00, 0xcf, 0x38, 0xff, 0x3b, 0xc3, 0xfe, 0x78, 0x61, 0xff, 0x1a, 0xc7, 0xff, 0xbf, 0xde, 0xff, 0x80, 0x43, 0xff, 0x94, 0x01, 0xff, 0x39, 0x30, 0xff, 0x1e, 0x03, 0xff, 0x33, 0x1f, 0xff, 0xd1, 0x5f, 0xff, 0x51, 0xc0, 0xff, 0x36, 0x8a, 0xff, 0x41, 0xdc, 0x05, 0x6a, 0xbb, 0x07, 0xa0, 0xfe, 0x02, 0x8a, 0x84, 0x02, 0xde, 0xa8, 0x02, 0x11, 0x6c, 0x02, 0x2f, 0x8f, 0x02, 0x74, 0x0c, 0x02, 0x2d, 0x53, 0x01, 0x78, 0x0f, 0x02, 0xf5, 0x27, 0x02, 0xbc, 0x35, 0x01, 0x0a, 0x7c, 0x00, 0x55, 0xcd, 0x00, 0x66, 0x2f, 0x02, 0xd6, 0xd3, 0x01, 0xbc, 0x60, 0x01, 0xb0, 0x77, 0x01, 0xf1, 0x8f, 0x01, 0x50, 0x5d, 0x00, 0xd7, 0x90, 0xff, 0xf2, 0x29, 0xff, 0x90, 0xa6, 0xfe, 0xa7, 0xe8, 0xff, 0x52, 0xff, 0xff, 0xce, 0x41, 0xff, 0xec, 0x33, 0xff, 0xc3, 0x67, 0xff, 0xb0, 0x0e, 0xff, 0xd4, 0x32, 0xff, 0x03, 0x97, 0xff, 0xc9, 0x86, 0xff, 0xfa, 0xeb, 0x05, 0xb2, 0x1d, 0x08, 0x8d, 0xe8, 0x02, 0xea, 0x4e, 0x02, 0x31, 0x5a, 0x03, 0x74, 0x13, 0x03, 0xf6, 0x09, 0x02, 0x93, 0x0c, 0x00, 0xc1, 0x0e, 0xff, 0x8a, 0x50, 0x02, 0x89, 0xa8, 0x03, 0x74, 0x15, 0x01, 0x07, 0x8b, 0x00, 0x3f, 0x16, 0x01, 0xed, 0x60, 0x01, 0x93, 0xca, 0x01, 0x25, 0xf7, 0x01, 0x8e, 0x48, 0x01, 0xfd, 0x66, 0x01, 0xb7, 0xc9, 0x01, 0x62, 0xc4, 0x00, 0x78, 0x78, 0xff, 0x1e, 0x41, 0xff, 0x50, 0x1c, 0xff, 0x6f, 0xd6, 0xfe, 0x85, 0xe5, 0xff, 0xb6, 0xf4, 0xff, 0x33, 0x44, 0xff, 0xd4, 0x5d, 0xff, 0x6b, 0x41, 0xff, 0x07, 0x3d, 0xff, 0x9f, 0x7f, 0xff, 0xf2, 0xef, 0x06, 0x9c, 0xc5, 0x08, 0x44, 0x8b, 0x02, 0x61, 0x82, 0x02, 0xae, 0x6a, 0x03, 0xa1, 0x46, 0x03, 0xa4, 0xf4, 0x01, 0x22, 0xaf, 0xfe, 0x64, 0x09, 0xfe, 0xf3, 0xa1, 0x01, 0xa0, 0xcd, 0x02, 0x89, 0x4d, 0x01, 0x2a, 0xfd, 0x00, 0xa8, 0x1c, 0x00, 0xc9, 0x33, 0x01, 0x13, 0x25, 0x02, 0xa4, 0x26, 0x01, 0x34, 0x4d, 0x01, 0xbf, 0xf0, 0x01, 0xb5, 0x1e, 0x01, 0xd3, 0x35, 0x01, 0xaf, 0x6d, 0x01, 0x24, 0x88, 0xff, 0xfd, 0xf6, 0xfe, 0x2f, 0xde, 0xfe, 0x0a, 0xc6, 0xfe, 0xa1, 0x8a, 0xff, 0xd6, 0xed, 0xff, 0xe4, 0x93, 0xff, 0x64, 0x3c, 0xff, 0xd7, 0x4e, 0xff, 0xda, 0x09, 0xff, 0x43, 0x24, 0x08, 0x50, 0x50, 0x0a, 0xb6, 0xc7, 0x02, 0xc5, 0x63, 0x02, 0x96, 0xd1, 0x02, 0xbf, 0xe8, 0x02, 0x4b, 0xeb, 0x01, 0xba, 0x18, 0xfe, 0xf4, 0x19, 0xfd, 0xb8, 0xdc, 0x01, 0x6a, 0xf3, 0x02, 0x33, 0xe0, 0xff, 0xed, 0x44, 0x00, 0x7d, 0x53, 0x00, 0x49, 0x16, 0x01, 0xe7, 0x71, 0x01, 0xac, 0x17, 0x01, 0x5b, 0x89, 0x01, 0xb9, 0x62, 0x01, 0x75, 0x6f, 0x01, 0x41, 0x6a, 0x01, 0xe4, 0xf5, 0x00, 0xa2, 0xdc, 0x00, 0x1d, 0x60, 0x00, 0xbc, 0xad, 0xfe, 0x7f, 0xdb, 0xfe, 0x01, 0x5b, 0xff, 0xb3, 0x03, 0xff, 0x76, 0x81, 0xff, 0x14, 0xe7, 0xff, 0x9c, 0x8e, 0xff, 0x3f, 0x10, 0xff, 0x64, 0xa4, 0x09, 0x7d, 0xae, 0x0b, 0x0c, 0x8e, 0x02, 0x72, 0x94, 0x02, 0x74, 0xcc, 0x02, 0x73, 0xf2, 0x02, 0x8e, 0xa6, 0x01, 0x6d, 0x9b, 0xfc, 0x1f, 0x74, 0xfc, 0x33, 0x8c, 0x02, 0x6f, 0x11, 0x03, 0x74, 0x75, 0xff, 0x71, 0x83, 0xff, 0xdd, 0xfb, 0xfe, 0x3e, 0xe7, 0x00, 0x72, 0xc3, 0x01, 0x08, 0xd9, 0x00, 0xdb, 0x14, 0x01, 0x80, 0x29, 0x01, 0x91, 0xfe, 0x00, 0x96, 0x09, 0x01, 0x05, 0xc0, 0x01, 0x0a, 0xbd, 0x00, 0x03, 0x7a, 0x00, 0xcd, 0x5a, 0x00, 0x58, 0x79, 0xff, 0xae, 0xfc, 0xfe, 0x8b, 0xff, 0xfe, 0x9d, 0x3f, 0xff, 0xfd, 0x3d, 0xff, 0x0c, 0xb1, 0xff, 0x38, 0x91, 0xff, 0x6e, 0x6a, 0x0b, 0xa6, 0x00, 0x0d, 0x0e, 0x11, 0x02, 0xee, 0x0a, 0x03, 0x5c, 0x1c, 0x03, 0x45, 0xf8, 0x02, 0x37, 0x35, 0x01, 0x39, 0x3f, 0xfb, 0xfc, 0xfb, 0xfb, 0x74, 0x5a, 0x03, 0x62, 0x02, 0x03, 0xe0, 0xf1, 0xfe, 0xe3, 0x58, 0xff, 0x0e, 0x81, 0xfe, 0x61, 0x3e, 0x00, 0x88, 0xff, 0x00, 0x0e, 0x00, 0x01, 0x63, 0x6d, 0x01, 0x12, 0xc2, 0x00, 0xde, 0x40, 0x00, 0xd8, 0xc8, 0x00, 0x0f, 0x71, 0x01, 0x76, 0xab, 0x00, 0xcf, 0x28, 0x01, 0x62, 0x17, 0x00, 0xb4, 0x56, 0x00, 0xcc, 0x88, 0x00, 0x93, 0x07, 0xff, 0x7c, 0x0d, 0xff, 0x5e, 0x4c, 0xff, 0xf4, 0x41, 0xff, 0x62, 0x0e, 0xff, 0x3b, 0x7e, 0x0d, 0x75, 0x94, 0x0e, 0x66, 0x82, 0x01, 0x4e, 0x55, 0x03, 0xc9, 0x18, 0x03, 0x19, 0xa8, 0x02, 0xe0, 0xa5, 0x00, 0x43, 0xeb, 0xf9, 0x29, 0x3b, 0xfc, 0xad, 0x5e, 0x04, 0xe0, 0x63, 0x02, 0x86, 0x26, 0xfe, 0x4a, 0xf5, 0xfe, 0x39, 0x2e, 0xfe, 0xf1, 0x5c, 0x00, 0xb7, 0x9b, 0x00, 0x2a, 0x1e, 0x00, 0x25, 0x60, 0x01, 0xb4, 0xd4, 0x00, 0x64, 0xfd, 0xff, 0xf5, 0x43, 0x00, 0xb9, 0xaa, 0x00, 0x87, 0x82, 0x00, 0xdd, 0xbc, 0x00, 0xb9, 0x1c, 0x00, 0xdb, 0xbd, 0x00, 0x7c, 0x65, 0x00, 0x60, 0x3c, 0x00, 0x41, 0x13, 0x00, 0xc8, 0x0c, 0xff, 0xf9, 0x2c, 0xff, 0x33, 0x03, 0xff, 0x91, 0xc0, 0x0f, 0xee, 0x0a, 0x10, 0xe7, 0xdf, 0x00, 0xc8, 0xfc, 0x03, 0xe3, 0x53, 0x03, 0x0c, 0x20, 0x02, 0x19, 0xa3, 0xff, 0x92, 0x8a, 0xf8, 0xb9, 0xfa, 0xfc, 0x7f, 0xb5, 0x05, 0x93, 0xb8, 0x01, 0x4c, 0x8f, 0xfd, 0x24, 0x6e, 0xfe, 0x54, 0xa4, 0xfd, 0x03, 0x92, 0x00, 0xd1, 0x49, 0x00, 0x43, 0x2d, 0x00, 0xf2, 0x42, 0x01, 0x2e, 0x29, 0x00, 0xde, 0xdc, 0xff, 0x23, 0x2f, 0x00, 0xe1, 0x87, 0x00, 0x8e, 0xe9, 0xff, 0xfa, 0x35, 0x00, 0x1a, 0xa7, 0xff, 0x0a, 0x76, 0x00, 0x24, 0xcf, 0x00, 0x71, 0x5d, 0x00, 0xba, 0x63, 0x00, 0x58, 0x6f, 0x00, 0x6e, 0xce, 0xff, 0x06, 0x6d, 0xfe, 0xcc, 0x17, 0x12, 0x40, 0xa3, 0x11, 0xee, 0x37, 0x00, 0x6b, 0xb8, 0x04, 0xe1, 0x84, 0x03, 0x12, 0x65, 0x01, 0xc0, 0x59, 0xfe, 0xc3, 0x42, 0xf7, 0x71, 0x3a, 0xfe, 0x53, 0xca, 0x06, 0x98, 0xdc, 0x00, 0x4b, 0x29, 0xfd, 0x83, 0x29, 0xfe, 0xca, 0x2f, 0xfd, 0xc9, 0x96, 0x00, 0xe4, 0xc0, 0xff, 0xa2, 0xfc, 0xff, 0x33, 0xc7, 0x01, 0x04, 0xdf, 0xff, 0xc2, 0x4d, 0xff, 0x3c, 0xeb, 0xff, 0x47, 0x60, 0x00, 0x97, 0xe1, 0xff, 0x0c, 0xf8, 0xff, 0xe8, 0xa9, 0xfe, 0xaf, 0x28, 0x00, 0x2a, 0x8b, 0x00, 0x8f, 0x05, 0x00, 0x48, 0x0f, 0x01, 0x09, 0x4c, 0x00, 0x20, 0x10, 0x00, 0xd0, 0xd8, 0xff, 0x7e, 0x2f, 0x14, 0x4e, 0xc5, 0x13, 0x0e, 0xad, 0xff, 0x90, 0x17, 0x05, 0xf2, 0x9d, 0x03, 0x27, 0x68, 0x00, 0x32, 0x14, 0xfd, 0xdb, 0x2c, 0xf6, 0x56, 0x9d, 0xff, 0x7f, 0x8c, 0x07, 0x51, 0xcc, 0xff, 0xca, 0xe8, 0xfc, 0x47, 0xdc, 0xfd, 0x26, 0x15, 0xfd, 0x8b, 0xb3, 0x00, 0x4f, 0xfd, 0xfe, 0x44, 0xa1, 0xff, 0x89, 0x08, 0x02, 0xa2, 0xba, 0xff, 0x70, 0x4a, 0xff, 0x67, 0x95, 0xff, 0xb0, 0xd5, 0xff, 0x7e, 0xe0, 0xff, 0x4e, 0xbb, 0xff, 0x55, 0x65, 0xfe, 0xbc, 0xb6, 0xff, 0x21, 0xc8, 0xff, 0x81, 0x0d, 0x00, 0xe9, 0x43, 0x00, 0x6a, 0x1e, 0x00, 0xfd, 0xe5, 0x00, 0xb4, 0xc4, 0xff, 0xcd, 0x04, 0x16, 0x45, 0x04, 0x16, 0x53, 0x89, 0xff, 0xd8, 0x44, 0x05, 0x7f, 0xd8, 0x03, 0xc6, 0x6b, 0xff, 0x1f, 0xbc, 0xfb, 0xda, 0x26, 0xf5, 0xbc, 0x1a, 0x01, 0x8f, 0x11, 0x08, 0x71, 0xd5, 0xfe, 0x11, 0xbd, 0xfc, 0x1a, 0x6c, 0xfd, 0x0f, 0x37, 0xfd, 0x6f, 0xe9, 0x00, 0x4a, 0x72, 0xfe, 0x3c, 0x2c, 0xff, 0x06, 0x00, 0x02, 0xdd, 0x88, 0xff, 0x6c, 0x62, 0xff, 0x81, 0x98, 0xff, 0xe2, 0x70, 0xff, 0x33, 0x99, 0xff, 0xa8, 0x8c, 0xff, 0x60, 0x15, 0xfe, 0x2f, 0xb7, 0xff, 0x87, 0xb3, 0xff, 0xde, 0x98, 0xfe, 0xb0, 0x17, 0x00, 0xc2, 0xaa, 0x00, 0x01, 0x63, 0x00, 0xac, 0x08, 0x00, 0x71, 0xe8, 0x16, 0x19, 0x9e, 0x18, 0x9c, 0x4f, 0x00, 0xe0, 0xca, 0x04, 0x47, 0x6f, 0x04, 0x95, 0x71, 0xfe, 0xfa, 0x8e, 0xfa, 0x3e, 0x4e, 0xf4, 0x5b, 0xd9, 0x01, 0x21, 0x8d, 0x08, 0xb3, 0x31, 0xfe, 0x6b, 0xaf, 0xfc, 0x7f, 0xbb, 0xfc, 0x1f, 0x51, 0xfd, 0x7b, 0x1f, 0x01, 0xc6, 0x29, 0xfe, 0x20, 0xfc, 0xfe, 0x71, 0xaa, 0x01, 0x39, 0x26, 0xff, 0xd0, 0x5d, 0xff, 0xe3, 0xa6, 0xff, 0x8f, 0x56, 0xff, 0xe0, 0x7b, 0xff, 0xc9, 0x02, 0xff, 0x79, 0x3e, 0xfe, 0xa7, 0x36, 0xff, 0x00, 0xb9, 0xfe, 0x5a, 0x43, 0xff, 0x43, 0xfd, 0xff, 0x5b, 0xe3, 0xff, 0x74, 0x53, 0x00, 0x29, 0xd1, 0xff, 0x71, 0x82, 0x16, 0xdd, 0x49, 0x1b, 0x99, 0xa2, 0x02, 0x8e, 0xb7, 0x03, 0x47, 0x1d, 0x05, 0xf8, 0xf6, 0xfd, 0x32, 0x82, 0xf9, 0x59, 0xea, 0xf3, 0x46, 0x72, 0x01, 0x2e, 0xdc, 0x08, 0xd0, 0x21, 0xfe, 0xa9, 0xb6, 0xfc, 0x70, 0x20, 0xfc, 0x9c, 0x15, 0xfd, 0x90, 0x3d, 0x01, 0x83, 0x19, 0xfe, 0xba, 0xdb, 0xfe, 0x0a, 0x8d, 0x01, 0x5c, 0xd9, 0xfe, 0x18, 0xef, 0xfe, 0x94, 0xbb, 0xff, 0xf0, 0x1f, 0xff, 0xf5, 0xa2, 0xff, 0xa1, 0x14, 0xff, 0xe5, 0x25, 0xfd, 0x34, 0xe0, 0xfe, 0x22, 0x42, 0xff, 0x34, 0xd9, 0xfe, 0x3c, 0xc9, 0xff, 0xa6, 0xf0, 0xff, 0x08, 0x02, 0x00, 0x01, 0x9c, 0xff, 0x9d, 0x89, 0x15, 0x35, 0xff, 0x1c, 0xa7, 0x3c, 0x06, 0xbb, 0x08, 0x03, 0xfb, 0x0a, 0x05, 0x1f, 0x3b, 0xfe, 0xfa, 0x71, 0xf8, 0xdc, 0xe5, 0xf3, 0xe2, 0x65, 0x00, 0x14, 0x8f, 0x08, 0x4f, 0x70, 0xfe, 0x52, 0xbd, 0xfc, 0x78, 0xd3, 0xfb, 0xcd, 0x8b, 0xfc, 0xd8, 0x37, 0x01, 0xef, 0x03, 0xfe, 0x1b, 0xb8, 0xfe, 0xbb, 0x87, 0x01, 0xb0, 0xd1, 0xfe, 0x3a, 0x8d, 0xfe, 0xef, 0x3b, 0xff, 0xfc, 0x5f, 0xff, 0xcd, 0xa0, 0xff, 0x7d, 0xf1, 0xfd, 0x5b, 0x61, 0xfd, 0xa9, 0x03, 0xff, 0x26, 0xc3, 0xfe, 0xed, 0xc5, 0xfe, 0xab, 0x7e, 0xff, 0x2a, 0xf3, 0xff, 0xbe, 0x34, 0x00, 0x55, 0xe6, 0xff, 0x85, 0x2c, 0x15, 0x05, 0x5b, 0x1d, 0x22, 0x63, 0x09, 0xc2, 0x3b, 0x04, 0xb9, 0x19, 0x04, 0x1f, 0x96, 0xfe, 0x72, 0xea, 0xf7, 0xb7, 0xbd, 0xf3, 0x79, 0xe2, 0xff, 0xb4, 0xa2, 0x07, 0xff, 0x83, 0xfe, 0x96, 0xdb, 0xfc, 0x58, 0xaf, 0xfb, 0x52, 0x34, 0xfc, 0xe9, 0x0e, 0x01, 0x9d, 0xbe, 0xfd, 0x58, 0xa8, 0xfe, 0x12, 0x8a, 0x01, 0xbc, 0xef, 0xfe, 0xa3, 0x60, 0xfe, 0xb3, 0x4c, 0xff, 0x00, 0x91, 0xfe, 0x5c, 0xee, 0xfe, 0x4a, 0xdf, 0xfe, 0x1b, 0xeb, 0xfc, 0xb2, 0x82, 0xfe, 0x7f, 0xaa, 0xfe, 0x02, 0xaa, 0xfe, 0x2a, 0x79, 0xff, 0xa1, 0x22, 0x00, 0xca, 0x5f, 0x00, 0x5d, 0x65, 0xff, 0x78, 0x81, 0x15, 0x60, 0x29, 0x1d, 0x21, 0xfa, 0x0a, 0x95, 0xc9, 0x06, 0x7c, 0xac, 0x03, 0x6e, 0x06, 0xfe, 0x89, 0x1a, 0xf8, 0xbc, 0xb1, 0xf3, 0x27, 0x7e, 0xff, 0x77, 0x9a, 0x06, 0xf1, 0x6c, 0xfe, 0xe0, 0xe5, 0xfc, 0x1a, 0x50, 0xfb, 0x0e, 0x30, 0xfc, 0x8e, 0xec, 0x00, 0xab, 0x57, 0xfd, 0xfc, 0x90, 0xfe, 0x7f, 0x7d, 0x01, 0x7d, 0x14, 0xff, 0x10, 0x2a, 0xff, 0x12, 0x07, 0xfe, 0x70, 0x15, 0xfe, 0xe2, 0x96, 0xff, 0xc3, 0x61, 0xfe, 0x8c, 0x0a, 0xfd, 0x7e, 0x11, 0xfe, 0xb6, 0x3e, 0xfe, 0x11, 0xcc, 0xfe, 0x4b, 0xd9, 0xff, 0x21, 0x1b, 0x00, 0xea, 0xc1, 0xff, 0x6c, 0x52, 0xff, 0x73, 0xa3, 0x16, 0xf2, 0x8e, 0x1c, 0x4d, 0x19, 0x0b, 0xd3, 0x43, 0x09, 0xcb, 0x83, 0x04, 0x96, 0x45, 0xfd, 0xd5, 0x14, 0xf8, 0xf0, 0xcd, 0xf4, 0xfc, 0x0d, 0xff, 0x6d, 0x34, 0x05, 0xe8, 0x3d, 0xfe, 0x61, 0x6a, 0xfd, 0xec, 0x67, 0xfa, 0xfc, 0xf9, 0xfb, 0x7f, 0x0d, 0x01, 0x6c, 0xb4, 0xfc, 0xe8, 0x5c, 0xfe, 0xaf, 0xb4, 0x01, 0xd2, 0x4f, 0xff, 0x5f, 0x65, 0xfe, 0x7b, 0xbc, 0xfe, 0x04, 0x28, 0xfe, 0x2e, 0xce, 0xfe, 0xba, 0x7b, 0xfe, 0x06, 0x1a, 0xfd, 0x05, 0x39, 0xfe, 0x74, 0xbf, 0xfd, 0xb2, 0xf6, 0xfe, 0x05, 0xac, 0xff, 0xab, 0x8d, 0xff, 0x1b, 0x2e, 0x00, 0xf2, 0xeb, 0xff, 0x27, 0x15, 0x19, 0xea, 0x77, 0x1b, 0x81, 0x42, 0x0a, 0x30, 0x8d, 0x0b, 0xb1, 0x11, 0x05, 0xe9, 0x4c, 0xfd, 0x55, 0x0a, 0xf7, 0x6d, 0x9a, 0xf6, 0x8b, 0x83, 0xff, 0x82, 0x91, 0x02, 0x9a, 0xea, 0xfd, 0x4c, 0xa1, 0xfe, 0x9c, 0xcb, 0xf9, 0x67, 0x24, 0xfb, 0xa0, 0x51, 0x01, 0xac, 0x89, 0xfb, 0x07, 0x21, 0xff, 0x14, 0x51, 0x01, 0x71, 0x33, 0xfe, 0xab, 0x17, 0x00, 0xd6, 0x84, 0xfe, 0xa3, 0xb0, 0xfd, 0x3c, 0x04, 0xff, 0x21, 0x2c, 0xfe, 0x16, 0xfc, 0xfc, 0xfd, 0xb6, 0xfe, 0x6c, 0xb0, 0xfd, 0x46, 0x34, 0xfe, 0x3a, 0x3e, 0xff, 0x85, 0x05, 0x00, 0x58, 0x98, 0x00, 0x51, 0x5c, 0xff, 0x13, 0x4b, 0x1c, 0x70, 0x38, 0x1a, 0xca, 0x3f, 0x08, 0xab, 0x33, 0x0e, 0x01, 0x9b, 0x04, 0x40, 0xf5, 0xfd, 0x59, 0x6c, 0xf6, 0xa7, 0x00, 0xf8, 0xe6, 0x6c, 0x01, 0xc0, 0xdc, 0xfe, 0x50, 0xc2, 0xfc, 0x21, 0x65, 0x00, 0x68, 0xd0, 0xf9, 0xdb, 0x21, 0xfa, 0x4c, 0xf5, 0x00, 0x87, 0x24, 0xfb, 0xb3, 0x83, 0xfe, 0x49, 0xa4, 0x00, 0xcc, 0xdf, 0xfe, 0x20, 0x83, 0x00, 0x06, 0x53, 0xfe, 0x32, 0xdf, 0xfd, 0x40, 0xef, 0xfe, 0x48, 0x28, 0xfe, 0x63, 0xe2, 0xfc, 0xb0, 0x21, 0xff, 0x70, 0xf7, 0xfc, 0x00, 0xde, 0xfd, 0x0d, 0xea, 0xff, 0xca, 0xb7, 0xff, 0x2a, 0xe2, 0xff, 0x88, 0x78, 0xff, 0x6b, 0xc0, 0x1f, 0x08, 0x8d, 0x19, 0x92, 0xf6, 0x04, 0x2a, 0x60, 0x11, 0xdf, 0xe8, 0x03, 0x26, 0xc5, 0xfd, 0x1c, 0x63, 0xf7, 0xff, 0xfe, 0xf8, 0x44, 0x40, 0x04, 0x02, 0x87, 0xfb, 0x7f, 0xf2, 0xf9, 0x48, 0x91, 0x02, 0x0a, 0xaf, 0xfa, 0x8f, 0x28, 0xf9, 0xe8, 0x53, 0x01, 0x06, 0x05, 0xf9, 0x09, 0x29, 0xfe, 0x8a, 0xc6, 0x01, 0x74, 0x2f, 0xfd, 0x2d, 0x09, 0x02, 0xb3, 0xbd, 0xfe, 0xcc, 0x67, 0xfd, 0xa9, 0x24, 0xff, 0x49, 0x74, 0xfe, 0xf0, 0x07, 0xfd, 0x50, 0xab, 0xfe, 0x2a, 0x02, 0xfd, 0x3b, 0x1e, 0xfe, 0x74, 0xf1, 0xff, 0x80, 0x38, 0xff, 0x45, 0xe4, 0xff, 0x7a, 0x3a, 0xff, 0xad, 0xfd, 0x22, 0x5a, 0xe3, 0x19, 0x0f, 0x6c, 0x00, 0x31, 0x30, 0x14, 0x31, 0x12, 0x04, 0xeb, 0xc9, 0xfb, 0xa9, 0x20, 0xf9, 0xcc, 0x69, 0xfa, 0x1e, 0x2e, 0x07, 0x6d, 0x4d, 0xf9, 0x07, 0x7d, 0xf5, 0x37, 0xc0, 0x03, 0x7a, 0xab, 0xfc, 0x60, 0x44, 0xf9, 0xae, 0xb1, 0xff, 0x4c, 0xeb, 0xf7, 0xfa, 0x58, 0xfe, 0x23, 0x12, 0x01, 0x0a, 0xc0, 0xfc, 0xfa, 0xe2, 0x02, 0x44, 0x50, 0xff, 0x2a, 0xee, 0xfc, 0xe8, 0x17, 0xff, 0x3f, 0xda, 0xfe, 0xc3, 0x0f, 0xfd, 0xa3, 0xc0, 0xfe, 0xa2, 0xda, 0xfc, 0xa8, 0xd7, 0xfd, 0xd8, 0x36, 0x00, 0xe2, 0x36, 0xff, 0xb4, 0x8a, 0xff, 0x09, 0xd3, 0xfe, 0x2c, 0x24, 0x27, 0xec, 0xc4, 0x1a, 0xec, 0x12, 0xfb, 0x5d, 0x39, 0x15, 0xf4, 0x3c, 0x05, 0x61, 0x89, 0xf9, 0x09, 0x67, 0xfa, 0x21, 0x61, 0xfc, 0x28, 0x1a, 0x0a, 0x9e, 0x99, 0xf8, 0x96, 0x2b, 0xf0, 0xbd, 0x3d, 0x03, 0x6f, 0x7b, 0x00, 0x39, 0x3d, 0xf8, 0x2e, 0xdc, 0xfe, 0xce, 0xa2, 0xf7, 0x4a, 0xe7, 0xfc, 0xb0, 0xfc, 0x01, 0x49, 0xb9, 0xfb, 0x38, 0x30, 0x03, 0xe0, 0x41, 0x00, 0x6f, 0x6e, 0xfc, 0xed, 0x2b, 0xff, 0x6a, 0xd3, 0xfe, 0x9b, 0x0c, 0xfd, 0xdb, 0x3c, 0xff, 0x7a, 0xfa, 0xfc, 0x77, 0x34, 0xfd, 0x8a, 0xb8, 0x00, 0x1a, 0x2d, 0xff, 0xf7, 0x31, 0xff, 0x4f, 0x69, 0xfe, 0xd6, 0x61, 0x2c, 0x67, 0x4f, 0x1e, 0x85, 0xba, 0xf3, 0x02, 0xa5, 0x11, 0x01, 0x0f, 0x08, 0xfb, 0x2c, 0xfa, 0x61, 0xe0, 0xfb, 0x35, 0x83, 0xfc, 0xe4, 0xd2, 0x0b, 0x71, 0xa8, 0xfa, 0xba, 0x65, 0xeb, 0x0d, 0x9f, 0x01, 0x55, 0x98, 0x03, 0x02, 0x29, 0xf8, 0x2e, 0x72, 0xfe, 0xc1, 0xd4, 0xf6, 0x7b, 0xb0, 0xfc, 0x8c, 0x60, 0x02, 0x32, 0x7d, 0xfb, 0xdd, 0xd9, 0x02, 0xa2, 0xb6, 0x00, 0xfd, 0x01, 0xfd, 0x81, 0xde, 0xfe, 0x86, 0x8f, 0xfe, 0xa5, 0xea, 0xfc, 0x5b, 0xe6, 0xff, 0xcf, 0x83, 0xfd, 0x25, 0xfb, 0xfc, 0xb5, 0x7c, 0x00, 0x81, 0x77, 0xff, 0x11, 0x0a, 0xff, 0x2f, 0xff, 0xfd, 0x8f, 0xa1, 0x31, 0xff, 0x2a, 0x22, 0xc8, 0x71, 0xec, 0x88, 0x2e, 0x0c, 0xb7, 0xd7, 0x0a, 0x76, 0x3b, 0xfc, 0x80, 0x1c, 0xfd, 0xb2, 0xe6, 0xfb, 0x3e, 0x77, 0x0c, 0x12, 0x38, 0xfd, 0x3a, 0x77, 0xe8, 0x24, 0x7e, 0xfe, 0xd6, 0x2f, 0x05, 0x01, 0xc4, 0xf9, 0xb2, 0x8a, 0xfd, 0xa7, 0x81, 0xf6, 0x79, 0x53, 0xfc, 0x75, 0x35, 0x02, 0xc0, 0xc0, 0xfb, 0x19, 0x5a, 0x02, 0x2b, 0x18, 0x01, 0xd2, 0x25, 0xfd, 0xb7, 0x58, 0xfe, 0x21, 0x3f, 0xfe, 0x6c, 0x28, 0xfd, 0xed, 0x15, 0x00, 0x3c, 0xc7, 0xfd, 0x93, 0xe6, 0xfc, 0x22, 0x1b, 0x00, 0x94, 0xf7, 0xff, 0xa5, 0x16, 0xff, 0xb8, 0x4a, 0xfd, 0xa7, 0xa5, 0x36, 0x9e, 0xef, 0x25, 0x8a, 0xf3, 0xe5, 0xe4, 0x7f, 0x06, 0x18, 0xa0, 0x0c, 0x7b, 0x84, 0xff, 0xb1, 0x51, 0xfe, 0xb3, 0x18, 0xfb, 0x58, 0x93, 0x0c, 0x0f, 0x14, 0x00, 0x47, 0x07, 0xe7, 0x23, 0xf0, 0xfa, 0x47, 0x92, 0x05, 0xdd, 0x3c, 0xfc, 0xc1, 0x1c, 0xfd, 0x85, 0x0d, 0xf6, 0xac, 0xa3, 0xfc, 0x5e, 0x7b, 0x01, 0xc4, 0xed, 0xfb, 0xda, 0x74, 0x02, 0x79, 0x09, 0x01, 0x7e, 0x0e, 0xfd, 0xb4, 0x34, 0xfe, 0xf4, 0x14, 0xfe, 0x22, 0x51, 0xfd, 0x42, 0xf7, 0xff, 0x6d, 0xa7, 0xfd, 0x16, 0x5c, 0xfd, 0x94, 0x00, 0x00, 0xc5, 0x48, 0x00, 0x50, 0xe3, 0xfe, 0x18, 0xbc, 0xfc, 0x0c, 0xe2, 0x3c, 0xca, 0xeb, 0x26, 0xfe, 0x5a, 0xe0, 0xa8, 0x95, 0x02, 0x98, 0x6e, 0x0c, 0xb2, 0x0e, 0x03, 0x4d, 0xd2, 0xfe, 0xfa, 0xc1, 0xf9, 0xab, 0xa1, 0x0d, 0xfd, 0xc3, 0x02, 0xb1, 0x0a, 0xe5, 0x22, 0xd1, 0xf7, 0x50, 0xb8, 0x05, 0x12, 0xea, 0xfd, 0xc8, 0xd9, 0xfd, 0x7b, 0x51, 0xf5, 0x84, 0x54, 0xfd, 0xf5, 0x06, 0x00, 0x56, 0xb8, 0xfb, 0x42, 0x50, 0x03, 0xae, 0x6d, 0x00, 0xca, 0xbf, 0xfc, 0xcc, 0x3d, 0xfe, 0xd8, 0x21, 0xfe, 0x9c, 0x9a, 0xfc, 0x45, 0xec, 0xff, 0xe4, 0x93, 0xfd, 0xcd, 0xdf, 0xfd, 0xde, 0xc0, 0xff, 0x96, 0x16, 0x00, 0xd9, 0xf5, 0xfe, 0x03, 0x81, 0xfc, 0xd3, 0x4a, 0x42, 0x49, 0xf2, 0x27, 0xe8, 0xca, 0xdb, 0xf1, 0xa8, 0x00, 0xa0, 0x2d, 0x0b, 0x78, 0xec, 0x05, 0x9e, 0x32, 0xff, 0xaf, 0xf8, 0xf7, 0x83, 0xd1, 0x10, 0x29, 0xcf, 0x05, 0x79, 0xef, 0xe1, 0xc2, 0xd0, 0xf5, 0x43, 0x12, 0x06, 0x30, 0x79, 0xfe, 0x5d, 0x61, 0x00, 0xec, 0x35, 0xf5, 0xdc, 0xc9, 0xfc, 0x0a, 0xff, 0xfe, 0xd8, 0xdb, 0xfb, 0xce, 0x2d, 0x04, 0x8c, 0x9b, 0xff, 0xb3, 0xc8, 0xfc, 0x6e, 0xb3, 0xfe, 0x1c, 0x10, 0xfe, 0x8f, 0x8f, 0xfb, 0xf9, 0x40, 0x00, 0x87, 0xc6, 0xfd, 0x93, 0xdb, 0xfd, 0xfb, 0xae, 0xff, 0x80, 0x16, 0x00, 0xdd, 0x52, 0xff, 0x75, 0x39, 0xfc, 0x1e, 0xf4, 0x46, 0x76, 0x6a, 0x28, 0x50, 0xee, 0xd7, 0x86, 0x76, 0x00, 0xb9, 0xb2, 0x08, 0x33, 0x44, 0x07, 0xc9, 0x2b, 0xff, 0xcc, 0x78, 0xf5, 0xac, 0xe4, 0x15, 0x68, 0x56, 0x07, 0x05, 0xa5, 0xde, 0x4e, 0x42, 0xf5, 0x1b, 0xa8, 0x04, 0xa0, 0x1f, 0xff, 0x4f, 0x55, 0x03, 0x82, 0x33, 0xf5, 0xa8, 0x56, 0xfb, 0xdb, 0x6f, 0xfe, 0x55, 0x23, 0xfc, 0x5e, 0xef, 0x03, 0xfa, 0xdd, 0xfe, 0x73, 0x0e, 0xfd, 0xb1, 0x3d, 0xff, 0x45, 0x95, 0xfd, 0x88, 0xa0, 0xfa, 0x28, 0x20, 0x00, 0x5a, 0xfe, 0xfd, 0xf4, 0xba, 0xfd, 0x9e, 0x86, 0xff, 0x9d, 0x3b, 0x00, 0x85, 0x32, 0xff, 0xb6, 0x1d, 0xfc, 0xb5, 0xeb, 0x4a, 0xaf, 0xca, 0x28, 0xd3, 0x0a, 0xd5, 0xda, 0x6f, 0x01, 0xac, 0xbe, 0x05, 0x97, 0x87, 0x07, 0x99, 0xc5, 0xfe, 0x39, 0x32, 0xf3, 0x65, 0x7b, 0x1b, 0x47, 0xce, 0x07, 0xd8, 0x09, 0xdd, 0xc5, 0x09, 0xf5, 0x7a, 0x3c, 0x02, 0x7d, 0x3d, 0x00, 0xb6, 0xcb, 0x05, 0xc3, 0xc0, 0xf5, 0xf8, 0xbe, 0xf9, 0x7d, 0xa7, 0xfe, 0x93, 0x04, 0xfc, 0xd4, 0xbb, 0x02, 0xdb, 0xdc, 0xfe, 0x9d, 0x8c, 0xfd, 0xd9, 0xa3, 0xff, 0x24, 0x00, 0xfd, 0xb1, 0xea, 0xf9, 0x2d, 0xd0, 0xff, 0x73, 0x63, 0xfe, 0x8b, 0x8c, 0xfd, 0xac, 0x84, 0xff, 0x8e, 0x1c, 0x00, 0xdf, 0x1c, 0xff, 0xc7, 0x7f, 0xfc, 0xb3, 0x06, 0x4f, 0x5c, 0x8f, 0x28, 0x1a, 0x33, 0xd3, 0xfc, 0xc3, 0x02, 0x2e, 0x9d, 0x02, 0xc2, 0xc5, 0x07, 0x29, 0xa1, 0xfd, 0xbc, 0xc4, 0xf1, 0xf8, 0x0b, 0x20, 0x6a, 0x03, 0x08, 0xd1, 0xa2, 0xdd, 0xb4, 0x34, 0xf4, 0x61, 0x19, 0x00, 0x56, 0xf4, 0x00, 0x61, 0xf3, 0x07, 0xd5, 0xcc, 0xf6, 0x2b, 0x7f, 0xf8, 0xb3, 0x5f, 0xff, 0x21, 0x6d, 0xfb, 0x3e, 0x10, 0x01, 0xef, 0x5b, 0xff, 0x5a, 0x7e, 0xfe, 0x9d, 0x76, 0xff, 0x78, 0x87, 0xfc, 0x4e, 0x84, 0xf9, 0x01, 0xad, 0xff, 0x58, 0xcf, 0xfe, 0xa1, 0x5a, 0xfd, 0x8d, 0x55, 0xff, 0xb1, 0x54, 0x00, 0x1e, 0x48, 0xff, 0x75, 0x57, 0xfc, 0x1b, 0x62, 0x51, 0x97, 0x0a, 0x2a, 0xdf, 0x9a, 0xd1, 0xb7, 0x3e, 0x03, 0x09, 0xe8, 0xff, 0x93, 0xd7, 0x07, 0x47, 0x2c, 0xfc, 0x8f, 0x89, 0xf0, 0xb9, 0x19, 0x22, 0x18, 0x30, 0x09, 0x63, 0xe5, 0xdf, 0xde, 0x68, 0xf2, 0xc3, 0x58, 0xfe, 0xcf, 0xb3, 0x00, 0x25, 0xd2, 0x09, 0xd8, 0x17, 0xf8, 0xb7, 0x61, 0xf7, 0xe5, 0x51, 0x00, 0x17, 0x52, 0xfa, 0x0e, 0x36, 0xff, 0x8b, 0xee, 0xff, 0x32, 0x8a, 0xff, 0x00, 0xad, 0xfe, 0xe8, 0x60, 0xfc, 0x8a, 0x12, 0xf9, 0xd6, 0xb6, 0xff, 0x56, 0x4a, 0xff, 0xf2, 0x8a, 0xfc, 0x95, 0x7a, 0xff, 0x2b, 0xcd, 0x00, 0x62, 0xf6, 0xfe, 0xb3, 0xcc, 0xfb, 0x90, 0xcd, 0x53, 0x14, 0xfd, 0x2a, 0x7e, 0x1a, 0xd1, 0xdb, 0xe7, 0x02, 0x23, 0x86, 0xfd, 0x16, 0x57, 0x08, 0x5f, 0x0d, 0xfa, 0xfb, 0xd6, 0xef, 0xa0, 0x7d, 0x22, 0xa9, 0xa8, 0x0a, 0x09, 0x38, 0xe3, 0x02, 0x83, 0xf0, 0xf9, 0x05, 0xfd, 0xc0, 0xb2, 0xff, 0xa0, 0xbd, 0x0b, 0x01, 0x37, 0xf9, 0x32, 0xc4, 0xf6, 0x12, 0x25, 0x01, 0xad, 0x37, 0xf9, 0xac, 0x84, 0xfd, 0x21, 0x78, 0x00, 0x0a, 0x32, 0x00, 0x12, 0x0b, 0xfe, 0x8a, 0x89, 0xfc, 0xcd, 0x51, 0xf8, 0x75, 0x48, 0x00, 0x8c, 0x60, 0xff, 0xeb, 0xe0, 0xfb, 0x7a, 0x10, 0x00, 0x3d, 0xb1, 0x00, 0x22, 0x7c, 0xfe, 0x39, 0x92, 0xfb, 0xe4, 0xbf, 0x55, 0x01, 0xb0, 0x2b, 0xe3, 0xb6, 0xd1, 0x66, 0xfb, 0x01, 0x05, 0xa6, 0xfb, 0x85, 0xad, 0x08, 0xe7, 0x24, 0xf8, 0x41, 0x0d, 0xef, 0xbe, 0x44, 0x21, 0x4d, 0xe3, 0x0c, 0xa9, 0xb7, 0xe6, 0x25, 0x0f, 0xef, 0x9f, 0x0c, 0xfc, 0x1e, 0x3e, 0xfe, 0x9a, 0x5c, 0x0d, 0xe7, 0x34, 0xfa, 0x62, 0xa8, 0xf6, 0x57, 0x6f, 0x01, 0xf1, 0x7a, 0xf8, 0x6c, 0x39, 0xfc, 0x00, 0xaa, 0x00, 0xa5, 0x76, 0x00, 0x2c, 0xa4, 0xfd, 0xaa, 0xf9, 0xfc, 0xcd, 0xc4, 0xf7, 0x76, 0x69, 0x00, 0x18, 0x75, 0xff, 0x46, 0xf3, 0xfb, 0x3d, 0x08, 0x00, 0xb1, 0x2a, 0x00, 0x70, 0x4a, 0xfe, 0x67, 0x6d, 0xfb, 0xdb, 0xfd, 0x55, 0xde, 0xf0, 0x2d, 0x91, 0xed, 0xd2, 0x82, 0x81, 0x00, 0xac, 0x4f, 0xfa, 0xc3, 0xfd, 0x07, 0x56, 0x20, 0xf8, 0x3c, 0xc0, 0xec, 0x8b, 0xb7, 0x1e, 0x1a, 0x8a, 0x10, 0xa3, 0xb9, 0xe9, 0xde, 0x89, 0xee, 0x98, 0xfd, 0xfa, 0x59, 0xd3, 0xfc, 0x5f, 0x48, 0x0e, 0xc7, 0x5f, 0xfb, 0xcf, 0x05, 0xf7, 0x12, 0xfe, 0x00, 0x6b, 0x1b, 0xf8, 0x2a, 0x7d, 0xfb, 0x37, 0x77, 0x00, 0x99, 0x60, 0x00, 0x9e, 0x65, 0xfd, 0x9d, 0xc0, 0xfd, 0x3f, 0x7e, 0xf7, 0xd1, 0xbf, 0xff, 0x4d, 0x08, 0x00, 0xd8, 0xfa, 0xfb, 0xcc, 0x81, 0xff, 0x71, 0xda, 0xff, 0x1c, 0xf7, 0xfd, 0xa4, 0xd4, 0xfb, 0x02, 0x88, 0x54, 0x13, 0x1f, 0x31, 0x2c, 0x46, 0xd5, 0x2a, 0x29, 0xff, 0x2e, 0x09, 0xf9, 0xb3, 0x30, 0x06, 0xdd, 0x25, 0xfa, 0xda, 0xbd, 0xe8, 0x1b, 0x53, 0x1b, 0x7d, 0x53, 0x15, 0x36, 0x1a, 0xec, 0x6e, 0x30, 0xef, 0x10, 0xdb, 0xf9, 0x38, 0x5a, 0xfb, 0x96, 0x57, 0x0e, 0x00, 0xf3, 0xfc, 0xb4, 0xe5, 0xf7, 0x7e, 0xe1, 0xff, 0x9e, 0xea, 0xf7, 0x3e, 0x3f, 0xfb, 0x33, 0x5e, 0x00, 0x94, 0x9a, 0xff, 0x61, 0xa7, 0xfd, 0x00, 0x7b, 0xfe, 0xd4, 0x51, 0xf7, 0xff, 0x32, 0xff, 0x52, 0xdd, 0xff, 0xa8, 0x30, 0xfc, 0xe8, 0x0e, 0xff, 0x31, 0x65, 0xff, 0x07, 0x38, 0xfe, 0xe0, 0xd5, 0xfc, 0xaa, 0x9b, 0x51, 0xf1, 0x90, 0x34, 0xac, 0xe1, 0xd8, 0x92, 0x70, 0xfe, 0x3d, 0x97, 0xf7, 0x32, 0xd4, 0x03, 0xf6, 0x45, 0xfd, 0xe9, 0x65, 0xe3, 0x35, 0x80, 0x17, 0x9a, 0xb7, 0x1a, 0x8d, 0x2f, 0xee, 0x4d, 0x84, 0xf0, 0x20, 0x66, 0xf9, 0x9a, 0x8f, 0xf9, 0x71, 0x90, 0x0d, 0xf4, 0x21, 0xff, 0x63, 0xee, 0xf8, 0xf3, 0x73, 0xfe, 0x98, 0xa1, 0xf7, 0xf6, 0xc6, 0xfb, 0x37, 0x21, 0x00, 0x3a, 0x86, 0xfe, 0x0a, 0x1c, 0xfe, 0xec, 0x0c, 0xff, 0xd3, 0x57, 0xf7, 0x9d, 0x4c, 0xfe, 0x5f, 0xa6, 0xff, 0xd9, 0x44, 0xfc, 0x10, 0xaa, 0xfe, 0x07, 0xb7, 0xff, 0xf8, 0xda, 0xfe, 0xc4, 0x72, 0xfd, 0x45, 0x67, 0x4d, 0x72, 0x8b, 0x37, 0xa7, 0x2b, 0xde, 0x0f, 0x2f, 0xfe, 0xf5, 0xb0, 0xf5, 0x54, 0xa3, 0x01, 0xd1, 0x53, 0x00, 0xac, 0x02, 0xde, 0x21, 0xbb, 0x12, 0xdb, 0xd1, 0x1f, 0xcb, 0xa2, 0xf0, 0x44, 0x19, 0xf2, 0xf4, 0x1d, 0xfa, 0xbd, 0x04, 0xf7, 0xcd, 0xfb, 0x0b, 0xb4, 0xd5, 0x01, 0xab, 0xb3, 0xf9, 0xca, 0xfe, 0xfc, 0x95, 0xe2, 0xf7, 0xde, 0xf1, 0xfb, 0xdf, 0x1e, 0x00, 0x95, 0x7f, 0xfd, 0xef, 0xfe, 0xfd, 0x0f, 0xc6, 0xff, 0x73, 0xd4, 0xf6, 0x00, 0xef, 0xfd, 0x07, 0xea, 0xfe, 0x9a, 0x32, 0xfc, 0x1b, 0x67, 0xff, 0x5f, 0x09, 0x00, 0xd0, 0x4d, 0xff, 0x1a, 0x34, 0xfe, 0x95, 0x8b, 0x48, 0x26, 0x23, 0x3a, 0x1b, 0xb6, 0xe4, 0x5c, 0xff, 0xfd, 0xcc, 0xa0, 0xf3, 0xe6, 0x50, 0x00, 0x63, 0xc1, 0x02, 0x4c, 0x3b, 0xda, 0x28, 0x5f, 0x0c, 0x3f, 0xce, 0x23, 0xb5, 0xbf, 0xf4, 0xcb, 0x04, 0xf3, 0x3e, 0xdc, 0xfc, 0x03, 0xae, 0xf3, 0x17, 0x01, 0x0a, 0xb4, 0xc1, 0x04, 0x42, 0xf4, 0xf9, 0x03, 0xc8, 0xfc, 0xda, 0xfc, 0xf7, 0xbd, 0xee, 0xfb, 0x90, 0x2b, 0x00, 0x62, 0x4d, 0xfd, 0x47, 0x61, 0xfc, 0x09, 0x93, 0x00, 0x75, 0x45, 0xf7, 0x07, 0x86, 0xfc, 0x80, 0x01, 0xff, 0x6c, 0xab, 0xfc, 0xa7, 0x27, 0x00, 0x8a, 0x67, 0x00, 0x99, 0x32, 0x00, 0x91, 0x8a, 0xfe, 0x18, 0x0a, 0x44, 0x73, 0xb9, 0x3b, 0xe3, 0x7a, 0xea, 0xf3, 0x0d, 0xfe, 0xb0, 0xfe, 0xf2, 0x7e, 0x66, 0xfe, 0xa1, 0x25, 0x03, 0x70, 0xe7, 0xd9, 0x2d, 0xc1, 0x04, 0x52, 0xd5, 0x24, 0x8c, 0x6a, 0xfb, 0x31, 0xb3, 0xf2, 0x08, 0x31, 0x00, 0x93, 0x38, 0xf1, 0xa6, 0x86, 0x06, 0x44, 0x28, 0x08, 0xbf, 0xbe, 0xf9, 0x37, 0x3a, 0xfd, 0xba, 0x51, 0xf8, 0x61, 0xd6, 0xfa, 0x6f, 0x8c, 0x00, 0xad, 0x06, 0xfd, 0xbc, 0x5f, 0xfa, 0x47, 0xf7, 0x00, 0x6f, 0x74, 0xf7, 0xbd, 0x10, 0xfc, 0x0a, 0xb8, 0xff, 0x54, 0x6c, 0xfc, 0xa9, 0x22, 0x01, 0xcb, 0x5c, 0x01, 0xd0, 0x30, 0x00, 0xa5, 0x01, 0xfe, 0x5a, 0xcb, 0x40, 0xb7, 0xfe, 0x3b, 0x4b, 0xb4, 0xed, 0xc2, 0xd5, 0xfe, 0x79, 0x3c, 0xf5, 0x0e, 0xe9, 0xfa, 0x2a, 0xaf, 0x00, 0x1c, 0xee, 0xdc, 0x83, 0x8e, 0xfd, 0x40, 0xfe, 0x22, 0x51, 0xee, 0x02, 0xce, 0x41, 0xf2, 0x0d, 0x9c, 0x02, 0xb1, 0x4c, 0xf0, 0x36, 0x67, 0x02, 0x7a, 0xf3, 0x0a, 0x0d, 0x53, 0xfa, 0x3c, 0x3b, 0xfd, 0xc8, 0x51, 0xf9, 0xb7, 0xc2, 0xf8, 0xad, 0x8d, 0xff, 0x6a, 0x2c, 0xfe, 0xcd, 0x25, 0xf8, 0xee, 0xc4, 0xff, 0x3f, 0x0b, 0xf9, 0xb0, 0x0d, 0xfc, 0x75, 0x3f, 0x00, 0xd9, 0x57, 0xfc, 0x8c, 0xe1, 0x01, 0x19, 0xca, 0x01, 0x65, 0xcb, 0xff, 0x95, 0xdb, 0xfd, 0x2a, 0xb5, 0x3f, 0x9c, 0x60, 0x39, 0x86, 0x96, 0xef, 0xf3, 0x95, 0x01, 0x17, 0x0b, 0xf8, 0xd0, 0xf1, 0xf7, 0xea, 0x5c, 0xfc, 0xda, 0x43, 0xe1, 0xe7, 0x1f, 0xf8, 0x72, 0xe9, 0x20, 0xb5, 0x3e, 0x08, 0xbf, 0x99, 0xf2, 0x12, 0x1f, 0x05, 0x6d, 0xda, 0xee, 0x69, 0x47, 0x00, 0x13, 0x51, 0x0c, 0x22, 0xa3, 0xfb, 0x03, 0xd7, 0xfd, 0x49, 0x70, 0xf9, 0xe0, 0xb2, 0xf6, 0x5a, 0x08, 0xff, 0xad, 0x37, 0xfe, 0x7c, 0x6a, 0xf6, 0xfd, 0x2d, 0x00, 0xfc, 0xa9, 0xf9, 0x74, 0x9b, 0xfc, 0xc4, 0xed, 0x00, 0xb7, 0x1c, 0xfc, 0x95, 0x5b, 0x02, 0x6f, 0xe7, 0x01, 0x14, 0x79, 0xff, 0xa4, 0xb6, 0xfd, 0xbb, 0xf0, 0x3e, 0x4e, 0x53, 0x36, 0x37, 0x3c, 0xf0, 0x58, 0x2f, 0x05, 0x1a, 0xea, 0xfa, 0xf0, 0x85, 0xf4, 0x9c, 0xbb, 0xf8, 0x88, 0xb8, 0xe6, 0xb2, 0x8c, 0xf2, 0x2b, 0x8e, 0x1e, 0x60, 0xa7, 0x0d, 0xc4, 0xa5, 0xf0, 0x44, 0x82, 0x08, 0x4c, 0xff, 0xee, 0x62, 0x20, 0xfd, 0xdd, 0xac, 0x0e, 0x5b, 0xb3, 0xfc, 0xff, 0xa5, 0xfd, 0x25, 0xc3, 0xf9, 0x60, 0x4f, 0xf6, 0x7a, 0xe0, 0xfc, 0xe4, 0xcb, 0xfd, 0x96, 0xf7, 0xf5, 0xa4, 0xae, 0x00, 0x33, 0x23, 0xfb, 0xbe, 0xc4, 0xfb, 0xe2, 0x7a, 0x01, 0x52, 0x9a, 0xfc, 0x38, 0x81, 0x02, 0xea, 0x5e, 0x01, 0x34, 0x32, 0xff, 0xe1, 0x7d, 0xfe, 0x05, 0x82, 0x3f, 0x94, 0xed, 0x32, 0x48, 0xed, 0xee, 0x6f, 0x21, 0x08, 0x57, 0x4d, 0xfd, 0x01, 0xbe, 0xf1, 0x07, 0x92, 0xf6, 0x09, 0x29, 0xed, 0x74, 0x35, 0xef, 0xe7, 0xcc, 0x18, 0x2a, 0xa0, 0x13, 0xc6, 0xd8, 0xed, 0x9c, 0x1c, 0x09, 0xa2, 0xdd, 0xf3, 0x62, 0xe1, 0xf7, 0xc6, 0x9b, 0x11, 0x5a, 0xcd, 0xfd, 0x9d, 0x97, 0xfb, 0xcf, 0x2d, 0xfc, 0xf9, 0xb7, 0xf5, 0x0b, 0xcd, 0xfa, 0xde, 0x81, 0xfd, 0x46, 0xbe, 0xf5, 0x39, 0xcd, 0x00, 0x59, 0x7d, 0xfd, 0xf1, 0x0b, 0xfa, 0x51, 0x9d, 0x01, 0x3c, 0xbe, 0xfd, 0x58, 0x62, 0x01, 0xf3, 0xd7, 0x01, 0xaa, 0x0c, 0xff, 0x47, 0xbd, 0xfe, 0x38, 0x74, 0x3e, 0xdc, 0x8f, 0x30, 0xba, 0xf3, 0xed, 0xb4, 0x33, 0x0b, 0x7b, 0x0b, 0xff, 0x22, 0xd5, 0xef, 0xd1, 0x6f, 0xf5, 0x49, 0x30, 0xf1, 0xc9, 0xe0, 0xed, 0xe9, 0x48, 0x12, 0xbc, 0x1f, 0x19, 0xa6, 0x0f, 0xee, 0x15, 0x05, 0x05, 0xb1, 0x60, 0xfa, 0x01, 0x5f, 0xf4, 0xbe, 0x16, 0x11, 0xe0, 0x46, 0x02, 0xb8, 0xc8, 0xf8, 0x08, 0x45, 0xfd, 0x4e, 0xbb, 0xf6, 0xf0, 0x71, 0xf9, 0x41, 0x5f, 0xfd, 0xa6, 0x25, 0xf5, 0x04, 0x4f, 0x00, 0x45, 0x0c, 0xff, 0xfd, 0x9e, 0xf9, 0xc7, 0xca, 0x00, 0xf3, 0x5b, 0xfe, 0x90, 0xd8, 0x00, 0x55, 0x30, 0x02, 0xed, 0x8c, 0xff, 0xe3, 0x68, 0xfe, 0x82, 0x5a, 0x3d, 0xb1, 0xbe, 0x2c, 0x5b, 0xb5, 0xed, 0xe0, 0x16, 0x0f, 0x3d, 0xa3, 0xfe, 0x19, 0x4a, 0xef, 0x8e, 0xcf, 0xf6, 0x42, 0x5d, 0xf2, 0x8a, 0xe4, 0xec, 0x79, 0x1b, 0x0e, 0x6d, 0xdc, 0x1b, 0xb4, 0x15, 0xef, 0x15, 0xab, 0x01, 0x39, 0xac, 0xfc, 0x79, 0x0a, 0xf5, 0xa0, 0xe7, 0x0f, 0x9b, 0xac, 0x04, 0x1b, 0x60, 0xf8, 0x6a, 0x15, 0xfd, 0xa7, 0x7f, 0xf8, 0x8f, 0x74, 0xf8, 0x77, 0x56, 0xfe, 0xe2, 0xb3, 0xf4, 0xfc, 0x9f, 0xfd, 0x39, 0xcc, 0xff, 0x50, 0x66, 0xfa, 0xa9, 0x86, 0x00, 0xc2, 0x2f, 0xfe, 0x47, 0x62, 0x00, 0xbb, 0x35, 0x02, 0xeb, 0xec, 0xff, 0xc2, 0xa9, 0xfe, 0x04, 0x32, 0x3c, 0xff, 0xc0, 0x29, 0xc2, 0xe6, 0xec, 0xca, 0x28, 0x12, 0x62, 0x20, 0xfd, 0x9f, 0xe6, 0xed, 0x5e, 0xef, 0xfa, 0x58, 0xfb, 0xf4, 0xb6, 0x7f, 0xea, 0x3b, 0x26, 0x09, 0xe1, 0x5a, 0x1f, 0x63, 0xf3, 0xee, 0xb0, 0xbb, 0xfd, 0x63, 0x9e, 0x01, 0x27, 0xe8, 0xf3, 0x65, 0x7d, 0x0d, 0x99, 0xe1, 0x07, 0xbd, 0xc2, 0xf8, 0x1e, 0xf1, 0xfc, 0x94, 0x81, 0xf9, 0x7a, 0x3c, 0xf8, 0xb0, 0xcc, 0xff, 0xf0, 0x54, 0xf5, 0x5b, 0x4f, 0xf9, 0x32, 0x16, 0xff, 0x39, 0xe2, 0xfb, 0x78, 0xdf, 0x00, 0x95, 0x28, 0xff, 0x5e, 0x7f, 0xfe, 0x2b, 0x54, 0x01, 0x8c, 0x65, 0x01, 0xfa, 0x91, 0xff, 0xa8, 0x0b, 0x3a, 0x11, 0x7d, 0x28, 0xbd, 0xac, 0xe9, 0x87, 0x53, 0x15, 0x76, 0x6b, 0xff, 0xf6, 0x55, 0xea, 0x67, 0x40, 0xfe, 0x4f, 0x66, 0xf8, 0x17, 0xfc, 0xe9, 0x69, 0x1d, 0x02, 0x13, 0x55, 0x21, 0x48, 0x9d, 0xf2, 0xf1, 0x33, 0xf8, 0xa6, 0x40, 0x06, 0xa4, 0x3d, 0xf4, 0xf6, 0xe4, 0x07, 0x2f, 0x8d, 0x0c, 0x29, 0x25, 0xfa, 0x24, 0x07, 0xfc, 0x68, 0xa9, 0xfb, 0x8d, 0xd2, 0xf6, 0x0a, 0x9b, 0x01, 0x56, 0xf3, 0xf6, 0x15, 0x01, 0xf5, 0xb8, 0x09, 0xfe, 0xbf, 0xbd, 0xfc, 0x6d, 0x9d, 0x00, 0xcc, 0x2a, 0x01, 0x86, 0x8f, 0xfd, 0x6b, 0x12, 0xff, 0x11, 0xfa, 0x02, 0x83, 0x8b, 0x00, 0x8c, 0x8f, 0x38, 0xe3, 0x5e, 0x25, 0xea, 0x71, 0xe8, 0xca, 0x51, 0x17, 0xa7, 0x2d, 0x02, 0x85, 0xfd, 0xe9, 0xf9, 0x00, 0xfd, 0xe8, 0x38, 0xfd, 0x22, 0xb5, 0xeb, 0xd1, 0x11, 0xfa, 0x8a, 0x8d, 0x22, 0x1a, 0xe3, 0xf6, 0x2b, 0xa3, 0xf4, 0x8c, 0xa0, 0x08, 0x3b, 0x06, 0xf6, 0x66, 0x40, 0x03, 0xae, 0x6c, 0x0d, 0x47, 0xe6, 0xfd, 0xce, 0x17, 0xfc, 0x89, 0x98, 0xfc, 0x73, 0x57, 0xf7, 0xe7, 0x34, 0x01, 0x4b, 0x2e, 0xf8, 0xf1, 0x40, 0xf4, 0xb1, 0xfa, 0xfc, 0xad, 0xe8, 0xfb, 0x24, 0x1f, 0x00, 0xf0, 0xbf, 0x02, 0x94, 0x16, 0xfe, 0xec, 0x51, 0xfe, 0x0f, 0x57, 0x02, 0xdb, 0xf2, 0x00, 0xac, 0xf6, 0x35, 0x95, 0xa9, 0x21, 0xf1, 0xb9, 0xe8, 0x37, 0xc6, 0x19, 0xc3, 0x8f, 0x02, 0x4b, 0xa7, 0xea, 0x77, 0x3a, 0xfe, 0xf0, 0x9b, 0xfd, 0x18, 0x46, 0xed, 0xb7, 0x7d, 0xf7, 0xb5, 0xc4, 0x1f, 0x99, 0x40, 0xf9, 0x84, 0x84, 0xf4, 0x41, 0x06, 0x0a, 0x1a, 0xf4, 0xf6, 0xdd, 0xd9, 0xff, 0xe8, 0xe4, 0x0c, 0x44, 0xc6, 0xff, 0xf6, 0xb2, 0xfd, 0xcb, 0x2d, 0xfd, 0x90, 0x40, 0xf8, 0xab, 0x19, 0x00, 0x33, 0x1a, 0xf8, 0xf0, 0xb4, 0xf5, 0x49, 0xa4, 0xfc, 0x21, 0x23, 0xfb, 0xec, 0x65, 0xfe, 0x77, 0xf3, 0x02, 0x9c, 0x0b, 0xff, 0xa4, 0x3c, 0xff, 0xec, 0x42, 0x01, 0x8f, 0xa8, 0xff, 0x22, 0x64, 0x32, 0xce, 0x85, 0x1d, 0xcd, 0x51, 0xeb, 0x83, 0x41, 0x1b, 0x9e, 0x87, 0x01, 0x2f, 0xe0, 0xec, 0xe7, 0x39, 0xff, 0x3f, 0xea, 0xfc, 0xd9, 0xc8, 0xee, 0xf3, 0xe8, 0xf6, 0x77, 0x36, 0x1c, 0x88, 0x71, 0xfa, 0x2f, 0x3d, 0xf5, 0x33, 0x03, 0x0b, 0xa5, 0xa7, 0xf8, 0x8d, 0x3a, 0xfc, 0xba, 0xa2, 0x0c, 0x3b, 0xca, 0x00, 0xba, 0x0a, 0xfd, 0x5e, 0xd0, 0xff, 0x1d, 0x99, 0xf8, 0x0a, 0x01, 0xff, 0x38, 0xb9, 0xf8, 0xc1, 0xb8, 0xf5, 0x7f, 0x12, 0xfe, 0xd0, 0x70, 0xfb, 0x0a, 0x53, 0xfc, 0x02, 0xbd, 0x01, 0x94, 0xba, 0xff, 0x59, 0x12, 0x00, 0x4b, 0x6a, 0x01, 0xec, 0xe6, 0xfe, 0x6e, 0xb0, 0x2d, 0x3c, 0x40, 0x1a, 0xac, 0x23, 0xef, 0x9c, 0x42, 0x1b, 0xf8, 0x20, 0x01, 0x29, 0x37, 0xef, 0x8d, 0xb0, 0xff, 0x77, 0x26, 0xfd, 0x2b, 0x69, 0xf0, 0x4d, 0x15, 0xf6, 0xc5, 0xcb, 0x18, 0xba, 0x68, 0xfc, 0xc9, 0x85, 0xf5, 0x5d, 0xb9, 0x0a, 0x19, 0x80, 0xfb, 0x80, 0xec, 0xf9, 0x31, 0xf0, 0x0a, 0xac, 0x25, 0x02, 0xc3, 0x22, 0xfc, 0xb5, 0x63, 0x00, 0x77, 0xbe, 0xfa, 0xb8, 0x18, 0xfe, 0x37, 0x27, 0xf9, 0x1e, 0xd2, 0xf6, 0x36, 0x4c, 0xfe, 0x4f, 0xd1, 0xfc, 0xd6, 0x39, 0xfb, 0xa5, 0x46, 0x00, 0xa4, 0xb4, 0xff, 0xde, 0x45, 0x00, 0xa8, 0xf3, 0x01, 0x5f, 0xda, 0xfe, 0x9f, 0xa9, 0x2c, 0x1c, 0x6f, 0x14, 0x4b, 0xa3, 0xec, 0x11, 0x24, 0x21, 0x47, 0x26, 0x06, 0x4e, 0x7c, 0xe9, 0xdd, 0x11, 0xfd, 0xcd, 0x2d, 0x01, 0x51, 0x40, 0xf3, 0xd0, 0x20, 0xfb, 0x54, 0x9d, 0x11, 0x7e, 0x14, 0xf7, 0xc9, 0xb6, 0xf9, 0x3f, 0x17, 0x09, 0x3a, 0x9f, 0xfb, 0x27, 0x9c, 0xfd, 0x66, 0xd4, 0x06, 0xa7, 0x23, 0xff, 0xba, 0x8f, 0xff, 0x39, 0xb6, 0x01, 0x2e, 0x3d, 0xfe, 0xf7, 0x2c, 0x03, 0xdf, 0x3c, 0xfd, 0xc3, 0xba, 0xfb, 0xca, 0x9a, 0x00, 0x31, 0xbd, 0xfc, 0x8b, 0x32, 0xfc, 0x6e, 0x08, 0xff, 0x71, 0xa2, 0xfb, 0xcd, 0x73, 0xfc, 0x0e, 0xda, 0xfe, 0xa4, 0x19, 0xfe, 0x38, 0x4f, 0x26, 0x96, 0x3d, 0x13, 0x90, 0x7c, 0xf1, 0xa6, 0xd6, 0x1c, 0xca, 0xf1, 0x05, 0x2f, 0x48, 0xee, 0xf2, 0xb6, 0xfd, 0x18, 0x18, 0x00, 0xec, 0x62, 0xf5, 0xd1, 0x16, 0xfb, 0x3a, 0xb6, 0x0e, 0x41, 0x3b, 0xf9, 0x8b, 0xe2, 0xf9, 0xa3, 0xbb, 0x07, 0x85, 0x74, 0xfc, 0x9e, 0x0c, 0xfd, 0x71, 0x05, 0x06, 0x71, 0xd3, 0xff, 0x5c, 0x44, 0xff, 0x1c, 0x33, 0x01, 0x6d, 0xda, 0xfe, 0xeb, 0xac, 0x02, 0x76, 0x11, 0xfd, 0x09, 0x28, 0xfc, 0xf3, 0x8c, 0x00, 0x20, 0xd3, 0xfc, 0xb6, 0xee, 0xfc, 0x01, 0x9a, 0xff, 0xe6, 0xbe, 0xfc, 0xb5, 0x2a, 0xfd, 0xbd, 0x5c, 0xfe, 0x6a, 0x4f, 0xfe, 0x78, 0x80, 0x20, 0xc5, 0xb3, 0x12, 0x22, 0xdb, 0xf5, 0x0e, 0xff, 0x17, 0x00, 0xd7, 0x06, 0x6e, 0xf5, 0xf2, 0x09, 0x51, 0xfd, 0x06, 0xce, 0xff, 0x3a, 0x58, 0xf7, 0xa9, 0xe9, 0xfa, 0xf3, 0x80, 0x0c, 0x40, 0x55, 0xfb, 0x33, 0xfc, 0xf9, 0x9d, 0x4f, 0x06, 0x56, 0xf2, 0xfd, 0xf0, 0xf4, 0xfc, 0x37, 0xf4, 0x04, 0xd5, 0xa4, 0x00, 0x19, 0x6e, 0xff, 0xb2, 0xca, 0x00, 0x00, 0x0a, 0xff, 0x12, 0x3a, 0x02, 0x94, 0xc0, 0xfd, 0xaf, 0x4a, 0xfc, 0x60, 0x10, 0x00, 0x02, 0x87, 0xfd, 0xc9, 0x5e, 0xfd, 0x9a, 0x4e, 0x00, 0xd5, 0xc6, 0xfd, 0xfb, 0x8d, 0xfd, 0xf6, 0x91, 0xfe, 0x7d, 0x61, 0xfe, 0x3c, 0x4f, 0x1b, 0x8f, 0xff, 0x11, 0x4a, 0x16, 0xf9, 0x93, 0xa5, 0x13, 0x06, 0x20, 0x08, 0x20, 0x7f, 0xf6, 0xa3, 0xf0, 0xfc, 0x7c, 0x1e, 0x00, 0x68, 0xd0, 0xf8, 0xeb, 0xc2, 0xfa, 0x5c, 0x79, 0x0a, 0x67, 0xeb, 0xfc, 0xc0, 0x07, 0xfa, 0x96, 0xe3, 0x04, 0x80, 0x01, 0xff, 0x65, 0x3f, 0xfd, 0x38, 0x09, 0x04, 0x61, 0xb6, 0x00, 0x5f, 0xb9, 0xff, 0x0e, 0xb1, 0x00, 0xb8, 0xca, 0xfe, 0xea, 0xcb, 0x01, 0x5e, 0x2c, 0xfe, 0xe9, 0x93, 0xfc, 0x56, 0xc6, 0xff, 0x02, 0x5f, 0xfe, 0xf1, 0xfd, 0xfd, 0xdb, 0xd6, 0xff, 0xb7, 0x80, 0xfe, 0x12, 0x37, 0xfe, 0x4a, 0xc0, 0xfe, 0xa8, 0x5b, 0xfe, 0x0e, 0xef, 0x16, 0x0e, 0x1f, 0x11, 0x97, 0x86, 0xfb, 0x79, 0x74, 0x10, 0xf6, 0x1e, 0x09, 0xa5, 0x24, 0xf9, 0x1d, 0x64, 0xfd, 0x56, 0xc7, 0x00, 0xcc, 0xda, 0xf9, 0x64, 0xcf, 0xfa, 0x05, 0xf0, 0x08, 0x7a, 0x03, 0xfe, 0x65, 0x30, 0xfa, 0xd1, 0xf5, 0x03, 0x98, 0xef, 0xff, 0x53, 0xcb, 0xfd, 0x69, 0x0a, 0x03, 0x07, 0x00, 0x01, 0x92, 0x43, 0x00, 0x85, 0x44, 0x00, 0xf8, 0xfc, 0xfe, 0x37, 0x73, 0x01, 0x53, 0x75, 0xfe, 0xbc, 0x54, 0xfd, 0x2a, 0x4a, 0x00, 0x05, 0xd4, 0xfe, 0x3f, 0x16, 0xfe, 0x8f, 0xd3, 0xff, 0x3d, 0xdc, 0xfe, 0x3c, 0xb2, 0xfe, 0xb6, 0xe0, 0xfe, 0x57, 0xba, 0xfe, 0x2a, 0x25, 0x13, 0x2c, 0x03, 0x10, 0xa1, 0x3e, 0xfd, 0xb0, 0x29, 0x0e, 0x86, 0xd8, 0x09, 0x04, 0x11, 0xfb, 0x5a, 0x12, 0xfe, 0x04, 0x51, 0x01, 0x91, 0xa7, 0xfa, 0x90, 0xdd, 0xfa, 0x6b, 0x93, 0x07, 0xe8, 0xab, 0xfe, 0x78, 0x80, 0xfa, 0xc7, 0x43, 0x03, 0x24, 0xab, 0x00, 0x7d, 0x01, 0xfe, 0xbd, 0x6d, 0x02, 0x90, 0x90, 0x01, 0x50, 0xed, 0xff, 0x2e, 0x02, 0x00, 0xf6, 0x62, 0xff, 0xb1, 0x4c, 0x01, 0x1e, 0x04, 0xff, 0x10, 0xf2, 0xfd, 0xb2, 0x62, 0x00, 0x16, 0x21, 0xff, 0xc7, 0x4c, 0xfe, 0xf9, 0x97, 0xff, 0xa2, 0xe3, 0xfe, 0xa5, 0xcf, 0xfe, 0xbe, 0x4a, 0xff, 0xf7, 0x07, 0xff, 0x44, 0x49, 0x10, 0x49, 0x29, 0x0e, 0x0e, 0x9f, 0xfe, 0xf1, 0xf6, 0x0c, 0x0e, 0xde, 0x09, 0x53, 0x90, 0xfc, 0xa6, 0xe5, 0xfe, 0xc3, 0xbb, 0x01, 0xcb, 0xf6, 0xfa, 0x64, 0x2f, 0xfb, 0xc1, 0x5a, 0x06, 0x9a, 0x24, 0xff, 0xc3, 0xde, 0xfa, 0x3d, 0xb3, 0x02, 0x41, 0x36, 0x01, 0xb5, 0x3a, 0xfe, 0x6a, 0x49, 0x02, 0x83, 0x4a, 0x01, 0xf7, 0xa8, 0xff, 0x01, 0x5a, 0x00, 0x24, 0xf9, 0xff, 0x5c, 0x31, 0x01, 0x00, 0x13, 0xff, 0x4e, 0x81, 0xfe, 0xf2, 0x97, 0x00, 0x5c, 0x10, 0xff, 0xc1, 0x2c, 0xfe, 0xdf, 0x53, 0xff, 0xed, 0xe4, 0xfe, 0x7b, 0x21, 0xff, 0x61, 0xae, 0xff, 0xb6, 0x62, 0xff, 0x0f, 0x2c, 0x0e, 0x4d, 0xea, 0x0c, 0xc7, 0xf9, 0xff, 0xa4, 0x82, 0x0b, 0xf7, 0xda, 0x08, 0x83, 0xec, 0xfd, 0x8a, 0x01, 0x00, 0x08, 0xd1, 0x01, 0x4e, 0x74, 0xfb, 0xc2, 0x9a, 0xfb, 0xd7, 0x2b, 0x05, 0x80, 0x2f, 0xff, 0xb4, 0x7c, 0xfb, 0xb1, 0xfd, 0x02, 0xf8, 0x4c, 0x01, 0xce, 0x74, 0xfe, 0x0c, 0x10, 0x02, 0x1d, 0xca, 0x00, 0x8f, 0x70, 0x00, 0x55, 0xfa, 0x00, 0xca, 0xcf, 0xff, 0x9b, 0x10, 0x01, 0x73, 0x8f, 0xff, 0xe0, 0xb8, 0xfe, 0x8f, 0xff, 0xff, 0x7f, 0xfe, 0xfe, 0x04, 0x4b, 0xfe, 0x6a, 0x5d, 0xff, 0x59, 0x5f, 0xff, 0x1a, 0x75, 0xff, 0x9f, 0x92, 0xff, 0xb0, 0xf0, 0xfe, 0xdb, 0xf6, 0x0b, 0x43, 0xd8, 0x0b, 0xff, 0xdf, 0x00, 0x05, 0x39, 0x0a, 0xea, 0xbd, 0x08, 0xeb, 0x6f, 0xff, 0xae, 0x1e, 0x00, 0x5e, 0x6f, 0x01, 0x5d, 0x98, 0xfc, 0x46, 0x9e, 0xfb, 0x9f, 0xbe, 0x03, 0x37, 0xfd, 0xff, 0x73, 0x9d, 0xfc, 0xcf, 0x23, 0x02, 0xb0, 0x27, 0x01, 0x75, 0x58, 0xff, 0x56, 0xe0, 0x01, 0x6f, 0x3b, 0x01, 0x4a, 0xe6, 0x00, 0xd2, 0xa2, 0x00, 0x93, 0xdf, 0xff, 0x79, 0x01, 0x01, 0x80, 0x8d, 0xff, 0x5e, 0x8c, 0xfe, 0x94, 0x92, 0xff, 0xed, 0x19, 0xff, 0x5c, 0xb6, 0xfe, 0xef, 0xb5, 0xff, 0x8b, 0x73, 0xff, 0x64, 0xe0, 0xfe, 0x9c, 0xfa, 0xfe, 0x40, 0xd7, 0xfe, 0xfb, 0xe6, 0x09, 0x43, 0xa6, 0x0a, 0xd7, 0x1d, 0x02, 0x9b, 0x03, 0x09, 0xf4, 0x7c, 0x08, 0x37, 0x1b, 0x01, 0x6d, 0xf6, 0xff, 0xae, 0xe6, 0x00, 0xc2, 0x9c, 0xfd, 0x8d, 0x33, 0xfc, 0x06, 0xb6, 0x02, 0x62, 0x6b, 0x00, 0xde, 0x46, 0xfd, 0x3e, 0x9c, 0x01, 0xf6, 0xee, 0x01, 0xc5, 0xb2, 0x00, 0xcc, 0x93, 0x01, 0x91, 0xf1, 0x00, 0xa6, 0x1d, 0x01, 0x16, 0x8b, 0x00, 0x9e, 0xeb, 0xff, 0xb1, 0xae, 0x00, 0x54, 0x4d, 0xff, 0xd8, 0x7e, 0xfe, 0x00, 0xf0, 0xff, 0x17, 0xa4, 0xff, 0x2c, 0xd3, 0xfe, 0x51, 0x46, 0xff, 0x83, 0xb4, 0xfe, 0x4e, 0xc3, 0xfe, 0x1d, 0x37, 0xff, 0x7d, 0x33, 0xff, 0x73, 0x98, 0x08, 0x07, 0x02, 0x0a, 0x3e, 0x01, 0x03, 0xa8, 0xb2, 0x07, 0x12, 0x52, 0x08, 0x2d, 0xd9, 0x01, 0x35, 0x50, 0xff, 0xc9, 0x05, 0x01, 0x44, 0xe7, 0xfe, 0xdb, 0x76, 0xfc, 0x3a, 0x61, 0x01, 0xbb, 0x10, 0x01, 0x6d, 0x9a, 0xfe, 0x5d, 0x47, 0x02, 0x42, 0xd5, 0x02, 0x93, 0x89, 0x00, 0x72, 0xfd, 0x00, 0x30, 0x37, 0x01, 0x72, 0xe6, 0x00, 0x60, 0x4c, 0x00, 0x7b, 0xc2, 0xff, 0x3e, 0x47, 0x00, 0xa3, 0xce, 0xff, 0x8a, 0x4a, 0xff, 0xb1, 0xc8, 0xff, 0x40, 0xe3, 0xfe, 0x2e, 0x5d, 0xfe, 0x07, 0x08, 0xff, 0x45, 0x19, 0xff, 0x59, 0x25, 0xff, 0xc0, 0x57, 0xff, 0xd3, 0x40, 0xff, 0x75, 0xd0, 0x06, 0xfc, 0x49, 0x09, 0x2e, 0x17, 0x04, 0xda, 0x6b, 0x06, 0x12, 0xfe, 0x07, 0xd8, 0xa7, 0x02, 0x76, 0xc5, 0xff, 0xd9, 0x0e, 0x01, 0xac, 0x98, 0xfe, 0xb0, 0xe5, 0xfc, 0xb3, 0x9f, 0x01, 0x0f, 0x75, 0x02, 0xe2, 0x01, 0x00, 0x4c, 0xed, 0x01, 0x52, 0x7a, 0x02, 0xb3, 0x70, 0x00, 0x0f, 0xf9, 0x00, 0x6f, 0x23, 0x01, 0x8d, 0x58, 0x00, 0x18, 0x13, 0x00, 0x38, 0x3c, 0x00, 0x8c, 0xb6, 0x00, 0xca, 0xe7, 0xff, 0xf9, 0xc5, 0xfe, 0x85, 0xb5, 0xfe, 0x6d, 0xba, 0xfe, 0x52, 0xd5, 0xfe, 0x7e, 0x3d, 0xff, 0x92, 0x4b, 0xff, 0x92, 0x34, 0xff, 0x93, 0x18, 0xff, 0xba, 0x0b, 0xff, 0xe7, 0xe7, 0x05, 0x65, 0x26, 0x09, 0x67, 0x08, 0x04, 0x00, 0x63, 0x05, 0x5f, 0x39, 0x08, 0xf0, 0xd5, 0x02, 0x7b, 0x25, 0xff, 0xe3, 0xe3, 0x00, 0x3d, 0x9a, 0xff, 0x05, 0xb3, 0xfe, 0x7a, 0x7b, 0x02, 0xca, 0x68, 0x02, 0xd7, 0x46, 0x00, 0x09, 0x0b, 0x02, 0x5f, 0x12, 0x02, 0x06, 0x41, 0x00, 0x67, 0x6f, 0x00, 0x51, 0xc9, 0x00, 0x11, 0xfb, 0x00, 0x55, 0xa0, 0x00, 0x10, 0x24, 0x00, 0x0b, 0xda, 0xff, 0xf2, 0xd9, 0xfe, 0x10, 0x80, 0xfe, 0xb6, 0x12, 0xff, 0x6b, 0x2b, 0xff, 0x9c, 0x04, 0xff, 0xf3, 0x29, 0xff, 0x8e, 0x05, 0xff, 0x6e, 0xfd, 0xfe, 0x90, 0x2d, 0xff, 0xc9, 0x23, 0xff, 0x15, 0x91, 0x05, 0x32, 0x41, 0x08, 0xaa, 0x51, 0x04, 0x2a, 0xfb, 0x05, 0x5f, 0x31, 0x06, 0x99, 0xc8, 0x01, 0x66, 0xef, 0x00, 0xb7, 0xa3, 0x02, 0xfc, 0x98, 0x00, 0xcc, 0x3c, 0xff, 0xc2, 0x8e, 0x02, 0x1d, 0x30, 0x02, 0x0c, 0xa1, 0x00, 0xe7, 0x34, 0x02, 0x0a, 0x39, 0x01, 0x78, 0xaa, 0xff, 0xd3, 0x17, 0x01, 0x59, 0xb7, 0x01, 0x7a, 0xb2, 0x00, 0xdd, 0xa5, 0xff, 0xfe, 0x0d, 0xff, 0xb0, 0x73, 0xff, 0x74, 0x56, 0xff, 0xcc, 0xef, 0xfe, 0x43, 0x37, 0xff, 0xea, 0x1f, 0xff, 0x15, 0xca, 0xfe, 0xc8, 0xe3, 0xfe, 0x86, 0x30, 0xff, 0x97, 0x15, 0xff, 0x16, 0x3d, 0xff, 0xef, 0x4b, 0xff, 0x6a, 0xa5, 0x05, 0xcb, 0x6f, 0x07, 0x9a, 0x8a, 0x03, 0x63, 0x77, 0x05, 0x62, 0xd0, 0x05, 0x6a, 0x76, 0x03, 0xcc, 0xdf, 0x02, 0x49, 0xb4, 0x02, 0x26, 0x48, 0x00, 0x67, 0x67, 0xff, 0xdd, 0x02, 0x03, 0x90, 0xa6, 0x02, 0x09, 0x19, 0x00, 0xae, 0xf4, 0x00, 0x38, 0xa7, 0x01, 0x49, 0xe5, 0x00, 0x96, 0xed, 0x00, 0x64, 0x90, 0x00, 0x8e, 0x2a, 0xff, 0xc7, 0xf7, 0xfe, 0xf1, 0xc0, 0xff, 0x5c, 0x01, 0x00, 0x1c, 0x39, 0xff, 0xd8, 0xc6, 0xfe, 0x66, 0xf5, 0xfe, 0x73, 0xd2, 0xfe, 0xdd, 0xc3, 0xfe, 0x3b, 0x02, 0xff, 0x42, 0x3a, 0xff, 0x27, 0x57, 0xff, 0x16, 0x52, 0xff, 0xd6, 0x23, 0xff, 0x48, 0x88, 0x04, 0xdb, 0x95, 0x06, 0x46, 0x1f, 0x04, 0xd2, 0x41, 0x06, 0xfe, 0x1c, 0x07, 0x71, 0xa6, 0x03, 0xc8, 0x6f, 0x02, 0x86, 0x20, 0x03, 0x80, 0x02, 0x01, 0xe0, 0x16, 0x00, 0xac, 0x93, 0x02, 0x3a, 0xea, 0x01, 0x80, 0x51, 0x00, 0xdf, 0xec, 0x01, 0x02, 0xbb, 0x01, 0xd4, 0xac, 0xff, 0x1f, 0x82, 0xff, 0xf9, 0xc9, 0xff, 0x32, 0xa8, 0xff, 0xb5, 0xc9, 0xff, 0x24, 0xd9, 0xff, 0x5c, 0xa5, 0xff, 0xcb, 0xe1, 0xfe, 0x47, 0xa0, 0xfe, 0x6a, 0xe2, 0xfe, 0x36, 0xe3, 0xfe, 0x17, 0xdb, 0xfe, 0xf9, 0x3e, 0xff, 0x23, 0x7e, 0xff, 0xac, 0x41, 0xff, 0xc1, 0x3a, 0xff, 0xa1, 0x38, 0xff, 0x21, 0x57, 0x05, 0xe4, 0xb4, 0x08, 0x7f, 0xfb, 0x05, 0x92, 0x71, 0x05, 0xb4, 0x29, 0x05, 0xcf, 0xa5, 0x03, 0x7d, 0xe6, 0x02, 0xcb, 0x9f, 0x02, 0xc8, 0x36, 0x01, 0x92, 0xbd, 0x00, 0xf5, 0xe1, 0x01, 0x1e, 0x98, 0x02, 0xbd, 0x43, 0x01, 0x56, 0x8c, 0xff, 0xaa, 0x92, 0xff, 0x24, 0x96, 0xff, 0x61, 0xef, 0xff, 0x8b, 0x36, 0x00, 0x58, 0xdf, 0xff, 0x71, 0xa9, 0xff, 0x88, 0x39, 0xff, 0x6e, 0x1a, 0xff, 0x26, 0xe4, 0xfe, 0xc0, 0xb1, 0xfe, 0x96, 0xdb, 0xfe, 0x84, 0x1f, 0xff, 0x97, 0x3a, 0xff, 0x68, 0x2d, 0xff, 0x7a, 0x7d, 0xff, 0x6d, 0x72, 0xff, 0xe5, 0x3c, 0xff, 0x9d, 0x21, 0xff, 0x5e, 0x52, 0x05, 0x75, 0xc9, 0x08, 0xc9, 0x0f, 0x06, 0x9b, 0xfe, 0x04, 0x7f, 0xe8, 0x04, 0x4a, 0x26, 0x04, 0x6e, 0x8b, 0x03, 0x30, 0x34, 0x03, 0x43, 0x0f, 0x02, 0x37, 0xf8, 0x00, 0x1e, 0x9e, 0x01, 0x32, 0x5c, 0x02, 0xef, 0x44, 0x00, 0x37, 0x93, 0xfe, 0x1e, 0x62, 0xff, 0xdf, 0x12, 0x00, 0x14, 0x5f, 0x00, 0x50, 0x46, 0x00, 0xe4, 0xa8, 0xff, 0x77, 0x38, 0xff, 0xc0, 0x40, 0xff, 0x4b, 0x4e, 0xff, 0xa7, 0xde, 0xfe, 0xbf, 0xc5, 0xfe, 0x64, 0x0c, 0xff, 0x9e, 0x25, 0xff, 0x99, 0x21, 0xff, 0x72, 0x4b, 0xff, 0x64, 0x8c, 0xff, 0x9d, 0x79, 0xff, 0xe5, 0x57, 0xff, 0x7f, 0x25, 0xff, 0x23, 0x1c, 0x05, 0x9f, 0xa0, 0x07, 0x46, 0x86, 0x04, 0x7f, 0x71, 0x04, 0x9a, 0x9a, 0x04, 0x68, 0x42, 0x04, 0xaa, 0x7a, 0x04, 0x87, 0x2a, 0x05, 0xb1, 0x96, 0x03, 0x43, 0xb8, 0x01, 0x32, 0x5b, 0x01, 0x38, 0x6b, 0x00, 0xdf, 0x4f, 0x00, 0xba, 0xb4, 0xff, 0x17, 0x32, 0xff, 0x58, 0xdd, 0xff, 0xa5, 0x79, 0x00, 0x04, 0x11, 0x00, 0xda, 0x72, 0xff, 0x4a, 0x81, 0xff, 0x57, 0x59, 0xff, 0x6a, 0x3a, 0xff, 0xf4, 0x03, 0xff, 0x9d, 0xe8, 0xfe, 0xe1, 0x1e, 0xff, 0x1b, 0x24, 0xff, 0x9f, 0xfd, 0xfe, 0x08, 0x48, 0xff, 0xc7, 0x92, 0xff, 0xe1, 0x70, 0xff, 0x9d, 0x64, 0xff, 0x77, 0x42, 0xff, 0x4a, 0x88, 0x05, 0xe2, 0xf2, 0x07, 0x14, 0x05, 0x04, 0x72, 0xa4, 0x03, 0xb7, 0x5c, 0x03, 0x95, 0x51, 0x03, 0xbd, 0xec, 0x04, 0xef, 0x73, 0x05, 0x3c, 0x8b, 0x03, 0xd6, 0xfd, 0x01, 0x76, 0x6e, 0x01, 0x38, 0x6b, 0x01, 0x9c, 0xbc, 0x01, 0x75, 0xf2, 0xff, 0xe9, 0x57, 0xff, 0xb4, 0xb0, 0xff, 0xae, 0x8e, 0xff, 0xd8, 0x01, 0x00, 0x19, 0xd6, 0xff, 0x80, 0x49, 0xff, 0xbb, 0xf3, 0xfe, 0x9c, 0x53, 0xff, 0x03, 0x57, 0xff, 0xb4, 0x05, 0xff, 0x04, 0x46, 0xff, 0x00, 0x6e, 0xff, 0x07, 0x4f, 0xff, 0x08, 0x3a, 0xff, 0xcb, 0x58, 0xff, 0x73, 0x71, 0xff, 0x26, 0x45, 0xff, 0x3d, 0x2b, 0xff, 0xa6, 0xce, 0x05, 0x1d, 0xb3, 0x07, 0xe0, 0xf4, 0x02, 0x4b, 0x20, 0x03, 0x1e, 0x81, 0x03, 0x51, 0x85, 0x02, 0xbb, 0x7c, 0x02, 0xc8, 0xd2, 0x03, 0xa1, 0x65, 0x04, 0x25, 0x92, 0x03, 0xe3, 0xe8, 0x02, 0x69, 0x2d, 0x02, 0x5b, 0xcf, 0x01, 0x13, 0x50, 0x02, 0xe5, 0x90, 0x00, 0x43, 0x29, 0xfe, 0x9a, 0x1d, 0xff, 0xa2, 0xac, 0xff, 0x9e, 0xd9, 0xff, 0x27, 0xc9, 0xff, 0x45, 0x2b, 0xff, 0x45, 0x35, 0xff, 0x41, 0x54, 0xff, 0xdf, 0x4d, 0xff, 0x90, 0x5e, 0xff, 0xc7, 0x77, 0xff, 0x0e, 0x3f, 0xff, 0xaa, 0x7d, 0xff, 0xf0, 0x40, 0xff, 0x9b, 0x26, 0xff, 0xcd, 0x77, 0xff, 0x96, 0x21, 0xff, 0x33, 0x74, 0x05, 0xcf, 0x75, 0x07, 0x88, 0xf2, 0x02, 0x7e, 0xee, 0x02, 0x50, 0xaa, 0x03, 0x42, 0x33, 0x03, 0xfb, 0x1f, 0x02, 0xd1, 0x01, 0x01, 0x3c, 0xa0, 0x01, 0xfc, 0x6c, 0x03, 0xad, 0x14, 0x04, 0x85, 0xfb, 0x02, 0xea, 0x2b, 0x02, 0xc0, 0x58, 0x02, 0x47, 0xec, 0x02, 0x86, 0x3a, 0x01, 0x97, 0xb9, 0xfe, 0x09, 0xad, 0xfe, 0xa4, 0x51, 0xff, 0x18, 0xa1, 0xff, 0xcb, 0xdd, 0xff, 0x59, 0x98, 0xff, 0xd5, 0x06, 0xff, 0x66, 0x43, 0xff, 0x20, 0x98, 0xff, 0xdc, 0x3b, 0xff, 0xbd, 0x4e, 0xff, 0xf7, 0xa1, 0xff, 0x8e, 0x58, 0xff, 0x9b, 0x26, 0xff, 0xd1, 0x31, 0xff, 0xdc, 0x4a, 0xff, 0x41, 0xe8, 0x05, 0x95, 0x7c, 0x07, 0xb0, 0xe0, 0x01, 0x7f, 0x22, 0x02, 0x26, 0x62, 0x03, 0xf1, 0x0b, 0x03, 0x39, 0x45, 0x02, 0x82, 0xbf, 0x00, 0x66, 0x0b, 0x00, 0x20, 0xd1, 0x01, 0xc2, 0xf7, 0x02, 0x36, 0x78, 0x02, 0xf5, 0x29, 0x03, 0xa7, 0xaf, 0x03, 0x25, 0xb0, 0x03, 0xb3, 0xb0, 0x02, 0x75, 0x5e, 0x01, 0xfe, 0x54, 0x00, 0x46, 0x05, 0xff, 0x15, 0x70, 0xfe, 0x52, 0x28, 0xff, 0xb0, 0xb1, 0xff, 0xc0, 0x70, 0xff, 0xaa, 0x3e, 0xff, 0x11, 0x38, 0xff, 0x48, 0x41, 0xff, 0x27, 0x5d, 0xff, 0x87, 0xc8, 0xff, 0x24, 0x7d, 0xff, 0xc6, 0x3f, 0xff, 0xdb, 0x64, 0xff, 0xc3, 0x44, 0xff, 0xde, 0x9a, 0x06, 0x92, 0x2f, 0x08, 0x7e, 0xe9, 0x01, 0x51, 0xb5, 0x02, 0x07, 0xb1, 0x03, 0x71, 0x93, 0x02, 0xd1, 0xaf, 0x01, 0x67, 0xae, 0xff, 0x6d, 0x0c, 0x00, 0xb3, 0xa0, 0x02, 0xaa, 0x88, 0x01, 0xb9, 0x37, 0x00, 0x30, 0x93, 0x01, 0xb8, 0x7f, 0x02, 0xa0, 0xee, 0x03, 0xe3, 0x5e, 0x03, 0xc1, 0x4c, 0x02, 0x7e, 0x77, 0x02, 0x43, 0x2e, 0x01, 0xb0, 0x74, 0xff, 0xee, 0xae, 0xfe, 0xd6, 0x7f, 0xfe, 0x55, 0xe5, 0xfe, 0x7a, 0xae, 0xff, 0x57, 0xa0, 0xff, 0xd8, 0x22, 0xff, 0x08, 0x2c, 0xff, 0x38, 0xaf, 0xff, 0x13, 0x8c, 0xff, 0xca, 0x5a, 0xff, 0xb7, 0x88, 0xff, 0xff, 0x3e, 0xff, 0x88, 0x5b, 0x07, 0x93, 0x78, 0x08, 0xe2, 0xa7, 0x01, 0x94, 0xaf, 0x03, 0x49, 0xd2, 0x04, 0xf3, 0x25, 0x03, 0x3f, 0xc8, 0x00, 0xf1, 0x8d, 0xfd, 0xa9, 0xb5, 0xff, 0xe1, 0xac, 0x03, 0x55, 0x6d, 0x01, 0xf6, 0x74, 0xff, 0x80, 0x2a, 0x00, 0x04, 0x00, 0x01, 0x65, 0x92, 0x02, 0x79, 0xb8, 0x01, 0x05, 0x50, 0x02, 0xde, 0x5a, 0x03, 0xd4, 0x4f, 0x02, 0x56, 0x81, 0x01, 0x19, 0x75, 0x00, 0x2b, 0x41, 0xff, 0xd8, 0x37, 0xfe, 0x4f, 0x87, 0xfe, 0xcb, 0x49, 0xff, 0x82, 0x7b, 0xff, 0x90, 0x8b, 0xff, 0x23, 0x78, 0xff, 0x37, 0x44, 0xff, 0xc9, 0x5b, 0xff, 0x05, 0x9a, 0xff, 0x5a, 0x4f, 0xff, 0x46, 0xe2, 0x08, 0x2e, 0x83, 0x0a, 0xc6, 0xa6, 0x01, 0xae, 0x0c, 0x03, 0x27, 0x52, 0x04, 0x5a, 0x34, 0x03, 0xb9, 0x00, 0x01, 0x13, 0xdc, 0xfc, 0x7e, 0x89, 0xff, 0xf8, 0x89, 0x03, 0x70, 0xbe, 0x00, 0xc9, 0x2b, 0xff, 0x48, 0x2e, 0x00, 0x2b, 0x86, 0x00, 0x55, 0x5c, 0x01, 0x1d, 0xf0, 0x00, 0xb2, 0x15, 0x01, 0xeb, 0x2a, 0x02, 0xb1, 0x7e, 0x02, 0x16, 0x01, 0x02, 0x3f, 0x36, 0x01, 0x43, 0xd2, 0x00, 0xc4, 0x03, 0x00, 0x93, 0x0d, 0xff, 0x6d, 0x71, 0xfe, 0x1e, 0xbb, 0xfe, 0x33, 0x56, 0xff, 0xa3, 0xe2, 0xff, 0x48, 0xb8, 0xff, 0x38, 0x19, 0xff, 0x41, 0x2e, 0xff, 0x71, 0x6e, 0xff, 0x4a, 0x3b, 0x0a, 0x89, 0x9e, 0x0b, 0xd5, 0x58, 0x01, 0xb8, 0xa8, 0x03, 0x89, 0x42, 0x05, 0xed, 0xdb, 0x02, 0xe0, 0xb5, 0xff, 0xce, 0xab, 0xfb, 0xc4, 0x88, 0x00, 0xa0, 0x6e, 0x04, 0xd8, 0x8d, 0xff, 0x68, 0x61, 0xfe, 0x59, 0xb8, 0xff, 0x1a, 0x82, 0x00, 0x64, 0xb1, 0x01, 0xbd, 0x1a, 0x00, 0xc6, 0x07, 0x00, 0x72, 0x61, 0x01, 0xf7, 0xf4, 0x00, 0x97, 0x17, 0x01, 0x9c, 0xba, 0x01, 0x5e, 0x66, 0x01, 0x1e, 0xff, 0x00, 0x8f, 0x9d, 0x00, 0xd0, 0x98, 0xff, 0x7c, 0xee, 0xfe, 0xa7, 0x95, 0xfe, 0xd9, 0x67, 0xff, 0xb1, 0x9f, 0xff, 0x11, 0x50, 0xff, 0x24, 0x6b, 0xff, 0x93, 0x09, 0xff, 0x40, 0xb3, 0x0b, 0xe4, 0xbb, 0x0c, 0x3e, 0x06, 0x01, 0x5d, 0x61, 0x04, 0xda, 0x28, 0x06, 0x37, 0xb8, 0x02, 0x1e, 0x2d, 0xfe, 0x78, 0x94, 0xfa, 0x59, 0xbc, 0x01, 0xc6, 0xad, 0x04, 0x08, 0xbe, 0xfe, 0x7a, 0x61, 0xfe, 0x54, 0x2b, 0xff, 0x16, 0x1e, 0x00, 0x3e, 0xc0, 0x01, 0xb5, 0xd1, 0xff, 0xa3, 0xf3, 0xff, 0xda, 0xbf, 0x00, 0x16, 0x15, 0x00, 0x47, 0x77, 0x00, 0x25, 0x45, 0x00, 0x19, 0xef, 0x00, 0x6b, 0x7d, 0x01, 0x68, 0xcf, 0x00, 0x99, 0xce, 0x00, 0x0e, 0x8c, 0x00, 0xc4, 0x67, 0xff, 0x68, 0x5d, 0xff, 0xf3, 0x18, 0xff, 0x64, 0xf9, 0xfe, 0x29, 0x4b, 0xff, 0x33, 0x45, 0xff, 0x47, 0xc5, 0x0d, 0x1f, 0xd7, 0x0e, 0x26, 0xae, 0x00, 0x27, 0x04, 0x04, 0x7e, 0x18, 0x06, 0x62, 0x53, 0x02, 0xd3, 0x3c, 0xfd, 0xdc, 0x6b, 0xfa, 0x64, 0xd5, 0x02, 0xd6, 0x27, 0x04, 0xd2, 0xa5, 0xfd, 0x21, 0x9a, 0xfe, 0x33, 0x22, 0xff, 0xe7, 0xfd, 0xff, 0xa7, 0x9f, 0x01, 0xcb, 0x4c, 0xff, 0x50, 0xda, 0xff, 0xa5, 0xb9, 0x00, 0x00, 0x9b, 0xff, 0x7e, 0xd2, 0xff, 0x80, 0xd1, 0xff, 0x4f, 0x38, 0x00, 0x6d, 0x64, 0x00, 0x52, 0x80, 0x00, 0x48, 0x06, 0x01, 0xcb, 0xec, 0x00, 0x13, 0x9c, 0x00, 0x74, 0xb7, 0x00, 0x66, 0x82, 0xff, 0x34, 0xc1, 0xfe, 0x95, 0x14, 0xff, 0xdd, 0xc6, 0xfe, 0x20, 0x27, 0x0f, 0x0f, 0xdd, 0x0f, 0x66, 0x79, 0x00, 0xc0, 0x71, 0x05, 0x32, 0x65, 0x07, 0xa6, 0x25, 0x01, 0xed, 0xbe, 0xfa, 0xe6, 0x5b, 0xfa, 0x7c, 0xcc, 0x04, 0x9d, 0xb6, 0x03, 0x3f, 0xa9, 0xfc, 0x40, 0xa4, 0xfe, 0x0a, 0xd0, 0xfe, 0xda, 0x18, 0x00, 0x2c, 0x8a, 0x01, 0x54, 0xb9, 0xfe, 0xd3, 0xe4, 0xff, 0xdd, 0xb4, 0x00, 0x8f, 0x15, 0xff, 0x67, 0xc9, 0xff, 0x46, 0x4f, 0xff, 0x38, 0x9f, 0xff, 0x6e, 0x62, 0x00, 0x26, 0x68, 0xff, 0x92, 0x06, 0x00, 0x97, 0xf9, 0x00, 0x9e, 0x9f, 0x00, 0x2e, 0x56, 0x01, 0x29, 0xcf, 0x00, 0x1a, 0xaf, 0xff, 0x37, 0x46, 0xff, 0x9d, 0xa7, 0xfe, 0x2f, 0xb9, 0x10, 0xce, 0xce, 0x11, 0xe0, 0x63, 0x00, 0x13, 0xad, 0x05, 0x31, 0x0a, 0x08, 0x63, 0x47, 0x00, 0x39, 0xe2, 0xf8, 0xef, 0xbd, 0xfa, 0x70, 0x70, 0x06, 0xcd, 0x9a, 0x02, 0x3b, 0xbe, 0xfb, 0x9e, 0x02, 0xff, 0x77, 0xa9, 0xfe, 0xfe, 0x4b, 0x00, 0x27, 0x8d, 0x01, 0x91, 0x2a, 0xfe, 0x74, 0xaf, 0xff, 0x5c, 0xa8, 0x00, 0x25, 0xc6, 0xfe, 0xb2, 0xc4, 0xff, 0xc9, 0x24, 0xff, 0x25, 0x59, 0xff, 0x24, 0x02, 0x00, 0xb1, 0xd6, 0xfe, 0xf6, 0xd5, 0xff, 0x22, 0x49, 0x00, 0x6b, 0x0f, 0x00, 0x38, 0x2e, 0x01, 0xdb, 0xc4, 0x00, 0x80, 0x54, 0x00, 0x6b, 0x5e, 0x00, 0x8d, 0x53, 0xff, 0xa6, 0xdd, 0x11, 0x58, 0xe5, 0x13, 0x83, 0xba, 0x00, 0xf5, 0x9e, 0x05, 0xe0, 0xb0, 0x08, 0x1b, 0x7f, 0xff, 0x30, 0xf6, 0xf6, 0x49, 0x1b, 0xfb, 0x09, 0x01, 0x08, 0x80, 0x8a, 0x01, 0x31, 0x9e, 0xfa, 0xbc, 0x60, 0xff, 0x82, 0x8c, 0xfe, 0xa7, 0x58, 0x00, 0xd6, 0x9e, 0x01, 0x61, 0xd0, 0xfd, 0xb7, 0x82, 0xff, 0xc3, 0x82, 0x00, 0xf5, 0x64, 0xfe, 0x13, 0x87, 0xff, 0x27, 0xea, 0xfe, 0xb9, 0x29, 0xff, 0xe5, 0x22, 0x00, 0xf2, 0x5e, 0xfe, 0x7d, 0x31, 0xff, 0x62, 0x25, 0x00, 0xc8, 0xc5, 0xff, 0x1b, 0x8c, 0x00, 0x52, 0x58, 0x00, 0x25, 0xef, 0xff, 0x5f, 0x64, 0x00, 0x5e, 0x44, 0x00, 0x33, 0xe6, 0x12, 0x79, 0x72, 0x16, 0xfb, 0x6d, 0x01, 0xa2, 0x9f, 0x04, 0x9d, 0xfa, 0x08, 0x91, 0x1e, 0xff, 0x39, 0x9d, 0xf5, 0xf0, 0x6e, 0xfb, 0xe6, 0xc2, 0x08, 0x6f, 0xef, 0x00, 0xf2, 0xaf, 0xf9, 0x74, 0x40, 0xff, 0x02, 0xbd, 0xfe, 0x22, 0x2f, 0x00, 0x33, 0xc5, 0x01, 0x93, 0xb6, 0xfd, 0xed, 0x2b, 0xff, 0xff, 0x76, 0x00, 0x93, 0x36, 0xfe, 0x35, 0x2f, 0xff, 0xf0, 0x9d, 0xfe, 0xcd, 0xe4, 0xfe, 0x8e, 0xe9, 0xff, 0xd5, 0x5d, 0xfe, 0x39, 0x04, 0xff, 0x7a, 0xb5, 0xff, 0x28, 0x82, 0xff, 0x90, 0x70, 0x00, 0x7a, 0xfa, 0xff, 0x12, 0x85, 0xff, 0xf2, 0xde, 0xff, 0x87, 0x5a, 0xff, 0x51, 0x66, 0x13, 0x84, 0xc4, 0x18, 0xe8, 0xa2, 0x02, 0xe8, 0x11, 0x04, 0xc4, 0x1f, 0x09, 0x3e, 0xae, 0xfe, 0x64, 0x96, 0xf4, 0x15, 0x93, 0xfb, 0xae, 0x4e, 0x09, 0x0a, 0x9c, 0x00, 0xfb, 0x0f, 0xf9, 0x3f, 0xbf, 0xfe, 0x22, 0xdb, 0xfe, 0x2f, 0x22, 0x00, 0xb4, 0xca, 0x01, 0x90, 0xed, 0xfd, 0xa3, 0x9f, 0xfe, 0x39, 0x60, 0x00, 0xa4, 0x62, 0xfe, 0x0a, 0xfd, 0xfe, 0xeb, 0x49, 0xfe, 0xb3, 0x6a, 0xfe, 0x34, 0xae, 0xff, 0x83, 0x3a, 0xfe, 0xb2, 0xe6, 0xfe, 0xab, 0x91, 0xff, 0xcd, 0x60, 0xff, 0xbe, 0x25, 0x00, 0xa7, 0x40, 0x00, 0x8b, 0xef, 0xfe, 0x50, 0xc0, 0xfe, 0x62, 0x94, 0xff, 0x16, 0x80, 0x13, 0xe0, 0xce, 0x1a, 0x5d, 0x54, 0x04, 0xcb, 0xc8, 0x03, 0x56, 0x0d, 0x09, 0x29, 0x53, 0xfe, 0xce, 0x35, 0xf4, 0xd2, 0x3a, 0xfb, 0x45, 0x76, 0x09, 0xf8, 0xc9, 0x00, 0x54, 0x6a, 0xf8, 0x1a, 0x71, 0xfe, 0x32, 0xbf, 0xfe, 0x3a, 0xdf, 0xff, 0xa9, 0xf0, 0x01, 0xd7, 0x1a, 0xfe, 0xd6, 0x27, 0xfe, 0x64, 0x3f, 0x00, 0x94, 0x8a, 0xfe, 0x8e, 0xdd, 0xfe, 0x88, 0x39, 0xfe, 0xd9, 0xf2, 0xfd, 0x38, 0x6d, 0xff, 0x76, 0xf9, 0xfd, 0x2e, 0x8b, 0xfe, 0x66, 0x5f, 0xff, 0xbd, 0x82, 0xff, 0x80, 0x88, 0x00, 0x17, 0x1d, 0xff, 0xa5, 0xa7, 0xfe, 0x64, 0x22, 0xff, 0x07, 0xf2, 0xfe, 0xdf, 0x33, 0x14, 0x4a, 0xe3, 0x1c, 0xb4, 0xd8, 0x05, 0x14, 0xd3, 0x02, 0xa6, 0x2e, 0x08, 0xa8, 0x8c, 0xfe, 0x4e, 0xe9, 0xf4, 0xaf, 0xa3, 0xfa, 0x2c, 0x45, 0x08, 0x76, 0x58, 0x01, 0xab, 0x57, 0xf8, 0x0c, 0xdf, 0xfd, 0x2c, 0x03, 0xff, 0xb0, 0x4b, 0xff, 0xf8, 0x8c, 0x01, 0x8c, 0xcc, 0xfe, 0xe1, 0xc0, 0xfd, 0xd0, 0xa4, 0xff, 0x8b, 0xe3, 0xfe, 0x2d, 0xc5, 0xfe, 0x88, 0xef, 0xfd, 0x84, 0xe2, 0xfd, 0xb4, 0x4b, 0xff, 0x00, 0xb2, 0xfd, 0xe9, 0xe0, 0xfd, 0x0f, 0x97, 0xff, 0x7a, 0x6e, 0xff, 0x9f, 0x60, 0xff, 0xba, 0xa1, 0xff, 0xe6, 0xc9, 0xfe, 0xab, 0x6e, 0xfe, 0xfa, 0x11, 0xff, 0xbb, 0xad, 0x14, 0xca, 0xc7, 0x1d, 0xe7, 0x28, 0x08, 0x76, 0xb2, 0x02, 0x16, 0xa8, 0x06, 0x67, 0x64, 0x00, 0xd3, 0xb2, 0xf5, 0xa8, 0x26, 0xf9, 0x9a, 0x66, 0x07, 0x7e, 0xfa, 0x01, 0x97, 0xe9, 0xf8, 0x16, 0xb4, 0xfd, 0xa2, 0x7b, 0xfe, 0x4b, 0x00, 0xff, 0x30, 0x64, 0x01, 0xf3, 0x18, 0xff, 0x5f, 0x1f, 0xfe, 0xa7, 0xd2, 0xfe, 0xb1, 0x6b, 0xfe, 0xf7, 0x3b, 0xff, 0x59, 0x69, 0xfe, 0x0c, 0x84, 0xfd, 0xde, 0xce, 0xfe, 0x45, 0x11, 0xfe, 0x9b, 0x5b, 0xfe, 0x50, 0x99, 0xfe, 0x5d, 0x5e, 0xfe, 0xd6, 0x19, 0x00, 0x61, 0x51, 0xff, 0x2e, 0xaa, 0xfe, 0xae, 0xce, 0xfe, 0xef, 0xc7, 0xfe, 0x7f, 0x2b, 0x16, 0xb2, 0xf2, 0x1c, 0xd3, 0xca, 0x08, 0x17, 0x51, 0x05, 0x59, 0xf0, 0x05, 0xff, 0xce, 0x00, 0x3c, 0x92, 0xf5, 0x0f, 0xb8, 0xf8, 0x63, 0xa4, 0x06, 0x6d, 0xa4, 0x01, 0x66, 0x22, 0xfa, 0x9a, 0x42, 0xfd, 0xda, 0xd4, 0xfd, 0x79, 0x33, 0xff, 0xcc, 0x2a, 0x01, 0x92, 0xef, 0xfe, 0x0e, 0x72, 0xfe, 0xaf, 0x16, 0xfe, 0xa7, 0xfd, 0xfd, 0xd3, 0xc2, 0xff, 0xb7, 0x29, 0xfe, 0xdf, 0x47, 0xfd, 0x20, 0xad, 0xfe, 0x30, 0xbb, 0xfe, 0xa7, 0xf4, 0xfd, 0x77, 0xdc, 0xfd, 0x09, 0x77, 0xfe, 0x0d, 0x53, 0xff, 0x35, 0x79, 0xff, 0x5e, 0xd8, 0xfe, 0x8e, 0x96, 0xfe, 0x86, 0xb7, 0xfe, 0x41, 0xee, 0x17, 0x4e, 0x18, 0x1b, 0x9d, 0x96, 0x08, 0x9c, 0x87, 0x09, 0x84, 0xa7, 0x05, 0xf0, 0xda, 0x00, 0x71, 0x65, 0xf5, 0x94, 0xd7, 0xf8, 0x69, 0x0c, 0x06, 0x1c, 0xd2, 0xff, 0x6f, 0x03, 0xfc, 0x8c, 0xb0, 0xfd, 0x35, 0xb1, 0xfc, 0x74, 0x9d, 0xff, 0x78, 0xd4, 0x00, 0xe6, 0x6a, 0xfe, 0x8c, 0x15, 0xff, 0x76, 0xc3, 0xfd, 0xdb, 0x71, 0xfd, 0x68, 0xcd, 0xff, 0x88, 0x67, 0xfd, 0x81, 0x01, 0xfe, 0xf1, 0xdc, 0xfe, 0x64, 0x85, 0xfd, 0x9d, 0xbf, 0xfe, 0x97, 0xf4, 0xfd, 0x62, 0x8d, 0xfd, 0x3e, 0x86, 0xff, 0x0a, 0x5d, 0xff, 0x7f, 0xaa, 0xfe, 0xf1, 0x9f, 0xfe, 0x2a, 0xd8, 0xfe, 0x5c, 0x4d, 0x1a, 0x46, 0x29, 0x18, 0x29, 0x12, 0x06, 0x15, 0xf7, 0x0f, 0xd4, 0x82, 0x07, 0x17, 0x3c, 0xfe, 0xaf, 0x73, 0xf5, 0xc8, 0xd8, 0xfa, 0x29, 0x51, 0x04, 0xa9, 0xb7, 0xfc, 0x22, 0xcb, 0xfe, 0x52, 0xad, 0xfe, 0x04, 0x13, 0xfb, 0x5d, 0xd2, 0xff, 0x99, 0x76, 0x00, 0x9b, 0x3f, 0xfe, 0x6c, 0x9e, 0xff, 0x45, 0x55, 0xfd, 0xc1, 0xc1, 0xfc, 0x94, 0xa3, 0xff, 0x10, 0x71, 0xfd, 0xde, 0xeb, 0xfd, 0xb3, 0xad, 0xfd, 0x68, 0x05, 0xfe, 0x32, 0x33, 0xff, 0xd2, 0x93, 0xfd, 0x2e, 0xd1, 0xfd, 0x9a, 0xf1, 0xfe, 0x3e, 0x51, 0xff, 0x70, 0x00, 0xff, 0x33, 0x09, 0xff, 0xf7, 0x51, 0xfe, 0xf9, 0xb4, 0x1d, 0x97, 0xb3, 0x17, 0x17, 0xe7, 0x01, 0xcb, 0x8f, 0x13, 0x3b, 0x54, 0x09, 0xe6, 0x40, 0xfb, 0x86, 0x27, 0xf7, 0xd0, 0xbb, 0xfe, 0x7c, 0xc3, 0x01, 0x43, 0x91, 0xf7, 0xad, 0x42, 0x01, 0x16, 0xae, 0x01, 0x0f, 0xcc, 0xf9, 0xfc, 0x85, 0xff, 0x25, 0xe6, 0xff, 0x8a, 0x0d, 0xfe, 0x07, 0xab, 0x00, 0xdb, 0xcc, 0xfc, 0x23, 0xd9, 0xfb, 0x89, 0x9f, 0x00, 0x88, 0x0b, 0xfc, 0x15, 0x06, 0xfd, 0x38, 0x02, 0xff, 0xdd, 0xe0, 0xfc, 0x73, 0x86, 0xff, 0x90, 0x09, 0xfe, 0xde, 0xbb, 0xfd, 0xc7, 0x21, 0xff, 0x3f, 0x38, 0xff, 0xfc, 0x80, 0xff, 0x51, 0xeb, 0xfe, 0xac, 0xa5, 0xfd, 0xd3, 0x21, 0x21, 0xb9, 0x40, 0x18, 0x84, 0xc2, 0xfc, 0x21, 0x7f, 0x15, 0xc4, 0x86, 0x0c, 0x40, 0x27, 0xf8, 0x7e, 0xc3, 0xf7, 0xb9, 0xcc, 0x03, 0x10, 0x97, 0x00, 0x56, 0x00, 0xf1, 0x4c, 0xa9, 0x01, 0x2e, 0x32, 0x06, 0xae, 0x70, 0xf9, 0xa4, 0x99, 0xfe, 0xfa, 0x59, 0xff, 0xb3, 0x4a, 0xfd, 0x1c, 0xbd, 0x01, 0xb8, 0xb1, 0xfc, 0xb2, 0xc0, 0xfb, 0xec, 0xb9, 0xff, 0x6e, 0xdb, 0xfa, 0xb0, 0x7a, 0xfd, 0x68, 0x94, 0xfe, 0x08, 0xb5, 0xfc, 0xe5, 0xd7, 0xff, 0x37, 0xdc, 0xfd, 0x54, 0xe3, 0xfd, 0xa7, 0xf9, 0xff, 0x66, 0x5a, 0xff, 0x08, 0xa1, 0xfe, 0x4a, 0xf8, 0xfe, 0x5f, 0x6f, 0xfe, 0x5f, 0x40, 0x24, 0x78, 0xd0, 0x19, 0x28, 0x76, 0xf7, 0xd9, 0x8d, 0x15, 0x28, 0xc3, 0x10, 0x76, 0xf7, 0xf5, 0x5b, 0x57, 0xf7, 0x0e, 0xfc, 0x08, 0x27, 0x54, 0x01, 0x49, 0xd2, 0xea, 0xc9, 0x40, 0xff, 0x7f, 0xd6, 0x0a, 0x1f, 0x40, 0xfb, 0x75, 0x3d, 0xfd, 0xc9, 0xd6, 0xfe, 0xdf, 0x36, 0xfc, 0x93, 0x60, 0x02, 0x3d, 0x0d, 0xfe, 0x93, 0x3e, 0xfa, 0x1e, 0x47, 0xff, 0xb7, 0x03, 0xfb, 0x58, 0xda, 0xfb, 0x6b, 0x59, 0xff, 0xd9, 0xf0, 0xfc, 0x3b, 0x65, 0xff, 0xb7, 0x24, 0xfe, 0x8d, 0x13, 0xfe, 0xd7, 0xdc, 0x00, 0x0d, 0x1d, 0xff, 0x55, 0xed, 0xfd, 0x85, 0x9b, 0xff, 0xe1, 0xdb, 0xfe, 0xd5, 0x2a, 0x28, 0xce, 0x74, 0x1c, 0xaf, 0x40, 0xf1, 0x52, 0x70, 0x12, 0xba, 0xa3, 0x15, 0x71, 0x6e, 0xf6, 0x0a, 0x46, 0xf5, 0x3a, 0x24, 0x0c, 0x1c, 0x43, 0x03, 0xec, 0xec, 0xe6, 0x83, 0x08, 0xfb, 0xea, 0x63, 0x0d, 0xa4, 0xac, 0xfe, 0xd9, 0x87, 0xfc, 0xef, 0xbe, 0xfd, 0xfc, 0xfe, 0xfa, 0x10, 0x7b, 0x03, 0x50, 0xe2, 0xfd, 0x05, 0xe3, 0xf8, 0x87, 0x29, 0x00, 0xd3, 0x0f, 0xfa, 0x11, 0xc5, 0xfa, 0x31, 0x7d, 0xff, 0x73, 0x49, 0xfd, 0xe8, 0x89, 0xff, 0x87, 0x03, 0xfe, 0xb2, 0x31, 0xfe, 0x40, 0x0a, 0x01, 0x6a, 0x21, 0xff, 0xe5, 0xe7, 0xfd, 0xa9, 0xb3, 0xff, 0x3f, 0xce, 0xfe, 0xaa, 0x66, 0x2c, 0x7d, 0xcb, 0x1e, 0x03, 0xae, 0xeb, 0xb1, 0x0a, 0x0f, 0x5a, 0x0a, 0x19, 0x52, 0x0e, 0xf8, 0x6c, 0x91, 0xf3, 0xaa, 0x0c, 0x0f, 0x0d, 0x29, 0x05, 0x4c, 0x38, 0xe4, 0xd1, 0xaa, 0xf6, 0xd1, 0x19, 0x0e, 0x5a, 0xff, 0x02, 0x97, 0x14, 0xfd, 0x8b, 0xda, 0xfb, 0x65, 0x64, 0xfa, 0x26, 0x0d, 0x04, 0x40, 0x2e, 0xfd, 0xe2, 0xdc, 0xf8, 0xab, 0xee, 0xff, 0xc1, 0x1b, 0xfa, 0x7c, 0xfe, 0xf9, 0x0d, 0xea, 0xfe, 0xb8, 0x19, 0xfe, 0xfb, 0xc1, 0xff, 0xff, 0x11, 0xfe, 0x89, 0xcc, 0xfd, 0x3b, 0x19, 0x01, 0x75, 0x59, 0xff, 0x30, 0x41, 0xfe, 0xae, 0x72, 0xff, 0x47, 0xdd, 0xfe, 0x96, 0x7d, 0x32, 0x96, 0xb6, 0x1f, 0x26, 0xe5, 0xe5, 0x55, 0xf3, 0x0b, 0xd6, 0xcf, 0x1a, 0x49, 0xc2, 0xfa, 0x9b, 0x8e, 0xf2, 0x9d, 0x23, 0x11, 0x09, 0x1c, 0x06, 0x08, 0xbf, 0xe2, 0xb8, 0x88, 0xf3, 0xfe, 0x41, 0x0d, 0x74, 0x01, 0x07, 0xd5, 0x6c, 0xfe, 0x94, 0x2b, 0xfa, 0xda, 0x7a, 0xf9, 0xf8, 0xbb, 0x04, 0xb5, 0x86, 0xfc, 0x02, 0x78, 0xf8, 0x86, 0x3a, 0x00, 0xc0, 0xd0, 0xf9, 0x9f, 0xe5, 0xf9, 0x1a, 0xae, 0xfe, 0xae, 0x5a, 0xfe, 0x2b, 0x15, 0x00, 0xbd, 0x33, 0xfe, 0xb8, 0x2b, 0xfd, 0x6f, 0x37, 0x01, 0x8e, 0xdc, 0xff, 0xd3, 0x33, 0xfe, 0x50, 0x55, 0xff, 0xb0, 0xd2, 0xfe, 0x62, 0x4b, 0x39, 0x66, 0xa8, 0x20, 0x0f, 0x26, 0xdf, 0x10, 0x73, 0x08, 0x50, 0xc3, 0x1b, 0x22, 0xa8, 0xfe, 0xae, 0x00, 0xf2, 0xeb, 0x19, 0x11, 0xfd, 0xa6, 0x06, 0x29, 0xa0, 0xe2, 0x6a, 0x69, 0xf1, 0x52, 0x2b, 0x0b, 0xd3, 0xa7, 0x09, 0x9e, 0x83, 0x00, 0x33, 0x0b, 0xf9, 0x45, 0xcf, 0xf7, 0x9f, 0xa2, 0x05, 0xb4, 0xc9, 0xfb, 0x88, 0xbe, 0xf7, 0x90, 0xad, 0x00, 0x0e, 0x4a, 0xf9, 0x8a, 0x78, 0xfa, 0x77, 0x16, 0xfe, 0x3e, 0x74, 0xfe, 0x65, 0x6f, 0x00, 0x3f, 0xe1, 0xfd, 0x3f, 0xbc, 0xfc, 0x64, 0x72, 0x01, 0x2e, 0x36, 0x00, 0x43, 0xd0, 0xfd, 0xfa, 0x32, 0xff, 0xd0, 0xab, 0xfe, 0xba, 0x1e, 0x3f, 0xc1, 0xde, 0x22, 0x17, 0x80, 0xd8, 0xda, 0xff, 0x05, 0xbe, 0xa5, 0x1b, 0x28, 0x66, 0x02, 0x99, 0x70, 0xf2, 0x05, 0x44, 0x10, 0xd5, 0xc3, 0x08, 0x19, 0xe2, 0xe2, 0x59, 0xa2, 0xef, 0xad, 0xd2, 0x08, 0xf7, 0x2e, 0x0b, 0xc1, 0xb9, 0x03, 0x74, 0x74, 0xf8, 0xe5, 0x5a, 0xf6, 0xb7, 0x5e, 0x06, 0x12, 0x4b, 0xfb, 0x9c, 0x81, 0xf7, 0xd6, 0x55, 0x01, 0x1a, 0x11, 0xf9, 0x31, 0xbf, 0xfa, 0x1b, 0x22, 0xfe, 0x49, 0x73, 0xfe, 0xa4, 0x8e, 0x00, 0x33, 0xa2, 0xfd, 0xc0, 0xe5, 0xfc, 0x8e, 0xea, 0x01, 0x06, 0xec, 0xff, 0xfb, 0x87, 0xfd, 0xcc, 0x71, 0xff, 0xf9, 0xad, 0xfe, 0xc3, 0xf0, 0x45, 0xe4, 0x1e, 0x22, 0xa4, 0x02, 0xd3, 0x6e, 0xf0, 0x05, 0xcb, 0xcd, 0x19, 0x01, 0x91, 0x03, 0xd1, 0x69, 0xf3, 0x9a, 0xd4, 0x0f, 0x2e, 0x8a, 0x0b, 0x9a, 0x62, 0xe2, 0x04, 0x4d, 0xed, 0x24, 0x49, 0x07, 0x6e, 0x7d, 0x0b, 0xe0, 0x7a, 0x06, 0x50, 0xe8, 0xf7, 0x68, 0xe4, 0xf5, 0x07, 0x2e, 0x06, 0xdb, 0xea, 0xf9, 0x78, 0x7b, 0xf8, 0x57, 0xe5, 0x01, 0x2d, 0x33, 0xf8, 0x91, 0x99, 0xfa, 0x70, 0xc4, 0xfe, 0x7a, 0xfe, 0xfd, 0xdb, 0x4f, 0x00, 0x1c, 0x7c, 0xfd, 0x24, 0x69, 0xfd, 0xfc, 0x30, 0x02, 0x9a, 0xe6, 0xfe, 0x11, 0x9d, 0xfd, 0x79, 0x94, 0xff, 0x35, 0xb0, 0xfe, 0x1a, 0x12, 0x4a, 0x78, 0xe3, 0x23, 0xed, 0x2c, 0xce, 0x06, 0xd4, 0x06, 0x65, 0x18, 0x17, 0xc0, 0x23, 0x03, 0x7c, 0x74, 0xf4, 0x95, 0xe4, 0x0e, 0xcc, 0x19, 0x11, 0x51, 0xf0, 0xe1, 0x78, 0x22, 0xe9, 0x24, 0x79, 0x06, 0x1c, 0xd1, 0x0b, 0x72, 0xb8, 0x07, 0x27, 0x01, 0xf9, 0x18, 0x20, 0xf6, 0x67, 0x67, 0x04, 0xb1, 0x86, 0xf9, 0xbe, 0xe7, 0xf9, 0xa9, 0xf3, 0x01, 0xe5, 0x8c, 0xf7, 0xe5, 0x7a, 0xfa, 0xea, 0x3e, 0xff, 0x72, 0x54, 0xfd, 0x13, 0x09, 0x00, 0x7a, 0xe1, 0xfd, 0xb5, 0xb9, 0xfd, 0xa1, 0x49, 0x02, 0xaf, 0x02, 0xfe, 0x4d, 0xc2, 0xfd, 0xd5, 0xd0, 0xff, 0xbb, 0x67, 0xfe, 0xb3, 0xae, 0x4e, 0x8a, 0x3d, 0x23, 0x32, 0x71, 0xcb, 0x64, 0x3b, 0x09, 0x27, 0x6b, 0x13, 0x82, 0x26, 0x01, 0x40, 0x66, 0xf4, 0x98, 0x2a, 0x0f, 0x18, 0x31, 0x17, 0x54, 0x37, 0xe1, 0xcf, 0xcb, 0xe4, 0x82, 0x1e, 0x06, 0x01, 0xf1, 0x0b, 0xc7, 0x81, 0x07, 0xeb, 0x62, 0xfb, 0xd7, 0x64, 0xf6, 0xc0, 0x19, 0x02, 0xfb, 0x08, 0xfa, 0x29, 0xe4, 0xfa, 0x00, 0xc9, 0x01, 0x60, 0xbe, 0xf6, 0x26, 0x16, 0xfb, 0x4f, 0x41, 0xff, 0xf2, 0x4c, 0xfc, 0x92, 0xf7, 0xff, 0x59, 0x7b, 0xfe, 0xb0, 0xfb, 0xfd, 0xa7, 0x24, 0x02, 0x72, 0x73, 0xfd, 0x7d, 0xab, 0xfd, 0x6c, 0x3c, 0x00, 0x9b, 0xa9, 0xfd, 0xaf, 0xd6, 0x51, 0x0d, 0x33, 0x23, 0x1b, 0x5a, 0xca, 0xff, 0xb7, 0x0b, 0xfd, 0xb6, 0x0f, 0xb9, 0xee, 0xfe, 0x39, 0xb8, 0xf2, 0xe6, 0x04, 0x10, 0x2a, 0xac, 0x1d, 0xa6, 0xed, 0xe0, 0x82, 0x45, 0xe1, 0xee, 0x45, 0x05, 0x8d, 0x97, 0x0b, 0xbf, 0xcc, 0x06, 0x8b, 0xf5, 0xfe, 0xe9, 0xe8, 0xf5, 0xbb, 0x48, 0x00, 0x82, 0xa5, 0xfb, 0xcc, 0x9d, 0xfa, 0x3c, 0xc4, 0x01, 0x8d, 0x46, 0xf6, 0x96, 0x13, 0xfc, 0x6d, 0xdc, 0xfe, 0x61, 0x5d, 0xfb, 0xb3, 0xc6, 0xff, 0x18, 0x45, 0xff, 0x2e, 0x56, 0xfe, 0x15, 0x9d, 0x01, 0x2e, 0x7f, 0xfd, 0x22, 0x7a, 0xfd, 0xeb, 0x55, 0x00, 0x1e, 0x90, 0xfc, 0x78, 0xe7, 0x52, 0xeb, 0xca, 0x24, 0xb2, 0x63, 0xca, 0xd3, 0x26, 0x0d, 0x88, 0x02, 0x0d, 0x8c, 0x50, 0xfd, 0x32, 0x89, 0xef, 0x28, 0x38, 0x10, 0xf8, 0x78, 0x23, 0x7c, 0x00, 0xe2, 0xbc, 0x96, 0xdf, 0x5e, 0xf9, 0x02, 0x59, 0xe2, 0x0a, 0x0f, 0xf2, 0x05, 0xea, 0x99, 0x02, 0x0f, 0xa5, 0xf5, 0x96, 0xa1, 0xfe, 0x1b, 0xeb, 0xfd, 0x00, 0xa2, 0xf9, 0x16, 0x70, 0x01, 0x7c, 0xaf, 0xf6, 0xe6, 0xff, 0xfc, 0x4e, 0x0d, 0xfe, 0xd1, 0xbd, 0xfa, 0x90, 0x8c, 0xff, 0x12, 0xf9, 0xff, 0xad, 0x9a, 0xfe, 0x9c, 0xd2, 0x00, 0x63, 0x57, 0xfe, 0x55, 0xd0, 0xfc, 0xa6, 0x9e, 0xff, 0xdc, 0x38, 0xfc, 0xf7, 0x30, 0x54, 0x2d, 0xdb, 0x26, 0x4e, 0x67, 0xca, 0xfd, 0xed, 0x0c, 0x25, 0x82, 0x0b, 0x8a, 0x6f, 0xfc, 0xda, 0x3b, 0xeb, 0xee, 0xbd, 0x0f, 0x49, 0xd3, 0x27, 0xf9, 0x3d, 0xe4, 0x39, 0x57, 0xdf, 0xdb, 0x52, 0xff, 0xed, 0x59, 0x0a, 0xa8, 0xb0, 0x05, 0x05, 0x06, 0x05, 0x00, 0x4b, 0xf6, 0x75, 0x55, 0xfd, 0x3c, 0x6c, 0xff, 0x25, 0x00, 0xf9, 0x31, 0xb6, 0x00, 0xaa, 0x8f, 0xf7, 0xff, 0x71, 0xfd, 0xf4, 0x35, 0xfd, 0x5b, 0x70, 0xfa, 0xaf, 0x57, 0xff, 0x01, 0x55, 0x00, 0xa0, 0xa7, 0xfe, 0xbd, 0xb6, 0x00, 0x3b, 0xbb, 0xfe, 0x3d, 0x97, 0xfb, 0x65, 0x35, 0xff, 0x63, 0x42, 0xfc, 0xb9, 0xf9, 0x54, 0x06, 0x11, 0x28, 0x53, 0xf7, 0xcb, 0xb5, 0xe6, 0x0b, 0x4b, 0xb2, 0x0a, 0x76, 0xdc, 0xfb, 0x0e, 0x50, 0xe7, 0x1f, 0x52, 0x0e, 0x35, 0xa5, 0x29, 0x17, 0x5c, 0xe8, 0x6b, 0x3a, 0xe0, 0x7c, 0x20, 0xfb, 0xb5, 0x80, 0x09, 0x18, 0x32, 0x06, 0xa1, 0xaf, 0x05, 0x10, 0x84, 0xf7, 0x1e, 0x29, 0xfd, 0xbb, 0x77, 0xff, 0xc8, 0x3a, 0xf9, 0x2b, 0x0a, 0x00, 0x08, 0x8b, 0xf8, 0x3d, 0x70, 0xfd, 0x91, 0x8e, 0xfc, 0x58, 0x66, 0xfa, 0x7f, 0x02, 0xff, 0x20, 0x47, 0x00, 0xb0, 0x04, 0xff, 0x56, 0x90, 0x00, 0xe6, 0xb3, 0xfd, 0x87, 0xa4, 0xfb, 0xc9, 0x86, 0xfe, 0x77, 0x25, 0xfc, 0x66, 0xbe, 0x53, 0xff, 0xf0, 0x2a, 0x1f, 0x65, 0xce, 0x7d, 0x26, 0x0a, 0x8b, 0x93, 0x0a, 0x2f, 0xc4, 0xfa, 0x4a, 0x66, 0xe5, 0x4b, 0x38, 0x0a, 0x4d, 0x6d, 0x2a, 0x27, 0x97, 0xee, 0x18, 0x25, 0xe1, 0xaf, 0x0c, 0xf7, 0x8e, 0x42, 0x08, 0x75, 0x6f, 0x07, 0x67, 0x11, 0x05, 0x94, 0x31, 0xf9, 0x28, 0x18, 0xfe, 0x3a, 0x6e, 0xfe, 0x65, 0xc8, 0xf9, 0xf6, 0x4a, 0x00, 0x83, 0x18, 0xf9, 0x28, 0x11, 0xfd, 0x7b, 0x3f, 0xfc, 0x49, 0x1a, 0xfa, 0x6a, 0xf1, 0xfe, 0x71, 0x7d, 0x00, 0xc7, 0x84, 0xfe, 0x02, 0xe7, 0xff, 0x09, 0x47, 0xfd, 0x00, 0xcd, 0xfb, 0x61, 0xf3, 0xfd, 0x89, 0xe7, 0xfc, 0x6a, 0x01, 0x51, 0x3d, 0xe3, 0x2e, 0x3e, 0xbd, 0xd1, 0x10, 0x15, 0x08, 0x9c, 0x3b, 0x0a, 0xf5, 0xda, 0xf9, 0xab, 0x8f, 0xe5, 0x6c, 0x6b, 0x03, 0xe6, 0x7d, 0x2a, 0x5f, 0xf8, 0xf5, 0xbd, 0x13, 0xe2, 0x92, 0x48, 0xf4, 0x10, 0x30, 0x06, 0x43, 0xd9, 0x08, 0xd2, 0xc9, 0x03, 0xd6, 0x1f, 0xfb, 0x1b, 0xf5, 0xff, 0x21, 0x93, 0xfc, 0xe6, 0x07, 0xfb, 0x1c, 0xe7, 0x00, 0x1c, 0x66, 0xf9, 0x02, 0x69, 0xfc, 0xdf, 0xd9, 0xfb, 0x6f, 0x2b, 0xfa, 0x90, 0x45, 0xff, 0x60, 0xc9, 0xff, 0x59, 0x11, 0xfd, 0xe3, 0x91, 0x00, 0xda, 0x8e, 0xfc, 0x69, 0x2e, 0xfc, 0xaa, 0x99, 0xfe, 0x97, 0xc1, 0xfc, 0xb1, 0x0a, 0x4d, 0x2c, 0x73, 0x33, 0x79, 0x1b, 0xd6, 0xf0, 0xef, 0x04, 0x5a, 0xea, 0x08, 0xfc, 0x95, 0xfa, 0x2b, 0x7c, 0xe7, 0xfa, 0x18, 0xfa, 0x7c, 0x40, 0x29, 0xa1, 0xb5, 0xfd, 0x51, 0x74, 0xe3, 0x25, 0x5a, 0xf3, 0x9e, 0x02, 0x03, 0x9e, 0x21, 0x09, 0x4c, 0x28, 0x03, 0xd2, 0x78, 0xfc, 0xae, 0x81, 0x02, 0xa6, 0xe1, 0xfa, 0xc7, 0x05, 0xfc, 0xa4, 0xe6, 0x01, 0x52, 0x46, 0xf9, 0x4f, 0x8a, 0xfb, 0x77, 0xa0, 0xfb, 0xcd, 0xc1, 0xfa, 0x7d, 0xfa, 0xfd, 0x60, 0xe3, 0xfe, 0xfb, 0x6a, 0xfc, 0xc2, 0xf5, 0x00, 0x20, 0xa2, 0xfc, 0xec, 0xdb, 0xfc, 0x30, 0xb5, 0xfe, 0xf1, 0x4d, 0xfc, 0x30, 0x29, 0x49, 0x6e, 0x17, 0x35, 0xd0, 0xae, 0xdc, 0x48, 0x90, 0x03, 0xb0, 0xf4, 0x05, 0x6a, 0xdd, 0xfb, 0xe1, 0x31, 0xe8, 0xe9, 0x93, 0xf1, 0xdf, 0x9e, 0x27, 0x6f, 0xd1, 0x04, 0xe6, 0xca, 0xe4, 0x33, 0xde, 0xf3, 0x4e, 0xac, 0xff, 0x55, 0xcf, 0x06, 0x1a, 0x56, 0x05, 0xc3, 0x49, 0xfc, 0xd6, 0xde, 0x04, 0xcd, 0x17, 0xfb, 0xb4, 0x16, 0xfb, 0x20, 0xe4, 0x03, 0x37, 0x9b, 0xf8, 0xc0, 0xf9, 0xfa, 0x9f, 0xab, 0xfb, 0x40, 0xb2, 0xf9, 0xff, 0x9f, 0xfc, 0x5d, 0xa1, 0xfe, 0xf2, 0xea, 0xfb, 0x59, 0xc0, 0x01, 0xd4, 0x7b, 0xfd, 0x70, 0x35, 0xfc, 0x4b, 0x4e, 0xff, 0x75, 0x6c, 0xfc, 0x2f, 0xee, 0x43, 0xd5, 0xe5, 0x35, 0x29, 0xda, 0xe4, 0x18, 0x6a, 0x03, 0x07, 0xff, 0x02, 0x84, 0x07, 0xfd, 0xa1, 0x55, 0xe8, 0xab, 0x7f, 0xe9, 0xb0, 0x60, 0x25, 0x78, 0x70, 0x0c, 0x4b, 0xdc, 0xe5, 0xfb, 0x98, 0xf4, 0x4f, 0x05, 0xfe, 0x13, 0x99, 0x01, 0xf5, 0x21, 0x09, 0x13, 0x95, 0xfc, 0x52, 0xeb, 0x04, 0xee, 0x80, 0xfe, 0x35, 0xd3, 0xf8, 0x37, 0xf4, 0x04, 0xdf, 0xbc, 0xf9, 0x80, 0x78, 0xf9, 0x14, 0x5b, 0xfb, 0x1b, 0xe8, 0xf8, 0x77, 0xe7, 0xfa, 0xc7, 0x15, 0xff, 0x49, 0x43, 0xfc, 0x6b, 0xc1, 0x01, 0x22, 0xa7, 0xfe, 0x39, 0x8f, 0xfb, 0x5c, 0xd1, 0xff, 0x2a, 0x1d, 0xfc, 0xdb, 0x5b, 0x3f, 0x70, 0xec, 0x36, 0xd3, 0xb6, 0xec, 0x72, 0x45, 0x01, 0x70, 0x0c, 0xff, 0xbc, 0xd6, 0xff, 0xfd, 0x31, 0xeb, 0x8d, 0x4c, 0xe2, 0x01, 0x84, 0x1f, 0xde, 0x9c, 0x13, 0xb7, 0xc2, 0xe7, 0x66, 0x18, 0xf5, 0x12, 0xbf, 0xff, 0x59, 0xbf, 0xfa, 0x43, 0xb5, 0x0a, 0x5f, 0xe4, 0xff, 0x57, 0xd6, 0x02, 0x07, 0x45, 0x02, 0xd0, 0x76, 0xf8, 0xee, 0x41, 0x03, 0x5a, 0xb5, 0xfb, 0xfa, 0x97, 0xf8, 0x32, 0x68, 0xfa, 0xea, 0xe9, 0xf8, 0xfc, 0xea, 0xf9, 0xcf, 0x21, 0xff, 0x02, 0x41, 0xfd, 0x97, 0x05, 0x01, 0x67, 0xbd, 0xff, 0x60, 0x49, 0xfb, 0xe1, 0x41, 0xff, 0x7d, 0xd7, 0xfc, 0x99, 0x7e, 0x3c, 0x7b, 0x07, 0x37, 0x69, 0x17, 0xef, 0xb8, 0x43, 0x03, 0x51, 0x26, 0x00, 0xbd, 0x74, 0xfb, 0x41, 0xab, 0xed, 0x74, 0x68, 0xe1, 0xb5, 0xe2, 0x16, 0xea, 0xfd, 0x18, 0x02, 0x87, 0xeb, 0xe3, 0x65, 0xf3, 0xfd, 0x6d, 0x03, 0x48, 0xd9, 0xf5, 0x31, 0xd9, 0x08, 0x3c, 0x27, 0x05, 0x64, 0xcc, 0x00, 0xe9, 0x3d, 0x03, 0x24, 0x4f, 0xfa, 0x38, 0x3b, 0x00, 0x9e, 0x94, 0xfd, 0x72, 0x25, 0xf9, 0x59, 0xcc, 0xf8, 0x5e, 0xb1, 0xfa, 0xe4, 0xae, 0xf8, 0xfc, 0xb0, 0xfe, 0x8e, 0x49, 0xfe, 0x20, 0x34, 0x00, 0x00, 0xa2, 0xff, 0xf3, 0xba, 0xfb, 0xe0, 0xd6, 0xfe, 0x42, 0x25, 0xfd, 0x42, 0xbb, 0x3d, 0x37, 0x52, 0x34, 0x0b, 0x83, 0xed, 0xa8, 0x1a, 0x07, 0x92, 0x16, 0x02, 0xd9, 0xb6, 0xf5, 0x81, 0xe9, 0xed, 0x72, 0xca, 0xe5, 0xcd, 0xbc, 0x0e, 0x53, 0xec, 0x19, 0xa6, 0x9b, 0xf0, 0x28, 0x76, 0xf1, 0x31, 0xe6, 0x06, 0x6d, 0x1d, 0xf4, 0x09, 0x44, 0x06, 0x48, 0x64, 0x07, 0x04, 0x75, 0x00, 0x24, 0x6e, 0x02, 0xd4, 0xc7, 0xfb, 0xb0, 0x90, 0xff, 0xab, 0xa3, 0xfc, 0x26, 0x82, 0xfb, 0xdb, 0x56, 0xf8, 0xdb, 0x17, 0xfc, 0x45, 0xdd, 0xf8, 0x6c, 0x88, 0xfc, 0x1c, 0xcd, 0xfe, 0x00, 0x77, 0xff, 0x08, 0xf9, 0xff, 0x54, 0xb5, 0xfb, 0xec, 0x5b, 0xfe, 0x39, 0x6b, 0xfd, 0xdf, 0x4a, 0x3d, 0x66, 0x21, 0x33, 0x93, 0xf4, 0xeb, 0x6e, 0x32, 0x0a, 0x9b, 0x33, 0x04, 0x7c, 0x1a, 0xf1, 0x51, 0x7a, 0xef, 0xfd, 0x50, 0xe9, 0xea, 0xf5, 0x06, 0x05, 0x78, 0x19, 0xec, 0xcb, 0xf7, 0x72, 0x89, 0xee, 0x63, 0xe9, 0x09, 0x35, 0x97, 0xf4, 0x0f, 0x73, 0x02, 0x94, 0xce, 0x09, 0x5b, 0x43, 0xfd, 0xb3, 0x2b, 0x04, 0xa2, 0xa1, 0xfc, 0x4b, 0xc4, 0xfd, 0x64, 0xb4, 0xfe, 0x91, 0x6c, 0xfd, 0x2f, 0xd6, 0xf8, 0xcd, 0x18, 0xfd, 0xfb, 0x4a, 0xf9, 0x42, 0x03, 0xfa, 0x23, 0x9c, 0xfe, 0x1d, 0x9c, 0xfe, 0x75, 0xfb, 0x00, 0xf7, 0xfc, 0xfb, 0x84, 0xab, 0xfc, 0x98, 0x09, 0xfe, 0x6d, 0x55, 0x3f, 0x01, 0xc7, 0x2d, 0x28, 0x00, 0xeb, 0x99, 0xc8, 0x0e, 0xf1, 0xc7, 0x02, 0x3b, 0x1c, 0xef, 0xa1, 0x37, 0xf1, 0xcc, 0x87, 0xeb, 0x52, 0x9c, 0x00, 0x73, 0x9d, 0x19, 0xe0, 0x1c, 0xfd, 0x76, 0x62, 0xec, 0xaf, 0xa9, 0x0a, 0xb5, 0x26, 0xf8, 0xda, 0xf2, 0xfd, 0xd2, 0x47, 0x09, 0x6a, 0x3e, 0xfe, 0xc6, 0x83, 0x00, 0x04, 0x6b, 0xff, 0x3c, 0x40, 0xfe, 0xfc, 0xf0, 0xff, 0xcd, 0xa6, 0xff, 0xda, 0x77, 0xf8, 0xb2, 0x4b, 0xfd, 0xfe, 0x93, 0xfa, 0x58, 0x0d, 0xf9, 0x8b, 0xfb, 0xfb, 0x2d, 0xe8, 0xfe, 0x91, 0x86, 0x00, 0x3e, 0x87, 0xfc, 0x4c, 0x55, 0xfc, 0xc0, 0xb2, 0xfd, 0x17, 0x85, 0x40, 0xb9, 0xc3, 0x2b, 0x31, 0x86, 0xe5, 0x6c, 0xcd, 0x12, 0x8a, 0x55, 0x06, 0xaf, 0xbd, 0xe9, 0x53, 0xd0, 0xf1, 0xe5, 0xf1, 0xf1, 0x3d, 0x25, 0xfc, 0x15, 0xc9, 0x13, 0x74, 0xf6, 0x04, 0x89, 0xc2, 0xeb, 0x9c, 0xfb, 0x07, 0xc6, 0xe5, 0xfc, 0x31, 0x01, 0xfb, 0x98, 0xbf, 0x07, 0xa0, 0x98, 0xfe, 0xfb, 0xbd, 0xfd, 0x92, 0x3a, 0x01, 0x65, 0xef, 0x01, 0xc8, 0x31, 0xff, 0xd2, 0xf2, 0x00, 0x20, 0x65, 0xf9, 0x10, 0x50, 0xfc, 0xe1, 0x4f, 0xfc, 0x93, 0xe4, 0xf8, 0xa3, 0x7f, 0xfa, 0x22, 0x6d, 0xfd, 0xf3, 0x67, 0xff, 0xbe, 0x21, 0xfd, 0xef, 0xe4, 0xfd, 0x35, 0x79, 0xfd, 0x32, 0x64, 0x41, 0x65, 0x02, 0x29, 0xa4, 0x73, 0xdf, 0xcf, 0x88, 0x18, 0x17, 0xb1, 0x09, 0xb8, 0x56, 0xe3, 0xfe, 0x70, 0xf3, 0x70, 0xca, 0xf8, 0xff, 0x5c, 0xf8, 0xc4, 0x03, 0x0d, 0xe5, 0xa6, 0x0b, 0xc2, 0x53, 0xec, 0x2a, 0x93, 0x04, 0x2d, 0xd7, 0x00, 0xe7, 0x94, 0xf8, 0xf6, 0xa6, 0x06, 0x28, 0x2c, 0xff, 0x8d, 0xd2, 0xfc, 0x6d, 0x14, 0x02, 0xc5, 0xfb, 0x02, 0x50, 0x98, 0x00, 0x9a, 0x6b, 0x01, 0x48, 0xc8, 0xf9, 0x10, 0x6e, 0xfc, 0xdb, 0xa1, 0xfc, 0x99, 0x5d, 0xf9, 0x7f, 0xaa, 0xfa, 0xac, 0xc9, 0xfb, 0x34, 0xab, 0xfc, 0x8c, 0xfb, 0xfd, 0x7f, 0xc0, 0xff, 0x25, 0xbd, 0xfd, 0xbc, 0x66, 0x42, 0x72, 0xd3, 0x23, 0xa1, 0x74, 0xdb, 0x77, 0x75, 0x1f, 0x21, 0x06, 0x0a, 0xb6, 0x38, 0xdf, 0xef, 0xf7, 0xf5, 0xd4, 0x79, 0xfd, 0x34, 0x88, 0xf6, 0x87, 0x5b, 0x06, 0x14, 0x67, 0x0f, 0x9b, 0xcb, 0xee, 0x5d, 0x58, 0x02, 0x0f, 0xbe, 0x01, 0x61, 0xb2, 0xf6, 0x9e, 0xc9, 0x07, 0xc5, 0x5d, 0x00, 0x06, 0x22, 0xfb, 0x58, 0xc6, 0x03, 0x88, 0xb6, 0x01, 0xc8, 0xd6, 0x00, 0x7d, 0x64, 0x04, 0xf6, 0x9b, 0xf8, 0x38, 0x18, 0xfd, 0x36, 0x27, 0xfd, 0x95, 0x88, 0xf8, 0x51, 0x77, 0xfc, 0x32, 0x3a, 0xfb, 0xcd, 0xb7, 0xf9, 0xdc, 0xe7, 0xfd, 0x5a, 0xa5, 0x00, 0x9e, 0x7b, 0xfe, 0x60, 0x92, 0x42, 0xc6, 0x3e, 0x1d, 0xdb, 0xb6, 0xda, 0xbf, 0xef, 0x25, 0x15, 0xdd, 0x07, 0x0b, 0xc7, 0xdd, 0x36, 0x17, 0xf9, 0x36, 0xda, 0x00, 0x01, 0x29, 0xf3, 0xf5, 0x36, 0x02, 0x77, 0x83, 0x13, 0x4f, 0x27, 0xef, 0x77, 0xa5, 0xff, 0x29, 0x84, 0x04, 0x9c, 0xf2, 0xf5, 0xe1, 0xea, 0x05, 0x76, 0x15, 0x04, 0x04, 0x11, 0xfb, 0xa9, 0xc5, 0x01, 0x9a, 0x63, 0x02, 0x18, 0x0d, 0x00, 0x28, 0x23, 0x05, 0x2f, 0xe2, 0xfa, 0xe1, 0x9f, 0xfb, 0xc2, 0x4d, 0xfe, 0x7d, 0xd2, 0xf8, 0xd3, 0xe8, 0xfb, 0x53, 0x4a, 0xfd, 0x81, 0x30, 0xf8, 0x2c, 0x29, 0xfc, 0x8c, 0xb4, 0x00, 0x29, 0x59, 0xff, 0x01, 0x93, 0x3f, 0xf3, 0x19, 0x18, 0x13, 0x19, 0xde, 0x56, 0xac, 0x28, 0x2e, 0x90, 0x04, 0xde, 0x74, 0xe0, 0x18, 0x0c, 0xfc, 0xab, 0xe3, 0xff, 0xb7, 0x8e, 0xf1, 0xa8, 0x44, 0x01, 0xd1, 0x64, 0x14, 0x8d, 0xd9, 0xee, 0xad, 0x4d, 0xfe, 0xd6, 0x91, 0x07, 0x7a, 0x8a, 0xf5, 0x4f, 0x55, 0x03, 0xe5, 0x16, 0x07, 0x21, 0xd9, 0xfb, 0x15, 0x0f, 0x00, 0x38, 0x2f, 0x02, 0xb8, 0x73, 0xff, 0xe9, 0x18, 0x05, 0x9d, 0x10, 0xfc, 0x9d, 0x9c, 0xfb, 0xae, 0x34, 0xff, 0x90, 0x5b, 0xf9, 0xe2, 0x48, 0xfb, 0x00, 0x39, 0xfe, 0x05, 0x27, 0xf9, 0xeb, 0x01, 0xfb, 0x97, 0x2c, 0xff, 0x9c, 0x90, 0xff, 0xd9, 0x20, 0x3a, 0xc9, 0x42, 0x15, 0xd0, 0x6b, 0xe3, 0xcf, 0x8a, 0x27, 0x4d, 0x9f, 0x03, 0xda, 0x8e, 0xe4, 0x29, 0xfb, 0xfb, 0x2c, 0xf2, 0xff, 0xb1, 0x4e, 0xf2, 0xae, 0x7c, 0xfe, 0x79, 0x15, 0x14, 0x34, 0x66, 0xf1, 0x5b, 0x55, 0xfc, 0xf3, 0x84, 0x08, 0x19, 0xde, 0xf7, 0xa0, 0x38, 0x01, 0xa3, 0xea, 0x06, 0x7a, 0x1f, 0xfd, 0xf1, 0xb9, 0x00, 0x09, 0xe4, 0x00, 0xac, 0x86, 0xfe, 0x31, 0xc0, 0x05, 0xd6, 0x61, 0xfb, 0xa9, 0x5e, 0xfc, 0x27, 0xb4, 0x00, 0x4b, 0x5f, 0xf9, 0xfa, 0xae, 0xfb, 0xc2, 0x82, 0xfe, 0x9e, 0x05, 0xfa, 0x05, 0x7b, 0xfb, 0x61, 0x2f, 0xfe, 0xe3, 0x8d, 0xfe, 0xef, 0x7f, 0x33, 0xa8, 0x88, 0x14, 0xb2, 0xfd, 0xe7, 0x0c, 0xbf, 0x24, 0xb2, 0x22, 0x05, 0xcb, 0xa2, 0xe6, 0xf1, 0x06, 0xfc, 0xc5, 0x81, 0x01, 0x6e, 0x67, 0xf2, 0x3c, 0xdf, 0xfb, 0xf8, 0xac, 0x13, 0x4a, 0x80, 0xf4, 0x24, 0x27, 0xfa, 0xf4, 0x28, 0x09, 0xef, 0x5f, 0xfa, 0x34, 0xf6, 0xfe, 0xa6, 0xa8, 0x06, 0x14, 0x51, 0xfe, 0xff, 0x60, 0x00, 0x32, 0x46, 0x01, 0x0e, 0xfe, 0xfd, 0x84, 0x56, 0x04, 0x3d, 0xb8, 0xfc, 0x21, 0xc9, 0xfb, 0xb3, 0xfc, 0x00, 0x19, 0x45, 0xfb, 0x1d, 0x87, 0xfb, 0x56, 0x12, 0xff, 0xd9, 0x88, 0xfa, 0x94, 0xf2, 0xfb, 0xcb, 0x89, 0xfe, 0x9c, 0x00, 0xfe, 0xbd, 0xbb, 0x29, 0x23, 0xa5, 0x0f, 0x47, 0x9f, 0xf1, 0xf7, 0x3e, 0x25, 0x12, 0xe2, 0x02, 0x94, 0xb0, 0xe7, 0x6e, 0xf9, 0xff, 0x60, 0x19, 0x01, 0x00, 0x2d, 0xf6, 0x16, 0x0d, 0x00, 0xe1, 0x55, 0x06, 0x09, 0x71, 0xf6, 0x20, 0x82, 0x04, 0x36, 0xbf, 0x05, 0x5c, 0x61, 0xf9, 0x13, 0xfa, 0xfe, 0xef, 0x22, 0x03, 0x6b, 0x52, 0xfe, 0x4f, 0x97, 0xfd, 0xb6, 0x99, 0x00, 0x96, 0x80, 0xff, 0xaf, 0x08, 0x00, 0xdd, 0xb3, 0xfe, 0xf5, 0xf5, 0x01, 0xad, 0x31, 0x02, 0xcc, 0x73, 0x00, 0xe2, 0xbf, 0x00, 0x6e, 0xd2, 0xfe, 0x61, 0x39, 0xfd, 0x1d, 0xd1, 0xfe, 0x2d, 0xa5, 0xfd, 0x19, 0x17, 0xfc, 0x70, 0xa0, 0x23, 0x82, 0x74, 0x0f, 0xb6, 0x79, 0xf5, 0x79, 0xf9, 0x1f, 0xb4, 0x11, 0x04, 0x07, 0x56, 0xec, 0xca, 0x6f, 0xff, 0x4b, 0x35, 0x00, 0xc7, 0x78, 0xf7, 0x9b, 0x11, 0x00, 0x13, 0xdb, 0x05, 0x38, 0x35, 0xf8, 0x83, 0x29, 0x03, 0x55, 0x16, 0x05, 0x51, 0xc6, 0xfa, 0x89, 0x42, 0xfe, 0x92, 0x27, 0x02, 0xec, 0xde, 0xfe, 0x39, 0xe5, 0xfd, 0xbd, 0xf4, 0xff, 0x3f, 0xb7, 0xff, 0x27, 0xe3, 0x00, 0xef, 0xff, 0xfe, 0xf6, 0xf2, 0x00, 0xc9, 0x32, 0x02, 0x71, 0x88, 0x00, 0x6d, 0xfa, 0xff, 0xfb, 0xea, 0xfe, 0x8b, 0xc7, 0xfd, 0x45, 0x87, 0xfe, 0xd7, 0x10, 0xfe, 0x9a, 0x6f, 0xfd, 0x2a, 0x98, 0x1e, 0x16, 0x5e, 0x0f, 0x44, 0x65, 0xf8, 0x46, 0x4f, 0x1b, 0x0f, 0xae, 0x05, 0x1c, 0xe5, 0xef, 0xdd, 0xbc, 0xfe, 0xa7, 0x2d, 0x00, 0x42, 0xcf, 0xf8, 0x33, 0xdf, 0xff, 0xa5, 0x87, 0x05, 0x88, 0x06, 0xfa, 0xa8, 0xae, 0x01, 0xa1, 0xb3, 0x04, 0x2c, 0x51, 0xfc, 0xee, 0x95, 0xfd, 0x5d, 0xbe, 0x01, 0x74, 0x59, 0xff, 0xad, 0x28, 0xfe, 0x12, 0xee, 0xff, 0x0d, 0x16, 0x00, 0x2a, 0x14, 0x01, 0xc7, 0x16, 0xff, 0xcd, 0xf3, 0x00, 0xb4, 0x87, 0x01, 0x3d, 0x1c, 0x00, 0xc5, 0x72, 0x00, 0x9d, 0x59, 0xff, 0xba, 0xe3, 0xfd, 0x75, 0x8e, 0xfe, 0x75, 0x97, 0xfe, 0x0b, 0x3d, 0xfe, 0x27, 0x79, 0x1a, 0x81, 0xfe, 0x0e, 0x62, 0x2a, 0xfa, 0xef, 0xba, 0x17, 0x43, 0xba, 0x06, 0xc9, 0x9e, 0xf2, 0x98, 0xbe, 0xfe, 0x5f, 0x48, 0x00, 0xfa, 0x07, 0xfa, 0xf8, 0xba, 0xff, 0x12, 0x4d, 0x05, 0x5b, 0x0f, 0xfb, 0x6b, 0xa4, 0x00, 0x5b, 0x83, 0x04, 0xa6, 0xf6, 0xfc, 0x9e, 0x6f, 0xfd, 0x4c, 0x84, 0x01, 0x3c, 0xc8, 0xff, 0x1a, 0x64, 0xfe, 0x58, 0x11, 0x00, 0x8e, 0x94, 0x00, 0x5e, 0x9f, 0x00, 0xad, 0x5b, 0xff, 0xd8, 0xd4, 0x00, 0xf1, 0xcf, 0x00, 0xa5, 0x25, 0x00, 0xad, 0xd7, 0x00, 0x66, 0xd2, 0xff, 0x50, 0x16, 0xfe, 0xd4, 0xd9, 0xfe, 0x74, 0xea, 0xfe, 0xb1, 0x66, 0xfe, 0xc1, 0x45, 0x17, 0x4f, 0xff, 0x0d, 0xc8, 0x87, 0xfb, 0xf9, 0xfe, 0x14, 0x45, 0xe8, 0x06, 0xf0, 0x4b, 0xf5, 0x2b, 0xcc, 0xfe, 0x73, 0x83, 0x00, 0x42, 0x3a, 0xfb, 0xd6, 0x7b, 0xff, 0x0a, 0xf6, 0x04, 0x2d, 0xbd, 0xfb, 0xc4, 0x0f, 0x00, 0xe7, 0xfb, 0x03, 0xb4, 0x80, 0xfd, 0x2d, 0x85, 0xfd, 0x55, 0x7a, 0x01, 0xbc, 0x14, 0x00, 0xd7, 0x9b, 0xfe, 0x33, 0x88, 0x00, 0xab, 0x5e, 0x00, 0xfb, 0x50, 0x00, 0xa9, 0xa8, 0xff, 0x6b, 0x63, 0x00, 0x82, 0xdc, 0x00, 0xeb, 0x60, 0x00, 0x6f, 0xdb, 0x00, 0x10, 0x36, 0x00, 0xac, 0x83, 0xfe, 0xfb, 0xf8, 0xfe, 0xcd, 0x17, 0xff, 0x8d, 0x8d, 0xfe, 0xc4, 0x7c, 0x14, 0x39, 0xfc, 0x0c, 0x34, 0xe0, 0xfc, 0x92, 0x32, 0x12, 0x8b, 0x12, 0x07, 0xdf, 0xee, 0xf7, 0x1b, 0xe6, 0xfe, 0x97, 0xeb, 0x00, 0xba, 0xfd, 0xfb, 0xfb, 0x8b, 0xff, 0xde, 0x80, 0x04, 0xbb, 0x1d, 0xfc, 0x98, 0xd2, 0xff, 0xa7, 0x98, 0x03, 0x09, 0xee, 0xfd, 0x33, 0xb3, 0xfd, 0x49, 0xab, 0x01, 0xe1, 0x4a, 0x00, 0xd0, 0x30, 0xff, 0xa6, 0x67, 0x00, 0x1f, 0x0f, 0x00, 0x20, 0x9f, 0x00, 0x78, 0xa9, 0xff, 0x31, 0x7a, 0x00, 0xa1, 0x09, 0x01, 0x8e, 0x92, 0x00, 0x5b, 0xe4, 0x00, 0x9e, 0x40, 0x00, 0xe5, 0xf1, 0xfe, 0xaa, 0x42, 0xff, 0x1b, 0x4c, 0xff, 0xff, 0xc4, 0xfe, 0xce, 0xb5, 0x11, 0x18, 0xb5, 0x0b, 0x96, 0x10, 0xfe, 0xd4, 0x37, 0x10, 0x1b, 0x95, 0x07, 0xcb, 0xe6, 0xf9, 0x09, 0xf5, 0xfe, 0xb2, 0x3a, 0x01, 0xd1, 0xd7, 0xfc, 0x7d, 0x86, 0xff, 0x69, 0xb4, 0x03, 0x65, 0xaf, 0xfc, 0x95, 0xcb, 0xff, 0x60, 0x0b, 0x03, 0x09, 0x40, 0xfe, 0xbc, 0x82, 0xfe, 0xf1, 0xa6, 0x01, 0xbd, 0x43, 0x00, 0xdd, 0x91, 0xff, 0x42, 0x41, 0x00, 0x9b, 0x6f, 0x00, 0x65, 0xd1, 0x00, 0x75, 0xb1, 0xff, 0x9c, 0x96, 0x00, 0xf5, 0x32, 0x01, 0x40, 0x9f, 0x00, 0xe8, 0xe5, 0x00, 0xa4, 0x55, 0x00, 0x61, 0x44, 0xff, 0x95, 0xc5, 0xff, 0x4f, 0x3f, 0xff, 0x36, 0x45, 0xfe, 0xb1, 0x13, 0x0f, 0x22, 0xef, 0x0a, 0x96, 0x05, 0xff, 0xcf, 0x23, 0x0e, 0x13, 0xe1, 0x07, 0x3e, 0xc2, 0xfb, 0x03, 0x2f, 0xff, 0xb3, 0x71, 0x01, 0x26, 0x6e, 0xfd, 0x81, 0x44, 0xff, 0xbb, 0x37, 0x03, 0x69, 0x4b, 0xfd, 0xf4, 0xa9, 0xff, 0x83, 0x8f, 0x02, 0x0b, 0xf8, 0xfe, 0xa4, 0xe1, 0xfe, 0x8a, 0x51, 0x01, 0xa2, 0xc6, 0x00, 0x43, 0xd1, 0xff, 0xa2, 0x87, 0x00, 0x4e, 0xbb, 0x00, 0x7f, 0xa4, 0x00, 0x3a, 0x00, 0x00, 0xf1, 0xad, 0x00, 0xde, 0x2e, 0x01, 0xe9, 0xa5, 0x00, 0xde, 0xd5, 0x00, 0xce, 0x98, 0x00, 0x71, 0x7a, 0xff, 0x2e, 0x3c, 0xff, 0x83, 0x93, 0xfe, 0x6f, 0x00, 0xfe, 0x23, 0xf5, 0x0c, 0x7e, 0x12, 0x0a, 0xf1, 0xca, 0xff, 0x15, 0x88, 0x0c, 0x06, 0x00, 0x08, 0xd5, 0x57, 0xfd, 0x7a, 0x89, 0xff, 0xa8, 0x83, 0x01, 0x6a, 0xda, 0xfd, 0xed, 0x32, 0xff, 0xf5, 0xd9, 0x02, 0x2b, 0x11, 0xfe, 0xbb, 0x97, 0xff, 0xa3, 0x06, 0x02, 0xa6, 0x9d, 0xff, 0x26, 0x59, 0xff, 0x7e, 0x8d, 0x01, 0xbd, 0x51, 0x01, 0xc3, 0x2f, 0x00, 0x11, 0xc7, 0x00, 0x4d, 0xc0, 0x00, 0x1e, 0xbf, 0x00, 0x4b, 0x4b, 0x00, 0x4c, 0xcc, 0x00, 0xbe, 0x1c, 0x01, 0x75, 0xcc, 0x00, 0x0c, 0xd6, 0x00, 0xc0, 0xe4, 0xff, 0xd5, 0xea, 0xfe, 0x36, 0xdc, 0xfe, 0x02, 0x8f, 0xfe, 0x3f, 0x26, 0xfe, 0x0e, 0x32, 0x0b, 0xf3, 0x4a, 0x09, 0x57, 0x92, 0x00, 0x50, 0x36, 0x0b, 0x3a, 0xaf, 0x07, 0x64, 0x5c, 0xfe, 0x47, 0x32, 0x00, 0xa5, 0x84, 0x01, 0x6a, 0xdb, 0xfd, 0x85, 0x70, 0xff, 0x30, 0xea, 0x02, 0x33, 0x37, 0xfe, 0x43, 0x08, 0xff, 0x3b, 0x50, 0x02, 0xbe, 0x88, 0x00, 0x2c, 0xe1, 0xff, 0x9d, 0x08, 0x02, 0xeb, 0x60, 0x01, 0xc7, 0x5f, 0x00, 0xee, 0x1b, 0x01, 0xce, 0xca, 0x00, 0x5b, 0xdd, 0x00, 0x5b, 0x79, 0x00, 0x0a, 0xca, 0x00, 0x42, 0xb7, 0x00, 0x31, 0x0c, 0x00, 0xd4, 0x1c, 0x00, 0x51, 0x6e, 0xff, 0xff, 0xda, 0xfe, 0x25, 0xc0, 0xfe, 0x77, 0x48, 0xfe, 0xf5, 0xf3, 0xfd, 0x6c, 0x6e, 0x0a, 0xf7, 0x3f, 0x09, 0x0b, 0xe4, 0x00, 0x03, 0x7f, 0x09, 0xfe, 0x06, 0x07, 0x34, 0x1b, 0xff, 0xa6, 0xbf, 0x00, 0x26, 0xab, 0x01, 0x66, 0xeb, 0xfd, 0xbc, 0x55, 0xff, 0xf7, 0xa2, 0x02, 0xba, 0xb6, 0xfe, 0x75, 0x65, 0xff, 0x1f, 0x25, 0x03, 0xda, 0x5d, 0x01, 0x7c, 0xfa, 0xff, 0x05, 0x36, 0x02, 0xfb, 0xce, 0x01, 0xb2, 0xef, 0x00, 0x95, 0xfc, 0x00, 0xbe, 0xad, 0x00, 0x08, 0xf2, 0x00, 0xc3, 0x11, 0x00, 0x09, 0xb2, 0xff, 0x6b, 0xdc, 0xff, 0xe3, 0xf6, 0xff, 0xa7, 0xde, 0xff, 0x80, 0x45, 0xff, 0xf5, 0x52, 0xfe, 0xb4, 0x38, 0xfe, 0xe7, 0x83, 0xfe, 0x2f, 0x33, 0xfe, 0x6c, 0x0d, 0x09, 0x34, 0x10, 0x08, 0xa6, 0x84, 0x01, 0x7c, 0x7d, 0x09, 0xeb, 0xa4, 0x06, 0x55, 0xa6, 0xff, 0x4e, 0x59, 0x01, 0xd9, 0x32, 0x01, 0x9f, 0xd2, 0xfd, 0xe4, 0xe0, 0xff, 0xbe, 0xe7, 0x02, 0xf3, 0x6e, 0xff, 0x4d, 0x29, 0x00, 0xed, 0x34, 0x03, 0x63, 0xa0, 0x01, 0x7f, 0x1c, 0x01, 0x6c, 0xb8, 0x02, 0xa4, 0xc1, 0x01, 0x1d, 0xb6, 0x00, 0xe9, 0xb5, 0x00, 0x46, 0x69, 0x00, 0x24, 0xcb, 0xff, 0x91, 0x29, 0xff, 0x83, 0x62, 0xff, 0x14, 0xde, 0xff, 0xd7, 0xf5, 0xff, 0x07, 0x48, 0xff, 0x23, 0xce, 0xfe, 0xc7, 0x52, 0xfe, 0x6e, 0xa7, 0xfe, 0x80, 0xb3, 0xfe, 0xce, 0x30, 0xfe, 0x1e, 0x6e, 0x08, 0xa1, 0xf4, 0x07, 0xde, 0xe6, 0x01, 0xa2, 0xb1, 0x08, 0x1d, 0x3c, 0x06, 0x7b, 0xd2, 0xff, 0xad, 0xe9, 0x00, 0xff, 0x86, 0x01, 0x40, 0x24, 0xff, 0xd0, 0x48, 0x00, 0xfd, 0x03, 0x03, 0x1d, 0x12, 0x00, 0xb1, 0xf2, 0x00, 0x5a, 0x17, 0x04, 0x11, 0x9c, 0x02, 0x0f, 0x4d, 0x01, 0x0a, 0x3b, 0x02, 0xa4, 0x61, 0x01, 0x49, 0xf1, 0xff, 0xe7, 0xa2, 0xff, 0x11, 0x56, 0xff, 0xf0, 0x9d, 0xff, 0xd2, 0x2a, 0xff, 0x07, 0x43, 0xff, 0xb5, 0xd5, 0xff, 0xf8, 0x5d, 0xff, 0x79, 0x1b, 0xff, 0x24, 0xfe, 0xfe, 0x2c, 0xa6, 0xfe, 0x2b, 0xca, 0xfe, 0xed, 0xae, 0xfe, 0x74, 0x58, 0xfe, 0x20, 0x39, 0x07, 0x16, 0x5d, 0x07, 0x17, 0xd8, 0x02, 0x32, 0xe9, 0x07, 0x56, 0x4f, 0x05, 0x19, 0x09, 0x01, 0x3f, 0xa3, 0x01, 0x04, 0xdb, 0x01, 0x0e, 0x0b, 0x00, 0xbe, 0x44, 0x00, 0x52, 0x43, 0x03, 0xe4, 0xa3, 0x01, 0x10, 0x0c, 0x02, 0x9a, 0xf3, 0x03, 0x00, 0x57, 0x02, 0xec, 0x05, 0x01, 0x43, 0x32, 0x01, 0x2e, 0xcb, 0xff, 0x73, 0xf2, 0xfe, 0xa8, 0x98, 0xff, 0x72, 0x55, 0xff, 0x56, 0x39, 0xff, 0x6b, 0xbc, 0xfe, 0x5f, 0x1c, 0xff, 0x47, 0xd8, 0xff, 0x62, 0x77, 0xff, 0x6d, 0x2a, 0xff, 0x07, 0xdf, 0xfe, 0x90, 0xb6, 0xfe, 0x54, 0xe1, 0xfe, 0xc9, 0x8e, 0xfe, 0x09, 0x76, 0xfe, 0x35, 0x9c, 0x06, 0xe3, 0xc8, 0x06, 0x05, 0xc5, 0x02, 0x9e, 0x71, 0x07, 0x54, 0x48, 0x06, 0x10, 0x50, 0x02, 0x40, 0x9f, 0x01, 0xb4, 0x1b, 0x02, 0xbb, 0x4f, 0x01, 0x31, 0x6f, 0x01, 0xbd, 0x77, 0x03, 0x45, 0x8c, 0x02, 0x8d, 0x67, 0x02, 0x05, 0xeb, 0x02, 0x93, 0x39, 0x01, 0x2f, 0x93, 0xff, 0xe5, 0xef, 0xff, 0x08, 0xbf, 0xff, 0x10, 0x59, 0xff, 0x23, 0x09, 0xff, 0x8e, 0x8e, 0xfe, 0xe6, 0x01, 0xff, 0x7d, 0x4e, 0xff, 0xef, 0xb5, 0xff, 0x69, 0x93, 0xff, 0xd0, 0x11, 0xff, 0x58, 0x18, 0xff, 0x07, 0x32, 0xff, 0xa3, 0xd8, 0xfe, 0xe0, 0x90, 0xfe, 0xad, 0xaf, 0xfe, 0xd9, 0xe0, 0xfe, 0xed, 0xf4, 0x05, 0xcb, 0xc5, 0x07, 0x4d, 0x5e, 0x04, 0x52, 0xa5, 0x06, 0x2d, 0x17, 0x06, 0x7d, 0xcf, 0x02, 0x08, 0xa6, 0x02, 0x13, 0x85, 0x03, 0x9a, 0xce, 0x01, 0xe9, 0xec, 0x01, 0x54, 0x83, 0x03, 0x91, 0x5f, 0x01, 0x3b, 0xea, 0x00, 0x2e, 0xb0, 0x01, 0x56, 0x1f, 0x00, 0x15, 0x26, 0xff, 0x99, 0x96, 0xff, 0x95, 0x45, 0xff, 0x76, 0xbe, 0xfe, 0xd1, 0xdd, 0xfe, 0x71, 0xf0, 0xfe, 0xa4, 0x37, 0xff, 0x63, 0x7a, 0xff, 0x67, 0x9b, 0xff, 0x64, 0x52, 0xff, 0x32, 0xf2, 0xfe, 0xca, 0x13, 0xff, 0x31, 0xf6, 0xfe, 0x81, 0xd9, 0xfe, 0x05, 0xd9, 0xfe, 0x68, 0xde, 0xfe, 0x4d, 0xfc, 0xfe, 0x79, 0x62, 0x05, 0xaf, 0x0b, 0x08, 0x9a, 0x12, 0x05, 0xc9, 0xd5, 0x06, 0x79, 0x1f, 0x08, 0x4c, 0x0c, 0x05, 0xaa, 0x9f, 0x02, 0x3c, 0xfe, 0x02, 0xbe, 0x0e, 0x02, 0x2e, 0x03, 0x01, 0x71, 0x78, 0x01, 0x6a, 0x60, 0x00, 0xbc, 0x5a, 0x00, 0xaa, 0x28, 0x01, 0xec, 0xf7, 0xff, 0x7e, 0xd1, 0xfe, 0x6f, 0x0e, 0xff, 0x6c, 0xf4, 0xfe, 0xdf, 0xb3, 0xfe, 0xcb, 0x0f, 0xff, 0xec, 0x26, 0xff, 0x18, 0x5c, 0xff, 0x66, 0x63, 0xff, 0xd7, 0x32, 0xff, 0xca, 0x14, 0xff, 0xd6, 0x13, 0xff, 0x1c, 0x34, 0xff, 0x72, 0x0a, 0xff, 0xae, 0xd2, 0xfe, 0xd1, 0xc4, 0xfe, 0xff, 0x01, 0xff, 0x2a, 0x33, 0xff, 0x10, 0xfb, 0x05, 0x5d, 0x99, 0x09, 0x78, 0xb8, 0x06, 0x10, 0xf5, 0x07, 0x72, 0x89, 0x07, 0xb6, 0x7e, 0x04, 0xe5, 0xa1, 0x03, 0xf2, 0xcb, 0x02, 0xf5, 0x26, 0x00, 0x29, 0x25, 0xff, 0xaf, 0x2a, 0x01, 0x4a, 0xd7, 0x00, 0xea, 0x7d, 0xff, 0x1d, 0x71, 0x00, 0x82, 0xf7, 0xff, 0x53, 0x29, 0xfe, 0x7a, 0x15, 0xff, 0xb3, 0x9a, 0xff, 0x8c, 0xbc, 0xfe, 0x96, 0x01, 0xff, 0x73, 0x43, 0xff, 0x4f, 0x36, 0xff, 0x29, 0x65, 0xff, 0x71, 0x3e, 0xff, 0x8e, 0x04, 0xff, 0x7a, 0x1f, 0xff, 0x91, 0x0c, 0xff, 0xae, 0x1c, 0xff, 0x07, 0x19, 0xff, 0xbf, 0xe2, 0xfe, 0x06, 0x0c, 0xff, 0x22, 0x35, 0xff, 0xca, 0x1c, 0x07, 0xde, 0x59, 0x0c, 0x98, 0x4e, 0x08, 0x1b, 0x64, 0x06, 0x15, 0xc9, 0x05, 0xc5, 0xe4, 0x03, 0x8e, 0xdd, 0x02, 0xef, 0x02, 0x02, 0xe2, 0x8c, 0x00, 0x23, 0x2e, 0x00, 0xbc, 0x44, 0x00, 0xe1, 0x53, 0xff, 0xb7, 0xc3, 0xff, 0x61, 0x2f, 0x00, 0x82, 0x4b, 0xff, 0x46, 0xd5, 0xfe, 0x84, 0x3f, 0xff, 0xcd, 0x23, 0xff, 0x46, 0x0d, 0xff, 0x77, 0x4a, 0xff, 0x8a, 0x06, 0xff, 0x28, 0x41, 0xff, 0xfe, 0x2f, 0xff, 0x8a, 0x1e, 0xff, 0x90, 0x25, 0xff, 0x59, 0x12, 0xff, 0x55, 0x12, 0xff, 0x5d, 0x0e, 0xff, 0xaa, 0x1b, 0xff, 0xdf, 0x0a, 0xff, 0x57, 0x3d, 0xff, 0xe3, 0x2c, 0xff, 0x78, 0xd4, 0x07, 0x99, 0x74, 0x0c, 0x6b, 0x86, 0x07, 0xe2, 0x48, 0x05, 0xc7, 0x7e, 0x04, 0x34, 0xbc, 0x03, 0x20, 0xcb, 0x03, 0xb9, 0x4d, 0x02, 0x57, 0xbb, 0x00, 0x52, 0xba, 0x01, 0xe9, 0xbb, 0x00, 0x4b, 0x14, 0xff, 0x1a, 0x11, 0xff, 0x9a, 0x82, 0xff, 0xee, 0x57, 0x00, 0x13, 0x7c, 0xff, 0x9c, 0x65, 0xfe, 0x93, 0x2d, 0xff, 0x32, 0xd5, 0xff, 0x6f, 0x2e, 0xff, 0x56, 0x2f, 0xff, 0xd0, 0x3c, 0xff, 0x61, 0xf8, 0xfe, 0x10, 0x39, 0xff, 0x61, 0x0f, 0xff, 0xda, 0x24, 0xff, 0x74, 0x34, 0xff, 0x92, 0x2d, 0xff, 0x0c, 0x2f, 0xff, 0x94, 0x29, 0xff, 0x95, 0x50, 0xff, 0xb6, 0x4e, 0xff, 0x90, 0x10, 0x07, 0xf2, 0x23, 0x0b, 0xc4, 0x7c, 0x06, 0xf6, 0x66, 0x04, 0x42, 0x3f, 0x04, 0x8f, 0x2b, 0x03, 0x44, 0x0c, 0x03, 0x69, 0xb1, 0x03, 0xe0, 0x36, 0x02, 0xcd, 0xda, 0x01, 0x25, 0x72, 0x02, 0x1c, 0x34, 0x00, 0x5a, 0x4c, 0xff, 0xbf, 0xf6, 0xff, 0x0c, 0x89, 0xff, 0x97, 0x0e, 0xff, 0xbe, 0x9b, 0xff, 0xaf, 0xa0, 0xff, 0x4b, 0x04, 0xff, 0x14, 0x7e, 0xff, 0x8e, 0x9c, 0xff, 0x77, 0xed, 0xfe, 0xd2, 0xcc, 0xfe, 0x8c, 0x2b, 0xff, 0xd3, 0x28, 0xff, 0x3c, 0x35, 0xff, 0x27, 0x53, 0xff, 0xff, 0x57, 0xff, 0x02, 0x62, 0xff, 0xe2, 0x3c, 0xff, 0x04, 0x42, 0xff, 0x11, 0x43, 0xff, 0x02, 0x5c, 0x06, 0x1c, 0x2a, 0x09, 0x90, 0x52, 0x05, 0xa6, 0x95, 0x04, 0x55, 0x9b, 0x03, 0x96, 0x9d, 0x02, 0x74, 0xba, 0x02, 0x75, 0xc6, 0x01, 0x96, 0xcd, 0x01, 0x3e, 0xe2, 0x03, 0xab, 0x83, 0x03, 0x6d, 0x31, 0x02, 0x3c, 0x76, 0x01, 0x1b, 0x2c, 0x00, 0xf9, 0x4f, 0x00, 0x13, 0x9c, 0xff, 0x40, 0xa8, 0xfe, 0x34, 0x4e, 0xff, 0xd5, 0xdf, 0xff, 0xfb, 0x52, 0xff, 0xa4, 0xaf, 0xfe, 0xc1, 0x29, 0xff, 0x28, 0x5b, 0xff, 0xcd, 0xff, 0xfe, 0xaa, 0x25, 0xff, 0xd0, 0x6d, 0xff, 0x75, 0x78, 0xff, 0x9d, 0x7d, 0xff, 0xd6, 0x3a, 0xff, 0x92, 0x22, 0xff, 0xc6, 0x17, 0xff, 0xa7, 0x3d, 0xff, 0x0b, 0x48, 0x05, 0xa7, 0xae, 0x06, 0x9b, 0x53, 0x03, 0x9d, 0x84, 0x04, 0x0e, 0xb5, 0x04, 0x8d, 0xa2, 0x03, 0x71, 0x47, 0x01, 0x00, 0x95, 0xff, 0x9c, 0xc6, 0x01, 0xbb, 0x48, 0x03, 0xa3, 0xf6, 0x02, 0x52, 0xd2, 0x03, 0xf2, 0xbc, 0x03, 0xeb, 0x04, 0x03, 0x01, 0x89, 0x02, 0x3b, 0x45, 0x00, 0x62, 0x97, 0xff, 0x4e, 0xb4, 0xff, 0x41, 0xbe, 0xfe, 0xcc, 0xf8, 0xfe, 0x50, 0xa5, 0xff, 0x6a, 0x39, 0xff, 0x76, 0xe3, 0xfe, 0xd5, 0x63, 0xff, 0x78, 0x9a, 0xff, 0x20, 0x6e, 0xff, 0x42, 0x41, 0xff, 0xee, 0x9e, 0xff, 0x17, 0x85, 0xff, 0x77, 0x2e, 0xff, 0x72, 0x2a, 0xff, 0x1d, 0x2d, 0xff, 0xd2, 0x0b, 0x06, 0xe6, 0x8d, 0x07, 0xd0, 0x49, 0x02, 0x85, 0xe3, 0x02, 0x04, 0x0d, 0x04, 0xa5, 0x4d, 0x03, 0x37, 0x2d, 0x01, 0x73, 0x8c, 0xff, 0x96, 0x4b, 0x01, 0x7d, 0x88, 0x02, 0x7f, 0xab, 0x01, 0xd6, 0x15, 0x02, 0x8e, 0x5e, 0x03, 0x00, 0x38, 0x04, 0xe8, 0x28, 0x04, 0x18, 0x24, 0x02, 0x13, 0x20, 0x01, 0x82, 0x94, 0x00, 0x7a, 0x99, 0xff, 0xa9, 0x2b, 0xff, 0x57, 0xa2, 0xfe, 0xaa, 0x25, 0xff, 0xac, 0xb6, 0xff, 0x78, 0x3e, 0xff, 0x12, 0x04, 0xff, 0x8a, 0xb4, 0xff, 0xaa, 0xcc, 0xff, 0x35, 0x63, 0xff, 0x5a, 0x32, 0xff, 0xc2, 0x12, 0xff, 0x49, 0x58, 0xff, 0x78, 0x4a, 0xff, 0x12, 0x95, 0x06, 0x80, 0x32, 0x08, 0xfc, 0xcb, 0x02, 0xba, 0x33, 0x03, 0x1c, 0x09, 0x04, 0x33, 0x21, 0x03, 0xe3, 0x6a, 0x00, 0x94, 0xe3, 0xfe, 0x43, 0x10, 0x02, 0xcc, 0xe0, 0x02, 0x3d, 0x19, 0x00, 0xa3, 0xa1, 0x00, 0xf2, 0x9d, 0x01, 0x31, 0x22, 0x02, 0x70, 0x83, 0x03, 0xe6, 0xc2, 0x02, 0x7e, 0x65, 0x02, 0x95, 0x8c, 0x02, 0x04, 0xf8, 0x00, 0x83, 0xbc, 0xff, 0xba, 0x77, 0xff, 0xdb, 0xfc, 0xfe, 0xd1, 0xd8, 0xfe, 0xaa, 0x35, 0xff, 0xb8, 0x83, 0xff, 0x3d, 0x79, 0xff, 0xab, 0x2f, 0xff, 0x8b, 0xa2, 0xff, 0xd6, 0xa4, 0xff, 0xe4, 0xe2, 0xfe, 0x61, 0x17, 0xff, 0x8c, 0x7c, 0xff, 0x85, 0x98, 0x07, 0x9c, 0x21, 0x09, 0x87, 0x89, 0x02, 0x90, 0xba, 0x03, 0xc3, 0x05, 0x05, 0x52, 0xf7, 0x02, 0x2c, 0x6a, 0xff, 0x06, 0x36, 0xfe, 0x2b, 0xa8, 0x02, 0x01, 0xce, 0x02, 0x49, 0x78, 0xff, 0xb1, 0x68, 0x00, 0xaa, 0xde, 0x00, 0x15, 0x2a, 0x01, 0xa7, 0xa6, 0x01, 0xe3, 0xac, 0x00, 0x56, 0xe8, 0x01, 0xe4, 0xf0, 0x02, 0x94, 0xd6, 0x01, 0x74, 0x82, 0x01, 0x5e, 0xaa, 0x00, 0x80, 0x5c, 0xff, 0xc6, 0x9d, 0xff, 0xdf, 0x28, 0xff, 0x5a, 0xd6, 0xfe, 0xfb, 0x97, 0xff, 0x8a, 0xa5, 0xff, 0xdb, 0x50, 0xff, 0xca, 0x05, 0xff, 0x83, 0x3f, 0xff, 0x63, 0x5c, 0xff, 0x3e, 0x30, 0xff, 0xb0, 0x8b, 0x08, 0x2d, 0xba, 0x0a, 0x23, 0xd2, 0x02, 0x8c, 0x83, 0x03, 0xb6, 0x39, 0x05, 0xeb, 0xf9, 0x02, 0x96, 0xac, 0xfe, 0xf8, 0x15, 0xfe, 0x98, 0x5a, 0x03, 0xdc, 0x2f, 0x02, 0x3e, 0xac, 0xfe, 0xb1, 0x83, 0x00, 0x18, 0xb1, 0x00, 0x9f, 0xeb, 0x00, 0xc3, 0x6e, 0x01, 0xf5, 0x8e, 0xff, 0xe9, 0x38, 0x00, 0xdd, 0x9a, 0x01, 0xc6, 0x5d, 0x01, 0x7d, 0x9b, 0x01, 0x79, 0x59, 0x01, 0xfe, 0xfe, 0x00, 0x48, 0x81, 0x00, 0x35, 0xa4, 0xff, 0xb2, 0x95, 0xff, 0x99, 0xb8, 0xff, 0x92, 0x38, 0xff, 0xa9, 0x5b, 0xff, 0xbb, 0x5b, 0xff, 0xe1, 0xd6, 0xfe, 0x07, 0xf9, 0xfe, 0x58, 0x5f, 0xff, 0x2b, 0x91, 0x09, 0xf1, 0xfc, 0x0b, 0x64, 0xe1, 0x02, 0xd3, 0xe0, 0x03, 0x1b, 0xf2, 0x05, 0x07, 0x96, 0x02, 0xb0, 0x51, 0xfd, 0x40, 0x31, 0xfe, 0x0c, 0x39, 0x04, 0x54, 0x8c, 0x01, 0x14, 0x2f, 0xfe, 0xd7, 0x65, 0x00, 0xf8, 0x5c, 0x00, 0xa8, 0xb6, 0x00, 0xa6, 0x71, 0x01, 0x13, 0x64, 0xff, 0x86, 0xb5, 0xff, 0xab, 0xcf, 0x00, 0x20, 0xfc, 0xff, 0xf7, 0x56, 0x00, 0xb6, 0xc3, 0x00, 0x03, 0x04, 0x01, 0x01, 0x37, 0x01, 0x00, 0xe2, 0x00, 0xb2, 0x7f, 0x00, 0xb4, 0x2d, 0x00, 0xac, 0xf9, 0xff, 0xce, 0x8b, 0xff, 0x0c, 0xd6, 0xfe, 0xf7, 0xcf, 0xfe, 0xac, 0x2c, 0xff, 0xcf, 0x0c, 0xff, 0x24, 0x28, 0x0b, 0xe9, 0xd2, 0x0d, 0x9d, 0xaa, 0x02, 0x3e, 0x85, 0x03, 0x71, 0x48, 0x06, 0xbe, 0x25, 0x02, 0x35, 0x84, 0xfc, 0x2f, 0xc0, 0xfe, 0xc9, 0x63, 0x04, 0x13, 0x97, 0x00, 0xa4, 0xf0, 0xfd, 0x60, 0x83, 0x00, 0x06, 0x26, 0x00, 0xbc, 0x82, 0x00, 0x7a, 0x42, 0x01, 0x54, 0x30, 0xff, 0x33, 0x9c, 0xff, 0xe2, 0x95, 0x00, 0xbe, 0x75, 0xff, 0x4d, 0xc0, 0xff, 0xc2, 0x8f, 0xff, 0x30, 0xdf, 0xff, 0x5f, 0xb9, 0x00, 0x72, 0xa6, 0x00, 0x9b, 0x49, 0x01, 0xf7, 0x8d, 0x01, 0xfe, 0x87, 0x00, 0xf8, 0xe3, 0xff, 0x77, 0x86, 0xff, 0x85, 0xcc, 0xfe, 0x81, 0xc0, 0xfe, 0xb1, 0x27, 0xff, 0xbb, 0x71, 0x0c, 0xa6, 0x53, 0x0f, 0xd1, 0xc5, 0x02, 0x0d, 0xac, 0x03, 0x87, 0xd8, 0x06, 0x67, 0x88, 0x01, 0x93, 0x30, 0xfb, 0x11, 0xa0, 0xff, 0x73, 0x20, 0x05, 0x60, 0x58, 0xff, 0x0b, 0xac, 0xfd, 0x4f, 0xbc, 0x00, 0xdf, 0xba, 0xff, 0xe8, 0x6a, 0x00, 0x85, 0x67, 0x01, 0xff, 0x06, 0xff, 0xf9, 0x61, 0xff, 0x71, 0x75, 0x00, 0xb1, 0x56, 0xff, 0x31, 0x89, 0xff, 0xa4, 0x1d, 0xff, 0x70, 0x56, 0xff, 0x80, 0x9d, 0xff, 0x0a, 0xab, 0xff, 0xe0, 0xf9, 0x00, 0x48, 0x89, 0x01, 0x0d, 0x54, 0x01, 0x47, 0xe3, 0x00, 0x81, 0xf0, 0xff, 0xe9, 0x62, 0xff, 0x33, 0x83, 0xff, 0xf2, 0x06, 0xff, 0x71, 0x01, 0x0e, 0xfe, 0xd8, 0x10, 0xf8, 0x78, 0x02, 0xf2, 0x00, 0x04, 0xc2, 0x87, 0x07, 0xb8, 0x51, 0x00, 0xfc, 0xf5, 0xf9, 0x0d, 0x0f, 0x01, 0x60, 0x5e, 0x05, 0x70, 0xf9, 0xfd, 0x48, 0x8c, 0xfd, 0x3f, 0xda, 0x00, 0x6d, 0xa1, 0xff, 0x77, 0x12, 0x00, 0x84, 0x3e, 0x01, 0x5c, 0xfb, 0xfe, 0x7c, 0x39, 0xff, 0xba, 0x66, 0x00, 0x3a, 0x35, 0xff, 0x72, 0x51, 0xff, 0xf5, 0xcd, 0xfe, 0xa9, 0xfc, 0xfe, 0x18, 0x47, 0xff, 0x3d, 0x1a, 0xff, 0x5e, 0x22, 0x00, 0xea, 0xd4, 0x00, 0x4d, 0xcd, 0x00, 0xe7, 0xc3, 0x00, 0xe9, 0xce, 0x00, 0xa0, 0x21, 0x00, 0xce, 0xcf, 0xff, 0x85, 0x7c, 0xff, 0x46, 0x33, 0x0f, 0x00, 0x1a, 0x12, 0x9a, 0xe2, 0x02, 0x08, 0x6f, 0x04, 0xe8, 0x0b, 0x08, 0x9b, 0x7c, 0xff, 0x19, 0x74, 0xf8, 0xb0, 0x6c, 0x02, 0xf4, 0x2c, 0x06, 0x58, 0x6a, 0xfc, 0xfd, 0x4d, 0xfd, 0x07, 0x2e, 0x01, 0xe8, 0x93, 0xff, 0x09, 0xd4, 0xff, 0xad, 0x16, 0x01, 0xd5, 0x01, 0xff, 0x42, 0xe7, 0xfe, 0x2f, 0x6f, 0x00, 0x32, 0x5c, 0xff, 0x55, 0x13, 0xff, 0x83, 0x90, 0xfe, 0x01, 0xe8, 0xfe, 0xf5, 0x0d, 0xff, 0xb5, 0xcd, 0xfe, 0x8c, 0xd6, 0xff, 0x25, 0x36, 0x00, 0xeb, 0x43, 0x00, 0xfe, 0x42, 0x00, 0x70, 0x4d, 0x00, 0x16, 0x26, 0x00, 0x2e, 0x68, 0x00, 0x1a, 0x0f, 0x00, 0xc0, 0x4d, 0x10, 0x12, 0xb5, 0x13, 0x19, 0x50, 0x03, 0x82, 0x80, 0x04, 0x32, 0x7a, 0x08, 0x43, 0x1b, 0xff, 0xfc, 0x10, 0xf7, 0xa4, 0x67, 0x03, 0x16, 0xe3, 0x06, 0x6d, 0x08, 0xfb, 0xd0, 0x49, 0xfd, 0xe3, 0x79, 0x01, 0x07, 0x5e, 0xff, 0x26, 0xad, 0xff, 0x84, 0xd8, 0x00, 0x4a, 0x3c, 0xff, 0x1f, 0xd9, 0xfe, 0x2f, 0x00, 0x00, 0x7d, 0x78, 0xff, 0xa2, 0xf9, 0xfe, 0x27, 0x74, 0xfe, 0x53, 0x02, 0xff, 0x91, 0xc8, 0xfe, 0xaf, 0x82, 0xfe, 0xec, 0x93, 0xff, 0x1a, 0x03, 0x00, 0x4b, 0x37, 0x00, 0x25, 0xc4, 0xff, 0x35, 0x9f, 0xff, 0xf1, 0x8c, 0xff, 0x7b, 0x07, 0x00, 0x9f, 0x5b, 0x00, 0x24, 0x19, 0x12, 0x11, 0xb8, 0x15, 0x0b, 0x61, 0x02, 0xa6, 0xe2, 0x04, 0x19, 0xed, 0x08, 0x5c, 0xdf, 0xfd, 0x60, 0x05, 0xf7, 0x3b, 0x0b, 0x04, 0x82, 0x9b, 0x06, 0x78, 0x43, 0xfa, 0xb1, 0x68, 0xfd, 0xa7, 0xa3, 0x01, 0x57, 0x2a, 0xff, 0x95, 0x57, 0xff, 0x92, 0xd1, 0x00, 0x9f, 0x80, 0xff, 0xe8, 0x8a, 0xfe, 0xac, 0xaa, 0xff, 0x09, 0x88, 0xff, 0x03, 0xe8, 0xfe, 0xfb, 0x4c, 0xfe, 0x9b, 0xfc, 0xfe, 0x99, 0x84, 0xfe, 0x0c, 0x52, 0xfe, 0xe9, 0xbb, 0xff, 0xe9, 0xc0, 0xff, 0xcd, 0xf5, 0xff, 0x00, 0x86, 0xff, 0xf8, 0x2b, 0xff, 0x4e, 0x5a, 0xff, 0x31, 0xa7, 0xff, 0x73, 0x95, 0xff, 0xdb, 0x72, 0x13, 0xbf, 0x37, 0x17, 0x18, 0x41, 0x02, 0x4f, 0x82, 0x05, 0x2e, 0x31, 0x09, 0x6b, 0xf5, 0xfc, 0xd1, 0xae, 0xf6, 0x13, 0x45, 0x04, 0x75, 0xe6, 0x06, 0xb8, 0x95, 0xf9, 0x01, 0x10, 0xfd, 0xf6, 0xe4, 0x01, 0x07, 0x10, 0xff, 0x2c, 0x12, 0xff, 0x58, 0xd1, 0x00, 0xfe, 0xa5, 0xff, 0x16, 0x31, 0xfe, 0x34, 0x5d, 0xff, 0x14, 0xa9, 0xff, 0x92, 0x01, 0xff, 0x69, 0xeb, 0xfd, 0x7a, 0x9a, 0xfe, 0x38, 0x9b, 0xfe, 0xe5, 0x4b, 0xfe, 0xf2, 0x9f, 0xff, 0xe6, 0xb0, 0xff, 0x14, 0x88, 0xff, 0x5b, 0x68, 0xff, 0x41, 0x24, 0xff, 0xeb, 0x07, 0xff, 0xf4, 0x56, 0xff, 0x52, 0x34, 0xff, 0x6b, 0x13, 0x14, 0xdf, 0x4b, 0x18, 0xcf, 0xd9, 0x02, 0x61, 0x95, 0x06, 0x89, 0x83, 0x09, 0x97, 0x05, 0xfc, 0xad, 0x6d, 0xf6, 0xbf, 0x29, 0x04, 0xb4, 0x34, 0x07, 0x30, 0x71, 0xf9, 0xc8, 0x4d, 0xfc, 0x84, 0xf8, 0x01, 0x7f, 0x5c, 0xff, 0x8b, 0xde, 0xfe, 0x4c, 0x63, 0x00, 0x61, 0xec, 0xff, 0x31, 0x2c, 0xfe, 0x52, 0xe8, 0xfe, 0x22, 0xde, 0xff, 0x1e, 0xb9, 0xfe, 0x83, 0x8d, 0xfd, 0xb1, 0xa6, 0xfe, 0xa1, 0x9a, 0xfe, 0xd5, 0x41, 0xfe, 0x9c, 0x21, 0xff, 0x0a, 0x60, 0xff, 0xdc, 0xff, 0xff, 0x13, 0x5c, 0xff, 0x2d, 0xb1, 0xfe, 0xe5, 0xc3, 0xfe, 0x99, 0x56, 0xff, 0x8f, 0x09, 0xff, 0x28, 0x99, 0x14, 0x4c, 0x28, 0x19, 0xf7, 0x10, 0x04, 0xd5, 0x16, 0x07, 0x11, 0x26, 0x09, 0x70, 0x85, 0xfc, 0xfa, 0x7c, 0xf6, 0xa2, 0xf5, 0x02, 0xfa, 0x5e, 0x07, 0xee, 0xc1, 0xf9, 0xa6, 0x71, 0xfb, 0x0e, 0x57, 0x02, 0x1d, 0x8c, 0xff, 0xd3, 0x46, 0xfe, 0xa5, 0x42, 0x00, 0x37, 0xf6, 0xff, 0x40, 0xd1, 0xfe, 0x96, 0x93, 0xfe, 0x95, 0xf8, 0xfe, 0x86, 0xf3, 0xfe, 0x05, 0x74, 0xfd, 0x80, 0x6a, 0xfe, 0xe4, 0xae, 0xfe, 0x52, 0xfc, 0xfd, 0x2a, 0xba, 0xfe, 0x5e, 0x6a, 0xff, 0x54, 0x0c, 0x00, 0x50, 0x6a, 0xff, 0x0e, 0xa3, 0xfe, 0x72, 0x9c, 0xfe, 0x55, 0xe1, 0xfe, 0x59, 0x76, 0xfe, 0x6d, 0x42, 0x15, 0x1c, 0x4a, 0x19, 0xe1, 0xaa, 0x05, 0x96, 0xb4, 0x07, 0xc7, 0x14, 0x08, 0x84, 0x24, 0xfe, 0x16, 0xc6, 0xf6, 0x03, 0x21, 0x01, 0x93, 0x0a, 0x07, 0xb0, 0x8c, 0xfa, 0x90, 0x31, 0xfb, 0x0f, 0xd7, 0x01, 0x97, 0xe7, 0xff, 0xb2, 0xf4, 0xfd, 0x01, 0xbc, 0xff, 0xe8, 0x7c, 0x00, 0x7e, 0x58, 0xff, 0x24, 0xfb, 0xfd, 0x32, 0x62, 0xfe, 0xd6, 0x22, 0xff, 0xb8, 0x59, 0xfd, 0xca, 0x30, 0xfe, 0xeb, 0x05, 0xfe, 0xbb, 0x0b, 0xfe, 0x07, 0x1e, 0xff, 0xb3, 0xeb, 0xfe, 0x21, 0xea, 0xff, 0xdf, 0xa9, 0xff, 0xc1, 0xc2, 0xfe, 0x68, 0x10, 0xfe, 0x34, 0x63, 0xfe, 0xec, 0x72, 0xfe, 0x99, 0x46, 0x16, 0xc8, 0x25, 0x18, 0xe4, 0xa5, 0x06, 0xe2, 0x06, 0x0a, 0xf6, 0x75, 0x07, 0xea, 0x76, 0xfe, 0xd3, 0xc3, 0xf6, 0x3e, 0xb1, 0x00, 0xd5, 0xdc, 0x05, 0x4c, 0xcf, 0xfa, 0x10, 0xf4, 0xfb, 0xb5, 0x75, 0x00, 0x0a, 0xd5, 0xff, 0xc5, 0xa5, 0xfe, 0x7f, 0xf5, 0xfe, 0xbe, 0x56, 0x00, 0x22, 0x05, 0x00, 0x36, 0x9e, 0xfd, 0xba, 0xf0, 0xfd, 0xb9, 0x7b, 0xff, 0xb8, 0xb3, 0xfc, 0xdc, 0x7c, 0xfd, 0x0f, 0xcb, 0xfd, 0x54, 0x2d, 0xfe, 0x2b, 0x1a, 0xff, 0x01, 0x9d, 0xfe, 0x10, 0xc0, 0xff, 0x6b, 0xee, 0xff, 0xaf, 0x6b, 0xfe, 0x43, 0x8b, 0xfd, 0x39, 0x8c, 0xfe, 0xf4, 0xa5, 0xfd, 0xff, 0x52, 0x17, 0xea, 0x08, 0x16, 0xbe, 0x72, 0x06, 0x08, 0xb0, 0x0e, 0xd2, 0xc7, 0x08, 0xd2, 0x57, 0xfc, 0x04, 0x5f, 0xf6, 0x8a, 0x61, 0x03, 0xc8, 0xc7, 0x03, 0x57, 0x5b, 0xf9, 0x1f, 0x91, 0xfe, 0xe3, 0x3e, 0xff, 0x27, 0xcc, 0xfe, 0x31, 0x60, 0x00, 0x65, 0x0c, 0xfe, 0x11, 0xb4, 0xff, 0x51, 0x44, 0x01, 0xf9, 0x8e, 0xfd, 0x3b, 0xde, 0xfd, 0xc4, 0xa7, 0xff, 0x00, 0xfa, 0xfb, 0x75, 0x49, 0xfd, 0x96, 0xae, 0xfd, 0xb1, 0xd2, 0xfd, 0x68, 0x4f, 0xff, 0x67, 0x7c, 0xfe, 0x77, 0xcb, 0xff, 0xaf, 0x69, 0xff, 0xd7, 0xc0, 0xfe, 0x71, 0xb0, 0xfd, 0x10, 0xd6, 0xfd, 0x05, 0xcf, 0xfd, 0x3c, 0xc2, 0x19, 0x23, 0x93, 0x14, 0x9a, 0x83, 0x03, 0xc5, 0x68, 0x13, 0x44, 0x9f, 0x0a, 0x66, 0xc4, 0xf8, 0x70, 0x8d, 0xf7, 0x70, 0x6d, 0x06, 0xbf, 0xf4, 0xff, 0x94, 0xb0, 0xf7, 0x16, 0xeb, 0x01, 0xee, 0xc5, 0xfe, 0xf8, 0xb1, 0xfc, 0x9b, 0x43, 0x01, 0x09, 0x33, 0xfe, 0xf5, 0xe1, 0xfe, 0x2b, 0x2c, 0x02, 0x3c, 0x75, 0xfd, 0x97, 0x8e, 0xfd, 0xd0, 0xc4, 0xff, 0xcf, 0xe1, 0xfb, 0x66, 0xea, 0xfc, 0x9f, 0xbd, 0xfc, 0x1e, 0xc6, 0xfd, 0x05, 0xc1, 0xff, 0xfe, 0x07, 0xfe, 0xd5, 0x1a, 0xff, 0x11, 0x98, 0xff, 0x27, 0x97, 0xfe, 0x8a, 0xa0, 0xfd, 0x79, 0x3c, 0xfe, 0x22, 0x51, 0xfd, 0xc8, 0xcf, 0x1c, 0xb6, 0x7a, 0x14, 0x23, 0x43, 0xff, 0x49, 0xf1, 0x15, 0x99, 0xd4, 0x0d, 0x1c, 0xec, 0xf5, 0x52, 0x5c, 0xf8, 0x9e, 0xd8, 0x09, 0x37, 0x3f, 0xfc, 0x13, 0x53, 0xf5, 0x6e, 0x71, 0x05, 0xea, 0x6d, 0xff, 0x81, 0x1d, 0xfa, 0xb1, 0x5b, 0x01, 0x22, 0x82, 0xff, 0x72, 0xb8, 0xfd, 0x51, 0xb1, 0x02, 0x0b, 0xfc, 0xfd, 0x05, 0x03, 0xfd, 0xb2, 0x10, 0x00, 0x77, 0x06, 0xfc, 0xa9, 0x54, 0xfc, 0x28, 0x2d, 0xfc, 0xab, 0xf8, 0xfd, 0xf9, 0x8c, 0xff, 0xb8, 0x78, 0xfd, 0x2f, 0xaf, 0xfe, 0xc1, 0xbb, 0xff, 0xfc, 0x86, 0xfe, 0x46, 0xdc, 0xfd, 0x32, 0x5d, 0xfe, 0x56, 0xed, 0xfc, 0xb4, 0x5f, 0x1f, 0xae, 0x1d, 0x16, 0x08, 0x5a, 0xfa, 0x76, 0x15, 0x16, 0xaa, 0x7b, 0x12, 0x16, 0x55, 0xf4, 0x98, 0x31, 0xf8, 0xb7, 0x79, 0x0d, 0x53, 0xaa, 0xf9, 0x29, 0xaa, 0xf1, 0xff, 0x70, 0x08, 0x99, 0xad, 0x01, 0x8f, 0xe2, 0xf7, 0xf2, 0xdc, 0xff, 0x12, 0x52, 0x01, 0xaf, 0x5f, 0xfd, 0xaa, 0x60, 0x02, 0x6e, 0x1c, 0xff, 0xac, 0x5c, 0xfc, 0x1a, 0x52, 0x00, 0xc9, 0x21, 0xfc, 0xc1, 0x5d, 0xfc, 0xb5, 0xe9, 0xfb, 0xd2, 0x37, 0xfd, 0xbb, 0x6a, 0xff, 0xf1, 0x46, 0xfd, 0xbc, 0x4b, 0xfe, 0x6b, 0x85, 0xff, 0x89, 0x0b, 0xff, 0xa8, 0xb3, 0xfd, 0xb8, 0xab, 0xfe, 0xd5, 0x39, 0xfd, 0x27, 0x01, 0x22, 0x6f, 0xff, 0x17, 0xda, 0xe7, 0xf5, 0x5c, 0x4a, 0x14, 0xf2, 0xd2, 0x16, 0x9d, 0x0e, 0xf4, 0x75, 0x88, 0xf7, 0xa1, 0x01, 0x11, 0x0a, 0xc3, 0xf7, 0x69, 0x4d, 0xed, 0x81, 0x2c, 0x0a, 0xf9, 0xd8, 0x04, 0xea, 0xa0, 0xf6, 0x22, 0x3a, 0xfd, 0xd5, 0x3a, 0x02, 0x65, 0x23, 0xfe, 0xec, 0xa2, 0x01, 0xa5, 0x02, 0x00, 0xca, 0x1b, 0xfc, 0x8a, 0xdc, 0xff, 0xba, 0xb2, 0xfc, 0x52, 0x38, 0xfc, 0xa0, 0x76, 0xfb, 0x49, 0xac, 0xfc, 0xd7, 0xc0, 0xfe, 0xdc, 0x11, 0xfd, 0x75, 0x76, 0xfe, 0x0e, 0x0f, 0xff, 0x7c, 0x18, 0xff, 0xe5, 0xdb, 0xfd, 0x45, 0x12, 0xff, 0xcb, 0xa3, 0xfd, 0xcd, 0x9e, 0x25, 0xc7, 0xf3, 0x18, 0x83, 0x3a, 0xf2, 0x13, 0x2c, 0x12, 0xd7, 0x5e, 0x19, 0x1e, 0xb0, 0xf4, 0x6b, 0xa0, 0xf7, 0xd5, 0x80, 0x14, 0x17, 0xb3, 0xf5, 0x45, 0x92, 0xe9, 0xe8, 0x96, 0x0a, 0x90, 0x11, 0x08, 0x5b, 0xda, 0xf6, 0x91, 0x5d, 0xfa, 0xfe, 0xed, 0x01, 0x88, 0x78, 0xff, 0x8b, 0x79, 0x01, 0xd5, 0x4c, 0x00, 0x21, 0x79, 0xfc, 0x36, 0x28, 0xff, 0x84, 0x3d, 0xfd, 0xb5, 0xd8, 0xfb, 0x9f, 0x31, 0xfb, 0x98, 0x55, 0xfc, 0x1f, 0x03, 0xfe, 0x8b, 0x20, 0xfd, 0xc9, 0x66, 0xfe, 0x76, 0x19, 0xff, 0xba, 0xc2, 0xfe, 0xb4, 0x48, 0xfe, 0x44, 0x79, 0xff, 0xa1, 0xa5, 0xfd, 0x0a, 0x83, 0x29, 0xec, 0xaa, 0x19, 0xcc, 0xdc, 0xee, 0x33, 0x79, 0x10, 0xdb, 0xe7, 0x19, 0x36, 0xc1, 0xf5, 0x23, 0xbb, 0xf8, 0xab, 0xc5, 0x17, 0xf9, 0xc6, 0xf3, 0x55, 0x9b, 0xe6, 0x51, 0xc3, 0x09, 0xd3, 0xa7, 0x0a, 0x06, 0x7f, 0xf8, 0x14, 0xdf, 0xf7, 0x28, 0x94, 0x00, 0x54, 0x7d, 0x00, 0x70, 0x51, 0x02, 0xb5, 0x1b, 0x00, 0xad, 0x1d, 0xfd, 0x57, 0xbd, 0xfe, 0xb0, 0xc7, 0xfc, 0xa6, 0x1f, 0xfc, 0xf2, 0xc9, 0xfa, 0x47, 0xea, 0xfb, 0x8f, 0xfc, 0xfd, 0x8a, 0xd5, 0xfc, 0x91, 0x25, 0xfe, 0x1d, 0xb8, 0xff, 0x4c, 0xa1, 0xfe, 0x15, 0x1c, 0xfe, 0x56, 0xc7, 0xff, 0xa9, 0xc2, 0xfd, 0xfb, 0xae, 0x2e, 0x53, 0xd5, 0x18, 0x88, 0xbc, 0xeb, 0x93, 0x10, 0x10, 0x61, 0x93, 0x18, 0xd9, 0x84, 0xf5, 0x39, 0x9d, 0xfb, 0x49, 0xea, 0x1a, 0x99, 0xd6, 0xf0, 0xad, 0xf3, 0xe4, 0x8d, 0x8f, 0x08, 0xef, 0xda, 0x0b, 0x33, 0x8b, 0xfa, 0x32, 0x76, 0xf6, 0xba, 0xab, 0xfe, 0x49, 0x9e, 0x00, 0xee, 0xe7, 0x03, 0x50, 0xdc, 0xff, 0x35, 0xce, 0xfd, 0x8b, 0xed, 0xfd, 0xad, 0xfc, 0xfb, 0x48, 0xcc, 0xfc, 0x24, 0xd9, 0xf9, 0xf2, 0x56, 0xfc, 0xa8, 0x84, 0xfd, 0xcc, 0x5b, 0xfc, 0xfa, 0x94, 0xfe, 0xc0, 0x22, 0x00, 0x82, 0x86, 0xfe, 0xc6, 0xb5, 0xfd, 0x13, 0xac, 0xff, 0x04, 0x00, 0xfe, 0x82, 0x97, 0x33, 0x2c, 0x86, 0x18, 0xcc, 0x69, 0xe8, 0x9f, 0x89, 0x10, 0x88, 0x60, 0x16, 0xe2, 0xa7, 0xf4, 0x8b, 0xfc, 0xfe, 0x35, 0x2e, 0x1e, 0x56, 0xba, 0xee, 0x09, 0x56, 0xe3, 0x2a, 0x6b, 0x07, 0xce, 0x56, 0x0c, 0x8b, 0x6d, 0xfc, 0x1c, 0x3d, 0xf6, 0x7c, 0xd3, 0xfc, 0xa5, 0xe2, 0xff, 0xa0, 0xba, 0x05, 0xc7, 0x5e, 0x00, 0x66, 0xf5, 0xfd, 0xbd, 0x29, 0xfd, 0x30, 0x88, 0xfb, 0x87, 0x12, 0xfd, 0x4e, 0xbd, 0xf9, 0x5d, 0x8c, 0xfc, 0x03, 0xdb, 0xfc, 0x2f, 0x7b, 0xfc, 0x65, 0xf1, 0xfe, 0x31, 0xa0, 0x00, 0x2c, 0x70, 0xfe, 0x0f, 0xf4, 0xfc, 0x46, 0xab, 0xff, 0x32, 0x88, 0xfe, 0xf5, 0x62, 0x39, 0x4b, 0xfd, 0x18, 0x19, 0x09, 0xe3, 0xbc, 0x0d, 0x10, 0x23, 0xe4, 0x15, 0x5b, 0xcf, 0xf4, 0xe7, 0x7c, 0x00, 0xed, 0x59, 0x1f, 0x75, 0x76, 0xee, 0x3f, 0x83, 0xe2, 0x00, 0x90, 0x06, 0xf2, 0x1c, 0x0c, 0xe1, 0xda, 0xfc, 0xe8, 0xe5, 0xf6, 0x3f, 0xe2, 0xfb, 0x17, 0x85, 0xfe, 0x0b, 0x63, 0x07, 0xfc, 0x3a, 0x01, 0x48, 0xcb, 0xfc, 0xda, 0x47, 0xfd, 0xa3, 0x79, 0xfb, 0x8a, 0xa8, 0xfc, 0x3f, 0x09, 0xfa, 0xe8, 0x31, 0xfc, 0x03, 0xf6, 0xfc, 0x5d, 0xce, 0xfc, 0xc0, 0xcd, 0xfe, 0x5e, 0x10, 0x01, 0x27, 0x3b, 0xfe, 0x00, 0x4d, 0xfc, 0x8e, 0xd7, 0xff, 0x3f, 0x06, 0xff, 0x14, 0x9a, 0x3e, 0x4f, 0x40, 0x1a, 0x57, 0x77, 0xdd, 0xe8, 0xd6, 0x0f, 0x62, 0x6a, 0x15, 0xa7, 0xcc, 0xf4, 0xa1, 0x0d, 0x01, 0xeb, 0x44, 0x20, 0xd5, 0xdb, 0xef, 0x89, 0x09, 0xe1, 0x04, 0xfd, 0x05, 0xce, 0x1c, 0x0c, 0x16, 0x43, 0xfc, 0x6c, 0xe5, 0xf7, 0xe1, 0x0b, 0xfc, 0xff, 0x6d, 0xfc, 0x28, 0x82, 0x08, 0x91, 0x89, 0x02, 0x99, 0x2a, 0xfb, 0x39, 0x21, 0xfe, 0x8b, 0x7f, 0xfb, 0xc9, 0x0d, 0xfc, 0x7f, 0x87, 0xfa, 0xd7, 0xed, 0xfb, 0x84, 0x41, 0xfd, 0x29, 0x09, 0xfd, 0xa5, 0xcb, 0xfe, 0xfb, 0x18, 0x01, 0x37, 0xfd, 0xfd, 0x72, 0x06, 0xfc, 0x9e, 0x46, 0x00, 0x38, 0x14, 0xff, 0xb9, 0x9b, 0x43, 0x64, 0xdc, 0x1a, 0x87, 0x31, 0xd9, 0x52, 0xeb, 0x0f, 0xd5, 0x93, 0x14, 0x3b, 0x3b, 0xf4, 0x98, 0xe5, 0x00, 0x0d, 0x47, 0x21, 0x3c, 0x52, 0xf2, 0x4f, 0x4b, 0xdf, 0x77, 0x52, 0x05, 0x05, 0x4d, 0x0c, 0xd3, 0x41, 0xfb, 0x6b, 0x0c, 0xf9, 0x31, 0xc7, 0xfc, 0x52, 0x19, 0xfa, 0xa7, 0xd8, 0x08, 0x18, 0xe4, 0x03, 0xa1, 0x16, 0xfa, 0x2d, 0x0a, 0xff, 0x23, 0x6c, 0xfb, 0x9d, 0x98, 0xfb, 0x58, 0x42, 0xfb, 0xd7, 0xaf, 0xfb, 0x59, 0x47, 0xfd, 0xfc, 0x72, 0xfd, 0xee, 0xb5, 0xfe, 0x8e, 0xf6, 0x00, 0xc9, 0xb0, 0xfd, 0xe0, 0xef, 0xfb, 0x5c, 0x06, 0x01, 0x10, 0x6d, 0xfe, 0xef, 0x93, 0x46, 0x31, 0xe8, 0x1c, 0xed, 0xf4, 0xd5, 0xaf, 0xc0, 0x0f, 0x61, 0x6d, 0x13, 0x41, 0x90, 0xf3, 0x46, 0xf6, 0xfe, 0x3c, 0xb1, 0x22, 0xfd, 0x1d, 0xf6, 0x96, 0x24, 0xdd, 0x52, 0x17, 0x04, 0x10, 0x54, 0x0c, 0x12, 0xc5, 0xfa, 0xcb, 0xce, 0xf9, 0x0c, 0x87, 0xfd, 0x27, 0x08, 0xf8, 0x7f, 0xfc, 0x07, 0xfa, 0x3d, 0x05, 0xc4, 0xe7, 0xf9, 0x02, 0x4b, 0xff, 0x38, 0xb5, 0xfb, 0x28, 0x77, 0xfb, 0xd0, 0xac, 0xfb, 0xb3, 0x70, 0xfb, 0x18, 0x3b, 0xfd, 0xf9, 0xc0, 0xfd, 0xbf, 0x9b, 0xfe, 0x12, 0x88, 0x00, 0x4a, 0x95, 0xfd, 0x57, 0x0a, 0xfc, 0xa7, 0x1b, 0x01, 0x60, 0xb8, 0xfd, 0xba, 0xf8, 0x48, 0x83, 0x71, 0x1e, 0x02, 0xac, 0xd4, 0xec, 0x4b, 0x0f, 0x0e, 0x43, 0x12, 0xac, 0x90, 0xf2, 0x39, 0xdf, 0xfb, 0x95, 0x97, 0x24, 0x49, 0xd4, 0xf9, 0x6f, 0xdd, 0xdb, 0xd7, 0xb1, 0x02, 0x3b, 0x90, 0x0b, 0x1b, 0x47, 0xfb, 0xa7, 0x64, 0xfa, 0xb0, 0xc7, 0xfd, 0x4a, 0xd1, 0xf6, 0x86, 0x78, 0x06, 0xb7, 0xf6, 0x05, 0x6a, 0xf2, 0xfa, 0x5e, 0xcd, 0xfe, 0x14, 0x71, 0xfc, 0x0f, 0x0d, 0xfc, 0xdd, 0x35, 0xfb, 0xe5, 0xa9, 0xfb, 0xc0, 0x2c, 0xfd, 0x3f, 0xfb, 0xfd, 0x4a, 0x6b, 0xfe, 0xc8, 0xe5, 0xff, 0x95, 0xdb, 0xfd, 0x92, 0xfe, 0xfb, 0xe7, 0x50, 0x00, 0xf2, 0xbe, 0xfd, 0x85, 0xcf, 0x4a, 0x65, 0x22, 0x1f, 0x79, 0x7f, 0xd5, 0x44, 0xac, 0x0e, 0x5b, 0x45, 0x11, 0x3b, 0x21, 0xf1, 0x88, 0x23, 0xf8, 0x21, 0x9d, 0x26, 0x82, 0xfb, 0xfc, 0xee, 0x05, 0xdc, 0x89, 0x26, 0x01, 0x1d, 0xd8, 0x09, 0x1c, 0xc9, 0xfc, 0xb2, 0x23, 0xfb, 0xa1, 0x20, 0xfd, 0x06, 0x52, 0xf6, 0x36, 0x13, 0x05, 0x5c, 0xa9, 0x05, 0xc6, 0x18, 0xfd, 0x21, 0xfd, 0xfd, 0xbd, 0x28, 0xfd, 0x05, 0x7a, 0xfd, 0xa1, 0x1c, 0xfa, 0x02, 0x52, 0xfc, 0x12, 0x27, 0xfd, 0x66, 0x11, 0xfe, 0x98, 0xf0, 0xfd, 0x57, 0x9e, 0xff, 0xca, 0xc1, 0xfd, 0x0b, 0xa5, 0xfb, 0x13, 0xf4, 0xff, 0x69, 0xa6, 0xfd, 0x6f, 0xc8, 0x4a, 0x63, 0xc6, 0x20, 0xae, 0xde, 0xd7, 0x66, 0x0d, 0x0e, 0x14, 0x3e, 0x10, 0x02, 0x0f, 0xef, 0x7b, 0x48, 0xf4, 0xa4, 0xf5, 0x27, 0x92, 0x7f, 0x00, 0xa5, 0x1c, 0xdd, 0xa1, 0x0b, 0xff, 0x82, 0x9e, 0x07, 0x45, 0x38, 0xff, 0x91, 0x0b, 0xfc, 0xba, 0x8d, 0xfb, 0x3e, 0x5c, 0xf6, 0xdd, 0x4d, 0x04, 0x1e, 0x2a, 0x04, 0x84, 0xd1, 0xff, 0x86, 0xb1, 0xfd, 0xfe, 0x1e, 0xfd, 0x11, 0xa1, 0xff, 0xe8, 0x33, 0xf9, 0x1a, 0xcb, 0xfc, 0x26, 0x56, 0xfd, 0x71, 0x9c, 0xfd, 0x44, 0xd3, 0xfd, 0x98, 0xb5, 0xfe, 0x68, 0x17, 0xfd, 0xad, 0x7d, 0xfc, 0xd7, 0x4c, 0xff, 0x47, 0x3a, 0xfd, 0x3a, 0x5a, 0x49, 0xae, 0x1b, 0x23, 0x75, 0x00, 0xdb, 0xa7, 0x4b, 0x0d, 0xae, 0x42, 0x0f, 0x3a, 0x61, 0xed, 0x94, 0x84, 0xf0, 0x0d, 0xe0, 0x26, 0x3a, 0xa6, 0x04, 0x9f, 0x47, 0xdf, 0x95, 0xae, 0xfc, 0x9c, 0x18, 0x05, 0x4d, 0xb0, 0x01, 0x62, 0xf1, 0xfc, 0x52, 0xa5, 0xf9, 0x65, 0x0a, 0xf7, 0xe8, 0xc6, 0x03, 0x6c, 0xc4, 0x01, 0xfd, 0x11, 0x02, 0x4f, 0xec, 0xfe, 0x7d, 0x0c, 0xfc, 0xb4, 0xb0, 0x01, 0x69, 0x74, 0xf9, 0x86, 0x57, 0xfc, 0xfa, 0xe1, 0xfd, 0x38, 0x55, 0xfd, 0x5d, 0x56, 0xfc, 0xd9, 0x9d, 0xfd, 0x96, 0x6f, 0xfd, 0x77, 0xcf, 0xfc, 0x2c, 0x28, 0xff, 0x60, 0xf9, 0xfc, 0x74, 0xa4, 0x46, 0x73, 0x42, 0x25, 0x9d, 0x78, 0xdf, 0x85, 0xb2, 0x0d, 0x9d, 0x7d, 0x0d, 0x9e, 0x9b, 0xeb, 0x8d, 0x20, 0xed, 0x27, 0x20, 0x24, 0x0b, 0xc0, 0x09, 0x82, 0xa2, 0xe1, 0xcd, 0x0b, 0xfa, 0x11, 0x07, 0x03, 0x21, 0x99, 0x03, 0x47, 0x08, 0xfe, 0xa9, 0x40, 0xf8, 0x8a, 0xb7, 0xf7, 0x09, 0x60, 0x03, 0xb5, 0x6f, 0xff, 0xa5, 0x17, 0x03, 0xe2, 0x8a, 0x01, 0x39, 0xe4, 0xfa, 0xd9, 0xad, 0x02, 0x7c, 0x35, 0xfb, 0x08, 0x67, 0xfb, 0x80, 0x87, 0xfe, 0xc4, 0x02, 0xfc, 0xc2, 0xd9, 0xfa, 0x2d, 0xa8, 0xfd, 0x1a, 0xc7, 0xfc, 0x4a, 0xa7, 0xfd, 0x21, 0xb1, 0xff, 0xba, 0xa0, 0xfc, 0xee, 0x85, 0x43, 0x03, 0xce, 0x27, 0x57, 0xc9, 0xe3, 0x93, 0x4a, 0x0d, 0x72, 0xe8, 0x0b, 0xb0, 0xb6, 0xec, 0xcb, 0x3d, 0xe9, 0x49, 0x2a, 0x1e, 0x67, 0xd2, 0x0f, 0x38, 0x39, 0xe4, 0x3f, 0x18, 0xf8, 0xc3, 0xdb, 0x01, 0x73, 0x5a, 0x03, 0x92, 0xae, 0xff, 0x5d, 0x45, 0xf8, 0x0b, 0xec, 0xf7, 0x92, 0x43, 0x03, 0x57, 0x3a, 0xfd, 0xdb, 0xfe, 0x02, 0xb7, 0x7e, 0x04, 0x91, 0x1a, 0xfb, 0x63, 0x0e, 0x02, 0x6f, 0x87, 0xfd, 0x34, 0x43, 0xfb, 0xa5, 0xd6, 0xfc, 0x0f, 0x50, 0xfc, 0xbc, 0x00, 0xfa, 0x66, 0xc8, 0xfc, 0xee, 0xa7, 0xfc, 0x99, 0x97, 0xfe, 0x62, 0xa7, 0x00, 0x4e, 0x71, 0xfc, 0x90, 0xc8, 0x40, 0x41, 0x23, 0x2a, 0x64, 0xe2, 0xe6, 0xba, 0x79, 0x0d, 0xc4, 0xb9, 0x09, 0x2d, 0x8e, 0xee, 0x37, 0x45, 0xe7, 0x68, 0x6d, 0x15, 0x6b, 0x0d, 0x15, 0xe2, 0xd1, 0xe7, 0x2a, 0x2a, 0xf6, 0x9d, 0x74, 0x01, 0x40, 0x1d, 0x02, 0x23, 0x9e, 0x00, 0x1e, 0xe7, 0xf9, 0x78, 0xed, 0xf7, 0x48, 0x98, 0x02, 0x14, 0x48, 0xfc, 0xef, 0xc0, 0x01, 0x5b, 0x83, 0x06, 0x4b, 0x43, 0xfc, 0x9a, 0x85, 0x01, 0x9a, 0x6d, 0xfe, 0xc6, 0xe4, 0xfa, 0x24, 0xd2, 0xfb, 0xe9, 0xdc, 0xfc, 0x17, 0xc8, 0xf9, 0xc8, 0xf2, 0xfb, 0xd5, 0x91, 0xfc, 0xf2, 0x44, 0xff, 0x84, 0x59, 0x01, 0x1a, 0x54, 0xfc, 0xd6, 0x0f, 0x3f, 0xdf, 0xd3, 0x2a, 0x51, 0x90, 0xe9, 0x01, 0xff, 0x0e, 0x3d, 0x54, 0x07, 0xba, 0x2a, 0xef, 0x3f, 0x5e, 0xe7, 0x0a, 0xf2, 0x0c, 0xa6, 0xb2, 0x17, 0xef, 0xb3, 0xec, 0xf2, 0xf0, 0xf3, 0x02, 0x8d, 0x01, 0x0e, 0x8e, 0x01, 0x90, 0xf7, 0xff, 0x73, 0xf9, 0xfc, 0x4f, 0xec, 0xf7, 0xc6, 0x90, 0x01, 0xde, 0xe8, 0xfc, 0xd9, 0x34, 0xff, 0xc8, 0x7e, 0x07, 0x33, 0x40, 0xfe, 0x54, 0x6f, 0x00, 0x1f, 0x28, 0xfe, 0xc8, 0xa9, 0xfb, 0x7e, 0x56, 0xfb, 0xff, 0xb5, 0xfd, 0x4b, 0x5e, 0xfa, 0x2a, 0x1e, 0xfb, 0x4c, 0x1f, 0xfd, 0xdc, 0x6e, 0xfe, 0xe4, 0x3c, 0x01, 0x63, 0x2e, 0xfd, 0x2e, 0x71, 0x3d, 0x8b, 0x8b, 0x2b, 0x4e, 0x7e, 0xeb, 0x53, 0x01, 0x11, 0x0c, 0xea, 0x05, 0x12, 0x1b, 0xee, 0x12, 0x98, 0xe9, 0xa2, 0x09, 0x05, 0x4b, 0xae, 0x17, 0xd2, 0x6c, 0xf3, 0xe0, 0x14, 0xf1, 0xdd, 0x83, 0x01, 0x5d, 0x13, 0x03, 0x79, 0xbf, 0xfd, 0x2a, 0x2f, 0x00, 0xf2, 0x5b, 0xf9, 0xfd, 0xd1, 0xff, 0xe4, 0x8b, 0xfe, 0x2b, 0x2b, 0xfc, 0x8a, 0xd9, 0x06, 0x38, 0xa8, 0x00, 0x1a, 0xdd, 0xfe, 0xc9, 0x59, 0xfe, 0x00, 0x24, 0xfd, 0x8c, 0xc2, 0xfb, 0xb5, 0x53, 0xfe, 0xc7, 0xec, 0xfb, 0x53, 0x3a, 0xfb, 0x00, 0xf5, 0xfb, 0x38, 0x0a, 0xfd, 0x5f, 0x8d, 0x01, 0x28, 0x64, 0xfe, 0xdf, 0x64, 0x3a, 0x62, 0xa9, 0x2c, 0x72, 0xa6, 0xee, 0xce, 0xcd, 0x10, 0x36, 0x1e, 0x05, 0x0b, 0xc5, 0xee, 0xb8, 0xf2, 0xea, 0x7d, 0x37, 0xfd, 0x6d, 0x29, 0x17, 0xfe, 0xb9, 0xf9, 0x17, 0x75, 0xee, 0xe3, 0x74, 0x01, 0x36, 0x09, 0x05, 0xff, 0x6a, 0xfb, 0xe6, 0xc3, 0x02, 0xe7, 0xb7, 0xfb, 0x8c, 0x20, 0xfd, 0xe0, 0x3a, 0x00, 0x02, 0x55, 0xfa, 0x7d, 0xf4, 0x02, 0x7a, 0xd9, 0x02, 0x47, 0x3d, 0xff, 0x12, 0xdd, 0xfd, 0x1d, 0x41, 0xff, 0x1a, 0x8e, 0xfc, 0xea, 0x6b, 0xff, 0x3b, 0x19, 0xfd, 0x1b, 0xe5, 0xfa, 0x63, 0x38, 0xfb, 0x6c, 0x87, 0xfb, 0x18, 0x69, 0x00, 0x40, 0x67, 0xff, 0x2e, 0x54, 0x38, 0xcf, 0xff, 0x2b, 0xce, 0x29, 0xf2, 0x66, 0x1c, 0x10, 0xc0, 0x81, 0x03, 0x57, 0x15, 0xf1, 0xed, 0xdc, 0xea, 0x0e, 0x49, 0xf7, 0xe9, 0xea, 0x15, 0xe5, 0x09, 0xfe, 0xc5, 0xca, 0xed, 0xfb, 0x33, 0x01, 0xd5, 0x10, 0x06, 0xb3, 0xc7, 0xfa, 0x58, 0xe1, 0x04, 0x50, 0x77, 0xfb, 0x24, 0x00, 0xfc, 0xd9, 0xe4, 0x01, 0x5f, 0x13, 0xf8, 0xab, 0xbe, 0xff, 0x7b, 0xd3, 0x02, 0x54, 0xee, 0x00, 0xb4, 0x5e, 0xfe, 0xdf, 0xfc, 0x00, 0xac, 0xc8, 0xfd, 0x87, 0x6f, 0xff, 0x94, 0x61, 0xfe, 0x85, 0xe6, 0xfa, 0xef, 0x20, 0xfb, 0x77, 0x7b, 0xf9, 0xe1, 0x38, 0xfe, 0xb2, 0xfc, 0xff, 0x7d, 0xd1, 0x37, 0x4e, 0xba, 0x29, 0xac, 0x9d, 0xf4, 0x1f, 0x24, 0x11, 0x5a, 0x1f, 0x01, 0xcd, 0x6d, 0xf3, 0x21, 0x0f, 0xec, 0x72, 0x44, 0xf2, 0xd5, 0xf0, 0x13, 0xaa, 0xab, 0x02, 0x87, 0x4c, 0xed, 0x0a, 0xb3, 0x00, 0x0a, 0x3c, 0x09, 0x70, 0x7b, 0xf9, 0x3d, 0x12, 0x05, 0xb4, 0x02, 0xfc, 0xdb, 0xe1, 0xfa, 0x18, 0xec, 0x02, 0x73, 0x52, 0xf7, 0xaf, 0xa5, 0xfe, 0xde, 0xc8, 0x00, 0xca, 0xa4, 0x01, 0xc8, 0x9b, 0x02, 0xf0, 0xbd, 0x00, 0x78, 0xe2, 0xfd, 0x6c, 0x4d, 0x01, 0x5d, 0xfb, 0xfe, 0x16, 0xfb, 0xfa, 0xd3, 0x25, 0xfb, 0xbf, 0xce, 0xf8, 0xb8, 0xb0, 0xfb, 0x5c, 0x14, 0xff, 0x4f, 0x7a, 0x38, 0xe6, 0x72, 0x26, 0xf7, 0xc2, 0xf4, 0x54, 0x88, 0x13, 0x26, 0x66, 0xff, 0xc0, 0xd0, 0xf3, 0x6c, 0x88, 0xed, 0x57, 0xda, 0xef, 0x2d, 0x80, 0x10, 0x6e, 0x55, 0x06, 0x81, 0xa0, 0xee, 0x21, 0x44, 0xff, 0xaf, 0x2a, 0x0c, 0xfd, 0x6f, 0xf8, 0x49, 0xb9, 0x02, 0xb1, 0xc1, 0xfd, 0x15, 0xbd, 0xf9, 0xc9, 0xa8, 0x02, 0xac, 0x17, 0xf9, 0xab, 0xf4, 0xfc, 0xf3, 0x47, 0x01, 0x7a, 0x55, 0x00, 0x0d, 0x44, 0x03, 0x0b, 0xeb, 0x03, 0x63, 0xfc, 0xfc, 0xf6, 0x5f, 0x02, 0x1b, 0x0d, 0x00, 0xdd, 0x2e, 0xfa, 0x65, 0x8c, 0xfb, 0x4d, 0x3f, 0xf9, 0x81, 0xa0, 0xf9, 0xed, 0x8f, 0xfd, 0xca, 0xa5, 0x39, 0x2f, 0x04, 0x24, 0x45, 0x12, 0xf0, 0xbc, 0xeb, 0x18, 0x4e, 0xb6, 0x00, 0x5c, 0xdd, 0xee, 0x9c, 0x81, 0xf0, 0x6e, 0xeb, 0xf0, 0x6e, 0x4f, 0x0c, 0x62, 0x2a, 0x08, 0x27, 0xc2, 0xf1, 0x73, 0x54, 0xfd, 0x98, 0xd0, 0x0d, 0xe2, 0xce, 0xf7, 0x3c, 0x58, 0xff, 0x15, 0x6b, 0x00, 0xe6, 0x71, 0xf9, 0x92, 0x0f, 0x01, 0xf8, 0xe0, 0xfb, 0x72, 0xed, 0xfd, 0xed, 0xa2, 0x00, 0x1c, 0x53, 0xff, 0xe8, 0xb3, 0x00, 0xfd, 0xb5, 0x07, 0x4f, 0xa6, 0xfe, 0x29, 0x19, 0x00, 0x51, 0x19, 0x03, 0xcb, 0x2f, 0xf9, 0x2e, 0x9d, 0xfa, 0x5e, 0xce, 0xfb, 0x97, 0xaf, 0xf8, 0x30, 0x3b, 0xfb, 0xc4, 0xd5, 0x3c, 0xcd, 0x0a, 0x1f, 0xae, 0x1a, 0xe9, 0x91, 0x2a, 0x22, 0x76, 0x30, 0x01, 0x3c, 0x22, 0xe6, 0x0d, 0x1b, 0xf5, 0x58, 0x14, 0xf6, 0xdf, 0x46, 0x06, 0x25, 0x10, 0x08, 0x38, 0x39, 0xf7, 0x3a, 0x14, 0xf9, 0x41, 0x60, 0x0e, 0x3e, 0x7c, 0xf9, 0x3d, 0x86, 0xfa, 0x93, 0xa4, 0x02, 0xe5, 0x74, 0xfb, 0xa0, 0xcc, 0xfe, 0x60, 0xac, 0xfd, 0x0d, 0xae, 0x00, 0xbb, 0xce, 0xfe, 0x9a, 0x92, 0xfe, 0x4b, 0xc8, 0xff, 0x6a, 0x35, 0x06, 0x84, 0x56, 0x02, 0x9a, 0x49, 0x00, 0x1c, 0xb0, 0x01, 0x7c, 0x25, 0xfb, 0x88, 0xdf, 0xf9, 0x17, 0x33, 0xfc, 0x9e, 0x01, 0xfa, 0x4b, 0xb0, 0xf9, 0x79, 0x61, 0x3f, 0x7d, 0x7b, 0x18, 0x86, 0x28, 0xe6, 0x74, 0x6d, 0x29, 0x69, 0x1f, 0xfe, 0xa2, 0x0a, 0xe3, 0x19, 0xba, 0xf9, 0x02, 0x4d, 0xf9, 0x9b, 0xe7, 0x01, 0xe5, 0x04, 0x07, 0x38, 0x17, 0xfb, 0xc4, 0xe3, 0xf6, 0x2d, 0xc4, 0x0d, 0x1a, 0x80, 0xfa, 0x50, 0x39, 0xf8, 0x43, 0x8a, 0x03, 0xef, 0x69, 0xfe, 0x8c, 0xc5, 0xfd, 0x81, 0xe1, 0xfd, 0x1a, 0xd5, 0x01, 0x51, 0x47, 0xff, 0x86, 0x11, 0xfe, 0x62, 0xfc, 0xfd, 0x78, 0x5a, 0x05, 0x01, 0x50, 0x03, 0x63, 0xce, 0x01, 0x86, 0x0e, 0x01, 0x63, 0xaa, 0xfc, 0x20, 0x65, 0xfa, 0xb3, 0x9e, 0xfa, 0x89, 0xe8, 0xfb, 0x86, 0x88, 0xfa, 0xbe, 0xeb, 0x3f, 0x35, 0x55, 0x13, 0x5b, 0x86, 0xe4, 0x40, 0x34, 0x2e, 0xe2, 0xd4, 0xfc, 0x6f, 0xf9, 0xdf, 0x44, 0xba, 0xfd, 0x9f, 0xdd, 0xfe, 0xf9, 0x4c, 0xfb, 0x8a, 0x41, 0x04, 0xff, 0x96, 0x01, 0x6c, 0x4e, 0xf4, 0x0d, 0xa5, 0x0a, 0x43, 0x09, 0xfe, 0xe3, 0xd6, 0xf7, 0x06, 0x3a, 0x02, 0xef, 0x93, 0x00, 0xad, 0x98, 0xfe, 0x52, 0xe9, 0xfd, 0x54, 0xd8, 0x00, 0x0b, 0x7e, 0xff, 0x83, 0xb0, 0xff, 0x1e, 0xef, 0xfb, 0x18, 0x81, 0x04, 0xab, 0x13, 0x04, 0x3e, 0x88, 0x00, 0x3b, 0x10, 0x03, 0x59, 0xaa, 0xfd, 0x83, 0xac, 0xf9, 0xea, 0xc0, 0xfb, 0x63, 0xf1, 0xfb, 0xec, 0x08, 0xfb, 0xd7, 0xb1, 0x3c, 0xe8, 0x07, 0x10, 0x67, 0x31, 0xe6, 0xf5, 0x12, 0x30, 0xd8, 0x73, 0xfc, 0x03, 0x53, 0xdf, 0xdf, 0xf9, 0x00, 0x60, 0x97, 0x00, 0xb9, 0x27, 0xf7, 0xb4, 0xb3, 0x03, 0x22, 0x5c, 0x04, 0xad, 0x7a, 0xf2, 0x06, 0x21, 0x09, 0x0e, 0x63, 0x01, 0x9e, 0x33, 0xf7, 0x7f, 0xe1, 0x01, 0x7c, 0x85, 0x01, 0x71, 0x17, 0xfe, 0x14, 0x2f, 0xff, 0x16, 0xf1, 0xff, 0x9c, 0xd9, 0xfe, 0xfd, 0xc4, 0x00, 0xe4, 0x3e, 0xfc, 0x46, 0x0b, 0x03, 0xc8, 0x59, 0x03, 0x8a, 0xf6, 0x00, 0xff, 0xef, 0x02, 0x6a, 0xb6, 0xfe, 0xd4, 0x16, 0xfa, 0x47, 0xd8, 0xfc, 0xe0, 0x8b, 0xfc, 0x8d, 0xfd, 0xf9, 0xda, 0x81, 0x36, 0xec, 0xca, 0x0e, 0xcc, 0x2a, 0xea, 0x8a, 0x79, 0x2e, 0xb1, 0xec, 0xfd, 0x7a, 0x77, 0xe1, 0x08, 0xbc, 0x00, 0x2a, 0x37, 0x01, 0x63, 0x9e, 0xf6, 0x7e, 0xd0, 0x01, 0xf9, 0x24, 0x05, 0xa3, 0x63, 0xf3, 0x65, 0xb0, 0x07, 0xd0, 0x18, 0x03, 0x91, 0x16, 0xf8, 0xa3, 0x3a, 0x01, 0xcd, 0xae, 0x01, 0x80, 0x1a, 0xfe, 0x31, 0xf8, 0xfe, 0xb4, 0x47, 0x00, 0x82, 0xca, 0xfe, 0x28, 0x1d, 0x00, 0xfd, 0x99, 0xfd, 0x71, 0x86, 0x02, 0x76, 0x0a, 0x02, 0x3c, 0x72, 0x01, 0xcb, 0x46, 0x02, 0xff, 0x8d, 0xfe, 0x96, 0x13, 0xfc, 0x39, 0x74, 0xfd, 0x86, 0xc9, 0xfc, 0x6e, 0x7f, 0xfa, 0x2f, 0xbb, 0x2f, 0x9d, 0x78, 0x0f, 0x04, 0xa9, 0xed, 0xd3, 0x1d, 0x2a, 0x3c, 0x2b, 0x01, 0xc6, 0xda, 0xe3, 0x91, 0x21, 0x00, 0x2c, 0xf5, 0x01, 0x68, 0xf2, 0xf5, 0xa9, 0x38, 0x00, 0x72, 0x38, 0x06, 0x9c, 0xf2, 0xf4, 0x42, 0xa0, 0x05, 0xde, 0x20, 0x05, 0x1d, 0x9e, 0xf8, 0x72, 0xb6, 0xff, 0xe2, 0xe5, 0x02, 0x8a, 0x26, 0xfe, 0xdf, 0xca, 0xfd, 0xbc, 0xcd, 0x00, 0x4e, 0x53, 0xff, 0xaa, 0x77, 0xff, 0x11, 0x47, 0xfe, 0xe5, 0xab, 0x02, 0x3b, 0xf4, 0x01, 0xed, 0x71, 0x00, 0x38, 0xda, 0x01, 0x71, 0xba, 0xfe, 0x3e, 0x90, 0xfc, 0x33, 0xba, 0xfe, 0xc7, 0xf2, 0xfc, 0x8a, 0x1e, 0xfb, 0x07, 0x4a, 0x2a, 0x31, 0x5e, 0x13, 0xdc, 0x8b, 0xf3, 0xfc, 0xcd, 0x1d, 0x23, 0xfb, 0xfe, 0xc7, 0x62, 0xeb, 0xbf, 0x01, 0x00, 0xbc, 0x1a, 0xfe, 0xa8, 0x85, 0xfd, 0x46, 0xcb, 0x00, 0x86, 0xf5, 0xfd, 0x59, 0x07, 0xfd, 0xa8, 0x24, 0x06, 0xb3, 0x1b, 0x00, 0x84, 0x8e, 0xfb, 0xf3, 0x0c, 0xff, 0x1c, 0xf9, 0x00, 0x47, 0xba, 0xfe, 0xea, 0x47, 0xfc, 0x15, 0x34, 0x00, 0x70, 0x86, 0x00, 0x76, 0x6f, 0x00, 0xa4, 0x14, 0x00, 0x3d, 0x7b, 0x00, 0x7e, 0x19, 0x00, 0xc1, 0xa2, 0x01, 0x50, 0x11, 0x01, 0xbe, 0xa1, 0xff, 0x07, 0xf2, 0xff, 0xfa, 0xa6, 0xff, 0xce, 0x13, 0xff, 0x6c, 0x86, 0xff, 0x39, 0xc6, 0x23, 0xfd, 0xd6, 0x11, 0x77, 0x61, 0xf8, 0xca, 0xd0, 0x1b, 0x07, 0x30, 0xff, 0xbe, 0x70, 0xee, 0xcf, 0x0a, 0x00, 0xb6, 0x61, 0xfd, 0xbf, 0x31, 0xfe, 0x08, 0x14, 0x01, 0x57, 0xf2, 0xfd, 0x36, 0x3b, 0xfd, 0x84, 0x1e, 0x06, 0xc1, 0x7e, 0x00, 0x56, 0xa3, 0xfb, 0x36, 0xf8, 0xfe, 0x96, 0x96, 0x00, 0xac, 0xe5, 0xfe, 0xb2, 0xd9, 0xfc, 0xd4, 0x34, 0x00, 0x03, 0x1f, 0x00, 0x88, 0x32, 0x00, 0x9c, 0x5b, 0x00, 0xa6, 0x90, 0x00, 0x0b, 0x8a, 0x00, 0x77, 0xa3, 0x01, 0x7f, 0xc8, 0x00, 0x4c, 0x88, 0xff, 0xdf, 0x29, 0x00, 0xe0, 0xde, 0xff, 0x63, 0xc0, 0xfe, 0x78, 0x88, 0xff, 0x60, 0xc8, 0x1d, 0x8b, 0xdc, 0x10, 0xfb, 0x19, 0xfd, 0xbf, 0x1b, 0x18, 0x14, 0xe0, 0xff, 0x1e, 0xc2, 0xf2, 0x85, 0xa4, 0xfe, 0xf5, 0x86, 0xfc, 0xa5, 0x7d, 0xff, 0x21, 0x7e, 0x01, 0xe5, 0x73, 0xfd, 0x0d, 0xc8, 0xfd, 0x4e, 0xd9, 0x05, 0xd4, 0x9d, 0x00, 0x87, 0x46, 0xfc, 0x83, 0xb6, 0xfe, 0x26, 0x91, 0x00, 0x05, 0xee, 0xfe, 0x06, 0x2d, 0xfd, 0xcf, 0x49, 0x00, 0xc4, 0x04, 0x00, 0x2d, 0xf9, 0xff, 0x01, 0x5d, 0x00, 0x4b, 0xc4, 0x00, 0xe6, 0xf8, 0x00, 0xb9, 0x57, 0x01, 0xc4, 0x37, 0x00, 0x40, 0xea, 0xff, 0x22, 0x39, 0x00, 0xcb, 0xc4, 0xff, 0xd7, 0x71, 0xff, 0xab, 0xbf, 0xff, 0x0f, 0x01, 0x19, 0x3c, 0x8a, 0x10, 0x2e, 0x8f, 0xff, 0xb3, 0x32, 0x14, 0x22, 0xa9, 0x01, 0x38, 0xa9, 0xf5, 0x96, 0xc0, 0xfd, 0xe1, 0x9a, 0xfc, 0x9b, 0x30, 0x00, 0x57, 0x92, 0x01, 0x86, 0xaf, 0xfd, 0xfd, 0x4b, 0xfe, 0xc7, 0xb8, 0x04, 0xfa, 0xfe, 0x00, 0xc3, 0x07, 0xfd, 0xc5, 0x61, 0xfe, 0xf1, 0x5b, 0x00, 0xc2, 0x2f, 0xff, 0xf0, 0x90, 0xfd, 0xdb, 0x37, 0x00, 0x0d, 0x13, 0x00, 0x41, 0xfb, 0xff, 0x9f, 0x20, 0x00, 0x51, 0x10, 0x01, 0x65, 0x60, 0x01, 0xe7, 0x4f, 0x00, 0xf6, 0x2a, 0x00, 0x70, 0xd6, 0x00, 0xae, 0x05, 0x00, 0x4f, 0x7f, 0xff, 0x98, 0x65, 0x00, 0x98, 0x56, 0x00, 0x57, 0xf3, 0x15, 0xbd, 0x4b, 0x10, 0x58, 0xde, 0xff, 0x04, 0x5f, 0x11, 0x86, 0x5c, 0x03, 0xaa, 0xd7, 0xf6, 0xac, 0xe1, 0xfd, 0x31, 0xe3, 0xfd, 0x65, 0xfe, 0xff, 0x86, 0x16, 0x01, 0xcc, 0xf4, 0xfe, 0x87, 0xb0, 0xfe, 0xc9, 0x19, 0x03, 0xe6, 0x8f, 0x01, 0x56, 0xde, 0xfd, 0x52, 0xd6, 0xfd, 0x3c, 0x42, 0x00, 0x36, 0xc1, 0xff, 0x5d, 0xfc, 0xfd, 0xa2, 0xfa, 0xff, 0xf7, 0x53, 0x00, 0x60, 0x07, 0x00, 0x62, 0x09, 0x00, 0x7f, 0x90, 0x01, 0x03, 0xef, 0x00, 0xdf, 0x0c, 0x00, 0xc0, 0xe2, 0x00, 0x88, 0xf2, 0x00, 0x25, 0xf8, 0xff, 0x20, 0x31, 0x00, 0x9c, 0x07, 0x01, 0xad, 0x21, 0x00, 0xc4, 0x36, 0x14, 0x55, 0xbe, 0x0f, 0x7c, 0x72, 0xff, 0x57, 0x2e, 0x0f, 0xd3, 0xda, 0x03, 0xcd, 0x1b, 0xf8, 0xbc, 0xe5, 0xfe, 0xa3, 0x97, 0xfe, 0x15, 0x95, 0xff, 0x5d, 0x10, 0x01, 0xec, 0x26, 0x00, 0x94, 0x97, 0xfe, 0x05, 0x28, 0x02, 0xb4, 0xe7, 0x01, 0x38, 0xf2, 0xfd, 0xaa, 0x01, 0xfe, 0xec, 0x7f, 0x00, 0x31, 0xee, 0xff, 0xf9, 0x2e, 0xfe, 0x4f, 0x30, 0x00, 0xfc, 0x83, 0x00, 0x4f, 0xab, 0xff, 0x83, 0xcc, 0x00, 0xcc, 0xbc, 0x01, 0x23, 0x61, 0x00, 0x24, 0x78, 0x00, 0xf4, 0x4f, 0x01, 0xc0, 0x38, 0x01, 0x85, 0x53, 0x00, 0x64, 0xbc, 0x00, 0xef, 0xad, 0x00, 0xf2, 0x73, 0xff, 0x9f, 0x5d, 0x12, 0xcb, 0xb7, 0x0e, 0x54, 0x71, 0xff, 0xdd, 0xa6, 0x0d, 0x43, 0xfc, 0x03, 0x75, 0x71, 0xf9, 0x69, 0xa5, 0xff, 0x51, 0xe6, 0xfe, 0xd5, 0x6a, 0xff, 0x72, 0x5b, 0x01, 0xe8, 0xb4, 0x00, 0xad, 0x55, 0xfe, 0xa9, 0x99, 0x01, 0x35, 0xc6, 0x01, 0x55, 0x69, 0xfe, 0xac, 0x61, 0xfe, 0x1c, 0x5d, 0x00, 0x2c, 0x00, 0x00, 0x36, 0x7e, 0xfe, 0xcb, 0x73, 0x00, 0x84, 0x44, 0x00, 0x58, 0x54, 0x00, 0xcb, 0x99, 0x01, 0xfc, 0xc4, 0x00, 0xb9, 0x8f, 0x00, 0x6f, 0x7a, 0x01, 0x05, 0xa8, 0x01, 0xd4, 0x0d, 0x01, 0x98, 0x31, 0x00, 0xf8, 0x7f, 0x00, 0x38, 0xd2, 0xff, 0x02, 0x34, 0xff, 0x43, 0x66, 0x10, 0xd8, 0x38, 0x0d, 0x03, 0x0a, 0x00, 0x35, 0xd5, 0x0c, 0x4e, 0xf0, 0x03, 0x3a, 0xac, 0xfa, 0xc2, 0xff, 0xff, 0xed, 0x6f, 0xff, 0x64, 0xdd, 0xff, 0x8d, 0x42, 0x01, 0xb7, 0x80, 0x00, 0x5b, 0x75, 0xfe, 0x4f, 0xba, 0x01, 0xaa, 0x8d, 0x01, 0xd0, 0x95, 0xfe, 0x3b, 0xcb, 0xfe, 0xc9, 0x6f, 0x00, 0x35, 0xe1, 0xff, 0xe7, 0x11, 0xff, 0xcf, 0xdb, 0x00, 0x3b, 0x7d, 0x00, 0xa8, 0x34, 0x01, 0xe7, 0x60, 0x01, 0x8a, 0xda, 0x00, 0xae, 0x78, 0x01, 0x6d, 0x95, 0x01, 0x79, 0x5b, 0x01, 0x22, 0x66, 0x00, 0xa1, 0xd7, 0xff, 0x74, 0x12, 0x00, 0xb5, 0x96, 0xff, 0xcd, 0x32, 0xff, 0x14, 0xc9, 0x0e, 0x65, 0x83, 0x0c, 0x22, 0x60, 0x00, 0x76, 0x04, 0x0b, 0x4f, 0x08, 0x04, 0x98, 0x35, 0xfc, 0x2e, 0xa5, 0x00, 0x39, 0x92, 0xff, 0xb9, 0xa3, 0xff, 0x4c, 0x6a, 0x01, 0xc7, 0xce, 0x00, 0x91, 0xba, 0xfe, 0xb6, 0x47, 0x01, 0x26, 0x5d, 0x01, 0xe3, 0x0c, 0xff, 0x2e, 0x0f, 0xff, 0xa2, 0x62, 0x00, 0xa7, 0x5d, 0x00, 0x82, 0x06, 0x00, 0x32, 0xdc, 0x00, 0xb1, 0x37, 0x01, 0x3b, 0x0e, 0x02, 0xcb, 0x34, 0x01, 0xd7, 0x35, 0x01, 0x12, 0x39, 0x01, 0x6d, 0xb4, 0x00, 0x90, 0xd2, 0x00, 0xec, 0x14, 0x00, 0x07, 0xa0, 0xff, 0xe6, 0xd9, 0xff, 0x4e, 0x96, 0xff, 0xe9, 0xde, 0xfe, 0xe7, 0xd1, 0x0c, 0x07, 0x50, 0x0b, 0xb9, 0xff, 0x00, 0x92, 0x45, 0x0a, 0x11, 0x74, 0x04, 0x3d, 0x28, 0xfd, 0x5a, 0xa1, 0x00, 0xf3, 0xdb, 0xff, 0xad, 0x27, 0x00, 0x96, 0x5e, 0x01, 0x58, 0x85, 0x00, 0x07, 0x01, 0xff, 0x0f, 0x3a, 0x01, 0xff, 0x2e, 0x01, 0xad, 0x77, 0xff, 0x16, 0x8a, 0xff, 0x97, 0xb0, 0x00, 0xf2, 0x0d, 0x01, 0x50, 0xb2, 0x00, 0x6e, 0x8e, 0x01, 0x08, 0x17, 0x02, 0x2d, 0xe7, 0x01, 0x4f, 0xb9, 0x00, 0x6d, 0x5f, 0x00, 0x91, 0x5d, 0x00, 0x27, 0x78, 0x00, 0x5c, 0x94, 0x00, 0x49, 0x15, 0x00, 0xea, 0x6e, 0xff, 0x9f, 0x6c, 0xff, 0x91, 0x5f, 0xff, 0x1b, 0xb1, 0xfe, 0x34, 0xe9, 0x0a, 0xeb, 0x3f, 0x0a, 0x54, 0xf8, 0x01, 0x51, 0x77, 0x09, 0xe3, 0x2c, 0x04, 0x9a, 0x53, 0xfe, 0xaf, 0x36, 0x01, 0x09, 0xc0, 0xff, 0x26, 0x41, 0x00, 0x74, 0x83, 0x01, 0xd0, 0x59, 0x00, 0x25, 0x0f, 0xff, 0xb1, 0x59, 0x01, 0x9a, 0x84, 0x01, 0xe8, 0xff, 0xff, 0x82, 0xe1, 0xff, 0x97, 0x6b, 0x01, 0x56, 0x45, 0x02, 0xa9, 0x5d, 0x01, 0x7b, 0xdc, 0x01, 0x77, 0xba, 0x01, 0xee, 0x56, 0x00, 0x47, 0xd2, 0xff, 0xef, 0x3f, 0x00, 0x6d, 0x16, 0x00, 0x9e, 0x5f, 0x00, 0x99, 0x58, 0x00, 0x78, 0x89, 0xff, 0x7b, 0x35, 0xff, 0xb1, 0x6c, 0xff, 0x77, 0x0a, 0xff, 0x46, 0x60, 0xfe, 0xf0, 0xe1, 0x09, 0x8b, 0xf4, 0x09, 0x4b, 0xfe, 0x01, 0x97, 0xf1, 0x07, 0x6d, 0xa2, 0x04, 0xad, 0xce, 0xff, 0x74, 0x0b, 0x01, 0x96, 0xaa, 0xff, 0x67, 0x69, 0x00, 0xa4, 0x7e, 0x01, 0x15, 0xdd, 0x00, 0x1e, 0xb7, 0xff, 0xed, 0x63, 0x01, 0x01, 0xbc, 0x01, 0xf3, 0x0d, 0x01, 0x67, 0x6c, 0x01, 0xc2, 0x6b, 0x02, 0xf6, 0x5e, 0x02, 0x25, 0xe1, 0x00, 0xc2, 0xb5, 0x00, 0x32, 0x86, 0x00, 0x07, 0x0d, 0x00, 0x8f, 0xdd, 0xff, 0x20, 0x07, 0x00, 0xcc, 0xe1, 0xff, 0x98, 0x09, 0x00, 0x00, 0x04, 0x00, 0x9c, 0x5e, 0xff, 0xa4, 0x23, 0xff, 0x64, 0x33, 0xff, 0x4c, 0xb3, 0xfe, 0x20, 0x65, 0xfe, 0xad, 0xab, 0x07, 0xc4, 0x83, 0x08, 0xe5, 0x9f, 0x03, 0x49, 0x1c, 0x08, 0xa9, 0x43, 0x04, 0xc0, 0x7e, 0x00, 0xc6, 0x43, 0x01, 0xd3, 0xcb, 0xff, 0xec, 0x22, 0x01, 0x50, 0xc3, 0x01, 0x85, 0xa6, 0x00, 0xa9, 0x69, 0x00, 0xff, 0xbd, 0x02, 0xb5, 0xe2, 0x02, 0xd6, 0xa8, 0x01, 0xe9, 0xaf, 0x01, 0x17, 0xfd, 0x01, 0x5d, 0x03, 0x01, 0xbe, 0xf8, 0xff, 0x37, 0x6e, 0x00, 0x6f, 0x39, 0x00, 0x8b, 0x25, 0x00, 0x74, 0x99, 0xff, 0x4b, 0x6b, 0xff, 0xfb, 0xa7, 0xff, 0x49, 0xbd, 0xff, 0x2b, 0xd6, 0xff, 0xc1, 0x56, 0xff, 0x33, 0xf8, 0xfe, 0x04, 0xe6, 0xfe, 0xdb, 0x9b, 0xfe, 0x4d, 0xb3, 0xfe, 0xb3, 0x50, 0x07, 0xe2, 0x1a, 0x09, 0xc0, 0x8e, 0x03, 0xea, 0x18, 0x06, 0x8d, 0x95, 0x04, 0x62, 0x72, 0x01, 0xc7, 0x4e, 0x01, 0x35, 0x0d, 0x00, 0x23, 0x5e, 0x01, 0x32, 0xe8, 0x02, 0x0c, 0x33, 0x02, 0xcf, 0xd1, 0x01, 0xd1, 0x0c, 0x03, 0x8c, 0xc0, 0x02, 0x3b, 0x31, 0x01, 0x99, 0xeb, 0xff, 0x98, 0x64, 0x00, 0x67, 0xfa, 0x00, 0xe2, 0x88, 0x00, 0xd9, 0x27, 0x00, 0xff, 0x70, 0xff, 0x87, 0x5b, 0xff, 0x47, 0x5b, 0xff, 0xf2, 0x74, 0xff, 0x5a, 0x7a, 0xff, 0x91, 0x80, 0xff, 0x99, 0x4b, 0xff, 0xa0, 0x0d, 0xff, 0xb2, 0x37, 0xff, 0x3c, 0xda, 0xfe, 0xec, 0xca, 0xfe, 0x09, 0xc9, 0xfe, 0x41, 0xe2, 0x05, 0xec, 0x02, 0x08, 0x6b, 0x86, 0x04, 0x03, 0x9e, 0x06, 0x2d, 0xf1, 0x04, 0xc1, 0x8e, 0x01, 0x8b, 0xb2, 0x01, 0x5a, 0xa8, 0x01, 0xa9, 0x35, 0x03, 0x0e, 0xee, 0x03, 0x16, 0xcb, 0x02, 0x9d, 0xfd, 0x01, 0x60, 0x6d, 0x01, 0x64, 0xb6, 0x00, 0xba, 0x06, 0x00, 0xba, 0x3a, 0x00, 0xbe, 0x06, 0x01, 0x03, 0xdb, 0x00, 0xa6, 0x9b, 0xff, 0x44, 0x47, 0xff, 0x88, 0xd1, 0xff, 0x56, 0x2c, 0xff, 0x38, 0xc4, 0xfe, 0xd5, 0x27, 0xff, 0xe5, 0x5c, 0xff, 0xa8, 0x69, 0xff, 0x26, 0x33, 0xff, 0x83, 0x5e, 0xff, 0x1a, 0x2e, 0xff, 0xe9, 0xfe, 0xfe, 0xb6, 0xe7, 0xfe, 0x6c, 0xc3, 0xfe, 0x43, 0x53, 0x06, 0xa7, 0xa6, 0x09, 0x48, 0x26, 0x05, 0x69, 0xc4, 0x04, 0x62, 0x1a, 0x04, 0x58, 0xbc, 0x03, 0x1e, 0x21, 0x05, 0x5f, 0xc0, 0x03, 0xcc, 0xba, 0x02, 0x5c, 0x6a, 0x02, 0xa4, 0xe0, 0x00, 0x2f, 0xd2, 0xff, 0x79, 0x2b, 0x00, 0x6c, 0xc3, 0x00, 0xf6, 0x10, 0x01, 0xb0, 0x34, 0x00, 0x58, 0xa5, 0xff, 0xbb, 0x3d, 0x00, 0x6b, 0xad, 0xff, 0xf4, 0x1d, 0xff, 0x9b, 0x0e, 0xff, 0x07, 0x81, 0xfe, 0x8b, 0xcd, 0xfe, 0xf1, 0x81, 0xff, 0x4c, 0x62, 0xff, 0xc2, 0x39, 0xff, 0xc4, 0x78, 0xff, 0x2c, 0x91, 0xff, 0x1a, 0x14, 0xff, 0xed, 0xc3, 0xfe, 0x37, 0xef, 0xfe, 0x86, 0xe9, 0xfe, 0xba, 0xb6, 0x06, 0x16, 0x98, 0x09, 0x78, 0x24, 0x06, 0x9d, 0x9c, 0x07, 0xcb, 0x55, 0x06, 0x7c, 0xfb, 0x04, 0x44, 0x18, 0x05, 0x2f, 0xf7, 0x01, 0x9d, 0xfe, 0xff, 0x90, 0x4f, 0x00, 0x83, 0x2b, 0x00, 0x54, 0x28, 0x00, 0xab, 0x66, 0x00, 0x6a, 0x57, 0x00, 0xea, 0xb0, 0x00, 0x99, 0xb2, 0xff, 0x65, 0x71, 0xff, 0x78, 0xfd, 0xff, 0x9e, 0x0d, 0xff, 0xed, 0xc5, 0xfe, 0x0d, 0xbf, 0xfe, 0xf5, 0x69, 0xfe, 0xb9, 0x00, 0xff, 0x24, 0xb1, 0xff, 0xa5, 0x90, 0xff, 0x9b, 0x42, 0xff, 0xc2, 0x5b, 0xff, 0xfe, 0x75, 0xff, 0x99, 0x19, 0xff, 0x01, 0xdd, 0xfe, 0xdf, 0xdc, 0xfe, 0xb0, 0xcf, 0xfe, 0xec, 0xcd, 0x07, 0x5f, 0x42, 0x0c, 0x64, 0x05, 0x0a, 0xc3, 0x86, 0x09, 0x70, 0x2f, 0x05, 0xa8, 0xa6, 0x02, 0x3e, 0x88, 0x01, 0x4c, 0xfc, 0xff, 0xc3, 0xf7, 0xff, 0x4b, 0x7b, 0x00, 0xd5, 0x42, 0x00, 0x38, 0x94, 0xff, 0x90, 0xcd, 0xff, 0x8d, 0x18, 0x00, 0x01, 0x99, 0x00, 0xc3, 0x7d, 0xff, 0xb2, 0x17, 0xff, 0x8f, 0x5b, 0xff, 0xdf, 0x99, 0xfe, 0x65, 0x9e, 0xfe, 0xf7, 0xc1, 0xfe, 0x31, 0x0b, 0xff, 0x8f, 0x39, 0xff, 0x31, 0x4c, 0xff, 0xe4, 0x58, 0xff, 0x67, 0x90, 0xff, 0x0e, 0x89, 0xff, 0x11, 0x30, 0xff, 0xca, 0xee, 0xfe, 0xe0, 0xd0, 0xfe, 0xa4, 0xed, 0xfe, 0x47, 0xda, 0xfe, 0xde, 0x5f, 0x09, 0x12, 0xdd, 0x10, 0x5e, 0xa3, 0x0c, 0x21, 0x98, 0x05, 0xa4, 0x82, 0x00, 0x81, 0x57, 0x01, 0x1e, 0xcd, 0x02, 0x4e, 0xf6, 0x01, 0xa1, 0x42, 0xff, 0x81, 0xb9, 0xfe, 0x49, 0xf9, 0xff, 0x41, 0x2c, 0x00, 0xbd, 0xfe, 0xff, 0x43, 0x61, 0xff, 0x02, 0x17, 0x00, 0x6b, 0xac, 0xff, 0x3d, 0xe1, 0xfe, 0xf8, 0xdc, 0xfe, 0xdf, 0xac, 0xfe, 0xb3, 0x1f, 0xff, 0x7e, 0xed, 0xfe, 0x0f, 0xe7, 0xfe, 0xcc, 0xfe, 0xfe, 0x65, 0x63, 0xff, 0x3b, 0x7a, 0xff, 0x41, 0x6a, 0xff, 0x6d, 0x97, 0xff, 0x34, 0x22, 0xff, 0xbe, 0xf3, 0xfe, 0xe6, 0xc1, 0xfe, 0xec, 0xe2, 0xfe, 0x2e, 0x1d, 0xff, 0x0a, 0x0a, 0x0a, 0x07, 0xdf, 0x10, 0xf3, 0xbf, 0x08, 0xac, 0x22, 0x03, 0x33, 0x01, 0x02, 0x3f, 0x0f, 0x04, 0xbd, 0xcd, 0x04, 0xbd, 0x0e, 0x01, 0xfe, 0x98, 0xfe, 0xce, 0x00, 0x00, 0x4f, 0x39, 0x00, 0x7c, 0xed, 0xfe, 0xeb, 0x1a, 0x00, 0xa4, 0xa3, 0xff, 0x9e, 0x72, 0xff, 0xf3, 0x81, 0xff, 0xe9, 0xd6, 0xfe, 0x06, 0x43, 0xff, 0xe6, 0x11, 0xff, 0x15, 0xd5, 0xfe, 0x61, 0x10, 0xff, 0xc8, 0xe8, 0xfe, 0x97, 0xab, 0xfe, 0x01, 0x55, 0xff, 0xed, 0x81, 0xff, 0x0f, 0x46, 0xff, 0xbc, 0x69, 0xff, 0x9e, 0x2f, 0xff, 0xce, 0x15, 0xff, 0x03, 0x07, 0xff, 0x5d, 0xe0, 0xfe, 0xa5, 0xf7, 0xfe, 0x0a, 0x19, 0x06, 0x95, 0x40, 0x09, 0x86, 0x26, 0x05, 0x0b, 0x45, 0x05, 0x1a, 0x18, 0x06, 0x7c, 0x17, 0x06, 0x18, 0x8b, 0x05, 0x13, 0x9e, 0x02, 0xaf, 0x5a, 0x01, 0xf8, 0xe2, 0x01, 0xd0, 0xec, 0x00, 0xbe, 0x90, 0xff, 0x7e, 0x3f, 0xff, 0x33, 0xc3, 0xff, 0x99, 0xf2, 0xff, 0xe0, 0xfd, 0xfe, 0xaa, 0xfc, 0xfe, 0x67, 0x76, 0xff, 0x3f, 0x63, 0xff, 0xa6, 0x7d, 0xff, 0xbd, 0xe7, 0xfe, 0xf5, 0xd0, 0xfe, 0xeb, 0x35, 0xff, 0x0a, 0xfa, 0xfe, 0x37, 0xf0, 0xfe, 0xf6, 0x52, 0xff, 0xc6, 0x35, 0xff, 0xed, 0x1b, 0xff, 0x67, 0x86, 0xff, 0xcf, 0x59, 0xff, 0x6a, 0xf5, 0xfe, 0xe9, 0xe9, 0xfe, 0xb2, 0xcf, 0x04, 0x62, 0xa9, 0x06, 0x69, 0x03, 0x03, 0x79, 0x82, 0x03, 0xf9, 0x55, 0x05, 0xdb, 0x7b, 0x05, 0x85, 0x36, 0x04, 0x16, 0x41, 0x03, 0x3f, 0x16, 0x04, 0xd0, 0x13, 0x04, 0x5f, 0xe1, 0x02, 0xca, 0x94, 0x01, 0x02, 0xd9, 0x00, 0x1d, 0x9a, 0x00, 0xce, 0xa4, 0xff, 0x3c, 0x14, 0xff, 0xc7, 0x69, 0xff, 0x6c, 0x10, 0xff, 0xea, 0xf0, 0xfe, 0x2b, 0xbc, 0xff, 0x17, 0x3f, 0xff, 0xf4, 0x2a, 0xff, 0x21, 0x87, 0xff, 0x15, 0x13, 0xff, 0xdd, 0x1c, 0xff, 0xcb, 0x44, 0xff, 0xba, 0x08, 0xff, 0x31, 0xd2, 0xfe, 0xe4, 0x26, 0xff, 0x71, 0x56, 0xff, 0x60, 0x40, 0xff, 0x77, 0x5b, 0xff, 0x9c, 0x47, 0x05, 0xf7, 0x42, 0x07, 0xa9, 0x5d, 0x03, 0xb2, 0x9c, 0x03, 0x49, 0x83, 0x04, 0x20, 0x5e, 0x03, 0x33, 0xe1, 0x01, 0xe2, 0x94, 0x01, 0x3f, 0x46, 0x03, 0x27, 0x49, 0x04, 0x18, 0x65, 0x03, 0xf4, 0xa4, 0x02, 0xb3, 0x79, 0x02, 0x2b, 0x0f, 0x02, 0x37, 0xeb, 0x00, 0xb2, 0xb4, 0xff, 0x94, 0x6d, 0xff, 0xcb, 0x58, 0xff, 0x04, 0x46, 0xff, 0xbf, 0x22, 0xff, 0x44, 0xf2, 0xfe, 0x74, 0x43, 0xff, 0xef, 0xa0, 0xff, 0x8b, 0x53, 0xff, 0xd3, 0x2b, 0xff, 0x76, 0x5e, 0xff, 0x3e, 0xf6, 0xfe, 0xac, 0xf4, 0xfe, 0xf9, 0x33, 0xff, 0xb1, 0xef, 0xfe, 0x6c, 0x1d, 0xff, 0xbb, 0x71, 0xff, 0x13, 0xf8, 0x05, 0x5e, 0xe8, 0x07, 0xa0, 0xa6, 0x02, 0xc0, 0x55, 0x03, 0xb9, 0xc1, 0x04, 0xe9, 0x24, 0x03, 0x90, 0xc2, 0x00, 0xf0, 0x3c, 0x00, 0x90, 0x89, 0x02, 0x3f, 0x16, 0x03, 0x85, 0xe5, 0x01, 0xac, 0xa5, 0x02, 0xe0, 0x99, 0x03, 0xc1, 0x2d, 0x03, 0x76, 0x50, 0x02, 0xe1, 0xea, 0x00, 0x7f, 0x74, 0x00, 0xcc, 0xe8, 0xff, 0xf5, 0x46, 0xff, 0xe4, 0x87, 0xff, 0x1b, 0xf8, 0xfe, 0x34, 0xe7, 0xfe, 0x67, 0x94, 0xff, 0xef, 0x51, 0xff, 0xbe, 0x8b, 0xff, 0x00, 0xc9, 0xff, 0x9c, 0x17, 0xff, 0x8d, 0x0e, 0xff, 0xb0, 0x36, 0xff, 0x87, 0xda, 0xfe, 0x63, 0x14, 0xff, 0xb3, 0x37, 0xff, 0x61, 0x93, 0x06, 0x96, 0x39, 0x09, 0x28, 0x1a, 0x03, 0xae, 0x2b, 0x03, 0xc1, 0x99, 0x04, 0xe9, 0x41, 0x02, 0x4a, 0x28, 0x00, 0x0e, 0xde, 0x00, 0x4c, 0xa9, 0x02, 0x18, 0x9e, 0x01, 0xdf, 0x86, 0x00, 0x47, 0x74, 0x01, 0x0f, 0x05, 0x02, 0x84, 0xa6, 0x02, 0x1b, 0x0c, 0x03, 0x41, 0xf1, 0x01, 0x0f, 0x61, 0x01, 0xca, 0xe5, 0x00, 0x73, 0x4a, 0x00, 0x1a, 0x1b, 0x00, 0xf1, 0x2d, 0xff, 0x56, 0x2a, 0xff, 0x18, 0x6a, 0xff, 0xab, 0xf6, 0xfe, 0x1b, 0x7f, 0xff, 0x95, 0xcc, 0xff, 0x05, 0x54, 0xff, 0x9f, 0x53, 0xff, 0x97, 0x3f, 0xff, 0x5d, 0xe8, 0xfe, 0xa1, 0x0f, 0xff, 0x5e, 0x3a, 0xff, 0x0c, 0x04, 0x07, 0x54, 0xda, 0x09, 0x30, 0x81, 0x03, 0x77, 0xa7, 0x03, 0x3b, 0x63, 0x05, 0x15, 0xd9, 0x01, 0xd4, 0xa5, 0xfe, 0x98, 0xdc, 0x00, 0x58, 0x39, 0x03, 0xaf, 0x36, 0x01, 0x75, 0x2c, 0x00, 0x98, 0x03, 0x01, 0x14, 0xf1, 0x00, 0x27, 0x3b, 0x01, 0xc4, 0x85, 0x01, 0x0a, 0x3f, 0x01, 0xf6, 0xe9, 0x01, 0xb6, 0xfe, 0x01, 0xb1, 0x17, 0x01, 0x2f, 0xb1, 0x00, 0xcc, 0x5c, 0x00, 0xda, 0xd3, 0xff, 0x6b, 0x64, 0xff, 0xb7, 0x48, 0xff, 0xdc, 0x5d, 0xff, 0xc0, 0x68, 0xff, 0x6e, 0x5f, 0xff, 0xdb, 0x59, 0xff, 0x19, 0x64, 0xff, 0xca, 0x35, 0xff, 0x30, 0x09, 0xff, 0x30, 0x1f, 0xff, 0x04, 0xdb, 0x07, 0xc5, 0xfa, 0x0a, 0x86, 0xf0, 0x03, 0x0c, 0x87, 0x03, 0xee, 0x69, 0x05, 0xc2, 0x9e, 0x01, 0x5f, 0xdb, 0xfd, 0x36, 0x3c, 0x01, 0x67, 0x4e, 0x03, 0x1a, 0x22, 0x00, 0x96, 0xef, 0xff, 0x5d, 0x46, 0x01, 0x2c, 0xdc, 0x00, 0xf9, 0x7b, 0x00, 0xdc, 0xc3, 0x00, 0x56, 0x2a, 0x00, 0x16, 0x1a, 0x00, 0xee, 0x33, 0x01, 0x79, 0xa9, 0x01, 0xa1, 0x66, 0x01, 0xce, 0xe7, 0x00, 0x82, 0x9a, 0x00, 0x23, 0x30, 0x00, 0x40, 0xa9, 0xff, 0x4e, 0x83, 0xff, 0x44, 0x97, 0xff, 0x60, 0x50, 0xff, 0xed, 0x03, 0xff, 0x0f, 0x28, 0xff, 0x0e, 0x56, 0xff, 0x14, 0x3d, 0xff, 0x72, 0x0c, 0xff, 0x8f, 0x96, 0x08, 0x64, 0x2f, 0x0c, 0xe9, 0x6d, 0x04, 0x93, 0x64, 0x03, 0x77, 0xb7, 0x05, 0x81, 0x8a, 0x01, 0x2c, 0xfa, 0xfc, 0x54, 0x87, 0x01, 0x25, 0x85, 0x03, 0xa9, 0x66, 0xff, 0x16, 0xaa, 0xff, 0xa7, 0x78, 0x01, 0x01, 0xc6, 0x00, 0xd7, 0x41, 0x00, 0x82, 0xa0, 0x00, 0x6c, 0xd1, 0xff, 0x98, 0x97, 0xff, 0xf1, 0x0d, 0x00, 0x2d, 0x30, 0x00, 0xcf, 0xc1, 0x00, 0xfc, 0x24, 0x01, 0x32, 0x7b, 0x01, 0xc0, 0xdd, 0x00, 0x69, 0x41, 0x00, 0x33, 0x51, 0x00, 0xe1, 0xf6, 0xff, 0x87, 0x8a, 0xff, 0x67, 0x51, 0xff, 0x8a, 0x1b, 0xff, 0xdf, 0xfe, 0xfe, 0xc4, 0x51, 0xff, 0xc3, 0x2a, 0xff, 0x3c, 0xe0, 0x09, 0xff, 0xca, 0x0d, 0x30, 0x5e, 0x04, 0xa3, 0xf6, 0x02, 0x8b, 0xc0, 0x05, 0x2b, 0x57, 0x01, 0x51, 0x9c, 0xfc, 0xbb, 0xfd, 0x01, 0x2a, 0x37, 0x03, 0xa5, 0x56, 0xfe, 0x92, 0x9e, 0xff, 0x03, 0xc6, 0x01, 0x65, 0xc7, 0x00, 0x4a, 0xe3, 0xff, 0x8d, 0x52, 0x00, 0x23, 0xc2, 0xff, 0xb0, 0x5f, 0xff, 0x08, 0xbc, 0xff, 0xb1, 0xbb, 0xff, 0x49, 0xc6, 0xff, 0xb2, 0xa4, 0xff, 0x42, 0xc0, 0x00, 0x7b, 0x45, 0x01, 0x19, 0xfd, 0x00, 0x49, 0xbd, 0x00, 0x62, 0x66, 0x00, 0x77, 0x39, 0x00, 0xb2, 0xaf, 0xff, 0xd9, 0x37, 0xff, 0x14, 0x13, 0xff, 0x55, 0x40, 0xff, 0x9c, 0xfb, 0xfe, 0x92, 0xea, 0x0a, 0x4c, 0x16, 0x0f, 0x38, 0x9a, 0x04, 0x43, 0xfa, 0x02, 0x83, 0xea, 0x05, 0x57, 0xcc, 0x00, 0xe8, 0x1a, 0xfc, 0x28, 0xda, 0x02, 0xa6, 0x32, 0x03, 0x80, 0x2f, 0xfd, 0x43, 0x4c, 0xff, 0xd6, 0xf7, 0x01, 0x4d, 0xcf, 0x00, 0x09, 0xef, 0xff, 0xc9, 0x18, 0x00, 0xb7, 0x75, 0xff, 0xd1, 0x44, 0xff, 0xee, 0xa2, 0xff, 0xcb, 0xa6, 0xff, 0xc6, 0x7e, 0xff, 0x4c, 0x1a, 0xff, 0xd2, 0xb0, 0xff, 0x65, 0x1d, 0x00, 0xc8, 0x79, 0x00, 0x99, 0x10, 0x01, 0x27, 0xed, 0x00, 0xf9, 0x9e, 0x00, 0xdb, 0x49, 0x00, 0x3f, 0xc9, 0xff, 0x25, 0x4a, 0xff, 0x41, 0x51, 0xff, 0xf1, 0x3a, 0xff, 0xe0, 0x3f, 0x0c, 0x9c, 0x6c, 0x10, 0x8a, 0x80, 0x04, 0x98, 0x48, 0x03, 0xef, 0x2a, 0x06, 0x7d, 0xe0, 0xff, 0xc6, 0xe9, 0xfb, 0x09, 0x08, 0x04, 0x80, 0xfc, 0x02, 0xca, 0x11, 0xfc, 0xd3, 0x31, 0xff, 0x1a, 0x39, 0x02, 0x03, 0xca, 0x00, 0x99, 0xd2, 0xff, 0x17, 0x01, 0x00, 0x64, 0x79, 0xff, 0xac, 0x2d, 0xff, 0xab, 0x76, 0xff, 0x44, 0xbd, 0xff, 0xb1, 0x6a, 0xff, 0xc8, 0xf9, 0xfe, 0xd2, 0x6a, 0xff, 0xea, 0x9d, 0xff, 0x9b, 0xbd, 0xff, 0xfb, 0x0f, 0x00, 0xce, 0x86, 0x00, 0xde, 0xeb, 0x00, 0x1e, 0xb4, 0x00, 0x53, 0x2b, 0x00, 0xf0, 0xdd, 0xff, 0x44, 0xf8, 0xff, 0x17, 0x77, 0xff, 0x10, 0xc0, 0x0d, 0x59, 0x9f, 0x11, 0xdc, 0x26, 0x04, 0x2f, 0xf3, 0x03, 0x33, 0x57, 0x06, 0xbd, 0x73, 0xfe, 0x99, 0xcf, 0xfb, 0xb5, 0x55, 0x05, 0x35, 0xa2, 0x02, 0x95, 0x0c, 0xfb, 0x73, 0xee, 0xfe, 0xee, 0x3f, 0x02, 0xe7, 0xe7, 0x00, 0x62, 0xaa, 0xff, 0x38, 0xdd, 0xff, 0xe0, 0x4c, 0xff, 0xf3, 0xf6, 0xfe, 0x19, 0x41, 0xff, 0xf1, 0xef, 0xff, 0x8d, 0x50, 0xff, 0x51, 0xd0, 0xfe, 0xd1, 0x5f, 0xff, 0x90, 0x02, 0xff, 0x62, 0xb6, 0xff, 0x43, 0xe8, 0xff, 0x34, 0x8a, 0xff, 0xa6, 0xd8, 0xff, 0xba, 0x43, 0x00, 0x4f, 0x6e, 0x00, 0xa6, 0x58, 0x00, 0x10, 0x25, 0x00, 0x36, 0xd9, 0xff, 0x7e, 0x70, 0x0f, 0x12, 0xea, 0x12, 0x08, 0xa7, 0x03, 0x83, 0x80, 0x04, 0x65, 0x7c, 0x06, 0x91, 0x25, 0xfd, 0x89, 0xcf, 0xfb, 0xd3, 0x6d, 0x06, 0x6a, 0x25, 0x02, 0xc4, 0x5a, 0xfa, 0xdd, 0xd3, 0xfe, 0x04, 0x0b, 0x02, 0xfd, 0xda, 0x00, 0x17, 0x88, 0xff, 0xa5, 0x1b, 0x00, 0x17, 0x22, 0xff, 0x08, 0x66, 0xfe, 0xde, 0x20, 0xff, 0x9d, 0xfb, 0xff, 0xab, 0x6f, 0xff, 0x8f, 0xb4, 0xfe, 0x46, 0x3e, 0xff, 0xdb, 0xc1, 0xfe, 0xec, 0x9d, 0xff, 0x69, 0xe0, 0xff, 0xab, 0x4d, 0xff, 0x80, 0x5a, 0xff, 0x99, 0x4e, 0xff, 0xef, 0xab, 0xff, 0x39, 0x07, 0x00, 0xfb, 0x51, 0x00, 0x18, 0x16, 0x00, 0xf3, 0xc8, 0x10, 0xd2, 0x3f, 0x14, 0x08, 0xc2, 0x03, 0xa4, 0xc0, 0x04, 0x04, 0xb6, 0x06, 0x94, 0x50, 0xfc, 0x6c, 0x5f, 0xfb, 0x90, 0xab, 0x07, 0x17, 0x23, 0x02, 0x57, 0x60, 0xf9, 0xd7, 0xee, 0xfe, 0x47, 0xf7, 0x01, 0xb5, 0xb7, 0x00, 0x9f, 0x91, 0xff, 0x08, 0x0a, 0x00, 0x60, 0x68, 0xff, 0x3b, 0x2a, 0xfe, 0x4a, 0xb7, 0xfe, 0x14, 0x30, 0x00, 0x6b, 0x50, 0xff, 0xbd, 0x7a, 0xfe, 0x6a, 0xb0, 0xff, 0xe0, 0xbe, 0xfe, 0x22, 0x42, 0xff, 0x7a, 0xf5, 0xff, 0x1a, 0x3b, 0xff, 0x6f, 0x4d, 0xff, 0x86, 0x29, 0xff, 0x8e, 0xe7, 0xfe, 0x20, 0x36, 0xff, 0x9a, 0xda, 0xff, 0x14, 0x12, 0x00, 0xf9, 0xee, 0x11, 0xbe, 0x6e, 0x15, 0x45, 0xde, 0x03, 0x76, 0x7a, 0x05, 0x31, 0xee, 0x06, 0x38, 0xc7, 0xfa, 0xbc, 0x28, 0xfb, 0x76, 0xe7, 0x08, 0x42, 0xed, 0x01, 0x26, 0xa0, 0xf8, 0x1f, 0xc7, 0xfe, 0x32, 0xe6, 0x01, 0x93, 0x8e, 0x00, 0xdc, 0x5f, 0xff, 0xa0, 0xf5, 0xff, 0x4b, 0x9a, 0xff, 0x2c, 0x03, 0xfe, 0x0a, 0x59, 0xfe, 0x2f, 0x34, 0x00, 0x7a, 0x33, 0xff, 0x22, 0x28, 0xfe, 0x77, 0xaa, 0xff, 0x93, 0xee, 0xfe, 0x85, 0x22, 0xff, 0xe1, 0xb4, 0xff, 0x80, 0x6e, 0xff, 0x3c, 0x36, 0xff, 0x94, 0xc2, 0xfe, 0xcd, 0xa0, 0xfe, 0x04, 0xf3, 0xfe, 0x82, 0x8a, 0xff, 0x60, 0x3c, 0xff, 0x57, 0xf8, 0x12, 0xb2, 0xd8, 0x16, 0xef, 0x35, 0x04, 0xd4, 0x77, 0x05, 0x66, 0x65, 0x07, 0xf6, 0x2a, 0xfa, 0xce, 0x92, 0xfa, 0x36, 0x8d, 0x09, 0x7e, 0x0d, 0x02, 0x33, 0x4d, 0xf8, 0xa8, 0x8e, 0xfe, 0x70, 0xe1, 0x01, 0xf9, 0x44, 0x00, 0xaf, 0x4f, 0xff, 0x37, 0xfa, 0xff, 0x46, 0xa8, 0xff, 0xc3, 0x35, 0xfe, 0xb9, 0xc2, 0xfd, 0x18, 0x2a, 0x00, 0x83, 0xa8, 0xff, 0x4e, 0xc5, 0xfd, 0xa1, 0x53, 0xff, 0x70, 0xfe, 0xfe, 0x89, 0x3e, 0xff, 0x5b, 0xb6, 0xff, 0x91, 0x63, 0xff, 0xf7, 0x3f, 0xff, 0xfe, 0x80, 0xfe, 0x95, 0x7e, 0xfe, 0x2a, 0xe1, 0xfe, 0xda, 0x4e, 0xff, 0x56, 0xd1, 0xfe, 0x26, 0xa8, 0x13, 0x5e, 0xbe, 0x18, 0x18, 0xdf, 0x04, 0xbc, 0x54, 0x04, 0x9d, 0x0b, 0x08, 0x53, 0xcb, 0xfa, 0xc3, 0x6f, 0xf9, 0x23, 0x37, 0x09, 0x5a, 0x70, 0x02, 0xbc, 0xaa, 0xf8, 0x84, 0x08, 0xfe, 0x97, 0x8b, 0x01, 0x5f, 0x53, 0x00, 0x96, 0x02, 0xff, 0xfc, 0x15, 0x00, 0xa0, 0xb4, 0xff, 0x2a, 0x3c, 0xfe, 0x3c, 0x85, 0xfd, 0xd9, 0xd4, 0xff, 0xbc, 0xec, 0xff, 0xa2, 0xee, 0xfd, 0x74, 0xcd, 0xfe, 0xea, 0xba, 0xfe, 0xf0, 0x98, 0xff, 0xf7, 0x9f, 0xff, 0xeb, 0x09, 0xff, 0xc8, 0x50, 0xff, 0x97, 0x98, 0xfe, 0x0a, 0x69, 0xfe, 0x9d, 0xae, 0xfe, 0x7a, 0xd8, 0xfe, 0x46, 0xd7, 0xfe, 0x45, 0x2b, 0x14, 0x62, 0xe5, 0x19, 0xb0, 0x21, 0x06, 0xf0, 0xc9, 0x03, 0x5c, 0x22, 0x08, 0xb4, 0xec, 0xfb, 0xde, 0x2f, 0xf8, 0x52, 0x7d, 0x08, 0x04, 0x03, 0x03, 0xa2, 0x0d, 0xf9, 0x9a, 0xbe, 0xfd, 0x88, 0xf7, 0x00, 0x2e, 0x66, 0x00, 0x87, 0xe1, 0xfe, 0x17, 0xdf, 0xff, 0xbb, 0xdb, 0xff, 0x36, 0x62, 0xfe, 0x77, 0x46, 0xfd, 0xaa, 0x89, 0xff, 0xe0, 0x08, 0x00, 0xbf, 0xd1, 0xfd, 0xda, 0xd5, 0xfe, 0xd4, 0x9a, 0xfe, 0x58, 0x49, 0xff, 0x7c, 0xb6, 0xff, 0xa7, 0xdd, 0xfe, 0xe9, 0x0a, 0xff, 0xfa, 0xe7, 0xfe, 0x45, 0x27, 0xfe, 0x3e, 0x43, 0xfe, 0xe6, 0x0e, 0xff, 0x64, 0xbf, 0xfe, 0xd6, 0x7a, 0x15, 0xef, 0xe9, 0x19, 0xa4, 0xc4, 0x06, 0xfc, 0x09, 0x05, 0x7c, 0xf2, 0x07, 0xfe, 0x0d, 0xfc, 0x94, 0xb2, 0xf7, 0x2b, 0x3c, 0x08, 0x34, 0xb1, 0x02, 0x39, 0xb0, 0xf9, 0x77, 0xdf, 0xfd, 0x56, 0x3b, 0x00, 0x3c, 0x97, 0x00, 0x21, 0xc7, 0xfe, 0x13, 0x73, 0xff, 0x46, 0x32, 0x00, 0x58, 0xe2, 0xfe, 0xca, 0xee, 0xfc, 0xc2, 0x1e, 0xff, 0x4a, 0x47, 0x00, 0x32, 0xe7, 0xfd, 0xf6, 0xb0, 0xfe, 0xdc, 0x9b, 0xfe, 0x02, 0x15, 0xff, 0xec, 0x9e, 0xff, 0x08, 0xf7, 0xfe, 0x70, 0xfa, 0xfe, 0xfc, 0x93, 0xfe, 0xf2, 0x06, 0xfe, 0x7c, 0x20, 0xfe, 0xe0, 0x7e, 0xff, 0xc0, 0xa9, 0xfe, 0x11, 0x9d, 0x17, 0x1b, 0xfe, 0x18, 0x5a, 0x2a, 0x06, 0x3f, 0xe6, 0x07, 0xb6, 0xfe, 0x07, 0x57, 0xd7, 0xfa, 0x67, 0xe4, 0xf7, 0xd8, 0x65, 0x08, 0x31, 0x25, 0x01, 0x96, 0x8f, 0xfa, 0xc8, 0x8e, 0xfe, 0x73, 0x49, 0xff, 0xc8, 0x6e, 0x00, 0xb2, 0xb9, 0xfe, 0x95, 0x1a, 0xff, 0x58, 0x34, 0x00, 0x96, 0x98, 0xff, 0x70, 0x8d, 0xfc, 0xcc, 0x88, 0xfe, 0xe5, 0x7e, 0x00, 0xca, 0x4a, 0xfe, 0xb7, 0x26, 0xfe, 0xfb, 0x73, 0xfe, 0x07, 0x3c, 0xff, 0x21, 0x4e, 0xff, 0xf7, 0x0c, 0xff, 0xb3, 0xeb, 0xfe, 0xc3, 0x09, 0xfe, 0xd2, 0xc3, 0xfd, 0x86, 0x96, 0xfe, 0xdc, 0x4c, 0xff, 0xe7, 0x7a, 0xfe, 0x73, 0xfc, 0x18, 0x37, 0xf7, 0x17, 0x03, 0xcc, 0x05, 0xc4, 0x9d, 0x0a, 0xbc, 0xab, 0x09, 0xe9, 0x73, 0xf9, 0x69, 0xf1, 0xf6, 0x26, 0x03, 0x0a, 0xbd, 0x00, 0xff, 0x0c, 0x84, 0xfa, 0x71, 0xb8, 0x00, 0xee, 0x84, 0xfe, 0xe3, 0x33, 0xff, 0x01, 0x42, 0xff, 0x12, 0x14, 0xff, 0x5b, 0x75, 0xff, 0x6e, 0x0f, 0x01, 0xf7, 0x1e, 0xfc, 0x98, 0xcf, 0xfd, 0xe2, 0xff, 0x00, 0x5e, 0x78, 0xfe, 0x93, 0xff, 0xfd, 0x2d, 0x15, 0xfe, 0x8c, 0x78, 0xff, 0x25, 0x25, 0xff, 0x01, 0xfa, 0xfe, 0xce, 0xb7, 0xfe, 0xb5, 0x04, 0xfe, 0xf9, 0xc1, 0xfd, 0x50, 0x6f, 0xfe, 0x04, 0x23, 0xff, 0xb8, 0x7c, 0xfe, 0xa1, 0xc9, 0x1a, 0x86, 0x46, 0x16, 0xeb, 0xb9, 0x03, 0x2b, 0xec, 0x0f, 0x86, 0x3d, 0x0b, 0xc6, 0xce, 0xf5, 0x8c, 0x4a, 0xf8, 0x2e, 0x4c, 0x0c, 0x18, 0xeb, 0xfa, 0x75, 0x2d, 0xfa, 0xa5, 0xbd, 0x03, 0x15, 0x2e, 0xfe, 0x58, 0x08, 0xfe, 0xd2, 0xd3, 0xfe, 0x22, 0x94, 0xff, 0xc6, 0xac, 0xfe, 0x40, 0xd6, 0x01, 0x4b, 0xca, 0xfc, 0xa3, 0xa9, 0xfc, 0x13, 0x1d, 0x01, 0xbf, 0xdd, 0xfe, 0xfd, 0x04, 0xfe, 0x37, 0xf9, 0xfd, 0x6d, 0x76, 0xff, 0x21, 0xca, 0xfe, 0x85, 0xea, 0xfe, 0x3f, 0x82, 0xfe, 0xfb, 0x8e, 0xfe, 0x37, 0x85, 0xfd, 0xf3, 0x96, 0xfd, 0x72, 0x93, 0xff, 0xec, 0x0b, 0xfe, 0xd9, 0x01, 0x1d, 0xff, 0x3d, 0x16, 0xf0, 0x21, 0x00, 0xe7, 0xd3, 0x12, 0x4c, 0xf2, 0x0d, 0x86, 0x8c, 0xf3, 0x79, 0x6c, 0xf9, 0x2d, 0x28, 0x0e, 0x3b, 0xec, 0xf6, 0x0e, 0x23, 0xf9, 0x06, 0x1e, 0x07, 0xb0, 0x3d, 0xfe, 0xf3, 0xbd, 0xfc, 0xd7, 0x3f, 0xfe, 0x78, 0x68, 0x00, 0xde, 0xe1, 0xfd, 0x70, 0x95, 0x01, 0x13, 0x53, 0xfe, 0xf6, 0xa5, 0xfb, 0x21, 0xbb, 0x00, 0xf2, 0x8d, 0xff, 0xa1, 0x01, 0xfe, 0x62, 0xeb, 0xfd, 0xf7, 0x90, 0xff, 0x82, 0xa4, 0xfe, 0xed, 0x87, 0xfe, 0xf7, 0x81, 0xfe, 0xb0, 0x83, 0xfe, 0x1d, 0xb1, 0xfd, 0x05, 0x54, 0xfd, 0xb8, 0xf5, 0xfe, 0x36, 0xd2, 0xfd, 0xd6, 0x34, 0x20, 0x3a, 0x29, 0x17, 0x69, 0x96, 0xfb, 0xe1, 0xcd, 0x12, 0x6f, 0xd9, 0x11, 0x5a, 0xd1, 0xf2, 0xa5, 0xbb, 0xf9, 0x63, 0x7d, 0x0f, 0x83, 0xae, 0xf3, 0xc5, 0xc2, 0xf7, 0xf5, 0xdd, 0x09, 0xea, 0xf5, 0xfe, 0xff, 0x53, 0xfb, 0x48, 0x9f, 0xfd, 0xfb, 0x4c, 0x01, 0x93, 0x92, 0xfd, 0xd2, 0x34, 0x00, 0x7d, 0xd7, 0xff, 0x21, 0xb0, 0xfb, 0xfe, 0x7a, 0xff, 0x1a, 0x73, 0x00, 0xad, 0x05, 0xfe, 0x9e, 0xe1, 0xfd, 0xa6, 0x13, 0x00, 0x77, 0x25, 0xfe, 0xfa, 0x63, 0xfe, 0x58, 0x72, 0xfe, 0x69, 0xc2, 0xfd, 0xaf, 0x47, 0xfe, 0x05, 0x66, 0xfd, 0x52, 0xae, 0xfd, 0xfb, 0x18, 0xfe, 0x62, 0xa6, 0x23, 0x54, 0x60, 0x18, 0xa4, 0xe8, 0xf6, 0xea, 0xfb, 0x11, 0xec, 0xe1, 0x14, 0x3b, 0x44, 0xf3, 0xc0, 0x8a, 0xfa, 0x60, 0x10, 0x10, 0xeb, 0x16, 0xf1, 0x5c, 0x08, 0xf6, 0xec, 0xa2, 0x0b, 0xc7, 0xa4, 0x00, 0x11, 0x07, 0xfa, 0x59, 0xa8, 0xfc, 0x88, 0x17, 0x02, 0xef, 0xa6, 0xfd, 0xa2, 0xc1, 0xfe, 0xad, 0x4c, 0x00, 0x47, 0xd0, 0xfc, 0x8b, 0x1f, 0xfe, 0x27, 0x9d, 0x00, 0x86, 0xa1, 0xfe, 0x5f, 0xd6, 0xfd, 0x3a, 0xb2, 0x00, 0x03, 0xbd, 0xfd, 0x4e, 0x1b, 0xfe, 0x78, 0x22, 0xfe, 0x22, 0x66, 0xfd, 0x86, 0x2c, 0xfe, 0xab, 0x62, 0xfd, 0xb0, 0x85, 0xfd, 0x99, 0xdd, 0xfd, 0x44, 0x94, 0x26, 0xe8, 0x28, 0x1a, 0x63, 0x92, 0xf3, 0x6c, 0xc6, 0x0e, 0xce, 0x95, 0x17, 0xed, 0x7e, 0xf5, 0x2d, 0xab, 0xfa, 0x04, 0x21, 0x11, 0xfe, 0xdf, 0xee, 0x3a, 0x1b, 0xf4, 0x5b, 0x5d, 0x0c, 0xe1, 0xd8, 0x02, 0xa8, 0x71, 0xf9, 0xf0, 0x37, 0xfb, 0xb6, 0xc1, 0x02, 0x36, 0x0d, 0xfe, 0x8a, 0xa4, 0xfd, 0x7f, 0x9f, 0xff, 0x48, 0x71, 0xfe, 0x68, 0x70, 0xfd, 0xc2, 0xde, 0xff, 0x8c, 0xc5, 0xff, 0x0e, 0xd3, 0xfd, 0x33, 0x4e, 0x01, 0xba, 0x9d, 0xfd, 0xb5, 0x89, 0xfd, 0xa7, 0xfb, 0xfd, 0x0b, 0x01, 0xfd, 0x7a, 0x9d, 0xfd, 0xa2, 0x89, 0xfd, 0xc6, 0x25, 0xfe, 0xc6, 0x61, 0xfd, 0x1d, 0x13, 0x29, 0x17, 0x6a, 0x1c, 0x70, 0x34, 0xf1, 0x0f, 0x97, 0x0a, 0x5b, 0xe6, 0x18, 0xcf, 0x89, 0xf8, 0xb9, 0x20, 0xfb, 0x42, 0x62, 0x12, 0xc0, 0xd8, 0xec, 0x86, 0x4c, 0xf2, 0x5c, 0x41, 0x0c, 0x24, 0xda, 0x04, 0x74, 0xa3, 0xf9, 0x08, 0xb4, 0xf9, 0xae, 0xf1, 0x02, 0x36, 0x99, 0xfe, 0x41, 0x23, 0xfd, 0x08, 0x2c, 0xfe, 0xa7, 0x9d, 0xff, 0xce, 0xb7, 0xfd, 0x9b, 0xcb, 0xfe, 0x26, 0xb7, 0x00, 0x70, 0x64, 0xfe, 0xe3, 0x50, 0x01, 0xe1, 0x91, 0xfd, 0xa7, 0x66, 0xfd, 0x4f, 0xab, 0xfd, 0xb6, 0x54, 0xfc, 0x51, 0x3e, 0xfd, 0x08, 0x9e, 0xfd, 0x65, 0xb4, 0xfe, 0x80, 0x8a, 0xfd, 0x11, 0x8d, 0x2d, 0x4b, 0x8e, 0x1c, 0xc1, 0x5d, 0xee, 0x27, 0x1d, 0x09, 0x05, 0xc1, 0x17, 0x23, 0x67, 0xf9, 0xd1, 0x2b, 0xff, 0x1a, 0x79, 0x12, 0xad, 0xae, 0xe9, 0x34, 0x55, 0xf2, 0x1c, 0xc6, 0x0b, 0x8c, 0xdb, 0x05, 0xe9, 0xef, 0xf9, 0xa9, 0xe8, 0xf8, 0x01, 0xc0, 0x02, 0xbe, 0xc3, 0xfe, 0x41, 0x33, 0xfd, 0xd9, 0xd5, 0xfc, 0xd1, 0xb2, 0xff, 0xab, 0x84, 0xfe, 0xa6, 0x4f, 0xfe, 0x9c, 0x0c, 0x01, 0xae, 0x9f, 0xff, 0x16, 0xab, 0x00, 0x50, 0x5b, 0xfd, 0x8f, 0xf3, 0xfd, 0x16, 0xdf, 0xfc, 0x6a, 0xea, 0xfb, 0xea, 0xe8, 0xfc, 0x85, 0x75, 0xfd, 0xad, 0x3f, 0xff, 0xcb, 0x72, 0xfe, 0x13, 0xe2, 0x30, 0x44, 0x61, 0x1e, 0x70, 0x1c, 0xeb, 0xd7, 0x1f, 0x08, 0x09, 0xdb, 0x15, 0x3f, 0xd5, 0xf9, 0x4a, 0x05, 0x03, 0xf6, 0x8c, 0x13, 0xd7, 0x26, 0xe7, 0xf8, 0x87, 0xf1, 0xd6, 0xe2, 0x0b, 0x0c, 0x1e, 0x06, 0x15, 0x85, 0xfa, 0x2b, 0xa9, 0xf8, 0x91, 0x09, 0x02, 0x92, 0xdc, 0xfe, 0x92, 0x90, 0xfd, 0x25, 0x0c, 0xfc, 0x04, 0xe7, 0xfe, 0xd5, 0x29, 0xff, 0x1c, 0xc7, 0xfe, 0x9f, 0x4b, 0x01, 0x33, 0x7c, 0x00, 0x19, 0x00, 0x00, 0xb1, 0x90, 0xfd, 0xd8, 0x3c, 0xfe, 0x76, 0x56, 0xfc, 0x03, 0xc8, 0xfb, 0xfd, 0x56, 0xfc, 0xb9, 0x5e, 0xfd, 0x70, 0xd1, 0xff, 0x4c, 0x7a, 0xff, 0x3b, 0x20, 0x35, 0xbe, 0xc3, 0x1e, 0x10, 0x57, 0xe8, 0xbf, 0xb1, 0x07, 0x83, 0xe3, 0x13, 0xf6, 0x3b, 0xf8, 0x8d, 0x6a, 0x07, 0x42, 0xfd, 0x14, 0xd3, 0x5c, 0xe4, 0x92, 0xfc, 0xf0, 0x2e, 0x4c, 0x0c, 0xe6, 0xc0, 0x05, 0x58, 0x74, 0xfa, 0xd4, 0x61, 0xf9, 0x09, 0xd8, 0x00, 0x7f, 0x63, 0xfe, 0x27, 0x43, 0xfe, 0x8c, 0x92, 0xfb, 0xb9, 0xe2, 0xfd, 0xe5, 0xe5, 0xfe, 0xab, 0xfe, 0xff, 0x28, 0x0d, 0x02, 0x11, 0x16, 0x00, 0x60, 0xc3, 0xff, 0xbb, 0x1c, 0xfe, 0x53, 0xe9, 0xfd, 0xc8, 0x35, 0xfc, 0x62, 0x99, 0xfb, 0xbe, 0xac, 0xfb, 0xdb, 0x83, 0xfd, 0x53, 0xf5, 0xff, 0x12, 0x69, 0x00, 0xd8, 0xed, 0x37, 0xea, 0x10, 0x21, 0x5b, 0x84, 0xe5, 0x1b, 0xfa, 0x06, 0x85, 0x6a, 0x12, 0x3e, 0x78, 0xf6, 0xf3, 0x99, 0x09, 0xc3, 0x34, 0x18, 0x44, 0xbb, 0xe2, 0xa5, 0x4f, 0xef, 0xfb, 0x14, 0x0d, 0x59, 0x27, 0x05, 0x5f, 0x73, 0xfa, 0x73, 0x60, 0xfa, 0x29, 0xc0, 0xff, 0xc6, 0x53, 0xfd, 0x87, 0x5f, 0xff, 0x13, 0x57, 0xfb, 0x34, 0x0d, 0xfd, 0x14, 0x46, 0xfe, 0x73, 0xec, 0x00, 0x29, 0xeb, 0x03, 0xef, 0xb2, 0xfe, 0x85, 0xea, 0xff, 0xed, 0x26, 0xff, 0x1c, 0x15, 0xfd, 0x89, 0xb5, 0xfc, 0x45, 0x4e, 0xfb, 0xc7, 0x36, 0xfb, 0x6c, 0x78, 0xfd, 0x8f, 0xf6, 0xff, 0xcd, 0xe7, 0x00, 0x90, 0xe5, 0x3a, 0xd0, 0x99, 0x22, 0xc2, 0xae, 0xe3, 0x7d, 0xdb, 0x05, 0x0f, 0x9a, 0x11, 0xf0, 0xf5, 0xf3, 0x29, 0x72, 0x0a, 0xfe, 0xcb, 0x1b, 0xab, 0x99, 0xe1, 0x80, 0x1f, 0xee, 0x70, 0x41, 0x0d, 0x38, 0x82, 0x04, 0x63, 0x68, 0xfa, 0xa8, 0x67, 0xfb, 0x3d, 0xbe, 0xfe, 0x71, 0xfc, 0xfb, 0x2a, 0x77, 0x00, 0xa5, 0xfa, 0xfa, 0x30, 0xe1, 0xfc, 0xac, 0x56, 0xfd, 0x72, 0x2b, 0x01, 0xfd, 0x42, 0x06, 0x0f, 0x5a, 0xfd, 0xf4, 0xc3, 0xff, 0x59, 0x8d, 0x00, 0xd0, 0x2b, 0xfc, 0x5c, 0x2c, 0xfd, 0x98, 0x73, 0xfb, 0x9e, 0x4e, 0xfa, 0x9b, 0x79, 0xfd, 0xd7, 0x83, 0xff, 0xec, 0x00, 0x01, 0x1f, 0x63, 0x3d, 0xa1, 0xec, 0x23, 0x88, 0xeb, 0xe2, 0x8e, 0x4b, 0x04, 0x9f, 0x75, 0x11, 0x89, 0x35, 0xf1, 0x51, 0xcb, 0x09, 0xc0, 0x7b, 0x1f, 0x47, 0x51, 0xe1, 0xd2, 0xbd, 0xed, 0x75, 0x67, 0x0c, 0x1f, 0xc6, 0x03, 0xc6, 0xf5, 0xfa, 0x62, 0xf8, 0xfb, 0x38, 0xc9, 0xfd, 0xcd, 0xfc, 0xfa, 0xd0, 0x21, 0x01, 0x83, 0xa3, 0xfa, 0xb5, 0x59, 0xfd, 0x35, 0x68, 0xfc, 0x45, 0xa3, 0x00, 0xe6, 0x55, 0x08, 0x41, 0x23, 0xfd, 0xf8, 0xf1, 0xfe, 0xca, 0x2a, 0x02, 0xe9, 0xeb, 0xfb, 0x1d, 0x0e, 0xfd, 0xef, 0x10, 0xfc, 0x39, 0x25, 0xf9, 0x71, 0x2b, 0xfd, 0x63, 0xc4, 0xfe, 0xd7, 0xde, 0x00, 0x29, 0x92, 0x3f, 0x0d, 0xdb, 0x24, 0x27, 0x78, 0xe2, 0x6c, 0xea, 0x03, 0xbf, 0x5e, 0x10, 0x3f, 0xe4, 0xee, 0xd5, 0x79, 0x08, 0xd0, 0xcb, 0x21, 0x88, 0x25, 0xe2, 0x74, 0x2f, 0xee, 0x32, 0x08, 0x0b, 0x68, 0x59, 0x02, 0x46, 0x61, 0xfc, 0xb6, 0x01, 0xfc, 0xa8, 0x7b, 0xfc, 0xe7, 0xc4, 0xfa, 0xf8, 0x49, 0x01, 0xdb, 0x67, 0xfa, 0x33, 0x08, 0xfe, 0xd1, 0xb8, 0xfb, 0x80, 0xa0, 0xff, 0x45, 0x60, 0x09, 0x4c, 0x2f, 0xfe, 0xcd, 0x18, 0xfe, 0x56, 0x38, 0x03, 0x4d, 0xcc, 0xfc, 0x27, 0x2c, 0xfc, 0xd4, 0xa3, 0xfc, 0xd1, 0x04, 0xf8, 0x67, 0x8c, 0xfc, 0x90, 0x0f, 0xfe, 0xe6, 0x30, 0x00, 0x3b, 0xaf, 0x41, 0x0c, 0x8a, 0x25, 0xdc, 0x36, 0xe2, 0x6a, 0x1e, 0x05, 0x6f, 0xfc, 0x0d, 0x77, 0x25, 0xed, 0x50, 0x54, 0x07, 0xfb, 0x32, 0x22, 0xf2, 0x68, 0xe4, 0xfb, 0x0b, 0xef, 0x11, 0x3b, 0x09, 0x1d, 0xc9, 0x00, 0x59, 0x5e, 0xfe, 0x69, 0xea, 0xfb, 0x38, 0xff, 0xfa, 0x4d, 0x35, 0xfb, 0x8d, 0xb2, 0x01, 0xe8, 0xf8, 0xf9, 0x06, 0xe6, 0xfe, 0xa1, 0x88, 0xfb, 0x1c, 0x54, 0xfe, 0x91, 0x3b, 0x09, 0xda, 0x4c, 0x00, 0xe0, 0x43, 0xfe, 0xf3, 0xf8, 0x02, 0x2d, 0xbc, 0xfe, 0x5c, 0x0b, 0xfb, 0xac, 0x48, 0xfc, 0xda, 0xcc, 0xf7, 0x6d, 0xdd, 0xfb, 0x30, 0x0f, 0xfd, 0xb4, 0x97, 0xff, 0xf0, 0xe1, 0x40, 0x18, 0x57, 0x28, 0xaf, 0x3a, 0xe4, 0x4a, 0x4a, 0x03, 0x81, 0xa5, 0x0d, 0x49, 0xc1, 0xeb, 0x25, 0xb0, 0x03, 0xe2, 0xcb, 0x22, 0xdd, 0x14, 0xe8, 0x88, 0x7c, 0xef, 0xb5, 0x96, 0x06, 0xd8, 0xe6, 0xff, 0x6d, 0xf9, 0xff, 0x91, 0xb1, 0xfb, 0x17, 0x0b, 0xfa, 0xd3, 0x47, 0xfb, 0xf0, 0xa9, 0x02, 0xf4, 0x51, 0xf9, 0xcd, 0x2d, 0xff, 0xa6, 0x85, 0xfc, 0xaa, 0x42, 0xfc, 0xbc, 0xb4, 0x07, 0xf8, 0xad, 0x03, 0xe5, 0x22, 0xff, 0xed, 0x6f, 0x01, 0x92, 0xfd, 0x00, 0x85, 0xae, 0xf9, 0x5c, 0xd3, 0xfb, 0x5f, 0x5b, 0xf8, 0x43, 0x7c, 0xfa, 0x71, 0xda, 0xfc, 0xc3, 0x62, 0xfe, 0xc6, 0xda, 0x3d, 0xbc, 0x26, 0x2c, 0x67, 0xf0, 0xe8, 0xfa, 0x55, 0xff, 0xe0, 0x16, 0x0e, 0x30, 0xf4, 0xeb, 0x91, 0x5d, 0xfd, 0x3d, 0x32, 0x23, 0xda, 0x89, 0xed, 0x77, 0xc6, 0xee, 0x72, 0xa2, 0x04, 0x75, 0xd3, 0xfe, 0x03, 0xe5, 0x00, 0x64, 0x60, 0xfc, 0x16, 0x1b, 0xf9, 0x2a, 0xac, 0xfb, 0x71, 0x4d, 0x03, 0x91, 0xf8, 0xf8, 0x46, 0x37, 0xff, 0x88, 0xa3, 0xfd, 0xd7, 0xf3, 0xfa, 0x15, 0x1e, 0x05, 0x45, 0x7d, 0x06, 0xee, 0x63, 0x01, 0x97, 0xff, 0xfe, 0xfc, 0xff, 0x01, 0xa2, 0x42, 0xfa, 0xfb, 0xd7, 0xfa, 0xb7, 0xf0, 0xf8, 0x55, 0xf4, 0xf9, 0x58, 0x8a, 0xfc, 0x18, 0x77, 0xfd, 0xef, 0x32, 0x3c, 0x6c, 0xc4, 0x2d, 0x17, 0xe3, 0xec, 0x4c, 0xfd, 0xfe, 0xa9, 0xaa, 0x0b, 0x9a, 0x2f, 0xed, 0x6d, 0x7f, 0xf8, 0xa7, 0xdd, 0x20, 0xa4, 0xcc, 0xf3, 0x35, 0xcd, 0xed, 0xd2, 0xc8, 0x03, 0x8c, 0x6f, 0xfd, 0xf7, 0x15, 0x01, 0x18, 0xf6, 0xfd, 0x82, 0x80, 0xf8, 0xb6, 0xec, 0xfb, 0x7c, 0xc9, 0x03, 0x92, 0xc0, 0xf8, 0x1c, 0x52, 0xff, 0x68, 0xa7, 0xfe, 0x07, 0x81, 0xfa, 0xfd, 0x5a, 0x03, 0x72, 0x5a, 0x06, 0x6a, 0xe3, 0x03, 0x16, 0xb7, 0xfd, 0x90, 0xd9, 0x01, 0xa6, 0xcd, 0xfb, 0xdf, 0x24, 0xfa, 0xb7, 0x83, 0xf9, 0x46, 0x0a, 0xfa, 0xd7, 0xc6, 0xfc, 0x86, 0x9b, 0xfc, 0x4f, 0xad, 0x3c, 0x89, 0x4d, 0x2d, 0xef, 0xb3, 0xed, 0x3c, 0x0a, 0x04, 0x3c, 0xb0, 0x06, 0xd5, 0x9d, 0xec, 0x82, 0x0a, 0xf8, 0xd4, 0x8f, 0x1b, 0x7f, 0xb7, 0xf8, 0x4d, 0xc6, 0xee, 0x08, 0x3f, 0x02, 0xd5, 0x23, 0xfc, 0x9f, 0xf2, 0x01, 0x26, 0xa0, 0xfe, 0x84, 0x41, 0xf9, 0xe9, 0x98, 0xfb, 0x95, 0x89, 0x03, 0x79, 0xd5, 0xf9, 0xe4, 0x70, 0xfe, 0xa3, 0x5c, 0x00, 0xb0, 0xa4, 0xfa, 0x77, 0xce, 0x01, 0x0b, 0x9d, 0x03, 0xdf, 0x87, 0x05, 0xbe, 0x4e, 0xff, 0x7d, 0x25, 0x00, 0x7a, 0xf2, 0xfd, 0x31, 0x2b, 0xfa, 0xb7, 0x92, 0xf9, 0xf4, 0x89, 0xfb, 0x29, 0x9c, 0xfc, 0xd0, 0xd4, 0xfa, 0xf8, 0xd9, 0x3c, 0xf3, 0x10, 0x2d, 0x5e, 0x79, 0xed, 0xf0, 0x2a, 0x0a, 0x5f, 0x31, 0x02, 0x62, 0x85, 0xea, 0x95, 0x87, 0xf9, 0xb7, 0x24, 0x15, 0x14, 0xa9, 0xfc, 0xa7, 0x1e, 0xf1, 0xde, 0x69, 0xff, 0x99, 0xe7, 0xfb, 0x35, 0x74, 0x03, 0x4b, 0x2a, 0xfe, 0xa6, 0xf8, 0xfa, 0x6d, 0xd7, 0xfa, 0xd8, 0x75, 0x02, 0x0c, 0x89, 0xfc, 0x8c, 0xbf, 0xfc, 0xff, 0x23, 0x02, 0x1e, 0x2a, 0xfb, 0x63, 0xa5, 0xfe, 0xb7, 0x89, 0x01, 0xe3, 0xe9, 0x05, 0x6a, 0xb6, 0x01, 0x53, 0x07, 0x00, 0x32, 0x58, 0xfe, 0x77, 0xc9, 0xfb, 0xa3, 0x59, 0xfa, 0xe5, 0x53, 0xfb, 0x0d, 0x85, 0xfc, 0x70, 0x8e, 0xfa, 0xa1, 0x6b, 0x3c, 0xaf, 0xa8, 0x2c, 0xf6, 0x58, 0xee, 0xfc, 0x48, 0x0e, 0x80, 0x74, 0xff, 0x9d, 0x35, 0xe8, 0xec, 0x7e, 0xfa, 0xef, 0x2f, 0x0f, 0x26, 0xa2, 0xff, 0xfd, 0x09, 0xf4, 0x38, 0x0a, 0xfc, 0x06, 0xbf, 0xfc, 0xcf, 0x33, 0x05, 0x19, 0xd5, 0xfc, 0x42, 0xb2, 0xfc, 0xd0, 0xd7, 0xfa, 0xd9, 0x57, 0x00, 0xed, 0x5c, 0x00, 0xc5, 0x54, 0xfb, 0xc0, 0xfd, 0x00, 0x69, 0xf1, 0xfc, 0x30, 0x2d, 0xfc, 0x5c, 0x38, 0xff, 0xc5, 0xeb, 0x05, 0x12, 0xad, 0x03, 0xa1, 0x46, 0x01, 0x2d, 0xe0, 0xfe, 0xa2, 0x38, 0xfd, 0x07, 0x7a, 0xfa, 0x2d, 0x0c, 0xfb, 0x7d, 0x50, 0xfd, 0x0b, 0x7f, 0xfa, 0x86, 0xba, 0x3a, 0x5e, 0xaf, 0x2c, 0x18, 0xcf, 0xf0, 0xd3, 0x9c, 0x0f, 0x72, 0xa8, 0xfe, 0x26, 0x74, 0xe7, 0x31, 0x1f, 0xf9, 0x8c, 0x69, 0x0a, 0xbd, 0x6f, 0x02, 0x5d, 0x4a, 0xf6, 0x1b, 0xdb, 0xf9, 0x3e, 0xc0, 0xfd, 0x7f, 0x8e, 0x06, 0x52, 0x19, 0xfc, 0x8a, 0x30, 0xfd, 0xb7, 0x2f, 0xfc, 0x87, 0xcc, 0xfe, 0x14, 0x9d, 0x01, 0xe0, 0x86, 0xfb, 0x5e, 0x4c, 0xfe, 0x98, 0xf2, 0xfd, 0xed, 0x37, 0xfd, 0x6e, 0xc4, 0xfc, 0xb6, 0x4a, 0x04, 0x10, 0x37, 0x05, 0x34, 0xf0, 0x04, 0x27, 0x23, 0xfe, 0x77, 0xbe, 0xfc, 0xce, 0x50, 0xfd, 0x69, 0x55, 0xfa, 0x87, 0xd6, 0xfc, 0xc8, 0x32, 0xfb, 0x40, 0xc7, 0x38, 0xf7, 0x95, 0x2c, 0xdb, 0x4c, 0xf3, 0x0d, 0x41, 0x10, 0x38, 0x4f, 0xfe, 0xe5, 0x04, 0xe8, 0xdd, 0x02, 0xf7, 0x37, 0x9a, 0x05, 0x4a, 0x9f, 0x05, 0x25, 0x7c, 0xf8, 0x05, 0xc2, 0xf7, 0xc6, 0xa0, 0xff, 0x17, 0x01, 0x07, 0xba, 0xc5, 0xfb, 0x95, 0x48, 0xfe, 0x9c, 0xb2, 0xfc, 0x7c, 0x8e, 0xfd, 0x9c, 0x96, 0x01, 0x39, 0x92, 0xfb, 0x3f, 0xae, 0xfc, 0x4b, 0x3e, 0xfe, 0x4b, 0xde, 0xff, 0xf4, 0xf4, 0xfa, 0xe4, 0x85, 0x03, 0x52, 0x6c, 0x05, 0xde, 0x78, 0x05, 0x78, 0xb8, 0x00, 0xd2, 0x11, 0xfc, 0x09, 0x90, 0xfe, 0x3f, 0x71, 0xfa, 0x06, 0xef, 0xfc, 0x3f, 0xa2, 0xfb, 0xcd, 0x9f, 0x38, 0x12, 0x88, 0x29, 0x4e, 0x0f, 0xf6, 0xe2, 0x3c, 0x11, 0x02, 0x8f, 0xfc, 0x7f, 0x33, 0xea, 0xab, 0x7f, 0xf4, 0xd9, 0x3e, 0x01, 0xa9, 0x49, 0x08, 0x1d, 0x22, 0xfb, 0xbf, 0x8d, 0xf5, 0x52, 0x20, 0x01, 0x8e, 0x73, 0x08, 0xd3, 0x15, 0xfb, 0x39, 0x6e, 0xfe, 0x1a, 0x58, 0xfc, 0x51, 0x65, 0xfd, 0xff, 0x2f, 0x00, 0xa2, 0x32, 0xfb, 0xef, 0xfe, 0xfd, 0x99, 0xf2, 0xfc, 0x8a, 0x4c, 0x01, 0x08, 0xef, 0xfd, 0x98, 0x5f, 0x01, 0x46, 0xd9, 0x02, 0x7e, 0x91, 0x05, 0xef, 0x3c, 0x04, 0xf0, 0xc2, 0xfb, 0xb9, 0x57, 0xfd, 0x16, 0x0a, 0xfd, 0xa8, 0xce, 0xfc, 0xed, 0x34, 0xfb, 0xa3, 0xe1, 0x35, 0xce, 0x27, 0x28, 0x95, 0x31, 0xfa, 0x47, 0x34, 0x10, 0xa3, 0x57, 0xfb, 0xce, 0x31, 0xef, 0x0c, 0xfd, 0xef, 0x4f, 0x56, 0xfc, 0x97, 0x3f, 0x0d, 0x55, 0x7d, 0xfc, 0x22, 0x59, 0xf3, 0xc5, 0xdd, 0x03, 0xa1, 0x4f, 0x08, 0xde, 0x8e, 0xfa, 0x9b, 0x0a, 0xff, 0x62, 0x3e, 0xfa, 0x3c, 0xba, 0xfd, 0xbe, 0xf6, 0x00, 0x83, 0xcc, 0xf8, 0x9d, 0xeb, 0xff, 0x87, 0x91, 0xfe, 0x57, 0xbf, 0xff, 0x55, 0x33, 0x01, 0x4c, 0xef, 0x00, 0x20, 0xf9, 0xff, 0xda, 0xd3, 0x04, 0x21, 0x21, 0x04, 0xf7, 0x98, 0xfe, 0x73, 0x9e, 0xfd, 0x5b, 0xd5, 0xfc, 0x8d, 0x53, 0xfe, 0x5b, 0x13, 0xfb, 0xca, 0x2d, 0x35, 0x90, 0x0a, 0x25, 0xf5, 0x29, 0xfd, 0xbd, 0x9b, 0x0f, 0x06, 0x51, 0xf8, 0x63, 0xf6, 0xf4, 0xb5, 0xcb, 0xee, 0x13, 0x06, 0xf6, 0x04, 0xee, 0x10, 0x34, 0xd5, 0xff, 0x39, 0x39, 0xf1, 0x6d, 0x34, 0x05, 0xe8, 0x6f, 0x08, 0x8d, 0x75, 0xf9, 0xe4, 0xa4, 0xfe, 0x38, 0x71, 0xf9, 0x03, 0xe0, 0xfe, 0x43, 0x7a, 0x00, 0xe2, 0xdc, 0xf7, 0x48, 0xf7, 0x01, 0xbf, 0x68, 0x00, 0xb8, 0xd2, 0xfd, 0xfa, 0x57, 0x02, 0x71, 0xe5, 0x02, 0x74, 0x31, 0xfe, 0xe1, 0x6e, 0x02, 0x49, 0x90, 0x02, 0x79, 0x1d, 0x01, 0x6f, 0xcf, 0xff, 0x79, 0xeb, 0xfb, 0xea, 0x4c, 0xff, 0x74, 0x4f, 0xfc, 0x58, 0x19, 0x38, 0xe2, 0x67, 0x21, 0xcc, 0xfd, 0xf8, 0xfb, 0x09, 0x13, 0xf9, 0xff, 0xf6, 0xdc, 0x5a, 0xf4, 0xce, 0x29, 0xf1, 0xc5, 0x8f, 0xf5, 0x14, 0xe3, 0x0f, 0xe4, 0x56, 0x01, 0xd0, 0xc4, 0xf2, 0x78, 0x45, 0x04, 0x25, 0x56, 0x08, 0x34, 0x52, 0xf8, 0xe6, 0xbc, 0xfd, 0x2c, 0x90, 0xfa, 0x64, 0x2b, 0xff, 0xef, 0xec, 0x00, 0xa5, 0x42, 0xf8, 0x6b, 0xe6, 0x01, 0x77, 0x3a, 0x01, 0x2b, 0xf3, 0xfe, 0x84, 0x3f, 0x02, 0x46, 0x84, 0x02, 0x89, 0x6d, 0xfe, 0x6f, 0xbe, 0x00, 0xae, 0xd4, 0x01, 0xca, 0xa7, 0x00, 0x97, 0x5f, 0x01, 0x54, 0x1e, 0xfe, 0x7b, 0xc9, 0xfd, 0xf2, 0x40, 0xfe, 0x44, 0xcb, 0x3a, 0x4a, 0x9a, 0x1c, 0x9a, 0x6a, 0xf3, 0x45, 0xa7, 0x19, 0x7f, 0xf4, 0xf5, 0xea, 0x99, 0xef, 0x73, 0x09, 0xf6, 0x1c, 0x71, 0xf7, 0xdb, 0x96, 0x0c, 0xe3, 0x94, 0x02, 0x57, 0x51, 0xf3, 0xd9, 0x39, 0x02, 0x52, 0x7c, 0x09, 0x7f, 0xd7, 0xf7, 0xfc, 0x89, 0xfb, 0xfb, 0x98, 0xfc, 0xec, 0x30, 0x00, 0x53, 0xbc, 0x00, 0x20, 0xeb, 0xf8, 0x62, 0xd2, 0x00, 0xb6, 0xbb, 0x01, 0xb9, 0x8f, 0x00, 0xbe, 0x22, 0x01, 0xce, 0xc8, 0x01, 0x21, 0x4b, 0xff, 0x04, 0x76, 0xff, 0xa1, 0x22, 0x01, 0x4c, 0x50, 0x00, 0x68, 0xd8, 0x00, 0xf7, 0xbd, 0x00, 0x17, 0xa1, 0xfd, 0xa9, 0x0c, 0xfe, 0x01, 0xdf, 0x39, 0x35, 0x82, 0x18, 0x89, 0x0f, 0xf0, 0xa1, 0x99, 0x20, 0x60, 0xf0, 0xf6, 0x27, 0xc8, 0xe9, 0xa3, 0x1d, 0xfa, 0xdb, 0x60, 0xfc, 0xed, 0x1c, 0x08, 0xf9, 0x9a, 0x00, 0x03, 0x3f, 0xf6, 0x16, 0x7d, 0x00, 0xad, 0x7d, 0x09, 0x1a, 0x84, 0xf8, 0x91, 0xa0, 0xfa, 0x35, 0xb5, 0xfe, 0x63, 0x0d, 0x00, 0x05, 0xe5, 0xff, 0xfd, 0x76, 0xfa, 0x54, 0x3c, 0x01, 0xa0, 0x62, 0x00, 0xc8, 0xe5, 0x00, 0x38, 0xa8, 0x01, 0xa2, 0x6c, 0x01, 0x44, 0x10, 0xff, 0xdb, 0x1b, 0x00, 0xc3, 0xf3, 0xff, 0x0e, 0x4a, 0xff, 0x0f, 0x2d, 0x02, 0xa1, 0x4d, 0x00, 0x17, 0xf5, 0xfe, 0xbc, 0xe6, 0xfe, 0x98, 0x40, 0x38, 0xde, 0xe9, 0x14, 0x0f, 0xf1, 0xee, 0xbf, 0xcf, 0x24, 0x72, 0x51, 0xf7, 0x80, 0xd7, 0xe5, 0x26, 0x24, 0xff, 0x66, 0x27, 0xfe, 0x52, 0xe4, 0x02, 0x46, 0x99, 0x01, 0x61, 0x19, 0xf8, 0xbc, 0x04, 0xfe, 0x5e, 0x8d, 0x09, 0x15, 0x87, 0xfa, 0x97, 0x60, 0xfa, 0x81, 0xef, 0xff, 0xd9, 0x19, 0x00, 0x62, 0x80, 0xfe, 0xb0, 0x3e, 0xfc, 0x15, 0x75, 0x01, 0x31, 0x05, 0xff, 0xa6, 0xa4, 0x00, 0xd4, 0x1d, 0x02, 0x63, 0x4a, 0x01, 0x24, 0xc2, 0xfe, 0xc1, 0x4e, 0x00, 0x64, 0x30, 0x00, 0xbb, 0x2d, 0xff, 0x84, 0xa0, 0x01, 0x63, 0x59, 0x00, 0x15, 0x50, 0xff, 0x54, 0xfc, 0xff, 0x7f, 0xe7, 0x34, 0xb7, 0xdb, 0x13, 0x07, 0x67, 0xef, 0x17, 0xda, 0x22, 0xf3, 0xce, 0xf8, 0xea, 0x33, 0xe9, 0x67, 0x6a, 0x00, 0x1c, 0xf7, 0xfb, 0x57, 0x58, 0x01, 0xb8, 0x1d, 0x02, 0x9f, 0xa2, 0xf9, 0xe2, 0xdd, 0xfc, 0xa7, 0xf1, 0x08, 0xa5, 0x6c, 0xfc, 0x0f, 0xb6, 0xfa, 0x7c, 0x5b, 0x00, 0xd3, 0xe9, 0xff, 0xcd, 0x62, 0xfe, 0x70, 0xa4, 0xfc, 0x30, 0xd9, 0x00, 0xe6, 0xa2, 0xff, 0x70, 0xa6, 0x00, 0x71, 0xf7, 0x00, 0xe6, 0x82, 0x01, 0x4e, 0x0f, 0xff, 0xd6, 0xe2, 0xff, 0xfa, 0x57, 0x01, 0xd6, 0xcf, 0xff, 0x1d, 0xf6, 0xff, 0xac, 0x33, 0x00, 0xcc, 0xc9, 0xff, 0xd8, 0xe2, 0xff, 0x38, 0x69, 0x30, 0x91, 0x78, 0x13, 0x0d, 0xe3, 0xf0, 0x71, 0xec, 0x1f, 0x83, 0x14, 0xfc, 0x2f, 0xf9, 0xea, 0x1d, 0x8f, 0xff, 0x90, 0x22, 0xfd, 0x91, 0x3a, 0xff, 0x7d, 0x2b, 0x01, 0xcd, 0x1c, 0xfc, 0xa4, 0xe2, 0xfc, 0x16, 0x69, 0x07, 0x15, 0x38, 0xfe, 0x62, 0x96, 0xfb, 0x63, 0x68, 0xff, 0xbc, 0x86, 0x00, 0xa2, 0xcb, 0xfe, 0xb6, 0xf7, 0xfb, 0xc9, 0x70, 0x00, 0x70, 0xa3, 0x00, 0xc6, 0x84, 0x00, 0x58, 0x02, 0x00, 0x7d, 0x1b, 0x01, 0x76, 0x92, 0xff, 0xbd, 0xb3, 0x00, 0x48, 0x6b, 0x01, 0xdf, 0xf6, 0xff, 0x34, 0x9e, 0xff, 0xa7, 0x6d, 0xff, 0x08, 0x0a, 0x00, 0x0d, 0xad, 0xff, 0x1e, 0xa2, 0x26, 0x09, 0x0e, 0x16, 0x91, 0xc7, 0xfd, 0x6b, 0x44, 0x0f, 0xad, 0xd8, 0xf8, 0xd2, 0x48, 0xf9, 0xa5, 0x83, 0xfb, 0x45, 0x50, 0xfb, 0x26, 0xb2, 0x04, 0xeb, 0xe9, 0xff, 0xe3, 0x78, 0xf9, 0xd5, 0x9c, 0x02, 0x71, 0xa4, 0x05, 0xbd, 0x6d, 0xfc, 0x04, 0xda, 0xfd, 0xf5, 0xdd, 0xfc, 0x48, 0x83, 0x00, 0x2c, 0x23, 0xff, 0xdc, 0x9e, 0xfb, 0x99, 0xf6, 0x00, 0xd2, 0x34, 0xff, 0xcb, 0xf3, 0xfe, 0xfd, 0xcf, 0x00, 0x3a, 0x20, 0x01, 0x7c, 0xa7, 0x01, 0xc7, 0x0e, 0x03, 0xdc, 0x52, 0xff, 0x5a, 0xef, 0xfd, 0x39, 0x4e, 0xff, 0xd7, 0x40, 0xfe, 0x69, 0x70, 0xff, 0x9c, 0xf5, 0x00, 0xff, 0x80, 0x21, 0x65, 0xbb, 0x15, 0x91, 0xa3, 0xfe, 0x99, 0xd9, 0x0d, 0x0a, 0x42, 0xfc, 0x28, 0x79, 0xf8, 0xf1, 0x74, 0xfc, 0xd8, 0x6a, 0xfc, 0xa2, 0x8c, 0x02, 0xd7, 0x41, 0x00, 0x27, 0xd5, 0xfa, 0x66, 0xff, 0x01, 0x16, 0xf6, 0x04, 0xf4, 0x7c, 0xfd, 0x54, 0xc1, 0xfd, 0x09, 0x25, 0xfd, 0x18, 0x97, 0x00, 0x1b, 0xc0, 0xfe, 0x31, 0xf6, 0xfb, 0x39, 0xfd, 0x00, 0x84, 0xdf, 0xfe, 0xed, 0xcc, 0xfe, 0x73, 0x46, 0x01, 0xad, 0x12, 0x01, 0x3f, 0x68, 0x01, 0xc7, 0x32, 0x02, 0xde, 0x23, 0xff, 0xc3, 0x15, 0xff, 0xa1, 0x5f, 0xff, 0xa2, 0xfc, 0xfd, 0x86, 0xd9, 0xff, 0x73, 0xec, 0x00, 0xb9, 0x45, 0x1d, 0x08, 0xf1, 0x14, 0x08, 0x9d, 0xff, 0x1c, 0x9b, 0x0d, 0x04, 0xd0, 0xfd, 0x8f, 0x2d, 0xf8, 0x54, 0xf1, 0xfd, 0x77, 0xc0, 0xfc, 0x05, 0x7a, 0x01, 0xe2, 0x59, 0x00, 0xb9, 0x1a, 0xfc, 0x13, 0xe8, 0x01, 0x9e, 0x1f, 0x04, 0x49, 0x52, 0xfe, 0xf5, 0x1c, 0xfe, 0x1e, 0xbe, 0xfd, 0xc9, 0x33, 0x00, 0x2f, 0xa1, 0xfe, 0xc1, 0xe2, 0xfc, 0x85, 0x9a, 0x00, 0x63, 0xba, 0xfe, 0x8e, 0x3c, 0xff, 0xcb, 0x2c, 0x01, 0x00, 0x29, 0x01, 0xf9, 0x7b, 0x01, 0xde, 0x28, 0x01, 0xae, 0x3a, 0xff, 0x7f, 0x2b, 0x00, 0x8c, 0x9a, 0xff, 0xdf, 0x1d, 0xfe, 0x75, 0x08, 0x00, 0xcf, 0x29, 0x01, 0xd7, 0x0a, 0x19, 0xb3, 0x6e, 0x13, 0x0d, 0x12, 0x02, 0xc4, 0xaf, 0x0c, 0xe5, 0xff, 0xfd, 0x2d, 0xe8, 0xf9, 0xb3, 0x4b, 0xfe, 0x3a, 0xba, 0xfc, 0xfc, 0x7b, 0x01, 0xf4, 0x36, 0x00, 0x0f, 0xde, 0xfc, 0xf8, 0xc2, 0x01, 0x3b, 0xb9, 0x03, 0xaa, 0xb1, 0xfe, 0xf7, 0x6f, 0xfe, 0xdb, 0x69, 0xfe, 0xe2, 0xba, 0xff, 0x0c, 0xbe, 0xfe, 0xfd, 0x6c, 0xfd, 0xfe, 0x3f, 0x00, 0xe4, 0x17, 0xff, 0x40, 0x67, 0xff, 0x17, 0xde, 0x00, 0x0d, 0x4a, 0x01, 0x24, 0x47, 0x01, 0x86, 0x77, 0x00, 0x7c, 0xe5, 0xff, 0x1a, 0xb9, 0x00, 0xdb, 0xe7, 0xff, 0x06, 0xc1, 0xfe, 0x50, 0xf4, 0xff, 0x74, 0x78, 0x01, 0x12, 0xa2, 0x14, 0x35, 0x18, 0x12, 0xa9, 0x19, 0x05, 0x01, 0xbd, 0x0a, 0x61, 0x7c, 0xfe, 0xa9, 0x8a, 0xfc, 0x39, 0xdb, 0xfd, 0x4e, 0x8a, 0xfc, 0x00, 0xf4, 0x01, 0xd7, 0x7b, 0x00, 0xc5, 0xf9, 0xfc, 0xeb, 0x9e, 0x01, 0x8e, 0x79, 0x03, 0xff, 0xee, 0xfe, 0x50, 0x24, 0xff, 0xab, 0x9e, 0xfe, 0x17, 0x4d, 0xff, 0xde, 0x14, 0xff, 0x0c, 0x01, 0xfe, 0x4b, 0xf8, 0xff, 0x54, 0x3c, 0xff, 0x91, 0xa5, 0xff, 0xd5, 0x97, 0x00, 0xa9, 0x47, 0x01, 0xd6, 0xe6, 0x00, 0x67, 0x8b, 0x00, 0xdc, 0xc1, 0x00, 0x33, 0x22, 0x01, 0x30, 0x5f, 0x00, 0xc0, 0xff, 0xfe, 0x1c, 0x23, 0x00, 0x3d, 0x3a, 0x01, 0x9a, 0x4f, 0x10, 0xcb, 0x95, 0x10, 0x0c, 0xcc, 0x07, 0xc8, 0x50, 0x09, 0xa1, 0x50, 0xff, 0x2f, 0x9b, 0xfe, 0x95, 0x72, 0xfd, 0xf6, 0x79, 0xfc, 0x35, 0x85, 0x02, 0x10, 0xbf, 0x00, 0x5d, 0xfd, 0xfc, 0xaa, 0x3a, 0x01, 0x06, 0x25, 0x03, 0xe5, 0xee, 0xff, 0xba, 0x77, 0xff, 0x1e, 0x14, 0xfe, 0x2a, 0x80, 0xff, 0x48, 0xe5, 0xff, 0x63, 0x0d, 0xfe, 0xa0, 0x9c, 0xff, 0x58, 0x93, 0xff, 0x0c, 0x8f, 0xff, 0x75, 0xc8, 0x00, 0x84, 0x3d, 0x01, 0x22, 0x83, 0x00, 0xab, 0x41, 0x01, 0x08, 0xc3, 0x01, 0xcf, 0x86, 0x01, 0x43, 0x22, 0x00, 0x55, 0x05, 0xff, 0x05, 0x50, 0x00, 0x4f, 0xa0, 0x00, 0xc6, 0xd5, 0x0d, 0x10, 0x7e, 0x0f, 0xe1, 0x51, 0x08, 0x1a, 0x1b, 0x08, 0xbe, 0x03, 0x00, 0x4f, 0x94, 0xff, 0x56, 0xfe, 0xfd, 0xc0, 0xe9, 0xfc, 0xc2, 0x0e, 0x02, 0x5c, 0xde, 0x00, 0xf2, 0xc0, 0xfd, 0x3a, 0xfb, 0x00, 0xc1, 0x76, 0x02, 0xb6, 0x79, 0x00, 0x15, 0xb5, 0xff, 0x90, 0xe0, 0xfd, 0x97, 0xf1, 0xff, 0xe4, 0x46, 0x00, 0xa0, 0xe4, 0xfd, 0xbb, 0x77, 0xff, 0x98, 0xe0, 0xff, 0xbe, 0xd8, 0xff, 0xce, 0xf4, 0x00, 0x79, 0x31, 0x01, 0x4f, 0xe9, 0x00, 0x3c, 0x26, 0x02, 0xa7, 0x3e, 0x02, 0xef, 0x05, 0x01, 0xc4, 0x6a, 0xff, 0x3e, 0x2d, 0xff, 0xed, 0x15, 0x00, 0x08, 0x4d, 0x00, 0x7c, 0x2f, 0x0c, 0xb6, 0x3f, 0x0e, 0x1a, 0x60, 0x08, 0x9d, 0x8e, 0x07, 0xd8, 0x21, 0x00, 0x2b, 0x79, 0x00, 0x31, 0xf7, 0xfe, 0xb9, 0xe9, 0xfc, 0x8c, 0xb8, 0x01, 0x07, 0x66, 0x01, 0xf2, 0x7d, 0xfe, 0x21, 0x68, 0x00, 0x09, 0xfe, 0x01, 0xf4, 0x3e, 0x01, 0x92, 0xd2, 0xff, 0x7f, 0xf1, 0xfd, 0x55, 0x59, 0x00, 0x35, 0x3b, 0x00, 0x3c, 0x06, 0xfe, 0x06, 0xf3, 0xff, 0xbe, 0xf3, 0xff, 0x19, 0x62, 0x00, 0xba, 0xd1, 0x01, 0xb6, 0x5b, 0x01, 0xf2, 0x5e, 0x01, 0x44, 0x75, 0x02, 0x87, 0xb7, 0x01, 0xbb, 0x34, 0x00, 0xda, 0x38, 0xff, 0xf6, 0x2b, 0xff, 0x6b, 0x44, 0x00, 0x21, 0x89, 0x00, 0x59, 0x07, 0x0b, 0xd5, 0xbe, 0x0c, 0x06, 0xe5, 0x07, 0x9e, 0xa1, 0x07, 0x62, 0x95, 0x00, 0xf9, 0x7b, 0x00, 0x11, 0x15, 0xff, 0xa2, 0xac, 0xfd, 0x09, 0xe8, 0x01, 0xde, 0x26, 0x01, 0xc1, 0x78, 0xfe, 0x26, 0x60, 0x00, 0x25, 0x23, 0x02, 0xef, 0x52, 0x01, 0x7c, 0x98, 0xff, 0x52, 0x1a, 0xfe, 0xc9, 0xaf, 0x00, 0x5f, 0x46, 0x00, 0x38, 0x2e, 0xfe, 0x02, 0x67, 0x00, 0x41, 0xa7, 0x00, 0x1b, 0x67, 0x01, 0x19, 0x06, 0x02, 0x16, 0xc3, 0x00, 0x5e, 0x5a, 0x01, 0xce, 0x12, 0x02, 0x96, 0x98, 0x00, 0x53, 0x96, 0xff, 0x20, 0x94, 0xff, 0x5c, 0x8b, 0xff, 0xe1, 0xec, 0xff, 0x44, 0xe4, 0xff, 0xaf, 0xb6, 0x0a, 0x6a, 0x3e, 0x0c, 0xa9, 0xc9, 0x06, 0x9a, 0xb1, 0x06, 0xc3, 0xea, 0x00, 0x10, 0xd2, 0x00, 0x6d, 0x94, 0xff, 0x27, 0x32, 0xfe, 0xf8, 0xaf, 0x01, 0x8e, 0x0f, 0x01, 0x53, 0xe8, 0xfe, 0xac, 0xdd, 0x00, 0x00, 0xf2, 0x01, 0xef, 0x95, 0x00, 0x67, 0xfa, 0xff, 0xc1, 0x12, 0xff, 0x3f, 0x80, 0x00, 0xe3, 0x5f, 0x00, 0x2e, 0x75, 0xff, 0xe2, 0x69, 0x01, 0x61, 0x5d, 0x01, 0x59, 0x6e, 0x01, 0x2d, 0xf5, 0x00, 0x0c, 0x6c, 0x00, 0x24, 0x30, 0x01, 0xff, 0x2e, 0x01, 0x89, 0x5c, 0x00, 0x02, 0xc8, 0xff, 0x5d, 0x7b, 0xff, 0xbd, 0x57, 0xff, 0x86, 0xe7, 0xff, 0x7b, 0xc9, 0xff, 0xc7, 0xc7, 0x09, 0x8f, 0x28, 0x0b, 0xc8, 0x80, 0x06, 0xf0, 0xb2, 0x06, 0x8f, 0x42, 0x01, 0xb8, 0xdb, 0x00, 0xb5, 0xae, 0xff, 0xbc, 0xbc, 0xfe, 0x96, 0xe3, 0x01, 0x2e, 0x34, 0x01, 0x19, 0x07, 0xff, 0x1a, 0xc2, 0x00, 0x86, 0xe9, 0x01, 0x78, 0xc9, 0x00, 0xb9, 0x58, 0x00, 0x87, 0x9f, 0xff, 0xec, 0x44, 0x01, 0x52, 0x71, 0x01, 0xa0, 0x53, 0x00, 0x17, 0x2e, 0x01, 0x79, 0x10, 0x01, 0x0c, 0xa7, 0x00, 0x5d, 0x04, 0x00, 0x9b, 0x7a, 0x00, 0xeb, 0x02, 0x01, 0xa3, 0x08, 0x01, 0x30, 0x20, 0x00, 0xfd, 0x7a, 0xff, 0x34, 0x80, 0xff, 0x87, 0x5a, 0xff, 0x15, 0xdb, 0xff, 0xe8, 0x77, 0xff, 0x1b, 0x0f, 0x09, 0xe6, 0x81, 0x0a, 0xaf, 0x32, 0x06, 0xb4, 0x61, 0x06, 0x99, 0x7e, 0x01, 0xae, 0xbb, 0x00, 0x8a, 0xf5, 0xff, 0xd5, 0x9b, 0xff, 0x14, 0x07, 0x02, 0x98, 0xd8, 0x00, 0x3d, 0x1f, 0xff, 0x2f, 0x78, 0x01, 0xa7, 0xcd, 0x01, 0x28, 0xcb, 0x00, 0x1c, 0xe3, 0x01, 0xe3, 0x0a, 0x01, 0x82, 0x77, 0x01, 0xda, 0x57, 0x01, 0xed, 0xec, 0xff, 0x39, 0x82, 0x00, 0x15, 0x88, 0x00, 0xb0, 0xc2, 0xff, 0x98, 0x3b, 0x00, 0x30, 0xf3, 0x00, 0x8b, 0x6e, 0x00, 0xe3, 0x84, 0x00, 0xce, 0xff, 0xff, 0x24, 0x83, 0xff, 0xc9, 0x68, 0xff, 0x43, 0x57, 0xff, 0xd6, 0x9d, 0xff, 0xf6, 0x49, 0xff, 0x9e, 0xb5, 0x08, 0x0e, 0x51, 0x0a, 0x88, 0xf4, 0x05, 0x30, 0x74, 0x05, 0x8b, 0x29, 0x01, 0xac, 0x51, 0x01, 0x9b, 0xe1, 0x00, 0x9f, 0x79, 0xff, 0x3d, 0x92, 0x01, 0xa9, 0x7d, 0x01, 0xab, 0xc0, 0xff, 0x7e, 0x7b, 0x01, 0x5a, 0xd7, 0x02, 0x3f, 0x6e, 0x02, 0xaa, 0x6c, 0x02, 0x42, 0xae, 0x00, 0x47, 0x6a, 0x00, 0x06, 0x78, 0x00, 0x36, 0x69, 0xff, 0xf5, 0x37, 0x00, 0xae, 0x61, 0x00, 0x44, 0xc4, 0xff, 0xbc, 0x26, 0x00, 0x46, 0x79, 0x00, 0x79, 0x74, 0x00, 0x2a, 0x2f, 0x00, 0x5f, 0x97, 0xff, 0x8e, 0x5b, 0xff, 0x56, 0x4c, 0xff, 0xa5, 0x66, 0xff, 0x5d, 0x51, 0xff, 0x27, 0x03, 0xff, 0x30, 0x10, 0x08, 0x9d, 0x5e, 0x09, 0x12, 0x18, 0x06, 0xc6, 0x0e, 0x06, 0x99, 0x71, 0x01, 0xf7, 0xbc, 0x00, 0x7a, 0xab, 0x00, 0x9a, 0xf8, 0x00, 0x40, 0x11, 0x02, 0xab, 0x1f, 0x01, 0xe2, 0x47, 0x01, 0x80, 0x68, 0x03, 0x11, 0x4e, 0x03, 0x86, 0xcd, 0x01, 0x4a, 0x70, 0x01, 0xe1, 0x8b, 0xff, 0x64, 0xac, 0xff, 0xa9, 0x22, 0x00, 0x38, 0xa6, 0xff, 0x40, 0x67, 0x00, 0x09, 0xcb, 0xff, 0xf9, 0xae, 0xff, 0xdb, 0x3a, 0x00, 0x2c, 0x72, 0x00, 0x65, 0x18, 0x00, 0xf8, 0xa9, 0xff, 0x11, 0x82, 0xff, 0xba, 0x32, 0xff, 0xee, 0x6b, 0xff, 0xf0, 0x46, 0xff, 0x5c, 0xfb, 0xfe, 0x7d, 0xe8, 0xfe, 0x09, 0xd0, 0x07, 0x61, 0xc9, 0x09, 0x08, 0x7d, 0x06, 0x81, 0x00, 0x05, 0x22, 0x90, 0x00, 0xfd, 0xad, 0x01, 0x73, 0xcb, 0x01, 0x13, 0x73, 0x01, 0xcf, 0x4f, 0x03, 0xa9, 0x42, 0x03, 0xc2, 0x07, 0x02, 0xca, 0x8d, 0x02, 0x25, 0x20, 0x02, 0x4b, 0x3a, 0x00, 0x22, 0x34, 0x00, 0x28, 0x67, 0xff, 0x70, 0xff, 0xff, 0x11, 0x19, 0x00, 0x0a, 0x66, 0xff, 0xe1, 0x13, 0x00, 0xae, 0xec, 0xff, 0xaf, 0xe3, 0xff, 0xb8, 0x11, 0x00, 0xe7, 0x22, 0x00, 0x17, 0x6a, 0xff, 0x1b, 0x82, 0xff, 0x31, 0x77, 0xff, 0x2c, 0x31, 0xff, 0x0d, 0x6d, 0xff, 0xea, 0xed, 0xfe, 0xbc, 0xe9, 0xfe, 0x3d, 0xfc, 0xfe, 0x55, 0xce, 0x07, 0x2c, 0xbe, 0x09, 0x05, 0x85, 0x06, 0xdc, 0xf1, 0x04, 0xf7, 0x81, 0x00, 0xd4, 0x06, 0x02, 0x67, 0x2f, 0x04, 0xf2, 0x88, 0x04, 0x2e, 0x43, 0x03, 0xb2, 0x0e, 0x02, 0x4a, 0x19, 0x01, 0x37, 0xac, 0x00, 0x35, 0x0d, 0x01, 0xb7, 0xba, 0xff, 0xa9, 0x17, 0x00, 0x6d, 0xd2, 0xff, 0xb2, 0x4b, 0xff, 0x4b, 0xc9, 0xff, 0x61, 0xd2, 0xff, 0xb3, 0xfe, 0xff, 0x57, 0xeb, 0xff, 0xbd, 0xad, 0xff, 0x27, 0x90, 0xff, 0x7d, 0xd2, 0xff, 0xa1, 0x3e, 0xff, 0x1a, 0x35, 0xff, 0xc1, 0x67, 0xff, 0x1e, 0x32, 0xff, 0x34, 0x44, 0xff, 0x39, 0x02, 0xff, 0x34, 0xda, 0xfe, 0xcf, 0x14, 0xff, 0x25, 0x8b, 0x07, 0x8d, 0x7c, 0x09, 0xe9, 0x7d, 0x06, 0x10, 0xae, 0x05, 0xaa, 0xfb, 0x02, 0xac, 0xe6, 0x03, 0x80, 0x75, 0x04, 0x88, 0xc0, 0x04, 0x69, 0x74, 0x02, 0x5f, 0x54, 0xff, 0xcb, 0x50, 0xff, 0x1e, 0xf9, 0x00, 0x77, 0x0f, 0x01, 0x3f, 0x49, 0xff, 0x4a, 0x8f, 0xff, 0x24, 0x8f, 0xff, 0x70, 0x83, 0xff, 0xe2, 0xb5, 0xff, 0x27, 0xc2, 0xff, 0x29, 0xde, 0xff, 0x07, 0x78, 0xff, 0x56, 0x77, 0xff, 0x71, 0x85, 0xff, 0xac, 0x3a, 0xff, 0x62, 0xe6, 0xfe, 0xa5, 0x45, 0xff, 0xba, 0x38, 0xff, 0xe7, 0x50, 0xff, 0xbe, 0x48, 0xff, 0xf5, 0xd3, 0xfe, 0x48, 0x15, 0xff, 0x12, 0x3b, 0xff, 0xb0, 0xcc, 0x06, 0x6c, 0xe2, 0x0a, 0xa4, 0x2d, 0x09, 0x3f, 0x06, 0x07, 0xd0, 0xbe, 0x03, 0xd4, 0xbc, 0x03, 0xaa, 0x2d, 0x04, 0xf8, 0x9c, 0x02, 0x12, 0x06, 0x00, 0xd8, 0x12, 0x00, 0xf0, 0xee, 0xff, 0xd9, 0x2d, 0x00, 0x8f, 0x98, 0x00, 0x8f, 0x5b, 0xff, 0x22, 0x00, 0x00, 0x58, 0x91, 0xff, 0xc0, 0x4b, 0xff, 0xb6, 0x05, 0x00, 0x6f, 0x9a, 0xff, 0x57, 0x8d, 0xff, 0x44, 0xbb, 0xff, 0xc5, 0x82, 0xff, 0xbe, 0x0f, 0xff, 0xeb, 0x01, 0xff, 0x66, 0x0e, 0xff, 0xf9, 0x70, 0xff, 0x00, 0x7a, 0xff, 0xb2, 0x63, 0xff, 0x88, 0x50, 0xff, 0x70, 0x0c, 0xff, 0x6a, 0x3c, 0xff, 0x27, 0x3b, 0xff, 0xcc, 0x9a, 0x08, 0x47, 0xdc, 0x0f, 0x07, 0x75, 0x0a, 0x09, 0xfd, 0x03, 0x77, 0x0a, 0x02, 0xbf, 0xa7, 0x03, 0xfa, 0x0b, 0x02, 0xd2, 0x08, 0x01, 0xd6, 0x96, 0x01, 0x29, 0xc6, 0xff, 0x2b, 0x06, 0xff, 0x53, 0xd9, 0xff, 0xe8, 0x38, 0x01, 0xae, 0xde, 0xff, 0x61, 0x04, 0xff, 0x07, 0xd2, 0xff, 0xe1, 0x7a, 0xff, 0x5f, 0x44, 0xff, 0xbd, 0xbc, 0xff, 0x41, 0xd7, 0xff, 0xd3, 0x7a, 0xff, 0x1f, 0x2c, 0xff, 0x7b, 0xe9, 0xfe, 0x94, 0x0c, 0xff, 0xca, 0x55, 0xff, 0xea, 0x75, 0xff, 0x6d, 0x86, 0xff, 0x57, 0x69, 0xff, 0x3e, 0x37, 0xff, 0x8b, 0x23, 0xff, 0x84, 0x28, 0xff, 0x36, 0x12, 0xff, 0x6c, 0x04, 0x0a, 0xd3, 0x0f, 0x10, 0x95, 0x5f, 0x09, 0x10, 0xc1, 0x04, 0x0d, 0x08, 0x01, 0x20, 0xee, 0x00, 0x4c, 0x64, 0x03, 0x66, 0xe5, 0x02, 0xa4, 0xc4, 0xff, 0x5a, 0x7b, 0xff, 0xb1, 0xae, 0x00, 0x27, 0xd7, 0xff, 0x34, 0x5f, 0x00, 0x13, 0x2c, 0x00, 0x6c, 0x93, 0xff, 0xc7, 0x52, 0xff, 0x82, 0x1e, 0xff, 0x35, 0x40, 0xff, 0x82, 0xad, 0xff, 0x63, 0xca, 0xff, 0xd9, 0x6e, 0xff, 0xd5, 0x59, 0xff, 0xd9, 0xd5, 0xfe, 0xd1, 0x2a, 0xff, 0xdb, 0x6b, 0xff, 0x73, 0x59, 0xff, 0x5b, 0x53, 0xff, 0x93, 0x54, 0xff, 0xc0, 0x49, 0xff, 0xef, 0x23, 0xff, 0xed, 0x0a, 0xff, 0xe6, 0x1b, 0xff, 0x7b, 0x83, 0x07, 0x25, 0x7f, 0x0d, 0xb8, 0x2e, 0x0a, 0x86, 0x7d, 0x05, 0x78, 0x25, 0x01, 0xe2, 0xb9, 0x01, 0xde, 0xb4, 0x03, 0x58, 0xba, 0x02, 0x19, 0x9b, 0x00, 0x43, 0xfb, 0xff, 0x82, 0xec, 0x00, 0xa7, 0xe9, 0x00, 0xee, 0x74, 0x00, 0x15, 0xe5, 0xff, 0x35, 0x17, 0x00, 0x93, 0x72, 0xff, 0x40, 0x0f, 0xff, 0xb9, 0x43, 0xff, 0xbf, 0x31, 0xff, 0x3c, 0x77, 0xff, 0x9a, 0xe9, 0xff, 0x5f, 0x82, 0xff, 0xfb, 0xf0, 0xfe, 0x88, 0x89, 0xff, 0x27, 0x67, 0xff, 0x1d, 0x37, 0xff, 0x17, 0x29, 0xff, 0x81, 0x30, 0xff, 0x0c, 0x2f, 0xff, 0x9f, 0x22, 0xff, 0x48, 0x3b, 0xff, 0xce, 0x1b, 0xff, 0xe5, 0x29, 0x07, 0xd7, 0xe1, 0x0c, 0x99, 0xf5, 0x07, 0x4e, 0xa0, 0x03, 0xdc, 0x82, 0x02, 0xa0, 0xc6, 0x02, 0x00, 0xe4, 0x02, 0xce, 0x92, 0x02, 0xb6, 0x0d, 0x02, 0x01, 0xb0, 0x00, 0x0f, 0x9d, 0x00, 0x8c, 0xd0, 0x01, 0xa7, 0x82, 0x01, 0x67, 0x4f, 0x00, 0xac, 0x1b, 0x00, 0x12, 0xe8, 0xff, 0x15, 0x75, 0xff, 0x1e, 0xe7, 0xfe, 0xb9, 0x47, 0xff, 0x65, 0x82, 0xff, 0xbc, 0x5c, 0xff, 0x0d, 0xa6, 0xff, 0x28, 0xa8, 0xff, 0x70, 0xa3, 0xff, 0x44, 0x8d, 0xff, 0xfb, 0x8c, 0xff, 0x09, 0x29, 0xff, 0x9c, 0xef, 0xfe, 0x84, 0xfc, 0xfe, 0xb6, 0x1e, 0xff, 0xd8, 0x3e, 0xff, 0x7e, 0x25, 0xff, 0x50, 0xd0, 0x06, 0x76, 0x14, 0x0c, 0x58, 0x97, 0x06, 0x71, 0xec, 0x02, 0x91, 0x89, 0x03, 0xbb, 0x67, 0x02, 0xe2, 0x41, 0x01, 0xf4, 0xc2, 0x02, 0x47, 0x9e, 0x02, 0x8b, 0x1f, 0x01, 0x02, 0xa6, 0x01, 0x68, 0xcc, 0x01, 0x76, 0x6f, 0x01, 0xd2, 0xa1, 0x01, 0xb7, 0x24, 0x01, 0x6e, 0xd1, 0xff, 0xc7, 0xd7, 0xff, 0xd9, 0xd2, 0xff, 0x94, 0xf4, 0xfe, 0x97, 0x0c, 0xff, 0x0a, 0xa4, 0xff, 0xac, 0xa2, 0xff, 0x69, 0x3c, 0xff, 0x56, 0x07, 0x00, 0x91, 0x24, 0x00, 0x78, 0x7b, 0xff, 0x96, 0x7c, 0xff, 0xb6, 0x2c, 0xff, 0x5c, 0xd7, 0xfe, 0x84, 0xd8, 0xfe, 0x8f, 0x0e, 0xff, 0xe9, 0x3f, 0xff, 0x1b, 0x65, 0x06, 0xf1, 0x12, 0x0b, 0x3d, 0x34, 0x06, 0x79, 0x65, 0x03, 0xac, 0xe7, 0x03, 0x9f, 0xbb, 0x01, 0x49, 0x54, 0x00, 0xb0, 0xa8, 0x02, 0x24, 0x58, 0x02, 0x4e, 0x99, 0x00, 0x75, 0x70, 0x01, 0x16, 0x68, 0x02, 0x1b, 0x35, 0x02, 0xce, 0x7a, 0x01, 0x21, 0x27, 0x01, 0x0d, 0x1c, 0x01, 0x26, 0x93, 0x00, 0xba, 0xc9, 0xff, 0x5c, 0xb2, 0xff, 0x52, 0x78, 0xff, 0xbb, 0x25, 0xff, 0x02, 0x56, 0xff, 0x64, 0xa0, 0xff, 0xfe, 0xc4, 0xff, 0xe3, 0xc0, 0xff, 0xaf, 0x12, 0x00, 0x23, 0xc4, 0xff, 0x13, 0x2f, 0xff, 0x19, 0x30, 0xff, 0x26, 0xf4, 0xfe, 0xcc, 0xb1, 0xfe, 0x60, 0xfc, 0xfe, 0xb9, 0x82, 0x06, 0x96, 0x14, 0x0b, 0x1b, 0x21, 0x06, 0x3c, 0x52, 0x03, 0x7b, 0xf0, 0x03, 0x9a, 0x7f, 0x01, 0x4c, 0xda, 0xff, 0x00, 0xc0, 0x02, 0x5c, 0x64, 0x02, 0x56, 0xcb, 0xff, 0x98, 0x88, 0x00, 0x99, 0x44, 0x02, 0x7a, 0x03, 0x02, 0x53, 0xa8, 0x01, 0x70, 0xed, 0x01, 0x23, 0xe4, 0x00, 0x55, 0x7d, 0x00, 0x96, 0x0a, 0x01, 0xe6, 0x7a, 0x00, 0x46, 0x68, 0xff, 0xcd, 0xc2, 0xff, 0xdf, 0xf5, 0xff, 0xe9, 0x2e, 0xff, 0xe1, 0x90, 0xff, 0xd6, 0x26, 0x00, 0xd4, 0xe0, 0xff, 0x07, 0x8b, 0xff, 0xdb, 0xa8, 0xff, 0x12, 0x6c, 0xff, 0x43, 0x11, 0xff, 0x99, 0x12, 0xff, 0x91, 0xea, 0xfe, 0xc4, 0x8d, 0x06, 0x5e, 0xf8, 0x0a, 0x73, 0x3b, 0x06, 0x8f, 0x22, 0x04, 0x5d, 0x47, 0x04, 0x38, 0x87, 0x00, 0xc9, 0x53, 0xff, 0xe9, 0x71, 0x03, 0x25, 0x6e, 0x02, 0xa2, 0x1a, 0xff, 0x51, 0x35, 0x00, 0x58, 0xd5, 0x01, 0x37, 0x59, 0x01, 0xae, 0x08, 0x01, 0x90, 0xaf, 0x01, 0x85, 0x26, 0x01, 0xaa, 0x95, 0x00, 0x48, 0xc5, 0x00, 0x52, 0xce, 0x00, 0xe6, 0x6f, 0x00, 0x97, 0x04, 0x00, 0xff, 0x0d, 0x00, 0xfe, 0x15, 0x00, 0x05, 0xe7, 0xff, 0xd2, 0xb5, 0xff, 0x4a, 0xd2, 0xff, 0x3c, 0xc6, 0xff, 0xfa, 0x60, 0xff, 0xb3, 0x35, 0xff, 0xf2, 0x6d, 0xff, 0x54, 0x41, 0xff, 0x8b, 0x1d, 0xff, 0x35, 0xf4, 0x06, 0x37, 0xbb, 0x0b, 0x11, 0x6a, 0x06, 0x66, 0xdf, 0x03, 0xb1, 0x4c, 0x04, 0xf7, 0x7c, 0x00, 0x28, 0x1b, 0xff, 0xc1, 0x59, 0x03, 0x00, 0x6d, 0x02, 0x81, 0xe9, 0xfe, 0xc4, 0xeb, 0xff, 0xd5, 0x7c, 0x01, 0x4e, 0x25, 0x01, 0xd3, 0xc0, 0x00, 0xcc, 0xf3, 0x00, 0x26, 0xa3, 0x00, 0x48, 0x11, 0x00, 0xd0, 0x7e, 0x00, 0x3f, 0x1b, 0x01, 0x2b, 0x70, 0x00, 0x32, 0x0a, 0x00, 0x2a, 0xb9, 0x00, 0x81, 0x85, 0x00, 0x6c, 0x38, 0x00, 0x73, 0x71, 0x00, 0xe3, 0x16, 0x00, 0x44, 0x76, 0xff, 0x95, 0x3f, 0xff, 0x9c, 0x33, 0xff, 0x71, 0x26, 0xff, 0x83, 0x2b, 0xff, 0xad, 0x55, 0xff, 0x9c, 0x8e, 0x07, 0x30, 0x60, 0x0c, 0xdd, 0x83, 0x06, 0xac, 0x3c, 0x04, 0xb2, 0x5e, 0x04, 0x5d, 0xe0, 0xff, 0xea, 0x02, 0xff, 0x58, 0xc7, 0x03, 0x3f, 0x42, 0x02, 0x18, 0x90, 0xfe, 0x17, 0xd3, 0xff, 0x57, 0x89, 0x01, 0x33, 0xe3, 0x00, 0x68, 0x48, 0x00, 0xd6, 0x28, 0x01, 0x44, 0x8d, 0x00, 0xdc, 0x34, 0xff, 0x15, 0x9b, 0xff, 0x65, 0xb5, 0x00, 0x98, 0x82, 0x00, 0x22, 0x0e, 0x00, 0xaf, 0xa7, 0x00, 0x6d, 0xce, 0x00, 0xa4, 0xe8, 0x00, 0x11, 0xcb, 0x00, 0x04, 0x90, 0x00, 0x1a, 0x42, 0x00, 0x81, 0x61, 0xff, 0xbe, 0xca, 0xfe, 0xcd, 0x00, 0xff, 0x16, 0x48, 0xff, 0x4c, 0x21, 0xff, 0x7d, 0x6f, 0x08, 0xb1, 0x73, 0x0d, 0xb4, 0x74, 0x06, 0x38, 0x09, 0x04, 0xc7, 0x6d, 0x04, 0x40, 0xb6, 0xff, 0xa8, 0xfa, 0xfe, 0x28, 0xc4, 0x03, 0x39, 0xfd, 0x01, 0x63, 0x5f, 0xfe, 0xe9, 0xef, 0xff, 0xd9, 0x5d, 0x01, 0xe7, 0xa5, 0x00, 0x23, 0x19, 0x00, 0x46, 0xec, 0x00, 0x83, 0xc2, 0x00, 0xd9, 0x39, 0xff, 0x6f, 0xf2, 0xfe, 0x45, 0xb2, 0xff, 0x0f, 0x18, 0x00, 0x26, 0xc1, 0xff, 0xc7, 0x2e, 0x00, 0xe0, 0x07, 0x01, 0x9f, 0x0c, 0x01, 0x91, 0xfb, 0x00, 0x25, 0x15, 0x01, 0x34, 0xa6, 0x00, 0x04, 0xe2, 0xff, 0x27, 0x37, 0xff, 0xdf, 0xf0, 0xfe, 0xf5, 0xf6, 0xfe, 0xee, 0x13, 0xff, 0x72, 0xfd, 0x08, 0x23, 0x80, 0x0e, 0x52, 0xd7, 0x06, 0x60, 0xc7, 0x03, 0xe6, 0x85, 0x04, 0xfe, 0xa2, 0xff, 0xbb, 0xa3, 0xfe, 0x85, 0x19, 0x04, 0x09, 0xdb, 0x01, 0x88, 0xd3, 0xfd, 0x6c, 0xf5, 0xff, 0xbf, 0x70, 0x01, 0xdf, 0x8a, 0x00, 0x52, 0xc9, 0xff, 0x3b, 0x85, 0x00, 0x0d, 0xf6, 0x00, 0x11, 0x8c, 0xff, 0x4e, 0xa0, 0xfe, 0x58, 0x4e, 0xff, 0xaa, 0x8e, 0xff, 0x53, 0x1a, 0xff, 0xc5, 0xa7, 0xff, 0xb6, 0x74, 0x00, 0xbc, 0x04, 0x01, 0xeb, 0x25, 0x01, 0xf2, 0x0e, 0x01, 0x96, 0xfd, 0x00, 0xd2, 0x48, 0x00, 0x02, 0x9a, 0xff, 0xb8, 0x5d, 0xff, 0x20, 0x2e, 0xff, 0x22, 0x07, 0xff, 0x1c, 0x02, 0x0a, 0x23, 0xe3, 0x0f, 0x74, 0xc5, 0x06, 0xd8, 0x3d, 0x03, 0x04, 0xc1, 0x04, 0xe4, 0xa6, 0xff, 0x3a, 0x69, 0xfe, 0x8e, 0x43, 0x04, 0x17, 0xba, 0x01, 0xde, 0x87, 0xfd, 0xb9, 0x00, 0x00, 0x47, 0x4a, 0x01, 0xee, 0x56, 0x00, 0x6f, 0xd3, 0xff, 0x3b, 0x35, 0x00, 0x9d, 0xe4, 0x00, 0x46, 0xb9, 0xff, 0xf0, 0xb9, 0xfe, 0x7d, 0x19, 0xff, 0x0a, 0x45, 0xff, 0xba, 0x02, 0xff, 0x39, 0x0e, 0xff, 0xbe, 0xc3, 0xff, 0xda, 0xbd, 0x00, 0x29, 0xf7, 0x00, 0xf2, 0xc9, 0x00, 0x48, 0x10, 0x01, 0xd4, 0x7d, 0x00, 0x34, 0xc7, 0xff, 0xd7, 0xc3, 0xff, 0xed, 0x81, 0xff, 0xa0, 0x4e, 0xff, 0x4c, 0x3f, 0x0b, 0x89, 0x46, 0x11, 0x28, 0x8a, 0x06, 0x3f, 0xdd, 0x02, 0xb4, 0xee, 0x04, 0x4f, 0x48, 0xff, 0xaa, 0x69, 0xfe, 0xd2, 0xa7, 0x04, 0xfc, 0x3b, 0x01, 0x73, 0x2c, 0xfd, 0xb7, 0x30, 0x00, 0x17, 0x63, 0x01, 0x38, 0xed, 0xff, 0x2c, 0x77, 0xff, 0xda, 0x2b, 0x00, 0xc8, 0xc9, 0x00, 0x39, 0xcf, 0xff, 0xc4, 0xbf, 0xfe, 0xa2, 0xf6, 0xfe, 0x4f, 0x30, 0xff, 0x02, 0xe6, 0xfe, 0x7b, 0xd8, 0xfe, 0x05, 0x6f, 0xff, 0x15, 0x3c, 0x00, 0xe9, 0xaa, 0x00, 0x17, 0x69, 0x00, 0x63, 0x99, 0x00, 0x0b, 0x6c, 0x00, 0xac, 0xd7, 0xff, 0x6d, 0xcc, 0xff, 0x21, 0xaa, 0xff, 0xd5, 0xb0, 0xff, 0x38, 0xaf, 0x0c, 0xb9, 0xce, 0x12, 0x94, 0x1c, 0x06, 0xd8, 0x8c, 0x02, 0xfb, 0x21, 0x05, 0x13, 0xc4, 0xfe, 0x43, 0x93, 0xfe, 0x62, 0x22, 0x05, 0xbb, 0xa2, 0x00, 0x22, 0xeb, 0xfc, 0xad, 0x6f, 0x00, 0x80, 0x6d, 0x01, 0xdf, 0xaf, 0xff, 0x55, 0x2f, 0xff, 0x43, 0xff, 0xff, 0x69, 0xa3, 0x00, 0xa8, 0xc6, 0xff, 0x26, 0xf7, 0xfe, 0x83, 0x10, 0xff, 0xc7, 0xeb, 0xfe, 0xcb, 0xc6, 0xfe, 0x4f, 0xf0, 0xfe, 0x26, 0x76, 0xff, 0x97, 0xce, 0xff, 0x2a, 0x74, 0x00, 0x19, 0x3c, 0x00, 0x02, 0x1f, 0x00, 0xff, 0x25, 0x00, 0x0b, 0x60, 0xff, 0xf1, 0xa7, 0xff, 0xc9, 0xf1, 0xff, 0x4a, 0xd6, 0xff, 0xa3, 0x0a, 0x0e, 0xd4, 0x52, 0x14, 0xe1, 0xce, 0x05, 0x48, 0x4f, 0x02, 0xc2, 0x59, 0x05, 0xc2, 0x03, 0xfe, 0x1e, 0xad, 0xfe, 0x7a, 0xe1, 0x05, 0x79, 0xfb, 0xff, 0x15, 0x82, 0xfc, 0xea, 0xb4, 0x00, 0x2f, 0x89, 0x01, 0x43, 0x83, 0xff, 0x98, 0xd5, 0xfe, 0x81, 0xbf, 0xff, 0xc4, 0x85, 0x00, 0x8a, 0xac, 0xff, 0xf0, 0xf5, 0xfe, 0xd7, 0x31, 0xff, 0x4c, 0xd9, 0xfe, 0x4f, 0xa3, 0xfe, 0xc9, 0xd4, 0xfe, 0x54, 0xb4, 0xff, 0x4c, 0xa3, 0xff, 0xba, 0xf6, 0xff, 0x8f, 0x80, 0x00, 0xc2, 0xd1, 0xff, 0xce, 0x94, 0xff, 0x4f, 0x1c, 0xff, 0xa0, 0x38, 0xff, 0x26, 0xa8, 0xff, 0xe5, 0xd4, 0xff, 0xdb, 0x4e, 0x0f, 0x14, 0xfd, 0x15, 0xd4, 0xa1, 0x05, 0x1c, 0xdb, 0x01, 0x08, 0xa7, 0x05, 0xdd, 0x3e, 0xfd, 0x53, 0x8d, 0xfe, 0x17, 0xa4, 0x06, 0x5a, 0x6d, 0xff, 0x54, 0x1f, 0xfc, 0xb8, 0xe9, 0x00, 0x6c, 0x7e, 0x01, 0x76, 0x74, 0xff, 0xee, 0xa1, 0xfe, 0xde, 0x44, 0xff, 0xe0, 0x5c, 0x00, 0xac, 0xa9, 0xff, 0xb7, 0xe9, 0xfe, 0xc9, 0x27, 0xff, 0xba, 0xbc, 0xfe, 0xc3, 0xa2, 0xfe, 0x87, 0xb1, 0xfe, 0x52, 0xc7, 0xff, 0x86, 0xd9, 0xff, 0x61, 0x81, 0xff, 0xaa, 0x61, 0x00, 0x3e, 0x01, 0x00, 0x5d, 0x24, 0xff, 0xe4, 0xe8, 0xfe, 0xcf, 0xe2, 0xfe, 0xf0, 0x0c, 0xff, 0xbe, 0x94, 0xff, 0x9d, 0x50, 0x10, 0xbd, 0xba, 0x17, 0x8b, 0xc2, 0x05, 0x84, 0x38, 0x01, 0xb3, 0x05, 0x06, 0x51, 0xc5, 0xfc, 0x91, 0x3f, 0xfe, 0x46, 0x4d, 0x07, 0x07, 0x17, 0xff, 0x21, 0xd6, 0xfb, 0xc3, 0x2a, 0x01, 0x84, 0x91, 0x01, 0x84, 0x2c, 0xff, 0xd4, 0xa4, 0xfe, 0x34, 0x07, 0xff, 0x8b, 0xea, 0xff, 0xa5, 0xa9, 0xff, 0x3f, 0xea, 0xfe, 0xae, 0x3a, 0xff, 0x9f, 0xb6, 0xfe, 0x49, 0x83, 0xfe, 0x2f, 0x84, 0xfe, 0x87, 0xcf, 0xff, 0xea, 0x5d, 0x00, 0x65, 0x74, 0xff, 0x25, 0xb9, 0xff, 0xfd, 0x2e, 0x00, 0x80, 0x4f, 0xff, 0x1f, 0xa7, 0xfe, 0x95, 0xc5, 0xfe, 0x73, 0x79, 0xfe, 0xa0, 0x38, 0xff, 0x41, 0xdc, 0x11, 0xe3, 0x31, 0x19, 0x9d, 0x6a, 0x05, 0xdc, 0x19, 0x01, 0xfd, 0x12, 0x06, 0xe6, 0x02, 0xfc, 0x22, 0x4f, 0xfe, 0x3e, 0x95, 0x07, 0x23, 0x67, 0xfe, 0x23, 0x05, 0xfc, 0x62, 0x53, 0x01, 0xbe, 0x70, 0x01, 0x70, 0xe8, 0xfe, 0xcd, 0x87, 0xfe, 0xd2, 0x19, 0xff, 0x67, 0x47, 0xff, 0x45, 0x5b, 0xff, 0xab, 0x07, 0xff, 0xc8, 0x5e, 0xff, 0x44, 0x9e, 0xfe, 0x9c, 0x4f, 0xfe, 0x7d, 0x5d, 0xfe, 0xf6, 0xc4, 0xff, 0x8c, 0x86, 0x00, 0x51, 0xcb, 0xff, 0x07, 0x6d, 0xff, 0x71, 0xa6, 0xff, 0x30, 0x9e, 0xff, 0xd4, 0x7b, 0xfe, 0x79, 0x8e, 0xfe, 0x6a, 0x66, 0xfe, 0x3d, 0xb0, 0xfe, 0x22, 0xc0, 0x13, 0x4c, 0x42, 0x1a, 0x35, 0xd9, 0x04, 0x8e, 0xc3, 0x01, 0x67, 0xc0, 0x05, 0xb0, 0x48, 0xfb, 0x3b, 0x95, 0xfe, 0x15, 0xa3, 0x07, 0x20, 0xb2, 0xfd, 0x4a, 0x5a, 0xfc, 0xa7, 0x9f, 0x01, 0x83, 0x49, 0x01, 0x8e, 0xbd, 0xfe, 0xa2, 0x3e, 0xfe, 0xf3, 0x7f, 0xff, 0xe8, 0xae, 0xfe, 0x31, 0xdd, 0xfe, 0x7d, 0x37, 0xff, 0xd5, 0x71, 0xff, 0xa5, 0xc5, 0xfe, 0xa7, 0x1b, 0xfe, 0xf1, 0x37, 0xfe, 0xfd, 0xe4, 0xff, 0xe5, 0x6d, 0x00, 0x2a, 0xe3, 0xff, 0x36, 0xee, 0xff, 0x24, 0x28, 0xff, 0x35, 0x3e, 0xff, 0x79, 0xa7, 0xfe, 0x98, 0x75, 0xfe, 0xbc, 0x5c, 0xfe, 0x41, 0x6d, 0xfe, 0x0b, 0x44, 0x15, 0xe8, 0x0b, 0x1b, 0x16, 0xde, 0x04, 0x2c, 0x7d, 0x02, 0x3a, 0x7a, 0x05, 0x33, 0xfb, 0xfa, 0xd1, 0x58, 0xfe, 0xc4, 0x88, 0x07, 0xf0, 0x6d, 0xfd, 0xf9, 0x9d, 0xfc, 0x73, 0x9a, 0x01, 0x21, 0x5d, 0x01, 0xdf, 0xe2, 0xfe, 0xba, 0xa9, 0xfd, 0xac, 0xc9, 0xff, 0xc4, 0x87, 0xfe, 0x40, 0x49, 0xfe, 0x57, 0x20, 0xff, 0x7f, 0x8e, 0xff, 0xe5, 0xfa, 0xfe, 0xd1, 0x40, 0xfe, 0x35, 0xef, 0xfd, 0x7e, 0xce, 0xff, 0xac, 0xa9, 0x00, 0x03, 0xb5, 0xff, 0x4d, 0x50, 0x00, 0x4d, 0x36, 0xff, 0x15, 0xbe, 0xfe, 0x91, 0xa6, 0xfe, 0x61, 0x6f, 0xfe, 0x38, 0x42, 0xfe, 0xf8, 0x74, 0xfe, 0xcd, 0x7c, 0x16, 0x3e, 0x80, 0x1b, 0x74, 0x46, 0x05, 0x47, 0x54, 0x03, 0x97, 0x5b, 0x05, 0x66, 0x02, 0xfb, 0x05, 0x88, 0xfd, 0x77, 0x67, 0x07, 0xe0, 0x58, 0xfd, 0x6e, 0xc5, 0xfc, 0x21, 0xa4, 0x01, 0xe0, 0x2b, 0x01, 0x79, 0x48, 0xff, 0xb4, 0x4c, 0xfd, 0xec, 0x8d, 0xff, 0x1c, 0xb5, 0xfe, 0x23, 0xec, 0xfd, 0x07, 0x79, 0xfe, 0x12, 0xca, 0xff, 0x54, 0x3e, 0xff, 0x8a, 0x64, 0xfe, 0x98, 0xe3, 0xfd, 0x25, 0x48, 0xff, 0xa2, 0x3a, 0x01, 0xf2, 0x97, 0xff, 0x6d, 0x0f, 0x00, 0xd8, 0x90, 0xff, 0x4c, 0xac, 0xfe, 0x9f, 0x67, 0xfe, 0x4a, 0x2a, 0xfe, 0x87, 0x3f, 0xfe, 0xd3, 0x83, 0xfe, 0xf7, 0xf0, 0x17, 0x52, 0x71, 0x1b, 0x2b, 0x54, 0x05, 0x6a, 0xa7, 0x04, 0x39, 0xd2, 0x05, 0xd0, 0x86, 0xfa, 0xc2, 0x93, 0xfc, 0x58, 0x9e, 0x07, 0xe8, 0xe6, 0xfc, 0x44, 0xc8, 0xfc, 0x6c, 0xfb, 0x01, 0xbf, 0xd3, 0x00, 0x4d, 0x54, 0xff, 0xa1, 0x84, 0xfd, 0xe1, 0x1f, 0xff, 0x16, 0x96, 0xfe, 0x56, 0x07, 0xfe, 0x82, 0x9e, 0xfd, 0x08, 0xab, 0xff, 0x1e, 0xc7, 0xff, 0xcc, 0x55, 0xfe, 0x38, 0x0a, 0xfe, 0xb7, 0xf9, 0xfe, 0xee, 0x3c, 0x01, 0xad, 0x00, 0x00, 0xa5, 0x80, 0xff, 0x99, 0xa9, 0xff, 0x94, 0x0b, 0xff, 0xfc, 0x11, 0xfe, 0x57, 0xd3, 0xfd, 0xf3, 0x63, 0xfe, 0x56, 0x60, 0xfe, 0x16, 0x25, 0x1a, 0xc3, 0xc9, 0x1a, 0x77, 0x0e, 0x04, 0x68, 0x57, 0x07, 0x01, 0xdb, 0x06, 0x2e, 0xc2, 0xf8, 0x00, 0x56, 0xfc, 0xee, 0x28, 0x08, 0xf1, 0xde, 0xfb, 0x1e, 0xd3, 0xfc, 0xc7, 0x72, 0x02, 0x03, 0xac, 0x00, 0xbf, 0xfe, 0xfe, 0x58, 0xeb, 0xfd, 0x30, 0x25, 0xff, 0xdb, 0xf2, 0xfd, 0x85, 0x49, 0xfe, 0xbf, 0x46, 0xfd, 0xac, 0xfc, 0xfe, 0xed, 0x3a, 0x00, 0xbd, 0x93, 0xfe, 0xa4, 0x04, 0xfe, 0x54, 0x46, 0xff, 0x3f, 0xce, 0x00, 0x77, 0x42, 0x00, 0x0f, 0x95, 0xff, 0xee, 0x6b, 0xff, 0x04, 0x29, 0xff, 0xdc, 0x05, 0xfe, 0x15, 0xbd, 0xfd, 0x38, 0x6d, 0xfe, 0x7a, 0x31, 0xfe, 0x82, 0x17, 0x1c, 0x21, 0xc3, 0x19, 0x06, 0x82, 0x02, 0xa0, 0x50, 0x0b, 0xc3, 0x22, 0x08, 0xe3, 0xd7, 0xf5, 0xc9, 0xfd, 0xfc, 0xaa, 0x63, 0x09, 0x15, 0xf1, 0xf9, 0x11, 0x9e, 0xfc, 0xb6, 0x6b, 0x03, 0x59, 0xbc, 0x00, 0x58, 0x7c, 0xfe, 0xa6, 0x02, 0xfe, 0x4a, 0xa3, 0xff, 0x8d, 0x8d, 0xfd, 0xaa, 0x41, 0xfe, 0x9b, 0x41, 0xfd, 0xb6, 0x1b, 0xfe, 0xf1, 0x41, 0x00, 0x49, 0x90, 0xff, 0x9d, 0x9d, 0xfd, 0xd9, 0x97, 0xff, 0xaf, 0xca, 0x00, 0x91, 0x0a, 0x00, 0x30, 0x47, 0x00, 0x1a, 0xf6, 0xfe, 0xe6, 0xff, 0xfe, 0x33, 0x7a, 0xfe, 0x16, 0xcc, 0xfd, 0xfe, 0xf2, 0xfd, 0x42, 0x78, 0xfe, 0x41, 0xd5, 0x1c, 0xa4, 0xd3, 0x18, 0xb3, 0xb7, 0x01, 0xca, 0x60, 0x0f, 0x41, 0x63, 0x09, 0x4f, 0xa1, 0xf2, 0xaa, 0x70, 0xfe, 0xea, 0x5d, 0x0b, 0xdf, 0xc0, 0xf6, 0x1b, 0xe6, 0xfb, 0xc8, 0x30, 0x05, 0xed, 0xee, 0x00, 0x0c, 0xac, 0xfd, 0xae, 0xbc, 0xfd, 0xcf, 0x65, 0x00, 0x49, 0x81, 0xfd, 0xf3, 0xff, 0xfd, 0x09, 0x54, 0xfd, 0x67, 0x44, 0xfd, 0x27, 0xa7, 0xff, 0x3b, 0xb9, 0x00, 0xcb, 0x93, 0xfd, 0xe4, 0x60, 0xff, 0x5e, 0x31, 0x01, 0xb6, 0xa4, 0xff, 0xbe, 0xe3, 0x00, 0x24, 0xeb, 0xfe, 0xb3, 0xb1, 0xfe, 0xb4, 0xcb, 0xfe, 0x67, 0xe4, 0xfd, 0x61, 0x7d, 0xfd, 0xbe, 0xd6, 0xfe, 0x8b, 0x82, 0x1e, 0x8f, 0x34, 0x1a, 0x7b, 0xa4, 0xfe, 0xc8, 0x5f, 0x0f, 0xf9, 0xec, 0x0c, 0x1c, 0x0a, 0xf2, 0x0c, 0x66, 0xfd, 0xae, 0x76, 0x0c, 0x02, 0x05, 0xf5, 0xaa, 0x0b, 0xfb, 0xb1, 0x7c, 0x06, 0xd8, 0xcc, 0x00, 0x06, 0xdc, 0xfc, 0x1d, 0xa8, 0xfd, 0x5e, 0x21, 0x01, 0x98, 0x0e, 0xfd, 0xcc, 0x91, 0xfd, 0x88, 0xce, 0xfd, 0xd2, 0xe2, 0xfc, 0x27, 0x66, 0xfe, 0x68, 0x03, 0x01, 0x06, 0x99, 0xfe, 0x47, 0xcb, 0xfe, 0x42, 0x6b, 0x01, 0xcd, 0xb7, 0xff, 0x94, 0xe9, 0x00, 0x3a, 0x25, 0xff, 0xa6, 0x80, 0xfe, 0x91, 0xd8, 0xfe, 0xef, 0xd1, 0xfd, 0x66, 0x42, 0xfd, 0x7d, 0xb1, 0xfe, 0x05, 0x7e, 0x21, 0x55, 0x80, 0x1b, 0x19, 0x58, 0xfb, 0x54, 0x6b, 0x0d, 0x12, 0x88, 0x10, 0x81, 0x06, 0xf3, 0x16, 0x45, 0xfc, 0xa0, 0x87, 0x0c, 0xdc, 0xfe, 0xf3, 0x10, 0x86, 0xfa, 0xd6, 0x52, 0x07, 0xb6, 0xf9, 0x00, 0x9a, 0xc1, 0xfb, 0x94, 0xb5, 0xfd, 0xe7, 0xe8, 0x01, 0xbc, 0xbc, 0xfc, 0xbf, 0xf5, 0xfc, 0x78, 0x31, 0xfe, 0xb2, 0x15, 0xfd, 0x6a, 0x62, 0xfd, 0x2d, 0x66, 0x00, 0xcd, 0xc7, 0xff, 0xd7, 0xd7, 0xfe, 0xc2, 0x19, 0x01, 0x1c, 0x52, 0x00, 0x33, 0xce, 0x00, 0x0a, 0x46, 0xff, 0x43, 0xc3, 0xfe, 0xd9, 0xbb, 0xfe, 0x31, 0x92, 0xfd, 0x0d, 0x39, 0xfd, 0x19, 0x53, 0xfe, 0xbc, 0x6a, 0x24, 0x90, 0x09, 0x1d, 0x58, 0xf5, 0xf7, 0xb5, 0x2c, 0x0b, 0x99, 0xb1, 0x12, 0xb3, 0x6d, 0xf5, 0x3a, 0xa4, 0xfb, 0x8c, 0xc0, 0x0b, 0x2c, 0x9a, 0xf3, 0xab, 0xff, 0xf9, 0xb7, 0xd6, 0x07, 0x3d, 0x60, 0x01, 0x7d, 0x9f, 0xfa, 0x48, 0xa1, 0xfd, 0xce, 0x75, 0x02, 0xd9, 0x8b, 0xfc, 0x91, 0x5f, 0xfc, 0x0e, 0x48, 0xfe, 0xe0, 0x75, 0xfd, 0x38, 0xcd, 0xfc, 0x4c, 0x38, 0xff, 0x33, 0x9e, 0x00, 0x28, 0x82, 0xff, 0x83, 0x66, 0x00, 0x93, 0xfe, 0x00, 0x68, 0xf3, 0x00, 0xb0, 0x50, 0xff, 0x6a, 0x49, 0xff, 0xd2, 0x7d, 0xfe, 0x2c, 0x21, 0xfd, 0x4c, 0x58, 0xfd, 0x71, 0x04, 0xfe, 0xe0, 0x14, 0x27, 0x2e, 0x13, 0x1f, 0x16, 0x4e, 0xf5, 0xe9, 0x15, 0x08, 0x33, 0xf5, 0x13, 0x81, 0x82, 0xf8, 0x20, 0x99, 0xfb, 0x40, 0x95, 0x0a, 0xd1, 0x46, 0xf3, 0xc1, 0xc8, 0xf9, 0xc7, 0xc7, 0x07, 0x8f, 0x0d, 0x02, 0x06, 0xb4, 0xf9, 0xf6, 0x5b, 0xfd, 0xd4, 0xec, 0x02, 0xdd, 0x73, 0xfc, 0x30, 0x1f, 0xfc, 0x93, 0x06, 0xfe, 0x45, 0x05, 0xfe, 0x4a, 0xab, 0xfc, 0x6e, 0x09, 0xfe, 0x53, 0xb7, 0x00, 0x60, 0x96, 0x00, 0x43, 0xec, 0xff, 0xff, 0x38, 0x01, 0xd2, 0x80, 0x01, 0x09, 0x83, 0xff, 0xe9, 0xbd, 0xff, 0xe8, 0x37, 0xfe, 0x3b, 0xca, 0xfc, 0x9f, 0x4f, 0xfd, 0x84, 0xd1, 0xfd, 0xb0, 0x83, 0x29, 0x2d, 0x5f, 0x21, 0x76, 0x4c, 0xf3, 0x66, 0x7d, 0x04, 0x61, 0x68, 0x14, 0x73, 0x41, 0xfb, 0x8c, 0x81, 0xfc, 0xef, 0x74, 0x09, 0xce, 0x6b, 0xf2, 0x12, 0x2c, 0xfa, 0x9f, 0x52, 0x07, 0x6e, 0x78, 0x02, 0x08, 0x50, 0xf9, 0x0c, 0xce, 0xfc, 0x4b, 0x17, 0x03, 0xd6, 0x6c, 0xfc, 0x16, 0x11, 0xfc, 0x36, 0x92, 0xfd, 0x46, 0x78, 0xfe, 0x13, 0xd3, 0xfc, 0xcb, 0x59, 0xfd, 0x00, 0xf7, 0xff, 0xa7, 0x7a, 0x01, 0xec, 0x26, 0x00, 0x23, 0xea, 0x00, 0x31, 0x34, 0x02, 0xab, 0xf7, 0xff, 0x66, 0xe8, 0xff, 0x72, 0xf0, 0xfd, 0xd7, 0xbb, 0xfc, 0x3e, 0x16, 0xfd, 0x39, 0x77, 0xfd, 0x48, 0x60, 0x2b, 0x48, 0x26, 0x24, 0x9e, 0xa9, 0xf1, 0x80, 0xe5, 0x00, 0xa8, 0x32, 0x14, 0xb5, 0x28, 0xfd, 0x2b, 0x1f, 0xfe, 0xd4, 0xef, 0x08, 0x29, 0xde, 0xf0, 0x60, 0x0a, 0xfb, 0x0f, 0xd9, 0x06, 0x2a, 0x31, 0x02, 0x03, 0x98, 0xf9, 0x64, 0x22, 0xfc, 0xcf, 0xb8, 0x02, 0x00, 0x7d, 0xfc, 0xa7, 0x38, 0xfc, 0x79, 0xfc, 0xfc, 0xe0, 0xcb, 0xfe, 0x4d, 0x24, 0xfd, 0x2b, 0x2c, 0xfd, 0x84, 0xdf, 0xfe, 0x4e, 0xb8, 0x01, 0x9b, 0xcd, 0x00, 0x18, 0xa0, 0x00, 0xb5, 0xcf, 0x02, 0xda, 0x8d, 0x00, 0xe5, 0xde, 0xff, 0xe4, 0xcb, 0xfd, 0x55, 0xd8, 0xfc, 0x0e, 0xcb, 0xfc, 0xf6, 0x0c, 0xfd, 0xb4, 0xdb, 0x2d, 0xaa, 0x7c, 0x26, 0x76, 0x74, 0xef, 0x5c, 0xee, 0xfe, 0xd4, 0x0b, 0x13, 0x01, 0xae, 0xfd, 0xb6, 0x98, 0x00, 0xf2, 0xf5, 0x08, 0x1a, 0xc5, 0xee, 0x01, 0x49, 0xfc, 0x87, 0xc8, 0x06, 0x9d, 0x10, 0x01, 0xd0, 0x56, 0xfa, 0x79, 0xca, 0xfb, 0x82, 0xd9, 0x01, 0x61, 0x67, 0xfc, 0x43, 0xcc, 0xfc, 0x1f, 0x48, 0xfc, 0x72, 0x2a, 0xff, 0x21, 0x9e, 0xfd, 0x34, 0x1f, 0xfd, 0x9f, 0x2f, 0xfe, 0xfe, 0x56, 0x01, 0x3d, 0x62, 0x01, 0x98, 0x9d, 0x00, 0x72, 0x9b, 0x03, 0xb7, 0x0d, 0x01, 0xb3, 0x92, 0xff, 0x1e, 0xf1, 0xfd, 0xfa, 0xde, 0xfc, 0x88, 0x8d, 0xfc, 0x2c, 0xb6, 0xfc, 0x4f, 0x9a, 0x32, 0x41, 0x50, 0x26, 0xe6, 0x08, 0xec, 0x8b, 0x40, 0x00, 0x46, 0x2e, 0x10, 0x15, 0xdf, 0xfc, 0x6f, 0x1e, 0x04, 0x35, 0x47, 0x08, 0x1d, 0xde, 0xec, 0xcd, 0xfc, 0xfd, 0x59, 0xc3, 0x06, 0x23, 0x38, 0xff, 0x73, 0x52, 0xfb, 0x02, 0xa0, 0xfb, 0x12, 0x9b, 0x00, 0xa8, 0x39, 0xfc, 0xe2, 0x44, 0xfd, 0x7b, 0xea, 0xfb, 0xf6, 0x60, 0xff, 0xb9, 0x2b, 0xfe, 0x2d, 0xfe, 0xfc, 0xf8, 0xee, 0xfd, 0x14, 0xc8, 0x00, 0x3c, 0x81, 0x01, 0x83, 0xb7, 0x00, 0xb5, 0xb2, 0x04, 0x81, 0x7b, 0x01, 0x2d, 0xcb, 0xfe, 0x6d, 0x58, 0xfe, 0x61, 0xa6, 0xfc, 0x5e, 0x3c, 0xfc, 0x61, 0xa3, 0xfc, 0x73, 0x25, 0x37, 0x3b, 0x18, 0x26, 0x33, 0xda, 0xe8, 0x58, 0x5e, 0x02, 0x1f, 0x85, 0x0c, 0x32, 0x0b, 0xfc, 0x35, 0xfc, 0x06, 0xd7, 0xca, 0x07, 0x99, 0xf3, 0xeb, 0x9d, 0x14, 0xff, 0x30, 0xad, 0x06, 0xbb, 0x6a, 0xfd, 0x9e, 0xbb, 0xfc, 0x31, 0xfb, 0xfa, 0xae, 0x6f, 0xff, 0x64, 0x5e, 0xfc, 0x26, 0x4c, 0xfd, 0xc7, 0x3c, 0xfc, 0x69, 0x57, 0xff, 0x56, 0x95, 0xfe, 0x8a, 0x4e, 0xfd, 0x3f, 0x82, 0xfd, 0xed, 0x77, 0x00, 0x31, 0x66, 0x01, 0x28, 0x8e, 0x00, 0x42, 0x12, 0x06, 0x04, 0x0b, 0x02, 0x10, 0xc6, 0xfd, 0x46, 0xaf, 0xfe, 0xa9, 0x79, 0xfc, 0xa9, 0xbb, 0xfb, 0x11, 0xf2, 0xfc, 0x65, 0x99, 0x3a, 0x4f, 0x80, 0x26, 0x3b, 0xae, 0xe6, 0x21, 0x28, 0x04, 0xaa, 0x15, 0x09, 0xed, 0x06, 0xfb, 0x08, 0xfa, 0x08, 0x53, 0xad, 0x07, 0xc8, 0x32, 0xec, 0x88, 0x87, 0xff, 0x1d, 0x32, 0x06, 0x92, 0x58, 0xfc, 0x07, 0xfa, 0xfd, 0x38, 0x37, 0xfa, 0x22, 0x61, 0xfe, 0x69, 0xba, 0xfc, 0xee, 0x6f, 0xfd, 0x4d, 0x93, 0xfc, 0x48, 0x4e, 0xff, 0xcb, 0xe6, 0xfe, 0xf9, 0xe5, 0xfd, 0x06, 0x1f, 0xfd, 0xfe, 0x37, 0x00, 0x8a, 0x91, 0x01, 0x68, 0xfd, 0xff, 0x9a, 0x2d, 0x07, 0xd2, 0xe8, 0x02, 0x8a, 0xe8, 0xfc, 0x69, 0x93, 0xfe, 0x9c, 0x97, 0xfc, 0x93, 0x5c, 0xfb, 0xfc, 0x68, 0xfd, 0xc1, 0xb8, 0x3c, 0xc7, 0x7f, 0x27, 0xa7, 0xca, 0xe5, 0x67, 0xee, 0x04, 0x34, 0x0f, 0x06, 0x2f, 0x96, 0xf9, 0x90, 0xe9, 0x09, 0xf8, 0xd3, 0x07, 0x17, 0x18, 0xed, 0x69, 0x59, 0xff, 0x18, 0x4f, 0x05, 0x3a, 0xaa, 0xfb, 0xed, 0xe0, 0xfe, 0x75, 0x87, 0xf9, 0x0e, 0x2f, 0xfd, 0xd8, 0x3f, 0xfd, 0x3e, 0xd2, 0xfd, 0x9f, 0x2e, 0xfc, 0x4f, 0x8f, 0xff, 0xf0, 0x0a, 0xff, 0x17, 0x44, 0xfe, 0x6c, 0x2c, 0xfd, 0x18, 0x97, 0xff, 0x05, 0x54, 0x02, 0x70, 0x09, 0xff, 0x9c, 0xed, 0x06, 0xbc, 0x0b, 0x04, 0x56, 0xb8, 0xfc, 0xb0, 0x96, 0xfd, 0xd6, 0xf5, 0xfc, 0x87, 0x7d, 0xfb, 0x35, 0x64, 0xfd, 0x36, 0x9d, 0x3d, 0x6d, 0xd3, 0x28, 0x0f, 0x8c, 0xe6, 0xd8, 0xd7, 0x04, 0x77, 0x90, 0x03, 0xa2, 0xec, 0xf7, 0xeb, 0xf9, 0x09, 0xe7, 0x42, 0x08, 0x10, 0x67, 0xee, 0x83, 0x06, 0xff, 0xdc, 0x31, 0x04, 0x16, 0x2a, 0xfb, 0x2c, 0xb5, 0xff, 0x20, 0x16, 0xf9, 0x56, 0x2a, 0xfc, 0x01, 0xe4, 0xfd, 0x8c, 0x47, 0xfe, 0xd9, 0x52, 0xfb, 0x61, 0x1b, 0x00, 0x18, 0x2b, 0xff, 0xcd, 0x3f, 0xfe, 0xab, 0x06, 0xfe, 0xb4, 0xc9, 0xfe, 0x64, 0x58, 0x03, 0x1b, 0x0f, 0xfe, 0x1e, 0x0f, 0x05, 0x2a, 0x51, 0x05, 0x6c, 0x8e, 0xfd, 0x8a, 0x6f, 0xfc, 0xa0, 0x5b, 0xfd, 0x0d, 0x13, 0xfc, 0x50, 0x44, 0xfd, 0x4c, 0x1a, 0x3d, 0xf7, 0xd6, 0x2a, 0x6a, 0xa9, 0xe8, 0xe2, 0x28, 0x04, 0x8e, 0x57, 0x01, 0xeb, 0x73, 0xf6, 0xa2, 0xfe, 0x08, 0xb5, 0xf6, 0x08, 0xe2, 0x18, 0xf0, 0x08, 0x6e, 0xfe, 0x3b, 0x49, 0x03, 0x27, 0x65, 0xfa, 0xfb, 0xdf, 0x00, 0x4e, 0x00, 0xf9, 0xa2, 0x78, 0xfb, 0x7a, 0x51, 0xfe, 0x93, 0xa6, 0xfe, 0xef, 0x85, 0xfa, 0x6f, 0x87, 0x00, 0x4e, 0x98, 0xff, 0xc1, 0xae, 0xfd, 0x43, 0xf7, 0xff, 0x14, 0xed, 0xfd, 0xdc, 0x6b, 0x03, 0x43, 0xea, 0xfd, 0x70, 0x4c, 0x02, 0x86, 0x99, 0x05, 0x86, 0x96, 0xff, 0x01, 0x45, 0xfc, 0xd1, 0xdc, 0xfc, 0xcb, 0x5e, 0xfd, 0x08, 0x89, 0xfd, 0xfd, 0x74, 0x3c, 0x4b, 0xc4, 0x2b, 0x10, 0x38, 0xec, 0x87, 0x52, 0x03, 0xf1, 0x3e, 0xff, 0x4c, 0x20, 0xf5, 0x79, 0x19, 0x07, 0x1a, 0x09, 0x0a, 0xf0, 0x54, 0xf1, 0xd6, 0x37, 0xfe, 0x6a, 0x4e, 0x02, 0x03, 0x85, 0xf9, 0x06, 0x68, 0x02, 0x24, 0x4c, 0xf9, 0xac, 0xd5, 0xfa, 0xa2, 0x6a, 0xfe, 0x0f, 0x00, 0xff, 0x18, 0xca, 0xf9, 0x87, 0xfe, 0x00, 0x08, 0xdd, 0xff, 0xbc, 0x76, 0xfd, 0x54, 0x1d, 0x02, 0x68, 0x72, 0xfc, 0x72, 0xd0, 0x02, 0x54, 0xdd, 0xfe, 0x72, 0x3b, 0xff, 0x7a, 0xc0, 0x04, 0x3a, 0x66, 0x02, 0x4c, 0xba, 0xfc, 0x29, 0x77, 0xfc, 0xbc, 0x1b, 0xff, 0x68, 0xe7, 0xfc, 0x63, 0x1c, 0x3b, 0xf5, 0xa0, 0x2c, 0xd5, 0x2f, 0xf0, 0x09, 0x75, 0x02, 0x3d, 0xa0, 0xfd, 0xad, 0x3c, 0xf3, 0xd5, 0xda, 0x04, 0x8d, 0x1d, 0x0b, 0x9d, 0xf7, 0xf1, 0x07, 0x47, 0xfe, 0xaf, 0x47, 0x01, 0xa7, 0xc5, 0xf8, 0xb5, 0x49, 0x04, 0x95, 0x89, 0xf9, 0xe0, 0x46, 0xfa, 0xf1, 0x05, 0xfe, 0xba, 0x35, 0xff, 0x52, 0xae, 0xf9, 0x12, 0x89, 0x00, 0x30, 0x22, 0x01, 0xb4, 0x01, 0xfd, 0x04, 0x96, 0x02, 0x81, 0x21, 0xfc, 0xe2, 0x3f, 0x01, 0x71, 0x18, 0x00, 0xda, 0xad, 0xfd, 0x35, 0x89, 0x02, 0xcd, 0x3d, 0x04, 0xc5, 0xec, 0xfe, 0xdc, 0x69, 0xfc, 0x78, 0x30, 0xff, 0x4c, 0xbb, 0xfc, 0x9f, 0x7b, 0x39, 0x76, 0x7a, 0x2d, 0x1a, 0xaf, 0xf3, 0x1d, 0x20, 0x03, 0xdc, 0xfb, 0xfb, 0x43, 0x1e, 0xf1, 0xff, 0x3b, 0x03, 0x78, 0x3c, 0x0b, 0x24, 0xfd, 0xf2, 0x42, 0x52, 0xfe, 0x2d, 0xea, 0x00, 0xb9, 0x7f, 0xf8, 0x66, 0x2d, 0x06, 0xa7, 0x0e, 0xfa, 0x95, 0x7d, 0xf9, 0xbf, 0xee, 0xfd, 0xa1, 0x1a, 0xff, 0x77, 0x5c, 0xfa, 0xf5, 0x5b, 0x00, 0x10, 0xd9, 0x01, 0x6f, 0x12, 0xfc, 0x43, 0xbd, 0x02, 0x84, 0x9e, 0xfc, 0x2c, 0x4d, 0xff, 0xdd, 0xea, 0x01, 0x11, 0xbf, 0xfd, 0x1b, 0x75, 0xff, 0x1d, 0xa0, 0x05, 0x35, 0x7e, 0x01, 0x7c, 0x0d, 0xfc, 0x38, 0x61, 0xff, 0x5d, 0xc6, 0xfd, 0xaf, 0x2a, 0x37, 0x7e, 0xaa, 0x2e, 0x56, 0xb3, 0xf6, 0x68, 0x32, 0x04, 0x55, 0xf0, 0xfa, 0xd6, 0x96, 0xee, 0xd0, 0xb2, 0x01, 0x86, 0x98, 0x0a, 0xc4, 0x43, 0xf4, 0x04, 0x7b, 0xfe, 0x5d, 0xb7, 0x00, 0x5b, 0xdc, 0xf8, 0x48, 0x8d, 0x07, 0x4e, 0x69, 0xfa, 0xdb, 0x13, 0xf9, 0xfa, 0x52, 0xfd, 0x56, 0x5e, 0xff, 0xf5, 0x51, 0xfc, 0x79, 0x3a, 0xfe, 0x8f, 0x0d, 0x02, 0x76, 0x45, 0xfc, 0x70, 0x4c, 0x01, 0x5a, 0x02, 0xfe, 0xed, 0xe9, 0xfe, 0x7f, 0x55, 0x01, 0x4a, 0x41, 0x00, 0x32, 0x25, 0xfe, 0xee, 0x18, 0x03, 0x21, 0x83, 0x03, 0xfa, 0xc4, 0xfd, 0x7c, 0x58, 0xff, 0x44, 0x80, 0xfd, 0x21, 0x61, 0x35, 0x29, 0x94, 0x2e, 0x3e, 0xbd, 0xf9, 0x18, 0x12, 0x05, 0x32, 0x78, 0xfa, 0x42, 0x4d, 0xec, 0xfa, 0x9a, 0xff, 0x00, 0x9b, 0x09, 0x61, 0xe5, 0xf5, 0x6d, 0xde, 0xfe, 0x09, 0x85, 0x00, 0xab, 0xac, 0xf9, 0xbc, 0x5f, 0x08, 0x87, 0xd0, 0xfa, 0x8b, 0xe4, 0xf7, 0x23, 0x7c, 0xfe, 0x86, 0x69, 0xff, 0x7e, 0x41, 0xfc, 0x5b, 0x44, 0xfd, 0xa9, 0x1e, 0x01, 0xaf, 0x86, 0xfc, 0x0a, 0xfe, 0x00, 0xb2, 0xc5, 0xfe, 0xd9, 0xfd, 0xfe, 0x66, 0x03, 0x01, 0x84, 0x39, 0x03, 0xc2, 0x56, 0xfd, 0xe1, 0xe8, 0xfe, 0x3d, 0x64, 0x05, 0x7f, 0x46, 0xff, 0x3d, 0xdc, 0xfe, 0x4e, 0xe1, 0xfd, 0x74, 0x5b, 0x34, 0x52, 0x48, 0x2d, 0x11, 0x29, 0xfc, 0xc3, 0xc5, 0x06, 0x09, 0xb9, 0xf9, 0x6d, 0xa3, 0xea, 0x87, 0x66, 0xfd, 0xa9, 0xf0, 0x07, 0xf0, 0xcb, 0xf8, 0x27, 0x59, 0xff, 0x2f, 0x29, 0xff, 0x68, 0x7c, 0xfc, 0x43, 0xb7, 0x07, 0x0a, 0x46, 0xfa, 0x2f, 0xe2, 0xf9, 0x63, 0xce, 0xfd, 0x50, 0x80, 0xfe, 0xbe, 0x0d, 0xfd, 0x72, 0x76, 0xfb, 0x76, 0x2a, 0x00, 0xb8, 0x4d, 0xfe, 0x2c, 0x6c, 0x00, 0xb2, 0x31, 0xfe, 0xa4, 0xc1, 0x01, 0x57, 0xa0, 0x00, 0x36, 0x4b, 0x02, 0x60, 0x2d, 0x00, 0xee, 0x7f, 0xfc, 0xdb, 0xb5, 0x02, 0x27, 0xad, 0x00, 0x96, 0x2e, 0x00, 0x90, 0x6f, 0xfe, 0xc5, 0x35, 0x33, 0xa1, 0x18, 0x2c, 0x34, 0xbd, 0xfd, 0x5e, 0x93, 0x08, 0x66, 0x27, 0xf9, 0xdc, 0x49, 0xe9, 0x39, 0x92, 0xfa, 0x4d, 0x7d, 0x07, 0x5f, 0x5e, 0xfb, 0x33, 0xc2, 0xff, 0x95, 0x80, 0xfe, 0xcd, 0xc3, 0xfd, 0xbd, 0xca, 0x07, 0xc4, 0xf0, 0xfa, 0xae, 0x11, 0xfa, 0x69, 0x4e, 0xfd, 0x8f, 0xe3, 0xfd, 0x48, 0x53, 0xfc, 0x64, 0xed, 0xfa, 0x17, 0xd8, 0x00, 0x3d, 0xd6, 0xfd, 0x00, 0xdb, 0x00, 0xf4, 0xea, 0xff, 0x46, 0x51, 0x01, 0xa6, 0x79, 0x00, 0xfd, 0xa3, 0x02, 0x5b, 0x19, 0x02, 0x59, 0x6a, 0xfb, 0x0b, 0x29, 0xff, 0x7d, 0xdb, 0x00, 0x92, 0xdb, 0x01, 0x0d, 0x2c, 0xff, 0xb7, 0x81, 0x33, 0x82, 0xd6, 0x28, 0x65, 0x46, 0xff, 0x6a, 0xd1, 0x0a, 0xa1, 0x4e, 0xf7, 0x09, 0x00, 0xe9, 0x56, 0x13, 0xf9, 0x86, 0xc7, 0x05, 0x1b, 0x66, 0xff, 0xde, 0xe8, 0xff, 0x07, 0xee, 0xfb, 0xcd, 0x8e, 0x01, 0xf4, 0x23, 0x07, 0x98, 0xf8, 0xf9, 0x78, 0xe1, 0xfb, 0xca, 0x89, 0xfb, 0xcf, 0x89, 0xfc, 0x0f, 0x97, 0xfd, 0x61, 0xee, 0xfa, 0x79, 0x97, 0xff, 0x57, 0xa9, 0xff, 0x2f, 0xdb, 0x01, 0x17, 0x0d, 0xff, 0x12, 0xe5, 0x00, 0xe4, 0x32, 0x02, 0x5b, 0xd2, 0x02, 0xe5, 0xb8, 0x00, 0x16, 0x60, 0xfd, 0xe4, 0x58, 0xfd, 0x8d, 0x2b, 0xfe, 0x79, 0xff, 0x02, 0xde, 0x60, 0x00, 0x4f, 0xca, 0x32, 0x4d, 0xe9, 0x25, 0xe9, 0x72, 0x00, 0x3e, 0xf7, 0x0c, 0x0d, 0x61, 0xf5, 0x05, 0xa4, 0xe9, 0x26, 0xce, 0xf7, 0xd5, 0x8f, 0x04, 0x04, 0x38, 0x02, 0x48, 0x74, 0x00, 0xe3, 0x74, 0xfa, 0x3b, 0xce, 0x02, 0xe2, 0x5a, 0x07, 0x54, 0xaa, 0xf9, 0xbb, 0xc5, 0xfb, 0x2a, 0xa1, 0xf9, 0xa5, 0xc4, 0xfd, 0x90, 0xe9, 0xfd, 0xf5, 0x7e, 0xf9, 0xf0, 0xe8, 0x01, 0x23, 0x11, 0x00, 0x6f, 0x06, 0x00, 0x12, 0x4d, 0x00, 0xf7, 0x37, 0x01, 0x0c, 0x9b, 0x01, 0x4f, 0x86, 0x03, 0x7a, 0xf1, 0xff, 0x89, 0x4f, 0xfe, 0x93, 0xc1, 0xfd, 0x30, 0x19, 0xfb, 0x01, 0x61, 0x02, 0xe9, 0x71, 0x01, 0x92, 0x2b, 0x30, 0x33, 0x5c, 0x23, 0x7b, 0xb1, 0x03, 0x16, 0x65, 0x0d, 0xe7, 0xda, 0xf2, 0xbb, 0x9f, 0xee, 0x0e, 0xcd, 0xf4, 0x22, 0xaf, 0x00, 0x9a, 0x35, 0x09, 0x75, 0xa4, 0xff, 0x63, 0x76, 0xf6, 0x9b, 0x24, 0x06, 0x93, 0xd5, 0x06, 0x85, 0xbb, 0xf8, 0x07, 0x08, 0xfc, 0xef, 0x45, 0xf9, 0x1d, 0xe6, 0xfd, 0x95, 0x7e, 0xfe, 0xc8, 0x82, 0xfa, 0x85, 0x04, 0x02, 0x52, 0x45, 0xff, 0x45, 0xc5, 0xff, 0x6d, 0xe2, 0x01, 0x48, 0x21, 0x00, 0x89, 0xc2, 0x00, 0xd6, 0xe8, 0x04, 0xf8, 0x24, 0x00, 0xe2, 0x68, 0xfd, 0x0e, 0xef, 0xfe, 0xb5, 0xa6, 0xfa, 0x01, 0xb3, 0xff, 0x30, 0xe9, 0x01, 0x00, 0x8b, 0x30, 0x78, 0x5f, 0x21, 0x8d, 0x0a, 0x03, 0x30, 0x5b, 0x0a, 0xbd, 0x58, 0xf3, 0xd7, 0xbc, 0xf3, 0xee, 0x43, 0xf3, 0x3c, 0x58, 0xff, 0x36, 0x9e, 0x0b, 0x94, 0x00, 0xff, 0xab, 0x16, 0xf6, 0x31, 0x75, 0x06, 0x85, 0x7c, 0x05, 0x1c, 0x43, 0xf9, 0xf7, 0xb3, 0xfc, 0xe5, 0xd5, 0xf7, 0xe4, 0xbe, 0xff, 0x6c, 0xd7, 0xff, 0xf7, 0x1b, 0xfa, 0x32, 0xc7, 0x01, 0x64, 0x1a, 0xff, 0x03, 0x74, 0x00, 0x07, 0x8f, 0x01, 0x10, 0x90, 0xff, 0xc0, 0x2d, 0x01, 0xbc, 0x1b, 0x05, 0x9c, 0x3f, 0x00, 0x64, 0x7f, 0xfd, 0x5d, 0x6f, 0xfe, 0x7a, 0x29, 0xfb, 0x2c, 0x14, 0xff, 0x32, 0x8f, 0x01, 0xa8, 0x7c, 0x32, 0xe2, 0x1a, 0x1f, 0xf0, 0x78, 0xfd, 0x40, 0x8b, 0x0b, 0xb6, 0x12, 0xf3, 0x83, 0xbd, 0xf5, 0xf4, 0x54, 0xf7, 0xa0, 0xf1, 0xfb, 0x1f, 0x60, 0x0b, 0x6f, 0x61, 0x00, 0xd2, 0x5e, 0xf5, 0x9b, 0x91, 0x05, 0xe1, 0x68, 0x05, 0x55, 0x04, 0xf9, 0x51, 0x83, 0xfc, 0xf8, 0x1c, 0xfa, 0x0c, 0xd7, 0xff, 0x45, 0x67, 0xff, 0x55, 0x9b, 0xfa, 0xe9, 0x04, 0x02, 0x8f, 0x9c, 0xff, 0x87, 0x08, 0xff, 0xe5, 0xe6, 0x00, 0x55, 0x0c, 0x01, 0xff, 0x8e, 0x01, 0x80, 0xbd, 0x03, 0x9b, 0x62, 0x00, 0x80, 0xfa, 0xfd, 0xed, 0xbf, 0xfd, 0x0b, 0xe7, 0xfb, 0x72, 0x6b, 0xff, 0x02, 0x86, 0x00, 0xdc, 0x66, 0x32, 0xb7, 0xd2, 0x1b, 0x7e, 0xce, 0xf9, 0xf4, 0x29, 0x0f, 0x9d, 0x2c, 0xf4, 0x1a, 0xf3, 0xf4, 0x66, 0x4b, 0xf9, 0x70, 0xc4, 0xfd, 0x7d, 0xac, 0x08, 0xe0, 0xc4, 0xfe, 0x1b, 0x7f, 0xf7, 0xba, 0xde, 0x04, 0x8e, 0x11, 0x05, 0x66, 0x84, 0xf8, 0x37, 0xe8, 0xfd, 0x9b, 0xb7, 0xfb, 0xda, 0x81, 0xff, 0xff, 0xf1, 0xfe, 0x92, 0xe9, 0xfa, 0x5e, 0xd8, 0x02, 0x9c, 0x01, 0xff, 0xed, 0x3d, 0xfe, 0x0f, 0x09, 0x01, 0x4a, 0x81, 0x01, 0x1b, 0xca, 0x01, 0x85, 0x62, 0x03, 0x4b, 0xea, 0xff, 0x4f, 0x24, 0xfe, 0x9c, 0xd6, 0xfd, 0xc5, 0x6a, 0xfc, 0xde, 0x14, 0x00, 0x39, 0x1d, 0x00, 0x60, 0x24, 0x30, 0x85, 0x3d, 0x19, 0x06, 0xee, 0xf7, 0xba, 0xc2, 0x12, 0xdc, 0x8c, 0xf5, 0x5c, 0xf2, 0xf2, 0xe1, 0x3f, 0xfd, 0xfe, 0xc4, 0xfd, 0x6e, 0xbc, 0x04, 0x2b, 0xd6, 0xff, 0x22, 0xa2, 0xf8, 0x66, 0xbf, 0x03, 0x57, 0x0f, 0x05, 0x0c, 0xba, 0xf9, 0x58, 0x35, 0xfe, 0x99, 0xa6, 0xfc, 0x0d, 0x78, 0xff, 0xac, 0x9f, 0xfe, 0x7b, 0xf3, 0xfb, 0x77, 0xf7, 0x01, 0xea, 0x9e, 0xfe, 0x0b, 0xef, 0xfe, 0xff, 0xde, 0x00, 0x80, 0xd5, 0x00, 0x1e, 0x63, 0x02, 0x81, 0x99, 0x03, 0xcb, 0x1b, 0xff, 0x67, 0x18, 0xfe, 0x01, 0x67, 0xfe, 0x74, 0xfd, 0xfc, 0x6d, 0x02, 0x00, 0xb2, 0xe7, 0x00, 0x8f, 0xff, 0x2b, 0x74, 0x0c, 0x17, 0xb6, 0x2d, 0xfa, 0xfb, 0x44, 0x12, 0x57, 0x42, 0xf6, 0xf8, 0x47, 0xf6, 0x5e, 0x65, 0xfd, 0x79, 0x54, 0xfb, 0xfc, 0x0f, 0x05, 0x03, 0xfd, 0xff, 0x12, 0xab, 0xf8, 0xf0, 0x28, 0x03, 0xf2, 0x92, 0x05, 0xf1, 0x04, 0xfb, 0x98, 0x0f, 0xfe, 0x4e, 0x0c, 0xfd, 0x11, 0x98, 0xff, 0xdc, 0x34, 0xff, 0x1b, 0xda, 0xfb, 0x72, 0x0b, 0x01, 0xb8, 0x09, 0xff, 0xe8, 0x3e, 0xff, 0xb0, 0x72, 0x00, 0x0b, 0xde, 0x00, 0xdb, 0x70, 0x02, 0x50, 0x37, 0x03, 0xc3, 0x39, 0xff, 0xb9, 0xc0, 0xfd, 0x02, 0xde, 0xfe, 0xd4, 0xfb, 0xfd, 0xec, 0x8d, 0xff, 0xaa, 0xf4, 0x00, 0xd5, 0xa0, 0x26, 0x4c, 0x78, 0x16, 0xa6, 0xae, 0x00, 0x69, 0xb9, 0x0b, 0x73, 0x77, 0xf4, 0xb5, 0x93, 0xf9, 0xfc, 0x44, 0x00, 0xda, 0x6e, 0xff, 0x35, 0x64, 0xff, 0x82, 0xcc, 0xfd, 0xd7, 0x17, 0xfb, 0xf7, 0x42, 0x04, 0x45, 0x34, 0x03, 0x96, 0xa4, 0xfa, 0x75, 0xa5, 0x00, 0x81, 0xcb, 0xfc, 0x6a, 0xd0, 0xfe, 0x8f, 0xd2, 0xff, 0x94, 0x27, 0xfc, 0x8a, 0xf6, 0x00, 0xd1, 0x2c, 0xff, 0x21, 0x14, 0xfe, 0x89, 0xfa, 0x00, 0xd8, 0x93, 0x00, 0x10, 0xea, 0xfe, 0xb0, 0x3d, 0x02, 0xdf, 0xe7, 0x00, 0x83, 0x82, 0xff, 0x2c, 0x55, 0x00, 0xa2, 0x93, 0xfd, 0x83, 0x36, 0xff, 0x8c, 0x7a, 0xff, 0xae, 0x8b, 0x20, 0xbe, 0xa2, 0x15, 0xec, 0xc9, 0x03, 0x5d, 0x3b, 0x09, 0x25, 0x6e, 0xf7, 0x4d, 0xa9, 0xfc, 0x2d, 0xb2, 0xfe, 0x3d, 0x86, 0xfe, 0x37, 0x6c, 0x00, 0xcb, 0x6f, 0xfe, 0xa7, 0xe6, 0xfa, 0xab, 0x80, 0x03, 0xe3, 0xda, 0x03, 0x14, 0xc6, 0xfb, 0xeb, 0x39, 0x00, 0xe5, 0x55, 0xfd, 0x60, 0x3e, 0xff, 0x00, 0xb5, 0xff, 0xd8, 0xca, 0xfc, 0x0d, 0x9f, 0x00, 0x90, 0x2c, 0xff, 0x5a, 0x6e, 0xfe, 0xb9, 0xc2, 0x00, 0xec, 0x66, 0x00, 0xd3, 0x60, 0xff, 0xed, 0x40, 0x02, 0x55, 0xd9, 0x00, 0x91, 0xe7, 0xff, 0x3d, 0xc5, 0xff, 0xcf, 0xc5, 0xfd, 0x09, 0x0c, 0x00, 0x1c, 0xfd, 0xff, 0xea, 0x05, 0x1a, 0x62, 0x9b, 0x15, 0x4d, 0x9a, 0x06, 0x52, 0x76, 0x06, 0xdb, 0x7e, 0xfa, 0x7c, 0x6a, 0xfe, 0x29, 0xd2, 0xfd, 0x92, 0xce, 0xfd, 0xc4, 0xce, 0x00, 0xed, 0xdb, 0xfe, 0x31, 0x5b, 0xfb, 0xcd, 0x02, 0x03, 0x84, 0x37, 0x03, 0xd2, 0x09, 0xfd, 0x4b, 0x0f, 0x00, 0xe3, 0xce, 0xfd, 0x9d, 0x34, 0xff, 0x3b, 0x75, 0xff, 0x8a, 0x9e, 0xfd, 0xa8, 0x62, 0x00, 0x17, 0xe7, 0xfe, 0xa3, 0x89, 0xfe, 0x78, 0xd5, 0x00, 0x55, 0x21, 0x00, 0x56, 0xcc, 0xff, 0x30, 0xc3, 0x01, 0x3d, 0xaa, 0x00, 0xcb, 0x5e, 0x00, 0x82, 0x93, 0xff, 0xd2, 0x41, 0xfe, 0x8b, 0x8b, 0x00, 0x26, 0x85, 0x00, 0x63, 0xc8, 0x15, 0xd1, 0x72, 0x14, 0xa5, 0x00, 0x07, 0xae, 0x8d, 0x06, 0x2c, 0x8d, 0xfc, 0xa6, 0xf5, 0xfd, 0x2f, 0x8d, 0xfe, 0x4c, 0x77, 0xfe, 0xda, 0x7f, 0x00, 0xdd, 0xb7, 0xfe, 0x80, 0x6b, 0xfc, 0x99, 0x9f, 0x02, 0x2d, 0xc5, 0x02, 0xf5, 0xa5, 0xfd, 0xe7, 0x02, 0x00, 0x5c, 0x80, 0xfe, 0x50, 0x02, 0xff, 0xb1, 0xa8, 0xff, 0xb3, 0x33, 0xfe, 0x5d, 0xe9, 0xff, 0x41, 0x0f, 0xff, 0x5b, 0x30, 0xff, 0x5b, 0x58, 0x00, 0xfd, 0xdb, 0xff, 0xbe, 0x51, 0x00, 0xf6, 0x74, 0x01, 0xb4, 0x03, 0x01, 0x3c, 0xaa, 0x00, 0xe3, 0xa6, 0xff, 0xfc, 0x47, 0xff, 0x28, 0xf2, 0x00, 0xee, 0x05, 0x00, 0xb6, 0x3d, 0x13, 0x19, 0x76, 0x12, 0x71, 0xb6, 0x06, 0x9c, 0x3a, 0x07, 0x72, 0x81, 0xfd, 0x61, 0x73, 0xfd, 0xfd, 0x86, 0xff, 0x43, 0x75, 0xff, 0x02, 0xad, 0xff, 0xbb, 0xcb, 0xfe, 0xb0, 0x93, 0xfd, 0x91, 0x02, 0x02, 0xed, 0x5f, 0x02, 0x93, 0xe2, 0xfd, 0xa4, 0x45, 0x00, 0xb7, 0x21, 0xff, 0x4d, 0xaf, 0xfe, 0xc1, 0xbd, 0xff, 0x0a, 0xde, 0xfe, 0x4b, 0xbf, 0xff, 0xd3, 0x14, 0xff, 0x61, 0x76, 0xff, 0x7e, 0xe1, 0xff, 0x04, 0x10, 0x00, 0x48, 0xc4, 0x00, 0x60, 0x80, 0x01, 0x75, 0xad, 0x01, 0xd7, 0xaa, 0x00, 0xf6, 0xbd, 0xff, 0xeb, 0xe4, 0xff, 0x4e, 0x8e, 0x00, 0xdf, 0x64, 0xff, 0x1a, 0xbc, 0x10, 0x3f, 0x9a, 0x10, 0xed, 0x13, 0x07, 0x06, 0x67, 0x07, 0x9e, 0x58, 0xfe, 0x84, 0xa0, 0xfd, 0x24, 0xe9, 0xff, 0x51, 0x46, 0x00, 0x5e, 0x82, 0xff, 0xc6, 0x29, 0xff, 0x10, 0x1a, 0xfe, 0xce, 0x4b, 0x01, 0x82, 0x5b, 0x02, 0xa7, 0x9c, 0xfe, 0xeb, 0x48, 0x00, 0x8d, 0x3f, 0xff, 0xcd, 0xe6, 0xfe, 0xd9, 0x4b, 0x00, 0x22, 0x4f, 0xff, 0xb1, 0x28, 0xff, 0x3b, 0x82, 0xff, 0x8e, 0xe7, 0xff, 0x1a, 0xaf, 0xff, 0x35, 0xd8, 0x00, 0x6c, 0x38, 0x01, 0xd6, 0xc3, 0x01, 0x87, 0xf0, 0x01, 0x0d, 0x4d, 0x00, 0x82, 0xb8, 0xff, 0xc7, 0xda, 0xff, 0xdb, 0x23, 0x00, 0xd0, 0x24, 0xff, 0xbe, 0x5b, 0x0e, 0x85, 0xe7, 0x0e, 0x4e, 0x81, 0x07, 0x20, 0x77, 0x07, 0x04, 0x25, 0xff, 0x57, 0xc5, 0xfd, 0xd6, 0x11, 0x00, 0x07, 0x37, 0x01, 0x31, 0x7f, 0xff, 0x20, 0x3d, 0xff, 0xfb, 0x6f, 0xfe, 0x39, 0xe7, 0x00, 0xcc, 0x60, 0x02, 0xa0, 0x00, 0xff, 0x5d, 0x61, 0x00, 0x38, 0x8a, 0xff, 0x45, 0x45, 0xff, 0x55, 0x96, 0x00, 0xa9, 0x45, 0xff, 0xb1, 0x3d, 0xff, 0x8c, 0x49, 0x00, 0x10, 0x63, 0x00, 0xad, 0x27, 0x00, 0x4e, 0x22, 0x01, 0xc2, 0x39, 0x01, 0x76, 0xfa, 0x01, 0x57, 0x51, 0x01, 0x0e, 0x8b, 0xff, 0x41, 0xdd, 0xff, 0xd2, 0x09, 0x00, 0xf0, 0xe2, 0xff, 0xb3, 0xf6, 0xfe, 0x65, 0x8e, 0x0c, 0x24, 0xf2, 0x0d, 0x8e, 0x5d, 0x07, 0x5b, 0xc4, 0x06, 0xe7, 0x15, 0x00, 0x6d, 0x41, 0xfe, 0x8a, 0x41, 0x00, 0x02, 0x96, 0x01, 0xe6, 0x89, 0xff, 0xab, 0xa8, 0xff, 0x70, 0xbc, 0xfe, 0x4b, 0x5b, 0x00, 0xc8, 0x66, 0x02, 0xef, 0xe7, 0xff, 0xdd, 0x38, 0x00, 0x9c, 0xa6, 0xff, 0x86, 0xd1, 0xff, 0x41, 0xab, 0x00, 0xc1, 0xd0, 0xff, 0xef, 0x32, 0x00, 0x0e, 0x19, 0x01, 0x91, 0x49, 0x00, 0x94, 0x1d, 0x00, 0x91, 0x62, 0x01, 0x4a, 0xe7, 0x00, 0x95, 0x0c, 0x01, 0x01, 0xc6, 0x00, 0x75, 0xcc, 0xff, 0xe1, 0x0e, 0x00, 0xa6, 0xef, 0xff, 0xb7, 0x83, 0xff, 0x45, 0x19, 0xff, 0x63, 0x8d, 0x0a, 0xce, 0x72, 0x0c, 0x91, 0xe5, 0x07, 0x96, 0x2c, 0x07, 0xbc, 0x59, 0x00, 0xa1, 0x35, 0xfe, 0x9b, 0x80, 0x00, 0xe9, 0x4a, 0x02, 0x30, 0xcd, 0xff, 0x8d, 0x7f, 0xff, 0xce, 0xf3, 0xfe, 0x06, 0x73, 0x00, 0x8d, 0x74, 0x02, 0x1b, 0x42, 0x00, 0x33, 0x44, 0x00, 0xb9, 0xfb, 0xff, 0x0f, 0xaf, 0x00, 0x1e, 0x80, 0x01, 0x6a, 0x9e, 0x00, 0x88, 0x9a, 0x00, 0x64, 0xa0, 0x00, 0x52, 0x20, 0x00, 0x38, 0x01, 0x00, 0x6a, 0x8a, 0x00, 0x94, 0x9b, 0x00, 0xca, 0xdf, 0x00, 0x92, 0xa5, 0x00, 0xba, 0xd5, 0xff, 0x53, 0x19, 0x00, 0xc8, 0xea, 0xff, 0xb8, 0x48, 0xff, 0x3a, 0x4e, 0xff, 0x95, 0xa6, 0x09, 0xe0, 0xd7, 0x0b, 0xde, 0xc2, 0x07, 0x28, 0x2e, 0x06, 0x2d, 0x73, 0x00, 0x47, 0xd5, 0xfe, 0x1c, 0x06, 0x01, 0x4b, 0x30, 0x02, 0x34, 0xec, 0xff, 0xb1, 0xd9, 0xff, 0x39, 0x2a, 0xff, 0xee, 0x99, 0x00, 0x66, 0x78, 0x02, 0x1e, 0x78, 0x00, 0xab, 0xe5, 0x00, 0x1f, 0x80, 0x01, 0x02, 0x84, 0x01, 0xe1, 0x27, 0x01, 0x9b, 0x7c, 0x00, 0x32, 0x7e, 0x00, 0x9f, 0xbe, 0xff, 0x65, 0x6a, 0xff, 0x69, 0x0a, 0x00, 0x64, 0x7f, 0x00, 0x72, 0x68, 0x00, 0x9f, 0x8c, 0x00, 0x60, 0x62, 0x00, 0x2d, 0x13, 0x00, 0x1c, 0x30, 0x00, 0x20, 0x81, 0xff, 0x61, 0x41, 0xff, 0x7d, 0x38, 0xff, 0xcb, 0xa5, 0x08, 0x7d, 0x14, 0x0b, 0xc1, 0xe8, 0x07, 0x91, 0xf8, 0x05, 0xe1, 0x30, 0x00, 0xd4, 0x07, 0xff, 0xd4, 0xbe, 0x01, 0x84, 0x73, 0x02, 0xca, 0xce, 0xff, 0xb7, 0x4a, 0x00, 0xed, 0x75, 0xff, 0x78, 0x6f, 0x00, 0x49, 0x87, 0x03, 0x38, 0xf6, 0x01, 0x27, 0x5b, 0x01, 0x89, 0x4b, 0x01, 0x57, 0x11, 0x01, 0x02, 0xed, 0x00, 0x98, 0xd6, 0xff, 0x1d, 0x42, 0xff, 0xbe, 0x93, 0xff, 0xfc, 0x01, 0x00, 0x92, 0xb0, 0xff, 0xd8, 0x10, 0x00, 0x54, 0x61, 0x00, 0xea, 0x7d, 0x00, 0x70, 0x65, 0x00, 0x96, 0xe7, 0xff, 0x33, 0xe8, 0xff, 0x10, 0x4b, 0xff, 0x5a, 0x25, 0xff, 0xfe, 0x2d, 0xff, 0x55, 0x43, 0x08, 0x89, 0xec, 0x0a, 0xd6, 0xb4, 0x07, 0xde, 0x2b, 0x05, 0xb8, 0xfe, 0xff, 0xdb, 0xbc, 0xff, 0x13, 0x55, 0x02, 0x8b, 0xb5, 0x02, 0x14, 0x88, 0xff, 0x79, 0x68, 0x00, 0x2c, 0x5d, 0x01, 0x32, 0xfa, 0x01, 0x02, 0x57, 0x03, 0x8b, 0x44, 0x01, 0x88, 0x1f, 0x01, 0x44, 0xeb, 0x00, 0x22, 0xf1, 0xff, 0x3a, 0xed, 0xff, 0x1d, 0xac, 0xff, 0xfd, 0x48, 0xff, 0xfb, 0x92, 0xff, 0x9f, 0xbc, 0xff, 0x65, 0x7b, 0xff, 0xde, 0x86, 0x00, 0xfa, 0x42, 0x00, 0x87, 0xab, 0xff, 0x4c, 0x41, 0x00, 0x23, 0x07, 0x00, 0xec, 0x6d, 0xff, 0x67, 0x27, 0xff, 0xd7, 0x34, 0xff, 0x75, 0xe5, 0xfe, 0xbc, 0x91, 0x08, 0xce, 0x6a, 0x0b, 0xc2, 0xf8, 0x06, 0x24, 0x2b, 0x04, 0xf5, 0x33, 0x00, 0x62, 0xc1, 0x00, 0xb8, 0x56, 0x02, 0x21, 0x24, 0x03, 0x11, 0x74, 0x01, 0xb1, 0x9f, 0x01, 0x2a, 0xbb, 0x01, 0xa4, 0x10, 0x01, 0x90, 0x72, 0x02, 0xc3, 0xfc, 0x00, 0xb8, 0xe0, 0xff, 0xc0, 0xf9, 0xff, 0xe2, 0x0c, 0x00, 0xd5, 0xd7, 0xff, 0x59, 0x4b, 0xff, 0x8d, 0x08, 0xff, 0x42, 0x07, 0x00, 0xb5, 0x35, 0x00, 0xb5, 0x63, 0xff, 0x60, 0x00, 0x00, 0xdd, 0xa7, 0xff, 0x3b, 0xaf, 0xff, 0xd3, 0x52, 0x00, 0x73, 0xe7, 0xff, 0x6b, 0x25, 0xff, 0x6d, 0xea, 0xfe, 0x52, 0x4a, 0xff, 0x72, 0xf9, 0xfe, 0x5b, 0xf8, 0x08, 0x21, 0x86, 0x0c, 0xe0, 0xfd, 0x05, 0x85, 0x34, 0x03, 0x98, 0x21, 0x00, 0xea, 0x67, 0x02, 0xe4, 0x5d, 0x05, 0xfb, 0xb4, 0x03, 0xe4, 0xe3, 0x00, 0x41, 0xf3, 0x00, 0x28, 0x6c, 0x01, 0xb3, 0x4c, 0x00, 0xc0, 0x05, 0x01, 0xa1, 0x40, 0x00, 0x86, 0x1b, 0x00, 0xc6, 0xe6, 0xff, 0xea, 0x71, 0xff, 0xbb, 0xb8, 0xff, 0x11, 0x88, 0xff, 0xd1, 0xfa, 0xff, 0xda, 0x2b, 0x00, 0x8d, 0x78, 0xff, 0xd2, 0x15, 0xff, 0x5b, 0xbf, 0xff, 0xeb, 0xac, 0xff, 0x51, 0xb6, 0xff, 0x69, 0x52, 0x00, 0xc2, 0xa9, 0xff, 0x10, 0xdc, 0xfe, 0x38, 0x27, 0xff, 0x5f, 0x7c, 0xff, 0x9c, 0x36, 0xff, 0x56, 0x18, 0x09, 0x48, 0xf7, 0x0c, 0xd4, 0x2a, 0x05, 0xbe, 0xee, 0x02, 0xa1, 0x5e, 0x03, 0xf8, 0xa0, 0x04, 0xdd, 0x77, 0x04, 0xcc, 0xae, 0x02, 0x60, 0xa0, 0x00, 0xe5, 0x36, 0x00, 0x9c, 0x70, 0x00, 0xf3, 0xc7, 0xff, 0x3c, 0xc3, 0x00, 0x35, 0x01, 0x00, 0x4d, 0xe4, 0xff, 0x57, 0xcf, 0xff, 0x33, 0x47, 0xff, 0x07, 0x54, 0x00, 0x5e, 0x68, 0x00, 0x96, 0x6f, 0xff, 0x57, 0x56, 0xff, 0x9c, 0x96, 0xff, 0xf0, 0x37, 0xff, 0x85, 0x3c, 0xff, 0x6a, 0x92, 0xff, 0x5b, 0x17, 0x00, 0x31, 0xd8, 0xff, 0x11, 0x88, 0xff, 0x70, 0x56, 0xff, 0x2c, 0x54, 0xff, 0xc1, 0x59, 0xff, 0x32, 0x28, 0xff, 0x99, 0x3b, 0x08, 0x24, 0x7d, 0x0c, 0x2d, 0xda, 0x07, 0x10, 0x3b, 0x05, 0x96, 0x7c, 0x02, 0xa4, 0x12, 0x04, 0x63, 0xac, 0x04, 0x1e, 0xff, 0x01, 0xa7, 0xd4, 0xff, 0x5d, 0xd6, 0xff, 0x3e, 0x85, 0x00, 0xa0, 0xde, 0xff, 0x26, 0x38, 0x00, 0x50, 0xe6, 0xff, 0x88, 0xfb, 0xff, 0x1f, 0x22, 0x00, 0xd0, 0x47, 0x00, 0x27, 0x54, 0x00, 0x6f, 0xaa, 0xff, 0x68, 0x88, 0xff, 0x43, 0x8f, 0xff, 0xc3, 0x5e, 0xff, 0xf0, 0xf1, 0xfe, 0xc0, 0x5d, 0xff, 0x88, 0x96, 0xff, 0xab, 0xd3, 0xff, 0xb3, 0x1b, 0x00, 0xb1, 0xe4, 0xff, 0x1d, 0x95, 0xff, 0x90, 0x39, 0xff, 0x09, 0x0b, 0xff, 0x4c, 0x2c, 0xff, 0xb9, 0x52, 0x0a, 0xac, 0xac, 0x0f, 0x35, 0x80, 0x06, 0xb4, 0x5f, 0x02, 0x3c, 0x14, 0x03, 0x78, 0x2c, 0x04, 0x6e, 0x79, 0x03, 0x50, 0x95, 0x01, 0xd2, 0x89, 0xff, 0xd9, 0xd4, 0xff, 0x94, 0x79, 0x00, 0xff, 0x01, 0x00, 0x4e, 0x6d, 0x00, 0xb0, 0x8f, 0xff, 0xea, 0x5f, 0x00, 0xb2, 0x4f, 0x01, 0x7a, 0x3b, 0x00, 0x25, 0x3a, 0xff, 0xec, 0xef, 0xff, 0x2a, 0xf9, 0xff, 0x4e, 0x31, 0xff, 0xb4, 0x0a, 0xff, 0xca, 0x11, 0xff, 0x17, 0x78, 0xff, 0xb8, 0x72, 0xff, 0xab, 0x1c, 0x00, 0x7e, 0x6e, 0x00, 0x83, 0x04, 0x00, 0xf7, 0x48, 0xff, 0xfd, 0xfb, 0xfe, 0x6b, 0x2c, 0xff, 0x3d, 0x00, 0xff, 0x4d, 0xe6, 0x0a, 0x94, 0xef, 0x10, 0x52, 0x75, 0x05, 0x01, 0xb9, 0x00, 0x50, 0x10, 0x03, 0x1d, 0xb5, 0x03, 0x2f, 0x34, 0x03, 0x06, 0x34, 0x02, 0x08, 0x04, 0x00, 0x11, 0x4e, 0xff, 0x78, 0xe1, 0x00, 0xf6, 0x4b, 0x00, 0xbe, 0x31, 0x00, 0x0a, 0x45, 0x00, 0x40, 0xe1, 0x00, 0x96, 0x3b, 0x01, 0xf7, 0xf7, 0xff, 0x3e, 0xbd, 0xff, 0x7c, 0xee, 0xff, 0x53, 0xcc, 0xff, 0xad, 0x37, 0xff, 0xf8, 0x42, 0xff, 0x47, 0x12, 0xff, 0x67, 0x1e, 0xff, 0x8c, 0xb8, 0xff, 0x0c, 0x38, 0x00, 0x69, 0x76, 0x00, 0x42, 0xf4, 0xff, 0x0d, 0x7d, 0xff, 0x31, 0xf8, 0xfe, 0xea, 0x0b, 0xff, 0x00, 0x16, 0xff, 0xf0, 0x32, 0x08, 0x22, 0x53, 0x0f, 0x68, 0xeb, 0x08, 0x22, 0x84, 0x01, 0x4e, 0xc0, 0x00, 0x58, 0x71, 0x02, 0x9d, 0xa9, 0x03, 0x40, 0x61, 0x03, 0xe2, 0x38, 0x00, 0x17, 0x67, 0xff, 0xe8, 0x27, 0x01, 0x62, 0x01, 0x01, 0x3e, 0xf8, 0xff, 0x5b, 0x26, 0x00, 0x12, 0x55, 0x01, 0xdb, 0x5d, 0x01, 0xca, 0x91, 0x00, 0xad, 0xc7, 0xff, 0xdc, 0xde, 0xff, 0xe1, 0x1c, 0x00, 0x68, 0x92, 0xff, 0x28, 0x0f, 0xff, 0xc4, 0x3c, 0xff, 0x93, 0x56, 0xff, 0xe7, 0x59, 0xff, 0x78, 0x0a, 0x00, 0xac, 0x63, 0x00, 0xe6, 0x23, 0x00, 0xfe, 0x94, 0xff, 0x4e, 0x47, 0xff, 0x7f, 0x26, 0xff, 0x73, 0x08, 0xff, 0x8d, 0xd5, 0x06, 0xc1, 0x7d, 0x0d, 0x5c, 0xf4, 0x09, 0xc6, 0x34, 0x03, 0x6d, 0x6f, 0x00, 0x27, 0x79, 0x01, 0x95, 0xc8, 0x02, 0x8e, 0x51, 0x03, 0x51, 0xcd, 0x00, 0x55, 0x71, 0xff, 0x7e, 0x0d, 0x01, 0x21, 0x94, 0x01, 0xe6, 0x57, 0x00, 0x66, 0x2f, 0x00, 0x1d, 0x26, 0x01, 0x2f, 0x02, 0x01, 0x3b, 0x2d, 0x01, 0x8d, 0x74, 0x00, 0xed, 0x15, 0x00, 0x91, 0x27, 0x00, 0x94, 0x86, 0xff, 0x22, 0x82, 0xff, 0xb5, 0x99, 0xff, 0x69, 0x42, 0xff, 0xde, 0x36, 0xff, 0x2e, 0xfa, 0xff, 0xa9, 0x53, 0x00, 0x9f, 0xf8, 0xff, 0xcc, 0x70, 0xff, 0xaa, 0x87, 0xff, 0x88, 0x72, 0xff, 0x03, 0x1b, 0xff, 0x30, 0xc4, 0x06, 0xe8, 0x23, 0x0d, 0x8b, 0x60, 0x09, 0x69, 0xa4, 0x03, 0x08, 0xeb, 0x00, 0x20, 0xf5, 0x00, 0x41, 0x96, 0x02, 0xea, 0x5b, 0x03, 0x71, 0x7d, 0x00, 0x72, 0xd7, 0xfe, 0x3f, 0xd4, 0x00, 0x67, 0xce, 0x01, 0x34, 0x91, 0x00, 0x1e, 0x25, 0x00, 0x81, 0x2c, 0x01, 0x15, 0x26, 0x01, 0xd3, 0xe3, 0x00, 0xfb, 0x94, 0x00, 0xaa, 0x91, 0x00, 0xea, 0x77, 0x00, 0x7c, 0xd4, 0xff, 0x64, 0xb0, 0xff, 0x44, 0xab, 0xff, 0xbb, 0x91, 0xff, 0x9a, 0xb8, 0xff, 0xa3, 0xb5, 0xff, 0x5b, 0x11, 0x00, 0x09, 0x34, 0x00, 0x92, 0x66, 0xff, 0xc0, 0x33, 0xff, 0x49, 0x48, 0xff, 0xb7, 0x70, 0xff, 0xbb, 0x0e, 0x07, 0xb9, 0x23, 0x0d, 0xd2, 0xee, 0x08, 0x9d, 0xe3, 0x03, 0x9d, 0x45, 0x01, 0x07, 0xaa, 0x00, 0xc9, 0x52, 0x02, 0x4b, 0x73, 0x03, 0x15, 0x92, 0x00, 0xc8, 0xa7, 0xfe, 0x77, 0x62, 0x00, 0x0b, 0x5a, 0x01, 0x34, 0x46, 0x00, 0x7c, 0x05, 0x00, 0x2e, 0x19, 0x01, 0x5d, 0xe9, 0x00, 0x3b, 0xd0, 0x00, 0x3d, 0x11, 0x01, 0x43, 0x62, 0x00, 0x7f, 0x2a, 0x00, 0x80, 0x54, 0x00, 0xe2, 0x00, 0x00, 0x4f, 0xe3, 0xff, 0x46, 0xe3, 0xff, 0x14, 0xf9, 0xff, 0xd8, 0xee, 0xff, 0x2c, 0x28, 0x00, 0xe6, 0x1c, 0x00, 0x5d, 0x8d, 0xff, 0x2d, 0x18, 0xff, 0x0c, 0x08, 0xff, 0xe7, 0x3b, 0xff, 0xef, 0xb1, 0x07, 0xcb, 0xb8, 0x0d, 0xd7, 0x83, 0x08, 0x6c, 0xc6, 0x03, 0x2f, 0x67, 0x01, 0x1d, 0x92, 0x00, 0x97, 0x67, 0x02, 0xc2, 0x86, 0x03, 0x34, 0x5d, 0x00, 0xb5, 0x8b, 0xfe, 0x2a, 0x69, 0x00, 0xc7, 0x50, 0x01, 0xa8, 0x31, 0x00, 0x88, 0x4a, 0xff, 0x81, 0x85, 0x00, 0x3e, 0xbe, 0x00, 0x65, 0x79, 0x00, 0x45, 0x1f, 0x01, 0xf9, 0xb5, 0x00, 0xac, 0x2a, 0x00, 0x1e, 0x0e, 0x00, 0x98, 0xbf, 0xff, 0xfe, 0x5b, 0x00, 0x6b, 0x6a, 0x00, 0x9c, 0xf3, 0xff, 0x89, 0x80, 0x00, 0xc9, 0x79, 0x00, 0xc0, 0x21, 0x00, 0xa6, 0xbc, 0xff, 0xfa, 0x41, 0xff, 0x2f, 0x08, 0xff, 0xef, 0xfc, 0xfe, 0x87, 0x38, 0x08, 0x53, 0x9e, 0x0e, 0xd7, 0x67, 0x08, 0xf8, 0x5f, 0x03, 0xc3, 0xbb, 0x01, 0x48, 0x77, 0x00, 0x0d, 0x31, 0x02, 0x42, 0xaf, 0x03, 0x4f, 0x4a, 0x00, 0xc9, 0x6d, 0xfe, 0x0c, 0x44, 0x00, 0x6b, 0x3d, 0x01, 0x8a, 0x70, 0x00, 0xea, 0x19, 0xff, 0x6a, 0xf3, 0xff, 0xca, 0x5b, 0x00, 0x83, 0xa8, 0xff, 0xc7, 0x95, 0x00, 0x11, 0x3a, 0x01, 0x3c, 0x22, 0x00, 0xe0, 0xb9, 0xff, 0xb1, 0xb7, 0xff, 0xd7, 0x11, 0x00, 0xd7, 0x79, 0x00, 0x83, 0x27, 0x00, 0x33, 0xbc, 0x00, 0x30, 0xcf, 0x00, 0x18, 0x63, 0x00, 0x6a, 0x27, 0x00, 0x5a, 0x6b, 0xff, 0xd5, 0xf8, 0xfe, 0x0b, 0x27, 0xff, 0xf5, 0xec, 0x08, 0x80, 0xbd, 0x0f, 0x7c, 0x47, 0x08, 0x29, 0x0a, 0x03, 0xc1, 0x02, 0x02, 0x5f, 0x35, 0x00, 0x69, 0x06, 0x02, 0x28, 0xe6, 0x03, 0x8f, 0x19, 0x00, 0x42, 0x18, 0xfe, 0xfa, 0x5c, 0x00, 0xfc, 0x35, 0x01, 0x8d, 0x52, 0x00, 0x95, 0x3a, 0xff, 0x7c, 0x9d, 0xff, 0x07, 0x2b, 0x00, 0x37, 0x51, 0xff, 0xd2, 0xa7, 0xff, 0xd0, 0x12, 0x01, 0xde, 0x2a, 0x00, 0x2f, 0x75, 0xff, 0x10, 0x97, 0xff, 0x1c, 0xbc, 0xff, 0xfb, 0x67, 0x00, 0xee, 0x27, 0x00, 0xc5, 0x69, 0x00, 0x3d, 0x05, 0x01, 0x44, 0xb3, 0x00, 0x29, 0x30, 0x00, 0x3a, 0xeb, 0xff, 0x86, 0x79, 0xff, 0xdf, 0x00, 0xff, 0x63, 0xeb, 0x09, 0xa1, 0x21, 0x11, 0xdc, 0x18, 0x08, 0xfd, 0x82, 0x02, 0xf4, 0x58, 0x02, 0xa4, 0x12, 0x00, 0x1a, 0xcf, 0x01, 0x3a, 0x1d, 0x04, 0xcb, 0xf6, 0xff, 0x3e, 0xd1, 0xfd, 0xd5, 0x66, 0x00, 0x9e, 0x36, 0x01, 0x60, 0x2e, 0x00, 0x50, 0x72, 0xff, 0x7c, 0x7d, 0xff, 0xeb, 0xe0, 0xff, 0xa9, 0x4b, 0xff, 0x9a, 0x25, 0xff, 0x9c, 0xba, 0x00, 0x23, 0x72, 0x00, 0x15, 0x03, 0xff, 0x64, 0x15, 0xff, 0xc0, 0xce, 0xff, 0xe2, 0x3c, 0x00, 0x60, 0x0c, 0x00, 0x9c, 0x18, 0x00, 0x79, 0xfe, 0x00, 0x5f, 0xbd, 0x00, 0xb2, 0x0a, 0x00, 0xe3, 0x3f, 0x00, 0xd4, 0xd3, 0xff, 0x83, 0x69, 0xff, 0xb7, 0x16, 0x0b, 0x9e, 0xc0, 0x12, 0x9e, 0xe5, 0x07, 0x75, 0xd3, 0x01, 0xc9, 0xa4, 0x02, 0x06, 0xeb, 0xff, 0x20, 0xac, 0x01, 0x3e, 0x62, 0x04, 0x4a, 0x83, 0xff, 0x0f, 0xa4, 0xfd, 0xdc, 0x9f, 0x00, 0xa9, 0x29, 0x01, 0x1c, 0xe2, 0xff, 0x0c, 0x66, 0xff, 0x3e, 0xbc, 0xff, 0x6b, 0xa1, 0xff, 0xef, 0x0f, 0xff, 0x4d, 0xfd, 0xfe, 0x6e, 0x40, 0x00, 0x56, 0xb5, 0x00, 0x49, 0x32, 0xff, 0xaa, 0x72, 0xfe, 0xb8, 0x95, 0xff, 0x58, 0x1a, 0x00, 0x07, 0xe7, 0xff, 0x12, 0x05, 0x00, 0x11, 0x8a, 0x00, 0xd0, 0x94, 0x00, 0x2b, 0x28, 0x00, 0x20, 0x04, 0x00, 0xb4, 0xdf, 0xff, 0x97, 0xb6, 0xff, 0x29, 0x94, 0x0c, 0x1f, 0x80, 0x14, 0x1e, 0x75, 0x07, 0xe3, 0x34, 0x01, 0xa7, 0xd8, 0x02, 0xc9, 0x92, 0xff, 0x9d, 0xc0, 0x01, 0xce, 0xab, 0x04, 0x13, 0xcb, 0xfe, 0xcd, 0x6f, 0xfd, 0xfa, 0x0b, 0x01, 0xfe, 0x24, 0x01, 0x15, 0x75, 0xff, 0x3c, 0x3e, 0xff, 0x8f, 0xe2, 0xff, 0x4c, 0x78, 0xff, 0x3e, 0xc4, 0xfe, 0x9d, 0xde, 0xfe, 0xbb, 0xf8, 0xff, 0x27, 0x88, 0x00, 0xde, 0x9b, 0xff, 0xa3, 0x40, 0xfe, 0x5c, 0x40, 0xff, 0x52, 0x2a, 0x00, 0x51, 0x91, 0xff, 0x1e, 0xdd, 0xff, 0xe6, 0x48, 0x00, 0xbe, 0x21, 0x00, 0x7f, 0x03, 0x00, 0x1b, 0xf1, 0xff, 0x02, 0xda, 0xff, 0x7d, 0x88, 0xff, 0xe8, 0x0b, 0x0e, 0x2c, 0x58, 0x16, 0x5f, 0x26, 0x07, 0x83, 0x85, 0x00, 0x11, 0xda, 0x02, 0x5c, 0x12, 0xff, 0x18, 0xe8, 0x01, 0x88, 0xff, 0x04, 0x6b, 0xd9, 0xfd, 0x84, 0x1a, 0xfd, 0x04, 0x92, 0x01, 0xd1, 0x25, 0x01, 0x07, 0xe9, 0xfe, 0x09, 0xf7, 0xfe, 0xf1, 0x05, 0x00, 0x19, 0x4a, 0xff, 0xfd, 0x52, 0xfe, 0xc5, 0x9b, 0xfe, 0x8f, 0xcd, 0xff, 0x8e, 0x49, 0x00, 0x06, 0xb9, 0xff, 0xa2, 0x6b, 0xfe, 0x65, 0xdd, 0xfe, 0x50, 0x25, 0x00, 0xd3, 0xa3, 0xff, 0x48, 0x79, 0xff, 0x68, 0x2e, 0x00, 0x0a, 0x7f, 0xff, 0xc2, 0x8e, 0xff, 0x4e, 0x08, 0x00, 0x8d, 0x9f, 0xff, 0xe3, 0x65, 0xff, 0xb4, 0x87, 0x0f, 0xb1, 0x43, 0x18, 0x2d, 0x1a, 0x07, 0x29, 0x18, 0x00, 0xac, 0xcb, 0x02, 0xa9, 0x91, 0xfe, 0x3a, 0x49, 0x02, 0x8d, 0x8f, 0x05, 0xa5, 0xe7, 0xfc, 0x86, 0xdc, 0xfc, 0x14, 0x54, 0x02, 0x24, 0x54, 0x01, 0xc7, 0x8b, 0xfe, 0x4b, 0xb6, 0xfe, 0xf8, 0x45, 0x00, 0xca, 0x51, 0xff, 0xff, 0x0e, 0xfe, 0x09, 0x6a, 0xfe, 0xe3, 0x97, 0xff, 0x3e, 0x40, 0x00, 0x20, 0xe5, 0xff, 0xb2, 0xbe, 0xfe, 0xa4, 0xf8, 0xfe, 0x51, 0xd3, 0xff, 0x57, 0x0f, 0x00, 0x4f, 0xa0, 0xff, 0xa6, 0xdc, 0xff, 0x69, 0x83, 0xff, 0xa9, 0x03, 0xff, 0x8e, 0xdd, 0xff, 0x01, 0xc3, 0xff, 0x41, 0x4d, 0xff, 0x0f, 0x9b, 0x10, 0xea, 0x14, 0x1a, 0x5a, 0xab, 0x07, 0x17, 0x93, 0xff, 0x9b, 0x90, 0x02, 0x88, 0xee, 0xfd, 0x3e, 0x55, 0x02, 0x6d, 0x49, 0x06, 0xa9, 0xfd, 0xfb, 0x65, 0x41, 0xfc, 0x3e, 0x01, 0x03, 0x7e, 0x9e, 0x01, 0xcb, 0x19, 0xfe, 0x94, 0x56, 0xfe, 0x2c, 0x54, 0x00, 0x55, 0x55, 0xff, 0x7d, 0xd5, 0xfd, 0xa9, 0x11, 0xfe, 0x55, 0x27, 0xff, 0xb8, 0x21, 0x00, 0xec, 0x00, 0x00, 0x9d, 0xb9, 0xfe, 0x91, 0x5f, 0xff, 0x8f, 0xa0, 0xff, 0x42, 0xd5, 0xff, 0x3b, 0x28, 0x00, 0xde, 0x8e, 0xff, 0x82, 0x35, 0xff, 0x0c, 0x13, 0xff, 0x71, 0x3f, 0xff, 0xea, 0x94, 0xff, 0x89, 0x73, 0xff, 0xe3, 0x87, 0x11, 0xd9, 0xf1, 0x1b, 0x3a, 0x71, 0x08, 0x88, 0x20, 0xff, 0xf6, 0x52, 0x02, 0x2f, 0x96, 0xfd, 0x09, 0x23, 0x02, 0xcb, 0xb5, 0x06, 0x12, 0x90, 0xfb, 0x0f, 0x9e, 0xfb, 0xd4, 0x75, 0x03, 0x60, 0x16, 0x02, 0xdf, 0xd3, 0xfd, 0xd9, 0xe8, 0xfd, 0x8b, 0x67, 0x00, 0x94, 0x54, 0xff, 0x6a, 0xab, 0xfd, 0xe9, 0xf9, 0xfd, 0xe5, 0x8c, 0xfe, 0x46, 0xd0, 0xff, 0x81, 0x80, 0x00, 0x1e, 0x82, 0xfe, 0x46, 0x79, 0xff, 0x9a, 0x3a, 0x00, 0x1d, 0x59, 0xff, 0x0e, 0x57, 0x00, 0x00, 0xfb, 0xff, 0x1b, 0xc0, 0xfe, 0xc0, 0xe5, 0xfe, 0x40, 0x4c, 0xff, 0xa9, 0x18, 0xff, 0xc1, 0xa9, 0xff, 0x28, 0x22, 0x12, 0x58, 0xbf, 0x1d, 0x69, 0xa1, 0x09, 0x3e, 0x74, 0xfe, 0x6a, 0x4f, 0x02, 0x16, 0xa8, 0xfd, 0x1d, 0x8a, 0x01, 0xfc, 0x98, 0x06, 0x3d, 0xaf, 0xfb, 0xcf, 0x33, 0xfb, 0xb7, 0x60, 0x03, 0xf1, 0x96, 0x02, 0x87, 0xc6, 0xfd, 0x5c, 0x9d, 0xfd, 0x1e, 0x47, 0x00, 0xae, 0x52, 0xff, 0x45, 0x6d, 0xfd, 0x08, 0x00, 0xfe, 0x68, 0x47, 0xfe, 0xff, 0xe6, 0xfe, 0x05, 0xcc, 0x00, 0xd0, 0x15, 0xff, 0x85, 0xf4, 0xfe, 0xa0, 0xc2, 0x00, 0xe5, 0x8e, 0xff, 0x58, 0xd1, 0xff, 0xfd, 0x9a, 0x00, 0x1c, 0xd2, 0xfe, 0x02, 0x40, 0xfe, 0x2c, 0x50, 0xff, 0xa3, 0xf7, 0xfe, 0xf0, 0x8d, 0xff, 0x96, 0x5d, 0x13, 0x7a, 0x40, 0x1f, 0x28, 0xd3, 0x09, 0x97, 0x7d, 0xfe, 0xa6, 0x77, 0x02, 0x47, 0x6e, 0xfd, 0x65, 0x1e, 0x01, 0xa8, 0x0e, 0x06, 0x0f, 0xbd, 0xfb, 0x7a, 0x25, 0xfb, 0x75, 0x18, 0x03, 0x6a, 0xd1, 0x02, 0x61, 0xc9, 0xfd, 0x34, 0x72, 0xfd, 0xa0, 0x20, 0x00, 0xb2, 0x45, 0xff, 0x04, 0xff, 0xfc, 0xb7, 0x09, 0xfe, 0x45, 0x3a, 0xfe, 0xf3, 0x20, 0xfe, 0x7c, 0x57, 0x00, 0x01, 0xf2, 0xff, 0x77, 0xf8, 0xfe, 0x65, 0x64, 0x00, 0x28, 0x69, 0x00, 0x68, 0x5a, 0xff, 0x02, 0x85, 0x00, 0xdd, 0x83, 0xff, 0x3d, 0xce, 0xfd, 0xcc, 0xcb, 0xfe, 0xc3, 0x16, 0xff, 0x26, 0x49, 0xff, 0x2d, 0xd5, 0x15, 0x2d, 0x3c, 0x20, 0xe2, 0x6a, 0x08, 0x4e, 0x83, 0xff, 0x9e, 0x50, 0x03, 0xd0, 0x9d, 0xfc, 0x6d, 0xa2, 0x00, 0xb6, 0xf6, 0x05, 0x3d, 0x3b, 0xfb, 0xfb, 0x9d, 0xfb, 0xdf, 0xbf, 0x02, 0xd2, 0xe8, 0x02, 0x13, 0xf9, 0xfd, 0x52, 0x1b, 0xfd, 0x06, 0x56, 0x00, 0x56, 0x02, 0xff, 0xb3, 0xec, 0xfc, 0x03, 0xb3, 0xfd, 0x29, 0x59, 0xfe, 0x97, 0xe0, 0xfd, 0xc8, 0x81, 0xff, 0x76, 0x52, 0x00, 0x09, 0xec, 0xff, 0xe0, 0xe1, 0xff, 0x0a, 0xa8, 0x00, 0x20, 0xeb, 0xff, 0xf9, 0xe2, 0xff, 0x04, 0xf6, 0xff, 0x04, 0x2f, 0xfe, 0xca, 0x11, 0xfe, 0x82, 0xef, 0xfe, 0x08, 0x66, 0xff, 0x79, 0xa4, 0x18, 0x46, 0x8e, 0x20, 0x97, 0xee, 0x05, 0x8a, 0x11, 0x02, 0x2f, 0xbf, 0x04, 0x87, 0x67, 0xfa, 0x9c, 0x3f, 0x00, 0x7b, 0xaa, 0x06, 0x16, 0x57, 0xfa, 0x5a, 0xb4, 0xfb, 0x8d, 0xa4, 0x02, 0x42, 0xcb, 0x02, 0x9f, 0x3a, 0xfe, 0xc8, 0xa3, 0xfc, 0x9f, 0x85, 0x00, 0x5b, 0xa5, 0xfe, 0x05, 0x05, 0xfd, 0x89, 0x5d, 0xfd, 0xa6, 0x1c, 0xfe, 0x74, 0xf1, 0xfd, 0xa1, 0xe0, 0xfe, 0x20, 0xdf, 0xff, 0x06, 0xe8, 0x00, 0x4c, 0x47, 0x00, 0x3e, 0x10, 0x00, 0xa7, 0x95, 0x00, 0x86, 0xab, 0xff, 0x73, 0xd1, 0xff, 0x01, 0xc3, 0xfe, 0x65, 0xdf, 0xfd, 0x93, 0x4d, 0xfe, 0xcc, 0x6b, 0xff, 0x91, 0xe5, 0x1a, 0x90, 0x12, 0x20, 0x77, 0x9d, 0x03, 0x72, 0x81, 0x06, 0x0f, 0xed, 0x05, 0x4a, 0xa2, 0xf6, 0x4b, 0xbf, 0x00, 0x53, 0x47, 0x08, 0xee, 0xc8, 0xf8, 0x6d, 0x08, 0xfb, 0xf9, 0x5f, 0x03, 0x9d, 0x87, 0x02, 0xcd, 0x09, 0xfe, 0x96, 0x7a, 0xfc, 0xd4, 0xad, 0x00, 0x73, 0x27, 0xfe, 0x23, 0x01, 0xfd, 0x2c, 0x5b, 0xfd, 0x0c, 0xbf, 0xfd, 0x24, 0xe4, 0xfd, 0x86, 0x94, 0xfe, 0x45, 0x34, 0xff, 0x7e, 0x39, 0x01, 0x88, 0x29, 0x01, 0x27, 0xbb, 0xff, 0xd8, 0xcb, 0x00, 0x9a, 0xce, 0xff, 0x0f, 0x88, 0xff, 0xfa, 0xfe, 0xfe, 0xed, 0x45, 0xfe, 0xc3, 0xf2, 0xfd, 0x91, 0xce, 0xfe, 0xfe, 0xa3, 0x1c, 0x10, 0xc6, 0x1e, 0x09, 0x4b, 0x02, 0x0f, 0x12, 0x0c, 0x62, 0x23, 0x06, 0xd5, 0x84, 0xf2, 0xd6, 0x85, 0x02, 0x0d, 0x12, 0x0a, 0xbc, 0x77, 0xf6, 0xe2, 0x50, 0xfa, 0x6e, 0xe1, 0x04, 0xb5, 0x1a, 0x02, 0x77, 0x4a, 0xfd, 0x69, 0xee, 0xfc, 0x97, 0xdb, 0x00, 0x9f, 0x83, 0xfd, 0x1a, 0xf6, 0xfc, 0x85, 0xb0, 0xfd, 0x5f, 0x7f, 0xfd, 0x66, 0x99, 0xfd, 0x5a, 0xa9, 0xfe, 0x5f, 0xc8, 0xfe, 0xff, 0xf0, 0x00, 0xb8, 0xba, 0x01, 0x98, 0x1b, 0x00, 0xc1, 0x10, 0x01, 0x4f, 0xec, 0xff, 0x81, 0x5b, 0xff, 0xb4, 0xf7, 0xfe, 0x8e, 0x02, 0xff, 0x0b, 0x05, 0xfe, 0x06, 0x49, 0xfe, 0xba, 0x0c, 0x21, 0xd1, 0x57, 0x1f, 0x19, 0x7d, 0xfd, 0xc6, 0xa4, 0x0c, 0xb4, 0xdc, 0x08, 0x91, 0x75, 0xf2, 0x85, 0x58, 0x01, 0x18, 0x8d, 0x09, 0x31, 0xe9, 0xf5, 0x77, 0xa9, 0xfa, 0x3a, 0x76, 0x05, 0xb9, 0x36, 0x01, 0x8d, 0x77, 0xfc, 0xfd, 0x80, 0xfd, 0xc9, 0xcf, 0x00, 0x39, 0xa1, 0xfc, 0x73, 0xf5, 0xfc, 0x31, 0x92, 0xfd, 0x8e, 0xb5, 0xfd, 0xcf, 0x41, 0xfd, 0x48, 0xbb, 0xfe, 0xbd, 0xb6, 0xfe, 0xb9, 0x3a, 0x00, 0xae, 0x3e, 0x02, 0x90, 0x8a, 0x00, 0xf7, 0xd7, 0x00, 0x57, 0x11, 0x00, 0x4c, 0x92, 0xff, 0x89, 0xaf, 0xfe, 0xe2, 0x33, 0xff, 0x15, 0x31, 0xfe, 0xc7, 0x86, 0xfe, 0xc4, 0x63, 0x25, 0xad, 0x55, 0x20, 0xaf, 0xeb, 0xf8, 0x48, 0xe5, 0x0b, 0x27, 0x7a, 0x0b, 0x35, 0xe7, 0xf3, 0x69, 0x8f, 0xff, 0x33, 0xcd, 0x08, 0x88, 0xe2, 0xf5, 0x61, 0xf7, 0xfa, 0x1d, 0xdb, 0x05, 0xcb, 0x96, 0x00, 0xfd, 0xa8, 0xfb, 0xfc, 0xd3, 0xfd, 0x1b, 0xef, 0x00, 0xb3, 0x9c, 0xfb, 0x64, 0x2f, 0xfd, 0x95, 0x3e, 0xfd, 0x83, 0x2b, 0xfe, 0x1d, 0x27, 0xfd, 0x62, 0x86, 0xfe, 0x7d, 0x45, 0xff, 0x33, 0x4f, 0xff, 0x0f, 0x3d, 0x02, 0xa2, 0x46, 0x01, 0x91, 0xd0, 0x00, 0x76, 0xeb, 0xff, 0xcc, 0xeb, 0xff, 0x19, 0xc7, 0xfe, 0x4f, 0x3a, 0xff, 0x0e, 0x62, 0xfe, 0xcc, 0x15, 0xff, 0x30, 0x12, 0x29, 0xc3, 0x42, 0x22, 0x87, 0xb7, 0xf4, 0xd9, 0xf8, 0x09, 0xe9, 0x82, 0x0d, 0x73, 0xa5, 0xf6, 0x11, 0x93, 0xfd, 0xa1, 0xab, 0x07, 0xb9, 0x62, 0xf6, 0x46, 0x1f, 0xfb, 0x0e, 0x01, 0x06, 0x4e, 0x10, 0x00, 0xe5, 0x4e, 0xfb, 0x8b, 0x7c, 0xfd, 0xe1, 0x29, 0x01, 0xbe, 0xc2, 0xfa, 0x4d, 0x38, 0xfd, 0x11, 0x0b, 0xfd, 0x97, 0x84, 0xfe, 0xc8, 0x82, 0xfd, 0x0f, 0xf4, 0xfd, 0xa0, 0xff, 0xff, 0x64, 0xd3, 0xfe, 0x1a, 0x93, 0x01, 0x11, 0xcd, 0x01, 0xde, 0x48, 0x01, 0x0a, 0x78, 0xff, 0x8d, 0x40, 0x00, 0xc7, 0x33, 0xff, 0xd9, 0xec, 0xfe, 0xba, 0xf2, 0xfe, 0x5f, 0x4a, 0xff, 0x10, 0x60, 0x2d, 0x36, 0x61, 0x23, 0xf4, 0x1f, 0xf1, 0xd4, 0x03, 0x08, 0xca, 0xff, 0x0d, 0x2a, 0xb7, 0xf9, 0x4b, 0x85, 0xfc, 0xd9, 0xf2, 0x05, 0x2f, 0xcc, 0xf6, 0xf5, 0xde, 0xfb, 0xb9, 0x9e, 0x05, 0x82, 0x6b, 0xff, 0x03, 0x81, 0xfb, 0x39, 0xa4, 0xfc, 0xbd, 0x22, 0x01, 0xa6, 0x4f, 0xfa, 0x72, 0xee, 0xfc, 0x46, 0x29, 0xfd, 0x64, 0xaf, 0xfe, 0x1c, 0xfc, 0xfd, 0x57, 0xa1, 0xfd, 0xf0, 0x2d, 0x00, 0x1c, 0x38, 0xff, 0x90, 0x7a, 0x00, 0x48, 0xf9, 0x01, 0x97, 0xef, 0x01, 0xe0, 0xf9, 0xfe, 0xf1, 0x9b, 0x00, 0x43, 0x93, 0xff, 0x1a, 0x9b, 0xfe, 0xd6, 0xa0, 0xff, 0x41, 0x2f, 0xff, 0x66, 0xfe, 0x30, 0x0b, 0x2f, 0x25, 0xc8, 0xd3, 0xed, 0x51, 0x32, 0x06, 0x89, 0x6a, 0x0d, 0x64, 0x7c, 0xfc, 0xab, 0x7a, 0xfc, 0xe4, 0xf2, 0x03, 0x11, 0x74, 0xf7, 0x7b, 0x97, 0xfc, 0x58, 0x06, 0x05, 0x29, 0xb5, 0xfe, 0x77, 0x34, 0xfc, 0x32, 0x5c, 0xfb, 0x98, 0xe6, 0x00, 0x4d, 0x3e, 0xfa, 0x69, 0x78, 0xfc, 0x8f, 0x9f, 0xfd, 0x9f, 0xa3, 0xfe, 0x4f, 0x64, 0xfe, 0x9d, 0xa4, 0xfd, 0x86, 0x04, 0x00, 0xd7, 0xda, 0xff, 0xfe, 0xd7, 0xff, 0xf5, 0x65, 0x01, 0xb4, 0xd1, 0x02, 0x83, 0xa3, 0xfe, 0x3a, 0x89, 0x00, 0x56, 0x0f, 0x00, 0x24, 0x68, 0xfe, 0xfc, 0xf0, 0xff, 0xd6, 0x44, 0xff, 0x25, 0x1f, 0x34, 0xf7, 0x56, 0x27, 0x94, 0xfe, 0xea, 0xba, 0xd7, 0x04, 0x0b, 0xe8, 0x0b, 0x88, 0x55, 0xfe, 0xaf, 0x77, 0xfd, 0x95, 0xfd, 0x01, 0x2c, 0x50, 0xf8, 0x99, 0xfa, 0xfc, 0x0e, 0x7b, 0x04, 0xbd, 0x1a, 0xfe, 0x25, 0xd5, 0xfc, 0x8d, 0x48, 0xfa, 0x15, 0x6c, 0x00, 0x57, 0x69, 0xfa, 0x3d, 0x4a, 0xfc, 0xe5, 0x11, 0xfe, 0xbc, 0x73, 0xfe, 0x85, 0xd4, 0xfe, 0xe8, 0xd3, 0xfd, 0x0a, 0xc5, 0xff, 0xfb, 0x6c, 0x00, 0x7c, 0xf0, 0xff, 0x5f, 0x5c, 0x00, 0x8e, 0xb8, 0x03, 0x41, 0x79, 0xfe, 0x9f, 0xcd, 0xff, 0xa8, 0xb3, 0x00, 0x15, 0x59, 0xfe, 0x41, 0xeb, 0xff, 0xc4, 0xd0, 0xff, 0x62, 0xf9, 0x37, 0x0e, 0xf8, 0x27, 0xec, 0x14, 0xe9, 0xfe, 0x57, 0x04, 0x17, 0x7f, 0x09, 0x2d, 0x32, 0xff, 0x04, 0xd4, 0xfe, 0xa2, 0xd5, 0x00, 0x30, 0xc0, 0xf8, 0x17, 0x55, 0xfd, 0x0a, 0xf0, 0x03, 0xf9, 0x9e, 0xfd, 0x69, 0x1e, 0xfd, 0xac, 0xb8, 0xf9, 0x4e, 0xc1, 0xff, 0xcb, 0xb3, 0xfa, 0xf4, 0xa1, 0xfc, 0x2f, 0xfb, 0xfd, 0x9c, 0x61, 0xfe, 0x45, 0x55, 0xff, 0x6f, 0xea, 0xfd, 0x0f, 0xcf, 0xff, 0xcd, 0x9d, 0x00, 0xa1, 0xa4, 0x00, 0xed, 0xa9, 0xff, 0x5e, 0xbd, 0x03, 0x69, 0x99, 0xfe, 0x8d, 0xb4, 0xfe, 0x22, 0xe5, 0x00, 0x61, 0x8f, 0xfe, 0xdc, 0x3b, 0x00, 0x36, 0x2f, 0x00, 0xbe, 0xb8, 0x3a, 0xcb, 0x17, 0x29, 0x5d, 0x43, 0xe8, 0xc4, 0xa4, 0x03, 0xc7, 0xc3, 0x06, 0x02, 0x13, 0xff, 0x37, 0x34, 0x00, 0x4e, 0x70, 0x00, 0x99, 0xc7, 0xf8, 0x90, 0x6c, 0xfd, 0x92, 0x75, 0x03, 0x5b, 0xd2, 0xfc, 0x9c, 0xc4, 0xfd, 0xdf, 0x48, 0xf9, 0x3b, 0x01, 0xff, 0xae, 0x74, 0xfb, 0xce, 0xc2, 0xfc, 0x7c, 0x92, 0xfd, 0x2e, 0x62, 0xfe, 0x3b, 0xdc, 0xff, 0xf0, 0xeb, 0xfd, 0x2b, 0xea, 0xff, 0xe5, 0xb6, 0x00, 0xb5, 0xb9, 0x01, 0x81, 0xfd, 0xfe, 0x8a, 0xd7, 0x02, 0xfa, 0x27, 0xff, 0xf9, 0x76, 0xfd, 0x52, 0x3b, 0x00, 0x28, 0x7e, 0xff, 0x19, 0xa4, 0x00, 0x1f, 0x46, 0x00, 0x5c, 0x97, 0x3c, 0x6d, 0x44, 0x2a, 0xeb, 0xa2, 0xe8, 0xd7, 0x32, 0x03, 0x8e, 0x7e, 0x03, 0x97, 0x70, 0xfe, 0xf4, 0xaa, 0x01, 0x9e, 0x47, 0x00, 0x5d, 0xb4, 0xf8, 0xef, 0x9d, 0xfd, 0x4f, 0x9e, 0x02, 0x47, 0x15, 0xfc, 0x97, 0x13, 0xff, 0x6e, 0xf3, 0xf8, 0x9f, 0x67, 0xfe, 0xf6, 0x48, 0xfc, 0x11, 0xbd, 0xfc, 0xf7, 0x08, 0xfd, 0x5d, 0x73, 0xfe, 0x89, 0x95, 0x00, 0x55, 0x8e, 0xfd, 0x4a, 0x81, 0x00, 0x80, 0x07, 0x01, 0xe1, 0x04, 0x02, 0xa0, 0xae, 0xfe, 0x0c, 0xb6, 0x01, 0x01, 0x6d, 0xff, 0x15, 0xd3, 0xfc, 0x44, 0x93, 0xff, 0x2e, 0xd7, 0xff, 0x50, 0x5e, 0x01, 0x69, 0x22, 0x01, 0x95, 0xd3, 0x3d, 0xbb, 0xf1, 0x2a, 0x32, 0x39, 0xea, 0x3f, 0x33, 0x03, 0xfa, 0x55, 0xff, 0xfe, 0xc6, 0xfd, 0xb1, 0xbf, 0x02, 0x56, 0x0b, 0x00, 0x39, 0xa9, 0xf8, 0xfe, 0xbc, 0xfd, 0x30, 0x77, 0x01, 0xd0, 0xa0, 0xfb, 0x9b, 0x08, 0x01, 0xe4, 0x8b, 0xf8, 0x1c, 0xd6, 0xfd, 0x9a, 0x0c, 0xfd, 0x02, 0x58, 0xfc, 0xa2, 0xb7, 0xfc, 0x90, 0xba, 0xfe, 0xab, 0xa7, 0x00, 0x62, 0xe0, 0xfd, 0x85, 0x2f, 0x01, 0xf6, 0x57, 0x00, 0xb2, 0x32, 0x02, 0x2b, 0xb2, 0xfe, 0x52, 0x49, 0x00, 0x4a, 0x9e, 0xff, 0x48, 0x53, 0xfd, 0x62, 0xa3, 0xfe, 0x90, 0x6b, 0xff, 0xfd, 0xb7, 0x02, 0x6b, 0xaf, 0x01, 0x1c, 0x47, 0x3e, 0xb6, 0x61, 0x2b, 0x6e, 0xb7, 0xec, 0xcf, 0x46, 0x03, 0x87, 0xca, 0xfa, 0x0d, 0xe9, 0xfc, 0x07, 0x62, 0x03, 0x4c, 0xac, 0xff, 0xb6, 0x62, 0xf8, 0xbb, 0xd0, 0xfd, 0x29, 0x60, 0x00, 0xd2, 0xb2, 0xfb, 0x53, 0x26, 0x03, 0x3d, 0xfc, 0xf7, 0xa2, 0x70, 0xfd, 0xc1, 0x27, 0xfd, 0x61, 0x19, 0xfc, 0x0a, 0xdc, 0xfc, 0xb2, 0x4e, 0xfe, 0x46, 0x81, 0x01, 0x2e, 0xbc, 0xfd, 0xab, 0xda, 0x00, 0x10, 0xfa, 0xff, 0xf4, 0x07, 0x02, 0x37, 0x6f, 0xfe, 0x93, 0xb8, 0xff, 0xdf, 0x0c, 0x00, 0x3e, 0x27, 0xfd, 0xca, 0x26, 0xff, 0x44, 0xde, 0xfe, 0xa0, 0xb1, 0x01, 0xa5, 0xcd, 0x02, 0x86, 0x39, 0x3d, 0x4a, 0x51, 0x2c, 0x1e, 0x37, 0xf0, 0xa3, 0x99, 0x03, 0xb5, 0xda, 0xf6, 0x79, 0x7a, 0xfb, 0x46, 0xbe, 0x03, 0x97, 0x59, 0xff, 0x9f, 0x07, 0xf8, 0x4c, 0x36, 0xfe, 0x5f, 0x24, 0x00, 0xb6, 0xc0, 0xfb, 0xb3, 0x56, 0x05, 0xcf, 0xe6, 0xf7, 0x23, 0x63, 0xfc, 0xd7, 0xc7, 0xfd, 0x92, 0xd0, 0xfb, 0x7a, 0x61, 0xfd, 0xfa, 0x90, 0xfe, 0xc3, 0xfb, 0x00, 0xcc, 0x5e, 0xfd, 0xe1, 0x12, 0x01, 0x58, 0x13, 0xff, 0x36, 0xd1, 0x01, 0xd2, 0x54, 0xff, 0xc8, 0x33, 0xff, 0x3b, 0x33, 0x00, 0xa3, 0x48, 0xfe, 0x54, 0x71, 0xff, 0x85, 0xd0, 0xfd, 0xbc, 0x7d, 0x00, 0x86, 0x99, 0x03, 0xfc, 0x21, 0x3d, 0xb7, 0x06, 0x2b, 0x93, 0x7e, 0xf4, 0xb9, 0xab, 0x03, 0x66, 0x64, 0xf3, 0x5a, 0x71, 0xf9, 0xc4, 0x75, 0x03, 0xf6, 0x35, 0xff, 0x36, 0x5e, 0xf7, 0x69, 0xc1, 0xff, 0xfb, 0x51, 0xff, 0x9d, 0x74, 0xfc, 0xf5, 0xfe, 0x06, 0xcf, 0x88, 0xf7, 0x20, 0x8a, 0xfb, 0x8a, 0xcf, 0xfd, 0x62, 0x31, 0xfd, 0x16, 0x35, 0xfd, 0x7a, 0x4f, 0xfd, 0x2e, 0xdf, 0x00, 0xb5, 0x24, 0xfd, 0x6f, 0x6a, 0x00, 0x17, 0x00, 0xff, 0xbf, 0x21, 0x02, 0xfe, 0x4e, 0xff, 0xa5, 0xb3, 0xff, 0x71, 0xea, 0x00, 0xc4, 0x19, 0xfe, 0xaf, 0x1f, 0xff, 0xe6, 0xc6, 0xfe, 0xe1, 0x29, 0xff, 0x63, 0x41, 0x01, 0x1b, 0xc1, 0x3a, 0x0c, 0x53, 0x2b, 0xd7, 0xcc, 0xf8, 0xd6, 0xf6, 0x03, 0x4f, 0x73, 0xf1, 0x7e, 0x69, 0xf6, 0x57, 0x49, 0x02, 0xe5, 0x2d, 0x00, 0xa1, 0x94, 0xf7, 0xc0, 0x7c, 0x00, 0x8e, 0x53, 0xff, 0xc4, 0x0e, 0xfd, 0xea, 0x62, 0x08, 0x77, 0xf6, 0xf6, 0x4d, 0xf2, 0xfa, 0x01, 0x0e, 0x00, 0x19, 0x2f, 0xfc, 0x82, 0x87, 0xfc, 0x7e, 0x20, 0xfd, 0x6f, 0xde, 0xff, 0x84, 0x32, 0xfd, 0x1c, 0xc0, 0x00, 0xe8, 0xd5, 0xfe, 0xc5, 0xf4, 0x01, 0xd8, 0xcc, 0x00, 0x0b, 0x06, 0x00, 0xe3, 0xab, 0xff, 0x63, 0x25, 0xff, 0x34, 0x28, 0x00, 0xae, 0x80, 0xfd, 0xfc, 0x75, 0xff, 0xfe, 0x35, 0xff, 0x94, 0xa4, 0x38, 0xfd, 0x9c, 0x2a, 0x67, 0xd6, 0xfc, 0xeb, 0x08, 0x04, 0x4a, 0x7c, 0xf0, 0x08, 0xbd, 0xf2, 0x35, 0x76, 0x00, 0xef, 0xe9, 0x02, 0x06, 0xa4, 0xf7, 0xf5, 0x4c, 0x00, 0x6f, 0x25, 0x00, 0x01, 0xf1, 0xfd, 0x7e, 0x2d, 0x07, 0x41, 0xe6, 0xf8, 0x01, 0x64, 0xfb, 0x4a, 0xa6, 0xfe, 0x18, 0x90, 0xfc, 0x83, 0xc4, 0xfb, 0x3f, 0x3f, 0xfc, 0xdb, 0xe1, 0xff, 0xa1, 0xe7, 0xfd, 0x77, 0xf8, 0xff, 0x6b, 0x8b, 0xff, 0xd1, 0x3b, 0x03, 0x6d, 0x8d, 0xff, 0xdc, 0x38, 0x00, 0xb6, 0x7f, 0x00, 0xd0, 0xe5, 0xfe, 0xce, 0x64, 0x00, 0x2a, 0xfe, 0xfc, 0xdd, 0x29, 0x00, 0x47, 0x75, 0xfe, 0x98, 0x8f, 0x36, 0xb0, 0xe2, 0x29, 0x05, 0xd3, 0xfe, 0xdf, 0xf6, 0x05, 0xe8, 0x2b, 0xef, 0xd7, 0xb7, 0xee, 0xad, 0xc1, 0x00, 0xdb, 0xe7, 0x04, 0x7a, 0x34, 0xf7, 0xa4, 0xea, 0x01, 0x73, 0x32, 0xff, 0x63, 0xe8, 0xfd, 0xce, 0x90, 0x09, 0xfa, 0x3f, 0xf8, 0xa6, 0x1e, 0xfb, 0x13, 0xc2, 0xfe, 0x7c, 0xec, 0xfa, 0xfe, 0x66, 0xfc, 0x87, 0x99, 0xfc, 0xa5, 0x19, 0xff, 0x55, 0x4e, 0xfe, 0x62, 0x4e, 0x01, 0x7f, 0xd6, 0xff, 0xca, 0xab, 0x01, 0x2f, 0x16, 0x00, 0x97, 0x73, 0x01, 0xc8, 0xaf, 0xff, 0xa6, 0x17, 0xfe, 0x28, 0x28, 0x02, 0x17, 0xe7, 0xfc, 0xbf, 0xdb, 0xfe, 0x08, 0xff, 0xff, 0x07, 0x62, 0x36, 0x8a, 0x21, 0x26, 0xdf, 0x10, 0x01, 0xbf, 0xa3, 0x07, 0x86, 0x85, 0xec, 0xa0, 0x22, 0xee, 0xf4, 0x83, 0x00, 0xf6, 0xd2, 0x05, 0x1d, 0x11, 0xf9, 0xc2, 0xfe, 0x00, 0x78, 0xa9, 0xfe, 0xb1, 0x46, 0x00, 0xea, 0x76, 0x08, 0x27, 0x6d, 0xf8, 0x5a, 0x5e, 0xfb, 0x0d, 0x9c, 0xfc, 0x22, 0xdc, 0xfb, 0xd5, 0xd4, 0xfd, 0x51, 0xec, 0xfa, 0x66, 0xc3, 0xff, 0xa9, 0xda, 0x00, 0x79, 0x9c, 0xff, 0xf0, 0x32, 0xff, 0x8d, 0xde, 0x02, 0x96, 0xd1, 0xff, 0xef, 0xa6, 0x00, 0x53, 0x20, 0x00, 0x5c, 0x6c, 0xfe, 0x1e, 0x24, 0x02, 0x9d, 0x9b, 0xfd, 0x61, 0xda, 0xfd, 0x8e, 0x5d, 0x00, 0x1d, 0x27, 0x34, 0x27, 0x77, 0x23, 0xbc, 0x5e, 0x03, 0xf5, 0xe6, 0x07, 0x15, 0x2b, 0xec, 0x92, 0x13, 0xee, 0xb1, 0x34, 0x00, 0xa4, 0xf3, 0x05, 0x38, 0xce, 0xfa, 0x1c, 0x35, 0x02, 0xba, 0x1a, 0xfb, 0x73, 0x92, 0x02, 0x9a, 0xf9, 0x08, 0x6e, 0x74, 0xf6, 0x2c, 0xb3, 0xfb, 0x0e, 0x93, 0xfc, 0x0e, 0xb6, 0xfc, 0x77, 0x6d, 0xfd, 0x74, 0x09, 0xfc, 0x86, 0xce, 0x00, 0xbd, 0x7e, 0xff, 0x94, 0x8e, 0xff, 0x98, 0x59, 0x00, 0x13, 0xcc, 0x01, 0xae, 0x2f, 0xff, 0x78, 0x3f, 0x01, 0x48, 0x4e, 0x00, 0xcf, 0xae, 0xfe, 0x3c, 0x97, 0x01, 0xd6, 0x42, 0xfe, 0x44, 0x53, 0xfe, 0x82, 0xa2, 0xfe, 0xa7, 0x7d, 0x30, 0x17, 0x86, 0x22, 0x2d, 0x62, 0x04, 0x8d, 0x8b, 0x06, 0x7d, 0x10, 0xee, 0x46, 0x20, 0xf1, 0x76, 0xd3, 0xfc, 0x67, 0x46, 0x06, 0x56, 0xcc, 0xff, 0x14, 0x10, 0xfe, 0xa5, 0x69, 0xfa, 0x1f, 0x71, 0x05, 0x67, 0x0f, 0x06, 0xaf, 0xac, 0xf6, 0xa4, 0x84, 0xfd, 0x87, 0x5c, 0xfb, 0x32, 0x3c, 0xfd, 0x6e, 0xff, 0xff, 0xab, 0x28, 0xfb, 0x67, 0xec, 0xff, 0x4d, 0x93, 0x00, 0x10, 0x9f, 0xff, 0x9b, 0x7a, 0xff, 0xff, 0x61, 0x01, 0x65, 0xc6, 0xff, 0x75, 0x15, 0x01, 0x36, 0x65, 0x00, 0x62, 0x07, 0xff, 0x30, 0x71, 0x01, 0x85, 0x74, 0xfe, 0xf1, 0x9e, 0xfe, 0x84, 0x02, 0xfe, 0x9b, 0x2e, 0x31, 0xb7, 0x3a, 0x20, 0x22, 0x15, 0xff, 0x0e, 0x9d, 0x07, 0xce, 0x2b, 0xef, 0x74, 0xa3, 0xf3, 0x8f, 0xd4, 0xff, 0x95, 0x27, 0x03, 0x9f, 0x8c, 0xff, 0x7a, 0x4d, 0xff, 0xf5, 0x9f, 0xf9, 0x71, 0x67, 0x05, 0xc9, 0xe1, 0x04, 0xf9, 0xd9, 0xf6, 0xbd, 0x55, 0xfe, 0x4d, 0xf9, 0xfb, 0xf6, 0xd6, 0xfe, 0x27, 0x71, 0xff, 0xa1, 0x71, 0xfa, 0x8a, 0x7a, 0x01, 0xab, 0xb3, 0x00, 0x1e, 0xf4, 0xfd, 0x26, 0xc8, 0xff, 0x95, 0xb1, 0x01, 0xc6, 0xd6, 0xff, 0x69, 0xf8, 0x00, 0xa4, 0xe4, 0xff, 0x8e, 0xd4, 0xff, 0x47, 0xca, 0x01, 0x2f, 0x9a, 0xfd, 0x5a, 0x62, 0xfe, 0x30, 0xf8, 0xfe, 0x66, 0xd9, 0x2e, 0x64, 0xe5, 0x1b, 0x26, 0xdf, 0xff, 0xf9, 0x32, 0x09, 0x2b, 0xc1, 0xee, 0x86, 0xaf, 0xf8, 0xa0, 0xa7, 0xfe, 0x9d, 0x45, 0x01, 0x8e, 0x16, 0x02, 0xd2, 0xbf, 0xfc, 0xc6, 0x2e, 0xf9, 0x6b, 0xd8, 0x06, 0x2c, 0xf2, 0x03, 0x7e, 0x84, 0xf6, 0x91, 0x57, 0x00, 0x9f, 0xd3, 0xfc, 0x5f, 0xaa, 0xfe, 0x01, 0x43, 0xff, 0x91, 0xe7, 0xfa, 0x0d, 0x19, 0x02, 0x06, 0xc5, 0xff, 0xb7, 0xa3, 0xfd, 0xaf, 0x53, 0x00, 0x60, 0xa8, 0x01, 0x02, 0x4f, 0xff, 0xcb, 0x38, 0x01, 0x25, 0x86, 0x00, 0x23, 0xad, 0xff, 0x1c, 0x80, 0x01, 0xb3, 0x9e, 0xfd, 0x7a, 0x7e, 0xfe, 0x24, 0x24, 0xff, 0x5c, 0x3b, 0x2b, 0x07, 0x74, 0x18, 0xf5, 0x7d, 0x00, 0xc9, 0xcc, 0x0a, 0x40, 0xc3, 0xf1, 0xf5, 0x84, 0xf8, 0x31, 0x43, 0xff, 0x24, 0xe6, 0x01, 0xdc, 0xf7, 0xff, 0x64, 0x5c, 0xfc, 0x71, 0xa4, 0xfa, 0x04, 0x56, 0x06, 0xb8, 0x8b, 0x02, 0xcb, 0xa5, 0xf8, 0x7a, 0x62, 0x01, 0x29, 0x84, 0xfc, 0x12, 0xc8, 0xfe, 0xa5, 0x6d, 0xff, 0x9a, 0xb1, 0xfb, 0x8c, 0x9b, 0x01, 0xd2, 0x4a, 0xff, 0x7e, 0xc6, 0xfd, 0x7d, 0xf2, 0x00, 0x0f, 0xfe, 0x00, 0x8e, 0xe9, 0xfe, 0xee, 0x19, 0x02, 0x61, 0xb5, 0x00, 0xc1, 0x64, 0xff, 0x03, 0x30, 0x01, 0x10, 0xc9, 0xfd, 0xb9, 0x71, 0xfe, 0x60, 0x65, 0xff, 0xb2, 0x46, 0x29, 0xb2, 0xed, 0x1d, 0x15, 0x50, 0x06, 0x4b, 0x3f, 0x01, 0xe2, 0xf5, 0xe4, 0xcf, 0xd0, 0xf6, 0x28, 0xf6, 0x07, 0x35, 0xb4, 0x08, 0xa5, 0xa9, 0xfe, 0xa3, 0xe2, 0xfa, 0x4a, 0x20, 0xf7, 0xf8, 0xae, 0x00, 0x2c, 0x65, 0x04, 0x9f, 0xbf, 0xfa, 0xb1, 0x1e, 0x03, 0x8a, 0x0f, 0xff, 0x17, 0x75, 0xfe, 0x80, 0x9b, 0x01, 0x07, 0x41, 0xfe, 0x77, 0x45, 0x01, 0xda, 0xcf, 0xff, 0x7c, 0x50, 0xfe, 0x6a, 0x5d, 0xff, 0x52, 0x30, 0xfe, 0xe6, 0xe7, 0xfe, 0x60, 0x74, 0x01, 0x3f, 0x8b, 0xfe, 0xff, 0xbc, 0xff, 0x15, 0x93, 0x02, 0xc3, 0x2c, 0xff, 0x5d, 0x9a, 0x00, 0x0b, 0xb6, 0xff, 0xfe, 0xc0, 0x22, 0x9c, 0x34, 0x1d, 0xc5, 0x76, 0x08, 0x96, 0x61, 0x03, 0x64, 0xf6, 0xe8, 0x64, 0x82, 0xf3, 0xe2, 0x99, 0x05, 0xe7, 0x31, 0x07, 0x79, 0x17, 0x01, 0xe1, 0xd0, 0xfd, 0x45, 0x9e, 0xf7, 0x68, 0x9d, 0xfe, 0x76, 0x16, 0x03, 0x5e, 0x2c, 0xfd, 0x12, 0x9c, 0x02, 0x5a, 0xee, 0xfe, 0x4c, 0xcf, 0xfe, 0xf6, 0xe9, 0x01, 0x76, 0x89, 0xfe, 0x3f, 0xb9, 0x00, 0xdb, 0xaa, 0x00, 0x11, 0xd7, 0xfe, 0x27, 0x6f, 0xff, 0x6e, 0x6c, 0xfe, 0xfe, 0x6a, 0xfe, 0x79, 0xb2, 0x00, 0x2d, 0x28, 0xfe, 0xda, 0x22, 0x00, 0x2c, 0xf6, 0x02, 0x4c, 0xb9, 0xff, 0x5b, 0x18, 0x01, 0x4b, 0xbe, 0xff, 0xde, 0x12, 0x1e, 0xa9, 0xd3, 0x1a, 0x33, 0x24, 0x09, 0x6d, 0xaa, 0x04, 0xf6, 0xd0, 0xec, 0x37, 0x83, 0xf4, 0xe3, 0xfb, 0x03, 0x26, 0x0d, 0x05, 0x5c, 0x6d, 0x01, 0xa6, 0xd3, 0xfe, 0x9f, 0xff, 0xf8, 0xd1, 0xe0, 0xfd, 0xa1, 0xf5, 0x02, 0x92, 0x15, 0xfe, 0x29, 0x73, 0x01, 0xca, 0x48, 0xff, 0x1f, 0xee, 0xfe, 0x44, 0xb1, 0x01, 0xef, 0xf5, 0xfe, 0xc6, 0x49, 0x00, 0xd2, 0xb4, 0x00, 0x35, 0x6e, 0xff, 0x93, 0x3f, 0xff, 0x88, 0x76, 0xfe, 0xe8, 0xb6, 0xfe, 0xff, 0x22, 0x00, 0x76, 0x6f, 0xfe, 0x96, 0x89, 0x00, 0x90, 0xa1, 0x02, 0x5d, 0x48, 0x00, 0xe1, 0xf5, 0x00, 0x86, 0x93, 0xff, 0x8e, 0xbd, 0x18, 0x28, 0x60, 0x18, 0xed, 0xaf, 0x0a, 0x9c, 0x02, 0x05, 0xe6, 0xcc, 0xf0, 0x8c, 0x40, 0xf6, 0x1e, 0xa9, 0x01, 0xdf, 0xd5, 0x03, 0x07, 0xd0, 0x01, 0xc2, 0x86, 0xff, 0x39, 0x7d, 0xfa, 0x16, 0x89, 0xfd, 0x54, 0xaf, 0x02, 0x4c, 0x85, 0xfe, 0xfa, 0xb4, 0x00, 0xf5, 0xaa, 0xff, 0x52, 0x16, 0xff, 0x0b, 0x71, 0x01, 0x5e, 0x73, 0xff, 0x90, 0x0d, 0x00, 0xb0, 0xd3, 0x00, 0x48, 0xea, 0xff, 0x4d, 0x11, 0xff, 0xa1, 0xa6, 0xfe, 0x64, 0xef, 0xfe, 0xce, 0x0a, 0x00, 0xcd, 0x4b, 0xff, 0xae, 0xc5, 0x00, 0xdb, 0x14, 0x02, 0x3a, 0x87, 0x00, 0x39, 0x9e, 0x00, 0x65, 0x7b, 0xff, 0x62, 0xbd, 0x14, 0xea, 0xbc, 0x16, 0xae, 0xcf, 0x0b, 0x31, 0xc1, 0x04, 0x3f, 0xd4, 0xf3, 0x7d, 0x8f, 0xf7, 0x60, 0x5e, 0x00, 0x8e, 0x53, 0x03, 0x89, 0xc6, 0x01, 0x90, 0x14, 0x00, 0xcc, 0xc7, 0xfb, 0x14, 0x88, 0xfd, 0x72, 0x1d, 0x02, 0xdb, 0xc8, 0xfe, 0x0f, 0xa5, 0x00, 0xf7, 0xe6, 0xff, 0xb0, 0x19, 0xff, 0x69, 0x68, 0x01, 0x80, 0xf9, 0xff, 0x01, 0xf9, 0xff, 0xe7, 0xe6, 0x00, 0x90, 0x17, 0x00, 0x0c, 0x1e, 0xff, 0x31, 0x40, 0xff, 0x75, 0x83, 0xff, 0x07, 0x0d, 0x00, 0xc7, 0x9d, 0xff, 0xb4, 0xb9, 0x00, 0x67, 0x79, 0x01, 0x95, 0x74, 0x00, 0x51, 0x5e, 0x00, 0x1f, 0x5d, 0xff, 0x2d, 0xcc, 0x10, 0xbf, 0xc8, 0x14, 0xb0, 0x84, 0x0c, 0x77, 0x0f, 0x05, 0x09, 0x96, 0xf6, 0xfa, 0x4c, 0xf8, 0x9b, 0x90, 0xff, 0xf7, 0xde, 0x02, 0x2d, 0xdc, 0x01, 0x3f, 0x8f, 0x00, 0x1d, 0xb1, 0xfc, 0x6e, 0xc4, 0xfd, 0xfd, 0xa1, 0x01, 0x57, 0xd9, 0xfe, 0x82, 0x82, 0x00, 0x57, 0x4c, 0x00, 0xb1, 0x4a, 0xff, 0xb3, 0x43, 0x01, 0xc0, 0x5c, 0x00, 0x04, 0x08, 0x00, 0x9a, 0xdc, 0x00, 0x3f, 0x91, 0x00, 0x99, 0xdf, 0xff, 0x78, 0xe8, 0xff, 0x78, 0x88, 0xff, 0xae, 0x6b, 0xff, 0xf7, 0xb7, 0xff, 0x77, 0x71, 0x00, 0x80, 0xb3, 0x00, 0x91, 0x51, 0x00, 0x92, 0x39, 0x00, 0x43, 0x94, 0xff, 0x57, 0x29, 0x0e, 0x61, 0xff, 0x12, 0xfe, 0xf2, 0x0c, 0xe9, 0xce, 0x05, 0xbb, 0x4f, 0xf8, 0x6b, 0xca, 0xf8, 0x6f, 0x4c, 0xff, 0x37, 0xba, 0x02, 0x8d, 0x21, 0x02, 0x13, 0xbc, 0x00, 0x78, 0x6c, 0xfd, 0x5d, 0x59, 0xfe, 0x3d, 0x21, 0x01, 0xcc, 0xdb, 0xfe, 0x39, 0xda, 0x00, 0xb2, 0x9c, 0x00, 0x41, 0x88, 0xff, 0xa2, 0x61, 0x01, 0x22, 0x6b, 0x00, 0x1a, 0xa0, 0x00, 0x5e, 0xc4, 0x01, 0xbf, 0xd6, 0x00, 0x25, 0xe7, 0xff, 0x9e, 0x07, 0x00, 0xbd, 0x49, 0xff, 0xc3, 0xd5, 0xfe, 0x56, 0xd1, 0xff, 0x36, 0x63, 0x00, 0xfb, 0x68, 0x00, 0xe5, 0x85, 0x00, 0x16, 0x35, 0x00, 0x64, 0x66, 0xff, 0x7a, 0x9f, 0x0c, 0x17, 0xd3, 0x11, 0xf4, 0x7d, 0x0c, 0x42, 0x6d, 0x05, 0xb3, 0x3a, 0xf9, 0x79, 0xc1, 0xf9, 0xcf, 0x6e, 0xff, 0x54, 0x4d, 0x02, 0x55, 0x18, 0x02, 0xe1, 0xef, 0x00, 0xd9, 0xff, 0xfd, 0xef, 0x78, 0xfe, 0x85, 0xcc, 0x00, 0x82, 0x0b, 0xff, 0x04, 0x13, 0x01, 0xd8, 0xaf, 0x00, 0xa6, 0x94, 0xff, 0xa1, 0xcc, 0x01, 0xc6, 0x42, 0x01, 0xaa, 0x0e, 0x01, 0x77, 0x82, 0x01, 0xfe, 0x74, 0x00, 0x80, 0xa5, 0xff, 0x2b, 0x94, 0xff, 0x5b, 0x9c, 0xfe, 0x6e, 0xea, 0xfe, 0xb7, 0x1e, 0x00, 0xd1, 0xed, 0xff, 0xd9, 0x6b, 0x00, 0xd9, 0x26, 0x00, 0x1d, 0xbe, 0xff, 0xbf, 0x15, 0x00, 0x24, 0x14, 0x0b, 0x18, 0x3d, 0x10, 0x37, 0x3d, 0x0c, 0xda, 0xb5, 0x05, 0x05, 0x1b, 0xfa, 0xf8, 0x41, 0xfa, 0xdc, 0x83, 0xff, 0x0b, 0x63, 0x02, 0xd3, 0x3f, 0x02, 0xae, 0xf8, 0x00, 0xac, 0x9f, 0xfe, 0xa6, 0xd6, 0xfe, 0xdf, 0xa4, 0x00, 0x2f, 0x4a, 0xff, 0x3e, 0x08, 0x01, 0xd7, 0x83, 0x01, 0x27, 0xfc, 0x00, 0x7d, 0xef, 0x01, 0x63, 0x0b, 0x01, 0xe7, 0xb7, 0x00, 0xca, 0xfc, 0x00, 0xdf, 0xcc, 0xff, 0x08, 0x24, 0xff, 0xf0, 0xa1, 0xff, 0x48, 0x94, 0xfe, 0x1a, 0x22, 0xff, 0x86, 0x3e, 0x00, 0x31, 0x6a, 0xff, 0x00, 0xf7, 0xff, 0xe1, 0x97, 0x00, 0x82, 0x21, 0x00, 0x6a, 0xee, 0xff, 0x8f, 0xa1, 0x0a, 0x68, 0xdf, 0x0f, 0x60, 0x59, 0x0b, 0x70, 0xda, 0x04, 0x39, 0x9a, 0xfa, 0xae, 0x3c, 0xfb, 0x62, 0x16, 0x00, 0x1d, 0x7a, 0x02, 0x71, 0x50, 0x02, 0xf0, 0x08, 0x01, 0xfc, 0x5f, 0xff, 0x1e, 0x1b, 0xff, 0x82, 0x65, 0x00, 0xbf, 0x31, 0x00, 0x15, 0x2e, 0x02, 0x6a, 0x25, 0x02, 0x95, 0xba, 0x00, 0xd5, 0x33, 0x01, 0x09, 0xb4, 0x00, 0x46, 0x67, 0x00, 0x53, 0x78, 0x00, 0x9d, 0xa7, 0xff, 0x91, 0x62, 0xff, 0xb2, 0x80, 0xff, 0x37, 0xd9, 0xfe, 0xcd, 0x47, 0xff, 0xf1, 0x98, 0xff, 0x69, 0xfb, 0xff, 0x29, 0x89, 0x00, 0xa6, 0x15, 0x00, 0x97, 0xeb, 0xff, 0x8d, 0x1a, 0x00, 0xe7, 0x71, 0x0a, 0x2a, 0x5a, 0x0f, 0xc5, 0x74, 0x0a, 0x79, 0xfe, 0x03, 0x47, 0xed, 0xfa, 0x89, 0x71, 0xfc, 0xe8, 0xdb, 0x00, 0xec, 0x77, 0x02, 0xfe, 0x8b, 0x02, 0xf5, 0x55, 0x01, 0x35, 0xc7, 0xff, 0xd2, 0xd8, 0xff, 0xbd, 0x98, 0x01, 0xb8, 0xde, 0x00, 0x02, 0xa7, 0x01, 0x32, 0x64, 0x01, 0xf4, 0x29, 0x00, 0x7c, 0xa0, 0x00, 0xd3, 0x58, 0x00, 0x9b, 0x5e, 0x00, 0xaa, 0x5e, 0x00, 0x17, 0xb7, 0xff, 0xac, 0x36, 0xff, 0x30, 0x60, 0xff, 0xf4, 0xdf, 0xfe, 0x1b, 0xbf, 0xff, 0x67, 0x61, 0x00, 0xa2, 0x6f, 0xff, 0x62, 0x02, 0x00, 0x02, 0x08, 0x00, 0x02, 0x27, 0x00, 0xdb, 0x45, 0x00, 0x1e, 0x59, 0x0a, 0xfc, 0x42, 0x0f, 0x61, 0x6e, 0x09, 0x76, 0x76, 0x03, 0x4d, 0xa0, 0xfb, 0x5d, 0x26, 0xfd, 0x0a, 0xa7, 0x01, 0x2e, 0xd5, 0x02, 0xa1, 0x61, 0x02, 0x16, 0xe2, 0x01, 0xe9, 0x5c, 0x01, 0x6a, 0x15, 0x00, 0x17, 0xba, 0x00, 0x52, 0x99, 0x00, 0x73, 0xf0, 0x00, 0xb7, 0xda, 0x00, 0x6b, 0x12, 0x00, 0xf0, 0x79, 0x00, 0xcd, 0x73, 0x00, 0x14, 0x60, 0x00, 0xcf, 0x1f, 0x00, 0x9e, 0x95, 0xff, 0x3a, 0x18, 0xff, 0x3e, 0x92, 0xff, 0xdd, 0x06, 0x00, 0xe8, 0xbc, 0xff, 0x24, 0x5f, 0xff, 0x92, 0x80, 0xff, 0xc1, 0x08, 0x00, 0xf8, 0x0c, 0x00, 0xab, 0x0e, 0x00, 0x1f, 0x63, 0x00, 0x57, 0xbe, 0x09, 0x3e, 0xf3, 0x0e, 0x41, 0x02, 0x09, 0xe5, 0x49, 0x03, 0xa8, 0xbf, 0xfc, 0x93, 0x2f, 0xfe, 0x7b, 0x46, 0x02, 0xb4, 0x3f, 0x03, 0x58, 0x71, 0x03, 0x71, 0x6b, 0x02, 0xab, 0x77, 0x00, 0x19, 0x86, 0xff, 0xfc, 0x01, 0x00, 0x1e, 0xec, 0xff, 0x71, 0xb6, 0x00, 0xa3, 0xa0, 0x00, 0xa6, 0x3f, 0x00, 0x44, 0x5d, 0x00, 0x5d, 0x42, 0x00, 0x0a, 0x2f, 0x00, 0x51, 0x06, 0x00, 0xa2, 0xb4, 0xff, 0x6c, 0xaf, 0xff, 0x65, 0x82, 0x00, 0xff, 0x56, 0xff, 0x5f, 0xfb, 0xfe, 0xc3, 0x86, 0xff, 0x37, 0xa7, 0xff, 0x72, 0xa1, 0xff, 0x7e, 0xcf, 0xff, 0xbd, 0x98, 0x00, 0x8a, 0xe2, 0xff, 0x00, 0xa1, 0x09, 0xf8, 0xed, 0x0e, 0x99, 0x64, 0x08, 0xf2, 0x10, 0x03, 0x80, 0x3a, 0xfe, 0xcb, 0x2f, 0xff, 0xbd, 0x0f, 0x03, 0x5b, 0x15, 0x04, 0x57, 0x85, 0x02, 0x0e, 0x3e, 0x01, 0x40, 0x37, 0x00, 0xd1, 0x44, 0xff, 0x08, 0xd5, 0xff, 0xf2, 0xa7, 0xff, 0x86, 0xb0, 0x00, 0x9a, 0xa2, 0x00, 0xb2, 0x0a, 0x00, 0xb9, 0x29, 0x00, 0xac, 0x3e, 0x00, 0xbf, 0x87, 0x00, 0xea, 0xc1, 0xff, 0x53, 0x78, 0x00, 0xb8, 0x81, 0x00, 0x09, 0x2b, 0xff, 0x44, 0x22, 0xff, 0xc1, 0x6b, 0xff, 0x48, 0x5a, 0xff, 0x01, 0x3d, 0xff, 0x3d, 0xc2, 0xff, 0xa5, 0xf9, 0xff, 0x62, 0xd6, 0xff, 0x3b, 0x16, 0x00, 0x62, 0xef, 0x09, 0x2f, 0x1d, 0x0f, 0x28, 0xea, 0x07, 0xf8, 0xfc, 0x02, 0x0d, 0x53, 0xff, 0x81, 0x92, 0x00, 0x5a, 0x3c, 0x03, 0x1a, 0x07, 0x03, 0x17, 0x9c, 0x01, 0xef, 0xc2, 0x00, 0xfd, 0x04, 0x00, 0x81, 0x6a, 0xff, 0xa7, 0xdf, 0xff, 0x69, 0x66, 0xff, 0xe8, 0x9d, 0x00, 0x76, 0x98, 0x00, 0x0f, 0x9e, 0xff, 0x3c, 0x51, 0x00, 0xea, 0xdb, 0x00, 0xd2, 0x14, 0x00, 0x75, 0x69, 0x00, 0xba, 0x37, 0x01, 0x28, 0x41, 0xff, 0xb8, 0x22, 0xff, 0x6f, 0x76, 0xff, 0x77, 0x1c, 0xff, 0x27, 0x03, 0xff, 0xf2, 0x8a, 0xff, 0x76, 0xc9, 0xff, 0x99, 0x2e, 0xff, 0x1d, 0x12, 0x00, 0xb7, 0x94, 0x00, 0x82, 0xd4, 0x09, 0x46, 0xf1, 0x0f, 0x9e, 0xa2, 0x08, 0x9e, 0xdf, 0x02, 0x98, 0x7a, 0xff, 0xdb, 0x58, 0x00, 0xd1, 0x94, 0x02, 0xf1, 0x97, 0x02, 0x0e, 0x4a, 0x01, 0x16, 0xb0, 0x00, 0x7d, 0x5c, 0x00, 0xb2, 0x05, 0xff, 0x04, 0xd0, 0xff, 0xce, 0xb8, 0xff, 0x0d, 0x1d, 0x00, 0x78, 0x8e, 0x00, 0x6e, 0xea, 0xff, 0xe3, 0xa5, 0x00, 0x50, 0x75, 0x00, 0xb6, 0xb9, 0x00, 0x11, 0x77, 0x01, 0x0c, 0xc7, 0xff, 0x7b, 0x39, 0xff, 0x40, 0xe5, 0xff, 0x73, 0x05, 0xff, 0x73, 0x98, 0xfe, 0x93, 0x54, 0xff, 0x90, 0x9f, 0xff, 0xbf, 0x1a, 0xff, 0xb1, 0x82, 0xff, 0x24, 0x6a, 0x00, 0x45, 0xd9, 0x00, 0x56, 0x6c, 0x0a, 0xe3, 0x00, 0x11, 0x34, 0xf4, 0x08, 0x00, 0x45, 0x02, 0x83, 0xd4, 0xfe, 0x9d, 0x32, 0xff, 0x33, 0xf8, 0x01, 0x3c, 0x21, 0x03, 0x1c, 0x79, 0x01, 0x47, 0xa6, 0x00, 0xf0, 0x6c, 0x00, 0x1f, 0xe1, 0xfe, 0x10, 0x82, 0xff, 0x63, 0xde, 0xff, 0x84, 0x56, 0x00, 0x6a, 0x61, 0x00, 0xd7, 0x56, 0x00, 0xf4, 0x83, 0x00, 0x35, 0x37, 0x00, 0x15, 0xd4, 0x01, 0x30, 0x05, 0x01, 0xf4, 0x43, 0xff, 0xbf, 0xb5, 0xff, 0x73, 0xba, 0xff, 0x41, 0xf6, 0xfe, 0xce, 0x9d, 0xfe, 0x68, 0x66, 0xff, 0xa1, 0x0a, 0xff, 0x1d, 0x24, 0xff, 0xf8, 0x39, 0x00, 0x73, 0x96, 0x00, 0xd9, 0x4f, 0x00, 0xbc, 0x86, 0x0a, 0x6e, 0x07, 0x12, 0x61, 0x68, 0x09, 0xc1, 0x8f, 0x01, 0x12, 0x3a, 0xfe, 0xd8, 0x58, 0xfe, 0xef, 0x88, 0x01, 0x48, 0x07, 0x03, 0xd0, 0x58, 0x01, 0xb2, 0x01, 0x01, 0x65, 0x8d, 0x00, 0x25, 0xa8, 0xfe, 0xb5, 0x94, 0xff, 0xde, 0x0b, 0x00, 0x6d, 0x34, 0x00, 0x7b, 0x86, 0x00, 0xe4, 0xbc, 0x00, 0x5c, 0xe7, 0xff, 0x14, 0x58, 0x00, 0x90, 0x98, 0x02, 0xe7, 0x98, 0x00, 0x71, 0x41, 0xff, 0x8f, 0xff, 0xff, 0xe6, 0x94, 0xff, 0x04, 0xd5, 0xfe, 0x6f, 0x13, 0xff, 0xb5, 0x46, 0xff, 0xa8, 0x90, 0xfe, 0x5b, 0x2f, 0xff, 0xe6, 0x8b, 0x00, 0x38, 0xf6, 0x00, 0xc4, 0xb4, 0xff, 0x05, 0x01, 0x0a, 0x92, 0x4f, 0x12, 0xab, 0x78, 0x0a, 0xaa, 0x54, 0x01, 0x07, 0x83, 0xfd, 0xa5, 0x12, 0xfe, 0x78, 0xaf, 0x01, 0xcd, 0x18, 0x03, 0x4c, 0xe8, 0x00, 0x13, 0x48, 0x00, 0x15, 0x6d, 0x00, 0x2c, 0x2d, 0xff, 0xf9, 0x9e, 0xff, 0xa8, 0xfe, 0xff, 0xea, 0xa4, 0x00, 0x5e, 0x7a, 0x00, 0xe6, 0x52, 0x00, 0xa8, 0x1e, 0x00, 0xb7, 0x31, 0x00, 0x62, 0x58, 0x02, 0xd6, 0x31, 0x01, 0x2c, 0x56, 0xff, 0x03, 0xd9, 0xff, 0x6a, 0xb3, 0xff, 0x7d, 0xe8, 0xfe, 0x66, 0x3a, 0xff, 0x76, 0x38, 0xff, 0x1a, 0x9c, 0xfe, 0xec, 0x3b, 0xff, 0x58, 0x53, 0x00, 0x60, 0xdf, 0x00, 0x75, 0xce, 0xff, 0x65, 0x31, 0x09, 0xb8, 0x44, 0x12, 0xa9, 0xee, 0x0b, 0x20, 0xd7, 0x01, 0x53, 0xcf, 0xfc, 0xb0, 0x9a, 0xfd, 0x9f, 0xbd, 0x01, 0x65, 0xa7, 0x03, 0x2b, 0x5e, 0x01, 0xe7, 0x8c, 0xff, 0x75, 0xa1, 0xff, 0x07, 0xf9, 0xfe, 0xae, 0x3f, 0xff, 0x5f, 0x66, 0x00, 0x9c, 0x4d, 0x01, 0xa9, 0x80, 0x00, 0x40, 0x5b, 0x00, 0x2b, 0x45, 0x00, 0x92, 0x99, 0xff, 0xd5, 0x0e, 0x02, 0x12, 0x02, 0x02, 0x96, 0x7e, 0xff, 0x77, 0xa9, 0xff, 0x10, 0x0e, 0x00, 0xd4, 0x43, 0xff, 0x75, 0x4d, 0xff, 0x25, 0x59, 0xff, 0x81, 0xd6, 0xfe, 0x84, 0x3e, 0xff, 0x8e, 0x56, 0x00, 0xb4, 0xd9, 0x00, 0xb0, 0xc6, 0xff, 0xd7, 0x02, 0x09, 0xdf, 0x5d, 0x12, 0x1c, 0xaf, 0x0c, 0x15, 0x22, 0x02, 0xf4, 0x57, 0xfc, 0x3b, 0x20, 0xfd, 0x85, 0xc0, 0x01, 0x16, 0x14, 0x04, 0x96, 0x9a, 0x01, 0x79, 0x58, 0xff, 0xb6, 0x57, 0xff, 0xcc, 0xcc, 0xfe, 0x9a, 0x90, 0xfe, 0x69, 0xab, 0xff, 0x38, 0x4e, 0x01, 0x79, 0x13, 0x01, 0x89, 0x53, 0x00, 0xa4, 0x5b, 0x00, 0x7f, 0xcf, 0xff, 0xdf, 0x20, 0x01, 0xbe, 0x38, 0x02, 0x63, 0x0d, 0x00, 0xaf, 0x3c, 0xff, 0x95, 0xcd, 0xff, 0x91, 0x98, 0xff, 0x59, 0xb4, 0xff, 0x4c, 0x7d, 0xff, 0x7f, 0xcd, 0xfe, 0xb5, 0x36, 0xff, 0x9f, 0x76, 0x00, 0xfe, 0xb6, 0x00, 0x02, 0xf0, 0xff, 0x19, 0x6e, 0x09, 0xcf, 0xfb, 0x12, 0x8d, 0xe0, 0x0c, 0x59, 0x3e, 0x02, 0xc2, 0xc0, 0xfb, 0x38, 0xb1, 0xfc, 0x5a, 0x1e, 0x02, 0xd7, 0x52, 0x04, 0xd3, 0xcf, 0x01, 0x42, 0x1c, 0xff, 0x88, 0x27, 0xff, 0xb2, 0x02, 0xff, 0xf3, 0x5f, 0xfe, 0x97, 0x33, 0xff, 0xd4, 0xb9, 0x00, 0x90, 0xd8, 0x00, 0x66, 0x41, 0x00, 0x27, 0x7e, 0x00, 0x3c, 0x5a, 0x00, 0xca, 0xc8, 0x00, 0x66, 0xfd, 0x01, 0x09, 0xc1, 0x00, 0x92, 0x01, 0xff, 0x53, 0x24, 0xff, 0xaa, 0xb4, 0xff, 0x6e, 0xf6, 0xff, 0x20, 0xe2, 0xff, 0x0f, 0x10, 0xff, 0xa4, 0x46, 0xff, 0x8c, 0x72, 0x00, 0x9e, 0xab, 0x00, 0xdf, 0x2e, 0x00, 0xdf, 0x05, 0x0a, 0x30, 0xee, 0x13, 0xd3, 0x73, 0x0d, 0x23, 0x1c, 0x02, 0x81, 0xff, 0xfa, 0x0c, 0x36, 0xfc, 0x7a, 0x48, 0x02, 0x20, 0x03, 0x05, 0xb2, 0xcf, 0x01, 0x85, 0xaf, 0xfe, 0x3b, 0x26, 0xff, 0x27, 0x0d, 0xff, 0x4c, 0x73, 0xfe, 0x9b, 0x16, 0xff, 0x40, 0x57, 0x00, 0x9f, 0x9b, 0x00, 0x45, 0xbc, 0xff, 0xe1, 0xc7, 0xff, 0x61, 0xba, 0x00, 0x81, 0xcc, 0x00, 0xc4, 0xb6, 0x01, 0xf2, 0x8d, 0x01, 0xba, 0x72, 0xff, 0xe0, 0x6e, 0xfe, 0x92, 0x10, 0xff, 0x73, 0xe7, 0xff, 0x79, 0x3e, 0x00, 0x33, 0x6d, 0xff, 0x52, 0x44, 0xff, 0x6f, 0xae, 0x00, 0x9d, 0xb1, 0x00, 0x47, 0x3c, 0x00, 0x22, 0xa5, 0x0a, 0x79, 0x42, 0x15, 0xe9, 0xfb, 0x0d, 0x38, 0x65, 0x01, 0x26, 0x5d, 0xfa, 0x88, 0xea, 0xfb, 0x7b, 0x63, 0x02, 0xd7, 0x98, 0x05, 0x48, 0xa9, 0x01, 0xdf, 0x2e, 0xfe, 0xf7, 0x06, 0xff, 0xf6, 0x1a, 0xff, 0x0b, 0x8e, 0xfe, 0xfc, 0x1b, 0xff, 0xde, 0x15, 0x00, 0x85, 0x66, 0x00, 0x41, 0xc4, 0xff, 0x80, 0x22, 0xff, 0x97, 0x41, 0x00, 0x82, 0xd7, 0x00, 0xf7, 0x47, 0x01, 0x31, 0x99, 0x01, 0xc6, 0x5d, 0x00, 0xa4, 0x8a, 0xfe, 0x51, 0x57, 0xfe, 0x9a, 0x81, 0xff, 0xd9, 0x3b, 0x00, 0xcb, 0x88, 0xff, 0xf5, 0x40, 0xff, 0x8f, 0xae, 0x00, 0xa7, 0x9a, 0x00, 0xb2, 0x50, 0x00, 0x47, 0xc2, 0x0b, 0x60, 0x01, 0x17, 0x49, 0x88, 0x0e, 0xc8, 0x81, 0x00, 0x49, 0x90, 0xf9, 0x5e, 0x49, 0xfb, 0xae, 0xa7, 0x02, 0xeb, 0xb9, 0x06, 0x94, 0x42, 0x01, 0xdb, 0x61, 0xfd, 0x32, 0xe5, 0xfe, 0x76, 0x41, 0xff, 0x4a, 0x93, 0xfe, 0x69, 0x2c, 0xff, 0x82, 0x1a, 0x00, 0xba, 0x2e, 0x00, 0x21, 0xb0, 0xff, 0xdf, 0xdf, 0xfe, 0x5c, 0xe9, 0xff, 0xf9, 0xa2, 0x00, 0x30, 0xcc, 0x00, 0xdf, 0x2e, 0x01, 0x8a, 0xdc, 0x00, 0x4d, 0x04, 0xff, 0x98, 0x4e, 0xfe, 0x3e, 0x13, 0xff, 0xc4, 0xf7, 0xff, 0xf1, 0xae, 0xff, 0x93, 0x1c, 0xff, 0xd4, 0x6c, 0x00, 0xd7, 0x5f, 0x00, 0xb4, 0x2e, 0x00, 0xb4, 0x1c, 0x0d, 0x74, 0xcd, 0x18, 0x13, 0xba, 0x0e, 0xa2, 0x88, 0xff, 0xb2, 0xae, 0xf8, 0xe7, 0xa9, 0xfa, 0x65, 0x37, 0x03, 0x4e, 0xaa, 0x07, 0x20, 0xc2, 0x00, 0x03, 0x9a, 0xfc, 0x74, 0xc5, 0xfe, 0x0f, 0x72, 0xff, 0x89, 0x6b, 0xfe, 0x8b, 0x35, 0xff, 0x1b, 0x44, 0x00, 0x90, 0xfd, 0xff, 0x83, 0x8e, 0xff, 0xbb, 0xb7, 0xfe, 0xd7, 0xcc, 0xff, 0xd2, 0x83, 0x00, 0xf0, 0x71, 0x00, 0x2e, 0xcc, 0x00, 0x20, 0xe7, 0x00, 0xc8, 0x5b, 0xff, 0xe7, 0x2a, 0xfe, 0x27, 0xf3, 0xfe, 0x3d, 0xfb, 0xff, 0xd0, 0xb8, 0xff, 0xae, 0x0c, 0xff, 0xb7, 0x4b, 0x00, 0x87, 0x12, 0x00, 0x98, 0x74, 0xff, 0xcd, 0xdd, 0x0d, 0x92, 0x44, 0x1b, 0x14, 0xd2, 0x0f, 0x24, 0x4f, 0xfe, 0x76, 0x85, 0xf7, 0x43, 0x13, 0xfa, 0x7c, 0x74, 0x03, 0x02, 0xd0, 0x08, 0x36, 0x72, 0x00, 0x13, 0x87, 0xfb, 0xbd, 0xb1, 0xfe, 0xd5, 0x8b, 0xff, 0xbb, 0x6a, 0xfe, 0xf9, 0x00, 0xff, 0x0a, 0x74, 0x00, 0x74, 0xe2, 0xff, 0x1f, 0x38, 0xff, 0x7c, 0xd4, 0xfe, 0x6b, 0x89, 0xff, 0xee, 0x55, 0x00, 0xd5, 0x55, 0x00, 0x2d, 0x34, 0x00, 0x8f, 0xe1, 0x00, 0x0f, 0xad, 0xff, 0xc4, 0x46, 0xfe, 0x8a, 0xbb, 0xfe, 0x17, 0x9b, 0xff, 0xa3, 0xc7, 0xff, 0xe7, 0x88, 0xff, 0x7f, 0x0f, 0x00, 0x59, 0xc8, 0xff, 0x40, 0x0a, 0xff, 0xfa, 0x7a, 0x0f, 0x2a, 0x95, 0x1d, 0xef, 0xf1, 0x0f, 0x57, 0x07, 0xfd, 0x5f, 0x45, 0xf6, 0x40, 0xd3, 0xf9, 0x41, 0x46, 0x04, 0x47, 0x9f, 0x09, 0xf3, 0xd2, 0xff, 0x3b, 0x83, 0xfa, 0x16, 0xdc, 0xfe, 0xb3, 0xbd, 0xff, 0xc8, 0x4c, 0xfe, 0x4b, 0xeb, 0xfe, 0xdc, 0xa8, 0x00, 0xca, 0xd7, 0xff, 0xac, 0xe1, 0xfe, 0x12, 0xd8, 0xfe, 0x21, 0x8f, 0xff, 0xa0, 0x4e, 0x00, 0xf9, 0x26, 0x00, 0x95, 0xcb, 0xff, 0x72, 0xd8, 0x00, 0xac, 0xd7, 0xff, 0x4d, 0x84, 0xfe, 0x28, 0xc0, 0xfe, 0xd1, 0x77, 0xff, 0x9e, 0x8b, 0xff, 0xca, 0x94, 0xff, 0x35, 0x76, 0x00, 0xfb, 0x9c, 0xff, 0x64, 0xec, 0xfe, 0x00, 0x9d, 0x10, 0x6b, 0xed, 0x1f, 0x9b, 0x9d, 0x10, 0x98, 0x05, 0xfc, 0xa5, 0xf1, 0xf4, 0x00, 0x58, 0xf9, 0xf6, 0x0a, 0x05, 0x08, 0x4b, 0x0a, 0xdd, 0x6e, 0xff, 0xa2, 0x82, 0xf9, 0x12, 0xdf, 0xfe, 0x68, 0x22, 0x00, 0xea, 0x20, 0xfe, 0xa4, 0xb0, 0xfe, 0x93, 0xd9, 0x00, 0xb5, 0xfa, 0xff, 0x4c, 0x84, 0xfe, 0x99, 0xb3, 0xfe, 0xce, 0x9c, 0xff, 0x86, 0x4e, 0x00, 0x33, 0x1e, 0x00, 0xf4, 0x4f, 0xff, 0xe7, 0x9b, 0x00, 0xbd, 0x1e, 0x00, 0x20, 0xbb, 0xfe, 0x9a, 0xfc, 0xfe, 0x01, 0x4c, 0xff, 0x36, 0x75, 0xff, 0xae, 0x6d, 0xff, 0x3c, 0x94, 0x00, 0x65, 0xb3, 0xff, 0x06, 0xde, 0xfe, 0x20, 0x15, 0x12, 0x1e, 0x58, 0x22, 0x32, 0x6d, 0x11, 0x5b, 0xd6, 0xfa, 0xd7, 0x21, 0xf3, 0x44, 0x9d, 0xf8, 0x11, 0xce, 0x05, 0xbc, 0xf2, 0x0a, 0x0f, 0x9d, 0xfe, 0x45, 0x2b, 0xf8, 0xdb, 0xd1, 0xfe, 0x49, 0x8c, 0x00, 0x63, 0xd8, 0xfd, 0xae, 0x44, 0xfe, 0x81, 0xb9, 0x00, 0x6d, 0x25, 0x00, 0xb6, 0x28, 0xfe, 0x70, 0x68, 0xfe, 0x7c, 0x5a, 0xff, 0xbe, 0x39, 0x00, 0x62, 0x18, 0x00, 0x3e, 0xc1, 0xfe, 0xdd, 0x07, 0x00, 0xf7, 0x2a, 0x00, 0xf1, 0xf1, 0xfe, 0x40, 0x38, 0xff, 0x99, 0x54, 0xff, 0x03, 0x21, 0xff, 0xb6, 0x53, 0xff, 0x25, 0x42, 0x00, 0xc0, 0xda, 0xff, 0x1b, 0x9b, 0xfe, 0xd4, 0x16, 0x13, 0x8c, 0x61, 0x24, 0x31, 0x69, 0x12, 0xbf, 0xcf, 0xfa, 0xf6, 0xe4, 0xf1, 0xd0, 0xc5, 0xf7, 0x3c, 0xba, 0x06, 0x03, 0x74, 0x0b, 0x83, 0x6a, 0xfe, 0xfd, 0x36, 0xf7, 0xcc, 0xb4, 0xfe, 0x64, 0x57, 0x01, 0x0a, 0xcb, 0xfd, 0x15, 0x0f, 0xfe, 0xb3, 0xcb, 0x00, 0x53, 0x50, 0x00, 0x71, 0x14, 0xfe, 0xcb, 0x84, 0xfe, 0xf7, 0x41, 0xff, 0x8d, 0x30, 0x00, 0xf9, 0x41, 0x00, 0x23, 0xa3, 0xfe, 0x6a, 0x96, 0xff, 0xc7, 0x3a, 0x00, 0x69, 0x67, 0xff, 0xcd, 0x5e, 0xff, 0x40, 0xdc, 0xff, 0xb8, 0x03, 0xff, 0x8c, 0x82, 0xff, 0x34, 0x22, 0x00, 0x70, 0xd1, 0xff, 0x6e, 0xde, 0xfe, 0xc5, 0x2e, 0x15, 0x18, 0x44, 0x26, 0x5f, 0x4e, 0x12, 0xa4, 0x30, 0xfb, 0x50, 0x8b, 0xf0, 0xfb, 0xa8, 0xf6, 0x26, 0x04, 0x08, 0xb1, 0x92, 0x0b, 0xae, 0x98, 0xfd, 0xde, 0x60, 0xf6, 0x55, 0x6b, 0xfe, 0x32, 0x09, 0x02, 0x1c, 0xcd, 0xfd, 0x84, 0x8d, 0xfd, 0x0b, 0xf2, 0x00, 0x47, 0x52, 0x00, 0xad, 0xc8, 0xfd, 0x32, 0x93, 0xfe, 0x6d, 0x2c, 0xff, 0x94, 0x1e, 0x00, 0xc5, 0x2a, 0x00, 0x94, 0xb8, 0xfe, 0x4e, 0xdc, 0xfe, 0x30, 0xdc, 0xff, 0x85, 0x21, 0x00, 0xda, 0x65, 0xff, 0x2f, 0x3b, 0x00, 0x16, 0x30, 0xff, 0x76, 0x6b, 0xff, 0x9c, 0x4c, 0x00, 0x25, 0x8f, 0xff, 0x16, 0xe0, 0xfe, 0x8a, 0x88, 0x17, 0x45, 0xfb, 0x27, 0xaa, 0x0c, 0x11, 0x44, 0x26, 0xfb, 0xe2, 0x2c, 0xf0, 0x13, 0x3a, 0xf6, 0x1a, 0x06, 0x09, 0x4f, 0xf4, 0x0a, 0xcd, 0xc1, 0xfc, 0x89, 0x45, 0xf6, 0x56, 0xf8, 0xfd, 0xc7, 0x63, 0x02, 0x39, 0x06, 0xfe, 0x6b, 0x0c, 0xfd, 0xfc, 0xf2, 0x00, 0x3d, 0x68, 0x00, 0x5e, 0x81, 0xfd, 0x3a, 0xa0, 0xfe, 0x4b, 0x20, 0xff, 0xc1, 0x0c, 0x00, 0x67, 0xf5, 0xff, 0xde, 0xee, 0xfe, 0x99, 0x94, 0xfe, 0x2d, 0xf5, 0xfe, 0xb4, 0xbd, 0x00, 0x37, 0xc0, 0xff, 0x83, 0x33, 0x00, 0x39, 0xb0, 0xff, 0xe7, 0x39, 0xff, 0xb5, 0x5d, 0x00, 0x41, 0xb7, 0xff, 0x35, 0x93, 0xfe, 0x37, 0x01, 0x1c, 0xb4, 0xcd, 0x29, 0xbf, 0x0e, 0x0d, 0x0e, 0xdb, 0xfa, 0xbd, 0xed, 0xf0, 0xcf, 0x86, 0xf6, 0x56, 0xb6, 0x09, 0xb1, 0xaa, 0x09, 0x99, 0x60, 0xfb, 0xf6, 0xd3, 0xf6, 0xa9, 0x88, 0xfd, 0xd3, 0x3d, 0x02, 0x5f, 0x9e, 0xfe, 0xf8, 0x74, 0xfc, 0xf5, 0xbb, 0x00, 0xe7, 0x5c, 0x00, 0x48, 0x6e, 0xfd, 0xeb, 0x93, 0xfe, 0x2a, 0x37, 0xff, 0x8a, 0xfb, 0xff, 0x4d, 0x8c, 0xff, 0xf9, 0x08, 0xff, 0xe0, 0xae, 0xfe, 0xb8, 0x03, 0xfe, 0xb5, 0xca, 0x00, 0x76, 0x98, 0x00, 0xe3, 0xd6, 0xff, 0xf3, 0x5f, 0x00, 0x57, 0x72, 0xff, 0x35, 0xe2, 0xff, 0x61, 0x32, 0x00, 0xed, 0x4b, 0xfe, 0x3b, 0xa8, 0x1f, 0xff, 0x17, 0x2a, 0xe5, 0xd3, 0x09, 0x00, 0xe2, 0xfc, 0x45, 0xd7, 0xf1, 0x0a, 0xfa, 0xf4, 0x15, 0x37, 0x0a, 0x64, 0xc3, 0x09, 0xea, 0x0f, 0xfa, 0x5d, 0xd1, 0xf6, 0xee, 0x7e, 0xfd, 0x88, 0x2e, 0x02, 0xb0, 0xe6, 0xfe, 0x0f, 0x11, 0xfc, 0xec, 0x8c, 0x00, 0x85, 0x38, 0x00, 0xfd, 0x62, 0xfd, 0xd3, 0xaa, 0xfe, 0xb9, 0x8a, 0xff, 0x50, 0xbd, 0xff, 0x17, 0x46, 0xff, 0x96, 0x0a, 0xff, 0x79, 0xe6, 0xfe, 0x21, 0x9d, 0xfd, 0xd3, 0x2f, 0x00, 0xd7, 0x96, 0x01, 0xca, 0xa9, 0xff, 0xf3, 0xa0, 0x00, 0xa5, 0x08, 0x00, 0x0b, 0x75, 0xff, 0xaf, 0x70, 0x00, 0x01, 0x52, 0xfe, 0x91, 0x33, 0x23, 0xcb, 0xd8, 0x29, 0x1b, 0x87, 0x06, 0x9c, 0xab, 0xff, 0xd9, 0xc6, 0xf2, 0xa7, 0x29, 0xf3, 0xd4, 0x9e, 0x0a, 0x20, 0xfe, 0x09, 0x67, 0x9b, 0xf8, 0xd6, 0xae, 0xf6, 0x8a, 0xe3, 0xfd, 0x39, 0xd8, 0x01, 0x8b, 0xe7, 0xfe, 0x7f, 0xe0, 0xfb, 0x7a, 0x67, 0x00, 0x60, 0xdb, 0xff, 0x83, 0x33, 0xfd, 0x82, 0xf1, 0xfe, 0x06, 0x15, 0x00, 0xed, 0x45, 0xff, 0x35, 0xfe, 0xfe, 0xad, 0x31, 0xff, 0x3b, 0xcf, 0xfe, 0xf4, 0x8c, 0xfd, 0x61, 0x75, 0xff, 0x10, 0x34, 0x02, 0x59, 0xf1, 0xff, 0xdf, 0x7a, 0x00, 0xbb, 0xa4, 0x00, 0x0e, 0x5b, 0xff, 0x06, 0x3c, 0x00, 0xb9, 0x83, 0xfe, 0xa1, 0x4c, 0x28, 0x2a, 0x21, 0x2b, 0xcb, 0x34, 0x00, 0x9e, 0x1f, 0x00, 0xed, 0x99, 0xf5, 0xca, 0xaa, 0xf3, 0xea, 0xb2, 0x09, 0x7d, 0x07, 0x09, 0x84, 0xa2, 0xf7, 0xb8, 0xa6, 0xf6, 0x50, 0x78, 0xfe, 0xb6, 0x31, 0x01, 0x85, 0x19, 0xff, 0x6e, 0x85, 0xfb, 0xb6, 0x13, 0x00, 0xf6, 0x7d, 0xff, 0x84, 0x2c, 0xfd, 0x12, 0x11, 0xff, 0x59, 0xaf, 0x00, 0x0a, 0x39, 0xff, 0x08, 0x78, 0xfe, 0x21, 0x47, 0xff, 0xe0, 0x6e, 0xfe, 0xf6, 0xfa, 0xfd, 0x80, 0xef, 0xfe, 0xb1, 0x01, 0x02, 0x37, 0xbc, 0x00, 0x26, 0x7c, 0x00, 0x50, 0xc4, 0x00, 0x83, 0xa6, 0xff, 0x13, 0xc5, 0xff, 0x89, 0x92, 0xfe, 0x94, 0xb6, 0x2d, 0xbc, 0x9c, 0x2b, 0xa2, 0x67, 0xfa, 0xd6, 0xec, 0xff, 0x8d, 0xe8, 0xf7, 0x82, 0x7b, 0xf5, 0xcf, 0x8d, 0x08, 0xf5, 0xda, 0x07, 0xe2, 0x34, 0xf7, 0x54, 0x75, 0xf6, 0x95, 0x0e, 0xff, 0x83, 0xd1, 0x00, 0xfe, 0x32, 0xff, 0x28, 0x18, 0xfb, 0x62, 0x0a, 0x00, 0x91, 0x00, 0xff, 0xda, 0x59, 0xfd, 0xd5, 0x5b, 0xff, 0x54, 0x16, 0x01, 0x41, 0x53, 0xff, 0x9f, 0xf8, 0xfd, 0x16, 0x83, 0xff, 0x1b, 0x0a, 0xfe, 0xd1, 0x71, 0xfe, 0x4b, 0xec, 0xfe, 0x05, 0x8e, 0x01, 0x44, 0x3a, 0x01, 0xbf, 0xe1, 0x00, 0x39, 0x80, 0x00, 0xb3, 0xd8, 0xff, 0xdd, 0xb9, 0xff, 0xef, 0x36, 0xfe, 0x88, 0xac, 0x32, 0x10, 0xa9, 0x2d, 0x4a, 0x08, 0xf4, 0xf4, 0x5d, 0xfe, 0x0a, 0xa0, 0xfa, 0x46, 0x39, 0xf8, 0x21, 0xb6, 0x06, 0x53, 0x7e, 0x06, 0xe3, 0x93, 0xf7, 0x84, 0x7e, 0xf5, 0x22, 0x9a, 0xff, 0x94, 0x67, 0x00, 0xb5, 0x5c, 0xff, 0x8d, 0x7c, 0xfa, 0x4b, 0xe4, 0xff, 0x2a, 0x94, 0xfe, 0x2e, 0xa3, 0xfd, 0x99, 0xb7, 0xff, 0x9d, 0x44, 0x01, 0x2d, 0xad, 0xff, 0x34, 0x2a, 0xfd, 0x10, 0xd7, 0xff, 0x3e, 0xb8, 0xfd, 0xba, 0xc6, 0xfe, 0x09, 0x43, 0xff, 0xcd, 0x14, 0x01, 0x06, 0x07, 0x01, 0x6f, 0x8e, 0x01, 0x4b, 0x2d, 0x00, 0x96, 0x78, 0xff, 0xea, 0x21, 0x00, 0x19, 0xc3, 0xfd, 0xda, 0xec, 0x36, 0x67, 0x36, 0x2f, 0x3c, 0x54, 0xef, 0x40, 0x4e, 0xfc, 0x3b, 0x37, 0xfc, 0x7d, 0x15, 0xfb, 0xca, 0x2f, 0x05, 0xaf, 0x7b, 0x05, 0xeb, 0x19, 0xf8, 0x5a, 0x6d, 0xf4, 0x6f, 0xe4, 0xff, 0x35, 0x0d, 0x00, 0x41, 0x75, 0xff, 0xb5, 0x23, 0xfa, 0xd5, 0xbb, 0xff, 0xa5, 0x58, 0xfe, 0x41, 0x07, 0xfe, 0x80, 0xef, 0xff, 0x89, 0x3b, 0x01, 0xc5, 0x08, 0x00, 0x09, 0x84, 0xfc, 0x2e, 0x22, 0x00, 0xe8, 0x96, 0xfd, 0x84, 0xdf, 0xfe, 0x18, 0xf1, 0xff, 0xa9, 0xd7, 0x00, 0x0f, 0x24, 0x00, 0x81, 0x0d, 0x02, 0x3d, 0x1b, 0x00, 0x79, 0xd5, 0xfe, 0x1d, 0x87, 0x00, 0xd3, 0xde, 0xfd, 0x9f, 0xaa, 0x3b, 0x8c, 0xd9, 0x30, 0x2d, 0x1f, 0xeb, 0x18, 0x48, 0xf9, 0xea, 0x02, 0xfd, 0x16, 0x5f, 0xfe, 0x7c, 0xee, 0x03, 0x68, 0xcd, 0x04, 0x3c, 0x84, 0xf8, 0x27, 0x30, 0xf3, 0x54, 0xe8, 0xff, 0x12, 0x7b, 0xff, 0xe9, 0xbf, 0xff, 0xe7, 0x02, 0xfa, 0xd8, 0xb8, 0xff, 0x45, 0x44, 0xfe, 0xf6, 0x7f, 0xfe, 0xad, 0xfd, 0xff, 0xbd, 0x14, 0x01, 0x71, 0x77, 0x00, 0x73, 0x07, 0xfc, 0xda, 0x7d, 0x00, 0x68, 0x52, 0xfd, 0x3b, 0x45, 0xff, 0x29, 0xbd, 0x00, 0x48, 0x5d, 0x00, 0xe7, 0x16, 0xff, 0xe8, 0xe5, 0x01, 0xdb, 0x51, 0x00, 0x0b, 0x66, 0xfe, 0x4f, 0xb4, 0x00, 0x52, 0x90, 0xfe, 0x8a, 0xfd, 0x3e, 0x46, 0xac, 0x32, 0x66, 0x60, 0xe8, 0x4b, 0x95, 0xf6, 0x54, 0xa7, 0xfc, 0x4f, 0x7c, 0x00, 0x95, 0xc5, 0x03, 0xf8, 0x81, 0x04, 0x54, 0xa5, 0xf8, 0x4a, 0x31, 0xf2, 0xbe, 0x7c, 0xff, 0x37, 0xde, 0xfe, 0x7d, 0x54, 0x00, 0xcc, 0x33, 0xfa, 0xf0, 0xbf, 0xff, 0x04, 0x76, 0xfe, 0x1d, 0x98, 0xfe, 0x56, 0xd5, 0xff, 0xf8, 0xea, 0x00, 0xdb, 0xf9, 0x00, 0x73, 0xde, 0xfb, 0x3f, 0x82, 0x00, 0x3c, 0x5e, 0xfd, 0xbd, 0xc3, 0xff, 0x3d, 0xb6, 0x00, 0xae, 0x10, 0x00, 0xe0, 0x51, 0xfe, 0x5b, 0x25, 0x01, 0xff, 0xcb, 0x00, 0x37, 0x87, 0xfe, 0x2b, 0x9e, 0x00, 0x28, 0x17, 0xff, 0xd3, 0xc8, 0x41, 0x00, 0x6b, 0x34, 0x47, 0xc4, 0xe6, 0x0c, 0x72, 0xf4, 0xd0, 0xf3, 0xfa, 0xd4, 0x06, 0x02, 0x7c, 0x76, 0x04, 0xb5, 0x4b, 0x04, 0x05, 0xaf, 0xf8, 0xd2, 0x57, 0xf1, 0x1d, 0xa5, 0xfe, 0x6f, 0x4a, 0xfe, 0x7e, 0x8b, 0x01, 0x3e, 0x8a, 0xfa, 0x98, 0xd6, 0xff, 0x26, 0xd7, 0xfe, 0xcc, 0x54, 0xfe, 0xcc, 0x8f, 0xff, 0x26, 0x02, 0x01, 0xe3, 0xa0, 0x01, 0xba, 0xb5, 0xfb, 0xaa, 0xa9, 0x00, 0xac, 0x9e, 0xfd, 0x86, 0xac, 0xff, 0x49, 0x68, 0x00, 0xf3, 0xeb, 0xff, 0x2c, 0x98, 0xfd, 0x3e, 0x85, 0x00, 0xc6, 0x71, 0x01, 0x2c, 0xee, 0xfe, 0x95, 0x75, 0x00, 0x4d, 0x7f, 0xff, 0xb5, 0xc6, 0x44, 0x1e, 0xcc, 0x35, 0xa3, 0xf8, 0xe5, 0x53, 0xa6, 0xf2, 0x28, 0x30, 0xf7, 0x1c, 0x3f, 0x03, 0xb0, 0xf4, 0x05, 0x04, 0xfd, 0x03, 0x41, 0x83, 0xf8, 0xf7, 0x64, 0xf0, 0xf7, 0x4c, 0xfd, 0x67, 0x0c, 0xfe, 0x25, 0x97, 0x03, 0x3a, 0xa5, 0xfa, 0x5b, 0x2f, 0x00, 0x23, 0xec, 0xfe, 0x8f, 0xa3, 0xfd, 0x01, 0xab, 0xff, 0xa9, 0x46, 0x01, 0xa4, 0xe7, 0x01, 0xe8, 0x36, 0xfc, 0x10, 0xd4, 0x00, 0x74, 0xc4, 0xfc, 0x8c, 0x85, 0xff, 0x24, 0x01, 0x00, 0xbe, 0x6c, 0xff, 0xce, 0x85, 0xfd, 0x92, 0x3f, 0x00, 0x4e, 0xae, 0x01, 0x72, 0x8d, 0xff, 0x3f, 0xb2, 0x00, 0x66, 0x7c, 0xff, 0x4c, 0x0d, 0x47, 0xe0, 0x1c, 0x36, 0xf1, 0x8a, 0xe6, 0x51, 0x86, 0xf1, 0x52, 0xfd, 0xf2, 0x18, 0xfe, 0x03, 0x0f, 0x25, 0x07, 0x3d, 0xd0, 0x03, 0xce, 0xfc, 0xf7, 0x65, 0xf0, 0xef, 0x46, 0x63, 0xfc, 0x7b, 0x51, 0xfe, 0xb7, 0x41, 0x05, 0xba, 0xc4, 0xfa, 0xaa, 0x52, 0x00, 0x48, 0x5f, 0xfe, 0x52, 0xa2, 0xfd, 0xb7, 0xf9, 0xff, 0x14, 0x24, 0x01, 0x6b, 0x8e, 0x02, 0x70, 0xa9, 0xfc, 0x66, 0xbc, 0xff, 0xc8, 0x3b, 0xfc, 0x9e, 0x6a, 0xff, 0x47, 0x64, 0xff, 0x49, 0x90, 0xff, 0x40, 0x0e, 0xfe, 0x0b, 0xdc, 0xff, 0x4b, 0x8e, 0x01, 0x7b, 0x7f, 0x00, 0x92, 0xae, 0x00, 0x5e, 0xd1, 0xfe, 0x1c, 0x1f, 0x48, 0x32, 0xaf, 0x36, 0x73, 0xb6, 0xe8, 0xcb, 0x6a, 0xf0, 0x57, 0xd8, 0xed, 0x88, 0xa6, 0x03, 0x93, 0x9a, 0x08, 0x2f, 0x8b, 0x03, 0xa6, 0x3c, 0xf7, 0xf0, 0xb9, 0xf0, 0xfd, 0x77, 0xfb, 0xf2, 0x79, 0xfe, 0xed, 0x51, 0x07, 0xa9, 0xb2, 0xfa, 0x05, 0xa6, 0xff, 0xa8, 0x7e, 0xfe, 0xb8, 0xda, 0xfd, 0xf7, 0x34, 0x00, 0x2f, 0xb5, 0x01, 0x2f, 0x45, 0x02, 0x13, 0x0f, 0xfc, 0x98, 0x27, 0xff, 0xdb, 0x6c, 0xfb, 0x07, 0x3b, 0xff, 0xbf, 0xaa, 0xff, 0x7a, 0xdc, 0xff, 0xc5, 0x60, 0xfe, 0x64, 0xca, 0xff, 0xc5, 0x95, 0x01, 0x40, 0x82, 0x00, 0xc4, 0xd8, 0x00, 0xc5, 0xf4, 0xfe, 0xdd, 0x48, 0x47, 0x33, 0x2f, 0x38, 0x6d, 0x43, 0xeb, 0xc4, 0x3d, 0xf0, 0xe9, 0x40, 0xe9, 0xf0, 0xdb, 0x01, 0xda, 0x28, 0x0a, 0x5c, 0xcc, 0x02, 0x25, 0xe0, 0xf7, 0xca, 0x01, 0xf2, 0x1b, 0x7b, 0xfa, 0xeb, 0xd5, 0xfe, 0x4a, 0x82, 0x08, 0xca, 0x78, 0xfa, 0x93, 0x24, 0xff, 0x56, 0x1e, 0xff, 0x5e, 0x2f, 0xfe, 0x78, 0x2a, 0x01, 0x26, 0x68, 0x00, 0x03, 0x89, 0x01, 0xa8, 0x62, 0xfc, 0x9e, 0x35, 0xfe, 0x9b, 0x4d, 0xfb, 0x66, 0xc7, 0xff, 0xfe, 0xc9, 0xff, 0x84, 0xd5, 0xff, 0x1e, 0x21, 0xff, 0x21, 0xc1, 0xff, 0x3a, 0xc3, 0x00, 0x64, 0xad, 0x00, 0xe9, 0xf0, 0x01, 0xbc, 0x55, 0xfe, 0x00, 0x71, 0x47, 0xea, 0xda, 0x36, 0xeb, 0x9a, 0xef, 0xec, 0x73, 0xf0, 0x0a, 0xa5, 0xe3, 0x06, 0x9c, 0xff, 0xd6, 0xad, 0x0a, 0x88, 0x9c, 0x03, 0x1c, 0xe4, 0xf8, 0x7d, 0xa6, 0xf3, 0xa5, 0xd0, 0xf9, 0xe1, 0xed, 0xfe, 0x99, 0x38, 0x09, 0xf6, 0x00, 0xfa, 0x62, 0x3a, 0xff, 0x19, 0xe5, 0x00, 0xe3, 0x4f, 0xfe, 0x38, 0xd0, 0xff, 0x3a, 0xa8, 0xff, 0xd6, 0xc5, 0x00, 0x90, 0xa6, 0xfc, 0xb8, 0x1d, 0xfe, 0xf2, 0xbb, 0xfb, 0xfa, 0x0c, 0x00, 0x0b, 0xd9, 0xff, 0x3e, 0x5a, 0x00, 0x11, 0x06, 0xff, 0x43, 0x7d, 0xff, 0xe0, 0xe6, 0x00, 0x54, 0xac, 0x00, 0x07, 0x3b, 0x02, 0x8c, 0x68, 0xfe, 0x2d, 0x82, 0x45, 0xdf, 0xfd, 0x36, 0xc7, 0x85, 0xf3, 0xb5, 0x2f, 0xf1, 0x83, 0x68, 0xdf, 0x09, 0x19, 0xfc, 0xc9, 0xb2, 0x0b, 0xd9, 0x99, 0x05, 0xc4, 0x8f, 0xf9, 0x09, 0x2b, 0xf5, 0x8a, 0x8e, 0xf9, 0x6d, 0x65, 0xfe, 0x2d, 0x1f, 0x09, 0x98, 0xa0, 0xfa, 0xf9, 0x99, 0x00, 0x82, 0xdb, 0x00, 0x71, 0xfd, 0xfc, 0xc9, 0xb3, 0xff, 0xc5, 0xb3, 0xfe, 0xe6, 0xc0, 0x00, 0x71, 0x96, 0xfd, 0x47, 0x05, 0xfe, 0x93, 0x30, 0xfc, 0x0f, 0x73, 0x00, 0x80, 0xce, 0xff, 0xa6, 0xc8, 0xff, 0xb3, 0x87, 0xff, 0xcb, 0xeb, 0xff, 0xe6, 0x73, 0x00, 0xc3, 0x6f, 0x00, 0x51, 0xd3, 0x02, 0xe3, 0x79, 0xfe, 0x1d, 0xba, 0x44, 0x0d, 0x0c, 0x35, 0xf6, 0xc8, 0xf6, 0x65, 0x50, 0xf2, 0x93, 0x14, 0xdb, 0xdb, 0x2d, 0xf9, 0x51, 0x83, 0x0d, 0x75, 0x3e, 0x07, 0x8e, 0xb0, 0xf9, 0xfc, 0x59, 0xf7, 0x50, 0xc8, 0xf8, 0x08, 0x06, 0xfd, 0xf6, 0x90, 0x0a, 0x70, 0x82, 0xfb, 0xcd, 0xfd, 0xff, 0xec, 0x86, 0x00, 0x44, 0xdc, 0xfb, 0xd6, 0x84, 0xff, 0xf0, 0xeb, 0xfe, 0x20, 0xac, 0x00, 0x1c, 0x2a, 0xfe, 0xaf, 0x48, 0xfe, 0x04, 0x0d, 0xfd, 0x9f, 0xcb, 0xff, 0x26, 0x37, 0xff, 0x3c, 0x56, 0x00, 0x66, 0xef, 0xff, 0xfc, 0x76, 0xff, 0xa6, 0x75, 0x00, 0x14, 0x90, 0x00, 0xc7, 0xc9, 0x02, 0x38, 0x75, 0xfe, 0x7c, 0xbb, 0x42, 0x62, 0xcc, 0x32, 0xd2, 0xd6, 0xf9, 0xa9, 0x13, 0xf4, 0x73, 0xda, 0xd6, 0xf0, 0xb8, 0xf7, 0x4b, 0x92, 0x0e, 0x1d, 0xb0, 0x08, 0x91, 0x40, 0xfb, 0x26, 0x68, 0xf8, 0x50, 0x27, 0xf7, 0x47, 0x5b, 0xfe, 0x2a, 0xdd, 0x0a, 0x29, 0x8d, 0xfa, 0x33, 0x5d, 0x00, 0x49, 0xb3, 0xfe, 0xc9, 0xf8, 0xfb, 0xbe, 0xca, 0x00, 0x6e, 0x30, 0xfe, 0x15, 0xe9, 0x00, 0xec, 0x6e, 0xff, 0xd0, 0x87, 0xfe, 0x20, 0x78, 0xfc, 0xc4, 0x80, 0xff, 0xe2, 0xc4, 0xff, 0x55, 0x1b, 0x00, 0xc2, 0xe6, 0xff, 0x3b, 0x95, 0xff, 0x7b, 0xa1, 0x00, 0xc3, 0x73, 0x00, 0xd7, 0x72, 0x02, 0xb7, 0x8f, 0xfe, 0xac, 0xe4, 0x40, 0x25, 0xbf, 0x2f, 0xd4, 0x57, 0xfc, 0x2b, 0x92, 0xf4, 0xdb, 0x78, 0xd6, 0x24, 0x99, 0xf6, 0x81, 0x8b, 0x0e, 0xf3, 0xed, 0x0a, 0x4e, 0xdf, 0xfa, 0x93, 0xac, 0xf9, 0xc2, 0x68, 0xf7, 0xc1, 0xbf, 0xfd, 0x9f, 0xd1, 0x0a, 0xf1, 0x2b, 0xfa, 0xec, 0x26, 0xff, 0x6f, 0x01, 0xff, 0x82, 0xef, 0xfc, 0x87, 0x98, 0x00, 0xd5, 0x61, 0xfe, 0x50, 0xc5, 0x01, 0xd9, 0x63, 0xff, 0x51, 0xdd, 0xfd, 0xab, 0x1e, 0xfd, 0x91, 0xb2, 0xff, 0x83, 0x2e, 0xff, 0xb2, 0x1f, 0x00, 0x2e, 0x45, 0x00, 0xc5, 0x83, 0xff, 0x9d, 0xab, 0x00, 0xe8, 0x34, 0x00, 0x85, 0x7a, 0x02, 0x73, 0x9d, 0xfe, 0x78, 0x03, 0x3d, 0x29, 0x73, 0x2c, 0xe8, 0x88, 0xfe, 0x05, 0xae, 0xf6, 0xdf, 0xd6, 0xd7, 0xeb, 0x32, 0xf5, 0x00, 0x46, 0x0e, 0xe4, 0x3b, 0x0b, 0x69, 0x21, 0xfd, 0x19, 0x87, 0xfa, 0x70, 0x44, 0xf5, 0x2d, 0x36, 0xff, 0xbf, 0x56, 0x09, 0xd0, 0x38, 0xf9, 0xb7, 0xda, 0xff, 0x03, 0x3d, 0xff, 0xc8, 0x41, 0xfd, 0x30, 0x60, 0x01, 0xf6, 0x1d, 0xff, 0x3e, 0xac, 0x00, 0x89, 0x83, 0xff, 0x34, 0x73, 0xfe, 0x0e, 0x85, 0xfd, 0x82, 0x1c, 0xff, 0x0a, 0xd5, 0xfe, 0x30, 0xb1, 0x00, 0x7a, 0x66, 0x00, 0x37, 0xf4, 0xfe, 0x02, 0xd5, 0x00, 0x65, 0xd5, 0x00, 0x24, 0xaa, 0x01, 0x2d, 0x8a, 0xfe, 0x7b, 0x49, 0x39, 0xf6, 0xe2, 0x28, 0xc2, 0xcc, 0xff, 0xa1, 0xc5, 0xf9, 0x7d, 0x17, 0xda, 0x24, 0x44, 0xf4, 0xa5, 0xbf, 0x0c, 0xc8, 0x0e, 0x0d, 0x03, 0xaa, 0xfd, 0x08, 0xb9, 0xf9, 0x07, 0x9a, 0xf5, 0xf2, 0xe7, 0xfe, 0xb7, 0x9c, 0x08, 0xcc, 0x2a, 0xf9, 0x02, 0x61, 0x00, 0x60, 0x2c, 0xff, 0xa8, 0x36, 0xfe, 0xfb, 0x51, 0x02, 0x8c, 0x9f, 0xfd, 0x5b, 0xc3, 0x00, 0x66, 0x6e, 0x00, 0x5a, 0x24, 0xfe, 0x36, 0xa7, 0xfd, 0x54, 0xdc, 0xfe, 0xcc, 0xe1, 0xfe, 0xa4, 0x2a, 0x01, 0x2e, 0xb7, 0xff, 0x6e, 0xc5, 0xfe, 0x43, 0xe2, 0x01, 0x08, 0x75, 0x00, 0x6d, 0xe1, 0x00, 0x20, 0x05, 0xff, 0x7a, 0xa4, 0x34, 0x3b, 0xd9, 0x23, 0x74, 0x93, 0x01, 0xe8, 0x9d, 0xfe, 0x24, 0xfd, 0xdb, 0x55, 0xf2, 0xf3, 0x94, 0x51, 0x0d, 0x79, 0x60, 0x0b, 0xd3, 0xfa, 0xfd, 0xd6, 0xa3, 0xfa, 0x9f, 0x4e, 0xf4, 0x50, 0x71, 0x00, 0x10, 0x8d, 0x07, 0xe8, 0xc6, 0xf8, 0xcc, 0x49, 0x01, 0x56, 0xd4, 0xff, 0x4d, 0x1f, 0xff, 0x53, 0x3c, 0x01, 0xde, 0x77, 0xfd, 0x94, 0x9a, 0x01, 0xd6, 0x64, 0x00, 0xc1, 0xa1, 0xfd, 0x60, 0x4c, 0xfe, 0xb6, 0xda, 0xfe, 0x8e, 0xe0, 0xfe, 0xa1, 0xff, 0x00, 0xdc, 0x69, 0xff, 0x28, 0x42, 0xff, 0xbb, 0x25, 0x02, 0xa0, 0x16, 0x00, 0x96, 0x72, 0x00, 0xa7, 0x56, 0xff, 0x76, 0x05, 0x2f, 0x77, 0xbf, 0x20, 0x05, 0x14, 0x04, 0x6d, 0x8d, 0x00, 0x9e, 0x17, 0xdf, 0x24, 0x30, 0xf6, 0xcb, 0xa5, 0x0a, 0xbf, 0x9b, 0x09, 0x5d, 0x35, 0xff, 0x79, 0xed, 0xf9, 0x11, 0x9c, 0xf5, 0xb7, 0xd9, 0x00, 0xd9, 0xfb, 0x05, 0xdd, 0x57, 0xf9, 0x93, 0x56, 0x02, 0xb9, 0x1e, 0x00, 0x38, 0x4b, 0xfe, 0xd9, 0x56, 0x01, 0x32, 0xfc, 0xfd, 0xd3, 0x87, 0x01, 0x12, 0x07, 0x00, 0x94, 0xbe, 0xfd, 0x28, 0x0a, 0xff, 0x29, 0x92, 0xfe, 0x99, 0x99, 0xfe, 0xf4, 0x4a, 0x01, 0x3c, 0x4a, 0xff, 0xbb, 0x1f, 0xff, 0x15, 0x8a, 0x02, 0x07, 0xaf, 0xff, 0xa1, 0x4d, 0x00, 0x10, 0x8a, 0xff, 0x1c, 0x96, 0x2c, 0xd5, 0xaf, 0x1f, 0x76, 0x3c, 0x01, 0xa0, 0x74, 0xfb, 0x0e, 0xd8, 0xe1, 0xb5, 0x7e, 0xff, 0xea, 0x6d, 0x0d, 0x26, 0x11, 0x04, 0x96, 0x05, 0xfc, 0xad, 0x2f, 0xfc, 0x27, 0xfe, 0xf8, 0xa9, 0x06, 0xff, 0xbb, 0xd2, 0x05, 0x7c, 0xac, 0xf9, 0x16, 0xa8, 0x01, 0x21, 0x59, 0x00, 0x41, 0x4a, 0xfe, 0x63, 0xd3, 0x00, 0xee, 0xe5, 0xfe, 0x5e, 0x3e, 0x01, 0x54, 0x8a, 0xff, 0x26, 0x64, 0xfe, 0xba, 0x4c, 0xfe, 0x41, 0x70, 0xff, 0xcc, 0x56, 0xff, 0x0e, 0xf9, 0xff, 0x1b, 0xef, 0xff, 0xf3, 0xca, 0xff, 0xf8, 0x6a, 0xff, 0xc1, 0x6c, 0xff, 0xfe, 0x33, 0x02, 0x39, 0x9b, 0xff, 0x53, 0x2f, 0x24, 0xe9, 0xde, 0x1f, 0xad, 0x97, 0x08, 0x15, 0xa9, 0xfd, 0x89, 0x69, 0xe2, 0x97, 0xa9, 0xf8, 0x05, 0xdd, 0x08, 0x88, 0xf0, 0x06, 0xa1, 0xd0, 0x01, 0x17, 0x3e, 0xfd, 0xf3, 0x58, 0xf8, 0x52, 0x1b, 0xfd, 0x74, 0x39, 0x03, 0x31, 0xed, 0xfb, 0x52, 0x0e, 0x03, 0x95, 0x85, 0x00, 0x6b, 0xd3, 0xfd, 0xbe, 0xab, 0x01, 0xa3, 0x12, 0xff, 0x69, 0x51, 0x00, 0x5a, 0xb9, 0x00, 0x39, 0x1a, 0xff, 0x6b, 0xa0, 0xfe, 0x2a, 0x66, 0x00, 0x9d, 0xb2, 0xfd, 0x95, 0xd4, 0xfe, 0xe8, 0xfd, 0xff, 0xa8, 0x27, 0xff, 0xe7, 0xdb, 0x00, 0x8c, 0xd2, 0x00, 0xcf, 0x14, 0x02, 0xa3, 0xdf, 0xff, 0x41, 0xb9, 0x1d, 0x00, 0xfd, 0x1c, 0xff, 0x7a, 0x0a, 0x82, 0xc3, 0xff, 0x45, 0xa2, 0xe8, 0x8d, 0x2f, 0xf8, 0xbb, 0x5c, 0x06, 0xe4, 0x0a, 0x06, 0x04, 0x92, 0x01, 0xa9, 0x1f, 0xfe, 0xde, 0x3b, 0xfa, 0x79, 0x0c, 0xfd, 0x77, 0x2e, 0x02, 0xb3, 0x60, 0xfd, 0x65, 0x79, 0x02, 0x76, 0x63, 0x00, 0x44, 0x29, 0xfe, 0x83, 0x89, 0x01, 0x63, 0x62, 0xff, 0xdc, 0x21, 0x00, 0x3e, 0xfe, 0x00, 0x6c, 0x6e, 0xff, 0x44, 0x31, 0xff, 0xfd, 0x6d, 0x00, 0x79, 0xe7, 0xfd, 0x40, 0x09, 0xff, 0x3f, 0x47, 0x00, 0x42, 0x57, 0xff, 0x51, 0x8f, 0x00, 0xaf, 0x03, 0x01, 0x68, 0xae, 0x01, 0x5d, 0xf2, 0xff, 0x90, 0x81, 0x18, 0xe4, 0x64, 0x1a, 0x40, 0x45, 0x0b, 0xbe, 0xbb, 0x01, 0xb3, 0x9c, 0xed, 0x69, 0x15, 0xf8, 0xd8, 0xaa, 0x04, 0x1b, 0xc4, 0x04, 0xea, 0x86, 0x01, 0xda, 0x32, 0xff, 0x5a, 0x9e, 0xfb, 0x07, 0x14, 0xfd, 0x80, 0xb5, 0x01, 0x66, 0x45, 0xfe, 0x92, 0xd1, 0x01, 0xf0, 0x6d, 0x00, 0x32, 0x90, 0xfe, 0x32, 0x65, 0x01, 0xd5, 0xa9, 0xff, 0xbb, 0x24, 0x00, 0x23, 0x23, 0x01, 0x5a, 0xf9, 0xff, 0xdd, 0x68, 0xff, 0xa1, 0x8e, 0x00, 0x13, 0xc3, 0xfe, 0x48, 0x26, 0xff, 0xc6, 0x22, 0x00, 0xcd, 0x28, 0xff, 0xb8, 0x49, 0x00, 0xa7, 0xe4, 0x00, 0xee, 0x4f, 0x01, 0xf0, 0x1c, 0x00, 0x17, 0x9f, 0x14, 0xa6, 0xe4, 0x17, 0xed, 0x96, 0x0b, 0xcc, 0xd6, 0x02, 0x86, 0x3f, 0xf1, 0x94, 0xa2, 0xf8, 0x73, 0x6a, 0x03, 0x36, 0x9b, 0x03, 0x8e, 0xab, 0x01, 0x10, 0xf4, 0xff, 0x1e, 0xa5, 0xfc, 0x2b, 0x5a, 0xfd, 0x05, 0x4b, 0x01, 0xde, 0xcb, 0xfe, 0x32, 0x48, 0x01, 0x6e, 0x92, 0x00, 0x3f, 0xe5, 0xfe, 0x26, 0x34, 0x01, 0xfc, 0xfb, 0xff, 0xb7, 0x3d, 0x00, 0xfb, 0x39, 0x01, 0x84, 0x84, 0x00, 0x6c, 0xfa, 0xff, 0x55, 0xb4, 0x00, 0x92, 0x00, 0xff, 0xd5, 0xd5, 0xfe, 0x72, 0xc3, 0xff, 0xde, 0x0c, 0xff, 0x1d, 0xb3, 0xff, 0x00, 0xb9, 0x00, 0xb9, 0x72, 0x01, 0x5a, 0x13, 0x00, 0x65, 0xe1, 0x11, 0x43, 0x1a, 0x16, 0x72, 0x3e, 0x0b, 0x74, 0x34, 0x03, 0xb5, 0x32, 0xf4, 0x13, 0xaa, 0xf9, 0x35, 0x88, 0x02, 0x70, 0xf6, 0x02, 0x5e, 0xeb, 0x01, 0x66, 0x5f, 0x00, 0x07, 0xa2, 0xfd, 0x03, 0xd5, 0xfd, 0x70, 0x22, 0x01, 0xb2, 0x19, 0xff, 0x86, 0x23, 0x01, 0xbd, 0xd4, 0x00, 0xf3, 0x41, 0xff, 0x60, 0x38, 0x01, 0xb6, 0x44, 0x00, 0x59, 0xe3, 0x00, 0x47, 0xc7, 0x01, 0x24, 0xdf, 0x00, 0xb8, 0x09, 0x00, 0x01, 0x73, 0x00, 0x6d, 0x0d, 0xff, 0x4b, 0xa5, 0xfe, 0xe1, 0x73, 0xff, 0xc5, 0xf7, 0xfe, 0xcb, 0x96, 0xff, 0x70, 0xd9, 0x00, 0x98, 0x8b, 0x01, 0x0e, 0x16, 0x00, 0xf2, 0xdd, 0x0f, 0x45, 0x51, 0x14, 0x67, 0xee, 0x0a, 0xc9, 0x19, 0x03, 0x6b, 0x06, 0xf6, 0x64, 0x93, 0xfa, 0x95, 0xf8, 0x01, 0x2a, 0x6f, 0x02, 0x99, 0xf3, 0x01, 0xbb, 0xb0, 0x00, 0xec, 0x59, 0xfe, 0xbf, 0x38, 0xfe, 0x13, 0xc1, 0x00, 0x62, 0x4f, 0xff, 0xd5, 0x2a, 0x01, 0x02, 0xc9, 0x00, 0xd4, 0x74, 0xff, 0x0c, 0x7e, 0x01, 0xb1, 0xe9, 0x00, 0xa4, 0x10, 0x01, 0xaf, 0x70, 0x01, 0xc9, 0x73, 0x00, 0x10, 0xb8, 0xff, 0x35, 0x2f, 0x00, 0x36, 0xd4, 0xfe, 0xbc, 0x6b, 0xfe, 0xec, 0x54, 0xff, 0xdc, 0xda, 0xfe, 0xd9, 0x46, 0xff, 0x0e, 0xe2, 0x00, 0x8f, 0x55, 0x01, 0x33, 0xcc, 0xff, 0x12, 0x7d, 0x0e, 0xfc, 0x3e, 0x13, 0x87, 0x37, 0x0a, 0x4a, 0xb4, 0x02, 0x82, 0xc2, 0xf7, 0x60, 0x80, 0xfb, 0x4b, 0xc5, 0x01, 0xe0, 0x50, 0x02, 0x76, 0x2d, 0x02, 0x72, 0xfb, 0x00, 0xbf, 0x08, 0xff, 0xcf, 0xb5, 0xfe, 0xd4, 0xa6, 0x00, 0xcb, 0xa6, 0xff, 0x85, 0x40, 0x01, 0x54, 0x42, 0x01, 0x01, 0x0e, 0x00, 0x85, 0x80, 0x01, 0x00, 0xe6, 0x00, 0xfa, 0xc2, 0x00, 0x4e, 0xfa, 0x00, 0xed, 0x50, 0x00, 0x8e, 0x99, 0xff, 0x60, 0x08, 0x00, 0x6e, 0x25, 0xff, 0x1a, 0x6c, 0xfe, 0xd4, 0x0d, 0xff, 0x35, 0xe7, 0xfe, 0xd6, 0x65, 0xff, 0xb2, 0xb7, 0x00, 0x98, 0x99, 0x01, 0x45, 0x5e, 0x00, 0x9b, 0x93, 0x0d, 0x5d, 0x81, 0x12, 0xfd, 0x68, 0x09, 0x74, 0x22, 0x02, 0x88, 0x33, 0xf9, 0x48, 0x4e, 0xfc, 0xc0, 0xe4, 0x01, 0x41, 0x84, 0x02, 0xe2, 0x5d, 0x02, 0x65, 0x3b, 0x01, 0xc0, 0x8c, 0xff, 0xae, 0x39, 0xff, 0xd5, 0x9f, 0x00, 0x77, 0x38, 0x00, 0x73, 0xac, 0x01, 0x17, 0x30, 0x01, 0xe1, 0xdf, 0xff, 0x08, 0xe9, 0x00, 0x76, 0xd2, 0x00, 0x10, 0xa4, 0x00, 0x53, 0x87, 0x00, 0xeb, 0x5a, 0x00, 0x68, 0xcc, 0xff, 0x5a, 0xfa, 0xff, 0x22, 0x24, 0xff, 0x8b, 0x7b, 0xfe, 0xae, 0x10, 0xff, 0x95, 0xbd, 0xfe, 0xc1, 0xe0, 0xff, 0xce, 0x4f, 0x01, 0xc4, 0xf6, 0x00, 0xef, 0x0a, 0x00, 0x6d, 0xdf, 0x0c, 0x91, 0x22, 0x12, 0xc4, 0xa1, 0x08, 0x6e, 0x68, 0x01, 0x26, 0x6f, 0xfa, 0xab, 0x12, 0xfd, 0xbf, 0x39, 0x02, 0xe3, 0xe6, 0x02, 0x1d, 0x58, 0x02, 0xa6, 0x88, 0x01, 0x5b, 0xcc, 0xff, 0xd0, 0xad, 0xff, 0x0f, 0x11, 0x01, 0x3d, 0x11, 0x00, 0xd6, 0x33, 0x01, 0xf4, 0xda, 0x00, 0xf2, 0x98, 0xff, 0x56, 0x57, 0x00, 0x2e, 0xbd, 0x00, 0xa7, 0xb5, 0x00, 0x0b, 0x4f, 0x00, 0xeb, 0x68, 0x00, 0x0b, 0xd6, 0xff, 0xaf, 0xb0, 0xff, 0x03, 0x7a, 0xff, 0x86, 0xa7, 0xfe, 0x46, 0x91, 0xfe, 0xdb, 0xc7, 0xff, 0x1e, 0x34, 0x00, 0xa3, 0x0f, 0x00, 0x36, 0x7d, 0x00, 0x10, 0x56, 0x00, 0x97, 0x6b, 0x0c, 0x53, 0x11, 0x12, 0xb5, 0x06, 0x08, 0x73, 0x02, 0x01, 0x9c, 0x80, 0xfb, 0x59, 0xe2, 0xfd, 0xbf, 0x9c, 0x02, 0x72, 0x74, 0x03, 0x90, 0x55, 0x02, 0x69, 0xbc, 0x01, 0x50, 0x84, 0x00, 0xec, 0x4f, 0xff, 0xb0, 0xdd, 0x00, 0x98, 0xf5, 0xff, 0x84, 0xc7, 0x00, 0x06, 0xd5, 0x00, 0x3e, 0x6d, 0xff, 0x52, 0x03, 0x00, 0x43, 0xa6, 0x00, 0x79, 0x22, 0x01, 0xd8, 0x3c, 0x00, 0x11, 0x29, 0x00, 0xd2, 0x2e, 0x00, 0x04, 0x0f, 0x00, 0x7d, 0x31, 0xff, 0x5b, 0x21, 0xff, 0x25, 0xbe, 0xff, 0x70, 0xfb, 0xfe, 0xb3, 0x8a, 0xff, 0x29, 0x2f, 0x00, 0x63, 0x3e, 0x00, 0x9c, 0x68, 0x00, 0x09, 0x45, 0x0c, 0x8c, 0xf8, 0x11, 0x6f, 0xa8, 0x07, 0x3d, 0xf4, 0x00, 0x83, 0x59, 0xfc, 0x4c, 0x52, 0xfe, 0xdc, 0xbb, 0x02, 0x83, 0x93, 0x03, 0x46, 0xad, 0x02, 0x7c, 0x98, 0x01, 0x8c, 0x6a, 0x00, 0xc3, 0xe5, 0xfe, 0x81, 0x23, 0x00, 0x43, 0x3f, 0x00, 0x50, 0x8d, 0x00, 0x56, 0xac, 0x00, 0x7f, 0x4c, 0xff, 0xf2, 0xbf, 0xff, 0xdc, 0xcb, 0x00, 0xc4, 0xd6, 0x00, 0x3f, 0x3f, 0x00, 0xe5, 0x50, 0x00, 0xec, 0x67, 0x00, 0xd0, 0xb4, 0xff, 0x38, 0xd7, 0xff, 0x4b, 0x39, 0x00, 0x5f, 0x86, 0xfe, 0xf4, 0x7c, 0xfe, 0xba, 0xa2, 0xff, 0x75, 0x1c, 0x00, 0x90, 0x13, 0x00, 0x1c, 0x2c, 0x00, 0xd9, 0x04, 0x0c, 0x22, 0x1e, 0x12, 0x5b, 0xf4, 0x07, 0xa9, 0x2b, 0x01, 0xc8, 0xf8, 0xfc, 0x93, 0x39, 0xfe, 0x1f, 0x64, 0x02, 0x68, 0x7d, 0x03, 0x60, 0x73, 0x02, 0xc1, 0xbc, 0x01, 0x3b, 0x47, 0x00, 0xa7, 0xb3, 0xfe, 0xa8, 0xe8, 0xff, 0xb0, 0xd1, 0xff, 0xcd, 0x9d, 0x00, 0xff, 0xa2, 0x00, 0xfb, 0x7c, 0xff, 0x1e, 0xa7, 0xff, 0xb9, 0x94, 0x00, 0xf2, 0xc3, 0x00, 0x0b, 0x03, 0x00, 0x9c, 0xc5, 0x00, 0x80, 0x07, 0x00, 0xfe, 0x3a, 0x00, 0xd1, 0x23, 0x01, 0x3e, 0xd6, 0xfe, 0xd0, 0x2e, 0xfe, 0xb4, 0x0e, 0xff, 0x37, 0x2a, 0xff, 0xf6, 0xe2, 0xff, 0x3f, 0x72, 0x00, 0x63, 0xf0, 0xff, 0x31, 0x17, 0x0c, 0x28, 0xb2, 0x12, 0xda, 0x53, 0x08, 0xfc, 0x0d, 0x01, 0x3e, 0x1c, 0xfd, 0x0b, 0x54, 0xfe, 0xb6, 0xd8, 0x01, 0x6c, 0xef, 0x02, 0xc4, 0x12, 0x02, 0x68, 0x56, 0x01, 0xde, 0xcd, 0x00, 0xa9, 0xf5, 0xfe, 0xaa, 0x71, 0xff, 0xfe, 0xd9, 0xff, 0xaf, 0x35, 0x00, 0xa4, 0x8e, 0x00, 0x3f, 0xee, 0xff, 0x20, 0xed, 0xff, 0x12, 0x59, 0x00, 0x0f, 0x42, 0x00, 0xc2, 0x6e, 0x00, 0xb0, 0x40, 0x00, 0x32, 0x07, 0x00, 0x30, 0xe4, 0x01, 0x89, 0x42, 0x00, 0x14, 0x12, 0xfe, 0x5a, 0xd5, 0xfe, 0xe3, 0xf7, 0xfe, 0xe1, 0x17, 0xff, 0x68, 0x04, 0x00, 0x39, 0x72, 0x00, 0xa0, 0x43, 0xff, 0x4e, 0x44, 0x0c, 0x8f, 0x92, 0x13, 0xb4, 0xd8, 0x08, 0x8b, 0x76, 0x00, 0xd3, 0xff, 0xfc, 0xb7, 0x52, 0xfe, 0xc6, 0xbd, 0x01, 0xaa, 0xe9, 0x02, 0x6c, 0x3d, 0x01, 0x99, 0xcf, 0x00, 0xd1, 0xbb, 0x00, 0xa2, 0xf3, 0xfe, 0xe5, 0xf7, 0xff, 0x5a, 0xd5, 0xff, 0xfa, 0x1b, 0x00, 0x8c, 0x98, 0x00, 0xe1, 0xb9, 0xff, 0x93, 0x37, 0x00, 0x8c, 0x90, 0x00, 0x2f, 0x2c, 0x00, 0x60, 0x29, 0x00, 0xd3, 0xe4, 0xff, 0x41, 0xad, 0x00, 0xc5, 0x28, 0x02, 0x96, 0x86, 0xff, 0xf6, 0x57, 0xfe, 0xd9, 0x04, 0xff, 0x67, 0xe1, 0xfe, 0x50, 0x7a, 0xff, 0x04, 0x4a, 0x00, 0x25, 0xf9, 0xff, 0xd5, 0xe8, 0xfe, 0x17, 0x3d, 0x0c, 0xe2, 0xb1, 0x14, 0xae, 0x87, 0x09, 0x06, 0xd5, 0xff, 0x32, 0x99, 0xfc, 0x1f, 0xdd, 0xfd, 0x67, 0x03, 0x02, 0xed, 0x5c, 0x03, 0xc6, 0xe8, 0x00, 0x2e, 0x45, 0x00, 0xa9, 0x06, 0x00, 0x38, 0x80, 0xfe, 0x85, 0xb4, 0xff, 0x32, 0x3d, 0x00, 0xb9, 0xc3, 0x00, 0xfe, 0x8b, 0x00, 0x52, 0xbb, 0xff, 0x28, 0x18, 0x00, 0x16, 0x46, 0x00, 0xaa, 0x65, 0x00, 0x91, 0x5f, 0x00, 0x6c, 0x8b, 0xff, 0x32, 0x96, 0x00, 0x4d, 0x53, 0x02, 0x19, 0x22, 0xff, 0x86, 0x5f, 0xfe, 0x58, 0x5a, 0xff, 0x90, 0xd1, 0xfe, 0xaf, 0xdf, 0xff, 0x0c, 0x86, 0x00, 0x57, 0x91, 0xff, 0xe8, 0xe4, 0xfe, 0x9d, 0x5a, 0x0c, 0x11, 0xb1, 0x15, 0x7f, 0x89, 0x0a, 0x9a, 0x43, 0xff, 0x87, 0xce, 0xfb, 0x79, 0x7a, 0xfd, 0x03, 0x57, 0x02, 0x60, 0xf3, 0x03, 0xa4, 0xf3, 0x00, 0xbc, 0x0a, 0x00, 0x90, 0xa4, 0xff, 0xac, 0x07, 0xfe, 0xad, 0xe8, 0xfe, 0xcd, 0x04, 0x00, 0x14, 0xee, 0x00, 0xb5, 0xf3, 0x00, 0x0c, 0x44, 0x00, 0xb0, 0x1b, 0x00, 0x70, 0x2d, 0x00, 0xe2, 0x25, 0x00, 0xa1, 0x7c, 0x00, 0x9d, 0x9e, 0xff, 0xe2, 0x6a, 0x00, 0x95, 0x52, 0x02, 0x06, 0xf7, 0xfe, 0x7b, 0x4e, 0xfe, 0x41, 0x7c, 0xff, 0xf3, 0xe6, 0xfe, 0x81, 0x3c, 0x00, 0x47, 0xb9, 0x00, 0xcc, 0x92, 0xff, 0xcf, 0xe2, 0xfe, 0x60, 0x87, 0x0c, 0xae, 0xfb, 0x16, 0xd4, 0x66, 0x0b, 0x06, 0xd6, 0xfe, 0x28, 0xef, 0xfa, 0xfb, 0xcb, 0xfc, 0x41, 0xda, 0x02, 0xbe, 0x6b, 0x04, 0x2d, 0x0d, 0x01, 0x2b, 0xd5, 0xff, 0x71, 0x73, 0xff, 0x5f, 0xf2, 0xfd, 0x61, 0x78, 0xfe, 0x71, 0x79, 0xff, 0xc1, 0x9f, 0x00, 0xe8, 0xc2, 0x00, 0x9b, 0x29, 0x00, 0x73, 0x81, 0x00, 0x33, 0xb0, 0x00, 0x17, 0x1b, 0x00, 0xd4, 0x46, 0x00, 0x5a, 0xe3, 0xff, 0x3f, 0xb8, 0xff, 0x3f, 0x1b, 0x02, 0x12, 0xcc, 0xff, 0x66, 0xc6, 0xfd, 0x76, 0x15, 0xff, 0x2c, 0x2f, 0xff, 0xe1, 0x64, 0x00, 0x30, 0xc2, 0x00, 0xbc, 0xc4, 0xff, 0x2e, 0x13, 0xff, 0x53, 0xe8, 0x0c, 0x1f, 0x64, 0x18, 0xa4, 0x92, 0x0c, 0x10, 0xf3, 0xfd, 0xbc, 0xaa, 0xf9, 0xfe, 0xc0, 0xfc, 0xb3, 0x29, 0x03, 0xb2, 0x0a, 0x05, 0x81, 0x25, 0x01, 0x8f, 0x12, 0xff, 0xb6, 0x9a, 0xff, 0xd6, 0x0a, 0xfe, 0x9c, 0x10, 0xfe, 0xc2, 0x65, 0xff, 0xc0, 0x38, 0x00, 0xa8, 0x70, 0x00, 0x63, 0xb3, 0xff, 0x8b, 0x06, 0x00, 0x42, 0x04, 0x01, 0xa4, 0x40, 0x00, 0x66, 0x67, 0x00, 0x8a, 0x84, 0x00, 0x72, 0xf6, 0xfe, 0x39, 0x66, 0x01, 0x44, 0xb8, 0x00, 0x54, 0xb2, 0xfd, 0xca, 0x9e, 0xfe, 0xda, 0x42, 0xff, 0x3e, 0x24, 0x00, 0x7f, 0xd5, 0x00, 0xeb, 0xf7, 0xff, 0x65, 0x06, 0xff, 0x7f, 0x6a, 0x0d, 0xcf, 0x0f, 0x1a, 0xdd, 0x03, 0x0e, 0xeb, 0x11, 0xfd, 0x62, 0x29, 0xf8, 0x74, 0x82, 0xfc, 0x03, 0x89, 0x03, 0x05, 0xb6, 0x05, 0xcb, 0x0f, 0x01, 0x5e, 0x57, 0xfe, 0xbb, 0xa5, 0xff, 0x40, 0x6b, 0xfe, 0x41, 0xcc, 0xfd, 0xae, 0x5c, 0xff, 0xb2, 0x10, 0x00, 0x78, 0x1c, 0x00, 0x0f, 0x92, 0xff, 0x3b, 0x77, 0xff, 0xcf, 0xc9, 0x00, 0x55, 0x7e, 0x00, 0x56, 0xe5, 0xff, 0x0f, 0xe3, 0x00, 0xc5, 0x9f, 0xff, 0xd7, 0x2c, 0x00, 0xc7, 0x35, 0x01, 0x34, 0xd5, 0xfe, 0x1e, 0xd3, 0xfd, 0xde, 0xaa, 0xfe, 0x05, 0x2f, 0x00, 0x6d, 0xcc, 0x00, 0x17, 0xd6, 0xff, 0xa0, 0x27, 0xff, 0x85, 0xa6, 0x0d, 0x8a, 0xe3, 0x1b, 0x49, 0x31, 0x10, 0xd5, 0x12, 0xfc, 0x4f, 0x7a, 0xf6, 0xcc, 0x20, 0xfc, 0x9e, 0xc5, 0x03, 0x9f, 0xa4, 0x06, 0xa4, 0xf4, 0x00, 0xe1, 0x68, 0xfd, 0xfd, 0x6a, 0xff, 0xfe, 0xf2, 0xfe, 0xab, 0xad, 0xfd, 0x08, 0x3e, 0xff, 0x97, 0x35, 0x00, 0x85, 0xc1, 0xff, 0xf7, 0x5c, 0xff, 0x4c, 0x24, 0xff, 0xca, 0x72, 0x00, 0x4a, 0xca, 0x00, 0x87, 0x91, 0xff, 0x58, 0x35, 0x00, 0x67, 0x29, 0x00, 0x24, 0xb0, 0xff, 0xc1, 0xe8, 0x00, 0x59, 0x62, 0x00, 0x06, 0x1e, 0xfe, 0xfc, 0xf2, 0xfd, 0x5a, 0xa4, 0xff, 0xc0, 0x6e, 0x00, 0x71, 0x05, 0x00, 0xe4, 0x30, 0xff, 0xa9, 0x05, 0x0e, 0xf4, 0xeb, 0x1d, 0xd8, 0x8f, 0x12, 0x32, 0xf5, 0xfa, 0xcd, 0x77, 0xf4, 0x4d, 0xd3, 0xfb, 0x89, 0x2c, 0x04, 0x49, 0x9f, 0x07, 0x9a, 0xd6, 0x00, 0xad, 0x40, 0xfc, 0x02, 0x24, 0xff, 0xaf, 0x7c, 0xff, 0xfe, 0x9f, 0xfd, 0x4e, 0x0a, 0xff, 0x7f, 0x64, 0x00, 0x37, 0xb3, 0xff, 0x30, 0x0a, 0xff, 0xac, 0xf1, 0xfe, 0x78, 0x28, 0x00, 0xaa, 0xb2, 0x00, 0x80, 0x0b, 0x00, 0x00, 0x7e, 0xff, 0x69, 0xb0, 0xff, 0x15, 0xda, 0xff, 0xc4, 0xf9, 0xff, 0xde, 0x1f, 0x01, 0x88, 0xe8, 0xff, 0xf7, 0xae, 0xfd, 0x10, 0xbb, 0xfe, 0x5f, 0x6c, 0x00, 0x63, 0xa4, 0xff, 0x32, 0xf7, 0xfe, 0xca, 0x09, 0x10, 0x7b, 0xf5, 0x20, 0xfc, 0xaa, 0x12, 0x25, 0xbd, 0xf8, 0x5c, 0xad, 0xf2, 0x36, 0xc4, 0xfb, 0x9b, 0x88, 0x05, 0xa5, 0x50, 0x08, 0xed, 0xd2, 0xff, 0xb3, 0x1e, 0xfb, 0xe3, 0x03, 0xff, 0x2c, 0xca, 0xff, 0xd4, 0xa3, 0xfd, 0x79, 0xd9, 0xfe, 0x08, 0x6c, 0x00, 0xe1, 0xaa, 0xff, 0xff, 0xa9, 0xfe, 0xcf, 0xd1, 0xfe, 0xc4, 0xff, 0xff, 0xc5, 0x78, 0x00, 0xbb, 0x25, 0x00, 0xe2, 0x73, 0xff, 0x15, 0x04, 0xff, 0xa7, 0x7c, 0xff, 0xa5, 0xb2, 0xff, 0x45, 0xc8, 0x00, 0xaf, 0x0e, 0x01, 0x5e, 0xcc, 0xfe, 0x90, 0x09, 0xfe, 0x51, 0xd4, 0xff, 0xb3, 0xc5, 0xff, 0xb2, 0x8d, 0xfe, 0xa9, 0x50, 0x11, 0xa2, 0x94, 0x23, 0xfc, 0x28, 0x14, 0x76, 0x25, 0xf7, 0xfb, 0x71, 0xf0, 0xb4, 0xcb, 0xfb, 0x43, 0x86, 0x06, 0xa7, 0xeb, 0x08, 0xd5, 0x55, 0xff, 0x55, 0xd5, 0xf9, 0x36, 0xb5, 0xfe, 0x38, 0x8b, 0x00, 0xe8, 0x5d, 0xfd, 0x64, 0xb6, 0xfe, 0xf0, 0x9d, 0x00, 0xa9, 0x71, 0xff, 0x4d, 0x82, 0xfe, 0x00, 0xc9, 0xfe, 0x56, 0xc6, 0xff, 0x4f, 0x75, 0x00, 0xce, 0x0c, 0x00, 0x58, 0x79, 0xff, 0xf6, 0xfa, 0xfe, 0x6d, 0x95, 0xfe, 0xbf, 0xa7, 0xff, 0x40, 0x96, 0x00, 0x1a, 0x38, 0x01, 0x7e, 0x4a, 0x00, 0xff, 0x60, 0xfe, 0x3d, 0xc8, 0xfe, 0x3a, 0xce, 0xff, 0x3c, 0xa7, 0xfe, 0x7a, 0x96, 0x12, 0x63, 0xf7, 0x25, 0x94, 0xf6, 0x15, 0x67, 0xda, 0xf5, 0xc3, 0xdf, 0xed, 0xdf, 0xd9, 0xfb, 0xdb, 0x95, 0x07, 0x09, 0x59, 0x09, 0xf8, 0xcc, 0xfe, 0x6a, 0x8d, 0xf8, 0xc8, 0x25, 0xfe, 0x8c, 0x86, 0x01, 0xde, 0x3d, 0xfd, 0xd1, 0x22, 0xfe, 0xd7, 0xdc, 0x00, 0x39, 0x70, 0xff, 0x2b, 0x29, 0xfe, 0xd5, 0xb4, 0xfe, 0x5c, 0xd8, 0xff, 0xa7, 0x20, 0x00, 0x00, 0x2e, 0x00, 0x2f, 0x28, 0xff, 0xd1, 0x27, 0xff, 0x53, 0x31, 0xfe, 0x18, 0xd4, 0xfe, 0x60, 0xdb, 0x00, 0x7c, 0x1d, 0x01, 0xc1, 0xd7, 0x00, 0xe0, 0xb5, 0xff, 0xa3, 0x58, 0xfe, 0x60, 0xc5, 0xfe, 0x13, 0x19, 0xff, 0xeb, 0x3f, 0x15, 0xff, 0xc8, 0x28, 0xed, 0x91, 0x15, 0x36, 0x46, 0xf4, 0xa3, 0x0d, 0xec, 0x02, 0x05, 0xfc, 0x93, 0x47, 0x09, 0xc5, 0x70, 0x09, 0x44, 0x72, 0xfd, 0x7c, 0xa6, 0xf7, 0x36, 0xff, 0xfd, 0xa7, 0x10, 0x02, 0x6d, 0x4f, 0xfd, 0x3d, 0xae, 0xfd, 0x75, 0xfb, 0x00, 0x4f, 0x4e, 0xff, 0xa4, 0x25, 0xfe, 0x12, 0x80, 0xfe, 0x5c, 0x05, 0x00, 0x1d, 0x1a, 0x00, 0x48, 0xd4, 0xff, 0x16, 0x38, 0xff, 0xfb, 0xf6, 0xfe, 0x71, 0x35, 0xfe, 0xaa, 0x62, 0xfe, 0x2f, 0x8d, 0x00, 0xf3, 0x7a, 0x01, 0x32, 0xd3, 0x00, 0xda, 0x74, 0x00, 0x31, 0x5e, 0xff, 0xd0, 0xb5, 0xfd, 0x18, 0x94, 0xfe, 0x0b, 0x83, 0x17, 0xc3, 0x15, 0x2b, 0xd3, 0x6b, 0x15, 0x3d, 0xd6, 0xf3, 0xc8, 0x6a, 0xea, 0x3b, 0xa4, 0xfb, 0xb2, 0xe9, 0x0a, 0x9a, 0x44, 0x09, 0x0e, 0x71, 0xfc, 0xe7, 0xff, 0xf6, 0xc1, 0x6f, 0xfd, 0x6d, 0xa2, 0x02, 0xfc, 0x8e, 0xfd, 0xe3, 0x05, 0xfd, 0xd9, 0x09, 0x01, 0xe0, 0x58, 0xff, 0xa1, 0xf9, 0xfd, 0x02, 0x94, 0xfe, 0xc2, 0x16, 0x00, 0xd7, 0x24, 0x00, 0x16, 0x83, 0xff, 0xb5, 0x23, 0xff, 0x99, 0xda, 0xfe, 0x0f, 0x3f, 0xfe, 0xc2, 0x6c, 0xfe, 0xe7, 0xe3, 0xff, 0xad, 0xaa, 0x01, 0xd0, 0x22, 0x01, 0x92, 0x5a, 0x00, 0xbe, 0x91, 0x00, 0xfa, 0xff, 0xfd, 0x4e, 0x3c, 0xfd, 0xb2, 0xd1, 0x19, 0x6c, 0x28, 0x2d, 0xb1, 0x63, 0x14, 0x9b, 0xdc, 0xf3, 0xab, 0xa3, 0xe9, 0x36, 0xae, 0xfa, 0x5a, 0x39, 0x0c, 0xb9, 0x03, 0x09, 0x7a, 0x57, 0xfb, 0x42, 0x92, 0xf6, 0x76, 0xc7, 0xfc, 0xb0, 0xf3, 0x02, 0x72, 0xbf, 0xfd, 0x8d, 0x56, 0xfc, 0x36, 0xca, 0x00, 0x0d, 0x6d, 0xff, 0x99, 0xcf, 0xfd, 0x09, 0xac, 0xfe, 0x3e, 0x1f, 0x00, 0xb0, 0x22, 0x00, 0xd3, 0x3f, 0xff, 0x14, 0xb4, 0xfe, 0xdc, 0xe5, 0xfe, 0x58, 0x08, 0xfe, 0x87, 0xd0, 0xfe, 0x19, 0x8b, 0xff, 0xf9, 0xf0, 0x00, 0x26, 0xb3, 0x01, 0x2d, 0x36, 0x00, 0xfe, 0xb7, 0x00, 0xf1, 0x3f, 0xff, 0x93, 0x6b, 0xfc, 0x57, 0xfc, 0x1d, 0xe2, 0x34, 0x2f, 0xee, 0xe9, 0x10, 0x85, 0x43, 0xf3, 0x82, 0x50, 0xea, 0x79, 0x6c, 0xfa, 0x6a, 0x2e, 0x0d, 0xea, 0x9a, 0x08, 0x4e, 0xe5, 0xf9, 0x25, 0x49, 0xf6, 0x48, 0xd7, 0xfc, 0x46, 0xf2, 0x02, 0x69, 0xa7, 0xfd, 0xcb, 0x10, 0xfc, 0x1b, 0x7c, 0x00, 0x59, 0x57, 0xff, 0x8e, 0xff, 0xfd, 0xf8, 0xcc, 0xfe, 0x7a, 0x4f, 0x00, 0xa0, 0x45, 0x00, 0x0f, 0xd5, 0xfe, 0xea, 0x76, 0xfe, 0x12, 0xde, 0xfe, 0x37, 0xe5, 0xfd, 0xba, 0x30, 0xff, 0xc3, 0x06, 0x00, 0xbc, 0xec, 0xff, 0xf5, 0xae, 0x01, 0x02, 0xa0, 0x00, 0x66, 0x43, 0x00, 0x8e, 0x4d, 0x00, 0x78, 0xb6, 0xfc, 0x27, 0xee, 0x22, 0x3f, 0x0e, 0x31, 0x84, 0xf8, 0x0b, 0x3d, 0xe1, 0xf2, 0x71, 0xdd, 0xeb, 0x16, 0xd2, 0xfa, 0x73, 0x56, 0x0d, 0x0c, 0x1b, 0x08, 0x50, 0xe9, 0xf8, 0xcb, 0xca, 0xf5, 0xa1, 0x5f, 0xfd, 0xd0, 0x8f, 0x02, 0xd4, 0xb3, 0xfd, 0xb2, 0xc4, 0xfb, 0xc5, 0x46, 0x00, 0x00, 0x3f, 0xff, 0x42, 0x4e, 0xfe, 0x2b, 0x0a, 0xff, 0x67, 0x70, 0x00, 0x9a, 0x9d, 0x00, 0x0b, 0x37, 0xfe, 0xe1, 0x98, 0xfe, 0xa3, 0xad, 0xfe, 0xbd, 0xf3, 0xfd, 0x65, 0x7b, 0xff, 0x32, 0xc3, 0x00, 0x6c, 0x35, 0xff, 0x9e, 0x07, 0x01, 0x2c, 0x15, 0x01, 0xff, 0xe8, 0xff, 0x24, 0xc3, 0x00, 0x37, 0x8c, 0xfd, 0x09, 0xec, 0x27, 0xee, 0x03, 0x33, 0xb5, 0x23, 0x06, 0xb0, 0x30, 0xf2, 0x9e, 0xe7, 0xed, 0xae, 0x7c, 0xfb, 0x92, 0xab, 0x0c, 0xe7, 0x91, 0x07, 0xb0, 0x61, 0xf8, 0xfe, 0xeb, 0xf4, 0xb5, 0xef, 0xfd, 0x17, 0xbf, 0x01, 0x82, 0xe1, 0xfd, 0x57, 0x7a, 0xfb, 0x39, 0xfa, 0xff, 0x23, 0x4b, 0xff, 0x9b, 0x71, 0xfe, 0x86, 0x51, 0xff, 0x40, 0x52, 0x00, 0x0d, 0xf3, 0x00, 0x0d, 0x89, 0xfd, 0x6c, 0xef, 0xfe, 0xaa, 0x5f, 0xfe, 0xc8, 0x03, 0xfe, 0x8a, 0xce, 0xff, 0x5f, 0x19, 0x01, 0x98, 0xd4, 0xfe, 0x28, 0xfa, 0xff, 0x6c, 0x37, 0x01, 0xb1, 0xcb, 0xff, 0xc4, 0xcc, 0x00, 0x44, 0x6d, 0xfe, 0x6a, 0x2a, 0x2e, 0xfa, 0x30, 0x34, 0xd7, 0x76, 0xff, 0x88, 0x49, 0xf1, 0x3a, 0x06, 0xf0, 0x4c, 0x14, 0xfd, 0x6f, 0x8b, 0x0b, 0x5c, 0x18, 0x07, 0x84, 0xcd, 0xf7, 0x21, 0x2f, 0xf4, 0x5d, 0x68, 0xfe, 0xce, 0xd0, 0x00, 0x2a, 0x2e, 0xfe, 0xef, 0x72, 0xfb, 0x17, 0xf4, 0xff, 0x86, 0x40, 0xff, 0x73, 0xc6, 0xfe, 0xc1, 0x5c, 0xff, 0xbe, 0x54, 0x00, 0x1d, 0x15, 0x01, 0x83, 0x2d, 0xfd, 0x17, 0x5a, 0xff, 0xf8, 0x1c, 0xfe, 0xf8, 0x44, 0xfe, 0x00, 0x2a, 0x00, 0xf6, 0xf9, 0x00, 0x8a, 0x79, 0xfe, 0x68, 0x49, 0xff, 0x99, 0xd6, 0x00, 0x20, 0xeb, 0xff, 0xfa, 0x02, 0x01, 0xe9, 0x26, 0xff, 0xfe, 0xa8, 0x34, 0x3d, 0xf3, 0x34, 0x51, 0xe2, 0xf8, 0xe7, 0x42, 0xf0, 0xdd, 0xa4, 0xf1, 0x50, 0x0a, 0xff, 0xa4, 0x71, 0x0a, 0x76, 0xbb, 0x06, 0xb3, 0x35, 0xf7, 0x72, 0x56, 0xf3, 0x61, 0x96, 0xfe, 0x38, 0xd8, 0xff, 0x96, 0xd9, 0xfe, 0xc7, 0xd3, 0xfb, 0x7e, 0xe8, 0xff, 0x3a, 0x48, 0xff, 0x85, 0x0d, 0xff, 0x05, 0x0d, 0xff, 0x95, 0x8a, 0x00, 0x36, 0x34, 0x01, 0x5b, 0x1c, 0xfd, 0x32, 0xaf, 0xff, 0xa7, 0xf1, 0xfd, 0x8c, 0xad, 0xfe, 0x64, 0x22, 0x00, 0xcd, 0x7d, 0x00, 0x9e, 0x4c, 0xfe, 0x0e, 0xd6, 0xfe, 0x1d, 0x46, 0x00, 0xf6, 0x51, 0x00, 0x18, 0x4d, 0x01, 0x67, 0x9a, 0xff, 0xa2, 0x50, 0x3a, 0x54, 0xd6, 0x35, 0xcb, 0xf7, 0xf2, 0xa4, 0x61, 0xef, 0x4e, 0x46, 0xf2, 0x61, 0x1a, 0x01, 0x32, 0xb0, 0x09, 0x99, 0x5b, 0x06, 0xbc, 0x9e, 0xf6, 0x26, 0x37, 0xf2, 0x19, 0xad, 0xfe, 0x1a, 0xeb, 0xfe, 0x1a, 0x52, 0x00, 0x4f, 0x12, 0xfc, 0xb0, 0xe2, 0xff, 0x8f, 0x73, 0xff, 0x09, 0xb5, 0xfe, 0x86, 0xe7, 0xfe, 0x57, 0xde, 0x00, 0x3a, 0x7c, 0x01, 0xfd, 0x19, 0xfd, 0xa8, 0xfb, 0xff, 0x26, 0xc6, 0xfd, 0x71, 0xa3, 0xfe, 0xed, 0xd6, 0xff, 0x3d, 0x24, 0x00, 0x8f, 0x2d, 0xfe, 0x26, 0x9b, 0xfe, 0x1f, 0x12, 0x00, 0x9d, 0xa7, 0x00, 0x27, 0x18, 0x01, 0x5f, 0x52, 0x00, 0x58, 0x43, 0x3f, 0x8b, 0xca, 0x36, 0xdb, 0x19, 0xee, 0xd2, 0x66, 0xee, 0xa3, 0x9c, 0xf1, 0x69, 0x36, 0x03, 0xa0, 0x7f, 0x09, 0x2a, 0xae, 0x05, 0xf7, 0xf1, 0xf5, 0xe8, 0xf6, 0xf0, 0x11, 0xdf, 0xfe, 0x26, 0x77, 0xfe, 0x59, 0x3e, 0x02, 0x7f, 0xec, 0xfb, 0xdb, 0x49, 0x00, 0x3a, 0x16, 0xff, 0x7b, 0x2b, 0xfe, 0xcf, 0x51, 0xff, 0xd7, 0x11, 0x01, 0xe2, 0xf5, 0x01, 0xd9, 0x1d, 0xfd, 0xff, 0x2e, 0x00, 0xf5, 0xcd, 0xfc, 0xcb, 0x7a, 0xfe, 0x95, 0xcd, 0xff, 0x88, 0xc4, 0xff, 0xea, 0x30, 0xfe, 0xbe, 0x26, 0xff, 0xdd, 0xc7, 0xff, 0x32, 0x5f, 0x00, 0xcf, 0x53, 0x01, 0x57, 0xce, 0x00, 0x53, 0x66, 0x43, 0x3f, 0x91, 0x37, 0x7d, 0xb1, 0xea, 0x47, 0x33, 0xed, 0x45, 0xef, 0xef, 0x3d, 0xf8, 0x04, 0xb3, 0xca, 0x09, 0xd1, 0xad, 0x04, 0x79, 0x02, 0xf5, 0x5c, 0x5c, 0xf0, 0xdb, 0x70, 0xff, 0xec, 0x33, 0xfe, 0xf8, 0x37, 0x04, 0x60, 0xc3, 0xfb, 0x34, 0x51, 0x00, 0x56, 0x8d, 0xfe, 0xa4, 0x35, 0xfe, 0x48, 0xed, 0xff, 0xa6, 0x0c, 0x01, 0x58, 0x9b, 0x02, 0x04, 0xf1, 0xfc, 0x98, 0x4b, 0xff, 0x30, 0xf2, 0xfb, 0xd1, 0xcd, 0xfe, 0x5b, 0x75, 0xff, 0x6f, 0xfe, 0xff, 0xa6, 0xba, 0xfe, 0x4a, 0x67, 0xff, 0x28, 0x3c, 0xff, 0x5b, 0x87, 0x00, 0x2e, 0x4b, 0x01, 0xf5, 0x7e, 0x00, 0x91, 0xb1, 0x46, 0x3b, 0xaa, 0x37, 0xaa, 0xa4, 0xe8, 0xb1, 0x66, 0xec, 0x21, 0x8e, 0xed, 0x74, 0x07, 0x06, 0x60, 0x80, 0x0a, 0x20, 0x1b, 0x03, 0x68, 0x47, 0xf4, 0x1c, 0x73, 0xf1, 0xe3, 0x51, 0xff, 0xcd, 0x6a, 0xfe, 0x9d, 0xfc, 0x05, 0xf1, 0x2c, 0xfb, 0xa5, 0x06, 0x00, 0x01, 0xb9, 0xfe, 0xd4, 0xb2, 0xfe, 0x54, 0x3e, 0x00, 0x9d, 0x26, 0x01, 0x42, 0x60, 0x02, 0xaa, 0x09, 0xfc, 0x88, 0xd1, 0xfe, 0x47, 0x97, 0xfb, 0x40, 0xcb, 0xfe, 0x63, 0x18, 0x00, 0xda, 0x76, 0x00, 0x62, 0xa5, 0xfe, 0x40, 0x9c, 0xff, 0x2c, 0x65, 0xff, 0xd8, 0xf4, 0xff, 0x45, 0xee, 0x00, 0x2c, 0xee, 0x00, 0xc1, 0x39, 0x48, 0x45, 0xdc, 0x37, 0x9d, 0x6d, 0xe7, 0x30, 0xc6, 0xec, 0x5f, 0x54, 0xea, 0xda, 0x71, 0x06, 0x04, 0x73, 0x0b, 0x5d, 0x2e, 0x01, 0x39, 0x14, 0xf5, 0xe0, 0x94, 0xf2, 0x72, 0x44, 0xff, 0x31, 0xc6, 0xfe, 0xc7, 0xf4, 0x06, 0x16, 0x5c, 0xfa, 0x81, 0xff, 0xff, 0x08, 0xd5, 0xff, 0x9e, 0xc2, 0xfe, 0x8c, 0x71, 0x00, 0xc9, 0xe0, 0xff, 0xa2, 0xbf, 0x01, 0xa5, 0x08, 0xfc, 0x82, 0x78, 0xfe, 0xee, 0x6d, 0xfb, 0xf8, 0xbc, 0xff, 0xa0, 0xcb, 0x00, 0x26, 0xef, 0xff, 0x6f, 0x35, 0xff, 0x51, 0xcf, 0xff, 0xd6, 0xe8, 0xfe, 0xbd, 0x89, 0xff, 0xf4, 0x25, 0x01, 0xf2, 0xcd, 0x00, 0x9f, 0xf4, 0x49, 0x94, 0xf8, 0x35, 0x10, 0x6b, 0xe8, 0x9f, 0xe0, 0xec, 0x81, 0xba, 0xe5, 0xe0, 0x66, 0x06, 0x2e, 0x7c, 0x0c, 0x93, 0x0d, 0x01, 0x60, 0x6c, 0xf5, 0x22, 0x6a, 0xf4, 0x59, 0xb0, 0xfe, 0x38, 0xaf, 0xfe, 0x50, 0x93, 0x07, 0xdd, 0x04, 0xfa, 0x82, 0xf7, 0x00, 0xe1, 0x8f, 0x00, 0xdd, 0x33, 0xfe, 0x7b, 0x16, 0xff, 0x06, 0x6b, 0xff, 0x53, 0x79, 0x01, 0x01, 0x42, 0xfc, 0x37, 0x96, 0xfe, 0x04, 0xef, 0xfb, 0x64, 0x2a, 0x00, 0xa7, 0x9d, 0x00, 0x26, 0x09, 0x00, 0xfb, 0x60, 0xff, 0x5d, 0xa6, 0xff, 0x54, 0xf0, 0xfe, 0x12, 0x4a, 0xff, 0x30, 0x18, 0x01, 0x25, 0xb6, 0x00, 0x32, 0x2e, 0x49, 0xc1, 0x1e, 0x35, 0x7e, 0x16, 0xea, 0xd8, 0x78, 0xed, 0xe5, 0x94, 0xe0, 0x5d, 0x8b, 0x05, 0x78, 0x33, 0x0f, 0x14, 0x95, 0x00, 0xd9, 0x3d, 0xf6, 0xe6, 0x62, 0xf6, 0x58, 0x7d, 0xfd, 0x09, 0x00, 0xfe, 0x7c, 0xf0, 0x08, 0x6a, 0x4d, 0xfa, 0x00, 0x53, 0x01, 0x48, 0x5a, 0x00, 0x0d, 0x38, 0xfc, 0x5a, 0x51, 0xff, 0x81, 0x21, 0xff, 0x02, 0x38, 0x01, 0xcb, 0x44, 0xfd, 0xf7, 0xfc, 0xfe, 0x16, 0xd9, 0xfb, 0xc7, 0x47, 0x00, 0x5c, 0x92, 0x00, 0xf0, 0xc3, 0xff, 0x97, 0xb7, 0xff, 0x9f, 0x84, 0xff, 0x0a, 0x04, 0xff, 0xbc, 0xef, 0xfe, 0xbe, 0x55, 0x01, 0xcc, 0x77, 0x00, 0xca, 0x36, 0x49, 0x9c, 0x09, 0x31, 0xe9, 0xa3, 0xec, 0x2a, 0x15, 0xee, 0x6c, 0x13, 0xdc, 0xcc, 0xc9, 0x06, 0x3a, 0x83, 0x10, 0x1b, 0x60, 0x00, 0xb1, 0x41, 0xf7, 0x14, 0x1a, 0xf8, 0x0b, 0xaf, 0xfb, 0x02, 0xf0, 0xfe, 0x77, 0xfa, 0x09, 0x3b, 0x7b, 0xf9, 0xb3, 0x5d, 0x01, 0xb8, 0xda, 0xfe, 0x97, 0xf9, 0xfb, 0x70, 0x03, 0x00, 0x20, 0xbf, 0xfe, 0x50, 0x97, 0x01, 0x6c, 0x6f, 0xfe, 0x7e, 0x84, 0xfe, 0x1f, 0xec, 0xfb, 0xf6, 0x6d, 0x00, 0xf1, 0x4a, 0x00, 0xf5, 0xc1, 0xff, 0x16, 0xc2, 0xff, 0xcb, 0x93, 0xff, 0x17, 0x0c, 0xff, 0x9d, 0xdf, 0xfe, 0x72, 0x8b, 0x01, 0x1b, 0xfa, 0xff, 0xed, 0xcd, 0x46, 0xd6, 0xe5, 0x2d, 0x12, 0x5e, 0xef, 0x7f, 0x47, 0xef, 0x93, 0xf3, 0xd9, 0x56, 0xd9, 0x06, 0xba, 0x43, 0x11, 0x09, 0x22, 0x01, 0x1c, 0xb8, 0xf7, 0x4f, 0x7b, 0xf9, 0x87, 0x5d, 0xfb, 0xf6, 0x1d, 0xff, 0xff, 0xf1, 0x09, 0x16, 0xae, 0xf8, 0x93, 0x78, 0x00, 0xe1, 0xf3, 0xfe, 0x40, 0x6e, 0xfc, 0x5c, 0x28, 0x00, 0x0f, 0x55, 0xff, 0x81, 0xd9, 0x01, 0xae, 0xab, 0xfe, 0xb2, 0x31, 0xfe, 0xea, 0x54, 0xfc, 0x8b, 0x8f, 0x00, 0xe4, 0xb0, 0xff, 0x7c, 0xde, 0xff, 0xb6, 0xf1, 0xff, 0xf2, 0xa1, 0xff, 0x09, 0x39, 0xff, 0x5d, 0xbd, 0xfe, 0xfb, 0xaa, 0x01, 0x76, 0xea, 0xff, 0x3c, 0xa7, 0x41, 0x53, 0x21, 0x2b, 0x57, 0x75, 0xf2, 0x7e, 0x02, 0xf2, 0x3f, 0xdb, 0xd9, 0x2b, 0x82, 0x05, 0x5a, 0xb6, 0x11, 0xe3, 0x4a, 0x01, 0x49, 0x12, 0xf9, 0x57, 0xf1, 0xfa, 0xed, 0x51, 0xfa, 0xf4, 0x08, 0xff, 0xff, 0x43, 0x09, 0x42, 0xa9, 0xf7, 0x24, 0xcf, 0x00, 0xbd, 0x69, 0xff, 0x28, 0x3f, 0xfc, 0x7a, 0x86, 0x01, 0x26, 0x37, 0xff, 0x8b, 0x52, 0x01, 0x6b, 0xfa, 0xfe, 0x5f, 0x49, 0xfe, 0xd0, 0xf1, 0xfc, 0xba, 0xc2, 0xff, 0x31, 0xb5, 0xff, 0xf6, 0x02, 0x00, 0xe6, 0xf3, 0xff, 0x9b, 0xc5, 0xff, 0x3f, 0x24, 0xff, 0x47, 0xcf, 0xfe, 0x67, 0xe5, 0x01, 0x32, 0x89, 0xff, 0x53, 0xc0, 0x3b, 0x9e, 0xec, 0x26, 0x5e, 0x33, 0xf7, 0x5b, 0xf6, 0xf4, 0x6a, 0x70, 0xdb, 0xf0, 0xc9, 0x03, 0x0b, 0x14, 0x10, 0x75, 0x28, 0x03, 0xc3, 0x5f, 0xfa, 0x6c, 0xff, 0xfa, 0x39, 0x0f, 0xfa, 0xc6, 0xa9, 0xfe, 0xd3, 0xb1, 0x07, 0x75, 0x85, 0xf8, 0x85, 0xf0, 0x00, 0x57, 0x47, 0xff, 0xef, 0xa6, 0xfd, 0x11, 0xb4, 0x01, 0x97, 0xa1, 0xfe, 0xd0, 0x06, 0x01, 0xbc, 0xbd, 0xff, 0xd7, 0x3c, 0xfe, 0x35, 0xde, 0xfc, 0x67, 0xd1, 0xff, 0xdf, 0x9d, 0xff, 0x8b, 0xf7, 0xff, 0x88, 0x0f, 0x00, 0x99, 0xad, 0xff, 0xa5, 0x61, 0xff, 0x55, 0xf4, 0xfe, 0x76, 0xaa, 0x01, 0xf6, 0x9c, 0xff, 0x47, 0xbc, 0x34, 0x91, 0xf4, 0x22, 0x60, 0x3e, 0xfc, 0xbd, 0x48, 0xf8, 0x89, 0x54, 0xde, 0x95, 0x19, 0x01, 0xf4, 0x2f, 0x0f, 0xd8, 0x7a, 0x04, 0x52, 0x7c, 0xfa, 0xdb, 0x13, 0xfc, 0xee, 0x52, 0xf9, 0xcf, 0x46, 0xfe, 0xb0, 0x4f, 0x07, 0x9f, 0xeb, 0xf8, 0xeb, 0x08, 0x01, 0x6b, 0x1c, 0x00, 0xa3, 0x44, 0xfe, 0xc0, 0x40, 0x01, 0x4d, 0x61, 0xfe, 0x89, 0x71, 0x01, 0x8c, 0xd9, 0xff, 0x65, 0xd1, 0xfd, 0x7a, 0xc4, 0xfd, 0xfa, 0xad, 0xff, 0x01, 0x62, 0xff, 0xec, 0x16, 0x00, 0x61, 0xf9, 0xff, 0x4d, 0xd8, 0xff, 0x6d, 0x74, 0xff, 0xcd, 0xe7, 0xfe, 0xd6, 0xf2, 0x01, 0x7a, 0xdd, 0xff, 0x90, 0xe9, 0x29, 0xe1, 0x02, 0x1b, 0x26, 0x3d, 0xf7, 0x4c, 0xa0, 0xfc, 0x37, 0xa4, 0xf4, 0x32, 0xdf, 0x08, 0x33, 0x3f, 0x05, 0x6d, 0x69, 0xfa, 0x09, 0xd2, 0xfa, 0x2a, 0x88, 0x00, 0x78, 0x96, 0x00, 0x14, 0x2c, 0xff, 0xc6, 0x95, 0x03, 0x0a, 0x32, 0xfa, 0x6f, 0x25, 0x00, 0xdf, 0xb2, 0xff, 0x76, 0x03, 0xfd, 0x84, 0x64, 0x00, 0x93, 0xda, 0xfe, 0x28, 0x27, 0x00, 0x67, 0xa1, 0xff, 0x00, 0xa0, 0xfe, 0x77, 0x3c, 0xfe, 0x86, 0x20, 0x02, 0x99, 0xc8, 0xff, 0x13, 0x0a, 0x00, 0x3a, 0x51, 0x00, 0x91, 0x38, 0xfe, 0x28, 0xd2, 0xff, 0x22, 0xb8, 0xfe, 0x71, 0x54, 0xff, 0xcc, 0x10, 0x00, 0x8e, 0xe2, 0x23, 0x4a, 0x78, 0x1a, 0x25, 0xe9, 0xfa, 0x88, 0x72, 0xfc, 0x1a, 0x3f, 0xf5, 0x58, 0x11, 0x07, 0x52, 0x42, 0x06, 0xb8, 0x38, 0xfc, 0xa1, 0x44, 0xfb, 0xca, 0x01, 0x00, 0x6b, 0xdd, 0xff, 0x72, 0x30, 0xff, 0x2d, 0x29, 0x03, 0x4f, 0x32, 0xfb, 0x78, 0xe9, 0xff, 0x8f, 0x16, 0x00, 0x2e, 0xb6, 0xfd, 0xc9, 0x28, 0x00, 0x79, 0x54, 0xff, 0x0f, 0x2d, 0x00, 0xb8, 0xa1, 0xff, 0x1a, 0xb9, 0xfe, 0x89, 0x23, 0xfe, 0xb7, 0xac, 0x01, 0x99, 0x15, 0x00, 0x4b, 0x0a, 0x00, 0x64, 0xac, 0x00, 0x8c, 0xb1, 0xfe, 0x94, 0xa8, 0xff, 0x33, 0xf6, 0xfe, 0x3e, 0x55, 0xff, 0x7c, 0xd2, 0xff, 0xb0, 0xd9, 0x1e, 0xf7, 0x60, 0x19, 0x8b, 0x29, 0xfe, 0x83, 0x9e, 0xfc, 0xf5, 0x64, 0xf6, 0xcc, 0xa4, 0x05, 0x76, 0x90, 0x06, 0xc9, 0xa1, 0xfd, 0x0c, 0x15, 0xfc, 0xbb, 0x8b, 0xff, 0x13, 0x72, 0xff, 0x69, 0x8d, 0xff, 0x7d, 0xa7, 0x02, 0xa1, 0x41, 0xfc, 0x80, 0xe6, 0xff, 0x49, 0x76, 0x00, 0xf5, 0x5e, 0xfe, 0x71, 0x22, 0x00, 0x7b, 0xcd, 0xff, 0x37, 0x41, 0x00, 0x8e, 0xc0, 0xff, 0x7d, 0xf7, 0xfe, 0x3f, 0x54, 0xfe, 0x1d, 0x55, 0x01, 0x56, 0x7d, 0x00, 0xfb, 0x27, 0x00, 0x2e, 0xb3, 0x00, 0xca, 0x0d, 0xff, 0xb7, 0x99, 0xff, 0x11, 0x37, 0xff, 0x96, 0x43, 0xff, 0x6b, 0xbf, 0xff, 0x28, 0xce, 0x1a, 0xea, 0x6d, 0x18, 0xa5, 0x3c, 0x00, 0x55, 0xd4, 0xfc, 0xd5, 0x9c, 0xf7, 0x0e, 0xa3, 0x04, 0x44, 0x83, 0x06, 0x29, 0xcd, 0xfe, 0x28, 0xea, 0xfc, 0xb5, 0x36, 0xff, 0x42, 0x70, 0xff, 0x03, 0xcd, 0xff, 0xc5, 0x30, 0x02, 0xef, 0x2c, 0xfd, 0xfc, 0x23, 0x00, 0x60, 0xb7, 0x00, 0x80, 0xe5, 0xfe, 0xbc, 0x34, 0x00, 0xda, 0x2f, 0x00, 0x3c, 0x6f, 0x00, 0x60, 0xd5, 0xff, 0xfb, 0x60, 0xff, 0xda, 0xaf, 0xfe, 0x89, 0x0d, 0x01, 0xc3, 0xa5, 0x00, 0x54, 0x2a, 0x00, 0x7d, 0x9a, 0x00, 0x7a, 0x54, 0xff, 0xf8, 0x97, 0xff, 0x5c, 0x53, 0xff, 0x79, 0x6a, 0xff, 0x99, 0xbd, 0xff, 0xce, 0xc7, 0x17, 0xfa, 0x8a, 0x17, 0x33, 0x5b, 0x01, 0x23, 0xc6, 0xfc, 0xa4, 0xc9, 0xf8, 0x05, 0xe5, 0x03, 0xf9, 0x25, 0x06, 0x1e, 0xa5, 0xff, 0x77, 0x8f, 0xfd, 0x98, 0x1c, 0xff, 0xef, 0x83, 0xff, 0x09, 0xd3, 0xff, 0x0e, 0xcd, 0x01, 0x1d, 0xf9, 0xfd, 0x19, 0x56, 0x00, 0xea, 0xbf, 0x00, 0x10, 0x4b, 0xff, 0x38, 0x42, 0x00, 0x20, 0x60, 0x00, 0x5c, 0x9d, 0x00, 0x5c, 0xf0, 0xff, 0xbe, 0xad, 0xff, 0x68, 0xdd, 0xfe, 0x72, 0x95, 0x00, 0x1f, 0x9a, 0x00, 0xa2, 0x1e, 0x00, 0x82, 0x47, 0x00, 0xdf, 0x76, 0xff, 0x4c, 0x9e, 0xff, 0x9f, 0x79, 0xff, 0x97, 0x6b, 0xff, 0xf1, 0x67, 0xff, 0xe7, 0x95, 0x15, 0xcd, 0xb3, 0x16, 0x6c, 0xeb, 0x01, 0xf6, 0xbb, 0xfc, 0x1e, 0xf1, 0xf9, 0x60, 0x59, 0x03, 0x8e, 0xb4, 0x05, 0x3f, 0x5c, 0x00, 0x50, 0x16, 0xfe, 0x73, 0x3d, 0xff, 0x9d, 0x9f, 0xff, 0x68, 0xdd, 0xff, 0x05, 0xb3, 0x01, 0xe4, 0x89, 0xfe, 0xb3, 0x83, 0x00, 0x8f, 0xcc, 0x00, 0xa4, 0x98, 0xff, 0x3f, 0x4f, 0x00, 0x87, 0x96, 0x00, 0x12, 0xbe, 0x00, 0xe5, 0xe1, 0xff, 0x92, 0xd6, 0xff, 0x01, 0xf6, 0xfe, 0x8e, 0x1c, 0x00, 0x5e, 0x79, 0x00, 0xd9, 0x0a, 0x00, 0x6a, 0x0a, 0x00, 0x44, 0xb5, 0xff, 0x21, 0xac, 0xff, 0xa9, 0x6b, 0xff, 0x97, 0x63, 0xff, 0x13, 0x7a, 0xff, 0x78, 0xed, 0x13, 0xde, 0x2d, 0x16, 0x2a, 0x2c, 0x02, 0x45, 0xb5, 0xfc, 0xe8, 0xee, 0xfa, 0xf0, 0xf4, 0x02, 0x7e, 0x5f, 0x05, 0xd5, 0x01, 0x01, 0x5d, 0x70, 0xfe, 0x5c, 0x86, 0xff, 0x9e, 0x00, 0x00, 0xf1, 0xc6, 0xff, 0xcd, 0xd0, 0x01, 0x70, 0xf7, 0xfe, 0x35, 0x92, 0x00, 0xaf, 0xf3, 0x00, 0xd3, 0xd7, 0xff, 0x00, 0x55, 0x00, 0x91, 0x91, 0x00, 0xb9, 0xe1, 0x00, 0xee, 0xc6, 0xff, 0xf4, 0xcf, 0xff, 0x3e, 0x21, 0xff, 0x86, 0xae, 0xff, 0x38, 0x55, 0x00, 0x2e, 0x41, 0x00, 0x34, 0xe9, 0xff, 0xc8, 0xd1, 0xff, 0x65, 0xb0, 0xff, 0xf9, 0x91, 0xff, 0xc7, 0x7a, 0xff, 0x7d, 0x2f, 0xff, 0xe8, 0xeb, 0x12, 0xa6, 0xc0, 0x15, 0xe0, 0x2c, 0x02, 0x86, 0x98, 0xfc, 0xa5, 0xd3, 0xfb, 0x96, 0xd1, 0x02, 0x3f, 0x0b, 0x05, 0x7c, 0x71, 0x01, 0xb7, 0x9e, 0xfe, 0xf1, 0xc5, 0xff, 0xe0, 0xa1, 0x00, 0xdd, 0x88, 0xff, 0x18, 0xcc, 0x01, 0xdd, 0x76, 0xff, 0x2c, 0x61, 0x00, 0x05, 0x15, 0x01, 0x0e, 0xf2, 0xff, 0xd2, 0x15, 0x00, 0xbf, 0x83, 0x00, 0x1e, 0xec, 0x00, 0xc6, 0xb7, 0xff, 0x72, 0x8e, 0xff, 0x30, 0x3b, 0xff, 0xbc, 0xa5, 0xff, 0xe7, 0x1b, 0x00, 0x9b, 0x63, 0x00, 0x9c, 0xd5, 0xff, 0x82, 0xc9, 0xff, 0xba, 0xf6, 0xff, 0x1b, 0x66, 0xff, 0xe6, 0xa2, 0xff, 0xe1, 0x25, 0x00, 0xd4, 0xed, 0x11, 0x8c, 0xbd, 0x15, 0x6b, 0x52, 0x02, 0xc0, 0x8f, 0xfc, 0x43, 0x9e, 0xfc, 0x14, 0xc9, 0x02, 0xf9, 0xc9, 0x04, 0x55, 0x8f, 0x01, 0x29, 0xec, 0xfe, 0x8a, 0xab, 0xff, 0x2c, 0x4b, 0x01, 0x1d, 0xb7, 0xff, 0x99, 0x2f, 0x01, 0x3e, 0x15, 0x00, 0x53, 0x55, 0x00, 0x2f, 0x98, 0x00, 0x9e, 0x2e, 0x00, 0x53, 0x04, 0x00, 0x1d, 0x32, 0x00, 0x86, 0xe6, 0x00, 0xfc, 0xdc, 0xff, 0x31, 0x5b, 0xff, 0x6c, 0x27, 0xff, 0x8d, 0xff, 0xff, 0x8a, 0xd2, 0xff, 0x98, 0x32, 0x00, 0x49, 0x26, 0x00, 0xf2, 0xc9, 0xff, 0x65, 0xc0, 0xff, 0x6c, 0x21, 0x00, 0x0e, 0x3b, 0x00, 0x30, 0x72, 0xff, 0xa4, 0x89, 0x11, 0x32, 0x87, 0x15, 0xae, 0x85, 0x02, 0x25, 0x97, 0xfc, 0x72, 0x4b, 0xfd, 0x20, 0xf6, 0x02, 0x68, 0x8c, 0x04, 0x69, 0x69, 0x01, 0x6f, 0xd8, 0xfe, 0x4e, 0xd4, 0xff, 0x8f, 0x46, 0x01, 0x6a, 0x20, 0x00, 0x82, 0x0c, 0x01, 0x5a, 0xbe, 0xff, 0x32, 0xba, 0x00, 0xfc, 0x46, 0x00, 0xde, 0xc1, 0xff, 0x2d, 0x4f, 0x00, 0x9c, 0x18, 0x00, 0x5b, 0x7f, 0x00, 0x6d, 0xf2, 0xff, 0x86, 0xb9, 0xff, 0xc8, 0xf4, 0xfe, 0xb1, 0xc5, 0xff, 0xbe, 0xf9, 0xff, 0x05, 0x26, 0x00, 0x52, 0x01, 0x00, 0xbb, 0xa9, 0xff, 0x61, 0xa8, 0x00, 0x6d, 0x6a, 0x00, 0xcd, 0x82, 0xff, 0xcf, 0x9c, 0xff, 0xfa, 0x40, 0x11, 0xe5, 0xc0, 0x15, 0x85, 0xa8, 0x02, 0xdb, 0x8e, 0xfc, 0xe5, 0xd2, 0xfd, 0x95, 0x20, 0x03, 0x8f, 0x60, 0x04, 0xb1, 0x39, 0x01, 0x8e, 0x83, 0xfe, 0xbf, 0x9c, 0xff, 0x85, 0x5a, 0x01, 0xf1, 0xe1, 0xff, 0x1e, 0x38, 0x01, 0xa5, 0xe2, 0xff, 0x13, 0x39, 0x00, 0x74, 0x87, 0x00, 0x40, 0x8d, 0xff, 0xe0, 0xcb, 0xff, 0x79, 0x69, 0x00, 0x72, 0x62, 0x00, 0xba, 0x9b, 0xff, 0xa4, 0xf2, 0xff, 0x98, 0x3b, 0xff, 0x41, 0x3a, 0xff, 0x71, 0xd7, 0xff, 0xa9, 0x70, 0x00, 0x71, 0x71, 0xff, 0xce, 0x3d, 0x00, 0x1d, 0x36, 0x01, 0xf6, 0x9d, 0xff, 0x52, 0xbd, 0xff, 0x39, 0x8a, 0xff, 0x7d, 0x73, 0x11, 0x5f, 0x3c, 0x16, 0xfe, 0x98, 0x02, 0x04, 0x4f, 0xfc, 0x84, 0x55, 0xfe, 0x73, 0x9c, 0x03, 0x1f, 0x73, 0x04, 0x5f, 0xfe, 0x00, 0x83, 0x53, 0xfe, 0x5a, 0x3b, 0xff, 0xfd, 0x24, 0x01, 0xba, 0xea, 0xff, 0x37, 0xeb, 0x00, 0x7f, 0x29, 0x00, 0x45, 0x9f, 0x00, 0x7d, 0x39, 0x00, 0x99, 0x8c, 0xff, 0x48, 0x06, 0x00, 0xbc, 0xf3, 0xff, 0x29, 0x80, 0x00, 0x6c, 0xf3, 0xff, 0x2c, 0xb9, 0xff, 0x8b, 0x3b, 0xff, 0xe9, 0x73, 0xff, 0xf6, 0xed, 0xff, 0x22, 0xc8, 0xff, 0x5a, 0xd8, 0xff, 0x44, 0x2c, 0x01, 0xf5, 0x51, 0x00, 0x8c, 0xa5, 0xff, 0x50, 0x44, 0x00, 0xb2, 0x21, 0xff, 0xe7, 0xd5, 0x11, 0x84, 0xfd, 0x16, 0x0f, 0x7f, 0x02, 0x77, 0x8b, 0xfb, 0x7e, 0x98, 0xfe, 0x81, 0x0e, 0x04, 0xef, 0xa3, 0x04, 0xfd, 0xf0, 0x00, 0xf4, 0xb7, 0xfd, 0xe6, 0xe4, 0xfe, 0x10, 0x06, 0x01, 0xdc, 0x5a, 0xff, 0x37, 0x92, 0x00, 0x73, 0x28, 0x00, 0xe9, 0x8a, 0x00, 0x71, 0x8e, 0x00, 0xf1, 0x7d, 0xff, 0x4b, 0xaa, 0xff, 0x52, 0x31, 0x00, 0x77, 0x2c, 0x00, 0xa9, 0x99, 0xff, 0xeb, 0x0f, 0x00, 0xa5, 0xf8, 0xfe, 0xde, 0x61, 0xff, 0xb6, 0x18, 0x00, 0x45, 0x70, 0xff, 0x3d, 0x17, 0x00, 0x70, 0x26, 0x01, 0x09, 0xcb, 0xff, 0x14, 0xd4, 0xff, 0xb0, 0x02, 0x00, 0x57, 0x2c, 0xff, 0x5d, 0x45, 0x12, 0xb4, 0x22, 0x18, 0x14, 0x89, 0x02, 0x60, 0xb8, 0xfa, 0x32, 0xad, 0xfe, 0x91, 0x76, 0x04, 0xcc, 0xe7, 0x04, 0x77, 0xff, 0x00, 0xe4, 0x63, 0xfd, 0x73, 0x71, 0xfe, 0xbf, 0x0b, 0x01, 0x19, 0x2f, 0xff, 0x2b, 0xf6, 0xff, 0xb1, 0xe2, 0xff, 0xe0, 0xa2, 0x00, 0x06, 0x75, 0x00, 0x89, 0x89, 0xff, 0x48, 0x09, 0x00, 0xd8, 0x09, 0x00, 0x5a, 0x22, 0x00, 0x0d, 0x99, 0xff, 0x27, 0xab, 0xff, 0x53, 0xdb, 0xfe, 0xe4, 0xb9, 0xff, 0x1c, 0x1f, 0x00, 0x83, 0x42, 0xff, 0x95, 0x71, 0x00, 0x61, 0x13, 0x01, 0x79, 0x42, 0xff, 0x1d, 0xce, 0xff, 0x89, 0x02, 0x00, 0xfc, 0x2d, 0xff, 0xc9, 0xf0, 0x12, 0xe2, 0x8f, 0x19, 0x45, 0x80, 0x02, 0x05, 0xa4, 0xf9, 0x4f, 0xda, 0xfe, 0xb1, 0xe5, 0x04, 0xcb, 0x24, 0x05, 0x3f, 0x13, 0x01, 0x00, 0xe9, 0xfc, 0x7b, 0x64, 0xfe, 0x0a, 0x2c, 0x01, 0x34, 0xea, 0xfe, 0x30, 0xa0, 0xff, 0xd0, 0xad, 0xff, 0x37, 0x5f, 0x00, 0x5c, 0x54, 0x00, 0xcc, 0x69, 0xff, 0x18, 0xf1, 0xff, 0x3e, 0x6e, 0x00, 0xf8, 0x4d, 0x00, 0x48, 0x5a, 0xff, 0x50, 0xad, 0xff, 0x49, 0xb2, 0xfe, 0x79, 0x71, 0xff, 0x78, 0x74, 0x00, 0x83, 0x84, 0xff, 0x2d, 0x45, 0x00, 0x60, 0x3c, 0x01, 0x57, 0x31, 0xff, 0x6e, 0x80, 0xff, 0x37, 0xbb, 0xff, 0xf0, 0x43, 0xff, 0x55, 0x14, 0x14, 0x51, 0xf3, 0x1a, 0x24, 0x2d, 0x02, 0x36, 0x95, 0xf8, 0x6f, 0xff, 0xfe, 0x7f, 0x77, 0x05, 0x29, 0x31, 0x05, 0x54, 0xda, 0x00, 0xa8, 0x58, 0xfc, 0x41, 0x58, 0xfe, 0x78, 0x97, 0x01, 0xcc, 0xb7, 0xfe, 0x59, 0x33, 0xff, 0x15, 0x58, 0xff, 0x89, 0x5e, 0x00, 0x91, 0x14, 0x00, 0x2f, 0xec, 0xfe, 0xf0, 0xd2, 0xff, 0x04, 0x6f, 0x00, 0x37, 0x50, 0x00, 0x3e, 0x74, 0xff, 0x49, 0xb2, 0xff, 0xfc, 0x88, 0xfe, 0x43, 0x6c, 0xff, 0xcb, 0x6b, 0x00, 0xe2, 0x67, 0xff, 0xf9, 0x21, 0x00, 0xd9, 0x8f, 0x01, 0x32, 0x5d, 0xff, 0x4c, 0xf0, 0xfe, 0x3c, 0xaa, 0xff, 0x8e, 0x2d, 0xff, 0xaa, 0x75, 0x15, 0x58, 0x87, 0x1c, 0x98, 0x8c, 0x01, 0x18, 0x59, 0xf7, 0xa7, 0x35, 0xff, 0x6c, 0x0e, 0x06, 0x4c, 0x2d, 0x05, 0xcb, 0x63, 0x00, 0x77, 0xae, 0xfb, 0x4c, 0x35, 0xfe, 0x37, 0x12, 0x02, 0xc7, 0x8e, 0xfe, 0xff, 0xb0, 0xfe, 0xed, 0x1d, 0xff, 0x2b, 0x25, 0x00, 0xf1, 0xcd, 0xff, 0x2e, 0xa2, 0xfe, 0x5b, 0x62, 0xff, 0x1a, 0x3a, 0x00, 0x3d, 0x2a, 0x00, 0xe9, 0x27, 0xff, 0x4c, 0xd1, 0xff, 0x4b, 0xb6, 0xfe, 0x04, 0x4f, 0xff, 0xd3, 0x68, 0x00, 0xaa, 0x92, 0xff, 0x8a, 0x44, 0xff, 0x4b, 0x69, 0x01, 0x87, 0x51, 0x00, 0xe1, 0x7b, 0xfe, 0x2e, 0x37, 0xff, 0xf4, 0x3c, 0xff, 0x8c, 0x76, 0x17, 0xc4, 0x4e, 0x1e, 0x2f, 0xa4, 0x00, 0x3a, 0x32, 0xf6, 0x9e, 0xa5, 0xff, 0x92, 0xf6, 0x06, 0x70, 0x23, 0x05, 0xfc, 0xd5, 0xff, 0xbc, 0xfe, 0xfa, 0xa4, 0x70, 0xfe, 0x73, 0xb7, 0x02, 0x4f, 0x90, 0xfe, 0xad, 0x49, 0xfe, 0xb2, 0xf5, 0xfe, 0xb4, 0x57, 0x00, 0x41, 0x94, 0xff, 0x5c, 0x49, 0xfe, 0x38, 0x74, 0xff, 0x6d, 0x1a, 0x00, 0x7f, 0xd2, 0xff, 0x0f, 0x12, 0xff, 0xee, 0xaa, 0xff, 0x20, 0x1c, 0xff, 0x98, 0xb4, 0xff, 0x88, 0x4d, 0x00, 0x32, 0xf4, 0xff, 0xd7, 0xf5, 0xfe, 0x18, 0xa6, 0x00, 0x4a, 0x03, 0x01, 0xf8, 0xf8, 0xfe, 0x5f, 0xbb, 0xfe, 0x9c, 0x64, 0xff, 0x22, 0xb5, 0x19, 0xdc, 0xf0, 0x1f, 0xeb, 0x96, 0xff, 0xea, 0x14, 0xf5, 0xe6, 0xfb, 0xff, 0x26, 0xde, 0x07, 0x36, 0xea, 0x04, 0xea, 0x19, 0xff, 0x20, 0x15, 0xfa, 0x1e, 0xb3, 0xfe, 0x2c, 0x56, 0x03, 0x14, 0x84, 0xfe, 0xc6, 0xcc, 0xfd, 0x00, 0xa7, 0xfe, 0xf9, 0x69, 0x00, 0x29, 0x77, 0xff, 0x0f, 0xdd, 0xfd, 0x54, 0x42, 0xff, 0x01, 0x3b, 0x00, 0xc6, 0x3f, 0xff, 0xe4, 0xe2, 0xfe, 0x58, 0x76, 0xff, 0xdd, 0x0f, 0xff, 0x49, 0x5e, 0x00, 0xac, 0x33, 0x00, 0x21, 0xfb, 0xff, 0x4d, 0x16, 0xff, 0xe1, 0xb8, 0xff, 0x3e, 0xfc, 0x00, 0x65, 0xdd, 0xff, 0xc8, 0x43, 0xfe, 0xad, 0x38, 0xff, 0x34, 0xf2, 0x1b, 0xe0, 0xe8, 0x21, 0x9c, 0x95, 0xfe, 0x7f, 0x03, 0xf4, 0x39, 0x3a, 0x00, 0xa0, 0xd4, 0x08, 0xb1, 0xc3, 0x04, 0x7d, 0x51, 0xfe, 0x48, 0x57, 0xf9, 0x68, 0xca, 0xfe, 0x54, 0x28, 0x04, 0x98, 0x6e, 0xfe, 0x60, 0x71, 0xfd, 0xa5, 0x69, 0xfe, 0x8d, 0x69, 0x00, 0x4f, 0x5d, 0xff, 0x54, 0xac, 0xfd, 0xce, 0x05, 0xff, 0x62, 0x67, 0x00, 0x47, 0xef, 0xfe, 0xe1, 0x89, 0xfe, 0x0e, 0x8a, 0xff, 0x79, 0xd9, 0xfe, 0x03, 0xee, 0x00, 0xe6, 0x65, 0x00, 0x12, 0xde, 0xff, 0x31, 0x42, 0xff, 0x40, 0x53, 0xff, 0xf7, 0x3a, 0x00, 0xc3, 0xd1, 0x00, 0x19, 0xa3, 0xfe, 0x2b, 0x75, 0xfe, 0x42, 0xb0, 0x1d, 0x6a, 0x1a, 0x24, 0x48, 0x06, 0xfe, 0xd9, 0x3a, 0xf3, 0xc6, 0x21, 0x00, 0x7c, 0x9a, 0x09, 0x1b, 0xd2, 0x04, 0xb7, 0x85, 0xfd, 0x22, 0xed, 0xf8, 0x49, 0x96, 0xfe, 0xe9, 0xf3, 0x04, 0x69, 0x5d, 0xfe, 0x38, 0x22, 0xfd, 0xa9, 0x41, 0xfe, 0xfd, 0x66, 0x00, 0x08, 0x3b, 0xff, 0x98, 0x7d, 0xfd, 0x44, 0xe8, 0xfe, 0xba, 0x5c, 0x00, 0x6d, 0xfe, 0xfe, 0x57, 0x1f, 0xfe, 0x57, 0xba, 0xff, 0x12, 0xa5, 0xfe, 0x97, 0x49, 0x01, 0x7e, 0xbc, 0x00, 0x4b, 0xc3, 0xff, 0x26, 0x51, 0xff, 0xc2, 0x34, 0xff, 0xba, 0x83, 0xff, 0x41, 0xf7, 0x00, 0x19, 0xdb, 0xff, 0x74, 0xdb, 0xfd, 0x94, 0xba, 0x1f, 0xc0, 0x0e, 0x26, 0xae, 0x41, 0xfd, 0xef, 0xc1, 0xf2, 0x17, 0xcf, 0xff, 0xf5, 0x21, 0x0a, 0x5c, 0xc6, 0x04, 0x7a, 0xc3, 0xfc, 0xed, 0x81, 0xf8, 0x2f, 0x6e, 0xfe, 0x29, 0x7d, 0x05, 0x13, 0x44, 0xfe, 0xb8, 0xbb, 0xfc, 0xf1, 0x26, 0xfe, 0x1c, 0x57, 0x00, 0x8e, 0x17, 0xff, 0x3c, 0x41, 0xfd, 0xca, 0xba, 0xfe, 0xf6, 0x39, 0x00, 0xdf, 0x0a, 0xff, 0x4a, 0xdf, 0xfd, 0xa4, 0xde, 0xff, 0x96, 0x9c, 0xfe, 0x8a, 0x43, 0x01, 0xb4, 0x12, 0x01, 0x7e, 0xb5, 0xff, 0x17, 0x37, 0xff, 0x6e, 0x0a, 0xff, 0xf3, 0x10, 0xff, 0x6d, 0x72, 0x00, 0x60, 0xf9, 0x00, 0xf5, 0x21, 0xfe, 0xed, 0x54, 0x22, 0x06, 0x44, 0x27, 0xc3, 0x4a, 0xfc, 0x5d, 0xcf, 0xf2, 0x59, 0x7d, 0xff, 0x0d, 0x48, 0x0a, 0xc8, 0xa1, 0x04, 0x18, 0x35, 0xfc, 0xd4, 0x29, 0xf8, 0x91, 0x5c, 0xfe, 0x19, 0xc4, 0x05, 0x1f, 0x1b, 0xfe, 0x12, 0x6c, 0xfc, 0xa6, 0x07, 0xfe, 0x57, 0x4d, 0x00, 0x1c, 0xea, 0xfe, 0xd3, 0x1e, 0xfd, 0xb3, 0x7d, 0xfe, 0x75, 0x0a, 0x00, 0xef, 0x0f, 0xff, 0x42, 0xe9, 0xfd, 0xb3, 0xd7, 0xff, 0x86, 0xde, 0xfe, 0xac, 0x28, 0x01, 0x81, 0x1d, 0x01, 0xc5, 0xc6, 0xff, 0x39, 0x28, 0xff, 0xc0, 0xba, 0xfe, 0x98, 0xd4, 0xfe, 0xc5, 0xf5, 0xff, 0x79, 0x40, 0x01, 0xaf, 0x30, 0xff, 0xe4, 0xe0, 0x24, 0xe3, 0x92, 0x28, 0xfd, 0x00, 0xfb, 0x12, 0x3f, 0xf3, 0x76, 0x3d, 0xff, 0xd2, 0xe6, 0x09, 0x5b, 0x8b, 0x04, 0xfb, 0xdb, 0xfb, 0xb7, 0xf4, 0xf7, 0x36, 0x20, 0xfe, 0x2e, 0xf7, 0x05, 0x4f, 0xed, 0xfd, 0xbe, 0x4a, 0xfc, 0x07, 0xee, 0xfd, 0x4e, 0x25, 0x00, 0xe5, 0xda, 0xfe, 0x5b, 0x05, 0xfd, 0xd4, 0x3d, 0xfe, 0xff, 0xdd, 0xff, 0x1f, 0x2e, 0xff, 0xc1, 0x15, 0xfe, 0xed, 0xbe, 0xff, 0x2a, 0x36, 0xff, 0x95, 0x1d, 0x01, 0xb1, 0xe6, 0x00, 0x19, 0xe6, 0xff, 0xe9, 0x2a, 0xff, 0x6e, 0x61, 0xfe, 0xbe, 0x9f, 0xfe, 0xf9, 0xce, 0xff, 0x8a, 0xca, 0x00, 0x0d, 0x44, 0x00, 0x22, 0x66, 0x27, 0x0a, 0xfd, 0x29, 0x76, 0xc4, 0xf8, 0x81, 0xfc, 0xf3, 0xfb, 0x33, 0xff, 0xf4, 0xfd, 0x08, 0x58, 0x8e, 0x04, 0x06, 0x93, 0xfb, 0xb1, 0xc2, 0xf7, 0xae, 0xa5, 0xfd, 0xe8, 0x0a, 0x06, 0x39, 0xa2, 0xfd, 0x19, 0x7a, 0xfc, 0x95, 0xac, 0xfd, 0x15, 0xed, 0xff, 0x43, 0xc9, 0xfe, 0x22, 0xdb, 0xfc, 0xf7, 0x10, 0xfe, 0x29, 0x90, 0xff, 0xc2, 0x83, 0xff, 0x67, 0x17, 0xfe, 0x50, 0xb5, 0xff, 0xc6, 0x6c, 0xff, 0x1f, 0xfd, 0x00, 0x9c, 0x81, 0x00, 0xb8, 0x17, 0x00, 0xec, 0x03, 0xff, 0xb6, 0x26, 0xfe, 0xa2, 0x81, 0xfe, 0x74, 0xa6, 0xff, 0xb7, 0x21, 0x00, 0x04, 0xd1, 0x00, 0x31, 0x4e, 0x2b, 0x9c, 0x7e, 0x2a, 0xfe, 0x2b, 0xf5, 0x16, 0x6b, 0xf5, 0x48, 0x88, 0xff, 0x13, 0xfe, 0x07, 0xe4, 0x58, 0x04, 0xe8, 0x35, 0xfb, 0xa6, 0x74, 0xf7, 0xb5, 0x71, 0xfd, 0x74, 0x1b, 0x06, 0xa3, 0x30, 0xfd, 0xd2, 0x31, 0xfd, 0xb0, 0x37, 0xfd, 0x27, 0xf7, 0xff, 0xc7, 0x88, 0xfe, 0xd8, 0xae, 0xfc, 0x0d, 0x1b, 0xfe, 0x37, 0x70, 0xff, 0x1b, 0xd8, 0xff, 0x1d, 0xf7, 0xfd, 0xe4, 0x05, 0x00, 0xc6, 0x31, 0xff, 0x9f, 0xf2, 0x00, 0x4a, 0x40, 0x00, 0xa0, 0x2b, 0x00, 0x40, 0xd0, 0xfe, 0x8d, 0x35, 0xfe, 0x9f, 0x9e, 0xfe, 0xab, 0x1f, 0xff, 0x6a, 0xdc, 0xff, 0xd6, 0x01, 0x01, 0xfa, 0x5f, 0x30, 0x76, 0xcc, 0x29, 0x8f, 0xa0, 0xf0, 0x2a, 0x7f, 0xf7, 0x0e, 0xab, 0xff, 0x78, 0x63, 0x07, 0xd7, 0xaa, 0x03, 0xcd, 0xd1, 0xfa, 0x2d, 0xf3, 0xf6, 0x53, 0x99, 0xfd, 0xbf, 0x3b, 0x06, 0x09, 0xb5, 0xfc, 0x3b, 0x20, 0xfe, 0x70, 0xc0, 0xfc, 0xf5, 0x19, 0x00, 0x53, 0x15, 0xfe, 0x0c, 0xa4, 0xfc, 0x25, 0x6e, 0xfe, 0x2d, 0x67, 0xff, 0x91, 0xd4, 0xff, 0x3f, 0x24, 0xfe, 0xf7, 0x10, 0x00, 0x5a, 0x97, 0xfe, 0x0a, 0x67, 0x01, 0x00, 0xdc, 0xff, 0xc0, 0x18, 0x00, 0xec, 0xfe, 0xfe, 0x9c, 0x53, 0xfe, 0x40, 0x78, 0xfe, 0xd6, 0xba, 0xfe, 0x90, 0x0a, 0x00, 0xe9, 0x99, 0x00, 0xa4, 0x4c, 0x35, 0x18, 0x76, 0x28, 0xe1, 0x3b, 0xec, 0x94, 0xae, 0xf9, 0x06, 0x8d, 0xff, 0x18, 0x18, 0x07, 0x87, 0xa0, 0x02, 0x88, 0x5b, 0xfa, 0x11, 0x5c, 0xf6, 0x90, 0xfa, 0xfd, 0xb2, 0x8c, 0x06, 0x07, 0x1d, 0xfc, 0x05, 0x3d, 0xff, 0x40, 0x4f, 0xfc, 0xf6, 0x10, 0x00, 0xd4, 0xa4, 0xfd, 0xe2, 0xf4, 0xfc, 0xe8, 0xe3, 0xfe, 0x53, 0xcc, 0xfe, 0xd9, 0x2f, 0x00, 0x3d, 0x08, 0xfe, 0x01, 0x6a, 0xff, 0x7b, 0xb8, 0xfe, 0xa5, 0xa0, 0x01, 0x5c, 0x51, 0xff, 0x92, 0x8b, 0x00, 0xa5, 0x3b, 0xff, 0x38, 0xdc, 0xfd, 0xbc, 0x8f, 0xfe, 0x44, 0xde, 0xfe, 0xc1, 0x9b, 0xff, 0x9b, 0x1d, 0x00, 0x43, 0xd5, 0x39, 0x56, 0xb4, 0x26, 0x41, 0x5d, 0xe8, 0x70, 0xe1, 0xfb, 0x3e, 0x2f, 0xff, 0x96, 0xf7, 0x06, 0xee, 0x8f, 0x01, 0x3e, 0xc3, 0xf9, 0x24, 0x0f, 0xf6, 0x3f, 0xe8, 0xfe, 0xa7, 0x9a, 0x06, 0x72, 0xaf, 0xfb, 0xf9, 0xaa, 0x00, 0xaa, 0x8f, 0xfb, 0x97, 0x14, 0x00, 0x4f, 0xcb, 0xfd, 0xff, 0x68, 0xfd, 0x08, 0xd0, 0xfe, 0xc3, 0x9a, 0xfe, 0xfb, 0x33, 0x00, 0x3d, 0x61, 0xfd, 0x6a, 0x98, 0xff, 0x6a, 0x8d, 0xfe, 0x81, 0xd4, 0x01, 0x07, 0x98, 0xff, 0xe4, 0xe1, 0x00, 0xdd, 0xe8, 0xfe, 0x35, 0xc8, 0xfd, 0x1b, 0x21, 0xff, 0x13, 0x65, 0xfe, 0x83, 0x22, 0xff, 0x16, 0x32, 0x00, 0xcc, 0x3c, 0x3d, 0xe0, 0x0c, 0x25, 0x02, 0x50, 0xe5, 0x09, 0xf6, 0xfd, 0xae, 0x12, 0xfe, 0xa6, 0x06, 0x07, 0xf3, 0xcb, 0x00, 0xf9, 0xeb, 0xf8, 0x61, 0x76, 0xf6, 0xc6, 0xb9, 0xff, 0xb7, 0x5d, 0x06, 0x8f, 0xb8, 0xfb, 0x8c, 0xde, 0x01, 0xab, 0x88, 0xfa, 0xe7, 0xc3, 0x00, 0xc3, 0x39, 0xfe, 0xc9, 0x10, 0xfd, 0x61, 0x3f, 0xff, 0xed, 0xaa, 0xfd, 0x69, 0x14, 0x00, 0x13, 0x96, 0xfd, 0xf5, 0x12, 0xff, 0x05, 0xae, 0xfe, 0x3b, 0xc3, 0x02, 0x7f, 0x8b, 0xff, 0x7b, 0xa9, 0x00, 0x2e, 0x29, 0xff, 0x54, 0xe0, 0xfd, 0x39, 0xfd, 0xfe, 0x9a, 0x13, 0xfe, 0x74, 0x0c, 0xff, 0xa8, 0x25, 0x00, 0x40, 0x78, 0x3f, 0xe3, 0xca, 0x22, 0x32, 0x0a, 0xe4, 0x51, 0x78, 0xff, 0xf1, 0x25, 0xfc, 0x94, 0x90, 0x07, 0x85, 0x71, 0x00, 0xbd, 0x4f, 0xf8, 0x6d, 0xf4, 0xf6, 0xa8, 0x98, 0x00, 0x14, 0xdb, 0x05, 0xa2, 0xf2, 0xfb, 0xb8, 0xb3, 0x02, 0x8d, 0x2d, 0xfa, 0x7e, 0x70, 0x01, 0xb3, 0x37, 0xfe, 0x20, 0x11, 0xfd, 0x82, 0x87, 0xfe, 0x58, 0x5e, 0xfd, 0x71, 0x6a, 0x00, 0x41, 0x1b, 0xfd, 0x14, 0x33, 0xff, 0xd7, 0x4e, 0xff, 0x7b, 0x15, 0x03, 0xb8, 0x30, 0xff, 0xdc, 0x19, 0x01, 0x08, 0x2f, 0xff, 0xff, 0x82, 0xfd, 0x61, 0x14, 0xff, 0xfb, 0xeb, 0xfd, 0x30, 0xf4, 0xfe, 0x44, 0x21, 0x00, 0x5d, 0x4a, 0x40, 0xf4, 0x3a, 0x20, 0xed, 0xd5, 0xe4, 0x78, 0xe5, 0xff, 0xef, 0x9f, 0xf9, 0x41, 0x9f, 0x08, 0x01, 0xd4, 0x00, 0x39, 0x86, 0xf7, 0xd5, 0x87, 0xf7, 0x6e, 0xb6, 0x01, 0x04, 0x9d, 0x04, 0xf3, 0x66, 0xfc, 0xae, 0x25, 0x04, 0x3b, 0x72, 0xf9, 0xa2, 0xea, 0x01, 0x27, 0x6d, 0xfe, 0xcb, 0xce, 0xfb, 0x76, 0xec, 0xfe, 0x70, 0x4f, 0xfd, 0xf5, 0x0e, 0x00, 0x4a, 0xc0, 0xfd, 0xde, 0x53, 0xff, 0xa6, 0x5b, 0xff, 0x7b, 0x2e, 0x03, 0xa9, 0x7c, 0xff, 0x05, 0xfb, 0x00, 0x0d, 0x16, 0xff, 0x7c, 0x59, 0xfd, 0xc9, 0x29, 0xff, 0x83, 0xf1, 0xfd, 0x6b, 0xc4, 0xfe, 0xd2, 0x54, 0x00, 0x81, 0xd8, 0x3e, 0x84, 0xa3, 0x1e, 0xec, 0xb9, 0xe6, 0xb0, 0x89, 0xff, 0xfd, 0x10, 0xf7, 0xdf, 0x2e, 0x0a, 0x35, 0x79, 0x01, 0x2e, 0xc8, 0xf6, 0xd5, 0x91, 0xf8, 0x5c, 0xf1, 0x01, 0x41, 0x54, 0x03, 0x8f, 0xc0, 0xfd, 0xbd, 0xa5, 0x04, 0x46, 0x09, 0xf9, 0xdf, 0x17, 0x02, 0x8e, 0xbb, 0xfd, 0x34, 0xcd, 0xfb, 0x7f, 0x23, 0xff, 0x2a, 0x22, 0xfd, 0x6e, 0x8a, 0x00, 0xc5, 0x40, 0xfe, 0x38, 0x05, 0xff, 0x0f, 0x44, 0xff, 0xe6, 0x94, 0x03, 0x0b, 0x4c, 0xff, 0x82, 0xc9, 0x00, 0xac, 0x1d, 0xff, 0x6e, 0x45, 0xfd, 0xe3, 0x72, 0xff, 0xf9, 0xb5, 0xfd, 0x49, 0xdb, 0xfe, 0x08, 0x9e, 0x00, 0xd2, 0x72, 0x3b, 0x76, 0xa2, 0x1d, 0x49, 0xb6, 0xe9, 0xed, 0xa0, 0xfe, 0x20, 0x55, 0xf5, 0x00, 0x2d, 0x0b, 0xcb, 0x5f, 0x02, 0x3c, 0xdf, 0xf6, 0x68, 0x08, 0xf9, 0xc4, 0xee, 0x01, 0xb0, 0xd9, 0x02, 0xdc, 0x3b, 0xfe, 0x72, 0x29, 0x05, 0x1e, 0xbb, 0xf8, 0x93, 0x42, 0x01, 0x35, 0x5f, 0xfe, 0x60, 0x7f, 0xfb, 0xf5, 0x86, 0xff, 0xc9, 0xa3, 0xfd, 0x47, 0xbd, 0x00, 0xa5, 0x73, 0xfe, 0x52, 0xca, 0xfe, 0xea, 0x47, 0xff, 0x29, 0x81, 0x03, 0x07, 0x2d, 0xff, 0x18, 0x6a, 0x00, 0xc1, 0x9b, 0xff, 0xc9, 0x3a, 0xfd, 0x4d, 0x7b, 0xff, 0x59, 0xcb, 0xfd, 0x77, 0x36, 0xff, 0xfb, 0x90, 0x00, 0x86, 0x07, 0x37, 0xdd, 0x12, 0x1c, 0x44, 0x2d, 0xee, 0x56, 0x75, 0xfd, 0x96, 0x76, 0xf4, 0xcf, 0x40, 0x0b, 0x71, 0x8a, 0x03, 0x47, 0x57, 0xf7, 0x50, 0x7e, 0xf9, 0xf8, 0x5b, 0x02, 0x0d, 0x64, 0x01, 0x63, 0x4f, 0xff, 0x4f, 0xcc, 0x04, 0x76, 0x74, 0xf8, 0x9d, 0x3e, 0x01, 0x19, 0x86, 0xfe, 0xea, 0xed, 0xfb, 0xc3, 0xe5, 0xff, 0x00, 0x5c, 0xfe, 0x8e, 0x68, 0x00, 0x9e, 0xc7, 0xfe, 0x58, 0xcc, 0xfe, 0x0d, 0x11, 0xff, 0x58, 0x1c, 0x03, 0xf1, 0x10, 0xff, 0xd6, 0x88, 0x00, 0xec, 0xd1, 0xff, 0x38, 0x4a, 0xfd, 0x66, 0x9b, 0xff, 0x26, 0x47, 0xfe, 0xe7, 0x31, 0xff, 0xa1, 0x88, 0x00, 0x68, 0xfd, 0x30, 0x6f, 0x71, 0x1b, 0xa5, 0x9b, 0xf2, 0x88, 0xb1, 0xfc, 0x48, 0x21, 0xf4, 0xd6, 0x90, 0x0a, 0xed, 0x85, 0x04, 0x59, 0x74, 0xf8, 0xe6, 0x71, 0xfa, 0x9c, 0x63, 0x01, 0x32, 0xed, 0x00, 0x40, 0x86, 0xff, 0x88, 0xf0, 0x03, 0xa4, 0x4b, 0xf9, 0x8b, 0x95, 0x00, 0x47, 0x2d, 0xff, 0x18, 0x61, 0xfc, 0x18, 0x4a, 0x00, 0x16, 0xb3, 0xfe, 0xff, 0x05, 0x00, 0x66, 0x58, 0xff, 0x28, 0xc0, 0xfe, 0xdd, 0x83, 0xfe, 0x56, 0x9c, 0x02, 0xb6, 0x6e, 0xff, 0x08, 0x51, 0x00, 0xec, 0x08, 0x00, 0x5b, 0x96, 0xfd, 0xe7, 0xdd, 0xff, 0xd8, 0x7b, 0xfe, 0x01, 0x4d, 0xff, 0x37, 0x6a, 0x00, 0xcb, 0x28, 0x28, 0x84, 0xa7, 0x1b, 0x34, 0xa8, 0xf5, 0x98, 0x17, 0xfd, 0x16, 0x08, 0xfb, 0x5d, 0x99, 0x05, 0x78, 0xfa, 0x00, 0x4c, 0x37, 0xfa, 0xc8, 0xce, 0xfa, 0x1a, 0x6f, 0x01, 0xe3, 0x1a, 0x02, 0x9e, 0x87, 0xff, 0x99, 0x11, 0x03, 0xf7, 0x0e, 0xfc, 0x3e, 0xc9, 0x00, 0x0a, 0x0a, 0x00, 0x04, 0x81, 0xfd, 0x4e, 0x9d, 0xff, 0xeb, 0x45, 0xff, 0x6e, 0x09, 0x00, 0x64, 0xe3, 0xfe, 0x01, 0x32, 0xff, 0x46, 0xee, 0xfe, 0x8f, 0xa3, 0x01, 0x94, 0x51, 0xff, 0xcc, 0xec, 0xff, 0x8d, 0x56, 0x00, 0x3d, 0x5f, 0xfe, 0x51, 0x39, 0xff, 0xdf, 0xcd, 0xfe, 0x52, 0xed, 0xfe, 0xa2, 0xb4, 0xff, 0x78, 0x27, 0x22, 0xbd, 0xf8, 0x1a, 0xfb, 0x86, 0xf9, 0xcc, 0x29, 0xfc, 0x9e, 0x04, 0xfb, 0x05, 0x46, 0x05, 0x6a, 0x2d, 0x02, 0x3e, 0xb3, 0xfb, 0x12, 0x84, 0xfb, 0x84, 0x4d, 0x00, 0xc8, 0xcc, 0x01, 0x86, 0xaf, 0xff, 0xa4, 0x84, 0x02, 0x88, 0x08, 0xfd, 0xb5, 0x2b, 0x00, 0x95, 0x68, 0x00, 0xe1, 0x43, 0xfe, 0xce, 0x01, 0x00, 0xc9, 0xbd, 0xff, 0x6a, 0x16, 0x00, 0x04, 0x56, 0xff, 0xb4, 0x1a, 0xff, 0x58, 0xa0, 0xfe, 0xaf, 0x3b, 0x01, 0xb4, 0x99, 0xff, 0x43, 0xd3, 0xff, 0xbe, 0x95, 0x00, 0x12, 0xd8, 0xfe, 0x02, 0x5c, 0xff, 0xdd, 0x00, 0xff, 0x67, 0x0c, 0xff, 0x00, 0x8d, 0xff, 0xc4, 0x39, 0x1d, 0x2f, 0x11, 0x1a, 0x52, 0x60, 0xfc, 0x9f, 0xb8, 0xfb, 0xf5, 0x6b, 0xfb, 0x3b, 0x91, 0x04, 0xa3, 0xdf, 0x02, 0xd3, 0x3e, 0xfd, 0xc1, 0x0a, 0xfc, 0x9a, 0x97, 0xff, 0x6f, 0x95, 0x01, 0xc9, 0xad, 0xff, 0x4c, 0x41, 0x02, 0x18, 0xef, 0xfd, 0x00, 0xe6, 0xff, 0x7b, 0xb0, 0x00, 0xad, 0x14, 0xff, 0x1d, 0x0f, 0x00, 0x73, 0x11, 0x00, 0x10, 0x6f, 0x00, 0x8b, 0x73, 0xff, 0x9c, 0x45, 0xff, 0x63, 0x95, 0xfe, 0x0a, 0xc1, 0x00, 0x1b, 0xd9, 0xff, 0xdd, 0xb8, 0xff, 0x42, 0x7a, 0x00, 0x3d, 0x36, 0xff, 0x3f, 0x75, 0xff, 0xc0, 0x2a, 0xff, 0xeb, 0x45, 0xff, 0xa9, 0x4f, 0xff, 0xd6, 0x88, 0x19, 0xf0, 0x2d, 0x19, 0x79, 0x1d, 0xfe, 0x0b, 0x76, 0xfb, 0x57, 0xf6, 0xfb, 0xf4, 0xdd, 0x03, 0xb5, 0x32, 0x03, 0x3b, 0x58, 0xfe, 0xd1, 0x91, 0xfc, 0x14, 0x3a, 0xff, 0xca, 0x6a, 0x01, 0x13, 0xb8, 0xff, 0x9d, 0xec, 0x01, 0x9b, 0xbf, 0xfe, 0x2a, 0xe9, 0xff, 0x8b, 0xb4, 0x00, 0xdf, 0x9c, 0xff, 0x6e, 0x04, 0x00, 0x51, 0x45, 0x00, 0x5c, 0xa2, 0x00, 0x7d, 0x8d, 0xff, 0x7a, 0x65, 0xff, 0xfd, 0x8b, 0xfe, 0x60, 0x41, 0x00, 0x64, 0xd1, 0xff, 0x8b, 0x84, 0xff, 0xcd, 0x24, 0x00, 0x95, 0x93, 0xff, 0x41, 0x8f, 0xff, 0x65, 0x45, 0xff, 0x69, 0x4b, 0xff, 0xed, 0x27, 0xff, 0x20, 0x31, 0x17, 0x5b, 0x60, 0x18, 0x65, 0x23, 0xff, 0xc8, 0x5a, 0xfb, 0xbf, 0xa5, 0xfc, 0x28, 0x6f, 0x03, 0xd2, 0x54, 0x03, 0x2b, 0x21, 0xff, 0xb3, 0x11, 0xfd, 0x1f, 0x2e, 0xff, 0xe9, 0x5f, 0x01, 0xa7, 0x03, 0x00, 0xd8, 0xbb, 0x01, 0x68, 0x54, 0xff, 0x70, 0x47, 0x00, 0x72, 0x94, 0x00, 0x15, 0xda, 0xff, 0x6e, 0x2c, 0x00, 0x83, 0x5e, 0x00, 0x2c, 0xa9, 0x00, 0xa6, 0xa5, 0xff, 0x8b, 0x92, 0xff, 0x60, 0x8b, 0xfe, 0x96, 0xcc, 0xff, 0x6a, 0xb8, 0xff, 0x15, 0x6d, 0xff, 0x5b, 0x17, 0x00, 0xbb, 0xf7, 0xff, 0xc3, 0x90, 0xff, 0x8d, 0x42, 0xff, 0x1b, 0xab, 0xff, 0xed, 0x3f, 0xff, 0x14, 0x94, 0x15, 0x1e, 0xe5, 0x17, 0x4a, 0xcb, 0xff, 0x6f, 0x40, 0xfb, 0x55, 0x5d, 0xfd, 0xd1, 0x30, 0x03, 0x86, 0x4e, 0x03, 0xcb, 0xa6, 0xff, 0x49, 0x27, 0xfd, 0xc6, 0x38, 0xff, 0xc4, 0x6c, 0x01, 0x0c, 0x2f, 0x00, 0x35, 0xd0, 0x01, 0x30, 0x77, 0xff, 0x6b, 0x8a, 0x00, 0x22, 0xbe, 0x00, 0xb2, 0x90, 0xff, 0xe2, 0x19, 0x00, 0x24, 0x85, 0x00, 0x7c, 0x7f, 0x00, 0x28, 0x70, 0xff, 0x6f, 0xcf, 0xff, 0x3c, 0x99, 0xfe, 0x74, 0x38, 0xff, 0x07, 0xbb, 0xff, 0xcf, 0xa9, 0xff, 0x80, 0xe6, 0xff, 0x54, 0xcd, 0xff, 0xf1, 0xd7, 0xff, 0xb5, 0xa2, 0xff, 0x5a, 0x48, 0xff, 0xbe, 0xc3, 0xff, 0xf0, 0xba, 0x14, 0xb1, 0xb8, 0x17, 0x04, 0x19, 0x00, 0x61, 0x2e, 0xfb, 0x0a, 0x1c, 0xfe, 0x6d, 0x5a, 0x03, 0x49, 0x04, 0x03, 0xee, 0xe6, 0xff, 0xca, 0x16, 0xfd, 0x01, 0xe2, 0xfe, 0x52, 0xb9, 0x01, 0xe6, 0x03, 0x00, 0x63, 0xb2, 0x01, 0xfd, 0xf9, 0xff, 0xf4, 0x5c, 0x00, 0x39, 0xcf, 0x00, 0xe6, 0xb5, 0xff, 0x1c, 0x82, 0xff, 0x17, 0x64, 0x00, 0x25, 0xc2, 0x00, 0x74, 0x1f, 0xff, 0xf0, 0x6e, 0xff, 0x47, 0xf9, 0xfe, 0xf2, 0x56, 0xff, 0xe6, 0x56, 0xff, 0x52, 0xba, 0xff, 0xde, 0xbd, 0xff, 0x1d, 0xc6, 0xff, 0xaa, 0x0e, 0x00, 0x0c, 0x4b, 0xff, 0x9d, 0x58, 0x00, 0x2f, 0x7f, 0x00, 0x37, 0xb2, 0x14, 0xb1, 0xf6, 0x17, 0xa6, 0xe2, 0xff, 0x62, 0x08, 0xfb, 0x21, 0xd5, 0xfe, 0x29, 0xd9, 0x03, 0x41, 0x04, 0x03, 0x87, 0x7d, 0xff, 0x02, 0x08, 0xfd, 0x57, 0xb2, 0xfe, 0x46, 0x60, 0x01, 0x2b, 0x01, 0x00, 0xd0, 0x5d, 0x01, 0xaf, 0x19, 0x00, 0x96, 0xce, 0x00, 0x83, 0xac, 0x00, 0xef, 0x98, 0xff, 0x72, 0xb9, 0xff, 0x90, 0x04, 0x00, 0x56, 0x56, 0x00, 0x48, 0x59, 0xff, 0x7f, 0x59, 0xff, 0xe8, 0xae, 0xfe, 0x93, 0xa0, 0xff, 0xad, 0xbc, 0xff, 0xc1, 0x1e, 0xff, 0xf7, 0x9c, 0xff, 0x91, 0x21, 0x00, 0x80, 0x74, 0xff, 0xd6, 0x28, 0x00, 0x83, 0x07, 0x01, 0x3d, 0x4b, 0xff, 0xca, 0xe4, 0x14, 0x2b, 0xd4, 0x18, 0xa1, 0xcc, 0xff, 0xdc, 0x85, 0xfa, 0x9f, 0x89, 0xff, 0x91, 0x6e, 0x04, 0x82, 0x28, 0x03, 0x7e, 0x4b, 0xff, 0xf9, 0x83, 0xfc, 0xe0, 0x85, 0xfe, 0x11, 0x71, 0x01, 0xad, 0x75, 0xff, 0x7e, 0xee, 0x00, 0xd9, 0x37, 0x00, 0xdf, 0xb4, 0x00, 0xec, 0x0f, 0x01, 0xd2, 0xc0, 0xff, 0xf3, 0x9f, 0xff, 0x99, 0x50, 0x00, 0xa6, 0x1c, 0x00, 0x40, 0xaf, 0xfe, 0x51, 0x7e, 0xff, 0xdf, 0x0a, 0xff, 0xcc, 0x6c, 0xff, 0xf2, 0x96, 0xff, 0x1a, 0x97, 0xff, 0xa4, 0xcd, 0xff, 0x09, 0x2f, 0xff, 0x2c, 0xec, 0xff, 0x00, 0x0a, 0x01, 0x39, 0xf5, 0xff, 0x4c, 0x1e, 0xff, 0xe8, 0x05, 0x16, 0x29, 0xd5, 0x19, 0xb0, 0x3d, 0xff, 0xa6, 0xe6, 0xf9, 0x20, 0x1d, 0x00, 0x17, 0x21, 0x05, 0x9a, 0x30, 0x03, 0x15, 0x0b, 0xff, 0x06, 0x2a, 0xfc, 0xf7, 0x3b, 0xfe, 0x80, 0x86, 0x01, 0xec, 0x48, 0xff, 0x1a, 0x58, 0x00, 0x9e, 0xc7, 0xff, 0x1c, 0xc9, 0x00, 0x4d, 0x09, 0x01, 0xed, 0x91, 0xff, 0xbc, 0x12, 0x00, 0x17, 0x9b, 0x00, 0xc9, 0xed, 0xff, 0x19, 0x98, 0xfe, 0x98, 0x32, 0xff, 0xa3, 0xa2, 0xfe, 0x6d, 0xca, 0xff, 0x78, 0xd0, 0xff, 0xec, 0x67, 0xff, 0xbd, 0xd2, 0xff, 0xd8, 0x60, 0xff, 0x26, 0x19, 0x00, 0xdf, 0x9e, 0x00, 0x4c, 0x96, 0xff, 0x54, 0x30, 0xff, 0xca, 0x9d, 0x17, 0xb1, 0x44, 0x1b, 0x00, 0x44, 0xfe, 0x25, 0x11, 0xf9, 0xfe, 0xd9, 0x00, 0x61, 0x9e, 0x05, 0x81, 0x08, 0x03, 0x54, 0x9f, 0xfe, 0x24, 0xa6, 0xfb, 0x22, 0x43, 0xfe, 0xfe, 0xb7, 0x01, 0x1c, 0x05, 0xff, 0x88, 0xbd, 0xff, 0x55, 0x7b, 0xff, 0x4b, 0xaf, 0x00, 0x4c, 0xa8, 0x00, 0xa8, 0x45, 0xff, 0x4e, 0xff, 0xff, 0x04, 0xd3, 0x00, 0x86, 0x05, 0x00, 0xb4, 0x8f, 0xfe, 0x8e, 0x18, 0xff, 0x79, 0x6b, 0xfe, 0xff, 0xaf, 0xff, 0x6e, 0x92, 0xff, 0x1d, 0xb6, 0xff, 0x59, 0xe3, 0xff, 0xb3, 0x1f, 0xff, 0x15, 0x0f, 0x00, 0xe9, 0xc2, 0x00, 0xa6, 0x68, 0xff, 0xa5, 0x82, 0xfe, 0x23, 0xb9, 0x19, 0x53, 0xe4, 0x1c, 0x0f, 0xf3, 0xfc, 0x61, 0x58, 0xf8, 0x15, 0xa4, 0x01, 0x3f, 0x1f, 0x06, 0x09, 0x7d, 0x02, 0x13, 0x0e, 0xfe, 0x0f, 0x27, 0xfb, 0x2e, 0x7b, 0xfe, 0x79, 0x3f, 0x02, 0x6b, 0x8a, 0xfe, 0x44, 0x52, 0xff, 0x17, 0x14, 0xff, 0xef, 0xbd, 0x00, 0xfa, 0x80, 0x00, 0x5a, 0x92, 0xfe, 0x16, 0xda, 0xff, 0xb9, 0xc9, 0x00, 0x51, 0xc4, 0xff, 0x8c, 0x94, 0xfe, 0xf3, 0x57, 0xff, 0x91, 0x50, 0xfe, 0xb9, 0xfe, 0xff, 0x64, 0x65, 0xff, 0x55, 0x31, 0xff, 0xd3, 0xfe, 0xff, 0xf9, 0x5d, 0xff, 0x58, 0x90, 0xff, 0x51, 0x71, 0x00, 0x54, 0x15, 0x00, 0xda, 0x55, 0xfe, 0x76, 0x6e, 0x1c, 0x9a, 0xa5, 0x1e, 0xfd, 0x46, 0xfb, 0x5a, 0xdf, 0xf7, 0xa5, 0x78, 0x02, 0xb7, 0x91, 0x06, 0x2d, 0xce, 0x01, 0x22, 0x35, 0xfd, 0xac, 0xc1, 0xfa, 0x91, 0xe0, 0xfe, 0x6e, 0x0b, 0x03, 0x7f, 0x08, 0xfe, 0x1a, 0xc7, 0xfe, 0x40, 0xf2, 0xfe, 0xff, 0xc5, 0x00, 0x93, 0x57, 0x00, 0xfe, 0x42, 0xfe, 0xe7, 0x79, 0xff, 0xa7, 0x91, 0x00, 0x29, 0xa5, 0xff, 0xe8, 0x38, 0xfe, 0xc0, 0xa7, 0xff, 0xe8, 0x7e, 0xfe, 0xdf, 0x49, 0x00, 0xe4, 0xb1, 0xff, 0x01, 0xdb, 0xfe, 0xaa, 0xb4, 0xff, 0x70, 0x47, 0xff, 0x7c, 0x4e, 0xff, 0x22, 0x15, 0x00, 0xcd, 0x9d, 0x00, 0x1f, 0xba, 0xfe, 0xcc, 0x79, 0x1f, 0x9f, 0x8d, 0x20, 0xec, 0x94, 0xf9, 0xf0, 0xc4, 0xf7, 0xed, 0x18, 0x03, 0x0b, 0xd3, 0x06, 0x11, 0x32, 0x01, 0xbf, 0x67, 0xfc, 0x56, 0x79, 0xfa, 0x29, 0x5e, 0xff, 0x71, 0xe7, 0x03, 0x0c, 0xa4, 0xfd, 0x4f, 0x58, 0xfe, 0x75, 0xd9, 0xfe, 0x8f, 0x01, 0x01, 0x02, 0x16, 0x00, 0x20, 0x10, 0xfe, 0x93, 0x6e, 0xff, 0x16, 0x2c, 0x00, 0xcf, 0x94, 0xff, 0x35, 0x1d, 0xfe, 0x85, 0xbc, 0xff, 0x0c, 0xd8, 0xfe, 0x71, 0x8f, 0x00, 0xbe, 0xee, 0xff, 0x3c, 0x07, 0xff, 0x2e, 0x8f, 0xff, 0xf7, 0xff, 0xfe, 0x9e, 0xe8, 0xfe, 0x8a, 0xc2, 0xff, 0x94, 0xc7, 0x00, 0x68, 0xd5, 0xff, 0xd9, 0xcd, 0x22, 0xb1, 0x4c, 0x22, 0x73, 0xa9, 0xf7, 0xd2, 0xe5, 0xf7, 0xd2, 0x30, 0x03, 0xa4, 0x9b, 0x06, 0x84, 0x96, 0x00, 0x79, 0xaf, 0xfb, 0xa0, 0x22, 0xfa, 0x93, 0xb4, 0xff, 0x97, 0x80, 0x04, 0x07, 0x1a, 0xfd, 0x2a, 0x0f, 0xfe, 0x26, 0xa5, 0xfe, 0x09, 0x13, 0x01, 0xbb, 0xd1, 0xff, 0xcb, 0xba, 0xfd, 0xef, 0x2e, 0xff, 0x23, 0xe6, 0xff, 0xe7, 0x82, 0xff, 0x0f, 0xf1, 0xfd, 0x93, 0xcb, 0xff, 0xdd, 0x06, 0xff, 0x3a, 0x96, 0x00, 0x8d, 0xe9, 0xff, 0x07, 0x51, 0xff, 0xd3, 0x58, 0xff, 0x14, 0xbe, 0xfe, 0x16, 0x7a, 0xfe, 0x30, 0x47, 0xff, 0xb6, 0x6f, 0x00, 0xba, 0xb0, 0x00, 0x75, 0x29, 0x26, 0x54, 0x0f, 0x24, 0xd2, 0xa8, 0xf5, 0xfc, 0x75, 0xf8, 0x57, 0xe8, 0x02, 0x4b, 0x02, 0x06, 0xe4, 0x3f, 0x00, 0x4d, 0x47, 0xfb, 0x13, 0xed, 0xf9, 0x7f, 0xda, 0xff, 0x44, 0xf9, 0x04, 0xfa, 0xb0, 0xfc, 0xee, 0x08, 0xfe, 0x9a, 0x81, 0xfe, 0xdf, 0x0e, 0x01, 0xbc, 0xb0, 0xff, 0xfd, 0x77, 0xfd, 0xbf, 0xe7, 0xfe, 0xad, 0xc1, 0xff, 0x41, 0xa7, 0xff, 0x6b, 0xe3, 0xfd, 0xc9, 0x02, 0x00, 0x94, 0x15, 0xff, 0x01, 0x8f, 0x00, 0x62, 0xc8, 0xff, 0x20, 0xad, 0xff, 0x21, 0x3f, 0xff, 0xa1, 0x8f, 0xfe, 0x4d, 0x59, 0xfe, 0xd5, 0xb4, 0xfe, 0x17, 0x33, 0x00, 0xf6, 0x06, 0x01, 0xe1, 0xf5, 0x29, 0x2f, 0x22, 0x25, 0x74, 0x09, 0xf3, 0xf4, 0x64, 0xf9, 0xfd, 0x49, 0x02, 0x7c, 0xf8, 0x04, 0x56, 0xd6, 0xff, 0x3c, 0xee, 0xfa, 0x14, 0x98, 0xf9, 0xef, 0xce, 0xff, 0xb2, 0x21, 0x05, 0x17, 0x4e, 0xfc, 0x63, 0x34, 0xfe, 0xde, 0x35, 0xfe, 0x30, 0xf1, 0x00, 0x15, 0x6b, 0xff, 0x4f, 0x2f, 0xfd, 0x42, 0xa2, 0xfe, 0x37, 0xa7, 0xff, 0x9d, 0x9d, 0xff, 0xef, 0xde, 0xfd, 0x87, 0x25, 0x00, 0x77, 0xc8, 0xfe, 0x76, 0x95, 0x00, 0x37, 0x6e, 0xff, 0xc2, 0xca, 0xff, 0x0a, 0x46, 0xff, 0xe3, 0x59, 0xfe, 0x33, 0x3d, 0xfe, 0x71, 0x0a, 0xfe, 0xba, 0x21, 0x00, 0x4d, 0xdd, 0x00, 0x3a, 0x4c, 0x2e, 0x6d, 0x67, 0x25, 0x98, 0xba, 0xef, 0xa8, 0xe9, 0xfa, 0x71, 0xba, 0x01, 0x42, 0xed, 0x03, 0xdf, 0x3c, 0xff, 0x55, 0xc0, 0xfa, 0x35, 0x3d, 0xf9, 0x55, 0xd2, 0xff, 0x70, 0x88, 0x05, 0x5e, 0xd3, 0xfb, 0x8f, 0xcf, 0xfe, 0x46, 0x00, 0xfe, 0xc7, 0xd2, 0x00, 0x39, 0x14, 0xff, 0x98, 0x36, 0xfd, 0x4d, 0xbb, 0xfe, 0x1f, 0x2a, 0xff, 0x53, 0xe9, 0xff, 0xb0, 0xe4, 0xfd, 0xfe, 0xca, 0xff, 0xdb, 0xcb, 0xfe, 0x61, 0xb0, 0x00, 0x50, 0xff, 0xfe, 0xf6, 0x1b, 0x00, 0x46, 0x8c, 0xff, 0x65, 0xea, 0xfd, 0x11, 0x45, 0xfe, 0x1c, 0xf8, 0xfd, 0x70, 0xc5, 0xff, 0x3b, 0x8a, 0x00, 0x44, 0xe7, 0x32, 0xa7, 0x60, 0x24, 0xb0, 0x52, 0xec, 0xca, 0xf7, 0xfc, 0x13, 0x48, 0x01, 0xf0, 0x05, 0x03, 0x1c, 0x4f, 0xfe, 0x09, 0xbd, 0xfa, 0x18, 0xba, 0xf8, 0xd2, 0x87, 0x00, 0x34, 0xd7, 0x05, 0x4d, 0x43, 0xfb, 0x36, 0x0d, 0x00, 0x4c, 0x95, 0xfd, 0x30, 0xb7, 0x00, 0x04, 0x0e, 0xff, 0xe0, 0xbe, 0xfd, 0x5c, 0x4c, 0xfe, 0x88, 0xf2, 0xfe, 0x80, 0x4d, 0x00, 0x1b, 0x2e, 0xfd, 0xde, 0xf6, 0xff, 0x3b, 0xc3, 0xfe, 0xd0, 0xa4, 0x00, 0x99, 0x38, 0xff, 0x34, 0x8d, 0x00, 0xaa, 0x69, 0xff, 0xfa, 0x97, 0xfd, 0x9a, 0xcc, 0xfe, 0xbe, 0xd3, 0xfd, 0x86, 0x08, 0xff, 0x18, 0x8d, 0x00, 0xed, 0x29, 0x36, 0xea, 0x23, 0x23, 0x4c, 0x58, 0xe9, 0x82, 0x07, 0xff, 0x2a, 0x86, 0x00, 0x25, 0x2e, 0x02, 0x8b, 0x8a, 0xfd, 0x53, 0x49, 0xfa, 0x42, 0xc1, 0xf8, 0xe0, 0x3a, 0x01, 0x10, 0xbf, 0x05, 0x5f, 0x40, 0xfb, 0x09, 0x2b, 0x01, 0x46, 0xb9, 0xfc, 0x64, 0x22, 0x01, 0x45, 0x76, 0xff, 0x53, 0x5b, 0xfd, 0xf5, 0x75, 0xfe, 0x71, 0x48, 0xfe, 0xc9, 0xfc, 0xff, 0x26, 0x44, 0xfd, 0x6c, 0x95, 0xff, 0xcc, 0xb9, 0xfe, 0x44, 0x6d, 0x01, 0x84, 0x3b, 0xff, 0x82, 0x79, 0x00, 0xc9, 0x8c, 0xff, 0x8d, 0xb0, 0xfd, 0xef, 0xa1, 0xfe, 0x2d, 0x8a, 0xfd, 0xc4, 0xd4, 0xfe, 0x78, 0x54, 0x00, 0xb1, 0xd9, 0x37, 0xfe, 0xf8, 0x20, 0x7d, 0x80, 0xe8, 0x34, 0x95, 0x00, 0x42, 0x34, 0xff, 0x2e, 0x29, 0x02, 0xd3, 0xfe, 0xfc, 0x42, 0x11, 0xfa, 0x11, 0xfe, 0xf8, 0x33, 0xe9, 0x01, 0x07, 0x96, 0x05, 0x3c, 0x87, 0xfb, 0x54, 0xe9, 0x01, 0x43, 0x97, 0xfc, 0x49, 0xa3, 0x01, 0xad, 0x4b, 0xff, 0x92, 0xa9, 0xfd, 0x2d, 0xc9, 0xfd, 0xdd, 0xce, 0xfd, 0xc2, 0x47, 0x00, 0xd5, 0xcd, 0xfc, 0xf0, 0xb8, 0xff, 0x0b, 0x5f, 0xff, 0xc4, 0xb8, 0x01, 0x97, 0x06, 0xff, 0x38, 0xfa, 0x00, 0x37, 0x9f, 0xff, 0x33, 0x4f, 0xfd, 0xf9, 0x94, 0xfe, 0x76, 0xa6, 0xfd, 0x02, 0xb2, 0xfe, 0x30, 0x15, 0x00, 0x78, 0x1a, 0x37, 0x35, 0x01, 0x1f, 0x2b, 0xd4, 0xe9, 0x8c, 0xd2, 0x00, 0xda, 0xa1, 0xfd, 0x58, 0xfe, 0x02, 0x00, 0x63, 0xfd, 0xe4, 0x92, 0xf9, 0x79, 0x5e, 0xf9, 0xaf, 0xb6, 0x02, 0x59, 0x90, 0x04, 0x1c, 0x56, 0xfc, 0x35, 0x3f, 0x03, 0xd8, 0xd3, 0xfb, 0xbc, 0x1b, 0x02, 0x58, 0x8f, 0xff, 0xc1, 0xac, 0xfc, 0xa9, 0x4d, 0xfe, 0xc8, 0x8d, 0xfd, 0xba, 0x05, 0x00, 0x8c, 0x98, 0xfd, 0x61, 0xac, 0xff, 0x1e, 0x73, 0xff, 0xc5, 0x10, 0x02, 0x90, 0x55, 0xff, 0x2d, 0xd3, 0x00, 0xe2, 0x72, 0xff, 0xc4, 0x5f, 0xfd, 0xa5, 0xa9, 0xfe, 0x38, 0xd0, 0xfd, 0x6d, 0x9b, 0xfe, 0xc2, 0xfa, 0xff, 0xae, 0xf1, 0x33, 0x57, 0x49, 0x1d, 0xd1, 0x0b, 0xed, 0xa0, 0xcd, 0xff, 0x42, 0x38, 0xfc, 0x43, 0x6c, 0x04, 0xe1, 0x27, 0xfe, 0xc6, 0x3d, 0xf9, 0xb4, 0xf0, 0xf9, 0x88, 0x7d, 0x02, 0x08, 0xbe, 0x03, 0xae, 0xd2, 0xfd, 0xc6, 0x4c, 0x03, 0x76, 0xf1, 0xfb, 0x61, 0xca, 0x01, 0x50, 0x3f, 0xff, 0x76, 0xf9, 0xfc, 0xaf, 0x46, 0xfe, 0x64, 0xfd, 0xfd, 0xc4, 0x40, 0x00, 0x4a, 0x09, 0xfe, 0x7e, 0x53, 0xff, 0x6a, 0x8b, 0xff, 0x5d, 0x71, 0x02, 0xfc, 0x01, 0xff, 0xeb, 0x8b, 0x00, 0x6b, 0x9d, 0xff, 0x3d, 0x94, 0xfd, 0x91, 0xd3, 0xfe, 0x9a, 0xe7, 0xfd, 0x7e, 0xc1, 0xfe, 0x5f, 0x2a, 0x00, 0x52, 0x93, 0x2e, 0x9d, 0x74, 0x1c, 0xf2, 0x23, 0xf1, 0xe0, 0x34, 0xfe, 0x95, 0x50, 0xfb, 0x0f, 0x53, 0x05, 0x00, 0x7a, 0xff, 0xff, 0x72, 0xf9, 0x41, 0x10, 0xfa, 0x38, 0x35, 0x02, 0x63, 0xf4, 0x02, 0x2c, 0x86, 0xfe, 0x5d, 0xbe, 0x03, 0xf9, 0x86, 0xfb, 0xd1, 0x33, 0x01, 0x1e, 0xd3, 0xff, 0x9c, 0xbe, 0xfc, 0x8a, 0x23, 0xff, 0x12, 0x83, 0xfe, 0xe3, 0x28, 0x00, 0xdb, 0x67, 0xfe, 0x12, 0x18, 0xff, 0x7e, 0x7f, 0xff, 0x92, 0xed, 0x01, 0x3e, 0x0d, 0xff, 0x56, 0x3a, 0x00, 0x2d, 0xe6, 0xff, 0x8e, 0xe9, 0xfd, 0xc4, 0xe2, 0xfe, 0x9f, 0x5d, 0xfe, 0x45, 0xfc, 0xfe, 0xc8, 0xd5, 0xff, 0xdf, 0x10, 0x25, 0xa2, 0x3f, 0x1b, 0x3a, 0x6a, 0xf4, 0xe6, 0xee, 0xfe, 0x70, 0x67, 0x01, 0x6e, 0x18, 0x03, 0x1f, 0xc3, 0xfe, 0x05, 0xa2, 0xfb, 0x45, 0x61, 0xfb, 0xff, 0xa2, 0x01, 0x25, 0x75, 0x03, 0xb3, 0x68, 0xfe, 0x3e, 0x91, 0x01, 0xc9, 0x2d, 0xfe, 0xf3, 0x54, 0x01, 0xc2, 0xb9, 0xff, 0x0a, 0xfe, 0xfd, 0x45, 0xa9, 0xfe, 0x3b, 0x69, 0xfe, 0xea, 0x08, 0x00, 0x8c, 0xb7, 0xfe, 0xd5, 0xa5, 0xff, 0xf4, 0x8f, 0xff, 0x58, 0x98, 0x01, 0xca, 0x8e, 0xff, 0x9d, 0x2a, 0x00, 0x64, 0xca, 0xff, 0xdc, 0x2d, 0xfe, 0x62, 0xc5, 0xfe, 0xfe, 0x8e, 0xfe, 0xab, 0xe6, 0xfe, 0xd8, 0x62, 0xff, 0x26, 0xd1, 0x21, 0xc9, 0x64, 0x1b, 0x3a, 0x3d, 0xf6, 0xf0, 0x5d, 0xfc, 0x9c, 0xbb, 0x00, 0xbf, 0x98, 0x04, 0x3b, 0x42, 0x00, 0x79, 0x2e, 0xfc, 0x48, 0xf9, 0xfa, 0x99, 0x0f, 0x00, 0x78, 0x1d, 0x03, 0xa6, 0x21, 0xff, 0xe1, 0xca, 0x01, 0xe8, 0x9f, 0xfe, 0xee, 0x2f, 0x01, 0x26, 0x8f, 0x00, 0x00, 0x4c, 0xfe, 0x2b, 0x41, 0xff, 0x8c, 0x64, 0xff, 0x87, 0xf3, 0xff, 0x6c, 0xea, 0xfe, 0xb2, 0x62, 0xff, 0x99, 0x00, 0xff, 0xaf, 0x7f, 0x01, 0xc4, 0x98, 0xff, 0x50, 0xb8, 0xff, 0xef, 0x2f, 0x00, 0xff, 0xa2, 0xfe, 0x16, 0xef, 0xfe, 0x0c, 0xd9, 0xfe, 0x98, 0x0f, 0xff, 0xb5, 0x88, 0xff, 0xac, 0x1d, 0x1f, 0x5f, 0x9f, 0x1b, 0x1f, 0x01, 0xf8, 0x56, 0x89, 0xfa, 0x37, 0xea, 0xff, 0xfb, 0xe1, 0x04, 0x98, 0x62, 0x01, 0xad, 0x2e, 0xfd, 0xa6, 0x1d, 0xfb, 0x8e, 0x1e, 0xff, 0x2a, 0x9f, 0x02, 0x53, 0x6f, 0xff, 0xa3, 0xe0, 0x01, 0xd2, 0x14, 0xff, 0x52, 0x1d, 0x01, 0x66, 0xf5, 0x00, 0x75, 0xd8, 0xfe, 0x36, 0x5f, 0xff, 0x59, 0xf7, 0xff, 0x1f, 0x1a, 0x00, 0x09, 0xdc, 0xfe, 0x73, 0x82, 0xff, 0x8c, 0x7a, 0xfe, 0x24, 0xe1, 0x00, 0x78, 0xe8, 0xff, 0x52, 0x60, 0xff, 0x69, 0x0f, 0x00, 0x59, 0x31, 0xff, 0x33, 0x03, 0xff, 0x75, 0x02, 0xff, 0x4c, 0x6a, 0xff, 0xb9, 0x60, 0xff, 0xd6, 0x7f, 0x1d, 0x34, 0xf9, 0x1b, 0x67, 0xf6, 0xf8, 0x1f, 0xad, 0xf9, 0xb7, 0xcc, 0xff, 0xf6, 0xf5, 0x04, 0x33, 0xd2, 0x01, 0x9f, 0x8b, 0xfd, 0xf4, 0x54, 0xfb, 0x0f, 0xc1, 0xfe, 0xa9, 0x4f, 0x02, 0x22, 0x4d, 0xff, 0xa1, 0xc4, 0x01, 0x33, 0x46, 0xff, 0xda, 0x2c, 0x01, 0x6a, 0x3b, 0x01, 0xfa, 0xfd, 0xfe, 0xf4, 0x99, 0xff, 0xbd, 0x19, 0x00, 0xe2, 0xed, 0xff, 0xe4, 0xa0, 0xfe, 0x5a, 0xa4, 0xff, 0xba, 0x48, 0xfe, 0x27, 0x1c, 0x00, 0xff, 0x22, 0x00, 0x2a, 0x74, 0xff, 0xab, 0xd3, 0xff, 0x1a, 0x49, 0xff, 0xe1, 0x3c, 0xff, 0xbd, 0x14, 0xff, 0x0f, 0x7c, 0xff, 0xc6, 0x91, 0xff, 0x65, 0x5b, 0x1d, 0x4d, 0x3e, 0x1c, 0x7a, 0xca, 0xf8, 0xa8, 0x9c, 0xf9, 0x45, 0xdb, 0x00, 0xe7, 0x51, 0x05, 0xa2, 0xba, 0x01, 0x15, 0x28, 0xfd, 0xfe, 0x36, 0xfb, 0xbe, 0xdb, 0xfe, 0x5d, 0x63, 0x02, 0x39, 0x04, 0xff, 0x6e, 0x09, 0x01, 0x49, 0x8e, 0xff, 0x1d, 0x12, 0x01, 0xb5, 0x2d, 0x01, 0xc9, 0x46, 0xff, 0x2c, 0xba, 0xff, 0x41, 0x51, 0x00, 0x76, 0xbe, 0xff, 0x46, 0x2d, 0xfe, 0xfa, 0x4f, 0xff, 0x9a, 0x88, 0xfe, 0x5d, 0x0a, 0x00, 0x14, 0xd7, 0xff, 0x23, 0xb9, 0xff, 0x00, 0xd1, 0xff, 0x4b, 0x44, 0xff, 0xb7, 0x5c, 0xff, 0x02, 0xd2, 0xfe, 0x0c, 0x96, 0xff, 0x8f, 0x14, 0x00, 0x77, 0xc7, 0x1e, 0x53, 0x07, 0x1c, 0x34, 0xb9, 0xf7, 0x6e, 0x91, 0xfa, 0x98, 0x77, 0x02, 0x23, 0xaa, 0x05, 0x47, 0xe7, 0x00, 0xb5, 0x80, 0xfc, 0x2a, 0x21, 0xfb, 0xed, 0x51, 0xff, 0x4c, 0x9b, 0x02, 0x3e, 0xa7, 0xfe, 0x69, 0x54, 0x00, 0xcd, 0x1b, 0xff, 0x1c, 0x62, 0x01, 0x73, 0xb2, 0x00, 0x60, 0xde, 0xfe, 0x82, 0x60, 0x00, 0x98, 0x4d, 0x00, 0x3f, 0x6d, 0xff, 0x63, 0x29, 0xfe, 0x13, 0xef, 0xfe, 0x05, 0x5f, 0xfe, 0x61, 0x6b, 0x00, 0xff, 0xfe, 0xff, 0xe6, 0x8b, 0xff, 0x72, 0xbc, 0xff, 0x42, 0x7c, 0xff, 0x7f, 0x1d, 0xff, 0x64, 0xac, 0xfe, 0x02, 0x9e, 0xff, 0xf1, 0x2e, 0x00, 0x06, 0xcd, 0x20, 0x7e, 0x5f, 0x1c, 0xde, 0x9f, 0xf6, 0xae, 0xfe, 0xfb, 0x13, 0xa9, 0x03, 0xfa, 0xfa, 0x04, 0xe3, 0xd3, 0xff, 0x9b, 0xf7, 0xfb, 0x6e, 0x70, 0xfb, 0x7b, 0x41, 0x00, 0xfb, 0x17, 0x03, 0x07, 0xff, 0xfd, 0xfa, 0x90, 0xff, 0x3e, 0x1e, 0xff, 0x05, 0x2b, 0x01, 0x60, 0x0e, 0x00, 0xc8, 0x8f, 0xfe, 0x17, 0xfe, 0xff, 0x14, 0x3c, 0x00, 0xfc, 0x45, 0xff, 0x5b, 0x28, 0xfe, 0x3e, 0x29, 0xff, 0xc3, 0x80, 0xfe, 0xc2, 0x6a, 0x00, 0x55, 0xc7, 0xff, 0xf2, 0xf9, 0xff, 0x38, 0x9a, 0xff, 0x38, 0x1e, 0xff, 0xc7, 0xf6, 0xfe, 0xcb, 0x86, 0xfe, 0x12, 0xa3, 0xff, 0x3c, 0x22, 0x00, 0x5d, 0xa7, 0x23, 0xbb, 0x4a, 0x1d, 0x0f, 0x5d, 0xf5, 0x4e, 0x2f, 0xfd, 0xf5, 0x63, 0x03, 0x0d, 0x68, 0x03, 0x0c, 0x08, 0xff, 0xfe, 0x07, 0xfc, 0xc9, 0x05, 0xfc, 0xc6, 0x8f, 0x01, 0x1d, 0x80, 0x03, 0x5f, 0x0e, 0xfd, 0xdd, 0x44, 0xff, 0xdb, 0x12, 0xff, 0x73, 0xc6, 0x00, 0x91, 0x45, 0xff, 0x9f, 0x51, 0xfe, 0x80, 0x14, 0xff, 0x16, 0xb0, 0xff, 0x1a, 0x89, 0xff, 0x8a, 0x08, 0xfe, 0xd2, 0xa9, 0xff, 0xd8, 0xe0, 0xfe, 0x84, 0x45, 0x00, 0xec, 0x90, 0xff, 0x93, 0x4c, 0x00, 0x44, 0x85, 0xff, 0x39, 0x7f, 0xfe, 0x6c, 0xf0, 0xfe, 0x84, 0x55, 0xfe, 0x06, 0x48, 0xff, 0x3f, 0x34, 0x00, 0xb0, 0x0d, 0x27, 0xa4, 0xdd, 0x1e, 0x25, 0x49, 0xf3, 0xb5, 0x9f, 0xfd, 0x7e, 0xde, 0x01, 0x62, 0xab, 0x01, 0x80, 0xf5, 0xfe, 0xf1, 0x6e, 0xfc, 0x6a, 0x7e, 0xfc, 0x5f, 0xa9, 0x02, 0x78, 0xc9, 0x03, 0x64, 0x04, 0xfc, 0x37, 0xcb, 0xff, 0xeb, 0xab, 0xfe, 0x73, 0xfa, 0xff, 0x6d, 0x40, 0xff, 0x79, 0x80, 0xfd, 0x45, 0x1a, 0xfe, 0x86, 0x8f, 0xff, 0xb4, 0xac, 0xff, 0x0b, 0xe5, 0xfd, 0x32, 0x1a, 0x00, 0x34, 0xf8, 0xfe, 0xba, 0x31, 0x00, 0x19, 0xc9, 0xff, 0xa3, 0x4f, 0x00, 0xaa, 0x21, 0xff, 0xe4, 0x3e, 0xfe, 0x91, 0xfc, 0xfe, 0x41, 0xb2, 0xfd, 0xf7, 0xf5, 0xfe, 0x67, 0x6e, 0x00, 0x63, 0x5e, 0x2a, 0xaa, 0xe5, 0x1e, 0x57, 0x62, 0xf1, 0x1b, 0x8a, 0xfe, 0xd0, 0x90, 0x00, 0xc3, 0x89, 0x00, 0xe5, 0x0b, 0xff, 0x9e, 0xca, 0xfc, 0x9b, 0xd4, 0xfc, 0x9a, 0x8b, 0x03, 0x72, 0xd6, 0x03, 0x35, 0xb5, 0xfb, 0x7a, 0xb2, 0x00, 0xe9, 0x09, 0xfe, 0xa9, 0xd1, 0xff, 0x67, 0x53, 0xff, 0x78, 0xde, 0xfc, 0x9f, 0xae, 0xfd, 0xd7, 0x4f, 0xff, 0xc8, 0xf8, 0xff, 0x54, 0xf3, 0xfd, 0x51, 0x30, 0x00, 0x89, 0x4f, 0xff, 0xf0, 0x65, 0x00, 0x73, 0x11, 0x00, 0x3f, 0x49, 0x00, 0xb1, 0xfe, 0xfe, 0xf4, 0x5d, 0xfe, 0xad, 0xa1, 0xfe, 0xfa, 0x6d, 0xfd, 0xae, 0xf8, 0xfe, 0x58, 0x69, 0x00, 0x99, 0xda, 0x2a, 0xa2, 0x39, 0x1e, 0x2c, 0xce, 0xf0, 0xc3, 0x80, 0xff, 0xb3, 0x4d, 0x00, 0xa9, 0x35, 0x00, 0xd2, 0x8c, 0xfe, 0xe6, 0x90, 0xfc, 0x18, 0xa9, 0xfc, 0xd9, 0x99, 0x03, 0xd0, 0x1b, 0x04, 0x88, 0xdd, 0xfb, 0x0f, 0x1b, 0x01, 0x71, 0x3c, 0xfe, 0xab, 0xb5, 0xff, 0x59, 0x57, 0xff, 0xa6, 0x50, 0xfd, 0x18, 0xeb, 0xfc, 0x83, 0xff, 0xfe, 0xbc, 0x3c, 0x00, 0x1c, 0x89, 0xfd, 0xb8, 0x85, 0x00, 0x46, 0xb8, 0xff, 0xd7, 0x86, 0x00, 0x11, 0x0a, 0x00, 0x63, 0x80, 0x00, 0x43, 0x0e, 0xff, 0x8a, 0xf0, 0xfd, 0x6c, 0xa0, 0xfe, 0x31, 0x8c, 0xfd, 0x31, 0xc9, 0xfe, 0x62, 0x26, 0x00, 0xbd, 0xff, 0x28, 0x01, 0x5a, 0x1c, 0xa0, 0x18, 0xf2, 0x40, 0xf4, 0xff, 0x8b, 0xf3, 0x00, 0x0d, 0x29, 0x01, 0xd2, 0x26, 0xfe, 0x43, 0x0e, 0xfc, 0xc4, 0x00, 0xfc, 0x7b, 0x2c, 0x03, 0x97, 0xe8, 0x03, 0x5c, 0xc9, 0xfc, 0x13, 0xa6, 0x01, 0x8c, 0x09, 0xfe, 0x91, 0x90, 0x00, 0x94, 0x95, 0xff, 0x0e, 0x73, 0xfd, 0x9c, 0x9d, 0xfd, 0x77, 0x59, 0xfe, 0xc9, 0x07, 0x00, 0x9e, 0x2b, 0xfe, 0xc6, 0x3e, 0x00, 0xbe, 0xe2, 0xff, 0x42, 0xe2, 0x00, 0xde, 0xfe, 0xff, 0x32, 0x7c, 0x00, 0xaa, 0x21, 0xff, 0x76, 0xfe, 0xfd, 0x61, 0xa6, 0xfe, 0x78, 0x1d, 0xfe, 0x17, 0xb1, 0xfe, 0xa0, 0xb5, 0xff, 0x77, 0x72, 0x1f, 0xa3, 0x75, 0x1b, 0xc1, 0xdb, 0xf7, 0x24, 0x51, 0xfe, 0x00, 0x8e, 0x03, 0x5a, 0x96, 0x01, 0x93, 0x47, 0xff, 0x25, 0xfb, 0xfc, 0x42, 0x55, 0xfd, 0x51, 0xd9, 0x02, 0xbb, 0x4f, 0x03, 0xa0, 0xf8, 0xfd, 0xd4, 0xf2, 0xff, 0x88, 0x7e, 0xff, 0xb4, 0x61, 0x00, 0x07, 0xd8, 0xff, 0xc3, 0xa6, 0xfe, 0xa2, 0xfb, 0xfd, 0x74, 0x1e, 0xff, 0x57, 0xd1, 0xff, 0x6d, 0x17, 0xfe, 0x19, 0xf5, 0xff, 0x22, 0xf7, 0xff, 0x12, 0xd5, 0x00, 0x06, 0xc4, 0x00, 0x9b, 0xaa, 0x00, 0x16, 0x0e, 0xff, 0x74, 0xa7, 0xfd, 0xab, 0x04, 0xfe, 0xd3, 0x8a, 0xfe, 0x64, 0xdc, 0xff, 0xbd, 0x92, 0x00, 0x06, 0x09, 0x0a, 0x0a, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x07, 0x07, 0x08, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x10, 0x11, 0x11, 0x12, 0x14, 0x13, 0x12, 0x11, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x13, 0x14, 0x17, 0x15, 0x15, 0x14, 0x13, 0x12, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x12, 0x13, 0x14, 0x14, 0x15, 0x16, 0x1b, 0x18, 0x17, 0x16, 0x15, 0x15, 0x14, 0x13, 0x12, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x06, 0x06, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x15, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1a, 0x19, 0x18, 0x17, 0x17, 0x16, 0x15, 0x14, 0x13, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0c, 0x0b, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x06, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x1f, 0x1b, 0x1a, 0x1a, 0x19, 0x18, 0x18, 0x17, 0x16, 0x15, 0x15, 0x14, 0x13, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x05, 0x04, 0x04, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1b, 0x1b, 0x1a, 0x19, 0x19, 0x18, 0x17, 0x16, 0x16, 0x15, 0x14, 0x13, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x06, 0x05, 0x04, 0x04, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0b, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1f, 0x1b, 0x1a, 0x19, 0x18, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x17, 0x18, 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x1f, 0x1b, 0x1a, 0x19, 0x18, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x06, 0x05, 0x04, 0x04, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1b, 0x1d, 0x1d, 0x1d, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x06, 0x05, 0x05, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0a, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x04, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x19, 0x19, 0x18, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x04, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x04, 0x04, 0x05, 0x06, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x09, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x08, 0x09, 0x0a, 0x0b, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x07, 0x08, 0x06, }; ================================================ FILE: project/lib/custom/openal/build/bsinc_inc.h ================================================ /* Generated by bsincgen, do not edit! */ #pragma once static_assert(BSINC_SCALE_COUNT == 16, "Unexpected BSINC_SCALE_COUNT value!"); static_assert(BSINC_PHASE_COUNT == 32, "Unexpected BSINC_PHASE_COUNT value!"); namespace { struct BSincTable { const float scaleBase, scaleRange; const unsigned int m[BSINC_SCALE_COUNT]; const unsigned int filterOffset[BSINC_SCALE_COUNT]; const float *Tab; }; /* This 23rd order filter has a rejection of -60dB, yielding a transition width * of ~0.158 (normalized frequency). Order increases when downsampling to a * limit of one octave, after which the quality of the filter (transition * width) suffers to reduce the CPU cost. The bandlimiting will cut all sound * after downsampling by ~3.67 octaves. */ alignas(16) constexpr float bsinc24_tab[81920] = { /* 0, 0 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.796439624e-04f, -7.229492121e-04f, -9.648886183e-04f, -1.152303939e-03f, -1.213307251e-03f, -1.059372565e-03f, -5.898051232e-04f, +3.014766656e-04f, +1.717195100e-03f, +3.746628758e-03f, +6.455051836e-03f, +9.873721368e-03f, +1.399149756e-02f, +1.874912662e-02f, +2.403703938e-02f, +2.969723410e-02f, +3.552944303e-02f, +4.130136645e-02f, +4.676233873e-02f, +5.165941558e-02f, +5.575458332e-02f, +5.884162493e-02f, +6.076115668e-02f, +6.141247912e-02f, +6.076115668e-02f, +5.884162493e-02f, +5.575458332e-02f, +5.165941558e-02f, +4.676233873e-02f, +4.130136645e-02f, +3.552944303e-02f, +2.969723410e-02f, +2.403703938e-02f, +1.874912662e-02f, +1.399149756e-02f, +9.873721368e-03f, +6.455051836e-03f, +3.746628758e-03f, +1.717195100e-03f, +3.014766656e-04f, -5.898051232e-04f, -1.059372565e-03f, -1.213307251e-03f, -1.152303939e-03f, -9.648886183e-04f, -7.229492121e-04f, -4.796439624e-04f, -2.694957250e-04f, +7.201639933e-06f, +7.808824226e-06f, +7.060810728e-06f, +4.363309672e-06f, -8.494304210e-07f, -9.042191405e-06f, -2.050403146e-05f, -3.527979396e-05f, -5.311682607e-05f, -7.343513463e-05f, -9.532739769e-05f, -1.175924836e-04f, -1.388026701e-04f, -1.574009775e-04f, -1.718213704e-04f, -1.806214921e-04f, -1.826154788e-04f, -1.769935670e-04f, -1.634158161e-04f, -1.420693226e-04f, -1.136816124e-04f, -7.948714106e-05f, -4.114853805e-05f, -6.388853996e-07f, +3.990461040e-05f, +7.834217668e-05f, +1.126932717e-04f, +1.412836031e-04f, +1.628639195e-04f, +1.766901015e-04f, +1.825581262e-04f, +1.807921168e-04f, +1.721884081e-04f, +1.579228174e-04f, +1.394316620e-04f, +1.182791553e-04f, +9.602447380e-05f, +7.410099365e-05f, +5.371811474e-05f, +3.579302665e-05f, +2.091612006e-05f, +9.349966785e-06f, +1.058315911e-06f, -4.241239355e-06f, -7.009111338e-06f, -7.809025104e-06f, -7.235395433e-06f, -5.850110091e-06f, /* 0, 1 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.724423225e-04f, -7.151403879e-04f, -9.578278075e-04f, -1.147940629e-03f, -1.214156681e-03f, -1.068414757e-03f, -6.103091546e-04f, +2.661968716e-04f, +1.664078274e-03f, +3.673193623e-03f, +6.359724439e-03f, +9.756128885e-03f, +1.385269489e-02f, +1.859172564e-02f, +2.386521801e-02f, +2.951661261e-02f, +3.534682755e-02f, +4.112437288e-02f, +4.659892291e-02f, +5.151734626e-02f, +5.564090171e-02f, +5.876213779e-02f, +6.072000814e-02f, +6.141184024e-02f, +6.080106129e-02f, +5.891996710e-02f, +5.586727659e-02f, +5.180069918e-02f, +4.692520265e-02f, +4.147805655e-02f, +3.571200116e-02f, +2.987802621e-02f, +2.420922778e-02f, +1.890704943e-02f, +1.413092922e-02f, +9.992000524e-03f, +6.551076310e-03f, +3.820729751e-03f, +1.770913215e-03f, +3.372696922e-04f, -5.688890031e-04f, -1.050022599e-03f, -1.212248935e-03f, -1.156545178e-03f, -9.718977296e-04f, -7.307582372e-04f, -4.868793578e-04f, -2.753458351e-04f, +7.167114757e-06f, +7.807302866e-06f, +7.110604110e-06f, +4.482915520e-06f, -6.434694612e-07f, -8.737628506e-06f, -2.009520355e-05f, -3.476957772e-05f, -5.251798750e-05f, -7.277083693e-05f, -9.463070442e-05f, -1.169047926e-04f, -1.381711284e-04f, -1.568750475e-04f, -1.714488231e-04f, -1.804441899e-04f, -1.826653555e-04f, -1.772892198e-04f, -1.639600817e-04f, -1.428481242e-04f, -1.146642473e-04f, -8.062803289e-05f, -4.239033203e-05f, -1.916622938e-06f, +3.865861306e-05f, +7.719319639e-05f, +1.116992702e-04f, +1.404909963e-04f, +1.623044060e-04f, +1.763788209e-04f, +1.824932796e-04f, +1.809560329e-04f, +1.725498952e-04f, +1.584405205e-04f, +1.400580555e-04f, +1.189647611e-04f, +9.672189189e-05f, +7.476838129e-05f, +5.432183054e-05f, +3.630926307e-05f, +2.133146638e-05f, +9.660960103e-06f, +1.270137912e-06f, -4.116688316e-06f, -6.955487723e-06f, -7.807887439e-06f, -7.268365081e-06f, -5.900645350e-06f, /* 0, 2 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.652752077e-04f, -7.073330850e-04f, -9.507172034e-04f, -1.143457714e-03f, -1.214800150e-03f, -1.077152385e-03f, -6.304043582e-04f, +2.314272939e-04f, +1.611560287e-03f, +3.600422786e-03f, +6.265093734e-03f, +9.639224092e-03f, +1.371452376e-02f, +1.843485059e-02f, +2.369376918e-02f, +2.933616842e-02f, +3.516416220e-02f, +4.094708366e-02f, +4.643496283e-02f, +5.137449813e-02f, +5.552623746e-02f, +5.868150975e-02f, +6.067761781e-02f, +6.140992362e-02f, +6.083971990e-02f, +5.899716030e-02f, +5.597897586e-02f, +5.194119018e-02f, +4.708750705e-02f, +4.165443537e-02f, +3.589449444e-02f, +3.005898225e-02f, +2.438177768e-02f, +1.906548995e-02f, +1.427098728e-02f, +1.011096528e-02f, +6.647798202e-03f, +3.895498133e-03f, +1.825235046e-03f, +3.735789553e-04f, -5.475575367e-04f, -1.040361638e-03f, -1.210978797e-03f, -1.160661867e-03f, -9.788532173e-04f, -7.385661247e-04f, -4.941477229e-04f, -2.812464804e-04f, +7.131836001e-06f, +7.804479049e-06f, +7.158509723e-06f, +4.600073246e-06f, -4.404208828e-07f, -8.436272395e-06f, -1.968963904e-05f, -3.426239038e-05f, -5.192162170e-05f, -7.210813297e-05f, -9.393443463e-05f, -1.162161284e-04f, -1.375370856e-04f, -1.563450745e-04f, -1.710708076e-04f, -1.802602417e-04f, -1.827077745e-04f, -1.775770628e-04f, -1.644967024e-04f, -1.436199778e-04f, -1.156411315e-04f, -8.176479580e-05f, -4.362992850e-05f, -3.194260694e-06f, +3.741061019e-05f, +7.604025715e-05f, +1.106996535e-04f, +1.396915333e-04f, +1.617372905e-04f, +1.760597234e-04f, +1.824209217e-04f, +1.811132097e-04f, +1.729057912e-04f, +1.589540398e-04f, +1.406818019e-04f, +1.196492544e-04f, +9.741961088e-05f, +7.543726457e-05f, +5.492795017e-05f, +3.682849015e-05f, +2.175006713e-05f, +9.975176579e-06f, +1.484908233e-06f, -3.989640402e-06f, -6.899921698e-06f, -7.805393139e-06f, -7.300532620e-06f, -5.950853705e-06f, /* 0, 3 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.581433717e-04f, -6.995286060e-04f, -9.435586937e-04f, -1.138857640e-03f, -1.215240571e-03f, -1.085588658e-03f, -6.500939972e-04f, +1.971649035e-04f, +1.559638665e-03f, +3.528314653e-03f, +6.171159300e-03f, +9.523007964e-03f, +1.357698668e-02f, +1.827850552e-02f, +2.352269837e-02f, +2.915590817e-02f, +3.498145442e-02f, +4.076950660e-02f, +4.627046613e-02f, +5.123087815e-02f, +5.541059633e-02f, +5.859974496e-02f, +6.063398788e-02f, +6.140672936e-02f, +6.087713051e-02f, +5.907320056e-02f, +5.608967552e-02f, +5.208088171e-02f, +4.724924434e-02f, +4.183049510e-02f, +3.607691536e-02f, +3.024009546e-02f, +2.455468347e-02f, +1.922444399e-02f, +1.441166908e-02f, +1.023061454e-02f, +6.745217813e-03f, +3.970935397e-03f, +1.880162996e-03f, +4.104074455e-04f, -5.258074696e-04f, -1.030386462e-03f, -1.209493888e-03f, -1.164651507e-03f, -9.857531390e-04f, -7.463715178e-04f, -5.014482555e-04f, -2.871973341e-04f, +7.095819678e-06f, +7.800370763e-06f, +7.204545832e-06f, +4.714799292e-06f, -2.402723706e-07f, -8.138117147e-06f, -1.928734033e-05f, -3.375824403e-05f, -5.132775100e-05f, -7.144705488e-05f, -9.323862873e-05f, -1.155265373e-04f, -1.369005902e-04f, -1.558111055e-04f, -1.706873651e-04f, -1.800696793e-04f, -1.827427547e-04f, -1.778570993e-04f, -1.650256649e-04f, -1.443848538e-04f, -1.166122207e-04f, -8.289737375e-05f, -4.486726377e-05f, -4.471732158e-06f, +3.616066610e-05f, +7.488341620e-05f, +1.096944677e-04f, +1.388852458e-04f, +1.611625883e-04f, +1.757328077e-04f, +1.823410354e-04f, +1.812636169e-04f, +1.732560555e-04f, +1.594633288e-04f, +1.413028526e-04f, +1.203325886e-04f, +9.811758948e-05f, +7.610761022e-05f, +5.553645002e-05f, +3.735069452e-05f, +2.217191876e-05f, +1.029262119e-05f, +1.702638511e-06f, -3.860079559e-06f, -6.842395104e-06f, -7.801524077e-06f, -7.331881716e-06f, -6.000721856e-06f, /* 0, 4 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.510475520e-04f, -6.917282352e-04f, -9.363541479e-04f, -1.134142841e-03f, -1.215480844e-03f, -1.093726775e-03f, -6.693813375e-04f, +1.634066595e-04f, +1.508310914e-03f, +3.456867598e-03f, +6.077920671e-03f, +9.407481427e-03f, +1.344008609e-02f, +1.812269441e-02f, +2.335201101e-02f, +2.897583849e-02f, +3.479871167e-02f, +4.059164950e-02f, +4.610544046e-02f, +5.108649330e-02f, +5.529398411e-02f, +5.851684758e-02f, +6.058912062e-02f, +6.140225762e-02f, +6.091329118e-02f, +5.914808397e-02f, +5.619936998e-02f, +5.221976696e-02f, +4.741040693e-02f, +4.200622791e-02f, +3.625925639e-02f, +3.042135907e-02f, +2.472793953e-02f, +1.938390732e-02f, +1.455297193e-02f, +1.035094713e-02f, +6.843335402e-03f, +4.047043008e-03f, +1.935699446e-03f, +4.477581400e-04f, -5.036355508e-04f, -1.020093841e-03f, -1.207791250e-03f, -1.168511587e-03f, -9.925955341e-04f, -7.541730419e-04f, -5.087801372e-04f, -2.931980560e-04f, +7.059081716e-06f, +7.794995958e-06f, +7.248730722e-06f, +4.827110191e-06f, -4.301144525e-08f, -7.843156605e-06f, -1.888830955e-05f, -3.325715046e-05f, -5.073639743e-05f, -7.078763450e-05f, -9.254332692e-05f, -1.148360655e-04f, -1.362616909e-04f, -1.552731878e-04f, -1.702985375e-04f, -1.798725349e-04f, -1.827703153e-04f, -1.781293332e-04f, -1.655469566e-04f, -1.451427229e-04f, -1.175774709e-04f, -8.402571100e-05f, -4.610227435e-05f, -5.748970827e-06f, +3.490884522e-05f, +7.372273107e-05f, +1.086837592e-04f, +1.380721657e-04f, +1.605803153e-04f, +1.753980729e-04f, +1.822536042e-04f, +1.814072243e-04f, +1.736006478e-04f, +1.599683410e-04f, +1.419211588e-04f, +1.210147169e-04f, +9.881578617e-05f, +7.677938468e-05f, +5.614730615e-05f, +3.787586248e-05f, +2.259701741e-05f, +1.061329869e-05f, +1.923340206e-06f, -3.727989835e-06f, -6.782889817e-06f, -7.796262099e-06f, -7.362395954e-06f, -6.050236397e-06f, /* 0, 5 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.439884703e-04f, -6.839332393e-04f, -9.291054171e-04f, -1.129315731e-03f, -1.215523855e-03f, -1.101569931e-03f, -6.882696471e-04f, +1.301495090e-04f, +1.457574517e-03f, +3.386079964e-03f, +5.985377344e-03f, +9.292645361e-03f, +1.330382439e-02f, +1.796742122e-02f, +2.318171247e-02f, +2.879596596e-02f, +3.461594135e-02f, +4.041352017e-02f, +4.593989350e-02f, +5.094135058e-02f, +5.517640664e-02f, +5.843282187e-02f, +6.054301834e-02f, +6.139650865e-02f, +6.094820002e-02f, +5.922180670e-02f, +5.630805374e-02f, +5.235783912e-02f, +4.757098725e-02f, +4.218162598e-02f, +3.644151000e-02f, +3.060276630e-02f, +2.490154017e-02f, +1.954387566e-02f, +1.469489309e-02f, +1.047196184e-02f, +6.942151189e-03f, +4.123822392e-03f, +1.991846752e-03f, +4.856340025e-04f, -4.810385334e-04f, -1.009480542e-03f, -1.205867910e-03f, -1.172239576e-03f, -9.993784239e-04f, -7.619693040e-04f, -5.161425332e-04f, -2.992482924e-04f, +7.021637960e-06f, +7.788372543e-06f, +7.291082698e-06f, +4.937022566e-06f, +1.513745344e-07f, -7.551384381e-06f, -1.849254854e-05f, -3.275912115e-05f, -5.014758269e-05f, -7.012990339e-05f, -9.184856916e-05f, -1.141447587e-04f, -1.356204362e-04f, -1.547313687e-04f, -1.699043667e-04f, -1.796688410e-04f, -1.827904761e-04f, -1.783937689e-04f, -1.660605652e-04f, -1.458935566e-04f, -1.185368387e-04f, -8.514975212e-05f, -4.733489691e-05f, -7.025910221e-06f, +3.365521214e-05f, +7.255825958e-05f, +1.076675748e-04f, +1.372523257e-04f, +1.599904879e-04f, +1.750555188e-04f, +1.821586121e-04f, +1.815440025e-04f, +1.739395284e-04f, +1.604690300e-04f, +1.425366721e-04f, +1.216955923e-04f, +9.951415924e-05f, +7.745255413e-05f, +5.676049434e-05f, +3.840398002e-05f, +2.302535893e-05f, +1.093721356e-05f, +2.147024604e-06f, -3.593355386e-06f, -6.721387745e-06f, -7.789589021e-06f, -7.392058845e-06f, -6.099383813e-06f, /* 0, 6 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.369668323e-04f, -6.761448667e-04f, -9.218143344e-04f, -1.124378708e-03f, -1.215372481e-03f, -1.109121316e-03f, -7.067621956e-04f, +9.739038789e-05f, +1.407426934e-03f, +3.315950061e-03f, +5.893528775e-03f, +9.178500602e-03f, +1.316820396e-02f, +1.781268985e-02f, +2.301180811e-02f, +2.861629712e-02f, +3.443315088e-02f, +4.023512640e-02f, +4.577383294e-02f, +5.079545702e-02f, +5.505786980e-02f, +5.834767212e-02f, +6.049568345e-02f, +6.138948274e-02f, +6.098185524e-02f, +5.929436496e-02f, +5.641572132e-02f, +5.249509145e-02f, +4.773097773e-02f, +4.235668150e-02f, +3.662366861e-02f, +3.078431030e-02f, +2.507547970e-02f, +1.970434469e-02f, +1.483742976e-02f, +1.059365744e-02f, +7.041665348e-03f, +4.201274946e-03f, +2.048607246e-03f, +5.240379825e-04f, -4.580131745e-04f, -9.985433285e-04f, -1.203720885e-03f, -1.175832932e-03f, -1.006099812e-03f, -7.697588930e-04f, -5.235345920e-04f, -3.053476762e-04f, +6.983504168e-06f, +7.780518386e-06f, +7.331620083e-06f, +5.044553124e-06f, +3.428983692e-07f, -7.262793860e-06f, -1.810005886e-05f, -3.226416726e-05f, -4.956132816e-05f, -6.947389279e-05f, -9.115439517e-05f, -1.134526627e-04f, -1.349768747e-04f, -1.541856957e-04f, -1.695048947e-04f, -1.794586306e-04f, -1.828032572e-04f, -1.786504114e-04f, -1.665664791e-04f, -1.466373266e-04f, -1.194902810e-04f, -8.626944199e-05f, -4.856506828e-05f, -8.302483877e-06f, +3.239983159e-05f, +7.139005983e-05f, +1.066459616e-04f, +1.364257588e-04f, +1.593931230e-04f, +1.747051455e-04f, +1.820560435e-04f, +1.816739221e-04f, +1.742726574e-04f, +1.609653496e-04f, +1.431493437e-04f, +1.223751678e-04f, +1.002126668e-04f, +7.812708446e-05f, +5.737599002e-05f, +3.893503281e-05f, +2.345693889e-05f, +1.126437005e-05f, +2.373702808e-06f, -3.456160473e-06f, -6.657870832e-06f, -7.781486633e-06f, -7.420853824e-06f, -6.148150484e-06f, /* 0, 7 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.299833282e-04f, -6.683643483e-04f, -9.144827144e-04f, -1.119334155e-03f, -1.215029582e-03f, -1.116384110e-03f, -7.248622545e-04f, +6.512622063e-05f, +1.357865606e-03f, +3.246476168e-03f, +5.802374380e-03f, +9.065047940e-03f, +1.303322708e-02f, +1.765850416e-02f, +2.284230321e-02f, +2.843683849e-02f, +3.425034762e-02f, +4.005647599e-02f, +4.560726646e-02f, +5.064881970e-02f, +5.493837952e-02f, +5.826140268e-02f, +6.044711838e-02f, +6.138118026e-02f, +6.101425507e-02f, +5.936575502e-02f, +5.652236728e-02f, +5.263151721e-02f, +4.789037086e-02f, +4.253138664e-02f, +3.680572465e-02f, +3.096598422e-02f, +2.524975236e-02f, +1.986531004e-02f, +1.498057911e-02f, +1.071603260e-02f, +7.141878015e-03f, +4.279402031e-03f, +2.105983236e-03f, +5.629730153e-04f, -4.345562356e-04f, -9.872789584e-04f, -1.201347182e-03f, -1.179289092e-03f, -1.012757683e-03f, -7.775403796e-04f, -5.309554459e-04f, -3.114958267e-04f, +6.944696012e-06f, +7.771451312e-06f, +7.370361214e-06f, +5.149718660e-06f, +5.315730174e-07f, -6.977378204e-06f, -1.771084180e-05f, -3.177229965e-05f, -4.897765493e-05f, -6.881963368e-05f, -9.046084446e-05f, -1.127598233e-04f, -1.343310549e-04f, -1.536362162e-04f, -1.691001640e-04f, -1.792419368e-04f, -1.828086792e-04f, -1.788992659e-04f, -1.670646871e-04f, -1.473740055e-04f, -1.204377551e-04f, -8.738472583e-05f, -4.979272550e-05f, -9.578625365e-06f, +3.114276840e-05f, +7.021819019e-05f, +1.056189673e-04f, +1.355924986e-04f, +1.587882379e-04f, +1.743469537e-04f, +1.819458831e-04f, +1.817969543e-04f, +1.745999956e-04f, +1.614572536e-04f, +1.437591249e-04f, +1.230533962e-04f, +1.009112666e-04f, +7.880294129e-05f, +5.799376832e-05f, +3.946900620e-05f, +2.389175254e-05f, +1.159477218e-05f, +2.603385740e-06f, -3.316389466e-06f, -6.592321062e-06f, -7.771936700e-06f, -7.448764252e-06f, -6.196522682e-06f, /* 0, 8 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.230386322e-04f, -6.605928970e-04f, -9.071123531e-04f, -1.114184437e-03f, -1.214498009e-03f, -1.123361488e-03f, -7.425730963e-04f, +3.335392098e-05f, +1.308887951e-03f, +3.177656534e-03f, +5.711913535e-03f, +8.952288116e-03f, +1.289889603e-02f, +1.750486794e-02f, +2.267320305e-02f, +2.825759655e-02f, +3.406753894e-02f, +3.987757672e-02f, +4.544020177e-02f, +5.050144569e-02f, +5.481794176e-02f, +5.817401795e-02f, +6.039732565e-02f, +6.137160163e-02f, +6.104539784e-02f, +5.943597321e-02f, +5.662798625e-02f, +5.276710971e-02f, +4.804915909e-02f, +4.270573360e-02f, +3.698767054e-02f, +3.114778118e-02f, +2.542435236e-02f, +2.002676730e-02f, +1.512433823e-02f, +1.083908600e-02f, +7.242789281e-03f, +4.358204972e-03f, +2.163977005e-03f, +6.024420215e-04f, -4.106644831e-04f, -9.756841862e-04f, -1.198743797e-03f, -1.182605482e-03f, -1.019350004e-03f, -7.853123163e-04f, -5.384042101e-04f, -3.176923494e-04f, +6.905229076e-06f, +7.761189099e-06f, +7.407324442e-06f, +5.252536049e-06f, +7.174115923e-07f, -6.695130348e-06f, -1.732489835e-05f, -3.128352883e-05f, -4.839658372e-05f, -6.816715673e-05f, -8.976795629e-05f, -1.120662859e-04f, -1.336830254e-04f, -1.530829779e-04f, -1.686902173e-04f, -1.790187932e-04f, -1.828067631e-04f, -1.791403384e-04f, -1.675551786e-04f, -1.481035659e-04f, -1.213792189e-04f, -8.849554918e-05f, -5.101780578e-05f, -1.085426828e-05f, +2.988408757e-05f, +6.904270931e-05f, +1.045866398e-04f, +1.347525789e-04f, +1.581758507e-04f, +1.739809448e-04f, +1.818281164e-04f, +1.819130706e-04f, +1.749215037e-04f, +1.619446962e-04f, +1.443659673e-04f, +1.237302304e-04f, +1.016099164e-04f, +7.948008996e-05f, +5.861380406e-05f, +4.000588521e-05f, +2.432979486e-05f, +1.192842370e-05f, +2.836084140e-06f, -3.174026850e-06f, -6.524720458e-06f, -7.760920964e-06f, -7.475773419e-06f, -6.244486575e-06f, /* 0, 9 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.161334031e-04f, -6.528317079e-04f, -8.997050287e-04f, -1.108931901e-03f, -1.213780598e-03f, -1.130056618e-03f, -7.598979946e-04f, +2.070392152e-06f, +1.260491367e-03f, +3.109489377e-03f, +5.622145579e-03f, +8.840221830e-03f, +1.276521300e-02f, +1.735178496e-02f, +2.250451283e-02f, +2.807857776e-02f, +3.388473218e-02f, +3.969843638e-02f, +4.527264659e-02f, +5.035334212e-02f, +5.469656255e-02f, +5.808552240e-02f, +6.034630785e-02f, +6.136074737e-02f, +6.107528192e-02f, +5.950501592e-02f, +5.673257289e-02f, +5.290186229e-02f, +4.820733494e-02f, +4.287971454e-02f, +3.716949865e-02f, +3.132969425e-02f, +2.559927386e-02f, +2.018871199e-02f, +1.526870420e-02f, +1.096281623e-02f, +7.344399198e-03f, +4.437685062e-03f, +2.222590809e-03f, +6.424479067e-04f, -3.863346882e-04f, -9.637557625e-04f, -1.195907712e-03f, -1.185779509e-03f, -1.025874724e-03f, -7.930732373e-04f, -5.458799835e-04f, -3.239368359e-04f, +6.865118852e-06f, +7.749749481e-06f, +7.442528130e-06f, +5.353022246e-06f, +9.004273601e-07f, -6.416043006e-06f, -1.694222924e-05f, -3.079786504e-05f, -4.781813497e-05f, -6.751649231e-05f, -8.907576968e-05f, -1.113720959e-04f, -1.330328344e-04f, -1.525260286e-04f, -1.682750973e-04f, -1.787892338e-04f, -1.827975304e-04f, -1.793736353e-04f, -1.680379435e-04f, -1.488259813e-04f, -1.223146305e-04f, -8.960185788e-05f, -5.224024653e-05f, -1.212934627e-05f, +2.862385418e-05f, +6.786367609e-05f, +1.035490276e-04f, +1.339060344e-04f, +1.575559798e-04f, +1.736071204e-04f, +1.817027291e-04f, +1.820222430e-04f, +1.752371429e-04f, +1.624276316e-04f, +1.449698222e-04f, +1.244056229e-04f, +1.023085737e-04f, +8.015849554e-05f, +5.923607174e-05f, +4.054565455e-05f, +2.477106051e-05f, +1.226532812e-05f, +3.071808559e-06f, -3.029057220e-06f, -6.455051086e-06f, -7.748421147e-06f, -7.501864540e-06f, -6.292028226e-06f, /* 0,10 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.092682842e-04f, -6.450819584e-04f, -8.922625006e-04f, -1.103578878e-03f, -1.212880170e-03f, -1.136472661e-03f, -7.768402239e-04f, -2.872747289e-05f, +1.212673232e-03f, +3.041972885e-03f, +5.533069809e-03f, +8.728849735e-03f, +1.263218017e-02f, +1.719925894e-02f, +2.233623773e-02f, +2.789978852e-02f, +3.370193465e-02f, +3.951906275e-02f, +4.510460865e-02f, +5.020451614e-02f, +5.457424791e-02f, +5.799592054e-02f, +6.029406760e-02f, +6.134861802e-02f, +6.110390578e-02f, +5.957287960e-02f, +5.683612192e-02f, +5.303576832e-02f, +4.836489092e-02f, +4.305332166e-02f, +3.735120138e-02f, +3.151171649e-02f, +2.577451100e-02f, +2.035113962e-02f, +1.541367402e-02f, +1.108722185e-02f, +7.446707771e-03f, +4.517843558e-03f, +2.281826881e-03f, +6.829935612e-04f, -3.615636277e-04f, -9.514904344e-04f, -1.192835904e-03f, -1.188808566e-03f, -1.032329775e-03f, -8.008216584e-04f, -5.533818481e-04f, -3.302288642e-04f, +6.824380746e-06f, +7.737150143e-06f, +7.475990650e-06f, +5.451194286e-06f, +1.080633738e-06f, -6.140108674e-06f, -1.656283491e-05f, -3.031531818e-05f, -4.724232877e-05f, -6.686767051e-05f, -8.838432342e-05f, -1.106772984e-04f, -1.323805306e-04f, -1.519654159e-04f, -1.678548470e-04f, -1.785532927e-04f, -1.827810030e-04f, -1.795991635e-04f, -1.685129721e-04f, -1.495412255e-04f, -1.232439486e-04f, -9.070359815e-05f, -5.345998535e-05f, -1.340379299e-05f, +2.736213345e-05f, +6.668114971e-05f, +1.025061794e-04f, +1.330529000e-04f, +1.569286442e-04f, +1.732254828e-04f, +1.815697075e-04f, +1.821244437e-04f, +1.755468747e-04f, +1.629060141e-04f, +1.455706410e-04f, +1.250795263e-04f, +1.030071957e-04f, +8.083812284e-05f, +5.986054554e-05f, +4.108829861e-05f, +2.521554387e-05f, +1.260548869e-05f, +3.310569361e-06f, -2.881465290e-06f, -6.383295056e-06f, -7.734418951e-06f, -7.527020764e-06f, -6.339133594e-06f, /* 0,11 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -4.024439035e-04f, -6.373448083e-04f, -8.847865099e-04f, -1.098127684e-03f, -1.211799537e-03f, -1.142612770e-03f, -7.934030588e-04f, -5.904279106e-05f, +1.165430903e-03f, +2.975105214e-03f, +5.444685486e-03f, +8.618172436e-03f, +1.249979964e-02f, +1.704729352e-02f, +2.216838289e-02f, +2.772123523e-02f, +3.351915364e-02f, +3.933946359e-02f, +4.493609568e-02f, +5.005497492e-02f, +5.445100397e-02f, +5.790521695e-02f, +6.024060761e-02f, +6.133521423e-02f, +6.113126791e-02f, +5.963956075e-02f, +5.693862809e-02f, +5.316882122e-02f, +4.852181957e-02f, +4.322654714e-02f, +3.753277109e-02f, +3.169384093e-02f, +2.595005788e-02f, +2.051404564e-02f, +1.555924466e-02f, +1.121230138e-02f, +7.549714967e-03f, +4.598681680e-03f, +2.341687426e-03f, +7.240818599e-04f, -3.363480838e-04f, -9.388849457e-04f, -1.189525335e-03f, -1.191690031e-03f, -1.038713070e-03f, -8.085560774e-04f, -5.609088688e-04f, -3.365679977e-04f, +6.783030070e-06f, +7.723408718e-06f, +7.507730380e-06f, +5.547069277e-06f, +1.258044290e-06f, -5.867319628e-06f, -1.618671553e-05f, -2.983589784e-05f, -4.666918493e-05f, -6.622072111e-05f, -8.769365605e-05f, -1.099819384e-04f, -1.317261621e-04f, -1.514011878e-04f, -1.674295098e-04f, -1.783110046e-04f, -1.827572033e-04f, -1.798169304e-04f, -1.689802556e-04f, -1.502492729e-04f, -1.241671324e-04f, -9.180071650e-05f, -5.467696004e-05f, -1.467754219e-05f, +2.609899070e-05f, +6.549518960e-05f, +1.014581444e-04f, +1.321932110e-04f, +1.562938633e-04f, +1.728360349e-04f, +1.814290384e-04f, +1.822196454e-04f, +1.758506607e-04f, +1.633797983e-04f, +1.461683752e-04f, +1.257518931e-04f, +1.037057395e-04f, +8.151893637e-05f, +6.048719935e-05f, +4.163380147e-05f, +2.566323901e-05f, +1.294890841e-05f, +3.552376721e-06f, -2.731235893e-06f, -6.309434527e-06f, -7.718896060e-06f, -7.551225169e-06f, -6.385788534e-06f, /* 0,12 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.956608734e-04f, -6.296213996e-04f, -8.772787795e-04f, -1.092580615e-03f, -1.210541492e-03f, -1.148480090e-03f, -8.095897743e-04f, -8.887868891e-05f, +1.118761719e-03f, +2.908884493e-03f, +5.356991830e-03f, +8.508190498e-03f, +1.236807348e-02f, +1.689589233e-02f, +2.200095338e-02f, +2.754292423e-02f, +3.333639644e-02f, +3.915964666e-02f, +4.476711542e-02f, +4.990472564e-02f, +5.432683683e-02f, +5.781341623e-02f, +6.018593065e-02f, +6.132053668e-02f, +6.115736690e-02f, +5.970505594e-02f, +5.704008624e-02f, +5.330101443e-02f, +4.867811343e-02f, +4.339938318e-02f, +3.771420013e-02f, +3.187606058e-02f, +2.612590854e-02f, +2.067742544e-02f, +1.570541304e-02f, +1.133805327e-02f, +7.653420706e-03f, +4.680200617e-03f, +2.402174625e-03f, +7.657156613e-04f, -3.106848448e-04f, -9.259360373e-04f, -1.185972958e-03f, -1.194421267e-03f, -1.045022505e-03f, -8.162749735e-04f, -5.684600940e-04f, -3.429537863e-04f, +6.741082046e-06f, +7.708542790e-06f, +7.537765705e-06f, +5.640664402e-06f, +1.432672729e-06f, -5.597667930e-06f, -1.581387101e-05f, -2.935961333e-05f, -4.609872289e-05f, -6.557567358e-05f, -8.700380586e-05f, -1.092860609e-04f, -1.310697774e-04f, -1.508333922e-04f, -1.669991291e-04f, -1.780624044e-04f, -1.827261540e-04f, -1.800269439e-04f, -1.694397852e-04f, -1.509500984e-04f, -1.250841413e-04f, -9.289315982e-05f, -5.589110862e-05f, -1.595052764e-05f, +2.483449136e-05f, +6.430585546e-05f, +1.004049721e-04f, +1.313270034e-04f, +1.556516572e-04f, +1.724387800e-04f, +1.812807091e-04f, +1.823078213e-04f, +1.761484629e-04f, +1.638489388e-04f, +1.467629763e-04f, +1.264226756e-04f, +1.044041619e-04f, +8.220090042e-05f, +6.111600674e-05f, +4.218214685e-05f, +2.611413971e-05f, +1.329559004e-05f, +3.797240619e-06f, -2.578353981e-06f, -6.233451705e-06f, -7.701834142e-06f, -7.574460766e-06f, -6.431978801e-06f, /* 0,13 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.889197914e-04f, -6.219128568e-04f, -8.697410138e-04f, -1.086939950e-03f, -1.209108819e-03f, -1.154077757e-03f, -8.254036453e-04f, -1.182383022e-04f, +1.072662996e-03f, +2.843308820e-03f, +5.269988024e-03f, +8.398904437e-03f, +1.223700370e-02f, +1.674505894e-02f, +2.183395425e-02f, +2.736486182e-02f, +3.315367029e-02f, +3.897961971e-02f, +4.459767564e-02f, +4.975377555e-02f, +5.420175269e-02f, +5.772052307e-02f, +6.013003955e-02f, +6.130458616e-02f, +6.118220139e-02f, +5.976936179e-02f, +5.714049121e-02f, +5.343234143e-02f, +4.883376509e-02f, +4.357182196e-02f, +3.789548084e-02f, +3.205836840e-02f, +2.630205700e-02f, +2.084127438e-02f, +1.585217601e-02f, +1.146447595e-02f, +7.757824868e-03f, +4.762401517e-03f, +2.463290632e-03f, +8.078978082e-04f, -2.845707051e-04f, -9.126404473e-04f, -1.182175717e-03f, -1.196999621e-03f, -1.051255956e-03f, -8.239768076e-04f, -5.760345548e-04f, -3.493857651e-04f, +6.698551799e-06f, +7.692569891e-06f, +7.566115013e-06f, +5.731996914e-06f, +1.604532908e-06f, -5.331145428e-06f, -1.544430097e-05f, -2.888647360e-05f, -4.553096181e-05f, -6.493255712e-05f, -8.631481091e-05f, -1.085897106e-04f, -1.304114247e-04f, -1.502620772e-04f, -1.665637486e-04f, -1.778075273e-04f, -1.826878783e-04f, -1.802292123e-04f, -1.698915531e-04f, -1.516436772e-04f, -1.259949353e-04f, -9.398087530e-05f, -5.710236930e-05f, -1.722268318e-05f, +2.356870096e-05f, +6.311320721e-05f, +9.934671235e-05f, +1.304543135e-04f, +1.550020465e-04f, +1.720337218e-04f, +1.811247071e-04f, +1.823889449e-04f, +1.764402438e-04f, +1.643133904e-04f, +1.473543959e-04f, +1.270918263e-04f, +1.051024197e-04f, +8.288397896e-05f, +6.174694096e-05f, +4.273331820e-05f, +2.656823942e-05f, +1.364553606e-05f, +4.045170841e-06f, -2.422804631e-06f, -6.155328848e-06f, -7.683214852e-06f, -7.596710501e-06f, -6.477690047e-06f, /* 0,14 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.822212396e-04f, -6.142202869e-04f, -8.621748988e-04f, -1.081207953e-03f, -1.207504287e-03f, -1.159408903e-03f, -8.408479463e-04f, -1.471247758e-04f, +1.027132034e-03f, +2.778376263e-03f, +5.183673213e-03f, +8.290314726e-03f, +1.210659227e-02f, +1.659479686e-02f, +2.166739050e-02f, +2.718705429e-02f, +3.297098241e-02f, +3.879939050e-02f, +4.442778408e-02f, +4.960213187e-02f, +5.407575776e-02f, +5.762654220e-02f, +6.007293718e-02f, +6.128736347e-02f, +6.120577010e-02f, +5.983247500e-02f, +5.723983792e-02f, +5.356279575e-02f, +4.898876714e-02f, +4.374385568e-02f, +3.807660555e-02f, +3.224075735e-02f, +2.647849724e-02f, +2.100558777e-02f, +1.599953041e-02f, +1.159156778e-02f, +7.862927288e-03f, +4.845285496e-03f, +2.525037573e-03f, +8.506311264e-04f, -2.580024657e-04f, -8.989949112e-04f, -1.178130546e-03f, -1.199422426e-03f, -1.057411285e-03f, -8.316600224e-04f, -5.836312653e-04f, -3.558634551e-04f, +6.655454364e-06f, +7.675507496e-06f, +7.592796692e-06f, +5.821084136e-06f, +1.773638826e-06f, -5.067743758e-06f, -1.507800476e-05f, -2.841648733e-05f, -4.496592050e-05f, -6.429140060e-05f, -8.562670900e-05f, -1.078929320e-04f, -1.297511522e-04f, -1.496872908e-04f, -1.661234121e-04f, -1.775464088e-04f, -1.826423998e-04f, -1.804237446e-04f, -1.703355517e-04f, -1.523299854e-04f, -1.268994749e-04f, -9.506381053e-05f, -5.831068052e-05f, -1.849394269e-05f, +2.230168514e-05f, +6.191730505e-05f, +9.828341550e-05f, +1.295751782e-04f, +1.543450521e-04f, +1.716208647e-04f, +1.809610208e-04f, +1.824629900e-04f, +1.767259657e-04f, +1.647731083e-04f, +1.479425855e-04f, +1.277592971e-04f, +1.058004694e-04f, +8.356813575e-05f, +6.237997497e-05f, +4.328729862e-05f, +2.702553133e-05f, +1.399874871e-05f, +4.296176977e-06f, -2.264573046e-06f, -6.075048267e-06f, -7.663019833e-06f, -7.617957255e-06f, -6.522907823e-06f, /* 0,15 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.755657852e-04f, -6.065447794e-04f, -8.545821021e-04f, -1.075386869e-03f, -1.205730648e-03f, -1.164476647e-03f, -8.559259511e-04f, -1.755412632e-04f, +9.821661133e-04f, +2.714084862e-03f, +5.098046504e-03f, +8.182421794e-03f, +1.197684112e-02f, +1.644510957e-02f, +2.150126709e-02f, +2.700950789e-02f, +3.278834001e-02f, +3.861896676e-02f, +4.425744853e-02f, +4.944980188e-02f, +5.394885828e-02f, +5.753147838e-02f, +6.001462650e-02f, +6.126886953e-02f, +6.122807178e-02f, +5.989439231e-02f, +5.733812134e-02f, +5.369237093e-02f, +4.914311219e-02f, +4.391547655e-02f, +3.825756657e-02f, +3.242322034e-02f, +2.665522321e-02f, +2.117036087e-02f, +1.614747299e-02f, +1.171932707e-02f, +7.968727757e-03f, +4.928853632e-03f, +2.587417548e-03f, +8.939184250e-04f, -2.309769343e-04f, -8.849961625e-04f, -1.173834369e-03f, -1.201686999e-03f, -1.063486334e-03f, -8.393230423e-04f, -5.912492225e-04f, -3.623863630e-04f, +6.611804677e-06f, +7.657373026e-06f, +7.617829132e-06f, +5.907943456e-06f, +1.940004617e-06f, -4.807454348e-06f, -1.471498148e-05f, -2.794966288e-05f, -4.440361746e-05f, -6.365223261e-05f, -8.493953768e-05f, -1.071957695e-04f, -1.290890081e-04f, -1.491090813e-04f, -1.656781636e-04f, -1.772790849e-04f, -1.825897425e-04f, -1.806105501e-04f, -1.707717740e-04f, -1.530089992e-04f, -1.277977209e-04f, -9.614191340e-05f, -5.951598093e-05f, -1.976424015e-05f, +2.103350960e-05f, +6.071820940e-05f, +9.721513218e-05f, +1.286896348e-04f, +1.536806957e-04f, +1.712002137e-04f, +1.807896387e-04f, +1.825299310e-04f, +1.770055917e-04f, +1.652280476e-04f, +1.485274967e-04f, +1.284250404e-04f, +1.064982673e-04f, +8.425333425e-05f, +6.301508140e-05f, +4.384407088e-05f, +2.748600830e-05f, +1.435522994e-05f, +4.550268416e-06f, -2.103644554e-06f, -5.992592328e-06f, -7.641230718e-06f, -7.638183844e-06f, -6.567617582e-06f, /* 0,16 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.689539805e-04f, -5.988874064e-04f, -8.469642730e-04f, -1.069478926e-03f, -1.203790643e-03f, -1.169284101e-03f, -8.706409326e-04f, -2.034909260e-04f, +9.377624959e-04f, +2.650432629e-03f, +5.013106966e-03f, +8.075226025e-03f, +1.184775211e-02f, +1.629600049e-02f, +2.133558892e-02f, +2.683222880e-02f, +3.260575027e-02f, +3.843835620e-02f, +4.408667676e-02f, +4.929679288e-02f, +5.382106056e-02f, +5.743533647e-02f, +5.995511052e-02f, +6.124910529e-02f, +6.124910529e-02f, +5.995511052e-02f, +5.743533647e-02f, +5.382106056e-02f, +4.929679288e-02f, +4.408667676e-02f, +3.843835620e-02f, +3.260575027e-02f, +2.683222880e-02f, +2.133558892e-02f, +1.629600049e-02f, +1.184775211e-02f, +8.075226025e-03f, +5.013106966e-03f, +2.650432629e-03f, +9.377624959e-04f, -2.034909260e-04f, -8.706409326e-04f, -1.169284101e-03f, -1.203790643e-03f, -1.069478926e-03f, -8.469642730e-04f, -5.988874064e-04f, -3.689539805e-04f, +6.567617582e-06f, +7.638183844e-06f, +7.641230718e-06f, +5.992592328e-06f, +2.103644554e-06f, -4.550268416e-06f, -1.435522994e-05f, -2.748600830e-05f, -4.384407088e-05f, -6.301508140e-05f, -8.425333425e-05f, -1.064982673e-04f, -1.284250404e-04f, -1.485274967e-04f, -1.652280476e-04f, -1.770055917e-04f, -1.825299310e-04f, -1.807896387e-04f, -1.712002137e-04f, -1.536806957e-04f, -1.286896348e-04f, -9.721513218e-05f, -6.071820940e-05f, -2.103350960e-05f, +1.976424015e-05f, +5.951598093e-05f, +9.614191340e-05f, +1.277977209e-04f, +1.530089992e-04f, +1.707717740e-04f, +1.806105501e-04f, +1.825897425e-04f, +1.772790849e-04f, +1.656781636e-04f, +1.491090813e-04f, +1.290890081e-04f, +1.071957695e-04f, +8.493953768e-05f, +6.365223261e-05f, +4.440361746e-05f, +2.794966288e-05f, +1.471498148e-05f, +4.807454348e-06f, -1.940004617e-06f, -5.907943456e-06f, -7.617829132e-06f, -7.657373026e-06f, -6.611804677e-06f, /* 0,17 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.623863630e-04f, -5.912492225e-04f, -8.393230423e-04f, -1.063486334e-03f, -1.201686999e-03f, -1.173834369e-03f, -8.849961625e-04f, -2.309769343e-04f, +8.939184250e-04f, +2.587417548e-03f, +4.928853632e-03f, +7.968727757e-03f, +1.171932707e-02f, +1.614747299e-02f, +2.117036087e-02f, +2.665522321e-02f, +3.242322034e-02f, +3.825756657e-02f, +4.391547655e-02f, +4.914311219e-02f, +5.369237093e-02f, +5.733812134e-02f, +5.989439231e-02f, +6.122807178e-02f, +6.126886953e-02f, +6.001462650e-02f, +5.753147838e-02f, +5.394885828e-02f, +4.944980188e-02f, +4.425744853e-02f, +3.861896676e-02f, +3.278834001e-02f, +2.700950789e-02f, +2.150126709e-02f, +1.644510957e-02f, +1.197684112e-02f, +8.182421794e-03f, +5.098046504e-03f, +2.714084862e-03f, +9.821661133e-04f, -1.755412632e-04f, -8.559259511e-04f, -1.164476647e-03f, -1.205730648e-03f, -1.075386869e-03f, -8.545821021e-04f, -6.065447794e-04f, -3.755657852e-04f, +6.522907823e-06f, +7.617957255e-06f, +7.663019833e-06f, +6.075048267e-06f, +2.264573046e-06f, -4.296176977e-06f, -1.399874871e-05f, -2.702553133e-05f, -4.328729862e-05f, -6.237997497e-05f, -8.356813575e-05f, -1.058004694e-04f, -1.277592971e-04f, -1.479425855e-04f, -1.647731083e-04f, -1.767259657e-04f, -1.824629900e-04f, -1.809610208e-04f, -1.716208647e-04f, -1.543450521e-04f, -1.295751782e-04f, -9.828341550e-05f, -6.191730505e-05f, -2.230168514e-05f, +1.849394269e-05f, +5.831068052e-05f, +9.506381053e-05f, +1.268994749e-04f, +1.523299854e-04f, +1.703355517e-04f, +1.804237446e-04f, +1.826423998e-04f, +1.775464088e-04f, +1.661234121e-04f, +1.496872908e-04f, +1.297511522e-04f, +1.078929320e-04f, +8.562670900e-05f, +6.429140060e-05f, +4.496592050e-05f, +2.841648733e-05f, +1.507800476e-05f, +5.067743758e-06f, -1.773638826e-06f, -5.821084136e-06f, -7.592796692e-06f, -7.675507496e-06f, -6.655454364e-06f, /* 0,18 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.558634551e-04f, -5.836312653e-04f, -8.316600224e-04f, -1.057411285e-03f, -1.199422426e-03f, -1.178130546e-03f, -8.989949112e-04f, -2.580024657e-04f, +8.506311264e-04f, +2.525037573e-03f, +4.845285496e-03f, +7.862927288e-03f, +1.159156778e-02f, +1.599953041e-02f, +2.100558777e-02f, +2.647849724e-02f, +3.224075735e-02f, +3.807660555e-02f, +4.374385568e-02f, +4.898876714e-02f, +5.356279575e-02f, +5.723983792e-02f, +5.983247500e-02f, +6.120577010e-02f, +6.128736347e-02f, +6.007293718e-02f, +5.762654220e-02f, +5.407575776e-02f, +4.960213187e-02f, +4.442778408e-02f, +3.879939050e-02f, +3.297098241e-02f, +2.718705429e-02f, +2.166739050e-02f, +1.659479686e-02f, +1.210659227e-02f, +8.290314726e-03f, +5.183673213e-03f, +2.778376263e-03f, +1.027132034e-03f, -1.471247758e-04f, -8.408479463e-04f, -1.159408903e-03f, -1.207504287e-03f, -1.081207953e-03f, -8.621748988e-04f, -6.142202869e-04f, -3.822212396e-04f, +6.477690047e-06f, +7.596710501e-06f, +7.683214852e-06f, +6.155328848e-06f, +2.422804631e-06f, -4.045170841e-06f, -1.364553606e-05f, -2.656823942e-05f, -4.273331820e-05f, -6.174694096e-05f, -8.288397896e-05f, -1.051024197e-04f, -1.270918263e-04f, -1.473543959e-04f, -1.643133904e-04f, -1.764402438e-04f, -1.823889449e-04f, -1.811247071e-04f, -1.720337218e-04f, -1.550020465e-04f, -1.304543135e-04f, -9.934671235e-05f, -6.311320721e-05f, -2.356870096e-05f, +1.722268318e-05f, +5.710236930e-05f, +9.398087530e-05f, +1.259949353e-04f, +1.516436772e-04f, +1.698915531e-04f, +1.802292123e-04f, +1.826878783e-04f, +1.778075273e-04f, +1.665637486e-04f, +1.502620772e-04f, +1.304114247e-04f, +1.085897106e-04f, +8.631481091e-05f, +6.493255712e-05f, +4.553096181e-05f, +2.888647360e-05f, +1.544430097e-05f, +5.331145428e-06f, -1.604532908e-06f, -5.731996914e-06f, -7.566115013e-06f, -7.692569891e-06f, -6.698551799e-06f, /* 0,19 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.493857651e-04f, -5.760345548e-04f, -8.239768076e-04f, -1.051255956e-03f, -1.196999621e-03f, -1.182175717e-03f, -9.126404473e-04f, -2.845707051e-04f, +8.078978082e-04f, +2.463290632e-03f, +4.762401517e-03f, +7.757824868e-03f, +1.146447595e-02f, +1.585217601e-02f, +2.084127438e-02f, +2.630205700e-02f, +3.205836840e-02f, +3.789548084e-02f, +4.357182196e-02f, +4.883376509e-02f, +5.343234143e-02f, +5.714049121e-02f, +5.976936179e-02f, +6.118220139e-02f, +6.130458616e-02f, +6.013003955e-02f, +5.772052307e-02f, +5.420175269e-02f, +4.975377555e-02f, +4.459767564e-02f, +3.897961971e-02f, +3.315367029e-02f, +2.736486182e-02f, +2.183395425e-02f, +1.674505894e-02f, +1.223700370e-02f, +8.398904437e-03f, +5.269988024e-03f, +2.843308820e-03f, +1.072662996e-03f, -1.182383022e-04f, -8.254036453e-04f, -1.154077757e-03f, -1.209108819e-03f, -1.086939950e-03f, -8.697410138e-04f, -6.219128568e-04f, -3.889197914e-04f, +6.431978801e-06f, +7.574460766e-06f, +7.701834142e-06f, +6.233451705e-06f, +2.578353981e-06f, -3.797240619e-06f, -1.329559004e-05f, -2.611413971e-05f, -4.218214685e-05f, -6.111600674e-05f, -8.220090042e-05f, -1.044041619e-04f, -1.264226756e-04f, -1.467629763e-04f, -1.638489388e-04f, -1.761484629e-04f, -1.823078213e-04f, -1.812807091e-04f, -1.724387800e-04f, -1.556516572e-04f, -1.313270034e-04f, -1.004049721e-04f, -6.430585546e-05f, -2.483449136e-05f, +1.595052764e-05f, +5.589110862e-05f, +9.289315982e-05f, +1.250841413e-04f, +1.509500984e-04f, +1.694397852e-04f, +1.800269439e-04f, +1.827261540e-04f, +1.780624044e-04f, +1.669991291e-04f, +1.508333922e-04f, +1.310697774e-04f, +1.092860609e-04f, +8.700380586e-05f, +6.557567358e-05f, +4.609872289e-05f, +2.935961333e-05f, +1.581387101e-05f, +5.597667930e-06f, -1.432672729e-06f, -5.640664402e-06f, -7.537765705e-06f, -7.708542790e-06f, -6.741082046e-06f, /* 0,20 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.429537863e-04f, -5.684600940e-04f, -8.162749735e-04f, -1.045022505e-03f, -1.194421267e-03f, -1.185972958e-03f, -9.259360373e-04f, -3.106848448e-04f, +7.657156613e-04f, +2.402174625e-03f, +4.680200617e-03f, +7.653420706e-03f, +1.133805327e-02f, +1.570541304e-02f, +2.067742544e-02f, +2.612590854e-02f, +3.187606058e-02f, +3.771420013e-02f, +4.339938318e-02f, +4.867811343e-02f, +5.330101443e-02f, +5.704008624e-02f, +5.970505594e-02f, +6.115736690e-02f, +6.132053668e-02f, +6.018593065e-02f, +5.781341623e-02f, +5.432683683e-02f, +4.990472564e-02f, +4.476711542e-02f, +3.915964666e-02f, +3.333639644e-02f, +2.754292423e-02f, +2.200095338e-02f, +1.689589233e-02f, +1.236807348e-02f, +8.508190498e-03f, +5.356991830e-03f, +2.908884493e-03f, +1.118761719e-03f, -8.887868891e-05f, -8.095897743e-04f, -1.148480090e-03f, -1.210541492e-03f, -1.092580615e-03f, -8.772787795e-04f, -6.296213996e-04f, -3.956608734e-04f, +6.385788534e-06f, +7.551225169e-06f, +7.718896060e-06f, +6.309434527e-06f, +2.731235893e-06f, -3.552376721e-06f, -1.294890841e-05f, -2.566323901e-05f, -4.163380147e-05f, -6.048719935e-05f, -8.151893637e-05f, -1.037057395e-04f, -1.257518931e-04f, -1.461683752e-04f, -1.633797983e-04f, -1.758506607e-04f, -1.822196454e-04f, -1.814290384e-04f, -1.728360349e-04f, -1.562938633e-04f, -1.321932110e-04f, -1.014581444e-04f, -6.549518960e-05f, -2.609899070e-05f, +1.467754219e-05f, +5.467696004e-05f, +9.180071650e-05f, +1.241671324e-04f, +1.502492729e-04f, +1.689802556e-04f, +1.798169304e-04f, +1.827572033e-04f, +1.783110046e-04f, +1.674295098e-04f, +1.514011878e-04f, +1.317261621e-04f, +1.099819384e-04f, +8.769365605e-05f, +6.622072111e-05f, +4.666918493e-05f, +2.983589784e-05f, +1.618671553e-05f, +5.867319628e-06f, -1.258044290e-06f, -5.547069277e-06f, -7.507730380e-06f, -7.723408718e-06f, -6.783030070e-06f, /* 0,21 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.365679977e-04f, -5.609088688e-04f, -8.085560774e-04f, -1.038713070e-03f, -1.191690031e-03f, -1.189525335e-03f, -9.388849457e-04f, -3.363480838e-04f, +7.240818599e-04f, +2.341687426e-03f, +4.598681680e-03f, +7.549714967e-03f, +1.121230138e-02f, +1.555924466e-02f, +2.051404564e-02f, +2.595005788e-02f, +3.169384093e-02f, +3.753277109e-02f, +4.322654714e-02f, +4.852181957e-02f, +5.316882122e-02f, +5.693862809e-02f, +5.963956075e-02f, +6.113126791e-02f, +6.133521423e-02f, +6.024060761e-02f, +5.790521695e-02f, +5.445100397e-02f, +5.005497492e-02f, +4.493609568e-02f, +3.933946359e-02f, +3.351915364e-02f, +2.772123523e-02f, +2.216838289e-02f, +1.704729352e-02f, +1.249979964e-02f, +8.618172436e-03f, +5.444685486e-03f, +2.975105214e-03f, +1.165430903e-03f, -5.904279106e-05f, -7.934030588e-04f, -1.142612770e-03f, -1.211799537e-03f, -1.098127684e-03f, -8.847865099e-04f, -6.373448083e-04f, -4.024439035e-04f, +6.339133594e-06f, +7.527020764e-06f, +7.734418951e-06f, +6.383295056e-06f, +2.881465290e-06f, -3.310569361e-06f, -1.260548869e-05f, -2.521554387e-05f, -4.108829861e-05f, -5.986054554e-05f, -8.083812284e-05f, -1.030071957e-04f, -1.250795263e-04f, -1.455706410e-04f, -1.629060141e-04f, -1.755468747e-04f, -1.821244437e-04f, -1.815697075e-04f, -1.732254828e-04f, -1.569286442e-04f, -1.330529000e-04f, -1.025061794e-04f, -6.668114971e-05f, -2.736213345e-05f, +1.340379299e-05f, +5.345998535e-05f, +9.070359815e-05f, +1.232439486e-04f, +1.495412255e-04f, +1.685129721e-04f, +1.795991635e-04f, +1.827810030e-04f, +1.785532927e-04f, +1.678548470e-04f, +1.519654159e-04f, +1.323805306e-04f, +1.106772984e-04f, +8.838432342e-05f, +6.686767051e-05f, +4.724232877e-05f, +3.031531818e-05f, +1.656283491e-05f, +6.140108674e-06f, -1.080633738e-06f, -5.451194286e-06f, -7.475990650e-06f, -7.737150143e-06f, -6.824380746e-06f, /* 0,22 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.302288642e-04f, -5.533818481e-04f, -8.008216584e-04f, -1.032329775e-03f, -1.188808566e-03f, -1.192835904e-03f, -9.514904344e-04f, -3.615636277e-04f, +6.829935612e-04f, +2.281826881e-03f, +4.517843558e-03f, +7.446707771e-03f, +1.108722185e-02f, +1.541367402e-02f, +2.035113962e-02f, +2.577451100e-02f, +3.151171649e-02f, +3.735120138e-02f, +4.305332166e-02f, +4.836489092e-02f, +5.303576832e-02f, +5.683612192e-02f, +5.957287960e-02f, +6.110390578e-02f, +6.134861802e-02f, +6.029406760e-02f, +5.799592054e-02f, +5.457424791e-02f, +5.020451614e-02f, +4.510460865e-02f, +3.951906275e-02f, +3.370193465e-02f, +2.789978852e-02f, +2.233623773e-02f, +1.719925894e-02f, +1.263218017e-02f, +8.728849735e-03f, +5.533069809e-03f, +3.041972885e-03f, +1.212673232e-03f, -2.872747289e-05f, -7.768402239e-04f, -1.136472661e-03f, -1.212880170e-03f, -1.103578878e-03f, -8.922625006e-04f, -6.450819584e-04f, -4.092682842e-04f, +6.292028226e-06f, +7.501864540e-06f, +7.748421147e-06f, +6.455051086e-06f, +3.029057220e-06f, -3.071808559e-06f, -1.226532812e-05f, -2.477106051e-05f, -4.054565455e-05f, -5.923607174e-05f, -8.015849554e-05f, -1.023085737e-04f, -1.244056229e-04f, -1.449698222e-04f, -1.624276316e-04f, -1.752371429e-04f, -1.820222430e-04f, -1.817027291e-04f, -1.736071204e-04f, -1.575559798e-04f, -1.339060344e-04f, -1.035490276e-04f, -6.786367609e-05f, -2.862385418e-05f, +1.212934627e-05f, +5.224024653e-05f, +8.960185788e-05f, +1.223146305e-04f, +1.488259813e-04f, +1.680379435e-04f, +1.793736353e-04f, +1.827975304e-04f, +1.787892338e-04f, +1.682750973e-04f, +1.525260286e-04f, +1.330328344e-04f, +1.113720959e-04f, +8.907576968e-05f, +6.751649231e-05f, +4.781813497e-05f, +3.079786504e-05f, +1.694222924e-05f, +6.416043006e-06f, -9.004273601e-07f, -5.353022246e-06f, -7.442528130e-06f, -7.749749481e-06f, -6.865118852e-06f, /* 0,23 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.239368359e-04f, -5.458799835e-04f, -7.930732373e-04f, -1.025874724e-03f, -1.185779509e-03f, -1.195907712e-03f, -9.637557625e-04f, -3.863346882e-04f, +6.424479067e-04f, +2.222590809e-03f, +4.437685062e-03f, +7.344399198e-03f, +1.096281623e-02f, +1.526870420e-02f, +2.018871199e-02f, +2.559927386e-02f, +3.132969425e-02f, +3.716949865e-02f, +4.287971454e-02f, +4.820733494e-02f, +5.290186229e-02f, +5.673257289e-02f, +5.950501592e-02f, +6.107528192e-02f, +6.136074737e-02f, +6.034630785e-02f, +5.808552240e-02f, +5.469656255e-02f, +5.035334212e-02f, +4.527264659e-02f, +3.969843638e-02f, +3.388473218e-02f, +2.807857776e-02f, +2.250451283e-02f, +1.735178496e-02f, +1.276521300e-02f, +8.840221830e-03f, +5.622145579e-03f, +3.109489377e-03f, +1.260491367e-03f, +2.070392152e-06f, -7.598979946e-04f, -1.130056618e-03f, -1.213780598e-03f, -1.108931901e-03f, -8.997050287e-04f, -6.528317079e-04f, -4.161334031e-04f, +6.244486575e-06f, +7.475773419e-06f, +7.760920964e-06f, +6.524720458e-06f, +3.174026850e-06f, -2.836084140e-06f, -1.192842370e-05f, -2.432979486e-05f, -4.000588521e-05f, -5.861380406e-05f, -7.948008996e-05f, -1.016099164e-04f, -1.237302304e-04f, -1.443659673e-04f, -1.619446962e-04f, -1.749215037e-04f, -1.819130706e-04f, -1.818281164e-04f, -1.739809448e-04f, -1.581758507e-04f, -1.347525789e-04f, -1.045866398e-04f, -6.904270931e-05f, -2.988408757e-05f, +1.085426828e-05f, +5.101780578e-05f, +8.849554918e-05f, +1.213792189e-04f, +1.481035659e-04f, +1.675551786e-04f, +1.791403384e-04f, +1.828067631e-04f, +1.790187932e-04f, +1.686902173e-04f, +1.530829779e-04f, +1.336830254e-04f, +1.120662859e-04f, +8.976795629e-05f, +6.816715673e-05f, +4.839658372e-05f, +3.128352883e-05f, +1.732489835e-05f, +6.695130348e-06f, -7.174115923e-07f, -5.252536049e-06f, -7.407324442e-06f, -7.761189099e-06f, -6.905229076e-06f, /* 0,24 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.176923494e-04f, -5.384042101e-04f, -7.853123163e-04f, -1.019350004e-03f, -1.182605482e-03f, -1.198743797e-03f, -9.756841862e-04f, -4.106644831e-04f, +6.024420215e-04f, +2.163977005e-03f, +4.358204972e-03f, +7.242789281e-03f, +1.083908600e-02f, +1.512433823e-02f, +2.002676730e-02f, +2.542435236e-02f, +3.114778118e-02f, +3.698767054e-02f, +4.270573360e-02f, +4.804915909e-02f, +5.276710971e-02f, +5.662798625e-02f, +5.943597321e-02f, +6.104539784e-02f, +6.137160163e-02f, +6.039732565e-02f, +5.817401795e-02f, +5.481794176e-02f, +5.050144569e-02f, +4.544020177e-02f, +3.987757672e-02f, +3.406753894e-02f, +2.825759655e-02f, +2.267320305e-02f, +1.750486794e-02f, +1.289889603e-02f, +8.952288116e-03f, +5.711913535e-03f, +3.177656534e-03f, +1.308887951e-03f, +3.335392098e-05f, -7.425730963e-04f, -1.123361488e-03f, -1.214498009e-03f, -1.114184437e-03f, -9.071123531e-04f, -6.605928970e-04f, -4.230386322e-04f, +6.196522682e-06f, +7.448764252e-06f, +7.771936700e-06f, +6.592321062e-06f, +3.316389466e-06f, -2.603385740e-06f, -1.159477218e-05f, -2.389175254e-05f, -3.946900620e-05f, -5.799376832e-05f, -7.880294129e-05f, -1.009112666e-04f, -1.230533962e-04f, -1.437591249e-04f, -1.614572536e-04f, -1.745999956e-04f, -1.817969543e-04f, -1.819458831e-04f, -1.743469537e-04f, -1.587882379e-04f, -1.355924986e-04f, -1.056189673e-04f, -7.021819019e-05f, -3.114276840e-05f, +9.578625365e-06f, +4.979272550e-05f, +8.738472583e-05f, +1.204377551e-04f, +1.473740055e-04f, +1.670646871e-04f, +1.788992659e-04f, +1.828086792e-04f, +1.792419368e-04f, +1.691001640e-04f, +1.536362162e-04f, +1.343310549e-04f, +1.127598233e-04f, +9.046084446e-05f, +6.881963368e-05f, +4.897765493e-05f, +3.177229965e-05f, +1.771084180e-05f, +6.977378204e-06f, -5.315730174e-07f, -5.149718660e-06f, -7.370361214e-06f, -7.771451312e-06f, -6.944696012e-06f, /* 0,25 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.114958267e-04f, -5.309554459e-04f, -7.775403796e-04f, -1.012757683e-03f, -1.179289092e-03f, -1.201347182e-03f, -9.872789584e-04f, -4.345562356e-04f, +5.629730153e-04f, +2.105983236e-03f, +4.279402031e-03f, +7.141878015e-03f, +1.071603260e-02f, +1.498057911e-02f, +1.986531004e-02f, +2.524975236e-02f, +3.096598422e-02f, +3.680572465e-02f, +4.253138664e-02f, +4.789037086e-02f, +5.263151721e-02f, +5.652236728e-02f, +5.936575502e-02f, +6.101425507e-02f, +6.138118026e-02f, +6.044711838e-02f, +5.826140268e-02f, +5.493837952e-02f, +5.064881970e-02f, +4.560726646e-02f, +4.005647599e-02f, +3.425034762e-02f, +2.843683849e-02f, +2.284230321e-02f, +1.765850416e-02f, +1.303322708e-02f, +9.065047940e-03f, +5.802374380e-03f, +3.246476168e-03f, +1.357865606e-03f, +6.512622063e-05f, -7.248622545e-04f, -1.116384110e-03f, -1.215029582e-03f, -1.119334155e-03f, -9.144827144e-04f, -6.683643483e-04f, -4.299833282e-04f, +6.148150484e-06f, +7.420853824e-06f, +7.781486633e-06f, +6.657870832e-06f, +3.456160473e-06f, -2.373702808e-06f, -1.126437005e-05f, -2.345693889e-05f, -3.893503281e-05f, -5.737599002e-05f, -7.812708446e-05f, -1.002126668e-04f, -1.223751678e-04f, -1.431493437e-04f, -1.609653496e-04f, -1.742726574e-04f, -1.816739221e-04f, -1.820560435e-04f, -1.747051455e-04f, -1.593931230e-04f, -1.364257588e-04f, -1.066459616e-04f, -7.139005983e-05f, -3.239983159e-05f, +8.302483877e-06f, +4.856506828e-05f, +8.626944199e-05f, +1.194902810e-04f, +1.466373266e-04f, +1.665664791e-04f, +1.786504114e-04f, +1.828032572e-04f, +1.794586306e-04f, +1.695048947e-04f, +1.541856957e-04f, +1.349768747e-04f, +1.134526627e-04f, +9.115439517e-05f, +6.947389279e-05f, +4.956132816e-05f, +3.226416726e-05f, +1.810005886e-05f, +7.262793860e-06f, -3.428983692e-07f, -5.044553124e-06f, -7.331620083e-06f, -7.780518386e-06f, -6.983504168e-06f, /* 0,26 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -3.053476762e-04f, -5.235345920e-04f, -7.697588930e-04f, -1.006099812e-03f, -1.175832932e-03f, -1.203720885e-03f, -9.985433285e-04f, -4.580131745e-04f, +5.240379825e-04f, +2.048607246e-03f, +4.201274946e-03f, +7.041665348e-03f, +1.059365744e-02f, +1.483742976e-02f, +1.970434469e-02f, +2.507547970e-02f, +3.078431030e-02f, +3.662366861e-02f, +4.235668150e-02f, +4.773097773e-02f, +5.249509145e-02f, +5.641572132e-02f, +5.929436496e-02f, +6.098185524e-02f, +6.138948274e-02f, +6.049568345e-02f, +5.834767212e-02f, +5.505786980e-02f, +5.079545702e-02f, +4.577383294e-02f, +4.023512640e-02f, +3.443315088e-02f, +2.861629712e-02f, +2.301180811e-02f, +1.781268985e-02f, +1.316820396e-02f, +9.178500602e-03f, +5.893528775e-03f, +3.315950061e-03f, +1.407426934e-03f, +9.739038789e-05f, -7.067621956e-04f, -1.109121316e-03f, -1.215372481e-03f, -1.124378708e-03f, -9.218143344e-04f, -6.761448667e-04f, -4.369668323e-04f, +6.099383813e-06f, +7.392058845e-06f, +7.789589021e-06f, +6.721387745e-06f, +3.593355386e-06f, -2.147024604e-06f, -1.093721356e-05f, -2.302535893e-05f, -3.840398002e-05f, -5.676049434e-05f, -7.745255413e-05f, -9.951415924e-05f, -1.216955923e-04f, -1.425366721e-04f, -1.604690300e-04f, -1.739395284e-04f, -1.815440025e-04f, -1.821586121e-04f, -1.750555188e-04f, -1.599904879e-04f, -1.372523257e-04f, -1.076675748e-04f, -7.255825958e-05f, -3.365521214e-05f, +7.025910221e-06f, +4.733489691e-05f, +8.514975212e-05f, +1.185368387e-04f, +1.458935566e-04f, +1.660605652e-04f, +1.783937689e-04f, +1.827904761e-04f, +1.796688410e-04f, +1.699043667e-04f, +1.547313687e-04f, +1.356204362e-04f, +1.141447587e-04f, +9.184856916e-05f, +7.012990339e-05f, +5.014758269e-05f, +3.275912115e-05f, +1.849254854e-05f, +7.551384381e-06f, -1.513745344e-07f, -4.937022566e-06f, -7.291082698e-06f, -7.788372543e-06f, -7.021637960e-06f, /* 0,27 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -2.992482924e-04f, -5.161425332e-04f, -7.619693040e-04f, -9.993784239e-04f, -1.172239576e-03f, -1.205867910e-03f, -1.009480542e-03f, -4.810385334e-04f, +4.856340025e-04f, +1.991846752e-03f, +4.123822392e-03f, +6.942151189e-03f, +1.047196184e-02f, +1.469489309e-02f, +1.954387566e-02f, +2.490154017e-02f, +3.060276630e-02f, +3.644151000e-02f, +4.218162598e-02f, +4.757098725e-02f, +5.235783912e-02f, +5.630805374e-02f, +5.922180670e-02f, +6.094820002e-02f, +6.139650865e-02f, +6.054301834e-02f, +5.843282187e-02f, +5.517640664e-02f, +5.094135058e-02f, +4.593989350e-02f, +4.041352017e-02f, +3.461594135e-02f, +2.879596596e-02f, +2.318171247e-02f, +1.796742122e-02f, +1.330382439e-02f, +9.292645361e-03f, +5.985377344e-03f, +3.386079964e-03f, +1.457574517e-03f, +1.301495090e-04f, -6.882696471e-04f, -1.101569931e-03f, -1.215523855e-03f, -1.129315731e-03f, -9.291054171e-04f, -6.839332393e-04f, -4.439884703e-04f, +6.050236397e-06f, +7.362395954e-06f, +7.796262099e-06f, +6.782889817e-06f, +3.727989835e-06f, -1.923340206e-06f, -1.061329869e-05f, -2.259701741e-05f, -3.787586248e-05f, -5.614730615e-05f, -7.677938468e-05f, -9.881578617e-05f, -1.210147169e-04f, -1.419211588e-04f, -1.599683410e-04f, -1.736006478e-04f, -1.814072243e-04f, -1.822536042e-04f, -1.753980729e-04f, -1.605803153e-04f, -1.380721657e-04f, -1.086837592e-04f, -7.372273107e-05f, -3.490884522e-05f, +5.748970827e-06f, +4.610227435e-05f, +8.402571100e-05f, +1.175774709e-04f, +1.451427229e-04f, +1.655469566e-04f, +1.781293332e-04f, +1.827703153e-04f, +1.798725349e-04f, +1.702985375e-04f, +1.552731878e-04f, +1.362616909e-04f, +1.148360655e-04f, +9.254332692e-05f, +7.078763450e-05f, +5.073639743e-05f, +3.325715046e-05f, +1.888830955e-05f, +7.843156605e-06f, +4.301144525e-08f, -4.827110191e-06f, -7.248730722e-06f, -7.794995958e-06f, -7.059081716e-06f, /* 0,28 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -2.931980560e-04f, -5.087801372e-04f, -7.541730419e-04f, -9.925955341e-04f, -1.168511587e-03f, -1.207791250e-03f, -1.020093841e-03f, -5.036355508e-04f, +4.477581400e-04f, +1.935699446e-03f, +4.047043008e-03f, +6.843335402e-03f, +1.035094713e-02f, +1.455297193e-02f, +1.938390732e-02f, +2.472793953e-02f, +3.042135907e-02f, +3.625925639e-02f, +4.200622791e-02f, +4.741040693e-02f, +5.221976696e-02f, +5.619936998e-02f, +5.914808397e-02f, +6.091329118e-02f, +6.140225762e-02f, +6.058912062e-02f, +5.851684758e-02f, +5.529398411e-02f, +5.108649330e-02f, +4.610544046e-02f, +4.059164950e-02f, +3.479871167e-02f, +2.897583849e-02f, +2.335201101e-02f, +1.812269441e-02f, +1.344008609e-02f, +9.407481427e-03f, +6.077920671e-03f, +3.456867598e-03f, +1.508310914e-03f, +1.634066595e-04f, -6.693813375e-04f, -1.093726775e-03f, -1.215480844e-03f, -1.134142841e-03f, -9.363541479e-04f, -6.917282352e-04f, -4.510475520e-04f, +6.000721856e-06f, +7.331881716e-06f, +7.801524077e-06f, +6.842395104e-06f, +3.860079559e-06f, -1.702638511e-06f, -1.029262119e-05f, -2.217191876e-05f, -3.735069452e-05f, -5.553645002e-05f, -7.610761022e-05f, -9.811758948e-05f, -1.203325886e-04f, -1.413028526e-04f, -1.594633288e-04f, -1.732560555e-04f, -1.812636169e-04f, -1.823410354e-04f, -1.757328077e-04f, -1.611625883e-04f, -1.388852458e-04f, -1.096944677e-04f, -7.488341620e-05f, -3.616066610e-05f, +4.471732158e-06f, +4.486726377e-05f, +8.289737375e-05f, +1.166122207e-04f, +1.443848538e-04f, +1.650256649e-04f, +1.778570993e-04f, +1.827427547e-04f, +1.800696793e-04f, +1.706873651e-04f, +1.558111055e-04f, +1.369005902e-04f, +1.155265373e-04f, +9.323862873e-05f, +7.144705488e-05f, +5.132775100e-05f, +3.375824403e-05f, +1.928734033e-05f, +8.138117147e-06f, +2.402723706e-07f, -4.714799292e-06f, -7.204545832e-06f, -7.800370763e-06f, -7.095819678e-06f, /* 0,29 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -2.871973341e-04f, -5.014482555e-04f, -7.463715178e-04f, -9.857531390e-04f, -1.164651507e-03f, -1.209493888e-03f, -1.030386462e-03f, -5.258074696e-04f, +4.104074455e-04f, +1.880162996e-03f, +3.970935397e-03f, +6.745217813e-03f, +1.023061454e-02f, +1.441166908e-02f, +1.922444399e-02f, +2.455468347e-02f, +3.024009546e-02f, +3.607691536e-02f, +4.183049510e-02f, +4.724924434e-02f, +5.208088171e-02f, +5.608967552e-02f, +5.907320056e-02f, +6.087713051e-02f, +6.140672936e-02f, +6.063398788e-02f, +5.859974496e-02f, +5.541059633e-02f, +5.123087815e-02f, +4.627046613e-02f, +4.076950660e-02f, +3.498145442e-02f, +2.915590817e-02f, +2.352269837e-02f, +1.827850552e-02f, +1.357698668e-02f, +9.523007964e-03f, +6.171159300e-03f, +3.528314653e-03f, +1.559638665e-03f, +1.971649035e-04f, -6.500939972e-04f, -1.085588658e-03f, -1.215240571e-03f, -1.138857640e-03f, -9.435586937e-04f, -6.995286060e-04f, -4.581433717e-04f, +5.950853705e-06f, +7.300532620e-06f, +7.805393139e-06f, +6.899921698e-06f, +3.989640402e-06f, -1.484908233e-06f, -9.975176579e-06f, -2.175006713e-05f, -3.682849015e-05f, -5.492795017e-05f, -7.543726457e-05f, -9.741961088e-05f, -1.196492544e-04f, -1.406818019e-04f, -1.589540398e-04f, -1.729057912e-04f, -1.811132097e-04f, -1.824209217e-04f, -1.760597234e-04f, -1.617372905e-04f, -1.396915333e-04f, -1.106996535e-04f, -7.604025715e-05f, -3.741061019e-05f, +3.194260694e-06f, +4.362992850e-05f, +8.176479580e-05f, +1.156411315e-04f, +1.436199778e-04f, +1.644967024e-04f, +1.775770628e-04f, +1.827077745e-04f, +1.802602417e-04f, +1.710708076e-04f, +1.563450745e-04f, +1.375370856e-04f, +1.162161284e-04f, +9.393443463e-05f, +7.210813297e-05f, +5.192162170e-05f, +3.426239038e-05f, +1.968963904e-05f, +8.436272395e-06f, +4.404208828e-07f, -4.600073246e-06f, -7.158509723e-06f, -7.804479049e-06f, -7.131836001e-06f, /* 0,30 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -2.812464804e-04f, -4.941477229e-04f, -7.385661247e-04f, -9.788532173e-04f, -1.160661867e-03f, -1.210978797e-03f, -1.040361638e-03f, -5.475575367e-04f, +3.735789553e-04f, +1.825235046e-03f, +3.895498133e-03f, +6.647798202e-03f, +1.011096528e-02f, +1.427098728e-02f, +1.906548995e-02f, +2.438177768e-02f, +3.005898225e-02f, +3.589449444e-02f, +4.165443537e-02f, +4.708750705e-02f, +5.194119018e-02f, +5.597897586e-02f, +5.899716030e-02f, +6.083971990e-02f, +6.140992362e-02f, +6.067761781e-02f, +5.868150975e-02f, +5.552623746e-02f, +5.137449813e-02f, +4.643496283e-02f, +4.094708366e-02f, +3.516416220e-02f, +2.933616842e-02f, +2.369376918e-02f, +1.843485059e-02f, +1.371452376e-02f, +9.639224092e-03f, +6.265093734e-03f, +3.600422786e-03f, +1.611560287e-03f, +2.314272939e-04f, -6.304043582e-04f, -1.077152385e-03f, -1.214800150e-03f, -1.143457714e-03f, -9.507172034e-04f, -7.073330850e-04f, -4.652752077e-04f, +5.900645350e-06f, +7.268365081e-06f, +7.807887439e-06f, +6.955487723e-06f, +4.116688316e-06f, -1.270137912e-06f, -9.660960103e-06f, -2.133146638e-05f, -3.630926307e-05f, -5.432183054e-05f, -7.476838129e-05f, -9.672189189e-05f, -1.189647611e-04f, -1.400580555e-04f, -1.584405205e-04f, -1.725498952e-04f, -1.809560329e-04f, -1.824932796e-04f, -1.763788209e-04f, -1.623044060e-04f, -1.404909963e-04f, -1.116992702e-04f, -7.719319639e-05f, -3.865861306e-05f, +1.916622938e-06f, +4.239033203e-05f, +8.062803289e-05f, +1.146642473e-04f, +1.428481242e-04f, +1.639600817e-04f, +1.772892198e-04f, +1.826653555e-04f, +1.804441899e-04f, +1.714488231e-04f, +1.568750475e-04f, +1.381711284e-04f, +1.169047926e-04f, +9.463070442e-05f, +7.277083693e-05f, +5.251798750e-05f, +3.476957772e-05f, +2.009520355e-05f, +8.737628506e-06f, +6.434694612e-07f, -4.482915520e-06f, -7.110604110e-06f, -7.807302866e-06f, -7.167114757e-06f, /* 0,31 (48) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, -2.753458351e-04f, -4.868793578e-04f, -7.307582372e-04f, -9.718977296e-04f, -1.156545178e-03f, -1.212248935e-03f, -1.050022599e-03f, -5.688890031e-04f, +3.372696922e-04f, +1.770913215e-03f, +3.820729751e-03f, +6.551076310e-03f, +9.992000524e-03f, +1.413092922e-02f, +1.890704943e-02f, +2.420922778e-02f, +2.987802621e-02f, +3.571200116e-02f, +4.147805655e-02f, +4.692520265e-02f, +5.180069918e-02f, +5.586727659e-02f, +5.891996710e-02f, +6.080106129e-02f, +6.141184024e-02f, +6.072000814e-02f, +5.876213779e-02f, +5.564090171e-02f, +5.151734626e-02f, +4.659892291e-02f, +4.112437288e-02f, +3.534682755e-02f, +2.951661261e-02f, +2.386521801e-02f, +1.859172564e-02f, +1.385269489e-02f, +9.756128885e-03f, +6.359724439e-03f, +3.673193623e-03f, +1.664078274e-03f, +2.661968716e-04f, -6.103091546e-04f, -1.068414757e-03f, -1.214156681e-03f, -1.147940629e-03f, -9.578278075e-04f, -7.151403879e-04f, -4.724423225e-04f, +5.850110091e-06f, +7.235395433e-06f, +7.809025104e-06f, +7.009111338e-06f, +4.241239355e-06f, -1.058315911e-06f, -9.349966785e-06f, -2.091612006e-05f, -3.579302665e-05f, -5.371811474e-05f, -7.410099365e-05f, -9.602447380e-05f, -1.182791553e-04f, -1.394316620e-04f, -1.579228174e-04f, -1.721884081e-04f, -1.807921168e-04f, -1.825581262e-04f, -1.766901015e-04f, -1.628639195e-04f, -1.412836031e-04f, -1.126932717e-04f, -7.834217668e-05f, -3.990461040e-05f, +6.388853996e-07f, +4.114853805e-05f, +7.948714106e-05f, +1.136816124e-04f, +1.420693226e-04f, +1.634158161e-04f, +1.769935670e-04f, +1.826154788e-04f, +1.806214921e-04f, +1.718213704e-04f, +1.574009775e-04f, +1.388026701e-04f, +1.175924836e-04f, +9.532739769e-05f, +7.343513463e-05f, +5.311682607e-05f, +3.527979396e-05f, +2.050403146e-05f, +9.042191405e-06f, +8.494304210e-07f, -4.363309672e-06f, -7.060810728e-06f, -7.808824226e-06f, -7.201639933e-06f, /* 1, 0 (48) */ -4.796439624e-04f, -7.229492121e-04f, -9.648886183e-04f, -1.152303939e-03f, -1.213307251e-03f, -1.059372565e-03f, -5.898051232e-04f, +3.014766656e-04f, +1.717195100e-03f, +3.746628758e-03f, +6.455051836e-03f, +9.873721368e-03f, +1.399149756e-02f, +1.874912662e-02f, +2.403703938e-02f, +2.969723410e-02f, +3.552944303e-02f, +4.130136645e-02f, +4.676233873e-02f, +5.165941558e-02f, +5.575458332e-02f, +5.884162493e-02f, +6.076115668e-02f, +6.141247912e-02f, +6.076115668e-02f, +5.884162493e-02f, +5.575458332e-02f, +5.165941558e-02f, +4.676233873e-02f, +4.130136645e-02f, +3.552944303e-02f, +2.969723410e-02f, +2.403703938e-02f, +1.874912662e-02f, +1.399149756e-02f, +9.873721368e-03f, +6.455051836e-03f, +3.746628758e-03f, +1.717195100e-03f, +3.014766656e-04f, -5.898051232e-04f, -1.059372565e-03f, -1.213307251e-03f, -1.152303939e-03f, -9.648886183e-04f, -7.229492121e-04f, -4.796439624e-04f, -2.694957250e-04f, +7.201639933e-06f, +7.808824226e-06f, +7.060810728e-06f, +4.363309672e-06f, -8.494304210e-07f, -9.042191405e-06f, -2.050403146e-05f, -3.527979396e-05f, -5.311682607e-05f, -7.343513463e-05f, -9.532739769e-05f, -1.175924836e-04f, -1.388026701e-04f, -1.574009775e-04f, -1.718213704e-04f, -1.806214921e-04f, -1.826154788e-04f, -1.769935670e-04f, -1.634158161e-04f, -1.420693226e-04f, -1.136816124e-04f, -7.948714106e-05f, -4.114853805e-05f, -6.388853996e-07f, +3.990461040e-05f, +7.834217668e-05f, +1.126932717e-04f, +1.412836031e-04f, +1.628639195e-04f, +1.766901015e-04f, +1.825581262e-04f, +1.807921168e-04f, +1.721884081e-04f, +1.579228174e-04f, +1.394316620e-04f, +1.182791553e-04f, +9.602447380e-05f, +7.410099365e-05f, +5.371811474e-05f, +3.579302665e-05f, +2.091612006e-05f, +9.349966785e-06f, +1.058315911e-06f, -4.241239355e-06f, -7.009111338e-06f, -7.809025104e-06f, -7.235395433e-06f, -5.850110091e-06f, +7.400711575e-04f, +1.375020608e-03f, +2.149280883e-03f, +2.889370620e-03f, +3.314167096e-03f, +3.062969010e-03f, +1.758157367e-03f, -9.035293376e-04f, -5.046849967e-03f, -1.052447103e-02f, -1.686036328e-02f, -2.325321288e-02f, -2.865282346e-02f, -3.190731847e-02f, -3.196179918e-02f, -2.807404400e-02f, -2.000388698e-02f, -8.133017718e-03f, +6.517945993e-03f, +2.238959427e-02f, +3.759199639e-02f, +5.018871167e-02f, +5.850644264e-02f, +6.141247912e-02f, +5.850644264e-02f, +5.018871167e-02f, +3.759199639e-02f, +2.238959427e-02f, +6.517945993e-03f, -8.133017718e-03f, -2.000388698e-02f, -2.807404400e-02f, -3.196179918e-02f, -3.190731847e-02f, -2.865282346e-02f, -2.325321288e-02f, -1.686036328e-02f, -1.052447103e-02f, -5.046849967e-03f, -9.035293376e-04f, +1.758157367e-03f, +3.062969010e-03f, +3.314167096e-03f, +2.889370620e-03f, +2.149280883e-03f, +1.375020608e-03f, +7.400711575e-04f, +3.136419749e-04f, -1.659937380e-05f, -2.256041491e-05f, -2.486780869e-05f, -2.006906889e-05f, -5.045062098e-06f, +2.191765594e-05f, +6.008443510e-05f, +1.055682666e-04f, +1.512517643e-04f, +1.875167265e-04f, +2.037839118e-04f, +1.906528266e-04f, +1.422374703e-04f, +5.817440947e-05f, -5.522355901e-05f, -1.850656642e-04f, -3.133868468e-04f, -4.199011281e-04f, -4.855454817e-04f, -4.961329892e-04f, -4.453540068e-04f, -3.364549421e-04f, -1.821741084e-04f, -2.871243403e-06f, +1.768283313e-04f, +3.322313388e-04f, +4.427876402e-04f, +4.954835019e-04f, +4.867652811e-04f, +4.226610826e-04f, +3.171517381e-04f, +1.892017453e-04f, +5.911498836e-05f, -5.502368951e-05f, -1.401349478e-04f, -1.896917185e-04f, -2.038605671e-04f, -1.883821463e-04f, -1.525821837e-04f, -1.070377027e-04f, -6.142412938e-05f, -2.295246704e-05f, +4.386614560e-06f, +1.976802667e-05f, +2.484354255e-05f, +2.270517913e-05f, +1.680953745e-05f, +1.011663066e-05f, /* 1, 1 (48) */ -4.724423225e-04f, -7.151403879e-04f, -9.578278075e-04f, -1.147940629e-03f, -1.214156681e-03f, -1.068414757e-03f, -6.103091546e-04f, +2.661968716e-04f, +1.664078274e-03f, +3.673193623e-03f, +6.359724439e-03f, +9.756128885e-03f, +1.385269489e-02f, +1.859172564e-02f, +2.386521801e-02f, +2.951661261e-02f, +3.534682755e-02f, +4.112437288e-02f, +4.659892291e-02f, +5.151734626e-02f, +5.564090171e-02f, +5.876213779e-02f, +6.072000814e-02f, +6.141184024e-02f, +6.080106129e-02f, +5.891996710e-02f, +5.586727659e-02f, +5.180069918e-02f, +4.692520265e-02f, +4.147805655e-02f, +3.571200116e-02f, +2.987802621e-02f, +2.420922778e-02f, +1.890704943e-02f, +1.413092922e-02f, +9.992000524e-03f, +6.551076310e-03f, +3.820729751e-03f, +1.770913215e-03f, +3.372696922e-04f, -5.688890031e-04f, -1.050022599e-03f, -1.212248935e-03f, -1.156545178e-03f, -9.718977296e-04f, -7.307582372e-04f, -4.868793578e-04f, -2.753458351e-04f, +7.167114757e-06f, +7.807302866e-06f, +7.110604110e-06f, +4.482915520e-06f, -6.434694612e-07f, -8.737628506e-06f, -2.009520355e-05f, -3.476957772e-05f, -5.251798750e-05f, -7.277083693e-05f, -9.463070442e-05f, -1.169047926e-04f, -1.381711284e-04f, -1.568750475e-04f, -1.714488231e-04f, -1.804441899e-04f, -1.826653555e-04f, -1.772892198e-04f, -1.639600817e-04f, -1.428481242e-04f, -1.146642473e-04f, -8.062803289e-05f, -4.239033203e-05f, -1.916622938e-06f, +3.865861306e-05f, +7.719319639e-05f, +1.116992702e-04f, +1.404909963e-04f, +1.623044060e-04f, +1.763788209e-04f, +1.824932796e-04f, +1.809560329e-04f, +1.725498952e-04f, +1.584405205e-04f, +1.400580555e-04f, +1.189647611e-04f, +9.672189189e-05f, +7.476838129e-05f, +5.432183054e-05f, +3.630926307e-05f, +2.133146638e-05f, +9.660960103e-06f, +1.270137912e-06f, -4.116688316e-06f, -6.955487723e-06f, -7.807887439e-06f, -7.268365081e-06f, -5.900645350e-06f, +7.234717837e-04f, +1.352460193e-03f, +2.124413074e-03f, +2.869301551e-03f, +3.309122034e-03f, +3.084886666e-03f, +1.818241802e-03f, -7.979610710e-04f, -4.895598203e-03f, -1.033695430e-02f, -1.665657936e-02f, -2.306256005e-02f, -2.851058599e-02f, -3.184914406e-02f, -3.201702274e-02f, -2.825910966e-02f, -2.031727383e-02f, -8.552918846e-03f, +6.032400511e-03f, +2.189346129e-02f, +3.714664238e-02f, +4.985225673e-02f, +5.832426853e-02f, +6.140960788e-02f, +5.868327097e-02f, +5.052094301e-02f, +3.803478403e-02f, +2.288507778e-02f, +7.004711274e-03f, -7.710356635e-03f, -1.968673524e-02f, -2.788484225e-02f, -3.190268420e-02f, -3.196234216e-02f, -2.879295841e-02f, -2.344290460e-02f, -1.706422384e-02f, -1.071285317e-02f, -5.199432151e-03f, -1.010567040e-03f, +1.696733238e-03f, +3.040016543e-03f, +3.318553711e-03f, +2.909138647e-03f, +2.174124425e-03f, +1.397725787e-03f, +7.568806949e-04f, +3.237586056e-04f, -1.638859383e-05f, -2.241212896e-05f, -2.488511074e-05f, -2.036001099e-05f, -5.691648011e-06f, +2.089404958e-05f, +5.875215808e-05f, +1.040992379e-04f, +1.499122321e-04f, +1.866316842e-04f, +2.036782580e-04f, +1.915790189e-04f, +1.443046239e-04f, +6.129593148e-05f, -5.134861502e-05f, -1.809282955e-04f, -3.096005616e-04f, -4.171008580e-04f, -4.842712606e-04f, -4.967217519e-04f, -4.478628235e-04f, -3.406335909e-04f, -1.874950937e-04f, -8.613337121e-06f, +1.714584810e-04f, +3.279633107e-04f, +4.401639799e-04f, +4.947732413e-04f, +4.879303311e-04f, +4.253801896e-04f, +3.208946069e-04f, +1.933359288e-04f, +6.302241295e-05f, -5.184407396e-05f, -1.379971457e-04f, -1.886955890e-04f, -2.039079747e-04f, -1.892276213e-04f, -1.539031669e-04f, -1.085072808e-04f, -6.277106912e-05f, -2.399841424e-05f, +3.716284432e-06f, +1.945680269e-05f, +2.481220449e-05f, +2.284631865e-05f, +1.701900789e-05f, +1.031543611e-05f, /* 1, 2 (48) */ -4.652752077e-04f, -7.073330850e-04f, -9.507172034e-04f, -1.143457714e-03f, -1.214800150e-03f, -1.077152385e-03f, -6.304043582e-04f, +2.314272939e-04f, +1.611560287e-03f, +3.600422786e-03f, +6.265093734e-03f, +9.639224092e-03f, +1.371452376e-02f, +1.843485059e-02f, +2.369376918e-02f, +2.933616842e-02f, +3.516416220e-02f, +4.094708366e-02f, +4.643496283e-02f, +5.137449813e-02f, +5.552623746e-02f, +5.868150975e-02f, +6.067761781e-02f, +6.140992362e-02f, +6.083971990e-02f, +5.899716030e-02f, +5.597897586e-02f, +5.194119018e-02f, +4.708750705e-02f, +4.165443537e-02f, +3.589449444e-02f, +3.005898225e-02f, +2.438177768e-02f, +1.906548995e-02f, +1.427098728e-02f, +1.011096528e-02f, +6.647798202e-03f, +3.895498133e-03f, +1.825235046e-03f, +3.735789553e-04f, -5.475575367e-04f, -1.040361638e-03f, -1.210978797e-03f, -1.160661867e-03f, -9.788532173e-04f, -7.385661247e-04f, -4.941477229e-04f, -2.812464804e-04f, +7.131836001e-06f, +7.804479049e-06f, +7.158509723e-06f, +4.600073246e-06f, -4.404208828e-07f, -8.436272395e-06f, -1.968963904e-05f, -3.426239038e-05f, -5.192162170e-05f, -7.210813297e-05f, -9.393443463e-05f, -1.162161284e-04f, -1.375370856e-04f, -1.563450745e-04f, -1.710708076e-04f, -1.802602417e-04f, -1.827077745e-04f, -1.775770628e-04f, -1.644967024e-04f, -1.436199778e-04f, -1.156411315e-04f, -8.176479580e-05f, -4.362992850e-05f, -3.194260694e-06f, +3.741061019e-05f, +7.604025715e-05f, +1.106996535e-04f, +1.396915333e-04f, +1.617372905e-04f, +1.760597234e-04f, +1.824209217e-04f, +1.811132097e-04f, +1.729057912e-04f, +1.589540398e-04f, +1.406818019e-04f, +1.196492544e-04f, +9.741961088e-05f, +7.543726457e-05f, +5.492795017e-05f, +3.682849015e-05f, +2.175006713e-05f, +9.975176579e-06f, +1.484908233e-06f, -3.989640402e-06f, -6.899921698e-06f, -7.805393139e-06f, -7.300532620e-06f, -5.950853705e-06f, +7.070831898e-04f, +1.330048064e-03f, +2.099527963e-03f, +2.848941540e-03f, +3.303430386e-03f, +3.105780715e-03f, +1.876993960e-03f, -6.938618331e-04f, -4.745685971e-03f, -1.015032262e-02f, -1.645290111e-02f, -2.287098103e-02f, -2.836628136e-02f, -3.178784813e-02f, -3.206837136e-02f, -2.844003796e-02f, -2.062687439e-02f, -8.970019704e-03f, +5.548129250e-03f, +2.139673953e-02f, +3.669877956e-02f, +4.951162314e-02f, +5.813677344e-02f, +6.140099454e-02f, +5.885472945e-02f, +5.084890632e-02f, +3.847494801e-02f, +2.337985102e-02f, +7.492641605e-03f, -7.284976446e-03f, -1.936584064e-02f, -2.769150633e-02f, -3.183966178e-02f, -3.201418624e-02f, -2.893095555e-02f, -2.363160019e-02f, -1.726813182e-02f, -1.090208080e-02f, -5.353335318e-03f, -1.119074321e-03f, +1.633962169e-03f, +3.016018128e-03f, +3.322269995e-03f, +2.928595450e-03f, +2.198936630e-03f, +1.420572106e-03f, +7.738997028e-04f, +3.340740417e-04f, -1.617727343e-05f, -2.226042371e-05f, -2.489555680e-05f, -2.064093598e-05f, -6.326395649e-06f, +1.988171347e-05f, +5.742746693e-05f, +1.026308797e-04f, +1.485639094e-04f, +1.857273426e-04f, +2.035438583e-04f, +1.924704065e-04f, +1.463363255e-04f, +6.438795966e-05f, -4.749064148e-05f, -1.767902467e-04f, -3.057935123e-04f, -4.142608086e-04f, -4.829429533e-04f, -4.972498479e-04f, -4.503138436e-04f, -3.447667631e-04f, -1.927905726e-04f, -1.435425164e-05f, +1.660652804e-04f, +3.236513949e-04f, +4.374832914e-04f, +4.940021681e-04f, +4.890403118e-04f, +4.280579225e-04f, +3.246148259e-04f, +1.974676028e-04f, +6.694533766e-05f, -4.863587167e-05f, -1.358241603e-04f, -1.876643381e-04f, -2.039258891e-04f, -1.900528304e-04f, -1.552143899e-04f, -1.099767330e-04f, -6.412507928e-05f, -2.505542575e-05f, +3.034053170e-06f, +1.913531668e-05f, +2.477368699e-05f, +2.298372996e-05f, +1.722770722e-05f, +1.051543136e-05f, /* 1, 3 (48) */ -4.581433717e-04f, -6.995286060e-04f, -9.435586937e-04f, -1.138857640e-03f, -1.215240571e-03f, -1.085588658e-03f, -6.500939972e-04f, +1.971649035e-04f, +1.559638665e-03f, +3.528314653e-03f, +6.171159300e-03f, +9.523007964e-03f, +1.357698668e-02f, +1.827850552e-02f, +2.352269837e-02f, +2.915590817e-02f, +3.498145442e-02f, +4.076950660e-02f, +4.627046613e-02f, +5.123087815e-02f, +5.541059633e-02f, +5.859974496e-02f, +6.063398788e-02f, +6.140672936e-02f, +6.087713051e-02f, +5.907320056e-02f, +5.608967552e-02f, +5.208088171e-02f, +4.724924434e-02f, +4.183049510e-02f, +3.607691536e-02f, +3.024009546e-02f, +2.455468347e-02f, +1.922444399e-02f, +1.441166908e-02f, +1.023061454e-02f, +6.745217813e-03f, +3.970935397e-03f, +1.880162996e-03f, +4.104074455e-04f, -5.258074696e-04f, -1.030386462e-03f, -1.209493888e-03f, -1.164651507e-03f, -9.857531390e-04f, -7.463715178e-04f, -5.014482555e-04f, -2.871973341e-04f, +7.095819678e-06f, +7.800370763e-06f, +7.204545832e-06f, +4.714799292e-06f, -2.402723706e-07f, -8.138117147e-06f, -1.928734033e-05f, -3.375824403e-05f, -5.132775100e-05f, -7.144705488e-05f, -9.323862873e-05f, -1.155265373e-04f, -1.369005902e-04f, -1.558111055e-04f, -1.706873651e-04f, -1.800696793e-04f, -1.827427547e-04f, -1.778570993e-04f, -1.650256649e-04f, -1.443848538e-04f, -1.166122207e-04f, -8.289737375e-05f, -4.486726377e-05f, -4.471732158e-06f, +3.616066610e-05f, +7.488341620e-05f, +1.096944677e-04f, +1.388852458e-04f, +1.611625883e-04f, +1.757328077e-04f, +1.823410354e-04f, +1.812636169e-04f, +1.732560555e-04f, +1.594633288e-04f, +1.413028526e-04f, +1.203325886e-04f, +9.811758948e-05f, +7.610761022e-05f, +5.553645002e-05f, +3.735069452e-05f, +2.217191876e-05f, +1.029262119e-05f, +1.702638511e-06f, -3.860079559e-06f, -6.842395104e-06f, -7.801524077e-06f, -7.331881716e-06f, -6.000721856e-06f, +6.909059164e-04f, +1.307787641e-03f, +2.074632406e-03f, +2.828300604e-03f, +3.297103990e-03f, +3.125662429e-03f, +1.934421427e-03f, -5.912309534e-04f, -4.597122062e-03f, -9.964595275e-03f, -1.624935725e-02f, -2.267851063e-02f, -2.821994504e-02f, -3.172346017e-02f, -3.211586200e-02f, -2.861682821e-02f, -2.093266790e-02f, -9.384280512e-03f, +5.065186297e-03f, +2.089948969e-02f, +3.624846571e-02f, +4.916685638e-02f, +5.794398287e-02f, +6.138664029e-02f, +5.902079474e-02f, +5.117255772e-02f, +3.891243130e-02f, +2.387385319e-02f, +7.981681917e-03f, -6.856918523e-03f, -1.904122581e-02f, -2.749403872e-02f, -3.177271645e-02f, -3.206282211e-02f, -2.906677971e-02f, -2.381926452e-02f, -1.747205771e-02f, -1.109213363e-02f, -5.508549708e-03f, -1.229051054e-03f, +1.569837089e-03f, +2.990962703e-03f, +3.325304048e-03f, +2.947730766e-03f, +2.223710317e-03f, +1.443555836e-03f, +7.911274100e-04f, +3.445894731e-04f, -1.596548744e-05f, -2.210540102e-05f, -2.489925524e-05f, -2.091192815e-05f, -6.949330726e-06f, +1.888071007e-05f, +5.611052704e-05f, +1.011634523e-04f, +1.472071174e-04f, +1.848040261e-04f, +2.033809683e-04f, +1.933271055e-04f, +1.483324988e-04f, +6.745020468e-05f, -4.365011838e-05f, -1.726521230e-04f, -3.019663296e-04f, -4.113815210e-04f, -4.815609030e-04f, -4.977173448e-04f, -4.527068295e-04f, -3.488539443e-04f, -1.980598351e-04f, -2.009320106e-05f, +1.606494561e-04f, +3.192961356e-04f, +4.347458496e-04f, +4.931702526e-04f, +4.900949110e-04f, +4.306937594e-04f, +3.283117689e-04f, +2.015961528e-04f, +7.088326246e-05f, -4.539939795e-05f, -1.336160942e-04f, -1.865978710e-04f, -2.039140682e-04f, -1.908574537e-04f, -1.565155274e-04f, -1.114457889e-04f, -6.548598165e-05f, -2.612342670e-05f, +2.339904673e-06f, +1.880348977e-05f, +2.472788286e-05f, +2.311730902e-05f, +1.743555650e-05f, +1.071657227e-05f, /* 1, 4 (48) */ -4.510475520e-04f, -6.917282352e-04f, -9.363541479e-04f, -1.134142841e-03f, -1.215480844e-03f, -1.093726775e-03f, -6.693813375e-04f, +1.634066595e-04f, +1.508310914e-03f, +3.456867598e-03f, +6.077920671e-03f, +9.407481427e-03f, +1.344008609e-02f, +1.812269441e-02f, +2.335201101e-02f, +2.897583849e-02f, +3.479871167e-02f, +4.059164950e-02f, +4.610544046e-02f, +5.108649330e-02f, +5.529398411e-02f, +5.851684758e-02f, +6.058912062e-02f, +6.140225762e-02f, +6.091329118e-02f, +5.914808397e-02f, +5.619936998e-02f, +5.221976696e-02f, +4.741040693e-02f, +4.200622791e-02f, +3.625925639e-02f, +3.042135907e-02f, +2.472793953e-02f, +1.938390732e-02f, +1.455297193e-02f, +1.035094713e-02f, +6.843335402e-03f, +4.047043008e-03f, +1.935699446e-03f, +4.477581400e-04f, -5.036355508e-04f, -1.020093841e-03f, -1.207791250e-03f, -1.168511587e-03f, -9.925955341e-04f, -7.541730419e-04f, -5.087801372e-04f, -2.931980560e-04f, +7.059081716e-06f, +7.794995958e-06f, +7.248730722e-06f, +4.827110191e-06f, -4.301144525e-08f, -7.843156605e-06f, -1.888830955e-05f, -3.325715046e-05f, -5.073639743e-05f, -7.078763450e-05f, -9.254332692e-05f, -1.148360655e-04f, -1.362616909e-04f, -1.552731878e-04f, -1.702985375e-04f, -1.798725349e-04f, -1.827703153e-04f, -1.781293332e-04f, -1.655469566e-04f, -1.451427229e-04f, -1.175774709e-04f, -8.402571100e-05f, -4.610227435e-05f, -5.748970827e-06f, +3.490884522e-05f, +7.372273107e-05f, +1.086837592e-04f, +1.380721657e-04f, +1.605803153e-04f, +1.753980729e-04f, +1.822536042e-04f, +1.814072243e-04f, +1.736006478e-04f, +1.599683410e-04f, +1.419211588e-04f, +1.210147169e-04f, +9.881578617e-05f, +7.677938468e-05f, +5.614730615e-05f, +3.787586248e-05f, +2.259701741e-05f, +1.061329869e-05f, +1.923340206e-06f, -3.727989835e-06f, -6.782889817e-06f, -7.796262099e-06f, -7.362395954e-06f, -6.050236397e-06f, +6.749404290e-04f, +1.285682239e-03f, +2.049733151e-03f, +2.807388676e-03f, +3.290154659e-03f, +3.144543139e-03f, +1.990531954e-03f, -4.900675011e-04f, -4.449914944e-03f, -9.779791249e-03f, -1.604597628e-02f, -2.248518352e-02f, -2.807161254e-02f, -3.165600997e-02f, -3.215951212e-02f, -2.878948033e-02f, -2.123463423e-02f, -9.795662033e-03f, +4.583625394e-03f, +2.040177234e-02f, +3.579575888e-02f, +4.881800243e-02f, +5.774592303e-02f, +6.136654709e-02f, +5.918144419e-02f, +5.149185385e-02f, +3.934717715e-02f, +2.436702344e-02f, +8.471776828e-03f, -6.426224764e-03f, -1.871291404e-02f, -2.729244257e-02f, -3.170183318e-02f, -3.210822151e-02f, -2.920039581e-02f, -2.400586239e-02f, -1.767597177e-02f, -1.128299108e-02f, -5.665065235e-03f, -1.340496843e-03f, +1.504351108e-03f, +2.964839276e-03f, +3.327643953e-03f, +2.966534256e-03f, +2.248438199e-03f, +1.466673145e-03f, +8.085629665e-04f, +3.553060453e-04f, -1.575330966e-05f, -2.194716213e-05f, -2.489631464e-05f, -2.117307309e-05f, -7.560481282e-06f, +1.789109874e-05f, +5.480150053e-05f, +9.969721340e-05f, +1.458421761e-04f, +1.838620601e-04f, +2.031898472e-04f, +1.941492378e-04f, +1.502930739e-04f, +7.048238377e-05f, -3.982752051e-05f, -1.685145269e-04f, -2.981196454e-04f, -4.084635409e-04f, -4.801254603e-04f, -4.981243193e-04f, -4.550415531e-04f, -3.528946277e-04f, -2.033021755e-04f, -2.582939980e-05f, +1.552117387e-04f, +3.148980846e-04f, +4.319519384e-04f, +4.922774745e-04f, +4.910938247e-04f, +4.332871834e-04f, +3.319848116e-04f, +2.057209625e-04f, +7.483568249e-05f, -4.213497453e-05f, -1.313730568e-04f, -1.854960989e-04f, -2.038722735e-04f, -1.916411728e-04f, -1.578062534e-04f, -1.129141757e-04f, -6.685359483e-05f, -2.720233902e-05f, +1.633825320e-06f, +1.846124455e-05f, +2.467468530e-05f, +2.324695131e-05f, +1.764247584e-05f, +1.091881357e-05f, /* 1, 5 (48) */ -4.439884703e-04f, -6.839332393e-04f, -9.291054171e-04f, -1.129315731e-03f, -1.215523855e-03f, -1.101569931e-03f, -6.882696471e-04f, +1.301495090e-04f, +1.457574517e-03f, +3.386079964e-03f, +5.985377344e-03f, +9.292645361e-03f, +1.330382439e-02f, +1.796742122e-02f, +2.318171247e-02f, +2.879596596e-02f, +3.461594135e-02f, +4.041352017e-02f, +4.593989350e-02f, +5.094135058e-02f, +5.517640664e-02f, +5.843282187e-02f, +6.054301834e-02f, +6.139650865e-02f, +6.094820002e-02f, +5.922180670e-02f, +5.630805374e-02f, +5.235783912e-02f, +4.757098725e-02f, +4.218162598e-02f, +3.644151000e-02f, +3.060276630e-02f, +2.490154017e-02f, +1.954387566e-02f, +1.469489309e-02f, +1.047196184e-02f, +6.942151189e-03f, +4.123822392e-03f, +1.991846752e-03f, +4.856340025e-04f, -4.810385334e-04f, -1.009480542e-03f, -1.205867910e-03f, -1.172239576e-03f, -9.993784239e-04f, -7.619693040e-04f, -5.161425332e-04f, -2.992482924e-04f, +7.021637960e-06f, +7.788372543e-06f, +7.291082698e-06f, +4.937022566e-06f, +1.513745344e-07f, -7.551384381e-06f, -1.849254854e-05f, -3.275912115e-05f, -5.014758269e-05f, -7.012990339e-05f, -9.184856916e-05f, -1.141447587e-04f, -1.356204362e-04f, -1.547313687e-04f, -1.699043667e-04f, -1.796688410e-04f, -1.827904761e-04f, -1.783937689e-04f, -1.660605652e-04f, -1.458935566e-04f, -1.185368387e-04f, -8.514975212e-05f, -4.733489691e-05f, -7.025910221e-06f, +3.365521214e-05f, +7.255825958e-05f, +1.076675748e-04f, +1.372523257e-04f, +1.599904879e-04f, +1.750555188e-04f, +1.821586121e-04f, +1.815440025e-04f, +1.739395284e-04f, +1.604690300e-04f, +1.425366721e-04f, +1.216955923e-04f, +9.951415924e-05f, +7.745255413e-05f, +5.676049434e-05f, +3.840398002e-05f, +2.302535893e-05f, +1.093721356e-05f, +2.147024604e-06f, -3.593355386e-06f, -6.721387745e-06f, -7.789589021e-06f, -7.392058845e-06f, -6.099383813e-06f, +6.591871193e-04f, +1.263735077e-03f, +2.024836836e-03f, +2.786215603e-03f, +3.282594178e-03f, +3.162434237e-03f, +2.045333455e-03f, -3.903702877e-04f, -4.304072768e-03f, -9.595929189e-03f, -1.584278643e-02f, -2.229103428e-02f, -2.792131946e-02f, -3.158552758e-02f, -3.219933964e-02f, -2.895799486e-02f, -2.153275388e-02f, -1.020412557e-02f, +4.103499934e-03f, +1.990364802e-02f, +3.534071733e-02f, +4.846510781e-02f, +5.754262086e-02f, +6.134071769e-02f, +5.933665593e-02f, +5.180675194e-02f, +3.977912909e-02f, +2.485930091e-02f, +8.962870652e-03f, -5.992937580e-03f, -1.838092923e-02f, -2.708672161e-02f, -3.162699750e-02f, -3.215035648e-02f, -2.933176886e-02f, -2.419135849e-02f, -1.787984405e-02f, -1.147463225e-02f, -5.822871489e-03f, -1.453411019e-03f, +1.437497513e-03f, +2.937636937e-03f, +3.329277778e-03f, +2.984995501e-03f, +2.273112885e-03f, +1.489920096e-03f, +8.262054424e-04f, +3.662248589e-04f, -1.554081285e-05f, -2.178580768e-05f, -2.488684375e-05f, -2.142445762e-05f, -8.159877660e-06f, +1.691293576e-05f, +5.350054635e-05f, +9.823241829e-05f, +1.444694044e-04f, +1.829017706e-04f, +2.029707573e-04f, +1.949369302e-04f, +1.522179874e-04f, +7.348422069e-05f, -3.602331742e-05f, -1.643780583e-04f, -2.942540920e-04f, -4.055074182e-04f, -4.786369835e-04f, -4.984708574e-04f, -4.573177959e-04f, -3.568883141e-04f, -2.085168925e-04f, -3.156206276e-05f, +1.497528627e-04f, +3.104578006e-04f, +4.291018512e-04f, +4.913238229e-04f, +4.920367567e-04f, +4.358376830e-04f, +3.356333310e-04f, +2.098414137e-04f, +7.880208811e-05f, -3.884292954e-05f, -1.290951640e-04f, -1.843589381e-04f, -2.038002702e-04f, -1.924036704e-04f, -1.590862412e-04f, -1.143816183e-04f, -6.822773425e-05f, -2.829208151e-05f, +9.158039886e-07f, +1.810850509e-05f, +2.461398792e-05f, +2.337255185e-05f, +1.784838432e-05f, +1.112210891e-05f, /* 1, 6 (48) */ -4.369668323e-04f, -6.761448667e-04f, -9.218143344e-04f, -1.124378708e-03f, -1.215372481e-03f, -1.109121316e-03f, -7.067621956e-04f, +9.739038789e-05f, +1.407426934e-03f, +3.315950061e-03f, +5.893528775e-03f, +9.178500602e-03f, +1.316820396e-02f, +1.781268985e-02f, +2.301180811e-02f, +2.861629712e-02f, +3.443315088e-02f, +4.023512640e-02f, +4.577383294e-02f, +5.079545702e-02f, +5.505786980e-02f, +5.834767212e-02f, +6.049568345e-02f, +6.138948274e-02f, +6.098185524e-02f, +5.929436496e-02f, +5.641572132e-02f, +5.249509145e-02f, +4.773097773e-02f, +4.235668150e-02f, +3.662366861e-02f, +3.078431030e-02f, +2.507547970e-02f, +1.970434469e-02f, +1.483742976e-02f, +1.059365744e-02f, +7.041665348e-03f, +4.201274946e-03f, +2.048607246e-03f, +5.240379825e-04f, -4.580131745e-04f, -9.985433285e-04f, -1.203720885e-03f, -1.175832932e-03f, -1.006099812e-03f, -7.697588930e-04f, -5.235345920e-04f, -3.053476762e-04f, +6.983504168e-06f, +7.780518386e-06f, +7.331620083e-06f, +5.044553124e-06f, +3.428983692e-07f, -7.262793860e-06f, -1.810005886e-05f, -3.226416726e-05f, -4.956132816e-05f, -6.947389279e-05f, -9.115439517e-05f, -1.134526627e-04f, -1.349768747e-04f, -1.541856957e-04f, -1.695048947e-04f, -1.794586306e-04f, -1.828032572e-04f, -1.786504114e-04f, -1.665664791e-04f, -1.466373266e-04f, -1.194902810e-04f, -8.626944199e-05f, -4.856506828e-05f, -8.302483877e-06f, +3.239983159e-05f, +7.139005983e-05f, +1.066459616e-04f, +1.364257588e-04f, +1.593931230e-04f, +1.747051455e-04f, +1.820560435e-04f, +1.816739221e-04f, +1.742726574e-04f, +1.609653496e-04f, +1.431493437e-04f, +1.223751678e-04f, +1.002126668e-04f, +7.812708446e-05f, +5.737599002e-05f, +3.893503281e-05f, +2.345693889e-05f, +1.126437005e-05f, +2.373702808e-06f, -3.456160473e-06f, -6.657870832e-06f, -7.781486633e-06f, -7.420853824e-06f, -6.148150484e-06f, +6.436463064e-04f, +1.241949270e-03f, +1.999949993e-03f, +2.764791145e-03f, +3.274434301e-03f, +3.179347173e-03f, +2.098834001e-03f, -2.921378694e-04f, -4.159603364e-03f, -9.413027418e-03f, -1.563981567e-02f, -2.209609735e-02f, -2.776910148e-02f, -3.151204336e-02f, -3.223536296e-02f, -2.912237291e-02f, -2.182700797e-02f, -1.060963299e-02f, +3.624862950e-03f, +1.940517716e-02f, +3.488339953e-02f, +4.810821949e-02f, +5.733410396e-02f, +6.130915563e-02f, +5.948640879e-02f, +5.211720974e-02f, +4.020823094e-02f, +2.535062474e-02f, +9.454907409e-03f, -5.557099897e-03f, -1.804529590e-02f, -2.687688019e-02f, -3.154819541e-02f, -3.218919941e-02f, -2.946086403e-02f, -2.437571743e-02f, -1.808364432e-02f, -1.166703592e-02f, -5.981957730e-03f, -1.567792637e-03f, +1.369269778e-03f, +2.909344855e-03f, +3.330193582e-03f, +3.003104006e-03f, +2.297726873e-03f, +1.513292648e-03f, +8.440538267e-04f, +3.773469678e-04f, -1.532806871e-05f, -2.162143767e-05f, -2.487095151e-05f, -2.166616976e-05f, -8.747552469e-06f, +1.594627439e-05f, +5.220782014e-05f, +9.676931944e-05f, +1.430891199e-04f, +1.819234847e-04f, +2.027239640e-04f, +1.956903147e-04f, +1.541071826e-04f, +7.645544584e-05f, -3.223797337e-05f, -1.602433145e-04f, -2.903703028e-04f, -4.025137075e-04f, -4.770958382e-04f, -4.987570545e-04f, -4.595353487e-04f, -3.608345123e-04f, -2.137032898e-04f, -3.729040543e-05f, +1.442735657e-04f, +3.059758495e-04f, +4.261958904e-04f, +4.903092966e-04f, +4.929234191e-04f, +4.383447518e-04f, +3.392567061e-04f, +2.139568862e-04f, +8.278196499e-05f, -3.552359748e-05f, -1.267825385e-04f, -1.831863109e-04f, -2.036978274e-04f, -1.931446308e-04f, -1.603551633e-04f, -1.158478390e-04f, -6.960821217e-05f, -2.939256978e-05f, +1.858320897e-07f, +1.774519696e-05f, +2.454568474e-05f, +2.349400520e-05f, +1.805320008e-05f, +1.132641078e-05f, /* 1, 7 (48) */ -4.299833282e-04f, -6.683643483e-04f, -9.144827144e-04f, -1.119334155e-03f, -1.215029582e-03f, -1.116384110e-03f, -7.248622545e-04f, +6.512622063e-05f, +1.357865606e-03f, +3.246476168e-03f, +5.802374380e-03f, +9.065047940e-03f, +1.303322708e-02f, +1.765850416e-02f, +2.284230321e-02f, +2.843683849e-02f, +3.425034762e-02f, +4.005647599e-02f, +4.560726646e-02f, +5.064881970e-02f, +5.493837952e-02f, +5.826140268e-02f, +6.044711838e-02f, +6.138118026e-02f, +6.101425507e-02f, +5.936575502e-02f, +5.652236728e-02f, +5.263151721e-02f, +4.789037086e-02f, +4.253138664e-02f, +3.680572465e-02f, +3.096598422e-02f, +2.524975236e-02f, +1.986531004e-02f, +1.498057911e-02f, +1.071603260e-02f, +7.141878015e-03f, +4.279402031e-03f, +2.105983236e-03f, +5.629730153e-04f, -4.345562356e-04f, -9.872789584e-04f, -1.201347182e-03f, -1.179289092e-03f, -1.012757683e-03f, -7.775403796e-04f, -5.309554459e-04f, -3.114958267e-04f, +6.944696012e-06f, +7.771451312e-06f, +7.370361214e-06f, +5.149718660e-06f, +5.315730174e-07f, -6.977378204e-06f, -1.771084180e-05f, -3.177229965e-05f, -4.897765493e-05f, -6.881963368e-05f, -9.046084446e-05f, -1.127598233e-04f, -1.343310549e-04f, -1.536362162e-04f, -1.691001640e-04f, -1.792419368e-04f, -1.828086792e-04f, -1.788992659e-04f, -1.670646871e-04f, -1.473740055e-04f, -1.204377551e-04f, -8.738472583e-05f, -4.979272550e-05f, -9.578625365e-06f, +3.114276840e-05f, +7.021819019e-05f, +1.056189673e-04f, +1.355924986e-04f, +1.587882379e-04f, +1.743469537e-04f, +1.819458831e-04f, +1.817969543e-04f, +1.745999956e-04f, +1.614572536e-04f, +1.437591249e-04f, +1.230533962e-04f, +1.009112666e-04f, +7.880294129e-05f, +5.799376832e-05f, +3.946900620e-05f, +2.389175254e-05f, +1.159477218e-05f, +2.603385740e-06f, -3.316389466e-06f, -6.592321062e-06f, -7.771936700e-06f, -7.448764252e-06f, -6.196522682e-06f, +6.283182377e-04f, +1.220327832e-03f, +1.975079041e-03f, +2.743124976e-03f, +3.265686748e-03f, +3.195293448e-03f, +2.151041821e-03f, -1.953685500e-04f, -4.016514244e-03f, -9.231103934e-03f, -1.543709171e-02f, -2.190040704e-02f, -2.761499429e-02f, -3.143558792e-02f, -3.226760093e-02f, -2.928261623e-02f, -2.211737827e-02f, -1.101214670e-02f, +3.147767112e-03f, +1.890642011e-02f, +3.442386419e-02f, +4.774738498e-02f, +5.712040067e-02f, +6.127186522e-02f, +5.963068236e-02f, +5.242318559e-02f, +4.063442683e-02f, +2.584093403e-02f, +9.947830828e-03f, -5.118755146e-03f, -1.770603919e-02f, -2.666292331e-02f, -3.146541345e-02f, -3.222472301e-02f, -2.958764656e-02f, -2.455890374e-02f, -1.828734215e-02f, -1.186018055e-02f, -6.142312893e-03f, -1.683640476e-03f, +1.299661566e-03f, +2.879952286e-03f, +3.330379414e-03f, +3.020849203e-03f, +2.322272557e-03f, +1.536786653e-03f, +8.621070268e-04f, +3.886733786e-04f, -1.511514789e-05f, -2.145415145e-05f, -2.484874698e-05f, -2.189829870e-05f, -9.323540560e-06f, +1.499116485e-05f, +5.092347434e-05f, +9.530816669e-05f, +1.417016390e-04f, +1.809275301e-04f, +2.024497358e-04f, +1.964095286e-04f, +1.559606090e-04f, +7.939579618e-05f, -2.847194725e-05f, -1.561108897e-04f, -2.864689115e-04f, -3.994829673e-04f, -4.755023974e-04f, -4.989830154e-04f, -4.616940118e-04f, -3.647327390e-04f, -2.188606756e-04f, -4.301364407e-05f, +1.387745892e-04f, +3.014528043e-04f, +4.232343676e-04f, +4.892339038e-04f, +4.937535320e-04f, +4.408078890e-04f, +3.428543174e-04f, +2.180667583e-04f, +8.677479417e-05f, -3.217731919e-05f, -1.244353095e-04f, -1.819781453e-04f, -2.035647178e-04f, -1.938637399e-04f, -1.616126915e-04f, -1.173125582e-04f, -7.099483771e-05f, -3.050371628e-05f, -5.560964085e-07f, +1.737124731e-05f, +2.446967027e-05f, +2.361120550e-05f, +1.825684027e-05f, +1.153167060e-05f, /* 1, 8 (48) */ -4.230386322e-04f, -6.605928970e-04f, -9.071123531e-04f, -1.114184437e-03f, -1.214498009e-03f, -1.123361488e-03f, -7.425730963e-04f, +3.335392098e-05f, +1.308887951e-03f, +3.177656534e-03f, +5.711913535e-03f, +8.952288116e-03f, +1.289889603e-02f, +1.750486794e-02f, +2.267320305e-02f, +2.825759655e-02f, +3.406753894e-02f, +3.987757672e-02f, +4.544020177e-02f, +5.050144569e-02f, +5.481794176e-02f, +5.817401795e-02f, +6.039732565e-02f, +6.137160163e-02f, +6.104539784e-02f, +5.943597321e-02f, +5.662798625e-02f, +5.276710971e-02f, +4.804915909e-02f, +4.270573360e-02f, +3.698767054e-02f, +3.114778118e-02f, +2.542435236e-02f, +2.002676730e-02f, +1.512433823e-02f, +1.083908600e-02f, +7.242789281e-03f, +4.358204972e-03f, +2.163977005e-03f, +6.024420215e-04f, -4.106644831e-04f, -9.756841862e-04f, -1.198743797e-03f, -1.182605482e-03f, -1.019350004e-03f, -7.853123163e-04f, -5.384042101e-04f, -3.176923494e-04f, +6.905229076e-06f, +7.761189099e-06f, +7.407324442e-06f, +5.252536049e-06f, +7.174115923e-07f, -6.695130348e-06f, -1.732489835e-05f, -3.128352883e-05f, -4.839658372e-05f, -6.816715673e-05f, -8.976795629e-05f, -1.120662859e-04f, -1.336830254e-04f, -1.530829779e-04f, -1.686902173e-04f, -1.790187932e-04f, -1.828067631e-04f, -1.791403384e-04f, -1.675551786e-04f, -1.481035659e-04f, -1.213792189e-04f, -8.849554918e-05f, -5.101780578e-05f, -1.085426828e-05f, +2.988408757e-05f, +6.904270931e-05f, +1.045866398e-04f, +1.347525789e-04f, +1.581758507e-04f, +1.739809448e-04f, +1.818281164e-04f, +1.819130706e-04f, +1.749215037e-04f, +1.619446962e-04f, +1.443659673e-04f, +1.237302304e-04f, +1.016099164e-04f, +7.948008996e-05f, +5.861380406e-05f, +4.000588521e-05f, +2.432979486e-05f, +1.192842370e-05f, +2.836084140e-06f, -3.174026850e-06f, -6.524720458e-06f, -7.760920964e-06f, -7.475773419e-06f, -6.244486575e-06f, +6.132030899e-04f, +1.198873681e-03f, +1.950230294e-03f, +2.721226677e-03f, +3.256363208e-03f, +3.210284612e-03f, +2.201965296e-03f, -1.000603833e-04f, -3.874812605e-03f, -9.050176404e-03f, -1.523464198e-02f, -2.170399751e-02f, -2.745903369e-02f, -3.135619212e-02f, -3.229607288e-02f, -2.943872712e-02f, -2.240384718e-02f, -1.141162967e-02f, +2.672264714e-03f, +1.840743709e-02f, +3.396217017e-02f, +4.738265224e-02f, +5.690154000e-02f, +6.122885158e-02f, +5.976945695e-02f, +5.272463839e-02f, +4.105766120e-02f, +2.633016794e-02f, +1.044158436e-02f, -4.677947257e-03f, -1.736318488e-02f, -2.644485655e-02f, -3.137863865e-02f, -3.225690033e-02f, -2.971208187e-02f, -2.474088189e-02f, -1.849090686e-02f, -1.205404429e-02f, -6.303925585e-03f, -1.800953034e-03f, +1.228666729e-03f, +2.849448569e-03f, +3.329823318e-03f, +3.038220450e-03f, +2.346742228e-03f, +1.560397859e-03f, +8.803638670e-04f, +4.002050492e-04f, -1.490211996e-05f, -2.128404769e-05f, -2.482033930e-05f, -2.212093478e-05f, -9.887878991e-06f, +1.404765433e-05f, +4.964765813e-05f, +9.384920717e-05f, +1.403072766e-04f, +1.799142352e-04f, +2.021483440e-04f, +1.970947142e-04f, +1.577782226e-04f, +8.230501533e-05f, -2.472569254e-05f, -1.519813755e-04f, -2.825505523e-04f, -3.964157603e-04f, -4.738570412e-04f, -4.991488536e-04f, -4.637935950e-04f, -3.685825189e-04f, -2.239883633e-04f, -4.873099576e-05f, +1.332566780e-04f, +2.968892447e-04f, +4.202176034e-04f, +4.880976622e-04f, +4.945268237e-04f, +4.432265991e-04f, +3.464255475e-04f, +2.221704064e-04f, +9.078005214e-05f, -2.880444182e-05f, -1.220536131e-04f, -1.807343748e-04f, -2.034007180e-04f, -1.945606850e-04f, -1.628584972e-04f, -1.187754937e-04f, -7.238741685e-05f, -3.162543024e-05f, -1.309984952e-06f, +1.698658485e-05f, +2.438583951e-05f, +2.372404648e-05f, +1.845922109e-05f, +1.173783863e-05f, /* 1, 9 (48) */ -4.161334031e-04f, -6.528317079e-04f, -8.997050287e-04f, -1.108931901e-03f, -1.213780598e-03f, -1.130056618e-03f, -7.598979946e-04f, +2.070392152e-06f, +1.260491367e-03f, +3.109489377e-03f, +5.622145579e-03f, +8.840221830e-03f, +1.276521300e-02f, +1.735178496e-02f, +2.250451283e-02f, +2.807857776e-02f, +3.388473218e-02f, +3.969843638e-02f, +4.527264659e-02f, +5.035334212e-02f, +5.469656255e-02f, +5.808552240e-02f, +6.034630785e-02f, +6.136074737e-02f, +6.107528192e-02f, +5.950501592e-02f, +5.673257289e-02f, +5.290186229e-02f, +4.820733494e-02f, +4.287971454e-02f, +3.716949865e-02f, +3.132969425e-02f, +2.559927386e-02f, +2.018871199e-02f, +1.526870420e-02f, +1.096281623e-02f, +7.344399198e-03f, +4.437685062e-03f, +2.222590809e-03f, +6.424479067e-04f, -3.863346882e-04f, -9.637557625e-04f, -1.195907712e-03f, -1.185779509e-03f, -1.025874724e-03f, -7.930732373e-04f, -5.458799835e-04f, -3.239368359e-04f, +6.865118852e-06f, +7.749749481e-06f, +7.442528130e-06f, +5.353022246e-06f, +9.004273601e-07f, -6.416043006e-06f, -1.694222924e-05f, -3.079786504e-05f, -4.781813497e-05f, -6.751649231e-05f, -8.907576968e-05f, -1.113720959e-04f, -1.330328344e-04f, -1.525260286e-04f, -1.682750973e-04f, -1.787892338e-04f, -1.827975304e-04f, -1.793736353e-04f, -1.680379435e-04f, -1.488259813e-04f, -1.223146305e-04f, -8.960185788e-05f, -5.224024653e-05f, -1.212934627e-05f, +2.862385418e-05f, +6.786367609e-05f, +1.035490276e-04f, +1.339060344e-04f, +1.575559798e-04f, +1.736071204e-04f, +1.817027291e-04f, +1.820222430e-04f, +1.752371429e-04f, +1.624276316e-04f, +1.449698222e-04f, +1.244056229e-04f, +1.023085737e-04f, +8.015849554e-05f, +5.923607174e-05f, +4.054565455e-05f, +2.477106051e-05f, +1.226532812e-05f, +3.071808559e-06f, -3.029057220e-06f, -6.455051086e-06f, -7.748421147e-06f, -7.501864540e-06f, -6.292028226e-06f, +5.983009699e-04f, +1.177589633e-03f, +1.925409955e-03f, +2.699105742e-03f, +3.246475329e-03f, +3.224332267e-03f, +2.251612954e-03f, -6.211176122e-06f, -3.734505328e-03f, -8.870262169e-03f, -1.503249363e-02f, -2.150690279e-02f, -2.730125546e-02f, -3.127388711e-02f, -3.232079857e-02f, -2.959070849e-02f, -2.268639774e-02f, -1.180804543e-02f, +2.198407673e-03f, +1.790828824e-02f, +3.349837658e-02f, +4.701406972e-02f, +5.667755164e-02f, +6.118012058e-02f, +5.990271363e-02f, +5.302152764e-02f, +4.147787880e-02f, +2.681826560e-02f, +1.093611118e-02f, -4.234720657e-03f, -1.701675933e-02f, -2.622268614e-02f, -3.128785860e-02f, -3.228570477e-02f, -2.983413549e-02f, -2.492161626e-02f, -1.869430758e-02f, -1.224860498e-02f, -6.466784082e-03f, -1.919728528e-03f, +1.156279312e-03f, +2.817823139e-03f, +3.328513333e-03f, +3.055207035e-03f, +2.371128067e-03f, +1.584121905e-03f, +8.988230881e-04f, +4.119428878e-04f, -1.468905343e-05f, -2.111122436e-05f, -2.478583769e-05f, -2.233416943e-05f, -1.044060700e-05f, +1.311578707e-05f, +4.838051740e-05f, +9.239268525e-05f, +1.389063463e-04f, +1.788839288e-04f, +2.018200630e-04f, +1.977460188e-04f, +1.595599860e-04f, +8.518285353e-05f, -2.099965721e-05f, -1.478553601e-04f, -2.786158599e-04f, -3.933126532e-04f, -4.721601571e-04f, -4.992546924e-04f, -4.658339177e-04f, -3.723833847e-04f, -2.290856711e-04f, -5.444167862e-05f, +1.277205798e-04f, +2.922857573e-04f, +4.171459276e-04f, +4.869005993e-04f, +4.952430311e-04f, +4.456003923e-04f, +3.499697813e-04f, +2.262672056e-04f, +9.479721092e-05f, -2.540531878e-05f, -1.196375918e-04f, -1.794549389e-04f, -2.032056088e-04f, -1.952351551e-04f, -1.640922509e-04f, -1.202363612e-04f, -7.378575245e-05f, -3.275761770e-05f, -2.075834377e-06f, +1.659113991e-05f, +2.429408800e-05f, +2.383242151e-05f, +1.866025781e-05f, +1.194486404e-05f, /* 1,10 (48) */ -4.092682842e-04f, -6.450819584e-04f, -8.922625006e-04f, -1.103578878e-03f, -1.212880170e-03f, -1.136472661e-03f, -7.768402239e-04f, -2.872747289e-05f, +1.212673232e-03f, +3.041972885e-03f, +5.533069809e-03f, +8.728849735e-03f, +1.263218017e-02f, +1.719925894e-02f, +2.233623773e-02f, +2.789978852e-02f, +3.370193465e-02f, +3.951906275e-02f, +4.510460865e-02f, +5.020451614e-02f, +5.457424791e-02f, +5.799592054e-02f, +6.029406760e-02f, +6.134861802e-02f, +6.110390578e-02f, +5.957287960e-02f, +5.683612192e-02f, +5.303576832e-02f, +4.836489092e-02f, +4.305332166e-02f, +3.735120138e-02f, +3.151171649e-02f, +2.577451100e-02f, +2.035113962e-02f, +1.541367402e-02f, +1.108722185e-02f, +7.446707771e-03f, +4.517843558e-03f, +2.281826881e-03f, +6.829935612e-04f, -3.615636277e-04f, -9.514904344e-04f, -1.192835904e-03f, -1.188808566e-03f, -1.032329775e-03f, -8.008216584e-04f, -5.533818481e-04f, -3.302288642e-04f, +6.824380746e-06f, +7.737150143e-06f, +7.475990650e-06f, +5.451194286e-06f, +1.080633738e-06f, -6.140108674e-06f, -1.656283491e-05f, -3.031531818e-05f, -4.724232877e-05f, -6.686767051e-05f, -8.838432342e-05f, -1.106772984e-04f, -1.323805306e-04f, -1.519654159e-04f, -1.678548470e-04f, -1.785532927e-04f, -1.827810030e-04f, -1.795991635e-04f, -1.685129721e-04f, -1.495412255e-04f, -1.232439486e-04f, -9.070359815e-05f, -5.345998535e-05f, -1.340379299e-05f, +2.736213345e-05f, +6.668114971e-05f, +1.025061794e-04f, +1.330529000e-04f, +1.569286442e-04f, +1.732254828e-04f, +1.815697075e-04f, +1.821244437e-04f, +1.755468747e-04f, +1.629060141e-04f, +1.455706410e-04f, +1.250795263e-04f, +1.030071957e-04f, +8.083812284e-05f, +5.986054554e-05f, +4.108829861e-05f, +2.521554387e-05f, +1.260548869e-05f, +3.310569361e-06f, -2.881465290e-06f, -6.383295056e-06f, -7.734418951e-06f, -7.527020764e-06f, -6.339133594e-06f, +5.836119165e-04f, +1.156478409e-03f, +1.900624117e-03f, +2.676771573e-03f, +3.236034722e-03f, +3.237448054e-03f, +2.299993471e-03f, +8.618150913e-05f, -3.595598982e-03f, -8.691378240e-03f, -1.483067357e-02f, -2.130915678e-02f, -2.714169548e-02f, -3.118870425e-02f, -3.234179823e-02f, -2.973856385e-02f, -2.296501360e-02f, -1.220135808e-02f, +1.726247516e-03f, +1.740903355e-02f, +3.303254266e-02f, +4.664168634e-02f, +5.644846596e-02f, +6.112567891e-02f, +6.003043421e-02f, +5.331381339e-02f, +4.189502473e-02f, +2.730516620e-02f, +1.143135421e-02f, -3.789120265e-03f, -1.666678955e-02f, -2.599641894e-02f, -3.119306139e-02f, -3.231111009e-02f, -2.995377308e-02f, -2.510107120e-02f, -1.889751319e-02f, -1.244384013e-02f, -6.630876333e-03f, -2.039964889e-03f, +1.082493559e-03f, +2.785065521e-03f, +3.326437498e-03f, +3.071798175e-03f, +2.395422155e-03f, +1.607954327e-03f, +9.174833459e-04f, +4.238877519e-04f, -1.447601573e-05f, -2.093577875e-05f, -2.474535144e-05f, -2.253809516e-05f, -1.098176596e-05f, +1.219560428e-05f, +4.712219483e-05f, +9.093884253e-05f, +1.374991601e-04f, +1.778369407e-04f, +2.014651700e-04f, +1.983635946e-04f, +1.613058679e-04f, +8.802906768e-05f, -1.729428370e-05f, -1.437334289e-04f, -2.746654690e-04f, -3.901742165e-04f, -4.704121395e-04f, -4.993006637e-04f, -4.678148086e-04f, -3.761348771e-04f, -2.341519224e-04f, -6.014491190e-05f, +1.221670459e-04f, +2.876429354e-04f, +4.140196788e-04f, +4.856427518e-04f, +4.959018989e-04f, +4.479287843e-04f, +3.534864055e-04f, +2.303565294e-04f, +9.882573812e-05f, -2.198030972e-05f, -1.171873950e-04f, -1.781397830e-04f, -2.029791747e-04f, -1.958868412e-04f, -1.653136230e-04f, -1.216948744e-04f, -7.518964427e-05f, -3.390018149e-05f, -2.853642879e-06f, +1.618484449e-05f, +2.419431183e-05f, +2.393622360e-05f, +1.885986474e-05f, +1.215269488e-05f, /* 1,11 (48) */ -4.024439035e-04f, -6.373448083e-04f, -8.847865099e-04f, -1.098127684e-03f, -1.211799537e-03f, -1.142612770e-03f, -7.934030588e-04f, -5.904279106e-05f, +1.165430903e-03f, +2.975105214e-03f, +5.444685486e-03f, +8.618172436e-03f, +1.249979964e-02f, +1.704729352e-02f, +2.216838289e-02f, +2.772123523e-02f, +3.351915364e-02f, +3.933946359e-02f, +4.493609568e-02f, +5.005497492e-02f, +5.445100397e-02f, +5.790521695e-02f, +6.024060761e-02f, +6.133521423e-02f, +6.113126791e-02f, +5.963956075e-02f, +5.693862809e-02f, +5.316882122e-02f, +4.852181957e-02f, +4.322654714e-02f, +3.753277109e-02f, +3.169384093e-02f, +2.595005788e-02f, +2.051404564e-02f, +1.555924466e-02f, +1.121230138e-02f, +7.549714967e-03f, +4.598681680e-03f, +2.341687426e-03f, +7.240818599e-04f, -3.363480838e-04f, -9.388849457e-04f, -1.189525335e-03f, -1.191690031e-03f, -1.038713070e-03f, -8.085560774e-04f, -5.609088688e-04f, -3.365679977e-04f, +6.783030070e-06f, +7.723408718e-06f, +7.507730380e-06f, +5.547069277e-06f, +1.258044290e-06f, -5.867319628e-06f, -1.618671553e-05f, -2.983589784e-05f, -4.666918493e-05f, -6.622072111e-05f, -8.769365605e-05f, -1.099819384e-04f, -1.317261621e-04f, -1.514011878e-04f, -1.674295098e-04f, -1.783110046e-04f, -1.827572033e-04f, -1.798169304e-04f, -1.689802556e-04f, -1.502492729e-04f, -1.241671324e-04f, -9.180071650e-05f, -5.467696004e-05f, -1.467754219e-05f, +2.609899070e-05f, +6.549518960e-05f, +1.014581444e-04f, +1.321932110e-04f, +1.562938633e-04f, +1.728360349e-04f, +1.814290384e-04f, +1.822196454e-04f, +1.758506607e-04f, +1.633797983e-04f, +1.461683752e-04f, +1.257518931e-04f, +1.037057395e-04f, +8.151893637e-05f, +6.048719935e-05f, +4.163380147e-05f, +2.566323901e-05f, +1.294890841e-05f, +3.552376721e-06f, -2.731235893e-06f, -6.309434527e-06f, -7.718896060e-06f, -7.551225169e-06f, -6.385788534e-06f, +5.691359007e-04f, +1.135542630e-03f, +1.875878766e-03f, +2.654233478e-03f, +3.225052956e-03f, +3.249643658e-03f, +2.347115666e-03f, +1.771203517e-04f, -3.458099822e-03f, -8.513541299e-03f, -1.462920840e-02f, -2.111079318e-02f, -2.698038961e-02f, -3.110067518e-02f, -3.235909251e-02f, -2.988229728e-02f, -2.323967906e-02f, -1.259153230e-02f, +1.255835377e-03f, +1.690973288e-02f, +3.256472785e-02f, +4.626555146e-02f, +5.621431404e-02f, +6.106553399e-02f, +6.015260125e-02f, +5.360145633e-02f, +4.230904441e-02f, +2.779080895e-02f, +1.192725611e-02f, -3.341191481e-03f, -1.631330314e-02f, -2.576606241e-02f, -3.109423565e-02f, -3.233309040e-02f, -3.007096047e-02f, -2.527921098e-02f, -1.910049237e-02f, -1.263972698e-02f, -6.796189956e-03f, -2.161659764e-03f, +1.007303915e-03f, +2.751165340e-03f, +3.323583856e-03f, +3.087983019e-03f, +2.419616467e-03f, +1.631890550e-03f, +9.363432107e-04f, +4.360404467e-04f, -1.426307319e-05f, -2.075780740e-05f, -2.469898981e-05f, -2.273280550e-05f, -1.151139937e-05f, +1.128714424e-05f, +4.587282982e-05f, +8.948791782e-05f, +1.360860288e-04f, +1.767736006e-04f, +2.010839449e-04f, +1.989475989e-04f, +1.630158436e-04f, +9.084342132e-05f, -1.361000888e-05f, -1.396161639e-04f, -2.707000147e-04f, -3.870010247e-04f, -4.686133899e-04f, -4.992869089e-04f, -4.697361063e-04f, -3.798365454e-04f, -2.391864458e-04f, -6.583991611e-05f, +1.165968301e-04f, +2.829613790e-04f, +4.108392049e-04f, +4.843241664e-04f, +4.965031808e-04f, +4.502112968e-04f, +3.569748093e-04f, +2.344377501e-04f, +1.028650970e-04f, -1.852978049e-05f, -1.147031788e-04f, -1.767888582e-04f, -2.027212045e-04f, -1.965154358e-04f, -1.665222834e-04f, -1.231507447e-04f, -7.659888899e-05f, -3.505302122e-05f, -3.643405993e-06f, +1.576763225e-05f, +2.408640770e-05f, +2.403534541e-05f, +1.905795531e-05f, +1.236127806e-05f, /* 1,12 (48) */ -3.956608734e-04f, -6.296213996e-04f, -8.772787795e-04f, -1.092580615e-03f, -1.210541492e-03f, -1.148480090e-03f, -8.095897743e-04f, -8.887868891e-05f, +1.118761719e-03f, +2.908884493e-03f, +5.356991830e-03f, +8.508190498e-03f, +1.236807348e-02f, +1.689589233e-02f, +2.200095338e-02f, +2.754292423e-02f, +3.333639644e-02f, +3.915964666e-02f, +4.476711542e-02f, +4.990472564e-02f, +5.432683683e-02f, +5.781341623e-02f, +6.018593065e-02f, +6.132053668e-02f, +6.115736690e-02f, +5.970505594e-02f, +5.704008624e-02f, +5.330101443e-02f, +4.867811343e-02f, +4.339938318e-02f, +3.771420013e-02f, +3.187606058e-02f, +2.612590854e-02f, +2.067742544e-02f, +1.570541304e-02f, +1.133805327e-02f, +7.653420706e-03f, +4.680200617e-03f, +2.402174625e-03f, +7.657156613e-04f, -3.106848448e-04f, -9.259360373e-04f, -1.185972958e-03f, -1.194421267e-03f, -1.045022505e-03f, -8.162749735e-04f, -5.684600940e-04f, -3.429537863e-04f, +6.741082046e-06f, +7.708542790e-06f, +7.537765705e-06f, +5.640664402e-06f, +1.432672729e-06f, -5.597667930e-06f, -1.581387101e-05f, -2.935961333e-05f, -4.609872289e-05f, -6.557567358e-05f, -8.700380586e-05f, -1.092860609e-04f, -1.310697774e-04f, -1.508333922e-04f, -1.669991291e-04f, -1.780624044e-04f, -1.827261540e-04f, -1.800269439e-04f, -1.694397852e-04f, -1.509500984e-04f, -1.250841413e-04f, -9.289315982e-05f, -5.589110862e-05f, -1.595052764e-05f, +2.483449136e-05f, +6.430585546e-05f, +1.004049721e-04f, +1.313270034e-04f, +1.556516572e-04f, +1.724387800e-04f, +1.812807091e-04f, +1.823078213e-04f, +1.761484629e-04f, +1.638489388e-04f, +1.467629763e-04f, +1.264226756e-04f, +1.044041619e-04f, +8.220090042e-05f, +6.111600674e-05f, +4.218214685e-05f, +2.611413971e-05f, +1.329559004e-05f, +3.797240619e-06f, -2.578353981e-06f, -6.233451705e-06f, -7.701834142e-06f, -7.574460766e-06f, -6.431978801e-06f, +5.548728275e-04f, +1.114784822e-03f, +1.851179776e-03f, +2.631500672e-03f, +3.213541556e-03f, +3.260930802e-03f, +2.392988496e-03f, +2.666082695e-04f, -3.322013793e-03f, -8.336767698e-03f, -1.442812445e-02f, -2.091184558e-02f, -2.681737377e-02f, -3.100983176e-02f, -3.237270252e-02f, -3.002191345e-02f, -2.351037908e-02f, -1.297853332e-02f, +7.872219866e-04f, +1.641044598e-02f, +3.209499175e-02f, +4.588571491e-02f, +5.597512760e-02f, +6.099969408e-02f, +6.026919808e-02f, +5.388441771e-02f, +4.271988361e-02f, +2.827513312e-02f, +1.242375929e-02f, -2.890980184e-03f, -1.595632833e-02f, -2.553162466e-02f, -3.099137055e-02f, -3.235162018e-02f, -3.018566365e-02f, -2.545599984e-02f, -1.930321357e-02f, -1.283624241e-02f, -6.962712239e-03f, -2.284810508e-03f, +9.307050260e-04f, +2.716112319e-03f, +3.319940450e-03f, +3.103750651e-03f, +2.443702875e-03f, +1.655925896e-03f, +9.554011660e-04f, +4.484017248e-04f, -1.405029109e-05f, -2.057740610e-05f, -2.464686208e-05f, -2.291839499e-05f, -1.202955281e-05f, +1.039044230e-05f, +4.463255849e-05f, +8.804014709e-05f, +1.346672613e-04f, +1.756942389e-04f, +2.006766703e-04f, +1.994981936e-04f, +1.646898946e-04f, +9.362568470e-05f, -9.947263949e-06f, -1.355041440e-04f, -2.667201318e-04f, -3.837936558e-04f, -4.667643167e-04f, -4.992135781e-04f, -4.715976586e-04f, -3.834879467e-04f, -2.441885755e-04f, -7.152591317e-05f, +1.110106893e-04f, +2.782416943e-04f, +4.076048624e-04f, +4.829448989e-04f, +4.970466386e-04f, +4.524474573e-04f, +3.604343844e-04f, +2.385102389e-04f, +1.069147467e-04f, -1.505410309e-05f, -1.121851058e-04f, -1.754021216e-04f, -2.024314911e-04f, -1.971206335e-04f, -1.677179014e-04f, -1.246036813e-04f, -7.801328021e-05f, -3.621603328e-05f, -4.445116563e-06f, +1.533943858e-05f, +2.397027294e-05f, +2.412967932e-05f, +1.925444200e-05f, +1.257055940e-05f, /* 1,13 (48) */ -3.889197914e-04f, -6.219128568e-04f, -8.697410138e-04f, -1.086939950e-03f, -1.209108819e-03f, -1.154077757e-03f, -8.254036453e-04f, -1.182383022e-04f, +1.072662996e-03f, +2.843308820e-03f, +5.269988024e-03f, +8.398904437e-03f, +1.223700370e-02f, +1.674505894e-02f, +2.183395425e-02f, +2.736486182e-02f, +3.315367029e-02f, +3.897961971e-02f, +4.459767564e-02f, +4.975377555e-02f, +5.420175269e-02f, +5.772052307e-02f, +6.013003955e-02f, +6.130458616e-02f, +6.118220139e-02f, +5.976936179e-02f, +5.714049121e-02f, +5.343234143e-02f, +4.883376509e-02f, +4.357182196e-02f, +3.789548084e-02f, +3.205836840e-02f, +2.630205700e-02f, +2.084127438e-02f, +1.585217601e-02f, +1.146447595e-02f, +7.757824868e-03f, +4.762401517e-03f, +2.463290632e-03f, +8.078978082e-04f, -2.845707051e-04f, -9.126404473e-04f, -1.182175717e-03f, -1.196999621e-03f, -1.051255956e-03f, -8.239768076e-04f, -5.760345548e-04f, -3.493857651e-04f, +6.698551799e-06f, +7.692569891e-06f, +7.566115013e-06f, +5.731996914e-06f, +1.604532908e-06f, -5.331145428e-06f, -1.544430097e-05f, -2.888647360e-05f, -4.553096181e-05f, -6.493255712e-05f, -8.631481091e-05f, -1.085897106e-04f, -1.304114247e-04f, -1.502620772e-04f, -1.665637486e-04f, -1.778075273e-04f, -1.826878783e-04f, -1.802292123e-04f, -1.698915531e-04f, -1.516436772e-04f, -1.259949353e-04f, -9.398087530e-05f, -5.710236930e-05f, -1.722268318e-05f, +2.356870096e-05f, +6.311320721e-05f, +9.934671235e-05f, +1.304543135e-04f, +1.550020465e-04f, +1.720337218e-04f, +1.811247071e-04f, +1.823889449e-04f, +1.764402438e-04f, +1.643133904e-04f, +1.473543959e-04f, +1.270918263e-04f, +1.051024197e-04f, +8.288397896e-05f, +6.174694096e-05f, +4.273331820e-05f, +2.656823942e-05f, +1.364553606e-05f, +4.045170841e-06f, -2.422804631e-06f, -6.155328848e-06f, -7.683214852e-06f, -7.596710501e-06f, -6.477690047e-06f, +5.408225365e-04f, +1.094207416e-03f, +1.826532914e-03f, +2.608582277e-03f, +3.201512003e-03f, +3.271321245e-03f, +2.437621054e-03f, +3.546484166e-04f, -3.187346532e-03f, -8.161073460e-03f, -1.422744778e-02f, -2.071234739e-02f, -2.665268387e-02f, -3.091620608e-02f, -3.238264978e-02f, -3.015741759e-02f, -2.377709921e-02f, -1.336232698e-02f, +3.204576699e-04f, +1.591123240e-02f, +3.162339409e-02f, +4.550222697e-02f, +5.573093902e-02f, +6.092816816e-02f, +6.038020877e-02f, +5.416265940e-02f, +4.312748847e-02f, +2.875807801e-02f, +1.292080593e-02f, -2.438532727e-03f, -1.559589395e-02f, -2.529311442e-02f, -3.088445581e-02f, -3.236667428e-02f, -3.029784876e-02f, -2.563140196e-02f, -1.950564506e-02f, -1.303336304e-02f, -7.130430141e-03f, -2.409414189e-03f, +8.526917458e-04f, +2.679896285e-03f, +3.315495333e-03f, +3.119090090e-03f, +2.467673148e-03f, +1.680055575e-03f, +9.746556080e-04f, +4.609722842e-04f, -1.383773357e-05f, -2.039466990e-05f, -2.458907746e-05f, -2.309495914e-05f, -1.253627391e-05f, +9.505530872e-06f, +4.340151373e-05f, +8.659576347e-05f, +1.332431650e-04f, +1.745991863e-04f, +2.002436315e-04f, +2.000155457e-04f, +1.663280088e-04f, +9.637563473e-05f, -6.306474398e-06f, -1.313979444e-04f, -2.627264553e-04f, -3.805526914e-04f, -4.648653351e-04f, -4.990808307e-04f, -4.733993232e-04f, -3.870886467e-04f, -2.491576510e-04f, -7.720212654e-05f, +1.054093829e-04f, +2.734844944e-04f, +4.043170167e-04f, +4.815050153e-04f, +4.975320429e-04f, +4.546367993e-04f, +3.638645247e-04f, +2.425733656e-04f, +1.109741421e-04f, -1.155365566e-05f, -1.096333455e-04f, -1.739795362e-04f, -2.021098317e-04f, -1.977021306e-04f, -1.689001464e-04f, -1.260533915e-04f, -7.943260847e-05f, -3.738911081e-05f, -5.258764720e-06f, +1.490020064e-05f, +2.384580553e-05f, +2.421911742e-05f, +1.944923643e-05f, +1.278048359e-05f, /* 1,14 (48) */ -3.822212396e-04f, -6.142202869e-04f, -8.621748988e-04f, -1.081207953e-03f, -1.207504287e-03f, -1.159408903e-03f, -8.408479463e-04f, -1.471247758e-04f, +1.027132034e-03f, +2.778376263e-03f, +5.183673213e-03f, +8.290314726e-03f, +1.210659227e-02f, +1.659479686e-02f, +2.166739050e-02f, +2.718705429e-02f, +3.297098241e-02f, +3.879939050e-02f, +4.442778408e-02f, +4.960213187e-02f, +5.407575776e-02f, +5.762654220e-02f, +6.007293718e-02f, +6.128736347e-02f, +6.120577010e-02f, +5.983247500e-02f, +5.723983792e-02f, +5.356279575e-02f, +4.898876714e-02f, +4.374385568e-02f, +3.807660555e-02f, +3.224075735e-02f, +2.647849724e-02f, +2.100558777e-02f, +1.599953041e-02f, +1.159156778e-02f, +7.862927288e-03f, +4.845285496e-03f, +2.525037573e-03f, +8.506311264e-04f, -2.580024657e-04f, -8.989949112e-04f, -1.178130546e-03f, -1.199422426e-03f, -1.057411285e-03f, -8.316600224e-04f, -5.836312653e-04f, -3.558634551e-04f, +6.655454364e-06f, +7.675507496e-06f, +7.592796692e-06f, +5.821084136e-06f, +1.773638826e-06f, -5.067743758e-06f, -1.507800476e-05f, -2.841648733e-05f, -4.496592050e-05f, -6.429140060e-05f, -8.562670900e-05f, -1.078929320e-04f, -1.297511522e-04f, -1.496872908e-04f, -1.661234121e-04f, -1.775464088e-04f, -1.826423998e-04f, -1.804237446e-04f, -1.703355517e-04f, -1.523299854e-04f, -1.268994749e-04f, -9.506381053e-05f, -5.831068052e-05f, -1.849394269e-05f, +2.230168514e-05f, +6.191730505e-05f, +9.828341550e-05f, +1.295751782e-04f, +1.543450521e-04f, +1.716208647e-04f, +1.809610208e-04f, +1.824629900e-04f, +1.767259657e-04f, +1.647731083e-04f, +1.479425855e-04f, +1.277592971e-04f, +1.058004694e-04f, +8.356813575e-05f, +6.237997497e-05f, +4.328729862e-05f, +2.702553133e-05f, +1.399874871e-05f, +4.296176977e-06f, -2.264573046e-06f, -6.075048267e-06f, -7.663019833e-06f, -7.617957255e-06f, -6.522907823e-06f, +5.269848029e-04f, +1.073812746e-03f, +1.801943836e-03f, +2.585487318e-03f, +3.188975729e-03f, +3.280826776e-03f, +2.481022568e-03f, +4.412441800e-04f, -3.054103367e-03f, -7.986474273e-03f, -1.402720415e-02f, -2.051233184e-02f, -2.648635586e-02f, -3.081983044e-02f, -3.238895626e-02f, -3.028881553e-02f, -2.403982567e-02f, -1.374287967e-02f, -1.444076651e-04f, +1.541215157e-02f, +3.114999476e-02f, +4.511513832e-02f, +5.548178137e-02f, +6.085096604e-02f, +6.048561815e-02f, +5.443614390e-02f, +4.353180549e-02f, +2.923958303e-02f, +1.341833798e-02f, -1.983895928e-03f, -1.523202942e-02f, -2.505054105e-02f, -3.077348167e-02f, -3.237822794e-02f, -3.040748210e-02f, -2.580538150e-02f, -1.970775489e-02f, -1.323106518e-02f, -7.299330287e-03f, -2.535467581e-03f, +7.732591374e-04f, +2.642507175e-03f, +3.310236568e-03f, +3.133990291e-03f, +2.491518953e-03f, +1.704274692e-03f, +9.941048444e-04f, +4.737527678e-04f, -1.362546371e-05f, -2.020969306e-05f, -2.452574511e-05f, -2.326259437e-05f, -1.303161231e-05f, +8.632439490e-06f, +4.217982515e-05f, +8.515499721e-05f, +1.318140456e-04f, +1.734887737e-04f, +1.997851162e-04f, +2.004998266e-04f, +1.679301801e-04f, +9.909305502e-05f, -2.688059979e-06f, -1.272981371e-04f, -2.587196197e-04f, -3.772787163e-04f, -4.629168670e-04f, -4.988888348e-04f, -4.751409672e-04f, -3.906382195e-04f, -2.540930173e-04f, -8.286778134e-05f, +9.979367328e-05f, +2.686903983e-04f, +4.009760422e-04f, +4.800045906e-04f, +4.979591725e-04f, +4.567788623e-04f, +3.672646271e-04f, +2.466264993e-04f, +1.150427340e-04f, -8.028822401e-06f, -1.070480740e-04f, -1.725210712e-04f, -2.017560275e-04f, -1.982596258e-04f, -1.700686873e-04f, -1.274995807e-04f, -8.085666129e-05f, -3.857214372e-05f, -6.084337856e-06f, +1.444985736e-05f, +2.371290417e-05f, +2.430355154e-05f, +1.964224932e-05f, +1.299099421e-05f, /* 1,15 (48) */ -3.755657852e-04f, -6.065447794e-04f, -8.545821021e-04f, -1.075386869e-03f, -1.205730648e-03f, -1.164476647e-03f, -8.559259511e-04f, -1.755412632e-04f, +9.821661133e-04f, +2.714084862e-03f, +5.098046504e-03f, +8.182421794e-03f, +1.197684112e-02f, +1.644510957e-02f, +2.150126709e-02f, +2.700950789e-02f, +3.278834001e-02f, +3.861896676e-02f, +4.425744853e-02f, +4.944980188e-02f, +5.394885828e-02f, +5.753147838e-02f, +6.001462650e-02f, +6.126886953e-02f, +6.122807178e-02f, +5.989439231e-02f, +5.733812134e-02f, +5.369237093e-02f, +4.914311219e-02f, +4.391547655e-02f, +3.825756657e-02f, +3.242322034e-02f, +2.665522321e-02f, +2.117036087e-02f, +1.614747299e-02f, +1.171932707e-02f, +7.968727757e-03f, +4.928853632e-03f, +2.587417548e-03f, +8.939184250e-04f, -2.309769343e-04f, -8.849961625e-04f, -1.173834369e-03f, -1.201686999e-03f, -1.063486334e-03f, -8.393230423e-04f, -5.912492225e-04f, -3.623863630e-04f, +6.611804677e-06f, +7.657373026e-06f, +7.617829132e-06f, +5.907943456e-06f, +1.940004617e-06f, -4.807454348e-06f, -1.471498148e-05f, -2.794966288e-05f, -4.440361746e-05f, -6.365223261e-05f, -8.493953768e-05f, -1.071957695e-04f, -1.290890081e-04f, -1.491090813e-04f, -1.656781636e-04f, -1.772790849e-04f, -1.825897425e-04f, -1.806105501e-04f, -1.707717740e-04f, -1.530089992e-04f, -1.277977209e-04f, -9.614191340e-05f, -5.951598093e-05f, -1.976424015e-05f, +2.103350960e-05f, +6.071820940e-05f, +9.721513218e-05f, +1.286896348e-04f, +1.536806957e-04f, +1.712002137e-04f, +1.807896387e-04f, +1.825299310e-04f, +1.770055917e-04f, +1.652280476e-04f, +1.485274967e-04f, +1.284250404e-04f, +1.064982673e-04f, +8.425333425e-05f, +6.301508140e-05f, +4.384407088e-05f, +2.748600830e-05f, +1.435522994e-05f, +4.550268416e-06f, -2.103644554e-06f, -5.992592328e-06f, -7.641230718e-06f, -7.638183844e-06f, -6.567617582e-06f, +5.133593392e-04f, +1.053603053e-03f, +1.777418091e-03f, +2.562224724e-03f, +3.175944117e-03f, +3.289459215e-03f, +2.523202393e-03f, +5.263991772e-04f, -2.922289321e-03f, -7.812985500e-03f, -1.382741904e-02f, -2.031183202e-02f, -2.631842568e-02f, -3.072073739e-02f, -3.239164432e-02f, -3.041611367e-02f, -2.429854529e-02f, -1.412015839e-02f, -6.073245321e-04f, +1.491326273e-02f, +3.067485380e-02f, +4.472450010e-02f, +5.522768835e-02f, +6.076809826e-02f, +6.058541183e-02f, +5.470483430e-02f, +4.393278153e-02f, +2.971958762e-02f, +1.391629715e-02f, -1.527117065e-03f, -1.486476480e-02f, -2.480391455e-02f, -3.065843893e-02f, -3.238625676e-02f, -3.051453018e-02f, -2.597790257e-02f, -1.990951092e-02f, -1.342932480e-02f, -7.469398974e-03f, -2.662967162e-03f, +6.924024761e-04f, +2.603935031e-03f, +3.304152230e-03f, +3.148440148e-03f, +2.515231857e-03f, +1.728578244e-03f, +1.013747094e-03f, +4.867437620e-04f, -1.341354347e-05f, -2.002256905e-05f, -2.445697407e-05f, -2.342139801e-05f, -1.351561964e-05f, +7.771194801e-06f, +4.096761910e-05f, +8.371807564e-05f, +1.303802073e-04f, +1.723633322e-04f, +1.993014146e-04f, +2.009512126e-04f, +1.694964089e-04f, +1.017777359e-04f, +9.075653692e-07f, -1.232052905e-04f, -2.547002593e-04f, -3.739723191e-04f, -4.609193410e-04f, -4.986377677e-04f, -4.768224673e-04f, -3.941362476e-04f, -2.589940252e-04f, -8.852210449e-05f, +9.416432483e-05f, +2.638600314e-04f, +3.975823219e-04f, +4.784437097e-04f, +4.983278153e-04f, +4.588731922e-04f, +3.706340911e-04f, +2.506690081e-04f, +1.191199691e-04f, -4.479993558e-06f, -1.044294743e-04f, -1.710267017e-04f, -2.013698844e-04f, -1.987928195e-04f, -1.712231930e-04f, -1.289419522e-04f, -8.228522318e-05f, -3.976501868e-05f, -6.921820601e-06f, +1.398834949e-05f, +2.357146827e-05f, +2.438287329e-05f, +1.983339052e-05f, +1.320203372e-05f, /* 1,16 (48) */ -3.689539805e-04f, -5.988874064e-04f, -8.469642730e-04f, -1.069478926e-03f, -1.203790643e-03f, -1.169284101e-03f, -8.706409326e-04f, -2.034909260e-04f, +9.377624959e-04f, +2.650432629e-03f, +5.013106966e-03f, +8.075226025e-03f, +1.184775211e-02f, +1.629600049e-02f, +2.133558892e-02f, +2.683222880e-02f, +3.260575027e-02f, +3.843835620e-02f, +4.408667676e-02f, +4.929679288e-02f, +5.382106056e-02f, +5.743533647e-02f, +5.995511052e-02f, +6.124910529e-02f, +6.124910529e-02f, +5.995511052e-02f, +5.743533647e-02f, +5.382106056e-02f, +4.929679288e-02f, +4.408667676e-02f, +3.843835620e-02f, +3.260575027e-02f, +2.683222880e-02f, +2.133558892e-02f, +1.629600049e-02f, +1.184775211e-02f, +8.075226025e-03f, +5.013106966e-03f, +2.650432629e-03f, +9.377624959e-04f, -2.034909260e-04f, -8.706409326e-04f, -1.169284101e-03f, -1.203790643e-03f, -1.069478926e-03f, -8.469642730e-04f, -5.988874064e-04f, -3.689539805e-04f, +6.567617582e-06f, +7.638183844e-06f, +7.641230718e-06f, +5.992592328e-06f, +2.103644554e-06f, -4.550268416e-06f, -1.435522994e-05f, -2.748600830e-05f, -4.384407088e-05f, -6.301508140e-05f, -8.425333425e-05f, -1.064982673e-04f, -1.284250404e-04f, -1.485274967e-04f, -1.652280476e-04f, -1.770055917e-04f, -1.825299310e-04f, -1.807896387e-04f, -1.712002137e-04f, -1.536806957e-04f, -1.286896348e-04f, -9.721513218e-05f, -6.071820940e-05f, -2.103350960e-05f, +1.976424015e-05f, +5.951598093e-05f, +9.614191340e-05f, +1.277977209e-04f, +1.530089992e-04f, +1.707717740e-04f, +1.806105501e-04f, +1.825897425e-04f, +1.772790849e-04f, +1.656781636e-04f, +1.491090813e-04f, +1.290890081e-04f, +1.071957695e-04f, +8.493953768e-05f, +6.365223261e-05f, +4.440361746e-05f, +2.794966288e-05f, +1.471498148e-05f, +4.807454348e-06f, -1.940004617e-06f, -5.907943456e-06f, -7.617829132e-06f, -7.657373026e-06f, -6.611804677e-06f, +4.999457957e-04f, +1.033580484e-03f, +1.752961117e-03f, +2.538803326e-03f, +3.162428497e-03f, +3.297230410e-03f, +2.564170012e-03f, +6.101172529e-04f, -2.791909114e-03f, -7.640622167e-03f, -1.362811762e-02f, -2.011088080e-02f, -2.614892927e-02f, -3.061895965e-02f, -3.239073675e-02f, -3.053931896e-02f, -2.455324555e-02f, -1.449413070e-02f, -1.068243873e-03f, +1.441462496e-02f, +3.019803133e-02f, +4.433036385e-02f, +5.496869433e-02f, +6.067957615e-02f, +6.067957615e-02f, +5.496869433e-02f, +4.433036385e-02f, +3.019803133e-02f, +1.441462496e-02f, -1.068243873e-03f, -1.449413070e-02f, -2.455324555e-02f, -3.053931896e-02f, -3.239073675e-02f, -3.061895965e-02f, -2.614892927e-02f, -2.011088080e-02f, -1.362811762e-02f, -7.640622167e-03f, -2.791909114e-03f, +6.101172529e-04f, +2.564170012e-03f, +3.297230410e-03f, +3.162428497e-03f, +2.538803326e-03f, +1.752961117e-03f, +1.033580484e-03f, +4.999457957e-04f, -1.320203372e-05f, -1.983339052e-05f, -2.438287329e-05f, -2.357146827e-05f, -1.398834949e-05f, +6.921820601e-06f, +3.976501868e-05f, +8.228522318e-05f, +1.289419522e-04f, +1.712231930e-04f, +1.987928195e-04f, +2.013698844e-04f, +1.710267017e-04f, +1.044294743e-04f, +4.479993558e-06f, -1.191199691e-04f, -2.506690081e-04f, -3.706340911e-04f, -4.588731922e-04f, -4.983278153e-04f, -4.784437097e-04f, -3.975823219e-04f, -2.638600314e-04f, -9.416432483e-05f, +8.852210449e-05f, +2.589940252e-04f, +3.941362476e-04f, +4.768224673e-04f, +4.986377677e-04f, +4.609193410e-04f, +3.739723191e-04f, +2.547002593e-04f, +1.232052905e-04f, -9.075653692e-07f, -1.017777359e-04f, -1.694964089e-04f, -2.009512126e-04f, -1.993014146e-04f, -1.723633322e-04f, -1.303802073e-04f, -8.371807564e-05f, -4.096761910e-05f, -7.771194801e-06f, +1.351561964e-05f, +2.342139801e-05f, +2.445697407e-05f, +2.002256905e-05f, +1.341354347e-05f, /* 1,17 (48) */ -3.623863630e-04f, -5.912492225e-04f, -8.393230423e-04f, -1.063486334e-03f, -1.201686999e-03f, -1.173834369e-03f, -8.849961625e-04f, -2.309769343e-04f, +8.939184250e-04f, +2.587417548e-03f, +4.928853632e-03f, +7.968727757e-03f, +1.171932707e-02f, +1.614747299e-02f, +2.117036087e-02f, +2.665522321e-02f, +3.242322034e-02f, +3.825756657e-02f, +4.391547655e-02f, +4.914311219e-02f, +5.369237093e-02f, +5.733812134e-02f, +5.989439231e-02f, +6.122807178e-02f, +6.126886953e-02f, +6.001462650e-02f, +5.753147838e-02f, +5.394885828e-02f, +4.944980188e-02f, +4.425744853e-02f, +3.861896676e-02f, +3.278834001e-02f, +2.700950789e-02f, +2.150126709e-02f, +1.644510957e-02f, +1.197684112e-02f, +8.182421794e-03f, +5.098046504e-03f, +2.714084862e-03f, +9.821661133e-04f, -1.755412632e-04f, -8.559259511e-04f, -1.164476647e-03f, -1.205730648e-03f, -1.075386869e-03f, -8.545821021e-04f, -6.065447794e-04f, -3.755657852e-04f, +6.522907823e-06f, +7.617957255e-06f, +7.663019833e-06f, +6.075048267e-06f, +2.264573046e-06f, -4.296176977e-06f, -1.399874871e-05f, -2.702553133e-05f, -4.328729862e-05f, -6.237997497e-05f, -8.356813575e-05f, -1.058004694e-04f, -1.277592971e-04f, -1.479425855e-04f, -1.647731083e-04f, -1.767259657e-04f, -1.824629900e-04f, -1.809610208e-04f, -1.716208647e-04f, -1.543450521e-04f, -1.295751782e-04f, -9.828341550e-05f, -6.191730505e-05f, -2.230168514e-05f, +1.849394269e-05f, +5.831068052e-05f, +9.506381053e-05f, +1.268994749e-04f, +1.523299854e-04f, +1.703355517e-04f, +1.804237446e-04f, +1.826423998e-04f, +1.775464088e-04f, +1.661234121e-04f, +1.496872908e-04f, +1.297511522e-04f, +1.078929320e-04f, +8.562670900e-05f, +6.429140060e-05f, +4.496592050e-05f, +2.841648733e-05f, +1.507800476e-05f, +5.067743758e-06f, -1.773638826e-06f, -5.821084136e-06f, -7.592796692e-06f, -7.675507496e-06f, -6.655454364e-06f, +4.867437620e-04f, +1.013747094e-03f, +1.728578244e-03f, +2.515231857e-03f, +3.148440148e-03f, +3.304152230e-03f, +2.603935031e-03f, +6.924024761e-04f, -2.662967162e-03f, -7.469398974e-03f, -1.342932480e-02f, -1.990951092e-02f, -2.597790257e-02f, -3.051453018e-02f, -3.238625676e-02f, -3.065843893e-02f, -2.480391455e-02f, -1.486476480e-02f, -1.527117065e-03f, +1.391629715e-02f, +2.971958762e-02f, +4.393278153e-02f, +5.470483430e-02f, +6.058541183e-02f, +6.076809826e-02f, +5.522768835e-02f, +4.472450010e-02f, +3.067485380e-02f, +1.491326273e-02f, -6.073245321e-04f, -1.412015839e-02f, -2.429854529e-02f, -3.041611367e-02f, -3.239164432e-02f, -3.072073739e-02f, -2.631842568e-02f, -2.031183202e-02f, -1.382741904e-02f, -7.812985500e-03f, -2.922289321e-03f, +5.263991772e-04f, +2.523202393e-03f, +3.289459215e-03f, +3.175944117e-03f, +2.562224724e-03f, +1.777418091e-03f, +1.053603053e-03f, +5.133593392e-04f, -1.299099421e-05f, -1.964224932e-05f, -2.430355154e-05f, -2.371290417e-05f, -1.444985736e-05f, +6.084337856e-06f, +3.857214372e-05f, +8.085666129e-05f, +1.274995807e-04f, +1.700686873e-04f, +1.982596258e-04f, +2.017560275e-04f, +1.725210712e-04f, +1.070480740e-04f, +8.028822401e-06f, -1.150427340e-04f, -2.466264993e-04f, -3.672646271e-04f, -4.567788623e-04f, -4.979591725e-04f, -4.800045906e-04f, -4.009760422e-04f, -2.686903983e-04f, -9.979367328e-05f, +8.286778134e-05f, +2.540930173e-04f, +3.906382195e-04f, +4.751409672e-04f, +4.988888348e-04f, +4.629168670e-04f, +3.772787163e-04f, +2.587196197e-04f, +1.272981371e-04f, +2.688059979e-06f, -9.909305502e-05f, -1.679301801e-04f, -2.004998266e-04f, -1.997851162e-04f, -1.734887737e-04f, -1.318140456e-04f, -8.515499721e-05f, -4.217982515e-05f, -8.632439490e-06f, +1.303161231e-05f, +2.326259437e-05f, +2.452574511e-05f, +2.020969306e-05f, +1.362546371e-05f, /* 1,18 (48) */ -3.558634551e-04f, -5.836312653e-04f, -8.316600224e-04f, -1.057411285e-03f, -1.199422426e-03f, -1.178130546e-03f, -8.989949112e-04f, -2.580024657e-04f, +8.506311264e-04f, +2.525037573e-03f, +4.845285496e-03f, +7.862927288e-03f, +1.159156778e-02f, +1.599953041e-02f, +2.100558777e-02f, +2.647849724e-02f, +3.224075735e-02f, +3.807660555e-02f, +4.374385568e-02f, +4.898876714e-02f, +5.356279575e-02f, +5.723983792e-02f, +5.983247500e-02f, +6.120577010e-02f, +6.128736347e-02f, +6.007293718e-02f, +5.762654220e-02f, +5.407575776e-02f, +4.960213187e-02f, +4.442778408e-02f, +3.879939050e-02f, +3.297098241e-02f, +2.718705429e-02f, +2.166739050e-02f, +1.659479686e-02f, +1.210659227e-02f, +8.290314726e-03f, +5.183673213e-03f, +2.778376263e-03f, +1.027132034e-03f, -1.471247758e-04f, -8.408479463e-04f, -1.159408903e-03f, -1.207504287e-03f, -1.081207953e-03f, -8.621748988e-04f, -6.142202869e-04f, -3.822212396e-04f, +6.477690047e-06f, +7.596710501e-06f, +7.683214852e-06f, +6.155328848e-06f, +2.422804631e-06f, -4.045170841e-06f, -1.364553606e-05f, -2.656823942e-05f, -4.273331820e-05f, -6.174694096e-05f, -8.288397896e-05f, -1.051024197e-04f, -1.270918263e-04f, -1.473543959e-04f, -1.643133904e-04f, -1.764402438e-04f, -1.823889449e-04f, -1.811247071e-04f, -1.720337218e-04f, -1.550020465e-04f, -1.304543135e-04f, -9.934671235e-05f, -6.311320721e-05f, -2.356870096e-05f, +1.722268318e-05f, +5.710236930e-05f, +9.398087530e-05f, +1.259949353e-04f, +1.516436772e-04f, +1.698915531e-04f, +1.802292123e-04f, +1.826878783e-04f, +1.778075273e-04f, +1.665637486e-04f, +1.502620772e-04f, +1.304114247e-04f, +1.085897106e-04f, +8.631481091e-05f, +6.493255712e-05f, +4.553096181e-05f, +2.888647360e-05f, +1.544430097e-05f, +5.331145428e-06f, -1.604532908e-06f, -5.731996914e-06f, -7.566115013e-06f, -7.692569891e-06f, -6.698551799e-06f, +4.737527678e-04f, +9.941048444e-04f, +1.704274692e-03f, +2.491518953e-03f, +3.133990291e-03f, +3.310236568e-03f, +2.642507175e-03f, +7.732591374e-04f, -2.535467581e-03f, -7.299330287e-03f, -1.323106518e-02f, -1.970775489e-02f, -2.580538150e-02f, -3.040748210e-02f, -3.237822794e-02f, -3.077348167e-02f, -2.505054105e-02f, -1.523202942e-02f, -1.983895928e-03f, +1.341833798e-02f, +2.923958303e-02f, +4.353180549e-02f, +5.443614390e-02f, +6.048561815e-02f, +6.085096604e-02f, +5.548178137e-02f, +4.511513832e-02f, +3.114999476e-02f, +1.541215157e-02f, -1.444076651e-04f, -1.374287967e-02f, -2.403982567e-02f, -3.028881553e-02f, -3.238895626e-02f, -3.081983044e-02f, -2.648635586e-02f, -2.051233184e-02f, -1.402720415e-02f, -7.986474273e-03f, -3.054103367e-03f, +4.412441800e-04f, +2.481022568e-03f, +3.280826776e-03f, +3.188975729e-03f, +2.585487318e-03f, +1.801943836e-03f, +1.073812746e-03f, +5.269848029e-04f, -1.278048359e-05f, -1.944923643e-05f, -2.421911742e-05f, -2.384580553e-05f, -1.490020064e-05f, +5.258764720e-06f, +3.738911081e-05f, +7.943260847e-05f, +1.260533915e-04f, +1.689001464e-04f, +1.977021306e-04f, +2.021098317e-04f, +1.739795362e-04f, +1.096333455e-04f, +1.155365566e-05f, -1.109741421e-04f, -2.425733656e-04f, -3.638645247e-04f, -4.546367993e-04f, -4.975320429e-04f, -4.815050153e-04f, -4.043170167e-04f, -2.734844944e-04f, -1.054093829e-04f, +7.720212654e-05f, +2.491576510e-04f, +3.870886467e-04f, +4.733993232e-04f, +4.990808307e-04f, +4.648653351e-04f, +3.805526914e-04f, +2.627264553e-04f, +1.313979444e-04f, +6.306474398e-06f, -9.637563473e-05f, -1.663280088e-04f, -2.000155457e-04f, -2.002436315e-04f, -1.745991863e-04f, -1.332431650e-04f, -8.659576347e-05f, -4.340151373e-05f, -9.505530872e-06f, +1.253627391e-05f, +2.309495914e-05f, +2.458907746e-05f, +2.039466990e-05f, +1.383773357e-05f, /* 1,19 (48) */ -3.493857651e-04f, -5.760345548e-04f, -8.239768076e-04f, -1.051255956e-03f, -1.196999621e-03f, -1.182175717e-03f, -9.126404473e-04f, -2.845707051e-04f, +8.078978082e-04f, +2.463290632e-03f, +4.762401517e-03f, +7.757824868e-03f, +1.146447595e-02f, +1.585217601e-02f, +2.084127438e-02f, +2.630205700e-02f, +3.205836840e-02f, +3.789548084e-02f, +4.357182196e-02f, +4.883376509e-02f, +5.343234143e-02f, +5.714049121e-02f, +5.976936179e-02f, +6.118220139e-02f, +6.130458616e-02f, +6.013003955e-02f, +5.772052307e-02f, +5.420175269e-02f, +4.975377555e-02f, +4.459767564e-02f, +3.897961971e-02f, +3.315367029e-02f, +2.736486182e-02f, +2.183395425e-02f, +1.674505894e-02f, +1.223700370e-02f, +8.398904437e-03f, +5.269988024e-03f, +2.843308820e-03f, +1.072662996e-03f, -1.182383022e-04f, -8.254036453e-04f, -1.154077757e-03f, -1.209108819e-03f, -1.086939950e-03f, -8.697410138e-04f, -6.219128568e-04f, -3.889197914e-04f, +6.431978801e-06f, +7.574460766e-06f, +7.701834142e-06f, +6.233451705e-06f, +2.578353981e-06f, -3.797240619e-06f, -1.329559004e-05f, -2.611413971e-05f, -4.218214685e-05f, -6.111600674e-05f, -8.220090042e-05f, -1.044041619e-04f, -1.264226756e-04f, -1.467629763e-04f, -1.638489388e-04f, -1.761484629e-04f, -1.823078213e-04f, -1.812807091e-04f, -1.724387800e-04f, -1.556516572e-04f, -1.313270034e-04f, -1.004049721e-04f, -6.430585546e-05f, -2.483449136e-05f, +1.595052764e-05f, +5.589110862e-05f, +9.289315982e-05f, +1.250841413e-04f, +1.509500984e-04f, +1.694397852e-04f, +1.800269439e-04f, +1.827261540e-04f, +1.780624044e-04f, +1.669991291e-04f, +1.508333922e-04f, +1.310697774e-04f, +1.092860609e-04f, +8.700380586e-05f, +6.557567358e-05f, +4.609872289e-05f, +2.935961333e-05f, +1.581387101e-05f, +5.597667930e-06f, -1.432672729e-06f, -5.640664402e-06f, -7.537765705e-06f, -7.708542790e-06f, -6.741082046e-06f, +4.609722842e-04f, +9.746556080e-04f, +1.680055575e-03f, +2.467673148e-03f, +3.119090090e-03f, +3.315495333e-03f, +2.679896285e-03f, +8.526917458e-04f, -2.409414189e-03f, -7.130430141e-03f, -1.303336304e-02f, -1.950564506e-02f, -2.563140196e-02f, -3.029784876e-02f, -3.236667428e-02f, -3.088445581e-02f, -2.529311442e-02f, -1.559589395e-02f, -2.438532727e-03f, +1.292080593e-02f, +2.875807801e-02f, +4.312748847e-02f, +5.416265940e-02f, +6.038020877e-02f, +6.092816816e-02f, +5.573093902e-02f, +4.550222697e-02f, +3.162339409e-02f, +1.591123240e-02f, +3.204576699e-04f, -1.336232698e-02f, -2.377709921e-02f, -3.015741759e-02f, -3.238264978e-02f, -3.091620608e-02f, -2.665268387e-02f, -2.071234739e-02f, -1.422744778e-02f, -8.161073460e-03f, -3.187346532e-03f, +3.546484166e-04f, +2.437621054e-03f, +3.271321245e-03f, +3.201512003e-03f, +2.608582277e-03f, +1.826532914e-03f, +1.094207416e-03f, +5.408225365e-04f, -1.257055940e-05f, -1.925444200e-05f, -2.412967932e-05f, -2.397027294e-05f, -1.533943858e-05f, +4.445116563e-06f, +3.621603328e-05f, +7.801328021e-05f, +1.246036813e-04f, +1.677179014e-04f, +1.971206335e-04f, +2.024314911e-04f, +1.754021216e-04f, +1.121851058e-04f, +1.505410309e-05f, -1.069147467e-04f, -2.385102389e-04f, -3.604343844e-04f, -4.524474573e-04f, -4.970466386e-04f, -4.829448989e-04f, -4.076048624e-04f, -2.782416943e-04f, -1.110106893e-04f, +7.152591317e-05f, +2.441885755e-04f, +3.834879467e-04f, +4.715976586e-04f, +4.992135781e-04f, +4.667643167e-04f, +3.837936558e-04f, +2.667201318e-04f, +1.355041440e-04f, +9.947263949e-06f, -9.362568470e-05f, -1.646898946e-04f, -1.994981936e-04f, -2.006766703e-04f, -1.756942389e-04f, -1.346672613e-04f, -8.804014709e-05f, -4.463255849e-05f, -1.039044230e-05f, +1.202955281e-05f, +2.291839499e-05f, +2.464686208e-05f, +2.057740610e-05f, +1.405029109e-05f, /* 1,20 (48) */ -3.429537863e-04f, -5.684600940e-04f, -8.162749735e-04f, -1.045022505e-03f, -1.194421267e-03f, -1.185972958e-03f, -9.259360373e-04f, -3.106848448e-04f, +7.657156613e-04f, +2.402174625e-03f, +4.680200617e-03f, +7.653420706e-03f, +1.133805327e-02f, +1.570541304e-02f, +2.067742544e-02f, +2.612590854e-02f, +3.187606058e-02f, +3.771420013e-02f, +4.339938318e-02f, +4.867811343e-02f, +5.330101443e-02f, +5.704008624e-02f, +5.970505594e-02f, +6.115736690e-02f, +6.132053668e-02f, +6.018593065e-02f, +5.781341623e-02f, +5.432683683e-02f, +4.990472564e-02f, +4.476711542e-02f, +3.915964666e-02f, +3.333639644e-02f, +2.754292423e-02f, +2.200095338e-02f, +1.689589233e-02f, +1.236807348e-02f, +8.508190498e-03f, +5.356991830e-03f, +2.908884493e-03f, +1.118761719e-03f, -8.887868891e-05f, -8.095897743e-04f, -1.148480090e-03f, -1.210541492e-03f, -1.092580615e-03f, -8.772787795e-04f, -6.296213996e-04f, -3.956608734e-04f, +6.385788534e-06f, +7.551225169e-06f, +7.718896060e-06f, +6.309434527e-06f, +2.731235893e-06f, -3.552376721e-06f, -1.294890841e-05f, -2.566323901e-05f, -4.163380147e-05f, -6.048719935e-05f, -8.151893637e-05f, -1.037057395e-04f, -1.257518931e-04f, -1.461683752e-04f, -1.633797983e-04f, -1.758506607e-04f, -1.822196454e-04f, -1.814290384e-04f, -1.728360349e-04f, -1.562938633e-04f, -1.321932110e-04f, -1.014581444e-04f, -6.549518960e-05f, -2.609899070e-05f, +1.467754219e-05f, +5.467696004e-05f, +9.180071650e-05f, +1.241671324e-04f, +1.502492729e-04f, +1.689802556e-04f, +1.798169304e-04f, +1.827572033e-04f, +1.783110046e-04f, +1.674295098e-04f, +1.514011878e-04f, +1.317261621e-04f, +1.099819384e-04f, +8.769365605e-05f, +6.622072111e-05f, +4.666918493e-05f, +2.983589784e-05f, +1.618671553e-05f, +5.867319628e-06f, -1.258044290e-06f, -5.547069277e-06f, -7.507730380e-06f, -7.723408718e-06f, -6.783030070e-06f, +4.484017248e-04f, +9.554011660e-04f, +1.655925896e-03f, +2.443702875e-03f, +3.103750651e-03f, +3.319940450e-03f, +2.716112319e-03f, +9.307050260e-04f, -2.284810508e-03f, -6.962712239e-03f, -1.283624241e-02f, -1.930321357e-02f, -2.545599984e-02f, -3.018566365e-02f, -3.235162018e-02f, -3.099137055e-02f, -2.553162466e-02f, -1.595632833e-02f, -2.890980184e-03f, +1.242375929e-02f, +2.827513312e-02f, +4.271988361e-02f, +5.388441771e-02f, +6.026919808e-02f, +6.099969408e-02f, +5.597512760e-02f, +4.588571491e-02f, +3.209499175e-02f, +1.641044598e-02f, +7.872219866e-04f, -1.297853332e-02f, -2.351037908e-02f, -3.002191345e-02f, -3.237270252e-02f, -3.100983176e-02f, -2.681737377e-02f, -2.091184558e-02f, -1.442812445e-02f, -8.336767698e-03f, -3.322013793e-03f, +2.666082695e-04f, +2.392988496e-03f, +3.260930802e-03f, +3.213541556e-03f, +2.631500672e-03f, +1.851179776e-03f, +1.114784822e-03f, +5.548728275e-04f, -1.236127806e-05f, -1.905795531e-05f, -2.403534541e-05f, -2.408640770e-05f, -1.576763225e-05f, +3.643405993e-06f, +3.505302122e-05f, +7.659888899e-05f, +1.231507447e-04f, +1.665222834e-04f, +1.965154358e-04f, +2.027212045e-04f, +1.767888582e-04f, +1.147031788e-04f, +1.852978049e-05f, -1.028650970e-04f, -2.344377501e-04f, -3.569748093e-04f, -4.502112968e-04f, -4.965031808e-04f, -4.843241664e-04f, -4.108392049e-04f, -2.829613790e-04f, -1.165968301e-04f, +6.583991611e-05f, +2.391864458e-04f, +3.798365454e-04f, +4.697361063e-04f, +4.992869089e-04f, +4.686133899e-04f, +3.870010247e-04f, +2.707000147e-04f, +1.396161639e-04f, +1.361000888e-05f, -9.084342132e-05f, -1.630158436e-04f, -1.989475989e-04f, -2.010839449e-04f, -1.767736006e-04f, -1.360860288e-04f, -8.948791782e-05f, -4.587282982e-05f, -1.128714424e-05f, +1.151139937e-05f, +2.273280550e-05f, +2.469898981e-05f, +2.075780740e-05f, +1.426307319e-05f, /* 1,21 (48) */ -3.365679977e-04f, -5.609088688e-04f, -8.085560774e-04f, -1.038713070e-03f, -1.191690031e-03f, -1.189525335e-03f, -9.388849457e-04f, -3.363480838e-04f, +7.240818599e-04f, +2.341687426e-03f, +4.598681680e-03f, +7.549714967e-03f, +1.121230138e-02f, +1.555924466e-02f, +2.051404564e-02f, +2.595005788e-02f, +3.169384093e-02f, +3.753277109e-02f, +4.322654714e-02f, +4.852181957e-02f, +5.316882122e-02f, +5.693862809e-02f, +5.963956075e-02f, +6.113126791e-02f, +6.133521423e-02f, +6.024060761e-02f, +5.790521695e-02f, +5.445100397e-02f, +5.005497492e-02f, +4.493609568e-02f, +3.933946359e-02f, +3.351915364e-02f, +2.772123523e-02f, +2.216838289e-02f, +1.704729352e-02f, +1.249979964e-02f, +8.618172436e-03f, +5.444685486e-03f, +2.975105214e-03f, +1.165430903e-03f, -5.904279106e-05f, -7.934030588e-04f, -1.142612770e-03f, -1.211799537e-03f, -1.098127684e-03f, -8.847865099e-04f, -6.373448083e-04f, -4.024439035e-04f, +6.339133594e-06f, +7.527020764e-06f, +7.734418951e-06f, +6.383295056e-06f, +2.881465290e-06f, -3.310569361e-06f, -1.260548869e-05f, -2.521554387e-05f, -4.108829861e-05f, -5.986054554e-05f, -8.083812284e-05f, -1.030071957e-04f, -1.250795263e-04f, -1.455706410e-04f, -1.629060141e-04f, -1.755468747e-04f, -1.821244437e-04f, -1.815697075e-04f, -1.732254828e-04f, -1.569286442e-04f, -1.330529000e-04f, -1.025061794e-04f, -6.668114971e-05f, -2.736213345e-05f, +1.340379299e-05f, +5.345998535e-05f, +9.070359815e-05f, +1.232439486e-04f, +1.495412255e-04f, +1.685129721e-04f, +1.795991635e-04f, +1.827810030e-04f, +1.785532927e-04f, +1.678548470e-04f, +1.519654159e-04f, +1.323805306e-04f, +1.106772984e-04f, +8.838432342e-05f, +6.686767051e-05f, +4.724232877e-05f, +3.031531818e-05f, +1.656283491e-05f, +6.140108674e-06f, -1.080633738e-06f, -5.451194286e-06f, -7.475990650e-06f, -7.737150143e-06f, -6.824380746e-06f, +4.360404467e-04f, +9.363432107e-04f, +1.631890550e-03f, +2.419616467e-03f, +3.087983019e-03f, +3.323583856e-03f, +2.751165340e-03f, +1.007303915e-03f, -2.161659764e-03f, -6.796189956e-03f, -1.263972698e-02f, -1.910049237e-02f, -2.527921098e-02f, -3.007096047e-02f, -3.233309040e-02f, -3.109423565e-02f, -2.576606241e-02f, -1.631330314e-02f, -3.341191481e-03f, +1.192725611e-02f, +2.779080895e-02f, +4.230904441e-02f, +5.360145633e-02f, +6.015260125e-02f, +6.106553399e-02f, +5.621431404e-02f, +4.626555146e-02f, +3.256472785e-02f, +1.690973288e-02f, +1.255835377e-03f, -1.259153230e-02f, -2.323967906e-02f, -2.988229728e-02f, -3.235909251e-02f, -3.110067518e-02f, -2.698038961e-02f, -2.111079318e-02f, -1.462920840e-02f, -8.513541299e-03f, -3.458099822e-03f, +1.771203517e-04f, +2.347115666e-03f, +3.249643658e-03f, +3.225052956e-03f, +2.654233478e-03f, +1.875878766e-03f, +1.135542630e-03f, +5.691359007e-04f, -1.215269488e-05f, -1.885986474e-05f, -2.393622360e-05f, -2.419431183e-05f, -1.618484449e-05f, +2.853642879e-06f, +3.390018149e-05f, +7.518964427e-05f, +1.216948744e-04f, +1.653136230e-04f, +1.958868412e-04f, +2.029791747e-04f, +1.781397830e-04f, +1.171873950e-04f, +2.198030972e-05f, -9.882573812e-05f, -2.303565294e-04f, -3.534864055e-04f, -4.479287843e-04f, -4.959018989e-04f, -4.856427518e-04f, -4.140196788e-04f, -2.876429354e-04f, -1.221670459e-04f, +6.014491190e-05f, +2.341519224e-04f, +3.761348771e-04f, +4.678148086e-04f, +4.993006637e-04f, +4.704121395e-04f, +3.901742165e-04f, +2.746654690e-04f, +1.437334289e-04f, +1.729428370e-05f, -8.802906768e-05f, -1.613058679e-04f, -1.983635946e-04f, -2.014651700e-04f, -1.778369407e-04f, -1.374991601e-04f, -9.093884253e-05f, -4.712219483e-05f, -1.219560428e-05f, +1.098176596e-05f, +2.253809516e-05f, +2.474535144e-05f, +2.093577875e-05f, +1.447601573e-05f, /* 1,22 (48) */ -3.302288642e-04f, -5.533818481e-04f, -8.008216584e-04f, -1.032329775e-03f, -1.188808566e-03f, -1.192835904e-03f, -9.514904344e-04f, -3.615636277e-04f, +6.829935612e-04f, +2.281826881e-03f, +4.517843558e-03f, +7.446707771e-03f, +1.108722185e-02f, +1.541367402e-02f, +2.035113962e-02f, +2.577451100e-02f, +3.151171649e-02f, +3.735120138e-02f, +4.305332166e-02f, +4.836489092e-02f, +5.303576832e-02f, +5.683612192e-02f, +5.957287960e-02f, +6.110390578e-02f, +6.134861802e-02f, +6.029406760e-02f, +5.799592054e-02f, +5.457424791e-02f, +5.020451614e-02f, +4.510460865e-02f, +3.951906275e-02f, +3.370193465e-02f, +2.789978852e-02f, +2.233623773e-02f, +1.719925894e-02f, +1.263218017e-02f, +8.728849735e-03f, +5.533069809e-03f, +3.041972885e-03f, +1.212673232e-03f, -2.872747289e-05f, -7.768402239e-04f, -1.136472661e-03f, -1.212880170e-03f, -1.103578878e-03f, -8.922625006e-04f, -6.450819584e-04f, -4.092682842e-04f, +6.292028226e-06f, +7.501864540e-06f, +7.748421147e-06f, +6.455051086e-06f, +3.029057220e-06f, -3.071808559e-06f, -1.226532812e-05f, -2.477106051e-05f, -4.054565455e-05f, -5.923607174e-05f, -8.015849554e-05f, -1.023085737e-04f, -1.244056229e-04f, -1.449698222e-04f, -1.624276316e-04f, -1.752371429e-04f, -1.820222430e-04f, -1.817027291e-04f, -1.736071204e-04f, -1.575559798e-04f, -1.339060344e-04f, -1.035490276e-04f, -6.786367609e-05f, -2.862385418e-05f, +1.212934627e-05f, +5.224024653e-05f, +8.960185788e-05f, +1.223146305e-04f, +1.488259813e-04f, +1.680379435e-04f, +1.793736353e-04f, +1.827975304e-04f, +1.787892338e-04f, +1.682750973e-04f, +1.525260286e-04f, +1.330328344e-04f, +1.113720959e-04f, +8.907576968e-05f, +6.751649231e-05f, +4.781813497e-05f, +3.079786504e-05f, +1.694222924e-05f, +6.416043006e-06f, -9.004273601e-07f, -5.353022246e-06f, -7.442528130e-06f, -7.749749481e-06f, -6.865118852e-06f, +4.238877519e-04f, +9.174833459e-04f, +1.607954327e-03f, +2.395422155e-03f, +3.071798175e-03f, +3.326437498e-03f, +2.785065521e-03f, +1.082493559e-03f, -2.039964889e-03f, -6.630876333e-03f, -1.244384013e-02f, -1.889751319e-02f, -2.510107120e-02f, -2.995377308e-02f, -3.231111009e-02f, -3.119306139e-02f, -2.599641894e-02f, -1.666678955e-02f, -3.789120265e-03f, +1.143135421e-02f, +2.730516620e-02f, +4.189502473e-02f, +5.331381339e-02f, +6.003043421e-02f, +6.112567891e-02f, +5.644846596e-02f, +4.664168634e-02f, +3.303254266e-02f, +1.740903355e-02f, +1.726247516e-03f, -1.220135808e-02f, -2.296501360e-02f, -2.973856385e-02f, -3.234179823e-02f, -3.118870425e-02f, -2.714169548e-02f, -2.130915678e-02f, -1.483067357e-02f, -8.691378240e-03f, -3.595598982e-03f, +8.618150913e-05f, +2.299993471e-03f, +3.237448054e-03f, +3.236034722e-03f, +2.676771573e-03f, +1.900624117e-03f, +1.156478409e-03f, +5.836119165e-04f, -1.194486404e-05f, -1.866025781e-05f, -2.383242151e-05f, -2.429408800e-05f, -1.659113991e-05f, +2.075834377e-06f, +3.275761770e-05f, +7.378575245e-05f, +1.202363612e-04f, +1.640922509e-04f, +1.952351551e-04f, +2.032056088e-04f, +1.794549389e-04f, +1.196375918e-04f, +2.540531878e-05f, -9.479721092e-05f, -2.262672056e-04f, -3.499697813e-04f, -4.456003923e-04f, -4.952430311e-04f, -4.869005993e-04f, -4.171459276e-04f, -2.922857573e-04f, -1.277205798e-04f, +5.444167862e-05f, +2.290856711e-04f, +3.723833847e-04f, +4.658339177e-04f, +4.992546924e-04f, +4.721601571e-04f, +3.933126532e-04f, +2.786158599e-04f, +1.478553601e-04f, +2.099965721e-05f, -8.518285353e-05f, -1.595599860e-04f, -1.977460188e-04f, -2.018200630e-04f, -1.788839288e-04f, -1.389063463e-04f, -9.239268525e-05f, -4.838051740e-05f, -1.311578707e-05f, +1.044060700e-05f, +2.233416943e-05f, +2.478583769e-05f, +2.111122436e-05f, +1.468905343e-05f, /* 1,23 (48) */ -3.239368359e-04f, -5.458799835e-04f, -7.930732373e-04f, -1.025874724e-03f, -1.185779509e-03f, -1.195907712e-03f, -9.637557625e-04f, -3.863346882e-04f, +6.424479067e-04f, +2.222590809e-03f, +4.437685062e-03f, +7.344399198e-03f, +1.096281623e-02f, +1.526870420e-02f, +2.018871199e-02f, +2.559927386e-02f, +3.132969425e-02f, +3.716949865e-02f, +4.287971454e-02f, +4.820733494e-02f, +5.290186229e-02f, +5.673257289e-02f, +5.950501592e-02f, +6.107528192e-02f, +6.136074737e-02f, +6.034630785e-02f, +5.808552240e-02f, +5.469656255e-02f, +5.035334212e-02f, +4.527264659e-02f, +3.969843638e-02f, +3.388473218e-02f, +2.807857776e-02f, +2.250451283e-02f, +1.735178496e-02f, +1.276521300e-02f, +8.840221830e-03f, +5.622145579e-03f, +3.109489377e-03f, +1.260491367e-03f, +2.070392152e-06f, -7.598979946e-04f, -1.130056618e-03f, -1.213780598e-03f, -1.108931901e-03f, -8.997050287e-04f, -6.528317079e-04f, -4.161334031e-04f, +6.244486575e-06f, +7.475773419e-06f, +7.760920964e-06f, +6.524720458e-06f, +3.174026850e-06f, -2.836084140e-06f, -1.192842370e-05f, -2.432979486e-05f, -4.000588521e-05f, -5.861380406e-05f, -7.948008996e-05f, -1.016099164e-04f, -1.237302304e-04f, -1.443659673e-04f, -1.619446962e-04f, -1.749215037e-04f, -1.819130706e-04f, -1.818281164e-04f, -1.739809448e-04f, -1.581758507e-04f, -1.347525789e-04f, -1.045866398e-04f, -6.904270931e-05f, -2.988408757e-05f, +1.085426828e-05f, +5.101780578e-05f, +8.849554918e-05f, +1.213792189e-04f, +1.481035659e-04f, +1.675551786e-04f, +1.791403384e-04f, +1.828067631e-04f, +1.790187932e-04f, +1.686902173e-04f, +1.530829779e-04f, +1.336830254e-04f, +1.120662859e-04f, +8.976795629e-05f, +6.816715673e-05f, +4.839658372e-05f, +3.128352883e-05f, +1.732489835e-05f, +6.695130348e-06f, -7.174115923e-07f, -5.252536049e-06f, -7.407324442e-06f, -7.761189099e-06f, -6.905229076e-06f, +4.119428878e-04f, +8.988230881e-04f, +1.584121905e-03f, +2.371128067e-03f, +3.055207035e-03f, +3.328513333e-03f, +2.817823139e-03f, +1.156279312e-03f, -1.919728528e-03f, -6.466784082e-03f, -1.224860498e-02f, -1.869430758e-02f, -2.492161626e-02f, -2.983413549e-02f, -3.228570477e-02f, -3.128785860e-02f, -2.622268614e-02f, -1.701675933e-02f, -4.234720657e-03f, +1.093611118e-02f, +2.681826560e-02f, +4.147787880e-02f, +5.302152764e-02f, +5.990271363e-02f, +6.118012058e-02f, +5.667755164e-02f, +4.701406972e-02f, +3.349837658e-02f, +1.790828824e-02f, +2.198407673e-03f, -1.180804543e-02f, -2.268639774e-02f, -2.959070849e-02f, -3.232079857e-02f, -3.127388711e-02f, -2.730125546e-02f, -2.150690279e-02f, -1.503249363e-02f, -8.870262169e-03f, -3.734505328e-03f, -6.211176122e-06f, +2.251612954e-03f, +3.224332267e-03f, +3.246475329e-03f, +2.699105742e-03f, +1.925409955e-03f, +1.177589633e-03f, +5.983009699e-04f, -1.173783863e-05f, -1.845922109e-05f, -2.372404648e-05f, -2.438583951e-05f, -1.698658485e-05f, +1.309984952e-06f, +3.162543024e-05f, +7.238741685e-05f, +1.187754937e-04f, +1.628584972e-04f, +1.945606850e-04f, +2.034007180e-04f, +1.807343748e-04f, +1.220536131e-04f, +2.880444182e-05f, -9.078005214e-05f, -2.221704064e-04f, -3.464255475e-04f, -4.432265991e-04f, -4.945268237e-04f, -4.880976622e-04f, -4.202176034e-04f, -2.968892447e-04f, -1.332566780e-04f, +4.873099576e-05f, +2.239883633e-04f, +3.685825189e-04f, +4.637935950e-04f, +4.991488536e-04f, +4.738570412e-04f, +3.964157603e-04f, +2.825505523e-04f, +1.519813755e-04f, +2.472569254e-05f, -8.230501533e-05f, -1.577782226e-04f, -1.970947142e-04f, -2.021483440e-04f, -1.799142352e-04f, -1.403072766e-04f, -9.384920717e-05f, -4.964765813e-05f, -1.404765433e-05f, +9.887878991e-06f, +2.212093478e-05f, +2.482033930e-05f, +2.128404769e-05f, +1.490211996e-05f, /* 1,24 (48) */ -3.176923494e-04f, -5.384042101e-04f, -7.853123163e-04f, -1.019350004e-03f, -1.182605482e-03f, -1.198743797e-03f, -9.756841862e-04f, -4.106644831e-04f, +6.024420215e-04f, +2.163977005e-03f, +4.358204972e-03f, +7.242789281e-03f, +1.083908600e-02f, +1.512433823e-02f, +2.002676730e-02f, +2.542435236e-02f, +3.114778118e-02f, +3.698767054e-02f, +4.270573360e-02f, +4.804915909e-02f, +5.276710971e-02f, +5.662798625e-02f, +5.943597321e-02f, +6.104539784e-02f, +6.137160163e-02f, +6.039732565e-02f, +5.817401795e-02f, +5.481794176e-02f, +5.050144569e-02f, +4.544020177e-02f, +3.987757672e-02f, +3.406753894e-02f, +2.825759655e-02f, +2.267320305e-02f, +1.750486794e-02f, +1.289889603e-02f, +8.952288116e-03f, +5.711913535e-03f, +3.177656534e-03f, +1.308887951e-03f, +3.335392098e-05f, -7.425730963e-04f, -1.123361488e-03f, -1.214498009e-03f, -1.114184437e-03f, -9.071123531e-04f, -6.605928970e-04f, -4.230386322e-04f, +6.196522682e-06f, +7.448764252e-06f, +7.771936700e-06f, +6.592321062e-06f, +3.316389466e-06f, -2.603385740e-06f, -1.159477218e-05f, -2.389175254e-05f, -3.946900620e-05f, -5.799376832e-05f, -7.880294129e-05f, -1.009112666e-04f, -1.230533962e-04f, -1.437591249e-04f, -1.614572536e-04f, -1.745999956e-04f, -1.817969543e-04f, -1.819458831e-04f, -1.743469537e-04f, -1.587882379e-04f, -1.355924986e-04f, -1.056189673e-04f, -7.021819019e-05f, -3.114276840e-05f, +9.578625365e-06f, +4.979272550e-05f, +8.738472583e-05f, +1.204377551e-04f, +1.473740055e-04f, +1.670646871e-04f, +1.788992659e-04f, +1.828086792e-04f, +1.792419368e-04f, +1.691001640e-04f, +1.536362162e-04f, +1.343310549e-04f, +1.127598233e-04f, +9.046084446e-05f, +6.881963368e-05f, +4.897765493e-05f, +3.177229965e-05f, +1.771084180e-05f, +6.977378204e-06f, -5.315730174e-07f, -5.149718660e-06f, -7.370361214e-06f, -7.771451312e-06f, -6.944696012e-06f, +4.002050492e-04f, +8.803638670e-04f, +1.560397859e-03f, +2.346742228e-03f, +3.038220450e-03f, +3.329823318e-03f, +2.849448569e-03f, +1.228666729e-03f, -1.800953034e-03f, -6.303925585e-03f, -1.205404429e-02f, -1.849090686e-02f, -2.474088189e-02f, -2.971208187e-02f, -3.225690033e-02f, -3.137863865e-02f, -2.644485655e-02f, -1.736318488e-02f, -4.677947257e-03f, +1.044158436e-02f, +2.633016794e-02f, +4.105766120e-02f, +5.272463839e-02f, +5.976945695e-02f, +6.122885158e-02f, +5.690154000e-02f, +4.738265224e-02f, +3.396217017e-02f, +1.840743709e-02f, +2.672264714e-03f, -1.141162967e-02f, -2.240384718e-02f, -2.943872712e-02f, -3.229607288e-02f, -3.135619212e-02f, -2.745903369e-02f, -2.170399751e-02f, -1.523464198e-02f, -9.050176404e-03f, -3.874812605e-03f, -1.000603833e-04f, +2.201965296e-03f, +3.210284612e-03f, +3.256363208e-03f, +2.721226677e-03f, +1.950230294e-03f, +1.198873681e-03f, +6.132030899e-04f, -1.153167060e-05f, -1.825684027e-05f, -2.361120550e-05f, -2.446967027e-05f, -1.737124731e-05f, +5.560964085e-07f, +3.050371628e-05f, +7.099483771e-05f, +1.173125582e-04f, +1.616126915e-04f, +1.938637399e-04f, +2.035647178e-04f, +1.819781453e-04f, +1.244353095e-04f, +3.217731919e-05f, -8.677479417e-05f, -2.180667583e-04f, -3.428543174e-04f, -4.408078890e-04f, -4.937535320e-04f, -4.892339038e-04f, -4.232343676e-04f, -3.014528043e-04f, -1.387745892e-04f, +4.301364407e-05f, +2.188606756e-04f, +3.647327390e-04f, +4.616940118e-04f, +4.989830154e-04f, +4.755023974e-04f, +3.994829673e-04f, +2.864689115e-04f, +1.561108897e-04f, +2.847194725e-05f, -7.939579618e-05f, -1.559606090e-04f, -1.964095286e-04f, -2.024497358e-04f, -1.809275301e-04f, -1.417016390e-04f, -9.530816669e-05f, -5.092347434e-05f, -1.499116485e-05f, +9.323540560e-06f, +2.189829870e-05f, +2.484874698e-05f, +2.145415145e-05f, +1.511514789e-05f, /* 1,25 (48) */ -3.114958267e-04f, -5.309554459e-04f, -7.775403796e-04f, -1.012757683e-03f, -1.179289092e-03f, -1.201347182e-03f, -9.872789584e-04f, -4.345562356e-04f, +5.629730153e-04f, +2.105983236e-03f, +4.279402031e-03f, +7.141878015e-03f, +1.071603260e-02f, +1.498057911e-02f, +1.986531004e-02f, +2.524975236e-02f, +3.096598422e-02f, +3.680572465e-02f, +4.253138664e-02f, +4.789037086e-02f, +5.263151721e-02f, +5.652236728e-02f, +5.936575502e-02f, +6.101425507e-02f, +6.138118026e-02f, +6.044711838e-02f, +5.826140268e-02f, +5.493837952e-02f, +5.064881970e-02f, +4.560726646e-02f, +4.005647599e-02f, +3.425034762e-02f, +2.843683849e-02f, +2.284230321e-02f, +1.765850416e-02f, +1.303322708e-02f, +9.065047940e-03f, +5.802374380e-03f, +3.246476168e-03f, +1.357865606e-03f, +6.512622063e-05f, -7.248622545e-04f, -1.116384110e-03f, -1.215029582e-03f, -1.119334155e-03f, -9.144827144e-04f, -6.683643483e-04f, -4.299833282e-04f, +6.148150484e-06f, +7.420853824e-06f, +7.781486633e-06f, +6.657870832e-06f, +3.456160473e-06f, -2.373702808e-06f, -1.126437005e-05f, -2.345693889e-05f, -3.893503281e-05f, -5.737599002e-05f, -7.812708446e-05f, -1.002126668e-04f, -1.223751678e-04f, -1.431493437e-04f, -1.609653496e-04f, -1.742726574e-04f, -1.816739221e-04f, -1.820560435e-04f, -1.747051455e-04f, -1.593931230e-04f, -1.364257588e-04f, -1.066459616e-04f, -7.139005983e-05f, -3.239983159e-05f, +8.302483877e-06f, +4.856506828e-05f, +8.626944199e-05f, +1.194902810e-04f, +1.466373266e-04f, +1.665664791e-04f, +1.786504114e-04f, +1.828032572e-04f, +1.794586306e-04f, +1.695048947e-04f, +1.541856957e-04f, +1.349768747e-04f, +1.134526627e-04f, +9.115439517e-05f, +6.947389279e-05f, +4.956132816e-05f, +3.226416726e-05f, +1.810005886e-05f, +7.262793860e-06f, -3.428983692e-07f, -5.044553124e-06f, -7.331620083e-06f, -7.780518386e-06f, -6.983504168e-06f, +3.886733786e-04f, +8.621070268e-04f, +1.536786653e-03f, +2.322272557e-03f, +3.020849203e-03f, +3.330379414e-03f, +2.879952286e-03f, +1.299661566e-03f, -1.683640476e-03f, -6.142312893e-03f, -1.186018055e-02f, -1.828734215e-02f, -2.455890374e-02f, -2.958764656e-02f, -3.222472301e-02f, -3.146541345e-02f, -2.666292331e-02f, -1.770603919e-02f, -5.118755146e-03f, +9.947830828e-03f, +2.584093403e-02f, +4.063442683e-02f, +5.242318559e-02f, +5.963068236e-02f, +6.127186522e-02f, +5.712040067e-02f, +4.774738498e-02f, +3.442386419e-02f, +1.890642011e-02f, +3.147767112e-03f, -1.101214670e-02f, -2.211737827e-02f, -2.928261623e-02f, -3.226760093e-02f, -3.143558792e-02f, -2.761499429e-02f, -2.190040704e-02f, -1.543709171e-02f, -9.231103934e-03f, -4.016514244e-03f, -1.953685500e-04f, +2.151041821e-03f, +3.195293448e-03f, +3.265686748e-03f, +2.743124976e-03f, +1.975079041e-03f, +1.220327832e-03f, +6.283182377e-04f, -1.132641078e-05f, -1.805320008e-05f, -2.349400520e-05f, -2.454568474e-05f, -1.774519696e-05f, -1.858320897e-07f, +2.939256978e-05f, +6.960821217e-05f, +1.158478390e-04f, +1.603551633e-04f, +1.931446308e-04f, +2.036978274e-04f, +1.831863109e-04f, +1.267825385e-04f, +3.552359748e-05f, -8.278196499e-05f, -2.139568862e-04f, -3.392567061e-04f, -4.383447518e-04f, -4.929234191e-04f, -4.903092966e-04f, -4.261958904e-04f, -3.059758495e-04f, -1.442735657e-04f, +3.729040543e-05f, +2.137032898e-04f, +3.608345123e-04f, +4.595353487e-04f, +4.987570545e-04f, +4.770958382e-04f, +4.025137075e-04f, +2.903703028e-04f, +1.602433145e-04f, +3.223797337e-05f, -7.645544584e-05f, -1.541071826e-04f, -1.956903147e-04f, -2.027239640e-04f, -1.819234847e-04f, -1.430891199e-04f, -9.676931944e-05f, -5.220782014e-05f, -1.594627439e-05f, +8.747552469e-06f, +2.166616976e-05f, +2.487095151e-05f, +2.162143767e-05f, +1.532806871e-05f, /* 1,26 (48) */ -3.053476762e-04f, -5.235345920e-04f, -7.697588930e-04f, -1.006099812e-03f, -1.175832932e-03f, -1.203720885e-03f, -9.985433285e-04f, -4.580131745e-04f, +5.240379825e-04f, +2.048607246e-03f, +4.201274946e-03f, +7.041665348e-03f, +1.059365744e-02f, +1.483742976e-02f, +1.970434469e-02f, +2.507547970e-02f, +3.078431030e-02f, +3.662366861e-02f, +4.235668150e-02f, +4.773097773e-02f, +5.249509145e-02f, +5.641572132e-02f, +5.929436496e-02f, +6.098185524e-02f, +6.138948274e-02f, +6.049568345e-02f, +5.834767212e-02f, +5.505786980e-02f, +5.079545702e-02f, +4.577383294e-02f, +4.023512640e-02f, +3.443315088e-02f, +2.861629712e-02f, +2.301180811e-02f, +1.781268985e-02f, +1.316820396e-02f, +9.178500602e-03f, +5.893528775e-03f, +3.315950061e-03f, +1.407426934e-03f, +9.739038789e-05f, -7.067621956e-04f, -1.109121316e-03f, -1.215372481e-03f, -1.124378708e-03f, -9.218143344e-04f, -6.761448667e-04f, -4.369668323e-04f, +6.099383813e-06f, +7.392058845e-06f, +7.789589021e-06f, +6.721387745e-06f, +3.593355386e-06f, -2.147024604e-06f, -1.093721356e-05f, -2.302535893e-05f, -3.840398002e-05f, -5.676049434e-05f, -7.745255413e-05f, -9.951415924e-05f, -1.216955923e-04f, -1.425366721e-04f, -1.604690300e-04f, -1.739395284e-04f, -1.815440025e-04f, -1.821586121e-04f, -1.750555188e-04f, -1.599904879e-04f, -1.372523257e-04f, -1.076675748e-04f, -7.255825958e-05f, -3.365521214e-05f, +7.025910221e-06f, +4.733489691e-05f, +8.514975212e-05f, +1.185368387e-04f, +1.458935566e-04f, +1.660605652e-04f, +1.783937689e-04f, +1.827904761e-04f, +1.796688410e-04f, +1.699043667e-04f, +1.547313687e-04f, +1.356204362e-04f, +1.141447587e-04f, +9.184856916e-05f, +7.012990339e-05f, +5.014758269e-05f, +3.275912115e-05f, +1.849254854e-05f, +7.551384381e-06f, -1.513745344e-07f, -4.937022566e-06f, -7.291082698e-06f, -7.788372543e-06f, -7.021637960e-06f, +3.773469678e-04f, +8.440538267e-04f, +1.513292648e-03f, +2.297726873e-03f, +3.003104006e-03f, +3.330193582e-03f, +2.909344855e-03f, +1.369269778e-03f, -1.567792637e-03f, -5.981957730e-03f, -1.166703592e-02f, -1.808364432e-02f, -2.437571743e-02f, -2.946086403e-02f, -3.218919941e-02f, -3.154819541e-02f, -2.687688019e-02f, -1.804529590e-02f, -5.557099897e-03f, +9.454907409e-03f, +2.535062474e-02f, +4.020823094e-02f, +5.211720974e-02f, +5.948640879e-02f, +6.130915563e-02f, +5.733410396e-02f, +4.810821949e-02f, +3.488339953e-02f, +1.940517716e-02f, +3.624862950e-03f, -1.060963299e-02f, -2.182700797e-02f, -2.912237291e-02f, -3.223536296e-02f, -3.151204336e-02f, -2.776910148e-02f, -2.209609735e-02f, -1.563981567e-02f, -9.413027418e-03f, -4.159603364e-03f, -2.921378694e-04f, +2.098834001e-03f, +3.179347173e-03f, +3.274434301e-03f, +2.764791145e-03f, +1.999949993e-03f, +1.241949270e-03f, +6.436463064e-04f, -1.112210891e-05f, -1.784838432e-05f, -2.337255185e-05f, -2.461398792e-05f, -1.810850509e-05f, -9.158039886e-07f, +2.829208151e-05f, +6.822773425e-05f, +1.143816183e-04f, +1.590862412e-04f, +1.924036704e-04f, +2.038002702e-04f, +1.843589381e-04f, +1.290951640e-04f, +3.884292954e-05f, -7.880208811e-05f, -2.098414137e-04f, -3.356333310e-04f, -4.358376830e-04f, -4.920367567e-04f, -4.913238229e-04f, -4.291018512e-04f, -3.104578006e-04f, -1.497528627e-04f, +3.156206276e-05f, +2.085168925e-04f, +3.568883141e-04f, +4.573177959e-04f, +4.984708574e-04f, +4.786369835e-04f, +4.055074182e-04f, +2.942540920e-04f, +1.643780583e-04f, +3.602331742e-05f, -7.348422069e-05f, -1.522179874e-04f, -1.949369302e-04f, -2.029707573e-04f, -1.829017706e-04f, -1.444694044e-04f, -9.823241829e-05f, -5.350054635e-05f, -1.691293576e-05f, +8.159877660e-06f, +2.142445762e-05f, +2.488684375e-05f, +2.178580768e-05f, +1.554081285e-05f, /* 1,27 (48) */ -2.992482924e-04f, -5.161425332e-04f, -7.619693040e-04f, -9.993784239e-04f, -1.172239576e-03f, -1.205867910e-03f, -1.009480542e-03f, -4.810385334e-04f, +4.856340025e-04f, +1.991846752e-03f, +4.123822392e-03f, +6.942151189e-03f, +1.047196184e-02f, +1.469489309e-02f, +1.954387566e-02f, +2.490154017e-02f, +3.060276630e-02f, +3.644151000e-02f, +4.218162598e-02f, +4.757098725e-02f, +5.235783912e-02f, +5.630805374e-02f, +5.922180670e-02f, +6.094820002e-02f, +6.139650865e-02f, +6.054301834e-02f, +5.843282187e-02f, +5.517640664e-02f, +5.094135058e-02f, +4.593989350e-02f, +4.041352017e-02f, +3.461594135e-02f, +2.879596596e-02f, +2.318171247e-02f, +1.796742122e-02f, +1.330382439e-02f, +9.292645361e-03f, +5.985377344e-03f, +3.386079964e-03f, +1.457574517e-03f, +1.301495090e-04f, -6.882696471e-04f, -1.101569931e-03f, -1.215523855e-03f, -1.129315731e-03f, -9.291054171e-04f, -6.839332393e-04f, -4.439884703e-04f, +6.050236397e-06f, +7.362395954e-06f, +7.796262099e-06f, +6.782889817e-06f, +3.727989835e-06f, -1.923340206e-06f, -1.061329869e-05f, -2.259701741e-05f, -3.787586248e-05f, -5.614730615e-05f, -7.677938468e-05f, -9.881578617e-05f, -1.210147169e-04f, -1.419211588e-04f, -1.599683410e-04f, -1.736006478e-04f, -1.814072243e-04f, -1.822536042e-04f, -1.753980729e-04f, -1.605803153e-04f, -1.380721657e-04f, -1.086837592e-04f, -7.372273107e-05f, -3.490884522e-05f, +5.748970827e-06f, +4.610227435e-05f, +8.402571100e-05f, +1.175774709e-04f, +1.451427229e-04f, +1.655469566e-04f, +1.781293332e-04f, +1.827703153e-04f, +1.798725349e-04f, +1.702985375e-04f, +1.552731878e-04f, +1.362616909e-04f, +1.148360655e-04f, +9.254332692e-05f, +7.078763450e-05f, +5.073639743e-05f, +3.325715046e-05f, +1.888830955e-05f, +7.843156605e-06f, +4.301144525e-08f, -4.827110191e-06f, -7.248730722e-06f, -7.794995958e-06f, -7.059081716e-06f, +3.662248589e-04f, +8.262054424e-04f, +1.489920096e-03f, +2.273112885e-03f, +2.984995501e-03f, +3.329277778e-03f, +2.937636937e-03f, +1.437497513e-03f, -1.453411019e-03f, -5.822871489e-03f, -1.147463225e-02f, -1.787984405e-02f, -2.419135849e-02f, -2.933176886e-02f, -3.215035648e-02f, -3.162699750e-02f, -2.708672161e-02f, -1.838092923e-02f, -5.992937580e-03f, +8.962870652e-03f, +2.485930091e-02f, +3.977912909e-02f, +5.180675194e-02f, +5.933665593e-02f, +6.134071769e-02f, +5.754262086e-02f, +4.846510781e-02f, +3.534071733e-02f, +1.990364802e-02f, +4.103499934e-03f, -1.020412557e-02f, -2.153275388e-02f, -2.895799486e-02f, -3.219933964e-02f, -3.158552758e-02f, -2.792131946e-02f, -2.229103428e-02f, -1.584278643e-02f, -9.595929189e-03f, -4.304072768e-03f, -3.903702877e-04f, +2.045333455e-03f, +3.162434237e-03f, +3.282594178e-03f, +2.786215603e-03f, +2.024836836e-03f, +1.263735077e-03f, +6.591871193e-04f, -1.091881357e-05f, -1.764247584e-05f, -2.324695131e-05f, -2.467468530e-05f, -1.846124455e-05f, -1.633825320e-06f, +2.720233902e-05f, +6.685359483e-05f, +1.129141757e-04f, +1.578062534e-04f, +1.916411728e-04f, +2.038722735e-04f, +1.854960989e-04f, +1.313730568e-04f, +4.213497453e-05f, -7.483568249e-05f, -2.057209625e-04f, -3.319848116e-04f, -4.332871834e-04f, -4.910938247e-04f, -4.922774745e-04f, -4.319519384e-04f, -3.148980846e-04f, -1.552117387e-04f, +2.582939980e-05f, +2.033021755e-04f, +3.528946277e-04f, +4.550415531e-04f, +4.981243193e-04f, +4.801254603e-04f, +4.084635409e-04f, +2.981196454e-04f, +1.685145269e-04f, +3.982752051e-05f, -7.048238377e-05f, -1.502930739e-04f, -1.941492378e-04f, -2.031898472e-04f, -1.838620601e-04f, -1.458421761e-04f, -9.969721340e-05f, -5.480150053e-05f, -1.789109874e-05f, +7.560481282e-06f, +2.117307309e-05f, +2.489631464e-05f, +2.194716213e-05f, +1.575330966e-05f, /* 1,28 (48) */ -2.931980560e-04f, -5.087801372e-04f, -7.541730419e-04f, -9.925955341e-04f, -1.168511587e-03f, -1.207791250e-03f, -1.020093841e-03f, -5.036355508e-04f, +4.477581400e-04f, +1.935699446e-03f, +4.047043008e-03f, +6.843335402e-03f, +1.035094713e-02f, +1.455297193e-02f, +1.938390732e-02f, +2.472793953e-02f, +3.042135907e-02f, +3.625925639e-02f, +4.200622791e-02f, +4.741040693e-02f, +5.221976696e-02f, +5.619936998e-02f, +5.914808397e-02f, +6.091329118e-02f, +6.140225762e-02f, +6.058912062e-02f, +5.851684758e-02f, +5.529398411e-02f, +5.108649330e-02f, +4.610544046e-02f, +4.059164950e-02f, +3.479871167e-02f, +2.897583849e-02f, +2.335201101e-02f, +1.812269441e-02f, +1.344008609e-02f, +9.407481427e-03f, +6.077920671e-03f, +3.456867598e-03f, +1.508310914e-03f, +1.634066595e-04f, -6.693813375e-04f, -1.093726775e-03f, -1.215480844e-03f, -1.134142841e-03f, -9.363541479e-04f, -6.917282352e-04f, -4.510475520e-04f, +6.000721856e-06f, +7.331881716e-06f, +7.801524077e-06f, +6.842395104e-06f, +3.860079559e-06f, -1.702638511e-06f, -1.029262119e-05f, -2.217191876e-05f, -3.735069452e-05f, -5.553645002e-05f, -7.610761022e-05f, -9.811758948e-05f, -1.203325886e-04f, -1.413028526e-04f, -1.594633288e-04f, -1.732560555e-04f, -1.812636169e-04f, -1.823410354e-04f, -1.757328077e-04f, -1.611625883e-04f, -1.388852458e-04f, -1.096944677e-04f, -7.488341620e-05f, -3.616066610e-05f, +4.471732158e-06f, +4.486726377e-05f, +8.289737375e-05f, +1.166122207e-04f, +1.443848538e-04f, +1.650256649e-04f, +1.778570993e-04f, +1.827427547e-04f, +1.800696793e-04f, +1.706873651e-04f, +1.558111055e-04f, +1.369005902e-04f, +1.155265373e-04f, +9.323862873e-05f, +7.144705488e-05f, +5.132775100e-05f, +3.375824403e-05f, +1.928734033e-05f, +8.138117147e-06f, +2.402723706e-07f, -4.714799292e-06f, -7.204545832e-06f, -7.800370763e-06f, -7.095819678e-06f, +3.553060453e-04f, +8.085629665e-04f, +1.466673145e-03f, +2.248438199e-03f, +2.966534256e-03f, +3.327643953e-03f, +2.964839276e-03f, +1.504351108e-03f, -1.340496843e-03f, -5.665065235e-03f, -1.128299108e-02f, -1.767597177e-02f, -2.400586239e-02f, -2.920039581e-02f, -3.210822151e-02f, -3.170183318e-02f, -2.729244257e-02f, -1.871291404e-02f, -6.426224764e-03f, +8.471776828e-03f, +2.436702344e-02f, +3.934717715e-02f, +5.149185385e-02f, +5.918144419e-02f, +6.136654709e-02f, +5.774592303e-02f, +4.881800243e-02f, +3.579575888e-02f, +2.040177234e-02f, +4.583625394e-03f, -9.795662033e-03f, -2.123463423e-02f, -2.878948033e-02f, -3.215951212e-02f, -3.165600997e-02f, -2.807161254e-02f, -2.248518352e-02f, -1.604597628e-02f, -9.779791249e-03f, -4.449914944e-03f, -4.900675011e-04f, +1.990531954e-03f, +3.144543139e-03f, +3.290154659e-03f, +2.807388676e-03f, +2.049733151e-03f, +1.285682239e-03f, +6.749404290e-04f, -1.071657227e-05f, -1.743555650e-05f, -2.311730902e-05f, -2.472788286e-05f, -1.880348977e-05f, -2.339904673e-06f, +2.612342670e-05f, +6.548598165e-05f, +1.114457889e-04f, +1.565155274e-04f, +1.908574537e-04f, +2.039140682e-04f, +1.865978710e-04f, +1.336160942e-04f, +4.539939795e-05f, -7.088326246e-05f, -2.015961528e-04f, -3.283117689e-04f, -4.306937594e-04f, -4.900949110e-04f, -4.931702526e-04f, -4.347458496e-04f, -3.192961356e-04f, -1.606494561e-04f, +2.009320106e-05f, +1.980598351e-04f, +3.488539443e-04f, +4.527068295e-04f, +4.977173448e-04f, +4.815609030e-04f, +4.113815210e-04f, +3.019663296e-04f, +1.726521230e-04f, +4.365011838e-05f, -6.745020468e-05f, -1.483324988e-04f, -1.933271055e-04f, -2.033809683e-04f, -1.848040261e-04f, -1.472071174e-04f, -1.011634523e-04f, -5.611052704e-05f, -1.888071007e-05f, +6.949330726e-06f, +2.091192815e-05f, +2.489925524e-05f, +2.210540102e-05f, +1.596548744e-05f, /* 1,29 (48) */ -2.871973341e-04f, -5.014482555e-04f, -7.463715178e-04f, -9.857531390e-04f, -1.164651507e-03f, -1.209493888e-03f, -1.030386462e-03f, -5.258074696e-04f, +4.104074455e-04f, +1.880162996e-03f, +3.970935397e-03f, +6.745217813e-03f, +1.023061454e-02f, +1.441166908e-02f, +1.922444399e-02f, +2.455468347e-02f, +3.024009546e-02f, +3.607691536e-02f, +4.183049510e-02f, +4.724924434e-02f, +5.208088171e-02f, +5.608967552e-02f, +5.907320056e-02f, +6.087713051e-02f, +6.140672936e-02f, +6.063398788e-02f, +5.859974496e-02f, +5.541059633e-02f, +5.123087815e-02f, +4.627046613e-02f, +4.076950660e-02f, +3.498145442e-02f, +2.915590817e-02f, +2.352269837e-02f, +1.827850552e-02f, +1.357698668e-02f, +9.523007964e-03f, +6.171159300e-03f, +3.528314653e-03f, +1.559638665e-03f, +1.971649035e-04f, -6.500939972e-04f, -1.085588658e-03f, -1.215240571e-03f, -1.138857640e-03f, -9.435586937e-04f, -6.995286060e-04f, -4.581433717e-04f, +5.950853705e-06f, +7.300532620e-06f, +7.805393139e-06f, +6.899921698e-06f, +3.989640402e-06f, -1.484908233e-06f, -9.975176579e-06f, -2.175006713e-05f, -3.682849015e-05f, -5.492795017e-05f, -7.543726457e-05f, -9.741961088e-05f, -1.196492544e-04f, -1.406818019e-04f, -1.589540398e-04f, -1.729057912e-04f, -1.811132097e-04f, -1.824209217e-04f, -1.760597234e-04f, -1.617372905e-04f, -1.396915333e-04f, -1.106996535e-04f, -7.604025715e-05f, -3.741061019e-05f, +3.194260694e-06f, +4.362992850e-05f, +8.176479580e-05f, +1.156411315e-04f, +1.436199778e-04f, +1.644967024e-04f, +1.775770628e-04f, +1.827077745e-04f, +1.802602417e-04f, +1.710708076e-04f, +1.563450745e-04f, +1.375370856e-04f, +1.162161284e-04f, +9.393443463e-05f, +7.210813297e-05f, +5.192162170e-05f, +3.426239038e-05f, +1.968963904e-05f, +8.436272395e-06f, +4.404208828e-07f, -4.600073246e-06f, -7.158509723e-06f, -7.804479049e-06f, -7.131836001e-06f, +3.445894731e-04f, +7.911274100e-04f, +1.443555836e-03f, +2.223710317e-03f, +2.947730766e-03f, +3.325304048e-03f, +2.990962703e-03f, +1.569837089e-03f, -1.229051054e-03f, -5.508549708e-03f, -1.109213363e-02f, -1.747205771e-02f, -2.381926452e-02f, -2.906677971e-02f, -3.206282211e-02f, -3.177271645e-02f, -2.749403872e-02f, -1.904122581e-02f, -6.856918523e-03f, +7.981681917e-03f, +2.387385319e-02f, +3.891243130e-02f, +5.117255772e-02f, +5.902079474e-02f, +6.138664029e-02f, +5.794398287e-02f, +4.916685638e-02f, +3.624846571e-02f, +2.089948969e-02f, +5.065186297e-03f, -9.384280512e-03f, -2.093266790e-02f, -2.861682821e-02f, -3.211586200e-02f, -3.172346017e-02f, -2.821994504e-02f, -2.267851063e-02f, -1.624935725e-02f, -9.964595275e-03f, -4.597122062e-03f, -5.912309534e-04f, +1.934421427e-03f, +3.125662429e-03f, +3.297103990e-03f, +2.828300604e-03f, +2.074632406e-03f, +1.307787641e-03f, +6.909059164e-04f, -1.051543136e-05f, -1.722770722e-05f, -2.298372996e-05f, -2.477368699e-05f, -1.913531668e-05f, -3.034053170e-06f, +2.505542575e-05f, +6.412507928e-05f, +1.099767330e-04f, +1.552143899e-04f, +1.900528304e-04f, +2.039258891e-04f, +1.876643381e-04f, +1.358241603e-04f, +4.863587167e-05f, -6.694533766e-05f, -1.974676028e-04f, -3.246148259e-04f, -4.280579225e-04f, -4.890403118e-04f, -4.940021681e-04f, -4.374832914e-04f, -3.236513949e-04f, -1.660652804e-04f, +1.435425164e-05f, +1.927905726e-04f, +3.447667631e-04f, +4.503138436e-04f, +4.972498479e-04f, +4.829429533e-04f, +4.142608086e-04f, +3.057935123e-04f, +1.767902467e-04f, +4.749064148e-05f, -6.438795966e-05f, -1.463363255e-04f, -1.924704065e-04f, -2.035438583e-04f, -1.857273426e-04f, -1.485639094e-04f, -1.026308797e-04f, -5.742746693e-05f, -1.988171347e-05f, +6.326395649e-06f, +2.064093598e-05f, +2.489555680e-05f, +2.226042371e-05f, +1.617727343e-05f, /* 1,30 (48) */ -2.812464804e-04f, -4.941477229e-04f, -7.385661247e-04f, -9.788532173e-04f, -1.160661867e-03f, -1.210978797e-03f, -1.040361638e-03f, -5.475575367e-04f, +3.735789553e-04f, +1.825235046e-03f, +3.895498133e-03f, +6.647798202e-03f, +1.011096528e-02f, +1.427098728e-02f, +1.906548995e-02f, +2.438177768e-02f, +3.005898225e-02f, +3.589449444e-02f, +4.165443537e-02f, +4.708750705e-02f, +5.194119018e-02f, +5.597897586e-02f, +5.899716030e-02f, +6.083971990e-02f, +6.140992362e-02f, +6.067761781e-02f, +5.868150975e-02f, +5.552623746e-02f, +5.137449813e-02f, +4.643496283e-02f, +4.094708366e-02f, +3.516416220e-02f, +2.933616842e-02f, +2.369376918e-02f, +1.843485059e-02f, +1.371452376e-02f, +9.639224092e-03f, +6.265093734e-03f, +3.600422786e-03f, +1.611560287e-03f, +2.314272939e-04f, -6.304043582e-04f, -1.077152385e-03f, -1.214800150e-03f, -1.143457714e-03f, -9.507172034e-04f, -7.073330850e-04f, -4.652752077e-04f, +5.900645350e-06f, +7.268365081e-06f, +7.807887439e-06f, +6.955487723e-06f, +4.116688316e-06f, -1.270137912e-06f, -9.660960103e-06f, -2.133146638e-05f, -3.630926307e-05f, -5.432183054e-05f, -7.476838129e-05f, -9.672189189e-05f, -1.189647611e-04f, -1.400580555e-04f, -1.584405205e-04f, -1.725498952e-04f, -1.809560329e-04f, -1.824932796e-04f, -1.763788209e-04f, -1.623044060e-04f, -1.404909963e-04f, -1.116992702e-04f, -7.719319639e-05f, -3.865861306e-05f, +1.916622938e-06f, +4.239033203e-05f, +8.062803289e-05f, +1.146642473e-04f, +1.428481242e-04f, +1.639600817e-04f, +1.772892198e-04f, +1.826653555e-04f, +1.804441899e-04f, +1.714488231e-04f, +1.568750475e-04f, +1.381711284e-04f, +1.169047926e-04f, +9.463070442e-05f, +7.277083693e-05f, +5.251798750e-05f, +3.476957772e-05f, +2.009520355e-05f, +8.737628506e-06f, +6.434694612e-07f, -4.482915520e-06f, -7.110604110e-06f, -7.807302866e-06f, -7.167114757e-06f, +3.340740417e-04f, +7.738997028e-04f, +1.420572106e-03f, +2.198936630e-03f, +2.928595450e-03f, +3.322269995e-03f, +3.016018128e-03f, +1.633962169e-03f, -1.119074321e-03f, -5.353335318e-03f, -1.090208080e-02f, -1.726813182e-02f, -2.363160019e-02f, -2.893095555e-02f, -3.201418624e-02f, -3.183966178e-02f, -2.769150633e-02f, -1.936584064e-02f, -7.284976446e-03f, +7.492641605e-03f, +2.337985102e-02f, +3.847494801e-02f, +5.084890632e-02f, +5.885472945e-02f, +6.140099454e-02f, +5.813677344e-02f, +4.951162314e-02f, +3.669877956e-02f, +2.139673953e-02f, +5.548129250e-03f, -8.970019704e-03f, -2.062687439e-02f, -2.844003796e-02f, -3.206837136e-02f, -3.178784813e-02f, -2.836628136e-02f, -2.287098103e-02f, -1.645290111e-02f, -1.015032262e-02f, -4.745685971e-03f, -6.938618331e-04f, +1.876993960e-03f, +3.105780715e-03f, +3.303430386e-03f, +2.848941540e-03f, +2.099527963e-03f, +1.330048064e-03f, +7.070831898e-04f, -1.031543611e-05f, -1.701900789e-05f, -2.284631865e-05f, -2.481220449e-05f, -1.945680269e-05f, -3.716284432e-06f, +2.399841424e-05f, +6.277106912e-05f, +1.085072808e-04f, +1.539031669e-04f, +1.892276213e-04f, +2.039079747e-04f, +1.886955890e-04f, +1.379971457e-04f, +5.184407396e-05f, -6.302241295e-05f, -1.933359288e-04f, -3.208946069e-04f, -4.253801896e-04f, -4.879303311e-04f, -4.947732413e-04f, -4.401639799e-04f, -3.279633107e-04f, -1.714584810e-04f, +8.613337121e-06f, +1.874950937e-04f, +3.406335909e-04f, +4.478628235e-04f, +4.967217519e-04f, +4.842712606e-04f, +4.171008580e-04f, +3.096005616e-04f, +1.809282955e-04f, +5.134861502e-05f, -6.129593148e-05f, -1.443046239e-04f, -1.915790189e-04f, -2.036782580e-04f, -1.866316842e-04f, -1.499122321e-04f, -1.040992379e-04f, -5.875215808e-05f, -2.089404958e-05f, +5.691648011e-06f, +2.036001099e-05f, +2.488511074e-05f, +2.241212896e-05f, +1.638859383e-05f, /* 1,31 (48) */ -2.753458351e-04f, -4.868793578e-04f, -7.307582372e-04f, -9.718977296e-04f, -1.156545178e-03f, -1.212248935e-03f, -1.050022599e-03f, -5.688890031e-04f, +3.372696922e-04f, +1.770913215e-03f, +3.820729751e-03f, +6.551076310e-03f, +9.992000524e-03f, +1.413092922e-02f, +1.890704943e-02f, +2.420922778e-02f, +2.987802621e-02f, +3.571200116e-02f, +4.147805655e-02f, +4.692520265e-02f, +5.180069918e-02f, +5.586727659e-02f, +5.891996710e-02f, +6.080106129e-02f, +6.141184024e-02f, +6.072000814e-02f, +5.876213779e-02f, +5.564090171e-02f, +5.151734626e-02f, +4.659892291e-02f, +4.112437288e-02f, +3.534682755e-02f, +2.951661261e-02f, +2.386521801e-02f, +1.859172564e-02f, +1.385269489e-02f, +9.756128885e-03f, +6.359724439e-03f, +3.673193623e-03f, +1.664078274e-03f, +2.661968716e-04f, -6.103091546e-04f, -1.068414757e-03f, -1.214156681e-03f, -1.147940629e-03f, -9.578278075e-04f, -7.151403879e-04f, -4.724423225e-04f, +5.850110091e-06f, +7.235395433e-06f, +7.809025104e-06f, +7.009111338e-06f, +4.241239355e-06f, -1.058315911e-06f, -9.349966785e-06f, -2.091612006e-05f, -3.579302665e-05f, -5.371811474e-05f, -7.410099365e-05f, -9.602447380e-05f, -1.182791553e-04f, -1.394316620e-04f, -1.579228174e-04f, -1.721884081e-04f, -1.807921168e-04f, -1.825581262e-04f, -1.766901015e-04f, -1.628639195e-04f, -1.412836031e-04f, -1.126932717e-04f, -7.834217668e-05f, -3.990461040e-05f, +6.388853996e-07f, +4.114853805e-05f, +7.948714106e-05f, +1.136816124e-04f, +1.420693226e-04f, +1.634158161e-04f, +1.769935670e-04f, +1.826154788e-04f, +1.806214921e-04f, +1.718213704e-04f, +1.574009775e-04f, +1.388026701e-04f, +1.175924836e-04f, +9.532739769e-05f, +7.343513463e-05f, +5.311682607e-05f, +3.527979396e-05f, +2.050403146e-05f, +9.042191405e-06f, +8.494304210e-07f, -4.363309672e-06f, -7.060810728e-06f, -7.808824226e-06f, -7.201639933e-06f, +3.237586056e-04f, +7.568806949e-04f, +1.397725787e-03f, +2.174124425e-03f, +2.909138647e-03f, +3.318553711e-03f, +3.040016543e-03f, +1.696733238e-03f, -1.010567040e-03f, -5.199432151e-03f, -1.071285317e-02f, -1.706422384e-02f, -2.344290460e-02f, -2.879295841e-02f, -3.196234216e-02f, -3.190268420e-02f, -2.788484225e-02f, -1.968673524e-02f, -7.710356635e-03f, +7.004711274e-03f, +2.288507778e-02f, +3.803478403e-02f, +5.052094301e-02f, +5.868327097e-02f, +6.140960788e-02f, +5.832426853e-02f, +4.985225673e-02f, +3.714664238e-02f, +2.189346129e-02f, +6.032400511e-03f, -8.552918846e-03f, -2.031727383e-02f, -2.825910966e-02f, -3.201702274e-02f, -3.184914406e-02f, -2.851058599e-02f, -2.306256005e-02f, -1.665657936e-02f, -1.033695430e-02f, -4.895598203e-03f, -7.979610710e-04f, +1.818241802e-03f, +3.084886666e-03f, +3.309122034e-03f, +2.869301551e-03f, +2.124413074e-03f, +1.352460193e-03f, +7.234717837e-04f, -1.011663066e-05f, -1.680953745e-05f, -2.270517913e-05f, -2.484354255e-05f, -1.976802667e-05f, -4.386614560e-06f, +2.295246704e-05f, +6.142412938e-05f, +1.070377027e-04f, +1.525821837e-04f, +1.883821463e-04f, +2.038605671e-04f, +1.896917185e-04f, +1.401349478e-04f, +5.502368951e-05f, -5.911498836e-05f, -1.892017453e-04f, -3.171517381e-04f, -4.226610826e-04f, -4.867652811e-04f, -4.954835019e-04f, -4.427876402e-04f, -3.322313388e-04f, -1.768283313e-04f, +2.871243403e-06f, +1.821741084e-04f, +3.364549421e-04f, +4.453540068e-04f, +4.961329892e-04f, +4.855454817e-04f, +4.199011281e-04f, +3.133868468e-04f, +1.850656642e-04f, +5.522355901e-05f, -5.817440947e-05f, -1.422374703e-04f, -1.906528266e-04f, -2.037839118e-04f, -1.875167265e-04f, -1.512517643e-04f, -1.055682666e-04f, -6.008443510e-05f, -2.191765594e-05f, +5.045062098e-06f, +2.006906889e-05f, +2.486780869e-05f, +2.256041491e-05f, +1.659937380e-05f, /* 2, 0 (48) */ +2.604271951e-04f, +6.520713960e-04f, +1.184392264e-03f, +1.737066681e-03f, +2.100859845e-03f, +2.003596444e-03f, +1.168352244e-03f, -6.020526720e-04f, -3.329654867e-03f, -6.777842271e-03f, -1.040531144e-02f, -1.337949151e-02f, -1.466132590e-02f, -1.315819186e-02f, -7.924759808e-03f, +1.623190098e-03f, +1.552555605e-02f, +3.316834873e-02f, +5.328028472e-02f, +7.404900985e-02f, +9.334657971e-02f, +1.090303366e-01f, +1.192675993e-01f, +1.228249582e-01f, +1.192675993e-01f, +1.090303366e-01f, +9.334657971e-02f, +7.404900985e-02f, +5.328028472e-02f, +3.316834873e-02f, +1.552555605e-02f, +1.623190098e-03f, -7.924759808e-03f, -1.315819186e-02f, -1.466132590e-02f, -1.337949151e-02f, -1.040531144e-02f, -6.777842271e-03f, -3.329654867e-03f, -6.020526720e-04f, +1.168352244e-03f, +2.003596444e-03f, +2.100859845e-03f, +1.737066681e-03f, +1.184392264e-03f, +6.520713960e-04f, +2.604271951e-04f, +4.414624996e-05f, -9.397733863e-06f, -1.475159068e-05f, -1.780699796e-05f, -1.570575921e-05f, -5.894492519e-06f, +1.287546454e-05f, +3.958040364e-05f, +7.028847262e-05f, +9.813493822e-05f, +1.140815919e-04f, +1.084565141e-04f, +7.306034295e-05f, +3.434800198e-06f, -9.922656802e-05f, -2.270449294e-04f, -3.656871562e-04f, -4.960023257e-04f, -5.968946951e-04f, -6.489612978e-04f, -6.382023119e-04f, -5.590356192e-04f, -4.159420831e-04f, -2.233226464e-04f, -3.510128802e-06f, +2.167329417e-04f, +4.105735155e-04f, +5.554809118e-04f, +6.367671050e-04f, +6.496292006e-04f, +5.993511841e-04f, +4.997098643e-04f, +3.699938620e-04f, +2.313033964e-04f, +1.028991279e-04f, -7.032857366e-07f, -7.141256319e-05f, -1.078360932e-04f, -1.142811527e-04f, -9.886406891e-05f, -7.124467603e-05f, -4.050800932e-05f, -1.360250026e-05f, +5.444930471e-06f, +1.552678732e-05f, +1.783443122e-05f, +1.489615403e-05f, +9.574142015e-06f, +4.266520574e-06f, +7.781537535e-05f, -5.172646125e-04f, -1.673334699e-03f, -3.203343269e-03f, -4.525223175e-03f, -4.733635501e-03f, -2.892950492e-03f, +1.502882723e-03f, +8.068686861e-03f, +1.529267543e-02f, +2.072324747e-02f, +2.163579289e-02f, +1.603304991e-02f, +3.643522741e-03f, -1.349956937e-02f, -3.123170394e-02f, -4.427068528e-02f, -4.783283965e-02f, -3.933589198e-02f, -1.956599624e-02f, +7.183458326e-03f, +3.415533317e-02f, +5.408068209e-02f, +6.141247912e-02f, +5.408068209e-02f, +3.415533317e-02f, +7.183458326e-03f, -1.956599624e-02f, -3.933589198e-02f, -4.783283965e-02f, -4.427068528e-02f, -3.123170394e-02f, -1.349956937e-02f, +3.643522741e-03f, +1.603304991e-02f, +2.163579289e-02f, +2.072324747e-02f, +1.529267543e-02f, +8.068686861e-03f, +1.502882723e-03f, -2.892950492e-03f, -4.733635501e-03f, -4.525223175e-03f, -3.203343269e-03f, -1.673334699e-03f, -5.172646125e-04f, +7.781537535e-05f, +2.181178524e-04f, +1.021445183e-05f, +2.711764488e-05f, +4.373606909e-05f, +4.870636224e-05f, +2.965876477e-05f, -2.020862008e-05f, -9.543065144e-05f, -1.750445952e-04f, -2.258666913e-04f, -2.129807855e-04f, -1.147623742e-04f, +6.321493412e-05f, +2.820361204e-04f, +4.757918698e-04f, +5.706234531e-04f, +5.111620793e-04f, +2.849053907e-04f, -6.564268988e-05f, -4.497141734e-04f, -7.537672688e-04f, -8.781008671e-04f, -7.718669222e-04f, -4.533676142e-04f, -7.335878262e-06f, +4.407740003e-04f, +7.648400958e-04f, +8.783629926e-04f, +7.607940572e-04f, +4.610216661e-04f, +7.770478446e-05f, -2.754656586e-04f, -5.065395392e-04f, -5.712966145e-04f, -4.806170152e-04f, -2.888598211e-04f, -6.972252126e-05f, +1.102912474e-04f, +2.112555732e-04f, +2.265914423e-04f, +1.772601301e-04f, +9.800087468e-05f, +2.224447147e-05f, -2.857587745e-05f, -4.853198241e-05f, -4.413533489e-05f, -2.769009656e-05f, -1.066792104e-05f, +3.030211128e-07f, /* 2, 1 (48) */ +2.510294612e-04f, +6.373198053e-04f, +1.166585266e-03f, +1.721360922e-03f, +2.094965353e-03f, +2.016471909e-03f, +1.207932647e-03f, -5.317641994e-04f, -3.231519929e-03f, -6.663760679e-03f, -1.029685493e-02f, -1.330643117e-02f, -1.465789110e-02f, -1.325741842e-02f, -8.151804737e-03f, +1.257502941e-03f, +1.502955372e-02f, +3.257145404e-02f, +5.263132342e-02f, +7.341080754e-02f, +9.278754409e-02f, +1.086143945e-01f, +1.190442767e-01f, +1.228214481e-01f, +1.194843323e-01f, +1.094409101e-01f, +9.390206062e-02f, +7.468577696e-02f, +5.392991392e-02f, +3.376769992e-02f, +1.602526591e-02f, +1.993183960e-03f, -7.693456411e-03f, -1.305529273e-02f, -1.466202918e-02f, -1.345090407e-02f, -1.051314753e-02f, -6.892123423e-03f, -3.428518936e-03f, -6.732973481e-04f, +1.127844235e-03f, +1.989993944e-03f, +2.106304776e-03f, +1.752593469e-03f, +1.202226696e-03f, +6.669675500e-04f, +2.700013371e-04f, +4.841277053e-05f, -9.221479075e-06f, -1.460482609e-05f, -1.777450663e-05f, -1.587709547e-05f, -6.335117472e-06f, +1.215642107e-05f, +3.865695453e-05f, +6.932966021e-05f, +9.739424462e-05f, +1.138608472e-04f, +1.090475536e-04f, +7.467422635e-05f, +6.133495444e-06f, -9.557911602e-05f, -2.227974382e-04f, -3.613724853e-04f, -4.922659171e-04f, -5.943900778e-04f, -6.482313423e-04f, -6.395698761e-04f, -5.625270708e-04f, -4.212616238e-04f, -2.298854257e-04f, -1.052996006e-05f, +2.101170941e-04f, +4.051565071e-04f, +5.518632500e-04f, +6.352642376e-04f, +6.502347371e-04f, +6.017590106e-04f, +5.033878865e-04f, +3.742919618e-04f, +2.355723082e-04f, +1.065964465e-04f, +2.060909781e-06f, -6.973082794e-05f, -1.071860828e-04f, -1.144592400e-04f, -9.958133640e-05f, -7.219801774e-05f, -4.143960274e-05f, -1.433745413e-05f, +4.986422344e-06f, +1.534011438e-05f, +1.785671677e-05f, +1.503843121e-05f, +9.750642811e-06f, +4.414790764e-06f, +8.802982718e-05f, -4.901469677e-04f, -1.629598630e-03f, -3.154636907e-03f, -4.495564410e-03f, -4.753844121e-03f, -2.988381144e-03f, +1.327838128e-03f, +7.842820170e-03f, +1.507969465e-02f, +2.060848510e-02f, +2.169900783e-02f, +1.631508603e-02f, +4.119314611e-03f, -1.292894591e-02f, -3.072054186e-02f, -4.398577989e-02f, -4.789848234e-02f, -3.978560615e-02f, -2.031976351e-02f, +6.305357459e-03f, +3.338346624e-02f, +5.362731448e-02f, +6.140514325e-02f, +5.452145609e-02f, +3.492017326e-02f, +8.061821318e-03f, -1.880520218e-02f, -3.887487031e-02f, -4.775513486e-02f, -4.454615094e-02f, -3.173824348e-02f, -1.407086598e-02f, +3.162905726e-03f, +1.574419009e-02f, +2.156607037e-02f, +2.083353872e-02f, +1.550393101e-02f, +8.295278303e-03f, +1.680142853e-03f, -2.794949618e-03f, -4.711391030e-03f, -4.553799053e-03f, -3.251875252e-03f, -1.717470034e-03f, -5.449547091e-04f, +6.714745431e-05f, +2.184208735e-04f, +9.767473893e-06f, +2.654535421e-05f, +4.332554241e-05f, +4.885683791e-05f, +3.071051883e-05f, -1.819886387e-05f, -9.286579528e-05f, -1.728011389e-04f, -2.250786348e-04f, -2.146203664e-04f, -1.191527570e-04f, +5.674957623e-05f, +2.751886761e-04f, +4.708685948e-04f, +5.697959909e-04f, +5.156170440e-04f, +2.942196033e-04f, -5.361531476e-05f, -4.383273960e-04f, -7.465608329e-04f, -8.776076910e-04f, -7.786807920e-04f, -4.658332083e-04f, -2.200554834e-05f, +4.280558673e-04f, +7.576020354e-04f, +8.783935306e-04f, +7.676386936e-04f, +4.722463287e-04f, +8.979821280e-05f, -2.659025952e-04f, -5.017498821e-04f, -5.718143049e-04f, -4.853418550e-04f, -2.956574536e-04f, -7.627062286e-05f, +1.057400680e-04f, +2.094444104e-04f, +2.272519091e-04f, +1.794465983e-04f, +1.005755783e-04f, +2.430601068e-05f, -2.746179810e-05f, -4.833335192e-05f, -4.452293401e-05f, -2.826241838e-05f, -1.112777301e-05f, +7.525040422e-08f, /* 2, 2 (48) */ +2.418079821e-04f, +6.227149792e-04f, +1.148810760e-03f, +1.705483827e-03f, +2.088630235e-03f, +2.028628330e-03f, +1.246589602e-03f, -4.624345392e-04f, -3.134125684e-03f, -6.549899832e-03f, -1.018780737e-02f, -1.323175694e-02f, -1.465175760e-02f, -1.335299754e-02f, -8.374602175e-03f, +8.961304561e-04f, +1.453728781e-02f, +3.197706396e-02f, +5.198309208e-02f, +7.277123767e-02f, +9.222501702e-02f, +1.081931329e-01f, +1.188143913e-01f, +1.228109182e-01f, +1.196944494e-01f, +1.098460666e-01f, +9.445392387e-02f, +7.532104120e-02f, +5.458014866e-02f, +3.436945893e-02f, +1.652865380e-02f, +2.367475921e-03f, -7.457884103e-03f, -1.294869628e-02f, -1.465996827e-02f, -1.352063490e-02f, -1.062033362e-02f, -7.006582663e-03f, -3.528100272e-03f, -7.454953658e-04f, +1.086404632e-03f, +1.975656490e-03f, +2.111291198e-03f, +1.767933583e-03f, +1.220083412e-03f, +6.820059812e-04f, +2.797519799e-04f, +5.282756130e-05f, -9.045437432e-06f, -1.445594466e-05f, -1.773704708e-05f, -1.604086273e-05f, -6.766816532e-06f, +1.144544108e-05f, +3.773782790e-05f, +6.836848933e-05f, +9.664228773e-05f, +1.136192096e-04f, +1.096094236e-04f, +7.625427805e-05f, +8.799239900e-06f, -9.195711480e-05f, -2.185614491e-04f, -3.570504884e-04f, -4.885012868e-04f, -5.918378714e-04f, -6.474396557e-04f, -6.408698258e-04f, -5.659549751e-04f, -4.265315589e-04f, -2.364205011e-04f, -1.754851234e-05f, +2.034758906e-04f, +3.996916520e-04f, +5.481829449e-04f, +6.336937015e-04f, +6.507776023e-04f, +6.041176459e-04f, +5.070357475e-04f, +3.785808125e-04f, +2.398511288e-04f, +1.103181681e-04f, +4.857641601e-06f, -6.801508365e-05f, -1.065062782e-04f, -1.146155658e-04f, -1.002864397e-04f, -7.314824287e-05f, -4.237501215e-05f, -1.508024918e-05f, +4.518961403e-06f, +1.514567628e-05f, +1.787376529e-05f, +1.517833682e-05f, +9.927174596e-06f, +4.564577659e-06f, +9.779730107e-05f, -4.636016135e-04f, -1.586273087e-03f, -3.105780069e-03f, -4.464853891e-03f, -4.772042985e-03f, -3.081246939e-03f, +1.155036989e-03f, +7.617741535e-03f, +1.486507428e-02f, +2.048933234e-02f, +2.175575740e-02f, +1.659027470e-02f, +4.590183206e-03f, -1.235914992e-02f, -3.020492482e-02f, -4.369156029e-02f, -4.795209765e-02f, -4.022393355e-02f, -2.106632434e-02f, +5.427749768e-03f, +3.260478545e-02f, +5.316148127e-02f, +6.138313770e-02f, +5.494951196e-02f, +3.567777530e-02f, +8.940214849e-03f, -1.803756349e-02f, -3.840262399e-02f, -4.766533665e-02f, -4.481205354e-02f, -3.223999336e-02f, -1.464268029e-02f, +2.677563871e-03f, +1.544853263e-02f, +2.148979975e-02f, +2.093927879e-02f, +1.571337542e-02f, +8.522530212e-03f, +1.859589451e-03f, -2.694374039e-03f, -4.687085019e-03f, -4.581260851e-03f, -3.300208604e-03f, -1.761992968e-03f, -5.732171275e-04f, +5.601968130e-05f, +2.184961239e-04f, +9.327090145e-06f, +2.597351020e-05f, +4.290415923e-05f, +4.898376114e-05f, +3.173121068e-05f, -1.621559433e-05f, -9.030718001e-05f, -1.705309043e-04f, -2.242282643e-04f, -2.161746624e-04f, -1.234617384e-04f, +5.032813447e-05f, +2.683198039e-04f, +4.658493838e-04f, +5.688154408e-04f, +5.199040306e-04f, +3.034061574e-04f, -4.162602116e-05f, -4.268648926e-04f, -7.391773030e-04f, -8.768840711e-04f, -7.852800500e-04f, -4.781673233e-04f, -3.666895974e-05f, +4.152167559e-04f, +7.501545301e-04f, +8.781920142e-04f, +7.742987235e-04f, +4.833846306e-04f, +1.019195666e-04f, -2.562184377e-04f, -4.967936220e-04f, -5.721753980e-04f, -4.899642325e-04f, -3.024266850e-04f, -8.285749660e-05f, +1.011095612e-04f, +2.075470058e-04f, +2.278471264e-04f, +1.816028521e-04f, +1.031538630e-04f, +2.639281442e-05f, -2.631648037e-05f, -4.811012979e-05f, -4.489845939e-05f, -2.883431423e-05f, -1.159389361e-05f, -1.598987474e-07f, /* 2, 3 (48) */ +2.327625447e-04f, +6.082590345e-04f, +1.131073713e-03f, +1.689442964e-03f, +2.081863419e-03f, +2.040073771e-03f, +1.284327430e-03f, -3.940660499e-04f, -3.037483396e-03f, -6.436280622e-03f, -1.007819795e-02f, -1.315550266e-02f, -1.464295836e-02f, -1.344495466e-02f, -8.593163625e-03f, +5.390799677e-04f, +1.404878652e-02f, +3.138522609e-02f, +5.133565242e-02f, +7.213036784e-02f, +9.165906204e-02f, +1.077666013e-01f, +1.185779707e-01f, +1.227933696e-01f, +1.198979252e-01f, +1.102457583e-01f, +9.500210682e-02f, +7.595473490e-02f, +5.523092626e-02f, +3.497357657e-02f, +1.703568955e-02f, +2.746056734e-03f, -7.218032974e-03f, -1.283837811e-02f, -1.465511063e-02f, -1.358864998e-02f, -1.072683989e-02f, -7.121198229e-03f, -3.628386712e-03f, -8.186436087e-04f, +1.044029620e-03f, +1.960576241e-03f, +2.115810160e-03f, +1.783079259e-03f, +1.237957178e-03f, +6.971843180e-04f, +2.896791545e-04f, +5.739213896e-05f, -8.869667763e-06f, -1.430503026e-05f, -1.769470941e-05f, -1.619712886e-05f, -7.189603096e-06f, +1.074259293e-05f, +3.682318671e-05f, +6.740520824e-05f, +9.587936640e-05f, +1.133569712e-04f, +1.101423396e-04f, +7.780056820e-05f, +1.143190856e-05f, -8.836090079e-05f, -2.143374835e-04f, -3.527218023e-04f, -4.847090843e-04f, -5.892386203e-04f, -6.465865679e-04f, -6.421021986e-04f, -5.693190501e-04f, -4.317513181e-04f, -2.429270989e-04f, -2.456493322e-05f, +1.968101222e-04f, +3.941795518e-04f, +5.444403173e-04f, +6.320554984e-04f, +6.512574993e-04f, +6.064265671e-04f, +5.106528043e-04f, +3.828597697e-04f, +2.441393179e-04f, +1.140639309e-04f, +7.686758355e-06f, -6.626528240e-05f, -1.057964787e-04f, -1.147498435e-04f, -1.009790774e-04f, -7.409509441e-05f, -4.331406289e-05f, -1.583080551e-05f, +4.042543184e-06f, +1.494341021e-05f, +1.788548775e-05f, +1.531578494e-05f, +1.010367479e-05f, +4.715850413e-06f, +1.071243912e-04f, -4.376281033e-04f, -1.543368928e-03f, -3.056796308e-03f, -4.433122681e-03f, -4.788258580e-03f, -3.171554119e-03f, +9.845060845e-04f, +7.393513271e-03f, +1.464889962e-02f, +2.036587060e-02f, +2.180608554e-02f, +1.685859451e-02f, +5.056032590e-03f, -1.179033448e-02f, -2.968502079e-02f, -4.338815413e-02f, -4.799372367e-02f, -4.065079844e-02f, -2.180550164e-02f, +4.550865697e-03f, +3.181950540e-02f, +5.268331394e-02f, +6.134646874e-02f, +5.536472871e-02f, +3.642792983e-02f, +9.818406863e-03f, -1.726326477e-02f, -3.791923935e-02f, -4.756341708e-02f, -4.506827197e-02f, -3.273678699e-02f, -1.521485568e-02f, +2.187599639e-03f, +1.514610595e-02f, +2.140694225e-02f, +2.104038835e-02f, +1.592092242e-02f, +8.750377339e-03f, +2.041192303e-03f, -2.591220176e-03f, -4.660692205e-03f, -4.607577331e-03f, -3.348318733e-03f, -1.806891427e-03f, -6.020514417e-04f, +4.442578769e-05f, +2.183362251e-04f, +8.893397928e-06f, +2.540239313e-05f, +4.247232228e-05f, +4.908748870e-05f, +3.272092345e-05f, -1.425918711e-05f, -8.775566630e-05f, -1.682350316e-04f, -2.233165834e-04f, -2.176440466e-04f, -1.276886948e-04f, +4.395226739e-05f, +2.614318102e-04f, +4.607364475e-04f, +5.676830579e-04f, +5.240226921e-04f, +3.124629637e-04f, -2.967814651e-05f, -4.153302342e-04f, -7.316192808e-04f, -8.759306836e-04f, -7.916631086e-04f, -4.903665421e-04f, -5.132194230e-05f, +4.022602460e-04f, +7.424994357e-04f, +8.777580473e-04f, +7.807717433e-04f, +4.944330571e-04f, +1.140654159e-04f, -2.464154710e-04f, -4.916713289e-04f, -5.723788116e-04f, -4.944820104e-04f, -3.091651753e-04f, -8.948137306e-05f, +9.640048616e-05f, +2.055630957e-04f, +2.283761428e-04f, +1.837277423e-04f, +1.057348169e-04f, +2.850444351e-05f, -2.513989055e-05f, -4.786198073e-05f, -4.526150288e-05f, -2.940548286e-05f, -1.206616299e-05f, -4.024611317e-07f, /* 2, 4 (48) */ +2.238928769e-04f, +5.939540043e-04f, +1.113379003e-03f, +1.673245835e-03f, +2.074673816e-03f, +2.050816364e-03f, +1.321150617e-03f, -3.266608416e-04f, -2.941604030e-03f, -6.322923651e-03f, -9.968055609e-03f, -1.307770209e-02f, -1.463152645e-02f, -1.353331556e-02f, -8.807501108e-03f, +1.863581655e-04f, +1.356407744e-02f, +3.079598747e-02f, +5.068906585e-02f, +7.148826564e-02f, +9.108974299e-02f, +1.073348500e-01f, +1.183350437e-01f, +1.227688047e-01f, +1.200947354e-01f, +1.106399378e-01f, +9.554654713e-02f, +7.658679040e-02f, +5.588218376e-02f, +3.558000314e-02f, +1.754634235e-02f, +3.128916504e-03f, -6.973893657e-03f, -1.272431418e-02f, -1.464742387e-02f, -1.365491527e-02f, -1.083263637e-02f, -7.235948073e-03f, -3.729365789e-03f, -8.927387031e-04f, +1.000715557e-03f, +1.944745435e-03f, +2.119852703e-03f, +1.798022669e-03f, +1.255842665e-03f, +7.125001030e-04f, +2.997828293e-04f, +6.210798937e-05f, -8.694227944e-06f, -1.415216617e-05f, -1.764758391e-05f, -1.634596290e-05f, -7.603492727e-06f, +1.004794213e-05f, +3.591319099e-05f, +6.644006295e-05f, +9.510577867e-05f, +1.130744256e-04f, +1.106465203e-04f, +7.931317237e-05f, +1.403138297e-05f, -8.479080402e-05f, -2.101260580e-04f, -3.483870618e-04f, -4.808899607e-04f, -5.865928741e-04f, -6.456724169e-04f, -6.432670421e-04f, -5.726190240e-04f, -4.369203387e-04f, -2.494044498e-04f, -3.157837062e-05f, +1.901205840e-04f, +3.886208156e-04f, +5.406356977e-04f, +6.303496402e-04f, +6.516741400e-04f, +6.086852563e-04f, +5.142384158e-04f, +3.871281868e-04f, +2.484363303e-04f, +1.178333665e-04f, +1.054810206e-05f, -6.448138195e-05f, -1.050564873e-04f, -1.148617881e-04f, -1.016589473e-04f, -7.503831325e-05f, -4.425657742e-05f, -1.658904033e-05f, +3.557165526e-06f, +1.473325471e-05f, +1.789179549e-05f, +1.545068921e-05f, +1.028007989e-05f, +4.868577177e-06f, +1.160177891e-04f, -4.122257101e-04f, -1.500896606e-03f, -3.007708819e-03f, -4.400401757e-03f, -4.802517767e-03f, -3.259309785e-03f, +8.162710528e-04f, +7.170196687e-03f, +1.443125557e-02f, +2.023818191e-02f, +2.185003780e-02f, +1.712002632e-02f, +5.516769037e-03f, -1.122265142e-02f, -2.916099810e-02f, -4.307569117e-02f, -4.802340182e-02f, -4.106612868e-02f, -2.253712093e-02f, +3.674935013e-03f, +3.102784229e-02f, +5.219294740e-02f, +6.129514680e-02f, +5.576698896e-02f, +3.717042926e-02f, +1.069616491e-02f, -1.648249302e-02f, -3.742480630e-02f, -4.744935167e-02f, -4.531468744e-02f, -3.322845831e-02f, -1.578723449e-02f, +1.693117628e-03f, +1.483694077e-02f, +2.131746088e-02f, +2.113678884e-02f, +1.612648552e-02f, +8.978753482e-03f, +2.224920046e-03f, -2.485485359e-03f, -4.632187761e-03f, -4.632717222e-03f, -3.396180714e-03f, -1.852152930e-03f, -6.314569246e-04f, +3.235962470e-05f, +2.179337640e-04f, +8.466489063e-06f, +2.483227790e-05f, +4.203043254e-05f, +4.916838214e-05f, +3.367975215e-05f, -1.233000201e-05f, -8.521210150e-05f, -1.659146577e-04f, -2.223446079e-04f, -2.190289187e-04f, -1.318330365e-04f, +3.762360484e-05f, +2.545269905e-04f, +4.555320128e-04f, +5.664001392e-04f, +5.279727365e-04f, +3.213879831e-04f, -1.777500250e-05f, -4.037270028e-04f, -7.238894151e-04f, -8.747482740e-04f, -7.978284485e-04f, -5.024274914e-04f, -6.596032919e-05f, +3.891899554e-04f, +7.346386734e-04f, +8.770913041e-04f, +7.870554015e-04f, +5.053881103e-04f, +1.262323105e-04f, -2.364960278e-04f, -4.863836286e-04f, -5.724235080e-04f, -4.988930718e-04f, -3.158705776e-04f, -9.614045620e-05f, +9.161363612e-05f, +2.034924447e-04f, +2.288380210e-04f, +1.858201188e-04f, +1.083175159e-04f, +3.064044285e-05f, -2.393200775e-05f, -4.758857544e-05f, -4.561165540e-05f, -2.997561797e-05f, -1.254445566e-05f, -6.524678118e-07f, /* 2, 5 (48) */ +2.151986490e-04f, +5.798018381e-04f, +1.095731419e-03f, +1.656899872e-03f, +2.067070323e-03f, +2.060864306e-03f, +1.357063808e-03f, -2.602207787e-04f, -2.846498251e-03f, -6.209849225e-03f, -9.857409088e-03f, -1.299838892e-02f, -1.461749507e-02f, -1.361810636e-02f, -9.017627166e-03f, -1.620288963e-04f, +1.308318748e-02f, +3.020939460e-02f, +5.004339344e-02f, +7.084499860e-02f, +9.051712397e-02f, +1.068979297e-01f, +1.180856392e-01f, +1.227372263e-01f, +1.202848560e-01f, +1.110285586e-01f, +9.608718283e-02f, +7.721714004e-02f, +5.653385790e-02f, +3.618868840e-02f, +1.806058077e-02f, +3.516044690e-03f, -6.725457326e-03f, -1.260648082e-02f, -1.463687577e-02f, -1.371939665e-02f, -1.093769286e-02f, -7.350809861e-03f, -3.831024737e-03f, -9.677770163e-04f, +9.564589793e-04f, +1.928156395e-03f, +2.123409868e-03f, +1.812755924e-03f, +1.273734461e-03f, +7.279507922e-04f, +3.100629092e-04f, +6.697656655e-05f, -8.519174888e-06f, -1.399743514e-05f, -1.759576105e-05f, -1.648743506e-05f, -8.008503125e-06f, +9.361551378e-06f, +3.500799781e-05f, +6.547329714e-05f, +9.432182171e-05f, +1.127718672e-04f, +1.111221882e-04f, +8.079217154e-05f, +1.659755120e-05f, -8.124714801e-05f, -2.059276841e-04f, -3.440468994e-04f, -4.770445681e-04f, -5.839011872e-04f, -6.446975487e-04f, -6.443644139e-04f, -5.758546346e-04f, -4.420380662e-04f, -2.558517894e-04f, -3.858797298e-05f, +1.834080748e-04f, +3.830160601e-04f, +5.367694260e-04f, +6.285761486e-04f, +6.520272446e-04f, +6.108932017e-04f, +5.177919432e-04f, +3.913854162e-04f, +2.527416165e-04f, +1.216261004e-04f, +1.344150808e-05f, -6.266334577e-05f, -1.042861110e-04f, -1.149511162e-04f, -1.023257469e-04f, -7.597763824e-05f, -4.520237532e-05f, -1.735486795e-05f, +3.062828592e-06f, +1.451514970e-05f, +1.789260018e-05f, +1.558296283e-05f, +1.045632548e-05f, +5.022725094e-06f, +1.244842782e-04f, -3.873934322e-04f, -1.458866173e-03f, -2.958540437e-03f, -4.366722005e-03f, -4.814847769e-03f, -3.344521887e-03f, +6.503563952e-04f, +6.947852079e-03f, +1.421222665e-02f, +2.010634887e-02f, +2.188766141e-02f, +1.737455331e-02f, +5.972301050e-03f, -1.065625128e-02f, -2.863302536e-02f, -4.275430318e-02f, -4.804117682e-02f, -4.146985568e-02f, -2.326101034e-02f, +2.800186739e-03f, +3.023001384e-02f, +5.169051991e-02f, +6.122918647e-02f, +5.615617891e-02f, +3.790506794e-02f, +1.157325621e-02f, -1.569543762e-02f, -3.691941819e-02f, -4.732311936e-02f, -4.555118347e-02f, -3.371484194e-02f, -1.635965800e-02f, +1.194224557e-03f, +1.452107019e-02f, +2.122132042e-02f, +2.122840247e-02f, +1.632997796e-02f, +9.207591503e-03f, +2.410740164e-03f, -2.377167844e-03f, -4.601547318e-03f, -4.656649229e-03f, -3.443769290e-03f, -1.897764586e-03f, -6.614325425e-04f, +1.981516904e-05f, +2.172812962e-04f, +8.046449887e-06f, +2.426343398e-05f, +4.157888904e-05f, +4.922680759e-05f, +3.460780348e-05f, -1.042838306e-05f, -8.267731948e-05f, -1.635709156e-04f, -2.213133645e-04f, -2.203297043e-04f, -1.358942076e-04f, +3.134374756e-05f, +2.476076295e-04f, +4.502383222e-04f, +5.649680224e-04f, +5.317539276e-04f, +3.301792273e-04f, -5.919874154e-06f, -3.920587902e-04f, -7.159904009e-04f, -8.733376566e-04f, -8.037746187e-04f, -5.143468419e-04f, -8.057995834e-05f, +3.760095383e-04f, +7.265742297e-04f, +8.761915298e-04f, +7.931473988e-04f, +5.162463108e-04f, +1.384167806e-04f, -2.264624880e-04f, -4.809312030e-04f, -5.723084953e-04f, -5.031953214e-04f, -3.225405397e-04f, -1.028329237e-04f, +8.674983814e-05f, +2.013348463e-04f, +2.292318388e-04f, +1.878788303e-04f, +1.109010239e-04f, +3.280034141e-05f, -2.269282404e-05f, -4.728959078e-05f, -4.594850717e-05f, -3.054440828e-05f, -1.302864034e-05f, -9.099460397e-07f, /* 2, 6 (48) */ +2.066794741e-04f, +5.658044030e-04f, +1.078135658e-03f, +1.640412437e-03f, +2.059061820e-03f, +2.070225857e-03f, +1.392071805e-03f, -1.947474815e-04f, -2.752176430e-03f, -6.097077358e-03f, -9.746286900e-03f, -1.291759675e-02f, -1.460089752e-02f, -1.369935351e-02f, -9.223554850e-03f, -5.060757957e-04f, +1.260614291e-02f, +2.962549341e-02f, +4.939869589e-02f, +7.020063419e-02f, +8.994126933e-02f, +1.064558916e-01f, +1.178297874e-01f, +1.226986384e-01f, +1.204682640e-01f, +1.114115747e-01f, +9.662395226e-02f, +7.784571619e-02f, +5.718588514e-02f, +3.679958160e-02f, +1.857837271e-02f, +3.907430107e-03f, -6.472715710e-03f, -1.248485472e-02f, -1.462343426e-02f, -1.378205999e-02f, -1.104197897e-02f, -7.465760977e-03f, -3.933350484e-03f, -1.043754655e-03f, +9.112566040e-04f, +1.910801527e-03f, +2.126472697e-03f, +1.827271074e-03f, +1.291627061e-03f, +7.435337550e-04f, +3.205192346e-04f, +7.199929164e-05f, -8.344564540e-06f, -1.384091928e-05f, -1.753933143e-05f, -1.662161663e-05f, -8.404654100e-06f, +8.683480529e-06f, +3.410776128e-05f, +6.450515218e-05f, +9.352779174e-05f, +1.124495919e-04f, +1.115695688e-04f, +8.223765199e-05f, +1.913030786e-05f, -7.773024984e-05f, -2.017428681e-04f, -3.397019451e-04f, -4.731735600e-04f, -5.811641189e-04f, -6.436623173e-04f, -6.453943812e-04f, -5.790256297e-04f, -4.471039543e-04f, -2.622683581e-04f, -4.559288931e-05f, +1.766733973e-04f, +3.773659094e-04f, +5.328418520e-04f, +6.267350554e-04f, +6.523165421e-04f, +6.130498973e-04f, +5.213127495e-04f, +3.956308083e-04f, +2.570546224e-04f, +1.254417521e-04f, +1.636680517e-05f, -6.081114311e-05f, -1.034851606e-04f, -1.150175463e-04f, -1.029791733e-04f, -7.691280619e-05f, -4.615127328e-05f, -1.812819973e-05f, +2.559534897e-06f, +1.428903649e-05f, +1.788781391e-05f, +1.571251857e-05f, +1.063234626e-05f, +5.178260298e-06f, +1.325307281e-04f, -3.631299982e-04f, -1.417287284e-03f, -2.909313630e-03f, -4.332114202e-03f, -4.825276152e-03f, -3.427199206e-03f, +4.867854796e-04f, +6.726538715e-03f, +1.399189695e-02f, +1.997045467e-02f, +2.191900516e-02f, +1.762216094e-02f, +6.422539372e-03f, -1.009128326e-02f, -2.810127143e-02f, -4.242412396e-02f, -4.804709670e-02f, -4.186191447e-02f, -2.397700074e-02f, +1.926849082e-03f, +2.942623922e-02f, +5.117617307e-02f, +6.114860651e-02f, +5.653218845e-02f, +3.863164217e-02f, +1.244944774e-02f, -1.490229022e-02f, -3.640317188e-02f, -4.718470258e-02f, -4.577764596e-02f, -3.419577315e-02f, -1.693196650e-02f, +6.910292352e-04f, +1.419852965e-02f, +2.111848750e-02f, +2.131515231e-02f, +1.653131281e-02f, +9.436823341e-03f, +2.598618995e-03f, -2.266266820e-03f, -4.568746977e-03f, -4.679342053e-03f, -3.491058880e-03f, -1.943713093e-03f, -6.919769508e-04f, +6.786528698e-06f, +2.163713502e-04f, +7.633361304e-06f, +2.369612532e-05f, +4.111808869e-05f, +4.926313550e-05f, +3.550519564e-05f, -8.554658539e-06f, -8.015214039e-05f, -1.612049344e-04f, -2.202238910e-04f, -2.215468551e-04f, -1.398716859e-04f, +2.511426691e-05f, +2.406760000e-04f, +4.448576322e-04f, +5.633880856e-04f, +5.353660836e-04f, +3.388347590e-04f, +5.883981206e-06f, -3.803291967e-04f, -7.079249784e-04f, -8.716997142e-04f, -8.095002376e-04f, -5.261213105e-04f, -9.517667379e-05f, +3.627226851e-04f, +7.183081557e-04f, +8.750585407e-04f, +7.990454901e-04f, +5.270041986e-04f, +1.506153382e-04f, -2.163172775e-04f, -4.753147901e-04f, -5.720328272e-04f, -5.073866860e-04f, -3.291727038e-04f, -1.095569277e-04f, +8.180995317e-05f, +1.990901227e-04f, +2.295566890e-04f, +1.899027257e-04f, +1.134843933e-04f, +3.498365227e-05f, -2.142234465e-05f, -4.696471002e-05f, -4.627164787e-05f, -3.111153756e-05f, -1.351858005e-05f, -1.174919173e-06f, /* 2, 7 (48) */ +1.983349096e-04f, +5.519634837e-04f, +1.060596327e-03f, +1.623790820e-03f, +2.050657166e-03f, +2.078909338e-03f, +1.426179567e-03f, -1.302423294e-04f, -2.658648638e-03f, -5.984627766e-03f, -9.634717331e-03f, -1.283535910e-02f, -1.458176721e-02f, -1.377708376e-02f, -9.425297718e-03f, -8.457777408e-04f, +1.213296935e-02f, +2.904432929e-02f, +4.875503357e-02f, +6.955523980e-02f, +8.936224371e-02f, +1.060087877e-01f, +1.175675191e-01f, +1.226530455e-01f, +1.206449374e-01f, +1.117889406e-01f, +9.715679411e-02f, +7.847245124e-02f, +5.783820168e-02f, +3.741263150e-02f, +1.909968546e-02f, +4.303060915e-03f, -6.215661087e-03f, -1.235941296e-02f, -1.460706746e-02f, -1.384287114e-02f, -1.114546413e-02f, -7.580778523e-03f, -4.036329657e-03f, -1.120667461e-03f, +8.651053307e-04f, +1.892673327e-03f, +2.129032232e-03f, +1.841560110e-03f, +1.309514875e-03f, +7.592462736e-04f, +3.311515809e-04f, +7.717755194e-05f, -8.170451874e-06f, -1.368270014e-05f, -1.747838576e-05f, -1.674858004e-05f, -8.791967543e-06f, +8.013786642e-06f, +3.321263254e-05f, +6.353586705e-05f, +9.272398405e-05f, +1.121078964e-04f, +1.119888913e-04f, +8.364970531e-05f, +2.162955402e-05f, -7.424042003e-05f, -1.975721113e-04f, -3.353528265e-04f, -4.692775907e-04f, -5.783822332e-04f, -6.425670845e-04f, -6.463570208e-04f, -5.821317669e-04f, -4.521174649e-04f, -2.686534011e-04f, -5.259226943e-05f, +1.699173576e-04f, +3.716709945e-04f, +5.288533349e-04f, +6.248264024e-04f, +6.525417699e-04f, +6.151548427e-04f, +5.248002005e-04f, +3.998637126e-04f, +2.613747898e-04f, +1.292799344e-04f, +1.932381540e-05f, -5.892474902e-05f, -1.026534512e-04f, -1.150607986e-04f, -1.036189232e-04f, -7.784355196e-05f, -4.710308517e-05f, -1.890894410e-05f, +2.047289331e-06f, +1.405485785e-05f, +1.787734921e-05f, +1.583926880e-05f, +1.080807602e-05f, +5.335147914e-06f, +1.401640894e-04f, -3.394338729e-04f, -1.376169196e-03f, -2.860050494e-03f, -4.296609006e-03f, -4.833830810e-03f, -3.507351347e-03f, +3.255805452e-04f, +6.506314824e-03f, +1.377035010e-02f, +1.983058298e-02f, +2.194411942e-02f, +1.786283694e-02f, +6.867397005e-03f, -9.527895176e-03f, -2.756590535e-02f, -4.208528920e-02f, -4.804121272e-02f, -4.224224367e-02f, -2.468492572e-02f, +1.055149368e-03f, +2.861673899e-02f, +5.065005176e-02f, +6.105342983e-02f, +5.689491114e-02f, +3.934995032e-02f, +1.332450628e-02f, -1.410324473e-02f, -3.587616768e-02f, -4.703408724e-02f, -4.599396324e-02f, -3.467108794e-02f, -1.750399933e-02f, +1.836425491e-04f, +1.386935695e-02f, +2.100893057e-02f, +2.139696226e-02f, +1.673040293e-02f, +9.666380030e-03f, +2.788521720e-03f, -2.152782426e-03f, -4.533763325e-03f, -4.700764398e-03f, -3.538023590e-03f, -1.989984741e-03f, -7.230884884e-04f, -6.732051356e-06f, +2.151964310e-04f, +7.227298826e-06f, +2.313061035e-05f, +4.064842614e-05f, +4.927774042e-05f, +3.637205811e-05f, -6.709141053e-06f, -7.763737051e-05f, -1.588178385e-04f, -2.190772355e-04f, -2.226808477e-04f, -1.437649828e-04f, +1.893670441e-05f, +2.337343623e-04f, +4.393922133e-04f, +5.616617465e-04f, +5.388090779e-04f, +3.473526926e-04f, +1.763333493e-05f, -3.685418302e-04f, -6.996959320e-04f, -8.698353975e-04f, -8.150039925e-04f, -5.377476602e-04f, -1.097463270e-04f, +3.493331199e-04f, +7.098425667e-04f, +8.736922246e-04f, +8.047474842e-04f, +5.376583343e-04f, +1.628244780e-04f, -2.060628682e-04f, -4.695351836e-04f, -5.715956042e-04f, -5.114651158e-04f, -3.357647084e-04f, -1.163105947e-04f, +7.679487601e-05f, +1.967581254e-04f, +2.298116804e-04f, +1.918906538e-04f, +1.160666647e-04f, +3.718987259e-05f, -2.012058813e-05f, -4.661362310e-05f, -4.658066683e-05f, -3.167668481e-05f, -1.401413201e-05f, -1.447406595e-06f, /* 2, 8 (48) */ +1.901644577e-04f, +5.382807835e-04f, +1.043117941e-03f, +1.607042240e-03f, +2.041865198e-03f, +2.086923125e-03f, +1.459392199e-03f, -6.670646231e-05f, -2.565924654e-03f, -5.872519870e-03f, -9.522728440e-03f, -1.275170939e-02f, -1.456013766e-02f, -1.385132418e-02f, -9.622869830e-03f, -1.181130567e-03f, +1.166369176e-02f, +2.846594706e-02f, +4.811246649e-02f, +6.890888278e-02f, +8.878011194e-02f, +1.055566702e-01f, +1.172988657e-01f, +1.226004532e-01f, +1.208148548e-01f, +1.121606116e-01f, +9.768564744e-02f, +7.909727764e-02f, +5.849074345e-02f, +3.802778634e-02f, +1.962448566e-02f, +4.702924628e-03f, -5.954286298e-03f, -1.223013303e-02f, -1.458774364e-02f, -1.390179589e-02f, -1.124811758e-02f, -7.695839322e-03f, -4.139948580e-03f, -1.198511013e-03f, +8.180022455e-04f, +1.873764383e-03f, +2.131079521e-03f, +1.855614968e-03f, +1.327392224e-03f, +7.750855424e-04f, +3.419596569e-04f, +8.251269985e-05f, -7.996890882e-06f, -1.352285859e-05f, -1.741301485e-05f, -1.686839873e-05f, -9.170467399e-06f, +7.352523987e-06f, +3.232275977e-05f, +6.256567834e-05f, +9.191069286e-05f, +1.117470784e-04f, +1.123803877e-04f, +8.502842828e-05f, +2.409519724e-05f, -7.077796261e-05f, -1.934159098e-04f, -3.310001687e-04f, -4.653573154e-04f, -5.755560987e-04f, -6.414122198e-04f, -6.472524196e-04f, -5.851728139e-04f, -4.570780681e-04f, -2.750061691e-04f, -5.958526404e-05f, +1.631407655e-04f, +3.659319540e-04f, +5.248042432e-04f, +6.228502412e-04f, +6.527026745e-04f, +6.172075439e-04f, +5.282536639e-04f, +4.040834770e-04f, +2.657015558e-04f, +1.331402544e-04f, +2.231235421e-05f, -5.700414440e-05f, -1.017908016e-04f, -1.150805950e-04f, -1.042446931e-04f, -7.876960845e-05f, -4.805762199e-05f, -1.969700654e-05f, +1.526099187e-06f, +1.381255800e-05f, +1.786111905e-05f, +1.596312552e-05f, +1.098344767e-05f, +5.493352053e-06f, +1.473913882e-04f, -3.163032626e-04f, -1.335520770e-03f, -2.810772754e-03f, -4.260236948e-03f, -4.840539951e-03f, -3.584988717e-03f, +1.667627067e-04f, +6.287237588e-03f, +1.354766925e-02f, +1.968681800e-02f, +2.196305613e-02f, +1.809657130e-02f, +7.306789218e-03f, -8.966233429e-03f, -2.702709627e-02f, -4.173793651e-02f, -4.802357938e-02f, -4.261078550e-02f, -2.538462165e-02f, +1.853139707e-04f, +2.780173499e-02f, +5.011230410e-02f, +6.094368351e-02f, +5.724424426e-02f, +4.005979289e-02f, +1.419819851e-02f, -1.329849725e-02f, -3.533850934e-02f, -4.687126276e-02f, -4.620002611e-02f, -3.514062312e-02f, -1.807559493e-02f, -3.278225666e-04f, +1.353359224e-02f, +2.089261998e-02f, +2.147375714e-02f, +1.692716106e-02f, +9.896191711e-03f, +2.980412374e-03f, -2.036715762e-03f, -4.496573452e-03f, -4.720884986e-03f, -3.584637213e-03f, -2.036565407e-03f, -7.547651732e-04f, -2.074618336e-05f, +2.137490244e-04f, +6.828332627e-06f, +2.256714189e-05f, +4.017029362e-05f, +4.927100079e-05f, +3.720853147e-05f, -4.892127566e-06f, -7.513380208e-05f, -1.564107476e-04f, -2.178744558e-04f, -2.237321840e-04f, -1.475736432e-04f, +1.281257153e-05f, +2.267849633e-04f, +4.338443485e-04f, +5.597904616e-04f, +5.420828385e-04f, +3.557311946e-04f, +2.932498800e-05f, -3.567003045e-04f, -6.913060890e-04f, -8.677457248e-04f, -8.202846407e-04f, -5.492227019e-04f, -1.242847781e-04f, +3.358446005e-04f, +7.011796411e-04f, +8.720925403e-04f, +8.102512456e-04f, +5.482053006e-04f, +1.750406785e-04f, -1.957017770e-04f, -4.635932335e-04f, -5.709959738e-04f, -5.154285844e-04f, -3.423141883e-04f, -1.230920268e-04f, +7.170553526e-05f, +1.943387355e-04f, +2.299959380e-04f, +1.938414640e-04f, +1.186468676e-04f, +3.941848368e-05f, -1.878758649e-05f, -4.623602683e-05f, -4.687515319e-05f, -3.223952423e-05f, -1.451514763e-05f, -1.727423627e-06f, /* 2, 9 (48) */ +1.821675668e-04f, +5.247579250e-04f, +1.025704926e-03f, +1.590173842e-03f, +2.032694731e-03f, +2.094275649e-03f, +1.491714959e-03f, -4.140783970e-06f, -2.474013961e-03f, -5.760772791e-03f, -9.410348052e-03f, -1.266668096e-02f, -1.453604246e-02f, -1.392210214e-02f, -9.816285739e-03f, -1.512130736e-03f, +1.119833444e-02f, +2.789039096e-02f, +4.747105427e-02f, +6.826163036e-02f, +8.819493912e-02f, +1.050995921e-01f, +1.170238595e-01f, +1.225408679e-01f, +1.209779955e-01f, +1.125265436e-01f, +9.821045169e-02f, +7.972012788e-02f, +5.914344613e-02f, +3.864499388e-02f, +2.015273933e-02f, +5.107008105e-03f, -5.688584742e-03f, -1.209699277e-02f, -1.456543129e-02f, -1.395880003e-02f, -1.134990838e-02f, -7.810919917e-03f, -4.244193273e-03f, -1.277280621e-03f, +7.699446236e-04f, +1.854067377e-03f, +2.132605620e-03f, +1.869427526e-03f, +1.345253343e-03f, +7.910486679e-04f, +3.529431046e-04f, +8.800605191e-05f, -7.823934576e-06f, -1.336147488e-05f, -1.734330956e-05f, -1.698114718e-05f, -9.540179638e-06f, +6.699744060e-06f, +3.143828816e-05f, +6.159482021e-05f, +9.108821130e-05f, +1.113674365e-04f, +1.127442933e-04f, +8.637392289e-05f, +2.652715154e-05f, -6.734317504e-05f, -1.892747545e-04f, -3.266445939e-04f, -4.614133903e-04f, -5.726862885e-04f, -6.401981006e-04f, -6.480806737e-04f, -5.881485482e-04f, -4.619852426e-04f, -2.813259176e-04f, -6.657102488e-05f, +1.563444340e-04f, +3.601494334e-04f, +5.206949552e-04f, +6.208066337e-04f, +6.527990109e-04f, +6.192075126e-04f, +5.316725104e-04f, +4.082894485e-04f, +2.700343538e-04f, +1.370223128e-04f, +2.533223037e-05f, -5.504931606e-05f, -1.008970351e-04f, -1.150766596e-04f, -1.048561792e-04f, -7.969070668e-05f, -4.901469194e-05f, -2.049228958e-05f, +9.959741817e-07f, +1.356208269e-05f, +1.783903691e-05f, +1.608400036e-05f, +1.115839327e-05f, +5.652835814e-06f, +1.542197209e-04f, -2.937361207e-04f, -1.295350476e-03f, -2.761501753e-03f, -4.223028416e-03f, -4.845432079e-03f, -3.660122519e-03f, +1.035195909e-05f, +6.069363132e-03f, +1.332393706e-02f, +1.953924435e-02f, +2.197586870e-02f, +1.832335626e-02f, +7.740633566e-03f, -8.406442968e-03f, -2.648501343e-02f, -4.138220531e-02f, -4.799425439e-02f, -4.296748580e-02f, -2.607592774e-02f, -6.824317540e-04f, +2.698145035e-02f, +4.956308140e-02f, +6.081939873e-02f, +5.758008886e-02f, +4.076097253e-02f, +1.507029105e-02f, -1.248824600e-02f, -3.479030404e-02f, -4.669622208e-02f, -4.639572788e-02f, -3.560421635e-02f, -1.864659090e-02f, -8.432511510e-04f, +1.319127805e-02f, +2.076952795e-02f, +2.154546268e-02f, +1.712149979e-02f, +1.012618765e-02f, +3.174253838e-03f, -1.918068894e-03f, -4.457154968e-03f, -4.739672573e-03f, -3.630873240e-03f, -2.083440561e-03f, -7.870046974e-04f, -3.526133099e-05f, +2.120216008e-04f, +6.436527589e-06f, +2.200596715e-05f, +3.968408078e-05f, +4.924329868e-05f, +3.801476720e-05f, -3.103899478e-06f, -7.264221312e-05f, -1.539847759e-04f, -2.166166192e-04f, -2.247013900e-04f, -1.512972455e-04f, +6.743349257e-06f, +2.198300360e-04f, +4.282163328e-04f, +5.577757256e-04f, +5.451873476e-04f, +3.639684837e-04f, +4.095577201e-05f, -3.448082387e-04f, -6.827583192e-04f, -8.654317815e-04f, -8.253410091e-04f, -5.605432950e-04f, -1.387878976e-04f, +3.222609165e-04f, +6.923216202e-04f, +8.702595184e-04f, +8.155546947e-04f, +5.586417028e-04f, +1.872604035e-04f, -1.852365655e-04f, -4.574898456e-04f, -5.702331310e-04f, -5.192750907e-04f, -3.488187759e-04f, -1.298993015e-04f, +6.654289323e-05f, +1.918318640e-04f, +2.301086035e-04f, +1.957540069e-04f, +1.212240206e-04f, +4.166895100e-05f, -1.742338539e-05f, -4.583162515e-05f, -4.715469618e-05f, -3.279972542e-05f, -1.502147253e-05f, -2.014981454e-06f, /* 2,10 (48) */ +1.743436322e-04f, +5.113964501e-04f, +1.008361617e-03f, +1.573192694e-03f, +2.023154551e-03f, +2.100975393e-03f, +1.523153247e-03f, +5.745403624e-05f, -2.382925750e-03f, -5.649405355e-03f, -9.297603759e-03f, -1.258030704e-02f, -1.450951531e-02f, -1.398944532e-02f, -1.000556049e-02f, -1.838775330e-03f, +1.073692105e-02f, +2.731770467e-02f, +4.683085617e-02f, +6.761354969e-02f, +8.760679058e-02f, +1.046376069e-01f, +1.167425336e-01f, +1.224742969e-01f, +1.211343400e-01f, +1.128866930e-01f, +9.873114664e-02f, +8.034093452e-02f, +5.979624514e-02f, +3.926420140e-02f, +2.068441184e-02f, +5.515297553e-03f, -5.418550388e-03f, -1.195997046e-02f, -1.454009906e-02f, -1.401384935e-02f, -1.145080542e-02f, -7.925996577e-03f, -4.349049452e-03f, -1.356971328e-03f, +7.209299316e-04f, +1.833575087e-03f, +2.133601595e-03f, +1.882989609e-03f, +1.363092380e-03f, +8.071326683e-04f, +3.641014979e-04f, +9.365888772e-05f, -7.651634979e-06f, -1.319862861e-05f, -1.726936079e-05f, -1.708690087e-05f, -9.901132222e-06f, +6.055495601e-06f, +3.055935993e-05f, +6.062352435e-05f, +9.025683137e-05f, +1.109692702e-04f, +1.130808466e-04f, +8.768629623e-05f, +2.892533735e-05f, -6.393634822e-05f, -1.851491307e-04f, -3.222867216e-04f, -4.574464721e-04f, -5.697733800e-04f, -6.389251117e-04f, -6.488418893e-04f, -5.910587572e-04f, -4.668384753e-04f, -2.876119077e-04f, -7.354870489e-05f, +1.495291793e-04f, +3.543240851e-04f, +5.165258583e-04f, +6.186956518e-04f, +6.528305431e-04f, +6.211542671e-04f, +5.350561130e-04f, +4.124809731e-04f, +2.743726128e-04f, +1.409257044e-04f, +2.838324597e-05f, -5.306025672e-05f, -9.997197899e-05f, -1.150487184e-04f, -1.054530775e-04f, -8.060657581e-05f, -4.997410040e-05f, -2.129469280e-05f, +4.569264820e-07f, +1.330337920e-05f, +1.781101677e-05f, +1.620180464e-05f, +1.133284398e-05f, +5.813561281e-06f, +1.606562484e-04f, -2.717301535e-04f, -1.255666395e-03f, -2.712258454e-03f, -4.185013649e-03f, -4.848535978e-03f, -3.732764732e-03f, -1.436328168e-04f, +5.852746513e-03f, +1.309923567e-02f, +1.938794711e-02f, +2.198261205e-02f, +1.854318630e-02f, +8.168849899e-03f, -7.848667242e-03f, -2.593982609e-02f, -4.101823683e-02f, -4.795329862e-02f, -4.331229404e-02f, -2.675868606e-02f, -1.547863536e-03f, +2.615610935e-02f, +4.900253810e-02f, +6.068061083e-02f, +5.790234977e-02f, +4.145329415e-02f, +1.594055057e-02f, -1.167269131e-02f, -3.423166234e-02f, -4.650896168e-02f, -4.658096445e-02f, -3.606170620e-02f, -1.921682403e-02f, -1.362526242e-03f, +1.284245928e-02f, +2.063962865e-02f, +2.161200557e-02f, +1.731333166e-02f, +1.035629625e-02f, +3.370007845e-03f, -1.796844873e-03f, -4.415486017e-03f, -4.757095958e-03f, -3.676704865e-03f, -2.130595257e-03f, -8.198044229e-04f, -5.028280352e-05f, +2.100066193e-04f, +6.051943364e-06f, +2.144732766e-05f, +3.919017456e-05f, +4.919501962e-05f, +3.879092743e-05f, -1.344722690e-06f, -7.016336728e-05f, -1.515410319e-04f, -2.153048015e-04f, -2.255890162e-04f, -1.549354012e-04f, +7.304878903e-07f, +2.128717986e-04f, +4.225104719e-04f, +5.556190707e-04f, +5.481226416e-04f, +3.720628316e-04f, +5.252255007e-05f, -3.328692552e-04f, -6.740555333e-04f, -8.628947198e-04f, -8.301719951e-04f, -5.717063486e-04f, -1.532515671e-04f, +3.085858884e-04f, +6.832708074e-04f, +8.681932613e-04f, +8.206558088e-04f, +5.689641709e-04f, +1.994801026e-04f, -1.746698386e-04f, -4.512259819e-04f, -5.693063191e-04f, -5.230026589e-04f, -3.552761018e-04f, -1.367304729e-04f, +6.130794585e-05f, +1.892374520e-04f, +2.301488361e-04f, +1.976271346e-04f, +1.237971315e-04f, +4.394072422e-05f, -1.602804428e-05f, -4.540012932e-05f, -4.741888520e-05f, -3.335695340e-05f, -1.553294649e-05f, -2.310087044e-06f, /* 2,11 (48) */ +1.666919973e-04f, +4.981978215e-04f, +9.910922559e-04f, +1.556105794e-03f, +2.013253419e-03f, +2.107030888e-03f, +1.553712607e-03f, +1.180775606e-04f, -2.292668918e-03f, -5.538436085e-03f, -9.184522912e-03f, -1.249262075e-02f, -1.448058997e-02f, -1.405338166e-02f, -1.019070962e-02f, -2.161062051e-03f, +1.027947458e-02f, +2.674793129e-02f, +4.619193106e-02f, +6.696470780e-02f, +8.701573182e-02f, +1.041707684e-01f, +1.164549217e-01f, +1.224007482e-01f, +1.212838692e-01f, +1.132410171e-01f, +9.924767250e-02f, +8.095963017e-02f, +6.044907568e-02f, +3.988535566e-02f, +2.121946795e-02f, +5.927778526e-03f, -5.144177775e-03f, -1.181904476e-02f, -1.451171581e-02f, -1.406690960e-02f, -1.155077740e-02f, -8.041045295e-03f, -4.454502530e-03f, -1.437577904e-03f, +6.709558312e-04f, +1.812280394e-03f, +2.134058521e-03f, +1.896292988e-03f, +1.380903397e-03f, +8.233344729e-04f, +3.754343418e-04f, +9.947244900e-05f, -7.480043122e-06f, -1.303439868e-05f, -1.719125943e-05f, -1.718573622e-05f, -1.025335508e-05f, +5.419824611e-06f, +2.968611429e-05f, +5.965201997e-05f, +8.941684389e-05f, +1.105528795e-04f, +1.133902888e-04f, +8.896566043e-05f, +3.128968150e-05f, -6.055776647e-05f, -1.810395187e-04f, -3.179271685e-04f, -4.534572180e-04f, -5.668179551e-04f, -6.375936455e-04f, -6.495361818e-04f, -5.939032386e-04f, -4.716372619e-04f, -2.938634059e-04f, -8.051745830e-05f, +1.426958208e-04f, +3.484565686e-04f, +5.122973493e-04f, +6.165173774e-04f, +6.527970441e-04f, +6.230473317e-04f, +5.384038478e-04f, +4.166573956e-04f, +2.787157577e-04f, +1.448500178e-04f, +3.146519645e-05f, -5.103696510e-05f, -9.901546503e-05f, -1.149964995e-04f, -1.060350840e-04f, -8.151694320e-05f, -5.093564998e-05f, -2.210411281e-05f, -9.102927193e-08f, +1.303639635e-05f, +1.777697317e-05f, +1.631644935e-05f, +1.150673014e-05f, +5.975489525e-06f, +1.667081918e-04f, -2.502828259e-04f, -1.216476221e-03f, -2.663063435e-03f, -4.146222722e-03f, -4.849880701e-03f, -3.802928100e-03f, -2.951738487e-04f, +5.637441712e-03f, +1.287364666e-02f, +1.923301171e-02f, +2.198334254e-02f, +1.875605810e-02f, +8.591360371e-03f, -7.293048172e-03f, -2.539170344e-02f, -4.064617400e-02f, -4.790077607e-02f, -4.364516329e-02f, -2.743274159e-02f, -2.410758255e-03f, +2.532593735e-02f, +4.843083175e-02f, +6.052735927e-02f, +5.821093566e-02f, +4.213656496e-02f, +1.680874383e-02f, -1.085203550e-02f, -3.366269817e-02f, -4.630948158e-02f, -4.675563429e-02f, -3.651293218e-02f, -1.978613035e-02f, -1.885528901e-03f, +1.248718318e-02f, +2.050289818e-02f, +2.167331351e-02f, +1.750256911e-02f, +1.058644509e-02f, +3.567634980e-03f, -1.673047742e-03f, -4.371545293e-03f, -4.773124002e-03f, -3.722104995e-03f, -2.178014142e-03f, -8.531613762e-04f, -6.581575001e-05f, +2.076965323e-04f, +5.674634421e-06f, +2.089145928e-05f, +3.868895900e-05f, +4.912655230e-05f, +3.953718479e-05f, +3.851523159e-07f, -6.769801371e-05f, -1.490806182e-04f, -2.139400871e-04f, -2.263956365e-04f, -1.584877552e-04f, -5.224593305e-06f, +2.059124541e-04f, +4.167290819e-04f, +5.533220657e-04f, +5.508888108e-04f, +3.800125628e-04f, +6.402221775e-05f, -3.208869794e-04f, -6.652006819e-04f, -8.601357579e-04f, -8.347765667e-04f, -5.827088224e-04f, -1.676716814e-04f, +2.948233659e-04f, +6.740295675e-04f, +8.658939429e-04f, +8.255526230e-04f, +5.791693600e-04f, +2.116962129e-04f, -1.640042448e-04f, -4.448026599e-04f, -5.682148300e-04f, -5.266093397e-04f, -3.616837955e-04f, -1.435835716e-04f, +5.600172260e-05f, +1.865554712e-04f, +2.301158125e-04f, +1.994597013e-04f, +1.263651979e-04f, +4.623323722e-05f, -1.460163653e-05f, -4.494125820e-05f, -4.766731014e-05f, -3.391086871e-05f, -1.604940348e-05f, -2.612743069e-06f, /* 2,12 (48) */ +1.592119541e-04f, +4.851634228e-04f, +9.739009964e-04f, +1.538920057e-03f, +2.003000064e-03f, +2.112450713e-03f, +1.583398721e-03f, +1.777295806e-04f, -2.203252074e-03f, -5.427883205e-03f, -9.071132624e-03f, -1.240365508e-02f, -1.444930029e-02f, -1.411393943e-02f, -1.037174914e-02f, -2.478989220e-03f, +9.826017361e-03f, +2.618111333e-02f, +4.555433741e-02f, +6.631517162e-02f, +8.642182858e-02f, +1.036991311e-01f, +1.161610583e-01f, +1.223202308e-01f, +1.214265650e-01f, +1.135894736e-01f, +9.975996985e-02f, +8.157614755e-02f, +6.110187273e-02f, +4.050840299e-02f, +2.175787180e-02f, +6.344435922e-03f, -4.865462017e-03f, -1.167419474e-02f, -1.448025062e-02f, -1.411794657e-02f, -1.164979286e-02f, -8.156041794e-03f, -4.560537614e-03f, -1.519094847e-03f, +6.200201812e-04f, +1.790176281e-03f, +2.133967492e-03f, +1.909329384e-03f, +1.398680370e-03f, +8.396509222e-04f, +3.869410720e-04f, +1.054479385e-04f, -7.309209040e-06f, -1.286886331e-05f, -1.710909637e-05f, -1.727773059e-05f, -1.059688009e-05f, +4.792774367e-06f, +2.881868748e-05f, +5.868053377e-05f, +8.856853840e-05f, +1.101185653e-04f, +1.136728644e-04f, +9.021213267e-05f, +3.362011720e-05f, -5.720770752e-05f, -1.769463931e-04f, -3.135665484e-04f, -4.494462858e-04f, -5.638205997e-04f, -6.362041019e-04f, -6.501636765e-04f, -5.966817999e-04f, -4.763811065e-04f, -3.000796842e-04f, -8.747644082e-05f, +1.358451806e-04f, +3.425475498e-04f, +5.080098345e-04f, +6.142719023e-04f, +6.526982959e-04f, +6.248862372e-04f, +5.417150934e-04f, +4.208180602e-04f, +2.830632097e-04f, +1.487948357e-04f, +3.457787058e-05f, -4.897944593e-05f, -9.802732920e-05f, -1.149197331e-04f, -1.066018947e-04f, -8.242153441e-05f, -5.189914050e-05f, -2.292044324e-05f, -6.478759438e-07f, +1.276108460e-05f, +1.773682123e-05f, +1.642784518e-05f, +1.167998123e-05f, +6.138580599e-06f, +1.723828262e-04f, -2.293913666e-04f, -1.177787262e-03f, -2.613936882e-03f, -4.106685537e-03f, -4.849495549e-03f, -3.870626113e-03f, -4.442544670e-04f, +5.423501625e-03f, +1.264725102e-02f, +1.907452395e-02f, +2.197811794e-02f, +1.896197055e-02f, +9.008089453e-03f, -6.739726106e-03f, -2.484081463e-02f, -4.026616143e-02f, -4.783675385e-02f, -4.396605027e-02f, -2.809794228e-02f, -3.270894013e-03f, +2.449116078e-02f, +4.784812293e-02f, +6.035968758e-02f, +5.850575903e-02f, +4.281059452e-02f, +1.767463777e-02f, -1.002648288e-02f, -3.308352881e-02f, -4.609778536e-02f, -4.691963853e-02f, -3.695773484e-02f, -2.035434518e-02f, -2.412138240e-03f, +1.212549938e-02f, +2.035931460e-02f, +2.172931524e-02f, +1.768912458e-02f, +1.081656090e-02f, +3.767094681e-03f, -1.546682544e-03f, -4.325312056e-03f, -4.787725639e-03f, -3.767046253e-03f, -2.225681452e-03f, -8.870722450e-04f, -8.186515349e-05f, +2.050837892e-04f, +5.304650110e-06f, +2.033859211e-05f, +3.818081515e-05f, +4.903828840e-05f, +4.025372215e-05f, +2.085490399e-06f, -6.524688689e-05f, -1.466046309e-04f, -2.125235683e-04f, -2.271218480e-04f, -1.619539854e-04f, -1.112050636e-05f, +1.989541894e-04f, +4.108744881e-04f, +5.508863156e-04f, +5.534859988e-04f, +3.878160556e-04f, +7.545170401e-05f, -3.088650378e-04f, -6.561967548e-04f, -8.571561795e-04f, -8.391537625e-04f, -5.935477276e-04f, -1.820441491e-04f, +2.809772275e-04f, +6.646003260e-04f, +8.633618090e-04f, +8.302432309e-04f, +5.892539518e-04f, +2.239051597e-04f, -1.532424745e-04f, -4.382209531e-04f, -5.669580047e-04f, -5.300932113e-04f, -3.680394865e-04f, -1.504566055e-04f, +5.062528636e-05f, +1.837859237e-04f, +2.300087278e-04f, +2.012505635e-04f, +1.289272071e-04f, +4.854590819e-05f, -1.314424960e-05f, -4.445473845e-05f, -4.789956147e-05f, -3.446112759e-05f, -1.657067159e-05f, -2.922947826e-06f, /* 2,13 (48) */ +1.519027451e-04f, +4.722945595e-04f, +9.567919001e-04f, +1.521642327e-03f, +1.992403184e-03f, +2.117243487e-03f, +1.612217409e-03f, +2.364101143e-04f, -2.114683536e-03f, -5.317764640e-03f, -8.957459759e-03f, -1.231344295e-02f, -1.441568017e-02f, -1.417114714e-02f, -1.054869554e-02f, -2.792555768e-03f, +9.376571075e-03f, +2.561729273e-02f, +4.491813331e-02f, +6.566500794e-02f, +8.582514678e-02f, +1.032227500e-01f, +1.158609786e-01f, +1.222327543e-01f, +1.215624102e-01f, +1.139320212e-01f, +1.002679797e-01f, +8.219041945e-02f, +6.175457102e-02f, +4.113328923e-02f, +2.229958689e-02f, +6.765253982e-03f, -4.582398808e-03f, -1.152539990e-02f, -1.444567275e-02f, -1.416692601e-02f, -1.174782019e-02f, -8.270961528e-03f, -4.667139508e-03f, -1.601516381e-03f, +5.681210407e-04f, +1.767255838e-03f, +2.133319616e-03f, +1.922090469e-03f, +1.416417191e-03f, +8.560787674e-04f, +3.986210532e-04f, +1.115865191e-04f, -7.139181769e-06f, -1.270210001e-05f, -1.702296245e-05f, -1.736296222e-05f, -1.093174100e-05f, +4.174385444e-06f, +2.795721277e-05f, +5.770928988e-05f, +8.771220318e-05f, +1.096666292e-04f, +1.139288206e-04f, +9.142583506e-05f, +3.591658402e-05f, -5.388644247e-05f, -1.728702230e-04f, -3.092054717e-04f, -4.454143335e-04f, -5.607819037e-04f, -6.347568882e-04f, -6.507245079e-04f, -5.993942585e-04f, -4.810695220e-04f, -3.062600203e-04f, -9.442480972e-05f, +1.289780839e-04f, +3.365977016e-04f, +5.036637291e-04f, +6.119593288e-04f, +6.525340894e-04f, +6.266705210e-04f, +5.449892318e-04f, +4.249623105e-04f, +2.874143859e-04f, +1.527597348e-04f, +3.772105044e-05f, -4.688770998e-05f, -9.700741192e-05f, -1.148181517e-04f, -1.071532054e-04f, -8.332007332e-05f, -5.286436904e-05f, -2.374357475e-05f, -1.213593878e-06f, +1.247739601e-05f, +1.769047668e-05f, +1.653590257e-05f, +1.185252593e-05f, +6.302793544e-06f, +1.776874763e-04f, -2.090527745e-04f, -1.139606446e-03f, -2.564898594e-03f, -4.066431815e-03f, -4.847410058e-03f, -3.935873000e-03f, -5.908590979e-04f, +5.210978056e-03f, +1.242012917e-02f, +1.891256997e-02f, +2.196699744e-02f, +1.916092474e-02f, +9.418963941e-03f, -6.188839790e-03f, -2.428732863e-02f, -3.987834538e-02f, -4.776130215e-02f, -4.427491531e-02f, -2.875413903e-02f, -4.128050193e-03f, +2.365200702e-02f, +4.725457520e-02f, +6.017764343e-02f, +5.878673626e-02f, +4.347519485e-02f, +1.853799958e-02f, -9.196239645e-03f, -3.249427486e-02f, -4.587388020e-02f, -4.707288101e-02f, -3.739595579e-02f, -2.092130319e-02f, -2.942231452e-03f, +1.175745989e-02f, +2.020885800e-02f, +2.177994052e-02f, +1.787291050e-02f, +1.104656963e-02f, +3.968345245e-03f, -1.417755337e-03f, -4.276766148e-03f, -4.800869888e-03f, -3.811500991e-03f, -2.273581014e-03f, -9.215333726e-04f, -9.843582508e-05f, +2.021608414e-04f, +4.942034718e-06f, +1.978895051e-05f, +3.766612089e-05f, +4.893062236e-05f, +4.094073241e-05f, +3.756071670e-06f, -6.281070650e-05f, -1.441141591e-04f, -2.110563443e-04f, -2.277682708e-04f, -1.653338023e-04f, -1.695589485e-05f, +1.919991747e-04f, +4.049490240e-04f, +5.483134604e-04f, +5.559144026e-04f, +3.954717418e-04f, +8.680797206e-05f, -2.968070569e-04f, -6.470467794e-04f, -8.539573337e-04f, -8.433026921e-04f, -6.042201278e-04f, -1.963648945e-04f, +2.670513784e-04f, +6.549855683e-04f, +8.605971771e-04f, +8.347257851e-04f, +5.992146559e-04f, +2.361033579e-04f, -1.423872601e-04f, -4.314819906e-04f, -5.655352339e-04f, -5.334523797e-04f, -3.743408051e-04f, -1.573475604e-04f, +4.517973332e-05f, +1.809288428e-04f, +2.298267956e-04f, +2.029985807e-04f, +1.314821367e-04f, +5.087813966e-05f, -1.165598518e-05f, -4.394030475e-05f, -4.811523052e-05f, -3.500738196e-05f, -1.709657307e-05f, -3.240695165e-06f, /* 2,14 (48) */ +1.447635633e-04f, +4.595924595e-04f, +9.397689376e-04f, +1.504279365e-03f, +1.981471443e-03f, +2.121417873e-03f, +1.640174622e-03f, +2.941194042e-04f, -2.026971333e-03f, -5.208098011e-03f, -8.843530939e-03f, -1.222201712e-02f, -1.437976359e-02f, -1.422503358e-02f, -1.072156576e-02f, -3.101761240e-03f, +8.931156742e-03f, +2.505651083e-02f, +4.428337642e-02f, +6.501428343e-02f, +8.522575252e-02f, +1.027416805e-01f, +1.155547185e-01f, +1.221383295e-01f, +1.216913882e-01f, +1.142686189e-01f, +1.007716434e-01f, +8.280237878e-02f, +6.240710511e-02f, +4.175995975e-02f, +2.284457612e-02f, +7.190216292e-03f, -4.294984422e-03f, -1.137264017e-02f, -1.440795170e-02f, -1.421381372e-02f, -1.184482760e-02f, -8.385779679e-03f, -4.774292714e-03f, -1.684836455e-03f, +5.152566717e-04f, +1.743512263e-03f, +2.132106022e-03f, +1.934567865e-03f, +1.434107668e-03f, +8.726146700e-04f, +4.104735791e-04f, +1.178893127e-04f, -6.970009343e-06f, -1.253418557e-05f, -1.693294841e-05f, -1.744151023e-05f, -1.125797349e-05f, +3.564695732e-06f, +2.710182039e-05f, +5.673850988e-05f, +8.684812514e-05f, +1.091973731e-04f, +1.141584072e-04f, +9.260689457e-05f, +3.817902783e-05f, -5.059423580e-05f, -1.688114720e-04f, -3.048445460e-04f, -4.413620194e-04f, -5.577024609e-04f, -6.332524186e-04f, -6.512188202e-04f, -6.020404421e-04f, -4.857020300e-04f, -3.124036978e-04f, -1.013617240e-04f, +1.220953584e-04f, +3.306077033e-04f, +4.992594577e-04f, +6.095797688e-04f, +6.523042246e-04f, +6.283997270e-04f, +5.482256479e-04f, +4.290894893e-04f, +2.917686997e-04f, +1.567442859e-04f, +4.089451147e-05f, -4.476177412e-05f, -9.595555809e-05f, -1.146914900e-04f, -1.076887123e-04f, -8.421228209e-05f, -5.383112996e-05f, -2.457339501e-05f, -1.788160879e-06f, +1.218528431e-05f, +1.763785591e-05f, +1.664053171e-05f, +1.202429206e-05f, +6.468086385e-06f, +1.826295111e-04f, -1.892638240e-04f, -1.101940326e-03f, -2.515967971e-03f, -4.025491083e-03f, -4.843653987e-03f, -3.998683707e-03f, -7.349732570e-04f, +4.999921712e-03f, +1.219236090e-02f, +1.874723616e-02f, +2.195004154e-02f, +1.935292392e-02f, +9.823912965e-03f, -5.640526330e-03f, -2.373141423e-02f, -3.948287364e-02f, -4.767449418e-02f, -4.457172237e-02f, -2.940118581e-02f, -4.982007526e-03f, +2.280870433e-02f, +4.665035507e-02f, +5.998127854e-02f, +5.905378763e-02f, +4.413018042e-02f, +1.939859676e-02f, -8.361513860e-03f, -3.189506020e-02f, -4.563777685e-02f, -4.721526827e-02f, -3.782743778e-02f, -2.148683842e-02f, -3.475683831e-03f, +1.138311909e-02f, +2.005151044e-02f, +2.182512026e-02f, +1.805383935e-02f, +1.127639642e-02f, +4.171343825e-03f, -1.286273200e-03f, -4.225888008e-03f, -4.812525874e-03f, -3.855441296e-03f, -2.321696244e-03f, -9.565407545e-04f, -1.155323981e-04f, +1.989201462e-04f, +4.586827532e-06f, +1.924275306e-05f, +3.714525083e-05f, +4.880395116e-05f, +4.159841831e-05f, +5.396691400e-06f, -6.039017732e-05f, -1.416102850e-04f, -2.095395216e-04f, -2.283355473e-04f, -1.686269495e-04f, -2.272943417e-05f, +1.850495629e-04f, +3.989550309e-04f, +5.456051746e-04f, +5.581742720e-04f, +4.029781075e-04f, +9.808802026e-05f, -2.847166625e-04f, -6.377538201e-04f, -8.505406338e-04f, -8.472225364e-04f, -6.147231401e-04f, -2.106298584e-04f, +2.530497498e-04f, +6.451878390e-04f, +8.576004368e-04f, +8.389984984e-04f, +6.090482106e-04f, +2.482872132e-04f, -1.314413747e-04f, -4.245869572e-04f, -5.639459584e-04f, -5.366849801e-04f, -3.805853830e-04f, -1.642544006e-04f, +3.966619283e-05f, +1.779842931e-04f, +2.295692488e-04f, +2.047026160e-04f, +1.340289548e-04f, +5.322931859e-05f, -1.013695931e-05f, -4.339770006e-05f, -4.831390965e-05f, -3.554927965e-05f, -1.762692433e-05f, -3.565974415e-06f, /* 2,15 (48) */ +1.377935540e-04f, +4.470582739e-04f, +9.228359892e-04f, +1.486837854e-03f, +1.970213469e-03f, +2.124982568e-03f, +1.667276442e-03f, +3.508579141e-04f, -1.940123208e-03f, -5.098900637e-03f, -8.729372531e-03f, -1.212941022e-02f, -1.434158456e-02f, -1.427562782e-02f, -1.089037723e-02f, -3.406605786e-03f, +8.489794722e-03f, +2.449880837e-02f, +4.365012400e-02f, +6.436306461e-02f, +8.462371208e-02f, +1.022559785e-01f, +1.152423148e-01f, +1.220369678e-01f, +1.218134836e-01f, +1.145992266e-01f, +1.012709029e-01f, +8.341195855e-02f, +6.305940934e-02f, +4.238835948e-02f, +2.339280177e-02f, +7.619305782e-03f, -4.003215722e-03f, -1.121589588e-02f, -1.436705718e-02f, -1.425857550e-02f, -1.194078316e-02f, -8.500471169e-03f, -4.881981426e-03f, -1.769048737e-03f, +4.614255417e-04f, +1.718938868e-03f, +2.130317861e-03f, +1.946753149e-03f, +1.451745524e-03f, +8.892552017e-04f, +4.224978712e-04f, +1.243573991e-04f, -6.801738791e-06f, -1.236519602e-05f, -1.683914494e-05f, -1.751345456e-05f, -1.157561503e-05f, +2.963740453e-06f, +2.625263763e-05f, +5.576841276e-05f, +8.597658981e-05f, +1.087110996e-04f, +1.143618770e-04f, +9.375544306e-05f, +4.040740079e-05f, -4.733134538e-05f, -1.647705983e-04f, -3.004843754e-04f, -4.372900018e-04f, -5.545828692e-04f, -6.316911150e-04f, -6.516467669e-04f, -6.046201882e-04f, -4.902781610e-04f, -3.185100062e-04f, -1.082863446e-04f, +1.151978344e-04f, +3.245782408e-04f, +4.947974541e-04f, +6.071333445e-04f, +6.520085110e-04f, +6.300734059e-04f, +5.514237298e-04f, +4.331989390e-04f, +2.961255608e-04f, +1.607480540e-04f, +4.409802242e-05f, -4.260166134e-05f, -9.487161712e-05f, -1.145394853e-04f, -1.082081116e-04f, -8.509788127e-05f, -5.479921488e-05f, -2.540978874e-05f, -2.371552186e-06f, +1.188470494e-05f, +1.757887595e-05f, +1.674164258e-05f, +1.219520668e-05f, +6.634416134e-06f, +1.872163386e-04f, -1.700210709e-04f, -1.064795075e-03f, -2.467164020e-03f, -3.983892664e-03f, -4.838257295e-03f, -4.059073884e-03f, -8.765835420e-04f, +4.790382190e-03f, +1.196402535e-02f, +1.857860921e-02f, +2.192731211e-02f, +1.953797348e-02f, +1.022286800e-02f, -5.094921155e-03f, -2.317323996e-02f, -3.907989553e-02f, -4.757640616e-02f, -4.485643903e-02f, -3.003893963e-02f, -5.832548160e-03f, +2.196148179e-02f, +4.603563193e-02f, +5.977064868e-02f, +5.930683738e-02f, +4.477536826e-02f, +2.025619720e-02f, -7.522515361e-03f, -3.128601199e-02f, -4.538948963e-02f, -4.734670964e-02f, -3.825202474e-02f, -2.205078438e-02f, -4.012368812e-03f, +1.100253371e-02f, +1.988725604e-02f, +2.186478645e-02f, +1.823182364e-02f, +1.150596567e-02f, +4.376046441e-03f, -1.152244245e-03f, -4.172658690e-03f, -4.822662833e-03f, -3.898838996e-03f, -2.370010154e-03f, -9.920900342e-04f, -1.331593225e-04f, +1.953541718e-04f, +4.239062902e-06f, +1.870021254e-05f, +3.661857613e-05f, +4.865867407e-05f, +4.222699221e-05f, +7.007159918e-06f, -5.798598908e-05f, -1.390940832e-04f, -2.079742128e-04f, -2.288243418e-04f, -1.718332028e-04f, -2.843983174e-05f, +1.781074890e-04f, +3.928948564e-04f, +5.427631665e-04f, +5.602659095e-04f, +4.103336929e-04f, +1.092888830e-04f, -2.725974779e-04f, -6.283209769e-04f, -8.469075570e-04f, -8.509125476e-04f, -6.250539358e-04f, -2.248349998e-04f, +2.389762973e-04f, +6.352097412e-04f, +8.543720493e-04f, +8.430596442e-04f, +6.187513844e-04f, +2.604531230e-04f, -1.204076315e-04f, -4.175370929e-04f, -5.621896695e-04f, -5.397891773e-04f, -3.867708543e-04f, -1.711750692e-04f, +3.408582724e-05f, +1.749523706e-04f, +2.292353400e-04f, +2.063615363e-04f, +1.365666202e-04f, +5.559881639e-05f, -8.587302511e-06f, -4.282667583e-05f, -4.849519248e-05f, -3.608646442e-05f, -1.816153592e-05f, -3.898770305e-06f, /* 2,16 (48) */ +1.309918152e-04f, +4.346930779e-04f, +9.059968443e-04f, +1.469324400e-03f, +1.958637854e-03f, +2.127946309e-03f, +1.693529080e-03f, +4.066263268e-04f, -1.854146618e-03f, -4.990189538e-03f, -8.615010654e-03f, -1.203565478e-02f, -1.430117716e-02f, -1.432295916e-02f, -1.105514783e-02f, -3.707090161e-03f, +8.052504721e-03f, +2.394422550e-02f, +4.301843289e-02f, +6.371141785e-02f, +8.401909189e-02f, +1.017657003e-01f, +1.149238048e-01f, +1.219286814e-01f, +1.219286814e-01f, +1.149238048e-01f, +1.017657003e-01f, +8.401909189e-02f, +6.371141785e-02f, +4.301843289e-02f, +2.394422550e-02f, +8.052504721e-03f, -3.707090161e-03f, -1.105514783e-02f, -1.432295916e-02f, -1.430117716e-02f, -1.203565478e-02f, -8.615010654e-03f, -4.990189538e-03f, -1.854146618e-03f, +4.066263268e-04f, +1.693529080e-03f, +2.127946309e-03f, +1.958637854e-03f, +1.469324400e-03f, +9.059968443e-04f, +4.346930779e-04f, +1.309918152e-04f, -6.634416134e-06f, -1.219520668e-05f, -1.674164258e-05f, -1.757887595e-05f, -1.188470494e-05f, +2.371552186e-06f, +2.540978874e-05f, +5.479921488e-05f, +8.509788127e-05f, +1.082081116e-04f, +1.145394853e-04f, +9.487161712e-05f, +4.260166134e-05f, -4.409802242e-05f, -1.607480540e-04f, -2.961255608e-04f, -4.331989390e-04f, -5.514237298e-04f, -6.300734059e-04f, -6.520085110e-04f, -6.071333445e-04f, -4.947974541e-04f, -3.245782408e-04f, -1.151978344e-04f, +1.082863446e-04f, +3.185100062e-04f, +4.902781610e-04f, +6.046201882e-04f, +6.516467669e-04f, +6.316911150e-04f, +5.545828692e-04f, +4.372900018e-04f, +3.004843754e-04f, +1.647705983e-04f, +4.733134538e-05f, -4.040740079e-05f, -9.375544306e-05f, -1.143618770e-04f, -1.087110996e-04f, -8.597658981e-05f, -5.576841276e-05f, -2.625263763e-05f, -2.963740453e-06f, +1.157561503e-05f, +1.751345456e-05f, +1.683914494e-05f, +1.236519602e-05f, +6.801738791e-06f, +1.914554015e-04f, -1.513208584e-04f, -1.028176499e-03f, -2.418505346e-03f, -3.941665672e-03f, -4.831250135e-03f, -4.117059873e-03f, -1.015677625e-03f, +4.582407978e-03f, +1.173520101e-02f, +1.840677601e-02f, +2.189887228e-02f, +1.971608097e-02f, +1.061576285e-02f, -4.552157989e-03f, -2.261297405e-02f, -3.866956183e-02f, -4.746711727e-02f, -4.512903651e-02f, -3.066726061e-02f, -6.679455717e-03f, +2.111056924e-02f, +4.541057800e-02f, +5.954581368e-02f, +5.954581368e-02f, +4.541057800e-02f, +2.111056924e-02f, -6.679455717e-03f, -3.066726061e-02f, -4.512903651e-02f, -4.746711727e-02f, -3.866956183e-02f, -2.261297405e-02f, -4.552157989e-03f, +1.061576285e-02f, +1.971608097e-02f, +2.189887228e-02f, +1.840677601e-02f, +1.173520101e-02f, +4.582407978e-03f, -1.015677625e-03f, -4.117059873e-03f, -4.831250135e-03f, -3.941665672e-03f, -2.418505346e-03f, -1.028176499e-03f, -1.513208584e-04f, +1.914554015e-04f, +3.898770305e-06f, +1.816153592e-05f, +3.608646442e-05f, +4.849519248e-05f, +4.282667583e-05f, +8.587302511e-06f, -5.559881639e-05f, -1.365666202e-04f, -2.063615363e-04f, -2.292353400e-04f, -1.749523706e-04f, -3.408582724e-05f, +1.711750692e-04f, +3.867708543e-04f, +5.397891773e-04f, +5.621896695e-04f, +4.175370929e-04f, +1.204076315e-04f, -2.604531230e-04f, -6.187513844e-04f, -8.430596442e-04f, -8.543720493e-04f, -6.352097412e-04f, -2.389762973e-04f, +2.248349998e-04f, +6.250539358e-04f, +8.509125476e-04f, +8.469075570e-04f, +6.283209769e-04f, +2.725974779e-04f, -1.092888830e-04f, -4.103336929e-04f, -5.602659095e-04f, -5.427631665e-04f, -3.928948564e-04f, -1.781074890e-04f, +2.843983174e-05f, +1.718332028e-04f, +2.288243418e-04f, +2.079742128e-04f, +1.390940832e-04f, +5.798598908e-05f, -7.007159918e-06f, -4.222699221e-05f, -4.865867407e-05f, -3.661857613e-05f, -1.870021254e-05f, -4.239062902e-06f, /* 2,17 (48) */ +1.243573991e-04f, +4.224978712e-04f, +8.892552017e-04f, +1.451745524e-03f, +1.946753149e-03f, +2.130317861e-03f, +1.718938868e-03f, +4.614255417e-04f, -1.769048737e-03f, -4.881981426e-03f, -8.500471169e-03f, -1.194078316e-02f, -1.425857550e-02f, -1.436705718e-02f, -1.121589588e-02f, -4.003215722e-03f, +7.619305782e-03f, +2.339280177e-02f, +4.238835948e-02f, +6.305940934e-02f, +8.341195855e-02f, +1.012709029e-01f, +1.145992266e-01f, +1.218134836e-01f, +1.220369678e-01f, +1.152423148e-01f, +1.022559785e-01f, +8.462371208e-02f, +6.436306461e-02f, +4.365012400e-02f, +2.449880837e-02f, +8.489794722e-03f, -3.406605786e-03f, -1.089037723e-02f, -1.427562782e-02f, -1.434158456e-02f, -1.212941022e-02f, -8.729372531e-03f, -5.098900637e-03f, -1.940123208e-03f, +3.508579141e-04f, +1.667276442e-03f, +2.124982568e-03f, +1.970213469e-03f, +1.486837854e-03f, +9.228359892e-04f, +4.470582739e-04f, +1.377935540e-04f, -6.468086385e-06f, -1.202429206e-05f, -1.664053171e-05f, -1.763785591e-05f, -1.218528431e-05f, +1.788160879e-06f, +2.457339501e-05f, +5.383112996e-05f, +8.421228209e-05f, +1.076887123e-04f, +1.146914900e-04f, +9.595555809e-05f, +4.476177412e-05f, -4.089451147e-05f, -1.567442859e-04f, -2.917686997e-04f, -4.290894893e-04f, -5.482256479e-04f, -6.283997270e-04f, -6.523042246e-04f, -6.095797688e-04f, -4.992594577e-04f, -3.306077033e-04f, -1.220953584e-04f, +1.013617240e-04f, +3.124036978e-04f, +4.857020300e-04f, +6.020404421e-04f, +6.512188202e-04f, +6.332524186e-04f, +5.577024609e-04f, +4.413620194e-04f, +3.048445460e-04f, +1.688114720e-04f, +5.059423580e-05f, -3.817902783e-05f, -9.260689457e-05f, -1.141584072e-04f, -1.091973731e-04f, -8.684812514e-05f, -5.673850988e-05f, -2.710182039e-05f, -3.564695732e-06f, +1.125797349e-05f, +1.744151023e-05f, +1.693294841e-05f, +1.253418557e-05f, +6.970009343e-06f, +1.953541718e-04f, -1.331593225e-04f, -9.920900342e-04f, -2.370010154e-03f, -3.898838996e-03f, -4.822662833e-03f, -4.172658690e-03f, -1.152244245e-03f, +4.376046441e-03f, +1.150596567e-02f, +1.823182364e-02f, +2.186478645e-02f, +1.988725604e-02f, +1.100253371e-02f, -4.012368812e-03f, -2.205078438e-02f, -3.825202474e-02f, -4.734670964e-02f, -4.538948963e-02f, -3.128601199e-02f, -7.522515361e-03f, +2.025619720e-02f, +4.477536826e-02f, +5.930683738e-02f, +5.977064868e-02f, +4.603563193e-02f, +2.196148179e-02f, -5.832548160e-03f, -3.003893963e-02f, -4.485643903e-02f, -4.757640616e-02f, -3.907989553e-02f, -2.317323996e-02f, -5.094921155e-03f, +1.022286800e-02f, +1.953797348e-02f, +2.192731211e-02f, +1.857860921e-02f, +1.196402535e-02f, +4.790382190e-03f, -8.765835420e-04f, -4.059073884e-03f, -4.838257295e-03f, -3.983892664e-03f, -2.467164020e-03f, -1.064795075e-03f, -1.700210709e-04f, +1.872163386e-04f, +3.565974415e-06f, +1.762692433e-05f, +3.554927965e-05f, +4.831390965e-05f, +4.339770006e-05f, +1.013695931e-05f, -5.322931859e-05f, -1.340289548e-04f, -2.047026160e-04f, -2.295692488e-04f, -1.779842931e-04f, -3.966619283e-05f, +1.642544006e-04f, +3.805853830e-04f, +5.366849801e-04f, +5.639459584e-04f, +4.245869572e-04f, +1.314413747e-04f, -2.482872132e-04f, -6.090482106e-04f, -8.389984984e-04f, -8.576004368e-04f, -6.451878390e-04f, -2.530497498e-04f, +2.106298584e-04f, +6.147231401e-04f, +8.472225364e-04f, +8.505406338e-04f, +6.377538201e-04f, +2.847166625e-04f, -9.808802026e-05f, -4.029781075e-04f, -5.581742720e-04f, -5.456051746e-04f, -3.989550309e-04f, -1.850495629e-04f, +2.272943417e-05f, +1.686269495e-04f, +2.283355473e-04f, +2.095395216e-04f, +1.416102850e-04f, +6.039017732e-05f, -5.396691400e-06f, -4.159841831e-05f, -4.880395116e-05f, -3.714525083e-05f, -1.924275306e-05f, -4.586827532e-06f, /* 2,18 (48) */ +1.178893127e-04f, +4.104735791e-04f, +8.726146700e-04f, +1.434107668e-03f, +1.934567865e-03f, +2.132106022e-03f, +1.743512263e-03f, +5.152566717e-04f, -1.684836455e-03f, -4.774292714e-03f, -8.385779679e-03f, -1.184482760e-02f, -1.421381372e-02f, -1.440795170e-02f, -1.137264017e-02f, -4.294984422e-03f, +7.190216292e-03f, +2.284457612e-02f, +4.175995975e-02f, +6.240710511e-02f, +8.280237878e-02f, +1.007716434e-01f, +1.142686189e-01f, +1.216913882e-01f, +1.221383295e-01f, +1.155547185e-01f, +1.027416805e-01f, +8.522575252e-02f, +6.501428343e-02f, +4.428337642e-02f, +2.505651083e-02f, +8.931156742e-03f, -3.101761240e-03f, -1.072156576e-02f, -1.422503358e-02f, -1.437976359e-02f, -1.222201712e-02f, -8.843530939e-03f, -5.208098011e-03f, -2.026971333e-03f, +2.941194042e-04f, +1.640174622e-03f, +2.121417873e-03f, +1.981471443e-03f, +1.504279365e-03f, +9.397689376e-04f, +4.595924595e-04f, +1.447635633e-04f, -6.302793544e-06f, -1.185252593e-05f, -1.653590257e-05f, -1.769047668e-05f, -1.247739601e-05f, +1.213593878e-06f, +2.374357475e-05f, +5.286436904e-05f, +8.332007332e-05f, +1.071532054e-04f, +1.148181517e-04f, +9.700741192e-05f, +4.688770998e-05f, -3.772105044e-05f, -1.527597348e-04f, -2.874143859e-04f, -4.249623105e-04f, -5.449892318e-04f, -6.266705210e-04f, -6.525340894e-04f, -6.119593288e-04f, -5.036637291e-04f, -3.365977016e-04f, -1.289780839e-04f, +9.442480972e-05f, +3.062600203e-04f, +4.810695220e-04f, +5.993942585e-04f, +6.507245079e-04f, +6.347568882e-04f, +5.607819037e-04f, +4.454143335e-04f, +3.092054717e-04f, +1.728702230e-04f, +5.388644247e-05f, -3.591658402e-05f, -9.142583506e-05f, -1.139288206e-04f, -1.096666292e-04f, -8.771220318e-05f, -5.770928988e-05f, -2.795721277e-05f, -4.174385444e-06f, +1.093174100e-05f, +1.736296222e-05f, +1.702296245e-05f, +1.270210001e-05f, +7.139181769e-06f, +1.989201462e-04f, -1.155323981e-04f, -9.565407545e-04f, -2.321696244e-03f, -3.855441296e-03f, -4.812525874e-03f, -4.225888008e-03f, -1.286273200e-03f, +4.171343825e-03f, +1.127639642e-02f, +1.805383935e-02f, +2.182512026e-02f, +2.005151044e-02f, +1.138311909e-02f, -3.475683831e-03f, -2.148683842e-02f, -3.782743778e-02f, -4.721526827e-02f, -4.563777685e-02f, -3.189506020e-02f, -8.361513860e-03f, +1.939859676e-02f, +4.413018042e-02f, +5.905378763e-02f, +5.998127854e-02f, +4.665035507e-02f, +2.280870433e-02f, -4.982007526e-03f, -2.940118581e-02f, -4.457172237e-02f, -4.767449418e-02f, -3.948287364e-02f, -2.373141423e-02f, -5.640526330e-03f, +9.823912965e-03f, +1.935292392e-02f, +2.195004154e-02f, +1.874723616e-02f, +1.219236090e-02f, +4.999921712e-03f, -7.349732570e-04f, -3.998683707e-03f, -4.843653987e-03f, -4.025491083e-03f, -2.515967971e-03f, -1.101940326e-03f, -1.892638240e-04f, +1.826295111e-04f, +3.240695165e-06f, +1.709657307e-05f, +3.500738196e-05f, +4.811523052e-05f, +4.394030475e-05f, +1.165598518e-05f, -5.087813966e-05f, -1.314821367e-04f, -2.029985807e-04f, -2.298267956e-04f, -1.809288428e-04f, -4.517973332e-05f, +1.573475604e-04f, +3.743408051e-04f, +5.334523797e-04f, +5.655352339e-04f, +4.314819906e-04f, +1.423872601e-04f, -2.361033579e-04f, -5.992146559e-04f, -8.347257851e-04f, -8.605971771e-04f, -6.549855683e-04f, -2.670513784e-04f, +1.963648945e-04f, +6.042201278e-04f, +8.433026921e-04f, +8.539573337e-04f, +6.470467794e-04f, +2.968070569e-04f, -8.680797206e-05f, -3.954717418e-04f, -5.559144026e-04f, -5.483134604e-04f, -4.049490240e-04f, -1.919991747e-04f, +1.695589485e-05f, +1.653338023e-04f, +2.277682708e-04f, +2.110563443e-04f, +1.441141591e-04f, +6.281070650e-05f, -3.756071670e-06f, -4.094073241e-05f, -4.893062236e-05f, -3.766612089e-05f, -1.978895051e-05f, -4.942034718e-06f, /* 2,19 (48) */ +1.115865191e-04f, +3.986210532e-04f, +8.560787674e-04f, +1.416417191e-03f, +1.922090469e-03f, +2.133319616e-03f, +1.767255838e-03f, +5.681210407e-04f, -1.601516381e-03f, -4.667139508e-03f, -8.270961528e-03f, -1.174782019e-02f, -1.416692601e-02f, -1.444567275e-02f, -1.152539990e-02f, -4.582398808e-03f, +6.765253982e-03f, +2.229958689e-02f, +4.113328923e-02f, +6.175457102e-02f, +8.219041945e-02f, +1.002679797e-01f, +1.139320212e-01f, +1.215624102e-01f, +1.222327543e-01f, +1.158609786e-01f, +1.032227500e-01f, +8.582514678e-02f, +6.566500794e-02f, +4.491813331e-02f, +2.561729273e-02f, +9.376571075e-03f, -2.792555768e-03f, -1.054869554e-02f, -1.417114714e-02f, -1.441568017e-02f, -1.231344295e-02f, -8.957459759e-03f, -5.317764640e-03f, -2.114683536e-03f, +2.364101143e-04f, +1.612217409e-03f, +2.117243487e-03f, +1.992403184e-03f, +1.521642327e-03f, +9.567919001e-04f, +4.722945595e-04f, +1.519027451e-04f, -6.138580599e-06f, -1.167998123e-05f, -1.642784518e-05f, -1.773682123e-05f, -1.276108460e-05f, +6.478759438e-07f, +2.292044324e-05f, +5.189914050e-05f, +8.242153441e-05f, +1.066018947e-04f, +1.149197331e-04f, +9.802732920e-05f, +4.897944593e-05f, -3.457787058e-05f, -1.487948357e-04f, -2.830632097e-04f, -4.208180602e-04f, -5.417150934e-04f, -6.248862372e-04f, -6.526982959e-04f, -6.142719023e-04f, -5.080098345e-04f, -3.425475498e-04f, -1.358451806e-04f, +8.747644082e-05f, +3.000796842e-04f, +4.763811065e-04f, +5.966817999e-04f, +6.501636765e-04f, +6.362041019e-04f, +5.638205997e-04f, +4.494462858e-04f, +3.135665484e-04f, +1.769463931e-04f, +5.720770752e-05f, -3.362011720e-05f, -9.021213267e-05f, -1.136728644e-04f, -1.101185653e-04f, -8.856853840e-05f, -5.868053377e-05f, -2.881868748e-05f, -4.792774367e-06f, +1.059688009e-05f, +1.727773059e-05f, +1.710909637e-05f, +1.286886331e-05f, +7.309209040e-06f, +2.021608414e-04f, -9.843582508e-05f, -9.215333726e-04f, -2.273581014e-03f, -3.811500991e-03f, -4.800869888e-03f, -4.276766148e-03f, -1.417755337e-03f, +3.968345245e-03f, +1.104656963e-02f, +1.787291050e-02f, +2.177994052e-02f, +2.020885800e-02f, +1.175745989e-02f, -2.942231452e-03f, -2.092130319e-02f, -3.739595579e-02f, -4.707288101e-02f, -4.587388020e-02f, -3.249427486e-02f, -9.196239645e-03f, +1.853799958e-02f, +4.347519485e-02f, +5.878673626e-02f, +6.017764343e-02f, +4.725457520e-02f, +2.365200702e-02f, -4.128050193e-03f, -2.875413903e-02f, -4.427491531e-02f, -4.776130215e-02f, -3.987834538e-02f, -2.428732863e-02f, -6.188839790e-03f, +9.418963941e-03f, +1.916092474e-02f, +2.196699744e-02f, +1.891256997e-02f, +1.242012917e-02f, +5.210978056e-03f, -5.908590979e-04f, -3.935873000e-03f, -4.847410058e-03f, -4.066431815e-03f, -2.564898594e-03f, -1.139606446e-03f, -2.090527745e-04f, +1.776874763e-04f, +2.922947826e-06f, +1.657067159e-05f, +3.446112759e-05f, +4.789956147e-05f, +4.445473845e-05f, +1.314424960e-05f, -4.854590819e-05f, -1.289272071e-04f, -2.012505635e-04f, -2.300087278e-04f, -1.837859237e-04f, -5.062528636e-05f, +1.504566055e-04f, +3.680394865e-04f, +5.300932113e-04f, +5.669580047e-04f, +4.382209531e-04f, +1.532424745e-04f, -2.239051597e-04f, -5.892539518e-04f, -8.302432309e-04f, -8.633618090e-04f, -6.646003260e-04f, -2.809772275e-04f, +1.820441491e-04f, +5.935477276e-04f, +8.391537625e-04f, +8.571561795e-04f, +6.561967548e-04f, +3.088650378e-04f, -7.545170401e-05f, -3.878160556e-04f, -5.534859988e-04f, -5.508863156e-04f, -4.108744881e-04f, -1.989541894e-04f, +1.112050636e-05f, +1.619539854e-04f, +2.271218480e-04f, +2.125235683e-04f, +1.466046309e-04f, +6.524688689e-05f, -2.085490399e-06f, -4.025372215e-05f, -4.903828840e-05f, -3.818081515e-05f, -2.033859211e-05f, -5.304650110e-06f, /* 2,20 (48) */ +1.054479385e-04f, +3.869410720e-04f, +8.396509222e-04f, +1.398680370e-03f, +1.909329384e-03f, +2.133967492e-03f, +1.790176281e-03f, +6.200201812e-04f, -1.519094847e-03f, -4.560537614e-03f, -8.156041794e-03f, -1.164979286e-02f, -1.411794657e-02f, -1.448025062e-02f, -1.167419474e-02f, -4.865462017e-03f, +6.344435922e-03f, +2.175787180e-02f, +4.050840299e-02f, +6.110187273e-02f, +8.157614755e-02f, +9.975996985e-02f, +1.135894736e-01f, +1.214265650e-01f, +1.223202308e-01f, +1.161610583e-01f, +1.036991311e-01f, +8.642182858e-02f, +6.631517162e-02f, +4.555433741e-02f, +2.618111333e-02f, +9.826017361e-03f, -2.478989220e-03f, -1.037174914e-02f, -1.411393943e-02f, -1.444930029e-02f, -1.240365508e-02f, -9.071132624e-03f, -5.427883205e-03f, -2.203252074e-03f, +1.777295806e-04f, +1.583398721e-03f, +2.112450713e-03f, +2.003000064e-03f, +1.538920057e-03f, +9.739009964e-04f, +4.851634228e-04f, +1.592119541e-04f, -5.975489525e-06f, -1.150673014e-05f, -1.631644935e-05f, -1.777697317e-05f, -1.303639635e-05f, +9.102927193e-08f, +2.210411281e-05f, +5.093564998e-05f, +8.151694320e-05f, +1.060350840e-04f, +1.149964995e-04f, +9.901546503e-05f, +5.103696510e-05f, -3.146519645e-05f, -1.448500178e-04f, -2.787157577e-04f, -4.166573956e-04f, -5.384038478e-04f, -6.230473317e-04f, -6.527970441e-04f, -6.165173774e-04f, -5.122973493e-04f, -3.484565686e-04f, -1.426958208e-04f, +8.051745830e-05f, +2.938634059e-04f, +4.716372619e-04f, +5.939032386e-04f, +6.495361818e-04f, +6.375936455e-04f, +5.668179551e-04f, +4.534572180e-04f, +3.179271685e-04f, +1.810395187e-04f, +6.055776647e-05f, -3.128968150e-05f, -8.896566043e-05f, -1.133902888e-04f, -1.105528795e-04f, -8.941684389e-05f, -5.965201997e-05f, -2.968611429e-05f, -5.419824611e-06f, +1.025335508e-05f, +1.718573622e-05f, +1.719125943e-05f, +1.303439868e-05f, +7.480043122e-06f, +2.050837892e-04f, -8.186515349e-05f, -8.870722450e-04f, -2.225681452e-03f, -3.767046253e-03f, -4.787725639e-03f, -4.325312056e-03f, -1.546682544e-03f, +3.767094681e-03f, +1.081656090e-02f, +1.768912458e-02f, +2.172931524e-02f, +2.035931460e-02f, +1.212549938e-02f, -2.412138240e-03f, -2.035434518e-02f, -3.695773484e-02f, -4.691963853e-02f, -4.609778536e-02f, -3.308352881e-02f, -1.002648288e-02f, +1.767463777e-02f, +4.281059452e-02f, +5.850575903e-02f, +6.035968758e-02f, +4.784812293e-02f, +2.449116078e-02f, -3.270894013e-03f, -2.809794228e-02f, -4.396605027e-02f, -4.783675385e-02f, -4.026616143e-02f, -2.484081463e-02f, -6.739726106e-03f, +9.008089453e-03f, +1.896197055e-02f, +2.197811794e-02f, +1.907452395e-02f, +1.264725102e-02f, +5.423501625e-03f, -4.442544670e-04f, -3.870626113e-03f, -4.849495549e-03f, -4.106685537e-03f, -2.613936882e-03f, -1.177787262e-03f, -2.293913666e-04f, +1.723828262e-04f, +2.612743069e-06f, +1.604940348e-05f, +3.391086871e-05f, +4.766731014e-05f, +4.494125820e-05f, +1.460163653e-05f, -4.623323722e-05f, -1.263651979e-04f, -1.994597013e-04f, -2.301158125e-04f, -1.865554712e-04f, -5.600172260e-05f, +1.435835716e-04f, +3.616837955e-04f, +5.266093397e-04f, +5.682148300e-04f, +4.448026599e-04f, +1.640042448e-04f, -2.116962129e-04f, -5.791693600e-04f, -8.255526230e-04f, -8.658939429e-04f, -6.740295675e-04f, -2.948233659e-04f, +1.676716814e-04f, +5.827088224e-04f, +8.347765667e-04f, +8.601357579e-04f, +6.652006819e-04f, +3.208869794e-04f, -6.402221775e-05f, -3.800125628e-04f, -5.508888108e-04f, -5.533220657e-04f, -4.167290819e-04f, -2.059124541e-04f, +5.224593305e-06f, +1.584877552e-04f, +2.263956365e-04f, +2.139400871e-04f, +1.490806182e-04f, +6.769801371e-05f, -3.851523159e-07f, -3.953718479e-05f, -4.912655230e-05f, -3.868895900e-05f, -2.089145928e-05f, -5.674634421e-06f, /* 2,21 (48) */ +9.947244900e-05f, +3.754343418e-04f, +8.233344729e-04f, +1.380903397e-03f, +1.896292988e-03f, +2.134058521e-03f, +1.812280394e-03f, +6.709558312e-04f, -1.437577904e-03f, -4.454502530e-03f, -8.041045295e-03f, -1.155077740e-02f, -1.406690960e-02f, -1.451171581e-02f, -1.181904476e-02f, -5.144177775e-03f, +5.927778526e-03f, +2.121946795e-02f, +3.988535566e-02f, +6.044907568e-02f, +8.095963017e-02f, +9.924767250e-02f, +1.132410171e-01f, +1.212838692e-01f, +1.224007482e-01f, +1.164549217e-01f, +1.041707684e-01f, +8.701573182e-02f, +6.696470780e-02f, +4.619193106e-02f, +2.674793129e-02f, +1.027947458e-02f, -2.161062051e-03f, -1.019070962e-02f, -1.405338166e-02f, -1.448058997e-02f, -1.249262075e-02f, -9.184522912e-03f, -5.538436085e-03f, -2.292668918e-03f, +1.180775606e-04f, +1.553712607e-03f, +2.107030888e-03f, +2.013253419e-03f, +1.556105794e-03f, +9.910922559e-04f, +4.981978215e-04f, +1.666919973e-04f, -5.813561281e-06f, -1.133284398e-05f, -1.620180464e-05f, -1.781101677e-05f, -1.330337920e-05f, -4.569264820e-07f, +2.129469280e-05f, +4.997410040e-05f, +8.060657581e-05f, +1.054530775e-04f, +1.150487184e-04f, +9.997197899e-05f, +5.306025672e-05f, -2.838324597e-05f, -1.409257044e-04f, -2.743726128e-04f, -4.124809731e-04f, -5.350561130e-04f, -6.211542671e-04f, -6.528305431e-04f, -6.186956518e-04f, -5.165258583e-04f, -3.543240851e-04f, -1.495291793e-04f, +7.354870489e-05f, +2.876119077e-04f, +4.668384753e-04f, +5.910587572e-04f, +6.488418893e-04f, +6.389251117e-04f, +5.697733800e-04f, +4.574464721e-04f, +3.222867216e-04f, +1.851491307e-04f, +6.393634822e-05f, -2.892533735e-05f, -8.768629623e-05f, -1.130808466e-04f, -1.109692702e-04f, -9.025683137e-05f, -6.062352435e-05f, -3.055935993e-05f, -6.055495601e-06f, +9.901132222e-06f, +1.708690087e-05f, +1.726936079e-05f, +1.319862861e-05f, +7.651634979e-06f, +2.076965323e-04f, -6.581575001e-05f, -8.531613762e-04f, -2.178014142e-03f, -3.722104995e-03f, -4.773124002e-03f, -4.371545293e-03f, -1.673047742e-03f, +3.567634980e-03f, +1.058644509e-02f, +1.750256911e-02f, +2.167331351e-02f, +2.050289818e-02f, +1.248718318e-02f, -1.885528901e-03f, -1.978613035e-02f, -3.651293218e-02f, -4.675563429e-02f, -4.630948158e-02f, -3.366269817e-02f, -1.085203550e-02f, +1.680874383e-02f, +4.213656496e-02f, +5.821093566e-02f, +6.052735927e-02f, +4.843083175e-02f, +2.532593735e-02f, -2.410758255e-03f, -2.743274159e-02f, -4.364516329e-02f, -4.790077607e-02f, -4.064617400e-02f, -2.539170344e-02f, -7.293048172e-03f, +8.591360371e-03f, +1.875605810e-02f, +2.198334254e-02f, +1.923301171e-02f, +1.287364666e-02f, +5.637441712e-03f, -2.951738487e-04f, -3.802928100e-03f, -4.849880701e-03f, -4.146222722e-03f, -2.663063435e-03f, -1.216476221e-03f, -2.502828259e-04f, +1.667081918e-04f, +2.310087044e-06f, +1.553294649e-05f, +3.335695340e-05f, +4.741888520e-05f, +4.540012932e-05f, +1.602804428e-05f, -4.394072422e-05f, -1.237971315e-04f, -1.976271346e-04f, -2.301488361e-04f, -1.892374520e-04f, -6.130794585e-05f, +1.367304729e-04f, +3.552761018e-04f, +5.230026589e-04f, +5.693063191e-04f, +4.512259819e-04f, +1.746698386e-04f, -1.994801026e-04f, -5.689641709e-04f, -8.206558088e-04f, -8.681932613e-04f, -6.832708074e-04f, -3.085858884e-04f, +1.532515671e-04f, +5.717063486e-04f, +8.301719951e-04f, +8.628947198e-04f, +6.740555333e-04f, +3.328692552e-04f, -5.252255007e-05f, -3.720628316e-04f, -5.481226416e-04f, -5.556190707e-04f, -4.225104719e-04f, -2.128717986e-04f, -7.304878903e-07f, +1.549354012e-04f, +2.255890162e-04f, +2.153048015e-04f, +1.515410319e-04f, +7.016336728e-05f, +1.344722690e-06f, -3.879092743e-05f, -4.919501962e-05f, -3.919017456e-05f, -2.144732766e-05f, -6.051943364e-06f, /* 2,22 (48) */ +9.365888772e-05f, +3.641014979e-04f, +8.071326683e-04f, +1.363092380e-03f, +1.882989609e-03f, +2.133601595e-03f, +1.833575087e-03f, +7.209299316e-04f, -1.356971328e-03f, -4.349049452e-03f, -7.925996577e-03f, -1.145080542e-02f, -1.401384935e-02f, -1.454009906e-02f, -1.195997046e-02f, -5.418550388e-03f, +5.515297553e-03f, +2.068441184e-02f, +3.926420140e-02f, +5.979624514e-02f, +8.034093452e-02f, +9.873114664e-02f, +1.128866930e-01f, +1.211343400e-01f, +1.224742969e-01f, +1.167425336e-01f, +1.046376069e-01f, +8.760679058e-02f, +6.761354969e-02f, +4.683085617e-02f, +2.731770467e-02f, +1.073692105e-02f, -1.838775330e-03f, -1.000556049e-02f, -1.398944532e-02f, -1.450951531e-02f, -1.258030704e-02f, -9.297603759e-03f, -5.649405355e-03f, -2.382925750e-03f, +5.745403624e-05f, +1.523153247e-03f, +2.100975393e-03f, +2.023154551e-03f, +1.573192694e-03f, +1.008361617e-03f, +5.113964501e-04f, +1.743436322e-04f, -5.652835814e-06f, -1.115839327e-05f, -1.608400036e-05f, -1.783903691e-05f, -1.356208269e-05f, -9.959741817e-07f, +2.049228958e-05f, +4.901469194e-05f, +7.969070668e-05f, +1.048561792e-04f, +1.150766596e-04f, +1.008970351e-04f, +5.504931606e-05f, -2.533223037e-05f, -1.370223128e-04f, -2.700343538e-04f, -4.082894485e-04f, -5.316725104e-04f, -6.192075126e-04f, -6.527990109e-04f, -6.208066337e-04f, -5.206949552e-04f, -3.601494334e-04f, -1.563444340e-04f, +6.657102488e-05f, +2.813259176e-04f, +4.619852426e-04f, +5.881485482e-04f, +6.480806737e-04f, +6.401981006e-04f, +5.726862885e-04f, +4.614133903e-04f, +3.266445939e-04f, +1.892747545e-04f, +6.734317504e-05f, -2.652715154e-05f, -8.637392289e-05f, -1.127442933e-04f, -1.113674365e-04f, -9.108821130e-05f, -6.159482021e-05f, -3.143828816e-05f, -6.699744060e-06f, +9.540179638e-06f, +1.698114718e-05f, +1.734330956e-05f, +1.336147488e-05f, +7.823934576e-06f, +2.100066193e-04f, -5.028280352e-05f, -8.198044229e-04f, -2.130595257e-03f, -3.676704865e-03f, -4.757095958e-03f, -4.415486017e-03f, -1.796844873e-03f, +3.370007845e-03f, +1.035629625e-02f, +1.731333166e-02f, +2.161200557e-02f, +2.063962865e-02f, +1.284245928e-02f, -1.362526242e-03f, -1.921682403e-02f, -3.606170620e-02f, -4.658096445e-02f, -4.650896168e-02f, -3.423166234e-02f, -1.167269131e-02f, +1.594055057e-02f, +4.145329415e-02f, +5.790234977e-02f, +6.068061083e-02f, +4.900253810e-02f, +2.615610935e-02f, -1.547863536e-03f, -2.675868606e-02f, -4.331229404e-02f, -4.795329862e-02f, -4.101823683e-02f, -2.593982609e-02f, -7.848667242e-03f, +8.168849899e-03f, +1.854318630e-02f, +2.198261205e-02f, +1.938794711e-02f, +1.309923567e-02f, +5.852746513e-03f, -1.436328168e-04f, -3.732764732e-03f, -4.848535978e-03f, -4.185013649e-03f, -2.712258454e-03f, -1.255666395e-03f, -2.717301535e-04f, +1.606562484e-04f, +2.014981454e-06f, +1.502147253e-05f, +3.279972542e-05f, +4.715469618e-05f, +4.583162515e-05f, +1.742338539e-05f, -4.166895100e-05f, -1.212240206e-04f, -1.957540069e-04f, -2.301086035e-04f, -1.918318640e-04f, -6.654289323e-05f, +1.298993015e-04f, +3.488187759e-04f, +5.192750907e-04f, +5.702331310e-04f, +4.574898456e-04f, +1.852365655e-04f, -1.872604035e-04f, -5.586417028e-04f, -8.155546947e-04f, -8.702595184e-04f, -6.923216202e-04f, -3.222609165e-04f, +1.387878976e-04f, +5.605432950e-04f, +8.253410091e-04f, +8.654317815e-04f, +6.827583192e-04f, +3.448082387e-04f, -4.095577201e-05f, -3.639684837e-04f, -5.451873476e-04f, -5.577757256e-04f, -4.282163328e-04f, -2.198300360e-04f, -6.743349257e-06f, +1.512972455e-04f, +2.247013900e-04f, +2.166166192e-04f, +1.539847759e-04f, +7.264221312e-05f, +3.103899478e-06f, -3.801476720e-05f, -4.924329868e-05f, -3.968408078e-05f, -2.200596715e-05f, -6.436527589e-06f, /* 2,23 (48) */ +8.800605191e-05f, +3.529431046e-04f, +7.910486679e-04f, +1.345253343e-03f, +1.869427526e-03f, +2.132605620e-03f, +1.854067377e-03f, +7.699446236e-04f, -1.277280621e-03f, -4.244193273e-03f, -7.810919917e-03f, -1.134990838e-02f, -1.395880003e-02f, -1.456543129e-02f, -1.209699277e-02f, -5.688584742e-03f, +5.107008105e-03f, +2.015273933e-02f, +3.864499388e-02f, +5.914344613e-02f, +7.972012788e-02f, +9.821045169e-02f, +1.125265436e-01f, +1.209779955e-01f, +1.225408679e-01f, +1.170238595e-01f, +1.050995921e-01f, +8.819493912e-02f, +6.826163036e-02f, +4.747105427e-02f, +2.789039096e-02f, +1.119833444e-02f, -1.512130736e-03f, -9.816285739e-03f, -1.392210214e-02f, -1.453604246e-02f, -1.266668096e-02f, -9.410348052e-03f, -5.760772791e-03f, -2.474013961e-03f, -4.140783970e-06f, +1.491714959e-03f, +2.094275649e-03f, +2.032694731e-03f, +1.590173842e-03f, +1.025704926e-03f, +5.247579250e-04f, +1.821675668e-04f, -5.493352053e-06f, -1.098344767e-05f, -1.596312552e-05f, -1.786111905e-05f, -1.381255800e-05f, -1.526099187e-06f, +1.969700654e-05f, +4.805762199e-05f, +7.876960845e-05f, +1.042446931e-04f, +1.150805950e-04f, +1.017908016e-04f, +5.700414440e-05f, -2.231235421e-05f, -1.331402544e-04f, -2.657015558e-04f, -4.040834770e-04f, -5.282536639e-04f, -6.172075439e-04f, -6.527026745e-04f, -6.228502412e-04f, -5.248042432e-04f, -3.659319540e-04f, -1.631407655e-04f, +5.958526404e-05f, +2.750061691e-04f, +4.570780681e-04f, +5.851728139e-04f, +6.472524196e-04f, +6.414122198e-04f, +5.755560987e-04f, +4.653573154e-04f, +3.310001687e-04f, +1.934159098e-04f, +7.077796261e-05f, -2.409519724e-05f, -8.502842828e-05f, -1.123803877e-04f, -1.117470784e-04f, -9.191069286e-05f, -6.256567834e-05f, -3.232275977e-05f, -7.352523987e-06f, +9.170467399e-06f, +1.686839873e-05f, +1.741301485e-05f, +1.352285859e-05f, +7.996890882e-06f, +2.120216008e-04f, -3.526133099e-05f, -7.870046974e-04f, -2.083440561e-03f, -3.630873240e-03f, -4.739672573e-03f, -4.457154968e-03f, -1.918068894e-03f, +3.174253838e-03f, +1.012618765e-02f, +1.712149979e-02f, +2.154546268e-02f, +2.076952795e-02f, +1.319127805e-02f, -8.432511510e-04f, -1.864659090e-02f, -3.560421635e-02f, -4.639572788e-02f, -4.669622208e-02f, -3.479030404e-02f, -1.248824600e-02f, +1.507029105e-02f, +4.076097253e-02f, +5.758008886e-02f, +6.081939873e-02f, +4.956308140e-02f, +2.698145035e-02f, -6.824317540e-04f, -2.607592774e-02f, -4.296748580e-02f, -4.799425439e-02f, -4.138220531e-02f, -2.648501343e-02f, -8.406442968e-03f, +7.740633566e-03f, +1.832335626e-02f, +2.197586870e-02f, +1.953924435e-02f, +1.332393706e-02f, +6.069363132e-03f, +1.035195909e-05f, -3.660122519e-03f, -4.845432079e-03f, -4.223028416e-03f, -2.761501753e-03f, -1.295350476e-03f, -2.937361207e-04f, +1.542197209e-04f, +1.727423627e-06f, +1.451514763e-05f, +3.223952423e-05f, +4.687515319e-05f, +4.623602683e-05f, +1.878758649e-05f, -3.941848368e-05f, -1.186468676e-04f, -1.938414640e-04f, -2.299959380e-04f, -1.943387355e-04f, -7.170553526e-05f, +1.230920268e-04f, +3.423141883e-04f, +5.154285844e-04f, +5.709959738e-04f, +4.635932335e-04f, +1.957017770e-04f, -1.750406785e-04f, -5.482053006e-04f, -8.102512456e-04f, -8.720925403e-04f, -7.011796411e-04f, -3.358446005e-04f, +1.242847781e-04f, +5.492227019e-04f, +8.202846407e-04f, +8.677457248e-04f, +6.913060890e-04f, +3.567003045e-04f, -2.932498800e-05f, -3.557311946e-04f, -5.420828385e-04f, -5.597904616e-04f, -4.338443485e-04f, -2.267849633e-04f, -1.281257153e-05f, +1.475736432e-04f, +2.237321840e-04f, +2.178744558e-04f, +1.564107476e-04f, +7.513380208e-05f, +4.892127566e-06f, -3.720853147e-05f, -4.927100079e-05f, -4.017029362e-05f, -2.256714189e-05f, -6.828332627e-06f, /* 2,24 (48) */ +8.251269985e-05f, +3.419596569e-04f, +7.750855424e-04f, +1.327392224e-03f, +1.855614968e-03f, +2.131079521e-03f, +1.873764383e-03f, +8.180022455e-04f, -1.198511013e-03f, -4.139948580e-03f, -7.695839322e-03f, -1.124811758e-02f, -1.390179589e-02f, -1.458774364e-02f, -1.223013303e-02f, -5.954286298e-03f, +4.702924628e-03f, +1.962448566e-02f, +3.802778634e-02f, +5.849074345e-02f, +7.909727764e-02f, +9.768564744e-02f, +1.121606116e-01f, +1.208148548e-01f, +1.226004532e-01f, +1.172988657e-01f, +1.055566702e-01f, +8.878011194e-02f, +6.890888278e-02f, +4.811246649e-02f, +2.846594706e-02f, +1.166369176e-02f, -1.181130567e-03f, -9.622869830e-03f, -1.385132418e-02f, -1.456013766e-02f, -1.275170939e-02f, -9.522728440e-03f, -5.872519870e-03f, -2.565924654e-03f, -6.670646231e-05f, +1.459392199e-03f, +2.086923125e-03f, +2.041865198e-03f, +1.607042240e-03f, +1.043117941e-03f, +5.382807835e-04f, +1.901644577e-04f, -5.335147914e-06f, -1.080807602e-05f, -1.583926880e-05f, -1.787734921e-05f, -1.405485785e-05f, -2.047289331e-06f, +1.890894410e-05f, +4.710308517e-05f, +7.784355196e-05f, +1.036189232e-04f, +1.150607986e-04f, +1.026534512e-04f, +5.892474902e-05f, -1.932381540e-05f, -1.292799344e-04f, -2.613747898e-04f, -3.998637126e-04f, -5.248002005e-04f, -6.151548427e-04f, -6.525417699e-04f, -6.248264024e-04f, -5.288533349e-04f, -3.716709945e-04f, -1.699173576e-04f, +5.259226943e-05f, +2.686534011e-04f, +4.521174649e-04f, +5.821317669e-04f, +6.463570208e-04f, +6.425670845e-04f, +5.783822332e-04f, +4.692775907e-04f, +3.353528265e-04f, +1.975721113e-04f, +7.424042003e-05f, -2.162955402e-05f, -8.364970531e-05f, -1.119888913e-04f, -1.121078964e-04f, -9.272398405e-05f, -6.353586705e-05f, -3.321263254e-05f, -8.013786642e-06f, +8.791967543e-06f, +1.674858004e-05f, +1.747838576e-05f, +1.368270014e-05f, +8.170451874e-06f, +2.137490244e-04f, -2.074618336e-05f, -7.547651732e-04f, -2.036565407e-03f, -3.584637213e-03f, -4.720884986e-03f, -4.496573452e-03f, -2.036715762e-03f, +2.980412374e-03f, +9.896191711e-03f, +1.692716106e-02f, +2.147375714e-02f, +2.089261998e-02f, +1.353359224e-02f, -3.278225666e-04f, -1.807559493e-02f, -3.514062312e-02f, -4.620002611e-02f, -4.687126276e-02f, -3.533850934e-02f, -1.329849725e-02f, +1.419819851e-02f, +4.005979289e-02f, +5.724424426e-02f, +6.094368351e-02f, +5.011230410e-02f, +2.780173499e-02f, +1.853139707e-04f, -2.538462165e-02f, -4.261078550e-02f, -4.802357938e-02f, -4.173793651e-02f, -2.702709627e-02f, -8.966233429e-03f, +7.306789218e-03f, +1.809657130e-02f, +2.196305613e-02f, +1.968681800e-02f, +1.354766925e-02f, +6.287237588e-03f, +1.667627067e-04f, -3.584988717e-03f, -4.840539951e-03f, -4.260236948e-03f, -2.810772754e-03f, -1.335520770e-03f, -3.163032626e-04f, +1.473913882e-04f, +1.447406595e-06f, +1.401413201e-05f, +3.167668481e-05f, +4.658066683e-05f, +4.661362310e-05f, +2.012058813e-05f, -3.718987259e-05f, -1.160666647e-04f, -1.918906538e-04f, -2.298116804e-04f, -1.967581254e-04f, -7.679487601e-05f, +1.163105947e-04f, +3.357647084e-04f, +5.114651158e-04f, +5.715956042e-04f, +4.695351836e-04f, +2.060628682e-04f, -1.628244780e-04f, -5.376583343e-04f, -8.047474842e-04f, -8.736922246e-04f, -7.098425667e-04f, -3.493331199e-04f, +1.097463270e-04f, +5.377476602e-04f, +8.150039925e-04f, +8.698353975e-04f, +6.996959320e-04f, +3.685418302e-04f, -1.763333493e-05f, -3.473526926e-04f, -5.388090779e-04f, -5.616617465e-04f, -4.393922133e-04f, -2.337343623e-04f, -1.893670441e-05f, +1.437649828e-04f, +2.226808477e-04f, +2.190772355e-04f, +1.588178385e-04f, +7.763737051e-05f, +6.709141053e-06f, -3.637205811e-05f, -4.927774042e-05f, -4.064842614e-05f, -2.313061035e-05f, -7.227298826e-06f, /* 2,25 (48) */ +7.717755194e-05f, +3.311515809e-04f, +7.592462736e-04f, +1.309514875e-03f, +1.841560110e-03f, +2.129032232e-03f, +1.892673327e-03f, +8.651053307e-04f, -1.120667461e-03f, -4.036329657e-03f, -7.580778523e-03f, -1.114546413e-02f, -1.384287114e-02f, -1.460706746e-02f, -1.235941296e-02f, -6.215661087e-03f, +4.303060915e-03f, +1.909968546e-02f, +3.741263150e-02f, +5.783820168e-02f, +7.847245124e-02f, +9.715679411e-02f, +1.117889406e-01f, +1.206449374e-01f, +1.226530455e-01f, +1.175675191e-01f, +1.060087877e-01f, +8.936224371e-02f, +6.955523980e-02f, +4.875503357e-02f, +2.904432929e-02f, +1.213296935e-02f, -8.457777408e-04f, -9.425297718e-03f, -1.377708376e-02f, -1.458176721e-02f, -1.283535910e-02f, -9.634717331e-03f, -5.984627766e-03f, -2.658648638e-03f, -1.302423294e-04f, +1.426179567e-03f, +2.078909338e-03f, +2.050657166e-03f, +1.623790820e-03f, +1.060596327e-03f, +5.519634837e-04f, +1.983349096e-04f, -5.178260298e-06f, -1.063234626e-05f, -1.571251857e-05f, -1.788781391e-05f, -1.428903649e-05f, -2.559534897e-06f, +1.812819973e-05f, +4.615127328e-05f, +7.691280619e-05f, +1.029791733e-04f, +1.150175463e-04f, +1.034851606e-04f, +6.081114311e-05f, -1.636680517e-05f, -1.254417521e-04f, -2.570546224e-04f, -3.956308083e-04f, -5.213127495e-04f, -6.130498973e-04f, -6.523165421e-04f, -6.267350554e-04f, -5.328418520e-04f, -3.773659094e-04f, -1.766733973e-04f, +4.559288931e-05f, +2.622683581e-04f, +4.471039543e-04f, +5.790256297e-04f, +6.453943812e-04f, +6.436623173e-04f, +5.811641189e-04f, +4.731735600e-04f, +3.397019451e-04f, +2.017428681e-04f, +7.773024984e-05f, -1.913030786e-05f, -8.223765199e-05f, -1.115695688e-04f, -1.124495919e-04f, -9.352779174e-05f, -6.450515218e-05f, -3.410776128e-05f, -8.683480529e-06f, +8.404654100e-06f, +1.662161663e-05f, +1.753933143e-05f, +1.384091928e-05f, +8.344564540e-06f, +2.151964310e-04f, -6.732051356e-06f, -7.230884884e-04f, -1.989984741e-03f, -3.538023590e-03f, -4.700764398e-03f, -4.533763325e-03f, -2.152782426e-03f, +2.788521720e-03f, +9.666380030e-03f, +1.673040293e-02f, +2.139696226e-02f, +2.100893057e-02f, +1.386935695e-02f, +1.836425491e-04f, -1.750399933e-02f, -3.467108794e-02f, -4.599396324e-02f, -4.703408724e-02f, -3.587616768e-02f, -1.410324473e-02f, +1.332450628e-02f, +3.934995032e-02f, +5.689491114e-02f, +6.105342983e-02f, +5.065005176e-02f, +2.861673899e-02f, +1.055149368e-03f, -2.468492572e-02f, -4.224224367e-02f, -4.804121272e-02f, -4.208528920e-02f, -2.756590535e-02f, -9.527895176e-03f, +6.867397005e-03f, +1.786283694e-02f, +2.194411942e-02f, +1.983058298e-02f, +1.377035010e-02f, +6.506314824e-03f, +3.255805452e-04f, -3.507351347e-03f, -4.833830810e-03f, -4.296609006e-03f, -2.860050494e-03f, -1.376169196e-03f, -3.394338729e-04f, +1.401640894e-04f, +1.174919173e-06f, +1.351858005e-05f, +3.111153756e-05f, +4.627164787e-05f, +4.696471002e-05f, +2.142234465e-05f, -3.498365227e-05f, -1.134843933e-04f, -1.899027257e-04f, -2.295566890e-04f, -1.990901227e-04f, -8.180995317e-05f, +1.095569277e-04f, +3.291727038e-04f, +5.073866860e-04f, +5.720328272e-04f, +4.753147901e-04f, +2.163172775e-04f, -1.506153382e-04f, -5.270041986e-04f, -7.990454901e-04f, -8.750585407e-04f, -7.183081557e-04f, -3.627226851e-04f, +9.517667379e-05f, +5.261213105e-04f, +8.095002376e-04f, +8.716997142e-04f, +7.079249784e-04f, +3.803291967e-04f, -5.883981206e-06f, -3.388347590e-04f, -5.353660836e-04f, -5.633880856e-04f, -4.448576322e-04f, -2.406760000e-04f, -2.511426691e-05f, +1.398716859e-04f, +2.215468551e-04f, +2.202238910e-04f, +1.612049344e-04f, +8.015214039e-05f, +8.554658539e-06f, -3.550519564e-05f, -4.926313550e-05f, -4.111808869e-05f, -2.369612532e-05f, -7.633361304e-06f, /* 2,26 (48) */ +7.199929164e-05f, +3.205192346e-04f, +7.435337550e-04f, +1.291627061e-03f, +1.827271074e-03f, +2.126472697e-03f, +1.910801527e-03f, +9.112566040e-04f, -1.043754655e-03f, -3.933350484e-03f, -7.465760977e-03f, -1.104197897e-02f, -1.378205999e-02f, -1.462343426e-02f, -1.248485472e-02f, -6.472715710e-03f, +3.907430107e-03f, +1.857837271e-02f, +3.679958160e-02f, +5.718588514e-02f, +7.784571619e-02f, +9.662395226e-02f, +1.114115747e-01f, +1.204682640e-01f, +1.226986384e-01f, +1.178297874e-01f, +1.064558916e-01f, +8.994126933e-02f, +7.020063419e-02f, +4.939869589e-02f, +2.962549341e-02f, +1.260614291e-02f, -5.060757957e-04f, -9.223554850e-03f, -1.369935351e-02f, -1.460089752e-02f, -1.291759675e-02f, -9.746286900e-03f, -6.097077358e-03f, -2.752176430e-03f, -1.947474815e-04f, +1.392071805e-03f, +2.070225857e-03f, +2.059061820e-03f, +1.640412437e-03f, +1.078135658e-03f, +5.658044030e-04f, +2.066794741e-04f, -5.022725094e-06f, -1.045632548e-05f, -1.558296283e-05f, -1.789260018e-05f, -1.451514970e-05f, -3.062828592e-06f, +1.735486795e-05f, +4.520237532e-05f, +7.597763824e-05f, +1.023257469e-04f, +1.149511162e-04f, +1.042861110e-04f, +6.266334577e-05f, -1.344150808e-05f, -1.216261004e-04f, -2.527416165e-04f, -3.913854162e-04f, -5.177919432e-04f, -6.108932017e-04f, -6.520272446e-04f, -6.285761486e-04f, -5.367694260e-04f, -3.830160601e-04f, -1.834080748e-04f, +3.858797298e-05f, +2.558517894e-04f, +4.420380662e-04f, +5.758546346e-04f, +6.443644139e-04f, +6.446975487e-04f, +5.839011872e-04f, +4.770445681e-04f, +3.440468994e-04f, +2.059276841e-04f, +8.124714801e-05f, -1.659755120e-05f, -8.079217154e-05f, -1.111221882e-04f, -1.127718672e-04f, -9.432182171e-05f, -6.547329714e-05f, -3.500799781e-05f, -9.361551378e-06f, +8.008503125e-06f, +1.648743506e-05f, +1.759576105e-05f, +1.399743514e-05f, +8.519174888e-06f, +2.163713502e-04f, +6.786528698e-06f, -6.919769508e-04f, -1.943713093e-03f, -3.491058880e-03f, -4.679342053e-03f, -4.568746977e-03f, -2.266266820e-03f, +2.598618995e-03f, +9.436823341e-03f, +1.653131281e-02f, +2.131515231e-02f, +2.111848750e-02f, +1.419852965e-02f, +6.910292352e-04f, -1.693196650e-02f, -3.419577315e-02f, -4.577764596e-02f, -4.718470258e-02f, -3.640317188e-02f, -1.490229022e-02f, +1.244944774e-02f, +3.863164217e-02f, +5.653218845e-02f, +6.114860651e-02f, +5.117617307e-02f, +2.942623922e-02f, +1.926849082e-03f, -2.397700074e-02f, -4.186191447e-02f, -4.804709670e-02f, -4.242412396e-02f, -2.810127143e-02f, -1.009128326e-02f, +6.422539372e-03f, +1.762216094e-02f, +2.191900516e-02f, +1.997045467e-02f, +1.399189695e-02f, +6.726538715e-03f, +4.867854796e-04f, -3.427199206e-03f, -4.825276152e-03f, -4.332114202e-03f, -2.909313630e-03f, -1.417287284e-03f, -3.631299982e-04f, +1.325307281e-04f, +9.099460397e-07f, +1.302864034e-05f, +3.054440828e-05f, +4.594850717e-05f, +4.728959078e-05f, +2.269282404e-05f, -3.280034141e-05f, -1.109010239e-04f, -1.878788303e-04f, -2.292318388e-04f, -2.013348463e-04f, -8.674983814e-05f, +1.028329237e-04f, +3.225405397e-04f, +5.031953214e-04f, +5.723084953e-04f, +4.809312030e-04f, +2.264624880e-04f, -1.384167806e-04f, -5.162463108e-04f, -7.931473988e-04f, -8.761915298e-04f, -7.265742297e-04f, -3.760095383e-04f, +8.057995834e-05f, +5.143468419e-04f, +8.037746187e-04f, +8.733376566e-04f, +7.159904009e-04f, +3.920587902e-04f, +5.919874154e-06f, -3.301792273e-04f, -5.317539276e-04f, -5.649680224e-04f, -4.502383222e-04f, -2.476076295e-04f, -3.134374756e-05f, +1.358942076e-04f, +2.203297043e-04f, +2.213133645e-04f, +1.635709156e-04f, +8.267731948e-05f, +1.042838306e-05f, -3.460780348e-05f, -4.922680759e-05f, -4.157888904e-05f, -2.426343398e-05f, -8.046449887e-06f, /* 2,27 (48) */ +6.697656655e-05f, +3.100629092e-04f, +7.279507922e-04f, +1.273734461e-03f, +1.812755924e-03f, +2.123409868e-03f, +1.928156395e-03f, +9.564589793e-04f, -9.677770163e-04f, -3.831024737e-03f, -7.350809861e-03f, -1.093769286e-02f, -1.371939665e-02f, -1.463687577e-02f, -1.260648082e-02f, -6.725457326e-03f, +3.516044690e-03f, +1.806058077e-02f, +3.618868840e-02f, +5.653385790e-02f, +7.721714004e-02f, +9.608718283e-02f, +1.110285586e-01f, +1.202848560e-01f, +1.227372263e-01f, +1.180856392e-01f, +1.068979297e-01f, +9.051712397e-02f, +7.084499860e-02f, +5.004339344e-02f, +3.020939460e-02f, +1.308318748e-02f, -1.620288963e-04f, -9.017627166e-03f, -1.361810636e-02f, -1.461749507e-02f, -1.299838892e-02f, -9.857409088e-03f, -6.209849225e-03f, -2.846498251e-03f, -2.602207787e-04f, +1.357063808e-03f, +2.060864306e-03f, +2.067070323e-03f, +1.656899872e-03f, +1.095731419e-03f, +5.798018381e-04f, +2.151986490e-04f, -4.868577177e-06f, -1.028007989e-05f, -1.545068921e-05f, -1.789179549e-05f, -1.473325471e-05f, -3.557165526e-06f, +1.658904033e-05f, +4.425657742e-05f, +7.503831325e-05f, +1.016589473e-04f, +1.148617881e-04f, +1.050564873e-04f, +6.448138195e-05f, -1.054810206e-05f, -1.178333665e-04f, -2.484363303e-04f, -3.871281868e-04f, -5.142384158e-04f, -6.086852563e-04f, -6.516741400e-04f, -6.303496402e-04f, -5.406356977e-04f, -3.886208156e-04f, -1.901205840e-04f, +3.157837062e-05f, +2.494044498e-04f, +4.369203387e-04f, +5.726190240e-04f, +6.432670421e-04f, +6.456724169e-04f, +5.865928741e-04f, +4.808899607e-04f, +3.483870618e-04f, +2.101260580e-04f, +8.479080402e-05f, -1.403138297e-05f, -7.931317237e-05f, -1.106465203e-04f, -1.130744256e-04f, -9.510577867e-05f, -6.644006295e-05f, -3.591319099e-05f, -1.004794213e-05f, +7.603492727e-06f, +1.634596290e-05f, +1.764758391e-05f, +1.415216617e-05f, +8.694227944e-06f, +2.172812962e-04f, +1.981516904e-05f, -6.614325425e-04f, -1.897764586e-03f, -3.443769290e-03f, -4.656649229e-03f, -4.601547318e-03f, -2.377167844e-03f, +2.410740164e-03f, +9.207591503e-03f, +1.632997796e-02f, +2.122840247e-02f, +2.122132042e-02f, +1.452107019e-02f, +1.194224557e-03f, -1.635965800e-02f, -3.371484194e-02f, -4.555118347e-02f, -4.732311936e-02f, -3.691941819e-02f, -1.569543762e-02f, +1.157325621e-02f, +3.790506794e-02f, +5.615617891e-02f, +6.122918647e-02f, +5.169051991e-02f, +3.023001384e-02f, +2.800186739e-03f, -2.326101034e-02f, -4.146985568e-02f, -4.804117682e-02f, -4.275430318e-02f, -2.863302536e-02f, -1.065625128e-02f, +5.972301050e-03f, +1.737455331e-02f, +2.188766141e-02f, +2.010634887e-02f, +1.421222665e-02f, +6.947852079e-03f, +6.503563952e-04f, -3.344521887e-03f, -4.814847769e-03f, -4.366722005e-03f, -2.958540437e-03f, -1.458866173e-03f, -3.873934322e-04f, +1.244842782e-04f, +6.524678118e-07f, +1.254445566e-05f, +2.997561797e-05f, +4.561165540e-05f, +4.758857544e-05f, +2.393200775e-05f, -3.064044285e-05f, -1.083175159e-04f, -1.858201188e-04f, -2.288380210e-04f, -2.034924447e-04f, -9.161363612e-05f, +9.614045620e-05f, +3.158705776e-04f, +4.988930718e-04f, +5.724235080e-04f, +4.863836286e-04f, +2.364960278e-04f, -1.262323105e-04f, -5.053881103e-04f, -7.870554015e-04f, -8.770913041e-04f, -7.346386734e-04f, -3.891899554e-04f, +6.596032919e-05f, +5.024274914e-04f, +7.978284485e-04f, +8.747482740e-04f, +7.238894151e-04f, +4.037270028e-04f, +1.777500250e-05f, -3.213879831e-04f, -5.279727365e-04f, -5.664001392e-04f, -4.555320128e-04f, -2.545269905e-04f, -3.762360484e-05f, +1.318330365e-04f, +2.190289187e-04f, +2.223446079e-04f, +1.659146577e-04f, +8.521210150e-05f, +1.233000201e-05f, -3.367975215e-05f, -4.916838214e-05f, -4.203043254e-05f, -2.483227790e-05f, -8.466489063e-06f, /* 2,28 (48) */ +6.210798937e-05f, +2.997828293e-04f, +7.125001030e-04f, +1.255842665e-03f, +1.798022669e-03f, +2.119852703e-03f, +1.944745435e-03f, +1.000715557e-03f, -8.927387031e-04f, -3.729365789e-03f, -7.235948073e-03f, -1.083263637e-02f, -1.365491527e-02f, -1.464742387e-02f, -1.272431418e-02f, -6.973893657e-03f, +3.128916504e-03f, +1.754634235e-02f, +3.558000314e-02f, +5.588218376e-02f, +7.658679040e-02f, +9.554654713e-02f, +1.106399378e-01f, +1.200947354e-01f, +1.227688047e-01f, +1.183350437e-01f, +1.073348500e-01f, +9.108974299e-02f, +7.148826564e-02f, +5.068906585e-02f, +3.079598747e-02f, +1.356407744e-02f, +1.863581655e-04f, -8.807501108e-03f, -1.353331556e-02f, -1.463152645e-02f, -1.307770209e-02f, -9.968055609e-03f, -6.322923651e-03f, -2.941604030e-03f, -3.266608416e-04f, +1.321150617e-03f, +2.050816364e-03f, +2.074673816e-03f, +1.673245835e-03f, +1.113379003e-03f, +5.939540043e-04f, +2.238928769e-04f, -4.715850413e-06f, -1.010367479e-05f, -1.531578494e-05f, -1.788548775e-05f, -1.494341021e-05f, -4.042543184e-06f, +1.583080551e-05f, +4.331406289e-05f, +7.409509441e-05f, +1.009790774e-04f, +1.147498435e-04f, +1.057964787e-04f, +6.626528240e-05f, -7.686758355e-06f, -1.140639309e-04f, -2.441393179e-04f, -3.828597697e-04f, -5.106528043e-04f, -6.064265671e-04f, -6.512574993e-04f, -6.320554984e-04f, -5.444403173e-04f, -3.941795518e-04f, -1.968101222e-04f, +2.456493322e-05f, +2.429270989e-04f, +4.317513181e-04f, +5.693190501e-04f, +6.421021986e-04f, +6.465865679e-04f, +5.892386203e-04f, +4.847090843e-04f, +3.527218023e-04f, +2.143374835e-04f, +8.836090079e-05f, -1.143190856e-05f, -7.780056820e-05f, -1.101423396e-04f, -1.133569712e-04f, -9.587936640e-05f, -6.740520824e-05f, -3.682318671e-05f, -1.074259293e-05f, +7.189603096e-06f, +1.619712886e-05f, +1.769470941e-05f, +1.430503026e-05f, +8.869667763e-06f, +2.179337640e-04f, +3.235962470e-05f, -6.314569246e-04f, -1.852152930e-03f, -3.396180714e-03f, -4.632717222e-03f, -4.632187761e-03f, -2.485485359e-03f, +2.224920046e-03f, +8.978753482e-03f, +1.612648552e-02f, +2.113678884e-02f, +2.131746088e-02f, +1.483694077e-02f, +1.693117628e-03f, -1.578723449e-02f, -3.322845831e-02f, -4.531468744e-02f, -4.744935167e-02f, -3.742480630e-02f, -1.648249302e-02f, +1.069616491e-02f, +3.717042926e-02f, +5.576698896e-02f, +6.129514680e-02f, +5.219294740e-02f, +3.102784229e-02f, +3.674935013e-03f, -2.253712093e-02f, -4.106612868e-02f, -4.802340182e-02f, -4.307569117e-02f, -2.916099810e-02f, -1.122265142e-02f, +5.516769037e-03f, +1.712002632e-02f, +2.185003780e-02f, +2.023818191e-02f, +1.443125557e-02f, +7.170196687e-03f, +8.162710528e-04f, -3.259309785e-03f, -4.802517767e-03f, -4.400401757e-03f, -3.007708819e-03f, -1.500896606e-03f, -4.122257101e-04f, +1.160177891e-04f, +4.024611317e-07f, +1.206616299e-05f, +2.940548286e-05f, +4.526150288e-05f, +4.786198073e-05f, +2.513989055e-05f, -2.850444351e-05f, -1.057348169e-04f, -1.837277423e-04f, -2.283761428e-04f, -2.055630957e-04f, -9.640048616e-05f, +8.948137306e-05f, +3.091651753e-04f, +4.944820104e-04f, +5.723788116e-04f, +4.916713289e-04f, +2.464154710e-04f, -1.140654159e-04f, -4.944330571e-04f, -7.807717433e-04f, -8.777580473e-04f, -7.424994357e-04f, -4.022602460e-04f, +5.132194230e-05f, +4.903665421e-04f, +7.916631086e-04f, +8.759306836e-04f, +7.316192808e-04f, +4.153302342e-04f, +2.967814651e-05f, -3.124629637e-04f, -5.240226921e-04f, -5.676830579e-04f, -4.607364475e-04f, -2.614318102e-04f, -4.395226739e-05f, +1.276886948e-04f, +2.176440466e-04f, +2.233165834e-04f, +1.682350316e-04f, +8.775566630e-05f, +1.425918711e-05f, -3.272092345e-05f, -4.908748870e-05f, -4.247232228e-05f, -2.540239313e-05f, -8.893397928e-06f, /* 2,29 (48) */ +5.739213896e-05f, +2.896791545e-04f, +6.971843180e-04f, +1.237957178e-03f, +1.783079259e-03f, +2.115810160e-03f, +1.960576241e-03f, +1.044029620e-03f, -8.186436087e-04f, -3.628386712e-03f, -7.121198229e-03f, -1.072683989e-02f, -1.358864998e-02f, -1.465511063e-02f, -1.283837811e-02f, -7.218032974e-03f, +2.746056734e-03f, +1.703568955e-02f, +3.497357657e-02f, +5.523092626e-02f, +7.595473490e-02f, +9.500210682e-02f, +1.102457583e-01f, +1.198979252e-01f, +1.227933696e-01f, +1.185779707e-01f, +1.077666013e-01f, +9.165906204e-02f, +7.213036784e-02f, +5.133565242e-02f, +3.138522609e-02f, +1.404878652e-02f, +5.390799677e-04f, -8.593163625e-03f, -1.344495466e-02f, -1.464295836e-02f, -1.315550266e-02f, -1.007819795e-02f, -6.436280622e-03f, -3.037483396e-03f, -3.940660499e-04f, +1.284327430e-03f, +2.040073771e-03f, +2.081863419e-03f, +1.689442964e-03f, +1.131073713e-03f, +6.082590345e-04f, +2.327625447e-04f, -4.564577659e-06f, -9.927174596e-06f, -1.517833682e-05f, -1.787376529e-05f, -1.514567628e-05f, -4.518961403e-06f, +1.508024918e-05f, +4.237501215e-05f, +7.314824287e-05f, +1.002864397e-04f, +1.146155658e-04f, +1.065062782e-04f, +6.801508365e-05f, -4.857641601e-06f, -1.103181681e-04f, -2.398511288e-04f, -3.785808125e-04f, -5.070357475e-04f, -6.041176459e-04f, -6.507776023e-04f, -6.336937015e-04f, -5.481829449e-04f, -3.996916520e-04f, -2.034758906e-04f, +1.754851234e-05f, +2.364205011e-04f, +4.265315589e-04f, +5.659549751e-04f, +6.408698258e-04f, +6.474396557e-04f, +5.918378714e-04f, +4.885012868e-04f, +3.570504884e-04f, +2.185614491e-04f, +9.195711480e-05f, -8.799239900e-06f, -7.625427805e-05f, -1.096094236e-04f, -1.136192096e-04f, -9.664228773e-05f, -6.836848933e-05f, -3.773782790e-05f, -1.144544108e-05f, +6.766816532e-06f, +1.604086273e-05f, +1.773704708e-05f, +1.445594466e-05f, +9.045437432e-06f, +2.183362251e-04f, +4.442578769e-05f, -6.020514417e-04f, -1.806891427e-03f, -3.348318733e-03f, -4.607577331e-03f, -4.660692205e-03f, -2.591220176e-03f, +2.041192303e-03f, +8.750377339e-03f, +1.592092242e-02f, +2.104038835e-02f, +2.140694225e-02f, +1.514610595e-02f, +2.187599639e-03f, -1.521485568e-02f, -3.273678699e-02f, -4.506827197e-02f, -4.756341708e-02f, -3.791923935e-02f, -1.726326477e-02f, +9.818406863e-03f, +3.642792983e-02f, +5.536472871e-02f, +6.134646874e-02f, +5.268331394e-02f, +3.181950540e-02f, +4.550865697e-03f, -2.180550164e-02f, -4.065079844e-02f, -4.799372367e-02f, -4.338815413e-02f, -2.968502079e-02f, -1.179033448e-02f, +5.056032590e-03f, +1.685859451e-02f, +2.180608554e-02f, +2.036587060e-02f, +1.464889962e-02f, +7.393513271e-03f, +9.845060845e-04f, -3.171554119e-03f, -4.788258580e-03f, -4.433122681e-03f, -3.056796308e-03f, -1.543368928e-03f, -4.376281033e-04f, +1.071243912e-04f, +1.598987474e-07f, +1.159389361e-05f, +2.883431423e-05f, +4.489845939e-05f, +4.811012979e-05f, +2.631648037e-05f, -2.639281442e-05f, -1.031538630e-04f, -1.816028521e-04f, -2.278471264e-04f, -2.075470058e-04f, -1.011095612e-04f, +8.285749660e-05f, +3.024266850e-04f, +4.899642325e-04f, +5.721753980e-04f, +4.967936220e-04f, +2.562184377e-04f, -1.019195666e-04f, -4.833846306e-04f, -7.742987235e-04f, -8.781920142e-04f, -7.501545301e-04f, -4.152167559e-04f, +3.666895974e-05f, +4.781673233e-04f, +7.852800500e-04f, +8.768840711e-04f, +7.391773030e-04f, +4.268648926e-04f, +4.162602116e-05f, -3.034061574e-04f, -5.199040306e-04f, -5.688154408e-04f, -4.658493838e-04f, -2.683198039e-04f, -5.032813447e-05f, +1.234617384e-04f, +2.161746624e-04f, +2.242282643e-04f, +1.705309043e-04f, +9.030718001e-05f, +1.621559433e-05f, -3.173121068e-05f, -4.898376114e-05f, -4.290415923e-05f, -2.597351020e-05f, -9.327090145e-06f, /* 2,30 (48) */ +5.282756130e-05f, +2.797519799e-04f, +6.820059812e-04f, +1.220083412e-03f, +1.767933583e-03f, +2.111291198e-03f, +1.975656490e-03f, +1.086404632e-03f, -7.454953658e-04f, -3.528100272e-03f, -7.006582663e-03f, -1.062033362e-02f, -1.352063490e-02f, -1.465996827e-02f, -1.294869628e-02f, -7.457884103e-03f, +2.367475921e-03f, +1.652865380e-02f, +3.436945893e-02f, +5.458014866e-02f, +7.532104120e-02f, +9.445392387e-02f, +1.098460666e-01f, +1.196944494e-01f, +1.228109182e-01f, +1.188143913e-01f, +1.081931329e-01f, +9.222501702e-02f, +7.277123767e-02f, +5.198309208e-02f, +3.197706396e-02f, +1.453728781e-02f, +8.961304561e-04f, -8.374602175e-03f, -1.335299754e-02f, -1.465175760e-02f, -1.323175694e-02f, -1.018780737e-02f, -6.549899832e-03f, -3.134125684e-03f, -4.624345392e-04f, +1.246589602e-03f, +2.028628330e-03f, +2.088630235e-03f, +1.705483827e-03f, +1.148810760e-03f, +6.227149792e-04f, +2.418079821e-04f, -4.414790764e-06f, -9.750642811e-06f, -1.503843121e-05f, -1.785671677e-05f, -1.534011438e-05f, -4.986422344e-06f, +1.433745413e-05f, +4.143960274e-05f, +7.219801774e-05f, +9.958133640e-05f, +1.144592400e-04f, +1.071860828e-04f, +6.973082794e-05f, -2.060909781e-06f, -1.065964465e-04f, -2.355723082e-04f, -3.742919618e-04f, -5.033878865e-04f, -6.017590106e-04f, -6.502347371e-04f, -6.352642376e-04f, -5.518632500e-04f, -4.051565071e-04f, -2.101170941e-04f, +1.052996006e-05f, +2.298854257e-04f, +4.212616238e-04f, +5.625270708e-04f, +6.395698761e-04f, +6.482313423e-04f, +5.943900778e-04f, +4.922659171e-04f, +3.613724853e-04f, +2.227974382e-04f, +9.557911602e-05f, -6.133495444e-06f, -7.467422635e-05f, -1.090475536e-04f, -1.138608472e-04f, -9.739424462e-05f, -6.932966021e-05f, -3.865695453e-05f, -1.215642107e-05f, +6.335117472e-06f, +1.587709547e-05f, +1.777450663e-05f, +1.460482609e-05f, +9.221479075e-06f, +2.184961239e-04f, +5.601968130e-05f, -5.732171275e-04f, -1.761992968e-03f, -3.300208604e-03f, -4.581260851e-03f, -4.687085019e-03f, -2.694374039e-03f, +1.859589451e-03f, +8.522530212e-03f, +1.571337542e-02f, +2.093927879e-02f, +2.148979975e-02f, +1.544853263e-02f, +2.677563871e-03f, -1.464268029e-02f, -3.223999336e-02f, -4.481205354e-02f, -4.766533665e-02f, -3.840262399e-02f, -1.803756349e-02f, +8.940214849e-03f, +3.567777530e-02f, +5.494951196e-02f, +6.138313770e-02f, +5.316148127e-02f, +3.260478545e-02f, +5.427749768e-03f, -2.106632434e-02f, -4.022393355e-02f, -4.795209765e-02f, -4.369156029e-02f, -3.020492482e-02f, -1.235914992e-02f, +4.590183206e-03f, +1.659027470e-02f, +2.175575740e-02f, +2.048933234e-02f, +1.486507428e-02f, +7.617741535e-03f, +1.155036989e-03f, -3.081246939e-03f, -4.772042985e-03f, -4.464853891e-03f, -3.105780069e-03f, -1.586273087e-03f, -4.636016135e-04f, +9.779730107e-05f, -7.525040422e-08f, +1.112777301e-05f, +2.826241838e-05f, +4.452293401e-05f, +4.833335192e-05f, +2.746179810e-05f, -2.430601068e-05f, -1.005755783e-04f, -1.794465983e-04f, -2.272519091e-04f, -2.094444104e-04f, -1.057400680e-04f, +7.627062286e-05f, +2.956574536e-04f, +4.853418550e-04f, +5.718143049e-04f, +5.017498821e-04f, +2.659025952e-04f, -8.979821280e-05f, -4.722463287e-04f, -7.676386936e-04f, -8.783935306e-04f, -7.576020354e-04f, -4.280558673e-04f, +2.200554834e-05f, +4.658332083e-04f, +7.786807920e-04f, +8.776076910e-04f, +7.465608329e-04f, +4.383273960e-04f, +5.361531476e-05f, -2.942196033e-04f, -5.156170440e-04f, -5.697959909e-04f, -4.708685948e-04f, -2.751886761e-04f, -5.674957623e-05f, +1.191527570e-04f, +2.146203664e-04f, +2.250786348e-04f, +1.728011389e-04f, +9.286579528e-05f, +1.819886387e-05f, -3.071051883e-05f, -4.885683791e-05f, -4.332554241e-05f, -2.654535421e-05f, -9.767473893e-06f, /* 2,31 (48) */ +4.841277053e-05f, +2.700013371e-04f, +6.669675500e-04f, +1.202226696e-03f, +1.752593469e-03f, +2.106304776e-03f, +1.989993944e-03f, +1.127844235e-03f, -6.732973481e-04f, -3.428518936e-03f, -6.892123423e-03f, -1.051314753e-02f, -1.345090407e-02f, -1.466202918e-02f, -1.305529273e-02f, -7.693456411e-03f, +1.993183960e-03f, +1.602526591e-02f, +3.376769992e-02f, +5.392991392e-02f, +7.468577696e-02f, +9.390206062e-02f, +1.094409101e-01f, +1.194843323e-01f, +1.228214481e-01f, +1.190442767e-01f, +1.086143945e-01f, +9.278754409e-02f, +7.341080754e-02f, +5.263132342e-02f, +3.257145404e-02f, +1.502955372e-02f, +1.257502941e-03f, -8.151804737e-03f, -1.325741842e-02f, -1.465789110e-02f, -1.330643117e-02f, -1.029685493e-02f, -6.663760679e-03f, -3.231519929e-03f, -5.317641994e-04f, +1.207932647e-03f, +2.016471909e-03f, +2.094965353e-03f, +1.721360922e-03f, +1.166585266e-03f, +6.373198053e-04f, +2.510294612e-04f, -4.266520574e-06f, -9.574142015e-06f, -1.489615403e-05f, -1.783443122e-05f, -1.552678732e-05f, -5.444930471e-06f, +1.360250026e-05f, +4.050800932e-05f, +7.124467603e-05f, +9.886406891e-05f, +1.142811527e-04f, +1.078360932e-04f, +7.141256319e-05f, +7.032857366e-07f, -1.028991279e-04f, -2.313033964e-04f, -3.699938620e-04f, -4.997098643e-04f, -5.993511841e-04f, -6.496292006e-04f, -6.367671050e-04f, -5.554809118e-04f, -4.105735155e-04f, -2.167329417e-04f, +3.510128802e-06f, +2.233226464e-04f, +4.159420831e-04f, +5.590356192e-04f, +6.382023119e-04f, +6.489612978e-04f, +5.968946951e-04f, +4.960023257e-04f, +3.656871562e-04f, +2.270449294e-04f, +9.922656802e-05f, -3.434800198e-06f, -7.306034295e-05f, -1.084565141e-04f, -1.140815919e-04f, -9.813493822e-05f, -7.028847262e-05f, -3.958040364e-05f, -1.287546454e-05f, +5.894492519e-06f, +1.570575921e-05f, +1.780699796e-05f, +1.475159068e-05f, +9.397733863e-06f, +2.184208735e-04f, +6.714745431e-05f, -5.449547091e-04f, -1.717470034e-03f, -3.251875252e-03f, -4.553799053e-03f, -4.711391030e-03f, -2.794949618e-03f, +1.680142853e-03f, +8.295278303e-03f, +1.550393101e-02f, +2.083353872e-02f, +2.156607037e-02f, +1.574419009e-02f, +3.162905726e-03f, -1.407086598e-02f, -3.173824348e-02f, -4.454615094e-02f, -4.775513486e-02f, -3.887487031e-02f, -1.880520218e-02f, +8.061821318e-03f, +3.492017326e-02f, +5.452145609e-02f, +6.140514325e-02f, +5.362731448e-02f, +3.338346624e-02f, +6.305357459e-03f, -2.031976351e-02f, -3.978560615e-02f, -4.789848234e-02f, -4.398577989e-02f, -3.072054186e-02f, -1.292894591e-02f, +4.119314611e-03f, +1.631508603e-02f, +2.169900783e-02f, +2.060848510e-02f, +1.507969465e-02f, +7.842820170e-03f, +1.327838128e-03f, -2.988381144e-03f, -4.753844121e-03f, -4.495564410e-03f, -3.154636907e-03f, -1.629598630e-03f, -4.901469677e-04f, +8.802982718e-05f, -3.030211128e-07f, +1.066792104e-05f, +2.769009656e-05f, +4.413533489e-05f, +4.853198241e-05f, +2.857587745e-05f, -2.224447147e-05f, -9.800087468e-05f, -1.772601301e-04f, -2.265914423e-04f, -2.112555732e-04f, -1.102912474e-04f, +6.972252126e-05f, +2.888598211e-04f, +4.806170152e-04f, +5.712966145e-04f, +5.065395392e-04f, +2.754656586e-04f, -7.770478446e-05f, -4.610216661e-04f, -7.607940572e-04f, -8.783629926e-04f, -7.648400958e-04f, -4.407740003e-04f, +7.335878262e-06f, +4.533676142e-04f, +7.718669222e-04f, +8.781008671e-04f, +7.537672688e-04f, +4.497141734e-04f, +6.564268988e-05f, -2.849053907e-04f, -5.111620793e-04f, -5.706234531e-04f, -4.757918698e-04f, -2.820361204e-04f, -6.321493412e-05f, +1.147623742e-04f, +2.129807855e-04f, +2.258666913e-04f, +1.750445952e-04f, +9.543065144e-05f, +2.020862008e-05f, -2.965876477e-05f, -4.870636224e-05f, -4.373606909e-05f, -2.711764488e-05f, -1.021445183e-05f, /* 3, 0 (48) */ +3.382425704e-04f, +1.348067834e-04f, -4.889424346e-04f, -1.466276588e-03f, -2.424363330e-03f, -2.730039057e-03f, -1.724598248e-03f, +9.008300509e-04f, +4.739031994e-03f, +8.514833164e-03f, +1.031793603e-02f, +8.256301383e-03f, +1.371724009e-03f, -9.514669115e-03f, -2.142432917e-02f, -2.960851385e-02f, -2.874512923e-02f, -1.466449091e-02f, +1.394439274e-02f, +5.448301361e-02f, +1.005300380e-01f, +1.431856698e-01f, +1.733482814e-01f, +1.842374374e-01f, +1.733482814e-01f, +1.431856698e-01f, +1.005300380e-01f, +5.448301361e-02f, +1.394439274e-02f, -1.466449091e-02f, -2.874512923e-02f, -2.960851385e-02f, -2.142432917e-02f, -9.514669115e-03f, +1.371724009e-03f, +8.256301383e-03f, +1.031793603e-02f, +8.514833164e-03f, +4.739031994e-03f, +9.008300509e-04f, -1.724598248e-03f, -2.730039057e-03f, -2.424363330e-03f, -1.466276588e-03f, -4.889424346e-04f, +1.348067834e-04f, +3.382425704e-04f, +2.622641023e-04f, +8.167179641e-07f, +1.236605420e-05f, +2.592907112e-05f, +3.300060303e-05f, +2.376427225e-05f, -7.333155539e-06f, -5.585024780e-05f, -1.047561226e-04f, -1.277317531e-04f, -9.889919355e-05f, -6.305860108e-06f, +1.362752771e-04f, +2.854709206e-04f, +3.765653018e-04f, +3.435785237e-04f, +1.454749231e-04f, -2.110969350e-04f, -6.625373850e-04f, -1.098675471e-03f, -1.391969581e-03f, -1.437136486e-03f, -1.187809005e-03f, -6.766902606e-04f, -1.084600706e-05f, +6.575069420e-04f, +1.175413611e-03f, +1.433843904e-03f, +1.397561162e-03f, +1.110650867e-03f, +6.770559685e-04f, +2.242442057e-04f, -1.365456772e-04f, -3.399932180e-04f, -3.777178872e-04f, -2.895631068e-04f, -1.411350845e-04f, +2.455154195e-06f, +9.697442048e-05f, +1.277273734e-04f, +1.060154541e-04f, +5.749286536e-05f, +8.641971212e-06f, -2.313094698e-05f, -3.300519509e-05f, -2.630090367e-05f, -1.279394254e-05f, -1.093779023e-06f, +4.569541687e-06f, -7.823217465e-04f, -9.084685290e-04f, -9.527730581e-05f, +1.939581772e-03f, +4.521325238e-03f, +5.889778654e-03f, +3.972523948e-03f, -2.097746258e-03f, -1.059839761e-02f, -1.714075782e-02f, -1.654476645e-02f, -6.064599171e-03f, +1.185220802e-02f, +2.935028356e-02f, +3.641246564e-02f, +2.636698292e-02f, +6.586074871e-04f, -3.028063400e-02f, -5.133665227e-02f, -5.043564613e-02f, -2.556515975e-02f, +1.309926646e-02f, +4.764810534e-02f, +6.141247912e-02f, +4.764810534e-02f, +1.309926646e-02f, -2.556515975e-02f, -5.043564613e-02f, -5.133665227e-02f, -3.028063400e-02f, +6.586074871e-04f, +2.636698292e-02f, +3.641246564e-02f, +2.935028356e-02f, +1.185220802e-02f, -6.064599171e-03f, -1.654476645e-02f, -1.714075782e-02f, -1.059839761e-02f, -2.097746258e-03f, +3.972523948e-03f, +5.889778654e-03f, +4.521325238e-03f, +1.939581772e-03f, -9.527730581e-05f, -9.084685290e-04f, -7.823217465e-04f, -3.493719860e-04f, +1.207582970e-05f, -7.181807980e-06f, -4.436800841e-05f, -7.843946816e-05f, -7.358044464e-05f, -2.500652728e-06f, +1.238811450e-04f, +2.431713521e-04f, +2.638049775e-04f, +1.207343630e-04f, -1.652856064e-04f, -4.682220434e-04f, -6.050322369e-04f, -4.385471672e-04f, +2.078504744e-05f, +5.833325336e-04f, +9.558098825e-04f, +8.968475170e-04f, +3.682537994e-04f, -4.129216663e-04f, -1.066580545e-03f, -1.246399629e-03f, -8.336386060e-04f, -1.403262768e-05f, +8.124734222e-04f, +1.242276557e-03f, +1.080734367e-03f, +4.373988820e-04f, -3.459355243e-04f, -8.869413989e-04f, -9.613405219e-04f, -5.994210138e-04f, -3.819750226e-05f, +4.280763606e-04f, +6.048271801e-04f, +4.759656788e-04f, +1.753901006e-04f, -1.135609871e-04f, -2.619740203e-04f, -2.457850786e-04f, -1.281625351e-04f, -8.067819448e-07f, +7.243049474e-05f, +7.907266217e-05f, +4.564423467e-05f, +8.126265744e-06f, -1.179589871e-05f, -1.279054036e-05f, /* 3, 1 (48) */ +3.390592884e-04f, +1.471728376e-04f, -4.630133635e-04f, -1.433275985e-03f, -2.400599057e-03f, -2.737372213e-03f, -1.780448496e-03f, +7.960739283e-04f, +4.611300241e-03f, +8.415933970e-03f, +1.031163017e-02f, +8.392576660e-03f, +1.657194930e-03f, -9.138103813e-03f, -2.108075065e-02f, -2.946303892e-02f, -2.895622617e-02f, -1.532702830e-02f, +1.284571727e-02f, +5.309104403e-02f, +9.909290155e-02f, +1.419978608e-01f, +1.726715912e-01f, +1.842265914e-01f, +1.740057884e-01f, +1.443610834e-01f, +1.019638819e-01f, +5.588057478e-02f, +1.505504361e-02f, -1.398743494e-02f, -2.852088503e-02f, -2.974505952e-02f, -2.176432239e-02f, -9.892387002e-03f, +1.082160902e-03f, +8.115166299e-03f, +1.032039119e-02f, +8.611807584e-03f, +4.866759367e-03f, +1.006845505e-03f, -1.667105383e-03f, -2.721397086e-03f, -2.447494277e-03f, -1.499281783e-03f, -5.152433383e-04f, +1.220128409e-04f, +3.371487914e-04f, +2.668336440e-04f, +5.459948177e-07f, +1.194052812e-05f, +2.555103579e-05f, +3.297974244e-05f, +2.437540135e-05f, -6.042442799e-06f, -5.420884075e-05f, -1.034714787e-04f, -1.276843902e-04f, -1.007595192e-04f, -1.010520338e-05f, +1.314238026e-04f, +2.813221715e-04f, +3.752894788e-04f, +3.469985528e-04f, +1.542445587e-04f, -1.980463138e-04f, -6.480053926e-04f, -1.086558738e-03f, -1.386130709e-03f, -1.440134762e-03f, -1.199942416e-03f, -6.957186340e-04f, -3.253550840e-05f, +6.381729614e-04f, +1.162758543e-03f, +1.430256781e-03f, +1.402902931e-03f, +1.122481066e-03f, +6.915572233e-04f, +2.374852913e-04f, -1.274579203e-04f, -3.362419967e-04f, -3.787454085e-04f, -2.935965438e-04f, -1.460014508e-04f, -1.446014787e-06f, +9.498517043e-05f, +1.276705727e-04f, +1.072485805e-04f, +5.913597559e-05f, +9.968556543e-06f, -2.247537575e-05f, -3.299323754e-05f, -2.666621724e-05f, -1.322398717e-05f, -1.377130203e-06f, +4.490041168e-06f, -7.702459168e-04f, -9.156503370e-04f, -1.396453142e-04f, +1.861142303e-03f, +4.447744793e-03f, +5.887278001e-03f, +4.096405093e-03f, -1.854574906e-03f, -1.033459263e-02f, -1.702002346e-02f, -1.671005206e-02f, -6.532821215e-03f, +1.124717579e-02f, +2.891173640e-02f, +3.643325068e-02f, +2.695031545e-02f, +1.614417370e-03f, -2.938378648e-02f, -5.096839847e-02f, -5.084856780e-02f, -2.663174030e-02f, +1.185286683e-02f, +4.681446674e-02f, +6.139844650e-02f, +4.846057877e-02f, +1.434154302e-02f, -2.448442539e-02f, -4.999824725e-02f, -5.168258780e-02f, -3.116757540e-02f, -3.027330347e-04f, +2.576756190e-02f, +3.637426813e-02f, +2.977835992e-02f, +1.245703520e-02f, -5.588633492e-03f, -1.636937635e-02f, -1.725431881e-02f, -1.086037163e-02f, -2.343531337e-03f, +3.844361413e-03f, +5.888971872e-03f, +4.593755732e-03f, +2.018654434e-03f, -4.963307114e-05f, -9.003422633e-04f, -7.941176452e-04f, -3.621625263e-04f, +1.233653283e-05f, -6.256675746e-06f, -4.309016406e-05f, -7.776765626e-05f, -7.466243631e-05f, -5.749470101e-06f, +1.195956183e-04f, +2.404591937e-04f, +2.654686322e-04f, +1.277587669e-04f, -1.552029443e-04f, -4.603124626e-04f, -6.049282845e-04f, -4.487161370e-04f, +3.482797389e-06f, +5.670541940e-04f, +9.498402261e-04f, +9.062725306e-04f, +3.903108881e-04f, -3.883171580e-04f, -1.051944096e-03f, -1.249917253e-03f, -8.543876214e-04f, -4.209082247e-05f, +7.909024357e-04f, +1.237549266e-03f, +1.094397381e-03f, +4.617360196e-04f, -3.233665128e-04f, -8.765571829e-04f, -9.664270613e-04f, -6.153101469e-04f, -5.571174430e-05f, +4.173070169e-04f, +6.043106357e-04f, +4.835375958e-04f, +1.855110352e-04f, -1.062410242e-04f, -2.599747520e-04f, -2.482974822e-04f, -1.324370954e-04f, -4.171674522e-06f, +7.121214734e-05f, +7.966604217e-05f, +4.691785108e-05f, +9.089735452e-06f, -1.149649446e-05f, -1.295244630e-05f, /* 3, 2 (48) */ +3.396052832e-04f, +1.591133657e-04f, -4.374623277e-04f, -1.400296242e-03f, -2.376223656e-03f, -2.743414655e-03f, -1.834657337e-03f, +6.926024496e-04f, +4.483615851e-03f, +8.315174451e-03f, +1.030152497e-02f, +8.524000463e-03f, +1.938517101e-03f, -8.762814334e-03f, -2.073375210e-02f, -2.930879436e-02f, -2.915427248e-02f, -1.597503369e-02f, +1.175915853e-02f, +5.170491332e-02f, +9.765276679e-02f, +1.407979183e-01f, +1.719758725e-01f, +1.841940559e-01f, +1.746439613e-01f, +1.455238419e-01f, +1.033941387e-01f, +5.728347771e-02f, +1.617752467e-02f, -1.329587772e-02f, -2.828339973e-02f, -2.987251744e-02f, -2.210056439e-02f, -1.027113241e-02f, +7.885643586e-04f, +7.969164848e-03f, +1.031894517e-02f, +8.706792755e-03f, +4.994429940e-03f, +1.114094085e-03f, -1.607969408e-03f, -2.711428529e-03f, -2.469969652e-03f, -1.532275021e-03f, -5.419095556e-04f, +1.087888537e-04f, +3.357716612e-04f, +2.713236852e-04f, +2.816527132e-07f, +1.151756553e-05f, +2.516711215e-05f, +3.294289841e-05f, +2.496439415e-05f, -4.770153257e-06f, -5.256935211e-05f, -1.021624150e-04f, -1.275859766e-04f, -1.025554528e-04f, -1.385231473e-05f, +1.265824125e-04f, +2.771190438e-04f, +3.738922690e-04f, +3.502539917e-04f, +1.628535423e-04f, -1.850951294e-04f, -6.334638925e-04f, -1.074304548e-03f, -1.380047129e-03f, -1.442839046e-03f, -1.211811609e-03f, -7.145878244e-04f, -5.421747208e-05f, +6.186926465e-04f, +1.149846182e-03f, +1.426374959e-03f, +1.407992425e-03f, +1.134162233e-03f, +7.060372125e-04f, +2.508173099e-04f, -1.182128095e-04f, -3.323242692e-04f, -3.796460644e-04f, -2.975690434e-04f, -1.508725802e-04f, -5.396717026e-06f, +9.293143999e-05f, +1.275606867e-04f, +1.084546092e-04f, +6.077885086e-05f, +1.131256524e-05f, -2.179751896e-05f, -3.296445351e-05f, -2.702469411e-05f, -1.365597741e-05f, -1.666719010e-06f, +4.404678912e-06f, -7.579093840e-04f, -9.219070127e-04f, -1.827354783e-04f, +1.783374647e-03f, +4.373082357e-03f, +5.881528531e-03f, +4.216000711e-03f, -1.614115712e-03f, -1.006912400e-02f, -1.689226469e-02f, -1.686525500e-02f, -6.993133677e-03f, +1.064224750e-02f, +2.846302026e-02f, +3.643673348e-02f, +2.751736964e-02f, +2.564257596e-03f, -2.847751395e-02f, -5.057808759e-02f, -5.123688496e-02f, -2.768368439e-02f, +1.060294958e-02f, +4.596007912e-02f, +6.135635567e-02f, +4.925148120e-02f, +1.557909228e-02f, -2.339002800e-02f, -4.953651123e-02f, -5.200595431e-02f, -3.204413258e-02f, -1.269160096e-03f, +2.515225176e-02f, +3.631855639e-02f, +3.019566694e-02f, +1.306134584e-02f, -5.105095897e-03f, -1.618386532e-02f, -1.736055983e-02f, -1.112034638e-02f, -2.591828819e-03f, +3.711924318e-03f, +5.884800197e-03f, +4.664967880e-03f, +2.098320476e-03f, -2.715220056e-06f, -8.912525278e-04f, -8.056141397e-04f, -3.751149726e-04f, +1.257826480e-05f, -5.351160797e-06f, -4.181167602e-05f, -7.705842929e-05f, -7.567694817e-05f, -8.938566172e-06f, +1.153086141e-04f, +2.376515187e-04f, +2.669660816e-04f, +1.346319256e-04f, -1.451474416e-04f, -4.522427527e-04f, -6.045179545e-04f, -4.585801599e-04f, -1.370094375e-05f, +5.505955327e-04f, +9.434368467e-04f, +9.152137016e-04f, +4.120965150e-04f, -3.635981751e-04f, -1.036833437e-03f, -1.252828523e-03f, -8.747103281e-04f, -7.012783938e-05f, +7.689362327e-04f, +1.232219304e-03f, +1.107561650e-03f, +4.859203331e-04f, -3.005573838e-04f, -8.656981442e-04f, -9.710646329e-04f, -6.309905005e-04f, -7.331924678e-05f, +4.062426254e-04f, +6.034802808e-04f, +4.909320686e-04f, +1.956429568e-04f, -9.877697198e-05f, -2.578062539e-04f, -2.507056983e-04f, -1.367021002e-04f, -7.592810238e-06f, +6.992500318e-05f, +8.021841976e-05f, +4.818784893e-05f, +1.007188154e-05f, -1.117738321e-05f, -1.310576536e-05f, /* 3, 3 (48) */ +3.398869359e-04f, +1.706309313e-04f, -4.122952156e-04f, -1.367353344e-03f, -2.351259262e-03f, -2.748184809e-03f, -1.887226689e-03f, +5.904400346e-04f, +4.356029874e-03f, +8.212618998e-03f, +1.028767266e-02f, +8.650582875e-03f, +2.215636145e-03f, -8.388922065e-03f, -2.038349811e-02f, -2.914594082e-02f, -2.933936761e-02f, -1.660849758e-02f, +1.068485398e-02f, +5.032486620e-02f, +9.620992774e-02f, +1.395861067e-01f, +1.712612847e-01f, +1.841398384e-01f, +1.752626540e-01f, +1.466736881e-01f, +1.048205137e-01f, +5.869147013e-02f, +1.731168690e-02f, -1.258984051e-02f, -2.803258242e-02f, -2.999073025e-02f, -2.243288866e-02f, -1.065077847e-02f, +4.909953152e-04f, +7.818292268e-03f, +1.031354846e-02f, +8.799724195e-03f, +5.121990627e-03f, +1.222548695e-03f, -1.547190557e-03f, -2.700115964e-03f, -2.491767171e-03f, -1.565239474e-03f, -5.689342497e-04f, +9.513287631e-05f, +3.341049422e-04f, +2.757283641e-04f, +2.373016503e-08f, +1.109736287e-05f, +2.477761287e-05f, +3.289035984e-05f, +2.553132036e-05f, -3.516594185e-06f, -5.093247959e-05f, -1.008298234e-04f, -1.274372170e-04f, -1.042870754e-04f, -1.754635521e-05f, +1.217528356e-04f, +2.728637187e-04f, +3.723755467e-04f, +3.533455744e-04f, +1.713008898e-04f, -1.722461206e-04f, -6.189167668e-04f, -1.061916802e-03f, -1.373721479e-03f, -1.445249734e-03f, -1.223414427e-03f, -7.332936410e-04f, -7.588687551e-05f, +5.990703682e-04f, +1.136678987e-03f, +1.422198365e-03f, +1.412827242e-03f, +1.145690556e-03f, +7.204919830e-04f, +2.642373334e-04f, -1.088115592e-04f, -3.282394937e-04f, -3.804180795e-04f, -3.014784169e-04f, -1.557466555e-04f, -9.395992526e-06f, +9.081325215e-05f, +1.273970654e-04f, +1.096326479e-04f, +6.242075398e-05f, +1.267363801e-05f, -2.109734737e-05f, -3.291857052e-05f, -2.737601512e-05f, -1.408969792e-05f, -1.962488206e-06f, +4.313389282e-06f, -7.453311192e-04f, -9.272581735e-04f, -2.245471543e-04f, +1.706316218e-03f, +4.297405409e-03f, +5.872589965e-03f, +4.331309326e-03f, -1.376464193e-03f, -9.802157915e-03f, -1.675763276e-02f, -1.701040245e-02f, -7.445376430e-03f, +1.003772955e-02f, +2.800444010e-02f, +3.642303254e-02f, +2.806796518e-02f, +3.507694442e-03f, -2.756230025e-02f, -5.016599107e-02f, -5.160048313e-02f, -2.872051783e-02f, +9.350121055e-03f, +4.508536879e-02f, +6.128622784e-02f, +5.002041744e-02f, +1.681131159e-02f, -2.228246635e-02f, -4.905059090e-02f, -5.230651169e-02f, -3.290983073e-02f, -2.240224729e-03f, +2.452126126e-02f, +3.624523714e-02f, +3.060190957e-02f, +1.366482612e-02f, -4.614163828e-03f, -1.598822236e-02f, -1.745933680e-02f, -1.137815263e-02f, -2.842534517e-03f, +3.575222217e-03f, +5.877207387e-03f, +4.734892883e-03f, +2.178538896e-03f, +4.547262888e-05f, -8.811806463e-04f, -8.167915229e-04f, -3.882207380e-04f, +1.280129310e-05f, -4.465533215e-06f, -4.053350083e-05f, -7.631299584e-05f, -7.662449684e-05f, -1.206689233e-05f, +1.110227562e-04f, +2.347512644e-04f, +2.682985099e-04f, +1.413516791e-04f, -1.351243585e-04f, -4.440187700e-04f, -6.038040284e-04f, -4.681363162e-04f, -3.075798926e-05f, +5.339661313e-04f, +9.366052454e-04f, +9.236685619e-04f, +4.336005838e-04f, -3.387775609e-04f, -1.021257219e-03f, -1.255132848e-03f, -8.945968170e-04f, -9.812957267e-05f, +7.465856134e-04f, +1.226288538e-03f, +1.120219483e-03f, +5.099391233e-04f, -2.775189198e-04f, -8.543678256e-04f, -9.752485870e-04f, -6.464527035e-04f, -9.101137782e-05f, +3.948868638e-04f, +6.023339503e-04f, +4.981434225e-04f, +2.057803530e-04f, -9.117143940e-05f, -2.554676994e-04f, -2.530068907e-04f, -1.409547922e-04f, -1.106891903e-05f, +6.856870388e-05f, +8.072861528e-05f, +4.945320309e-05f, +1.107234635e-05f, -1.083834336e-05f, -1.325010149e-05f, /* 3, 4 (48) */ +3.399106661e-04f, +1.817282941e-04f, -3.875176027e-04f, -1.334462984e-03f, -2.325727942e-03f, -2.751701403e-03f, -1.938159169e-03f, +4.896102112e-04f, +4.228592657e-03f, +8.108331923e-03f, +1.027012630e-02f, +8.772335711e-03f, +2.488499864e-03f, -8.016546519e-03f, -2.003015253e-02f, -2.897463993e-02f, -2.951161373e-02f, -1.722741435e-02f, +9.622937179e-03f, +4.895114472e-02f, +9.476467801e-02f, +1.383626923e-01f, +1.705279911e-01f, +1.840639515e-01f, +1.758617243e-01f, +1.478103671e-01f, +1.062427120e-01f, +6.010429737e-02f, +1.845737746e-02f, -1.186934853e-02f, -2.776834509e-02f, -3.009954181e-02f, -2.276112815e-02f, -1.103119655e-02f, +1.895168983e-04f, +7.662545612e-03f, +1.030415246e-02f, +8.890537447e-03f, +5.249387692e-03f, +1.332181343e-03f, -1.484769803e-03f, -2.687442326e-03f, -2.512864519e-03f, -1.598158045e-03f, -5.963102648e-04f, +8.104317839e-05f, +3.321424540e-04f, +2.800417534e-04f, -2.277388815e-07f, +1.068011173e-05f, +2.438284863e-05f, +3.282241924e-05f, +2.607625943e-05f, -2.282059878e-06f, -4.929891051e-05f, -9.947459474e-05f, -1.272388292e-04f, -1.059544931e-04f, -2.118651621e-05f, +1.169367772e-04f, +2.685583734e-04f, +3.707412088e-04f, +3.562740812e-04f, +1.795856748e-04f, -1.595019776e-04f, -6.043678766e-04f, -1.049399420e-03f, -1.367156457e-03f, -1.447367298e-03f, -1.234748787e-03f, -7.518319412e-04f, -9.753869981e-05f, +5.793105393e-04f, +1.123259489e-03f, +1.417727002e-03f, +1.417405042e-03f, +1.157062250e-03f, +7.349175668e-04f, +2.777423880e-04f, -9.925544176e-05f, -3.239871777e-04f, -3.810597053e-04f, -3.053224756e-04f, -1.606218381e-04f, -1.344285118e-05f, +8.863065662e-05f, +1.271790738e-04f, +1.107818055e-04f, +6.406093845e-05f, +1.405140252e-05f, -2.037484222e-05f, -3.285532073e-05f, -2.771985991e-05f, -1.452492876e-05f, -2.264375771e-06f, +4.216109366e-06f, -7.325298261e-04f, -9.317237067e-04f, -2.650806551e-04f, +1.630003222e-03f, +4.220780912e-03f, +5.860523072e-03f, +4.442332082e-03f, -1.141712929e-03f, -9.533859405e-03f, -1.661628108e-02f, -1.714552680e-02f, -7.889395200e-03f, +9.433925520e-03f, +2.753630378e-02f, +3.639227455e-02f, +2.860193131e-02f, +4.444299688e-03f, -2.663863169e-02f, -4.973239049e-02f, -5.193926069e-02f, -2.974177505e-02f, +8.094988206e-03f, +4.419077197e-02f, +6.118809826e-02f, +5.076700305e-02f, +1.803760013e-02f, -2.116224687e-02f, -4.854065178e-02f, -5.258403061e-02f, -3.376419855e-02f, -3.215473316e-03f, +2.387480855e-02f, +3.615422576e-02f, +3.099679643e-02f, +1.426716007e-02f, -4.116020405e-03f, -1.578244201e-02f, -1.755050824e-02f, -1.163362033e-02f, -3.095541408e-03f, +3.434267425e-03f, +5.866138468e-03f, +4.803461587e-03f, +2.259267511e-03f, +9.492583196e-05f, -8.701082999e-04f, -8.276298662e-04f, -4.014708395e-04f, +1.300589560e-05f, -3.600041585e-06f, -3.925657677e-05f, -7.553256929e-05f, -7.750563625e-05f, -1.513345528e-05f, +1.067406320e-04f, +2.317613882e-04f, +2.694671867e-04f, +1.479159801e-04f, -1.251388857e-04f, -4.356464065e-04f, -6.027894352e-04f, -4.773818773e-04f, -4.768027379e-05f, +5.171756103e-04f, +9.293511264e-04f, +9.316349126e-04f, +4.548131826e-04f, -3.138681769e-04f, -1.005224319e-03f, -1.256829962e-03f, -9.140374150e-04f, -1.260819359e-04f, +7.238615871e-04f, +1.219759154e-03f, +1.132363442e-03f, +5.337797449e-04f, -2.542620618e-04f, -8.425700365e-04f, -9.789744964e-04f, -6.616874512e-04f, -1.087794048e-04f, +3.832435974e-04f, +6.008696396e-04f, +5.051660376e-04f, +2.159176551e-04f, -8.342714677e-05f, -2.529583551e-04f, -2.551982542e-04f, -1.451923846e-04f, -1.459867564e-05f, +6.714293286e-05f, +8.119545879e-05f, +5.071287250e-05f, +1.209074997e-05f, -1.047916587e-05f, -1.338505782e-05f, /* 3, 5 (48) */ +3.396829272e-04f, +1.924084059e-04f, -3.631347541e-04f, -1.301640565e-03f, -2.299651682e-03f, -2.753983463e-03f, -1.987458079e-03f, +3.901356165e-04f, +4.101353828e-03f, +8.002377430e-03f, +1.024893978e-02f, +8.889272488e-03f, +2.757058237e-03f, -7.645805310e-03f, -1.967387845e-02f, -2.879505426e-02f, -2.967111571e-02f, -1.783178223e-02f, +8.573537759e-03f, +4.758398826e-02f, +9.331731071e-02f, +1.371279435e-01f, +1.697761591e-01f, +1.839664128e-01f, +1.764410349e-01f, +1.489336266e-01f, +1.076604390e-01f, +6.152170242e-02f, +1.961443971e-02f, -1.113443096e-02f, -2.749060270e-02f, -3.019879725e-02f, -2.308511533e-02f, -1.141225626e-02f, -1.158055773e-04f, +7.501923774e-03f, +1.029070961e-02f, +8.979168103e-03f, +5.376566766e-03f, +1.442963148e-03f, -1.420708864e-03f, -2.673390924e-03f, -2.533239361e-03f, -1.631013365e-03f, -6.240301247e-04f, +6.651824963e-05f, +3.298780782e-04f, +2.842578627e-04f, -4.727250007e-07f, +1.026599884e-05f, +2.398312798e-05f, +3.273937254e-05f, +2.659930036e-05f, -1.066831678e-06f, -4.766932167e-05f, -9.809761845e-05f, -1.269915428e-04f, -1.075578371e-04f, -2.477201947e-05f, +1.121359191e-04f, +2.642051807e-04f, +3.689911742e-04f, +3.590403383e-04f, +1.877070282e-04f, -1.468653409e-04f, -5.898210613e-04f, -1.036756339e-03f, -1.360354815e-03f, -1.449192291e-03f, -1.245812685e-03f, -7.701986314e-04f, -1.191679313e-04f, +5.594176131e-04f, +1.109590290e-03f, +1.412960956e-03f, +1.421723547e-03f, +1.168273555e-03f, +7.493099823e-04f, +2.913294552e-04f, -8.954578688e-05f, -3.195668788e-04f, -3.815692209e-04f, -3.090990316e-04f, -1.654962695e-04f, -1.753627284e-05f, +8.638373006e-05f, +1.269060919e-04f, +1.119011921e-04f, +6.569864863e-05f, +1.544547346e-05f, -1.962999545e-05f, -3.277444107e-05f, -2.805590700e-05f, -1.496144545e-05f, -2.572314865e-06f, +4.112779054e-06f, -7.195239305e-04f, -9.353237483e-04f, -3.043372319e-04f, +1.554470653e-03f, +4.143275275e-03f, +5.845389617e-03f, +4.549072714e-03f, -9.099515406e-04f, -9.264392218e-03f, -1.646836510e-02f, -1.727066569e-02f, -8.325041607e-03f, +8.831136085e-03f, +2.705892191e-02f, +3.634459427e-02f, +2.911910692e-02f, +5.373650814e-03f, -2.570699678e-02f, -4.927757730e-02f, -5.225312887e-02f, -3.074699937e-02f, +6.838158244e-03f, +4.327673456e-02f, +6.106201633e-02f, +5.149086464e-02f, +1.925735928e-02f, -2.002988343e-02f, -4.800687203e-02f, -5.283829268e-02f, -3.460676859e-02f, -4.194447812e-03f, +2.321312110e-02f, +3.604544636e-02f, +3.138004003e-02f, +1.486802971e-02f, -3.610854368e-03f, -1.556652435e-02f, -1.763393539e-02f, -1.188657869e-02f, -3.350739662e-03f, +3.289075041e-03f, +5.851539792e-03f, +4.870604520e-03f, +2.340462970e-03f, +1.456387045e-04f, -8.580175499e-04f, -8.381090321e-04f, -4.148558973e-04f, +1.319236015e-05f, -2.754913188e-06f, -3.798182344e-05f, -7.471836679e-05f, -7.832095665e-05f, -1.813731700e-05f, +1.024647908e-04f, +2.286848653e-04f, +2.704734651e-04f, +1.543228943e-04f, -1.151961420e-04f, -4.271315862e-04f, -6.014772487e-04f, -4.863143052e-04f, -6.445985719e-05f, +5.002336227e-04f, +9.216803928e-04f, +9.391108251e-04f, +4.757245889e-04f, -2.888828959e-04f, -9.887438369e-04f, -1.257919916e-03f, -9.330226906e-04f, -1.539708695e-04f, +7.007753656e-04f, +1.212633655e-03f, +1.143986344e-03f, +5.574296133e-04f, -2.307979033e-04f, -8.303088519e-04f, -9.822381595e-04f, -6.766855115e-04f, -1.266144987e-04f, +3.713168784e-04f, +5.990855072e-04f, +5.119943527e-04f, +2.260492410e-04f, -7.554692499e-05f, -2.502775821e-04f, -2.572770162e-04f, -1.494120619e-04f, -1.818069976e-05f, +6.564741609e-05f, +8.161779110e-05f, +5.196580074e-05f, +1.312669022e-05f, -1.009965468e-05f, -1.351023705e-05f, /* 3, 6 (48) */ +3.392102022e-04f, +2.026744047e-04f, -3.391516261e-04f, -1.268901192e-03f, -2.273052382e-03f, -2.755050294e-03f, -2.035127401e-03f, +2.920379980e-04f, +3.974362285e-03f, +7.894819592e-03f, +1.022416777e-02f, +9.001408407e-03f, +3.021263418e-03f, -7.276814136e-03f, -1.931483811e-02f, -2.860734723e-02f, -2.981798105e-02f, -1.842160329e-02f, +7.536781420e-03f, +4.622363344e-02f, +9.186811842e-02f, +1.358821308e-01f, +1.690059605e-01f, +1.838472449e-01f, +1.770004525e-01f, +1.500432169e-01f, +1.090734000e-01f, +6.294342596e-02f, +2.078271327e-02f, -1.038512098e-02f, -2.719927325e-02f, -3.028834304e-02f, -2.340468221e-02f, -1.179382548e-02f, -4.249046089e-04f, +7.336427504e-03f, +1.027317334e-02f, +9.065551833e-03f, +5.503472858e-03f, +1.554864340e-03f, -1.355010216e-03f, -2.657945450e-03f, -2.552869356e-03f, -1.663787806e-03f, -6.520860317e-04f, +5.155680418e-05f, +3.273057633e-04f, +2.883706418e-04f, -7.112032361e-07f, +9.855206040e-06f, +2.357875726e-05f, +3.264151887e-05f, +2.710054154e-05f, +1.288219903e-07f, -4.604437911e-05f, -9.669978219e-05f, -1.266960993e-04f, -1.090972631e-04f, -2.830211710e-05f, +1.073519189e-04f, +2.598063079e-04f, +3.671273824e-04f, +3.616452175e-04f, +1.956641385e-04f, -1.343388010e-04f, -5.752801377e-04f, -1.023991514e-03f, -1.353319360e-03f, -1.450725344e-03f, -1.256604192e-03f, -7.883896686e-04f, -1.407695631e-04f, +5.393960823e-04f, +1.095674065e-03f, +1.407900393e-03f, +1.425780546e-03f, +1.179320741e-03f, +7.636652355e-04f, +3.049954720e-04f, -7.968398176e-05f, -3.149782048e-04f, -3.819449340e-04f, -3.128058986e-04f, -1.703680708e-04f, -2.167520746e-05f, +8.407257635e-05f, +1.265775157e-04f, +1.129899195e-04f, +6.733312003e-05f, +1.685545253e-05f, -1.886280976e-05f, -3.267567353e-05f, -2.838383397e-05f, -1.539901900e-05f, -2.886233797e-06f, +4.003341125e-06f, -7.063315703e-04f, -9.380786615e-04f, -3.423190553e-04f, +1.479752286e-03f, +4.064954319e-03f, +5.827252300e-03f, +4.651537505e-03f, -6.812666753e-04f, -8.993918753e-03f, -1.631404221e-02f, -1.738586183e-02f, -8.752173193e-03f, +8.229658837e-03f, +2.657260760e-02f, +3.628013442e-02f, +2.961934054e-02f, +6.295331207e-03f, -2.476788595e-02f, -4.880185272e-02f, -5.254201177e-02f, -3.173574321e-02f, +5.580238328e-03f, +4.234371187e-02f, +6.090804546e-02f, +5.219164000e-02f, +2.046999293e-02f, -1.888589709e-02f, -4.744944242e-02f, -5.306909058e-02f, -3.543707744e-02f, -5.176685972e-03f, +2.253643559e-02f, +3.591883186e-02f, +3.175135691e-02f, +1.546711522e-02f, -3.098860015e-03f, -1.534047511e-02f, -1.770948231e-02f, -1.213685627e-02f, -3.608016678e-03f, +3.139662979e-03f, +5.833359092e-03f, +4.936251936e-03f, +2.422080761e-03f, +1.976045052e-04f, -8.448908597e-04f, -8.482086868e-04f, -4.283661344e-04f, +1.336098404e-05f, -1.930354200e-06f, -3.671014137e-05f, -7.387160839e-05f, -7.907108373e-05f, -2.107759459e-05f, +9.819774306e-05f, +2.255246866e-04f, +2.713187798e-04f, +1.605706006e-04f, -1.053011715e-04f, -4.184802618e-04f, -5.998706843e-04f, -4.949312534e-04f, -8.108892828e-05f, +4.831498493e-04f, +9.135991424e-04f, +9.460946405e-04f, +4.963252740e-04f, -2.638345942e-04f, -9.718250891e-04f, -1.258403080e-03f, -9.515434587e-04f, -1.817823486e-04f, +6.773383576e-04f, +1.204914861e-03f, +1.155081271e-03f, +5.808762122e-04f, -2.071376851e-04f, -8.175886110e-04f, -9.850356039e-04f, -6.914377299e-04f, -1.445077386e-04f, +3.591109445e-04f, +5.969798764e-04f, +5.186228688e-04f, +2.361694382e-04f, -6.753371491e-05f, -2.474248378e-04f, -2.592404393e-04f, -1.536109821e-04f, -2.181355622e-05f, +6.408192298e-05f, +8.199446477e-05f, +5.321091650e-05f, +1.417974247e-05f, -9.699627145e-06f, -1.362524182e-05f, /* 3, 7 (48) */ +3.384989990e-04f, +2.125296108e-04f, -3.155728688e-04f, -1.236259674e-03f, -2.245951840e-03f, -2.754921472e-03f, -2.081171780e-03f, +1.953382158e-04f, +3.847666186e-03f, +7.785722329e-03f, +1.019586565e-02f, +9.108760326e-03f, +3.281069726e-03f, -6.909686753e-03f, -1.895319289e-02f, -2.841168309e-02f, -2.995231985e-02f, -1.899688343e-02f, +6.512789906e-03f, +4.487031408e-02f, +9.041739307e-02f, +1.346255266e-01f, +1.682175708e-01f, +1.837064753e-01f, +1.775398486e-01f, +1.511388909e-01f, +1.104813004e-01f, +6.436920651e-02f, +2.196203401e-02f, -9.621455742e-03f, -2.689427778e-02f, -3.036802702e-02f, -2.371966041e-02f, -1.217577041e-02f, -7.377105075e-04f, +7.166059434e-03f, +1.025149813e-02f, +9.149624410e-03f, +5.630050374e-03f, +1.667854260e-03f, -1.287677096e-03f, -2.641089998e-03f, -2.571732166e-03f, -1.696463480e-03f, -6.804698657e-04f, +3.615778519e-05f, +3.244195295e-04f, +2.923739829e-04f, -9.431530473e-07f, +9.447910213e-06f, +2.317004037e-05f, +3.252916038e-05f, +2.758009056e-05f, +1.304645589e-06f, -4.442473797e-05f, -9.528197147e-05f, -1.263532515e-04f, -1.105729513e-04f, -3.177609154e-05f, +1.025864097e-04f, +2.553639164e-04f, +3.651517933e-04f, +3.640896352e-04f, +2.034562514e-04f, -1.219248981e-04f, -5.607488983e-04f, -1.011108915e-03f, -1.346052953e-03f, -1.451967164e-03f, -1.267121457e-03f, -8.064010613e-04f, -1.623385964e-04f, +5.192504775e-04f, +1.081513561e-03f, +1.402545559e-03f, +1.429573887e-03f, +1.190200104e-03f, +7.779793207e-04f, +3.187373323e-04f, -6.967147102e-05f, -3.102208145e-04f, -3.821851813e-04f, -3.164408930e-04f, -1.752353437e-04f, -2.585857515e-05f, +8.169732682e-05f, +1.261927572e-04f, +1.140471018e-04f, +6.896357953e-05f, +1.828092849e-05f, -1.807329880e-05f, -3.255876525e-05f, -2.870331762e-05f, -1.583741601e-05f, -3.206055989e-06f, +3.887741319e-06f, -6.929705863e-04f, -9.400090157e-04f, -3.790291967e-04f, +1.405880678e-03f, +3.985883235e-03f, +5.806174705e-03f, +4.749735248e-03f, -4.557419887e-04f, -8.722599973e-03f, -1.615347161e-02f, -1.749116300e-02f, -9.170653454e-03f, +7.629788152e-03f, +2.607767635e-02f, +3.619904549e-02f, +3.010249039e-02f, +7.208930350e-03f, -2.382179131e-02f, -4.830552744e-02f, -5.280584636e-02f, -3.270756830e-02f, +4.321835247e-03f, +4.139216841e-02f, +6.072626311e-02f, +5.286897836e-02f, +2.167490780e-02f, -1.773081582e-02f, -4.686856621e-02f, -5.327622826e-02f, -3.625466605e-02f, -6.161721576e-03f, +2.184499786e-02f, +3.577432412e-02f, +3.211046785e-02f, +1.606409509e-02f, -2.580237146e-03f, -1.510430567e-02f, -1.777701603e-02f, -1.238428111e-02f, -3.867257117e-03f, +2.986051997e-03f, +5.811545536e-03f, +5.000333859e-03f, +2.504075226e-03f, +2.508154217e-04f, -8.307111173e-04f, -8.579083139e-04f, -4.419913762e-04f, +1.351207367e-05f, -1.126549914e-06f, -3.544241166e-05f, -7.299351605e-05f, -7.975667761e-05f, -2.395346008e-05f, +9.394195902e-05f, +2.222838567e-04f, +2.720046459e-04f, +1.666573908e-04f, -9.545894178e-05f, -4.096984102e-04f, -5.979730964e-04f, -5.032305666e-04f, -9.755980851e-05f, +4.659339923e-04f, +9.051136635e-04f, +9.525849697e-04f, +5.166059077e-04f, -2.387361456e-04f, -9.544776028e-04f, -1.258280144e-03f, -9.695907853e-04f, -2.095023907e-04f, +6.535621626e-04f, +1.196605909e-03f, +1.165641565e-03f, +6.041071003e-04f, -1.832927891e-04f, -8.044139162e-04f, -9.873630894e-04f, -7.059350357e-04f, -1.624501163e-04f, +3.466302178e-04f, +5.945512379e-04f, +5.250461533e-04f, +2.462725265e-04f, -5.939056664e-05f, -2.443996772e-04f, -2.610858231e-04f, -1.577862775e-04f, -2.549575523e-05f, +6.244626716e-05f, +8.232434518e-05f, +5.444713427e-05f, +1.524945968e-05f, -9.278914423e-06f, -1.372967500e-05f, /* 3, 8 (48) */ +3.375558459e-04f, +2.219775210e-04f, -2.924028285e-04f, -1.203730513e-03f, -2.218371750e-03f, -2.753616827e-03f, -2.125596518e-03f, +1.000562444e-04f, +3.721312934e-03f, +7.675149378e-03f, +1.016408956e-02f, +9.211346736e-03f, +3.536433642e-03f, -6.544534960e-03f, -1.858910326e-02f, -2.820822684e-02f, -3.007424475e-02f, -1.955763232e-02f, +5.501680991e-03f, +4.352426113e-02f, +8.896542591e-02f, +1.333584052e-01f, +1.674111697e-01f, +1.835441367e-01f, +1.780590990e-01f, +1.522204045e-01f, +1.118838460e-01f, +6.579878040e-02f, +2.315223411e-02f, -8.843476421e-03f, -2.657554044e-02f, -3.043769849e-02f, -2.402988123e-02f, -1.255795560e-02f, -1.054151401e-03f, +6.990824090e-03f, +1.022563956e-02f, +9.231321737e-03f, +5.756243131e-03f, +1.781901362e-03f, -1.218713516e-03f, -2.622809069e-03f, -2.589805465e-03f, -1.729022245e-03f, -7.091731833e-04f, +2.032036918e-05f, +3.212134736e-04f, +2.962617242e-04f, -1.168558256e-06f, +9.044283303e-06f, +2.275727877e-05f, +3.240260206e-05f, +2.803806407e-05f, +2.460396421e-06f, -4.281104231e-05f, -9.384506926e-05f, -1.259637630e-04f, -1.119851055e-04f, -3.519325555e-05f, +9.784099981e-05f, +2.508801606e-04f, +3.630663859e-04f, +3.663745517e-04f, +2.110826698e-04f, -1.096261208e-04f, -5.462311107e-04f, -9.981125244e-04f, -1.338558509e-03f, -1.452918539e-03f, -1.277362709e-03f, -8.242288710e-04f, -1.838700421e-04f, +4.989853661e-04f, +1.067111595e-03f, +1.396896783e-03f, +1.433101487e-03f, +1.200907975e-03f, +7.922482224e-04f, +3.325518869e-04f, -5.950975647e-05f, -3.052944180e-04f, -3.822883300e-04f, -3.200018341e-04f, -1.800961712e-04f, -3.008526632e-05f, +7.925814052e-05f, +1.257512449e-04f, +1.150718556e-04f, +7.058924562e-05f, +1.972147714e-05f, -1.726148731e-05f, -3.242346883e-05f, -2.901403414e-05f, -1.627639872e-05f, -3.531699954e-06f, +3.765928427e-06f, -6.794585126e-04f, -9.411355656e-04f, -4.144716084e-04f, +1.332887162e-03f, +3.906126557e-03f, +5.782221245e-03f, +4.843677207e-03f, -2.334581321e-04f, -8.450595327e-03f, -1.598681422e-02f, -1.758662195e-02f, -9.580351865e-03f, +7.031815056e-03f, +2.557444578e-02f, +3.610148568e-02f, +3.056842438e-02f, +8.114044013e-03f, -2.286920634e-02f, -4.778892153e-02f, -5.304458251e-02f, -3.366204590e-02f, +3.063555103e-03f, +4.042257762e-02f, +6.051676072e-02f, +5.352254052e-02f, +2.287151370e-02f, -1.656517425e-02f, -4.626445911e-02f, -5.345952105e-02f, -3.705907997e-02f, -7.149084665e-03f, +2.113906282e-02f, +3.561187401e-02f, +3.245709807e-02f, +1.665864633e-02f, -2.055190993e-03f, -1.485803315e-02f, -1.783640660e-02f, -1.262868078e-02f, -4.128342940e-03f, +2.828265719e-03f, +5.786049781e-03f, +5.062780126e-03f, +2.586399571e-03f, +3.052625560e-04f, -8.154616576e-04f, -8.671872283e-04f, -4.557210512e-04f, +1.364594403e-05f, -3.436649713e-07f, -3.417949566e-05f, -7.208531271e-05f, -8.037843185e-05f, -2.676414031e-05f, +8.969986767e-05f, +2.189653917e-04f, +2.725326564e-04f, +1.725816699e-04f, -8.567434117e-05f, -4.007920296e-04f, -5.957879751e-04f, -5.112102807e-04f, -1.138649555e-04f, +4.485957701e-04f, +8.962304303e-04f, +9.585806927e-04f, +5.365573630e-04f, -2.136004132e-04f, -9.367111105e-04f, -1.257552114e-03f, -9.871559923e-04f, -2.371170630e-04f, +6.294585642e-04f, +1.187710250e-03f, +1.175660842e-03f, +6.271099183e-04f, -1.592747329e-04f, -7.907896309e-04f, -9.892171113e-04f, -7.201684470e-04f, -1.804325406e-04f, +3.338793035e-04f, +5.917982521e-04f, +5.312588432e-04f, +2.563527416e-04f, -5.112063874e-05f, -2.412017540e-04f, -2.628105067e-04f, -1.619350567e-04f, -2.922575262e-05f, +6.074030726e-05f, +8.260631152e-05f, +5.567335481e-05f, +1.633537227e-05f, -8.837361929e-06f, -1.382314016e-05f, /* 3, 9 (48) */ +3.363872877e-04f, +2.310218043e-04f, -2.696455497e-04f, -1.171327911e-03f, -2.190333686e-03f, -2.751156430e-03f, -2.168407560e-03f, +6.211175117e-06f, +3.595349171e-03f, +7.563164272e-03f, +1.012889630e-02f, +9.309187736e-03f, +3.787313803e-03f, -6.181468574e-03f, -1.822272871e-02f, -2.799714417e-02f, -3.018387087e-02f, -2.010386343e-02f, +4.503568467e-03f, +4.218570262e-02f, +8.751250737e-02f, +1.320810425e-01f, +1.665869409e-01f, +1.833602667e-01f, +1.785580844e-01f, +1.532875161e-01f, +1.132807427e-01f, +6.723188188e-02f, +2.435314209e-02f, -8.051228198e-03f, -2.624298856e-02f, -3.049720825e-02f, -2.433517564e-02f, -1.294024393e-02f, -1.374153235e-03f, +6.810727919e-03f, +1.019555429e-02f, +9.310579877e-03f, +5.881994376e-03f, +1.896973217e-03f, -1.148124270e-03f, -2.603087592e-03f, -2.607066952e-03f, -1.761445714e-03f, -7.381872174e-04f, +4.043970461e-06f, +3.176817736e-04f, +3.000276527e-04f, -1.387406987e-06f, +8.644492266e-06f, +2.234077122e-05f, +3.226215150e-05f, +2.847458756e-05f, +3.595844583e-06f, -4.120392496e-05f, -9.238995567e-05f, -1.255284079e-04f, -1.133339535e-04f, -3.855295216e-05f, +9.311727215e-05f, +2.463571875e-04f, +3.608731577e-04f, +3.685009711e-04f, +2.185427537e-04f, -9.744490656e-05f, -5.317305164e-04f, -9.850063393e-04f, -1.330838993e-03f, -1.453580330e-03f, -1.287326252e-03f, -8.418692126e-04f, -2.053589224e-04f, +4.786053506e-04f, +1.052471054e-03f, +1.390954474e-03f, +1.436361328e-03f, +1.211440714e-03f, +8.064679161e-04f, +3.464359449e-04f, -4.920039709e-05f, -3.001987772e-04f, -3.822527779e-04f, -3.234865456e-04f, -1.849486176e-04f, -3.435414183e-05f, +7.675520442e-05f, +1.252524243e-04f, +1.160633002e-04f, +7.220932865e-05f, +2.117666142e-05f, -1.642741121e-05f, -3.226954245e-05f, -2.931565927e-05f, -1.671572506e-05f, -3.863079261e-06f, +3.637854360e-06f, -6.658125686e-04f, -9.414792306e-04f, -4.486511040e-04f, +1.260801849e-03f, +3.825748126e-03f, +5.755457105e-03f, +4.933377074e-03f, -1.449274037e-05f, -8.178062671e-03f, -1.581423255e-02f, -1.767229629e-02f, -9.981143894e-03f, +6.436027081e-03f, +2.506323550e-02f, +3.598762072e-02f, +3.101702015e-02f, +9.010274443e-03f, -2.191062565e-02f, -4.725236417e-02f, -5.325818292e-02f, -3.459875701e-02f, +1.806002989e-03f, +3.943542163e-02f, +6.027964365e-02f, +5.415199909e-02f, +2.405922395e-02f, -1.538951341e-02f, -4.563734919e-02f, -5.361879579e-02f, -3.784986960e-02f, -8.138301776e-03f, +2.041889438e-02f, +3.543144146e-02f, +3.279097737e-02f, +1.725044458e-02f, -1.523932150e-03f, -1.460168041e-02f, -1.788752723e-02f, -1.286988254e-02f, -4.391153447e-03f, +2.666330662e-03f, +5.756824028e-03f, +5.123520433e-03f, +2.669005882e-03f, +3.609359108e-04f, -7.991262853e-04f, -8.760245903e-04f, -4.695441913e-04f, +1.376291828e-05f, +4.181563958e-07f, -3.292223457e-05f, -7.114822141e-05f, -8.093707251e-05f, -2.950891663e-05f, +8.547385565e-05f, +2.155723173e-04f, +2.729044808e-04f, +1.783419554e-04f, -7.595217688e-05f, -3.917671351e-04f, -5.933189432e-04f, -5.188686224e-04f, -1.299969664e-04f, +4.311449117e-04f, +8.869560984e-04f, +9.640809589e-04f, +5.561707202e-04f, -1.884402431e-04f, -9.185355443e-04f, -1.256220314e-03f, -1.004230662e-03f, -2.646124904e-04f, +6.050395244e-04f, +1.178231646e-03f, +1.185132988e-03f, +6.498723961e-04f, -1.350951634e-04f, -7.767208785e-04f, -9.905944033e-04f, -7.341290765e-04f, -1.984458425e-04f, +3.208629886e-04f, +5.887197505e-04f, +5.372556494e-04f, +2.664042772e-04f, -4.272719737e-05f, -2.378308219e-04f, -2.644118708e-04f, -1.660544062e-04f, -3.300195016e-05f, +5.896394766e-05f, +8.283925787e-05f, +5.688846585e-05f, +1.743698814e-05f, -8.374829719e-06f, -1.390524188e-05f, /* 3,10 (48) */ +3.349998807e-04f, +2.396662965e-04f, -2.473047785e-04f, -1.139065760e-03f, -2.161859098e-03f, -2.747560586e-03f, -2.209611485e-03f, -8.617878055e-05f, +3.469820763e-03f, +7.449830319e-03f, +1.009034335e-02f, +9.402305008e-03f, +4.033670990e-03f, -5.820595416e-03f, -1.785422774e-02f, -2.777860141e-02f, -3.028131578e-02f, -2.063559395e-02f, +3.518562128e-03f, +4.085486363e-02f, +8.605892704e-02f, +1.307937162e-01f, +1.657450717e-01f, +1.831549078e-01f, +1.790366898e-01f, +1.543399871e-01f, +1.146716972e-01f, +6.866824321e-02f, +2.556458280e-02f, -7.244760282e-03f, -2.589655261e-02f, -3.054640865e-02f, -2.463537442e-02f, -1.332249670e-02f, -1.697639780e-03f, +6.625779301e-03f, +1.016120015e-02f, +9.387335081e-03f, +6.007246800e-03f, +2.013036517e-03f, -1.075914942e-03f, -2.581910930e-03f, -2.623494363e-03f, -1.793715256e-03f, -7.675028767e-04f, -1.267175460e-05f, +3.138186943e-04f, +3.036655070e-04f, -1.599691615e-06f, +8.248699053e-06f, +2.192081377e-05f, +3.210811875e-05f, +2.888979521e-05f, +4.710772911e-06f, -3.960400736e-05f, -9.091750758e-05f, -1.250479701e-04f, -1.146197461e-04f, -4.185455463e-05f, +8.841678412e-05f, +2.417971359e-04f, +3.585741237e-04f, +3.704699399e-04f, +2.258359200e-04f, -8.538364049e-05f, -5.172508300e-04f, -9.717943669e-04f, -1.322897423e-03f, -1.453953477e-03f, -1.297010470e-03f, -8.593182563e-04f, -2.268002720e-04f, +4.581150677e-04f, +1.037594893e-03f, +1.384719120e-03f, +1.439351461e-03f, +1.221794714e-03f, +8.206343697e-04f, +3.603862744e-04f, -3.874500880e-05f, -2.949337063e-04f, -3.820769545e-04f, -3.268928558e-04f, -1.897907297e-04f, -3.866403314e-05f, +7.418873365e-05f, +1.246957586e-04f, +1.170205588e-04f, +7.382303112e-05f, +2.264603142e-05f, -1.557111780e-05f, -3.209675012e-05f, -2.960786843e-05f, -1.715514875e-05f, -4.200102517e-06f, +3.503474237e-06f, -6.520496503e-04f, -9.410610742e-04f, -4.815733386e-04f, +1.189653627e-03f, +3.744811053e-03f, +5.725948188e-03f, +5.018850930e-03f, +2.010795769e-04f, -7.905158190e-03f, -1.563589059e-02f, -1.774824846e-02f, -1.037291103e-02f, +5.842708137e-03f, +2.454436688e-02f, +3.585762376e-02f, +3.144816507e-02f, +9.897230542e-03f, -2.094654469e-02f, -4.669619345e-02f, -5.344662316e-02f, -3.551729255e-02f, +5.497826750e-04f, +3.843119097e-02f, +6.001503116e-02f, +5.475703861e-02f, +2.523745560e-02f, -1.420438042e-02f, -4.498747679e-02f, -5.375389095e-02f, -3.862659048e-02f, -9.128896180e-03f, +1.968476530e-02f, +3.523299562e-02f, +3.311184036e-02f, +1.783916434e-02f, -9.866765005e-04f, -1.433527613e-02f, -1.793025443e-02f, -1.310771336e-02f, -4.655565318e-03f, +2.500276256e-03f, +5.723822078e-03f, +5.182484381e-03f, +2.751845140e-03f, +4.178243766e-04f, -7.816892972e-04f, -8.843994200e-04f, -4.834494332e-04f, +1.386332733e-05f, +1.158790106e-06f, -3.167144923e-05f, -7.018346438e-05f, -8.143335712e-05f, -3.218712466e-05f, +8.126626625e-05f, +2.121076666e-04f, +2.731218630e-04f, +1.839368776e-04f, -6.629717269e-05f, -3.826297553e-04f, -5.905697532e-04f, -5.262040092e-04f, -1.459485814e-04f, +4.135911510e-04f, +8.772975004e-04f, +9.690851856e-04f, +5.754372713e-04f, -1.632684572e-04f, -8.999610301e-04f, -1.254286383e-03f, -1.020806642e-03f, -2.919748629e-04f, +5.803171765e-04f, +1.168174171e-03f, +1.194052169e-03f, +6.723823597e-04f, -1.107658511e-04f, -7.622130399e-04f, -9.914919407e-04f, -7.478081370e-04f, -2.164807795e-04f, +3.075862399e-04f, +5.853147382e-04f, +5.430313600e-04f, +2.764212891e-04f, -3.421361529e-05f, -2.342867362e-04f, -2.658873395e-04f, -1.701413919e-04f, -3.682269594e-05f, +5.711713924e-05f, +8.302209420e-05f, +5.809134268e-05f, +1.855379262e-05f, -7.891192903e-06f, -1.397558619e-05f, /* 3,11 (48) */ +3.334001891e-04f, +2.479149956e-04f, -2.253839647e-04f, -1.106957641e-03f, -2.132969303e-03f, -2.742849813e-03f, -2.249215493e-03f, -1.770962881e-04f, +3.344772793e-03f, +7.335210573e-03f, +1.004848879e-02f, +9.490721792e-03f, +4.275468126e-03f, -5.462021293e-03f, -1.748375780e-02f, -2.755276549e-02f, -3.036669942e-02f, -2.115284478e-02f, +2.546767761e-03f, +3.953196621e-02f, +8.460497356e-02f, +1.294967058e-01f, +1.648857534e-01f, +1.829281075e-01f, +1.794948048e-01f, +1.553775820e-01f, +1.160564163e-01f, +7.010759467e-02f, +2.678637751e-02f, -6.424125913e-03f, -2.553616634e-02f, -3.058515366e-02f, -2.493030813e-02f, -1.370457366e-02f, -2.024532636e-03f, +6.435988572e-03f, +1.012253612e-02f, +9.461523815e-03f, +6.131942559e-03f, +2.130057076e-03f, -1.002091911e-03f, -2.559264899e-03f, -2.639065481e-03f, -1.825812007e-03f, -7.971107451e-04f, -2.982690335e-05f, +3.096185918e-04f, +3.071689813e-04f, -1.805408701e-06f, +7.857060596e-06f, +2.149769957e-05f, +3.194081607e-05f, +2.928382971e-05f, +5.804976927e-06f, -3.801189943e-05f, -8.942859827e-05f, -1.245232433e-04f, -1.158427570e-04f, -4.509746638e-05f, +8.374106713e-05f, +2.372021356e-04f, +3.561713154e-04f, +3.722825470e-04f, +2.329616422e-04f, -7.344465519e-05f, -5.027957374e-04f, -9.584806249e-04f, -1.314736864e-03f, -1.454038996e-03f, -1.306413829e-03f, -8.765722283e-04f, -2.481891397e-04f, +4.375191867e-04f, +1.022486136e-03f, +1.378191292e-03f, +1.442070000e-03f, +1.231966404e-03f, +8.347435446e-04f, +3.743996030e-04f, -2.814526430e-05f, -2.894990723e-04f, -3.817593219e-04f, -3.302185990e-04f, -1.946205367e-04f, -4.301374243e-05f, +7.155897168e-05f, +1.240807285e-04f, +1.179427581e-04f, +7.542954791e-05f, +2.412912441e-05f, -1.469266580e-05f, -3.190486185e-05f, -2.989033697e-05f, -1.759441937e-05f, -4.542673343e-06f, +3.362746456e-06f, -6.381863229e-04f, -9.399022841e-04f, -5.132447878e-04f, +1.119470163e-03f, +3.663377696e-03f, +5.693761064e-03f, +5.100117196e-03f, +4.131872435e-04f, -7.632036327e-03f, -1.545195372e-02f, -1.781454564e-02f, -1.075554078e-02f, +5.252138384e-03f, +2.401816287e-02f, +3.571167518e-02f, +3.186175622e-02f, +1.077452804e-02f, -1.997745950e-02f, -4.612075618e-02f, -5.360989162e-02f, -3.641725358e-02f, -7.045037083e-04f, +3.741038433e-02f, +5.972305630e-02f, +5.533735579e-02f, +2.640562977e-02f, -1.301032825e-02f, -4.431509443e-02f, -5.386465680e-02f, -3.938880352e-02f, -1.012038812e-02f, +1.893695716e-02f, +3.501651484e-02f, +3.341942660e-02f, +1.842447907e-02f, -4.436451405e-04f, -1.405885484e-02f, -1.796446805e-02f, -1.334200010e-02f, -4.921452657e-03f, +2.330134864e-03f, +5.686999382e-03f, +5.239601520e-03f, +2.834867234e-03f, +4.759157193e-04f, -7.631355045e-04f, -8.922906129e-04f, -4.974250194e-04f, +1.394750936e-05f, +1.878131958e-06f, -3.042793978e-05f, -6.919226211e-05f, -8.186807367e-05f, -3.479815397e-05f, +7.707939839e-05f, +2.085744781e-04f, +2.731866196e-04f, +1.893651790e-04f, -5.671396693e-05f, -3.733859286e-04f, -5.875442840e-04f, -5.332150490e-04f, -1.617126870e-04f, +3.959442215e-04f, +8.672616412e-04f, +9.735930579e-04f, +5.943485240e-04f, -1.380978459e-04f, -8.809978815e-04f, -1.251752275e-03f, -1.036876048e-03f, -3.191904429e-04f, +5.553038192e-04f, +1.157542210e-03f, +1.202412830e-03f, +6.946277381e-04f, -8.629868392e-05f, -7.472717518e-04f, -9.919069428e-04f, -7.611969468e-04f, -2.345280409e-04f, +2.940542028e-04f, +5.815823955e-04f, +5.485808445e-04f, +2.863978978e-04f, -2.558337091e-05f, -2.305694545e-04f, -2.672343829e-04f, -1.741930608e-04f, -4.068628472e-05f, +5.519988007e-05f, +8.315374743e-05f, +5.928084880e-05f, +1.968524855e-05f, -7.386342037e-06f, -1.403378090e-05f, /* 3,12 (48) */ +3.315947804e-04f, +2.557720562e-04f, -2.038862651e-04f, -1.075016825e-03f, -2.103685473e-03f, -2.737044836e-03f, -2.287227392e-03f, -2.665248864e-04f, +3.220249550e-03f, +7.219367816e-03f, +1.000339133e-02f, +9.574462859e-03f, +4.512670262e-03f, -5.105849977e-03f, -1.711147525e-02f, -2.731980385e-02f, -3.044014407e-02f, -2.165564052e-02f, +1.588287136e-03f, +3.821722934e-02f, +8.315093457e-02f, +1.281902919e-01f, +1.640091812e-01f, +1.826799183e-01f, +1.799323240e-01f, +1.564000682e-01f, +1.174346076e-01f, +7.154966467e-02f, +2.801834392e-02f, -5.589382368e-03f, -2.516176673e-02f, -3.061329892e-02f, -2.521980720e-02f, -1.408633298e-02f, -2.354751235e-03f, +6.241368035e-03f, +1.007952237e-02f, +9.533082787e-03f, +6.256023287e-03f, +2.247999834e-03f, -9.266623627e-04f, -2.535135775e-03f, -2.653758147e-03f, -1.857716868e-03f, -8.270010821e-04f, -4.742132272e-05f, +3.050759185e-04f, +3.105317277e-04f, -2.004558929e-06f, +7.469728793e-06f, +2.107171878e-05f, +3.176055781e-05f, +2.965684206e-05f, +6.878264766e-06f, -3.642819940e-05f, -8.792409713e-05f, -1.239550299e-04f, -1.170032827e-04f, -4.828112092e-05f, +7.909162632e-05f, +2.325743066e-04f, +3.536667805e-04f, +3.739399226e-04f, +2.399194504e-04f, -6.163023022e-05f, -4.883688957e-04f, -9.450691397e-04f, -1.306360431e-03f, -1.453837979e-03f, -1.315534869e-03f, -8.936274118e-04f, -2.695205899e-04f, +4.168224081e-04f, +1.007147876e-03f, +1.371371643e-03f, +1.444515133e-03f, +1.241952248e-03f, +8.487913969e-04f, +3.884726189e-04f, -1.740289287e-05f, -2.838947950e-04f, -3.812983756e-04f, -3.334616159e-04f, -1.994360514e-04f, -4.740204284e-05f, +6.886619058e-05f, +1.234068331e-04f, +1.188290291e-04f, +7.702806658e-05f, +2.562546495e-05f, -1.379212554e-05f, -3.169365385e-05f, -3.016274024e-05f, -1.803328241e-05f, -4.890690353e-06f, +3.215632773e-06f, -6.242388136e-04f, -9.380241521e-04f, -5.436727276e-04f, +1.050277901e-03f, +3.581509622e-03f, +5.658962910e-03f, +5.177196595e-03f, +6.217617216e-04f, -7.358849707e-03f, -1.526258854e-02f, -1.787125960e-02f, -1.112892671e-02f, +4.664594100e-03f, +2.348494782e-02f, +3.554996249e-02f, +3.225770044e-02f, +1.164178968e-02f, -1.900386645e-02f, -4.552640766e-02f, -5.374798947e-02f, -3.729825146e-02f, -1.956255983e-03f, +3.637350828e-02f, +5.940386586e-02f, +5.589265961e-02f, +2.756317198e-02f, -1.180791542e-02f, -4.362046669e-02f, -5.395095548e-02f, -4.013607527e-02f, -1.111229506e-02f, +1.817576022e-02f, +3.478198680e-02f, +3.371348080e-02f, +1.900606147e-02f, +1.049357040e-04f, -1.377245694e-02f, -1.799005142e-02f, -1.357256955e-02f, -5.188687040e-03f, +2.155941804e-03f, +5.646313098e-03f, +5.294801400e-03f, +2.918020982e-03f, +5.351965681e-04f, -7.434502560e-04f, -8.996769549e-04f, -5.114588003e-04f, +1.401580941e-05f, +2.576097353e-06f, -2.919248539e-05f, -6.817583254e-05f, -8.224203962e-05f, -3.734144779e-05f, +7.291550570e-05f, +2.049757937e-04f, +2.731006376e-04f, +1.946257141e-04f, -4.720711048e-05f, -3.640416994e-04f, -5.842465376e-04f, -5.399005393e-04f, -1.772823189e-04f, +3.782138509e-04f, +8.568556929e-04f, +9.776045272e-04f, +6.128962056e-04f, -1.129411618e-04f, -8.616565938e-04f, -1.248620255e-03f, -1.052431269e-03f, -3.462455733e-04f, +5.300119093e-04f, +1.146340453e-03f, +1.210209701e-03f, +7.165965704e-04f, -6.170566071e-05f, -7.319029046e-04f, -9.918368755e-04f, -7.742869352e-04f, -2.525782520e-04f, +2.802721994e-04f, +5.775220799e-04f, +5.538990566e-04f, +2.963281919e-04f, -1.684004711e-05f, -2.266790381e-04f, -2.684505191e-04f, -1.782064426e-04f, -4.459095839e-05f, +5.321221614e-05f, +8.323316251e-05f, +6.045583661e-05f, +2.083079621e-05f, -6.860183518e-06f, -1.407943605e-05f, /* 3,13 (48) */ +3.295902214e-04f, +2.632417850e-04f, -1.828145464e-04f, -1.043256267e-03f, -2.074028631e-03f, -2.730166571e-03f, -2.323655591e-03f, -3.544489835e-04f, +3.096294520e-03f, +7.102364533e-03f, +9.955110207e-03f, +9.653554485e-03f, +4.745244568e-03f, -4.752183197e-03f, -1.673753533e-02f, -2.707988440e-02f, -3.050177430e-02f, -2.214400941e-02f, +6.432179961e-04f, +3.691086891e-02f, +8.169709659e-02f, +1.268747571e-01f, +1.631155538e-01f, +1.824103978e-01f, +1.803491464e-01f, +1.574072160e-01f, +1.188059793e-01f, +7.299417980e-02f, +2.926029617e-02f, -4.740590971e-03f, -2.477329412e-02f, -3.063070181e-02f, -2.550370200e-02f, -1.446763136e-02f, -2.688212851e-03f, +6.041931983e-03f, +1.003212033e-02f, +9.601948977e-03f, +6.379430120e-03f, +2.366828863e-03f, -8.496342961e-04f, -2.509510310e-03f, -2.667550273e-03f, -1.889410522e-03f, -8.571638223e-04f, -6.545460513e-05f, +3.001852281e-04f, +3.137473605e-04f, -2.197147050e-06f, +7.086850493e-06f, +2.064315845e-05f, +3.156766014e-05f, +3.000899140e-05f, +7.930457114e-06f, -3.485349373e-05f, -8.640486925e-05f, -1.233441411e-04f, -1.181016416e-04f, -5.140498176e-05f, +7.446994021e-05f, +2.279157587e-04f, +3.510625815e-04f, +3.754432374e-04f, +2.467089309e-04f, -4.994259172e-05f, -4.739739316e-04f, -9.315639451e-04f, -1.297771287e-03f, -1.453351592e-03f, -1.324372214e-03f, -9.104801481e-04f, -2.907897042e-04f, +3.960294623e-04f, +9.915832698e-04f, +1.364260906e-03f, +1.446685114e-03f, +1.251748745e-03f, +8.627738789e-04f, +4.026019717e-04f, -6.519680158e-06f, -2.781208480e-04f, -3.806926450e-04f, -3.366197546e-04f, -2.042352704e-04f, -5.182767860e-05f, +6.611069114e-05f, +1.226735902e-04f, +1.196785074e-04f, +7.861776763e-05f, +2.713456492e-05f, -1.286957906e-05f, -3.146290874e-05f, -3.042475383e-05f, -1.847147940e-05f, -5.244047141e-06f, +3.062098378e-06f, -6.102230042e-04f, -9.354480548e-04f, -5.728652130e-04f, +9.821020684e-04f, +3.499267583e-03f, +5.621621462e-03f, +5.250112100e-03f, +8.267375154e-04f, -7.085749070e-03f, -1.506796282e-02f, -1.791846671e-02f, -1.149296841e-02f, +4.080347563e-03f, +2.294504728e-02f, +3.537268017e-02f, +3.263591429e-02f, +1.249864538e-02f, -1.802626192e-02f, -4.491351145e-02f, -5.386093063e-02f, -3.815990806e-02f, -3.204876238e-03f, +3.532107701e-02f, +5.905762029e-02f, +5.642267152e-02f, +2.870951243e-02f, -1.059770572e-02f, -4.290387012e-02f, -5.401266115e-02f, -4.086797817e-02f, -1.210413194e-02f, +1.740147328e-02f, +3.452940855e-02f, +3.399375300e-02f, +1.958358355e-02f, +6.588347606e-04f, -1.347612875e-02f, -1.800689146e-02f, -1.379924859e-02f, -5.457137559e-03f, +1.977735361e-03f, +5.601722139e-03f, +5.348013616e-03f, +3.001254144e-03f, +5.956524047e-04f, -7.226194598e-04f, -9.065371384e-04f, -5.255382364e-04f, +1.406857895e-05f, +3.252620996e-06f, -2.796584406e-05f, -6.713539017e-05f, -8.255610087e-05f, -3.981650256e-05f, +6.877679563e-05f, +2.013146568e-04f, +2.728658730e-04f, +1.997174486e-04f, -3.778106486e-05f, -3.546031149e-04f, -5.806806360e-04f, -5.462594666e-04f, -1.926506653e-04f, +3.604097550e-04f, +8.460869904e-04f, +9.811198106e-04f, +6.310722668e-04f, -8.781111195e-05f, -8.419478380e-04f, -1.244892900e-03f, -1.067464972e-03f, -3.731266840e-04f, +5.044540557e-04f, +1.134573895e-03f, +1.217437800e-03f, +7.382770122e-04f, -3.699888530e-05f, -7.161126399e-04f, -9.912794543e-04f, -7.870696480e-04f, -2.706219801e-04f, +2.662457264e-04f, +5.731333272e-04f, +5.589810390e-04f, +3.062062311e-04f, -7.987330131e-06f, -2.226156529e-04f, -2.695333162e-04f, -1.821785519e-04f, -4.853490644e-05f, +5.115424196e-05f, +8.325930343e-05f, +6.161514808e-05f, +2.198985344e-05f, -6.312639966e-06f, -1.411216429e-05f, /* 3,14 (48) */ +3.273930744e-04f, +2.703286355e-04f, -1.621713879e-04f, -1.011688607e-03f, -2.044019640e-03f, -2.722236114e-03f, -2.358509085e-03f, -4.408538528e-04f, +2.972950379e-03f, +6.984262892e-03f, +9.903705225e-03f, +9.728024426e-03f, +4.973160327e-03f, -4.401120615e-03f, -1.636209209e-02f, -2.683317547e-02f, -3.055171689e-02f, -2.261798335e-02f, -2.883459489e-04f, +3.561309763e-02f, +8.024374500e-02f, +1.255503848e-01f, +1.622050736e-01f, +1.821196081e-01f, +1.807451759e-01f, +1.583987993e-01f, +1.201702402e-01f, +7.444086492e-02f, +3.051204491e-02f, -3.877817092e-03f, -2.437069214e-02f, -3.063722149e-02f, -2.578182284e-02f, -1.484832400e-02f, -3.024832606e-03f, +5.837696713e-03f, +9.980292652e-03f, +9.668059669e-03f, +6.502103710e-03f, +2.486507371e-03f, -7.710165285e-04f, -2.482375745e-03f, -2.680419852e-03f, -1.920873431e-03f, -8.875885761e-04f, -8.392608453e-05f, +2.949411810e-04f, +3.168094589e-04f, -2.383181810e-06f, +6.708567489e-06f, +2.021230241e-05f, +3.136244093e-05f, +3.034044483e-05f, +8.961387132e-06f, -3.328835692e-05f, -8.487177515e-05f, -1.226913964e-04f, -1.191381742e-04f, -5.446854234e-05f, +6.987746041e-05f, +2.232285908e-04f, +3.483607951e-04f, +3.767937026e-04f, +2.533297261e-04f, -3.838391195e-05f, -4.596144407e-04f, -9.179690811e-04f, -1.288972640e-03f, -1.452581076e-03f, -1.332924566e-03f, -9.271268379e-04f, -3.119915824e-04f, +3.751451082e-04f, +9.757955423e-04f, +1.356859895e-03f, +1.448578267e-03f, +1.261352435e-03f, +8.766869402e-04f, +4.167842732e-04f, +4.502532065e-06f, -2.721772587e-04f, -3.799406942e-04f, -3.396908715e-04f, -2.090161747e-04f, -5.628936525e-05f, +6.329280311e-05f, +1.218805365e-04f, +1.204903340e-04f, +8.019782480e-05f, +2.865592357e-05f, -1.192512019e-05f, -3.121241575e-05f, -3.067605374e-05f, -1.890874794e-05f, -5.602632266e-06f, +2.902111970e-06f, -5.961544252e-04f, -9.321954338e-04f, -6.008310570e-04f, +9.149666782e-04f, +3.416711482e-03f, +5.581804959e-03f, +5.318888896e-03f, +1.028052172e-03f, -6.812883197e-03f, -1.486824537e-02f, -1.795624778e-02f, -1.184757153e-02f, +3.499666927e-03f, +2.239878781e-02f, +3.518002950e-02f, +3.299632404e-02f, +1.334473237e-02f, -1.704514211e-02f, -4.428243918e-02f, -5.394874174e-02f, -3.900185590e-02f, -4.449769137e-03f, +3.425361204e-02f, +5.868449360e-02f, +5.692712557e-02f, +2.984408633e-02f, -9.380267921e-03f, -4.216559311e-02f, -5.404966003e-02f, -4.158409081e-02f, -1.309541139e-02f, +1.661440363e-02f, +3.425878657e-02f, +3.425999873e-02f, +2.015671688e-02f, +1.217815800e-03f, -1.316992252e-02f, -1.801487879e-02f, -1.402186424e-02f, -5.726670876e-03f, +1.795556809e-03f, +5.553187233e-03f, +5.399167858e-03f, +3.084513448e-03f, +6.572675528e-04f, -7.006296063e-04f, -9.128497784e-04f, -5.396504007e-04f, +1.410617540e-05f, +3.907656596e-06f, -2.674875237e-05f, -6.607214521e-05f, -8.281113071e-05f, -4.222286763e-05f, +6.466542856e-05f, +1.975941101e-04f, +2.724843481e-04f, +2.046394595e-04f, -2.844020036e-05f, -3.450762209e-04f, -5.768508178e-04f, -5.522910060e-04f, -2.078110696e-04f, +3.425416332e-04f, +8.349630263e-04f, +9.841393894e-04f, +6.488688858e-04f, -6.272035180e-05f, -8.218824541e-04f, -1.240573095e-03f, -1.081970105e-03f, -3.998203004e-04f, +4.786430117e-04f, +1.122247835e-03f, +1.224092438e-03f, +7.596573427e-04f, -1.219055996e-05f, -6.999073479e-04f, -9.902326461e-04f, -7.995367523e-04f, -2.886497384e-04f, +2.519804530e-04f, +5.684158539e-04f, +5.638219262e-04f, +3.160260501e-04f, +9.709917061e-07f, -2.183795704e-04f, -2.704803945e-04f, -1.861063893e-04f, -5.251626648e-05f, +4.902610125e-05f, +8.323115426e-05f, +6.275761546e-05f, +2.316181566e-05f, -5.743650604e-06f, -1.413158128e-05f, /* 3,15 (48) */ +3.250098926e-04f, +2.770372030e-04f, -1.419590855e-04f, -9.803261659e-04f, -2.013679195e-03f, -2.713274727e-03f, -2.391797442e-03f, -5.257256279e-04f, +2.850258983e-03f, +6.865124717e-03f, +9.849236683e-03f, +9.797901886e-03f, +5.196388918e-03f, -4.052759820e-03f, -1.598529839e-02f, -2.657984575e-02f, -3.059010081e-02f, -2.307759779e-02f, -1.206315030e-03f, +3.432412499e-02f, +7.879116392e-02f, +1.242174603e-01f, +1.612779468e-01f, +1.818076165e-01f, +1.811203210e-01f, +1.593745949e-01f, +1.215271001e-01f, +7.588944319e-02f, +3.177339735e-02f, -3.001130152e-03f, -2.395390787e-02f, -3.063271896e-02f, -2.605400010e-02f, -1.522826470e-02f, -3.364523477e-03f, +5.628680538e-03f, +9.924003287e-03f, +9.731352472e-03f, +6.623984247e-03f, +2.606997705e-03f, -6.908187037e-04f, -2.453719821e-03f, -2.692344972e-03f, -1.952085847e-03f, -9.182646299e-04f, -1.028348325e-04f, +2.893385487e-04f, +3.197115708e-04f, -2.562675888e-06f, +6.335016514e-06f, +1.977943119e-05f, +3.114521951e-05f, +3.065137718e-05f, +9.970900371e-06f, -3.173335146e-05f, -8.332567041e-05f, -1.219976229e-04f, -1.201132422e-04f, -5.747132589e-05f, +6.531561133e-05f, +2.185148898e-04f, +3.455635110e-04f, +3.779925682e-04f, +2.597815341e-04f, -2.695630896e-05f, -4.452939862e-04f, -9.042885929e-04f, -1.279967744e-03f, -1.451527745e-03f, -1.341190709e-03f, -9.435639419e-04f, -3.331213445e-04f, +3.541741317e-04f, +9.597879820e-04f, +1.349169503e-03f, +1.450192989e-03f, +1.270759895e-03f, +8.905265289e-04f, +4.310160983e-04f, +1.566184617e-05f, -2.660641087e-04f, -3.790411232e-04f, -3.426728319e-04f, -2.137767305e-04f, -6.078578988e-05f, +6.041288532e-05f, +1.210272284e-04f, +1.212636550e-04f, +8.176740537e-05f, +3.018902766e-05f, -1.095885470e-05f, -3.094197089e-05f, -3.091631653e-05f, -1.934482185e-05f, -5.966329238e-06f, +2.735645829e-06f, -5.820482498e-04f, -9.282877772e-04f, -6.275798094e-04f, +8.488945330e-04f, +3.333900351e-03f, +5.539582092e-03f, +5.383554324e-03f, +1.225646282e-03f, -6.540398849e-03f, -1.466360591e-02f, -1.798468798e-02f, -1.219264775e-02f, +2.922816109e-03f, +2.184649681e-02f, +3.497221844e-02f, +3.333886568e-02f, +1.417969539e-02f, -1.606100272e-02f, -4.363357030e-02f, -5.401146209e-02f, -3.982373835e-02f, -5.690342233e-03f, +3.317164193e-02f, +5.828467330e-02f, +5.740576858e-02f, +3.096633416e-02f, -8.156175483e-03f, -4.140593577e-02f, -5.406185059e-02f, -4.228399816e-02f, -1.408564404e-02f, +1.581486688e-02f, +3.397013683e-02f, +3.451197918e-02f, +2.072513273e-02f, +1.781637726e-03f, -1.285389647e-02f, -1.801390780e-02f, -1.424024381e-02f, -5.997151270e-03f, +1.609450420e-03f, +5.500670966e-03f, +5.448193960e-03f, +3.167744602e-03f, +7.200251683e-04f, -6.774677907e-04f, -9.185934290e-04f, -5.537819819e-04f, +1.412896176e-05f, +4.541176552e-06f, -2.554192529e-05f, -6.498730276e-05f, -8.300802883e-05f, -4.456014472e-05f, +6.058351699e-05f, +1.938171938e-04f, +2.719581501e-04f, +2.093909339e-04f, -1.918879431e-05f, -3.354670587e-04f, -5.727614348e-04f, -5.579945201e-04f, -2.227570335e-04f, +3.246191624e-04f, +8.234914461e-04f, +9.866640079e-04f, +6.662784709e-04f, -3.768147783e-05f, -8.014714454e-04f, -1.235664035e-03f, -1.095939898e-03f, -4.263130497e-04f, +4.525916689e-04f, +1.109367871e-03f, +1.230169216e-03f, +7.807259716e-04f, +1.270702101e-05f, -6.832936650e-04f, -9.886946717e-04f, -8.116800428e-04f, -3.066519920e-04f, +2.374822193e-04f, +5.633695578e-04f, +5.684169483e-04f, +3.257816614e-04f, +1.003102933e-05f, -2.139711689e-04f, -2.712894287e-04f, -1.899869437e-04f, -5.653312481e-05f, +4.682798754e-05f, +8.314772024e-05f, +6.388206201e-05f, +2.434605598e-05f, -5.153171625e-06f, -1.413730612e-05f, /* 3,16 (48) */ +3.224472167e-04f, +2.833722195e-04f, -1.221796543e-04f, -9.491809464e-04f, -1.983027818e-03f, -2.703303827e-03f, -2.423530794e-03f, -6.090512983e-04f, +2.728261360e-03f, +6.745011475e-03f, +9.791765357e-03f, +9.863217497e-03f, +5.414903808e-03f, -3.707196309e-03f, -1.560730582e-02f, -2.632006421e-02f, -3.061705711e-02f, -2.352289177e-02f, -2.110603623e-03f, +3.304415724e-02f, +7.733963617e-02f, +1.228762696e-01f, +1.603343828e-01f, +1.814744951e-01f, +1.814744951e-01f, +1.603343828e-01f, +1.228762696e-01f, +7.733963617e-02f, +3.304415724e-02f, -2.110603623e-03f, -2.352289177e-02f, -3.061705711e-02f, -2.632006421e-02f, -1.560730582e-02f, -3.707196309e-03f, +5.414903808e-03f, +9.863217497e-03f, +9.791765357e-03f, +6.745011475e-03f, +2.728261360e-03f, -6.090512983e-04f, -2.423530794e-03f, -2.703303827e-03f, -1.983027818e-03f, -9.491809464e-04f, -1.221796543e-04f, +2.833722195e-04f, +3.224472167e-04f, -2.735645829e-06f, +5.966329238e-06f, +1.934482185e-05f, +3.091631653e-05f, +3.094197089e-05f, +1.095885470e-05f, -3.018902766e-05f, -8.176740537e-05f, -1.212636550e-04f, -1.210272284e-04f, -6.041288532e-05f, +6.078578988e-05f, +2.137767305e-04f, +3.426728319e-04f, +3.790411232e-04f, +2.660641087e-04f, -1.566184617e-05f, -4.310160983e-04f, -8.905265289e-04f, -1.270759895e-03f, -1.450192989e-03f, -1.349169503e-03f, -9.597879820e-04f, -3.541741317e-04f, +3.331213445e-04f, +9.435639419e-04f, +1.341190709e-03f, +1.451527745e-03f, +1.279967744e-03f, +9.042885929e-04f, +4.452939862e-04f, +2.695630896e-05f, -2.597815341e-04f, -3.779925682e-04f, -3.455635110e-04f, -2.185148898e-04f, -6.531561133e-05f, +5.747132589e-05f, +1.201132422e-04f, +1.219976229e-04f, +8.332567041e-05f, +3.173335146e-05f, -9.970900371e-06f, -3.065137718e-05f, -3.114521951e-05f, -1.977943119e-05f, -6.335016514e-06f, +2.562675888e-06f, -5.679192881e-04f, -9.237466006e-04f, -6.531217347e-04f, +7.839072303e-04f, +3.250892322e-03f, +5.495021947e-03f, +5.444137841e-03f, +1.419463476e-03f, -6.268440699e-03f, -1.445421498e-02f, -1.800387677e-02f, -1.252811481e-02f, +2.350054674e-03f, +2.128850229e-02f, +3.474946140e-02f, +3.366348484e-02f, +1.500318684e-02f, -1.507433871e-02f, -4.296729183e-02f, -5.404914357e-02f, -4.062520980e-02f, -6.926006268e-03f, +3.207570204e-02f, +5.785836025e-02f, +5.785836025e-02f, +3.207570204e-02f, -6.926006268e-03f, -4.062520980e-02f, -5.404914357e-02f, -4.296729183e-02f, -1.507433871e-02f, +1.500318684e-02f, +3.366348484e-02f, +3.474946140e-02f, +2.128850229e-02f, +2.350054674e-03f, -1.252811481e-02f, -1.800387677e-02f, -1.445421498e-02f, -6.268440699e-03f, +1.419463476e-03f, +5.444137841e-03f, +5.495021947e-03f, +3.250892322e-03f, +7.839072303e-04f, -6.531217347e-04f, -9.237466006e-04f, -5.679192881e-04f, +1.413730612e-05f, +5.153171625e-06f, -2.434605598e-05f, -6.388206201e-05f, -8.314772024e-05f, -4.682798754e-05f, +5.653312481e-05f, +1.899869437e-04f, +2.712894287e-04f, +2.139711689e-04f, -1.003102933e-05f, -3.257816614e-04f, -5.684169483e-04f, -5.633695578e-04f, -2.374822193e-04f, +3.066519920e-04f, +8.116800428e-04f, +9.886946717e-04f, +6.832936650e-04f, -1.270702101e-05f, -7.807259716e-04f, -1.230169216e-03f, -1.109367871e-03f, -4.525916689e-04f, +4.263130497e-04f, +1.095939898e-03f, +1.235664035e-03f, +8.014714454e-04f, +3.768147783e-05f, -6.662784709e-04f, -9.866640079e-04f, -8.234914461e-04f, -3.246191624e-04f, +2.227570335e-04f, +5.579945201e-04f, +5.727614348e-04f, +3.354670587e-04f, +1.918879431e-05f, -2.093909339e-04f, -2.719581501e-04f, -1.938171938e-04f, -6.058351699e-05f, +4.456014472e-05f, +8.300802883e-05f, +6.498730276e-05f, +2.554192529e-05f, -4.541176552e-06f, -1.412896176e-05f, /* 3,17 (48) */ +3.197115708e-04f, +2.893385487e-04f, -1.028348325e-04f, -9.182646299e-04f, -1.952085847e-03f, -2.692344972e-03f, -2.453719821e-03f, -6.908187037e-04f, +2.606997705e-03f, +6.623984247e-03f, +9.731352472e-03f, +9.924003287e-03f, +5.628680538e-03f, -3.364523477e-03f, -1.522826470e-02f, -2.605400010e-02f, -3.063271896e-02f, -2.395390787e-02f, -3.001130152e-03f, +3.177339735e-02f, +7.588944319e-02f, +1.215271001e-01f, +1.593745949e-01f, +1.811203210e-01f, +1.818076165e-01f, +1.612779468e-01f, +1.242174603e-01f, +7.879116392e-02f, +3.432412499e-02f, -1.206315030e-03f, -2.307759779e-02f, -3.059010081e-02f, -2.657984575e-02f, -1.598529839e-02f, -4.052759820e-03f, +5.196388918e-03f, +9.797901886e-03f, +9.849236683e-03f, +6.865124717e-03f, +2.850258983e-03f, -5.257256279e-04f, -2.391797442e-03f, -2.713274727e-03f, -2.013679195e-03f, -9.803261659e-04f, -1.419590855e-04f, +2.770372030e-04f, +3.250098926e-04f, -2.902111970e-06f, +5.602632266e-06f, +1.890874794e-05f, +3.067605374e-05f, +3.121241575e-05f, +1.192512019e-05f, -2.865592357e-05f, -8.019782480e-05f, -1.204903340e-04f, -1.218805365e-04f, -6.329280311e-05f, +5.628936525e-05f, +2.090161747e-04f, +3.396908715e-04f, +3.799406942e-04f, +2.721772587e-04f, -4.502532065e-06f, -4.167842732e-04f, -8.766869402e-04f, -1.261352435e-03f, -1.448578267e-03f, -1.356859895e-03f, -9.757955423e-04f, -3.751451082e-04f, +3.119915824e-04f, +9.271268379e-04f, +1.332924566e-03f, +1.452581076e-03f, +1.288972640e-03f, +9.179690811e-04f, +4.596144407e-04f, +3.838391195e-05f, -2.533297261e-04f, -3.767937026e-04f, -3.483607951e-04f, -2.232285908e-04f, -6.987746041e-05f, +5.446854234e-05f, +1.191381742e-04f, +1.226913964e-04f, +8.487177515e-05f, +3.328835692e-05f, -8.961387132e-06f, -3.034044483e-05f, -3.136244093e-05f, -2.021230241e-05f, -6.708567489e-06f, +2.383181810e-06f, -5.537819819e-04f, -9.185934290e-04f, -6.774677907e-04f, +7.200251683e-04f, +3.167744602e-03f, +5.448193960e-03f, +5.500670966e-03f, +1.609450420e-03f, -5.997151270e-03f, -1.424024381e-02f, -1.801390780e-02f, -1.285389647e-02f, +1.781637726e-03f, +2.072513273e-02f, +3.451197918e-02f, +3.397013683e-02f, +1.581486688e-02f, -1.408564404e-02f, -4.228399816e-02f, -5.406185059e-02f, -4.140593577e-02f, -8.156175483e-03f, +3.096633416e-02f, +5.740576858e-02f, +5.828467330e-02f, +3.317164193e-02f, -5.690342233e-03f, -3.982373835e-02f, -5.401146209e-02f, -4.363357030e-02f, -1.606100272e-02f, +1.417969539e-02f, +3.333886568e-02f, +3.497221844e-02f, +2.184649681e-02f, +2.922816109e-03f, -1.219264775e-02f, -1.798468798e-02f, -1.466360591e-02f, -6.540398849e-03f, +1.225646282e-03f, +5.383554324e-03f, +5.539582092e-03f, +3.333900351e-03f, +8.488945330e-04f, -6.275798094e-04f, -9.282877772e-04f, -5.820482498e-04f, +1.413158128e-05f, +5.743650604e-06f, -2.316181566e-05f, -6.275761546e-05f, -8.323115426e-05f, -4.902610125e-05f, +5.251626648e-05f, +1.861063893e-04f, +2.704803945e-04f, +2.183795704e-04f, -9.709917061e-07f, -3.160260501e-04f, -5.638219262e-04f, -5.684158539e-04f, -2.519804530e-04f, +2.886497384e-04f, +7.995367523e-04f, +9.902326461e-04f, +6.999073479e-04f, +1.219055996e-05f, -7.596573427e-04f, -1.224092438e-03f, -1.122247835e-03f, -4.786430117e-04f, +3.998203004e-04f, +1.081970105e-03f, +1.240573095e-03f, +8.218824541e-04f, +6.272035180e-05f, -6.488688858e-04f, -9.841393894e-04f, -8.349630263e-04f, -3.425416332e-04f, +2.078110696e-04f, +5.522910060e-04f, +5.768508178e-04f, +3.450762209e-04f, +2.844020036e-05f, -2.046394595e-04f, -2.724843481e-04f, -1.975941101e-04f, -6.466542856e-05f, +4.222286763e-05f, +8.281113071e-05f, +6.607214521e-05f, +2.674875237e-05f, -3.907656596e-06f, -1.410617540e-05f, /* 3,18 (48) */ +3.168094589e-04f, +2.949411810e-04f, -8.392608453e-05f, -8.875885761e-04f, -1.920873431e-03f, -2.680419852e-03f, -2.482375745e-03f, -7.710165285e-04f, +2.486507371e-03f, +6.502103710e-03f, +9.668059669e-03f, +9.980292652e-03f, +5.837696713e-03f, -3.024832606e-03f, -1.484832400e-02f, -2.578182284e-02f, -3.063722149e-02f, -2.437069214e-02f, -3.877817092e-03f, +3.051204491e-02f, +7.444086492e-02f, +1.201702402e-01f, +1.583987993e-01f, +1.807451759e-01f, +1.821196081e-01f, +1.622050736e-01f, +1.255503848e-01f, +8.024374500e-02f, +3.561309763e-02f, -2.883459489e-04f, -2.261798335e-02f, -3.055171689e-02f, -2.683317547e-02f, -1.636209209e-02f, -4.401120615e-03f, +4.973160327e-03f, +9.728024426e-03f, +9.903705225e-03f, +6.984262892e-03f, +2.972950379e-03f, -4.408538528e-04f, -2.358509085e-03f, -2.722236114e-03f, -2.044019640e-03f, -1.011688607e-03f, -1.621713879e-04f, +2.703286355e-04f, +3.273930744e-04f, -3.062098378e-06f, +5.244047141e-06f, +1.847147940e-05f, +3.042475383e-05f, +3.146290874e-05f, +1.286957906e-05f, -2.713456492e-05f, -7.861776763e-05f, -1.196785074e-04f, -1.226735902e-04f, -6.611069114e-05f, +5.182767860e-05f, +2.042352704e-04f, +3.366197546e-04f, +3.806926450e-04f, +2.781208480e-04f, +6.519680158e-06f, -4.026019717e-04f, -8.627738789e-04f, -1.251748745e-03f, -1.446685114e-03f, -1.364260906e-03f, -9.915832698e-04f, -3.960294623e-04f, +2.907897042e-04f, +9.104801481e-04f, +1.324372214e-03f, +1.453351592e-03f, +1.297771287e-03f, +9.315639451e-04f, +4.739739316e-04f, +4.994259172e-05f, -2.467089309e-04f, -3.754432374e-04f, -3.510625815e-04f, -2.279157587e-04f, -7.446994021e-05f, +5.140498176e-05f, +1.181016416e-04f, +1.233441411e-04f, +8.640486925e-05f, +3.485349373e-05f, -7.930457114e-06f, -3.000899140e-05f, -3.156766014e-05f, -2.064315845e-05f, -7.086850493e-06f, +2.197147050e-06f, -5.396504007e-04f, -9.128497784e-04f, -7.006296063e-04f, +6.572675528e-04f, +3.084513448e-03f, +5.399167858e-03f, +5.553187233e-03f, +1.795556809e-03f, -5.726670876e-03f, -1.402186424e-02f, -1.801487879e-02f, -1.316992252e-02f, +1.217815800e-03f, +2.015671688e-02f, +3.425999873e-02f, +3.425878657e-02f, +1.661440363e-02f, -1.309541139e-02f, -4.158409081e-02f, -5.404966003e-02f, -4.216559311e-02f, -9.380267921e-03f, +2.984408633e-02f, +5.692712557e-02f, +5.868449360e-02f, +3.425361204e-02f, -4.449769137e-03f, -3.900185590e-02f, -5.394874174e-02f, -4.428243918e-02f, -1.704514211e-02f, +1.334473237e-02f, +3.299632404e-02f, +3.518002950e-02f, +2.239878781e-02f, +3.499666927e-03f, -1.184757153e-02f, -1.795624778e-02f, -1.486824537e-02f, -6.812883197e-03f, +1.028052172e-03f, +5.318888896e-03f, +5.581804959e-03f, +3.416711482e-03f, +9.149666782e-04f, -6.008310570e-04f, -9.321954338e-04f, -5.961544252e-04f, +1.411216429e-05f, +6.312639966e-06f, -2.198985344e-05f, -6.161514808e-05f, -8.325930343e-05f, -5.115424196e-05f, +4.853490644e-05f, +1.821785519e-04f, +2.695333162e-04f, +2.226156529e-04f, +7.987330131e-06f, -3.062062311e-04f, -5.589810390e-04f, -5.731333272e-04f, -2.662457264e-04f, +2.706219801e-04f, +7.870696480e-04f, +9.912794543e-04f, +7.161126399e-04f, +3.699888530e-05f, -7.382770122e-04f, -1.217437800e-03f, -1.134573895e-03f, -5.044540557e-04f, +3.731266840e-04f, +1.067464972e-03f, +1.244892900e-03f, +8.419478380e-04f, +8.781111195e-05f, -6.310722668e-04f, -9.811198106e-04f, -8.460869904e-04f, -3.604097550e-04f, +1.926506653e-04f, +5.462594666e-04f, +5.806806360e-04f, +3.546031149e-04f, +3.778106486e-05f, -1.997174486e-04f, -2.728658730e-04f, -2.013146568e-04f, -6.877679563e-05f, +3.981650256e-05f, +8.255610087e-05f, +6.713539017e-05f, +2.796584406e-05f, -3.252620996e-06f, -1.406857895e-05f, /* 3,19 (48) */ +3.137473605e-04f, +3.001852281e-04f, -6.545460513e-05f, -8.571638223e-04f, -1.889410522e-03f, -2.667550273e-03f, -2.509510310e-03f, -8.496342961e-04f, +2.366828863e-03f, +6.379430120e-03f, +9.601948977e-03f, +1.003212033e-02f, +6.041931983e-03f, -2.688212851e-03f, -1.446763136e-02f, -2.550370200e-02f, -3.063070181e-02f, -2.477329412e-02f, -4.740590971e-03f, +2.926029617e-02f, +7.299417980e-02f, +1.188059793e-01f, +1.574072160e-01f, +1.803491464e-01f, +1.824103978e-01f, +1.631155538e-01f, +1.268747571e-01f, +8.169709659e-02f, +3.691086891e-02f, +6.432179961e-04f, -2.214400941e-02f, -3.050177430e-02f, -2.707988440e-02f, -1.673753533e-02f, -4.752183197e-03f, +4.745244568e-03f, +9.653554485e-03f, +9.955110207e-03f, +7.102364533e-03f, +3.096294520e-03f, -3.544489835e-04f, -2.323655591e-03f, -2.730166571e-03f, -2.074028631e-03f, -1.043256267e-03f, -1.828145464e-04f, +2.632417850e-04f, +3.295902214e-04f, -3.215632773e-06f, +4.890690353e-06f, +1.803328241e-05f, +3.016274024e-05f, +3.169365385e-05f, +1.379212554e-05f, -2.562546495e-05f, -7.702806658e-05f, -1.188290291e-04f, -1.234068331e-04f, -6.886619058e-05f, +4.740204284e-05f, +1.994360514e-04f, +3.334616159e-04f, +3.812983756e-04f, +2.838947950e-04f, +1.740289287e-05f, -3.884726189e-04f, -8.487913969e-04f, -1.241952248e-03f, -1.444515133e-03f, -1.371371643e-03f, -1.007147876e-03f, -4.168224081e-04f, +2.695205899e-04f, +8.936274118e-04f, +1.315534869e-03f, +1.453837979e-03f, +1.306360431e-03f, +9.450691397e-04f, +4.883688957e-04f, +6.163023022e-05f, -2.399194504e-04f, -3.739399226e-04f, -3.536667805e-04f, -2.325743066e-04f, -7.909162632e-05f, +4.828112092e-05f, +1.170032827e-04f, +1.239550299e-04f, +8.792409713e-05f, +3.642819940e-05f, -6.878264766e-06f, -2.965684206e-05f, -3.176055781e-05f, -2.107171878e-05f, -7.469728793e-06f, +2.004558929e-06f, -5.255382364e-04f, -9.065371384e-04f, -7.226194598e-04f, +5.956524047e-04f, +3.001254144e-03f, +5.348013616e-03f, +5.601722139e-03f, +1.977735361e-03f, -5.457137559e-03f, -1.379924859e-02f, -1.800689146e-02f, -1.347612875e-02f, +6.588347606e-04f, +1.958358355e-02f, +3.399375300e-02f, +3.452940855e-02f, +1.740147328e-02f, -1.210413194e-02f, -4.086797817e-02f, -5.401266115e-02f, -4.290387012e-02f, -1.059770572e-02f, +2.870951243e-02f, +5.642267152e-02f, +5.905762029e-02f, +3.532107701e-02f, -3.204876238e-03f, -3.815990806e-02f, -5.386093063e-02f, -4.491351145e-02f, -1.802626192e-02f, +1.249864538e-02f, +3.263591429e-02f, +3.537268017e-02f, +2.294504728e-02f, +4.080347563e-03f, -1.149296841e-02f, -1.791846671e-02f, -1.506796282e-02f, -7.085749070e-03f, +8.267375154e-04f, +5.250112100e-03f, +5.621621462e-03f, +3.499267583e-03f, +9.821020684e-04f, -5.728652130e-04f, -9.354480548e-04f, -6.102230042e-04f, +1.407943605e-05f, +6.860183518e-06f, -2.083079621e-05f, -6.045583661e-05f, -8.323316251e-05f, -5.321221614e-05f, +4.459095839e-05f, +1.782064426e-04f, +2.684505191e-04f, +2.266790381e-04f, +1.684004711e-05f, -2.963281919e-04f, -5.538990566e-04f, -5.775220799e-04f, -2.802721994e-04f, +2.525782520e-04f, +7.742869352e-04f, +9.918368755e-04f, +7.319029046e-04f, +6.170566071e-05f, -7.165965704e-04f, -1.210209701e-03f, -1.146340453e-03f, -5.300119093e-04f, +3.462455733e-04f, +1.052431269e-03f, +1.248620255e-03f, +8.616565938e-04f, +1.129411618e-04f, -6.128962056e-04f, -9.776045272e-04f, -8.568556929e-04f, -3.782138509e-04f, +1.772823189e-04f, +5.399005393e-04f, +5.842465376e-04f, +3.640416994e-04f, +4.720711048e-05f, -1.946257141e-04f, -2.731006376e-04f, -2.049757937e-04f, -7.291550570e-05f, +3.734144779e-05f, +8.224203962e-05f, +6.817583254e-05f, +2.919248539e-05f, -2.576097353e-06f, -1.401580941e-05f, /* 3,20 (48) */ +3.105317277e-04f, +3.050759185e-04f, -4.742132272e-05f, -8.270010821e-04f, -1.857716868e-03f, -2.653758147e-03f, -2.535135775e-03f, -9.266623627e-04f, +2.247999834e-03f, +6.256023287e-03f, +9.533082787e-03f, +1.007952237e-02f, +6.241368035e-03f, -2.354751235e-03f, -1.408633298e-02f, -2.521980720e-02f, -3.061329892e-02f, -2.516176673e-02f, -5.589382368e-03f, +2.801834392e-02f, +7.154966467e-02f, +1.174346076e-01f, +1.564000682e-01f, +1.799323240e-01f, +1.826799183e-01f, +1.640091812e-01f, +1.281902919e-01f, +8.315093457e-02f, +3.821722934e-02f, +1.588287136e-03f, -2.165564052e-02f, -3.044014407e-02f, -2.731980385e-02f, -1.711147525e-02f, -5.105849977e-03f, +4.512670262e-03f, +9.574462859e-03f, +1.000339133e-02f, +7.219367816e-03f, +3.220249550e-03f, -2.665248864e-04f, -2.287227392e-03f, -2.737044836e-03f, -2.103685473e-03f, -1.075016825e-03f, -2.038862651e-04f, +2.557720562e-04f, +3.315947804e-04f, -3.362746456e-06f, +4.542673343e-06f, +1.759441937e-05f, +2.989033697e-05f, +3.190486185e-05f, +1.469266580e-05f, -2.412912441e-05f, -7.542954791e-05f, -1.179427581e-04f, -1.240807285e-04f, -7.155897168e-05f, +4.301374243e-05f, +1.946205367e-04f, +3.302185990e-04f, +3.817593219e-04f, +2.894990723e-04f, +2.814526430e-05f, -3.743996030e-04f, -8.347435446e-04f, -1.231966404e-03f, -1.442070000e-03f, -1.378191292e-03f, -1.022486136e-03f, -4.375191867e-04f, +2.481891397e-04f, +8.765722283e-04f, +1.306413829e-03f, +1.454038996e-03f, +1.314736864e-03f, +9.584806249e-04f, +5.027957374e-04f, +7.344465519e-05f, -2.329616422e-04f, -3.722825470e-04f, -3.561713154e-04f, -2.372021356e-04f, -8.374106713e-05f, +4.509746638e-05f, +1.158427570e-04f, +1.245232433e-04f, +8.942859827e-05f, +3.801189943e-05f, -5.804976927e-06f, -2.928382971e-05f, -3.194081607e-05f, -2.149769957e-05f, -7.857060596e-06f, +1.805408701e-06f, -5.114588003e-04f, -8.996769549e-04f, -7.434502560e-04f, +5.351965681e-04f, +2.918020982e-03f, +5.294801400e-03f, +5.646313098e-03f, +2.155941804e-03f, -5.188687040e-03f, -1.357256955e-02f, -1.799005142e-02f, -1.377245694e-02f, +1.049357040e-04f, +1.900606147e-02f, +3.371348080e-02f, +3.478198680e-02f, +1.817576022e-02f, -1.111229506e-02f, -4.013607527e-02f, -5.395095548e-02f, -4.362046669e-02f, -1.180791542e-02f, +2.756317198e-02f, +5.589265961e-02f, +5.940386586e-02f, +3.637350828e-02f, -1.956255983e-03f, -3.729825146e-02f, -5.374798947e-02f, -4.552640766e-02f, -1.900386645e-02f, +1.164178968e-02f, +3.225770044e-02f, +3.554996249e-02f, +2.348494782e-02f, +4.664594100e-03f, -1.112892671e-02f, -1.787125960e-02f, -1.526258854e-02f, -7.358849707e-03f, +6.217617216e-04f, +5.177196595e-03f, +5.658962910e-03f, +3.581509622e-03f, +1.050277901e-03f, -5.436727276e-04f, -9.380241521e-04f, -6.242388136e-04f, +1.403378090e-05f, +7.386342037e-06f, -1.968524855e-05f, -5.928084880e-05f, -8.315374743e-05f, -5.519988007e-05f, +4.068628472e-05f, +1.741930608e-04f, +2.672343829e-04f, +2.305694545e-04f, +2.558337091e-05f, -2.863978978e-04f, -5.485808445e-04f, -5.815823955e-04f, -2.940542028e-04f, +2.345280409e-04f, +7.611969468e-04f, +9.919069428e-04f, +7.472717518e-04f, +8.629868392e-05f, -6.946277381e-04f, -1.202412830e-03f, -1.157542210e-03f, -5.553038192e-04f, +3.191904429e-04f, +1.036876048e-03f, +1.251752275e-03f, +8.809978815e-04f, +1.380978459e-04f, -5.943485240e-04f, -9.735930579e-04f, -8.672616412e-04f, -3.959442215e-04f, +1.617126870e-04f, +5.332150490e-04f, +5.875442840e-04f, +3.733859286e-04f, +5.671396693e-05f, -1.893651790e-04f, -2.731866196e-04f, -2.085744781e-04f, -7.707939839e-05f, +3.479815397e-05f, +8.186807367e-05f, +6.919226211e-05f, +3.042793978e-05f, -1.878131958e-06f, -1.394750936e-05f, /* 3,21 (48) */ +3.071689813e-04f, +3.096185918e-04f, -2.982690335e-05f, -7.971107451e-04f, -1.825812007e-03f, -2.639065481e-03f, -2.559264899e-03f, -1.002091911e-03f, +2.130057076e-03f, +6.131942559e-03f, +9.461523815e-03f, +1.012253612e-02f, +6.435988572e-03f, -2.024532636e-03f, -1.370457366e-02f, -2.493030813e-02f, -3.058515366e-02f, -2.553616634e-02f, -6.424125913e-03f, +2.678637751e-02f, +7.010759467e-02f, +1.160564163e-01f, +1.553775820e-01f, +1.794948048e-01f, +1.829281075e-01f, +1.648857534e-01f, +1.294967058e-01f, +8.460497356e-02f, +3.953196621e-02f, +2.546767761e-03f, -2.115284478e-02f, -3.036669942e-02f, -2.755276549e-02f, -1.748375780e-02f, -5.462021293e-03f, +4.275468126e-03f, +9.490721792e-03f, +1.004848879e-02f, +7.335210573e-03f, +3.344772793e-03f, -1.770962881e-04f, -2.249215493e-03f, -2.742849813e-03f, -2.132969303e-03f, -1.106957641e-03f, -2.253839647e-04f, +2.479149956e-04f, +3.334001891e-04f, -3.503474237e-06f, +4.200102517e-06f, +1.715514875e-05f, +2.960786843e-05f, +3.209675012e-05f, +1.557111780e-05f, -2.264603142e-05f, -7.382303112e-05f, -1.170205588e-04f, -1.246957586e-04f, -7.418873365e-05f, +3.866403314e-05f, +1.897907297e-04f, +3.268928558e-04f, +3.820769545e-04f, +2.949337063e-04f, +3.874500880e-05f, -3.603862744e-04f, -8.206343697e-04f, -1.221794714e-03f, -1.439351461e-03f, -1.384719120e-03f, -1.037594893e-03f, -4.581150677e-04f, +2.268002720e-04f, +8.593182563e-04f, +1.297010470e-03f, +1.453953477e-03f, +1.322897423e-03f, +9.717943669e-04f, +5.172508300e-04f, +8.538364049e-05f, -2.258359200e-04f, -3.704699399e-04f, -3.585741237e-04f, -2.417971359e-04f, -8.841678412e-05f, +4.185455463e-05f, +1.146197461e-04f, +1.250479701e-04f, +9.091750758e-05f, +3.960400736e-05f, -4.710772911e-06f, -2.888979521e-05f, -3.210811875e-05f, -2.192081377e-05f, -8.248699053e-06f, +1.599691615e-06f, -4.974250194e-04f, -8.922906129e-04f, -7.631355045e-04f, +4.759157193e-04f, +2.834867234e-03f, +5.239601520e-03f, +5.686999382e-03f, +2.330134864e-03f, -4.921452657e-03f, -1.334200010e-02f, -1.796446805e-02f, -1.405885484e-02f, -4.436451405e-04f, +1.842447907e-02f, +3.341942660e-02f, +3.501651484e-02f, +1.893695716e-02f, -1.012038812e-02f, -3.938880352e-02f, -5.386465680e-02f, -4.431509443e-02f, -1.301032825e-02f, +2.640562977e-02f, +5.533735579e-02f, +5.972305630e-02f, +3.741038433e-02f, -7.045037083e-04f, -3.641725358e-02f, -5.360989162e-02f, -4.612075618e-02f, -1.997745950e-02f, +1.077452804e-02f, +3.186175622e-02f, +3.571167518e-02f, +2.401816287e-02f, +5.252138384e-03f, -1.075554078e-02f, -1.781454564e-02f, -1.545195372e-02f, -7.632036327e-03f, +4.131872435e-04f, +5.100117196e-03f, +5.693761064e-03f, +3.663377696e-03f, +1.119470163e-03f, -5.132447878e-04f, -9.399022841e-04f, -6.381863229e-04f, +1.397558619e-05f, +7.891192903e-06f, -1.855379262e-05f, -5.809134268e-05f, -8.302209420e-05f, -5.711713924e-05f, +3.682269594e-05f, +1.701413919e-04f, +2.658873395e-04f, +2.342867362e-04f, +3.421361529e-05f, -2.764212891e-04f, -5.430313600e-04f, -5.853147382e-04f, -3.075862399e-04f, +2.164807795e-04f, +7.478081370e-04f, +9.914919407e-04f, +7.622130399e-04f, +1.107658511e-04f, -6.723823597e-04f, -1.194052169e-03f, -1.168174171e-03f, -5.803171765e-04f, +2.919748629e-04f, +1.020806642e-03f, +1.254286383e-03f, +8.999610301e-04f, +1.632684572e-04f, -5.754372713e-04f, -9.690851856e-04f, -8.772975004e-04f, -4.135911510e-04f, +1.459485814e-04f, +5.262040092e-04f, +5.905697532e-04f, +3.826297553e-04f, +6.629717269e-05f, -1.839368776e-04f, -2.731218630e-04f, -2.121076666e-04f, -8.126626625e-05f, +3.218712466e-05f, +8.143335712e-05f, +7.018346438e-05f, +3.167144923e-05f, -1.158790106e-06f, -1.386332733e-05f, /* 3,22 (48) */ +3.036655070e-04f, +3.138186943e-04f, -1.267175460e-05f, -7.675028767e-04f, -1.793715256e-03f, -2.623494363e-03f, -2.581910930e-03f, -1.075914942e-03f, +2.013036517e-03f, +6.007246800e-03f, +9.387335081e-03f, +1.016120015e-02f, +6.625779301e-03f, -1.697639780e-03f, -1.332249670e-02f, -2.463537442e-02f, -3.054640865e-02f, -2.589655261e-02f, -7.244760282e-03f, +2.556458280e-02f, +6.866824321e-02f, +1.146716972e-01f, +1.543399871e-01f, +1.790366898e-01f, +1.831549078e-01f, +1.657450717e-01f, +1.307937162e-01f, +8.605892704e-02f, +4.085486363e-02f, +3.518562128e-03f, -2.063559395e-02f, -3.028131578e-02f, -2.777860141e-02f, -1.785422774e-02f, -5.820595416e-03f, +4.033670990e-03f, +9.402305008e-03f, +1.009034335e-02f, +7.449830319e-03f, +3.469820763e-03f, -8.617878055e-05f, -2.209611485e-03f, -2.747560586e-03f, -2.161859098e-03f, -1.139065760e-03f, -2.473047785e-04f, +2.396662965e-04f, +3.349998807e-04f, -3.637854360e-06f, +3.863079261e-06f, +1.671572506e-05f, +2.931565927e-05f, +3.226954245e-05f, +1.642741121e-05f, -2.117666142e-05f, -7.220932865e-05f, -1.160633002e-04f, -1.252524243e-04f, -7.675520442e-05f, +3.435414183e-05f, +1.849486176e-04f, +3.234865456e-04f, +3.822527779e-04f, +3.001987772e-04f, +4.920039709e-05f, -3.464359449e-04f, -8.064679161e-04f, -1.211440714e-03f, -1.436361328e-03f, -1.390954474e-03f, -1.052471054e-03f, -4.786053506e-04f, +2.053589224e-04f, +8.418692126e-04f, +1.287326252e-03f, +1.453580330e-03f, +1.330838993e-03f, +9.850063393e-04f, +5.317305164e-04f, +9.744490656e-05f, -2.185427537e-04f, -3.685009711e-04f, -3.608731577e-04f, -2.463571875e-04f, -9.311727215e-05f, +3.855295216e-05f, +1.133339535e-04f, +1.255284079e-04f, +9.238995567e-05f, +4.120392496e-05f, -3.595844583e-06f, -2.847458756e-05f, -3.226215150e-05f, -2.234077122e-05f, -8.644492266e-06f, +1.387406987e-06f, -4.834494332e-04f, -8.843994200e-04f, -7.816892972e-04f, +4.178243766e-04f, +2.751845140e-03f, +5.182484381e-03f, +5.723822078e-03f, +2.500276256e-03f, -4.655565318e-03f, -1.310771336e-02f, -1.793025443e-02f, -1.433527613e-02f, -9.866765005e-04f, +1.783916434e-02f, +3.311184036e-02f, +3.523299562e-02f, +1.968476530e-02f, -9.128896180e-03f, -3.862659048e-02f, -5.375389095e-02f, -4.498747679e-02f, -1.420438042e-02f, +2.523745560e-02f, +5.475703861e-02f, +6.001503116e-02f, +3.843119097e-02f, +5.497826750e-04f, -3.551729255e-02f, -5.344662316e-02f, -4.669619345e-02f, -2.094654469e-02f, +9.897230542e-03f, +3.144816507e-02f, +3.585762376e-02f, +2.454436688e-02f, +5.842708137e-03f, -1.037291103e-02f, -1.774824846e-02f, -1.563589059e-02f, -7.905158190e-03f, +2.010795769e-04f, +5.018850930e-03f, +5.725948188e-03f, +3.744811053e-03f, +1.189653627e-03f, -4.815733386e-04f, -9.410610742e-04f, -6.520496503e-04f, +1.390524188e-05f, +8.374829719e-06f, -1.743698814e-05f, -5.688846585e-05f, -8.283925787e-05f, -5.896394766e-05f, +3.300195016e-05f, +1.660544062e-04f, +2.644118708e-04f, +2.378308219e-04f, +4.272719737e-05f, -2.664042772e-04f, -5.372556494e-04f, -5.887197505e-04f, -3.208629886e-04f, +1.984458425e-04f, +7.341290765e-04f, +9.905944033e-04f, +7.767208785e-04f, +1.350951634e-04f, -6.498723961e-04f, -1.185132988e-03f, -1.178231646e-03f, -6.050395244e-04f, +2.646124904e-04f, +1.004230662e-03f, +1.256220314e-03f, +9.185355443e-04f, +1.884402431e-04f, -5.561707202e-04f, -9.640809589e-04f, -8.869560984e-04f, -4.311449117e-04f, +1.299969664e-04f, +5.188686224e-04f, +5.933189432e-04f, +3.917671351e-04f, +7.595217688e-05f, -1.783419554e-04f, -2.729044808e-04f, -2.155723173e-04f, -8.547385565e-05f, +2.950891663e-05f, +8.093707251e-05f, +7.114822141e-05f, +3.292223457e-05f, -4.181563958e-07f, -1.376291828e-05f, /* 3,23 (48) */ +3.000276527e-04f, +3.176817736e-04f, +4.043970461e-06f, -7.381872174e-04f, -1.761445714e-03f, -2.607066952e-03f, -2.603087592e-03f, -1.148124270e-03f, +1.896973217e-03f, +5.881994376e-03f, +9.310579877e-03f, +1.019555429e-02f, +6.810727919e-03f, -1.374153235e-03f, -1.294024393e-02f, -2.433517564e-02f, -3.049720825e-02f, -2.624298856e-02f, -8.051228198e-03f, +2.435314209e-02f, +6.723188188e-02f, +1.132807427e-01f, +1.532875161e-01f, +1.785580844e-01f, +1.833602667e-01f, +1.665869409e-01f, +1.320810425e-01f, +8.751250737e-02f, +4.218570262e-02f, +4.503568467e-03f, -2.010386343e-02f, -3.018387087e-02f, -2.799714417e-02f, -1.822272871e-02f, -6.181468574e-03f, +3.787313803e-03f, +9.309187736e-03f, +1.012889630e-02f, +7.563164272e-03f, +3.595349171e-03f, +6.211175117e-06f, -2.168407560e-03f, -2.751156430e-03f, -2.190333686e-03f, -1.171327911e-03f, -2.696455497e-04f, +2.310218043e-04f, +3.363872877e-04f, -3.765928427e-06f, +3.531699954e-06f, +1.627639872e-05f, +2.901403414e-05f, +3.242346883e-05f, +1.726148731e-05f, -1.972147714e-05f, -7.058924562e-05f, -1.150718556e-04f, -1.257512449e-04f, -7.925814052e-05f, +3.008526632e-05f, +1.800961712e-04f, +3.200018341e-04f, +3.822883300e-04f, +3.052944180e-04f, +5.950975647e-05f, -3.325518869e-04f, -7.922482224e-04f, -1.200907975e-03f, -1.433101487e-03f, -1.396896783e-03f, -1.067111595e-03f, -4.989853661e-04f, +1.838700421e-04f, +8.242288710e-04f, +1.277362709e-03f, +1.452918539e-03f, +1.338558509e-03f, +9.981125244e-04f, +5.462311107e-04f, +1.096261208e-04f, -2.110826698e-04f, -3.663745517e-04f, -3.630663859e-04f, -2.508801606e-04f, -9.784099981e-05f, +3.519325555e-05f, +1.119851055e-04f, +1.259637630e-04f, +9.384506926e-05f, +4.281104231e-05f, -2.460396421e-06f, -2.803806407e-05f, -3.240260206e-05f, -2.275727877e-05f, -9.044283303e-06f, +1.168558256e-06f, -4.695441913e-04f, -8.760245903e-04f, -7.991262853e-04f, +3.609359108e-04f, +2.669005882e-03f, +5.123520433e-03f, +5.756824028e-03f, +2.666330662e-03f, -4.391153447e-03f, -1.286988254e-02f, -1.788752723e-02f, -1.460168041e-02f, -1.523932150e-03f, +1.725044458e-02f, +3.279097737e-02f, +3.543144146e-02f, +2.041889438e-02f, -8.138301776e-03f, -3.784986960e-02f, -5.361879579e-02f, -4.563734919e-02f, -1.538951341e-02f, +2.405922395e-02f, +5.415199909e-02f, +6.027964365e-02f, +3.943542163e-02f, +1.806002989e-03f, -3.459875701e-02f, -5.325818292e-02f, -4.725236417e-02f, -2.191062565e-02f, +9.010274443e-03f, +3.101702015e-02f, +3.598762072e-02f, +2.506323550e-02f, +6.436027081e-03f, -9.981143894e-03f, -1.767229629e-02f, -1.581423255e-02f, -8.178062671e-03f, -1.449274037e-05f, +4.933377074e-03f, +5.755457105e-03f, +3.825748126e-03f, +1.260801849e-03f, -4.486511040e-04f, -9.414792306e-04f, -6.658125686e-04f, +1.382314016e-05f, +8.837361929e-06f, -1.633537227e-05f, -5.567335481e-05f, -8.260631152e-05f, -6.074030726e-05f, +2.922575262e-05f, +1.619350567e-04f, +2.628105067e-04f, +2.412017540e-04f, +5.112063874e-05f, -2.563527416e-04f, -5.312588432e-04f, -5.917982521e-04f, -3.338793035e-04f, +1.804325406e-04f, +7.201684470e-04f, +9.892171113e-04f, +7.907896309e-04f, +1.592747329e-04f, -6.271099183e-04f, -1.175660842e-03f, -1.187710250e-03f, -6.294585642e-04f, +2.371170630e-04f, +9.871559923e-04f, +1.257552114e-03f, +9.367111105e-04f, +2.136004132e-04f, -5.365573630e-04f, -9.585806927e-04f, -8.962304303e-04f, -4.485957701e-04f, +1.138649555e-04f, +5.112102807e-04f, +5.957879751e-04f, +4.007920296e-04f, +8.567434117e-05f, -1.725816699e-04f, -2.725326564e-04f, -2.189653917e-04f, -8.969986767e-05f, +2.676414031e-05f, +8.037843185e-05f, +7.208531271e-05f, +3.417949566e-05f, +3.436649713e-07f, -1.364594403e-05f, /* 3,24 (48) */ +2.962617242e-04f, +3.212134736e-04f, +2.032036918e-05f, -7.091731833e-04f, -1.729022245e-03f, -2.589805465e-03f, -2.622809069e-03f, -1.218713516e-03f, +1.781901362e-03f, +5.756243131e-03f, +9.231321737e-03f, +1.022563956e-02f, +6.990824090e-03f, -1.054151401e-03f, -1.255795560e-02f, -2.402988123e-02f, -3.043769849e-02f, -2.657554044e-02f, -8.843476421e-03f, +2.315223411e-02f, +6.579878040e-02f, +1.118838460e-01f, +1.522204045e-01f, +1.780590990e-01f, +1.835441367e-01f, +1.674111697e-01f, +1.333584052e-01f, +8.896542591e-02f, +4.352426113e-02f, +5.501680991e-03f, -1.955763232e-02f, -3.007424475e-02f, -2.820822684e-02f, -1.858910326e-02f, -6.544534960e-03f, +3.536433642e-03f, +9.211346736e-03f, +1.016408956e-02f, +7.675149378e-03f, +3.721312934e-03f, +1.000562444e-04f, -2.125596518e-03f, -2.753616827e-03f, -2.218371750e-03f, -1.203730513e-03f, -2.924028285e-04f, +2.219775210e-04f, +3.375558459e-04f, -3.887741319e-06f, +3.206055989e-06f, +1.583741601e-05f, +2.870331762e-05f, +3.255876525e-05f, +1.807329880e-05f, -1.828092849e-05f, -6.896357953e-05f, -1.140471018e-04f, -1.261927572e-04f, -8.169732682e-05f, +2.585857515e-05f, +1.752353437e-04f, +3.164408930e-04f, +3.821851813e-04f, +3.102208145e-04f, +6.967147102e-05f, -3.187373323e-04f, -7.779793207e-04f, -1.190200104e-03f, -1.429573887e-03f, -1.402545559e-03f, -1.081513561e-03f, -5.192504775e-04f, +1.623385964e-04f, +8.064010613e-04f, +1.267121457e-03f, +1.451967164e-03f, +1.346052953e-03f, +1.011108915e-03f, +5.607488983e-04f, +1.219248981e-04f, -2.034562514e-04f, -3.640896352e-04f, -3.651517933e-04f, -2.553639164e-04f, -1.025864097e-04f, +3.177609154e-05f, +1.105729513e-04f, +1.263532515e-04f, +9.528197147e-05f, +4.442473797e-05f, -1.304645589e-06f, -2.758009056e-05f, -3.252916038e-05f, -2.317004037e-05f, -9.447910213e-06f, +9.431530473e-07f, -4.557210512e-04f, -8.671872283e-04f, -8.154616576e-04f, +3.052625560e-04f, +2.586399571e-03f, +5.062780126e-03f, +5.786049781e-03f, +2.828265719e-03f, -4.128342940e-03f, -1.262868078e-02f, -1.783640660e-02f, -1.485803315e-02f, -2.055190993e-03f, +1.665864633e-02f, +3.245709807e-02f, +3.561187401e-02f, +2.113906282e-02f, -7.149084665e-03f, -3.705907997e-02f, -5.345952105e-02f, -4.626445911e-02f, -1.656517425e-02f, +2.287151370e-02f, +5.352254052e-02f, +6.051676072e-02f, +4.042257762e-02f, +3.063555103e-03f, -3.366204590e-02f, -5.304458251e-02f, -4.778892153e-02f, -2.286920634e-02f, +8.114044013e-03f, +3.056842438e-02f, +3.610148568e-02f, +2.557444578e-02f, +7.031815056e-03f, -9.580351865e-03f, -1.758662195e-02f, -1.598681422e-02f, -8.450595327e-03f, -2.334581321e-04f, +4.843677207e-03f, +5.782221245e-03f, +3.906126557e-03f, +1.332887162e-03f, -4.144716084e-04f, -9.411355656e-04f, -6.794585126e-04f, +1.372967500e-05f, +9.278914423e-06f, -1.524945968e-05f, -5.444713427e-05f, -8.232434518e-05f, -6.244626716e-05f, +2.549575523e-05f, +1.577862775e-04f, +2.610858231e-04f, +2.443996772e-04f, +5.939056664e-05f, -2.462725265e-04f, -5.250461533e-04f, -5.945512379e-04f, -3.466302178e-04f, +1.624501163e-04f, +7.059350357e-04f, +9.873630894e-04f, +8.044139162e-04f, +1.832927891e-04f, -6.041071003e-04f, -1.165641565e-03f, -1.196605909e-03f, -6.535621626e-04f, +2.095023907e-04f, +9.695907853e-04f, +1.258280144e-03f, +9.544776028e-04f, +2.387361456e-04f, -5.166059077e-04f, -9.525849697e-04f, -9.051136635e-04f, -4.659339923e-04f, +9.755980851e-05f, +5.032305666e-04f, +5.979730964e-04f, +4.096984102e-04f, +9.545894178e-05f, -1.666573908e-04f, -2.720046459e-04f, -2.222838567e-04f, -9.394195902e-05f, +2.395346008e-05f, +7.975667761e-05f, +7.299351605e-05f, +3.544241166e-05f, +1.126549914e-06f, -1.351207367e-05f, /* 3,25 (48) */ +2.923739829e-04f, +3.244195295e-04f, +3.615778519e-05f, -6.804698657e-04f, -1.696463480e-03f, -2.571732166e-03f, -2.641089998e-03f, -1.287677096e-03f, +1.667854260e-03f, +5.630050374e-03f, +9.149624410e-03f, +1.025149813e-02f, +7.166059434e-03f, -7.377105075e-04f, -1.217577041e-02f, -2.371966041e-02f, -3.036802702e-02f, -2.689427778e-02f, -9.621455742e-03f, +2.196203401e-02f, +6.436920651e-02f, +1.104813004e-01f, +1.511388909e-01f, +1.775398486e-01f, +1.837064753e-01f, +1.682175708e-01f, +1.346255266e-01f, +9.041739307e-02f, +4.487031408e-02f, +6.512789906e-03f, -1.899688343e-02f, -2.995231985e-02f, -2.841168309e-02f, -1.895319289e-02f, -6.909686753e-03f, +3.281069726e-03f, +9.108760326e-03f, +1.019586565e-02f, +7.785722329e-03f, +3.847666186e-03f, +1.953382158e-04f, -2.081171780e-03f, -2.754921472e-03f, -2.245951840e-03f, -1.236259674e-03f, -3.155728688e-04f, +2.125296108e-04f, +3.384989990e-04f, -4.003341125e-06f, +2.886233797e-06f, +1.539901900e-05f, +2.838383397e-05f, +3.267567353e-05f, +1.886280976e-05f, -1.685545253e-05f, -6.733312003e-05f, -1.129899195e-04f, -1.265775157e-04f, -8.407257635e-05f, +2.167520746e-05f, +1.703680708e-04f, +3.128058986e-04f, +3.819449340e-04f, +3.149782048e-04f, +7.968398176e-05f, -3.049954720e-04f, -7.636652355e-04f, -1.179320741e-03f, -1.425780546e-03f, -1.407900393e-03f, -1.095674065e-03f, -5.393960823e-04f, +1.407695631e-04f, +7.883896686e-04f, +1.256604192e-03f, +1.450725344e-03f, +1.353319360e-03f, +1.023991514e-03f, +5.752801377e-04f, +1.343388010e-04f, -1.956641385e-04f, -3.616452175e-04f, -3.671273824e-04f, -2.598063079e-04f, -1.073519189e-04f, +2.830211710e-05f, +1.090972631e-04f, +1.266960993e-04f, +9.669978219e-05f, +4.604437911e-05f, -1.288219903e-07f, -2.710054154e-05f, -3.264151887e-05f, -2.357875726e-05f, -9.855206040e-06f, +7.112032361e-07f, -4.419913762e-04f, -8.579083139e-04f, -8.307111173e-04f, +2.508154217e-04f, +2.504075226e-03f, +5.000333859e-03f, +5.811545536e-03f, +2.986051997e-03f, -3.867257117e-03f, -1.238428111e-02f, -1.777701603e-02f, -1.510430567e-02f, -2.580237146e-03f, +1.606409509e-02f, +3.211046785e-02f, +3.577432412e-02f, +2.184499786e-02f, -6.161721576e-03f, -3.625466605e-02f, -5.327622826e-02f, -4.686856621e-02f, -1.773081582e-02f, +2.167490780e-02f, +5.286897836e-02f, +6.072626311e-02f, +4.139216841e-02f, +4.321835247e-03f, -3.270756830e-02f, -5.280584636e-02f, -4.830552744e-02f, -2.382179131e-02f, +7.208930350e-03f, +3.010249039e-02f, +3.619904549e-02f, +2.607767635e-02f, +7.629788152e-03f, -9.170653454e-03f, -1.749116300e-02f, -1.615347161e-02f, -8.722599973e-03f, -4.557419887e-04f, +4.749735248e-03f, +5.806174705e-03f, +3.985883235e-03f, +1.405880678e-03f, -3.790291967e-04f, -9.400090157e-04f, -6.929705863e-04f, +1.362524182e-05f, +9.699627145e-06f, -1.417974247e-05f, -5.321091650e-05f, -8.199446477e-05f, -6.408192298e-05f, +2.181355622e-05f, +1.536109821e-04f, +2.592404393e-04f, +2.474248378e-04f, +6.753371491e-05f, -2.361694382e-04f, -5.186228688e-04f, -5.969798764e-04f, -3.591109445e-04f, +1.445077386e-04f, +6.914377299e-04f, +9.850356039e-04f, +8.175886110e-04f, +2.071376851e-04f, -5.808762122e-04f, -1.155081271e-03f, -1.204914861e-03f, -6.773383576e-04f, +1.817823486e-04f, +9.515434587e-04f, +1.258403080e-03f, +9.718250891e-04f, +2.638345942e-04f, -4.963252740e-04f, -9.460946405e-04f, -9.135991424e-04f, -4.831498493e-04f, +8.108892828e-05f, +4.949312534e-04f, +5.998706843e-04f, +4.184802618e-04f, +1.053011715e-04f, -1.605706006e-04f, -2.713187798e-04f, -2.255246866e-04f, -9.819774306e-05f, +2.107759459e-05f, +7.907108373e-05f, +7.387160839e-05f, +3.671014137e-05f, +1.930354200e-06f, -1.336098404e-05f, /* 3,26 (48) */ +2.883706418e-04f, +3.273057633e-04f, +5.155680418e-05f, -6.520860317e-04f, -1.663787806e-03f, -2.552869356e-03f, -2.657945450e-03f, -1.355010216e-03f, +1.554864340e-03f, +5.503472858e-03f, +9.065551833e-03f, +1.027317334e-02f, +7.336427504e-03f, -4.249046089e-04f, -1.179382548e-02f, -2.340468221e-02f, -3.028834304e-02f, -2.719927325e-02f, -1.038512098e-02f, +2.078271327e-02f, +6.294342596e-02f, +1.090734000e-01f, +1.500432169e-01f, +1.770004525e-01f, +1.838472449e-01f, +1.690059605e-01f, +1.358821308e-01f, +9.186811842e-02f, +4.622363344e-02f, +7.536781420e-03f, -1.842160329e-02f, -2.981798105e-02f, -2.860734723e-02f, -1.931483811e-02f, -7.276814136e-03f, +3.021263418e-03f, +9.001408407e-03f, +1.022416777e-02f, +7.894819592e-03f, +3.974362285e-03f, +2.920379980e-04f, -2.035127401e-03f, -2.755050294e-03f, -2.273052382e-03f, -1.268901192e-03f, -3.391516261e-04f, +2.026744047e-04f, +3.392102022e-04f, -4.112779054e-06f, +2.572314865e-06f, +1.496144545e-05f, +2.805590700e-05f, +3.277444107e-05f, +1.962999545e-05f, -1.544547346e-05f, -6.569864863e-05f, -1.119011921e-04f, -1.269060919e-04f, -8.638373006e-05f, +1.753627284e-05f, +1.654962695e-04f, +3.090990316e-04f, +3.815692209e-04f, +3.195668788e-04f, +8.954578688e-05f, -2.913294552e-04f, -7.493099823e-04f, -1.168273555e-03f, -1.421723547e-03f, -1.412960956e-03f, -1.109590290e-03f, -5.594176131e-04f, +1.191679313e-04f, +7.701986314e-04f, +1.245812685e-03f, +1.449192291e-03f, +1.360354815e-03f, +1.036756339e-03f, +5.898210613e-04f, +1.468653409e-04f, -1.877070282e-04f, -3.590403383e-04f, -3.689911742e-04f, -2.642051807e-04f, -1.121359191e-04f, +2.477201947e-05f, +1.075578371e-04f, +1.269915428e-04f, +9.809761845e-05f, +4.766932167e-05f, +1.066831678e-06f, -2.659930036e-05f, -3.273937254e-05f, -2.398312798e-05f, -1.026599884e-05f, +4.727250007e-07f, -4.283661344e-04f, -8.482086868e-04f, -8.448908597e-04f, +1.976045052e-04f, +2.422080761e-03f, +4.936251936e-03f, +5.833359092e-03f, +3.139662979e-03f, -3.608016678e-03f, -1.213685627e-02f, -1.770948231e-02f, -1.534047511e-02f, -3.098860015e-03f, +1.546711522e-02f, +3.175135691e-02f, +3.591883186e-02f, +2.253643559e-02f, -5.176685972e-03f, -3.543707744e-02f, -5.306909058e-02f, -4.744944242e-02f, -1.888589709e-02f, +2.046999293e-02f, +5.219164000e-02f, +6.090804546e-02f, +4.234371187e-02f, +5.580238328e-03f, -3.173574321e-02f, -5.254201177e-02f, -4.880185272e-02f, -2.476788595e-02f, +6.295331207e-03f, +2.961934054e-02f, +3.628013442e-02f, +2.657260760e-02f, +8.229658837e-03f, -8.752173193e-03f, -1.738586183e-02f, -1.631404221e-02f, -8.993918753e-03f, -6.812666753e-04f, +4.651537505e-03f, +5.827252300e-03f, +4.064954319e-03f, +1.479752286e-03f, -3.423190553e-04f, -9.380786615e-04f, -7.063315703e-04f, +1.351023705e-05f, +1.009965468e-05f, -1.312669022e-05f, -5.196580074e-05f, -8.161779110e-05f, -6.564741609e-05f, +1.818069976e-05f, +1.494120619e-04f, +2.572770162e-04f, +2.502775821e-04f, +7.554692499e-05f, -2.260492410e-04f, -5.119943527e-04f, -5.990855072e-04f, -3.713168784e-04f, +1.266144987e-04f, +6.766855115e-04f, +9.822381595e-04f, +8.303088519e-04f, +2.307979033e-04f, -5.574296133e-04f, -1.143986344e-03f, -1.212633655e-03f, -7.007753656e-04f, +1.539708695e-04f, +9.330226906e-04f, +1.257919916e-03f, +9.887438369e-04f, +2.888828959e-04f, -4.757245889e-04f, -9.391108251e-04f, -9.216803928e-04f, -5.002336227e-04f, +6.445985719e-05f, +4.863143052e-04f, +6.014772487e-04f, +4.271315862e-04f, +1.151961420e-04f, -1.543228943e-04f, -2.704734651e-04f, -2.286848653e-04f, -1.024647908e-04f, +1.813731700e-05f, +7.832095665e-05f, +7.471836679e-05f, +3.798182344e-05f, +2.754913188e-06f, -1.319236015e-05f, /* 3,27 (48) */ +2.842578627e-04f, +3.298780782e-04f, +6.651824963e-05f, -6.240301247e-04f, -1.631013365e-03f, -2.533239361e-03f, -2.673390924e-03f, -1.420708864e-03f, +1.442963148e-03f, +5.376566766e-03f, +8.979168103e-03f, +1.029070961e-02f, +7.501923774e-03f, -1.158055773e-04f, -1.141225626e-02f, -2.308511533e-02f, -3.019879725e-02f, -2.749060270e-02f, -1.113443096e-02f, +1.961443971e-02f, +6.152170242e-02f, +1.076604390e-01f, +1.489336266e-01f, +1.764410349e-01f, +1.839664128e-01f, +1.697761591e-01f, +1.371279435e-01f, +9.331731071e-02f, +4.758398826e-02f, +8.573537759e-03f, -1.783178223e-02f, -2.967111571e-02f, -2.879505426e-02f, -1.967387845e-02f, -7.645805310e-03f, +2.757058237e-03f, +8.889272488e-03f, +1.024893978e-02f, +8.002377430e-03f, +4.101353828e-03f, +3.901356165e-04f, -1.987458079e-03f, -2.753983463e-03f, -2.299651682e-03f, -1.301640565e-03f, -3.631347541e-04f, +1.924084059e-04f, +3.396829272e-04f, -4.216109366e-06f, +2.264375771e-06f, +1.452492876e-05f, +2.771985991e-05f, +3.285532073e-05f, +2.037484222e-05f, -1.405140252e-05f, -6.406093845e-05f, -1.107818055e-04f, -1.271790738e-04f, -8.863065662e-05f, +1.344285118e-05f, +1.606218381e-04f, +3.053224756e-04f, +3.810597053e-04f, +3.239871777e-04f, +9.925544176e-05f, -2.777423880e-04f, -7.349175668e-04f, -1.157062250e-03f, -1.417405042e-03f, -1.417727002e-03f, -1.123259489e-03f, -5.793105393e-04f, +9.753869981e-05f, +7.518319412e-04f, +1.234748787e-03f, +1.447367298e-03f, +1.367156457e-03f, +1.049399420e-03f, +6.043678766e-04f, +1.595019776e-04f, -1.795856748e-04f, -3.562740812e-04f, -3.707412088e-04f, -2.685583734e-04f, -1.169367772e-04f, +2.118651621e-05f, +1.059544931e-04f, +1.272388292e-04f, +9.947459474e-05f, +4.929891051e-05f, +2.282059878e-06f, -2.607625943e-05f, -3.282241924e-05f, -2.438284863e-05f, -1.068011173e-05f, +2.277388815e-07f, -4.148558973e-04f, -8.381090321e-04f, -8.580175499e-04f, +1.456387045e-04f, +2.340462970e-03f, +4.870604520e-03f, +5.851539792e-03f, +3.289075041e-03f, -3.350739662e-03f, -1.188657869e-02f, -1.763393539e-02f, -1.556652435e-02f, -3.610854368e-03f, +1.486802971e-02f, +3.138004003e-02f, +3.604544636e-02f, +2.321312110e-02f, -4.194447812e-03f, -3.460676859e-02f, -5.283829268e-02f, -4.800687203e-02f, -2.002988343e-02f, +1.925735928e-02f, +5.149086464e-02f, +6.106201633e-02f, +4.327673456e-02f, +6.838158244e-03f, -3.074699937e-02f, -5.225312887e-02f, -4.927757730e-02f, -2.570699678e-02f, +5.373650814e-03f, +2.911910692e-02f, +3.634459427e-02f, +2.705892191e-02f, +8.831136085e-03f, -8.325041607e-03f, -1.727066569e-02f, -1.646836510e-02f, -9.264392218e-03f, -9.099515406e-04f, +4.549072714e-03f, +5.845389617e-03f, +4.143275275e-03f, +1.554470653e-03f, -3.043372319e-04f, -9.353237483e-04f, -7.195239305e-04f, +1.338505782e-05f, +1.047916587e-05f, -1.209074997e-05f, -5.071287250e-05f, -8.119545879e-05f, -6.714293286e-05f, +1.459867564e-05f, +1.451923846e-04f, +2.551982542e-04f, +2.529583551e-04f, +8.342714677e-05f, -2.159176551e-04f, -5.051660376e-04f, -6.008696396e-04f, -3.832435974e-04f, +1.087794048e-04f, +6.616874512e-04f, +9.789744964e-04f, +8.425700365e-04f, +2.542620618e-04f, -5.337797449e-04f, -1.132363442e-03f, -1.219759154e-03f, -7.238615871e-04f, +1.260819359e-04f, +9.140374150e-04f, +1.256829962e-03f, +1.005224319e-03f, +3.138681769e-04f, -4.548131826e-04f, -9.316349126e-04f, -9.293511264e-04f, -5.171756103e-04f, +4.768027379e-05f, +4.773818773e-04f, +6.027894352e-04f, +4.356464065e-04f, +1.251388857e-04f, -1.479159801e-04f, -2.694671867e-04f, -2.317613882e-04f, -1.067406320e-04f, +1.513345528e-05f, +7.750563625e-05f, +7.553256929e-05f, +3.925657677e-05f, +3.600041585e-06f, -1.300589560e-05f, /* 3,28 (48) */ +2.800417534e-04f, +3.321424540e-04f, +8.104317839e-05f, -5.963102648e-04f, -1.598158045e-03f, -2.512864519e-03f, -2.687442326e-03f, -1.484769803e-03f, +1.332181343e-03f, +5.249387692e-03f, +8.890537447e-03f, +1.030415246e-02f, +7.662545612e-03f, +1.895168983e-04f, -1.103119655e-02f, -2.276112815e-02f, -3.009954181e-02f, -2.776834509e-02f, -1.186934853e-02f, +1.845737746e-02f, +6.010429737e-02f, +1.062427120e-01f, +1.478103671e-01f, +1.758617243e-01f, +1.840639515e-01f, +1.705279911e-01f, +1.383626923e-01f, +9.476467801e-02f, +4.895114472e-02f, +9.622937179e-03f, -1.722741435e-02f, -2.951161373e-02f, -2.897463993e-02f, -2.003015253e-02f, -8.016546519e-03f, +2.488499864e-03f, +8.772335711e-03f, +1.027012630e-02f, +8.108331923e-03f, +4.228592657e-03f, +4.896102112e-04f, -1.938159169e-03f, -2.751701403e-03f, -2.325727942e-03f, -1.334462984e-03f, -3.875176027e-04f, +1.817282941e-04f, +3.399106661e-04f, -4.313389282e-06f, +1.962488206e-06f, +1.408969792e-05f, +2.737601512e-05f, +3.291857052e-05f, +2.109734737e-05f, -1.267363801e-05f, -6.242075398e-05f, -1.096326479e-04f, -1.273970654e-04f, -9.081325215e-05f, +9.395992526e-06f, +1.557466555e-04f, +3.014784169e-04f, +3.804180795e-04f, +3.282394937e-04f, +1.088115592e-04f, -2.642373334e-04f, -7.204919830e-04f, -1.145690556e-03f, -1.412827242e-03f, -1.422198365e-03f, -1.136678987e-03f, -5.990703682e-04f, +7.588687551e-05f, +7.332936410e-04f, +1.223414427e-03f, +1.445249734e-03f, +1.373721479e-03f, +1.061916802e-03f, +6.189167668e-04f, +1.722461206e-04f, -1.713008898e-04f, -3.533455744e-04f, -3.723755467e-04f, -2.728637187e-04f, -1.217528356e-04f, +1.754635521e-05f, +1.042870754e-04f, +1.274372170e-04f, +1.008298234e-04f, +5.093247959e-05f, +3.516594185e-06f, -2.553132036e-05f, -3.289035984e-05f, -2.477761287e-05f, -1.109736287e-05f, -2.373016503e-08f, -4.014708395e-04f, -8.276298662e-04f, -8.701082999e-04f, +9.492583196e-05f, +2.259267511e-03f, +4.803461587e-03f, +5.866138468e-03f, +3.434267425e-03f, -3.095541408e-03f, -1.163362033e-02f, -1.755050824e-02f, -1.578244201e-02f, -4.116020405e-03f, +1.426716007e-02f, +3.099679643e-02f, +3.615422576e-02f, +2.387480855e-02f, -3.215473316e-03f, -3.376419855e-02f, -5.258403061e-02f, -4.854065178e-02f, -2.116224687e-02f, +1.803760013e-02f, +5.076700305e-02f, +6.118809826e-02f, +4.419077197e-02f, +8.094988206e-03f, -2.974177505e-02f, -5.193926069e-02f, -4.973239049e-02f, -2.663863169e-02f, +4.444299688e-03f, +2.860193131e-02f, +3.639227455e-02f, +2.753630378e-02f, +9.433925520e-03f, -7.889395200e-03f, -1.714552680e-02f, -1.661628108e-02f, -9.533859405e-03f, -1.141712929e-03f, +4.442332082e-03f, +5.860523072e-03f, +4.220780912e-03f, +1.630003222e-03f, -2.650806551e-04f, -9.317237067e-04f, -7.325298261e-04f, +1.325010149e-05f, +1.083834336e-05f, -1.107234635e-05f, -4.945320309e-05f, -8.072861528e-05f, -6.856870388e-05f, +1.106891903e-05f, +1.409547922e-04f, +2.530068907e-04f, +2.554676994e-04f, +9.117143940e-05f, -2.057803530e-04f, -4.981434225e-04f, -6.023339503e-04f, -3.948868638e-04f, +9.101137782e-05f, +6.464527035e-04f, +9.752485870e-04f, +8.543678256e-04f, +2.775189198e-04f, -5.099391233e-04f, -1.120219483e-03f, -1.226288538e-03f, -7.465856134e-04f, +9.812957267e-05f, +8.945968170e-04f, +1.255132848e-03f, +1.021257219e-03f, +3.387775609e-04f, -4.336005838e-04f, -9.236685619e-04f, -9.366052454e-04f, -5.339661313e-04f, +3.075798926e-05f, +4.681363162e-04f, +6.038040284e-04f, +4.440187700e-04f, +1.351243585e-04f, -1.413516791e-04f, -2.682985099e-04f, -2.347512644e-04f, -1.110227562e-04f, +1.206689233e-05f, +7.662449684e-05f, +7.631299584e-05f, +4.053350083e-05f, +4.465533215e-06f, -1.280129310e-05f, /* 3,29 (48) */ +2.757283641e-04f, +3.341049422e-04f, +9.513287631e-05f, -5.689342497e-04f, -1.565239474e-03f, -2.491767171e-03f, -2.700115964e-03f, -1.547190557e-03f, +1.222548695e-03f, +5.121990627e-03f, +8.799724195e-03f, +1.031354846e-02f, +7.818292268e-03f, +4.909953152e-04f, -1.065077847e-02f, -2.243288866e-02f, -2.999073025e-02f, -2.803258242e-02f, -1.258984051e-02f, +1.731168690e-02f, +5.869147013e-02f, +1.048205137e-01f, +1.466736881e-01f, +1.752626540e-01f, +1.841398384e-01f, +1.712612847e-01f, +1.395861067e-01f, +9.620992774e-02f, +5.032486620e-02f, +1.068485398e-02f, -1.660849758e-02f, -2.933936761e-02f, -2.914594082e-02f, -2.038349811e-02f, -8.388922065e-03f, +2.215636145e-03f, +8.650582875e-03f, +1.028767266e-02f, +8.212618998e-03f, +4.356029874e-03f, +5.904400346e-04f, -1.887226689e-03f, -2.748184809e-03f, -2.351259262e-03f, -1.367353344e-03f, -4.122952156e-04f, +1.706309313e-04f, +3.398869359e-04f, -4.404678912e-06f, +1.666719010e-06f, +1.365597741e-05f, +2.702469411e-05f, +3.296445351e-05f, +2.179751896e-05f, -1.131256524e-05f, -6.077885086e-05f, -1.084546092e-04f, -1.275606867e-04f, -9.293143999e-05f, +5.396717026e-06f, +1.508725802e-04f, +2.975690434e-04f, +3.796460644e-04f, +3.323242692e-04f, +1.182128095e-04f, -2.508173099e-04f, -7.060372125e-04f, -1.134162233e-03f, -1.407992425e-03f, -1.426374959e-03f, -1.149846182e-03f, -6.186926465e-04f, +5.421747208e-05f, +7.145878244e-04f, +1.211811609e-03f, +1.442839046e-03f, +1.380047129e-03f, +1.074304548e-03f, +6.334638925e-04f, +1.850951294e-04f, -1.628535423e-04f, -3.502539917e-04f, -3.738922690e-04f, -2.771190438e-04f, -1.265824125e-04f, +1.385231473e-05f, +1.025554528e-04f, +1.275859766e-04f, +1.021624150e-04f, +5.256935211e-05f, +4.770153257e-06f, -2.496439415e-05f, -3.294289841e-05f, -2.516711215e-05f, -1.151756553e-05f, -2.816527132e-07f, -3.882207380e-04f, -8.167915229e-04f, -8.811806463e-04f, +4.547262888e-05f, +2.178538896e-03f, +4.734892883e-03f, +5.877207387e-03f, +3.575222217e-03f, -2.842534517e-03f, -1.137815263e-02f, -1.745933680e-02f, -1.598822236e-02f, -4.614163828e-03f, +1.366482612e-02f, +3.060190957e-02f, +3.624523714e-02f, +2.452126126e-02f, -2.240224729e-03f, -3.290983073e-02f, -5.230651169e-02f, -4.905059090e-02f, -2.228246635e-02f, +1.681131159e-02f, +5.002041744e-02f, +6.128622784e-02f, +4.508536879e-02f, +9.350121055e-03f, -2.872051783e-02f, -5.160048313e-02f, -5.016599107e-02f, -2.756230025e-02f, +3.507694442e-03f, +2.806796518e-02f, +3.642303254e-02f, +2.800444010e-02f, +1.003772955e-02f, -7.445376430e-03f, -1.701040245e-02f, -1.675763276e-02f, -9.802157915e-03f, -1.376464193e-03f, +4.331309326e-03f, +5.872589965e-03f, +4.297405409e-03f, +1.706316218e-03f, -2.245471543e-04f, -9.272581735e-04f, -7.453311192e-04f, +1.310576536e-05f, +1.117738321e-05f, -1.007188154e-05f, -4.818784893e-05f, -8.021841976e-05f, -6.992500318e-05f, +7.592810238e-06f, +1.367021002e-04f, +2.507056983e-04f, +2.578062539e-04f, +9.877697198e-05f, -1.956429568e-04f, -4.909320686e-04f, -6.034802808e-04f, -4.062426254e-04f, +7.331924678e-05f, +6.309905005e-04f, +9.710646329e-04f, +8.656981442e-04f, +3.005573838e-04f, -4.859203331e-04f, -1.107561650e-03f, -1.232219304e-03f, -7.689362327e-04f, +7.012783938e-05f, +8.747103281e-04f, +1.252828523e-03f, +1.036833437e-03f, +3.635981751e-04f, -4.120965150e-04f, -9.152137016e-04f, -9.434368467e-04f, -5.505955327e-04f, +1.370094375e-05f, +4.585801599e-04f, +6.045179545e-04f, +4.522427527e-04f, +1.451474416e-04f, -1.346319256e-04f, -2.669660816e-04f, -2.376515187e-04f, -1.153086141e-04f, +8.938566172e-06f, +7.567694817e-05f, +7.705842929e-05f, +4.181167602e-05f, +5.351160797e-06f, -1.257826480e-05f, /* 3,30 (48) */ +2.713236852e-04f, +3.357716612e-04f, +1.087888537e-04f, -5.419095556e-04f, -1.532275021e-03f, -2.469969652e-03f, -2.711428529e-03f, -1.607969408e-03f, +1.114094085e-03f, +4.994429940e-03f, +8.706792755e-03f, +1.031894517e-02f, +7.969164848e-03f, +7.885643586e-04f, -1.027113241e-02f, -2.210056439e-02f, -2.987251744e-02f, -2.828339973e-02f, -1.329587772e-02f, +1.617752467e-02f, +5.728347771e-02f, +1.033941387e-01f, +1.455238419e-01f, +1.746439613e-01f, +1.841940559e-01f, +1.719758725e-01f, +1.407979183e-01f, +9.765276679e-02f, +5.170491332e-02f, +1.175915853e-02f, -1.597503369e-02f, -2.915427248e-02f, -2.930879436e-02f, -2.073375210e-02f, -8.762814334e-03f, +1.938517101e-03f, +8.524000463e-03f, +1.030152497e-02f, +8.315174451e-03f, +4.483615851e-03f, +6.926024496e-04f, -1.834657337e-03f, -2.743414655e-03f, -2.376223656e-03f, -1.400296242e-03f, -4.374623277e-04f, +1.591133657e-04f, +3.396052832e-04f, -4.490041168e-06f, +1.377130203e-06f, +1.322398717e-05f, +2.666621724e-05f, +3.299323754e-05f, +2.247537575e-05f, -9.968556543e-06f, -5.913597559e-05f, -1.072485805e-04f, -1.276705727e-04f, -9.498517043e-05f, +1.446014787e-06f, +1.460014508e-04f, +2.935965438e-04f, +3.787454085e-04f, +3.362419967e-04f, +1.274579203e-04f, -2.374852913e-04f, -6.915572233e-04f, -1.122481066e-03f, -1.402902931e-03f, -1.430256781e-03f, -1.162758543e-03f, -6.381729614e-04f, +3.253550840e-05f, +6.957186340e-04f, +1.199942416e-03f, +1.440134762e-03f, +1.386130709e-03f, +1.086558738e-03f, +6.480053926e-04f, +1.980463138e-04f, -1.542445587e-04f, -3.469985528e-04f, -3.752894788e-04f, -2.813221715e-04f, -1.314238026e-04f, +1.010520338e-05f, +1.007595192e-04f, +1.276843902e-04f, +1.034714787e-04f, +5.420884075e-05f, +6.042442799e-06f, -2.437540135e-05f, -3.297974244e-05f, -2.555103579e-05f, -1.194052812e-05f, -5.459948177e-07f, -3.751149726e-04f, -8.056141397e-04f, -8.912525278e-04f, -2.715220056e-06f, +2.098320476e-03f, +4.664967880e-03f, +5.884800197e-03f, +3.711924318e-03f, -2.591828819e-03f, -1.112034638e-02f, -1.736055983e-02f, -1.618386532e-02f, -5.105095897e-03f, +1.306134584e-02f, +3.019566694e-02f, +3.631855639e-02f, +2.515225176e-02f, -1.269160096e-03f, -3.204413258e-02f, -5.200595431e-02f, -4.953651123e-02f, -2.339002800e-02f, +1.557909228e-02f, +4.925148120e-02f, +6.135635567e-02f, +4.596007912e-02f, +1.060294958e-02f, -2.768368439e-02f, -5.123688496e-02f, -5.057808759e-02f, -2.847751395e-02f, +2.564257596e-03f, +2.751736964e-02f, +3.643673348e-02f, +2.846302026e-02f, +1.064224750e-02f, -6.993133677e-03f, -1.686525500e-02f, -1.689226469e-02f, -1.006912400e-02f, -1.614115712e-03f, +4.216000711e-03f, +5.881528531e-03f, +4.373082357e-03f, +1.783374647e-03f, -1.827354783e-04f, -9.219070127e-04f, -7.579093840e-04f, +1.295244630e-05f, +1.149649446e-05f, -9.089735452e-06f, -4.691785108e-05f, -7.966604217e-05f, -7.121214734e-05f, +4.171674522e-06f, +1.324370954e-04f, +2.482974822e-04f, +2.599747520e-04f, +1.062410242e-04f, -1.855110352e-04f, -4.835375958e-04f, -6.043106357e-04f, -4.173070169e-04f, +5.571174430e-05f, +6.153101469e-04f, +9.664270613e-04f, +8.765571829e-04f, +3.233665128e-04f, -4.617360196e-04f, -1.094397381e-03f, -1.237549266e-03f, -7.909024357e-04f, +4.209082247e-05f, +8.543876214e-04f, +1.249917253e-03f, +1.051944096e-03f, +3.883171580e-04f, -3.903108881e-04f, -9.062725306e-04f, -9.498402261e-04f, -5.670541940e-04f, -3.482797389e-06f, +4.487161370e-04f, +6.049282845e-04f, +4.603124626e-04f, +1.552029443e-04f, -1.277587669e-04f, -2.654686322e-04f, -2.404591937e-04f, -1.195956183e-04f, +5.749470101e-06f, +7.466243631e-05f, +7.776765626e-05f, +4.309016406e-05f, +6.256675746e-06f, -1.233653283e-05f, /* 3,31 (48) */ +2.668336440e-04f, +3.371487914e-04f, +1.220128409e-04f, -5.152433383e-04f, -1.499281783e-03f, -2.447494277e-03f, -2.721397086e-03f, -1.667105383e-03f, +1.006845505e-03f, +4.866759367e-03f, +8.611807584e-03f, +1.032039119e-02f, +8.115166299e-03f, +1.082160902e-03f, -9.892387002e-03f, -2.176432239e-02f, -2.974505952e-02f, -2.852088503e-02f, -1.398743494e-02f, +1.505504361e-02f, +5.588057478e-02f, +1.019638819e-01f, +1.443610834e-01f, +1.740057884e-01f, +1.842265914e-01f, +1.726715912e-01f, +1.419978608e-01f, +9.909290155e-02f, +5.309104403e-02f, +1.284571727e-02f, -1.532702830e-02f, -2.895622617e-02f, -2.946303892e-02f, -2.108075065e-02f, -9.138103813e-03f, +1.657194930e-03f, +8.392576660e-03f, +1.031163017e-02f, +8.415933970e-03f, +4.611300241e-03f, +7.960739283e-04f, -1.780448496e-03f, -2.737372213e-03f, -2.400599057e-03f, -1.433275985e-03f, -4.630133635e-04f, +1.471728376e-04f, +3.390592884e-04f, -4.569541687e-06f, +1.093779023e-06f, +1.279394254e-05f, +2.630090367e-05f, +3.300519509e-05f, +2.313094698e-05f, -8.641971212e-06f, -5.749286536e-05f, -1.060154541e-04f, -1.277273734e-04f, -9.697442048e-05f, -2.455154195e-06f, +1.411350845e-04f, +2.895631068e-04f, +3.777178872e-04f, +3.399932180e-04f, +1.365456772e-04f, -2.242442057e-04f, -6.770559685e-04f, -1.110650867e-03f, -1.397561162e-03f, -1.433843904e-03f, -1.175413611e-03f, -6.575069420e-04f, +1.084600706e-05f, +6.766902606e-04f, +1.187809005e-03f, +1.437136486e-03f, +1.391969581e-03f, +1.098675471e-03f, +6.625373850e-04f, +2.110969350e-04f, -1.454749231e-04f, -3.435785237e-04f, -3.765653018e-04f, -2.854709206e-04f, -1.362752771e-04f, +6.305860108e-06f, +9.889919355e-05f, +1.277317531e-04f, +1.047561226e-04f, +5.585024780e-05f, +7.333155539e-06f, -2.376427225e-05f, -3.300060303e-05f, -2.592907112e-05f, -1.236605420e-05f, -8.167179641e-07f, -3.621625263e-04f, -7.941176452e-04f, -9.003422633e-04f, -4.963307114e-05f, +2.018654434e-03f, +4.593755732e-03f, +5.888971872e-03f, +3.844361413e-03f, -2.343531337e-03f, -1.086037163e-02f, -1.725431881e-02f, -1.636937635e-02f, -5.588633492e-03f, +1.245703520e-02f, +2.977835992e-02f, +3.637426813e-02f, +2.576756190e-02f, -3.027330347e-04f, -3.116757540e-02f, -5.168258780e-02f, -4.999824725e-02f, -2.448442539e-02f, +1.434154302e-02f, +4.846057877e-02f, +6.139844650e-02f, +4.681446674e-02f, +1.185286683e-02f, -2.663174030e-02f, -5.084856780e-02f, -5.096839847e-02f, -2.938378648e-02f, +1.614417370e-03f, +2.695031545e-02f, +3.643325068e-02f, +2.891173640e-02f, +1.124717579e-02f, -6.532821215e-03f, -1.671005206e-02f, -1.702002346e-02f, -1.033459263e-02f, -1.854574906e-03f, +4.096405093e-03f, +5.887278001e-03f, +4.447744793e-03f, +1.861142303e-03f, -1.396453142e-04f, -9.156503370e-04f, -7.702459168e-04f, +1.279054036e-05f, +1.179589871e-05f, -8.126265744e-06f, -4.564423467e-05f, -7.907266217e-05f, -7.243049474e-05f, +8.067819448e-07f, +1.281625351e-04f, +2.457850786e-04f, +2.619740203e-04f, +1.135609871e-04f, -1.753901006e-04f, -4.759656788e-04f, -6.048271801e-04f, -4.280763606e-04f, +3.819750226e-05f, +5.994210138e-04f, +9.613405219e-04f, +8.869413989e-04f, +3.459355243e-04f, -4.373988820e-04f, -1.080734367e-03f, -1.242276557e-03f, -8.124734222e-04f, +1.403262768e-05f, +8.336386060e-04f, +1.246399629e-03f, +1.066580545e-03f, +4.129216663e-04f, -3.682537994e-04f, -8.968475170e-04f, -9.558098825e-04f, -5.833325336e-04f, -2.078504744e-05f, +4.385471672e-04f, +6.050322369e-04f, +4.682220434e-04f, +1.652856064e-04f, -1.207343630e-04f, -2.638049775e-04f, -2.431713521e-04f, -1.238811450e-04f, +2.500652728e-06f, +7.358044464e-05f, +7.843946816e-05f, +4.436800841e-05f, +7.181807980e-06f, -1.207582970e-05f, /* 4, 0 (48) */ -4.440791761e-04f, -7.736617456e-04f, -5.842197404e-04f, +4.733051837e-04f, +2.096961908e-03f, +3.159739597e-03f, +2.247925700e-03f, -1.196916207e-03f, -5.859365612e-03f, -8.625924656e-03f, -6.226830420e-03f, +2.191702212e-03f, +1.322393203e-02f, +1.983561445e-02f, +1.498813646e-02f, -3.241530928e-03f, -2.808652174e-02f, -4.494512491e-02f, -3.739225953e-02f, +4.047367480e-03f, +7.496487828e-02f, +1.562849362e-01f, +2.209963868e-01f, +2.456499165e-01f, +2.209963868e-01f, +1.562849362e-01f, +7.496487828e-02f, +4.047367480e-03f, -3.739225953e-02f, -4.494512491e-02f, -2.808652174e-02f, -3.241530928e-03f, +1.498813646e-02f, +1.983561445e-02f, +1.322393203e-02f, +2.191702212e-03f, -6.226830420e-03f, -8.625924656e-03f, -5.859365612e-03f, -1.196916207e-03f, +2.247925700e-03f, +3.159739597e-03f, +2.096961908e-03f, +4.733051837e-04f, -5.842197404e-04f, -7.736617456e-04f, -4.440791761e-04f, -8.710788365e-05f, +1.289254766e-05f, +5.184246216e-06f, -1.843893728e-05f, -4.543886514e-05f, -4.981617239e-05f, -9.833808267e-06f, +6.803089721e-05f, +1.384152296e-04f, +1.360732244e-04f, +2.183516949e-05f, -1.715914665e-04f, -3.319467664e-04f, -3.195613163e-04f, -6.198186541e-05f, +3.643635712e-04f, +7.288074567e-04f, +7.447129475e-04f, +2.343101320e-04f, -7.304216719e-04f, -1.804891247e-03f, -2.503717032e-03f, -2.434208634e-03f, -1.510328867e-03f, -2.487863475e-05f, +1.469980364e-03f, +2.417690168e-03f, +2.514578272e-03f, +1.834960044e-03f, +7.647153423e-04f, -2.098854303e-04f, -7.370963161e-04f, -7.359666910e-04f, -3.781907203e-04f, +5.035847333e-05f, +3.152640733e-04f, +3.348305944e-04f, +1.778452548e-04f, -1.658656658e-05f, -1.342466470e-04f, -1.397696245e-04f, -7.066966975e-05f, +7.835189267e-06f, +4.929954776e-05f, +4.606746708e-05f, +1.934333100e-05f, -4.667676794e-06f, -1.288967773e-05f, -8.220998674e-06f, +3.469535659e-04f, +1.336667044e-03f, +1.790286751e-03f, +2.794767810e-04f, -3.303519821e-03f, -6.405731284e-03f, -4.976271198e-03f, +2.686342793e-03f, +1.248168983e-02f, +1.571582859e-02f, +5.946321108e-03f, -1.341789307e-02f, -2.845267002e-02f, -2.424163753e-02f, +1.494761300e-03f, +3.267286932e-02f, +4.455848173e-02f, +2.351503337e-02f, -1.915629477e-02f, -5.272885293e-02f, -4.998568337e-02f, -9.883103547e-03f, +3.944741130e-02f, +6.141247912e-02f, +3.944741130e-02f, -9.883103547e-03f, -4.998568337e-02f, -5.272885293e-02f, -1.915629477e-02f, +2.351503337e-02f, +4.455848173e-02f, +3.267286932e-02f, +1.494761300e-03f, -2.424163753e-02f, -2.845267002e-02f, -1.341789307e-02f, +5.946321108e-03f, +1.571582859e-02f, +1.248168983e-02f, +2.686342793e-03f, -4.976271198e-03f, -6.405731284e-03f, -3.303519821e-03f, +2.794767810e-04f, +1.790286751e-03f, +1.336667044e-03f, +3.469535659e-04f, -1.608870261e-04f, -2.571773609e-05f, -3.050953535e-05f, +9.392727151e-06f, +8.433841439e-05f, +1.247277122e-04f, +4.822503056e-05f, -1.430114735e-04f, -3.094170965e-04f, -2.554768633e-04f, +8.152129225e-05f, +4.999795024e-04f, +6.290315529e-04f, +2.366593558e-04f, -4.941058242e-04f, -1.010568477e-03f, -8.041570547e-04f, +1.137522031e-04f, +1.110810779e-03f, +1.375457392e-03f, +5.907998826e-04f, -7.311358218e-04f, -1.591834473e-03f, -1.292881518e-03f, -2.296124824e-05f, +1.264336964e-03f, +1.601633554e-03f, +7.702899258e-04f, -5.529630450e-04f, -1.366287754e-03f, -1.133732786e-03f, -1.481780446e-04f, +7.843461819e-04f, +1.016717124e-03f, +5.168134989e-04f, -2.167432336e-04f, -6.249418104e-04f, -5.103339566e-04f, -9.510474086e-05f, +2.489011455e-04f, +3.119466899e-04f, +1.496270931e-04f, -4.360734750e-05f, -1.244160341e-04f, -8.660920381e-05f, -1.142115956e-05f, +3.003560201e-05f, +2.628081681e-05f, +6.143495962e-06f, /* 4, 1 (48) */ -4.311866284e-04f, -7.684774994e-04f, -6.026586777e-04f, +4.278663186e-04f, +2.047145736e-03f, +3.149905788e-03f, +2.315956597e-03f, -1.058500977e-03f, -5.723292387e-03f, -8.604089486e-03f, -6.398421886e-03f, +1.859755445e-03f, +1.290437072e-02f, +1.977363258e-02f, +1.535250003e-02f, -2.512723471e-03f, -2.734180880e-02f, -4.471081478e-02f, -3.812268121e-02f, +2.242476233e-03f, +7.246116125e-02f, +1.538507276e-01f, +2.194860579e-01f, +2.456250379e-01f, +2.224663671e-01f, +1.587026264e-01f, +7.747945655e-02f, +5.882327524e-03f, -3.662754419e-02f, -4.515501034e-02f, -2.882361806e-02f, -3.977497619e-03f, +1.460994574e-02f, +1.988597292e-02f, +1.353919611e-02f, +2.526532806e-03f, -6.048985165e-03f, -8.642511222e-03f, -5.993612259e-03f, -1.336685832e-03f, +2.177256030e-03f, +3.167574786e-03f, +2.146261456e-03f, +5.193726508e-04f, -5.648764094e-04f, -7.783294224e-04f, -4.569688538e-04f, -9.532888232e-05f, +1.288252765e-05f, +5.683852374e-06f, -1.753912827e-05f, -4.478791382e-05f, -5.028703496e-05f, -1.179191290e-05f, +6.538677752e-05f, +1.369877151e-04f, +1.377842419e-04f, +2.699924766e-05f, -1.653081477e-04f, -3.288886600e-04f, -3.236061130e-04f, -7.342665820e-05f, +3.504813501e-04f, +7.212987527e-04f, +7.517939123e-04f, +2.582671380e-04f, -6.962478502e-04f, -1.774447867e-03f, -2.492078858e-03f, -2.449859669e-03f, -1.550106255e-03f, -7.462633087e-05f, +1.429075397e-03f, +2.400307809e-03f, +2.524654162e-03f, +1.864638951e-03f, +7.991145529e-04f, -1.849999595e-04f, -7.289417700e-04f, -7.427680672e-04f, -3.919537410e-04f, +3.856160836e-05f, +3.107140920e-04f, +3.375361450e-04f, +1.840650204e-04f, -1.125585379e-05f, -1.323041793e-04f, -1.410489017e-04f, -7.330111985e-05f, +5.796882022e-06f, +4.873677159e-05f, +4.667280462e-05f, +2.025163384e-05f, -4.134251716e-06f, -1.287362466e-05f, -8.462405133e-06f, +3.212358298e-04f, +1.306157508e-03f, +1.799679478e-03f, +3.638151954e-04f, -3.178792109e-03f, -6.357506254e-03f, -5.119282672e-03f, +2.376925696e-03f, +1.222621297e-02f, +1.579734988e-02f, +6.446300611e-03f, -1.278886151e-02f, -2.821601066e-02f, -2.473574335e-02f, +4.841928232e-04f, +3.186871227e-02f, +4.467223393e-02f, +2.462584415e-02f, -1.778083738e-02f, -5.213805305e-02f, -5.071681919e-02f, -1.147493802e-02f, +3.815452979e-02f, +6.138951788e-02f, +4.071174827e-02f, -8.281469993e-03f, -4.921539345e-02f, -5.328181598e-02f, -2.052258252e-02f, +2.238130058e-02f, +4.441030368e-02f, +3.345721550e-02f, +2.511478425e-03f, -2.372482403e-02f, -2.866941325e-02f, -1.404283488e-02f, +5.435987152e-03f, +1.562072385e-02f, +1.273059098e-02f, +2.998289482e-03f, -4.826644105e-03f, -6.449338632e-03f, -3.427935855e-03f, +1.928675772e-04f, +1.778865592e-03f, +1.366702646e-03f, +3.732343827e-04f, -1.547435301e-04f, -2.514036432e-05f, -3.093642097e-05f, +7.404259204e-06f, +8.203562472e-05f, +1.249178960e-04f, +5.271780462e-05f, -1.363776150e-04f, -3.066609371e-04f, -2.617518459e-04f, +6.803395823e-05f, +4.893309108e-04f, +6.325743770e-04f, +2.562102288e-04f, -4.711862525e-04f, -1.003667029e-03f, -8.232157439e-04f, +7.942130382e-05f, +1.087129161e-03f, +1.383526417e-03f, +6.280668059e-04f, -6.915044642e-04f, -1.580821894e-03f, -1.320407745e-03f, -6.886550882e-05f, +1.234796034e-03f, +1.610209589e-03f, +8.089345225e-04f, -5.145848785e-04f, -1.356020827e-03f, -1.155873363e-03f, -1.826714690e-04f, +7.637947150e-04f, +1.022102766e-03f, +5.392888856e-04f, -1.964753024e-04f, -6.203033410e-04f, -5.203823168e-04f, -1.087736719e-04f, +2.420266134e-04f, +3.142442435e-04f, +1.562180990e-04f, -3.886700897e-05f, -1.239808950e-04f, -8.884499839e-05f, -1.348826031e-05f, +2.951398656e-05f, +2.682848005e-05f, +6.706631824e-06f, /* 4, 2 (48) */ -4.183041008e-04f, -7.627936470e-04f, -6.201978060e-04f, +3.830784047e-04f, +1.996858701e-03f, +3.138113875e-03f, +2.381343374e-03f, -9.215132624e-04f, -5.585508145e-03f, -8.577090238e-03f, -6.563730034e-03f, +1.530866785e-03f, +1.258076460e-02f, +1.970020593e-02f, +1.570298138e-02f, -1.791424718e-03f, -2.659001489e-02f, -4.445254764e-02f, -3.881892906e-02f, +4.680283662e-04f, +6.996908239e-02f, +1.514008679e-01f, +2.179359516e-01f, +2.455504115e-01f, +2.238954425e-01f, +1.611029342e-01f, +8.000411071e-02f, +7.746966475e-03f, -3.582842964e-02f, -4.534001030e-02f, -2.955255983e-02f, -4.720265686e-03f, +1.421799200e-02f, +1.992453453e-02f, +1.384991020e-02f, +2.864068951e-03f, -5.864920145e-03f, -8.653767076e-03f, -6.125916438e-03f, -1.477734733e-03f, +2.103954910e-03f, +3.173371668e-03f, +2.194998227e-03f, +5.660454554e-04f, -5.446247756e-04f, -7.824636741e-04f, -4.698424785e-04f, -1.037912875e-04f, +1.285991751e-05f, +6.166404737e-06f, -1.664456387e-05f, -4.411553088e-05f, -5.071255403e-05f, -1.370871943e-05f, +6.273926195e-05f, +1.354891037e-04f, +1.393801050e-04f, +3.207647279e-05f, -1.589997563e-04f, -3.256603402e-04f, -3.273989107e-04f, -8.468789089e-05f, +3.365530480e-04f, +7.134490749e-04f, +7.583417174e-04f, +2.817498091e-04f, -6.622080333e-04f, -1.743645304e-03f, -2.479672483e-03f, -2.464640132e-03f, -1.589298153e-03f, -1.243453115e-04f, +1.387628879e-03f, +2.382065486e-03f, +2.533936609e-03f, +1.893912758e-03f, +8.336048491e-04f, -1.596609317e-04f, -7.202473230e-04f, -7.492033100e-04f, -4.056435160e-04f, +2.659656099e-05f, +3.059112374e-04f, +3.400594884e-04f, +1.902462398e-04f, -5.845531987e-06f, -1.302455672e-04f, -1.422510891e-04f, -7.592324930e-05f, +3.719755005e-06f, +4.812748421e-05f, +4.725396625e-05f, +2.116315483e-05f, -3.584095864e-06f, -1.284410222e-05f, -8.701086450e-06f, +2.960954655e-04f, +1.275221087e-03f, +1.807083737e-03f, +4.458508201e-04f, -3.053874213e-03f, -6.304788449e-03f, -5.255660287e-03f, +2.070264759e-03f, +1.196446112e-02f, +1.586538384e-02f, +6.935631522e-03f, -1.215628714e-02f, -2.795980043e-02f, -2.520692960e-02f, -5.194742057e-04f, +3.104549652e-02f, +4.475165524e-02f, +2.571297331e-02f, -1.639731096e-02f, -5.150998624e-02f, -5.140832366e-02f, -1.305575991e-02f, +3.683412204e-02f, +6.132065237e-02f, +4.194654430e-02f, -6.671260404e-03f, -4.840645892e-02f, -5.379640085e-02f, -2.187860335e-02f, +2.122542722e-02f, +4.422763222e-02f, +3.422101022e-02f, +3.533581191e-03f, -2.318553514e-02f, -2.886588855e-02f, -1.466313822e-02f, +4.915604835e-03f, +1.551195017e-02f, +1.297261759e-02f, +3.312533726e-03f, -4.670426006e-03f, -6.488205641e-03f, -3.551916750e-03f, +1.040225788e-04f, +1.765377331e-03f, +1.396216632e-03f, +4.000628628e-04f, -1.480368983e-04f, -2.454981878e-05f, -3.131693383e-05f, +5.456981773e-06f, +7.970380656e-05f, +1.249886400e-04f, +5.708357236e-05f, -1.297318172e-04f, -3.036838206e-04f, -2.677244663e-04f, +5.465316782e-05f, +4.784002737e-04f, +6.355725464e-04f, +2.753828356e-04f, -4.480752018e-04f, -9.960235479e-04f, -8.415113541e-04f, +4.521248951e-05f, +1.062710289e-03f, +1.390492424e-03f, +6.647357780e-04f, -6.514284292e-04f, -1.568606346e-03f, -1.346894540e-03f, -1.147150770e-04f, +1.204281511e-03f, +1.617554017e-03f, +8.470377077e-04f, -4.756944942e-04f, -1.344660851e-03f, -1.177211241e-03f, -2.172049221e-04f, +7.425149321e-04f, +1.026715774e-03f, +5.615116392e-04f, -1.758694164e-04f, -6.151147960e-04f, -5.301127742e-04f, -1.225172574e-04f, +2.348554835e-04f, +3.163044258e-04f, +1.627780462e-04f, -3.400642472e-05f, -1.234204187e-04f, -9.104278358e-05f, -1.559266332e-05f, +2.894409669e-05f, +2.735959138e-05f, +7.280845023e-06f, /* 4, 3 (48) */ -4.054441832e-04f, -7.566272423e-04f, -6.368423699e-04f, +3.389628739e-04f, +1.946146147e-03f, +3.124405156e-03f, +2.444082636e-03f, -7.860241587e-04f, -5.446128040e-03f, -8.545013766e-03f, -6.722729790e-03f, +1.205206445e-03f, +1.225336569e-02f, +1.961551803e-02f, +1.603953443e-02f, -1.077975643e-03f, -2.583167317e-02f, -4.417079783e-02f, -3.948113709e-02f, -1.275616938e-03f, +6.748940991e-02f, +1.489362278e-01f, +2.163466535e-01f, +2.454260662e-01f, +2.252830714e-01f, +1.634849997e-01f, +8.253804732e-02f, +9.640879233e-03f, -3.499482479e-02f, -4.549967124e-02f, -3.027280715e-02f, -5.469468996e-03f, +1.381234848e-02f, +1.995113109e-02f, +1.415582144e-02f, +3.204128440e-03f, -5.674673905e-03f, -8.659612608e-03f, -6.256162005e-03f, -1.619985822e-03f, +2.028031661e-03f, +3.177091423e-03f, +2.243125712e-03f, +6.132994217e-04f, -5.234616208e-04f, -7.860477700e-04f, -4.826865807e-04f, -1.124923739e-04f, +1.282502326e-05f, +6.631829657e-06f, -1.575588796e-05f, -4.342263601e-05f, -5.109317649e-05f, -1.558348651e-05f, +6.009027664e-05f, +1.339214410e-04f, +1.408612929e-04f, +3.706460373e-05f, -1.526707137e-04f, -3.222659344e-04f, -3.309403096e-04f, -9.576076956e-05f, +3.225875851e-04f, +7.052670211e-04f, +7.643591248e-04f, +3.047517951e-04f, -6.283162183e-04f, -1.712499040e-03f, -2.466506952e-03f, -2.478547275e-03f, -1.627890458e-03f, -1.740164482e-04f, +1.345655982e-03f, +2.362967526e-03f, +2.542417848e-03f, +1.922766365e-03f, +8.681716366e-04f, -1.338758426e-04f, -7.110112536e-04f, -7.552642627e-04f, -4.192508715e-04f, +1.446878429e-05f, +3.008555334e-04f, +3.423967670e-04f, +1.963843605e-04f, -3.581872455e-07f, -1.280706340e-04f, -1.433742428e-04f, -7.853403820e-05f, +1.604718976e-06f, +4.747135652e-05f, +4.781004476e-05f, +2.207718797e-05f, -3.017351572e-06f, -1.280083156e-05f, -8.936712204e-06f, +2.715456467e-04f, +1.243904153e-03f, +1.812540719e-03f, +5.255546267e-04f, -2.928885573e-03f, -6.247704877e-03f, -5.385392104e-03f, +1.766580938e-03f, +1.169673666e-02f, +1.592003700e-02f, +7.414031795e-03f, -1.152071459e-02f, -2.768441760e-02f, -2.565500481e-02f, -1.515497754e-03f, +3.020398517e-02f, +4.479686773e-02f, +2.677568360e-02f, -1.500681854e-02f, -5.084525046e-02f, -5.205975209e-02f, -1.462436626e-02f, +3.548722750e-02f, +6.120593729e-02f, +4.315082581e-02f, -5.053706387e-03f, -4.755942122e-02f, -5.427209535e-02f, -2.322326420e-02f, +2.004821598e-02f, +4.401042729e-02f, +3.496352515e-02f, +4.560296965e-03f, -2.262402350e-02f, -2.904175797e-02f, -1.527825301e-02f, +4.385492061e-03f, +1.538943292e-02f, +1.320747308e-02f, +3.628838152e-03f, -4.507647960e-03f, -6.522212065e-03f, -3.675337169e-03f, +1.297979522e-05f, +1.749784668e-03f, +1.425160729e-03f, +4.274224541e-04f, -1.407560533e-04f, -2.394720634e-05f, -3.165178783e-05f, +3.552050772e-06f, +7.734590613e-05f, +1.249420826e-04f, +6.132039239e-05f, -1.230802996e-04f, -3.004914841e-04f, -2.733933896e-04f, +4.138913951e-05f, +4.671998064e-04f, +6.380287732e-04f, +2.941645902e-04f, -4.247930999e-04f, -9.876493535e-04f, -8.590336898e-04f, +1.115266394e-05f, +1.037577029e-03f, +1.396353923e-03f, +7.007793324e-04f, -6.109405869e-04f, -1.555199324e-03f, -1.372321662e-03f, -1.604735422e-04f, +1.172816986e-03f, +1.623659271e-03f, +8.845679552e-04f, -4.363215056e-04f, -1.332212982e-03f, -1.197725728e-03f, -2.517506783e-04f, +7.205197926e-04f, +1.030547109e-03f, +5.834614779e-04f, -1.549398357e-04f, -6.093752927e-04f, -5.395136800e-04f, -1.363244821e-04f, +2.273902694e-04f, +3.181220543e-04f, +1.693004253e-04f, -2.902816071e-05f, -1.227328237e-04f, -9.319952775e-05f, -1.773293279e-05f, +2.832538384e-05f, +2.787300974e-05f, +7.865645190e-06f, /* 4, 4 (48) */ -3.926191600e-04f, -7.499954126e-04f, -6.525982578e-04f, +2.955402379e-04f, +1.895052970e-03f, +3.108821669e-03f, +2.504172913e-03f, -6.521027177e-04f, -5.305266748e-03f, -8.507949162e-03f, -6.875400504e-03f, +8.829405108e-04f, +1.192242538e-02f, +1.951975726e-02f, +1.636212202e-02f, -3.727086224e-04f, -2.506731404e-02f, -4.386604604e-02f, -4.010945331e-02f, -2.988115978e-03f, +6.502290296e-02f, +1.464576805e-01f, +2.147187630e-01f, +2.452520498e-01f, +2.266287274e-01f, +1.658479672e-01f, +8.508046517e-02f, +1.156364560e-02f, -3.412665315e-02f, -4.563354708e-02f, -3.098381841e-02f, -6.224733259e-03f, +1.339309761e-02f, +1.996559988e-02f, +1.445667697e-02f, +3.546525207e-03f, -5.478289544e-03f, -8.659970795e-03f, -6.384232639e-03f, -1.763360065e-03f, +1.949497623e-03f, +3.178696142e-03f, +2.290597068e-03f, +6.611094664e-04f, -5.013844328e-04f, -7.890651215e-04f, -4.954874122e-04f, -1.214290861e-04f, +1.277815672e-05f, +7.080070146e-06f, -1.487372814e-05f, -4.271015005e-05f, -5.142937682e-05f, -1.741551516e-05f, +5.744172148e-05f, +1.322867935e-04f, +1.422283575e-04f, +4.196148700e-05f, -1.463254020e-04f, -3.187096293e-04f, -3.342310618e-04f, -1.066406684e-04f, +3.085938074e-04f, +6.967612850e-04f, +7.698491488e-04f, +3.272670360e-04f, -5.945862371e-04f, -1.681024634e-03f, -2.452591617e-03f, -2.491578750e-03f, -1.665869356e-03f, -2.236206357e-04f, +1.303172126e-03f, +2.343018643e-03f, +2.550090443e-03f, +1.951184787e-03f, +9.028001885e-04f, -1.076524697e-04f, -7.012321084e-04f, -7.609428930e-04f, -4.327665825e-04f, +2.183892139e-06f, +2.955471640e-04f, +3.445441995e-04f, +2.024748039e-04f, +5.203509853e-06f, -1.257792813e-04f, -1.444164487e-04f, -8.113144611e-05f, -5.472731236e-07f, +4.676809063e-05f, +4.834013806e-05f, +2.299301259e-05f, -2.434178788e-06f, -1.274354164e-05f, -9.168948451e-06f, +2.475984404e-04f, +1.212252366e-03f, +1.816092770e-03f, +6.029005328e-04f, -2.803943490e-03f, -6.186384484e-03f, -5.508472404e-03f, +1.466089454e-03f, +1.142334327e-02f, +1.596142614e-02f, +7.881231602e-03f, -1.088268582e-02f, -2.739025301e-02f, -2.607979791e-02f, -2.503147107e-03f, +2.934495148e-02f, +4.480802039e-02f, +2.781326063e-02f, -1.361046461e-02f, -5.014447113e-02f, -5.267069267e-02f, -1.617956558e-02f, +3.411490584e-02f, +6.104546375e-02f, +4.432364280e-02f, -3.430047117e-03f, -4.667485326e-02f, -5.470841685e-02f, -2.455547718e-02f, +1.885049025e-02f, +4.375867662e-02f, +3.568404494e-02f, +5.590844074e-03f, -2.204056203e-02f, -2.919669781e-02f, -1.588762831e-02f, +3.845978381e-03f, +1.525310843e-02f, +1.343486335e-02f, +3.946960206e-03f, -4.338347535e-03f, -6.551240226e-03f, -3.798069993e-03f, -8.021973253e-05f, +1.732051735e-03f, +1.453486113e-03f, +4.552954639e-04f, -1.328904081e-04f, -2.333362236e-05f, -3.194173417e-05f, +1.690552013e-06f, +7.496484133e-05f, +1.247804426e-04f, +6.542647888e-05f, -1.164291964e-04f, -2.970897857e-04f, -2.787575706e-04f, +2.825187413e-05f, +4.557418356e-04f, +6.399462117e-04f, +3.125433452e-04f, -4.013603659e-04f, -9.785563028e-04f, -8.757732603e-04f, -2.273152976e-05f, +1.011752738e-03f, +1.401110338e-03f, +7.361705945e-04f, -5.700740732e-04f, -1.540613279e-03f, -1.396669752e-03f, -2.061045701e-04f, +1.140426844e-03f, +1.628518790e-03f, +9.214941434e-04f, -3.964960053e-04f, -1.318683292e-03f, -1.217396724e-03f, -2.862808627e-04f, +6.978229305e-04f, +1.033588332e-03f, +6.051182020e-04f, -1.337012165e-04f, -6.030844187e-04f, -5.485735572e-04f, -1.501841507e-04f, +2.196337826e-04f, +3.196921023e-04f, +1.757786675e-04f, -2.393493880e-05f, -1.219164262e-04f, -9.531218521e-05f, -1.990756350e-05f, +2.765734466e-05f, +2.836758865e-05f, +8.460514288e-06f, /* 4, 5 (48) */ -3.798410033e-04f, -7.429153425e-04f, -6.674719860e-04f, +2.528300878e-04f, +1.843623593e-03f, +3.091406154e-03f, +2.561614635e-03f, -5.198159242e-04f, -5.163038390e-03f, -8.465987675e-03f, -7.021725906e-03f, +5.642308816e-04f, +1.158819432e-02f, +1.941311660e-02f, +1.667071582e-02f, +3.240526627e-04f, -2.429746489e-02f, -4.353877900e-02f, -4.070403955e-02f, -4.669140612e-03f, +6.257031134e-02f, +1.439661018e-01f, +2.130528937e-01f, +2.450284291e-01f, +2.279318995e-01f, +1.681909859e-01f, +8.763055561e-02f, +1.351483038e-02f, -3.322385297e-02f, -4.574119955e-02f, -3.168505052e-02f, -6.985676151e-03f, +1.296033103e-02f, +1.996778377e-02f, +1.475222413e-02f, +3.891069406e-03f, -5.275814740e-03f, -8.654767285e-03f, -6.510011921e-03f, -1.907776514e-03f, +1.868366177e-03f, +3.178148869e-03f, +2.337365159e-03f, +7.094496045e-04f, -4.783914202e-04f, -7.914993003e-04f, -5.082309539e-04f, -1.305980346e-04f, +1.271963515e-05f, +7.511085657e-06f, -1.399869545e-05f, -4.197899425e-05f, -5.172165629e-05f, -1.920414868e-05f, +5.479546913e-05f, +1.305872469e-04f, +1.434819223e-04f, +4.676505722e-05f, -1.399681615e-04f, -3.149956671e-04f, -3.372720680e-04f, -1.173231310e-04f, +2.945804811e-04f, +6.879406509e-04f, +7.748150519e-04f, +3.492897638e-04f, -5.610317500e-04f, -1.649237711e-03f, -2.437936128e-03f, -2.503732601e-03f, -1.703221322e-03f, -2.731388008e-04f, +1.260192979e-03f, +2.322223945e-03f, +2.556947300e-03f, +1.979153161e-03f, +9.374756521e-04f, -8.099886954e-05f, -6.909087043e-04f, -7.662312983e-04f, -4.461813775e-04f, -1.025234248e-05f, +2.899864756e-04f, +3.464980832e-04f, +2.085129681e-04f, +1.083680508e-05f, -1.233714902e-04f, -1.453758241e-04f, -8.371341332e-05f, -2.735226303e-06f, +4.601742064e-05f, +4.884335002e-05f, +2.390989374e-05f, -1.834755230e-06f, -1.267196955e-05f, -9.397458000e-06f, +2.242648180e-04f, +1.180310631e-03f, +1.817783322e-03f, +6.778653741e-04f, -2.679163048e-03f, -6.120958005e-03f, -5.624901600e-03f, +1.168999668e-03f, +1.114458570e-02f, +1.598967802e-02f, +8.336973437e-03f, -1.024273960e-02f, -2.707770966e-02f, -2.648115827e-02f, -3.481703410e-03f, +2.846917822e-02f, +4.478528886e-02f, +2.882501336e-02f, -1.220935428e-02f, -4.940830054e-02f, -5.324076675e-02f, -1.772017886e-02f, +3.271823609e-02f, +6.083935918e-02f, +4.546406964e-02f, -1.801528327e-03f, -4.575335912e-02f, -5.510491286e-02f, -2.587416048e-02f, +1.763309353e-02f, +4.347239575e-02f, +3.638186787e-02f, +6.624432406e-03f, -2.143544382e-02f, -2.933039902e-02f, -1.649071272e-02f, +3.297404824e-03f, +1.510292428e-02f, +1.365449713e-02f, +4.266652308e-03f, -4.162568867e-03f, -6.575175165e-03f, -3.919986419e-03f, -1.755319177e-04f, +1.712144172e-03f, +1.481143457e-03f, +4.836630525e-04f, -1.244298938e-04f, -2.271014949e-05f, -3.218755973e-05f, -1.264986970e-07f, +7.256349920e-05f, +1.245060156e-04f, +6.940020102e-05f, -1.097845518e-04f, -2.934846979e-04f, -2.838162517e-04f, +1.525114812e-05f, +4.440387867e-04f, +6.413284520e-04f, +3.305073988e-04f, -3.777973932e-04f, -9.687567770e-04f, -8.917212832e-04f, -5.641373053e-05f, +9.852612407e-04f, +1.404762002e-03f, +7.708833030e-04f, -5.288622618e-04f, -1.524861610e-03f, -1.419920346e-03f, -2.515719334e-04f, +1.107136239e-03f, +1.632127022e-03f, +9.577855825e-04f, -3.562485408e-04f, -1.304078768e-03f, -1.236204745e-03f, -3.207674749e-04f, +6.744386457e-04f, +1.035831615e-03f, +6.264617115e-04f, -1.121686012e-04f, -5.962422370e-04f, -5.572811128e-04f, -1.640848971e-04f, +2.115891334e-04f, +3.210097061e-04f, +1.822061507e-04f, -1.872963638e-05f, -1.209696434e-04f, -9.737769918e-05f, -2.211498118e-05f, +2.693952258e-05f, +2.884217760e-05f, +9.064906686e-06f, /* 4, 6 (48) */ -3.671213681e-04f, -7.354042568e-04f, -6.814706814e-04f, +2.108510936e-04f, +1.791901937e-03f, +3.072202006e-03f, +2.616410104e-03f, -3.892286773e-04f, -5.019556468e-03f, -8.419222618e-03f, -7.161694067e-03f, +2.492352145e-04f, +1.125092225e-02f, +1.929579347e-02f, +1.696529630e-02f, +1.011993314e-03f, -2.352264984e-02f, -4.318948924e-02f, -4.126507130e-02f, -6.318378323e-03f, +6.013237521e-02f, +1.414623692e-01f, +2.113496723e-01f, +2.447552903e-01f, +2.291920925e-01f, +1.705132098e-01f, +9.018750292e-02f, +1.549398355e-02f, -3.228637731e-02f, -4.582219842e-02f, -3.237595922e-02f, -7.751907450e-03f, +1.251414965e-02f, +1.995753143e-02f, +1.504221061e-02f, +4.237567489e-03f, -5.067301772e-03f, -8.643930480e-03f, -6.633383411e-03f, -2.053152338e-03f, +1.784652763e-03f, +3.175413642e-03f, +2.383382579e-03f, +7.582929545e-04f, -4.544815265e-04f, -7.933340555e-04f, -5.209029234e-04f, -1.399954926e-04f, +1.264978081e-05f, +7.924851840e-06f, -1.313138411e-05f, -4.123008952e-05f, -5.197054220e-05f, -2.094877260e-05f, +5.215336394e-05f, +1.288249044e-04f, +1.446226806e-04f, +5.147333744e-05f, -1.336032886e-04f, -3.111283429e-04f, -3.400643764e-04f, -1.278038710e-04f, +2.805562892e-04f, +6.788139878e-04f, +7.792603414e-04f, +3.708145029e-04f, -5.276662400e-04f, -1.617153954e-03f, -2.422550433e-03f, -2.515007272e-03f, -1.739933127e-03f, -3.225519117e-04f, +1.216734440e-03f, +2.300588926e-03f, +2.562981663e-03f, +2.006656758e-03f, +9.721830556e-04f, -5.392337557e-05f, -6.800401319e-04f, -7.711217117e-04f, -4.594859434e-04f, -2.283398945e-05f, +2.841739777e-04f, +3.482547981e-04f, +2.144942307e-04f, +1.653886144e-05f, -1.208473221e-04f, -1.462505197e-04f, -8.627786209e-05f, -4.958103691e-06f, +4.521911322e-05f, +4.931879124e-05f, +2.482708254e-05f, -1.219276524e-06f, -1.258586094e-05f, -9.621900691e-06f, +2.015546685e-04f, +1.148123072e-03f, +1.817656823e-03f, +7.504288733e-04f, -2.554657032e-03f, -6.051557804e-03f, -5.734686152e-03f, +8.755149706e-04f, +1.086076945e-02f, +1.600492917e-02f, +8.781012224e-03f, -9.601411153e-03f, -2.674720226e-02f, -2.685895566e-02f, -4.450460187e-03f, +2.757745693e-02f, +4.472887513e-02f, +2.981027461e-02f, -1.080459227e-02f, -4.863741723e-02f, -5.376962901e-02f, -1.924504047e-02f, +3.129831574e-02f, +6.058778724e-02f, +4.657120588e-02f, -1.694013043e-04f, -4.479557353e-02f, -5.546116140e-02f, -2.717823924e-02f, +1.639688878e-02f, +4.315162828e-02f, +3.705630652e-02f, +7.660264021e-03f, -2.080898211e-02f, -2.944256762e-02f, -1.708695496e-02f, +2.740123711e-03f, +1.493883939e-02f, +1.386608626e-02f, +4.587662014e-03f, -3.980362717e-03f, -6.593904801e-03f, -4.040956062e-03f, -2.729096169e-04f, +1.690029190e-03f, +1.508082980e-03f, +5.125052301e-04f, -1.153649871e-04f, -2.207785664e-05f, -3.239008541e-05f, -1.898155368e-06f, +7.014473331e-05f, +1.241211704e-04f, +7.324008229e-05f, -1.031523155e-04f, -2.896822997e-04f, -2.885689603e-04f, +2.396506984e-06f, +4.321031721e-04f, +6.421795125e-04f, +3.480455019e-04f, -3.541245312e-04f, -9.582636675e-04f, -9.068696886e-04f, -8.986788047e-05f, +9.581268104e-04f, +1.407310159e-03f, +8.048918298e-04f, -4.873387349e-04f, -1.507958646e-03f, -1.442055892e-03f, -2.968395419e-04f, +1.072971079e-03f, +1.634479434e-03f, +9.934120415e-04f, -3.156100896e-04f, -1.288407306e-03f, -1.254130937e-03f, -3.551824120e-04f, +6.503818960e-04f, +1.037269751e-03f, +6.474720252e-04f, -9.035740848e-05f, -5.888492894e-04f, -5.656252499e-04f, -1.780151924e-04f, +2.032597318e-04f, +3.220701710e-04f, +1.885762046e-04f, -1.341528578e-05f, -1.198909969e-04f, -9.939300496e-05f, -2.435354300e-05f, +2.617150928e-05f, +2.929562340e-05f, +9.678249260e-06f, /* 4, 7 (48) */ -3.544715873e-04f, -7.274794050e-04f, -6.946020655e-04f, +1.696210040e-04f, +1.739931395e-03f, +3.051253233e-03f, +2.668563468e-03f, -2.604037729e-04f, -4.874933787e-03f, -8.367749280e-03f, -7.295297356e-03f, -6.189312840e-05f, +1.091085788e-02f, +1.916798959e-02f, +1.724585259e-02f, +1.690807301e-03f, -2.274338950e-02f, -4.281867474e-02f, -4.179273754e-02f, -7.935532277e-03f, +5.770982478e-02f, +1.389473619e-01f, +2.096097392e-01f, +2.444327384e-01f, +2.304088269e-01f, +1.728137987e-01f, +9.275048458e-02f, +1.750064030e-02f, -3.131419426e-02f, -4.587612179e-02f, -3.305599935e-02f, -8.523029162e-03f, +1.205466371e-02f, +1.993469744e-02f, +1.532638459e-02f, +4.585822287e-03f, -4.852807542e-03f, -8.627391619e-03f, -6.754230733e-03f, -2.199402858e-03f, +1.698374901e-03f, +3.170455539e-03f, +2.428601693e-03f, +8.076117457e-04f, -4.296544439e-04f, -7.945533321e-04f, -5.334887844e-04f, -1.496173933e-04f, +1.256892063e-05f, +8.321360299e-06f, -1.227237129e-05f, -4.046435566e-05f, -5.217658705e-05f, -2.264881449e-05f, +4.951722105e-05f, +1.270018852e-04f, +1.456513944e-04f, +5.608443952e-05f, -1.272350333e-04f, -3.071120005e-04f, -3.426091801e-04f, -1.380787733e-04f, +2.665298267e-04f, +6.693902437e-04f, +7.831887655e-04f, +3.918360714e-04f, -4.945030070e-04f, -1.584789098e-03f, -2.406444767e-03f, -2.525401601e-03f, -1.775991847e-03f, -3.718409871e-04f, +1.172812640e-03f, +2.278119471e-03f, +2.568187124e-03f, +2.033680987e-03f, +1.006907315e-03f, -2.643459550e-05f, -6.686257571e-04f, -7.756065067e-04f, -4.726709308e-04f, -3.555496353e-05f, +2.781103449e-04f, +3.498108096e-04f, +2.204139514e-04f, +2.230676018e-05f, -1.182069200e-04f, -1.470387212e-04f, -8.882269798e-05f, -7.214826744e-06f, +4.437296836e-05f, +4.976557993e-05f, +2.574381665e-05f, -5.879563279e-07f, -1.248497041e-05f, -9.841933680e-06f, +1.794768119e-04f, +1.115732986e-03f, +1.815758668e-03f, +8.205736066e-04f, -2.430535862e-03f, -5.978317722e-03f, -5.837838467e-03f, +5.858326709e-04f, +1.057220049e-02f, +1.600732567e-02f, +9.213115396e-03f, -8.959231640e-03f, -2.639915676e-02f, -2.721308020e-02f, -5.408723854e-03f, +2.667058725e-02f, +4.463900725e-02f, +3.076840142e-02f, -9.397282114e-03f, -4.783252540e-02f, -5.425696774e-02f, -2.075299912e-02f, +2.985625985e-02f, +6.029094770e-02f, +4.764417696e-02f, +1.465078130e-03f, -4.380216149e-02f, -5.577677149e-02f, -2.846664655e-02f, +1.514275784e-02f, +4.279644587e-02f, +3.770668841e-02f, +8.697533773e-03f, -2.016151009e-02f, -2.953292503e-02f, -1.767580425e-02f, +2.174498461e-03f, +1.476082419e-02f, +1.406934599e-02f, +4.909732185e-03f, -3.791786512e-03f, -6.607320087e-03f, -4.160847059e-03f, -3.723026219e-04f, +1.665675647e-03f, +1.534254489e-03f, +5.418008535e-04f, -1.056867379e-04f, -2.143779791e-05f, -3.255016448e-05f, -3.623541571e-06f, +6.771136134e-05f, +1.236283455e-04f, +7.694479968e-05f, -9.653833807e-05f, -2.856887703e-04f, -2.930155053e-04f, -1.030274097e-05f, +4.199475789e-04f, +6.425038326e-04f, +3.651468636e-04f, -3.303620685e-04f, -9.470903609e-04f, -9.212111215e-04f, -1.230682455e-04f, +9.303741423e-04f, +1.408756955e-03f, +8.381711999e-04f, -4.455372552e-04f, -1.489919637e-03f, -1.463059761e-03f, -3.418714729e-04f, +1.037957999e-03f, +1.635572511e-03f, +1.028343774e-03f, -2.746120345e-04f, -1.271677709e-03f, -1.271157102e-03f, -3.894974920e-04f, +6.256682876e-04f, +1.037896166e-03f, +6.681292984e-04f, -6.828342250e-05f, -5.809066006e-04f, -5.735950795e-04f, -1.919633541e-04f, +1.946492873e-04f, +3.228689785e-04f, +1.948821172e-04f, -7.995073534e-06f, -1.186791159e-04f, -1.013550330e-04f, -2.662153812e-05f, +2.535294614e-05f, +2.972677158e-05f, +1.029994154e-05f, /* 4, 8 (48) */ -3.419026667e-04f, -7.191580447e-04f, -7.068744368e-04f, +1.291566484e-04f, +1.687754808e-03f, +3.028604419e-03f, +2.718080689e-03f, -1.334018877e-04f, -4.729282393e-03f, -8.311664841e-03f, -7.422532389e-03f, -3.690051289e-04f, +1.056824870e-02f, +1.902991082e-02f, +1.751238242e-02f, +2.360197545e-03f, -2.196020074e-02f, -4.242683867e-02f, -4.228724054e-02f, -9.520321375e-03f, +5.530338001e-02f, +1.364219603e-01f, +2.078337474e-01f, +2.440608974e-01f, +2.315816396e-01f, +1.750919182e-01f, +9.531867170e-02f, +1.953432129e-02f, -3.030728694e-02f, -4.590255639e-02f, -3.372462511e-02f, -9.298635668e-03f, +1.158199278e-02f, +1.989914247e-02f, +1.560449493e-02f, +4.935633097e-03f, -4.632393590e-03f, -8.605084859e-03f, -6.872437653e-03f, -2.346441579e-03f, +1.609552203e-03f, +3.163240712e-03f, +2.472974661e-03f, +8.573773257e-04f, -4.039106273e-04f, -7.951412884e-04f, -5.459737548e-04f, -1.594593269e-04f, +1.247738578e-05f, +8.700618332e-06f, -1.142221689e-05f, -3.968271065e-05f, -5.234036778e-05f, -2.430374389e-05f, +4.688882536e-05f, +1.251203224e-04f, +1.465688934e-04f, +6.059656432e-05f, -1.208675967e-04f, -3.029510298e-04f, -3.449078145e-04f, -1.481438948e-04f, +2.525095963e-04f, +6.596784399e-04f, +7.866043095e-04f, +4.123495821e-04f, -4.615551614e-04f, -1.552158922e-03f, -2.389629649e-03f, -2.534914823e-03f, -1.811384863e-03f, -4.209871051e-04f, +1.128443930e-03f, +2.254821845e-03f, +2.572557625e-03f, +2.060211405e-03f, +1.041633242e-03f, +1.458591480e-06f, -6.566652244e-04f, -7.796782035e-04f, -4.857269586e-04f, -4.840902647e-05f, +2.717964180e-04f, +3.511626720e-04f, +2.262674753e-04f, +2.813750178e-05f, -1.154505091e-04f, -1.477386512e-04f, -9.134581111e-05f, -9.504275476e-06f, +4.347881995e-05f, +5.018284270e-05f, +2.665932067e-05f, +5.897355422e-08f, -1.236906188e-05f, -1.005721173e-05f, +1.580390140e-04f, +1.083182822e-03f, +1.812135126e-03f, +8.882849680e-04f, -2.306907516e-03f, -5.901372922e-03f, -5.934376806e-03f, +3.001439006e-04f, +1.027918498e-02f, +1.599702293e-02f, +9.633062975e-03f, -8.316727808e-03f, -2.603400990e-02f, -2.754344226e-02f, -6.355814215e-03f, +2.574937612e-02f, +4.451593900e-02f, +3.169877556e-02f, -7.988525159e-03f, -4.699435420e-02f, -5.470250500e-02f, -2.224291876e-02f, +2.839320009e-02f, +5.994907623e-02f, +4.868213496e-02f, +3.100650641e-03f, -4.277381772e-02f, -5.605138352e-02f, -2.973832426e-02f, +1.387160074e-02f, +4.240694837e-02f, +3.833235670e-02f, +9.735429939e-03f, -1.949338079e-02f, -2.960120845e-02f, -1.825671085e-02f, +1.600903381e-03f, +1.456886084e-02f, +1.426399528e-02f, +5.232601164e-03f, -3.596904395e-03f, -6.615315161e-03f, -4.279526175e-03f, -4.736576549e-04f, +1.639054109e-03f, +1.559607435e-03f, +5.715276251e-04f, -9.538679632e-05f, -2.079101159e-05f, -3.266868091e-05f, -5.301850104e-06f, +6.526616266e-05f, +1.230300454e-04f, +8.051318266e-05f, -8.994836685e-05f, -2.815103813e-04f, -2.971559747e-04f, -2.283753055e-05f, +4.075846569e-04f, +6.423062653e-04f, +3.818011580e-04f, -3.065302152e-04f, -9.352507246e-04f, -9.347389443e-04f, -1.559894358e-04f, +9.020283335e-04f, +1.409105432e-03f, +8.706971109e-04f, -4.034917365e-04f, -1.470760737e-03f, -1.482916267e-03f, -3.866320012e-04f, +1.002124343e-03f, +1.635403767e-03f, +1.062551544e-03f, -2.332861382e-04f, -1.253899682e-03f, -1.287265709e-03f, -4.236844779e-04f, +6.003140652e-04f, +1.037704928e-03f, +6.884138412e-04f, -4.596278178e-05f, -5.724156817e-04f, -5.811799325e-04f, -2.059175552e-04f, +1.857618093e-04f, +3.234017925e-04f, +2.011171405e-04f, -2.472339476e-06f, -1.173327403e-04f, -1.032607123e-04f, -2.891718833e-05f, +2.448352570e-05f, +3.013446780e-05f, +1.092935588e-05f, /* 4, 9 (48) */ -3.294252809e-04f, -7.104574263e-04f, -7.182966537e-04f, +8.947393773e-05f, +1.635414440e-03f, +3.004300675e-03f, +2.764969514e-03f, -8.281565258e-06f, -4.582713499e-03f, -8.251068276e-03f, -7.543399986e-03f, -6.719561588e-04f, +1.022334088e-02f, +1.888176693e-02f, +1.776489202e-02f, +3.019875985e-03f, -2.117359643e-02f, -4.201448908e-02f, -4.274879570e-02f, -1.107248030e-02f, +5.291375036e-02f, +1.338870455e-01f, +2.060223625e-01f, +2.436399103e-01f, +2.327100835e-01f, +1.773467400e-01f, +9.789122933e-02f, +2.159453270e-02f, -2.926565370e-02f, -4.590109780e-02f, -3.438129033e-02f, -1.007831387e-02f, +1.109626582e-02f, +1.985073345e-02f, +1.587629135e-02f, +5.286795769e-03f, -4.406126115e-03f, -8.576947357e-03f, -6.987888162e-03f, -2.494180230e-03f, +1.518206392e-03f, +3.153736437e-03f, +2.516453481e-03f, +9.075601684e-04f, -3.772513066e-04f, -7.950823148e-04f, -5.583428167e-04f, -1.695165387e-04f, +1.237551130e-05f, +9.062648661e-06f, -1.058146335e-05f, -3.888606991e-05f, -5.246248495e-05f, -2.591307205e-05f, +4.426993069e-05f, +1.231823616e-04f, +1.473760729e-04f, +6.500800187e-05f, -1.145051290e-04f, -2.986498630e-04f, -3.469617557e-04f, -1.579954647e-04f, +2.385040047e-04f, +6.496876654e-04f, +7.895111918e-04f, +4.323504425e-04f, -4.288356190e-04f, -1.519279236e-03f, -2.372115874e-03f, -2.543546566e-03f, -1.846099875e-03f, -4.699714128e-04f, +1.083644875e-03f, +2.230702699e-03f, +2.576087462e-03f, +2.086233724e-03f, +1.076345550e-03f, +2.974703766e-05f, -6.441584584e-04f, -7.833294736e-04f, -4.986446197e-04f, -6.138978928e-05f, +2.652332049e-04f, +3.523070318e-04f, +2.320501354e-04f, +3.402800705e-05f, -1.125783976e-04f, -1.483485705e-04f, -9.384507757e-05f, -1.182528874e-05f, +4.253653645e-05f, +5.056971542e-05f, +2.757280659e-05f, +7.212630777e-07f, -1.223790898e-05f, -1.026738752e-05f, +1.372480024e-04f, +1.050514141e-03f, +1.806833276e-03f, +9.535511306e-04f, -2.183877471e-03f, -5.820859740e-03f, -6.024325172e-03f, +1.863351932e-05f, +9.982029006e-03f, +1.597418540e-02f, +1.004064763e-02f, -7.674421542e-03f, -2.565220874e-02f, -2.784997248e-02f, -7.291064940e-03f, +2.481463718e-02f, +4.435994957e-02f, +3.260080389e-02f, -6.579419727e-03f, -4.612365709e-02f, -5.510599674e-02f, -2.371367949e-02f, +2.691028382e-02f, +5.956244423e-02f, +4.968425930e-02f, +4.736054408e-03f, -4.171126617e-02f, -5.628466966e-02f, -3.099222394e-02f, +1.258433503e-02f, +4.198326390e-02f, +3.893267077e-02f, +1.077313487e-02f, -1.880496695e-02f, -2.964717124e-02f, -1.882912653e-02f, +1.019723449e-03f, +1.436294328e-02f, +1.444975709e-02f, +5.556002956e-03f, -3.395787254e-03f, -6.617787500e-03f, -4.396858915e-03f, -5.769183672e-04f, +1.610136921e-03f, +1.584090961e-03f, +6.016620929e-04f, -8.445744044e-05f, -2.013851916e-05f, -3.274654767e-05f, -6.932342584e-06f, +6.281187603e-05f, +1.223288367e-04f, +8.394421207e-05f, -8.338804160e-05f, -2.771534900e-04f, -3.009907318e-04f, -3.519904534e-05f, +3.950271064e-04f, +6.415920685e-04f, +3.979985283e-04f, -2.826490864e-04f, -9.227590917e-04f, -9.474472378e-04f, -1.886064256e-04f, +8.731148588e-04f, +1.408359528e-03f, +9.024459511e-04f, -3.612362155e-04f, -1.450498990e-03f, -1.501610669e-03f, -4.310856293e-04f, +9.654981397e-04f, +1.633971743e-03f, +1.096006654e-03f, -1.916645172e-04f, -1.235083830e-03f, -1.302439913e-03f, -4.577151014e-04f, +5.743361015e-04f, +1.036690754e-03f, +7.083061374e-04f, -2.341196786e-05f, -5.633785327e-04f, -5.883693712e-04f, -2.198658333e-04f, +1.766016064e-04f, +3.236644660e-04f, +2.072744965e-04f, +3.149424362e-06f, -1.158507237e-04f, -1.051069733e-04f, -3.123864879e-05f, +2.356299303e-05f, +3.051755931e-05f, +1.156583771e-05f, /* 4,10 (48) */ -3.170497696e-04f, -7.013947777e-04f, -7.288781171e-04f, +5.058786781e-05f, +1.582951955e-03f, +2.978387603e-03f, +2.809239445e-03f, +1.149007964e-04f, -4.435337427e-03f, -8.186060275e-03f, -7.657905115e-03f, -9.706060217e-04f, +9.876379128e-03f, +1.872377146e-02f, +1.800339602e-02f, +3.669563650e-03f, -2.038408523e-02f, -4.158213864e-02f, -4.317763132e-02f, -1.259175953e-02f, +5.054163449e-02f, +1.313434989e-01f, +2.041762626e-01f, +2.431699389e-01f, +2.337937284e-01f, +1.795774427e-01f, +1.004673168e-01f, +2.368076642e-02f, -2.818930815e-02f, -4.587135076e-02f, -3.502544879e-02f, -1.086164335e-02f, +1.059762120e-02f, +1.978934366e-02f, +1.614152455e-02f, +5.639102801e-03f, -4.174075979e-03f, -8.542919350e-03f, -7.100466560e-03f, -2.642528801e-03f, +1.424361314e-03f, +3.141911148e-03f, +2.558990017e-03f, +9.581298838e-04f, -3.496785000e-04f, -7.943610518e-04f, -5.705807257e-04f, -1.797839262e-04f, +1.226363572e-05f, +9.407489159e-06f, -9.750635465e-06f, -3.807534563e-05f, -5.254356191e-05f, -2.747635175e-05f, +4.166225889e-05f, +1.211901590e-04f, +1.480738929e-04f, +6.931713154e-05f, -1.081517273e-04f, -2.942129712e-04f, -3.487726173e-04f, -1.676298856e-04f, +2.245213585e-04f, +6.394270710e-04f, +7.919138599e-04f, +4.518343557e-04f, -3.963570956e-04f, -1.486165880e-03f, -2.353914507e-03f, -2.551296854e-03f, -1.880124898e-03f, -5.187751349e-04f, +1.038432244e-03f, +2.205769064e-03f, +2.578771288e-03f, +2.111733820e-03f, +1.111028863e-03f, +5.842132989e-05f, -6.311056663e-04f, -7.865531458e-04f, -5.114144858e-04f, -7.449071459e-05f, +2.584218823e-04f, +3.532406304e-04f, +2.377572560e-04f, +3.997511835e-05f, -1.095909776e-04f, -1.488667806e-04f, -9.631836077e-05f, -1.417666452e-05f, +4.154602144e-05f, +5.092534407e-05f, +2.848347424e-05f, +1.398643874e-06f, -1.209129542e-05f, -1.047211195e-05f, +1.171094832e-04f, +1.017767593e-03f, +1.799900934e-03f, +1.016363007e-03f, -2.061548634e-03f, -5.736915528e-03f, -6.107713214e-03f, -2.585199707e-04f, +9.681038274e-03f, +1.593898636e-02f, +1.043567474e-02f, -7.032829474e-03f, -2.525421021e-02f, -2.813262157e-02f, -8.213824032e-03f, +2.386718994e-02f, +4.417134314e-02f, +3.347391875e-02f, -5.171060199e-03f, -4.522121114e-02f, -5.546723295e-02f, -2.516417848e-02f, +2.540867315e-02f, +5.913135860e-02f, +5.064975744e-02f, +6.370026151e-03f, -4.061525952e-02f, -5.647633418e-02f, -3.222730777e-02f, +1.128189512e-02f, +4.152554879e-02f, +3.950700687e-02f, +1.180982562e-02f, -1.809666081e-02f, -2.967058320e-02f, -1.939250507e-02f, +4.313540776e-04f, +1.414307745e-02f, +1.462635870e-02f, +5.879667422e-03f, -3.188512758e-03f, -6.614638076e-03f, -4.512709639e-03f, -6.820253404e-04f, +1.578898272e-03f, +1.607653954e-03f, +6.321796522e-04f, -7.289160273e-05f, -1.948132439e-05f, -3.278470509e-05f, -8.514348974e-06f, +6.035119738e-05f, +1.215273449e-04f, +8.723701883e-05f, -7.686289059e-05f, -2.726245321e-04f, -3.045204117e-04f, -4.737872311e-05f, +3.822876665e-04f, +6.403668975e-04f, +4.137295927e-04f, -2.587386849e-04f, -9.096302455e-04f, -9.593308029e-04f, -2.208945727e-04f, +8.436595480e-04f, +1.406524065e-03f, +9.333948178e-04f, -3.188048226e-04f, -1.429152316e-03f, -1.519129192e-03f, -4.751971168e-04f, +9.281080801e-04f, +1.631276012e-03f, +1.128680965e-03f, -1.497796158e-04f, -1.215241647e-03f, -1.316663576e-03f, -4.915610870e-04f, +5.477518863e-04f, +1.034849023e-03f, +7.277868621e-04f, -6.477933725e-07f, -5.537976452e-04f, -5.951532014e-04f, -2.337961005e-04f, +1.671732861e-04f, +3.236530469e-04f, +2.133473835e-04f, +8.866574981e-06f, -1.142320367e-04f, -1.068907517e-04f, -3.358400885e-05f, +2.259114707e-05f, +3.087489644e-05f, +1.220870577e-05f, /* 4,11 (48) */ -3.047861339e-04f, -6.919872885e-04f, -7.386287525e-04f, +1.251252218e-05f, +1.530408393e-03f, +2.950911251e-03f, +2.850901704e-03f, +2.360909554e-04f, -4.287263534e-03f, -8.116743143e-03f, -7.766056842e-03f, -1.264818993e-03f, +9.527606511e-03f, +1.855614158e-02f, +1.822791738e-02f, +4.308990721e-03f, -1.959217137e-02f, -4.113030429e-02f, -4.357398842e-02f, -1.407792541e-02f, +4.818771998e-02f, +1.287922020e-01f, +2.022961377e-01f, +2.426511638e-01f, +2.348321606e-01f, +1.817832118e-01f, +1.030460881e-01f, +2.579250024e-02f, -2.707827929e-02f, -4.581292943e-02f, -3.565655446e-02f, -1.164819649e-02f, +1.008620671e-02f, +1.971485294e-02f, +1.639994644e-02f, +5.992343431e-03f, -3.936318723e-03f, -8.502944231e-03f, -7.210057537e-03f, -2.791395581e-03f, +1.328042954e-03f, +3.127734483e-03f, +2.600536039e-03f, +1.009055228e-03f, -3.211950258e-04f, -7.929624079e-04f, -5.826720211e-04f, -1.902560381e-04f, +1.214210066e-05f, +9.735192555e-06f, -8.930240209e-06f, -3.725144604e-05f, -5.258424396e-05f, -2.899317705e-05f, +3.906749896e-05f, +1.191458798e-04f, +1.486633763e-04f, +7.352242204e-05f, -1.018114333e-04f, -2.896448614e-04f, -3.503421484e-04f, -1.770437336e-04f, +2.105698600e-04f, +6.289058638e-04f, +7.938169860e-04f, +4.707973205e-04f, -3.641321009e-04f, -1.452834710e-03f, -2.335036878e-03f, -2.558166103e-03f, -1.913448276e-03f, -5.673795826e-04f, +9.928230059e-04f, +2.180028346e-03f, +2.580604122e-03f, +2.136697738e-03f, +1.145667720e-03f, +8.747179280e-05f, -6.175073398e-04f, -7.893422111e-04f, -5.240271131e-04f, -8.770511911e-05f, +2.513637965e-04f, +3.539603077e-04f, +2.433841554e-04f, +4.597560078e-05f, -1.064887260e-04f, -1.492916248e-04f, -9.876351284e-05f, -1.655716031e-05f, +4.050721427e-05f, +5.124888558e-05f, +2.939051183e-05f, +2.090829182e-06f, -1.192901538e-05f, -1.067103444e-05f, +9.762815885e-05f, +9.849828881e-04f, +1.791386585e-03f, +1.076714204e-03f, -1.940021289e-03f, -5.649678509e-03f, -6.184576105e-03f, -5.311445028e-04f, +9.376517862e-03f, +1.589160763e-02f, +1.081796240e-02f, -6.392462576e-03f, -2.484048062e-02f, -2.839136025e-02f, -9.123454277e-03f, +2.290785914e-02f, +4.395044857e-02f, +3.431757830e-02f, -3.764536134e-03f, -4.428781632e-02f, -5.578603777e-02f, -2.659333080e-02f, +2.388954396e-02f, +5.865616148e-02f, +5.157786552e-02f, +8.001302163e-03f, -3.948657856e-02f, -5.662611379e-02f, -3.344254942e-02f, +9.965231544e-03f, +4.103398771e-02f, +4.005475875e-02f, +1.284467464e-02f, -1.736887395e-02f, -2.967123100e-02f, -1.994630271e-02f, -1.637991238e-04f, +1.390928135e-02f, +1.479353198e-02f, +6.203320469e-03f, -2.975165374e-03f, -6.605771501e-03f, -4.626941676e-03f, -7.889160921e-04f, +1.545314263e-03f, +1.630245101e-03f, +6.630545487e-04f, -6.068289696e-05f, -1.882041246e-05f, -3.278411916e-05f, -1.004726703e-05f, +5.788677766e-05f, +1.206282501e-04f, +9.039088257e-05f, -7.037832680e-05f, -2.679300144e-04f, -3.077459176e-04f, -5.936826082e-05f, +3.693791032e-04f, +6.386367957e-04f, +4.289854480e-04f, -2.348188846e-04f, -8.958794037e-04f, -9.703851603e-04f, -2.528296377e-04f, +8.136885621e-04f, +1.403604744e-03f, +9.635215340e-04f, -2.762317526e-04f, -1.406739489e-03f, -1.535459032e-03f, -5.189315099e-04f, +8.899834931e-04f, +1.627317182e-03f, +1.160546927e-03f, -1.076641795e-04f, -1.194385510e-03f, -1.329921279e-03f, -5.251941758e-04f, +5.205795147e-04f, +1.032175779e-03f, +7.468369003e-04f, +2.231261017e-05f, -5.436760041e-04f, -6.015214833e-04f, -2.476961529e-04f, +1.574817538e-04f, +3.233637847e-04f, +2.193289824e-04f, +1.467531985e-05f, -1.124757694e-04f, -1.086089913e-04f, -3.595129296e-05f, +2.156784201e-05f, +3.120533410e-05f, +1.285725242e-05f, /* 4,12 (48) */ -2.926440332e-04f, -6.822520959e-04f, -7.475589927e-04f, -2.473892386e-05f, +1.477824149e-03f, +2.921918074e-03f, +2.889969203e-03f, +3.552368352e-04f, -4.138600157e-03f, -8.043220721e-03f, -7.867868276e-03f, -1.554463854e-03f, +9.177264362e-03f, +1.837909784e-02f, +1.843848724e-02f, +4.937896585e-03f, -1.879835439e-02f, -4.065950696e-02f, -4.393812052e-02f, -1.553076012e-02f, +4.585268310e-02f, +1.262340359e-01f, +2.003826895e-01f, +2.420837842e-01f, +2.358249836e-01f, +1.839632402e-01f, +1.056266922e-01f, +2.792919798e-02f, -2.593261157e-02f, -4.572545764e-02f, -3.627406180e-02f, -1.243753870e-02f, +9.562179601e-03f, +1.962714782e-02f, +1.665131023e-02f, +6.346303739e-03f, -3.692934568e-03f, -8.456968631e-03f, -7.316546263e-03f, -2.940687206e-03f, +1.229279441e-03f, +3.111177323e-03f, +2.641043253e-03f, +1.060304113e-03f, -2.918045140e-04f, -7.908715787e-04f, -5.946010365e-04f, -2.009270726e-04f, +1.201125048e-05f, +1.004582615e-05f, -8.120766612e-06f, -3.641527474e-05f, -5.258519756e-05f, -3.046318302e-05f, +3.648730630e-05f, +1.170516966e-04f, +1.491456078e-04f, +7.762243142e-05f, -9.548823139e-05f, -2.849500731e-04f, -3.516722310e-04f, -1.862337587e-04f, +1.966576036e-04f, +6.181333013e-04f, +7.952254626e-04f, +4.892356315e-04f, -3.321729341e-04f, -1.419301593e-03f, -2.315494573e-03f, -2.564155124e-03f, -1.946058681e-03f, -6.157661632e-04f, +9.468343174e-04f, +2.153488329e-03f, +2.581581344e-03f, +2.161111704e-03f, +1.180246587e-03f, +1.168884923e-04f, -6.033642566e-04f, -7.916898281e-04f, -5.364730471e-04f, -1.010261762e-04f, +2.440604639e-04f, +3.544630052e-04f, +2.489261490e-04f, +5.202614347e-05f, -1.032722050e-04f, -1.496214900e-04f, -1.011783760e-04f, -1.896549344e-05f, +3.942009059e-05f, +5.153950867e-05f, +3.029309637e-05f, +2.797513799e-06f, -1.175087387e-05f, -1.086380328e-05f, +7.880774639e-05f, +9.521987690e-04f, +1.781339318e-03f, +1.134600982e-03f, -1.819393039e-03f, -5.559287626e-03f, -6.254954431e-03f, -7.990745172e-04f, +9.068771944e-03f, +1.583223937e-02f, +1.118734151e-02f, -5.753825781e-03f, -2.441149517e-02f, -2.862617914e-02f, -1.001933368e-02f, +2.193747398e-02f, +4.369761893e-02f, +3.513126686e-02f, -2.360931390e-03f, -4.332429479e-02f, -5.606226953e-02f, -2.800007029e-02f, +2.235408493e-02f, +5.813722997e-02f, +5.246784902e-02f, +9.628619345e-03f, -3.832603163e-02f, -5.673377797e-02f, -3.463693493e-02f, +8.635310265e-03f, +4.050879353e-02f, +4.057533827e-02f, +1.387685042e-02f, -1.662203705e-02f, -2.964891839e-02f, -2.048997872e-02f, -7.653206070e-04f, +1.366158520e-02f, +1.495101374e-02f, +6.526684254e-03f, -2.755836392e-03f, -6.591096181e-03f, -4.739417445e-03f, -8.975250834e-04f, +1.509362970e-03f, +1.651812943e-03f, +6.942598828e-04f, -4.782564454e-05f, -1.815674907e-05f, -3.274577985e-05f, -1.153056169e-05f, +5.542122079e-05f, +1.196342840e-04f, +9.340523006e-05f, -6.393964423e-05f, -2.630765080e-04f, -3.106684165e-04f, -7.115961947e-05f, +3.563141973e-04f, +6.364081860e-04f, +4.437576740e-04f, -2.109094147e-04f, -8.815222021e-04f, -9.806065503e-04f, -2.843878024e-04f, +7.832283699e-04f, +1.399608137e-03f, +9.928046655e-04f, -2.335512367e-04f, -1.383280130e-03f, -1.550588370e-03f, -5.622541709e-04f, +8.511543217e-04f, +1.622096891e-03f, +1.191577599e-03f, -6.535122827e-05f, -1.172528677e-03f, -1.342198342e-03f, -5.585861505e-04f, +4.928376748e-04f, +1.028667743e-03f, +7.654373648e-04f, +4.545180504e-05f, -5.330170897e-04f, -6.074645433e-04f, -2.615536806e-04f, +1.475322116e-04f, +3.227931365e-04f, +2.252124631e-04f, +2.057171849e-05f, -1.105811345e-04f, -1.102586480e-04f, -3.833846165e-05f, +2.049298849e-05f, +3.150773327e-05f, +1.351074403e-05f, /* 4,13 (48) */ -2.806327827e-04f, -6.722062698e-04f, -7.556797593e-04f, -6.115419859e-05f, +1.425238952e-03f, +2.891454891e-03f, +2.926456509e-03f, +4.722885319e-04f, -3.989454550e-03f, -7.965598290e-03f, -7.963356507e-03f, -1.839413927e-03f, +8.825592131e-03f, +1.819286408e-02f, +1.863514484e-02f, +5.556029886e-03f, -1.800312893e-02f, -4.017027133e-02f, -4.427029345e-02f, -1.695006172e-02f, +4.353718853e-02f, +1.236698808e-01f, +1.984366308e-01f, +2.414680180e-01f, +2.367718179e-01f, +1.861167285e-01f, +1.082082735e-01f, +3.009030968e-02f, -2.475236498e-02f, -4.560856914e-02f, -3.687742605e-02f, -1.322922853e-02f, +9.025706554e-03f, +1.952612165e-02f, +1.689537070e-02f, +6.700766744e-03f, -3.444008419e-03f, -8.404942487e-03f, -7.419818468e-03f, -3.090308696e-03f, +1.128101065e-03f, +3.092211830e-03f, +2.680463344e-03f, +1.111843622e-03f, -2.615114176e-04f, -7.880740649e-04f, -6.063519103e-04f, -2.117908759e-04f, +1.187143190e-05f, +1.033947149e-05f, -7.322685613e-06f, -3.556773003e-05f, -5.254710946e-05f, -3.188604545e-05f, +3.392330190e-05f, +1.149097875e-04f, +1.495217318e-04f, +8.161580702e-05f, -8.918604661e-05f, -2.801331747e-04f, -3.527648773e-04f, -1.951968851e-04f, +1.827925721e-04f, +6.071186859e-04f, +7.961443986e-04f, +5.071458790e-04f, -3.004916782e-04f, -1.385582399e-03f, -2.295299430e-03f, -2.569265114e-03f, -1.977945120e-03f, -6.639163882e-04f, +9.004835180e-04f, +2.126157165e-03f, +2.581698707e-03f, +2.184962126e-03f, +1.214749860e-03f, +1.466612390e-04f, -5.886774826e-04f, -7.935893281e-04f, -5.487428281e-04f, -1.144469186e-04f, +2.365135726e-04f, +3.547457686e-04f, +2.543785525e-04f, +5.812336101e-05f, -9.994206275e-05f, -1.498548087e-04f, -1.035607843e-04f, -2.140034152e-05f, +3.828466290e-05f, +5.179639469e-05f, +3.119039424e-05f, +3.518374039e-06f, -1.155668711e-05f, -1.105006591e-05f, +6.065099732e-05f, +9.194529891e-04f, +1.769808756e-03f, +1.190022202e-03f, -1.699758755e-03f, -5.465882396e-03f, -6.318894076e-03f, -1.062151025e-03f, +8.758103528e-03f, +1.576107975e-02f, +1.154365571e-02f, -5.117417595e-03f, -2.396773750e-02f, -2.883708855e-02f, -1.090085588e-02f, +2.095686743e-02f, +4.341323113e-02f, +3.591449523e-02f, -9.613232535e-04f, -4.233149012e-02f, -5.629582076e-02f, -2.938335042e-02f, +2.080349656e-02f, +5.757497580e-02f, +5.331900334e-02f, +1.125071624e-02f, -3.713445403e-02f, -5.679912920e-02f, -3.580946361e-02f, +7.293111923e-03f, +3.995020738e-02f, +4.106817594e-02f, +1.490551817e-02f, -1.585659968e-02f, -2.960346658e-02f, -2.102299581e-02f, -1.372785150e-03f, +1.340003152e-02f, +1.509854595e-02f, +6.849477391e-03f, -2.530623929e-03f, -6.570524462e-03f, -4.849998580e-03f, -1.007783731e-03f, +1.471024509e-03f, +1.672305932e-03f, +7.257676160e-04f, -3.431490051e-05f, -1.749127965e-05f, -3.267069945e-05f, -1.296376440e-05f, +5.295708166e-05f, +1.185482258e-04f, +9.627963359e-05f, -5.755201443e-05f, -2.580706410e-04f, -3.132893352e-04f, -8.274502853e-05f, +3.431057333e-04f, +6.336878614e-04f, +4.580383367e-04f, -1.870298427e-04f, -8.665746790e-04f, -9.899919317e-04f, -3.155456883e-04f, +7.523057237e-04f, +1.394541677e-03f, +1.021223537e-03f, -1.907975127e-04f, -1.358794677e-03f, -1.564506376e-03f, -6.051308071e-04f, +8.116510977e-04f, +1.615617815e-03f, +1.221746674e-03f, -2.287402917e-05f, -1.149685270e-03f, -1.353480834e-03f, -5.917088586e-04f, +4.645456348e-04f, +1.024322317e-03f, +7.835696146e-04f, +6.875206024e-05f, -5.218248785e-04f, -6.129729854e-04f, -2.753562781e-04f, +1.373301571e-04f, +3.219377725e-04f, +2.309909909e-04f, +2.655168425e-05f, -1.085474701e-04f, -1.118366926e-04f, -4.074341266e-05f, +1.936655489e-05f, +3.178096262e-05f, +1.416842128e-05f, /* 4,14 (48) */ -2.687613508e-04f, -6.618667983e-04f, -7.630024450e-04f, -9.672192862e-05f, +1.372691842e-03f, +2.859568845e-03f, +2.960379811e-03f, +5.871983194e-04f, -3.839932818e-03f, -7.883982483e-03f, -8.052542554e-03f, -2.119547102e-03f, +8.472827254e-03f, +1.799766720e-02f, +1.881793742e-02f, +6.163148572e-03f, -1.720698453e-02f, -3.966312545e-02f, -4.457078513e-02f, -1.833564411e-02f, +4.124188910e-02f, +1.211006157e-01f, +1.964586857e-01f, +2.408041017e-01f, +2.376723015e-01f, +1.882428856e-01f, +1.107899723e-01f, +3.227527181e-02f, -2.353761512e-02f, -4.546190791e-02f, -3.746610354e-02f, -1.402281786e-02f, +8.476963726e-03f, +1.941167473e-02f, +1.713188427e-02f, +7.055512513e-03f, -3.189629866e-03f, -8.346819126e-03f, -7.519760531e-03f, -3.240163505e-03f, +1.024540281e-03f, +3.070811488e-03f, +2.718748007e-03f, +1.163640017e-03f, -2.303210233e-04f, -7.845556909e-04f, -6.179085974e-04f, -2.228409418e-04f, +1.172299359e-05f, +1.061622408e-05f, -6.536449958e-06f, -3.470970428e-05f, -5.247068588e-05f, -3.326148050e-05f, +3.137707163e-05f, +1.127223349e-04f, +1.497929516e-04f, +8.550128532e-05f, -8.290874270e-05f, -2.751987605e-04f, -3.536222271e-04f, -2.039302110e-04f, +1.689826330e-04f, +5.958713593e-04f, +7.965791143e-04f, +5.245249488e-04f, -2.691001954e-04f, -1.351692992e-03f, -2.274463530e-03f, -2.573497662e-03f, -2.009096942e-03f, -7.118118828e-04f, +8.537881199e-04f, +2.098043378e-03f, +2.580952332e-03f, +2.208235610e-03f, +1.249161875e-03f, +1.767795924e-04f, -5.734483729e-04f, -7.950342203e-04f, -5.608269972e-04f, -1.279602412e-04f, +2.287249824e-04f, +3.548057515e-04f, +2.597366849e-04f, +6.426379482e-05f, -9.649903394e-05f, -1.499900605e-04f, -1.059085645e-04f, -2.386034291e-05f, +3.710098106e-05f, +5.201873851e-05f, +3.208156172e-05f, +4.253067716e-06f, -1.134628287e-05f, -1.122946931e-05f, +4.315971767e-05f, +8.867822897e-04f, +1.756844992e-03f, +1.242979284e-03f, -1.581210529e-03f, -5.369602763e-03f, -6.376446090e-03f, -1.320221666e-03f, +8.444814193e-03f, +1.567833472e-02f, +1.188676144e-02f, -4.483729733e-03f, -2.350969916e-02f, -2.902411839e-02f, -1.176743056e-02f, +1.996687550e-02f, +4.309768544e-02f, +3.666680095e-02f, +4.332184234e-04f, -4.131026659e-02f, -5.648661828e-02f, -3.074214510e-02f, +1.923899018e-02f, +5.696984499e-02f, +5.413065444e-02f, +1.286633405e-02f, -3.591270736e-02f, -5.682200323e-02f, -3.695914888e-02f, +5.939631090e-03f, +3.935849852e-02f, +4.153272158e-02f, +1.592984048e-02f, -1.507303007e-02f, -2.953471452e-02f, -2.154482068e-02f, -1.985758136e-03f, +1.312467524e-02f, +1.523587610e-02f, +7.171415163e-03f, -2.299632938e-03f, -6.543972778e-03f, -4.958546050e-03f, -1.119620424e-03f, +1.430281096e-03f, +1.691672486e-03f, +7.575485786e-04f, -2.014647924e-05f, -1.682492863e-05f, -3.255991088e-05f, -1.434647234e-05f, +5.049686428e-05f, +1.173728985e-04f, +9.901380912e-05f, -5.122048314e-05f, -2.529190916e-04f, -3.156103559e-04f, -9.411699013e-05f, +3.297664872e-04f, +6.304829761e-04f, +4.718199911e-04f, -1.631995593e-04f, -8.510532580e-04f, -9.985389804e-04f, -3.462803737e-04f, +7.209476360e-04f, +1.388413650e-03f, +1.048758245e-03f, -1.480047969e-04f, -1.333304376e-03f, -1.577203222e-03f, -6.475274993e-04f, +7.715049169e-04f, +1.607883660e-03f, +1.251028504e-03f, +1.973393099e-05f, -1.125870273e-03f, -1.363755593e-03f, -6.245342378e-04f, +4.357232295e-04f, +1.019137592e-03f, +8.012152726e-04f, +9.219536492e-05f, -5.101038438e-04f, -6.180377019e-04f, -2.890914543e-04f, +1.268813810e-04f, +3.207945823e-04f, +2.366577331e-04f, +3.261098626e-05f, -1.063742421e-04f, -1.133401148e-04f, -4.316398208e-05f, +1.818856848e-05f, +3.202390001e-05f, +1.482949967e-05f, /* 4,15 (48) */ -2.570383573e-04f, -6.512505742e-04f, -7.695388949e-04f, -1.314316329e-04f, +1.320221156e-03f, +2.826307365e-03f, +2.991756882e-03f, +6.999206543e-04f, -3.690139866e-03f, -7.798481197e-03f, -8.135451297e-03f, -2.394745863e-03f, +8.119205027e-03f, +1.779373699e-02f, +1.898692005e-02f, +6.759019932e-03f, -1.641040541e-02f, -3.913860051e-02f, -4.483988533e-02f, -1.968733711e-02f, +3.896742557e-02f, +1.185271180e-01f, +1.944495887e-01f, +2.400922898e-01f, +2.385260896e-01f, +1.903409290e-01f, +1.133709246e-01f, +3.448350742e-02f, -2.228845324e-02f, -4.528512831e-02f, -3.803955191e-02f, -1.481785208e-02f, +7.916136729e-03f, +1.928371449e-02f, +1.736060925e-02f, +7.410318264e-03f, -2.929893182e-03f, -8.282555331e-03f, -7.616259565e-03f, -3.390153565e-03f, +9.186317160e-04f, +3.046951145e-03f, +2.755848988e-03f, +1.215658755e-03f, -1.982394616e-04f, -7.803026232e-04f, -6.292548803e-04f, -2.340704111e-04f, +1.156628587e-05f, +1.087619307e-05f, -5.762494102e-06f, -3.384208325e-05f, -5.235665165e-05f, -3.458924435e-05f, +2.885016553e-05f, +1.104915233e-04f, +1.499605271e-04f, +8.927769176e-05f, -7.666012020e-05f, -2.701514474e-04f, -3.542465450e-04f, -2.124310090e-04f, +1.552355348e-04f, +5.844006965e-04f, +7.965351371e-04f, +5.413700217e-04f, -2.380101219e-04f, -1.317649222e-03f, -2.252999191e-03f, -2.576854743e-03f, -2.039503840e-03f, -7.594343941e-04f, +8.067658006e-04f, +2.069155853e-03f, +2.579338719e-03f, +2.230918960e-03f, +1.283466916e-03f, +2.072328639e-04f, -5.576785734e-04f, -7.960181966e-04f, -5.727161007e-04f, -1.415589039e-04f, +2.206967259e-04f, +3.546402178e-04f, +2.649958715e-04f, +7.044391465e-05f, -9.294394045e-05f, -1.500257737e-04f, -1.082195383e-04f, -2.634409715e-05f, +3.586913284e-05f, +5.220574935e-05f, +3.296574548e-05f, +5.001234134e-06f, -1.111950086e-05f, -1.140166030e-05f, +2.633478904e-05f, +8.542223788e-04f, +1.742498519e-03f, +1.293476148e-03f, -1.463837631e-03f, -5.270588954e-03f, -6.427666573e-03f, -1.573140758e-03f, +8.129203837e-03f, +1.558421773e-02f, +1.221652793e-02f, -3.853246757e-03f, -2.303787917e-02f, -2.918731795e-02f, -1.261848382e-02f, +1.896833652e-02f, +4.275140507e-02f, +3.738774859e-02f, +1.821632073e-03f, -4.026150834e-02f, -5.663462307e-02f, -3.207544947e-02f, +1.766178696e-02f, +5.632231750e-02f, +5.490215935e-02f, +1.447421771e-02f, -3.466167885e-02f, -5.680226930e-02f, -3.808501915e-02f, +4.575875497e-03f, +3.873396428e-02f, +4.196844481e-02f, +1.694897807e-02f, -1.427181479e-02f, -2.944251916e-02f, -2.205492453e-02f, -2.603795838e-03f, +1.283558378e-02f, +1.536275749e-02f, +7.492209745e-03f, -2.062975205e-03f, -6.511361792e-03f, -5.064920292e-03f, -1.232960539e-03f, +1.387117114e-03f, +1.709861055e-03f, +7.895724787e-04f, -5.316979569e-06f, -1.615859866e-05f, -3.241446603e-05f, -1.567834766e-05f, +4.804301997e-05f, +1.161111654e-04f, +1.016076144e-04f, -4.494996720e-05f, -2.476285808e-04f, -3.176334114e-04f, -1.052682830e-04f, +3.163092155e-04f, +6.268010350e-04f, +4.850956842e-04f, -1.394377625e-04f, -8.349747314e-04f, -1.006246087e-03f, -3.765694119e-04f, +6.891813548e-04f, +1.381233184e-03f, +1.075389676e-03f, -1.052072550e-04f, -1.306831259e-03f, -1.588670087e-03f, -6.894107303e-04f, +7.307474127e-04f, +1.598899162e-03f, +1.279398121e-03f, +6.243897335e-05f, -1.101099518e-03f, -1.373010239e-03f, -6.570343398e-04f, +4.063908467e-04f, +1.013112354e-03f, +8.183562434e-04f, +1.157634420e-04f, -4.978589565e-04f, -6.226498844e-04f, -3.027466434e-04f, +1.161919659e-04f, +3.193606803e-04f, +2.422058659e-04f, +3.874525151e-05f, -1.040610471e-04f, -1.147659265e-04f, -4.559794561e-05f, +1.695911659e-05f, +3.223543411e-05f, +1.549316995e-05f, /* 4,16 (48) */ -2.454720714e-04f, -6.403743812e-04f, -7.753013890e-04f, -1.652737161e-04f, +1.267864505e-03f, +2.791718120e-03f, +3.020607048e-03f, +8.104121777e-04f, -3.540179339e-03f, -7.709203505e-03f, -8.212111417e-03f, -2.664897310e-03f, +7.764958482e-03f, +1.758130598e-02f, +1.914215558e-02f, +7.343420628e-03f, -1.561387028e-02f, -3.859723048e-02f, -4.507789545e-02f, -2.100498633e-02f, +3.671442638e-02f, +1.159502633e-01f, +1.924100849e-01f, +2.393328554e-01f, +2.393328554e-01f, +1.924100849e-01f, +1.159502633e-01f, +3.671442638e-02f, -2.100498633e-02f, -4.507789545e-02f, -3.859723048e-02f, -1.561387028e-02f, +7.343420628e-03f, +1.914215558e-02f, +1.758130598e-02f, +7.764958482e-03f, -2.664897310e-03f, -8.212111417e-03f, -7.709203505e-03f, -3.540179339e-03f, +8.104121777e-04f, +3.020607048e-03f, +2.791718120e-03f, +1.267864505e-03f, -1.652737161e-04f, -7.753013890e-04f, -6.403743812e-04f, -2.454720714e-04f, +1.140166030e-05f, +1.111950086e-05f, -5.001234134e-06f, -3.296574548e-05f, -5.220574935e-05f, -3.586913284e-05f, +2.634409715e-05f, +1.082195383e-04f, +1.500257737e-04f, +9.294394045e-05f, -7.044391465e-05f, -2.649958715e-04f, -3.546402178e-04f, -2.206967259e-04f, +1.415589039e-04f, +5.727161007e-04f, +7.960181966e-04f, +5.576785734e-04f, -2.072328639e-04f, -1.283466916e-03f, -2.230918960e-03f, -2.579338719e-03f, -2.069155853e-03f, -8.067658006e-04f, +7.594343941e-04f, +2.039503840e-03f, +2.576854743e-03f, +2.252999191e-03f, +1.317649222e-03f, +2.380101219e-04f, -5.413700217e-04f, -7.965351371e-04f, -5.844006965e-04f, -1.552355348e-04f, +2.124310090e-04f, +3.542465450e-04f, +2.701514474e-04f, +7.666012020e-05f, -8.927769176e-05f, -1.499605271e-04f, -1.104915233e-04f, -2.885016553e-05f, +3.458924435e-05f, +5.235665165e-05f, +3.384208325e-05f, +5.762494102e-06f, -1.087619307e-05f, -1.156628587e-05f, +1.017619038e-05f, +8.218079128e-04f, +1.726820172e-03f, +1.341519168e-03f, -1.347726465e-03f, -5.168981339e-03f, -6.472616540e-03f, -1.820769339e-03f, +7.811570426e-03f, +1.547894945e-02f, +1.253283714e-02f, -3.226445722e-03f, -2.255278348e-02f, -2.932675571e-02f, -1.345345855e-02f, +1.796209043e-02f, +4.237483565e-02f, +3.807692994e-02f, +3.202865258e-03f, -3.918611867e-02f, -5.673983033e-02f, -3.338228073e-02f, +1.607311687e-02f, +5.563290677e-02f, +5.563290677e-02f, +1.607311687e-02f, -3.338228073e-02f, -5.673983033e-02f, -3.918611867e-02f, +3.202865258e-03f, +3.807692994e-02f, +4.237483565e-02f, +1.796209043e-02f, -1.345345855e-02f, -2.932675571e-02f, -2.255278348e-02f, -3.226445722e-03f, +1.253283714e-02f, +1.547894945e-02f, +7.811570426e-03f, -1.820769339e-03f, -6.472616540e-03f, -5.168981339e-03f, -1.347726465e-03f, +1.341519168e-03f, +1.726820172e-03f, +8.218079128e-04f, +1.017619038e-05f, -1.549316995e-05f, -3.223543411e-05f, -1.695911659e-05f, +4.559794561e-05f, +1.147659265e-04f, +1.040610471e-04f, -3.874525151e-05f, -2.422058659e-04f, -3.193606803e-04f, -1.161919659e-04f, +3.027466434e-04f, +6.226498844e-04f, +4.978589565e-04f, -1.157634420e-04f, -8.183562434e-04f, -1.013112354e-03f, -4.063908467e-04f, +6.570343398e-04f, +1.373010239e-03f, +1.101099518e-03f, -6.243897335e-05f, -1.279398121e-03f, -1.598899162e-03f, -7.307474127e-04f, +6.894107303e-04f, +1.588670087e-03f, +1.306831259e-03f, +1.052072550e-04f, -1.075389676e-03f, -1.381233184e-03f, -6.891813548e-04f, +3.765694119e-04f, +1.006246087e-03f, +8.349747314e-04f, +1.394377625e-04f, -4.850956842e-04f, -6.268010350e-04f, -3.163092155e-04f, +1.052682830e-04f, +3.176334114e-04f, +2.476285808e-04f, +4.494996720e-05f, -1.016076144e-04f, -1.161111654e-04f, -4.804301997e-05f, +1.567834766e-05f, +3.241446603e-05f, +1.615859866e-05f, /* 4,17 (48) */ -2.340704111e-04f, -6.292548803e-04f, -7.803026232e-04f, -1.982394616e-04f, +1.215658755e-03f, +2.755848988e-03f, +3.046951145e-03f, +9.186317160e-04f, -3.390153565e-03f, -7.616259565e-03f, -8.282555331e-03f, -2.929893182e-03f, +7.410318264e-03f, +1.736060925e-02f, +1.928371449e-02f, +7.916136729e-03f, -1.481785208e-02f, -3.803955191e-02f, -4.528512831e-02f, -2.228845324e-02f, +3.448350742e-02f, +1.133709246e-01f, +1.903409290e-01f, +2.385260896e-01f, +2.400922898e-01f, +1.944495887e-01f, +1.185271180e-01f, +3.896742557e-02f, -1.968733711e-02f, -4.483988533e-02f, -3.913860051e-02f, -1.641040541e-02f, +6.759019932e-03f, +1.898692005e-02f, +1.779373699e-02f, +8.119205027e-03f, -2.394745863e-03f, -8.135451297e-03f, -7.798481197e-03f, -3.690139866e-03f, +6.999206543e-04f, +2.991756882e-03f, +2.826307365e-03f, +1.320221156e-03f, -1.314316329e-04f, -7.695388949e-04f, -6.512505742e-04f, -2.570383573e-04f, +1.122946931e-05f, +1.134628287e-05f, -4.253067716e-06f, -3.208156172e-05f, -5.201873851e-05f, -3.710098106e-05f, +2.386034291e-05f, +1.059085645e-04f, +1.499900605e-04f, +9.649903394e-05f, -6.426379482e-05f, -2.597366849e-04f, -3.548057515e-04f, -2.287249824e-04f, +1.279602412e-04f, +5.608269972e-04f, +7.950342203e-04f, +5.734483729e-04f, -1.767795924e-04f, -1.249161875e-03f, -2.208235610e-03f, -2.580952332e-03f, -2.098043378e-03f, -8.537881199e-04f, +7.118118828e-04f, +2.009096942e-03f, +2.573497662e-03f, +2.274463530e-03f, +1.351692992e-03f, +2.691001954e-04f, -5.245249488e-04f, -7.965791143e-04f, -5.958713593e-04f, -1.689826330e-04f, +2.039302110e-04f, +3.536222271e-04f, +2.751987605e-04f, +8.290874270e-05f, -8.550128532e-05f, -1.497929516e-04f, -1.127223349e-04f, -3.137707163e-05f, +3.326148050e-05f, +5.247068588e-05f, +3.470970428e-05f, +6.536449958e-06f, -1.061622408e-05f, -1.172299359e-05f, -5.316979569e-06f, +7.895724787e-04f, +1.709861055e-03f, +1.387117114e-03f, -1.232960539e-03f, -5.064920292e-03f, -6.511361792e-03f, -2.062975205e-03f, +7.492209745e-03f, +1.536275749e-02f, +1.283558378e-02f, -2.603795838e-03f, -2.205492453e-02f, -2.944251916e-02f, -1.427181479e-02f, +1.694897807e-02f, +4.196844481e-02f, +3.873396428e-02f, +4.575875497e-03f, -3.808501915e-02f, -5.680226930e-02f, -3.466167885e-02f, +1.447421771e-02f, +5.490215935e-02f, +5.632231750e-02f, +1.766178696e-02f, -3.207544947e-02f, -5.663462307e-02f, -4.026150834e-02f, +1.821632073e-03f, +3.738774859e-02f, +4.275140507e-02f, +1.896833652e-02f, -1.261848382e-02f, -2.918731795e-02f, -2.303787917e-02f, -3.853246757e-03f, +1.221652793e-02f, +1.558421773e-02f, +8.129203837e-03f, -1.573140758e-03f, -6.427666573e-03f, -5.270588954e-03f, -1.463837631e-03f, +1.293476148e-03f, +1.742498519e-03f, +8.542223788e-04f, +2.633478904e-05f, -1.482949967e-05f, -3.202390001e-05f, -1.818856848e-05f, +4.316398208e-05f, +1.133401148e-04f, +1.063742421e-04f, -3.261098626e-05f, -2.366577331e-04f, -3.207945823e-04f, -1.268813810e-04f, +2.890914543e-04f, +6.180377019e-04f, +5.101038438e-04f, -9.219536492e-05f, -8.012152726e-04f, -1.019137592e-03f, -4.357232295e-04f, +6.245342378e-04f, +1.363755593e-03f, +1.125870273e-03f, -1.973393099e-05f, -1.251028504e-03f, -1.607883660e-03f, -7.715049169e-04f, +6.475274993e-04f, +1.577203222e-03f, +1.333304376e-03f, +1.480047969e-04f, -1.048758245e-03f, -1.388413650e-03f, -7.209476360e-04f, +3.462803737e-04f, +9.985389804e-04f, +8.510532580e-04f, +1.631995593e-04f, -4.718199911e-04f, -6.304829761e-04f, -3.297664872e-04f, +9.411699013e-05f, +3.156103559e-04f, +2.529190916e-04f, +5.122048314e-05f, -9.901380912e-05f, -1.173728985e-04f, -5.049686428e-05f, +1.434647234e-05f, +3.255991088e-05f, +1.682492863e-05f, /* 4,18 (48) */ -2.228409418e-04f, -6.179085974e-04f, -7.845556909e-04f, -2.303210233e-04f, +1.163640017e-03f, +2.718748007e-03f, +3.070811488e-03f, +1.024540281e-03f, -3.240163505e-03f, -7.519760531e-03f, -8.346819126e-03f, -3.189629866e-03f, +7.055512513e-03f, +1.713188427e-02f, +1.941167473e-02f, +8.476963726e-03f, -1.402281786e-02f, -3.746610354e-02f, -4.546190791e-02f, -2.353761512e-02f, +3.227527181e-02f, +1.107899723e-01f, +1.882428856e-01f, +2.376723015e-01f, +2.408041017e-01f, +1.964586857e-01f, +1.211006157e-01f, +4.124188910e-02f, -1.833564411e-02f, -4.457078513e-02f, -3.966312545e-02f, -1.720698453e-02f, +6.163148572e-03f, +1.881793742e-02f, +1.799766720e-02f, +8.472827254e-03f, -2.119547102e-03f, -8.052542554e-03f, -7.883982483e-03f, -3.839932818e-03f, +5.871983194e-04f, +2.960379811e-03f, +2.859568845e-03f, +1.372691842e-03f, -9.672192862e-05f, -7.630024450e-04f, -6.618667983e-04f, -2.687613508e-04f, +1.105006591e-05f, +1.155668711e-05f, -3.518374039e-06f, -3.119039424e-05f, -5.179639469e-05f, -3.828466290e-05f, +2.140034152e-05f, +1.035607843e-04f, +1.498548087e-04f, +9.994206275e-05f, -5.812336101e-05f, -2.543785525e-04f, -3.547457686e-04f, -2.365135726e-04f, +1.144469186e-04f, +5.487428281e-04f, +7.935893281e-04f, +5.886774826e-04f, -1.466612390e-04f, -1.214749860e-03f, -2.184962126e-03f, -2.581698707e-03f, -2.126157165e-03f, -9.004835180e-04f, +6.639163882e-04f, +1.977945120e-03f, +2.569265114e-03f, +2.295299430e-03f, +1.385582399e-03f, +3.004916782e-04f, -5.071458790e-04f, -7.961443986e-04f, -6.071186859e-04f, -1.827925721e-04f, +1.951968851e-04f, +3.527648773e-04f, +2.801331747e-04f, +8.918604661e-05f, -8.161580702e-05f, -1.495217318e-04f, -1.149097875e-04f, -3.392330190e-05f, +3.188604545e-05f, +5.254710946e-05f, +3.556773003e-05f, +7.322685613e-06f, -1.033947149e-05f, -1.187143190e-05f, -2.014647924e-05f, +7.575485786e-04f, +1.691672486e-03f, +1.430281096e-03f, -1.119620424e-03f, -4.958546050e-03f, -6.543972778e-03f, -2.299632938e-03f, +7.171415163e-03f, +1.523587610e-02f, +1.312467524e-02f, -1.985758136e-03f, -2.154482068e-02f, -2.953471452e-02f, -1.507303007e-02f, +1.592984048e-02f, +4.153272158e-02f, +3.935849852e-02f, +5.939631090e-03f, -3.695914888e-02f, -5.682200323e-02f, -3.591270736e-02f, +1.286633405e-02f, +5.413065444e-02f, +5.696984499e-02f, +1.923899018e-02f, -3.074214510e-02f, -5.648661828e-02f, -4.131026659e-02f, +4.332184234e-04f, +3.666680095e-02f, +4.309768544e-02f, +1.996687550e-02f, -1.176743056e-02f, -2.902411839e-02f, -2.350969916e-02f, -4.483729733e-03f, +1.188676144e-02f, +1.567833472e-02f, +8.444814193e-03f, -1.320221666e-03f, -6.376446090e-03f, -5.369602763e-03f, -1.581210529e-03f, +1.242979284e-03f, +1.756844992e-03f, +8.867822897e-04f, +4.315971767e-05f, -1.416842128e-05f, -3.178096262e-05f, -1.936655489e-05f, +4.074341266e-05f, +1.118366926e-04f, +1.085474701e-04f, -2.655168425e-05f, -2.309909909e-04f, -3.219377725e-04f, -1.373301571e-04f, +2.753562781e-04f, +6.129729854e-04f, +5.218248785e-04f, -6.875206024e-05f, -7.835696146e-04f, -1.024322317e-03f, -4.645456348e-04f, +5.917088586e-04f, +1.353480834e-03f, +1.149685270e-03f, +2.287402917e-05f, -1.221746674e-03f, -1.615617815e-03f, -8.116510977e-04f, +6.051308071e-04f, +1.564506376e-03f, +1.358794677e-03f, +1.907975127e-04f, -1.021223537e-03f, -1.394541677e-03f, -7.523057237e-04f, +3.155456883e-04f, +9.899919317e-04f, +8.665746790e-04f, +1.870298427e-04f, -4.580383367e-04f, -6.336878614e-04f, -3.431057333e-04f, +8.274502853e-05f, +3.132893352e-04f, +2.580706410e-04f, +5.755201443e-05f, -9.627963359e-05f, -1.185482258e-04f, -5.295708166e-05f, +1.296376440e-05f, +3.267069945e-05f, +1.749127965e-05f, /* 4,19 (48) */ -2.117908759e-04f, -6.063519103e-04f, -7.880740649e-04f, -2.615114176e-04f, +1.111843622e-03f, +2.680463344e-03f, +3.092211830e-03f, +1.128101065e-03f, -3.090308696e-03f, -7.419818468e-03f, -8.404942487e-03f, -3.444008419e-03f, +6.700766744e-03f, +1.689537070e-02f, +1.952612165e-02f, +9.025706554e-03f, -1.322922853e-02f, -3.687742605e-02f, -4.560856914e-02f, -2.475236498e-02f, +3.009030968e-02f, +1.082082735e-01f, +1.861167285e-01f, +2.367718179e-01f, +2.414680180e-01f, +1.984366308e-01f, +1.236698808e-01f, +4.353718853e-02f, -1.695006172e-02f, -4.427029345e-02f, -4.017027133e-02f, -1.800312893e-02f, +5.556029886e-03f, +1.863514484e-02f, +1.819286408e-02f, +8.825592131e-03f, -1.839413927e-03f, -7.963356507e-03f, -7.965598290e-03f, -3.989454550e-03f, +4.722885319e-04f, +2.926456509e-03f, +2.891454891e-03f, +1.425238952e-03f, -6.115419859e-05f, -7.556797593e-04f, -6.722062698e-04f, -2.806327827e-04f, +1.086380328e-05f, +1.175087387e-05f, -2.797513799e-06f, -3.029309637e-05f, -5.153950867e-05f, -3.942009059e-05f, +1.896549344e-05f, +1.011783760e-04f, +1.496214900e-04f, +1.032722050e-04f, -5.202614347e-05f, -2.489261490e-04f, -3.544630052e-04f, -2.440604639e-04f, +1.010261762e-04f, +5.364730471e-04f, +7.916898281e-04f, +6.033642566e-04f, -1.168884923e-04f, -1.180246587e-03f, -2.161111704e-03f, -2.581581344e-03f, -2.153488329e-03f, -9.468343174e-04f, +6.157661632e-04f, +1.946058681e-03f, +2.564155124e-03f, +2.315494573e-03f, +1.419301593e-03f, +3.321729341e-04f, -4.892356315e-04f, -7.952254626e-04f, -6.181333013e-04f, -1.966576036e-04f, +1.862337587e-04f, +3.516722310e-04f, +2.849500731e-04f, +9.548823139e-05f, -7.762243142e-05f, -1.491456078e-04f, -1.170516966e-04f, -3.648730630e-05f, +3.046318302e-05f, +5.258519756e-05f, +3.641527474e-05f, +8.120766612e-06f, -1.004582615e-05f, -1.201125048e-05f, -3.431490051e-05f, +7.257676160e-04f, +1.672305932e-03f, +1.471024509e-03f, -1.007783731e-03f, -4.849998580e-03f, -6.570524462e-03f, -2.530623929e-03f, +6.849477391e-03f, +1.509854595e-02f, +1.340003152e-02f, -1.372785150e-03f, -2.102299581e-02f, -2.960346658e-02f, -1.585659968e-02f, +1.490551817e-02f, +4.106817594e-02f, +3.995020738e-02f, +7.293111923e-03f, -3.580946361e-02f, -5.679912920e-02f, -3.713445403e-02f, +1.125071624e-02f, +5.331900334e-02f, +5.757497580e-02f, +2.080349656e-02f, -2.938335042e-02f, -5.629582076e-02f, -4.233149012e-02f, -9.613232535e-04f, +3.591449523e-02f, +4.341323113e-02f, +2.095686743e-02f, -1.090085588e-02f, -2.883708855e-02f, -2.396773750e-02f, -5.117417595e-03f, +1.154365571e-02f, +1.576107975e-02f, +8.758103528e-03f, -1.062151025e-03f, -6.318894076e-03f, -5.465882396e-03f, -1.699758755e-03f, +1.190022202e-03f, +1.769808756e-03f, +9.194529891e-04f, +6.065099732e-05f, -1.351074403e-05f, -3.150773327e-05f, -2.049298849e-05f, +3.833846165e-05f, +1.102586480e-04f, +1.105811345e-04f, -2.057171849e-05f, -2.252124631e-04f, -3.227931365e-04f, -1.475322116e-04f, +2.615536806e-04f, +6.074645433e-04f, +5.330170897e-04f, -4.545180504e-05f, -7.654373648e-04f, -1.028667743e-03f, -4.928376748e-04f, +5.585861505e-04f, +1.342198342e-03f, +1.172528677e-03f, +6.535122827e-05f, -1.191577599e-03f, -1.622096891e-03f, -8.511543217e-04f, +5.622541709e-04f, +1.550588370e-03f, +1.383280130e-03f, +2.335512367e-04f, -9.928046655e-04f, -1.399608137e-03f, -7.832283699e-04f, +2.843878024e-04f, +9.806065503e-04f, +8.815222021e-04f, +2.109094147e-04f, -4.437576740e-04f, -6.364081860e-04f, -3.563141973e-04f, +7.115961947e-05f, +3.106684165e-04f, +2.630765080e-04f, +6.393964423e-05f, -9.340523006e-05f, -1.196342840e-04f, -5.542122079e-05f, +1.153056169e-05f, +3.274577985e-05f, +1.815674907e-05f, /* 4,20 (48) */ -2.009270726e-04f, -5.946010365e-04f, -7.908715787e-04f, -2.918045140e-04f, +1.060304113e-03f, +2.641043253e-03f, +3.111177323e-03f, +1.229279441e-03f, -2.940687206e-03f, -7.316546263e-03f, -8.456968631e-03f, -3.692934568e-03f, +6.346303739e-03f, +1.665131023e-02f, +1.962714782e-02f, +9.562179601e-03f, -1.243753870e-02f, -3.627406180e-02f, -4.572545764e-02f, -2.593261157e-02f, +2.792919798e-02f, +1.056266922e-01f, +1.839632402e-01f, +2.358249836e-01f, +2.420837842e-01f, +2.003826895e-01f, +1.262340359e-01f, +4.585268310e-02f, -1.553076012e-02f, -4.393812052e-02f, -4.065950696e-02f, -1.879835439e-02f, +4.937896585e-03f, +1.843848724e-02f, +1.837909784e-02f, +9.177264362e-03f, -1.554463854e-03f, -7.867868276e-03f, -8.043220721e-03f, -4.138600157e-03f, +3.552368352e-04f, +2.889969203e-03f, +2.921918074e-03f, +1.477824149e-03f, -2.473892386e-05f, -7.475589927e-04f, -6.822520959e-04f, -2.926440332e-04f, +1.067103444e-05f, +1.192901538e-05f, -2.090829182e-06f, -2.939051183e-05f, -5.124888558e-05f, -4.050721427e-05f, +1.655716031e-05f, +9.876351284e-05f, +1.492916248e-04f, +1.064887260e-04f, -4.597560078e-05f, -2.433841554e-04f, -3.539603077e-04f, -2.513637965e-04f, +8.770511911e-05f, +5.240271131e-04f, +7.893422111e-04f, +6.175073398e-04f, -8.747179280e-05f, -1.145667720e-03f, -2.136697738e-03f, -2.580604122e-03f, -2.180028346e-03f, -9.928230059e-04f, +5.673795826e-04f, +1.913448276e-03f, +2.558166103e-03f, +2.335036878e-03f, +1.452834710e-03f, +3.641321009e-04f, -4.707973205e-04f, -7.938169860e-04f, -6.289058638e-04f, -2.105698600e-04f, +1.770437336e-04f, +3.503421484e-04f, +2.896448614e-04f, +1.018114333e-04f, -7.352242204e-05f, -1.486633763e-04f, -1.191458798e-04f, -3.906749896e-05f, +2.899317705e-05f, +5.258424396e-05f, +3.725144604e-05f, +8.930240209e-06f, -9.735192555e-06f, -1.214210066e-05f, -4.782564454e-05f, +6.942598828e-04f, +1.651812943e-03f, +1.509362970e-03f, -8.975250834e-04f, -4.739417445e-03f, -6.591096181e-03f, -2.755836392e-03f, +6.526684254e-03f, +1.495101374e-02f, +1.366158520e-02f, -7.653206070e-04f, -2.048997872e-02f, -2.964891839e-02f, -1.662203705e-02f, +1.387685042e-02f, +4.057533827e-02f, +4.050879353e-02f, +8.635310265e-03f, -3.463693493e-02f, -5.673377797e-02f, -3.832603163e-02f, +9.628619345e-03f, +5.246784902e-02f, +5.813722997e-02f, +2.235408493e-02f, -2.800007029e-02f, -5.606226953e-02f, -4.332429479e-02f, -2.360931390e-03f, +3.513126686e-02f, +4.369761893e-02f, +2.193747398e-02f, -1.001933368e-02f, -2.862617914e-02f, -2.441149517e-02f, -5.753825781e-03f, +1.118734151e-02f, +1.583223937e-02f, +9.068771944e-03f, -7.990745172e-04f, -6.254954431e-03f, -5.559287626e-03f, -1.819393039e-03f, +1.134600982e-03f, +1.781339318e-03f, +9.521987690e-04f, +7.880774639e-05f, -1.285725242e-05f, -3.120533410e-05f, -2.156784201e-05f, +3.595129296e-05f, +1.086089913e-04f, +1.124757694e-04f, -1.467531985e-05f, -2.193289824e-04f, -3.233637847e-04f, -1.574817538e-04f, +2.476961529e-04f, +6.015214833e-04f, +5.436760041e-04f, -2.231261017e-05f, -7.468369003e-04f, -1.032175779e-03f, -5.205795147e-04f, +5.251941758e-04f, +1.329921279e-03f, +1.194385510e-03f, +1.076641795e-04f, -1.160546927e-03f, -1.627317182e-03f, -8.899834931e-04f, +5.189315099e-04f, +1.535459032e-03f, +1.406739489e-03f, +2.762317526e-04f, -9.635215340e-04f, -1.403604744e-03f, -8.136885621e-04f, +2.528296377e-04f, +9.703851603e-04f, +8.958794037e-04f, +2.348188846e-04f, -4.289854480e-04f, -6.386367957e-04f, -3.693791032e-04f, +5.936826082e-05f, +3.077459176e-04f, +2.679300144e-04f, +7.037832680e-05f, -9.039088257e-05f, -1.206282501e-04f, -5.788677766e-05f, +1.004726703e-05f, +3.278411916e-05f, +1.882041246e-05f, /* 4,21 (48) */ -1.902560381e-04f, -5.826720211e-04f, -7.929624079e-04f, -3.211950258e-04f, +1.009055228e-03f, +2.600536039e-03f, +3.127734483e-03f, +1.328042954e-03f, -2.791395581e-03f, -7.210057537e-03f, -8.502944231e-03f, -3.936318723e-03f, +5.992343431e-03f, +1.639994644e-02f, +1.971485294e-02f, +1.008620671e-02f, -1.164819649e-02f, -3.565655446e-02f, -4.581292943e-02f, -2.707827929e-02f, +2.579250024e-02f, +1.030460881e-01f, +1.817832118e-01f, +2.348321606e-01f, +2.426511638e-01f, +2.022961377e-01f, +1.287922020e-01f, +4.818771998e-02f, -1.407792541e-02f, -4.357398842e-02f, -4.113030429e-02f, -1.959217137e-02f, +4.308990721e-03f, +1.822791738e-02f, +1.855614158e-02f, +9.527606511e-03f, -1.264818993e-03f, -7.766056842e-03f, -8.116743143e-03f, -4.287263534e-03f, +2.360909554e-04f, +2.850901704e-03f, +2.950911251e-03f, +1.530408393e-03f, +1.251252218e-05f, -7.386287525e-04f, -6.919872885e-04f, -3.047861339e-04f, +1.047211195e-05f, +1.209129542e-05f, -1.398643874e-06f, -2.848347424e-05f, -5.092534407e-05f, -4.154602144e-05f, +1.417666452e-05f, +9.631836077e-05f, +1.488667806e-04f, +1.095909776e-04f, -3.997511835e-05f, -2.377572560e-04f, -3.532406304e-04f, -2.584218823e-04f, +7.449071459e-05f, +5.114144858e-04f, +7.865531458e-04f, +6.311056663e-04f, -5.842132989e-05f, -1.111028863e-03f, -2.111733820e-03f, -2.578771288e-03f, -2.205769064e-03f, -1.038432244e-03f, +5.187751349e-04f, +1.880124898e-03f, +2.551296854e-03f, +2.353914507e-03f, +1.486165880e-03f, +3.963570956e-04f, -4.518343557e-04f, -7.919138599e-04f, -6.394270710e-04f, -2.245213585e-04f, +1.676298856e-04f, +3.487726173e-04f, +2.942129712e-04f, +1.081517273e-04f, -6.931713154e-05f, -1.480738929e-04f, -1.211901590e-04f, -4.166225889e-05f, +2.747635175e-05f, +5.254356191e-05f, +3.807534563e-05f, +9.750635465e-06f, -9.407489159e-06f, -1.226363572e-05f, -6.068289696e-05f, +6.630545487e-04f, +1.630245101e-03f, +1.545314263e-03f, -7.889160921e-04f, -4.626941676e-03f, -6.605771501e-03f, -2.975165374e-03f, +6.203320469e-03f, +1.479353198e-02f, +1.390928135e-02f, -1.637991238e-04f, -1.994630271e-02f, -2.967123100e-02f, -1.736887395e-02f, +1.284467464e-02f, +4.005475875e-02f, +4.103398771e-02f, +9.965231544e-03f, -3.344254942e-02f, -5.662611379e-02f, -3.948657856e-02f, +8.001302163e-03f, +5.157786552e-02f, +5.865616148e-02f, +2.388954396e-02f, -2.659333080e-02f, -5.578603777e-02f, -4.428781632e-02f, -3.764536134e-03f, +3.431757830e-02f, +4.395044857e-02f, +2.290785914e-02f, -9.123454277e-03f, -2.839136025e-02f, -2.484048062e-02f, -6.392462576e-03f, +1.081796240e-02f, +1.589160763e-02f, +9.376517862e-03f, -5.311445028e-04f, -6.184576105e-03f, -5.649678509e-03f, -1.940021289e-03f, +1.076714204e-03f, +1.791386585e-03f, +9.849828881e-04f, +9.762815885e-05f, -1.220870577e-05f, -3.087489644e-05f, -2.259114707e-05f, +3.358400885e-05f, +1.068907517e-04f, +1.142320367e-04f, -8.866574981e-06f, -2.133473835e-04f, -3.236530469e-04f, -1.671732861e-04f, +2.337961005e-04f, +5.951532014e-04f, +5.537976452e-04f, +6.477933725e-07f, -7.277868621e-04f, -1.034849023e-03f, -5.477518863e-04f, +4.915610870e-04f, +1.316663576e-03f, +1.215241647e-03f, +1.497796158e-04f, -1.128680965e-03f, -1.631276012e-03f, -9.281080801e-04f, +4.751971168e-04f, +1.519129192e-03f, +1.429152316e-03f, +3.188048226e-04f, -9.333948178e-04f, -1.406524065e-03f, -8.436595480e-04f, +2.208945727e-04f, +9.593308029e-04f, +9.096302455e-04f, +2.587386849e-04f, -4.137295927e-04f, -6.403668975e-04f, -3.822876665e-04f, +4.737872311e-05f, +3.045204117e-04f, +2.726245321e-04f, +7.686289059e-05f, -8.723701883e-05f, -1.215273449e-04f, -6.035119738e-05f, +8.514348974e-06f, +3.278470509e-05f, +1.948132439e-05f, /* 4,22 (48) */ -1.797839262e-04f, -5.705807257e-04f, -7.943610518e-04f, -3.496785000e-04f, +9.581298838e-04f, +2.558990017e-03f, +3.141911148e-03f, +1.424361314e-03f, -2.642528801e-03f, -7.100466560e-03f, -8.542919350e-03f, -4.174075979e-03f, +5.639102801e-03f, +1.614152455e-02f, +1.978934366e-02f, +1.059762120e-02f, -1.086164335e-02f, -3.502544879e-02f, -4.587135076e-02f, -2.818930815e-02f, +2.368076642e-02f, +1.004673168e-01f, +1.795774427e-01f, +2.337937284e-01f, +2.431699389e-01f, +2.041762626e-01f, +1.313434989e-01f, +5.054163449e-02f, -1.259175953e-02f, -4.317763132e-02f, -4.158213864e-02f, -2.038408523e-02f, +3.669563650e-03f, +1.800339602e-02f, +1.872377146e-02f, +9.876379128e-03f, -9.706060217e-04f, -7.657905115e-03f, -8.186060275e-03f, -4.435337427e-03f, +1.149007964e-04f, +2.809239445e-03f, +2.978387603e-03f, +1.582951955e-03f, +5.058786781e-05f, -7.288781171e-04f, -7.013947777e-04f, -3.170497696e-04f, +1.026738752e-05f, +1.223790898e-05f, -7.212630777e-07f, -2.757280659e-05f, -5.056971542e-05f, -4.253653645e-05f, +1.182528874e-05f, +9.384507757e-05f, +1.483485705e-04f, +1.125783976e-04f, -3.402800705e-05f, -2.320501354e-04f, -3.523070318e-04f, -2.652332049e-04f, +6.138978928e-05f, +4.986446197e-04f, +7.833294736e-04f, +6.441584584e-04f, -2.974703766e-05f, -1.076345550e-03f, -2.086233724e-03f, -2.576087462e-03f, -2.230702699e-03f, -1.083644875e-03f, +4.699714128e-04f, +1.846099875e-03f, +2.543546566e-03f, +2.372115874e-03f, +1.519279236e-03f, +4.288356190e-04f, -4.323504425e-04f, -7.895111918e-04f, -6.496876654e-04f, -2.385040047e-04f, +1.579954647e-04f, +3.469617557e-04f, +2.986498630e-04f, +1.145051290e-04f, -6.500800187e-05f, -1.473760729e-04f, -1.231823616e-04f, -4.426993069e-05f, +2.591307205e-05f, +5.246248495e-05f, +3.888606991e-05f, +1.058146335e-05f, -9.062648661e-06f, -1.237551130e-05f, -7.289160273e-05f, +6.321796522e-04f, +1.607653954e-03f, +1.578898272e-03f, -6.820253404e-04f, -4.512709639e-03f, -6.614638076e-03f, -3.188512758e-03f, +5.879667422e-03f, +1.462635870e-02f, +1.414307745e-02f, +4.313540776e-04f, -1.939250507e-02f, -2.967058320e-02f, -1.809666081e-02f, +1.180982562e-02f, +3.950700687e-02f, +4.152554879e-02f, +1.128189512e-02f, -3.222730777e-02f, -5.647633418e-02f, -4.061525952e-02f, +6.370026151e-03f, +5.064975744e-02f, +5.913135860e-02f, +2.540867315e-02f, -2.516417848e-02f, -5.546723295e-02f, -4.522121114e-02f, -5.171060199e-03f, +3.347391875e-02f, +4.417134314e-02f, +2.386718994e-02f, -8.213824032e-03f, -2.813262157e-02f, -2.525421021e-02f, -7.032829474e-03f, +1.043567474e-02f, +1.593898636e-02f, +9.681038274e-03f, -2.585199707e-04f, -6.107713214e-03f, -5.736915528e-03f, -2.061548634e-03f, +1.016363007e-03f, +1.799900934e-03f, +1.017767593e-03f, +1.171094832e-04f, -1.156583771e-05f, -3.051755931e-05f, -2.356299303e-05f, +3.123864879e-05f, +1.051069733e-04f, +1.158507237e-04f, -3.149424362e-06f, -2.072744965e-04f, -3.236644660e-04f, -1.766016064e-04f, +2.198658333e-04f, +5.883693712e-04f, +5.633785327e-04f, +2.341196786e-05f, -7.083061374e-04f, -1.036690754e-03f, -5.743361015e-04f, +4.577151014e-04f, +1.302439913e-03f, +1.235083830e-03f, +1.916645172e-04f, -1.096006654e-03f, -1.633971743e-03f, -9.654981397e-04f, +4.310856293e-04f, +1.501610669e-03f, +1.450498990e-03f, +3.612362155e-04f, -9.024459511e-04f, -1.408359528e-03f, -8.731148588e-04f, +1.886064256e-04f, +9.474472378e-04f, +9.227590917e-04f, +2.826490864e-04f, -3.979985283e-04f, -6.415920685e-04f, -3.950271064e-04f, +3.519904534e-05f, +3.009907318e-04f, +2.771534900e-04f, +8.338804160e-05f, -8.394421207e-05f, -1.223288367e-04f, -6.281187603e-05f, +6.932342584e-06f, +3.274654767e-05f, +2.013851916e-05f, /* 4,23 (48) */ -1.695165387e-04f, -5.583428167e-04f, -7.950823148e-04f, -3.772513066e-04f, +9.075601684e-04f, +2.516453481e-03f, +3.153736437e-03f, +1.518206392e-03f, -2.494180230e-03f, -6.987888162e-03f, -8.576947357e-03f, -4.406126115e-03f, +5.286795769e-03f, +1.587629135e-02f, +1.985073345e-02f, +1.109626582e-02f, -1.007831387e-02f, -3.438129033e-02f, -4.590109780e-02f, -2.926565370e-02f, +2.159453270e-02f, +9.789122933e-02f, +1.773467400e-01f, +2.327100835e-01f, +2.436399103e-01f, +2.060223625e-01f, +1.338870455e-01f, +5.291375036e-02f, -1.107248030e-02f, -4.274879570e-02f, -4.201448908e-02f, -2.117359643e-02f, +3.019875985e-03f, +1.776489202e-02f, +1.888176693e-02f, +1.022334088e-02f, -6.719561588e-04f, -7.543399986e-03f, -8.251068276e-03f, -4.582713499e-03f, -8.281565258e-06f, +2.764969514e-03f, +3.004300675e-03f, +1.635414440e-03f, +8.947393773e-05f, -7.182966537e-04f, -7.104574263e-04f, -3.294252809e-04f, +1.005721173e-05f, +1.236906188e-05f, -5.897355422e-08f, -2.665932067e-05f, -5.018284270e-05f, -4.347881995e-05f, +9.504275476e-06f, +9.134581111e-05f, +1.477386512e-04f, +1.154505091e-04f, -2.813750178e-05f, -2.262674753e-04f, -3.511626720e-04f, -2.717964180e-04f, +4.840902647e-05f, +4.857269586e-04f, +7.796782035e-04f, +6.566652244e-04f, -1.458591480e-06f, -1.041633242e-03f, -2.060211405e-03f, -2.572557625e-03f, -2.254821845e-03f, -1.128443930e-03f, +4.209871051e-04f, +1.811384863e-03f, +2.534914823e-03f, +2.389629649e-03f, +1.552158922e-03f, +4.615551614e-04f, -4.123495821e-04f, -7.866043095e-04f, -6.596784399e-04f, -2.525095963e-04f, +1.481438948e-04f, +3.449078145e-04f, +3.029510298e-04f, +1.208675967e-04f, -6.059656432e-05f, -1.465688934e-04f, -1.251203224e-04f, -4.688882536e-05f, +2.430374389e-05f, +5.234036778e-05f, +3.968271065e-05f, +1.142221689e-05f, -8.700618332e-06f, -1.247738578e-05f, -8.445744044e-05f, +6.016620929e-04f, +1.584090961e-03f, +1.610136921e-03f, -5.769183672e-04f, -4.396858915e-03f, -6.617787500e-03f, -3.395787254e-03f, +5.556002956e-03f, +1.444975709e-02f, +1.436294328e-02f, +1.019723449e-03f, -1.882912653e-02f, -2.964717124e-02f, -1.880496695e-02f, +1.077313487e-02f, +3.893267077e-02f, +4.198326390e-02f, +1.258433503e-02f, -3.099222394e-02f, -5.628466966e-02f, -4.171126617e-02f, +4.736054408e-03f, +4.968425930e-02f, +5.956244423e-02f, +2.691028382e-02f, -2.371367949e-02f, -5.510599674e-02f, -4.612365709e-02f, -6.579419727e-03f, +3.260080389e-02f, +4.435994957e-02f, +2.481463718e-02f, -7.291064940e-03f, -2.784997248e-02f, -2.565220874e-02f, -7.674421542e-03f, +1.004064763e-02f, +1.597418540e-02f, +9.982029006e-03f, +1.863351932e-05f, -6.024325172e-03f, -5.820859740e-03f, -2.183877471e-03f, +9.535511306e-04f, +1.806833276e-03f, +1.050514141e-03f, +1.372480024e-04f, -1.092935588e-05f, -3.013446780e-05f, -2.448352570e-05f, +2.891718833e-05f, +1.032607123e-04f, +1.173327403e-04f, +2.472339476e-06f, -2.011171405e-04f, -3.234017925e-04f, -1.857618093e-04f, +2.059175552e-04f, +5.811799325e-04f, +5.724156817e-04f, +4.596278178e-05f, -6.884138412e-04f, -1.037704928e-03f, -6.003140652e-04f, +4.236844779e-04f, +1.287265709e-03f, +1.253899682e-03f, +2.332861382e-04f, -1.062551544e-03f, -1.635403767e-03f, -1.002124343e-03f, +3.866320012e-04f, +1.482916267e-03f, +1.470760737e-03f, +4.034917365e-04f, -8.706971109e-04f, -1.409105432e-03f, -9.020283335e-04f, +1.559894358e-04f, +9.347389443e-04f, +9.352507246e-04f, +3.065302152e-04f, -3.818011580e-04f, -6.423062653e-04f, -4.075846569e-04f, +2.283753055e-05f, +2.971559747e-04f, +2.815103813e-04f, +8.994836685e-05f, -8.051318266e-05f, -1.230300454e-04f, -6.526616266e-05f, +5.301850104e-06f, +3.266868091e-05f, +2.079101159e-05f, /* 4,24 (48) */ -1.594593269e-04f, -5.459737548e-04f, -7.951412884e-04f, -4.039106273e-04f, +8.573773257e-04f, +2.472974661e-03f, +3.163240712e-03f, +1.609552203e-03f, -2.346441579e-03f, -6.872437653e-03f, -8.605084859e-03f, -4.632393590e-03f, +4.935633097e-03f, +1.560449493e-02f, +1.989914247e-02f, +1.158199278e-02f, -9.298635668e-03f, -3.372462511e-02f, -4.590255639e-02f, -3.030728694e-02f, +1.953432129e-02f, +9.531867170e-02f, +1.750919182e-01f, +2.315816396e-01f, +2.440608974e-01f, +2.078337474e-01f, +1.364219603e-01f, +5.530338001e-02f, -9.520321375e-03f, -4.228724054e-02f, -4.242683867e-02f, -2.196020074e-02f, +2.360197545e-03f, +1.751238242e-02f, +1.902991082e-02f, +1.056824870e-02f, -3.690051289e-04f, -7.422532389e-03f, -8.311664841e-03f, -4.729282393e-03f, -1.334018877e-04f, +2.718080689e-03f, +3.028604419e-03f, +1.687754808e-03f, +1.291566484e-04f, -7.068744368e-04f, -7.191580447e-04f, -3.419026667e-04f, +9.841933680e-06f, +1.248497041e-05f, +5.879563279e-07f, -2.574381665e-05f, -4.976557993e-05f, -4.437296836e-05f, +7.214826744e-06f, +8.882269798e-05f, +1.470387212e-04f, +1.182069200e-04f, -2.230676018e-05f, -2.204139514e-04f, -3.498108096e-04f, -2.781103449e-04f, +3.555496353e-05f, +4.726709308e-04f, +7.756065067e-04f, +6.686257571e-04f, +2.643459550e-05f, -1.006907315e-03f, -2.033680987e-03f, -2.568187124e-03f, -2.278119471e-03f, -1.172812640e-03f, +3.718409871e-04f, +1.775991847e-03f, +2.525401601e-03f, +2.406444767e-03f, +1.584789098e-03f, +4.945030070e-04f, -3.918360714e-04f, -7.831887655e-04f, -6.693902437e-04f, -2.665298267e-04f, +1.380787733e-04f, +3.426091801e-04f, +3.071120005e-04f, +1.272350333e-04f, -5.608443952e-05f, -1.456513944e-04f, -1.270018852e-04f, -4.951722105e-05f, +2.264881449e-05f, +5.217658705e-05f, +4.046435566e-05f, +1.227237129e-05f, -8.321360299e-06f, -1.256892063e-05f, -9.538679632e-05f, +5.715276251e-04f, +1.559607435e-03f, +1.639054109e-03f, -4.736576549e-04f, -4.279526175e-03f, -6.615315161e-03f, -3.596904395e-03f, +5.232601164e-03f, +1.426399528e-02f, +1.456886084e-02f, +1.600903381e-03f, -1.825671085e-02f, -2.960120845e-02f, -1.949338079e-02f, +9.735429939e-03f, +3.833235670e-02f, +4.240694837e-02f, +1.387160074e-02f, -2.973832426e-02f, -5.605138352e-02f, -4.277381772e-02f, +3.100650641e-03f, +4.868213496e-02f, +5.994907623e-02f, +2.839320009e-02f, -2.224291876e-02f, -5.470250500e-02f, -4.699435420e-02f, -7.988525159e-03f, +3.169877556e-02f, +4.451593900e-02f, +2.574937612e-02f, -6.355814215e-03f, -2.754344226e-02f, -2.603400990e-02f, -8.316727808e-03f, +9.633062975e-03f, +1.599702293e-02f, +1.027918498e-02f, +3.001439006e-04f, -5.934376806e-03f, -5.901372922e-03f, -2.306907516e-03f, +8.882849680e-04f, +1.812135126e-03f, +1.083182822e-03f, +1.580390140e-04f, -1.029994154e-05f, -2.972677158e-05f, -2.535294614e-05f, +2.662153812e-05f, +1.013550330e-04f, +1.186791159e-04f, +7.995073534e-06f, -1.948821172e-04f, -3.228689785e-04f, -1.946492873e-04f, +1.919633541e-04f, +5.735950795e-04f, +5.809066006e-04f, +6.828342250e-05f, -6.681292984e-04f, -1.037896166e-03f, -6.256682876e-04f, +3.894974920e-04f, +1.271157102e-03f, +1.271677709e-03f, +2.746120345e-04f, -1.028343774e-03f, -1.635572511e-03f, -1.037957999e-03f, +3.418714729e-04f, +1.463059761e-03f, +1.489919637e-03f, +4.455372552e-04f, -8.381711999e-04f, -1.408756955e-03f, -9.303741423e-04f, +1.230682455e-04f, +9.212111215e-04f, +9.470903609e-04f, +3.303620685e-04f, -3.651468636e-04f, -6.425038326e-04f, -4.199475789e-04f, +1.030274097e-05f, +2.930155053e-04f, +2.856887703e-04f, +9.653833807e-05f, -7.694479968e-05f, -1.236283455e-04f, -6.771136134e-05f, +3.623541571e-06f, +3.255016448e-05f, +2.143779791e-05f, /* 4,25 (48) */ -1.496173933e-04f, -5.334887844e-04f, -7.945533321e-04f, -4.296544439e-04f, +8.076117457e-04f, +2.428601693e-03f, +3.170455539e-03f, +1.698374901e-03f, -2.199402858e-03f, -6.754230733e-03f, -8.627391619e-03f, -4.852807542e-03f, +4.585822287e-03f, +1.532638459e-02f, +1.993469744e-02f, +1.205466371e-02f, -8.523029162e-03f, -3.305599935e-02f, -4.587612179e-02f, -3.131419426e-02f, +1.750064030e-02f, +9.275048458e-02f, +1.728137987e-01f, +2.304088269e-01f, +2.444327384e-01f, +2.096097392e-01f, +1.389473619e-01f, +5.770982478e-02f, -7.935532277e-03f, -4.179273754e-02f, -4.281867474e-02f, -2.274338950e-02f, +1.690807301e-03f, +1.724585259e-02f, +1.916798959e-02f, +1.091085788e-02f, -6.189312840e-05f, -7.295297356e-03f, -8.367749280e-03f, -4.874933787e-03f, -2.604037729e-04f, +2.668563468e-03f, +3.051253233e-03f, +1.739931395e-03f, +1.696210040e-04f, -6.946020655e-04f, -7.274794050e-04f, -3.544715873e-04f, +9.621900691e-06f, +1.258586094e-05f, +1.219276524e-06f, -2.482708254e-05f, -4.931879124e-05f, -4.521911322e-05f, +4.958103691e-06f, +8.627786209e-05f, +1.462505197e-04f, +1.208473221e-04f, -1.653886144e-05f, -2.144942307e-04f, -3.482547981e-04f, -2.841739777e-04f, +2.283398945e-05f, +4.594859434e-04f, +7.711217117e-04f, +6.800401319e-04f, +5.392337557e-05f, -9.721830556e-04f, -2.006656758e-03f, -2.562981663e-03f, -2.300588926e-03f, -1.216734440e-03f, +3.225519117e-04f, +1.739933127e-03f, +2.515007272e-03f, +2.422550433e-03f, +1.617153954e-03f, +5.276662400e-04f, -3.708145029e-04f, -7.792603414e-04f, -6.788139878e-04f, -2.805562892e-04f, +1.278038710e-04f, +3.400643764e-04f, +3.111283429e-04f, +1.336032886e-04f, -5.147333744e-05f, -1.446226806e-04f, -1.288249044e-04f, -5.215336394e-05f, +2.094877260e-05f, +5.197054220e-05f, +4.123008952e-05f, +1.313138411e-05f, -7.924851840e-06f, -1.264978081e-05f, -1.056867379e-04f, +5.418008535e-04f, +1.534254489e-03f, +1.665675647e-03f, -3.723026219e-04f, -4.160847059e-03f, -6.607320087e-03f, -3.791786512e-03f, +4.909732185e-03f, +1.406934599e-02f, +1.476082419e-02f, +2.174498461e-03f, -1.767580425e-02f, -2.953292503e-02f, -2.016151009e-02f, +8.697533773e-03f, +3.770668841e-02f, +4.279644587e-02f, +1.514275784e-02f, -2.846664655e-02f, -5.577677149e-02f, -4.380216149e-02f, +1.465078130e-03f, +4.764417696e-02f, +6.029094770e-02f, +2.985625985e-02f, -2.075299912e-02f, -5.425696774e-02f, -4.783252540e-02f, -9.397282114e-03f, +3.076840142e-02f, +4.463900725e-02f, +2.667058725e-02f, -5.408723854e-03f, -2.721308020e-02f, -2.639915676e-02f, -8.959231640e-03f, +9.213115396e-03f, +1.600732567e-02f, +1.057220049e-02f, +5.858326709e-04f, -5.837838467e-03f, -5.978317722e-03f, -2.430535862e-03f, +8.205736066e-04f, +1.815758668e-03f, +1.115732986e-03f, +1.794768119e-04f, -9.678249260e-06f, -2.929562340e-05f, -2.617150928e-05f, +2.435354300e-05f, +9.939300496e-05f, +1.198909969e-04f, +1.341528578e-05f, -1.885762046e-04f, -3.220701710e-04f, -2.032597318e-04f, +1.780151924e-04f, +5.656252499e-04f, +5.888492894e-04f, +9.035740848e-05f, -6.474720252e-04f, -1.037269751e-03f, -6.503818960e-04f, +3.551824120e-04f, +1.254130937e-03f, +1.288407306e-03f, +3.156100896e-04f, -9.934120415e-04f, -1.634479434e-03f, -1.072971079e-03f, +2.968395419e-04f, +1.442055892e-03f, +1.507958646e-03f, +4.873387349e-04f, -8.048918298e-04f, -1.407310159e-03f, -9.581268104e-04f, +8.986788047e-05f, +9.068696886e-04f, +9.582636675e-04f, +3.541245312e-04f, -3.480455019e-04f, -6.421795125e-04f, -4.321031721e-04f, -2.396506984e-06f, +2.885689603e-04f, +2.896822997e-04f, +1.031523155e-04f, -7.324008229e-05f, -1.241211704e-04f, -7.014473331e-05f, +1.898155368e-06f, +3.239008541e-05f, +2.207785664e-05f, /* 4,26 (48) */ -1.399954926e-04f, -5.209029234e-04f, -7.933340555e-04f, -4.544815265e-04f, +7.582929545e-04f, +2.383382579e-03f, +3.175413642e-03f, +1.784652763e-03f, -2.053152338e-03f, -6.633383411e-03f, -8.643930480e-03f, -5.067301772e-03f, +4.237567489e-03f, +1.504221061e-02f, +1.995753143e-02f, +1.251414965e-02f, -7.751907450e-03f, -3.237595922e-02f, -4.582219842e-02f, -3.228637731e-02f, +1.549398355e-02f, +9.018750292e-02f, +1.705132098e-01f, +2.291920925e-01f, +2.447552903e-01f, +2.113496723e-01f, +1.414623692e-01f, +6.013237521e-02f, -6.318378323e-03f, -4.126507130e-02f, -4.318948924e-02f, -2.352264984e-02f, +1.011993314e-03f, +1.696529630e-02f, +1.929579347e-02f, +1.125092225e-02f, +2.492352145e-04f, -7.161694067e-03f, -8.419222618e-03f, -5.019556468e-03f, -3.892286773e-04f, +2.616410104e-03f, +3.072202006e-03f, +1.791901937e-03f, +2.108510936e-04f, -6.814706814e-04f, -7.354042568e-04f, -3.671213681e-04f, +9.397458000e-06f, +1.267196955e-05f, +1.834755230e-06f, -2.390989374e-05f, -4.884335002e-05f, -4.601742064e-05f, +2.735226303e-06f, +8.371341332e-05f, +1.453758241e-04f, +1.233714902e-04f, -1.083680508e-05f, -2.085129681e-04f, -3.464980832e-04f, -2.899864756e-04f, +1.025234248e-05f, +4.461813775e-04f, +7.662312983e-04f, +6.909087043e-04f, +8.099886954e-05f, -9.374756521e-04f, -1.979153161e-03f, -2.556947300e-03f, -2.322223945e-03f, -1.260192979e-03f, +2.731388008e-04f, +1.703221322e-03f, +2.503732601e-03f, +2.437936128e-03f, +1.649237711e-03f, +5.610317500e-04f, -3.492897638e-04f, -7.748150519e-04f, -6.879406509e-04f, -2.945804811e-04f, +1.173231310e-04f, +3.372720680e-04f, +3.149956671e-04f, +1.399681615e-04f, -4.676505722e-05f, -1.434819223e-04f, -1.305872469e-04f, -5.479546913e-05f, +1.920414868e-05f, +5.172165629e-05f, +4.197899425e-05f, +1.399869545e-05f, -7.511085657e-06f, -1.271963515e-05f, -1.153649871e-04f, +5.125052301e-04f, +1.508082980e-03f, +1.690029190e-03f, -2.729096169e-04f, -4.040956062e-03f, -6.593904801e-03f, -3.980362717e-03f, +4.587662014e-03f, +1.386608626e-02f, +1.493883939e-02f, +2.740123711e-03f, -1.708695496e-02f, -2.944256762e-02f, -2.080898211e-02f, +7.660264021e-03f, +3.705630652e-02f, +4.315162828e-02f, +1.639688878e-02f, -2.717823924e-02f, -5.546116140e-02f, -4.479557353e-02f, -1.694013043e-04f, +4.657120588e-02f, +6.058778724e-02f, +3.129831574e-02f, -1.924504047e-02f, -5.376962901e-02f, -4.863741723e-02f, -1.080459227e-02f, +2.981027461e-02f, +4.472887513e-02f, +2.757745693e-02f, -4.450460187e-03f, -2.685895566e-02f, -2.674720226e-02f, -9.601411153e-03f, +8.781012224e-03f, +1.600492917e-02f, +1.086076945e-02f, +8.755149706e-04f, -5.734686152e-03f, -6.051557804e-03f, -2.554657032e-03f, +7.504288733e-04f, +1.817656823e-03f, +1.148123072e-03f, +2.015546685e-04f, -9.064906686e-06f, -2.884217760e-05f, -2.693952258e-05f, +2.211498118e-05f, +9.737769918e-05f, +1.209696434e-04f, +1.872963638e-05f, -1.822061507e-04f, -3.210097061e-04f, -2.115891334e-04f, +1.640848971e-04f, +5.572811128e-04f, +5.962422370e-04f, +1.121686012e-04f, -6.264617115e-04f, -1.035831615e-03f, -6.744386457e-04f, +3.207674749e-04f, +1.236204745e-03f, +1.304078768e-03f, +3.562485408e-04f, -9.577855825e-04f, -1.632127022e-03f, -1.107136239e-03f, +2.515719334e-04f, +1.419920346e-03f, +1.524861610e-03f, +5.288622618e-04f, -7.708833030e-04f, -1.404762002e-03f, -9.852612407e-04f, +5.641373053e-05f, +8.917212832e-04f, +9.687567770e-04f, +3.777973932e-04f, -3.305073988e-04f, -6.413284520e-04f, -4.440387867e-04f, -1.525114812e-05f, +2.838162517e-04f, +2.934846979e-04f, +1.097845518e-04f, -6.940020102e-05f, -1.245060156e-04f, -7.256349920e-05f, +1.264986970e-07f, +3.218755973e-05f, +2.271014949e-05f, /* 4,27 (48) */ -1.305980346e-04f, -5.082309539e-04f, -7.914993003e-04f, -4.783914202e-04f, +7.094496045e-04f, +2.337365159e-03f, +3.178148869e-03f, +1.868366177e-03f, -1.907776514e-03f, -6.510011921e-03f, -8.654767285e-03f, -5.275814740e-03f, +3.891069406e-03f, +1.475222413e-02f, +1.996778377e-02f, +1.296033103e-02f, -6.985676151e-03f, -3.168505052e-02f, -4.574119955e-02f, -3.322385297e-02f, +1.351483038e-02f, +8.763055561e-02f, +1.681909859e-01f, +2.279318995e-01f, +2.450284291e-01f, +2.130528937e-01f, +1.439661018e-01f, +6.257031134e-02f, -4.669140612e-03f, -4.070403955e-02f, -4.353877900e-02f, -2.429746489e-02f, +3.240526627e-04f, +1.667071582e-02f, +1.941311660e-02f, +1.158819432e-02f, +5.642308816e-04f, -7.021725906e-03f, -8.465987675e-03f, -5.163038390e-03f, -5.198159242e-04f, +2.561614635e-03f, +3.091406154e-03f, +1.843623593e-03f, +2.528300878e-04f, -6.674719860e-04f, -7.429153425e-04f, -3.798410033e-04f, +9.168948451e-06f, +1.274354164e-05f, +2.434178788e-06f, -2.299301259e-05f, -4.834013806e-05f, -4.676809063e-05f, +5.472731236e-07f, +8.113144611e-05f, +1.444164487e-04f, +1.257792813e-04f, -5.203509853e-06f, -2.024748039e-04f, -3.445441995e-04f, -2.955471640e-04f, -2.183892139e-06f, +4.327665825e-04f, +7.609428930e-04f, +7.012321084e-04f, +1.076524697e-04f, -9.028001885e-04f, -1.951184787e-03f, -2.550090443e-03f, -2.343018643e-03f, -1.303172126e-03f, +2.236206357e-04f, +1.665869356e-03f, +2.491578750e-03f, +2.452591617e-03f, +1.681024634e-03f, +5.945862371e-04f, -3.272670360e-04f, -7.698491488e-04f, -6.967612850e-04f, -3.085938074e-04f, +1.066406684e-04f, +3.342310618e-04f, +3.187096293e-04f, +1.463254020e-04f, -4.196148700e-05f, -1.422283575e-04f, -1.322867935e-04f, -5.744172148e-05f, +1.741551516e-05f, +5.142937682e-05f, +4.271015005e-05f, +1.487372814e-05f, -7.080070146e-06f, -1.277815672e-05f, -1.244298938e-04f, +4.836630525e-04f, +1.481143457e-03f, +1.712144172e-03f, -1.755319177e-04f, -3.919986419e-03f, -6.575175165e-03f, -4.162568867e-03f, +4.266652308e-03f, +1.365449713e-02f, +1.510292428e-02f, +3.297404824e-03f, -1.649071272e-02f, -2.933039902e-02f, -2.143544382e-02f, +6.624432406e-03f, +3.638186787e-02f, +4.347239575e-02f, +1.763309353e-02f, -2.587416048e-02f, -5.510491286e-02f, -4.575335912e-02f, -1.801528327e-03f, +4.546406964e-02f, +6.083935918e-02f, +3.271823609e-02f, -1.772017886e-02f, -5.324076675e-02f, -4.940830054e-02f, -1.220935428e-02f, +2.882501336e-02f, +4.478528886e-02f, +2.846917822e-02f, -3.481703410e-03f, -2.648115827e-02f, -2.707770966e-02f, -1.024273960e-02f, +8.336973437e-03f, +1.598967802e-02f, +1.114458570e-02f, +1.168999668e-03f, -5.624901600e-03f, -6.120958005e-03f, -2.679163048e-03f, +6.778653741e-04f, +1.817783322e-03f, +1.180310631e-03f, +2.242648180e-04f, -8.460514288e-06f, -2.836758865e-05f, -2.765734466e-05f, +1.990756350e-05f, +9.531218521e-05f, +1.219164262e-04f, +2.393493880e-05f, -1.757786675e-04f, -3.196921023e-04f, -2.196337826e-04f, +1.501841507e-04f, +5.485735572e-04f, +6.030844187e-04f, +1.337012165e-04f, -6.051182020e-04f, -1.033588332e-03f, -6.978229305e-04f, +2.862808627e-04f, +1.217396724e-03f, +1.318683292e-03f, +3.964960053e-04f, -9.214941434e-04f, -1.628518790e-03f, -1.140426844e-03f, +2.061045701e-04f, +1.396669752e-03f, +1.540613279e-03f, +5.700740732e-04f, -7.361705945e-04f, -1.401110338e-03f, -1.011752738e-03f, +2.273152976e-05f, +8.757732603e-04f, +9.785563028e-04f, +4.013603659e-04f, -3.125433452e-04f, -6.399462117e-04f, -4.557418356e-04f, -2.825187413e-05f, +2.787575706e-04f, +2.970897857e-04f, +1.164291964e-04f, -6.542647888e-05f, -1.247804426e-04f, -7.496484133e-05f, -1.690552013e-06f, +3.194173417e-05f, +2.333362236e-05f, /* 4,28 (48) */ -1.214290861e-04f, -4.954874122e-04f, -7.890651215e-04f, -5.013844328e-04f, +6.611094664e-04f, +2.290597068e-03f, +3.178696142e-03f, +1.949497623e-03f, -1.763360065e-03f, -6.384232639e-03f, -8.659970795e-03f, -5.478289544e-03f, +3.546525207e-03f, +1.445667697e-02f, +1.996559988e-02f, +1.339309761e-02f, -6.224733259e-03f, -3.098381841e-02f, -4.563354708e-02f, -3.412665315e-02f, +1.156364560e-02f, +8.508046517e-02f, +1.658479672e-01f, +2.266287274e-01f, +2.452520498e-01f, +2.147187630e-01f, +1.464576805e-01f, +6.502290296e-02f, -2.988115978e-03f, -4.010945331e-02f, -4.386604604e-02f, -2.506731404e-02f, -3.727086224e-04f, +1.636212202e-02f, +1.951975726e-02f, +1.192242538e-02f, +8.829405108e-04f, -6.875400504e-03f, -8.507949162e-03f, -5.305266748e-03f, -6.521027177e-04f, +2.504172913e-03f, +3.108821669e-03f, +1.895052970e-03f, +2.955402379e-04f, -6.525982578e-04f, -7.499954126e-04f, -3.926191600e-04f, +8.936712204e-06f, +1.280083156e-05f, +3.017351572e-06f, -2.207718797e-05f, -4.781004476e-05f, -4.747135652e-05f, -1.604718976e-06f, +7.853403820e-05f, +1.433742428e-04f, +1.280706340e-04f, +3.581872455e-07f, -1.963843605e-04f, -3.423967670e-04f, -3.008555334e-04f, -1.446878429e-05f, +4.192508715e-04f, +7.552642627e-04f, +7.110112536e-04f, +1.338758426e-04f, -8.681716366e-04f, -1.922766365e-03f, -2.542417848e-03f, -2.362967526e-03f, -1.345655982e-03f, +1.740164482e-04f, +1.627890458e-03f, +2.478547275e-03f, +2.466506952e-03f, +1.712499040e-03f, +6.283162183e-04f, -3.047517951e-04f, -7.643591248e-04f, -7.052670211e-04f, -3.225875851e-04f, +9.576076956e-05f, +3.309403096e-04f, +3.222659344e-04f, +1.526707137e-04f, -3.706460373e-05f, -1.408612929e-04f, -1.339214410e-04f, -6.009027664e-05f, +1.558348651e-05f, +5.109317649e-05f, +4.342263601e-05f, +1.575588796e-05f, -6.631829657e-06f, -1.282502326e-05f, -1.328904081e-04f, +4.552954639e-04f, +1.453486113e-03f, +1.732051735e-03f, -8.021973253e-05f, -3.798069993e-03f, -6.551240226e-03f, -4.338347535e-03f, +3.946960206e-03f, +1.343486335e-02f, +1.525310843e-02f, +3.845978381e-03f, -1.588762831e-02f, -2.919669781e-02f, -2.204056203e-02f, +5.590844074e-03f, +3.568404494e-02f, +4.375867662e-02f, +1.885049025e-02f, -2.455547718e-02f, -5.470841685e-02f, -4.667485326e-02f, -3.430047117e-03f, +4.432364280e-02f, +6.104546375e-02f, +3.411490584e-02f, -1.617956558e-02f, -5.267069267e-02f, -5.014447113e-02f, -1.361046461e-02f, +2.781326063e-02f, +4.480802039e-02f, +2.934495148e-02f, -2.503147107e-03f, -2.607979791e-02f, -2.739025301e-02f, -1.088268582e-02f, +7.881231602e-03f, +1.596142614e-02f, +1.142334327e-02f, +1.466089454e-03f, -5.508472404e-03f, -6.186384484e-03f, -2.803943490e-03f, +6.029005328e-04f, +1.816092770e-03f, +1.212252366e-03f, +2.475984404e-04f, -7.865645190e-06f, -2.787300974e-05f, -2.832538384e-05f, +1.773293279e-05f, +9.319952775e-05f, +1.227328237e-04f, +2.902816071e-05f, -1.693004253e-04f, -3.181220543e-04f, -2.273902694e-04f, +1.363244821e-04f, +5.395136800e-04f, +6.093752927e-04f, +1.549398357e-04f, -5.834614779e-04f, -1.030547109e-03f, -7.205197926e-04f, +2.517506783e-04f, +1.197725728e-03f, +1.332212982e-03f, +4.363215056e-04f, -8.845679552e-04f, -1.623659271e-03f, -1.172816986e-03f, +1.604735422e-04f, +1.372321662e-03f, +1.555199324e-03f, +6.109405869e-04f, -7.007793324e-04f, -1.396353923e-03f, -1.037577029e-03f, -1.115266394e-05f, +8.590336898e-04f, +9.876493535e-04f, +4.247930999e-04f, -2.941645902e-04f, -6.380287732e-04f, -4.671998064e-04f, -4.138913951e-05f, +2.733933896e-04f, +3.004914841e-04f, +1.230802996e-04f, -6.132039239e-05f, -1.249420826e-04f, -7.734590613e-05f, -3.552050772e-06f, +3.165178783e-05f, +2.394720634e-05f, /* 4,29 (48) */ -1.124923739e-04f, -4.826865807e-04f, -7.860477700e-04f, -5.234616208e-04f, +6.132994217e-04f, +2.243125712e-03f, +3.177091423e-03f, +2.028031661e-03f, -1.619985822e-03f, -6.256162005e-03f, -8.659612608e-03f, -5.674673905e-03f, +3.204128440e-03f, +1.415582144e-02f, +1.995113109e-02f, +1.381234848e-02f, -5.469468996e-03f, -3.027280715e-02f, -4.549967124e-02f, -3.499482479e-02f, +9.640879233e-03f, +8.253804732e-02f, +1.634849997e-01f, +2.252830714e-01f, +2.454260662e-01f, +2.163466535e-01f, +1.489362278e-01f, +6.748940991e-02f, -1.275616938e-03f, -3.948113709e-02f, -4.417079783e-02f, -2.583167317e-02f, -1.077975643e-03f, +1.603953443e-02f, +1.961551803e-02f, +1.225336569e-02f, +1.205206445e-03f, -6.722729790e-03f, -8.545013766e-03f, -5.446128040e-03f, -7.860241587e-04f, +2.444082636e-03f, +3.124405156e-03f, +1.946146147e-03f, +3.389628739e-04f, -6.368423699e-04f, -7.566272423e-04f, -4.054441832e-04f, +8.701086450e-06f, +1.284410222e-05f, +3.584095864e-06f, -2.116315483e-05f, -4.725396625e-05f, -4.812748421e-05f, -3.719755005e-06f, +7.592324930e-05f, +1.422510891e-04f, +1.302455672e-04f, +5.845531987e-06f, -1.902462398e-04f, -3.400594884e-04f, -3.059112374e-04f, -2.659656099e-05f, +4.056435160e-04f, +7.492033100e-04f, +7.202473230e-04f, +1.596609317e-04f, -8.336048491e-04f, -1.893912758e-03f, -2.533936609e-03f, -2.382065486e-03f, -1.387628879e-03f, +1.243453115e-04f, +1.589298153e-03f, +2.464640132e-03f, +2.479672483e-03f, +1.743645304e-03f, +6.622080333e-04f, -2.817498091e-04f, -7.583417174e-04f, -7.134490749e-04f, -3.365530480e-04f, +8.468789089e-05f, +3.273989107e-04f, +3.256603402e-04f, +1.589997563e-04f, -3.207647279e-05f, -1.393801050e-04f, -1.354891037e-04f, -6.273926195e-05f, +1.370871943e-05f, +5.071255403e-05f, +4.411553088e-05f, +1.664456387e-05f, -6.166404737e-06f, -1.285991751e-05f, -1.407560533e-04f, +4.274224541e-04f, +1.425160729e-03f, +1.749784668e-03f, +1.297979522e-05f, -3.675337169e-03f, -6.522212065e-03f, -4.507647960e-03f, +3.628838152e-03f, +1.320747308e-02f, +1.538943292e-02f, +4.385492061e-03f, -1.527825301e-02f, -2.904175797e-02f, -2.262402350e-02f, +4.560296965e-03f, +3.496352515e-02f, +4.401042729e-02f, +2.004821598e-02f, -2.322326420e-02f, -5.427209535e-02f, -4.755942122e-02f, -5.053706387e-03f, +4.315082581e-02f, +6.120593729e-02f, +3.548722750e-02f, -1.462436626e-02f, -5.205975209e-02f, -5.084525046e-02f, -1.500681854e-02f, +2.677568360e-02f, +4.479686773e-02f, +3.020398517e-02f, -1.515497754e-03f, -2.565500481e-02f, -2.768441760e-02f, -1.152071459e-02f, +7.414031795e-03f, +1.592003700e-02f, +1.169673666e-02f, +1.766580938e-03f, -5.385392104e-03f, -6.247704877e-03f, -2.928885573e-03f, +5.255546267e-04f, +1.812540719e-03f, +1.243904153e-03f, +2.715456467e-04f, -7.280845023e-06f, -2.735959138e-05f, -2.894409669e-05f, +1.559266332e-05f, +9.104278358e-05f, +1.234204187e-04f, +3.400642472e-05f, -1.627780462e-04f, -3.163044258e-04f, -2.348554835e-04f, +1.225172574e-04f, +5.301127742e-04f, +6.151147960e-04f, +1.758694164e-04f, -5.615116392e-04f, -1.026715774e-03f, -7.425149321e-04f, +2.172049221e-04f, +1.177211241e-03f, +1.344660851e-03f, +4.756944942e-04f, -8.470377077e-04f, -1.617554017e-03f, -1.204281511e-03f, +1.147150770e-04f, +1.346894540e-03f, +1.568606346e-03f, +6.514284292e-04f, -6.647357780e-04f, -1.390492424e-03f, -1.062710289e-03f, -4.521248951e-05f, +8.415113541e-04f, +9.960235479e-04f, +4.480752018e-04f, -2.753828356e-04f, -6.355725464e-04f, -4.784002737e-04f, -5.465316782e-05f, +2.677244663e-04f, +3.036838206e-04f, +1.297318172e-04f, -5.708357236e-05f, -1.249886400e-04f, -7.970380656e-05f, -5.456981773e-06f, +3.131693383e-05f, +2.454981878e-05f, /* 4,30 (48) */ -1.037912875e-04f, -4.698424785e-04f, -7.824636741e-04f, -5.446247756e-04f, +5.660454554e-04f, +2.194998227e-03f, +3.173371668e-03f, +2.103954910e-03f, -1.477734733e-03f, -6.125916438e-03f, -8.653767076e-03f, -5.864920145e-03f, +2.864068951e-03f, +1.384991020e-02f, +1.992453453e-02f, +1.421799200e-02f, -4.720265686e-03f, -2.955255983e-02f, -4.534001030e-02f, -3.582842964e-02f, +7.746966475e-03f, +8.000411071e-02f, +1.611029342e-01f, +2.238954425e-01f, +2.455504115e-01f, +2.179359516e-01f, +1.514008679e-01f, +6.996908239e-02f, +4.680283662e-04f, -3.881892906e-02f, -4.445254764e-02f, -2.659001489e-02f, -1.791424718e-03f, +1.570298138e-02f, +1.970020593e-02f, +1.258076460e-02f, +1.530866785e-03f, -6.563730034e-03f, -8.577090238e-03f, -5.585508145e-03f, -9.215132624e-04f, +2.381343374e-03f, +3.138113875e-03f, +1.996858701e-03f, +3.830784047e-04f, -6.201978060e-04f, -7.627936470e-04f, -4.183041008e-04f, +8.462405133e-06f, +1.287362466e-05f, +4.134251716e-06f, -2.025163384e-05f, -4.667280462e-05f, -4.873677159e-05f, -5.796882022e-06f, +7.330111985e-05f, +1.410489017e-04f, +1.323041793e-04f, +1.125585379e-05f, -1.840650204e-04f, -3.375361450e-04f, -3.107140920e-04f, -3.856160836e-05f, +3.919537410e-04f, +7.427680672e-04f, +7.289417700e-04f, +1.849999595e-04f, -7.991145529e-04f, -1.864638951e-03f, -2.524654162e-03f, -2.400307809e-03f, -1.429075397e-03f, +7.462633087e-05f, +1.550106255e-03f, +2.449859669e-03f, +2.492078858e-03f, +1.774447867e-03f, +6.962478502e-04f, -2.582671380e-04f, -7.517939123e-04f, -7.212987527e-04f, -3.504813501e-04f, +7.342665820e-05f, +3.236061130e-04f, +3.288886600e-04f, +1.653081477e-04f, -2.699924766e-05f, -1.377842419e-04f, -1.369877151e-04f, -6.538677752e-05f, +1.179191290e-05f, +5.028703496e-05f, +4.478791382e-05f, +1.753912827e-05f, -5.683852374e-06f, -1.288252765e-05f, -1.480368983e-04f, +4.000628628e-04f, +1.396216632e-03f, +1.765377331e-03f, +1.040225788e-04f, -3.551916750e-03f, -6.488205641e-03f, -4.670426006e-03f, +3.312533726e-03f, +1.297261759e-02f, +1.551195017e-02f, +4.915604835e-03f, -1.466313822e-02f, -2.886588855e-02f, -2.318553514e-02f, +3.533581191e-03f, +3.422101022e-02f, +4.422763222e-02f, +2.122542722e-02f, -2.187860335e-02f, -5.379640085e-02f, -4.840645892e-02f, -6.671260404e-03f, +4.194654430e-02f, +6.132065237e-02f, +3.683412204e-02f, -1.305575991e-02f, -5.140832366e-02f, -5.150998624e-02f, -1.639731096e-02f, +2.571297331e-02f, +4.475165524e-02f, +3.104549652e-02f, -5.194742057e-04f, -2.520692960e-02f, -2.795980043e-02f, -1.215628714e-02f, +6.935631522e-03f, +1.586538384e-02f, +1.196446112e-02f, +2.070264759e-03f, -5.255660287e-03f, -6.304788449e-03f, -3.053874213e-03f, +4.458508201e-04f, +1.807083737e-03f, +1.275221087e-03f, +2.960954655e-04f, -6.706631824e-06f, -2.682848005e-05f, -2.951398656e-05f, +1.348826031e-05f, +8.884499839e-05f, +1.239808950e-04f, +3.886700897e-05f, -1.562180990e-04f, -3.142442435e-04f, -2.420266134e-04f, +1.087736719e-04f, +5.203823168e-04f, +6.203033410e-04f, +1.964753024e-04f, -5.392888856e-04f, -1.022102766e-03f, -7.637947150e-04f, +1.826714690e-04f, +1.155873363e-03f, +1.356020827e-03f, +5.145848785e-04f, -8.089345225e-04f, -1.610209589e-03f, -1.234796034e-03f, +6.886550882e-05f, +1.320407745e-03f, +1.580821894e-03f, +6.915044642e-04f, -6.280668059e-04f, -1.383526417e-03f, -1.087129161e-03f, -7.942130382e-05f, +8.232157439e-04f, +1.003667029e-03f, +4.711862525e-04f, -2.562102288e-04f, -6.325743770e-04f, -4.893309108e-04f, -6.803395823e-05f, +2.617518459e-04f, +3.066609371e-04f, +1.363776150e-04f, -5.271780462e-05f, -1.249178960e-04f, -8.203562472e-05f, -7.404259204e-06f, +3.093642097e-05f, +2.514036432e-05f, /* 4,31 (48) */ -9.532888232e-05f, -4.569688538e-04f, -7.783294224e-04f, -5.648764094e-04f, +5.193726508e-04f, +2.146261456e-03f, +3.167574786e-03f, +2.177256030e-03f, -1.336685832e-03f, -5.993612259e-03f, -8.642511222e-03f, -6.048985165e-03f, +2.526532806e-03f, +1.353919611e-02f, +1.988597292e-02f, +1.460994574e-02f, -3.977497619e-03f, -2.882361806e-02f, -4.515501034e-02f, -3.662754419e-02f, +5.882327524e-03f, +7.747945655e-02f, +1.587026264e-01f, +2.224663671e-01f, +2.456250379e-01f, +2.194860579e-01f, +1.538507276e-01f, +7.246116125e-02f, +2.242476233e-03f, -3.812268121e-02f, -4.471081478e-02f, -2.734180880e-02f, -2.512723471e-03f, +1.535250003e-02f, +1.977363258e-02f, +1.290437072e-02f, +1.859755445e-03f, -6.398421886e-03f, -8.604089486e-03f, -5.723292387e-03f, -1.058500977e-03f, +2.315956597e-03f, +3.149905788e-03f, +2.047145736e-03f, +4.278663186e-04f, -6.026586777e-04f, -7.684774994e-04f, -4.311866284e-04f, +8.220998674e-06f, +1.288967773e-05f, +4.667676794e-06f, -1.934333100e-05f, -4.606746708e-05f, -4.929954776e-05f, -7.835189267e-06f, +7.066966975e-05f, +1.397696245e-04f, +1.342466470e-04f, +1.658656658e-05f, -1.778452548e-04f, -3.348305944e-04f, -3.152640733e-04f, -5.035847333e-05f, +3.781907203e-04f, +7.359666910e-04f, +7.370963161e-04f, +2.098854303e-04f, -7.647153423e-04f, -1.834960044e-03f, -2.514578272e-03f, -2.417690168e-03f, -1.469980364e-03f, +2.487863475e-05f, +1.510328867e-03f, +2.434208634e-03f, +2.503717032e-03f, +1.804891247e-03f, +7.304216719e-04f, -2.343101320e-04f, -7.447129475e-04f, -7.288074567e-04f, -3.643635712e-04f, +6.198186541e-05f, +3.195613163e-04f, +3.319467664e-04f, +1.715914665e-04f, -2.183516949e-05f, -1.360732244e-04f, -1.384152296e-04f, -6.803089721e-05f, +9.833808267e-06f, +4.981617239e-05f, +4.543886514e-05f, +1.843893728e-05f, -5.184246216e-06f, -1.289254766e-05f, -1.547435301e-04f, +3.732343827e-04f, +1.366702646e-03f, +1.778865592e-03f, +1.928675772e-04f, -3.427935855e-03f, -6.449338632e-03f, -4.826644105e-03f, +2.998289482e-03f, +1.273059098e-02f, +1.562072385e-02f, +5.435987152e-03f, -1.404283488e-02f, -2.866941325e-02f, -2.372482403e-02f, +2.511478425e-03f, +3.345721550e-02f, +4.441030368e-02f, +2.238130058e-02f, -2.052258252e-02f, -5.328181598e-02f, -4.921539345e-02f, -8.281469993e-03f, +4.071174827e-02f, +6.138951788e-02f, +3.815452979e-02f, -1.147493802e-02f, -5.071681919e-02f, -5.213805305e-02f, -1.778083738e-02f, +2.462584415e-02f, +4.467223393e-02f, +3.186871227e-02f, +4.841928232e-04f, -2.473574335e-02f, -2.821601066e-02f, -1.278886151e-02f, +6.446300611e-03f, +1.579734988e-02f, +1.222621297e-02f, +2.376925696e-03f, -5.119282672e-03f, -6.357506254e-03f, -3.178792109e-03f, +3.638151954e-04f, +1.799679478e-03f, +1.306157508e-03f, +3.212358298e-04f, -6.143495962e-06f, -2.628081681e-05f, -3.003560201e-05f, +1.142115956e-05f, +8.660920381e-05f, +1.244160341e-04f, +4.360734750e-05f, -1.496270931e-04f, -3.119466899e-04f, -2.489011455e-04f, +9.510474086e-05f, +5.103339566e-04f, +6.249418104e-04f, +2.167432336e-04f, -5.168134989e-04f, -1.016717124e-03f, -7.843461819e-04f, +1.481780446e-04f, +1.133732786e-03f, +1.366287754e-03f, +5.529630450e-04f, -7.702899258e-04f, -1.601633554e-03f, -1.264336964e-03f, +2.296124824e-05f, +1.292881518e-03f, +1.591834473e-03f, +7.311358218e-04f, -5.907998826e-04f, -1.375457392e-03f, -1.110810779e-03f, -1.137522031e-04f, +8.041570547e-04f, +1.010568477e-03f, +4.941058242e-04f, -2.366593558e-04f, -6.290315529e-04f, -4.999795024e-04f, -8.152129225e-05f, +2.554768633e-04f, +3.094170965e-04f, +1.430114735e-04f, -4.822503056e-05f, -1.247277122e-04f, -8.433841439e-05f, -9.392727151e-06f, +3.050953535e-05f, +2.571773609e-05f, /* 5, 0 (48) */ -9.712561017e-05f, +5.630052980e-04f, +1.206067011e-03f, +7.527819647e-04f, -1.206557913e-03f, -3.245991688e-03f, -2.728345499e-03f, +1.489426586e-03f, +6.622324221e-03f, +7.089903931e-03f, -2.805093114e-04f, -1.122619085e-02f, -1.522873798e-02f, -4.406023078e-03f, +1.648289776e-02f, +2.943133839e-02f, +1.647195998e-02f, -2.143009154e-02f, -5.654855430e-02f, -4.868148545e-02f, +2.497919491e-02f, +1.464018327e-01f, +2.604437981e-01f, +3.070623956e-01f, +2.604437981e-01f, +1.464018327e-01f, +2.497919491e-02f, -4.868148545e-02f, -5.654855430e-02f, -2.143009154e-02f, +1.647195998e-02f, +2.943133839e-02f, +1.648289776e-02f, -4.406023078e-03f, -1.522873798e-02f, -1.122619085e-02f, -2.805093114e-04f, +7.089903931e-03f, +6.622324221e-03f, +1.489426586e-03f, -2.728345499e-03f, -3.245991688e-03f, -1.206557913e-03f, +7.527819647e-04f, +1.206067011e-03f, +5.630052980e-04f, -9.712561017e-05f, -2.479949097e-04f, -1.282518843e-05f, -2.532528913e-05f, -9.046210131e-06f, +3.889954925e-05f, +7.491153978e-05f, +3.839122229e-05f, -7.498057630e-05f, -1.710018670e-04f, -1.194036389e-04f, +1.033564617e-04f, +3.283880359e-04f, +2.970847865e-04f, -8.290196051e-05f, -5.560876896e-04f, -6.462049060e-04f, -7.534959806e-05f, +8.584651506e-04f, +1.345120911e-03f, +6.450357199e-04f, -1.214091364e-03f, -3.234852854e-03f, -4.026043107e-03f, -2.803210385e-03f, -4.783988299e-05f, +2.734317328e-03f, +4.019323722e-03f, +3.284868198e-03f, +1.281996999e-03f, -6.015724119e-04f, -1.343618217e-03f, -8.852743607e-04f, +4.837949091e-05f, +6.385264040e-04f, +5.671719722e-04f, +9.852083963e-05f, -2.901112160e-04f, -3.324887018e-04f, -1.116913074e-04f, +1.146544985e-04f, +1.721770654e-04f, +7.895742338e-05f, -3.577215824e-05f, -7.511648637e-05f, -4.054173673e-05f, +7.922171439e-06f, +2.536792522e-05f, +1.339113908e-05f, -2.077502712e-06f, +5.939400487e-04f, -2.971519080e-04f, -2.102283883e-03f, -2.360885377e-03f, +1.198769271e-03f, +6.225411832e-03f, +5.885033052e-03f, -3.266913899e-03f, -1.360369760e-02f, -1.128997664e-02f, +6.959510654e-03f, +2.424665836e-02f, +1.796260386e-02f, -1.233743150e-02f, -3.690527276e-02f, -2.458115068e-02f, +1.881243249e-02f, +4.916511396e-02f, +2.951026661e-02f, -2.514630357e-02f, -5.812289420e-02f, -3.141212080e-02f, +2.978290985e-02f, +6.141247912e-02f, +2.978290985e-02f, -3.141212080e-02f, -5.812289420e-02f, -2.514630357e-02f, +2.951026661e-02f, +4.916511396e-02f, +1.881243249e-02f, -2.458115068e-02f, -3.690527276e-02f, -1.233743150e-02f, +1.796260386e-02f, +2.424665836e-02f, +6.959510654e-03f, -1.128997664e-02f, -1.360369760e-02f, -3.266913899e-03f, +5.885033052e-03f, +6.225411832e-03f, +1.198769271e-03f, -2.360885377e-03f, -2.102283883e-03f, -2.971519080e-04f, +5.939400487e-04f, +3.757269824e-04f, +5.619091256e-06f, +4.877898058e-05f, +5.001166561e-05f, -4.580540148e-05f, -1.616706026e-04f, -1.138544649e-04f, +1.507196706e-04f, +3.732587375e-04f, +1.958668817e-04f, -3.489190265e-04f, -6.864866184e-04f, -2.710473447e-04f, +6.463035710e-04f, +1.064299823e-03f, +3.066330440e-04f, -1.011454792e-03f, -1.432111537e-03f, -2.770896161e-04f, +1.375500241e-03f, +1.699573653e-03f, +1.785591216e-04f, -1.650720551e-03f, -1.793723894e-03f, -3.412141537e-05f, +1.761957904e-03f, +1.688158924e-03f, -1.142151055e-04f, -1.676686855e-03f, -1.413748698e-03f, +2.233016724e-04f, +1.418809249e-03f, +1.045542951e-03f, -2.671187145e-04f, -1.058968687e-03f, -6.727082646e-04f, +2.459798275e-04f, +6.862098894e-04f, +3.664436410e-04f, -1.825774125e-04f, -3.750921654e-04f, -1.603876878e-04f, +1.083483004e-04f, +1.635764684e-04f, +4.996526961e-05f, -4.852002281e-05f, -4.990376237e-05f, -6.801361925e-06f, +1.364337518e-05f, /* 5, 1 (48) */ -1.099507986e-04f, +5.376800088e-04f, +1.197020801e-03f, +7.916815140e-04f, -1.131646373e-03f, -3.207600465e-03f, -2.803326075e-03f, +1.318424719e-03f, +6.502920583e-03f, +7.193260392e-03f, +4.787872449e-05f, -1.092910607e-02f, -1.531163994e-02f, -4.962110768e-03f, +1.583669286e-02f, +2.935598879e-02f, +1.733042513e-02f, -2.008497063e-02f, -5.590351858e-02f, -4.989557681e-02f, +2.174434206e-02f, +1.423757896e-01f, +2.576405877e-01f, +3.070145557e-01f, +2.631781154e-01f, +1.504211564e-01f, +2.826406311e-02f, -4.739948845e-02f, -5.715012672e-02f, -2.277370976e-02f, +1.558668562e-02f, +2.947971788e-02f, +1.712142417e-02f, -3.838851106e-03f, -1.513021714e-02f, -1.151630207e-02f, -6.129980132e-04f, +6.978212623e-03f, +6.736978720e-03f, +1.661603651e-03f, -2.649388075e-03f, -3.281763846e-03f, -1.281674399e-03f, +7.122402280e-04f, +1.213989182e-03f, +5.883732232e-04f, -8.373447109e-05f, -2.500724124e-04f, -1.225783667e-05f, -2.525256859e-05f, -1.013486907e-05f, +3.724771090e-05f, +7.463086104e-05f, +4.092589172e-05f, -7.099083746e-05f, -1.696732221e-04f, -1.239676040e-04f, +9.503320589e-05f, +3.240227631e-04f, +3.036857170e-04f, -6.739588425e-05f, -5.446129107e-04f, -6.531856788e-04f, -1.019169912e-04f, +8.312152161e-04f, +1.345396299e-03f, +6.872785669e-04f, -1.146381061e-03f, -3.183583322e-03f, -4.030681563e-03f, -2.870514001e-03f, -1.434918397e-04f, +2.663871431e-03f, +4.010517398e-03f, +3.333588684e-03f, +1.350054072e-03f, -5.569062743e-04f, -1.340873323e-03f, -9.116132390e-04f, +2.102664783e-05f, +6.301490248e-04f, +5.778504940e-04f, +1.142387896e-04f, -2.827671959e-04f, -3.363172964e-04f, -1.200295256e-04f, +1.097224341e-04f, +1.731953418e-04f, +8.291697915e-05f, -3.307012695e-05f, -7.524412339e-05f, -4.217219376e-05f, +6.763373530e-06f, +2.537973484e-05f, +1.395485539e-05f, -1.755773309e-06f, +5.995591399e-04f, -2.483729274e-04f, -2.052272217e-03f, -2.406690779e-03f, +1.037098668e-03f, +6.111557367e-03f, +6.035752723e-03f, -2.893655162e-03f, -1.340783072e-02f, -1.163889566e-02f, +6.273024036e-03f, +2.397561102e-02f, +1.860890744e-02f, -1.127313167e-02f, -3.659863972e-02f, -2.559260547e-02f, +1.738032095e-02f, +4.888802435e-02f, +3.088576685e-02f, -2.344672992e-02f, -5.794433508e-02f, -3.306284135e-02f, +2.798918595e-02f, +6.137835771e-02f, +3.154486775e-02f, -2.972396188e-02f, -5.823710931e-02f, -2.682299043e-02f, +2.809651791e-02f, +4.938841564e-02f, +2.023124174e-02f, -2.353560773e-02f, -3.717239147e-02f, -1.339640018e-02f, +1.728989560e-02f, +2.449263819e-02f, +7.645720544e-03f, -1.092353299e-02f, -1.378627501e-02f, -3.642006065e-03f, +5.724645364e-03f, +6.333760132e-03f, +1.362345739e-03f, -2.310920108e-03f, -2.150803906e-03f, -3.470556704e-04f, +5.871386867e-04f, +3.893703576e-04f, +4.466594439e-06f, +4.761327908e-05f, +5.139596134e-05f, -4.167685723e-05f, -1.595939104e-04f, -1.191183543e-04f, +1.410228537e-04f, +3.709989590e-04f, +2.087436413e-04f, -3.311930698e-04f, -6.859527169e-04f, -2.955495186e-04f, +6.193841835e-04f, +1.068359147e-03f, +3.455152596e-04f, -9.764189553e-04f, -1.443705745e-03f, -3.303161911e-04f, +1.335830847e-03f, +1.720460254e-03f, +2.425559345e-04f, -1.611465173e-03f, -1.823431103e-03f, -1.023247407e-04f, +1.728168432e-03f, +1.723734218e-03f, -4.959784783e-05f, -1.651820586e-03f, -1.450526321e-03f, +1.690127679e-04f, +1.403805461e-03f, +1.078637439e-03f, -2.270146915e-04f, -1.052362092e-03f, -6.985620449e-04f, +2.203717640e-04f, +6.851140893e-04f, +3.837428672e-04f, -1.688864313e-04f, -3.764907428e-04f, -1.700139223e-04f, +1.026029163e-04f, +1.653056012e-04f, +5.415123641e-05f, -4.692069522e-05f, -5.098474714e-05f, -8.012240443e-06f, +1.355093038e-05f, /* 5, 2 (48) */ -1.222086353e-04f, +5.124274402e-04f, +1.186885931e-03f, +8.289292249e-04f, -1.057015512e-03f, -3.166674574e-03f, -2.874316912e-03f, +1.148751496e-03f, +6.378952979e-03f, +7.288293598e-03f, +3.719014876e-04f, -1.062542035e-02f, -1.537903583e-02f, -5.506723678e-03f, +1.518350718e-02f, +2.925407180e-02f, +1.816164035e-02f, -1.873957433e-02f, -5.521624002e-02f, -5.104195788e-02f, +1.856075873e-02f, +1.383451080e-01f, +2.547700737e-01f, +3.068710639e-01f, +2.658419868e-01f, +1.544316738e-01f, +3.159765179e-02f, -4.604943438e-02f, -5.770703299e-02f, -2.411458308e-02f, +1.467507238e-02f, +2.950074453e-02f, +1.775157319e-02f, -3.261000612e-03f, -1.501597835e-02f, -1.179906927e-02f, -9.493153096e-04f, +6.858183098e-03f, +6.846701154e-03f, +1.834798993e-03f, -2.566471096e-03f, -3.314833973e-03f, -1.356918523e-03f, +6.700680342e-04f, +1.220752556e-03f, +6.137529580e-04f, -6.977961571e-05f, -2.518281858e-04f, -1.168990126e-05f, -2.515052909e-05f, -1.118758209e-05f, +3.558827568e-05f, +7.427608600e-05f, +4.337485293e-05f, -6.699255526e-05f, -1.681947169e-04f, -1.283443613e-04f, +8.672964061e-05f, +3.194005173e-04f, +3.099122062e-04f, -5.201607505e-05f, -5.327630927e-04f, -6.594704999e-04f, -1.280622791e-04f, +8.035542069e-04f, +1.344460098e-03f, +7.282843910e-04f, -1.078909526e-03f, -3.131100912e-03f, -4.033246478e-03f, -2.936192693e-03f, -2.390603885e-04f, +2.591910390e-03f, +3.999619503e-03f, +3.380974317e-03f, +1.418218264e-03f, -5.110560018e-04f, -1.336872173e-03f, -9.374522451e-04f, -6.688377871e-06f, +6.210722581e-04f, +5.881082002e-04f, +1.300418210e-04f, -2.750553076e-04f, -3.398665344e-04f, -1.283627894e-04f, +1.046099163e-04f, +1.740533367e-04f, +8.685479693e-05f, -3.028666972e-05f, -7.529293449e-05f, -4.378881732e-05f, +5.570491509e-06f, +2.536000083e-05f, +1.451548917e-05f, -1.420241427e-06f, +6.040257344e-04f, -2.007596483e-04f, -2.000876256e-03f, -2.448367636e-03f, +8.775047576e-04f, +5.992439012e-03f, +6.176775576e-03f, -2.522656203e-03f, -1.319908707e-02f, -1.197008873e-02f, +5.587071319e-03f, +2.368006150e-02f, +1.922829162e-02f, -1.020477253e-02f, -3.625312446e-02f, -2.656902443e-02f, +1.593661521e-02f, +4.855770816e-02f, +3.222159770e-02f, -2.172626967e-02f, -5.770177914e-02f, -3.467430652e-02f, +2.616575485e-02f, +6.127603297e-02f, +3.327303618e-02f, -2.800022766e-02f, -5.828670715e-02f, -2.847481101e-02f, +2.664599159e-02f, +4.955742841e-02f, +2.163504720e-02f, -2.245697029e-02f, -3.739940617e-02f, -1.444876228e-02f, +1.659133356e-02f, +2.471300995e-02f, +8.330834633e-03f, -1.053979013e-02f, -1.395516144e-02f, -4.018496808e-03f, +5.554631442e-03f, +6.436363048e-03f, +1.527651340e-03f, -2.256768871e-03f, -2.197724601e-03f, -3.980404175e-04f, +5.791264463e-04f, +4.029212880e-04f, +3.344956610e-06f, +4.640953171e-05f, +5.267340081e-05f, -3.758471417e-05f, -1.573524280e-04f, -1.241372887e-04f, +1.313100623e-04f, +3.683217620e-04f, +2.211971578e-04f, -3.132897930e-04f, -6.846175414e-04f, -3.194624803e-04f, +5.919866399e-04f, +1.071151816e-03f, +3.837239896e-04f, -9.404822960e-04f, -1.453587369e-03f, -3.829219223e-04f, +1.294791911e-03f, +1.739328359e-03f, +3.061321530e-04f, -1.570440944e-03f, -1.851046690e-03f, -1.704095971e-04f, +1.692393190e-03f, +1.757402499e-03f, +1.521820702e-05f, -1.624997983e-03f, -1.485784786e-03f, +1.142841741e-04f, +1.387108823e-03f, +1.110693183e-03f, -1.863643975e-04f, -1.044477917e-03f, -7.238290583e-04f, +1.942488568e-04f, +6.831917134e-04f, +4.007926665e-04f, -1.548057940e-04f, -3.774464191e-04f, -1.795852487e-04f, +9.662174551e-05f, +1.668522344e-04f, +5.835793373e-05f, -4.521350195e-05f, -5.201905875e-05f, -9.250480050e-06f, +1.342746520e-05f, /* 5, 3 (48) */ -1.338985365e-04f, +4.872769112e-04f, +1.175698349e-03f, +8.645175005e-04f, -9.827394263e-04f, -3.123299721e-03f, -2.941309468e-03f, +9.805567796e-04f, +6.250608617e-03f, +7.375023239e-03f, +6.913020049e-04f, -1.031550814e-02f, -1.543105190e-02f, -6.039486771e-03f, +1.452403668e-02f, +2.912600952e-02f, +1.896519456e-02f, -1.739511424e-02f, -5.448795563e-02f, -5.212086740e-02f, +1.542965782e-02f, +1.343118615e-01f, +2.518338810e-01f, +3.066320035e-01f, +2.684338972e-01f, +1.584312933e-01f, +3.497862611e-02f, -4.463121611e-02f, -5.821808899e-02f, -2.545145526e-02f, +1.373762014e-02f, +2.949405615e-02f, +1.837264545e-02f, -2.672892411e-03f, -1.488593653e-02f, -1.207412457e-02f, -1.289181844e-03f, +6.729820308e-03f, +6.951311070e-03f, +2.008852329e-03f, -2.479616299e-03f, -3.345120643e-03f, -1.432211457e-03f, +6.262792169e-04f, +1.226323047e-03f, +6.391129589e-04f, -5.526412654e-05f, -2.532484272e-04f, -1.112218308e-05f, -2.501995817e-05f, -1.220383718e-05f, +3.392327012e-05f, +7.384890615e-05f, +4.573690588e-05f, -6.299002298e-05f, -1.665700430e-04f, -1.325320967e-04f, +7.845374324e-05f, +3.145290927e-04f, +3.157628388e-04f, -3.677571941e-05f, -5.205538694e-04f, -6.650617683e-04f, -1.537666687e-04f, +7.755117888e-04f, +1.342328824e-03f, +7.680377050e-04f, -1.011719708e-03f, -3.077447539e-03f, -4.033746599e-03f, -3.000212120e-03f, -3.344899904e-04f, +2.518472968e-03f, +3.986626796e-03f, +3.426985803e-03f, +1.486444859e-03f, -4.640413452e-04f, -1.331601571e-03f, -9.627619319e-04f, -3.474447002e-05f, +6.112962379e-04f, +5.979302622e-04f, +1.459156977e-04f, -2.669785256e-04f, -3.431293195e-04f, -1.366826693e-04f, +9.931963539e-05f, +1.747478114e-04f, +9.076638712e-05f, -2.742344173e-05f, -7.526146721e-05f, -4.538948299e-05f, +4.344255180e-06f, +2.530803227e-05f, +1.507217817e-05f, -1.071067014e-06f, +6.073706910e-04f, -1.543501166e-04f, -1.948202855e-03f, -2.485952350e-03f, +7.201523296e-04f, +5.868301724e-03f, +6.308085639e-03f, -2.154334441e-03f, -1.297788992e-02f, -1.228337852e-02f, +4.902453778e-03f, +2.336059902e-02f, +1.982027826e-02f, -9.133620712e-03f, -3.586940047e-02f, -2.750950673e-02f, +1.448302784e-02f, +4.817478624e-02f, +3.351638961e-02f, -1.998694131e-02f, -5.739564699e-02f, -3.624474747e-02f, +2.431470816e-02f, +6.110562337e-02f, +3.496542937e-02f, -2.624282516e-02f, -5.827148895e-02f, -3.009980900e-02f, +2.516020681e-02f, +4.967171258e-02f, +2.302215602e-02f, -2.134627711e-02f, -3.758577056e-02f, -1.549324019e-02f, +1.586750450e-02f, +2.490725881e-02f, +9.014026346e-03f, -1.013899746e-02f, -1.410996723e-02f, -4.395943227e-03f, +5.375046193e-03f, +6.532984794e-03f, +1.694503575e-03f, -2.198410938e-03f, -2.242938103e-03f, -4.500594762e-04f, +5.698759662e-04f, +4.163487532e-04f, +2.255182080e-06f, +4.517060431e-05f, +5.384462416e-05f, -3.353389702e-05f, -1.549523100e-04f, -1.289089615e-04f, +1.215939488e-04f, +3.652364931e-04f, +2.332175677e-04f, -2.952331641e-04f, -6.824913432e-04f, -3.427633103e-04f, +5.641477479e-04f, +1.072684480e-03f, +4.212189541e-04f, -9.036924671e-04f, -1.461753968e-03f, -4.348483358e-04f, +1.252436269e-03f, +1.756162112e-03f, +3.692150440e-04f, -1.527698035e-03f, -1.876540307e-03f, -2.382971639e-04f, +1.654672260e-03f, +1.789122022e-03f, +8.015822091e-05f, -1.596244569e-03f, -1.519477402e-03f, +5.917795491e-05f, +1.368730061e-03f, +1.141666093e-03f, -1.452122113e-04f, -1.035315582e-03f, -7.484738657e-04f, +1.676376893e-04f, +6.804362127e-04f, +4.175690386e-04f, -1.403480063e-04f, -3.779516098e-04f, -1.890884151e-04f, +9.040859955e-05f, +1.682107523e-04f, +6.257985583e-05f, -4.339842234e-05f, -5.300382693e-05f, -1.051475348e-05f, +1.327219129e-05f, /* 5, 4 (48) */ -1.450207196e-04f, +4.622569530e-04f, +1.163494512e-03f, +8.984407707e-04f, -9.088905201e-04f, -3.077562815e-03f, -3.004299491e-03f, +8.139867365e-04f, +6.118076521e-03f, +7.453476982e-03f, +1.005831098e-03f, -9.999745306e-03f, -1.546782762e-02f, -6.560040640e-03f, +1.385897491e-02f, +2.897224286e-02f, +1.974070635e-02f, -1.605278541e-02f, -5.371991792e-02f, -5.313258711e-02f, +1.235221028e-02f, +1.302781149e-01f, +2.488336689e-01f, +3.062975135e-01f, +2.709523702e-01f, +1.624179201e-01f, +3.840561191e-02f, -4.314477126e-02f, -5.868213034e-02f, -2.678305683e-02f, +1.277485821e-02f, +2.945931168e-02f, +1.898394169e-02f, -2.074962149e-03f, -1.474002084e-02f, -1.234110310e-02f, -1.632311164e-03f, +6.593137639e-03f, +7.050630706e-03f, +2.183600141e-03f, -2.388849912e-03f, -3.372544084e-03f, -1.507472925e-03f, +5.808897339e-04f, +1.230667302e-03f, +6.644209911e-04f, -4.019194836e-05f, -2.543194942e-04f, -1.055546563e-05f, -2.486166402e-05f, -1.318317613e-05f, +3.225469128e-05f, +7.335106579e-05f, +4.801096373e-05f, -5.898747491e-05f, -1.648029922e-04f, -1.365292130e-04f, +7.021336113e-05f, +3.094164336e-04f, +3.212365825e-04f, -2.168771654e-05f, -5.080010344e-04f, -6.699624954e-04f, -1.790119753e-04f, +7.471176191e-04f, +1.339019774e-03f, +8.065241007e-04f, -9.448540396e-04f, -3.022665690e-03f, -4.032192029e-03f, -3.062539108e-03f, -4.297252058e-04f, +2.443598970e-03f, +3.971537433e-03f, +3.471584587e-03f, +1.554688781e-03f, -4.158831038e-04f, -1.325049194e-03f, -9.875129711e-04f, -6.311996246e-05f, +6.008217499e-04f, +6.073020941e-04f, +1.618459476e-04f, -2.585402193e-04f, -3.460987533e-04f, -1.449806409e-04f, +9.385450125e-05f, +1.752756536e-04f, +9.464722144e-05f, -2.448221192e-05f, -7.514833557e-05f, -4.697204714e-05f, +3.085449097e-06f, +2.522316587e-05f, +1.562404701e-05f, -7.084341628e-07f, +6.096258730e-04f, -1.091795123e-04f, -1.894358231e-03f, -2.519486247e-03f, +5.652000196e-04f, +5.739392762e-03f, +6.429679587e-03f, -1.789097948e-03f, -1.274467235e-02f, -1.257861169e-02f, +4.219962434e-03f, +2.301783571e-02f, +2.038442601e-02f, -8.060936232e-03f, -3.544818151e-02f, -2.841319919e-02f, +1.302127387e-02f, +4.773993790e-02f, +3.476882588e-02f, -1.823077919e-02f, -5.702643195e-02f, -3.777244550e-02f, +2.243816785e-02f, +6.086732621e-02f, +3.662010163e-02f, -2.445370314e-02f, -5.819133072e-02f, -3.169605357e-02f, +2.364072940e-02f, +4.973089053e-02f, +2.439088608e-02f, -2.020461102e-02f, -3.773098278e-02f, -1.652855578e-02f, +1.511903063e-02f, +2.507489650e-02f, +9.694462559e-03f, -9.721428422e-03f, -1.425031524e-02f, -4.773894837e-03f, +5.185957778e-03f, +6.623393393e-03f, +1.862714327e-03f, -2.135831082e-03f, -2.286336525e-03f, -5.030633032e-04f, +5.593612128e-04f, +4.296209445e-04f, +1.198194503e-06f, +4.389935025e-05f, +5.491041683e-05f, -2.952917350e-05f, -1.523998194e-04f, -1.334314370e-04f, +1.118869784e-04f, +3.617528960e-04f, +2.447956822e-04f, -2.770470667e-04f, -6.795852465e-04f, -3.654300590e-04f, +5.359045371e-04f, +1.072965264e-03f, +4.579610073e-04f, -8.660978565e-04f, -1.468205161e-03f, -4.860380252e-04f, +1.208818120e-03f, +1.770948110e-03f, +4.317326185e-04f, -1.483288570e-03f, -1.899884136e-03f, -3.059088574e-04f, +1.615048053e-03f, +1.818853291e-03f, +1.451470514e-04f, -1.565588232e-03f, -1.551559172e-03f, +3.756894563e-06f, +1.348681970e-03f, +1.171513123e-03f, -1.036034182e-04f, -1.024876061e-03f, -7.724614896e-04f, +1.405657006e-04f, +6.768420109e-04f, +4.340480528e-04f, -1.255262157e-04f, -3.779992129e-04f, -1.985100593e-04f, +8.396766904e-05f, +1.693757007e-04f, +6.681136497e-05f, -4.147559932e-05f, -5.393619212e-05f, -1.180365334e-05f, +1.308435842e-05f, /* 5, 5 (48) */ -1.555761852e-04f, +4.373952890e-04f, +1.150311336e-03f, +9.306954619e-04f, -8.355394543e-04f, -3.029551851e-03f, -3.063286966e-03f, +6.491837443e-04f, +5.981547307e-03f, +7.523690343e-03f, +1.315247531e-03f, -9.678508723e-03f, -1.548951534e-02f, -7.068041675e-03f, +1.318901241e-02f, +2.879323088e-02f, +2.048782397e-02f, -1.471376564e-02f, -5.291339382e-02f, -5.407744115e-02f, +9.329544592e-03f, +1.262459229e-01f, +2.457711298e-01f, +3.058677883e-01f, +2.733959691e-01f, +1.663894575e-01f, +4.187719650e-02f, -4.159008247e-02f, -5.909801344e-02f, -2.810810602e-02f, +1.178734524e-02f, +2.939619172e-02f, +1.958476344e-02f, -1.467660055e-03f, -1.457817489e-02f, -1.259964332e-02f, -1.978409917e-03f, +6.448156998e-03f, +7.144485207e-03f, +2.358875794e-03f, -2.294202691e-03f, -3.397026296e-03f, -1.582621260e-03f, +5.339176868e-04f, +1.233752751e-03f, +6.896441570e-04f, -2.456790136e-05f, -2.550279284e-04f, -9.990514341e-06f, -2.467647407e-05f, -1.412519415e-05f, +3.058450494e-05f, +7.278435928e-05f, +5.019605233e-05f, -5.498908266e-05f, -1.628974510e-04f, -1.403343294e-04f, +6.201620534e-05f, +3.040706252e-04f, +3.263327849e-04f, -6.764669129e-06f, -4.951205242e-04f, -6.741762959e-04f, -2.037806323e-04f, +7.184013214e-04f, +1.334551005e-03f, +8.437302523e-04f, -8.783544077e-04f, -2.966798390e-03f, -4.028594211e-03f, -3.123141668e-03f, -5.247107342e-04f, +2.367329218e-03f, +3.954350967e-03f, +3.514732883e-03f, +1.622904620e-03f, -3.666031161e-04f, -1.317203614e-03f, -1.011676179e-03f, -9.179265262e-05f, +5.896502377e-04f, +6.162093691e-04f, +1.778178744e-04f, -2.497441538e-04f, -3.487681447e-04f, -1.532480920e-04f, +8.821764323e-05f, +1.756338820e-04f, +9.849273735e-05f, -2.146486268e-05f, -7.495222276e-05f, -4.853434916e-05f, +1.794912561e-06f, +2.510476735e-05f, +1.617020805e-05f, -3.325513140e-07f, +6.108240676e-04f, -6.528016204e-05f, -1.839447814e-03f, -2.549015421e-03f, +4.128002002e-04f, +5.605961325e-03f, +6.541566566e-03f, -1.427345052e-03f, -1.249987667e-02f, -1.285565876e-02f, +3.540377188e-03f, +2.265240565e-02f, +2.092033054e-02f, -6.987970968e-03f, -3.499022051e-02f, -2.927929705e-02f, +1.155306871e-02f, +4.725389987e-02f, +3.597764400e-02f, -1.645983108e-02f, -5.659469933e-02f, -3.925573407e-02f, +2.053828372e-02f, +6.056141735e-02f, +3.823514968e-02f, -2.263484985e-02f, -5.804618367e-02f, -3.326164180e-02f, +2.208917023e-02f, +4.973464743e-02f, +2.573956805e-02f, -1.903309789e-02f, -3.783458619e-02f, -1.755343184e-02f, +1.434656914e-02f, +2.521546220e-02f, +1.037130457e-02f, -9.287380369e-03f, -1.437584146e-02f, -5.151894049e-03f, +4.987447719e-03f, +6.707361062e-03f, +2.032090028e-03f, -2.069019717e-03f, -2.327812125e-03f, -5.569994953e-04f, +5.475575594e-04f, +4.427053029e-04f, +1.748371843e-07f, +4.259860619e-05f, +5.587170545e-05f, -2.557515028e-05f, -1.497013158e-04f, -1.377031470e-04f, +1.022014149e-04f, +3.578810928e-04f, +2.559229908e-04f, -2.587552704e-04f, -6.759112251e-04f, -3.874417647e-04f, +5.072942109e-04f, +1.072003745e-03f, +4.939121784e-04f, -8.277475240e-04f, -1.472942613e-03f, -5.364347167e-04f, +1.163992963e-03f, +1.783675417e-03f, +4.936137165e-04f, -1.437266567e-03f, -1.921052916e-03f, -3.731664260e-04f, +1.573565251e-03f, +1.846559109e-03f, +2.101093419e-04f, -1.533059196e-03f, -1.581986859e-03f, -5.191557569e-05f, +1.326979411e-03f, +1.200192326e-03f, -6.158416111e-05f, -1.013161888e-03f, -7.957574627e-04f, +1.130611588e-04f, +6.724045223e-04f, +4.502058804e-04f, -1.103542023e-04f, -3.775826245e-04f, -2.078367251e-04f, +7.730352398e-05f, +1.703417977e-04f, +7.104669728e-05f, -3.944534245e-05f, -5.481331037e-05f, -1.311569267e-05f, +1.286325678e-05f, /* 5, 6 (48) */ -1.655666996e-04f, +4.127188149e-04f, +1.136186142e-03f, +9.612799669e-04f, -7.627550950e-04f, -2.979355799e-03f, -3.118276048e-03f, +4.862862933e-04f, +5.841212978e-03f, +7.585706549e-03f, +1.619318156e-03f, -9.352175938e-03f, -1.549628001e-02f, -7.563162199e-03f, +1.251483612e-02f, +2.858945025e-02f, +2.120622529e-02f, -1.337921463e-02f, -5.206966357e-02f, -5.495579556e-02f, +6.362746202e-03f, +1.222173287e-01f, +2.426479881e-01f, +3.053430776e-01f, +2.757632984e-01f, +1.703438085e-01f, +4.539192938e-02f, -3.996717785e-02f, -5.946461656e-02f, -2.942530964e-02f, +1.077566906e-02f, +2.930439907e-02f, +2.017441367e-02f, -8.514506861e-04f, -1.440035701e-02f, -1.284938747e-02f, -2.327178061e-03f, +6.294908906e-03f, +7.232702850e-03f, +2.534509676e-03f, -2.195709953e-03f, -3.418491159e-03f, -1.657573483e-03f, +4.853833376e-04f, +1.235547664e-03f, +7.147489243e-04f, -8.397693308e-06f, -2.553604797e-04f, -9.428075830e-06f, -2.446523357e-05f, -1.502953948e-05f, +2.891464378e-05f, +7.215062819e-05f, +5.229130969e-05f, -5.099895153e-05f, -1.608573953e-04f, -1.439462797e-04f, +5.386984442e-05f, +2.984998835e-04f, +3.310511696e-04f, +7.981125454e-06f, -4.819284022e-04f, -6.777073783e-04f, -2.280557008e-04f, +6.893924609e-04f, +1.328941313e-03f, +8.796439193e-04f, -8.122621241e-04f, -2.909889168e-03f, -4.022965919e-03f, -3.181989019e-03f, -6.193914536e-04f, +2.289705519e-03f, +3.935068360e-03f, +3.556393705e-03f, +1.691046668e-03f, -3.162242503e-04f, -1.308054313e-03f, -1.035222544e-03f, -1.207398156e-04f, +5.777838078e-04f, +6.246380358e-04f, +1.938165692e-04f, -2.405944913e-04f, -3.511310192e-04f, -1.614763310e-04f, +8.241240968e-05f, +1.758196513e-04f, +1.022983425e-04f, -1.837338947e-05f, -7.467188368e-05f, -5.007421371e-05f, +4.735395420e-07f, +2.495223275e-05f, +1.670976246e-05f, +5.634856882e-08f, +6.109989047e-04f, -2.268155584e-05f, -1.783576109e-03f, -2.574590571e-03f, +2.630988845e-04f, +5.468258178e-03f, +6.643767981e-03f, -1.069463959e-03f, -1.224395368e-02f, -1.311441403e-02f, +2.864465963e-03f, +2.226496388e-02f, +2.142762475e-02f, -5.915967223e-03f, -3.449630833e-02f, -3.010704457e-02f, +1.008012610e-02f, +4.671746516e-02f, +3.714163696e-02f, -1.467615567e-02f, -5.610108561e-02f, -4.069300064e-02f, +1.861723080e-02f, +6.018825092e-02f, +3.980871493e-02f, -2.078829074e-02f, -5.783607433e-02f, -3.479470099e-02f, +2.050718337e-02f, +4.968273185e-02f, +2.706654746e-02f, -1.783290557e-02f, -3.789617035e-02f, -1.856659372e-02f, +1.355081168e-02f, +2.532852336e-02f, +1.104370909e-02f, -8.837174489e-03f, -1.448619566e-02f, -5.529476674e-03f, +4.779610994e-03f, +6.784664586e-03f, +2.202431825e-03f, -1.997973020e-03f, -2.367257467e-03f, -6.118128057e-04f, +5.344418668e-04f, +4.555685597e-04f, -8.141264825e-07f, +4.127118779e-05f, +5.672955354e-05f, -2.167626924e-05f, -1.468632456e-04f, -1.417228871e-04f, +9.254930693e-05f, +3.536315659e-04f, +2.665916643e-04f, -2.403814012e-04f, -6.714820789e-04f, -4.087784712e-04f, +4.783540991e-04f, +1.069810928e-03f, +5.290357102e-04f, -7.886911375e-04f, -1.475970030e-03f, -5.859833326e-04f, +1.118017518e-03f, +1.794335564e-03f, +5.547880913e-04f, -1.389687861e-03f, -1.940023976e-03f, -4.399920438e-04f, +1.530270760e-03f, +1.872204622e-03f, +2.749696122e-04f, -1.498689992e-03f, -1.610719037e-03f, -1.077754521e-04f, +1.303639304e-03f, +1.227662917e-03f, -1.920138852e-05f, -1.000177170e-03f, -8.183278745e-04f, +8.515313225e-05f, +6.671201672e-04f, +4.660188261e-04f, -9.484636779e-05f, -3.766957546e-04f, -2.170548800e-04f, +7.042111331e-05f, +1.711039439e-04f, +7.527996901e-05f, -3.730813087e-05f, -5.563235826e-05f, -1.444930562e-05f, +1.260821934e-05f, /* 5, 7 (48) */ -1.749947754e-04f, +3.882535813e-04f, +1.121156602e-03f, +9.901946107e-04f, -6.906044669e-04f, -2.927064489e-03f, -3.169275000e-03f, +3.254288980e-04f, +5.697266698e-03f, +7.639576393e-03f, +1.917818040e-03f, -9.021124769e-03f, -1.548829888e-02f, -8.045090601e-03f, +1.183712874e-02f, +2.836139455e-02f, +2.189561775e-02f, -1.205027332e-02f, -5.119001965e-02f, -5.576805768e-02f, +3.452857034e-03f, +1.181943628e-01f, +2.394659991e-01f, +3.047236861e-01f, +2.780530039e-01f, +1.742788769e-01f, +4.894832309e-02f, -3.827613119e-02f, -5.978084081e-02f, -3.073336395e-02f, +9.740446513e-03f, +2.918365925e-02f, +2.075219748e-02f, -2.268126503e-04f, -1.420654044e-02f, -1.308998196e-02f, -2.678309081e-03f, +6.133432575e-03f, +7.315115260e-03f, +2.710329328e-03f, -2.093411611e-03f, -3.436864548e-03f, -1.732245367e-03f, +4.353091239e-04f, +1.236021203e-03f, +7.397011571e-04f, +8.312069153e-06f, -2.553041311e-04f, -8.868877284e-06f, -2.422880418e-05f, -1.589591286e-05f, +2.724700567e-05f, +7.145175848e-05f, +5.429598519e-05f, -4.702111702e-05f, -1.586868851e-04f, -1.473641109e-04f, +4.578169855e-05f, +2.927125456e-04f, +3.353918321e-04f, +2.253768358e-05f, -4.684408418e-04f, -6.805605342e-04f, -2.518208778e-04f, +6.601205199e-04f, +1.322210214e-03f, +9.142539476e-04f, -7.466178985e-04f, -2.851982022e-03f, -4.015321239e-03f, -3.239051608e-03f, -7.137124599e-04f, +2.210770639e-03f, +3.913691982e-03f, +3.596530898e-03f, +1.759068952e-03f, -2.647703935e-04f, -1.297591698e-03f, -1.058123249e-03f, -1.499382191e-04f, +5.652252355e-04f, +6.325743348e-04f, +2.098269225e-04f, -2.310957910e-04f, -3.531811281e-04f, -1.696565939e-04f, +7.644236730e-05f, +1.758302573e-04f, +1.060594193e-04f, -1.520990028e-05f, -7.430614754e-05f, -5.158945309e-05f, -8.777214654e-07f, +2.476498981e-05f, +1.724180117e-05f, +4.580078570e-07f, +6.101847783e-04f, +1.858963195e-05f, -1.726846555e-03f, -2.596266840e-03f, +1.162356389e-04f, +5.326535291e-03f, +6.736317288e-03f, -7.158323930e-04f, -1.197736201e-02f, -1.335479543e-02f, +2.192983884e-03f, +2.185618541e-02f, +2.190597885e-02f, -4.846156295e-03f, -3.396727262e-02f, -3.089573571e-02f, +8.604156065e-03f, +4.613148183e-02f, +3.825965448e-02f, -1.288182010e-02f, -5.554629752e-02f, -4.208268850e-02f, +1.667720682e-02f, +5.974825888e-02f, +4.133898570e-02f, -1.891608611e-02f, -5.756110472e-02f, -3.629339099e-02f, +1.889646434e-02f, +4.957495640e-02f, +2.837018677e-02f, -1.660524265e-02f, -3.791537174e-02f, -1.956677089e-02f, +1.273248380e-02f, +2.541367649e-02f, +1.171082926e-02f, -8.371155662e-03f, -1.458104203e-02f, -5.906172429e-03f, +4.562556114e-03f, +6.855085700e-03f, +2.373535769e-03f, -1.922693051e-03f, -2.404565598e-03f, -6.674451639e-04f, +5.199925611e-04f, +4.681767790e-04f, -1.768012448e-06f, +3.991988566e-05f, +5.748515713e-05f, -1.783680397e-05f, -1.438921311e-04f, -1.454898128e-04f, +8.294247518e-05f, +3.490151391e-04f, +2.767945562e-04f, -2.219489135e-04f, -6.663114089e-04f, -4.294212432e-04f, +4.491216100e-04f, +1.066399226e-03f, +5.632960958e-04f, -7.489789079e-04f, -1.477293135e-03f, -6.346300523e-04f, +1.070949660e-03f, +1.802922556e-03f, +6.151864918e-04f, -1.340610040e-03f, -1.956777258e-03f, -5.063084046e-04f, +1.485213656e-03f, +1.895757366e-03f, +3.396523490e-04f, -1.462515425e-03f, -1.637716154e-03f, -1.637582340e-04f, +1.278680614e-03f, +1.253885324e-03f, +2.349719803e-05f, -9.859275928e-04f, -8.401394188e-04f, +5.687146046e-05f, +6.609863865e-04f, +4.814633604e-04f, -7.901772440e-05f, -3.753330419e-04f, -2.261509316e-04f, +6.332576399e-05f, +1.716572328e-04f, +7.950518296e-05f, -3.506461595e-05f, -5.639053797e-05f, -1.580284829e-05f, +1.231862419e-05f, /* 5, 8 (48) */ -1.838636527e-04f, +3.640247771e-04f, +1.105260690e-03f, +1.017441616e-03f, -6.191527084e-04f, -2.872768504e-03f, -3.216296117e-03f, +1.667420129e-04f, +5.549902587e-03f, +7.685358092e-03f, +2.210530586e-03f, -8.685732937e-03f, -1.546576120e-02f, -8.513531443e-03f, +1.115656820e-02f, +2.810957367e-02f, +2.255573827e-02f, -1.072806311e-02f, -5.027576570e-02f, -5.651467558e-02f, +6.008750117e-04f, +1.141790415e-01f, +2.362269475e-01f, +3.040099737e-01f, +2.802637745e-01f, +1.781925688e-01f, +5.254485398e-02f, -3.651706223e-02f, -6.004561120e-02f, -3.203095565e-02f, +8.682323264e-03f, +2.903372103e-02f, +2.131742272e-02f, +4.057616846e-04f, -1.399671352e-02f, -1.332107775e-02f, -3.031490209e-03f, +5.963775981e-03f, +7.391557627e-03f, +2.886159585e-03f, -1.987352192e-03f, -3.452074449e-03f, -1.806551514e-03f, +3.837196708e-04f, +1.235143482e-03f, +7.644661469e-04f, +2.555387032e-05f, -2.548461232e-04f, -8.313625809e-06f, -2.396806258e-05f, -1.672406700e-05f, +2.558345201e-05f, +7.068967762e-05f, +5.620943877e-05f, -4.305954150e-05f, -1.563900589e-04f, -1.505870813e-04f, +3.775903377e-05f, +2.867170601e-04f, +3.393552354e-04f, +3.689334343e-05f, -4.546741100e-04f, -6.827411283e-04f, -2.750605043e-04f, +6.306148736e-04f, +1.314377916e-03f, +9.475502706e-04f, -6.814618109e-04f, -2.793121386e-03f, -4.005675560e-03f, -3.294301130e-03f, -8.076191064e-04f, +2.130568273e-03f, +3.890225612e-03f, +3.635109170e-03f, +1.826925267e-03f, -2.122664403e-04f, -1.285807117e-03f, -1.080349702e-03f, -1.793641383e-04f, +5.519779693e-04f, +6.400048148e-04f, +2.258336362e-04f, -2.212530097e-04f, -3.549124572e-04f, -1.777800534e-04f, +7.031130021e-05f, +1.756631414e-04f, +1.097713294e-04f, -1.197661495e-05f, -7.385392033e-05f, -5.307786957e-05f, -2.257867657e-06f, +2.454249926e-05f, +1.776540592e-05f, +8.721441469e-07f, +6.084167658e-04f, +5.850951761e-05f, -1.669361398e-03f, -2.614103644e-03f, -2.765649223e-05f, +5.181045478e-03f, +6.819259763e-03f, -3.668172540e-04f, -1.170056746e-02f, -1.357674434e-02f, +1.526672475e-03f, +2.142676417e-02f, +2.235510046e-02f, -3.779757068e-03f, -3.340397652e-02f, -3.164471462e-02f, +7.126862931e-03f, +4.549685177e-02f, +3.933060414e-02f, -1.107889755e-02f, -5.493111103e-02f, -4.342329854e-02f, +1.472042957e-02f, +5.924195048e-02f, +4.282419935e-02f, -1.702032875e-02f, -5.722145237e-02f, -3.775590641e-02f, +1.725874818e-02f, +4.941119817e-02f, +2.964886738e-02f, -1.535135733e-02f, -3.789187454e-02f, -2.055269849e-02f, +1.189234439e-02f, +2.547054795e-02f, +1.237181565e-02f, -7.889692302e-03f, -1.466005975e-02f, -6.281505470e-03f, +4.336405182e-03f, +6.918411464e-03f, +2.545193002e-03f, -1.843187868e-03f, -2.439630214e-03f, -7.238357019e-04f, +5.041897128e-04f, +4.804954032e-04f, -2.686215319e-06f, +3.854746139e-05f, +5.813984021e-05f, -1.406085667e-05f, -1.407945597e-04f, -1.490034349e-04f, +7.339249953e-05f, +3.440429587e-04f, +2.865252041e-04f, -2.034810611e-04f, -6.604135915e-04f, -4.493521809e-04f, +4.196341833e-04f, +1.061782430e-03f, +5.966591145e-04f, -7.086615254e-04f, -1.476919655e-03f, -6.823223727e-04f, +1.022848338e-03f, +1.809432872e-03f, +6.747407438e-04f, -1.290092373e-03f, -1.971295339e-03f, -5.720388143e-04f, +1.438445122e-03f, +1.917187310e-03f, +4.040820973e-04f, -1.424572536e-03f, -1.662940582e-03f, -2.197990000e-04f, +1.252124341e-03f, +1.278821250e-03f, +6.646319794e-05f, -9.704204222e-04f, -8.611594400e-04f, +2.824672336e-05f, +6.540016554e-04f, +4.965161516e-04f, -6.288388262e-05f, -3.734894680e-04f, -2.351112459e-04f, +5.602317951e-05f, +1.719969615e-04f, +8.371623530e-05f, -3.271562375e-05f, -5.708508235e-05f, -1.717459974e-05f, +1.199389677e-05f, /* 5, 9 (48) */ -1.921772785e-04f, +3.400567146e-04f, +1.088536623e-03f, +1.043025068e-03f, -5.484630308e-04f, -2.816559065e-03f, -3.259355658e-03f, +1.035195406e-05f, +5.399315506e-03f, +7.723117125e-03f, +2.497247646e-03f, -8.346377701e-03f, -1.542886786e-02f, -8.968205553e-03f, +1.047382708e-02f, +2.783451316e-02f, +2.318635314e-02f, -9.413685192e-03f, -4.932821543e-02f, -5.719613739e-02f, -2.192246374e-03f, +1.101733660e-01f, +2.329326463e-01f, +3.032023546e-01f, +2.823943428e-01f, +1.820827945e-01f, +5.617996315e-02f, -3.469013697e-02f, -6.025787764e-02f, -3.331676276e-02f, +7.601973562e-03f, +2.885435689e-02f, +2.186940069e-02f, +1.045766499e-03f, -1.377087989e-02f, -1.354233076e-02f, -3.386402666e-03f, +5.785995928e-03f, +7.461868927e-03f, +3.061822726e-03f, -1.877580862e-03f, -3.464051064e-03f, -1.880405434e-03f, +3.306418012e-04f, +1.232885614e-03f, +7.890086462e-04f, +4.331927624e-05f, -2.539739791e-04f, -7.763007857e-06f, -2.368389901e-05f, -1.751380594e-05f, +2.392580611e-05f, +6.986635178e-05f, +5.803114002e-05f, -3.911811091e-05f, -1.539711284e-04f, -1.536146589e-04f, +2.980895653e-05f, +2.805219773e-04f, +3.429422056e-04f, +5.103677261e-05f, -4.406445511e-04f, -6.842550870e-04f, -2.977595724e-04f, +6.009047662e-04f, +1.305465301e-03f, +9.795239089e-04f, -6.168332849e-04f, -2.733352090e-03f, -3.994045556e-03f, -3.347710544e-03f, -9.010570422e-04f, +2.049143015e-03f, +3.864674442e-03f, +3.672094116e-03f, +1.894569207e-03f, -1.587382800e-04f, -1.272692875e-03f, -1.101873560e-03f, -2.089933721e-04f, +5.380461344e-04f, +6.469163482e-04f, +2.418212370e-04f, -2.110715010e-04f, -3.563192359e-04f, -1.858378263e-04f, +6.402320883e-05f, +1.753158955e-04f, +1.134294190e-04f, -8.675864377e-06f, -7.331418729e-05f, -5.453725787e-05f, -3.665842204e-06f, +2.428425610e-05f, +1.827965033e-05f, +1.298450182e-06f, +6.057305505e-04f, +9.705697900e-05f, -1.611221558e-03f, -2.628164501e-03f, -1.684510519e-04f, +5.032042043e-03f, +6.892652262e-03f, -2.277429524e-05f, -1.141404225e-02f, -1.378022540e-02f, +8.662588835e-04f, +2.097741199e-02f, +2.277473465e-02f, -2.717974638e-03f, -3.280731741e-02f, -3.235337614e-02f, +5.649943275e-03f, +4.481452940e-02f, +4.035345248e-02f, -9.269464674e-03f, -5.425637028e-02f, -4.471339091e-02f, +1.274913423e-02f, +5.866991166e-02f, +4.426264447e-02f, -1.510314144e-02f, -5.681737027e-02f, -3.918047895e-02f, +1.559580760e-02f, +4.919139917e-02f, +3.090099172e-02f, -1.407253608e-02f, -3.782541135e-02f, -2.152311891e-02f, +1.103118495e-02f, +2.549879468e-02f, +1.302581730e-02f, -7.393176150e-03f, -1.472294363e-02f, -6.654994938e-03f, +4.101293936e-03f, +6.974434643e-03f, +2.717189964e-03f, -1.759471632e-03f, -2.472345838e-03f, -7.809207842e-04f, +4.870151131e-04f, +4.924893000e-04f, -3.568207542e-06f, +3.715664369e-05f, +5.869505005e-05f, -1.035235536e-05f, -1.375771734e-04f, -1.522636143e-04f, +6.391070698e-05f, +3.387264748e-04f, +2.957778293e-04f, -1.850008703e-04f, -6.538037531e-04f, -4.685544326e-04f, +3.899292429e-04f, +1.055975683e-03f, +6.290918642e-04f, -6.677900939e-04f, -1.474859304e-03f, -7.290091656e-04f, +9.737735056e-04f, +1.813865457e-03f, +7.333838297e-04f, -1.238195732e-03f, -1.983563450e-03f, -6.371072837e-04f, +1.390018391e-03f, +1.936466895e-03f, +4.681835516e-04f, -1.384900566e-03f, -1.686356674e-03f, -2.758324854e-04f, +1.223993503e-03f, +1.302433720e-03f, +1.096475668e-04f, -9.536645096e-04f, -8.813559796e-04f, -6.897906872e-07f, +6.461654956e-04f, +5.111540984e-04f, -4.646103780e-05f, -3.711605712e-04f, -2.439221649e-04f, +4.851943780e-05f, +1.721186407e-04f, +8.790692255e-05f, -3.026215731e-05f, -5.771326009e-05f, -1.856276310e-05f, +1.163351217e-05f, /* 5,10 (48) */ -1.999402864e-04f, +3.163728156e-04f, +1.071022817e-03f, +1.066950874e-03f, -4.785966790e-04f, -2.758527925e-03f, -3.298473769e-03f, -1.436191744e-04f, +5.245700847e-03f, +7.752926082e-03f, +2.777769623e-03f, -8.003435496e-03f, -1.537783108e-02f, -9.408850104e-03f, +9.789571990e-03f, +2.753675359e-02f, +2.378725791e-02f, -8.108219891e-03f, -4.834869152e-02f, -5.781297067e-02f, -4.925598463e-03f, +1.061793204e-01f, +2.295849358e-01f, +3.023012975e-01f, +2.844434858e-01f, +1.859474689e-01f, +5.985205727e-02f, -3.279556776e-02f, -6.041661592e-02f, -3.458945564e-02f, +6.500100002e-03f, +2.864536352e-02f, +2.240744682e-02f, +1.692682847e-03f, -1.352905865e-02f, -1.375340227e-02f, -3.742721902e-03f, +5.600158101e-03f, +7.525892136e-03f, +3.237138622e-03f, -1.764151443e-03f, -3.472726928e-03f, -1.953719622e-03f, +2.761045433e-04f, +1.229219772e-03f, +8.132929023e-04f, +6.159892657e-05f, -2.526755289e-04f, -7.217688677e-06f, -2.337721593e-05f, -1.826498444e-05f, +2.227585175e-05f, +6.898378297e-05f, +5.976066708e-05f, -3.520063170e-05f, -1.514343731e-04f, -1.564465189e-04f, +2.193840843e-05f, +2.741359392e-04f, +3.461539264e-04f, +6.495697539e-05f, -4.263685705e-04f, -6.851088870e-04f, -3.199037319e-04f, +5.710192872e-04f, +1.295493904e-03f, +1.010166969e-03f, -5.527710620e-04f, -2.672719330e-03f, -3.980449169e-03f, -3.399254090e-03f, -9.939722517e-04f, +1.966540324e-03f, +3.837045076e-03f, +3.707452254e-03f, +1.961954204e-03f, -1.042127838e-04f, -1.258242246e-03f, -1.122666753e-03f, -2.388012594e-04f, +5.234345368e-04f, +6.532961475e-04f, +2.577740890e-04f, -2.005570148e-04f, -3.573959454e-04f, -1.938209822e-04f, +5.758230847e-05f, +1.747862663e-04f, +1.170290228e-04f, -5.310089543e-06f, -7.268601529e-05f, -5.596540759e-05f, -5.100534608e-06f, +2.398979095e-05f, +1.878360102e-05f, +1.736593812e-06f, +6.021623429e-04f, +1.342136227e-04f, -1.552526508e-03f, -2.638516856e-03f, -3.060282253e-04f, +4.879778429e-03f, +6.956562969e-03f, +3.159521796e-04f, -1.111826442e-02f, -1.396522627e-02f, +2.124551303e-04f, +2.050885756e-02f, +2.316466389e-02f, -1.661998956e-03f, -3.217822554e-02f, -3.302116624e-02f, +4.175083971e-03f, +4.408552023e-02f, +4.132722598e-02f, -7.455599217e-03f, -5.352298645e-02f, -4.595158665e-02f, +1.076557078e-02f, +5.803280438e-02f, +4.565266287e-02f, -1.316667454e-02f, -5.634918672e-02f, -4.056537951e-02f, +1.390945093e-02f, +4.891556668e-02f, +3.212498523e-02f, -1.277010236e-02f, -3.771576378e-02f, -2.247678342e-02f, +1.014982897e-02f, +2.549810488e-02f, +1.367198280e-02f, -6.882022052e-03f, -1.476940467e-02f, -7.026155510e-03f, +3.857371771e-03f, +7.022954081e-03f, +2.889308604e-03f, -1.671564710e-03f, -2.502607995e-03f, -8.386340443e-04f, +4.684523500e-04f, +5.041228121e-04f, -4.413538483e-06f, +3.575012473e-05f, +5.915235252e-05f, -6.715051279e-06f, -1.342466589e-04f, -1.552705567e-04f, +5.450816010e-05f, +3.330774214e-04f, +3.045473361e-04f, -1.665311122e-04f, -6.464977422e-04f, -4.870122059e-04f, +3.600441509e-04f, +1.048995450e-03f, +6.605627939e-04f, -6.264160665e-04f, -1.471123755e-03f, -7.746407335e-04f, +9.237860406e-04f, +1.816221724e-03f, +7.910499668e-04f, -1.184982522e-03f, -1.993569491e-03f, -7.014386192e-04f, +1.339988683e-03f, +1.953571069e-03f, +5.318816467e-04f, -1.343540912e-03f, -1.707930808e-03f, -3.317931603e-04f, +1.194313118e-03f, +1.324687140e-03f, +1.530006729e-04f, -9.356702918e-04f, -9.006978220e-04f, -2.990611803e-05f, +6.374784862e-04f, +5.253543618e-04f, -2.976595604e-05f, -3.683424601e-04f, -2.525700247e-04f, +4.082098868e-05f, +1.720180044e-04f, +9.207094896e-05f, -2.770539860e-05f, -5.827238086e-05f, -1.996546693e-05f, +1.123699732e-05f, /* 5,11 (48) */ -2.071579750e-04f, +2.929955996e-04f, +1.052757832e-03f, +1.089226726e-03f, -4.096128960e-04f, -2.698767258e-03f, -3.333674401e-03f, -2.950535474e-04f, +5.089254328e-03f, +7.774864490e-03f, +3.051905562e-03f, -7.657281569e-03f, -1.531287411e-02f, -9.835218674e-03f, +9.104463103e-03f, +2.721684986e-02f, +2.435827719e-02f, -6.812725987e-03f, -4.733852455e-02f, -5.836574174e-02f, -7.598317793e-03f, +1.021988712e-01f, +2.261856817e-01f, +3.013073253e-01f, +2.864100261e-01f, +1.897845140e-01f, +6.355950952e-02f, -3.083361355e-02f, -6.052082871e-02f, -3.584769789e-02f, +5.377433249e-03f, +2.840656226e-02f, +2.293088136e-02f, +2.345978995e-03f, -1.327128456e-02f, -1.395395928e-02f, -4.100117847e-03f, +5.406337119e-03f, +7.583474445e-03f, +3.411924888e-03f, -1.647122420e-03f, -3.478037017e-03f, -2.026405637e-03f, +2.201391358e-04f, +1.224119238e-03f, +8.372826932e-04f, +8.038252759e-05f, -2.509389351e-04f, -6.678311802e-06f, -2.304892660e-05f, -1.897750724e-05f, +2.063533162e-05f, +6.804400617e-05f, +6.139770552e-05f, -3.131082784e-05f, -1.487841346e-04f, -1.590825413e-04f, +1.415416122e-05f, +2.675676699e-04f, +3.489919343e-04f, +7.864329961e-05f, -4.118626183e-04f, -6.853095436e-04f, -3.414792965e-04f, +5.409873483e-04f, +1.284485883e-03f, +1.039472643e-03f, -4.893131757e-04f, -2.611268631e-03f, -3.964905593e-03f, -3.448907308e-03f, -1.086311093e-03f, +1.882806499e-03f, +3.807345528e-03f, +3.741151049e-03f, +2.029033559e-03f, -4.871779011e-05f, -1.242449486e-03f, -1.142701516e-03f, -2.687626964e-04f, +5.081486657e-04f, +6.591317812e-04f, +2.736764066e-04f, -1.897156964e-04f, -3.581373279e-04f, -2.017205521e-04f, +5.099302774e-05f, +1.740721600e-04f, +1.205654696e-04f, -1.881840462e-06f, -7.196855515e-05f, -5.736010574e-05f, -6.560781128e-06f, +2.365867119e-05f, +1.927631872e-05f, +2.186217979e-06f, +5.977488045e-04f, +1.699637474e-04f, -1.493374155e-03f, -2.645231908e-03f, -4.402748842e-04f, +4.724507873e-03f, +7.011071129e-03f, +6.490296010e-04f, -1.081371709e-02f, -1.413175738e-02f, -4.340426119e-04f, +2.002184535e-02f, +2.352470804e-02f, -6.130035059e-04f, -3.151766275e-02f, -3.364758230e-02f, +2.703960216e-03f, +4.331087950e-02f, +4.225101202e-02f, -5.639377493e-03f, -5.273193649e-02f, -4.713656917e-02f, +8.772001286e-03f, +5.733136576e-02f, +4.699265155e-02f, -1.121310348e-02f, -5.581730507e-02f, -4.190892042e-02f, +1.220152012e-02f, +4.858377352e-02f, +3.331929834e-02f, -1.144541522e-02f, -3.756276311e-02f, -2.341245371e-02f, +9.249131144e-03f, +2.546819877e-02f, +1.430946128e-02f, -6.356667690e-03f, -1.479917063e-02f, -7.394497970e-03f, +3.604801746e-03f, +7.063775070e-03f, +3.061326609e-03f, -1.579493761e-03f, -2.530313393e-03f, -8.969064252e-04f, +4.484868831e-04f, +5.153598095e-04f, -5.221833379e-06f, +3.433055652e-05f, +5.951342718e-05f, -3.152516786e-06f, -1.308097366e-04f, -1.580248070e-04f, +4.519564591e-05f, +3.271077973e-04f, +3.128293097e-04f, -1.480942770e-04f, -6.385121023e-04f, -5.047107781e-04f, +3.300161610e-04f, +1.040859489e-03f, +6.910417326e-04f, -5.845911801e-04f, -1.465726618e-03f, -8.191688640e-04f, +8.729476697e-04f, +1.816505538e-03f, +8.476746833e-04f, -1.130516597e-03f, -2.001304046e-03f, -7.649585135e-04f, +1.288413138e-03f, +1.968477322e-03f, +5.951016491e-04f, -1.300537084e-03f, -1.727631438e-03f, -3.876153077e-04f, +1.163110185e-03f, +1.345547346e-03f, +1.964723545e-04f, -9.164497890e-04f, -9.191545389e-04f, -5.936965397e-05f, +6.279422738e-04f, +5.390943982e-04f, -1.281595904e-05f, -3.650318258e-04f, -2.610411744e-04f, +3.293465062e-05f, +1.716910203e-04f, +9.620193407e-05f, -2.504671030e-05f, -5.875980060e-05f, -2.138076662e-05f, +1.080393312e-05f, /* 5,12 (48) */ -2.138362868e-04f, +2.699466730e-04f, +1.033780325e-03f, +1.109862058e-03f, -3.415688898e-04f, -2.637369552e-03f, -3.364985229e-03f, -4.438376820e-04f, +4.930171787e-03f, +7.789018652e-03f, +3.319473232e-03f, -7.308289635e-03f, -1.523423081e-02f, -1.024708129e-02f, +8.419153559e-03f, +2.687537056e-02f, +2.489926454e-02f, -5.528240104e-03f, -4.629905191e-02f, -5.885505491e-02f, -1.020958642e-02f, +9.823396566e-02f, +2.227367744e-01f, +3.002210142e-01f, +2.882928326e-01f, +1.935918595e-01f, +6.730066057e-02f, -2.880458000e-02f, -6.056954650e-02f, -3.709014737e-02f, +4.234731733e-03f, +2.813779957e-02f, +2.343903002e-02f, +3.005110776e-03f, -1.299760815e-02f, -1.414367498e-02f, -4.458255175e-03f, +5.204616567e-03f, +7.634467472e-03f, +3.585997048e-03f, -1.526556951e-03f, -3.479918858e-03f, -2.098374192e-03f, +1.627790300e-04f, +1.217558456e-03f, +8.609413644e-04f, +9.965884631e-05f, -2.487527171e-04f, -6.145498583e-06f, -2.269995370e-05f, -1.965132830e-05f, +1.900594605e-05f, +6.704908649e-05f, +6.294204704e-05f, -2.745233794e-05f, -1.460248114e-04f, -1.615228087e-04f, +6.462811949e-06f, +2.608259660e-04f, +3.514581129e-04f, +9.208544302e-05f, -3.971431734e-04f, -6.848645985e-04f, -3.624732490e-04f, +5.108376602e-04f, +1.272464001e-03f, +1.067435203e-03f, -4.264969275e-04f, -2.549045810e-03f, -3.947435253e-03f, -3.496647051e-03f, -1.178020334e-03f, +1.797988639e-03f, +3.775585220e-03f, +3.773158943e-03f, +2.095760475e-03f, +7.717910193e-06f, -1.225309849e-03f, -1.161950407e-03f, -2.988521533e-04f, +4.921946958e-04f, +6.644111886e-04f, +2.895122690e-04f, -1.785540845e-04f, -3.585383943e-04f, -2.095275372e-04f, +4.426000660e-05f, +1.731716465e-04f, +1.240340870e-04f, +1.606225050e-06f, -7.116104395e-05f, -5.871913933e-05f, -8.045365282e-06f, +2.329050229e-05f, +1.975685940e-05f, +2.646940749e-06f, +5.925269711e-04f, +2.042943039e-04f, -1.433860728e-03f, -2.648384424e-03f, -5.710846208e-04f, +4.566483066e-03f, +7.056266775e-03f, +9.761373983e-04f, -1.050088778e-02f, -1.427985166e-02f, -1.072554714e-03f, +1.951713457e-02f, +2.385472420e-02f, +4.278559834e-04f, -3.082662102e-02f, -3.423217348e-02f, +1.238233598e-03f, +4.249171064e-02f, +4.312395969e-02f, -3.822871955e-03f, -5.188426180e-02f, -4.826708576e-02f, +6.770697241e-03f, +5.656640725e-02f, +4.828106469e-02f, -9.244626154e-03f, -5.522220343e-02f, -4.320945751e-02f, +1.047388868e-02f, +4.819615821e-02f, +3.448240853e-02f, -1.009986787e-02f, -3.736629075e-02f, -2.432890350e-02f, +8.329976605e-03f, +2.540882911e-02f, +1.493740356e-02f, -5.817573292e-03f, -1.481198659e-02f, -7.759529796e-03f, +3.343760572e-03f, +7.096709720e-03f, +3.233017629e-03f, -1.483291827e-03f, -2.555360104e-03f, -9.556662258e-04f, +4.271061165e-04f, +5.261637426e-04f, -5.992792188e-06f, +3.290054749e-05f, +5.978006238e-05f, +3.318566004e-07f, -1.272731508e-04f, -1.605272429e-04f, +3.598366537e-05f, +3.208298467e-04f, +3.206200138e-04f, -1.297125478e-04f, -6.298640435e-04f, -5.216365040e-04f, +2.998823734e-04f, +1.031586820e-03f, +7.204999172e-04f, -5.423673907e-04f, -1.458683414e-03f, -8.625468812e-04f, +8.213208904e-04f, +1.814723206e-03f, +9.031948932e-04f, -1.074863185e-03f, -2.006760386e-03f, -8.275936346e-04f, +1.235350750e-03f, +1.981165714e-03f, +6.577692475e-04f, -1.255934658e-03f, -1.745429140e-03f, -4.432331034e-04f, +1.130413656e-03f, +1.364981652e-03f, +2.400119783e-04f, -8.960166017e-04f, -9.366965344e-04f, -8.904718824e-05f, +6.175595806e-04f, +5.523519909e-04f, +4.371091988e-06f, -3.612259542e-04f, -2.693219942e-04f, +2.486760706e-05f, +1.711338991e-04f, +1.002934205e-04f, -2.228763733e-05f, -5.917292671e-05f, -2.280664602e-05f, +1.033395661e-05f, /* 5,13 (48) */ -2.199817854e-04f, +2.472467193e-04f, +1.014128997e-03f, +1.128868004e-03f, -2.745198034e-04f, -2.574427505e-03f, -3.392437567e-03f, -5.898624934e-04f, +4.768648978e-03f, +7.795481463e-03f, +3.580299198e-03f, -6.956831522e-03f, -1.514214537e-02f, -1.064422447e-02f, +7.734288960e-03f, +2.651289731e-02f, +2.541010220e-02f, -4.255776103e-03f, -4.523161671e-02f, -5.928155184e-02f, -1.275863223e-02f, +9.428653040e-02f, +2.192401273e-01f, +2.990429938e-01f, +2.900908213e-01f, +1.973674447e-01f, +7.107381951e-02f, -2.670881952e-02f, -6.056182859e-02f, -3.831545722e-02f, +3.072781326e-03f, +2.783894741e-02f, +2.393122472e-02f, +3.669521965e-03f, -1.270809588e-02f, -1.432222906e-02f, -4.816793569e-03f, +4.995089030e-03f, +7.678727479e-03f, +3.759168695e-03f, -1.402522864e-03f, -3.478312633e-03f, -2.169535236e-03f, +1.040598907e-04f, +1.209513091e-03f, +8.842318667e-04f, +1.194157057e-04f, -2.461057764e-04f, -5.619847753e-06f, -2.233122796e-05f, -2.028645001e-05f, +1.738935163e-05f, +6.600111633e-05f, +6.439358814e-05f, -2.362871253e-05f, -1.431608535e-04f, -1.637676033e-04f, -1.129221506e-06f, +2.539196867e-04f, +3.535546868e-04f, +1.052734594e-04f, -3.822267278e-04f, -6.837821069e-04f, -3.828732458e-04f, +4.805987104e-04f, +1.259451603e-03f, +1.094049999e-03f, -3.643588626e-04f, -2.486096943e-03f, -3.928059791e-03f, -3.542451496e-03f, -1.269047195e-03f, +1.712134616e-03f, +3.741774980e-03f, +3.803445380e-03f, +2.162088097e-03f, +6.506458990e-05f, -1.206819595e-03f, -1.180386341e-03f, -3.290436934e-04f, +4.755794889e-04f, +6.691226960e-04f, +3.052656328e-04f, -1.670791099e-04f, -3.585944329e-04f, -2.172329171e-04f, +3.738809433e-05f, +1.720829637e-04f, +1.274302066e-04f, +5.151342728e-06f, -7.026280721e-05f, -6.004029793e-05f, -9.553018418e-06f, +2.288492893e-05f, +2.022427551e-05f, +3.118355367e-06f, +5.865341789e-04f, +2.371948514e-04f, -1.374080666e-03f, -2.648052568e-03f, -6.983577715e-04f, +4.405955823e-03f, +7.092250441e-03f, +1.296967245e-03f, -1.018026776e-02f, -1.440956421e-02f, -1.702418758e-03f, +1.899549807e-02f, +2.415460658e-02f, +1.459442803e-03f, -3.010612110e-02f, -3.477454088e-02f, -2.204498169e-04f, +4.162916376e-02f, +4.394528058e-02f, -2.008148749e-03f, -5.098106691e-02f, -4.934194895e-02f, +4.763936855e-03f, +5.573881361e-02f, +4.951641544e-02f, -7.263460440e-03f, -5.456443418e-02f, -4.446539217e-02f, +8.728459539e-03f, +4.775292511e-02f, +3.561282219e-02f, -8.734886219e-03f, -3.712627877e-02f, -2.522492010e-02f, +7.393280071e-03f, +2.531978192e-02f, +1.555496314e-02f, -5.265221301e-03f, -1.480761550e-02f, -8.120755750e-03f, +3.074438578e-03f, +7.121577327e-03f, +3.404151528e-03f, -1.382998406e-03f, -2.577647741e-03f, -1.014839153e-03f, +4.042994704e-04f, +5.364976992e-04f, -6.726188338e-06f, +3.146265921e-05f, +5.995415024e-05f, +3.734859764e-06f, -1.236436595e-04f, -1.627790681e-04f, +2.688242340e-05f, +3.142560394e-04f, +3.279163869e-04f, -1.114077755e-04f, -6.205714137e-04f, -5.377768232e-04f, +2.696796894e-04f, +1.021197686e-03f, +7.489100181e-04f, -4.997968082e-04f, -1.450011546e-03f, -9.047296952e-04f, +7.689688922e-04f, +1.810883461e-03f, +9.575489692e-04f, -1.018088808e-03f, -2.009934480e-03f, -8.892717136e-04f, +1.180862295e-03f, +1.991618904e-03f, +7.198106432e-04f, -1.209781226e-03f, -1.761296652e-03f, -4.985806950e-04f, +1.096254414e-03f, +1.382958902e-03f, +2.835684992e-04f, -8.743859052e-04f, -9.532950886e-04f, -1.189049414e-04f, +6.063342116e-04f, +5.651052827e-04f, +2.177681319e-05f, -3.569227371e-04f, -2.773989148e-04f, +1.662740206e-05f, +1.703431041e-04f, +1.043388822e-04f, -1.942990811e-05f, -5.950922336e-05f, -2.424101926e-05f, +9.826762982e-06f, /* 5,14 (48) */ -2.256016332e-04f, +2.249154914e-04f, +9.938425466e-04f, +1.146257356e-03f, -2.085186870e-04f, -2.510033917e-03f, -3.416066279e-03f, -7.330233469e-04f, +4.604881375e-03f, +7.794352242e-03f, +3.834218885e-03f, -6.603276835e-03f, -1.503687191e-02f, -1.102645119e-02f, +7.050506854e-03f, +2.613002407e-02f, +2.589070091e-02f, -2.996324500e-03f, -4.413756671e-02f, -5.964591070e-02f, -1.524472918e-02f, +9.035847061e-02f, +2.156976758e-01f, +2.977739466e-01f, +2.918029559e-01f, +2.011092197e-01f, +7.487726489e-02f, -2.454673142e-02f, -6.049676400e-02f, -3.952227682e-02f, +1.892394985e-03f, +2.750990372e-02f, +2.440680421e-02f, +4.338644661e-03f, -1.240283025e-02f, -1.448930817e-02f, -5.175388002e-03f, +4.777856113e-03f, +7.716115573e-03f, +3.931251658e-03f, -1.275092657e-03f, -3.473161290e-03f, -2.239798043e-03f, +4.401959277e-05f, +1.199960073e-03f, +9.071167956e-04f, +1.396399812e-04f, -2.429874210e-04f, -5.101935035e-06f, -2.194368679e-05f, -2.088292230e-05f, +1.578716000e-05f, +6.490221258e-05f, +6.575232863e-05f, -1.984341151e-05f, -1.401967567e-04f, -1.658174043e-04f, -8.615704811e-06f, +2.468577445e-04f, +3.552842156e-04f, +1.181977641e-04f, -3.671297703e-04f, -6.820706251e-04f, -4.026676212e-04f, +4.502987406e-04f, +1.245472585e-03f, +1.119313455e-03f, -3.029347472e-04f, -2.422468327e-03f, -3.906802038e-03f, -3.586300165e-03f, -1.359339382e-03f, +1.625293037e-03f, +3.705927037e-03f, +3.831980836e-03f, +2.227969541e-03f, +1.232916022e-04f, -1.186976001e-03f, -1.197982611e-03f, -3.593109908e-04f, +4.583105953e-04f, +6.732550314e-04f, +3.209203473e-04f, -1.552980924e-04f, -3.583010170e-04f, -2.248276595e-04f, +3.038234710e-05f, +1.708045217e-04f, +1.307491686e-04f, +8.750643349e-06f, -6.927326105e-05f, -6.132137632e-05f, -1.108242036e-05f, +2.244163619e-05f, +2.067761714e-05f, +3.600030357e-06f, +5.798079906e-04f, +2.686575106e-04f, -1.314126515e-03f, -2.644317708e-03f, -8.220014310e-04f, +4.243176755e-03f, +7.119132864e-03f, +1.611223284e-03f, -9.852351375e-03f, -1.452097198e-02f, -2.322990171e-03f, +1.845772125e-02f, +2.442428626e-02f, +2.480640490e-03f, -2.935721108e-02f, -3.527433768e-02f, -1.670461363e-03f, +4.072443406e-02f, +4.471424948e-02f, -1.972652877e-04f, -5.002351794e-02f, -5.036003776e-02f, +2.754002374e-03f, +5.484954190e-02f, +5.069727773e-02f, -5.271841536e-03f, -5.384462353e-02f, -4.567517339e-02f, +6.967162887e-03f, +4.725434442e-02f, +3.670907660e-02f, -7.351927317e-03f, -3.684271028e-02f, -2.609930601e-02f, +6.439984982e-03f, +2.520087698e-02f, +1.616129735e-02f, -4.700116019e-03f, -1.478583868e-02f, -8.477678487e-03f, +2.797039663e-03f, +7.138204729e-03f, +3.574494632e-03f, -1.278659524e-03f, -2.597077649e-03f, -1.074348376e-03f, +3.800584512e-04f, +5.463244622e-04f, -7.421867367e-06f, +3.001940325e-05f, +6.003768156e-05f, +7.053467277e-06f, -1.199280247e-04f, -1.647818060e-04f, +1.790181941e-05f, +3.073990511e-04f, +3.347160378e-04f, -9.320145502e-05f, -6.106526693e-04f, -5.531202657e-04f, +2.394447676e-04f, +1.009713527e-03f, +7.762461630e-04f, -4.569316317e-04f, -1.439730266e-03f, -9.456738503e-04f, +7.159554776e-04f, +1.804997449e-03f, +1.010676813e-03f, -9.602611958e-04f, -2.010824996e-03f, -9.499216317e-04f, +1.125010260e-03f, +1.999822172e-03f, +7.811526405e-04f, -1.162126342e-03f, -1.775208914e-03f, -5.535922821e-04f, +1.060665243e-03f, +1.399449515e-03f, +3.270905203e-04f, -8.515744417e-04f, -9.689224002e-04f, -1.489086026e-04f, +5.942710605e-04f, +5.773328080e-04f, +3.938231595e-05f, -3.521206831e-04f, -2.852584363e-04f, +8.221935396e-06f, +1.693153605e-04f, +1.083317326e-04f, -1.647543552e-05f, -5.976621677e-05f, -2.568173259e-05f, +9.282107604e-06f, /* 5,15 (48) */ -2.307035682e-04f, +2.029718046e-04f, +9.729596243e-04f, +1.162044516e-03f, -1.436164744e-04f, -2.444281589e-03f, -3.435909691e-03f, -8.732201035e-04f, +4.439063971e-03f, +7.785736537e-03f, +4.081076629e-03f, -6.247992620e-03f, -1.491867414e-02f, -1.139358096e-02f, +6.368436228e-03f, +2.572735645e-02f, +2.634099965e-02f, -1.750851916e-03f, -4.301825325e-02f, -5.994884545e-02f, -1.766719750e-02f, +8.645166857e-02f, +2.121113757e-01f, +2.964146073e-01f, +2.934282489e-01f, +2.048151467e-01f, +7.870924573e-02f, -2.231876188e-02f, -6.037347239e-02f, -4.070925282e-02f, +6.944123742e-04f, +2.715059273e-02f, +2.486511480e-02f, +5.011899692e-03f, -1.208190990e-02f, -1.464460626e-02f, -5.533689019e-03f, +4.553028453e-03f, +7.746497920e-03f, +4.102056180e-03f, -1.144343489e-03f, -3.464410647e-03f, -2.309071304e-03f, -1.730178355e-05f, +1.188877652e-03f, +9.295584318e-04f, +1.603175984e-04f, -2.393873907e-04f, -4.592312781e-06f, -2.153827296e-05f, -2.144084177e-05f, +1.420093672e-05f, +6.375451373e-05f, +6.701837009e-05f, -1.609980167e-05f, -1.371370575e-04f, -1.676728842e-04f, -1.599059122e-05f, +2.396490953e-04f, +3.566495875e-04f, +1.308491393e-04f, -3.518687715e-04f, -6.797391967e-04f, -4.218453906e-04f, +4.199657252e-04f, +1.230551377e-03f, +1.143223062e-03f, -2.422595454e-04f, -2.358206446e-03f, -3.883686002e-03f, -3.628173926e-03f, -1.448845124e-03f, +1.537513213e-03f, +3.668055015e-03f, +3.858736840e-03f, +2.293357934e-03f, +1.823673981e-04f, -1.165777375e-03f, -1.214712913e-03f, -3.896273500e-04f, +4.403962535e-04f, +6.767973395e-04f, +3.364601680e-04f, -1.432187388e-04f, -3.576540129e-04f, -2.323027288e-04f, +2.324802542e-05f, +1.693349066e-04f, +1.339863276e-04f, +1.240115436e-05f, -6.819191421e-05f, -6.256017717e-05f, -1.263220012e-05f, +2.196035072e-05f, +2.111593325e-05f, +4.091509657e-06f, +5.723861232e-04f, +2.986769139e-04f, -1.254088834e-03f, -2.637264241e-03f, -9.419294558e-04f, +4.078394949e-03f, +7.137034683e-03f, +1.918622335e-03f, -9.517635337e-03f, -1.461417344e-02f, -2.933642841e-03f, +1.790460098e-02f, +2.466373103e-02f, +3.490354017e-03f, -2.858096492e-02f, -3.573126931e-02f, -3.110191630e-03f, +3.977876021e-02f, +4.543020495e-02f, +1.607732162e-03f, -4.901284113e-02f, -5.132029895e-02f, +7.431773778e-04f, +5.389962027e-02f, +5.182228799e-02f, -3.272019363e-03f, -5.306347089e-02f, -4.683729973e-02f, +5.191953973e-03f, +4.670075213e-02f, +3.776974184e-02f, -5.952477802e-03f, -3.651561975e-02f, -2.695088045e-02f, +5.471062582e-03f, +2.505196838e-02f, +1.675556841e-02f, -4.122783211e-03f, -1.474645637e-02f, -8.829799170e-03f, +2.511781227e-03f, +7.146426665e-03f, +3.743809993e-03f, -1.170327791e-03f, -2.613553085e-03f, -1.134114593e-03f, +3.543767186e-04f, +5.556065698e-04f, -8.079745468e-06f, +2.857323814e-05f, +6.003274073e-05f, +1.028483838e-05f, -1.161330024e-04f, -1.665372915e-04f, +9.051438444e-06f, +3.002717441e-04f, +3.410172403e-04f, -7.511470104e-05f, -6.001268452e-04f, -5.676564557e-04f, +2.092139797e-04f, +9.971569364e-04f, +8.024839588e-04f, -4.138240856e-04f, -1.427860644e-03f, -9.853375695e-04f, +6.623449825e-04f, +1.797078701e-03f, +1.062519925e-03f, -9.014492054e-04f, -2.009433298e-03f, -1.009473505e-03f, +1.067858769e-03f, +2.005763443e-03f, +8.417227355e-04f, -1.113021470e-03f, -1.787143111e-03f, -6.082021965e-04f, +1.023680798e-03f, +1.414425528e-03f, +3.705263544e-04f, -8.276005109e-04f, -9.835516288e-04f, -1.790233679e-04f, +5.813761142e-04f, +5.890135245e-04f, +5.716822562e-05f, -3.468189271e-04f, -2.928871472e-04f, -3.405428706e-07f, +1.680476643e-04f, +1.122653332e-04f, -1.342631768e-05f, -5.994150050e-05f, -2.712656655e-05f, +8.699807951e-06f, /* 5,16 (48) */ -2.352958810e-04f, +1.814335316e-04f, +9.515187825e-04f, +1.176245452e-03f, -7.986196071e-05f, -2.377263219e-03f, -3.452009492e-03f, -1.010357161e-03f, +4.271391087e-03f, +7.769745946e-03f, +4.320725725e-03f, -5.891343032e-03f, -1.478782500e-02f, -1.174544974e-02f, +5.688697032e-03f, +2.530551106e-02f, +2.676096538e-02f, -5.203005390e-04f, -4.187503019e-02f, -6.019110499e-02f, -2.002540395e-02f, +8.256798257e-02f, +2.084832017e-01f, +2.949657621e-01f, +2.949657621e-01f, +2.084832017e-01f, +8.256798257e-02f, -2.002540395e-02f, -6.019110499e-02f, -4.187503019e-02f, -5.203005390e-04f, +2.676096538e-02f, +2.530551106e-02f, +5.688697032e-03f, -1.174544974e-02f, -1.478782500e-02f, -5.891343032e-03f, +4.320725725e-03f, +7.769745946e-03f, +4.271391087e-03f, -1.010357161e-03f, -3.452009492e-03f, -2.377263219e-03f, -7.986196071e-05f, +1.176245452e-03f, +9.515187825e-04f, +1.814335316e-04f, -2.352958810e-04f, -4.091509657e-06f, -2.111593325e-05f, -2.196035072e-05f, +1.263220012e-05f, +6.256017717e-05f, +6.819191421e-05f, -1.240115436e-05f, -1.339863276e-04f, -1.693349066e-04f, -2.324802542e-05f, +2.323027288e-04f, +3.576540129e-04f, +1.432187388e-04f, -3.364601680e-04f, -6.767973395e-04f, -4.403962535e-04f, +3.896273500e-04f, +1.214712913e-03f, +1.165777375e-03f, -1.823673981e-04f, -2.293357934e-03f, -3.858736840e-03f, -3.668055015e-03f, -1.537513213e-03f, +1.448845124e-03f, +3.628173926e-03f, +3.883686002e-03f, +2.358206446e-03f, +2.422595454e-04f, -1.143223062e-03f, -1.230551377e-03f, -4.199657252e-04f, +4.218453906e-04f, +6.797391967e-04f, +3.518687715e-04f, -1.308491393e-04f, -3.566495875e-04f, -2.396490953e-04f, +1.599059122e-05f, +1.676728842e-04f, +1.371370575e-04f, +1.609980167e-05f, -6.701837009e-05f, -6.375451373e-05f, -1.420093672e-05f, +2.144084177e-05f, +2.153827296e-05f, +4.592312781e-06f, +5.643063777e-04f, +3.272501520e-04f, -1.194056093e-03f, -2.626979402e-03f, -1.058062458e-03f, +3.911857657e-03f, +7.146086122e-03f, +2.218894080e-03f, -9.176618097e-03f, -1.468928814e-02f, -3.533769686e-03f, +1.733694452e-02f, +2.487294501e-02f, +4.487510953e-03f, -2.777848096e-02f, -3.614509340e-02f, -4.538052273e-03f, +3.879342264e-02f, +4.609254994e-02f, +3.404810862e-03f, -4.795032120e-02f, -5.222174816e-02f, -1.266255920e-03f, +5.289014676e-02f, +5.289014676e-02f, -1.266255920e-03f, -5.222174816e-02f, -4.795032120e-02f, +3.404810862e-03f, +4.609254994e-02f, +3.879342264e-02f, -4.538052273e-03f, -3.614509340e-02f, -2.777848096e-02f, +4.487510953e-03f, +2.487294501e-02f, +1.733694452e-02f, -3.533769686e-03f, -1.468928814e-02f, -9.176618097e-03f, +2.218894080e-03f, +7.146086122e-03f, +3.911857657e-03f, -1.058062458e-03f, -2.626979402e-03f, -1.194056093e-03f, +3.272501520e-04f, +5.643063777e-04f, -8.699807951e-06f, +2.712656655e-05f, +5.994150050e-05f, +1.342631768e-05f, -1.122653332e-04f, -1.680476643e-04f, +3.405428706e-07f, +2.928871472e-04f, +3.468189271e-04f, -5.716822562e-05f, -5.890135245e-04f, -5.813761142e-04f, +1.790233679e-04f, +9.835516288e-04f, +8.276005109e-04f, -3.705263544e-04f, -1.414425528e-03f, -1.023680798e-03f, +6.082021965e-04f, +1.787143111e-03f, +1.113021470e-03f, -8.417227355e-04f, -2.005763443e-03f, -1.067858769e-03f, +1.009473505e-03f, +2.009433298e-03f, +9.014492054e-04f, -1.062519925e-03f, -1.797078701e-03f, -6.623449825e-04f, +9.853375695e-04f, +1.427860644e-03f, +4.138240856e-04f, -8.024839588e-04f, -9.971569364e-04f, -2.092139797e-04f, +5.676564557e-04f, +6.001268452e-04f, +7.511470104e-05f, -3.410172403e-04f, -3.002717441e-04f, -9.051438444e-06f, +1.665372915e-04f, +1.161330024e-04f, -1.028483838e-05f, -6.003274073e-05f, -2.857323814e-05f, +8.079745468e-06f, /* 5,17 (48) */ -2.393873907e-04f, +1.603175984e-04f, +9.295584318e-04f, +1.188877652e-03f, -1.730178355e-05f, -2.309071304e-03f, -3.464410647e-03f, -1.144343489e-03f, +4.102056180e-03f, +7.746497920e-03f, +4.553028453e-03f, -5.533689019e-03f, -1.464460626e-02f, -1.208190990e-02f, +5.011899692e-03f, +2.486511480e-02f, +2.715059273e-02f, +6.944123742e-04f, -4.070925282e-02f, -6.037347239e-02f, -2.231876188e-02f, +7.870924573e-02f, +2.048151467e-01f, +2.934282489e-01f, +2.964146073e-01f, +2.121113757e-01f, +8.645166857e-02f, -1.766719750e-02f, -5.994884545e-02f, -4.301825325e-02f, -1.750851916e-03f, +2.634099965e-02f, +2.572735645e-02f, +6.368436228e-03f, -1.139358096e-02f, -1.491867414e-02f, -6.247992620e-03f, +4.081076629e-03f, +7.785736537e-03f, +4.439063971e-03f, -8.732201035e-04f, -3.435909691e-03f, -2.444281589e-03f, -1.436164744e-04f, +1.162044516e-03f, +9.729596243e-04f, +2.029718046e-04f, -2.307035682e-04f, -3.600030357e-06f, -2.067761714e-05f, -2.244163619e-05f, +1.108242036e-05f, +6.132137632e-05f, +6.927326105e-05f, -8.750643349e-06f, -1.307491686e-04f, -1.708045217e-04f, -3.038234710e-05f, +2.248276595e-04f, +3.583010170e-04f, +1.552980924e-04f, -3.209203473e-04f, -6.732550314e-04f, -4.583105953e-04f, +3.593109908e-04f, +1.197982611e-03f, +1.186976001e-03f, -1.232916022e-04f, -2.227969541e-03f, -3.831980836e-03f, -3.705927037e-03f, -1.625293037e-03f, +1.359339382e-03f, +3.586300165e-03f, +3.906802038e-03f, +2.422468327e-03f, +3.029347472e-04f, -1.119313455e-03f, -1.245472585e-03f, -4.502987406e-04f, +4.026676212e-04f, +6.820706251e-04f, +3.671297703e-04f, -1.181977641e-04f, -3.552842156e-04f, -2.468577445e-04f, +8.615704811e-06f, +1.658174043e-04f, +1.401967567e-04f, +1.984341151e-05f, -6.575232863e-05f, -6.490221258e-05f, -1.578716000e-05f, +2.088292230e-05f, +2.194368679e-05f, +5.101935035e-06f, +5.556065698e-04f, +3.543767186e-04f, -1.134114593e-03f, -2.613553085e-03f, -1.170327791e-03f, +3.743809993e-03f, +7.146426665e-03f, +2.511781227e-03f, -8.829799170e-03f, -1.474645637e-02f, -4.122783211e-03f, +1.675556841e-02f, +2.505196838e-02f, +5.471062582e-03f, -2.695088045e-02f, -3.651561975e-02f, -5.952477802e-03f, +3.776974184e-02f, +4.670075213e-02f, +5.191953973e-03f, -4.683729973e-02f, -5.306347089e-02f, -3.272019363e-03f, +5.182228799e-02f, +5.389962027e-02f, +7.431773778e-04f, -5.132029895e-02f, -4.901284113e-02f, +1.607732162e-03f, +4.543020495e-02f, +3.977876021e-02f, -3.110191630e-03f, -3.573126931e-02f, -2.858096492e-02f, +3.490354017e-03f, +2.466373103e-02f, +1.790460098e-02f, -2.933642841e-03f, -1.461417344e-02f, -9.517635337e-03f, +1.918622335e-03f, +7.137034683e-03f, +4.078394949e-03f, -9.419294558e-04f, -2.637264241e-03f, -1.254088834e-03f, +2.986769139e-04f, +5.723861232e-04f, -9.282107604e-06f, +2.568173259e-05f, +5.976621677e-05f, +1.647543552e-05f, -1.083317326e-04f, -1.693153605e-04f, -8.221935396e-06f, +2.852584363e-04f, +3.521206831e-04f, -3.938231595e-05f, -5.773328080e-04f, -5.942710605e-04f, +1.489086026e-04f, +9.689224002e-04f, +8.515744417e-04f, -3.270905203e-04f, -1.399449515e-03f, -1.060665243e-03f, +5.535922821e-04f, +1.775208914e-03f, +1.162126342e-03f, -7.811526405e-04f, -1.999822172e-03f, -1.125010260e-03f, +9.499216317e-04f, +2.010824996e-03f, +9.602611958e-04f, -1.010676813e-03f, -1.804997449e-03f, -7.159554776e-04f, +9.456738503e-04f, +1.439730266e-03f, +4.569316317e-04f, -7.762461630e-04f, -1.009713527e-03f, -2.394447676e-04f, +5.531202657e-04f, +6.106526693e-04f, +9.320145502e-05f, -3.347160378e-04f, -3.073990511e-04f, -1.790181941e-05f, +1.647818060e-04f, +1.199280247e-04f, -7.053467277e-06f, -6.003768156e-05f, -3.001940325e-05f, +7.421867367e-06f, /* 5,18 (48) */ -2.429874210e-04f, +1.396399812e-04f, +9.071167956e-04f, +1.199960073e-03f, +4.401959277e-05f, -2.239798043e-03f, -3.473161290e-03f, -1.275092657e-03f, +3.931251658e-03f, +7.716115573e-03f, +4.777856113e-03f, -5.175388002e-03f, -1.448930817e-02f, -1.240283025e-02f, +4.338644661e-03f, +2.440680421e-02f, +2.750990372e-02f, +1.892394985e-03f, -3.952227682e-02f, -6.049676400e-02f, -2.454673142e-02f, +7.487726489e-02f, +2.011092197e-01f, +2.918029559e-01f, +2.977739466e-01f, +2.156976758e-01f, +9.035847061e-02f, -1.524472918e-02f, -5.964591070e-02f, -4.413756671e-02f, -2.996324500e-03f, +2.589070091e-02f, +2.613002407e-02f, +7.050506854e-03f, -1.102645119e-02f, -1.503687191e-02f, -6.603276835e-03f, +3.834218885e-03f, +7.794352242e-03f, +4.604881375e-03f, -7.330233469e-04f, -3.416066279e-03f, -2.510033917e-03f, -2.085186870e-04f, +1.146257356e-03f, +9.938425466e-04f, +2.249154914e-04f, -2.256016332e-04f, -3.118355367e-06f, -2.022427551e-05f, -2.288492893e-05f, +9.553018418e-06f, +6.004029793e-05f, +7.026280721e-05f, -5.151342728e-06f, -1.274302066e-04f, -1.720829637e-04f, -3.738809433e-05f, +2.172329171e-04f, +3.585944329e-04f, +1.670791099e-04f, -3.052656328e-04f, -6.691226960e-04f, -4.755794889e-04f, +3.290436934e-04f, +1.180386341e-03f, +1.206819595e-03f, -6.506458990e-05f, -2.162088097e-03f, -3.803445380e-03f, -3.741774980e-03f, -1.712134616e-03f, +1.269047195e-03f, +3.542451496e-03f, +3.928059791e-03f, +2.486096943e-03f, +3.643588626e-04f, -1.094049999e-03f, -1.259451603e-03f, -4.805987104e-04f, +3.828732458e-04f, +6.837821069e-04f, +3.822267278e-04f, -1.052734594e-04f, -3.535546868e-04f, -2.539196867e-04f, +1.129221506e-06f, +1.637676033e-04f, +1.431608535e-04f, +2.362871253e-05f, -6.439358814e-05f, -6.600111633e-05f, -1.738935163e-05f, +2.028645001e-05f, +2.233122796e-05f, +5.619847753e-06f, +5.463244622e-04f, +3.800584512e-04f, -1.074348376e-03f, -2.597077649e-03f, -1.278659524e-03f, +3.574494632e-03f, +7.138204729e-03f, +2.797039663e-03f, -8.477678487e-03f, -1.478583868e-02f, -4.700116019e-03f, +1.616129735e-02f, +2.520087698e-02f, +6.439984982e-03f, -2.609930601e-02f, -3.684271028e-02f, -7.351927317e-03f, +3.670907660e-02f, +4.725434442e-02f, +6.967162887e-03f, -4.567517339e-02f, -5.384462353e-02f, -5.271841536e-03f, +5.069727773e-02f, +5.484954190e-02f, +2.754002374e-03f, -5.036003776e-02f, -5.002351794e-02f, -1.972652877e-04f, +4.471424948e-02f, +4.072443406e-02f, -1.670461363e-03f, -3.527433768e-02f, -2.935721108e-02f, +2.480640490e-03f, +2.442428626e-02f, +1.845772125e-02f, -2.322990171e-03f, -1.452097198e-02f, -9.852351375e-03f, +1.611223284e-03f, +7.119132864e-03f, +4.243176755e-03f, -8.220014310e-04f, -2.644317708e-03f, -1.314126515e-03f, +2.686575106e-04f, +5.798079906e-04f, -9.826762982e-06f, +2.424101926e-05f, +5.950922336e-05f, +1.942990811e-05f, -1.043388822e-04f, -1.703431041e-04f, -1.662740206e-05f, +2.773989148e-04f, +3.569227371e-04f, -2.177681319e-05f, -5.651052827e-04f, -6.063342116e-04f, +1.189049414e-04f, +9.532950886e-04f, +8.743859052e-04f, -2.835684992e-04f, -1.382958902e-03f, -1.096254414e-03f, +4.985806950e-04f, +1.761296652e-03f, +1.209781226e-03f, -7.198106432e-04f, -1.991618904e-03f, -1.180862295e-03f, +8.892717136e-04f, +2.009934480e-03f, +1.018088808e-03f, -9.575489692e-04f, -1.810883461e-03f, -7.689688922e-04f, +9.047296952e-04f, +1.450011546e-03f, +4.997968082e-04f, -7.489100181e-04f, -1.021197686e-03f, -2.696796894e-04f, +5.377768232e-04f, +6.205714137e-04f, +1.114077755e-04f, -3.279163869e-04f, -3.142560394e-04f, -2.688242340e-05f, +1.627790681e-04f, +1.236436595e-04f, -3.734859764e-06f, -5.995415024e-05f, -3.146265921e-05f, +6.726188338e-06f, /* 5,19 (48) */ -2.461057764e-04f, +1.194157057e-04f, +8.842318667e-04f, +1.209513091e-03f, +1.040598907e-04f, -2.169535236e-03f, -3.478312633e-03f, -1.402522864e-03f, +3.759168695e-03f, +7.678727479e-03f, +4.995089030e-03f, -4.816793569e-03f, -1.432222906e-02f, -1.270809588e-02f, +3.669521965e-03f, +2.393122472e-02f, +2.783894741e-02f, +3.072781326e-03f, -3.831545722e-02f, -6.056182859e-02f, -2.670881952e-02f, +7.107381951e-02f, +1.973674447e-01f, +2.900908213e-01f, +2.990429938e-01f, +2.192401273e-01f, +9.428653040e-02f, -1.275863223e-02f, -5.928155184e-02f, -4.523161671e-02f, -4.255776103e-03f, +2.541010220e-02f, +2.651289731e-02f, +7.734288960e-03f, -1.064422447e-02f, -1.514214537e-02f, -6.956831522e-03f, +3.580299198e-03f, +7.795481463e-03f, +4.768648978e-03f, -5.898624934e-04f, -3.392437567e-03f, -2.574427505e-03f, -2.745198034e-04f, +1.128868004e-03f, +1.014128997e-03f, +2.472467193e-04f, -2.199817854e-04f, -2.646940749e-06f, -1.975685940e-05f, -2.329050229e-05f, +8.045365282e-06f, +5.871913933e-05f, +7.116104395e-05f, -1.606225050e-06f, -1.240340870e-04f, -1.731716465e-04f, -4.426000660e-05f, +2.095275372e-04f, +3.585383943e-04f, +1.785540845e-04f, -2.895122690e-04f, -6.644111886e-04f, -4.921946958e-04f, +2.988521533e-04f, +1.161950407e-03f, +1.225309849e-03f, -7.717910193e-06f, -2.095760475e-03f, -3.773158943e-03f, -3.775585220e-03f, -1.797988639e-03f, +1.178020334e-03f, +3.496647051e-03f, +3.947435253e-03f, +2.549045810e-03f, +4.264969275e-04f, -1.067435203e-03f, -1.272464001e-03f, -5.108376602e-04f, +3.624732490e-04f, +6.848645985e-04f, +3.971431734e-04f, -9.208544302e-05f, -3.514581129e-04f, -2.608259660e-04f, -6.462811949e-06f, +1.615228087e-04f, +1.460248114e-04f, +2.745233794e-05f, -6.294204704e-05f, -6.704908649e-05f, -1.900594605e-05f, +1.965132830e-05f, +2.269995370e-05f, +6.145498583e-06f, +5.364976992e-04f, +4.042994704e-04f, -1.014839153e-03f, -2.577647741e-03f, -1.382998406e-03f, +3.404151528e-03f, +7.121577327e-03f, +3.074438578e-03f, -8.120755750e-03f, -1.480761550e-02f, -5.265221301e-03f, +1.555496314e-02f, +2.531978192e-02f, +7.393280071e-03f, -2.522492010e-02f, -3.712627877e-02f, -8.734886219e-03f, +3.561282219e-02f, +4.775292511e-02f, +8.728459539e-03f, -4.446539217e-02f, -5.456443418e-02f, -7.263460440e-03f, +4.951641544e-02f, +5.573881361e-02f, +4.763936855e-03f, -4.934194895e-02f, -5.098106691e-02f, -2.008148749e-03f, +4.394528058e-02f, +4.162916376e-02f, -2.204498169e-04f, -3.477454088e-02f, -3.010612110e-02f, +1.459442803e-03f, +2.415460658e-02f, +1.899549807e-02f, -1.702418758e-03f, -1.440956421e-02f, -1.018026776e-02f, +1.296967245e-03f, +7.092250441e-03f, +4.405955823e-03f, -6.983577715e-04f, -2.648052568e-03f, -1.374080666e-03f, +2.371948514e-04f, +5.865341789e-04f, -1.033395661e-05f, +2.280664602e-05f, +5.917292671e-05f, +2.228763733e-05f, -1.002934205e-04f, -1.711338991e-04f, -2.486760706e-05f, +2.693219942e-04f, +3.612259542e-04f, -4.371091988e-06f, -5.523519909e-04f, -6.175595806e-04f, +8.904718824e-05f, +9.366965344e-04f, +8.960166017e-04f, -2.400119783e-04f, -1.364981652e-03f, -1.130413656e-03f, +4.432331034e-04f, +1.745429140e-03f, +1.255934658e-03f, -6.577692475e-04f, -1.981165714e-03f, -1.235350750e-03f, +8.275936346e-04f, +2.006760386e-03f, +1.074863185e-03f, -9.031948932e-04f, -1.814723206e-03f, -8.213208904e-04f, +8.625468812e-04f, +1.458683414e-03f, +5.423673907e-04f, -7.204999172e-04f, -1.031586820e-03f, -2.998823734e-04f, +5.216365040e-04f, +6.298640435e-04f, +1.297125478e-04f, -3.206200138e-04f, -3.208298467e-04f, -3.598366537e-05f, +1.605272429e-04f, +1.272731508e-04f, -3.318566004e-07f, -5.978006238e-05f, -3.290054749e-05f, +5.992792188e-06f, /* 5,20 (48) */ -2.487527171e-04f, +9.965884631e-05f, +8.609413644e-04f, +1.217558456e-03f, +1.627790300e-04f, -2.098374192e-03f, -3.479918858e-03f, -1.526556951e-03f, +3.585997048e-03f, +7.634467472e-03f, +5.204616567e-03f, -4.458255175e-03f, -1.414367498e-02f, -1.299760815e-02f, +3.005110776e-03f, +2.343903002e-02f, +2.813779957e-02f, +4.234731733e-03f, -3.709014737e-02f, -6.056954650e-02f, -2.880458000e-02f, +6.730066057e-02f, +1.935918595e-01f, +2.882928326e-01f, +3.002210142e-01f, +2.227367744e-01f, +9.823396566e-02f, -1.020958642e-02f, -5.885505491e-02f, -4.629905191e-02f, -5.528240104e-03f, +2.489926454e-02f, +2.687537056e-02f, +8.419153559e-03f, -1.024708129e-02f, -1.523423081e-02f, -7.308289635e-03f, +3.319473232e-03f, +7.789018652e-03f, +4.930171787e-03f, -4.438376820e-04f, -3.364985229e-03f, -2.637369552e-03f, -3.415688898e-04f, +1.109862058e-03f, +1.033780325e-03f, +2.699466730e-04f, -2.138362868e-04f, -2.186217979e-06f, -1.927631872e-05f, -2.365867119e-05f, +6.560781128e-06f, +5.736010574e-05f, +7.196855515e-05f, +1.881840462e-06f, -1.205654696e-04f, -1.740721600e-04f, -5.099302774e-05f, +2.017205521e-04f, +3.581373279e-04f, +1.897156964e-04f, -2.736764066e-04f, -6.591317812e-04f, -5.081486657e-04f, +2.687626964e-04f, +1.142701516e-03f, +1.242449486e-03f, +4.871779011e-05f, -2.029033559e-03f, -3.741151049e-03f, -3.807345528e-03f, -1.882806499e-03f, +1.086311093e-03f, +3.448907308e-03f, +3.964905593e-03f, +2.611268631e-03f, +4.893131757e-04f, -1.039472643e-03f, -1.284485883e-03f, -5.409873483e-04f, +3.414792965e-04f, +6.853095436e-04f, +4.118626183e-04f, -7.864329961e-05f, -3.489919343e-04f, -2.675676699e-04f, -1.415416122e-05f, +1.590825413e-04f, +1.487841346e-04f, +3.131082784e-05f, -6.139770552e-05f, -6.804400617e-05f, -2.063533162e-05f, +1.897750724e-05f, +2.304892660e-05f, +6.678311802e-06f, +5.261637426e-04f, +4.271061165e-04f, -9.556662258e-04f, -2.555360104e-03f, -1.483291827e-03f, +3.233017629e-03f, +7.096709720e-03f, +3.343760572e-03f, -7.759529796e-03f, -1.481198659e-02f, -5.817573292e-03f, +1.493740356e-02f, +2.540882911e-02f, +8.329976605e-03f, -2.432890350e-02f, -3.736629075e-02f, -1.009986787e-02f, +3.448240853e-02f, +4.819615821e-02f, +1.047388868e-02f, -4.320945751e-02f, -5.522220343e-02f, -9.244626154e-03f, +4.828106469e-02f, +5.656640725e-02f, +6.770697241e-03f, -4.826708576e-02f, -5.188426180e-02f, -3.822871955e-03f, +4.312395969e-02f, +4.249171064e-02f, +1.238233598e-03f, -3.423217348e-02f, -3.082662102e-02f, +4.278559834e-04f, +2.385472420e-02f, +1.951713457e-02f, -1.072554714e-03f, -1.427985166e-02f, -1.050088778e-02f, +9.761373983e-04f, +7.056266775e-03f, +4.566483066e-03f, -5.710846208e-04f, -2.648384424e-03f, -1.433860728e-03f, +2.042943039e-04f, +5.925269711e-04f, -1.080393312e-05f, +2.138076662e-05f, +5.875980060e-05f, +2.504671030e-05f, -9.620193407e-05f, -1.716910203e-04f, -3.293465062e-05f, +2.610411744e-04f, +3.650318258e-04f, +1.281595904e-05f, -5.390943982e-04f, -6.279422738e-04f, +5.936965397e-05f, +9.191545389e-04f, +9.164497890e-04f, -1.964723545e-04f, -1.345547346e-03f, -1.163110185e-03f, +3.876153077e-04f, +1.727631438e-03f, +1.300537084e-03f, -5.951016491e-04f, -1.968477322e-03f, -1.288413138e-03f, +7.649585135e-04f, +2.001304046e-03f, +1.130516597e-03f, -8.476746833e-04f, -1.816505538e-03f, -8.729476697e-04f, +8.191688640e-04f, +1.465726618e-03f, +5.845911801e-04f, -6.910417326e-04f, -1.040859489e-03f, -3.300161610e-04f, +5.047107781e-04f, +6.385121023e-04f, +1.480942770e-04f, -3.128293097e-04f, -3.271077973e-04f, -4.519564591e-05f, +1.580248070e-04f, +1.308097366e-04f, +3.152516786e-06f, -5.951342718e-05f, -3.433055652e-05f, +5.221833379e-06f, /* 5,21 (48) */ -2.509389351e-04f, +8.038252759e-05f, +8.372826932e-04f, +1.224119238e-03f, +2.201391358e-04f, -2.026405637e-03f, -3.478037017e-03f, -1.647122420e-03f, +3.411924888e-03f, +7.583474445e-03f, +5.406337119e-03f, -4.100117847e-03f, -1.395395928e-02f, -1.327128456e-02f, +2.345978995e-03f, +2.293088136e-02f, +2.840656226e-02f, +5.377433249e-03f, -3.584769789e-02f, -6.052082871e-02f, -3.083361355e-02f, +6.355950952e-02f, +1.897845140e-01f, +2.864100261e-01f, +3.013073253e-01f, +2.261856817e-01f, +1.021988712e-01f, -7.598317793e-03f, -5.836574174e-02f, -4.733852455e-02f, -6.812725987e-03f, +2.435827719e-02f, +2.721684986e-02f, +9.104463103e-03f, -9.835218674e-03f, -1.531287411e-02f, -7.657281569e-03f, +3.051905562e-03f, +7.774864490e-03f, +5.089254328e-03f, -2.950535474e-04f, -3.333674401e-03f, -2.698767258e-03f, -4.096128960e-04f, +1.089226726e-03f, +1.052757832e-03f, +2.929955996e-04f, -2.071579750e-04f, -1.736593812e-06f, -1.878360102e-05f, -2.398979095e-05f, +5.100534608e-06f, +5.596540759e-05f, +7.268601529e-05f, +5.310089543e-06f, -1.170290228e-04f, -1.747862663e-04f, -5.758230847e-05f, +1.938209822e-04f, +3.573959454e-04f, +2.005570148e-04f, -2.577740890e-04f, -6.532961475e-04f, -5.234345368e-04f, +2.388012594e-04f, +1.122666753e-03f, +1.258242246e-03f, +1.042127838e-04f, -1.961954204e-03f, -3.707452254e-03f, -3.837045076e-03f, -1.966540324e-03f, +9.939722517e-04f, +3.399254090e-03f, +3.980449169e-03f, +2.672719330e-03f, +5.527710620e-04f, -1.010166969e-03f, -1.295493904e-03f, -5.710192872e-04f, +3.199037319e-04f, +6.851088870e-04f, +4.263685705e-04f, -6.495697539e-05f, -3.461539264e-04f, -2.741359392e-04f, -2.193840843e-05f, +1.564465189e-04f, +1.514343731e-04f, +3.520063170e-05f, -5.976066708e-05f, -6.898378297e-05f, -2.227585175e-05f, +1.826498444e-05f, +2.337721593e-05f, +7.217688677e-06f, +5.153598095e-04f, +4.484868831e-04f, -8.969064252e-04f, -2.530313393e-03f, -1.579493761e-03f, +3.061326609e-03f, +7.063775070e-03f, +3.604801746e-03f, -7.394497970e-03f, -1.479917063e-02f, -6.356667690e-03f, +1.430946128e-02f, +2.546819877e-02f, +9.249131144e-03f, -2.341245371e-02f, -3.756276311e-02f, -1.144541522e-02f, +3.331929834e-02f, +4.858377352e-02f, +1.220152012e-02f, -4.190892042e-02f, -5.581730507e-02f, -1.121310348e-02f, +4.699265155e-02f, +5.733136576e-02f, +8.772001286e-03f, -4.713656917e-02f, -5.273193649e-02f, -5.639377493e-03f, +4.225101202e-02f, +4.331087950e-02f, +2.703960216e-03f, -3.364758230e-02f, -3.151766275e-02f, -6.130035059e-04f, +2.352470804e-02f, +2.002184535e-02f, -4.340426119e-04f, -1.413175738e-02f, -1.081371709e-02f, +6.490296010e-04f, +7.011071129e-03f, +4.724507873e-03f, -4.402748842e-04f, -2.645231908e-03f, -1.493374155e-03f, +1.699637474e-04f, +5.977488045e-04f, -1.123699732e-05f, +1.996546693e-05f, +5.827238086e-05f, +2.770539860e-05f, -9.207094896e-05f, -1.720180044e-04f, -4.082098868e-05f, +2.525700247e-04f, +3.683424601e-04f, +2.976595604e-05f, -5.253543618e-04f, -6.374784862e-04f, +2.990611803e-05f, +9.006978220e-04f, +9.356702918e-04f, -1.530006729e-04f, -1.324687140e-03f, -1.194313118e-03f, +3.317931603e-04f, +1.707930808e-03f, +1.343540912e-03f, -5.318816467e-04f, -1.953571069e-03f, -1.339988683e-03f, +7.014386192e-04f, +1.993569491e-03f, +1.184982522e-03f, -7.910499668e-04f, -1.816221724e-03f, -9.237860406e-04f, +7.746407335e-04f, +1.471123755e-03f, +6.264160665e-04f, -6.605627939e-04f, -1.048995450e-03f, -3.600441509e-04f, +4.870122059e-04f, +6.464977422e-04f, +1.665311122e-04f, -3.045473361e-04f, -3.330774214e-04f, -5.450816010e-05f, +1.552705567e-04f, +1.342466589e-04f, +6.715051279e-06f, -5.915235252e-05f, -3.575012473e-05f, +4.413538483e-06f, /* 5,22 (48) */ -2.526755289e-04f, +6.159892657e-05f, +8.132929023e-04f, +1.229219772e-03f, +2.761045433e-04f, -1.953719622e-03f, -3.472726928e-03f, -1.764151443e-03f, +3.237138622e-03f, +7.525892136e-03f, +5.600158101e-03f, -3.742721902e-03f, -1.375340227e-02f, -1.352905865e-02f, +1.692682847e-03f, +2.240744682e-02f, +2.864536352e-02f, +6.500100002e-03f, -3.458945564e-02f, -6.041661592e-02f, -3.279556776e-02f, +5.985205727e-02f, +1.859474689e-01f, +2.844434858e-01f, +3.023012975e-01f, +2.295849358e-01f, +1.061793204e-01f, -4.925598463e-03f, -5.781297067e-02f, -4.834869152e-02f, -8.108219891e-03f, +2.378725791e-02f, +2.753675359e-02f, +9.789571990e-03f, -9.408850104e-03f, -1.537783108e-02f, -8.003435496e-03f, +2.777769623e-03f, +7.752926082e-03f, +5.245700847e-03f, -1.436191744e-04f, -3.298473769e-03f, -2.758527925e-03f, -4.785966790e-04f, +1.066950874e-03f, +1.071022817e-03f, +3.163728156e-04f, -1.999402864e-04f, -1.298450182e-06f, -1.827965033e-05f, -2.428425610e-05f, +3.665842204e-06f, +5.453725787e-05f, +7.331418729e-05f, +8.675864377e-06f, -1.134294190e-04f, -1.753158955e-04f, -6.402320883e-05f, +1.858378263e-04f, +3.563192359e-04f, +2.110715010e-04f, -2.418212370e-04f, -6.469163482e-04f, -5.380461344e-04f, +2.089933721e-04f, +1.101873560e-03f, +1.272692875e-03f, +1.587382800e-04f, -1.894569207e-03f, -3.672094116e-03f, -3.864674442e-03f, -2.049143015e-03f, +9.010570422e-04f, +3.347710544e-03f, +3.994045556e-03f, +2.733352090e-03f, +6.168332849e-04f, -9.795239089e-04f, -1.305465301e-03f, -6.009047662e-04f, +2.977595724e-04f, +6.842550870e-04f, +4.406445511e-04f, -5.103677261e-05f, -3.429422056e-04f, -2.805219773e-04f, -2.980895653e-05f, +1.536146589e-04f, +1.539711284e-04f, +3.911811091e-05f, -5.803114002e-05f, -6.986635178e-05f, -2.392580611e-05f, +1.751380594e-05f, +2.368389901e-05f, +7.763007857e-06f, +5.041228121e-04f, +4.684523500e-04f, -8.386340443e-04f, -2.502607995e-03f, -1.671564710e-03f, +2.889308604e-03f, +7.022954081e-03f, +3.857371771e-03f, -7.026155510e-03f, -1.476940467e-02f, -6.882022052e-03f, +1.367198280e-02f, +2.549810488e-02f, +1.014982897e-02f, -2.247678342e-02f, -3.771576378e-02f, -1.277010236e-02f, +3.212498523e-02f, +4.891556668e-02f, +1.390945093e-02f, -4.056537951e-02f, -5.634918672e-02f, -1.316667454e-02f, +4.565266287e-02f, +5.803280438e-02f, +1.076557078e-02f, -4.595158665e-02f, -5.352298645e-02f, -7.455599217e-03f, +4.132722598e-02f, +4.408552023e-02f, +4.175083971e-03f, -3.302116624e-02f, -3.217822554e-02f, -1.661998956e-03f, +2.316466389e-02f, +2.050885756e-02f, +2.124551303e-04f, -1.396522627e-02f, -1.111826442e-02f, +3.159521796e-04f, +6.956562969e-03f, +4.879778429e-03f, -3.060282253e-04f, -2.638516856e-03f, -1.552526508e-03f, +1.342136227e-04f, +6.021623429e-04f, -1.163351217e-05f, +1.856276310e-05f, +5.771326009e-05f, +3.026215731e-05f, -8.790692255e-05f, -1.721186407e-04f, -4.851943780e-05f, +2.439221649e-04f, +3.711605712e-04f, +4.646103780e-05f, -5.111540984e-04f, -6.461654956e-04f, +6.897906872e-07f, +8.813559796e-04f, +9.536645096e-04f, -1.096475668e-04f, -1.302433720e-03f, -1.223993503e-03f, +2.758324854e-04f, +1.686356674e-03f, +1.384900566e-03f, -4.681835516e-04f, -1.936466895e-03f, -1.390018391e-03f, +6.371072837e-04f, +1.983563450e-03f, +1.238195732e-03f, -7.333838297e-04f, -1.813865457e-03f, -9.737735056e-04f, +7.290091656e-04f, +1.474859304e-03f, +6.677900939e-04f, -6.290918642e-04f, -1.055975683e-03f, -3.899292429e-04f, +4.685544326e-04f, +6.538037531e-04f, +1.850008703e-04f, -2.957778293e-04f, -3.387264748e-04f, -6.391070698e-05f, +1.522636143e-04f, +1.375771734e-04f, +1.035235536e-05f, -5.869505005e-05f, -3.715664369e-05f, +3.568207542e-06f, /* 5,23 (48) */ -2.539739791e-04f, +4.331927624e-05f, +7.890086462e-04f, +1.232885614e-03f, +3.306418012e-04f, -1.880405434e-03f, -3.464051064e-03f, -1.877580862e-03f, +3.061822726e-03f, +7.461868927e-03f, +5.785995928e-03f, -3.386402666e-03f, -1.354233076e-02f, -1.377087989e-02f, +1.045766499e-03f, +2.186940069e-02f, +2.885435689e-02f, +7.601973562e-03f, -3.331676276e-02f, -6.025787764e-02f, -3.469013697e-02f, +5.617996315e-02f, +1.820827945e-01f, +2.823943428e-01f, +3.032023546e-01f, +2.329326463e-01f, +1.101733660e-01f, -2.192246374e-03f, -5.719613739e-02f, -4.932821543e-02f, -9.413685192e-03f, +2.318635314e-02f, +2.783451316e-02f, +1.047382708e-02f, -8.968205553e-03f, -1.542886786e-02f, -8.346377701e-03f, +2.497247646e-03f, +7.723117125e-03f, +5.399315506e-03f, +1.035195406e-05f, -3.259355658e-03f, -2.816559065e-03f, -5.484630308e-04f, +1.043025068e-03f, +1.088536623e-03f, +3.400567146e-04f, -1.921772785e-04f, -8.721441469e-07f, -1.776540592e-05f, -2.454249926e-05f, +2.257867657e-06f, +5.307786957e-05f, +7.385392033e-05f, +1.197661495e-05f, -1.097713294e-04f, -1.756631414e-04f, -7.031130021e-05f, +1.777800534e-04f, +3.549124572e-04f, +2.212530097e-04f, -2.258336362e-04f, -6.400048148e-04f, -5.519779693e-04f, +1.793641383e-04f, +1.080349702e-03f, +1.285807117e-03f, +2.122664403e-04f, -1.826925267e-03f, -3.635109170e-03f, -3.890225612e-03f, -2.130568273e-03f, +8.076191064e-04f, +3.294301130e-03f, +4.005675560e-03f, +2.793121386e-03f, +6.814618109e-04f, -9.475502706e-04f, -1.314377916e-03f, -6.306148736e-04f, +2.750605043e-04f, +6.827411283e-04f, +4.546741100e-04f, -3.689334343e-05f, -3.393552354e-04f, -2.867170601e-04f, -3.775903377e-05f, +1.505870813e-04f, +1.563900589e-04f, +4.305954150e-05f, -5.620943877e-05f, -7.068967762e-05f, -2.558345201e-05f, +1.672406700e-05f, +2.396806258e-05f, +8.313625809e-06f, +4.924893000e-04f, +4.870151131e-04f, -7.809207842e-04f, -2.472345838e-03f, -1.759471632e-03f, +2.717189964e-03f, +6.974434643e-03f, +4.101293936e-03f, -6.654994938e-03f, -1.472294363e-02f, -7.393176150e-03f, +1.302581730e-02f, +2.549879468e-02f, +1.103118495e-02f, -2.152311891e-02f, -3.782541135e-02f, -1.407253608e-02f, +3.090099172e-02f, +4.919139917e-02f, +1.559580760e-02f, -3.918047895e-02f, -5.681737027e-02f, -1.510314144e-02f, +4.426264447e-02f, +5.866991166e-02f, +1.274913423e-02f, -4.471339091e-02f, -5.425637028e-02f, -9.269464674e-03f, +4.035345248e-02f, +4.481452940e-02f, +5.649943275e-03f, -3.235337614e-02f, -3.280731741e-02f, -2.717974638e-03f, +2.277473465e-02f, +2.097741199e-02f, +8.662588835e-04f, -1.378022540e-02f, -1.141404225e-02f, -2.277429524e-05f, +6.892652262e-03f, +5.032042043e-03f, -1.684510519e-04f, -2.628164501e-03f, -1.611221558e-03f, +9.705697900e-05f, +6.057305505e-04f, -1.199389677e-05f, +1.717459974e-05f, +5.708508235e-05f, +3.271562375e-05f, -8.371623530e-05f, -1.719969615e-04f, -5.602317951e-05f, +2.351112459e-04f, +3.734894680e-04f, +6.288388262e-05f, -4.965161516e-04f, -6.540016554e-04f, -2.824672336e-05f, +8.611594400e-04f, +9.704204222e-04f, -6.646319794e-05f, -1.278821250e-03f, -1.252124341e-03f, +2.197990000e-04f, +1.662940582e-03f, +1.424572536e-03f, -4.040820973e-04f, -1.917187310e-03f, -1.438445122e-03f, +5.720388143e-04f, +1.971295339e-03f, +1.290092373e-03f, -6.747407438e-04f, -1.809432872e-03f, -1.022848338e-03f, +6.823223727e-04f, +1.476919655e-03f, +7.086615254e-04f, -5.966591145e-04f, -1.061782430e-03f, -4.196341833e-04f, +4.493521809e-04f, +6.604135915e-04f, +2.034810611e-04f, -2.865252041e-04f, -3.440429587e-04f, -7.339249953e-05f, +1.490034349e-04f, +1.407945597e-04f, +1.406085667e-05f, -5.813984021e-05f, -3.854746139e-05f, +2.686215319e-06f, /* 5,24 (48) */ -2.548461232e-04f, +2.555387032e-05f, +7.644661469e-04f, +1.235143482e-03f, +3.837196708e-04f, -1.806551514e-03f, -3.452074449e-03f, -1.987352192e-03f, +2.886159585e-03f, +7.391557627e-03f, +5.963775981e-03f, -3.031490209e-03f, -1.332107775e-02f, -1.399671352e-02f, +4.057616846e-04f, +2.131742272e-02f, +2.903372103e-02f, +8.682323264e-03f, -3.203095565e-02f, -6.004561120e-02f, -3.651706223e-02f, +5.254485398e-02f, +1.781925688e-01f, +2.802637745e-01f, +3.040099737e-01f, +2.362269475e-01f, +1.141790415e-01f, +6.008750117e-04f, -5.651467558e-02f, -5.027576570e-02f, -1.072806311e-02f, +2.255573827e-02f, +2.810957367e-02f, +1.115656820e-02f, -8.513531443e-03f, -1.546576120e-02f, -8.685732937e-03f, +2.210530586e-03f, +7.685358092e-03f, +5.549902587e-03f, +1.667420129e-04f, -3.216296117e-03f, -2.872768504e-03f, -6.191527084e-04f, +1.017441616e-03f, +1.105260690e-03f, +3.640247771e-04f, -1.838636527e-04f, -4.580078570e-07f, -1.724180117e-05f, -2.476498981e-05f, +8.777214654e-07f, +5.158945309e-05f, +7.430614754e-05f, +1.520990028e-05f, -1.060594193e-04f, -1.758302573e-04f, -7.644236730e-05f, +1.696565939e-04f, +3.531811281e-04f, +2.310957910e-04f, -2.098269225e-04f, -6.325743348e-04f, -5.652252355e-04f, +1.499382191e-04f, +1.058123249e-03f, +1.297591698e-03f, +2.647703935e-04f, -1.759068952e-03f, -3.596530898e-03f, -3.913691982e-03f, -2.210770639e-03f, +7.137124599e-04f, +3.239051608e-03f, +4.015321239e-03f, +2.851982022e-03f, +7.466178985e-04f, -9.142539476e-04f, -1.322210214e-03f, -6.601205199e-04f, +2.518208778e-04f, +6.805605342e-04f, +4.684408418e-04f, -2.253768358e-05f, -3.353918321e-04f, -2.927125456e-04f, -4.578169855e-05f, +1.473641109e-04f, +1.586868851e-04f, +4.702111702e-05f, -5.429598519e-05f, -7.145175848e-05f, -2.724700567e-05f, +1.589591286e-05f, +2.422880418e-05f, +8.868877284e-06f, +4.804954032e-04f, +5.041897128e-04f, -7.238357019e-04f, -2.439630214e-03f, -1.843187868e-03f, +2.545193002e-03f, +6.918411464e-03f, +4.336405182e-03f, -6.281505470e-03f, -1.466005975e-02f, -7.889692302e-03f, +1.237181565e-02f, +2.547054795e-02f, +1.189234439e-02f, -2.055269849e-02f, -3.789187454e-02f, -1.535135733e-02f, +2.964886738e-02f, +4.941119817e-02f, +1.725874818e-02f, -3.775590641e-02f, -5.722145237e-02f, -1.702032875e-02f, +4.282419935e-02f, +5.924195048e-02f, +1.472042957e-02f, -4.342329854e-02f, -5.493111103e-02f, -1.107889755e-02f, +3.933060414e-02f, +4.549685177e-02f, +7.126862931e-03f, -3.164471462e-02f, -3.340397652e-02f, -3.779757068e-03f, +2.235510046e-02f, +2.142676417e-02f, +1.526672475e-03f, -1.357674434e-02f, -1.170056746e-02f, -3.668172540e-04f, +6.819259763e-03f, +5.181045478e-03f, -2.765649223e-05f, -2.614103644e-03f, -1.669361398e-03f, +5.850951761e-05f, +6.084167658e-04f, -1.231862419e-05f, +1.580284829e-05f, +5.639053797e-05f, +3.506461595e-05f, -7.950518296e-05f, -1.716572328e-04f, -6.332576399e-05f, +2.261509316e-04f, +3.753330419e-04f, +7.901772440e-05f, -4.814633604e-04f, -6.609863865e-04f, -5.687146046e-05f, +8.401394188e-04f, +9.859275928e-04f, -2.349719803e-05f, -1.253885324e-03f, -1.278680614e-03f, +1.637582340e-04f, +1.637716154e-03f, +1.462515425e-03f, -3.396523490e-04f, -1.895757366e-03f, -1.485213656e-03f, +5.063084046e-04f, +1.956777258e-03f, +1.340610040e-03f, -6.151864918e-04f, -1.802922556e-03f, -1.070949660e-03f, +6.346300523e-04f, +1.477293135e-03f, +7.489789079e-04f, -5.632960958e-04f, -1.066399226e-03f, -4.491216100e-04f, +4.294212432e-04f, +6.663114089e-04f, +2.219489135e-04f, -2.767945562e-04f, -3.490151391e-04f, -8.294247518e-05f, +1.454898128e-04f, +1.438921311e-04f, +1.783680397e-05f, -5.748515713e-05f, -3.991988566e-05f, +1.768012448e-06f, /* 5,25 (48) */ -2.553041311e-04f, +8.312069153e-06f, +7.397011571e-04f, +1.236021203e-03f, +4.353091239e-04f, -1.732245367e-03f, -3.436864548e-03f, -2.093411611e-03f, +2.710329328e-03f, +7.315115260e-03f, +6.133432575e-03f, -2.678309081e-03f, -1.308998196e-02f, -1.420654044e-02f, -2.268126503e-04f, +2.075219748e-02f, +2.918365925e-02f, +9.740446513e-03f, -3.073336395e-02f, -5.978084081e-02f, -3.827613119e-02f, +4.894832309e-02f, +1.742788769e-01f, +2.780530039e-01f, +3.047236861e-01f, +2.394659991e-01f, +1.181943628e-01f, +3.452857034e-03f, -5.576805768e-02f, -5.119001965e-02f, -1.205027332e-02f, +2.189561775e-02f, +2.836139455e-02f, +1.183712874e-02f, -8.045090601e-03f, -1.548829888e-02f, -9.021124769e-03f, +1.917818040e-03f, +7.639576393e-03f, +5.697266698e-03f, +3.254288980e-04f, -3.169275000e-03f, -2.927064489e-03f, -6.906044669e-04f, +9.901946107e-04f, +1.121156602e-03f, +3.882535813e-04f, -1.749947754e-04f, -5.634856882e-08f, -1.670976246e-05f, -2.495223275e-05f, -4.735395420e-07f, +5.007421371e-05f, +7.467188368e-05f, +1.837338947e-05f, -1.022983425e-04f, -1.758196513e-04f, -8.241240968e-05f, +1.614763310e-04f, +3.511310192e-04f, +2.405944913e-04f, -1.938165692e-04f, -6.246380358e-04f, -5.777838078e-04f, +1.207398156e-04f, +1.035222544e-03f, +1.308054313e-03f, +3.162242503e-04f, -1.691046668e-03f, -3.556393705e-03f, -3.935068360e-03f, -2.289705519e-03f, +6.193914536e-04f, +3.181989019e-03f, +4.022965919e-03f, +2.909889168e-03f, +8.122621241e-04f, -8.796439193e-04f, -1.328941313e-03f, -6.893924609e-04f, +2.280557008e-04f, +6.777073783e-04f, +4.819284022e-04f, -7.981125454e-06f, -3.310511696e-04f, -2.984998835e-04f, -5.386984442e-05f, +1.439462797e-04f, +1.608573953e-04f, +5.099895153e-05f, -5.229130969e-05f, -7.215062819e-05f, -2.891464378e-05f, +1.502953948e-05f, +2.446523357e-05f, +9.428075830e-06f, +4.681767790e-04f, +5.199925611e-04f, -6.674451639e-04f, -2.404565598e-03f, -1.922693051e-03f, +2.373535769e-03f, +6.855085700e-03f, +4.562556114e-03f, -5.906172429e-03f, -1.458104203e-02f, -8.371155662e-03f, +1.171082926e-02f, +2.541367649e-02f, +1.273248380e-02f, -1.956677089e-02f, -3.791537174e-02f, -1.660524265e-02f, +2.837018677e-02f, +4.957495640e-02f, +1.889646434e-02f, -3.629339099e-02f, -5.756110472e-02f, -1.891608611e-02f, +4.133898570e-02f, +5.974825888e-02f, +1.667720682e-02f, -4.208268850e-02f, -5.554629752e-02f, -1.288182010e-02f, +3.825965448e-02f, +4.613148183e-02f, +8.604156065e-03f, -3.089573571e-02f, -3.396727262e-02f, -4.846156295e-03f, +2.190597885e-02f, +2.185618541e-02f, +2.192983884e-03f, -1.335479543e-02f, -1.197736201e-02f, -7.158323930e-04f, +6.736317288e-03f, +5.326535291e-03f, +1.162356389e-04f, -2.596266840e-03f, -1.726846555e-03f, +1.858963195e-05f, +6.101847783e-04f, -1.260821934e-05f, +1.444930562e-05f, +5.563235826e-05f, +3.730813087e-05f, -7.527996901e-05f, -1.711039439e-04f, -7.042111331e-05f, +2.170548800e-04f, +3.766957546e-04f, +9.484636779e-05f, -4.660188261e-04f, -6.671201672e-04f, -8.515313225e-05f, +8.183278745e-04f, +1.000177170e-03f, +1.920138852e-05f, -1.227662917e-03f, -1.303639304e-03f, +1.077754521e-04f, +1.610719037e-03f, +1.498689992e-03f, -2.749696122e-04f, -1.872204622e-03f, -1.530270760e-03f, +4.399920438e-04f, +1.940023976e-03f, +1.389687861e-03f, -5.547880913e-04f, -1.794335564e-03f, -1.118017518e-03f, +5.859833326e-04f, +1.475970030e-03f, +7.886911375e-04f, -5.290357102e-04f, -1.069810928e-03f, -4.783540991e-04f, +4.087784712e-04f, +6.714820789e-04f, +2.403814012e-04f, -2.665916643e-04f, -3.536315659e-04f, -9.254930693e-05f, +1.417228871e-04f, +1.468632456e-04f, +2.167626924e-05f, -5.672955354e-05f, -4.127118779e-05f, +8.141264825e-07f, /* 5,26 (48) */ -2.553604797e-04f, -8.397693308e-06f, +7.147489243e-04f, +1.235547664e-03f, +4.853833376e-04f, -1.657573483e-03f, -3.418491159e-03f, -2.195709953e-03f, +2.534509676e-03f, +7.232702850e-03f, +6.294908906e-03f, -2.327178061e-03f, -1.284938747e-02f, -1.440035701e-02f, -8.514506861e-04f, +2.017441367e-02f, +2.930439907e-02f, +1.077566906e-02f, -2.942530964e-02f, -5.946461656e-02f, -3.996717785e-02f, +4.539192938e-02f, +1.703438085e-01f, +2.757632984e-01f, +3.053430776e-01f, +2.426479881e-01f, +1.222173287e-01f, +6.362746202e-03f, -5.495579556e-02f, -5.206966357e-02f, -1.337921463e-02f, +2.120622529e-02f, +2.858945025e-02f, +1.251483612e-02f, -7.563162199e-03f, -1.549628001e-02f, -9.352175938e-03f, +1.619318156e-03f, +7.585706549e-03f, +5.841212978e-03f, +4.862862933e-04f, -3.118276048e-03f, -2.979355799e-03f, -7.627550950e-04f, +9.612799669e-04f, +1.136186142e-03f, +4.127188149e-04f, -1.655666996e-04f, +3.325513140e-07f, -1.617020805e-05f, -2.510476735e-05f, -1.794912561e-06f, +4.853434916e-05f, +7.495222276e-05f, +2.146486268e-05f, -9.849273735e-05f, -1.756338820e-04f, -8.821764323e-05f, +1.532480920e-04f, +3.487681447e-04f, +2.497441538e-04f, -1.778178744e-04f, -6.162093691e-04f, -5.896502377e-04f, +9.179265262e-05f, +1.011676179e-03f, +1.317203614e-03f, +3.666031161e-04f, -1.622904620e-03f, -3.514732883e-03f, -3.954350967e-03f, -2.367329218e-03f, +5.247107342e-04f, +3.123141668e-03f, +4.028594211e-03f, +2.966798390e-03f, +8.783544077e-04f, -8.437302523e-04f, -1.334551005e-03f, -7.184013214e-04f, +2.037806323e-04f, +6.741762959e-04f, +4.951205242e-04f, +6.764669129e-06f, -3.263327849e-04f, -3.040706252e-04f, -6.201620534e-05f, +1.403343294e-04f, +1.628974510e-04f, +5.498908266e-05f, -5.019605233e-05f, -7.278435928e-05f, -3.058450494e-05f, +1.412519415e-05f, +2.467647407e-05f, +9.990514341e-06f, +4.555685597e-04f, +5.344418668e-04f, -6.118128057e-04f, -2.367257467e-03f, -1.997973020e-03f, +2.202431825e-03f, +6.784664586e-03f, +4.779610994e-03f, -5.529476674e-03f, -1.448619566e-02f, -8.837174489e-03f, +1.104370909e-02f, +2.532852336e-02f, +1.355081168e-02f, -1.856659372e-02f, -3.789617035e-02f, -1.783290557e-02f, +2.706654746e-02f, +4.968273185e-02f, +2.050718337e-02f, -3.479470099e-02f, -5.783607433e-02f, -2.078829074e-02f, +3.980871493e-02f, +6.018825092e-02f, +1.861723080e-02f, -4.069300064e-02f, -5.610108561e-02f, -1.467615567e-02f, +3.714163696e-02f, +4.671746516e-02f, +1.008012610e-02f, -3.010704457e-02f, -3.449630833e-02f, -5.915967223e-03f, +2.142762475e-02f, +2.226496388e-02f, +2.864465963e-03f, -1.311441403e-02f, -1.224395368e-02f, -1.069463959e-03f, +6.643767981e-03f, +5.468258178e-03f, +2.630988845e-04f, -2.574590571e-03f, -1.783576109e-03f, -2.268155584e-05f, +6.109989047e-04f, -1.286325678e-05f, +1.311569267e-05f, +5.481331037e-05f, +3.944534245e-05f, -7.104669728e-05f, -1.703417977e-04f, -7.730352398e-05f, +2.078367251e-04f, +3.775826245e-04f, +1.103542023e-04f, -4.502058804e-04f, -6.724045223e-04f, -1.130611588e-04f, +7.957574627e-04f, +1.013161888e-03f, +6.158416111e-05f, -1.200192326e-03f, -1.326979411e-03f, +5.191557569e-05f, +1.581986859e-03f, +1.533059196e-03f, -2.101093419e-04f, -1.846559109e-03f, -1.573565251e-03f, +3.731664260e-04f, +1.921052916e-03f, +1.437266567e-03f, -4.936137165e-04f, -1.783675417e-03f, -1.163992963e-03f, +5.364347167e-04f, +1.472942613e-03f, +8.277475240e-04f, -4.939121784e-04f, -1.072003745e-03f, -5.072942109e-04f, +3.874417647e-04f, +6.759112251e-04f, +2.587552704e-04f, -2.559229908e-04f, -3.578810928e-04f, -1.022014149e-04f, +1.377031470e-04f, +1.497013158e-04f, +2.557515028e-05f, -5.587170545e-05f, -4.259860619e-05f, -1.748371843e-07f, /* 5,27 (48) */ -2.550279284e-04f, -2.456790136e-05f, +6.896441570e-04f, +1.233752751e-03f, +5.339176868e-04f, -1.582621260e-03f, -3.397026296e-03f, -2.294202691e-03f, +2.358875794e-03f, +7.144485207e-03f, +6.448156998e-03f, -1.978409917e-03f, -1.259964332e-02f, -1.457817489e-02f, -1.467660055e-03f, +1.958476344e-02f, +2.939619172e-02f, +1.178734524e-02f, -2.810810602e-02f, -5.909801344e-02f, -4.159008247e-02f, +4.187719650e-02f, +1.663894575e-01f, +2.733959691e-01f, +3.058677883e-01f, +2.457711298e-01f, +1.262459229e-01f, +9.329544592e-03f, -5.407744115e-02f, -5.291339382e-02f, -1.471376564e-02f, +2.048782397e-02f, +2.879323088e-02f, +1.318901241e-02f, -7.068041675e-03f, -1.548951534e-02f, -9.678508723e-03f, +1.315247531e-03f, +7.523690343e-03f, +5.981547307e-03f, +6.491837443e-04f, -3.063286966e-03f, -3.029551851e-03f, -8.355394543e-04f, +9.306954619e-04f, +1.150311336e-03f, +4.373952890e-04f, -1.555761852e-04f, +7.084341628e-07f, -1.562404701e-05f, -2.522316587e-05f, -3.085449097e-06f, +4.697204714e-05f, +7.514833557e-05f, +2.448221192e-05f, -9.464722144e-05f, -1.752756536e-04f, -9.385450125e-05f, +1.449806409e-04f, +3.460987533e-04f, +2.585402193e-04f, -1.618459476e-04f, -6.073020941e-04f, -6.008217499e-04f, +6.311996246e-05f, +9.875129711e-04f, +1.325049194e-03f, +4.158831038e-04f, -1.554688781e-03f, -3.471584587e-03f, -3.971537433e-03f, -2.443598970e-03f, +4.297252058e-04f, +3.062539108e-03f, +4.032192029e-03f, +3.022665690e-03f, +9.448540396e-04f, -8.065241007e-04f, -1.339019774e-03f, -7.471176191e-04f, +1.790119753e-04f, +6.699624954e-04f, +5.080010344e-04f, +2.168771654e-05f, -3.212365825e-04f, -3.094164336e-04f, -7.021336113e-05f, +1.365292130e-04f, +1.648029922e-04f, +5.898747491e-05f, -4.801096373e-05f, -7.335106579e-05f, -3.225469128e-05f, +1.318317613e-05f, +2.486166402e-05f, +1.055546563e-05f, +4.427053029e-04f, +5.475575594e-04f, -5.569994953e-04f, -2.327812125e-03f, -2.069019717e-03f, +2.032090028e-03f, +6.707361062e-03f, +4.987447719e-03f, -5.151894049e-03f, -1.437584146e-02f, -9.287380369e-03f, +1.037130457e-02f, +2.521546220e-02f, +1.434656914e-02f, -1.755343184e-02f, -3.783458619e-02f, -1.903309789e-02f, +2.573956805e-02f, +4.973464743e-02f, +2.208917023e-02f, -3.326164180e-02f, -5.804618367e-02f, -2.263484985e-02f, +3.823514968e-02f, +6.056141735e-02f, +2.053828372e-02f, -3.925573407e-02f, -5.659469933e-02f, -1.645983108e-02f, +3.597764400e-02f, +4.725389987e-02f, +1.155306871e-02f, -2.927929705e-02f, -3.499022051e-02f, -6.987970968e-03f, +2.092033054e-02f, +2.265240565e-02f, +3.540377188e-03f, -1.285565876e-02f, -1.249987667e-02f, -1.427345052e-03f, +6.541566566e-03f, +5.605961325e-03f, +4.128002002e-04f, -2.549015421e-03f, -1.839447814e-03f, -6.528016204e-05f, +6.108240676e-04f, -1.308435842e-05f, +1.180365334e-05f, +5.393619212e-05f, +4.147559932e-05f, -6.681136497e-05f, -1.693757007e-04f, -8.396766904e-05f, +1.985100593e-04f, +3.779992129e-04f, +1.255262157e-04f, -4.340480528e-04f, -6.768420109e-04f, -1.405657006e-04f, +7.724614896e-04f, +1.024876061e-03f, +1.036034182e-04f, -1.171513123e-03f, -1.348681970e-03f, -3.756894563e-06f, +1.551559172e-03f, +1.565588232e-03f, -1.451470514e-04f, -1.818853291e-03f, -1.615048053e-03f, +3.059088574e-04f, +1.899884136e-03f, +1.483288570e-03f, -4.317326185e-04f, -1.770948110e-03f, -1.208818120e-03f, +4.860380252e-04f, +1.468205161e-03f, +8.660978565e-04f, -4.579610073e-04f, -1.072965264e-03f, -5.359045371e-04f, +3.654300590e-04f, +6.795852465e-04f, +2.770470667e-04f, -2.447956822e-04f, -3.617528960e-04f, -1.118869784e-04f, +1.334314370e-04f, +1.523998194e-04f, +2.952917350e-05f, -5.491041683e-05f, -4.389935025e-05f, -1.198194503e-06f, /* 5,28 (48) */ -2.543194942e-04f, -4.019194836e-05f, +6.644209911e-04f, +1.230667302e-03f, +5.808897339e-04f, -1.507472925e-03f, -3.372544084e-03f, -2.388849912e-03f, +2.183600141e-03f, +7.050630706e-03f, +6.593137639e-03f, -1.632311164e-03f, -1.234110310e-02f, -1.474002084e-02f, -2.074962149e-03f, +1.898394169e-02f, +2.945931168e-02f, +1.277485821e-02f, -2.678305683e-02f, -5.868213034e-02f, -4.314477126e-02f, +3.840561191e-02f, +1.624179201e-01f, +2.709523702e-01f, +3.062975135e-01f, +2.488336689e-01f, +1.302781149e-01f, +1.235221028e-02f, -5.313258711e-02f, -5.371991792e-02f, -1.605278541e-02f, +1.974070635e-02f, +2.897224286e-02f, +1.385897491e-02f, -6.560040640e-03f, -1.546782762e-02f, -9.999745306e-03f, +1.005831098e-03f, +7.453476982e-03f, +6.118076521e-03f, +8.139867365e-04f, -3.004299491e-03f, -3.077562815e-03f, -9.088905201e-04f, +8.984407707e-04f, +1.163494512e-03f, +4.622569530e-04f, -1.450207196e-04f, +1.071067014e-06f, -1.507217817e-05f, -2.530803227e-05f, -4.344255180e-06f, +4.538948299e-05f, +7.526146721e-05f, +2.742344173e-05f, -9.076638712e-05f, -1.747478114e-04f, -9.931963539e-05f, +1.366826693e-04f, +3.431293195e-04f, +2.669785256e-04f, -1.459156977e-04f, -5.979302622e-04f, -6.112962379e-04f, +3.474447002e-05f, +9.627619319e-04f, +1.331601571e-03f, +4.640413452e-04f, -1.486444859e-03f, -3.426985803e-03f, -3.986626796e-03f, -2.518472968e-03f, +3.344899904e-04f, +3.000212120e-03f, +4.033746599e-03f, +3.077447539e-03f, +1.011719708e-03f, -7.680377050e-04f, -1.342328824e-03f, -7.755117888e-04f, +1.537666687e-04f, +6.650617683e-04f, +5.205538694e-04f, +3.677571941e-05f, -3.157628388e-04f, -3.145290927e-04f, -7.845374324e-05f, +1.325320967e-04f, +1.665700430e-04f, +6.299002298e-05f, -4.573690588e-05f, -7.384890615e-05f, -3.392327012e-05f, +1.220383718e-05f, +2.501995817e-05f, +1.112218308e-05f, +4.296209445e-04f, +5.593612128e-04f, -5.030633032e-04f, -2.286336525e-03f, -2.135831082e-03f, +1.862714327e-03f, +6.623393393e-03f, +5.185957778e-03f, -4.773894837e-03f, -1.425031524e-02f, -9.721428422e-03f, +9.694462559e-03f, +2.507489650e-02f, +1.511903063e-02f, -1.652855578e-02f, -3.773098278e-02f, -2.020461102e-02f, +2.439088608e-02f, +4.973089053e-02f, +2.364072940e-02f, -3.169605357e-02f, -5.819133072e-02f, -2.445370314e-02f, +3.662010163e-02f, +6.086732621e-02f, +2.243816785e-02f, -3.777244550e-02f, -5.702643195e-02f, -1.823077919e-02f, +3.476882588e-02f, +4.773993790e-02f, +1.302127387e-02f, -2.841319919e-02f, -3.544818151e-02f, -8.060936232e-03f, +2.038442601e-02f, +2.301783571e-02f, +4.219962434e-03f, -1.257861169e-02f, -1.274467235e-02f, -1.789097948e-03f, +6.429679587e-03f, +5.739392762e-03f, +5.652000196e-04f, -2.519486247e-03f, -1.894358231e-03f, -1.091795123e-04f, +6.096258730e-04f, -1.327219129e-05f, +1.051475348e-05f, +5.300382693e-05f, +4.339842234e-05f, -6.257985583e-05f, -1.682107523e-04f, -9.040859955e-05f, +1.890884151e-04f, +3.779516098e-04f, +1.403480063e-04f, -4.175690386e-04f, -6.804362127e-04f, -1.676376893e-04f, +7.484738657e-04f, +1.035315582e-03f, +1.452122113e-04f, -1.141666093e-03f, -1.368730061e-03f, -5.917795491e-05f, +1.519477402e-03f, +1.596244569e-03f, -8.015822091e-05f, -1.789122022e-03f, -1.654672260e-03f, +2.382971639e-04f, +1.876540307e-03f, +1.527698035e-03f, -3.692150440e-04f, -1.756162112e-03f, -1.252436269e-03f, +4.348483358e-04f, +1.461753968e-03f, +9.036924671e-04f, -4.212189541e-04f, -1.072684480e-03f, -5.641477479e-04f, +3.427633103e-04f, +6.824913432e-04f, +2.952331641e-04f, -2.332175677e-04f, -3.652364931e-04f, -1.215939488e-04f, +1.289089615e-04f, +1.549523100e-04f, +3.353389702e-05f, -5.384462416e-05f, -4.517060431e-05f, -2.255182080e-06f, /* 5,29 (48) */ -2.532484272e-04f, -5.526412654e-05f, +6.391129589e-04f, +1.226323047e-03f, +6.262792169e-04f, -1.432211457e-03f, -3.345120643e-03f, -2.479616299e-03f, +2.008852329e-03f, +6.951311070e-03f, +6.729820308e-03f, -1.289181844e-03f, -1.207412457e-02f, -1.488593653e-02f, -2.672892411e-03f, +1.837264545e-02f, +2.949405615e-02f, +1.373762014e-02f, -2.545145526e-02f, -5.821808899e-02f, -4.463121611e-02f, +3.497862611e-02f, +1.584312933e-01f, +2.684338972e-01f, +3.066320035e-01f, +2.518338810e-01f, +1.343118615e-01f, +1.542965782e-02f, -5.212086740e-02f, -5.448795563e-02f, -1.739511424e-02f, +1.896519456e-02f, +2.912600952e-02f, +1.452403668e-02f, -6.039486771e-03f, -1.543105190e-02f, -1.031550814e-02f, +6.913020049e-04f, +7.375023239e-03f, +6.250608617e-03f, +9.805567796e-04f, -2.941309468e-03f, -3.123299721e-03f, -9.827394263e-04f, +8.645175005e-04f, +1.175698349e-03f, +4.872769112e-04f, -1.338985365e-04f, +1.420241427e-06f, -1.451548917e-05f, -2.536000083e-05f, -5.570491509e-06f, +4.378881732e-05f, +7.529293449e-05f, +3.028666972e-05f, -8.685479693e-05f, -1.740533367e-04f, -1.046099163e-04f, +1.283627894e-04f, +3.398665344e-04f, +2.750553076e-04f, -1.300418210e-04f, -5.881082002e-04f, -6.210722581e-04f, +6.688377871e-06f, +9.374522451e-04f, +1.336872173e-03f, +5.110560018e-04f, -1.418218264e-03f, -3.380974317e-03f, -3.999619503e-03f, -2.591910390e-03f, +2.390603885e-04f, +2.936192693e-03f, +4.033246478e-03f, +3.131100912e-03f, +1.078909526e-03f, -7.282843910e-04f, -1.344460098e-03f, -8.035542069e-04f, +1.280622791e-04f, +6.594704999e-04f, +5.327630927e-04f, +5.201607505e-05f, -3.099122062e-04f, -3.194005173e-04f, -8.672964061e-05f, +1.283443613e-04f, +1.681947169e-04f, +6.699255526e-05f, -4.337485293e-05f, -7.427608600e-05f, -3.558827568e-05f, +1.118758209e-05f, +2.515052909e-05f, +1.168990126e-05f, +4.163487532e-04f, +5.698759662e-04f, -4.500594762e-04f, -2.242938103e-03f, -2.198410938e-03f, +1.694503575e-03f, +6.532984794e-03f, +5.375046193e-03f, -4.395943227e-03f, -1.410996723e-02f, -1.013899746e-02f, +9.014026346e-03f, +2.490725881e-02f, +1.586750450e-02f, -1.549324019e-02f, -3.758577056e-02f, -2.134627711e-02f, +2.302215602e-02f, +4.967171258e-02f, +2.516020681e-02f, -3.009980900e-02f, -5.827148895e-02f, -2.624282516e-02f, +3.496542937e-02f, +6.110562337e-02f, +2.431470816e-02f, -3.624474747e-02f, -5.739564699e-02f, -1.998694131e-02f, +3.351638961e-02f, +4.817478624e-02f, +1.448302784e-02f, -2.750950673e-02f, -3.586940047e-02f, -9.133620712e-03f, +1.982027826e-02f, +2.336059902e-02f, +4.902453778e-03f, -1.228337852e-02f, -1.297788992e-02f, -2.154334441e-03f, +6.308085639e-03f, +5.868301724e-03f, +7.201523296e-04f, -2.485952350e-03f, -1.948202855e-03f, -1.543501166e-04f, +6.073706910e-04f, -1.342746520e-05f, +9.250480050e-06f, +5.201905875e-05f, +4.521350195e-05f, -5.835793373e-05f, -1.668522344e-04f, -9.662174551e-05f, +1.795852487e-04f, +3.774464191e-04f, +1.548057940e-04f, -4.007926665e-04f, -6.831917134e-04f, -1.942488568e-04f, +7.238290583e-04f, +1.044477917e-03f, +1.863643975e-04f, -1.110693183e-03f, -1.387108823e-03f, -1.142841741e-04f, +1.485784786e-03f, +1.624997983e-03f, -1.521820702e-05f, -1.757402499e-03f, -1.692393190e-03f, +1.704095971e-04f, +1.851046690e-03f, +1.570440944e-03f, -3.061321530e-04f, -1.739328359e-03f, -1.294791911e-03f, +3.829219223e-04f, +1.453587369e-03f, +9.404822960e-04f, -3.837239896e-04f, -1.071151816e-03f, -5.919866399e-04f, +3.194624803e-04f, +6.846175414e-04f, +3.132897930e-04f, -2.211971578e-04f, -3.683217620e-04f, -1.313100623e-04f, +1.241372887e-04f, +1.573524280e-04f, +3.758471417e-05f, -5.267340081e-05f, -4.640953171e-05f, -3.344956610e-06f, /* 5,30 (48) */ -2.518281858e-04f, -6.977961571e-05f, +6.137529580e-04f, +1.220752556e-03f, +6.700680342e-04f, -1.356918523e-03f, -3.314833973e-03f, -2.566471096e-03f, +1.834798993e-03f, +6.846701154e-03f, +6.858183098e-03f, -9.493153096e-04f, -1.179906927e-02f, -1.501597835e-02f, -3.261000612e-03f, +1.775157319e-02f, +2.950074453e-02f, +1.467507238e-02f, -2.411458308e-02f, -5.770703299e-02f, -4.604943438e-02f, +3.159765179e-02f, +1.544316738e-01f, +2.658419868e-01f, +3.068710639e-01f, +2.547700737e-01f, +1.383451080e-01f, +1.856075873e-02f, -5.104195788e-02f, -5.521624002e-02f, -1.873957433e-02f, +1.816164035e-02f, +2.925407180e-02f, +1.518350718e-02f, -5.506723678e-03f, -1.537903583e-02f, -1.062542035e-02f, +3.719014876e-04f, +7.288293598e-03f, +6.378952979e-03f, +1.148751496e-03f, -2.874316912e-03f, -3.166674574e-03f, -1.057015512e-03f, +8.289292249e-04f, +1.186885931e-03f, +5.124274402e-04f, -1.222086353e-04f, +1.755773309e-06f, -1.395485539e-05f, -2.537973484e-05f, -6.763373530e-06f, +4.217219376e-05f, +7.524412339e-05f, +3.307012695e-05f, -8.291697915e-05f, -1.731953418e-04f, -1.097224341e-04f, +1.200295256e-04f, +3.363172964e-04f, +2.827671959e-04f, -1.142387896e-04f, -5.778504940e-04f, -6.301490248e-04f, -2.102664783e-05f, +9.116132390e-04f, +1.340873323e-03f, +5.569062743e-04f, -1.350054072e-03f, -3.333588684e-03f, -4.010517398e-03f, -2.663871431e-03f, +1.434918397e-04f, +2.870514001e-03f, +4.030681563e-03f, +3.183583322e-03f, +1.146381061e-03f, -6.872785669e-04f, -1.345396299e-03f, -8.312152161e-04f, +1.019169912e-04f, +6.531856788e-04f, +5.446129107e-04f, +6.739588425e-05f, -3.036857170e-04f, -3.240227631e-04f, -9.503320589e-05f, +1.239676040e-04f, +1.696732221e-04f, +7.099083746e-05f, -4.092589172e-05f, -7.463086104e-05f, -3.724771090e-05f, +1.013486907e-05f, +2.525256859e-05f, +1.225783667e-05f, +4.029212880e-04f, +5.791264463e-04f, -3.980404175e-04f, -2.197724601e-03f, -2.256768871e-03f, +1.527651340e-03f, +6.436363048e-03f, +5.554631442e-03f, -4.018496808e-03f, -1.395516144e-02f, -1.053979013e-02f, +8.330834633e-03f, +2.471300995e-02f, +1.659133356e-02f, -1.444876228e-02f, -3.739940617e-02f, -2.245697029e-02f, +2.163504720e-02f, +4.955742841e-02f, +2.664599159e-02f, -2.847481101e-02f, -5.828670715e-02f, -2.800022766e-02f, +3.327303618e-02f, +6.127603297e-02f, +2.616575485e-02f, -3.467430652e-02f, -5.770177914e-02f, -2.172626967e-02f, +3.222159770e-02f, +4.855770816e-02f, +1.593661521e-02f, -2.656902443e-02f, -3.625312446e-02f, -1.020477253e-02f, +1.922829162e-02f, +2.368006150e-02f, +5.587071319e-03f, -1.197008873e-02f, -1.319908707e-02f, -2.522656203e-03f, +6.176775576e-03f, +5.992439012e-03f, +8.775047576e-04f, -2.448367636e-03f, -2.000876256e-03f, -2.007596483e-04f, +6.040257344e-04f, -1.355093038e-05f, +8.012240443e-06f, +5.098474714e-05f, +4.692069522e-05f, -5.415123641e-05f, -1.653056012e-04f, -1.026029163e-04f, +1.700139223e-04f, +3.764907428e-04f, +1.688864313e-04f, -3.837428672e-04f, -6.851140893e-04f, -2.203717640e-04f, +6.985620449e-04f, +1.052362092e-03f, +2.270146915e-04f, -1.078637439e-03f, -1.403805461e-03f, -1.690127679e-04f, +1.450526321e-03f, +1.651820586e-03f, +4.959784783e-05f, -1.723734218e-03f, -1.728168432e-03f, +1.023247407e-04f, +1.823431103e-03f, +1.611465173e-03f, -2.425559345e-04f, -1.720460254e-03f, -1.335830847e-03f, +3.303161911e-04f, +1.443705745e-03f, +9.764189553e-04f, -3.455152596e-04f, -1.068359147e-03f, -6.193841835e-04f, +2.955495186e-04f, +6.859527169e-04f, +3.311930698e-04f, -2.087436413e-04f, -3.709989590e-04f, -1.410228537e-04f, +1.191183543e-04f, +1.595939104e-04f, +4.167685723e-05f, -5.139596134e-05f, -4.761327908e-05f, -4.466594439e-06f, /* 5,31 (48) */ -2.500724124e-04f, -8.373447109e-05f, +5.883732232e-04f, +1.213989182e-03f, +7.122402280e-04f, -1.281674399e-03f, -3.281763846e-03f, -2.649388075e-03f, +1.661603651e-03f, +6.736978720e-03f, +6.978212623e-03f, -6.129980132e-04f, -1.151630207e-02f, -1.513021714e-02f, -3.838851106e-03f, +1.712142417e-02f, +2.947971788e-02f, +1.558668562e-02f, -2.277370976e-02f, -5.715012672e-02f, -4.739948845e-02f, +2.826406311e-02f, +1.504211564e-01f, +2.631781154e-01f, +3.070145557e-01f, +2.576405877e-01f, +1.423757896e-01f, +2.174434206e-02f, -4.989557681e-02f, -5.590351858e-02f, -2.008497063e-02f, +1.733042513e-02f, +2.935598879e-02f, +1.583669286e-02f, -4.962110768e-03f, -1.531163994e-02f, -1.092910607e-02f, +4.787872449e-05f, +7.193260392e-03f, +6.502920583e-03f, +1.318424719e-03f, -2.803326075e-03f, -3.207600465e-03f, -1.131646373e-03f, +7.916815140e-04f, +1.197020801e-03f, +5.376800088e-04f, -1.099507986e-04f, +2.077502712e-06f, -1.339113908e-05f, -2.536792522e-05f, -7.922171439e-06f, +4.054173673e-05f, +7.511648637e-05f, +3.577215824e-05f, -7.895742338e-05f, -1.721770654e-04f, -1.146544985e-04f, +1.116913074e-04f, +3.324887018e-04f, +2.901112160e-04f, -9.852083963e-05f, -5.671719722e-04f, -6.385264040e-04f, -4.837949091e-05f, +8.852743607e-04f, +1.343618217e-03f, +6.015724119e-04f, -1.281996999e-03f, -3.284868198e-03f, -4.019323722e-03f, -2.734317328e-03f, +4.783988299e-05f, +2.803210385e-03f, +4.026043107e-03f, +3.234852854e-03f, +1.214091364e-03f, -6.450357199e-04f, -1.345120911e-03f, -8.584651506e-04f, +7.534959806e-05f, +6.462049060e-04f, +5.560876896e-04f, +8.290196051e-05f, -2.970847865e-04f, -3.283880359e-04f, -1.033564617e-04f, +1.194036389e-04f, +1.710018670e-04f, +7.498057630e-05f, -3.839122229e-05f, -7.491153978e-05f, -3.889954925e-05f, +9.046210131e-06f, +2.532528913e-05f, +1.282518843e-05f, +3.893703576e-04f, +5.871386867e-04f, -3.470556704e-04f, -2.150803906e-03f, -2.310920108e-03f, +1.362345739e-03f, +6.333760132e-03f, +5.724645364e-03f, -3.642006065e-03f, -1.378627501e-02f, -1.092353299e-02f, +7.645720544e-03f, +2.449263819e-02f, +1.728989560e-02f, -1.339640018e-02f, -3.717239147e-02f, -2.353560773e-02f, +2.023124174e-02f, +4.938841564e-02f, +2.809651791e-02f, -2.682299043e-02f, -5.823710931e-02f, -2.972396188e-02f, +3.154486775e-02f, +6.137835771e-02f, +2.798918595e-02f, -3.306284135e-02f, -5.794433508e-02f, -2.344672992e-02f, +3.088576685e-02f, +4.888802435e-02f, +1.738032095e-02f, -2.559260547e-02f, -3.659863972e-02f, -1.127313167e-02f, +1.860890744e-02f, +2.397561102e-02f, +6.273024036e-03f, -1.163889566e-02f, -1.340783072e-02f, -2.893655162e-03f, +6.035752723e-03f, +6.111557367e-03f, +1.037098668e-03f, -2.406690779e-03f, -2.052272217e-03f, -2.483729274e-04f, +5.995591399e-04f, -1.364337518e-05f, +6.801361925e-06f, +4.990376237e-05f, +4.852002281e-05f, -4.996526961e-05f, -1.635764684e-04f, -1.083483004e-04f, +1.603876878e-04f, +3.750921654e-04f, +1.825774125e-04f, -3.664436410e-04f, -6.862098894e-04f, -2.459798275e-04f, +6.727082646e-04f, +1.058968687e-03f, +2.671187145e-04f, -1.045542951e-03f, -1.418809249e-03f, -2.233016724e-04f, +1.413748698e-03f, +1.676686855e-03f, +1.142151055e-04f, -1.688158924e-03f, -1.761957904e-03f, +3.412141537e-05f, +1.793723894e-03f, +1.650720551e-03f, -1.785591216e-04f, -1.699573653e-03f, -1.375500241e-03f, +2.770896161e-04f, +1.432111537e-03f, +1.011454792e-03f, -3.066330440e-04f, -1.064299823e-03f, -6.463035710e-04f, +2.710473447e-04f, +6.864866184e-04f, +3.489190265e-04f, -1.958668817e-04f, -3.732587375e-04f, -1.507196706e-04f, +1.138544649e-04f, +1.616706026e-04f, +4.580540148e-05f, -5.001166561e-05f, -4.877898058e-05f, -5.619091256e-06f, /* 6, 0 (48) */ +4.968144385e-04f, +2.658533900e-04f, -8.962168723e-04f, -1.608103413e-03f, -7.788642489e-06f, +2.979420144e-03f, +3.156687553e-03f, -1.777487314e-03f, -6.981373376e-03f, -4.200072704e-03f, +6.679001343e-03f, +1.302046751e-02f, +2.733865881e-03f, -1.674345458e-02f, -2.042237500e-02f, +4.850187710e-03f, +3.528439247e-02f, +2.773502242e-02f, -2.703828769e-02f, -7.382778902e-02f, -3.314369929e-02f, +1.149897119e-01f, +2.902267079e-01f, +3.684748747e-01f, +2.902267079e-01f, +1.149897119e-01f, -3.314369929e-02f, -7.382778902e-02f, -2.703828769e-02f, +2.773502242e-02f, +3.528439247e-02f, +4.850187710e-03f, -2.042237500e-02f, -1.674345458e-02f, +2.733865881e-03f, +1.302046751e-02f, +6.679001343e-03f, -4.200072704e-03f, -6.981373376e-03f, -1.777487314e-03f, +3.156687553e-03f, +2.979420144e-03f, -7.788642489e-06f, -1.608103413e-03f, -8.962168723e-04f, +2.658533900e-04f, +4.968144385e-04f, +1.277320727e-04f, -7.206097170e-06f, +2.345369145e-05f, +4.096545548e-05f, -6.905852224e-06f, -8.675906281e-05f, -7.546324261e-05f, +7.573909431e-05f, +2.022568705e-04f, +7.646324280e-05f, -2.455625648e-04f, -3.580985825e-04f, +2.603744181e-05f, +5.634016105e-04f, +5.082121336e-04f, -3.395718620e-04f, -1.086804390e-03f, -5.736463860e-04f, +1.068031294e-03f, +2.020535961e-03f, +4.854822889e-04f, -3.056293732e-03f, -5.676763658e-03f, -4.596934279e-03f, -8.196129835e-05f, +4.496275233e-03f, +5.707482646e-03f, +3.170653092e-03f, -3.946898559e-04f, -2.015321110e-03f, -1.120316544e-03f, +5.335348884e-04f, +1.093922442e-03f, +3.714076894e-04f, -4.917967149e-04f, -5.741874250e-04f, -4.413138857e-05f, +3.537211876e-04f, +2.547523335e-04f, -6.792291394e-05f, -2.029151000e-04f, -8.143026444e-05f, +7.257614213e-05f, +8.845998205e-05f, +9.423532883e-06f, -4.059785137e-05f, -2.453583715e-05f, +6.589777155e-06f, +1.156587247e-05f, -4.968144385e-04f, -7.842817921e-04f, +8.994291019e-04f, +2.915640051e-03f, +8.438649895e-04f, -5.098406932e-03f, -6.009425829e-03f, +3.886651395e-03f, +1.308708603e-02f, +4.180565853e-03f, -1.651382305e-02f, -1.845487053e-02f, +9.460496445e-03f, +3.171517895e-02f, +1.017220246e-02f, -3.304107863e-02f, -3.524088677e-02f, +1.560130303e-02f, +5.143354543e-02f, +1.625027633e-02f, -4.622585189e-02f, -4.721341238e-02f, +1.858986948e-02f, +6.004110985e-02f, +1.858986948e-02f, -4.721341238e-02f, -4.622585189e-02f, +1.625027633e-02f, +5.143354543e-02f, +1.560130303e-02f, -3.524088677e-02f, -3.304107863e-02f, +1.017220246e-02f, +3.171517895e-02f, +9.460496445e-03f, -1.845487053e-02f, -1.651382305e-02f, +4.180565853e-03f, +1.308708603e-02f, +3.886651395e-03f, -6.009425829e-03f, -5.098406932e-03f, +8.438649895e-04f, +2.915640051e-03f, +8.994291019e-04f, -7.842817921e-04f, -6.202569526e-04f, -1.277320727e-04f, +7.206097170e-06f, -1.905086070e-05f, -7.742340156e-05f, -2.244308745e-05f, +1.497789702e-04f, +1.680758405e-04f, -1.428957736e-04f, -4.031178103e-04f, -7.079960453e-05f, +5.796643399e-04f, +5.287520583e-04f, -4.584378263e-04f, -1.058776278e-03f, -1.168871057e-04f, +1.299923556e-03f, +1.022760899e-03f, -9.173623485e-04f, -1.822672317e-03f, -1.123708632e-04f, +1.992771091e-03f, +1.381254679e-03f, -1.285058184e-03f, -2.242170783e-03f, -4.645487730e-05f, +2.215111194e-03f, +1.360178459e-03f, -1.312782922e-03f, -2.024189074e-03f, +3.287736205e-05f, +1.807031638e-03f, +9.774392195e-04f, -9.777611267e-04f, -1.325464625e-03f, +6.806222398e-05f, +1.053802351e-03f, +4.924109527e-04f, -5.086829447e-04f, -5.938112090e-04f, +5.080677731e-05f, +4.032233109e-04f, +1.552090461e-04f, -1.629782250e-04f, -1.544976859e-04f, +1.804669126e-05f, +7.810303453e-05f, +2.113479253e-05f, -2.026107605e-05f, -1.156587247e-05f, /* 6, 1 (48) */ +4.896083413e-04f, +2.893070814e-04f, -8.552514168e-04f, -1.615009265e-03f, -9.454770530e-05f, +2.903956901e-03f, +3.232426648e-03f, -1.575230443e-03f, -6.904910133e-03f, -4.445635269e-03f, +6.320902760e-03f, +1.304650495e-02f, +3.297267492e-03f, -1.623524244e-02f, -2.076194686e-02f, +3.763383320e-03f, +3.471074609e-02f, +2.880305371e-02f, -2.501775173e-02f, -7.334230673e-02f, -3.619999302e-02f, +1.093129482e-01f, +2.856297736e-01f, +3.683929135e-01f, +2.947229831e-01f, +1.206971945e-01f, -2.997304620e-02f, -7.422247888e-02f, -2.905360880e-02f, +2.661470588e-02f, +3.581792736e-02f, +5.944110152e-03f, -2.005096731e-02f, -1.723525129e-02f, +2.159678456e-03f, +1.297633612e-02f, +7.032722530e-03f, -3.945320371e-03f, -7.049296290e-03f, -1.980402414e-03f, +3.075257289e-03f, +3.051996286e-03f, +8.067133956e-05f, -1.598679880e-03f, -9.368147236e-04f, +2.413175528e-04f, +5.034042156e-04f, +1.392979451e-04f, -7.791242229e-06f, +2.236071049e-05f, +4.126109227e-05f, -4.429146330e-06f, -8.496304936e-05f, -7.819246260e-05f, +7.003201622e-05f, +2.013257369e-04f, +8.477603732e-05f, -2.361598639e-04f, -3.619299538e-04f, +8.136198435e-06f, +5.519882992e-04f, +5.237462362e-04f, -3.076704192e-04f, -1.078335946e-03f, -6.124905293e-04f, +1.015080108e-03f, +2.023109414e-03f, +5.740791932e-04f, -2.941027388e-03f, -5.642146737e-03f, -4.693945103e-03f, -2.458165803e-04f, +4.392039864e-03f, +5.734251616e-03f, +3.283990837e-03f, -3.017665142e-04f, -2.007432595e-03f, -1.171860555e-03f, +4.921922220e-04f, +1.099664087e-03f, +4.031343334e-04f, -4.745115978e-04f, -5.843232553e-04f, -6.239543190e-05f, +3.487967929e-04f, +2.637133416e-04f, -5.916399725e-05f, -2.032954010e-04f, -8.709694318e-05f, +6.953278931e-05f, +9.006147782e-05f, +1.197904264e-05f, -4.015732169e-05f, -2.560501230e-05f, +5.942614945e-06f, +1.179515707e-05f, -4.896083413e-04f, -8.033326528e-04f, +8.220057003e-04f, +2.893196964e-03f, +9.936439597e-04f, -4.930331092e-03f, -6.152321602e-03f, +3.483533585e-03f, +1.301628643e-02f, +4.760230193e-03f, -1.598507100e-02f, -1.891330835e-02f, +8.401720167e-03f, +3.159829184e-02f, +1.147212602e-02f, -3.201831773e-02f, -3.615824912e-02f, +1.377863072e-02f, +5.132117457e-02f, +1.824304742e-02f, -4.484459721e-02f, -4.849847057e-02f, +1.634769870e-02f, +5.999465498e-02f, +2.080498068e-02f, -4.585323392e-02f, -4.753863481e-02f, +1.422608725e-02f, +5.146642279e-02f, +1.740833467e-02f, -3.426344755e-02f, -3.401883976e-02f, +8.846737837e-03f, +3.178324117e-02f, +1.051429880e-02f, -1.796245957e-02f, -1.702250600e-02f, +3.586754644e-03f, +1.313789281e-02f, +4.289874706e-03f, -5.854216783e-03f, -5.261385157e-03f, +6.893673036e-04f, +2.933686743e-03f, +9.775321364e-04f, -7.631469996e-04f, -6.405180286e-04f, -1.392979451e-04f, +7.791242229e-06f, -1.699747862e-05f, -7.662225966e-05f, -2.669496967e-05f, +1.449047117e-04f, +1.727947999e-04f, -1.305561128e-04f, -4.023534357e-04f, -9.039874540e-05f, +5.647600865e-04f, +5.477436456e-04f, -4.240808264e-04f, -1.062018502e-03f, -1.651246880e-04f, +1.272510612e-03f, +1.065857194e-03f, -8.561708638e-04f, -1.835368929e-03f, -1.913789724e-04f, +1.958317289e-03f, +1.447398043e-03f, -1.208034611e-03f, -2.265687070e-03f, -1.392905295e-04f, +2.184548817e-03f, +1.433272568e-03f, -1.242086964e-03f, -2.052511654e-03f, -4.697585680e-05f, +1.788458344e-03f, +1.036298510e-03f, -9.309185690e-04f, -1.349078811e-03f, +1.872481803e-05f, +1.047088999e-03f, +5.259403172e-04f, -4.875573858e-04f, -6.071675411e-04f, +3.044856647e-05f, +4.026596693e-04f, +1.674741398e-04f, -1.575038342e-04f, -1.590490714e-04f, +1.351057922e-05f, +7.865658953e-05f, +2.324588111e-05f, -1.989502124e-05f, -1.179515707e-05f, /* 6, 2 (48) */ +4.818170991e-04f, +3.116677919e-04f, -8.139903245e-04f, -1.619438411e-03f, -1.795107547e-04f, +2.825764439e-03f, +3.302458664e-03f, -1.373904706e-03f, -6.820134096e-03f, -4.681795133e-03f, +5.958972806e-03f, +1.305464115e-02f, +3.849255791e-03f, -1.571149621e-02f, -2.106961728e-02f, +2.685047373e-03f, +3.409825556e-02f, +2.981813382e-02f, -2.299464232e-02f, -7.276822754e-02f, -3.914102041e-02f, +1.036708015e-01f, +2.809358285e-01f, +3.681470969e-01f, +2.991150230e-01f, +1.264314461e-01f, -2.668905536e-02f, -7.452424539e-02f, -3.106104140e-02f, +2.544284532e-02f, +3.631011958e-02f, +7.043774239e-03f, -1.964783298e-02f, -1.770976289e-02f, +1.575355201e-03f, +1.291394069e-02f, +7.381519323e-03f, -3.681607029e-03f, -7.108460287e-03f, -2.183697815e-03f, +2.988160346e-03f, +3.121529075e-03f, +1.707328174e-04f, -1.586700837e-03f, -9.769720453e-04f, +2.157125405e-04f, +5.093468306e-04f, +1.510931022e-04f, -8.344944653e-06f, +2.125900262e-05f, +4.148581872e-05f, -1.996438486e-06f, -8.307634195e-05f, -8.076243575e-05f, +6.431750700e-05f, +2.001270451e-04f, +9.285279645e-05f, -2.265601524e-04f, -3.652170240e-04f, -9.550274047e-06f, +5.399705649e-04f, +5.383887230e-04f, -2.757465103e-04f, -1.068544575e-03f, -6.500331626e-04f, +9.615381760e-04f, +2.023076302e-03f, +6.604188335e-04f, -2.824968759e-03f, -5.603687422e-03f, -4.787239382e-03f, -4.094699856e-04f, +4.284303580e-03f, +5.757022002e-03f, +3.396192524e-03f, -2.067797193e-04f, -1.996840788e-03f, -1.222587999e-03f, +4.496565782e-04f, +1.104004805e-03f, +4.347078605e-04f, -4.563697166e-04f, -5.937872373e-04f, -8.080645084e-05f, +3.433251790e-04f, +2.724298771e-04f, -5.019587769e-05f, -2.033930824e-04f, -9.273045181e-05f, +6.633507579e-05f, +9.155929989e-05f, +1.456911640e-05f, -3.964301044e-05f, -2.665905792e-05f, +5.265009118e-06f, +1.200722377e-05f, -4.818170991e-04f, -8.203301315e-04f, +7.453834406e-04f, +2.866501994e-03f, +1.138548671e-03f, -4.757536292e-03f, -6.282877715e-03f, +3.081180149e-03f, +1.292588768e-02f, +5.324990279e-03f, -1.543732735e-02f, -1.933738918e-02f, +7.339701665e-03f, +3.143316715e-02f, +1.274463663e-02f, -3.095246054e-02f, -3.701441998e-02f, +1.194326179e-02f, +5.112979559e-02f, +2.020136471e-02f, -4.339719917e-02f, -4.970650518e-02f, +1.408201163e-02f, +5.985536445e-02f, +2.298952949e-02f, -4.441996135e-02f, -4.878072178e-02f, +1.217357560e-02f, +5.141944693e-02f, +1.919679302e-02f, -3.322714904e-02f, -3.494975833e-02f, +7.497659026e-03f, +3.180196599e-02f, +1.156138780e-02f, -1.743651926e-02f, -1.751006338e-02f, +2.979587103e-03f, +1.316834138e-02f, +4.692534375e-03f, -5.686742643e-03f, -5.418888992e-03f, +5.303182322e-04f, +2.947197322e-03f, +1.056188726e-03f, -7.399011185e-04f, -6.604130498e-04f, -1.510931022e-04f, +8.344944653e-06f, -1.497788212e-05f, -7.570430487e-05f, -3.079791745e-05f, +1.398867490e-04f, +1.771339313e-04f, -1.182115470e-04f, -4.009414406e-04f, -1.095769468e-04f, +5.491324766e-04f, +5.656386610e-04f, -3.893998840e-04f, -1.063539538e-03f, -2.127017604e-04f, +1.243283477e-03f, +1.106992809e-03f, -7.939689928e-04f, -1.845114860e-03f, -2.697772798e-04f, +1.920891995e-03f, +1.511112825e-03f, -1.129233506e-03f, -2.285625305e-03f, -2.319039960e-04f, +2.150529871e-03f, +1.504220745e-03f, -1.169274842e-03f, -2.077684101e-03f, -1.270620581e-04f, +1.766968726e-03f, +1.093838693e-03f, -8.822973255e-04f, -1.370713898e-03f, -3.104888631e-05f, +1.038631332e-03f, +5.589661769e-04f, -4.653984841e-04f, -6.197011272e-04f, +9.754288189e-06f, +4.014176345e-04f, +1.796689918e-04f, -1.516552664e-04f, -1.634214139e-04f, +8.839925616e-06f, +7.907963685e-05f, +2.538057954e-05f, -1.947093683e-05f, -1.200722377e-05f, /* 6, 3 (48) */ +4.734721544e-04f, +3.329267946e-04f, -7.725045058e-04f, -1.621434850e-03f, -2.625870966e-04f, +2.745002003e-03f, +3.366776171e-03f, -1.173777661e-03f, -6.727281299e-03f, -4.908355286e-03f, +5.593755782e-03f, +1.304509087e-02f, +4.389226356e-03f, -1.517310748e-02f, -2.134536379e-02f, +1.616502798e-03f, +3.344822240e-02f, +3.077967200e-02f, -2.097156602e-02f, -7.210780871e-02f, -4.196598917e-02f, +9.806711406e-02f, +2.761485891e-01f, +3.677376269e-01f, +3.033993266e-01f, +1.321884681e-01f, -2.329286284e-02f, -7.473102511e-02f, -3.305788219e-02f, +2.422025732e-02f, +3.675977616e-02f, +8.147779044e-03f, -1.921312512e-02f, -1.816613260e-02f, +9.815679637e-04f, +1.283313424e-02f, +7.724844502e-03f, -3.409177152e-03f, -7.158656165e-03f, -2.387090897e-03f, +2.895429894e-03f, +3.187864151e-03f, +2.622921173e-04f, -1.572131721e-03f, -1.016615056e-03f, +1.890534826e-04f, +5.146118397e-04f, +1.631003260e-04f, -8.867001001e-06f, +2.015064614e-05f, +4.164078698e-05f, +3.893731059e-07f, -8.110340390e-05f, -8.317205561e-05f, +5.860392582e-05f, +1.986664501e-04f, +1.006854710e-04f, -2.167794209e-04f, -3.679622505e-04f, -2.700047156e-05f, +5.273720285e-04f, +5.521306107e-04f, -2.438428143e-04f, -1.057459136e-03f, -6.862421796e-04f, +9.074804882e-04f, +2.020473974e-03f, +7.444424040e-04f, -2.708232495e-03f, -5.561444633e-03f, -4.876752428e-03f, -5.727871543e-04f, +4.173145228e-03f, +5.775748818e-03f, +3.507144024e-03f, -1.097997096e-04f, -1.983518747e-03f, -1.272423616e-03f, +4.059681292e-04f, +1.106921623e-03f, +4.660840266e-04f, -4.373853199e-04f, -6.025581680e-04f, -9.934083637e-05f, +3.373068931e-04f, +2.808863692e-04f, -4.102837087e-05f, -2.032037984e-04f, -9.832202803e-05f, +6.298515782e-05f, +9.294928507e-05f, +1.719037284e-05f, -3.905416716e-05f, -2.769579466e-05f, +4.557424696e-06f, +1.220112428e-05f, -4.734721544e-04f, -8.353080136e-04f, +6.696791358e-04f, +2.835704077e-03f, +1.278435420e-03f, -4.580402361e-03f, -6.401089262e-03f, +2.680238709e-03f, +1.281631074e-02f, +5.874122756e-03f, -1.487168869e-02f, -1.972678906e-02f, +6.276162127e-03f, +3.122046539e-02f, +1.398792011e-02f, -2.984546773e-02f, -3.780838897e-02f, +1.009814693e-02f, +5.086001831e-02f, +2.212225670e-02f, -4.188608634e-02f, -5.083573868e-02f, +1.179638632e-02f, +5.962346045e-02f, +2.514005936e-02f, -4.291574061e-02f, -4.994999662e-02f, +1.009589150e-02f, +5.129238488e-02f, +2.096376174e-02f, -3.213331035e-02f, -3.583205565e-02f, +6.126945128e-03f, +3.177091710e-02f, +1.260001913e-02f, -1.687755308e-02f, -1.797546187e-02f, +2.359885976e-03f, +1.317809567e-02f, +5.093952010e-03f, -5.507073651e-03f, -5.570544258e-03f, +3.668968183e-04f, +2.956037248e-03f, +1.135268363e-03f, -7.145205390e-04f, -6.798839867e-04f, -1.631003260e-04f, +8.867001001e-06f, -1.299514687e-05f, -7.467434777e-05f, -3.474788864e-05f, +1.347369482e-04f, +1.810927613e-04f, -1.058832189e-04f, -3.988940296e-04f, -1.283080387e-04f, +5.328163443e-04f, +5.824201054e-04f, -3.544548708e-04f, -1.063352654e-03f, -2.595467868e-04f, +1.212302398e-03f, +1.146114099e-03f, -7.308620442e-04f, -1.851908327e-03f, -3.474428399e-04f, +1.880564154e-03f, +1.572302999e-03f, -1.048783316e-03f, -2.301956556e-03f, -3.241475586e-04f, +2.113106202e-03f, +1.572906527e-03f, -1.094458265e-03f, -2.099656640e-03f, -2.072536508e-04f, +1.742583914e-03f, +1.149959854e-03f, -8.319648170e-04f, -1.390320562e-03f, -8.118132958e-05f, +1.028427323e-03f, +5.914290376e-04f, -4.422313454e-04f, -6.313807691e-04f, -1.124576621e-05f, +3.994890047e-04f, +1.917713026e-04f, -1.454358454e-04f, -1.676030986e-04f, +4.040278685e-06f, +7.936789852e-05f, +2.753519081e-05f, -1.898771574e-05f, -1.220112428e-05f, /* 6, 4 (48) */ +4.646051534e-04f, +3.530774407e-04f, -7.308637188e-04f, -1.621045477e-03f, -3.436905005e-04f, +2.661829947e-03f, +3.425380097e-03f, -9.751112112e-04f, -6.626595828e-03f, -5.125134706e-03f, +5.225793532e-03f, +1.301809040e-02f, +4.916598384e-03f, -1.462097687e-02f, -2.158920660e-02f, +5.590436624e-04f, +3.276198022e-02f, +3.168715249e-02f, -1.895109204e-02f, -7.136336630e-02f, -4.467422166e-02f, +9.250566943e-02f, +2.712718367e-01f, +3.671648397e-01f, +3.075724718e-01f, +1.379642170e-01f, -1.978571881e-02f, -7.484082482e-02f, -3.504140093e-02f, +2.294783371e-02f, +3.716574429e-02f, +9.254700667e-03f, -1.874704109e-02f, -1.860351792e-02f, +3.790097958e-04f, +1.273379340e-02f, +8.062151396e-03f, -3.128290783e-03f, -7.199684535e-03f, -2.590294696e-03f, +2.797107866e-03f, +3.250849309e-03f, +3.552414023e-04f, -1.554941348e-03f, -1.055669223e-03f, +1.613576880e-04f, +5.191692644e-04f, +1.753014503e-04f, -9.357271131e-06f, +1.903768623e-05f, +4.172724070e-05f, +2.725517788e-06f, -7.904875357e-05f, -8.542047327e-05f, +5.289950351e-05f, +1.969499038e-04f, +1.082664692e-04f, -2.068337056e-04f, -3.701688128e-04f, -4.419347652e-05f, +5.142168205e-04f, +5.649642299e-04f, -2.120014881e-04f, -1.045109832e-03f, -7.210875415e-04f, +8.529817484e-04f, +2.015342221e-03f, +8.260940707e-04f, -2.590933072e-03f, -5.515480599e-03f, -4.962423244e-03f, -7.356340633e-04f, +4.058647023e-03f, +5.790390724e-03f, +3.616731638e-03f, -1.089945062e-05f, -1.967442276e-03f, -1.321292299e-03f, +3.611689990e-04f, +1.108393160e-03f, +4.972183318e-04f, -4.175739665e-04f, -6.106155420e-04f, -1.179745186e-04f, +3.307432576e-04f, +2.890674119e-04f, -3.167171449e-05f, -2.027235592e-04f, -1.038628378e-04f, +5.948545712e-05f, +9.422736517e-05f, +1.983931782e-05f, -3.839015022e-05f, -2.871302625e-05f, +3.820393667e-06f, +1.237592426e-05f, -4.646051534e-04f, -8.483031605e-04f, +5.950047880e-04f, +2.800956188e-03f, +1.413172369e-03f, -4.399309599e-03f, -6.506972481e-03f, +2.281344679e-03f, +1.268800270e-02f, +6.406939100e-03f, -1.428926858e-02f, -2.008124393e-02f, +5.212809473e-03f, +3.096091860e-02f, +1.520022250e-02f, -2.869935363e-02f, -3.853925102e-02f, +8.246238601e-03f, +5.051257547e-02f, +2.400282086e-02f, -4.031378334e-02f, -5.188452200e-02f, +9.494429766e-03f, +5.929931289e-02f, +2.725316557e-02f, -4.134283408e-02f, -5.104445488e-02f, +7.996234859e-03f, +5.108513123e-02f, +2.270634566e-02f, -3.098335049e-02f, -3.666402047e-02f, +4.736624566e-03f, +3.168973577e-02f, +1.362844645e-02f, -1.628612404e-02f, -1.841769321e-02f, +1.728505206e-03f, +1.316684990e-02f, +5.493441015e-03f, -5.315302348e-03f, -5.715980103e-03f, +1.992937197e-04f, +2.960077526e-03f, +1.214636261e-03f, -6.869853482e-04f, -6.988717024e-04f, -1.753014503e-04f, +9.357271131e-06f, -1.105218590e-05f, -7.353730115e-05f, -3.854121934e-05f, +1.294671807e-04f, +1.846715044e-04f, -9.359189777e-05f, -3.962243230e-04f, -1.465669659e-04f, +5.158472603e-04f, +5.980730325e-04f, -3.193054982e-04f, -1.061473822e-03f, -3.055900125e-04f, +1.179630067e-03f, +1.183171051e-03f, -6.669562287e-04f, -1.855752352e-03f, -4.242543686e-04f, +1.837407206e-03f, +1.630876849e-03f, -9.668149639e-04f, -2.314657752e-03f, -4.158741060e-04f, +2.072335209e-03f, +1.639216953e-03f, -1.017752442e-03f, -2.118384554e-03f, -2.874223964e-04f, +1.715329861e-03f, +1.204563872e-03f, -7.799916939e-04f, -1.407852481e-03f, -1.315937390e-04f, +1.016477841e-03f, +6.232697581e-04f, -4.180830575e-04f, -6.421763456e-04f, -3.252037081e-05f, +3.968666565e-04f, +2.037585732e-04f, -1.388496268e-04f, -1.715826333e-04f, -8.824424543e-07f, +7.951726066e-05f, +2.970587195e-05f, -1.844435346e-05f, -1.237592426e-05f, /* 6, 5 (48) */ +4.552478823e-04f, +3.721151269e-04f, -6.891364781e-04f, -1.618319959e-03f, -4.227392541e-04f, +2.576409474e-03f, +3.478279600e-03f, -7.781613074e-04f, -6.518329359e-03f, -5.331968412e-03f, +4.855624719e-03f, +1.297389693e-02f, +5.430815205e-03f, -1.405601264e-02f, -2.180120809e-02f, -4.860661693e-04f, +3.204089267e-02f, +3.254013424e-02f, -1.693574982e-02f, -7.053727223e-02f, -4.726515474e-02f, +8.699018883e-02f, +2.663094135e-01f, +3.664292057e-01f, +3.116311188e-01f, +1.437546077e-01f, -1.616898718e-02f, -7.485172427e-02f, -3.700884321e-02f, +2.162654141e-02f, +3.752691329e-02f, +1.036309383e-02f, -1.824982276e-02f, -1.902109189e-02f, -2.316057463e-04f, +1.261581888e-02f, +8.392894653e-03f, -2.839223371e-03f, -7.231356250e-03f, -2.793018255e-03f, +2.693245028e-03f, +3.310334766e-03f, +4.494687675e-04f, -1.535102030e-03f, -1.094059373e-03f, +1.326446617e-04f, +5.229896581e-04f, +1.876773745e-04f, -9.815677156e-06f, +1.792213212e-05f, +4.174651130e-05f, +5.009354660e-06f, -7.691695648e-05f, -8.750709462e-05f, +4.721233222e-05f, +1.949836418e-04f, +1.155886614e-04f, -1.967390650e-04f, -3.718405999e-04f, -6.110897977e-05f, +5.005295418e-04f, +5.768832206e-04f, -1.802641175e-04f, -1.031528156e-03f, -7.545412919e-04f, +7.981162878e-04f, +2.007723215e-03f, +9.053210094e-04f, -2.473184673e-03f, -5.465860778e-03f, -5.044194584e-03f, -8.978771603e-04f, +3.940894468e-03f, +5.800910076e-03f, +3.724842225e-03f, +8.984542406e-05f, -1.948589975e-03f, -1.369119190e-03f, +3.153032321e-04f, +1.108399673e-03f, +5.280660766e-04f, -3.969525186e-04f, -6.179395883e-04f, -1.366829950e-04f, +3.236363777e-04f, +2.969577884e-04f, -2.213655910e-05f, -2.019487425e-04f, -1.093439878e-04f, +5.583866130e-05f, +9.538957497e-05f, +2.251234812e-05f, -3.765042989e-05f, -2.970854302e-05f, +3.054515381e-06f, +1.253070546e-05f, -4.552478823e-04f, -8.593553464e-04f, +5.214674869e-04f, +2.762414969e-03f, +1.542639549e-03f, -4.214638095e-03f, -6.600564379e-03f, +1.885120356e-03f, +1.254143573e-02f, +6.922786361e-03f, -1.369119555e-02f, -2.040054943e-02f, +4.151335652e-03f, +3.065532859e-02f, +1.637985257e-02f, -2.751618258e-02f, -3.920620725e-02f, +6.390486249e-03f, +5.008832111e-02f, +2.584022806e-02f, -3.868290649e-02f, -5.285133696e-02f, +7.179772015e-03f, +5.888343879e-02f, +2.932550077e-02f, -3.970361713e-02f, -5.206220732e-02f, +5.877850305e-03f, +5.079770883e-02f, +2.442167552e-02f, -2.977878662e-02f, -3.744401216e-02f, +3.328772085e-03f, +3.155814203e-02f, +1.464492429e-02f, -1.566285428e-02f, -1.883577627e-02f, +1.086328861e-03f, +1.313432953e-02f, +5.890307671e-03f, -5.111543775e-03f, -5.854829730e-03f, +2.771108642e-05f, +2.959195084e-03f, +1.294153522e-03f, -6.572794762e-04f, -7.173160559e-04f, -1.876773745e-04f, +9.815677156e-06f, -9.151747540e-06f, -7.229816771e-05f, -4.217462308e-05f, +1.240893005e-04f, +1.878710499e-04f, -8.135794825e-05f, -3.929463207e-04f, -1.643298167e-04f, +4.982614622e-04f, +6.125845522e-04f, -2.840112181e-04f, -1.057921668e-03f, -3.507635665e-04f, +1.145331498e-03f, +1.218117339e-03f, -6.023584774e-04f, -1.856654741e-03f, -5.000924368e-04f, +1.791498952e-03f, +1.686747109e-03f, -8.834616194e-04f, -2.323711714e-03f, -5.069373762e-04f, +2.028279749e-03f, +1.703042750e-03f, -9.392758951e-04f, -2.133828266e-03f, -3.674396180e-04f, +1.685237321e-03f, +1.257554585e-03f, -7.264517373e-04f, -1.423266428e-03f, -1.822062518e-04f, +1.002786671e-03f, +6.544296547e-04f, -3.929826645e-04f, -6.520588780e-04f, -5.403740792e-05f, +3.935445733e-04f, +2.156081422e-04f, -1.319014032e-04f, -1.753486718e-04f, -5.921951639e-06f, +7.952378569e-05f, +3.188863867e-05f, -1.783995335e-05f, -1.253070546e-05f, /* 6, 6 (48) */ +4.454322052e-04f, +3.900372591e-04f, -6.473899668e-04f, -1.613310604e-03f, -4.996562106e-04f, +2.488902380e-03f, +3.525491932e-03f, -5.831776656e-04f, -6.402740698e-03f, -5.528707477e-03f, +4.483784119e-03f, +1.291278795e-02f, +5.931344747e-03f, -1.347912942e-02f, -2.198147221e-02f, -1.517594326e-03f, +3.128635138e-02f, +3.333825052e-02f, -1.492802661e-02f, -6.963195122e-02f, -4.973833941e-02f, +8.152432805e-02f, +2.612652189e-01f, +3.655313285e-01f, +3.155720133e-01f, +1.495555178e-01f, -1.244414495e-02f, -7.476187885e-02f, -3.895743318e-02f, +2.025742222e-02f, +3.784221652e-02f, +1.147149350e-02f, -1.772175668e-02f, -1.941804441e-02f, -8.495453346e-04f, +1.247913589e-02f, +8.716531031e-03f, -2.542265583e-03f, -7.253492809e-03f, -2.994966997e-03f, +2.583901040e-03f, +3.366173427e-03f, +5.448583425e-04f, -1.512589682e-03f, -1.131709803e-03f, +1.029361187e-04f, +5.260441735e-04f, +2.002080800e-04f, -1.024220231e-05f, +1.680595422e-05f, +4.170001406e-05f, +7.238374544e-06f, -7.471261742e-05f, -8.943157738e-05f, +4.155035540e-05f, +1.927741706e-04f, +1.226453846e-04f, -1.865115568e-04f, -3.729821955e-04f, -7.772730152e-05f, +4.863352246e-04f, +5.878825260e-04f, -1.486716681e-04f, -1.016746838e-03f, -7.865775689e-04f, +7.429579806e-04f, +1.997661437e-03f, +9.820734400e-04f, -2.355101077e-03f, -5.412653779e-03f, -5.122012995e-03f, -1.059383497e-03f, +3.819976279e-03f, +5.807272982e-03f, +3.831363317e-03f, +1.923566759e-04f, -1.926943287e-03f, -1.415829765e-03f, +2.684167601e-04f, +1.106923101e-03f, +5.585824193e-04f, -3.755391344e-04f, -6.245113053e-04f, -1.554413590e-04f, +3.159891480e-04f, +3.045424952e-04f, -1.243395811e-05f, -2.008761034e-04f, -1.147565375e-04f, +5.204772384e-05f, +9.643206018e-05f, +2.520575530e-05f, -3.683459133e-05f, -3.068012551e-05f, +2.260456842e-06f, +1.266456791e-05f, -4.454322052e-04f, -8.685070939e-04f, +4.491693191e-04f, +2.720240346e-03f, +1.666728850e-03f, -4.026767045e-03f, -6.681922327e-03f, +1.492174035e-03f, +1.237710592e-02f, +7.421047823e-03f, -1.307861100e-02f, -2.068456065e-02f, +3.093413984e-03f, +3.030456503e-02f, +1.752518407e-02f, -2.629806524e-02f, -3.980856572e-02f, +4.533831508e-03f, +4.958822867e-02f, +2.763172701e-02f, -3.699615939e-02f, -5.373479858e-02f, +4.856060301e-03f, +5.837650141e-02f, +3.135378052e-02f, -3.800057438e-02f, -5.300148322e-02f, +3.744022040e-03f, +5.043026921e-02f, +2.610691284e-02f, -2.852123204e-02f, -3.817046390e-02f, +1.905505657e-03f, +3.137593578e-02f, +1.564771096e-02f, -1.500842463e-02f, -1.922875894e-02f, +4.342699829e-04f, +1.308029212e-02f, +6.283852244e-03f, -4.895935633e-03f, -5.986731133e-03f, -1.476375854e-04f, +2.953273132e-03f, +1.373677308e-03f, -6.253908375e-04f, -7.351560092e-04f, -2.002080800e-04f, +1.024220231e-05f, -7.296413674e-06f, -7.096202782e-05f, -4.564518926e-05f, +1.186151225e-04f, +1.906929491e-04f, -6.920130012e-05f, -3.890748647e-04f, -1.815738499e-04f, +4.800957835e-04f, +6.259438306e-04f, -2.486311244e-04f, -1.052717418e-03f, -3.950015605e-04f, +1.109473904e-03f, +1.250910379e-03f, -5.371762618e-04f, -1.854628048e-03f, -5.748396599e-04f, +1.742921408e-03f, +1.739831097e-03f, -7.988584839e-04f, -2.329107182e-03f, -5.971921956e-04f, +1.981008035e-03f, +1.764278523e-03f, -8.591502741e-04f, -2.145953423e-03f, -4.471764115e-04f, +1.652341818e-03f, +1.308837966e-03f, -6.714217553e-04f, -1.436522367e-03f, -2.329380412e-04f, +9.873605329e-04f, +6.848506056e-04f, -3.669611382e-04f, -6.610005937e-04f, -7.576391290e-05f, +3.895178720e-04f, +2.272972249e-04f, -1.245967078e-04f, -1.788900391e-04f, -1.107160032e-05f, +7.938372451e-05f, +3.407937034e-05f, -1.717373175e-05f, -1.266456791e-05f, /* 6, 7 (48) */ +4.351900028e-04f, +4.068432133e-04f, -6.056899527e-04f, -1.606072230e-03f, -5.743688280e-04f, +2.399470802e-03f, +3.567042288e-03f, -3.904034950e-04f, -6.280095313e-03f, -5.715219034e-03f, +4.110801924e-03f, +1.283506064e-02f, +6.417679971e-03f, -1.289124690e-02f, -2.213014388e-02f, -2.534341164e-03f, +3.049977381e-02f, +3.408120850e-02f, -1.293036517e-02f, -6.864987778e-02f, -5.209344049e-02f, +7.611167427e-02f, +2.561432059e-01f, +3.644719450e-01f, +3.193919896e-01f, +1.553627907e-01f, -8.612781634e-03f, -7.456952217e-02f, -4.088437647e-02f, +1.884159245e-02f, +3.811063328e-02f, +1.257841660e-02f, -1.716317426e-02f, -1.979358354e-02f, -1.474056640e-03f, +1.232369453e-02f, +9.032520179e-03f, -2.237723088e-03f, -7.265926767e-03f, -3.195843101e-03f, +2.469144503e-03f, +3.418221151e-03f, +6.412904027e-04f, -1.487383927e-03f, -1.168544394e-03f, +7.225599318e-05f, +5.283046303e-04f, +2.128726479e-04f, -1.063688973e-05f, +1.569108148e-05f, +4.158924427e-05f, +9.410201707e-06f, -7.244037263e-05f, -9.119382763e-05f, +3.592135816e-05f, +1.903282540e-04f, +1.294304454e-04f, -1.761672149e-04f, -3.735988633e-04f, -9.402941106e-05f, +4.716592936e-04f, +5.979583844e-04f, -1.172644383e-04f, -1.000799786e-03f, -8.171726146e-04f, +6.875801614e-04f, +1.985203607e-03f, +1.056304658e-03f, -2.236795531e-03f, -5.355931279e-03f, -5.195828866e-03f, -1.220020865e-03f, +3.695984295e-03f, +5.809449348e-03f, +3.936183247e-03f, +2.965535273e-04f, -1.902486547e-03f, -1.461349932e-03f, +2.205573646e-04f, +1.103947105e-03f, +5.887224336e-04f, -3.533532580e-04f, -6.303124963e-04f, -1.742243306e-04f, +3.078052584e-04f, +3.118067665e-04f, -2.575357107e-06f, -1.995027847e-04f, -1.200915124e-04f, +4.811586372e-05f, +9.735108524e-05f, +2.791572988e-05f, -3.594233741e-05f, -3.162554815e-05f, +1.438952877e-06f, +1.277663204e-05f, -4.351900028e-04f, -8.758035076e-04f, +3.782072913e-04f, +2.674595157e-03f, +1.785343972e-03f, -3.836074096e-03f, -6.751123627e-03f, +1.103099171e-03f, +1.219553207e-02f, +7.901143606e-03f, -1.245266717e-02f, -2.093319177e-02f, +2.040696565e-03f, +2.990956347e-02f, +1.863465797e-02f, -2.504715486e-02f, -4.034574199e-02f, +2.679203460e-03f, +4.901338901e-02f, +2.937464842e-02f, -3.525632829e-02f, -5.453365707e-02f, +2.526953119e-03f, +5.777930921e-02f, +3.333478856e-02f, -3.623629586e-02f, -5.386063349e-02f, +1.598068617e-03f, +4.998309280e-02f, +2.775925466e-02f, -2.721239407e-02f, -3.884188566e-02f, +4.689832901e-04f, +3.114299774e-02f, +1.663507149e-02f, -1.432357402e-02f, -1.959572007e-02f, -2.267306108e-04f, +1.300452821e-02f, +6.673370117e-03f, -4.668638408e-03f, -6.111327841e-03f, -3.265276245e-04f, +2.942201532e-03f, +1.453061032e-03f, -5.913114672e-04f, -7.523297410e-04f, -2.128726479e-04f, +1.063688973e-05f, -5.488598499e-06f, -6.953402739e-05f, -4.895038091e-05f, +1.130564007e-04f, +1.931394007e-04f, -5.714141947e-05f, -3.846256007e-04f, -1.982775184e-04f, +4.613875835e-04f, +6.381420856e-04f, -2.132238567e-04f, -1.045884839e-03f, -4.382401831e-04f, +1.072126567e-03f, +1.281511380e-03f, -4.715174124e-04f, -1.849689529e-03f, -6.483808839e-04f, +1.691760662e-03f, +1.790050839e-03f, -7.131425620e-04f, -2.330838826e-03f, -6.864947182e-04f, +1.930593536e-03f, +1.822822929e-03f, -7.775001628e-04f, -2.154730967e-03f, -5.265038580e-04f, +1.616683612e-03f, +1.358322287e-03f, -6.149814725e-04f, -1.447583542e-03f, -2.837074452e-04f, +9.702090995e-04f, +7.144751560e-04f, -3.400513450e-04f, -6.689749892e-04f, -9.766612121e-05f, +3.847828278e-04f, +2.388029525e-04f, -1.169418174e-04f, -1.821957554e-04f, -1.632438305e-05f, +7.909352851e-05f, +3.627381541e-05f, -1.644502299e-05f, -1.277663204e-05f, /* 6, 8 (48) */ +4.245531131e-04f, +4.225342948e-04f, -5.641007085e-04f, -1.596662028e-03f, -6.468092006e-04f, +2.308276975e-03f, +3.602963646e-03f, -2.000752410e-04f, -6.150664868e-03f, -5.891386249e-03f, +3.737203061e-03f, +1.274103123e-02f, +6.889339265e-03f, -1.229328851e-02f, -2.224740832e-02f, -3.535140950e-03f, +2.968260120e-02f, +3.476878867e-02f, -1.094516156e-02f, -6.759357313e-02f, -5.433023602e-02f, +7.075574299e-02f, +2.509473770e-01f, +3.632519241e-01f, +3.230879739e-01f, +1.611722401e-01f, -4.676598387e-03f, -7.427296864e-02f, -4.278686302e-02f, +1.738024252e-02f, +3.833119065e-02f, +1.368236371e-02f, -1.657445183e-02f, -2.014693680e-02f, -2.104369136e-03f, +1.214947020e-02f, +9.340325437e-03f, -1.925916321e-03f, -7.268502124e-03f, -3.395345886e-03f, +2.349052990e-03f, +3.466337015e-03f, +7.386414879e-04f, -1.459468197e-03f, -1.204486732e-03f, +4.063044502e-05f, +5.297435832e-04f, +2.256492799e-04f, -1.099984113e-05f, +1.457939881e-05f, +4.141577321e-05f, +1.152259533e-05f, -7.010488204e-05f, -9.279399612e-05f, +3.033295803e-05f, +1.876528999e-04f, +1.359381228e-04f, -1.657220273e-04f, -3.736965314e-04f, -1.099969455e-04f, +4.565275267e-04f, +6.071083201e-04f, -8.608201384e-05f, -9.837220297e-04f, -8.463047818e-04f, +6.320555428e-04f, +1.970398609e-03f, +1.127971061e-03f, -2.118380642e-03f, -5.295767933e-03f, -5.265596469e-03f, -1.379657921e-03f, +3.569013395e-03f, +5.807412922e-03f, +4.039191267e-03f, +4.023527308e-04f, -1.875207023e-03f, -1.505606117e-03f, +1.717746382e-04f, +1.099457111e-03f, +6.184411672e-04f, -3.304156074e-04f, -6.353258038e-04f, -1.930062863e-04f, +2.990891982e-04f, +3.187360982e-04f, +7.427417591e-06f, -1.978263266e-04f, -1.253399165e-04f, +4.404656456e-05f, +9.814304120e-05f, +3.063836572e-05f, -3.497349141e-05f, -3.254258310e-05f, +5.908061777e-07f, +1.286604092e-05f, -4.245531131e-04f, -8.812921061e-04f, +3.086732639e-04f, +2.625644776e-03f, +1.898400373e-03f, -3.642934695e-03f, -6.808265047e-03f, +7.184735700e-04f, +1.199725455e-02f, +8.362531190e-03f, -1.181452508e-02f, -2.114641563e-02f, +9.948117267e-04f, +2.947132328e-02f, +1.970678454e-02f, -2.376564348e-02f, -4.081725940e-02f, +8.295139303e-04f, +4.836500812e-02f, +3.106640908e-02f, -3.346627745e-02f, -5.524679963e-02f, +1.961142931e-04f, +5.709281450e-02f, +3.526538209e-02f, -3.441347293e-02f, -5.463813366e-02f, -5.566623497e-04f, +4.945658894e-02f, +2.937593827e-02f, -2.585407178e-02f, -3.945686713e-02f, -9.786002519e-04f, +3.085929029e-02f, +1.760528059e-02f, -1.360909887e-02f, -1.993577142e-02f, -8.957056000e-04f, +1.290686209e-02f, +7.058152944e-03f, -4.429835456e-03f, -6.228269659e-03f, -5.087233799e-04f, +2.925877149e-03f, +1.532154561e-03f, -5.550376518e-04f, -7.687747640e-04f, -2.256492799e-04f, +1.099984113e-05f, -3.730547622e-06f, -6.801936589e-05f, -5.208803166e-05f, +1.074248073e-04f, +1.952132355e-04f, -4.519728111e-05f, -3.796149388e-04f, -2.144204917e-04f, +4.421746762e-04f, +6.491725796e-04f, -1.778475050e-04f, -1.037450173e-03f, -4.804177901e-04f, +1.033360712e-03f, +1.309885380e-03f, -4.054899386e-04f, -1.841861095e-03f, -7.206033657e-04f, +1.638106717e-03f, +1.837333188e-03f, -6.264524348e-04f, -2.328907250e-03f, -7.747026606e-04f, +1.877114848e-03f, +1.878578852e-03f, -6.944528796e-04f, -2.160137196e-03f, -6.052932368e-04f, +1.578307649e-03f, +1.405918285e-03f, -5.572134148e-04f, -1.456416562e-03f, -3.344320979e-04f, +9.513450014e-04f, +7.432466222e-04f, -3.122880098e-04f, -6.759568904e-04f, -1.197095174e-04f, +3.793368971e-04f, +2.501024122e-04f, -1.089437530e-04f, -1.852550607e-04f, -2.167294376e-05f, +7.864986146e-05f, +3.846759729e-05f, -1.565328426e-05f, -1.286604092e-05f, /* 6, 9 (48) */ +4.135532720e-04f, +4.371136936e-04f, -5.226849353e-04f, -1.585139433e-03f, -7.169140826e-04f, +2.215482978e-03f, +3.633296604e-03f, -1.242234118e-05f, -6.014726745e-03f, -6.057108276e-03f, +3.363506529e-03f, +1.263103429e-02f, +7.345866792e-03f, -1.168618019e-02f, -2.233349033e-02f, -4.518862979e-03f, +2.883629642e-02f, +3.540084421e-02f, -8.974762953e-03f, -6.646560206e-02f, -5.644861666e-02f, +6.545997506e-02f, +2.456817806e-01f, +3.618722662e-01f, +3.266569873e-01f, +1.669796530e-01f, -6.374071197e-04f, -7.387061591e-02f, -4.466207004e-02f, +1.587463640e-02f, +3.850296528e-02f, +1.478182082e-02f, -1.595601066e-02f, -2.047735241e-02f, -2.739694940e-03f, +1.195646391e-02f, +9.639414635e-03f, -1.607180223e-03f, -7.261074707e-03f, -3.593172212e-03f, +2.223713074e-03f, +3.510383580e-03f, +8.367845291e-04f, -1.428829831e-03f, -1.239460223e-03f, +8.087861927e-06f, +5.303343893e-04f, +2.385153209e-04f, -1.133121540e-05f, +1.347274469e-05f, +4.118124412e-05f, +1.357345076e-05f, -6.771082165e-05f, -9.423247423e-05f, +2.479259607e-05f, +1.847553464e-04f, +1.421631704e-04f, -1.551919137e-04f, -3.732817758e-04f, -1.256122270e-04f, +4.409660155e-04f, +6.153311316e-04f, -5.516322276e-05f, -9.655496663e-04f, -8.739545383e-04f, +5.764561357e-04f, +1.953297415e-03f, +1.197032172e-03f, -1.999968260e-03f, -5.232241289e-03f, -5.331273993e-03f, -1.538164326e-03f, +3.439161406e-03f, +5.801141337e-03f, +4.140277667e-03f, +5.096686415e-04f, -1.845094954e-03f, -1.548525361e-03f, +1.221199429e-04f, +1.093440348e-03f, +6.476937013e-04f, -3.067481615e-04f, -6.395347426e-04f, -2.117612916e-04f, +2.898462597e-04f, +3.253162721e-04f, +1.756217103e-05f, -1.958446757e-04f, -1.304927459e-04f, +3.984357343e-05f, +9.880445341e-05f, +3.336966467e-05f, -3.392799952e-05f, -3.342900398e-05f, -2.831127739e-07f, +1.293196236e-05f, -4.135532720e-04f, -8.850226537e-04f, +2.406538980e-04f, +2.573556744e-03f, +2.005825180e-03f, -3.447721460e-03f, -6.853462328e-03f, +3.388586312e-04f, +1.178283406e-02f, +8.804705866e-03f, -1.116535250e-02f, -2.132426314e-02f, -4.263844613e-05f, +2.899090549e-02f, +2.074014525e-02f, -2.245575810e-02f, -4.122274934e-02f, -1.012347165e-03f, +4.764440476e-02f, +3.270451580e-02f, -3.162894426e-02f, -5.587325206e-02f, -2.132792957e-03f, +5.631811183e-02f, +3.714249694e-02f, -3.253489408e-02f, -5.533258654e-02f, -2.716799546e-03f, +4.885129570e-02f, +3.095424592e-02f, -2.444815350e-02f, -4.001408054e-02f, -2.435016814e-03f, +3.052485820e-02f, +1.855662560e-02f, -1.286585224e-02f, -2.024805943e-02f, -1.571662490e-03f, +1.278715257e-02f, +7.437489841e-03f, -4.179733044e-03f, -6.337213412e-03f, -6.939784406e-04f, +2.904204205e-03f, +1.610804422e-03f, -5.165700545e-04f, -7.844280482e-04f, -2.385153209e-04f, +1.133121540e-05f, -2.024337558e-06f, -6.642328452e-05f, -5.505634216e-05f, +1.017319127e-04f, +1.969179001e-04f, -3.338734227e-05f, -3.740600133e-04f, -2.299836744e-04f, +4.224952597e-04f, +6.590306087e-04f, -1.425595170e-04f, -1.027442075e-03f, -5.214749907e-04f, +9.932493695e-04f, +1.336001281e-03f, -3.392018486e-04f, -1.831169253e-03f, -7.913969501e-04f, +1.582053332e-03f, +1.881609933e-03f, -5.389280292e-04f, -2.323318986e-03f, -8.616755363e-04f, +1.820655579e-03f, +1.931453568e-03f, -6.101382732e-04f, -2.162153822e-03f, -6.834162386e-04f, +1.537263510e-03f, +1.451539319e-03f, -4.982027884e-04f, -1.462991477e-03f, -3.850290623e-04f, +9.307838329e-04f, +7.711091956e-04f, -2.837076758e-04f, -6.819225126e-04f, -1.418588860e-04f, +3.731787393e-04f, +2.611726881e-04f, -1.006102801e-04f, -1.880574393e-04f, -2.710958291e-05f, +7.804961113e-05f, +4.065622061e-05f, -1.479810028e-05f, -1.293196236e-05f, /* 6,10 (48) */ +4.022220566e-04f, +4.505864383e-04f, -4.815036912e-04f, -1.571565982e-03f, -7.846249043e-04f, +2.121250504e-03f, +3.658089200e-03f, +1.723330052e-04f, -5.872563574e-03f, -6.212300190e-03f, +2.990224753e-03f, +1.250542206e-02f, +7.786832807e-03f, -1.107084906e-02f, -2.238865355e-02f, -5.484412646e-03f, +2.796234188e-02f, +3.597730034e-02f, -7.021465538e-03f, -6.526856989e-02f, -5.844858492e-02f, +6.022773377e-02f, +2.403505066e-01f, +3.603341019e-01f, +3.300961487e-01f, +1.727807943e-01f, +3.502870548e-03f, -7.336094727e-02f, -4.650716500e-02f, +1.432611104e-02f, +3.862508523e-02f, +1.587526117e-02f, -1.530831696e-02f, -2.078410057e-02f, -3.379229683e-03f, +1.174470262e-02f, +9.929260895e-03f, -1.281863951e-03f, -7.243512536e-03f, -3.789016888e-03f, +2.093220328e-03f, +3.550227153e-03f, +9.355889825e-04f, -1.395460166e-03f, -1.273388223e-03f, -2.534114206e-05f, +5.300512766e-04f, +2.514472832e-04f, -1.163122716e-05f, +1.237290880e-05f, +4.088736808e-05f, +1.556080047e-05f, -6.526287593e-05f, -9.550988961e-05f, +1.930752840e-05f, +1.816430483e-04f, +1.481008172e-04f, -1.445927038e-04f, -3.723618031e-04f, -1.408582796e-04f, +4.250011263e-04f, +6.226268793e-04f, -2.454609306e-05f, -9.463197984e-04f, -9.001044679e-04f, +5.208531702e-04f, +1.933953010e-03f, +1.263450662e-03f, -1.881669363e-03f, -5.165431691e-03f, -5.392823581e-03f, -1.695410871e-03f, +3.306529007e-03f, +5.790616145e-03f, +4.239333900e-03f, +6.184132929e-04f, -1.812143592e-03f, -1.590035406e-03f, +7.164636522e-05f, +1.085885881e-03f, +6.764352098e-04f, -2.823741443e-04f, -6.429237330e-04f, -2.304631328e-04f, +2.800825408e-04f, +3.315333797e-04f, +2.781635243e-05f, -1.935561938e-04f, -1.355410019e-04f, +3.551089913e-05f, +9.933198915e-05f, +3.610554137e-05f, -3.280593321e-05f, -3.428258992e-05f, -1.181865908e-06f, +1.297359113e-05f, -4.022220566e-04f, -8.870469913e-04f, +1.742306135e-04f, +2.518500402e-03f, +2.107557093e-03f, -3.250803560e-03f, -6.886849670e-03f, -3.520138210e-05f, +1.155285038e-02f, +9.227201126e-03f, -1.050632189e-02f, -2.146682265e-02f, -1.070080522e-03f, +2.846943050e-02f, +2.173339462e-02f, -2.111975682e-02f, -4.156195119e-02f, -2.843516418e-03f, +4.685300781e-02f, +3.428656913e-02f, -2.974733433e-02f, -5.641218009e-02f, -4.456111943e-03f, +5.545643630e-02f, +3.896315252e-02f, -3.060344051e-02f, -5.594272481e-02f, -4.878953368e-03f, +4.816787947e-02f, +3.249150943e-02f, -2.299661418e-02f, -4.051228333e-02f, -3.898008290e-03f, +3.013982913e-02f, +1.948740943e-02f, -1.209474305e-02f, -2.053176710e-02f, -2.253585003e-03f, +1.264529368e-02f, +7.810668581e-03f, -3.918560355e-03f, -6.437823692e-03f, -8.820358799e-04f, +2.877094622e-03f, +1.688854033e-03f, -4.759138339e-04f, -7.992261485e-04f, -2.514472832e-04f, +1.163122716e-05f, -3.718756133e-07f, -6.475105451e-05f, -5.785387577e-05f, +9.598916518e-05f, +1.982574397e-04f, -2.172951773e-05f, -3.679786417e-04f, -2.449492238e-04f, +4.023878455e-04f, +6.677134881e-04f, -1.074166071e-04f, -1.015891543e-03f, -5.613547283e-04f, +9.518672422e-04f, +1.359831878e-03f, -2.727609708e-04f, -1.817645040e-03f, -8.606542412e-04f, +1.523697855e-03f, +1.922817896e-03f, -4.507103864e-04f, -2.314086478e-03f, -9.472748852e-04f, +1.761304204e-03f, +1.981358900e-03f, -5.246885145e-04f, -2.160768010e-03f, -7.607451793e-04f, +1.493605346e-03f, +1.495101536e-03f, -4.380373535e-04f, -1.467281854e-03f, -4.354149662e-04f, +9.085441513e-04f, +7.980080470e-04f, -2.543486610e-04f, -6.868495175e-04f, -1.640783646e-04f, +3.663082355e-04f, +2.719909026e-04f, -9.194990665e-05f, -1.905926445e-04f, -3.262626545e-05f, +7.728990083e-05f, +4.283507783e-05f, -1.387918782e-05f, -1.297359113e-05f, /* 6,11 (48) */ +3.905908294e-04f, +4.629593471e-04f, -4.406163231e-04f, -1.556005181e-03f, -8.498877802e-04f, +2.025740615e-03f, +3.677396728e-03f, +3.539760536e-04f, -5.724462757e-03f, -6.356892894e-03f, +2.617862950e-03f, +1.236456378e-02f, +8.211833933e-03f, -1.044822218e-02f, -2.241319965e-02f, -6.430732444e-03f, +2.706223741e-02f, +3.649815351e-02f, -5.087512528e-03f, -6.400511923e-02f, -6.033025428e-02f, +5.506230208e-02f, +2.349576830e-01f, +3.586386910e-01f, +3.334026777e-01f, +1.785714105e-01f, +7.742204448e-03f, -7.274253398e-02f, -4.831930859e-02f, +1.273607564e-02f, +3.869673159e-02f, +1.696114705e-02f, -1.463188175e-02f, -2.106647472e-02f, -4.022153416e-03f, +1.151423949e-02f, +1.020934344e-02f, -9.503305711e-04f, -7.215696183e-03f, -3.982573082e-03f, +1.957679326e-03f, +3.585738052e-03f, +1.034920972e-03f, -1.359354625e-03f, -1.306194156e-03f, -5.962373197e-05f, +5.288694107e-04f, +2.644208743e-04f, -1.190014518e-05f, +1.128162992e-05f, +4.053591994e-05f, +1.748281484e-05f, -6.276573041e-05f, -9.662710150e-05f, +1.388481807e-05f, +1.783236627e-04f, +1.537467684e-04f, -1.339401158e-04f, -3.709444324e-04f, -1.557188438e-04f, +4.086594606e-04f, +6.289968711e-04f, +5.732189004e-06f, -9.260704767e-04f, -9.247392699e-04f, +4.653170186e-04f, +1.912420313e-03f, +1.327192362e-03f, -1.763593947e-03f, -5.095422190e-03f, -5.450211354e-03f, -1.851269606e-03f, +3.171219637e-03f, +5.775822850e-03f, +4.336252698e-03f, +7.284964753e-04f, -1.776349229e-03f, -1.630064794e-03f, +2.040866966e-05f, +1.076784649e-03f, +7.046210202e-04f, -2.573180078e-04f, -6.454781322e-04f, -2.490853503e-04f, +2.698049460e-04f, +3.373738461e-04f, +3.817706870e-05f, -1.909596659e-04f, -1.404757048e-04f, +3.105281016e-05f, +9.972246519e-05f, +3.884182833e-05f, -3.160749143e-05f, -3.510112941e-05f, -2.104447899e-06f, +1.299015110e-05f, -3.905908294e-04f, -8.874188669e-04f, +1.094795590e-04f, +2.460646526e-03f, +2.203546258e-03f, -3.052546120e-03f, -6.908579188e-03f, -4.031800238e-04f, +1.130790116e-02f, +9.629588971e-03f, -9.838608406e-03f, -2.157423926e-02f, -2.085972064e-03f, +2.790807577e-02f, +2.268526186e-02f, -1.975992494e-02f, -4.183471216e-02f, -4.661161458e-03f, +4.599235357e-02f, +3.581026699e-02f, -2.782451643e-02f, -5.686289048e-02f, -6.770198421e-03f, +5.450916141e-02f, +4.072445673e-02f, -2.862208161e-02f, -5.646741332e-02f, -7.039721378e-03f, +4.740713429e-02f, +3.398511477e-02f, -2.150151264e-02f, -4.095032069e-02f, -5.365290145e-03f, +2.970441417e-02f, +2.039595358e-02f, -1.129673500e-02f, -2.078611577e-02f, -2.940434520e-03f, +1.248121532e-02f, +8.176976816e-03f, -3.646569453e-03f, -6.529773598e-03f, -1.072628524e-03f, +2.844468357e-03f, +1.766143934e-03f, -4.330787560e-04f, -8.131053364e-04f, -2.644208743e-04f, +1.190014518e-05f, +1.225099856e-06f, -6.300796565e-05f, -6.047955359e-05f, +9.020787174e-05f, +1.992364803e-04f, -1.024115626e-05f, -3.613892836e-04f, -2.593005639e-04f, +3.818911886e-04f, +6.752205347e-04f, -7.247466745e-05f, -1.002831839e-03f, -6.000023574e-04f, +9.092905707e-04f, +1.381353880e-03f, -2.062747762e-04f, -1.801323952e-03f, -9.282707680e-04f, +1.463141052e-03f, +1.960899026e-03f, -3.619414277e-04f, -2.301228055e-03f, -1.031364501e-03f, +1.699153931e-03f, +2.028211372e-03f, -4.382378834e-04f, -2.155972421e-03f, -8.371532126e-04f, +1.447391809e-03f, +1.536524015e-03f, -3.768072929e-04f, -1.469264846e-03f, -4.855061388e-04f, +8.846474702e-04f, +8.238894287e-04f, -2.242510113e-04f, -6.907170695e-04f, -1.863314983e-04f, +3.587265066e-04f, +2.825342586e-04f, -8.297188020e-05f, -1.928507229e-04f, -3.821462953e-05f, +7.636810055e-05f, +4.499945636e-05f, -1.289640005e-05f, -1.299015110e-05f, /* 6,12 (48) */ +3.786906842e-04f, +4.742409770e-04f, -4.000804031e-04f, -1.538522367e-03f, -9.126535106e-04f, +1.929113513e-03f, +3.691281546e-03f, +5.322997163e-04f, -5.570715989e-03f, -6.490833009e-03f, +2.246918518e-03f, +1.220884494e-02f, +8.620493394e-03f, -9.819225309e-03f, -2.240746746e-02f, -7.356802921e-03f, +2.613749814e-02f, +3.696347053e-02f, -3.175092215e-03f, -6.267792687e-02f, -6.209384823e-02f, +4.996687989e-02f, +2.295074716e-01f, +3.567874214e-01f, +3.365738973e-01f, +1.843472333e-01f, +1.207845715e-02f, -7.201403750e-02f, -5.009565782e-02f, +1.110601084e-02f, +3.871714026e-02f, +1.803793170e-02f, -1.392726073e-02f, -2.132379272e-02f, -4.667631548e-03f, +1.126515414e-02f, +1.047914838e-02f, -6.129567250e-04f, -7.177519115e-03f, -4.173532748e-03f, +1.817203621e-03f, +3.616790862e-03f, +1.134643437e-03f, -1.320512797e-03f, -1.337801647e-03f, -9.472486139e-05f, +5.267649628e-04f, +2.774110254e-04f, -1.213829077e-05f, +1.020059379e-05f, +4.012873408e-05f, +1.933780265e-05f, -6.022406427e-05f, -9.758519584e-05f, +8.531327437e-06f, +1.748050353e-04f, +1.590972051e-04f, -1.232497358e-04f, -3.690380776e-04f, -1.701783911e-04f, +3.919678164e-04f, +6.344436463e-04f, +3.563531872e-05f, -9.048406397e-04f, -9.478457543e-04f, +4.099171202e-04f, +1.888756093e-03f, +1.388226278e-03f, -1.645850917e-03f, -5.022298439e-03f, -5.503407437e-03f, -2.005613969e-03f, +3.033339389e-03f, +5.756750934e-03f, +4.430928190e-03f, +8.398258175e-04f, -1.737711230e-03f, -1.668542953e-03f, -3.153675092e-05f, +1.066129499e-03f, +7.322066741e-04f, -2.316054131e-04f, -6.471842655e-04f, -2.676012728e-04f, +2.590211863e-04f, +3.428244537e-04f, +4.863109859e-05f, -1.880543077e-04f, -1.452879072e-04f, +2.647383212e-05f, +9.997285517e-05f, +4.157428121e-05f, -3.033300262e-05f, -3.588242442e-05f, -3.049786624e-06f, +1.298089736e-05f, -3.786906842e-04f, -8.861937670e-04f, +4.647159335e-05f, +2.400166972e-03f, +2.293754130e-03f, -2.853309640e-03f, -6.918820344e-03f, -7.645693074e-04f, +1.104860059e-02f, +1.001148016e-02f, -9.163387871e-03f, -2.164671393e-02f, -3.088803903e-03f, +2.730807342e-02f, +2.359455243e-02f, -1.837857106e-02f, -4.204098693e-02f, -6.462485410e-03f, +4.506408280e-02f, +3.727340804e-02f, -2.586361741e-02f, -5.722483191e-02f, -9.071426476e-03f, +5.347779691e-02f, +4.242361066e-02f, -2.659387024e-02f, -5.690565121e-02f, -9.195693798e-03f, +4.656998107e-02f, +3.543250658e-02f, -1.996498863e-02f, -4.132712798e-02f, -6.834554991e-03f, +2.921890803e-02f, +2.128060105e-02f, -1.047284557e-02f, -2.101036678e-02f, -3.631151590e-03f, +1.229488382e-02f, +8.535703323e-03f, -3.364035194e-03f, -6.612745479e-03f, -1.265479247e-03f, +2.806253727e-03f, +1.842512035e-03f, -3.880792997e-04f, -8.260017364e-04f, -2.774110254e-04f, +1.213829077e-05f, +2.765018826e-06f, -6.119931503e-05f, -6.293264893e-05f, +8.439917964e-05f, +1.998602095e-04f, +1.060981472e-06f, -3.543109979e-04f, -2.730223974e-04f, +3.610442174e-04f, +6.815530458e-04f, -3.778868120e-05f, -9.882984193e-04f, -6.373657158e-04f, +8.655969926e-04f, +1.400547921e-03f, -1.398502021e-04f, -1.782245864e-03f, -9.941451458e-04f, +1.400486931e-03f, +1.995800483e-03f, -2.727637206e-04f, -2.284767897e-03f, -1.113810654e-03f, +1.634302546e-03f, +2.071932351e-03f, -3.509225522e-04f, -2.147765234e-03f, -9.125145432e-04f, +1.398685977e-03f, +1.575728923e-03f, -3.146050762e-04f, -1.468921251e-03f, -5.352187495e-04f, +8.591182488e-04f, +8.487007769e-04f, -1.934564494e-04f, -6.935058886e-04f, -2.085812962e-04f, +3.504359284e-04f, +2.927800816e-04f, -7.368618329e-05f, -1.948220386e-04f, -4.386599617e-05f, +7.528183798e-05f, +4.714454596e-05f, -1.184973062e-05f, -1.298089736e-05f, /* 6,13 (48) */ +3.665523935e-04f, +4.844415708e-04f, -3.599516690e-04f, -1.519184564e-03f, -9.728775749e-04f, +1.831528317e-03f, +3.699812874e-03f, +7.071047516e-04f, -5.411618784e-03f, -6.614082745e-03f, +1.877880440e-03f, +1.203866655e-02f, +9.012461210e-03f, -9.184781663e-03f, -2.237183214e-02f, -8.261643560e-03f, +2.518965239e-02f, +3.737338765e-02f, -1.286336122e-03f, -6.128970059e-02f, -6.373969915e-02f, +4.494458145e-02f, +2.240040642e-01f, +3.547818075e-01f, +3.396072367e-01f, +1.901039843e-01f, +1.650938534e-02f, -7.117421169e-02f, -5.183336905e-02f, +9.437467890e-03f, +3.868560351e-02f, +1.910406119e-02f, -1.319505405e-02f, -2.155539814e-02f, -5.314815813e-03f, +1.099755286e-02f, +1.073816957e-02f, -2.701322713e-04f, -7.128888016e-03f, -4.361587055e-03f, +1.671915714e-03f, +3.643264694e-03f, +1.234616292e-03f, -1.278938516e-03f, -1.368134650e-03f, -1.306072858e-04f, +5.237151761e-04f, +2.903919228e-04f, -1.234603609e-05f, +9.131431252e-06f, +3.966770023e-05f, +2.112421139e-05f, -5.764254316e-05f, -9.838547999e-05f, +3.253710870e-06f, +1.710951859e-04f, +1.641487836e-04f, -1.125369970e-04f, -3.666517270e-04f, -1.842221365e-04f, +3.749531488e-04f, +6.389709586e-04f, +6.512791117e-05f, -8.826700539e-04f, -9.694128361e-04f, +3.547219075e-04f, +1.863018891e-03f, +1.446524599e-03f, -1.528547974e-03f, -4.946148599e-03f, -5.552385977e-03f, -2.158318909e-03f, +2.892996910e-03f, +5.733393884e-03f, +4.523256024e-03f, +9.523068714e-04f, -1.696232062e-03f, -1.705400290e-03f, -8.413192717e-05f, +1.053915209e-03f, +7.591479881e-04f, -2.052632092e-04f, -6.480294558e-04f, -2.859840513e-04f, +2.477397787e-04f, +3.478723656e-04f, +5.916490752e-05f, -1.848397734e-04f, -1.499687083e-04f, +2.177874479e-05f, +1.000802969e-04f, +4.429858431e-05f, -2.898292652e-05f, -3.662429443e-05f, -4.016743749e-06f, +1.294511835e-05f, -3.665523935e-04f, -8.834287482e-04f, -1.472772168e-05f, +2.337234324e-03f, +2.378153310e-03f, -2.653449430e-03f, -6.917759363e-03f, -1.118880305e-03f, +1.077557820e-02f, +1.037252438e-02f, -8.481834825e-03f, -2.168450261e-02f, -4.077102323e-03f, +2.667070770e-02f, +2.446014943e-02f, -1.697802314e-02f, -4.218083714e-02f, -8.244731274e-03f, +4.406993765e-02f, +3.867389497e-02f, -2.386781692e-02f, -5.749759563e-02f, -1.135619437e-02f, +5.236398626e-02f, +4.405791320e-02f, -2.452193789e-02f, -5.725657376e-02f, -1.134345903e-02f, +4.565746653e-02f, +3.683119256e-02f, -1.838925970e-02f, -4.164173305e-02f, -8.303476242e-03f, +2.868368928e-02f, +2.213971930e-02f, -9.624144797e-03f, -2.120382323e-02f, -4.324657479e-03f, +1.208630252e-02f, +8.886139251e-03f, -3.071255113e-03f, -6.686431662e-03f, -1.460301286e-03f, +2.762387731e-03f, +1.917793873e-03f, -3.409347537e-04f, -8.378514670e-04f, -2.903919228e-04f, +1.234603609e-05f, +4.246478632e-06f, -5.933039603e-05f, -6.521278117e-05f, +7.857405835e-05f, +2.001343575e-04f, +1.216074364e-05f, -3.467634009e-04f, -2.861007156e-04f, +3.398859639e-04f, +6.867142749e-04f, -3.412638687e-06f, -9.723288509e-04f, -6.733951917e-04f, +8.208654043e-04f, +1.417398567e-03f, -7.359347869e-05f, -1.760454940e-03f, -1.058179230e-03f, +1.335842558e-03f, +2.027474710e-03f, -1.833202433e-04f, -2.264735987e-03f, -1.194482311e-03f, +1.566852253e-03f, +2.112448184e-03f, -2.628803648e-04f, -2.136150166e-03f, -9.867046377e-04f, +1.347555264e-03f, +1.612641656e-03f, -2.515253188e-04f, -1.466235570e-03f, -5.844689476e-04f, +8.319838752e-04f, +8.723908122e-04f, -1.620083209e-04f, -6.951983024e-04f, -2.307902896e-04f, +3.414401451e-04f, +3.027058630e-04f, -6.410352750e-05f, -1.964972977e-04f, -4.957137964e-05f, +7.402900911e-05f, +4.926544663e-05f, -1.073931758e-05f, -1.294511835e-05f, /* 6,14 (48) */ +3.542063574e-04f, +4.935730020e-04f, -3.202839688e-04f, -1.498060353e-03f, -1.030520118e-03f, +1.733142837e-03f, +3.703066585e-03f, +8.781999375e-04f, -5.247470000e-03f, -6.726619742e-03f, +1.511228713e-03f, +1.185444441e-02f, +9.387414359e-03f, -8.545810704e-03f, -2.230670423e-02f, -9.144313614e-03f, +2.422023955e-02f, +3.772810956e-02f, +5.766827686e-04f, -5.984317599e-02f, -6.526824712e-02f, +3.999843285e-02f, +2.184516782e-01f, +3.526234885e-01f, +3.425002336e-01f, +1.958373782e-01f, +2.103264136e-02f, -7.022190482e-02f, -5.352960111e-02f, +7.732067600e-03f, +3.860147158e-02f, +2.015797640e-02f, -1.243590607e-02f, -2.176066135e-02f, -5.962845269e-03f, +1.071156881e-02f, +1.098590935e-02f, +7.774009424e-05f, -7.069723108e-03f, -4.546426829e-03f, +1.521947006e-03f, +3.665043439e-03f, +1.334696589e-03f, -1.234639931e-03f, -1.397117576e-03f, -1.672315802e-04f, +5.196984324e-04f, +3.033370412e-04f, -1.252380240e-05f, +8.075716455e-06f, +3.915475926e-05f, +2.284062728e-05f, -5.502581215e-05f, -9.902947732e-05f, -1.941592106e-06f, +1.672022944e-04f, +1.688986336e-04f, -1.018171598e-04f, -3.637949248e-04f, -1.978360502e-04f, +3.576425317e-04f, +6.425837567e-04f, +9.417553793e-05f, -8.595992529e-04f, -9.894315259e-04f, +2.997987345e-04f, +1.835268932e-03f, +1.502062702e-03f, -1.411791514e-03f, -4.867063234e-03f, -5.597125161e-03f, -2.309261014e-03f, +2.750303297e-03f, +5.705749210e-03f, +4.613133477e-03f, +1.065843199e-03f, -1.651917312e-03f, -1.740568283e-03f, -1.373173676e-04f, +1.040138524e-03f, +7.854011156e-04f, -1.783194103e-04f, -6.480020529e-04f, -3.042066950e-04f, +2.359700435e-04f, +3.525051485e-04f, +6.976466306e-05f, -1.813161613e-04f, -1.545092677e-04f, +1.697257874e-05f, +1.000420994e-04f, +4.701035630e-05f, -2.755785588e-05f, -3.732458058e-05f, -5.004115458e-06f, +1.288213796e-05f, -3.542063574e-04f, -8.791822696e-04f, -7.405811770e-05f, +2.272021542e-03f, +2.456727368e-03f, -2.453315073e-03f, -6.905598619e-03f, -1.465643706e-03f, +1.048947748e-02f, +1.071241034e-02f, -7.795120550e-03f, -2.168791525e-02f, -5.049431174e-03f, +2.599731251e-02f, +2.528101483e-02f, -1.556062457e-02f, -4.225443061e-02f, -1.000518621e-02f, +4.301175842e-02f, +4.000973753e-02f, -2.184034221e-02f, -5.768091587e-02f, -1.362093036e-02f, +5.116950395e-02f, +4.562476546e-02f, -2.240948970e-02f, -5.751945412e-02f, -1.347960920e-02f, +4.467076189e-02f, +3.817874782e-02f, -1.677661805e-02f, -4.189325837e-02f, -9.769711812e-03f, +2.809922033e-02f, +2.297170317e-02f, -8.751753984e-03f, -2.136583155e-02f, -5.019855781e-03f, +1.185551223e-02f, +9.227579396e-03f, -2.768549250e-03f, -6.750535189e-03f, -1.656798584e-03f, +2.712816351e-03f, +1.991822882e-03f, -2.916693071e-04f, -8.485907846e-04f, -3.033370412e-04f, +1.252380240e-05f, +5.668242641e-06f, -5.740648749e-05f, -6.731990907e-05f, +7.274328220e-05f, +2.000651765e-04f, +2.304260649e-05f, -3.387666227e-04f, -2.985228050e-04f, +3.184554961e-04f, +6.907094046e-04f, +3.060054439e-05f, -9.549627299e-04f, -7.080437859e-04f, +7.751758193e-04f, +1.431894319e-03f, -7.609956241e-06f, -1.735999543e-03f, -1.120278267e-03f, +1.269317874e-03f, +2.055879498e-03f, -9.375414920e-05f, -2.241168059e-03f, -1.273251348e-03f, +1.496909514e-03f, +2.149690319e-03f, -1.742506136e-04f, -2.121136482e-03f, -1.059600435e-03f, +1.294071328e-03f, +1.647190982e-03f, -1.876646366e-04f, -1.461196060e-03f, -6.331730036e-04f, +8.032746449e-04f, +8.949096394e-04f, -1.299515369e-04f, -6.957782950e-04f, -2.529205913e-04f, +3.317440804e-04f, +3.122893028e-04f, -5.423534605e-05f, -1.978675716e-04f, -5.532149868e-05f, +7.260778855e-05f, +5.135717680e-05f, -9.565447060e-06f, -1.288213796e-05f, /* 6,15 (48) */ +3.416825550e-04f, +5.016487185e-04f, -2.811292096e-04f, -1.475219725e-03f, -1.085545930e-03f, +1.634113360e-03f, +3.701124993e-03f, +1.045402232e-03f, -5.078571367e-03f, -6.828436902e-03f, +1.147433788e-03f, +1.165660836e-02f, +9.745056891e-03f, -7.903226948e-03f, -2.221252869e-02f, -1.000391287e-02f, +2.323080802e-02f, +3.802790829e-02f, +2.411951701e-03f, -5.834111329e-02f, -6.668003863e-02f, +3.513136962e-02f, +2.128545531e-01f, +3.503142275e-01f, +3.452505369e-01f, +2.015431274e-01f, +2.564577484e-02f, -6.915606162e-02f, -5.518151842e-02f, +5.991499317e-03f, +3.846415422e-02f, +2.119811493e-02f, -1.165050495e-02f, -2.193898076e-02f, -6.610847322e-03f, +1.040736212e-02f, +1.122187939e-02f, +4.302452427e-04f, -6.999958445e-03f, -4.727742990e-03f, +1.367437738e-03f, +3.682016018e-03f, +1.434738688e-03f, -1.187629575e-03f, -1.424675432e-03f, -2.045561608e-04f, +5.146943169e-04f, +3.162191791e-04f, -1.267205825e-05f, +7.034965172e-06f, +3.859189896e-05f, +2.448577510e-05f, -5.237848872e-05f, -9.951892142e-05f, -7.048363227e-06f, +1.631346866e-04f, +1.733443561e-04f, -9.110529226e-05f, -3.604777500e-04f, -2.110068681e-04f, +3.400631189e-04f, +6.452881649e-04f, +1.227447621e-04f, -8.356694761e-04f, -1.007894918e-03f, +2.452138071e-04f, +1.805568045e-03f, +1.554819155e-03f, -1.295686520e-03f, -4.785135208e-03f, -5.637607225e-03f, -2.458318630e-03f, +2.605371983e-03f, +5.673818458e-03f, +4.700459576e-03f, +1.180336464e-03f, -1.604775713e-03f, -1.773979571e-03f, -1.910321154e-04f, +1.024798178e-03f, +8.109226079e-04f, -1.508031714e-04f, -6.470914609e-04f, -3.222421066e-04f, +2.237221013e-04f, +3.567107958e-04f, +8.041625104e-05f, -1.774840205e-04f, -1.589008196e-04f, +1.206061149e-05f, +9.985575014e-05f, +4.970515603e-05f, -2.605851780e-05f, -3.798114978e-05f, -6.010633299e-06f, +1.279131761e-05f, -3.416825550e-04f, -8.735140269e-04f, -1.314646052e-04f, +2.204701633e-03f, +2.529470650e-03f, -2.253249896e-03f, -6.882556012e-03f, -1.804410329e-03f, +1.019095468e-02f, +1.103086584e-02f, -7.104411146e-03f, -2.165731470e-02f, -6.004393903e-03f, +2.528926872e-02f, +2.605619065e-02f, -1.412873026e-02f, -4.226204057e-02f, -1.174118576e-02f, +4.189148016e-02f, +4.127905540e-02f, -1.978446272e-02f, -5.777467002e-02f, -1.586209842e-02f, +4.989625260e-02f, +4.712167497e-02f, -2.025979938e-02f, -5.769370474e-02f, -1.560074568e-02f, +4.361116146e-02f, +3.947281915e-02f, -1.512942707e-02f, -4.208092301e-02f, -1.123090787e-02f, +2.746604733e-02f, +2.377497782e-02f, -7.856844345e-03f, -2.149578308e-02f, -5.715634076e-03f, +1.160259164e-02f, +9.559323477e-03f, -2.456259947e-03f, -6.804770535e-03f, -1.854666155e-03f, +2.657494853e-03f, +2.064430670e-03f, -2.403121303e-04f, -8.581562317e-04f, -3.162191791e-04f, +1.267205825e-05f, +7.029238600e-06f, -5.543284324e-05f, -6.925432346e-05f, +6.691741390e-05f, +1.996594200e-04f, +3.369169212e-05f, -3.303412642e-04f, -3.102772523e-04f, +2.967918487e-04f, +6.935455157e-04f, +6.419910584e-05f, -9.362415961e-04f, -7.412671690e-04f, +7.286092271e-04f, +1.444027608e-03f, +5.799606398e-05f, -1.708932137e-03f, -1.180351032e-03f, +1.201025502e-03f, +2.080978043e-03f, -4.208531243e-06f, -2.214105531e-03f, -1.349992761e-03f, +1.424584869e-03f, +2.183595432e-03f, -8.517381261e-05f, -2.102738992e-03f, -1.131080554e-03f, +1.238309972e-03f, +1.679309172e-03f, -1.231214967e-04f, -1.453794775e-03f, -6.812474507e-04f, +7.730237344e-04f, +9.162088455e-04f, -9.733251319e-05f, -6.952315542e-04f, -2.749339573e-04f, +3.213539468e-04f, +3.215083537e-04f, -4.409378486e-05f, -1.989243212e-04f, -6.110678857e-05f, +7.101663954e-05f, +5.341468188e-05f, -8.328556656e-06f, -1.279131761e-05f, /* 6,16 (48) */ +3.290104967e-04f, +5.086836836e-04f, -2.425373106e-04f, -1.450733950e-03f, -1.137924419e-03f, +1.534594438e-03f, +3.694076629e-03f, +1.208536918e-03f, -4.905227010e-03f, -6.919542194e-03f, +7.869560385e-04f, +1.144560149e-02f, +1.008512001e-02f, -7.257938783e-03f, -2.208978393e-02f, -1.083958234e-02f, +2.222291311e-02f, +3.827312210e-02f, +4.217519746e-03f, -5.678629413e-02f, -6.797572515e-02f, +3.034623441e-02f, +2.072169458e-01f, +3.478559089e-01f, +3.478559089e-01f, +2.072169458e-01f, +3.034623441e-02f, -6.797572515e-02f, -5.678629413e-02f, +4.217519746e-03f, +3.827312210e-02f, +2.222291311e-02f, -1.083958234e-02f, -2.208978393e-02f, -7.257938783e-03f, +1.008512001e-02f, +1.144560149e-02f, +7.869560385e-04f, -6.919542194e-03f, -4.905227010e-03f, +1.208536918e-03f, +3.694076629e-03f, +1.534594438e-03f, -1.137924419e-03f, -1.450733950e-03f, -2.425373106e-04f, +5.086836836e-04f, +3.290104967e-04f, -1.279131761e-05f, +6.010633299e-06f, +3.798114978e-05f, +2.605851780e-05f, -4.970515603e-05f, -9.985575014e-05f, -1.206061149e-05f, +1.589008196e-04f, +1.774840205e-04f, -8.041625104e-05f, -3.567107958e-04f, -2.237221013e-04f, +3.222421066e-04f, +6.470914609e-04f, +1.508031714e-04f, -8.109226079e-04f, -1.024798178e-03f, +1.910321154e-04f, +1.773979571e-03f, +1.604775713e-03f, -1.180336464e-03f, -4.700459576e-03f, -5.673818458e-03f, -2.605371983e-03f, +2.458318630e-03f, +5.637607225e-03f, +4.785135208e-03f, +1.295686520e-03f, -1.554819155e-03f, -1.805568045e-03f, -2.452138071e-04f, +1.007894918e-03f, +8.356694761e-04f, -1.227447621e-04f, -6.452881649e-04f, -3.400631189e-04f, +2.110068681e-04f, +3.604777500e-04f, +9.110529226e-05f, -1.733443561e-04f, -1.631346866e-04f, +7.048363227e-06f, +9.951892142e-05f, +5.237848872e-05f, -2.448577510e-05f, -3.859189896e-05f, -7.034965172e-06f, +1.267205825e-05f, -3.290104967e-04f, -8.664847883e-04f, -1.868974484e-04f, +2.135447310e-03f, +2.596388064e-03f, -2.053590476e-03f, -6.848864320e-03f, -2.134751593e-03f, +9.880677424e-03f, +1.132765769e-02f, -6.410865630e-03f, -2.159311560e-02f, -6.940635500e-03f, +2.454800155e-02f, +2.678479988e-02f, -1.268470265e-02f, -4.220404451e-02f, -1.345011789e-02f, +4.071112912e-02f, +4.248008090e-02f, -1.770348467e-02f, -5.777887855e-02f, -1.807620395e-02f, +4.854625984e-02f, +4.854625984e-02f, -1.807620395e-02f, -5.777887855e-02f, -1.770348467e-02f, +4.248008090e-02f, +4.071112912e-02f, -1.345011789e-02f, -4.220404451e-02f, -1.268470265e-02f, +2.678479988e-02f, +2.454800155e-02f, -6.940635500e-03f, -2.159311560e-02f, -6.410865630e-03f, +1.132765769e-02f, +9.880677424e-03f, -2.134751593e-03f, -6.848864320e-03f, -2.053590476e-03f, +2.596388064e-03f, +2.135447310e-03f, -1.868974484e-04f, -8.664847883e-04f, -3.290104967e-04f, +1.279131761e-05f, +8.328556656e-06f, -5.341468188e-05f, -7.101663954e-05f, +6.110678857e-05f, +1.989243212e-04f, +4.409378486e-05f, -3.215083537e-04f, -3.213539468e-04f, +2.749339573e-04f, +6.952315542e-04f, +9.733251319e-05f, -9.162088455e-04f, -7.730237344e-04f, +6.812474507e-04f, +1.453794775e-03f, +1.231214967e-04f, -1.679309172e-03f, -1.238309972e-03f, +1.131080554e-03f, +2.102738992e-03f, +8.517381261e-05f, -2.183595432e-03f, -1.424584869e-03f, +1.349992761e-03f, +2.214105531e-03f, +4.208531243e-06f, -2.080978043e-03f, -1.201025502e-03f, +1.180351032e-03f, +1.708932137e-03f, -5.799606398e-05f, -1.444027608e-03f, -7.286092271e-04f, +7.412671690e-04f, +9.362415961e-04f, -6.419910584e-05f, -6.935455157e-04f, -2.967918487e-04f, +3.102772523e-04f, +3.303412642e-04f, -3.369169212e-05f, -1.996594200e-04f, -6.691741390e-05f, +6.925432346e-05f, +5.543284324e-05f, -7.029238600e-06f, -1.267205825e-05f, /* 6,17 (48) */ +3.162191791e-04f, +5.146943169e-04f, -2.045561608e-04f, -1.424675432e-03f, -1.187629575e-03f, +1.434738688e-03f, +3.682016018e-03f, +1.367437738e-03f, -4.727742990e-03f, -6.999958445e-03f, +4.302452427e-04f, +1.122187939e-02f, +1.040736212e-02f, -6.610847322e-03f, -2.193898076e-02f, -1.165050495e-02f, +2.119811493e-02f, +3.846415422e-02f, +5.991499317e-03f, -5.518151842e-02f, -6.915606162e-02f, +2.564577484e-02f, +2.015431274e-01f, +3.452505369e-01f, +3.503142275e-01f, +2.128545531e-01f, +3.513136962e-02f, -6.668003863e-02f, -5.834111329e-02f, +2.411951701e-03f, +3.802790829e-02f, +2.323080802e-02f, -1.000391287e-02f, -2.221252869e-02f, -7.903226948e-03f, +9.745056891e-03f, +1.165660836e-02f, +1.147433788e-03f, -6.828436902e-03f, -5.078571367e-03f, +1.045402232e-03f, +3.701124993e-03f, +1.634113360e-03f, -1.085545930e-03f, -1.475219725e-03f, -2.811292096e-04f, +5.016487185e-04f, +3.416825550e-04f, -1.288213796e-05f, +5.004115458e-06f, +3.732458058e-05f, +2.755785588e-05f, -4.701035630e-05f, -1.000420994e-04f, -1.697257874e-05f, +1.545092677e-04f, +1.813161613e-04f, -6.976466306e-05f, -3.525051485e-04f, -2.359700435e-04f, +3.042066950e-04f, +6.480020529e-04f, +1.783194103e-04f, -7.854011156e-04f, -1.040138524e-03f, +1.373173676e-04f, +1.740568283e-03f, +1.651917312e-03f, -1.065843199e-03f, -4.613133477e-03f, -5.705749210e-03f, -2.750303297e-03f, +2.309261014e-03f, +5.597125161e-03f, +4.867063234e-03f, +1.411791514e-03f, -1.502062702e-03f, -1.835268932e-03f, -2.997987345e-04f, +9.894315259e-04f, +8.595992529e-04f, -9.417553793e-05f, -6.425837567e-04f, -3.576425317e-04f, +1.978360502e-04f, +3.637949248e-04f, +1.018171598e-04f, -1.688986336e-04f, -1.672022944e-04f, +1.941592106e-06f, +9.902947732e-05f, +5.502581215e-05f, -2.284062728e-05f, -3.915475926e-05f, -8.075716455e-06f, +1.252380240e-05f, -3.162191791e-04f, -8.581562317e-04f, -2.403121303e-04f, +2.064430670e-03f, +2.657494853e-03f, -1.854666155e-03f, -6.804770535e-03f, -2.456259947e-03f, +9.559323477e-03f, +1.160259164e-02f, -5.715634076e-03f, -2.149578308e-02f, -7.856844345e-03f, +2.377497782e-02f, +2.746604733e-02f, -1.123090787e-02f, -4.208092301e-02f, -1.512942707e-02f, +3.947281915e-02f, +4.361116146e-02f, -1.560074568e-02f, -5.769370474e-02f, -2.025979938e-02f, +4.712167497e-02f, +4.989625260e-02f, -1.586209842e-02f, -5.777467002e-02f, -1.978446272e-02f, +4.127905540e-02f, +4.189148016e-02f, -1.174118576e-02f, -4.226204057e-02f, -1.412873026e-02f, +2.605619065e-02f, +2.528926872e-02f, -6.004393903e-03f, -2.165731470e-02f, -7.104411146e-03f, +1.103086584e-02f, +1.019095468e-02f, -1.804410329e-03f, -6.882556012e-03f, -2.253249896e-03f, +2.529470650e-03f, +2.204701633e-03f, -1.314646052e-04f, -8.735140269e-04f, -3.416825550e-04f, +1.288213796e-05f, +9.565447060e-06f, -5.135717680e-05f, -7.260778855e-05f, +5.532149868e-05f, +1.978675716e-04f, +5.423534605e-05f, -3.122893028e-04f, -3.317440804e-04f, +2.529205913e-04f, +6.957782950e-04f, +1.299515369e-04f, -8.949096394e-04f, -8.032746449e-04f, +6.331730036e-04f, +1.461196060e-03f, +1.876646366e-04f, -1.647190982e-03f, -1.294071328e-03f, +1.059600435e-03f, +2.121136482e-03f, +1.742506136e-04f, -2.149690319e-03f, -1.496909514e-03f, +1.273251348e-03f, +2.241168059e-03f, +9.375414920e-05f, -2.055879498e-03f, -1.269317874e-03f, +1.120278267e-03f, +1.735999543e-03f, +7.609956241e-06f, -1.431894319e-03f, -7.751758193e-04f, +7.080437859e-04f, +9.549627299e-04f, -3.060054439e-05f, -6.907094046e-04f, -3.184554961e-04f, +2.985228050e-04f, +3.387666227e-04f, -2.304260649e-05f, -2.000651765e-04f, -7.274328220e-05f, +6.731990907e-05f, +5.740648749e-05f, -5.668242641e-06f, -1.252380240e-05f, /* 6,18 (48) */ +3.033370412e-04f, +5.196984324e-04f, -1.672315802e-04f, -1.397117576e-03f, -1.234639931e-03f, +1.334696589e-03f, +3.665043439e-03f, +1.521947006e-03f, -4.546426829e-03f, -7.069723108e-03f, +7.774009424e-05f, +1.098590935e-02f, +1.071156881e-02f, -5.962845269e-03f, -2.176066135e-02f, -1.243590607e-02f, +2.015797640e-02f, +3.860147158e-02f, +7.732067600e-03f, -5.352960111e-02f, -7.022190482e-02f, +2.103264136e-02f, +1.958373782e-01f, +3.425002336e-01f, +3.526234885e-01f, +2.184516782e-01f, +3.999843285e-02f, -6.526824712e-02f, -5.984317599e-02f, +5.766827686e-04f, +3.772810956e-02f, +2.422023955e-02f, -9.144313614e-03f, -2.230670423e-02f, -8.545810704e-03f, +9.387414359e-03f, +1.185444441e-02f, +1.511228713e-03f, -6.726619742e-03f, -5.247470000e-03f, +8.781999375e-04f, +3.703066585e-03f, +1.733142837e-03f, -1.030520118e-03f, -1.498060353e-03f, -3.202839688e-04f, +4.935730020e-04f, +3.542063574e-04f, -1.294511835e-05f, +4.016743749e-06f, +3.662429443e-05f, +2.898292652e-05f, -4.429858431e-05f, -1.000802969e-04f, -2.177874479e-05f, +1.499687083e-04f, +1.848397734e-04f, -5.916490752e-05f, -3.478723656e-04f, -2.477397787e-04f, +2.859840513e-04f, +6.480294558e-04f, +2.052632092e-04f, -7.591479881e-04f, -1.053915209e-03f, +8.413192717e-05f, +1.705400290e-03f, +1.696232062e-03f, -9.523068714e-04f, -4.523256024e-03f, -5.733393884e-03f, -2.892996910e-03f, +2.158318909e-03f, +5.552385977e-03f, +4.946148599e-03f, +1.528547974e-03f, -1.446524599e-03f, -1.863018891e-03f, -3.547219075e-04f, +9.694128361e-04f, +8.826700539e-04f, -6.512791117e-05f, -6.389709586e-04f, -3.749531488e-04f, +1.842221365e-04f, +3.666517270e-04f, +1.125369970e-04f, -1.641487836e-04f, -1.710951859e-04f, -3.253710870e-06f, +9.838547999e-05f, +5.764254316e-05f, -2.112421139e-05f, -3.966770023e-05f, -9.131431252e-06f, +1.234603609e-05f, -3.033370412e-04f, -8.485907846e-04f, -2.916693071e-04f, +1.991822882e-03f, +2.712816351e-03f, -1.656798584e-03f, -6.750535189e-03f, -2.768549250e-03f, +9.227579396e-03f, +1.185551223e-02f, -5.019855781e-03f, -2.136583155e-02f, -8.751753984e-03f, +2.297170317e-02f, +2.809922033e-02f, -9.769711812e-03f, -4.189325837e-02f, -1.677661805e-02f, +3.817874782e-02f, +4.467076189e-02f, -1.347960920e-02f, -5.751945412e-02f, -2.240948970e-02f, +4.562476546e-02f, +5.116950395e-02f, -1.362093036e-02f, -5.768091587e-02f, -2.184034221e-02f, +4.000973753e-02f, +4.301175842e-02f, -1.000518621e-02f, -4.225443061e-02f, -1.556062457e-02f, +2.528101483e-02f, +2.599731251e-02f, -5.049431174e-03f, -2.168791525e-02f, -7.795120550e-03f, +1.071241034e-02f, +1.048947748e-02f, -1.465643706e-03f, -6.905598619e-03f, -2.453315073e-03f, +2.456727368e-03f, +2.272021542e-03f, -7.405811770e-05f, -8.791822696e-04f, -3.542063574e-04f, +1.294511835e-05f, +1.073931758e-05f, -4.926544663e-05f, -7.402900911e-05f, +4.957137964e-05f, +1.964972977e-04f, +6.410352750e-05f, -3.027058630e-04f, -3.414401451e-04f, +2.307902896e-04f, +6.951983024e-04f, +1.620083209e-04f, -8.723908122e-04f, -8.319838752e-04f, +5.844689476e-04f, +1.466235570e-03f, +2.515253188e-04f, -1.612641656e-03f, -1.347555264e-03f, +9.867046377e-04f, +2.136150166e-03f, +2.628803648e-04f, -2.112448184e-03f, -1.566852253e-03f, +1.194482311e-03f, +2.264735987e-03f, +1.833202433e-04f, -2.027474710e-03f, -1.335842558e-03f, +1.058179230e-03f, +1.760454940e-03f, +7.359347869e-05f, -1.417398567e-03f, -8.208654043e-04f, +6.733951917e-04f, +9.723288509e-04f, +3.412638687e-06f, -6.867142749e-04f, -3.398859639e-04f, +2.861007156e-04f, +3.467634009e-04f, -1.216074364e-05f, -2.001343575e-04f, -7.857405835e-05f, +6.521278117e-05f, +5.933039603e-05f, -4.246478632e-06f, -1.234603609e-05f, /* 6,19 (48) */ +2.903919228e-04f, +5.237151761e-04f, -1.306072858e-04f, -1.368134650e-03f, -1.278938516e-03f, +1.234616292e-03f, +3.643264694e-03f, +1.671915714e-03f, -4.361587055e-03f, -7.128888016e-03f, -2.701322713e-04f, +1.073816957e-02f, +1.099755286e-02f, -5.314815813e-03f, -2.155539814e-02f, -1.319505405e-02f, +1.910406119e-02f, +3.868560351e-02f, +9.437467890e-03f, -5.183336905e-02f, -7.117421169e-02f, +1.650938534e-02f, +1.901039843e-01f, +3.396072367e-01f, +3.547818075e-01f, +2.240040642e-01f, +4.494458145e-02f, -6.373969915e-02f, -6.128970059e-02f, -1.286336122e-03f, +3.737338765e-02f, +2.518965239e-02f, -8.261643560e-03f, -2.237183214e-02f, -9.184781663e-03f, +9.012461210e-03f, +1.203866655e-02f, +1.877880440e-03f, -6.614082745e-03f, -5.411618784e-03f, +7.071047516e-04f, +3.699812874e-03f, +1.831528317e-03f, -9.728775749e-04f, -1.519184564e-03f, -3.599516690e-04f, +4.844415708e-04f, +3.665523935e-04f, -1.298089736e-05f, +3.049786624e-06f, +3.588242442e-05f, +3.033300262e-05f, -4.157428121e-05f, -9.997285517e-05f, -2.647383212e-05f, +1.452879072e-04f, +1.880543077e-04f, -4.863109859e-05f, -3.428244537e-04f, -2.590211863e-04f, +2.676012728e-04f, +6.471842655e-04f, +2.316054131e-04f, -7.322066741e-04f, -1.066129499e-03f, +3.153675092e-05f, +1.668542953e-03f, +1.737711230e-03f, -8.398258175e-04f, -4.430928190e-03f, -5.756750934e-03f, -3.033339389e-03f, +2.005613969e-03f, +5.503407437e-03f, +5.022298439e-03f, +1.645850917e-03f, -1.388226278e-03f, -1.888756093e-03f, -4.099171202e-04f, +9.478457543e-04f, +9.048406397e-04f, -3.563531872e-05f, -6.344436463e-04f, -3.919678164e-04f, +1.701783911e-04f, +3.690380776e-04f, +1.232497358e-04f, -1.590972051e-04f, -1.748050353e-04f, -8.531327437e-06f, +9.758519584e-05f, +6.022406427e-05f, -1.933780265e-05f, -4.012873408e-05f, -1.020059379e-05f, +1.213829077e-05f, -2.903919228e-04f, -8.378514670e-04f, -3.409347537e-04f, +1.917793873e-03f, +2.762387731e-03f, -1.460301286e-03f, -6.686431662e-03f, -3.071255113e-03f, +8.886139251e-03f, +1.208630252e-02f, -4.324657479e-03f, -2.120382323e-02f, -9.624144797e-03f, +2.213971930e-02f, +2.868368928e-02f, -8.303476242e-03f, -4.164173305e-02f, -1.838925970e-02f, +3.683119256e-02f, +4.565746653e-02f, -1.134345903e-02f, -5.725657376e-02f, -2.452193789e-02f, +4.405791320e-02f, +5.236398626e-02f, -1.135619437e-02f, -5.749759563e-02f, -2.386781692e-02f, +3.867389497e-02f, +4.406993765e-02f, -8.244731274e-03f, -4.218083714e-02f, -1.697802314e-02f, +2.446014943e-02f, +2.667070770e-02f, -4.077102323e-03f, -2.168450261e-02f, -8.481834825e-03f, +1.037252438e-02f, +1.077557820e-02f, -1.118880305e-03f, -6.917759363e-03f, -2.653449430e-03f, +2.378153310e-03f, +2.337234324e-03f, -1.472772168e-05f, -8.834287482e-04f, -3.665523935e-04f, +1.298089736e-05f, +1.184973062e-05f, -4.714454596e-05f, -7.528183798e-05f, +4.386599617e-05f, +1.948220386e-04f, +7.368618329e-05f, -2.927800816e-04f, -3.504359284e-04f, +2.085812962e-04f, +6.935058886e-04f, +1.934564494e-04f, -8.487007769e-04f, -8.591182488e-04f, +5.352187495e-04f, +1.468921251e-03f, +3.146050762e-04f, -1.575728923e-03f, -1.398685977e-03f, +9.125145432e-04f, +2.147765234e-03f, +3.509225522e-04f, -2.071932351e-03f, -1.634302546e-03f, +1.113810654e-03f, +2.284767897e-03f, +2.727637206e-04f, -1.995800483e-03f, -1.400486931e-03f, +9.941451458e-04f, +1.782245864e-03f, +1.398502021e-04f, -1.400547921e-03f, -8.655969926e-04f, +6.373657158e-04f, +9.882984193e-04f, +3.778868120e-05f, -6.815530458e-04f, -3.610442174e-04f, +2.730223974e-04f, +3.543109979e-04f, -1.060981472e-06f, -1.998602095e-04f, -8.439917964e-05f, +6.293264893e-05f, +6.119931503e-05f, -2.765018826e-06f, -1.213829077e-05f, /* 6,20 (48) */ +2.774110254e-04f, +5.267649628e-04f, -9.472486139e-05f, -1.337801647e-03f, -1.320512797e-03f, +1.134643437e-03f, +3.616790862e-03f, +1.817203621e-03f, -4.173532748e-03f, -7.177519115e-03f, -6.129567250e-04f, +1.047914838e-02f, +1.126515414e-02f, -4.667631548e-03f, -2.132379272e-02f, -1.392726073e-02f, +1.803793170e-02f, +3.871714026e-02f, +1.110601084e-02f, -5.009565782e-02f, -7.201403750e-02f, +1.207845715e-02f, +1.843472333e-01f, +3.365738973e-01f, +3.567874214e-01f, +2.295074716e-01f, +4.996687989e-02f, -6.209384823e-02f, -6.267792687e-02f, -3.175092215e-03f, +3.696347053e-02f, +2.613749814e-02f, -7.356802921e-03f, -2.240746746e-02f, -9.819225309e-03f, +8.620493394e-03f, +1.220884494e-02f, +2.246918518e-03f, -6.490833009e-03f, -5.570715989e-03f, +5.322997163e-04f, +3.691281546e-03f, +1.929113513e-03f, -9.126535106e-04f, -1.538522367e-03f, -4.000804031e-04f, +4.742409770e-04f, +3.786906842e-04f, -1.299015110e-05f, +2.104447899e-06f, +3.510112941e-05f, +3.160749143e-05f, -3.884182833e-05f, -9.972246519e-05f, -3.105281016e-05f, +1.404757048e-04f, +1.909596659e-04f, -3.817706870e-05f, -3.373738461e-04f, -2.698049460e-04f, +2.490853503e-04f, +6.454781322e-04f, +2.573180078e-04f, -7.046210202e-04f, -1.076784649e-03f, -2.040866966e-05f, +1.630064794e-03f, +1.776349229e-03f, -7.284964753e-04f, -4.336252698e-03f, -5.775822850e-03f, -3.171219637e-03f, +1.851269606e-03f, +5.450211354e-03f, +5.095422190e-03f, +1.763593947e-03f, -1.327192362e-03f, -1.912420313e-03f, -4.653170186e-04f, +9.247392699e-04f, +9.260704767e-04f, -5.732189004e-06f, -6.289968711e-04f, -4.086594606e-04f, +1.557188438e-04f, +3.709444324e-04f, +1.339401158e-04f, -1.537467684e-04f, -1.783236627e-04f, -1.388481807e-05f, +9.662710150e-05f, +6.276573041e-05f, -1.748281484e-05f, -4.053591994e-05f, -1.128162992e-05f, +1.190014518e-05f, -2.774110254e-04f, -8.260017364e-04f, -3.880792997e-04f, +1.842512035e-03f, +2.806253727e-03f, -1.265479247e-03f, -6.612745479e-03f, -3.364035194e-03f, +8.535703323e-03f, +1.229488382e-02f, -3.631151590e-03f, -2.101036678e-02f, -1.047284557e-02f, +2.128060105e-02f, +2.921890803e-02f, -6.834554991e-03f, -4.132712798e-02f, -1.996498863e-02f, +3.543250658e-02f, +4.656998107e-02f, -9.195693798e-03f, -5.690565121e-02f, -2.659387024e-02f, +4.242361066e-02f, +5.347779691e-02f, -9.071426476e-03f, -5.722483191e-02f, -2.586361741e-02f, +3.727340804e-02f, +4.506408280e-02f, -6.462485410e-03f, -4.204098693e-02f, -1.837857106e-02f, +2.359455243e-02f, +2.730807342e-02f, -3.088803903e-03f, -2.164671393e-02f, -9.163387871e-03f, +1.001148016e-02f, +1.104860059e-02f, -7.645693074e-04f, -6.918820344e-03f, -2.853309640e-03f, +2.293754130e-03f, +2.400166972e-03f, +4.647159335e-05f, -8.861937670e-04f, -3.786906842e-04f, +1.299015110e-05f, +1.289640005e-05f, -4.499945636e-05f, -7.636810055e-05f, +3.821462953e-05f, +1.928507229e-04f, +8.297188020e-05f, -2.825342586e-04f, -3.587265066e-04f, +1.863314983e-04f, +6.907170695e-04f, +2.242510113e-04f, -8.238894287e-04f, -8.846474702e-04f, +4.855061388e-04f, +1.469264846e-03f, +3.768072929e-04f, -1.536524015e-03f, -1.447391809e-03f, +8.371532126e-04f, +2.155972421e-03f, +4.382378834e-04f, -2.028211372e-03f, -1.699153931e-03f, +1.031364501e-03f, +2.301228055e-03f, +3.619414277e-04f, -1.960899026e-03f, -1.463141052e-03f, +9.282707680e-04f, +1.801323952e-03f, +2.062747762e-04f, -1.381353880e-03f, -9.092905707e-04f, +6.000023574e-04f, +1.002831839e-03f, +7.247466745e-05f, -6.752205347e-04f, -3.818911886e-04f, +2.593005639e-04f, +3.613892836e-04f, +1.024115626e-05f, -1.992364803e-04f, -9.020787174e-05f, +6.047955359e-05f, +6.300796565e-05f, -1.225099856e-06f, -1.190014518e-05f, /* 6,21 (48) */ +2.644208743e-04f, +5.288694107e-04f, -5.962373197e-05f, -1.306194156e-03f, -1.359354625e-03f, +1.034920972e-03f, +3.585738052e-03f, +1.957679326e-03f, -3.982573082e-03f, -7.215696183e-03f, -9.503305711e-04f, +1.020934344e-02f, +1.151423949e-02f, -4.022153416e-03f, -2.106647472e-02f, -1.463188175e-02f, +1.696114705e-02f, +3.869673159e-02f, +1.273607564e-02f, -4.831930859e-02f, -7.274253398e-02f, +7.742204448e-03f, +1.785714105e-01f, +3.334026777e-01f, +3.586386910e-01f, +2.349576830e-01f, +5.506230208e-02f, -6.033025428e-02f, -6.400511923e-02f, -5.087512528e-03f, +3.649815351e-02f, +2.706223741e-02f, -6.430732444e-03f, -2.241319965e-02f, -1.044822218e-02f, +8.211833933e-03f, +1.236456378e-02f, +2.617862950e-03f, -6.356892894e-03f, -5.724462757e-03f, +3.539760536e-04f, +3.677396728e-03f, +2.025740615e-03f, -8.498877802e-04f, -1.556005181e-03f, -4.406163231e-04f, +4.629593471e-04f, +3.905908294e-04f, -1.297359113e-05f, +1.181865908e-06f, +3.428258992e-05f, +3.280593321e-05f, -3.610554137e-05f, -9.933198915e-05f, -3.551089913e-05f, +1.355410019e-04f, +1.935561938e-04f, -2.781635243e-05f, -3.315333797e-04f, -2.800825408e-04f, +2.304631328e-04f, +6.429237330e-04f, +2.823741443e-04f, -6.764352098e-04f, -1.085885881e-03f, -7.164636522e-05f, +1.590035406e-03f, +1.812143592e-03f, -6.184132929e-04f, -4.239333900e-03f, -5.790616145e-03f, -3.306529007e-03f, +1.695410871e-03f, +5.392823581e-03f, +5.165431691e-03f, +1.881669363e-03f, -1.263450662e-03f, -1.933953010e-03f, -5.208531702e-04f, +9.001044679e-04f, +9.463197984e-04f, +2.454609306e-05f, -6.226268793e-04f, -4.250011263e-04f, +1.408582796e-04f, +3.723618031e-04f, +1.445927038e-04f, -1.481008172e-04f, -1.816430483e-04f, -1.930752840e-05f, +9.550988961e-05f, +6.526287593e-05f, -1.556080047e-05f, -4.088736808e-05f, -1.237290880e-05f, +1.163122716e-05f, -2.644208743e-04f, -8.131053364e-04f, -4.330787560e-04f, +1.766143934e-03f, +2.844468357e-03f, -1.072628524e-03f, -6.529773598e-03f, -3.646569453e-03f, +8.176976816e-03f, +1.248121532e-02f, -2.940434520e-03f, -2.078611577e-02f, -1.129673500e-02f, +2.039595358e-02f, +2.970441417e-02f, -5.365290145e-03f, -4.095032069e-02f, -2.150151264e-02f, +3.398511477e-02f, +4.740713429e-02f, -7.039721378e-03f, -5.646741332e-02f, -2.862208161e-02f, +4.072445673e-02f, +5.450916141e-02f, -6.770198421e-03f, -5.686289048e-02f, -2.782451643e-02f, +3.581026699e-02f, +4.599235357e-02f, -4.661161458e-03f, -4.183471216e-02f, -1.975992494e-02f, +2.268526186e-02f, +2.790807577e-02f, -2.085972064e-03f, -2.157423926e-02f, -9.838608406e-03f, +9.629588971e-03f, +1.130790116e-02f, -4.031800238e-04f, -6.908579188e-03f, -3.052546120e-03f, +2.203546258e-03f, +2.460646526e-03f, +1.094795590e-04f, -8.874188669e-04f, -3.905908294e-04f, +1.297359113e-05f, +1.387918782e-05f, -4.283507783e-05f, -7.728990083e-05f, +3.262626545e-05f, +1.905926445e-04f, +9.194990665e-05f, -2.719909026e-04f, -3.663082355e-04f, +1.640783646e-04f, +6.868495175e-04f, +2.543486610e-04f, -7.980080470e-04f, -9.085441513e-04f, +4.354149662e-04f, +1.467281854e-03f, +4.380373535e-04f, -1.495101536e-03f, -1.493605346e-03f, +7.607451793e-04f, +2.160768010e-03f, +5.246885145e-04f, -1.981358900e-03f, -1.761304204e-03f, +9.472748852e-04f, +2.314086478e-03f, +4.507103864e-04f, -1.922817896e-03f, -1.523697855e-03f, +8.606542412e-04f, +1.817645040e-03f, +2.727609708e-04f, -1.359831878e-03f, -9.518672422e-04f, +5.613547283e-04f, +1.015891543e-03f, +1.074166071e-04f, -6.677134881e-04f, -4.023878455e-04f, +2.449492238e-04f, +3.679786417e-04f, +2.172951773e-05f, -1.982574397e-04f, -9.598916518e-05f, +5.785387577e-05f, +6.475105451e-05f, +3.718756133e-07f, -1.163122716e-05f, /* 6,22 (48) */ +2.514472832e-04f, +5.300512766e-04f, -2.534114206e-05f, -1.273388223e-03f, -1.395460166e-03f, +9.355889825e-04f, +3.550227153e-03f, +2.093220328e-03f, -3.789016888e-03f, -7.243512536e-03f, -1.281863951e-03f, +9.929260895e-03f, +1.174470262e-02f, -3.379229683e-03f, -2.078410057e-02f, -1.530831696e-02f, +1.587526117e-02f, +3.862508523e-02f, +1.432611104e-02f, -4.650716500e-02f, -7.336094727e-02f, +3.502870548e-03f, +1.727807943e-01f, +3.300961487e-01f, +3.603341019e-01f, +2.403505066e-01f, +6.022773377e-02f, -5.844858492e-02f, -6.526856989e-02f, -7.021465538e-03f, +3.597730034e-02f, +2.796234188e-02f, -5.484412646e-03f, -2.238865355e-02f, -1.107084906e-02f, +7.786832807e-03f, +1.250542206e-02f, +2.990224753e-03f, -6.212300190e-03f, -5.872563574e-03f, +1.723330052e-04f, +3.658089200e-03f, +2.121250504e-03f, -7.846249043e-04f, -1.571565982e-03f, -4.815036912e-04f, +4.505864383e-04f, +4.022220566e-04f, -1.293196236e-05f, +2.831127739e-07f, +3.342900398e-05f, +3.392799952e-05f, -3.336966467e-05f, -9.880445341e-05f, -3.984357343e-05f, +1.304927459e-04f, +1.958446757e-04f, -1.756217103e-05f, -3.253162721e-04f, -2.898462597e-04f, +2.117612916e-04f, +6.395347426e-04f, +3.067481615e-04f, -6.476937013e-04f, -1.093440348e-03f, -1.221199429e-04f, +1.548525361e-03f, +1.845094954e-03f, -5.096686415e-04f, -4.140277667e-03f, -5.801141337e-03f, -3.439161406e-03f, +1.538164326e-03f, +5.331273993e-03f, +5.232241289e-03f, +1.999968260e-03f, -1.197032172e-03f, -1.953297415e-03f, -5.764561357e-04f, +8.739545383e-04f, +9.655496663e-04f, +5.516322276e-05f, -6.153311316e-04f, -4.409660155e-04f, +1.256122270e-04f, +3.732817758e-04f, +1.551919137e-04f, -1.421631704e-04f, -1.847553464e-04f, -2.479259607e-05f, +9.423247423e-05f, +6.771082165e-05f, -1.357345076e-05f, -4.118124412e-05f, -1.347274469e-05f, +1.133121540e-05f, -2.514472832e-04f, -7.992261485e-04f, -4.759138339e-04f, +1.688854033e-03f, +2.877094622e-03f, -8.820358799e-04f, -6.437823692e-03f, -3.918560355e-03f, +7.810668581e-03f, +1.264529368e-02f, -2.253585003e-03f, -2.053176710e-02f, -1.209474305e-02f, +1.948740943e-02f, +3.013982913e-02f, -3.898008290e-03f, -4.051228333e-02f, -2.299661418e-02f, +3.249150943e-02f, +4.816787947e-02f, -4.878953368e-03f, -5.594272481e-02f, -3.060344051e-02f, +3.896315252e-02f, +5.545643630e-02f, -4.456111943e-03f, -5.641218009e-02f, -2.974733433e-02f, +3.428656913e-02f, +4.685300781e-02f, -2.843516418e-03f, -4.156195119e-02f, -2.111975682e-02f, +2.173339462e-02f, +2.846943050e-02f, -1.070080522e-03f, -2.146682265e-02f, -1.050632189e-02f, +9.227201126e-03f, +1.155285038e-02f, -3.520138210e-05f, -6.886849670e-03f, -3.250803560e-03f, +2.107557093e-03f, +2.518500402e-03f, +1.742306135e-04f, -8.870469913e-04f, -4.022220566e-04f, +1.293196236e-05f, +1.479810028e-05f, -4.065622061e-05f, -7.804961113e-05f, +2.710958291e-05f, +1.880574393e-04f, +1.006102801e-04f, -2.611726881e-04f, -3.731787393e-04f, +1.418588860e-04f, +6.819225126e-04f, +2.837076758e-04f, -7.711091956e-04f, -9.307838329e-04f, +3.850290623e-04f, +1.462991477e-03f, +4.982027884e-04f, -1.451539319e-03f, -1.537263510e-03f, +6.834162386e-04f, +2.162153822e-03f, +6.101382732e-04f, -1.931453568e-03f, -1.820655579e-03f, +8.616755363e-04f, +2.323318986e-03f, +5.389280292e-04f, -1.881609933e-03f, -1.582053332e-03f, +7.913969501e-04f, +1.831169253e-03f, +3.392018486e-04f, -1.336001281e-03f, -9.932493695e-04f, +5.214749907e-04f, +1.027442075e-03f, +1.425595170e-04f, -6.590306087e-04f, -4.224952597e-04f, +2.299836744e-04f, +3.740600133e-04f, +3.338734227e-05f, -1.969179001e-04f, -1.017319127e-04f, +5.505634216e-05f, +6.642328452e-05f, +2.024337558e-06f, -1.133121540e-05f, /* 6,23 (48) */ +2.385153209e-04f, +5.303343893e-04f, +8.087861927e-06f, -1.239460223e-03f, -1.428829831e-03f, +8.367845291e-04f, +3.510383580e-03f, +2.223713074e-03f, -3.593172212e-03f, -7.261074707e-03f, -1.607180223e-03f, +9.639414635e-03f, +1.195646391e-02f, -2.739694940e-03f, -2.047735241e-02f, -1.595601066e-02f, +1.478182082e-02f, +3.850296528e-02f, +1.587463640e-02f, -4.466207004e-02f, -7.387061591e-02f, -6.374071197e-04f, +1.669796530e-01f, +3.266569873e-01f, +3.618722662e-01f, +2.456817806e-01f, +6.545997506e-02f, -5.644861666e-02f, -6.646560206e-02f, -8.974762953e-03f, +3.540084421e-02f, +2.883629642e-02f, -4.518862979e-03f, -2.233349033e-02f, -1.168618019e-02f, +7.345866792e-03f, +1.263103429e-02f, +3.363506529e-03f, -6.057108276e-03f, -6.014726745e-03f, -1.242234118e-05f, +3.633296604e-03f, +2.215482978e-03f, -7.169140826e-04f, -1.585139433e-03f, -5.226849353e-04f, +4.371136936e-04f, +4.135532720e-04f, -1.286604092e-05f, -5.908061777e-07f, +3.254258310e-05f, +3.497349141e-05f, -3.063836572e-05f, -9.814304120e-05f, -4.404656456e-05f, +1.253399165e-04f, +1.978263266e-04f, -7.427417591e-06f, -3.187360982e-04f, -2.990891982e-04f, +1.930062863e-04f, +6.353258038e-04f, +3.304156074e-04f, -6.184411672e-04f, -1.099457111e-03f, -1.717746382e-04f, +1.505606117e-03f, +1.875207023e-03f, -4.023527308e-04f, -4.039191267e-03f, -5.807412922e-03f, -3.569013395e-03f, +1.379657921e-03f, +5.265596469e-03f, +5.295767933e-03f, +2.118380642e-03f, -1.127971061e-03f, -1.970398609e-03f, -6.320555428e-04f, +8.463047818e-04f, +9.837220297e-04f, +8.608201384e-05f, -6.071083201e-04f, -4.565275267e-04f, +1.099969455e-04f, +3.736965314e-04f, +1.657220273e-04f, -1.359381228e-04f, -1.876528999e-04f, -3.033295803e-05f, +9.279399612e-05f, +7.010488204e-05f, -1.152259533e-05f, -4.141577321e-05f, -1.457939881e-05f, +1.099984113e-05f, -2.385153209e-04f, -7.844280482e-04f, -5.165700545e-04f, +1.610804422e-03f, +2.904204205e-03f, -6.939784406e-04f, -6.337213412e-03f, -4.179733044e-03f, +7.437489841e-03f, +1.278715257e-02f, -1.571662490e-03f, -2.024805943e-02f, -1.286585224e-02f, +1.855662560e-02f, +3.052485820e-02f, -2.435016814e-03f, -4.001408054e-02f, -2.444815350e-02f, +3.095424592e-02f, +4.885129570e-02f, -2.716799546e-03f, -5.533258654e-02f, -3.253489408e-02f, +3.714249694e-02f, +5.631811183e-02f, -2.132792957e-03f, -5.587325206e-02f, -3.162894426e-02f, +3.270451580e-02f, +4.764440476e-02f, -1.012347165e-03f, -4.122274934e-02f, -2.245575810e-02f, +2.074014525e-02f, +2.899090549e-02f, -4.263844613e-05f, -2.132426314e-02f, -1.116535250e-02f, +8.804705866e-03f, +1.178283406e-02f, +3.388586312e-04f, -6.853462328e-03f, -3.447721460e-03f, +2.005825180e-03f, +2.573556744e-03f, +2.406538980e-04f, -8.850226537e-04f, -4.135532720e-04f, +1.286604092e-05f, +1.565328426e-05f, -3.846759729e-05f, -7.864986146e-05f, +2.167294376e-05f, +1.852550607e-04f, +1.089437530e-04f, -2.501024122e-04f, -3.793368971e-04f, +1.197095174e-04f, +6.759568904e-04f, +3.122880098e-04f, -7.432466222e-04f, -9.513450014e-04f, +3.344320979e-04f, +1.456416562e-03f, +5.572134148e-04f, -1.405918285e-03f, -1.578307649e-03f, +6.052932368e-04f, +2.160137196e-03f, +6.944528796e-04f, -1.878578852e-03f, -1.877114848e-03f, +7.747026606e-04f, +2.328907250e-03f, +6.264524348e-04f, -1.837333188e-03f, -1.638106717e-03f, +7.206033657e-04f, +1.841861095e-03f, +4.054899386e-04f, -1.309885380e-03f, -1.033360712e-03f, +4.804177901e-04f, +1.037450173e-03f, +1.778475050e-04f, -6.491725796e-04f, -4.421746762e-04f, +2.144204917e-04f, +3.796149388e-04f, +4.519728111e-05f, -1.952132355e-04f, -1.074248073e-04f, +5.208803166e-05f, +6.801936589e-05f, +3.730547622e-06f, -1.099984113e-05f, /* 6,24 (48) */ +2.256492799e-04f, +5.297435832e-04f, +4.063044502e-05f, -1.204486732e-03f, -1.459468197e-03f, +7.386414879e-04f, +3.466337015e-03f, +2.349052990e-03f, -3.395345886e-03f, -7.268502124e-03f, -1.925916321e-03f, +9.340325437e-03f, +1.214947020e-02f, -2.104369136e-03f, -2.014693680e-02f, -1.657445183e-02f, +1.368236371e-02f, +3.833119065e-02f, +1.738024252e-02f, -4.278686302e-02f, -7.427296864e-02f, -4.676598387e-03f, +1.611722401e-01f, +3.230879739e-01f, +3.632519241e-01f, +2.509473770e-01f, +7.075574299e-02f, -5.433023602e-02f, -6.759357313e-02f, -1.094516156e-02f, +3.476878867e-02f, +2.968260120e-02f, -3.535140950e-03f, -2.224740832e-02f, -1.229328851e-02f, +6.889339265e-03f, +1.274103123e-02f, +3.737203061e-03f, -5.891386249e-03f, -6.150664868e-03f, -2.000752410e-04f, +3.602963646e-03f, +2.308276975e-03f, -6.468092006e-04f, -1.596662028e-03f, -5.641007085e-04f, +4.225342948e-04f, +4.245531131e-04f, -1.277663204e-05f, -1.438952877e-06f, +3.162554815e-05f, +3.594233741e-05f, -2.791572988e-05f, -9.735108524e-05f, -4.811586372e-05f, +1.200915124e-04f, +1.995027847e-04f, +2.575357107e-06f, -3.118067665e-04f, -3.078052584e-04f, +1.742243306e-04f, +6.303124963e-04f, +3.533532580e-04f, -5.887224336e-04f, -1.103947105e-03f, -2.205573646e-04f, +1.461349932e-03f, +1.902486547e-03f, -2.965535273e-04f, -3.936183247e-03f, -5.809449348e-03f, -3.695984295e-03f, +1.220020865e-03f, +5.195828866e-03f, +5.355931279e-03f, +2.236795531e-03f, -1.056304658e-03f, -1.985203607e-03f, -6.875801614e-04f, +8.171726146e-04f, +1.000799786e-03f, +1.172644383e-04f, -5.979583844e-04f, -4.716592936e-04f, +9.402941106e-05f, +3.735988633e-04f, +1.761672149e-04f, -1.294304454e-04f, -1.903282540e-04f, -3.592135816e-05f, +9.119382763e-05f, +7.244037263e-05f, -9.410201707e-06f, -4.158924427e-05f, -1.569108148e-05f, +1.063688973e-05f, -2.256492799e-04f, -7.687747640e-04f, -5.550376518e-04f, +1.532154561e-03f, +2.925877149e-03f, -5.087233799e-04f, -6.228269659e-03f, -4.429835456e-03f, +7.058152944e-03f, +1.290686209e-02f, -8.957056000e-04f, -1.993577142e-02f, -1.360909887e-02f, +1.760528059e-02f, +3.085929029e-02f, -9.786002519e-04f, -3.945686713e-02f, -2.585407178e-02f, +2.937593827e-02f, +4.945658894e-02f, -5.566623497e-04f, -5.463813366e-02f, -3.441347293e-02f, +3.526538209e-02f, +5.709281450e-02f, +1.961142931e-04f, -5.524679963e-02f, -3.346627745e-02f, +3.106640908e-02f, +4.836500812e-02f, +8.295139303e-04f, -4.081725940e-02f, -2.376564348e-02f, +1.970678454e-02f, +2.947132328e-02f, +9.948117267e-04f, -2.114641563e-02f, -1.181452508e-02f, +8.362531190e-03f, +1.199725455e-02f, +7.184735700e-04f, -6.808265047e-03f, -3.642934695e-03f, +1.898400373e-03f, +2.625644776e-03f, +3.086732639e-04f, -8.812921061e-04f, -4.245531131e-04f, +1.277663204e-05f, +1.644502299e-05f, -3.627381541e-05f, -7.909352851e-05f, +1.632438305e-05f, +1.821957554e-04f, +1.169418174e-04f, -2.388029525e-04f, -3.847828278e-04f, +9.766612121e-05f, +6.689749892e-04f, +3.400513450e-04f, -7.144751560e-04f, -9.702090995e-04f, +2.837074452e-04f, +1.447583542e-03f, +6.149814725e-04f, -1.358322287e-03f, -1.616683612e-03f, +5.265038580e-04f, +2.154730967e-03f, +7.775001628e-04f, -1.822822929e-03f, -1.930593536e-03f, +6.864947182e-04f, +2.330838826e-03f, +7.131425620e-04f, -1.790050839e-03f, -1.691760662e-03f, +6.483808839e-04f, +1.849689529e-03f, +4.715174124e-04f, -1.281511380e-03f, -1.072126567e-03f, +4.382401831e-04f, +1.045884839e-03f, +2.132238567e-04f, -6.381420856e-04f, -4.613875835e-04f, +1.982775184e-04f, +3.846256007e-04f, +5.714141947e-05f, -1.931394007e-04f, -1.130564007e-04f, +4.895038091e-05f, +6.953402739e-05f, +5.488598499e-06f, -1.063688973e-05f, /* 6,25 (48) */ +2.128726479e-04f, +5.283046303e-04f, +7.225599318e-05f, -1.168544394e-03f, -1.487383927e-03f, +6.412904027e-04f, +3.418221151e-03f, +2.469144503e-03f, -3.195843101e-03f, -7.265926767e-03f, -2.237723088e-03f, +9.032520179e-03f, +1.232369453e-02f, -1.474056640e-03f, -1.979358354e-02f, -1.716317426e-02f, +1.257841660e-02f, +3.811063328e-02f, +1.884159245e-02f, -4.088437647e-02f, -7.456952217e-02f, -8.612781634e-03f, +1.553627907e-01f, +3.193919896e-01f, +3.644719450e-01f, +2.561432059e-01f, +7.611167427e-02f, -5.209344049e-02f, -6.864987778e-02f, -1.293036517e-02f, +3.408120850e-02f, +3.049977381e-02f, -2.534341164e-03f, -2.213014388e-02f, -1.289124690e-02f, +6.417679971e-03f, +1.283506064e-02f, +4.110801924e-03f, -5.715219034e-03f, -6.280095313e-03f, -3.904034950e-04f, +3.567042288e-03f, +2.399470802e-03f, -5.743688280e-04f, -1.606072230e-03f, -6.056899527e-04f, +4.068432133e-04f, +4.351900028e-04f, -1.266456791e-05f, -2.260456842e-06f, +3.068012551e-05f, +3.683459133e-05f, -2.520575530e-05f, -9.643206018e-05f, -5.204772384e-05f, +1.147565375e-04f, +2.008761034e-04f, +1.243395811e-05f, -3.045424952e-04f, -3.159891480e-04f, +1.554413590e-04f, +6.245113053e-04f, +3.755391344e-04f, -5.585824193e-04f, -1.106923101e-03f, -2.684167601e-04f, +1.415829765e-03f, +1.926943287e-03f, -1.923566759e-04f, -3.831363317e-03f, -5.807272982e-03f, -3.819976279e-03f, +1.059383497e-03f, +5.122012995e-03f, +5.412653779e-03f, +2.355101077e-03f, -9.820734400e-04f, -1.997661437e-03f, -7.429579806e-04f, +7.865775689e-04f, +1.016746838e-03f, +1.486716681e-04f, -5.878825260e-04f, -4.863352246e-04f, +7.772730152e-05f, +3.729821955e-04f, +1.865115568e-04f, -1.226453846e-04f, -1.927741706e-04f, -4.155035540e-05f, +8.943157738e-05f, +7.471261742e-05f, -7.238374544e-06f, -4.170001406e-05f, -1.680595422e-05f, +1.024220231e-05f, -2.128726479e-04f, -7.523297410e-04f, -5.913114672e-04f, +1.453061032e-03f, +2.942201532e-03f, -3.265276245e-04f, -6.111327841e-03f, -4.668638408e-03f, +6.673370117e-03f, +1.300452821e-02f, -2.267306108e-04f, -1.959572007e-02f, -1.432357402e-02f, +1.663507149e-02f, +3.114299774e-02f, +4.689832901e-04f, -3.884188566e-02f, -2.721239407e-02f, +2.775925466e-02f, +4.998309280e-02f, +1.598068617e-03f, -5.386063349e-02f, -3.623629586e-02f, +3.333478856e-02f, +5.777930921e-02f, +2.526953119e-03f, -5.453365707e-02f, -3.525632829e-02f, +2.937464842e-02f, +4.901338901e-02f, +2.679203460e-03f, -4.034574199e-02f, -2.504715486e-02f, +1.863465797e-02f, +2.990956347e-02f, +2.040696565e-03f, -2.093319177e-02f, -1.245266717e-02f, +7.901143606e-03f, +1.219553207e-02f, +1.103099171e-03f, -6.751123627e-03f, -3.836074096e-03f, +1.785343972e-03f, +2.674595157e-03f, +3.782072913e-04f, -8.758035076e-04f, -4.351900028e-04f, +1.266456791e-05f, +1.717373175e-05f, -3.407937034e-05f, -7.938372451e-05f, +1.107160032e-05f, +1.788900391e-04f, +1.245967078e-04f, -2.272972249e-04f, -3.895178720e-04f, +7.576391290e-05f, +6.610005937e-04f, +3.669611382e-04f, -6.848506056e-04f, -9.873605329e-04f, +2.329380412e-04f, +1.436522367e-03f, +6.714217553e-04f, -1.308837966e-03f, -1.652341818e-03f, +4.471764115e-04f, +2.145953423e-03f, +8.591502741e-04f, -1.764278523e-03f, -1.981008035e-03f, +5.971921956e-04f, +2.329107182e-03f, +7.988584839e-04f, -1.739831097e-03f, -1.742921408e-03f, +5.748396599e-04f, +1.854628048e-03f, +5.371762618e-04f, -1.250910379e-03f, -1.109473904e-03f, +3.950015605e-04f, +1.052717418e-03f, +2.486311244e-04f, -6.259438306e-04f, -4.800957835e-04f, +1.815738499e-04f, +3.890748647e-04f, +6.920130012e-05f, -1.906929491e-04f, -1.186151225e-04f, +4.564518926e-05f, +7.096202782e-05f, +7.296413674e-06f, -1.024220231e-05f, /* 6,26 (48) */ +2.002080800e-04f, +5.260441735e-04f, +1.029361187e-04f, -1.131709803e-03f, -1.512589682e-03f, +5.448583425e-04f, +3.366173427e-03f, +2.583901040e-03f, -2.994966997e-03f, -7.253492809e-03f, -2.542265583e-03f, +8.716531031e-03f, +1.247913589e-02f, -8.495453346e-04f, -1.941804441e-02f, -1.772175668e-02f, +1.147149350e-02f, +3.784221652e-02f, +2.025742222e-02f, -3.895743318e-02f, -7.476187885e-02f, -1.244414495e-02f, +1.495555178e-01f, +3.155720133e-01f, +3.655313285e-01f, +2.612652189e-01f, +8.152432805e-02f, -4.973833941e-02f, -6.963195122e-02f, -1.492802661e-02f, +3.333825052e-02f, +3.128635138e-02f, -1.517594326e-03f, -2.198147221e-02f, -1.347912942e-02f, +5.931344747e-03f, +1.291278795e-02f, +4.483784119e-03f, -5.528707477e-03f, -6.402740698e-03f, -5.831776656e-04f, +3.525491932e-03f, +2.488902380e-03f, -4.996562106e-04f, -1.613310604e-03f, -6.473899668e-04f, +3.900372591e-04f, +4.454322052e-04f, -1.253070546e-05f, -3.054515381e-06f, +2.970854302e-05f, +3.765042989e-05f, -2.251234812e-05f, -9.538957497e-05f, -5.583866130e-05f, +1.093439878e-04f, +2.019487425e-04f, +2.213655910e-05f, -2.969577884e-04f, -3.236363777e-04f, +1.366829950e-04f, +6.179395883e-04f, +3.969525186e-04f, -5.280660766e-04f, -1.108399673e-03f, -3.153032321e-04f, +1.369119190e-03f, +1.948589975e-03f, -8.984542406e-05f, -3.724842225e-03f, -5.800910076e-03f, -3.940894468e-03f, +8.978771603e-04f, +5.044194584e-03f, +5.465860778e-03f, +2.473184673e-03f, -9.053210094e-04f, -2.007723215e-03f, -7.981162878e-04f, +7.545412919e-04f, +1.031528156e-03f, +1.802641175e-04f, -5.768832206e-04f, -5.005295418e-04f, +6.110897977e-05f, +3.718405999e-04f, +1.967390650e-04f, -1.155886614e-04f, -1.949836418e-04f, -4.721233222e-05f, +8.750709462e-05f, +7.691695648e-05f, -5.009354660e-06f, -4.174651130e-05f, -1.792213212e-05f, +9.815677156e-06f, -2.002080800e-04f, -7.351560092e-04f, -6.253908375e-04f, +1.373677308e-03f, +2.953273132e-03f, -1.476375854e-04f, -5.986731133e-03f, -4.895935633e-03f, +6.283852244e-03f, +1.308029212e-02f, +4.342699829e-04f, -1.922875894e-02f, -1.500842463e-02f, +1.564771096e-02f, +3.137593578e-02f, +1.905505657e-03f, -3.817046390e-02f, -2.852123204e-02f, +2.610691284e-02f, +5.043026921e-02f, +3.744022040e-03f, -5.300148322e-02f, -3.800057438e-02f, +3.135378052e-02f, +5.837650141e-02f, +4.856060301e-03f, -5.373479858e-02f, -3.699615939e-02f, +2.763172701e-02f, +4.958822867e-02f, +4.533831508e-03f, -3.980856572e-02f, -2.629806524e-02f, +1.752518407e-02f, +3.030456503e-02f, +3.093413984e-03f, -2.068456065e-02f, -1.307861100e-02f, +7.421047823e-03f, +1.237710592e-02f, +1.492174035e-03f, -6.681922327e-03f, -4.026767045e-03f, +1.666728850e-03f, +2.720240346e-03f, +4.491693191e-04f, -8.685070939e-04f, -4.454322052e-04f, +1.253070546e-05f, +1.783995335e-05f, -3.188863867e-05f, -7.952378569e-05f, +5.921951639e-06f, +1.753486718e-04f, +1.319014032e-04f, -2.156081422e-04f, -3.935445733e-04f, +5.403740792e-05f, +6.520588780e-04f, +3.929826645e-04f, -6.544296547e-04f, -1.002786671e-03f, +1.822062518e-04f, +1.423266428e-03f, +7.264517373e-04f, -1.257554585e-03f, -1.685237321e-03f, +3.674396180e-04f, +2.133828266e-03f, +9.392758951e-04f, -1.703042750e-03f, -2.028279749e-03f, +5.069373762e-04f, +2.323711714e-03f, +8.834616194e-04f, -1.686747109e-03f, -1.791498952e-03f, +5.000924368e-04f, +1.856654741e-03f, +6.023584774e-04f, -1.218117339e-03f, -1.145331498e-03f, +3.507635665e-04f, +1.057921668e-03f, +2.840112181e-04f, -6.125845522e-04f, -4.982614622e-04f, +1.643298167e-04f, +3.929463207e-04f, +8.135794825e-05f, -1.878710499e-04f, -1.240893005e-04f, +4.217462308e-05f, +7.229816771e-05f, +9.151747540e-06f, -9.815677156e-06f, /* 6,27 (48) */ +1.876773745e-04f, +5.229896581e-04f, +1.326446617e-04f, -1.094059373e-03f, -1.535102030e-03f, +4.494687675e-04f, +3.310334766e-03f, +2.693245028e-03f, -2.793018255e-03f, -7.231356250e-03f, -2.839223371e-03f, +8.392894653e-03f, +1.261581888e-02f, -2.316057463e-04f, -1.902109189e-02f, -1.824982276e-02f, +1.036309383e-02f, +3.752691329e-02f, +2.162654141e-02f, -3.700884321e-02f, -7.485172427e-02f, -1.616898718e-02f, +1.437546077e-01f, +3.116311188e-01f, +3.664292057e-01f, +2.663094135e-01f, +8.699018883e-02f, -4.726515474e-02f, -7.053727223e-02f, -1.693574982e-02f, +3.254013424e-02f, +3.204089267e-02f, -4.860661693e-04f, -2.180120809e-02f, -1.405601264e-02f, +5.430815205e-03f, +1.297389693e-02f, +4.855624719e-03f, -5.331968412e-03f, -6.518329359e-03f, -7.781613074e-04f, +3.478279600e-03f, +2.576409474e-03f, -4.227392541e-04f, -1.618319959e-03f, -6.891364781e-04f, +3.721151269e-04f, +4.552478823e-04f, -1.237592426e-05f, -3.820393667e-06f, +2.871302625e-05f, +3.839015022e-05f, -1.983931782e-05f, -9.422736517e-05f, -5.948545712e-05f, +1.038628378e-04f, +2.027235592e-04f, +3.167171449e-05f, -2.890674119e-04f, -3.307432576e-04f, +1.179745186e-04f, +6.106155420e-04f, +4.175739665e-04f, -4.972183318e-04f, -1.108393160e-03f, -3.611689990e-04f, +1.321292299e-03f, +1.967442276e-03f, +1.089945062e-05f, -3.616731638e-03f, -5.790390724e-03f, -4.058647023e-03f, +7.356340633e-04f, +4.962423244e-03f, +5.515480599e-03f, +2.590933072e-03f, -8.260940707e-04f, -2.015342221e-03f, -8.529817484e-04f, +7.210875415e-04f, +1.045109832e-03f, +2.120014881e-04f, -5.649642299e-04f, -5.142168205e-04f, +4.419347652e-05f, +3.701688128e-04f, +2.068337056e-04f, -1.082664692e-04f, -1.969499038e-04f, -5.289950351e-05f, +8.542047327e-05f, +7.904875357e-05f, -2.725517788e-06f, -4.172724070e-05f, -1.903768623e-05f, +9.357271131e-06f, -1.876773745e-04f, -7.173160559e-04f, -6.572794762e-04f, +1.294153522e-03f, +2.959195084e-03f, +2.771108642e-05f, -5.854829730e-03f, -5.111543775e-03f, +5.890307671e-03f, +1.313432953e-02f, +1.086328861e-03f, -1.883577627e-02f, -1.566285428e-02f, +1.464492429e-02f, +3.155814203e-02f, +3.328772085e-03f, -3.744401216e-02f, -2.977878662e-02f, +2.442167552e-02f, +5.079770883e-02f, +5.877850305e-03f, -5.206220732e-02f, -3.970361713e-02f, +2.932550077e-02f, +5.888343879e-02f, +7.179772015e-03f, -5.285133696e-02f, -3.868290649e-02f, +2.584022806e-02f, +5.008832111e-02f, +6.390486249e-03f, -3.920620725e-02f, -2.751618258e-02f, +1.637985257e-02f, +3.065532859e-02f, +4.151335652e-03f, -2.040054943e-02f, -1.369119555e-02f, +6.922786361e-03f, +1.254143573e-02f, +1.885120356e-03f, -6.600564379e-03f, -4.214638095e-03f, +1.542639549e-03f, +2.762414969e-03f, +5.214674869e-04f, -8.593553464e-04f, -4.552478823e-04f, +1.237592426e-05f, +1.844435346e-05f, -2.970587195e-05f, -7.951726066e-05f, +8.824424543e-07f, +1.715826333e-04f, +1.388496268e-04f, -2.037585732e-04f, -3.968666565e-04f, +3.252037081e-05f, +6.421763456e-04f, +4.180830575e-04f, -6.232697581e-04f, -1.016477841e-03f, +1.315937390e-04f, +1.407852481e-03f, +7.799916939e-04f, -1.204563872e-03f, -1.715329861e-03f, +2.874223964e-04f, +2.118384554e-03f, +1.017752442e-03f, -1.639216953e-03f, -2.072335209e-03f, +4.158741060e-04f, +2.314657752e-03f, +9.668149639e-04f, -1.630876849e-03f, -1.837407206e-03f, +4.242543686e-04f, +1.855752352e-03f, +6.669562287e-04f, -1.183171051e-03f, -1.179630067e-03f, +3.055900125e-04f, +1.061473822e-03f, +3.193054982e-04f, -5.980730325e-04f, -5.158472603e-04f, +1.465669659e-04f, +3.962243230e-04f, +9.359189777e-05f, -1.846715044e-04f, -1.294671807e-04f, +3.854121934e-05f, +7.353730115e-05f, +1.105218590e-05f, -9.357271131e-06f, /* 6,28 (48) */ +1.753014503e-04f, +5.191692644e-04f, +1.613576880e-04f, -1.055669223e-03f, -1.554941348e-03f, +3.552414023e-04f, +3.250849309e-03f, +2.797107866e-03f, -2.590294696e-03f, -7.199684535e-03f, -3.128290783e-03f, +8.062151396e-03f, +1.273379340e-02f, +3.790097958e-04f, -1.860351792e-02f, -1.874704109e-02f, +9.254700667e-03f, +3.716574429e-02f, +2.294783371e-02f, -3.504140093e-02f, -7.484082482e-02f, -1.978571881e-02f, +1.379642170e-01f, +3.075724718e-01f, +3.671648397e-01f, +2.712718367e-01f, +9.250566943e-02f, -4.467422166e-02f, -7.136336630e-02f, -1.895109204e-02f, +3.168715249e-02f, +3.276198022e-02f, +5.590436624e-04f, -2.158920660e-02f, -1.462097687e-02f, +4.916598384e-03f, +1.301809040e-02f, +5.225793532e-03f, -5.125134706e-03f, -6.626595828e-03f, -9.751112112e-04f, +3.425380097e-03f, +2.661829947e-03f, -3.436905005e-04f, -1.621045477e-03f, -7.308637188e-04f, +3.530774407e-04f, +4.646051534e-04f, -1.220112428e-05f, -4.557424696e-06f, +2.769579466e-05f, +3.905416716e-05f, -1.719037284e-05f, -9.294928507e-05f, -6.298515782e-05f, +9.832202803e-05f, +2.032037984e-04f, +4.102837087e-05f, -2.808863692e-04f, -3.373068931e-04f, +9.934083637e-05f, +6.025581680e-04f, +4.373853199e-04f, -4.660840266e-04f, -1.106921623e-03f, -4.059681292e-04f, +1.272423616e-03f, +1.983518747e-03f, +1.097997096e-04f, -3.507144024e-03f, -5.775748818e-03f, -4.173145228e-03f, +5.727871543e-04f, +4.876752428e-03f, +5.561444633e-03f, +2.708232495e-03f, -7.444424040e-04f, -2.020473974e-03f, -9.074804882e-04f, +6.862421796e-04f, +1.057459136e-03f, +2.438428143e-04f, -5.521306107e-04f, -5.273720285e-04f, +2.700047156e-05f, +3.679622505e-04f, +2.167794209e-04f, -1.006854710e-04f, -1.986664501e-04f, -5.860392582e-05f, +8.317205561e-05f, +8.110340390e-05f, -3.893731059e-07f, -4.164078698e-05f, -2.015064614e-05f, +8.867001001e-06f, -1.753014503e-04f, -6.988717024e-04f, -6.869853482e-04f, +1.214636261e-03f, +2.960077526e-03f, +1.992937197e-04f, -5.715980103e-03f, -5.315302348e-03f, +5.493441015e-03f, +1.316684990e-02f, +1.728505206e-03f, -1.841769321e-02f, -1.628612404e-02f, +1.362844645e-02f, +3.168973577e-02f, +4.736624566e-03f, -3.666402047e-02f, -3.098335049e-02f, +2.270634566e-02f, +5.108513123e-02f, +7.996234859e-03f, -5.104445488e-02f, -4.134283408e-02f, +2.725316557e-02f, +5.929931289e-02f, +9.494429766e-03f, -5.188452200e-02f, -4.031378334e-02f, +2.400282086e-02f, +5.051257547e-02f, +8.246238601e-03f, -3.853925102e-02f, -2.869935363e-02f, +1.520022250e-02f, +3.096091860e-02f, +5.212809473e-03f, -2.008124393e-02f, -1.428926858e-02f, +6.406939100e-03f, +1.268800270e-02f, +2.281344679e-03f, -6.506972481e-03f, -4.399309599e-03f, +1.413172369e-03f, +2.800956188e-03f, +5.950047880e-04f, -8.483031605e-04f, -4.646051534e-04f, +1.220112428e-05f, +1.898771574e-05f, -2.753519081e-05f, -7.936789852e-05f, -4.040278685e-06f, +1.676030986e-04f, +1.454358454e-04f, -1.917713026e-04f, -3.994890047e-04f, +1.124576621e-05f, +6.313807691e-04f, +4.422313454e-04f, -5.914290376e-04f, -1.028427323e-03f, +8.118132958e-05f, +1.390320562e-03f, +8.319648170e-04f, -1.149959854e-03f, -1.742583914e-03f, +2.072536508e-04f, +2.099656640e-03f, +1.094458265e-03f, -1.572906527e-03f, -2.113106202e-03f, +3.241475586e-04f, +2.301956556e-03f, +1.048783316e-03f, -1.572302999e-03f, -1.880564154e-03f, +3.474428399e-04f, +1.851908327e-03f, +7.308620442e-04f, -1.146114099e-03f, -1.212302398e-03f, +2.595467868e-04f, +1.063352654e-03f, +3.544548708e-04f, -5.824201054e-04f, -5.328163443e-04f, +1.283080387e-04f, +3.988940296e-04f, +1.058832189e-04f, -1.810927613e-04f, -1.347369482e-04f, +3.474788864e-05f, +7.467434777e-05f, +1.299514687e-05f, -8.867001001e-06f, /* 6,29 (48) */ +1.631003260e-04f, +5.146118397e-04f, +1.890534826e-04f, -1.016615056e-03f, -1.572131721e-03f, +2.622921173e-04f, +3.187864151e-03f, +2.895429894e-03f, -2.387090897e-03f, -7.158656165e-03f, -3.409177152e-03f, +7.724844502e-03f, +1.283313424e-02f, +9.815679637e-04f, -1.816613260e-02f, -1.921312512e-02f, +8.147779044e-03f, +3.675977616e-02f, +2.422025732e-02f, -3.305788219e-02f, -7.473102511e-02f, -2.329286284e-02f, +1.321884681e-01f, +3.033993266e-01f, +3.677376269e-01f, +2.761485891e-01f, +9.806711406e-02f, -4.196598917e-02f, -7.210780871e-02f, -2.097156602e-02f, +3.077967200e-02f, +3.344822240e-02f, +1.616502798e-03f, -2.134536379e-02f, -1.517310748e-02f, +4.389226356e-03f, +1.304509087e-02f, +5.593755782e-03f, -4.908355286e-03f, -6.727281299e-03f, -1.173777661e-03f, +3.366776171e-03f, +2.745002003e-03f, -2.625870966e-04f, -1.621434850e-03f, -7.725045058e-04f, +3.329267946e-04f, +4.734721544e-04f, -1.200722377e-05f, -5.265009118e-06f, +2.665905792e-05f, +3.964301044e-05f, -1.456911640e-05f, -9.155929989e-05f, -6.633507579e-05f, +9.273045181e-05f, +2.033930824e-04f, +5.019587769e-05f, -2.724298771e-04f, -3.433251790e-04f, +8.080645084e-05f, +5.937872373e-04f, +4.563697166e-04f, -4.347078605e-04f, -1.104004805e-03f, -4.496565782e-04f, +1.222587999e-03f, +1.996840788e-03f, +2.067797193e-04f, -3.396192524e-03f, -5.757022002e-03f, -4.284303580e-03f, +4.094699856e-04f, +4.787239382e-03f, +5.603687422e-03f, +2.824968759e-03f, -6.604188335e-04f, -2.023076302e-03f, -9.615381760e-04f, +6.500331626e-04f, +1.068544575e-03f, +2.757465103e-04f, -5.383887230e-04f, -5.399705649e-04f, +9.550274047e-06f, +3.652170240e-04f, +2.265601524e-04f, -9.285279645e-05f, -2.001270451e-04f, -6.431750700e-05f, +8.076243575e-05f, +8.307634195e-05f, +1.996438486e-06f, -4.148581872e-05f, -2.125900262e-05f, +8.344944653e-06f, -1.631003260e-04f, -6.798839867e-04f, -7.145205390e-04f, +1.135268363e-03f, +2.956037248e-03f, +3.668968183e-04f, -5.570544258e-03f, -5.507073651e-03f, +5.093952010e-03f, +1.317809567e-02f, +2.359885976e-03f, -1.797546187e-02f, -1.687755308e-02f, +1.260001913e-02f, +3.177091710e-02f, +6.126945128e-03f, -3.583205565e-02f, -3.213331035e-02f, +2.096376174e-02f, +5.129238488e-02f, +1.009589150e-02f, -4.994999662e-02f, -4.291574061e-02f, +2.514005936e-02f, +5.962346045e-02f, +1.179638632e-02f, -5.083573868e-02f, -4.188608634e-02f, +2.212225670e-02f, +5.086001831e-02f, +1.009814693e-02f, -3.780838897e-02f, -2.984546773e-02f, +1.398792011e-02f, +3.122046539e-02f, +6.276162127e-03f, -1.972678906e-02f, -1.487168869e-02f, +5.874122756e-03f, +1.281631074e-02f, +2.680238709e-03f, -6.401089262e-03f, -4.580402361e-03f, +1.278435420e-03f, +2.835704077e-03f, +6.696791358e-04f, -8.353080136e-04f, -4.734721544e-04f, +1.200722377e-05f, +1.947093683e-05f, -2.538057954e-05f, -7.907963685e-05f, -8.839925616e-06f, +1.634214139e-04f, +1.516552664e-04f, -1.796689918e-04f, -4.014176345e-04f, -9.754288189e-06f, +6.197011272e-04f, +4.653984841e-04f, -5.589661769e-04f, -1.038631332e-03f, +3.104888631e-05f, +1.370713898e-03f, +8.822973255e-04f, -1.093838693e-03f, -1.766968726e-03f, +1.270620581e-04f, +2.077684101e-03f, +1.169274842e-03f, -1.504220745e-03f, -2.150529871e-03f, +2.319039960e-04f, +2.285625305e-03f, +1.129233506e-03f, -1.511112825e-03f, -1.920891995e-03f, +2.697772798e-04f, +1.845114860e-03f, +7.939689928e-04f, -1.106992809e-03f, -1.243283477e-03f, +2.127017604e-04f, +1.063539538e-03f, +3.893998840e-04f, -5.656386610e-04f, -5.491324766e-04f, +1.095769468e-04f, +4.009414406e-04f, +1.182115470e-04f, -1.771339313e-04f, -1.398867490e-04f, +3.079791745e-05f, +7.570430487e-05f, +1.497788212e-05f, -8.344944653e-06f, /* 6,30 (48) */ +1.510931022e-04f, +5.093468306e-04f, +2.157125405e-04f, -9.769720453e-04f, -1.586700837e-03f, +1.707328174e-04f, +3.121529075e-03f, +2.988160346e-03f, -2.183697815e-03f, -7.108460287e-03f, -3.681607029e-03f, +7.381519323e-03f, +1.291394069e-02f, +1.575355201e-03f, -1.770976289e-02f, -1.964783298e-02f, +7.043774239e-03f, +3.631011958e-02f, +2.544284532e-02f, -3.106104140e-02f, -7.452424539e-02f, -2.668905536e-02f, +1.264314461e-01f, +2.991150230e-01f, +3.681470969e-01f, +2.809358285e-01f, +1.036708015e-01f, -3.914102041e-02f, -7.276822754e-02f, -2.299464232e-02f, +2.981813382e-02f, +3.409825556e-02f, +2.685047373e-03f, -2.106961728e-02f, -1.571149621e-02f, +3.849255791e-03f, +1.305464115e-02f, +5.958972806e-03f, -4.681795133e-03f, -6.820134096e-03f, -1.373904706e-03f, +3.302458664e-03f, +2.825764439e-03f, -1.795107547e-04f, -1.619438411e-03f, -8.139903245e-04f, +3.116677919e-04f, +4.818170991e-04f, -1.179515707e-05f, -5.942614945e-06f, +2.560501230e-05f, +4.015732169e-05f, -1.197904264e-05f, -9.006147782e-05f, -6.953278931e-05f, +8.709694318e-05f, +2.032954010e-04f, +5.916399725e-05f, -2.637133416e-04f, -3.487967929e-04f, +6.239543190e-05f, +5.843232553e-04f, +4.745115978e-04f, -4.031343334e-04f, -1.099664087e-03f, -4.921922220e-04f, +1.171860555e-03f, +2.007432595e-03f, +3.017665142e-04f, -3.283990837e-03f, -5.734251616e-03f, -4.392039864e-03f, +2.458165803e-04f, +4.693945103e-03f, +5.642146737e-03f, +2.941027388e-03f, -5.740791932e-04f, -2.023109414e-03f, -1.015080108e-03f, +6.124905293e-04f, +1.078335946e-03f, +3.076704192e-04f, -5.237462362e-04f, -5.519882992e-04f, -8.136198435e-06f, +3.619299538e-04f, +2.361598639e-04f, -8.477603732e-05f, -2.013257369e-04f, -7.003201622e-05f, +7.819246260e-05f, +8.496304936e-05f, +4.429146330e-06f, -4.126109227e-05f, -2.236071049e-05f, +7.791242229e-06f, -1.510931022e-04f, -6.604130498e-04f, -7.399011185e-04f, +1.056188726e-03f, +2.947197322e-03f, +5.303182322e-04f, -5.418888992e-03f, -5.686742643e-03f, +4.692534375e-03f, +1.316834138e-02f, +2.979587103e-03f, -1.751006338e-02f, -1.743651926e-02f, +1.156138780e-02f, +3.180196599e-02f, +7.497659026e-03f, -3.494975833e-02f, -3.322714904e-02f, +1.919679302e-02f, +5.141944693e-02f, +1.217357560e-02f, -4.878072178e-02f, -4.441996135e-02f, +2.298952949e-02f, +5.985536445e-02f, +1.408201163e-02f, -4.970650518e-02f, -4.339719917e-02f, +2.020136471e-02f, +5.112979559e-02f, +1.194326179e-02f, -3.701441998e-02f, -3.095246054e-02f, +1.274463663e-02f, +3.143316715e-02f, +7.339701665e-03f, -1.933738918e-02f, -1.543732735e-02f, +5.324990279e-03f, +1.292588768e-02f, +3.081180149e-03f, -6.282877715e-03f, -4.757536292e-03f, +1.138548671e-03f, +2.866501994e-03f, +7.453834406e-04f, -8.203301315e-04f, -4.818170991e-04f, +1.179515707e-05f, +1.989502124e-05f, -2.324588111e-05f, -7.865658953e-05f, -1.351057922e-05f, +1.590490714e-04f, +1.575038342e-04f, -1.674741398e-04f, -4.026596693e-04f, -3.044856647e-05f, +6.071675411e-04f, +4.875573858e-04f, -5.259403172e-04f, -1.047088999e-03f, -1.872481803e-05f, +1.349078811e-03f, +9.309185690e-04f, -1.036298510e-03f, -1.788458344e-03f, +4.697585680e-05f, +2.052511654e-03f, +1.242086964e-03f, -1.433272568e-03f, -2.184548817e-03f, +1.392905295e-04f, +2.265687070e-03f, +1.208034611e-03f, -1.447398043e-03f, -1.958317289e-03f, +1.913789724e-04f, +1.835368929e-03f, +8.561708638e-04f, -1.065857194e-03f, -1.272510612e-03f, +1.651246880e-04f, +1.062018502e-03f, +4.240808264e-04f, -5.477436456e-04f, -5.647600865e-04f, +9.039874540e-05f, +4.023534357e-04f, +1.305561128e-04f, -1.727947999e-04f, -1.449047117e-04f, +2.669496967e-05f, +7.662225966e-05f, +1.699747862e-05f, -7.791242229e-06f, /* 6,31 (48) */ +1.392979451e-04f, +5.034042156e-04f, +2.413175528e-04f, -9.368147236e-04f, -1.598679880e-03f, +8.067133956e-05f, +3.051996286e-03f, +3.075257289e-03f, -1.980402414e-03f, -7.049296290e-03f, -3.945320371e-03f, +7.032722530e-03f, +1.297633612e-02f, +2.159678456e-03f, -1.723525129e-02f, -2.005096731e-02f, +5.944110152e-03f, +3.581792736e-02f, +2.661470588e-02f, -2.905360880e-02f, -7.422247888e-02f, -2.997304620e-02f, +1.206971945e-01f, +2.947229831e-01f, +3.683929135e-01f, +2.856297736e-01f, +1.093129482e-01f, -3.619999302e-02f, -7.334230673e-02f, -2.501775173e-02f, +2.880305371e-02f, +3.471074609e-02f, +3.763383320e-03f, -2.076194686e-02f, -1.623524244e-02f, +3.297267492e-03f, +1.304650495e-02f, +6.320902760e-03f, -4.445635269e-03f, -6.904910133e-03f, -1.575230443e-03f, +3.232426648e-03f, +2.903956901e-03f, -9.454770530e-05f, -1.615009265e-03f, -8.552514168e-04f, +2.893070814e-04f, +4.896083413e-04f, -1.156587247e-05f, -6.589777155e-06f, +2.453583715e-05f, +4.059785137e-05f, -9.423532883e-06f, -8.845998205e-05f, -7.257614213e-05f, +8.143026444e-05f, +2.029151000e-04f, +6.792291394e-05f, -2.547523335e-04f, -3.537211876e-04f, +4.413138857e-05f, +5.741874250e-04f, +4.917967149e-04f, -3.714076894e-04f, -1.093922442e-03f, -5.335348884e-04f, +1.120316544e-03f, +2.015321110e-03f, +3.946898559e-04f, -3.170653092e-03f, -5.707482646e-03f, -4.496275233e-03f, +8.196129835e-05f, +4.596934279e-03f, +5.676763658e-03f, +3.056293732e-03f, -4.854822889e-04f, -2.020535961e-03f, -1.068031294e-03f, +5.736463860e-04f, +1.086804390e-03f, +3.395718620e-04f, -5.082121336e-04f, -5.634016105e-04f, -2.603744181e-05f, +3.580985825e-04f, +2.455625648e-04f, -7.646324280e-05f, -2.022568705e-04f, -7.573909431e-05f, +7.546324261e-05f, +8.675906281e-05f, +6.905852224e-06f, -4.096545548e-05f, -2.345369145e-05f, +7.206097170e-06f, -1.392979451e-04f, -6.405180286e-04f, -7.631469996e-04f, +9.775321364e-04f, +2.933686743e-03f, +6.893673036e-04f, -5.261385157e-03f, -5.854216783e-03f, +4.289874706e-03f, +1.313789281e-02f, +3.586754644e-03f, -1.702250600e-02f, -1.796245957e-02f, +1.051429880e-02f, +3.178324117e-02f, +8.846737837e-03f, -3.401883976e-02f, -3.426344755e-02f, +1.740833467e-02f, +5.146642279e-02f, +1.422608725e-02f, -4.753863481e-02f, -4.585323392e-02f, +2.080498068e-02f, +5.999465498e-02f, +1.634769870e-02f, -4.849847057e-02f, -4.484459721e-02f, +1.824304742e-02f, +5.132117457e-02f, +1.377863072e-02f, -3.615824912e-02f, -3.201831773e-02f, +1.147212602e-02f, +3.159829184e-02f, +8.401720167e-03f, -1.891330835e-02f, -1.598507100e-02f, +4.760230193e-03f, +1.301628643e-02f, +3.483533585e-03f, -6.152321602e-03f, -4.930331092e-03f, +9.936439597e-04f, +2.893196964e-03f, +8.220057003e-04f, -8.033326528e-04f, -4.896083413e-04f, +1.156587247e-05f, +2.026107605e-05f, -2.113479253e-05f, -7.810303453e-05f, -1.804669126e-05f, +1.544976859e-04f, +1.629782250e-04f, -1.552090461e-04f, -4.032233109e-04f, -5.080677731e-05f, +5.938112090e-04f, +5.086829447e-04f, -4.924109527e-04f, -1.053802351e-03f, -6.806222398e-05f, +1.325464625e-03f, +9.777611267e-04f, -9.774392195e-04f, -1.807031638e-03f, -3.287736205e-05f, +2.024189074e-03f, +1.312782922e-03f, -1.360178459e-03f, -2.215111194e-03f, +4.645487730e-05f, +2.242170783e-03f, +1.285058184e-03f, -1.381254679e-03f, -1.992771091e-03f, +1.123708632e-04f, +1.822672317e-03f, +9.173623485e-04f, -1.022760899e-03f, -1.299923556e-03f, +1.168871057e-04f, +1.058776278e-03f, +4.584378263e-04f, -5.287520583e-04f, -5.796643399e-04f, +7.079960453e-05f, +4.031178103e-04f, +1.428957736e-04f, -1.680758405e-04f, -1.497789702e-04f, +2.244308745e-05f, +7.742340156e-05f, +1.905086070e-05f, -7.206097170e-06f, /* 7, 0 (48) */ +0.000000000e+00f, -5.184284022e-04f, +3.212229602e-06f, +1.307536639e-03f, +8.360763470e-04f, -2.118986788e-03f, -2.852738276e-03f, +2.109164081e-03f, +6.105712658e-03f, -1.950685165e-05f, -9.834821711e-03f, -5.434403018e-03f, +1.219436233e-02f, +1.497172437e-02f, -1.025017254e-02f, -2.819089092e-02f, +4.350570367e-05f, +4.333632545e-02f, +2.439525774e-02f, -5.757751269e-02f, -7.936955118e-02f, +6.777629950e-02f, +3.088165774e-01f, +4.285159846e-01f, +3.088165774e-01f, +6.777629950e-02f, -7.936955118e-02f, -5.757751269e-02f, +2.439525774e-02f, +4.333632545e-02f, +4.350570367e-05f, -2.819089092e-02f, -1.025017254e-02f, +1.497172437e-02f, +1.219436233e-02f, -5.434403018e-03f, -9.834821711e-03f, -1.950685165e-05f, +6.105712658e-03f, +2.109164081e-03f, -2.852738276e-03f, -2.118986788e-03f, +8.360763470e-04f, +1.307536639e-03f, +3.212229602e-06f, -5.184284022e-04f, -1.234425141e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.402830756e-06f, -3.645794608e-05f, -2.934893968e-05f, +6.301990736e-05f, +9.261259788e-05f, -6.715667929e-05f, -2.008609397e-04f, +5.663638279e-06f, +3.341017752e-04f, +1.706534758e-04f, -4.324003844e-04f, -4.953746677e-04f, +3.913250279e-04f, +9.603516939e-04f, -6.404349089e-05f, -1.491008734e-03f, -7.546410229e-04f, +1.908165098e-03f, +2.478253380e-03f, -1.675039053e-03f, -6.961821842e-03f, -6.839105062e-03f, -1.284161757e-04f, +6.711386426e-03f, +7.067661105e-03f, +1.857870170e-03f, -2.418878930e-03f, -1.982443748e-03f, +6.867150942e-04f, +1.510974108e-03f, +1.161613155e-04f, -9.540569351e-04f, -4.237344909e-04f, +4.796149263e-04f, +4.482795641e-04f, -1.549617571e-04f, -3.390588754e-04f, -1.711613663e-05f, +2.003082109e-04f, +7.377878167e-05f, -9.040208288e-05f, -6.603770382e-05f, +2.747022415e-05f, +3.750518317e-05f, -3.401044618e-06f, -1.367129889e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.184284022e-04f, -3.212229602e-06f, -1.888597505e-03f, -1.236145466e-03f, +3.592023527e-03f, +4.047052782e-03f, -4.982450802e-03f, -8.918259580e-03f, +4.834186303e-03f, +1.556156622e-02f, -1.810767405e-03f, -2.277524083e-02f, -4.954253986e-03f, +2.859390823e-02f, +1.529315124e-02f, -3.084300852e-02f, -2.774230592e-02f, +2.793154400e-02f, +3.977726494e-02f, -1.956380632e-02f, -4.852880250e-02f, +7.038976371e-03f, +5.173229864e-02f, +7.038976371e-03f, -4.852880250e-02f, -1.956380632e-02f, +3.977726494e-02f, +2.793154400e-02f, -2.774230592e-02f, -3.084300852e-02f, +1.529315124e-02f, +2.859390823e-02f, -4.954253986e-03f, -2.277524083e-02f, -1.810767405e-03f, +1.556156622e-02f, +4.834186303e-03f, -8.918259580e-03f, -4.982450802e-03f, +4.047052782e-03f, +3.592023527e-03f, -1.236145466e-03f, -1.888597505e-03f, +7.853369693e-05f, +5.184284022e-04f, +1.234425141e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.402830756e-06f, +3.645794608e-05f, +4.990674596e-05f, -1.015072581e-04f, -1.466967147e-04f, +1.503045336e-04f, +3.210858882e-04f, -1.523377155e-04f, -5.718326359e-04f, +5.538729978e-05f, +8.642556210e-04f, +1.831321024e-04f, -1.130066542e-03f, -5.730390367e-04f, +1.282908753e-03f, +1.075471433e-03f, -1.246505957e-03f, -1.603675632e-03f, +9.852715527e-04f, +2.043673952e-03f, -5.241715658e-04f, -2.289024217e-03f, -5.221704922e-05f, +2.276646540e-03f, +6.230870902e-04f, -2.009071323e-03f, -1.068995934e-03f, +1.553665861e-03f, +1.308989800e-03f, -1.019137686e-03f, -1.322769487e-03f, +5.192197337e-04f, +1.150169523e-03f, -1.383111949e-04f, -8.701498844e-04f, -8.814437108e-05f, +5.697403375e-04f, +1.732332348e-04f, -3.161963751e-04f, -1.617501818e-04f, +1.422584669e-04f, +1.067364938e-04f, -4.720273898e-05f, -4.992298047e-05f, +3.401044618e-06f, +1.367129889e-05f, +0.000000000e+00f, /* 7, 1 (48) */ +0.000000000e+00f, -5.140255714e-04f, -3.324571648e-05f, +1.278187699e-03f, +8.990962544e-04f, -2.026374191e-03f, -2.919894955e-03f, +1.908303142e-03f, +6.111376296e-03f, +3.145949235e-04f, -9.664168235e-03f, -5.866803403e-03f, +1.169898766e-02f, +1.536304940e-02f, -9.289820844e-03f, -2.825493441e-02f, -1.447503031e-03f, +4.258168443e-02f, +2.630342283e-02f, -5.509925932e-02f, -8.104459023e-02f, +6.081447766e-02f, +3.019774723e-01f, +4.283875684e-01f, +3.155279638e-01f, +7.484396060e-02f, -7.751168101e-02f, -5.999639162e-02f, +2.241281399e-02f, +4.402304055e-02f, +1.554479812e-03f, -2.807472961e-02f, -1.120422947e-02f, +1.454798988e-02f, +1.267397725e-02f, -4.986123454e-03f, -9.989783468e-03f, -3.585657271e-04f, +6.088596521e-03f, +2.309472292e-03f, -2.778959494e-03f, -2.209388871e-03f, +7.700386432e-04f, +1.335006863e-03f, +4.071741277e-05f, -5.218294468e-04f, -1.371138130e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.363231868e-06f, -3.536116739e-05f, -3.112411600e-05f, +5.994166238e-05f, +9.460233729e-05f, -6.052409654e-05f, -2.010276988e-04f, -5.622708085e-06f, +3.286002227e-04f, +1.858136918e-04f, -4.159446280e-04f, -5.100302025e-04f, +3.586215482e-04f, +9.648401929e-04f, -1.247875202e-05f, -1.468661393e-03f, -8.202888207e-04f, +1.831730441e-03f, +2.532396482e-03f, -1.493629345e-03f, -6.850181348e-03f, -6.959632173e-03f, -3.851071098e-04f, +6.576588681e-03f, +7.167524184e-03f, +2.041903873e-03f, -2.354278168e-03f, -2.054408452e-03f, +6.165977888e-04f, +1.528490732e-03f, +1.687455178e-04f, -9.459444776e-04f, -4.557867798e-04f, +4.627657440e-04f, +4.635448853e-04f, -1.387605929e-04f, -3.434541995e-04f, -2.871543078e-05f, +1.993642683e-04f, +8.037719661e-05f, -8.797104486e-05f, -6.898759360e-05f, +2.548962186e-05f, +3.849926784e-05f, -2.359131188e-06f, -1.395240629e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.140255714e-04f, +3.324571648e-05f, -1.838690760e-03f, -1.337652724e-03f, +3.445326813e-03f, +4.197357316e-03f, -4.661364913e-03f, -9.070597296e-03f, +4.262353667e-03f, +1.561695352e-02f, -9.465117840e-04f, -2.259210873e-02f, -6.084320528e-03f, +2.802086920e-02f, +1.657605999e-02f, -2.976753709e-02f, -2.898881188e-02f, +2.632786837e-02f, +4.076253650e-02f, -1.752013237e-02f, -4.905297407e-02f, +4.749952153e-03f, +5.168008159e-02f, +9.315622911e-03f, -4.790571541e-02f, -2.157287765e-02f, +3.870826901e-02f, +2.948520986e-02f, -2.643331612e-02f, -3.186214621e-02f, +1.397038175e-02f, +2.911312797e-02f, -3.804084463e-03f, -2.291355203e-02f, -2.680917289e-03f, +1.547342185e-02f, +5.403926640e-03f, -8.745026346e-03f, -5.298647177e-03f, +3.885302601e-03f, +3.734281994e-03f, -1.129408972e-03f, -1.935800244e-03f, +2.861071646e-05f, +5.218294468e-04f, +1.371138130e-04f, +0.000000000e+00f, +0.000000000e+00f, -5.363231868e-06f, +3.536116739e-05f, +5.242115229e-05f, -9.617976463e-05f, -1.507233495e-04f, +1.387530092e-04f, +3.252146092e-04f, -1.314375733e-04f, -5.727039945e-04f, +2.291445353e-05f, +8.566381906e-04f, +2.271364703e-04f, -1.107813740e-03f, -6.252668419e-04f, +1.240686479e-03f, +1.129274547e-03f, -1.181780527e-03f, -1.650202515e-03f, +8.998052987e-04f, +2.074017417e-03f, -4.243447843e-04f, -2.296715000e-03f, -1.565431243e-04f, +2.259603869e-03f, +7.208850167e-04f, -1.970271063e-03f, -1.150799020e-03f, +1.500263071e-03f, +1.369090876e-03f, -9.603762505e-04f, -1.360169373e-03f, +4.639097211e-04f, +1.168061624e-03f, -9.276064125e-05f, -8.742896207e-04f, -1.211189995e-04f, +5.664150925e-04f, +1.940785686e-04f, -3.105441002e-04f, -1.730623710e-04f, +1.374100914e-04f, +1.118528453e-04f, -4.431058451e-05f, -5.177662578e-05f, +2.359131188e-06f, +1.395240629e-05f, +0.000000000e+00f, /* 7, 2 (48) */ +0.000000000e+00f, -5.086623395e-04f, -6.860688387e-05f, +1.247063583e-03f, +9.590379168e-04f, -1.931771853e-03f, -2.980419051e-03f, +1.707275443e-03f, +6.105753588e-03f, +6.431951462e-04f, -9.478354543e-03f, -6.282748031e-03f, +1.118895746e-02f, +1.572167095e-02f, -8.324980651e-03f, -2.826741316e-02f, -2.916164424e-03f, +4.176139561e-02f, +2.813515328e-02f, -5.256686283e-02f, -8.253821958e-02f, +5.396429631e-02f, +2.950178402e-01f, +4.280024613e-01f, +3.221045525e-01f, +8.201148479e-02f, -7.546977714e-02f, -6.235066979e-02f, +2.035840554e-02f, +4.463963834e-02f, +3.082970544e-03f, -2.790598409e-02f, -1.215017395e-02f, +1.409220310e-02f, +1.313674300e-02f, -4.522578569e-03f, -1.012854406e-02f, -7.020199266e-04f, +6.059881091e-03f, +2.508836561e-03f, -2.698582297e-03f, -2.297359916e-03f, +7.010510496e-04f, +1.360496485e-03f, +7.921668061e-05f, -5.241885780e-04f, -1.510662193e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.281120501e-06f, -3.421848615e-05f, -3.279435594e-05f, +5.681040703e-05f, +9.637149550e-05f, -5.389403999e-05f, -2.008143956e-04f, -1.672415031e-05f, +3.225723242e-04f, +2.004216370e-04f, -3.989501581e-04f, -5.235689730e-04f, +3.256869626e-04f, +9.675369667e-04f, +3.844823356e-05f, -1.444002155e-03f, -8.835766843e-04f, +1.753299022e-03f, +2.581310828e-03f, -1.313855934e-03f, -6.732920928e-03f, -7.072864687e-03f, -6.413739816e-04f, +6.434833450e-03f, +7.261242746e-03f, +2.226917682e-03f, -2.284463820e-03f, -2.123902846e-03f, +5.443807266e-04f, +1.543495271e-03f, +2.217074795e-04f, -9.360060371e-04f, -4.874186029e-04f, +4.448440945e-04f, +4.781597261e-04f, -1.220733051e-04f, -3.472712501e-04f, -4.044158950e-05f, +1.980245521e-04f, +8.693853995e-05f, -8.532019059e-05f, -7.186211401e-05f, +2.340904202e-05f, +3.943662641e-05f, -1.278478377e-06f, -1.420592772e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.086623395e-04f, +6.860688387e-05f, -1.786269607e-03f, -1.433832489e-03f, +3.294603463e-03f, +4.336110325e-03f, -4.336150304e-03f, -9.202034869e-03f, +3.689649672e-03f, +1.563986797e-02f, -8.987359339e-05f, -2.236497226e-02f, -7.192134268e-03f, +2.739560235e-02f, +1.781674647e-02f, -2.863826254e-02f, -3.017059240e-02f, +2.467766585e-02f, +4.166234180e-02f, -1.544611496e-02f, -4.947731885e-02f, +2.453237153e-03f, +5.152353847e-02f, +1.157522678e-02f, -4.718483039e-02f, -2.354314871e-02f, +3.755746999e-02f, +3.098547293e-02f, -2.506422524e-02f, -3.282252246e-02f, +1.261021237e-02f, +2.957703769e-02f, -2.636022839e-03f, -2.300631267e-02f, -3.555206910e-03f, +1.535230285e-02f, +5.970341733e-03f, -8.550947777e-03f, -5.609191277e-03f, +3.712240230e-03f, +3.871692085e-03f, -1.017556127e-03f, -1.980110829e-03f, -2.316590932e-05f, +5.241885780e-04f, +1.510662193e-04f, +0.000000000e+00f, +0.000000000e+00f, -6.281120501e-06f, +3.421848615e-05f, +5.474500924e-05f, -9.076854688e-05f, -1.543378622e-04f, +1.271229364e-04f, +3.285861621e-04f, -1.105777184e-04f, -5.723689113e-04f, -9.208901701e-06f, +8.473323064e-04f, +2.702399750e-04f, -1.083476215e-03f, -6.758064862e-04f, +1.196206297e-03f, +1.180449996e-03f, -1.114958710e-03f, -1.693164308e-03f, +8.127796729e-04f, +2.100049250e-03f, -3.238146663e-04f, -2.299706817e-03f, -2.605453583e-04f, +2.237927891e-03f, +8.173610248e-04f, -1.927343658e-03f, -1.230504856e-03f, +1.443564632e-03f, +1.426672350e-03f, -8.992957936e-04f, -1.395013665e-03f, +4.072137252e-04f, +1.183685991e-03f, -4.656973925e-05f, -8.766469271e-04f, -1.542432463e-04f, +5.618474442e-04f, +2.148275953e-04f, -3.041287796e-04f, -1.842133237e-04f, +1.321540652e-04f, +1.168416268e-04f, -4.123224846e-05f, -5.356478109e-05f, +1.278478377e-06f, +1.420592772e-05f, +0.000000000e+00f, /* 7, 3 (48) */ +0.000000000e+00f, -5.023812190e-04f, -1.028253700e-04f, +1.214269227e-03f, +1.015848324e-03f, -1.835400358e-03f, -3.034313091e-03f, +1.506461047e-03f, +6.089029438e-03f, +9.657674704e-04f, -9.277932906e-03f, -6.681698189e-03f, +1.066538848e-02f, +1.604735791e-02f, -7.357443684e-03f, -2.822896493e-02f, -4.360166579e-03f, +4.087781893e-02f, +2.988845230e-02f, -4.998555200e-02f, -8.385207551e-02f, +4.723137538e-02f, +2.879449755e-01f, +4.273610873e-01f, +3.285393859e-01f, +8.927272753e-02f, -7.324285945e-02f, -6.463513361e-02f, +1.823450269e-02f, +4.518401906e-02f, +4.626465814e-03f, -2.768427661e-02f, -1.308617999e-02f, +1.360478450e-02f, +1.358158709e-02f, -4.044418843e-03f, -1.025061737e-02f, -1.049291177e-03f, +6.019439501e-03f, +2.706861113e-03f, -2.611643757e-03f, -2.382680107e-03f, +6.291889356e-04f, +1.383905527e-03f, +1.186533070e-04f, -5.254670563e-04f, -1.652721470e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.155499268e-06f, -3.303356079e-05f, -3.435851553e-05f, +5.363354428e-05f, +9.792070572e-05f, -4.727929308e-05f, -2.002275795e-04f, -2.762256769e-05f, +3.160369234e-04f, +2.144578550e-04f, -3.814553423e-04f, -5.359806252e-04f, +2.925838239e-04f, +9.684595838e-04f, +8.865496331e-05f, -1.417104224e-03f, -9.444278384e-04f, +1.673031134e-03f, +2.625006558e-03f, -1.135929496e-03f, -6.610227950e-03f, -7.178708984e-03f, -8.969347129e-04f, +6.286251430e-03f, +7.348655345e-03f, +2.412685758e-03f, -2.209456350e-03f, -2.190772398e-03f, +4.701602984e-04f, +1.555927983e-03f, +2.749568061e-04f, -9.242365355e-04f, -5.185666495e-04f, +4.258691551e-04f, +4.920882012e-04f, -1.049244523e-04f, -3.504943998e-04f, -5.227413708e-05f, +1.962852063e-04f, +9.344927460e-05f, -8.245068760e-05f, -7.465381357e-05f, +2.123065152e-05f, +4.031373136e-05f, -1.606038524e-07f, -1.443029105e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.023812190e-04f, +1.028253700e-04f, -1.731524598e-03f, -1.524601036e-03f, +3.140265601e-03f, +4.463233262e-03f, -4.007564142e-03f, -9.312612588e-03f, +3.117280761e-03f, +1.563065907e-02f, +7.574587130e-04f, -2.209473228e-02f, -8.275610483e-03f, +2.671979587e-02f, +1.901295276e-02f, -2.745781254e-02f, -3.128555111e-02f, +2.298450154e-02f, +4.247512147e-02f, -1.334606571e-02f, -4.980113352e-02f, +1.535303363e-04f, +5.126299311e-02f, +1.381315467e-02f, -4.636746937e-02f, -2.547049237e-02f, +3.632696513e-02f, +3.242903756e-02f, -2.363755289e-02f, -3.372181825e-02f, +1.121519871e-02f, +2.998425141e-02f, -1.452336848e-03f, -2.305288241e-02f, -4.431853837e-03f, +1.519805960e-02f, +6.532189177e-03f, -8.336120182e-03f, -5.913320056e-03f, +3.528026906e-03f, +4.003846151e-03f, -9.007144999e-04f, -2.021343077e-03f, -7.673069041e-05f, +5.254670563e-04f, +1.652721470e-04f, +0.000000000e+00f, +0.000000000e+00f, -7.155499268e-06f, +3.303356079e-05f, +5.687786299e-05f, -8.528801151e-05f, -1.575407020e-04f, +1.154413295e-04f, +3.312057915e-04f, -8.980231717e-05f, -5.708443107e-04f, -4.091902851e-05f, +8.363759240e-04f, +3.123610207e-04f, -1.057122928e-03f, -7.245656074e-04f, +1.149575910e-03f, +1.228906834e-03f, -1.046189401e-03f, -1.732486615e-03f, +7.243798566e-04f, +2.121726136e-03f, -2.227902696e-04f, -2.297997438e-03f, -3.640086191e-04f, +2.211660024e-03f, +9.123132502e-04f, -1.880368423e-03f, -1.307941340e-03f, +1.383675242e-03f, +1.481602044e-03f, -8.360105083e-04f, -1.427212413e-03f, +3.492402140e-04f, +1.196990134e-03f, +1.699807130e-07f, -8.771974561e-04f, -1.874480376e-04f, +5.560305404e-04f, +2.354337306e-04f, -2.969518419e-04f, -1.951751290e-04f, +1.264938699e-04f, +1.216881284e-04f, -3.797021669e-05f, -5.528070823e-05f, +1.606038524e-07f, +1.443029105e-05f, +0.000000000e+00f, /* 7, 4 (48) */ +0.000000000e+00f, -4.952257198e-04f, -1.358589308e-04f, +1.179910712e-03f, +1.069481868e-03f, -1.737479652e-03f, -3.081592384e-03f, +1.306233468e-03f, +6.061406870e-03f, +1.281804394e-03f, -9.063475051e-03f, -7.063153531e-03f, +1.012940786e-02f, +1.633994173e-02f, -6.388984100e-03f, -2.814030997e-02f, -5.777270803e-03f, +3.993339109e-02f, +3.156148343e-02f, -4.736054545e-02f, -8.498800501e-02f, +4.062114743e-02f, +2.807662665e-01f, +4.264641526e-01f, +3.348256374e-01f, +9.662138288e-02f, -7.083017370e-02f, -6.684458996e-02f, +1.604373029e-02f, +4.565417936e-02f, +6.182393798e-03f, -2.740931980e-02f, -1.401041652e-02f, +1.308621785e-02f, +1.400745625e-02f, -3.552330642e-03f, -1.035554182e-02f, -1.399785577e-03f, +5.967165364e-03f, +2.903146319e-03f, -2.518194483e-03f, -2.465130794e-03f, +5.545351220e-04f, +1.405136178e-03f, +1.589670384e-04f, -5.256276602e-04f, -1.797024380e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.985500330e-06f, -3.181006045e-05f, -3.581570155e-05f, +5.041842712e-05f, +9.925103113e-05f, -4.069239427e-05f, -1.992744192e-04f, -3.830049673e-05f, +3.090135547e-04f, +2.279042196e-04f, -3.634989747e-04f, -5.472570011e-04f, +2.593742174e-04f, +9.676285787e-04f, +1.380612193e-04f, -1.388043770e-03f, -1.002770603e-03f, +1.591087852e-03f, +2.663501277e-03f, -9.600562222e-04f, -6.482295563e-03f, -7.277080996e-03f, -1.151508169e-03f, +6.130982232e-03f, +7.429607677e-03f, +2.598979196e-03f, -2.129284004e-03f, -2.254864673e-03f, +3.940375622e-04f, +1.565732871e-03f, +3.284014664e-04f, -9.106341493e-04f, -5.491677055e-04f, +4.058622990e-04f, +5.052952394e-04f, -8.733979986e-05f, -3.531089337e-04f, -6.419208530e-05f, +1.941430972e-04f, +9.989573536e-05f, -7.936416972e-05f, -7.735526809e-05f, +1.895687537e-05f, +4.112711044e-05f, +9.928457007e-07f, -1.462395980e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.952257198e-04f, +1.358589308e-04f, -1.674646735e-03f, -1.609889047e-03f, +2.982724899e-03f, +4.578674591e-03f, -3.676358351e-03f, -9.402414905e-03f, +2.546436450e-03f, +1.558974004e-02f, +1.593834637e-03f, -2.178237126e-02f, -9.332733411e-03f, +2.599523026e-02f, +2.016252867e-02f, -2.622890571e-02f, -3.233174051e-02f, +2.125201493e-02f, +4.319950132e-02f, -1.122433957e-02f, -5.002392379e-02f, -2.144467102e-03f, +5.089898449e-02f, +1.602481470e-02f, -4.545515612e-02f, -2.735086079e-02f, +3.501902379e-02f, +3.381271281e-02f, -2.215595085e-02f, -3.455782876e-02f, +9.787986297e-03f, +3.033349163e-02f, -2.553467138e-04f, -2.305271243e-02f, -5.309051293e-03f, +1.501061156e-02f, +7.088219717e-03f, -8.100686451e-03f, -6.210271898e-03f, +3.332851777e-03f, +4.130340021e-03f, -7.790263715e-04f, -2.059313294e-03f, -1.320113986e-04f, +5.256276602e-04f, +1.797024380e-04f, +0.000000000e+00f, +0.000000000e+00f, -7.985500330e-06f, +3.181006045e-05f, +5.881974410e-05f, -7.975240632e-05f, -1.603332576e-04f, +1.037348326e-04f, +3.330803253e-04f, -6.915470437e-05f, -5.681494757e-04f, -7.215383980e-05f, +8.238101248e-04f, +3.534208899e-04f, -1.028826526e-03f, -7.714563107e-04f, +1.100906835e-03f, +1.274560359e-03f, -9.756248546e-04f, -1.768102977e-03f, +6.347933102e-04f, +2.139013986e-03f, -1.214813444e-04f, -2.291594477e-03f, -4.667189164e-04f, +2.180851332e-03f, +1.005542717e-03f, -1.829433348e-03f, -1.382940602e-03f, +1.320706728e-03f, +1.533752739e-03f, -7.706398975e-04f, -1.456680690e-03f, +2.901011902e-04f, +1.207926078e-03f, +4.736493450e-05f, -8.759205059e-04f, -2.206633037e-04f, +5.489601822e-04f, +2.558500265e-04f, -2.890164525e-04f, -2.059198058e-04f, +1.204340034e-04f, +1.263776520e-04f, -3.452750106e-05f, -5.691766838e-05f, -9.928457007e-07f, +1.462395980e-05f, +0.000000000e+00f, /* 7, 5 (48) */ +0.000000000e+00f, -4.872402194e-04f, -1.676689913e-04f, +1.144095010e-03f, +1.119900295e-03f, -1.638228621e-03f, -3.122284779e-03f, +1.106959049e-03f, +6.023106374e-03f, +1.590817949e-03f, -8.835570832e-03f, -7.426652506e-03f, +9.582150857e-03f, +1.659931595e-02f, -5.421355521e-03f, -2.800224875e-02f, -7.165314573e-03f, +3.893062048e-02f, +3.315257128e-02f, -4.469704417e-02f, -8.594806123e-02f, +3.413885187e-02f, +2.734891855e-01f, +4.253126445e-01f, +3.409566196e-01f, +1.040509906e-01f, -6.823119450e-02f, -6.897387397e-02f, +1.378886562e-02f, +4.604821692e-02f, +7.748126668e-03f, -2.708091834e-02f, -1.492105067e-02f, +1.253705014e-02f, +1.441331855e-02f, -3.047035402e-03f, -1.044288162e-02f, -1.752894510e-03f, +5.902973279e-03f, +3.097289416e-03f, -2.418298747e-03f, -2.544494964e-03f, +4.771798539e-04f, +1.424093054e-03f, +2.000941488e-04f, -5.246348145e-04f, -1.943263978e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.770384584e-06f, -3.055165641e-05f, -3.716526842e-05f, +4.717234406e-05f, +1.003639553e-04f, -3.414561603e-05f, -1.979626789e-04f, -4.874115534e-05f, +3.015223972e-04f, +2.407439523e-04f, -3.451201979e-04f, -5.573921262e-04f, +2.261196541e-04f, +9.650673803e-04f, +1.865891824e-04f, -1.356899769e-03f, -1.058538454e-03f, +1.507630778e-03f, +2.696819961e-03f, -7.864375643e-04f, -6.349322397e-03f, -7.367906298e-03f, -1.404814536e-03f, +5.969174217e-03f, +7.503952826e-03f, +2.785566329e-03f, -2.043982842e-03f, -2.316029593e-03f, +3.161181312e-04f, +1.572857817e-03f, +3.819479360e-04f, -8.952003513e-04f, -5.791587704e-04f, +3.848470823e-04f, +5.177466597e-04f, -6.934628683e-05f, -3.551010896e-04f, -7.617396702e-05f, +1.915958308e-04f, +1.062641544e-04f, -7.606274189e-05f, -7.995909681e-05f, +1.659039649e-05f, +4.187335580e-05f, +2.180095653e-06f, -1.478543797e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.872402194e-04f, +1.676689913e-04f, -1.615826991e-03f, -1.689641453e-03f, +2.822391641e-03f, +4.682409424e-03f, -3.343278025e-03f, -9.471569609e-03f, +1.978286975e-03f, +1.551758620e-02f, +2.417644762e-03f, -2.142895037e-02f, -1.036155994e-02f, +2.522377395e-02f, +2.126343551e-02f, -2.495434535e-02f, -3.330736537e-02f, +1.948391195e-02f, +4.383429464e-02f, -9.085325584e-03f, -5.014540513e-02f, -4.436061579e-03f, +5.043226558e-02f, +1.820566603e-02f, -4.444961340e-02f, -2.918029414e-02f, +3.363608319e-02f, +3.513341953e-02f, -2.062219811e-02f, -3.532846866e-02f, +8.331305607e-03f, +3.062359282e-02f, +9.525793645e-04f, -2.300534749e-02f, -6.184971799e-03f, +1.478994826e-02f, +7.637179899e-03f, -7.844836425e-03f, -6.499288351e-03f, +3.126931971e-03f, +4.250774024e-03f, -6.526487195e-04f, -2.093840795e-03f, -1.889290670e-04f, +5.246348145e-04f, +1.943263978e-04f, +0.000000000e+00f, +0.000000000e+00f, -8.770384584e-06f, +3.055165641e-05f, +6.057115596e-05f, -7.417578898e-05f, -1.627178350e-04f, +9.202966494e-05f, +3.342181337e-04f, -4.867729821e-05f, -5.643059740e-04f, -1.028530154e-04f, +8.096789935e-04f, +3.933438867e-04f, -9.986631499e-04f, -8.163953233e-04f, +1.050314142e-03f, +1.317332257e-03f, -9.034203447e-04f, -1.799954978e-03f, +5.442093688e-04f, +2.151887982e-03f, -2.009788815e-05f, -2.280515365e-03f, -5.684638544e-04f, +2.145562425e-03f, +1.096853765e-03f, -1.774634935e-03f, -1.455339376e-03f, +1.254777836e-03f, +1.583002471e-03f, -7.033085484e-04f, -1.483338804e-03f, +2.299119763e-04f, +1.216450505e-03f, +9.491966892e-05f, -8.727991044e-04f, -2.538181231e-04f, +5.406348675e-04f, +2.760292722e-04f, -2.803275333e-04f, -2.164193667e-04f, +1.139799881e-04f, +1.308955478e-04f, -3.090764417e-05f, -5.846894037e-05f, -2.180095653e-06f, +1.478543797e-05f, +0.000000000e+00f, /* 7, 6 (48) */ +0.000000000e+00f, -4.784698349e-04f, -1.982206477e-04f, +1.106929742e-03f, +1.167072639e-03f, -1.537864666e-03f, -3.156430395e-03f, +9.089963697e-04f, +5.974365218e-03f, +1.892340346e-03f, -8.594826879e-03f, -7.771772704e-03f, +9.024758730e-03f, +1.682543560e-02f, -4.456288141e-03f, -2.781565957e-02f, -8.522214343e-03f, +3.787208203e-02f, +3.466020206e-02f, -4.200022421e-02f, -8.673449879e-02f, +2.778952947e-02f, +2.661212792e-01f, +4.239078299e-01f, +3.469257938e-01f, +1.115549434e-01f, -6.544562817e-02f, -7.101785681e-02f, +1.147283603e-02f, +4.636433506e-02f, +9.320984485e-03f, -2.669897040e-02f, -1.581625102e-02f, +1.195789137e-02f, +1.479816563e-02f, -2.529288742e-03f, -1.051222790e-02f, -2.107995600e-03f, +5.826799312e-03f, +3.288885247e-03f, -2.312034593e-03f, -2.620557706e-03f, +3.972207571e-04f, +1.440683450e-03f, +2.419675046e-04f, -5.224547188e-04f, -2.091118358e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.509540550e-06f, -2.926201376e-05f, -3.840681472e-05f, +4.390250510e-05f, +1.012613717e-04f, -2.765094472e-05f, -1.963006941e-04f, -5.892846530e-05f, +2.935842267e-04f, +2.529616351e-04f, -3.263584260e-04f, -5.663821937e-04f, +1.928809655e-04f, +9.608022356e-04f, +2.341635411e-04f, -1.323753831e-03f, -1.111670068e-03f, +1.422821778e-03f, +2.724994848e-03f, -6.152699801e-04f, -6.211512263e-03f, -7.451120177e-03f, -1.656575693e-03f, +5.800984315e-03f, +7.571551505e-03f, +2.972213043e-03f, -1.953596747e-03f, -2.374119699e-03f, +2.365120531e-04f, +1.577254726e-03f, +4.355013456e-04f, -8.779399475e-04f, -6.084771756e-04f, +3.628492277e-04f, +5.294092466e-04f, -5.097199019e-05f, -3.564580986e-04f, -8.819787101e-05f, +1.886417687e-04f, +1.125406874e-04f, -7.254898397e-05f, -8.245797894e-05f, +1.413415498e-05f, +4.254913318e-05f, +3.399244831e-06f, -1.491327491e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.784698349e-04f, +1.982206477e-04f, -1.555255835e-03f, -1.763817242e-03f, +2.659673806e-03f, +4.774439089e-03f, -3.009059891e-03f, -9.520246907e-03f, +1.413981001e-03f, +1.541473318e-02f, +3.227323755e-03f, -2.103560649e-02f, -1.136022309e-02f, +2.440737863e-02f, +2.231374965e-02f, -2.363701309e-02f, -3.421078571e-02f, +1.768395697e-02f, +4.437850400e-02f, -6.933437601e-03f, -5.016550302e-02f, -6.716576944e-03f, +4.986380172e-02f, +2.035122845e-02f, -4.335275964e-02f, -3.095492907e-02f, +3.218074382e-02f, +3.638819737e-02f, -1.903919564e-02f, -3.603177721e-02f, +6.847966803e-03f, +3.085350479e-02f, +2.169029869e-03f, -2.291042782e-02f, -7.057770904e-03f, +1.453613013e-02f, +8.177814767e-03f, -7.568807152e-03f, -6.779615884e-03f, +2.910512605e-03f, +4.364754012e-03f, -5.217531717e-04f, -2.124748439e-03f, -2.473980074e-04f, +5.224547188e-04f, +2.091118358e-04f, +0.000000000e+00f, +0.000000000e+00f, -9.509540550e-06f, +2.926201376e-05f, +6.213306230e-05f, -6.857199685e-05f, -1.646976352e-04f, +8.035156716e-05f, +3.346290863e-04f, -2.841151869e-05f, -5.593375809e-04f, -1.329581136e-04f, +7.940294904e-04f, +4.320574712e-04f, -9.667122445e-04f, -8.593041379e-04f, +9.979161819e-04f, +1.357150735e-03f, -8.297338200e-04f, -1.827992339e-03f, +4.528188339e-04f, +2.160332612e-03f, +8.115029959e-05f, -2.264787302e-03f, -6.690330814e-04f, +2.105863338e-03f, +1.186054466e-03f, -1.716078009e-03f, -1.524979356e-03f, +1.186014010e-03f, +1.629234820e-03f, -6.341458936e-04f, -1.507112506e-03f, +1.687909899e-04f, +1.222524883e-03f, +1.427370524e-04f, -8.678200852e-04f, -2.868408691e-04f, +5.310558291e-04f, +2.959240970e-04f, -2.708917795e-04f, -2.266458833e-04f, +1.071383779e-04f, +1.352272513e-04f, -2.711472282e-05f, -5.992783944e-05f, -3.399244831e-06f, +1.491327491e-05f, +0.000000000e+00f, /* 7, 7 (48) */ +0.000000000e+00f, -4.689602943e-04f, -2.274826614e-04f, +1.068522927e-03f, +1.210975144e-03f, -1.436603294e-03f, -3.184081339e-03f, +7.126956756e-04f, +5.915436753e-03f, +2.185924572e-03f, -8.341865244e-03f, -8.098131130e-03f, +8.458376537e-03f, +1.701831657e-02f, -3.495485906e-03f, -2.758149602e-02f, -9.845968173e-03f, +3.676041196e-02f, +3.608302384e-02f, -3.927522936e-02f, -8.734976877e-02f, +2.157801721e-02f, +2.586701590e-01f, +4.222512542e-01f, +3.527267781e-01f, +1.191264949e-01f, -6.247341513e-02f, -7.297145356e-02f, +9.098716328e-03f, +4.660084711e-02f, +1.089823921e-02f, -2.626346905e-02f, -1.669419097e-02f, +1.134941420e-02f, +1.516101486e-02f, -1.999879496e-03f, -1.056319989e-02f, -2.464453698e-03f, +5.738601441e-03f, +3.477527016e-03f, -2.199493906e-03f, -2.693106690e-03f, +3.147627782e-04f, +1.454817605e-03f, +2.845166378e-04f, -5.190554740e-04f, -2.240251107e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.020248298e-05f, -2.794478312e-05f, -3.954017920e-05f, +4.061602803e-05f, +1.019455730e-04f, -2.122006131e-05f, -1.942973467e-04f, -6.884707305e-05f, +2.852203686e-04f, +2.645432223e-04f, -3.072532678e-04f, -5.742255451e-04f, +1.597182014e-04f, +9.548621291e-04f, +2.807115945e-04f, -1.288690027e-03f, -1.162109368e-03f, +1.336822724e-03f, +2.748065320e-03f, -4.467446921e-04f, -6.069073841e-03f, -7.526667692e-03f, -1.906515583e-03f, +5.626577831e-03f, +7.632272277e-03f, +3.158683085e-03f, -1.858177439e-03f, -2.428990405e-03f, +1.553336802e-04f, +1.578879652e-03f, +4.889656325e-04f, -8.588611084e-04f, -6.370607032e-04f, +3.398966032e-04f, +5.402508255e-04f, -3.224608662e-05f, -3.571682227e-04f, -1.002414783e-04f, +1.852800431e-04f, +1.187114401e-04f, -6.882595364e-05f, -8.484467018e-05f, +1.159134683e-05f, +4.315119110e-05f, +4.648267252e-06f, -1.500607012e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.689602943e-04f, +2.274826614e-04f, -1.493122773e-03f, -1.832389239e-03f, +2.494976171e-03f, +4.854790656e-03f, -2.674430805e-03f, -9.548658426e-03f, +8.546434197e-04f, +1.528177507e-02f, +4.021353246e-03f, -2.060354902e-02f, -1.232693533e-02f, +2.354807449e-02f, +2.331166583e-02f, -2.227986236e-02f, -3.504051953e-02f, +1.585596463e-02f, +4.483132284e-02f, -4.773104989e-03f, -5.008435272e-02f, -8.981364246e-03f, +4.919476864e-02f, +2.245709179e-02f, -4.216670517e-02f, -3.267100708e-02f, +3.065576446e-02f, +3.757421138e-02f, -1.740996082e-02f, -3.666592310e-02f, +5.340854297e-03f, +3.102229578e-02f, +3.391554752e-03f, -2.276769077e-02f, -7.925590989e-03f, +1.424928927e-02f, +8.708870596e-03f, -7.272883055e-03f, -7.050507664e-03f, +2.683866721e-03f, +4.471892390e-03f, -3.865259204e-04f, -2.151863162e-03f, -3.073258468e-04f, +5.190554740e-04f, +2.240251107e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.020248298e-05f, +2.794478312e-05f, +6.350687369e-05f, -6.295461800e-05f, -1.662767285e-04f, +6.872575091e-05f, +3.343245057e-04f, -8.397709338e-06f, -5.532701980e-04f, -1.624126768e-04f, +7.769113186e-04f, +4.694923866e-04f, -9.330563568e-04f, -9.001091448e-04f, +9.438343146e-04f, +1.393950635e-03f, -7.547255546e-04f, -1.852172990e-03f, +3.608135648e-04f, +2.164341675e-03f, +1.820540613e-04f, -2.244447194e-03f, -7.682187358e-04f, +2.061833388e-03f, +1.272957041e-03f, -1.653875520e-03f, -1.591707552e-03f, +1.114547142e-03f, +1.672339179e-03f, -5.632859609e-04f, -1.527933181e-03f, +1.068595109e-04f, +1.226115595e-03f, +1.907184711e-04f, -8.609741559e-04f, -3.196593601e-04f, +5.202270671e-04f, +3.154870750e-04f, -2.607176712e-04f, -2.365715527e-04f, +9.991676201e-05f, +1.393583212e-04f, -2.315335024e-05f, -6.128773634e-05f, -4.648267252e-06f, +1.500607012e-05f, +0.000000000e+00f, /* 7, 8 (48) */ +0.000000000e+00f, -4.587578113e-04f, -2.554274445e-04f, +1.028982748e-03f, +1.251591172e-03f, -1.334657721e-03f, -3.205301401e-03f, +5.183983289e-04f, +5.846589680e-03f, +2.471144941e-03f, -8.077322022e-03f, -8.405384397e-03f, +7.884150992e-03f, +1.717803477e-02f, -2.540623776e-03f, -2.730078443e-02f, -1.113465820e-02f, +3.559830260e-02f, +3.741984656e-02f, -3.652716404e-02f, -8.779651347e-02f, +1.550894337e-02f, +2.511434913e-01f, +4.203447386e-01f, +3.583533560e-01f, +1.267587672e-01f, -5.931473204e-02f, -7.482963099e-02f, +6.669725923e-03f, +4.675618079e-02f, +1.247711886e-02f, -2.577450342e-02f, -1.755305208e-02f, +1.071235349e-02f, +1.550091146e-02f, -1.459628670e-03f, -1.059544598e-02f, -2.821621921e-03f, +5.638359962e-03f, +3.662807059e-03f, -2.080782465e-03f, -2.761932644e-03f, +2.299181080e-04f, +1.466408952e-03f, +3.276678289e-04f, -5.144072068e-04f, -2.390311808e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.084885119e-05f, -2.660359268e-05f, -4.056543633e-05f, +3.731992528e-05f, +1.024192393e-04f, -1.486432307e-05f, -1.919620389e-04f, -7.848236882e-05f, +2.764526489e-04f, +2.754760482e-04f, -2.878444504e-04f, -5.809226461e-04f, +1.266905299e-04f, +9.472786986e-04f, +3.261633500e-04f, -1.251794720e-03f, -1.209805552e-03f, +1.249795243e-03f, +2.766077777e-03f, -2.810474539e-04f, -5.922220368e-03f, -7.594503719e-03f, -2.154360581e-03f, +5.446128244e-03f, +7.685991774e-03f, +3.344738387e-03f, -1.757784465e-03f, -2.480500260e-03f, +7.270153211e-05f, +1.577692923e-03f, +5.422436965e-04f, -8.379753945e-04f, -6.648477053e-04f, +3.160191976e-04f, +5.502403358e-04f, -1.319881162e-05f, -3.572207922e-04f, -1.122820998e-04f, +1.815105706e-04f, +1.247624957e-04f, -6.489718843e-05f, -8.711201950e-05f, +8.965421965e-06f, +4.367637005e-05f, +5.925014199e-06f, -1.506247809e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.587578113e-04f, +2.554274445e-04f, -1.429615899e-03f, -1.895343857e-03f, +2.328699442e-03f, +4.923516407e-03f, -2.340106299e-03f, -9.557056136e-03f, +3.013732217e-04f, +1.511936239e-02f, +4.798264564e-03f, -2.013405663e-02f, -1.325999169e-02f, +2.264796534e-02f, +2.425550015e-02f, -2.088591172e-02f, -3.579524509e-02f, +1.400379164e-02f, +4.519213640e-02f, -2.608763314e-03f, -4.990229866e-02f, -1.122581144e-02f, +4.842654990e-02f, +2.451892518e-02f, -4.089374813e-02f, -3.432488260e-02f, +2.906405691e-02f, +3.868875852e-02f, -1.573762164e-02f, -3.722920906e-02f, +3.812921116e-03f, +3.112915529e-02f, +4.617670347e-03f, -2.257697230e-02f, -8.786565145e-03f, +1.392962991e-02f, +9.229097663e-03f, -6.957395980e-03f, -7.311225335e-03f, +2.447295169e-03f, +4.571809152e-03f, -2.471675992e-04f, -2.175016512e-03f, -3.686135832e-04f, +5.144072068e-04f, +2.390311808e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.084885119e-05f, +2.660359268e-05f, +6.469443335e-05f, -5.733696346e-05f, -1.674600283e-04f, +5.717684970e-05f, +3.333171188e-04f, +1.132493745e-05f, -5.461317680e-04f, -1.911623324e-04f, +7.583767867e-04f, +5.055827778e-04f, -8.977809330e-04f, -9.387417533e-04f, +8.881926267e-04f, +1.427673533e-03f, -6.785577956e-04f, -1.872463125e-03f, +2.683860678e-04f, +2.163918277e-03f, +2.824053234e-04f, -2.219541565e-03f, -8.658158848e-04f, +2.013561012e-03f, +1.357378262e-03f, -1.588148312e-03f, -1.655376630e-03f, +1.040515324e-03f, +1.712211021e-03f, -4.908671114e-04f, -1.545738034e-03f, +4.424144080e-05f, +1.227194049e-03f, +2.387640299e-04f, -8.522559589e-04f, -3.522010130e-04f, +5.081553750e-04f, +3.346708314e-04f, -2.498154825e-04f, -2.461687640e-04f, +9.232376686e-05f, +1.432744774e-04f, -1.902867683e-05f, -6.254207668e-05f, -5.925014199e-06f, +1.506247809e-05f, +0.000000000e+00f, /* 7, 9 (48) */ +0.000000000e+00f, -4.479089601e-04f, -2.820310372e-04f, +9.884173113e-04f, +1.288911098e-03f, -1.232238482e-03f, -3.220165724e-03f, +3.264362900e-04f, +5.768107311e-03f, +2.747597590e-03f, -7.801845974e-03f, -8.693228848e-03f, +7.303228346e-03f, +1.730472530e-02f, -1.593345078e-03f, -2.697462108e-02f, -1.238645292e-02f, +3.438849704e-02f, +3.866964181e-02f, -3.376108626e-02f, -8.807756092e-02f, +9.586722998e-03f, +2.435489876e-01f, +4.181903781e-01f, +3.637994842e-01f, +1.344447589e-01f, -5.596999366e-02f, -7.658741546e-02f, +4.189225664e-03f, +4.682888232e-02f, +1.405481179e-02f, -2.523225973e-02f, -1.839102747e-02f, +1.004750579e-02f, +1.581693066e-02f, -9.093883346e-04f, -1.060864479e-02f, -3.178842713e-03f, +5.526077863e-03f, +3.844317629e-03f, -1.956019970e-03f, -2.826829832e-03f, +1.428060885e-04f, +1.475374374e-03f, +3.713441989e-04f, -5.084821926e-04f, -2.540936589e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.144840713e-05f, -2.524204041e-05f, -4.148289141e-05f, +3.402109109e-05f, +1.026854258e-04f, -8.594746194e-06f, -1.893046668e-04f, -8.782050396e-05f, +2.673033459e-04f, +2.857488329e-04f, -2.681717440e-04f, -5.864760599e-04f, +9.385614083e-05f, +9.380861467e-04f, +3.704516143e-04f, -1.213156387e-03f, -1.254713117e-03f, +1.161900464e-03f, +2.779085504e-03f, -1.183583270e-04f, -5.771169318e-03f, -7.654592979e-03f, -2.399839862e-03f, +5.259816984e-03f, +7.732594905e-03f, +3.530139394e-03f, -1.652485180e-03f, -2.528511193e-03f, -1.126185069e-05f, +1.573659262e-03f, +5.952375593e-04f, -8.152977755e-04f, -6.917772238e-04f, +2.912490903e-04f, +5.593479040e-04f, +6.138583950e-06f, -3.566062405e-04f, -1.242967150e-04f, +1.773340635e-04f, +1.306799422e-04f, -6.076670666e-05f, -8.925298590e-05f, +6.260081759e-06f, +4.412161161e-05f, +7.227216627e-06f, -1.508121306e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.479089601e-04f, +2.820310372e-04f, -1.364921466e-03f, -1.952680821e-03f, +2.161239414e-03f, +4.980693256e-03f, -2.006789181e-03f, -9.545731198e-03f, -2.447585463e-04f, +1.492820006e-02f, +5.556641351e-03f, -1.962847385e-02f, -1.415777262e-02f, +2.170922359e-02f, +2.514369277e-02f, -1.945823819e-02f, -3.647380288e-02f, +1.213132852e-02f, +4.546052247e-02f, -4.448450370e-04f, -4.961989334e-02f, -1.344535300e-02f, +4.756073402e-02f, +2.653248619e-02f, -3.953636987e-02f, -3.591303092e-02f, +2.740868028e-02f, +3.972927384e-02f, -1.402541062e-02f, -3.772007617e-02f, +2.267183082e-03f, +3.117339673e-02f, +5.844864396e-03f, -2.233820827e-02f, -9.638821104e-03f, +1.357742889e-02f, +9.737253038e-03f, -6.622725149e-03f, -7.561040817e-03f, +2.201126405e-03f, +4.664132919e-03f, -1.038931219e-04f, -2.194045189e-03f, -4.311556598e-04f, +5.084821926e-04f, +2.540936589e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.144840713e-05f, +2.524204041e-05f, +6.569800200e-05f, -5.173204069e-05f, -1.682532630e-04f, +4.572887222e-05f, +3.316210050e-04f, +3.071845145e-05f, -5.379521862e-04f, -2.191548864e-04f, +7.384806670e-04f, +5.402663004e-04f, -8.609741092e-04f, -9.751384994e-04f, +8.311176495e-04f, +1.458267827e-03f, -6.013944085e-04f, -1.888837242e-03f, +1.757290856e-04f, +2.159074794e-03f, +3.819975348e-04f, -2.190126450e-03f, -9.616229592e-04f, +1.961143586e-03f, +1.439139845e-03f, -1.519024892e-03f, -1.715845240e-03f, +9.640625692e-04f, +1.748752148e-03f, -4.170317670e-04f, -1.560470263e-03f, -1.893694541e-05f, +1.225736781e-03f, +2.867727586e-04f, -8.416641236e-04f, -3.843929989e-04f, +4.948503601e-04f, +3.534281504e-04f, -2.381972856e-04f, -2.554101662e-04f, +8.436905505e-05f, +1.469616392e-04f, -1.474638968e-05f, -6.368440066e-05f, -7.227216627e-06f, +1.508121306e-05f, +0.000000000e+00f, /* 7,10 (48) */ +0.000000000e+00f, -4.364605530e-04f, -3.072730776e-04f, +9.469344199e-04f, +1.322932189e-03f, -1.129553056e-03f, -3.228760470e-03f, +1.371316231e-04f, +5.680286807e-03f, +3.014900936e-03f, -7.516097141e-03f, -8.961400592e-03f, +6.716752286e-03f, +1.739858144e-02f, -6.552589311e-04f, -2.660416947e-02f, -1.359960931e-02f, +3.313378393e-02f, +3.983154227e-02f, -3.098200076e-02f, -8.819591925e-02f, +3.815553680e-03f, +2.358943946e-01f, +4.157905382e-01f, +3.690593012e-01f, +1.421773538e-01f, -5.243985426e-02f, -7.823990064e-02f, +1.660714471e-03f, +4.681762047e-02f, +1.562847105e-02f, -2.463702217e-02f, -1.920632525e-02f, +9.355728563e-03f, +1.610817975e-02f, -3.500404306e-04f, -1.060250621e-02f, -3.535448954e-03f, +5.401781148e-03f, +4.021651693e-03f, -1.825340028e-03f, -2.887596539e-03f, +5.355310260e-05f, +1.481634456e-03f, +4.154658105e-04f, -5.012549759e-04f, -2.691748720e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.200103319e-05f, -2.386368643e-05f, -4.229307530e-05f, +3.072628925e-05f, +1.027475501e-04f, -2.421989333e-06f, -1.863355934e-04f, -9.684840658e-05f, +2.577951417e-04f, +2.953516851e-04f, -2.482748867e-04f, -5.908904165e-04f, +6.127215102e-05f, +9.273211492e-04f, +4.135120799e-04f, -1.172865439e-03f, -1.296791870e-03f, +1.073298769e-03f, +2.787148517e-03f, +4.114853267e-05f, -5.616142078e-03f, -7.706910059e-03f, -2.642685756e-03f, +5.067833211e-03f, +7.771975044e-03f, +3.714645386e-03f, -1.542354717e-03f, -2.572888771e-03f, -9.643006054e-05f, +1.566747901e-03f, +6.478485272e-04f, -7.908466446e-04f, -7.177891105e-04f, +2.656204183e-04f, +5.675449142e-04f, +2.573387983e-05f, -3.553161379e-04f, -1.362620122e-04f, +1.727520416e-04f, +1.364499007e-04f, -5.643900752e-05f, -9.126065537e-05f, +3.479275925e-06f, +4.448396762e-05f, +8.552487914e-06f, -1.506105373e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.364605530e-04f, +3.072730776e-04f, -1.299223464e-03f, -2.004412861e-03f, +1.992986151e-03f, +5.026422129e-03f, -1.675168176e-03f, -9.515012747e-03f, -7.827107325e-04f, +1.470904517e-02f, +6.295122018e-03f, -1.908820755e-02f, -1.501874673e-02f, +2.073408509e-02f, +2.597481042e-02f, -1.799997036e-02f, -3.707519729e-02f, +1.024249128e-02f, +4.563625156e-02f, +1.714229757e-03f, -4.923789580e-02f, -1.563547945e-02f, +4.659911106e-02f, +2.849362978e-02f, -3.809723002e-02f, -3.743205581e-02f, +2.569283504e-02f, +4.069333641e-02f, -1.227665847e-02f, -3.813710794e-02f, +7.067128194e-04f, +3.115445979e-02f, +7.070601177e-03f, -2.205143551e-02f, -1.048048523e-02f, +1.319303589e-02f, +1.023210340e-02f, -6.269296998e-03f, -7.799238103e-03f, +1.945716238e-03f, +4.748501974e-03f, +4.306851739e-05f, -2.208791579e-03f, -4.948400605e-04f, +5.012549759e-04f, +2.691748720e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.200103319e-05f, +2.386368643e-05f, +6.652024205e-05f, -4.615252836e-05f, -1.686629464e-04f, +3.440515789e-05f, +3.292515434e-04f, +4.974615180e-05f, -5.287632087e-04f, -2.463404129e-04f, +7.172800494e-04f, +5.734842225e-04f, -8.227264984e-04f, -1.009241144e-03f, +7.727380717e-04f, +1.485688805e-03f, -5.234005202e-04f, -1.901278162e-03f, +8.303518807e-05f, +2.149832828e-03f, +4.806261020e-04f, -2.156267264e-03f, -1.055442178e-03f, +1.904687222e-03f, +1.518068837e-03f, -1.446641169e-03f, -1.772978338e-03f, +8.853385352e-04f, +1.781870932e-03f, -3.419261273e-04f, -1.572079214e-03f, -8.254725443e-05f, +1.221725550e-03f, +3.346428214e-04f, -8.292013105e-04f, -4.161624012e-04f, +4.803244579e-04f, +3.717120835e-04f, -2.258769512e-04f, -2.642687365e-04f, +7.606332210e-05f, +1.504059649e-04f, -1.031271056e-05f, -6.470836289e-05f, -8.552487914e-06f, +1.506105373e-05f, +0.000000000e+00f, /* 7,11 (48) */ +0.000000000e+00f, -4.244595198e-04f, -3.311367641e-04f, +9.046413446e-04f, +1.353658478e-03f, -1.026805506e-03f, -3.231182459e-03f, -4.920397027e-05f, +5.583438400e-03f, +3.272696078e-03f, -7.220745456e-03f, -9.209675479e-03f, +6.125861869e-03f, +1.745985359e-02f, +2.720622181e-04f, -2.619065739e-02f, -1.477247475e-02f, +3.183699206e-02f, +4.090484104e-02f, -2.819485224e-02f, -8.815477071e-02f, -1.800588398e-03f, +2.281874846e-01f, +4.131478524e-01f, +3.741271344e-01f, +1.499493289e-01f, -4.872520888e-02f, -7.978225536e-02f, -9.121743007e-04f, +4.672119041e-02f, +1.719521895e-02f, -2.398917364e-02f, -1.999717189e-02f, +8.637939453e-03f, +1.637380016e-02f, +2.175044837e-04f, -1.057677233e-02f, -3.890765092e-03f, +5.265519135e-03f, +4.194403735e-03f, -1.688890127e-03f, -2.944035546e-03f, -3.770755277e-05f, +1.485113732e-03f, +4.599497782e-04f, -4.927024880e-04f, -2.842359257e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.250672977e-05f, -2.247204570e-05f, -4.299673875e-05f, +2.744214133e-05f, +1.026093788e-04f, +3.643661803e-06f, -1.830656208e-04f, -1.055537955e-04f, +2.479510728e-04f, +3.042761023e-04f, -2.281935112e-04f, -5.941723784e-04f, +2.899451371e-05f, +9.150227597e-04f, +4.552834036e-04f, -1.131014046e-03f, -1.336006934e-03f, +9.841495448e-04f, +2.790333414e-03f, +1.973050787e-04f, -5.457363617e-03f, -7.751439409e-03f, -2.882634107e-03f, +4.870373568e-03f, +7.804034221e-03f, +3.898014814e-03f, -1.427475945e-03f, -2.613502441e-03f, -1.826729847e-04f, +1.556932685e-03f, +6.999773566e-04f, -7.646438261e-04f, -7.428241466e-04f, +2.391693380e-04f, +5.748040784e-04f, +4.555393470e-05f, -3.533432234e-04f, -1.481544296e-04f, +1.677668407e-04f, +1.420585538e-04f, -5.191907005e-05f, -9.312825770e-05f, +6.271988012e-07f, +4.476060912e-05f, +9.898326944e-06f, -1.500084795e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.244595198e-04f, +3.311367641e-04f, -1.232703222e-03f, -2.050565390e-03f, +1.824323205e-03f, +5.060827286e-03f, -1.345916632e-03f, -9.465266595e-03f, -1.311473941e-03f, +1.446270476e-02f, +7.012402067e-03f, -1.851472333e-02f, -1.584147323e-02f, +1.972484395e-02f, +2.674754850e-02f, -1.651428156e-02f, -3.759859781e-02f, +8.341213115e-03f, +4.571928674e-02f, +3.864062585e-03f, -4.875726970e-02f, -1.779174672e-02f, +4.554366888e-02f, +3.039831700e-02f, -3.657916119e-02f, -3.887869698e-02f, +2.391985670e-02f, +4.157867495e-02f, -1.049478754e-02f, -3.847903407e-02f, -8.653663943e-04f, +3.107191253e-02f, +8.292326727e-03f, -2.171679269e-02f, -1.130968654e-02f, +1.277687349e-02f, +1.071242786e-02f, -5.897584915e-03f, -8.025115054e-03f, +1.681447502e-03f, +4.824565296e-03f, +1.934744823e-04f, -2.219104290e-03f, -5.595484234e-04f, +4.927024880e-04f, +2.842359257e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.250672977e-05f, +2.247204570e-05f, +6.716420108e-05f, -4.061075246e-05f, -1.686963471e-04f, +2.322833477e-05f, +3.262253562e-04f, +6.837271040e-05f, -5.185983570e-04f, -2.726713359e-04f, +6.948341928e-04f, +6.051815166e-04f, -7.831309738e-04f, -1.040996755e-03f, +7.131844500e-04f, +1.509898702e-03f, -4.447421613e-04f, -1.909777027e-03f, -9.503635785e-06f, +2.136223136e-03f, +5.780888186e-04f, -2.118038660e-03f, -1.147079970e-03f, +1.844306549e-03f, +1.593997990e-03f, -1.371140182e-03f, -1.826647489e-03f, +8.044982205e-04f, +1.811482537e-03f, -2.656998777e-04f, -1.580520533e-03f, -1.464592362e-04f, +1.215147420e-03f, +3.822717313e-04f, -8.148742466e-04f, -4.474363760e-04f, +4.645929399e-04f, +3.894760597e-04f, -2.128701444e-04f, -2.727178485e-04f, +6.741829055e-05f, +1.535938897e-04f, -5.734392500e-06f, -6.560775245e-05f, -9.898326944e-06f, +1.500084795e-05f, +0.000000000e+00f, /* 7,12 (48) */ +0.000000000e+00f, -4.119527900e-04f, -3.536088098e-04f, +8.616446058e-04f, +1.381100619e-03f, -9.241961269e-04f, -3.227538798e-03f, -2.322695911e-04f, +5.477884605e-03f, +3.520647150e-03f, -6.916469353e-03f, -9.437868990e-03f, +5.531689491e-03f, +1.748884811e-02f, +1.187084978e-03f, -2.573537398e-02f, -1.590348879e-02f, +3.050098512e-02f, +4.188899058e-02f, -2.540451883e-02f, -8.795746564e-02f, -7.257952015e-03f, +2.204360452e-01f, +4.102652183e-01f, +3.789975080e-01f, +1.577533631e-01f, -4.482719406e-02f, -8.120973130e-02f, -3.525676742e-03f, +4.653851743e-02f, +1.875215164e-02f, -2.328919628e-02f, -2.076181572e-02f, +7.895115306e-03f, +1.661296950e-02f, +7.923085621e-04f, -1.053121839e-02f, -4.244108315e-03f, +5.117364706e-03f, +4.362170575e-03f, -1.546831573e-03f, -2.995954616e-03f, -1.308358105e-04f, +1.485740930e-03f, +5.047103873e-04f, -4.828041611e-04f, -2.992367736e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.296561261e-05f, -2.107058095e-05f, -4.359484627e-05f, +2.417511538e-05f, +1.022750137e-04f, +9.592308909e-06f, -1.795059626e-04f, -1.139251923e-04f, +2.377944815e-04f, +3.125149683e-04f, -2.079670723e-04f, -5.963306029e-04f, -2.922069502e-06f, +9.012323114e-04f, +4.957072808e-04f, -1.087695956e-03f, -1.372328744e-03f, +8.946109473e-04f, +2.788713209e-03f, +3.499495666e-04f, -5.295062159e-03f, -7.788175333e-03f, -3.119424623e-03f, +4.667641934e-03f, +7.828683285e-03f, +4.080005638e-03f, -1.307939416e-03f, -2.650225773e-03f, -2.698569752e-04f, +1.544192172e-03f, +7.515244226e-04f, -7.367145768e-04f, -7.668241626e-04f, +2.119339833e-04f, +5.810995041e-04f, +6.556473697e-05f, -3.506814349e-04f, -1.599501977e-04f, +1.623816207e-04f, +1.474921745e-04f, -4.721235117e-05f, -9.484918346e-05f, -2.291714961e-06f, +4.494883537e-05f, +1.126212154e-05f, -1.489951724e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.119527900e-04f, +3.536088098e-04f, -1.165539020e-03f, -2.091176142e-03f, +1.655626858e-03f, +5.084055621e-03f, -1.019691276e-03f, -9.396893884e-03f, -1.830072298e-03f, +1.419003343e-02f, +7.707236260e-03f, -1.790954181e-02f, -1.662460420e-02f, +1.868384719e-02f, +2.746073294e-02f, -1.500438286e-02f, -3.804333997e-02f, +6.431436087e-03f, +4.570978311e-02f, +6.000285721e-03f, -4.817918088e-02f, -1.990978538e-02f, +4.439658891e-02f, +3.224262355e-02f, -3.498516320e-02f, -4.024983716e-02f, +2.209320921e-02f, +4.238317317e-02f, -8.683305000e-03f, -3.874473394e-02f, -2.445886927e-03f, +3.092545330e-02f, +9.507474147e-03f, -2.133452096e-02f, -1.212456078e-02f, +1.232943712e-02f, +1.117702080e-02f, -5.508108855e-03f, -8.237985198e-03f, +1.408729653e-03f, +4.891983586e-03f, +3.470683719e-04f, -2.224838682e-03f, -6.251561758e-04f, +4.828041611e-04f, +2.992367736e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.296561261e-05f, +2.107058095e-05f, +6.763329471e-05f, -3.511866381e-05f, -1.683614557e-04f, +1.222027980e-05f, +3.225602511e-04f, +8.656421125e-05f, -5.074928212e-04f, -2.981025057e-04f, +6.712043721e-04f, +6.353069426e-04f, -7.422824492e-04f, -1.070357785e-03f, +6.525889165e-04f, +1.530866736e-03f, -3.655859086e-04f, -1.914333292e-03f, -1.016963831e-04f, +2.118285537e-03f, +6.741862898e-04f, -2.075524354e-03f, -1.236347376e-03f, +1.780124475e-03f, +1.666766124e-03f, -1.292671811e-03f, -1.876731160e-03f, +7.217016570e-04f, +1.837509136e-03f, -1.885058871e-04f, -1.585756300e-03f, -2.105410514e-04f, +1.205994828e-03f, +4.295565671e-04f, -7.986937526e-04f, -4.781423133e-04f, +4.476739156e-04f, +4.066739952e-04f, -1.991943163e-04f, -2.807313413e-04f, +5.844670138e-05f, +1.565121654e-04f, -1.018715016e-06f, -6.637651307e-05f, -1.126212154e-05f, +1.489951724e-05f, +0.000000000e+00f, /* 7,13 (48) */ +0.000000000e+00f, -3.989871774e-04f, -3.746793907e-04f, +8.180497596e-04f, +1.405275735e-03f, -8.219211132e-04f, -3.217946489e-03f, -4.117755537e-04f, +5.363959413e-03f, +3.758441632e-03f, -6.603954385e-03f, -9.645836062e-03f, +4.935358888e-03f, +1.748592604e-02f, +2.088317289e-03f, -2.523966670e-02f, -1.699118475e-02f, +2.912865638e-02f, +4.278360153e-02f, -2.261580562e-02f, -8.760751607e-02f, -1.255301417e-02f, +2.126478698e-01f, +4.071457937e-01f, +3.836651499e-01f, +1.655820464e-01f, -4.074718842e-02f, -8.251767072e-02f, -6.175902515e-03f, +4.626866045e-02f, +2.029634381e-02f, -2.253767186e-02f, -2.149853030e-02f, +7.128291144e-03f, +1.682490349e-02f, +1.373408066e-03f, -1.046565366e-02f, -4.594789750e-03f, +4.957414508e-03f, +4.524552196e-03f, -1.399339399e-03f, -3.043166967e-03f, -2.256849939e-04f, +1.483449215e-03f, +5.496592227e-04f, -4.715420395e-04f, -3.141362909e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.337790988e-05f, -1.966269580e-05f, -4.408856978e-05f, +2.093151518e-05f, +1.017488775e-04f, +1.541445451e-05f, -1.756682150e-04f, -1.219519320e-04f, +2.273489669e-04f, +3.200625479e-04f, -1.876347751e-04f, -5.973757021e-04f, -3.442423318e-05f, +8.859933155e-04f, +5.347285126e-04f, -1.043006315e-03f, -1.405733032e-03f, +8.048396605e-04f, +2.782367157e-03f, +4.989267366e-04f, -5.129468842e-03f, -7.817121964e-03f, -3.352801220e-03f, +4.459849164e-03f, +7.845842068e-03f, +4.260375659e-03f, -1.183843295e-03f, -2.682936699e-03f, -3.578450253e-04f, +1.528509729e-03f, +8.023898903e-04f, -7.070875820e-04f, -7.897321568e-04f, +1.839544194e-04f, +5.864067609e-04f, +8.573145784e-05f, -3.473259368e-04f, -1.716253821e-04f, +1.566003717e-04f, +1.527371547e-04f, -4.232478271e-05f, -9.641700079e-05f, -5.272795322e-06f, +4.504608258e-05f, +1.264115220e-05f, -1.475606133e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.989871774e-04f, +3.746793907e-04f, -1.097905726e-03f, -2.126294806e-03f, +1.487265402e-03f, +5.096275901e-03f, -6.971310248e-04f, -9.310329673e-03f, -2.337565119e-03f, +1.389193092e-02f, +8.378440632e-03f, -1.727423487e-02f, -1.736688665e-02f, +1.761348941e-02f, +2.811332186e-02f, -1.347351612e-02f, -3.840892588e-02f, +4.517102796e-03f, +4.560808673e-02f, +8.118571258e-03f, -4.750499459e-02f, -2.198530973e-02f, +4.316024154e-02f, +3.402274802e-02f, -3.331839707e-02f, -4.154250897e-02f, +2.021647805e-02f, +4.310487483e-02f, -6.845795863e-03f, -3.893323983e-02f, -4.031643228e-03f, +3.071491225e-02f, +1.071346897e-02f, -2.090496439e-02f, -1.292325454e-02f, +1.185129480e-02f, +1.162469471e-02f, -5.101434860e-03f, -8.437179515e-03f, +1.127998312e-03f, +4.950430288e-03f, +5.035805373e-04f, -2.225857397e-03f, -6.915326889e-04f, +4.715420395e-04f, +3.141362909e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.337790988e-05f, +1.966269580e-05f, +6.793128886e-05f, -2.968781694e-05f, -1.676669522e-04f, +1.402081619e-06f, +3.182751618e-04f, +1.042882057e-04f, -4.954833594e-04f, -3.225912690e-04f, +6.464537228e-04f, +6.638131218e-04f, -7.002776567e-04f, -1.097282124e-03f, +5.910848864e-04f, +1.548569136e-03f, -2.860985280e-04f, -1.914954680e-03f, -1.933534389e-04f, +2.096068812e-03f, +7.687223488e-04f, -2.028816945e-03f, -1.323060455e-03f, +1.712271930e-03f, +1.736218473e-03f, -1.211392477e-03f, -1.923114997e-03f, +6.371135868e-04f, +1.859880104e-03f, -1.104998981e-04f, -1.587755150e-03f, -2.746595442e-04f, +1.194265648e-03f, +4.763941934e-04f, -7.806747605e-04f, -5.082080004e-04f, +4.295883275e-04f, +4.232604045e-04f, -1.848686923e-04f, -2.882835876e-04f, +4.916230295e-05f, +1.591478992e-04f, +3.826522264e-06f, -6.700876330e-05f, -1.264115220e-05f, +1.475606133e-05f, +0.000000000e+00f, /* 7,14 (48) */ +0.000000000e+00f, -3.856092675e-04f, -3.943420865e-04f, +7.739611898e-04f, +1.426207250e-03f, -7.201722357e-04f, -3.202532034e-03f, -5.874437687e-04f, +5.242007481e-03f, +3.985790599e-03f, -6.283891837e-03f, -9.833470837e-03f, +4.337983186e-03f, +1.745150180e-02f, +2.974310605e-03f, -2.470493819e-02f, -1.803419106e-02f, +2.772292335e-02f, +4.358844119e-02f, -1.983343846e-02f, -8.710858933e-02f, -1.768248302e-02f, +2.048307479e-01f, +4.037929925e-01f, +3.881249991e-01f, +1.734278885e-01f, -3.648681276e-02f, -8.370151401e-02f, -8.858839214e-03f, +4.591081542e-02f, +2.182485354e-02f, -2.173528197e-02f, -2.220561788e-02f, +6.338558987e-03f, +1.700885791e-02f, +1.959814827e-03f, -1.037992220e-02f, -4.942115687e-03f, +4.785789126e-03f, +4.681152568e-03f, -1.246602244e-03f, -3.085491750e-03f, -3.221019947e-04f, +1.478176420e-03f, +5.947053052e-04f, -4.589008873e-04f, -3.288923522e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.374395910e-05f, -1.825172823e-05f, -4.447928178e-05f, +1.771747005e-05f, +1.010356992e-04f, +2.110101439e-05f, -1.715643282e-04f, -1.296241714e-04f, +2.166383362e-04f, +3.269144798e-04f, -1.672355058e-04f, -5.973201982e-04f, -6.546002915e-05f, +8.693513573e-04f, +5.722950666e-04f, -9.970414821e-04f, -1.436200809e-03f, +7.149906656e-04f, +2.771380576e-03f, +6.440879846e-04f, -4.960817383e-03f, -7.838293220e-03f, -3.582512362e-03f, +4.247212811e-03f, +7.855439529e-03f, +4.438882863e-03f, -1.055293283e-03f, -2.711517747e-03f, -4.464969546e-04f, +1.509873614e-03f, +8.524738878e-04f, -6.757949444e-04f, -8.114924139e-04f, +1.552725920e-04f, +5.907029444e-04f, +1.060185066e-04f, -3.432731465e-04f, -1.831559283e-04f, +1.504279191e-04f, +1.577800351e-04f, -3.726276731e-05f, -9.782547217e-05f, -8.311142389e-06f, +4.504993268e-05f, +1.403259622e-05f, -1.456956252e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.856092675e-04f, +3.943420865e-04f, -1.029974437e-03f, -2.155982623e-03f, +1.319598450e-03f, +5.097677983e-03f, -3.788558631e-04f, -9.206041467e-03f, -2.833048479e-03f, +1.356933965e-02f, +9.024894355e-03f, -1.661042175e-02f, -1.806716431e-02f, +1.651620728e-02f, +2.870440675e-02f, -1.192494699e-02f, -3.869502441e-02f, +2.602148116e-03f, +4.541473329e-02f, +1.021464007e-02f, -4.673627224e-02f, -2.401412668e-02f, +4.183718108e-02f, +3.573501995e-02f, -3.158217860e-02f, -4.275390145e-02f, +1.829336305e-02f, +4.374198841e-02f, -4.985915759e-03f, -3.904373973e-02f, -5.619398378e-03f, +3.044025270e-02f, +1.190773462e-02f, -2.042857020e-02f, -1.370392930e-02f, +1.134308680e-02f, +1.205428304e-02f, -4.678174456e-03f, -8.622048207e-03f, +8.397147245e-04f, +4.999592591e-03f, +6.627284365e-04f, -2.222030875e-03f, -7.585414522e-04f, +4.589008873e-04f, +3.288923522e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.374395910e-05f, +1.825172823e-05f, +6.806228152e-05f, -2.432935045e-05f, -1.666221717e-04f, -9.205994243e-06f, +3.133900864e-04f, +1.215137638e-04f, -4.826081954e-04f, -3.460975324e-04f, +6.206470836e-04f, +6.906566020e-04f, -6.572149221e-04f, -1.121733156e-03f, +5.288067630e-04f, +1.562989149e-03f, -2.064466181e-04f, -1.911657141e-03f, -2.842869735e-04f, +2.069630568e-03f, +8.615044673e-04f, -1.978017705e-03f, -1.407040669e-03f, +1.640887595e-03f, +1.802207023e-03f, -1.127464817e-03f, -1.965692091e-03f, +5.509031291e-04f, +1.878532204e-03f, -3.184020880e-05f, -1.586492380e-03f, -3.386805202e-04f, +1.179963238e-03f, +5.226814836e-04f, -7.608363226e-04f, -5.375617856e-04f, +4.103599397e-04f, +4.391905107e-04f, -1.699142545e-04f, -2.953495630e-04f, +3.957983714e-05f, +1.614885928e-04f, +8.793007373e-06f, -6.749881676e-05f, -1.403259622e-05f, +1.456956252e-05f, +0.000000000e+00f, /* 7,15 (48) */ +0.000000000e+00f, -3.718653085e-04f, -4.125938147e-04f, +7.294819080e-04f, +1.443924720e-03f, -6.191365365e-04f, -3.181431020e-03f, -7.590080970e-04f, +5.112383309e-03f, +4.202428935e-03f, -5.956977357e-03f, -1.000070634e-02f, +3.740662988e-03f, +1.738604177e-02f, +3.843661962e-03f, -2.413264312e-02f, -1.903123255e-02f, +2.628672254e-02f, +4.430343186e-02f, -1.706205789e-02f, -8.646450135e-02f, -2.264330040e-02f, +1.969924546e-01f, +4.002104801e-01f, +3.923722119e-01f, +1.812833280e-01f, -3.204792990e-02f, -8.475680730e-02f, -1.157035696e-02f, +4.546431847e-02f, +2.333472715e-02f, -2.088280808e-02f, -2.288141282e-02f, +5.527066573e-03f, +1.716413050e-02f, +2.550517771e-03f, -1.027390369e-02f, -5.285388833e-03f, +4.602633198e-03f, +4.831580487e-03f, -1.088822209e-03f, -3.122754517e-03f, -4.199274669e-04f, +1.469865278e-03f, +6.397552379e-04f, -4.448682911e-04f, -3.434619147e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.406420377e-05f, -1.684094428e-05f, -4.476854836e-05f, +1.453892518e-05f, +1.001404985e-04f, +2.664332890e-05f, -1.672065776e-04f, -1.369328962e-04f, +2.056865565e-04f, +3.330677657e-04f, -1.468077623e-04f, -5.961784772e-04f, -9.597900412e-05f, +8.513539892e-04f, +6.083581318e-04f, -9.498988544e-04f, -1.463718330e-03f, +6.252170128e-04f, +2.755844657e-03f, +7.852915229e-04f, -4.789343739e-03f, -7.851712756e-03f, -3.808311390e-03f, +4.029956851e-03f, +7.857413890e-03f, +4.615285763e-03f, -9.224025289e-04f, -2.735856267e-03f, -5.356695997e-04f, +1.488277057e-03f, +9.016766817e-04f, -6.428721674e-04f, -8.320506221e-04f, +1.259322736e-04f, +5.939667389e-04f, +1.263895881e-04f, -3.385207585e-04f, -1.945177063e-04f, +1.438699263e-04f, +1.626075341e-04f, -3.203317336e-05f, -9.906857111e-05f, -1.140163254e-05f, +4.495812173e-05f, +1.543353210e-05f, -1.433918995e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.718653085e-04f, +4.125938147e-04f, -9.619121554e-04f, -2.180311973e-03f, +1.152976278e-03f, +5.088471988e-03f, -6.546577670e-05f, -9.084527704e-03f, -3.315656674e-03f, +1.322324212e-02f, +9.645541439e-03f, -1.591976515e-02f, -1.872437923e-02f, +1.539447413e-02f, +2.923321351e-02f, -1.036195784e-02f, -3.890147103e-02f, +6.904909747e-04f, +4.513044631e-02f, +1.228427064e-02f, -4.587476777e-02f, -2.599214438e-02f, +4.043014041e-02f, +3.737590755e-02f, -2.977997158e-02f, -4.388136626e-02f, +1.632767096e-02f, +4.429289154e-02f, -3.107383555e-03f, -3.907557994e-02f, -7.205890758e-03f, +3.010157218e-02f, +1.308769786e-02f, -1.990588871e-02f, -1.446476562e-02f, +1.080552502e-02f, +1.246464298e-02f, -4.238983945e-03f, -8.791962461e-03f, +5.443651615e-04f, +5.039172428e-03f, +8.242170293e-04f, -2.213237867e-03f, -8.260402690e-04f, +4.448682911e-04f, +3.434619147e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.406420377e-05f, +1.684094428e-05f, +6.803068410e-05f, -1.905396874e-05f, -1.652370684e-04f, -1.958453755e-05f, +3.079260246e-04f, +1.382115211e-04f, -4.689069142e-04f, -3.685838193e-04f, +5.938508359e-04f, +7.157979128e-04f, -6.131939395e-04f, -1.143679789e-03f, +4.658896441e-04f, +1.574117035e-03f, -1.267962571e-04f, -1.904464776e-03f, -3.743113350e-04f, +2.039037101e-03f, +9.523441555e-04f, -1.923236358e-03f, -1.488115258e-03f, +1.566117607e-03f, +1.864590837e-03f, -1.041057354e-03f, -2.004363224e-03f, +4.632434352e-04f, +1.893409753e-03f, +4.731265204e-05f, -1.581950044e-03f, -4.024690279e-04f, +1.163096477e-03f, +5.683155438e-04f, -7.392016120e-04f, -5.661327428e-04f, +3.900153209e-04f, +4.544203565e-04f, -1.543537211e-04f, -3.019049137e-04f, +2.971502298e-05f, +1.635221805e-04f, +1.387192530e-05f, -6.784120230e-05f, -1.543353210e-05f, +1.433918995e-05f, +0.000000000e+00f, /* 7,16 (48) */ +0.000000000e+00f, -3.578011047e-04f, -4.294347590e-04f, +6.847133596e-04f, +1.458463645e-03f, -5.189960380e-04f, -3.154787691e-03f, -9.262146746e-04f, +4.975450413e-03f, +4.408115492e-03f, -5.623909592e-03f, -1.014751411e-02f, +3.144484510e-03f, +1.729006277e-02f, +4.695015951e-03f, -2.352428499e-02f, -1.998113140e-02f, +2.482300421e-02f, +4.492864887e-02f, -1.430621323e-02f, -8.567920983e-02f, -2.743264414e-02f, +1.891407419e-01f, +3.964021687e-01f, +3.964021687e-01f, +1.891407419e-01f, -2.743264414e-02f, -8.567920983e-02f, -1.430621323e-02f, +4.492864887e-02f, +2.482300421e-02f, -1.998113140e-02f, -2.352428499e-02f, +4.695015951e-03f, +1.729006277e-02f, +3.144484510e-03f, -1.014751411e-02f, -5.623909592e-03f, +4.408115492e-03f, +4.975450413e-03f, -9.262146746e-04f, -3.154787691e-03f, -5.189960380e-04f, +1.458463645e-03f, +6.847133596e-04f, -4.294347590e-04f, -3.578011047e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.433918995e-05f, -1.543353210e-05f, -4.495812173e-05f, +1.140163254e-05f, +9.906857111e-05f, +3.203317336e-05f, -1.626075341e-04f, -1.438699263e-04f, +1.945177063e-04f, +3.385207585e-04f, -1.263895881e-04f, -5.939667389e-04f, -1.259322736e-04f, +8.320506221e-04f, +6.428721674e-04f, -9.016766817e-04f, -1.488277057e-03f, +5.356695997e-04f, +2.735856267e-03f, +9.224025289e-04f, -4.615285763e-03f, -7.857413890e-03f, -4.029956851e-03f, +3.808311390e-03f, +7.851712756e-03f, +4.789343739e-03f, -7.852915229e-04f, -2.755844657e-03f, -6.252170128e-04f, +1.463718330e-03f, +9.498988544e-04f, -6.083581318e-04f, -8.513539892e-04f, +9.597900412e-05f, +5.961784772e-04f, +1.468077623e-04f, -3.330677657e-04f, -2.056865565e-04f, +1.369328962e-04f, +1.672065776e-04f, -2.664332890e-05f, -1.001404985e-04f, -1.453892518e-05f, +4.476854836e-05f, +1.684094428e-05f, -1.406420377e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.578011047e-04f, +4.294347590e-04f, -8.938814713e-04f, -2.199365942e-03f, +9.877392098e-04f, +5.068887451e-03f, +2.424602479e-04f, -8.946316183e-03f, -3.784563588e-03f, +1.285465830e-02f, +1.023939227e-02f, -1.520396723e-02f, -1.933757317e-02f, +1.425079434e-02f, +2.969910316e-02f, -8.787840802e-03f, -3.902826729e-02f, -1.213973801e-03f, +4.475613498e-02f, +1.432330774e-02f, -4.492242362e-02f, -2.791538074e-02f, +3.894202515e-02f, +3.894202515e-02f, -2.791538074e-02f, -4.492242362e-02f, +1.432330774e-02f, +4.475613498e-02f, -1.213973801e-03f, -3.902826729e-02f, -8.787840802e-03f, +2.969910316e-02f, +1.425079434e-02f, -1.933757317e-02f, -1.520396723e-02f, +1.023939227e-02f, +1.285465830e-02f, -3.784563588e-03f, -8.946316183e-03f, +2.424602479e-04f, +5.068887451e-03f, +9.877392098e-04f, -2.199365942e-03f, -8.938814713e-04f, +4.294347590e-04f, +3.578011047e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.433918995e-05f, +1.543353210e-05f, +6.784120230e-05f, -1.387192530e-05f, -1.635221805e-04f, -2.971502298e-05f, +3.019049137e-04f, +1.543537211e-04f, -4.544203565e-04f, -3.900153209e-04f, +5.661327428e-04f, +7.392016120e-04f, -5.683155438e-04f, -1.163096477e-03f, +4.024690279e-04f, +1.581950044e-03f, -4.731265204e-05f, -1.893409753e-03f, -4.632434352e-04f, +2.004363224e-03f, +1.041057354e-03f, -1.864590837e-03f, -1.566117607e-03f, +1.488115258e-03f, +1.923236358e-03f, -9.523441555e-04f, -2.039037101e-03f, +3.743113350e-04f, +1.904464776e-03f, +1.267962571e-04f, -1.574117035e-03f, -4.658896441e-04f, +1.143679789e-03f, +6.131939395e-04f, -7.157979128e-04f, -5.938508359e-04f, +3.685838193e-04f, +4.689069142e-04f, -1.382115211e-04f, -3.079260246e-04f, +1.958453755e-05f, +1.652370684e-04f, +1.905396874e-05f, -6.803068410e-05f, -1.684094428e-05f, +1.406420377e-05f, +0.000000000e+00f, /* 7,17 (48) */ +0.000000000e+00f, -3.434619147e-04f, -4.448682911e-04f, +6.397552379e-04f, +1.469865278e-03f, -4.199274669e-04f, -3.122754517e-03f, -1.088822209e-03f, +4.831580487e-03f, +4.602633198e-03f, -5.285388833e-03f, -1.027390369e-02f, +2.550517771e-03f, +1.716413050e-02f, +5.527066573e-03f, -2.288141282e-02f, -2.088280808e-02f, +2.333472715e-02f, +4.546431847e-02f, -1.157035696e-02f, -8.475680730e-02f, -3.204792990e-02f, +1.812833280e-01f, +3.923722119e-01f, +4.002104801e-01f, +1.969924546e-01f, -2.264330040e-02f, -8.646450135e-02f, -1.706205789e-02f, +4.430343186e-02f, +2.628672254e-02f, -1.903123255e-02f, -2.413264312e-02f, +3.843661962e-03f, +1.738604177e-02f, +3.740662988e-03f, -1.000070634e-02f, -5.956977357e-03f, +4.202428935e-03f, +5.112383309e-03f, -7.590080970e-04f, -3.181431020e-03f, -6.191365365e-04f, +1.443924720e-03f, +7.294819080e-04f, -4.125938147e-04f, -3.718653085e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.456956252e-05f, -1.403259622e-05f, -4.504993268e-05f, +8.311142389e-06f, +9.782547217e-05f, +3.726276731e-05f, -1.577800351e-04f, -1.504279191e-04f, +1.831559283e-04f, +3.432731465e-04f, -1.060185066e-04f, -5.907029444e-04f, -1.552725920e-04f, +8.114924139e-04f, +6.757949444e-04f, -8.524738878e-04f, -1.509873614e-03f, +4.464969546e-04f, +2.711517747e-03f, +1.055293283e-03f, -4.438882863e-03f, -7.855439529e-03f, -4.247212811e-03f, +3.582512362e-03f, +7.838293220e-03f, +4.960817383e-03f, -6.440879846e-04f, -2.771380576e-03f, -7.149906656e-04f, +1.436200809e-03f, +9.970414821e-04f, -5.722950666e-04f, -8.693513573e-04f, +6.546002915e-05f, +5.973201982e-04f, +1.672355058e-04f, -3.269144798e-04f, -2.166383362e-04f, +1.296241714e-04f, +1.715643282e-04f, -2.110101439e-05f, -1.010356992e-04f, -1.771747005e-05f, +4.447928178e-05f, +1.825172823e-05f, -1.374395910e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.434619147e-04f, +4.448682911e-04f, -8.260402690e-04f, -2.213237867e-03f, +8.242170293e-04f, +5.039172428e-03f, +5.443651615e-04f, -8.791962461e-03f, -4.238983945e-03f, +1.246464298e-02f, +1.080552502e-02f, -1.446476562e-02f, -1.990588871e-02f, +1.308769786e-02f, +3.010157218e-02f, -7.205890758e-03f, -3.907557994e-02f, -3.107383555e-03f, +4.429289154e-02f, +1.632767096e-02f, -4.388136626e-02f, -2.977997158e-02f, +3.737590755e-02f, +4.043014041e-02f, -2.599214438e-02f, -4.587476777e-02f, +1.228427064e-02f, +4.513044631e-02f, +6.904909747e-04f, -3.890147103e-02f, -1.036195784e-02f, +2.923321351e-02f, +1.539447413e-02f, -1.872437923e-02f, -1.591976515e-02f, +9.645541439e-03f, +1.322324212e-02f, -3.315656674e-03f, -9.084527704e-03f, -6.546577670e-05f, +5.088471988e-03f, +1.152976278e-03f, -2.180311973e-03f, -9.619121554e-04f, +4.125938147e-04f, +3.718653085e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.456956252e-05f, +1.403259622e-05f, +6.749881676e-05f, -8.793007373e-06f, -1.614885928e-04f, -3.957983714e-05f, +2.953495630e-04f, +1.699142545e-04f, -4.391905107e-04f, -4.103599397e-04f, +5.375617856e-04f, +7.608363226e-04f, -5.226814836e-04f, -1.179963238e-03f, +3.386805202e-04f, +1.586492380e-03f, +3.184020880e-05f, -1.878532204e-03f, -5.509031291e-04f, +1.965692091e-03f, +1.127464817e-03f, -1.802207023e-03f, -1.640887595e-03f, +1.407040669e-03f, +1.978017705e-03f, -8.615044673e-04f, -2.069630568e-03f, +2.842869735e-04f, +1.911657141e-03f, +2.064466181e-04f, -1.562989149e-03f, -5.288067630e-04f, +1.121733156e-03f, +6.572149221e-04f, -6.906566020e-04f, -6.206470836e-04f, +3.460975324e-04f, +4.826081954e-04f, -1.215137638e-04f, -3.133900864e-04f, +9.205994243e-06f, +1.666221717e-04f, +2.432935045e-05f, -6.806228152e-05f, -1.825172823e-05f, +1.374395910e-05f, +0.000000000e+00f, /* 7,18 (48) */ +0.000000000e+00f, -3.288923522e-04f, -4.589008873e-04f, +5.947053052e-04f, +1.478176420e-03f, -3.221019947e-04f, -3.085491750e-03f, -1.246602244e-03f, +4.681152568e-03f, +4.785789126e-03f, -4.942115687e-03f, -1.037992220e-02f, +1.959814827e-03f, +1.700885791e-02f, +6.338558987e-03f, -2.220561788e-02f, -2.173528197e-02f, +2.182485354e-02f, +4.591081542e-02f, -8.858839214e-03f, -8.370151401e-02f, -3.648681276e-02f, +1.734278885e-01f, +3.881249991e-01f, +4.037929925e-01f, +2.048307479e-01f, -1.768248302e-02f, -8.710858933e-02f, -1.983343846e-02f, +4.358844119e-02f, +2.772292335e-02f, -1.803419106e-02f, -2.470493819e-02f, +2.974310605e-03f, +1.745150180e-02f, +4.337983186e-03f, -9.833470837e-03f, -6.283891837e-03f, +3.985790599e-03f, +5.242007481e-03f, -5.874437687e-04f, -3.202532034e-03f, -7.201722357e-04f, +1.426207250e-03f, +7.739611898e-04f, -3.943420865e-04f, -3.856092675e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.475606133e-05f, -1.264115220e-05f, -4.504608258e-05f, +5.272795322e-06f, +9.641700079e-05f, +4.232478271e-05f, -1.527371547e-04f, -1.566003717e-04f, +1.716253821e-04f, +3.473259368e-04f, -8.573145784e-05f, -5.864067609e-04f, -1.839544194e-04f, +7.897321568e-04f, +7.070875820e-04f, -8.023898903e-04f, -1.528509729e-03f, +3.578450253e-04f, +2.682936699e-03f, +1.183843295e-03f, -4.260375659e-03f, -7.845842068e-03f, -4.459849164e-03f, +3.352801220e-03f, +7.817121964e-03f, +5.129468842e-03f, -4.989267366e-04f, -2.782367157e-03f, -8.048396605e-04f, +1.405733032e-03f, +1.043006315e-03f, -5.347285126e-04f, -8.859933155e-04f, +3.442423318e-05f, +5.973757021e-04f, +1.876347751e-04f, -3.200625479e-04f, -2.273489669e-04f, +1.219519320e-04f, +1.756682150e-04f, -1.541445451e-05f, -1.017488775e-04f, -2.093151518e-05f, +4.408856978e-05f, +1.966269580e-05f, -1.337790988e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.288923522e-04f, +4.589008873e-04f, -7.585414522e-04f, -2.222030875e-03f, +6.627284365e-04f, +4.999592591e-03f, +8.397147245e-04f, -8.622048207e-03f, -4.678174456e-03f, +1.205428304e-02f, +1.134308680e-02f, -1.370392930e-02f, -2.042857020e-02f, +1.190773462e-02f, +3.044025270e-02f, -5.619398378e-03f, -3.904373973e-02f, -4.985915759e-03f, +4.374198841e-02f, +1.829336305e-02f, -4.275390145e-02f, -3.158217860e-02f, +3.573501995e-02f, +4.183718108e-02f, -2.401412668e-02f, -4.673627224e-02f, +1.021464007e-02f, +4.541473329e-02f, +2.602148116e-03f, -3.869502441e-02f, -1.192494699e-02f, +2.870440675e-02f, +1.651620728e-02f, -1.806716431e-02f, -1.661042175e-02f, +9.024894355e-03f, +1.356933965e-02f, -2.833048479e-03f, -9.206041467e-03f, -3.788558631e-04f, +5.097677983e-03f, +1.319598450e-03f, -2.155982623e-03f, -1.029974437e-03f, +3.943420865e-04f, +3.856092675e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.475606133e-05f, +1.264115220e-05f, +6.700876330e-05f, -3.826522264e-06f, -1.591478992e-04f, -4.916230295e-05f, +2.882835876e-04f, +1.848686923e-04f, -4.232604045e-04f, -4.295883275e-04f, +5.082080004e-04f, +7.806747605e-04f, -4.763941934e-04f, -1.194265648e-03f, +2.746595442e-04f, +1.587755150e-03f, +1.104998981e-04f, -1.859880104e-03f, -6.371135868e-04f, +1.923114997e-03f, +1.211392477e-03f, -1.736218473e-03f, -1.712271930e-03f, +1.323060455e-03f, +2.028816945e-03f, -7.687223488e-04f, -2.096068812e-03f, +1.933534389e-04f, +1.914954680e-03f, +2.860985280e-04f, -1.548569136e-03f, -5.910848864e-04f, +1.097282124e-03f, +7.002776567e-04f, -6.638131218e-04f, -6.464537228e-04f, +3.225912690e-04f, +4.954833594e-04f, -1.042882057e-04f, -3.182751618e-04f, -1.402081619e-06f, +1.676669522e-04f, +2.968781694e-05f, -6.793128886e-05f, -1.966269580e-05f, +1.337790988e-05f, +0.000000000e+00f, /* 7,19 (48) */ +0.000000000e+00f, -3.141362909e-04f, -4.715420395e-04f, +5.496592227e-04f, +1.483449215e-03f, -2.256849939e-04f, -3.043166967e-03f, -1.399339399e-03f, +4.524552196e-03f, +4.957414508e-03f, -4.594789750e-03f, -1.046565366e-02f, +1.373408066e-03f, +1.682490349e-02f, +7.128291144e-03f, -2.149853030e-02f, -2.253767186e-02f, +2.029634381e-02f, +4.626866045e-02f, -6.175902515e-03f, -8.251767072e-02f, -4.074718842e-02f, +1.655820464e-01f, +3.836651499e-01f, +4.071457937e-01f, +2.126478698e-01f, -1.255301417e-02f, -8.760751607e-02f, -2.261580562e-02f, +4.278360153e-02f, +2.912865638e-02f, -1.699118475e-02f, -2.523966670e-02f, +2.088317289e-03f, +1.748592604e-02f, +4.935358888e-03f, -9.645836062e-03f, -6.603954385e-03f, +3.758441632e-03f, +5.363959413e-03f, -4.117755537e-04f, -3.217946489e-03f, -8.219211132e-04f, +1.405275735e-03f, +8.180497596e-04f, -3.746793907e-04f, -3.989871774e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.489951724e-05f, -1.126212154e-05f, -4.494883537e-05f, +2.291714961e-06f, +9.484918346e-05f, +4.721235117e-05f, -1.474921745e-04f, -1.623816207e-04f, +1.599501977e-04f, +3.506814349e-04f, -6.556473697e-05f, -5.810995041e-04f, -2.119339833e-04f, +7.668241626e-04f, +7.367145768e-04f, -7.515244226e-04f, -1.544192172e-03f, +2.698569752e-04f, +2.650225773e-03f, +1.307939416e-03f, -4.080005638e-03f, -7.828683285e-03f, -4.667641934e-03f, +3.119424623e-03f, +7.788175333e-03f, +5.295062159e-03f, -3.499495666e-04f, -2.788713209e-03f, -8.946109473e-04f, +1.372328744e-03f, +1.087695956e-03f, -4.957072808e-04f, -9.012323114e-04f, +2.922069502e-06f, +5.963306029e-04f, +2.079670723e-04f, -3.125149683e-04f, -2.377944815e-04f, +1.139251923e-04f, +1.795059626e-04f, -9.592308909e-06f, -1.022750137e-04f, -2.417511538e-05f, +4.359484627e-05f, +2.107058095e-05f, -1.296561261e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.141362909e-04f, +4.715420395e-04f, -6.915326889e-04f, -2.225857397e-03f, +5.035805373e-04f, +4.950430288e-03f, +1.127998312e-03f, -8.437179515e-03f, -5.101434860e-03f, +1.162469471e-02f, +1.185129480e-02f, -1.292325454e-02f, -2.090496439e-02f, +1.071346897e-02f, +3.071491225e-02f, -4.031643228e-03f, -3.893323983e-02f, -6.845795863e-03f, +4.310487483e-02f, +2.021647805e-02f, -4.154250897e-02f, -3.331839707e-02f, +3.402274802e-02f, +4.316024154e-02f, -2.198530973e-02f, -4.750499459e-02f, +8.118571258e-03f, +4.560808673e-02f, +4.517102796e-03f, -3.840892588e-02f, -1.347351612e-02f, +2.811332186e-02f, +1.761348941e-02f, -1.736688665e-02f, -1.727423487e-02f, +8.378440632e-03f, +1.389193092e-02f, -2.337565119e-03f, -9.310329673e-03f, -6.971310248e-04f, +5.096275901e-03f, +1.487265402e-03f, -2.126294806e-03f, -1.097905726e-03f, +3.746793907e-04f, +3.989871774e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.489951724e-05f, +1.126212154e-05f, +6.637651307e-05f, +1.018715016e-06f, -1.565121654e-04f, -5.844670138e-05f, +2.807313413e-04f, +1.991943163e-04f, -4.066739952e-04f, -4.476739156e-04f, +4.781423133e-04f, +7.986937526e-04f, -4.295565671e-04f, -1.205994828e-03f, +2.105410514e-04f, +1.585756300e-03f, +1.885058871e-04f, -1.837509136e-03f, -7.217016570e-04f, +1.876731160e-03f, +1.292671811e-03f, -1.666766124e-03f, -1.780124475e-03f, +1.236347376e-03f, +2.075524354e-03f, -6.741862898e-04f, -2.118285537e-03f, +1.016963831e-04f, +1.914333292e-03f, +3.655859086e-04f, -1.530866736e-03f, -6.525889165e-04f, +1.070357785e-03f, +7.422824492e-04f, -6.353069426e-04f, -6.712043721e-04f, +2.981025057e-04f, +5.074928212e-04f, -8.656421125e-05f, -3.225602511e-04f, -1.222027980e-05f, +1.683614557e-04f, +3.511866381e-05f, -6.763329471e-05f, -2.107058095e-05f, +1.296561261e-05f, +0.000000000e+00f, /* 7,20 (48) */ +0.000000000e+00f, -2.992367736e-04f, -4.828041611e-04f, +5.047103873e-04f, +1.485740930e-03f, -1.308358105e-04f, -2.995954616e-03f, -1.546831573e-03f, +4.362170575e-03f, +5.117364706e-03f, -4.244108315e-03f, -1.053121839e-02f, +7.923085621e-04f, +1.661296950e-02f, +7.895115306e-03f, -2.076181572e-02f, -2.328919628e-02f, +1.875215164e-02f, +4.653851743e-02f, -3.525676742e-03f, -8.120973130e-02f, -4.482719406e-02f, +1.577533631e-01f, +3.789975080e-01f, +4.102652183e-01f, +2.204360452e-01f, -7.257952015e-03f, -8.795746564e-02f, -2.540451883e-02f, +4.188899058e-02f, +3.050098512e-02f, -1.590348879e-02f, -2.573537398e-02f, +1.187084978e-03f, +1.748884811e-02f, +5.531689491e-03f, -9.437868990e-03f, -6.916469353e-03f, +3.520647150e-03f, +5.477884605e-03f, -2.322695911e-04f, -3.227538798e-03f, -9.241961269e-04f, +1.381100619e-03f, +8.616446058e-04f, -3.536088098e-04f, -4.119527900e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.500084795e-05f, -9.898326944e-06f, -4.476060912e-05f, -6.271988012e-07f, +9.312825770e-05f, +5.191907005e-05f, -1.420585538e-04f, -1.677668407e-04f, +1.481544296e-04f, +3.533432234e-04f, -4.555393470e-05f, -5.748040784e-04f, -2.391693380e-04f, +7.428241466e-04f, +7.646438261e-04f, -6.999773566e-04f, -1.556932685e-03f, +1.826729847e-04f, +2.613502441e-03f, +1.427475945e-03f, -3.898014814e-03f, -7.804034221e-03f, -4.870373568e-03f, +2.882634107e-03f, +7.751439409e-03f, +5.457363617e-03f, -1.973050787e-04f, -2.790333414e-03f, -9.841495448e-04f, +1.336006934e-03f, +1.131014046e-03f, -4.552834036e-04f, -9.150227597e-04f, -2.899451371e-05f, +5.941723784e-04f, +2.281935112e-04f, -3.042761023e-04f, -2.479510728e-04f, +1.055537955e-04f, +1.830656208e-04f, -3.643661803e-06f, -1.026093788e-04f, -2.744214133e-05f, +4.299673875e-05f, +2.247204570e-05f, -1.250672977e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.992367736e-04f, +4.828041611e-04f, -6.251561758e-04f, -2.224838682e-03f, +3.470683719e-04f, +4.891983586e-03f, +1.408729653e-03f, -8.237985198e-03f, -5.508108855e-03f, +1.117702080e-02f, +1.232943712e-02f, -1.212456078e-02f, -2.133452096e-02f, +9.507474147e-03f, +3.092545330e-02f, -2.445886927e-03f, -3.874473394e-02f, -8.683305000e-03f, +4.238317317e-02f, +2.209320921e-02f, -4.024983716e-02f, -3.498516320e-02f, +3.224262355e-02f, +4.439658891e-02f, -1.990978538e-02f, -4.817918088e-02f, +6.000285721e-03f, +4.570978311e-02f, +6.431436087e-03f, -3.804333997e-02f, -1.500438286e-02f, +2.746073294e-02f, +1.868384719e-02f, -1.662460420e-02f, -1.790954181e-02f, +7.707236260e-03f, +1.419003343e-02f, -1.830072298e-03f, -9.396893884e-03f, -1.019691276e-03f, +5.084055621e-03f, +1.655626858e-03f, -2.091176142e-03f, -1.165539020e-03f, +3.536088098e-04f, +4.119527900e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.500084795e-05f, +9.898326944e-06f, +6.560775245e-05f, +5.734392500e-06f, -1.535938897e-04f, -6.741829055e-05f, +2.727178485e-04f, +2.128701444e-04f, -3.894760597e-04f, -4.645929399e-04f, +4.474363760e-04f, +8.148742466e-04f, -3.822717313e-04f, -1.215147420e-03f, +1.464592362e-04f, +1.580520533e-03f, +2.656998777e-04f, -1.811482537e-03f, -8.044982205e-04f, +1.826647489e-03f, +1.371140182e-03f, -1.593997990e-03f, -1.844306549e-03f, +1.147079970e-03f, +2.118038660e-03f, -5.780888186e-04f, -2.136223136e-03f, +9.503635785e-06f, +1.909777027e-03f, +4.447421613e-04f, -1.509898702e-03f, -7.131844500e-04f, +1.040996755e-03f, +7.831309738e-04f, -6.051815166e-04f, -6.948341928e-04f, +2.726713359e-04f, +5.185983570e-04f, -6.837271040e-05f, -3.262253562e-04f, -2.322833477e-05f, +1.686963471e-04f, +4.061075246e-05f, -6.716420108e-05f, -2.247204570e-05f, +1.250672977e-05f, +0.000000000e+00f, /* 7,21 (48) */ +0.000000000e+00f, -2.842359257e-04f, -4.927024880e-04f, +4.599497782e-04f, +1.485113732e-03f, -3.770755277e-05f, -2.944035546e-03f, -1.688890127e-03f, +4.194403735e-03f, +5.265519135e-03f, -3.890765092e-03f, -1.057677233e-02f, +2.175044837e-04f, +1.637380016e-02f, +8.637939453e-03f, -1.999717189e-02f, -2.398917364e-02f, +1.719521895e-02f, +4.672119041e-02f, -9.121743007e-04f, -7.978225536e-02f, -4.872520888e-02f, +1.499493289e-01f, +3.741271344e-01f, +4.131478524e-01f, +2.281874846e-01f, -1.800588398e-03f, -8.815477071e-02f, -2.819485224e-02f, +4.090484104e-02f, +3.183699206e-02f, -1.477247475e-02f, -2.619065739e-02f, +2.720622181e-04f, +1.745985359e-02f, +6.125861869e-03f, -9.209675479e-03f, -7.220745456e-03f, +3.272696078e-03f, +5.583438400e-03f, -4.920397027e-05f, -3.231182459e-03f, -1.026805506e-03f, +1.353658478e-03f, +9.046413446e-04f, -3.311367641e-04f, -4.244595198e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.506105373e-05f, -8.552487914e-06f, -4.448396762e-05f, -3.479275925e-06f, +9.126065537e-05f, +5.643900752e-05f, -1.364499007e-04f, -1.727520416e-04f, +1.362620122e-04f, +3.553161379e-04f, -2.573387983e-05f, -5.675449142e-04f, -2.656204183e-04f, +7.177891105e-04f, +7.908466446e-04f, -6.478485272e-04f, -1.566747901e-03f, +9.643006054e-05f, +2.572888771e-03f, +1.542354717e-03f, -3.714645386e-03f, -7.771975044e-03f, -5.067833211e-03f, +2.642685756e-03f, +7.706910059e-03f, +5.616142078e-03f, -4.114853267e-05f, -2.787148517e-03f, -1.073298769e-03f, +1.296791870e-03f, +1.172865439e-03f, -4.135120799e-04f, -9.273211492e-04f, -6.127215102e-05f, +5.908904165e-04f, +2.482748867e-04f, -2.953516851e-04f, -2.577951417e-04f, +9.684840658e-05f, +1.863355934e-04f, +2.421989333e-06f, -1.027475501e-04f, -3.072628925e-05f, +4.229307530e-05f, +2.386368643e-05f, -1.200103319e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.842359257e-04f, +4.927024880e-04f, -5.595484234e-04f, -2.219104290e-03f, +1.934744823e-04f, +4.824565296e-03f, +1.681447502e-03f, -8.025115054e-03f, -5.897584915e-03f, +1.071242786e-02f, +1.277687349e-02f, -1.130968654e-02f, -2.171679269e-02f, +8.292326727e-03f, +3.107191253e-02f, -8.653663943e-04f, -3.847903407e-02f, -1.049478754e-02f, +4.157867495e-02f, +2.391985670e-02f, -3.887869698e-02f, -3.657916119e-02f, +3.039831700e-02f, +4.554366888e-02f, -1.779174672e-02f, -4.875726970e-02f, +3.864062585e-03f, +4.571928674e-02f, +8.341213115e-03f, -3.759859781e-02f, -1.651428156e-02f, +2.674754850e-02f, +1.972484395e-02f, -1.584147323e-02f, -1.851472333e-02f, +7.012402067e-03f, +1.446270476e-02f, -1.311473941e-03f, -9.465266595e-03f, -1.345916632e-03f, +5.060827286e-03f, +1.824323205e-03f, -2.050565390e-03f, -1.232703222e-03f, +3.311367641e-04f, +4.244595198e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.506105373e-05f, +8.552487914e-06f, +6.470836289e-05f, +1.031271056e-05f, -1.504059649e-04f, -7.606332210e-05f, +2.642687365e-04f, +2.258769512e-04f, -3.717120835e-04f, -4.803244579e-04f, +4.161624012e-04f, +8.292013105e-04f, -3.346428214e-04f, -1.221725550e-03f, +8.254725443e-05f, +1.572079214e-03f, +3.419261273e-04f, -1.781870932e-03f, -8.853385352e-04f, +1.772978338e-03f, +1.446641169e-03f, -1.518068837e-03f, -1.904687222e-03f, +1.055442178e-03f, +2.156267264e-03f, -4.806261020e-04f, -2.149832828e-03f, -8.303518807e-05f, +1.901278162e-03f, +5.234005202e-04f, -1.485688805e-03f, -7.727380717e-04f, +1.009241144e-03f, +8.227264984e-04f, -5.734842225e-04f, -7.172800494e-04f, +2.463404129e-04f, +5.287632087e-04f, -4.974615180e-05f, -3.292515434e-04f, -3.440515789e-05f, +1.686629464e-04f, +4.615252836e-05f, -6.652024205e-05f, -2.386368643e-05f, +1.200103319e-05f, +0.000000000e+00f, /* 7,22 (48) */ +0.000000000e+00f, -2.691748720e-04f, -5.012549759e-04f, +4.154658105e-04f, +1.481634456e-03f, +5.355310260e-05f, -2.887596539e-03f, -1.825340028e-03f, +4.021651693e-03f, +5.401781148e-03f, -3.535448954e-03f, -1.060250621e-02f, -3.500404306e-04f, +1.610817975e-02f, +9.355728563e-03f, -1.920632525e-02f, -2.463702217e-02f, +1.562847105e-02f, +4.681762047e-02f, +1.660714471e-03f, -7.823990064e-02f, -5.243985426e-02f, +1.421773538e-01f, +3.690593012e-01f, +4.157905382e-01f, +2.358943946e-01f, +3.815553680e-03f, -8.819591925e-02f, -3.098200076e-02f, +3.983154227e-02f, +3.313378393e-02f, -1.359960931e-02f, -2.660416947e-02f, -6.552589311e-04f, +1.739858144e-02f, +6.716752286e-03f, -8.961400592e-03f, -7.516097141e-03f, +3.014900936e-03f, +5.680286807e-03f, +1.371316231e-04f, -3.228760470e-03f, -1.129553056e-03f, +1.322932189e-03f, +9.469344199e-04f, -3.072730776e-04f, -4.364605530e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.508121306e-05f, -7.227216627e-06f, -4.412161161e-05f, -6.260081759e-06f, +8.925298590e-05f, +6.076670666e-05f, -1.306799422e-04f, -1.773340635e-04f, +1.242967150e-04f, +3.566062405e-04f, -6.138583950e-06f, -5.593479040e-04f, -2.912490903e-04f, +6.917772238e-04f, +8.152977755e-04f, -5.952375593e-04f, -1.573659262e-03f, +1.126185069e-05f, +2.528511193e-03f, +1.652485180e-03f, -3.530139394e-03f, -7.732594905e-03f, -5.259816984e-03f, +2.399839862e-03f, +7.654592979e-03f, +5.771169318e-03f, +1.183583270e-04f, -2.779085504e-03f, -1.161900464e-03f, +1.254713117e-03f, +1.213156387e-03f, -3.704516143e-04f, -9.380861467e-04f, -9.385614083e-05f, +5.864760599e-04f, +2.681717440e-04f, -2.857488329e-04f, -2.673033459e-04f, +8.782050396e-05f, +1.893046668e-04f, +8.594746194e-06f, -1.026854258e-04f, -3.402109109e-05f, +4.148289141e-05f, +2.524204041e-05f, -1.144840713e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.691748720e-04f, +5.012549759e-04f, -4.948400605e-04f, -2.208791579e-03f, +4.306851739e-05f, +4.748501974e-03f, +1.945716238e-03f, -7.799238103e-03f, -6.269296998e-03f, +1.023210340e-02f, +1.319303589e-02f, -1.048048523e-02f, -2.205143551e-02f, +7.070601177e-03f, +3.115445979e-02f, +7.067128194e-04f, -3.813710794e-02f, -1.227665847e-02f, +4.069333641e-02f, +2.569283504e-02f, -3.743205581e-02f, -3.809723002e-02f, +2.849362978e-02f, +4.659911106e-02f, -1.563547945e-02f, -4.923789580e-02f, +1.714229757e-03f, +4.563625156e-02f, +1.024249128e-02f, -3.707519729e-02f, -1.799997036e-02f, +2.597481042e-02f, +2.073408509e-02f, -1.501874673e-02f, -1.908820755e-02f, +6.295122018e-03f, +1.470904517e-02f, -7.827107325e-04f, -9.515012747e-03f, -1.675168176e-03f, +5.026422129e-03f, +1.992986151e-03f, -2.004412861e-03f, -1.299223464e-03f, +3.072730776e-04f, +4.364605530e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.508121306e-05f, +7.227216627e-06f, +6.368440066e-05f, +1.474638968e-05f, -1.469616392e-04f, -8.436905505e-05f, +2.554101662e-04f, +2.381972856e-04f, -3.534281504e-04f, -4.948503601e-04f, +3.843929989e-04f, +8.416641236e-04f, -2.867727586e-04f, -1.225736781e-03f, +1.893694541e-05f, +1.560470263e-03f, +4.170317670e-04f, -1.748752148e-03f, -9.640625692e-04f, +1.715845240e-03f, +1.519024892e-03f, -1.439139845e-03f, -1.961143586e-03f, +9.616229592e-04f, +2.190126450e-03f, -3.819975348e-04f, -2.159074794e-03f, -1.757290856e-04f, +1.888837242e-03f, +6.013944085e-04f, -1.458267827e-03f, -8.311176495e-04f, +9.751384994e-04f, +8.609741092e-04f, -5.402663004e-04f, -7.384806670e-04f, +2.191548864e-04f, +5.379521862e-04f, -3.071845145e-05f, -3.316210050e-04f, -4.572887222e-05f, +1.682532630e-04f, +5.173204069e-05f, -6.569800200e-05f, -2.524204041e-05f, +1.144840713e-05f, +0.000000000e+00f, /* 7,23 (48) */ +0.000000000e+00f, -2.540936589e-04f, -5.084821926e-04f, +3.713441989e-04f, +1.475374374e-03f, +1.428060885e-04f, -2.826829832e-03f, -1.956019970e-03f, +3.844317629e-03f, +5.526077863e-03f, -3.178842713e-03f, -1.060864479e-02f, -9.093883346e-04f, +1.581693066e-02f, +1.004750579e-02f, -1.839102747e-02f, -2.523225973e-02f, +1.405481179e-02f, +4.682888232e-02f, +4.189225664e-03f, -7.658741546e-02f, -5.596999366e-02f, +1.344447589e-01f, +3.637994842e-01f, +4.181903781e-01f, +2.435489876e-01f, +9.586722998e-03f, -8.807756092e-02f, -3.376108626e-02f, +3.866964181e-02f, +3.438849704e-02f, -1.238645292e-02f, -2.697462108e-02f, -1.593345078e-03f, +1.730472530e-02f, +7.303228346e-03f, -8.693228848e-03f, -7.801845974e-03f, +2.747597590e-03f, +5.768107311e-03f, +3.264362900e-04f, -3.220165724e-03f, -1.232238482e-03f, +1.288911098e-03f, +9.884173113e-04f, -2.820310372e-04f, -4.479089601e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.506247809e-05f, -5.925014199e-06f, -4.367637005e-05f, -8.965421965e-06f, +8.711201950e-05f, +6.489718843e-05f, -1.247624957e-04f, -1.815105706e-04f, +1.122820998e-04f, +3.572207922e-04f, +1.319881162e-05f, -5.502403358e-04f, -3.160191976e-04f, +6.648477053e-04f, +8.379753945e-04f, -5.422436965e-04f, -1.577692923e-03f, -7.270153211e-05f, +2.480500260e-03f, +1.757784465e-03f, -3.344738387e-03f, -7.685991774e-03f, -5.446128244e-03f, +2.154360581e-03f, +7.594503719e-03f, +5.922220368e-03f, +2.810474539e-04f, -2.766077777e-03f, -1.249795243e-03f, +1.209805552e-03f, +1.251794720e-03f, -3.261633500e-04f, -9.472786986e-04f, -1.266905299e-04f, +5.809226461e-04f, +2.878444504e-04f, -2.754760482e-04f, -2.764526489e-04f, +7.848236882e-05f, +1.919620389e-04f, +1.486432307e-05f, -1.024192393e-04f, -3.731992528e-05f, +4.056543633e-05f, +2.660359268e-05f, -1.084885119e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.540936589e-04f, +5.084821926e-04f, -4.311556598e-04f, -2.194045189e-03f, -1.038931219e-04f, +4.664132919e-03f, +2.201126405e-03f, -7.561040817e-03f, -6.622725149e-03f, +9.737253038e-03f, +1.357742889e-02f, -9.638821104e-03f, -2.233820827e-02f, +5.844864396e-03f, +3.117339673e-02f, +2.267183082e-03f, -3.772007617e-02f, -1.402541062e-02f, +3.972927384e-02f, +2.740868028e-02f, -3.591303092e-02f, -3.953636987e-02f, +2.653248619e-02f, +4.756073402e-02f, -1.344535300e-02f, -4.961989334e-02f, -4.448450370e-04f, +4.546052247e-02f, +1.213132852e-02f, -3.647380288e-02f, -1.945823819e-02f, +2.514369277e-02f, +2.170922359e-02f, -1.415777262e-02f, -1.962847385e-02f, +5.556641351e-03f, +1.492820006e-02f, -2.447585463e-04f, -9.545731198e-03f, -2.006789181e-03f, +4.980693256e-03f, +2.161239414e-03f, -1.952680821e-03f, -1.364921466e-03f, +2.820310372e-04f, +4.479089601e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.506247809e-05f, +5.925014199e-06f, +6.254207668e-05f, +1.902867683e-05f, -1.432744774e-04f, -9.232376686e-05f, +2.461687640e-04f, +2.498154825e-04f, -3.346708314e-04f, -5.081553750e-04f, +3.522010130e-04f, +8.522559589e-04f, -2.387640299e-04f, -1.227194049e-03f, -4.424144080e-05f, +1.545738034e-03f, +4.908671114e-04f, -1.712211021e-03f, -1.040515324e-03f, +1.655376630e-03f, +1.588148312e-03f, -1.357378262e-03f, -2.013561012e-03f, +8.658158848e-04f, +2.219541565e-03f, -2.824053234e-04f, -2.163918277e-03f, -2.683860678e-04f, +1.872463125e-03f, +6.785577956e-04f, -1.427673533e-03f, -8.881926267e-04f, +9.387417533e-04f, +8.977809330e-04f, -5.055827778e-04f, -7.583767867e-04f, +1.911623324e-04f, +5.461317680e-04f, -1.132493745e-05f, -3.333171188e-04f, -5.717684970e-05f, +1.674600283e-04f, +5.733696346e-05f, -6.469443335e-05f, -2.660359268e-05f, +1.084885119e-05f, +0.000000000e+00f, /* 7,24 (48) */ +0.000000000e+00f, -2.390311808e-04f, -5.144072068e-04f, +3.276678289e-04f, +1.466408952e-03f, +2.299181080e-04f, -2.761932644e-03f, -2.080782465e-03f, +3.662807059e-03f, +5.638359962e-03f, -2.821621921e-03f, -1.059544598e-02f, -1.459628670e-03f, +1.550091146e-02f, +1.071235349e-02f, -1.755305208e-02f, -2.577450342e-02f, +1.247711886e-02f, +4.675618079e-02f, +6.669725923e-03f, -7.482963099e-02f, -5.931473204e-02f, +1.267587672e-01f, +3.583533560e-01f, +4.203447386e-01f, +2.511434913e-01f, +1.550894337e-02f, -8.779651347e-02f, -3.652716404e-02f, +3.741984656e-02f, +3.559830260e-02f, -1.113465820e-02f, -2.730078443e-02f, -2.540623776e-03f, +1.717803477e-02f, +7.884150992e-03f, -8.405384397e-03f, -8.077322022e-03f, +2.471144941e-03f, +5.846589680e-03f, +5.183983289e-04f, -3.205301401e-03f, -1.334657721e-03f, +1.251591172e-03f, +1.028982748e-03f, -2.554274445e-04f, -4.587578113e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.500607012e-05f, -4.648267252e-06f, -4.315119110e-05f, -1.159134683e-05f, +8.484467018e-05f, +6.882595364e-05f, -1.187114401e-04f, -1.852800431e-04f, +1.002414783e-04f, +3.571682227e-04f, +3.224608662e-05f, -5.402508255e-04f, -3.398966032e-04f, +6.370607032e-04f, +8.588611084e-04f, -4.889656325e-04f, -1.578879652e-03f, -1.553336802e-04f, +2.428990405e-03f, +1.858177439e-03f, -3.158683085e-03f, -7.632272277e-03f, -5.626577831e-03f, +1.906515583e-03f, +7.526667692e-03f, +6.069073841e-03f, +4.467446921e-04f, -2.748065320e-03f, -1.336822724e-03f, +1.162109368e-03f, +1.288690027e-03f, -2.807115945e-04f, -9.548621291e-04f, -1.597182014e-04f, +5.742255451e-04f, +3.072532678e-04f, -2.645432223e-04f, -2.852203686e-04f, +6.884707305e-05f, +1.942973467e-04f, +2.122006131e-05f, -1.019455730e-04f, -4.061602803e-05f, +3.954017920e-05f, +2.794478312e-05f, -1.020248298e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.390311808e-04f, +5.144072068e-04f, -3.686135832e-04f, -2.175016512e-03f, -2.471675992e-04f, +4.571809152e-03f, +2.447295169e-03f, -7.311225335e-03f, -6.957395980e-03f, +9.229097663e-03f, +1.392962991e-02f, -8.786565145e-03f, -2.257697230e-02f, +4.617670347e-03f, +3.112915529e-02f, +3.812921116e-03f, -3.722920906e-02f, -1.573762164e-02f, +3.868875852e-02f, +2.906405691e-02f, -3.432488260e-02f, -4.089374813e-02f, +2.451892518e-02f, +4.842654990e-02f, -1.122581144e-02f, -4.990229866e-02f, -2.608763314e-03f, +4.519213640e-02f, +1.400379164e-02f, -3.579524509e-02f, -2.088591172e-02f, +2.425550015e-02f, +2.264796534e-02f, -1.325999169e-02f, -2.013405663e-02f, +4.798264564e-03f, +1.511936239e-02f, +3.013732217e-04f, -9.557056136e-03f, -2.340106299e-03f, +4.923516407e-03f, +2.328699442e-03f, -1.895343857e-03f, -1.429615899e-03f, +2.554274445e-04f, +4.587578113e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.500607012e-05f, +4.648267252e-06f, +6.128773634e-05f, +2.315335024e-05f, -1.393583212e-04f, -9.991676201e-05f, +2.365715527e-04f, +2.607176712e-04f, -3.154870750e-04f, -5.202270671e-04f, +3.196593601e-04f, +8.609741559e-04f, -1.907184711e-04f, -1.226115595e-03f, -1.068595109e-04f, +1.527933181e-03f, +5.632859609e-04f, -1.672339179e-03f, -1.114547142e-03f, +1.591707552e-03f, +1.653875520e-03f, -1.272957041e-03f, -2.061833388e-03f, +7.682187358e-04f, +2.244447194e-03f, -1.820540613e-04f, -2.164341675e-03f, -3.608135648e-04f, +1.852172990e-03f, +7.547255546e-04f, -1.393950635e-03f, -9.438343146e-04f, +9.001091448e-04f, +9.330563568e-04f, -4.694923866e-04f, -7.769113186e-04f, +1.624126768e-04f, +5.532701980e-04f, +8.397709338e-06f, -3.343245057e-04f, -6.872575091e-05f, +1.662767285e-04f, +6.295461800e-05f, -6.350687369e-05f, -2.794478312e-05f, +1.020248298e-05f, +0.000000000e+00f, /* 7,25 (48) */ +0.000000000e+00f, -2.240251107e-04f, -5.190554740e-04f, +2.845166378e-04f, +1.454817605e-03f, +3.147627782e-04f, -2.693106690e-03f, -2.199493906e-03f, +3.477527016e-03f, +5.738601441e-03f, -2.464453698e-03f, -1.056319989e-02f, -1.999879496e-03f, +1.516101486e-02f, +1.134941420e-02f, -1.669419097e-02f, -2.626346905e-02f, +1.089823921e-02f, +4.660084711e-02f, +9.098716328e-03f, -7.297145356e-02f, -6.247341513e-02f, +1.191264949e-01f, +3.527267781e-01f, +4.222512542e-01f, +2.586701590e-01f, +2.157801721e-02f, -8.734976877e-02f, -3.927522936e-02f, +3.608302384e-02f, +3.676041196e-02f, -9.845968173e-03f, -2.758149602e-02f, -3.495485906e-03f, +1.701831657e-02f, +8.458376537e-03f, -8.098131130e-03f, -8.341865244e-03f, +2.185924572e-03f, +5.915436753e-03f, +7.126956756e-04f, -3.184081339e-03f, -1.436603294e-03f, +1.210975144e-03f, +1.068522927e-03f, -2.274826614e-04f, -4.689602943e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.491327491e-05f, -3.399244831e-06f, -4.254913318e-05f, -1.413415498e-05f, +8.245797894e-05f, +7.254898397e-05f, -1.125406874e-04f, -1.886417687e-04f, +8.819787101e-05f, +3.564580986e-04f, +5.097199019e-05f, -5.294092466e-04f, -3.628492277e-04f, +6.084771756e-04f, +8.779399475e-04f, -4.355013456e-04f, -1.577254726e-03f, -2.365120531e-04f, +2.374119699e-03f, +1.953596747e-03f, -2.972213043e-03f, -7.571551505e-03f, -5.800984315e-03f, +1.656575693e-03f, +7.451120177e-03f, +6.211512263e-03f, +6.152699801e-04f, -2.724994848e-03f, -1.422821778e-03f, +1.111670068e-03f, +1.323753831e-03f, -2.341635411e-04f, -9.608022356e-04f, -1.928809655e-04f, +5.663821937e-04f, +3.263584260e-04f, -2.529616351e-04f, -2.935842267e-04f, +5.892846530e-05f, +1.963006941e-04f, +2.765094472e-05f, -1.012613717e-04f, -4.390250510e-05f, +3.840681472e-05f, +2.926201376e-05f, -9.509540550e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.240251107e-04f, +5.190554740e-04f, -3.073258468e-04f, -2.151863162e-03f, -3.865259204e-04f, +4.471892390e-03f, +2.683866721e-03f, -7.050507664e-03f, -7.272883055e-03f, +8.708870596e-03f, +1.424928927e-02f, -7.925590989e-03f, -2.276769077e-02f, +3.391554752e-03f, +3.102229578e-02f, +5.340854297e-03f, -3.666592310e-02f, -1.740996082e-02f, +3.757421138e-02f, +3.065576446e-02f, -3.267100708e-02f, -4.216670517e-02f, +2.245709179e-02f, +4.919476864e-02f, -8.981364246e-03f, -5.008435272e-02f, -4.773104989e-03f, +4.483132284e-02f, +1.585596463e-02f, -3.504051953e-02f, -2.227986236e-02f, +2.331166583e-02f, +2.354807449e-02f, -1.232693533e-02f, -2.060354902e-02f, +4.021353246e-03f, +1.528177507e-02f, +8.546434197e-04f, -9.548658426e-03f, -2.674430805e-03f, +4.854790656e-03f, +2.494976171e-03f, -1.832389239e-03f, -1.493122773e-03f, +2.274826614e-04f, +4.689602943e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.491327491e-05f, +3.399244831e-06f, +5.992783944e-05f, +2.711472282e-05f, -1.352272513e-04f, -1.071383779e-04f, +2.266458833e-04f, +2.708917795e-04f, -2.959240970e-04f, -5.310558291e-04f, +2.868408691e-04f, +8.678200852e-04f, -1.427370524e-04f, -1.222524883e-03f, -1.687909899e-04f, +1.507112506e-03f, +6.341458936e-04f, -1.629234820e-03f, -1.186014010e-03f, +1.524979356e-03f, +1.716078009e-03f, -1.186054466e-03f, -2.105863338e-03f, +6.690330814e-04f, +2.264787302e-03f, -8.115029959e-05f, -2.160332612e-03f, -4.528188339e-04f, +1.827992339e-03f, +8.297338200e-04f, -1.357150735e-03f, -9.979161819e-04f, +8.593041379e-04f, +9.667122445e-04f, -4.320574712e-04f, -7.940294904e-04f, +1.329581136e-04f, +5.593375809e-04f, +2.841151869e-05f, -3.346290863e-04f, -8.035156716e-05f, +1.646976352e-04f, +6.857199685e-05f, -6.213306230e-05f, -2.926201376e-05f, +9.509540550e-06f, +0.000000000e+00f, /* 7,26 (48) */ +0.000000000e+00f, -2.091118358e-04f, -5.224547188e-04f, +2.419675046e-04f, +1.440683450e-03f, +3.972207571e-04f, -2.620557706e-03f, -2.312034593e-03f, +3.288885247e-03f, +5.826799312e-03f, -2.107995600e-03f, -1.051222790e-02f, -2.529288742e-03f, +1.479816563e-02f, +1.195789137e-02f, -1.581625102e-02f, -2.669897040e-02f, +9.320984485e-03f, +4.636433506e-02f, +1.147283603e-02f, -7.101785681e-02f, -6.544562817e-02f, +1.115549434e-01f, +3.469257938e-01f, +4.239078299e-01f, +2.661212792e-01f, +2.778952947e-02f, -8.673449879e-02f, -4.200022421e-02f, +3.466020206e-02f, +3.787208203e-02f, -8.522214343e-03f, -2.781565957e-02f, -4.456288141e-03f, +1.682543560e-02f, +9.024758730e-03f, -7.771772704e-03f, -8.594826879e-03f, +1.892340346e-03f, +5.974365218e-03f, +9.089963697e-04f, -3.156430395e-03f, -1.537864666e-03f, +1.167072639e-03f, +1.106929742e-03f, -1.982206477e-04f, -4.784698349e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.478543797e-05f, -2.180095653e-06f, -4.187335580e-05f, -1.659039649e-05f, +7.995909681e-05f, +7.606274189e-05f, -1.062641544e-04f, -1.915958308e-04f, +7.617396702e-05f, +3.551010896e-04f, +6.934628683e-05f, -5.177466597e-04f, -3.848470823e-04f, +5.791587704e-04f, +8.952003513e-04f, -3.819479360e-04f, -1.572857817e-03f, -3.161181312e-04f, +2.316029593e-03f, +2.043982842e-03f, -2.785566329e-03f, -7.503952826e-03f, -5.969174217e-03f, +1.404814536e-03f, +7.367906298e-03f, +6.349322397e-03f, +7.864375643e-04f, -2.696819961e-03f, -1.507630778e-03f, +1.058538454e-03f, +1.356899769e-03f, -1.865891824e-04f, -9.650673803e-04f, -2.261196541e-04f, +5.573921262e-04f, +3.451201979e-04f, -2.407439523e-04f, -3.015223972e-04f, +4.874115534e-05f, +1.979626789e-04f, +3.414561603e-05f, -1.003639553e-04f, -4.717234406e-05f, +3.716526842e-05f, +3.055165641e-05f, -8.770384584e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.091118358e-04f, +5.224547188e-04f, -2.473980074e-04f, -2.124748439e-03f, -5.217531717e-04f, +4.364754012e-03f, +2.910512605e-03f, -6.779615884e-03f, -7.568807152e-03f, +8.177814767e-03f, +1.453613013e-02f, -7.057770904e-03f, -2.291042782e-02f, +2.169029869e-03f, +3.085350479e-02f, +6.847966803e-03f, -3.603177721e-02f, -1.903919564e-02f, +3.638819737e-02f, +3.218074382e-02f, -3.095492907e-02f, -4.335275964e-02f, +2.035122845e-02f, +4.986380172e-02f, -6.716576944e-03f, -5.016550302e-02f, -6.933437601e-03f, +4.437850400e-02f, +1.768395697e-02f, -3.421078571e-02f, -2.363701309e-02f, +2.231374965e-02f, +2.440737863e-02f, -1.136022309e-02f, -2.103560649e-02f, +3.227323755e-03f, +1.541473318e-02f, +1.413981001e-03f, -9.520246907e-03f, -3.009059891e-03f, +4.774439089e-03f, +2.659673806e-03f, -1.763817242e-03f, -1.555255835e-03f, +1.982206477e-04f, +4.784698349e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.478543797e-05f, +2.180095653e-06f, +5.846894037e-05f, +3.090764417e-05f, -1.308955478e-04f, -1.139799881e-04f, +2.164193667e-04f, +2.803275333e-04f, -2.760292722e-04f, -5.406348675e-04f, +2.538181231e-04f, +8.727991044e-04f, -9.491966892e-05f, -1.216450505e-03f, -2.299119763e-04f, +1.483338804e-03f, +7.033085484e-04f, -1.583002471e-03f, -1.254777836e-03f, +1.455339376e-03f, +1.774634935e-03f, -1.096853765e-03f, -2.145562425e-03f, +5.684638544e-04f, +2.280515365e-03f, +2.009788815e-05f, -2.151887982e-03f, -5.442093688e-04f, +1.799954978e-03f, +9.034203447e-04f, -1.317332257e-03f, -1.050314142e-03f, +8.163953233e-04f, +9.986631499e-04f, -3.933438867e-04f, -8.096789935e-04f, +1.028530154e-04f, +5.643059740e-04f, +4.867729821e-05f, -3.342181337e-04f, -9.202966494e-05f, +1.627178350e-04f, +7.417578898e-05f, -6.057115596e-05f, -3.055165641e-05f, +8.770384584e-06f, +0.000000000e+00f, /* 7,27 (48) */ +0.000000000e+00f, -1.943263978e-04f, -5.246348145e-04f, +2.000941488e-04f, +1.424093054e-03f, +4.771798539e-04f, -2.544494964e-03f, -2.418298747e-03f, +3.097289416e-03f, +5.902973279e-03f, -1.752894510e-03f, -1.044288162e-02f, -3.047035402e-03f, +1.441331855e-02f, +1.253705014e-02f, -1.492105067e-02f, -2.708091834e-02f, +7.748126668e-03f, +4.604821692e-02f, +1.378886562e-02f, -6.897387397e-02f, -6.823119450e-02f, +1.040509906e-01f, +3.409566196e-01f, +4.253126445e-01f, +2.734891855e-01f, +3.413885187e-02f, -8.594806123e-02f, -4.469704417e-02f, +3.315257128e-02f, +3.893062048e-02f, -7.165314573e-03f, -2.800224875e-02f, -5.421355521e-03f, +1.659931595e-02f, +9.582150857e-03f, -7.426652506e-03f, -8.835570832e-03f, +1.590817949e-03f, +6.023106374e-03f, +1.106959049e-03f, -3.122284779e-03f, -1.638228621e-03f, +1.119900295e-03f, +1.144095010e-03f, -1.676689913e-04f, -4.872402194e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.462395980e-05f, -9.928457007e-07f, -4.112711044e-05f, -1.895687537e-05f, +7.735526809e-05f, +7.936416972e-05f, -9.989573536e-05f, -1.941430972e-04f, +6.419208530e-05f, +3.531089337e-04f, +8.733979986e-05f, -5.052952394e-04f, -4.058622990e-04f, +5.491677055e-04f, +9.106341493e-04f, -3.284014664e-04f, -1.565732871e-03f, -3.940375622e-04f, +2.254864673e-03f, +2.129284004e-03f, -2.598979196e-03f, -7.429607677e-03f, -6.130982232e-03f, +1.151508169e-03f, +7.277080996e-03f, +6.482295563e-03f, +9.600562222e-04f, -2.663501277e-03f, -1.591087852e-03f, +1.002770603e-03f, +1.388043770e-03f, -1.380612193e-04f, -9.676285787e-04f, -2.593742174e-04f, +5.472570011e-04f, +3.634989747e-04f, -2.279042196e-04f, -3.090135547e-04f, +3.830049673e-05f, +1.992744192e-04f, +4.069239427e-05f, -9.925103113e-05f, -5.041842712e-05f, +3.581570155e-05f, +3.181006045e-05f, -7.985500330e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.943263978e-04f, +5.246348145e-04f, -1.889290670e-04f, -2.093840795e-03f, -6.526487195e-04f, +4.250774024e-03f, +3.126931971e-03f, -6.499288351e-03f, -7.844836425e-03f, +7.637179899e-03f, +1.478994826e-02f, -6.184971799e-03f, -2.300534749e-02f, +9.525793645e-04f, +3.062359282e-02f, +8.331305607e-03f, -3.532846866e-02f, -2.062219811e-02f, +3.513341953e-02f, +3.363608319e-02f, -2.918029414e-02f, -4.444961340e-02f, +1.820566603e-02f, +5.043226558e-02f, -4.436061579e-03f, -5.014540513e-02f, -9.085325584e-03f, +4.383429464e-02f, +1.948391195e-02f, -3.330736537e-02f, -2.495434535e-02f, +2.126343551e-02f, +2.522377395e-02f, -1.036155994e-02f, -2.142895037e-02f, +2.417644762e-03f, +1.551758620e-02f, +1.978286975e-03f, -9.471569609e-03f, -3.343278025e-03f, +4.682409424e-03f, +2.822391641e-03f, -1.689641453e-03f, -1.615826991e-03f, +1.676689913e-04f, +4.872402194e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.462395980e-05f, +9.928457007e-07f, +5.691766838e-05f, +3.452750106e-05f, -1.263776520e-04f, -1.204340034e-04f, +2.059198058e-04f, +2.890164525e-04f, -2.558500265e-04f, -5.489601822e-04f, +2.206633037e-04f, +8.759205059e-04f, -4.736493450e-05f, -1.207926078e-03f, -2.901011902e-04f, +1.456680690e-03f, +7.706398975e-04f, -1.533752739e-03f, -1.320706728e-03f, +1.382940602e-03f, +1.829433348e-03f, -1.005542717e-03f, -2.180851332e-03f, +4.667189164e-04f, +2.291594477e-03f, +1.214813444e-04f, -2.139013986e-03f, -6.347933102e-04f, +1.768102977e-03f, +9.756248546e-04f, -1.274560359e-03f, -1.100906835e-03f, +7.714563107e-04f, +1.028826526e-03f, -3.534208899e-04f, -8.238101248e-04f, +7.215383980e-05f, +5.681494757e-04f, +6.915470437e-05f, -3.330803253e-04f, -1.037348326e-04f, +1.603332576e-04f, +7.975240632e-05f, -5.881974410e-05f, -3.181006045e-05f, +7.985500330e-06f, +0.000000000e+00f, /* 7,28 (48) */ +0.000000000e+00f, -1.797024380e-04f, -5.256276602e-04f, +1.589670384e-04f, +1.405136178e-03f, +5.545351220e-04f, -2.465130794e-03f, -2.518194483e-03f, +2.903146319e-03f, +5.967165364e-03f, -1.399785577e-03f, -1.035554182e-02f, -3.552330642e-03f, +1.400745625e-02f, +1.308621785e-02f, -1.401041652e-02f, -2.740931980e-02f, +6.182393798e-03f, +4.565417936e-02f, +1.604373029e-02f, -6.684458996e-02f, -7.083017370e-02f, +9.662138288e-02f, +3.348256374e-01f, +4.264641526e-01f, +2.807662665e-01f, +4.062114743e-02f, -8.498800501e-02f, -4.736054545e-02f, +3.156148343e-02f, +3.993339109e-02f, -5.777270803e-03f, -2.814030997e-02f, -6.388984100e-03f, +1.633994173e-02f, +1.012940786e-02f, -7.063153531e-03f, -9.063475051e-03f, +1.281804394e-03f, +6.061406870e-03f, +1.306233468e-03f, -3.081592384e-03f, -1.737479652e-03f, +1.069481868e-03f, +1.179910712e-03f, -1.358589308e-04f, -4.952257198e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.443029105e-05f, +1.606038524e-07f, -4.031373136e-05f, -2.123065152e-05f, +7.465381357e-05f, +8.245068760e-05f, -9.344927460e-05f, -1.962852063e-04f, +5.227413708e-05f, +3.504943998e-04f, +1.049244523e-04f, -4.920882012e-04f, -4.258691551e-04f, +5.185666495e-04f, +9.242365355e-04f, -2.749568061e-04f, -1.555927983e-03f, -4.701602984e-04f, +2.190772398e-03f, +2.209456350e-03f, -2.412685758e-03f, -7.348655345e-03f, -6.286251430e-03f, +8.969347129e-04f, +7.178708984e-03f, +6.610227950e-03f, +1.135929496e-03f, -2.625006558e-03f, -1.673031134e-03f, +9.444278384e-04f, +1.417104224e-03f, -8.865496331e-05f, -9.684595838e-04f, -2.925838239e-04f, +5.359806252e-04f, +3.814553423e-04f, -2.144578550e-04f, -3.160369234e-04f, +2.762256769e-05f, +2.002275795e-04f, +4.727929308e-05f, -9.792070572e-05f, -5.363354428e-05f, +3.435851553e-05f, +3.303356079e-05f, -7.155499268e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.797024380e-04f, +5.256276602e-04f, -1.320113986e-04f, -2.059313294e-03f, -7.790263715e-04f, +4.130340021e-03f, +3.332851777e-03f, -6.210271898e-03f, -8.100686451e-03f, +7.088219717e-03f, +1.501061156e-02f, -5.309051293e-03f, -2.305271243e-02f, -2.553467138e-04f, +3.033349163e-02f, +9.787986297e-03f, -3.455782876e-02f, -2.215595085e-02f, +3.381271281e-02f, +3.501902379e-02f, -2.735086079e-02f, -4.545515612e-02f, +1.602481470e-02f, +5.089898449e-02f, -2.144467102e-03f, -5.002392379e-02f, -1.122433957e-02f, +4.319950132e-02f, +2.125201493e-02f, -3.233174051e-02f, -2.622890571e-02f, +2.016252867e-02f, +2.599523026e-02f, -9.332733411e-03f, -2.178237126e-02f, +1.593834637e-03f, +1.558974004e-02f, +2.546436450e-03f, -9.402414905e-03f, -3.676358351e-03f, +4.578674591e-03f, +2.982724899e-03f, -1.609889047e-03f, -1.674646735e-03f, +1.358589308e-04f, +4.952257198e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.443029105e-05f, -1.606038524e-07f, +5.528070823e-05f, +3.797021669e-05f, -1.216881284e-04f, -1.264938699e-04f, +1.951751290e-04f, +2.969518419e-04f, -2.354337306e-04f, -5.560305404e-04f, +1.874480376e-04f, +8.771974561e-04f, -1.699807130e-07f, -1.196990134e-03f, -3.492402140e-04f, +1.427212413e-03f, +8.360105083e-04f, -1.481602044e-03f, -1.383675242e-03f, +1.307941340e-03f, +1.880368423e-03f, -9.123132502e-04f, -2.211660024e-03f, +3.640086191e-04f, +2.297997438e-03f, +2.227902696e-04f, -2.121726136e-03f, -7.243798566e-04f, +1.732486615e-03f, +1.046189401e-03f, -1.228906834e-03f, -1.149575910e-03f, +7.245656074e-04f, +1.057122928e-03f, -3.123610207e-04f, -8.363759240e-04f, +4.091902851e-05f, +5.708443107e-04f, +8.980231717e-05f, -3.312057915e-04f, -1.154413295e-04f, +1.575407020e-04f, +8.528801151e-05f, -5.687786299e-05f, -3.303356079e-05f, +7.155499268e-06f, +0.000000000e+00f, /* 7,29 (48) */ +0.000000000e+00f, -1.652721470e-04f, -5.254670563e-04f, +1.186533070e-04f, +1.383905527e-03f, +6.291889356e-04f, -2.382680107e-03f, -2.611643757e-03f, +2.706861113e-03f, +6.019439501e-03f, -1.049291177e-03f, -1.025061737e-02f, -4.044418843e-03f, +1.358158709e-02f, +1.360478450e-02f, -1.308617999e-02f, -2.768427661e-02f, +4.626465814e-03f, +4.518401906e-02f, +1.823450269e-02f, -6.463513361e-02f, -7.324285945e-02f, +8.927272753e-02f, +3.285393859e-01f, +4.273610873e-01f, +2.879449755e-01f, +4.723137538e-02f, -8.385207551e-02f, -4.998555200e-02f, +2.988845230e-02f, +4.087781893e-02f, -4.360166579e-03f, -2.822896493e-02f, -7.357443684e-03f, +1.604735791e-02f, +1.066538848e-02f, -6.681698189e-03f, -9.277932906e-03f, +9.657674704e-04f, +6.089029438e-03f, +1.506461047e-03f, -3.034313091e-03f, -1.835400358e-03f, +1.015848324e-03f, +1.214269227e-03f, -1.028253700e-04f, -5.023812190e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.420592772e-05f, +1.278478377e-06f, -3.943662641e-05f, -2.340904202e-05f, +7.186211401e-05f, +8.532019059e-05f, -8.693853995e-05f, -1.980245521e-04f, +4.044158950e-05f, +3.472712501e-04f, +1.220733051e-04f, -4.781597261e-04f, -4.448440945e-04f, +4.874186029e-04f, +9.360060371e-04f, -2.217074795e-04f, -1.543495271e-03f, -5.443807266e-04f, +2.123902846e-03f, +2.284463820e-03f, -2.226917682e-03f, -7.261242746e-03f, -6.434833450e-03f, +6.413739816e-04f, +7.072864687e-03f, +6.732920928e-03f, +1.313855934e-03f, -2.581310828e-03f, -1.753299022e-03f, +8.835766843e-04f, +1.444002155e-03f, -3.844823356e-05f, -9.675369667e-04f, -3.256869626e-04f, +5.235689730e-04f, +3.989501581e-04f, -2.004216370e-04f, -3.225723242e-04f, +1.672415031e-05f, +2.008143956e-04f, +5.389403999e-05f, -9.637149550e-05f, -5.681040703e-05f, +3.279435594e-05f, +3.421848615e-05f, -6.281120501e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.652721470e-04f, +5.254670563e-04f, -7.673069041e-05f, -2.021343077e-03f, -9.007144999e-04f, +4.003846151e-03f, +3.528026906e-03f, -5.913320056e-03f, -8.336120182e-03f, +6.532189177e-03f, +1.519805960e-02f, -4.431853837e-03f, -2.305288241e-02f, -1.452336848e-03f, +2.998425141e-02f, +1.121519871e-02f, -3.372181825e-02f, -2.363755289e-02f, +3.242903756e-02f, +3.632696513e-02f, -2.547049237e-02f, -4.636746937e-02f, +1.381315467e-02f, +5.126299311e-02f, +1.535303363e-04f, -4.980113352e-02f, -1.334606571e-02f, +4.247512147e-02f, +2.298450154e-02f, -3.128555111e-02f, -2.745781254e-02f, +1.901295276e-02f, +2.671979587e-02f, -8.275610483e-03f, -2.209473228e-02f, +7.574587130e-04f, +1.563065907e-02f, +3.117280761e-03f, -9.312612588e-03f, -4.007564142e-03f, +4.463233262e-03f, +3.140265601e-03f, -1.524601036e-03f, -1.731524598e-03f, +1.028253700e-04f, +5.023812190e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.420592772e-05f, -1.278478377e-06f, +5.356478109e-05f, +4.123224846e-05f, -1.168416268e-04f, -1.321540652e-04f, +1.842133237e-04f, +3.041287796e-04f, -2.148275953e-04f, -5.618474442e-04f, +1.542432463e-04f, +8.766469271e-04f, +4.656973925e-05f, -1.183685991e-03f, -4.072137252e-04f, +1.395013665e-03f, +8.992957936e-04f, -1.426672350e-03f, -1.443564632e-03f, +1.230504856e-03f, +1.927343658e-03f, -8.173610248e-04f, -2.237927891e-03f, +2.605453583e-04f, +2.299706817e-03f, +3.238146663e-04f, -2.100049250e-03f, -8.127796729e-04f, +1.693164308e-03f, +1.114958710e-03f, -1.180449996e-03f, -1.196206297e-03f, +6.758064862e-04f, +1.083476215e-03f, -2.702399750e-04f, -8.473323064e-04f, +9.208901701e-06f, +5.723689113e-04f, +1.105777184e-04f, -3.285861621e-04f, -1.271229364e-04f, +1.543378622e-04f, +9.076854688e-05f, -5.474500924e-05f, -3.421848615e-05f, +6.281120501e-06f, +0.000000000e+00f, /* 7,30 (48) */ +0.000000000e+00f, -1.510662193e-04f, -5.241885780e-04f, +7.921668061e-05f, +1.360496485e-03f, +7.010510496e-04f, -2.297359916e-03f, -2.698582297e-03f, +2.508836561e-03f, +6.059881091e-03f, -7.020199266e-04f, -1.012854406e-02f, -4.522578569e-03f, +1.313674300e-02f, +1.409220310e-02f, -1.215017395e-02f, -2.790598409e-02f, +3.082970544e-03f, +4.463963834e-02f, +2.035840554e-02f, -6.235066979e-02f, -7.546977714e-02f, +8.201148479e-02f, +3.221045525e-01f, +4.280024613e-01f, +2.950178402e-01f, +5.396429631e-02f, -8.253821958e-02f, -5.256686283e-02f, +2.813515328e-02f, +4.176139561e-02f, -2.916164424e-03f, -2.826741316e-02f, -8.324980651e-03f, +1.572167095e-02f, +1.118895746e-02f, -6.282748031e-03f, -9.478354543e-03f, +6.431951462e-04f, +6.105753588e-03f, +1.707275443e-03f, -2.980419051e-03f, -1.931771853e-03f, +9.590379168e-04f, +1.247063583e-03f, -6.860688387e-05f, -5.086623395e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.395240629e-05f, +2.359131188e-06f, -3.849926784e-05f, -2.548962186e-05f, +6.898759360e-05f, +8.797104486e-05f, -8.037719661e-05f, -1.993642683e-04f, +2.871543078e-05f, +3.434541995e-04f, +1.387605929e-04f, -4.635448853e-04f, -4.627657440e-04f, +4.557867798e-04f, +9.459444776e-04f, -1.687455178e-04f, -1.528490732e-03f, -6.165977888e-04f, +2.054408452e-03f, +2.354278168e-03f, -2.041903873e-03f, -7.167524184e-03f, -6.576588681e-03f, +3.851071098e-04f, +6.959632173e-03f, +6.850181348e-03f, +1.493629345e-03f, -2.532396482e-03f, -1.831730441e-03f, +8.202888207e-04f, +1.468661393e-03f, +1.247875202e-05f, -9.648401929e-04f, -3.586215482e-04f, +5.100302025e-04f, +4.159446280e-04f, -1.858136918e-04f, -3.286002227e-04f, +5.622708085e-06f, +2.010276988e-04f, +6.052409654e-05f, -9.460233729e-05f, -5.994166238e-05f, +3.112411600e-05f, +3.536116739e-05f, -5.363231868e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.510662193e-04f, +5.241885780e-04f, -2.316590932e-05f, -1.980110829e-03f, -1.017556127e-03f, +3.871692085e-03f, +3.712240230e-03f, -5.609191277e-03f, -8.550947777e-03f, +5.970341733e-03f, +1.535230285e-02f, -3.555206910e-03f, -2.300631267e-02f, -2.636022839e-03f, +2.957703769e-02f, +1.261021237e-02f, -3.282252246e-02f, -2.506422524e-02f, +3.098547293e-02f, +3.755746999e-02f, -2.354314871e-02f, -4.718483039e-02f, +1.157522678e-02f, +5.152353847e-02f, +2.453237153e-03f, -4.947731885e-02f, -1.544611496e-02f, +4.166234180e-02f, +2.467766585e-02f, -3.017059240e-02f, -2.863826254e-02f, +1.781674647e-02f, +2.739560235e-02f, -7.192134268e-03f, -2.236497226e-02f, -8.987359339e-05f, +1.563986797e-02f, +3.689649672e-03f, -9.202034869e-03f, -4.336150304e-03f, +4.336110325e-03f, +3.294603463e-03f, -1.433832489e-03f, -1.786269607e-03f, +6.860688387e-05f, +5.086623395e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.395240629e-05f, -2.359131188e-06f, +5.177662578e-05f, +4.431058451e-05f, -1.118528453e-04f, -1.374100914e-04f, +1.730623710e-04f, +3.105441002e-04f, -1.940785686e-04f, -5.664150925e-04f, +1.211189995e-04f, +8.742896207e-04f, +9.276064125e-05f, -1.168061624e-03f, -4.639097211e-04f, +1.360169373e-03f, +9.603762505e-04f, -1.369090876e-03f, -1.500263071e-03f, +1.150799020e-03f, +1.970271063e-03f, -7.208850167e-04f, -2.259603869e-03f, +1.565431243e-04f, +2.296715000e-03f, +4.243447843e-04f, -2.074017417e-03f, -8.998052987e-04f, +1.650202515e-03f, +1.181780527e-03f, -1.129274547e-03f, -1.240686479e-03f, +6.252668419e-04f, +1.107813740e-03f, -2.271364703e-04f, -8.566381906e-04f, -2.291445353e-05f, +5.727039945e-04f, +1.314375733e-04f, -3.252146092e-04f, -1.387530092e-04f, +1.507233495e-04f, +9.617976463e-05f, -5.242115229e-05f, -3.536116739e-05f, +5.363231868e-06f, +0.000000000e+00f, /* 7,31 (48) */ +0.000000000e+00f, -1.371138130e-04f, -5.218294468e-04f, +4.071741277e-05f, +1.335006863e-03f, +7.700386432e-04f, -2.209388871e-03f, -2.778959494e-03f, +2.309472292e-03f, +6.088596521e-03f, -3.585657271e-04f, -9.989783468e-03f, -4.986123454e-03f, +1.267397725e-02f, +1.454798988e-02f, -1.120422947e-02f, -2.807472961e-02f, +1.554479812e-03f, +4.402304055e-02f, +2.241281399e-02f, -5.999639162e-02f, -7.751168101e-02f, +7.484396060e-02f, +3.155279638e-01f, +4.283875684e-01f, +3.019774723e-01f, +6.081447766e-02f, -8.104459023e-02f, -5.509925932e-02f, +2.630342283e-02f, +4.258168443e-02f, -1.447503031e-03f, -2.825493441e-02f, -9.289820844e-03f, +1.536304940e-02f, +1.169898766e-02f, -5.866803403e-03f, -9.664168235e-03f, +3.145949235e-04f, +6.111376296e-03f, +1.908303142e-03f, -2.919894955e-03f, -2.026374191e-03f, +8.990962544e-04f, +1.278187699e-03f, -3.324571648e-05f, -5.140255714e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.367129889e-05f, +3.401044618e-06f, -3.750518317e-05f, -2.747022415e-05f, +6.603770382e-05f, +9.040208288e-05f, -7.377878167e-05f, -2.003082109e-04f, +1.711613663e-05f, +3.390588754e-04f, +1.549617571e-04f, -4.482795641e-04f, -4.796149263e-04f, +4.237344909e-04f, +9.540569351e-04f, -1.161613155e-04f, -1.510974108e-03f, -6.867150942e-04f, +1.982443748e-03f, +2.418878930e-03f, -1.857870170e-03f, -7.067661105e-03f, -6.711386426e-03f, +1.284161757e-04f, +6.839105062e-03f, +6.961821842e-03f, +1.675039053e-03f, -2.478253380e-03f, -1.908165098e-03f, +7.546410229e-04f, +1.491008734e-03f, +6.404349089e-05f, -9.603516939e-04f, -3.913250279e-04f, +4.953746677e-04f, +4.324003844e-04f, -1.706534758e-04f, -3.341017752e-04f, -5.663638279e-06f, +2.008609397e-04f, +6.715667929e-05f, -9.261259788e-05f, -6.301990736e-05f, +2.934893968e-05f, +3.645794608e-05f, -4.402830756e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.371138130e-04f, +5.218294468e-04f, +2.861071646e-05f, -1.935800244e-03f, -1.129408972e-03f, +3.734281994e-03f, +3.885302601e-03f, -5.298647177e-03f, -8.745026346e-03f, +5.403926640e-03f, +1.547342185e-02f, -2.680917289e-03f, -2.291355203e-02f, -3.804084463e-03f, +2.911312797e-02f, +1.397038175e-02f, -3.186214621e-02f, -2.643331612e-02f, +2.948520986e-02f, +3.870826901e-02f, -2.157287765e-02f, -4.790571541e-02f, +9.315622911e-03f, +5.168008159e-02f, +4.749952153e-03f, -4.905297407e-02f, -1.752013237e-02f, +4.076253650e-02f, +2.632786837e-02f, -2.898881188e-02f, -2.976753709e-02f, +1.657605999e-02f, +2.802086920e-02f, -6.084320528e-03f, -2.259210873e-02f, -9.465117840e-04f, +1.561695352e-02f, +4.262353667e-03f, -9.070597296e-03f, -4.661364913e-03f, +4.197357316e-03f, +3.445326813e-03f, -1.337652724e-03f, -1.838690760e-03f, +3.324571648e-05f, +5.140255714e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.367129889e-05f, -3.401044618e-06f, +4.992298047e-05f, +4.720273898e-05f, -1.067364938e-04f, -1.422584669e-04f, +1.617501818e-04f, +3.161963751e-04f, -1.732332348e-04f, -5.697403375e-04f, +8.814437108e-05f, +8.701498844e-04f, +1.383111949e-04f, -1.150169523e-03f, -5.192197337e-04f, +1.322769487e-03f, +1.019137686e-03f, -1.308989800e-03f, -1.553665861e-03f, +1.068995934e-03f, +2.009071323e-03f, -6.230870902e-04f, -2.276646540e-03f, +5.221704922e-05f, +2.289024217e-03f, +5.241715658e-04f, -2.043673952e-03f, -9.852715527e-04f, +1.603675632e-03f, +1.246505957e-03f, -1.075471433e-03f, -1.282908753e-03f, +5.730390367e-04f, +1.130066542e-03f, -1.831321024e-04f, -8.642556210e-04f, -5.538729978e-05f, +5.718326359e-04f, +1.523377155e-04f, -3.210858882e-04f, -1.503045336e-04f, +1.466967147e-04f, +1.015072581e-04f, -4.990674596e-05f, -3.645794608e-05f, +4.402830756e-06f, +0.000000000e+00f, /* 8, 0 (44) */ +0.000000000e+00f, -5.810608668e-04f, -4.000691189e-04f, +1.473036739e-03f, +1.194314507e-03f, -2.873286720e-03f, -2.812546922e-03f, +4.814679451e-03f, +5.726744505e-03f, -7.245170423e-03f, -1.058087851e-02f, +1.001747038e-02f, +1.834373570e-02f, -1.289773969e-02f, -3.079950282e-02f, +1.559401954e-02f, +5.232680174e-02f, -1.780024775e-02f, -9.893335750e-02f, +1.924749700e-02f, +3.158555538e-01f, +4.802482832e-01f, +3.158555538e-01f, +1.924749700e-02f, -9.893335750e-02f, -1.780024775e-02f, +5.232680174e-02f, +1.559401954e-02f, -3.079950282e-02f, -1.289773969e-02f, +1.834373570e-02f, +1.001747038e-02f, -1.058087851e-02f, -7.245170423e-03f, +5.726744505e-03f, +4.814679451e-03f, -2.812546922e-03f, -2.873286720e-03f, +1.194314507e-03f, +1.473036739e-03f, -4.000691189e-04f, -5.810608668e-04f, +8.174592653e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.055780628e-05f, -3.848735070e-05f, -5.408411680e-05f, +8.314785430e-05f, +1.202249485e-04f, -1.466740772e-04f, -2.377308607e-04f, +2.260407756e-04f, +4.318552366e-04f, -3.122425653e-04f, -7.387415145e-04f, +3.873126573e-04f, +1.218865262e-03f, -4.155373014e-04f, -2.001146980e-03f, +3.044894664e-04f, +3.463524932e-03f, +3.686348989e-04f, -7.485993408e-03f, -9.128129279e-03f, -1.806332249e-04f, +8.988032967e-03f, +7.690748195e-03f, -1.512011525e-04f, -3.487874864e-03f, -4.287778866e-04f, +1.995704894e-03f, +4.918364215e-04f, -1.206608172e-03f, -4.348372014e-04f, +7.264350323e-04f, +3.413037314e-04f, -4.218703204e-04f, -2.431061282e-04f, +2.306814620e-04f, +1.561170982e-04f, -1.158881642e-04f, -8.797140009e-05f, +5.185638397e-05f, +4.069879002e-05f, -1.973251484e-05f, -1.241779730e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.810608668e-04f, +4.000691189e-04f, -2.174762082e-03f, -1.369356920e-03f, +4.931706478e-03f, +2.614276448e-03f, -9.249493921e-03f, -4.085126069e-03f, +1.521344320e-02f, +5.480993556e-03f, -2.257913432e-02f, -6.427039238e-03f, +3.073327098e-02f, +6.578871207e-03f, -3.875145264e-02f, -5.735049828e-03f, +4.555317997e-02f, +3.918145659e-03f, -5.012182275e-02f, -1.392488435e-03f, +5.173229864e-02f, -1.392488435e-03f, -5.012182275e-02f, +3.918145659e-03f, +4.555317997e-02f, -5.735049828e-03f, -3.875145264e-02f, +6.578871207e-03f, +3.073327098e-02f, -6.427039238e-03f, -2.257913432e-02f, +5.480993556e-03f, +1.521344320e-02f, -4.085126069e-03f, -9.249493921e-03f, +2.614276448e-03f, +4.931706478e-03f, -1.369356920e-03f, -2.174762082e-03f, +5.133746463e-04f, +5.810608668e-04f, -8.174592653e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.055780628e-05f, +3.848735070e-05f, +7.767317955e-05f, -1.452272650e-04f, -1.550874398e-04f, +3.095240124e-04f, +2.539588194e-04f, -5.576059524e-04f, -3.584684405e-04f, +8.884770433e-04f, +4.455839699e-04f, -1.282216489e-03f, -4.906064529e-04f, +1.699715456e-03f, +4.743906180e-04f, -2.087962664e-03f, -3.898920508e-04f, +2.390160510e-03f, +2.456691656e-04f, -2.558217123e-03f, -6.486431433e-05f, +2.564123150e-03f, -1.202879539e-04f, -2.406829384e-03f, +2.767965642e-04f, +2.112517436e-03f, -3.794418868e-04f, -1.728177459e-03f, +4.167838078e-04f, +1.310459866e-03f, -3.928611841e-04f, -9.131253679e-04f, +3.243325880e-04f, +5.766242397e-04f, -2.343593103e-04f, -3.223784588e-04f, +1.455110959e-04f, +1.526349625e-04f, -7.405458027e-05f, -5.496512532e-05f, +1.973251484e-05f, +1.241779730e-05f, +0.000000000e+00f, /* 8, 1 (44) */ +0.000000000e+00f, -5.605030605e-04f, -4.385564696e-04f, +1.418952622e-03f, +1.277462361e-03f, -2.753061772e-03f, -2.959221000e-03f, +4.576948590e-03f, +5.952785281e-03f, -6.813315187e-03f, -1.089312107e-02f, +9.278728870e-03f, +1.873104835e-02f, -1.167887442e-02f, -3.121504012e-02f, +1.359287256e-02f, +5.263129120e-02f, -1.433672282e-02f, -9.856472261e-02f, +1.176150359e-02f, +3.067274245e-01f, +4.800676500e-01f, +3.248435867e-01f, +2.693824519e-02f, -9.908455866e-02f, -2.128812261e-02f, +5.189802385e-02f, +1.758972443e-02f, -3.030766640e-02f, -1.410434786e-02f, +1.790889849e-02f, +1.074390542e-02f, -1.023957477e-02f, -7.667040744e-03f, +5.483638377e-03f, +5.045360913e-03f, -2.656429824e-03f, -2.989174884e-03f, +1.106343107e-03f, +1.524893123e-03f, -3.593703289e-04f, -6.007933817e-04f, +6.932812923e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.129703629e-05f, -3.623810225e-05f, -5.612101223e-05f, +7.822891266e-05f, +1.241869104e-04f, -1.370602814e-04f, -2.441037719e-04f, +2.087281453e-04f, +4.406935626e-04f, -2.828937322e-04f, -7.491921922e-04f, +3.395733510e-04f, +1.228207727e-03f, -3.393868463e-04f, -2.002069348e-03f, +1.815279258e-04f, +3.432201781e-03f, +5.803880719e-04f, -7.274526133e-03f, -9.256347174e-03f, -5.416502342e-04f, +8.836192550e-03f, +7.888409201e-03f, +7.163281020e-05f, -3.505077189e-03f, -5.541453813e-04f, +1.985688665e-03f, +5.681144816e-04f, -1.191423856e-03f, -4.820347566e-04f, +7.122748442e-04f, +3.700051028e-04f, -4.107447354e-04f, -2.598795924e-04f, +2.229608930e-04f, +1.653631379e-04f, -1.111798319e-04f, -9.268517436e-05f, +4.943904653e-05f, +4.286525175e-05f, -1.882096265e-05f, -1.327735794e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.605030605e-04f, +4.385564696e-04f, -2.097088902e-03f, -1.514584185e-03f, +4.776619039e-03f, +2.923800461e-03f, -8.995535102e-03f, -4.642732022e-03f, +1.485497475e-02f, +6.369470600e-03f, -2.213355035e-02f, -7.709255728e-03f, +3.024266452e-02f, +8.278586662e-03f, -3.827706203e-02f, -7.823012491e-03f, +4.516328792e-02f, +6.308306169e-03f, -4.987615359e-02f, -3.950705558e-03f, +5.166743433e-02f, +1.171634715e-03f, -5.024211071e-02f, +1.511316275e-03f, +4.582997653e-02f, -3.622532391e-03f, -3.913089453e-02f, +4.850693747e-03f, +3.115005478e-02f, -5.116579372e-03f, -2.297199551e-02f, +4.567868188e-03f, +1.553777578e-02f, -3.508501830e-03f, -9.483853231e-03f, +2.291897989e-03f, +5.077217574e-03f, -1.216721958e-03f, -2.248816662e-03f, +4.584095210e-04f, +6.007933817e-04f, -6.932812923e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.129703629e-05f, +3.623810225e-05f, +8.096929242e-05f, -1.376061596e-04f, -1.640445681e-04f, +2.960972531e-04f, +2.725676232e-04f, -5.374266916e-04f, -3.912278939e-04f, +8.618392464e-04f, +4.966166449e-04f, -1.250960538e-03f, -5.625883596e-04f, +1.667127252e-03f, +5.675804767e-04f, -2.058226523e-03f, -5.015668458e-04f, +2.367477734e-03f, +3.701898939e-04f, -2.545828660e-03f, -1.944264780e-04f, +2.563525537e-03f, +5.633100092e-06f, -2.417424508e-03f, +1.625664531e-04f, +2.131802680e-03f, -2.829697519e-04f, -1.752411078e-03f, +3.412978666e-04f, +1.335589277e-03f, -3.385690670e-04f, -9.356957414e-04f, +2.888928305e-04f, +5.944132943e-04f, -2.138056599e-04f, -3.346144730e-04f, +1.353292048e-04f, +1.598027048e-04f, -7.011533139e-05f, -5.833250182e-05f, +1.882096265e-05f, +1.327735794e-05f, +0.000000000e+00f, /* 8, 2 (44) */ +0.000000000e+00f, -5.392060243e-04f, -4.747945719e-04f, +1.362831610e-03f, +1.355691274e-03f, -2.628874861e-03f, -3.096281281e-03f, +4.332844818e-03f, +6.161513426e-03f, -6.372621624e-03f, -1.117601480e-02f, +8.529536678e-03f, +1.907062170e-02f, -1.045066670e-02f, -3.155442696e-02f, +1.159080321e-02f, +5.281281913e-02f, -1.090452104e-02f, -9.798433453e-02f, +4.486977456e-03f, +2.974710773e-01f, +4.795259998e-01f, +3.336797793e-01f, +3.482665439e-02f, -9.901292585e-02f, -2.479319980e-02f, +5.134387847e-02f, +1.957541309e-02f, -2.973955191e-02f, -1.529577171e-02f, +1.742686374e-02f, +1.145618026e-02f, -9.869569671e-03f, -8.077785479e-03f, +5.223758785e-03f, +5.268321806e-03f, -2.491066686e-03f, -3.100354716e-03f, +1.013657932e-03f, +1.574332169e-03f, -3.165050772e-04f, -6.196143443e-04f, +5.605077129e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.195065330e-05f, -3.395813985e-05f, -5.796636668e-05f, +7.322889637e-05f, +1.277717665e-04f, -1.273018687e-04f, -2.497965870e-04f, +1.912127353e-04f, +4.483821483e-04f, -2.533289979e-04f, -7.577892523e-04f, +2.917304806e-04f, +1.234654531e-03f, -2.635521593e-04f, -1.998535394e-03f, +6.013471407e-05f, +3.394090501e-03f, +7.861933153e-04f, -7.056735594e-03f, -9.372571504e-03f, -9.019193399e-04f, +8.672761342e-03f, +8.078603771e-03f, +2.995740239e-04f, -3.514968676e-03f, -6.803382136e-04f, +1.971053077e-03f, +6.441994771e-04f, -1.173306186e-03f, -5.287923119e-04f, +6.962673879e-04f, +3.982743552e-04f, -3.984872011e-04f, -2.763165514e-04f, +2.145761941e-04f, +1.743860058e-04f, -1.061042274e-04f, -9.727478371e-05f, +4.683387456e-05f, +4.497951281e-05f, -1.782320644e-05f, -1.412815468e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.392060243e-04f, +4.747945719e-04f, -2.016119610e-03f, -1.652190345e-03f, +4.612574470e-03f, +3.219897714e-03f, -8.722967479e-03f, -5.180158713e-03f, +1.446374686e-02f, +7.231309846e-03f, -2.163693371e-02f, -8.960216265e-03f, +2.968007616e-02f, +9.945713914e-03f, -3.770948155e-02f, -9.881239015e-03f, +4.466172107e-02f, +8.675783903e-03f, -4.950596369e-02f, -6.496534218e-03f, +5.147300785e-02f, +3.735160252e-03f, -5.023647761e-02f, -9.061082325e-04f, +4.599254299e-02f, -1.490729711e-03f, -3.941386428e-02f, +3.098282669e-03f, +3.149135265e-02f, -3.780990095e-03f, -2.331056457e-02f, +3.632172447e-03f, +1.582666861e-02f, -2.914088535e-03f, -9.697658891e-03f, +1.957283516e-03f, +5.212546779e-03f, -1.056919253e-03f, -2.318931993e-03f, +4.000770192e-04f, +6.196143443e-04f, -5.605077129e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.195065330e-05f, +3.395813985e-05f, +8.394210187e-05f, -1.297982064e-04f, -1.723708327e-04f, +2.821450487e-04f, +2.901524419e-04f, -5.161568565e-04f, -4.225430608e-04f, +8.333047132e-04f, +5.458441169e-04f, -1.216800403e-03f, -6.325582952e-04f, +1.630525108e-03f, +6.587819237e-04f, -2.023410232e-03f, -6.115396462e-04f, +2.338856349e-03f, +4.935323277e-04f, -2.526995766e-03f, -3.234896838e-04f, +2.556419947e-03f, +1.317713624e-04f, -2.421901676e-03f, +4.749181134e-05f, +2.145743589e-03f, -1.852150214e-04f, -1.772324548e-03f, +2.643318554e-04f, +1.357510663e-03f, -2.828338165e-04f, -9.561042310e-04f, +2.522261286e-04f, +6.109072174e-04f, -1.923376664e-04f, -3.461868290e-04f, +1.245574544e-04f, +1.667040381e-04f, -6.585830902e-05f, -6.163946680e-05f, +1.782320644e-05f, +1.412815468e-05f, +0.000000000e+00f, /* 8, 3 (44) */ +0.000000000e+00f, -5.172553710e-04f, -5.087527117e-04f, +1.304865243e-03f, +1.428920170e-03f, -2.501103095e-03f, -3.223583150e-03f, +4.083048231e-03f, +6.352726162e-03f, -5.924239476e-03f, -1.142934380e-02f, +7.771747426e-03f, +1.936235218e-02f, -9.216012166e-03f, -3.181797912e-02f, +9.592267814e-03f, +5.287295384e-02f, -7.510430536e-03f, -9.719814122e-02f, -2.569758138e-03f, +2.880985058e-01f, +4.786240804e-01f, +3.423525406e-01f, +4.290525816e-02f, -9.871335182e-02f, -2.830816848e-02f, +5.066354025e-02f, +2.154646617e-02f, -2.909535244e-02f, -1.646907790e-02f, +1.689807143e-02f, +1.215244765e-02f, -9.471295316e-03f, -8.476272680e-03f, +4.947442234e-03f, +5.482898000e-03f, -2.316680681e-03f, -3.206458944e-03f, +9.163831487e-04f, +1.621166044e-03f, -2.715255644e-04f, -6.374375508e-04f, +4.192261661e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.251934746e-05f, -3.165446722e-05f, -5.961999631e-05f, +6.816203638e-05f, +1.309782120e-04f, -1.174248849e-04f, -2.548073873e-04f, +1.735388265e-04f, +4.549205816e-04f, -2.236196045e-04f, -7.645391042e-04f, +2.438939764e-04f, +1.238230873e-03f, -1.881973897e-04f, -1.990617239e-03f, -5.945548166e-05f, +3.349386414e-03f, +9.857966404e-04f, -6.833018219e-03f, -9.476706422e-03f, -1.260943332e-03f, +8.497911455e-03f, +8.260968595e-03f, +5.323173350e-04f, -3.517397689e-03f, -8.070971557e-04f, +1.951762343e-03f, +7.199174749e-04f, -1.152255607e-03f, -5.749963216e-04f, +6.784234845e-04f, +4.260391358e-04f, -3.851092549e-04f, -2.923724898e-04f, +2.055361406e-04f, +1.831595935e-04f, -1.006666355e-04f, -1.017258544e-04f, +4.404318231e-05f, +4.703431483e-05f, -1.673956517e-05f, -1.496697687e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.172553710e-04f, +5.087527117e-04f, -1.932177508e-03f, -1.781988551e-03f, +4.440203638e-03f, +3.502042762e-03f, -8.432815037e-03f, -5.696315570e-03f, +1.404120380e-02f, +8.064614559e-03f, -2.109108959e-02f, -1.017701667e-02f, +2.904751787e-02f, +1.157623902e-02f, -3.705069963e-02f, -1.190464925e-02f, +4.405018143e-02f, +1.101464025e-02f, -4.901243137e-02f, -9.023529984e-03f, +5.114951817e-02f, +6.291580199e-03f, -5.010470624e-02f, -3.328009908e-03f, +4.604003480e-02f, +6.550138773e-04f, -3.959907930e-02f, +1.325958121e-03f, +3.175568451e-02f, -2.423479432e-03f, -2.359339839e-02f, +2.676068216e-03f, +1.607889474e-02f, -2.303181318e-03f, -9.889996558e-03f, +1.611096687e-03f, +5.337104233e-03f, -8.902152149e-04f, -2.384790302e-03f, +3.384375524e-04f, +6.374375508e-04f, -4.192261661e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.251934746e-05f, +3.165446722e-05f, +8.659178844e-05f, -1.218299000e-04f, -1.800565991e-04f, +2.677148706e-04f, +3.066833210e-04f, -4.938687636e-04f, -4.523507860e-04f, +8.029701393e-04f, +5.931572319e-04f, -1.179851125e-03f, -7.003516420e-04f, +1.590031001e-03f, +7.477719213e-04f, -1.983627737e-03f, -7.195346339e-04f, +2.304386847e-03f, +6.153823148e-04f, -2.501773131e-03f, -4.517227478e-04f, +2.542818943e-03f, +2.578030512e-04f, -2.420232485e-03f, -6.813399060e-05f, +2.154278965e-03f, -8.642323395e-05f, -1.787836834e-03f, +1.860743392e-04f, +1.376137616e-03f, -2.257867632e-04f, -9.742717304e-04f, +2.144137544e-04f, +6.260426865e-04f, -1.699983012e-04f, -3.570513405e-04f, +1.132135465e-04f, +1.733126841e-04f, -6.128744519e-05f, -6.487345079e-05f, +1.673956517e-05f, +1.496697687e-05f, +0.000000000e+00f, /* 8, 4 (44) */ +0.000000000e+00f, -4.947360235e-04f, -5.404071790e-04f, +1.245245247e-03f, +1.497082207e-03f, -2.370124883e-03f, -3.341008035e-03f, +3.828240844e-03f, +6.526264988e-03f, -5.469318894e-03f, -1.165296341e-02f, +7.007208321e-03f, +1.960624616e-02f, -7.977781293e-03f, -3.200617651e-02f, +7.601650574e-03f, +5.281349836e-02f, -4.161044122e-03f, -9.621234458e-02f, -9.402776357e-03f, +2.786217994e-01f, +4.773631371e-01f, +3.508504521e-01f, +5.116622676e-02f, -9.818103449e-02f, -3.182556617e-02f, +4.985644310e-02f, +2.349822851e-02f, -2.837543496e-02f, -1.762133351e-02f, +1.632307510e-02f, +1.283087113e-02f, -9.045256180e-03f, -8.861381935e-03f, +4.655069744e-03f, +5.688434141e-03f, -2.133521087e-03f, -3.307125579e-03f, +8.146572943e-04f, +1.665209226e-03f, -2.244912495e-04f, -6.541771159e-04f, +2.695563973e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.300404255e-05f, -2.933397920e-05f, -6.108222644e-05f, +6.304243838e-05f, +1.338059061e-04f, -1.074552011e-04f, -2.591359210e-04f, +1.557503799e-04f, +4.603111501e-04f, -1.938361112e-04f, -7.694523085e-04f, +1.961722680e-04f, +1.238968054e-03f, -1.134834115e-04f, -1.978395458e-03f, -1.770151251e-04f, +3.298294587e-03f, +1.178957764e-03f, -6.603776907e-03f, -9.568675473e-03f, -1.618227086e-03f, +8.311833564e-03f, +8.435150394e-03f, +7.695458477e-04f, -3.512224607e-03f, -9.341579451e-04f, +1.927790301e-03f, +7.950929731e-04f, -1.128279224e-03f, -6.205329591e-04f, +6.587583729e-04f, +4.532272335e-04f, -3.706252664e-04f, -3.080031036e-04f, +1.958512485e-04f, +1.916579412e-04f, -9.487335522e-05f, -1.060240704e-04f, +4.106983364e-05f, +4.902238392e-05f, -1.557062569e-05f, -1.579055794e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.947360235e-04f, +5.404071790e-04f, -1.845585719e-03f, -1.903818451e-03f, +4.260147039e-03f, +3.769757633e-03f, -8.126131716e-03f, -6.190184334e-03f, +1.358885301e-02f, +8.867584699e-03f, -2.049793236e-02f, -1.135686779e-02f, +2.834716623e-02f, +1.316627002e-02f, -3.630292770e-02f, -1.388827698e-02f, +4.333064679e-02f, +1.331902710e-02f, -4.839704905e-02f, -1.152530311e-02f, +5.069779542e-02f, +8.834399142e-03f, -4.984690319e-02f, -5.748242393e-03f, +4.597190081e-02f, +2.809292843e-03f, -3.968550254e-02f, -4.618787135e-04f, +3.194175885e-02f, -1.047341816e-03f, -2.381918515e-02f, +1.701796486e-03f, +1.629330850e-02f, -1.677138632e-03f, -1.005999486e-02f, +1.254045347e-03f, +5.450317780e-03f, -7.169025308e-04f, -2.446077748e-03f, +2.735641016e-04f, +6.541771159e-04f, -2.695563973e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.300404255e-05f, +2.933397920e-05f, +8.891950538e-05f, -1.137275915e-04f, -1.870942350e-04f, +2.528546485e-04f, +3.221336618e-04f, -4.706364215e-04f, -4.805927579e-04f, +7.709358742e-04f, +6.384530061e-04f, -1.140234026e-03f, -7.658107828e-04f, +1.545776231e-03f, +8.343344836e-04f, -1.939005358e-03f, -8.252821801e-04f, +2.264174645e-03f, +7.354301793e-04f, -2.470231970e-03f, -5.787966648e-04f, +2.522751965e-03f, +3.834040852e-04f, -2.412404450e-03f, -1.840150670e-04f, +2.157361451e-03f, +1.315596484e-05f, -1.798877921e-03f, +1.067187602e-04f, +1.391391680e-03f, -1.675640669e-04f, -9.901242290e-04f, +1.755411240e-04f, +6.397591682e-04f, -1.468336382e-04f, -3.671650045e-04f, +1.013171845e-04f, +1.796026234e-04f, -5.640774150e-05f, -6.802174843e-05f, +1.557062569e-05f, +1.579055794e-05f, +0.000000000e+00f, /* 8, 5 (44) */ +0.000000000e+00f, -4.717319809e-04f, -5.697411582e-04f, +1.184163020e-03f, +1.560124645e-03f, -2.236318977e-03f, -3.448463236e-03f, +3.569104923e-03f, +6.682015368e-03f, -5.009007744e-03f, -1.184679952e-02f, +6.237756013e-03f, +1.980241843e-02f, -6.738813239e-03f, -3.211965993e-02f, +5.623255116e-03f, +5.263648323e-02f, -8.627495342e-04f, -9.503338681e-02f, -1.600655326e-02f, +2.690531239e-01f, +4.757449100e-01f, +3.591622856e-01f, +5.960137715e-02f, -9.741148864e-02f, -3.533779078e-02f, +4.892228515e-02f, +2.542601882e-02f, -2.758034199e-02f, -1.874961273e-02f, +1.570254214e-02f, +1.348962951e-02f, -8.592028947e-03f, -9.232007201e-03f, +4.347066640e-03f, +5.884285389e-03f, -1.941863146e-03f, -3.401998934e-03f, +7.086332239e-04f, +1.706279060e-03f, -1.754688656e-04f, -6.697477416e-04f, +1.116508179e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.340588755e-05f, -2.700344492e-05f, -6.235387979e-05f, +5.788404891e-05f, +1.362554549e-04f, -9.741845355e-05f, -2.627835768e-04f, +1.378909369e-04f, +4.645587956e-04f, -1.640482395e-04f, -7.725434958e-04f, +1.486720570e-04f, +1.236903324e-03f, -3.956751245e-05f, -1.961958798e-03f, -2.923242001e-04f, +3.241029330e-03f, +1.365450418e-03f, -6.369420286e-03f, -9.648421663e-03f, -1.973278391e-03f, +8.114736642e-03f, +8.600806591e-03f, +1.010931395e-03f, -3.499322218e-03f, -1.061251757e-03f, +1.899120603e-03f, +8.695492688e-04f, -1.101390868e-03f, -6.652883750e-04f, +6.372917343e-04f, +4.797667512e-04f, -3.550524448e-04f, -3.231644100e-04f, +1.855337779e-04f, +1.998553052e-04f, -8.873170256e-05f, -1.101552123e-04f, +3.791724618e-05f, +5.093645098e-05f, -1.431724768e-05f, -1.659558457e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.717319809e-04f, +5.697411582e-04f, -1.756666214e-03f, -2.017546043e-03f, +4.073052804e-03f, +4.022612281e-03f, -7.803998054e-03f, -6.660820755e-03f, +1.310826026e-02f, +9.638520573e-03f, -1.985947935e-02f, -1.249710182e-02f, +2.758135544e-02f, +1.471204625e-02f, -3.546859322e-02f, -1.582728234e-02f, +4.250536461e-02f, +1.558320174e-02f, -4.766161887e-02f, -1.399553509e-02f, +5.011899875e-02f, +1.135715111e-02f, -4.946349911e-02f, -8.160646843e-03f, +4.578788574e-02f, +4.966654293e-03f, -3.967234657e-02f, -2.260756634e-03f, +3.204847761e-02f, +3.440498641e-04f, -2.398674922e-02f, +7.116722567e-04f, +1.646884962e-02f, -1.037379463e-03f, -1.020682850e-02f, +8.868803424e-04f, +5.551634964e-03f, -5.372999074e-04f, -2.502485489e-03f, +2.055423531e-04f, +6.697477416e-04f, -1.116508179e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.340588755e-05f, +2.700344492e-05f, +9.092735126e-05f, -1.055174142e-04f, -1.934780934e-04f, +2.376126283e-04f, +3.364802418e-04f, -4.465353040e-04f, -5.072156049e-04f, +7.373056101e-04f, +6.816348387e-04f, -1.098076332e-03f, -8.287854638e-04f, +1.497901017e-03f, +9.182612062e-04f, -1.889681393e-03f, -9.285195307e-04f, +2.218339760e-03f, +8.533715254e-04f, -2.432459817e-03f, -7.043854709e-04f, +2.496265270e-03f, +5.082509356e-04f, -2.398421082e-03f, -2.998537883e-04f, +2.154957710e-03f, +1.132694617e-04f, -1.805389067e-03f, +2.646295790e-05f, +1.403202629e-03f, -1.083063974e-04f, -1.003593071e-03f, +1.356976152e-04f, +6.519991251e-04f, -1.228927735e-04f, -3.764861458e-04f, +8.889005515e-05f, +1.855481789e-04f, -5.122527963e-05f, -7.107155702e-05f, +1.431724768e-05f, +1.659558457e-05f, +0.000000000e+00f, /* 8, 6 (44) */ +0.000000000e+00f, -4.483260934e-04f, -5.967446031e-04f, +1.121809141e-03f, +1.618008694e-03f, -2.100063522e-03f, -3.545881689e-03f, +3.306321346e-03f, +6.819906305e-03f, -4.544448948e-03f, -1.201084776e-02f, +5.465212517e-03f, +1.995109049e-02f, -5.501909915e-03f, -3.215922744e-02f, +3.661296318e-03f, +5.234415903e-02f, +2.378279796e-03f, -9.366793640e-02f, -2.237597355e-02f, +2.594047022e-01f, +4.737716316e-01f, +3.672770223e-01f, +6.820218374e-02f, -9.640055725e-02f, -3.883711299e-02f, +4.786103340e-02f, +2.732513942e-02f, -2.671079272e-02f, -1.985100360e-02f, +1.503725377e-02f, +1.412692124e-02f, -8.112262196e-03f, -9.587059646e-03f, +4.023902230e-03f, +6.069819167e-03f, -1.742007841e-03f, -3.490730637e-03f, +5.984780117e-04f, +1.744196306e-03f, -1.245324146e-04f, -6.840649893e-04f, -5.430502781e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.372624758e-05f, -2.466949175e-05f, -6.343626354e-05f, +5.270062244e-05f, +1.383283922e-04f, -8.733998399e-05f, -2.657533541e-04f, +1.200035216e-04f, +4.676710644e-04f, -1.343247226e-04f, -7.738312790e-04f, +1.014980978e-04f, +1.232079723e-03f, +3.339690446e-05f, -1.941403888e-03f, -4.051705618e-04f, +3.177813682e-03f, +1.545062632e-03f, -6.130361963e-03f, -9.715907479e-03f, -2.325608775e-03f, +7.906847652e-03f, +8.757605971e-03f, +1.256135034e-03f, -3.478576103e-03f, -1.188105689e-03f, +1.865746873e-03f, +9.431088328e-04f, -1.071611160e-03f, -7.091489576e-04f, +6.140477072e-04f, +5.055862801e-04f, -3.384108386e-04f, -3.378128593e-04f, +1.745977306e-04f, +2.077262260e-04f, -8.225001081e-05f, -1.141051959e-04f, +3.458939389e-05f, +5.276927238e-05f, -1.298056784e-05f, -1.737870626e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.483260934e-04f, +5.967446031e-04f, -1.665738863e-03f, -2.123063457e-03f, +3.879574710e-03f, +4.260224910e-03f, -7.467517812e-03f, -7.107356059e-03f, +1.260104465e-02f, +1.037582618e-02f, -1.917784451e-02f, -1.359517815e-02f, +2.675256998e-02f, +1.620994727e-02f, -3.455033201e-02f, -1.771696373e-02f, +4.157684508e-02f, +1.780154150e-02f, -4.680824735e-02f, -1.642799490e-02f, +4.941461328e-02f, +1.385341638e-02f, -4.895524817e-02f, -1.055906793e-02f, +4.548803195e-02f, +7.121612003e-03f, -3.955907711e-02f, -4.066145701e-03f, +3.207494056e-02f, +1.747252493e-03f, -2.409505562e-02f, -2.919208143e-04f, +1.660454724e-02f, -3.853803383e-04f, -1.032972127e-02f, +5.103941965e-04f, +5.640525020e-03f, -3.517517285e-04f, -2.553710769e-03f, +1.344707961e-04f, +6.840649893e-04f, +5.430502781e-06f, +0.000000000e+00f, +0.000000000e+00f, -2.372624758e-05f, +2.466949175e-05f, +9.261834034e-05f, -9.722521034e-05f, -1.992044890e-04f, +2.220372295e-04f, +3.497032258e-04f, -4.216421221e-04f, -5.321709771e-04f, +7.021860642e-04f, +7.226127060e-04f, -1.053510781e-03f, -8.891331350e-04f, +1.446554062e-03f, +9.993517718e-04f, -1.835805697e-03f, -1.028991470e-03f, +2.167016456e-03f, +9.689080262e-04f, -2.388560283e-03f, -8.281670986e-04f, +2.463421819e-03f, +6.320214768e-04f, -2.378301921e-03f, -4.153515593e-04f, +2.147048585e-03f, +2.136613268e-04f, -1.807323043e-03f, -5.449132512e-05f, +1.411508730e-03f, -4.815859980e-05f, -1.014615202e-03f, +9.497637221e-05f, +6.627082172e-04f, -9.822773494e-05f, -3.849745594e-04f, +7.595580378e-05f, +1.911241015e-04f, -4.574722876e-05f, -7.401001638e-05f, +1.298056784e-05f, +1.737870626e-05f, +0.000000000e+00f, /* 8, 7 (44) */ +0.000000000e+00f, -4.245998458e-04f, -6.214140948e-04f, +1.058372877e-03f, +1.670709316e-03f, -1.961735130e-03f, -3.633221673e-03f, +3.040567992e-03f, +6.939909826e-03f, -4.076777884e-03f, -1.214517248e-02f, +4.691381238e-03f, +2.005258858e-02f, -4.269830192e-03f, -3.212583053e-02f, +1.719892430e-03f, +5.193898847e-02f, +5.556093478e-03f, -9.212287376e-02f, -2.850633551e-02f, +2.496887948e-01f, +4.714460229e-01f, +3.751838699e-01f, +7.695978971e-02f, -9.514442221e-02f, -4.231568910e-02f, +4.667292771e-02f, +2.919088629e-02f, -2.576768389e-02f, -2.092261476e-02f, +1.432810481e-02f, +1.474096895e-02f, -7.606675916e-03f, -9.925470485e-03f, +3.686089371e-03f, +6.244416898e-03f, -1.534281615e-03f, -3.572980648e-03f, +4.843728157e-04f, +1.778785700e-03f, -7.176314224e-05f, -6.970455571e-04f, -2.280920904e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.396669449e-05f, -2.233858996e-05f, -6.433115545e-05f, +4.750568960e-05f, +1.400271590e-04f, -7.724478239e-05f, -2.680498294e-04f, +1.021305455e-04f, +4.696580509e-04f, -1.047331584e-04f, -7.733381554e-04f, +5.475298431e-05f, +1.224545909e-03f, +1.052606080e-04f, -1.916834922e-03f, -5.153502663e-04f, +3.108878884e-03f, +1.717596983e-03f, -5.887019779e-03f, -9.771114886e-03f, -2.674734318e-03f, +7.688411219e-03f, +8.905229318e-03f, +1.504807565e-03f, -3.449884991e-03f, -1.314443263e-03f, +1.827672860e-03f, +1.015593691e-03f, -1.038967548e-03f, -7.520015975e-04f, +5.890548917e-04f, +5.306150743e-04f, -3.207233305e-04f, -3.519054467e-04f, +1.630588444e-04f, +2.152455967e-04f, -7.543762803e-05f, -1.178601126e-04f, +3.109080837e-05f, +5.451365104e-05f, -1.156200341e-05f, -1.813654524e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.245998458e-04f, +6.214140948e-04f, -1.573120522e-03f, -2.220288667e-03f, +3.680370221e-03f, +4.482262139e-03f, -7.117814586e-03f, -7.528998181e-03f, +1.206887367e-02f, +1.107801225e-02f, -1.845523181e-02f, -1.464868893e-02f, +2.586343685e-02f, +1.765650133e-02f, -3.355098024e-02f, -1.955276943e-02f, +4.054785361e-02f, +1.996855796e-02f, -4.583933932e-02f, -1.881655519e-02f, +4.858644618e-02f, +1.631683820e-02f, -4.832322670e-02f, -1.293736985e-02f, +4.507268039e-02f, +9.268660589e-03f, -3.934541578e-02f, -5.873468744e-03f, +3.202044924e-02f, +3.158761223e-03f, -2.414321422e-02f, -1.306536016e-03f, +1.669952361e-02f, +2.773278789e-04f, -1.042794901e-02f, +1.254196371e-04f, +5.716480823e-03f, -1.606276271e-04f, -2.599457997e-03f, +6.046077973e-05f, +6.970455571e-04f, +2.280920904e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.396669449e-05f, +2.233858996e-05f, +9.399637063e-05f, -8.887646084e-05f, -2.042716706e-04f, +2.061769061e-04f, +3.617861668e-04f, -3.960345967e-04f, -5.554156132e-04f, +6.656866567e-04f, +7.613033350e-04f, -1.006675221e-03f, -9.467192680e-04f, +1.391892103e-03f, +1.077414432e-03f, -1.777539236e-03f, -1.126450964e-03f, +2.110352850e-03f, +1.081748194e-03f, -2.338652763e-03f, -9.498242216e-04f, +2.424301130e-03f, +7.543958355e-04f, -2.352082522e-03f, -5.302096033e-04f, +2.133629210e-03f, +3.140734770e-04f, -1.804644322e-03f, -1.359389520e-04f, +1.416256979e-03f, +1.273065514e-05f, -1.023133402e-03f, +5.347409763e-05f, +6.718354979e-04f, -7.289338143e-05f, -3.925916505e-04f, +6.254000361e-05f, +1.963056544e-04f, -3.998184953e-05f, -7.682424980e-05f, +1.156200341e-05f, +1.813654524e-05f, +0.000000000e+00f, /* 8, 8 (44) */ +0.000000000e+00f, -4.006331513e-04f, -6.437526848e-04f, +9.940417215e-04f, +1.718215006e-03f, -1.821707971e-03f, -3.710466456e-03f, +2.772518163e-03f, +7.042040372e-03f, -3.607119833e-03f, -1.224990564e-02f, +3.918043083e-03f, +2.010734157e-02f, -3.045284283e-03f, -3.202056993e-02f, -1.969424922e-04f, +5.142363821e-02f, +8.664972362e-03f, -9.040527678e-02f, -3.439335529e-02f, +2.399176799e-01f, +4.687712885e-01f, +3.828722811e-01f, +8.586501903e-02f, -9.363961465e-02f, -4.576557409e-02f, +4.535848444e-02f, +3.101855915e-02f, -2.475209020e-02f, -2.196158231e-02f, +1.357610321e-02f, +1.533002384e-02f, -7.076060841e-03f, -1.024619382e-02f, +3.334183924e-03f, +6.407475742e-03f, -1.319036018e-03f, -3.648418276e-03f, +3.665127031e-04f, +1.809876508e-03f, -1.724949120e-05f, -7.086075605e-04f, -4.094575428e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.412899703e-05f, -2.001703818e-05f, -6.504078892e-05f, +4.231252662e-05f, +1.413550798e-04f, -6.715743137e-05f, -2.696791191e-04f, +8.431371580e-05f, +4.705323363e-04f, -7.533986833e-05f, -7.710904031e-04f, +8.536945332e-06f, +1.214355977e-03f, +1.758788128e-04f, -1.888363348e-03f, -6.226678819e-04f, +3.034463845e-03f, +1.882870823e-03f, -5.639815044e-03f, -9.814045284e-03f, -3.020176466e-03f, +7.459689256e-03f, +9.043370036e-03f, +1.756590075e-03f, -3.413161095e-03f, -1.439984936e-03f, +1.784912553e-03f, +1.086825811e-03f, -1.003494338e-03f, -7.937339537e-04f, +5.623463434e-04f, +5.547832275e-04f, -3.020156231e-04f, -3.653998246e-04f, +1.509345828e-04f, +2.223887316e-04f, -6.830491191e-05f, -1.214062683e-04f, +2.742657843e-05f, +5.616245785e-05f, -1.006325487e-05f, -1.886570663e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.006331513e-04f, +6.437526848e-04f, -1.479124152e-03f, -2.309165128e-03f, +3.476098551e-03f, +4.688439045e-03f, -6.756028420e-03f, -7.925032778e-03f, +1.151345806e-02f, +1.174369890e-02f, -1.769392847e-02f, -1.565536415e-02f, +2.491671758e-02f, +1.904839344e-02f, -3.247356581e-02f, -2.133030867e-02f, +3.942140265e-02f, +2.207891081e-02f, -4.475759113e-02f, -2.115520795e-02f, +4.763662196e-02f, +1.874113933e-02f, -4.756883086e-02f, -1.528945237e-02f, +4.454247079e-02f, +1.140228980e-02f, -3.903134231e-02f, -7.678113066e-03f, +3.188451029e-02f, +4.575018202e-03f, -2.413048356e-02f, -2.329669418e-03f, +1.675299771e-02f, +9.491633768e-04f, -1.050084239e-02f, -2.671720134e-04f, +5.779020827e-03f, +3.567802731e-05f, -2.639439847e-03f, -1.636347006e-05f, +7.086075605e-04f, +4.094575428e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.412899703e-05f, +2.001703818e-05f, +9.506618998e-05f, -8.049621737e-05f, -2.086797875e-04f, +1.900800085e-04f, +3.727159975e-04f, -3.697912301e-04f, -5.769113925e-04f, +6.279191849e-04f, +7.976303570e-04f, -9.577121940e-04f, -1.001417649e-03f, +1.334079442e-03f, +1.152266461e-03f, -1.715053605e-03f, -1.220659775e-03f, +2.048510478e-03f, +1.191608132e-03f, -2.282872110e-03f, -1.069045087e-03f, +2.378999080e-03f, +8.750572352e-04f, -2.319814411e-03f, -6.441297486e-04f, +2.114709087e-03f, +4.142463470e-04f, -1.797329261e-03f, -2.176719137e-04f, +1.417403325e-03f, +7.420923400e-05f, -1.029096508e-03f, +1.129083210e-05f, +6.793336019e-04f, -4.694729371e-05f, -3.993005730e-04f, +4.867011854e-05f, +2.010686993e-04f, -3.393849481e-05f, -7.950140619e-05f, +1.006325487e-05f, +1.886570663e-05f, +0.000000000e+00f, /* 8, 9 (44) */ +0.000000000e+00f, -3.765041543e-04f, -6.637697230e-04f, +9.290009326e-04f, +1.760527533e-03f, -1.680352891e-03f, -3.777623887e-03f, +2.502839044e-03f, +7.126354088e-03f, -3.136587497e-03f, -1.232524551e-02f, +3.146952680e-03f, +2.011587851e-02f, -1.830928306e-03f, -3.184469111e-02f, -2.085305840e-03f, +5.080097032e-02f, +1.169943621e-02f, -8.852240596e-02f, -4.003317034e-02f, +2.301036346e-01f, +4.657511121e-01f, +3.903319704e-01f, +9.490838907e-02f, -9.188302457e-02f, -4.917873518e-02f, +4.391849951e-02f, +3.280347170e-02f, -2.366526438e-02f, -2.296507664e-02f, +1.278236926e-02f, +1.589237018e-02f, -6.521277614e-03f, -1.054820944e-02f, +2.968784100e-03f, +6.558410325e-03f, -1.096647286e-03f, -3.716723188e-03f, +2.451064348e-04f, +1.837303087e-03f, +3.891296665e-05f, -7.186708154e-04f, -5.981146091e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.421511060e-05f, -1.771094961e-05f, -6.556783713e-05f, +3.713412602e-05f, +1.423163382e-04f, -5.710205251e-05f, -2.706488403e-04f, +6.659394642e-05f, +4.703089230e-04f, -4.620975957e-05f, -7.671179684e-04f, -3.705235275e-05f, +1.201569264e-03f, +2.451114403e-04f, -1.856107526e-03f, -7.269367777e-04f, +2.954814590e-03f, +2.040716467e-03f, -5.389171783e-03f, -9.844719429e-03f, -3.361462821e-03f, +7.220960571e-03f, +9.171734749e-03f, +2.011114502e-03f, -3.368330420e-03f, -1.564448624e-03f, +1.737490298e-03f, +1.156627495e-03f, -9.652327035e-04f, -8.342347209e-04f, +5.339595571e-04f, +5.780218488e-04f, -2.823162196e-04f, -3.782544149e-04f, +1.382441196e-04f, +2.291314354e-04f, -6.086322209e-05f, -1.247302240e-04f, +2.360234839e-05f, +5.770865334e-05f, -8.486307925e-06f, -1.956278904e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.765041543e-04f, +6.637697230e-04f, -1.384057962e-03f, -2.389661345e-03f, +3.267418763e-03f, +4.878519054e-03f, -6.383312422e-03f, -8.294824008e-03f, +1.093654667e-02f, +1.237161809e-02f, -1.689629811e-02f, -1.661307635e-02f, +2.391529993e-02f, +2.038247288e-02f, -3.132129935e-02f, -2.304536227e-02f, +3.820074287e-02f, +2.412742129e-02f, -4.356598299e-02f, -2.343808006e-02f, +4.656757688e-02f, +2.112013841e-02f, -4.669377363e-02f, -1.760926678e-02f, +4.389834104e-02f, +1.351699889e-02f, -3.861709596e-02f, -9.475442327e-03f, +3.166683837e-02f, +5.992421528e-03f, -2.405627433e-02f, -3.358765927e-03f, +1.676428854e-02f, +1.628496979e-03f, -1.054778968e-02f, -6.664725864e-04f, +5.827690945e-03f, +2.367467266e-04f, -2.673378342e-03f, -9.586487626e-05f, +7.186708154e-04f, +5.981146091e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.421511060e-05f, +1.771094961e-05f, +9.583336027e-05f, -7.210903727e-05f, -2.124308514e-04f, +1.737946493e-04f, +3.824830127e-04f, -3.429910801e-04f, -5.966253717e-04f, +5.889974946e-04f, +8.315244415e-04f, -9.067685159e-04f, -1.053110646e-03f, +1.273287459e-03f, +1.223734587e-03f, -1.648530526e-03f, -1.311389056e-03f, +1.981663839e-03f, +1.298212264e-03f, -2.221368260e-03f, -1.185524330e-03f, +2.327627661e-03f, +9.936928337e-04f, -2.281564981e-03f, -7.568152173e-04f, +2.090312125e-03f, +5.139195696e-04f, -1.785366232e-03f, -2.994798621e-04f, +1.414912861e-03f, +1.361219172e-04f, -1.032459620e-03f, -3.147027837e-05f, +6.851589268e-04f, -2.044965488e-05f, -4.050663648e-04f, +3.437545963e-05f, +2.053897813e-04f, -2.762760690e-05f, -8.202870318e-05f, +8.486307925e-06f, +1.956278904e-05f, +0.000000000e+00f, /* 8,10 (44) */ +0.000000000e+00f, -3.522890437e-04f, -6.814806726e-04f, +8.634330955e-04f, +1.797661659e-03f, -1.538036552e-03f, -3.834725940e-03f, +2.232190203e-03f, +7.192948034e-03f, -2.666278574e-03f, -1.237145527e-02f, +2.379834711e-03f, +2.007882616e-02f, -6.293590427e-04f, -3.159957967e-02f, -3.941413366e-03f, +5.007403355e-02f, +1.465425080e-02f, -8.648168949e-02f, -4.542234212e-02f, +2.202589152e-01f, +4.623896493e-01f, +3.975529310e-01f, +1.040801238e-01f, -8.987191007e-02f, -5.254706560e-02f, +4.235405088e-02f, +3.454096200e-02f, -2.250863689e-02f, -2.393030935e-02f, +1.194813454e-02f, +1.642632974e-02f, -5.943255765e-03f, -1.083052566e-02f, +2.590529685e-03f, +6.696654445e-03f, -8.675158509e-04f, -3.777586410e-03f, +1.203762108e-04f, +1.860905435e-03f, +9.662161999e-05f, -7.271571233e-04f, -7.937424996e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.422716675e-05f, -1.542623912e-05f, -6.591539633e-05f, +3.198316856e-05f, +1.429159500e-04f, -4.710225478e-05f, -2.709680669e-04f, +4.901127214e-05f, +4.690051627e-04f, -1.740619401e-05f, -7.614543474e-04f, -8.191999454e-05f, +1.186250152e-03f, +3.128233666e-04f, -1.820192390e-03f, -8.279793927e-04f, +2.870183705e-03f, +2.190981361e-03f, -5.135515976e-03f, -9.863177323e-03f, -3.698127934e-03f, +6.972520433e-03f, +9.290043881e-03f, +2.268004217e-03f, -3.315333055e-03f, -1.687550236e-03f, +1.685440871e-03f, +1.224821774e-03f, -9.242306866e-04f, -8.733938990e-04f, +5.039364399e-04f, +6.002632396e-04f, -2.616563963e-04f, -3.904285214e-04f, +1.250083200e-04f, +2.354500713e-04f, -5.312490959e-05f, -1.278188358e-04f, +1.962431458e-05f, +5.914530952e-05f, -6.833434631e-06f, -2.022439527e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.522890437e-04f, +6.814806726e-04f, -1.288224602e-03f, -2.461770383e-03f, +3.054987912e-03f, +5.052313703e-03f, -6.000829409e-03f, -8.637815088e-03f, +1.033992130e-02f, +1.296061558e-02f, -1.606477367e-02f, -1.751984486e-02f, +2.286218928e-02f, +2.165576034e-02f, -3.009756476e-02f, -2.469389280e-02f, +3.688935382e-02f, +2.610908513e-02f, -4.226777073e-02f, -2.565944832e-02f, +4.538205255e-02f, +2.344776607e-02f, -4.570008079e-02f, -1.989083176e-02f, +4.314152582e-02f, +1.560731101e-02f, -3.810317639e-02f, -1.126080856e-02f, +3.136735851e-02f, +7.407334389e-03f, -2.392015241e-02f, -4.391225546e-03f, +1.673281826e-02f, +2.313655906e-03f, -1.056823934e-02f, -1.071538951e-03f, +5.862066405e-03f, +4.421365079e-04f, -2.701005949e-03f, -1.778935794e-04f, +7.271571233e-04f, +7.937424996e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.422716675e-05f, +1.542623912e-05f, +9.630421979e-05f, -6.373892123e-05f, -2.155286933e-04f, +1.573685710e-04f, +3.910808416e-04f, -3.157135344e-04f, -6.145298076e-04f, +5.490371495e-04f, +8.629234091e-04f, -8.539948454e-04f, -1.101689457e-03f, +1.209694110e-03f, +1.291655395e-03f, -1.578161324e-03f, -1.398419915e-03f, +1.909999891e-03f, +1.401294039e-03f, -2.154305823e-03f, -1.298963777e-03f, +2.270314702e-03f, +1.109994551e-03f, -2.237417363e-03f, -8.679714118e-04f, +2.060476642e-03f, +6.128326608e-04f, -1.768755735e-03f, -3.811506542e-04f, +1.408759996e-03f, +1.983107871e-04f, -1.033184287e-03f, -7.470322627e-05f, +6.892718057e-04f, +6.536878019e-06f, -4.098560803e-04f, +1.968713542e-05f, +2.092462143e-04f, -2.106071123e-05f, -8.439347096e-05f, +6.833434631e-06f, +2.022439527e-05f, +0.000000000e+00f, /* 8,11 (44) */ +0.000000000e+00f, -3.280618770e-04f, -6.969069117e-04f, +7.975176992e-04f, +1.829644827e-03f, -1.395120602e-03f, -3.881828194e-03f, +1.961222136e-03f, +7.241959306e-03f, -2.197273411e-03f, -1.238886146e-02f, +1.618380364e-03f, +1.999690617e-02f, +5.568911090e-04f, -3.128675631e-02f, -5.761605756e-03f, +4.924605415e-02f, +1.752443450e-02f, -8.429070813e-02f, -5.055785810e-02f, +2.103957378e-01f, +4.586915213e-01f, +4.045254514e-01f, +1.133701677e-01f, -8.760390585e-02f, -5.586239866e-02f, +4.066650065e-02f, +3.622640287e-02f, -2.128381512e-02f, -2.485454003e-02f, +1.107474064e-02f, +1.693026618e-02f, -5.342992525e-03f, -1.109218205e-02f, +2.200101163e-03f, +6.821662764e-03f, -6.320657796e-04f, -3.830711319e-03f, -7.442625010e-06f, +1.880529750e-03f, +1.557669295e-04f, -7.339905580e-04f, -9.959864522e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.416746233e-05f, -1.316861113e-05f, -6.608696828e-05f, +2.687199657e-05f, +1.431597354e-04f, -3.718108509e-05f, -2.706472842e-04f, +3.160476641e-05f, +4.666406816e-04f, +1.100913829e-05f, -7.541364601e-04f, -1.259739956e-04f, +1.168467854e-03f, +3.788846557e-04f, -1.780749095e-03f, -9.256274826e-04f, +2.780829778e-03f, +2.333528214e-03f, -4.879274799e-03f, -9.869478069e-03f, -4.029714077e-03f, +6.714680117e-03f, +9.398032212e-03f, +2.526874633e-03f, -3.254123434e-03f, -1.809004221e-03f, +1.628809553e-03f, +1.291232807e-03f, -8.805431766e-04f, -9.111030623e-04f, +4.723232733e-04f, +6.214410693e-04f, -2.400701682e-04f, -4.018824413e-04f, +1.112497165e-04f, +2.413216300e-04f, -4.510330362e-05f, -1.306592947e-04f, +1.549922050e-05f, +6.046563196e-05f, -5.107193698e-06f, -2.084714333e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.280618770e-04f, +6.969069117e-04f, -1.191920382e-03f, -2.525509304e-03f, +2.839459219e-03f, +5.209682274e-03f, -5.609748568e-03f, -8.953528623e-03f, +9.725391489e-03f, +1.350965273e-02f, -1.520185026e-02f, -1.837383971e-02f, +2.176049983e-02f, +2.286545445e-02f, -2.880590937e-02f, -2.627205412e-02f, +3.549093390e-02f, +2.801908502e-02f, -4.086647669e-02f, -2.781375414e-02f, +4.408308877e-02f, +2.571808077e-02f, -4.459008624e-02f, -2.212824912e-02f, +4.227355441e-02f, +1.766778765e-02f, -3.749034373e-02f, -1.302956429e-02f, +3.098620786e-02f, +8.816094385e-03f, -2.372184162e-02f, -5.424409833e-03f, +1.665811503e-02f, +3.002927711e-03f, -1.056170246e-02f, -1.481395032e-03f, +5.881753541e-03f, +6.513827222e-04f, -2.722066660e-03f, -2.622870504e-04f, +7.339905580e-04f, +9.959864522e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.416746233e-05f, +1.316861113e-05f, +9.648584411e-05f, -5.540925410e-05f, -2.179789158e-04f, +1.408490179e-04f, +3.985064122e-04f, -2.880380885e-04f, -6.306021650e-04f, +5.081550995e-04f, +8.917723239e-04f, -7.995452478e-04f, -1.147054322e-03f, +1.143483410e-03f, +1.355875694e-03f, -1.504146369e-03f, -1.481543950e-03f, +1.833717525e-03f, +1.500596614e-03f, -2.081863637e-03f, -1.409073225e-03f, +2.207203543e-03f, +1.223659887e-03f, -2.187470241e-03f, -9.773066992e-04f, +2.025255326e-03f, +7.107257092e-04f, -1.747510474e-03f, -4.624709043e-04f, +1.398928609e-03f, +2.606156279e-04f, -1.031238692e-03f, -1.182993974e-04f, +6.916366713e-04f, +3.394731136e-05f, -4.136389188e-04f, +4.637995848e-06f, +2.126161649e-04f, -1.425040657e-05f, -8.658319699e-05f, +5.107193698e-06f, +2.084714333e-05f, +0.000000000e+00f, /* 8,12 (44) */ +0.000000000e+00f, -3.038944146e-04f, -7.100755228e-04f, +7.314307309e-04f, +1.856516824e-03f, -1.251960867e-03f, -3.919009279e-03f, +1.690574852e-03f, +7.273564073e-03f, -1.730632730e-03f, -1.237785232e-02f, +8.642439036e-04f, +1.987093217e-02f, +1.725358962e-03f, -3.090787165e-02f, -7.542354851e-03f, +4.832042667e-02f, +2.030526428e-02f, -8.195717992e-02f, -5.543713289e-02f, +2.005262598e-01f, +4.546618072e-01f, +4.112401315e-01f, +1.227681999e-01f, -8.507703122e-02f, -5.911652209e-02f, +3.885749643e-02f, +3.785521243e-02f, -1.999258231e-02f, -2.573508321e-02f, +1.016363758e-02f, +1.740258945e-02f, -4.721551456e-03f, -1.133225222e-02f, +1.798218722e-03f, +6.932912481e-03f, -3.907441495e-04f, -3.875814623e-03f, -1.381019197e-04f, +1.896028970e-03f, +2.162325615e-04f, -7.390977517e-04f, -1.204457886e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.403844844e-05f, -1.094354843e-05f, -6.608644198e-05f, +2.181258871e-05f, +1.430542885e-04f, -2.736098108e-05f, -2.696983397e-04f, +1.441246259e-05f, +4.632372998e-04f, +3.897633968e-05f, -7.452045187e-04f, -1.691254733e-04f, +1.148296197e-03f, +4.431707792e-04f, -1.737914652e-03f, -1.019722344e-03f, +2.687016826e-03f, +2.468235104e-03f, -4.620875869e-03f, -9.863699687e-03f, -4.355771999e-03f, +6.447766409e-03f, +9.495449409e-03f, +2.787333827e-03f, -3.184670576e-03f, -1.928524116e-03f, +1.567652161e-03f, +1.355686285e-03f, -8.342318778e-04f, -9.472556282e-04f, +4.391706653e-04f, +6.414905504e-04f, -2.175942485e-04f, -4.125775763e-04f, +9.699248076e-05f, +2.467237975e-04f, -3.681269562e-05f, -1.332391668e-04f, +1.123435021e-05f, +6.166298190e-05f, -3.310429977e-06f, -2.142767771e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.038944146e-04f, +7.100755228e-04f, -1.095434538e-03f, -2.580918558e-03f, +2.621480303e-03f, +5.350531292e-03f, -5.211242156e-03f, -9.241566711e-03f, +9.094789324e-03f, +1.401780783e-02f, -1.431007794e-02f, -1.917338496e-02f, +2.061344550e-02f, +2.400893786e-02f, -2.745003367e-02f, -2.777620049e-02f, +3.400938995e-02f, +2.985280254e-02f, -3.936588008e-02f, -2.989561778e-02f, +4.267401554e-02f, +2.792528431e-02f, -4.336642635e-02f, -2.431571937e-02f, +4.129624771e-02f, +1.969304298e-02f, -3.677961802e-02f, -1.477707477e-02f, +3.052373695e-02f, +1.021502299e-02f, -2.346122599e-02f, -6.455648525e-03f, +1.653981564e-02f, +3.694564383e-03f, -1.052775515e-02f, -1.895033950e-03f, +5.886391536e-03f, +8.639988871e-04f, -2.736317066e-03f, -3.488702474e-04f, +7.390977517e-04f, +1.204457886e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.403844844e-05f, +1.094354843e-05f, +9.638600554e-05f, -4.714274876e-05f, -2.197888415e-04f, +1.242826112e-04f, +4.047599059e-04f, -2.600441250e-04f, -6.448251093e-04f, +4.664693497e-04f, +9.180235657e-04f, -7.435767528e-04f, -1.189114717e-03f, +1.074844904e-03f, +1.416252865e-03f, -1.426694509e-03f, -1.560563756e-03f, +1.753027009e-03f, +1.595873504e-03f, -2.004234274e-03f, -1.515571199e-03f, +2.138452665e-03f, +1.334392726e-03f, -2.131837634e-03f, -1.084533190e-03f, +1.984715161e-03f, +8.073400673e-04f, -1.721655398e-03f, -5.432265444e-04f, +1.385412165e-03f, +3.228743345e-04f, -1.026597802e-03f, -1.621478363e-04f, +6.922222111e-04f, +6.171446108e-05f, -4.163863488e-04f, -1.073742985e-05f, +2.154787367e-04f, -7.210351542e-06f, -8.858557120e-05f, +3.310429977e-06f, +2.142767771e-05f, +0.000000000e+00f, /* 8,13 (44) */ +0.000000000e+00f, -2.798559662e-04f, -7.210190713e-04f, +6.653442889e-04f, +1.878329412e-03f, -1.108906579e-03f, -3.946370260e-03f, +1.420876512e-03f, +7.287976535e-03f, -1.267395430e-03f, -1.233887598e-02f, +1.190393849e-04f, +1.970180670e-02f, +2.873655160e-03f, -3.046470087e-02f, -9.280269503e-03f, +4.730070433e-02f, +2.299228111e-02f, -7.948894481e-02f, -6.005800876e-02f, +1.906625601e-01f, +4.503060352e-01f, +4.176878979e-01f, +1.322636493e-01f, -8.228969739e-02f, -6.230119267e-02f, +3.692897231e-02f, +3.942286459e-02f, -1.863689602e-02f, -2.656931509e-02f, +9.216381950e-03f, +1.784176012e-02f, -4.080060906e-03f, -1.154984647e-02f, +1.385641146e-03f, +7.029904962e-03f, -1.440203520e-04f, -3.912627319e-03f, -2.713410865e-04f, +1.907263320e-03f, +2.778955434e-04f, -7.424081816e-04f, -1.418734663e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.384271908e-05f, -8.756301760e-06f, -6.591807472e-05f, +1.681653613e-05f, +1.426069468e-04f, -1.766372628e-05f, -2.681343925e-04f, -2.528721062e-06f, +4.588189477e-04f, +6.643741972e-05f, -7.347018899e-04f, -2.112888089e-04f, +1.125813399e-03f, +5.055628209e-04f, -1.691831560e-03f, -1.110115020e-03f, +2.589013718e-03f, +2.594995548e-03f, -4.360746493e-03f, -9.845938909e-03f, -4.675861675e-03f, +6.172121094e-03f, +9.582060540e-03f, +3.048983182e-03f, -3.106958292e-03f, -2.045823112e-03f, +1.502035079e-03f, +1.418009831e-03f, -7.853652598e-04f, -9.817471263e-04f, +4.045334914e-04f, +6.603486128e-04f, -1.942679996e-04f, -4.224765426e-04f, +8.226239070e-05f, +2.516350224e-04f, -2.826832053e-05f, -1.355464329e-04f, +6.837520235e-06f, +6.273089843e-05f, -1.446273059e-06f, -2.196268072e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.798559662e-04f, +7.210190713e-04f, -9.990485321e-04f, -2.628061307e-03f, +2.401691461e-03f, +5.474813903e-03f, -4.806482250e-03f, -9.501610836e-03f, +8.449964215e-03f, +1.448427718e-02f, -1.339205437e-02f, -1.991696171e-02f, +1.942433079e-02f, +2.508378276e-02f, -2.603378081e-02f, -2.920289500e-02f, +3.244882620e-02f, +3.160582955e-02f, -3.777000657e-02f, -3.189985205e-02f, +4.115844435e-02f, +3.006373698e-02f, -4.203203363e-02f, -2.644755700e-02f, +4.021171452e-02f, +2.167775814e-02f, -3.597227795e-02f, -1.649873017e-02f, +2.998051041e-02f, +1.160043516e-02f, -2.313835166e-02f, -7.482246328e-03f, +1.637766780e-02f, +4.386786594e-03f, -1.046604069e-02f, -2.311420299e-03f, +5.875654107e-03f, +1.079477624e-03f, -2.743527418e-03f, -4.374558186e-04f, +7.424081816e-04f, +1.418734663e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.384271908e-05f, +8.756301760e-06f, +9.601313121e-05f, -3.896139322e-05f, -2.209674568e-04f, +1.077152281e-04f, +4.098447046e-04f, -2.318106980e-04f, -6.571864865e-04f, +4.240986292e-04f, +9.416368807e-04f, -6.862489085e-04f, -1.227789521e-03f, +1.003973129e-03f, +1.472655172e-03f, -1.346022477e-03f, -1.635293398e-03f, +1.668149396e-03f, +1.686889213e-03f, -1.921623528e-03f, -1.618185689e-03f, +2.064235287e-03f, +1.441904120e-03f, -2.070648629e-03f, -1.189367509e-03f, +1.938937307e-03f, +9.024190434e-04f, -1.691227717e-03f, -6.232033897e-04f, +1.368213823e-03f, +3.849233317e-04f, -1.019243517e-03f, -2.061355206e-04f, +6.910015121e-04f, +8.976910722e-05f, -4.180722284e-04f, -2.640300149e-05f, +2.178140521e-04f, +4.475248966e-08f, -9.038853164e-05f, +1.446273059e-06f, +2.196268072e-05f, +0.000000000e+00f, /* 8,14 (44) */ +0.000000000e+00f, -2.560132471e-04f, -7.297753730e-04f, +5.994262142e-04f, +1.895145949e-03f, -9.662996318e-04f, -3.964033987e-03f, +1.152742120e-03f, +7.285447814e-03f, -8.085764820e-04f, -1.227243856e-02f, -6.156625050e-04f, +1.949051789e-02f, +3.999468559e-03f, -2.995913805e-02f, -1.097210106e-02f, +4.619058931e-02f, +2.558129482e-02f, -7.689394926e-02f, -6.441875526e-02f, +1.808166212e-01f, +4.456301736e-01f, +4.238600190e-01f, +1.418457099e-01f, -7.924071421e-02f, -6.540815096e-02f, +3.488314920e-02f, +4.092489967e-02f, -1.721888619e-02f, -2.735468035e-02f, +8.234634824e-03f, +1.824629361e-02f, -3.419712293e-03f, -1.174411447e-02f, +9.631646030e-04f, +7.112167352e-03f, +1.076146704e-04f, -3.940895639e-03f, -4.068875194e-04f, +1.914100841e-03f, +3.406264418e-04f, -7.438544547e-04f, -1.638361470e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.358299974e-05f, -6.611880398e-06f, -6.558647250e-05f, +1.189502014e-05f, +1.418257581e-04f, -8.110407545e-06f, -2.659698591e-04f, -1.918305259e-05f, +4.534115778e-04f, +9.333640378e-05f, -7.226749513e-04f, -2.523817992e-04f, +1.101101830e-03f, +5.659476670e-04f, -1.642647427e-03f, -1.196666476e-03f, +2.487093602e-03f, +2.713718553e-03f, -4.099312916e-03f, -9.816310925e-03f, -4.989553031e-03f, +5.888100406e-03f, +9.657646552e-03f, +3.311418047e-03f, -3.020985374e-03f, -2.160614618e-03f, +1.432035250e-03f, +1.478033405e-03f, -7.340184918e-04f, -1.014475465e-03f, +3.684708245e-04f, +6.779540756e-04f, -1.701333783e-04f, -4.315432790e-04f, +6.708679320e-05f, +2.560345824e-04f, -1.948633533e-05f, -1.375695279e-04f, +2.317069827e-06f, +6.366312058e-05f, +4.818649841e-07f, -2.244888408e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.560132471e-04f, +7.297753730e-04f, -9.030354009e-04f, -2.667022700e-03f, +2.180724004e-03f, +5.582529131e-03f, -4.396637545e-03f, -9.733421534e-03f, +7.792777728e-03f, +1.490837581e-02f, -1.245041749e-02f, -2.060321062e-02f, +1.819654127e-02f, +2.608775589e-02f, -2.456112564e-02f, -3.054891748e-02f, +3.081353280e-02f, +3.327397895e-02f, -3.608311736e-02f, -3.382147558e-02f, +3.954025866e-02f, +3.212797226e-02f, -4.059012951e-02f, -2.851820563e-02f, +3.902234701e-02f, +2.361669545e-02f, -3.506985891e-02f, -1.818995788e-02f, +2.935730702e-02f, +1.296864898e-02f, -2.275342833e-02f, -8.501489845e-03f, +1.617153228e-02f, +5.077788106e-03f, -1.037627158e-02f, -2.729492528e-03f, +5.849251105e-03f, +1.297291676e-03f, -2.743482666e-03f, -5.278443502e-04f, +7.438544547e-04f, +1.638361470e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.358299974e-05f, +6.611880398e-06f, +9.537626022e-05f, -3.088640110e-05f, -2.215253523e-04f, +9.119188536e-05f, +4.137673286e-04f, -2.034163201e-04f, -6.676792871e-04f, +3.811620628e-04f, +9.625794128e-04f, -6.277233333e-04f, -1.263007155e-03f, +9.310670614e-04f, +1.524962044e-03f, -1.262354277e-03f, -1.705558856e-03f, +1.579315914e-03f, +1.773419819e-03f, -1.834249851e-03f, -1.716654862e-03f, +1.984738917e-03f, +1.545913065e-03f, -2.004047085e-03f, -1.291531559e-03f, +1.888016951e-03f, +9.957085918e-04f, -1.656276876e-03f, -7.021877095e-04f, +1.347346503e-03f, +4.465980006e-04f, -1.009164789e-03f, -2.501476454e-04f, +6.879521958e-04f, +1.180401565e-04f, -4.186729204e-04f, -4.232104223e-05f, +2.196033337e-04f, +7.499182172e-06f, -9.198031050e-05f, -4.818649841e-07f, +2.244888408e-05f, +0.000000000e+00f, /* 8,15 (44) */ +0.000000000e+00f, -2.324302474e-04f, -7.363872534e-04f, +5.338397417e-04f, +1.907040969e-03f, -8.244738737e-04f, -3.972144394e-03f, +8.867722608e-04f, +7.266264762e-03f, -3.551649042e-04f, -1.217910216e-02f, -1.338337456e-03f, +1.923813609e-02f, +5.100570388e-03f, -2.939319038e-02f, -1.261474849e-02f, +4.499392283e-02f, +2.806838843e-02f, -7.418023071e-02f, -6.851806817e-02f, +1.710003103e-01f, +4.406406205e-01f, +4.297481194e-01f, +1.515033564e-01f, -7.592929617e-02f, -6.842913633e-02f, +3.272253458e-02f, +4.235693492e-02f, -1.574085279e-02f, -2.808869884e-02f, +7.220159360e-03f, +1.861476443e-02f, -2.741758217e-03f, -1.191424785e-02f, +5.316213240e-04f, +7.179254146e-03f, +3.636492528e-04f, -3.960381975e-03f, -5.444570472e-04f, +1.916417910e-03f, +4.042895624e-04f, -7.433725897e-04f, -1.862850311e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.326213574e-05f, -4.515043563e-06f, -6.509656988e-05f, +7.058791348e-06f, +1.407194469e-04f, +1.278624870e-06f, -2.632203577e-04f, -3.551605358e-05f, +4.470430736e-04f, +1.196194356e-04f, -7.091729436e-04f, -2.923257993e-04f, +1.074247776e-03f, +6.242181808e-04f, -1.590514587e-03f, -1.279247763e-03f, +2.381533322e-03f, +2.824328624e-03f, -3.836999584e-03f, -9.774949114e-03f, -5.296426649e-03f, +5.596074459e-03f, +9.722004727e-03f, +3.574228409e-03f, -2.926765753e-03f, -2.272612832e-03f, +1.357740153e-03f, +1.535589709e-03f, -6.802733621e-04f, -1.045341195e-03f, +3.310458549e-04f, +6.942478174e-04f, -1.452348731e-04f, -4.397431547e-04f, +5.149456241e-05f, +2.599026502e-04f, -1.048379485e-05f, -1.392973795e-04f, -2.318150385e-06f, +6.445360941e-05f, +2.470292752e-06f, -2.288308057e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.324302474e-04f, +7.363872534e-04f, -8.076591407e-04f, -2.697909101e-03f, +1.959198652e-03f, +5.673721017e-03f, -3.982870217e-03f, -9.936837854e-03f, +7.125098441e-03f, +1.528953787e-02f, -1.148783808e-02f, -2.123093395e-02f, +1.693353411e-02f, +2.701882295e-02f, -2.303616359e-02f, -3.181127175e-02f, +2.910797394e-02f, +3.485329486e-02f, -3.430969754e-02f, -3.565572543e-02f, +3.782360379e-02f, +3.411271118e-02f, -3.904421644e-02f, -3.052225271e-02f, +3.773081546e-02f, +2.550471240e-02f, -3.407415032e-02f, -1.984623476e-02f, +2.865511931e-02f, +1.431599548e-02f, -2.230683033e-02f, -9.510654634e-03f, +1.592138463e-02f, +5.765740302e-03f, -1.025823142e-02f, -3.148165448e-03f, +5.806930063e-03f, +1.516895010e-03f, -2.735983483e-03f, -6.198246607e-04f, +7.433725897e-04f, +1.862850311e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.326213574e-05f, +4.515043563e-06f, +9.448499971e-05f, -2.293816556e-05f, -2.214746593e-04f, +7.475662740e-05f, +4.165373671e-04f, -1.749387546e-04f, -6.763015984e-04f, +3.377788445e-04f, +9.808257139e-04f, -5.681632653e-04f, -1.294705690e-03f, +8.563295593e-04f, +1.573064329e-03f, -1.175920565e-03f, -1.771198429e-03f, +1.486767326e-03f, +1.855253545e-03f, -1.742343765e-03f, -1.810727743e-03f, +1.900164870e-03f, +1.646147245e-03f, -1.932191282e-03f, -1.390753267e-03f, +1.832063116e-03f, +1.086957999e-03f, -1.616864506e-03f, -7.799668001e-04f, +1.322832937e-03f, +5.077331119e-04f, -9.963577334e-04f, -2.940679154e-04f, +6.830565413e-04f, +1.464548128e-04f, -4.181674015e-04f, -5.845241879e-05f, +2.208289832e-04f, +1.513621662e-05f, -9.334948024e-05f, -2.470292752e-06f, +2.288308057e-05f, +0.000000000e+00f, /* 8,16 (44) */ +0.000000000e+00f, -2.091681116e-04f, -7.409022970e-04f, +4.687431718e-04f, +1.914099760e-03f, -6.837544268e-04f, -3.970865769e-03f, +6.235519031e-04f, +7.230748708e-03f, +9.187816936e-05f, -1.205948272e-02f, -2.047510400e-03f, +1.894581029e-02f, +6.174818164e-03f, -2.876897220e-02f, -1.420526308e-02f, +4.371467507e-02f, +3.044992175e-02f, -7.135590209e-02f, -7.235506776e-02f, +1.612253611e-01f, +4.353441939e-01f, +4.353441939e-01f, +1.612253611e-01f, -7.235506776e-02f, -7.135590209e-02f, +3.044992175e-02f, +4.371467507e-02f, -1.420526308e-02f, -2.876897220e-02f, +6.174818164e-03f, +1.894581029e-02f, -2.047510400e-03f, -1.205948272e-02f, +9.187816936e-05f, +7.230748708e-03f, +6.235519031e-04f, -3.970865769e-03f, -6.837544268e-04f, +1.914099760e-03f, +4.687431718e-04f, -7.409022970e-04f, -2.091681116e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.288308057e-05f, -2.470292752e-06f, -6.445360941e-05f, +2.318150385e-06f, +1.392973795e-04f, +1.048379485e-05f, -2.599026502e-04f, -5.149456241e-05f, +4.397431547e-04f, +1.452348731e-04f, -6.942478174e-04f, -3.310458549e-04f, +1.045341195e-03f, +6.802733621e-04f, -1.535589709e-03f, -1.357740153e-03f, +2.272612832e-03f, +2.926765753e-03f, -3.574228409e-03f, -9.722004727e-03f, -5.596074459e-03f, +5.296426649e-03f, +9.774949114e-03f, +3.836999584e-03f, -2.824328624e-03f, -2.381533322e-03f, +1.279247763e-03f, +1.590514587e-03f, -6.242181808e-04f, -1.074247776e-03f, +2.923257993e-04f, +7.091729436e-04f, -1.196194356e-04f, -4.470430736e-04f, +3.551605358e-05f, +2.632203577e-04f, -1.278624870e-06f, -1.407194469e-04f, -7.058791348e-06f, +6.509656988e-05f, +4.515043563e-06f, -2.326213574e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.091681116e-04f, +7.409022970e-04f, -7.131741410e-04f, -2.720847267e-03f, +1.737723993e-03f, +5.748477644e-03f, -3.566332849e-03f, -1.011177661e-02f, +6.448796843e-03f, +1.562731672e-02f, -1.050701237e-02f, -2.179909722e-02f, +1.563882842e-02f, +2.787515251e-02f, -2.146309926e-02f, -3.298719232e-02f, +2.733677551e-02f, +3.634006219e-02f, -3.245444399e-02f, -3.739806920e-02f, +3.601287605e-02f, +3.601287605e-02f, -3.739806920e-02f, -3.245444399e-02f, +3.634006219e-02f, +2.733677551e-02f, -3.298719232e-02f, -2.146309926e-02f, +2.787515251e-02f, +1.563882842e-02f, -2.179909722e-02f, -1.050701237e-02f, +1.562731672e-02f, +6.448796843e-03f, -1.011177661e-02f, -3.566332849e-03f, +5.748477644e-03f, +1.737723993e-03f, -2.720847267e-03f, -7.131741410e-04f, +7.409022970e-04f, +2.091681116e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.288308057e-05f, +2.470292752e-06f, +9.334948024e-05f, -1.513621662e-05f, -2.208289832e-04f, +5.845241879e-05f, +4.181674015e-04f, -1.464548128e-04f, -6.830565413e-04f, +2.940679154e-04f, +9.963577334e-04f, -5.077331119e-04f, -1.322832937e-03f, +7.799668001e-04f, +1.616864506e-03f, -1.086957999e-03f, -1.832063116e-03f, +1.390753267e-03f, +1.932191282e-03f, -1.646147245e-03f, -1.900164870e-03f, +1.810727743e-03f, +1.742343765e-03f, -1.855253545e-03f, -1.486767326e-03f, +1.771198429e-03f, +1.175920565e-03f, -1.573064329e-03f, -8.563295593e-04f, +1.294705690e-03f, +5.681632653e-04f, -9.808257139e-04f, -3.377788445e-04f, +6.763015984e-04f, +1.749387546e-04f, -4.165373671e-04f, -7.475662740e-05f, +2.214746593e-04f, +2.293816556e-05f, -9.448499971e-05f, -4.515043563e-06f, +2.326213574e-05f, +0.000000000e+00f, /* 8,17 (44) */ +0.000000000e+00f, -1.862850311e-04f, -7.433725897e-04f, +4.042895624e-04f, +1.916417910e-03f, -5.444570472e-04f, -3.960381975e-03f, +3.636492528e-04f, +7.179254146e-03f, +5.316213240e-04f, -1.191424785e-02f, -2.741758217e-03f, +1.861476443e-02f, +7.220159360e-03f, -2.808869884e-02f, -1.574085279e-02f, +4.235693492e-02f, +3.272253458e-02f, -6.842913633e-02f, -7.592929617e-02f, +1.515033564e-01f, +4.297481194e-01f, +4.406406205e-01f, +1.710003103e-01f, -6.851806817e-02f, -7.418023071e-02f, +2.806838843e-02f, +4.499392283e-02f, -1.261474849e-02f, -2.939319038e-02f, +5.100570388e-03f, +1.923813609e-02f, -1.338337456e-03f, -1.217910216e-02f, -3.551649042e-04f, +7.266264762e-03f, +8.867722608e-04f, -3.972144394e-03f, -8.244738737e-04f, +1.907040969e-03f, +5.338397417e-04f, -7.363872534e-04f, -2.324302474e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.244888408e-05f, -4.818649841e-07f, -6.366312058e-05f, -2.317069827e-06f, +1.375695279e-04f, +1.948633533e-05f, -2.560345824e-04f, -6.708679320e-05f, +4.315432790e-04f, +1.701333783e-04f, -6.779540756e-04f, -3.684708245e-04f, +1.014475465e-03f, +7.340184918e-04f, -1.478033405e-03f, -1.432035250e-03f, +2.160614618e-03f, +3.020985374e-03f, -3.311418047e-03f, -9.657646552e-03f, -5.888100406e-03f, +4.989553031e-03f, +9.816310925e-03f, +4.099312916e-03f, -2.713718553e-03f, -2.487093602e-03f, +1.196666476e-03f, +1.642647427e-03f, -5.659476670e-04f, -1.101101830e-03f, +2.523817992e-04f, +7.226749513e-04f, -9.333640378e-05f, -4.534115778e-04f, +1.918305259e-05f, +2.659698591e-04f, +8.110407545e-06f, -1.418257581e-04f, -1.189502014e-05f, +6.558647250e-05f, +6.611880398e-06f, -2.358299974e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.862850311e-04f, +7.433725897e-04f, -6.198246607e-04f, -2.735983483e-03f, +1.516895010e-03f, +5.806930063e-03f, -3.148165448e-03f, -1.025823142e-02f, +5.765740302e-03f, +1.592138463e-02f, -9.510654634e-03f, -2.230683033e-02f, +1.431599548e-02f, +2.865511931e-02f, -1.984623476e-02f, -3.407415032e-02f, +2.550471240e-02f, +3.773081546e-02f, -3.052225271e-02f, -3.904421644e-02f, +3.411271118e-02f, +3.782360379e-02f, -3.565572543e-02f, -3.430969754e-02f, +3.485329486e-02f, +2.910797394e-02f, -3.181127175e-02f, -2.303616359e-02f, +2.701882295e-02f, +1.693353411e-02f, -2.123093395e-02f, -1.148783808e-02f, +1.528953787e-02f, +7.125098441e-03f, -9.936837854e-03f, -3.982870217e-03f, +5.673721017e-03f, +1.959198652e-03f, -2.697909101e-03f, -8.076591407e-04f, +7.363872534e-04f, +2.324302474e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.244888408e-05f, +4.818649841e-07f, +9.198031050e-05f, -7.499182172e-06f, -2.196033337e-04f, +4.232104223e-05f, +4.186729204e-04f, -1.180401565e-04f, -6.879521958e-04f, +2.501476454e-04f, +1.009164789e-03f, -4.465980006e-04f, -1.347346503e-03f, +7.021877095e-04f, +1.656276876e-03f, -9.957085918e-04f, -1.888016951e-03f, +1.291531559e-03f, +2.004047085e-03f, -1.545913065e-03f, -1.984738917e-03f, +1.716654862e-03f, +1.834249851e-03f, -1.773419819e-03f, -1.579315914e-03f, +1.705558856e-03f, +1.262354277e-03f, -1.524962044e-03f, -9.310670614e-04f, +1.263007155e-03f, +6.277233333e-04f, -9.625794128e-04f, -3.811620628e-04f, +6.676792871e-04f, +2.034163201e-04f, -4.137673286e-04f, -9.119188536e-05f, +2.215253523e-04f, +3.088640110e-05f, -9.537626022e-05f, -6.611880398e-06f, +2.358299974e-05f, +0.000000000e+00f, /* 8,18 (44) */ +0.000000000e+00f, -1.638361470e-04f, -7.438544547e-04f, +3.406264418e-04f, +1.914100841e-03f, -4.068875194e-04f, -3.940895639e-03f, +1.076146704e-04f, +7.112167352e-03f, +9.631646030e-04f, -1.174411447e-02f, -3.419712293e-03f, +1.824629361e-02f, +8.234634824e-03f, -2.735468035e-02f, -1.721888619e-02f, +4.092489967e-02f, +3.488314920e-02f, -6.540815096e-02f, -7.924071421e-02f, +1.418457099e-01f, +4.238600190e-01f, +4.456301736e-01f, +1.808166212e-01f, -6.441875526e-02f, -7.689394926e-02f, +2.558129482e-02f, +4.619058931e-02f, -1.097210106e-02f, -2.995913805e-02f, +3.999468559e-03f, +1.949051789e-02f, -6.156625050e-04f, -1.227243856e-02f, -8.085764820e-04f, +7.285447814e-03f, +1.152742120e-03f, -3.964033987e-03f, -9.662996318e-04f, +1.895145949e-03f, +5.994262142e-04f, -7.297753730e-04f, -2.560132471e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.196268072e-05f, +1.446273059e-06f, -6.273089843e-05f, -6.837520235e-06f, +1.355464329e-04f, +2.826832053e-05f, -2.516350224e-04f, -8.226239070e-05f, +4.224765426e-04f, +1.942679996e-04f, -6.603486128e-04f, -4.045334914e-04f, +9.817471263e-04f, +7.853652598e-04f, -1.418009831e-03f, -1.502035079e-03f, +2.045823112e-03f, +3.106958292e-03f, -3.048983182e-03f, -9.582060540e-03f, -6.172121094e-03f, +4.675861675e-03f, +9.845938909e-03f, +4.360746493e-03f, -2.594995548e-03f, -2.589013718e-03f, +1.110115020e-03f, +1.691831560e-03f, -5.055628209e-04f, -1.125813399e-03f, +2.112888089e-04f, +7.347018899e-04f, -6.643741972e-05f, -4.588189477e-04f, +2.528721062e-06f, +2.681343925e-04f, +1.766372628e-05f, -1.426069468e-04f, -1.681653613e-05f, +6.591807472e-05f, +8.756301760e-06f, -2.384271908e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.638361470e-04f, +7.438544547e-04f, -5.278443502e-04f, -2.743482666e-03f, +1.297291676e-03f, +5.849251105e-03f, -2.729492528e-03f, -1.037627158e-02f, +5.077788106e-03f, +1.617153228e-02f, -8.501489845e-03f, -2.275342833e-02f, +1.296864898e-02f, +2.935730702e-02f, -1.818995788e-02f, -3.506985891e-02f, +2.361669545e-02f, +3.902234701e-02f, -2.851820563e-02f, -4.059012951e-02f, +3.212797226e-02f, +3.954025866e-02f, -3.382147558e-02f, -3.608311736e-02f, +3.327397895e-02f, +3.081353280e-02f, -3.054891748e-02f, -2.456112564e-02f, +2.608775589e-02f, +1.819654127e-02f, -2.060321062e-02f, -1.245041749e-02f, +1.490837581e-02f, +7.792777728e-03f, -9.733421534e-03f, -4.396637545e-03f, +5.582529131e-03f, +2.180724004e-03f, -2.667022700e-03f, -9.030354009e-04f, +7.297753730e-04f, +2.560132471e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.196268072e-05f, -1.446273059e-06f, +9.038853164e-05f, -4.475248966e-08f, -2.178140521e-04f, +2.640300149e-05f, +4.180722284e-04f, -8.976910722e-05f, -6.910015121e-04f, +2.061355206e-04f, +1.019243517e-03f, -3.849233317e-04f, -1.368213823e-03f, +6.232033897e-04f, +1.691227717e-03f, -9.024190434e-04f, -1.938937307e-03f, +1.189367509e-03f, +2.070648629e-03f, -1.441904120e-03f, -2.064235287e-03f, +1.618185689e-03f, +1.921623528e-03f, -1.686889213e-03f, -1.668149396e-03f, +1.635293398e-03f, +1.346022477e-03f, -1.472655172e-03f, -1.003973129e-03f, +1.227789521e-03f, +6.862489085e-04f, -9.416368807e-04f, -4.240986292e-04f, +6.571864865e-04f, +2.318106980e-04f, -4.098447046e-04f, -1.077152281e-04f, +2.209674568e-04f, +3.896139322e-05f, -9.601313121e-05f, -8.756301760e-06f, +2.384271908e-05f, +0.000000000e+00f, /* 8,19 (44) */ +0.000000000e+00f, -1.418734663e-04f, -7.424081816e-04f, +2.778955434e-04f, +1.907263320e-03f, -2.713410865e-04f, -3.912627319e-03f, -1.440203520e-04f, +7.029904962e-03f, +1.385641146e-03f, -1.154984647e-02f, -4.080060906e-03f, +1.784176012e-02f, +9.216381950e-03f, -2.656931509e-02f, -1.863689602e-02f, +3.942286459e-02f, +3.692897231e-02f, -6.230119267e-02f, -8.228969739e-02f, +1.322636493e-01f, +4.176878979e-01f, +4.503060352e-01f, +1.906625601e-01f, -6.005800876e-02f, -7.948894481e-02f, +2.299228111e-02f, +4.730070433e-02f, -9.280269503e-03f, -3.046470087e-02f, +2.873655160e-03f, +1.970180670e-02f, +1.190393849e-04f, -1.233887598e-02f, -1.267395430e-03f, +7.287976535e-03f, +1.420876512e-03f, -3.946370260e-03f, -1.108906579e-03f, +1.878329412e-03f, +6.653442889e-04f, -7.210190713e-04f, -2.798559662e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.142767771e-05f, +3.310429977e-06f, -6.166298190e-05f, -1.123435021e-05f, +1.332391668e-04f, +3.681269562e-05f, -2.467237975e-04f, -9.699248076e-05f, +4.125775763e-04f, +2.175942485e-04f, -6.414905504e-04f, -4.391706653e-04f, +9.472556282e-04f, +8.342318778e-04f, -1.355686285e-03f, -1.567652161e-03f, +1.928524116e-03f, +3.184670576e-03f, -2.787333827e-03f, -9.495449409e-03f, -6.447766409e-03f, +4.355771999e-03f, +9.863699687e-03f, +4.620875869e-03f, -2.468235104e-03f, -2.687016826e-03f, +1.019722344e-03f, +1.737914652e-03f, -4.431707792e-04f, -1.148296197e-03f, +1.691254733e-04f, +7.452045187e-04f, -3.897633968e-05f, -4.632372998e-04f, -1.441246259e-05f, +2.696983397e-04f, +2.736098108e-05f, -1.430542885e-04f, -2.181258871e-05f, +6.608644198e-05f, +1.094354843e-05f, -2.403844844e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.418734663e-04f, +7.424081816e-04f, -4.374558186e-04f, -2.743527418e-03f, +1.079477624e-03f, +5.875654107e-03f, -2.311420299e-03f, -1.046604069e-02f, +4.386786594e-03f, +1.637766780e-02f, -7.482246328e-03f, -2.313835166e-02f, +1.160043516e-02f, +2.998051041e-02f, -1.649873017e-02f, -3.597227795e-02f, +2.167775814e-02f, +4.021171452e-02f, -2.644755700e-02f, -4.203203363e-02f, +3.006373698e-02f, +4.115844435e-02f, -3.189985205e-02f, -3.777000657e-02f, +3.160582955e-02f, +3.244882620e-02f, -2.920289500e-02f, -2.603378081e-02f, +2.508378276e-02f, +1.942433079e-02f, -1.991696171e-02f, -1.339205437e-02f, +1.448427718e-02f, +8.449964215e-03f, -9.501610836e-03f, -4.806482250e-03f, +5.474813903e-03f, +2.401691461e-03f, -2.628061307e-03f, -9.990485321e-04f, +7.210190713e-04f, +2.798559662e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.142767771e-05f, -3.310429977e-06f, +8.858557120e-05f, +7.210351542e-06f, -2.154787367e-04f, +1.073742985e-05f, +4.163863488e-04f, -6.171446108e-05f, -6.922222111e-04f, +1.621478363e-04f, +1.026597802e-03f, -3.228743345e-04f, -1.385412165e-03f, +5.432265444e-04f, +1.721655398e-03f, -8.073400673e-04f, -1.984715161e-03f, +1.084533190e-03f, +2.131837634e-03f, -1.334392726e-03f, -2.138452665e-03f, +1.515571199e-03f, +2.004234274e-03f, -1.595873504e-03f, -1.753027009e-03f, +1.560563756e-03f, +1.426694509e-03f, -1.416252865e-03f, -1.074844904e-03f, +1.189114717e-03f, +7.435767528e-04f, -9.180235657e-04f, -4.664693497e-04f, +6.448251093e-04f, +2.600441250e-04f, -4.047599059e-04f, -1.242826112e-04f, +2.197888415e-04f, +4.714274876e-05f, -9.638600554e-05f, -1.094354843e-05f, +2.403844844e-05f, +0.000000000e+00f, /* 8,20 (44) */ +0.000000000e+00f, -1.204457886e-04f, -7.390977517e-04f, +2.162325615e-04f, +1.896028970e-03f, -1.381019197e-04f, -3.875814623e-03f, -3.907441495e-04f, +6.932912481e-03f, +1.798218722e-03f, -1.133225222e-02f, -4.721551456e-03f, +1.740258945e-02f, +1.016363758e-02f, -2.573508321e-02f, -1.999258231e-02f, +3.785521243e-02f, +3.885749643e-02f, -5.911652209e-02f, -8.507703122e-02f, +1.227681999e-01f, +4.112401315e-01f, +4.546618072e-01f, +2.005262598e-01f, -5.543713289e-02f, -8.195717992e-02f, +2.030526428e-02f, +4.832042667e-02f, -7.542354851e-03f, -3.090787165e-02f, +1.725358962e-03f, +1.987093217e-02f, +8.642439036e-04f, -1.237785232e-02f, -1.730632730e-03f, +7.273564073e-03f, +1.690574852e-03f, -3.919009279e-03f, -1.251960867e-03f, +1.856516824e-03f, +7.314307309e-04f, -7.100755228e-04f, -3.038944146e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.084714333e-05f, +5.107193698e-06f, -6.046563196e-05f, -1.549922050e-05f, +1.306592947e-04f, +4.510330362e-05f, -2.413216300e-04f, -1.112497165e-04f, +4.018824413e-04f, +2.400701682e-04f, -6.214410693e-04f, -4.723232733e-04f, +9.111030623e-04f, +8.805431766e-04f, -1.291232807e-03f, -1.628809553e-03f, +1.809004221e-03f, +3.254123434e-03f, -2.526874633e-03f, -9.398032212e-03f, -6.714680117e-03f, +4.029714077e-03f, +9.869478069e-03f, +4.879274799e-03f, -2.333528214e-03f, -2.780829778e-03f, +9.256274826e-04f, +1.780749095e-03f, -3.788846557e-04f, -1.168467854e-03f, +1.259739956e-04f, +7.541364601e-04f, -1.100913829e-05f, -4.666406816e-04f, -3.160476641e-05f, +2.706472842e-04f, +3.718108509e-05f, -1.431597354e-04f, -2.687199657e-05f, +6.608696828e-05f, +1.316861113e-05f, -2.416746233e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.204457886e-04f, +7.390977517e-04f, -3.488702474e-04f, -2.736317066e-03f, +8.639988871e-04f, +5.886391536e-03f, -1.895033950e-03f, -1.052775515e-02f, +3.694564383e-03f, +1.653981564e-02f, -6.455648525e-03f, -2.346122599e-02f, +1.021502299e-02f, +3.052373695e-02f, -1.477707477e-02f, -3.677961802e-02f, +1.969304298e-02f, +4.129624771e-02f, -2.431571937e-02f, -4.336642635e-02f, +2.792528431e-02f, +4.267401554e-02f, -2.989561778e-02f, -3.936588008e-02f, +2.985280254e-02f, +3.400938995e-02f, -2.777620049e-02f, -2.745003367e-02f, +2.400893786e-02f, +2.061344550e-02f, -1.917338496e-02f, -1.431007794e-02f, +1.401780783e-02f, +9.094789324e-03f, -9.241566711e-03f, -5.211242156e-03f, +5.350531292e-03f, +2.621480303e-03f, -2.580918558e-03f, -1.095434538e-03f, +7.100755228e-04f, +3.038944146e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.084714333e-05f, -5.107193698e-06f, +8.658319699e-05f, +1.425040657e-05f, -2.126161649e-04f, -4.637995848e-06f, +4.136389188e-04f, -3.394731136e-05f, -6.916366713e-04f, +1.182993974e-04f, +1.031238692e-03f, -2.606156279e-04f, -1.398928609e-03f, +4.624709043e-04f, +1.747510474e-03f, -7.107257092e-04f, -2.025255326e-03f, +9.773066992e-04f, +2.187470241e-03f, -1.223659887e-03f, -2.207203543e-03f, +1.409073225e-03f, +2.081863637e-03f, -1.500596614e-03f, -1.833717525e-03f, +1.481543950e-03f, +1.504146369e-03f, -1.355875694e-03f, -1.143483410e-03f, +1.147054322e-03f, +7.995452478e-04f, -8.917723239e-04f, -5.081550995e-04f, +6.306021650e-04f, +2.880380885e-04f, -3.985064122e-04f, -1.408490179e-04f, +2.179789158e-04f, +5.540925410e-05f, -9.648584411e-05f, -1.316861113e-05f, +2.416746233e-05f, +0.000000000e+00f, /* 8,21 (44) */ +0.000000000e+00f, -9.959864522e-05f, -7.339905580e-04f, +1.557669295e-04f, +1.880529750e-03f, -7.442625010e-06f, -3.830711319e-03f, -6.320657796e-04f, +6.821662764e-03f, +2.200101163e-03f, -1.109218205e-02f, -5.342992525e-03f, +1.693026618e-02f, +1.107474064e-02f, -2.485454003e-02f, -2.128381512e-02f, +3.622640287e-02f, +4.066650065e-02f, -5.586239866e-02f, -8.760390585e-02f, +1.133701677e-01f, +4.045254514e-01f, +4.586915213e-01f, +2.103957378e-01f, -5.055785810e-02f, -8.429070813e-02f, +1.752443450e-02f, +4.924605415e-02f, -5.761605756e-03f, -3.128675631e-02f, +5.568911090e-04f, +1.999690617e-02f, +1.618380364e-03f, -1.238886146e-02f, -2.197273411e-03f, +7.241959306e-03f, +1.961222136e-03f, -3.881828194e-03f, -1.395120602e-03f, +1.829644827e-03f, +7.975176992e-04f, -6.969069117e-04f, -3.280618770e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.022439527e-05f, +6.833434631e-06f, -5.914530952e-05f, -1.962431458e-05f, +1.278188358e-04f, +5.312490959e-05f, -2.354500713e-04f, -1.250083200e-04f, +3.904285214e-04f, +2.616563963e-04f, -6.002632396e-04f, -5.039364399e-04f, +8.733938990e-04f, +9.242306866e-04f, -1.224821774e-03f, -1.685440871e-03f, +1.687550236e-03f, +3.315333055e-03f, -2.268004217e-03f, -9.290043881e-03f, -6.972520433e-03f, +3.698127934e-03f, +9.863177323e-03f, +5.135515976e-03f, -2.190981361e-03f, -2.870183705e-03f, +8.279793927e-04f, +1.820192390e-03f, -3.128233666e-04f, -1.186250152e-03f, +8.191999454e-05f, +7.614543474e-04f, +1.740619401e-05f, -4.690051627e-04f, -4.901127214e-05f, +2.709680669e-04f, +4.710225478e-05f, -1.429159500e-04f, -3.198316856e-05f, +6.591539633e-05f, +1.542623912e-05f, -2.422716675e-05f, +0.000000000e+00f, +0.000000000e+00f, +9.959864522e-05f, +7.339905580e-04f, -2.622870504e-04f, -2.722066660e-03f, +6.513827222e-04f, +5.881753541e-03f, -1.481395032e-03f, -1.056170246e-02f, +3.002927711e-03f, +1.665811503e-02f, -5.424409833e-03f, -2.372184162e-02f, +8.816094385e-03f, +3.098620786e-02f, -1.302956429e-02f, -3.749034373e-02f, +1.766778765e-02f, +4.227355441e-02f, -2.212824912e-02f, -4.459008624e-02f, +2.571808077e-02f, +4.408308877e-02f, -2.781375414e-02f, -4.086647669e-02f, +2.801908502e-02f, +3.549093390e-02f, -2.627205412e-02f, -2.880590937e-02f, +2.286545445e-02f, +2.176049983e-02f, -1.837383971e-02f, -1.520185026e-02f, +1.350965273e-02f, +9.725391489e-03f, -8.953528623e-03f, -5.609748568e-03f, +5.209682274e-03f, +2.839459219e-03f, -2.525509304e-03f, -1.191920382e-03f, +6.969069117e-04f, +3.280618770e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.022439527e-05f, -6.833434631e-06f, +8.439347096e-05f, +2.106071123e-05f, -2.092462143e-04f, -1.968713542e-05f, +4.098560803e-04f, -6.536878019e-06f, -6.892718057e-04f, +7.470322627e-05f, +1.033184287e-03f, -1.983107871e-04f, -1.408759996e-03f, +3.811506542e-04f, +1.768755735e-03f, -6.128326608e-04f, -2.060476642e-03f, +8.679714118e-04f, +2.237417363e-03f, -1.109994551e-03f, -2.270314702e-03f, +1.298963777e-03f, +2.154305823e-03f, -1.401294039e-03f, -1.909999891e-03f, +1.398419915e-03f, +1.578161324e-03f, -1.291655395e-03f, -1.209694110e-03f, +1.101689457e-03f, +8.539948454e-04f, -8.629234091e-04f, -5.490371495e-04f, +6.145298076e-04f, +3.157135344e-04f, -3.910808416e-04f, -1.573685710e-04f, +2.155286933e-04f, +6.373892123e-05f, -9.630421979e-05f, -1.542623912e-05f, +2.422716675e-05f, +0.000000000e+00f, /* 8,22 (44) */ +0.000000000e+00f, -7.937424996e-05f, -7.271571233e-04f, +9.662161999e-05f, +1.860905435e-03f, +1.203762108e-04f, -3.777586410e-03f, -8.675158509e-04f, +6.696654445e-03f, +2.590529685e-03f, -1.083052566e-02f, -5.943255765e-03f, +1.642632974e-02f, +1.194813454e-02f, -2.393030935e-02f, -2.250863689e-02f, +3.454096200e-02f, +4.235405088e-02f, -5.254706560e-02f, -8.987191007e-02f, +1.040801238e-01f, +3.975529310e-01f, +4.623896493e-01f, +2.202589152e-01f, -4.542234212e-02f, -8.648168949e-02f, +1.465425080e-02f, +5.007403355e-02f, -3.941413366e-03f, -3.159957967e-02f, -6.293590427e-04f, +2.007882616e-02f, +2.379834711e-03f, -1.237145527e-02f, -2.666278574e-03f, +7.192948034e-03f, +2.232190203e-03f, -3.834725940e-03f, -1.538036552e-03f, +1.797661659e-03f, +8.634330955e-04f, -6.814806726e-04f, -3.522890437e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.956278904e-05f, +8.486307925e-06f, -5.770865334e-05f, -2.360234839e-05f, +1.247302240e-04f, +6.086322209e-05f, -2.291314354e-04f, -1.382441196e-04f, +3.782544149e-04f, +2.823162196e-04f, -5.780218488e-04f, -5.339595571e-04f, +8.342347209e-04f, +9.652327035e-04f, -1.156627495e-03f, -1.737490298e-03f, +1.564448624e-03f, +3.368330420e-03f, -2.011114502e-03f, -9.171734749e-03f, -7.220960571e-03f, +3.361462821e-03f, +9.844719429e-03f, +5.389171783e-03f, -2.040716467e-03f, -2.954814590e-03f, +7.269367777e-04f, +1.856107526e-03f, -2.451114403e-04f, -1.201569264e-03f, +3.705235275e-05f, +7.671179684e-04f, +4.620975957e-05f, -4.703089230e-04f, -6.659394642e-05f, +2.706488403e-04f, +5.710205251e-05f, -1.423163382e-04f, -3.713412602e-05f, +6.556783713e-05f, +1.771094961e-05f, -2.421511060e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.937424996e-05f, +7.271571233e-04f, -1.778935794e-04f, -2.701005949e-03f, +4.421365079e-04f, +5.862066405e-03f, -1.071538951e-03f, -1.056823934e-02f, +2.313655906e-03f, +1.673281826e-02f, -4.391225546e-03f, -2.392015241e-02f, +7.407334389e-03f, +3.136735851e-02f, -1.126080856e-02f, -3.810317639e-02f, +1.560731101e-02f, +4.314152582e-02f, -1.989083176e-02f, -4.570008079e-02f, +2.344776607e-02f, +4.538205255e-02f, -2.565944832e-02f, -4.226777073e-02f, +2.610908513e-02f, +3.688935382e-02f, -2.469389280e-02f, -3.009756476e-02f, +2.165576034e-02f, +2.286218928e-02f, -1.751984486e-02f, -1.606477367e-02f, +1.296061558e-02f, +1.033992130e-02f, -8.637815088e-03f, -6.000829409e-03f, +5.052313703e-03f, +3.054987912e-03f, -2.461770383e-03f, -1.288224602e-03f, +6.814806726e-04f, +3.522890437e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.956278904e-05f, -8.486307925e-06f, +8.202870318e-05f, +2.762760690e-05f, -2.053897813e-04f, -3.437545963e-05f, +4.050663648e-04f, +2.044965488e-05f, -6.851589268e-04f, +3.147027837e-05f, +1.032459620e-03f, -1.361219172e-04f, -1.414912861e-03f, +2.994798621e-04f, +1.785366232e-03f, -5.139195696e-04f, -2.090312125e-03f, +7.568152173e-04f, +2.281564981e-03f, -9.936928337e-04f, -2.327627661e-03f, +1.185524330e-03f, +2.221368260e-03f, -1.298212264e-03f, -1.981663839e-03f, +1.311389056e-03f, +1.648530526e-03f, -1.223734587e-03f, -1.273287459e-03f, +1.053110646e-03f, +9.067685159e-04f, -8.315244415e-04f, -5.889974946e-04f, +5.966253717e-04f, +3.429910801e-04f, -3.824830127e-04f, -1.737946493e-04f, +2.124308514e-04f, +7.210903727e-05f, -9.583336027e-05f, -1.771094961e-05f, +2.421511060e-05f, +0.000000000e+00f, /* 8,23 (44) */ +0.000000000e+00f, -5.981146091e-05f, -7.186708154e-04f, +3.891296665e-05f, +1.837303087e-03f, +2.451064348e-04f, -3.716723188e-03f, -1.096647286e-03f, +6.558410325e-03f, +2.968784100e-03f, -1.054820944e-02f, -6.521277614e-03f, +1.589237018e-02f, +1.278236926e-02f, -2.296507664e-02f, -2.366526438e-02f, +3.280347170e-02f, +4.391849951e-02f, -4.917873518e-02f, -9.188302457e-02f, +9.490838907e-02f, +3.903319704e-01f, +4.657511121e-01f, +2.301036346e-01f, -4.003317034e-02f, -8.852240596e-02f, +1.169943621e-02f, +5.080097032e-02f, -2.085305840e-03f, -3.184469111e-02f, -1.830928306e-03f, +2.011587851e-02f, +3.146952680e-03f, -1.232524551e-02f, -3.136587497e-03f, +7.126354088e-03f, +2.502839044e-03f, -3.777623887e-03f, -1.680352891e-03f, +1.760527533e-03f, +9.290009326e-04f, -6.637697230e-04f, -3.765041543e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.886570663e-05f, +1.006325487e-05f, -5.616245785e-05f, -2.742657843e-05f, +1.214062683e-04f, +6.830491191e-05f, -2.223887316e-04f, -1.509345828e-04f, +3.653998246e-04f, +3.020156231e-04f, -5.547832275e-04f, -5.623463434e-04f, +7.937339537e-04f, +1.003494338e-03f, -1.086825811e-03f, -1.784912553e-03f, +1.439984936e-03f, +3.413161095e-03f, -1.756590075e-03f, -9.043370036e-03f, -7.459689256e-03f, +3.020176466e-03f, +9.814045284e-03f, +5.639815044e-03f, -1.882870823e-03f, -3.034463845e-03f, +6.226678819e-04f, +1.888363348e-03f, -1.758788128e-04f, -1.214355977e-03f, -8.536945332e-06f, +7.710904031e-04f, +7.533986833e-05f, -4.705323363e-04f, -8.431371580e-05f, +2.696791191e-04f, +6.715743137e-05f, -1.413550798e-04f, -4.231252662e-05f, +6.504078892e-05f, +2.001703818e-05f, -2.412899703e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.981146091e-05f, +7.186708154e-04f, -9.586487626e-05f, -2.673378342e-03f, +2.367467266e-04f, +5.827690945e-03f, -6.664725864e-04f, -1.054778968e-02f, +1.628496979e-03f, +1.676428854e-02f, -3.358765927e-03f, -2.405627433e-02f, +5.992421528e-03f, +3.166683837e-02f, -9.475442327e-03f, -3.861709596e-02f, +1.351699889e-02f, +4.389834104e-02f, -1.760926678e-02f, -4.669377363e-02f, +2.112013841e-02f, +4.656757688e-02f, -2.343808006e-02f, -4.356598299e-02f, +2.412742129e-02f, +3.820074287e-02f, -2.304536227e-02f, -3.132129935e-02f, +2.038247288e-02f, +2.391529993e-02f, -1.661307635e-02f, -1.689629811e-02f, +1.237161809e-02f, +1.093654667e-02f, -8.294824008e-03f, -6.383312422e-03f, +4.878519054e-03f, +3.267418763e-03f, -2.389661345e-03f, -1.384057962e-03f, +6.637697230e-04f, +3.765041543e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.886570663e-05f, -1.006325487e-05f, +7.950140619e-05f, +3.393849481e-05f, -2.010686993e-04f, -4.867011854e-05f, +3.993005730e-04f, +4.694729371e-05f, -6.793336019e-04f, -1.129083210e-05f, +1.029096508e-03f, -7.420923400e-05f, -1.417403325e-03f, +2.176719137e-04f, +1.797329261e-03f, -4.142463470e-04f, -2.114709087e-03f, +6.441297486e-04f, +2.319814411e-03f, -8.750572352e-04f, -2.378999080e-03f, +1.069045087e-03f, +2.282872110e-03f, -1.191608132e-03f, -2.048510478e-03f, +1.220659775e-03f, +1.715053605e-03f, -1.152266461e-03f, -1.334079442e-03f, +1.001417649e-03f, +9.577121940e-04f, -7.976303570e-04f, -6.279191849e-04f, +5.769113925e-04f, +3.697912301e-04f, -3.727159975e-04f, -1.900800085e-04f, +2.086797875e-04f, +8.049621737e-05f, -9.506618998e-05f, -2.001703818e-05f, +2.412899703e-05f, +0.000000000e+00f, /* 8,24 (44) */ +0.000000000e+00f, -4.094575428e-05f, -7.086075605e-04f, -1.724949120e-05f, +1.809876508e-03f, +3.665127031e-04f, -3.648418276e-03f, -1.319036018e-03f, +6.407475742e-03f, +3.334183924e-03f, -1.024619382e-02f, -7.076060841e-03f, +1.533002384e-02f, +1.357610321e-02f, -2.196158231e-02f, -2.475209020e-02f, +3.101855915e-02f, +4.535848444e-02f, -4.576557409e-02f, -9.363961465e-02f, +8.586501903e-02f, +3.828722811e-01f, +4.687712885e-01f, +2.399176799e-01f, -3.439335529e-02f, -9.040527678e-02f, +8.664972362e-03f, +5.142363821e-02f, -1.969424922e-04f, -3.202056993e-02f, -3.045284283e-03f, +2.010734157e-02f, +3.918043083e-03f, -1.224990564e-02f, -3.607119833e-03f, +7.042040372e-03f, +2.772518163e-03f, -3.710466456e-03f, -1.821707971e-03f, +1.718215006e-03f, +9.940417215e-04f, -6.437526848e-04f, -4.006331513e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.813654524e-05f, +1.156200341e-05f, -5.451365104e-05f, -3.109080837e-05f, +1.178601126e-04f, +7.543762803e-05f, -2.152455967e-04f, -1.630588444e-04f, +3.519054467e-04f, +3.207233305e-04f, -5.306150743e-04f, -5.890548917e-04f, +7.520015975e-04f, +1.038967548e-03f, -1.015593691e-03f, -1.827672860e-03f, +1.314443263e-03f, +3.449884991e-03f, -1.504807565e-03f, -8.905229318e-03f, -7.688411219e-03f, +2.674734318e-03f, +9.771114886e-03f, +5.887019779e-03f, -1.717596983e-03f, -3.108878884e-03f, +5.153502663e-04f, +1.916834922e-03f, -1.052606080e-04f, -1.224545909e-03f, -5.475298431e-05f, +7.733381554e-04f, +1.047331584e-04f, -4.696580509e-04f, -1.021305455e-04f, +2.680498294e-04f, +7.724478239e-05f, -1.400271590e-04f, -4.750568960e-05f, +6.433115545e-05f, +2.233858996e-05f, -2.396669449e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.094575428e-05f, +7.086075605e-04f, -1.636347006e-05f, -2.639439847e-03f, +3.567802731e-05f, +5.779020827e-03f, -2.671720134e-04f, -1.050084239e-02f, +9.491633768e-04f, +1.675299771e-02f, -2.329669418e-03f, -2.413048356e-02f, +4.575018202e-03f, +3.188451029e-02f, -7.678113066e-03f, -3.903134231e-02f, +1.140228980e-02f, +4.454247079e-02f, -1.528945237e-02f, -4.756883086e-02f, +1.874113933e-02f, +4.763662196e-02f, -2.115520795e-02f, -4.475759113e-02f, +2.207891081e-02f, +3.942140265e-02f, -2.133030867e-02f, -3.247356581e-02f, +1.904839344e-02f, +2.491671758e-02f, -1.565536415e-02f, -1.769392847e-02f, +1.174369890e-02f, +1.151345806e-02f, -7.925032778e-03f, -6.756028420e-03f, +4.688439045e-03f, +3.476098551e-03f, -2.309165128e-03f, -1.479124152e-03f, +6.437526848e-04f, +4.006331513e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.813654524e-05f, -1.156200341e-05f, +7.682424980e-05f, +3.998184953e-05f, -1.963056544e-04f, -6.254000361e-05f, +3.925916505e-04f, +7.289338143e-05f, -6.718354979e-04f, -5.347409763e-05f, +1.023133402e-03f, -1.273065514e-05f, -1.416256979e-03f, +1.359389520e-04f, +1.804644322e-03f, -3.140734770e-04f, -2.133629210e-03f, +5.302096033e-04f, +2.352082522e-03f, -7.543958355e-04f, -2.424301130e-03f, +9.498242216e-04f, +2.338652763e-03f, -1.081748194e-03f, -2.110352850e-03f, +1.126450964e-03f, +1.777539236e-03f, -1.077414432e-03f, -1.391892103e-03f, +9.467192680e-04f, +1.006675221e-03f, -7.613033350e-04f, -6.656866567e-04f, +5.554156132e-04f, +3.960345967e-04f, -3.617861668e-04f, -2.061769061e-04f, +2.042716706e-04f, +8.887646084e-05f, -9.399637063e-05f, -2.233858996e-05f, +2.396669449e-05f, +0.000000000e+00f, /* 8,25 (44) */ +0.000000000e+00f, -2.280920904e-05f, -6.970455571e-04f, -7.176314224e-05f, +1.778785700e-03f, +4.843728157e-04f, -3.572980648e-03f, -1.534281615e-03f, +6.244416898e-03f, +3.686089371e-03f, -9.925470485e-03f, -7.606675916e-03f, +1.474096895e-02f, +1.432810481e-02f, -2.092261476e-02f, -2.576768389e-02f, +2.919088629e-02f, +4.667292771e-02f, -4.231568910e-02f, -9.514442221e-02f, +7.695978971e-02f, +3.751838699e-01f, +4.714460229e-01f, +2.496887948e-01f, -2.850633551e-02f, -9.212287376e-02f, +5.556093478e-03f, +5.193898847e-02f, +1.719892430e-03f, -3.212583053e-02f, -4.269830192e-03f, +2.005258858e-02f, +4.691381238e-03f, -1.214517248e-02f, -4.076777884e-03f, +6.939909826e-03f, +3.040567992e-03f, -3.633221673e-03f, -1.961735130e-03f, +1.670709316e-03f, +1.058372877e-03f, -6.214140948e-04f, -4.245998458e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.737870626e-05f, +1.298056784e-05f, -5.276927238e-05f, -3.458939389e-05f, +1.141051959e-04f, +8.225001081e-05f, -2.077262260e-04f, -1.745977306e-04f, +3.378128593e-04f, +3.384108386e-04f, -5.055862801e-04f, -6.140477072e-04f, +7.091489576e-04f, +1.071611160e-03f, -9.431088328e-04f, -1.865746873e-03f, +1.188105689e-03f, +3.478576103e-03f, -1.256135034e-03f, -8.757605971e-03f, -7.906847652e-03f, +2.325608775e-03f, +9.715907479e-03f, +6.130361963e-03f, -1.545062632e-03f, -3.177813682e-03f, +4.051705618e-04f, +1.941403888e-03f, -3.339690446e-05f, -1.232079723e-03f, -1.014980978e-04f, +7.738312790e-04f, +1.343247226e-04f, -4.676710644e-04f, -1.200035216e-04f, +2.657533541e-04f, +8.733998399e-05f, -1.383283922e-04f, -5.270062244e-05f, +6.343626354e-05f, +2.466949175e-05f, -2.372624758e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.280920904e-05f, +6.970455571e-04f, +6.046077973e-05f, -2.599457997e-03f, -1.606276271e-04f, +5.716480823e-03f, +1.254196371e-04f, -1.042794901e-02f, +2.773278789e-04f, +1.669952361e-02f, -1.306536016e-03f, -2.414321422e-02f, +3.158761223e-03f, +3.202044924e-02f, -5.873468744e-03f, -3.934541578e-02f, +9.268660589e-03f, +4.507268039e-02f, -1.293736985e-02f, -4.832322670e-02f, +1.631683820e-02f, +4.858644618e-02f, -1.881655519e-02f, -4.583933932e-02f, +1.996855796e-02f, +4.054785361e-02f, -1.955276943e-02f, -3.355098024e-02f, +1.765650133e-02f, +2.586343685e-02f, -1.464868893e-02f, -1.845523181e-02f, +1.107801225e-02f, +1.206887367e-02f, -7.528998181e-03f, -7.117814586e-03f, +4.482262139e-03f, +3.680370221e-03f, -2.220288667e-03f, -1.573120522e-03f, +6.214140948e-04f, +4.245998458e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.737870626e-05f, -1.298056784e-05f, +7.401001638e-05f, +4.574722876e-05f, -1.911241015e-04f, -7.595580378e-05f, +3.849745594e-04f, +9.822773494e-05f, -6.627082172e-04f, -9.497637221e-05f, +1.014615202e-03f, +4.815859980e-05f, -1.411508730e-03f, +5.449132512e-05f, +1.807323043e-03f, -2.136613268e-04f, -2.147048585e-03f, +4.153515593e-04f, +2.378301921e-03f, -6.320214768e-04f, -2.463421819e-03f, +8.281670986e-04f, +2.388560283e-03f, -9.689080262e-04f, -2.167016456e-03f, +1.028991470e-03f, +1.835805697e-03f, -9.993517718e-04f, -1.446554062e-03f, +8.891331350e-04f, +1.053510781e-03f, -7.226127060e-04f, -7.021860642e-04f, +5.321709771e-04f, +4.216421221e-04f, -3.497032258e-04f, -2.220372295e-04f, +1.992044890e-04f, +9.722521034e-05f, -9.261834034e-05f, -2.466949175e-05f, +2.372624758e-05f, +0.000000000e+00f, /* 8,26 (44) */ +0.000000000e+00f, -5.430502781e-06f, -6.840649893e-04f, -1.245324146e-04f, +1.744196306e-03f, +5.984780117e-04f, -3.490730637e-03f, -1.742007841e-03f, +6.069819167e-03f, +4.023902230e-03f, -9.587059646e-03f, -8.112262196e-03f, +1.412692124e-02f, +1.503725377e-02f, -1.985100360e-02f, -2.671079272e-02f, +2.732513942e-02f, +4.786103340e-02f, -3.883711299e-02f, -9.640055725e-02f, +6.820218374e-02f, +3.672770223e-01f, +4.737716316e-01f, +2.594047022e-01f, -2.237597355e-02f, -9.366793640e-02f, +2.378279796e-03f, +5.234415903e-02f, +3.661296318e-03f, -3.215922744e-02f, -5.501909915e-03f, +1.995109049e-02f, +5.465212517e-03f, -1.201084776e-02f, -4.544448948e-03f, +6.819906305e-03f, +3.306321346e-03f, -3.545881689e-03f, -2.100063522e-03f, +1.618008694e-03f, +1.121809141e-03f, -5.967446031e-04f, -4.483260934e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.659558457e-05f, +1.431724768e-05f, -5.093645098e-05f, -3.791724618e-05f, +1.101552123e-04f, +8.873170256e-05f, -1.998553052e-04f, -1.855337779e-04f, +3.231644100e-04f, +3.550524448e-04f, -4.797667512e-04f, -6.372917343e-04f, +6.652883750e-04f, +1.101390868e-03f, -8.695492688e-04f, -1.899120603e-03f, +1.061251757e-03f, +3.499322218e-03f, -1.010931395e-03f, -8.600806591e-03f, -8.114736642e-03f, +1.973278391e-03f, +9.648421663e-03f, +6.369420286e-03f, -1.365450418e-03f, -3.241029330e-03f, +2.923242001e-04f, +1.961958798e-03f, +3.956751245e-05f, -1.236903324e-03f, -1.486720570e-04f, +7.725434958e-04f, +1.640482395e-04f, -4.645587956e-04f, -1.378909369e-04f, +2.627835768e-04f, +9.741845355e-05f, -1.362554549e-04f, -5.788404891e-05f, +6.235387979e-05f, +2.700344492e-05f, -2.340588755e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.430502781e-06f, +6.840649893e-04f, +1.344707961e-04f, -2.553710769e-03f, -3.517517285e-04f, +5.640525020e-03f, +5.103941965e-04f, -1.032972127e-02f, -3.853803383e-04f, +1.660454724e-02f, -2.919208143e-04f, -2.409505562e-02f, +1.747252493e-03f, +3.207494056e-02f, -4.066145701e-03f, -3.955907711e-02f, +7.121612003e-03f, +4.548803195e-02f, -1.055906793e-02f, -4.895524817e-02f, +1.385341638e-02f, +4.941461328e-02f, -1.642799490e-02f, -4.680824735e-02f, +1.780154150e-02f, +4.157684508e-02f, -1.771696373e-02f, -3.455033201e-02f, +1.620994727e-02f, +2.675256998e-02f, -1.359517815e-02f, -1.917784451e-02f, +1.037582618e-02f, +1.260104465e-02f, -7.107356059e-03f, -7.467517812e-03f, +4.260224910e-03f, +3.879574710e-03f, -2.123063457e-03f, -1.665738863e-03f, +5.967446031e-04f, +4.483260934e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.659558457e-05f, -1.431724768e-05f, +7.107155702e-05f, +5.122527963e-05f, -1.855481789e-04f, -8.889005515e-05f, +3.764861458e-04f, +1.228927735e-04f, -6.519991251e-04f, -1.356976152e-04f, +1.003593071e-03f, +1.083063974e-04f, -1.403202629e-03f, -2.646295790e-05f, +1.805389067e-03f, -1.132694617e-04f, -2.154957710e-03f, +2.998537883e-04f, +2.398421082e-03f, -5.082509356e-04f, -2.496265270e-03f, +7.043854709e-04f, +2.432459817e-03f, -8.533715254e-04f, -2.218339760e-03f, +9.285195307e-04f, +1.889681393e-03f, -9.182612062e-04f, -1.497901017e-03f, +8.287854638e-04f, +1.098076332e-03f, -6.816348387e-04f, -7.373056101e-04f, +5.072156049e-04f, +4.465353040e-04f, -3.364802418e-04f, -2.376126283e-04f, +1.934780934e-04f, +1.055174142e-04f, -9.092735126e-05f, -2.700344492e-05f, +2.340588755e-05f, +0.000000000e+00f, /* 8,27 (44) */ +0.000000000e+00f, +1.116508179e-05f, -6.697477416e-04f, -1.754688656e-04f, +1.706279060e-03f, +7.086332239e-04f, -3.401998934e-03f, -1.941863146e-03f, +5.884285389e-03f, +4.347066640e-03f, -9.232007201e-03f, -8.592028947e-03f, +1.348962951e-02f, +1.570254214e-02f, -1.874961273e-02f, -2.758034199e-02f, +2.542601882e-02f, +4.892228515e-02f, -3.533779078e-02f, -9.741148864e-02f, +5.960137715e-02f, +3.591622856e-01f, +4.757449100e-01f, +2.690531239e-01f, -1.600655326e-02f, -9.503338681e-02f, -8.627495342e-04f, +5.263648323e-02f, +5.623255116e-03f, -3.211965993e-02f, -6.738813239e-03f, +1.980241843e-02f, +6.237756013e-03f, -1.184679952e-02f, -5.009007744e-03f, +6.682015368e-03f, +3.569104923e-03f, -3.448463236e-03f, -2.236318977e-03f, +1.560124645e-03f, +1.184163020e-03f, -5.697411582e-04f, -4.717319809e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.579055794e-05f, +1.557062569e-05f, -4.902238392e-05f, -4.106983364e-05f, +1.060240704e-04f, +9.487335522e-05f, -1.916579412e-04f, -1.958512485e-04f, +3.080031036e-04f, +3.706252664e-04f, -4.532272335e-04f, -6.587583729e-04f, +6.205329591e-04f, +1.128279224e-03f, -7.950929731e-04f, -1.927790301e-03f, +9.341579451e-04f, +3.512224607e-03f, -7.695458477e-04f, -8.435150394e-03f, -8.311833564e-03f, +1.618227086e-03f, +9.568675473e-03f, +6.603776907e-03f, -1.178957764e-03f, -3.298294587e-03f, +1.770151251e-04f, +1.978395458e-03f, +1.134834115e-04f, -1.238968054e-03f, -1.961722680e-04f, +7.694523085e-04f, +1.938361112e-04f, -4.603111501e-04f, -1.557503799e-04f, +2.591359210e-04f, +1.074552011e-04f, -1.338059061e-04f, -6.304243838e-05f, +6.108222644e-05f, +2.933397920e-05f, -2.300404255e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.116508179e-05f, +6.697477416e-04f, +2.055423531e-04f, -2.502485489e-03f, -5.372999074e-04f, +5.551634964e-03f, +8.868803424e-04f, -1.020682850e-02f, -1.037379463e-03f, +1.646884962e-02f, +7.116722567e-04f, -2.398674922e-02f, +3.440498641e-04f, +3.204847761e-02f, -2.260756634e-03f, -3.967234657e-02f, +4.966654293e-03f, +4.578788574e-02f, -8.160646843e-03f, -4.946349911e-02f, +1.135715111e-02f, +5.011899875e-02f, -1.399553509e-02f, -4.766161887e-02f, +1.558320174e-02f, +4.250536461e-02f, -1.582728234e-02f, -3.546859322e-02f, +1.471204625e-02f, +2.758135544e-02f, -1.249710182e-02f, -1.985947935e-02f, +9.638520573e-03f, +1.310826026e-02f, -6.660820755e-03f, -7.803998054e-03f, +4.022612281e-03f, +4.073052804e-03f, -2.017546043e-03f, -1.756666214e-03f, +5.697411582e-04f, +4.717319809e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.579055794e-05f, -1.557062569e-05f, +6.802174843e-05f, +5.640774150e-05f, -1.796026234e-04f, -1.013171845e-04f, +3.671650045e-04f, +1.468336382e-04f, -6.397591682e-04f, -1.755411240e-04f, +9.901242290e-04f, +1.675640669e-04f, -1.391391680e-03f, -1.067187602e-04f, +1.798877921e-03f, -1.315596484e-05f, -2.157361451e-03f, +1.840150670e-04f, +2.412404450e-03f, -3.834040852e-04f, -2.522751965e-03f, +5.787966648e-04f, +2.470231970e-03f, -7.354301793e-04f, -2.264174645e-03f, +8.252821801e-04f, +1.939005358e-03f, -8.343344836e-04f, -1.545776231e-03f, +7.658107828e-04f, +1.140234026e-03f, -6.384530061e-04f, -7.709358742e-04f, +4.805927579e-04f, +4.706364215e-04f, -3.221336618e-04f, -2.528546485e-04f, +1.870942350e-04f, +1.137275915e-04f, -8.891950538e-05f, -2.933397920e-05f, +2.300404255e-05f, +0.000000000e+00f, /* 8,28 (44) */ +0.000000000e+00f, +2.695563973e-05f, -6.541771159e-04f, -2.244912495e-04f, +1.665209226e-03f, +8.146572943e-04f, -3.307125579e-03f, -2.133521087e-03f, +5.688434141e-03f, +4.655069744e-03f, -8.861381935e-03f, -9.045256180e-03f, +1.283087113e-02f, +1.632307510e-02f, -1.762133351e-02f, -2.837543496e-02f, +2.349822851e-02f, +4.985644310e-02f, -3.182556617e-02f, -9.818103449e-02f, +5.116622676e-02f, +3.508504521e-01f, +4.773631371e-01f, +2.786217994e-01f, -9.402776357e-03f, -9.621234458e-02f, -4.161044122e-03f, +5.281349836e-02f, +7.601650574e-03f, -3.200617651e-02f, -7.977781293e-03f, +1.960624616e-02f, +7.007208321e-03f, -1.165296341e-02f, -5.469318894e-03f, +6.526264988e-03f, +3.828240844e-03f, -3.341008035e-03f, -2.370124883e-03f, +1.497082207e-03f, +1.245245247e-03f, -5.404071790e-04f, -4.947360235e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.496697687e-05f, +1.673956517e-05f, -4.703431483e-05f, -4.404318231e-05f, +1.017258544e-04f, +1.006666355e-04f, -1.831595935e-04f, -2.055361406e-04f, +2.923724898e-04f, +3.851092549e-04f, -4.260391358e-04f, -6.784234845e-04f, +5.749963216e-04f, +1.152255607e-03f, -7.199174749e-04f, -1.951762343e-03f, +8.070971557e-04f, +3.517397689e-03f, -5.323173350e-04f, -8.260968595e-03f, -8.497911455e-03f, +1.260943332e-03f, +9.476706422e-03f, +6.833018219e-03f, -9.857966404e-04f, -3.349386414e-03f, +5.945548166e-05f, +1.990617239e-03f, +1.881973897e-04f, -1.238230873e-03f, -2.438939764e-04f, +7.645391042e-04f, +2.236196045e-04f, -4.549205816e-04f, -1.735388265e-04f, +2.548073873e-04f, +1.174248849e-04f, -1.309782120e-04f, -6.816203638e-05f, +5.961999631e-05f, +3.165446722e-05f, -2.251934746e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.695563973e-05f, +6.541771159e-04f, +2.735641016e-04f, -2.446077748e-03f, -7.169025308e-04f, +5.450317780e-03f, +1.254045347e-03f, -1.005999486e-02f, -1.677138632e-03f, +1.629330850e-02f, +1.701796486e-03f, -2.381918515e-02f, -1.047341816e-03f, +3.194175885e-02f, -4.618787135e-04f, -3.968550254e-02f, +2.809292843e-03f, +4.597190081e-02f, -5.748242393e-03f, -4.984690319e-02f, +8.834399142e-03f, +5.069779542e-02f, -1.152530311e-02f, -4.839704905e-02f, +1.331902710e-02f, +4.333064679e-02f, -1.388827698e-02f, -3.630292770e-02f, +1.316627002e-02f, +2.834716623e-02f, -1.135686779e-02f, -2.049793236e-02f, +8.867584699e-03f, +1.358885301e-02f, -6.190184334e-03f, -8.126131716e-03f, +3.769757633e-03f, +4.260147039e-03f, -1.903818451e-03f, -1.845585719e-03f, +5.404071790e-04f, +4.947360235e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.496697687e-05f, -1.673956517e-05f, +6.487345079e-05f, +6.128744519e-05f, -1.733126841e-04f, -1.132135465e-04f, +3.570513405e-04f, +1.699983012e-04f, -6.260426865e-04f, -2.144137544e-04f, +9.742717304e-04f, +2.257867632e-04f, -1.376137616e-03f, -1.860743392e-04f, +1.787836834e-03f, +8.642323395e-05f, -2.154278965e-03f, +6.813399060e-05f, +2.420232485e-03f, -2.578030512e-04f, -2.542818943e-03f, +4.517227478e-04f, +2.501773131e-03f, -6.153823148e-04f, -2.304386847e-03f, +7.195346339e-04f, +1.983627737e-03f, -7.477719213e-04f, -1.590031001e-03f, +7.003516420e-04f, +1.179851125e-03f, -5.931572319e-04f, -8.029701393e-04f, +4.523507860e-04f, +4.938687636e-04f, -3.066833210e-04f, -2.677148706e-04f, +1.800565991e-04f, +1.218299000e-04f, -8.659178844e-05f, -3.165446722e-05f, +2.251934746e-05f, +0.000000000e+00f, /* 8,29 (44) */ +0.000000000e+00f, +4.192261661e-05f, -6.374375508e-04f, -2.715255644e-04f, +1.621166044e-03f, +9.163831487e-04f, -3.206458944e-03f, -2.316680681e-03f, +5.482898000e-03f, +4.947442234e-03f, -8.476272680e-03f, -9.471295316e-03f, +1.215244765e-02f, +1.689807143e-02f, -1.646907790e-02f, -2.909535244e-02f, +2.154646617e-02f, +5.066354025e-02f, -2.830816848e-02f, -9.871335182e-02f, +4.290525816e-02f, +3.423525406e-01f, +4.786240804e-01f, +2.880985058e-01f, -2.569758138e-03f, -9.719814122e-02f, -7.510430536e-03f, +5.287295384e-02f, +9.592267814e-03f, -3.181797912e-02f, -9.216012166e-03f, +1.936235218e-02f, +7.771747426e-03f, -1.142934380e-02f, -5.924239476e-03f, +6.352726162e-03f, +4.083048231e-03f, -3.223583150e-03f, -2.501103095e-03f, +1.428920170e-03f, +1.304865243e-03f, -5.087527117e-04f, -5.172553710e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.412815468e-05f, +1.782320644e-05f, -4.497951281e-05f, -4.683387456e-05f, +9.727478371e-05f, +1.061042274e-04f, -1.743860058e-04f, -2.145761941e-04f, +2.763165514e-04f, +3.984872011e-04f, -3.982743552e-04f, -6.962673879e-04f, +5.287923119e-04f, +1.173306186e-03f, -6.441994771e-04f, -1.971053077e-03f, +6.803382136e-04f, +3.514968676e-03f, -2.995740239e-04f, -8.078603771e-03f, -8.672761342e-03f, +9.019193399e-04f, +9.372571504e-03f, +7.056735594e-03f, -7.861933153e-04f, -3.394090501e-03f, -6.013471407e-05f, +1.998535394e-03f, +2.635521593e-04f, -1.234654531e-03f, -2.917304806e-04f, +7.577892523e-04f, +2.533289979e-04f, -4.483821483e-04f, -1.912127353e-04f, +2.497965870e-04f, +1.273018687e-04f, -1.277717665e-04f, -7.322889637e-05f, +5.796636668e-05f, +3.395813985e-05f, -2.195065330e-05f, +0.000000000e+00f, +0.000000000e+00f, -4.192261661e-05f, +6.374375508e-04f, +3.384375524e-04f, -2.384790302e-03f, -8.902152149e-04f, +5.337104233e-03f, +1.611096687e-03f, -9.889996558e-03f, -2.303181318e-03f, +1.607889474e-02f, +2.676068216e-03f, -2.359339839e-02f, -2.423479432e-03f, +3.175568451e-02f, +1.325958121e-03f, -3.959907930e-02f, +6.550138773e-04f, +4.604003480e-02f, -3.328009908e-03f, -5.010470624e-02f, +6.291580199e-03f, +5.114951817e-02f, -9.023529984e-03f, -4.901243137e-02f, +1.101464025e-02f, +4.405018143e-02f, -1.190464925e-02f, -3.705069963e-02f, +1.157623902e-02f, +2.904751787e-02f, -1.017701667e-02f, -2.109108959e-02f, +8.064614559e-03f, +1.404120380e-02f, -5.696315570e-03f, -8.432815037e-03f, +3.502042762e-03f, +4.440203638e-03f, -1.781988551e-03f, -1.932177508e-03f, +5.087527117e-04f, +5.172553710e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.412815468e-05f, -1.782320644e-05f, +6.163946680e-05f, +6.585830902e-05f, -1.667040381e-04f, -1.245574544e-04f, +3.461868290e-04f, +1.923376664e-04f, -6.109072174e-04f, -2.522261286e-04f, +9.561042310e-04f, +2.828338165e-04f, -1.357510663e-03f, -2.643318554e-04f, +1.772324548e-03f, +1.852150214e-04f, -2.145743589e-03f, -4.749181134e-05f, +2.421901676e-03f, -1.317713624e-04f, -2.556419947e-03f, +3.234896838e-04f, +2.526995766e-03f, -4.935323277e-04f, -2.338856349e-03f, +6.115396462e-04f, +2.023410232e-03f, -6.587819237e-04f, -1.630525108e-03f, +6.325582952e-04f, +1.216800403e-03f, -5.458441169e-04f, -8.333047132e-04f, +4.225430608e-04f, +5.161568565e-04f, -2.901524419e-04f, -2.821450487e-04f, +1.723708327e-04f, +1.297982064e-04f, -8.394210187e-05f, -3.395813985e-05f, +2.195065330e-05f, +0.000000000e+00f, /* 8,30 (44) */ +0.000000000e+00f, +5.605077129e-05f, -6.196143443e-04f, -3.165050772e-04f, +1.574332169e-03f, +1.013657932e-03f, -3.100354716e-03f, -2.491066686e-03f, +5.268321806e-03f, +5.223758785e-03f, -8.077785479e-03f, -9.869569671e-03f, +1.145618026e-02f, +1.742686374e-02f, -1.529577171e-02f, -2.973955191e-02f, +1.957541309e-02f, +5.134387847e-02f, -2.479319980e-02f, -9.901292585e-02f, +3.482665439e-02f, +3.336797793e-01f, +4.795259998e-01f, +2.974710773e-01f, +4.486977456e-03f, -9.798433453e-02f, -1.090452104e-02f, +5.281281913e-02f, +1.159080321e-02f, -3.155442696e-02f, -1.045066670e-02f, +1.907062170e-02f, +8.529536678e-03f, -1.117601480e-02f, -6.372621624e-03f, +6.161513426e-03f, +4.332844818e-03f, -3.096281281e-03f, -2.628874861e-03f, +1.355691274e-03f, +1.362831610e-03f, -4.747945719e-04f, -5.392060243e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.327735794e-05f, +1.882096265e-05f, -4.286525175e-05f, -4.943904653e-05f, +9.268517436e-05f, +1.111798319e-04f, -1.653631379e-04f, -2.229608930e-04f, +2.598795924e-04f, +4.107447354e-04f, -3.700051028e-04f, -7.122748442e-04f, +4.820347566e-04f, +1.191423856e-03f, -5.681144816e-04f, -1.985688665e-03f, +5.541453813e-04f, +3.505077189e-03f, -7.163281020e-05f, -7.888409201e-03f, -8.836192550e-03f, +5.416502342e-04f, +9.256347174e-03f, +7.274526133e-03f, -5.803880719e-04f, -3.432201781e-03f, -1.815279258e-04f, +2.002069348e-03f, +3.393868463e-04f, -1.228207727e-03f, -3.395733510e-04f, +7.491921922e-04f, +2.828937322e-04f, -4.406935626e-04f, -2.087281453e-04f, +2.441037719e-04f, +1.370602814e-04f, -1.241869104e-04f, -7.822891266e-05f, +5.612101223e-05f, +3.623810225e-05f, -2.129703629e-05f, +0.000000000e+00f, +0.000000000e+00f, -5.605077129e-05f, +6.196143443e-04f, +4.000770192e-04f, -2.318931993e-03f, -1.056919253e-03f, +5.212546779e-03f, +1.957283516e-03f, -9.697658891e-03f, -2.914088535e-03f, +1.582666861e-02f, +3.632172447e-03f, -2.331056457e-02f, -3.780990095e-03f, +3.149135265e-02f, +3.098282669e-03f, -3.941386428e-02f, -1.490729711e-03f, +4.599254299e-02f, -9.061082325e-04f, -5.023647761e-02f, +3.735160252e-03f, +5.147300785e-02f, -6.496534218e-03f, -4.950596369e-02f, +8.675783903e-03f, +4.466172107e-02f, -9.881239015e-03f, -3.770948155e-02f, +9.945713914e-03f, +2.968007616e-02f, -8.960216265e-03f, -2.163693371e-02f, +7.231309846e-03f, +1.446374686e-02f, -5.180158713e-03f, -8.722967479e-03f, +3.219897714e-03f, +4.612574470e-03f, -1.652190345e-03f, -2.016119610e-03f, +4.747945719e-04f, +5.392060243e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.327735794e-05f, -1.882096265e-05f, +5.833250182e-05f, +7.011533139e-05f, -1.598027048e-04f, -1.353292048e-04f, +3.346144730e-04f, +2.138056599e-04f, -5.944132943e-04f, -2.888928305e-04f, +9.356957414e-04f, +3.385690670e-04f, -1.335589277e-03f, -3.412978666e-04f, +1.752411078e-03f, +2.829697519e-04f, -2.131802680e-03f, -1.625664531e-04f, +2.417424508e-03f, -5.633100092e-06f, -2.563525537e-03f, +1.944264780e-04f, +2.545828660e-03f, -3.701898939e-04f, -2.367477734e-03f, +5.015668458e-04f, +2.058226523e-03f, -5.675804767e-04f, -1.667127252e-03f, +5.625883596e-04f, +1.250960538e-03f, -4.966166449e-04f, -8.618392464e-04f, +3.912278939e-04f, +5.374266916e-04f, -2.725676232e-04f, -2.960972531e-04f, +1.640445681e-04f, +1.376061596e-04f, -8.096929242e-05f, -3.623810225e-05f, +2.129703629e-05f, +0.000000000e+00f, /* 8,31 (44) */ +0.000000000e+00f, +6.932812923e-05f, -6.007933817e-04f, -3.593703289e-04f, +1.524893123e-03f, +1.106343107e-03f, -2.989174884e-03f, -2.656429824e-03f, +5.045360913e-03f, +5.483638377e-03f, -7.667040744e-03f, -1.023957477e-02f, +1.074390542e-02f, +1.790889849e-02f, -1.410434786e-02f, -3.030766640e-02f, +1.758972443e-02f, +5.189802385e-02f, -2.128812261e-02f, -9.908455866e-02f, +2.693824519e-02f, +3.248435867e-01f, +4.800676500e-01f, +3.067274245e-01f, +1.176150359e-02f, -9.856472261e-02f, -1.433672282e-02f, +5.263129120e-02f, +1.359287256e-02f, -3.121504012e-02f, -1.167887442e-02f, +1.873104835e-02f, +9.278728870e-03f, -1.089312107e-02f, -6.813315187e-03f, +5.952785281e-03f, +4.576948590e-03f, -2.959221000e-03f, -2.753061772e-03f, +1.277462361e-03f, +1.418952622e-03f, -4.385564696e-04f, -5.605030605e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.241779730e-05f, +1.973251484e-05f, -4.069879002e-05f, -5.185638397e-05f, +8.797140009e-05f, +1.158881642e-04f, -1.561170982e-04f, -2.306814620e-04f, +2.431061282e-04f, +4.218703204e-04f, -3.413037314e-04f, -7.264350323e-04f, +4.348372014e-04f, +1.206608172e-03f, -4.918364215e-04f, -1.995704894e-03f, +4.287778866e-04f, +3.487874864e-03f, +1.512011525e-04f, -7.690748195e-03f, -8.988032967e-03f, +1.806332249e-04f, +9.128129279e-03f, +7.485993408e-03f, -3.686348989e-04f, -3.463524932e-03f, -3.044894664e-04f, +2.001146980e-03f, +4.155373014e-04f, -1.218865262e-03f, -3.873126573e-04f, +7.387415145e-04f, +3.122425653e-04f, -4.318552366e-04f, -2.260407756e-04f, +2.377308607e-04f, +1.466740772e-04f, -1.202249485e-04f, -8.314785430e-05f, +5.408411680e-05f, +3.848735070e-05f, -2.055780628e-05f, +0.000000000e+00f, +0.000000000e+00f, -6.932812923e-05f, +6.007933817e-04f, +4.584095210e-04f, -2.248816662e-03f, -1.216721958e-03f, +5.077217574e-03f, +2.291897989e-03f, -9.483853231e-03f, -3.508501830e-03f, +1.553777578e-02f, +4.567868188e-03f, -2.297199551e-02f, -5.116579372e-03f, +3.115005478e-02f, +4.850693747e-03f, -3.913089453e-02f, -3.622532391e-03f, +4.582997653e-02f, +1.511316275e-03f, -5.024211071e-02f, +1.171634715e-03f, +5.166743433e-02f, -3.950705558e-03f, -4.987615359e-02f, +6.308306169e-03f, +4.516328792e-02f, -7.823012491e-03f, -3.827706203e-02f, +8.278586662e-03f, +3.024266452e-02f, -7.709255728e-03f, -2.213355035e-02f, +6.369470600e-03f, +1.485497475e-02f, -4.642732022e-03f, -8.995535102e-03f, +2.923800461e-03f, +4.776619039e-03f, -1.514584185e-03f, -2.097088902e-03f, +4.385564696e-04f, +5.605030605e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.241779730e-05f, -1.973251484e-05f, +5.496512532e-05f, +7.405458027e-05f, -1.526349625e-04f, -1.455110959e-04f, +3.223784588e-04f, +2.343593103e-04f, -5.766242397e-04f, -3.243325880e-04f, +9.131253679e-04f, +3.928611841e-04f, -1.310459866e-03f, -4.167838078e-04f, +1.728177459e-03f, +3.794418868e-04f, -2.112517436e-03f, -2.767965642e-04f, +2.406829384e-03f, +1.202879539e-04f, -2.564123150e-03f, +6.486431433e-05f, +2.558217123e-03f, -2.456691656e-04f, -2.390160510e-03f, +3.898920508e-04f, +2.087962664e-03f, -4.743906180e-04f, -1.699715456e-03f, +4.906064529e-04f, +1.282216489e-03f, -4.455839699e-04f, -8.884770433e-04f, +3.584684405e-04f, +5.576059524e-04f, -2.539588194e-04f, -3.095240124e-04f, +1.550874398e-04f, +1.452272650e-04f, -7.767317955e-05f, -3.848735070e-05f, +2.055780628e-05f, +0.000000000e+00f, /* 9, 0 (40) */ +0.000000000e+00f, -7.017253429e-04f, -1.750424134e-04f, +2.058419758e-03f, -1.982704743e-04f, -4.434814470e-03f, +1.641618436e-03f, +7.968272772e-03f, -5.099884949e-03f, -1.256166394e-02f, +1.191669646e-02f, +1.783553129e-02f, -2.422063161e-02f, -2.315743311e-02f, +4.659175191e-02f, +2.775293222e-02f, -9.501521185e-02f, -3.087432576e-02f, +3.144630653e-01f, +5.319805819e-01f, +3.144630653e-01f, -3.087432576e-02f, -9.501521185e-02f, +2.775293222e-02f, +4.659175191e-02f, -2.315743311e-02f, -2.422063161e-02f, +1.783553129e-02f, +1.191669646e-02f, -1.256166394e-02f, -5.099884949e-03f, +7.968272772e-03f, +1.641618436e-03f, -4.434814470e-03f, -1.982704743e-04f, +2.058419758e-03f, -1.750424134e-04f, -7.017253429e-04f, +1.133055274e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.358906275e-05f, -6.207941071e-05f, -3.486249123e-05f, +1.628499352e-04f, +1.622795872e-05f, -3.315651769e-04f, +7.338679611e-05f, +5.762344780e-04f, -2.931575445e-04f, -8.949038318e-04f, +7.282588089e-04f, +1.284178155e-03f, -1.526756362e-03f, -1.783473198e-03f, +3.073632881e-03f, +2.758795409e-03f, -7.240324242e-03f, -1.168634640e-02f, -2.454975392e-04f, +1.155215612e-02f, +7.570460241e-03f, -2.558030536e-03f, -3.211078300e-03f, +1.683739550e-03f, +1.616263007e-03f, -1.236341038e-03f, -7.898243641e-04f, +8.756226649e-04f, +3.335738481e-04f, -5.718216365e-04f, -9.753773237e-05f, +3.335181116e-04f, -3.677848260e-06f, -1.662613606e-04f, +2.962293171e-05f, +6.466356242e-05f, -2.219819630e-05f, -1.426633530e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.017253429e-04f, +1.750424134e-04f, -2.819252016e-03f, +1.317047024e-03f, +5.813065763e-03f, -5.638484823e-03f, -8.056056973e-03f, +1.356304760e-02f, +6.644294405e-03f, -2.362138728e-02f, +9.950267494e-04f, +3.194086253e-02f, -1.503480532e-02f, -3.374209658e-02f, +3.210410297e-02f, +2.603063562e-02f, -4.623861285e-02f, -9.813316511e-03f, +5.173229864e-02f, -9.813316511e-03f, -4.623861285e-02f, +2.603063562e-02f, +3.210410297e-02f, -3.374209658e-02f, -1.503480532e-02f, +3.194086253e-02f, +9.950267494e-04f, -2.362138728e-02f, +6.644294405e-03f, +1.356304760e-02f, -8.056056973e-03f, -5.638484823e-03f, +5.813065763e-03f, +1.317047024e-03f, -2.819252016e-03f, +8.373329469e-05f, +7.017253429e-04f, -1.133055274e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.358906275e-05f, +6.207941071e-05f, +2.894835191e-05f, -2.491776424e-04f, +9.111288168e-05f, +4.535489080e-04f, -4.195534187e-04f, -5.571422708e-04f, +9.581496479e-04f, +3.714972203e-04f, -1.555869431e-03f, +2.195481678e-04f, +1.936460947e-03f, -1.142211979e-03f, -1.832375687e-03f, +2.111638671e-03f, +1.154106075e-03f, -2.749369645e-03f, -7.898385675e-05f, +2.782464711e-03f, -1.015321536e-03f, -2.198575782e-03f, +1.742426403e-03f, +1.252483614e-03f, -1.904009142e-03f, -3.198737579e-04f, +1.568194600e-03f, -3.024963154e-04f, -9.914079357e-04f, +5.230583249e-04f, +4.520995028e-04f, -4.445270837e-04f, -1.118440529e-04f, +2.514351183e-04f, -2.038303472e-05f, -8.927911243e-05f, +2.219819630e-05f, +1.426633530e-05f, +0.000000000e+00f, /* 9, 1 (40) */ +0.000000000e+00f, -6.781362801e-04f, -2.371218241e-04f, +2.023557267e-03f, -3.542053911e-05f, -4.418586511e-03f, +1.310053259e-03f, +8.041659568e-03f, -4.523650471e-03f, -1.285482148e-02f, +1.102179262e-02f, +1.856379010e-02f, -2.293645346e-02f, -2.468418947e-02f, +4.480827871e-02f, +3.082656510e-02f, -9.225641644e-02f, -3.811465000e-02f, +3.027767189e-01f, +5.317350843e-01f, +3.260152214e-01f, -2.330386552e-02f, -9.757324238e-02f, +2.454185392e-02f, +4.827549146e-02f, -2.154117010e-02f, -2.545697265e-02f, +1.704570693e-02f, +1.279231912e-02f, -1.222809009e-02f, -5.671706586e-03f, +7.870735040e-03f, +1.975136548e-03f, -4.438492318e-03f, -3.645318349e-04f, +2.088042690e-03f, -1.103788509e-04f, -7.239235392e-04f, +9.903919207e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.484828019e-05f, -5.937724690e-05f, -3.985765772e-05f, +1.590369716e-04f, +2.846385128e-05f, -3.286985463e-04f, +4.946566872e-05f, +5.789455142e-04f, -2.525755473e-04f, -9.113871867e-04f, +6.656193674e-04f, +1.327740406e-03f, -1.434488871e-03f, -1.876698597e-03f, +2.930634935e-03f, +2.947865806e-03f, -6.904336239e-03f, -1.180217583e-02f, -7.360767122e-04f, +1.139971809e-02f, +7.894042301e-03f, -2.345791698e-03f, -3.342510736e-03f, +1.577657299e-03f, +1.702718913e-03f, -1.184296597e-03f, -8.501259890e-04f, +8.535545205e-04f, +3.737057772e-04f, -5.656906386e-04f, -1.218519049e-04f, +3.345337019e-04f, +9.155233045e-06f, -1.692513351e-04f, +2.414937287e-05f, +6.711753041e-05f, -2.067628486e-05f, -1.546725007e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.781362801e-04f, +2.371218241e-04f, -2.790303664e-03f, +1.067869382e-03f, +5.904178645e-03f, -5.184935915e-03f, -8.475610392e-03f, +1.300590533e-02f, +7.602444053e-03f, -2.324989006e-02f, -5.608426814e-04f, +3.216041070e-02f, -1.309834438e-02f, -3.488430856e-02f, +3.027172728e-02f, +2.814227429e-02f, -4.508450678e-02f, -1.256268616e-02f, +5.165331479e-02f, -7.030851800e-03f, -4.725393439e-02f, +2.383205984e-02f, +3.384652937e-02f, -3.248961297e-02f, -1.693881447e-02f, +3.162098877e-02f, +2.563221349e-03f, -2.392388360e-02f, +5.652886470e-03f, +1.408610593e-02f, -7.603957470e-03f, -6.083011907e-03f, +5.701221710e-03f, +1.568482143e-03f, -2.839635051e-03f, -5.545817737e-06f, +7.239235392e-04f, -9.903919207e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.484828019e-05f, +5.937724690e-05f, +3.716170056e-05f, -2.461543489e-04f, +7.053763744e-05f, +4.609517421e-04f, -3.862230372e-04f, -5.889763422e-04f, +9.223241014e-04f, +4.385649540e-04f, -1.538832243e-03f, +1.193812653e-04f, +1.962691735e-03f, -1.029049061e-03f, -1.916252486e-03f, +2.018479416e-03f, +1.289012509e-03f, -2.707823740e-03f, -2.367048336e-04f, +2.806996037e-03f, -8.730845232e-04f, -2.278997210e-03f, +1.646659396e-03f, +1.359500260e-03f, -1.865395081e-03f, -4.200416145e-04f, +1.575722699e-03f, -2.317611561e-04f, -1.021958948e-03f, +4.868021676e-04f, +4.837415165e-04f, -4.338856277e-04f, -1.326642441e-04f, +2.528998792e-04f, -1.148671485e-05f, -9.273332497e-05f, +2.067628486e-05f, +1.546725007e-05f, +0.000000000e+00f, /* 9, 2 (40) */ +0.000000000e+00f, -6.532880000e-04f, -2.964990710e-04f, +1.983699609e-03f, +1.236164325e-04f, -4.390122660e-03f, +9.813547128e-04f, +8.091125237e-03f, -3.944704957e-03f, -1.310739703e-02f, +1.011040544e-02f, +1.922940947e-02f, -2.160871305e-02f, -2.611867834e-02f, +4.293158011e-02f, +3.375720004e-02f, -8.930855063e-02f, -4.501898624e-02f, +2.909745431e-01f, +5.309990076e-01f, +3.374149395e-01f, -1.540982321e-02f, -9.991903408e-02f, +2.119934318e-02f, +4.985314876e-02f, -1.983845119e-02f, -2.664126924e-02f, +1.619558094e-02f, +1.364587364e-02f, -1.185438431e-02f, -6.237397224e-03f, +7.748883135e-03f, +2.309670250e-03f, -4.429337085e-03f, -5.337831700e-04f, +2.112192063e-03f, -4.326132053e-05f, -7.445998240e-04f, +8.357194200e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.597573519e-05f, -5.656931007e-05f, -4.459906621e-05f, +1.548431800e-04f, +4.035585483e-05f, -3.249441212e-04f, +2.583908748e-05f, +5.799757153e-04f, -2.119451354e-04f, -9.250699226e-04f, +6.020962355e-04f, +1.366972949e-03f, -1.339753471e-03f, -1.963275518e-03f, +2.782550855e-03f, +3.125049664e-03f, -6.563203266e-03f, -1.189956727e-02f, -1.225409024e-03f, +1.122918129e-02f, +8.210375133e-03f, -2.122327652e-03f, -3.467476865e-03f, +1.465405375e-03f, +1.785838056e-03f, -1.128125071e-03f, -9.089743302e-04f, +8.287183510e-04f, +4.134335714e-04f, -5.578298758e-04f, -1.462610725e-04f, +3.345906660e-04f, +2.223852773e-05f, -1.718008233e-04f, +1.845322694e-05f, +6.942925435e-05f, -1.902443446e-05f, -1.665995399e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.532880000e-04f, +2.964990710e-04f, -2.753141964e-03f, +8.217150332e-04f, +5.974716282e-03f, -4.723984173e-03f, -8.861833429e-03f, +1.241692899e-02f, +8.524768155e-03f, -2.281132511e-02f, -2.099674924e-03f, +3.227979197e-02f, -1.113565264e-02f, -3.591335762e-02f, +2.835547480e-02f, +3.016075371e-02f, -4.379549427e-02f, -1.527050990e-02f, +5.141660995e-02f, -4.223855762e-03f, -4.812701891e-02f, +2.155306263e-02f, +3.549318877e-02f, -3.113011271e-02f, -1.880420955e-02f, +3.120094716e-02f, +4.138944048e-03f, -2.415564475e-02f, +4.630927521e-03f, +1.457290810e-02f, -7.120215954e-03f, -6.516897535e-03f, +5.568557466e-03f, +1.821382022e-03f, -2.851121766e-03f, -9.827914271e-05f, +7.445998240e-04f, -8.357194200e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.597573519e-05f, +5.656931007e-05f, +4.500395056e-05f, -2.423941790e-04f, +5.018332352e-05f, +4.667416090e-04f, -3.522287850e-04f, -6.184912964e-04f, +8.840778467e-04f, +5.035089837e-04f, -1.517182323e-03f, +1.968637598e-05f, +1.982662889e-03f, -9.133656519e-04f, -1.993822389e-03f, +1.919410225e-03f, +1.419628401e-03f, -2.657966449e-03f, -3.936863883e-04f, +2.822877675e-03f, -7.278325354e-04f, -2.352629094e-03f, +1.545349051e-03f, +1.462906510e-03f, -1.820697626e-03f, -5.197332231e-04f, +1.578383327e-03f, -1.594984803e-04f, -1.049669748e-03f, +4.484597407e-04f, +5.143607579e-04f, -4.216293789e-04f, -1.535048423e-04f, +2.535472158e-04f, -2.282161354e-06f, -9.596697517e-05f, +1.902443446e-05f, +1.665995399e-05f, +0.000000000e+00f, /* 9, 3 (40) */ +0.000000000e+00f, -6.273122648e-04f, -3.530683810e-04f, +1.939100543e-03f, +2.784596125e-04f, -4.349766805e-03f, +6.564105917e-04f, +8.116964324e-03f, -3.364729242e-03f, -1.331934216e-02f, +9.185335516e-03f, +1.983150570e-02f, -2.024174010e-02f, -2.745843181e-02f, +4.096830459e-02f, +3.653975089e-02f, -8.618350097e-02f, -5.158218950e-02f, +2.790749758e-01f, +5.297735986e-01f, +3.486441208e-01f, -7.199448081e-03f, -1.020413617e-01f, +1.773186632e-02f, +5.131855413e-02f, -1.805261313e-02f, -2.776939432e-02f, +1.528660661e-02f, +1.447459199e-02f, -1.144095074e-02f, -6.795227100e-03f, +7.602622062e-03f, +2.644260916e-03f, -4.407098558e-03f, -7.055839932e-04f, +2.130645290e-03f, +2.616793381e-05f, -7.636242585e-04f, +6.691198800e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.697179213e-05f, -5.366786361e-05f, -4.907838704e-05f, +1.502899857e-04f, +5.187593367e-05f, -3.203299372e-04f, +2.569795609e-06f, +5.793505348e-04f, -1.713818723e-04f, -9.359571487e-04f, +5.378792310e-04f, +1.401833611e-03f, -1.242845318e-03f, -2.043083219e-03f, +2.629851781e-03f, +3.290183488e-03f, -6.217635905e-03f, -1.197847955e-02f, -1.712666080e-03f, +1.104073040e-02f, +8.518771646e-03f, -1.887915150e-03f, -3.585531680e-03f, +1.347181810e-03f, +1.865339109e-03f, -1.067919359e-03f, -9.661812678e-04f, +8.011412946e-04f, +4.526367213e-04f, -5.482325946e-04f, -1.706955005e-04f, +3.336701967e-04f, +3.553783943e-05f, -1.738917470e-04f, +1.254691095e-05f, +7.158682972e-05f, -1.724426288e-05f, -1.783913596e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.273122648e-04f, +3.530683810e-04f, -2.708138013e-03f, +5.793208542e-04f, +6.024899606e-03f, -4.257242564e-03f, -9.214062214e-03f, +1.179843769e-02f, +9.408846001e-03f, -2.230781612e-02f, -3.616857248e-03f, +3.229947834e-02f, -9.152989753e-03f, -3.682672327e-02f, +2.636165241e-02f, +3.208016393e-02f, -4.237586587e-02f, -1.792847634e-02f, +5.102292356e-02f, -1.400978088e-03f, -4.885485145e-02f, +1.920043354e-02f, +3.703853782e-02f, -2.966720620e-02f, -2.062490717e-02f, +3.068121394e-02f, +5.717327375e-03f, -2.431514323e-02f, +3.581257773e-03f, +1.502136784e-02f, -6.605855196e-03f, -6.938526914e-03f, +5.415052624e-03f, +2.074929238e-03f, -2.853403927e-03f, -1.942461179e-04f, +7.636242585e-04f, -6.691198800e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.697179213e-05f, +5.366786361e-05f, +5.245783240e-05f, -2.379279690e-04f, +3.011285216e-05f, +4.709297982e-04f, -3.176913299e-04f, -6.456264225e-04f, +8.435634077e-04f, +5.661476899e-04f, -1.491032742e-03f, -7.922725540e-05f, +1.996355930e-03f, -7.955384059e-04f, -2.064871998e-03f, +1.814760920e-03f, +1.545555799e-03f, -2.599963312e-03f, -5.494381966e-04f, +2.830050922e-03f, -5.800135591e-04f, -2.419218187e-03f, +1.438788586e-03f, +1.562356451e-03f, -1.770015613e-03f, -6.186289941e-04f, +1.576121102e-03f, -8.592225231e-05f, -1.074415005e-03f, +4.081250930e-04f, +5.438400155e-04f, -4.077687376e-04f, -1.742957362e-04f, +2.533547466e-04f, +7.206093704e-06f, -9.896008361e-05f, +1.724426288e-05f, +1.783913596e-05f, +0.000000000e+00f, /* 9, 4 (40) */ +0.000000000e+00f, -6.003404726e-04f, -4.067362447e-04f, +1.890022156e-03f, +4.287495982e-04f, -4.297890872e-03f, +3.360806545e-04f, +8.119534120e-03f, -2.785378707e-03f, -1.349072404e-02f, +8.249378367e-03f, +2.036938493e-02f, -1.883990649e-02f, -2.870127713e-02f, +3.892522138e-02f, +3.916960267e-02f, -8.289331748e-02f, -5.779982541e-02f, +2.670964963e-01f, +5.280609325e-01f, +3.596848512e-01f, +1.319323565e-03f, -1.039292769e-01f, +1.414633464e-02f, +5.266573594e-02f, -1.618727402e-02f, -2.883731368e-02f, +1.432042534e-02f, +1.527573329e-02f, -1.098831402e-02f, -7.343459695e-03f, +7.431926562e-03f, +2.977931112e-03f, -4.371560718e-03f, -8.794757402e-04f, +2.143192201e-03f, +9.775476354e-05f, -7.808685214e-04f, +4.907285204e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.783727893e-05f, -5.068515312e-05f, -5.328832891e-05f, +1.453994474e-04f, +6.299774079e-05f, -3.148860417e-04f, -2.028160784e-05f, +5.770997631e-04f, -1.309993024e-04f, -9.440617580e-04f, +4.731572712e-04f, +1.432292819e-03f, -1.144060974e-03f, -2.116020483e-03f, +2.473012407e-03f, +3.443132409e-03f, -5.868346728e-03f, -1.203890744e-02f, -2.197023751e-03f, +1.083458553e-02f, +8.818554479e-03f, -1.642858602e-03f, -3.696239674e-03f, +1.223203506e-03f, +1.940946266e-03f, -1.003784947e-03f, -1.021560463e-03f, +7.708587210e-04f, +4.911943059e-04f, -5.368969955e-04f, -1.950841424e-04f, +3.317560647e-04f, +4.901761035e-05f, -1.755070633e-04f, +6.443829298e-06f, +7.357855293e-05f, -1.533790785e-05f, -1.899936450e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.003404726e-04f, +4.067362447e-04f, -2.655680181e-03f, +3.413928852e-04f, +6.055012458e-03f, -3.786312766e-03f, -9.531753544e-03f, +1.115281127e-02f, +1.025240941e-02f, -2.174166843e-02f, -5.107889989e-03f, +3.222025109e-02f, -7.156633823e-03f, -3.762226168e-02f, +2.429678041e-02f, +3.389492485e-02f, -4.083031007e-02f, -2.052843966e-02f, +5.047348537e-02f, +1.429072834e-03f, -4.943486501e-02f, +1.678121535e-02f, +3.847732640e-02f, -2.810484974e-02f, -2.239492279e-02f, +3.006258494e-02f, +7.293448477e-03f, -2.440106548e-02f, +2.506842768e-03f, +1.542949293e-02f, -6.062015180e-03f, -7.346295651e-03f, +5.240756887e-03f, +2.328283984e-03f, -2.846197833e-03f, -2.932062015e-04f, +7.808685214e-04f, -4.907285204e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.783727893e-05f, +5.068515312e-05f, +5.950795440e-05f, -2.327882978e-04f, +1.038686813e-05f, +4.735327339e-04f, -2.827311737e-04f, -6.703296232e-04f, +8.009387080e-04f, +6.263088608e-04f, -1.460509853e-03f, -1.770554280e-04f, +2.003772433e-03f, -6.759485959e-04f, -2.129209512e-03f, +1.704877822e-03f, +1.666412475e-03f, -2.534005390e-03f, -7.034738605e-04f, +2.828484546e-03f, -4.300846601e-04f, -2.478532739e-03f, +1.327289183e-03f, +1.657514825e-03f, -1.713467675e-03f, -7.164092911e-04f, +1.568895977e-03f, -1.125303696e-05f, -1.096077505e-03f, +3.659001780e-04f, +5.720639893e-04f, -3.923197286e-04f, -1.949655339e-04f, +2.523025512e-04f, +1.695180326e-05f, -1.016930039e-04f, +1.533790785e-05f, +1.899936450e-05f, +0.000000000e+00f, /* 9, 5 (40) */ +0.000000000e+00f, -5.725031937e-04f, -4.574213978e-04f, +1.836733827e-03f, +5.741490457e-04f, -4.234893131e-03f, +2.119461283e-05f, +8.099252512e-03f, -2.208278944e-03f, -1.362172334e-02f, +7.305316609e-03f, +2.084254221e-02f, -1.740761367e-02f, -2.984533810e-02f, +3.680920089e-02f, +4.164261508e-02f, -7.945018507e-02f, -6.366817214e-02f, +2.550575888e-01f, +5.258639088e-01f, +3.705194367e-01f, +1.013787804e-02f, -1.055721355e-01f, +1.045009497e-02f, +5.388893945e-02f, -1.424632776e-02f, -2.984109862e-02f, +1.329886488e-02f, +1.604659201e-02f, -1.049711971e-02f, -7.880356690e-03f, +7.236842420e-03f, +3.309687177e-03f, -4.322543108e-03f, -1.054982803e-03f, +2.149636030e-03f, +1.713333165e-04f, -7.962064292e-04f, +3.007348754e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.857347147e-05f, -4.763336528e-05f, -5.722263853e-05f, +1.401941747e-04f, +7.369666498e-05f, -3.086443671e-04f, -4.265680927e-05f, +5.732573706e-04f, -9.090865714e-05f, -9.494042749e-04f, +4.081178602e-04f, +1.458333504e-03f, -1.043697592e-03f, -2.182005593e-03f, +2.312509799e-03f, +3.583790178e-03f, -5.516048760e-03f, -1.208088148e-02f, -2.677663862e-03f, +1.061100191e-02f, +9.109057526e-03f, -1.387489687e-03f, -3.799176006e-03f, +1.093705953e-03f, +2.012390064e-03f, -9.358397985e-04f, -1.074927910e-03f, +7.379142543e-04f, +5.289853368e-04f, -5.238263198e-04f, -2.193548295e-04f, +3.288347151e-04f, +6.264100433e-05f, -1.766308406e-04f, +1.583525942e-07f, +7.539296666e-05f, -1.330803346e-05f, -2.013510604e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.725031937e-04f, +4.574213978e-04f, -2.596172226e-03f, +1.086045874e-04f, +6.065399326e-03f, -3.312780032e-03f, -9.814484717e-03f, +1.048248165e-02f, +1.105334812e-02f, -2.111535957e-02f, -6.568399842e-03f, +3.204319566e-02f, -5.152861390e-03f, -3.829821027e-02f, +2.216757090e-02f, +3.559980268e-02f, -3.916389760e-02f, -2.306244505e-02f, +4.977001151e-02f, +4.257557380e-03f, -4.986494967e-02f, +1.430268261e-02f, +3.980461559e-02f, -2.644733492e-02f, -2.410839046e-02f, +2.934617565e-02f, +8.862344454e-03f, -2.441231852e-02f, +1.410765263e-03f, +1.579539311e-02f, -5.489951191e-03f, -7.738615380e-03f, +5.045791354e-03f, +2.580586535e-03f, -2.829246030e-03f, -3.948992054e-04f, +7.962064292e-04f, -3.007348754e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.857347147e-05f, +4.763336528e-05f, +6.614081253e-05f, -2.270093316e-04f, -8.936416261e-06f, +4.745718276e-04f, -2.474682509e-04f, -6.925574664e-04f, +7.563664866e-04f, +6.838301498e-04f, -1.425752763e-03f, -2.734999243e-04f, +2.004933884e-03f, -5.549808657e-04f, -2.186665243e-03f, +1.590122586e-03f, +1.781833104e-03f, -2.460308630e-03f, -8.553124615e-04f, +2.818174904e-03f, -2.785105402e-04f, -2.530363307e-03f, +1.211179078e-03f, +1.748058174e-03f, -1.651191985e-03f, -8.127554692e-04f, +1.556683522e-03f, +6.428265365e-05f, -1.114548639e-03f, +3.218946234e-04f, +5.989197119e-04f, -3.753040453e-04f, -2.154417879e-04f, +2.503732986e-04f, +2.692706094e-05f, -1.041465109e-04f, +1.330803346e-05f, +2.013510604e-05f, +0.000000000e+00f, /* 9, 6 (40) */ +0.000000000e+00f, -5.439297222e-04f, -5.050547631e-04f, +1.779511189e-03f, +7.143432204e-04f, -4.161196466e-03f, -2.874497542e-04f, +8.056595703e-03f, -1.635021573e-03f, -1.371263200e-02f, +6.355912334e-03f, +2.125066007e-02f, -1.594928017e-02f, -3.088903570e-02f, +3.462719530e-02f, +4.395512488e-02f, -7.586639489e-02f, -6.918422090e-02f, +2.429767073e-01f, +5.231862449e-01f, +3.811304387e-01f, +1.924693557e-02f, -1.069596252e-01f, +6.650918960e-03f, +5.498264540e-02f, -1.223393769e-02f, -3.077693842e-02f, +1.222393697e-02f, +1.678450626e-02f, -9.968134376e-03f, -8.404183010e-03f, +7.017487590e-03f, +3.638521892e-03f, -4.259902104e-03f, -1.231613644e-03f, +2.149794383e-03f, +2.467262831e-04f, -8.095144627e-04f, +9.938381493e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.918207680e-05f, -4.452458790e-05f, -6.087609675e-05f, +1.346972455e-04f, +8.394987165e-05f, -3.016386006e-04f, -6.449991268e-05f, +5.678613416e-04f, -5.121857295e-05f, -9.520126834e-04f, +3.429465880e-04f, +1.479950966e-03f, -9.420521158e-04f, -2.240976259e-03f, +2.148822212e-03f, +3.712079088e-03f, -5.161453937e-03f, -1.210446776e-02f, -3.153775873e-03f, +1.037026947e-02f, +9.389627448e-03f, -1.122166887e-03f, -3.893927662e-03f, +9.589428966e-04f, +2.079408200e-03f, -8.642142097e-04f, -1.126102485e-03f, +7.023597721e-04f, +5.658891074e-04f, -5.090289217e-04f, -2.434344664e-04f, +3.248953579e-04f, +7.636999562e-05f, -1.772483334e-04f, -6.294207036e-06f, +7.701890551e-05f, -1.115783486e-05f, -2.124074400e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.439297222e-04f, +5.050547631e-04f, -2.530031414e-03f, -1.184047442e-04f, +6.056462910e-03f, -2.838208205e-03f, -1.006195297e-02f, +9.789924182e-03f, +1.180971460e-02f, -2.043152942e-02f, -7.994152605e-03f, +3.176969573e-02f, -3.147927506e-03f, -3.885319114e-02f, +1.998090565e-02f, +3.718992526e-02f, -3.738206449e-02f, -2.552275368e-02f, +4.891469905e-02f, +7.075732284e-03f, -5.014346021e-02f, +1.177231930e-02f, +4.101579467e-02f, -2.469927675e-02f, -2.575958245e-02f, +2.853342018e-02f, +1.041902798e-02f, -2.434803587e-02f, +2.962166243e-04f, +1.611728773e-02f, -4.891031479e-03f, -8.113919425e-03f, +4.830349566e-03f, +2.830959834e-03f, -2.802318969e-03f, -4.990457162e-04f, +8.095144627e-04f, -9.938381493e-06f, +0.000000000e+00f, +0.000000000e+00f, -2.918207680e-05f, +4.452458790e-05f, +7.234479279e-05f, -2.206266656e-04f, -2.780137444e-05f, +4.740733165e-04f, -2.120215373e-04f, -7.122752061e-04f, +7.100137044e-04f, +7.385594970e-04f, -1.386912755e-03f, -3.682694225e-04f, +1.999881476e-03f, -4.330219789e-04f, -2.237092061e-03f, +1.470870997e-03f, +1.891470399e-03f, -2.379113140e-03f, -1.004480095e-03f, +2.799145988e-03f, -1.257620654e-04f, -2.574523496e-03f, +1.090802571e-03f, +1.833675941e-03f, -1.583345947e-03f, -9.073509170e-04f, +1.539475140e-03f, +1.404530410e-04f, -1.129728864e-03f, +2.762254699e-04f, +6.242969676e-04f, -3.567490754e-04f, -2.356512299e-04f, +2.475523674e-04f, +3.710236442e-05f, -1.063018892e-04f, +1.115783486e-05f, +2.124074400e-05f, +0.000000000e+00f, /* 9, 7 (40) */ +0.000000000e+00f, -5.147476454e-04f, -5.495793510e-04f, +1.718635092e-03f, +8.490404659e-04f, -4.077246594e-03f, -5.890883548e-04f, +7.992095790e-03f, -1.067160232e-03f, -1.376385057e-02f, +5.403899651e-03f, +2.159360665e-02f, -1.446932920e-02f, -3.183108781e-02f, +3.238621904e-02f, +4.610394709e-02f, -7.215431580e-02f, -7.434567483e-02f, +2.308722396e-01f, +5.200324690e-01f, +3.915007081e-01f, +2.863656302e-02f, -1.080817921e-01f, +2.756991298e-03f, +5.594158830e-02f, -1.015452949e-02f, -3.164115263e-02f, +1.109783448e-02f, +1.748686604e-02f, -9.402245269e-03f, -8.913211932e-03f, +6.774053124e-03f, +3.963417250e-03f, -4.183532108e-03f, -1.408861977e-03f, +2.143500175e-03f, +3.237451886e-04f, -8.206722976e-04f, -1.130236251e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.966521518e-05f, -4.137077124e-05f, -6.424451154e-05f, +1.289321237e-04f, +9.373633740e-05f, -2.939040512e-04f, -8.575756238e-05f, +5.609534982e-04f, -1.203482045e-05f, -9.519222367e-04f, +2.778266412e-04f, +1.497152711e-03f, -8.394204909e-04f, -2.292889502e-03f, +1.982427921e-03f, +3.827949833e-03f, -4.805271585e-03f, -1.210976765e-02f, -3.624558540e-03f, +1.011271235e-02f, +9.659625154e-03f, -8.472749576e-04f, -3.980094595e-03f, +8.191859473e-04f, +2.141746337e-03f, -7.890506312e-04f, -1.174906500e-03f, +6.642553817e-04f, +6.017855469e-04f, -4.925183278e-04f, -2.672492328e-04f, +3.199300511e-04f, +9.016546299e-05f, -1.773460538e-04f, -1.289762441e-05f, +7.844554178e-05f, -8.891041164e-06f, -2.231059876e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.147476454e-04f, +5.495793510e-04f, -2.457686621e-03f, -3.390314097e-04f, +6.028661535e-03f, -2.364134888e-03f, -1.027397451e-02f, +9.077648976e-03f, +1.251972831e-02f, -1.969296993e-02f, -9.381065360e-03f, +3.140142631e-02f, -1.148046030e-03f, -3.928621312e-02f, +1.774381359e-02f, +3.866079626e-02f, -3.549059409e-02f, -2.790186682e-02f, +4.791021895e-02f, +9.874878272e-03f, -5.026922227e-02f, +9.197795807e-03f, +4.210659724e-02f, -2.286560080e-02f, -2.734292839e-02f, +2.762606927e-02f, +1.195850312e-02f, -2.420758283e-02f, -8.335122396e-04f, +1.639351320e-02f, -4.266734511e-03f, -8.470668501e-03f, +4.594698336e-03f, +3.078512201e-03f, -2.765216605e-03f, -6.053476054e-04f, +8.206722976e-04f, +1.130236251e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.966521518e-05f, +4.137077124e-05f, +7.811016640e-05f, -2.136771647e-04f, -4.615510668e-05f, +4.720680878e-04f, -1.765086660e-04f, -7.294567753e-04f, +6.620509438e-04f, +7.903555101e-04f, -1.344152686e-03f, -4.610803787e-04f, +1.988675834e-03f, -3.104595657e-04f, -2.280365757e-03f, +1.347511719e-03f, +1.994996168e-03f, -2.290682395e-03f, -1.150511382e-03f, +2.771449368e-03f, +2.768522710e-05f, -2.610850631e-03f, +9.665189953e-04f, +1.914071544e-03f, -1.510105810e-03f, -9.998821001e-04f, +1.517278249e-03f, +2.170217854e-04f, -1.141528149e-03f, +2.290168826e-04f, +6.480887084e-04f, -3.366879062e-04f, -2.555200118e-04f, +2.438279597e-04f, +4.744668640e-05f, -1.081410225e-04f, +8.891041164e-06f, +2.231059876e-05f, +0.000000000e+00f, /* 9, 8 (40) */ +0.000000000e+00f, -4.850824302e-04f, -5.909501222e-04f, +1.654390580e-03f, +9.779725896e-04f, -3.983510257e-03f, -8.829924060e-04f, +7.906338228e-03f, -5.062067334e-04f, -1.377588539e-02f, +4.451977414e-03f, +2.187143329e-02f, -1.297217649e-02f, -3.267050830e-02f, +3.009332954e-02f, +4.808637501e-02f, -6.832636597e-02f, -7.915094642e-02f, +2.187624719e-01f, +5.164079105e-01f, +4.016134205e-01f, +3.829618817e-02f, -1.089290670e-01f, -1.223103297e-03f, +5.676077424e-02f, -8.012783156e-03f, -3.243020326e-02f, +9.922927981e-03f, +1.815112142e-02f, -8.800459722e-03f, -9.405730259e-03f, +6.506803891e-03f, +4.283347301e-03f, -4.093366645e-03f, -1.586208031e-03f, +2.130602551e-03f, +4.021907304e-04f, -8.295633387e-04f, -3.361296126e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.002540106e-05f, -3.818369075e-05f, -6.732470766e-05f, +1.229225772e-04f, +1.030368784e-04f, -2.854775143e-04f, -1.063790562e-04f, +5.525793165e-04f, +2.653995388e-05f, -9.491752487e-04f, +2.129383280e-04f, +1.509958254e-03f, -7.360968874e-04f, -2.337721486e-03f, +1.813804071e-03f, +3.931381301e-03f, -4.448206912e-03f, -1.209691739e-02f, -4.089221553e-03f, +9.838688335e-03f, +9.918427271e-03f, -5.632243356e-04f, -4.057290844e-03f, +6.747241509e-04f, +2.199158900e-03f, -7.105034497e-04f, -1.221166251e-03f, +6.236693718e-04f, +6.365555774e-04f, -4.743132810e-04f, -2.907247910e-04f, +3.139337773e-04f, +1.039872891e-04f, -1.769118413e-04f, -1.963479337e-05f, +7.966243098e-05f, -6.511916378e-06f, -2.333894834e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.850824302e-04f, +5.909501222e-04f, -2.379576454e-03f, -5.527085745e-04f, +5.982506429e-03f, -1.892066800e-03f, -1.045048317e-02f, +8.348192201e-03f, +1.318177925e-02f, -1.890261442e-02f, -1.072521805e-02f, +3.094034593e-02f, +8.406298037e-04f, -3.959667268e-02f, +1.546344784e-02f, +4.000830798e-02f, -3.349559792e-02f, -3.019254921e-02f, +4.675970757e-02f, +1.264632764e-02f, -5.024153705e-02f, +6.586945176e-03f, +4.307311623e-02f, -2.095152926e-02f, -2.885303420e-02f, +2.662618717e-02f, +1.347578136e-02f, -2.399056104e-02f, -1.975040388e-03f, +1.662253008e-02f, -3.618645803e-03f, -8.807356407e-03f, +4.339178324e-03f, +3.322340161e-03f, -2.717769918e-03f, -7.134886279e-04f, +8.295633387e-04f, +3.361296126e-05f, +0.000000000e+00f, +0.000000000e+00f, -3.002540106e-05f, +3.818369075e-05f, +8.342907803e-05f, -2.061988025e-04f, -6.394756893e-05f, +4.685914899e-04f, -1.410455555e-04f, -7.440847489e-04f, +6.126518040e-04f, +8.390878083e-04f, -1.297646345e-03f, -5.516578768e-04f, +1.971396687e-03f, -1.876808763e-04f, -2.316385335e-03f, +1.220445003e-03f, +2.092102327e-03f, -2.195302367e-03f, -1.292950954e-03f, +2.735164053e-03f, +1.813526412e-04f, -2.639206348e-03f, +8.387016222e-04f, +1.988963407e-03f, -1.431666225e-03f, -1.090039604e-03f, +1.490116400e-03f, +2.937487134e-04f, -1.149866382e-03f, +1.803998335e-04f, +6.701914660e-04f, -3.151593111e-04f, -2.749739539e-04f, +2.391912064e-04f, +5.792755312e-05f, -1.096464823e-04f, +6.511916378e-06f, +2.333894834e-05f, +0.000000000e+00f, /* 9, 9 (40) */ +0.000000000e+00f, -4.550570292e-04f, -6.291338129e-04f, +1.587065873e-03f, +1.100895167e-03f, -3.880473378e-03f, -1.168469920e-03f, +7.799959172e-03f, +4.637258314e-05f, -1.374934544e-02f, +3.502802165e-03f, +2.208437162e-02f, -1.146221824e-02f, -3.340660519e-02f, +2.775560805e-02f, +4.990017908e-02f, -6.439498467e-02f, -8.359915333e-02f, +2.066655545e-01f, +5.123186890e-01f, +4.114521088e-01f, +4.821461544e-02f, -1.094922914e-01f, -5.280394140e-03f, +5.743549839e-02f, -5.813624256e-03f, -3.314070671e-02f, +8.701761730e-03f, +1.877479079e-02f, -8.163904144e-03f, -9.880043540e-03f, +6.216079100e-03f, +4.597281078e-03f, -3.989379356e-03f, -1.763119873e-03f, +2.110967758e-03f, +4.818531614e-04f, -8.360752551e-04f, -5.695190960e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.026552314e-05f, -3.497491124e-05f, -7.011451321e-05f, +1.166925968e-04f, +1.118341724e-04f, -2.763971337e-04f, -1.263164487e-04f, +5.427877350e-04f, +6.440647307e-05f, -9.438208686e-04f, +1.484586174e-04f, +1.518398899e-03f, -6.323729384e-04f, -2.375467304e-03f, +1.643425534e-03f, +4.022380306e-03f, -4.090959519e-03f, -1.206608769e-02f, -4.546987151e-03f, +9.548588231e-03f, +1.016542758e-02f, -2.704504794e-04f, -4.125145637e-03f, +5.258635010e-04f, +2.251409867e-03f, -6.287387368e-04f, -1.264712566e-03f, +5.806781401e-04f, +6.700814743e-04f, -4.544377708e-04f, -3.137864980e-04f, +3.069045119e-04f, +1.177944647e-04f, -1.759349294e-04f, -2.648776246e-05f, +8.065955729e-05f, -4.025258508e-06f, -2.432004984e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.550570292e-04f, +6.291338129e-04f, -2.296147376e-03f, -7.589073770e-04f, +5.918558860e-03f, -1.423475310e-03f, -1.059152873e-02f, +7.604107452e-03f, +1.379443106e-02f, -1.806352661e-02f, -1.202286439e-02f, +3.038868806e-02f, +2.812026491e-03f, -3.978435356e-02f, +1.314706250e-02f, +4.122875298e-02f, -3.140349560e-02f, -3.238785158e-02f, +4.546675661e-02f, +1.538149169e-02f, -5.006018440e-02f, +3.947738828e-03f, +4.391181785e-02f, -1.896256585e-02f, -3.028470043e-02f, +2.553614756e-02f, +1.496589776e-02f, -2.369681233e-02f, -3.124906771e-03f, +1.680292992e-02f, -2.948454337e-03f, -9.122515718e-03f, +4.064204370e-03f, +3.561531368e-03f, -2.659842365e-03f, -8.231351102e-04f, +8.360752551e-04f, +5.695190960e-05f, +0.000000000e+00f, +0.000000000e+00f, -3.026552314e-05f, +3.497491124e-05f, +8.829552714e-05f, -1.982304998e-04f, -8.113168891e-05f, +4.636831315e-04f, -1.057460482e-04f, -7.561502784e-04f, +5.619922933e-04f, +8.846373242e-04f, -1.247577785e-03f, -6.397364432e-04f, +1.948142476e-03f, -6.507154126e-05f, -2.345073229e-03f, +1.090081376e-03f, +2.182501822e-03f, -2.093280578e-03f, -1.431354905e-03f, +2.690396264e-03f, +3.347598469e-04f, -2.659477117e-03f, +7.077365253e-04f, +2.058085942e-03f, -1.348239735e-03f, -1.177519168e-03f, +1.458029351e-03f, +3.703905661e-04f, -1.154673760e-03f, +1.305117571e-04f, +6.905057570e-04f, -2.922077150e-04f, -2.939387987e-04f, +2.336362639e-04f, +6.851113018e-05f, -1.108016165e-04f, +4.025258508e-06f, +2.432004984e-05f, +0.000000000e+00f, /* 9,10 (40) */ +0.000000000e+00f, -4.247915060e-04f, -6.641087242e-04f, +1.516951359e-03f, +1.217587764e-03f, -3.768639206e-03f, -1.444867054e-03f, +7.673642723e-03f, +5.891603182e-04f, -1.368493896e-02f, +2.558981297e-03f, +2.223283024e-02f, -9.943819336e-03f, -3.403897813e-02f, +2.538014075e-02f, +5.154360462e-02f, -6.037260436e-02f, -8.769011285e-02f, +1.945994668e-01f, +5.077717018e-01f, +4.210006970e-01f, +5.838004303e-02f, -1.097627418e-01f, -9.405539777e-03f, +5.796136190e-02f, -3.562214389e-03f, -3.376944545e-02f, +7.437049164e-03f, +1.935546893e-02f, -7.493822670e-03f, -1.033448131e-02f, +5.902292602e-03f, +4.904185590e-03f, -3.871584891e-03f, -1.939054802e-03f, +2.084479995e-03f, +5.625127187e-04f, -8.401005136e-04f, -8.127195944e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.038882345e-05f, -3.175575267e-05f, -7.261274324e-05f, +1.102663162e-04f, +1.201127747e-04f, -2.667022623e-04f, -1.455246449e-04f, +5.316309555e-04f, +1.014690617e-04f, -9.359148400e-04f, +8.456069436e-05f, +1.522517476e-03f, -5.285369950e-04f, -2.406140717e-03f, +1.471763790e-03f, +4.100981252e-03f, -3.734221936e-03f, -1.201748315e-02f, -4.997091712e-03f, +9.242835135e-03f, +1.040003843e-02f, +3.058685352e-05f, -4.183304467e-03f, +3.729264058e-04f, +2.298273532e-03f, -5.439339613e-04f, -1.305381341e-03f, +5.353660973e-04f, +7.022472270e-04f, -4.329210476e-04f, -3.363596225e-04f, +2.988432843e-04f, +1.315451980e-04f, -1.744060091e-04f, -3.343777417e-05f, +8.142737847e-05f, -1.436396644e-06f, -2.524816144e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.247915060e-04f, +6.641087242e-04f, -2.207851849e-03f, -9.571378768e-04f, +5.837427171e-03f, -9.597921789e-04f, -1.069727478e-02f, +6.847957174e-03f, +1.435642335e-02f, -1.717888928e-02f, -1.327044218e-02f, +2.974895161e-02f, +4.760168967e-03f, -3.984942510e-02f, +1.080198927e-02f, +4.231883436e-02f, -2.922099377e-02f, -3.448113216e-02f, +4.403540171e-02f, +1.807188796e-02f, -4.972542456e-02f, +1.288261711e-03f, +4.461955438e-02f, -1.690447991e-02f, -3.163294016e-02f, +2.435862839e-02f, +1.642392712e-02f, -2.332642176e-02f, -4.279580531e-03f, +1.693344167e-02f, -2.257948580e-03f, -9.414723433e-03f, +3.770265571e-03f, +3.795167631e-03f, -2.591331235e-03f, -9.339367267e-04f, +8.401005136e-04f, +8.127195944e-05f, +0.000000000e+00f, +0.000000000e+00f, -3.038882345e-05f, +3.175575267e-05f, +9.270534274e-05f, -1.898119631e-04f, -9.766346956e-05f, +4.573866696e-04f, -7.072156256e-05f, -7.656529984e-04f, +5.102502210e-04f, +9.268965660e-04f, -1.194140631e-03f, -7.250608239e-04f, +1.919029903e-03f, +5.698565503e-05f, -2.366375433e-03f, +9.568402833e-04f, +2.265929507e-03f, -1.984945093e-03f, -1.565292203e-03f, +2.637279115e-03f, +4.874264133e-04f, -2.671574675e-03f, +5.740213917e-04f, +2.121190497e-03f, -1.260056211e-03f, -1.262022715e-03f, +1.421073082e-03f, +4.467017651e-04f, -1.155891140e-03f, +7.949617923e-05f, +7.089364809e-04f, -2.678831402e-04f, -3.123404704e-04f, +2.271604025e-04f, +7.916231559e-05f, -1.115906368e-04f, +1.436396644e-06f, +2.524816144e-05f, +0.000000000e+00f, /* 9,11 (40) */ +0.000000000e+00f, -3.944026826e-04f, -6.958644769e-04f, +1.444338616e-03f, +1.327854080e-03f, -3.648526431e-03f, -1.711569316e-03f, +7.528118078e-03f, +1.120791274e-03f, -1.358346990e-02f, +1.623066457e-03f, +2.231739093e-02f, -8.421301860e-03f, -3.456751512e-02f, +2.297400003e-02f, +5.301536841e-02f, -5.627162311e-02f, -9.142433479e-02f, +1.825819837e-01f, +5.027746101e-01f, +4.302435322e-01f, +6.878008146e-02f, -1.097321550e-01f, -1.358884424e-02f, +5.833428830e-02f, -1.263940857e-03f, -3.431337941e-02f, +6.131667824e-03f, +1.989083503e-02f, -6.791575443e-03f, -1.076740236e-02f, +5.565932979e-03f, +5.203028875e-03f, -3.740039693e-03f, -2.113460811e-03f, +2.051042221e-03f, +6.439400972e-04f, -8.415369103e-04f, -1.065201209e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.039887583e-05f, -2.853725754e-05f, -7.481918043e-05f, +1.036679328e-04f, +1.278591280e-04f, -2.564333221e-04f, -1.639614834e-04f, +5.191642378e-04f, +1.376358638e-04f, -9.255192434e-04f, +2.141353182e-05f, +1.522368065e-03f, -4.248734012e-04f, -2.429773852e-03f, +1.299285828e-03f, +4.167245739e-03f, -3.378678185e-03f, -1.195134171e-02f, -5.438787302e-03f, +8.921883660e-03f, +1.062169210e-02f, +3.394043914e-04f, -4.231430134e-03f, +2.162511058e-04f, +2.339535262e-03f, -4.562776664e-04f, -1.343014081e-03f, +4.878255463e-04f, +7.329389011e-04f, -4.097976228e-04f, -3.583695657e-04f, +2.897542300e-04f, +1.451970278e-04f, -1.723172887e-04f, -4.046530777e-05f, +8.195687024e-05f, +1.248813931e-06f, -2.611756503e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.944026826e-04f, +6.958644769e-04f, -2.115146507e-03f, -1.146949840e-03f, +5.739763701e-03f, -5.024055093e-04f, -1.076799634e-02f, +6.082304175e-03f, +1.486667357e-02f, -1.625199272e-02f, -1.446458281e-02f, +2.902389079e-02f, +6.679198870e-03f, -3.979243945e-02f, +8.435613839e-03f, +4.327567464e-02f, -2.695506427e-02f, -3.646607725e-02f, +4.247010951e-02f, +2.070916707e-02f, -4.923799814e-02f, -1.383312964e-03f, +4.519357577e-02f, -1.478328941e-02f, -3.289299638e-02f, +2.309660568e-02f, +1.784500020e-02f, -2.287972000e-02f, -5.435471671e-03f, +1.701293785e-02f, -1.549012099e-03f, -9.682606573e-03f, +3.457925101e-03f, +4.022328034e-03f, -2.512168919e-03f, -1.045527363e-03f, +8.415369103e-04f, +1.065201209e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.039887583e-05f, +2.853725754e-05f, +9.665615182e-05f, -1.809835241e-04f, -1.135020794e-04f, +4.497495869e-04f, -3.608075842e-05f, -7.726009063e-04f, +4.576045913e-04f, +9.657698389e-04f, -1.137537353e-03f, -8.073867218e-04f, +1.884193427e-03f, +1.781119850e-04f, -2.380261573e-03f, +8.211487210e-04f, +2.342142925e-03f, -1.870643441e-03f, -1.694346065e-03f, +2.575972209e-03f, +6.388733453e-04f, -2.675436391e-03f, +4.379642943e-04f, +2.178046240e-03f, -1.167362215e-03f, -1.343259367e-03f, +1.379319762e-03f, +5.224351940e-04f, -1.153470363e-03f, +2.750232073e-05f, +7.253933090e-04f, -2.422411314e-04f, -3.301053375e-04f, +2.197640842e-04f, +8.984483985e-05f, -1.119987057e-04f, -1.248813931e-06f, +2.611756503e-05f, +0.000000000e+00f, /* 9,12 (40) */ +0.000000000e+00f, -3.640038068e-04f, -7.244017344e-04f, +1.369519436e-03f, +1.431522013e-03f, -3.520667303e-03f, -1.968002638e-03f, +7.364156595e-03f, +1.639955511e-03f, -1.344583404e-02f, +6.975472133e-04f, +2.233880447e-02f, -6.898933795e-03f, -3.499238852e-02f, +2.054422618e-02f, +5.431465423e-02f, -5.210437737e-02f, -9.480301297e-02f, +1.706306420e-01f, +4.973358228e-01f, +4.391654158e-01f, +7.940177356e-02f, -1.093927506e-01f, -1.782027438e-02f, +5.855053941e-02f, +1.075594405e-03f, -3.476965708e-02f, +4.788653743e-03f, +2.037866057e-02f, -6.058636542e-03f, -1.117719998e-02f, +5.207563414e-03f, +5.492783105e-03f, -3.594842665e-03f, -2.285778100e-03f, +2.010576913e-03f, +7.258969674e-04f, -8.402880963e-04f, -1.326376859e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.029956355e-05f, -2.533016005e-05f, -7.673455300e-05f, +9.692163009e-05f, +1.350615662e-04f, -2.456316624e-04f, -1.815878095e-04f, +5.054456894e-04f, +1.728190469e-04f, -9.127022261e-04f, -4.081851943e-05f, +1.518015683e-03f, -3.216617875e-04f, -2.446416853e-03f, +1.126453069e-03f, +4.221262112e-03f, -3.025002365e-03f, -1.186793396e-02f, -5.871343198e-03f, +8.586219074e-03f, +1.082984213e-02f, +6.554961931e-04f, -4.269203766e-03f, +5.619104480e-05f, +2.374992228e-03f, -3.659691126e-04f, -1.377458422e-03f, +4.381565367e-04f, +7.620449998e-04f, -3.851072520e-04f, -3.797420848e-04f, +2.796446348e-04f, +1.587069418e-04f, -1.696625512e-04f, -4.755012547e-05f, +8.223956993e-05f, +4.023998668e-06f, -2.692258929e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.640038068e-04f, +7.244017344e-04f, -2.018490355e-03f, -1.327933364e-03f, +5.626261622e-03f, -5.265592234e-05f, -1.080407710e-02f, +5.309703269e-03f, +1.532427816e-02f, -1.528622288e-02f, -1.560212016e-02f, +2.821650407e-02f, +8.563392298e-03f, -3.961432746e-02f, +6.055352266e-03f, +4.409682336e-02f, -2.461292134e-02f, -3.833672069e-02f, +4.077576344e-02f, +2.328513928e-02f, -4.859912480e-02f, -4.058749355e-03f, +4.563154007e-02f, -1.260524317e-02f, -3.406035859e-02f, +2.175334631e-02f, +1.922431996e-02f, -2.235728480e-02f, -6.588942035e-03f, +1.704044017e-02f, -8.236187902e-04f, -9.924847704e-03f, +3.127819764e-03f, +4.242092118e-03f, -2.422324079e-03f, -1.157526069e-03f, +8.402880963e-04f, +1.326376859e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.029956355e-05f, +2.533016005e-05f, +1.001473417e-04f, -1.717859800e-04f, -1.286099302e-04f, +4.408229601e-04f, -1.929217109e-06f, -7.770102152e-04f, +4.042349999e-04f, +1.001173424e-03f, -1.077978527e-03f, -8.864814924e-04f, +1.843784705e-03f, +2.979339676e-04f, -2.386724879e-03f, +6.834398429e-04f, +2.410923030e-03f, -1.750741478e-03f, -1.818115282e-03f, +2.506661150e-03f, +7.886246180e-04f, -2.671025537e-03f, +2.999824235e-04f, +2.228440998e-03f, -1.070420316e-03f, -1.420946441e-03f, +1.332857660e-03f, +5.973429932e-04f, -1.147374546e-03f, -2.531532391e-05f, +7.397910623e-04f, -2.153426602e-04f, -3.471604799e-04f, +2.114510313e-04f, +1.005213727e-04f, -1.120120209e-04f, -4.023998668e-06f, +2.692258929e-05f, +0.000000000e+00f, /* 9,13 (40) */ +0.000000000e+00f, -3.337042432e-04f, -7.497318944e-04f, +1.292784883e-03f, +1.528443643e-03f, -3.385605737e-03f, -2.213634301e-03f, +7.182568785e-03f, +2.145401201e-03f, -1.327301499e-02f, -2.151550127e-04f, +2.229798595e-02f, -5.380918111e-03f, -3.531405031e-02f, +1.809780933e-02f, +5.544110730e-02f, -4.788311526e-02f, -9.782801534e-02f, +1.587627080e-01f, +4.914644796e-01f, +4.477516349e-01f, +9.023161569e-02f, -1.087372544e-01f, -2.208947814e-02f, +5.860673045e-02f, +3.450586633e-03f, -3.513562619e-02f, +3.411195321e-03f, +2.081681711e-02f, -5.296591542e-03f, -1.156230723e-02f, +4.827821329e-03f, +5.772427739e-03f, -3.436135723e-03f, -2.455440651e-03f, +1.963026788e-03f, +8.081365373e-04f, -8.362640977e-04f, -1.595602752e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.009505649e-05f, -2.214485708e-05f, -7.836051003e-05f, +9.005150179e-05f, +1.417103121e-04f, -2.343394191e-04f, -1.983675388e-04f, +4.905360490e-04f, +2.069349908e-04f, -8.975377174e-04f, -1.019761223e-04f, +1.509535950e-03f, -2.191763885e-04f, -2.456137496e-03f, +9.537203194e-04f, +4.263144944e-03f, -2.673857280e-03f, -1.176756244e-02f, -6.294047364e-03f, +8.236356381e-03f, +1.102396466e-02f, +9.783345528e-04f, -4.296325801e-03f, -1.068858057e-04f, +2.404454123e-03f, -2.732178855e-04f, -1.408568650e-03f, +3.864666965e-04f, +7.894568231e-04f, -3.588949042e-04f, -4.004035202e-04f, +2.685249696e-04f, +1.720314979e-04f, -1.664372060e-04f, -5.467132202e-05f, +8.226761923e-05f, +6.882272725e-06f, -2.765763321e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.337042432e-04f, +7.497318944e-04f, -1.918343013e-03f, -1.499719344e-03f, +5.497651691e-03f, +3.881670377e-04f, -1.080600631e-02f, +4.532693054e-03f, +1.572851316e-02f, -1.428504945e-02f, -1.668009869e-02f, +2.733002257e-02f, +1.040717700e-02f, -3.931639349e-02f, +3.668627387e-03f, +4.478026320e-02f, -2.220199831e-02f, -4.008746217e-02f, +3.895764816e-02f, +2.579180043e-02f, -4.781050018e-02f, -6.729774892e-03f, +4.593152249e-02f, -1.037680218e-02f, -3.513077891e-02f, +2.033239987e-02f, +2.055717762e-02f, -2.175994181e-02f, -7.736316581e-03f, +1.701512485e-02f, -8.382772788e-05f, -1.014019036e-02f, +2.780659284e-03f, +4.453543149e-03f, -2.321802707e-03f, -1.269538090e-03f, +8.362640977e-04f, +1.595602752e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.009505649e-05f, +2.214485708e-05f, +1.031800165e-04f, -1.622604362e-04f, -1.429527411e-04f, +4.306612196e-04f, +3.163086284e-05f, -7.789051815e-04f, +3.503210368e-04f, +1.033035717e-03f, -1.015682073e-03f, -9.621247953e-04f, +1.797971976e-03f, +4.160845349e-04f, -2.385782103e-03f, +5.441515527e-04f, +2.472074827e-03f, -1.625622197e-03f, -1.936215494e-03f, +2.429556966e-03f, +9.362087048e-04f, -2.658331485e-03f, +1.605007859e-04f, +2.272182037e-03f, -9.695083428e-04f, -1.494810429e-03f, +1.281791000e-03f, +6.711773652e-04f, -1.137578335e-03f, -7.879743099e-05f, +7.520500784e-04f, -1.872540094e-04f, -3.634339578e-04f, +2.022282840e-04f, +1.111536367e-04f, -1.116178988e-04f, -6.882272725e-06f, +2.765763321e-05f, +0.000000000e+00f, /* 9,14 (40) */ +0.000000000e+00f, -3.036091867e-04f, -7.718767515e-04f, +1.214424373e-03f, +1.618495145e-03f, -3.243895425e-03f, -2.447973720e-03f, +6.984201246e-03f, +2.635937250e-03f, -1.306608000e-02f, -1.112692730e-03f, +2.219600982e-02f, -3.871382161e-03f, -3.553322670e-02f, +1.564167183e-02f, +5.639482762e-02f, -4.361997031e-02f, -1.005018726e-01f, +1.469951456e-01f, +4.851704322e-01f, +4.559879913e-01f, +1.012555804e-01f, -1.077589198e-01f, -2.638580394e-02f, +5.849984465e-02f, +5.855040756e-03f, -3.540884407e-02f, +2.002626671e-03f, +2.120328381e-02f, -4.507134719e-03f, -1.192120214e-02f, +4.427417809e-03f, +6.040952709e-03f, -3.264104226e-03f, -2.621877857e-03f, +1.908355466e-03f, +8.904041566e-04f, -8.293818249e-04f, -1.872179084e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.978978772e-05f, -1.899138096e-05f, -7.969959423e-05f, +8.308147782e-05f, +1.477974694e-04f, -2.225993727e-04f, -2.142677093e-04f, +4.744984666e-04f, +2.399044616e-04f, -8.801051325e-04f, -1.619053252e-04f, +1.497014728e-03f, -1.176853828e-04f, -2.459020753e-03f, +7.815347469e-04f, +4.293034467e-03f, -2.325893097e-03f, -1.165056078e-02f, -6.706207893e-03f, +7.872839323e-03f, +1.120355962e-02f, +1.307370962e-03f, -4.312516933e-03f, -2.725976668e-04f, +2.427743841e-03f, -1.782434709e-04f, -1.436206201e-03f, +3.328710381e-04f, +8.150688250e-04f, -3.312107135e-04f, -4.202810237e-04f, +2.564089168e-04f, +1.851269497e-04f, -1.626383379e-04f, -6.180737756e-05f, +8.203380579e-05f, +9.816251999e-06f, -2.831718992e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.036091867e-04f, +7.718767515e-04f, -1.815162996e-03f, -1.661979780e-03f, +5.354698950e-03f, +8.188282573e-04f, -1.077437545e-02f, +3.753787872e-03f, +1.607883420e-02f, -1.325201374e-02f, -1.769578076e-02f, +2.636789778e-02f, +1.220514898e-02f, -3.890030896e-02f, +1.282845284e-03f, +4.532441476e-02f, -1.972992349e-02f, -4.171308437e-02f, +3.702143267e-02f, +2.822135740e-02f, -4.687429148e-02f, -9.388106377e-03f, +4.609202328e-02f, -8.104620140e-03f, -3.610028725e-02f, +1.883758944e-02f, +2.183896862e-02f, -2.108876444e-02f, -8.873894916e-03f, +1.693632742e-02f, +6.682223505e-04f, -1.032744437e-02f, +2.417225326e-03f, +4.655771433e-03f, -2.210649070e-03f, -1.381155989e-03f, +8.293818249e-04f, +1.872179084e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.978978772e-05f, +1.899138096e-05f, +1.057569484e-04f, -1.524481502e-04f, -1.564995900e-04f, +4.193219023e-04f, +6.450095362e-05f, -7.783179074e-04f, +2.960416965e-04f, +1.061297325e-03f, -9.508724753e-04f, -1.034109200e-03f, +1.746939406e-03f, +5.322041701e-04f, -2.377473344e-03f, +4.037250874e-04f, +2.525427928e-03f, -1.495684471e-03f, -2.048280410e-03f, +2.344895453e-03f, +1.081160093e-03f, -2.637369813e-03f, +1.995087094e-05f, +2.309096785e-03f, -8.649185849e-04f, -1.564587960e-03f, +1.226239766e-03f, +7.436913879e-04f, -1.124068126e-03f, -1.327803143e-04f, +7.620965634e-04f, -1.580466366e-04f, -3.788550823e-04f, +1.921062474e-04f, +1.217025262e-04f, -1.108048548e-04f, -9.816251999e-06f, +2.831718992e-05f, +0.000000000e+00f, /* 9,15 (40) */ +0.000000000e+00f, -2.738193990e-04f, -7.908681325e-04f, +1.134724778e-03f, +1.701576622e-03f, -3.096097956e-03f, -2.670573093e-03f, +6.769933537e-03f, +3.110435716e-03f, -1.282617554e-02f, -1.992797863e-03f, +2.203410450e-02f, -2.374367433e-03f, -3.565091208e-02f, +1.318265108e-02f, +5.717636237e-02f, -3.932693585e-02f, -1.028277657e-01f, +1.353445848e-01f, +4.784642243e-01f, +4.638608306e-01f, +1.124591400e-01f, -1.064515489e-01f, -3.069832088e-02f, +5.822724698e-02f, +8.282784597e-03f, -3.558708755e-02f, +5.664204697e-04f, +2.153615484e-02f, -3.692065894e-03f, -1.225241285e-02f, +4.007136785e-03f, +6.297361626e-03f, -3.078977276e-03f, -2.784516195e-03f, +1.846548088e-03f, +9.724379623e-04f, -8.195655729e-04f, -2.155350983e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.938842983e-05f, -1.587937421e-05f, -8.075521240e-05f, +7.603525227e-05f, +1.533170094e-04f, -2.104548082e-04f, -2.292585248e-04f, +4.573982800e-04f, +2.716527702e-04f, -8.604890646e-04f, -2.204579139e-04f, +1.480547740e-03f, -1.745025803e-05f, -2.455168328e-03f, +6.103348932e-04f, +4.311095950e-03f, -1.981746038e-03f, -1.151729288e-02f, -7.107154392e-03f, +7.496239329e-03f, +1.136815197e-02f, +1.642037127e-03f, -4.317519020e-03f, -4.405497161e-04f, +2.444698152e-03f, -8.127479651e-05f, -1.460240162e-03f, +2.774917416e-04f, +8.387789667e-04f, -3.021099160e-04f, -4.393027885e-04f, +2.433133867e-04f, +1.979493752e-04f, -1.582647513e-04f, -6.893621365e-05f, +8.153160369e-05f, +1.281806624e-05f, -2.889587082e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.738193990e-04f, +7.908681325e-04f, -1.709406048e-03f, -1.814427930e-03f, +5.198199360e-03f, +1.238150160e-03f, -1.070987450e-02f, +2.975469965e-03f, +1.637487589e-02f, -1.219071641e-02f, -1.864665324e-02f, +2.533378858e-02f, +1.395208839e-02f, -3.836810479e-02f, -1.094628060e-03f, +4.572813984e-02f, -1.720449556e-02f, -4.320876884e-02f, +3.497315226e-02f, +3.056625285e-02f, -4.579313138e-02f, -1.202547619e-02f, +4.611197415e-02f, -5.795523355e-03f, -3.696520583e-02f, +1.727300148e-02f, +2.306520838e-02f, -2.034507306e-02f, -9.997963042e-03f, +1.680354711e-02f, +1.430318914e-03f, -1.048549101e-02f, +2.038370244e-03f, +4.847877681e-03f, -2.088946544e-03f, -1.491960844e-03f, +8.195655729e-04f, +2.155350983e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.938842983e-05f, +1.587937421e-05f, +1.078825232e-04f, -1.423903798e-04f, -1.692229526e-04f, +4.068653973e-04f, +9.658646901e-05f, -7.752881205e-04f, +2.415747975e-04f, +1.085911119e-03f, -8.837799877e-04f, -1.102240746e-03f, +1.690886375e-03f, +6.459420146e-04f, -2.361861807e-03f, +2.626035945e-04f, +2.570837034e-03f, -1.361341764e-03f, -2.153962968e-03f, +2.252936439e-03f, +1.223020782e-03f, -2.608182334e-03f, -1.212307080e-04f, +2.339033488e-03f, -7.569569405e-04f, -1.630026723e-03f, +1.166339449e-03f, +8.146398330e-04f, -1.106842251e-03f, -1.870964128e-04f, +7.698629303e-04f, -1.277970174e-04f, -3.933546868e-04f, +1.810987270e-04f, +1.321282337e-04f, -1.095626813e-04f, -1.281806624e-05f, +2.889587082e-05f, +0.000000000e+00f, /* 9,16 (40) */ +0.000000000e+00f, -2.444309692e-04f, -8.067475067e-04f, +1.053969566e-03f, +1.777611875e-03f, -2.942780946e-03f, -2.881027901e-03f, +6.540675012e-03f, +3.567833996e-03f, -1.255452277e-02f, -2.853286927e-03f, +2.181364659e-02f, -8.938196926e-04f, -3.566836234e-02f, +1.072748275e-02f, +5.778669726e-02f, -3.501583990e-02f, -1.048095118e-01f, +1.238272919e-01f, +4.713570699e-01f, +4.713570699e-01f, +1.238272919e-01f, -1.048095118e-01f, -3.501583990e-02f, +5.778669726e-02f, +1.072748275e-02f, -3.566836234e-02f, -8.938196926e-04f, +2.181364659e-02f, -2.853286927e-03f, -1.255452277e-02f, +3.567833996e-03f, +6.540675012e-03f, -2.881027901e-03f, -2.942780946e-03f, +1.777611875e-03f, +1.053969566e-03f, -8.067475067e-04f, -2.444309692e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.889587082e-05f, -1.281806624e-05f, -8.153160369e-05f, +6.893621365e-05f, +1.582647513e-04f, -1.979493752e-04f, -2.433133867e-04f, +4.393027885e-04f, +3.021099160e-04f, -8.387789667e-04f, -2.774917416e-04f, +1.460240162e-03f, +8.127479651e-05f, -2.444698152e-03f, +4.405497161e-04f, +4.317519020e-03f, -1.642037127e-03f, -1.136815197e-02f, -7.496239329e-03f, +7.107154392e-03f, +1.151729288e-02f, +1.981746038e-03f, -4.311095950e-03f, -6.103348932e-04f, +2.455168328e-03f, +1.745025803e-05f, -1.480547740e-03f, +2.204579139e-04f, +8.604890646e-04f, -2.716527702e-04f, -4.573982800e-04f, +2.292585248e-04f, +2.104548082e-04f, -1.533170094e-04f, -7.603525227e-05f, +8.075521240e-05f, +1.587937421e-05f, -2.938842983e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.444309692e-04f, +8.067475067e-04f, -1.601523525e-03f, -1.956818310e-03f, +5.028976408e-03f, +1.645015557e-03f, -1.061328803e-02f, +2.200181844e-03f, +1.661645069e-02f, -1.110480529e-02f, -1.953043322e-02f, +2.423154783e-02f, +1.564297476e-02f, -3.772216277e-02f, -3.456489867e-03f, +4.599074344e-02f, -1.463365852e-02f, -4.457011060e-02f, +3.281918929e-02f, +3.281918929e-02f, -4.457011060e-02f, -1.463365852e-02f, +4.599074344e-02f, -3.456489867e-03f, -3.772216277e-02f, +1.564297476e-02f, +2.423154783e-02f, -1.953043322e-02f, -1.110480529e-02f, +1.661645069e-02f, +2.200181844e-03f, -1.061328803e-02f, +1.645015557e-03f, +5.028976408e-03f, -1.956818310e-03f, -1.601523525e-03f, +8.067475067e-04f, +2.444309692e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.889587082e-05f, +1.281806624e-05f, +1.095626813e-04f, -1.321282337e-04f, -1.810987270e-04f, +3.933546868e-04f, +1.277970174e-04f, -7.698629303e-04f, +1.870964128e-04f, +1.106842251e-03f, -8.146398330e-04f, -1.166339449e-03f, +1.630026723e-03f, +7.569569405e-04f, -2.339033488e-03f, +1.212307080e-04f, +2.608182334e-03f, -1.223020782e-03f, -2.252936439e-03f, +2.153962968e-03f, +1.361341764e-03f, -2.570837034e-03f, -2.626035945e-04f, +2.361861807e-03f, -6.459420146e-04f, -1.690886375e-03f, +1.102240746e-03f, +8.837799877e-04f, -1.085911119e-03f, -2.415747975e-04f, +7.752881205e-04f, -9.658646901e-05f, -4.068653973e-04f, +1.692229526e-04f, +1.423903798e-04f, -1.078825232e-04f, -1.587937421e-05f, +2.938842983e-05f, +0.000000000e+00f, /* 9,17 (40) */ +0.000000000e+00f, -2.155350983e-04f, -8.195655729e-04f, +9.724379623e-04f, +1.846548088e-03f, -2.784516195e-03f, -3.078977276e-03f, +6.297361626e-03f, +4.007136785e-03f, -1.225241285e-02f, -3.692065894e-03f, +2.153615484e-02f, +5.664204697e-04f, -3.558708755e-02f, +8.282784597e-03f, +5.822724698e-02f, -3.069832088e-02f, -1.064515489e-01f, +1.124591400e-01f, +4.638608306e-01f, +4.784642243e-01f, +1.353445848e-01f, -1.028277657e-01f, -3.932693585e-02f, +5.717636237e-02f, +1.318265108e-02f, -3.565091208e-02f, -2.374367433e-03f, +2.203410450e-02f, -1.992797863e-03f, -1.282617554e-02f, +3.110435716e-03f, +6.769933537e-03f, -2.670573093e-03f, -3.096097956e-03f, +1.701576622e-03f, +1.134724778e-03f, -7.908681325e-04f, -2.738193990e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.831718992e-05f, -9.816251999e-06f, -8.203380579e-05f, +6.180737756e-05f, +1.626383379e-04f, -1.851269497e-04f, -2.564089168e-04f, +4.202810237e-04f, +3.312107135e-04f, -8.150688250e-04f, -3.328710381e-04f, +1.436206201e-03f, +1.782434709e-04f, -2.427743841e-03f, +2.725976668e-04f, +4.312516933e-03f, -1.307370962e-03f, -1.120355962e-02f, -7.872839323e-03f, +6.706207893e-03f, +1.165056078e-02f, +2.325893097e-03f, -4.293034467e-03f, -7.815347469e-04f, +2.459020753e-03f, +1.176853828e-04f, -1.497014728e-03f, +1.619053252e-04f, +8.801051325e-04f, -2.399044616e-04f, -4.744984666e-04f, +2.142677093e-04f, +2.225993727e-04f, -1.477974694e-04f, -8.308147782e-05f, +7.969959423e-05f, +1.899138096e-05f, -2.978978772e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.155350983e-04f, +8.195655729e-04f, -1.491960844e-03f, -2.088946544e-03f, +4.847877681e-03f, +2.038370244e-03f, -1.048549101e-02f, +1.430318914e-03f, +1.680354711e-02f, -9.997963042e-03f, -2.034507306e-02f, +2.306520838e-02f, +1.727300148e-02f, -3.696520583e-02f, -5.795523355e-03f, +4.611197415e-02f, -1.202547619e-02f, -4.579313138e-02f, +3.056625285e-02f, +3.497315226e-02f, -4.320876884e-02f, -1.720449556e-02f, +4.572813984e-02f, -1.094628060e-03f, -3.836810479e-02f, +1.395208839e-02f, +2.533378858e-02f, -1.864665324e-02f, -1.219071641e-02f, +1.637487589e-02f, +2.975469965e-03f, -1.070987450e-02f, +1.238150160e-03f, +5.198199360e-03f, -1.814427930e-03f, -1.709406048e-03f, +7.908681325e-04f, +2.738193990e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.831718992e-05f, +9.816251999e-06f, +1.108048548e-04f, -1.217025262e-04f, -1.921062474e-04f, +3.788550823e-04f, +1.580466366e-04f, -7.620965634e-04f, +1.327803143e-04f, +1.124068126e-03f, -7.436913879e-04f, -1.226239766e-03f, +1.564587960e-03f, +8.649185849e-04f, -2.309096785e-03f, -1.995087094e-05f, +2.637369813e-03f, -1.081160093e-03f, -2.344895453e-03f, +2.048280410e-03f, +1.495684471e-03f, -2.525427928e-03f, -4.037250874e-04f, +2.377473344e-03f, -5.322041701e-04f, -1.746939406e-03f, +1.034109200e-03f, +9.508724753e-04f, -1.061297325e-03f, -2.960416965e-04f, +7.783179074e-04f, -6.450095362e-05f, -4.193219023e-04f, +1.564995900e-04f, +1.524481502e-04f, -1.057569484e-04f, -1.899138096e-05f, +2.978978772e-05f, +0.000000000e+00f, /* 9,18 (40) */ +0.000000000e+00f, -1.872179084e-04f, -8.293818249e-04f, +8.904041566e-04f, +1.908355466e-03f, -2.621877857e-03f, -3.264104226e-03f, +6.040952709e-03f, +4.427417809e-03f, -1.192120214e-02f, -4.507134719e-03f, +2.120328381e-02f, +2.002626671e-03f, -3.540884407e-02f, +5.855040756e-03f, +5.849984465e-02f, -2.638580394e-02f, -1.077589198e-01f, +1.012555804e-01f, +4.559879913e-01f, +4.851704322e-01f, +1.469951456e-01f, -1.005018726e-01f, -4.361997031e-02f, +5.639482762e-02f, +1.564167183e-02f, -3.553322670e-02f, -3.871382161e-03f, +2.219600982e-02f, -1.112692730e-03f, -1.306608000e-02f, +2.635937250e-03f, +6.984201246e-03f, -2.447973720e-03f, -3.243895425e-03f, +1.618495145e-03f, +1.214424373e-03f, -7.718767515e-04f, -3.036091867e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.765763321e-05f, -6.882272725e-06f, -8.226761923e-05f, +5.467132202e-05f, +1.664372060e-04f, -1.720314979e-04f, -2.685249696e-04f, +4.004035202e-04f, +3.588949042e-04f, -7.894568231e-04f, -3.864666965e-04f, +1.408568650e-03f, +2.732178855e-04f, -2.404454123e-03f, +1.068858057e-04f, +4.296325801e-03f, -9.783345528e-04f, -1.102396466e-02f, -8.236356381e-03f, +6.294047364e-03f, +1.176756244e-02f, +2.673857280e-03f, -4.263144944e-03f, -9.537203194e-04f, +2.456137496e-03f, +2.191763885e-04f, -1.509535950e-03f, +1.019761223e-04f, +8.975377174e-04f, -2.069349908e-04f, -4.905360490e-04f, +1.983675388e-04f, +2.343394191e-04f, -1.417103121e-04f, -9.005150179e-05f, +7.836051003e-05f, +2.214485708e-05f, -3.009505649e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.872179084e-04f, +8.293818249e-04f, -1.381155989e-03f, -2.210649070e-03f, +4.655771433e-03f, +2.417225326e-03f, -1.032744437e-02f, +6.682223505e-04f, +1.693632742e-02f, -8.873894916e-03f, -2.108876444e-02f, +2.183896862e-02f, +1.883758944e-02f, -3.610028725e-02f, -8.104620140e-03f, +4.609202328e-02f, -9.388106377e-03f, -4.687429148e-02f, +2.822135740e-02f, +3.702143267e-02f, -4.171308437e-02f, -1.972992349e-02f, +4.532441476e-02f, +1.282845284e-03f, -3.890030896e-02f, +1.220514898e-02f, +2.636789778e-02f, -1.769578076e-02f, -1.325201374e-02f, +1.607883420e-02f, +3.753787872e-03f, -1.077437545e-02f, +8.188282573e-04f, +5.354698950e-03f, -1.661979780e-03f, -1.815162996e-03f, +7.718767515e-04f, +3.036091867e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.765763321e-05f, +6.882272725e-06f, +1.116178988e-04f, -1.111536367e-04f, -2.022282840e-04f, +3.634339578e-04f, +1.872540094e-04f, -7.520500784e-04f, +7.879743099e-05f, +1.137578335e-03f, -6.711773652e-04f, -1.281791000e-03f, +1.494810429e-03f, +9.695083428e-04f, -2.272182037e-03f, -1.605007859e-04f, +2.658331485e-03f, -9.362087048e-04f, -2.429556966e-03f, +1.936215494e-03f, +1.625622197e-03f, -2.472074827e-03f, -5.441515527e-04f, +2.385782103e-03f, -4.160845349e-04f, -1.797971976e-03f, +9.621247953e-04f, +1.015682073e-03f, -1.033035717e-03f, -3.503210368e-04f, +7.789051815e-04f, -3.163086284e-05f, -4.306612196e-04f, +1.429527411e-04f, +1.622604362e-04f, -1.031800165e-04f, -2.214485708e-05f, +3.009505649e-05f, +0.000000000e+00f, /* 9,19 (40) */ +0.000000000e+00f, -1.595602752e-04f, -8.362640977e-04f, +8.081365373e-04f, +1.963026788e-03f, -2.455440651e-03f, -3.436135723e-03f, +5.772427739e-03f, +4.827821329e-03f, -1.156230723e-02f, -5.296591542e-03f, +2.081681711e-02f, +3.411195321e-03f, -3.513562619e-02f, +3.450586633e-03f, +5.860673045e-02f, -2.208947814e-02f, -1.087372544e-01f, +9.023161569e-02f, +4.477516349e-01f, +4.914644796e-01f, +1.587627080e-01f, -9.782801534e-02f, -4.788311526e-02f, +5.544110730e-02f, +1.809780933e-02f, -3.531405031e-02f, -5.380918111e-03f, +2.229798595e-02f, -2.151550127e-04f, -1.327301499e-02f, +2.145401201e-03f, +7.182568785e-03f, -2.213634301e-03f, -3.385605737e-03f, +1.528443643e-03f, +1.292784883e-03f, -7.497318944e-04f, -3.337042432e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.692258929e-05f, -4.023998668e-06f, -8.223956993e-05f, +4.755012547e-05f, +1.696625512e-04f, -1.587069418e-04f, -2.796446348e-04f, +3.797420848e-04f, +3.851072520e-04f, -7.620449998e-04f, -4.381565367e-04f, +1.377458422e-03f, +3.659691126e-04f, -2.374992228e-03f, -5.619104480e-05f, +4.269203766e-03f, -6.554961931e-04f, -1.082984213e-02f, -8.586219074e-03f, +5.871343198e-03f, +1.186793396e-02f, +3.025002365e-03f, -4.221262112e-03f, -1.126453069e-03f, +2.446416853e-03f, +3.216617875e-04f, -1.518015683e-03f, +4.081851943e-05f, +9.127022261e-04f, -1.728190469e-04f, -5.054456894e-04f, +1.815878095e-04f, +2.456316624e-04f, -1.350615662e-04f, -9.692163009e-05f, +7.673455300e-05f, +2.533016005e-05f, -3.029956355e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.595602752e-04f, +8.362640977e-04f, -1.269538090e-03f, -2.321802707e-03f, +4.453543149e-03f, +2.780659284e-03f, -1.014019036e-02f, -8.382772788e-05f, +1.701512485e-02f, -7.736316581e-03f, -2.175994181e-02f, +2.055717762e-02f, +2.033239987e-02f, -3.513077891e-02f, -1.037680218e-02f, +4.593152249e-02f, -6.729774892e-03f, -4.781050018e-02f, +2.579180043e-02f, +3.895764816e-02f, -4.008746217e-02f, -2.220199831e-02f, +4.478026320e-02f, +3.668627387e-03f, -3.931639349e-02f, +1.040717700e-02f, +2.733002257e-02f, -1.668009869e-02f, -1.428504945e-02f, +1.572851316e-02f, +4.532693054e-03f, -1.080600631e-02f, +3.881670377e-04f, +5.497651691e-03f, -1.499719344e-03f, -1.918343013e-03f, +7.497318944e-04f, +3.337042432e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.692258929e-05f, +4.023998668e-06f, +1.120120209e-04f, -1.005213727e-04f, -2.114510313e-04f, +3.471604799e-04f, +2.153426602e-04f, -7.397910623e-04f, +2.531532391e-05f, +1.147374546e-03f, -5.973429932e-04f, -1.332857660e-03f, +1.420946441e-03f, +1.070420316e-03f, -2.228440998e-03f, -2.999824235e-04f, +2.671025537e-03f, -7.886246180e-04f, -2.506661150e-03f, +1.818115282e-03f, +1.750741478e-03f, -2.410923030e-03f, -6.834398429e-04f, +2.386724879e-03f, -2.979339676e-04f, -1.843784705e-03f, +8.864814924e-04f, +1.077978527e-03f, -1.001173424e-03f, -4.042349999e-04f, +7.770102152e-04f, +1.929217109e-06f, -4.408229601e-04f, +1.286099302e-04f, +1.717859800e-04f, -1.001473417e-04f, -2.533016005e-05f, +3.029956355e-05f, +0.000000000e+00f, /* 9,20 (40) */ +0.000000000e+00f, -1.326376859e-04f, -8.402880963e-04f, +7.258969674e-04f, +2.010576913e-03f, -2.285778100e-03f, -3.594842665e-03f, +5.492783105e-03f, +5.207563414e-03f, -1.117719998e-02f, -6.058636542e-03f, +2.037866057e-02f, +4.788653743e-03f, -3.476965708e-02f, +1.075594405e-03f, +5.855053941e-02f, -1.782027438e-02f, -1.093927506e-01f, +7.940177356e-02f, +4.391654158e-01f, +4.973358228e-01f, +1.706306420e-01f, -9.480301297e-02f, -5.210437737e-02f, +5.431465423e-02f, +2.054422618e-02f, -3.499238852e-02f, -6.898933795e-03f, +2.233880447e-02f, +6.975472133e-04f, -1.344583404e-02f, +1.639955511e-03f, +7.364156595e-03f, -1.968002638e-03f, -3.520667303e-03f, +1.431522013e-03f, +1.369519436e-03f, -7.244017344e-04f, -3.640038068e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.611756503e-05f, -1.248813931e-06f, -8.195687024e-05f, +4.046530777e-05f, +1.723172887e-04f, -1.451970278e-04f, -2.897542300e-04f, +3.583695657e-04f, +4.097976228e-04f, -7.329389011e-04f, -4.878255463e-04f, +1.343014081e-03f, +4.562776664e-04f, -2.339535262e-03f, -2.162511058e-04f, +4.231430134e-03f, -3.394043914e-04f, -1.062169210e-02f, -8.921883660e-03f, +5.438787302e-03f, +1.195134171e-02f, +3.378678185e-03f, -4.167245739e-03f, -1.299285828e-03f, +2.429773852e-03f, +4.248734012e-04f, -1.522368065e-03f, -2.141353182e-05f, +9.255192434e-04f, -1.376358638e-04f, -5.191642378e-04f, +1.639614834e-04f, +2.564333221e-04f, -1.278591280e-04f, -1.036679328e-04f, +7.481918043e-05f, +2.853725754e-05f, -3.039887583e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.326376859e-04f, +8.402880963e-04f, -1.157526069e-03f, -2.422324079e-03f, +4.242092118e-03f, +3.127819764e-03f, -9.924847704e-03f, -8.236187902e-04f, +1.704044017e-02f, -6.588942035e-03f, -2.235728480e-02f, +1.922431996e-02f, +2.175334631e-02f, -3.406035859e-02f, -1.260524317e-02f, +4.563154007e-02f, -4.058749355e-03f, -4.859912480e-02f, +2.328513928e-02f, +4.077576344e-02f, -3.833672069e-02f, -2.461292134e-02f, +4.409682336e-02f, +6.055352266e-03f, -3.961432746e-02f, +8.563392298e-03f, +2.821650407e-02f, -1.560212016e-02f, -1.528622288e-02f, +1.532427816e-02f, +5.309703269e-03f, -1.080407710e-02f, -5.265592234e-05f, +5.626261622e-03f, -1.327933364e-03f, -2.018490355e-03f, +7.244017344e-04f, +3.640038068e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.611756503e-05f, +1.248813931e-06f, +1.119987057e-04f, -8.984483985e-05f, -2.197640842e-04f, +3.301053375e-04f, +2.422411314e-04f, -7.253933090e-04f, -2.750232073e-05f, +1.153470363e-03f, -5.224351940e-04f, -1.379319762e-03f, +1.343259367e-03f, +1.167362215e-03f, -2.178046240e-03f, -4.379642943e-04f, +2.675436391e-03f, -6.388733453e-04f, -2.575972209e-03f, +1.694346065e-03f, +1.870643441e-03f, -2.342142925e-03f, -8.211487210e-04f, +2.380261573e-03f, -1.781119850e-04f, -1.884193427e-03f, +8.073867218e-04f, +1.137537353e-03f, -9.657698389e-04f, -4.576045913e-04f, +7.726009063e-04f, +3.608075842e-05f, -4.497495869e-04f, +1.135020794e-04f, +1.809835241e-04f, -9.665615182e-05f, -2.853725754e-05f, +3.039887583e-05f, +0.000000000e+00f, /* 9,21 (40) */ +0.000000000e+00f, -1.065201209e-04f, -8.415369103e-04f, +6.439400972e-04f, +2.051042221e-03f, -2.113460811e-03f, -3.740039693e-03f, +5.203028875e-03f, +5.565932979e-03f, -1.076740236e-02f, -6.791575443e-03f, +1.989083503e-02f, +6.131667824e-03f, -3.431337941e-02f, -1.263940857e-03f, +5.833428830e-02f, -1.358884424e-02f, -1.097321550e-01f, +6.878008146e-02f, +4.302435322e-01f, +5.027746101e-01f, +1.825819837e-01f, -9.142433479e-02f, -5.627162311e-02f, +5.301536841e-02f, +2.297400003e-02f, -3.456751512e-02f, -8.421301860e-03f, +2.231739093e-02f, +1.623066457e-03f, -1.358346990e-02f, +1.120791274e-03f, +7.528118078e-03f, -1.711569316e-03f, -3.648526431e-03f, +1.327854080e-03f, +1.444338616e-03f, -6.958644769e-04f, -3.944026826e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.524816144e-05f, +1.436396644e-06f, -8.142737847e-05f, +3.343777417e-05f, +1.744060091e-04f, -1.315451980e-04f, -2.988432843e-04f, +3.363596225e-04f, +4.329210476e-04f, -7.022472270e-04f, -5.353660973e-04f, +1.305381341e-03f, +5.439339613e-04f, -2.298273532e-03f, -3.729264058e-04f, +4.183304467e-03f, -3.058685352e-05f, -1.040003843e-02f, -9.242835135e-03f, +4.997091712e-03f, +1.201748315e-02f, +3.734221936e-03f, -4.100981252e-03f, -1.471763790e-03f, +2.406140717e-03f, +5.285369950e-04f, -1.522517476e-03f, -8.456069436e-05f, +9.359148400e-04f, -1.014690617e-04f, -5.316309555e-04f, +1.455246449e-04f, +2.667022623e-04f, -1.201127747e-04f, -1.102663162e-04f, +7.261274324e-05f, +3.175575267e-05f, -3.038882345e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.065201209e-04f, +8.415369103e-04f, -1.045527363e-03f, -2.512168919e-03f, +4.022328034e-03f, +3.457925101e-03f, -9.682606573e-03f, -1.549012099e-03f, +1.701293785e-02f, -5.435471671e-03f, -2.287972000e-02f, +1.784500020e-02f, +2.309660568e-02f, -3.289299638e-02f, -1.478328941e-02f, +4.519357577e-02f, -1.383312964e-03f, -4.923799814e-02f, +2.070916707e-02f, +4.247010951e-02f, -3.646607725e-02f, -2.695506427e-02f, +4.327567464e-02f, +8.435613839e-03f, -3.979243945e-02f, +6.679198870e-03f, +2.902389079e-02f, -1.446458281e-02f, -1.625199272e-02f, +1.486667357e-02f, +6.082304175e-03f, -1.076799634e-02f, -5.024055093e-04f, +5.739763701e-03f, -1.146949840e-03f, -2.115146507e-03f, +6.958644769e-04f, +3.944026826e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.524816144e-05f, -1.436396644e-06f, +1.115906368e-04f, -7.916231559e-05f, -2.271604025e-04f, +3.123404704e-04f, +2.678831402e-04f, -7.089364809e-04f, -7.949617923e-05f, +1.155891140e-03f, -4.467017651e-04f, -1.421073082e-03f, +1.262022715e-03f, +1.260056211e-03f, -2.121190497e-03f, -5.740213917e-04f, +2.671574675e-03f, -4.874264133e-04f, -2.637279115e-03f, +1.565292203e-03f, +1.984945093e-03f, -2.265929507e-03f, -9.568402833e-04f, +2.366375433e-03f, -5.698565503e-05f, -1.919029903e-03f, +7.250608239e-04f, +1.194140631e-03f, -9.268965660e-04f, -5.102502210e-04f, +7.656529984e-04f, +7.072156256e-05f, -4.573866696e-04f, +9.766346956e-05f, +1.898119631e-04f, -9.270534274e-05f, -3.175575267e-05f, +3.038882345e-05f, +0.000000000e+00f, /* 9,22 (40) */ +0.000000000e+00f, -8.127195944e-05f, -8.401005136e-04f, +5.625127187e-04f, +2.084479995e-03f, -1.939054802e-03f, -3.871584891e-03f, +4.904185590e-03f, +5.902292602e-03f, -1.033448131e-02f, -7.493822670e-03f, +1.935546893e-02f, +7.437049164e-03f, -3.376944545e-02f, -3.562214389e-03f, +5.796136190e-02f, -9.405539777e-03f, -1.097627418e-01f, +5.838004303e-02f, +4.210006970e-01f, +5.077717018e-01f, +1.945994668e-01f, -8.769011285e-02f, -6.037260436e-02f, +5.154360462e-02f, +2.538014075e-02f, -3.403897813e-02f, -9.943819336e-03f, +2.223283024e-02f, +2.558981297e-03f, -1.368493896e-02f, +5.891603182e-04f, +7.673642723e-03f, -1.444867054e-03f, -3.768639206e-03f, +1.217587764e-03f, +1.516951359e-03f, -6.641087242e-04f, -4.247915060e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.432004984e-05f, +4.025258508e-06f, -8.065955729e-05f, +2.648776246e-05f, +1.759349294e-04f, -1.177944647e-04f, -3.069045119e-04f, +3.137864980e-04f, +4.544377708e-04f, -6.700814743e-04f, -5.806781401e-04f, +1.264712566e-03f, +6.287387368e-04f, -2.251409867e-03f, -5.258635010e-04f, +4.125145637e-03f, +2.704504794e-04f, -1.016542758e-02f, -9.548588231e-03f, +4.546987151e-03f, +1.206608769e-02f, +4.090959519e-03f, -4.022380306e-03f, -1.643425534e-03f, +2.375467304e-03f, +6.323729384e-04f, -1.518398899e-03f, -1.484586174e-04f, +9.438208686e-04f, -6.440647307e-05f, -5.427877350e-04f, +1.263164487e-04f, +2.763971337e-04f, -1.118341724e-04f, -1.166925968e-04f, +7.011451321e-05f, +3.497491124e-05f, -3.026552314e-05f, +0.000000000e+00f, +0.000000000e+00f, +8.127195944e-05f, +8.401005136e-04f, -9.339367267e-04f, -2.591331235e-03f, +3.795167631e-03f, +3.770265571e-03f, -9.414723433e-03f, -2.257948580e-03f, +1.693344167e-02f, -4.279580531e-03f, -2.332642176e-02f, +1.642392712e-02f, +2.435862839e-02f, -3.163294016e-02f, -1.690447991e-02f, +4.461955438e-02f, +1.288261711e-03f, -4.972542456e-02f, +1.807188796e-02f, +4.403540171e-02f, -3.448113216e-02f, -2.922099377e-02f, +4.231883436e-02f, +1.080198927e-02f, -3.984942510e-02f, +4.760168967e-03f, +2.974895161e-02f, -1.327044218e-02f, -1.717888928e-02f, +1.435642335e-02f, +6.847957174e-03f, -1.069727478e-02f, -9.597921789e-04f, +5.837427171e-03f, -9.571378768e-04f, -2.207851849e-03f, +6.641087242e-04f, +4.247915060e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.432004984e-05f, -4.025258508e-06f, +1.108016165e-04f, -6.851113018e-05f, -2.336362639e-04f, +2.939387987e-04f, +2.922077150e-04f, -6.905057570e-04f, -1.305117571e-04f, +1.154673760e-03f, -3.703905661e-04f, -1.458029351e-03f, +1.177519168e-03f, +1.348239735e-03f, -2.058085942e-03f, -7.077365253e-04f, +2.659477117e-03f, -3.347598469e-04f, -2.690396264e-03f, +1.431354905e-03f, +2.093280578e-03f, -2.182501822e-03f, -1.090081376e-03f, +2.345073229e-03f, +6.507154126e-05f, -1.948142476e-03f, +6.397364432e-04f, +1.247577785e-03f, -8.846373242e-04f, -5.619922933e-04f, +7.561502784e-04f, +1.057460482e-04f, -4.636831315e-04f, +8.113168891e-05f, +1.982304998e-04f, -8.829552714e-05f, -3.497491124e-05f, +3.026552314e-05f, +0.000000000e+00f, /* 9,23 (40) */ +0.000000000e+00f, -5.695190960e-05f, -8.360752551e-04f, +4.818531614e-04f, +2.110967758e-03f, -1.763119873e-03f, -3.989379356e-03f, +4.597281078e-03f, +6.216079100e-03f, -9.880043540e-03f, -8.163904144e-03f, +1.877479079e-02f, +8.701761730e-03f, -3.314070671e-02f, -5.813624256e-03f, +5.743549839e-02f, -5.280394140e-03f, -1.094922914e-01f, +4.821461544e-02f, +4.114521088e-01f, +5.123186890e-01f, +2.066655545e-01f, -8.359915333e-02f, -6.439498467e-02f, +4.990017908e-02f, +2.775560805e-02f, -3.340660519e-02f, -1.146221824e-02f, +2.208437162e-02f, +3.502802165e-03f, -1.374934544e-02f, +4.637258314e-05f, +7.799959172e-03f, -1.168469920e-03f, -3.880473378e-03f, +1.100895167e-03f, +1.587065873e-03f, -6.291338129e-04f, -4.550570292e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.333894834e-05f, +6.511916378e-06f, -7.966243098e-05f, +1.963479337e-05f, +1.769118413e-04f, -1.039872891e-04f, -3.139337773e-04f, +2.907247910e-04f, +4.743132810e-04f, -6.365555774e-04f, -6.236693718e-04f, +1.221166251e-03f, +7.105034497e-04f, -2.199158900e-03f, -6.747241509e-04f, +4.057290844e-03f, +5.632243356e-04f, -9.918427271e-03f, -9.838688335e-03f, +4.089221553e-03f, +1.209691739e-02f, +4.448206912e-03f, -3.931381301e-03f, -1.813804071e-03f, +2.337721486e-03f, +7.360968874e-04f, -1.509958254e-03f, -2.129383280e-04f, +9.491752487e-04f, -2.653995388e-05f, -5.525793165e-04f, +1.063790562e-04f, +2.854775143e-04f, -1.030368784e-04f, -1.229225772e-04f, +6.732470766e-05f, +3.818369075e-05f, -3.002540106e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.695190960e-05f, +8.360752551e-04f, -8.231351102e-04f, -2.659842365e-03f, +3.561531368e-03f, +4.064204370e-03f, -9.122515718e-03f, -2.948454337e-03f, +1.680292992e-02f, -3.124906771e-03f, -2.369681233e-02f, +1.496589776e-02f, +2.553614756e-02f, -3.028470043e-02f, -1.896256585e-02f, +4.391181785e-02f, +3.947738828e-03f, -5.006018440e-02f, +1.538149169e-02f, +4.546675661e-02f, -3.238785158e-02f, -3.140349560e-02f, +4.122875298e-02f, +1.314706250e-02f, -3.978435356e-02f, +2.812026491e-03f, +3.038868806e-02f, -1.202286439e-02f, -1.806352661e-02f, +1.379443106e-02f, +7.604107452e-03f, -1.059152873e-02f, -1.423475310e-03f, +5.918558860e-03f, -7.589073770e-04f, -2.296147376e-03f, +6.291338129e-04f, +4.550570292e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.333894834e-05f, -6.511916378e-06f, +1.096464823e-04f, -5.792755312e-05f, -2.391912064e-04f, +2.749739539e-04f, +3.151593111e-04f, -6.701914660e-04f, -1.803998335e-04f, +1.149866382e-03f, -2.937487134e-04f, -1.490116400e-03f, +1.090039604e-03f, +1.431666225e-03f, -1.988963407e-03f, -8.387016222e-04f, +2.639206348e-03f, -1.813526412e-04f, -2.735164053e-03f, +1.292950954e-03f, +2.195302367e-03f, -2.092102327e-03f, -1.220445003e-03f, +2.316385335e-03f, +1.876808763e-04f, -1.971396687e-03f, +5.516578768e-04f, +1.297646345e-03f, -8.390878083e-04f, -6.126518040e-04f, +7.440847489e-04f, +1.410455555e-04f, -4.685914899e-04f, +6.394756893e-05f, +2.061988025e-04f, -8.342907803e-05f, -3.818369075e-05f, +3.002540106e-05f, +0.000000000e+00f, /* 9,24 (40) */ +0.000000000e+00f, -3.361296126e-05f, -8.295633387e-04f, +4.021907304e-04f, +2.130602551e-03f, -1.586208031e-03f, -4.093366645e-03f, +4.283347301e-03f, +6.506803891e-03f, -9.405730259e-03f, -8.800459722e-03f, +1.815112142e-02f, +9.922927981e-03f, -3.243020326e-02f, -8.012783156e-03f, +5.676077424e-02f, -1.223103297e-03f, -1.089290670e-01f, +3.829618817e-02f, +4.016134205e-01f, +5.164079105e-01f, +2.187624719e-01f, -7.915094642e-02f, -6.832636597e-02f, +4.808637501e-02f, +3.009332954e-02f, -3.267050830e-02f, -1.297217649e-02f, +2.187143329e-02f, +4.451977414e-03f, -1.377588539e-02f, -5.062067334e-04f, +7.906338228e-03f, -8.829924060e-04f, -3.983510257e-03f, +9.779725896e-04f, +1.654390580e-03f, -5.909501222e-04f, -4.850824302e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.231059876e-05f, +8.891041164e-06f, -7.844554178e-05f, +1.289762441e-05f, +1.773460538e-04f, -9.016546299e-05f, -3.199300511e-04f, +2.672492328e-04f, +4.925183278e-04f, -6.017855469e-04f, -6.642553817e-04f, +1.174906500e-03f, +7.890506312e-04f, -2.141746337e-03f, -8.191859473e-04f, +3.980094595e-03f, +8.472749576e-04f, -9.659625154e-03f, -1.011271235e-02f, +3.624558540e-03f, +1.210976765e-02f, +4.805271585e-03f, -3.827949833e-03f, -1.982427921e-03f, +2.292889502e-03f, +8.394204909e-04f, -1.497152711e-03f, -2.778266412e-04f, +9.519222367e-04f, +1.203482045e-05f, -5.609534982e-04f, +8.575756238e-05f, +2.939040512e-04f, -9.373633740e-05f, -1.289321237e-04f, +6.424451154e-05f, +4.137077124e-05f, -2.966521518e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.361296126e-05f, +8.295633387e-04f, -7.134886279e-04f, -2.717769918e-03f, +3.322340161e-03f, +4.339178324e-03f, -8.807356407e-03f, -3.618645803e-03f, +1.662253008e-02f, -1.975040388e-03f, -2.399056104e-02f, +1.347578136e-02f, +2.662618717e-02f, -2.885303420e-02f, -2.095152926e-02f, +4.307311623e-02f, +6.586945176e-03f, -5.024153705e-02f, +1.264632764e-02f, +4.675970757e-02f, -3.019254921e-02f, -3.349559792e-02f, +4.000830798e-02f, +1.546344784e-02f, -3.959667268e-02f, +8.406298037e-04f, +3.094034593e-02f, -1.072521805e-02f, -1.890261442e-02f, +1.318177925e-02f, +8.348192201e-03f, -1.045048317e-02f, -1.892066800e-03f, +5.982506429e-03f, -5.527085745e-04f, -2.379576454e-03f, +5.909501222e-04f, +4.850824302e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.231059876e-05f, -8.891041164e-06f, +1.081410225e-04f, -4.744668640e-05f, -2.438279597e-04f, +2.555200118e-04f, +3.366879062e-04f, -6.480887084e-04f, -2.290168826e-04f, +1.141528149e-03f, -2.170217854e-04f, -1.517278249e-03f, +9.998821001e-04f, +1.510105810e-03f, -1.914071544e-03f, -9.665189953e-04f, +2.610850631e-03f, -2.768522710e-05f, -2.771449368e-03f, +1.150511382e-03f, +2.290682395e-03f, -1.994996168e-03f, -1.347511719e-03f, +2.280365757e-03f, +3.104595657e-04f, -1.988675834e-03f, +4.610803787e-04f, +1.344152686e-03f, -7.903555101e-04f, -6.620509438e-04f, +7.294567753e-04f, +1.765086660e-04f, -4.720680878e-04f, +4.615510668e-05f, +2.136771647e-04f, -7.811016640e-05f, -4.137077124e-05f, +2.966521518e-05f, +0.000000000e+00f, /* 9,25 (40) */ +0.000000000e+00f, -1.130236251e-05f, -8.206722976e-04f, +3.237451886e-04f, +2.143500175e-03f, -1.408861977e-03f, -4.183532108e-03f, +3.963417250e-03f, +6.774053124e-03f, -8.913211932e-03f, -9.402245269e-03f, +1.748686604e-02f, +1.109783448e-02f, -3.164115263e-02f, -1.015452949e-02f, +5.594158830e-02f, +2.756991298e-03f, -1.080817921e-01f, +2.863656302e-02f, +3.915007081e-01f, +5.200324690e-01f, +2.308722396e-01f, -7.434567483e-02f, -7.215431580e-02f, +4.610394709e-02f, +3.238621904e-02f, -3.183108781e-02f, -1.446932920e-02f, +2.159360665e-02f, +5.403899651e-03f, -1.376385057e-02f, -1.067160232e-03f, +7.992095790e-03f, -5.890883548e-04f, -4.077246594e-03f, +8.490404659e-04f, +1.718635092e-03f, -5.495793510e-04f, -5.147476454e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.124074400e-05f, +1.115783486e-05f, -7.701890551e-05f, +6.294207036e-06f, +1.772483334e-04f, -7.636999562e-05f, -3.248953579e-04f, +2.434344664e-04f, +5.090289217e-04f, -5.658891074e-04f, -7.023597721e-04f, +1.126102485e-03f, +8.642142097e-04f, -2.079408200e-03f, -9.589428966e-04f, +3.893927662e-03f, +1.122166887e-03f, -9.389627448e-03f, -1.037026947e-02f, +3.153775873e-03f, +1.210446776e-02f, +5.161453937e-03f, -3.712079088e-03f, -2.148822212e-03f, +2.240976259e-03f, +9.420521158e-04f, -1.479950966e-03f, -3.429465880e-04f, +9.520126834e-04f, +5.121857295e-05f, -5.678613416e-04f, +6.449991268e-05f, +3.016386006e-04f, -8.394987165e-05f, -1.346972455e-04f, +6.087609675e-05f, +4.452458790e-05f, -2.918207680e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.130236251e-05f, +8.206722976e-04f, -6.053476054e-04f, -2.765216605e-03f, +3.078512201e-03f, +4.594698336e-03f, -8.470668501e-03f, -4.266734511e-03f, +1.639351320e-02f, -8.335122396e-04f, -2.420758283e-02f, +1.195850312e-02f, +2.762606927e-02f, -2.734292839e-02f, -2.286560080e-02f, +4.210659724e-02f, +9.197795807e-03f, -5.026922227e-02f, +9.874878272e-03f, +4.791021895e-02f, -2.790186682e-02f, -3.549059409e-02f, +3.866079626e-02f, +1.774381359e-02f, -3.928621312e-02f, -1.148046030e-03f, +3.140142631e-02f, -9.381065360e-03f, -1.969296993e-02f, +1.251972831e-02f, +9.077648976e-03f, -1.027397451e-02f, -2.364134888e-03f, +6.028661535e-03f, -3.390314097e-04f, -2.457686621e-03f, +5.495793510e-04f, +5.147476454e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.124074400e-05f, -1.115783486e-05f, +1.063018892e-04f, -3.710236442e-05f, -2.475523674e-04f, +2.356512299e-04f, +3.567490754e-04f, -6.242969676e-04f, -2.762254699e-04f, +1.129728864e-03f, -1.404530410e-04f, -1.539475140e-03f, +9.073509170e-04f, +1.583345947e-03f, -1.833675941e-03f, -1.090802571e-03f, +2.574523496e-03f, +1.257620654e-04f, -2.799145988e-03f, +1.004480095e-03f, +2.379113140e-03f, -1.891470399e-03f, -1.470870997e-03f, +2.237092061e-03f, +4.330219789e-04f, -1.999881476e-03f, +3.682694225e-04f, +1.386912755e-03f, -7.385594970e-04f, -7.100137044e-04f, +7.122752061e-04f, +2.120215373e-04f, -4.740733165e-04f, +2.780137444e-05f, +2.206266656e-04f, -7.234479279e-05f, -4.452458790e-05f, +2.918207680e-05f, +0.000000000e+00f, /* 9,26 (40) */ +0.000000000e+00f, +9.938381493e-06f, -8.095144627e-04f, +2.467262831e-04f, +2.149794383e-03f, -1.231613644e-03f, -4.259902104e-03f, +3.638521892e-03f, +7.017487590e-03f, -8.404183010e-03f, -9.968134376e-03f, +1.678450626e-02f, +1.222393697e-02f, -3.077693842e-02f, -1.223393769e-02f, +5.498264540e-02f, +6.650918960e-03f, -1.069596252e-01f, +1.924693557e-02f, +3.811304387e-01f, +5.231862449e-01f, +2.429767073e-01f, -6.918422090e-02f, -7.586639489e-02f, +4.395512488e-02f, +3.462719530e-02f, -3.088903570e-02f, -1.594928017e-02f, +2.125066007e-02f, +6.355912334e-03f, -1.371263200e-02f, -1.635021573e-03f, +8.056595703e-03f, -2.874497542e-04f, -4.161196466e-03f, +7.143432204e-04f, +1.779511189e-03f, -5.050547631e-04f, -5.439297222e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.013510604e-05f, +1.330803346e-05f, -7.539296666e-05f, -1.583525942e-07f, +1.766308406e-04f, -6.264100433e-05f, -3.288347151e-04f, +2.193548295e-04f, +5.238263198e-04f, -5.289853368e-04f, -7.379142543e-04f, +1.074927910e-03f, +9.358397985e-04f, -2.012390064e-03f, -1.093705953e-03f, +3.799176006e-03f, +1.387489687e-03f, -9.109057526e-03f, -1.061100191e-02f, +2.677663862e-03f, +1.208088148e-02f, +5.516048760e-03f, -3.583790178e-03f, -2.312509799e-03f, +2.182005593e-03f, +1.043697592e-03f, -1.458333504e-03f, -4.081178602e-04f, +9.494042749e-04f, +9.090865714e-05f, -5.732573706e-04f, +4.265680927e-05f, +3.086443671e-04f, -7.369666498e-05f, -1.401941747e-04f, +5.722263853e-05f, +4.763336528e-05f, -2.857347147e-05f, +0.000000000e+00f, +0.000000000e+00f, -9.938381493e-06f, +8.095144627e-04f, -4.990457162e-04f, -2.802318969e-03f, +2.830959834e-03f, +4.830349566e-03f, -8.113919425e-03f, -4.891031479e-03f, +1.611728773e-02f, +2.962166243e-04f, -2.434803587e-02f, +1.041902798e-02f, +2.853342018e-02f, -2.575958245e-02f, -2.469927675e-02f, +4.101579467e-02f, +1.177231930e-02f, -5.014346021e-02f, +7.075732284e-03f, +4.891469905e-02f, -2.552275368e-02f, -3.738206449e-02f, +3.718992526e-02f, +1.998090565e-02f, -3.885319114e-02f, -3.147927506e-03f, +3.176969573e-02f, -7.994152605e-03f, -2.043152942e-02f, +1.180971460e-02f, +9.789924182e-03f, -1.006195297e-02f, -2.838208205e-03f, +6.056462910e-03f, -1.184047442e-04f, -2.530031414e-03f, +5.050547631e-04f, +5.439297222e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.013510604e-05f, -1.330803346e-05f, +1.041465109e-04f, -2.692706094e-05f, -2.503732986e-04f, +2.154417879e-04f, +3.753040453e-04f, -5.989197119e-04f, -3.218946234e-04f, +1.114548639e-03f, -6.428265365e-05f, -1.556683522e-03f, +8.127554692e-04f, +1.651191985e-03f, -1.748058174e-03f, -1.211179078e-03f, +2.530363307e-03f, +2.785105402e-04f, -2.818174904e-03f, +8.553124615e-04f, +2.460308630e-03f, -1.781833104e-03f, -1.590122586e-03f, +2.186665243e-03f, +5.549808657e-04f, -2.004933884e-03f, +2.734999243e-04f, +1.425752763e-03f, -6.838301498e-04f, -7.563664866e-04f, +6.925574664e-04f, +2.474682509e-04f, -4.745718276e-04f, +8.936416261e-06f, +2.270093316e-04f, -6.614081253e-05f, -4.763336528e-05f, +2.857347147e-05f, +0.000000000e+00f, /* 9,27 (40) */ +0.000000000e+00f, +3.007348754e-05f, -7.962064292e-04f, +1.713333165e-04f, +2.149636030e-03f, -1.054982803e-03f, -4.322543108e-03f, +3.309687177e-03f, +7.236842420e-03f, -7.880356690e-03f, -1.049711971e-02f, +1.604659201e-02f, +1.329886488e-02f, -2.984109862e-02f, -1.424632776e-02f, +5.388893945e-02f, +1.045009497e-02f, -1.055721355e-01f, +1.013787804e-02f, +3.705194367e-01f, +5.258639088e-01f, +2.550575888e-01f, -6.366817214e-02f, -7.945018507e-02f, +4.164261508e-02f, +3.680920089e-02f, -2.984533810e-02f, -1.740761367e-02f, +2.084254221e-02f, +7.305316609e-03f, -1.362172334e-02f, -2.208278944e-03f, +8.099252512e-03f, +2.119461283e-05f, -4.234893131e-03f, +5.741490457e-04f, +1.836733827e-03f, -4.574213978e-04f, -5.725031937e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.899936450e-05f, +1.533790785e-05f, -7.357855293e-05f, -6.443829298e-06f, +1.755070633e-04f, -4.901761035e-05f, -3.317560647e-04f, +1.950841424e-04f, +5.368969955e-04f, -4.911943059e-04f, -7.708587210e-04f, +1.021560463e-03f, +1.003784947e-03f, -1.940946266e-03f, -1.223203506e-03f, +3.696239674e-03f, +1.642858602e-03f, -8.818554479e-03f, -1.083458553e-02f, +2.197023751e-03f, +1.203890744e-02f, +5.868346728e-03f, -3.443132409e-03f, -2.473012407e-03f, +2.116020483e-03f, +1.144060974e-03f, -1.432292819e-03f, -4.731572712e-04f, +9.440617580e-04f, +1.309993024e-04f, -5.770997631e-04f, +2.028160784e-05f, +3.148860417e-04f, -6.299774079e-05f, -1.453994474e-04f, +5.328832891e-05f, +5.068515312e-05f, -2.783727893e-05f, +0.000000000e+00f, +0.000000000e+00f, -3.007348754e-05f, +7.962064292e-04f, -3.948992054e-04f, -2.829246030e-03f, +2.580586535e-03f, +5.045791354e-03f, -7.738615380e-03f, -5.489951191e-03f, +1.579539311e-02f, +1.410765263e-03f, -2.441231852e-02f, +8.862344454e-03f, +2.934617565e-02f, -2.410839046e-02f, -2.644733492e-02f, +3.980461559e-02f, +1.430268261e-02f, -4.986494967e-02f, +4.257557380e-03f, +4.977001151e-02f, -2.306244505e-02f, -3.916389760e-02f, +3.559980268e-02f, +2.216757090e-02f, -3.829821027e-02f, -5.152861390e-03f, +3.204319566e-02f, -6.568399842e-03f, -2.111535957e-02f, +1.105334812e-02f, +1.048248165e-02f, -9.814484717e-03f, -3.312780032e-03f, +6.065399326e-03f, +1.086045874e-04f, -2.596172226e-03f, +4.574213978e-04f, +5.725031937e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.899936450e-05f, -1.533790785e-05f, +1.016930039e-04f, -1.695180326e-05f, -2.523025512e-04f, +1.949655339e-04f, +3.923197286e-04f, -5.720639893e-04f, -3.659001780e-04f, +1.096077505e-03f, +1.125303696e-05f, -1.568895977e-03f, +7.164092911e-04f, +1.713467675e-03f, -1.657514825e-03f, -1.327289183e-03f, +2.478532739e-03f, +4.300846601e-04f, -2.828484546e-03f, +7.034738605e-04f, +2.534005390e-03f, -1.666412475e-03f, -1.704877822e-03f, +2.129209512e-03f, +6.759485959e-04f, -2.003772433e-03f, +1.770554280e-04f, +1.460509853e-03f, -6.263088608e-04f, -8.009387080e-04f, +6.703296232e-04f, +2.827311737e-04f, -4.735327339e-04f, -1.038686813e-05f, +2.327882978e-04f, -5.950795440e-05f, -5.068515312e-05f, +2.783727893e-05f, +0.000000000e+00f, /* 9,28 (40) */ +0.000000000e+00f, +4.907285204e-05f, -7.808685214e-04f, +9.775476354e-05f, +2.143192201e-03f, -8.794757402e-04f, -4.371560718e-03f, +2.977931112e-03f, +7.431926562e-03f, -7.343459695e-03f, -1.098831402e-02f, +1.527573329e-02f, +1.432042534e-02f, -2.883731368e-02f, -1.618727402e-02f, +5.266573594e-02f, +1.414633464e-02f, -1.039292769e-01f, +1.319323565e-03f, +3.596848512e-01f, +5.280609325e-01f, +2.670964963e-01f, -5.779982541e-02f, -8.289331748e-02f, +3.916960267e-02f, +3.892522138e-02f, -2.870127713e-02f, -1.883990649e-02f, +2.036938493e-02f, +8.249378367e-03f, -1.349072404e-02f, -2.785378707e-03f, +8.119534120e-03f, +3.360806545e-04f, -4.297890872e-03f, +4.287495982e-04f, +1.890022156e-03f, -4.067362447e-04f, -6.003404726e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.783913596e-05f, +1.724426288e-05f, -7.158682972e-05f, -1.254691095e-05f, +1.738917470e-04f, -3.553783943e-05f, -3.336701967e-04f, +1.706955005e-04f, +5.482325946e-04f, -4.526367213e-04f, -8.011412946e-04f, +9.661812678e-04f, +1.067919359e-03f, -1.865339109e-03f, -1.347181810e-03f, +3.585531680e-03f, +1.887915150e-03f, -8.518771646e-03f, -1.104073040e-02f, +1.712666080e-03f, +1.197847955e-02f, +6.217635905e-03f, -3.290183488e-03f, -2.629851781e-03f, +2.043083219e-03f, +1.242845318e-03f, -1.401833611e-03f, -5.378792310e-04f, +9.359571487e-04f, +1.713818723e-04f, -5.793505348e-04f, -2.569795609e-06f, +3.203299372e-04f, -5.187593367e-05f, -1.502899857e-04f, +4.907838704e-05f, +5.366786361e-05f, -2.697179213e-05f, +0.000000000e+00f, +0.000000000e+00f, -4.907285204e-05f, +7.808685214e-04f, -2.932062015e-04f, -2.846197833e-03f, +2.328283984e-03f, +5.240756887e-03f, -7.346295651e-03f, -6.062015180e-03f, +1.542949293e-02f, +2.506842768e-03f, -2.440106548e-02f, +7.293448477e-03f, +3.006258494e-02f, -2.239492279e-02f, -2.810484974e-02f, +3.847732640e-02f, +1.678121535e-02f, -4.943486501e-02f, +1.429072834e-03f, +5.047348537e-02f, -2.052843966e-02f, -4.083031007e-02f, +3.389492485e-02f, +2.429678041e-02f, -3.762226168e-02f, -7.156633823e-03f, +3.222025109e-02f, -5.107889989e-03f, -2.174166843e-02f, +1.025240941e-02f, +1.115281127e-02f, -9.531753544e-03f, -3.786312766e-03f, +6.055012458e-03f, +3.413928852e-04f, -2.655680181e-03f, +4.067362447e-04f, +6.003404726e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.783913596e-05f, -1.724426288e-05f, +9.896008361e-05f, -7.206093704e-06f, -2.533547466e-04f, +1.742957362e-04f, +4.077687376e-04f, -5.438400155e-04f, -4.081250930e-04f, +1.074415005e-03f, +8.592225231e-05f, -1.576121102e-03f, +6.186289941e-04f, +1.770015613e-03f, -1.562356451e-03f, -1.438788586e-03f, +2.419218187e-03f, +5.800135591e-04f, -2.830050922e-03f, +5.494381966e-04f, +2.599963312e-03f, -1.545555799e-03f, -1.814760920e-03f, +2.064871998e-03f, +7.955384059e-04f, -1.996355930e-03f, +7.922725540e-05f, +1.491032742e-03f, -5.661476899e-04f, -8.435634077e-04f, +6.456264225e-04f, +3.176913299e-04f, -4.709297982e-04f, -3.011285216e-05f, +2.379279690e-04f, -5.245783240e-05f, -5.366786361e-05f, +2.697179213e-05f, +0.000000000e+00f, /* 9,29 (40) */ +0.000000000e+00f, +6.691198800e-05f, -7.636242585e-04f, +2.616793381e-05f, +2.130645290e-03f, -7.055839932e-04f, -4.407098558e-03f, +2.644260916e-03f, +7.602622062e-03f, -6.795227100e-03f, -1.144095074e-02f, +1.447459199e-02f, +1.528660661e-02f, -2.776939432e-02f, -1.805261313e-02f, +5.131855413e-02f, +1.773186632e-02f, -1.020413617e-01f, -7.199448081e-03f, +3.486441208e-01f, +5.297735986e-01f, +2.790749758e-01f, -5.158218950e-02f, -8.618350097e-02f, +3.653975089e-02f, +4.096830459e-02f, -2.745843181e-02f, -2.024174010e-02f, +1.983150570e-02f, +9.185335516e-03f, -1.331934216e-02f, -3.364729242e-03f, +8.116964324e-03f, +6.564105917e-04f, -4.349766805e-03f, +2.784596125e-04f, +1.939100543e-03f, -3.530683810e-04f, -6.273122648e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.665995399e-05f, +1.902443446e-05f, -6.942925435e-05f, -1.845322694e-05f, +1.718008233e-04f, -2.223852773e-05f, -3.345906660e-04f, +1.462610725e-04f, +5.578298758e-04f, -4.134335714e-04f, -8.287183510e-04f, +9.089743302e-04f, +1.128125071e-03f, -1.785838056e-03f, -1.465405375e-03f, +3.467476865e-03f, +2.122327652e-03f, -8.210375133e-03f, -1.122918129e-02f, +1.225409024e-03f, +1.189956727e-02f, +6.563203266e-03f, -3.125049664e-03f, -2.782550855e-03f, +1.963275518e-03f, +1.339753471e-03f, -1.366972949e-03f, -6.020962355e-04f, +9.250699226e-04f, +2.119451354e-04f, -5.799757153e-04f, -2.583908748e-05f, +3.249441212e-04f, -4.035585483e-05f, -1.548431800e-04f, +4.459906621e-05f, +5.656931007e-05f, -2.597573519e-05f, +0.000000000e+00f, +0.000000000e+00f, -6.691198800e-05f, +7.636242585e-04f, -1.942461179e-04f, -2.853403927e-03f, +2.074929238e-03f, +5.415052624e-03f, -6.938526914e-03f, -6.605855196e-03f, +1.502136784e-02f, +3.581257773e-03f, -2.431514323e-02f, +5.717327375e-03f, +3.068121394e-02f, -2.062490717e-02f, -2.966720620e-02f, +3.703853782e-02f, +1.920043354e-02f, -4.885485145e-02f, -1.400978088e-03f, +5.102292356e-02f, -1.792847634e-02f, -4.237586587e-02f, +3.208016393e-02f, +2.636165241e-02f, -3.682672327e-02f, -9.152989753e-03f, +3.229947834e-02f, -3.616857248e-03f, -2.230781612e-02f, +9.408846001e-03f, +1.179843769e-02f, -9.214062214e-03f, -4.257242564e-03f, +6.024899606e-03f, +5.793208542e-04f, -2.708138013e-03f, +3.530683810e-04f, +6.273122648e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.665995399e-05f, -1.902443446e-05f, +9.596697517e-05f, +2.282161354e-06f, -2.535472158e-04f, +1.535048423e-04f, +4.216293789e-04f, -5.143607579e-04f, -4.484597407e-04f, +1.049669748e-03f, +1.594984803e-04f, -1.578383327e-03f, +5.197332231e-04f, +1.820697626e-03f, -1.462906510e-03f, -1.545349051e-03f, +2.352629094e-03f, +7.278325354e-04f, -2.822877675e-03f, +3.936863883e-04f, +2.657966449e-03f, -1.419628401e-03f, -1.919410225e-03f, +1.993822389e-03f, +9.133656519e-04f, -1.982662889e-03f, -1.968637598e-05f, +1.517182323e-03f, -5.035089837e-04f, -8.840778467e-04f, +6.184912964e-04f, +3.522287850e-04f, -4.667416090e-04f, -5.018332352e-05f, +2.423941790e-04f, -4.500395056e-05f, -5.656931007e-05f, +2.597573519e-05f, +0.000000000e+00f, /* 9,30 (40) */ +0.000000000e+00f, +8.357194200e-05f, -7.445998240e-04f, -4.326132053e-05f, +2.112192063e-03f, -5.337831700e-04f, -4.429337085e-03f, +2.309670250e-03f, +7.748883135e-03f, -6.237397224e-03f, -1.185438431e-02f, +1.364587364e-02f, +1.619558094e-02f, -2.664126924e-02f, -1.983845119e-02f, +4.985314876e-02f, +2.119934318e-02f, -9.991903408e-02f, -1.540982321e-02f, +3.374149395e-01f, +5.309990076e-01f, +2.909745431e-01f, -4.501898624e-02f, -8.930855063e-02f, +3.375720004e-02f, +4.293158011e-02f, -2.611867834e-02f, -2.160871305e-02f, +1.922940947e-02f, +1.011040544e-02f, -1.310739703e-02f, -3.944704957e-03f, +8.091125237e-03f, +9.813547128e-04f, -4.390122660e-03f, +1.236164325e-04f, +1.983699609e-03f, -2.964990710e-04f, -6.532880000e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.546725007e-05f, +2.067628486e-05f, -6.711753041e-05f, -2.414937287e-05f, +1.692513351e-04f, -9.155233045e-06f, -3.345337019e-04f, +1.218519049e-04f, +5.656906386e-04f, -3.737057772e-04f, -8.535545205e-04f, +8.501259890e-04f, +1.184296597e-03f, -1.702718913e-03f, -1.577657299e-03f, +3.342510736e-03f, +2.345791698e-03f, -7.894042301e-03f, -1.139971809e-02f, +7.360767122e-04f, +1.180217583e-02f, +6.904336239e-03f, -2.947865806e-03f, -2.930634935e-03f, +1.876698597e-03f, +1.434488871e-03f, -1.327740406e-03f, -6.656193674e-04f, +9.113871867e-04f, +2.525755473e-04f, -5.789455142e-04f, -4.946566872e-05f, +3.286985463e-04f, -2.846385128e-05f, -1.590369716e-04f, +3.985765772e-05f, +5.937724690e-05f, -2.484828019e-05f, +0.000000000e+00f, +0.000000000e+00f, -8.357194200e-05f, +7.445998240e-04f, -9.827914271e-05f, -2.851121766e-03f, +1.821382022e-03f, +5.568557466e-03f, -6.516897535e-03f, -7.120215954e-03f, +1.457290810e-02f, +4.630927521e-03f, -2.415564475e-02f, +4.138944048e-03f, +3.120094716e-02f, -1.880420955e-02f, -3.113011271e-02f, +3.549318877e-02f, +2.155306263e-02f, -4.812701891e-02f, -4.223855762e-03f, +5.141660995e-02f, -1.527050990e-02f, -4.379549427e-02f, +3.016075371e-02f, +2.835547480e-02f, -3.591335762e-02f, -1.113565264e-02f, +3.227979197e-02f, -2.099674924e-03f, -2.281132511e-02f, +8.524768155e-03f, +1.241692899e-02f, -8.861833429e-03f, -4.723984173e-03f, +5.974716282e-03f, +8.217150332e-04f, -2.753141964e-03f, +2.964990710e-04f, +6.532880000e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.546725007e-05f, -2.067628486e-05f, +9.273332497e-05f, +1.148671485e-05f, -2.528998792e-04f, +1.326642441e-04f, +4.338856277e-04f, -4.837415165e-04f, -4.868021676e-04f, +1.021958948e-03f, +2.317611561e-04f, -1.575722699e-03f, +4.200416145e-04f, +1.865395081e-03f, -1.359500260e-03f, -1.646659396e-03f, +2.278997210e-03f, +8.730845232e-04f, -2.806996037e-03f, +2.367048336e-04f, +2.707823740e-03f, -1.289012509e-03f, -2.018479416e-03f, +1.916252486e-03f, +1.029049061e-03f, -1.962691735e-03f, -1.193812653e-04f, +1.538832243e-03f, -4.385649540e-04f, -9.223241014e-04f, +5.889763422e-04f, +3.862230372e-04f, -4.609517421e-04f, -7.053763744e-05f, +2.461543489e-04f, -3.716170056e-05f, -5.937724690e-05f, +2.484828019e-05f, +0.000000000e+00f, /* 9,31 (40) */ +0.000000000e+00f, +9.903919207e-05f, -7.239235392e-04f, -1.103788509e-04f, +2.088042690e-03f, -3.645318349e-04f, -4.438492318e-03f, +1.975136548e-03f, +7.870735040e-03f, -5.671706586e-03f, -1.222809009e-02f, +1.279231912e-02f, +1.704570693e-02f, -2.545697265e-02f, -2.154117010e-02f, +4.827549146e-02f, +2.454185392e-02f, -9.757324238e-02f, -2.330386552e-02f, +3.260152214e-01f, +5.317350843e-01f, +3.027767189e-01f, -3.811465000e-02f, -9.225641644e-02f, +3.082656510e-02f, +4.480827871e-02f, -2.468418947e-02f, -2.293645346e-02f, +1.856379010e-02f, +1.102179262e-02f, -1.285482148e-02f, -4.523650471e-03f, +8.041659568e-03f, +1.310053259e-03f, -4.418586511e-03f, -3.542053911e-05f, +2.023557267e-03f, -2.371218241e-04f, -6.781362801e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.426633530e-05f, +2.219819630e-05f, -6.466356242e-05f, -2.962293171e-05f, +1.662613606e-04f, +3.677848260e-06f, -3.335181116e-04f, +9.753773237e-05f, +5.718216365e-04f, -3.335738481e-04f, -8.756226649e-04f, +7.898243641e-04f, +1.236341038e-03f, -1.616263007e-03f, -1.683739550e-03f, +3.211078300e-03f, +2.558030536e-03f, -7.570460241e-03f, -1.155215612e-02f, +2.454975392e-04f, +1.168634640e-02f, +7.240324242e-03f, -2.758795409e-03f, -3.073632881e-03f, +1.783473198e-03f, +1.526756362e-03f, -1.284178155e-03f, -7.282588089e-04f, +8.949038318e-04f, +2.931575445e-04f, -5.762344780e-04f, -7.338679611e-05f, +3.315651769e-04f, -1.622795872e-05f, -1.628499352e-04f, +3.486249123e-05f, +6.207941071e-05f, -2.358906275e-05f, +0.000000000e+00f, +0.000000000e+00f, -9.903919207e-05f, +7.239235392e-04f, -5.545817737e-06f, -2.839635051e-03f, +1.568482143e-03f, +5.701221710e-03f, -6.083011907e-03f, -7.603957470e-03f, +1.408610593e-02f, +5.652886470e-03f, -2.392388360e-02f, +2.563221349e-03f, +3.162098877e-02f, -1.693881447e-02f, -3.248961297e-02f, +3.384652937e-02f, +2.383205984e-02f, -4.725393439e-02f, -7.030851800e-03f, +5.165331479e-02f, -1.256268616e-02f, -4.508450678e-02f, +2.814227429e-02f, +3.027172728e-02f, -3.488430856e-02f, -1.309834438e-02f, +3.216041070e-02f, -5.608426814e-04f, -2.324989006e-02f, +7.602444053e-03f, +1.300590533e-02f, -8.475610392e-03f, -5.184935915e-03f, +5.904178645e-03f, +1.067869382e-03f, -2.790303664e-03f, +2.371218241e-04f, +6.781362801e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.426633530e-05f, -2.219819630e-05f, +8.927911243e-05f, +2.038303472e-05f, -2.514351183e-04f, +1.118440529e-04f, +4.445270837e-04f, -4.520995028e-04f, -5.230583249e-04f, +9.914079357e-04f, +3.024963154e-04f, -1.568194600e-03f, +3.198737579e-04f, +1.904009142e-03f, -1.252483614e-03f, -1.742426403e-03f, +2.198575782e-03f, +1.015321536e-03f, -2.782464711e-03f, +7.898385675e-05f, +2.749369645e-03f, -1.154106075e-03f, -2.111638671e-03f, +1.832375687e-03f, +1.142211979e-03f, -1.936460947e-03f, -2.195481678e-04f, +1.555869431e-03f, -3.714972203e-04f, -9.581496479e-04f, +5.571422708e-04f, +4.195534187e-04f, -4.535489080e-04f, -9.111288168e-05f, +2.491776424e-04f, -2.894835191e-05f, -6.207941071e-05f, +2.358906275e-05f, +0.000000000e+00f, /* 10, 0 (36) */ +0.000000000e+00f, -7.608322579e-04f, +1.118776550e-03f, +1.378251293e-03f, -3.996866387e-03f, -8.778420085e-05f, +8.463162654e-03f, -5.917369532e-03f, -1.170469082e-02f, +1.883055804e-02f, +7.720230922e-03f, -3.819223843e-02f, +1.284965533e-02f, +5.985703519e-02f, -6.898457622e-02f, -7.711293861e-02f, +3.046497488e-01f, +5.837128805e-01f, +3.046497488e-01f, -7.711293861e-02f, -6.898457622e-02f, +5.985703519e-02f, +1.284965533e-02f, -3.819223843e-02f, +7.720230922e-03f, +1.883055804e-02f, -1.170469082e-02f, -5.917369532e-03f, +8.463162654e-03f, -8.778420085e-05f, -3.996866387e-03f, +1.378251293e-03f, +1.118776550e-03f, -7.608322579e-04f, -9.130911868e-05f, +0.000000000e+00f, +0.000000000e+00f, -5.914139316e-06f, -8.632770721e-05f, +1.073408404e-04f, +1.219837312e-04f, -3.461666226e-04f, +1.909220717e-05f, +6.649921034e-04f, -5.234066115e-04f, -8.276106219e-04f, +1.503726322e-03f, +4.097045852e-04f, -2.925685177e-03f, +1.241257195e-03f, +4.870434080e-03f, -6.086218167e-03f, -1.443571605e-02f, -3.244813960e-04f, +1.433462083e-02f, +6.555138706e-03f, -4.756606318e-03f, -1.468651897e-03f, +2.936223164e-03f, -2.877461347e-04f, -1.556214796e-03f, +7.783702355e-04f, +5.731263495e-04f, -6.578340876e-04f, -4.876331166e-05f, +3.545617704e-04f, -1.110089722e-04f, -1.155219012e-04f, +8.517375766e-05f, +9.239896990e-06f, -2.461555001e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.608322579e-04f, -1.118776550e-03f, -1.032757977e-03f, +5.537963620e-03f, -3.277985306e-03f, -8.278225430e-03f, +1.383882521e-02f, +1.771302895e-03f, -2.355345110e-02f, +1.719759611e-02f, +1.895372978e-02f, -3.796855404e-02f, +5.697284657e-03f, +4.123561278e-02f, -3.721413273e-02f, -1.801118074e-02f, +5.173229864e-02f, -1.801118074e-02f, -3.721413273e-02f, +4.123561278e-02f, +5.697284657e-03f, -3.796855404e-02f, +1.895372978e-02f, +1.719759611e-02f, -2.355345110e-02f, +1.771302895e-03f, +1.383882521e-02f, -8.278225430e-03f, -3.277985306e-03f, +5.537963620e-03f, -1.032757977e-03f, -1.549282673e-03f, +7.608322579e-04f, +9.130911868e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.914139316e-06f, +8.632770721e-05f, -1.783547172e-04f, -6.543241704e-05f, +4.910517381e-04f, -3.801515912e-04f, -5.372059098e-04f, +1.157186281e-03f, -1.982043651e-04f, -1.547251752e-03f, +1.594954770e-03f, +7.330013445e-04f, -2.601260275e-03f, +1.166260110e-03f, +2.082984900e-03f, -2.839630915e-03f, -9.467771006e-05f, +2.909566064e-03f, -1.952337783e-03f, -1.322643785e-03f, +2.595171601e-03f, -5.983288007e-04f, -1.679199776e-03f, +1.499902243e-03f, +2.884034970e-04f, -1.180697021e-03f, +4.941452697e-04f, +4.191009431e-04f, -4.896739099e-04f, +4.546527100e-05f, +1.883368647e-04f, -1.024473576e-04f, -9.239896990e-06f, +2.461555001e-05f, +0.000000000e+00f, /* 10, 1 (36) */ +0.000000000e+00f, -7.667463972e-04f, +1.032448843e-03f, +1.485592133e-03f, -3.874882656e-03f, -4.339508234e-04f, +8.482254862e-03f, -5.252377428e-03f, -1.222809744e-02f, +1.800294742e-02f, +9.223957244e-03f, -3.778253385e-02f, +9.923970151e-03f, +6.109829238e-02f, -6.411414215e-02f, -8.319915678e-02f, +2.902140328e-01f, +5.833883991e-01f, +3.189843696e-01f, -7.055779991e-02f, -7.374118254e-02f, +5.838838329e-02f, +1.578587849e-02f, -3.847998457e-02f, +6.164016126e-03f, +1.960892828e-02f, -1.113156447e-02f, -6.575203619e-03f, +8.414399343e-03f, +2.667775696e-04f, -4.107875360e-03f, +1.262729392e-03f, +1.203950308e-03f, -7.515923609e-04f, -1.159246687e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.695957155e-06f, -8.711737723e-05f, +9.900148872e-05f, +1.322531958e-04f, -3.367573684e-04f, -1.003082804e-05f, +6.697485541e-04f, -4.728222327e-04f, -8.732128755e-04f, +1.447121671e-03f, +5.282028638e-04f, -2.905747658e-03f, +1.014382450e-03f, +4.966345222e-03f, -5.615323730e-03f, -1.450999957e-02f, -9.727815458e-04f, +1.420671412e-02f, +7.020957778e-03f, -4.624788907e-03f, -1.695851340e-03f, +2.937157559e-03f, -1.626761686e-04f, -1.604338211e-03f, +7.255967097e-04f, +6.217933644e-04f, -6.482531711e-04f, -7.888847102e-05f, +3.618896117e-04f, -9.935192578e-05f, -1.235090111e-04f, +8.364854408e-05f, +1.266265802e-05f, -2.561579456e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.667463972e-04f, -1.032448843e-03f, -1.211112694e-03f, +5.472531203e-03f, -2.786933568e-03f, -8.658377021e-03f, +1.330161930e-02f, +2.928489176e-03f, -2.375165546e-02f, +1.565034436e-02f, +2.054868455e-02f, -3.723555270e-02f, +3.096024382e-03f, +4.240187289e-02f, -3.513114783e-02f, -2.085081165e-02f, +5.163762093e-02f, -1.510161467e-02f, -3.916647051e-02f, +3.991296900e-02f, +8.292456257e-03f, -3.856688284e-02f, +1.727453001e-02f, +1.869749835e-02f, -2.326504760e-02f, +5.906058744e-04f, +1.433297048e-02f, -7.859124487e-03f, -3.767659216e-03f, +5.583428891e-03f, -8.444211122e-04f, -1.651730030e-03f, +7.515923609e-04f, +1.159246687e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.695957155e-06f, +8.711737723e-05f, -1.679480372e-04f, -8.462796079e-05f, +4.905006326e-04f, -3.404933445e-04f, -5.775260078e-04f, +1.129665192e-03f, -1.083713075e-04f, -1.588342783e-03f, +1.505522069e-03f, +8.639878579e-04f, -2.597677261e-03f, +1.006217692e-03f, +2.205556864e-03f, -2.759282259e-03f, -2.836783930e-04f, +2.968811143e-03f, -1.814083871e-03f, -1.474765034e-03f, +2.579379779e-03f, -4.604535010e-04f, -1.757891766e-03f, +1.446409830e-03f, +3.786266502e-04f, -1.200049301e-03f, +4.484675188e-04f, +4.571734157e-04f, -4.863304728e-04f, +2.478992676e-05f, +1.978385212e-04f, -9.952780372e-05f, -1.266265802e-05f, +2.561579456e-05f, +0.000000000e+00f, /* 10, 2 (36) */ +0.000000000e+00f, -7.694423543e-04f, +9.453314657e-04f, +1.584593622e-03f, -3.742629460e-03f, -7.707081919e-04f, +8.472224034e-03f, -4.582628874e-03f, -1.270091967e-02f, +1.712973454e-02f, +1.067107892e-02f, -3.725433098e-02f, +7.018222492e-03f, +6.211267483e-02f, -5.914779692e-02f, -8.881448051e-02f, +2.757040332e-01f, +5.824156176e-01f, +3.331910838e-01f, -6.353684213e-02f, -7.836597145e-02f, +5.669253195e-02f, +1.872303605e-02f, -3.864266074e-02f, +4.559677915e-03f, +2.033452499e-02f, -1.050977111e-02f, -7.223456790e-03f, +8.335510872e-03f, +6.286671812e-04f, -4.207227285e-03f, +1.139220381e-03f, +1.287598852e-03f, -7.389297029e-04f, -1.415404632e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.048843568e-07f, -8.755099897e-05f, +9.053917835e-05f, +1.417974878e-04f, -3.263896975e-04f, -3.851558106e-05f, +6.721327113e-04f, -4.215609389e-04f, -9.150860880e-04f, +1.386659325e-03f, +6.429094186e-04f, -2.876641169e-03f, +7.887284655e-04f, +5.044459890e-03f, -5.143574865e-03f, -1.455753372e-02f, -1.619095412e-03f, +1.405205896e-02f, +7.482542598e-03f, -4.474956746e-03f, -1.922127813e-03f, +2.928311885e-03f, -3.485957021e-05f, -1.647858294e-03f, +6.694089971e-04f, +6.692198707e-04f, -6.362361767e-04f, -1.093701351e-04f, +3.680996854e-04f, -8.703871292e-05f, -1.312663145e-04f, +8.174639255e-05f, +1.617106558e-05f, -2.653772083e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.694423543e-04f, -9.453314657e-04f, -1.379060731e-03f, +5.387903242e-03f, -2.296432935e-03f, -8.998870366e-03f, +1.272409329e-02f, +4.058154368e-03f, -2.386002677e-02f, +1.406200157e-02f, +2.205420662e-02f, -3.637156484e-02f, +4.983471210e-04f, +4.340809058e-02f, -3.292559096e-02f, -2.361009391e-02f, +5.135394254e-02f, -1.213280353e-02f, -4.098055438e-02f, +3.843820396e-02f, +1.087183604e-02f, -3.902733634e-02f, +1.551663824e-02f, +2.014390818e-02f, -2.288642095e-02f, -6.094434262e-04f, +1.478143799e-02f, -7.401951071e-03f, -4.253989689e-03f, +5.608218818e-03f, -6.465825911e-04f, -1.751257834e-03f, +7.389297029e-04f, +1.415404632e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.048843568e-07f, +8.755099897e-05f, -1.571730812e-04f, -1.029932155e-04f, +4.880643032e-04f, -3.002939445e-04f, -6.149948290e-04f, +1.098295382e-03f, -1.924088598e-05f, -1.623084914e-03f, +1.411283666e-03f, +9.908224858e-04f, -2.584490563e-03f, +8.431315882e-04f, +2.319617192e-03f, -2.668835727e-03f, -4.716162238e-04f, +3.017129766e-03f, -1.668721691e-03f, -1.622033927e-03f, +2.553890217e-03f, -3.198743867e-04f, -1.830683648e-03f, +1.386915047e-03f, +4.685275682e-04f, -1.215109297e-03f, +4.003084851e-04f, +4.942014676e-04f, -4.809920841e-04f, +3.474341315e-06f, +2.068042874e-04f, -9.605047892e-05f, -1.617106558e-05f, +2.653772083e-05f, +0.000000000e+00f, /* 10, 3 (36) */ +0.000000000e+00f, -7.690374700e-04f, +8.577804668e-04f, +1.675132800e-03f, -3.600831973e-03f, -1.097097889e-03f, +8.433708453e-03f, -3.910496163e-03f, -1.312248061e-02f, +1.621464846e-02f, +1.205773824e-02f, -3.661142156e-02f, +4.141581323e-03f, +6.290140330e-02f, -5.410333703e-02f, -9.395805537e-02f, +2.611464995e-01f, +5.807965222e-01f, +3.472431427e-01f, -5.605429953e-02f, -8.284092820e-02f, +5.477040414e-02f, +2.165134794e-02f, -3.867752031e-02f, +2.911819621e-03f, +2.100393398e-02f, -9.840551239e-03f, -7.859692967e-03f, +8.226140737e-03f, +9.967668667e-04f, -4.294265998e-03f, +1.007954066e-03f, +1.369345244e-03f, -7.227586373e-04f, -1.680781841e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.379445362e-06f, -8.763798329e-05f, +8.198878583e-05f, +1.505998611e-04f, -3.151215343e-04f, -6.627588767e-05f, +6.721815354e-04f, -3.698094587e-04f, -9.531535107e-04f, +1.322606356e-03f, +7.535106118e-04f, -2.838621625e-03f, +5.649797821e-04f, +5.104944408e-03f, -4.672080105e-03f, -1.457844287e-02f, -2.262104276e-03f, +1.387078132e-02f, +7.938758087e-03f, -4.307133336e-03f, -2.146743094e-03f, +2.909538260e-03f, +9.532349545e-05f, -1.686548354e-03f, +6.099398339e-04f, +7.152190423e-04f, -6.217782838e-04f, -1.401075016e-04f, +3.731445150e-04f, -7.409854095e-05f, -1.387578968e-04f, +7.946299958e-05f, +1.975300466e-05f, -2.737325389e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.690374700e-04f, -8.577804668e-04f, -1.536233813e-03f, +5.284910027e-03f, -1.808368632e-03f, -9.299164310e-03f, +1.210909846e-02f, +5.156449751e-03f, -2.387926765e-02f, +1.243891666e-02f, +2.346549029e-02f, -3.538074236e-02f, -2.086143442e-03f, +4.425122217e-02f, -3.060597377e-02f, -2.627892964e-02f, +5.088232632e-02f, -9.115673763e-03f, -4.264927607e-02f, +3.681617003e-02f, +1.342572625e-02f, -3.934721073e-02f, +1.368595459e-02f, +2.153082323e-02f, -2.241789338e-02f, -1.824552723e-03f, +1.518174648e-02f, -6.907749604e-03f, -4.734981773e-03f, +5.611693159e-03f, -4.397783037e-04f, -1.847308313e-03f, +7.227586373e-04f, +1.680781841e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.379445362e-06f, +8.763798329e-05f, -1.460861484e-04f, -1.204743522e-04f, +4.837931722e-04f, -2.597202162e-04f, -6.495145785e-04f, +1.063251170e-03f, +6.885707847e-05f, -1.651412983e-03f, +1.312636598e-03f, +1.113058466e-03f, -2.561804269e-03f, +6.776258297e-04f, +2.424762866e-03f, -2.568644751e-03f, -6.577871599e-04f, +3.054326685e-03f, -1.516778097e-03f, -1.763876605e-03f, +2.518745368e-03f, -1.771042394e-04f, -1.897248067e-03f, +1.321583081e-03f, +5.577571095e-04f, -1.225758205e-03f, +3.498160386e-04f, +5.300186960e-04f, -4.736370068e-04f, -1.840916351e-05f, +2.151795872e-04f, -9.201197506e-05f, -1.975300466e-05f, +2.737325389e-05f, +0.000000000e+00f, /* 10, 4 (36) */ +0.000000000e+00f, -7.656580246e-04f, +7.701424835e-04f, +1.757121586e-03f, -3.450232112e-03f, -1.412219424e-03f, +8.367432565e-03f, -3.238314627e-03f, -1.349229007e-02f, +1.526149494e-02f, +1.338034460e-02f, -3.585791095e-02f, +1.302959698e-03f, +6.346638308e-02f, -4.899839262e-02f, -9.863013548e-02f, +2.465680566e-01f, +5.785344179e-01f, +3.611139240e-01f, -4.811554144e-02f, -8.714806153e-02f, +5.262366104e-02f, +2.456088620e-02f, -3.858219681e-02f, +1.225271268e-03f, +2.161387382e-02f, -9.125332197e-03f, -8.481471251e-03f, +8.086033235e-03f, +1.369911382e-03f, -4.368364539e-03f, +8.691961692e-04f, +1.448808244e-03f, -7.030056326e-04f, -1.954514380e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.219625487e-06f, -8.738885041e-05f, +7.338460892e-05f, +1.586466923e-04f, -3.030127815e-04f, -9.322986019e-05f, +6.699394056e-04f, -3.177528972e-04f, -9.873525818e-04f, +1.255237391e-03f, +8.597114582e-04f, -2.791969079e-03f, +3.438028954e-04f, +5.148010231e-03f, -4.201934253e-03f, -1.457291283e-02f, -2.900497611e-03f, +1.366307007e-02f, +8.388469819e-03f, -4.121391341e-03f, -2.368950490e-03f, +2.880718331e-03f, +2.274785910e-04f, -1.720194238e-03f, +5.473355139e-04f, +7.596056841e-04f, -6.048831993e-04f, -1.709968175e-04f, +3.769798469e-04f, -6.056366392e-05f, -1.459479235e-04f, +7.679548794e-05f, +2.339563256e-05f, -2.811445097e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.656580246e-04f, -7.701424835e-04f, -1.682319961e-03f, +5.164435675e-03f, -1.324575460e-03f, -9.558884527e-03f, +1.145958388e-02f, +6.219700920e-03f, -2.381041058e-02f, +1.078750368e-02f, +2.477812689e-02f, -3.426768389e-02f, -4.647947712e-03f, +4.492884800e-02f, -2.818121091e-02f, -2.884757439e-02f, +5.022453916e-02f, -6.061347078e-03f, -4.416605417e-02f, +3.505229343e-02f, +1.594447162e-02f, -3.952431497e-02f, +1.178870653e-02f, +2.285240631e-02f, -2.186013627e-02f, -3.050310928e-03f, +1.553156252e-02f, -6.377730908e-03f, -5.208618780e-03f, +5.593283996e-03f, -2.245987165e-04f, -1.939320288e-03f, +7.030056326e-04f, +1.954514380e-04f, +0.000000000e+00f, +0.000000000e+00f, -6.219625487e-06f, +8.738885041e-05f, -1.347433312e-04f, -1.370225164e-04f, +4.777440308e-04f, -2.189374102e-04f, -6.810005888e-04f, +1.024718709e-03f, +1.556007156e-04f, -1.673287075e-03f, +1.209991291e-03f, +1.230269716e-03f, -2.529757947e-03f, +5.103309886e-04f, +2.520625783e-03f, -2.459099157e-03f, -8.414939287e-04f, +3.080248590e-03f, -1.358806323e-03f, -1.899737561e-03f, +2.474024768e-03f, -3.266778794e-05f, -1.957278847e-03f, +1.250603378e-03f, +6.459645926e-04f, -1.231892916e-03f, +2.971496820e-04f, +5.644605407e-04f, -4.642513548e-04f, -4.078411243e-05f, +2.229109352e-04f, -8.741141862e-05f, -2.339563256e-05f, +2.811445097e-05f, +0.000000000e+00f, /* 10, 5 (36) */ +0.000000000e+00f, -7.594383991e-04f, +6.827536331e-04f, +1.830506195e-03f, -3.291585419e-03f, -1.715232205e-03f, +8.274202705e-03f, -2.568375222e-03f, -1.381004296e-02f, +1.427414236e-02f, +1.463558199e-02f, -3.499819949e-02f, -1.489009381e-03f, +6.381018598e-02f, -4.385038239e-02f, -1.028320697e-01f, +2.319951438e-01f, +5.756339203e-01f, +3.747769941e-01f, -3.972707162e-02f, -9.126945287e-02f, +5.025471055e-02f, +2.744160453e-02f, -3.835471822e-02f, -4.949229710e-04f, +2.216120933e-02f, -8.365726513e-03f, -9.086354450e-03f, +7.915036418e-03f, +1.746891229e-03f, -4.428928203e-03f, +7.232482457e-04f, +1.525603732e-03f, -6.796100001e-04f, -2.235658889e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.918174004e-06f, -8.681515683e-05f, +6.476024872e-05f, +1.659274605e-04f, -2.901250602e-04f, -1.193000958e-04f, +6.654578295e-04f, -2.655741250e-04f, -1.017634902e-03f, +1.184833580e-03f, +9.612362918e-04f, -2.736986459e-03f, +1.258445563e-04f, +5.173912764e-03f, -3.734215656e-03f, -1.454119011e-02f, -3.532976323e-03f, +1.342917682e-02f, +8.830546986e-03f, -3.917852994e-03f, -2.587996928e-03f, +2.841764127e-03f, +3.611980788e-04f, -1.748595268e-03f, +4.817556115e-04f, +8.021969079e-04f, -5.855633017e-04f, -2.019316964e-04f, +3.795648824e-04f, -4.646933020e-05f, -1.528007835e-04f, +7.374245794e-05f, +2.708541354e-05f, -2.875354420e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.594383991e-04f, -6.827536331e-04f, -1.817063292e-03f, +5.027413158e-03f, -8.468314290e-04f, -9.777821937e-03f, +1.077858329e-02f, +7.244419629e-03f, -2.365480986e-02f, +9.114216603e-03f, +2.598811818e-02f, -3.303741417e-02f, -7.177705658e-03f, +4.543917899e-02f, -2.566058512e-02f, -3.130667354e-02f, +4.938304523e-02f, -2.981098487e-03f, -4.552486049e-02f, +3.315255587e-02f, +1.841849639e-02f, -3.955698276e-02f, +9.831427680e-03f, +2.410300969e-02f, -2.121417168e-02f, -4.282203844e-03f, +1.582871220e-02f, -5.813270367e-03f, -5.672870134e-03f, +5.552499883e-03f, -1.687781361e-06f, -2.026731707e-03f, +6.796100001e-04f, +2.235658889e-04f, +0.000000000e+00f, +0.000000000e+00f, -8.918174004e-06f, +8.681515683e-05f, -1.232002731e-04f, -1.525939204e-04f, +4.699796753e-04f, -1.781085629e-04f, -7.093814518e-04f, +9.828950914e-04f, +2.406772698e-04f, -1.688692430e-03f, +1.103769857e-03f, +1.342052330e-03f, -2.488525914e-03f, +3.418817327e-04f, +2.606874067e-03f, -2.340623620e-03f, -1.022048699e-03f, +3.094784748e-03f, -1.195383927e-03f, -2.029081848e-03f, +2.419844927e-03f, +1.129002439e-04f, -2.010492361e-03f, +1.174189137e-03f, +7.327991633e-04f, -1.233426639e-03f, +2.424800867e-04f, +5.973649916e-04f, -4.528293106e-04f, -6.357011090e-05f, +2.299462057e-04f, -8.225054997e-05f, -2.708541354e-05f, +2.875354420e-05f, +0.000000000e+00f, /* 10, 6 (36) */ +0.000000000e+00f, -7.505202251e-04f, +5.959384762e-04f, +1.895266444e-03f, -3.125657959e-03f, -2.005357265e-03f, +8.154902609e-03f, -1.902917392e-03f, -1.407561709e-02f, +1.325650746e-02f, +1.582041557e-02f, -3.403696320e-02f, -4.225995840e-03f, +6.393603053e-02f, -3.867646963e-02f, -1.065662854e-01f, +2.174539537e-01f, +5.721009440e-01f, +3.882061709e-01f, -3.089652464e-02f, -9.518730587e-02f, +4.766671363e-02f, +3.028336865e-02f, -3.799352014e-02f, -2.243518239e-03f, +2.264296494e-02f, -7.563529605e-03f, -9.671917752e-03f, +7.713104721e-03f, +2.126456111e-03f, -4.475397533e-03f, +5.704474622e-04f, +1.599346190e-03f, -6.525245865e-04f, -2.523194331e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.146869604e-05f, -8.592942003e-05f, +5.614849721e-05f, +1.724347159e-04f, -2.765214500e-04f, -1.444138644e-04f, +6.587951315e-04f, -2.134531864e-04f, -1.043966167e-03f, +1.111681544e-03f, +1.057829360e-03f, -2.673998238e-03f, -8.826984939e-05f, +5.182950086e-03f, -3.269983539e-03f, -1.448358090e-02f, -4.158255968e-03f, +1.316941546e-02f, +9.263865382e-03f, -3.696690383e-03f, -2.803125091e-03f, +2.792618837e-03f, +4.960622527e-04f, -1.771565127e-03f, +4.133726548e-04f, +8.428128131e-04f, -5.638397564e-04f, -2.328034518e-04f, +3.808625011e-04f, -3.185371746e-05f, -1.592812343e-04f, +7.030403398e-05f, +3.080815738e-05f, -2.928298365e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.505202251e-04f, -5.959384762e-04f, -1.940263565e-03f, +4.874819238e-03f, -3.768517537e-04f, -9.955930500e-03f, +1.006920184e-02f, +8.227314721e-03f, -2.341413259e-02f, +7.425524173e-03f, +2.709188803e-02f, -3.169536184e-02f, -9.666231573e-03f, +4.578106072e-02f, -2.305371106e-02f, -3.364729716e-02f, +4.836099653e-02f, +1.136862607e-04f, -4.672024442e-02f, +3.112347402e-02f, +2.083834132e-02f, -3.944408252e-02f, +7.820935319e-03f, +2.527719883e-02f, -2.048137252e-02f, -5.515630483e-03f, +1.607119229e-02f, -5.215905376e-03f, -6.125699445e-03f, +5.488929773e-03f, +2.282584243e-04f, -2.108982257e-03f, +6.525245865e-04f, +2.523194331e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.146869604e-05f, +8.592942003e-05f, -1.115119337e-04f, -1.671499120e-04f, +4.605685252e-04f, -1.373938764e-04f, -7.345990946e-04f, +9.379874212e-04f, +3.237842138e-04f, -1.697639239e-03f, +9.944043599e-04f, +1.448025975e-03f, -2.438316371e-03f, +1.729143738e-04f, +2.683213238e-03f, -2.213675986e-03f, -1.198775712e-03f, +3.097867476e-03f, -1.027110630e-03f, -2.151397215e-03f, +2.356359075e-03f, +2.590571425e-04f, -2.056628820e-03f, +1.092576711e-03f, +8.179111777e-04f, -1.230289469e-03f, +1.859885772e-04f, +6.285732982e-04f, -4.393733119e-04f, -8.668310176e-05f, +2.362349022e-04f, -7.653379225e-05f, -3.080815738e-05f, +2.928298365e-05f, +0.000000000e+00f, /* 10, 7 (36) */ +0.000000000e+00f, -7.390515291e-04f, +5.100090562e-04f, +1.951414941e-03f, -2.953223243e-03f, -2.281878715e-03f, +8.010488745e-03f, -1.244122261e-03f, -1.428907027e-02f, +1.221254129e-02f, +1.693209711e-02f, -3.297913384e-02f, -6.899994078e-03f, +6.384776068e-02f, -3.349351954e-02f, -1.098362689e-01f, +2.029703728e-01f, +5.679426880e-01f, +4.013755864e-01f, -2.163265925e-02f, -9.888399625e-02f, +4.486358854e-02f, +3.307598749e-02f, -3.749745789e-02f, -4.015083365e-03f, +2.305633760e-02f, -6.720716792e-03f, -1.023575751e-02f, +7.480301269e-03f, +2.507318612e-03f, -4.507251251e-03f, +4.111662279e-04f, +1.669650224e-03f, -6.217164291e-04f, -2.816024168e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.386565486e-05f, -8.474504102e-05f, +4.758123071e-05f, +1.781640366e-04f, -2.622662284e-04f, -1.685032771e-04f, +6.500161234e-04f, -1.615667266e-04f, -1.066326044e-03f, +1.036072332e-03f, +1.149255343e-03f, -2.603349068e-03f, -2.979378363e-04f, +5.175461552e-03f, -2.810275417e-03f, -1.440045004e-02f, -4.775069922e-03f, +1.288416172e-02f, +9.687310381e-03f, -3.458125588e-03f, -3.013575599e-03f, +2.733257492e-03f, +6.316405263e-04f, -1.788932731e-03f, +3.423717487e-04f, +8.812771671e-04f, -5.397426018e-04f, -2.635014452e-04f, +3.808394755e-04f, -1.675785505e-05f, -1.653545488e-04f, +6.648190592e-05f, +3.454906199e-05f, -2.969548071e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.390515291e-04f, -5.100090562e-04f, -2.051775499e-03f, +4.707669326e-03f, +8.371677150e-05f, -1.009332438e-02f, +9.334602745e-03f, +9.165302142e-03f, -2.309034838e-02f, +5.727884933e-03f, +2.808629239e-02f, -3.024733587e-02f, -1.210454794e-02f, +4.595397510e-02f, -2.037049782e-02f, -3.586097315e-02f, +4.716222082e-02f, +3.211553737e-03f, -4.774735505e-02f, +2.897207681e-02f, +2.319470039e-02f, -3.918502537e-02f, +5.764306499e-03f, +2.636977554e-02f, -1.966346134e-02f, -6.745919952e-03f, +1.625718086e-02f, -4.587332077e-03f, -6.565072757e-03f, +5.402246671e-03f, +4.644933266e-04f, -2.185516049e-03f, +6.217164291e-04f, +2.816024168e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.386565486e-05f, +8.474504102e-05f, -9.973236345e-05f, -1.806570197e-04f, +4.495842258e-04f, -9.695012096e-05f, -7.566088004e-04f, +8.902118581e-04f, +4.046303101e-04f, -1.700162350e-03f, +8.823350607e-04f, +1.547835191e-03f, -2.379370406e-03f, +4.064419775e-06f, +2.749387231e-03f, -2.078745462e-03f, -1.371013874e-03f, +3.089472453e-03f, -8.546060723e-04f, -2.266196171e-03f, +2.283756763e-03f, +4.052542535e-04f, -2.095453481e-03f, +1.006024907e-03f, +9.009535962e-04f, -1.222428889e-03f, +1.278665634e-04f, +6.579306774e-04f, -4.238942074e-04f, -1.100356434e-04f, +2.417284259e-04f, -7.026830925e-05f, -3.454906199e-05f, +2.969548071e-05f, +0.000000000e+00f, /* 10, 8 (36) */ +0.000000000e+00f, -7.251858742e-04f, +4.252640152e-04f, +1.998996172e-03f, -2.775059206e-03f, -2.544144944e-03f, +7.841985467e-03f, -5.941061375e-04f, -1.445063700e-02f, +1.114621525e-02f, +1.796816944e-02f, -3.182987850e-02f, -9.503343145e-03f, +6.354982285e-02f, -2.831805799e-02f, -1.126465443e-01f, +1.885699227e-01f, +5.631676181e-01f, +4.142597481e-01f, -1.194534887e-02f, -1.023421218e-01f, +4.185001294e-02f, +3.580924498e-02f, -3.686581736e-02f, -5.804016097e-03f, +2.339870935e-02f, -5.839439625e-03f, -1.077550011e-02f, +7.216799824e-03f, +2.888158088e-03f, -4.524009106e-03f, +2.458116791e-04f, +1.736132130e-03f, -5.871673671e-04f, -3.112978975e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.610437038e-05f, -8.327622540e-05f, +3.908930945e-05f, +1.831139756e-04f, -2.474246117e-04f, -1.915054324e-04f, +6.391917579e-04f, -1.100874403e-04f, -1.084708017e-03f, +9.583003777e-04f, +1.235299800e-03f, -2.525402363e-03f, -5.025812648e-04f, +5.151826305e-03f, -2.356104585e-03f, -1.429221976e-02f, -5.382172507e-03f, +1.257385239e-02f, +1.009977991e-02f, -3.202430684e-03f, -3.218589221e-03f, +2.663687558e-03f, +7.674926758e-04f, -1.800543053e-03f, +2.689501487e-04f, +9.174180851e-04f, -5.133108049e-04f, -2.939134475e-04f, +3.794666750e-04f, -1.225533759e-06f, -1.709866648e-04f, +6.227936507e-05f, +3.829275975e-05f, -2.998405133e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.251858742e-04f, -4.252640152e-04f, -2.151507862e-03f, +4.527012306e-03f, +5.333009973e-04f, -1.019027450e-02f, +8.577993945e-03f, +1.005551400e-02f, -2.268571807e-02f, +4.027722584e-03f, +2.896862746e-02f, -2.869950068e-02f, -1.448391835e-02f, +4.595803951e-02f, -1.762111059e-02f, -3.793971861e-02f, +4.579120694e-02f, +6.301026190e-03f, -4.860196112e-02f, +2.670588063e-02f, +2.547845715e-02f, -3.877977112e-02f, +3.668853018e-03f, +2.737580044e-02f, -1.876250774e-02f, -7.968348841e-03f, +1.638504743e-02f, -3.929401400e-03f, -6.988966964e-03f, +5.292211027e-03f, +7.062217525e-04f, -2.255784358e-03f, +5.871673671e-04f, +3.112978975e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.610437038e-05f, +8.327622540e-05f, -8.791448778e-05f, -1.930869736e-04f, +4.371052354e-04f, -5.693006235e-05f, -7.753791751e-04f, +8.397926405e-04f, +4.829366141e-04f, -1.696320876e-03f, +7.680086419e-04f, +1.641150580e-03f, -2.311960884e-03f, -1.640358600e-04f, +2.805179267e-03f, -1.936350697e-03f, -1.538119278e-03f, +3.069618857e-03f, -6.785074790e-04f, -2.373017956e-03f, +2.202263322e-03f, +5.509390681e-04f, -2.126757767e-03f, +9.148141966e-04f, +9.815833829e-04f, -1.209810209e-03f, +6.831492326e-05f, +6.852870172e-04f, -4.064113792e-04f, -1.335372086e-04f, +2.463803425e-04f, -6.346405180e-05f, -3.829275975e-05f, +2.998405133e-05f, +0.000000000e+00f, /* 10, 9 (36) */ +0.000000000e+00f, -7.090815039e-04f, +3.419877898e-04f, +2.038085481e-03f, -2.591945231e-03f, -2.791569555e-03f, +7.650480035e-03f, +4.508562038e-05f, -1.456072444e-02f, +1.006150723e-02f, +1.892646982e-02f, -3.059457870e-02f, -1.202874551e-02f, +6.304724158e-02f, -2.316623169e-02f, -1.150026489e-01f, +1.742777030e-01f, +5.577854456e-01f, +4.268336005e-01f, -1.845568962e-03f, -1.055445525e-01f, +3.863142371e-02f, +3.847293254e-02f, -3.609832469e-02f, -7.604559150e-03f, +2.366765949e-02f, -4.922021540e-03f, -1.128881091e-02f, +6.922886377e-03f, +3.267624763e-03f, -4.525234640e-03f, +7.482501437e-05f, +1.798411495e-03f, -5.488746074e-04f, -3.412819488e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.818101394e-05f, -8.153790302e-05f, +3.070248344e-05f, +1.872859978e-04f, -2.320624969e-04f, -2.133625434e-04f, +6.263987663e-04f, -5.918354445e-05f, -1.099119168e-03f, +8.786624560e-04f, +1.315769538e-03f, -2.440538845e-03f, -7.016476946e-04f, +5.112461682e-03f, -1.908457696e-03f, -1.415936827e-02f, -5.978342056e-03f, +1.223898450e-02f, +1.050018743e-02f, -2.929927596e-03f, -3.417409112e-03f, +2.583949443e-03f, +9.031701321e-04f, -1.806257904e-03f, +1.933167852e-04f, +9.510687062e-04f, -4.845922862e-04f, -3.239260137e-04f, +3.767192590e-04f, +1.469679696e-05f, -1.761443340e-04f, +5.770133452e-05f, +4.202336772e-05f, -3.014205917e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.090815039e-04f, -3.419877898e-04f, -2.239422350e-03f, +4.333925333e-03f, +9.704062327e-04f, -1.024720456e-02f, +7.802614769e-03f, +1.089530664e-02f, -2.220278145e-02f, +2.331401707e-03f, +2.973663610e-02f, -2.705835010e-02f, -1.679587923e-02f, +4.579400365e-02f, -1.481593132e-02f, -3.987606931e-02f, +4.425308766e-02f, +9.370645047e-03f, -4.928046860e-02f, +2.433286268e-02f, +2.768072048e-02f, -3.822883205e-02f, +1.542095251e-03f, +2.829061464e-02f, -1.778092436e-02f, -9.178159050e-03f, +1.645336235e-02f, -3.244114383e-03f, -7.395378343e-03f, +5.158673819e-03f, +9.526020949e-04f, -2.319248410e-03f, +5.488746074e-04f, +3.412819488e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.818101394e-05f, +8.153790302e-05f, -7.610990162e-05f, -2.044167045e-04f, +4.232144021e-04f, -1.748191534e-05f, -7.908920603e-04f, +7.869610876e-04f, +5.584374170e-04f, -1.686197720e-03f, +6.518764250e-04f, +1.727669888e-03f, -2.236391213e-03f, -3.307598458e-04f, +2.850412561e-03f, -1.787037745e-03f, -1.699467671e-03f, +3.038369337e-03f, -4.994672567e-04f, -2.471430410e-03f, +2.112139179e-03f, +6.955573382e-04f, -2.150360292e-03f, +8.192458243e-04f, +1.059462904e-03f, -1.192416947e-03f, +7.543337918e-06f, +7.104975722e-04f, -3.869528322e-04f, -1.570945041e-04f, +2.501466451e-04f, -5.613379215e-05f, -4.202336772e-05f, +3.014205917e-05f, +0.000000000e+00f, /* 10,10 (36) */ +0.000000000e+00f, -6.909004899e-04f, +2.604498868e-04f, +2.068787965e-03f, -2.404659233e-03f, -3.023632052e-03f, +7.437117492e-03f, +6.714843867e-04f, -1.461990799e-02f, +8.962388064e-03f, +1.980513228e-02f, -2.927880916e-02f, -1.446928435e-02f, +6.234559389e-02f, -1.805377000e-02f, -1.169111066e-01f, +1.601183347e-01f, +5.518071035e-01f, +4.390725850e-01f, +8.654618468e-03f, -1.084744801e-01f, +3.521401460e-02f, +4.105688198e-02f, -3.519515455e-02f, -9.410817054e-03f, +2.386097628e-02f, -3.970952834e-03f, -1.177340320e-02f, +6.598960363e-03f, +3.644344022e-03f, -4.510537843e-03f, -1.013193196e-04f, +1.856112829e-03f, -5.068512397e-04f, -3.714240080e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.009259950e-05f, -7.954564686e-05f, +2.244930511e-05f, +1.906844073e-04f, -2.162462075e-04f, -2.340220430e-04f, +6.117192827e-04f, -9.018273929e-06f, -1.109579937e-03f, +7.974566525e-04f, +1.390492908e-03f, -2.349155062e-03f, -8.946116431e-04f, +5.057821535e-03f, -1.468292429e-03f, -1.400242824e-02f, -6.562383914e-03f, +1.188011425e-02f, +1.088746485e-02f, -2.640987822e-03f, -3.609283075e-03f, +2.494116903e-03f, +1.038217321e-03f, -1.805956677e-03f, +1.156917410e-04f, +9.820678624e-04f, -4.536439134e-04f, -3.534248684e-04f, +3.725768584e-04f, +3.096014414e-05f, -1.807952724e-04f, +5.275439348e-05f, +4.572454142e-05f, -3.016325832e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.909004899e-04f, -2.604498868e-04f, -2.315532252e-03f, +4.129508628e-03f, +1.393620635e-03f, -1.026468647e-02f, +7.011722709e-03f, +1.168226773e-02f, -2.164434404e-02f, +6.452039870e-04f, +3.038851252e-02f, -2.533068021e-02f, -1.903227045e-02f, +4.546324381e-02f, -1.196551876e-02f, -4.166310706e-02f, +4.255361999e-02f, +1.240901438e-02f, -4.977993586e-02f, +2.186143227e-02f, +2.979285965e-02f, -3.753327471e-02f, -6.082650413e-04f, +2.910986046e-02f, -1.672146145e-02f, -1.037057600e-02f, +1.646090569e-02f, -2.533616811e-03f, -7.782331176e-03f, +5.001579315e-03f, +1.202748740e-03f, -2.375382202e-03f, +5.068512397e-04f, +3.714240080e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.009259950e-05f, +7.954564686e-05f, -6.436867513e-05f, -2.146283198e-04f, +4.079985290e-04f, +2.125117424e-05f, -8.031423941e-04f, +7.319545879e-04f, +6.308811252e-04f, -1.669898998e-03f, +5.343925828e-04f, +1.807118973e-03f, -2.152994000e-03f, -4.954889467e-04f, +2.884950883e-03f, -1.631377929e-03f, -1.854456839e-03f, +2.995829819e-03f, -3.181505232e-04f, -2.561031746e-03f, +2.013679029e-03f, +8.385552114e-04f, -2.166107787e-03f, +7.196408316e-04f, +1.134261323e-03f, -1.170251128e-03f, -5.423041956e-05f, +7.334236496e-04f, -3.655552479e-04f, -1.806118080e-04f, +2.529860138e-04f, -4.829314578e-05f, -4.572454142e-05f, +3.016325832e-05f, +0.000000000e+00f, /* 10,11 (36) */ +0.000000000e+00f, -6.708078904e-04f, +1.809042399e-04f, +2.091237270e-03f, -2.213974826e-03f, -3.239878260e-03f, +7.203095449e-03f, +1.283203669e-03f, -1.462892626e-02f, +7.852808127e-03f, +2.060258893e-02f, -2.788831625e-02f, -1.681843941e-02f, +6.145098224e-02f, -1.299594847e-02f, -1.183793991e-01f, +1.461159065e-01f, +5.452447196e-01f, +4.509526992e-01f, +1.954208331e-02f, -1.111154679e-01f, +3.160473153e-02f, +4.355099889e-02f, -3.415693723e-02f, -1.121677373e-02f, +2.397666802e-02f, -2.988884971e-03f, -1.222704711e-02f, +6.245535495e-03f, +4.016920880e-03f, -4.479577698e-03f, -2.821145921e-04f, +1.908867223e-03f, -4.611266983e-04f, -4.015872663e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.183697139e-05f, -7.731559125e-05f, +1.435704857e-05f, +1.933162649e-04f, -2.000422418e-04f, -2.534366685e-04f, +5.952404552e-04f, +4.025059554e-05f, -1.116123821e-03f, +7.149813435e-04f, +1.459320026e-03f, -2.251661867e-03f, -1.080975745e-03f, +4.988394460e-03f, -1.036535260e-03f, -1.382198515e-02f, -7.133133367e-03f, +1.149785587e-02f, +1.126056544e-02f, -2.336032000e-03f, -3.793465839e-03f, +2.394297346e-03f, +1.172173047e-03f, -1.799537034e-03f, +3.630568119e-05f, +1.010260740e-03f, -4.205314624e-04f, -3.822953020e-04f, +3.670237433e-04f, +4.751309867e-05f, -1.849083097e-04f, +4.744679547e-05f, +4.937953208e-05f, -3.004183543e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.708078904e-04f, -1.809042399e-04f, -2.379900927e-03f, +3.914880308e-03f, +1.801619164e-03f, -1.024343530e-02f, +6.208580315e-03f, +1.241422232e-02f, -2.101346291e-02f, -1.024695011e-03f, +3.092290510e-02f, -2.352356124e-02f, -2.118526445e-02f, +4.496775486e-02f, -9.080567878e-03f, -4.329448498e-02f, +4.069916315e-02f, +1.540484420e-02f, -5.009808638e-02f, +1.930040052e-02f, +3.180653868e-02f, -3.669471950e-02f, -2.774372828e-03f, +2.982950130e-02f, -1.558720013e-02f, -1.154082712e-02f, +1.640667527e-02f, -1.800193161e-03f, -8.147886423e-03f, +4.820967507e-03f, +1.455734754e-03f, -2.423675348e-03f, +4.611266983e-04f, +4.015872663e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.183697139e-05f, +7.731559125e-05f, -5.273917113e-05f, -2.237090575e-04f, +3.915479326e-04f, +5.913161749e-05f, -8.121380210e-04f, +6.750155765e-04f, +7.000310732e-04f, -1.647553387e-03f, +4.160123580e-04f, +1.879252654e-03f, -2.062129603e-03f, -6.576149381e-04f, +2.908698956e-03f, -1.469965605e-03f, -2.002508902e-03f, +2.942149141e-03f, -1.352325835e-04f, -2.641452209e-03f, +1.907210877e-03f, +9.793813793e-04f, -2.173875921e-03f, +6.163389903e-04f, +1.205655978e-03f, -1.143333523e-03f, -1.167812386e-04f, +7.539332808e-04f, -3.422640026e-04f, -2.039913259e-04f, +2.548600675e-04f, -3.996058038e-05f, -4.937953208e-05f, +3.004183543e-05f, +0.000000000e+00f, /* 10,12 (36) */ +0.000000000e+00f, -6.489709190e-04f, +1.035886486e-04f, +2.105594318e-03f, -2.020658561e-03f, -3.439920502e-03f, +6.949658780e-03f, +1.878444125e-03f, -1.458867566e-02f, +6.736684306e-03f, +2.131757027e-02f, -2.642899623e-02f, -1.907010128e-02f, +6.037000650e-02f, -8.007554010e-03f, -1.194159343e-01f, +1.322939213e-01f, +5.381115862e-01f, +4.624505551e-01f, +3.080264876e-02f, -1.134514999e-01f, +2.781126569e-02f, +4.594529623e-02f, -3.298476419e-02f, -1.301631076e-02f, +2.401297370e-02f, -1.978624231e-03f, -1.264757858e-02f, +5.863240193e-03f, +4.383944623e-03f, -4.432064600e-03f, -4.670229017e-04f, +1.956314018e-03f, -4.117471662e-04f, -4.316291017e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.341278869e-05f, -7.486434995e-05f, +6.451635999e-06f, +1.951912976e-04f, -1.835170266e-04f, -2.715645258e-04f, +5.770540469e-04f, +8.847119811e-05f, -1.118797047e-03f, +6.315341909e-04f, +1.522122917e-03f, -2.148482886e-03f, -1.260271810e-03f, +4.904701955e-03f, -6.140793350e-04f, -1.361867544e-02f, -7.689458480e-03f, +1.109288022e-02f, +1.161846675e-02f, -2.015529344e-03f, -3.969221342e-03f, +2.284632042e-03f, +1.304571912e-03f, -1.786915553e-03f, -4.460076216e-05f, +1.035499530e-03f, -3.853295463e-04f, -4.104225760e-04f, +3.600489775e-04f, +6.430197459e-05f, -1.884535380e-04f, +4.178848004e-05f, +5.297124727e-05f, -2.977245098e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.489709190e-04f, -1.035886486e-04f, -2.432640098e-03f, +3.691171251e-03f, +2.193167096e-03f, -1.018430368e-02f, +5.396442294e-03f, +1.308923789e-02f, -2.031343184e-02f, -2.672248398e-03f, +3.133891746e-02f, -2.164430858e-02f, -2.324739405e-02f, +4.431013992e-02f, -6.171868922e-03f, -4.476445059e-02f, +3.869665425e-02f, +1.834699334e-02f, -5.023331897e-02f, +1.665894831e-02f, +3.371374956e-02f, -3.571533812e-02f, -4.948248749e-03f, +3.044584029e-02f, -1.438154415e-02f, -1.268416065e-02f, +1.628989403e-02f, -1.046259880e-03f, -8.490150426e-03f, +4.616976181e-03f, +1.710594821e-03f, -2.463635928e-03f, +4.117471662e-04f, +4.316291017e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.341278869e-05f, +7.486434995e-05f, -4.126787494e-05f, -2.316512189e-04f, +3.739559945e-04f, +9.602783878e-05f, -8.178994521e-04f, +6.163905061e-04f, +7.656662674e-04f, -1.619311390e-03f, +2.971902916e-04f, +1.943855444e-03f, -1.964184579e-03f, -8.165422488e-04f, +2.921602689e-03f, -1.303415851e-03f, -2.143072522e-03f, +2.877518520e-03f, +4.860364050e-05f, -2.712355611e-03f, +1.793094934e-03f, +1.117489228e-03f, -2.173570016e-03f, +5.096976529e-04f, +1.273333749e-03f, -1.111703812e-03f, -1.798774665e-04f, +7.719018766e-04f, -3.171331497e-04f, -2.271335633e-04f, +2.557336104e-04f, -3.115741146e-05f, -5.297124727e-05f, +2.977245098e-05f, +0.000000000e+00f, /* 10,13 (36) */ +0.000000000e+00f, -6.255581303e-04f, +2.872429870e-05f, +2.112045954e-03f, -1.825467263e-03f, -3.623437528e-03f, +6.678094254e-03f, +2.455498171e-03f, -1.450020447e-02f, +5.617887259e-03f, +2.194910446e-02f, -2.490687331e-02f, -2.121858417e-02f, +5.910973469e-02f, -3.102852055e-03f, -1.200300136e-01f, +1.186752459e-01f, +5.304221278e-01f, +4.735434353e-01f, +4.242111551e-02f, -1.154670293e-01f, +2.384204435e-02f, +4.822992828e-02f, -3.168019227e-02f, -1.480322632e-02f, +2.396837294e-02f, -9.431247010e-04f, -1.303290812e-02f, +5.452817617e-03f, +4.743993601e-03f, -4.367762625e-03f, -6.554764398e-04f, +1.998102498e-03f, -3.587759189e-04f, -4.614015527e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.481950651e-05f, -7.220893438e-05f, -1.242428974e-06f, +1.963218005e-04f, -1.667366759e-04f, -2.883691325e-04f, +5.572560277e-04f, +1.354979999e-04f, -1.117658196e-03f, +5.474111549e-04f, +1.578795588e-03f, -2.040052961e-03f, -1.432061784e-03f, +4.807296497e-03f, -2.017824537e-04f, -1.339318463e-02f, -8.230262858e-03f, +1.066591335e-02f, +1.196017336e-02f, -1.679996932e-03f, -4.135825015e-03f, +2.165296231e-03f, +1.434945780e-03f, -1.768028315e-03f, -1.267776495e-04f, +1.057644062e-03f, -3.481215116e-04f, -4.376923352e-04f, +3.516465582e-04f, +8.127096016e-05f, -1.914024599e-04f, +3.579107793e-05f, +5.648231466e-05f, -2.935027957e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.255581303e-04f, -2.872429870e-05f, -2.473907973e-03f, +3.459520032e-03f, +2.567123091e-03f, -1.008827584e-02f, +4.578542842e-03f, +1.370562840e-02f, -1.954776557e-02f, -4.291559788e-03f, +3.163610775e-02f, -1.970045314e-02f, -2.521157863e-02f, +4.349359768e-02f, -3.250266233e-03f, -4.606786644e-02f, +3.655358173e-02f, +2.122451186e-02f, -5.018471533e-02f, +1.394659270e-02f, +3.550684449e-02f, -3.459784889e-02f, -7.121818765e-03f, +3.095553794e-02f, -1.310821040e-02f, -1.379586446e-02f, +1.611001656e-02f, -2.743580035e-04f, -8.807283576e-03f, +4.389842617e-03f, +1.966328432e-03f, -2.494793340e-03f, +3.587759189e-04f, +4.614015527e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.481950651e-05f, +7.220893438e-05f, -2.999923690e-05f, -2.384520814e-04f, +3.553187094e-04f, +1.318146992e-04f, -8.204595783e-04f, +5.563288172e-04f, +8.275820591e-04f, -1.585344515e-03f, +1.783784702e-04f, +2.000742161e-03f, -1.859570048e-03f, -9.716901891e-04f, +2.923649260e-03f, -1.132362069e-03f, -2.275625000e-03f, +2.802170855e-03f, +2.326702145e-04f, -2.773440751e-03f, +1.671722392e-03f, +1.252338987e-03f, -2.165125655e-03f, +4.000905217e-04f, +1.336992400e-03f, -1.075420669e-03f, -2.432817430e-04f, +7.872128629e-04f, -2.902253637e-04f, -2.499377138e-04f, +2.555748688e-04f, -2.190778440e-05f, -5.648231466e-05f, +2.935027957e-05f, +0.000000000e+00f, /* 10,14 (36) */ +0.000000000e+00f, -6.007386238e-04f, -4.348463569e-05f, +2.110803525e-03f, -1.629145463e-03f, -3.790174204e-03f, +6.389725122e-03f, +3.012754199e-03f, -1.436470647e-02f, +4.500229063e-03f, +2.249651562e-02f, -2.332807772e-02f, -2.325863713e-02f, +5.767767291e-02f, +1.704444442e-03f, -1.202317961e-01f, +1.052820612e-01f, +5.221918649e-01f, +4.842093487e-01f, +5.438128888e-02f, -1.171470262e-01f, +1.970621933e-02f, +5.039522451e-02f, -3.024524649e-02f, -1.657125463e-02f, +2.384159529e-02f, +1.145193607e-04f, -1.338102963e-02f, +5.015125282e-03f, +5.095640159e-03f, -4.286491665e-03f, -8.468788996e-04f, +2.033893576e-03f, -3.022936042e-04f, -4.907518323e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.605735419e-05f, -6.936667235e-05f, -8.702120614e-06f, +1.967225296e-04f, -1.497667557e-04f, -3.038194408e-04f, +5.359461581e-04f, +1.811921923e-04f, -1.112777800e-03f, +4.629055282e-04f, +1.629254024e-03f, -1.926816583e-03f, -1.595938597e-03f, +4.696759554e-03f, +1.995348309e-04f, -1.314624525e-02f, -8.754488303e-03f, +1.021773478e-02f, +1.228471971e-02f, -1.329998851e-03f, -4.292566062e-03f, +2.036499118e-03f, +1.562825257e-03f, -1.742831430e-03f, -2.099664357e-04f, +1.076562426e-03f, -3.089993010e-04f, -4.639910278e-04f, +3.418155397e-04f, +9.836228015e-05f, -1.937281326e-04f, +2.946790943e-05f, +5.989514869e-05f, -2.877104896e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.007386238e-04f, +4.348463569e-05f, -2.503907210e-03f, +3.221067951e-03f, +2.922441800e-03f, -9.956461145e-03f, +3.758083264e-03f, +1.426195722e-02f, -1.872018351e-02f, -5.876904303e-03f, +3.181448622e-02f, -1.769971098e-02f, -2.707114868e-02f, +4.252190749e-02f, -3.266169733e-04f, -4.720022851e-02f, +3.427795673e-02f, +2.402668272e-02f, -4.995204511e-02f, +1.117315195e-02f, +3.717856689e-02f, -3.334550991e-02f, -9.286944420e-03f, +3.135562846e-02f, -1.177121800e-02f, -1.487128513e-02f, +1.586673482e-02f, +5.128548594e-04f, -9.097508940e-03f, +4.139904904e-03f, +2.221903300e-03f, -2.516701124e-03f, +3.022936042e-04f, +4.907518323e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.605735419e-05f, +6.936667235e-05f, -1.897552822e-05f, -2.441137911e-04f, +3.357342316e-04f, +1.663738859e-04f, -8.198633372e-04f, +4.950819092e-04f, +8.855907438e-04f, -1.545844387e-03f, +6.002479865e-05f, +2.049758416e-03f, -1.748719956e-03f, -1.122495110e-03f, +2.914867028e-03f, -9.574535272e-04f, -2.399674268e-03f, +2.716379876e-03f, +4.162768226e-04f, -2.824442691e-03f, +1.543514070e-03f, +1.383399859e-03f, -2.148509167e-03f, +2.879063420e-04f, +1.396341886e-03f, -1.034561779e-03f, -3.067518688e-04f, +7.997582934e-04f, -2.616118483e-04f, -2.723020604e-04f, +2.543557191e-04f, -1.223864264e-05f, -5.989514869e-05f, +2.877104896e-05f, +0.000000000e+00f, /* 10,15 (36) */ +0.000000000e+00f, -5.746812696e-04f, -1.128513080e-04f, +2.102101405e-03f, -1.432422933e-03f, -3.939940960e-03f, +6.085905681e-03f, +3.548700357e-03f, -1.418351427e-02f, +3.387451263e-03f, +2.295942115e-02f, -2.169882370e-02f, -2.518545371e-02f, +5.608173431e-02f, +6.401203997e-03f, -1.200322613e-01f, +9.213581598e-02f, +5.134373766e-01f, +4.944270835e-01f, +6.666600858e-02f, -1.184770251e-01f, +1.541365327e-02f, +5.243172362e-02f, -2.868242124e-02f, -1.831408606e-02f, +2.363162885e-02f, +1.191081787e-03f, -1.369002894e-02f, +4.551134254e-03f, +5.437455699e-03f, -4.188129385e-03f, -1.040607032e-03f, +2.063361486e-03f, -2.423984556e-04f, -5.195228812e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.712731076e-05f, -6.635512750e-05f, -1.590594318e-05f, +1.964105891e-04f, -1.326720558e-04f, -3.178898405e-04f, +5.132275677e-04f, +2.254220541e-04f, -1.104237902e-03f, +3.783069945e-04f, +1.673436117e-03f, -1.809226314e-03f, -1.751526913e-03f, +4.573699545e-03f, +5.890909962e-04f, -1.287863464e-02f, -9.261117360e-03f, +9.749175768e-03f, +1.259117275e-02f, -9.661452078e-04f, -4.438749728e-03f, +1.898483772e-03f, +1.687741212e-03f, -1.711301519e-03f, -2.939007135e-04f, +1.092131575e-03f, -2.680632841e-04f, -4.892063288e-04f, +3.305601419e-04f, +1.155163692e-04f, -1.954053116e-04f, +2.283397571e-05f, +6.319202002e-05f, -2.803107764e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.746812696e-04f, +1.128513080e-04f, -2.522882738e-03f, +2.976954160e-03f, +3.258176032e-03f, -9.790087259e-03f, +2.938219927e-03f, +1.475703912e-02f, -1.783459277e-02f, -7.422748691e-03f, +3.187451102e-02f, -1.564995256e-02f, -2.881986863e-02f, +4.139941238e-02f, +2.588250055e-03f, -4.815768204e-02f, +3.187828246e-02f, +2.674306260e-02f, -4.953576829e-02f, +8.348709260e-03f, +3.872208096e-02f, -3.196211005e-02f, -1.143545359e-02f, +3.164353480e-02f, -1.037487612e-02f, -1.590584691e-02f, +1.555998295e-02f, +1.312613153e-03f, -9.359120788e-03f, +3.867602843e-03f, +2.476259020e-03f, -2.528939767e-03f, +2.423984556e-04f, +5.195228812e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.712731076e-05f, +6.635512750e-05f, -8.236710362e-06f, -2.486432361e-04f, +3.153024208e-04f, +1.995942661e-04f, -8.161673367e-04f, +4.329021186e-04f, +9.395220870e-04f, -1.501021790e-03f, -5.742869633e-05f, +2.090780974e-03f, -1.632089278e-03f, -1.268412490e-03f, +2.895325297e-03f, -7.793528412e-04f, -2.514760751e-03f, +2.620459116e-03f, +5.987334116e-04f, -2.865133908e-03f, +1.408918930e-03f, +1.510152137e-03f, -2.123718000e-03f, +1.735475238e-04f, +1.451105637e-03f, -9.892237732e-04f, -3.700417080e-04f, +8.094394370e-04f, -2.313722053e-04f, -2.941243906e-04f, +2.520519038e-04f, -2.179681792e-06f, -6.319202002e-05f, +2.803107764e-05f, +0.000000000e+00f, /* 10,16 (36) */ +0.000000000e+00f, -5.475539589e-04f, -1.792064355e-04f, +2.086195461e-03f, -1.236012344e-03f, -4.072613016e-03f, +5.768015841e-03f, +4.061927925e-03f, -1.395809222e-02f, +2.283213361e-03f, +2.333772814e-02f, -2.002538758e-02f, -2.699468003e-02f, +5.433020740e-02f, +1.097490354e-02f, -1.194431703e-01f, +7.925718134e-02f, +5.041762592e-01f, +5.041762592e-01f, +7.925718134e-02f, -1.194431703e-01f, +1.097490354e-02f, +5.433020740e-02f, -2.699468003e-02f, -2.002538758e-02f, +2.333772814e-02f, +2.283213361e-03f, -1.395809222e-02f, +4.061927925e-03f, +5.768015841e-03f, -4.072613016e-03f, -1.236012344e-03f, +2.086195461e-03f, -1.792064355e-04f, -5.475539589e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.803107764e-05f, -6.319202002e-05f, -2.283397571e-05f, +1.954053116e-04f, -1.155163692e-04f, -3.305601419e-04f, +4.892063288e-04f, +2.680632841e-04f, -1.092131575e-03f, +2.939007135e-04f, +1.711301519e-03f, -1.687741212e-03f, -1.898483772e-03f, +4.438749728e-03f, +9.661452078e-04f, -1.259117275e-02f, -9.749175768e-03f, +9.261117360e-03f, +1.287863464e-02f, -5.890909962e-04f, -4.573699545e-03f, +1.751526913e-03f, +1.809226314e-03f, -1.673436117e-03f, -3.783069945e-04f, +1.104237902e-03f, -2.254220541e-04f, -5.132275677e-04f, +3.178898405e-04f, +1.326720558e-04f, -1.964105891e-04f, +1.590594318e-05f, +6.635512750e-05f, -2.712731076e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.475539589e-04f, +1.792064355e-04f, -2.531119449e-03f, +2.728310923e-03f, +3.573478453e-03f, -9.590492993e-03f, +2.122052590e-03f, +1.518994124e-02f, -1.689507068e-02f, -8.923770481e-03f, +3.181708233e-02f, -1.355917159e-02f, -3.045195791e-02f, +4.013099989e-02f, +5.483575352e-03f, -4.893703488e-02f, +2.936352171e-02f, +2.936352171e-02f, -4.893703488e-02f, +5.483575352e-03f, +4.013099989e-02f, -3.045195791e-02f, -1.355917159e-02f, +3.181708233e-02f, -8.923770481e-03f, -1.689507068e-02f, +1.518994124e-02f, +2.122052590e-03f, -9.590492993e-03f, +3.573478453e-03f, +2.728310923e-03f, -2.531119449e-03f, +1.792064355e-04f, +5.475539589e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.803107764e-05f, +6.319202002e-05f, +2.179681792e-06f, -2.520519038e-04f, +2.941243906e-04f, +2.313722053e-04f, -8.094394370e-04f, +3.700417080e-04f, +9.892237732e-04f, -1.451105637e-03f, -1.735475238e-04f, +2.123718000e-03f, -1.510152137e-03f, -1.408918930e-03f, +2.865133908e-03f, -5.987334116e-04f, -2.620459116e-03f, +2.514760751e-03f, +7.793528412e-04f, -2.895325297e-03f, +1.268412490e-03f, +1.632089278e-03f, -2.090780974e-03f, +5.742869633e-05f, +1.501021790e-03f, -9.395220870e-04f, -4.329021186e-04f, +8.161673367e-04f, -1.995942661e-04f, -3.153024208e-04f, +2.486432361e-04f, +8.236710362e-06f, -6.635512750e-05f, +2.712731076e-05f, +0.000000000e+00f, /* 10,17 (36) */ +0.000000000e+00f, -5.195228812e-04f, -2.423984556e-04f, +2.063361486e-03f, -1.040607032e-03f, -4.188129385e-03f, +5.437455699e-03f, +4.551134254e-03f, -1.369002894e-02f, +1.191081787e-03f, +2.363162885e-02f, -1.831408606e-02f, -2.868242124e-02f, +5.243172362e-02f, +1.541365327e-02f, -1.184770251e-01f, +6.666600858e-02f, +4.944270835e-01f, +5.134373766e-01f, +9.213581598e-02f, -1.200322613e-01f, +6.401203997e-03f, +5.608173431e-02f, -2.518545371e-02f, -2.169882370e-02f, +2.295942115e-02f, +3.387451263e-03f, -1.418351427e-02f, +3.548700357e-03f, +6.085905681e-03f, -3.939940960e-03f, -1.432422933e-03f, +2.102101405e-03f, -1.128513080e-04f, -5.746812696e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.877104896e-05f, -5.989514869e-05f, -2.946790943e-05f, +1.937281326e-04f, -9.836228015e-05f, -3.418155397e-04f, +4.639910278e-04f, +3.089993010e-04f, -1.076562426e-03f, +2.099664357e-04f, +1.742831430e-03f, -1.562825257e-03f, -2.036499118e-03f, +4.292566062e-03f, +1.329998851e-03f, -1.228471971e-02f, -1.021773478e-02f, +8.754488303e-03f, +1.314624525e-02f, -1.995348309e-04f, -4.696759554e-03f, +1.595938597e-03f, +1.926816583e-03f, -1.629254024e-03f, -4.629055282e-04f, +1.112777800e-03f, -1.811921923e-04f, -5.359461581e-04f, +3.038194408e-04f, +1.497667557e-04f, -1.967225296e-04f, +8.702120614e-06f, +6.936667235e-05f, -2.605735419e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.195228812e-04f, +2.423984556e-04f, -2.528939767e-03f, +2.476259020e-03f, +3.867602843e-03f, -9.359120788e-03f, +1.312613153e-03f, +1.555998295e-02f, -1.590584691e-02f, -1.037487612e-02f, +3.164353480e-02f, -1.143545359e-02f, -3.196211005e-02f, +3.872208096e-02f, +8.348709260e-03f, -4.953576829e-02f, +2.674306260e-02f, +3.187828246e-02f, -4.815768204e-02f, +2.588250055e-03f, +4.139941238e-02f, -2.881986863e-02f, -1.564995256e-02f, +3.187451102e-02f, -7.422748691e-03f, -1.783459277e-02f, +1.475703912e-02f, +2.938219927e-03f, -9.790087259e-03f, +3.258176032e-03f, +2.976954160e-03f, -2.522882738e-03f, +1.128513080e-04f, +5.746812696e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.877104896e-05f, +5.989514869e-05f, +1.223864264e-05f, -2.543557191e-04f, +2.723020604e-04f, +2.616118483e-04f, -7.997582934e-04f, +3.067518688e-04f, +1.034561779e-03f, -1.396341886e-03f, -2.879063420e-04f, +2.148509167e-03f, -1.383399859e-03f, -1.543514070e-03f, +2.824442691e-03f, -4.162768226e-04f, -2.716379876e-03f, +2.399674268e-03f, +9.574535272e-04f, -2.914867028e-03f, +1.122495110e-03f, +1.748719956e-03f, -2.049758416e-03f, -6.002479865e-05f, +1.545844387e-03f, -8.855907438e-04f, -4.950819092e-04f, +8.198633372e-04f, -1.663738859e-04f, -3.357342316e-04f, +2.441137911e-04f, +1.897552822e-05f, -6.936667235e-05f, +2.605735419e-05f, +0.000000000e+00f, /* 10,18 (36) */ +0.000000000e+00f, -4.907518323e-04f, -3.022936042e-04f, +2.033893576e-03f, -8.468788996e-04f, -4.286491665e-03f, +5.095640159e-03f, +5.015125282e-03f, -1.338102963e-02f, +1.145193607e-04f, +2.384159529e-02f, -1.657125463e-02f, -3.024524649e-02f, +5.039522451e-02f, +1.970621933e-02f, -1.171470262e-01f, +5.438128888e-02f, +4.842093487e-01f, +5.221918649e-01f, +1.052820612e-01f, -1.202317961e-01f, +1.704444442e-03f, +5.767767291e-02f, -2.325863713e-02f, -2.332807772e-02f, +2.249651562e-02f, +4.500229063e-03f, -1.436470647e-02f, +3.012754199e-03f, +6.389725122e-03f, -3.790174204e-03f, -1.629145463e-03f, +2.110803525e-03f, -4.348463569e-05f, -6.007386238e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.935027957e-05f, -5.648231466e-05f, -3.579107793e-05f, +1.914024599e-04f, -8.127096016e-05f, -3.516465582e-04f, +4.376923352e-04f, +3.481215116e-04f, -1.057644062e-03f, +1.267776495e-04f, +1.768028315e-03f, -1.434945780e-03f, -2.165296231e-03f, +4.135825015e-03f, +1.679996932e-03f, -1.196017336e-02f, -1.066591335e-02f, +8.230262858e-03f, +1.339318463e-02f, +2.017824537e-04f, -4.807296497e-03f, +1.432061784e-03f, +2.040052961e-03f, -1.578795588e-03f, -5.474111549e-04f, +1.117658196e-03f, -1.354979999e-04f, -5.572560277e-04f, +2.883691325e-04f, +1.667366759e-04f, -1.963218005e-04f, +1.242428974e-06f, +7.220893438e-05f, -2.481950651e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.907518323e-04f, +3.022936042e-04f, -2.516701124e-03f, +2.221903300e-03f, +4.139904904e-03f, -9.097508940e-03f, +5.128548594e-04f, +1.586673482e-02f, -1.487128513e-02f, -1.177121800e-02f, +3.135562846e-02f, -9.286944420e-03f, -3.334550991e-02f, +3.717856689e-02f, +1.117315195e-02f, -4.995204511e-02f, +2.402668272e-02f, +3.427795673e-02f, -4.720022851e-02f, -3.266169733e-04f, +4.252190749e-02f, -2.707114868e-02f, -1.769971098e-02f, +3.181448622e-02f, -5.876904303e-03f, -1.872018351e-02f, +1.426195722e-02f, +3.758083264e-03f, -9.956461145e-03f, +2.922441800e-03f, +3.221067951e-03f, -2.503907210e-03f, +4.348463569e-05f, +6.007386238e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.935027957e-05f, +5.648231466e-05f, +2.190778440e-05f, -2.555748688e-04f, +2.499377138e-04f, +2.902253637e-04f, -7.872128629e-04f, +2.432817430e-04f, +1.075420669e-03f, -1.336992400e-03f, -4.000905217e-04f, +2.165125655e-03f, -1.252338987e-03f, -1.671722392e-03f, +2.773440751e-03f, -2.326702145e-04f, -2.802170855e-03f, +2.275625000e-03f, +1.132362069e-03f, -2.923649260e-03f, +9.716901891e-04f, +1.859570048e-03f, -2.000742161e-03f, -1.783784702e-04f, +1.585344515e-03f, -8.275820591e-04f, -5.563288172e-04f, +8.204595783e-04f, -1.318146992e-04f, -3.553187094e-04f, +2.384520814e-04f, +2.999923690e-05f, -7.220893438e-05f, +2.481950651e-05f, +0.000000000e+00f, /* 10,19 (36) */ +0.000000000e+00f, -4.614015527e-04f, -3.587759189e-04f, +1.998102498e-03f, -6.554764398e-04f, -4.367762625e-03f, +4.743993601e-03f, +5.452817617e-03f, -1.303290812e-02f, -9.431247010e-04f, +2.396837294e-02f, -1.480322632e-02f, -3.168019227e-02f, +4.822992828e-02f, +2.384204435e-02f, -1.154670293e-01f, +4.242111551e-02f, +4.735434353e-01f, +5.304221278e-01f, +1.186752459e-01f, -1.200300136e-01f, -3.102852055e-03f, +5.910973469e-02f, -2.121858417e-02f, -2.490687331e-02f, +2.194910446e-02f, +5.617887259e-03f, -1.450020447e-02f, +2.455498171e-03f, +6.678094254e-03f, -3.623437528e-03f, -1.825467263e-03f, +2.112045954e-03f, +2.872429870e-05f, -6.255581303e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.977245098e-05f, -5.297124727e-05f, -4.178848004e-05f, +1.884535380e-04f, -6.430197459e-05f, -3.600489775e-04f, +4.104225760e-04f, +3.853295463e-04f, -1.035499530e-03f, +4.460076216e-05f, +1.786915553e-03f, -1.304571912e-03f, -2.284632042e-03f, +3.969221342e-03f, +2.015529344e-03f, -1.161846675e-02f, -1.109288022e-02f, +7.689458480e-03f, +1.361867544e-02f, +6.140793350e-04f, -4.904701955e-03f, +1.260271810e-03f, +2.148482886e-03f, -1.522122917e-03f, -6.315341909e-04f, +1.118797047e-03f, -8.847119811e-05f, -5.770540469e-04f, +2.715645258e-04f, +1.835170266e-04f, -1.951912976e-04f, -6.451635999e-06f, +7.486434995e-05f, -2.341278869e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.614015527e-04f, +3.587759189e-04f, -2.494793340e-03f, +1.966328432e-03f, +4.389842617e-03f, -8.807283576e-03f, -2.743580035e-04f, +1.611001656e-02f, -1.379586446e-02f, -1.310821040e-02f, +3.095553794e-02f, -7.121818765e-03f, -3.459784889e-02f, +3.550684449e-02f, +1.394659270e-02f, -5.018471533e-02f, +2.122451186e-02f, +3.655358173e-02f, -4.606786644e-02f, -3.250266233e-03f, +4.349359768e-02f, -2.521157863e-02f, -1.970045314e-02f, +3.163610775e-02f, -4.291559788e-03f, -1.954776557e-02f, +1.370562840e-02f, +4.578542842e-03f, -1.008827584e-02f, +2.567123091e-03f, +3.459520032e-03f, -2.473907973e-03f, -2.872429870e-05f, +6.255581303e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.977245098e-05f, +5.297124727e-05f, +3.115741146e-05f, -2.557336104e-04f, +2.271335633e-04f, +3.171331497e-04f, -7.719018766e-04f, +1.798774665e-04f, +1.111703812e-03f, -1.273333749e-03f, -5.096976529e-04f, +2.173570016e-03f, -1.117489228e-03f, -1.793094934e-03f, +2.712355611e-03f, -4.860364050e-05f, -2.877518520e-03f, +2.143072522e-03f, +1.303415851e-03f, -2.921602689e-03f, +8.165422488e-04f, +1.964184579e-03f, -1.943855444e-03f, -2.971902916e-04f, +1.619311390e-03f, -7.656662674e-04f, -6.163905061e-04f, +8.178994521e-04f, -9.602783878e-05f, -3.739559945e-04f, +2.316512189e-04f, +4.126787494e-05f, -7.486434995e-05f, +2.341278869e-05f, +0.000000000e+00f, /* 10,20 (36) */ +0.000000000e+00f, -4.316291017e-04f, -4.117471662e-04f, +1.956314018e-03f, -4.670229017e-04f, -4.432064600e-03f, +4.383944623e-03f, +5.863240193e-03f, -1.264757858e-02f, -1.978624231e-03f, +2.401297370e-02f, -1.301631076e-02f, -3.298476419e-02f, +4.594529623e-02f, +2.781126569e-02f, -1.134514999e-01f, +3.080264876e-02f, +4.624505551e-01f, +5.381115862e-01f, +1.322939213e-01f, -1.194159343e-01f, -8.007554010e-03f, +6.037000650e-02f, -1.907010128e-02f, -2.642899623e-02f, +2.131757027e-02f, +6.736684306e-03f, -1.458867566e-02f, +1.878444125e-03f, +6.949658780e-03f, -3.439920502e-03f, -2.020658561e-03f, +2.105594318e-03f, +1.035886486e-04f, -6.489709190e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.004183543e-05f, -4.937953208e-05f, -4.744679547e-05f, +1.849083097e-04f, -4.751309867e-05f, -3.670237433e-04f, +3.822953020e-04f, +4.205314624e-04f, -1.010260740e-03f, -3.630568119e-05f, +1.799537034e-03f, -1.172173047e-03f, -2.394297346e-03f, +3.793465839e-03f, +2.336032000e-03f, -1.126056544e-02f, -1.149785587e-02f, +7.133133367e-03f, +1.382198515e-02f, +1.036535260e-03f, -4.988394460e-03f, +1.080975745e-03f, +2.251661867e-03f, -1.459320026e-03f, -7.149813435e-04f, +1.116123821e-03f, -4.025059554e-05f, -5.952404552e-04f, +2.534366685e-04f, +2.000422418e-04f, -1.933162649e-04f, -1.435704857e-05f, +7.731559125e-05f, -2.183697139e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.316291017e-04f, +4.117471662e-04f, -2.463635928e-03f, +1.710594821e-03f, +4.616976181e-03f, -8.490150426e-03f, -1.046259880e-03f, +1.628989403e-02f, -1.268416065e-02f, -1.438154415e-02f, +3.044584029e-02f, -4.948248749e-03f, -3.571533812e-02f, +3.371374956e-02f, +1.665894831e-02f, -5.023331897e-02f, +1.834699334e-02f, +3.869665425e-02f, -4.476445059e-02f, -6.171868922e-03f, +4.431013992e-02f, -2.324739405e-02f, -2.164430858e-02f, +3.133891746e-02f, -2.672248398e-03f, -2.031343184e-02f, +1.308923789e-02f, +5.396442294e-03f, -1.018430368e-02f, +2.193167096e-03f, +3.691171251e-03f, -2.432640098e-03f, -1.035886486e-04f, +6.489709190e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.004183543e-05f, +4.937953208e-05f, +3.996058038e-05f, -2.548600675e-04f, +2.039913259e-04f, +3.422640026e-04f, -7.539332808e-04f, +1.167812386e-04f, +1.143333523e-03f, -1.205655978e-03f, -6.163389903e-04f, +2.173875921e-03f, -9.793813793e-04f, -1.907210877e-03f, +2.641452209e-03f, +1.352325835e-04f, -2.942149141e-03f, +2.002508902e-03f, +1.469965605e-03f, -2.908698956e-03f, +6.576149381e-04f, +2.062129603e-03f, -1.879252654e-03f, -4.160123580e-04f, +1.647553387e-03f, -7.000310732e-04f, -6.750155765e-04f, +8.121380210e-04f, -5.913161749e-05f, -3.915479326e-04f, +2.237090575e-04f, +5.273917113e-05f, -7.731559125e-05f, +2.183697139e-05f, +0.000000000e+00f, /* 10,21 (36) */ +0.000000000e+00f, -4.015872663e-04f, -4.611266983e-04f, +1.908867223e-03f, -2.821145921e-04f, -4.479577698e-03f, +4.016920880e-03f, +6.245535495e-03f, -1.222704711e-02f, -2.988884971e-03f, +2.397666802e-02f, -1.121677373e-02f, -3.415693723e-02f, +4.355099889e-02f, +3.160473153e-02f, -1.111154679e-01f, +1.954208331e-02f, +4.509526992e-01f, +5.452447196e-01f, +1.461159065e-01f, -1.183793991e-01f, -1.299594847e-02f, +6.145098224e-02f, -1.681843941e-02f, -2.788831625e-02f, +2.060258893e-02f, +7.852808127e-03f, -1.462892626e-02f, +1.283203669e-03f, +7.203095449e-03f, -3.239878260e-03f, -2.213974826e-03f, +2.091237270e-03f, +1.809042399e-04f, -6.708078904e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.016325832e-05f, -4.572454142e-05f, -5.275439348e-05f, +1.807952724e-04f, -3.096014414e-05f, -3.725768584e-04f, +3.534248684e-04f, +4.536439134e-04f, -9.820678624e-04f, -1.156917410e-04f, +1.805956677e-03f, -1.038217321e-03f, -2.494116903e-03f, +3.609283075e-03f, +2.640987822e-03f, -1.088746485e-02f, -1.188011425e-02f, +6.562383914e-03f, +1.400242824e-02f, +1.468292429e-03f, -5.057821535e-03f, +8.946116431e-04f, +2.349155062e-03f, -1.390492908e-03f, -7.974566525e-04f, +1.109579937e-03f, +9.018273929e-06f, -6.117192827e-04f, +2.340220430e-04f, +2.162462075e-04f, -1.906844073e-04f, -2.244930511e-05f, +7.954564686e-05f, -2.009259950e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.015872663e-04f, +4.611266983e-04f, -2.423675348e-03f, +1.455734754e-03f, +4.820967507e-03f, -8.147886423e-03f, -1.800193161e-03f, +1.640667527e-02f, -1.154082712e-02f, -1.558720013e-02f, +2.982950130e-02f, -2.774372828e-03f, -3.669471950e-02f, +3.180653868e-02f, +1.930040052e-02f, -5.009808638e-02f, +1.540484420e-02f, +4.069916315e-02f, -4.329448498e-02f, -9.080567878e-03f, +4.496775486e-02f, -2.118526445e-02f, -2.352356124e-02f, +3.092290510e-02f, -1.024695011e-03f, -2.101346291e-02f, +1.241422232e-02f, +6.208580315e-03f, -1.024343530e-02f, +1.801619164e-03f, +3.914880308e-03f, -2.379900927e-03f, -1.809042399e-04f, +6.708078904e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.016325832e-05f, +4.572454142e-05f, +4.829314578e-05f, -2.529860138e-04f, +1.806118080e-04f, +3.655552479e-04f, -7.334236496e-04f, +5.423041956e-05f, +1.170251128e-03f, -1.134261323e-03f, -7.196408316e-04f, +2.166107787e-03f, -8.385552114e-04f, -2.013679029e-03f, +2.561031746e-03f, +3.181505232e-04f, -2.995829819e-03f, +1.854456839e-03f, +1.631377929e-03f, -2.884950883e-03f, +4.954889467e-04f, +2.152994000e-03f, -1.807118973e-03f, -5.343925828e-04f, +1.669898998e-03f, -6.308811252e-04f, -7.319545879e-04f, +8.031423941e-04f, -2.125117424e-05f, -4.079985290e-04f, +2.146283198e-04f, +6.436867513e-05f, -7.954564686e-05f, +2.009259950e-05f, +0.000000000e+00f, /* 10,22 (36) */ +0.000000000e+00f, -3.714240080e-04f, -5.068512397e-04f, +1.856112829e-03f, -1.013193196e-04f, -4.510537843e-03f, +3.644344022e-03f, +6.598960363e-03f, -1.177340320e-02f, -3.970952834e-03f, +2.386097628e-02f, -9.410817054e-03f, -3.519515455e-02f, +4.105688198e-02f, +3.521401460e-02f, -1.084744801e-01f, +8.654618468e-03f, +4.390725850e-01f, +5.518071035e-01f, +1.601183347e-01f, -1.169111066e-01f, -1.805377000e-02f, +6.234559389e-02f, -1.446928435e-02f, -2.927880916e-02f, +1.980513228e-02f, +8.962388064e-03f, -1.461990799e-02f, +6.714843867e-04f, +7.437117492e-03f, -3.023632052e-03f, -2.404659233e-03f, +2.068787965e-03f, +2.604498868e-04f, -6.909004899e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.014205917e-05f, -4.202336772e-05f, -5.770133452e-05f, +1.761443340e-04f, -1.469679696e-05f, -3.767192590e-04f, +3.239260137e-04f, +4.845922862e-04f, -9.510687062e-04f, -1.933167852e-04f, +1.806257904e-03f, -9.031701321e-04f, -2.583949443e-03f, +3.417409112e-03f, +2.929927596e-03f, -1.050018743e-02f, -1.223898450e-02f, +5.978342056e-03f, +1.415936827e-02f, +1.908457696e-03f, -5.112461682e-03f, +7.016476946e-04f, +2.440538845e-03f, -1.315769538e-03f, -8.786624560e-04f, +1.099119168e-03f, +5.918354445e-05f, -6.263987663e-04f, +2.133625434e-04f, +2.320624969e-04f, -1.872859978e-04f, -3.070248344e-05f, +8.153790302e-05f, -1.818101394e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.714240080e-04f, +5.068512397e-04f, -2.375382202e-03f, +1.202748740e-03f, +5.001579315e-03f, -7.782331176e-03f, -2.533616811e-03f, +1.646090569e-02f, -1.037057600e-02f, -1.672146145e-02f, +2.910986046e-02f, -6.082650413e-04f, -3.753327471e-02f, +2.979285965e-02f, +2.186143227e-02f, -4.977993586e-02f, +1.240901438e-02f, +4.255361999e-02f, -4.166310706e-02f, -1.196551876e-02f, +4.546324381e-02f, -1.903227045e-02f, -2.533068021e-02f, +3.038851252e-02f, +6.452039870e-04f, -2.164434404e-02f, +1.168226773e-02f, +7.011722709e-03f, -1.026468647e-02f, +1.393620635e-03f, +4.129508628e-03f, -2.315532252e-03f, -2.604498868e-04f, +6.909004899e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.014205917e-05f, +4.202336772e-05f, +5.613379215e-05f, -2.501466451e-04f, +1.570945041e-04f, +3.869528322e-04f, -7.104975722e-04f, -7.543337918e-06f, +1.192416947e-03f, -1.059462904e-03f, -8.192458243e-04f, +2.150360292e-03f, -6.955573382e-04f, -2.112139179e-03f, +2.471430410e-03f, +4.994672567e-04f, -3.038369337e-03f, +1.699467671e-03f, +1.787037745e-03f, -2.850412561e-03f, +3.307598458e-04f, +2.236391213e-03f, -1.727669888e-03f, -6.518764250e-04f, +1.686197720e-03f, -5.584374170e-04f, -7.869610876e-04f, +7.908920603e-04f, +1.748191534e-05f, -4.232144021e-04f, +2.044167045e-04f, +7.610990162e-05f, -8.153790302e-05f, +1.818101394e-05f, +0.000000000e+00f, /* 10,23 (36) */ +0.000000000e+00f, -3.412819488e-04f, -5.488746074e-04f, +1.798411495e-03f, +7.482501437e-05f, -4.525234640e-03f, +3.267624763e-03f, +6.922886377e-03f, -1.128881091e-02f, -4.922021540e-03f, +2.366765949e-02f, -7.604559150e-03f, -3.609832469e-02f, +3.847293254e-02f, +3.863142371e-02f, -1.055445525e-01f, -1.845568962e-03f, +4.268336005e-01f, +5.577854456e-01f, +1.742777030e-01f, -1.150026489e-01f, -2.316623169e-02f, +6.304724158e-02f, -1.202874551e-02f, -3.059457870e-02f, +1.892646982e-02f, +1.006150723e-02f, -1.456072444e-02f, +4.508562038e-05f, +7.650480035e-03f, -2.791569555e-03f, -2.591945231e-03f, +2.038085481e-03f, +3.419877898e-04f, -7.090815039e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.998405133e-05f, -3.829275975e-05f, -6.227936507e-05f, +1.709866648e-04f, +1.225533759e-06f, -3.794666750e-04f, +2.939134475e-04f, +5.133108049e-04f, -9.174180851e-04f, -2.689501487e-04f, +1.800543053e-03f, -7.674926758e-04f, -2.663687558e-03f, +3.218589221e-03f, +3.202430684e-03f, -1.009977991e-02f, -1.257385239e-02f, +5.382172507e-03f, +1.429221976e-02f, +2.356104585e-03f, -5.151826305e-03f, +5.025812648e-04f, +2.525402363e-03f, -1.235299800e-03f, -9.583003777e-04f, +1.084708017e-03f, +1.100874403e-04f, -6.391917579e-04f, +1.915054324e-04f, +2.474246117e-04f, -1.831139756e-04f, -3.908930945e-05f, +8.327622540e-05f, -1.610437038e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.412819488e-04f, +5.488746074e-04f, -2.319248410e-03f, +9.526020949e-04f, +5.158673819e-03f, -7.395378343e-03f, -3.244114383e-03f, +1.645336235e-02f, -9.178159050e-03f, -1.778092436e-02f, +2.829061464e-02f, +1.542095251e-03f, -3.822883205e-02f, +2.768072048e-02f, +2.433286268e-02f, -4.928046860e-02f, +9.370645047e-03f, +4.425308766e-02f, -3.987606931e-02f, -1.481593132e-02f, +4.579400365e-02f, -1.679587923e-02f, -2.705835010e-02f, +2.973663610e-02f, +2.331401707e-03f, -2.220278145e-02f, +1.089530664e-02f, +7.802614769e-03f, -1.024720456e-02f, +9.704062327e-04f, +4.333925333e-03f, -2.239422350e-03f, -3.419877898e-04f, +7.090815039e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.998405133e-05f, +3.829275975e-05f, +6.346405180e-05f, -2.463803425e-04f, +1.335372086e-04f, +4.064113792e-04f, -6.852870172e-04f, -6.831492326e-05f, +1.209810209e-03f, -9.815833829e-04f, -9.148141966e-04f, +2.126757767e-03f, -5.509390681e-04f, -2.202263322e-03f, +2.373017956e-03f, +6.785074790e-04f, -3.069618857e-03f, +1.538119278e-03f, +1.936350697e-03f, -2.805179267e-03f, +1.640358600e-04f, +2.311960884e-03f, -1.641150580e-03f, -7.680086419e-04f, +1.696320876e-03f, -4.829366141e-04f, -8.397926405e-04f, +7.753791751e-04f, +5.693006235e-05f, -4.371052354e-04f, +1.930869736e-04f, +8.791448778e-05f, -8.327622540e-05f, +1.610437038e-05f, +0.000000000e+00f, /* 10,24 (36) */ +0.000000000e+00f, -3.112978975e-04f, -5.871673671e-04f, +1.736132130e-03f, +2.458116791e-04f, -4.524009106e-03f, +2.888158088e-03f, +7.216799824e-03f, -1.077550011e-02f, -5.839439625e-03f, +2.339870935e-02f, -5.804016097e-03f, -3.686581736e-02f, +3.580924498e-02f, +4.185001294e-02f, -1.023421218e-01f, -1.194534887e-02f, +4.142597481e-01f, +5.631676181e-01f, +1.885699227e-01f, -1.126465443e-01f, -2.831805799e-02f, +6.354982285e-02f, -9.503343145e-03f, -3.182987850e-02f, +1.796816944e-02f, +1.114621525e-02f, -1.445063700e-02f, -5.941061375e-04f, +7.841985467e-03f, -2.544144944e-03f, -2.775059206e-03f, +1.998996172e-03f, +4.252640152e-04f, -7.251858742e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.969548071e-05f, -3.454906199e-05f, -6.648190592e-05f, +1.653545488e-04f, +1.675785505e-05f, -3.808394755e-04f, +2.635014452e-04f, +5.397426018e-04f, -8.812771671e-04f, -3.423717487e-04f, +1.788932731e-03f, -6.316405263e-04f, -2.733257492e-03f, +3.013575599e-03f, +3.458125588e-03f, -9.687310381e-03f, -1.288416172e-02f, +4.775069922e-03f, +1.440045004e-02f, +2.810275417e-03f, -5.175461552e-03f, +2.979378363e-04f, +2.603349068e-03f, -1.149255343e-03f, -1.036072332e-03f, +1.066326044e-03f, +1.615667266e-04f, -6.500161234e-04f, +1.685032771e-04f, +2.622662284e-04f, -1.781640366e-04f, -4.758123071e-05f, +8.474504102e-05f, -1.386565486e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.112978975e-04f, +5.871673671e-04f, -2.255784358e-03f, +7.062217525e-04f, +5.292211027e-03f, -6.988966964e-03f, -3.929401400e-03f, +1.638504743e-02f, -7.968348841e-03f, -1.876250774e-02f, +2.737580044e-02f, +3.668853018e-03f, -3.877977112e-02f, +2.547845715e-02f, +2.670588063e-02f, -4.860196112e-02f, +6.301026190e-03f, +4.579120694e-02f, -3.793971861e-02f, -1.762111059e-02f, +4.595803951e-02f, -1.448391835e-02f, -2.869950068e-02f, +2.896862746e-02f, +4.027722584e-03f, -2.268571807e-02f, +1.005551400e-02f, +8.577993945e-03f, -1.019027450e-02f, +5.333009973e-04f, +4.527012306e-03f, -2.151507862e-03f, -4.252640152e-04f, +7.251858742e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.969548071e-05f, +3.454906199e-05f, +7.026830925e-05f, -2.417284259e-04f, +1.100356434e-04f, +4.238942074e-04f, -6.579306774e-04f, -1.278665634e-04f, +1.222428889e-03f, -9.009535962e-04f, -1.006024907e-03f, +2.095453481e-03f, -4.052542535e-04f, -2.283756763e-03f, +2.266196171e-03f, +8.546060723e-04f, -3.089472453e-03f, +1.371013874e-03f, +2.078745462e-03f, -2.749387231e-03f, -4.064419775e-06f, +2.379370406e-03f, -1.547835191e-03f, -8.823350607e-04f, +1.700162350e-03f, -4.046303101e-04f, -8.902118581e-04f, +7.566088004e-04f, +9.695012096e-05f, -4.495842258e-04f, +1.806570197e-04f, +9.973236345e-05f, -8.474504102e-05f, +1.386565486e-05f, +0.000000000e+00f, /* 10,25 (36) */ +0.000000000e+00f, -2.816024168e-04f, -6.217164291e-04f, +1.669650224e-03f, +4.111662279e-04f, -4.507251251e-03f, +2.507318612e-03f, +7.480301269e-03f, -1.023575751e-02f, -6.720716792e-03f, +2.305633760e-02f, -4.015083365e-03f, -3.749745789e-02f, +3.307598749e-02f, +4.486358854e-02f, -9.888399625e-02f, -2.163265925e-02f, +4.013755864e-01f, +5.679426880e-01f, +2.029703728e-01f, -1.098362689e-01f, -3.349351954e-02f, +6.384776068e-02f, -6.899994078e-03f, -3.297913384e-02f, +1.693209711e-02f, +1.221254129e-02f, -1.428907027e-02f, -1.244122261e-03f, +8.010488745e-03f, -2.281878715e-03f, -2.953223243e-03f, +1.951414941e-03f, +5.100090562e-04f, -7.390515291e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.928298365e-05f, -3.080815738e-05f, -7.030403398e-05f, +1.592812343e-04f, +3.185371746e-05f, -3.808625011e-04f, +2.328034518e-04f, +5.638397564e-04f, -8.428128131e-04f, -4.133726548e-04f, +1.771565127e-03f, -4.960622527e-04f, -2.792618837e-03f, +2.803125091e-03f, +3.696690383e-03f, -9.263865382e-03f, -1.316941546e-02f, +4.158255968e-03f, +1.448358090e-02f, +3.269983539e-03f, -5.182950086e-03f, +8.826984939e-05f, +2.673998238e-03f, -1.057829360e-03f, -1.111681544e-03f, +1.043966167e-03f, +2.134531864e-04f, -6.587951315e-04f, +1.444138644e-04f, +2.765214500e-04f, -1.724347159e-04f, -5.614849721e-05f, +8.592942003e-05f, -1.146869604e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.816024168e-04f, +6.217164291e-04f, -2.185516049e-03f, +4.644933266e-04f, +5.402246671e-03f, -6.565072757e-03f, -4.587332077e-03f, +1.625718086e-02f, -6.745919952e-03f, -1.966346134e-02f, +2.636977554e-02f, +5.764306499e-03f, -3.918502537e-02f, +2.319470039e-02f, +2.897207681e-02f, -4.774735505e-02f, +3.211553737e-03f, +4.716222082e-02f, -3.586097315e-02f, -2.037049782e-02f, +4.595397510e-02f, -1.210454794e-02f, -3.024733587e-02f, +2.808629239e-02f, +5.727884933e-03f, -2.309034838e-02f, +9.165302142e-03f, +9.334602745e-03f, -1.009332438e-02f, +8.371677150e-05f, +4.707669326e-03f, -2.051775499e-03f, -5.100090562e-04f, +7.390515291e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.928298365e-05f, +3.080815738e-05f, +7.653379225e-05f, -2.362349022e-04f, +8.668310176e-05f, +4.393733119e-04f, -6.285732982e-04f, -1.859885772e-04f, +1.230289469e-03f, -8.179111777e-04f, -1.092576711e-03f, +2.056628820e-03f, -2.590571425e-04f, -2.356359075e-03f, +2.151397215e-03f, +1.027110630e-03f, -3.097867476e-03f, +1.198775712e-03f, +2.213675986e-03f, -2.683213238e-03f, -1.729143738e-04f, +2.438316371e-03f, -1.448025975e-03f, -9.944043599e-04f, +1.697639239e-03f, -3.237842138e-04f, -9.379874212e-04f, +7.345990946e-04f, +1.373938764e-04f, -4.605685252e-04f, +1.671499120e-04f, +1.115119337e-04f, -8.592942003e-05f, +1.146869604e-05f, +0.000000000e+00f, /* 10,26 (36) */ +0.000000000e+00f, -2.523194331e-04f, -6.525245865e-04f, +1.599346190e-03f, +5.704474622e-04f, -4.475397533e-03f, +2.126456111e-03f, +7.713104721e-03f, -9.671917752e-03f, -7.563529605e-03f, +2.264296494e-02f, -2.243518239e-03f, -3.799352014e-02f, +3.028336865e-02f, +4.766671363e-02f, -9.518730587e-02f, -3.089652464e-02f, +3.882061709e-01f, +5.721009440e-01f, +2.174539537e-01f, -1.065662854e-01f, -3.867646963e-02f, +6.393603053e-02f, -4.225995840e-03f, -3.403696320e-02f, +1.582041557e-02f, +1.325650746e-02f, -1.407561709e-02f, -1.902917392e-03f, +8.154902609e-03f, -2.005357265e-03f, -3.125657959e-03f, +1.895266444e-03f, +5.959384762e-04f, -7.505202251e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.875354420e-05f, -2.708541354e-05f, -7.374245794e-05f, +1.528007835e-04f, +4.646933020e-05f, -3.795648824e-04f, +2.019316964e-04f, +5.855633017e-04f, -8.021969079e-04f, -4.817556115e-04f, +1.748595268e-03f, -3.611980788e-04f, -2.841764127e-03f, +2.587996928e-03f, +3.917852994e-03f, -8.830546986e-03f, -1.342917682e-02f, +3.532976323e-03f, +1.454119011e-02f, +3.734215656e-03f, -5.173912764e-03f, -1.258445563e-04f, +2.736986459e-03f, -9.612362918e-04f, -1.184833580e-03f, +1.017634902e-03f, +2.655741250e-04f, -6.654578295e-04f, +1.193000958e-04f, +2.901250602e-04f, -1.659274605e-04f, -6.476024872e-05f, +8.681515683e-05f, -8.918174004e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.523194331e-04f, +6.525245865e-04f, -2.108982257e-03f, +2.282584243e-04f, +5.488929773e-03f, -6.125699445e-03f, -5.215905376e-03f, +1.607119229e-02f, -5.515630483e-03f, -2.048137252e-02f, +2.527719883e-02f, +7.820935319e-03f, -3.944408252e-02f, +2.083834132e-02f, +3.112347402e-02f, -4.672024442e-02f, +1.136862607e-04f, +4.836099653e-02f, -3.364729716e-02f, -2.305371106e-02f, +4.578106072e-02f, -9.666231573e-03f, -3.169536184e-02f, +2.709188803e-02f, +7.425524173e-03f, -2.341413259e-02f, +8.227314721e-03f, +1.006920184e-02f, -9.955930500e-03f, -3.768517537e-04f, +4.874819238e-03f, -1.940263565e-03f, -5.959384762e-04f, +7.505202251e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.875354420e-05f, +2.708541354e-05f, +8.225054997e-05f, -2.299462057e-04f, +6.357011090e-05f, +4.528293106e-04f, -5.973649916e-04f, -2.424800867e-04f, +1.233426639e-03f, -7.327991633e-04f, -1.174189137e-03f, +2.010492361e-03f, -1.129002439e-04f, -2.419844927e-03f, +2.029081848e-03f, +1.195383927e-03f, -3.094784748e-03f, +1.022048699e-03f, +2.340623620e-03f, -2.606874067e-03f, -3.418817327e-04f, +2.488525914e-03f, -1.342052330e-03f, -1.103769857e-03f, +1.688692430e-03f, -2.406772698e-04f, -9.828950914e-04f, +7.093814518e-04f, +1.781085629e-04f, -4.699796753e-04f, +1.525939204e-04f, +1.232002731e-04f, -8.681515683e-05f, +8.918174004e-06f, +0.000000000e+00f, /* 10,27 (36) */ +0.000000000e+00f, -2.235658889e-04f, -6.796100001e-04f, +1.525603732e-03f, +7.232482457e-04f, -4.428928203e-03f, +1.746891229e-03f, +7.915036418e-03f, -9.086354450e-03f, -8.365726513e-03f, +2.216120933e-02f, -4.949229710e-04f, -3.835471822e-02f, +2.744160453e-02f, +5.025471055e-02f, -9.126945287e-02f, -3.972707162e-02f, +3.747769941e-01f, +5.756339203e-01f, +2.319951438e-01f, -1.028320697e-01f, -4.385038239e-02f, +6.381018598e-02f, -1.489009381e-03f, -3.499819949e-02f, +1.463558199e-02f, +1.427414236e-02f, -1.381004296e-02f, -2.568375222e-03f, +8.274202705e-03f, -1.715232205e-03f, -3.291585419e-03f, +1.830506195e-03f, +6.827536331e-04f, -7.594383991e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.811445097e-05f, -2.339563256e-05f, -7.679548794e-05f, +1.459479235e-04f, +6.056366392e-05f, -3.769798469e-04f, +1.709968175e-04f, +6.048831993e-04f, -7.596056841e-04f, -5.473355139e-04f, +1.720194238e-03f, -2.274785910e-04f, -2.880718331e-03f, +2.368950490e-03f, +4.121391341e-03f, -8.388469819e-03f, -1.366307007e-02f, +2.900497611e-03f, +1.457291283e-02f, +4.201934253e-03f, -5.148010231e-03f, -3.438028954e-04f, +2.791969079e-03f, -8.597114582e-04f, -1.255237391e-03f, +9.873525818e-04f, +3.177528972e-04f, -6.699394056e-04f, +9.322986019e-05f, +3.030127815e-04f, -1.586466923e-04f, -7.338460892e-05f, +8.738885041e-05f, -6.219625487e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.235658889e-04f, +6.796100001e-04f, -2.026731707e-03f, -1.687781361e-06f, +5.552499883e-03f, -5.672870134e-03f, -5.813270367e-03f, +1.582871220e-02f, -4.282203844e-03f, -2.121417168e-02f, +2.410300969e-02f, +9.831427680e-03f, -3.955698276e-02f, +1.841849639e-02f, +3.315255587e-02f, -4.552486049e-02f, -2.981098487e-03f, +4.938304523e-02f, -3.130667354e-02f, -2.566058512e-02f, +4.543917899e-02f, -7.177705658e-03f, -3.303741417e-02f, +2.598811818e-02f, +9.114216603e-03f, -2.365480986e-02f, +7.244419629e-03f, +1.077858329e-02f, -9.777821937e-03f, -8.468314290e-04f, +5.027413158e-03f, -1.817063292e-03f, -6.827536331e-04f, +7.594383991e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.811445097e-05f, +2.339563256e-05f, +8.741141862e-05f, -2.229109352e-04f, +4.078411243e-05f, +4.642513548e-04f, -5.644605407e-04f, -2.971496820e-04f, +1.231892916e-03f, -6.459645926e-04f, -1.250603378e-03f, +1.957278847e-03f, +3.266778794e-05f, -2.474024768e-03f, +1.899737561e-03f, +1.358806323e-03f, -3.080248590e-03f, +8.414939287e-04f, +2.459099157e-03f, -2.520625783e-03f, -5.103309886e-04f, +2.529757947e-03f, -1.230269716e-03f, -1.209991291e-03f, +1.673287075e-03f, -1.556007156e-04f, -1.024718709e-03f, +6.810005888e-04f, +2.189374102e-04f, -4.777440308e-04f, +1.370225164e-04f, +1.347433312e-04f, -8.738885041e-05f, +6.219625487e-06f, +0.000000000e+00f, /* 10,28 (36) */ +0.000000000e+00f, -1.954514380e-04f, -7.030056326e-04f, +1.448808244e-03f, +8.691961692e-04f, -4.368364539e-03f, +1.369911382e-03f, +8.086033235e-03f, -8.481471251e-03f, -9.125332197e-03f, +2.161387382e-02f, +1.225271268e-03f, -3.858219681e-02f, +2.456088620e-02f, +5.262366104e-02f, -8.714806153e-02f, -4.811554144e-02f, +3.611139240e-01f, +5.785344179e-01f, +2.465680566e-01f, -9.863013548e-02f, -4.899839262e-02f, +6.346638308e-02f, +1.302959698e-03f, -3.585791095e-02f, +1.338034460e-02f, +1.526149494e-02f, -1.349229007e-02f, -3.238314627e-03f, +8.367432565e-03f, -1.412219424e-03f, -3.450232112e-03f, +1.757121586e-03f, +7.701424835e-04f, -7.656580246e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.737325389e-05f, -1.975300466e-05f, -7.946299958e-05f, +1.387578968e-04f, +7.409854095e-05f, -3.731445150e-04f, +1.401075016e-04f, +6.217782838e-04f, -7.152190423e-04f, -6.099398339e-04f, +1.686548354e-03f, -9.532349545e-05f, -2.909538260e-03f, +2.146743094e-03f, +4.307133336e-03f, -7.938758087e-03f, -1.387078132e-02f, +2.262104276e-03f, +1.457844287e-02f, +4.672080105e-03f, -5.104944408e-03f, -5.649797821e-04f, +2.838621625e-03f, -7.535106118e-04f, -1.322606356e-03f, +9.531535107e-04f, +3.698094587e-04f, -6.721815354e-04f, +6.627588767e-05f, +3.151215343e-04f, -1.505998611e-04f, -8.198878583e-05f, +8.763798329e-05f, -3.379445362e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.954514380e-04f, +7.030056326e-04f, -1.939320288e-03f, -2.245987165e-04f, +5.593283996e-03f, -5.208618780e-03f, -6.377730908e-03f, +1.553156252e-02f, -3.050310928e-03f, -2.186013627e-02f, +2.285240631e-02f, +1.178870653e-02f, -3.952431497e-02f, +1.594447162e-02f, +3.505229343e-02f, -4.416605417e-02f, -6.061347078e-03f, +5.022453916e-02f, -2.884757439e-02f, -2.818121091e-02f, +4.492884800e-02f, -4.647947712e-03f, -3.426768389e-02f, +2.477812689e-02f, +1.078750368e-02f, -2.381041058e-02f, +6.219700920e-03f, +1.145958388e-02f, -9.558884527e-03f, -1.324575460e-03f, +5.164435675e-03f, -1.682319961e-03f, -7.701424835e-04f, +7.656580246e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.737325389e-05f, +1.975300466e-05f, +9.201197506e-05f, -2.151795872e-04f, +1.840916351e-05f, +4.736370068e-04f, -5.300186960e-04f, -3.498160386e-04f, +1.225758205e-03f, -5.577571095e-04f, -1.321583081e-03f, +1.897248067e-03f, +1.771042394e-04f, -2.518745368e-03f, +1.763876605e-03f, +1.516778097e-03f, -3.054326685e-03f, +6.577871599e-04f, +2.568644751e-03f, -2.424762866e-03f, -6.776258297e-04f, +2.561804269e-03f, -1.113058466e-03f, -1.312636598e-03f, +1.651412983e-03f, -6.885707847e-05f, -1.063251170e-03f, +6.495145785e-04f, +2.597202162e-04f, -4.837931722e-04f, +1.204743522e-04f, +1.460861484e-04f, -8.763798329e-05f, +3.379445362e-06f, +0.000000000e+00f, /* 10,29 (36) */ +0.000000000e+00f, -1.680781841e-04f, -7.227586373e-04f, +1.369345244e-03f, +1.007954066e-03f, -4.294265998e-03f, +9.967668667e-04f, +8.226140737e-03f, -7.859692967e-03f, -9.840551239e-03f, +2.100393398e-02f, +2.911819621e-03f, -3.867752031e-02f, +2.165134794e-02f, +5.477040414e-02f, -8.284092820e-02f, -5.605429953e-02f, +3.472431427e-01f, +5.807965222e-01f, +2.611464995e-01f, -9.395805537e-02f, -5.410333703e-02f, +6.290140330e-02f, +4.141581323e-03f, -3.661142156e-02f, +1.205773824e-02f, +1.621464846e-02f, -1.312248061e-02f, -3.910496163e-03f, +8.433708453e-03f, -1.097097889e-03f, -3.600831973e-03f, +1.675132800e-03f, +8.577804668e-04f, -7.690374700e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.653772083e-05f, -1.617106558e-05f, -8.174639255e-05f, +1.312663145e-04f, +8.703871292e-05f, -3.680996854e-04f, +1.093701351e-04f, +6.362361767e-04f, -6.692198707e-04f, -6.694089971e-04f, +1.647858294e-03f, +3.485957021e-05f, -2.928311885e-03f, +1.922127813e-03f, +4.474956746e-03f, -7.482542598e-03f, -1.405205896e-02f, +1.619095412e-03f, +1.455753372e-02f, +5.143574865e-03f, -5.044459890e-03f, -7.887284655e-04f, +2.876641169e-03f, -6.429094186e-04f, -1.386659325e-03f, +9.150860880e-04f, +4.215609389e-04f, -6.721327113e-04f, +3.851558106e-05f, +3.263896975e-04f, -1.417974878e-04f, -9.053917835e-05f, +8.755099897e-05f, -4.048843568e-07f, +0.000000000e+00f, +0.000000000e+00f, +1.680781841e-04f, +7.227586373e-04f, -1.847308313e-03f, -4.397783037e-04f, +5.611693159e-03f, -4.734981773e-03f, -6.907749604e-03f, +1.518174648e-02f, -1.824552723e-03f, -2.241789338e-02f, +2.153082323e-02f, +1.368595459e-02f, -3.934721073e-02f, +1.342572625e-02f, +3.681617003e-02f, -4.264927607e-02f, -9.115673763e-03f, +5.088232632e-02f, -2.627892964e-02f, -3.060597377e-02f, +4.425122217e-02f, -2.086143442e-03f, -3.538074236e-02f, +2.346549029e-02f, +1.243891666e-02f, -2.387926765e-02f, +5.156449751e-03f, +1.210909846e-02f, -9.299164310e-03f, -1.808368632e-03f, +5.284910027e-03f, -1.536233813e-03f, -8.577804668e-04f, +7.690374700e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.653772083e-05f, +1.617106558e-05f, +9.605047892e-05f, -2.068042874e-04f, -3.474341315e-06f, +4.809920841e-04f, -4.942014676e-04f, -4.003084851e-04f, +1.215109297e-03f, -4.685275682e-04f, -1.386915047e-03f, +1.830683648e-03f, +3.198743867e-04f, -2.553890217e-03f, +1.622033927e-03f, +1.668721691e-03f, -3.017129766e-03f, +4.716162238e-04f, +2.668835727e-03f, -2.319617192e-03f, -8.431315882e-04f, +2.584490563e-03f, -9.908224858e-04f, -1.411283666e-03f, +1.623084914e-03f, +1.924088598e-05f, -1.098295382e-03f, +6.149948290e-04f, +3.002939445e-04f, -4.880643032e-04f, +1.029932155e-04f, +1.571730812e-04f, -8.755099897e-05f, +4.048843568e-07f, +0.000000000e+00f, /* 10,30 (36) */ +0.000000000e+00f, -1.415404632e-04f, -7.389297029e-04f, +1.287598852e-03f, +1.139220381e-03f, -4.207227285e-03f, +6.286671812e-04f, +8.335510872e-03f, -7.223456790e-03f, -1.050977111e-02f, +2.033452499e-02f, +4.559677915e-03f, -3.864266074e-02f, +1.872303605e-02f, +5.669253195e-02f, -7.836597145e-02f, -6.353684213e-02f, +3.331910838e-01f, +5.824156176e-01f, +2.757040332e-01f, -8.881448051e-02f, -5.914779692e-02f, +6.211267483e-02f, +7.018222492e-03f, -3.725433098e-02f, +1.067107892e-02f, +1.712973454e-02f, -1.270091967e-02f, -4.582628874e-03f, +8.472224034e-03f, -7.707081919e-04f, -3.742629460e-03f, +1.584593622e-03f, +9.453314657e-04f, -7.694423543e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.561579456e-05f, -1.266265802e-05f, -8.364854408e-05f, +1.235090111e-04f, +9.935192578e-05f, -3.618896117e-04f, +7.888847102e-05f, +6.482531711e-04f, -6.217933644e-04f, -7.255967097e-04f, +1.604338211e-03f, +1.626761686e-04f, -2.937157559e-03f, +1.695851340e-03f, +4.624788907e-03f, -7.020957778e-03f, -1.420671412e-02f, +9.727815458e-04f, +1.450999957e-02f, +5.615323730e-03f, -4.966345222e-03f, -1.014382450e-03f, +2.905747658e-03f, -5.282028638e-04f, -1.447121671e-03f, +8.732128755e-04f, +4.728222327e-04f, -6.697485541e-04f, +1.003082804e-05f, +3.367573684e-04f, -1.322531958e-04f, -9.900148872e-05f, +8.711737723e-05f, +2.695957155e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.415404632e-04f, +7.389297029e-04f, -1.751257834e-03f, -6.465825911e-04f, +5.608218818e-03f, -4.253989689e-03f, -7.401951071e-03f, +1.478143799e-02f, -6.094434262e-04f, -2.288642095e-02f, +2.014390818e-02f, +1.551663824e-02f, -3.902733634e-02f, +1.087183604e-02f, +3.843820396e-02f, -4.098055438e-02f, -1.213280353e-02f, +5.135394254e-02f, -2.361009391e-02f, -3.292559096e-02f, +4.340809058e-02f, +4.983471210e-04f, -3.637156484e-02f, +2.205420662e-02f, +1.406200157e-02f, -2.386002677e-02f, +4.058154368e-03f, +1.272409329e-02f, -8.998870366e-03f, -2.296432935e-03f, +5.387903242e-03f, -1.379060731e-03f, -9.453314657e-04f, +7.694423543e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.561579456e-05f, +1.266265802e-05f, +9.952780372e-05f, -1.978385212e-04f, -2.478992676e-05f, +4.863304728e-04f, -4.571734157e-04f, -4.484675188e-04f, +1.200049301e-03f, -3.786266502e-04f, -1.446409830e-03f, +1.757891766e-03f, +4.604535010e-04f, -2.579379779e-03f, +1.474765034e-03f, +1.814083871e-03f, -2.968811143e-03f, +2.836783930e-04f, +2.759282259e-03f, -2.205556864e-03f, -1.006217692e-03f, +2.597677261e-03f, -8.639878579e-04f, -1.505522069e-03f, +1.588342783e-03f, +1.083713075e-04f, -1.129665192e-03f, +5.775260078e-04f, +3.404933445e-04f, -4.905006326e-04f, +8.462796079e-05f, +1.679480372e-04f, -8.711737723e-05f, -2.695957155e-06f, +0.000000000e+00f, /* 10,31 (36) */ +0.000000000e+00f, -1.159246687e-04f, -7.515923609e-04f, +1.203950308e-03f, +1.262729392e-03f, -4.107875360e-03f, +2.667775696e-04f, +8.414399343e-03f, -6.575203619e-03f, -1.113156447e-02f, +1.960892828e-02f, +6.164016126e-03f, -3.847998457e-02f, +1.578587849e-02f, +5.838838329e-02f, -7.374118254e-02f, -7.055779991e-02f, +3.189843696e-01f, +5.833883991e-01f, +2.902140328e-01f, -8.319915678e-02f, -6.411414215e-02f, +6.109829238e-02f, +9.923970151e-03f, -3.778253385e-02f, +9.223957244e-03f, +1.800294742e-02f, -1.222809744e-02f, -5.252377428e-03f, +8.482254862e-03f, -4.339508234e-04f, -3.874882656e-03f, +1.485592133e-03f, +1.032448843e-03f, -7.667463972e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.461555001e-05f, -9.239896990e-06f, -8.517375766e-05f, +1.155219012e-04f, +1.110089722e-04f, -3.545617704e-04f, +4.876331166e-05f, +6.578340876e-04f, -5.731263495e-04f, -7.783702355e-04f, +1.556214796e-03f, +2.877461347e-04f, -2.936223164e-03f, +1.468651897e-03f, +4.756606318e-03f, -6.555138706e-03f, -1.433462083e-02f, +3.244813960e-04f, +1.443571605e-02f, +6.086218167e-03f, -4.870434080e-03f, -1.241257195e-03f, +2.925685177e-03f, -4.097045852e-04f, -1.503726322e-03f, +8.276106219e-04f, +5.234066115e-04f, -6.649921034e-04f, -1.909220717e-05f, +3.461666226e-04f, -1.219837312e-04f, -1.073408404e-04f, +8.632770721e-05f, +5.914139316e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.159246687e-04f, +7.515923609e-04f, -1.651730030e-03f, -8.444211122e-04f, +5.583428891e-03f, -3.767659216e-03f, -7.859124487e-03f, +1.433297048e-02f, +5.906058744e-04f, -2.326504760e-02f, +1.869749835e-02f, +1.727453001e-02f, -3.856688284e-02f, +8.292456257e-03f, +3.991296900e-02f, -3.916647051e-02f, -1.510161467e-02f, +5.163762093e-02f, -2.085081165e-02f, -3.513114783e-02f, +4.240187289e-02f, +3.096024382e-03f, -3.723555270e-02f, +2.054868455e-02f, +1.565034436e-02f, -2.375165546e-02f, +2.928489176e-03f, +1.330161930e-02f, -8.658377021e-03f, -2.786933568e-03f, +5.472531203e-03f, -1.211112694e-03f, -1.032448843e-03f, +7.667463972e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.461555001e-05f, +9.239896990e-06f, +1.024473576e-04f, -1.883368647e-04f, -4.546527100e-05f, +4.896739099e-04f, -4.191009431e-04f, -4.941452697e-04f, +1.180697021e-03f, -2.884034970e-04f, -1.499902243e-03f, +1.679199776e-03f, +5.983288007e-04f, -2.595171601e-03f, +1.322643785e-03f, +1.952337783e-03f, -2.909566064e-03f, +9.467771006e-05f, +2.839630915e-03f, -2.082984900e-03f, -1.166260110e-03f, +2.601260275e-03f, -7.330013445e-04f, -1.594954770e-03f, +1.547251752e-03f, +1.982043651e-04f, -1.157186281e-03f, +5.372059098e-04f, +3.801515912e-04f, -4.910517381e-04f, +6.543241704e-05f, +1.783547172e-04f, -8.632770721e-05f, -5.914139316e-06f, +0.000000000e+00f, /* 11, 0 (32) */ +0.000000000e+00f, +3.454933159e-04f, +1.541097233e-03f, -3.365769507e-03f, +1.849372243e-04f, +7.921455674e-03f, -9.933387929e-03f, -4.722893055e-03f, +2.491782703e-02f, -1.923850865e-02f, -2.511889872e-02f, +6.555431985e-02f, -2.774896345e-02f, -1.143270713e-01f, +2.866385681e-01f, +6.354451792e-01f, +2.866385681e-01f, -1.143270713e-01f, -2.774896345e-02f, +6.555431985e-02f, -2.511889872e-02f, -1.923850865e-02f, +2.491782703e-02f, -4.722893055e-03f, -9.933387929e-03f, +7.921455674e-03f, +1.849372243e-04f, -3.365769507e-03f, +1.541097233e-03f, +3.454933159e-04f, -4.305061225e-04f, +0.000000000e+00f, +0.000000000e+00f, -7.101387684e-05f, +5.655131412e-05f, +1.448851155e-04f, -3.610593840e-04f, +1.277861936e-04f, +6.337796691e-04f, -1.025814987e-03f, -4.352543003e-05f, +2.004659355e-03f, -2.192683832e-03f, -1.360003080e-03f, +6.036694190e-03f, -4.003233266e-03f, -1.727534696e-02f, -4.191591060e-04f, +1.724418689e-02f, +4.602800923e-03f, -6.079250102e-03f, +1.126519703e-03f, +2.337894363e-03f, -1.966945911e-03f, -5.631255252e-05f, +1.066773732e-03f, -6.075706714e-04f, -1.636888179e-04f, +3.703376314e-04f, -1.351121395e-04f, -6.554370115e-05f, +7.281496347e-05f, -1.727359999e-05f, +0.000000000e+00f, +0.000000000e+00f, -3.454933159e-04f, -1.287417451e-03f, +5.082890229e-03f, -4.452826306e-03f, -5.152110347e-03f, +1.588482173e-02f, -1.131295515e-02f, -1.199676363e-02f, +3.147222030e-02f, -1.942348993e-02f, -1.990214054e-02f, +4.584722208e-02f, -2.506967236e-02f, -2.523864421e-02f, +5.173229864e-02f, -2.523864421e-02f, -2.506967236e-02f, +4.584722208e-02f, -1.990214054e-02f, -1.942348993e-02f, +3.147222030e-02f, -1.199676363e-02f, -1.131295515e-02f, +1.588482173e-02f, -5.152110347e-03f, -4.452826306e-03f, +5.082890229e-03f, -1.287417451e-03f, -7.762310022e-04f, +4.305061225e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.101387684e-05f, -1.418209216e-04f, -6.562212109e-05f, +4.928895181e-04f, -6.050820446e-04f, -1.179125761e-04f, +1.239577499e-03f, -1.396234898e-03f, -1.564208422e-04f, +2.155328008e-03f, -2.269433978e-03f, -1.561627150e-04f, +2.839407163e-03f, -2.815838079e-03f, -1.107507574e-04f, +2.928700180e-03f, -2.741319471e-03f, -4.020126626e-05f, +2.370842601e-03f, -2.090262312e-03f, +2.150884940e-05f, +1.466738437e-03f, -1.209113201e-03f, +4.975225277e-05f, +6.412573280e-04f, -4.853095666e-04f, +4.385512737e-05f, +1.537652081e-04f, -1.002695547e-04f, +1.727359999e-05f, +0.000000000e+00f, /* 11, 1 (32) */ +0.000000000e+00f, +2.744794391e-04f, +1.597648547e-03f, -3.220884391e-03f, -1.761221597e-04f, +8.049241867e-03f, -9.299608260e-03f, -5.748708042e-03f, +2.487430160e-02f, -1.723384929e-02f, -2.731158255e-02f, +6.419431677e-02f, -2.171226926e-02f, -1.183303046e-01f, +2.693632211e-01f, +6.350260201e-01f, +3.038827550e-01f, -1.097242704e-01f, -3.382821355e-02f, +6.668083955e-02f, -2.278100435e-02f, -2.120545456e-02f, +2.486151448e-02f, -3.656119323e-03f, -1.054095860e-02f, +7.757766856e-03f, +5.552748558e-04f, -3.500881646e-03f, +1.475553532e-03f, +4.183082794e-04f, -4.477797225e-04f, +0.000000000e+00f, +0.000000000e+00f, -6.894654851e-05f, +4.762523496e-05f, +1.537432642e-04f, -3.505241726e-04f, +9.222254628e-05f, +6.568429598e-04f, -9.815841830e-04f, -1.412211116e-04f, +2.033724933e-03f, -2.041759800e-03f, -1.583294811e-03f, +5.972562914e-03f, -3.409766865e-03f, -1.726928183e-02f, -1.256459939e-03f, +1.717552527e-02f, +5.206873907e-03f, -6.099553942e-03f, +8.835284387e-04f, +2.476704058e-03f, -1.920567935e-03f, -1.579283810e-04f, +1.104223360e-03f, -5.782559362e-04f, -1.997856523e-04f, +3.782849447e-04f, -1.244408611e-04f, -7.456199901e-05f, +7.432951012e-05f, -1.587925964e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.744794391e-04f, -1.429238372e-03f, +5.017268108e-03f, -3.959936788e-03f, -5.757192392e-03f, +1.576690915e-02f, -1.007337765e-02f, -1.339299853e-02f, +3.131579945e-02f, -1.726816192e-02f, -2.217157452e-02f, +4.569105936e-02f, -2.223026519e-02f, -2.805448229e-02f, +5.162154789e-02f, -2.230994403e-02f, -2.781099183e-02f, +4.580702081e-02f, -1.753129794e-02f, -2.151375224e-02f, +3.149372914e-02f, -1.053002519e-02f, -1.252206835e-02f, +1.593457398e-02f, -4.510853019e-03f, -4.938135872e-03f, +5.126745357e-03f, -1.133652243e-03f, -8.765005569e-04f, +4.477797225e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.894654851e-05f, -1.296007205e-04f, -8.643911408e-05f, +4.980291667e-04f, -5.669451485e-04f, -1.843390432e-04f, +1.264126917e-03f, -1.320520896e-03f, -2.892181057e-04f, +2.210463330e-03f, -2.158870932e-03f, -3.508593867e-04f, +2.924870034e-03f, -2.690969630e-03f, -3.317666361e-04f, +3.029040832e-03f, -2.630996745e-03f, -2.373751464e-04f, +2.462586420e-03f, -2.015469923e-03f, -1.149374980e-04f, +1.531648112e-03f, -1.172783428e-03f, -1.985905989e-05f, +6.752609872e-04f, -4.752661866e-04f, +2.121927248e-05f, +1.653604951e-04f, -1.007616128e-04f, +1.587925964e-05f, +0.000000000e+00f, /* 11, 2 (32) */ +0.000000000e+00f, +2.055328905e-04f, +1.645273782e-03f, -3.067141127e-03f, -5.266463322e-04f, +8.141464414e-03f, -8.642765300e-03f, -6.730292225e-03f, +2.473308049e-02f, -1.520012436e-02f, -2.935334235e-02f, +6.261102195e-02f, -1.573970634e-02f, -1.217400715e-01f, +2.520939393e-01f, +6.337695601e-01f, +3.210582802e-01f, -1.045173965e-01f, -3.992776749e-02f, +6.756436799e-02f, -2.030430029e-02f, -2.312602249e-02f, +2.470358610e-02f, -2.551895963e-03f, -1.111921454e-02f, +7.557981204e-03f, +9.335598005e-04f, -3.625322507e-03f, +1.400991533e-03f, +4.926377895e-04f, -4.636589821e-04f, +0.000000000e+00f, +0.000000000e+00f, -6.663390283e-05f, +3.880427232e-05f, +1.616746057e-04f, -3.388095256e-04f, +5.713788228e-05f, +6.767344434e-04f, -9.343269739e-04f, -2.364255892e-04f, +2.054193084e-03f, -1.885818684e-03f, -1.795762098e-03f, +5.887591478e-03f, -2.823957673e-03f, -1.722636945e-02f, -2.090711636e-03f, +1.706918873e-02f, +5.813820907e-03f, -6.096990672e-03f, +6.317624037e-04f, +2.608437499e-03f, -1.865543218e-03f, -2.609432477e-04f, +1.137936565e-03f, -5.458894262e-04f, -2.359276916e-04f, +3.848313325e-04f, -1.128923987e-04f, -8.356437160e-05f, +7.553797284e-05f, -1.430408636e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.055328905e-04f, -1.558839093e-03f, +4.930828994e-03f, -3.461907621e-03f, -6.324137540e-03f, +1.558257011e-02f, -8.809250736e-03f, -1.471351943e-02f, +3.102658135e-02f, -1.505769859e-02f, -2.433044545e-02f, +4.534019998e-02f, -1.930539516e-02f, -3.074545192e-02f, +5.128978125e-02f, -1.928090320e-02f, -3.044198857e-02f, +4.556964567e-02f, -1.506871152e-02f, -2.352922217e-02f, +3.137879165e-02f, -8.998377082e-03f, -1.369485178e-02f, +1.591471492e-02f, -3.835592032e-03f, -5.413402059e-03f, +5.147964629e-03f, -9.682917474e-04f, -9.772621697e-04f, +4.636589821e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.663390283e-05f, -1.171768659e-04f, -1.062318554e-04f, +5.007627948e-04f, -5.270616700e-04f, -2.487615761e-04f, +1.282739667e-03f, -1.239998590e-03f, -4.193357355e-04f, +2.255510631e-03f, -2.039701187e-03f, -5.430429681e-04f, +2.997375566e-03f, -2.554662325e-03f, -5.513277849e-04f, +3.116399721e-03f, -2.508884473e-03f, -4.344936997e-04f, +2.544194950e-03f, -1.931200014e-03f, -2.523248602e-04f, +1.590601295e-03f, -1.130665368e-03f, -9.062683597e-05f, +7.068891457e-04f, -4.627477756e-04f, -2.197657769e-06f, +1.765332510e-04f, -1.006917880e-04f, +1.430408636e-05f, +0.000000000e+00f, /* 11, 3 (32) */ +0.000000000e+00f, +1.388989877e-04f, +1.684078054e-03f, -2.905466521e-03f, -8.654558578e-04f, +8.198602296e-03f, -7.966030856e-03f, -7.664619199e-03f, +2.449665490e-02f, -1.314593127e-02f, -3.123916103e-02f, +6.081525986e-02f, -9.852114863e-03f, -1.245640291e-01f, +2.348675698e-01f, +6.316788485e-01f, +3.381274690e-01f, -9.870357560e-02f, -4.602475816e-02f, +6.819613039e-02f, -1.769586280e-02f, -2.499156571e-02f, +2.444264285e-02f, -1.413959398e-03f, -1.166510396e-02f, +7.322053512e-03f, +1.318391133e-03f, -3.738214906e-03f, +1.317427161e-03f, +5.681757623e-04f, -4.779630685e-04f, +0.000000000e+00f, +0.000000000e+00f, -6.409736252e-05f, +3.012550886e-05f, +1.686716379e-04f, -3.259961039e-04f, +2.266695685e-05f, +6.934417111e-04f, -8.842964323e-04f, -3.288066269e-04f, +2.066147209e-03f, -1.725563159e-03f, -1.996824487e-03f, +5.782570238e-03f, -2.247317239e-03f, -1.714708762e-02f, -2.919891436e-03f, +1.692510800e-02f, +6.421979990e-03f, -6.071009941e-03f, +3.720022736e-04f, +2.732434021e-03f, -1.801924571e-03f, -3.649652725e-04f, +1.167696943e-03f, -5.105391625e-04f, -2.719622451e-04f, +3.899111944e-04f, -1.004924917e-04f, -9.250770446e-05f, +7.642169036e-05f, -1.254897547e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.388989877e-04f, -1.676015959e-03f, +4.824597139e-03f, -2.961144826e-03f, -6.851199210e-03f, +1.533380853e-02f, -7.526511069e-03f, -1.595351802e-02f, +3.060724561e-02f, -1.280218796e-02f, -2.637014664e-02f, +4.479715701e-02f, -1.630801959e-02f, -3.330011425e-02f, +5.073845346e-02f, -1.616450348e-02f, -3.295087304e-02f, +4.513515197e-02f, -1.252451657e-02f, -2.546042218e-02f, +3.112646679e-02f, -7.407775787e-03f, -1.482551715e-02f, +1.582408808e-02f, -3.128702886e-03f, -5.876149835e-03f, +5.145766972e-03f, -7.917584964e-04f, -1.077953958e-03f, +4.779630685e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.409736252e-05f, -1.046204324e-04f, -1.249331840e-04f, +5.011354274e-04f, -4.856505384e-04f, -3.109239366e-04f, +1.295421288e-03f, -1.155086836e-03f, -5.462267062e-04f, +2.290358631e-03f, -1.912507091e-03f, -7.318830510e-04f, +3.056649812e-03f, -2.407533414e-03f, -7.684716360e-04f, +3.190373477e-03f, -2.375482011e-03f, -6.306877531e-04f, +2.615239996e-03f, -1.837746491e-03f, -3.900495221e-04f, +1.643258051e-03f, -1.082864033e-03f, -1.622460947e-04f, +7.359451690e-04f, -4.477545695e-04f, -2.630151461e-05f, +1.872098875e-04f, -1.000372204e-04f, +1.254897547e-05f, +0.000000000e+00f, /* 11, 4 (32) */ +0.000000000e+00f, +7.480162519e-05f, +1.714203563e-03f, -2.736794883e-03f, -1.191451962e-03f, +8.221269253e-03f, -7.272589145e-03f, -8.548915631e-03f, +2.416784827e-02f, -1.107978407e-02f, -3.296472419e-02f, +5.881843537e-02f, -4.069544625e-03f, -1.268113464e-01f, +2.177204822e-01f, +6.287589571e-01f, +3.550525770e-01f, -9.228159561e-02f, -5.209576810e-02f, +6.856813267e-02f, -1.496342877e-02f, -2.679349028e-02f, +2.407767758e-02f, -2.462624541e-04f, -1.217564313e-02f, +7.050091267e-03f, +1.708302327e-03f, -3.838707398e-03f, +1.224919457e-03f, +6.445974527e-04f, -4.905120440e-04f, +0.000000000e+00f, +0.000000000e+00f, -6.135872231e-05f, +2.162417585e-05f, +1.747312493e-04f, -3.121672704e-04f, -1.106118323e-05f, +7.069658116e-04f, -8.317518661e-04f, -4.180496835e-04f, +2.069702749e-03f, -1.561699363e-03f, -2.185955052e-03f, +5.658341220e-03f, -1.681308471e-03f, -1.703201199e-02f, -3.741991540e-03f, +1.674331867e-02f, +7.029663496e-03f, -6.021128903e-03f, +1.050742777e-04f, +2.848050543e-03f, -1.729800256e-03f, -4.695908602e-04f, +1.193300107e-03f, -4.722872316e-04f, -3.077335173e-04f, +3.934637232e-04f, -8.727150786e-05f, -1.013477763e-04f, +7.696301166e-05f, -1.061593068e-05f, +0.000000000e+00f, +0.000000000e+00f, -7.480162519e-05f, -1.780636391e-03f, +4.699663955e-03f, -2.460009399e-03f, -7.336849749e-03f, +1.502288459e-02f, -6.231089781e-03f, -1.710860485e-02f, +3.006101891e-02f, -1.051182933e-02f, -2.828265373e-02f, +4.406527396e-02f, -1.325136978e-02f, -3.570764766e-02f, +4.996998183e-02f, -1.297413000e-02f, -3.532635506e-02f, +4.450446421e-02f, -9.909276578e-03f, -2.729816867e-02f, +3.073641726e-02f, -5.764517736e-03f, -1.590838118e-02f, +1.566184199e-02f, -2.392757717e-03f, -6.323904404e-03f, +5.119465457e-03f, -6.045486089e-04f, -1.177991178e-03f, +4.905120440e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.135872231e-05f, -9.200096162e-05f, -1.424831887e-04f, +4.992023741e-04f, -4.429334640e-04f, -3.705846943e-04f, +1.302204225e-03f, -1.066219067e-03f, -6.693641742e-04f, +2.314942528e-03f, -1.777902771e-03f, -9.165682554e-04f, +3.102478442e-03f, -2.250247059e-03f, -9.822464652e-04f, +3.250617563e-03f, -2.231340502e-03f, -8.250880908e-04f, +2.675337866e-03f, -1.735447020e-03f, -5.275000579e-04f, +1.689302989e-03f, -1.029512157e-03f, -2.344026744e-04f, +7.622407565e-04f, -4.302989061e-04f, -5.099210984e-05f, +1.973171607e-04f, -9.877768243e-05f, +1.061593068e-05f, +0.000000000e+00f, /* 11, 5 (32) */ +0.000000000e+00f, +1.344290287e-05f, +1.735827739e-03f, -2.562063634e-03f, -1.503619232e-03f, +8.210208070e-03f, -6.565623334e-03f, -9.380667497e-03f, +2.374979859e-02f, -9.010081316e-03f, -3.452642355e-02f, +5.663248032e-02f, +1.588796594e-03f, -1.284926549e-01f, +2.006884702e-01f, +6.250169655e-01f, +3.717958956e-01f, -8.525193212e-02f, -5.811689701e-02f, +6.867320694e-02f, -1.211537823e-02f, -2.852329054e-02f, +2.360808672e-02f, +9.470376524e-04f, -1.264793036e-02f, +6.742357750e-03f, +2.101766051e-03f, -3.925978906e-03f, +1.123571680e-03f, +7.215604643e-04f, -5.011279746e-04f, +0.000000000e+00f, +0.000000000e+00f, -5.844002441e-05f, +1.333354016e-05f, +1.798546151e-04f, -2.974086587e-04f, -4.392362233e-05f, +7.173209664e-04f, -7.769576327e-04f, -5.038588502e-04f, +2.065006149e-03f, -1.394934129e-03f, -2.362681358e-03f, +5.515794497e-03f, -1.127341589e-03f, -1.688181373e-02f, -4.555025022e-03f, +1.652396156e-02f, +7.635163059e-03f, -5.946934842e-03f, -1.681520007e-04f, +2.954664371e-03f, -1.649294283e-03f, -5.744061304e-04f, +1.214554775e-03f, -4.312297312e-04f, -3.430832150e-04f, +3.954332952e-04f, -7.326442817e-05f, -1.100394411e-04f, +7.714542216e-05f, -8.508092032e-06f, +0.000000000e+00f, +0.000000000e+00f, -1.344290287e-05f, -1.872637353e-03f, +4.557180766e-03f, -1.960807025e-03f, -7.779783213e-03f, +1.465229990e-02f, -4.928885556e-03f, -1.817482392e-02f, +2.939165473e-02f, -8.196886804e-03f, -3.006055650e-02f, +4.314870570e-02f, -1.014889134e-02f, -3.795789472e-02f, +4.898773536e-02f, -9.723512442e-03f, -3.755769556e-02f, +4.367937612e-02f, -7.233938712e-03f, -2.903361569e-02f, +3.020891721e-02f, -4.075214748e-03f, -1.693789334e-02f, +1.542743931e-02f, -1.630516961e-03f, -6.754203310e-03f, +5.068473347e-03f, -4.072314483e-04f, -1.276768860e-03f, +5.011279746e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.844002441e-05f, -7.938613329e-05f, -1.588293267e-04f, +4.950287292e-04f, -3.991338273e-04f, -4.275181090e-04f, +1.303147295e-03f, -9.738411283e-04f, -7.882436644e-04f, +2.329243902e-03f, -1.636531151e-03f, -1.096309781e-03f, +3.134707495e-03f, -2.083511266e-03f, -1.191715659e-03f, +3.296847912e-03f, -2.077060559e-03f, -1.016829376e-03f, +2.724151392e-03f, -1.624681845e-03f, -6.640600564e-04f, +1.728447016e-03f, -9.707699758e-04f, -3.067745716e-04f, +7.855970127e-04f, -4.104054317e-04f, -7.616357881e-05f, +2.067825811e-04f, -9.689578485e-05f, +8.508092032e-06f, +0.000000000e+00f, /* 11, 6 (32) */ +0.000000000e+00f, -4.499712153e-05f, +1.749161279e-03f, -2.382209019e-03f, -1.801027891e-03f, +8.166284447e-03f, -5.848302367e-03f, -1.015762513e-02f, +2.324593974e-02f, -6.945075168e-03f, -3.592135768e-02f, +5.426979896e-02f, +7.104591091e-03f, -1.296199964e-01f, +1.838066565e-01f, +6.204619405e-01f, +3.883198572e-01f, -7.761676906e-02f, -6.406383185e-02f, +6.850505494e-02f, -9.160713861e-03f, -3.017258482e-02f, +2.303368059e-02f, +2.161592427e-03f, -1.307916009e-02f, +6.399274535e-03f, +2.497199346e-03f, -3.999243334e-03f, +1.013532239e-03f, +7.987058865e-04f, -5.096360667e-04f, +0.000000000e+00f, +0.000000000e+00f, -5.536343650e-05f, +5.284803911e-06f, +1.840470753e-04f, -2.818077408e-04f, -7.580396313e-05f, +7.245342347e-04f, -7.201819531e-04f, -5.859576958e-04f, +2.052233720e-03f, -1.225972263e-03f, -2.526586220e-03f, +5.355864460e-03f, -5.867703010e-04f, -1.669725689e-02f, -5.357031680e-03f, +1.626728294e-02f, +8.236754752e-03f, -5.848087598e-03f, -4.467660161e-04f, +3.051675980e-03f, -1.560566567e-03f, -6.789884160e-04f, +1.231283832e-03f, -3.874766561e-04f, -3.778511793e-04f, +3.957698464e-04f, -5.851081077e-05f, -1.185368192e-04f, +7.695366797e-05f, -6.229758273e-06f, +0.000000000e+00f, +0.000000000e+00f, +4.499712153e-05f, -1.952023486e-03f, +4.398351440e-03f, -1.465778295e-03f, -8.178917040e-03f, +1.422478179e-02f, -3.625738261e-03f, -1.914866505e-02f, +2.860341107e-02f, -5.867642902e-03f, -3.169708765e-02f, +4.205239592e-02f, -7.014183843e-03f, -4.004140599e-02f, +4.779601970e-02f, -6.426664530e-03f, -3.963475612e-02f, +4.266254675e-02f, -4.509787320e-03f, -3.065829754e-02f, +2.954485715e-02f, -2.346767732e-03f, -1.790866331e-02f, +1.512066474e-02f, -8.449199480e-04f, -7.164608742e-03f, +4.992309768e-03f, -2.004488672e-04f, -1.373664645e-03f, +5.096360667e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.536343650e-05f, -6.684145543e-05f, -1.739265019e-04f, +4.886888339e-04f, -3.544755813e-04f, -4.815149239e-04f, +1.298335032e-03f, -8.784090850e-04f, -9.023851319e-04f, +2.333290406e-03f, -1.489060860e-03f, -1.270344836e-03f, +3.153243872e-03f, -1.908074638e-03f, -1.395961915e-03f, +3.328842288e-03f, -1.913289705e-03f, -1.205054076e-03f, +2.761391756e-03f, -1.505872406e-03f, -7.991108973e-04f, +1.760428988e-03f, -9.068248614e-04f, -3.790333387e-04f, +8.058454924e-04f, -3.881112511e-04f, -1.017047819e-04f, +2.155348307e-04f, -9.437717204e-05f, +6.229758273e-06f, +0.000000000e+00f, /* 11, 7 (32) */ +0.000000000e+00f, -1.003605580e-04f, +1.754446083e-03f, -2.198161944e-03f, -2.082835632e-03f, +8.090480484e-03f, -5.123768133e-03f, -1.087780708e-02f, +2.265998204e-02f, -4.892841448e-03f, -3.714732995e-02f, +5.174321274e-02f, +1.246045555e-02f, -1.302067667e-01f, +1.671093996e-01f, +6.151049088e-01f, +4.045871401e-01f, -6.938001431e-02f, -6.991191945e-02f, +6.805828893e-02f, -6.109037881e-03f, -3.173315139e-02f, +2.235469217e-02f, +3.392876260e-03f, -1.346663674e-02f, +6.021423355e-03f, +2.892969192e-03f, -4.057754145e-03f, +8.949954200e-04f, +8.756595545e-04f, -5.158658249e-04f, +0.000000000e+00f, +0.000000000e+00f, -5.215113274e-05f, -2.492983095e-06f, +1.873179974e-04f, -2.654533980e-04f, -1.065926770e-04f, +7.286451315e-04f, -6.616957344e-04f, -6.640900180e-04f, +2.031590404e-03f, -1.055513877e-03f, -2.677308242e-03f, +5.179525972e-03f, -6.088818554e-05f, -1.647919551e-02f, -6.146083796e-03f, +1.597363417e-02f, +8.832704308e-03f, -5.724321760e-03f, -7.298188369e-04f, +3.138511745e-03f, -1.463812955e-03f, -7.829078243e-04f, +1.243325345e-03f, -3.411517215e-04f, -4.118760385e-04f, +3.944292323e-04f, -4.305473184e-05f, -1.267934984e-04f, +7.637387715e-05f, -3.786403335e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.003605580e-04f, -2.018864941e-03f, +4.224424938e-03f, -9.770894616e-04f, -8.533392621e-03f, +1.374326687e-02f, -2.327403229e-03f, -2.002707413e-02f, +2.770102594e-02f, -3.534352496e-03f, -3.318614851e-02f, +4.078205108e-02f, -3.860939971e-03f, -4.194948063e-02f, +4.640005779e-02f, -3.097822242e-03f, -4.154804582e-02f, +4.145749267e-02f, -1.748395563e-03f, -3.216416994e-02f, +2.874574625e-02f, -5.863387437e-04f, -1.881548818e-02f, +1.474163140e-02f, -3.907445562e-05f, -7.552719993e-03f, +4.890604986e-03f, +1.508596358e-05f, -1.468041817e-03f, +5.158658249e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.215113274e-05f, -5.442997476e-05f, -1.877371019e-04f, +4.802657043e-04f, -3.091821714e-04f, -5.323830676e-04f, +1.287876920e-03f, -7.803870073e-04f, -1.011334890e-03f, +2.327155243e-03f, -1.336183052e-03f, -1.437939937e-03f, +3.158055539e-03f, -1.724722939e-03f, -1.594091349e-03f, +3.346441362e-03f, -1.740719604e-03f, -1.388916364e-03f, +2.786820098e-03f, -1.379479749e-03f, -9.320345641e-04f, +1.785017248e-03f, -8.378908291e-04f, -4.508455358e-04f, +8.228292131e-04f, -3.634660170e-04f, -1.274997434e-04f, +2.235041847e-04f, -9.121070548e-05f, +3.786403335e-06f, +0.000000000e+00f, /* 11, 8 (32) */ +0.000000000e+00f, -1.525116908e-04f, +1.751953100e-03f, -2.010843946e-03f, -2.348289030e-03f, +7.983887807e-03f, -4.395123001e-03f, -1.153950282e-02f, +2.199589203e-02f, -2.861251044e-03f, -3.820284382e-02f, +4.906590450e-02f, +1.763998152e-02f, -1.302676549e-01f, +1.506302041e-01f, +6.089588250e-01f, +4.205607743e-01f, -6.054731000e-02f, -7.563624121e-02f, +6.732847009e-02f, -2.970526136e-03f, -3.319696434e-02f, +2.157178435e-02f, +4.636201605e-03f, -1.380778847e-02f, +5.609547317e-03f, +3.287398424e-03f, -4.100808877e-03f, +7.682019216e-04f, +9.520334316e-04f, -5.196522283e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.882517833e-05f, -9.972998001e-06f, +1.896806238e-04f, -2.484354947e-04f, -1.361874172e-04f, +7.297052001e-04f, -6.017714024e-04f, -7.380204988e-04f, +2.003308442e-03f, -8.842517829e-04f, -2.814542149e-03f, +4.987790445e-03f, +4.490746814e-04f, -1.622857046e-02f, -6.920291785e-03f, +1.564347125e-02f, +9.421272433e-03f, -5.575448640e-03f, -1.016325899e-03f, +3.214626626e-03f, -1.359265091e-03f, -8.857288567e-04f, +1.250533532e-03f, -2.923921239e-04f, -4.449958816e-04f, +3.913735697e-04f, -2.694470422e-05f, -1.347627424e-04f, +7.539367768e-05f, -1.184686737e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.525116908e-04f, -2.073294916e-03f, +4.036687836e-03f, -4.968237572e-04f, -8.842574792e-03f, +1.321088380e-02f, -1.039526309e-03f, -2.080746114e-02f, +2.668969105e-02f, -1.207197253e-03f, -3.452233157e-02f, +3.934411115e-02f, -7.028844317e-04f, -4.367420357e-02f, +4.480596644e-02f, +2.486191205e-04f, -4.328876543e-02f, +4.006857631e-02f, +1.038424535e-03f, -3.354364969e-02f, +2.781371169e-02f, +1.198678504e-03f, -1.965337901e-02f, +1.429078587e-02f, +7.837547575e-04f, -7.916186010e-03f, +4.763105243e-03f, +2.385901483e-04f, -1.559252523e-03f, +5.196522283e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.882517833e-05f, -4.221200833e-05f, -2.002309966e-04f, +4.698504283e-04f, -2.634754778e-04f, -5.799482627e-04f, +1.271906527e-03f, -6.802447451e-04f, -1.114667396e-03f, +2.310956446e-03f, -1.178608129e-03f, -1.598394050e-03f, +3.149171460e-03f, -1.534275501e-03f, -1.785237499e-03f, +3.349549514e-03f, -1.560083072e-03f, -1.567585990e-03f, +2.800248911e-03f, -1.246002744e-03f, -1.062216482e-03f, +1.802011045e-03f, -7.642079094e-04f, -5.218742281e-04f, +8.364036307e-04f, -3.365319592e-04f, -1.534281255e-04f, +2.306229360e-04f, -8.738863370e-05f, +1.184686737e-06f, +0.000000000e+00f, /* 11, 9 (32) */ +0.000000000e+00f, -2.013368691e-04f, +1.741980102e-03f, -1.821163323e-03f, -2.596724524e-03f, +7.847700390e-03f, -3.665417801e-03f, -1.214127422e-02f, +2.125787153e-02f, -8.579426022e-04f, -3.908709561e-02f, +4.625136235e-02f, +2.262777197e-02f, -1.298185802e-01f, +1.344016336e-01f, +6.020385332e-01f, +4.362042455e-01f, -5.112603756e-02f, -8.121168985e-02f, +6.631214419e-02f, +2.441004899e-04f, -3.455622943e-02f, +2.068605549e-02f, +5.886735136e-03f, -1.410018059e-02f, +5.164551435e-03f, +3.678771994e-03f, -4.127753581e-03f, +6.334391792e-04f, +1.027427109e-03f, -5.208369150e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.540741818e-05f, -1.713070666e-05f, +1.911519052e-04f, -2.308444587e-04f, -1.644932940e-04f, +7.277775432e-04f, -5.406817511e-04f, -8.075352641e-04f, +1.967645963e-03f, -7.128689572e-04f, -2.938038908e-03f, +4.781701836e-03f, +9.419548641e-04f, -1.594640601e-02f, -7.677809727e-03f, +1.527735383e-02f, +1.000072017e-02f, -5.401358006e-03f, -1.305269933e-03f, +3.279506782e-03f, -1.247190160e-03f, -9.870120801e-04f, +1.252779690e-03f, -2.413482406e-04f, -4.770489483e-04f, +3.865715585e-04f, -1.023357321e-05f, -1.423977072e-04f, +7.400231112e-05f, +1.567542367e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.013368691e-04f, -2.115506924e-03f, +3.836456839e-03f, -2.697332892e-05f, -9.106050270e-03f, +1.263093554e-02f, +2.323802171e-04f, -2.148770588e-02f, +2.557502365e-02f, +1.103759193e-03f, -3.570093969e-02f, +3.774571710e-02f, +2.446287029e-03f, -4.520847907e-02f, +4.302072894e-02f, +3.598168635e-03f, -4.484884850e-02f, +3.850099032e-02f, +3.838673446e-03f, -3.478965244e-02f, +2.675149521e-02f, +3.000689549e-03f, -2.041758691e-02f, +1.376891164e-02f, +1.620158388e-03f, -8.252717969e-03f, +4.609677117e-03f, +4.692130843e-04f, -1.646641156e-03f, +5.208369150e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.540741818e-05f, -3.024489743e-05f, -2.113854967e-04f, +4.575415349e-04f, -2.175747863e-04f, -6.240545397e-04f, +1.250580530e-03f, -5.784557033e-04f, -1.211986895e-03f, +2.284855957e-03f, -1.017062415e-03f, -1.751041576e-03f, +3.126681251e-03f, -1.337581486e-03f, -1.968565202e-03f, +3.338135339e-03f, -1.372150902e-03f, -1.740252096e-03f, +2.801543206e-03f, -1.105976113e-03f, -1.189048365e-03f, +1.811241825e-03f, -6.860413896e-04f, -5.917805257e-04f, +8.464375711e-04f, -3.073838501e-04f, -1.793657373e-04f, +2.368258200e-04f, -8.290674739e-05f, -1.567542367e-06f, +0.000000000e+00f, /* 11,10 (32) */ +0.000000000e+00f, -2.467442873e-04f, +1.724849395e-03f, -1.630011418e-03f, -2.827568983e-03f, +7.683207096e-03f, -2.937640258e-03f, -1.268195597e-02f, +2.045033626e-02f, +1.109703361e-03f, -3.979996456e-02f, +4.331332344e-02f, +2.740947380e-02f, -1.288766254e-01f, +1.184552276e-01f, +5.943607235e-01f, +4.514815994e-01f, -4.112531739e-02f, -8.661304785e-02f, +6.500687426e-02f, +3.523607271e-03f, -3.580341959e-02f, +1.969904341e-02f, +7.139514826e-03f, -1.434152883e-02f, +4.687502487e-03f, +4.065343553e-03f, -4.137987154e-03f, +4.910414720e-04f, +1.101429420e-03f, -5.192693727e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.191937002e-05f, -2.394391249e-05f, +1.917523215e-04f, -2.127708687e-04f, -1.914231114e-04f, +7.229363140e-04f, -4.786988118e-04f, -8.724423452e-04f, +1.924885491e-03f, -5.420360887e-04f, -3.047605643e-03f, +4.562332588e-03f, +1.416658454e-03f, -1.563380617e-02f, -8.416840753e-03f, +1.487594407e-02f, +1.056931432e-02f, -5.202019568e-03f, -1.595604045e-03f, +3.332672114e-03f, -1.127890466e-03f, -1.086315845e-03f, +1.249953064e-03f, -1.881832653e-04f, -5.078743329e-04f, +3.799987812e-04f, +7.021610511e-06f, -1.496516639e-04f, +7.219074135e-05f, +4.461247698e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.467442873e-04f, -2.145751822e-03f, +3.625071342e-03f, +4.305682060e-04f, -9.323625057e-03f, +1.200688100e-02f, +1.482960747e-03f, -2.206616159e-02f, +2.436303675e-02f, +3.388615151e-03f, -3.671800211e-02f, +3.599467552e-02f, +5.572968280e-03f, -4.654606055e-02f, +4.105216374e-02f, +6.936303974e-03f, -4.622099940e-02f, +3.676073822e-02f, +6.640216652e-03f, -3.589562855e-02f, +2.556244684e-02f, +4.811931374e-03f, -2.110362830e-02f, +1.317713111e-02f, +2.466595959e-03f, -8.560101819e-03f, +4.430311380e-03f, +7.060389043e-04f, -1.729547904e-03f, +5.192693727e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.191937002e-05f, -1.858278450e-05f, -2.211852757e-04f, +4.434443410e-04f, -1.716957904e-04f, -6.645646552e-04f, +1.224077651e-03f, -4.754946277e-04f, -1.302928899e-03f, +2.249058511e-03f, -8.522847680e-04f, -1.895255156e-03f, +3.090734556e-03f, -1.135516017e-03f, -2.143274330e-03f, +3.312231865e-03f, -1.177728500e-03f, -1.906126961e-03f, +2.790621447e-03f, -9.599682835e-04f, -1.311931067e-03f, +1.812574388e-03f, -6.036809243e-04f, -6.602251554e-04f, +8.528141140e-04f, -2.761089073e-04f, -2.051850750e-04f, +2.420504378e-04f, -7.776451838e-05f, -4.461247698e-06f, +0.000000000e+00f, /* 11,11 (32) */ +0.000000000e+00f, -2.886636573e-04f, +1.700905483e-03f, -1.438259096e-03f, -3.040339852e-03f, +7.491783984e-03f, -2.214703944e-03f, -1.316065478e-02f, +1.957789392e-02f, +3.034588851e-03f, -4.034200065e-02f, +4.026571780e-02f, +3.197180639e-02f, -1.274599669e-01f, +1.028214215e-01f, +5.859438828e-01f, +4.663575434e-01f, -3.055600307e-02f, -9.181506742e-02f, +6.341127021e-02f, +6.856279386e-03f, -3.693131006e-02f, +1.861272757e-02f, +8.389467890e-03f, -1.452971210e-02f, +4.179628154e-03f, +4.445342334e-03f, -4.130965543e-03f, +3.413898082e-04f, +1.173620162e-03f, -5.148081250e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.838212256e-05f, -3.039279260e-05f, +1.915056908e-04f, -1.943050510e-04f, -2.168975658e-04f, +7.152661720e-04f, -4.160927482e-04f, -9.325720438e-04f, +1.875332384e-03f, -3.724092127e-04f, -3.143105347e-03f, +4.330779522e-03f, +1.872163695e-03f, -1.529195075e-02f, -9.135642269e-03f, +1.444000501e-02f, +1.112533286e-02f, -4.977484209e-03f, -1.886254962e-03f, +3.373678725e-03f, -1.001702874e-03f, -1.183198043e-03f, +1.241961659e-03f, -1.330727827e-04f, -5.373127009e-04f, +3.716379788e-04f, +2.475974066e-05f, -1.564782272e-04f, +6.995175781e-05f, +7.486215084e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.886636573e-04f, -2.164334606e-03f, +3.403886067e-03f, +8.740125470e-04f, -9.495320847e-03f, +1.134231634e-02f, +2.707038398e-03f, -2.254165622e-02f, +2.306010786e-02f, +5.637673661e-03f, -3.757028688e-02f, +3.409942037e-02f, +8.663702835e-03f, -4.768157657e-02f, +3.890888941e-02f, +1.024853584e-02f, -4.739872790e-02f, +3.485461126e-02f, +9.430838100e-03f, -3.685559683e-02f, +2.425051577e-02f, +6.624505763e-03f, -2.170730923e-02f, +1.251690596e-02f, +3.319410073e-03f, -8.836210727e-03f, +4.225126305e-03f, +9.480893421e-04f, -1.807312422e-03f, +5.148081250e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.838212256e-05f, -7.276413694e-06f, -2.296222555e-04f, +4.276702774e-04f, -1.260496305e-04f, -7.013604142e-04f, +1.192597501e-03f, -3.718354120e-04f, -1.387161515e-03f, +2.203810330e-03f, -6.850231627e-04f, -2.030448288e-03f, +3.041540159e-03f, -9.289761989e-04f, -2.308603358e-03f, +3.271936477e-03f, -9.776523587e-04f, -2.064449652e-03f, +2.767456242e-03f, -8.085790630e-04f, -1.430277407e-03f, +1.805907898e-03f, -5.174395197e-04f, -7.268700597e-04f, +8.554314227e-04f, -2.428066312e-04f, -2.307558929e-04f, +2.462376742e-04f, -7.196522133e-05f, -7.486215084e-06f, +0.000000000e+00f, /* 11,12 (32) */ +0.000000000e+00f, -3.270457799e-04f, +1.670512690e-03f, -1.246753405e-03f, -3.234644903e-03f, +7.274886419e-03f, -1.499437772e-03f, -1.357674753e-02f, +1.864532187e-02f, +4.909921236e-03f, -4.071440986e-02f, +3.712261245e-02f, +3.630258591e-02f, -1.255878032e-01f, +8.752947072e-02f, +5.768082405e-01f, +4.807975485e-01f, -1.943067021e-02f, -9.679255163e-02f, +6.152501525e-02f, +1.022995811e-02f, -3.793301293e-02f, +1.742952952e-02f, +9.631429549e-03f, -1.466278488e-02f, +3.642315453e-03f, +4.816980313e-03f, -4.106205803e-03f, +1.849115809e-04f, +1.243571920e-03f, -5.073219099e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.481623894e-05f, -3.645992124e-05f, +1.904389678e-04f, -1.755366871e-04f, -2.408454052e-04f, +7.048617042e-04f, -3.531307794e-04f, -9.877771993e-04f, +1.819313209e-03f, -2.046274417e-04f, -3.224456389e-03f, +4.088159706e-03f, +2.307523354e-03f, -1.492209129e-02f, -9.832531001e-03f, +1.397039874e-02f, +1.166707039e-02f, -4.727884956e-03f, -2.176126409e-03f, +3.402121271e-03f, -8.689981039e-04f, -1.277217900e-03f, +1.228732987e-03f, -7.620428164e-05f, -5.652070128e-04f, +3.614793007e-04f, +4.291582785e-05f, -1.628315887e-04f, +6.728007231e-05f, +1.063106857e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.270457799e-04f, -2.171611020e-03f, +3.174263811e-03f, +1.301682824e-03f, -9.621370478e-03f, +1.064095593e-02f, +3.899635899e-03f, -2.291349163e-02f, +2.167294634e-02f, +7.841483992e-03f, -3.825531004e-02f, +3.206897208e-02f, +1.170524299e-02f, -4.861055277e-02f, +3.660028605e-02f, +1.352047232e-02f, -4.837638026e-02f, +3.279016161e-02f, +1.219829434e-02f, -3.766417590e-02f, +2.282023837e-02f, +8.430413660e-03f, -2.222474875e-02f, +1.179003590e-02f, +4.174841496e-03f, -9.079017358e-03f, +3.994370412e-03f, +1.194327016e-03f, -1.879277644e-03f, +5.073219099e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.481623894e-05f, +3.627044358e-06f, -2.366954563e-04f, +4.103362001e-04f, -8.084197358e-05f, -7.343428956e-04f, +1.156359346e-03f, -2.679489359e-04f, -1.464386609e-03f, +2.149397652e-03f, -5.160312554e-04f, -2.156077746e-03f, +2.979364830e-03f, -7.188770533e-04f, -2.463832767e-03f, +3.217410555e-03f, -7.727863800e-04f, -2.214489575e-03f, +2.732074795e-03f, -6.524371545e-04f, -1.543514979e-03f, +1.791176744e-03f, -4.276523932e-04f, -7.913800148e-04f, +8.542035150e-04f, -2.075885776e-04f, -2.559458012e-04f, +2.493321100e-04f, -6.551603683e-05f, -1.063106857e-05f, +0.000000000e+00f, /* 11,13 (32) */ +0.000000000e+00f, -3.618620188e-04f, +1.634052769e-03f, -1.056314437e-03f, -3.410181590e-03f, +7.034041013e-03f, -7.945760677e-04f, -1.392987831e-02f, +1.765754468e-02f, +6.729234444e-03f, -4.091903731e-02f, +3.389815606e-02f, +4.039074562e-02f, -1.232802799e-01f, +7.260737943e-02f, +5.669757095e-01f, +4.947679472e-01f, -7.763599815e-03f, -1.015204366e-01f, +5.934888884e-02f, +1.363207938e-02f, -3.880201104e-02f, +1.615231162e-02f, +1.086016254e-02f, -1.473898916e-02f, +3.077108440e-03f, +5.178459613e-03f, -4.063289975e-03f, +2.207999221e-05f, +1.310851992e-03f, -4.966908413e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.124166587e-05f, -4.213028094e-05f, +1.885820335e-04f, -1.565544333e-04f, -2.632035506e-04f, +6.918268172e-04f, -2.900761367e-04f, -1.037933360e-03f, +1.757174058e-03f, -3.931079982e-05f, -3.291631831e-03f, +3.835606308e-03f, +2.721866806e-03f, -1.452554670e-02f, -1.050588786e-02f, +1.346808420e-02f, +1.219284358e-02f, -4.453437683e-03f, -2.464102623e-03f, +3.417635218e-03f, -7.301798757e-04f, -1.367937793e-03f, +1.210214751e-03f, -1.777660704e-05f, -5.914032546e-04f, +3.495205277e-04f, +6.142119444e-05f, -1.686667536e-04f, +6.417240898e-05f, +1.388329353e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.618620188e-04f, -2.167983976e-03f, +2.937568355e-03f, +1.712019025e-03f, -9.702212451e-03f, +9.906613032e-03f, +5.055995245e-03f, -2.318144056e-02f, +2.020855973e-02f, +9.990881644e-03f, -3.877134130e-02f, +2.991289433e-02f, +1.468460782e-02f, -4.932942982e-02f, +3.413645328e-02f, +1.673788287e-02f, -4.914916664e-02f, +3.057567203e-02f, +1.493036914e-02f, -3.831661305e-02f, +2.127672339e-02f, +1.022159040e-02f, -2.265240114e-02f, +1.099865588e-02f, +5.029045011e-03f, -9.286605935e-03f, +3.738424611e-03f, +1.443659126e-03f, -1.944793680e-03f, +4.966908413e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.124166587e-05f, +1.408414334e-05f, -2.424108144e-04f, +3.915636883e-04f, -3.627213688e-05f, -7.634325823e-04f, +1.115600795e-03f, -1.643009442e-04f, -1.534340794e-03f, +2.086145071e-03f, -3.460649457e-04f, -2.271645788e-03f, +2.904531903e-03f, -5.061473728e-04f, -2.608288242e-03f, +3.148878810e-03f, -5.640180608e-04f, -2.355549894e-03f, +2.684559105e-03f, -4.921975209e-04f, -1.651088905e-03f, +1.768351253e-03f, -3.346757134e-04f, -8.534242601e-04f, +8.490609702e-04f, -1.705780658e-04f, -2.806208902e-04f, +2.512824241e-04f, -5.842813484e-05f, -1.388329353e-05f, +0.000000000e+00f, /* 11,14 (32) */ +0.000000000e+00f, -3.931036847e-04f, +1.591922488e-03f, -8.677324040e-04f, -3.566736023e-03f, +6.770837463e-03f, -1.027492505e-04f, -1.421995445e-02f, +1.661961131e-02f, +8.486408502e-03f, -4.095834811e-02f, +3.060652423e-02f, +4.422635193e-02f, -1.205584131e-01f, +5.808183272e-02f, +5.564698216e-01f, +5.082360314e-01f, +4.429243765e-03f, -1.059738743e-01f, +5.688478622e-02f, +1.704971460e-02f, -3.953219091e-02f, +1.478437383e-02f, +1.207037729e-02f, -1.475676577e-02f, +2.485705186e-03f, +5.527980141e-03f, -4.001868780e-03f, -1.465867614e-04f, +1.375024401e-03f, -4.828075478e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.767764884e-05f, -4.739126146e-05f, +1.859674759e-04f, -1.374455549e-04f, -2.839171791e-04f, +6.762741015e-04f, -2.271870567e-04f, -1.082938859e-03f, +1.689278822e-03f, +1.229418331e-04f, -3.344658553e-03f, +3.574264444e-03f, +3.114401859e-03f, -1.410369877e-02f, -1.115416257e-02f, +1.293411465e-02f, +1.270099653e-02f, -4.154441542e-03f, -2.749051993e-03f, +3.419898977e-03f, -5.856839105e-04f, -1.454925088e-03f, +1.186375451e-03f, +4.200064683e-05f, -6.157511698e-04f, +3.357672655e-04f, +8.020369137e-05f, -1.739397803e-04f, +6.062758652e-05f, +1.722926679e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.931036847e-04f, -2.153899832e-03f, +2.695157541e-03f, +2.103582713e-03f, -9.738484588e-03f, +9.143180449e-03f, +6.171596040e-03f, -2.334574151e-02f, +1.867421894e-02f, +1.207702671e-02f, -3.911740624e-02f, +2.764124854e-02f, +1.758913973e-02f, -4.983557720e-02f, +3.152816504e-02f, +1.988676168e-02f, -4.971318470e-02f, +2.822012214e-02f, +1.761492824e-02f, -3.880881057e-02f, +1.962563448e-02f, +1.198994166e-02f, -2.298707685e-02f, +1.014523162e-02f, +5.878105981e-03f, -9.457184001e-03f, +3.457803721e-03f, +1.694941550e-03f, -2.003221815e-03f, +4.828075478e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.767764884e-05f, +2.405528726e-05f, -2.467809675e-04f, +3.714783352e-04f, +7.467739994e-06f, -7.885693971e-04f, +1.070576424e-03f, -6.134997616e-05f, -1.596796259e-03f, +2.014413729e-03f, -1.758789525e-04f, -2.376702145e-03f, +2.817419619e-03f, -2.917255273e-04f, -2.741343672e-03f, +3.066628344e-03f, -3.522545645e-04f, -2.486970825e-03f, +2.625045922e-03f, -3.285386074e-04f, -1.752464547e-03f, +1.737438236e-03f, -2.388852243e-04f, -9.126781313e-04f, +8.399515688e-04f, -1.319098211e-04f, -3.046463754e-04f, +2.520417849e-04f, -5.071673752e-05f, -1.722926679e-05f, +0.000000000e+00f, /* 11,15 (32) */ +0.000000000e+00f, -4.207813335e-04f, +1.544531227e-03f, -6.817649281e-04f, -3.704181578e-03f, +6.486920284e-03f, +5.735248510e-04f, -1.444714150e-02f, +1.553667246e-02f, +1.017568732e-02f, -4.083540627e-02f, +2.726186568e-02f, +4.780061637e-02f, -1.174440112e-01f, +4.397813395e-02f, +5.453156591e-01f, +5.211701461e-01f, +1.713024030e-02f, -1.101283158e-01f, +5.413573422e-02f, +2.046961358e-02f, -4.011787482e-02f, +1.332944874e-02f, +1.325675274e-02f, -1.471476512e-02f, +1.869954016e-03f, +5.863747407e-03f, -3.921665089e-03f, -3.205265417e-04f, +1.435651987e-03f, -4.655782810e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.414265355e-05f, -5.223264705e-05f, +1.826303650e-04f, -1.182955744e-04f, -3.029397690e-04f, +6.583241727e-04f, -1.647158146e-04f, -1.122714796e-03f, +1.616007420e-03f, +2.815546607e-04f, -3.383616192e-03f, +3.305287055e-03f, +3.484416293e-03f, -1.365798748e-02f, -1.177587811e-02f, +1.236963488e-02f, +1.318990617e-02f, -3.831279116e-03f, -3.029830798e-03f, +3.408635909e-03f, -4.359767877e-04f, -1.537753995e-03f, +1.157204923e-03f, +1.029078014e-04f, -6.381049921e-04f, +3.202331082e-04f, +9.918793658e-05f, -1.786080213e-04f, +5.664659220e-05f, +2.065429392e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.207813335e-04f, -2.129844545e-03f, +2.448376573e-03f, +2.475061048e-03f, -9.731016848e-03f, +8.354611052e-03f, +7.242172463e-03f, -2.340709148e-02f, +1.707742268e-02f, +1.409144044e-02f, -3.929328519e-02f, +2.526454640e-02f, +2.040655935e-02f, -5.012730272e-02f, +2.878682137e-02f, +2.295339003e-02f, -5.006543927e-02f, +2.573315131e-02f, +2.023997416e-02f, -3.913734918e-02f, +1.787316994e-02f, +1.372737989e-02f, -2.322596208e-02f, +9.232553493e-03f, +6.718057550e-03f, -9.589093822e-03f, +3.153157345e-03f, +1.946983335e-03f, -2.053938553e-03f, +4.655782810e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.414265355e-05f, +3.350483173e-05f, -2.498250112e-04f, +3.502090341e-04f, +5.019347232e-05f, -8.097126439e-04f, +1.021556339e-03f, +4.045464573e-05f, -1.651561414e-03f, +1.934599351e-03f, -6.223419220e-06f, -2.470845787e-03f, +2.718459209e-03f, -7.655523313e-05f, -2.862423931e-03f, +2.971007414e-03f, -1.384186910e-04f, -2.608132755e-03f, +2.553726448e-03f, -1.621594355e-04f, -1.847130142e-03f, +1.698481370e-03f, -1.406747584e-04f, -9.688246898e-04f, +8.268408584e-04f, -9.172955338e-05f, -3.278872634e-04f, +2.515682268e-04f, -4.240116050e-05f, -2.065429392e-05f, +0.000000000e+00f, /* 11,16 (32) */ +0.000000000e+00f, -4.449239871e-04f, +1.492298580e-03f, -4.991345630e-04f, -3.822477153e-03f, +6.183980515e-03f, +1.231849024e-03f, -1.461185732e-02f, +1.441395766e-02f, +1.179169475e-02f, -4.055385161e-02f, +2.387824949e-02f, +5.110590343e-02f, -1.139595949e-01f, +3.032014646e-02f, +5.335397809e-01f, +5.335397809e-01f, +3.032014646e-02f, -1.139595949e-01f, +5.110590343e-02f, +2.387824949e-02f, -4.055385161e-02f, +1.179169475e-02f, +1.441395766e-02f, -1.461185732e-02f, +1.231849024e-03f, +6.183980515e-03f, -3.822477153e-03f, -4.991345630e-04f, +1.492298580e-03f, -4.449239871e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.065429392e-05f, -5.664659220e-05f, +1.786080213e-04f, -9.918793658e-05f, -3.202331082e-04f, +6.381049921e-04f, -1.029078014e-04f, -1.157204923e-03f, +1.537753995e-03f, +4.359767877e-04f, -3.408635909e-03f, +3.029830798e-03f, +3.831279116e-03f, -1.318990617e-02f, -1.236963488e-02f, +1.177587811e-02f, +1.365798748e-02f, -3.484416293e-03f, -3.305287055e-03f, +3.383616192e-03f, -2.815546607e-04f, -1.616007420e-03f, +1.122714796e-03f, +1.647158146e-04f, -6.583241727e-04f, +3.029397690e-04f, +1.182955744e-04f, -1.826303650e-04f, +5.223264705e-05f, +2.414265355e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.449239871e-04f, -2.096339713e-03f, +2.198551562e-03f, +2.825270082e-03f, -9.680823376e-03f, +7.544898408e-03f, +8.263728803e-03f, -2.336663684e-02f, +1.542586126e-02f, +1.602603979e-02f, -3.929950861e-02f, +2.279370061e-02f, +2.312501856e-02f, -5.020385796e-02f, +2.592439744e-02f, +2.592439744e-02f, -5.020385796e-02f, +2.312501856e-02f, +2.279370061e-02f, -3.929950861e-02f, +1.602603979e-02f, +1.542586126e-02f, -2.336663684e-02f, +8.263728803e-03f, +7.544898408e-03f, -9.680823376e-03f, +2.825270082e-03f, +2.198551562e-03f, -2.096339713e-03f, +4.449239871e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.065429392e-05f, +4.240116050e-05f, -2.515682268e-04f, +3.278872634e-04f, +9.172955338e-05f, -8.268408584e-04f, +9.688246898e-04f, +1.406747584e-04f, -1.698481370e-03f, +1.847130142e-03f, +1.621594355e-04f, -2.553726448e-03f, +2.608132755e-03f, +1.384186910e-04f, -2.971007414e-03f, +2.862423931e-03f, +7.655523313e-05f, -2.718459209e-03f, +2.470845787e-03f, +6.223419220e-06f, -1.934599351e-03f, +1.651561414e-03f, -4.045464573e-05f, -1.021556339e-03f, +8.097126439e-04f, -5.019347232e-05f, -3.502090341e-04f, +2.498250112e-04f, -3.350483173e-05f, -2.414265355e-05f, +0.000000000e+00f, /* 11,17 (32) */ +0.000000000e+00f, -4.655782810e-04f, +1.435651987e-03f, -3.205265417e-04f, -3.921665089e-03f, +5.863747407e-03f, +1.869954016e-03f, -1.471476512e-02f, +1.325675274e-02f, +1.332944874e-02f, -4.011787482e-02f, +2.046961358e-02f, +5.413573422e-02f, -1.101283158e-01f, +1.713024030e-02f, +5.211701461e-01f, +5.453156591e-01f, +4.397813395e-02f, -1.174440112e-01f, +4.780061637e-02f, +2.726186568e-02f, -4.083540627e-02f, +1.017568732e-02f, +1.553667246e-02f, -1.444714150e-02f, +5.735248510e-04f, +6.486920284e-03f, -3.704181578e-03f, -6.817649281e-04f, +1.544531227e-03f, -4.207813335e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.722926679e-05f, -6.062758652e-05f, +1.739397803e-04f, -8.020369137e-05f, -3.357672655e-04f, +6.157511698e-04f, -4.200064683e-05f, -1.186375451e-03f, +1.454925088e-03f, +5.856839105e-04f, -3.419898977e-03f, +2.749051993e-03f, +4.154441542e-03f, -1.270099653e-02f, -1.293411465e-02f, +1.115416257e-02f, +1.410369877e-02f, -3.114401859e-03f, -3.574264444e-03f, +3.344658553e-03f, -1.229418331e-04f, -1.689278822e-03f, +1.082938859e-03f, +2.271870567e-04f, -6.762741015e-04f, +2.839171791e-04f, +1.374455549e-04f, -1.859674759e-04f, +4.739126146e-05f, +2.767764884e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.655782810e-04f, -2.053938553e-03f, +1.946983335e-03f, +3.153157345e-03f, -9.589093822e-03f, +6.718057550e-03f, +9.232553493e-03f, -2.322596208e-02f, +1.372737989e-02f, +1.787316994e-02f, -3.913734918e-02f, +2.023997416e-02f, +2.573315131e-02f, -5.006543927e-02f, +2.295339003e-02f, +2.878682137e-02f, -5.012730272e-02f, +2.040655935e-02f, +2.526454640e-02f, -3.929328519e-02f, +1.409144044e-02f, +1.707742268e-02f, -2.340709148e-02f, +7.242172463e-03f, +8.354611052e-03f, -9.731016848e-03f, +2.475061048e-03f, +2.448376573e-03f, -2.129844545e-03f, +4.207813335e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.722926679e-05f, +5.071673752e-05f, -2.520417849e-04f, +3.046463754e-04f, +1.319098211e-04f, -8.399515688e-04f, +9.126781313e-04f, +2.388852243e-04f, -1.737438236e-03f, +1.752464547e-03f, +3.285386074e-04f, -2.625045922e-03f, +2.486970825e-03f, +3.522545645e-04f, -3.066628344e-03f, +2.741343672e-03f, +2.917255273e-04f, -2.817419619e-03f, +2.376702145e-03f, +1.758789525e-04f, -2.014413729e-03f, +1.596796259e-03f, +6.134997616e-05f, -1.070576424e-03f, +7.885693971e-04f, -7.467739994e-06f, -3.714783352e-04f, +2.467809675e-04f, -2.405528726e-05f, -2.767764884e-05f, +0.000000000e+00f, /* 11,18 (32) */ +0.000000000e+00f, -4.828075478e-04f, +1.375024401e-03f, -1.465867614e-04f, -4.001868780e-03f, +5.527980141e-03f, +2.485705186e-03f, -1.475676577e-02f, +1.207037729e-02f, +1.478437383e-02f, -3.953219091e-02f, +1.704971460e-02f, +5.688478622e-02f, -1.059738743e-01f, +4.429243765e-03f, +5.082360314e-01f, +5.564698216e-01f, +5.808183272e-02f, -1.205584131e-01f, +4.422635193e-02f, +3.060652423e-02f, -4.095834811e-02f, +8.486408502e-03f, +1.661961131e-02f, -1.421995445e-02f, -1.027492505e-04f, +6.770837463e-03f, -3.566736023e-03f, -8.677324040e-04f, +1.591922488e-03f, -3.931036847e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.388329353e-05f, -6.417240898e-05f, +1.686667536e-04f, -6.142119444e-05f, -3.495205277e-04f, +5.914032546e-04f, +1.777660704e-05f, -1.210214751e-03f, +1.367937793e-03f, +7.301798757e-04f, -3.417635218e-03f, +2.464102623e-03f, +4.453437683e-03f, -1.219284358e-02f, -1.346808420e-02f, +1.050588786e-02f, +1.452554670e-02f, -2.721866806e-03f, -3.835606308e-03f, +3.291631831e-03f, +3.931079982e-05f, -1.757174058e-03f, +1.037933360e-03f, +2.900761367e-04f, -6.918268172e-04f, +2.632035506e-04f, +1.565544333e-04f, -1.885820335e-04f, +4.213028094e-05f, +3.124166587e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.828075478e-04f, -2.003221815e-03f, +1.694941550e-03f, +3.457803721e-03f, -9.457184001e-03f, +5.878105981e-03f, +1.014523162e-02f, -2.298707685e-02f, +1.198994166e-02f, +1.962563448e-02f, -3.880881057e-02f, +1.761492824e-02f, +2.822012214e-02f, -4.971318470e-02f, +1.988676168e-02f, +3.152816504e-02f, -4.983557720e-02f, +1.758913973e-02f, +2.764124854e-02f, -3.911740624e-02f, +1.207702671e-02f, +1.867421894e-02f, -2.334574151e-02f, +6.171596040e-03f, +9.143180449e-03f, -9.738484588e-03f, +2.103582713e-03f, +2.695157541e-03f, -2.153899832e-03f, +3.931036847e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.388329353e-05f, +5.842813484e-05f, -2.512824241e-04f, +2.806208902e-04f, +1.705780658e-04f, -8.490609702e-04f, +8.534242601e-04f, +3.346757134e-04f, -1.768351253e-03f, +1.651088905e-03f, +4.921975209e-04f, -2.684559105e-03f, +2.355549894e-03f, +5.640180608e-04f, -3.148878810e-03f, +2.608288242e-03f, +5.061473728e-04f, -2.904531903e-03f, +2.271645788e-03f, +3.460649457e-04f, -2.086145071e-03f, +1.534340794e-03f, +1.643009442e-04f, -1.115600795e-03f, +7.634325823e-04f, +3.627213688e-05f, -3.915636883e-04f, +2.424108144e-04f, -1.408414334e-05f, -3.124166587e-05f, +0.000000000e+00f, /* 11,19 (32) */ +0.000000000e+00f, -4.966908413e-04f, +1.310851992e-03f, +2.207999221e-05f, -4.063289975e-03f, +5.178459613e-03f, +3.077108440e-03f, -1.473898916e-02f, +1.086016254e-02f, +1.615231162e-02f, -3.880201104e-02f, +1.363207938e-02f, +5.934888884e-02f, -1.015204366e-01f, -7.763599815e-03f, +4.947679472e-01f, +5.669757095e-01f, +7.260737943e-02f, -1.232802799e-01f, +4.039074562e-02f, +3.389815606e-02f, -4.091903731e-02f, +6.729234444e-03f, +1.765754468e-02f, -1.392987831e-02f, -7.945760677e-04f, +7.034041013e-03f, -3.410181590e-03f, -1.056314437e-03f, +1.634052769e-03f, -3.618620188e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.063106857e-05f, -6.728007231e-05f, +1.628315887e-04f, -4.291582785e-05f, -3.614793007e-04f, +5.652070128e-04f, +7.620428164e-05f, -1.228732987e-03f, +1.277217900e-03f, +8.689981039e-04f, -3.402121271e-03f, +2.176126409e-03f, +4.727884956e-03f, -1.166707039e-02f, -1.397039874e-02f, +9.832531001e-03f, +1.492209129e-02f, -2.307523354e-03f, -4.088159706e-03f, +3.224456389e-03f, +2.046274417e-04f, -1.819313209e-03f, +9.877771993e-04f, +3.531307794e-04f, -7.048617042e-04f, +2.408454052e-04f, +1.755366871e-04f, -1.904389678e-04f, +3.645992124e-05f, +3.481623894e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.966908413e-04f, -1.944793680e-03f, +1.443659126e-03f, +3.738424611e-03f, -9.286605935e-03f, +5.029045011e-03f, +1.099865588e-02f, -2.265240114e-02f, +1.022159040e-02f, +2.127672339e-02f, -3.831661305e-02f, +1.493036914e-02f, +3.057567203e-02f, -4.914916664e-02f, +1.673788287e-02f, +3.413645328e-02f, -4.932942982e-02f, +1.468460782e-02f, +2.991289433e-02f, -3.877134130e-02f, +9.990881644e-03f, +2.020855973e-02f, -2.318144056e-02f, +5.055995245e-03f, +9.906613032e-03f, -9.702212451e-03f, +1.712019025e-03f, +2.937568355e-03f, -2.167983976e-03f, +3.618620188e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.063106857e-05f, +6.551603683e-05f, -2.493321100e-04f, +2.559458012e-04f, +2.075885776e-04f, -8.542035150e-04f, +7.913800148e-04f, +4.276523932e-04f, -1.791176744e-03f, +1.543514979e-03f, +6.524371545e-04f, -2.732074795e-03f, +2.214489575e-03f, +7.727863800e-04f, -3.217410555e-03f, +2.463832767e-03f, +7.188770533e-04f, -2.979364830e-03f, +2.156077746e-03f, +5.160312554e-04f, -2.149397652e-03f, +1.464386609e-03f, +2.679489359e-04f, -1.156359346e-03f, +7.343428956e-04f, +8.084197358e-05f, -4.103362001e-04f, +2.366954563e-04f, -3.627044358e-06f, -3.481623894e-05f, +0.000000000e+00f, /* 11,20 (32) */ +0.000000000e+00f, -5.073219099e-04f, +1.243571920e-03f, +1.849115809e-04f, -4.106205803e-03f, +4.816980313e-03f, +3.642315453e-03f, -1.466278488e-02f, +9.631429549e-03f, +1.742952952e-02f, -3.793301293e-02f, +1.022995811e-02f, +6.152501525e-02f, -9.679255163e-02f, -1.943067021e-02f, +4.807975485e-01f, +5.768082405e-01f, +8.752947072e-02f, -1.255878032e-01f, +3.630258591e-02f, +3.712261245e-02f, -4.071440986e-02f, +4.909921236e-03f, +1.864532187e-02f, -1.357674753e-02f, -1.499437772e-03f, +7.274886419e-03f, -3.234644903e-03f, -1.246753405e-03f, +1.670512690e-03f, -3.270457799e-04f, +0.000000000e+00f, +0.000000000e+00f, -7.486215084e-06f, -6.995175781e-05f, +1.564782272e-04f, -2.475974066e-05f, -3.716379788e-04f, +5.373127009e-04f, +1.330727827e-04f, -1.241961659e-03f, +1.183198043e-03f, +1.001702874e-03f, -3.373678725e-03f, +1.886254962e-03f, +4.977484209e-03f, -1.112533286e-02f, -1.444000501e-02f, +9.135642269e-03f, +1.529195075e-02f, -1.872163695e-03f, -4.330779522e-03f, +3.143105347e-03f, +3.724092127e-04f, -1.875332384e-03f, +9.325720438e-04f, +4.160927482e-04f, -7.152661720e-04f, +2.168975658e-04f, +1.943050510e-04f, -1.915056908e-04f, +3.039279260e-05f, +3.838212256e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.073219099e-04f, -1.879277644e-03f, +1.194327016e-03f, +3.994370412e-03f, -9.079017358e-03f, +4.174841496e-03f, +1.179003590e-02f, -2.222474875e-02f, +8.430413660e-03f, +2.282023837e-02f, -3.766417590e-02f, +1.219829434e-02f, +3.279016161e-02f, -4.837638026e-02f, +1.352047232e-02f, +3.660028605e-02f, -4.861055277e-02f, +1.170524299e-02f, +3.206897208e-02f, -3.825531004e-02f, +7.841483992e-03f, +2.167294634e-02f, -2.291349163e-02f, +3.899635899e-03f, +1.064095593e-02f, -9.621370478e-03f, +1.301682824e-03f, +3.174263811e-03f, -2.171611020e-03f, +3.270457799e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.486215084e-06f, +7.196522133e-05f, -2.462376742e-04f, +2.307558929e-04f, +2.428066312e-04f, -8.554314227e-04f, +7.268700597e-04f, +5.174395197e-04f, -1.805907898e-03f, +1.430277407e-03f, +8.085790630e-04f, -2.767456242e-03f, +2.064449652e-03f, +9.776523587e-04f, -3.271936477e-03f, +2.308603358e-03f, +9.289761989e-04f, -3.041540159e-03f, +2.030448288e-03f, +6.850231627e-04f, -2.203810330e-03f, +1.387161515e-03f, +3.718354120e-04f, -1.192597501e-03f, +7.013604142e-04f, +1.260496305e-04f, -4.276702774e-04f, +2.296222555e-04f, +7.276413694e-06f, -3.838212256e-05f, +0.000000000e+00f, /* 11,21 (32) */ +0.000000000e+00f, -5.148081250e-04f, +1.173620162e-03f, +3.413898082e-04f, -4.130965543e-03f, +4.445342334e-03f, +4.179628154e-03f, -1.452971210e-02f, +8.389467890e-03f, +1.861272757e-02f, -3.693131006e-02f, +6.856279386e-03f, +6.341127021e-02f, -9.181506742e-02f, -3.055600307e-02f, +4.663575434e-01f, +5.859438828e-01f, +1.028214215e-01f, -1.274599669e-01f, +3.197180639e-02f, +4.026571780e-02f, -4.034200065e-02f, +3.034588851e-03f, +1.957789392e-02f, -1.316065478e-02f, -2.214703944e-03f, +7.491783984e-03f, -3.040339852e-03f, -1.438259096e-03f, +1.700905483e-03f, -2.886636573e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.461247698e-06f, -7.219074135e-05f, +1.496516639e-04f, -7.021610511e-06f, -3.799987812e-04f, +5.078743329e-04f, +1.881832653e-04f, -1.249953064e-03f, +1.086315845e-03f, +1.127890466e-03f, -3.332672114e-03f, +1.595604045e-03f, +5.202019568e-03f, -1.056931432e-02f, -1.487594407e-02f, +8.416840753e-03f, +1.563380617e-02f, -1.416658454e-03f, -4.562332588e-03f, +3.047605643e-03f, +5.420360887e-04f, -1.924885491e-03f, +8.724423452e-04f, +4.786988118e-04f, -7.229363140e-04f, +1.914231114e-04f, +2.127708687e-04f, -1.917523215e-04f, +2.394391249e-05f, +4.191937002e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.148081250e-04f, -1.807312422e-03f, +9.480893421e-04f, +4.225126305e-03f, -8.836210727e-03f, +3.319410073e-03f, +1.251690596e-02f, -2.170730923e-02f, +6.624505763e-03f, +2.425051577e-02f, -3.685559683e-02f, +9.430838100e-03f, +3.485461126e-02f, -4.739872790e-02f, +1.024853584e-02f, +3.890888941e-02f, -4.768157657e-02f, +8.663702835e-03f, +3.409942037e-02f, -3.757028688e-02f, +5.637673661e-03f, +2.306010786e-02f, -2.254165622e-02f, +2.707038398e-03f, +1.134231634e-02f, -9.495320847e-03f, +8.740125470e-04f, +3.403886067e-03f, -2.164334606e-03f, +2.886636573e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.461247698e-06f, +7.776451838e-05f, -2.420504378e-04f, +2.051850750e-04f, +2.761089073e-04f, -8.528141140e-04f, +6.602251554e-04f, +6.036809243e-04f, -1.812574388e-03f, +1.311931067e-03f, +9.599682835e-04f, -2.790621447e-03f, +1.906126961e-03f, +1.177728500e-03f, -3.312231865e-03f, +2.143274330e-03f, +1.135516017e-03f, -3.090734556e-03f, +1.895255156e-03f, +8.522847680e-04f, -2.249058511e-03f, +1.302928899e-03f, +4.754946277e-04f, -1.224077651e-03f, +6.645646552e-04f, +1.716957904e-04f, -4.434443410e-04f, +2.211852757e-04f, +1.858278450e-05f, -4.191937002e-05f, +0.000000000e+00f, /* 11,22 (32) */ +0.000000000e+00f, -5.192693727e-04f, +1.101429420e-03f, +4.910414720e-04f, -4.137987154e-03f, +4.065343553e-03f, +4.687502487e-03f, -1.434152883e-02f, +7.139514826e-03f, +1.969904341e-02f, -3.580341959e-02f, +3.523607271e-03f, +6.500687426e-02f, -8.661304785e-02f, -4.112531739e-02f, +4.514815994e-01f, +5.943607235e-01f, +1.184552276e-01f, -1.288766254e-01f, +2.740947380e-02f, +4.331332344e-02f, -3.979996456e-02f, +1.109703361e-03f, +2.045033626e-02f, -1.268195597e-02f, -2.937640258e-03f, +7.683207096e-03f, -2.827568983e-03f, -1.630011418e-03f, +1.724849395e-03f, -2.467442873e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.567542367e-06f, -7.400231112e-05f, +1.423977072e-04f, +1.023357321e-05f, -3.865715585e-04f, +4.770489483e-04f, +2.413482406e-04f, -1.252779690e-03f, +9.870120801e-04f, +1.247190160e-03f, -3.279506782e-03f, +1.305269933e-03f, +5.401358006e-03f, -1.000072017e-02f, -1.527735383e-02f, +7.677809727e-03f, +1.594640601e-02f, -9.419548641e-04f, -4.781701836e-03f, +2.938038908e-03f, +7.128689572e-04f, -1.967645963e-03f, +8.075352641e-04f, +5.406817511e-04f, -7.277775432e-04f, +1.644932940e-04f, +2.308444587e-04f, -1.911519052e-04f, +1.713070666e-05f, +4.540741818e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.192693727e-04f, -1.729547904e-03f, +7.060389043e-04f, +4.430311380e-03f, -8.560101819e-03f, +2.466595959e-03f, +1.317713111e-02f, -2.110362830e-02f, +4.811931374e-03f, +2.556244684e-02f, -3.589562855e-02f, +6.640216652e-03f, +3.676073822e-02f, -4.622099940e-02f, +6.936303974e-03f, +4.105216374e-02f, -4.654606055e-02f, +5.572968280e-03f, +3.599467552e-02f, -3.671800211e-02f, +3.388615151e-03f, +2.436303675e-02f, -2.206616159e-02f, +1.482960747e-03f, +1.200688100e-02f, -9.323625057e-03f, +4.305682060e-04f, +3.625071342e-03f, -2.145751822e-03f, +2.467442873e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.567542367e-06f, +8.290674739e-05f, -2.368258200e-04f, +1.793657373e-04f, +3.073838501e-04f, -8.464375711e-04f, +5.917805257e-04f, +6.860413896e-04f, -1.811241825e-03f, +1.189048365e-03f, +1.105976113e-03f, -2.801543206e-03f, +1.740252096e-03f, +1.372150902e-03f, -3.338135339e-03f, +1.968565202e-03f, +1.337581486e-03f, -3.126681251e-03f, +1.751041576e-03f, +1.017062415e-03f, -2.284855957e-03f, +1.211986895e-03f, +5.784557033e-04f, -1.250580530e-03f, +6.240545397e-04f, +2.175747863e-04f, -4.575415349e-04f, +2.113854967e-04f, +3.024489743e-05f, -4.540741818e-05f, +0.000000000e+00f, /* 11,23 (32) */ +0.000000000e+00f, -5.208369150e-04f, +1.027427109e-03f, +6.334391792e-04f, -4.127753581e-03f, +3.678771994e-03f, +5.164551435e-03f, -1.410018059e-02f, +5.886735136e-03f, +2.068605549e-02f, -3.455622943e-02f, +2.441004899e-04f, +6.631214419e-02f, -8.121168985e-02f, -5.112603756e-02f, +4.362042455e-01f, +6.020385332e-01f, +1.344016336e-01f, -1.298185802e-01f, +2.262777197e-02f, +4.625136235e-02f, -3.908709561e-02f, -8.579426022e-04f, +2.125787153e-02f, -1.214127422e-02f, -3.665417801e-03f, +7.847700390e-03f, -2.596724524e-03f, -1.821163323e-03f, +1.741980102e-03f, -2.013368691e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.184686737e-06f, -7.539367768e-05f, +1.347627424e-04f, +2.694470422e-05f, -3.913735697e-04f, +4.449958816e-04f, +2.923921239e-04f, -1.250533532e-03f, +8.857288567e-04f, +1.359265091e-03f, -3.214626626e-03f, +1.016325899e-03f, +5.575448640e-03f, -9.421272433e-03f, -1.564347125e-02f, +6.920291785e-03f, +1.622857046e-02f, -4.490746814e-04f, -4.987790445e-03f, +2.814542149e-03f, +8.842517829e-04f, -2.003308442e-03f, +7.380204988e-04f, +6.017714024e-04f, -7.297052001e-04f, +1.361874172e-04f, +2.484354947e-04f, -1.896806238e-04f, +9.972998001e-06f, +4.882517833e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.208369150e-04f, -1.646641156e-03f, +4.692130843e-04f, +4.609677117e-03f, -8.252717969e-03f, +1.620158388e-03f, +1.376891164e-02f, -2.041758691e-02f, +3.000689549e-03f, +2.675149521e-02f, -3.478965244e-02f, +3.838673446e-03f, +3.850099032e-02f, -4.484884850e-02f, +3.598168635e-03f, +4.302072894e-02f, -4.520847907e-02f, +2.446287029e-03f, +3.774571710e-02f, -3.570093969e-02f, +1.103759193e-03f, +2.557502365e-02f, -2.148770588e-02f, +2.323802171e-04f, +1.263093554e-02f, -9.106050270e-03f, -2.697332892e-05f, +3.836456839e-03f, -2.115506924e-03f, +2.013368691e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.184686737e-06f, +8.738863370e-05f, -2.306229360e-04f, +1.534281255e-04f, +3.365319592e-04f, -8.364036307e-04f, +5.218742281e-04f, +7.642079094e-04f, -1.802011045e-03f, +1.062216482e-03f, +1.246002744e-03f, -2.800248911e-03f, +1.567585990e-03f, +1.560083072e-03f, -3.349549514e-03f, +1.785237499e-03f, +1.534275501e-03f, -3.149171460e-03f, +1.598394050e-03f, +1.178608129e-03f, -2.310956446e-03f, +1.114667396e-03f, +6.802447451e-04f, -1.271906527e-03f, +5.799482627e-04f, +2.634754778e-04f, -4.698504283e-04f, +2.002309966e-04f, +4.221200833e-05f, -4.882517833e-05f, +0.000000000e+00f, /* 11,24 (32) */ +0.000000000e+00f, -5.196522283e-04f, +9.520334316e-04f, +7.682019216e-04f, -4.100808877e-03f, +3.287398424e-03f, +5.609547317e-03f, -1.380778847e-02f, +4.636201605e-03f, +2.157178435e-02f, -3.319696434e-02f, -2.970526136e-03f, +6.732847009e-02f, -7.563624121e-02f, -6.054731000e-02f, +4.205607743e-01f, +6.089588250e-01f, +1.506302041e-01f, -1.302676549e-01f, +1.763998152e-02f, +4.906590450e-02f, -3.820284382e-02f, -2.861251044e-03f, +2.199589203e-02f, -1.153950282e-02f, -4.395123001e-03f, +7.983887807e-03f, -2.348289030e-03f, -2.010843946e-03f, +1.751953100e-03f, -1.525116908e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.786403335e-06f, -7.637387715e-05f, +1.267934984e-04f, +4.305473184e-05f, -3.944292323e-04f, +4.118760385e-04f, +3.411517215e-04f, -1.243325345e-03f, +7.829078243e-04f, +1.463812955e-03f, -3.138511745e-03f, +7.298188369e-04f, +5.724321760e-03f, -8.832704308e-03f, -1.597363417e-02f, +6.146083796e-03f, +1.647919551e-02f, +6.088818554e-05f, -5.179525972e-03f, +2.677308242e-03f, +1.055513877e-03f, -2.031590404e-03f, +6.640900180e-04f, +6.616957344e-04f, -7.286451315e-04f, +1.065926770e-04f, +2.654533980e-04f, -1.873179974e-04f, +2.492983095e-06f, +5.215113274e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.196522283e-04f, -1.559252523e-03f, +2.385901483e-04f, +4.763105243e-03f, -7.916186010e-03f, +7.837547575e-04f, +1.429078587e-02f, -1.965337901e-02f, +1.198678504e-03f, +2.781371169e-02f, -3.354364969e-02f, +1.038424535e-03f, +4.006857631e-02f, -4.328876543e-02f, +2.486191205e-04f, +4.480596644e-02f, -4.367420357e-02f, -7.028844317e-04f, +3.934411115e-02f, -3.452233157e-02f, -1.207197253e-03f, +2.668969105e-02f, -2.080746114e-02f, -1.039526309e-03f, +1.321088380e-02f, -8.842574792e-03f, -4.968237572e-04f, +4.036687836e-03f, -2.073294916e-03f, +1.525116908e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.786403335e-06f, +9.121070548e-05f, -2.235041847e-04f, +1.274997434e-04f, +3.634660170e-04f, -8.228292131e-04f, +4.508455358e-04f, +8.378908291e-04f, -1.785017248e-03f, +9.320345641e-04f, +1.379479749e-03f, -2.786820098e-03f, +1.388916364e-03f, +1.740719604e-03f, -3.346441362e-03f, +1.594091349e-03f, +1.724722939e-03f, -3.158055539e-03f, +1.437939937e-03f, +1.336183052e-03f, -2.327155243e-03f, +1.011334890e-03f, +7.803870073e-04f, -1.287876920e-03f, +5.323830676e-04f, +3.091821714e-04f, -4.802657043e-04f, +1.877371019e-04f, +5.442997476e-05f, -5.215113274e-05f, +0.000000000e+00f, /* 11,25 (32) */ +0.000000000e+00f, -5.158658249e-04f, +8.756595545e-04f, +8.949954200e-04f, -4.057754145e-03f, +2.892969192e-03f, +6.021423355e-03f, -1.346663674e-02f, +3.392876260e-03f, +2.235469217e-02f, -3.173315139e-02f, -6.109037881e-03f, +6.805828893e-02f, -6.991191945e-02f, -6.938001431e-02f, +4.045871401e-01f, +6.151049088e-01f, +1.671093996e-01f, -1.302067667e-01f, +1.246045555e-02f, +5.174321274e-02f, -3.714732995e-02f, -4.892841448e-03f, +2.265998204e-02f, -1.087780708e-02f, -5.123768133e-03f, +8.090480484e-03f, -2.082835632e-03f, -2.198161944e-03f, +1.754446083e-03f, -1.003605580e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.229758273e-06f, -7.695366797e-05f, +1.185368192e-04f, +5.851081077e-05f, -3.957698464e-04f, +3.778511793e-04f, +3.874766561e-04f, -1.231283832e-03f, +6.789884160e-04f, +1.560566567e-03f, -3.051675980e-03f, +4.467660161e-04f, +5.848087598e-03f, -8.236754752e-03f, -1.626728294e-02f, +5.357031680e-03f, +1.669725689e-02f, +5.867703010e-04f, -5.355864460e-03f, +2.526586220e-03f, +1.225972263e-03f, -2.052233720e-03f, +5.859576958e-04f, +7.201819531e-04f, -7.245342347e-04f, +7.580396313e-05f, +2.818077408e-04f, -1.840470753e-04f, -5.284803911e-06f, +5.536343650e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.158658249e-04f, -1.468041817e-03f, +1.508596358e-05f, +4.890604986e-03f, -7.552719993e-03f, -3.907445562e-05f, +1.474163140e-02f, -1.881548818e-02f, -5.863387437e-04f, +2.874574625e-02f, -3.216416994e-02f, -1.748395563e-03f, +4.145749267e-02f, -4.154804582e-02f, -3.097822242e-03f, +4.640005779e-02f, -4.194948063e-02f, -3.860939971e-03f, +4.078205108e-02f, -3.318614851e-02f, -3.534352496e-03f, +2.770102594e-02f, -2.002707413e-02f, -2.327403229e-03f, +1.374326687e-02f, -8.533392621e-03f, -9.770894616e-04f, +4.224424938e-03f, -2.018864941e-03f, +1.003605580e-04f, +0.000000000e+00f, +0.000000000e+00f, -6.229758273e-06f, +9.437717204e-05f, -2.155348307e-04f, +1.017047819e-04f, +3.881112511e-04f, -8.058454924e-04f, +3.790333387e-04f, +9.068248614e-04f, -1.760428988e-03f, +7.991108973e-04f, +1.505872406e-03f, -2.761391756e-03f, +1.205054076e-03f, +1.913289705e-03f, -3.328842288e-03f, +1.395961915e-03f, +1.908074638e-03f, -3.153243872e-03f, +1.270344836e-03f, +1.489060860e-03f, -2.333290406e-03f, +9.023851319e-04f, +8.784090850e-04f, -1.298335032e-03f, +4.815149239e-04f, +3.544755813e-04f, -4.886888339e-04f, +1.739265019e-04f, +6.684145543e-05f, -5.536343650e-05f, +0.000000000e+00f, /* 11,26 (32) */ +0.000000000e+00f, -5.096360667e-04f, +7.987058865e-04f, +1.013532239e-03f, -3.999243334e-03f, +2.497199346e-03f, +6.399274535e-03f, -1.307916009e-02f, +2.161592427e-03f, +2.303368059e-02f, -3.017258482e-02f, -9.160713861e-03f, +6.850505494e-02f, -6.406383185e-02f, -7.761676906e-02f, +3.883198572e-01f, +6.204619405e-01f, +1.838066565e-01f, -1.296199964e-01f, +7.104591091e-03f, +5.426979896e-02f, -3.592135768e-02f, -6.945075168e-03f, +2.324593974e-02f, -1.015762513e-02f, -5.848302367e-03f, +8.166284447e-03f, -1.801027891e-03f, -2.382209019e-03f, +1.749161279e-03f, -4.499712153e-05f, +0.000000000e+00f, +0.000000000e+00f, +8.508092032e-06f, -7.714542216e-05f, +1.100394411e-04f, +7.326442817e-05f, -3.954332952e-04f, +3.430832150e-04f, +4.312297312e-04f, -1.214554775e-03f, +5.744061304e-04f, +1.649294283e-03f, -2.954664371e-03f, +1.681520007e-04f, +5.946934842e-03f, -7.635163059e-03f, -1.652396156e-02f, +4.555025022e-03f, +1.688181373e-02f, +1.127341589e-03f, -5.515794497e-03f, +2.362681358e-03f, +1.394934129e-03f, -2.065006149e-03f, +5.038588502e-04f, +7.769576327e-04f, -7.173209664e-04f, +4.392362233e-05f, +2.974086587e-04f, -1.798546151e-04f, -1.333354016e-05f, +5.844002441e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.096360667e-04f, -1.373664645e-03f, -2.004488672e-04f, +4.992309768e-03f, -7.164608742e-03f, -8.449199480e-04f, +1.512066474e-02f, -1.790866331e-02f, -2.346767732e-03f, +2.954485715e-02f, -3.065829754e-02f, -4.509787320e-03f, +4.266254675e-02f, -3.963475612e-02f, -6.426664530e-03f, +4.779601970e-02f, -4.004140599e-02f, -7.014183843e-03f, +4.205239592e-02f, -3.169708765e-02f, -5.867642902e-03f, +2.860341107e-02f, -1.914866505e-02f, -3.625738261e-03f, +1.422478179e-02f, -8.178917040e-03f, -1.465778295e-03f, +4.398351440e-03f, -1.952023486e-03f, +4.499712153e-05f, +0.000000000e+00f, +0.000000000e+00f, -8.508092032e-06f, +9.689578485e-05f, -2.067825811e-04f, +7.616357881e-05f, +4.104054317e-04f, -7.855970127e-04f, +3.067745716e-04f, +9.707699758e-04f, -1.728447016e-03f, +6.640600564e-04f, +1.624681845e-03f, -2.724151392e-03f, +1.016829376e-03f, +2.077060559e-03f, -3.296847912e-03f, +1.191715659e-03f, +2.083511266e-03f, -3.134707495e-03f, +1.096309781e-03f, +1.636531151e-03f, -2.329243902e-03f, +7.882436644e-04f, +9.738411283e-04f, -1.303147295e-03f, +4.275181090e-04f, +3.991338273e-04f, -4.950287292e-04f, +1.588293267e-04f, +7.938613329e-05f, -5.844002441e-05f, +0.000000000e+00f, /* 11,27 (32) */ +0.000000000e+00f, -5.011279746e-04f, +7.215604643e-04f, +1.123571680e-03f, -3.925978906e-03f, +2.101766051e-03f, +6.742357750e-03f, -1.264793036e-02f, +9.470376524e-04f, +2.360808672e-02f, -2.852329054e-02f, -1.211537823e-02f, +6.867320694e-02f, -5.811689701e-02f, -8.525193212e-02f, +3.717958956e-01f, +6.250169655e-01f, +2.006884702e-01f, -1.284926549e-01f, +1.588796594e-03f, +5.663248032e-02f, -3.452642355e-02f, -9.010081316e-03f, +2.374979859e-02f, -9.380667497e-03f, -6.565623334e-03f, +8.210208070e-03f, -1.503619232e-03f, -2.562063634e-03f, +1.735827739e-03f, +1.344290287e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.061593068e-05f, -7.696301166e-05f, +1.013477763e-04f, +8.727150786e-05f, -3.934637232e-04f, +3.077335173e-04f, +4.722872316e-04f, -1.193300107e-03f, +4.695908602e-04f, +1.729800256e-03f, -2.848050543e-03f, -1.050742777e-04f, +6.021128903e-03f, -7.029663496e-03f, -1.674331867e-02f, +3.741991540e-03f, +1.703201199e-02f, +1.681308471e-03f, -5.658341220e-03f, +2.185955052e-03f, +1.561699363e-03f, -2.069702749e-03f, +4.180496835e-04f, +8.317518661e-04f, -7.069658116e-04f, +1.106118323e-05f, +3.121672704e-04f, -1.747312493e-04f, -2.162417585e-05f, +6.135872231e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.011279746e-04f, -1.276768860e-03f, -4.072314483e-04f, +5.068473347e-03f, -6.754203310e-03f, -1.630516961e-03f, +1.542743931e-02f, -1.693789334e-02f, -4.075214748e-03f, +3.020891721e-02f, -2.903361569e-02f, -7.233938712e-03f, +4.367937612e-02f, -3.755769556e-02f, -9.723512442e-03f, +4.898773536e-02f, -3.795789472e-02f, -1.014889134e-02f, +4.314870570e-02f, -3.006055650e-02f, -8.196886804e-03f, +2.939165473e-02f, -1.817482392e-02f, -4.928885556e-03f, +1.465229990e-02f, -7.779783213e-03f, -1.960807025e-03f, +4.557180766e-03f, -1.872637353e-03f, -1.344290287e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.061593068e-05f, +9.877768243e-05f, -1.973171607e-04f, +5.099210984e-05f, +4.302989061e-04f, -7.622407565e-04f, +2.344026744e-04f, +1.029512157e-03f, -1.689302989e-03f, +5.275000579e-04f, +1.735447020e-03f, -2.675337866e-03f, +8.250880908e-04f, +2.231340502e-03f, -3.250617563e-03f, +9.822464652e-04f, +2.250247059e-03f, -3.102478442e-03f, +9.165682554e-04f, +1.777902771e-03f, -2.314942528e-03f, +6.693641742e-04f, +1.066219067e-03f, -1.302204225e-03f, +3.705846943e-04f, +4.429334640e-04f, -4.992023741e-04f, +1.424831887e-04f, +9.200096162e-05f, -6.135872231e-05f, +0.000000000e+00f, /* 11,28 (32) */ +0.000000000e+00f, -4.905120440e-04f, +6.445974527e-04f, +1.224919457e-03f, -3.838707398e-03f, +1.708302327e-03f, +7.050091267e-03f, -1.217564313e-02f, -2.462624541e-04f, +2.407767758e-02f, -2.679349028e-02f, -1.496342877e-02f, +6.856813267e-02f, -5.209576810e-02f, -9.228159561e-02f, +3.550525770e-01f, +6.287589571e-01f, +2.177204822e-01f, -1.268113464e-01f, -4.069544625e-03f, +5.881843537e-02f, -3.296472419e-02f, -1.107978407e-02f, +2.416784827e-02f, -8.548915631e-03f, -7.272589145e-03f, +8.221269253e-03f, -1.191451962e-03f, -2.736794883e-03f, +1.714203563e-03f, +7.480162519e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.254897547e-05f, -7.642169036e-05f, +9.250770446e-05f, +1.004924917e-04f, -3.899111944e-04f, +2.719622451e-04f, +5.105391625e-04f, -1.167696943e-03f, +3.649652725e-04f, +1.801924571e-03f, -2.732434021e-03f, -3.720022736e-04f, +6.071009941e-03f, -6.421979990e-03f, -1.692510800e-02f, +2.919891436e-03f, +1.714708762e-02f, +2.247317239e-03f, -5.782570238e-03f, +1.996824487e-03f, +1.725563159e-03f, -2.066147209e-03f, +3.288066269e-04f, +8.842964323e-04f, -6.934417111e-04f, -2.266695685e-05f, +3.259961039e-04f, -1.686716379e-04f, -3.012550886e-05f, +6.409736252e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.905120440e-04f, -1.177991178e-03f, -6.045486089e-04f, +5.119465457e-03f, -6.323904404e-03f, -2.392757717e-03f, +1.566184199e-02f, -1.590838118e-02f, -5.764517736e-03f, +3.073641726e-02f, -2.729816867e-02f, -9.909276578e-03f, +4.450446421e-02f, -3.532635506e-02f, -1.297413000e-02f, +4.996998183e-02f, -3.570764766e-02f, -1.325136978e-02f, +4.406527396e-02f, -2.828265373e-02f, -1.051182933e-02f, +3.006101891e-02f, -1.710860485e-02f, -6.231089781e-03f, +1.502288459e-02f, -7.336849749e-03f, -2.460009399e-03f, +4.699663955e-03f, -1.780636391e-03f, -7.480162519e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.254897547e-05f, +1.000372204e-04f, -1.872098875e-04f, +2.630151461e-05f, +4.477545695e-04f, -7.359451690e-04f, +1.622460947e-04f, +1.082864033e-03f, -1.643258051e-03f, +3.900495221e-04f, +1.837746491e-03f, -2.615239996e-03f, +6.306877531e-04f, +2.375482011e-03f, -3.190373477e-03f, +7.684716360e-04f, +2.407533414e-03f, -3.056649812e-03f, +7.318830510e-04f, +1.912507091e-03f, -2.290358631e-03f, +5.462267062e-04f, +1.155086836e-03f, -1.295421288e-03f, +3.109239366e-04f, +4.856505384e-04f, -5.011354274e-04f, +1.249331840e-04f, +1.046204324e-04f, -6.409736252e-05f, +0.000000000e+00f, /* 11,29 (32) */ +0.000000000e+00f, -4.779630685e-04f, +5.681757623e-04f, +1.317427161e-03f, -3.738214906e-03f, +1.318391133e-03f, +7.322053512e-03f, -1.166510396e-02f, -1.413959398e-03f, +2.444264285e-02f, -2.499156571e-02f, -1.769586280e-02f, +6.819613039e-02f, -4.602475816e-02f, -9.870357560e-02f, +3.381274690e-01f, +6.316788485e-01f, +2.348675698e-01f, -1.245640291e-01f, -9.852114863e-03f, +6.081525986e-02f, -3.123916103e-02f, -1.314593127e-02f, +2.449665490e-02f, -7.664619199e-03f, -7.966030856e-03f, +8.198602296e-03f, -8.654558578e-04f, -2.905466521e-03f, +1.684078054e-03f, +1.388989877e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.430408636e-05f, -7.553797284e-05f, +8.356437160e-05f, +1.128923987e-04f, -3.848313325e-04f, +2.359276916e-04f, +5.458894262e-04f, -1.137936565e-03f, +2.609432477e-04f, +1.865543218e-03f, -2.608437499e-03f, -6.317624037e-04f, +6.096990672e-03f, -5.813820907e-03f, -1.706918873e-02f, +2.090711636e-03f, +1.722636945e-02f, +2.823957673e-03f, -5.887591478e-03f, +1.795762098e-03f, +1.885818684e-03f, -2.054193084e-03f, +2.364255892e-04f, +9.343269739e-04f, -6.767344434e-04f, -5.713788228e-05f, +3.388095256e-04f, -1.616746057e-04f, -3.880427232e-05f, +6.663390283e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.779630685e-04f, -1.077953958e-03f, -7.917584964e-04f, +5.145766972e-03f, -5.876149835e-03f, -3.128702886e-03f, +1.582408808e-02f, -1.482551715e-02f, -7.407775787e-03f, +3.112646679e-02f, -2.546042218e-02f, -1.252451657e-02f, +4.513515197e-02f, -3.295087304e-02f, -1.616450348e-02f, +5.073845346e-02f, -3.330011425e-02f, -1.630801959e-02f, +4.479715701e-02f, -2.637014664e-02f, -1.280218796e-02f, +3.060724561e-02f, -1.595351802e-02f, -7.526511069e-03f, +1.533380853e-02f, -6.851199210e-03f, -2.961144826e-03f, +4.824597139e-03f, -1.676015959e-03f, -1.388989877e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.430408636e-05f, +1.006917880e-04f, -1.765332510e-04f, +2.197657769e-06f, +4.627477756e-04f, -7.068891457e-04f, +9.062683597e-05f, +1.130665368e-03f, -1.590601295e-03f, +2.523248602e-04f, +1.931200014e-03f, -2.544194950e-03f, +4.344936997e-04f, +2.508884473e-03f, -3.116399721e-03f, +5.513277849e-04f, +2.554662325e-03f, -2.997375566e-03f, +5.430429681e-04f, +2.039701187e-03f, -2.255510631e-03f, +4.193357355e-04f, +1.239998590e-03f, -1.282739667e-03f, +2.487615761e-04f, +5.270616700e-04f, -5.007627948e-04f, +1.062318554e-04f, +1.171768659e-04f, -6.663390283e-05f, +0.000000000e+00f, /* 11,30 (32) */ +0.000000000e+00f, -4.636589821e-04f, +4.926377895e-04f, +1.400991533e-03f, -3.625322507e-03f, +9.335598005e-04f, +7.557981204e-03f, -1.111921454e-02f, -2.551895963e-03f, +2.470358610e-02f, -2.312602249e-02f, -2.030430029e-02f, +6.756436799e-02f, -3.992776749e-02f, -1.045173965e-01f, +3.210582802e-01f, +6.337695601e-01f, +2.520939393e-01f, -1.217400715e-01f, -1.573970634e-02f, +6.261102195e-02f, -2.935334235e-02f, -1.520012436e-02f, +2.473308049e-02f, -6.730292225e-03f, -8.642765300e-03f, +8.141464414e-03f, -5.266463322e-04f, -3.067141127e-03f, +1.645273782e-03f, +2.055328905e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.587925964e-05f, -7.432951012e-05f, +7.456199901e-05f, +1.244408611e-04f, -3.782849447e-04f, +1.997856523e-04f, +5.782559362e-04f, -1.104223360e-03f, +1.579283810e-04f, +1.920567935e-03f, -2.476704058e-03f, -8.835284387e-04f, +6.099553942e-03f, -5.206873907e-03f, -1.717552527e-02f, +1.256459939e-03f, +1.726928183e-02f, +3.409766865e-03f, -5.972562914e-03f, +1.583294811e-03f, +2.041759800e-03f, -2.033724933e-03f, +1.412211116e-04f, +9.815841830e-04f, -6.568429598e-04f, -9.222254628e-05f, +3.505241726e-04f, -1.537432642e-04f, -4.762523496e-05f, +6.894654851e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.636589821e-04f, -9.772621697e-04f, -9.682917474e-04f, +5.147964629e-03f, -5.413402059e-03f, -3.835592032e-03f, +1.591471492e-02f, -1.369485178e-02f, -8.998377082e-03f, +3.137879165e-02f, -2.352922217e-02f, -1.506871152e-02f, +4.556964567e-02f, -3.044198857e-02f, -1.928090320e-02f, +5.128978125e-02f, -3.074545192e-02f, -1.930539516e-02f, +4.534019998e-02f, -2.433044545e-02f, -1.505769859e-02f, +3.102658135e-02f, -1.471351943e-02f, -8.809250736e-03f, +1.558257011e-02f, -6.324137540e-03f, -3.461907621e-03f, +4.930828994e-03f, -1.558839093e-03f, -2.055328905e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.587925964e-05f, +1.007616128e-04f, -1.653604951e-04f, -2.121927248e-05f, +4.752661866e-04f, -6.752609872e-04f, +1.985905989e-05f, +1.172783428e-03f, -1.531648112e-03f, +1.149374980e-04f, +2.015469923e-03f, -2.462586420e-03f, +2.373751464e-04f, +2.630996745e-03f, -3.029040832e-03f, +3.317666361e-04f, +2.690969630e-03f, -2.924870034e-03f, +3.508593867e-04f, +2.158870932e-03f, -2.210463330e-03f, +2.892181057e-04f, +1.320520896e-03f, -1.264126917e-03f, +1.843390432e-04f, +5.669451485e-04f, -4.980291667e-04f, +8.643911408e-05f, +1.296007205e-04f, -6.894654851e-05f, +0.000000000e+00f, /* 11,31 (32) */ +0.000000000e+00f, -4.477797225e-04f, +4.183082794e-04f, +1.475553532e-03f, -3.500881646e-03f, +5.552748558e-04f, +7.757766856e-03f, -1.054095860e-02f, -3.656119323e-03f, +2.486151448e-02f, -2.120545456e-02f, -2.278100435e-02f, +6.668083955e-02f, -3.382821355e-02f, -1.097242704e-01f, +3.038827550e-01f, +6.350260201e-01f, +2.693632211e-01f, -1.183303046e-01f, -2.171226926e-02f, +6.419431677e-02f, -2.731158255e-02f, -1.723384929e-02f, +2.487430160e-02f, -5.748708042e-03f, -9.299608260e-03f, +8.049241867e-03f, -1.761221597e-04f, -3.220884391e-03f, +1.597648547e-03f, +2.744794391e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.727359999e-05f, -7.281496347e-05f, +6.554370115e-05f, +1.351121395e-04f, -3.703376314e-04f, +1.636888179e-04f, +6.075706714e-04f, -1.066773732e-03f, +5.631255252e-05f, +1.966945911e-03f, -2.337894363e-03f, -1.126519703e-03f, +6.079250102e-03f, -4.602800923e-03f, -1.724418689e-02f, +4.191591060e-04f, +1.727534696e-02f, +4.003233266e-03f, -6.036694190e-03f, +1.360003080e-03f, +2.192683832e-03f, -2.004659355e-03f, +4.352543003e-05f, +1.025814987e-03f, -6.337796691e-04f, -1.277861936e-04f, +3.610593840e-04f, -1.448851155e-04f, -5.655131412e-05f, +7.101387684e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.477797225e-04f, -8.765005569e-04f, -1.133652243e-03f, +5.126745357e-03f, -4.938135872e-03f, -4.510853019e-03f, +1.593457398e-02f, -1.252206835e-02f, -1.053002519e-02f, +3.149372914e-02f, -2.151375224e-02f, -1.753129794e-02f, +4.580702081e-02f, -2.781099183e-02f, -2.230994403e-02f, +5.162154789e-02f, -2.805448229e-02f, -2.223026519e-02f, +4.569105936e-02f, -2.217157452e-02f, -1.726816192e-02f, +3.131579945e-02f, -1.339299853e-02f, -1.007337765e-02f, +1.576690915e-02f, -5.757192392e-03f, -3.959936788e-03f, +5.017268108e-03f, -1.429238372e-03f, -2.744794391e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.727359999e-05f, +1.002695547e-04f, -1.537652081e-04f, -4.385512737e-05f, +4.853095666e-04f, -6.412573280e-04f, -4.975225277e-05f, +1.209113201e-03f, -1.466738437e-03f, -2.150884940e-05f, +2.090262312e-03f, -2.370842601e-03f, +4.020126626e-05f, +2.741319471e-03f, -2.928700180e-03f, +1.107507574e-04f, +2.815838079e-03f, -2.839407163e-03f, +1.561627150e-04f, +2.269433978e-03f, -2.155328008e-03f, +1.564208422e-04f, +1.396234898e-03f, -1.239577499e-03f, +1.179125761e-04f, +6.050820446e-04f, -4.928895181e-04f, +6.562212109e-05f, +1.418209216e-04f, -7.101387684e-05f, +0.000000000e+00f, /* 12, 0 (28) */ +2.536797823e-04f, +1.717120723e-03f, -4.267889081e-03f, +2.769345327e-03f, +5.951433797e-03f, -1.603584821e-02f, +1.292106340e-02f, +1.223371165e-02f, -4.454238865e-02f, +4.565217930e-02f, +1.809825863e-02f, -1.393967437e-01f, +2.613999239e-01f, +6.871774778e-01f, +2.613999239e-01f, -1.393967437e-01f, +1.809825863e-02f, +4.565217930e-02f, -4.454238865e-02f, +1.223371165e-02f, +1.292106340e-02f, -1.603584821e-02f, +5.951433797e-03f, +2.769345327e-03f, -4.267889081e-03f, +1.717120723e-03f, +2.536797823e-04f, -4.307376863e-04f, -8.526960746e-05f, +7.926299444e-05f, +1.318301341e-04f, -4.772958510e-04f, +5.158670931e-04f, +2.137625121e-04f, -1.439760328e-03f, +1.848238513e-03f, -3.735582438e-05f, -3.629437058e-03f, +5.880531475e-03f, -1.163826103e-03f, -2.009118504e-02f, -5.299098635e-04f, +2.017288707e-02f, +1.861481453e-03f, -6.119451369e-03f, +3.497362304e-03f, +2.476320516e-04f, -1.945437062e-03f, +1.410425884e-03f, -1.423394688e-04f, -5.578184186e-04f, +4.775685101e-04f, -1.149719352e-04f, -9.125701215e-05f, +8.822150698e-05f, -2.745459118e-05f, -2.536797823e-04f, -1.150482282e-03f, +5.406716708e-03f, -7.717177369e-03f, +1.823839110e-03f, +1.228216497e-02f, -2.346784071e-02f, +1.698003719e-02f, +9.330273566e-03f, -3.702545451e-02f, +4.007418410e-02f, -9.979930894e-03f, -3.212484989e-02f, +5.173229864e-02f, -3.212484989e-02f, -9.979930894e-03f, +4.007418410e-02f, -3.702545451e-02f, +9.330273566e-03f, +1.698003719e-02f, -2.346784071e-02f, +1.228216497e-02f, +1.823839110e-03f, -7.717177369e-03f, +5.406716708e-03f, -1.150482282e-03f, -7.255512597e-04f, +4.307376863e-04f, +8.526960746e-05f, -1.854904982e-04f, +3.237785643e-05f, +4.455277979e-04f, -9.335634383e-04f, +7.835579473e-04f, +3.394120637e-04f, -1.815168006e-03f, +2.293903971e-03f, -8.991337447e-04f, -1.663773246e-03f, +3.389161541e-03f, -2.669210172e-03f, -1.289232061e-04f, +2.834582782e-03f, -3.352244024e-03f, +1.472695063e-03f, +1.092228303e-03f, -2.364105091e-03f, +1.751821072e-03f, -2.249406299e-04f, -8.609019613e-04f, +9.443600182e-04f, -4.163629789e-04f, -6.280130302e-05f, +1.995966708e-04f, -1.186846730e-04f, +2.745459118e-05f, /* 12, 1 (28) */ +1.684101748e-04f, +1.796383717e-03f, -4.136058947e-03f, +2.292049476e-03f, +6.467300890e-03f, -1.582208569e-02f, +1.148130307e-02f, +1.408195016e-02f, -4.457974447e-02f, +4.202274224e-02f, +2.397879011e-02f, -1.405605698e-01f, +2.413087388e-01f, +6.866475680e-01f, +2.815728109e-01f, -1.375352622e-01f, +1.197880726e-02f, +4.914954161e-02f, -4.429475660e-02f, +1.028827459e-02f, +1.433148928e-02f, -1.617818768e-02f, +5.393615378e-03f, +3.246913837e-03f, -4.382861017e-03f, +1.625863710e-03f, +3.419012893e-04f, -4.581922775e-04f, -8.197548550e-05f, +6.730415010e-05f, +1.475049942e-04f, -4.747226022e-04f, +4.725039166e-04f, +2.825427336e-04f, -1.461742008e-03f, +1.744506828e-03f, +1.687035297e-04f, -3.742165744e-03f, +5.621703527e-03f, -4.848968310e-04f, -1.996025146e-02f, -1.588226575e-03f, +2.020456610e-02f, +2.575877161e-03f, -6.336929088e-03f, +3.346114859e-03f, +4.612341352e-04f, -2.035505433e-03f, +1.373719731e-03f, -6.856006816e-05f, -5.981149961e-04f, +4.754753349e-04f, -9.698124191e-05f, -1.032215887e-04f, +9.079849612e-05f, -2.643210268e-05f, -1.684101748e-04f, -1.335972780e-03f, +5.439094564e-03f, -7.271649571e-03f, +8.902756715e-04f, +1.306572292e-02f, -2.312842865e-02f, +1.516486918e-02f, +1.162417754e-02f, -3.792458825e-02f, +3.841041086e-02f, -6.590769352e-03f, -3.479406006e-02f, +5.160337544e-02f, -2.929026710e-02f, -1.333217492e-02f, +4.154687917e-02f, -3.593322620e-02f, +6.966168475e-03f, +1.873185826e-02f, -2.369278134e-02f, +1.142126301e-02f, +2.768199128e-03f, -8.133540348e-03f, +5.343915405e-03f, -9.508856112e-04f, -8.442359327e-04f, +4.581922775e-04f, +8.197548550e-05f, -1.708411199e-04f, +2.693099346e-06f, +4.716071764e-04f, -9.181381898e-04f, +7.035481900e-04f, +4.504588533e-04f, -1.868519948e-03f, +2.212789912e-03f, -7.030032145e-04f, -1.845359890e-03f, +3.408857351e-03f, -2.490700469e-03f, -3.861118649e-04f, +2.985948991e-03f, -3.298229076e-03f, +1.273052197e-03f, +1.281268207e-03f, -2.422921794e-03f, +1.678687701e-03f, -1.075964685e-04f, -9.351215115e-04f, +9.503729501e-04f, -3.841981137e-04f, -9.381007205e-05f, +2.130536507e-04f, -1.198041350e-04f, +2.643210268e-05f, /* 12, 2 (28) */ +8.643468934e-05f, +1.863687867e-03f, -3.988553953e-03f, +1.817326873e-03f, +6.939804807e-03f, -1.553954296e-02f, +1.001956106e-02f, +1.582645699e-02f, -4.441104094e-02f, +3.828057650e-02f, +2.960049363e-02f, -1.410454666e-01f, +2.213484874e-01f, +6.850593414e-01f, +3.017773770e-01f, -1.349593851e-01f, +5.641878176e-03f, +5.249565646e-02f, -4.383352246e-02f, +8.252769153e-03f, +1.570520902e-02f, -1.624674774e-02f, +4.795500382e-03f, +3.722389172e-03f, -4.479842259e-03f, +1.522642122e-03f, +4.326997854e-04f, -4.846243802e-04f, -7.837259355e-05f, +5.544275033e-05f, +1.619532692e-04f, -4.699237877e-04f, +4.279728673e-04f, +3.484126929e-04f, -1.476424179e-03f, +1.634857349e-03f, +3.696919477e-04f, -3.835463284e-03f, +5.344548510e-03f, +1.734178923e-04f, -1.978103177e-02f, -2.642039421e-03f, +2.018558845e-02f, +3.304936433e-03f, -6.531484372e-03f, +3.175957353e-03f, +6.772374843e-04f, -2.117868078e-03f, +1.329658048e-03f, +7.271196806e-06f, -6.365162621e-04f, +4.709614541e-04f, -7.791644304e-05f, -1.150900565e-04f, +9.296887939e-05f, -2.515381512e-05f, -8.643468934e-05f, -1.506813900e-03f, +5.441787664e-03f, -6.800042395e-03f, -2.786251825e-05f, +1.376927111e-02f, -2.267796980e-02f, +1.329634923e-02f, +1.383696745e-02f, -3.862759146e-02f, +3.656505097e-02f, -3.181912001e-03f, -3.728476053e-02f, +5.121726357e-02f, -2.630431811e-02f, -1.663040399e-02f, +4.281993136e-02f, -3.465195799e-02f, +4.543246681e-03f, +2.041054596e-02f, -2.380037781e-02f, +1.048614150e-02f, +3.718572078e-03f, -8.517738462e-03f, +5.250105333e-03f, -7.378319605e-04f, -9.640400678e-04f, +4.846243802e-04f, +7.837259355e-05f, -1.557543963e-04f, -2.610804149e-05f, +4.945347714e-04f, -8.982611748e-04f, +6.213378295e-04f, +5.575549909e-04f, -1.911723046e-03f, +2.121286551e-03f, -5.048633795e-04f, -2.016582388e-03f, +3.411296493e-03f, -2.299989110e-03f, -6.413306954e-04f, +3.122510283e-03f, -3.227329962e-03f, +1.065821184e-03f, +1.465248192e-03f, -2.469937770e-03f, +1.596030675e-03f, +1.204521806e-05f, -1.005766924e-03f, +9.514704756e-04f, -3.491375938e-04f, -1.252430481e-04f, +2.257559918e-04f, -1.201746071e-04f, +2.515381512e-05f, /* 12, 3 (28) */ +8.062095791e-06f, +1.919130618e-03f, -3.826600684e-03f, +1.347403086e-03f, +7.367777674e-03f, -1.519113027e-02f, +8.543136885e-03f, +1.746131434e-02f, -4.404134900e-02f, +3.444511322e-02f, +3.494504214e-02f, -1.408720487e-01f, +2.015674556e-01f, +6.824173020e-01f, +3.219629655e-01f, -1.316544486e-01f, -8.896061963e-04f, +5.567161382e-02f, -4.315628498e-02f, +6.134901075e-03f, +1.703486706e-02f, -1.623947655e-02f, +4.158984120e-03f, +4.193350626e-03f, -4.557758702e-03f, +1.407552065e-03f, +5.256686648e-04f, -5.097781953e-04f, -7.449492353e-05f, +4.373845388e-05f, +1.751393235e-04f, -4.629835816e-04f, +3.825177745e-04f, +4.111248556e-04f, -1.483893463e-03f, +1.519920503e-03f, +5.647954722e-04f, -3.909331578e-03f, +5.050687187e-03f, +8.093325730e-04f, -1.955462103e-02f, -3.688363072e-03f, +2.011548148e-02f, +4.046497979e-03f, -6.701697695e-03f, +2.987242269e-03f, +8.946875297e-04f, -2.191974093e-03f, +1.278292778e-03f, +8.483291066e-05f, -6.727852572e-04f, +4.639829239e-04f, -5.784337511e-05f, -1.267940064e-04f, +9.470218299e-05f, -2.361553000e-05f, -8.062095791e-06f, -1.662568296e-03f, +5.415679622e-03f, -6.305507623e-03f, -9.261236930e-04f, +1.439060894e-02f, -2.212041481e-02f, +1.138462619e-02f, +1.595825400e-02f, -3.913245484e-02f, +3.454846858e-02f, +2.293844911e-04f, -3.958474964e-02f, +5.057593288e-02f, -2.318180783e-02f, -1.985773396e-02f, +4.388575255e-02f, -3.318670980e-02f, +2.073308911e-03f, +2.200657664e-02f, -2.378833259e-02f, +9.480374572e-03f, +4.670042554e-03f, -8.866876055e-03f, +5.124862285e-03f, -5.120759688e-04f, -1.084214675e-03f, +5.097781953e-04f, +7.449492353e-05f, -1.403354128e-04f, -5.388970461e-05f, +5.142632352e-04f, -8.741298214e-04f, +5.373958055e-04f, +6.602028232e-04f, -1.944678327e-03f, +2.019966433e-03f, -3.057434476e-04f, -2.176626640e-03f, +3.396533172e-03f, -2.098072660e-03f, -8.932778993e-04f, +3.243543226e-03f, -3.139848145e-03f, +8.520233772e-04f, +1.643181823e-03f, -2.504794604e-03f, +1.504166230e-03f, +1.333887276e-04f, -1.072400192e-03f, +9.475452486e-04f, -3.113046415e-04f, -1.569321239e-04f, +2.375994722e-04f, -1.197612733e-04f, +2.361553000e-05f, /* 12, 4 (28) */ -6.643282774e-05f, +1.962869071e-03f, -3.651461360e-03f, +8.844195042e-04f, +7.750295448e-03f, -1.478000541e-02f, +7.059243422e-03f, +1.898123484e-02f, -4.347655352e-02f, +3.053578164e-02f, +3.999572933e-02f, -1.400627162e-01f, +1.820128346e-01f, +6.787289389e-01f, +3.420784470e-01f, -1.276079507e-01f, -7.591303891e-03f, +5.865885609e-02f, -4.226159745e-02f, +3.942926982e-03f, +1.831315984e-02f, -1.615464364e-02f, +3.486198863e-03f, +4.657333550e-03f, -4.615602077e-03f, +1.280758059e-03f, +6.203708478e-04f, -5.333937253e-04f, -7.037678577e-05f, +3.224806064e-05f, +1.870351037e-04f, -4.539946472e-04f, +3.363811173e-04f, +4.704523592e-04f, -1.484268751e-03f, +1.400338575e-03f, +7.532431649e-04f, -3.963857823e-03f, +4.741772964e-03f, +1.421169971e-03f, -1.928225905e-02f, -4.724238005e-03f, +1.999393623e-02f, +4.798322993e-03f, -6.846216993e-03f, +2.780412143e-03f, +1.112603523e-03f, -2.257300314e-03f, +1.219712128e-03f, +1.637879495e-04f, -7.066899060e-04f, +4.545072392e-04f, -3.683518294e-05f, -1.382636177e-04f, +9.596938431e-05f, -2.181467077e-05f, +6.643282774e-05f, -1.802903709e-03f, +5.361789918e-03f, -5.791244388e-03f, -1.800253514e-03f, +1.492800474e-02f, -2.146021198e-02f, +9.439947860e-03f, +1.797822043e-02f, -3.943819829e-02f, +3.237184194e-02f, +3.625917663e-03f, -4.168282230e-02f, +4.968265498e-02f, -1.993826460e-02f, -2.299758210e-02f, +4.473777593e-02f, -3.154352798e-02f, -4.314856932e-04f, +2.351074287e-02f, -2.365494387e-02f, +8.407974380e-03f, +5.617587802e-03f, -9.178180697e-03f, +4.967930161e-03f, -2.744764966e-04f, -1.203975948e-03f, +5.333937253e-04f, +7.037678577e-05f, -1.246878551e-04f, -8.052564960e-05f, +5.307640527e-04f, -8.459605991e-04f, +4.521922591e-04f, +7.579353121e-04f, -1.967341574e-03f, +1.909447527e-03f, -1.066697545e-04f, -2.324740980e-03f, +3.364710146e-03f, -1.886003496e-03f, -1.140668745e-03f, +3.348403385e-03f, -3.036172011e-03f, +6.327198303e-04f, +1.814106837e-03f, -2.527194232e-03f, +1.403462982e-03f, +2.558207948e-04f, -1.134597567e-03f, +9.385154098e-04f, -2.708410303e-04f, -1.887030176e-04f, +2.484817892e-04f, -1.185333513e-04f, +2.181467077e-05f, /* 12, 5 (28) */ -1.368096135e-04f, +1.995117132e-03f, -3.464426257e-03f, +4.304248570e-04f, +8.086676566e-03f, -1.430955305e-02f, +5.574974672e-03f, +2.038157341e-02f, -4.272331036e-02f, +2.657192382e-02f, +4.473750230e-02f, -1.386415462e-01f, +1.627305755e-01f, +6.740047009e-01f, +3.620723832e-01f, -1.228096277e-01f, -1.443752088e-02f, +6.143926823e-02f, -4.114899392e-02f, +1.685626668e-03f, +1.953287197e-02f, -1.599085569e-02f, +2.779508957e-03f, +5.111840789e-03f, -4.652437260e-03f, +1.142494441e-03f, +7.163402321e-04f, -5.552083961e-04f, -6.605259312e-05f, +2.102528838e-05f, +1.976200705e-04f, -4.430574496e-04f, +2.898028574e-04f, +5.261896628e-04f, -1.477699978e-03f, +1.276762484e-03f, +9.343097736e-04f, -3.999212509e-03f, +4.419484716e-03f, +2.007365906e-03f, -1.896532500e-02f, -5.746740681e-03f, +1.982080948e-02f, +5.558102500e-03f, -6.963764219e-03f, +2.555999392e-03f, +1.329982526e-03f, -2.313354339e-03f, +1.154040886e-03f, +2.437847990e-04f, -7.380043028e-04f, +4.425137977e-04f, -1.497213655e-05f, -1.494280070e-04f, +9.674314000e-05f, -1.975036269e-05f, +1.368096135e-04f, -1.927591564e-03f, +5.281264268e-03f, -5.260480335e-03f, -2.646214113e-03f, +1.538019700e-02f, -2.070227667e-02f, +7.472606287e-03f, +1.988766796e-02f, -3.954486805e-02f, +3.004710096e-02f, +6.990627809e-03f, -4.356882579e-02f, +4.854198623e-02f, -1.658986122e-02f, -2.603375411e-02f, +4.537049576e-02f, -2.972942114e-02f, -2.958679925e-03f, +2.491420585e-02f, -2.339912307e-02f, +7.273376813e-03f, +6.556103212e-03f, -9.449021727e-03f, +4.779227143e-03f, -2.599470746e-05f, -1.322509300e-03f, +5.552083961e-04f, +6.605259312e-05f, -1.089134097e-04f, -1.058997420e-04f, +5.440272734e-04f, -8.139874555e-04f, +3.661959696e-04f, +8.503180963e-04f, -1.979722913e-03f, +1.790389534e-03f, +9.133959482e-05f, -2.460239749e-03f, +3.316057636e-03f, -1.664884210e-03f, -1.382242268e-03f, +3.436528816e-03f, -2.916775147e-03f, +4.090059313e-04f, +1.977090400e-03f, -2.536901083e-03f, +1.294340562e-03f, +3.787136644e-04f, -1.191952126e-03f, +9.243255382e-04f, -2.279066910e-04f, -2.203761488e-04f, +2.583032615e-04f, -1.164644421e-04f, +1.975036269e-05f, /* 12, 6 (28) */ -2.028622066e-04f, +2.016142420e-03f, -3.266806186e-03f, -1.263259257e-05f, +8.376479423e-03f, -1.378336339e-02f, +4.097274693e-03f, +2.165833590e-02f, -4.178900058e-02f, +2.257271131e-02f, +4.915698701e-02f, -1.366341803e-01f, +1.437652505e-01f, +6.682579602e-01f, +3.818931927e-01f, -1.172515252e-01f, -2.140128510e-02f, +6.399526762e-02f, -3.981901140e-02f, -6.277276711e-04f, +2.068691286e-02f, -1.574707089e-02f, +2.041504654e-03f, +5.554354587e-03f, -4.667409396e-03f, +9.930664343e-04f, +8.130833721e-04f, -5.749587588e-04f, -6.155665152e-05f, +1.012057341e-05f, +2.068810931e-04f, -4.302795444e-04f, +2.430193108e-04f, +5.781530785e-04f, -1.464366781e-03f, +1.149848588e-03f, +1.107318143e-03f, -4.015647081e-03f, +4.085519624e-03f, +2.566473571e-03f, -1.860533153e-02f, -6.752993596e-03f, +1.959612522e-02f, +6.323465047e-03f, -7.053141674e-03f, +2.314625740e-03f, +1.545803574e-03f, -2.359677465e-03f, +1.081440572e-03f, +3.244589710e-04f, -7.665099949e-04f, +4.279943131e-04f, +7.658595322e-06f, -1.602155927e-04f, +9.699801152e-05f, -1.742350407e-05f, +2.028622066e-04f, -2.036504974e-03f, +5.175364526e-03f, -4.716453062e-03f, -3.460201569e-03f, +1.574639297e-02f, -1.985195857e-02f, +5.492883374e-03f, +2.167805749e-02f, -3.945352845e-02f, +2.758686121e-02f, +1.030668545e-02f, -4.523371000e-02f, +4.715974396e-02f, -1.315333240e-02f, -2.895052926e-02f, +4.577950169e-02f, -2.775233074e-02f, -5.495581009e-03f, +2.620854641e-02f, -2.302040941e-02f, +6.081424687e-03f, +7.480428750e-03f, -9.676928418e-03f, +4.558850994e-03f, +2.323085540e-04f, -1.438973742e-03f, +5.749587588e-04f, +6.155665152e-05f, -9.311119447e-05f, -1.299063660e-04f, +5.540611438e-04f, -7.784601854e-04f, +2.798718401e-04f, +9.369513494e-04f, -1.981886117e-03f, +1.663490005e-03f, +2.872800010e-04f, -2.582506499e-03f, +3.250891791e-03f, -1.435861754e-03f, -1.616767842e-03f, +3.507443127e-03f, -2.782214148e-03f, +1.820058337e-04f, +2.131234238e-03f, -2.533743915e-03f, +1.177267952e-03f, +5.014282841e-04f, -1.244076270e-03f, +9.049474690e-04f, -1.826792043e-04f, -2.517675669e-04f, +2.669675349e-04f, -1.135328592e-04f, +1.742350407e-05f, /* 12, 7 (28) */ -2.644188582e-04f, +2.026262994e-03f, -3.059925093e-03f, -4.429121370e-04f, +8.619498734e-03f, -1.320521031e-02f, +2.632907913e-03f, +2.280818449e-02f, -4.068168244e-02f, +1.855706423e-02f, +5.324250664e-02f, -1.340677067e-01f, +1.251599190e-01f, +6.615049666e-01f, +4.014893179e-01f, -1.109280601e-01f, -2.845442678e-02f, +6.630989336e-02f, -3.827320782e-02f, -2.987405136e-03f, +2.176835343e-02f, -1.542261192e-02f, +1.274994659e-03f, +5.982348900e-03f, -4.659750801e-03f, +8.328508416e-04f, +9.100813836e-04f, -5.923822628e-04f, -5.692295785e-05f, -4.191045679e-07f, +2.148123063e-04f, -4.157748484e-04f, +1.962620639e-04f, +6.261811852e-04f, -1.444477025e-03f, +1.020255514e-03f, +1.271641366e-03f, -4.013491294e-03f, +3.741586035e-03f, +3.097167353e-03f, -1.820391845e-02f, -7.740175145e-03f, +1.932007553e-02f, +7.091984704e-03f, -7.113238123e-03f, +2.057001262e-03f, +1.759031996e-03f, -2.395847519e-03f, +1.002109424e-03f, +4.054345159e-04f, -7.919972572e-04f, +4.109531747e-04f, +3.096321530e-05f, -1.705544752e-04f, +9.671068632e-05f, -1.483682833e-05f, +2.644188582e-04f, -2.129616169e-03f, +5.045458160e-03f, -4.162391918e-03f, -4.238661754e-03f, +1.602626481e-02f, -1.891500722e-02f, +3.510997257e-03f, +2.334154750e-02f, -3.916624845e-02f, +2.500435471e-02f, +1.355757724e-02f, -4.666957176e-02f, +4.554297612e-02f, -9.645889277e-03f, -3.173274341e-02f, +4.596150752e-02f, -2.562109651e-02f, -8.029324923e-03f, +2.738581436e-02f, -2.251898112e-02f, +4.837348417e-03f, +8.385376219e-03f, -9.859607622e-03f, +4.307083428e-03f, +4.992760890e-04f, -1.552506601e-03f, +5.923822628e-04f, +5.692295785e-05f, -7.737722171e-05f, -1.524507642e-04f, +5.608916427e-04f, -7.396427412e-04f, +1.936784465e-04f, +1.017471423e-03f, -1.973947623e-03f, +1.529480302e-03f, +4.801655327e-04f, -2.690996815e-03f, +3.169612698e-03f, -1.200121368e-03f, -1.843051590e-03f, +3.560758106e-03f, -2.633125982e-03f, -4.713329735e-05f, +2.275679629e-03f, -2.517617312e-03f, +1.052761539e-03f, +6.233176040e-04f, -1.290604166e-03f, +8.803809735e-04f, -1.353531788e-04f, -2.826899302e-04f, +2.743822870e-04f, -1.097219377e-04f, +1.483682833e-05f, /* 12, 8 (28) */ -3.213418160e-04f, +2.025843889e-03f, -2.845112787e-03f, -8.586869854e-04f, +8.815760798e-03f, -1.257902913e-02f, +1.188430887e-03f, +2.382844000e-02f, -3.941004108e-02f, +1.454357293e-02f, +5.698409267e-02f, -1.309705394e-01f, +1.069560005e-01f, +6.537647915e-01f, +4.208093934e-01f, -1.038360754e-01f, -3.556766490e-02f, +6.836689462e-02f, -3.651417583e-02f, -5.383252654e-03f, +2.277046285e-02f, -1.501717740e-02f, +4.829974021e-04f, +6.393302074e-03f, -4.628787586e-03f, +6.622963664e-04f, +1.006792070e-03f, -6.072190912e-04f, -5.218500633e-05f, -1.055037285e-05f, +2.214149336e-04f, -3.996628950e-04f, +1.497569375e-04f, +6.701351241e-04f, -1.418265244e-03f, +8.886410456e-04f, +1.426704663e-03f, -3.993150278e-03f, +3.389396395e-03f, +3.598246142e-03f, -1.776284596e-02f, -8.705529283e-03f, +1.899302076e-02f, +7.861189361e-03f, -7.143034629e-03f, +1.783923012e-03f, +1.968623882e-03f, -2.421481573e-03f, +9.162821881e-04f, +4.863256222e-04f, -8.142663520e-04f, +3.914077491e-04f, +5.484161054e-05f, -1.803728297e-04f, +9.586019359e-05f, -1.199495602e-05f, +3.213418160e-04f, -2.206993390e-03f, +4.893007396e-03f, -3.601500275e-03f, -4.978304495e-03f, +1.621994326e-02f, -1.789753580e-02f, +1.537049634e-03f, +2.487102780e-02f, -3.868608292e-02f, +2.231335790e-02f, +1.672718993e-02f, -4.786969313e-02f, +4.369992453e-02f, -6.085131171e-03f, -3.436586939e-02f, +4.591437422e-02f, -2.334541688e-02f, -1.054694224e-02f, +2.843857590e-02f, -2.189566352e-02f, +3.546744251e-03f, +9.265757193e-03f, -9.994960801e-03f, +4.024393497e-03f, +7.736583760e-04f, -1.662228538e-03f, +6.072190912e-04f, +5.218500633e-05f, -6.180389510e-05f, -1.734493045e-04f, +5.645619254e-04f, -6.978114977e-04f, +1.080656606e-04f, +1.091552273e-03f, -1.956075280e-03f, +1.389121404e-03f, +6.690339518e-04f, -2.785240741e-03f, +3.072701960e-03f, -9.588803138e-04f, -2.059942603e-03f, +3.596175871e-03f, -2.470224928e-03f, -2.772471895e-04f, +2.409612213e-03f, -2.488482851e-03f, +9.213828945e-04f, +7.437299621e-04f, -1.331194103e-03f, +8.506542926e-04f, -8.613951762e-05f, -3.129535284e-04f, +2.804599254e-04f, -1.050203171e-04f, +1.199495602e-05f, /* 12, 9 (28) */ -3.735268223e-04f, +2.015293516e-03f, -2.623697853e-03f, -1.258349880e-03f, +8.965517735e-03f, -1.190889400e-02f, -2.298343566e-04f, +2.471708105e-02f, -3.798333641e-02f, +1.055042265e-02f, +6.037348907e-02f, -1.273722932e-01f, +8.919315458e-02f, +6.450592622e-01f, +4.398024142e-01f, -9.597488606e-02f, -4.271069953e-02f, +7.015081764e-02f, -3.454555195e-02f, -7.804734227e-03f, +2.368674504e-02f, -1.453085178e-02f, -3.312689499e-04f, +6.784709823e-03f, -4.573945975e-03f, +4.819235367e-04f, +1.102652264e-03f, -6.192140472e-04f, -4.737560409e-05f, -2.023359148e-05f, +2.266970762e-04f, -3.820680803e-04f, +1.037230035e-04f, +7.098987788e-04f, -1.385990967e-03f, +7.556590677e-04f, +1.571987000e-03f, -3.955101323e-03f, +3.030660260e-03f, +4.068636115e-03f, -1.728398750e-02f, -9.646374929e-03f, +1.861548917e-02f, +8.628569271e-03f, -7.141610102e-03f, +1.496273273e-03f, +2.173530669e-03f, -2.436238526e-03f, +8.242297451e-04f, +5.667383000e-04f, -8.331287663e-04f, +3.693886228e-04f, +7.918770840e-05f, -1.895993105e-04f, +9.442811283e-05f, -8.904436267e-06f, +3.735268223e-04f, -2.268797285e-03f, +4.719558091e-03f, -3.036938350e-03f, -5.676115993e-03f, +1.632800892e-02f, -1.680598353e-02f, -4.190256462e-04f, +2.626014920e-02f, -3.801704897e-02f, +1.952811716e-02f, +1.979989189e-02f, -4.882857344e-02f, +4.163998193e-02f, -2.488955300e-03f, -3.683609432e-02f, +4.563712703e-02f, -2.093580466e-02f, -1.303542509e-02f, +2.935995880e-02f, -2.115193356e-02f, +2.215550148e-03f, +1.011641149e-02f, -1.008110032e-02f, +3.711439969e-03f, +1.054118301e-03f, -1.767248856e-03f, +6.192140472e-04f, +4.737560409e-05f, -4.647954436e-05f, -1.928296731e-04f, +5.651316816e-04f, -6.532534799e-04f, +2.347236056e-05f, +1.158906659e-03f, -1.928486842e-03f, +1.243199610e-03f, +8.529515726e-04f, -2.864844789e-03f, +2.960719855e-03f, -7.133814587e-04f, -2.266338921e-03f, +3.613490558e-03f, -2.294299080e-03f, -5.071604885e-04f, +2.532266599e-03f, -2.446369913e-03f, +7.837362753e-04f, +8.620125415e-04f, -1.365530751e-03f, +8.158245201e-04f, -3.526457500e-05f, -3.423673458e-04f, +2.851182762e-04f, -9.942219887e-05f, +8.904436267e-06f, /* 12,10 (28) */ -4.209024264e-04f, +1.995059925e-03f, -2.397000777e-03f, -1.640417961e-03f, +9.069240739e-03f, -1.119899522e-02f, -1.615825324e-03f, +2.547274011e-02f, -3.641134941e-02f, +6.595321331e-03f, +6.340414933e-02f, -1.233036571e-01f, +7.190916708e-02f, +6.354128872e-01f, +4.584179034e-01f, -8.734631679e-02f, -4.985230963e-02f, +7.164709091e-02f, -3.237202128e-02f, -1.024097275e-02f, +2.451097478e-02f, -1.396411348e-02f, -1.164397716e-03f, +7.154098446e-03f, -4.494758267e-03f, +2.923242262e-04f, +1.197080376e-03f, -6.281184835e-04f, -4.252669699e-05f, -2.943295419e-05f, +2.306734722e-04f, -3.631189019e-04f, +5.837165877e-05f, +7.453788393e-04f, -1.347936973e-03f, +6.219565921e-04f, +1.707022422e-03f, -3.899890411e-03f, +2.667077432e-03f, +4.507393009e-03f, -1.676932219e-02f, -1.056011508e-02f, +1.818817593e-02f, +9.391585822e-03f, -7.108146529e-03f, +1.195017402e-03f, +2.372703831e-03f, -2.439821533e-03f, +7.262585434e-04f, +6.462721396e-04f, -8.484084206e-04f, +3.449397811e-04f, +1.038898739e-04f, -1.981634645e-04f, +9.239877388e-05f, -5.573777025e-06f, +4.209024264e-04f, -2.315276830e-03f, +4.526728418e-03f, -2.471806669e-03f, -6.329369473e-03f, +1.635148128e-02f, -1.564707687e-02f, -2.347512488e-03f, +2.750334881e-02f, -3.716409739e-02f, +1.666327237e-02f, +2.276061175e-02f, -4.954195490e-02f, +3.937364301e-02f, +1.124535258e-03f, -3.913039340e-02f, +4.512996655e-02f, -1.840353806e-02f, -1.548179500e-02f, +3.014369507e-02f, -2.028992102e-02f, +8.500193977e-04f, +1.093223601e-02f, -1.011636489e-02f, +3.369072623e-03f, +1.339236578e-03f, -1.866671054e-03f, +6.281184835e-04f, +4.252669699e-05f, -3.148799859e-05f, -2.105309957e-04f, +5.626764120e-04f, -6.062645651e-04f, -5.967576009e-05f, +1.219287120e-03f, -1.891448198e-03f, +1.092522140e-03f, +1.031017933e-03f, -2.929493549e-03f, +2.834302082e-03f, -4.648867336e-04f, -2.461193263e-03f, +3.612589519e-03f, -2.106206468e-03f, -7.356928729e-04f, +2.642930742e-03f, -2.391376140e-03f, +6.404658755e-04f, +9.775148784e-04f, -1.393327309e-03f, +7.759778291e-04f, +1.703079537e-05f, -3.707401563e-04f, +2.882812579e-04f, -9.292757299e-05f, +5.573777025e-06f, /* 12,11 (28) */ -4.634291234e-04f, +1.965626971e-03f, -2.166327305e-03f, -2.003536863e-03f, +9.127612398e-03f, -1.045361638e-02f, -2.963762297e-03f, +2.609469671e-02f, -3.470432699e-02f, +2.695430920e-03f, +6.607122676e-02f, -1.187962641e-01f, +5.513984490e-02f, +6.248527722e-01f, +4.766060793e-01f, -7.795473097e-02f, -5.696045616e-02f, +7.284210831e-02f, -2.999931745e-02f, -1.268079429e-02f, +2.523723333e-02f, -1.331784134e-02f, -2.012806137e-03f, +7.499038227e-03f, -4.390868393e-03f, +9.416076170e-05f, +1.289479150e-03f, -6.336922605e-04f, -3.766920629e-05f, -3.811656467e-05f, +2.333652264e-04f, -3.429471964e-04f, +1.390575777e-05f, +7.765047531e-04f, -1.304407456e-03f, +4.881708689e-04f, +1.831401118e-03f, -3.828128510e-03f, +2.300331234e-03f, +4.913703855e-03f, -1.622092695e-02f, -1.144424563e-02f, +1.771194149e-02f, +1.014768050e-02f, -7.041933861e-03f, +8.812012801e-04f, +2.565099662e-03f, -2.431980281e-03f, +6.227098544e-04f, +7.245221393e-04f, -8.599428424e-04f, +3.181187218e-04f, +1.288313475e-04f, -2.059961522e-04f, +8.975944697e-05f, -2.013463527e-06f, +4.634291234e-04f, -2.346764828e-03f, +4.316197423e-03f, -1.909130257e-03f, -6.935634038e-03f, +1.629180552e-02f, -1.442778975e-02f, -4.238960687e-03f, +2.859587095e-02f, -3.613307946e-02f, +1.373377882e-02f, +2.559491383e-02f, -5.000684163e-02f, +3.691244974e-02f, +4.737124778e-03f, -4.123659986e-02f, +4.439427367e-02f, -1.576060732e-02f, -1.787317114e-02f, +3.078416095e-02f, -1.931240614e-02f, -5.433079116e-04f, +1.170821383e-02f, -1.009933410e-02f, +2.998332467e-03f, +1.627517835e-03f, -1.959598627e-03f, +6.336922605e-04f, +3.766920629e-05f, -1.690820033e-05f, -2.265038872e-04f, +5.572866306e-04f, -5.571476709e-04f, -1.409682746e-04f, +1.272486715e-03f, -1.845271380e-03f, +9.379126719e-04f, +1.202370254e-03f, -2.978950855e-03f, +2.694156138e-03f, -2.146705087e-04f, -2.643518461e-03f, +3.593454033e-03f, -1.906870778e-03f, -9.616652248e-04f, +2.740950072e-03f, -2.323667529e-03f, +4.922528271e-04f, +1.089592404e-03f, -1.414327532e-03f, +7.312295386e-04f, +7.049229540e-05f, -3.978816489e-04f, +2.898795343e-04f, -8.554241336e-05f, +2.013463527e-06f, /* 12,12 (28) */ -5.010983297e-04f, +1.927510406e-03f, -1.932962079e-03f, -2.346484059e-03f, +9.141518155e-03f, -9.677111632e-03f, -4.268169753e-03f, +2.658286758e-02f, -3.287292587e-02f, -1.132697590e-03f, +6.837155799e-02f, -1.138825602e-01f, +3.891891795e-02f, +6.134085265e-01f, +4.943180208e-01f, -6.780705047e-02f, -6.400239002e-02f, +7.372330959e-02f, -2.743421778e-02f, -1.511277457e-02f, +2.585994318e-02f, -1.259331920e-02f, -2.872748979e-03f, +7.817156949e-03f, -4.262037045e-03f, -1.118353905e-04f, +1.379238597e-03f, -6.357057240e-04f, -3.283287688e-05f, -4.625648846e-05f, +2.347995131e-04f, -3.216873788e-04f, -2.948119133e-05f, +8.032285666e-04f, -1.255726135e-03f, +3.549265999e-04f, +1.944770211e-03f, -3.740487645e-03f, +1.932081960e-03f, +5.286888184e-03f, -1.564096834e-02f, -1.229636377e-02f, +1.718780930e-02f, +1.089428401e-02f, -6.942374530e-03f, +5.559483860e-04f, +2.749684116e-03f, -2.412513083e-03f, +5.139588436e-04f, +8.010805940e-04f, -8.675842964e-04f, +2.889965021e-04f, +1.538907230e-04f, -2.130299734e-04f, +8.650052123e-05f, +1.764035475e-06f, +5.010983297e-04f, -2.363673029e-03f, +4.089693535e-03f, -1.351843626e-03f, -7.492781709e-03f, +1.615083724e-02f, -1.315530303e-02f, -6.084232066e-03f, +2.953378363e-02f, -3.493070921e-02f, +1.075482796e-02f, +2.828906997e-02f, -5.022151214e-02f, +3.426893128e-02f, +8.330578811e-03f, -4.314347064e-02f, +4.343260845e-02f, -1.301965725e-02f, -2.019683867e-02f, +3.127641377e-02f, -1.822281373e-02f, -1.957635444e-03f, +1.243944337e-02f, -1.002884180e-02f, +2.600450818e-03f, +1.917397370e-03f, -2.045141041e-03f, +6.357057240e-04f, +3.283287688e-05f, -2.813861650e-06f, -2.407104306e-04f, +5.490669975e-04f, -5.062109379e-04f, -2.200119860e-04f, +1.318339542e-03f, -1.790312330e-03f, +7.802068301e-04f, +1.366187658e-03f, -3.013060547e-03f, +2.541057314e-03f, +3.598708343e-05f, -2.812392575e-03f, +3.556159520e-03f, -1.697276728e-03f, -1.183905825e-03f, +2.825731336e-03f, -2.243478158e-03f, +3.398119693e-04f, +1.197610003e-03f, -1.428307611e-03f, +6.817240173e-04f, +1.248533379e-04f, -4.236035727e-04f, +2.898511448e-04f, -7.727883873e-05f, -1.764035475e-06f, /* 12,13 (28) */ -5.339312066e-04f, +1.881253918e-03f, -1.698162565e-03f, -2.668171438e-03f, +9.112036964e-03f, -8.873883065e-03f, -5.523895888e-03f, +2.693779418e-02f, -3.092815566e-02f, -4.873185235e-03f, +7.030363995e-02f, -1.085956721e-01f, +2.327794960e-02f, +6.011121628e-01f, +5.115058301e-01f, -5.691276645e-02f, -7.094476455e-02f, +7.427925798e-02f, -2.468453367e-02f, -1.752528765e-02f, +2.637390203e-02f, -1.179223861e-02f, -3.740333276e-03f, +8.106153451e-03f, -4.108146322e-03f, -3.248653639e-04f, +1.465739118e-03f, -6.339416885e-04f, -2.804613760e-05f, -5.382878091e-05f, +2.350092550e-04f, -2.994756875e-04f, -7.160576514e-05f, +8.255246579e-04f, -1.202234304e-03f, +2.228332636e-04f, +2.046834271e-03f, -3.637696777e-03f, +1.563960519e-03f, +5.626398709e-03f, -1.503169408e-02f, -1.311417610e-02f, +1.661696301e-02f, +1.162882552e-02f, -6.808987577e-03f, +2.204564815e-04f, +2.925437697e-03f, -2.381268781e-03f, +4.004134605e-04f, +8.755390372e-04f, -8.712008671e-04f, +2.576577157e-04f, +1.789424619e-04f, -2.191996958e-04f, +8.261567046e-05f, +5.744274138e-06f, +5.339312066e-04f, -2.366486890e-03f, +3.848983105e-03f, -8.027766284e-04f, -7.998992647e-03f, +1.593082526e-02f, -1.183696349e-02f, -7.874544396e-03f, +3.031399046e-02f, -3.356452155e-02f, +7.741767417e-03f, +3.083012728e-02f, -5.018552506e-02f, +3.145653871e-02f, +1.188673833e-02f, -4.484074737e-02f, +4.224870262e-02f, -1.019392592e-02f, -2.244031683e-02f, +3.161622574e-02f, -1.702520373e-02f, -3.385943055e-03f, +1.312116739e-02f, -9.903988465e-03f, +2.176847245e-03f, +2.207248515e-03f, -2.122419880e-03f, +6.339416885e-04f, +2.804613760e-05f, +1.072683668e-05f, -2.531240887e-04f, +5.381353907e-04f, -4.537659197e-04f, -2.964327627e-04f, +1.356721015e-03f, -1.726968476e-03f, +6.202476605e-04f, +1.521695141e-03f, -3.031746785e-03f, +2.375844364e-03f, +2.858068374e-04f, -2.966963659e-03f, +3.500875260e-03f, -1.478465097e-03f, -1.401256537e-03f, +2.896746143e-03f, -2.151109553e-03f, +1.838884019e-04f, +1.300945557e-03f, -1.435077914e-03f, +6.276344208e-04f, +1.798362973e-04f, -4.477208986e-04f, +2.881421043e-04f, -6.815523746e-05f, -5.744274138e-06f, /* 12,14 (28) */ -5.619773442e-04f, +1.827425137e-03f, -1.463153310e-03f, -2.967647125e-03f, +9.040431199e-03f, -8.048358407e-03f, -6.726130192e-03f, +2.716062744e-02f, -2.888132139e-02f, -8.510882012e-03f, +7.186760047e-02f, -1.029692733e-01f, +8.246255527e-03f, +5.879979867e-01f, +5.281227931e-01f, -4.528394094e-02f, -7.775375213e-02f, +7.449971446e-02f, -2.175909597e-02f, -1.990655643e-02f, +2.677431549e-02f, -1.091669957e-02f, -4.611534143e-03f, +8.363811167e-03f, -3.929203860e-03f, -5.440650596e-04f, +1.548354789e-03f, -6.281974144e-04f, -2.333597420e-05f, -6.081349163e-05f, +2.340327803e-04f, -2.764494391e-04f, -1.122952956e-04f, +8.433893668e-04f, -1.144288835e-03f, +9.248256318e-05f, +2.137355562e-03f, -3.520537505e-03f, +1.197562299e-03f, +5.931821479e-03f, -1.439542430e-02f, -1.389550624e-02f, +1.600074300e-02f, +1.234874197e-02f, -6.641412367e-03f, -1.240060706e-04f, +3.091360370e-03f, -2.338148458e-03f, +2.825131478e-04f, +9.474902263e-04f, -8.706774845e-04f, +2.242003990e-04f, +2.038574445e-04f, -2.244426840e-04f, +7.810200457e-05f, +9.910848994e-06f, +5.619773442e-04f, -2.355760054e-03f, +3.595859016e-03f, -2.646412378e-04f, -8.452758567e-03f, +1.563439249e-02f, -1.048024248e-02f, -9.601512872e-03f, +3.093423812e-02f, -3.204282641e-02f, +4.710020632e-03f, +3.320597165e-02f, -4.989971822e-02f, +2.848957505e-02f, +1.538761359e-02f, -4.631921247e-02f, +4.084744609e-02f, -7.297179773e-03f, -2.459142638e-02f, +3.180011415e-02f, -1.572425817e-02f, -4.821020969e-03f, +1.374880181e-02f, -9.724152168e-03f, +1.729126347e-03f, +2.495390619e-03f, -2.190575117e-03f, +6.281974144e-04f, +2.333597420e-05f, +2.365150215e-05f, -2.637295487e-04f, +5.246219214e-04f, -4.001257885e-04f, -3.698772374e-04f, +1.387547919e-03f, -1.655676099e-03f, +4.588811080e-04f, +1.668167263e-03f, -3.035013953e-03f, +2.199414847e-03f, +5.335171447e-04f, -3.106454162e-03f, +3.427863615e-03f, -1.251527446e-03f, -1.612578952e-03f, +2.953534189e-03f, -2.046929674e-03f, +2.525383672e-05f, +1.398993480e-03f, -1.434484554e-03f, +5.691622630e-04f, +2.351538494e-04f, -4.700529895e-04f, +2.847069707e-04f, -5.819635425e-05f, -9.910848994e-06f, /* 12,15 (28) */ -5.853133184e-04f, +1.766611645e-03f, -1.229120530e-03f, -3.244096564e-03f, +8.928135903e-03f, -7.204969040e-03f, -7.870419028e-03f, +2.725311000e-02f, -2.674396583e-02f, -1.203141952e-02f, +7.306516277e-02f, -9.703745187e-02f, -6.149168775e-03f, +5.741024804e-01f, +5.441235361e-01f, -3.293519897e-02f, -8.439516450e-02f, +7.437570839e-02f, -1.866773560e-02f, -2.224470489e-02f, +2.705682863e-02f, -9.969209342e-03f, -5.482211627e-03f, +8.588011566e-03f, -3.725346416e-03f, -7.685077437e-04f, +1.626456793e-03f, -6.182865654e-04f, -1.872781532e-05f, -6.719464614e-05f, +2.319134597e-04f, -2.527462967e-04f, -1.513884712e-04f, +8.568405247e-04f, -1.082260150e-03f, -3.555399392e-05f, +2.216154012e-03f, -3.389839611e-03f, +8.344412680e-04f, +6.202875502e-03f, -1.373454272e-02f, -1.463830204e-02f, +1.534064230e-02f, +1.305148748e-02f, -6.439411871e-03f, -4.761043494e-04f, +3.246476473e-03f, -2.283106929e-03f, +1.607273743e-04f, +1.016530165e-03f, -8.659168884e-04f, +1.887358662e-04f, +2.285035548e-04f, -2.286993269e-04f, +7.296020547e-05f, +1.424543170e-05f, +5.853133184e-04f, -2.332108551e-03f, +3.332129467e-03f, +2.599806836e-04f, -8.852884355e-03f, +1.526451526e-02f, -9.092694559e-03f, -1.125718897e-02f, +3.139311923e-02f, -3.037465914e-02f, +1.675006678e-03f, +3.540538649e-02f, -4.936620107e-02f, +2.538312089e-02f, +1.881547721e-02f, -4.757073991e-02f, +3.923486713e-02f, -4.343645584e-03f, -2.663835605e-02f, +3.182536798e-02f, -1.432526469e-02f, -6.255505523e-03f, +1.431796407e-02f, -9.488998318e-03f, +1.259073357e-03f, +2.780097590e-03f, -2.248771471e-03f, +6.182865654e-04f, +1.872781532e-05f, +3.590374314e-05f, -2.725225037e-04f, +5.086679019e-04f, -3.456035669e-04f, -4.400143631e-04f, +1.410778245e-03f, -1.576907531e-03f, +2.969515247e-04f, +1.804931542e-03f, -3.022946128e-03f, +2.012720185e-03f, +7.778606065e-04f, -3.230164922e-03f, +3.337478759e-03f, -1.017600555e-03f, -1.816760456e-03f, +2.995706134e-03f, -1.931371550e-03f, -1.352972326e-04f, +1.491168190e-03f, -1.426410791e-03f, +5.065368193e-04f, +2.905103963e-04f, -4.904247717e-04f, +2.795093741e-04f, -4.743333710e-05f, -1.424543170e-05f, /* 12,16 (28) */ -6.040411337e-04f, +1.699416999e-03f, -9.972070705e-04f, -3.496842861e-03f, +8.776747432e-03f, -6.348128516e-03f, -8.952679177e-03f, +2.721755601e-02f, -2.452781182e-02f, -1.542125913e-02f, +7.389960404e-02f, -9.083457637e-02f, -1.988371149e-02f, +5.594641784e-01f, +5.594641784e-01f, -1.988371149e-02f, -9.083457637e-02f, +7.389960404e-02f, -1.542125913e-02f, -2.452781182e-02f, +2.721755601e-02f, -8.952679177e-03f, -6.348128516e-03f, +8.776747432e-03f, -3.496842861e-03f, -9.972070705e-04f, +1.699416999e-03f, -6.040411337e-04f, -1.424543170e-05f, -7.296020547e-05f, +2.286993269e-04f, -2.285035548e-04f, -1.887358662e-04f, +8.659168884e-04f, -1.016530165e-03f, -1.607273743e-04f, +2.283106929e-03f, -3.246476473e-03f, +4.761043494e-04f, +6.439411871e-03f, -1.305148748e-02f, -1.534064230e-02f, +1.463830204e-02f, +1.373454272e-02f, -6.202875502e-03f, -8.344412680e-04f, +3.389839611e-03f, -2.216154012e-03f, +3.555399392e-05f, +1.082260150e-03f, -8.568405247e-04f, +1.513884712e-04f, +2.527462967e-04f, -2.319134597e-04f, +6.719464614e-05f, +1.872781532e-05f, +6.040411337e-04f, -2.296204808e-03f, +3.059606964e-03f, +7.686485855e-04f, -9.198487922e-03f, +1.482450089e-02f, -7.681916313e-03f, -1.283409650e-02f, +3.169007075e-02f, -2.856972760e-02f, -1.347939449e-03f, +3.741810668e-02f, -4.858834047e-02f, +2.215295597e-02f, +2.215295597e-02f, -4.858834047e-02f, +3.741810668e-02f, -1.347939449e-03f, -2.856972760e-02f, +3.169007075e-02f, -1.283409650e-02f, -7.681916313e-03f, +1.482450089e-02f, -9.198487922e-03f, +7.686485855e-04f, +3.059606964e-03f, -2.296204808e-03f, +6.040411337e-04f, +1.424543170e-05f, +4.743333710e-05f, -2.795093741e-04f, +4.904247717e-04f, -2.905103963e-04f, -5.065368193e-04f, +1.426410791e-03f, -1.491168190e-03f, +1.352972326e-04f, +1.931371550e-03f, -2.995706134e-03f, +1.816760456e-03f, +1.017600555e-03f, -3.337478759e-03f, +3.230164922e-03f, -7.778606065e-04f, -2.012720185e-03f, +3.022946128e-03f, -1.804931542e-03f, -2.969515247e-04f, +1.576907531e-03f, -1.410778245e-03f, +4.400143631e-04f, +3.456035669e-04f, -5.086679019e-04f, +2.725225037e-04f, -3.590374314e-05f, -1.872781532e-05f, /* 12,17 (28) */ -6.182865654e-04f, +1.626456793e-03f, -7.685077437e-04f, -3.725346416e-03f, +8.588011566e-03f, -5.482211627e-03f, -9.969209342e-03f, +2.705682863e-02f, -2.224470489e-02f, -1.866773560e-02f, +7.437570839e-02f, -8.439516450e-02f, -3.293519897e-02f, +5.441235361e-01f, +5.741024804e-01f, -6.149168775e-03f, -9.703745187e-02f, +7.306516277e-02f, -1.203141952e-02f, -2.674396583e-02f, +2.725311000e-02f, -7.870419028e-03f, -7.204969040e-03f, +8.928135903e-03f, -3.244096564e-03f, -1.229120530e-03f, +1.766611645e-03f, -5.853133184e-04f, -9.910848994e-06f, -7.810200457e-05f, +2.244426840e-04f, -2.038574445e-04f, -2.242003990e-04f, +8.706774845e-04f, -9.474902263e-04f, -2.825131478e-04f, +2.338148458e-03f, -3.091360370e-03f, +1.240060706e-04f, +6.641412367e-03f, -1.234874197e-02f, -1.600074300e-02f, +1.389550624e-02f, +1.439542430e-02f, -5.931821479e-03f, -1.197562299e-03f, +3.520537505e-03f, -2.137355562e-03f, -9.248256318e-05f, +1.144288835e-03f, -8.433893668e-04f, +1.122952956e-04f, +2.764494391e-04f, -2.340327803e-04f, +6.081349163e-05f, +2.333597420e-05f, +6.182865654e-04f, -2.248771471e-03f, +2.780097590e-03f, +1.259073357e-03f, -9.488998318e-03f, +1.431796407e-02f, -6.255505523e-03f, -1.432526469e-02f, +3.182536798e-02f, -2.663835605e-02f, -4.343645584e-03f, +3.923486713e-02f, -4.757073991e-02f, +1.881547721e-02f, +2.538312089e-02f, -4.936620107e-02f, +3.540538649e-02f, +1.675006678e-03f, -3.037465914e-02f, +3.139311923e-02f, -1.125718897e-02f, -9.092694559e-03f, +1.526451526e-02f, -8.852884355e-03f, +2.599806836e-04f, +3.332129467e-03f, -2.332108551e-03f, +5.853133184e-04f, +9.910848994e-06f, +5.819635425e-05f, -2.847069707e-04f, +4.700529895e-04f, -2.351538494e-04f, -5.691622630e-04f, +1.434484554e-03f, -1.398993480e-03f, -2.525383672e-05f, +2.046929674e-03f, -2.953534189e-03f, +1.612578952e-03f, +1.251527446e-03f, -3.427863615e-03f, +3.106454162e-03f, -5.335171447e-04f, -2.199414847e-03f, +3.035013953e-03f, -1.668167263e-03f, -4.588811080e-04f, +1.655676099e-03f, -1.387547919e-03f, +3.698772374e-04f, +4.001257885e-04f, -5.246219214e-04f, +2.637295487e-04f, -2.365150215e-05f, -2.333597420e-05f, /* 12,18 (28) */ -6.281974144e-04f, +1.548354789e-03f, -5.440650596e-04f, -3.929203860e-03f, +8.363811167e-03f, -4.611534143e-03f, -1.091669957e-02f, +2.677431549e-02f, -1.990655643e-02f, -2.175909597e-02f, +7.449971446e-02f, -7.775375213e-02f, -4.528394094e-02f, +5.281227931e-01f, +5.879979867e-01f, +8.246255527e-03f, -1.029692733e-01f, +7.186760047e-02f, -8.510882012e-03f, -2.888132139e-02f, +2.716062744e-02f, -6.726130192e-03f, -8.048358407e-03f, +9.040431199e-03f, -2.967647125e-03f, -1.463153310e-03f, +1.827425137e-03f, -5.619773442e-04f, -5.744274138e-06f, -8.261567046e-05f, +2.191996958e-04f, -1.789424619e-04f, -2.576577157e-04f, +8.712008671e-04f, -8.755390372e-04f, -4.004134605e-04f, +2.381268781e-03f, -2.925437697e-03f, -2.204564815e-04f, +6.808987577e-03f, -1.162882552e-02f, -1.661696301e-02f, +1.311417610e-02f, +1.503169408e-02f, -5.626398709e-03f, -1.563960519e-03f, +3.637696777e-03f, -2.046834271e-03f, -2.228332636e-04f, +1.202234304e-03f, -8.255246579e-04f, +7.160576514e-05f, +2.994756875e-04f, -2.350092550e-04f, +5.382878091e-05f, +2.804613760e-05f, +6.281974144e-04f, -2.190575117e-03f, +2.495390619e-03f, +1.729126347e-03f, -9.724152168e-03f, +1.374880181e-02f, -4.821020969e-03f, -1.572425817e-02f, +3.180011415e-02f, -2.459142638e-02f, -7.297179773e-03f, +4.084744609e-02f, -4.631921247e-02f, +1.538761359e-02f, +2.848957505e-02f, -4.989971822e-02f, +3.320597165e-02f, +4.710020632e-03f, -3.204282641e-02f, +3.093423812e-02f, -9.601512872e-03f, -1.048024248e-02f, +1.563439249e-02f, -8.452758567e-03f, -2.646412378e-04f, +3.595859016e-03f, -2.355760054e-03f, +5.619773442e-04f, +5.744274138e-06f, +6.815523746e-05f, -2.881421043e-04f, +4.477208986e-04f, -1.798362973e-04f, -6.276344208e-04f, +1.435077914e-03f, -1.300945557e-03f, -1.838884019e-04f, +2.151109553e-03f, -2.896746143e-03f, +1.401256537e-03f, +1.478465097e-03f, -3.500875260e-03f, +2.966963659e-03f, -2.858068374e-04f, -2.375844364e-03f, +3.031746785e-03f, -1.521695141e-03f, -6.202476605e-04f, +1.726968476e-03f, -1.356721015e-03f, +2.964327627e-04f, +4.537659197e-04f, -5.381353907e-04f, +2.531240887e-04f, -1.072683668e-05f, -2.804613760e-05f, /* 12,19 (28) */ -6.339416885e-04f, +1.465739118e-03f, -3.248653639e-04f, -4.108146322e-03f, +8.106153451e-03f, -3.740333276e-03f, -1.179223861e-02f, +2.637390203e-02f, -1.752528765e-02f, -2.468453367e-02f, +7.427925798e-02f, -7.094476455e-02f, -5.691276645e-02f, +5.115058301e-01f, +6.011121628e-01f, +2.327794960e-02f, -1.085956721e-01f, +7.030363995e-02f, -4.873185235e-03f, -3.092815566e-02f, +2.693779418e-02f, -5.523895888e-03f, -8.873883065e-03f, +9.112036964e-03f, -2.668171438e-03f, -1.698162565e-03f, +1.881253918e-03f, -5.339312066e-04f, -1.764035475e-06f, -8.650052123e-05f, +2.130299734e-04f, -1.538907230e-04f, -2.889965021e-04f, +8.675842964e-04f, -8.010805940e-04f, -5.139588436e-04f, +2.412513083e-03f, -2.749684116e-03f, -5.559483860e-04f, +6.942374530e-03f, -1.089428401e-02f, -1.718780930e-02f, +1.229636377e-02f, +1.564096834e-02f, -5.286888184e-03f, -1.932081960e-03f, +3.740487645e-03f, -1.944770211e-03f, -3.549265999e-04f, +1.255726135e-03f, -8.032285666e-04f, +2.948119133e-05f, +3.216873788e-04f, -2.347995131e-04f, +4.625648846e-05f, +3.283287688e-05f, +6.339416885e-04f, -2.122419880e-03f, +2.207248515e-03f, +2.176847245e-03f, -9.903988465e-03f, +1.312116739e-02f, -3.385943055e-03f, -1.702520373e-02f, +3.161622574e-02f, -2.244031683e-02f, -1.019392592e-02f, +4.224870262e-02f, -4.484074737e-02f, +1.188673833e-02f, +3.145653871e-02f, -5.018552506e-02f, +3.083012728e-02f, +7.741767417e-03f, -3.356452155e-02f, +3.031399046e-02f, -7.874544396e-03f, -1.183696349e-02f, +1.593082526e-02f, -7.998992647e-03f, -8.027766284e-04f, +3.848983105e-03f, -2.366486890e-03f, +5.339312066e-04f, +1.764035475e-06f, +7.727883873e-05f, -2.898511448e-04f, +4.236035727e-04f, -1.248533379e-04f, -6.817240173e-04f, +1.428307611e-03f, -1.197610003e-03f, -3.398119693e-04f, +2.243478158e-03f, -2.825731336e-03f, +1.183905825e-03f, +1.697276728e-03f, -3.556159520e-03f, +2.812392575e-03f, -3.598708343e-05f, -2.541057314e-03f, +3.013060547e-03f, -1.366187658e-03f, -7.802068301e-04f, +1.790312330e-03f, -1.318339542e-03f, +2.200119860e-04f, +5.062109379e-04f, -5.490669975e-04f, +2.407104306e-04f, +2.813861650e-06f, -3.283287688e-05f, /* 12,20 (28) */ -6.357057240e-04f, +1.379238597e-03f, -1.118353905e-04f, -4.262037045e-03f, +7.817156949e-03f, -2.872748979e-03f, -1.259331920e-02f, +2.585994318e-02f, -1.511277457e-02f, -2.743421778e-02f, +7.372330959e-02f, -6.400239002e-02f, -6.780705047e-02f, +4.943180208e-01f, +6.134085265e-01f, +3.891891795e-02f, -1.138825602e-01f, +6.837155799e-02f, -1.132697590e-03f, -3.287292587e-02f, +2.658286758e-02f, -4.268169753e-03f, -9.677111632e-03f, +9.141518155e-03f, -2.346484059e-03f, -1.932962079e-03f, +1.927510406e-03f, -5.010983297e-04f, +2.013463527e-06f, -8.975944697e-05f, +2.059961522e-04f, -1.288313475e-04f, -3.181187218e-04f, +8.599428424e-04f, -7.245221393e-04f, -6.227098544e-04f, +2.431980281e-03f, -2.565099662e-03f, -8.812012801e-04f, +7.041933861e-03f, -1.014768050e-02f, -1.771194149e-02f, +1.144424563e-02f, +1.622092695e-02f, -4.913703855e-03f, -2.300331234e-03f, +3.828128510e-03f, -1.831401118e-03f, -4.881708689e-04f, +1.304407456e-03f, -7.765047531e-04f, -1.390575777e-05f, +3.429471964e-04f, -2.333652264e-04f, +3.811656467e-05f, +3.766920629e-05f, +6.357057240e-04f, -2.045141041e-03f, +1.917397370e-03f, +2.600450818e-03f, -1.002884180e-02f, +1.243944337e-02f, -1.957635444e-03f, -1.822281373e-02f, +3.127641377e-02f, -2.019683867e-02f, -1.301965725e-02f, +4.343260845e-02f, -4.314347064e-02f, +8.330578811e-03f, +3.426893128e-02f, -5.022151214e-02f, +2.828906997e-02f, +1.075482796e-02f, -3.493070921e-02f, +2.953378363e-02f, -6.084232066e-03f, -1.315530303e-02f, +1.615083724e-02f, -7.492781709e-03f, -1.351843626e-03f, +4.089693535e-03f, -2.363673029e-03f, +5.010983297e-04f, -2.013463527e-06f, +8.554241336e-05f, -2.898795343e-04f, +3.978816489e-04f, -7.049229540e-05f, -7.312295386e-04f, +1.414327532e-03f, -1.089592404e-03f, -4.922528271e-04f, +2.323667529e-03f, -2.740950072e-03f, +9.616652248e-04f, +1.906870778e-03f, -3.593454033e-03f, +2.643518461e-03f, +2.146705087e-04f, -2.694156138e-03f, +2.978950855e-03f, -1.202370254e-03f, -9.379126719e-04f, +1.845271380e-03f, -1.272486715e-03f, +1.409682746e-04f, +5.571476709e-04f, -5.572866306e-04f, +2.265038872e-04f, +1.690820033e-05f, -3.766920629e-05f, /* 12,21 (28) */ -6.336922605e-04f, +1.289479150e-03f, +9.416076170e-05f, -4.390868393e-03f, +7.499038227e-03f, -2.012806137e-03f, -1.331784134e-02f, +2.523723333e-02f, -1.268079429e-02f, -2.999931745e-02f, +7.284210831e-02f, -5.696045616e-02f, -7.795473097e-02f, +4.766060793e-01f, +6.248527722e-01f, +5.513984490e-02f, -1.187962641e-01f, +6.607122676e-02f, +2.695430920e-03f, -3.470432699e-02f, +2.609469671e-02f, -2.963762297e-03f, -1.045361638e-02f, +9.127612398e-03f, -2.003536863e-03f, -2.166327305e-03f, +1.965626971e-03f, -4.634291234e-04f, +5.573777025e-06f, -9.239877388e-05f, +1.981634645e-04f, -1.038898739e-04f, -3.449397811e-04f, +8.484084206e-04f, -6.462721396e-04f, -7.262585434e-04f, +2.439821533e-03f, -2.372703831e-03f, -1.195017402e-03f, +7.108146529e-03f, -9.391585822e-03f, -1.818817593e-02f, +1.056011508e-02f, +1.676932219e-02f, -4.507393009e-03f, -2.667077432e-03f, +3.899890411e-03f, -1.707022422e-03f, -6.219565921e-04f, +1.347936973e-03f, -7.453788393e-04f, -5.837165877e-05f, +3.631189019e-04f, -2.306734722e-04f, +2.943295419e-05f, +4.252669699e-05f, +6.336922605e-04f, -1.959598627e-03f, +1.627517835e-03f, +2.998332467e-03f, -1.009933410e-02f, +1.170821383e-02f, -5.433079116e-04f, -1.931240614e-02f, +3.078416095e-02f, -1.787317114e-02f, -1.576060732e-02f, +4.439427367e-02f, -4.123659986e-02f, +4.737124778e-03f, +3.691244974e-02f, -5.000684163e-02f, +2.559491383e-02f, +1.373377882e-02f, -3.613307946e-02f, +2.859587095e-02f, -4.238960687e-03f, -1.442778975e-02f, +1.629180552e-02f, -6.935634038e-03f, -1.909130257e-03f, +4.316197423e-03f, -2.346764828e-03f, +4.634291234e-04f, -5.573777025e-06f, +9.292757299e-05f, -2.882812579e-04f, +3.707401563e-04f, -1.703079537e-05f, -7.759778291e-04f, +1.393327309e-03f, -9.775148784e-04f, -6.404658755e-04f, +2.391376140e-03f, -2.642930742e-03f, +7.356928729e-04f, +2.106206468e-03f, -3.612589519e-03f, +2.461193263e-03f, +4.648867336e-04f, -2.834302082e-03f, +2.929493549e-03f, -1.031017933e-03f, -1.092522140e-03f, +1.891448198e-03f, -1.219287120e-03f, +5.967576009e-05f, +6.062645651e-04f, -5.626764120e-04f, +2.105309957e-04f, +3.148799859e-05f, -4.252669699e-05f, /* 12,22 (28) */ -6.281184835e-04f, +1.197080376e-03f, +2.923242262e-04f, -4.494758267e-03f, +7.154098446e-03f, -1.164397716e-03f, -1.396411348e-02f, +2.451097478e-02f, -1.024097275e-02f, -3.237202128e-02f, +7.164709091e-02f, -4.985230963e-02f, -8.734631679e-02f, +4.584179034e-01f, +6.354128872e-01f, +7.190916708e-02f, -1.233036571e-01f, +6.340414933e-02f, +6.595321331e-03f, -3.641134941e-02f, +2.547274011e-02f, -1.615825324e-03f, -1.119899522e-02f, +9.069240739e-03f, -1.640417961e-03f, -2.397000777e-03f, +1.995059925e-03f, -4.209024264e-04f, +8.904436267e-06f, -9.442811283e-05f, +1.895993105e-04f, -7.918770840e-05f, -3.693886228e-04f, +8.331287663e-04f, -5.667383000e-04f, -8.242297451e-04f, +2.436238526e-03f, -2.173530669e-03f, -1.496273273e-03f, +7.141610102e-03f, -8.628569271e-03f, -1.861548917e-02f, +9.646374929e-03f, +1.728398750e-02f, -4.068636115e-03f, -3.030660260e-03f, +3.955101323e-03f, -1.571987000e-03f, -7.556590677e-04f, +1.385990967e-03f, -7.098987788e-04f, -1.037230035e-04f, +3.820680803e-04f, -2.266970762e-04f, +2.023359148e-05f, +4.737560409e-05f, +6.281184835e-04f, -1.866671054e-03f, +1.339236578e-03f, +3.369072623e-03f, -1.011636489e-02f, +1.093223601e-02f, +8.500193977e-04f, -2.028992102e-02f, +3.014369507e-02f, -1.548179500e-02f, -1.840353806e-02f, +4.512996655e-02f, -3.913039340e-02f, +1.124535258e-03f, +3.937364301e-02f, -4.954195490e-02f, +2.276061175e-02f, +1.666327237e-02f, -3.716409739e-02f, +2.750334881e-02f, -2.347512488e-03f, -1.564707687e-02f, +1.635148128e-02f, -6.329369473e-03f, -2.471806669e-03f, +4.526728418e-03f, -2.315276830e-03f, +4.209024264e-04f, -8.904436267e-06f, +9.942219887e-05f, -2.851182762e-04f, +3.423673458e-04f, +3.526457500e-05f, -8.158245201e-04f, +1.365530751e-03f, -8.620125415e-04f, -7.837362753e-04f, +2.446369913e-03f, -2.532266599e-03f, +5.071604885e-04f, +2.294299080e-03f, -3.613490558e-03f, +2.266338921e-03f, +7.133814587e-04f, -2.960719855e-03f, +2.864844789e-03f, -8.529515726e-04f, -1.243199610e-03f, +1.928486842e-03f, -1.158906659e-03f, -2.347236056e-05f, +6.532534799e-04f, -5.651316816e-04f, +1.928296731e-04f, +4.647954436e-05f, -4.737560409e-05f, /* 12,23 (28) */ -6.192140472e-04f, +1.102652264e-03f, +4.819235367e-04f, -4.573945975e-03f, +6.784709823e-03f, -3.312689499e-04f, -1.453085178e-02f, +2.368674504e-02f, -7.804734227e-03f, -3.454555195e-02f, +7.015081764e-02f, -4.271069953e-02f, -9.597488606e-02f, +4.398024142e-01f, +6.450592622e-01f, +8.919315458e-02f, -1.273722932e-01f, +6.037348907e-02f, +1.055042265e-02f, -3.798333641e-02f, +2.471708105e-02f, -2.298343566e-04f, -1.190889400e-02f, +8.965517735e-03f, -1.258349880e-03f, -2.623697853e-03f, +2.015293516e-03f, -3.735268223e-04f, +1.199495602e-05f, -9.586019359e-05f, +1.803728297e-04f, -5.484161054e-05f, -3.914077491e-04f, +8.142663520e-04f, -4.863256222e-04f, -9.162821881e-04f, +2.421481573e-03f, -1.968623882e-03f, -1.783923012e-03f, +7.143034629e-03f, -7.861189361e-03f, -1.899302076e-02f, +8.705529283e-03f, +1.776284596e-02f, -3.598246142e-03f, -3.389396395e-03f, +3.993150278e-03f, -1.426704663e-03f, -8.886410456e-04f, +1.418265244e-03f, -6.701351241e-04f, -1.497569375e-04f, +3.996628950e-04f, -2.214149336e-04f, +1.055037285e-05f, +5.218500633e-05f, +6.192140472e-04f, -1.767248856e-03f, +1.054118301e-03f, +3.711439969e-03f, -1.008110032e-02f, +1.011641149e-02f, +2.215550148e-03f, -2.115193356e-02f, +2.935995880e-02f, -1.303542509e-02f, -2.093580466e-02f, +4.563712703e-02f, -3.683609432e-02f, -2.488955300e-03f, +4.163998193e-02f, -4.882857344e-02f, +1.979989189e-02f, +1.952811716e-02f, -3.801704897e-02f, +2.626014920e-02f, -4.190256462e-04f, -1.680598353e-02f, +1.632800892e-02f, -5.676115993e-03f, -3.036938350e-03f, +4.719558091e-03f, -2.268797285e-03f, +3.735268223e-04f, -1.199495602e-05f, +1.050203171e-04f, -2.804599254e-04f, +3.129535284e-04f, +8.613951762e-05f, -8.506542926e-04f, +1.331194103e-03f, -7.437299621e-04f, -9.213828945e-04f, +2.488482851e-03f, -2.409612213e-03f, +2.772471895e-04f, +2.470224928e-03f, -3.596175871e-03f, +2.059942603e-03f, +9.588803138e-04f, -3.072701960e-03f, +2.785240741e-03f, -6.690339518e-04f, -1.389121404e-03f, +1.956075280e-03f, -1.091552273e-03f, -1.080656606e-04f, +6.978114977e-04f, -5.645619254e-04f, +1.734493045e-04f, +6.180389510e-05f, -5.218500633e-05f, /* 12,24 (28) */ -6.072190912e-04f, +1.006792070e-03f, +6.622963664e-04f, -4.628787586e-03f, +6.393302074e-03f, +4.829974021e-04f, -1.501717740e-02f, +2.277046285e-02f, -5.383252654e-03f, -3.651417583e-02f, +6.836689462e-02f, -3.556766490e-02f, -1.038360754e-01f, +4.208093934e-01f, +6.537647915e-01f, +1.069560005e-01f, -1.309705394e-01f, +5.698409267e-02f, +1.454357293e-02f, -3.941004108e-02f, +2.382844000e-02f, +1.188430887e-03f, -1.257902913e-02f, +8.815760798e-03f, -8.586869854e-04f, -2.845112787e-03f, +2.025843889e-03f, -3.213418160e-04f, +1.483682833e-05f, -9.671068632e-05f, +1.705544752e-04f, -3.096321530e-05f, -4.109531747e-04f, +7.919972572e-04f, -4.054345159e-04f, -1.002109424e-03f, +2.395847519e-03f, -1.759031996e-03f, -2.057001262e-03f, +7.113238123e-03f, -7.091984704e-03f, -1.932007553e-02f, +7.740175145e-03f, +1.820391845e-02f, -3.097167353e-03f, -3.741586035e-03f, +4.013491294e-03f, -1.271641366e-03f, -1.020255514e-03f, +1.444477025e-03f, -6.261811852e-04f, -1.962620639e-04f, +4.157748484e-04f, -2.148123063e-04f, +4.191045679e-07f, +5.692295785e-05f, +6.072190912e-04f, -1.662228538e-03f, +7.736583760e-04f, +4.024393497e-03f, -9.994960801e-03f, +9.265757193e-03f, +3.546744251e-03f, -2.189566352e-02f, +2.843857590e-02f, -1.054694224e-02f, -2.334541688e-02f, +4.591437422e-02f, -3.436586939e-02f, -6.085131171e-03f, +4.369992453e-02f, -4.786969313e-02f, +1.672718993e-02f, +2.231335790e-02f, -3.868608292e-02f, +2.487102780e-02f, +1.537049634e-03f, -1.789753580e-02f, +1.621994326e-02f, -4.978304495e-03f, -3.601500275e-03f, +4.893007396e-03f, -2.206993390e-03f, +3.213418160e-04f, -1.483682833e-05f, +1.097219377e-04f, -2.743822870e-04f, +2.826899302e-04f, +1.353531788e-04f, -8.803809735e-04f, +1.290604166e-03f, -6.233176040e-04f, -1.052761539e-03f, +2.517617312e-03f, -2.275679629e-03f, +4.713329735e-05f, +2.633125982e-03f, -3.560758106e-03f, +1.843051590e-03f, +1.200121368e-03f, -3.169612698e-03f, +2.690996815e-03f, -4.801655327e-04f, -1.529480302e-03f, +1.973947623e-03f, -1.017471423e-03f, -1.936784465e-04f, +7.396427412e-04f, -5.608916427e-04f, +1.524507642e-04f, +7.737722171e-05f, -5.692295785e-05f, /* 12,25 (28) */ -5.923822628e-04f, +9.100813836e-04f, +8.328508416e-04f, -4.659750801e-03f, +5.982348900e-03f, +1.274994659e-03f, -1.542261192e-02f, +2.176835343e-02f, -2.987405136e-03f, -3.827320782e-02f, +6.630989336e-02f, -2.845442678e-02f, -1.109280601e-01f, +4.014893179e-01f, +6.615049666e-01f, +1.251599190e-01f, -1.340677067e-01f, +5.324250664e-02f, +1.855706423e-02f, -4.068168244e-02f, +2.280818449e-02f, +2.632907913e-03f, -1.320521031e-02f, +8.619498734e-03f, -4.429121370e-04f, -3.059925093e-03f, +2.026262994e-03f, -2.644188582e-04f, +1.742350407e-05f, -9.699801152e-05f, +1.602155927e-04f, -7.658595322e-06f, -4.279943131e-04f, +7.665099949e-04f, -3.244589710e-04f, -1.081440572e-03f, +2.359677465e-03f, -1.545803574e-03f, -2.314625740e-03f, +7.053141674e-03f, -6.323465047e-03f, -1.959612522e-02f, +6.752993596e-03f, +1.860533153e-02f, -2.566473571e-03f, -4.085519624e-03f, +4.015647081e-03f, -1.107318143e-03f, -1.149848588e-03f, +1.464366781e-03f, -5.781530785e-04f, -2.430193108e-04f, +4.302795444e-04f, -2.068810931e-04f, -1.012057341e-05f, +6.155665152e-05f, +5.923822628e-04f, -1.552506601e-03f, +4.992760890e-04f, +4.307083428e-03f, -9.859607622e-03f, +8.385376219e-03f, +4.837348417e-03f, -2.251898112e-02f, +2.738581436e-02f, -8.029324923e-03f, -2.562109651e-02f, +4.596150752e-02f, -3.173274341e-02f, -9.645889277e-03f, +4.554297612e-02f, -4.666957176e-02f, +1.355757724e-02f, +2.500435471e-02f, -3.916624845e-02f, +2.334154750e-02f, +3.510997257e-03f, -1.891500722e-02f, +1.602626481e-02f, -4.238661754e-03f, -4.162391918e-03f, +5.045458160e-03f, -2.129616169e-03f, +2.644188582e-04f, -1.742350407e-05f, +1.135328592e-04f, -2.669675349e-04f, +2.517675669e-04f, +1.826792043e-04f, -9.049474690e-04f, +1.244076270e-03f, -5.014282841e-04f, -1.177267952e-03f, +2.533743915e-03f, -2.131234238e-03f, -1.820058337e-04f, +2.782214148e-03f, -3.507443127e-03f, +1.616767842e-03f, +1.435861754e-03f, -3.250891791e-03f, +2.582506499e-03f, -2.872800010e-04f, -1.663490005e-03f, +1.981886117e-03f, -9.369513494e-04f, -2.798718401e-04f, +7.784601854e-04f, -5.540611438e-04f, +1.299063660e-04f, +9.311119447e-05f, -6.155665152e-05f, /* 12,26 (28) */ -5.749587588e-04f, +8.130833721e-04f, +9.930664343e-04f, -4.667409396e-03f, +5.554354587e-03f, +2.041504654e-03f, -1.574707089e-02f, +2.068691286e-02f, -6.277276711e-04f, -3.981901140e-02f, +6.399526762e-02f, -2.140128510e-02f, -1.172515252e-01f, +3.818931927e-01f, +6.682579602e-01f, +1.437652505e-01f, -1.366341803e-01f, +4.915698701e-02f, +2.257271131e-02f, -4.178900058e-02f, +2.165833590e-02f, +4.097274693e-03f, -1.378336339e-02f, +8.376479423e-03f, -1.263259257e-05f, -3.266806186e-03f, +2.016142420e-03f, -2.028622066e-04f, +1.975036269e-05f, -9.674314000e-05f, +1.494280070e-04f, +1.497213655e-05f, -4.425137977e-04f, +7.380043028e-04f, -2.437847990e-04f, -1.154040886e-03f, +2.313354339e-03f, -1.329982526e-03f, -2.555999392e-03f, +6.963764219e-03f, -5.558102500e-03f, -1.982080948e-02f, +5.746740681e-03f, +1.896532500e-02f, -2.007365906e-03f, -4.419484716e-03f, +3.999212509e-03f, -9.343097736e-04f, -1.276762484e-03f, +1.477699978e-03f, -5.261896628e-04f, -2.898028574e-04f, +4.430574496e-04f, -1.976200705e-04f, -2.102528838e-05f, +6.605259312e-05f, +5.749587588e-04f, -1.438973742e-03f, +2.323085540e-04f, +4.558850994e-03f, -9.676928418e-03f, +7.480428750e-03f, +6.081424687e-03f, -2.302040941e-02f, +2.620854641e-02f, -5.495581009e-03f, -2.775233074e-02f, +4.577950169e-02f, -2.895052926e-02f, -1.315333240e-02f, +4.715974396e-02f, -4.523371000e-02f, +1.030668545e-02f, +2.758686121e-02f, -3.945352845e-02f, +2.167805749e-02f, +5.492883374e-03f, -1.985195857e-02f, +1.574639297e-02f, -3.460201569e-03f, -4.716453062e-03f, +5.175364526e-03f, -2.036504974e-03f, +2.028622066e-04f, -1.975036269e-05f, +1.164644421e-04f, -2.583032615e-04f, +2.203761488e-04f, +2.279066910e-04f, -9.243255382e-04f, +1.191952126e-03f, -3.787136644e-04f, -1.294340562e-03f, +2.536901083e-03f, -1.977090400e-03f, -4.090059313e-04f, +2.916775147e-03f, -3.436528816e-03f, +1.382242268e-03f, +1.664884210e-03f, -3.316057636e-03f, +2.460239749e-03f, -9.133959482e-05f, -1.790389534e-03f, +1.979722913e-03f, -8.503180963e-04f, -3.661959696e-04f, +8.139874555e-04f, -5.440272734e-04f, +1.058997420e-04f, +1.089134097e-04f, -6.605259312e-05f, /* 12,27 (28) */ -5.552083961e-04f, +7.163402321e-04f, +1.142494441e-03f, -4.652437260e-03f, +5.111840789e-03f, +2.779508957e-03f, -1.599085569e-02f, +1.953287197e-02f, +1.685626668e-03f, -4.114899392e-02f, +6.143926823e-02f, -1.443752088e-02f, -1.228096277e-01f, +3.620723832e-01f, +6.740047009e-01f, +1.627305755e-01f, -1.386415462e-01f, +4.473750230e-02f, +2.657192382e-02f, -4.272331036e-02f, +2.038157341e-02f, +5.574974672e-03f, -1.430955305e-02f, +8.086676566e-03f, +4.304248570e-04f, -3.464426257e-03f, +1.995117132e-03f, -1.368096135e-04f, +2.181467077e-05f, -9.596938431e-05f, +1.382636177e-04f, +3.683518294e-05f, -4.545072392e-04f, +7.066899060e-04f, -1.637879495e-04f, -1.219712128e-03f, +2.257300314e-03f, -1.112603523e-03f, -2.780412143e-03f, +6.846216993e-03f, -4.798322993e-03f, -1.999393623e-02f, +4.724238005e-03f, +1.928225905e-02f, -1.421169971e-03f, -4.741772964e-03f, +3.963857823e-03f, -7.532431649e-04f, -1.400338575e-03f, +1.484268751e-03f, -4.704523592e-04f, -3.363811173e-04f, +4.539946472e-04f, -1.870351037e-04f, -3.224806064e-05f, +7.037678577e-05f, +5.552083961e-04f, -1.322509300e-03f, -2.599470746e-05f, +4.779227143e-03f, -9.449021727e-03f, +6.556103212e-03f, +7.273376813e-03f, -2.339912307e-02f, +2.491420585e-02f, -2.958679925e-03f, -2.972942114e-02f, +4.537049576e-02f, -2.603375411e-02f, -1.658986122e-02f, +4.854198623e-02f, -4.356882579e-02f, +6.990627809e-03f, +3.004710096e-02f, -3.954486805e-02f, +1.988766796e-02f, +7.472606287e-03f, -2.070227667e-02f, +1.538019700e-02f, -2.646214113e-03f, -5.260480335e-03f, +5.281264268e-03f, -1.927591564e-03f, +1.368096135e-04f, -2.181467077e-05f, +1.185333513e-04f, -2.484817892e-04f, +1.887030176e-04f, +2.708410303e-04f, -9.385154098e-04f, +1.134597567e-03f, -2.558207948e-04f, -1.403462982e-03f, +2.527194232e-03f, -1.814106837e-03f, -6.327198303e-04f, +3.036172011e-03f, -3.348403385e-03f, +1.140668745e-03f, +1.886003496e-03f, -3.364710146e-03f, +2.324740980e-03f, +1.066697545e-04f, -1.909447527e-03f, +1.967341574e-03f, -7.579353121e-04f, -4.521922591e-04f, +8.459605991e-04f, -5.307640527e-04f, +8.052564960e-05f, +1.246878551e-04f, -7.037678577e-05f, /* 12,28 (28) */ -5.333937253e-04f, +6.203708478e-04f, +1.280758059e-03f, -4.615602077e-03f, +4.657333550e-03f, +3.486198863e-03f, -1.615464364e-02f, +1.831315984e-02f, +3.942926982e-03f, -4.226159745e-02f, +5.865885609e-02f, -7.591303891e-03f, -1.276079507e-01f, +3.420784470e-01f, +6.787289389e-01f, +1.820128346e-01f, -1.400627162e-01f, +3.999572933e-02f, +3.053578164e-02f, -4.347655352e-02f, +1.898123484e-02f, +7.059243422e-03f, -1.478000541e-02f, +7.750295448e-03f, +8.844195042e-04f, -3.651461360e-03f, +1.962869071e-03f, -6.643282774e-05f, +2.361553000e-05f, -9.470218299e-05f, +1.267940064e-04f, +5.784337511e-05f, -4.639829239e-04f, +6.727852572e-04f, -8.483291066e-05f, -1.278292778e-03f, +2.191974093e-03f, -8.946875297e-04f, -2.987242269e-03f, +6.701697695e-03f, -4.046497979e-03f, -2.011548148e-02f, +3.688363072e-03f, +1.955462103e-02f, -8.093325730e-04f, -5.050687187e-03f, +3.909331578e-03f, -5.647954722e-04f, -1.519920503e-03f, +1.483893463e-03f, -4.111248556e-04f, -3.825177745e-04f, +4.629835816e-04f, -1.751393235e-04f, -4.373845388e-05f, +7.449492353e-05f, +5.333937253e-04f, -1.203975948e-03f, -2.744764966e-04f, +4.967930161e-03f, -9.178180697e-03f, +5.617587802e-03f, +8.407974380e-03f, -2.365494387e-02f, +2.351074287e-02f, -4.314856932e-04f, -3.154352798e-02f, +4.473777593e-02f, -2.299758210e-02f, -1.993826460e-02f, +4.968265498e-02f, -4.168282230e-02f, +3.625917663e-03f, +3.237184194e-02f, -3.943819829e-02f, +1.797822043e-02f, +9.439947860e-03f, -2.146021198e-02f, +1.492800474e-02f, -1.800253514e-03f, -5.791244388e-03f, +5.361789918e-03f, -1.802903709e-03f, +6.643282774e-05f, -2.361553000e-05f, +1.197612733e-04f, -2.375994722e-04f, +1.569321239e-04f, +3.113046415e-04f, -9.475452486e-04f, +1.072400192e-03f, -1.333887276e-04f, -1.504166230e-03f, +2.504794604e-03f, -1.643181823e-03f, -8.520233772e-04f, +3.139848145e-03f, -3.243543226e-03f, +8.932778993e-04f, +2.098072660e-03f, -3.396533172e-03f, +2.176626640e-03f, +3.057434476e-04f, -2.019966433e-03f, +1.944678327e-03f, -6.602028232e-04f, -5.373958055e-04f, +8.741298214e-04f, -5.142632352e-04f, +5.388970461e-05f, +1.403354128e-04f, -7.449492353e-05f, /* 12,29 (28) */ -5.097781953e-04f, +5.256686648e-04f, +1.407552065e-03f, -4.557758702e-03f, +4.193350626e-03f, +4.158984120e-03f, -1.623947655e-02f, +1.703486706e-02f, +6.134901075e-03f, -4.315628498e-02f, +5.567161382e-02f, -8.896061963e-04f, -1.316544486e-01f, +3.219629655e-01f, +6.824173020e-01f, +2.015674556e-01f, -1.408720487e-01f, +3.494504214e-02f, +3.444511322e-02f, -4.404134900e-02f, +1.746131434e-02f, +8.543136885e-03f, -1.519113027e-02f, +7.367777674e-03f, +1.347403086e-03f, -3.826600684e-03f, +1.919130618e-03f, +8.062095791e-06f, +2.515381512e-05f, -9.296887939e-05f, +1.150900565e-04f, +7.791644304e-05f, -4.709614541e-04f, +6.365162621e-04f, -7.271196806e-06f, -1.329658048e-03f, +2.117868078e-03f, -6.772374843e-04f, -3.175957353e-03f, +6.531484372e-03f, -3.304936433e-03f, -2.018558845e-02f, +2.642039421e-03f, +1.978103177e-02f, -1.734178923e-04f, -5.344548510e-03f, +3.835463284e-03f, -3.696919477e-04f, -1.634857349e-03f, +1.476424179e-03f, -3.484126929e-04f, -4.279728673e-04f, +4.699237877e-04f, -1.619532692e-04f, -5.544275033e-05f, +7.837259355e-05f, +5.097781953e-04f, -1.084214675e-03f, -5.120759688e-04f, +5.124862285e-03f, -8.866876055e-03f, +4.670042554e-03f, +9.480374572e-03f, -2.378833259e-02f, +2.200657664e-02f, +2.073308911e-03f, -3.318670980e-02f, +4.388575255e-02f, -1.985773396e-02f, -2.318180783e-02f, +5.057593288e-02f, -3.958474964e-02f, +2.293844911e-04f, +3.454846858e-02f, -3.913245484e-02f, +1.595825400e-02f, +1.138462619e-02f, -2.212041481e-02f, +1.439060894e-02f, -9.261236930e-04f, -6.305507623e-03f, +5.415679622e-03f, -1.662568296e-03f, -8.062095791e-06f, -2.515381512e-05f, +1.201746071e-04f, -2.257559918e-04f, +1.252430481e-04f, +3.491375938e-04f, -9.514704756e-04f, +1.005766924e-03f, -1.204521806e-05f, -1.596030675e-03f, +2.469937770e-03f, -1.465248192e-03f, -1.065821184e-03f, +3.227329962e-03f, -3.122510283e-03f, +6.413306954e-04f, +2.299989110e-03f, -3.411296493e-03f, +2.016582388e-03f, +5.048633795e-04f, -2.121286551e-03f, +1.911723046e-03f, -5.575549909e-04f, -6.213378295e-04f, +8.982611748e-04f, -4.945347714e-04f, +2.610804149e-05f, +1.557543963e-04f, -7.837259355e-05f, /* 12,30 (28) */ -4.846243802e-04f, +4.326997854e-04f, +1.522642122e-03f, -4.479842259e-03f, +3.722389172e-03f, +4.795500382e-03f, -1.624674774e-02f, +1.570520902e-02f, +8.252769153e-03f, -4.383352246e-02f, +5.249565646e-02f, +5.641878176e-03f, -1.349593851e-01f, +3.017773770e-01f, +6.850593414e-01f, +2.213484874e-01f, -1.410454666e-01f, +2.960049363e-02f, +3.828057650e-02f, -4.441104094e-02f, +1.582645699e-02f, +1.001956106e-02f, -1.553954296e-02f, +6.939804807e-03f, +1.817326873e-03f, -3.988553953e-03f, +1.863687867e-03f, +8.643468934e-05f, +2.643210268e-05f, -9.079849612e-05f, +1.032215887e-04f, +9.698124191e-05f, -4.754753349e-04f, +5.981149961e-04f, +6.856006816e-05f, -1.373719731e-03f, +2.035505433e-03f, -4.612341352e-04f, -3.346114859e-03f, +6.336929088e-03f, -2.575877161e-03f, -2.020456610e-02f, +1.588226575e-03f, +1.996025146e-02f, +4.848968310e-04f, -5.621703527e-03f, +3.742165744e-03f, -1.687035297e-04f, -1.744506828e-03f, +1.461742008e-03f, -2.825427336e-04f, -4.725039166e-04f, +4.747226022e-04f, -1.475049942e-04f, -6.730415010e-05f, +8.197548550e-05f, +4.846243802e-04f, -9.640400678e-04f, -7.378319605e-04f, +5.250105333e-03f, -8.517738462e-03f, +3.718572078e-03f, +1.048614150e-02f, -2.380037781e-02f, +2.041054596e-02f, +4.543246681e-03f, -3.465195799e-02f, +4.281993136e-02f, -1.663040399e-02f, -2.630431811e-02f, +5.121726357e-02f, -3.728476053e-02f, -3.181912001e-03f, +3.656505097e-02f, -3.862759146e-02f, +1.383696745e-02f, +1.329634923e-02f, -2.267796980e-02f, +1.376927111e-02f, -2.786251825e-05f, -6.800042395e-03f, +5.441787664e-03f, -1.506813900e-03f, -8.643468934e-05f, -2.643210268e-05f, +1.198041350e-04f, -2.130536507e-04f, +9.381007205e-05f, +3.841981137e-04f, -9.503729501e-04f, +9.351215115e-04f, +1.075964685e-04f, -1.678687701e-03f, +2.422921794e-03f, -1.281268207e-03f, -1.273052197e-03f, +3.298229076e-03f, -2.985948991e-03f, +3.861118649e-04f, +2.490700469e-03f, -3.408857351e-03f, +1.845359890e-03f, +7.030032145e-04f, -2.212789912e-03f, +1.868519948e-03f, -4.504588533e-04f, -7.035481900e-04f, +9.181381898e-04f, -4.716071764e-04f, -2.693099346e-06f, +1.708411199e-04f, -8.197548550e-05f, /* 12,31 (28) */ -4.581922775e-04f, +3.419012893e-04f, +1.625863710e-03f, -4.382861017e-03f, +3.246913837e-03f, +5.393615378e-03f, -1.617818768e-02f, +1.433148928e-02f, +1.028827459e-02f, -4.429475660e-02f, +4.914954161e-02f, +1.197880726e-02f, -1.375352622e-01f, +2.815728109e-01f, +6.866475680e-01f, +2.413087388e-01f, -1.405605698e-01f, +2.397879011e-02f, +4.202274224e-02f, -4.457974447e-02f, +1.408195016e-02f, +1.148130307e-02f, -1.582208569e-02f, +6.467300890e-03f, +2.292049476e-03f, -4.136058947e-03f, +1.796383717e-03f, +1.684101748e-04f, +2.745459118e-05f, -8.822150698e-05f, +9.125701215e-05f, +1.149719352e-04f, -4.775685101e-04f, +5.578184186e-04f, +1.423394688e-04f, -1.410425884e-03f, +1.945437062e-03f, -2.476320516e-04f, -3.497362304e-03f, +6.119451369e-03f, -1.861481453e-03f, -2.017288707e-02f, +5.299098635e-04f, +2.009118504e-02f, +1.163826103e-03f, -5.880531475e-03f, +3.629437058e-03f, +3.735582438e-05f, -1.848238513e-03f, +1.439760328e-03f, -2.137625121e-04f, -5.158670931e-04f, +4.772958510e-04f, -1.318301341e-04f, -7.926299444e-05f, +8.526960746e-05f, +4.581922775e-04f, -8.442359327e-04f, -9.508856112e-04f, +5.343915405e-03f, -8.133540348e-03f, +2.768199128e-03f, +1.142126301e-02f, -2.369278134e-02f, +1.873185826e-02f, +6.966168475e-03f, -3.593322620e-02f, +4.154687917e-02f, -1.333217492e-02f, -2.929026710e-02f, +5.160337544e-02f, -3.479406006e-02f, -6.590769352e-03f, +3.841041086e-02f, -3.792458825e-02f, +1.162417754e-02f, +1.516486918e-02f, -2.312842865e-02f, +1.306572292e-02f, +8.902756715e-04f, -7.271649571e-03f, +5.439094564e-03f, -1.335972780e-03f, -1.684101748e-04f, -2.745459118e-05f, +1.186846730e-04f, -1.995966708e-04f, +6.280130302e-05f, +4.163629789e-04f, -9.443600182e-04f, +8.609019613e-04f, +2.249406299e-04f, -1.751821072e-03f, +2.364105091e-03f, -1.092228303e-03f, -1.472695063e-03f, +3.352244024e-03f, -2.834582782e-03f, +1.289232061e-04f, +2.669210172e-03f, -3.389161541e-03f, +1.663773246e-03f, +8.991337447e-04f, -2.293903971e-03f, +1.815168006e-03f, -3.394120637e-04f, -7.835579473e-04f, +9.335634383e-04f, -4.455277979e-04f, -3.237785643e-05f, +1.854904982e-04f, -8.526960746e-05f, /* 13, 0 (28) */ +0.000000000e+00f, +5.666384406e-04f, +1.138827626e-03f, -4.947832042e-03f, +7.775272907e-03f, -3.753683238e-03f, -1.054677731e-02f, +2.921374884e-02f, -3.521211508e-02f, +8.626724797e-03f, +5.817244274e-02f, -1.493766746e-01f, +2.292750740e-01f, +7.389097765e-01f, +2.292750740e-01f, -1.493766746e-01f, +5.817244274e-02f, +8.626724797e-03f, -3.521211508e-02f, +2.921374884e-02f, -1.054677731e-02f, -3.753683238e-03f, +7.775272907e-03f, -4.947832042e-03f, +1.138827626e-03f, +5.666384406e-04f, -4.718714774e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.062275038e-04f, +1.642079905e-04f, -3.176805304e-05f, -4.176963452e-04f, +9.973204594e-04f, -1.100348265e-03f, +3.307050691e-05f, +2.256548147e-03f, -4.528570802e-03f, +4.216758229e-03f, +2.225335438e-03f, -2.276039521e-02f, -6.588330695e-04f, +2.300746985e-02f, -1.490762572e-03f, -4.646756306e-03f, +4.589590608e-03f, -2.116473039e-03f, -1.936159896e-04f, +1.185485254e-03f, -1.003241430e-03f, +3.865415996e-04f, +6.120553119e-05f, -1.777732382e-04f, +1.083396587e-04f, -3.046316603e-05f, +0.000000000e+00f, +0.000000000e+00f, -5.666384406e-04f, +1.805043397e-04f, +3.931653329e-03f, -1.009328495e-02f, +1.316547915e-02f, -6.922639574e-03f, -9.865401789e-03f, +2.934697745e-02f, -3.767009023e-02f, +2.481811038e-02f, +6.027636000e-03f, -3.812597854e-02f, +5.173229864e-02f, -3.812597854e-02f, +6.027636000e-03f, +2.481811038e-02f, -3.767009023e-02f, +2.934697745e-02f, -9.865401789e-03f, -6.922639574e-03f, +1.316547915e-02f, -1.009328495e-02f, +3.931653329e-03f, +1.805043397e-04f, -1.107043555e-03f, +4.718714774e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.062275038e-04f, -2.751890125e-04f, +3.110093128e-04f, +1.456841193e-06f, -7.291662721e-04f, +1.537349632e-03f, -1.761654064e-03f, +8.667499304e-04f, +1.005892713e-03f, -2.900749650e-03f, +3.574934381e-03f, -2.385474553e-03f, -1.485956862e-04f, +2.610021763e-03f, -3.625468615e-03f, +2.776824637e-03f, -7.966397787e-04f, -1.047919596e-03f, +1.845275877e-03f, -1.523971638e-03f, +6.663274538e-04f, +5.985853526e-05f, -3.457286673e-04f, +2.854839571e-04f, -1.291115539e-04f, +3.046316603e-05f, +0.000000000e+00f, /* 13, 1 (28) */ +0.000000000e+00f, +4.604109368e-04f, +1.303035617e-03f, -4.979600095e-03f, +7.357576562e-03f, -2.756362779e-03f, -1.164712558e-02f, +2.924681934e-02f, -3.295556694e-02f, +4.098153994e-03f, +6.238920097e-02f, -1.471513392e-01f, +2.065146788e-01f, +7.382509434e-01f, +2.522825438e-01f, -1.508674372e-01f, +5.352568643e-02f, +1.321631540e-02f, -3.732858812e-02f, +2.902013285e-02f, -9.361292059e-03f, -4.756924668e-03f, +8.161814506e-03f, -4.886626511e-03f, +9.610543883e-04f, +6.749780993e-04f, -5.023346435e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.035369698e-04f, +1.501980935e-04f, -3.115425745e-06f, -4.456342732e-04f, +9.860909236e-04f, -1.011283154e-03f, -1.240131204e-04f, +2.381493442e-03f, -4.445168958e-03f, +3.776343637e-03f, +2.923960520e-03f, -2.245095193e-02f, -1.974338440e-03f, +2.319051509e-02f, -7.223519144e-04f, -5.063876891e-03f, +4.627383065e-03f, -1.961687659e-03f, -3.568177317e-04f, +1.266123263e-03f, -1.003681580e-03f, +3.522579540e-04f, +9.127722124e-05f, -1.907913140e-04f, +1.098320620e-04f, -2.900563891e-05f, +0.000000000e+00f, +0.000000000e+00f, -4.604109368e-04f, -9.468467279e-05f, +4.242662642e-03f, -1.009182811e-02f, +1.243631287e-02f, -5.385289943e-03f, -1.162705585e-02f, +3.021372738e-02f, -3.666419751e-02f, +2.191736073e-02f, +9.602570382e-03f, -4.051145310e-02f, +5.158370296e-02f, -3.551595678e-02f, +2.402167386e-03f, +2.759493502e-02f, -3.846673000e-02f, +2.829905785e-02f, -8.020125912e-03f, -8.446611213e-03f, +1.383180660e-02f, -1.003342641e-02f, +3.585924662e-03f, +4.659882969e-04f, -1.236155109e-03f, +5.023346435e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.035369698e-04f, -2.634750820e-04f, +2.754144351e-04f, +6.121449438e-05f, -7.863339812e-04f, +1.541411923e-03f, -1.668892457e-03f, +6.826111404e-04f, +1.207398695e-03f, -3.006986120e-03f, +3.503856533e-03f, -2.147565162e-03f, -4.449132663e-04f, +2.819855678e-03f, -3.655071878e-03f, +2.635828651e-03f, -5.808159810e-04f, -1.225000850e-03f, +1.919122492e-03f, -1.501198175e-03f, +5.980893329e-04f, +1.223808529e-04f, -3.793169380e-04f, +2.942351695e-04f, -1.273206692e-04f, +2.900563891e-05f, +0.000000000e+00f, /* 13, 2 (28) */ +0.000000000e+00f, +3.568739670e-04f, +1.453233711e-03f, -4.982715521e-03f, +6.911942288e-03f, -1.770271855e-03f, -1.265840873e-02f, +2.912280622e-02f, -3.057407349e-02f, -3.470149638e-04f, +6.616554460e-02f, -1.442273786e-01f, +1.840637268e-01f, +7.362766049e-01f, +2.754730589e-01f, -1.515897891e-01f, +4.846180954e-02f, +1.784369847e-02f, -3.929027578e-02f, +2.866331511e-02f, -8.095168796e-03f, -5.760606248e-03f, +8.514072460e-03f, -4.795349290e-03f, +7.702630743e-04f, +7.848101613e-04f, -5.313402824e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.003116459e-04f, +1.358452277e-04f, +2.461098367e-05f, -4.702883075e-04f, +9.697505223e-04f, -9.188691881e-04f, -2.768656977e-04f, +2.490978499e-03f, -4.340326664e-03f, +3.327966122e-03f, +3.584714385e-03f, -2.208102088e-02f, -3.283370116e-03f, +2.330809873e-02f, +7.760647110e-05f, -5.465663188e-03f, +4.641205545e-03f, -1.792700286e-03f, -5.218374028e-04f, +1.341703266e-03f, -9.984957275e-04f, +3.149542135e-04f, +1.218238603e-04f, -2.031594912e-04f, +1.106659353e-04f, -2.720572775e-05f, +0.000000000e+00f, +0.000000000e+00f, -3.568739670e-04f, -3.581597548e-04f, +4.518077077e-03f, -1.003061361e-02f, +1.164997889e-02f, -3.843878019e-03f, -1.329594831e-02f, +3.089633852e-02f, -3.545679882e-02f, +1.891037461e-02f, +1.310642691e-02f, -4.265901826e-02f, +5.113878969e-02f, -3.269610110e-02f, -1.252904492e-03f, +3.023076367e-02f, -3.904754599e-02f, +2.707405700e-02f, -6.101003420e-03f, -9.947809388e-03f, +1.442989593e-02f, -9.911045560e-03f, +3.206607724e-03f, +7.602234664e-04f, -1.363475778e-03f, +5.313402824e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.003116459e-04f, -2.504725758e-04f, +2.391981328e-04f, +1.190818207e-04f, -8.375993150e-04f, +1.536293796e-03f, -1.567672895e-03f, +4.966277806e-04f, +1.400038251e-03f, -3.095025844e-03f, +3.412742929e-03f, -1.897721222e-03f, -7.386147236e-04f, +3.013710000e-03f, -3.663480167e-03f, +2.478485587e-03f, -3.596473381e-04f, -1.396886603e-03f, +1.982609517e-03f, -1.469006405e-03f, +5.247633121e-04f, +1.857430367e-04f, -4.115188110e-04f, +3.013246526e-04f, -1.244593717e-04f, +2.720572775e-05f, +0.000000000e+00f, /* 13, 3 (28) */ +0.000000000e+00f, +2.565623210e-04f, +1.589078938e-03f, -4.958104537e-03f, +6.441653981e-03f, -8.005213327e-04f, -1.357727792e-02f, +2.884594052e-02f, -2.808309500e-02f, -4.687341628e-03f, +6.949351073e-02f, -1.406426642e-01f, +1.619827059e-01f, +7.329932348e-01f, +2.987811577e-01f, -1.515121826e-01f, +4.299614635e-02f, +2.248490402e-02f, -4.108297607e-02f, +2.814147771e-02f, -6.753465530e-03f, -6.759101975e-03f, +8.829026674e-03f, -4.673525430e-03f, +5.671035832e-04f, +8.954760966e-04f, -5.585460101e-04f, +0.000000000e+00f, +0.000000000e+00f, -9.659695896e-05f, +1.212496189e-04f, +5.127965363e-05f, -4.916120469e-04f, +9.485206610e-04f, -8.236906398e-04f, -4.247578241e-04f, +2.584761905e-03f, -4.215075025e-03f, +2.874060547e-03f, +4.205865745e-03f, -2.165269369e-02f, -4.581640972e-03f, +2.335902471e-02f, +9.066498346e-04f, -5.849674317e-03f, +4.630424092e-03f, -1.610107075e-03f, -6.878078633e-04f, +1.411681506e-03f, -9.875672809e-04f, +2.747599914e-04f, +1.526782824e-04f, -2.147754990e-04f, +1.108054658e-04f, -2.505909028e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.565623210e-04f, -6.086323306e-04f, +4.757275210e-03f, -9.911531792e-03f, +1.081237958e-02f, -2.307584223e-03f, -1.486362120e-02f, +3.139296630e-02f, -3.405676057e-02f, +1.581534877e-02f, +1.651916984e-02f, -4.455673948e-02f, +5.040017497e-02f, -2.968239110e-02f, -4.916384659e-03f, +3.270924926e-02f, -3.940719332e-02f, +2.567717040e-02f, -4.118393903e-03f, -1.141681579e-02f, +1.495465924e-02f, -9.725302524e-03f, +2.795088913e-03f, +1.061548119e-03f, -1.487935150e-03f, +5.585460101e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.659695896e-05f, -2.363164738e-04f, +2.026113880e-04f, +1.747461205e-04f, -8.827722149e-04f, +1.522184299e-03f, -1.458718841e-03f, +3.099227758e-04f, +1.582754796e-03f, -3.164472353e-03f, +3.302218369e-03f, -1.637438139e-03f, -1.027973458e-03f, +3.190411044e-03f, -3.650554938e-03f, +2.305621944e-03f, -1.344027528e-04f, -1.562488909e-03f, +2.035207894e-03f, -1.427431506e-03f, +4.466991721e-04f, +2.495637551e-04f, -4.420809697e-04f, +3.066422271e-04f, -1.205020512e-04f, +2.505909028e-05f, +0.000000000e+00f, /* 13, 4 (28) */ +0.000000000e+00f, +1.599653621e-04f, +1.710328557e-03f, -4.906824884e-03f, +5.950041934e-03f, +1.479993283e-04f, -1.440096856e-02f, +2.842118270e-02f, -2.549833309e-02f, -8.902416653e-03f, +7.236757127e-02f, -1.364367985e-01f, +1.403300123e-01f, +7.284115939e-01f, +3.221401824e-01f, -1.506055328e-01f, +3.714647203e-02f, +2.711532811e-02f, -4.269308314e-02f, +2.745366985e-02f, -5.341784024e-03f, -7.746669256e-03f, +9.103786665e-03f, -4.520847147e-03f, +3.523280842e-04f, +1.006281562e-03f, -5.836051004e-04f, +0.000000000e+00f, +0.000000000e+00f, -9.243979450e-05f, +1.065094541e-04f, +7.676940549e-05f, -5.095794818e-04f, +9.226446183e-04f, -7.263334385e-04f, -5.670029988e-04f, +2.662690692e-03f, -4.070527577e-03f, +2.417031984e-03f, +4.785880117e-03f, -2.116826255e-02f, -5.864906750e-03f, +2.334233961e-02f, +1.762150982e-03f, -6.213497163e-03f, +4.594518981e-03f, -1.414590709e-03f, -8.538373316e-04f, +1.475532923e-03f, -9.708096177e-04f, +2.318255039e-04f, +1.836662090e-04f, -2.255382006e-04f, +1.102181715e-04f, -2.256396701e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.599653621e-04f, -8.449488044e-04f, +4.959886598e-03f, -9.736785672e-03f, +9.929607362e-03f, -7.853999246e-04f, -1.632234004e-02f, +3.170288907e-02f, -3.247400577e-02f, +1.265087641e-02f, +1.982138821e-02f, -4.619417762e-02f, +4.937220151e-02f, -2.649198006e-02f, -8.566939598e-03f, +3.501487120e-02f, -3.954159608e-02f, +2.411468149e-02f, -2.083186010e-03f, -1.284424730e-02f, +1.540135842e-02f, -9.475738768e-03f, +2.353007943e-03f, +1.368190346e-03f, -1.608437201e-03f, +5.836051004e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.243979450e-05f, -2.211452307e-04f, +1.659004742e-04f, +2.279161552e-04f, -9.217042209e-04f, +1.499324190e-03f, -1.342790380e-03f, +1.236106114e-04f, +1.754560479e-03f, -3.215042567e-03f, +3.173020325e-03f, -1.368269953e-03f, -1.311288979e-03f, +3.348884988e-03f, -3.616284452e-03f, +2.118162462e-03f, +9.361335813e-05f, -1.720745848e-03f, +2.076447930e-03f, -1.376567395e-03f, +3.642835795e-04f, +3.134495968e-04f, -4.707538773e-04f, +3.100865742e-04f, -1.154306656e-04f, +2.256396701e-05f, +0.000000000e+00f, /* 13, 5 (28) */ +0.000000000e+00f, +6.752556758e-05f, +1.816838011e-03f, -4.830055478e-03f, +5.440462452e-03f, +1.070643947e-03f, -1.512730200e-02f, +2.785417970e-02f, -2.283564240e-02f, -1.297294423e-02f, +7.478460326e-02f, -1.316509184e-01f, +1.191617497e-01f, +7.225466871e-01f, +3.454825220e-01f, -1.488433818e-01f, +3.093297487e-02f, +3.170984709e-02f, -4.410767385e-02f, +2.659983252e-02f, -3.866251101e-03f, -8.717478874e-03f, +9.335612169e-03f, -4.337180938e-03f, +1.267898836e-04f, +1.116499734e-03f, -6.061690674e-04f, +0.000000000e+00f, +0.000000000e+00f, -8.788812129e-05f, +9.172032850e-05f, +1.009698238e-04f, -5.241845982e-04f, +8.923856324e-04f, -6.273818821e-04f, -7.029604286e-04f, +2.724699307e-03f, -3.907872914e-03f, +1.959244968e-03f, +5.323423542e-03f, -2.063020921e-02f, -7.128982949e-03f, +2.325733829e-02f, +2.641327353e-03f, -6.554758287e-03f, +4.533089791e-03f, -1.206918557e-03f, -1.019013777e-03f, +1.532754550e-03f, -9.481673272e-04f, +1.863212354e-04f, +2.146071067e-04f, -2.353482853e-04f, +1.088752545e-04f, -1.972130207e-05f, +0.000000000e+00f, +0.000000000e+00f, -6.752556758e-05f, -1.066094035e-03f, +5.125787072e-03f, -9.508869516e-03f, +9.007903141e-03f, +7.139242659e-04f, -1.766513042e-02f, +3.182649968e-02f, -3.071944529e-02f, +9.435833847e-03f, +2.299440854e-02f, -4.756244757e-02f, +4.806091253e-02f, -2.314309507e-02f, -1.218322405e-02f, +3.713303366e-02f, -3.944798272e-02f, +2.239393564e-02f, -6.738080122e-06f, -1.422081469e-02f, +1.576564200e-02f, -9.162289172e-03f, +1.882254066e-03f, +1.678276920e-03f, -1.723867867e-03f, +6.061690674e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.788812129e-05f, -2.050996884e-04f, +1.293054374e-04f, +2.783235296e-04f, -9.542885906e-04f, +1.468003595e-03f, -1.220679060e-03f, -6.120935012e-05f, +1.914541550e-03f, -3.246567767e-03f, +3.025994011e-03f, -1.091819867e-03f, -1.586897125e-03f, +3.488164527e-03f, -3.560784353e-03f, +1.917125117e-03f, +3.230687144e-04f, -1.870628335e-03f, +2.105923006e-03f, -1.316567093e-03f, +2.779383284e-04f, +3.769973760e-04f, -4.972935788e-04f, +3.115662449e-04f, -1.092351538e-04f, +1.972130207e-05f, +0.000000000e+00f, /* 13, 6 (28) */ +0.000000000e+00f, -2.036255371e-05f, +1.908558340e-03f, -4.729085655e-03f, +4.916277854e-03f, +1.963029579e-03f, -1.575468388e-02f, +2.715121927e-02f, -2.011094309e-02f, -1.688081714e-02f, +7.674384822e-02f, -1.263274948e-01f, +9.853154051e-02f, +7.154177042e-01f, +3.687398603e-01f, -1.462020544e-01f, +2.437821658e-02f, +3.624293688e-02f, -4.531459241e-02f, +2.558081874e-02f, -2.333496551e-03f, -9.665646201e-03f, +9.521933405e-03f, -4.122573832e-03f, -1.085584017e-04f, +1.225374988e-03f, -6.258903695e-04f, +0.000000000e+00f, +0.000000000e+00f, -8.299062107e-05f, +7.697472709e-05f, +1.237815994e-04f, -5.354408745e-04f, +8.580249187e-04f, -5.274154314e-04f, -8.320375289e-04f, +2.770808149e-03f, -3.728367080e-03f, +1.503013125e-03f, +5.817365362e-03f, -2.004119328e-02f, -8.369761437e-03f, +2.310356835e-02f, +3.541250899e-03f, -6.871135840e-03f, +4.445859978e-03f, -9.879403409e-04f, -1.182409513e-03f, +1.582868856e-03f, -9.196172989e-04f, +1.384374741e-04f, +2.453151088e-04f, -2.441089716e-04f, +1.067519422e-04f, -1.653484773e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.036255371e-05f, -1.271193724e-03f, +5.255092509e-03f, -9.230545987e-03f, +8.053614551e-03f, +2.181927861e-03f, -1.888580949e-02f, +3.176529033e-02f, -2.880490374e-02f, +6.189266080e-03f, +2.602040255e-02f, -4.865426744e-02f, +4.647401540e-02f, -1.965493054e-02f, -1.574400840e-02f, +3.905015878e-02f, -3.912491400e-02f, +2.052330731e-02f, +2.099184926e-03f, -1.553738179e-02f, +1.604358032e-02f, -8.785291796e-03f, +1.384960487e-03f, +1.989843165e-03f, -1.833103021e-03f, +6.258903695e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.299062107e-05f, -1.883220027e-04f, +9.305865870e-05f, +3.257238936e-04f, -9.804601475e-04f, +1.428559377e-03f, -1.093202598e-03f, -2.434593859e-04f, +2.061863229e-03f, -3.258993846e-03f, +2.862086821e-03f, -8.097304951e-04f, -1.853180061e-03f, +3.607394893e-03f, -3.484297476e-03f, +1.703615528e-03f, +5.526110575e-04f, -2.011146789e-03f, +2.123292941e-03f, -1.247642724e-03f, +1.881183206e-04f, +4.397965535e-04f, -5.214635108e-04f, +3.110006277e-04f, -1.019138003e-04f, +1.653484773e-05f, +0.000000000e+00f, /* 13, 7 (28) */ +0.000000000e+00f, -1.033531748e-04f, +1.985533067e-03f, -4.605304055e-03f, +4.380836980e-03f, +2.821054498e-03f, -1.628209931e-02f, +2.631918174e-02f, -1.734013494e-02f, -2.060918422e-02f, +7.824686135e-02f, -1.205101295e-01f, +7.849034723e-02f, +7.070479427e-01f, +3.918434286e-01f, -1.426608035e-01f, +1.750708074e-02f, +4.068879686e-02f, -4.630253275e-02f, +2.439840923e-02f, -7.506276950e-04f, -1.058526350e-02f, +9.660370879e-03f, -3.877258723e-03f, -3.526673733e-04f, +1.332126931e-03f, -6.424252172e-04f, +0.000000000e+00f, +0.000000000e+00f, -7.779632627e-05f, +6.236154208e-05f, +1.451167943e-04f, -5.433806772e-04f, +8.198596317e-04f, -4.270056022e-04f, -9.536921084e-04f, +2.801121667e-03f, -3.533325761e-03f, +1.050589220e-03f, +6.266780051e-03f, -1.940403981e-02f, -9.583226735e-03f, +2.288083364e-02f, +4.458858722e-03f, -7.160371421e-03f, +4.332680891e-03f, -7.585853157e-04f, -1.343085979e-03f, +1.625427028e-03f, -8.851696499e-04f, +8.838371623e-05f, +2.755999959e-04f, -2.517267148e-04f, +1.038278118e-04f, -1.301125136e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.033531748e-04f, -1.459515726e-03f, +5.348151168e-03f, -8.904822093e-03f, +7.073154403e-03f, +3.610487237e-03f, -1.997901208e-02f, +3.152183095e-02f, -2.674304051e-02f, +2.930272234e-03f, +2.888248937e-02f, -4.946399793e-02f, +4.462083534e-02f, -1.604753565e-02f, -1.922830588e-02f, +4.075377431e-02f, -3.857230295e-02f, +1.851216052e-02f, +4.222477867e-03f, -1.678502451e-02f, +1.623169864e-02f, -8.345495242e-03f, +8.634969759e-04f, +2.300843793e-03f, -1.935016821e-03f, +6.424252172e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.779632627e-05f, -1.709545933e-04f, +5.738350604e-05f, +3.698979596e-04f, -1.000194868e-03f, +1.381372273e-03f, -9.611995013e-04f, -4.220897246e-04f, +2.195774053e-03f, -3.252380873e-03f, +2.682342166e-03f, -5.236738917e-04f, -2.108575985e-03f, +3.705839200e-03f, -3.387192871e-03f, +1.478820780e-03f, +7.808762236e-04f, -2.141357629e-03f, +2.128286983e-03f, -1.170065125e-03f, +9.530929370e-05f, +5.014317596e-04f, -5.430363062e-04f, +3.083208650e-04f, -9.347354665e-05f, +1.301125136e-05f, +0.000000000e+00f, /* 13, 8 (28) */ +0.000000000e+00f, -1.811495010e-04f, +2.047894609e-03f, -4.460187261e-03f, +3.837456302e-03f, +3.640914129e-03f, -1.670910491e-02f, +2.536548964e-02f, -1.453901327e-02f, -2.414250999e-02f, +7.929745057e-02f, -1.142433494e-01f, +5.908630741e-02f, +6.974647160e-01f, +4.147242623e-01f, -1.382019448e-01f, +1.034670932e-02f, +4.502147775e-02f, -4.706111806e-02f, +2.305532325e-02f, +8.747993327e-04f, -1.147043315e-02f, +9.748754595e-03f, -3.601658727e-03f, -6.043940881e-04f, +1.435954742e-03f, -6.554364686e-04f, +0.000000000e+00f, +0.000000000e+00f, -7.235426794e-05f, +4.796562905e-05f, +1.648990303e-04f, -5.480545602e-04f, +7.782007847e-04f, -3.267129711e-04f, -1.067434235e-03f, +2.815826067e-03f, -3.324116326e-03f, +6.041556545e-04f, +6.670948102e-03f, -1.872172627e-02f, -1.076547189e-02f, +2.258919663e-02f, +5.390964434e-03f, -7.420281819e-03f, +4.193535225e-03f, -5.198589686e-04f, -1.500098679e-03f, +1.660012150e-03f, -8.448684804e-04f, +3.638794055e-05f, +3.052682314e-04f, -2.581119179e-04f, +1.000870956e-04f, -9.160123521e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.811495010e-04f, -1.630470320e-03f, +5.405534674e-03f, -8.534924134e-03f, +6.072959535e-03f, +4.991859510e-03f, -2.094021158e-02f, +3.109974122e-02f, -2.454726646e-02f, -3.221086391e-04f, +3.156483154e-02f, -4.998767183e-02f, +4.251225936e-02f, -1.234169645e-02f, -2.261549875e-02f, +4.223259509e-02f, -3.779142672e-02f, +1.637080289e-02f, +6.350764850e-03f, -1.795508964e-02f, +1.632700794e-02f, -7.844063483e-03f, +3.204606698e-04f, +2.609164658e-03f, -2.028490368e-03f, +6.554364686e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.235426794e-05f, -1.531391213e-04f, +2.249308205e-05f, +4.106523320e-04f, -1.013509211e-03f, +1.326863789e-03f, -8.255236372e-04f, -5.960846152e-04f, +2.315609666e-03f, -3.226901958e-03f, +2.487892755e-03f, -2.353414328e-04f, -2.351588503e-03f, +3.782883076e-03f, -3.269964059e-03f, +1.244002728e-03f, +1.006496356e-03f, -2.260369555e-03f, +2.120706396e-03f, -1.084163094e-03f, +2.530729057e-08f, +5.614854043e-04f, -5.617955815e-04f, +3.034707119e-04f, -8.393024523e-05f, +9.160123521e-06f, +0.000000000e+00f, /* 13, 9 (28) */ +0.000000000e+00f, -2.535037690e-04f, +2.095860238e-03f, -4.295288231e-03f, +3.289401742e-03f, +4.419114914e-03f, -1.703581789e-02f, +2.429805540e-02f, -1.172318721e-02f, -2.746662631e-02f, +7.990160622e-02f, -1.075724013e-01f, +4.036458114e-02f, +6.866992441e-01f, +4.373134589e-01f, -1.328109804e-01f, +2.926427504e-03f, +4.921501297e-02f, -4.758097703e-02f, +2.155522457e-02f, +2.534811483e-03f, -1.231530163e-02f, +9.785142535e-03f, -3.296390495e-03f, -8.625060060e-04f, +1.536041838e-03f, -6.645965921e-04f, +0.000000000e+00f, +0.000000000e+00f, -6.671313584e-05f, +3.386740310e-05f, +1.830636012e-04f, -5.495304764e-04f, +7.333711394e-04f, -2.270843085e-04f, -1.172827774e-03f, +2.815186610e-03f, -3.102149750e-03f, +1.658154710e-04f, +7.029355970e-03f, -1.799736896e-02f, -1.191271385e-02f, +2.222897973e-02f, +6.334270191e-03f, -7.648770591e-03f, +4.028539872e-03f, -2.728392444e-04f, -1.652502250e-03f, +1.686242287e-03f, -7.987924505e-04f, -1.730424620e-05f, +3.341240478e-04f, -2.631796374e-04f, +9.551896573e-05f, -4.994086038e-06f, +0.000000000e+00f, +0.000000000e+00f, +2.535037690e-04f, -1.783609441e-03f, +5.428027756e-03f, -8.124271802e-03f, +5.059450324e-03f, +6.318723299e-03f, -2.176573522e-02f, +3.050365661e-02f, -2.223165679e-02f, -3.549010597e-03f, +3.405272429e-02f, -5.022301326e-02f, +4.016067085e-02f, -8.558813371e-03f, -2.588546281e-02f, +4.347659782e-02f, -3.678493037e-02f, +1.411043333e-02f, +8.471471246e-03f, -1.903925273e-02f, +1.632703325e-02f, -7.282578078e-03f, -2.413349117e-04f, +2.912635370e-03f, -2.112420613e-03f, +6.645965921e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.671313584e-05f, -1.350155042e-04f, -1.141092508e-05f, +4.478201486e-04f, -1.020459203e-03f, +1.265492895e-03f, -6.870387704e-04f, -7.644681184e-04f, +2.420796052e-03f, -3.182841430e-03f, +2.279953364e-03f, +5.356640114e-05f, -2.580795591e-03f, +3.838038569e-03f, -3.133226515e-03f, +1.000490782e-03f, +1.228108205e-03f, -2.367349560e-03f, +2.100426641e-03f, -9.903222390e-04f, -9.719400026e-05f, +6.195403585e-04f, -5.775376941e-04f, +2.964073290e-04f, -7.330885302e-05f, +4.994086038e-06f, +0.000000000e+00f, /* 13,10 (28) */ +0.000000000e+00f, -3.202169048e-04f, +2.129727641e-03f, -4.112224629e-03f, +2.739871266e-03f, +5.152486053e-03f, -1.726290219e-02f, +2.312522763e-02f, -8.908000598e-03f, -3.056877606e-02f, +8.006742169e-02f, -1.005430454e-01f, +2.236721218e-02f, +6.747865303e-01f, +4.595424386e-01f, -1.264767102e-01f, -4.722343086e-03f, +5.324355284e-02f, -4.785381628e-02f, +1.990272232e-02f, +4.221053770e-03f, -1.311409408e-02f, +9.767838289e-03f, -2.962266448e-03f, -1.125685643e-03f, +1.631560804e-03f, -6.695906781e-04f, +0.000000000e+00f, +0.000000000e+00f, -6.092095278e-05f, +2.014247655e-05f, +1.995575102e-04f, -5.478929063e-04f, +6.857030792e-04f, -1.286498533e-04f, -1.269491606e-03f, +2.799544562e-03f, -2.868872478e-03f, -2.624161167e-04f, +7.341695092e-03f, -1.723420892e-02f, -1.302130835e-02f, +2.180076545e-02f, +7.285379355e-03f, -7.843839402e-03f, +3.837948144e-03f, -1.867230928e-05f, -1.799355657e-03f, +1.703773422e-03f, -7.470551697e-04f, -7.243059156e-05f, +3.619705764e-04f, -2.668502825e-04f, +9.011779337e-05f, -5.287991014e-07f, +0.000000000e+00f, +0.000000000e+00f, +3.202169048e-04f, -1.918624945e-03f, +5.416616831e-03f, -7.676451653e-03f, +4.038991121e-03f, +7.584216193e-03f, -2.245277399e-02f, +2.973918849e-02f, -1.981086074e-02f, -6.731852026e-03f, +3.633267766e-02f, -5.016944686e-02f, +3.757987526e-02f, -4.720774802e-03f, -2.901868932e-02f, +4.447708860e-02f, -3.555682216e-02f, +1.174308377e-02f, +1.057189789e-02f, -2.002957497e-02f, +1.622983925e-02f, -6.663037720e-03f, -8.188726058e-04f, +3.209042699e-03f, -2.185729466e-03f, +6.695906781e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.092095278e-05f, -1.167209713e-04f, -4.413928298e-05f, +4.812615323e-04f, -1.021139287e-03f, +1.197752534e-03f, -5.466131227e-04f, -9.263095869e-04f, +2.510852177e-03f, -3.120592361e-03f, +2.059813144e-03f, +3.413502696e-04f, -2.794858104e-03f, +3.870947275e-03f, -2.977714405e-03f, +7.496742596e-04f, +1.444361468e-03f, -2.461528657e-03f, +2.067399110e-03f, -8.889834667e-04f, -1.957863712e-04f, +6.751826899e-04f, -5.900734556e-04f, +2.871020006e-04f, -6.164356066e-05f, +5.287991014e-07f, +0.000000000e+00f, /* 13,11 (28) */ +0.000000000e+00f, -3.811378576e-04f, +2.149870118e-03f, -3.912667119e-03f, +2.191978359e-03f, +5.838189133e-03f, -1.739155205e-02f, +2.185573602e-02f, -6.108456036e-03f, -3.343764854e-02f, +7.980500558e-02f, -9.320135027e-02f, +5.133003264e-03f, +6.617652219e-01f, +4.813432041e-01f, -1.191913308e-01f, -1.256618249e-02f, +5.708150099e-02f, -4.787248859e-02f, +1.810336666e-02f, +5.924827191e-03f, -1.386114925e-02f, +9.695407698e-03f, -2.600295871e-03f, -1.392535926e-03f, +1.721678597e-03f, -6.701194772e-04f, +0.000000000e+00f, +0.000000000e+00f, -5.502476499e-05f, +6.861339264e-06f, +2.143394342e-04f, -5.432419131e-04f, +6.355364786e-04f, -3.192074028e-05f, -1.357100511e-03f, +2.769313790e-03f, -2.625758256e-03f, -6.786196215e-04f, +7.607859993e-03f, -1.643559746e-02f, -1.408776409e-02f, +2.130539552e-02f, +8.240809724e-03f, -8.003599086e-03f, +3.622151352e-03f, +2.414321334e-04f, -1.939727454e-03f, +1.712302259e-03f, -6.898053928e-04f, -1.287133037e-04f, +3.886110172e-04f, -2.690503014e-04f, +8.388338212e-05f, +4.217033608e-06f, +0.000000000e+00f, +0.000000000e+00f, +3.811378576e-04f, -2.035345916e-03f, +5.372477548e-03f, -7.195190121e-03f, +3.017851834e-03f, +8.781968727e-03f, -2.299938711e-02f, +2.881287890e-02f, -1.730000856e-02f, -9.852444387e-03f, +3.839249080e-02f, -4.982809659e-02f, +3.478501716e-02f, -8.498275266e-04f, -3.199640373e-02f, +4.522676286e-02f, -3.411246069e-02f, +9.281555115e-03f, +1.263929700e-02f, -2.091855844e-02f, +1.603405287e-02f, -5.987855030e-03f, -1.408946061e-03f, +3.496144699e-03f, -2.247373027e-03f, +6.701194772e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.502476499e-05f, -9.838916744e-05f, -7.551614377e-05f, +5.108638555e-04f, -1.015680944e-03f, +1.124165980e-03f, -4.051139781e-04f, -1.080728805e-03f, +2.585392041e-03f, -3.040653435e-03f, +1.828827500e-03f, +6.263221827e-04f, -2.992527783e-03f, +3.881382693e-03f, -2.804276585e-03f, +4.929943112e-04f, +1.653927111e-03f, -2.542207253e-03f, +2.021652407e-03f, -7.806410820e-04f, -2.951700879e-04f, +7.280044372e-04f, -5.992297896e-04f, +2.755407731e-04f, -4.897785481e-05f, -4.217033608e-06f, +0.000000000e+00f, /* 13,12 (28) */ +0.000000000e+00f, -4.361626226e-04f, +2.156731457e-03f, -3.698327685e-03f, +1.648736446e-03f, +6.473725611e-03f, -1.742347279e-02f, +2.049863551e-02f, -3.339142246e-03f, -3.606340680e-02f, +7.912638596e-02f, -8.559349027e-02f, -1.130259419e-02f, +6.476774578e-01f, +5.026485996e-01f, -1.109505211e-01f, -2.056978157e-02f, +6.070365234e-02f, -4.763105645e-02f, +1.616363921e-02f, +7.637129450e-03f, -1.455095464e-02f, +9.566694394e-03f, -2.211684854e-03f, -1.661586227e-03f, +1.805561979e-03f, -6.659024436e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.907035011e-05f, -5.910917565e-06f, +2.273796187e-04f, -5.356921292e-04f, +5.832165806e-04f, +6.261340719e-05f, -1.435385730e-03f, +2.724977041e-03f, -2.374299987e-03f, -1.080978587e-03f, +7.827945498e-03f, -1.560498126e-02f, -1.510875634e-02f, +2.074396882e-02f, +9.197007285e-03f, -8.126280355e-03f, +3.381679722e-03f, +5.062059580e-04f, -2.072701113e-03f, +1.711568846e-03f, -6.272270173e-04f, -1.858602791e-04f, +4.138498401e-04f, -2.697128497e-04f, +7.682117141e-05f, +9.221682500e-06f, +0.000000000e+00f, +0.000000000e+00f, +4.361626226e-04f, -2.133735084e-03f, +5.296961404e-03f, -6.684326265e-03f, +2.002170890e-03f, +9.906134708e-03f, -2.340450109e-02f, +2.773215010e-02f, -1.471461652e-02f, -1.289309782e-02f, +4.022131830e-02f, -4.920177441e-02f, +3.179248938e-02f, +3.031555166e-03f, -3.480068031e-02f, +4.571975717e-02f, -3.245853358e-02f, +6.739347862e-03f, +1.466094940e-02f, -2.169919952e-02f, +1.573888279e-02f, -5.259850593e-03f, -2.008175851e-03f, +3.771685472e-03f, -2.296350881e-03f, +6.659024436e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.907035011e-05f, -8.014930969e-05f, -1.053798567e-04f, +5.365418178e-04f, -1.004251109e-03f, +1.045283064e-03f, -2.634023677e-04f, -1.226900757e-03f, +2.644126133e-03f, -2.943625195e-03f, +1.588409622e-03f, +9.068156165e-04f, -3.172654692e-03f, +3.869251777e-03f, -2.613871884e-03f, +2.319354898e-04f, +1.855505632e-03f, -2.608760156e-03f, +1.963293167e-03f, -6.658405276e-04f, -3.947473151e-04f, +7.776064029e-04f, -6.048513199e-04f, +2.617250043e-04f, -3.536451091e-05f, -9.221682500e-06f, +0.000000000e+00f, /* 13,13 (28) */ +0.000000000e+00f, -4.852329727e-04f, +2.150820539e-03f, -3.470948066e-03f, +1.113044317e-03f, +7.056942192e-03f, -1.736085938e-02f, +1.906324978e-02f, -6.141652052e-04f, -3.843770678e-02f, +7.804540737e-02f, -7.776554478e-02f, -2.690757545e-02f, +6.325687015e-01f, +5.233925684e-01f, -1.017535138e-01f, -2.869606193e-02f, +6.408533206e-02f, -4.712485049e-02f, +1.409093809e-02f, +9.348698296e-03f, -1.517818166e-02f, +9.380834115e-03f, -1.797835014e-03f, -1.931299077e-03f, +1.882383151e-03f, -6.566807611e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.310194423e-05f, -1.811483376e-05f, +2.386597032e-04f, -5.253716848e-04f, +5.290918952e-04f, +1.544867102e-04f, -1.504135213e-03f, +2.667081932e-03f, -2.116001636e-03f, -1.467786266e-03f, +8.002243073e-03f, -1.474588724e-02f, -1.608113976e-02f, +2.011783827e-02f, +1.015036042e-02f, -8.210244114e-03f, +3.117202625e-03f, +7.743281446e-04f, -2.197380379e-03f, +1.701359018e-03f, -5.595388767e-04f, -2.435664463e-04f, +4.374940129e-04f, -2.687784368e-04f, +6.894240855e-05f, +1.446043300e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.852329727e-04f, -2.213884393e-03f, +5.191581547e-03f, -6.147784448e-03f, +9.979197807e-04f, +1.095141777e-02f, -2.366790346e-02f, +2.650524934e-02f, -1.207049039e-02f, -1.583672302e-02f, +4.180972792e-02f, -4.829495879e-02f, +2.861983468e-02f, +6.900806943e-03f, -3.741455220e-02f, +4.595169266e-02f, -3.060302795e-02f, +4.130587706e-03f, +1.662424257e-02f, -2.236504005e-02f, +1.534413547e-02f, -4.482244190e-03f, -2.613027171e-03f, +4.033410477e-03f, -2.331715392e-03f, +6.566807611e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.310194423e-05f, -6.212540086e-05f, -1.335836619e-04f, +5.582373432e-04f, -9.870503886e-04f, +9.616762905e-04f, -1.223278700e-04f, -1.364060002e-03f, +2.686862273e-03f, -2.830205698e-03f, +1.340021692e-03f, +1.181195470e-03f, -3.334194069e-03f, +3.834595678e-03f, -2.407563701e-03f, -3.198299301e-05f, +2.047835198e-03f, -2.660641164e-03f, +1.892506392e-03f, -5.451757631e-04f, -4.939076073e-04f, +8.236009485e-04f, -6.068018773e-04f, +2.456718199e-04f, -2.086551444e-05f, -1.446043300e-05f, +0.000000000e+00f, /* 13,14 (28) */ +0.000000000e+00f, -5.283349169e-04f, +2.132705706e-03f, -3.232288363e-03f, +5.876726322e-04f, +7.586034087e-03f, -1.720637267e-02f, +1.755911457e-02f, +2.052916726e-03f, -4.055370842e-02f, +7.657762110e-02f, -6.976330170e-02f, -4.165346269e-02f, +6.164875617e-01f, +5.435104067e-01f, -9.160315340e-02f, -3.690630604e-02f, +6.720253469e-02f, -4.635052235e-02f, +1.189355772e-02f, +1.105005731e-02f, -1.573772054e-02f, +9.137267669e-03f, -1.360341001e-03f, -2.200077514e-03f, +1.951325559e-03f, -6.422203281e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.716198948e-05f, -2.969676839e-05f, +2.481724823e-04f, -5.124210841e-04f, +4.735121294e-04f, +2.432590839e-04f, -1.563193536e-03f, +2.596236670e-03f, -1.852370242e-03f, -1.837451654e-03f, +8.131236325e-03f, -1.386190716e-02f, -1.700196040e-02f, +1.942860661e-02f, +1.109721452e-02f, -8.253991319e-03f, +2.829528118e-03f, +1.044430696e-03f, -2.312894621e-03f, +1.681506628e-03f, -4.869943274e-04f, -3.015152215e-04f, +4.593542484e-04f, -2.661955450e-04f, +6.026428672e-05f, +1.990565033e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.283349169e-04f, -2.276009794e-03f, +5.057997886e-03f, -5.589547104e-03f, +1.086939211e-05f, +1.191309406e-02f, -2.379023133e-02f, +2.514118934e-02f, -9.383628118e-03f, -1.866692872e-02f, +4.314974961e-02f, -4.711376332e-02f, +2.528564062e-02f, +1.073540262e-02f, -3.982211590e-02f, +4.591970966e-02f, -2.855519275e-02f, +1.469946542e-03f, +1.851674896e-02f, -2.291021581e-02f, +1.485022786e-02f, -3.658643241e-03f, -3.219829048e-03f, +4.279082297e-03f, -2.352580907e-03f, +6.422203281e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.716198948e-05f, -4.443550510e-05f, -1.599962633e-04f, +5.759192987e-04f, -9.643110950e-04f, +8.739368830e-04f, +1.727644546e-05f, -1.491504628e-03f, +2.713505857e-03f, -2.701185600e-03f, +1.085165839e-03f, +1.447867802e-03f, -3.476212519e-03f, +3.777589673e-03f, -2.186513949e-03f, -2.972162719e-04f, +2.229699619e-03f, -2.697387220e-03f, +1.809555298e-03f, -4.192862961e-04f, -5.920315597e-04f, +8.656147719e-04f, -6.049659126e-04f, +2.274144693e-04f, -5.551909276e-06f, -1.990565033e-05f, +0.000000000e+00f, /* 13,15 (28) */ +0.000000000e+00f, -5.654969064e-04f, +2.103008937e-03f, -2.984115881e-03f, +7.525154808e-05f, +8.059546216e-03f, -1.696311359e-02f, +1.599592103e-02f, +4.649153396e-03f, -4.240607866e-02f, +7.474016945e-02f, -6.163206538e-02f, -5.551536985e-02f, +5.994856013e-01f, +5.629390133e-01f, -8.050593888e-02f, -4.516029736e-02f, +7.003206280e-02f, -4.530609165e-02f, +9.580663094e-03f, +1.273156394e-02f, -1.622471486e-02f, +8.835752447e-03f, -9.009867525e-04f, -2.466273059e-03f, +2.011589846e-03f, -6.223146778e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.129090300e-05f, -4.060904399e-05f, +2.559216052e-04f, -4.969920381e-04f, +4.168261616e-04f, +3.285180955e-04f, -1.612461525e-03f, +2.513105536e-03f, -1.584908069e-03f, -2.188504860e-03f, +8.215595687e-03f, -1.295668211e-02f, -1.786846696e-02f, +1.867812106e-02f, +1.203388692e-02f, -8.256172327e-03f, +2.519601785e-03f, +1.315104923e-03f, -2.418404162e-03f, +1.651895564e-03f, -4.098806258e-04f, -3.593800691e-04f, +4.792462625e-04f, -2.619212169e-04f, +5.081004726e-05f, +2.552686838e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.654969064e-04f, -2.320445299e-03f, +4.898001622e-03f, -5.013627806e-03f, -9.534417029e-04f, +1.278703095e-02f, -2.377295488e-02f, +2.364968471e-02f, -6.670122261e-03f, -2.136811432e-02f, +4.423491545e-02f, -4.566589552e-02f, +2.180942810e-02f, +1.451299229e-02f, -4.200862985e-02f, +4.562249339e-02f, -2.632549313e-02f, -1.227440678e-03f, +2.032630426e-02f, -2.332950210e-02f, +1.425819630e-02f, -2.793028469e-03f, -3.824794961e-03f, +4.506496766e-03f, -2.358132816e-03f, +6.223146778e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.129090300e-05f, -2.719108854e-05f, -1.845022801e-04f, +5.895830417e-04f, -9.362951180e-04f, +7.826707763e-04f, +1.545988993e-04f, -1.608599772e-03f, +2.724059500e-03f, -2.557442720e-03f, +8.253749009e-04f, +1.705289295e-03f, -3.597893528e-03f, +3.698542274e-03f, -1.951976374e-03f, -5.622030383e-04f, +2.399936099e-03f, -2.718622083e-03f, +1.714780679e-03f, -2.888538808e-04f, -6.884945826e-04f, +9.032916486e-04f, -5.992498030e-04f, +2.070025762e-04f, +1.049642806e-05f, -2.552686838e-05f, +0.000000000e+00f, /* 13,16 (28) */ +0.000000000e+00f, -5.967878094e-04f, +2.062399893e-03f, -2.728194276e-03f, -4.217404900e-04f, +8.476372378e-03f, -1.663459549e-02f, +1.438345951e-02f, +7.162258932e-03f, -4.399098673e-02f, +7.255166459e-02f, -5.341646969e-02f, -6.847205196e-02f, +5.816171343e-01f, +5.816171343e-01f, -6.847205196e-02f, -5.341646969e-02f, +7.255166459e-02f, -4.399098673e-02f, +7.162258932e-03f, +1.438345951e-02f, -1.663459549e-02f, +8.476372378e-03f, -4.217404900e-04f, -2.728194276e-03f, +2.062399893e-03f, -5.967878094e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.552686838e-05f, -5.081004726e-05f, +2.619212169e-04f, -4.792462625e-04f, +3.593800691e-04f, +4.098806258e-04f, -1.651895564e-03f, +2.418404162e-03f, -1.315104923e-03f, -2.519601785e-03f, +8.256172327e-03f, -1.203388692e-02f, -1.867812106e-02f, +1.786846696e-02f, +1.295668211e-02f, -8.215595687e-03f, +2.188504860e-03f, +1.584908069e-03f, -2.513105536e-03f, +1.612461525e-03f, -3.285180955e-04f, -4.168261616e-04f, +4.969920381e-04f, -2.559216052e-04f, +4.060904399e-05f, +3.129090300e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.967878094e-04f, -2.347636388e-03f, +4.713499342e-03f, -4.424044764e-03f, -1.889736821e-03f, +1.356970172e-02f, -2.361835599e-02f, +2.204108494e-02f, -3.946062761e-03f, -2.392555703e-02f, +4.506029035e-02f, -4.396060622e-02f, +1.821153457e-02f, +1.821153457e-02f, -4.396060622e-02f, +4.506029035e-02f, -2.392555703e-02f, -3.946062761e-03f, +2.204108494e-02f, -2.361835599e-02f, +1.356970172e-02f, -1.889736821e-03f, -4.424044764e-03f, +4.713499342e-03f, -2.347636388e-03f, +5.967878094e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.552686838e-05f, -1.049642806e-05f, -2.070025762e-04f, +5.992498030e-04f, -9.032916486e-04f, +6.884945826e-04f, +2.888538808e-04f, -1.714780679e-03f, +2.718622083e-03f, -2.399936099e-03f, +5.622030383e-04f, +1.951976374e-03f, -3.698542274e-03f, +3.597893528e-03f, -1.705289295e-03f, -8.253749009e-04f, +2.557442720e-03f, -2.724059500e-03f, +1.608599772e-03f, -1.545988993e-04f, -7.826707763e-04f, +9.362951180e-04f, -5.895830417e-04f, +1.845022801e-04f, +2.719108854e-05f, -3.129090300e-05f, +0.000000000e+00f, /* 13,17 (28) */ +0.000000000e+00f, -6.223146778e-04f, +2.011589846e-03f, -2.466273059e-03f, -9.009867525e-04f, +8.835752447e-03f, -1.622471486e-02f, +1.273156394e-02f, +9.580663094e-03f, -4.530609165e-02f, +7.003206280e-02f, -4.516029736e-02f, -8.050593888e-02f, +5.629390133e-01f, +5.994856013e-01f, -5.551536985e-02f, -6.163206538e-02f, +7.474016945e-02f, -4.240607866e-02f, +4.649153396e-03f, +1.599592103e-02f, -1.696311359e-02f, +8.059546216e-03f, +7.525154808e-05f, -2.984115881e-03f, +2.103008937e-03f, -5.654969064e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.990565033e-05f, -6.026428672e-05f, +2.661955450e-04f, -4.593542484e-04f, +3.015152215e-04f, +4.869943274e-04f, -1.681506628e-03f, +2.312894621e-03f, -1.044430696e-03f, -2.829528118e-03f, +8.253991319e-03f, -1.109721452e-02f, -1.942860661e-02f, +1.700196040e-02f, +1.386190716e-02f, -8.131236325e-03f, +1.837451654e-03f, +1.852370242e-03f, -2.596236670e-03f, +1.563193536e-03f, -2.432590839e-04f, -4.735121294e-04f, +5.124210841e-04f, -2.481724823e-04f, +2.969676839e-05f, +3.716198948e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.223146778e-04f, -2.358132816e-03f, +4.506496766e-03f, -3.824794961e-03f, -2.793028469e-03f, +1.425819630e-02f, -2.332950210e-02f, +2.032630426e-02f, -1.227440678e-03f, -2.632549313e-02f, +4.562249339e-02f, -4.200862985e-02f, +1.451299229e-02f, +2.180942810e-02f, -4.566589552e-02f, +4.423491545e-02f, -2.136811432e-02f, -6.670122261e-03f, +2.364968471e-02f, -2.377295488e-02f, +1.278703095e-02f, -9.534417029e-04f, -5.013627806e-03f, +4.898001622e-03f, -2.320445299e-03f, +5.654969064e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.990565033e-05f, +5.551909276e-06f, -2.274144693e-04f, +6.049659126e-04f, -8.656147719e-04f, +5.920315597e-04f, +4.192862961e-04f, -1.809555298e-03f, +2.697387220e-03f, -2.229699619e-03f, +2.972162719e-04f, +2.186513949e-03f, -3.777589673e-03f, +3.476212519e-03f, -1.447867802e-03f, -1.085165839e-03f, +2.701185600e-03f, -2.713505857e-03f, +1.491504628e-03f, -1.727644546e-05f, -8.739368830e-04f, +9.643110950e-04f, -5.759192987e-04f, +1.599962633e-04f, +4.443550510e-05f, -3.716198948e-05f, +0.000000000e+00f, /* 13,18 (28) */ +0.000000000e+00f, -6.422203281e-04f, +1.951325559e-03f, -2.200077514e-03f, -1.360341001e-03f, +9.137267669e-03f, -1.573772054e-02f, +1.105005731e-02f, +1.189355772e-02f, -4.635052235e-02f, +6.720253469e-02f, -3.690630604e-02f, -9.160315340e-02f, +5.435104067e-01f, +6.164875617e-01f, -4.165346269e-02f, -6.976330170e-02f, +7.657762110e-02f, -4.055370842e-02f, +2.052916726e-03f, +1.755911457e-02f, -1.720637267e-02f, +7.586034087e-03f, +5.876726322e-04f, -3.232288363e-03f, +2.132705706e-03f, -5.283349169e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.446043300e-05f, -6.894240855e-05f, +2.687784368e-04f, -4.374940129e-04f, +2.435664463e-04f, +5.595388767e-04f, -1.701359018e-03f, +2.197380379e-03f, -7.743281446e-04f, -3.117202625e-03f, +8.210244114e-03f, -1.015036042e-02f, -2.011783827e-02f, +1.608113976e-02f, +1.474588724e-02f, -8.002243073e-03f, +1.467786266e-03f, +2.116001636e-03f, -2.667081932e-03f, +1.504135213e-03f, -1.544867102e-04f, -5.290918952e-04f, +5.253716848e-04f, -2.386597032e-04f, +1.811483376e-05f, +4.310194423e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.422203281e-04f, -2.352580907e-03f, +4.279082297e-03f, -3.219829048e-03f, -3.658643241e-03f, +1.485022786e-02f, -2.291021581e-02f, +1.851674896e-02f, +1.469946542e-03f, -2.855519275e-02f, +4.591970966e-02f, -3.982211590e-02f, +1.073540262e-02f, +2.528564062e-02f, -4.711376332e-02f, +4.314974961e-02f, -1.866692872e-02f, -9.383628118e-03f, +2.514118934e-02f, -2.379023133e-02f, +1.191309406e-02f, +1.086939211e-05f, -5.589547104e-03f, +5.057997886e-03f, -2.276009794e-03f, +5.283349169e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.446043300e-05f, +2.086551444e-05f, -2.456718199e-04f, +6.068018773e-04f, -8.236009485e-04f, +4.939076073e-04f, +5.451757631e-04f, -1.892506392e-03f, +2.660641164e-03f, -2.047835198e-03f, +3.198299301e-05f, +2.407563701e-03f, -3.834595678e-03f, +3.334194069e-03f, -1.181195470e-03f, -1.340021692e-03f, +2.830205698e-03f, -2.686862273e-03f, +1.364060002e-03f, +1.223278700e-04f, -9.616762905e-04f, +9.870503886e-04f, -5.582373432e-04f, +1.335836619e-04f, +6.212540086e-05f, -4.310194423e-05f, +0.000000000e+00f, /* 13,19 (28) */ +0.000000000e+00f, -6.566807611e-04f, +1.882383151e-03f, -1.931299077e-03f, -1.797835014e-03f, +9.380834115e-03f, -1.517818166e-02f, +9.348698296e-03f, +1.409093809e-02f, -4.712485049e-02f, +6.408533206e-02f, -2.869606193e-02f, -1.017535138e-01f, +5.233925684e-01f, +6.325687015e-01f, -2.690757545e-02f, -7.776554478e-02f, +7.804540737e-02f, -3.843770678e-02f, -6.141652052e-04f, +1.906324978e-02f, -1.736085938e-02f, +7.056942192e-03f, +1.113044317e-03f, -3.470948066e-03f, +2.150820539e-03f, -4.852329727e-04f, +0.000000000e+00f, +0.000000000e+00f, -9.221682500e-06f, -7.682117141e-05f, +2.697128497e-04f, -4.138498401e-04f, +1.858602791e-04f, +6.272270173e-04f, -1.711568846e-03f, +2.072701113e-03f, -5.062059580e-04f, -3.381679722e-03f, +8.126280355e-03f, -9.197007285e-03f, -2.074396882e-02f, +1.510875634e-02f, +1.560498126e-02f, -7.827945498e-03f, +1.080978587e-03f, +2.374299987e-03f, -2.724977041e-03f, +1.435385730e-03f, -6.261340719e-05f, -5.832165806e-04f, +5.356921292e-04f, -2.273796187e-04f, +5.910917565e-06f, +4.907035011e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.566807611e-04f, -2.331715392e-03f, +4.033410477e-03f, -2.613027171e-03f, -4.482244190e-03f, +1.534413547e-02f, -2.236504005e-02f, +1.662424257e-02f, +4.130587706e-03f, -3.060302795e-02f, +4.595169266e-02f, -3.741455220e-02f, +6.900806943e-03f, +2.861983468e-02f, -4.829495879e-02f, +4.180972792e-02f, -1.583672302e-02f, -1.207049039e-02f, +2.650524934e-02f, -2.366790346e-02f, +1.095141777e-02f, +9.979197807e-04f, -6.147784448e-03f, +5.191581547e-03f, -2.213884393e-03f, +4.852329727e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.221682500e-06f, +3.536451091e-05f, -2.617250043e-04f, +6.048513199e-04f, -7.776064029e-04f, +3.947473151e-04f, +6.658405276e-04f, -1.963293167e-03f, +2.608760156e-03f, -1.855505632e-03f, -2.319354898e-04f, +2.613871884e-03f, -3.869251777e-03f, +3.172654692e-03f, -9.068156165e-04f, -1.588409622e-03f, +2.943625195e-03f, -2.644126133e-03f, +1.226900757e-03f, +2.634023677e-04f, -1.045283064e-03f, +1.004251109e-03f, -5.365418178e-04f, +1.053798567e-04f, +8.014930969e-05f, -4.907035011e-05f, +0.000000000e+00f, /* 13,20 (28) */ +0.000000000e+00f, -6.659024436e-04f, +1.805561979e-03f, -1.661586227e-03f, -2.211684854e-03f, +9.566694394e-03f, -1.455095464e-02f, +7.637129450e-03f, +1.616363921e-02f, -4.763105645e-02f, +6.070365234e-02f, -2.056978157e-02f, -1.109505211e-01f, +5.026485996e-01f, +6.476774578e-01f, -1.130259419e-02f, -8.559349027e-02f, +7.912638596e-02f, -3.606340680e-02f, -3.339142246e-03f, +2.049863551e-02f, -1.742347279e-02f, +6.473725611e-03f, +1.648736446e-03f, -3.698327685e-03f, +2.156731457e-03f, -4.361626226e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.217033608e-06f, -8.388338212e-05f, +2.690503014e-04f, -3.886110172e-04f, +1.287133037e-04f, +6.898053928e-04f, -1.712302259e-03f, +1.939727454e-03f, -2.414321334e-04f, -3.622151352e-03f, +8.003599086e-03f, -8.240809724e-03f, -2.130539552e-02f, +1.408776409e-02f, +1.643559746e-02f, -7.607859993e-03f, +6.786196215e-04f, +2.625758256e-03f, -2.769313790e-03f, +1.357100511e-03f, +3.192074028e-05f, -6.355364786e-04f, +5.432419131e-04f, -2.143394342e-04f, -6.861339264e-06f, +5.502476499e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.659024436e-04f, -2.296350881e-03f, +3.771685472e-03f, -2.008175851e-03f, -5.259850593e-03f, +1.573888279e-02f, -2.169919952e-02f, +1.466094940e-02f, +6.739347862e-03f, -3.245853358e-02f, +4.571975717e-02f, -3.480068031e-02f, +3.031555166e-03f, +3.179248938e-02f, -4.920177441e-02f, +4.022131830e-02f, -1.289309782e-02f, -1.471461652e-02f, +2.773215010e-02f, -2.340450109e-02f, +9.906134708e-03f, +2.002170890e-03f, -6.684326265e-03f, +5.296961404e-03f, -2.133735084e-03f, +4.361626226e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.217033608e-06f, +4.897785481e-05f, -2.755407731e-04f, +5.992297896e-04f, -7.280044372e-04f, +2.951700879e-04f, +7.806410820e-04f, -2.021652407e-03f, +2.542207253e-03f, -1.653927111e-03f, -4.929943112e-04f, +2.804276585e-03f, -3.881382693e-03f, +2.992527783e-03f, -6.263221827e-04f, -1.828827500e-03f, +3.040653435e-03f, -2.585392041e-03f, +1.080728805e-03f, +4.051139781e-04f, -1.124165980e-03f, +1.015680944e-03f, -5.108638555e-04f, +7.551614377e-05f, +9.838916744e-05f, -5.502476499e-05f, +0.000000000e+00f, /* 13,21 (28) */ +0.000000000e+00f, -6.701194772e-04f, +1.721678597e-03f, -1.392535926e-03f, -2.600295871e-03f, +9.695407698e-03f, -1.386114925e-02f, +5.924827191e-03f, +1.810336666e-02f, -4.787248859e-02f, +5.708150099e-02f, -1.256618249e-02f, -1.191913308e-01f, +4.813432041e-01f, +6.617652219e-01f, +5.133003264e-03f, -9.320135027e-02f, +7.980500558e-02f, -3.343764854e-02f, -6.108456036e-03f, +2.185573602e-02f, -1.739155205e-02f, +5.838189133e-03f, +2.191978359e-03f, -3.912667119e-03f, +2.149870118e-03f, -3.811378576e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.287991014e-07f, -9.011779337e-05f, +2.668502825e-04f, -3.619705764e-04f, +7.243059156e-05f, +7.470551697e-04f, -1.703773422e-03f, +1.799355657e-03f, +1.867230928e-05f, -3.837948144e-03f, +7.843839402e-03f, -7.285379355e-03f, -2.180076545e-02f, +1.302130835e-02f, +1.723420892e-02f, -7.341695092e-03f, +2.624161167e-04f, +2.868872478e-03f, -2.799544562e-03f, +1.269491606e-03f, +1.286498533e-04f, -6.857030792e-04f, +5.478929063e-04f, -1.995575102e-04f, -2.014247655e-05f, +6.092095278e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.701194772e-04f, -2.247373027e-03f, +3.496144699e-03f, -1.408946061e-03f, -5.987855030e-03f, +1.603405287e-02f, -2.091855844e-02f, +1.263929700e-02f, +9.281555115e-03f, -3.411246069e-02f, +4.522676286e-02f, -3.199640373e-02f, -8.498275266e-04f, +3.478501716e-02f, -4.982809659e-02f, +3.839249080e-02f, -9.852444387e-03f, -1.730000856e-02f, +2.881287890e-02f, -2.299938711e-02f, +8.781968727e-03f, +3.017851834e-03f, -7.195190121e-03f, +5.372477548e-03f, -2.035345916e-03f, +3.811378576e-04f, +0.000000000e+00f, +0.000000000e+00f, -5.287991014e-07f, +6.164356066e-05f, -2.871020006e-04f, +5.900734556e-04f, -6.751826899e-04f, +1.957863712e-04f, +8.889834667e-04f, -2.067399110e-03f, +2.461528657e-03f, -1.444361468e-03f, -7.496742596e-04f, +2.977714405e-03f, -3.870947275e-03f, +2.794858104e-03f, -3.413502696e-04f, -2.059813144e-03f, +3.120592361e-03f, -2.510852177e-03f, +9.263095869e-04f, +5.466131227e-04f, -1.197752534e-03f, +1.021139287e-03f, -4.812615323e-04f, +4.413928298e-05f, +1.167209713e-04f, -6.092095278e-05f, +0.000000000e+00f, /* 13,22 (28) */ +0.000000000e+00f, -6.695906781e-04f, +1.631560804e-03f, -1.125685643e-03f, -2.962266448e-03f, +9.767838289e-03f, -1.311409408e-02f, +4.221053770e-03f, +1.990272232e-02f, -4.785381628e-02f, +5.324355284e-02f, -4.722343086e-03f, -1.264767102e-01f, +4.595424386e-01f, +6.747865303e-01f, +2.236721218e-02f, -1.005430454e-01f, +8.006742169e-02f, -3.056877606e-02f, -8.908000598e-03f, +2.312522763e-02f, -1.726290219e-02f, +5.152486053e-03f, +2.739871266e-03f, -4.112224629e-03f, +2.129727641e-03f, -3.202169048e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.994086038e-06f, -9.551896573e-05f, +2.631796374e-04f, -3.341240478e-04f, +1.730424620e-05f, +7.987924505e-04f, -1.686242287e-03f, +1.652502250e-03f, +2.728392444e-04f, -4.028539872e-03f, +7.648770591e-03f, -6.334270191e-03f, -2.222897973e-02f, +1.191271385e-02f, +1.799736896e-02f, -7.029355970e-03f, -1.658154710e-04f, +3.102149750e-03f, -2.815186610e-03f, +1.172827774e-03f, +2.270843085e-04f, -7.333711394e-04f, +5.495304764e-04f, -1.830636012e-04f, -3.386740310e-05f, +6.671313584e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.695906781e-04f, -2.185729466e-03f, +3.209042699e-03f, -8.188726058e-04f, -6.663037720e-03f, +1.622983925e-02f, -2.002957497e-02f, +1.057189789e-02f, +1.174308377e-02f, -3.555682216e-02f, +4.447708860e-02f, -2.901868932e-02f, -4.720774802e-03f, +3.757987526e-02f, -5.016944686e-02f, +3.633267766e-02f, -6.731852026e-03f, -1.981086074e-02f, +2.973918849e-02f, -2.245277399e-02f, +7.584216193e-03f, +4.038991121e-03f, -7.676451653e-03f, +5.416616831e-03f, -1.918624945e-03f, +3.202169048e-04f, +0.000000000e+00f, +0.000000000e+00f, -4.994086038e-06f, +7.330885302e-05f, -2.964073290e-04f, +5.775376941e-04f, -6.195403585e-04f, +9.719400026e-05f, +9.903222390e-04f, -2.100426641e-03f, +2.367349560e-03f, -1.228108205e-03f, -1.000490782e-03f, +3.133226515e-03f, -3.838038569e-03f, +2.580795591e-03f, -5.356640114e-05f, -2.279953364e-03f, +3.182841430e-03f, -2.420796052e-03f, +7.644681184e-04f, +6.870387704e-04f, -1.265492895e-03f, +1.020459203e-03f, -4.478201486e-04f, +1.141092508e-05f, +1.350155042e-04f, -6.671313584e-05f, +0.000000000e+00f, /* 13,23 (28) */ +0.000000000e+00f, -6.645965921e-04f, +1.536041838e-03f, -8.625060060e-04f, -3.296390495e-03f, +9.785142535e-03f, -1.231530163e-02f, +2.534811483e-03f, +2.155522457e-02f, -4.758097703e-02f, +4.921501297e-02f, +2.926427504e-03f, -1.328109804e-01f, +4.373134589e-01f, +6.866992441e-01f, +4.036458114e-02f, -1.075724013e-01f, +7.990160622e-02f, -2.746662631e-02f, -1.172318721e-02f, +2.429805540e-02f, -1.703581789e-02f, +4.419114914e-03f, +3.289401742e-03f, -4.295288231e-03f, +2.095860238e-03f, -2.535037690e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.160123521e-06f, -1.000870956e-04f, +2.581119179e-04f, -3.052682314e-04f, -3.638794055e-05f, +8.448684804e-04f, -1.660012150e-03f, +1.500098679e-03f, +5.198589686e-04f, -4.193535225e-03f, +7.420281819e-03f, -5.390964434e-03f, -2.258919663e-02f, +1.076547189e-02f, +1.872172627e-02f, -6.670948102e-03f, -6.041556545e-04f, +3.324116326e-03f, -2.815826067e-03f, +1.067434235e-03f, +3.267129711e-04f, -7.782007847e-04f, +5.480545602e-04f, -1.648990303e-04f, -4.796562905e-05f, +7.235426794e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.645965921e-04f, -2.112420613e-03f, +2.912635370e-03f, -2.413349117e-04f, -7.282578078e-03f, +1.632703325e-02f, -1.903925273e-02f, +8.471471246e-03f, +1.411043333e-02f, -3.678493037e-02f, +4.347659782e-02f, -2.588546281e-02f, -8.558813371e-03f, +4.016067085e-02f, -5.022301326e-02f, +3.405272429e-02f, -3.549010597e-03f, -2.223165679e-02f, +3.050365661e-02f, -2.176573522e-02f, +6.318723299e-03f, +5.059450324e-03f, -8.124271802e-03f, +5.428027756e-03f, -1.783609441e-03f, +2.535037690e-04f, +0.000000000e+00f, +0.000000000e+00f, -9.160123521e-06f, +8.393024523e-05f, -3.034707119e-04f, +5.617955815e-04f, -5.614854043e-04f, -2.530729057e-08f, +1.084163094e-03f, -2.120706396e-03f, +2.260369555e-03f, -1.006496356e-03f, -1.244002728e-03f, +3.269964059e-03f, -3.782883076e-03f, +2.351588503e-03f, +2.353414328e-04f, -2.487892755e-03f, +3.226901958e-03f, -2.315609666e-03f, +5.960846152e-04f, +8.255236372e-04f, -1.326863789e-03f, +1.013509211e-03f, -4.106523320e-04f, -2.249308205e-05f, +1.531391213e-04f, -7.235426794e-05f, +0.000000000e+00f, /* 13,24 (28) */ +0.000000000e+00f, -6.554364686e-04f, +1.435954742e-03f, -6.043940881e-04f, -3.601658727e-03f, +9.748754595e-03f, -1.147043315e-02f, +8.747993327e-04f, +2.305532325e-02f, -4.706111806e-02f, +4.502147775e-02f, +1.034670932e-02f, -1.382019448e-01f, +4.147242623e-01f, +6.974647160e-01f, +5.908630741e-02f, -1.142433494e-01f, +7.929745057e-02f, -2.414250999e-02f, -1.453901327e-02f, +2.536548964e-02f, -1.670910491e-02f, +3.640914129e-03f, +3.837456302e-03f, -4.460187261e-03f, +2.047894609e-03f, -1.811495010e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.301125136e-05f, -1.038278118e-04f, +2.517267148e-04f, -2.755999959e-04f, -8.838371623e-05f, +8.851696499e-04f, -1.625427028e-03f, +1.343085979e-03f, +7.585853157e-04f, -4.332680891e-03f, +7.160371421e-03f, -4.458858722e-03f, -2.288083364e-02f, +9.583226735e-03f, +1.940403981e-02f, -6.266780051e-03f, -1.050589220e-03f, +3.533325761e-03f, -2.801121667e-03f, +9.536921084e-04f, +4.270056022e-04f, -8.198596317e-04f, +5.433806772e-04f, -1.451167943e-04f, -6.236154208e-05f, +7.779632627e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.554364686e-04f, -2.028490368e-03f, +2.609164658e-03f, +3.204606698e-04f, -7.844063483e-03f, +1.632700794e-02f, -1.795508964e-02f, +6.350764850e-03f, +1.637080289e-02f, -3.779142672e-02f, +4.223259509e-02f, -2.261549875e-02f, -1.234169645e-02f, +4.251225936e-02f, -4.998767183e-02f, +3.156483154e-02f, -3.221086391e-04f, -2.454726646e-02f, +3.109974122e-02f, -2.094021158e-02f, +4.991859510e-03f, +6.072959535e-03f, -8.534924134e-03f, +5.405534674e-03f, -1.630470320e-03f, +1.811495010e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.301125136e-05f, +9.347354665e-05f, -3.083208650e-04f, +5.430363062e-04f, -5.014317596e-04f, -9.530929370e-05f, +1.170065125e-03f, -2.128286983e-03f, +2.141357629e-03f, -7.808762236e-04f, -1.478820780e-03f, +3.387192871e-03f, -3.705839200e-03f, +2.108575985e-03f, +5.236738917e-04f, -2.682342166e-03f, +3.252380873e-03f, -2.195774053e-03f, +4.220897246e-04f, +9.611995013e-04f, -1.381372273e-03f, +1.000194868e-03f, -3.698979596e-04f, -5.738350604e-05f, +1.709545933e-04f, -7.779632627e-05f, +0.000000000e+00f, /* 13,25 (28) */ +0.000000000e+00f, -6.424252172e-04f, +1.332126931e-03f, -3.526673733e-04f, -3.877258723e-03f, +9.660370879e-03f, -1.058526350e-02f, -7.506276950e-04f, +2.439840923e-02f, -4.630253275e-02f, +4.068879686e-02f, +1.750708074e-02f, -1.426608035e-01f, +3.918434286e-01f, +7.070479427e-01f, +7.849034723e-02f, -1.205101295e-01f, +7.824686135e-02f, -2.060918422e-02f, -1.734013494e-02f, +2.631918174e-02f, -1.628209931e-02f, +2.821054498e-03f, +4.380836980e-03f, -4.605304055e-03f, +1.985533067e-03f, -1.033531748e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.653484773e-05f, -1.067519422e-04f, +2.441089716e-04f, -2.453151088e-04f, -1.384374741e-04f, +9.196172989e-04f, -1.582868856e-03f, +1.182409513e-03f, +9.879403409e-04f, -4.445859978e-03f, +6.871135840e-03f, -3.541250899e-03f, -2.310356835e-02f, +8.369761437e-03f, +2.004119328e-02f, -5.817365362e-03f, -1.503013125e-03f, +3.728367080e-03f, -2.770808149e-03f, +8.320375289e-04f, +5.274154314e-04f, -8.580249187e-04f, +5.354408745e-04f, -1.237815994e-04f, -7.697472709e-05f, +8.299062107e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.424252172e-04f, -1.935016821e-03f, +2.300843793e-03f, +8.634969759e-04f, -8.345495242e-03f, +1.623169864e-02f, -1.678502451e-02f, +4.222477867e-03f, +1.851216052e-02f, -3.857230295e-02f, +4.075377431e-02f, -1.922830588e-02f, -1.604753565e-02f, +4.462083534e-02f, -4.946399793e-02f, +2.888248937e-02f, +2.930272234e-03f, -2.674304051e-02f, +3.152183095e-02f, -1.997901208e-02f, +3.610487237e-03f, +7.073154403e-03f, -8.904822093e-03f, +5.348151168e-03f, -1.459515726e-03f, +1.033531748e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.653484773e-05f, +1.019138003e-04f, -3.110006277e-04f, +5.214635108e-04f, -4.397965535e-04f, -1.881183206e-04f, +1.247642724e-03f, -2.123292941e-03f, +2.011146789e-03f, -5.526110575e-04f, -1.703615528e-03f, +3.484297476e-03f, -3.607394893e-03f, +1.853180061e-03f, +8.097304951e-04f, -2.862086821e-03f, +3.258993846e-03f, -2.061863229e-03f, +2.434593859e-04f, +1.093202598e-03f, -1.428559377e-03f, +9.804601475e-04f, -3.257238936e-04f, -9.305865870e-05f, +1.883220027e-04f, -8.299062107e-05f, +0.000000000e+00f, /* 13,26 (28) */ +0.000000000e+00f, -6.258903695e-04f, +1.225374988e-03f, -1.085584017e-04f, -4.122573832e-03f, +9.521933405e-03f, -9.665646201e-03f, -2.333496551e-03f, +2.558081874e-02f, -4.531459241e-02f, +3.624293688e-02f, +2.437821658e-02f, -1.462020544e-01f, +3.687398603e-01f, +7.154177042e-01f, +9.853154051e-02f, -1.263274948e-01f, +7.674384822e-02f, -1.688081714e-02f, -2.011094309e-02f, +2.715121927e-02f, -1.575468388e-02f, +1.963029579e-03f, +4.916277854e-03f, -4.729085655e-03f, +1.908558340e-03f, -2.036255371e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.972130207e-05f, -1.088752545e-04f, +2.353482853e-04f, -2.146071067e-04f, -1.863212354e-04f, +9.481673272e-04f, -1.532754550e-03f, +1.019013777e-03f, +1.206918557e-03f, -4.533089791e-03f, +6.554758287e-03f, -2.641327353e-03f, -2.325733829e-02f, +7.128982949e-03f, +2.063020921e-02f, -5.323423542e-03f, -1.959244968e-03f, +3.907872914e-03f, -2.724699307e-03f, +7.029604286e-04f, +6.273818821e-04f, -8.923856324e-04f, +5.241845982e-04f, -1.009698238e-04f, -9.172032850e-05f, +8.788812129e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.258903695e-04f, -1.833103021e-03f, +1.989843165e-03f, +1.384960487e-03f, -8.785291796e-03f, +1.604358032e-02f, -1.553738179e-02f, +2.099184926e-03f, +2.052330731e-02f, -3.912491400e-02f, +3.905015878e-02f, -1.574400840e-02f, -1.965493054e-02f, +4.647401540e-02f, -4.865426744e-02f, +2.602040255e-02f, +6.189266080e-03f, -2.880490374e-02f, +3.176529033e-02f, -1.888580949e-02f, +2.181927861e-03f, +8.053614551e-03f, -9.230545987e-03f, +5.255092509e-03f, -1.271193724e-03f, +2.036255371e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.972130207e-05f, +1.092351538e-04f, -3.115662449e-04f, +4.972935788e-04f, -3.769973760e-04f, -2.779383284e-04f, +1.316567093e-03f, -2.105923006e-03f, +1.870628335e-03f, -3.230687144e-04f, -1.917125117e-03f, +3.560784353e-03f, -3.488164527e-03f, +1.586897125e-03f, +1.091819867e-03f, -3.025994011e-03f, +3.246567767e-03f, -1.914541550e-03f, +6.120935012e-05f, +1.220679060e-03f, -1.468003595e-03f, +9.542885906e-04f, -2.783235296e-04f, -1.293054374e-04f, +2.050996884e-04f, -8.788812129e-05f, +0.000000000e+00f, /* 13,27 (28) */ +0.000000000e+00f, -6.061690674e-04f, +1.116499734e-03f, +1.267898836e-04f, -4.337180938e-03f, +9.335612169e-03f, -8.717478874e-03f, -3.866251101e-03f, +2.659983252e-02f, -4.410767385e-02f, +3.170984709e-02f, +3.093297487e-02f, -1.488433818e-01f, +3.454825220e-01f, +7.225466871e-01f, +1.191617497e-01f, -1.316509184e-01f, +7.478460326e-02f, -1.297294423e-02f, -2.283564240e-02f, +2.785417970e-02f, -1.512730200e-02f, +1.070643947e-03f, +5.440462452e-03f, -4.830055478e-03f, +1.816838011e-03f, +6.752556758e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.256396701e-05f, -1.102181715e-04f, +2.255382006e-04f, -1.836662090e-04f, -2.318255039e-04f, +9.708096177e-04f, -1.475532923e-03f, +8.538373316e-04f, +1.414590709e-03f, -4.594518981e-03f, +6.213497163e-03f, -1.762150982e-03f, -2.334233961e-02f, +5.864906750e-03f, +2.116826255e-02f, -4.785880117e-03f, -2.417031984e-03f, +4.070527577e-03f, -2.662690692e-03f, +5.670029988e-04f, +7.263334385e-04f, -9.226446183e-04f, +5.095794818e-04f, -7.676940549e-05f, -1.065094541e-04f, +9.243979450e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.061690674e-04f, -1.723867867e-03f, +1.678276920e-03f, +1.882254066e-03f, -9.162289172e-03f, +1.576564200e-02f, -1.422081469e-02f, -6.738080122e-06f, +2.239393564e-02f, -3.944798272e-02f, +3.713303366e-02f, -1.218322405e-02f, -2.314309507e-02f, +4.806091253e-02f, -4.756244757e-02f, +2.299440854e-02f, +9.435833847e-03f, -3.071944529e-02f, +3.182649968e-02f, -1.766513042e-02f, +7.139242659e-04f, +9.007903141e-03f, -9.508869516e-03f, +5.125787072e-03f, -1.066094035e-03f, -6.752556758e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.256396701e-05f, +1.154306656e-04f, -3.100865742e-04f, +4.707538773e-04f, -3.134495968e-04f, -3.642835795e-04f, +1.376567395e-03f, -2.076447930e-03f, +1.720745848e-03f, -9.361335813e-05f, -2.118162462e-03f, +3.616284452e-03f, -3.348884988e-03f, +1.311288979e-03f, +1.368269953e-03f, -3.173020325e-03f, +3.215042567e-03f, -1.754560479e-03f, -1.236106114e-04f, +1.342790380e-03f, -1.499324190e-03f, +9.217042209e-04f, -2.279161552e-04f, -1.659004742e-04f, +2.211452307e-04f, -9.243979450e-05f, +0.000000000e+00f, /* 13,28 (28) */ +0.000000000e+00f, -5.836051004e-04f, +1.006281562e-03f, +3.523280842e-04f, -4.520847147e-03f, +9.103786665e-03f, -7.746669256e-03f, -5.341784024e-03f, +2.745366985e-02f, -4.269308314e-02f, +2.711532811e-02f, +3.714647203e-02f, -1.506055328e-01f, +3.221401824e-01f, +7.284115939e-01f, +1.403300123e-01f, -1.364367985e-01f, +7.236757127e-02f, -8.902416653e-03f, -2.549833309e-02f, +2.842118270e-02f, -1.440096856e-02f, +1.479993283e-04f, +5.950041934e-03f, -4.906824884e-03f, +1.710328557e-03f, +1.599653621e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.505909028e-05f, -1.108054658e-04f, +2.147754990e-04f, -1.526782824e-04f, -2.747599914e-04f, +9.875672809e-04f, -1.411681506e-03f, +6.878078633e-04f, +1.610107075e-03f, -4.630424092e-03f, +5.849674317e-03f, -9.066498346e-04f, -2.335902471e-02f, +4.581640972e-03f, +2.165269369e-02f, -4.205865745e-03f, -2.874060547e-03f, +4.215075025e-03f, -2.584761905e-03f, +4.247578241e-04f, +8.236906398e-04f, -9.485206610e-04f, +4.916120469e-04f, -5.127965363e-05f, -1.212496189e-04f, +9.659695896e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.836051004e-04f, -1.608437201e-03f, +1.368190346e-03f, +2.353007943e-03f, -9.475738768e-03f, +1.540135842e-02f, -1.284424730e-02f, -2.083186010e-03f, +2.411468149e-02f, -3.954159608e-02f, +3.501487120e-02f, -8.566939598e-03f, -2.649198006e-02f, +4.937220151e-02f, -4.619417762e-02f, +1.982138821e-02f, +1.265087641e-02f, -3.247400577e-02f, +3.170288907e-02f, -1.632234004e-02f, -7.853999246e-04f, +9.929607362e-03f, -9.736785672e-03f, +4.959886598e-03f, -8.449488044e-04f, -1.599653621e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.505909028e-05f, +1.205020512e-04f, -3.066422271e-04f, +4.420809697e-04f, -2.495637551e-04f, -4.466991721e-04f, +1.427431506e-03f, -2.035207894e-03f, +1.562488909e-03f, +1.344027528e-04f, -2.305621944e-03f, +3.650554938e-03f, -3.190411044e-03f, +1.027973458e-03f, +1.637438139e-03f, -3.302218369e-03f, +3.164472353e-03f, -1.582754796e-03f, -3.099227758e-04f, +1.458718841e-03f, -1.522184299e-03f, +8.827722149e-04f, -1.747461205e-04f, -2.026113880e-04f, +2.363164738e-04f, -9.659695896e-05f, +0.000000000e+00f, /* 13,29 (28) */ +0.000000000e+00f, -5.585460101e-04f, +8.954760966e-04f, +5.671035832e-04f, -4.673525430e-03f, +8.829026674e-03f, -6.759101975e-03f, -6.753465530e-03f, +2.814147771e-02f, -4.108297607e-02f, +2.248490402e-02f, +4.299614635e-02f, -1.515121826e-01f, +2.987811577e-01f, +7.329932348e-01f, +1.619827059e-01f, -1.406426642e-01f, +6.949351073e-02f, -4.687341628e-03f, -2.808309500e-02f, +2.884594052e-02f, -1.357727792e-02f, -8.005213327e-04f, +6.441653981e-03f, -4.958104537e-03f, +1.589078938e-03f, +2.565623210e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.720572775e-05f, -1.106659353e-04f, +2.031594912e-04f, -1.218238603e-04f, -3.149542135e-04f, +9.984957275e-04f, -1.341703266e-03f, +5.218374028e-04f, +1.792700286e-03f, -4.641205545e-03f, +5.465663188e-03f, -7.760647110e-05f, -2.330809873e-02f, +3.283370116e-03f, +2.208102088e-02f, -3.584714385e-03f, -3.327966122e-03f, +4.340326664e-03f, -2.490978499e-03f, +2.768656977e-04f, +9.188691881e-04f, -9.697505223e-04f, +4.702883075e-04f, -2.461098367e-05f, -1.358452277e-04f, +1.003116459e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.585460101e-04f, -1.487935150e-03f, +1.061548119e-03f, +2.795088913e-03f, -9.725302524e-03f, +1.495465924e-02f, -1.141681579e-02f, -4.118393903e-03f, +2.567717040e-02f, -3.940719332e-02f, +3.270924926e-02f, -4.916384659e-03f, -2.968239110e-02f, +5.040017497e-02f, -4.455673948e-02f, +1.651916984e-02f, +1.581534877e-02f, -3.405676057e-02f, +3.139296630e-02f, -1.486362120e-02f, -2.307584223e-03f, +1.081237958e-02f, -9.911531792e-03f, +4.757275210e-03f, -6.086323306e-04f, -2.565623210e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.720572775e-05f, +1.244593717e-04f, -3.013246526e-04f, +4.115188110e-04f, -1.857430367e-04f, -5.247633121e-04f, +1.469006405e-03f, -1.982609517e-03f, +1.396886603e-03f, +3.596473381e-04f, -2.478485587e-03f, +3.663480167e-03f, -3.013710000e-03f, +7.386147236e-04f, +1.897721222e-03f, -3.412742929e-03f, +3.095025844e-03f, -1.400038251e-03f, -4.966277806e-04f, +1.567672895e-03f, -1.536293796e-03f, +8.375993150e-04f, -1.190818207e-04f, -2.391981328e-04f, +2.504725758e-04f, -1.003116459e-04f, +0.000000000e+00f, /* 13,30 (28) */ +0.000000000e+00f, -5.313402824e-04f, +7.848101613e-04f, +7.702630743e-04f, -4.795349290e-03f, +8.514072460e-03f, -5.760606248e-03f, -8.095168796e-03f, +2.866331511e-02f, -3.929027578e-02f, +1.784369847e-02f, +4.846180954e-02f, -1.515897891e-01f, +2.754730589e-01f, +7.362766049e-01f, +1.840637268e-01f, -1.442273786e-01f, +6.616554460e-02f, -3.470149638e-04f, -3.057407349e-02f, +2.912280622e-02f, -1.265840873e-02f, -1.770271855e-03f, +6.911942288e-03f, -4.982715521e-03f, +1.453233711e-03f, +3.568739670e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.900563891e-05f, -1.098320620e-04f, +1.907913140e-04f, -9.127722124e-05f, -3.522579540e-04f, +1.003681580e-03f, -1.266123263e-03f, +3.568177317e-04f, +1.961687659e-03f, -4.627383065e-03f, +5.063876891e-03f, +7.223519144e-04f, -2.319051509e-02f, +1.974338440e-03f, +2.245095193e-02f, -2.923960520e-03f, -3.776343637e-03f, +4.445168958e-03f, -2.381493442e-03f, +1.240131204e-04f, +1.011283154e-03f, -9.860909236e-04f, +4.456342732e-04f, +3.115425745e-06f, -1.501980935e-04f, +1.035369698e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.313402824e-04f, -1.363475778e-03f, +7.602234664e-04f, +3.206607724e-03f, -9.911045560e-03f, +1.442989593e-02f, -9.947809388e-03f, -6.101003420e-03f, +2.707405700e-02f, -3.904754599e-02f, +3.023076367e-02f, -1.252904492e-03f, -3.269610110e-02f, +5.113878969e-02f, -4.265901826e-02f, +1.310642691e-02f, +1.891037461e-02f, -3.545679882e-02f, +3.089633852e-02f, -1.329594831e-02f, -3.843878019e-03f, +1.164997889e-02f, -1.003061361e-02f, +4.518077077e-03f, -3.581597548e-04f, -3.568739670e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.900563891e-05f, +1.273206692e-04f, -2.942351695e-04f, +3.793169380e-04f, -1.223808529e-04f, -5.980893329e-04f, +1.501198175e-03f, -1.919122492e-03f, +1.225000850e-03f, +5.808159810e-04f, -2.635828651e-03f, +3.655071878e-03f, -2.819855678e-03f, +4.449132663e-04f, +2.147565162e-03f, -3.503856533e-03f, +3.006986120e-03f, -1.207398695e-03f, -6.826111404e-04f, +1.668892457e-03f, -1.541411923e-03f, +7.863339812e-04f, -6.121449438e-05f, -2.754144351e-04f, +2.634750820e-04f, -1.035369698e-04f, +0.000000000e+00f, /* 13,31 (28) */ +0.000000000e+00f, -5.023346435e-04f, +6.749780993e-04f, +9.610543883e-04f, -4.886626511e-03f, +8.161814506e-03f, -4.756924668e-03f, -9.361292059e-03f, +2.902013285e-02f, -3.732858812e-02f, +1.321631540e-02f, +5.352568643e-02f, -1.508674372e-01f, +2.522825438e-01f, +7.382509434e-01f, +2.065146788e-01f, -1.471513392e-01f, +6.238920097e-02f, +4.098153994e-03f, -3.295556694e-02f, +2.924681934e-02f, -1.164712558e-02f, -2.756362779e-03f, +7.357576562e-03f, -4.979600095e-03f, +1.303035617e-03f, +4.604109368e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.046316603e-05f, -1.083396587e-04f, +1.777732382e-04f, -6.120553119e-05f, -3.865415996e-04f, +1.003241430e-03f, -1.185485254e-03f, +1.936159896e-04f, +2.116473039e-03f, -4.589590608e-03f, +4.646756306e-03f, +1.490762572e-03f, -2.300746985e-02f, +6.588330695e-04f, +2.276039521e-02f, -2.225335438e-03f, -4.216758229e-03f, +4.528570802e-03f, -2.256548147e-03f, -3.307050691e-05f, +1.100348265e-03f, -9.973204594e-04f, +4.176963452e-04f, +3.176805304e-05f, -1.642079905e-04f, +1.062275038e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.023346435e-04f, -1.236155109e-03f, +4.659882969e-04f, +3.585924662e-03f, -1.003342641e-02f, +1.383180660e-02f, -8.446611213e-03f, -8.020125912e-03f, +2.829905785e-02f, -3.846673000e-02f, +2.759493502e-02f, +2.402167386e-03f, -3.551595678e-02f, +5.158370296e-02f, -4.051145310e-02f, +9.602570382e-03f, +2.191736073e-02f, -3.666419751e-02f, +3.021372738e-02f, -1.162705585e-02f, -5.385289943e-03f, +1.243631287e-02f, -1.009182811e-02f, +4.242662642e-03f, -9.468467279e-05f, -4.604109368e-04f, +0.000000000e+00f, +0.000000000e+00f, -3.046316603e-05f, +1.291115539e-04f, -2.854839571e-04f, +3.457286673e-04f, -5.985853526e-05f, -6.663274538e-04f, +1.523971638e-03f, -1.845275877e-03f, +1.047919596e-03f, +7.966397787e-04f, -2.776824637e-03f, +3.625468615e-03f, -2.610021763e-03f, +1.485956862e-04f, +2.385474553e-03f, -3.574934381e-03f, +2.900749650e-03f, -1.005892713e-03f, -8.667499304e-04f, +1.761654064e-03f, -1.537349632e-03f, +7.291662721e-04f, -1.456841193e-06f, -3.110093128e-04f, +2.751890125e-04f, -1.062275038e-04f, +0.000000000e+00f, /* 14, 0 (24) */ +1.319331966e-03f, -1.016178713e-03f, -2.318012042e-03f, +9.411795907e-03f, -1.746941689e-02f, +1.934834705e-02f, -5.865137636e-03f, -2.904336543e-02f, +8.299055312e-02f, -1.433490386e-01f, +1.911490954e-01f, +7.906420751e-01f, +1.911490954e-01f, -1.433490386e-01f, +8.299055312e-02f, -2.904336543e-02f, -5.865137636e-03f, +1.934834705e-02f, -1.746941689e-02f, +9.411795907e-03f, -2.318012042e-03f, -1.016178713e-03f, +1.319331966e-03f, -5.404051147e-04f, -1.109810220e-04f, +2.792412597e-04f, -4.162395040e-04f, +2.681541873e-04f, +4.370013667e-04f, -1.728583557e-03f, +3.123298077e-03f, -3.522678090e-03f, +1.316008579e-03f, +5.800269820e-03f, -2.514586977e-02f, -8.074287558e-04f, +2.561749162e-02f, -5.116231187e-03f, -1.869931669e-03f, +3.792950829e-03f, -3.164392635e-03f, +1.651659887e-03f, -3.384863843e-04f, -3.369139762e-04f, +4.464001348e-04f, -2.845231361e-04f, +1.077107189e-04f, -2.077189525e-05f, -2.521351164e-03f, +4.422857262e-03f, -3.985881589e-03f, -1.343441160e-03f, +1.186209570e-02f, -2.390185965e-02f, +3.059439799e-02f, -2.544922973e-02f, +6.875499987e-03f, +1.945720767e-02f, -4.255924117e-02f, +5.173229864e-02f, -4.255924117e-02f, +1.945720767e-02f, +6.875499987e-03f, -2.544922973e-02f, +3.059439799e-02f, -2.390185965e-02f, +1.186209570e-02f, -1.343441160e-03f, -3.985881589e-03f, +4.422857262e-03f, -2.521351164e-03f, +7.211855688e-04f, +6.072659436e-05f, -2.953826578e-04f, +6.820156149e-04f, -1.031097358e-03f, +1.015681388e-03f, -3.561531937e-04f, -9.391669774e-04f, +2.450877999e-03f, -3.477318114e-03f, +3.391189819e-03f, -2.025202753e-03f, -1.670709024e-04f, +2.305298307e-03f, -3.533554494e-03f, +3.458047368e-03f, -2.309355224e-03f, +7.508119949e-04f, +5.194413529e-04f, -1.114678443e-03f, +1.065259737e-03f, -6.753204994e-04f, +2.755057020e-04f, -4.485014415e-05f, -1.577677262e-05f, /* 14, 1 (24) */ +1.208350944e-03f, -7.369374536e-04f, -2.734251546e-03f, +9.679950095e-03f, -1.703241552e-02f, +1.761976349e-02f, -2.741839559e-03f, -3.256604352e-02f, +8.430656170e-02f, -1.375487688e-01f, +1.660032257e-01f, +7.898346463e-01f, +2.167665871e-01f, -1.484652698e-01f, +8.112062145e-02f, -2.525041460e-02f, -9.029530272e-03f, +2.100000693e-02f, -1.780790327e-02f, +9.074881931e-03f, -1.871611907e-03f, -1.300701849e-03f, +1.427042685e-03f, -5.611770099e-04f, -1.132769885e-04f, +2.722990093e-04f, -3.844197788e-04f, +1.997569424e-04f, +5.301287691e-04f, -1.792905577e-03f, +3.064104582e-03f, -3.237770263e-03f, +7.693575179e-04f, +6.427817053e-03f, -2.459851709e-02f, -2.419251706e-03f, +2.601037077e-02f, -4.377423792e-03f, -2.428048240e-03f, +4.046567084e-03f, -3.186688509e-03f, +1.562304760e-03f, -2.350749122e-04f, -4.055922468e-04f, +4.746388069e-04f, -2.880397168e-04f, +1.034438555e-04f, -1.748860713e-05f, -2.460624570e-03f, +4.127474604e-03f, -3.303865974e-03f, -2.374538518e-03f, +1.287777709e-02f, -2.425801284e-02f, +2.965523102e-02f, -2.299835173e-02f, +3.398181873e-03f, +2.284839749e-02f, -4.458444392e-02f, +5.156522774e-02f, -4.025394286e-02f, +1.592365318e-02f, +1.033354735e-02f, -2.775858495e-02f, +3.134520999e-02f, -2.338241830e-02f, +1.074741726e-02f, -2.781814231e-04f, -4.661202089e-03f, +4.698362964e-03f, -2.566201308e-03f, +7.054087962e-04f, +7.538821808e-05f, -3.124533545e-04f, +6.838558830e-04f, -9.908186807e-04f, +9.118528457e-04f, -1.930888630e-04f, -1.118978483e-03f, +2.574973750e-03f, -3.473737270e-03f, +3.227370804e-03f, -1.732556364e-03f, -5.001090489e-04f, +2.570960486e-03f, -3.653419413e-03f, +3.415889335e-03f, -2.151181767e-03f, +5.550744497e-04f, +6.818471861e-04f, -1.208069693e-03f, +1.092922874e-03f, -6.636794493e-04f, +2.528726818e-04f, -2.783507069e-05f, -2.381418972e-05f, /* 14, 2 (24) */ +1.095073956e-03f, -4.646384443e-04f, -3.118671324e-03f, +9.879707037e-03f, -1.650228675e-02f, +1.582685791e-02f, +3.222650227e-04f, -3.580381378e-02f, +8.507591921e-02f, -1.311209517e-01f, +1.414047086e-01f, +7.874153946e-01f, +2.427769578e-01f, -1.528426936e-01f, +7.869257321e-02f, -2.120384752e-02f, -1.221621878e-02f, +2.256231169e-02f, -1.804297818e-02f, +8.669289684e-03f, -1.396973100e-03f, -1.588741566e-03f, +1.530486541e-03f, -5.786656170e-04f, -1.146273481e-04f, +2.638091165e-04f, -3.512064868e-04f, +1.321512073e-04f, +6.174246080e-04f, -1.844538592e-03f, +2.987606279e-03f, -2.940288413e-03f, +2.329402775e-04f, +6.997457314e-03f, -2.397874210e-02f, -4.021984840e-03f, +2.632180873e-02f, -3.585873696e-03f, -2.987177601e-03f, +4.281558207e-03f, -3.189586889e-03f, +1.460772114e-03f, -1.273031399e-04f, -4.737324154e-04f, +5.006972502e-04f, -2.896949507e-04f, +9.816516147e-05f, -1.379343640e-05f, -2.385236352e-03f, +3.815021250e-03f, -2.620010092e-03f, -3.365357199e-03f, +1.378962994e-02f, -2.445110171e-02f, +2.853625253e-02f, -2.042337798e-02f, -7.555539715e-05f, +2.607576830e-02f, -4.631700029e-02f, +5.106511869e-02f, -3.768298238e-02f, +1.227023377e-02f, +1.374943669e-02f, -2.990976672e-02f, +3.190028444e-02f, -2.270057111e-02f, +9.539347567e-03f, +8.147414509e-04f, -5.324881538e-03f, +4.951235646e-03f, -2.594036379e-03f, +6.815946065e-04f, +8.877170376e-05f, -3.266902341e-04f, +6.809646889e-04f, -9.448407337e-04f, +8.039859160e-04f, -3.133612787e-05f, -1.289157457e-03f, +2.680990491e-03f, -3.447493111e-03f, +3.043281239e-03f, -1.429321052e-03f, -8.298436705e-04f, +2.820399027e-03f, -3.749885259e-03f, +3.350962203e-03f, -1.977254177e-03f, +3.531799680e-04f, +8.422536019e-04f, -1.295105441e-03f, +1.113741447e-03f, -6.470352143e-04f, +2.275567523e-04f, -9.770303819e-06f, -3.218395171e-05f, /* 14, 3 (24) */ +9.804466076e-04f, -2.008293278e-04f, -3.469877811e-03f, +1.001185824e-02f, -1.588486214e-02f, +1.398231932e-02f, +3.309871302e-03f, -3.874410219e-02f, +8.530885949e-02f, -1.241234944e-01f, +1.174259665e-01f, +7.833934098e-01f, +2.690987666e-01f, -1.564285673e-01f, +7.570539561e-02f, -1.692228931e-02f, -1.540580567e-02f, +2.402308381e-02f, -1.817028132e-02f, +8.195557269e-03f, -8.962758497e-04f, -1.878436517e-03f, +1.628651702e-03f, -5.924590534e-04f, -1.150668549e-04f, +2.538910417e-04f, -3.168659264e-04f, +6.574844617e-05f, +6.984936588e-04f, -1.883476665e-03f, +2.894684681e-03f, -2.632320229e-03f, -2.904118058e-04f, +7.508084114e-03f, -2.329013183e-02f, -5.609614430e-03f, +2.654943575e-02f, -2.743905104e-03f, -3.544052373e-03f, +4.496021339e-03f, -3.172595983e-03f, +1.347400030e-03f, -1.575000056e-05f, -5.408681089e-04f, +5.243237464e-04f, -2.894026873e-04f, +9.186672811e-05f, -9.696585427e-06f, -2.296464648e-03f, +3.488331016e-03f, -1.939045403e-03f, -4.310197933e-03f, +1.459361585e-02f, -2.448243784e-02f, +2.724709508e-02f, -1.774238748e-02f, -3.523048508e-03f, +2.911904954e-02f, -4.774632134e-02f, +5.023527502e-02f, -3.486258335e-02f, +8.520348508e-03f, +1.710039889e-02f, -3.188702089e-02f, +3.225346441e-02f, -2.185831751e-02f, +8.244242126e-03f, +1.928482897e-03f, -5.971916752e-03f, +5.178792398e-03f, -2.603806683e-03f, +6.494106547e-04f, +1.008266842e-04f, -3.380878856e-04f, +6.734959762e-04f, -8.936109333e-04f, +6.928866110e-04f, +1.280428443e-04f, -1.448693266e-03f, +2.768403831e-03f, -3.398924148e-03f, +2.840234656e-03f, -1.117524677e-03f, -1.154097198e-03f, +3.051928256e-03f, -3.822205572e-03f, +3.263538301e-03f, -1.788584202e-03f, +1.464112060e-04f, +9.995402078e-04f, -1.375066372e-03f, +1.127411078e-03f, -6.253657010e-04f, +1.996541794e-04f, +9.242779774e-06f, -4.082166865e-05f, /* 14, 4 (24) */ +8.653797527e-04f, +5.306171384e-05f, -3.786743738e-03f, +1.007760669e-02f, -1.518636848e-02f, +1.209884266e-02f, +6.204555983e-03f, -4.137642242e-02f, +8.501844769e-02f, -1.166154103e-01f, +9.413583464e-02f, +7.777837954e-01f, +2.956482023e-01f, -1.591724724e-01f, +7.216134324e-02f, -1.242626797e-02f, -1.857840165e-02f, +2.537048384e-02f, -1.818603132e-02f, +7.654689160e-03f, -3.719521032e-04f, -2.167839204e-03f, +1.720518430e-03f, -6.021556389e-04f, -1.146357766e-04f, +2.426698797e-04f, -2.816633266e-04f, +9.403973572e-07f, +7.729907520e-04f, -1.909793379e-03f, +2.786301303e-03f, -2.315967098e-03f, -7.980105833e-04f, +7.958900442e-03f, -2.253653250e-02f, -7.176195729e-03f, +2.669122460e-02f, -1.854133470e-03f, -4.095334701e-03f, +4.688132339e-03f, -3.135336557e-03f, +1.222610598e-03f, +9.896552842e-05f, -6.065260382e-04f, +5.452751006e-04f, -2.870876684e-04f, +8.454837357e-05f, -5.212494168e-06f, -2.195637964e-03f, +3.150243130e-03f, -1.265549426e-03f, -5.203808866e-03f, +1.528650246e-02f, -2.435439499e-02f, +2.579840181e-02f, -1.497398365e-02f, -6.921972656e-03f, +3.195928419e-02f, -4.886384601e-02f, +4.908117782e-02f, -3.181065509e-02f, +4.698142935e-03f, +2.036393719e-02f, -3.367560509e-02f, +3.239987561e-02f, -2.085877730e-02f, +6.869175755e-03f, +3.055893975e-03f, -6.597282453e-03f, +5.378446577e-03f, -2.594563903e-03f, +6.085889861e-04f, +1.115156796e-04f, -3.466623980e-04f, +6.616323241e-04f, -8.376032387e-04f, +5.793680015e-04f, +2.840184150e-04f, -1.596659646e-03f, +2.836819321e-03f, -3.328515775e-03f, +2.619664849e-03f, -7.992472087e-04f, -1.470729056e-03f, +3.263978705e-03f, -3.869792487e-03f, +3.154043298e-03f, -1.586292933e-03f, -6.390032318e-05f, +1.152591083e-03f, -1.447269204e-03f, +1.133671437e-03f, -5.986850604e-04f, +1.692843111e-04f, +2.909075206e-05f, -4.965723057e-05f, /* 14, 5 (24) */ +7.507439760e-04f, +2.957315935e-04f, -4.068407064e-03f, +1.007854709e-02f, -1.441337773e-02f, +1.018904928e-02f, +8.990857287e-03f, -4.369238952e-02f, +8.422043710e-02f, -1.086565098e-01f, +7.159930214e-02f, +7.706075996e-01f, +3.223394269e-01f, -1.610266058e-01f, +6.806600853e-02f, -7.738135630e-03f, -2.171373821e-02f, +2.659309444e-02f, -1.808706580e-02f, +7.048163122e-03f, +1.733229974e-04f, -2.454926873e-03f, +1.805066804e-03f, -6.073681330e-04f, -1.133793599e-04f, +2.302752612e-04f, -2.458610686e-04f, -6.190295822e-05f, +8.406217126e-04f, -1.923639489e-03f, +2.663489957e-03f, -1.993331364e-03f, -1.287322799e-03f, +8.349417553e-03f, -2.172202907e-02f, -8.715880075e-03f, +2.674550282e-02f, -9.194569997e-04f, -4.637633170e-03f, +4.856158506e-03f, -3.077546892e-03f, +1.086909229e-03f, +2.161874566e-04f, -6.702289988e-04f, +5.633186114e-04f, -2.826864722e-04f, +7.621795958e-05f, -3.598993315e-07f, -2.084122284e-03f, +2.803580732e-03f, -6.039171023e-04f, -6.041412105e-03f, +1.586587046e-02f, -2.407037658e-02f, +2.420174217e-02f, -1.213716433e-02f, -1.025048843e-02f, +3.457894904e-02f, -4.966309322e-02f, +4.761044877e-02f, -2.854667639e-02f, +8.283504485e-04f, +2.351798049e-02f, -3.526189803e-02f, +3.233597529e-02f, -1.970618622e-02f, +5.421906550e-03f, +4.189565412e-03f, -7.195967514e-03f, +5.547730888e-03f, -2.565473151e-03f, +5.589317555e-04f, +1.208139352e-04f, -3.524505644e-04f, +6.455828591e-04f, -7.773141998e-04f, +4.642444154e-04f, +4.356000735e-04f, -1.732219990e-03f, +2.885973877e-03f, -3.236895933e-03f, +2.383115619e-03f, -4.766065657e-04f, -1.777650099e-03f, +3.455107960e-03f, -3.892221410e-03f, +3.023054335e-03f, -1.371604137e-03f, -2.763828580e-04f, +1.300302629e-03f, -1.511072182e-03f, +1.132309081e-03f, -5.670445273e-04f, +1.365893649e-04f, +4.964864533e-05f, -5.861523986e-05f, /* 14, 6 (24) */ +6.373646162e-04f, +5.260068547e-04f, -4.314268133e-03f, +1.001664413e-02f, -1.357275602e-02f, +8.265409788e-03f, +1.165434724e-02f, -4.568572089e-02f, +8.293311430e-02f, -1.003070923e-01f, +4.987727307e-02f, +7.618917196e-01f, +3.490849297e-01f, -1.619460628e-01f, +6.342837536e-02f, -2.881977125e-03f, -2.479128510e-02f, +2.768000367e-02f, -1.787087834e-02f, +6.377934123e-03f, +7.366416088e-04f, -2.737613345e-03f, +1.881284763e-03f, -6.077280324e-04f, -1.113472756e-04f, +2.168402581e-04f, -2.097169809e-04f, -1.224352289e-04f, +9.011439452e-04f, -1.925240126e-03f, +2.527348763e-03f, -1.666503851e-03f, -1.755980721e-03f, +8.679452183e-03f, -2.085092377e-02f, -1.022294150e-02f, +2.671096324e-02f, +5.695342327e-05f, -5.167520313e-03f, +4.998471035e-03f, -2.999087130e-03f, +9.408834287e-04f, +3.352261326e-04f, -7.314989783e-04f, +5.782340276e-04f, -2.761484020e-04f, +6.689165615e-05f, +4.838141895e-06f, -1.963308349e-03f, +2.451130168e-03f, +4.166575678e-05f, -6.818726304e-03f, +1.633011488e-02f, -2.363477650e-02f, +2.246952217e-02f, -9.251190455e-03f, -1.348738436e-02f, +3.696206466e-02f, -5.013969979e-02f, +4.583279867e-02f, -2.509156843e-02f, -3.063870962e-03f, +2.654103483e-02f, -3.663350216e-02f, +3.205959243e-02f, -1.840588359e-02f, +3.910834368e-03f, +5.321874493e-03f, -7.763012041e-03f, +5.684320253e-03f, -2.515824506e-03f, +5.003165157e-04f, +1.287091577e-04f, -3.555089494e-04f, +6.255810230e-04f, -7.132589257e-04f, +3.483257320e-04f, +5.818426652e-04f, -1.854631957e-03f, +2.915736295e-03f, -3.124829834e-03f, +2.132229819e-03f, -1.517442280e-04f, -2.072836700e-03f, +3.624010666e-03f, -3.889234602e-03f, +2.871297113e-03f, -1.145836820e-03f, -4.896333793e-04f, +1.441591452e-03f, -1.565880356e-03f, +1.123160010e-03f, -5.305330013e-04f, +1.017340271e-04f, +7.078057912e-05f, -6.761550920e-05f, /* 14, 7 (24) */ +5.260173405e-04f, +7.428471128e-04f, -4.523985114e-03f, +9.894208901e-03f, -1.267161207e-02f, +6.340169661e-03f, +1.418169601e-02f, -4.735222474e-02f, +8.117713358e-02f, -9.162764011e-02f, +2.902634929e-02f, +7.516687781e-01f, +3.757958930e-01f, -1.618891094e-01f, +5.826085505e-02f, +2.116493911e-03f, -2.779037223e-02f, +2.862088709e-02f, -1.753565221e-02f, +5.646435145e-03f, +1.314875636e-03f, -3.013761747e-03f, +1.948176420e-03f, -6.028898905e-04f, -1.085930512e-04f, +2.025003003e-04f, -1.734827176e-04f, -1.803352363e-04f, +9.543666704e-04f, -1.914891610e-03f, +2.379031943e-03f, -1.337551709e-03f, -2.201791654e-03f, +8.949122217e-03f, -1.992771371e-02f, -1.169180272e-02f, +2.658667284e-02f, +1.071665851e-03f, -5.681550640e-03f, +5.113557114e-03f, -2.899942945e-03f, +7.852010034e-04f, +4.553619025e-04f, -7.898603562e-04f, +5.898154758e-04f, -2.674363103e-04f, +5.659415013e-05f, +1.035426515e-05f, -1.834599191e-03f, +2.095621218e-03f, +6.672467798e-04f, -7.531985230e-03f, +1.667844061e-02f, -2.305293384e-02f, +2.061489022e-02f, -6.335454160e-03f, -1.661221420e-02f, +3.909429448e-02f, -5.029144402e-02f, +4.375996197e-02f, -2.146755776e-02f, -6.953105564e-03f, +2.941233194e-02f, -3.777933898e-02f, +3.156995905e-02f, -1.696429214e-02f, +2.344954013e-03f, +6.445034503e-03f, -8.293545042e-03f, +5.786054280e-03f, -2.445043927e-03f, +4.327010065e-04f, +1.352011563e-04f, -3.559128289e-04f, +6.018822153e-04f, -6.459670054e-04f, +2.324118098e-04f, +7.218522101e-04f, -1.963251366e-03f, +2.926106845e-03f, -2.993213777e-03f, +1.868737768e-03f, +1.731892704e-04f, -2.354344383e-03f, +3.769527611e-03f, -3.860743623e-03f, +2.699641926e-03f, -9.103970605e-04f, -7.022269222e-04f, +1.575402208e-03f, -1.611150635e-03f, +1.106111916e-03f, -4.892773558e-04f, +6.490486429e-05f, +9.234050077e-05f, -7.657362257e-05f, /* 14, 8 (24) */ +4.174242894e-04f, +9.453474131e-04f, -4.697467831e-03f, +9.713873664e-03f, -1.171724540e-02f, +4.425278052e-03f, +1.656072795e-02f, -4.868977645e-02f, +7.897534193e-02f, -8.267851789e-02f, +9.098635588e-03f, +7.399769753e-01f, +4.023825658e-01f, -1.608174436e-01f, +5.257930441e-02f, +7.230051025e-03f, -3.069031518e-02f, +2.940608810e-02f, -1.708029030e-02f, +4.856574789e-03f, +1.904691112e-03f, -3.281198057e-03f, +2.004770570e-03f, -5.925356253e-04f, -1.051734923e-04f, +1.873921124e-04f, -1.374022283e-04f, -2.353084264e-04f, +1.000150818e-03f, -1.892957872e-03f, +2.219741452e-03f, -1.008506660e-03f, -2.622746303e-03f, +9.158840857e-03f, -1.895706771e-02f, -1.311706039e-02f, +2.637207971e-02f, +2.121000375e-03f, -6.176279091e-03f, +5.200031581e-03f, -2.780228523e-03f, +6.206077173e-04f, +5.758490567e-04f, -8.448431731e-04f, +5.978733449e-04f, -2.565273500e-04f, +4.535879398e-05f, +1.615685041e-05f, -1.699398035e-03f, +1.739708389e-03f, +1.269128995e-03f, -8.177952236e-03f, +1.691085242e-02f, -2.233108163e-02f, +1.865163885e-02f, -3.409347315e-03f, -1.960542797e-02f, +4.096303225e-02f, -5.011825475e-02f, +4.140561758e-02f, -1.769803015e-02f, -1.081384919e-02f, +3.211197387e-02f, -3.868973605e-02f, +3.086773213e-02f, -1.538888993e-02f, +7.338033779e-04f, +7.551146419e-03f, -8.782822398e-03f, +5.850959145e-03f, -2.352703426e-03f, +3.561273839e-04f, +1.403013936e-04f, -3.537550158e-04f, +5.747613325e-04f, -5.759784120e-04f, +1.172870872e-04f, +8.547912761e-04f, -2.057535372e-03f, +2.917215977e-03f, -2.843068118e-03f, +1.594445136e-03f, +4.960488752e-04f, -2.620320914e-03f, +3.890653830e-03f, -3.806830639e-03f, +2.509098689e-03f, -6.667691739e-04f, -9.127261488e-04f, +1.700715370e-03f, -1.646396540e-03f, +1.081106097e-03f, -4.434424702e-04f, +2.630954309e-05f, +1.141730368e-04f, -8.540155631e-05f, /* 14, 9 (24) */ +3.122507971e-04f, +1.132739526e-03f, -4.834870060e-03f, +9.478565238e-03f, -1.071709459e-02f, +2.532320180e-03f, +1.878046940e-02f, -4.969828311e-02f, +7.635259563e-02f, -7.351967704e-02f, -9.858432118e-03f, +7.268599150e-01f, +4.287546455e-01f, -1.586964432e-01f, +4.640302532e-02f, +1.243008261e-02f, -3.347054370e-02f, +3.002669581e-02f, -1.650444125e-02f, +4.011731615e-03f, +2.502564457e-03f, -3.537725407e-03f, +2.050129364e-03f, -5.763787749e-04f, -1.011481011e-04f, +1.716526762e-04f, -1.017103278e-04f, -2.870880641e-04f, +1.038408586e-03f, -1.859866545e-03f, +2.050718492e-03f, -6.813536977e-04f, -3.017025959e-03f, +9.309309334e-03f, -1.794380256e-02f, -1.449350944e-02f, +2.606701830e-02f, +3.201043676e-03f, -6.648279809e-03f, +5.256648077e-03f, -2.640188805e-03f, +4.479243906e-04f, +6.959200476e-04f, -8.959864508e-04f, +6.022361123e-04f, -2.434136463e-04f, +3.322769159e-05f, +2.221011272e-05f, -1.559096642e-03f, +1.385953374e-03f, +1.843890328e-03f, -8.753930648e-03f, +1.702813951e-02f, -2.147629035e-02f, +1.659410348e-02f, -4.921313377e-04f, -2.244849609e-02f, +4.255747738e-02f, -4.962220587e-02f, +3.878529667e-02f, -1.380737632e-02f, -1.462067983e-02f, +3.462107255e-02f, -3.935650522e-02f, +2.995500598e-02f, -1.368817456e-02f, -9.125931621e-04f, +8.632252516e-03f, -9.226264868e-03f, +5.877268688e-03f, -2.238530389e-03f, +2.707258276e-04f, +1.440324538e-04f, -3.491445827e-04f, +5.445102245e-04f, -5.038394200e-04f, +3.715389702e-06f, +9.798838764e-04f, -2.137044893e-03f, +2.889322133e-03f, -2.675529434e-03f, +1.311220361e-03f, +8.147094686e-04f, -2.869018752e-03f, +3.986545674e-03f, -3.727748556e-03f, +2.300810958e-03f, -4.165062520e-04f, -1.119691115e-03f, +1.816554846e-03f, -1.671192645e-03f, +1.048139023e-03f, -3.932309743e-04f, -1.382413722e-05f, +1.361144515e-04f, -9.400835658e-05f, /* 14,10 (24) */ +2.111026960e-04f, +1.304392202e-03f, -4.936580387e-03f, +9.191477174e-03f, -9.678686000e-03f, +6.724536350e-04f, +2.083118789e-02f, -5.037963680e-02f, +7.333556967e-02f, -6.421036770e-02f, -2.780223467e-02f, +7.123664055e-01f, +4.548216638e-01f, -1.554953995e-01f, +3.975474551e-02f, +1.768673068e-02f, -3.611073250e-02f, +3.047462021e-02f, -1.580852120e-02f, +3.115745165e-03f, +3.104800569e-03f, -3.781139053e-03f, +2.083357055e-03f, -5.541686622e-04f, -9.657849472e-05f, +1.554182272e-04f, -6.663137401e-05f, -3.354362079e-04f, +1.069102680e-03f, -1.816104729e-03f, +1.873234975e-03f, -3.580203010e-04f, -3.383008478e-03f, +9.401508235e-03f, -1.689285865e-02f, -1.581616645e-02f, +2.567171273e-02f, +4.307664950e-03f, -7.094165142e-03f, +5.282309611e-03f, -2.480200967e-03f, +2.680434521e-04f, +8.147899551e-04f, -9.428415409e-04f, +6.027520984e-04f, -2.281028792e-04f, +2.025171812e-05f, +2.847423271e-05f, -1.415064188e-03f, +1.036808791e-03f, +2.388400552e-03f, -9.257770068e-03f, +1.703185490e-02f, -2.049640647e-02f, +1.445705859e-02f, +2.397190796e-03f, -2.512402553e-02f, +4.386869774e-02f, -4.880749640e-02f, +3.591627792e-02f, -9.820830647e-03f, -1.834842838e-02f, +3.692188351e-02f, -3.977301147e-02f, +2.883531487e-02f, -1.187161971e-02f, -2.583785807e-03f, +9.680391539e-03f, -9.619495843e-03f, +5.863444550e-03f, -2.102415937e-03f, +1.767174710e-04f, +1.464274351e-04f, -3.422054965e-04f, +5.114350897e-04f, -4.300985664e-04f, -1.075650209e-04f, +1.096419862e-03f, -2.201446298e-03f, +2.842808709e-03f, -2.491841960e-03f, +1.020981714e-03f, +1.127080149e-03f, -3.098806785e-03f, +4.056526781e-03f, -3.623919993e-03f, +2.076049007e-03f, -1.612201476e-04f, -1.321689166e-03f, +1.921995399e-03f, -1.685178648e-03f, +1.007263527e-03f, -3.388827038e-04f, -5.524939917e-05f, +1.579937073e-04f, -1.023008687e-04f, /* 14,11 (24) */ +1.145242013e-04f, +1.459810429e-03f, -5.003211761e-03f, +8.856040966e-03f, -8.609583320e-03f, -1.143651094e-03f, +2.270442287e-02f, -5.073765710e-02f, +6.995256119e-02f, -5.480885947e-02f, -4.469509332e-02f, +6.965502391e-01f, +4.804933765e-01f, -1.511877346e-01f, +3.266058037e-02f, +2.296904029e-02f, -3.859093347e-02f, +3.074266366e-02f, -1.499373124e-02f, +2.172903624e-03f, +3.707552668e-03f, -4.009241933e-03f, +2.103608773e-03f, -5.256944295e-04f, -9.152782818e-05f, +1.388232904e-04f, -3.237805763e-05f, -3.801444652e-04f, +1.092245240e-03f, -1.762214489e-03f, +1.688584985e-03f, -4.036621525e-05f, -3.719273057e-03f, +9.436687493e-03f, -1.580927528e-02f, -1.708029187e-02f, +2.518677821e-02f, +5.436533139e-03f, -7.510604775e-03f, +5.276078463e-03f, -2.300775120e-03f, +8.192495242e-05f, +9.316611769e-04f, -9.849754807e-04f, +5.992911335e-04f, -2.106187724e-04f, +6.490471674e-06f, +3.490552730e-05f, -1.268636753e-03f, +6.946032943e-04f, +2.899835642e-03f, -9.687868634e-03f, +1.692428988e-02f, -1.939998661e-02f, +1.225561229e-02f, +5.239999505e-03f, -2.761586749e-02f, +4.488967946e-02f, -4.768041625e-02f, +3.281747113e-02f, -5.764303866e-03f, -2.197234838e-02f, +3.899793252e-02f, -3.993423162e-02f, +2.751362570e-02f, -9.949624316e-03f, -4.268964456e-03f, +1.068765507e-02f, -9.958378547e-03f, +5.808195151e-03f, -1.944422230e-03f, +7.441660232e-05f, +1.475292730e-04f, -3.330751757e-04f, +4.758538301e-04f, -3.553026834e-04f, -2.158461251e-04f, +1.203758788e-03f, -2.250512333e-03f, +2.778180183e-03f, -2.293348343e-03f, +7.256840816e-04f, +1.431118242e-03f, -3.308181264e-03f, +4.100092922e-03f, -3.495935082e-03f, +1.836201983e-03f, +9.742903542e-05f, -1.517304894e-03f, +2.016169816e-03f, -1.688063052e-03f, +9.585896065e-04f, -2.806738620e-04f, -9.770182332e-05f, +1.796336222e-04f, -1.101845135e-04f, /* 14,12 (24) */ +2.299637308e-05f, +1.598633719e-03f, -5.035589819e-03f, +8.475896501e-03f, -7.517338080e-03f, -2.905865583e-03f, +2.439300785e-02f, -5.077802332e-02f, +6.623328813e-02f, -4.537217197e-02f, -6.050436860e-02f, +6.794699472e-01f, +5.056801548e-01f, -1.457512014e-01f, +2.514997559e-02f, +2.824511876e-02f, -4.089170859e-02f, +3.082458861e-02f, -1.406207007e-02f, +1.187928143e-03f, +4.306843801e-03f, -4.219860705e-03f, +2.110099245e-03f, -4.907889022e-04f, -8.606022726e-05f, +1.219997620e-04f, +8.496885806e-07f, -4.210345284e-04f, +1.107896472e-03f, -1.698788098e-03f, +1.498076284e-03f, +2.698261458e-04f, -4.024603782e-03f, +9.416355120e-03f, -1.469816564e-02f, -1.828141104e-02f, +2.461322060e-02f, +6.583135401e-03f, -7.894344865e-03f, +5.237185354e-03f, -2.102554198e-03f, -1.094079461e-04f, +1.045728319e-03f, -1.021974332e-03f, +5.917461238e-04f, -1.910014798e-04f, -7.987845379e-06f, +4.145666050e-05f, -1.121107480e-03f, +3.615281186e-04f, +3.375689472e-03f, -1.004317132e-02f, +1.670844375e-02f, -1.819622782e-02f, +1.000509996e-02f, +8.018179688e-03f, -2.990921583e-02f, +4.561536354e-02f, -4.624929801e-02f, +2.950928987e-02f, -1.664210943e-03f, -2.546828346e-02f, +4.083413450e-02f, -3.983680258e-02f, +2.599632081e-02f, -7.933454500e-03f, -5.957027508e-03f, +1.164624467e-02f, -1.023905241e-02f, +5.710493328e-03f, -1.764788608e-03f, -3.576791121e-05f, +1.473900032e-04f, -3.219029865e-04f, +4.380933868e-04f, -2.799930313e-04f, -3.204545227e-04f, +1.301333230e-03f, -2.284122307e-03f, +2.696057453e-03f, -2.081479798e-03f, +4.273055697e-04f, +1.724842931e-03f, -3.495775858e-03f, +4.116915678e-03f, -3.344548116e-03f, +1.582769199e-03f, +3.577438748e-04f, -1.705150082e-03f, +2.098275761e-03f, -1.679626412e-03f, +9.022848323e-04f, -2.189158879e-04f, -1.409008609e-04f, +2.008521162e-04f, -1.175641055e-04f, /* 14,13 (24) */ -6.306385418e-05f, +1.720633481e-03f, -5.034740130e-03f, +8.054861973e-03f, -6.409441608e-03f, -4.604653681e-03f, +2.589108414e-02f, -5.050819717e-02f, +6.220868435e-02f, -3.595581685e-02f, -7.520253424e-02f, +6.611885362e-01f, +5.302933753e-01f, -1.391680660e-01f, +1.725563073e-02f, +3.348230411e-02f, -4.299426279e-02f, +3.071518066e-02f, -1.301634175e-02f, +1.659538106e-04f, +4.898589925e-03f, -4.410862185e-03f, +2.102111400e-03f, -4.493322417e-04f, -8.024023462e-05f, +1.050760413e-04f, +3.286565838e-05f, -4.579584934e-04f, +1.116163001e-03f, -1.626463083e-03f, +1.303021930e-03f, +5.708606370e-04f, -4.297991963e-03f, +9.342264766e-03f, -1.356469177e-02f, -1.941533383e-02f, +2.395243395e-02f, +7.742796720e-03f, -8.242227107e-03f, +5.165037823e-03f, -1.886313019e-03f, -3.048739871e-04f, +1.156183255e-03f, -1.053446484e-03f, +5.800345022e-04f, -1.693078644e-04f, -2.310661682e-05f, +4.807689410e-05f, -9.737174764e-04f, +3.962513207e-05f, +3.813782859e-03f, -1.032316435e-02f, +1.638798923e-02f, -1.689489459e-02f, +7.720977648e-03f, +1.071423714e-02f, -3.199069563e-02f, +4.604266911e-02f, -4.452445508e-02f, +2.601351401e-02f, +2.452704734e-03f, -2.881283157e-02f, +4.241690370e-02f, -3.947905871e-02f, +2.429117072e-02f, -5.835178738e-03f, -7.636653920e-03f, +1.254852950e-02f, -1.045796830e-02f, +5.569592467e-03f, -1.563936492e-03f, -1.533320167e-04f, +1.460699732e-04f, -3.088486900e-04f, +3.984870780e-04f, -2.047015564e-04f, -4.207554827e-04f, +1.388651543e-03f, -2.302261536e-03f, +2.597172415e-03f, -1.857745728e-03f, +1.278340169e-04f, +2.006348441e-03f, -3.660370767e-03f, +4.106844915e-03f, -3.170673062e-03f, +1.317350612e-03f, +6.180009141e-04f, -1.883873571e-03f, +2.167582275e-03f, -1.659724122e-03f, +8.385743370e-04f, -1.539540334e-04f, -1.845515153e-04f, +2.214635405e-04f, -1.243447058e-04f, /* 14,14 (24) */ -1.433040888e-04f, +1.825709523e-03f, -5.001874472e-03f, +7.596903479e-03f, -5.293278608e-03f, -6.231116763e-03f, +2.719410607e-02f, -4.993733654e-02f, +5.791069239e-02f, -2.661355209e-02f, -8.876722601e-02f, +6.417732023e-01f, +5.542458093e-01f, -1.314252693e-01f, +9.013403621e-03f, +3.864734193e-02f, -4.488057581e-02f, +3.041030668e-02f, -1.186015849e-02f, -8.874926734e-04f, +5.478624427e-03f, -4.580170049e-03f, +2.079004783e-03f, -4.012553476e-04f, -7.413227349e-05f, +8.817621892e-05f, +6.349821460e-05f, -4.907989656e-04f, +1.117195967e-03f, -1.545917090e-03f, +1.104732041e-03f, +8.611356149e-04f, -4.538637254e-03f, +9.216402165e-03f, -1.241403936e-02f, -2.047817292e-02f, +2.320619628e-02f, +8.910700572e-03f, -8.551207591e-03f, +5.059227737e-03f, -1.652956524e-03f, -5.033393235e-04f, +1.262220332e-03f, -1.079025887e-03f, +5.640995504e-04f, -1.456116643e-04f, -3.878107569e-05f, +5.471237745e-05f, -8.276475031e-04f, -2.692235579e-04f, +4.212269937e-03f, -1.052786591e-02f, +1.596723375e-02f, -1.550624305e-02f, +5.418716112e-03f, +1.331140956e-02f, -3.384844136e-02f, +4.617050312e-02f, -4.251810664e-02f, +2.235314324e-02f, +6.559549650e-03f, -3.198350464e-02f, +4.373425431e-02f, -3.886105779e-02f, +2.240729715e-02f, -3.667596463e-03f, -9.296378042e-03f, +1.338710384e-02f, -1.061192233e-02f, +5.385040952e-03f, -1.342472951e-03f, -2.776767224e-04f, +1.436370082e-04f, -2.940808542e-04f, +3.573719583e-04f, -1.299473008e-04f, -5.161566428e-04f, +1.465300038e-03f, -2.305020054e-03f, +2.482361840e-03f, -1.623722889e-03f, -1.707464846e-04f, +2.273816657e-03f, -3.800900831e-03f, +4.069910059e-03f, -2.975377965e-03f, +1.041636557e-03f, +8.764622216e-04f, -2.052170979e-03f, +2.223435850e-03f, -1.628288718e-03f, +7.677403885e-04f, -8.616565247e-05f, -2.283461846e-04f, +2.412800790e-04f, -1.304325046e-04f, /* 14,15 (24) */ -2.174363623e-04f, +1.913885742e-03f, -4.938376257e-03f, +7.106104514e-03f, -4.176082641e-03f, -7.777033854e-03f, +2.829883811e-02f, -4.907620092e-02f, +5.337205513e-02f, -1.739714992e-02f, -1.011812654e-01f, +6.212950294e-01f, +5.774520056e-01f, -1.225145687e-01f, +4.621960300e-04f, +4.370656967e-02f, -4.653353233e-02f, +2.990696735e-02f, -1.059793816e-02f, -1.966518561e-03f, +6.042723978e-03f, -4.725781713e-03f, +2.040223707e-03f, -3.465429701e-04f, -6.780013253e-05f, +7.141932505e-05f, +9.259100364e-05f, -5.194689564e-04f, +1.111188872e-03f, -1.457862625e-03f, +9.045057638e-04f, +1.139151431e-03f, -4.745947579e-03f, +9.040970588e-03f, -1.125139282e-02f, -2.146636049e-02f, +2.237666333e-02f, +1.008191055e-02f, -8.818375365e-03f, +4.919537884e-03f, -1.403517159e-03f, -7.036234824e-04f, +1.363041684e-03f, -1.098375208e-03f, +5.439115795e-04f, -1.200035405e-04f, -5.491864062e-05f, +6.130647532e-05f, -6.840104950e-04f, -5.633044121e-04f, +4.569641895e-03f, -1.065781321e-02f, +1.545107710e-02f, -1.404094301e-02f, +3.113696059e-03f, +1.579377140e-02f, -3.547216424e-02f, +4.599975664e-02f, -4.024428998e-02f, +1.855224241e-02f, +1.062945971e-02f, -3.495888260e-02f, +4.477589087e-02f, -3.798459557e-02f, +2.035512617e-02f, -1.444160614e-03f, -1.092466676e-02f, +1.415484423e-02f, -1.069808798e-02f, +5.156694767e-03f, -1.101192872e-03f, -4.081092270e-04f, +1.401655427e-04f, -2.777752460e-04f, +3.150862197e-04f, -5.623298575e-05f, -6.061113373e-04f, +1.530944592e-03f, -2.292590622e-03f, +2.352560583e-03f, -1.381044183e-03f, -4.664689709e-04f, +2.525529115e-03f, -3.916462572e-03f, +4.006320132e-03f, -2.759878268e-03f, +7.573967986e-04f, +1.131387145e-03f, -2.208794194e-03f, +2.265266050e-03f, -1.585331660e-03f, +6.901215371e-04f, -1.595820921e-05f, -2.719666525e-04f, +2.601132140e-04f, -1.357357253e-04f, /* 14,16 (24) */ -2.852364948e-04f, +1.985305067e-03f, -4.845785254e-03f, +6.586635557e-03f, -3.064893769e-03f, -9.234896479e-03f, +2.920334387e-02f, -4.793704949e-02f, +4.862610755e-02f, -8.356179335e-03f, -1.124326582e-01f, +5.998286689e-01f, +5.998286689e-01f, -1.124326582e-01f, -8.356179335e-03f, +4.862610755e-02f, -4.793704949e-02f, +2.920334387e-02f, -9.234896479e-03f, -3.064893769e-03f, +6.586635557e-03f, -4.845785254e-03f, +1.985305067e-03f, -2.852364948e-04f, -6.130647532e-05f, +5.491864062e-05f, +1.200035405e-04f, -5.439115795e-04f, +1.098375208e-03f, -1.363041684e-03f, +7.036234824e-04f, +1.403517159e-03f, -4.919537884e-03f, +8.818375365e-03f, -1.008191055e-02f, -2.237666333e-02f, +2.146636049e-02f, +1.125139282e-02f, -9.040970588e-03f, +4.745947579e-03f, -1.139151431e-03f, -9.045057638e-04f, +1.457862625e-03f, -1.111188872e-03f, +5.194689564e-04f, -9.259100364e-05f, -7.141932505e-05f, +6.780013253e-05f, -5.438449523e-04f, -8.410796581e-04f, +4.884728115e-03f, -1.071404619e-02f, +1.484496577e-02f, -1.250999842e-02f, +8.211054363e-04f, +1.814633198e-02f, -3.685320843e-02f, +4.553328767e-02f, -3.771876087e-02f, +1.463577984e-02f, +1.463577984e-02f, -3.771876087e-02f, +4.553328767e-02f, -3.685320843e-02f, +1.814633198e-02f, +8.211054363e-04f, -1.250999842e-02f, +1.484496577e-02f, -1.071404619e-02f, +4.884728115e-03f, -8.410796581e-04f, -5.438449523e-04f, +1.357357253e-04f, -2.601132140e-04f, +2.719666525e-04f, +1.595820921e-05f, -6.901215371e-04f, +1.585331660e-03f, -2.265266050e-03f, +2.208794194e-03f, -1.131387145e-03f, -7.573967986e-04f, +2.759878268e-03f, -4.006320132e-03f, +3.916462572e-03f, -2.525529115e-03f, +4.664689709e-04f, +1.381044183e-03f, -2.352560583e-03f, +2.292590622e-03f, -1.530944592e-03f, +6.061113373e-04f, +5.623298575e-05f, -3.150862197e-04f, +2.777752460e-04f, -1.401655427e-04f, /* 14,17 (24) */ -3.465429701e-04f, +2.040223707e-03f, -4.725781713e-03f, +6.042723978e-03f, -1.966518561e-03f, -1.059793816e-02f, +2.990696735e-02f, -4.653353233e-02f, +4.370656967e-02f, +4.621960300e-04f, -1.225145687e-01f, +5.774520056e-01f, +6.212950294e-01f, -1.011812654e-01f, -1.739714992e-02f, +5.337205513e-02f, -4.907620092e-02f, +2.829883811e-02f, -7.777033854e-03f, -4.176082641e-03f, +7.106104514e-03f, -4.938376257e-03f, +1.913885742e-03f, -2.174363623e-04f, -5.471237745e-05f, +3.878107569e-05f, +1.456116643e-04f, -5.640995504e-04f, +1.079025887e-03f, -1.262220332e-03f, +5.033393235e-04f, +1.652956524e-03f, -5.059227737e-03f, +8.551207591e-03f, -8.910700572e-03f, -2.320619628e-02f, +2.047817292e-02f, +1.241403936e-02f, -9.216402165e-03f, +4.538637254e-03f, -8.611356149e-04f, -1.104732041e-03f, +1.545917090e-03f, -1.117195967e-03f, +4.907989656e-04f, -6.349821460e-05f, -8.817621892e-05f, +7.413227349e-05f, -4.081092270e-04f, -1.101192872e-03f, +5.156694767e-03f, -1.069808798e-02f, +1.415484423e-02f, -1.092466676e-02f, -1.444160614e-03f, +2.035512617e-02f, -3.798459557e-02f, +4.477589087e-02f, -3.495888260e-02f, +1.062945971e-02f, +1.855224241e-02f, -4.024428998e-02f, +4.599975664e-02f, -3.547216424e-02f, +1.579377140e-02f, +3.113696059e-03f, -1.404094301e-02f, +1.545107710e-02f, -1.065781321e-02f, +4.569641895e-03f, -5.633044121e-04f, -6.840104950e-04f, +1.304325046e-04f, -2.412800790e-04f, +2.283461846e-04f, +8.616565247e-05f, -7.677403885e-04f, +1.628288718e-03f, -2.223435850e-03f, +2.052170979e-03f, -8.764622216e-04f, -1.041636557e-03f, +2.975377965e-03f, -4.069910059e-03f, +3.800900831e-03f, -2.273816657e-03f, +1.707464846e-04f, +1.623722889e-03f, -2.482361840e-03f, +2.305020054e-03f, -1.465300038e-03f, +5.161566428e-04f, +1.299473008e-04f, -3.573719583e-04f, +2.940808542e-04f, -1.436370082e-04f, /* 14,18 (24) */ -4.012553476e-04f, +2.079004783e-03f, -4.580170049e-03f, +5.478624427e-03f, -8.874926734e-04f, -1.186015849e-02f, +3.041030668e-02f, -4.488057581e-02f, +3.864734193e-02f, +9.013403621e-03f, -1.314252693e-01f, +5.542458093e-01f, +6.417732023e-01f, -8.876722601e-02f, -2.661355209e-02f, +5.791069239e-02f, -4.993733654e-02f, +2.719410607e-02f, -6.231116763e-03f, -5.293278608e-03f, +7.596903479e-03f, -5.001874472e-03f, +1.825709523e-03f, -1.433040888e-04f, -4.807689410e-05f, +2.310661682e-05f, +1.693078644e-04f, -5.800345022e-04f, +1.053446484e-03f, -1.156183255e-03f, +3.048739871e-04f, +1.886313019e-03f, -5.165037823e-03f, +8.242227107e-03f, -7.742796720e-03f, -2.395243395e-02f, +1.941533383e-02f, +1.356469177e-02f, -9.342264766e-03f, +4.297991963e-03f, -5.708606370e-04f, -1.303021930e-03f, +1.626463083e-03f, -1.116163001e-03f, +4.579584934e-04f, -3.286565838e-05f, -1.050760413e-04f, +8.024023462e-05f, -2.776767224e-04f, -1.342472951e-03f, +5.385040952e-03f, -1.061192233e-02f, +1.338710384e-02f, -9.296378042e-03f, -3.667596463e-03f, +2.240729715e-02f, -3.886105779e-02f, +4.373425431e-02f, -3.198350464e-02f, +6.559549650e-03f, +2.235314324e-02f, -4.251810664e-02f, +4.617050312e-02f, -3.384844136e-02f, +1.331140956e-02f, +5.418716112e-03f, -1.550624305e-02f, +1.596723375e-02f, -1.052786591e-02f, +4.212269937e-03f, -2.692235579e-04f, -8.276475031e-04f, +1.243447058e-04f, -2.214635405e-04f, +1.845515153e-04f, +1.539540334e-04f, -8.385743370e-04f, +1.659724122e-03f, -2.167582275e-03f, +1.883873571e-03f, -6.180009141e-04f, -1.317350612e-03f, +3.170673062e-03f, -4.106844915e-03f, +3.660370767e-03f, -2.006348441e-03f, -1.278340169e-04f, +1.857745728e-03f, -2.597172415e-03f, +2.302261536e-03f, -1.388651543e-03f, +4.207554827e-04f, +2.047015564e-04f, -3.984870780e-04f, +3.088486900e-04f, -1.460699732e-04f, /* 14,19 (24) */ -4.493322417e-04f, +2.102111400e-03f, -4.410862185e-03f, +4.898589925e-03f, +1.659538106e-04f, -1.301634175e-02f, +3.071518066e-02f, -4.299426279e-02f, +3.348230411e-02f, +1.725563073e-02f, -1.391680660e-01f, +5.302933753e-01f, +6.611885362e-01f, -7.520253424e-02f, -3.595581685e-02f, +6.220868435e-02f, -5.050819717e-02f, +2.589108414e-02f, -4.604653681e-03f, -6.409441608e-03f, +8.054861973e-03f, -5.034740130e-03f, +1.720633481e-03f, -6.306385418e-05f, -4.145666050e-05f, +7.987845379e-06f, +1.910014798e-04f, -5.917461238e-04f, +1.021974332e-03f, -1.045728319e-03f, +1.094079461e-04f, +2.102554198e-03f, -5.237185354e-03f, +7.894344865e-03f, -6.583135401e-03f, -2.461322060e-02f, +1.828141104e-02f, +1.469816564e-02f, -9.416355120e-03f, +4.024603782e-03f, -2.698261458e-04f, -1.498076284e-03f, +1.698788098e-03f, -1.107896472e-03f, +4.210345284e-04f, -8.496885806e-07f, -1.219997620e-04f, +8.606022726e-05f, -1.533320167e-04f, -1.563936492e-03f, +5.569592467e-03f, -1.045796830e-02f, +1.254852950e-02f, -7.636653920e-03f, -5.835178738e-03f, +2.429117072e-02f, -3.947905871e-02f, +4.241690370e-02f, -2.881283157e-02f, +2.452704734e-03f, +2.601351401e-02f, -4.452445508e-02f, +4.604266911e-02f, -3.199069563e-02f, +1.071423714e-02f, +7.720977648e-03f, -1.689489459e-02f, +1.638798923e-02f, -1.032316435e-02f, +3.813782859e-03f, +3.962513207e-05f, -9.737174764e-04f, +1.175641055e-04f, -2.008521162e-04f, +1.409008609e-04f, +2.189158879e-04f, -9.022848323e-04f, +1.679626412e-03f, -2.098275761e-03f, +1.705150082e-03f, -3.577438748e-04f, -1.582769199e-03f, +3.344548116e-03f, -4.116915678e-03f, +3.495775858e-03f, -1.724842931e-03f, -4.273055697e-04f, +2.081479798e-03f, -2.696057453e-03f, +2.284122307e-03f, -1.301333230e-03f, +3.204545227e-04f, +2.799930313e-04f, -4.380933868e-04f, +3.219029865e-04f, -1.473900032e-04f, /* 14,20 (24) */ -4.907889022e-04f, +2.110099245e-03f, -4.219860705e-03f, +4.306843801e-03f, +1.187928143e-03f, -1.406207007e-02f, +3.082458861e-02f, -4.089170859e-02f, +2.824511876e-02f, +2.514997559e-02f, -1.457512014e-01f, +5.056801548e-01f, +6.794699472e-01f, -6.050436860e-02f, -4.537217197e-02f, +6.623328813e-02f, -5.077802332e-02f, +2.439300785e-02f, -2.905865583e-03f, -7.517338080e-03f, +8.475896501e-03f, -5.035589819e-03f, +1.598633719e-03f, +2.299637308e-05f, -3.490552730e-05f, -6.490471674e-06f, +2.106187724e-04f, -5.992911335e-04f, +9.849754807e-04f, -9.316611769e-04f, -8.192495242e-05f, +2.300775120e-03f, -5.276078463e-03f, +7.510604775e-03f, -5.436533139e-03f, -2.518677821e-02f, +1.708029187e-02f, +1.580927528e-02f, -9.436687493e-03f, +3.719273057e-03f, +4.036621525e-05f, -1.688584985e-03f, +1.762214489e-03f, -1.092245240e-03f, +3.801444652e-04f, +3.237805763e-05f, -1.388232904e-04f, +9.152782818e-05f, -3.576791121e-05f, -1.764788608e-03f, +5.710493328e-03f, -1.023905241e-02f, +1.164624467e-02f, -5.957027508e-03f, -7.933454500e-03f, +2.599632081e-02f, -3.983680258e-02f, +4.083413450e-02f, -2.546828346e-02f, -1.664210943e-03f, +2.950928987e-02f, -4.624929801e-02f, +4.561536354e-02f, -2.990921583e-02f, +8.018179688e-03f, +1.000509996e-02f, -1.819622782e-02f, +1.670844375e-02f, -1.004317132e-02f, +3.375689472e-03f, +3.615281186e-04f, -1.121107480e-03f, +1.101845135e-04f, -1.796336222e-04f, +9.770182332e-05f, +2.806738620e-04f, -9.585896065e-04f, +1.688063052e-03f, -2.016169816e-03f, +1.517304894e-03f, -9.742903542e-05f, -1.836201983e-03f, +3.495935082e-03f, -4.100092922e-03f, +3.308181264e-03f, -1.431118242e-03f, -7.256840816e-04f, +2.293348343e-03f, -2.778180183e-03f, +2.250512333e-03f, -1.203758788e-03f, +2.158461251e-04f, +3.553026834e-04f, -4.758538301e-04f, +3.330751757e-04f, -1.475292730e-04f, /* 14,21 (24) */ -5.256944295e-04f, +2.103608773e-03f, -4.009241933e-03f, +3.707552668e-03f, +2.172903624e-03f, -1.499373124e-02f, +3.074266366e-02f, -3.859093347e-02f, +2.296904029e-02f, +3.266058037e-02f, -1.511877346e-01f, +4.804933765e-01f, +6.965502391e-01f, -4.469509332e-02f, -5.480885947e-02f, +6.995256119e-02f, -5.073765710e-02f, +2.270442287e-02f, -1.143651094e-03f, -8.609583320e-03f, +8.856040966e-03f, -5.003211761e-03f, +1.459810429e-03f, +1.145242013e-04f, -2.847423271e-05f, -2.025171812e-05f, +2.281028792e-04f, -6.027520984e-04f, +9.428415409e-04f, -8.147899551e-04f, -2.680434521e-04f, +2.480200967e-03f, -5.282309611e-03f, +7.094165142e-03f, -4.307664950e-03f, -2.567171273e-02f, +1.581616645e-02f, +1.689285865e-02f, -9.401508235e-03f, +3.383008478e-03f, +3.580203010e-04f, -1.873234975e-03f, +1.816104729e-03f, -1.069102680e-03f, +3.354362079e-04f, +6.663137401e-05f, -1.554182272e-04f, +9.657849472e-05f, +7.441660232e-05f, -1.944422230e-03f, +5.808195151e-03f, -9.958378547e-03f, +1.068765507e-02f, -4.268964456e-03f, -9.949624316e-03f, +2.751362570e-02f, -3.993423162e-02f, +3.899793252e-02f, -2.197234838e-02f, -5.764303866e-03f, +3.281747113e-02f, -4.768041625e-02f, +4.488967946e-02f, -2.761586749e-02f, +5.239999505e-03f, +1.225561229e-02f, -1.939998661e-02f, +1.692428988e-02f, -9.687868634e-03f, +2.899835642e-03f, +6.946032943e-04f, -1.268636753e-03f, +1.023008687e-04f, -1.579937073e-04f, +5.524939917e-05f, +3.388827038e-04f, -1.007263527e-03f, +1.685178648e-03f, -1.921995399e-03f, +1.321689166e-03f, +1.612201476e-04f, -2.076049007e-03f, +3.623919993e-03f, -4.056526781e-03f, +3.098806785e-03f, -1.127080149e-03f, -1.020981714e-03f, +2.491841960e-03f, -2.842808709e-03f, +2.201446298e-03f, -1.096419862e-03f, +1.075650209e-04f, +4.300985664e-04f, -5.114350897e-04f, +3.422054965e-04f, -1.464274351e-04f, /* 14,22 (24) */ -5.541686622e-04f, +2.083357055e-03f, -3.781139053e-03f, +3.104800569e-03f, +3.115745165e-03f, -1.580852120e-02f, +3.047462021e-02f, -3.611073250e-02f, +1.768673068e-02f, +3.975474551e-02f, -1.554953995e-01f, +4.548216638e-01f, +7.123664055e-01f, -2.780223467e-02f, -6.421036770e-02f, +7.333556967e-02f, -5.037963680e-02f, +2.083118789e-02f, +6.724536350e-04f, -9.678686000e-03f, +9.191477174e-03f, -4.936580387e-03f, +1.304392202e-03f, +2.111026960e-04f, -2.221011272e-05f, -3.322769159e-05f, +2.434136463e-04f, -6.022361123e-04f, +8.959864508e-04f, -6.959200476e-04f, -4.479243906e-04f, +2.640188805e-03f, -5.256648077e-03f, +6.648279809e-03f, -3.201043676e-03f, -2.606701830e-02f, +1.449350944e-02f, +1.794380256e-02f, -9.309309334e-03f, +3.017025959e-03f, +6.813536977e-04f, -2.050718492e-03f, +1.859866545e-03f, -1.038408586e-03f, +2.870880641e-04f, +1.017103278e-04f, -1.716526762e-04f, +1.011481011e-04f, +1.767174710e-04f, -2.102415937e-03f, +5.863444550e-03f, -9.619495843e-03f, +9.680391539e-03f, -2.583785807e-03f, -1.187161971e-02f, +2.883531487e-02f, -3.977301147e-02f, +3.692188351e-02f, -1.834842838e-02f, -9.820830647e-03f, +3.591627792e-02f, -4.880749640e-02f, +4.386869774e-02f, -2.512402553e-02f, +2.397190796e-03f, +1.445705859e-02f, -2.049640647e-02f, +1.703185490e-02f, -9.257770068e-03f, +2.388400552e-03f, +1.036808791e-03f, -1.415064188e-03f, +9.400835658e-05f, -1.361144515e-04f, +1.382413722e-05f, +3.932309743e-04f, -1.048139023e-03f, +1.671192645e-03f, -1.816554846e-03f, +1.119691115e-03f, +4.165062520e-04f, -2.300810958e-03f, +3.727748556e-03f, -3.986545674e-03f, +2.869018752e-03f, -8.147094686e-04f, -1.311220361e-03f, +2.675529434e-03f, -2.889322133e-03f, +2.137044893e-03f, -9.798838764e-04f, -3.715389702e-06f, +5.038394200e-04f, -5.445102245e-04f, +3.491445827e-04f, -1.440324538e-04f, /* 14,23 (24) */ -5.763787749e-04f, +2.050129364e-03f, -3.537725407e-03f, +2.502564457e-03f, +4.011731615e-03f, -1.650444125e-02f, +3.002669581e-02f, -3.347054370e-02f, +1.243008261e-02f, +4.640302532e-02f, -1.586964432e-01f, +4.287546455e-01f, +7.268599150e-01f, -9.858432118e-03f, -7.351967704e-02f, +7.635259563e-02f, -4.969828311e-02f, +1.878046940e-02f, +2.532320180e-03f, -1.071709459e-02f, +9.478565238e-03f, -4.834870060e-03f, +1.132739526e-03f, +3.122507971e-04f, -1.615685041e-05f, -4.535879398e-05f, +2.565273500e-04f, -5.978733449e-04f, +8.448431731e-04f, -5.758490567e-04f, -6.206077173e-04f, +2.780228523e-03f, -5.200031581e-03f, +6.176279091e-03f, -2.121000375e-03f, -2.637207971e-02f, +1.311706039e-02f, +1.895706771e-02f, -9.158840857e-03f, +2.622746303e-03f, +1.008506660e-03f, -2.219741452e-03f, +1.892957872e-03f, -1.000150818e-03f, +2.353084264e-04f, +1.374022283e-04f, -1.873921124e-04f, +1.051734923e-04f, +2.707258276e-04f, -2.238530389e-03f, +5.877268688e-03f, -9.226264868e-03f, +8.632252516e-03f, -9.125931621e-04f, -1.368817456e-02f, +2.995500598e-02f, -3.935650522e-02f, +3.462107255e-02f, -1.462067983e-02f, -1.380737632e-02f, +3.878529667e-02f, -4.962220587e-02f, +4.255747738e-02f, -2.244849609e-02f, -4.921313377e-04f, +1.659410348e-02f, -2.147629035e-02f, +1.702813951e-02f, -8.753930648e-03f, +1.843890328e-03f, +1.385953374e-03f, -1.559096642e-03f, +8.540155631e-05f, -1.141730368e-04f, -2.630954309e-05f, +4.434424702e-04f, -1.081106097e-03f, +1.646396540e-03f, -1.700715370e-03f, +9.127261488e-04f, +6.667691739e-04f, -2.509098689e-03f, +3.806830639e-03f, -3.890653830e-03f, +2.620320914e-03f, -4.960488752e-04f, -1.594445136e-03f, +2.843068118e-03f, -2.917215977e-03f, +2.057535372e-03f, -8.547912761e-04f, -1.172870872e-04f, +5.759784120e-04f, -5.747613325e-04f, +3.537550158e-04f, -1.403013936e-04f, /* 14,24 (24) */ -5.925356253e-04f, +2.004770570e-03f, -3.281198057e-03f, +1.904691112e-03f, +4.856574789e-03f, -1.708029030e-02f, +2.940608810e-02f, -3.069031518e-02f, +7.230051025e-03f, +5.257930441e-02f, -1.608174436e-01f, +4.023825658e-01f, +7.399769753e-01f, +9.098635588e-03f, -8.267851789e-02f, +7.897534193e-02f, -4.868977645e-02f, +1.656072795e-02f, +4.425278052e-03f, -1.171724540e-02f, +9.713873664e-03f, -4.697467831e-03f, +9.453474131e-04f, +4.174242894e-04f, -1.035426515e-05f, -5.659415013e-05f, +2.674363103e-04f, -5.898154758e-04f, +7.898603562e-04f, -4.553619025e-04f, -7.852010034e-04f, +2.899942945e-03f, -5.113557114e-03f, +5.681550640e-03f, -1.071665851e-03f, -2.658667284e-02f, +1.169180272e-02f, +1.992771371e-02f, -8.949122217e-03f, +2.201791654e-03f, +1.337551709e-03f, -2.379031943e-03f, +1.914891610e-03f, -9.543666704e-04f, +1.803352363e-04f, +1.734827176e-04f, -2.025003003e-04f, +1.085930512e-04f, +3.561273839e-04f, -2.352703426e-03f, +5.850959145e-03f, -8.782822398e-03f, +7.551146419e-03f, +7.338033779e-04f, -1.538888993e-02f, +3.086773213e-02f, -3.868973605e-02f, +3.211197387e-02f, -1.081384919e-02f, -1.769803015e-02f, +4.140561758e-02f, -5.011825475e-02f, +4.096303225e-02f, -1.960542797e-02f, -3.409347315e-03f, +1.865163885e-02f, -2.233108163e-02f, +1.691085242e-02f, -8.177952236e-03f, +1.269128995e-03f, +1.739708389e-03f, -1.699398035e-03f, +7.657362257e-05f, -9.234050077e-05f, -6.490486429e-05f, +4.892773558e-04f, -1.106111916e-03f, +1.611150635e-03f, -1.575402208e-03f, +7.022269222e-04f, +9.103970605e-04f, -2.699641926e-03f, +3.860743623e-03f, -3.769527611e-03f, +2.354344383e-03f, -1.731892704e-04f, -1.868737768e-03f, +2.993213777e-03f, -2.926106845e-03f, +1.963251366e-03f, -7.218522101e-04f, -2.324118098e-04f, +6.459670054e-04f, -6.018822153e-04f, +3.559128289e-04f, -1.352011563e-04f, /* 14,25 (24) */ -6.028898905e-04f, +1.948176420e-03f, -3.013761747e-03f, +1.314875636e-03f, +5.646435145e-03f, -1.753565221e-02f, +2.862088709e-02f, -2.779037223e-02f, +2.116493911e-03f, +5.826085505e-02f, -1.618891094e-01f, +3.757958930e-01f, +7.516687781e-01f, +2.902634929e-02f, -9.162764011e-02f, +8.117713358e-02f, -4.735222474e-02f, +1.418169601e-02f, +6.340169661e-03f, -1.267161207e-02f, +9.894208901e-03f, -4.523985114e-03f, +7.428471128e-04f, +5.260173405e-04f, -4.838141895e-06f, -6.689165615e-05f, +2.761484020e-04f, -5.782340276e-04f, +7.314989783e-04f, -3.352261326e-04f, -9.408834287e-04f, +2.999087130e-03f, -4.998471035e-03f, +5.167520313e-03f, -5.695342327e-05f, -2.671096324e-02f, +1.022294150e-02f, +2.085092377e-02f, -8.679452183e-03f, +1.755980721e-03f, +1.666503851e-03f, -2.527348763e-03f, +1.925240126e-03f, -9.011439452e-04f, +1.224352289e-04f, +2.097169809e-04f, -2.168402581e-04f, +1.113472756e-04f, +4.327010065e-04f, -2.445043927e-03f, +5.786054280e-03f, -8.293545042e-03f, +6.445034503e-03f, +2.344954013e-03f, -1.696429214e-02f, +3.156995905e-02f, -3.777933898e-02f, +2.941233194e-02f, -6.953105564e-03f, -2.146755776e-02f, +4.375996197e-02f, -5.029144402e-02f, +3.909429448e-02f, -1.661221420e-02f, -6.335454160e-03f, +2.061489022e-02f, -2.305293384e-02f, +1.667844061e-02f, -7.531985230e-03f, +6.672467798e-04f, +2.095621218e-03f, -1.834599191e-03f, +6.761550920e-05f, -7.078057912e-05f, -1.017340271e-04f, +5.305330013e-04f, -1.123160010e-03f, +1.565880356e-03f, -1.441591452e-03f, +4.896333793e-04f, +1.145836820e-03f, -2.871297113e-03f, +3.889234602e-03f, -3.624010666e-03f, +2.072836700e-03f, +1.517442280e-04f, -2.132229819e-03f, +3.124829834e-03f, -2.915736295e-03f, +1.854631957e-03f, -5.818426652e-04f, -3.483257320e-04f, +7.132589257e-04f, -6.255810230e-04f, +3.555089494e-04f, -1.287091577e-04f, /* 14,26 (24) */ -6.077280324e-04f, +1.881284763e-03f, -2.737613345e-03f, +7.366416088e-04f, +6.377934123e-03f, -1.787087834e-02f, +2.768000367e-02f, -2.479128510e-02f, -2.881977125e-03f, +6.342837536e-02f, -1.619460628e-01f, +3.490849297e-01f, +7.618917196e-01f, +4.987727307e-02f, -1.003070923e-01f, +8.293311430e-02f, -4.568572089e-02f, +1.165434724e-02f, +8.265409788e-03f, -1.357275602e-02f, +1.001664413e-02f, -4.314268133e-03f, +5.260068547e-04f, +6.373646162e-04f, +3.598993315e-07f, -7.621795958e-05f, +2.826864722e-04f, -5.633186114e-04f, +6.702289988e-04f, -2.161874566e-04f, -1.086909229e-03f, +3.077546892e-03f, -4.856158506e-03f, +4.637633170e-03f, +9.194569997e-04f, -2.674550282e-02f, +8.715880075e-03f, +2.172202907e-02f, -8.349417553e-03f, +1.287322799e-03f, +1.993331364e-03f, -2.663489957e-03f, +1.923639489e-03f, -8.406217126e-04f, +6.190295822e-05f, +2.458610686e-04f, -2.302752612e-04f, +1.133793599e-04f, +5.003165157e-04f, -2.515824506e-03f, +5.684320253e-03f, -7.763012041e-03f, +5.321874493e-03f, +3.910834368e-03f, -1.840588359e-02f, +3.205959243e-02f, -3.663350216e-02f, +2.654103483e-02f, -3.063870962e-03f, -2.509156843e-02f, +4.583279867e-02f, -5.013969979e-02f, +3.696206466e-02f, -1.348738436e-02f, -9.251190455e-03f, +2.246952217e-02f, -2.363477650e-02f, +1.633011488e-02f, -6.818726304e-03f, +4.166575678e-05f, +2.451130168e-03f, -1.963308349e-03f, +5.861523986e-05f, -4.964864533e-05f, -1.365893649e-04f, +5.670445273e-04f, -1.132309081e-03f, +1.511072182e-03f, -1.300302629e-03f, +2.763828580e-04f, +1.371604137e-03f, -3.023054335e-03f, +3.892221410e-03f, -3.455107960e-03f, +1.777650099e-03f, +4.766065657e-04f, -2.383115619e-03f, +3.236895933e-03f, -2.885973877e-03f, +1.732219990e-03f, -4.356000735e-04f, -4.642444154e-04f, +7.773141998e-04f, -6.455828591e-04f, +3.524505644e-04f, -1.208139352e-04f, /* 14,27 (24) */ -6.073681330e-04f, +1.805066804e-03f, -2.454926873e-03f, +1.733229974e-04f, +7.048163122e-03f, -1.808706580e-02f, +2.659309444e-02f, -2.171373821e-02f, -7.738135630e-03f, +6.806600853e-02f, -1.610266058e-01f, +3.223394269e-01f, +7.706075996e-01f, +7.159930214e-02f, -1.086565098e-01f, +8.422043710e-02f, -4.369238952e-02f, +8.990857287e-03f, +1.018904928e-02f, -1.441337773e-02f, +1.007854709e-02f, -4.068407064e-03f, +2.957315935e-04f, +7.507439760e-04f, +5.212494168e-06f, -8.454837357e-05f, +2.870876684e-04f, -5.452751006e-04f, +6.065260382e-04f, -9.896552842e-05f, -1.222610598e-03f, +3.135336557e-03f, -4.688132339e-03f, +4.095334701e-03f, +1.854133470e-03f, -2.669122460e-02f, +7.176195729e-03f, +2.253653250e-02f, -7.958900442e-03f, +7.980105833e-04f, +2.315967098e-03f, -2.786301303e-03f, +1.909793379e-03f, -7.729907520e-04f, -9.403973572e-07f, +2.816633266e-04f, -2.426698797e-04f, +1.146357766e-04f, +5.589317555e-04f, -2.565473151e-03f, +5.547730888e-03f, -7.195967514e-03f, +4.189565412e-03f, +5.421906550e-03f, -1.970618622e-02f, +3.233597529e-02f, -3.526189803e-02f, +2.351798049e-02f, +8.283504485e-04f, -2.854667639e-02f, +4.761044877e-02f, -4.966309322e-02f, +3.457894904e-02f, -1.025048843e-02f, -1.213716433e-02f, +2.420174217e-02f, -2.407037658e-02f, +1.586587046e-02f, -6.041412105e-03f, -6.039171023e-04f, +2.803580732e-03f, -2.084122284e-03f, +4.965723057e-05f, -2.909075206e-05f, -1.692843111e-04f, +5.986850604e-04f, -1.133671437e-03f, +1.447269204e-03f, -1.152591083e-03f, +6.390032318e-05f, +1.586292933e-03f, -3.154043298e-03f, +3.869792487e-03f, -3.263978705e-03f, +1.470729056e-03f, +7.992472087e-04f, -2.619664849e-03f, +3.328515775e-03f, -2.836819321e-03f, +1.596659646e-03f, -2.840184150e-04f, -5.793680015e-04f, +8.376032387e-04f, -6.616323241e-04f, +3.466623980e-04f, -1.115156796e-04f, /* 14,28 (24) */ -6.021556389e-04f, +1.720518430e-03f, -2.167839204e-03f, -3.719521032e-04f, +7.654689160e-03f, -1.818603132e-02f, +2.537048384e-02f, -1.857840165e-02f, -1.242626797e-02f, +7.216134324e-02f, -1.591724724e-01f, +2.956482023e-01f, +7.777837954e-01f, +9.413583464e-02f, -1.166154103e-01f, +8.501844769e-02f, -4.137642242e-02f, +6.204555983e-03f, +1.209884266e-02f, -1.518636848e-02f, +1.007760669e-02f, -3.786743738e-03f, +5.306171384e-05f, +8.653797527e-04f, +9.696585427e-06f, -9.186672811e-05f, +2.894026873e-04f, -5.243237464e-04f, +5.408681089e-04f, +1.575000056e-05f, -1.347400030e-03f, +3.172595983e-03f, -4.496021339e-03f, +3.544052373e-03f, +2.743905104e-03f, -2.654943575e-02f, +5.609614430e-03f, +2.329013183e-02f, -7.508084114e-03f, +2.904118058e-04f, +2.632320229e-03f, -2.894684681e-03f, +1.883476665e-03f, -6.984936588e-04f, -6.574844617e-05f, +3.168659264e-04f, -2.538910417e-04f, +1.150668549e-04f, +6.085889861e-04f, -2.594563903e-03f, +5.378446577e-03f, -6.597282453e-03f, +3.055893975e-03f, +6.869175755e-03f, -2.085877730e-02f, +3.239987561e-02f, -3.367560509e-02f, +2.036393719e-02f, +4.698142935e-03f, -3.181065509e-02f, +4.908117782e-02f, -4.886384601e-02f, +3.195928419e-02f, -6.921972656e-03f, -1.497398365e-02f, +2.579840181e-02f, -2.435439499e-02f, +1.528650246e-02f, -5.203808866e-03f, -1.265549426e-03f, +3.150243130e-03f, -2.195637964e-03f, +4.082166865e-05f, -9.242779774e-06f, -1.996541794e-04f, +6.253657010e-04f, -1.127411078e-03f, +1.375066372e-03f, -9.995402078e-04f, -1.464112060e-04f, +1.788584202e-03f, -3.263538301e-03f, +3.822205572e-03f, -3.051928256e-03f, +1.154097198e-03f, +1.117524677e-03f, -2.840234656e-03f, +3.398924148e-03f, -2.768403831e-03f, +1.448693266e-03f, -1.280428443e-04f, -6.928866110e-04f, +8.936109333e-04f, -6.734959762e-04f, +3.380878856e-04f, -1.008266842e-04f, /* 14,29 (24) */ -5.924590534e-04f, +1.628651702e-03f, -1.878436517e-03f, -8.962758497e-04f, +8.195557269e-03f, -1.817028132e-02f, +2.402308381e-02f, -1.540580567e-02f, -1.692228931e-02f, +7.570539561e-02f, -1.564285673e-01f, +2.690987666e-01f, +7.833934098e-01f, +1.174259665e-01f, -1.241234944e-01f, +8.530885949e-02f, -3.874410219e-02f, +3.309871302e-03f, +1.398231932e-02f, -1.588486214e-02f, +1.001185824e-02f, -3.469877811e-03f, -2.008293278e-04f, +9.804466076e-04f, +1.379343640e-05f, -9.816516147e-05f, +2.896949507e-04f, -5.006972502e-04f, +4.737324154e-04f, +1.273031399e-04f, -1.460772114e-03f, +3.189586889e-03f, -4.281558207e-03f, +2.987177601e-03f, +3.585873696e-03f, -2.632180873e-02f, +4.021984840e-03f, +2.397874210e-02f, -6.997457314e-03f, -2.329402775e-04f, +2.940288413e-03f, -2.987606279e-03f, +1.844538592e-03f, -6.174246080e-04f, -1.321512073e-04f, +3.512064868e-04f, -2.638091165e-04f, +1.146273481e-04f, +6.494106547e-04f, -2.603806683e-03f, +5.178792398e-03f, -5.971916752e-03f, +1.928482897e-03f, +8.244242126e-03f, -2.185831751e-02f, +3.225346441e-02f, -3.188702089e-02f, +1.710039889e-02f, +8.520348508e-03f, -3.486258335e-02f, +5.023527502e-02f, -4.774632134e-02f, +2.911904954e-02f, -3.523048508e-03f, -1.774238748e-02f, +2.724709508e-02f, -2.448243784e-02f, +1.459361585e-02f, -4.310197933e-03f, -1.939045403e-03f, +3.488331016e-03f, -2.296464648e-03f, +3.218395171e-05f, +9.770303819e-06f, -2.275567523e-04f, +6.470352143e-04f, -1.113741447e-03f, +1.295105441e-03f, -8.422536019e-04f, -3.531799680e-04f, +1.977254177e-03f, -3.350962203e-03f, +3.749885259e-03f, -2.820399027e-03f, +8.298436705e-04f, +1.429321052e-03f, -3.043281239e-03f, +3.447493111e-03f, -2.680990491e-03f, +1.289157457e-03f, +3.133612787e-05f, -8.039859160e-04f, +9.448407337e-04f, -6.809646889e-04f, +3.266902341e-04f, -8.877170376e-05f, /* 14,30 (24) */ -5.786656170e-04f, +1.530486541e-03f, -1.588741566e-03f, -1.396973100e-03f, +8.669289684e-03f, -1.804297818e-02f, +2.256231169e-02f, -1.221621878e-02f, -2.120384752e-02f, +7.869257321e-02f, -1.528426936e-01f, +2.427769578e-01f, +7.874153946e-01f, +1.414047086e-01f, -1.311209517e-01f, +8.507591921e-02f, -3.580381378e-02f, +3.222650227e-04f, +1.582685791e-02f, -1.650228675e-02f, +9.879707037e-03f, -3.118671324e-03f, -4.646384443e-04f, +1.095073956e-03f, +1.748860713e-05f, -1.034438555e-04f, +2.880397168e-04f, -4.746388069e-04f, +4.055922468e-04f, +2.350749122e-04f, -1.562304760e-03f, +3.186688509e-03f, -4.046567084e-03f, +2.428048240e-03f, +4.377423792e-03f, -2.601037077e-02f, +2.419251706e-03f, +2.459851709e-02f, -6.427817053e-03f, -7.693575179e-04f, +3.237770263e-03f, -3.064104582e-03f, +1.792905577e-03f, -5.301287691e-04f, -1.997569424e-04f, +3.844197788e-04f, -2.722990093e-04f, +1.132769885e-04f, +6.815946065e-04f, -2.594036379e-03f, +4.951235646e-03f, -5.324881538e-03f, +8.147414509e-04f, +9.539347567e-03f, -2.270057111e-02f, +3.190028444e-02f, -2.990976672e-02f, +1.374943669e-02f, +1.227023377e-02f, -3.768298238e-02f, +5.106511869e-02f, -4.631700029e-02f, +2.607576830e-02f, -7.555539715e-05f, -2.042337798e-02f, +2.853625253e-02f, -2.445110171e-02f, +1.378962994e-02f, -3.365357199e-03f, -2.620010092e-03f, +3.815021250e-03f, -2.385236352e-03f, +2.381418972e-05f, +2.783507069e-05f, -2.528726818e-04f, +6.636794493e-04f, -1.092922874e-03f, +1.208069693e-03f, -6.818471861e-04f, -5.550744497e-04f, +2.151181767e-03f, -3.415889335e-03f, +3.653419413e-03f, -2.570960486e-03f, +5.001090489e-04f, +1.732556364e-03f, -3.227370804e-03f, +3.473737270e-03f, -2.574973750e-03f, +1.118978483e-03f, +1.930888630e-04f, -9.118528457e-04f, +9.908186807e-04f, -6.838558830e-04f, +3.124533545e-04f, -7.538821808e-05f, /* 14,31 (24) */ -5.611770099e-04f, +1.427042685e-03f, -1.300701849e-03f, -1.871611907e-03f, +9.074881931e-03f, -1.780790327e-02f, +2.100000693e-02f, -9.029530272e-03f, -2.525041460e-02f, +8.112062145e-02f, -1.484652698e-01f, +2.167665871e-01f, +7.898346463e-01f, +1.660032257e-01f, -1.375487688e-01f, +8.430656170e-02f, -3.256604352e-02f, -2.741839559e-03f, +1.761976349e-02f, -1.703241552e-02f, +9.679950095e-03f, -2.734251546e-03f, -7.369374536e-04f, +1.208350944e-03f, +2.077189525e-05f, -1.077107189e-04f, +2.845231361e-04f, -4.464001348e-04f, +3.369139762e-04f, +3.384863843e-04f, -1.651659887e-03f, +3.164392635e-03f, -3.792950829e-03f, +1.869931669e-03f, +5.116231187e-03f, -2.561749162e-02f, +8.074287558e-04f, +2.514586977e-02f, -5.800269820e-03f, -1.316008579e-03f, +3.522678090e-03f, -3.123298077e-03f, +1.728583557e-03f, -4.370013667e-04f, -2.681541873e-04f, +4.162395040e-04f, -2.792412597e-04f, +1.109810220e-04f, +7.054087962e-04f, -2.566201308e-03f, +4.698362964e-03f, -4.661202089e-03f, -2.781814231e-04f, +1.074741726e-02f, -2.338241830e-02f, +3.134520999e-02f, -2.775858495e-02f, +1.033354735e-02f, +1.592365318e-02f, -4.025394286e-02f, +5.156522774e-02f, -4.458444392e-02f, +2.284839749e-02f, +3.398181873e-03f, -2.299835173e-02f, +2.965523102e-02f, -2.425801284e-02f, +1.287777709e-02f, -2.374538518e-03f, -3.303865974e-03f, +4.127474604e-03f, -2.460624570e-03f, +1.577677262e-05f, +4.485014415e-05f, -2.755057020e-04f, +6.753204994e-04f, -1.065259737e-03f, +1.114678443e-03f, -5.194413529e-04f, -7.508119949e-04f, +2.309355224e-03f, -3.458047368e-03f, +3.533554494e-03f, -2.305298307e-03f, +1.670709024e-04f, +2.025202753e-03f, -3.391189819e-03f, +3.477318114e-03f, -2.450877999e-03f, +9.391669774e-04f, +3.561531937e-04f, -1.015681388e-03f, +1.031097358e-03f, -6.820156149e-04f, +2.953826578e-04f, -6.072659436e-05f, /* 15, 0 (24) */ -1.202019198e-03f, +3.406678548e-03f, -6.303893631e-03f, +8.068354747e-03f, -5.607321184e-03f, -4.553512604e-03f, +2.472926036e-02f, -5.449259515e-02f, +8.986605310e-02f, -1.238918309e-01f, +1.485898543e-01f, +8.423743737e-01f, +1.485898543e-01f, -1.238918309e-01f, +8.986605310e-02f, -5.449259515e-02f, +2.472926036e-02f, -4.553512604e-03f, -5.607321184e-03f, +8.068354747e-03f, -6.303893631e-03f, +3.406678548e-03f, -1.202019198e-03f, +1.807804541e-04f, -5.025442764e-05f, -1.614139800e-05f, +2.657761109e-04f, -7.629431710e-04f, +1.452682754e-03f, -2.084736750e-03f, +2.184131100e-03f, -1.071800091e-03f, -2.161309535e-03f, +9.191459639e-03f, -2.717107252e-02f, -9.744996581e-04f, +2.792278992e-02f, -8.649785680e-03f, +1.588115699e-03f, +1.483595605e-03f, -2.413580640e-03f, +2.171101240e-03f, -1.453164827e-03f, +7.283457605e-04f, -2.289203645e-04f, -9.017434138e-06f, +6.286057477e-05f, -3.654866787e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 1 (24) */ -1.252273626e-03f, +3.390537150e-03f, -6.038117520e-03f, +7.305411576e-03f, -4.154638430e-03f, -6.638249354e-03f, +2.691339146e-02f, -5.556439525e-02f, +8.770474357e-02f, -1.147003713e-01f, +1.214187817e-01f, +8.413998741e-01f, +1.765126442e-01f, -1.325416166e-01f, +9.145416880e-02f, -5.300899955e-02f, +2.231567972e-02f, -2.382411364e-03f, -7.060486011e-03f, +8.796700508e-03f, -6.532813995e-03f, +3.397661114e-03f, -1.139158623e-03f, +1.442317863e-04f, -3.788877044e-05f, -4.015434516e-05f, +2.994361041e-04f, -7.910617383e-04f, +1.441981615e-03f, -1.985994440e-03f, +1.945126099e-03f, -6.627965124e-04f, -2.704379752e-03f, +9.655187857e-03f, -2.633107346e-02f, -2.919360755e-03f, +2.858133125e-02f, -8.030843205e-03f, +9.878410953e-04f, +1.895385317e-03f, -2.631614059e-03f, +2.244151946e-03f, -1.443144605e-03f, +6.873306272e-04f, -1.890406424e-04f, -3.516703503e-05f, +7.560878485e-05f, -4.130279685e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 2 (24) */ -1.290162396e-03f, +3.350382805e-03f, -5.738681416e-03f, +6.514349838e-03f, -2.712656815e-03f, -8.624243794e-03f, +2.885851756e-02f, -5.622719176e-02f, +8.500036382e-02f, -1.050451834e-01f, +9.508770829e-02f, +8.384805133e-01f, +2.050939754e-01f, -1.405724598e-01f, +9.244200990e-02f, -5.111361423e-02f, +1.968406566e-02f, -1.382594172e-04f, -8.503630616e-03f, +9.484031135e-03f, -6.721854638e-03f, +3.362494079e-03f, -1.063549838e-03f, +1.029289894e-04f, -2.585564436e-05f, -6.288111760e-05f, +3.297582021e-04f, -8.126895264e-04f, +1.421410524e-03f, -1.875874720e-03f, +1.698448823e-03f, -2.592979215e-04f, -3.214552834e-03f, +1.004073855e-02f, -2.540806315e-02f, -4.851828510e-03f, +2.914220776e-02f, -7.335758955e-03f, +3.637846014e-04f, +2.304304030e-03f, -2.836406921e-03f, +2.303025716e-03f, -1.422408581e-03f, +6.400090311e-04f, -1.463379642e-04f, -6.213819845e-05f, +8.839485766e-05f, -4.597738811e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 3 (24) */ -1.316018040e-03f, +3.287501688e-03f, -5.408923214e-03f, +5.701660312e-03f, -1.291246291e-03f, -1.050011851e-02f, +3.055696638e-02f, -5.648648968e-02f, +8.178581098e-02f, -9.500444487e-02f, +6.967964513e-02f, +8.336286848e-01f, +2.342361832e-01f, -1.479082188e-01f, +9.280579450e-02f, -4.880931020e-02f, +1.684765874e-02f, +2.164766298e-03f, -9.926039197e-03f, +1.012404017e-02f, -6.868192602e-03f, +3.300355881e-03f, -9.751549807e-04f, +5.695160131e-05f, -1.424017073e-05f, -8.419684397e-05f, +3.566300498e-04f, -8.278624872e-04f, +1.391380270e-03f, -1.755433820e-03f, +1.445991415e-03f, +1.360836023e-04f, -3.689335954e-03f, +1.034831877e-02f, -2.440765651e-02f, -6.763711628e-03f, +2.960136401e-02f, -6.566110676e-03f, -2.805140717e-04f, +2.707437138e-03f, -3.026184777e-03f, +2.346940238e-03f, -1.390816372e-03f, +5.865429688e-04f, -1.010419546e-04f, -8.974850794e-05f, +1.011095079e-04f, -5.051825408e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 4 (24) */ -1.330258211e-03f, +3.203304844e-03f, -5.052293164e-03f, +4.873797825e-03f, +1.001339790e-04f, -1.225555233e-02f, +3.200295779e-02f, -5.635040608e-02f, +7.809647503e-02f, -8.465612610e-02f, +4.527198863e-02f, +8.268649732e-01f, +2.638375472e-01f, -1.544743294e-01f, +9.252528043e-02f, -4.610187306e-02f, +1.382147396e-02f, +4.511706537e-03f, -1.131685557e-02f, +1.071058314e-02f, -6.969234557e-03f, +3.210607373e-03f, -8.740454728e-04f, +6.433347233e-06f, -3.120097083e-06f, -1.039925183e-04f, +3.799689975e-04f, -8.366628414e-04f, +1.352358753e-03f, -1.625774964e-03f, +1.189641658e-03f, +5.208522228e-04f, -4.126526358e-03f, +1.057856529e-02f, -2.333577971e-02f, -8.646924785e-03f, +2.995520331e-02f, -5.723925957e-03f, -9.412914033e-04f, +3.101839406e-03f, -3.199236880e-03f, +2.375201681e-03f, -1.348303676e-03f, +5.271453987e-04f, -5.340995977e-05f, -1.178033572e-04f, +1.136391256e-04f, -5.486972474e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 5 (24) */ -1.333378308e-03f, +3.099312325e-03f, -4.672324167e-03f, +4.037134983e-03f, +1.452492732e-03f, -1.388132730e-02f, +3.319259945e-02f, -5.582955385e-02f, +7.396994867e-02f, -7.407756081e-02f, +2.193620892e-02f, +8.182180484e-01f, +2.937927505e-01f, -1.601982554e-01f, +9.158398903e-02f, -4.300003366e-02f, +1.062223708e-02f, +6.886908217e-03f, -1.266515925e-02f, +1.123772853e-02f, -7.022644516e-03f, +3.092804016e-03f, -7.604063471e-04f, -4.843637750e-05f, +7.434575292e-06f, -1.221753032e-04f, +3.997217905e-04f, -8.392171580e-04f, +1.304866128e-03f, -1.488039415e-03f, +9.312699668e-04f, +8.926425127e-04f, -4.524218732e-03f, +1.073253317e-02f, -2.219863564e-02f, -1.049353017e-02f, +3.020061078e-02f, -4.811678410e-03f, -1.614578835e-03f, +3.484554368e-03f, -3.353929750e-03f, +2.387211858e-03f, -1.294884725e-03f, +4.620800823e-04f, -3.725915954e-06f, -1.460971073e-04f, +1.258666049e-04f, -5.897513919e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 6 (24) */ -1.325943733e-03f, +2.977137022e-03f, -4.272602376e-03f, +3.197917825e-03f, +2.757358860e-03f, -1.536936671e-02f, +3.412386942e-02f, -5.493691134e-02f, +6.944572994e-02f, -6.334502763e-02f, -2.624267216e-04f, +8.077245182e-01f, +3.239933613e-01f, -1.650099338e-01f, +8.996941019e-02f, -3.951547929e-02f, +7.268307330e-03f, +9.274120075e-03f, -1.396004397e-02f, +1.169980862e-02f, -7.026370432e-03f, +2.946706908e-03f, -6.345397422e-04f, -1.074115167e-04f, +1.736188206e-05f, -1.386686913e-04f, +4.158640421e-04f, -8.356941546e-04f, +1.249469677e-03f, -1.343397461e-03f, +6.727168057e-04f, +1.249232444e-03f, -4.880810555e-03f, +1.081168200e-02f, -2.100266800e-02f, -1.229577820e-02f, +3.033497391e-02f, -3.832281179e-03f, -2.296223200e-03f, +3.852634216e-03f, -3.488720509e-03f, +2.382474880e-03f, -1.230654223e-03f, +3.916610318e-04f, +4.770102634e-05f, -1.744143749e-04f, +1.376722353e-04f, -6.277736731e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 7 (24) */ -1.308581851e-03f, +2.838468331e-03f, -3.856738334e-03f, +2.362223671e-03f, +4.006828538e-03f, -1.671276418e-02f, +3.479658622e-02f, -5.368767890e-02f, +6.456491939e-02f, -5.253334563e-02f, -2.126509472e-02f, +7.954287400e-01f, +3.543283352e-01f, -1.688422150e-01f, +8.767318699e-02f, -3.566284507e-02f, +3.779586821e-03f, +1.165659496e-02f, -1.519069819e-02f, +1.209146965e-02f, -6.978669406e-03f, +2.772292533e-03f, -4.968675070e-04f, -1.701888840e-04f, +2.660810510e-05f, -1.534125286e-04f, +4.283994976e-04f, -8.263022417e-04f, +1.186778480e-03f, -1.193039400e-03f, +4.157805768e-04f, +1.588555137e-03f, -5.195005431e-03f, +1.081785999e-02f, -1.975452443e-02f, -1.404614710e-02f, +3.035620045e-02f, -2.789077773e-03f, -2.981908714e-03f, +4.203160054e-03f, -3.602169867e-03f, +2.360603211e-03f, -1.155788732e-03f, +3.162515595e-04f, +1.005381200e-04f, -2.025314460e-04f, +1.489346509e-04f, -6.621935742e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 8 (24) */ -1.281973746e-03f, +2.685055802e-03f, -3.428338836e-03f, +1.535921429e-03f, +5.193607018e-03f, -1.790580358e-02f, +3.521236680e-02f, -5.209912376e-02f, +5.936991395e-02f, -4.171548565e-02f, -4.101961916e-02f, +7.813825929e-01f, +3.846845357e-01f, -1.716312928e-01f, +8.469127828e-02f, -3.145968502e-02f, +1.774169543e-04f, +1.401719817e-02f, -1.634648693e-02f, +1.240772121e-02f, -6.878131286e-03f, +2.569761087e-03f, -3.479328561e-04f, -2.364082414e-04f, +3.512790129e-05f, -1.663629034e-04f, +4.373591042e-04f, -8.112868384e-04f, +1.117437905e-03f, -1.038166596e-03f, +1.622060800e-04f, +1.908709318e-03f, -5.465814421e-03f, +1.075328599e-02f, -1.846101883e-02f, -1.573738130e-02f, +3.026273354e-02f, -1.685830264e-03f, -3.667180403e-03f, +4.533262407e-03f, -3.692954672e-03f, +2.321323088e-03f, -1.070547483e-03f, +2.362629239e-04f, +1.544308747e-04f, -2.302178069e-04f, +1.595318308e-04f, -6.924470590e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 9 (24) */ -1.246845844e-03f, +2.518692899e-03f, -2.990979732e-03f, +7.246345905e-04f, +6.311044923e-03f, -1.894397017e-02f, +3.537457288e-02f, -5.019041444e-02f, +5.390409953e-02f, -3.096219965e-02f, -5.948063799e-02f, +7.656452116e-01f, +4.149472692e-01f, -1.733171230e-01f, +8.102409787e-02f, -2.692642261e-02f, -3.515537718e-03f, +1.633852125e-02f, -1.741703441e-02f, +1.264398413e-02f, -6.723700411e-03f, +2.339543281e-03f, -1.884010252e-04f, -3.056529473e-04f, +4.288435272e-05f, -1.774919066e-04f, +4.427998967e-04f, -7.909274841e-04f, +1.042123976e-03f, -8.799826682e-04f, -8.632640165e-05f, +2.207968436e-03f, -5.692555393e-03f, +1.062052969e-02f, -1.712909309e-02f, -1.736252819e-02f, +3.005356397e-02f, -5.267048802e-04f, -4.347468851e-03f, +4.840141825e-03f, -3.759879919e-03f, +2.264479237e-03f, -9.752725974e-04f, +1.521525726e-04f, +2.090051380e-04f, -2.572377835e-04f, +1.693421431e-04f, -7.179824386e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,10 (24) */ -1.203961492e-03f, +2.341200992e-03f, -2.548179835e-03f, -6.629289359e-05f, +7.353168899e-03f, -1.982395284e-02f, +3.528824648e-02f, -4.798244601e-02f, +4.821154414e-02f, -2.034166996e-02f, -7.660973108e-02f, +7.482826834e-01f, +4.450008332e-01f, -1.738438279e-01f, +7.667662902e-02f, -2.208628079e-02f, -7.275417637e-03f, +1.860300049e-02f, -1.839230701e-02f, +1.279613670e-02f, -6.514695273e-03f, +2.082305497e-03f, -1.905888210e-05f, -3.774511912e-04f, +4.984894042e-05f, -1.867872693e-04f, +4.448037157e-04f, -7.655347742e-04f, +9.615376594e-04f, -7.196848669e-04f, -3.282113230e-04f, +2.484788408e-03f, -5.874850438e-03f, +1.042248995e-02f, -1.576577850e-02f, -1.891497324e-02f, +2.972823951e-02f, +6.837449566e-04f, -5.018116136e-03f, +5.121089464e-03f, -3.801890133e-03f, +2.190038851e-03f, -8.703886933e-04f, +6.442198589e-05f, +2.638693945e-04f, -2.833522783e-04f, +1.782454255e-04f, -7.382663597e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,11 (24) */ -1.154112551e-03f, +2.154413723e-03f, -2.103376120e-03f, -8.318276678e-04f, +8.314706558e-03f, -2.054363771e-02f, +3.496003516e-02f, -4.549765760e-02f, +4.233669370e-02f, -9.919180010e-03f, -9.237550958e-02f, +7.293677102e-01f, +4.747290727e-01f, -1.731600829e-01f, +7.165851289e-02f, -1.696519132e-02f, -1.107730777e-02f, +2.079303934e-02f, -1.926269570e-02f, +1.286055869e-02f, -6.250825879e-03f, +1.798953219e-03f, +1.591865434e-04f, -4.512778272e-04f, +5.600144477e-05f, -1.942518852e-04f, +4.434757725e-04f, -7.354471486e-04f, +8.763991151e-04f, -5.584557005e-04f, -5.619273484e-04f, +2.737813968e-03f, -6.012621400e-03f, +1.016237157e-02f, -1.437815703e-02f, -2.038847314e-02f, +2.928687114e-02f, +1.940598057e-03f, -5.674402791e-03f, +5.373507498e-03f, -3.818080014e-03f, +2.098094768e-03f, -7.564018756e-04f, -2.638587422e-05f, +3.186172715e-04f, -3.083205957e-04f, +1.861240939e-04f, -7.527898623e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,12 (24) */ -1.098111107e-03f, +1.960161838e-03f, -1.659900347e-03f, -1.567274816e-03f, +9.191105673e-03f, -2.110209341e-02f, +3.439810781e-02f, -4.275984363e-02f, +3.632407230e-02f, +2.431915639e-04f, -1.067536666e-01f, +7.089792371e-01f, +5.040159438e-01f, -1.712194849e-01f, +6.598411010e-02f, -1.159168383e-02f, -1.489538778e-02f, +2.289113411e-02f, -2.001909758e-02f, +1.283417282e-02f, -5.932208607e-03f, +1.490632623e-03f, +3.453106372e-04f, -5.265568134e-04f, +6.132977598e-05f, -1.999032245e-04f, +4.389430753e-04f, -7.010275597e-04f, +7.874419488e-04f, -3.974548674e-04f, -7.860460238e-04f, +2.965883599e-03f, -6.106083580e-03f, +9.843660690e-03f, -1.297332271e-02f, -2.177718689e-02f, +2.873013627e-02f, +3.238587285e-03f, -6.311575666e-03f, +5.594929228e-03f, -3.807704280e-03f, +1.988867815e-03f, -6.338980935e-04f, -1.196895001e-04f, +3.728302359e-04f, -3.319023407e-04f, +1.928642709e-04f, -7.610744498e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,13 (24) */ -1.036781331e-03f, +1.760258613e-03f, -1.220957272e-03f, -2.268302376e-03f, +9.978547622e-03f, -2.149954827e-02f, +3.361206178e-02f, -3.979396003e-02f, +3.021798872e-02f, +1.008685225e-02f, -1.197269893e-01f, +6.872020502e-01f, +5.327460801e-01f, -1.679808976e-01f, +5.967253443e-02f, -5.996754598e-03f, -1.870309206e-02f, +2.488000193e-02f, -2.065299567e-02f, +1.271448332e-02f, -5.559378371e-03f, +1.158730282e-03f, +5.381749081e-04f, -6.026642584e-04f, +6.582973861e-05f, -2.037726487e-04f, +4.313527363e-04f, -6.626600498e-04f, +6.954075180e-04f, -2.378115399e-04f, -9.992396061e-04f, +3.168033052e-03f, -6.155737691e-03f, +9.470098782e-03f, -1.155834333e-02f, -2.307570460e-02f, +2.805927887e-02f, +4.572123658e-03f, -6.924876495e-03f, +5.783038737e-03f, -3.770186591e-03f, +1.862708288e-03f, -5.035408677e-04f, -2.148721470e-04f, +4.260804688e-04f, -3.538593798e-04f, +1.983569237e-04f, -7.626781165e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,14 (24) */ -9.709515919e-04f, +1.556485965e-03f, -7.896045356e-04f, -2.930962426e-03f, +1.067395514e-02f, -2.173735981e-02f, +3.261282218e-02f, -3.662592698e-02f, +2.406225103e-02f, +1.955695104e-02f, -1.312853327e-01f, +6.641263456e-01f, +5.608053590e-01f, -1.634087739e-01f, +5.274765793e-02f, -2.137158612e-04f, -2.247327865e-02f, +2.674271021e-02f, -2.115653654e-02f, +1.249961117e-02f, -5.133297903e-03f, +8.048709026e-04f, +7.365318318e-04f, -6.789320700e-04f, +6.950473468e-05f, -2.059046353e-04f, +4.208701729e-04f, -6.207462663e-04f, +6.010393240e-04f, -8.061705216e-05f, -1.200288012e-03f, +3.343497455e-03f, -6.162360143e-03f, +9.045655680e-03f, -1.014022270e-02f, -2.427907375e-02f, +2.727610634e-02f, +5.935322607e-03f, -7.509571034e-03f, +5.935689959e-03f, -3.705127503e-03f, +1.720096526e-03f, -3.660683860e-04f, -3.112854986e-04f, +4.779338980e-04f, -3.739578488e-04f, +2.024990033e-04f, -7.572012713e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,15 (24) */ -9.014468573e-04f, +1.350581329e-03f, -3.687343626e-04f, -3.551708692e-03f, +1.127499446e-02f, -2.181797687e-02f, +3.141253417e-02f, -3.328242953e-02f, +1.789989089e-02f, +2.860260672e-02f, -1.414255554e-01f, +6.398472718e-01f, +5.880814653e-01f, -1.574734513e-01f, +4.523808690e-02f, +5.721974098e-03f, -2.617840616e-02f, +2.846280674e-02f, -2.152260492e-02f, +1.218832567e-02f, -4.655364005e-03f, +4.309130538e-04f, +9.390308351e-04f, -7.546521972e-04f, +7.236541015e-05f, -2.063559209e-04f, +4.076772234e-04f, -5.757019422e-04f, +5.050775346e-04f, +7.308196697e-05f, -1.388084859e-03f, +3.491712014e-03f, -6.126991762e-03f, +8.574501617e-03f, -8.725863701e-03f, -2.538282306e-02f, +2.638298346e-02f, +7.322032278e-03f, -8.060978567e-03f, +6.050925029e-03f, -3.612311354e-03f, +1.561642568e-03f, -2.222899766e-04f, -4.082536713e-04f, +5.279533703e-04f, -3.919701930e-04f, +2.051945734e-04f, -7.442924996e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,16 (24) */ -8.290814471e-04f, +1.144225408e-03f, +3.894286075e-05f, -4.127410634e-03f, +1.178007200e-02f, -2.174489490e-02f, +3.002444931e-02f, -2.979071751e-02f, +1.177289913e-02f, +3.717710833e-02f, -1.501514191e-01f, +6.144644488e-01f, +6.144644488e-01f, -1.501514191e-01f, +3.717710833e-02f, +1.177289913e-02f, -2.979071751e-02f, +3.002444931e-02f, -2.174489490e-02f, +1.178007200e-02f, -4.127410634e-03f, +3.894286075e-05f, +1.144225408e-03f, -8.290814471e-04f, +7.442924996e-05f, -2.051945734e-04f, +3.919701930e-04f, -5.279533703e-04f, +4.082536713e-04f, +2.222899766e-04f, -1.561642568e-03f, +3.612311354e-03f, -6.050925029e-03f, +8.060978567e-03f, -7.322032278e-03f, -2.638298346e-02f, +2.538282306e-02f, +8.725863701e-03f, -8.574501617e-03f, +6.126991762e-03f, -3.491712014e-03f, +1.388084859e-03f, -7.308196697e-05f, -5.050775346e-04f, +5.757019422e-04f, -4.076772234e-04f, +2.063559209e-04f, -7.236541015e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,17 (24) */ -7.546521972e-04f, +9.390308351e-04f, +4.309130538e-04f, -4.655364005e-03f, +1.218832567e-02f, -2.152260492e-02f, +2.846280674e-02f, -2.617840616e-02f, +5.721974098e-03f, +4.523808690e-02f, -1.574734513e-01f, +5.880814653e-01f, +6.398472718e-01f, -1.414255554e-01f, +2.860260672e-02f, +1.789989089e-02f, -3.328242953e-02f, +3.141253417e-02f, -2.181797687e-02f, +1.127499446e-02f, -3.551708692e-03f, -3.687343626e-04f, +1.350581329e-03f, -9.014468573e-04f, +7.572012713e-05f, -2.024990033e-04f, +3.739578488e-04f, -4.779338980e-04f, +3.112854986e-04f, +3.660683860e-04f, -1.720096526e-03f, +3.705127503e-03f, -5.935689959e-03f, +7.509571034e-03f, -5.935322607e-03f, -2.727610634e-02f, +2.427907375e-02f, +1.014022270e-02f, -9.045655680e-03f, +6.162360143e-03f, -3.343497455e-03f, +1.200288012e-03f, +8.061705216e-05f, -6.010393240e-04f, +6.207462663e-04f, -4.208701729e-04f, +2.059046353e-04f, -6.950473468e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,18 (24) */ -6.789320700e-04f, +7.365318318e-04f, +8.048709026e-04f, -5.133297903e-03f, +1.249961117e-02f, -2.115653654e-02f, +2.674271021e-02f, -2.247327865e-02f, -2.137158612e-04f, +5.274765793e-02f, -1.634087739e-01f, +5.608053590e-01f, +6.641263456e-01f, -1.312853327e-01f, +1.955695104e-02f, +2.406225103e-02f, -3.662592698e-02f, +3.261282218e-02f, -2.173735981e-02f, +1.067395514e-02f, -2.930962426e-03f, -7.896045356e-04f, +1.556485965e-03f, -9.709515919e-04f, +7.626781165e-05f, -1.983569237e-04f, +3.538593798e-04f, -4.260804688e-04f, +2.148721470e-04f, +5.035408677e-04f, -1.862708288e-03f, +3.770186591e-03f, -5.783038737e-03f, +6.924876495e-03f, -4.572123658e-03f, -2.805927887e-02f, +2.307570460e-02f, +1.155834333e-02f, -9.470098782e-03f, +6.155737691e-03f, -3.168033052e-03f, +9.992396061e-04f, +2.378115399e-04f, -6.954075180e-04f, +6.626600498e-04f, -4.313527363e-04f, +2.037726487e-04f, -6.582973861e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,19 (24) */ -6.026642584e-04f, +5.381749081e-04f, +1.158730282e-03f, -5.559378371e-03f, +1.271448332e-02f, -2.065299567e-02f, +2.488000193e-02f, -1.870309206e-02f, -5.996754598e-03f, +5.967253443e-02f, -1.679808976e-01f, +5.327460801e-01f, +6.872020502e-01f, -1.197269893e-01f, +1.008685225e-02f, +3.021798872e-02f, -3.979396003e-02f, +3.361206178e-02f, -2.149954827e-02f, +9.978547622e-03f, -2.268302376e-03f, -1.220957272e-03f, +1.760258613e-03f, -1.036781331e-03f, +7.610744498e-05f, -1.928642709e-04f, +3.319023407e-04f, -3.728302359e-04f, +1.196895001e-04f, +6.338980935e-04f, -1.988867815e-03f, +3.807704280e-03f, -5.594929228e-03f, +6.311575666e-03f, -3.238587285e-03f, -2.873013627e-02f, +2.177718689e-02f, +1.297332271e-02f, -9.843660690e-03f, +6.106083580e-03f, -2.965883599e-03f, +7.860460238e-04f, +3.974548674e-04f, -7.874419488e-04f, +7.010275597e-04f, -4.389430753e-04f, +1.999032245e-04f, -6.132977598e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,20 (24) */ -5.265568134e-04f, +3.453106372e-04f, +1.490632623e-03f, -5.932208607e-03f, +1.283417282e-02f, -2.001909758e-02f, +2.289113411e-02f, -1.489538778e-02f, -1.159168383e-02f, +6.598411010e-02f, -1.712194849e-01f, +5.040159438e-01f, +7.089792371e-01f, -1.067536666e-01f, +2.431915639e-04f, +3.632407230e-02f, -4.275984363e-02f, +3.439810781e-02f, -2.110209341e-02f, +9.191105673e-03f, -1.567274816e-03f, -1.659900347e-03f, +1.960161838e-03f, -1.098111107e-03f, +7.527898623e-05f, -1.861240939e-04f, +3.083205957e-04f, -3.186172715e-04f, +2.638587422e-05f, +7.564018756e-04f, -2.098094768e-03f, +3.818080014e-03f, -5.373507498e-03f, +5.674402791e-03f, -1.940598057e-03f, -2.928687114e-02f, +2.038847314e-02f, +1.437815703e-02f, -1.016237157e-02f, +6.012621400e-03f, -2.737813968e-03f, +5.619273484e-04f, +5.584557005e-04f, -8.763991151e-04f, +7.354471486e-04f, -4.434757725e-04f, +1.942518852e-04f, -5.600144477e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,21 (24) */ -4.512778272e-04f, +1.591865434e-04f, +1.798953219e-03f, -6.250825879e-03f, +1.286055869e-02f, -1.926269570e-02f, +2.079303934e-02f, -1.107730777e-02f, -1.696519132e-02f, +7.165851289e-02f, -1.731600829e-01f, +4.747290727e-01f, +7.293677102e-01f, -9.237550958e-02f, -9.919180010e-03f, +4.233669370e-02f, -4.549765760e-02f, +3.496003516e-02f, -2.054363771e-02f, +8.314706558e-03f, -8.318276678e-04f, -2.103376120e-03f, +2.154413723e-03f, -1.154112551e-03f, +7.382663597e-05f, -1.782454255e-04f, +2.833522783e-04f, -2.638693945e-04f, -6.442198589e-05f, +8.703886933e-04f, -2.190038851e-03f, +3.801890133e-03f, -5.121089464e-03f, +5.018116136e-03f, -6.837449566e-04f, -2.972823951e-02f, +1.891497324e-02f, +1.576577850e-02f, -1.042248995e-02f, +5.874850438e-03f, -2.484788408e-03f, +3.282113230e-04f, +7.196848669e-04f, -9.615376594e-04f, +7.655347742e-04f, -4.448037157e-04f, +1.867872693e-04f, -4.984894042e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,22 (24) */ -3.774511912e-04f, -1.905888210e-05f, +2.082305497e-03f, -6.514695273e-03f, +1.279613670e-02f, -1.839230701e-02f, +1.860300049e-02f, -7.275417637e-03f, -2.208628079e-02f, +7.667662902e-02f, -1.738438279e-01f, +4.450008332e-01f, +7.482826834e-01f, -7.660973108e-02f, -2.034166996e-02f, +4.821154414e-02f, -4.798244601e-02f, +3.528824648e-02f, -1.982395284e-02f, +7.353168899e-03f, -6.629289359e-05f, -2.548179835e-03f, +2.341200992e-03f, -1.203961492e-03f, +7.179824386e-05f, -1.693421431e-04f, +2.572377835e-04f, -2.090051380e-04f, -1.521525726e-04f, +9.752725974e-04f, -2.264479237e-03f, +3.759879919e-03f, -4.840141825e-03f, +4.347468851e-03f, +5.267048802e-04f, -3.005356397e-02f, +1.736252819e-02f, +1.712909309e-02f, -1.062052969e-02f, +5.692555393e-03f, -2.207968436e-03f, +8.632640165e-05f, +8.799826682e-04f, -1.042123976e-03f, +7.909274841e-04f, -4.427998967e-04f, +1.774919066e-04f, -4.288435272e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,23 (24) */ -3.056529473e-04f, -1.884010252e-04f, +2.339543281e-03f, -6.723700411e-03f, +1.264398413e-02f, -1.741703441e-02f, +1.633852125e-02f, -3.515537718e-03f, -2.692642261e-02f, +8.102409787e-02f, -1.733171230e-01f, +4.149472692e-01f, +7.656452116e-01f, -5.948063799e-02f, -3.096219965e-02f, +5.390409953e-02f, -5.019041444e-02f, +3.537457288e-02f, -1.894397017e-02f, +6.311044923e-03f, +7.246345905e-04f, -2.990979732e-03f, +2.518692899e-03f, -1.246845844e-03f, +6.924470590e-05f, -1.595318308e-04f, +2.302178069e-04f, -1.544308747e-04f, -2.362629239e-04f, +1.070547483e-03f, -2.321323088e-03f, +3.692954672e-03f, -4.533262407e-03f, +3.667180403e-03f, +1.685830264e-03f, -3.026273354e-02f, +1.573738130e-02f, +1.846101883e-02f, -1.075328599e-02f, +5.465814421e-03f, -1.908709318e-03f, -1.622060800e-04f, +1.038166596e-03f, -1.117437905e-03f, +8.112868384e-04f, -4.373591042e-04f, +1.663629034e-04f, -3.512790129e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,24 (24) */ -2.364082414e-04f, -3.479328561e-04f, +2.569761087e-03f, -6.878131286e-03f, +1.240772121e-02f, -1.634648693e-02f, +1.401719817e-02f, +1.774169543e-04f, -3.145968502e-02f, +8.469127828e-02f, -1.716312928e-01f, +3.846845357e-01f, +7.813825929e-01f, -4.101961916e-02f, -4.171548565e-02f, +5.936991395e-02f, -5.209912376e-02f, +3.521236680e-02f, -1.790580358e-02f, +5.193607018e-03f, +1.535921429e-03f, -3.428338836e-03f, +2.685055802e-03f, -1.281973746e-03f, +6.621935742e-05f, -1.489346509e-04f, +2.025314460e-04f, -1.005381200e-04f, -3.162515595e-04f, +1.155788732e-03f, -2.360603211e-03f, +3.602169867e-03f, -4.203160054e-03f, +2.981908714e-03f, +2.789077773e-03f, -3.035620045e-02f, +1.404614710e-02f, +1.975452443e-02f, -1.081785999e-02f, +5.195005431e-03f, -1.588555137e-03f, -4.157805768e-04f, +1.193039400e-03f, -1.186778480e-03f, +8.263022417e-04f, -4.283994976e-04f, +1.534125286e-04f, -2.660810510e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,25 (24) */ -1.701888840e-04f, -4.968675070e-04f, +2.772292533e-03f, -6.978669406e-03f, +1.209146965e-02f, -1.519069819e-02f, +1.165659496e-02f, +3.779586821e-03f, -3.566284507e-02f, +8.767318699e-02f, -1.688422150e-01f, +3.543283352e-01f, +7.954287400e-01f, -2.126509472e-02f, -5.253334563e-02f, +6.456491939e-02f, -5.368767890e-02f, +3.479658622e-02f, -1.671276418e-02f, +4.006828538e-03f, +2.362223671e-03f, -3.856738334e-03f, +2.838468331e-03f, -1.308581851e-03f, +6.277736731e-05f, -1.376722353e-04f, +1.744143749e-04f, -4.770102634e-05f, -3.916610318e-04f, +1.230654223e-03f, -2.382474880e-03f, +3.488720509e-03f, -3.852634216e-03f, +2.296223200e-03f, +3.832281179e-03f, -3.033497391e-02f, +1.229577820e-02f, +2.100266800e-02f, -1.081168200e-02f, +4.880810555e-03f, -1.249232444e-03f, -6.727168057e-04f, +1.343397461e-03f, -1.249469677e-03f, +8.356941546e-04f, -4.158640421e-04f, +1.386686913e-04f, -1.736188206e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,26 (24) */ -1.074115167e-04f, -6.345397422e-04f, +2.946706908e-03f, -7.026370432e-03f, +1.169980862e-02f, -1.396004397e-02f, +9.274120075e-03f, +7.268307330e-03f, -3.951547929e-02f, +8.996941019e-02f, -1.650099338e-01f, +3.239933613e-01f, +8.077245182e-01f, -2.624267216e-04f, -6.334502763e-02f, +6.944572994e-02f, -5.493691134e-02f, +3.412386942e-02f, -1.536936671e-02f, +2.757358860e-03f, +3.197917825e-03f, -4.272602376e-03f, +2.977137022e-03f, -1.325943733e-03f, +5.897513919e-05f, -1.258666049e-04f, +1.460971073e-04f, +3.725915954e-06f, -4.620800823e-04f, +1.294884725e-03f, -2.387211858e-03f, +3.353929750e-03f, -3.484554368e-03f, +1.614578835e-03f, +4.811678410e-03f, -3.020061078e-02f, +1.049353017e-02f, +2.219863564e-02f, -1.073253317e-02f, +4.524218732e-03f, -8.926425127e-04f, -9.312699668e-04f, +1.488039415e-03f, -1.304866128e-03f, +8.392171580e-04f, -3.997217905e-04f, +1.221753032e-04f, -7.434575292e-06f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,27 (24) */ -4.843637750e-05f, -7.604063471e-04f, +3.092804016e-03f, -7.022644516e-03f, +1.123772853e-02f, -1.266515925e-02f, +6.886908217e-03f, +1.062223708e-02f, -4.300003366e-02f, +9.158398903e-02f, -1.601982554e-01f, +2.937927505e-01f, +8.182180484e-01f, +2.193620892e-02f, -7.407756081e-02f, +7.396994867e-02f, -5.582955385e-02f, +3.319259945e-02f, -1.388132730e-02f, +1.452492732e-03f, +4.037134983e-03f, -4.672324167e-03f, +3.099312325e-03f, -1.333378308e-03f, +5.486972474e-05f, -1.136391256e-04f, +1.178033572e-04f, +5.340995977e-05f, -5.271453987e-04f, +1.348303676e-03f, -2.375201681e-03f, +3.199236880e-03f, -3.101839406e-03f, +9.412914033e-04f, +5.723925957e-03f, -2.995520331e-02f, +8.646924785e-03f, +2.333577971e-02f, -1.057856529e-02f, +4.126526358e-03f, -5.208522228e-04f, -1.189641658e-03f, +1.625774964e-03f, -1.352358753e-03f, +8.366628414e-04f, -3.799689975e-04f, +1.039925183e-04f, +3.120097083e-06f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,28 (24) */ +6.433347233e-06f, -8.740454728e-04f, +3.210607373e-03f, -6.969234557e-03f, +1.071058314e-02f, -1.131685557e-02f, +4.511706537e-03f, +1.382147396e-02f, -4.610187306e-02f, +9.252528043e-02f, -1.544743294e-01f, +2.638375472e-01f, +8.268649732e-01f, +4.527198863e-02f, -8.465612610e-02f, +7.809647503e-02f, -5.635040608e-02f, +3.200295779e-02f, -1.225555233e-02f, +1.001339790e-04f, +4.873797825e-03f, -5.052293164e-03f, +3.203304844e-03f, -1.330258211e-03f, +5.051825408e-05f, -1.011095079e-04f, +8.974850794e-05f, +1.010419546e-04f, -5.865429688e-04f, +1.390816372e-03f, -2.346940238e-03f, +3.026184777e-03f, -2.707437138e-03f, +2.805140717e-04f, +6.566110676e-03f, -2.960136401e-02f, +6.763711628e-03f, +2.440765651e-02f, -1.034831877e-02f, +3.689335954e-03f, -1.360836023e-04f, -1.445991415e-03f, +1.755433820e-03f, -1.391380270e-03f, +8.278624872e-04f, -3.566300498e-04f, +8.419684397e-05f, +1.424017073e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,29 (24) */ +5.695160131e-05f, -9.751549807e-04f, +3.300355881e-03f, -6.868192602e-03f, +1.012404017e-02f, -9.926039197e-03f, +2.164766298e-03f, +1.684765874e-02f, -4.880931020e-02f, +9.280579450e-02f, -1.479082188e-01f, +2.342361832e-01f, +8.336286848e-01f, +6.967964513e-02f, -9.500444487e-02f, +8.178581098e-02f, -5.648648968e-02f, +3.055696638e-02f, -1.050011851e-02f, -1.291246291e-03f, +5.701660312e-03f, -5.408923214e-03f, +3.287501688e-03f, -1.316018040e-03f, +4.597738811e-05f, -8.839485766e-05f, +6.213819845e-05f, +1.463379642e-04f, -6.400090311e-04f, +1.422408581e-03f, -2.303025716e-03f, +2.836406921e-03f, -2.304304030e-03f, -3.637846014e-04f, +7.335758955e-03f, -2.914220776e-02f, +4.851828510e-03f, +2.540806315e-02f, -1.004073855e-02f, +3.214552834e-03f, +2.592979215e-04f, -1.698448823e-03f, +1.875874720e-03f, -1.421410524e-03f, +8.126895264e-04f, -3.297582021e-04f, +6.288111760e-05f, +2.585564436e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,30 (24) */ +1.029289894e-04f, -1.063549838e-03f, +3.362494079e-03f, -6.721854638e-03f, +9.484031135e-03f, -8.503630616e-03f, -1.382594172e-04f, +1.968406566e-02f, -5.111361423e-02f, +9.244200990e-02f, -1.405724598e-01f, +2.050939754e-01f, +8.384805133e-01f, +9.508770829e-02f, -1.050451834e-01f, +8.500036382e-02f, -5.622719176e-02f, +2.885851756e-02f, -8.624243794e-03f, -2.712656815e-03f, +6.514349838e-03f, -5.738681416e-03f, +3.350382805e-03f, -1.290162396e-03f, +4.130279685e-05f, -7.560878485e-05f, +3.516703503e-05f, +1.890406424e-04f, -6.873306272e-04f, +1.443144605e-03f, -2.244151946e-03f, +2.631614059e-03f, -1.895385317e-03f, -9.878410953e-04f, +8.030843205e-03f, -2.858133125e-02f, +2.919360755e-03f, +2.633107346e-02f, -9.655187857e-03f, +2.704379752e-03f, +6.627965124e-04f, -1.945126099e-03f, +1.985994440e-03f, -1.441981615e-03f, +7.910617383e-04f, -2.994361041e-04f, +4.015434516e-05f, +3.788877044e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,31 (24) */ +1.442317863e-04f, -1.139158623e-03f, +3.397661114e-03f, -6.532813995e-03f, +8.796700508e-03f, -7.060486011e-03f, -2.382411364e-03f, +2.231567972e-02f, -5.300899955e-02f, +9.145416880e-02f, -1.325416166e-01f, +1.765126442e-01f, +8.413998741e-01f, +1.214187817e-01f, -1.147003713e-01f, +8.770474357e-02f, -5.556439525e-02f, +2.691339146e-02f, -6.638249354e-03f, -4.154638430e-03f, +7.305411576e-03f, -6.038117520e-03f, +3.390537150e-03f, -1.252273626e-03f, +3.654866787e-05f, -6.286057477e-05f, +9.017434138e-06f, +2.289203645e-04f, -7.283457605e-04f, +1.453164827e-03f, -2.171101240e-03f, +2.413580640e-03f, -1.483595605e-03f, -1.588115699e-03f, +8.649785680e-03f, -2.792278992e-02f, +9.744996581e-04f, +2.717107252e-02f, -9.191459639e-03f, +2.161309535e-03f, +1.071800091e-03f, -2.184131100e-03f, +2.084736750e-03f, -1.452682754e-03f, +7.629431710e-04f, -2.657761109e-04f, +1.614139800e-05f, +5.025442764e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, }; constexpr BSincTable bsinc24 = { /* scaleBase */ 7.881281313e-02f, /* scaleRange */ 1.085555698e+00f, /* m */ { 48u, 48u, 48u, 48u, 48u, 48u, 48u, 48u, 44u, 40u, 36u, 32u, 28u, 28u, 24u, 24u }, /* filterOffset */ { 0u, 6144u, 12288u, 18432u, 24576u, 30720u, 36864u, 43008u, 49152u, 54784u, 59904u, 64512u, 68608u, 72192u, 75776u, 78848u }, bsinc24_tab }; /* This 11th order filter has a rejection of -60dB, yielding a transition width * of ~0.330 (normalized frequency). Order increases when downsampling to a * limit of one octave, after which the quality of the filter (transition * width) suffers to reduce the CPU cost. The bandlimiting will cut all sound * after downsampling by ~2.60 octaves. */ alignas(16) constexpr float bsinc12_tab[39936] = { /* 0, 0 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.519885812e-03f, +3.451133814e-03f, +6.515582343e-03f, +1.087383005e-02f, +1.652921626e-02f, +2.328367055e-02f, +3.072645296e-02f, +3.826378940e-02f, +4.518869460e-02f, +5.078083067e-02f, +5.441847120e-02f, +5.568063817e-02f, +5.441847120e-02f, +5.078083067e-02f, +4.518869460e-02f, +3.826378940e-02f, +3.072645296e-02f, +2.328367055e-02f, +1.652921626e-02f, +1.087383005e-02f, +6.515582343e-03f, +3.451133814e-03f, +1.519885812e-03f, +4.670736076e-04f, -4.473156016e-05f, -7.634926120e-05f, -1.148555588e-04f, -1.562964586e-04f, -1.949507756e-04f, -2.241543973e-04f, -2.374890420e-04f, -2.300991725e-04f, -1.998415601e-04f, -1.479851488e-04f, -7.926606770e-05f, -1.244974771e-06f, +7.692363257e-05f, +1.460597965e-04f, +1.985319023e-04f, +2.295023193e-04f, +2.375909238e-04f, +2.248419263e-04f, +1.960418335e-04f, +1.575799374e-04f, +1.161320286e-04f, +7.746358669e-05f, +4.559156282e-05f, +2.243424753e-05f, /* 0, 1 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.475154251e-03f, +3.374784553e-03f, +6.400726784e-03f, +1.071753360e-02f, +1.633426549e-02f, +2.305951615e-02f, +3.048896392e-02f, +3.803369023e-02f, +4.498885304e-02f, +5.063284553e-02f, +5.433920513e-02f, +5.567939320e-02f, +5.449539483e-02f, +5.092689047e-02f, +4.538722650e-02f, +3.849329172e-02f, +3.096404388e-02f, +2.350851248e-02f, +1.672525810e-02f, +1.103140999e-02f, +6.631714371e-03f, +3.528597401e-03f, +1.565477374e-03f, +4.895078551e-04f, -4.388025644e-05f, -7.524183918e-05f, -1.135821039e-04f, -1.550103394e-04f, -1.938504700e-04f, -2.234512424e-04f, -2.373666959e-04f, -2.306734093e-04f, -2.011298355e-04f, -1.498937974e-04f, -8.159928545e-05f, -3.734778125e-06f, +7.457224711e-05f, +1.441179370e-04f, +1.972009578e-04f, +2.288828348e-04f, +2.376722283e-04f, +2.255136482e-04f, +1.971234341e-04f, +1.588605782e-04f, +1.174113605e-04f, +7.858472543e-05f, +4.646023953e-05f, +2.302203695e-05f, /* 0, 2 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.431273995e-03f, +3.299542714e-03f, +6.287144680e-03f, +1.056252326e-02f, +1.614041502e-02f, +2.283606491e-02f, +3.025159722e-02f, +3.780301682e-02f, +4.478772320e-02f, +5.048295173e-02f, +5.425760585e-02f, +5.567565842e-02f, +5.456996708e-02f, +5.107100841e-02f, +4.558442746e-02f, +3.872217455e-02f, +3.120171611e-02f, +2.373402612e-02f, +1.692238153e-02f, +1.119027057e-02f, +6.749125732e-03f, +3.607182126e-03f, +1.611937614e-03f, +5.125298920e-04f, -4.303767463e-05f, -7.414140875e-05f, -1.123118154e-04f, -1.537217763e-04f, -1.927411265e-04f, -2.227326442e-04f, -2.372240010e-04f, -2.312250478e-04f, -2.023966364e-04f, -1.517855485e-04f, -8.392302033e-05f, -6.224142940e-06f, +7.221217990e-05f, +1.421597696e-04f, +1.958488257e-04f, +2.282407078e-04f, +2.377328453e-04f, +2.261693833e-04f, +1.981953682e-04f, +1.601381827e-04f, +1.186933996e-04f, +7.971258511e-05f, +4.733756345e-05f, +2.361844294e-05f, /* 0, 3 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.388236320e-03f, +3.225401305e-03f, +6.174832865e-03f, +1.040880148e-02f, +1.594767389e-02f, +2.261333227e-02f, +3.001437322e-02f, +3.757179177e-02f, +4.458532657e-02f, +5.033116618e-02f, +5.417368283e-02f, +5.566943427e-02f, +5.464217926e-02f, +5.121316818e-02f, +4.578027628e-02f, +3.895041526e-02f, +3.143944896e-02f, +2.396019551e-02f, +1.712057690e-02f, +1.135040875e-02f, +6.867819132e-03f, +3.686894711e-03f, +1.659275177e-03f, +5.361483350e-04f, -4.220383580e-05f, -7.304805597e-05f, -1.110448427e-04f, -1.524309647e-04f, -1.916229551e-04f, -2.219987871e-04f, -2.370610757e-04f, -2.317541095e-04f, -2.036418741e-04f, -1.536602113e-04f, -8.623700849e-05f, -8.712776940e-06f, +6.984370103e-05f, +1.401854962e-04f, +1.944756084e-04f, +2.275759301e-04f, +2.377726671e-04f, +2.268089534e-04f, +1.992574267e-04f, +1.614125515e-04f, +1.199779894e-04f, +8.084707136e-05f, +4.822350583e-05f, +2.422349177e-05f, /* 0, 4 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.346032485e-03f, +3.152353249e-03f, +6.063788022e-03f, +1.025637051e-02f, +1.575605093e-02f, +2.239133348e-02f, +2.977731215e-02f, +3.734003766e-02f, +4.438168469e-02f, +5.017750597e-02f, +5.408744582e-02f, +5.566072150e-02f, +5.471202296e-02f, +5.135335367e-02f, +4.597475189e-02f, +3.917799119e-02f, +3.167722163e-02f, +2.418700446e-02f, +1.731983432e-02f, +1.151182130e-02f, +6.987797121e-03f, +3.767741783e-03f, +1.707498683e-03f, +5.603718267e-04f, -4.137875911e-05f, -7.196186479e-05f, -1.097813335e-04f, -1.511380992e-04f, -1.904961658e-04f, -2.212498566e-04f, -2.368780408e-04f, -2.322606191e-04f, -2.048654630e-04f, -1.555175978e-04f, -8.854098772e-05f, -1.120038797e-05f, +6.746708201e-05f, +1.381953216e-04f, +1.930814118e-04f, +2.268884971e-04f, +2.377915891e-04f, +2.274321824e-04f, +2.003094010e-04f, +1.626834846e-04f, +1.212649717e-04f, +8.198808773e-05f, +4.911803594e-05f, +2.483720823e-05f, /* 0, 5 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.304653725e-03f, +3.080391384e-03f, +5.954006688e-03f, +1.010523242e-02f, +1.556555477e-02f, +2.217008362e-02f, +2.954043411e-02f, +3.710777704e-02f, +4.417681923e-02f, +5.002198837e-02f, +5.399890483e-02f, +5.564952111e-02f, +5.477949004e-02f, +5.149154900e-02f, +4.616783330e-02f, +3.940487969e-02f, +3.191501321e-02f, +2.441443664e-02f, +1.752014373e-02f, +1.167450479e-02f, +7.109062093e-03f, +3.849729871e-03f, +1.756616719e-03f, +5.852090350e-04f, -4.056246185e-05f, -7.088291709e-05f, -1.085214336e-04f, -1.498433732e-04f, -1.893609687e-04f, -2.204860398e-04f, -2.366750198e-04f, -2.327446049e-04f, -2.060673215e-04f, -1.573575226e-04f, -9.083469754e-05f, -1.368668407e-05f, +6.508259574e-05f, +1.361894531e-04f, +1.916663450e-04f, +2.261784077e-04f, +2.377895090e-04f, +2.280388952e-04f, +2.013510827e-04f, +1.639507809e-04f, +1.225541865e-04f, +8.313553567e-05f, +5.002112110e-05f, +2.545961565e-05f, /* 0, 6 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.264091264e-03f, +3.009508467e-03f, +5.845485255e-03f, +9.955389042e-03f, +1.537619380e-02f, +2.194959758e-02f, +2.930375909e-02f, +3.687503244e-02f, +4.397075191e-02f, +4.986463085e-02f, +5.390807013e-02f, +5.563583443e-02f, +5.484457264e-02f, +5.162773845e-02f, +4.635949965e-02f, +3.963105810e-02f, +3.215280272e-02f, +2.464247554e-02f, +1.772149481e-02f, +1.183845557e-02f, +7.231616279e-03f, +3.932865406e-03f, +1.806637840e-03f, +6.106686506e-04f, -3.975495944e-05f, -6.981129264e-05f, -1.072652872e-04f, -1.485469791e-04f, -1.882175742e-04f, -2.197075250e-04f, -2.364521385e-04f, -2.332060983e-04f, -2.072473709e-04f, -1.591798037e-04f, -9.311787923e-05f, -1.617137348e-05f, +6.269051648e-05f, +1.341681007e-04f, +1.902305206e-04f, +2.254456640e-04f, +2.377663278e-04f, +2.286289191e-04f, +2.023822639e-04f, +1.652142386e-04f, +1.238454723e-04f, +8.428931461e-05f, +5.093272665e-05f, +2.609073586e-05f, /* 0, 7 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.224336304e-03f, +2.939697175e-03f, +5.738219968e-03f, +9.806842063e-03f, +1.518797623e-02f, +2.172989006e-02f, +2.906730695e-02f, +3.664182634e-02f, +4.376350454e-02f, +4.970545104e-02f, +5.381495225e-02f, +5.561966305e-02f, +5.490726315e-02f, +5.176190655e-02f, +4.654973017e-02f, +3.985650376e-02f, +3.239056905e-02f, +2.487110446e-02f, +1.792387707e-02f, +1.200366981e-02f, +7.355461751e-03f, +4.017154721e-03f, +1.857570567e-03f, +6.367593865e-04f, -3.895626544e-05f, -6.874706913e-05f, -1.060130363e-04f, -1.472491081e-04f, -1.870661925e-04f, -2.189145021e-04f, -2.362095255e-04f, -2.336451340e-04f, -2.084055364e-04f, -1.609842617e-04f, -9.539027583e-05f, -1.865416474e-05f, +6.029111978e-05f, +1.321314770e-04f, +1.887740547e-04f, +2.246902716e-04f, +2.377219491e-04f, +2.292020825e-04f, +2.034027372e-04f, +1.664736552e-04f, +1.251386658e-04f, +8.544932188e-05f, +5.185281596e-05f, +2.673058920e-05f, /* 0, 8 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.185380039e-03f, +2.870950105e-03f, +5.632206931e-03f, +9.659592955e-03f, +1.500091003e-02f, +2.151097556e-02f, +2.883109742e-02f, +3.640818120e-02f, +4.355509900e-02f, +4.954446678e-02f, +5.371956198e-02f, +5.560100889e-02f, +5.496755427e-02f, +5.189403803e-02f, +4.673850422e-02f, +4.008119403e-02f, +3.262829100e-02f, +2.510030654e-02f, +1.812727981e-02f, +1.217014346e-02f, +7.480600417e-03f, +4.102604043e-03f, +1.909423383e-03f, +6.634899757e-04f, -3.816639157e-05f, -6.769032218e-05f, -1.047648212e-04f, -1.459499503e-04f, -1.859070338e-04f, -2.181071619e-04f, -2.359473116e-04f, -2.340617500e-04f, -2.095417464e-04f, -1.627707202e-04f, -9.765163225e-05f, -2.113476669e-05f, +5.788468247e-05f, +1.300797972e-04f, +1.872970664e-04f, +2.239122397e-04f, +2.376562792e-04f, +2.297582162e-04f, +2.044122956e-04f, +1.677288274e-04f, +1.264336021e-04f, +8.661545276e-05f, +5.278135038e-05f, +2.737919445e-05f, /* 0, 9 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.147213647e-03f, +2.803259783e-03f, +5.527442110e-03f, +9.513643005e-03f, +1.481500300e-02f, +2.129286839e-02f, +2.859515011e-02f, +3.617411945e-02f, +4.334555725e-02f, +4.938169606e-02f, +5.362191034e-02f, +5.557987412e-02f, +5.502543896e-02f, +5.202411782e-02f, +4.692580129e-02f, +4.030510627e-02f, +3.286594728e-02f, +2.533006476e-02f, +1.833169210e-02f, +1.233787229e-02f, +7.607034019e-03f, +4.189219495e-03f, +1.962204733e-03f, +6.908691701e-04f, -3.738534770e-05f, -6.664112530e-05f, -1.035207805e-04f, -1.446496947e-04f, -1.847403082e-04f, -2.172856968e-04f, -2.356656303e-04f, -2.344559875e-04f, -2.106559329e-04f, -1.645390058e-04f, -9.990169528e-05f, -2.361288858e-05f, +5.547148255e-05f, +1.280132790e-04f, +1.857996784e-04f, +2.231115807e-04f, +2.375692277e-04f, +2.302971523e-04f, +2.054107328e-04f, +1.689795512e-04f, +1.277301149e-04f, +8.778760047e-05f, +5.371828929e-05f, +2.803656886e-05f, /* 0,10 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.109828299e-03f, +2.736618658e-03f, +5.423921330e-03f, +9.368993310e-03f, +1.463026269e-02f, +2.107558270e-02f, +2.835948448e-02f, +3.593966347e-02f, +4.313490132e-02f, +4.921715706e-02f, +5.352200865e-02f, +5.555626123e-02f, +5.508091044e-02f, +5.215213110e-02f, +4.711160097e-02f, +4.052821785e-02f, +3.310351651e-02f, +2.556036191e-02f, +1.853710284e-02f, +1.250685184e-02f, +7.734764134e-03f, +4.277007096e-03f, +2.015923023e-03f, +7.189057390e-04f, -3.661314192e-05f, -6.559954993e-05f, -1.022810507e-04f, -1.433485289e-04f, -1.835662257e-04f, -2.164503001e-04f, -2.353646174e-04f, -2.348278912e-04f, -2.117480312e-04f, -1.662889481e-04f, -1.021402136e-04f, -2.608824006e-05f, +5.305179922e-05f, +1.259321426e-04f, +1.842820166e-04f, +2.222883106e-04f, +2.374607067e-04f, +2.308187252e-04f, +2.063978428e-04f, +1.702256220e-04f, +1.290280359e-04f, +8.896565621e-05f, +5.466359004e-05f, +2.870272812e-05f, /* 0,11 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.073215158e-03f, +2.671019108e-03f, +5.321640279e-03f, +9.225644781e-03f, +1.444669647e-02f, +2.085913240e-02f, +2.812411986e-02f, +3.570483557e-02f, +4.292315329e-02f, +4.905086811e-02f, +5.341986844e-02f, +5.553017299e-02f, +5.513396224e-02f, +5.227806324e-02f, +4.729588299e-02f, +4.075050616e-02f, +3.334097721e-02f, +2.579118063e-02f, +1.874350068e-02f, +1.267707746e-02f, +7.863792170e-03f, +4.365972752e-03f, +2.070586613e-03f, +7.476084671e-04f, -3.584978049e-05f, -6.456566540e-05f, -1.010457663e-04f, -1.420466395e-04f, -1.823849963e-04f, -2.156011663e-04f, -2.350444110e-04f, -2.351775086e-04f, -2.128179804e-04f, -1.680203798e-04f, -1.043669379e-04f, -2.856053128e-05f, +5.062591276e-05f, +1.238366106e-04f, +1.827442103e-04f, +2.214424487e-04f, +2.373306314e-04f, +2.313227709e-04f, +2.073734206e-04f, +1.714668346e-04f, +1.303271956e-04f, +9.014950911e-05f, +5.561720797e-05f, +2.937768631e-05f, /* 0,12 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.037365377e-03f, +2.606453443e-03f, +5.220594513e-03f, +9.083598142e-03f, +1.426431147e-02f, +2.064353123e-02f, +2.788907545e-02f, +3.546965807e-02f, +4.271033531e-02f, +4.888284773e-02f, +5.331550150e-02f, +5.550161246e-02f, +5.518458815e-02f, +5.240189986e-02f, +4.747862720e-02f, +4.097194861e-02f, +3.357830785e-02f, +2.602250340e-02f, +1.895087410e-02f, +1.284854430e-02f, +7.994119366e-03f, +4.456122261e-03f, +2.126203821e-03f, +7.769861534e-04f, -3.509526789e-05f, -6.353953899e-05f, -9.981506022e-05f, -1.407442116e-04f, -1.811968298e-04f, -2.147384913e-04f, -2.347051515e-04f, -2.355048907e-04f, -2.138657227e-04f, -1.697331367e-04f, -1.065816209e-04f, -3.102947289e-05f, +4.819410453e-05f, +1.217269082e-04f, +1.811863919e-04f, +2.205740179e-04f, +2.371789201e-04f, +2.318091276e-04f, +2.083372615e-04f, +1.727029831e-04f, +1.316274228e-04f, +9.133904628e-05f, +5.657909639e-05f, +3.006145594e-05f, /* 0,13 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +1.002270109e-03f, +2.542913904e-03f, +5.120779452e-03f, +8.942853930e-03f, +1.408311464e-02f, +2.042879274e-02f, +2.765437030e-02f, +3.523415318e-02f, +4.249646959e-02f, +4.871311459e-02f, +5.320891988e-02f, +5.547058299e-02f, +5.523278225e-02f, +5.252362676e-02f, +4.765981359e-02f, +4.119252263e-02f, +3.381548677e-02f, +2.625431253e-02f, +1.915921136e-02f, +1.302124728e-02f, +8.125746789e-03f, +4.547461308e-03f, +2.182782917e-03f, +8.070476094e-04f, -3.434960685e-05f, -6.252123589e-05f, -9.858906309e-05f, -1.394414293e-04f, -1.800019355e-04f, -2.138624717e-04f, -2.343469818e-04f, -2.358100918e-04f, -2.148912040e-04f, -1.714270575e-04f, -1.087840172e-04f, -3.349477614e-05f, +4.575665691e-05f, +1.196032629e-04f, +1.796086972e-04f, +2.196830446e-04f, +2.370054938e-04f, +2.322776351e-04f, +2.092891617e-04f, +1.739338611e-04f, +1.329285447e-04f, +9.253415281e-05f, +5.754920659e-05f, +3.075404787e-05f, /* 0,14 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +9.679205023e-04f, +2.480392668e-03f, +5.022190389e-03f, +8.803412501e-03f, +1.390311270e-02f, +2.021493027e-02f, +2.742002332e-02f, +3.499834308e-02f, +4.228157838e-02f, +4.854168753e-02f, +5.310013586e-02f, +5.543708821e-02f, +5.527853891e-02f, +5.264323003e-02f, +4.783942229e-02f, +4.141220567e-02f, +3.405249226e-02f, +2.648659017e-02f, +1.936850052e-02f, +1.319518114e-02f, +8.258675333e-03f, +4.639995460e-03f, +2.240332124e-03f, +8.378016572e-04f, -3.361279831e-05f, -6.151081921e-05f, -9.736790378e-05f, -1.381384751e-04f, -1.788005228e-04f, -2.129733054e-04f, -2.339700470e-04f, -2.360931689e-04f, -2.158943737e-04f, -1.731019841e-04f, -1.109738837e-04f, -3.595615288e-05f, +4.331385324e-05f, +1.174659045e-04f, +1.780112652e-04f, +2.187695585e-04f, +2.368102768e-04f, +2.327281357e-04f, +2.102289181e-04f, +1.751592616e-04f, +1.342303873e-04f, +9.373471177e-05f, +5.852748780e-05f, +3.145547134e-05f, /* 0,15 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +9.343077040e-04f, +2.418881849e-03f, +4.924822486e-03f, +8.665274026e-03f, +1.372431218e-02f, +2.000195696e-02f, +2.718605327e-02f, +3.476224991e-02f, +4.206568401e-02f, +4.836858555e-02f, +5.298916198e-02f, +5.540113206e-02f, +5.532185276e-02f, +5.276069593e-02f, +4.801743355e-02f, +4.163097523e-02f, +3.428930254e-02f, +2.671931830e-02f, +1.957872944e-02f, +1.337034040e-02f, +8.392905721e-03f, +4.733730172e-03f, +2.298859611e-03f, +8.692571286e-04f, -3.288484150e-05f, -6.050835000e-05f, -9.615170919e-05f, -1.368355303e-04f, -1.775928005e-04f, -2.120711910e-04f, -2.335744944e-04f, -2.363541826e-04f, -2.168751846e-04f, -1.747577616e-04f, -1.131509793e-04f, -3.841331568e-05f, +4.086597778e-05f, +1.153150651e-04f, +1.763942382e-04f, +2.178335929e-04f, +2.365931963e-04f, +2.331604734e-04f, +2.111563284e-04f, +1.763789774e-04f, +1.355327749e-04f, +9.494060420e-05f, +5.951388722e-05f, +3.216573391e-05f, /* 0,16 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +9.014228625e-04f, +2.358373499e-03f, +4.828670776e-03f, +8.528438495e-03f, +1.354671938e-02f, +1.978988577e-02f, +2.695247878e-02f, +3.452589573e-02f, +4.184880882e-02f, +4.819382779e-02f, +5.287601100e-02f, +5.536271874e-02f, +5.536271874e-02f, +5.287601100e-02f, +4.819382779e-02f, +4.184880882e-02f, +3.452589573e-02f, +2.695247878e-02f, +1.978988577e-02f, +1.354671938e-02f, +8.528438495e-03f, +4.828670776e-03f, +2.358373499e-03f, +9.014228625e-04f, -3.216573391e-05f, -5.951388722e-05f, -9.494060420e-05f, -1.355327749e-04f, -1.763789774e-04f, -2.111563284e-04f, -2.331604734e-04f, -2.365931963e-04f, -2.178335929e-04f, -1.763942382e-04f, -1.153150651e-04f, -4.086597778e-05f, +3.841331568e-05f, +1.131509793e-04f, +1.747577616e-04f, +2.168751846e-04f, +2.363541826e-04f, +2.335744944e-04f, +2.120711910e-04f, +1.775928005e-04f, +1.368355303e-04f, +9.615170919e-05f, +6.050835000e-05f, +3.288484150e-05f, /* 0,17 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +8.692571286e-04f, +2.298859611e-03f, +4.733730172e-03f, +8.392905721e-03f, +1.337034040e-02f, +1.957872944e-02f, +2.671931830e-02f, +3.428930254e-02f, +4.163097523e-02f, +4.801743355e-02f, +5.276069593e-02f, +5.532185276e-02f, +5.540113206e-02f, +5.298916198e-02f, +4.836858555e-02f, +4.206568401e-02f, +3.476224991e-02f, +2.718605327e-02f, +2.000195696e-02f, +1.372431218e-02f, +8.665274026e-03f, +4.924822486e-03f, +2.418881849e-03f, +9.343077040e-04f, -3.145547134e-05f, -5.852748780e-05f, -9.373471177e-05f, -1.342303873e-04f, -1.751592616e-04f, -2.102289181e-04f, -2.327281357e-04f, -2.368102768e-04f, -2.187695585e-04f, -1.780112652e-04f, -1.174659045e-04f, -4.331385324e-05f, +3.595615288e-05f, +1.109738837e-04f, +1.731019841e-04f, +2.158943737e-04f, +2.360931689e-04f, +2.339700470e-04f, +2.129733054e-04f, +1.788005228e-04f, +1.381384751e-04f, +9.736790378e-05f, +6.151081921e-05f, +3.361279831e-05f, /* 0,18 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +8.378016572e-04f, +2.240332124e-03f, +4.639995460e-03f, +8.258675333e-03f, +1.319518114e-02f, +1.936850052e-02f, +2.648659017e-02f, +3.405249226e-02f, +4.141220567e-02f, +4.783942229e-02f, +5.264323003e-02f, +5.527853891e-02f, +5.543708821e-02f, +5.310013586e-02f, +4.854168753e-02f, +4.228157838e-02f, +3.499834308e-02f, +2.742002332e-02f, +2.021493027e-02f, +1.390311270e-02f, +8.803412501e-03f, +5.022190389e-03f, +2.480392668e-03f, +9.679205023e-04f, -3.075404787e-05f, -5.754920659e-05f, -9.253415281e-05f, -1.329285447e-04f, -1.739338611e-04f, -2.092891617e-04f, -2.322776351e-04f, -2.370054938e-04f, -2.196830446e-04f, -1.796086972e-04f, -1.196032629e-04f, -4.575665691e-05f, +3.349477614e-05f, +1.087840172e-04f, +1.714270575e-04f, +2.148912040e-04f, +2.358100918e-04f, +2.343469818e-04f, +2.138624717e-04f, +1.800019355e-04f, +1.394414293e-04f, +9.858906309e-05f, +6.252123589e-05f, +3.434960685e-05f, /* 0,19 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +8.070476094e-04f, +2.182782917e-03f, +4.547461308e-03f, +8.125746789e-03f, +1.302124728e-02f, +1.915921136e-02f, +2.625431253e-02f, +3.381548677e-02f, +4.119252263e-02f, +4.765981359e-02f, +5.252362676e-02f, +5.523278225e-02f, +5.547058299e-02f, +5.320891988e-02f, +4.871311459e-02f, +4.249646959e-02f, +3.523415318e-02f, +2.765437030e-02f, +2.042879274e-02f, +1.408311464e-02f, +8.942853930e-03f, +5.120779452e-03f, +2.542913904e-03f, +1.002270109e-03f, -3.006145594e-05f, -5.657909639e-05f, -9.133904628e-05f, -1.316274228e-04f, -1.727029831e-04f, -2.083372615e-04f, -2.318091276e-04f, -2.371789201e-04f, -2.205740179e-04f, -1.811863919e-04f, -1.217269082e-04f, -4.819410453e-05f, +3.102947289e-05f, +1.065816209e-04f, +1.697331367e-04f, +2.138657227e-04f, +2.355048907e-04f, +2.347051515e-04f, +2.147384913e-04f, +1.811968298e-04f, +1.407442116e-04f, +9.981506022e-05f, +6.353953899e-05f, +3.509526789e-05f, /* 0,20 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +7.769861534e-04f, +2.126203821e-03f, +4.456122261e-03f, +7.994119366e-03f, +1.284854430e-02f, +1.895087410e-02f, +2.602250340e-02f, +3.357830785e-02f, +4.097194861e-02f, +4.747862720e-02f, +5.240189986e-02f, +5.518458815e-02f, +5.550161246e-02f, +5.331550150e-02f, +4.888284773e-02f, +4.271033531e-02f, +3.546965807e-02f, +2.788907545e-02f, +2.064353123e-02f, +1.426431147e-02f, +9.083598142e-03f, +5.220594513e-03f, +2.606453443e-03f, +1.037365377e-03f, -2.937768631e-05f, -5.561720797e-05f, -9.014950911e-05f, -1.303271956e-04f, -1.714668346e-04f, -2.073734206e-04f, -2.313227709e-04f, -2.373306314e-04f, -2.214424487e-04f, -1.827442103e-04f, -1.238366106e-04f, -5.062591276e-05f, +2.856053128e-05f, +1.043669379e-04f, +1.680203798e-04f, +2.128179804e-04f, +2.351775086e-04f, +2.350444110e-04f, +2.156011663e-04f, +1.823849963e-04f, +1.420466395e-04f, +1.010457663e-04f, +6.456566540e-05f, +3.584978049e-05f, /* 0,21 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +7.476084671e-04f, +2.070586613e-03f, +4.365972752e-03f, +7.863792170e-03f, +1.267707746e-02f, +1.874350068e-02f, +2.579118063e-02f, +3.334097721e-02f, +4.075050616e-02f, +4.729588299e-02f, +5.227806324e-02f, +5.513396224e-02f, +5.553017299e-02f, +5.341986844e-02f, +4.905086811e-02f, +4.292315329e-02f, +3.570483557e-02f, +2.812411986e-02f, +2.085913240e-02f, +1.444669647e-02f, +9.225644781e-03f, +5.321640279e-03f, +2.671019108e-03f, +1.073215158e-03f, -2.870272812e-05f, -5.466359004e-05f, -8.896565621e-05f, -1.290280359e-04f, -1.702256220e-04f, -2.063978428e-04f, -2.308187252e-04f, -2.374607067e-04f, -2.222883106e-04f, -1.842820166e-04f, -1.259321426e-04f, -5.305179922e-05f, +2.608824006e-05f, +1.021402136e-04f, +1.662889481e-04f, +2.117480312e-04f, +2.348278912e-04f, +2.353646174e-04f, +2.164503001e-04f, +1.835662257e-04f, +1.433485289e-04f, +1.022810507e-04f, +6.559954993e-05f, +3.661314192e-05f, /* 0,22 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +7.189057390e-04f, +2.015923023e-03f, +4.277007096e-03f, +7.734764134e-03f, +1.250685184e-02f, +1.853710284e-02f, +2.556036191e-02f, +3.310351651e-02f, +4.052821785e-02f, +4.711160097e-02f, +5.215213110e-02f, +5.508091044e-02f, +5.555626123e-02f, +5.352200865e-02f, +4.921715706e-02f, +4.313490132e-02f, +3.593966347e-02f, +2.835948448e-02f, +2.107558270e-02f, +1.463026269e-02f, +9.368993310e-03f, +5.423921330e-03f, +2.736618658e-03f, +1.109828299e-03f, -2.803656886e-05f, -5.371828929e-05f, -8.778760047e-05f, -1.277301149e-04f, -1.689795512e-04f, -2.054107328e-04f, -2.302971523e-04f, -2.375692277e-04f, -2.231115807e-04f, -1.857996784e-04f, -1.280132790e-04f, -5.547148255e-05f, +2.361288858e-05f, +9.990169528e-05f, +1.645390058e-04f, +2.106559329e-04f, +2.344559875e-04f, +2.356656303e-04f, +2.172856968e-04f, +1.847403082e-04f, +1.446496947e-04f, +1.035207805e-04f, +6.664112530e-05f, +3.738534770e-05f, /* 0,23 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +6.908691701e-04f, +1.962204733e-03f, +4.189219495e-03f, +7.607034019e-03f, +1.233787229e-02f, +1.833169210e-02f, +2.533006476e-02f, +3.286594728e-02f, +4.030510627e-02f, +4.692580129e-02f, +5.202411782e-02f, +5.502543896e-02f, +5.557987412e-02f, +5.362191034e-02f, +4.938169606e-02f, +4.334555725e-02f, +3.617411945e-02f, +2.859515011e-02f, +2.129286839e-02f, +1.481500300e-02f, +9.513643005e-03f, +5.527442110e-03f, +2.803259783e-03f, +1.147213647e-03f, -2.737919445e-05f, -5.278135038e-05f, -8.661545276e-05f, -1.264336021e-04f, -1.677288274e-04f, -2.044122956e-04f, -2.297582162e-04f, -2.376562792e-04f, -2.239122397e-04f, -1.872970664e-04f, -1.300797972e-04f, -5.788468247e-05f, +2.113476669e-05f, +9.765163225e-05f, +1.627707202e-04f, +2.095417464e-04f, +2.340617500e-04f, +2.359473116e-04f, +2.181071619e-04f, +1.859070338e-04f, +1.459499503e-04f, +1.047648212e-04f, +6.769032218e-05f, +3.816639157e-05f, /* 0,24 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +6.634899757e-04f, +1.909423383e-03f, +4.102604043e-03f, +7.480600417e-03f, +1.217014346e-02f, +1.812727981e-02f, +2.510030654e-02f, +3.262829100e-02f, +4.008119403e-02f, +4.673850422e-02f, +5.189403803e-02f, +5.496755427e-02f, +5.560100889e-02f, +5.371956198e-02f, +4.954446678e-02f, +4.355509900e-02f, +3.640818120e-02f, +2.883109742e-02f, +2.151097556e-02f, +1.500091003e-02f, +9.659592955e-03f, +5.632206931e-03f, +2.870950105e-03f, +1.185380039e-03f, -2.673058920e-05f, -5.185281596e-05f, -8.544932188e-05f, -1.251386658e-04f, -1.664736552e-04f, -2.034027372e-04f, -2.292020825e-04f, -2.377219491e-04f, -2.246902716e-04f, -1.887740547e-04f, -1.321314770e-04f, -6.029111978e-05f, +1.865416474e-05f, +9.539027583e-05f, +1.609842617e-04f, +2.084055364e-04f, +2.336451340e-04f, +2.362095255e-04f, +2.189145021e-04f, +1.870661925e-04f, +1.472491081e-04f, +1.060130363e-04f, +6.874706913e-05f, +3.895626544e-05f, /* 0,25 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +6.367593865e-04f, +1.857570567e-03f, +4.017154721e-03f, +7.355461751e-03f, +1.200366981e-02f, +1.792387707e-02f, +2.487110446e-02f, +3.239056905e-02f, +3.985650376e-02f, +4.654973017e-02f, +5.176190655e-02f, +5.490726315e-02f, +5.561966305e-02f, +5.381495225e-02f, +4.970545104e-02f, +4.376350454e-02f, +3.664182634e-02f, +2.906730695e-02f, +2.172989006e-02f, +1.518797623e-02f, +9.806842063e-03f, +5.738219968e-03f, +2.939697175e-03f, +1.224336304e-03f, -2.609073586e-05f, -5.093272665e-05f, -8.428931461e-05f, -1.238454723e-04f, -1.652142386e-04f, -2.023822639e-04f, -2.286289191e-04f, -2.377663278e-04f, -2.254456640e-04f, -1.902305206e-04f, -1.341681007e-04f, -6.269051648e-05f, +1.617137348e-05f, +9.311787923e-05f, +1.591798037e-04f, +2.072473709e-04f, +2.332060983e-04f, +2.364521385e-04f, +2.197075250e-04f, +1.882175742e-04f, +1.485469791e-04f, +1.072652872e-04f, +6.981129264e-05f, +3.975495944e-05f, /* 0,26 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +6.106686506e-04f, +1.806637840e-03f, +3.932865406e-03f, +7.231616279e-03f, +1.183845557e-02f, +1.772149481e-02f, +2.464247554e-02f, +3.215280272e-02f, +3.963105810e-02f, +4.635949965e-02f, +5.162773845e-02f, +5.484457264e-02f, +5.563583443e-02f, +5.390807013e-02f, +4.986463085e-02f, +4.397075191e-02f, +3.687503244e-02f, +2.930375909e-02f, +2.194959758e-02f, +1.537619380e-02f, +9.955389042e-03f, +5.845485255e-03f, +3.009508467e-03f, +1.264091264e-03f, -2.545961565e-05f, -5.002112110e-05f, -8.313553567e-05f, -1.225541865e-04f, -1.639507809e-04f, -2.013510827e-04f, -2.280388952e-04f, -2.377895090e-04f, -2.261784077e-04f, -1.916663450e-04f, -1.361894531e-04f, -6.508259574e-05f, +1.368668407e-05f, +9.083469754e-05f, +1.573575226e-04f, +2.060673215e-04f, +2.327446049e-04f, +2.366750198e-04f, +2.204860398e-04f, +1.893609687e-04f, +1.498433732e-04f, +1.085214336e-04f, +7.088291709e-05f, +4.056246185e-05f, /* 0,27 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +5.852090350e-04f, +1.756616719e-03f, +3.849729871e-03f, +7.109062093e-03f, +1.167450479e-02f, +1.752014373e-02f, +2.441443664e-02f, +3.191501321e-02f, +3.940487969e-02f, +4.616783330e-02f, +5.149154900e-02f, +5.477949004e-02f, +5.564952111e-02f, +5.399890483e-02f, +5.002198837e-02f, +4.417681923e-02f, +3.710777704e-02f, +2.954043411e-02f, +2.217008362e-02f, +1.556555477e-02f, +1.010523242e-02f, +5.954006688e-03f, +3.080391384e-03f, +1.304653725e-03f, -2.483720823e-05f, -4.911803594e-05f, -8.198808773e-05f, -1.212649717e-04f, -1.626834846e-04f, -2.003094010e-04f, -2.274321824e-04f, -2.377915891e-04f, -2.268884971e-04f, -1.930814118e-04f, -1.381953216e-04f, -6.746708201e-05f, +1.120038797e-05f, +8.854098772e-05f, +1.555175978e-04f, +2.048654630e-04f, +2.322606191e-04f, +2.368780408e-04f, +2.212498566e-04f, +1.904961658e-04f, +1.511380992e-04f, +1.097813335e-04f, +7.196186479e-05f, +4.137875911e-05f, /* 0,28 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +5.603718267e-04f, +1.707498683e-03f, +3.767741783e-03f, +6.987797121e-03f, +1.151182130e-02f, +1.731983432e-02f, +2.418700446e-02f, +3.167722163e-02f, +3.917799119e-02f, +4.597475189e-02f, +5.135335367e-02f, +5.471202296e-02f, +5.566072150e-02f, +5.408744582e-02f, +5.017750597e-02f, +4.438168469e-02f, +3.734003766e-02f, +2.977731215e-02f, +2.239133348e-02f, +1.575605093e-02f, +1.025637051e-02f, +6.063788022e-03f, +3.152353249e-03f, +1.346032485e-03f, -2.422349177e-05f, -4.822350583e-05f, -8.084707136e-05f, -1.199779894e-04f, -1.614125515e-04f, -1.992574267e-04f, -2.268089534e-04f, -2.377726671e-04f, -2.275759301e-04f, -1.944756084e-04f, -1.401854962e-04f, -6.984370103e-05f, +8.712776940e-06f, +8.623700849e-05f, +1.536602113e-04f, +2.036418741e-04f, +2.317541095e-04f, +2.370610757e-04f, +2.219987871e-04f, +1.916229551e-04f, +1.524309647e-04f, +1.110448427e-04f, +7.304805597e-05f, +4.220383580e-05f, /* 0,29 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +5.361483350e-04f, +1.659275177e-03f, +3.686894711e-03f, +6.867819132e-03f, +1.135040875e-02f, +1.712057690e-02f, +2.396019551e-02f, +3.143944896e-02f, +3.895041526e-02f, +4.578027628e-02f, +5.121316818e-02f, +5.464217926e-02f, +5.566943427e-02f, +5.417368283e-02f, +5.033116618e-02f, +4.458532657e-02f, +3.757179177e-02f, +3.001437322e-02f, +2.261333227e-02f, +1.594767389e-02f, +1.040880148e-02f, +6.174832865e-03f, +3.225401305e-03f, +1.388236320e-03f, -2.361844294e-05f, -4.733756345e-05f, -7.971258511e-05f, -1.186933996e-04f, -1.601381827e-04f, -1.981953682e-04f, -2.261693833e-04f, -2.377328453e-04f, -2.282407078e-04f, -1.958488257e-04f, -1.421597696e-04f, -7.221217990e-05f, +6.224142940e-06f, +8.392302033e-05f, +1.517855485e-04f, +2.023966364e-04f, +2.312250478e-04f, +2.372240010e-04f, +2.227326442e-04f, +1.927411265e-04f, +1.537217763e-04f, +1.123118154e-04f, +7.414140875e-05f, +4.303767463e-05f, /* 0,30 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +5.125298920e-04f, +1.611937614e-03f, +3.607182126e-03f, +6.749125732e-03f, +1.119027057e-02f, +1.692238153e-02f, +2.373402612e-02f, +3.120171611e-02f, +3.872217455e-02f, +4.558442746e-02f, +5.107100841e-02f, +5.456996708e-02f, +5.567565842e-02f, +5.425760585e-02f, +5.048295173e-02f, +4.478772320e-02f, +3.780301682e-02f, +3.025159722e-02f, +2.283606491e-02f, +1.614041502e-02f, +1.056252326e-02f, +6.287144680e-03f, +3.299542714e-03f, +1.431273995e-03f, -2.302203695e-05f, -4.646023953e-05f, -7.858472543e-05f, -1.174113605e-04f, -1.588605782e-04f, -1.971234341e-04f, -2.255136482e-04f, -2.376722283e-04f, -2.288828348e-04f, -1.972009578e-04f, -1.441179370e-04f, -7.457224711e-05f, +3.734778125e-06f, +8.159928545e-05f, +1.498937974e-04f, +2.011298355e-04f, +2.306734093e-04f, +2.373666959e-04f, +2.234512424e-04f, +1.938504700e-04f, +1.550103394e-04f, +1.135821039e-04f, +7.524183918e-05f, +4.388025644e-05f, /* 0,31 (24) */ +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +4.895078551e-04f, +1.565477374e-03f, +3.528597401e-03f, +6.631714371e-03f, +1.103140999e-02f, +1.672525810e-02f, +2.350851248e-02f, +3.096404388e-02f, +3.849329172e-02f, +4.538722650e-02f, +5.092689047e-02f, +5.449539483e-02f, +5.567939320e-02f, +5.433920513e-02f, +5.063284553e-02f, +4.498885304e-02f, +3.803369023e-02f, +3.048896392e-02f, +2.305951615e-02f, +1.633426549e-02f, +1.071753360e-02f, +6.400726784e-03f, +3.374784553e-03f, +1.475154251e-03f, -2.243424753e-05f, -4.559156282e-05f, -7.746358669e-05f, -1.161320286e-04f, -1.575799374e-04f, -1.960418335e-04f, -2.248419263e-04f, -2.375909238e-04f, -2.295023193e-04f, -1.985319023e-04f, -1.460597965e-04f, -7.692363257e-05f, +1.244974771e-06f, +7.926606770e-05f, +1.479851488e-04f, +1.998415601e-04f, +2.300991725e-04f, +2.374890420e-04f, +2.241543973e-04f, +1.949507756e-04f, +1.562964586e-04f, +1.148555588e-04f, +7.634926120e-05f, +4.473156016e-05f, /* 1, 0 (24) */ +1.519885812e-03f, +3.451133814e-03f, +6.515582343e-03f, +1.087383005e-02f, +1.652921626e-02f, +2.328367055e-02f, +3.072645296e-02f, +3.826378940e-02f, +4.518869460e-02f, +5.078083067e-02f, +5.441847120e-02f, +5.568063817e-02f, +5.441847120e-02f, +5.078083067e-02f, +4.518869460e-02f, +3.826378940e-02f, +3.072645296e-02f, +2.328367055e-02f, +1.652921626e-02f, +1.087383005e-02f, +6.515582343e-03f, +3.451133814e-03f, +1.519885812e-03f, +4.670736076e-04f, -4.473156016e-05f, -7.634926120e-05f, -1.148555588e-04f, -1.562964586e-04f, -1.949507756e-04f, -2.241543973e-04f, -2.374890420e-04f, -2.300991725e-04f, -1.998415601e-04f, -1.479851488e-04f, -7.926606770e-05f, -1.244974771e-06f, +7.692363257e-05f, +1.460597965e-04f, +1.985319023e-04f, +2.295023193e-04f, +2.375909238e-04f, +2.248419263e-04f, +1.960418335e-04f, +1.575799374e-04f, +1.161320286e-04f, +7.746358669e-05f, +4.559156282e-05f, +2.243424753e-05f, -2.571886324e-03f, -4.676401683e-03f, -6.561668623e-03f, -7.164735847e-03f, -5.308059271e-03f, -9.514922051e-05f, +8.682143432e-03f, +2.028234462e-02f, +3.302709414e-02f, +4.462858385e-02f, +5.275755856e-02f, +5.568063817e-02f, +5.275755856e-02f, +4.462858385e-02f, +3.302709414e-02f, +2.028234462e-02f, +8.682143432e-03f, -9.514922051e-05f, -5.308059271e-03f, -7.164735847e-03f, -6.561668623e-03f, -4.676401683e-03f, -2.571886324e-03f, -9.379568278e-04f, +6.057711558e-05f, +6.716380176e-05f, +4.569112297e-05f, -1.252739563e-05f, -1.055379432e-04f, -2.180533719e-04f, -3.234559409e-04f, -3.906185166e-04f, -3.936511404e-04f, -3.212149006e-04f, -1.818366243e-04f, -2.908776646e-06f, +1.766603177e-04f, +3.177737361e-04f, +3.925388696e-04f, +3.917885782e-04f, +3.262924828e-04f, +2.216145512e-04f, +1.088731127e-04f, +1.495214967e-05f, -4.444991597e-05f, -6.698223140e-05f, -6.107446643e-05f, -4.042206620e-05f, /* 1, 1 (24) */ +1.475154251e-03f, +3.374784553e-03f, +6.400726784e-03f, +1.071753360e-02f, +1.633426549e-02f, +2.305951615e-02f, +3.048896392e-02f, +3.803369023e-02f, +4.498885304e-02f, +5.063284553e-02f, +5.433920513e-02f, +5.567939320e-02f, +5.449539483e-02f, +5.092689047e-02f, +4.538722650e-02f, +3.849329172e-02f, +3.096404388e-02f, +2.350851248e-02f, +1.672525810e-02f, +1.103140999e-02f, +6.631714371e-03f, +3.528597401e-03f, +1.565477374e-03f, +4.895078551e-04f, -4.388025644e-05f, -7.524183918e-05f, -1.135821039e-04f, -1.550103394e-04f, -1.938504700e-04f, -2.234512424e-04f, -2.373666959e-04f, -2.306734093e-04f, -2.011298355e-04f, -1.498937974e-04f, -8.159928545e-05f, -3.734778125e-06f, +7.457224711e-05f, +1.441179370e-04f, +1.972009578e-04f, +2.288828348e-04f, +2.376722283e-04f, +2.255136482e-04f, +1.971234341e-04f, +1.588605782e-04f, +1.174113605e-04f, +7.858472543e-05f, +4.646023953e-05f, +2.302203695e-05f, -2.511309208e-03f, -4.609237881e-03f, -6.515977501e-03f, -7.177263242e-03f, -5.413597214e-03f, -3.132025924e-04f, +8.358687491e-03f, +1.989172610e-02f, +3.263344300e-02f, +4.430736895e-02f, +5.257572193e-02f, +5.567772939e-02f, +5.293421887e-02f, +4.494635759e-02f, +3.341963301e-02f, +2.067413320e-02f, +9.008435915e-03f, +1.264653307e-04f, -5.199186158e-03f, -7.149783697e-03f, -6.606118539e-03f, -4.743383914e-03f, -2.632960791e-03f, -9.783788940e-04f, +6.006588847e-05f, +6.731755534e-05f, +4.689554782e-05f, -1.013775625e-05f, -1.022227988e-04f, -2.144856476e-04f, -3.205816252e-04f, -3.893845993e-04f, -3.946880233e-04f, -3.245890848e-04f, -1.869733261e-04f, -8.725687627e-06f, +1.714455010e-04f, +3.142661832e-04f, +3.913511592e-04f, +3.928941620e-04f, +3.290903040e-04f, +2.251682337e-04f, +1.122276266e-04f, +1.741175321e-05f, -4.317179353e-05f, -6.677245590e-05f, -6.155749209e-05f, -4.115169237e-05f, /* 1, 2 (24) */ +1.431273995e-03f, +3.299542714e-03f, +6.287144680e-03f, +1.056252326e-02f, +1.614041502e-02f, +2.283606491e-02f, +3.025159722e-02f, +3.780301682e-02f, +4.478772320e-02f, +5.048295173e-02f, +5.425760585e-02f, +5.567565842e-02f, +5.456996708e-02f, +5.107100841e-02f, +4.558442746e-02f, +3.872217455e-02f, +3.120171611e-02f, +2.373402612e-02f, +1.692238153e-02f, +1.119027057e-02f, +6.749125732e-03f, +3.607182126e-03f, +1.611937614e-03f, +5.125298920e-04f, -4.303767463e-05f, -7.414140875e-05f, -1.123118154e-04f, -1.537217763e-04f, -1.927411265e-04f, -2.227326442e-04f, -2.372240010e-04f, -2.312250478e-04f, -2.023966364e-04f, -1.517855485e-04f, -8.392302033e-05f, -6.224142940e-06f, +7.221217990e-05f, +1.421597696e-04f, +1.958488257e-04f, +2.282407078e-04f, +2.377328453e-04f, +2.261693833e-04f, +1.981953682e-04f, +1.601381827e-04f, +1.186933996e-04f, +7.971258511e-05f, +4.733756345e-05f, +2.361844294e-05f, -2.451243320e-03f, -4.541920326e-03f, -6.469081953e-03f, -7.187400998e-03f, -5.515820013e-03f, -5.276882399e-04f, +8.038105866e-03f, +1.950234150e-02f, +3.223875497e-02f, +4.398277987e-02f, +5.238874861e-02f, +5.566900371e-02f, +5.310566437e-02f, +4.526062377e-02f, +3.381098417e-02f, +2.106702736e-02f, +9.337526219e-03f, +3.516335643e-04f, -5.086958531e-03f, -7.132371944e-03f, -6.649290333e-03f, -4.810156370e-03f, -2.694518283e-03f, -1.019530586e-03f, +5.954123292e-05f, +6.744388532e-05f, +4.806333441e-05f, -7.783483193e-06f, -9.892834806e-05f, -2.109123251e-04f, -3.176704877e-04f, -3.880874633e-04f, -3.956495901e-04f, -3.278957162e-04f, -1.920693398e-04f, -1.454067187e-05f, +1.661932803e-04f, +3.106928523e-04f, +3.900879776e-04f, +3.939346603e-04f, +3.318484630e-04f, +2.287134631e-04f, +1.156007930e-04f, +1.990592754e-05f, -4.185663315e-05f, -6.653409200e-05f, -6.202574269e-05f, -4.187973832e-05f, /* 1, 3 (24) */ +1.388236320e-03f, +3.225401305e-03f, +6.174832865e-03f, +1.040880148e-02f, +1.594767389e-02f, +2.261333227e-02f, +3.001437322e-02f, +3.757179177e-02f, +4.458532657e-02f, +5.033116618e-02f, +5.417368283e-02f, +5.566943427e-02f, +5.464217926e-02f, +5.121316818e-02f, +4.578027628e-02f, +3.895041526e-02f, +3.143944896e-02f, +2.396019551e-02f, +1.712057690e-02f, +1.135040875e-02f, +6.867819132e-03f, +3.686894711e-03f, +1.659275177e-03f, +5.361483350e-04f, -4.220383580e-05f, -7.304805597e-05f, -1.110448427e-04f, -1.524309647e-04f, -1.916229551e-04f, -2.219987871e-04f, -2.370610757e-04f, -2.317541095e-04f, -2.036418741e-04f, -1.536602113e-04f, -8.623700849e-05f, -8.712776940e-06f, +6.984370103e-05f, +1.401854962e-04f, +1.944756084e-04f, +2.275759301e-04f, +2.377726671e-04f, +2.268089534e-04f, +1.992574267e-04f, +1.614125515e-04f, +1.199779894e-04f, +8.084707136e-05f, +4.822350583e-05f, +2.422349177e-05f, -2.391702087e-03f, -4.474476440e-03f, -6.421018618e-03f, -7.195184482e-03f, -5.614748361e-03f, -7.386005651e-04f, +7.720435378e-03f, +1.911425404e-02f, +3.184310538e-02f, +4.365488415e-02f, +5.219667927e-02f, +5.565446303e-02f, +5.327185765e-02f, +4.557131662e-02f, +3.420107214e-02f, +2.146096202e-02f, +9.669374682e-03f, +5.803470275e-04f, -4.971357738e-03f, -7.112466016e-03f, -6.691146966e-03f, -4.876690462e-03f, -2.756544025e-03f, -1.061410325e-03f, +5.900359551e-05f, +6.754318962e-05f, +4.919463712e-05f, -5.464814636e-06f, -9.565524824e-05f, -2.073343464e-04f, -3.147234851e-04f, -3.867277599e-04f, -3.965359323e-04f, -3.311342413e-04f, -1.971235943e-04f, -2.035244551e-05f, +1.609047730e-04f, +3.070543729e-04f, +3.887493134e-04f, +3.949094806e-04f, +3.345660239e-04f, +2.322492790e-04f, +1.189919086e-04f, +2.243438042e-05f, -4.050432324e-05f, -6.626676172e-05f, -6.247876761e-05f, -4.260584945e-05f, /* 1, 4 (24) */ +1.346032485e-03f, +3.152353249e-03f, +6.063788022e-03f, +1.025637051e-02f, +1.575605093e-02f, +2.239133348e-02f, +2.977731215e-02f, +3.734003766e-02f, +4.438168469e-02f, +5.017750597e-02f, +5.408744582e-02f, +5.566072150e-02f, +5.471202296e-02f, +5.135335367e-02f, +4.597475189e-02f, +3.917799119e-02f, +3.167722163e-02f, +2.418700446e-02f, +1.731983432e-02f, +1.151182130e-02f, +6.987797121e-03f, +3.767741783e-03f, +1.707498683e-03f, +5.603718267e-04f, -4.137875911e-05f, -7.196186479e-05f, -1.097813335e-04f, -1.511380992e-04f, -1.904961658e-04f, -2.212498566e-04f, -2.368780408e-04f, -2.322606191e-04f, -2.048654630e-04f, -1.555175978e-04f, -8.854098772e-05f, -1.120038797e-05f, +6.746708201e-05f, +1.381953216e-04f, +1.930814118e-04f, +2.268884971e-04f, +2.377915891e-04f, +2.274321824e-04f, +2.003094010e-04f, +1.626834846e-04f, +1.212649717e-04f, +8.198808773e-05f, +4.911803594e-05f, +2.483720823e-05f, -2.332698492e-03f, -4.406933251e-03f, -6.371823981e-03f, -7.200649296e-03f, -5.710403609e-03f, -9.459349115e-04f, +7.405711893e-03f, +1.872752628e-02f, +3.144656945e-02f, +4.332374991e-02f, +5.199955567e-02f, +5.563411059e-02f, +5.343276243e-02f, +4.587837100e-02f, +3.458982146e-02f, +2.185587150e-02f, +1.000394071e-02f, +8.125963065e-04f, -4.852365830e-03f, -7.090031636e-03f, -6.731651289e-03f, -4.942957224e-03f, -2.819022793e-03f, -1.104016174e-03f, +5.845342137e-05f, +6.761587059e-05f, +5.028962066e-05f, -3.181975286e-06f, -9.240414446e-05f, -2.037526479e-04f, -3.117415784e-04f, -3.853061542e-04f, -3.973471616e-04f, -3.343041262e-04f, -2.021350307e-04f, -2.615972566e-05f, +1.555811067e-04f, +3.033513931e-04f, +3.873351753e-04f, +3.958180458e-04f, +3.372420571e-04f, +2.357747169e-04f, +1.224002588e-04f, +2.499680603e-05f, -3.911476326e-05f, -6.597009251e-05f, -6.291611563e-05f, -4.332966631e-05f, /* 1, 5 (24) */ +1.304653725e-03f, +3.080391384e-03f, +5.954006688e-03f, +1.010523242e-02f, +1.556555477e-02f, +2.217008362e-02f, +2.954043411e-02f, +3.710777704e-02f, +4.417681923e-02f, +5.002198837e-02f, +5.399890483e-02f, +5.564952111e-02f, +5.477949004e-02f, +5.149154900e-02f, +4.616783330e-02f, +3.940487969e-02f, +3.191501321e-02f, +2.441443664e-02f, +1.752014373e-02f, +1.167450479e-02f, +7.109062093e-03f, +3.849729871e-03f, +1.756616719e-03f, +5.852090350e-04f, -4.056246185e-05f, -7.088291709e-05f, -1.085214336e-04f, -1.498433732e-04f, -1.893609687e-04f, -2.204860398e-04f, -2.366750198e-04f, -2.327446049e-04f, -2.060673215e-04f, -1.573575226e-04f, -9.083469754e-05f, -1.368668407e-05f, +6.508259574e-05f, +1.361894531e-04f, +1.916663450e-04f, +2.261784077e-04f, +2.377895090e-04f, +2.280388952e-04f, +2.013510827e-04f, +1.639507809e-04f, +1.225541865e-04f, +8.313553567e-05f, +5.002112110e-05f, +2.545961565e-05f, -2.274245070e-03f, -4.339317380e-03f, -6.321534361e-03f, -7.203831272e-03f, -5.802807753e-03f, -1.149687559e-03f, +7.093970315e-03f, +1.834222013e-02f, +3.104922229e-02f, +4.298944578e-02f, +5.179742064e-02f, +5.560795086e-02f, +5.358834353e-02f, +4.618172239e-02f, +3.497715663e-02f, +2.225168955e-02f, +1.034118276e-02f, +1.048371023e-03f, -4.729965571e-03f, -7.065034830e-03f, -6.770766053e-03f, -5.008927316e-03f, -2.881938909e-03f, -1.147345840e-03f, +5.789115407e-05f, +6.766233489e-05f, +5.134845990e-05f, -9.351764323e-07f, -8.917566987e-05f, -2.001681605e-04f, -3.087257329e-04f, -3.838233252e-04f, -3.980834092e-04f, -3.374048561e-04f, -2.071026027e-04f, -3.196123075e-05f, +1.502234199e-04f, +2.995845792e-04f, +3.858455924e-04f, +3.966597940e-04f, +3.398756389e-04f, +2.392888085e-04f, +1.258251183e-04f, +2.759288502e-05f, -3.768786388e-05f, -6.564371751e-05f, -6.333733508e-05f, -4.405082471e-05f, /* 1, 6 (24) */ +1.264091264e-03f, +3.009508467e-03f, +5.845485255e-03f, +9.955389042e-03f, +1.537619380e-02f, +2.194959758e-02f, +2.930375909e-02f, +3.687503244e-02f, +4.397075191e-02f, +4.986463085e-02f, +5.390807013e-02f, +5.563583443e-02f, +5.484457264e-02f, +5.162773845e-02f, +4.635949965e-02f, +3.963105810e-02f, +3.215280272e-02f, +2.464247554e-02f, +1.772149481e-02f, +1.183845557e-02f, +7.231616279e-03f, +3.932865406e-03f, +1.806637840e-03f, +6.106686506e-04f, -3.975495944e-05f, -6.981129264e-05f, -1.072652872e-04f, -1.485469791e-04f, -1.882175742e-04f, -2.197075250e-04f, -2.364521385e-04f, -2.332060983e-04f, -2.072473709e-04f, -1.591798037e-04f, -9.311787923e-05f, -1.617137348e-05f, +6.269051648e-05f, +1.341681007e-04f, +1.902305206e-04f, +2.254456640e-04f, +2.377663278e-04f, +2.286289191e-04f, +2.023822639e-04f, +1.652142386e-04f, +1.238454723e-04f, +8.428931461e-05f, +5.093272665e-05f, +2.609073586e-05f, -2.216353916e-03f, -4.271655045e-03f, -6.270185901e-03f, -7.204766448e-03f, -5.891983423e-03f, -1.349855720e-03f, +6.785244582e-03f, +1.795839680e-02f, +3.065113888e-02f, +4.265204093e-02f, +5.159031804e-02f, +5.557598963e-02f, +5.373856695e-02f, +4.648130697e-02f, +3.536300222e-02f, +2.264834934e-02f, +1.068105840e-02f, +1.287659832e-03f, -4.604140453e-03f, -7.037441945e-03f, -6.808453917e-03f, -5.074571034e-03f, -2.945276244e-03f, -1.191396665e-03f, +5.731723542e-05f, +6.768299327e-05f, +5.237133972e-05f, +1.275384025e-06f, -8.597044546e-05f, -1.965818092e-04f, -3.056769175e-04f, -3.822799655e-04f, -3.987448259e-04f, -3.404359360e-04f, -2.120252768e-04f, -3.775568092e-05f, +1.448328608e-04f, +2.957546163e-04f, +3.842806141e-04f, +3.974341794e-04f, +3.424658527e-04f, +2.427905823e-04f, +1.292657505e-04f, +3.022228446e-05f, -3.622354707e-05f, -6.528727571e-05f, -6.374197407e-05f, -4.476895583e-05f, /* 1, 7 (24) */ +1.224336304e-03f, +2.939697175e-03f, +5.738219968e-03f, +9.806842063e-03f, +1.518797623e-02f, +2.172989006e-02f, +2.906730695e-02f, +3.664182634e-02f, +4.376350454e-02f, +4.970545104e-02f, +5.381495225e-02f, +5.561966305e-02f, +5.490726315e-02f, +5.176190655e-02f, +4.654973017e-02f, +3.985650376e-02f, +3.239056905e-02f, +2.487110446e-02f, +1.792387707e-02f, +1.200366981e-02f, +7.355461751e-03f, +4.017154721e-03f, +1.857570567e-03f, +6.367593865e-04f, -3.895626544e-05f, -6.874706913e-05f, -1.060130363e-04f, -1.472491081e-04f, -1.870661925e-04f, -2.189145021e-04f, -2.362095255e-04f, -2.336451340e-04f, -2.084055364e-04f, -1.609842617e-04f, -9.539027583e-05f, -1.865416474e-05f, +6.029111978e-05f, +1.321314770e-04f, +1.887740547e-04f, +2.246902716e-04f, +2.377219491e-04f, +2.292020825e-04f, +2.034027372e-04f, +1.664736552e-04f, +1.251386658e-04f, +8.544932188e-05f, +5.185281596e-05f, +2.673058920e-05f, -2.159036681e-03f, -4.203972052e-03f, -6.217814561e-03f, -7.203491064e-03f, -5.977953869e-03f, -1.546437529e-03f, +6.479567664e-03f, +1.757611683e-02f, +3.025239405e-02f, +4.231160499e-02f, +5.137829276e-02f, +5.553823395e-02f, +5.388339982e-02f, +4.677706159e-02f, +3.574728284e-02f, +2.304578352e-02f, +1.102352425e-02f, +1.530450414e-03f, -4.474874702e-03f, -7.007219660e-03f, -6.844677464e-03f, -5.139858309e-03f, -3.009018218e-03f, -1.236165621e-03f, +5.673210536e-05f, +6.767826036e-05f, +5.335845485e-05f, +3.449521528e-06f, -8.278907995e-05f, -1.929945127e-04f, -3.025961045e-04f, -3.806767808e-04f, -3.993315822e-04f, -3.433968906e-04f, -2.169020328e-04f, -4.354179844e-05f, +1.394105874e-04f, +2.918622071e-04f, +3.826403100e-04f, +3.981406720e-04f, +3.450117886e-04f, +2.462790636e-04f, +1.327214084e-04f, +3.288465786e-05f, -3.472174628e-05f, -6.490041214e-05f, -6.412958061e-05f, -4.548368629e-05f, /* 1, 8 (24) */ +1.185380039e-03f, +2.870950105e-03f, +5.632206931e-03f, +9.659592955e-03f, +1.500091003e-02f, +2.151097556e-02f, +2.883109742e-02f, +3.640818120e-02f, +4.355509900e-02f, +4.954446678e-02f, +5.371956198e-02f, +5.560100889e-02f, +5.496755427e-02f, +5.189403803e-02f, +4.673850422e-02f, +4.008119403e-02f, +3.262829100e-02f, +2.510030654e-02f, +1.812727981e-02f, +1.217014346e-02f, +7.480600417e-03f, +4.102604043e-03f, +1.909423383e-03f, +6.634899757e-04f, -3.816639157e-05f, -6.769032218e-05f, -1.047648212e-04f, -1.459499503e-04f, -1.859070338e-04f, -2.181071619e-04f, -2.359473116e-04f, -2.340617500e-04f, -2.095417464e-04f, -1.627707202e-04f, -9.765163225e-05f, -2.113476669e-05f, +5.788468247e-05f, +1.300797972e-04f, +1.872970664e-04f, +2.239122397e-04f, +2.376562792e-04f, +2.297582162e-04f, +2.044122956e-04f, +1.677288274e-04f, +1.264336021e-04f, +8.661545276e-05f, +5.278135038e-05f, +2.737919445e-05f, -2.102304575e-03f, -4.136293792e-03f, -6.164456106e-03f, -7.200041542e-03f, -6.060742949e-03f, -1.739432042e-03f, +6.176971560e-03f, +1.719544005e-02f, +2.985306247e-02f, +4.196820810e-02f, +5.116139073e-02f, +5.549469215e-02f, +5.402281040e-02f, +4.706892379e-02f, +3.612992315e-02f, +2.344392419e-02f, +1.136853604e-02f, +1.776729478e-03f, -4.342153294e-03f, -6.974335002e-03f, -6.879399210e-03f, -5.204758722e-03f, -3.073147798e-03f, -1.281649307e-03f, +5.613620176e-05f, +6.764855447e-05f, +5.431000971e-05f, +5.587064814e-06f, -7.963216967e-05f, -1.894071836e-04f, -2.994842696e-04f, -3.790144899e-04f, -3.998438681e-04f, -3.462872642e-04f, -2.217318639e-04f, -4.931830803e-05f, +1.339577671e-04f, +2.879080727e-04f, +3.809247703e-04f, +3.987787580e-04f, +3.475125441e-04f, +2.497532750e-04f, +1.361913343e-04f, +3.557964519e-05f, -3.318240655e-05f, -6.448277808e-05f, -6.449970283e-05f, -4.619463825e-05f, /* 1, 9 (24) */ +1.147213647e-03f, +2.803259783e-03f, +5.527442110e-03f, +9.513643005e-03f, +1.481500300e-02f, +2.129286839e-02f, +2.859515011e-02f, +3.617411945e-02f, +4.334555725e-02f, +4.938169606e-02f, +5.362191034e-02f, +5.557987412e-02f, +5.502543896e-02f, +5.202411782e-02f, +4.692580129e-02f, +4.030510627e-02f, +3.286594728e-02f, +2.533006476e-02f, +1.833169210e-02f, +1.233787229e-02f, +7.607034019e-03f, +4.189219495e-03f, +1.962204733e-03f, +6.908691701e-04f, -3.738534770e-05f, -6.664112530e-05f, -1.035207805e-04f, -1.446496947e-04f, -1.847403082e-04f, -2.172856968e-04f, -2.356656303e-04f, -2.344559875e-04f, -2.106559329e-04f, -1.645390058e-04f, -9.990169528e-05f, -2.361288858e-05f, +5.547148255e-05f, +1.280132790e-04f, +1.857996784e-04f, +2.231115807e-04f, +2.375692277e-04f, +2.302971523e-04f, +2.054107328e-04f, +1.689795512e-04f, +1.277301149e-04f, +8.778760047e-05f, +5.371828929e-05f, +2.803656886e-05f, -2.046168374e-03f, -4.068645237e-03f, -6.110146096e-03f, -7.194454478e-03f, -6.140375118e-03f, -1.928839225e-03f, +5.877487290e-03f, +1.681642556e-02f, +2.945321860e-02f, +4.162192084e-02f, +5.093965886e-02f, +5.544537384e-02f, +5.415676817e-02f, +4.735683186e-02f, +3.651084792e-02f, +2.384270295e-02f, +1.171604859e-02f, +2.026482753e-03f, -4.205961960e-03f, -6.938755357e-03f, -6.912581616e-03f, -5.269241500e-03f, -3.137647501e-03f, -1.327843946e-03f, +5.552996031e-05f, +6.759429744e-05f, +5.522621826e-05f, +7.687855865e-06f, -7.650029847e-05f, -1.858207276e-04f, -2.963423910e-04f, -3.772938242e-04f, -4.002818927e-04f, -3.491066211e-04f, -2.265137770e-04f, -5.508393727e-05f, +1.284755764e-04f, +2.838929516e-04f, +3.791341056e-04f, +3.993479400e-04f, +3.499672243e-04f, +2.532122364e-04f, +1.396747604e-04f, +3.830687289e-05f, -3.160548461e-05f, -6.403403126e-05f, -6.485188912e-05f, -4.690142952e-05f, /* 1,10 (24) */ +1.109828299e-03f, +2.736618658e-03f, +5.423921330e-03f, +9.368993310e-03f, +1.463026269e-02f, +2.107558270e-02f, +2.835948448e-02f, +3.593966347e-02f, +4.313490132e-02f, +4.921715706e-02f, +5.352200865e-02f, +5.555626123e-02f, +5.508091044e-02f, +5.215213110e-02f, +4.711160097e-02f, +4.052821785e-02f, +3.310351651e-02f, +2.556036191e-02f, +1.853710284e-02f, +1.250685184e-02f, +7.734764134e-03f, +4.277007096e-03f, +2.015923023e-03f, +7.189057390e-04f, -3.661314192e-05f, -6.559954993e-05f, -1.022810507e-04f, -1.433485289e-04f, -1.835662257e-04f, -2.164503001e-04f, -2.353646174e-04f, -2.348278912e-04f, -2.117480312e-04f, -1.662889481e-04f, -1.021402136e-04f, -2.608824006e-05f, +5.305179922e-05f, +1.259321426e-04f, +1.842820166e-04f, +2.222883106e-04f, +2.374607067e-04f, +2.308187252e-04f, +2.063978428e-04f, +1.702256220e-04f, +1.290280359e-04f, +8.896565621e-05f, +5.466359004e-05f, +2.870272812e-05f, -1.990638413e-03f, -4.001050940e-03f, -6.054919878e-03f, -7.186766622e-03f, -6.216875417e-03f, -2.114659953e-03f, +5.581144899e-03f, +1.643913174e-02f, +2.905293671e-02f, +4.127281421e-02f, +5.071314509e-02f, +5.539028991e-02f, +5.428524375e-02f, +4.764072482e-02f, +3.688998202e-02f, +2.424205089e-02f, +1.206601581e-02f, +2.279694989e-03f, -4.066287199e-03f, -6.900448484e-03f, -6.944187101e-03f, -5.333275531e-03f, -3.202499390e-03f, -1.374745375e-03f, +5.491381433e-05f, +6.751591438e-05f, +5.610730378e-05f, +9.751749846e-06f, -7.339403759e-05f, -1.822360436e-04f, -2.931714495e-04f, -3.755155275e-04f, -4.006458844e-04f, -3.518545456e-04f, -2.312467930e-04f, -6.083741698e-05f, +1.229652003e-04f, +2.798176001e-04f, +3.772684468e-04f, +3.998477374e-04f, +3.523749422e-04f, +2.566549656e-04f, +1.431709084e-04f, +4.106595391e-05f, -2.999094905e-05f, -6.355383603e-05f, -6.518568834e-05f, -4.760367367e-05f, /* 1,11 (24) */ +1.073215158e-03f, +2.671019108e-03f, +5.321640279e-03f, +9.225644781e-03f, +1.444669647e-02f, +2.085913240e-02f, +2.812411986e-02f, +3.570483557e-02f, +4.292315329e-02f, +4.905086811e-02f, +5.341986844e-02f, +5.553017299e-02f, +5.513396224e-02f, +5.227806324e-02f, +4.729588299e-02f, +4.075050616e-02f, +3.334097721e-02f, +2.579118063e-02f, +1.874350068e-02f, +1.267707746e-02f, +7.863792170e-03f, +4.365972752e-03f, +2.070586613e-03f, +7.476084671e-04f, -3.584978049e-05f, -6.456566540e-05f, -1.010457663e-04f, -1.420466395e-04f, -1.823849963e-04f, -2.156011663e-04f, -2.350444110e-04f, -2.351775086e-04f, -2.128179804e-04f, -1.680203798e-04f, -1.043669379e-04f, -2.856053128e-05f, +5.062591276e-05f, +1.238366106e-04f, +1.827442103e-04f, +2.214424487e-04f, +2.373306314e-04f, +2.313227709e-04f, +2.073734206e-04f, +1.714668346e-04f, +1.303271956e-04f, +9.014950911e-05f, +5.561720797e-05f, +2.937768631e-05f, -1.935724599e-03f, -3.933535025e-03f, -5.998812574e-03f, -7.177014872e-03f, -6.290269454e-03f, -2.296895997e-03f, +5.287973450e-03f, +1.606361621e-02f, +2.865229083e-02f, +4.092095967e-02f, +5.048189829e-02f, +5.532945249e-02f, +5.440820895e-02f, +4.792054242e-02f, +3.726725047e-02f, +2.464189863e-02f, +1.241839075e-02f, +2.536349955e-03f, -3.923116291e-03f, -6.859382530e-03f, -6.974178050e-03f, -5.396829367e-03f, -3.267685079e-03f, -1.422349049e-03f, +5.428819468e-05f, +6.741383353e-05f, +5.695349877e-05f, +1.177861505e-05f, -7.031394560e-05f, -1.786540232e-04f, -2.899724281e-04f, -3.736803560e-04f, -4.009360908e-04f, -3.545306419e-04f, -2.359299473e-04f, -6.657748159e-05f, +1.174278323e-04f, +2.756827919e-04f, +3.753279455e-04f, +4.002776863e-04f, +3.547348191e-04f, +2.600804786e-04f, +1.466789902e-04f, +4.385648766e-05f, -2.833878040e-05f, -6.304186356e-05f, -6.550064997e-05f, -4.830098012e-05f, /* 1,12 (24) */ +1.037365377e-03f, +2.606453443e-03f, +5.220594513e-03f, +9.083598142e-03f, +1.426431147e-02f, +2.064353123e-02f, +2.788907545e-02f, +3.546965807e-02f, +4.271033531e-02f, +4.888284773e-02f, +5.331550150e-02f, +5.550161246e-02f, +5.518458815e-02f, +5.240189986e-02f, +4.747862720e-02f, +4.097194861e-02f, +3.357830785e-02f, +2.602250340e-02f, +1.895087410e-02f, +1.284854430e-02f, +7.994119366e-03f, +4.456122261e-03f, +2.126203821e-03f, +7.769861534e-04f, -3.509526789e-05f, -6.353953899e-05f, -9.981506022e-05f, -1.407442116e-04f, -1.811968298e-04f, -2.147384913e-04f, -2.347051515e-04f, -2.355048907e-04f, -2.138657227e-04f, -1.697331367e-04f, -1.065816209e-04f, -3.102947289e-05f, +4.819410453e-05f, +1.217269082e-04f, +1.811863919e-04f, +2.205740179e-04f, +2.371789201e-04f, +2.318091276e-04f, +2.083372615e-04f, +1.727029831e-04f, +1.316274228e-04f, +9.133904628e-05f, +5.657909639e-05f, +3.006145594e-05f, -1.881436404e-03f, -3.866121192e-03f, -5.941859076e-03f, -7.165236257e-03f, -6.360583400e-03f, -2.475550020e-03f, +4.998001022e-03f, +1.568993586e-02f, +2.825135474e-02f, +4.056642903e-02f, +5.024596835e-02f, +5.526287501e-02f, +5.452563678e-02f, +4.819622521e-02f, +3.764257842e-02f, +2.504217631e-02f, +1.277312557e-02f, +2.796430433e-03f, -3.776437301e-03f, -6.815526043e-03f, -7.002516830e-03f, -5.459871231e-03f, -3.333185729e-03f, -1.470650029e-03f, +5.365352956e-05f, +6.728848602e-05f, +5.776504473e-05f, +1.376833283e-05f, -6.726056827e-05f, -1.750755508e-04f, -2.867463115e-04f, -3.717890774e-04f, -4.011527782e-04f, -3.571345343e-04f, -2.405622897e-04f, -7.230286952e-05f, +1.118646739e-04f, +2.714893178e-04f, +3.733127737e-04f, +4.006373398e-04f, +3.570459849e-04f, +2.634877895e-04f, +1.501982080e-04f, +4.667806016e-05f, -2.664897123e-05f, -6.249779202e-05f, -6.579632434e-05f, -4.899295427e-05f, /* 1,13 (24) */ +1.002270109e-03f, +2.542913904e-03f, +5.120779452e-03f, +8.942853930e-03f, +1.408311464e-02f, +2.042879274e-02f, +2.765437030e-02f, +3.523415318e-02f, +4.249646959e-02f, +4.871311459e-02f, +5.320891988e-02f, +5.547058299e-02f, +5.523278225e-02f, +5.252362676e-02f, +4.765981359e-02f, +4.119252263e-02f, +3.381548677e-02f, +2.625431253e-02f, +1.915921136e-02f, +1.302124728e-02f, +8.125746789e-03f, +4.547461308e-03f, +2.182782917e-03f, +8.070476094e-04f, -3.434960685e-05f, -6.252123589e-05f, -9.858906309e-05f, -1.394414293e-04f, -1.800019355e-04f, -2.138624717e-04f, -2.343469818e-04f, -2.358100918e-04f, -2.148912040e-04f, -1.714270575e-04f, -1.087840172e-04f, -3.349477614e-05f, +4.575665691e-05f, +1.196032629e-04f, +1.796086972e-04f, +2.196830446e-04f, +2.370054938e-04f, +2.322776351e-04f, +2.092891617e-04f, +1.739338611e-04f, +1.329285447e-04f, +9.253415281e-05f, +5.754920659e-05f, +3.075404787e-05f, -1.827782875e-03f, -3.798832706e-03f, -5.884094031e-03f, -7.151467924e-03f, -6.427843968e-03f, -2.650625571e-03f, +4.711254710e-03f, +1.531814678e-02f, +2.785020196e-02f, +4.020929449e-02f, +5.000540606e-02f, +5.519057214e-02f, +5.463750145e-02f, +4.846771453e-02f, +3.801589119e-02f, +2.544281365e-02f, +1.313017156e-02f, +3.059918223e-03f, -3.626239093e-03f, -6.768847983e-03f, -7.029165802e-03f, -5.522369023e-03f, -3.398982053e-03f, -1.519642983e-03f, +5.301024443e-05f, +6.714030571e-05f, +5.854219200e-05f, +1.572079753e-05f, -6.423443851e-05f, -1.715015031e-04f, -2.834940860e-04f, -3.698424711e-04f, -4.012962317e-04f, -3.596658675e-04f, -2.451428848e-04f, -7.801232354e-05f, +1.062769342e-04f, +2.672379855e-04f, +3.712231236e-04f, +4.009262684e-04f, +3.593075781e-04f, +2.668759114e-04f, +1.537277542e-04f, +4.953024396e-05f, -2.492152632e-05f, -6.192130682e-05f, -6.607226275e-05f, -4.967919760e-05f, /* 1,14 (24) */ +9.679205023e-04f, +2.480392668e-03f, +5.022190389e-03f, +8.803412501e-03f, +1.390311270e-02f, +2.021493027e-02f, +2.742002332e-02f, +3.499834308e-02f, +4.228157838e-02f, +4.854168753e-02f, +5.310013586e-02f, +5.543708821e-02f, +5.527853891e-02f, +5.264323003e-02f, +4.783942229e-02f, +4.141220567e-02f, +3.405249226e-02f, +2.648659017e-02f, +1.936850052e-02f, +1.319518114e-02f, +8.258675333e-03f, +4.639995460e-03f, +2.240332124e-03f, +8.378016572e-04f, -3.361279831e-05f, -6.151081921e-05f, -9.736790378e-05f, -1.381384751e-04f, -1.788005228e-04f, -2.129733054e-04f, -2.339700470e-04f, -2.360931689e-04f, -2.158943737e-04f, -1.731019841e-04f, -1.109738837e-04f, -3.595615288e-05f, +4.331385324e-05f, +1.174659045e-04f, +1.780112652e-04f, +2.187695585e-04f, +2.368102768e-04f, +2.327281357e-04f, +2.102289181e-04f, +1.751592616e-04f, +1.342303873e-04f, +9.373471177e-05f, +5.852748780e-05f, +3.145547134e-05f, -1.774772630e-03f, -3.731692400e-03f, -5.825551839e-03f, -7.135747127e-03f, -6.492078407e-03f, -2.822127074e-03f, +4.427760624e-03f, +1.494830431e-02f, +2.744890573e-02f, +3.984962863e-02f, +4.976026317e-02f, +5.511255982e-02f, +5.474377839e-02f, +4.873495251e-02f, +3.838711431e-02f, +2.584373992e-02f, +1.348947914e-02f, +3.326794134e-03f, -3.472511338e-03f, -6.719317739e-03f, -7.054087328e-03f, -5.584290329e-03f, -3.465054316e-03f, -1.569322181e-03f, +5.235876180e-05f, +6.696972897e-05f, +5.928519960e-05f, +1.763591641e-05f, -6.123607625e-05f, -1.679327488e-04f, -2.802167391e-04f, -3.678413279e-04f, -4.013667552e-04f, -3.621243063e-04f, -2.496708124e-04f, -8.370459117e-05f, +1.006658295e-04f, +2.629296196e-04f, +3.690592083e-04f, +4.011440598e-04f, +3.615187468e-04f, +2.702438562e-04f, +1.572668119e-04f, +5.241259825e-05f, -2.315646270e-05f, -6.131210073e-05f, -6.632801773e-05f, -5.035930779e-05f, /* 1,15 (24) */ +9.343077040e-04f, +2.418881849e-03f, +4.924822486e-03f, +8.665274026e-03f, +1.372431218e-02f, +2.000195696e-02f, +2.718605327e-02f, +3.476224991e-02f, +4.206568401e-02f, +4.836858555e-02f, +5.298916198e-02f, +5.540113206e-02f, +5.532185276e-02f, +5.276069593e-02f, +4.801743355e-02f, +4.163097523e-02f, +3.428930254e-02f, +2.671931830e-02f, +1.957872944e-02f, +1.337034040e-02f, +8.392905721e-03f, +4.733730172e-03f, +2.298859611e-03f, +8.692571286e-04f, -3.288484150e-05f, -6.050835000e-05f, -9.615170919e-05f, -1.368355303e-04f, -1.775928005e-04f, -2.120711910e-04f, -2.335744944e-04f, -2.363541826e-04f, -2.168751846e-04f, -1.747577616e-04f, -1.131509793e-04f, -3.841331568e-05f, +4.086597778e-05f, +1.153150651e-04f, +1.763942382e-04f, +2.178335929e-04f, +2.365931963e-04f, +2.331604734e-04f, +2.111563284e-04f, +1.763789774e-04f, +1.355327749e-04f, +9.494060420e-05f, +5.951388722e-05f, +3.216573391e-05f, -1.722413869e-03f, -3.664722671e-03f, -5.766266639e-03f, -7.118111210e-03f, -6.553314483e-03f, -2.990059823e-03f, +4.147543885e-03f, +1.458046298e-02f, +2.704753897e-02f, +3.948750432e-02f, +4.951059236e-02f, +5.502885522e-02f, +5.484444422e-02f, +4.899788213e-02f, +3.875617352e-02f, +2.624488398e-02f, +1.385099788e-02f, +3.597037991e-03f, -3.315244526e-03f, -6.666905140e-03f, -7.077243791e-03f, -5.645602430e-03f, -3.531382333e-03f, -1.619681489e-03f, +5.169950117e-05f, +6.677719450e-05f, +5.999433503e-05f, +1.951360955e-05f, -5.826598844e-05f, -1.643701487e-04f, -2.769152592e-04f, -3.657864495e-04f, -4.013646710e-04f, -3.645095356e-04f, -2.541451677e-04f, -8.937842500e-05f, +9.503258313e-05f, +2.585650612e-04f, +3.668212610e-04f, +4.012903196e-04f, +3.636786482e-04f, +2.735906352e-04f, +1.608145551e-04f, +5.532466888e-05f, -2.135380981e-05f, -6.066987409e-05f, -6.656314316e-05f, -5.103287883e-05f, /* 1,16 (24) */ +9.014228625e-04f, +2.358373499e-03f, +4.828670776e-03f, +8.528438495e-03f, +1.354671938e-02f, +1.978988577e-02f, +2.695247878e-02f, +3.452589573e-02f, +4.184880882e-02f, +4.819382779e-02f, +5.287601100e-02f, +5.536271874e-02f, +5.536271874e-02f, +5.287601100e-02f, +4.819382779e-02f, +4.184880882e-02f, +3.452589573e-02f, +2.695247878e-02f, +1.978988577e-02f, +1.354671938e-02f, +8.528438495e-03f, +4.828670776e-03f, +2.358373499e-03f, +9.014228625e-04f, -3.216573391e-05f, -5.951388722e-05f, -9.494060420e-05f, -1.355327749e-04f, -1.763789774e-04f, -2.111563284e-04f, -2.331604734e-04f, -2.365931963e-04f, -2.178335929e-04f, -1.763942382e-04f, -1.153150651e-04f, -4.086597778e-05f, +3.841331568e-05f, +1.131509793e-04f, +1.747577616e-04f, +2.168751846e-04f, +2.363541826e-04f, +2.335744944e-04f, +2.120711910e-04f, +1.775928005e-04f, +1.368355303e-04f, +9.615170919e-05f, +6.050835000e-05f, +3.288484150e-05f, -1.670714367e-03f, -3.597945477e-03f, -5.706272304e-03f, -7.098597601e-03f, -6.611580471e-03f, -3.154429971e-03f, +3.870628626e-03f, +1.421467653e-02f, +2.664617430e-02f, +3.912299478e-02f, +4.925644719e-02f, +5.493947680e-02f, +5.493947680e-02f, +4.925644719e-02f, +3.912299478e-02f, +2.664617430e-02f, +1.421467653e-02f, +3.870628626e-03f, -3.154429971e-03f, -6.611580471e-03f, -7.098597601e-03f, -5.706272304e-03f, -3.597945477e-03f, -1.670714367e-03f, +5.103287883e-05f, +6.656314316e-05f, +6.066987409e-05f, +2.135380981e-05f, -5.532466888e-05f, -1.608145551e-04f, -2.735906352e-04f, -3.636786482e-04f, -4.012903196e-04f, -3.668212610e-04f, -2.585650612e-04f, -9.503258313e-05f, +8.937842500e-05f, +2.541451677e-04f, +3.645095356e-04f, +4.013646710e-04f, +3.657864495e-04f, +2.769152592e-04f, +1.643701487e-04f, +5.826598844e-05f, -1.951360955e-05f, -5.999433503e-05f, -6.677719450e-05f, -5.169950117e-05f, /* 1,17 (24) */ +8.692571286e-04f, +2.298859611e-03f, +4.733730172e-03f, +8.392905721e-03f, +1.337034040e-02f, +1.957872944e-02f, +2.671931830e-02f, +3.428930254e-02f, +4.163097523e-02f, +4.801743355e-02f, +5.276069593e-02f, +5.532185276e-02f, +5.540113206e-02f, +5.298916198e-02f, +4.836858555e-02f, +4.206568401e-02f, +3.476224991e-02f, +2.718605327e-02f, +2.000195696e-02f, +1.372431218e-02f, +8.665274026e-03f, +4.924822486e-03f, +2.418881849e-03f, +9.343077040e-04f, -3.145547134e-05f, -5.852748780e-05f, -9.373471177e-05f, -1.342303873e-04f, -1.751592616e-04f, -2.102289181e-04f, -2.327281357e-04f, -2.368102768e-04f, -2.187695585e-04f, -1.780112652e-04f, -1.174659045e-04f, -4.331385324e-05f, +3.595615288e-05f, +1.109738837e-04f, +1.731019841e-04f, +2.158943737e-04f, +2.360931689e-04f, +2.339700470e-04f, +2.129733054e-04f, +1.788005228e-04f, +1.381384751e-04f, +9.736790378e-05f, +6.151081921e-05f, +3.361279831e-05f, -1.619681489e-03f, -3.531382333e-03f, -5.645602430e-03f, -7.077243791e-03f, -6.666905140e-03f, -3.315244526e-03f, +3.597037991e-03f, +1.385099788e-02f, +2.624488398e-02f, +3.875617352e-02f, +4.899788213e-02f, +5.484444422e-02f, +5.502885522e-02f, +4.951059236e-02f, +3.948750432e-02f, +2.704753897e-02f, +1.458046298e-02f, +4.147543885e-03f, -2.990059823e-03f, -6.553314483e-03f, -7.118111210e-03f, -5.766266639e-03f, -3.664722671e-03f, -1.722413869e-03f, +5.035930779e-05f, +6.632801773e-05f, +6.131210073e-05f, +2.315646270e-05f, -5.241259825e-05f, -1.572668119e-04f, -2.702438562e-04f, -3.615187468e-04f, -4.011440598e-04f, -3.690592083e-04f, -2.629296196e-04f, -1.006658295e-04f, +8.370459117e-05f, +2.496708124e-04f, +3.621243063e-04f, +4.013667552e-04f, +3.678413279e-04f, +2.802167391e-04f, +1.679327488e-04f, +6.123607625e-05f, -1.763591641e-05f, -5.928519960e-05f, -6.696972897e-05f, -5.235876180e-05f, /* 1,18 (24) */ +8.378016572e-04f, +2.240332124e-03f, +4.639995460e-03f, +8.258675333e-03f, +1.319518114e-02f, +1.936850052e-02f, +2.648659017e-02f, +3.405249226e-02f, +4.141220567e-02f, +4.783942229e-02f, +5.264323003e-02f, +5.527853891e-02f, +5.543708821e-02f, +5.310013586e-02f, +4.854168753e-02f, +4.228157838e-02f, +3.499834308e-02f, +2.742002332e-02f, +2.021493027e-02f, +1.390311270e-02f, +8.803412501e-03f, +5.022190389e-03f, +2.480392668e-03f, +9.679205023e-04f, -3.075404787e-05f, -5.754920659e-05f, -9.253415281e-05f, -1.329285447e-04f, -1.739338611e-04f, -2.092891617e-04f, -2.322776351e-04f, -2.370054938e-04f, -2.196830446e-04f, -1.796086972e-04f, -1.196032629e-04f, -4.575665691e-05f, +3.349477614e-05f, +1.087840172e-04f, +1.714270575e-04f, +2.148912040e-04f, +2.358100918e-04f, +2.343469818e-04f, +2.138624717e-04f, +1.800019355e-04f, +1.394414293e-04f, +9.858906309e-05f, +6.252123589e-05f, +3.434960685e-05f, -1.569322181e-03f, -3.465054316e-03f, -5.584290329e-03f, -7.054087328e-03f, -6.719317739e-03f, -3.472511338e-03f, +3.326794134e-03f, +1.348947914e-02f, +2.584373992e-02f, +3.838711431e-02f, +4.873495251e-02f, +5.474377839e-02f, +5.511255982e-02f, +4.976026317e-02f, +3.984962863e-02f, +2.744890573e-02f, +1.494830431e-02f, +4.427760624e-03f, -2.822127074e-03f, -6.492078407e-03f, -7.135747127e-03f, -5.825551839e-03f, -3.731692400e-03f, -1.774772630e-03f, +4.967919760e-05f, +6.607226275e-05f, +6.192130682e-05f, +2.492152632e-05f, -4.953024396e-05f, -1.537277542e-04f, -2.668759114e-04f, -3.593075781e-04f, -4.009262684e-04f, -3.712231236e-04f, -2.672379855e-04f, -1.062769342e-04f, +7.801232354e-05f, +2.451428848e-04f, +3.596658675e-04f, +4.012962317e-04f, +3.698424711e-04f, +2.834940860e-04f, +1.715015031e-04f, +6.423443851e-05f, -1.572079753e-05f, -5.854219200e-05f, -6.714030571e-05f, -5.301024443e-05f, /* 1,19 (24) */ +8.070476094e-04f, +2.182782917e-03f, +4.547461308e-03f, +8.125746789e-03f, +1.302124728e-02f, +1.915921136e-02f, +2.625431253e-02f, +3.381548677e-02f, +4.119252263e-02f, +4.765981359e-02f, +5.252362676e-02f, +5.523278225e-02f, +5.547058299e-02f, +5.320891988e-02f, +4.871311459e-02f, +4.249646959e-02f, +3.523415318e-02f, +2.765437030e-02f, +2.042879274e-02f, +1.408311464e-02f, +8.942853930e-03f, +5.120779452e-03f, +2.542913904e-03f, +1.002270109e-03f, -3.006145594e-05f, -5.657909639e-05f, -9.133904628e-05f, -1.316274228e-04f, -1.727029831e-04f, -2.083372615e-04f, -2.318091276e-04f, -2.371789201e-04f, -2.205740179e-04f, -1.811863919e-04f, -1.217269082e-04f, -4.819410453e-05f, +3.102947289e-05f, +1.065816209e-04f, +1.697331367e-04f, +2.138657227e-04f, +2.355048907e-04f, +2.347051515e-04f, +2.147384913e-04f, +1.811968298e-04f, +1.407442116e-04f, +9.981506022e-05f, +6.353953899e-05f, +3.509526789e-05f, -1.519642983e-03f, -3.398982053e-03f, -5.522369023e-03f, -7.029165802e-03f, -6.768847983e-03f, -3.626239093e-03f, +3.059918223e-03f, +1.313017156e-02f, +2.544281365e-02f, +3.801589119e-02f, +4.846771453e-02f, +5.463750145e-02f, +5.519057214e-02f, +5.000540606e-02f, +4.020929449e-02f, +2.785020196e-02f, +1.531814678e-02f, +4.711254710e-03f, -2.650625571e-03f, -6.427843968e-03f, -7.151467924e-03f, -5.884094031e-03f, -3.798832706e-03f, -1.827782875e-03f, +4.899295427e-05f, +6.579632434e-05f, +6.249779202e-05f, +2.664897123e-05f, -4.667806016e-05f, -1.501982080e-04f, -2.634877895e-04f, -3.570459849e-04f, -4.006373398e-04f, -3.733127737e-04f, -2.714893178e-04f, -1.118646739e-04f, +7.230286952e-05f, +2.405622897e-04f, +3.571345343e-04f, +4.011527782e-04f, +3.717890774e-04f, +2.867463115e-04f, +1.750755508e-04f, +6.726056827e-05f, -1.376833283e-05f, -5.776504473e-05f, -6.728848602e-05f, -5.365352956e-05f, /* 1,20 (24) */ +7.769861534e-04f, +2.126203821e-03f, +4.456122261e-03f, +7.994119366e-03f, +1.284854430e-02f, +1.895087410e-02f, +2.602250340e-02f, +3.357830785e-02f, +4.097194861e-02f, +4.747862720e-02f, +5.240189986e-02f, +5.518458815e-02f, +5.550161246e-02f, +5.331550150e-02f, +4.888284773e-02f, +4.271033531e-02f, +3.546965807e-02f, +2.788907545e-02f, +2.064353123e-02f, +1.426431147e-02f, +9.083598142e-03f, +5.220594513e-03f, +2.606453443e-03f, +1.037365377e-03f, -2.937768631e-05f, -5.561720797e-05f, -9.014950911e-05f, -1.303271956e-04f, -1.714668346e-04f, -2.073734206e-04f, -2.313227709e-04f, -2.373306314e-04f, -2.214424487e-04f, -1.827442103e-04f, -1.238366106e-04f, -5.062591276e-05f, +2.856053128e-05f, +1.043669379e-04f, +1.680203798e-04f, +2.128179804e-04f, +2.351775086e-04f, +2.350444110e-04f, +2.156011663e-04f, +1.823849963e-04f, +1.420466395e-04f, +1.010457663e-04f, +6.456566540e-05f, +3.584978049e-05f, -1.470650029e-03f, -3.333185729e-03f, -5.459871231e-03f, -7.002516830e-03f, -6.815526043e-03f, -3.776437301e-03f, +2.796430433e-03f, +1.277312557e-02f, +2.504217631e-02f, +3.764257842e-02f, +4.819622521e-02f, +5.452563678e-02f, +5.526287501e-02f, +5.024596835e-02f, +4.056642903e-02f, +2.825135474e-02f, +1.568993586e-02f, +4.998001022e-03f, -2.475550020e-03f, -6.360583400e-03f, -7.165236257e-03f, -5.941859076e-03f, -3.866121192e-03f, -1.881436404e-03f, +4.830098012e-05f, +6.550064997e-05f, +6.304186356e-05f, +2.833878040e-05f, -4.385648766e-05f, -1.466789902e-04f, -2.600804786e-04f, -3.547348191e-04f, -4.002776863e-04f, -3.753279455e-04f, -2.756827919e-04f, -1.174278323e-04f, +6.657748159e-05f, +2.359299473e-04f, +3.545306419e-04f, +4.009360908e-04f, +3.736803560e-04f, +2.899724281e-04f, +1.786540232e-04f, +7.031394560e-05f, -1.177861505e-05f, -5.695349877e-05f, -6.741383353e-05f, -5.428819468e-05f, /* 1,21 (24) */ +7.476084671e-04f, +2.070586613e-03f, +4.365972752e-03f, +7.863792170e-03f, +1.267707746e-02f, +1.874350068e-02f, +2.579118063e-02f, +3.334097721e-02f, +4.075050616e-02f, +4.729588299e-02f, +5.227806324e-02f, +5.513396224e-02f, +5.553017299e-02f, +5.341986844e-02f, +4.905086811e-02f, +4.292315329e-02f, +3.570483557e-02f, +2.812411986e-02f, +2.085913240e-02f, +1.444669647e-02f, +9.225644781e-03f, +5.321640279e-03f, +2.671019108e-03f, +1.073215158e-03f, -2.870272812e-05f, -5.466359004e-05f, -8.896565621e-05f, -1.290280359e-04f, -1.702256220e-04f, -2.063978428e-04f, -2.308187252e-04f, -2.374607067e-04f, -2.222883106e-04f, -1.842820166e-04f, -1.259321426e-04f, -5.305179922e-05f, +2.608824006e-05f, +1.021402136e-04f, +1.662889481e-04f, +2.117480312e-04f, +2.348278912e-04f, +2.353646174e-04f, +2.164503001e-04f, +1.835662257e-04f, +1.433485289e-04f, +1.022810507e-04f, +6.559954993e-05f, +3.661314192e-05f, -1.422349049e-03f, -3.267685079e-03f, -5.396829367e-03f, -6.974178050e-03f, -6.859382530e-03f, -3.923116291e-03f, +2.536349955e-03f, +1.241839075e-02f, +2.464189863e-02f, +3.726725047e-02f, +4.792054242e-02f, +5.440820895e-02f, +5.532945249e-02f, +5.048189829e-02f, +4.092095967e-02f, +2.865229083e-02f, +1.606361621e-02f, +5.287973450e-03f, -2.296895997e-03f, -6.290269454e-03f, -7.177014872e-03f, -5.998812574e-03f, -3.933535025e-03f, -1.935724599e-03f, +4.760367367e-05f, +6.518568834e-05f, +6.355383603e-05f, +2.999094905e-05f, -4.106595391e-05f, -1.431709084e-04f, -2.566549656e-04f, -3.523749422e-04f, -3.998477374e-04f, -3.772684468e-04f, -2.798176001e-04f, -1.229652003e-04f, +6.083741698e-05f, +2.312467930e-04f, +3.518545456e-04f, +4.006458844e-04f, +3.755155275e-04f, +2.931714495e-04f, +1.822360436e-04f, +7.339403759e-05f, -9.751749846e-06f, -5.610730378e-05f, -6.751591438e-05f, -5.491381433e-05f, /* 1,22 (24) */ +7.189057390e-04f, +2.015923023e-03f, +4.277007096e-03f, +7.734764134e-03f, +1.250685184e-02f, +1.853710284e-02f, +2.556036191e-02f, +3.310351651e-02f, +4.052821785e-02f, +4.711160097e-02f, +5.215213110e-02f, +5.508091044e-02f, +5.555626123e-02f, +5.352200865e-02f, +4.921715706e-02f, +4.313490132e-02f, +3.593966347e-02f, +2.835948448e-02f, +2.107558270e-02f, +1.463026269e-02f, +9.368993310e-03f, +5.423921330e-03f, +2.736618658e-03f, +1.109828299e-03f, -2.803656886e-05f, -5.371828929e-05f, -8.778760047e-05f, -1.277301149e-04f, -1.689795512e-04f, -2.054107328e-04f, -2.302971523e-04f, -2.375692277e-04f, -2.231115807e-04f, -1.857996784e-04f, -1.280132790e-04f, -5.547148255e-05f, +2.361288858e-05f, +9.990169528e-05f, +1.645390058e-04f, +2.106559329e-04f, +2.344559875e-04f, +2.356656303e-04f, +2.172856968e-04f, +1.847403082e-04f, +1.446496947e-04f, +1.035207805e-04f, +6.664112530e-05f, +3.738534770e-05f, -1.374745375e-03f, -3.202499390e-03f, -5.333275531e-03f, -6.944187101e-03f, -6.900448484e-03f, -4.066287199e-03f, +2.279694989e-03f, +1.206601581e-02f, +2.424205089e-02f, +3.688998202e-02f, +4.764072482e-02f, +5.428524375e-02f, +5.539028991e-02f, +5.071314509e-02f, +4.127281421e-02f, +2.905293671e-02f, +1.643913174e-02f, +5.581144899e-03f, -2.114659953e-03f, -6.216875417e-03f, -7.186766622e-03f, -6.054919878e-03f, -4.001050940e-03f, -1.990638413e-03f, +4.690142952e-05f, +6.485188912e-05f, +6.403403126e-05f, +3.160548461e-05f, -3.830687289e-05f, -1.396747604e-04f, -2.532122364e-04f, -3.499672243e-04f, -3.993479400e-04f, -3.791341056e-04f, -2.838929516e-04f, -1.284755764e-04f, +5.508393727e-05f, +2.265137770e-04f, +3.491066211e-04f, +4.002818927e-04f, +3.772938242e-04f, +2.963423910e-04f, +1.858207276e-04f, +7.650029847e-05f, -7.687855865e-06f, -5.522621826e-05f, -6.759429744e-05f, -5.552996031e-05f, /* 1,23 (24) */ +6.908691701e-04f, +1.962204733e-03f, +4.189219495e-03f, +7.607034019e-03f, +1.233787229e-02f, +1.833169210e-02f, +2.533006476e-02f, +3.286594728e-02f, +4.030510627e-02f, +4.692580129e-02f, +5.202411782e-02f, +5.502543896e-02f, +5.557987412e-02f, +5.362191034e-02f, +4.938169606e-02f, +4.334555725e-02f, +3.617411945e-02f, +2.859515011e-02f, +2.129286839e-02f, +1.481500300e-02f, +9.513643005e-03f, +5.527442110e-03f, +2.803259783e-03f, +1.147213647e-03f, -2.737919445e-05f, -5.278135038e-05f, -8.661545276e-05f, -1.264336021e-04f, -1.677288274e-04f, -2.044122956e-04f, -2.297582162e-04f, -2.376562792e-04f, -2.239122397e-04f, -1.872970664e-04f, -1.300797972e-04f, -5.788468247e-05f, +2.113476669e-05f, +9.765163225e-05f, +1.627707202e-04f, +2.095417464e-04f, +2.340617500e-04f, +2.359473116e-04f, +2.181071619e-04f, +1.859070338e-04f, +1.459499503e-04f, +1.047648212e-04f, +6.769032218e-05f, +3.816639157e-05f, -1.327843946e-03f, -3.137647501e-03f, -5.269241500e-03f, -6.912581616e-03f, -6.938755357e-03f, -4.205961960e-03f, +2.026482753e-03f, +1.171604859e-02f, +2.384270295e-02f, +3.651084792e-02f, +4.735683186e-02f, +5.415676817e-02f, +5.544537384e-02f, +5.093965886e-02f, +4.162192084e-02f, +2.945321860e-02f, +1.681642556e-02f, +5.877487290e-03f, -1.928839225e-03f, -6.140375118e-03f, -7.194454478e-03f, -6.110146096e-03f, -4.068645237e-03f, -2.046168374e-03f, +4.619463825e-05f, +6.449970283e-05f, +6.448277808e-05f, +3.318240655e-05f, -3.557964519e-05f, -1.361913343e-04f, -2.497532750e-04f, -3.475125441e-04f, -3.987787580e-04f, -3.809247703e-04f, -2.879080727e-04f, -1.339577671e-04f, +4.931830803e-05f, +2.217318639e-04f, +3.462872642e-04f, +3.998438681e-04f, +3.790144899e-04f, +2.994842696e-04f, +1.894071836e-04f, +7.963216967e-05f, -5.587064814e-06f, -5.431000971e-05f, -6.764855447e-05f, -5.613620176e-05f, /* 1,24 (24) */ +6.634899757e-04f, +1.909423383e-03f, +4.102604043e-03f, +7.480600417e-03f, +1.217014346e-02f, +1.812727981e-02f, +2.510030654e-02f, +3.262829100e-02f, +4.008119403e-02f, +4.673850422e-02f, +5.189403803e-02f, +5.496755427e-02f, +5.560100889e-02f, +5.371956198e-02f, +4.954446678e-02f, +4.355509900e-02f, +3.640818120e-02f, +2.883109742e-02f, +2.151097556e-02f, +1.500091003e-02f, +9.659592955e-03f, +5.632206931e-03f, +2.870950105e-03f, +1.185380039e-03f, -2.673058920e-05f, -5.185281596e-05f, -8.544932188e-05f, -1.251386658e-04f, -1.664736552e-04f, -2.034027372e-04f, -2.292020825e-04f, -2.377219491e-04f, -2.246902716e-04f, -1.887740547e-04f, -1.321314770e-04f, -6.029111978e-05f, +1.865416474e-05f, +9.539027583e-05f, +1.609842617e-04f, +2.084055364e-04f, +2.336451340e-04f, +2.362095255e-04f, +2.189145021e-04f, +1.870661925e-04f, +1.472491081e-04f, +1.060130363e-04f, +6.874706913e-05f, +3.895626544e-05f, -1.281649307e-03f, -3.073147798e-03f, -5.204758722e-03f, -6.879399210e-03f, -6.974335002e-03f, -4.342153294e-03f, +1.776729478e-03f, +1.136853604e-02f, +2.344392419e-02f, +3.612992315e-02f, +4.706892379e-02f, +5.402281040e-02f, +5.549469215e-02f, +5.116139073e-02f, +4.196820810e-02f, +2.985306247e-02f, +1.719544005e-02f, +6.176971560e-03f, -1.739432042e-03f, -6.060742949e-03f, -7.200041542e-03f, -6.164456106e-03f, -4.136293792e-03f, -2.102304575e-03f, +4.548368629e-05f, +6.412958061e-05f, +6.490041214e-05f, +3.472174628e-05f, -3.288465786e-05f, -1.327214084e-04f, -2.462790636e-04f, -3.450117886e-04f, -3.981406720e-04f, -3.826403100e-04f, -2.918622071e-04f, -1.394105874e-04f, +4.354179844e-05f, +2.169020328e-04f, +3.433968906e-04f, +3.993315822e-04f, +3.806767808e-04f, +3.025961045e-04f, +1.929945127e-04f, +8.278907995e-05f, -3.449521528e-06f, -5.335845485e-05f, -6.767826036e-05f, -5.673210536e-05f, /* 1,25 (24) */ +6.367593865e-04f, +1.857570567e-03f, +4.017154721e-03f, +7.355461751e-03f, +1.200366981e-02f, +1.792387707e-02f, +2.487110446e-02f, +3.239056905e-02f, +3.985650376e-02f, +4.654973017e-02f, +5.176190655e-02f, +5.490726315e-02f, +5.561966305e-02f, +5.381495225e-02f, +4.970545104e-02f, +4.376350454e-02f, +3.664182634e-02f, +2.906730695e-02f, +2.172989006e-02f, +1.518797623e-02f, +9.806842063e-03f, +5.738219968e-03f, +2.939697175e-03f, +1.224336304e-03f, -2.609073586e-05f, -5.093272665e-05f, -8.428931461e-05f, -1.238454723e-04f, -1.652142386e-04f, -2.023822639e-04f, -2.286289191e-04f, -2.377663278e-04f, -2.254456640e-04f, -1.902305206e-04f, -1.341681007e-04f, -6.269051648e-05f, +1.617137348e-05f, +9.311787923e-05f, +1.591798037e-04f, +2.072473709e-04f, +2.332060983e-04f, +2.364521385e-04f, +2.197075250e-04f, +1.882175742e-04f, +1.485469791e-04f, +1.072652872e-04f, +6.981129264e-05f, +3.975495944e-05f, -1.236165621e-03f, -3.009018218e-03f, -5.139858309e-03f, -6.844677464e-03f, -7.007219660e-03f, -4.474874702e-03f, +1.530450414e-03f, +1.102352425e-02f, +2.304578352e-02f, +3.574728284e-02f, +4.677706159e-02f, +5.388339982e-02f, +5.553823395e-02f, +5.137829276e-02f, +4.231160499e-02f, +3.025239405e-02f, +1.757611683e-02f, +6.479567664e-03f, -1.546437529e-03f, -5.977953869e-03f, -7.203491064e-03f, -6.217814561e-03f, -4.203972052e-03f, -2.159036681e-03f, +4.476895583e-05f, +6.374197407e-05f, +6.528727571e-05f, +3.622354707e-05f, -3.022228446e-05f, -1.292657505e-04f, -2.427905823e-04f, -3.424658527e-04f, -3.974341794e-04f, -3.842806141e-04f, -2.957546163e-04f, -1.448328608e-04f, +3.775568092e-05f, +2.120252768e-04f, +3.404359360e-04f, +3.987448259e-04f, +3.822799655e-04f, +3.056769175e-04f, +1.965818092e-04f, +8.597044546e-05f, -1.275384025e-06f, -5.237133972e-05f, -6.768299327e-05f, -5.731723542e-05f, /* 1,26 (24) */ +6.106686506e-04f, +1.806637840e-03f, +3.932865406e-03f, +7.231616279e-03f, +1.183845557e-02f, +1.772149481e-02f, +2.464247554e-02f, +3.215280272e-02f, +3.963105810e-02f, +4.635949965e-02f, +5.162773845e-02f, +5.484457264e-02f, +5.563583443e-02f, +5.390807013e-02f, +4.986463085e-02f, +4.397075191e-02f, +3.687503244e-02f, +2.930375909e-02f, +2.194959758e-02f, +1.537619380e-02f, +9.955389042e-03f, +5.845485255e-03f, +3.009508467e-03f, +1.264091264e-03f, -2.545961565e-05f, -5.002112110e-05f, -8.313553567e-05f, -1.225541865e-04f, -1.639507809e-04f, -2.013510827e-04f, -2.280388952e-04f, -2.377895090e-04f, -2.261784077e-04f, -1.916663450e-04f, -1.361894531e-04f, -6.508259574e-05f, +1.368668407e-05f, +9.083469754e-05f, +1.573575226e-04f, +2.060673215e-04f, +2.327446049e-04f, +2.366750198e-04f, +2.204860398e-04f, +1.893609687e-04f, +1.498433732e-04f, +1.085214336e-04f, +7.088291709e-05f, +4.056246185e-05f, -1.191396665e-03f, -2.945276244e-03f, -5.074571034e-03f, -6.808453917e-03f, -7.037441945e-03f, -4.604140453e-03f, +1.287659832e-03f, +1.068105840e-02f, +2.264834934e-02f, +3.536300222e-02f, +4.648130697e-02f, +5.373856695e-02f, +5.557598963e-02f, +5.159031804e-02f, +4.265204093e-02f, +3.065113888e-02f, +1.795839680e-02f, +6.785244582e-03f, -1.349855720e-03f, -5.891983423e-03f, -7.204766448e-03f, -6.270185901e-03f, -4.271655045e-03f, -2.216353916e-03f, +4.405082471e-05f, +6.333733508e-05f, +6.564371751e-05f, +3.768786388e-05f, -2.759288502e-05f, -1.258251183e-04f, -2.392888085e-04f, -3.398756389e-04f, -3.966597940e-04f, -3.858455924e-04f, -2.995845792e-04f, -1.502234199e-04f, +3.196123075e-05f, +2.071026027e-04f, +3.374048561e-04f, +3.980834092e-04f, +3.838233252e-04f, +3.087257329e-04f, +2.001681605e-04f, +8.917566987e-05f, +9.351764323e-07f, -5.134845990e-05f, -6.766233489e-05f, -5.789115407e-05f, /* 1,27 (24) */ +5.852090350e-04f, +1.756616719e-03f, +3.849729871e-03f, +7.109062093e-03f, +1.167450479e-02f, +1.752014373e-02f, +2.441443664e-02f, +3.191501321e-02f, +3.940487969e-02f, +4.616783330e-02f, +5.149154900e-02f, +5.477949004e-02f, +5.564952111e-02f, +5.399890483e-02f, +5.002198837e-02f, +4.417681923e-02f, +3.710777704e-02f, +2.954043411e-02f, +2.217008362e-02f, +1.556555477e-02f, +1.010523242e-02f, +5.954006688e-03f, +3.080391384e-03f, +1.304653725e-03f, -2.483720823e-05f, -4.911803594e-05f, -8.198808773e-05f, -1.212649717e-04f, -1.626834846e-04f, -2.003094010e-04f, -2.274321824e-04f, -2.377915891e-04f, -2.268884971e-04f, -1.930814118e-04f, -1.381953216e-04f, -6.746708201e-05f, +1.120038797e-05f, +8.854098772e-05f, +1.555175978e-04f, +2.048654630e-04f, +2.322606191e-04f, +2.368780408e-04f, +2.212498566e-04f, +1.904961658e-04f, +1.511380992e-04f, +1.097813335e-04f, +7.196186479e-05f, +4.137875911e-05f, -1.147345840e-03f, -2.881938909e-03f, -5.008927316e-03f, -6.770766053e-03f, -7.065034830e-03f, -4.729965571e-03f, +1.048371023e-03f, +1.034118276e-02f, +2.225168955e-02f, +3.497715663e-02f, +4.618172239e-02f, +5.358834353e-02f, +5.560795086e-02f, +5.179742064e-02f, +4.298944578e-02f, +3.104922229e-02f, +1.834222013e-02f, +7.093970315e-03f, -1.149687559e-03f, -5.802807753e-03f, -7.203831272e-03f, -6.321534361e-03f, -4.339317380e-03f, -2.274245070e-03f, +4.332966631e-05f, +6.291611563e-05f, +6.597009251e-05f, +3.911476326e-05f, -2.499680603e-05f, -1.224002588e-04f, -2.357747169e-04f, -3.372420571e-04f, -3.958180458e-04f, -3.873351753e-04f, -3.033513931e-04f, -1.555811067e-04f, +2.615972566e-05f, +2.021350307e-04f, +3.343041262e-04f, +3.973471616e-04f, +3.853061542e-04f, +3.117415784e-04f, +2.037526479e-04f, +9.240414446e-05f, +3.181975286e-06f, -5.028962066e-05f, -6.761587059e-05f, -5.845342137e-05f, /* 1,28 (24) */ +5.603718267e-04f, +1.707498683e-03f, +3.767741783e-03f, +6.987797121e-03f, +1.151182130e-02f, +1.731983432e-02f, +2.418700446e-02f, +3.167722163e-02f, +3.917799119e-02f, +4.597475189e-02f, +5.135335367e-02f, +5.471202296e-02f, +5.566072150e-02f, +5.408744582e-02f, +5.017750597e-02f, +4.438168469e-02f, +3.734003766e-02f, +2.977731215e-02f, +2.239133348e-02f, +1.575605093e-02f, +1.025637051e-02f, +6.063788022e-03f, +3.152353249e-03f, +1.346032485e-03f, -2.422349177e-05f, -4.822350583e-05f, -8.084707136e-05f, -1.199779894e-04f, -1.614125515e-04f, -1.992574267e-04f, -2.268089534e-04f, -2.377726671e-04f, -2.275759301e-04f, -1.944756084e-04f, -1.401854962e-04f, -6.984370103e-05f, +8.712776940e-06f, +8.623700849e-05f, +1.536602113e-04f, +2.036418741e-04f, +2.317541095e-04f, +2.370610757e-04f, +2.219987871e-04f, +1.916229551e-04f, +1.524309647e-04f, +1.110448427e-04f, +7.304805597e-05f, +4.220383580e-05f, -1.104016174e-03f, -2.819022793e-03f, -4.942957224e-03f, -6.731651289e-03f, -7.090031636e-03f, -4.852365830e-03f, +8.125963065e-04f, +1.000394071e-02f, +2.185587150e-02f, +3.458982146e-02f, +4.587837100e-02f, +5.343276243e-02f, +5.563411059e-02f, +5.199955567e-02f, +4.332374991e-02f, +3.144656945e-02f, +1.872752628e-02f, +7.405711893e-03f, -9.459349115e-04f, -5.710403609e-03f, -7.200649296e-03f, -6.371823981e-03f, -4.406933251e-03f, -2.332698492e-03f, +4.260584945e-05f, +6.247876761e-05f, +6.626676172e-05f, +4.050432324e-05f, -2.243438042e-05f, -1.189919086e-04f, -2.322492790e-04f, -3.345660239e-04f, -3.949094806e-04f, -3.887493134e-04f, -3.070543729e-04f, -1.609047730e-04f, +2.035244551e-05f, +1.971235943e-04f, +3.311342413e-04f, +3.965359323e-04f, +3.867277599e-04f, +3.147234851e-04f, +2.073343464e-04f, +9.565524824e-05f, +5.464814636e-06f, -4.919463712e-05f, -6.754318962e-05f, -5.900359551e-05f, /* 1,29 (24) */ +5.361483350e-04f, +1.659275177e-03f, +3.686894711e-03f, +6.867819132e-03f, +1.135040875e-02f, +1.712057690e-02f, +2.396019551e-02f, +3.143944896e-02f, +3.895041526e-02f, +4.578027628e-02f, +5.121316818e-02f, +5.464217926e-02f, +5.566943427e-02f, +5.417368283e-02f, +5.033116618e-02f, +4.458532657e-02f, +3.757179177e-02f, +3.001437322e-02f, +2.261333227e-02f, +1.594767389e-02f, +1.040880148e-02f, +6.174832865e-03f, +3.225401305e-03f, +1.388236320e-03f, -2.361844294e-05f, -4.733756345e-05f, -7.971258511e-05f, -1.186933996e-04f, -1.601381827e-04f, -1.981953682e-04f, -2.261693833e-04f, -2.377328453e-04f, -2.282407078e-04f, -1.958488257e-04f, -1.421597696e-04f, -7.221217990e-05f, +6.224142940e-06f, +8.392302033e-05f, +1.517855485e-04f, +2.023966364e-04f, +2.312250478e-04f, +2.372240010e-04f, +2.227326442e-04f, +1.927411265e-04f, +1.537217763e-04f, +1.123118154e-04f, +7.414140875e-05f, +4.303767463e-05f, -1.061410325e-03f, -2.756544025e-03f, -4.876690462e-03f, -6.691146966e-03f, -7.112466016e-03f, -4.971357738e-03f, +5.803470275e-04f, +9.669374682e-03f, +2.146096202e-02f, +3.420107214e-02f, +4.557131662e-02f, +5.327185765e-02f, +5.565446303e-02f, +5.219667927e-02f, +4.365488415e-02f, +3.184310538e-02f, +1.911425404e-02f, +7.720435378e-03f, -7.386005651e-04f, -5.614748361e-03f, -7.195184482e-03f, -6.421018618e-03f, -4.474476440e-03f, -2.391702087e-03f, +4.187973832e-05f, +6.202574269e-05f, +6.653409200e-05f, +4.185663315e-05f, -1.990592754e-05f, -1.156007930e-04f, -2.287134631e-04f, -3.318484630e-04f, -3.939346603e-04f, -3.900879776e-04f, -3.106928523e-04f, -1.661932803e-04f, +1.454067187e-05f, +1.920693398e-04f, +3.278957162e-04f, +3.956495901e-04f, +3.880874633e-04f, +3.176704877e-04f, +2.109123251e-04f, +9.892834806e-05f, +7.783483193e-06f, -4.806333441e-05f, -6.744388532e-05f, -5.954123292e-05f, /* 1,30 (24) */ +5.125298920e-04f, +1.611937614e-03f, +3.607182126e-03f, +6.749125732e-03f, +1.119027057e-02f, +1.692238153e-02f, +2.373402612e-02f, +3.120171611e-02f, +3.872217455e-02f, +4.558442746e-02f, +5.107100841e-02f, +5.456996708e-02f, +5.567565842e-02f, +5.425760585e-02f, +5.048295173e-02f, +4.478772320e-02f, +3.780301682e-02f, +3.025159722e-02f, +2.283606491e-02f, +1.614041502e-02f, +1.056252326e-02f, +6.287144680e-03f, +3.299542714e-03f, +1.431273995e-03f, -2.302203695e-05f, -4.646023953e-05f, -7.858472543e-05f, -1.174113605e-04f, -1.588605782e-04f, -1.971234341e-04f, -2.255136482e-04f, -2.376722283e-04f, -2.288828348e-04f, -1.972009578e-04f, -1.441179370e-04f, -7.457224711e-05f, +3.734778125e-06f, +8.159928545e-05f, +1.498937974e-04f, +2.011298355e-04f, +2.306734093e-04f, +2.373666959e-04f, +2.234512424e-04f, +1.938504700e-04f, +1.550103394e-04f, +1.135821039e-04f, +7.524183918e-05f, +4.388025644e-05f, -1.019530586e-03f, -2.694518283e-03f, -4.810156370e-03f, -6.649290333e-03f, -7.132371944e-03f, -5.086958531e-03f, +3.516335643e-04f, +9.337526219e-03f, +2.106702736e-02f, +3.381098417e-02f, +4.526062377e-02f, +5.310566437e-02f, +5.566900371e-02f, +5.238874861e-02f, +4.398277987e-02f, +3.223875497e-02f, +1.950234150e-02f, +8.038105866e-03f, -5.276882399e-04f, -5.515820013e-03f, -7.187400998e-03f, -6.469081953e-03f, -4.541920326e-03f, -2.451243320e-03f, +4.115169237e-05f, +6.155749209e-05f, +6.677245590e-05f, +4.317179353e-05f, -1.741175321e-05f, -1.122276266e-04f, -2.251682337e-04f, -3.290903040e-04f, -3.928941620e-04f, -3.913511592e-04f, -3.142661832e-04f, -1.714455010e-04f, +8.725687627e-06f, +1.869733261e-04f, +3.245890848e-04f, +3.946880233e-04f, +3.893845993e-04f, +3.205816252e-04f, +2.144856476e-04f, +1.022227988e-04f, +1.013775625e-05f, -4.689554782e-05f, -6.731755534e-05f, -6.006588847e-05f, /* 1,31 (24) */ +4.895078551e-04f, +1.565477374e-03f, +3.528597401e-03f, +6.631714371e-03f, +1.103140999e-02f, +1.672525810e-02f, +2.350851248e-02f, +3.096404388e-02f, +3.849329172e-02f, +4.538722650e-02f, +5.092689047e-02f, +5.449539483e-02f, +5.567939320e-02f, +5.433920513e-02f, +5.063284553e-02f, +4.498885304e-02f, +3.803369023e-02f, +3.048896392e-02f, +2.305951615e-02f, +1.633426549e-02f, +1.071753360e-02f, +6.400726784e-03f, +3.374784553e-03f, +1.475154251e-03f, -2.243424753e-05f, -4.559156282e-05f, -7.746358669e-05f, -1.161320286e-04f, -1.575799374e-04f, -1.960418335e-04f, -2.248419263e-04f, -2.375909238e-04f, -2.295023193e-04f, -1.985319023e-04f, -1.460597965e-04f, -7.692363257e-05f, +1.244974771e-06f, +7.926606770e-05f, +1.479851488e-04f, +1.998415601e-04f, +2.300991725e-04f, +2.374890420e-04f, +2.241543973e-04f, +1.949507756e-04f, +1.562964586e-04f, +1.148555588e-04f, +7.634926120e-05f, +4.473156016e-05f, -9.783788940e-04f, -2.632960791e-03f, -4.743383914e-03f, -6.606118539e-03f, -7.149783697e-03f, -5.199186158e-03f, +1.264653307e-04f, +9.008435915e-03f, +2.067413320e-02f, +3.341963301e-02f, +4.494635759e-02f, +5.293421887e-02f, +5.567772939e-02f, +5.257572193e-02f, +4.430736895e-02f, +3.263344300e-02f, +1.989172610e-02f, +8.358687491e-03f, -3.132025924e-04f, -5.413597214e-03f, -7.177263242e-03f, -6.515977501e-03f, -4.609237881e-03f, -2.511309208e-03f, +4.042206620e-05f, +6.107446643e-05f, +6.698223140e-05f, +4.444991597e-05f, -1.495214967e-05f, -1.088731127e-04f, -2.216145512e-04f, -3.262924828e-04f, -3.917885782e-04f, -3.925388696e-04f, -3.177737361e-04f, -1.766603177e-04f, +2.908776646e-06f, +1.818366243e-04f, +3.212149006e-04f, +3.936511404e-04f, +3.906185166e-04f, +3.234559409e-04f, +2.180533719e-04f, +1.055379432e-04f, +1.252739563e-05f, -4.569112297e-05f, -6.716380176e-05f, -6.057711558e-05f, /* 2, 0 (24) */ -1.052000512e-03f, -1.225267868e-03f, -4.608628065e-05f, +3.709094207e-03f, +1.122115699e-02f, +2.318852133e-02f, +3.940859639e-02f, +5.854613402e-02f, +7.821578874e-02f, +9.540941453e-02f, +1.071760298e-01f, +1.113612763e-01f, +1.071760298e-01f, +9.540941453e-02f, +7.821578874e-02f, +5.854613402e-02f, +3.940859639e-02f, +2.318852133e-02f, +1.122115699e-02f, +3.709094207e-03f, -4.608628065e-05f, -1.225267868e-03f, -1.052000512e-03f, -4.708832203e-04f, +1.584555542e-05f, -9.185459440e-06f, -6.916443580e-05f, -1.688238542e-04f, -3.004887188e-04f, -4.422077692e-04f, -5.609449829e-04f, -6.207176891e-04f, -5.934927004e-04f, -4.692000494e-04f, -2.611026920e-04f, -4.153751417e-06f, +2.535839502e-04f, +4.638335327e-04f, +5.910707719e-04f, +6.212908975e-04f, +5.638834066e-04f, +4.464564775e-04f, +3.049149461e-04f, +1.725320870e-04f, +7.168211267e-05f, +1.048135530e-05f, -1.548290361e-05f, -1.798781866e-05f, +2.602648486e-04f, -1.790854894e-03f, -6.469170083e-03f, -1.331774173e-02f, -2.013268817e-02f, -2.337843094e-02f, -1.959106136e-02f, -7.230457758e-03f, +1.197693589e-02f, +3.306945298e-02f, +4.948642618e-02f, +5.568063817e-02f, +4.948642618e-02f, +3.306945298e-02f, +1.197693589e-02f, -7.230457758e-03f, -1.959106136e-02f, -2.337843094e-02f, -2.013268817e-02f, -1.331774173e-02f, -6.469170083e-03f, -1.790854894e-03f, +2.602648486e-04f, +4.785335182e-04f, +2.853574234e-05f, +1.020710182e-04f, +1.857692058e-04f, +2.293779382e-04f, +1.790313220e-04f, +9.966225700e-06f, -2.476430534e-04f, -5.080781166e-04f, -6.611133931e-04f, -6.228059886e-04f, -3.804399088e-04f, -6.236330677e-06f, +3.701651116e-04f, +6.181549083e-04f, +6.630960758e-04f, +5.150465232e-04f, +2.562970312e-04f, -2.935877331e-06f, -1.755456498e-04f, -2.294652832e-04f, -1.880413307e-04f, -1.047427193e-04f, -3.035250677e-05f, +9.064716865e-06f, /* 2, 1 (24) */ -1.036154957e-03f, -1.234453328e-03f, -1.152507165e-04f, +3.540270353e-03f, +1.092066827e-02f, +2.274631356e-02f, +3.884765141e-02f, +5.792541633e-02f, +7.762229604e-02f, +9.494021448e-02f, +1.069149271e-01f, +1.113571226e-01f, +1.074296137e-01f, +9.587324806e-02f, +7.880685951e-02f, +5.916742492e-02f, +3.997247980e-02f, +2.363497781e-02f, +1.152607194e-02f, +3.881626294e-03f, +2.559583202e-05f, -1.214786513e-03f, -1.067483416e-03f, -4.888710389e-04f, +1.618563203e-05f, -7.924283845e-06f, -6.668655613e-05f, -1.651480956e-04f, -2.960732688e-04f, -4.379368899e-04f, -5.579483211e-04f, -6.200580086e-04f, -5.958178588e-04f, -4.744828822e-04f, -2.685726115e-04f, -1.246046575e-05f, +2.460177481e-04f, +4.583841202e-04f, +5.885521170e-04f, +6.217769968e-04f, +5.667625323e-04f, +4.506818819e-04f, +3.093510607e-04f, +1.762723314e-04f, +7.423956698e-05f, +1.181226953e-05f, -1.509725256e-05f, -1.812965542e-05f, +2.888005909e-04f, -1.688783876e-03f, -6.283400877e-03f, -1.308836379e-02f, -1.995365684e-02f, -2.336846472e-02f, -1.983870441e-02f, -7.738535875e-03f, +1.131582250e-02f, +3.244664700e-02f, +4.910598627e-02f, +5.567440184e-02f, +4.985659129e-02f, +3.368760789e-02f, +1.264003196e-02f, -6.715411235e-03f, -1.933476432e-02f, -2.338136682e-02f, -2.030823382e-02f, -1.354720701e-02f, -6.657211414e-03f, -1.895597614e-03f, +2.299123418e-04f, +4.875982351e-04f, +2.675586256e-05f, +9.941151491e-05f, +1.834583669e-04f, +2.291964006e-04f, +1.823962955e-04f, +1.690521069e-05f, -2.389940689e-04f, -5.010026274e-04f, -6.589376933e-04f, -6.272503973e-04f, -3.905809452e-04f, -1.870676093e-05f, +3.597600253e-04f, +6.132981627e-04f, +6.648840429e-04f, +5.219044802e-04f, +2.649526494e-04f, +4.183916502e-06f, -1.719392626e-04f, -2.294569894e-04f, -1.902729177e-04f, -1.074253608e-04f, -3.220584870e-05f, +8.403713181e-06f, /* 2, 2 (24) */ -1.019969325e-03f, -1.242377612e-03f, -1.819372726e-04f, +3.375122257e-03f, +1.062459500e-02f, +2.230837667e-02f, +3.828970309e-02f, +5.730535832e-02f, +7.702647818e-02f, +9.446573159e-02f, +1.066463545e-01f, +1.113446621e-01f, +1.076756315e-01f, +9.633163218e-02f, +7.939541162e-02f, +5.978920191e-02f, +4.053924233e-02f, +2.408565969e-02f, +1.183542300e-02f, +4.057898625e-03f, +9.983539900e-05f, -1.202974244e-03f, -1.082580669e-03f, -5.070006944e-04f, +1.650355829e-05f, -6.697523430e-06f, -6.424848103e-05f, -1.615052594e-04f, -2.916694746e-04f, -4.336449694e-04f, -5.548944887e-04f, -6.193125111e-04f, -5.980462265e-04f, -4.796812647e-04f, -2.759923601e-04f, -2.076481481e-05f, +2.384054602e-04f, +4.528526219e-04f, +5.859368034e-04f, +6.221753681e-04f, +5.695813083e-04f, +4.548828464e-04f, +3.137961612e-04f, +1.800441102e-04f, +7.683676646e-05f, +1.317849311e-05f, -1.468817924e-05f, -1.826129538e-05f, +3.155564535e-04f, -1.589372361e-03f, -6.099942510e-03f, -1.285916739e-02f, -1.977126055e-02f, -2.335155950e-02f, -2.007769848e-02f, -8.239538502e-03f, +1.065688480e-02f, +3.181939660e-02f, +4.871540533e-02f, +5.565569508e-02f, +5.021635132e-02f, +3.430090605e-02f, +1.330491601e-02f, -6.193506755e-03f, -1.906981168e-02f, -2.337718290e-02f, -2.048017308e-02f, -1.377666400e-02f, -6.847484331e-03f, -2.003022974e-03f, +1.977064931e-04f, +4.960019483e-04f, +2.501314587e-05f, +9.676543903e-05f, +1.811106325e-04f, +2.289221454e-04f, +1.856406436e-04f, +2.375097296e-05f, -2.303534036e-04f, -4.938234485e-04f, -6.565707484e-04f, -6.314872159e-04f, -4.005848091e-04f, -3.117049891e-05f, +3.492281796e-04f, +6.082368464e-04f, +6.664756702e-04f, +5.286486484e-04f, +2.736065296e-04f, +1.139117981e-05f, -1.682122012e-04f, -2.293516403e-04f, -1.924621382e-04f, -1.101176588e-04f, -3.409543201e-05f, +7.708395271e-06f, /* 2, 3 (24) */ -1.003465767e-03f, -1.249075135e-03f, -2.461857536e-04f, +3.213616998e-03f, +1.033292553e-02f, +2.187473170e-02f, +3.773480860e-02f, +5.668604581e-02f, +7.642843195e-02f, +9.398605033e-02f, +1.063703621e-01f, +1.113238973e-01f, +1.079140369e-01f, +9.678448480e-02f, +7.998134843e-02f, +6.041137728e-02f, +4.110882364e-02f, +2.454054253e-02f, +1.214921916e-02f, +4.237942736e-03f, +1.766721655e-04f, -1.189795751e-03f, -1.097268848e-03f, -5.252619897e-04f, +1.679975971e-05f, -5.504866354e-06f, -6.185020561e-05f, -1.578957793e-04f, -2.872782033e-04f, -4.293331335e-04f, -5.517845608e-04f, -6.184818694e-04f, -6.001778064e-04f, -4.847944527e-04f, -2.833606028e-04f, -2.906522245e-05f, +2.307484740e-04f, +4.472398691e-04f, +5.832249218e-04f, +6.224854107e-04f, +5.723386911e-04f, +4.590582325e-04f, +3.182493353e-04f, +1.838469319e-04f, +7.947366616e-05f, +1.458030965e-05f, -1.425526179e-05f, -1.838235768e-05f, +3.405695994e-04f, -1.492606922e-03f, -5.918831878e-03f, -1.263024524e-02f, -1.958561990e-02f, -2.332780853e-02f, -2.030805188e-02f, -8.733361951e-03f, +1.000031405e-02f, +3.118790938e-02f, +4.831482052e-02f, +5.562452458e-02f, +5.056557950e-02f, +3.490914290e-02f, +1.397139168e-02f, -5.664858107e-03f, -1.879620515e-02f, -2.336579172e-02f, -2.064838528e-02f, -1.400601564e-02f, -7.039946469e-03f, -2.113140633e-03f, +1.636110611e-04f, +5.037103435e-04f, +2.330784222e-05f, +9.413399264e-05f, +1.787278146e-04f, +2.285566754e-04f, +1.887644956e-04f, +3.050171218e-05f, -2.217243550e-04f, -4.865439971e-04f, -6.540144025e-04f, -6.355156147e-04f, -4.104481502e-04f, -4.362308645e-05f, +3.385731614e-04f, +6.029721417e-04f, +6.678694090e-04f, +5.352757180e-04f, +2.822552695e-04f, +1.868387906e-05f, -1.643645643e-04f, -2.291478507e-04f, -1.946071598e-04f, -1.128183026e-04f, -3.602089138e-05f, +6.978371850e-06f, /* 2, 4 (24) */ -9.866660070e-04f, -1.254580002e-03f, -3.080359592e-04f, +3.055721218e-03f, +1.004564733e-02f, +2.144539857e-02f, +3.718302404e-02f, +5.606756394e-02f, +7.582825414e-02f, +9.350125588e-02f, +1.060870015e-01f, +1.112948321e-01f, +1.081447854e-01f, +9.723172467e-02f, +8.056457335e-02f, +6.103386269e-02f, +4.168116233e-02f, +2.499960077e-02f, +1.246746849e-02f, +4.421789668e-03f, +2.561458316e-04f, -1.175215441e-03f, -1.111524110e-03f, -5.436443474e-04f, +1.707466226e-05f, -4.345994203e-06f, -5.949171285e-05f, -1.543200745e-04f, -2.829003102e-04f, -4.250025045e-04f, -5.486196193e-04f, -6.175667733e-04f, -6.022126246e-04f, -4.898217239e-04f, -2.906760184e-04f, -3.736011364e-05f, +2.230481888e-04f, +4.415467146e-04f, +5.804165871e-04f, +6.227065429e-04f, +5.750336461e-04f, +4.632068992e-04f, +3.227096598e-04f, +1.876802906e-04f, +8.215020841e-05f, +1.601799522e-05f, -1.379807969e-05f, -1.849245808e-05f, +3.638774416e-04f, -1.398472929e-03f, -5.740104063e-03f, -1.240168857e-02f, -1.939685541e-02f, -2.329730682e-02f, -2.052977624e-02f, -9.219905948e-03f, +9.346299651e-03f, +3.055239377e-02f, +4.790437237e-02f, +5.558090149e-02f, +5.090415266e-02f, +3.551211504e-02f, +1.463926109e-02f, -5.129582389e-03f, -1.851394988e-02f, -2.334710784e-02f, -2.081274984e-02f, -1.423516349e-02f, -7.234553629e-03f, -2.225958936e-03f, +1.275901697e-04f, +5.106887154e-04f, +2.164017338e-05f, +9.151834969e-05f, +1.763117176e-04f, +2.281015201e-04f, +1.917680365e-04f, +3.715568749e-05f, -2.131101909e-04f, -4.791677130e-04f, -6.512705711e-04f, -6.393348523e-04f, -4.201676808e-04f, -5.606007047e-05f, +3.277986126e-04f, +5.975053183e-04f, +6.690637871e-04f, +5.417824102e-04f, +2.908954441e-04f, +2.605992372e-05f, -1.603965089e-04f, -2.288442673e-04f, -1.967061477e-04f, -1.155259551e-04f, -3.798183208e-05f, +6.213268125e-06f, /* 2, 5 (24) */ -9.695913448e-04f, -1.258925996e-03f, -3.675276721e-04f, +2.901401144e-03f, +9.762747015e-03f, +2.102039606e-02f, +3.663440442e-02f, +5.544999717e-02f, +7.522604152e-02f, +9.301143415e-02f, +1.057963255e-01f, +1.112574720e-01f, +1.083678336e-01f, +9.767327138e-02f, +8.114498994e-02f, +6.165656923e-02f, +4.225619598e-02f, +2.546280767e-02f, +1.279017815e-02f, +4.609469958e-03f, +3.382960400e-04f, -1.159197446e-03f, -1.125322189e-03f, -5.621368055e-04f, +1.732869222e-05f, -3.220582194e-06f, -5.717297374e-05f, -1.507785496e-04f, -2.785366386e-04f, -4.206542003e-04f, -5.454007527e-04f, -6.165679301e-04f, -6.041507306e-04f, -4.947623787e-04f, -2.979373002e-04f, -4.564791482e-05f, +2.153060157e-04f, +4.357740323e-04f, +5.775119374e-04f, +6.228382017e-04f, +5.776651480e-04f, +4.673277037e-04f, +3.271762009e-04f, +1.915436659e-04f, +8.486632263e-05f, +1.749181816e-05f, -1.331621398e-05f, -1.859120906e-05f, +3.855176150e-04f, -1.306954580e-03f, -5.563792346e-03f, -1.217358705e-02f, -1.920508737e-02f, -2.326015113e-02f, -2.074288643e-02f, -9.699073661e-03f, +8.695029080e-03f, +2.991305892e-02f, +4.748420469e-02f, +5.552484142e-02f, +5.123195127e-02f, +3.610962036e-02f, +1.530832487e-02f, -4.587799978e-03f, -1.822305443e-02f, -2.332104792e-02f, -2.097314635e-02f, -1.446400776e-02f, -7.431259777e-03f, -2.341484891e-03f, +8.960833763e-05f, +5.169019835e-04f, +2.001033321e-05f, +8.891965578e-05f, +1.738641378e-04f, +2.275582344e-04f, +1.946515064e-04f, +4.371121788e-05f, -2.045141480e-04f, -4.716980567e-04f, -6.483412393e-04f, -6.429442762e-04f, -4.297401776e-04f, -6.847700495e-05f, +3.169082289e-04f, +5.918377328e-04f, +6.700574097e-04f, +5.481654794e-04f, +2.995236074e-04f, +3.351716690e-05f, -1.563082506e-04f, -2.284395699e-04f, -1.987572655e-04f, -1.182392537e-04f, -3.997782979e-05f, +5.412726337e-06f, /* 2, 6 (24) */ -9.522626525e-04f, -1.262146578e-03f, -4.247006458e-04f, +2.750622594e-03f, +9.484210377e-03f, +2.059974186e-02f, +3.608900367e-02f, +5.483342924e-02f, +7.462189079e-02f, +9.251667177e-02f, +1.054983882e-01f, +1.112118241e-01f, +1.085831396e-01f, +9.810904542e-02f, +8.172250187e-02f, +6.227940744e-02f, +4.283386113e-02f, +2.593013537e-02f, +1.311735436e-02f, +4.801013624e-03f, +4.231623627e-04f, -1.141705627e-03f, -1.138638403e-03f, -5.807280146e-04f, +1.756227598e-05f, -2.128299365e-06f, -5.489394744e-05f, -1.472715951e-04f, -2.741880197e-04f, -4.162893342e-04f, -5.421290560e-04f, -6.154860638e-04f, -6.059921968e-04f, -4.996157398e-04f, -3.051431560e-04f, -5.392705441e-05f, +2.075233773e-04f, +4.299227169e-04f, +5.745111347e-04f, +6.228798434e-04f, +5.802321806e-04f, +4.714195013e-04f, +3.316480143e-04f, +1.954365230e-04f, +8.762192522e-05f, +1.900203890e-05f, -1.280924741e-05f, -1.867821997e-05f, +4.055279482e-04f, -1.218034924e-03f, -5.389928208e-03f, -1.194602881e-02f, -1.901043587e-02f, -2.321643991e-02f, -2.094740058e-02f, -1.017077172e-02f, +8.046687841e-03f, +2.927011464e-02f, +4.705446451e-02f, +5.545636442e-02f, +5.154885950e-02f, +3.670145809e-02f, +1.597838228e-02f, -4.039634499e-03f, -1.792353082e-02f, -2.328753075e-02f, -2.112945460e-02f, -1.469244733e-02f, -7.630017042e-03f, -2.459724145e-03f, +4.963050784e-05f, +5.223147098e-04f, +1.841848797e-05f, +8.633902784e-05f, +1.713868621e-04f, +2.269283978e-04f, +1.974151997e-04f, +5.016668252e-05f, -1.959394305e-04f, -4.641385077e-04f, -6.452284613e-04f, -6.463433227e-04f, -4.391624825e-04f, -8.086945297e-05f, +3.059057580e-04f, +5.859708285e-04f, +6.708489603e-04f, +5.544217142e-04f, +3.081362939e-04f, +4.105340592e-05f, -1.521000643e-04f, -2.279324725e-04f, -2.007586760e-04f, -1.209568106e-04f, -4.200843041e-05f, +4.576406290e-06f, /* 2, 7 (24) */ -9.347003766e-04f, -1.264274877e-03f, -4.795945933e-04f, +2.603350999e-03f, +9.210022357e-03f, +2.018345253e-02f, +3.554687461e-02f, +5.421794317e-02f, +7.401589859e-02f, +9.201705604e-02f, +1.051932450e-01f, +1.111578970e-01f, +1.087906630e-01f, +9.853896813e-02f, +8.229701301e-02f, +6.290228728e-02f, +4.341409331e-02f, +2.640155487e-02f, +1.344900237e-02f, +4.996450147e-03f, +5.107842879e-04f, -1.122703589e-03f, -1.151447651e-03f, -5.994062345e-04f, +1.777583992e-05f, -1.068808779e-06f, -5.265458140e-05f, -1.437995866e-04f, -2.698552725e-04f, -4.119090148e-04f, -5.388056300e-04f, -6.143219148e-04f, -6.077371186e-04f, -5.043811523e-04f, -3.122923087e-04f, -6.219596318e-05f, +1.997017072e-04f, +4.239936841e-04f, +5.714143646e-04f, +6.228309436e-04f, +5.827337377e-04f, +4.754811461e-04f, +3.361241455e-04f, +1.993583130e-04f, +9.041691952e-05f, +2.054890974e-05f, -1.227676465e-05f, -1.875309709e-05f, +4.239464361e-04f, -1.131695896e-03f, -5.218541346e-03f, -1.171910042e-02f, -1.881302067e-02f, -2.316627323e-02f, -2.114334001e-02f, -1.063491023e-02f, +7.401459380e-03f, +2.862377132e-02f, +4.661530203e-02f, +5.537549496e-02f, +5.185476526e-02f, +3.728742892e-02f, +1.664923124e-02f, -3.485212785e-03f, -1.761539453e-02f, -2.324647735e-02f, -2.128155467e-02f, -1.492037980e-02f, -7.830775718e-03f, -2.580680955e-03f, +7.622077426e-06f, +5.268911161e-04f, +1.686477662e-05f, +8.377755386e-05f, +1.688816670e-04f, +2.262136130e-04f, +2.000594643e-04f, +5.652052112e-05f, -1.873892085e-04f, -4.564925630e-04f, -6.419343587e-04f, -6.495315166e-04f, -4.484315048e-04f, -9.323298872e-05f, +2.947949980e-04f, +5.799061350e-04f, +6.714372019e-04f, +5.605479395e-04f, +3.167300202e-04f, +4.866638302e-05f, -1.477722844e-04f, -2.273217245e-04f, -2.027085424e-04f, -1.236772130e-04f, -4.407314990e-05f, +3.703985872e-06f, /* 2, 8 (24) */ -9.169245366e-04f, -1.265343686e-03f, -5.322491747e-04f, +2.459551413e-03f, +8.940167085e-03f, +1.977154351e-02f, +3.500806898e-02f, +5.360362126e-02f, +7.340816147e-02f, +9.151267488e-02f, +1.048809527e-01f, +1.110957010e-01f, +1.089903647e-01f, +9.896296182e-02f, +8.286842737e-02f, +6.352511822e-02f, +4.399682704e-02f, +2.687703602e-02f, +1.378512652e-02f, +5.195808460e-03f, +6.012012074e-04f, -1.102154679e-03f, -1.163724415e-03f, -6.181593316e-04f, +1.796981020e-05f, -4.176771401e-08f, -5.045481151e-05f, -1.403628855e-04f, -2.655392034e-04f, -4.075143456e-04f, -5.354315812e-04f, -6.130762398e-04f, -6.093856145e-04f, -5.090579844e-04f, -3.193834961e-04f, -7.045307472e-05f, +1.918424496e-04f, +4.179878698e-04f, +5.682218367e-04f, +6.226909977e-04f, +5.851688234e-04f, +4.795114912e-04f, +3.406036299e-04f, +2.033084726e-04f, +9.325119560e-05f, +2.213267467e-05f, -1.171835245e-05f, -1.881544380e-05f, +4.408112127e-04f, -1.047918342e-03f, -5.049659679e-03f, -1.149288680e-02f, -1.861296120e-02f, -2.310975271e-02f, -2.133072921e-02f, -1.109140279e-02f, +6.759525021e-03f, +2.797423980e-02f, +4.616687052e-02f, +5.528226198e-02f, +5.214956026e-02f, +3.786733506e-02f, +1.732066845e-02f, -2.924664845e-03f, -1.729866451e-02f, -2.319781096e-02f, -2.142932695e-02f, -1.514770153e-02f, -8.033484261e-03f, -2.704358168e-03f, -3.645107247e-05f, +5.305951020e-04f, +1.534931117e-05f, +8.123629262e-05f, +1.663503184e-04f, +2.254155049e-04f, +2.025847015e-04f, +6.277123418e-05f, -1.788666174e-04f, -4.487637350e-04f, -6.384611192e-04f, -6.525084716e-04f, -4.575442216e-04f, -1.055631995e-04f, +2.835797956e-04f, +5.736452673e-04f, +6.718209774e-04f, +5.665410181e-04f, +3.253012863e-04f, +5.635378605e-05f, -1.433253052e-04f, -2.266061112e-04f, -2.046050295e-04f, -1.263990239e-04f, -4.617147413e-05f, +2.795161580e-06f, /* 2, 9 (24) */ -8.989547265e-04f, -1.265385454e-03f, -5.827039862e-04f, +2.319188527e-03f, +8.674627881e-03f, +1.936402917e-02f, +3.447263740e-02f, +5.299054502e-02f, +7.279877586e-02f, +9.100361690e-02f, +1.045615692e-01f, +1.110252480e-01f, +1.091822071e-01f, +9.938094969e-02f, +8.343664921e-02f, +6.414780922e-02f, +4.458199587e-02f, +2.735654751e-02f, +1.412573014e-02f, +5.399116933e-03f, +6.944524030e-04f, -1.080022004e-03f, -1.175442768e-03f, -6.369747754e-04f, +1.814461260e-05f, +9.531721336e-07f, -4.829456226e-05f, -1.369618388e-04f, -2.612406066e-04f, -4.031064244e-04f, -5.320080214e-04f, -6.117498117e-04f, -6.109378255e-04f, -5.136456269e-04f, -3.264154723e-04f, -7.869682585e-05f, +1.839470589e-04f, +4.119062305e-04f, +5.649337840e-04f, +6.224595207e-04f, +5.875364520e-04f, +4.835093887e-04f, +3.450854932e-04f, +2.072864241e-04f, +9.612463026e-05f, +2.375356921e-05f, -1.113359983e-05f, -1.886486066e-05f, +4.561605239e-04f, -9.666820497e-04f, -4.883309360e-03f, -1.126747130e-02f, -1.841037650e-02f, -2.304698148e-02f, -2.150959583e-02f, -1.154016652e-02f, +6.121063902e-03f, +2.732173133e-02f, +4.570932630e-02f, +5.517669878e-02f, +5.243314005e-02f, +3.844098032e-02f, +1.799248942e-02f, -2.358123827e-03f, -1.697336322e-02f, -2.314145718e-02f, -2.157265226e-02f, -1.537430764e-02f, -8.238089290e-03f, -2.830757192e-03f, -8.262254660e-05f, +5.333902636e-04f, +1.387217702e-05f, +7.871627351e-05f, +1.637945700e-04f, +2.245357194e-04f, +2.049913645e-04f, +6.891738327e-05f, -1.703747559e-04f, -4.409555500e-04f, -6.348109959e-04f, -6.552738902e-04f, -4.664976795e-04f, -1.178556876e-04f, +2.722640448e-04f, +5.671899256e-04f, +6.719992106e-04f, +5.723978525e-04f, +3.338465777e-04f, +6.411324919e-05f, -1.387595813e-04f, -2.257844555e-04f, -2.064463045e-04f, -1.291207824e-04f, -4.830285877e-05f, +1.849649032e-06f, /* 2,10 (24) */ -8.808101138e-04f, -1.264432282e-03f, -6.309985484e-04f, +2.182226688e-03f, +8.413387275e-03f, +1.896092274e-02f, +3.394062938e-02f, +5.237879521e-02f, +7.218783803e-02f, +9.048997127e-02f, +1.042351537e-01f, +1.109465511e-01f, +1.093661542e-01f, +9.979285592e-02f, +8.400158299e-02f, +6.477026874e-02f, +4.516953232e-02f, +2.784005690e-02f, +1.447081564e-02f, +5.606403357e-03f, +7.905770333e-04f, -1.056268435e-03f, -1.186576368e-03f, -6.558396361e-04f, +1.830067241e-05f, +1.916364455e-06f, -4.617374690e-05f, -1.335967791e-04f, -2.569602633e-04f, -3.986863436e-04f, -5.285360669e-04f, -6.103434187e-04f, -6.123939157e-04f, -5.181434937e-04f, -3.333870066e-04f, -8.692565704e-05f, +1.760169995e-04f, +4.057497427e-04f, +5.615504634e-04f, +6.221360480e-04f, +5.898356489e-04f, +4.874736909e-04f, +3.495687512e-04f, +2.112915759e-04f, +9.903708683e-05f, +2.541182018e-05f, -1.052209830e-05f, -1.890094555e-05f, +4.700327009e-04f, -8.879657762e-04f, -4.719514790e-03f, -1.104293558e-02f, -1.820538514e-02f, -2.297806409e-02f, -2.167997059e-02f, -1.198112207e-02f, +5.486252906e-03f, +2.666645744e-02f, +4.524282862e-02f, +5.505884309e-02f, +5.270540410e-02f, +3.900817025e-02f, +1.866448863e-02f, -1.785725975e-03f, -1.663951665e-02f, -2.307734393e-02f, -2.171141184e-02f, -1.560009209e-02f, -8.444535595e-03f, -2.959877975e-03f, -1.309254054e-04f, +5.352399126e-04f, +1.243343331e-05f, +7.621849629e-05f, +1.612161629e-04f, +2.235759227e-04f, +2.072799585e-04f, +7.495759125e-05f, -1.619166851e-04f, -4.330715464e-04f, -6.309863052e-04f, -6.578275632e-04f, -4.752889960e-04f, -1.301060727e-04f, +2.608516846e-04f, +5.605418947e-04f, +6.719709070e-04f, +5.781153860e-04f, +3.423623664e-04f, +7.194235371e-05f, -1.340756278e-04f, -2.248556185e-04f, -2.082305379e-04f, -1.318410047e-04f, -5.046672918e-05f, +8.671834766e-07f, /* 2,11 (24) */ -8.625094414e-04f, -1.262515917e-03f, -6.771722953e-04f, +2.048629909e-03f, +8.156427011e-03f, +1.856223640e-02f, +3.341209331e-02f, +5.176845179e-02f, +7.157544412e-02f, +8.997182778e-02f, +1.039017667e-01f, +1.108596255e-01f, +1.095421712e-01f, +1.001986057e-01f, +8.456313346e-02f, +6.539240479e-02f, +4.575936797e-02f, +2.832753059e-02f, +1.482038439e-02f, +5.817694933e-03f, +8.896141201e-04f, -1.030856615e-03f, -1.197098466e-03f, -6.747405816e-04f, +1.843841419e-05f, +2.848168129e-06f, -4.409226758e-05f, -1.302680244e-04f, -2.526989419e-04f, -3.942551895e-04f, -5.250168391e-04f, -6.088578646e-04f, -6.137540712e-04f, -5.225510217e-04f, -3.402968852e-04f, -9.513801287e-05f, +1.680537451e-04f, +3.995194025e-04f, +5.580721558e-04f, +6.217201350e-04f, +5.920654505e-04f, +4.914032495e-04f, +3.540524109e-04f, +2.153233223e-04f, +1.019884152e-04f, +2.710764555e-05f, -9.883441999e-06f, -1.892329380e-05f, +4.824661342e-04f, -8.117472799e-04f, -4.558298627e-03f, -1.081935966e-02f, -1.799810518e-02f, -2.290310650e-02f, -2.184188727e-02f, -1.241419362e-02f, +4.855266601e-03f, +2.600862987e-02f, +4.476753963e-02f, +5.492873702e-02f, +5.296625578e-02f, +3.956871215e-02f, +1.933645954e-02f, -1.207610589e-03f, -1.629715428e-02f, -2.300540157e-02f, -2.184548747e-02f, -1.582494771e-02f, -8.652766133e-03f, -3.091718979e-03f, -1.813921345e-04f, +5.361070961e-04f, +1.103311328e-05f, +7.374393090e-05f, +1.586168246e-04f, +2.225377996e-04f, +2.094510392e-04f, +8.089054244e-05f, -1.534954273e-04f, -4.251152730e-04f, -6.269894260e-04f, -6.601693699e-04f, -4.839153604e-04f, -1.423099933e-04f, +2.493466977e-04f, +5.537030433e-04f, +6.717351548e-04f, +5.836906051e-04f, +3.508451129e-04f, +7.983862880e-05f, -1.292740206e-04f, -2.238185004e-04f, -2.099559051e-04f, -1.345581839e-04f, -5.266248031e-05f, -1.524797041e-07f, /* 2,12 (24) */ -8.440710273e-04f, -1.259667749e-03f, -7.212645629e-04f, +1.918361885e-03f, +7.903728069e-03f, +1.816798121e-02f, +3.288707647e-02f, +5.115959392e-02f, +7.096169005e-02f, +8.944927676e-02f, +1.035614698e-01f, +1.107644875e-01f, +1.097102249e-01f, +1.005981251e-01f, +8.512120561e-02f, +6.601412492e-02f, +4.635143342e-02f, +2.881893384e-02f, +1.517443680e-02f, +6.033018255e-03f, +9.916025353e-04f, -1.003748969e-03f, -1.206981908e-03f, -6.936638754e-04f, +1.855826167e-05f, +3.748947027e-06f, -4.205001549e-05f, -1.269758788e-04f, -2.484573980e-04f, -3.898140421e-04f, -5.214514630e-04f, -6.072939681e-04f, -6.150185008e-04f, -5.268676710e-04f, -3.471439106e-04f, -1.033323424e-04f, +1.600587785e-04f, +3.932162260e-04f, +5.544991655e-04f, +6.212113577e-04f, +5.942249049e-04f, +4.952969171e-04f, +3.585354695e-04f, +2.193810432e-04f, +1.049784515e-04f, +2.884125426e-05f, -9.217227941e-06f, -1.893149833e-05f, +4.934992475e-04f, -7.380033490e-04f, -4.399681803e-03f, -1.059682186e-02f, -1.778865414e-02f, -2.282221596e-02f, -2.199538270e-02f, -1.283930889e-02f, +4.228277175e-03f, +2.534846050e-02f, +4.428362427e-02f, +5.478642702e-02f, +5.321560248e-02f, +4.012241519e-02f, +2.000819470e-02f, -6.239199835e-04f, -1.594630917e-02f, -2.292556295e-02f, -2.197476149e-02f, -1.604876621e-02f, -8.862722038e-03f, -3.226277163e-03f, -2.340546149e-04f, +5.359546164e-04f, +9.671224678e-06f, +7.129351731e-05f, +1.559982682e-04f, +2.214230526e-04f, +2.115052124e-04f, +8.671498277e-05f, -1.451139647e-04f, -4.170902870e-04f, -6.228227982e-04f, -6.622992779e-04f, -4.923740349e-04f, -1.544631089e-04f, +2.377531086e-04f, +5.466753230e-04f, +6.712911252e-04f, +5.891205406e-04f, +3.592912675e-04f, +8.779955236e-05f, -1.243553968e-04f, -2.226720419e-04f, -2.116205870e-04f, -1.372707913e-04f, -5.488947664e-05f, -1.209564500e-06f, /* 2,13 (24) */ -8.255127656e-04f, -1.255918802e-03f, -7.633145784e-04f, +1.791386006e-03f, +7.655270671e-03f, +1.777816717e-02f, +3.236562501e-02f, +5.055229995e-02f, +7.034667155e-02f, +8.892240909e-02f, +1.032143259e-01f, +1.106611551e-01f, +1.098702837e-01f, +1.009913413e-01f, +8.567570478e-02f, +6.663533628e-02f, +4.694565832e-02f, +2.931423076e-02f, +1.553297227e-02f, +6.252399298e-03f, +1.096580987e-03f, -9.749077150e-04f, -1.216199136e-03f, -7.125953738e-04f, +1.866063758e-05f, +4.619069815e-06f, -4.004687109e-05f, -1.237206317e-04f, -2.442363740e-04f, -3.853639748e-04f, -5.178410678e-04f, -6.056525629e-04f, -6.161874357e-04f, -5.310929250e-04f, -3.539269020e-04f, -1.115070997e-04f, +1.520335911e-04f, +3.868412484e-04f, +5.508318208e-04f, +6.206093129e-04f, +5.963130719e-04f, +4.991535465e-04f, +3.630169159e-04f, +2.234641050e-04f, +1.080070184e-04f, +3.061284599e-05f, -8.523056161e-06f, -1.892514973e-05f, +5.031704722e-04f, -6.667098317e-04f, -4.243683534e-03f, -1.037539880e-02f, -1.757714893e-02f, -2.273550098e-02f, -2.214049667e-02f, -1.325639918e-02f, +3.605454377e-03f, +2.468616123e-02f, +4.379125023e-02f, +5.463196391e-02f, +5.345335559e-02f, +4.066909051e-02f, +2.067948582e-02f, -3.479944287e-05f, -1.558701790e-02f, -2.283776339e-02f, -2.209911688e-02f, -1.627143825e-02f, -9.074342625e-03f, -3.363547954e-03f, -2.889440915e-04f, +5.347450519e-04f, +8.347750126e-06f, +6.886816537e-05f, +1.533621916e-04f, +2.202334011e-04f, +2.134431333e-04f, +9.242971990e-05f, -1.367752381e-04f, -4.090001528e-04f, -6.184889212e-04f, -6.642173426e-04f, -5.006623563e-04f, -1.665611023e-04f, +2.260749816e-04f, +5.394607684e-04f, +6.706380730e-04f, +5.944022694e-04f, +3.676972726e-04f, +9.582255189e-05f, -1.193204547e-04f, -2.214152249e-04f, -2.132227712e-04f, -1.399772766e-04f, -5.714705212e-05f, -2.304273786e-06f, /* 2,14 (24) */ -8.068521280e-04f, -1.251299732e-03f, -8.033614495e-04f, +1.667665374e-03f, +7.411034297e-03f, +1.739280319e-02f, +3.184778394e-02f, +4.994664739e-02f, +6.973048411e-02f, +8.839131616e-02f, +1.028603990e-01f, +1.105496480e-01f, +1.100223173e-01f, +1.013781825e-01f, +8.622653660e-02f, +6.725594559e-02f, +4.754197139e-02f, +2.981338430e-02f, +1.589598919e-02f, +6.475863403e-03f, +1.204588005e-03f, -9.442948690e-04f, -1.224722192e-03f, -7.315205235e-04f, +1.874596349e-05f, +5.458909754e-06f, -3.808270418e-05f, -1.205025587e-04f, -2.400365990e-04f, -3.809060541e-04f, -5.141867861e-04f, -6.039344968e-04f, -6.172611289e-04f, -5.352262904e-04f, -3.606446961e-04f, -1.196607440e-04f, +1.439796827e-04f, +3.803955241e-04f, +5.470704735e-04f, +6.199136183e-04f, +5.983290236e-04f, +5.029719919e-04f, +3.674957301e-04f, +2.275718599e-04f, +1.110739246e-04f, +3.242261104e-05f, -7.800529930e-06f, -1.890383645e-05f, +5.115182223e-04f, -5.978416663e-04f, -4.090321343e-03f, -1.015516540e-02f, -1.736370579e-02f, -2.264307126e-02f, -2.227727190e-02f, -1.366539933e-02f, +2.986965455e-03f, +2.402194388e-02f, +4.329058788e-02f, +5.446540281e-02f, +5.367943057e-02f, +4.120855128e-02f, +2.135012389e-02f, +5.596028265e-04f, -1.521932063e-02f, -2.274194084e-02f, -2.221843734e-02f, -1.649285348e-02f, -9.287565396e-03f, -3.503525231e-03f, -3.460911436e-04f, +5.324407781e-04f, +7.062647538e-06f, +6.646875466e-05f, +1.507102769e-04f, +2.189705797e-04f, +2.152655055e-04f, +9.803362332e-05f, -1.284821462e-04f, -4.008484398e-04f, -6.139903527e-04f, -6.659237071e-04f, -5.087777361e-04f, -1.785996809e-04f, +2.143164194e-04f, +5.320614954e-04f, +6.697753378e-04f, +5.995329158e-04f, +3.760595635e-04f, +1.039050054e-04f, -1.141699541e-04f, -2.200470734e-04f, -2.147606532e-04f, -1.426760689e-04f, -5.943451013e-05f, -3.436788838e-06f, /* 2,15 (24) */ -7.881061645e-04f, -1.245840822e-03f, -8.414441537e-04f, +1.547162816e-03f, +7.170997698e-03f, +1.701189714e-02f, +3.133359716e-02f, +4.934271290e-02f, +6.911322298e-02f, +8.785608987e-02f, +1.024997543e-01f, +1.104299873e-01f, +1.101662970e-01f, +1.017585781e-01f, +8.677360707e-02f, +6.787585921e-02f, +4.814030042e-02f, +3.031635629e-02f, +1.626348492e-02f, +6.703435263e-03f, +1.315661930e-03f, -9.118722579e-04f, -1.232522722e-03f, -7.504243599e-04f, +1.881465967e-05f, +6.268844507e-06f, -3.615737416e-05f, -1.173219208e-04f, -2.358587890e-04f, -3.764413397e-04f, -5.104897536e-04f, -6.021406320e-04f, -6.182398555e-04f, -5.392672972e-04f, -3.672961470e-04f, -1.277917407e-04f, +1.358985609e-04f, +3.738801264e-04f, +5.432154992e-04f, +6.191239125e-04f, +6.002718445e-04f, +5.067511085e-04f, +3.719708835e-04f, +2.317036463e-04f, +1.141789651e-04f, +3.427073012e-05f, -7.049255941e-06f, -1.886714492e-05f, +5.185808699e-04f, -5.313729117e-04f, -3.939611066e-03f, -9.936194824e-03f, -1.714844029e-02f, -2.254503763e-02f, -2.240575405e-02f, -1.406624777e-02f, +2.372975103e-03f, +2.335602018e-02f, +4.278181014e-02f, +5.428680313e-02f, +5.389374699e-02f, +4.174061278e-02f, +2.201989923e-02f, +1.159135742e-03f, -1.484326106e-02f, -2.263803584e-02f, -2.233260729e-02f, -1.671290055e-02f, -9.502326049e-03f, -3.646201300e-03f, -4.055256537e-04f, +5.290039893e-04f, +5.815850534e-06f, +6.409613443e-05f, +1.480441893e-04f, +2.176363376e-04f, +2.169730800e-04f, +1.035256244e-04f, -1.202375441e-04f, -3.926387209e-04f, -6.093297069e-04f, -6.674186018e-04f, -5.167176626e-04f, -1.905745794e-04f, +2.024815608e-04f, +5.244797011e-04f, +6.687023441e-04f, +6.045096535e-04f, +3.843745706e-04f, +1.120442422e-04f, -1.089047163e-04f, -2.185666547e-04f, -2.162324372e-04f, -1.453655767e-04f, -6.175112348e-05f, -4.607268862e-06f, /* 2,16 (24) */ -7.692915048e-04f, -1.239571978e-03f, -8.776015278e-04f, +1.429840895e-03f, +6.935138909e-03f, +1.663545580e-02f, +3.082310740e-02f, +4.874057226e-02f, +6.849498313e-02f, +8.731682257e-02f, +1.021324582e-01f, +1.103021955e-01f, +1.103021955e-01f, +1.021324582e-01f, +8.731682257e-02f, +6.849498313e-02f, +4.874057226e-02f, +3.082310740e-02f, +1.663545580e-02f, +6.935138909e-03f, +1.429840895e-03f, -8.776015278e-04f, -1.239571978e-03f, -7.692915048e-04f, +1.886714492e-05f, +7.049255941e-06f, -3.427073012e-05f, -1.141789651e-04f, -2.317036463e-04f, -3.719708835e-04f, -5.067511085e-04f, -6.002718445e-04f, -6.191239125e-04f, -5.432154992e-04f, -3.738801264e-04f, -1.358985609e-04f, +1.277917407e-04f, +3.672961470e-04f, +5.392672972e-04f, +6.182398555e-04f, +6.021406320e-04f, +5.104897536e-04f, +3.764413397e-04f, +2.358587890e-04f, +1.173219208e-04f, +3.615737416e-05f, -6.268844507e-06f, -1.881465967e-05f, +5.243967204e-04f, -4.672767772e-04f, -3.791566877e-03f, -9.718558487e-03f, -1.693146721e-02f, -2.244151201e-02f, -2.252599159e-02f, -1.445888649e-02f, +1.763645396e-03f, +2.268860158e-02f, +4.226509248e-02f, +5.409622855e-02f, +5.409622855e-02f, +4.226509248e-02f, +2.268860158e-02f, +1.763645396e-03f, -1.445888649e-02f, -2.252599159e-02f, -2.244151201e-02f, -1.693146721e-02f, -9.718558487e-03f, -3.791566877e-03f, -4.672767772e-04f, +5.243967204e-04f, +4.607268862e-06f, +6.175112348e-05f, +1.453655767e-04f, +2.162324372e-04f, +2.185666547e-04f, +1.089047163e-04f, -1.120442422e-04f, -3.843745706e-04f, -6.045096535e-04f, -6.687023441e-04f, -5.244797011e-04f, -2.024815608e-04f, +1.905745794e-04f, +5.167176626e-04f, +6.674186018e-04f, +6.093297069e-04f, +3.926387209e-04f, +1.202375441e-04f, -1.035256244e-04f, -2.169730800e-04f, -2.176363376e-04f, -1.480441893e-04f, -6.409613443e-05f, -5.815850534e-06f, /* 2,17 (24) */ -7.504243599e-04f, -1.232522722e-03f, -9.118722579e-04f, +1.315661930e-03f, +6.703435263e-03f, +1.626348492e-02f, +3.031635629e-02f, +4.814030042e-02f, +6.787585921e-02f, +8.677360707e-02f, +1.017585781e-01f, +1.101662970e-01f, +1.104299873e-01f, +1.024997543e-01f, +8.785608987e-02f, +6.911322298e-02f, +4.934271290e-02f, +3.133359716e-02f, +1.701189714e-02f, +7.170997698e-03f, +1.547162816e-03f, -8.414441537e-04f, -1.245840822e-03f, -7.881061645e-04f, +1.890383645e-05f, +7.800529930e-06f, -3.242261104e-05f, -1.110739246e-04f, -2.275718599e-04f, -3.674957301e-04f, -5.029719919e-04f, -5.983290236e-04f, -6.199136183e-04f, -5.470704735e-04f, -3.803955241e-04f, -1.439796827e-04f, +1.196607440e-04f, +3.606446961e-04f, +5.352262904e-04f, +6.172611289e-04f, +6.039344968e-04f, +5.141867861e-04f, +3.809060541e-04f, +2.400365990e-04f, +1.205025587e-04f, +3.808270418e-05f, -5.458909754e-06f, -1.874596349e-05f, +5.290039893e-04f, -4.055256537e-04f, -3.646201300e-03f, -9.502326049e-03f, -1.671290055e-02f, -2.233260729e-02f, -2.263803584e-02f, -1.484326106e-02f, +1.159135742e-03f, +2.201989923e-02f, +4.174061278e-02f, +5.389374699e-02f, +5.428680313e-02f, +4.278181014e-02f, +2.335602018e-02f, +2.372975103e-03f, -1.406624777e-02f, -2.240575405e-02f, -2.254503763e-02f, -1.714844029e-02f, -9.936194824e-03f, -3.939611066e-03f, -5.313729117e-04f, +5.185808699e-04f, +3.436788838e-06f, +5.943451013e-05f, +1.426760689e-04f, +2.147606532e-04f, +2.200470734e-04f, +1.141699541e-04f, -1.039050054e-04f, -3.760595635e-04f, -5.995329158e-04f, -6.697753378e-04f, -5.320614954e-04f, -2.143164194e-04f, +1.785996809e-04f, +5.087777361e-04f, +6.659237071e-04f, +6.139903527e-04f, +4.008484398e-04f, +1.284821462e-04f, -9.803362332e-05f, -2.152655055e-04f, -2.189705797e-04f, -1.507102769e-04f, -6.646875466e-05f, -7.062647538e-06f, /* 2,18 (24) */ -7.315205235e-04f, -1.224722192e-03f, -9.442948690e-04f, +1.204588005e-03f, +6.475863403e-03f, +1.589598919e-02f, +2.981338430e-02f, +4.754197139e-02f, +6.725594559e-02f, +8.622653660e-02f, +1.013781825e-01f, +1.100223173e-01f, +1.105496480e-01f, +1.028603990e-01f, +8.839131616e-02f, +6.973048411e-02f, +4.994664739e-02f, +3.184778394e-02f, +1.739280319e-02f, +7.411034297e-03f, +1.667665374e-03f, -8.033614495e-04f, -1.251299732e-03f, -8.068521280e-04f, +1.892514973e-05f, +8.523056161e-06f, -3.061284599e-05f, -1.080070184e-04f, -2.234641050e-04f, -3.630169159e-04f, -4.991535465e-04f, -5.963130719e-04f, -6.206093129e-04f, -5.508318208e-04f, -3.868412484e-04f, -1.520335911e-04f, +1.115070997e-04f, +3.539269020e-04f, +5.310929250e-04f, +6.161874357e-04f, +6.056525629e-04f, +5.178410678e-04f, +3.853639748e-04f, +2.442363740e-04f, +1.237206317e-04f, +4.004687109e-05f, -4.619069815e-06f, -1.866063758e-05f, +5.324407781e-04f, -3.460911436e-04f, -3.503525231e-03f, -9.287565396e-03f, -1.649285348e-02f, -2.221843734e-02f, -2.274194084e-02f, -1.521932063e-02f, +5.596028265e-04f, +2.135012389e-02f, +4.120855128e-02f, +5.367943057e-02f, +5.446540281e-02f, +4.329058788e-02f, +2.402194388e-02f, +2.986965455e-03f, -1.366539933e-02f, -2.227727190e-02f, -2.264307126e-02f, -1.736370579e-02f, -1.015516540e-02f, -4.090321343e-03f, -5.978416663e-04f, +5.115182223e-04f, +2.304273786e-06f, +5.714705212e-05f, +1.399772766e-04f, +2.132227712e-04f, +2.214152249e-04f, +1.193204547e-04f, -9.582255189e-05f, -3.676972726e-04f, -5.944022694e-04f, -6.706380730e-04f, -5.394607684e-04f, -2.260749816e-04f, +1.665611023e-04f, +5.006623563e-04f, +6.642173426e-04f, +6.184889212e-04f, +4.090001528e-04f, +1.367752381e-04f, -9.242971990e-05f, -2.134431333e-04f, -2.202334011e-04f, -1.533621916e-04f, -6.886816537e-05f, -8.347750126e-06f, /* 2,19 (24) */ -7.125953738e-04f, -1.216199136e-03f, -9.749077150e-04f, +1.096580987e-03f, +6.252399298e-03f, +1.553297227e-02f, +2.931423076e-02f, +4.694565832e-02f, +6.663533628e-02f, +8.567570478e-02f, +1.009913413e-01f, +1.098702837e-01f, +1.106611551e-01f, +1.032143259e-01f, +8.892240909e-02f, +7.034667155e-02f, +5.055229995e-02f, +3.236562501e-02f, +1.777816717e-02f, +7.655270671e-03f, +1.791386006e-03f, -7.633145784e-04f, -1.255918802e-03f, -8.255127656e-04f, +1.893149833e-05f, +9.217227941e-06f, -2.884125426e-05f, -1.049784515e-04f, -2.193810432e-04f, -3.585354695e-04f, -4.952969171e-04f, -5.942249049e-04f, -6.212113577e-04f, -5.544991655e-04f, -3.932162260e-04f, -1.600587785e-04f, +1.033323424e-04f, +3.471439106e-04f, +5.268676710e-04f, +6.150185008e-04f, +6.072939681e-04f, +5.214514630e-04f, +3.898140421e-04f, +2.484573980e-04f, +1.269758788e-04f, +4.205001549e-05f, -3.748947027e-06f, -1.855826167e-05f, +5.347450519e-04f, -2.889440915e-04f, -3.363547954e-03f, -9.074342625e-03f, -1.627143825e-02f, -2.209911688e-02f, -2.283776339e-02f, -1.558701790e-02f, -3.479944287e-05f, +2.067948582e-02f, +4.066909051e-02f, +5.345335559e-02f, +5.463196391e-02f, +4.379125023e-02f, +2.468616123e-02f, +3.605454377e-03f, -1.325639918e-02f, -2.214049667e-02f, -2.273550098e-02f, -1.757714893e-02f, -1.037539880e-02f, -4.243683534e-03f, -6.667098317e-04f, +5.031704722e-04f, +1.209564500e-06f, +5.488947664e-05f, +1.372707913e-04f, +2.116205870e-04f, +2.226720419e-04f, +1.243553968e-04f, -8.779955236e-05f, -3.592912675e-04f, -5.891205406e-04f, -6.712911252e-04f, -5.466753230e-04f, -2.377531086e-04f, +1.544631089e-04f, +4.923740349e-04f, +6.622992779e-04f, +6.228227982e-04f, +4.170902870e-04f, +1.451139647e-04f, -8.671498277e-05f, -2.115052124e-04f, -2.214230526e-04f, -1.559982682e-04f, -7.129351731e-05f, -9.671224678e-06f, /* 2,20 (24) */ -6.936638754e-04f, -1.206981908e-03f, -1.003748969e-03f, +9.916025353e-04f, +6.033018255e-03f, +1.517443680e-02f, +2.881893384e-02f, +4.635143342e-02f, +6.601412492e-02f, +8.512120561e-02f, +1.005981251e-01f, +1.097102249e-01f, +1.107644875e-01f, +1.035614698e-01f, +8.944927676e-02f, +7.096169005e-02f, +5.115959392e-02f, +3.288707647e-02f, +1.816798121e-02f, +7.903728069e-03f, +1.918361885e-03f, -7.212645629e-04f, -1.259667749e-03f, -8.440710273e-04f, +1.892329380e-05f, +9.883441999e-06f, -2.710764555e-05f, -1.019884152e-04f, -2.153233223e-04f, -3.540524109e-04f, -4.914032495e-04f, -5.920654505e-04f, -6.217201350e-04f, -5.580721558e-04f, -3.995194025e-04f, -1.680537451e-04f, +9.513801287e-05f, +3.402968852e-04f, +5.225510217e-04f, +6.137540712e-04f, +6.088578646e-04f, +5.250168391e-04f, +3.942551895e-04f, +2.526989419e-04f, +1.302680244e-04f, +4.409226758e-05f, -2.848168129e-06f, -1.843841419e-05f, +5.359546164e-04f, -2.340546149e-04f, -3.226277163e-03f, -8.862722038e-03f, -1.604876621e-02f, -2.197476149e-02f, -2.292556295e-02f, -1.594630917e-02f, -6.239199835e-04f, +2.000819470e-02f, +4.012241519e-02f, +5.321560248e-02f, +5.478642702e-02f, +4.428362427e-02f, +2.534846050e-02f, +4.228277175e-03f, -1.283930889e-02f, -2.199538270e-02f, -2.282221596e-02f, -1.778865414e-02f, -1.059682186e-02f, -4.399681803e-03f, -7.380033490e-04f, +4.934992475e-04f, +1.524797041e-07f, +5.266248031e-05f, +1.345581839e-04f, +2.099559051e-04f, +2.238185004e-04f, +1.292740206e-04f, -7.983862880e-05f, -3.508451129e-04f, -5.836906051e-04f, -6.717351548e-04f, -5.537030433e-04f, -2.493466977e-04f, +1.423099933e-04f, +4.839153604e-04f, +6.601693699e-04f, +6.269894260e-04f, +4.251152730e-04f, +1.534954273e-04f, -8.089054244e-05f, -2.094510392e-04f, -2.225377996e-04f, -1.586168246e-04f, -7.374393090e-05f, -1.103311328e-05f, /* 2,21 (24) */ -6.747405816e-04f, -1.197098466e-03f, -1.030856615e-03f, +8.896141201e-04f, +5.817694933e-03f, +1.482038439e-02f, +2.832753059e-02f, +4.575936797e-02f, +6.539240479e-02f, +8.456313346e-02f, +1.001986057e-01f, +1.095421712e-01f, +1.108596255e-01f, +1.039017667e-01f, +8.997182778e-02f, +7.157544412e-02f, +5.176845179e-02f, +3.341209331e-02f, +1.856223640e-02f, +8.156427011e-03f, +2.048629909e-03f, -6.771722953e-04f, -1.262515917e-03f, -8.625094414e-04f, +1.890094555e-05f, +1.052209830e-05f, -2.541182018e-05f, -9.903708683e-05f, -2.112915759e-04f, -3.495687512e-04f, -4.874736909e-04f, -5.898356489e-04f, -6.221360480e-04f, -5.615504634e-04f, -4.057497427e-04f, -1.760169995e-04f, +8.692565704e-05f, +3.333870066e-04f, +5.181434937e-04f, +6.123939157e-04f, +6.103434187e-04f, +5.285360669e-04f, +3.986863436e-04f, +2.569602633e-04f, +1.335967791e-04f, +4.617374690e-05f, -1.916364455e-06f, -1.830067241e-05f, +5.361070961e-04f, -1.813921345e-04f, -3.091718979e-03f, -8.652766133e-03f, -1.582494771e-02f, -2.184548747e-02f, -2.300540157e-02f, -1.629715428e-02f, -1.207610589e-03f, +1.933645954e-02f, +3.956871215e-02f, +5.296625578e-02f, +5.492873702e-02f, +4.476753963e-02f, +2.600862987e-02f, +4.855266601e-03f, -1.241419362e-02f, -2.184188727e-02f, -2.290310650e-02f, -1.799810518e-02f, -1.081935966e-02f, -4.558298627e-03f, -8.117472799e-04f, +4.824661342e-04f, -8.671834766e-07f, +5.046672918e-05f, +1.318410047e-04f, +2.082305379e-04f, +2.248556185e-04f, +1.340756278e-04f, -7.194235371e-05f, -3.423623664e-04f, -5.781153860e-04f, -6.719709070e-04f, -5.605418947e-04f, -2.608516846e-04f, +1.301060727e-04f, +4.752889960e-04f, +6.578275632e-04f, +6.309863052e-04f, +4.330715464e-04f, +1.619166851e-04f, -7.495759125e-05f, -2.072799585e-04f, -2.235759227e-04f, -1.612161629e-04f, -7.621849629e-05f, -1.243343331e-05f, /* 2,22 (24) */ -6.558396361e-04f, -1.186576368e-03f, -1.056268435e-03f, +7.905770333e-04f, +5.606403357e-03f, +1.447081564e-02f, +2.784005690e-02f, +4.516953232e-02f, +6.477026874e-02f, +8.400158299e-02f, +9.979285592e-02f, +1.093661542e-01f, +1.109465511e-01f, +1.042351537e-01f, +9.048997127e-02f, +7.218783803e-02f, +5.237879521e-02f, +3.394062938e-02f, +1.896092274e-02f, +8.413387275e-03f, +2.182226688e-03f, -6.309985484e-04f, -1.264432282e-03f, -8.808101138e-04f, +1.886486066e-05f, +1.113359983e-05f, -2.375356921e-05f, -9.612463026e-05f, -2.072864241e-04f, -3.450854932e-04f, -4.835093887e-04f, -5.875364520e-04f, -6.224595207e-04f, -5.649337840e-04f, -4.119062305e-04f, -1.839470589e-04f, +7.869682585e-05f, +3.264154723e-04f, +5.136456269e-04f, +6.109378255e-04f, +6.117498117e-04f, +5.320080214e-04f, +4.031064244e-04f, +2.612406066e-04f, +1.369618388e-04f, +4.829456226e-05f, -9.531721336e-07f, -1.814461260e-05f, +5.352399126e-04f, -1.309254054e-04f, -2.959877975e-03f, -8.444535595e-03f, -1.560009209e-02f, -2.171141184e-02f, -2.307734393e-02f, -1.663951665e-02f, -1.785725975e-03f, +1.866448863e-02f, +3.900817025e-02f, +5.270540410e-02f, +5.505884309e-02f, +4.524282862e-02f, +2.666645744e-02f, +5.486252906e-03f, -1.198112207e-02f, -2.167997059e-02f, -2.297806409e-02f, -1.820538514e-02f, -1.104293558e-02f, -4.719514790e-03f, -8.879657762e-04f, +4.700327009e-04f, -1.849649032e-06f, +4.830285877e-05f, +1.291207824e-04f, +2.064463045e-04f, +2.257844555e-04f, +1.387595813e-04f, -6.411324919e-05f, -3.338465777e-04f, -5.723978525e-04f, -6.719992106e-04f, -5.671899256e-04f, -2.722640448e-04f, +1.178556876e-04f, +4.664976795e-04f, +6.552738902e-04f, +6.348109959e-04f, +4.409555500e-04f, +1.703747559e-04f, -6.891738327e-05f, -2.049913645e-04f, -2.245357194e-04f, -1.637945700e-04f, -7.871627351e-05f, -1.387217702e-05f, /* 2,23 (24) */ -6.369747754e-04f, -1.175442768e-03f, -1.080022004e-03f, +6.944524030e-04f, +5.399116933e-03f, +1.412573014e-02f, +2.735654751e-02f, +4.458199587e-02f, +6.414780922e-02f, +8.343664921e-02f, +9.938094969e-02f, +1.091822071e-01f, +1.110252480e-01f, +1.045615692e-01f, +9.100361690e-02f, +7.279877586e-02f, +5.299054502e-02f, +3.447263740e-02f, +1.936402917e-02f, +8.674627881e-03f, +2.319188527e-03f, -5.827039862e-04f, -1.265385454e-03f, -8.989547265e-04f, +1.881544380e-05f, +1.171835245e-05f, -2.213267467e-05f, -9.325119560e-05f, -2.033084726e-04f, -3.406036299e-04f, -4.795114912e-04f, -5.851688234e-04f, -6.226909977e-04f, -5.682218367e-04f, -4.179878698e-04f, -1.918424496e-04f, +7.045307472e-05f, +3.193834961e-04f, +5.090579844e-04f, +6.093856145e-04f, +6.130762398e-04f, +5.354315812e-04f, +4.075143456e-04f, +2.655392034e-04f, +1.403628855e-04f, +5.045481151e-05f, +4.176771401e-08f, -1.796981020e-05f, +5.333902636e-04f, -8.262254660e-05f, -2.830757192e-03f, -8.238089290e-03f, -1.537430764e-02f, -2.157265226e-02f, -2.314145718e-02f, -1.697336322e-02f, -2.358123827e-03f, +1.799248942e-02f, +3.844098032e-02f, +5.243314005e-02f, +5.517669878e-02f, +4.570932630e-02f, +2.732173133e-02f, +6.121063902e-03f, -1.154016652e-02f, -2.150959583e-02f, -2.304698148e-02f, -1.841037650e-02f, -1.126747130e-02f, -4.883309360e-03f, -9.666820497e-04f, +4.561605239e-04f, -2.795161580e-06f, +4.617147413e-05f, +1.263990239e-04f, +2.046050295e-04f, +2.266061112e-04f, +1.433253052e-04f, -5.635378605e-05f, -3.253012863e-04f, -5.665410181e-04f, -6.718209774e-04f, -5.736452673e-04f, -2.835797956e-04f, +1.055631995e-04f, +4.575442216e-04f, +6.525084716e-04f, +6.384611192e-04f, +4.487637350e-04f, +1.788666174e-04f, -6.277123418e-05f, -2.025847015e-04f, -2.254155049e-04f, -1.663503184e-04f, -8.123629262e-05f, -1.534931117e-05f, /* 2,24 (24) */ -6.181593316e-04f, -1.163724415e-03f, -1.102154679e-03f, +6.012012074e-04f, +5.195808460e-03f, +1.378512652e-02f, +2.687703602e-02f, +4.399682704e-02f, +6.352511822e-02f, +8.286842737e-02f, +9.896296182e-02f, +1.089903647e-01f, +1.110957010e-01f, +1.048809527e-01f, +9.151267488e-02f, +7.340816147e-02f, +5.360362126e-02f, +3.500806898e-02f, +1.977154351e-02f, +8.940167085e-03f, +2.459551413e-03f, -5.322491747e-04f, -1.265343686e-03f, -9.169245366e-04f, +1.875309709e-05f, +1.227676465e-05f, -2.054890974e-05f, -9.041691952e-05f, -1.993583130e-04f, -3.361241455e-04f, -4.754811461e-04f, -5.827337377e-04f, -6.228309436e-04f, -5.714143646e-04f, -4.239936841e-04f, -1.997017072e-04f, +6.219596318e-05f, +3.122923087e-04f, +5.043811523e-04f, +6.077371186e-04f, +6.143219148e-04f, +5.388056300e-04f, +4.119090148e-04f, +2.698552725e-04f, +1.437995866e-04f, +5.265458140e-05f, +1.068808779e-06f, -1.777583992e-05f, +5.305951020e-04f, -3.645107247e-05f, -2.704358168e-03f, -8.033484261e-03f, -1.514770153e-02f, -2.142932695e-02f, -2.319781096e-02f, -1.729866451e-02f, -2.924664845e-03f, +1.732066845e-02f, +3.786733506e-02f, +5.214956026e-02f, +5.528226198e-02f, +4.616687052e-02f, +2.797423980e-02f, +6.759525021e-03f, -1.109140279e-02f, -2.133072921e-02f, -2.310975271e-02f, -1.861296120e-02f, -1.149288680e-02f, -5.049659679e-03f, -1.047918342e-03f, +4.408112127e-04f, -3.703985872e-06f, +4.407314990e-05f, +1.236772130e-04f, +2.027085424e-04f, +2.273217245e-04f, +1.477722844e-04f, -4.866638302e-05f, -3.167300202e-04f, -5.605479395e-04f, -6.714372019e-04f, -5.799061350e-04f, -2.947949980e-04f, +9.323298872e-05f, +4.484315048e-04f, +6.495315166e-04f, +6.419343587e-04f, +4.564925630e-04f, +1.873892085e-04f, -5.652052112e-05f, -2.000594643e-04f, -2.262136130e-04f, -1.688816670e-04f, -8.377755386e-05f, -1.686477662e-05f, /* 2,25 (24) */ -5.994062345e-04f, -1.151447651e-03f, -1.122703589e-03f, +5.107842879e-04f, +4.996450147e-03f, +1.344900237e-02f, +2.640155487e-02f, +4.341409331e-02f, +6.290228728e-02f, +8.229701301e-02f, +9.853896813e-02f, +1.087906630e-01f, +1.111578970e-01f, +1.051932450e-01f, +9.201705604e-02f, +7.401589859e-02f, +5.421794317e-02f, +3.554687461e-02f, +2.018345253e-02f, +9.210022357e-03f, +2.603350999e-03f, -4.795945933e-04f, -1.264274877e-03f, -9.347003766e-04f, +1.867821997e-05f, +1.280924741e-05f, -1.900203890e-05f, -8.762192522e-05f, -1.954365230e-04f, -3.316480143e-04f, -4.714195013e-04f, -5.802321806e-04f, -6.228798434e-04f, -5.745111347e-04f, -4.299227169e-04f, -2.075233773e-04f, +5.392705441e-05f, +3.051431560e-04f, +4.996157398e-04f, +6.059921968e-04f, +6.154860638e-04f, +5.421290560e-04f, +4.162893342e-04f, +2.741880197e-04f, +1.472715951e-04f, +5.489394744e-05f, +2.128299365e-06f, -1.756227598e-05f, +5.268911161e-04f, +7.622077426e-06f, -2.580680955e-03f, -7.830775718e-03f, -1.492037980e-02f, -2.128155467e-02f, -2.324647735e-02f, -1.761539453e-02f, -3.485212785e-03f, +1.664923124e-02f, +3.728742892e-02f, +5.185476526e-02f, +5.537549496e-02f, +4.661530203e-02f, +2.862377132e-02f, +7.401459380e-03f, -1.063491023e-02f, -2.114334001e-02f, -2.316627323e-02f, -1.881302067e-02f, -1.171910042e-02f, -5.218541346e-03f, -1.131695896e-03f, +4.239464361e-04f, -4.576406290e-06f, +4.200843041e-05f, +1.209568106e-04f, +2.007586760e-04f, +2.279324725e-04f, +1.521000643e-04f, -4.105340592e-05f, -3.081362939e-04f, -5.544217142e-04f, -6.708489603e-04f, -5.859708285e-04f, -3.059057580e-04f, +8.086945297e-05f, +4.391624825e-04f, +6.463433227e-04f, +6.452284613e-04f, +4.641385077e-04f, +1.959394305e-04f, -5.016668252e-05f, -1.974151997e-04f, -2.269283978e-04f, -1.713868621e-04f, -8.633902784e-05f, -1.841848797e-05f, /* 2,26 (24) */ -5.807280146e-04f, -1.138638403e-03f, -1.141705627e-03f, +4.231623627e-04f, +4.801013624e-03f, +1.311735436e-02f, +2.593013537e-02f, +4.283386113e-02f, +6.227940744e-02f, +8.172250187e-02f, +9.810904542e-02f, +1.085831396e-01f, +1.112118241e-01f, +1.054983882e-01f, +9.251667177e-02f, +7.462189079e-02f, +5.483342924e-02f, +3.608900367e-02f, +2.059974186e-02f, +9.484210377e-03f, +2.750622594e-03f, -4.247006458e-04f, -1.262146578e-03f, -9.522626525e-04f, +1.859120906e-05f, +1.331621398e-05f, -1.749181816e-05f, -8.486632263e-05f, -1.915436659e-04f, -3.271762009e-04f, -4.673277037e-04f, -5.776651480e-04f, -6.228382017e-04f, -5.775119374e-04f, -4.357740323e-04f, -2.153060157e-04f, +4.564791482e-05f, +2.979373002e-04f, +4.947623787e-04f, +6.041507306e-04f, +6.165679301e-04f, +5.454007527e-04f, +4.206542003e-04f, +2.785366386e-04f, +1.507785496e-04f, +5.717297374e-05f, +3.220582194e-06f, -1.732869222e-05f, +5.223147098e-04f, +4.963050784e-05f, -2.459724145e-03f, -7.630017042e-03f, -1.469244733e-02f, -2.112945460e-02f, -2.328753075e-02f, -1.792353082e-02f, -4.039634499e-03f, +1.597838228e-02f, +3.670145809e-02f, +5.154885950e-02f, +5.545636442e-02f, +4.705446451e-02f, +2.927011464e-02f, +8.046687841e-03f, -1.017077172e-02f, -2.094740058e-02f, -2.321643991e-02f, -1.901043587e-02f, -1.194602881e-02f, -5.389928208e-03f, -1.218034924e-03f, +4.055279482e-04f, -5.412726337e-06f, +3.997782979e-05f, +1.182392537e-04f, +1.987572655e-04f, +2.284395699e-04f, +1.563082506e-04f, -3.351716690e-05f, -2.995236074e-04f, -5.481654794e-04f, -6.700574097e-04f, -5.918377328e-04f, -3.169082289e-04f, +6.847700495e-05f, +4.297401776e-04f, +6.429442762e-04f, +6.483412393e-04f, +4.716980567e-04f, +2.045141480e-04f, -4.371121788e-05f, -1.946515064e-04f, -2.275582344e-04f, -1.738641378e-04f, -8.891965578e-05f, -2.001033321e-05f, /* 2,27 (24) */ -5.621368055e-04f, -1.125322189e-03f, -1.159197446e-03f, +3.382960400e-04f, +4.609469958e-03f, +1.279017815e-02f, +2.546280767e-02f, +4.225619598e-02f, +6.165656923e-02f, +8.114498994e-02f, +9.767327138e-02f, +1.083678336e-01f, +1.112574720e-01f, +1.057963255e-01f, +9.301143415e-02f, +7.522604152e-02f, +5.544999717e-02f, +3.663440442e-02f, +2.102039606e-02f, +9.762747015e-03f, +2.901401144e-03f, -3.675276721e-04f, -1.258925996e-03f, -9.695913448e-04f, +1.849245808e-05f, +1.379807969e-05f, -1.601799522e-05f, -8.215020841e-05f, -1.876802906e-04f, -3.227096598e-04f, -4.632068992e-04f, -5.750336461e-04f, -6.227065429e-04f, -5.804165871e-04f, -4.415467146e-04f, -2.230481888e-04f, +3.736011364e-05f, +2.906760184e-04f, +4.898217239e-04f, +6.022126246e-04f, +6.175667733e-04f, +5.486196193e-04f, +4.250025045e-04f, +2.829003102e-04f, +1.543200745e-04f, +5.949171285e-05f, +4.345994203e-06f, -1.707466226e-05f, +5.169019835e-04f, +8.960833763e-05f, -2.341484891e-03f, -7.431259777e-03f, -1.446400776e-02f, -2.097314635e-02f, -2.332104792e-02f, -1.822305443e-02f, -4.587799978e-03f, +1.530832487e-02f, +3.610962036e-02f, +5.123195127e-02f, +5.552484142e-02f, +4.748420469e-02f, +2.991305892e-02f, +8.695029080e-03f, -9.699073661e-03f, -2.074288643e-02f, -2.326015113e-02f, -1.920508737e-02f, -1.217358705e-02f, -5.563792346e-03f, -1.306954580e-03f, +3.855176150e-04f, -6.213268125e-06f, +3.798183208e-05f, +1.155259551e-04f, +1.967061477e-04f, +2.288442673e-04f, +1.603965089e-04f, -2.605992372e-05f, -2.908954441e-04f, -5.417824102e-04f, -6.690637871e-04f, -5.975053183e-04f, -3.277986126e-04f, +5.606007047e-05f, +4.201676808e-04f, +6.393348523e-04f, +6.512705711e-04f, +4.791677130e-04f, +2.131101909e-04f, -3.715568749e-05f, -1.917680365e-04f, -2.281015201e-04f, -1.763117176e-04f, -9.151834969e-05f, -2.164017338e-05f, /* 2,28 (24) */ -5.436443474e-04f, -1.111524110e-03f, -1.175215441e-03f, +2.561458316e-04f, +4.421789668e-03f, +1.246746849e-02f, +2.499960077e-02f, +4.168116233e-02f, +6.103386269e-02f, +8.056457335e-02f, +9.723172467e-02f, +1.081447854e-01f, +1.112948321e-01f, +1.060870015e-01f, +9.350125588e-02f, +7.582825414e-02f, +5.606756394e-02f, +3.718302404e-02f, +2.144539857e-02f, +1.004564733e-02f, +3.055721218e-03f, -3.080359592e-04f, -1.254580002e-03f, -9.866660070e-04f, +1.838235768e-05f, +1.425526179e-05f, -1.458030965e-05f, -7.947366616e-05f, -1.838469319e-04f, -3.182493353e-04f, -4.590582325e-04f, -5.723386911e-04f, -6.224854107e-04f, -5.832249218e-04f, -4.472398691e-04f, -2.307484740e-04f, +2.906522245e-05f, +2.833606028e-04f, +4.847944527e-04f, +6.001778064e-04f, +6.184818694e-04f, +5.517845608e-04f, +4.293331335e-04f, +2.872782033e-04f, +1.578957793e-04f, +6.185020561e-05f, +5.504866354e-06f, -1.679975971e-05f, +5.106887154e-04f, +1.275901697e-04f, -2.225958936e-03f, -7.234553629e-03f, -1.423516349e-02f, -2.081274984e-02f, -2.334710784e-02f, -1.851394988e-02f, -5.129582389e-03f, +1.463926109e-02f, +3.551211504e-02f, +5.090415266e-02f, +5.558090149e-02f, +4.790437237e-02f, +3.055239377e-02f, +9.346299651e-03f, -9.219905948e-03f, -2.052977624e-02f, -2.329730682e-02f, -1.939685541e-02f, -1.240168857e-02f, -5.740104063e-03f, -1.398472929e-03f, +3.638774416e-04f, -6.978371850e-06f, +3.602089138e-05f, +1.128183026e-04f, +1.946071598e-04f, +2.291478507e-04f, +1.643645643e-04f, -1.868387906e-05f, -2.822552695e-04f, -5.352757180e-04f, -6.678694090e-04f, -6.029721417e-04f, -3.385731614e-04f, +4.362308645e-05f, +4.104481502e-04f, +6.355156147e-04f, +6.540144025e-04f, +4.865439971e-04f, +2.217243550e-04f, -3.050171218e-05f, -1.887644956e-04f, -2.285566754e-04f, -1.787278146e-04f, -9.413399264e-05f, -2.330784222e-05f, /* 2,29 (24) */ -5.252619897e-04f, -1.097268848e-03f, -1.189795751e-03f, +1.766721655e-04f, +4.237942736e-03f, +1.214921916e-02f, +2.454054253e-02f, +4.110882364e-02f, +6.041137728e-02f, +7.998134843e-02f, +9.678448480e-02f, +1.079140369e-01f, +1.113238973e-01f, +1.063703621e-01f, +9.398605033e-02f, +7.642843195e-02f, +5.668604581e-02f, +3.773480860e-02f, +2.187473170e-02f, +1.033292553e-02f, +3.213616998e-03f, -2.461857536e-04f, -1.249075135e-03f, -1.003465767e-03f, +1.826129538e-05f, +1.468817924e-05f, -1.317849311e-05f, -7.683676646e-05f, -1.800441102e-04f, -3.137961612e-04f, -4.548828464e-04f, -5.695813083e-04f, -6.221753681e-04f, -5.859368034e-04f, -4.528526219e-04f, -2.384054602e-04f, +2.076481481e-05f, +2.759923601e-04f, +4.796812647e-04f, +5.980462265e-04f, +6.193125111e-04f, +5.548944887e-04f, +4.336449694e-04f, +2.916694746e-04f, +1.615052594e-04f, +6.424848103e-05f, +6.697523430e-06f, -1.650355829e-05f, +5.037103435e-04f, +1.636110611e-04f, -2.113140633e-03f, -7.039946469e-03f, -1.400601564e-02f, -2.064838528e-02f, -2.336579172e-02f, -1.879620515e-02f, -5.664858107e-03f, +1.397139168e-02f, +3.490914290e-02f, +5.056557950e-02f, +5.562452458e-02f, +4.831482052e-02f, +3.118790938e-02f, +1.000031405e-02f, -8.733361951e-03f, -2.030805188e-02f, -2.332780853e-02f, -1.958561990e-02f, -1.263024524e-02f, -5.918831878e-03f, -1.492606922e-03f, +3.405695994e-04f, -7.708395271e-06f, +3.409543201e-05f, +1.101176588e-04f, +1.924621382e-04f, +2.293516403e-04f, +1.682122012e-04f, -1.139117981e-05f, -2.736065296e-04f, -5.286486484e-04f, -6.664756702e-04f, -6.082368464e-04f, -3.492281796e-04f, +3.117049891e-05f, +4.005848091e-04f, +6.314872159e-04f, +6.565707484e-04f, +4.938234485e-04f, +2.303534036e-04f, -2.375097296e-05f, -1.856406436e-04f, -2.289221454e-04f, -1.811106325e-04f, -9.676543903e-05f, -2.501314587e-05f, /* 2,30 (24) */ -5.070006944e-04f, -1.082580669e-03f, -1.202974244e-03f, +9.983539900e-05f, +4.057898625e-03f, +1.183542300e-02f, +2.408565969e-02f, +4.053924233e-02f, +5.978920191e-02f, +7.939541162e-02f, +9.633163218e-02f, +1.076756315e-01f, +1.113446621e-01f, +1.066463545e-01f, +9.446573159e-02f, +7.702647818e-02f, +5.730535832e-02f, +3.828970309e-02f, +2.230837667e-02f, +1.062459500e-02f, +3.375122257e-03f, -1.819372726e-04f, -1.242377612e-03f, -1.019969325e-03f, +1.812965542e-05f, +1.509725256e-05f, -1.181226953e-05f, -7.423956698e-05f, -1.762723314e-04f, -3.093510607e-04f, -4.506818819e-04f, -5.667625323e-04f, -6.217769968e-04f, -5.885521170e-04f, -4.583841202e-04f, -2.460177481e-04f, +1.246046575e-05f, +2.685726115e-04f, +4.744828822e-04f, +5.958178588e-04f, +6.200580086e-04f, +5.579483211e-04f, +4.379368899e-04f, +2.960732688e-04f, +1.651480956e-04f, +6.668655613e-05f, +7.924283845e-06f, -1.618563203e-05f, +4.960019483e-04f, +1.977064931e-04f, -2.003022974e-03f, -6.847484331e-03f, -1.377666400e-02f, -2.048017308e-02f, -2.337718290e-02f, -1.906981168e-02f, -6.193506755e-03f, +1.330491601e-02f, +3.430090605e-02f, +5.021635132e-02f, +5.565569508e-02f, +4.871540533e-02f, +3.181939660e-02f, +1.065688480e-02f, -8.239538502e-03f, -2.007769848e-02f, -2.335155950e-02f, -1.977126055e-02f, -1.285916739e-02f, -6.099942510e-03f, -1.589372361e-03f, +3.155564535e-04f, -8.403713181e-06f, +3.220584870e-05f, +1.074253608e-04f, +1.902729177e-04f, +2.294569894e-04f, +1.719392626e-04f, -4.183916502e-06f, -2.649526494e-04f, -5.219044802e-04f, -6.648840429e-04f, -6.132981627e-04f, -3.597600253e-04f, +1.870676093e-05f, +3.905809452e-04f, +6.272503973e-04f, +6.589376933e-04f, +5.010026274e-04f, +2.389940689e-04f, -1.690521069e-05f, -1.823962955e-04f, -2.291964006e-04f, -1.834583669e-04f, -9.941151491e-05f, -2.675586256e-05f, /* 2,31 (24) */ -4.888710389e-04f, -1.067483416e-03f, -1.214786513e-03f, +2.559583202e-05f, +3.881626294e-03f, +1.152607194e-02f, +2.363497781e-02f, +3.997247980e-02f, +5.916742492e-02f, +7.880685951e-02f, +9.587324806e-02f, +1.074296137e-01f, +1.113571226e-01f, +1.069149271e-01f, +9.494021448e-02f, +7.762229604e-02f, +5.792541633e-02f, +3.884765141e-02f, +2.274631356e-02f, +1.092066827e-02f, +3.540270353e-03f, -1.152507165e-04f, -1.234453328e-03f, -1.036154957e-03f, +1.798781866e-05f, +1.548290361e-05f, -1.048135530e-05f, -7.168211267e-05f, -1.725320870e-04f, -3.049149461e-04f, -4.464564775e-04f, -5.638834066e-04f, -6.212908975e-04f, -5.910707719e-04f, -4.638335327e-04f, -2.535839502e-04f, +4.153751417e-06f, +2.611026920e-04f, +4.692000494e-04f, +5.934927004e-04f, +6.207176891e-04f, +5.609449829e-04f, +4.422077692e-04f, +3.004887188e-04f, +1.688238542e-04f, +6.916443580e-05f, +9.185459440e-06f, -1.584555542e-05f, +4.875982351e-04f, +2.299123418e-04f, -1.895597614e-03f, -6.657211414e-03f, -1.354720701e-02f, -2.030823382e-02f, -2.338136682e-02f, -1.933476432e-02f, -6.715411235e-03f, +1.264003196e-02f, +3.368760789e-02f, +4.985659129e-02f, +5.567440184e-02f, +4.910598627e-02f, +3.244664700e-02f, +1.131582250e-02f, -7.738535875e-03f, -1.983870441e-02f, -2.336846472e-02f, -1.995365684e-02f, -1.308836379e-02f, -6.283400877e-03f, -1.688783876e-03f, +2.888005909e-04f, -9.064716865e-06f, +3.035250677e-05f, +1.047427193e-04f, +1.880413307e-04f, +2.294652832e-04f, +1.755456498e-04f, +2.935877331e-06f, -2.562970312e-04f, -5.150465232e-04f, -6.630960758e-04f, -6.181549083e-04f, -3.701651116e-04f, +6.236330677e-06f, +3.804399088e-04f, +6.228059886e-04f, +6.611133931e-04f, +5.080781166e-04f, +2.476430534e-04f, -9.966225700e-06f, -1.790313220e-04f, -2.293779382e-04f, -1.857692058e-04f, -1.020710182e-04f, -2.853574234e-05f, /* 3, 0 (24) */ -7.917356639e-04f, -3.016122763e-03f, -6.515256363e-03f, -9.608647522e-03f, -8.911531175e-03f, -1.899096117e-04f, +1.981753504e-02f, +5.131567626e-02f, +9.019272462e-02f, +1.284788675e-01f, +1.566624559e-01f, +1.670419145e-01f, +1.566624559e-01f, +1.284788675e-01f, +9.019272462e-02f, +5.131567626e-02f, +1.981753504e-02f, -1.899096117e-04f, -8.911531175e-03f, -9.608647522e-03f, -6.515256363e-03f, -3.016122763e-03f, -7.917356639e-04f, +7.650297944e-06f, +4.438129776e-05f, +9.288555880e-05f, +1.166047700e-04f, +6.055408398e-05f, -1.214573968e-04f, -4.322415435e-04f, -8.085880363e-04f, -1.128795806e-03f, -1.254606094e-03f, -1.092006038e-03f, -6.415426008e-04f, -1.039008209e-05f, +6.237490619e-04f, +1.081988441e-03f, +1.254166848e-03f, +1.136337421e-03f, +8.201804378e-04f, +4.435206002e-04f, +1.293692963e-04f, -5.693319620e-05f, -1.163592181e-04f, -9.426136396e-05f, -4.583541038e-05f, -8.923101798e-06f, +2.391742032e-03f, +5.312215035e-03f, +6.607426619e-03f, +2.622016450e-03f, -8.359379704e-03f, -2.318774526e-02f, -3.380890411e-02f, -3.134542425e-02f, -1.229656639e-02f, +1.750386073e-02f, +4.470491270e-02f, +5.568063817e-02f, +4.470491270e-02f, +1.750386073e-02f, -1.229656639e-02f, -3.134542425e-02f, -3.380890411e-02f, -2.318774526e-02f, -8.359379704e-03f, +2.622016450e-03f, +6.607426619e-03f, +5.312215035e-03f, +2.391742032e-03f, +4.555202259e-04f, -8.328765248e-05f, -8.524146050e-05f, +2.168904174e-05f, +2.318317186e-04f, +4.324770105e-04f, +4.498819789e-04f, +1.726415751e-04f, -3.321135850e-04f, -8.129264642e-04f, -9.714409511e-04f, -6.623103823e-04f, -1.122753743e-05f, +6.457668103e-04f, +9.689372183e-04f, +8.241044281e-04f, +3.491395175e-04f, -1.594007232e-04f, -4.458682330e-04f, -4.366838699e-04f, -2.390934712e-04f, -2.700232027e-05f, +8.376427446e-05f, +8.444382486e-05f, +3.589476488e-05f, /* 3, 1 (24) */ -7.473543661e-04f, -2.923237204e-03f, -6.398651594e-03f, -9.548093438e-03f, -9.032988571e-03f, -6.221511552e-04f, +1.900894700e-02f, +5.018688045e-02f, +8.893811853e-02f, +1.273868615e-01f, +1.560209133e-01f, +1.670315244e-01f, +1.572862050e-01f, +1.295608560e-01f, +9.144689147e-02f, +5.245201368e-02f, +2.063771547e-02f, +2.536109885e-04f, -8.782161878e-03f, -9.665580718e-03f, -6.631615582e-03f, -3.110384127e-03f, -8.375710743e-04f, -1.272803854e-06f, +4.294149459e-05f, +9.148723106e-05f, +1.167718107e-04f, +6.404830492e-05f, -1.136769732e-04f, -4.210316793e-04f, -7.969423900e-04f, -1.121060636e-03f, -1.254755552e-03f, -1.101733279e-03f, -6.591535567e-04f, -3.116722669e-05f, +6.057777733e-04f, +1.071682283e-03f, +1.253436160e-03f, +1.143681477e-03f, +8.317151817e-04f, +4.548657984e-04f, +1.374117981e-04f, -5.318465797e-05f, -1.160333507e-04f, -9.561309131e-05f, -4.730310127e-05f, -9.725942243e-06f, +2.308454379e-03f, +5.226973574e-03f, +6.629115661e-03f, +2.853848169e-03f, -7.926902694e-03f, -2.273786328e-02f, -3.363626253e-02f, -3.167753783e-02f, -1.310949286e-02f, +1.653241978e-02f, +4.404260232e-02f, +5.566941063e-02f, +4.535067951e-02f, +1.847279795e-02f, -1.147246196e-02f, -3.099628473e-02f, -3.396830483e-02f, -2.363361349e-02f, -8.796063574e-03f, +2.382922979e-03f, +6.580424299e-03f, +5.395979309e-03f, +2.476185857e-03f, +4.914149908e-04f, -8.208617321e-05f, -8.660649126e-05f, +1.648631167e-05f, +2.245666512e-04f, +4.280861048e-04f, +4.535921347e-04f, +1.856434745e-04f, -3.150688955e-04f, -8.014203357e-04f, -9.734637637e-04f, -6.785011074e-04f, -3.367650675e-05f, +6.288787583e-04f, +9.659521188e-04f, +8.349460613e-04f, +3.661367488e-04f, -1.459264257e-04f, -4.415496956e-04f, -4.407012446e-04f, -2.463467642e-04f, -3.242431918e-05f, +8.217356412e-05f, +8.555233233e-05f, +3.746454073e-05f, /* 3, 2 (24) */ -7.044128715e-04f, -2.831749973e-03f, -6.281879783e-03f, -9.484045133e-03f, -9.146665545e-03f, -1.043182834e-03f, +1.821200461e-02f, +4.906581982e-02f, +8.768336298e-02f, +1.262851282e-01f, +1.553617598e-01f, +1.670003572e-01f, +1.578919828e-01f, +1.306325382e-01f, +9.270032763e-02f, +5.359569516e-02f, +2.146943066e-02f, +7.084767869e-04f, -8.644750080e-03f, -9.718765376e-03f, -6.747648932e-03f, -3.205997218e-03f, -8.848741755e-04f, -1.099874610e-05f, +4.151670416e-05f, +9.006791560e-05f, +1.168621514e-04f, +6.741688592e-05f, -1.060288310e-04f, -4.098939964e-04f, -7.852478923e-04f, -1.113135960e-03f, -1.254616975e-03f, -1.111168481e-03f, -6.765771692e-04f, -5.193531372e-05f, +5.876336398e-04f, +1.061089468e-03f, +1.252412474e-03f, +1.150824016e-03f, +8.431878379e-04f, +4.662740262e-04f, +1.455839599e-04f, -4.930753009e-05f, -1.156253717e-04f, -9.693916574e-05f, -4.878361126e-05f, -1.055290011e-05f, +2.226368206e-03f, +5.140367083e-03f, +6.645601972e-03f, +3.078414820e-03f, -7.498816589e-03f, -2.228427115e-02f, -3.345061906e-02f, -3.199260673e-02f, -1.391091319e-02f, +1.555895602e-02f, +4.336410121e-02f, +5.563573413e-02f, +4.597955827e-02f, +1.943875007e-02f, -1.063751590e-02f, -3.063014798e-02f, -3.411423125e-02f, -2.407516319e-02f, -9.236764819e-03f, +2.136576215e-03f, +6.547999980e-03f, +5.478152873e-03f, +2.561738189e-03f, +5.288795315e-04f, -8.084173690e-05f, -8.786080506e-05f, +1.139584045e-05f, +2.173033413e-04f, +4.235166508e-04f, +4.570000917e-04f, +1.984011167e-04f, -2.980153362e-04f, -7.895943690e-04f, -9.750063939e-04f, -6.943308460e-04f, -5.610716341e-05f, +6.116548155e-04f, +9.624854981e-04f, +8.454433646e-04f, +3.830952845e-04f, -1.322243893e-04f, -4.369253578e-04f, -4.445237610e-04f, -2.535863825e-04f, -3.795309249e-05f, +8.046803207e-05f, +8.661081072e-05f, +3.904815034e-05f, /* 3, 3 (24) */ -6.628961674e-04f, -2.741682057e-03f, -6.165017631e-03f, -9.416628247e-03f, -9.252694376e-03f, -1.453076831e-03f, +1.742675672e-02f, +4.795268386e-02f, +8.642874600e-02f, +1.251739597e-01f, +1.546851826e-01f, +1.669484219e-01f, +1.584796164e-01f, +1.316936277e-01f, +9.395274011e-02f, +5.474651917e-02f, +2.231261849e-02f, +1.174750813e-03f, -8.499166120e-03f, -9.768072906e-03f, -6.863274304e-03f, -3.302936384e-03f, -9.336577868e-04f, -2.155164621e-05f, +4.010760193e-05f, +8.862912628e-05f, +1.168776089e-04f, +7.066089609e-05f, -9.851370773e-05f, -3.988314213e-04f, -7.735089158e-04f, -1.105025867e-03f, -1.254192209e-03f, -1.120310067e-03f, -6.938087530e-04f, -7.268830890e-05f, +5.693216354e-04f, +1.050212011e-03f, +1.251094331e-03f, +1.157761129e-03f, +8.545939606e-04f, +4.777421116e-04f, +1.538847709e-04f, -4.530091876e-05f, -1.151334936e-04f, -9.823799292e-05f, -5.027615317e-05f, -1.140398583e-05f, +2.145526469e-03f, +5.052506278e-03f, +6.656997813e-03f, +3.295718161e-03f, -7.075299938e-03f, -2.182727105e-02f, -3.325221794e-02f, -3.229062206e-02f, -1.470050756e-02f, +1.458394963e-02f, +4.266977036e-02f, +5.557962696e-02f, +4.659121308e-02f, +2.040123557e-02f, -9.792072538e-03f, -3.024705269e-02f, -3.424645564e-02f, -2.451208855e-02f, -9.681288580e-03f, +1.882989832e-03f, +6.510046887e-03f, +5.558620905e-03f, +2.648349000e-03f, +5.679276819e-04f, -7.955668309e-05f, -8.900590706e-05f, +6.419221105e-06f, +2.100467847e-04f, +4.187742019e-04f, +4.601074287e-04f, +2.109094015e-04f, -2.809627312e-04f, -7.774570446e-04f, -9.760698691e-04f, -7.097916912e-04f, -7.850731232e-05f, +5.941037881e-04f, +9.585374951e-04f, +8.555885112e-04f, +4.000050864e-04f, -1.183005185e-04f, -4.319944063e-04f, -4.481461147e-04f, -2.608070442e-04f, -4.358657619e-05f, +7.864645488e-05f, +8.761689193e-05f, +4.064418164e-05f, /* 3, 4 (24) */ -6.227885655e-04f, -2.653052931e-03f, -6.048140022e-03f, -9.345967351e-03f, -9.351208083e-03f, -1.851908252e-03f, +1.665324780e-02f, +4.684765799e-02f, +8.517455379e-02f, +1.240536496e-01f, +1.539913739e-01f, +1.668757336e-01f, +1.590489380e-01f, +1.327438397e-01f, +9.520383444e-02f, +5.590428030e-02f, +2.316721245e-02f, +1.652492925e-03f, -8.345281349e-03f, -9.813373825e-03f, -6.978407798e-03f, -3.401174377e-03f, -9.839339400e-04f, -3.295563204e-05f, +3.871483564e-05f, +8.717235549e-05f, +1.168200048e-04f, +7.378144564e-05f, -9.113227368e-05f, -3.878468170e-04f, -7.617298102e-04f, -1.096734486e-03f, -1.253483196e-03f, -1.129156576e-03f, -7.108436992e-04f, -9.342018411e-05f, +5.508468014e-04f, +1.039052033e-03f, +1.249480374e-03f, +1.164488953e-03f, +8.659290902e-04f, +4.892668230e-04f, +1.623131509e-04f, -4.116397666e-05f, -1.145559393e-04f, -9.950795986e-05f, -5.177991177e-05f, -1.227918995e-05f, +2.065969786e-03f, +4.963500371e-03f, +6.663417034e-03f, +3.505764946e-03f, -6.656525736e-03f, -2.136716363e-02f, -3.304130854e-02f, -3.257158479e-02f, -1.547796461e-02f, +1.360787976e-02f, +4.195997867e-02f, +5.550111965e-02f, +4.718531687e-02f, +2.135977306e-02f, -8.936484026e-03f, -2.984704761e-02f, -3.436475616e-02f, -2.494408295e-02f, -1.012943469e-02f, +1.622182788e-03f, +6.466460311e-03f, +5.637267360e-03f, +2.735965892e-03f, +6.085718635e-04f, -7.823333901e-05f, -9.004336690e-05f, +1.557929709e-06f, +2.028018984e-04f, +4.138643616e-04f, +4.629159086e-04f, +2.231634351e-04f, -2.639208351e-04f, -7.650169907e-04f, -9.766555049e-04f, -7.248759729e-04f, -1.008647784e-04f, +5.762346935e-04f, +9.541085427e-04f, +8.653738534e-04f, +4.168560789e-04f, -1.041609125e-04f, -4.267562251e-04f, -4.515630755e-04f, -2.680034041e-04f, -4.932258818e-05f, +7.670768539e-05f, +8.856820608e-05f, +4.225117502e-05f, /* 3, 5 (24) */ -5.840737298e-04f, -2.565880576e-03f, -5.931320018e-03f, -9.272185905e-03f, -9.442340357e-03f, -2.239755069e-03f, +1.589151799e-02f, +4.575092351e-02f, +8.392107060e-02f, +1.229244931e-01f, +1.532805302e-01f, +1.667823134e-01f, +1.595997848e-01f, +1.337828917e-01f, +9.645331481e-02f, +5.706876926e-02f, +2.403314154e-02f, +2.141759748e-03f, -8.182968199e-03f, -9.854537802e-03f, -7.092963737e-03f, -3.500682337e-03f, -1.035713852e-03f, -4.523482199e-05f, +3.733902543e-05f, +8.569907359e-05f, +1.166911641e-04f, +7.677968482e-05f, -8.388513217e-05f, -3.769429824e-04f, -7.499149007e-04f, -1.088265987e-03f, -1.252491970e-03f, -1.137706655e-03f, -7.276774778e-04f, -1.141249198e-04f, +5.322142446e-04f, +1.027611765e-03f, +1.247569347e-03f, +1.171003681e-03f, +8.771887553e-04f, +5.008448706e-04f, +1.708679503e-04f, -3.689590400e-05f, -1.138909429e-04f, -1.007474356e-04f, -5.329404377e-05f, -1.317848272e-05f, +1.987736447e-03f, +4.873457004e-03f, +6.664974964e-03f, +3.708566844e-03f, -6.242661375e-03f, -2.090424772e-02f, -3.281814510e-02f, -3.283550563e-02f, -1.624298160e-02f, +1.263122425e-02f, +4.123510270e-02f, +5.540025487e-02f, +4.776155157e-02f, +2.231388161e-02f, -8.071110173e-03f, -2.943019153e-02f, -3.446891707e-02f, -2.537083918e-02f, -1.058099777e-02f, +1.354179384e-03f, +6.417137723e-03f, +5.713975046e-03f, +2.824534098e-03f, +6.508230385e-04f, -7.687401763e-05f, -9.097481622e-05f, -3.186674108e-06f, +1.955735175e-04f, +4.087927792e-04f, +4.654274759e-04f, +2.351585315e-04f, -2.468993268e-04f, -7.522829769e-04f, -9.767649031e-04f, -7.395762632e-04f, -1.231674144e-04f, +5.580567552e-04f, +9.491993685e-04f, +8.747919281e-04f, +4.336381561e-04f, -8.981186280e-05f, -4.212103984e-04f, -4.547694920e-04f, -2.751700567e-04f, -5.515882843e-05f, +7.465065498e-05f, +8.946238374e-05f, +4.386762395e-05f, /* 3, 6 (24) */ -5.467347044e-04f, -2.480181502e-03f, -5.814628854e-03f, -9.195406221e-03f, -9.526225489e-03f, -2.616698052e-03f, +1.514160309e-02f, +4.466265752e-02f, +8.266857863e-02f, +1.217867864e-01f, +1.525528527e-01f, +1.666681885e-01f, +1.601319991e-01f, +1.348105035e-01f, +9.770088416e-02f, +5.823977294e-02f, +2.491033030e-02f, +2.642604618e-03f, -8.012100248e-03f, -9.891433706e-03f, -7.206854680e-03f, -3.601429772e-03f, -1.089007895e-03f, -5.841330471e-05f, +3.598076395e-05f, +8.421072848e-05f, +1.164929146e-04f, +7.965680278e-05f, -7.677282003e-05f, -3.661226517e-04f, -7.380684864e-04f, -1.079624571e-03f, -1.251220658e-03f, -1.145959062e-03f, -7.443056386e-04f, -1.347965074e-04f, +5.134291353e-04f, +1.015893545e-03f, +1.245360095e-03f, +1.177301558e-03f, +8.883684744e-04f, +5.124729073e-04f, +1.795479501e-04f, -3.249594950e-05f, -1.131367508e-04f, -1.019547717e-04f, -5.481767783e-05f, -1.410181368e-05f, +1.910862429e-03f, +4.782482188e-03f, +6.661788290e-03f, +3.904140362e-03f, -5.833868595e-03f, -2.043882024e-02f, -3.258298657e-02f, -3.308240496e-02f, -1.699526457e-02f, +1.165445935e-02f, +4.049552644e-02f, +5.527708746e-02f, +4.831960832e-02f, +2.326308098e-02f, -7.196318245e-03f, -2.899655337e-02f, -3.455872894e-02f, -2.579204958e-02f, -1.103576726e-02f, +1.079009327e-03f, +6.361978894e-03f, +5.788625701e-03f, +2.913996481e-03f, +6.946906625e-04f, -7.548101566e-05f, -9.180194618e-05f, -7.813346558e-06f, +1.883663929e-04f, +4.035651448e-04f, +4.676442529e-04f, +2.468902149e-04f, -2.299078035e-04f, -7.392639072e-04f, -9.763999499e-04f, -7.538853802e-04f, -1.454031092e-04f, +5.395793965e-04f, +9.438109947e-04f, +8.838354626e-04f, +4.503411878e-04f, -7.525985006e-05f, -4.153567124e-04f, -4.577602963e-04f, -2.823015400e-04f, -6.109287905e-05f, +7.247437578e-05f, +9.029705817e-05f, +4.549197558e-05f, /* 3, 7 (24) */ -5.107539404e-04f, -2.395970773e-03f, -5.698135939e-03f, -9.115749418e-03f, -9.602998309e-03f, -2.982820703e-03f, +1.440353461e-02f, +4.358303295e-02f, +8.141735797e-02f, +1.206408274e-01f, +1.518085470e-01f, +1.665333920e-01f, +1.606454282e-01f, +1.358263971e-01f, +9.894624425e-02f, +5.941707449e-02f, +2.579869877e-02f, +3.155077526e-03f, -7.832552298e-03f, -9.923929655e-03f, -7.319991431e-03f, -3.703384544e-03f, -1.143825573e-03f, -7.251511839e-05f, +3.464061654e-05f, +8.270874508e-05f, +1.162270856e-04f, +8.241402644e-05f, -6.979580815e-05f, -3.553884937e-04f, -7.261948385e-04f, -1.070814478e-03f, -1.249671477e-03f, -1.153912669e-03f, -7.607238135e-04f, -1.554289519e-04f, +4.944967052e-04f, +1.003899819e-03f, +1.242851567e-03f, +1.183378883e-03f, +8.994637579e-04f, +5.241475292e-04f, +1.883518612e-04f, -2.796341146e-05f, -1.122916229e-04f, -1.031283033e-04f, -5.634991455e-05f, -1.504911122e-05f, +1.835381414e-03f, +4.690680242e-03f, +6.653974943e-03f, +4.092506755e-03f, -5.430303451e-03f, -1.997117599e-02f, -3.233609636e-02f, -3.331231276e-02f, -1.773452848e-02f, +1.067805940e-02f, +3.974164106e-02f, +5.513168435e-02f, +4.885918772e-02f, +2.420689197e-02f, -6.312482782e-03f, -2.854621219e-02f, -3.463398879e-02f, -2.620740629e-02f, -1.149352756e-02f, +7.967077873e-04f, +6.300886015e-03f, +5.861100077e-03f, +3.004293539e-03f, +7.401826381e-04f, -7.405661171e-05f, -9.252650505e-05f, -1.232095899e-05f, +1.811851882e-04f, +3.981871848e-04f, +4.695685371e-04f, +2.583542202e-04f, -2.129557746e-04f, -7.259688140e-04f, -9.755628138e-04f, -7.677963930e-04f, -1.675597955e-04f, +5.208122351e-04f, +9.379447391e-04f, +8.924973807e-04f, +4.669550271e-04f, -6.051154104e-05f, -4.091951571e-04f, -4.605305087e-04f, -2.893923386e-04f, -6.712220468e-05f, +7.017794291e-05f, +9.106986765e-05f, +4.712263144e-05f, /* 3, 8 (24) */ -4.761133239e-04f, -2.313262028e-03f, -5.581908853e-03f, -9.033335391e-03f, -9.672794117e-03f, -3.338209197e-03f, +1.367733977e-02f, +4.251221847e-02f, +8.016768649e-02f, +1.194869147e-01f, +1.510478232e-01f, +1.663779630e-01f, +1.611399249e-01f, +1.368302969e-01f, +1.001890958e-01f, +6.060045338e-02f, +2.669816253e-02f, +3.679225055e-03f, -7.644200437e-03f, -9.951893067e-03f, -7.432283053e-03f, -3.806512847e-03f, -1.200175488e-03f, -8.756422961e-05f, +3.331912137e-05f, +8.119452490e-05f, +1.158955069e-04f, +8.505261935e-05f, -6.295450197e-05f, -3.447431114e-04f, -7.142981987e-04f, -1.061839975e-03f, -1.247846734e-03f, -1.161566456e-03f, -7.769277177e-04f, -1.760162742e-04f, +4.754222452e-04f, +9.916331371e-04f, +1.240042814e-03f, +1.189232016e-03f, +9.104701097e-04f, +5.358652772e-04f, +1.972783248e-04f, -2.329763868e-05f, -1.113538339e-04f, -1.042663492e-04f, -5.788982657e-05f, -1.602028222e-05f, +1.761324802e-03f, +4.598153737e-03f, +6.641653984e-03f, +4.273691943e-03f, -5.032116266e-03f, -1.950160745e-02f, -3.207774214e-02f, -3.352526853e-02f, -1.846049729e-02f, +9.702496584e-03f, +3.897384466e-02f, +5.496412455e-02f, +4.937999995e-02f, +2.514483671e-02f, -5.419985402e-03f, -2.807925716e-02f, -3.469450033e-02f, -2.661660145e-02f, -1.195405807e-02f, +5.073154486e-04f, +6.233763811e-03f, +5.931278019e-03f, +3.095363407e-03f, +7.873052695e-04f, -7.260306441e-05f, -9.315029562e-05f, -1.670849714e-05f, +1.740344774e-04f, +3.926646570e-04f, +4.712027976e-04f, +2.695464950e-04f, -1.960526557e-04f, -7.124068508e-04f, -9.742559428e-04f, -7.813026251e-04f, -1.896254575e-04f, +5.017650765e-04f, +9.316022141e-04f, +9.007708077e-04f, +4.834695166e-04f, -4.557378534e-05f, -4.027259288e-04f, -4.630752424e-04f, -2.964368879e-04f, -7.324415279e-05f, +6.776053655e-05f, +9.177845775e-05f, +4.875794816e-05f, /* 3, 9 (24) */ -4.427942025e-04f, -2.232067503e-03f, -5.466013346e-03f, -8.948282772e-03f, -9.735748619e-03f, -3.682952308e-03f, +1.296304157e-02f, +4.145037849e-02f, +7.891983976e-02f, +1.183253482e-01f, +1.502708955e-01f, +1.662019467e-01f, +1.616153472e-01f, +1.378219300e-01f, +1.014291386e-01f, +6.178968539e-02f, +2.760863264e-02f, +4.215090332e-03f, -7.446922112e-03f, -9.975190705e-03f, -7.543636887e-03f, -3.910779196e-03f, -1.258065314e-03f, -1.035845118e-04f, +3.201678962e-05f, +7.966944564e-05f, +1.155000078e-04f, +8.757388061e-05f, -5.624924209e-05f, -3.341890411e-04f, -7.023827773e-04f, -1.052705362e-03f, -1.245748821e-03f, -1.168919517e-03f, -7.929131518e-04f, -1.965525135e-04f, +4.562111037e-04f, +9.790961562e-04f, +1.236932995e-03f, +1.194857373e-03f, +9.213830297e-04f, +5.476226379e-04f, +2.063259119e-04f, -1.849803145e-05f, -1.103216742e-04f, -1.053672132e-04f, -5.943645860e-05f, -1.701521163e-05f, +1.688721738e-03f, +4.505003441e-03f, +6.624945487e-03f, +4.447726420e-03f, -4.639451609e-03f, -1.903040465e-02f, -3.180819564e-02f, -3.372132119e-02f, -1.917290414e-02f, +8.728240641e-03f, +3.819254204e-02f, +5.477449910e-02f, +4.988176503e-02f, +2.607643892e-02f, -4.519214594e-03f, -2.759578764e-02f, -3.474007411e-02f, -2.701932737e-02f, -1.241713331e-02f, +2.108785608e-04f, +6.160519658e-03f, +5.999038556e-03f, +3.187141865e-03f, +8.360632177e-04f, -7.112261064e-05f, -9.367517274e-05f, -2.097506020e-05f, +1.669187426e-04f, +3.870033460e-04f, +4.725496714e-04f, +2.804632006e-04f, -1.792077627e-04f, -6.985872860e-04f, -9.724820624e-04f, -7.943976588e-04f, -2.115881394e-04f, +4.824479080e-04f, +9.247853271e-04f, +9.086490765e-04f, +4.998744954e-04f, -3.045361205e-05f, -3.959494315e-04f, -4.653897081e-04f, -3.034295771e-04f, -7.945595420e-05f, +6.522142408e-05f, +9.242048371e-05f, +5.039623831e-05f, /* 3,10 (24) */ -4.107774129e-04f, -2.152398058e-03f, -5.350513339e-03f, -8.860708891e-03f, -9.791997861e-03f, -4.017141350e-03f, +1.226065879e-02f, +4.039767313e-02f, +7.767409094e-02f, +1.171564287e-01f, +1.494779824e-01f, +1.660053942e-01f, +1.620715583e-01f, +1.388010262e-01f, +1.026660716e-01f, +6.298454277e-02f, +2.853001567e-02f, +4.762712970e-03f, -7.240596200e-03f, -9.993688737e-03f, -7.653958562e-03f, -4.016146410e-03f, -1.317501773e-03f, -1.205997235e-04f, +3.073410572e-05f, +7.813486075e-05f, +1.150424160e-04f, +8.997914366e-05f, -4.968030480e-05f, -3.237287524e-04f, -6.904527520e-04f, -1.043414965e-03f, -1.243380221e-03f, -1.175971057e-03f, -8.086760026e-04f, -2.170317298e-04f, +4.368686841e-04f, +9.662916374e-04f, +1.233521370e-03f, +1.200251434e-03f, +9.321980153e-04f, +5.594160446e-04f, +2.154931235e-04f, -1.356404255e-05f, -1.091934511e-04f, -1.064291845e-04f, -6.098882748e-05f, -1.803376207e-05f, +1.617599127e-03f, +4.411328268e-03f, +6.603970427e-03f, +4.614645163e-03f, -4.252448263e-03f, -1.855785498e-02f, -3.152773244e-02f, -3.390052895e-02f, -1.987149143e-02f, +7.755758579e-03f, +3.739814438e-02f, +5.456291096e-02f, +5.036421294e-02f, +2.700122425e-02f, -3.610565517e-03f, -2.709591315e-02f, -3.477052773e-02f, -2.741527681e-02f, -1.288252302e-02f, -9.255101630e-05f, +6.081063704e-03f, +6.064259980e-03f, +3.279562349e-03f, +8.864594560e-04f, -6.961746379e-05f, -9.410304080e-05f, -2.511985993e-05f, +1.598423714e-04f, +3.812090587e-04f, +4.736119604e-04f, +2.911007126e-04f, -1.624303064e-04f, -6.845194958e-04f, -9.702441724e-04f, -8.070753387e-04f, -2.334359524e-04f, +4.628708924e-04f, +9.174962798e-04f, +9.161257322e-04f, +5.161598063e-04f, -1.515822609e-05f, -3.888662781e-04f, -4.674692186e-04f, -3.103647537e-04f, -8.575472369e-05f, +6.255996215e-05f, +9.299361279e-05f, +5.203577121e-05f, /* 3,11 (24) */ -3.800433072e-04f, -2.074263197e-03f, -5.235470923e-03f, -8.770729748e-03f, -9.841678166e-03f, -4.340870102e-03f, +1.157020604e-02f, +3.935425817e-02f, +7.643071072e-02f, +1.159804577e-01f, +1.486693064e-01f, +1.657883625e-01f, +1.625084270e-01f, +1.397673178e-01f, +1.038995930e-01f, +6.418479420e-02f, +2.946221369e-02f, +5.322129014e-03f, -7.025103077e-03f, -1.000725278e-02f, -7.763152013e-03f, -4.122575594e-03f, -1.378490601e-03f, -1.386334855e-04f, +2.947152747e-05f, +7.659209903e-05f, +1.145245570e-04f, +9.226977516e-05f, -4.324790277e-05f, -3.133646471e-04f, -6.785122664e-04f, -1.033973138e-03f, -1.240743497e-03f, -1.182720392e-03f, -8.242122456e-04f, -2.374480061e-04f, +4.174004428e-04f, +9.532224458e-04f, +1.229807311e-03f, +1.205410740e-03f, +9.429105634e-04f, +5.712418783e-04f, +2.247783902e-04f, -8.495178141e-06f, -1.079674899e-04f, -1.074505383e-04f, -6.254592231e-05f, -1.907577351e-05f, +1.547981663e-03f, +4.317225227e-03f, +6.578850567e-03f, +4.774487534e-03f, -3.871239204e-03f, -1.808424302e-02f, -3.123663173e-02f, -3.406295926e-02f, -2.055601093e-02f, +6.785514407e-03f, +3.659106904e-02f, +5.432947500e-02f, +5.082708383e-02f, +2.791872053e-02f, -2.694439785e-03f, -2.657975334e-02f, -3.478568595e-02f, -2.780414308e-02f, -1.334999224e-02f, -4.029157700e-04f, +5.995308980e-03f, +6.126819942e-03f, +3.372555961e-03f, +9.384952272e-04f, -6.808981202e-05f, -9.443585119e-05f, -2.914221957e-05f, +1.528096552e-04f, +3.752876194e-04f, +4.743926272e-04f, +3.014556219e-04f, -1.457293867e-04f, -6.702129574e-04f, -9.675455443e-04f, -8.193297752e-04f, -2.551570831e-04f, +4.430443616e-04f, +9.097375674e-04f, +9.231945381e-04f, +5.323153022e-04f, +3.049954096e-07f, -3.814772927e-04f, -4.693091933e-04f, -3.172367269e-04f, -9.213746067e-05f, +5.977559862e-05f, +9.349552672e-05f, +5.367477390e-05f, /* 3,12 (24) */ -3.505717797e-04f, -1.997671098e-03f, -5.120946366e-03f, -8.678459973e-03f, -9.884926069e-03f, -4.654234749e-03f, +1.089169377e-02f, +3.832028503e-02f, +7.518996722e-02f, +1.147977373e-01f, +1.478450941e-01f, +1.655509145e-01f, +1.629258274e-01f, +1.407205403e-01f, +1.051294003e-01f, +6.539020494e-02f, +3.040512425e-02f, +5.893370893e-03f, -6.800324687e-03f, -1.001574796e-02f, -7.871119503e-03f, -4.230026132e-03f, -1.441036523e-03f, -1.577092590e-04f, +2.822948635e-05f, +7.504246434e-05f, +1.139482527e-04f, +9.444717383e-05f, -3.695218563e-05f, -3.030990593e-04f, -6.665654277e-04f, -1.024384255e-03f, -1.237841299e-03f, -1.189166949e-03f, -8.395179455e-04f, -2.577954513e-04f, +3.978118871e-04f, +9.398915490e-04f, +1.225790291e-03f, +1.210331898e-03f, +9.535161724e-04f, +5.830964695e-04f, +2.341800727e-04f, -3.290998695e-06f, -1.066421355e-04f, -1.084295370e-04f, -6.410670458e-05f, -2.014106283e-05f, +1.479891851e-03f, +4.222789376e-03f, +6.549708347e-03f, +4.927297190e-03f, -3.495951585e-03f, -1.760985039e-02f, -3.093517611e-02f, -3.420868864e-02f, -2.122622388e-02f, +5.817968862e-03f, +3.577173927e-02f, +5.407431792e-02f, +5.127012819e-02f, +2.882845810e-02f, -1.771245247e-03f, -2.604743804e-02f, -3.478538096e-02f, -2.818562038e-02f, -1.381930143e-02f, -7.201524968e-04f, +5.903171519e-03f, +6.186595541e-03f, +3.466051488e-03f, +9.921700011e-04f, -6.654181667e-05f, -9.467559976e-05f, -3.304157275e-05f, +1.458247867e-04f, +3.692448657e-04f, +4.748947917e-04f, +3.115247356e-04f, -1.291139872e-04f, -6.556772422e-04f, -9.643897178e-04f, -8.311553482e-04f, -2.767398011e-04f, +4.229788096e-04f, +9.015119779e-04f, +9.298494802e-04f, +5.483308534e-04f, +1.592850708e-05f, -3.737835110e-04f, -4.709051630e-04f, -3.240397715e-04f, -9.860105002e-05f, +5.686787454e-05f, +9.392392406e-05f, +5.531143209e-05f, /* 3,13 (24) */ -3.223422934e-04f, -1.922628634e-03f, -5.006998113e-03f, -8.584012799e-03f, -9.921878255e-03f, -4.957333808e-03f, +1.022512834e-02f, +3.729590077e-02f, +7.395212592e-02f, +1.136085703e-01f, +1.470055762e-01f, +1.652931190e-01f, +1.633236393e-01f, +1.416604318e-01f, +1.063551906e-01f, +6.660053684e-02f, +3.135864042e-02f, +6.476467362e-03f, -6.566144614e-03f, -1.001903896e-02f, -7.977761638e-03f, -4.338455669e-03f, -1.505143227e-03f, -1.778503219e-04f, +2.700838771e-05f, +7.348723518e-05f, +1.133153205e-04f, +9.651276932e-05f, -3.079324068e-05f, -2.929342549e-04f, -6.546163060e-04f, -1.014652716e-03f, -1.234676357e-03f, -1.195310268e-03f, -8.545892583e-04f, -2.780682019e-04f, +3.781085727e-04f, +9.263020168e-04f, +1.221469894e-03f, +1.215011582e-03f, +9.640103445e-04f, +5.949760984e-04f, +2.436964612e-04f, +2.048880094e-06f, -1.052157528e-04f, -1.093644307e-04f, -6.567010828e-05f, -2.122942351e-05f, +1.413350034e-03f, +4.128113776e-03f, +6.516666774e-03f, +5.073121976e-03f, -3.126706719e-03f, -1.713495560e-02f, -3.062365137e-02f, -3.433780263e-02f, -2.188190113e-02f, +4.853579145e-03f, +3.494058392e-02f, +5.379757812e-02f, +5.169310700e-02f, +2.972997008e-02f, -8.413957668e-04f, -2.549910718e-02f, -3.476945245e-02f, -2.855940389e-02f, -1.429020659e-02f, -1.044192268e-03f, +5.804570469e-03f, +6.243463415e-03f, +3.559975412e-03f, +1.047481433e-03f, -6.497561062e-05f, -9.482432426e-05f, -3.681746224e-05f, +1.388918578e-04f, +3.630866432e-04f, +4.751217272e-04f, +3.213050770e-04f, -1.125929696e-04f, -6.409220088e-04f, -9.607804978e-04f, -8.425467097e-04f, -2.981724664e-04f, +4.026848863e-04f, +8.928225909e-04f, +9.360847722e-04f, +5.641963547e-04f, +3.170459927e-05f, -3.657861821e-04f, -4.722527742e-04f, -3.307681324e-04f, -1.051422630e-04f, +5.383642604e-05f, +9.427652269e-05f, +5.694389116e-05f, /* 3,14 (24) */ -2.953339057e-04f, -1.849141399e-03f, -4.893682792e-03f, -8.487500029e-03f, -9.952671495e-03f, -5.250268063e-03f, +9.570512039e-03f, +3.628124806e-02f, +7.271744956e-02f, +1.124132600e-01f, +1.461509869e-01f, +1.650150508e-01f, +1.637017479e-01f, +1.425867338e-01f, +1.075766605e-01f, +6.781554842e-02f, +3.232265077e-02f, +7.071443461e-03f, -6.322448153e-03f, -1.001699008e-02f, -8.082977391e-03f, -4.447820100e-03f, -1.570813336e-03f, -1.990797454e-04f, +2.580861103e-05f, +7.192766441e-05f, +1.126275727e-04f, +9.846802098e-05f, -2.477109356e-05f, -2.828724308e-04f, -6.426689324e-04f, -1.004782937e-03f, -1.231251482e-03f, -1.201149997e-03f, -8.694224322e-04f, -2.982604250e-04f, +3.582961021e-04f, +9.124570196e-04f, +1.216845811e-03f, +1.219446534e-03f, +9.743885871e-04f, +6.068769973e-04f, +2.533257760e-04f, +7.524786438e-06f, -1.036867286e-04f, -1.102534579e-04f, -6.723504006e-05f, -2.234062528e-05f, +1.348374424e-03f, +4.033289452e-03f, +6.479849312e-03f, +5.212013834e-03f, -2.763620076e-03f, -1.665983388e-02f, -3.030234629e-02f, -3.445039560e-02f, -2.252282313e-02f, +3.892798647e-03f, +3.409803721e-02f, +5.349940565e-02f, +5.209579189e-02f, +3.062279267e-02f, +9.468900538e-05f, -2.493491083e-02f, -3.473774785e-02f, -2.892519007e-02f, -1.476245937e-02f, -1.374960401e-03f, +5.699428206e-03f, +6.297299841e-03f, +3.654251935e-03f, +1.104425324e-03f, -6.339329680e-05f, -9.488410187e-05f, -4.046953872e-05f, +1.320148582e-04f, +3.568188019e-04f, +4.750768565e-04f, +3.307938859e-04f, -9.617506873e-05f, -6.259569963e-04f, -9.567219509e-04f, -8.534987871e-04f, -3.194435369e-04f, +3.821733903e-04f, +8.836727763e-04f, +9.418948604e-04f, +5.799017319e-04f, +4.762540224e-05f, -3.574867691e-04f, -4.733477932e-04f, -3.374160279e-04f, -1.117577581e-04f, +5.068098615e-05f, +9.455106226e-05f, +5.857025732e-05f, /* 3,15 (24) */ -2.695252946e-04f, -1.777213734e-03f, -4.781055220e-03f, -8.389032008e-03f, -9.977442589e-03f, -5.533140494e-03f, +8.927843106e-03f, +3.527646512e-02f, +7.148619808e-02f, +1.112121100e-01f, +1.452815645e-01f, +1.647167904e-01f, +1.640600440e-01f, +1.434991908e-01f, +1.087935063e-01f, +6.903499495e-02f, +3.329703935e-02f, +7.678320458e-03f, -6.069122377e-03f, -1.000946529e-02f, -8.186664119e-03f, -4.558073558e-03f, -1.638048376e-03f, -2.214203707e-04f, +2.463051020e-05f, +7.036497893e-05f, +1.118868151e-04f, +1.003144168e-04f, -1.888570902e-05f, -2.729157153e-04f, -6.307272977e-04f, -9.947793529e-04f, -1.227569562e-03f, -1.206685899e-03f, -8.840138096e-04f, -3.183663200e-04f, +3.383801218e-04f, +8.983598275e-04f, +1.211917843e-03f, +1.223633566e-03f, +9.846464151e-04f, +6.187953507e-04f, +2.630661673e-04f, +1.313699159e-05f, -1.020534721e-04f, -1.110948466e-04f, -6.880037942e-05f, -2.347441378e-05f, +1.284981127e-03f, +3.938405350e-03f, +6.439379774e-03f, +5.344028692e-03f, -2.406801274e-03f, -1.618475702e-02f, -2.997155241e-02f, -3.454657067e-02f, -2.314878013e-02f, +2.936076696e-03f, +3.324453842e-02f, +5.317996212e-02f, +5.247796528e-02f, +3.150646544e-02f, +1.036583866e-03f, -2.435500910e-02f, -3.469012245e-02f, -2.928267684e-02f, -1.523580716e-02f, -1.712376429e-03f, +5.587670448e-03f, +6.347980828e-03f, +3.748802997e-03f, +1.162995582e-03f, -6.179694664e-05f, -9.485704656e-05f, -4.399755940e-05f, +1.251976733e-04f, +3.504471909e-04f, +4.747637479e-04f, +3.399886191e-04f, -7.986888717e-05f, -6.107920170e-04f, -9.522184016e-04f, -8.640067861e-04f, -3.405415765e-04f, +3.614552619e-04f, +8.740661928e-04f, +9.472744285e-04f, +5.954369495e-04f, +6.368289049e-05f, -3.488869502e-04f, -4.741861112e-04f, -3.439776545e-04f, -1.184440826e-04f, +4.740138658e-05f, +9.474530667e-05f, +6.018859872e-05f, /* 3,16 (24) */ -2.448947844e-04f, -1.706848755e-03f, -4.669168405e-03f, -8.288717592e-03f, -9.996328298e-03f, -5.806056209e-03f, +8.297115809e-03f, +3.428168577e-02f, +7.025862852e-02f, +1.100054241e-01f, +1.443975507e-01f, +1.643984241e-01f, +1.643984241e-01f, +1.443975507e-01f, +1.100054241e-01f, +7.025862852e-02f, +3.428168577e-02f, +8.297115809e-03f, -5.806056209e-03f, -9.996328298e-03f, -8.288717592e-03f, -4.669168405e-03f, -1.706848755e-03f, -2.448947844e-04f, +2.347441378e-05f, +6.880037942e-05f, +1.110948466e-04f, +1.020534721e-04f, -1.313699159e-05f, -2.630661673e-04f, -6.187953507e-04f, -9.846464151e-04f, -1.223633566e-03f, -1.211917843e-03f, -8.983598275e-04f, -3.383801218e-04f, +3.183663200e-04f, +8.840138096e-04f, +1.206685899e-03f, +1.227569562e-03f, +9.947793529e-04f, +6.307272977e-04f, +2.729157153e-04f, +1.888570902e-05f, -1.003144168e-04f, -1.118868151e-04f, -7.036497893e-05f, -2.463051020e-05f, +1.223184180e-03f, +3.843548304e-03f, +6.395382214e-03f, +5.469226366e-03f, -2.056354083e-03f, -1.570999327e-02f, -2.963156379e-02f, -3.462643956e-02f, -2.375957215e-02f, +1.983858294e-03f, +3.238053164e-02f, +5.283942054e-02f, +5.283942054e-02f, +3.238053164e-02f, +1.983858294e-03f, -2.375957215e-02f, -3.462643956e-02f, -2.963156379e-02f, -1.570999327e-02f, -2.056354083e-03f, +5.469226366e-03f, +6.395382214e-03f, +3.843548304e-03f, +1.223184180e-03f, -6.018859872e-05f, -9.474530667e-05f, -4.740138658e-05f, +1.184440826e-04f, +3.439776545e-04f, +4.741861112e-04f, +3.488869502e-04f, -6.368289049e-05f, -5.954369495e-04f, -9.472744285e-04f, -8.740661928e-04f, -3.614552619e-04f, +3.405415765e-04f, +8.640067861e-04f, +9.522184016e-04f, +6.107920170e-04f, +7.986888717e-05f, -3.399886191e-04f, -4.747637479e-04f, -3.504471909e-04f, -1.251976733e-04f, +4.399755940e-05f, +9.485704656e-05f, +6.179694664e-05f, /* 3,17 (24) */ -2.214203707e-04f, -1.638048376e-03f, -4.558073558e-03f, -8.186664119e-03f, -1.000946529e-02f, -6.069122377e-03f, +7.678320458e-03f, +3.329703935e-02f, +6.903499495e-02f, +1.087935063e-01f, +1.434991908e-01f, +1.640600440e-01f, +1.647167904e-01f, +1.452815645e-01f, +1.112121100e-01f, +7.148619808e-02f, +3.527646512e-02f, +8.927843106e-03f, -5.533140494e-03f, -9.977442589e-03f, -8.389032008e-03f, -4.781055220e-03f, -1.777213734e-03f, -2.695252946e-04f, +2.234062528e-05f, +6.723504006e-05f, +1.102534579e-04f, +1.036867286e-04f, -7.524786438e-06f, -2.533257760e-04f, -6.068769973e-04f, -9.743885871e-04f, -1.219446534e-03f, -1.216845811e-03f, -9.124570196e-04f, -3.582961021e-04f, +2.982604250e-04f, +8.694224322e-04f, +1.201149997e-03f, +1.231251482e-03f, +1.004782937e-03f, +6.426689324e-04f, +2.828724308e-04f, +2.477109356e-05f, -9.846802098e-05f, -1.126275727e-04f, -7.192766441e-05f, -2.580861103e-05f, +1.162995582e-03f, +3.748802997e-03f, +6.347980828e-03f, +5.587670448e-03f, -1.712376429e-03f, -1.523580716e-02f, -2.928267684e-02f, -3.469012245e-02f, -2.435500910e-02f, +1.036583866e-03f, +3.150646544e-02f, +5.247796528e-02f, +5.317996212e-02f, +3.324453842e-02f, +2.936076696e-03f, -2.314878013e-02f, -3.454657067e-02f, -2.997155241e-02f, -1.618475702e-02f, -2.406801274e-03f, +5.344028692e-03f, +6.439379774e-03f, +3.938405350e-03f, +1.284981127e-03f, -5.857025732e-05f, -9.455106226e-05f, -5.068098615e-05f, +1.117577581e-04f, +3.374160279e-04f, +4.733477932e-04f, +3.574867691e-04f, -4.762540224e-05f, -5.799017319e-04f, -9.418948604e-04f, -8.836727763e-04f, -3.821733903e-04f, +3.194435369e-04f, +8.534987871e-04f, +9.567219509e-04f, +6.259569963e-04f, +9.617506873e-05f, -3.307938859e-04f, -4.750768565e-04f, -3.568188019e-04f, -1.320148582e-04f, +4.046953872e-05f, +9.488410187e-05f, +6.339329680e-05f, /* 3,18 (24) */ -1.990797454e-04f, -1.570813336e-03f, -4.447820100e-03f, -8.082977391e-03f, -1.001699008e-02f, -6.322448153e-03f, +7.071443461e-03f, +3.232265077e-02f, +6.781554842e-02f, +1.075766605e-01f, +1.425867338e-01f, +1.637017479e-01f, +1.650150508e-01f, +1.461509869e-01f, +1.124132600e-01f, +7.271744956e-02f, +3.628124806e-02f, +9.570512039e-03f, -5.250268063e-03f, -9.952671495e-03f, -8.487500029e-03f, -4.893682792e-03f, -1.849141399e-03f, -2.953339057e-04f, +2.122942351e-05f, +6.567010828e-05f, +1.093644307e-04f, +1.052157528e-04f, -2.048880094e-06f, -2.436964612e-04f, -5.949760984e-04f, -9.640103445e-04f, -1.215011582e-03f, -1.221469894e-03f, -9.263020168e-04f, -3.781085727e-04f, +2.780682019e-04f, +8.545892583e-04f, +1.195310268e-03f, +1.234676357e-03f, +1.014652716e-03f, +6.546163060e-04f, +2.929342549e-04f, +3.079324068e-05f, -9.651276932e-05f, -1.133153205e-04f, -7.348723518e-05f, -2.700838771e-05f, +1.104425324e-03f, +3.654251935e-03f, +6.297299841e-03f, +5.699428206e-03f, -1.374960401e-03f, -1.476245937e-02f, -2.892519007e-02f, -3.473774785e-02f, -2.493491083e-02f, +9.468900538e-05f, +3.062279267e-02f, +5.209579189e-02f, +5.349940565e-02f, +3.409803721e-02f, +3.892798647e-03f, -2.252282313e-02f, -3.445039560e-02f, -3.030234629e-02f, -1.665983388e-02f, -2.763620076e-03f, +5.212013834e-03f, +6.479849312e-03f, +4.033289452e-03f, +1.348374424e-03f, -5.694389116e-05f, -9.427652269e-05f, -5.383642604e-05f, +1.051422630e-04f, +3.307681324e-04f, +4.722527742e-04f, +3.657861821e-04f, -3.170459927e-05f, -5.641963547e-04f, -9.360847722e-04f, -8.928225909e-04f, -4.026848863e-04f, +2.981724664e-04f, +8.425467097e-04f, +9.607804978e-04f, +6.409220088e-04f, +1.125929696e-04f, -3.213050770e-04f, -4.751217272e-04f, -3.630866432e-04f, -1.388918578e-04f, +3.681746224e-05f, +9.482432426e-05f, +6.497561062e-05f, /* 3,19 (24) */ -1.778503219e-04f, -1.505143227e-03f, -4.338455669e-03f, -7.977761638e-03f, -1.001903896e-02f, -6.566144614e-03f, +6.476467362e-03f, +3.135864042e-02f, +6.660053684e-02f, +1.063551906e-01f, +1.416604318e-01f, +1.633236393e-01f, +1.652931190e-01f, +1.470055762e-01f, +1.136085703e-01f, +7.395212592e-02f, +3.729590077e-02f, +1.022512834e-02f, -4.957333808e-03f, -9.921878255e-03f, -8.584012799e-03f, -5.006998113e-03f, -1.922628634e-03f, -3.223422934e-04f, +2.014106283e-05f, +6.410670458e-05f, +1.084295370e-04f, +1.066421355e-04f, +3.290998695e-06f, -2.341800727e-04f, -5.830964695e-04f, -9.535161724e-04f, -1.210331898e-03f, -1.225790291e-03f, -9.398915490e-04f, -3.978118871e-04f, +2.577954513e-04f, +8.395179455e-04f, +1.189166949e-03f, +1.237841299e-03f, +1.024384255e-03f, +6.665654277e-04f, +3.030990593e-04f, +3.695218563e-05f, -9.444717383e-05f, -1.139482527e-04f, -7.504246434e-05f, -2.822948635e-05f, +1.047481433e-03f, +3.559975412e-03f, +6.243463415e-03f, +5.804570469e-03f, -1.044192268e-03f, -1.429020659e-02f, -2.855940389e-02f, -3.476945245e-02f, -2.549910718e-02f, -8.413957668e-04f, +2.972997008e-02f, +5.169310700e-02f, +5.379757812e-02f, +3.494058392e-02f, +4.853579145e-03f, -2.188190113e-02f, -3.433780263e-02f, -3.062365137e-02f, -1.713495560e-02f, -3.126706719e-03f, +5.073121976e-03f, +6.516666774e-03f, +4.128113776e-03f, +1.413350034e-03f, -5.531143209e-05f, -9.392392406e-05f, -5.686787454e-05f, +9.860105002e-05f, +3.240397715e-04f, +4.709051630e-04f, +3.737835110e-04f, -1.592850708e-05f, -5.483308534e-04f, -9.298494802e-04f, -9.015119779e-04f, -4.229788096e-04f, +2.767398011e-04f, +8.311553482e-04f, +9.643897178e-04f, +6.556772422e-04f, +1.291139872e-04f, -3.115247356e-04f, -4.748947917e-04f, -3.692448657e-04f, -1.458247867e-04f, +3.304157275e-05f, +9.467559976e-05f, +6.654181667e-05f, /* 3,20 (24) */ -1.577092590e-04f, -1.441036523e-03f, -4.230026132e-03f, -7.871119503e-03f, -1.001574796e-02f, -6.800324687e-03f, +5.893370893e-03f, +3.040512425e-02f, +6.539020494e-02f, +1.051294003e-01f, +1.407205403e-01f, +1.629258274e-01f, +1.655509145e-01f, +1.478450941e-01f, +1.147977373e-01f, +7.518996722e-02f, +3.832028503e-02f, +1.089169377e-02f, -4.654234749e-03f, -9.884926069e-03f, -8.678459973e-03f, -5.120946366e-03f, -1.997671098e-03f, -3.505717797e-04f, +1.907577351e-05f, +6.254592231e-05f, +1.074505383e-04f, +1.079674899e-04f, +8.495178141e-06f, -2.247783902e-04f, -5.712418783e-04f, -9.429105634e-04f, -1.205410740e-03f, -1.229807311e-03f, -9.532224458e-04f, -4.174004428e-04f, +2.374480061e-04f, +8.242122456e-04f, +1.182720392e-03f, +1.240743497e-03f, +1.033973138e-03f, +6.785122664e-04f, +3.133646471e-04f, +4.324790277e-05f, -9.226977516e-05f, -1.145245570e-04f, -7.659209903e-05f, -2.947152747e-05f, +9.921700011e-04f, +3.466051488e-03f, +6.186595541e-03f, +5.903171519e-03f, -7.201524968e-04f, -1.381930143e-02f, -2.818562038e-02f, -3.478538096e-02f, -2.604743804e-02f, -1.771245247e-03f, +2.882845810e-02f, +5.127012819e-02f, +5.407431792e-02f, +3.577173927e-02f, +5.817968862e-03f, -2.122622388e-02f, -3.420868864e-02f, -3.093517611e-02f, -1.760985039e-02f, -3.495951585e-03f, +4.927297190e-03f, +6.549708347e-03f, +4.222789376e-03f, +1.479891851e-03f, -5.367477390e-05f, -9.349552672e-05f, -5.977559862e-05f, +9.213746067e-05f, +3.172367269e-04f, +4.693091933e-04f, +3.814772927e-04f, -3.049954096e-07f, -5.323153022e-04f, -9.231945381e-04f, -9.097375674e-04f, -4.430443616e-04f, +2.551570831e-04f, +8.193297752e-04f, +9.675455443e-04f, +6.702129574e-04f, +1.457293867e-04f, -3.014556219e-04f, -4.743926272e-04f, -3.752876194e-04f, -1.528096552e-04f, +2.914221957e-05f, +9.443585119e-05f, +6.808981202e-05f, /* 3,21 (24) */ -1.386334855e-04f, -1.378490601e-03f, -4.122575594e-03f, -7.763152013e-03f, -1.000725278e-02f, -7.025103077e-03f, +5.322129014e-03f, +2.946221369e-02f, +6.418479420e-02f, +1.038995930e-01f, +1.397673178e-01f, +1.625084270e-01f, +1.657883625e-01f, +1.486693064e-01f, +1.159804577e-01f, +7.643071072e-02f, +3.935425817e-02f, +1.157020604e-02f, -4.340870102e-03f, -9.841678166e-03f, -8.770729748e-03f, -5.235470923e-03f, -2.074263197e-03f, -3.800433072e-04f, +1.803376207e-05f, +6.098882748e-05f, +1.064291845e-04f, +1.091934511e-04f, +1.356404255e-05f, -2.154931235e-04f, -5.594160446e-04f, -9.321980153e-04f, -1.200251434e-03f, -1.233521370e-03f, -9.662916374e-04f, -4.368686841e-04f, +2.170317298e-04f, +8.086760026e-04f, +1.175971057e-03f, +1.243380221e-03f, +1.043414965e-03f, +6.904527520e-04f, +3.237287524e-04f, +4.968030480e-05f, -8.997914366e-05f, -1.150424160e-04f, -7.813486075e-05f, -3.073410572e-05f, +9.384952272e-04f, +3.372555961e-03f, +6.126819942e-03f, +5.995308980e-03f, -4.029157700e-04f, -1.334999224e-02f, -2.780414308e-02f, -3.478568595e-02f, -2.657975334e-02f, -2.694439785e-03f, +2.791872053e-02f, +5.082708383e-02f, +5.432947500e-02f, +3.659106904e-02f, +6.785514407e-03f, -2.055601093e-02f, -3.406295926e-02f, -3.123663173e-02f, -1.808424302e-02f, -3.871239204e-03f, +4.774487534e-03f, +6.578850567e-03f, +4.317225227e-03f, +1.547981663e-03f, -5.203577121e-05f, -9.299361279e-05f, -6.255996215e-05f, +8.575472369e-05f, +3.103647537e-04f, +4.674692186e-04f, +3.888662781e-04f, +1.515822609e-05f, -5.161598063e-04f, -9.161257322e-04f, -9.174962798e-04f, -4.628708924e-04f, +2.334359524e-04f, +8.070753387e-04f, +9.702441724e-04f, +6.845194958e-04f, +1.624303064e-04f, -2.911007126e-04f, -4.736119604e-04f, -3.812090587e-04f, -1.598423714e-04f, +2.511985993e-05f, +9.410304080e-05f, +6.961746379e-05f, /* 3,22 (24) */ -1.205997235e-04f, -1.317501773e-03f, -4.016146410e-03f, -7.653958562e-03f, -9.993688737e-03f, -7.240596200e-03f, +4.762712970e-03f, +2.853001567e-02f, +6.298454277e-02f, +1.026660716e-01f, +1.388010262e-01f, +1.620715583e-01f, +1.660053942e-01f, +1.494779824e-01f, +1.171564287e-01f, +7.767409094e-02f, +4.039767313e-02f, +1.226065879e-02f, -4.017141350e-03f, -9.791997861e-03f, -8.860708891e-03f, -5.350513339e-03f, -2.152398058e-03f, -4.107774129e-04f, +1.701521163e-05f, +5.943645860e-05f, +1.053672132e-04f, +1.103216742e-04f, +1.849803145e-05f, -2.063259119e-04f, -5.476226379e-04f, -9.213830297e-04f, -1.194857373e-03f, -1.236932995e-03f, -9.790961562e-04f, -4.562111037e-04f, +1.965525135e-04f, +7.929131518e-04f, +1.168919517e-03f, +1.245748821e-03f, +1.052705362e-03f, +7.023827773e-04f, +3.341890411e-04f, +5.624924209e-05f, -8.757388061e-05f, -1.155000078e-04f, -7.966944564e-05f, -3.201678962e-05f, +8.864594560e-04f, +3.279562349e-03f, +6.064259980e-03f, +6.081063704e-03f, -9.255101630e-05f, -1.288252302e-02f, -2.741527681e-02f, -3.477052773e-02f, -2.709591315e-02f, -3.610565517e-03f, +2.700122425e-02f, +5.036421294e-02f, +5.456291096e-02f, +3.739814438e-02f, +7.755758579e-03f, -1.987149143e-02f, -3.390052895e-02f, -3.152773244e-02f, -1.855785498e-02f, -4.252448263e-03f, +4.614645163e-03f, +6.603970427e-03f, +4.411328268e-03f, +1.617599127e-03f, -5.039623831e-05f, -9.242048371e-05f, -6.522142408e-05f, +7.945595420e-05f, +3.034295771e-04f, +4.653897081e-04f, +3.959494315e-04f, +3.045361205e-05f, -4.998744954e-04f, -9.086490765e-04f, -9.247853271e-04f, -4.824479080e-04f, +2.115881394e-04f, +7.943976588e-04f, +9.724820624e-04f, +6.985872860e-04f, +1.792077627e-04f, -2.804632006e-04f, -4.725496714e-04f, -3.870033460e-04f, -1.669187426e-04f, +2.097506020e-05f, +9.367517274e-05f, +7.112261064e-05f, /* 3,23 (24) */ -1.035845118e-04f, -1.258065314e-03f, -3.910779196e-03f, -7.543636887e-03f, -9.975190705e-03f, -7.446922112e-03f, +4.215090332e-03f, +2.760863264e-02f, +6.178968539e-02f, +1.014291386e-01f, +1.378219300e-01f, +1.616153472e-01f, +1.662019467e-01f, +1.502708955e-01f, +1.183253482e-01f, +7.891983976e-02f, +4.145037849e-02f, +1.296304157e-02f, -3.682952308e-03f, -9.735748619e-03f, -8.948282772e-03f, -5.466013346e-03f, -2.232067503e-03f, -4.427942025e-04f, +1.602028222e-05f, +5.788982657e-05f, +1.042663492e-04f, +1.113538339e-04f, +2.329763868e-05f, -1.972783248e-04f, -5.358652772e-04f, -9.104701097e-04f, -1.189232016e-03f, -1.240042814e-03f, -9.916331371e-04f, -4.754222452e-04f, +1.760162742e-04f, +7.769277177e-04f, +1.161566456e-03f, +1.247846734e-03f, +1.061839975e-03f, +7.142981987e-04f, +3.447431114e-04f, +6.295450197e-05f, -8.505261935e-05f, -1.158955069e-04f, -8.119452490e-05f, -3.331912137e-05f, +8.360632177e-04f, +3.187141865e-03f, +5.999038556e-03f, +6.160519658e-03f, +2.108785608e-04f, -1.241713331e-02f, -2.701932737e-02f, -3.474007411e-02f, -2.759578764e-02f, -4.519214594e-03f, +2.607643892e-02f, +4.988176503e-02f, +5.477449910e-02f, +3.819254204e-02f, +8.728240641e-03f, -1.917290414e-02f, -3.372132119e-02f, -3.180819564e-02f, -1.903040465e-02f, -4.639451609e-03f, +4.447726420e-03f, +6.624945487e-03f, +4.505003441e-03f, +1.688721738e-03f, -4.875794816e-05f, -9.177845775e-05f, -6.776053655e-05f, +7.324415279e-05f, +2.964368879e-04f, +4.630752424e-04f, +4.027259288e-04f, +4.557378534e-05f, -4.834695166e-04f, -9.007708077e-04f, -9.316022141e-04f, -5.017650765e-04f, +1.896254575e-04f, +7.813026251e-04f, +9.742559428e-04f, +7.124068508e-04f, +1.960526557e-04f, -2.695464950e-04f, -4.712027976e-04f, -3.926646570e-04f, -1.740344774e-04f, +1.670849714e-05f, +9.315029562e-05f, +7.260306441e-05f, /* 3,24 (24) */ -8.756422961e-05f, -1.200175488e-03f, -3.806512847e-03f, -7.432283053e-03f, -9.951893067e-03f, -7.644200437e-03f, +3.679225055e-03f, +2.669816253e-02f, +6.060045338e-02f, +1.001890958e-01f, +1.368302969e-01f, +1.611399249e-01f, +1.663779630e-01f, +1.510478232e-01f, +1.194869147e-01f, +8.016768649e-02f, +4.251221847e-02f, +1.367733977e-02f, -3.338209197e-03f, -9.672794117e-03f, -9.033335391e-03f, -5.581908853e-03f, -2.313262028e-03f, -4.761133239e-04f, +1.504911122e-05f, +5.634991455e-05f, +1.031283033e-04f, +1.122916229e-04f, +2.796341146e-05f, -1.883518612e-04f, -5.241475292e-04f, -8.994637579e-04f, -1.183378883e-03f, -1.242851567e-03f, -1.003899819e-03f, -4.944967052e-04f, +1.554289519e-04f, +7.607238135e-04f, +1.153912669e-03f, +1.249671477e-03f, +1.070814478e-03f, +7.261948385e-04f, +3.553884937e-04f, +6.979580815e-05f, -8.241402644e-05f, -1.162270856e-04f, -8.270874508e-05f, -3.464061654e-05f, +7.873052695e-04f, +3.095363407e-03f, +5.931278019e-03f, +6.233763811e-03f, +5.073154486e-04f, -1.195405807e-02f, -2.661660145e-02f, -3.469450033e-02f, -2.807925716e-02f, -5.419985402e-03f, +2.514483671e-02f, +4.937999995e-02f, +5.496412455e-02f, +3.897384466e-02f, +9.702496584e-03f, -1.846049729e-02f, -3.352526853e-02f, -3.207774214e-02f, -1.950160745e-02f, -5.032116266e-03f, +4.273691943e-03f, +6.641653984e-03f, +4.598153737e-03f, +1.761324802e-03f, -4.712263144e-05f, -9.106986765e-05f, -7.017794291e-05f, +6.712220468e-05f, +2.893923386e-04f, +4.605305087e-04f, +4.091951571e-04f, +6.051154104e-05f, -4.669550271e-04f, -8.924973807e-04f, -9.379447391e-04f, -5.208122351e-04f, +1.675597955e-04f, +7.677963930e-04f, +9.755628138e-04f, +7.259688140e-04f, +2.129557746e-04f, -2.583542202e-04f, -4.695685371e-04f, -3.981871848e-04f, -1.811851882e-04f, +1.232095899e-05f, +9.252650505e-05f, +7.405661171e-05f, /* 3,25 (24) */ -7.251511839e-05f, -1.143825573e-03f, -3.703384544e-03f, -7.319991431e-03f, -9.923929655e-03f, -7.832552298e-03f, +3.155077526e-03f, +2.579869877e-02f, +5.941707449e-02f, +9.894624425e-02f, +1.358263971e-01f, +1.606454282e-01f, +1.665333920e-01f, +1.518085470e-01f, +1.206408274e-01f, +8.141735797e-02f, +4.358303295e-02f, +1.440353461e-02f, -2.982820703e-03f, -9.602998309e-03f, -9.115749418e-03f, -5.698135939e-03f, -2.395970773e-03f, -5.107539404e-04f, +1.410181368e-05f, +5.481767783e-05f, +1.019547717e-04f, +1.131367508e-04f, +3.249594950e-05f, -1.795479501e-04f, -5.124729073e-04f, -8.883684744e-04f, -1.177301558e-03f, -1.245360095e-03f, -1.015893545e-03f, -5.134291353e-04f, +1.347965074e-04f, +7.443056386e-04f, +1.145959062e-03f, +1.251220658e-03f, +1.079624571e-03f, +7.380684864e-04f, +3.661226517e-04f, +7.677282003e-05f, -7.965680278e-05f, -1.164929146e-04f, -8.421072848e-05f, -3.598076395e-05f, +7.401826381e-04f, +3.004293539e-03f, +5.861100077e-03f, +6.300886015e-03f, +7.967077873e-04f, -1.149352756e-02f, -2.620740629e-02f, -3.463398879e-02f, -2.854621219e-02f, -6.312482782e-03f, +2.420689197e-02f, +4.885918772e-02f, +5.513168435e-02f, +3.974164106e-02f, +1.067805940e-02f, -1.773452848e-02f, -3.331231276e-02f, -3.233609636e-02f, -1.997117599e-02f, -5.430303451e-03f, +4.092506755e-03f, +6.653974943e-03f, +4.690680242e-03f, +1.835381414e-03f, -4.549197558e-05f, -9.029705817e-05f, -7.247437578e-05f, +6.109287905e-05f, +2.823015400e-04f, +4.577602963e-04f, +4.153567124e-04f, +7.525985006e-05f, -4.503411878e-04f, -8.838354626e-04f, -9.438109947e-04f, -5.395793965e-04f, +1.454031092e-04f, +7.538853802e-04f, +9.763999499e-04f, +7.392639072e-04f, +2.299078035e-04f, -2.468902149e-04f, -4.676442529e-04f, -4.035651448e-04f, -1.883663929e-04f, +7.813346558e-06f, +9.180194618e-05f, +7.548101566e-05f, /* 3,26 (24) */ -5.841330471e-05f, -1.089007895e-03f, -3.601429772e-03f, -7.206854680e-03f, -9.891433706e-03f, -8.012100248e-03f, +2.642604618e-03f, +2.491033030e-02f, +5.823977294e-02f, +9.770088416e-02f, +1.348105035e-01f, +1.601319991e-01f, +1.666681885e-01f, +1.525528527e-01f, +1.217867864e-01f, +8.266857863e-02f, +4.466265752e-02f, +1.514160309e-02f, -2.616698052e-03f, -9.526225489e-03f, -9.195406221e-03f, -5.814628854e-03f, -2.480181502e-03f, -5.467347044e-04f, +1.317848272e-05f, +5.329404377e-05f, +1.007474356e-04f, +1.138909429e-04f, +3.689590400e-05f, -1.708679503e-04f, -5.008448706e-04f, -8.771887553e-04f, -1.171003681e-03f, -1.247569347e-03f, -1.027611765e-03f, -5.322142446e-04f, +1.141249198e-04f, +7.276774778e-04f, +1.137706655e-03f, +1.252491970e-03f, +1.088265987e-03f, +7.499149007e-04f, +3.769429824e-04f, +8.388513217e-05f, -7.677968482e-05f, -1.166911641e-04f, -8.569907359e-05f, -3.733902543e-05f, +6.946906625e-04f, +2.913996481e-03f, +5.788625701e-03f, +6.361978894e-03f, +1.079009327e-03f, -1.103576726e-02f, -2.579204958e-02f, -3.455872894e-02f, -2.899655337e-02f, -7.196318245e-03f, +2.326308098e-02f, +4.831960832e-02f, +5.527708746e-02f, +4.049552644e-02f, +1.165445935e-02f, -1.699526457e-02f, -3.308240496e-02f, -3.258298657e-02f, -2.043882024e-02f, -5.833868595e-03f, +3.904140362e-03f, +6.661788290e-03f, +4.782482188e-03f, +1.910862429e-03f, -4.386762395e-05f, -8.946238374e-05f, -7.465065498e-05f, +5.515882843e-05f, +2.751700567e-04f, +4.547694920e-04f, +4.212103984e-04f, +8.981186280e-05f, -4.336381561e-04f, -8.747919281e-04f, -9.491993685e-04f, -5.580567552e-04f, +1.231674144e-04f, +7.395762632e-04f, +9.767649031e-04f, +7.522829769e-04f, +2.468993268e-04f, -2.351585315e-04f, -4.654274759e-04f, -4.087927792e-04f, -1.955735175e-04f, +3.186674108e-06f, +9.097481622e-05f, +7.687401763e-05f, /* 3,27 (24) */ -4.523482199e-05f, -1.035713852e-03f, -3.500682337e-03f, -7.092963737e-03f, -9.854537802e-03f, -8.182968199e-03f, +2.141759748e-03f, +2.403314154e-02f, +5.706876926e-02f, +9.645331481e-02f, +1.337828917e-01f, +1.595997848e-01f, +1.667823134e-01f, +1.532805302e-01f, +1.229244931e-01f, +8.392107060e-02f, +4.575092351e-02f, +1.589151799e-02f, -2.239755069e-03f, -9.442340357e-03f, -9.272185905e-03f, -5.931320018e-03f, -2.565880576e-03f, -5.840737298e-04f, +1.227918995e-05f, +5.177991177e-05f, +9.950795986e-05f, +1.145559393e-04f, +4.116397666e-05f, -1.623131509e-04f, -4.892668230e-04f, -8.659290902e-04f, -1.164488953e-03f, -1.249480374e-03f, -1.039052033e-03f, -5.508468014e-04f, +9.342018411e-05f, +7.108436992e-04f, +1.129156576e-03f, +1.253483196e-03f, +1.096734486e-03f, +7.617298102e-04f, +3.878468170e-04f, +9.113227368e-05f, -7.378144564e-05f, -1.168200048e-04f, -8.717235549e-05f, -3.871483564e-05f, +6.508230385e-04f, +2.824534098e-03f, +5.713975046e-03f, +6.417137723e-03f, +1.354179384e-03f, -1.058099777e-02f, -2.537083918e-02f, -3.446891707e-02f, -2.943019153e-02f, -8.071110173e-03f, +2.231388161e-02f, +4.776155157e-02f, +5.540025487e-02f, +4.123510270e-02f, +1.263122425e-02f, -1.624298160e-02f, -3.283550563e-02f, -3.281814510e-02f, -2.090424772e-02f, -6.242661375e-03f, +3.708566844e-03f, +6.664974964e-03f, +4.873457004e-03f, +1.987736447e-03f, -4.225117502e-05f, -8.856820608e-05f, -7.670768539e-05f, +4.932258818e-05f, +2.680034041e-04f, +4.515630755e-04f, +4.267562251e-04f, +1.041609125e-04f, -4.168560789e-04f, -8.653738534e-04f, -9.541085427e-04f, -5.762346935e-04f, +1.008647784e-04f, +7.248759729e-04f, +9.766555049e-04f, +7.650169907e-04f, +2.639208351e-04f, -2.231634351e-04f, -4.629159086e-04f, -4.138643616e-04f, -2.028018984e-04f, -1.557929709e-06f, +9.004336690e-05f, +7.823333901e-05f, /* 3,28 (24) */ -3.295563204e-05f, -9.839339400e-04f, -3.401174377e-03f, -6.978407798e-03f, -9.813373825e-03f, -8.345281349e-03f, +1.652492925e-03f, +2.316721245e-02f, +5.590428030e-02f, +9.520383444e-02f, +1.327438397e-01f, +1.590489380e-01f, +1.668757336e-01f, +1.539913739e-01f, +1.240536496e-01f, +8.517455379e-02f, +4.684765799e-02f, +1.665324780e-02f, -1.851908252e-03f, -9.351208083e-03f, -9.345967351e-03f, -6.048140022e-03f, -2.653052931e-03f, -6.227885655e-04f, +1.140398583e-05f, +5.027615317e-05f, +9.823799292e-05f, +1.151334936e-04f, +4.530091876e-05f, -1.538847709e-04f, -4.777421116e-04f, -8.545939606e-04f, -1.157761129e-03f, -1.251094331e-03f, -1.050212011e-03f, -5.693216354e-04f, +7.268830890e-05f, +6.938087530e-04f, +1.120310067e-03f, +1.254192209e-03f, +1.105025867e-03f, +7.735089158e-04f, +3.988314213e-04f, +9.851370773e-05f, -7.066089609e-05f, -1.168776089e-04f, -8.862912628e-05f, -4.010760193e-05f, +6.085718635e-04f, +2.735965892e-03f, +5.637267360e-03f, +6.466460311e-03f, +1.622182788e-03f, -1.012943469e-02f, -2.494408295e-02f, -3.436475616e-02f, -2.984704761e-02f, -8.936484026e-03f, +2.135977306e-02f, +4.718531687e-02f, +5.550111965e-02f, +4.195997867e-02f, +1.360787976e-02f, -1.547796461e-02f, -3.257158479e-02f, -3.304130854e-02f, -2.136716363e-02f, -6.656525736e-03f, +3.505764946e-03f, +6.663417034e-03f, +4.963500371e-03f, +2.065969786e-03f, -4.064418164e-05f, -8.761689193e-05f, -7.864645488e-05f, +4.358657619e-05f, +2.608070442e-04f, +4.481461147e-04f, +4.319944063e-04f, +1.183005185e-04f, -4.000050864e-04f, -8.555885112e-04f, -9.585374951e-04f, -5.941037881e-04f, +7.850731232e-05f, +7.097916912e-04f, +9.760698691e-04f, +7.774570446e-04f, +2.809627312e-04f, -2.109094015e-04f, -4.601074287e-04f, -4.187742019e-04f, -2.100467847e-04f, -6.419221105e-06f, +8.900590706e-05f, +7.955668309e-05f, /* 3,29 (24) */ -2.155164621e-05f, -9.336577868e-04f, -3.302936384e-03f, -6.863274304e-03f, -9.768072906e-03f, -8.499166120e-03f, +1.174750813e-03f, +2.231261849e-02f, +5.474651917e-02f, +9.395274011e-02f, +1.316936277e-01f, +1.584796164e-01f, +1.669484219e-01f, +1.546851826e-01f, +1.251739597e-01f, +8.642874600e-02f, +4.795268386e-02f, +1.742675672e-02f, -1.453076831e-03f, -9.252694376e-03f, -9.416628247e-03f, -6.165017631e-03f, -2.741682057e-03f, -6.628961674e-04f, +1.055290011e-05f, +4.878361126e-05f, +9.693916574e-05f, +1.156253717e-04f, +4.930753009e-05f, -1.455839599e-04f, -4.662740262e-04f, -8.431878379e-04f, -1.150824016e-03f, -1.252412474e-03f, -1.061089468e-03f, -5.876336398e-04f, +5.193531372e-05f, +6.765771692e-04f, +1.111168481e-03f, +1.254616975e-03f, +1.113135960e-03f, +7.852478923e-04f, +4.098939964e-04f, +1.060288310e-04f, -6.741688592e-05f, -1.168621514e-04f, -9.006791560e-05f, -4.151670416e-05f, +5.679276819e-04f, +2.648349000e-03f, +5.558620905e-03f, +6.510046887e-03f, +1.882989832e-03f, -9.681288580e-03f, -2.451208855e-02f, -3.424645564e-02f, -3.024705269e-02f, -9.792072538e-03f, +2.040123557e-02f, +4.659121308e-02f, +5.557962696e-02f, +4.266977036e-02f, +1.458394963e-02f, -1.470050756e-02f, -3.229062206e-02f, -3.325221794e-02f, -2.182727105e-02f, -7.075299938e-03f, +3.295718161e-03f, +6.656997813e-03f, +5.052506278e-03f, +2.145526469e-03f, -3.904815034e-05f, -8.661081072e-05f, -8.046803207e-05f, +3.795309249e-05f, +2.535863825e-04f, +4.445237610e-04f, +4.369253578e-04f, +1.322243893e-04f, -3.830952845e-04f, -8.454433646e-04f, -9.624854981e-04f, -6.116548155e-04f, +5.610716341e-05f, +6.943308460e-04f, +9.750063939e-04f, +7.895943690e-04f, +2.980153362e-04f, -1.984011167e-04f, -4.570000917e-04f, -4.235166508e-04f, -2.173033413e-04f, -1.139584045e-05f, +8.786080506e-05f, +8.084173690e-05f, /* 3,30 (24) */ -1.099874610e-05f, -8.848741755e-04f, -3.205997218e-03f, -6.747648932e-03f, -9.718765376e-03f, -8.644750080e-03f, +7.084767869e-04f, +2.146943066e-02f, +5.359569516e-02f, +9.270032763e-02f, +1.306325382e-01f, +1.578919828e-01f, +1.670003572e-01f, +1.553617598e-01f, +1.262851282e-01f, +8.768336298e-02f, +4.906581982e-02f, +1.821200461e-02f, -1.043182834e-03f, -9.146665545e-03f, -9.484045133e-03f, -6.281879783e-03f, -2.831749973e-03f, -7.044128715e-04f, +9.725942243e-06f, +4.730310127e-05f, +9.561309131e-05f, +1.160333507e-04f, +5.318465797e-05f, -1.374117981e-04f, -4.548657984e-04f, -8.317151817e-04f, -1.143681477e-03f, -1.253436160e-03f, -1.071682283e-03f, -6.057777733e-04f, +3.116722669e-05f, +6.591535567e-04f, +1.101733279e-03f, +1.254755552e-03f, +1.121060636e-03f, +7.969423900e-04f, +4.210316793e-04f, +1.136769732e-04f, -6.404830492e-05f, -1.167718107e-04f, -9.148723106e-05f, -4.294149459e-05f, +5.288795315e-04f, +2.561738189e-03f, +5.478152873e-03f, +6.547999980e-03f, +2.136576215e-03f, -9.236764819e-03f, -2.407516319e-02f, -3.411423125e-02f, -3.063014798e-02f, -1.063751590e-02f, +1.943875007e-02f, +4.597955827e-02f, +5.563573413e-02f, +4.336410121e-02f, +1.555895602e-02f, -1.391091319e-02f, -3.199260673e-02f, -3.345061906e-02f, -2.228427115e-02f, -7.498816589e-03f, +3.078414820e-03f, +6.645601972e-03f, +5.140367083e-03f, +2.226368206e-03f, -3.746454073e-05f, -8.555233233e-05f, -8.217356412e-05f, +3.242431918e-05f, +2.463467642e-04f, +4.407012446e-04f, +4.415496956e-04f, +1.459264257e-04f, -3.661367488e-04f, -8.349460613e-04f, -9.659521188e-04f, -6.288787583e-04f, +3.367650675e-05f, +6.785011074e-04f, +9.734637637e-04f, +8.014203357e-04f, +3.150688955e-04f, -1.856434745e-04f, -4.535921347e-04f, -4.280861048e-04f, -2.245666512e-04f, -1.648631167e-05f, +8.660649126e-05f, +8.208617321e-05f, /* 3,31 (24) */ -1.272803854e-06f, -8.375710743e-04f, -3.110384127e-03f, -6.631615582e-03f, -9.665580718e-03f, -8.782161878e-03f, +2.536109885e-04f, +2.063771547e-02f, +5.245201368e-02f, +9.144689147e-02f, +1.295608560e-01f, +1.572862050e-01f, +1.670315244e-01f, +1.560209133e-01f, +1.273868615e-01f, +8.893811853e-02f, +5.018688045e-02f, +1.900894700e-02f, -6.221511552e-04f, -9.032988571e-03f, -9.548093438e-03f, -6.398651594e-03f, -2.923237204e-03f, -7.473543661e-04f, +8.923101798e-06f, +4.583541038e-05f, +9.426136396e-05f, +1.163592181e-04f, +5.693319620e-05f, -1.293692963e-04f, -4.435206002e-04f, -8.201804378e-04f, -1.136337421e-03f, -1.254166848e-03f, -1.081988441e-03f, -6.237490619e-04f, +1.039008209e-05f, +6.415426008e-04f, +1.092006038e-03f, +1.254606094e-03f, +1.128795806e-03f, +8.085880363e-04f, +4.322415435e-04f, +1.214573968e-04f, -6.055408398e-05f, -1.166047700e-04f, -9.288555880e-05f, -4.438129776e-05f, +4.914149908e-04f, +2.476185857e-03f, +5.395979309e-03f, +6.580424299e-03f, +2.382922979e-03f, -8.796063574e-03f, -2.363361349e-02f, -3.396830483e-02f, -3.099628473e-02f, -1.147246196e-02f, +1.847279795e-02f, +4.535067951e-02f, +5.566941063e-02f, +4.404260232e-02f, +1.653241978e-02f, -1.310949286e-02f, -3.167753783e-02f, -3.363626253e-02f, -2.273786328e-02f, -7.926902694e-03f, +2.853848169e-03f, +6.629115661e-03f, +5.226973574e-03f, +2.308454379e-03f, -3.589476488e-05f, -8.444382486e-05f, -8.376427446e-05f, +2.700232027e-05f, +2.390934712e-04f, +4.366838699e-04f, +4.458682330e-04f, +1.594007232e-04f, -3.491395175e-04f, -8.241044281e-04f, -9.689372183e-04f, -6.457668103e-04f, +1.122753743e-05f, +6.623103823e-04f, +9.714409511e-04f, +8.129264642e-04f, +3.321135850e-04f, -1.726415751e-04f, -4.498819789e-04f, -4.324770105e-04f, -2.318317186e-04f, -2.168904174e-05f, +8.524146050e-05f, +8.328765248e-05f, /* 4, 0 (24) */ +1.600006368e-03f, +2.296092272e-03f, +9.217025557e-05f, -6.986631072e-03f, -1.727091088e-02f, -2.337765487e-02f, -1.399136907e-02f, +1.997025201e-02f, +7.789615823e-02f, +1.459827282e-01f, +2.013673686e-01f, +2.227225527e-01f, +2.013673686e-01f, +1.459827282e-01f, +7.789615823e-02f, +1.997025201e-02f, -1.399136907e-02f, -2.337765487e-02f, -1.727091088e-02f, -6.986631072e-03f, +9.217025557e-05f, +2.296092272e-03f, +1.600006368e-03f, +4.631705239e-04f, -3.890635472e-05f, +7.644098300e-06f, +1.382938117e-04f, +2.923858025e-04f, +3.110196137e-04f, +1.764043540e-05f, -6.359464612e-04f, -1.460909391e-03f, -2.067532558e-03f, -2.063446989e-03f, -1.303852983e-03f, -2.161761953e-05f, +1.269515872e-03f, +2.050925659e-03f, +2.078271276e-03f, +1.485476938e-03f, +6.607797145e-04f, -2.347632839e-06f, -3.073145736e-04f, -2.960266674e-04f, -1.433615383e-04f, -1.049708950e-05f, +3.860841448e-05f, +2.697166309e-05f, -1.915727268e-03f, -9.515901960e-05f, +6.422434166e-03f, +1.421211896e-02f, +1.445777228e-02f, +2.854429011e-04f, -2.377097129e-02f, -4.073011900e-02f, -3.326070272e-02f, -1.823756678e-04f, +3.855895525e-02f, +5.568063817e-02f, +3.855895525e-02f, -1.823756678e-04f, -3.326070272e-02f, -4.073011900e-02f, -2.377097129e-02f, +2.854429011e-04f, +1.445777228e-02f, +1.421211896e-02f, +6.422434166e-03f, -9.515901960e-05f, -1.915727268e-03f, -9.377691235e-04f, +5.457975959e-06f, -1.280176524e-04f, -2.583963475e-04f, -1.810574896e-04f, +1.961620417e-04f, +6.539923216e-04f, +7.518795146e-04f, +2.236763837e-04f, -6.738101129e-04f, -1.264799271e-03f, -1.009061979e-03f, -1.788224777e-05f, +9.866129608e-04f, +1.271034774e-03f, +7.007776918e-04f, -1.983647722e-04f, -7.450412298e-04f, -6.648278939e-04f, -2.112722132e-04f, +1.735680368e-04f, +2.601751204e-04f, +1.330885160e-04f, -2.671525331e-06f, -4.060480517e-05f, /* 4, 1 (24) */ +1.561100013e-03f, +2.303736370e-03f, +2.304640673e-04f, -6.694245269e-03f, -1.695989127e-02f, -2.336001444e-02f, -1.462731553e-02f, +1.850934262e-02f, +7.582862567e-02f, +1.439192813e-01f, +2.000635157e-01f, +2.227009351e-01f, +2.026368845e-01f, +1.480336539e-01f, +7.997442951e-02f, +2.145572895e-02f, -1.333058935e-02f, -2.338000250e-02f, -1.757822545e-02f, -7.282657739e-03f, -5.119128274e-05f, +2.285595183e-03f, +1.638614782e-03f, +4.901421870e-04f, -3.914467862e-05f, +4.880739804e-06f, +1.332581224e-04f, +2.886149562e-04f, +3.144091316e-04f, +3.256045541e-05f, -6.112989155e-04f, -1.436129532e-03f, -2.056175888e-03f, -2.075197043e-03f, -1.337654664e-03f, -6.484373343e-05f, +1.234656532e-03f, +2.037634402e-03f, +2.088382221e-03f, +1.509818226e-03f, +6.857887560e-04f, +1.331610283e-05f, -3.032894465e-04f, -2.995314222e-04f, -1.484576699e-04f, -1.343952718e-05f, +3.824923106e-05f, +2.773859848e-05f, -1.910269292e-03f, -2.231766720e-04f, +6.164037818e-03f, +1.403106147e-02f, +1.465393432e-02f, +9.394352227e-04f, -2.301909178e-02f, -4.050644262e-02f, -3.393451283e-02f, -1.447174939e-03f, +3.754989327e-02f, +5.566275592e-02f, +3.954556821e-02f, +1.088659106e-03f, -3.255992502e-02f, -4.092848378e-02f, -2.451601252e-02f, -3.793849927e-04f, +1.424650006e-02f, +1.438568700e-02f, +6.682609286e-03f, +3.792949637e-05f, -1.918398793e-03f, -9.783739287e-04f, +8.135227175e-06f, -1.229546211e-04f, -2.564056106e-04f, -1.882251109e-04f, +1.811527070e-04f, +6.427907079e-04f, +7.580581083e-04f, +2.485873599e-04f, -6.465318711e-04f, -1.257676790e-03f, -1.030735887e-03f, -5.363268835e-05f, +9.634049570e-04f, +1.276374679e-03f, +7.274108696e-04f, -1.726700408e-04f, -7.375419549e-04f, -6.752830043e-04f, -2.264708226e-04f, +1.657580629e-04f, +2.617353228e-04f, +1.381613802e-04f, +2.235815352e-07f, -4.080197272e-05f, /* 4, 2 (24) */ +1.521955334e-03f, +2.308617110e-03f, +3.637221897e-04f, -6.405630313e-03f, -1.664548213e-02f, -2.332745398e-02f, -1.523861445e-02f, +1.707321309e-02f, +7.377244979e-02f, +1.418440842e-01f, +1.987258610e-01f, +2.226360913e-01f, +2.038715410e-01f, +1.500712883e-01f, +8.206281173e-02f, +2.296554718e-02f, -1.264480060e-02f, -2.336668640e-02f, -1.788151490e-02f, -7.582189161e-03f, -1.996489527e-04f, +2.272155655e-03f, +1.676864013e-03f, +5.178807854e-04f, -3.932503274e-05f, +2.207110546e-06f, +1.282579919e-04f, +2.847202272e-04f, +3.174878198e-04f, +4.710609530e-05f, -5.868467756e-04f, -1.411151296e-03f, -2.044211344e-03f, -2.086174875e-03f, -1.370908015e-03f, -1.080424771e-04f, +1.199288455e-03f, +2.023574966e-03f, +2.097855838e-03f, +1.533919301e-03f, +7.109634486e-04f, +2.934866841e-05f, -2.989398010e-04f, -3.028939125e-04f, -1.535784642e-04f, -1.647113367e-05f, +3.782719946e-05f, +2.849525023e-05f, -1.902134065e-03f, -3.461312931e-04f, +5.907632207e-03f, +1.384283636e-02f, +1.483508702e-02f, +1.582225931e-03f, -2.226103367e-02f, -4.025785526e-02f, -3.458104470e-02f, -2.704851729e-03f, +3.651915739e-02f, +5.560912323e-02f, +4.050897317e-02f, +2.365033785e-03f, -3.183251415e-02f, -4.110115382e-02f, -2.525355447e-02f, -1.054667997e-03f, +1.402002924e-02f, +1.455144506e-02f, +6.944344609e-03f, +1.760908766e-04f, -1.918175212e-03f, -1.019175901e-03f, +1.070289269e-05f, -1.179051185e-04f, -2.542096223e-04f, -1.950699416e-04f, +1.662563353e-04f, +6.312376447e-04f, +7.635788941e-04f, +2.730806734e-04f, -6.189668383e-04f, -1.249676678e-03f, -1.051619252e-03f, -8.934097687e-05f, +9.394547681e-04f, +1.280811105e-03f, +7.536860648e-04f, -1.466101804e-04f, -7.293809816e-04f, -6.853434200e-04f, -2.417452079e-04f, +1.576292334e-04f, +2.630704645e-04f, +1.432302827e-04f, +3.226641988e-06f, -4.093050783e-05f, /* 4, 3 (24) */ +1.482630302e-03f, +2.310824221e-03f, +4.919801815e-04f, -6.120910086e-03f, -1.632799431e-02f, -2.328034788e-02f, -1.582546122e-02f, +1.566206180e-02f, +7.172823844e-02f, +1.397579093e-01f, +1.973549530e-01f, +2.225280488e-01f, +2.050708295e-01f, +1.520948633e-01f, +8.416066757e-02f, +2.449946648e-02f, -1.193383715e-02f, -2.333733773e-02f, -1.818045470e-02f, -7.885083074e-03f, -3.532274169e-04f, +2.255684522e-03f, +1.714691213e-03f, +5.463760357e-04f, -3.944908116e-05f, -3.767807771e-07f, +1.232968301e-04f, +2.807076808e-04f, +3.202604942e-04f, +6.127600737e-05f, -5.625995143e-04f, -1.385988598e-03f, -2.031649253e-03f, -2.096379936e-03f, -1.403600444e-03f, -1.511956212e-04f, +1.163425423e-03f, +2.008749506e-03f, +2.106682842e-03f, +1.557766215e-03f, +7.362934421e-04f, +4.574770527e-05f, -2.942613438e-04f, -3.061079629e-04f, -1.587200698e-04f, -1.959153804e-05f, +3.734073876e-05f, +2.924019581e-05f, -1.891431172e-03f, -4.640364116e-04f, +5.653422585e-03f, +1.364776642e-02f, +1.500134336e-02f, +2.213463575e-03f, -2.149745477e-02f, -3.998477459e-02f, -3.520001154e-02f, -3.954528407e-03f, +3.546753813e-02f, +5.551978226e-02f, +4.144842794e-02f, +3.645844890e-03f, -3.107882809e-02f, -4.124776400e-02f, -2.598293546e-02f, -1.740011417e-03f, +1.377828403e-02f, +1.470907429e-02f, +7.207415073e-03f, +3.193211593e-04f, -1.914948570e-03f, -1.060106409e-03f, +1.316074035e-05f, -1.128747009e-04f, -2.518151926e-04f, -2.015913700e-04f, +1.514847712e-04f, +6.193478786e-04f, +7.684443329e-04f, +2.971397975e-04f, -5.911389977e-04f, -1.240808997e-03f, -1.071697343e-03f, -1.249790545e-04f, +9.147798576e-04f, +1.284336918e-03f, +7.795798755e-04f, -1.202036428e-04f, -7.205581984e-04f, -6.949951116e-04f, -2.570824535e-04f, +1.491835725e-04f, +2.641741805e-04f, +1.482891349e-04f, +6.336791463e-06f, -4.098788653e-05f, /* 4, 4 (24) */ +1.443181221e-03f, +2.310447440e-03f, +6.152770116e-04f, -5.840202405e-03f, -1.600773382e-02f, -2.321907188e-02f, -1.638806074e-02f, +1.427607320e-02f, +6.969658919e-02f, +1.376615294e-01f, +1.959513525e-01f, +2.223768532e-01f, +2.062342549e-01f, +1.541036128e-01f, +8.626735041e-02f, +2.605723269e-02f, -1.119754371e-02f, -2.329159003e-02f, -1.847471604e-02f, -8.191191037e-03f, -5.119474867e-04f, +2.236092984e-03f, +1.752031952e-03f, +5.756162315e-04f, -3.951850337e-05f, -2.871011414e-06f, +1.183779345e-04f, +2.765833440e-04f, +3.227320879e-04f, +7.506909163e-05f, -5.385663751e-04f, -1.360655321e-03f, -2.018500186e-03f, -2.105812081e-03f, -1.435719672e-03f, -1.942849625e-04f, +1.127081495e-03f, +1.993160576e-03f, +2.114854228e-03f, +1.581345032e-03f, +7.617681777e-04f, +6.251059783e-05f, -2.892499246e-04f, -3.091673808e-04f, -1.638785275e-04f, -2.280027447e-05f, +3.678829431e-05f, +2.997198507e-05f, -1.878270432e-03f, -5.769111124e-04f, +5.401607392e-03f, +1.344617505e-02f, +1.515282813e-02f, +2.832811454e-03f, -2.072901044e-02f, -3.968763479e-02f, -3.579115054e-02f, -5.195337404e-03f, +3.439584079e-02f, +5.539480320e-02f, +4.236320779e-02f, +4.930181808e-03f, -3.029924821e-02f, -4.136796764e-02f, -2.670349365e-02f, -2.435006529e-03f, +1.352120158e-02f, +1.485825787e-02f, +7.471589254e-03f, +4.676102941e-04f, -1.908611778e-03f, -1.101094296e-03f, +1.550868921e-05f, -1.078687810e-04f, -2.492292190e-04f, -2.077891270e-04f, +1.368495688e-04f, +6.071362952e-04f, +7.726574551e-04f, +3.207487185e-04f, -5.630724209e-04f, -1.231084514e-03f, -1.090956146e-03f, -1.605189261e-04f, +8.893983368e-04f, +1.286945741e-03f, +8.050691020e-04f, -9.346932708e-05f, -7.110740955e-04f, -7.042242699e-04f, -2.724694003e-04f, +1.404234661e-04f, +2.650402404e-04f, +1.533317275e-04f, +9.553001232e-06f, -4.097162398e-05f, /* 4, 5 (24) */ +1.403662717e-03f, +2.307576429e-03f, +7.336549461e-04f, -5.563619061e-03f, -1.568500173e-02f, -2.314400279e-02f, -1.692662711e-02f, +1.291541788e-02f, +6.767808900e-02f, +1.355557173e-01f, +1.945156329e-01f, +2.221825683e-01f, +2.073613364e-01f, +1.560967734e-01f, +8.838220464e-02f, +2.763857773e-02f, -1.043577553e-02f, -2.322907943e-02f, -1.876396597e-02f, -8.500358418e-03f, -6.758260142e-04f, +2.213292709e-03f, +1.788820246e-03f, +6.055882166e-04f, -3.953499220e-05f, -5.275742626e-06f, +1.135044900e-04f, +2.723532024e-04f, +3.249076470e-04f, +8.848449348e-05f, -5.147563692e-04f, -1.335165314e-03f, -2.004774947e-03f, -2.114471558e-03f, -1.467253741e-03f, -2.372923342e-04f, +1.090271000e-03f, +1.976811134e-03f, +2.122361275e-03f, +1.604641837e-03f, +7.873768925e-04f, +7.963447218e-05f, -2.839015417e-04f, -3.120659607e-04f, -1.690497713e-04f, -2.609678061e-05f, +3.616833997e-05f, +3.068914123e-05f, -1.862761743e-03f, -6.847798935e-04f, +5.152378173e-03f, +1.323838592e-02f, +1.528967770e-02f, +3.439947749e-03f, -1.995635298e-02f, -3.936688607e-02f, -3.635422296e-02f, -6.426421918e-03f, +3.330488464e-02f, +5.523428428e-02f, +4.325260613e-02f, +6.217127549e-03f, -2.949417911e-02f, -4.146143697e-02f, -2.741456775e-02f, -3.139230798e-03f, +1.324873218e-02f, +1.499868133e-02f, +7.736629494e-03f, +6.209420216e-04f, -1.899058777e-03f, -1.142065920e-03f, +1.774680651e-05f, -1.028926238e-04f, -2.464586776e-04f, -2.136632816e-04f, +1.223619839e-04f, +5.946179023e-04f, +7.762218530e-04f, +3.438919470e-04f, -5.347912450e-04f, -1.220514691e-03f, -1.109382373e-03f, -1.959326858e-04f, +8.633289495e-04f, +1.288631960e-03f, +8.301307690e-04f, -6.642656459e-05f, -7.009297703e-04f, -7.130173215e-04f, -2.878926567e-04f, +1.313516642e-04f, +2.656625581e-04f, +1.583517357e-04f, +1.287407632e-05f, -4.087927890e-05f, /* 4, 6 (24) */ +1.364127725e-03f, +2.302300686e-03f, +8.471594361e-04f, -5.291265859e-03f, -1.536009408e-02f, -2.305551829e-02f, -1.744138348e-02f, +1.158025256e-02f, +6.567331406e-02f, +1.334412458e-01f, +1.930483791e-01f, +2.219452759e-01f, +2.084516074e-01f, +1.580735845e-01f, +9.050456591e-02f, +2.924321956e-02f, -9.648398637e-03f, -2.314944496e-02f, -1.904786751e-02f, -8.812424378e-03f, -8.448757855e-04f, +2.187195929e-03f, +1.824988586e-03f, +6.362773578e-04f, -3.950025171e-05f, -7.591217706e-06f, +1.086795681e-04f, +2.680231957e-04f, +3.267923248e-04f, +1.015216012e-04f, -4.911782716e-04f, -1.309532375e-03f, -1.990484565e-03f, -2.122359012e-03f, -1.498191019e-03f, -2.801996166e-04f, +1.053008532e-03f, +1.959704540e-03f, +2.129195558e-03f, +1.627642745e-03f, +8.131086244e-04f, +9.711619491e-05f, -2.782123463e-04f, -3.147974895e-04f, -1.742296298e-04f, -2.948039595e-05f, +3.547938035e-05f, +3.139016191e-05f, -1.845014936e-03f, -7.876725172e-04f, +4.905919496e-03f, +1.302472264e-02f, +1.541203968e-02f, +4.034565651e-03f, -1.918013113e-02f, -3.902299412e-02f, -3.688901420e-02f, -7.646936609e-03f, +3.219550227e-02f, +5.503835159e-02f, +4.411593508e-02f, +7.505759509e-03f, -2.866404834e-02f, -4.152786353e-02f, -2.811549752e-02f, -3.852248120e-03f, +1.296083952e-02f, +1.513003300e-02f, +8.002292052e-03f, +7.792937573e-04f, -1.886184701e-03f, -1.182945199e-03f, +1.987530445e-05f, -9.795134253e-05f, -2.435106135e-04f, -2.192142359e-04f, +1.080329663e-04f, +5.818078140e-04f, +7.791416723e-04f, +3.665545286e-04f, -5.063196498e-04f, -1.209111664e-03f, -1.126963471e-03f, -2.311925422e-04f, +8.365910557e-04f, +1.289390737e-03f, +8.547421485e-04f, -3.909510354e-05f, -6.901269306e-04f, -7.213609453e-04f, -3.033386091e-04f, +1.219712837e-04f, +2.660352008e-04f, +1.633427247e-04f, +1.629865360e-05f, -4.070845819e-05f, /* 4, 7 (24) */ +1.324627473e-03f, +2.294709468e-03f, +9.558390041e-04f, -5.023242663e-03f, -1.503330176e-02f, -2.295399669e-02f, -1.793256175e-02f, +1.027072019e-02f, +6.368282949e-02f, +1.313188867e-01f, +1.915501881e-01f, +2.216650763e-01f, +2.095046159e-01f, +1.600332890e-01f, +9.263376147e-02f, +3.087086231e-02f, -8.835290013e-03f, -2.305232876e-02f, -1.932607986e-02f, -9.127221868e-03f, -1.019105415e-03f, +2.157715533e-03f, +1.860467966e-03f, +6.676675197e-04f, -3.941599517e-05f, -9.817759973e-06f, +1.039061266e-04f, +2.635992146e-04f, +3.283913767e-04f, +1.141800434e-04f, -4.678406184e-04f, -1.283770252e-03f, -1.975640291e-03f, -2.129475483e-03f, -1.528520206e-03f, -3.229887474e-04f, +1.015308940e-03f, +1.941844558e-03f, +2.135348947e-03f, +1.650333910e-03f, +8.389522168e-04f, +1.149523721e-04f, -2.721786476e-04f, -3.173557501e-04f, -1.794138276e-04f, -3.295036037e-05f, +3.471995310e-05f, +3.207352022e-05f, -1.825139632e-03f, -8.856238598e-04f, +4.662408882e-03f, +1.280550840e-02f, +1.552007265e-02f, +4.616373465e-03f, -1.840098946e-02f, -3.865643960e-02f, -3.739533385e-02f, -8.856048273e-03f, +3.106853880e-02f, +5.480715905e-02f, +4.495252614e-02f, +8.795150246e-03f, -2.780930619e-02f, -4.156695864e-02f, -2.880562445e-02f, -4.573609065e-03f, +1.265750091e-02f, +1.525200428e-02f, +8.268327253e-03f, +9.426364820e-04f, -1.869886047e-03f, -1.223653657e-03f, +2.189453686e-05f, -9.304989612e-05f, -2.403921319e-04f, -2.244427192e-04f, +9.387315197e-05f, +5.687212344e-04f, +7.814216028e-04f, +3.887220543e-04f, -4.776818356e-04f, -1.196888238e-03f, -1.143687639e-03f, -2.662708436e-04f, +8.092046148e-04f, +1.289218010e-03f, +8.788807818e-04f, -1.149509324e-05f, -6.786678989e-04f, -7.292420878e-04f, -3.187934335e-04f, +1.122858102e-04f, +2.661523987e-04f, +1.682981552e-04f, +1.982520010e-05f, -4.045682146e-05f, /* 4, 8 (24) */ +1.285211478e-03f, +2.284891708e-03f, +1.059745131e-03f, -4.759643448e-03f, -1.470491038e-02f, -2.283981665e-02f, -1.840040237e-02f, +8.986949936e-03f, +6.170718920e-02f, +1.291894113e-01f, +1.900216679e-01f, +2.213420876e-01f, +2.105199249e-01f, +1.619751336e-01f, +9.476911042e-02f, +3.252119622e-02f, -7.996337796e-03f, -2.293737639e-02f, -1.959825850e-02f, -9.444577618e-03f, -1.198519243e-03f, +2.124765172e-03f, +1.895187919e-03f, +6.997410399e-04f, -3.928394304e-05f, -1.195577071e-05f, +9.918700977e-05f, +2.590870968e-04f, +3.297101550e-04f, +1.264596862e-04f, -4.447517036e-04f, -1.257892630e-03f, -1.960253585e-03f, -2.135822399e-03f, -1.558230343e-03f, -3.656417317e-04f, +9.771873217e-04f, +1.923235351e-03f, +2.140813622e-03f, +1.672701532e-03f, +8.648963243e-04f, +1.331393484e-04f, -2.657969177e-04f, -3.197345265e-04f, -1.845979867e-04f, -3.650581267e-05f, +3.388863118e-05f, +3.273766594e-05f, -1.803245095e-03f, -9.786737559e-04f, +4.422016750e-03f, +1.258106569e-02f, +1.561394580e-02f, +5.185094700e-03f, -1.761956786e-02f, -3.826771754e-02f, -3.787301569e-02f, -1.005293651e-02f, +2.992485116e-02f, +5.454088820e-02f, +4.576173075e-02f, +1.008436826e-02f, -2.693042541e-02f, -4.157845373e-02f, -2.948429235e-02f, -5.302851153e-03f, +1.233870748e-02f, +1.536429009e-02f, +8.534479652e-03f, +1.110934637e-03f, -1.850060847e-03f, -1.264110478e-03f, +2.380499576e-05f, -8.819308537e-05f, -2.371103885e-04f, -2.293497828e-04f, +7.989285652e-05f, +5.553734415e-04f, +7.830668693e-04f, +4.103806698e-04f, -4.489019999e-04f, -1.183857869e-03f, -1.159543829e-03f, -3.011401031e-04f, +7.811901687e-04f, +1.288110505e-03f, +9.025245021e-04f, +1.635293224e-05f, -6.665556153e-04f, -7.366479792e-04f, -3.342431068e-04f, +1.022990993e-04f, +2.660085539e-04f, +1.732113900e-04f, +2.345201148e-05f, -4.012208559e-05f, /* 4, 9 (24) */ +1.245927535e-03f, +2.272935938e-03f, +1.158932141e-03f, -4.500556352e-03f, -1.437520023e-02f, -2.271335696e-02f, -1.884515407e-02f, +7.729057306e-03f, +5.974693562e-02f, +1.270535889e-01f, +1.884634375e-01f, +2.209764458e-01f, +2.114971122e-01f, +1.638983689e-01f, +9.690992404e-02f, +3.419389775e-02f, -7.131441472e-03f, -2.280423704e-02f, -1.986405542e-02f, -9.764312144e-03f, -1.383117230e-03f, +2.088259360e-03f, +1.929076550e-03f, +7.324787058e-04f, -3.910582102e-05f, -1.400572709e-05f, +9.452494757e-05f, +2.544926232e-04f, +3.307541039e-04f, +1.383606303e-04f, -4.219195767e-04f, -1.231913124e-03f, -1.944336107e-03f, -2.141401579e-03f, -1.587310811e-03f, -4.081406529e-04f, +9.386590117e-04f, +1.903881483e-03f, +2.145582071e-03f, +1.694731869e-03f, +8.909294177e-04f, +1.516732064e-04f, -2.590637962e-04f, -3.219276085e-04f, -1.897776284e-04f, -4.014578915e-05f, +3.298402511e-05f, +3.338102668e-05f, -1.779440099e-03f, -1.066866841e-03f, +4.184906362e-03f, +1.235171590e-02f, +1.569383866e-02f, +5.740468141e-03f, -1.683650099e-02f, -3.785733687e-02f, -3.832191769e-02f, -1.123679438e-02f, +2.876530733e-02f, +5.423974810e-02f, +4.654292092e-02f, +1.137247876e-02f, -2.602790091e-02f, -4.156210080e-02f, -3.015084797e-02f, -6.039499132e-03f, +1.200446437e-02f, +1.546658919e-02f, +8.800488206e-03f, +1.284146027e-03f, -1.826608836e-03f, -1.304232564e-03f, +2.560730777e-05f, -8.338555042e-05f, -2.336725808e-04f, -2.339367939e-04f, +6.610206861e-05f, +5.417797710e-04f, +7.840832211e-04f, +4.315170851e-04f, -4.200043158e-04f, -1.170034648e-03f, -1.174521759e-03f, -3.357730234e-04f, +7.525688233e-04f, +1.286065738e-03f, +9.256514557e-04f, +4.442807088e-05f, -6.537936395e-04f, -7.435661491e-04f, -3.496734189e-04f, +9.201537813e-05f, +2.655982496e-04f, +1.780756998e-04f, +2.717721072e-05f, -3.970202937e-05f, /* 4,10 (24) */ +1.206821714e-03f, +2.258930210e-03f, +1.253457088e-03f, -4.246063728e-03f, -1.404444612e-02f, -2.257499633e-02f, -1.926707365e-02f, +6.497144181e-03f, +5.780259951e-02f, +1.249121873e-01f, +1.868761267e-01f, +2.205683052e-01f, +2.124357712e-01f, +1.658022504e-01f, +9.905550611e-02f, +3.588862962e-02f, -6.240512054e-03f, -2.265256384e-02f, -2.012311922e-02f, -1.008623975e-02f, -1.572894858e-03f, +2.048113570e-03f, +1.962060576e-03f, +7.658597325e-04f, -3.888335807e-05f, -1.596818006e-05f, +8.992255611e-05f, +2.498215151e-04f, +3.315287539e-04f, +1.498832080e-04f, -3.993520395e-04f, -1.205845271e-03f, -1.927899717e-03f, -2.146215229e-03f, -1.615751341e-03f, -4.504676821e-04f, +8.997395766e-04f, +1.883787917e-03f, +2.149647103e-03f, +1.716411240e-03f, +9.170397892e-04f, +1.705497664e-04f, -2.519760951e-04f, -3.239287962e-04f, -1.949481748e-04f, -4.386922233e-05f, +3.200478532e-05f, +3.400200914e-05f, -1.753832791e-03f, -1.150252392e-03f, +3.951233781e-03f, +1.211777911e-02f, +1.575994073e-02f, +6.282247912e-03f, -1.605241777e-02f, -3.742581979e-02f, -3.874192200e-02f, -1.240682903e-02f, +2.759078557e-02f, +5.390397508e-02f, +4.729548974e-02f, +1.265854450e-02f, -2.510224946e-02f, -4.151767273e-02f, -3.080464160e-02f, -6.783065281e-03f, +1.165479095e-02f, +1.555860457e-02f, +9.066086455e-03f, +1.462221727e-03f, -1.799431625e-03f, -1.343934593e-03f, +2.730223042e-05f, -7.863176802e-05f, -2.300859391e-04f, -2.382054290e-04f, +5.251044389e-05f, +5.279556008e-04f, +7.844769221e-04f, +4.521185823e-04f, -3.910129090e-04f, -1.155433287e-03f, -1.188611921e-03f, -3.701425216e-04f, +7.233622306e-04f, +1.283082020e-03f, +9.482401246e-04f, +7.270907003e-05f, -6.403861531e-04f, -7.499844418e-04f, -3.650699852e-04f, +8.143924587e-05f, +2.649162596e-04f, +1.828842697e-04f, +3.099874700e-05f, -3.919449805e-05f, /* 4,11 (24) */ +1.167938356e-03f, +2.242962030e-03f, +1.343379644e-03f, -3.996242213e-03f, -1.371291737e-02f, -2.242511312e-02f, -1.966642569e-02f, +5.291298910e-03f, +5.587469979e-02f, +1.227659721e-01f, +1.852603754e-01f, +2.201178375e-01f, +2.133355108e-01f, +1.676860383e-01f, +1.012051532e-01f, +3.760504086e-02f, -5.323472265e-03f, -2.248201407e-02f, -2.037509531e-02f, -1.041016855e-02f, -1.767843033e-03f, +2.004244348e-03f, +1.994065361e-03f, +7.998617417e-04f, -3.861828455e-05f, -1.784375216e-05f, +8.538233747e-05f, +2.450794304e-04f, +3.320397166e-04f, +1.610279801e-04f, -3.770566444e-04f, -1.179702524e-03f, -1.910956455e-03f, -2.150265936e-03f, -1.643542021e-03f, -4.926050893e-04f, +8.604448044e-04f, +1.862960013e-03f, +2.153001849e-03f, +1.737726042e-03f, +9.432155588e-04f, +1.897645857e-04f, -2.445308031e-04f, -3.257319050e-04f, -2.001049506e-04f, -4.767493968e-05f, +3.094960441e-05f, +3.459900040e-05f, -1.726530561e-03f, -1.228884160e-03f, +3.721147842e-03f, +1.187957368e-02f, +1.581245117e-02f, +6.810203513e-03f, -1.526794084e-02f, -3.697370120e-02f, -3.913293491e-02f, -1.356226232e-02f, +2.640217365e-02f, +5.353383256e-02f, +4.801885197e-02f, +1.394162652e-02f, -2.415400933e-02f, -4.144496366e-02f, -3.144502776e-02f, -7.533049723e-03f, +1.128972097e-02f, +1.564004381e-02f, +9.331002715e-03f, +1.645105997e-03f, -1.768432878e-03f, -1.383129091e-03f, +2.889064834e-05f, -7.393604918e-05f, -2.263577172e-04f, -2.421576681e-04f, +3.912729931e-05f, +5.139163346e-04f, +7.842547396e-04f, +4.721730237e-04f, -3.619518359e-04f, -1.140069105e-03f, -1.201805585e-03f, -4.042217537e-04f, +6.935925692e-04f, +1.279158464e-03f, +9.702693474e-04f, +1.011743441e-04f, -6.263379604e-04f, -7.558910313e-04f, -3.804182591e-04f, +7.057567423e-05f, +2.639575569e-04f, +1.876302057e-04f, +3.491439479e-05f, -3.859740791e-05f, /* 4,12 (24) */ +1.129320071e-03f, +2.225118278e-03f, +1.428761982e-03f, -3.751162783e-03f, -1.338087765e-02f, -2.226408514e-02f, -2.004348233e-02f, +4.111596385e-03f, +5.396374334e-02f, +1.206157061e-01f, +1.836168334e-01f, +2.196252324e-01f, +2.141959556e-01f, +1.695489983e-01f, +1.033581551e-01f, +3.934276690e-02f, -4.380256706e-03f, -2.229224948e-02f, -2.061962612e-02f, -1.073590045e-02f, -1.967947983e-03f, +1.956569408e-03f, +2.025014965e-03f, +8.344607421e-04f, -3.831233032e-05f, -1.963313541e-05f, +8.090667996e-05f, +2.402719605e-04f, +3.322926800e-04f, +1.717957323e-04f, -3.550406920e-04f, -1.153498242e-03f, -1.893518541e-03f, -2.153556667e-03f, -1.670673294e-03f, -5.345352524e-04f, +8.207906967e-04f, +1.841403527e-03f, +2.155639771e-03f, +1.758662752e-03f, +9.694446795e-04f, +2.093129585e-04f, -2.367250903e-04f, -3.273307702e-04f, -2.052431855e-04f, -5.156166247e-05f, +2.981721948e-05f, +3.517036926e-05f, -1.697639913e-03f, -1.302820209e-03f, +3.494790125e-03f, +1.163741601e-02f, +1.585157847e-02f, +7.324119848e-03f, -1.448368610e-02f, -3.650152818e-02f, -3.949488675e-02f, -1.470233142e-02f, +2.520036807e-02f, +5.312961080e-02f, +4.871244454e-02f, +1.522078498e-02f, -2.318373998e-02f, -4.134378931e-02f, -3.207136572e-02f, -8.288940755e-03f, +1.090930271e-02f, +1.571061949e-02f, +9.594960272e-03f, +1.832736202e-03f, -1.733518483e-03f, -1.421726499e-03f, +3.037356937e-05f, -6.930253702e-05f, -2.224951841e-04f, -2.457957871e-04f, +2.596160801e-05f, +4.996773867e-04f, +7.834239334e-04f, +4.916688586e-04f, -3.328450618e-04f, -1.123958007e-03f, -1.214094808e-03f, -4.379841389e-04f, +6.632825249e-04f, +1.274294983e-03f, +9.917183406e-04f, +1.298019927e-04f, -6.116544888e-04f, -7.612744370e-04f, -3.957035450e-04f, +5.943000741e-05f, +2.627173228e-04f, +1.923065421e-04f, +3.892175321e-05f, -3.790875087e-05f, /* 4,13 (24) */ +1.091007741e-03f, +2.205485143e-03f, +1.509668662e-03f, -3.510890822e-03f, -1.304858497e-02f, -2.209228941e-02f, -2.039852303e-02f, +2.958098143e-03f, +5.207022480e-02f, +1.184621495e-01f, +1.819461601e-01f, +2.190906972e-01f, +2.150167463e-01f, +1.713904019e-01f, +1.055137948e-01f, +4.110142965e-02f, -3.410812026e-03f, -2.208293652e-02f, -2.085635121e-02f, -1.106323122e-02f, -2.173191169e-03f, +1.905007746e-03f, +2.054832185e-03f, +8.696311113e-04f, -3.796722292e-05f, -2.133708908e-05f, +7.649785829e-05f, +2.354046271e-04f, +3.322934025e-04f, +1.821874723e-04f, -3.333112290e-04f, -1.127245685e-03f, -1.875598366e-03f, -2.156090765e-03f, -1.697135968e-03f, -5.762406683e-04f, +7.807934590e-04f, +1.819124608e-03f, +2.157554666e-03f, +1.779207937e-03f, +9.957149438e-04f, +2.291899164e-04f, -2.285563129e-04f, -3.287192523e-04f, -2.103580158e-04f, -5.552800462e-05f, +2.860641441e-05f, +3.571446765e-05f, -1.667266343e-03f, -1.372122746e-03f, +3.272294941e-03f, +1.139162022e-02f, +1.587754008e-02f, +7.823797235e-03f, -1.370026217e-02f, -3.600985932e-02f, -3.982773181e-02f, -1.582628943e-02f, +2.398627326e-02f, +5.269162666e-02f, +4.937572707e-02f, +1.649507997e-02f, -2.219202164e-02f, -4.121398732e-02f, -3.268302021e-02f, -9.050215191e-03f, +1.051359916e-02f, +1.577004950e-02f, +9.857677594e-03f, +2.025042745e-03f, -1.694596730e-03f, -1.459635250e-03f, +3.175212055e-05f, -6.473520493e-05f, -2.185056152e-04f, -2.491223514e-04f, +1.302199447e-05f, +4.852541662e-04f, +7.819922437e-04f, +5.105951303e-04f, -3.037164389e-04f, -1.107116472e-03f, -1.225472438e-03f, -4.714033835e-04f, +6.324552708e-04f, +1.268492295e-03f, +1.012566720e-03f, +1.585698194e-04f, -5.963417892e-04f, -7.661235378e-04f, -4.109110111e-04f, +4.800796156e-05f, +2.611909559e-04f, +1.969062480e-04f, +4.301824547e-05f, -3.712659903e-05f, /* 4,14 (24) */ +1.053040518e-03f, +2.184148054e-03f, +1.586166520e-03f, -3.275486195e-03f, -1.271629157e-02f, -2.191010194e-02f, -2.073183425e-02f, +1.830852458e-03f, +5.019462643e-02f, +1.163060587e-01f, +1.802490241e-01f, +2.185144565e-01f, +2.157975398e-01f, +1.732095265e-01f, +1.076713495e-01f, +4.288063759e-02f, -2.415097083e-03f, -2.185374661e-02f, -2.108490752e-02f, -1.139195048e-02f, -2.383549185e-03f, +1.849479741e-03f, +2.083438599e-03f, +9.053455790e-04f, -3.758468577e-05f, -2.295643745e-05f, +7.215803397e-05f, +2.304828792e-04f, +3.320477083e-04f, +1.922044257e-04f, -3.118750465e-04f, -1.100958005e-03f, -1.857208478e-03f, -2.157871948e-03f, -1.722921219e-03f, -6.177039619e-04f, +7.404694924e-04f, +1.796129796e-03f, +2.158740672e-03f, +1.799348266e-03f, +1.022013989e-03f, +2.493902282e-04f, -2.200220172e-04f, -3.298912414e-04f, -2.154444867e-04f, -5.957247171e-05f, +2.731602220e-05f, +3.622963204e-05f, -1.635514223e-03f, -1.436857951e-03f, +3.053789325e-03f, +1.114249787e-02f, +1.589056207e-02f, +8.309051401e-03f, -1.291826993e-02f, -3.549926419e-02f, -4.013144825e-02f, -1.693340590e-02f, +2.276080082e-02f, +5.222022328e-02f, +5.000818234e-02f, +1.776357226e-02f, -2.117945492e-02f, -4.105541750e-02f, -3.327936200e-02f, -9.816338729e-03f, +1.010268815e-02f, +1.581805746e-02f, +1.011886855e-02f, +2.221948993e-03f, -1.651578484e-03f, -1.496761849e-03f, +3.302754405e-05f, -6.023785490e-05f, -2.143962835e-04f, -2.521402083e-04f, +3.167302584e-07f, +4.706620616e-04f, +7.799678790e-04f, +5.289414813e-04f, -2.745896849e-04f, -1.089561530e-03f, -1.235932120e-03f, -5.044535044e-04f, +6.011344466e-04f, +1.261751929e-03f, +1.032794521e-03f, +1.874553504e-04f, -5.804065349e-04f, -7.704275872e-04f, -4.260257039e-04f, +3.631562396e-05f, +2.593740802e-04f, +2.014222347e-04f, +4.720111872e-05f, -3.624910917e-05f, /* 4,15 (24) */ +1.015455832e-03f, +2.161191616e-03f, +1.658324554e-03f, -3.045003316e-03f, -1.238424386e-02f, -2.171789751e-02f, -2.104370930e-02f, +7.298944523e-04f, +4.833741795e-02f, +1.141481867e-01f, +1.785261029e-01f, +2.178967525e-01f, +2.165380092e-01f, +1.750056563e-01f, +1.098300902e-01f, +4.467998586e-02f, -1.393083093e-03f, -2.160435638e-02f, -2.130492954e-02f, -1.172184172e-02f, -2.598993671e-03f, +1.789907270e-03f, +2.110754621e-03f, +9.415752110e-04f, -3.716643644e-05f, -2.449206763e-05f, +6.788925573e-05f, +2.255120901e-04f, +3.315614818e-04f, +2.018480326e-04f, -2.907386786e-04f, -1.074648240e-03f, -1.838361579e-03f, -2.158904301e-03f, -1.748020596e-03f, -6.589078965e-04f, +6.998353837e-04f, +1.772426020e-03f, +2.159192272e-03f, +1.819070515e-03f, +1.048329306e-03f, +2.699084005e-04f, -2.111199439e-04f, -3.308406629e-04f, -2.204975547e-04f, -6.369346004e-05f, +2.594492724e-05f, +3.671418494e-05f, -1.602486679e-03f, -1.497095806e-03f, +2.839393042e-03f, +1.089035766e-02f, +1.589087880e-02f, +8.779713462e-03f, -1.213830205e-02f, -3.497032271e-02f, -4.040603793e-02f, -1.802296743e-02f, +2.152486870e-02f, +5.171576978e-02f, +5.060931679e-02f, +1.902532419e-02f, -2.014666040e-02f, -4.086796215e-02f, -3.385976853e-02f, -1.058676632e-02f, +9.676662449e-03f, +1.585437308e-02f, +1.037824263e-02f, +2.423371227e-03f, -1.604377366e-03f, -1.533010958e-03f, +3.420119301e-05f, -5.581411613e-05f, -2.101744516e-04f, -2.548524797e-04f, -1.214626993e-05f, +4.559164258e-04f, +7.773595044e-04f, +5.466981591e-04f, -2.454883617e-04f, -1.071310751e-03f, -1.245468296e-03f, -5.371088529e-04f, +5.693441375e-04f, +1.254076215e-03f, +1.052382220e-03f, +2.164358544e-04f, -5.638560203e-04f, -7.741762277e-04f, -4.410325610e-04f, +2.435945170e-05f, +2.572625544e-04f, +2.058473631e-04f, +5.146744392e-05f, -3.527452729e-05f, /* 4,16 (24) */ +9.782893959e-04f, +2.136699549e-03f, +1.726213810e-03f, -2.819491226e-03f, -1.205268238e-02f, -2.151604948e-02f, -2.133444798e-02f, -3.447537878e-04f, +4.649905637e-02f, +1.119892824e-01f, +1.767780823e-01f, +2.172378446e-01f, +2.172378446e-01f, +1.767780823e-01f, +1.119892824e-01f, +4.649905637e-02f, -3.447537878e-04f, -2.133444798e-02f, -2.151604948e-02f, -1.205268238e-02f, -2.819491226e-03f, +1.726213810e-03f, +2.136699549e-03f, +9.782893959e-04f, -3.671418494e-05f, -2.594492724e-05f, +6.369346004e-05f, +2.204975547e-04f, +3.308406629e-04f, +2.111199439e-04f, -2.699084005e-04f, -1.048329306e-03f, -1.819070515e-03f, -2.159192272e-03f, -1.772426020e-03f, -6.998353837e-04f, +6.589078965e-04f, +1.748020596e-03f, +2.158904301e-03f, +1.838361579e-03f, +1.074648240e-03f, +2.907386786e-04f, -2.018480326e-04f, -3.315614818e-04f, -2.255120901e-04f, -6.788925573e-05f, +2.449206763e-05f, +3.716643644e-05f, -1.568285486e-03f, -1.552909922e-03f, +2.629218590e-03f, +1.063550518e-02f, +1.587873253e-02f, +9.235629888e-03f, -1.136094254e-02f, -3.442362455e-02f, -4.065152629e-02f, -1.909427818e-02f, +2.027940040e-02f, +5.117866092e-02f, +5.117866092e-02f, +2.027940040e-02f, -1.909427818e-02f, -4.065152629e-02f, -3.442362455e-02f, -1.136094254e-02f, +9.235629888e-03f, +1.587873253e-02f, +1.063550518e-02f, +2.629218590e-03f, -1.552909922e-03f, -1.568285486e-03f, +3.527452729e-05f, -5.146744392e-05f, -2.058473631e-04f, -2.572625544e-04f, -2.435945170e-05f, +4.410325610e-04f, +7.741762277e-04f, +5.638560203e-04f, -2.164358544e-04f, -1.052382220e-03f, -1.254076215e-03f, -5.693441375e-04f, +5.371088529e-04f, +1.245468296e-03f, +1.071310751e-03f, +2.454883617e-04f, -5.466981591e-04f, -7.773595044e-04f, -4.559164258e-04f, +1.214626993e-05f, +2.548524797e-04f, +2.101744516e-04f, +5.581411613e-05f, -3.420119301e-05f, /* 4,17 (24) */ +9.415752110e-04f, +2.110754621e-03f, +1.789907270e-03f, -2.598993671e-03f, -1.172184172e-02f, -2.130492954e-02f, -2.160435638e-02f, -1.393083093e-03f, +4.467998586e-02f, +1.098300902e-01f, +1.750056563e-01f, +2.165380092e-01f, +2.178967525e-01f, +1.785261029e-01f, +1.141481867e-01f, +4.833741795e-02f, +7.298944523e-04f, -2.104370930e-02f, -2.171789751e-02f, -1.238424386e-02f, -3.045003316e-03f, +1.658324554e-03f, +2.161191616e-03f, +1.015455832e-03f, -3.622963204e-05f, -2.731602220e-05f, +5.957247171e-05f, +2.154444867e-04f, +3.298912414e-04f, +2.200220172e-04f, -2.493902282e-04f, -1.022013989e-03f, -1.799348266e-03f, -2.158740672e-03f, -1.796129796e-03f, -7.404694924e-04f, +6.177039619e-04f, +1.722921219e-03f, +2.157871948e-03f, +1.857208478e-03f, +1.100958005e-03f, +3.118750465e-04f, -1.922044257e-04f, -3.320477083e-04f, -2.304828792e-04f, -7.215803397e-05f, +2.295643745e-05f, +3.758468577e-05f, -1.533010958e-03f, -1.604377366e-03f, +2.423371227e-03f, +1.037824263e-02f, +1.585437308e-02f, +9.676662449e-03f, -1.058676632e-02f, -3.385976853e-02f, -4.086796215e-02f, -2.014666040e-02f, +1.902532419e-02f, +5.060931679e-02f, +5.171576978e-02f, +2.152486870e-02f, -1.802296743e-02f, -4.040603793e-02f, -3.497032271e-02f, -1.213830205e-02f, +8.779713462e-03f, +1.589087880e-02f, +1.089035766e-02f, +2.839393042e-03f, -1.497095806e-03f, -1.602486679e-03f, +3.624910917e-05f, -4.720111872e-05f, -2.014222347e-04f, -2.593740802e-04f, -3.631562396e-05f, +4.260257039e-04f, +7.704275872e-04f, +5.804065349e-04f, -1.874553504e-04f, -1.032794521e-03f, -1.261751929e-03f, -6.011344466e-04f, +5.044535044e-04f, +1.235932120e-03f, +1.089561530e-03f, +2.745896849e-04f, -5.289414813e-04f, -7.799678790e-04f, -4.706620616e-04f, -3.167302584e-07f, +2.521402083e-04f, +2.143962835e-04f, +6.023785490e-05f, -3.302754405e-05f, /* 4,18 (24) */ +9.053455790e-04f, +2.083438599e-03f, +1.849479741e-03f, -2.383549185e-03f, -1.139195048e-02f, -2.108490752e-02f, -2.185374661e-02f, -2.415097083e-03f, +4.288063759e-02f, +1.076713495e-01f, +1.732095265e-01f, +2.157975398e-01f, +2.185144565e-01f, +1.802490241e-01f, +1.163060587e-01f, +5.019462643e-02f, +1.830852458e-03f, -2.073183425e-02f, -2.191010194e-02f, -1.271629157e-02f, -3.275486195e-03f, +1.586166520e-03f, +2.184148054e-03f, +1.053040518e-03f, -3.571446765e-05f, -2.860641441e-05f, +5.552800462e-05f, +2.103580158e-04f, +3.287192523e-04f, +2.285563129e-04f, -2.291899164e-04f, -9.957149438e-04f, -1.779207937e-03f, -2.157554666e-03f, -1.819124608e-03f, -7.807934590e-04f, +5.762406683e-04f, +1.697135968e-03f, +2.156090765e-03f, +1.875598366e-03f, +1.127245685e-03f, +3.333112290e-04f, -1.821874723e-04f, -3.322934025e-04f, -2.354046271e-04f, -7.649785829e-05f, +2.133708908e-05f, +3.796722292e-05f, -1.496761849e-03f, -1.651578484e-03f, +2.221948993e-03f, +1.011886855e-02f, +1.581805746e-02f, +1.010268815e-02f, -9.816338729e-03f, -3.327936200e-02f, -4.105541750e-02f, -2.117945492e-02f, +1.776357226e-02f, +5.000818234e-02f, +5.222022328e-02f, +2.276080082e-02f, -1.693340590e-02f, -4.013144825e-02f, -3.549926419e-02f, -1.291826993e-02f, +8.309051401e-03f, +1.589056207e-02f, +1.114249787e-02f, +3.053789325e-03f, -1.436857951e-03f, -1.635514223e-03f, +3.712659903e-05f, -4.301824547e-05f, -1.969062480e-04f, -2.611909559e-04f, -4.800796156e-05f, +4.109110111e-04f, +7.661235378e-04f, +5.963417892e-04f, -1.585698194e-04f, -1.012566720e-03f, -1.268492295e-03f, -6.324552708e-04f, +4.714033835e-04f, +1.225472438e-03f, +1.107116472e-03f, +3.037164389e-04f, -5.105951303e-04f, -7.819922437e-04f, -4.852541662e-04f, -1.302199447e-05f, +2.491223514e-04f, +2.185056152e-04f, +6.473520493e-05f, -3.175212055e-05f, /* 4,19 (24) */ +8.696311113e-04f, +2.054832185e-03f, +1.905007746e-03f, -2.173191169e-03f, -1.106323122e-02f, -2.085635121e-02f, -2.208293652e-02f, -3.410812026e-03f, +4.110142965e-02f, +1.055137948e-01f, +1.713904019e-01f, +2.150167463e-01f, +2.190906972e-01f, +1.819461601e-01f, +1.184621495e-01f, +5.207022480e-02f, +2.958098143e-03f, -2.039852303e-02f, -2.209228941e-02f, -1.304858497e-02f, -3.510890822e-03f, +1.509668662e-03f, +2.205485143e-03f, +1.091007741e-03f, -3.517036926e-05f, -2.981721948e-05f, +5.156166247e-05f, +2.052431855e-04f, +3.273307702e-04f, +2.367250903e-04f, -2.093129585e-04f, -9.694446795e-04f, -1.758662752e-03f, -2.155639771e-03f, -1.841403527e-03f, -8.207906967e-04f, +5.345352524e-04f, +1.670673294e-03f, +2.153556667e-03f, +1.893518541e-03f, +1.153498242e-03f, +3.550406920e-04f, -1.717957323e-04f, -3.322926800e-04f, -2.402719605e-04f, -8.090667996e-05f, +1.963313541e-05f, +3.831233032e-05f, -1.459635250e-03f, -1.694596730e-03f, +2.025042745e-03f, +9.857677594e-03f, +1.577004950e-02f, +1.051359916e-02f, -9.050215191e-03f, -3.268302021e-02f, -4.121398732e-02f, -2.219202164e-02f, +1.649507997e-02f, +4.937572707e-02f, +5.269162666e-02f, +2.398627326e-02f, -1.582628943e-02f, -3.982773181e-02f, -3.600985932e-02f, -1.370026217e-02f, +7.823797235e-03f, +1.587754008e-02f, +1.139162022e-02f, +3.272294941e-03f, -1.372122746e-03f, -1.667266343e-03f, +3.790875087e-05f, -3.892175321e-05f, -1.923065421e-04f, -2.627173228e-04f, -5.943000741e-05f, +3.957035450e-04f, +7.612744370e-04f, +6.116544888e-04f, -1.298019927e-04f, -9.917183406e-04f, -1.274294983e-03f, -6.632825249e-04f, +4.379841389e-04f, +1.214094808e-03f, +1.123958007e-03f, +3.328450618e-04f, -4.916688586e-04f, -7.834239334e-04f, -4.996773867e-04f, -2.596160801e-05f, +2.457957871e-04f, +2.224951841e-04f, +6.930253702e-05f, -3.037356937e-05f, /* 4,20 (24) */ +8.344607421e-04f, +2.025014965e-03f, +1.956569408e-03f, -1.967947983e-03f, -1.073590045e-02f, -2.061962612e-02f, -2.229224948e-02f, -4.380256706e-03f, +3.934276690e-02f, +1.033581551e-01f, +1.695489983e-01f, +2.141959556e-01f, +2.196252324e-01f, +1.836168334e-01f, +1.206157061e-01f, +5.396374334e-02f, +4.111596385e-03f, -2.004348233e-02f, -2.226408514e-02f, -1.338087765e-02f, -3.751162783e-03f, +1.428761982e-03f, +2.225118278e-03f, +1.129320071e-03f, -3.459900040e-05f, -3.094960441e-05f, +4.767493968e-05f, +2.001049506e-04f, +3.257319050e-04f, +2.445308031e-04f, -1.897645857e-04f, -9.432155588e-04f, -1.737726042e-03f, -2.153001849e-03f, -1.862960013e-03f, -8.604448044e-04f, +4.926050893e-04f, +1.643542021e-03f, +2.150265936e-03f, +1.910956455e-03f, +1.179702524e-03f, +3.770566444e-04f, -1.610279801e-04f, -3.320397166e-04f, -2.450794304e-04f, -8.538233747e-05f, +1.784375216e-05f, +3.861828455e-05f, -1.421726499e-03f, -1.733518483e-03f, +1.832736202e-03f, +9.594960272e-03f, +1.571061949e-02f, +1.090930271e-02f, -8.288940755e-03f, -3.207136572e-02f, -4.134378931e-02f, -2.318373998e-02f, +1.522078498e-02f, +4.871244454e-02f, +5.312961080e-02f, +2.520036807e-02f, -1.470233142e-02f, -3.949488675e-02f, -3.650152818e-02f, -1.448368610e-02f, +7.324119848e-03f, +1.585157847e-02f, +1.163741601e-02f, +3.494790125e-03f, -1.302820209e-03f, -1.697639913e-03f, +3.859740791e-05f, -3.491439479e-05f, -1.876302057e-04f, -2.639575569e-04f, -7.057567423e-05f, +3.804182591e-04f, +7.558910313e-04f, +6.263379604e-04f, -1.011743441e-04f, -9.702693474e-04f, -1.279158464e-03f, -6.935925692e-04f, +4.042217537e-04f, +1.201805585e-03f, +1.140069105e-03f, +3.619518359e-04f, -4.721730237e-04f, -7.842547396e-04f, -5.139163346e-04f, -3.912729931e-05f, +2.421576681e-04f, +2.263577172e-04f, +7.393604918e-05f, -2.889064834e-05f, /* 4,21 (24) */ +7.998617417e-04f, +1.994065361e-03f, +2.004244348e-03f, -1.767843033e-03f, -1.041016855e-02f, -2.037509531e-02f, -2.248201407e-02f, -5.323472265e-03f, +3.760504086e-02f, +1.012051532e-01f, +1.676860383e-01f, +2.133355108e-01f, +2.201178375e-01f, +1.852603754e-01f, +1.227659721e-01f, +5.587469979e-02f, +5.291298910e-03f, -1.966642569e-02f, -2.242511312e-02f, -1.371291737e-02f, -3.996242213e-03f, +1.343379644e-03f, +2.242962030e-03f, +1.167938356e-03f, -3.400200914e-05f, -3.200478532e-05f, +4.386922233e-05f, +1.949481748e-04f, +3.239287962e-04f, +2.519760951e-04f, -1.705497664e-04f, -9.170397892e-04f, -1.716411240e-03f, -2.149647103e-03f, -1.883787917e-03f, -8.997395766e-04f, +4.504676821e-04f, +1.615751341e-03f, +2.146215229e-03f, +1.927899717e-03f, +1.205845271e-03f, +3.993520395e-04f, -1.498832080e-04f, -3.315287539e-04f, -2.498215151e-04f, -8.992255611e-05f, +1.596818006e-05f, +3.888335807e-05f, -1.383129091e-03f, -1.768432878e-03f, +1.645105997e-03f, +9.331002715e-03f, +1.564004381e-02f, +1.128972097e-02f, -7.533049723e-03f, -3.144502776e-02f, -4.144496366e-02f, -2.415400933e-02f, +1.394162652e-02f, +4.801885197e-02f, +5.353383256e-02f, +2.640217365e-02f, -1.356226232e-02f, -3.913293491e-02f, -3.697370120e-02f, -1.526794084e-02f, +6.810203513e-03f, +1.581245117e-02f, +1.187957368e-02f, +3.721147842e-03f, -1.228884160e-03f, -1.726530561e-03f, +3.919449805e-05f, -3.099874700e-05f, -1.828842697e-04f, -2.649162596e-04f, -8.143924587e-05f, +3.650699852e-04f, +7.499844418e-04f, +6.403861531e-04f, -7.270907003e-05f, -9.482401246e-04f, -1.283082020e-03f, -7.233622306e-04f, +3.701425216e-04f, +1.188611921e-03f, +1.155433287e-03f, +3.910129090e-04f, -4.521185823e-04f, -7.844769221e-04f, -5.279556008e-04f, -5.251044389e-05f, +2.382054290e-04f, +2.300859391e-04f, +7.863176802e-05f, -2.730223042e-05f, /* 4,22 (24) */ +7.658597325e-04f, +1.962060576e-03f, +2.048113570e-03f, -1.572894858e-03f, -1.008623975e-02f, -2.012311922e-02f, -2.265256384e-02f, -6.240512054e-03f, +3.588862962e-02f, +9.905550611e-02f, +1.658022504e-01f, +2.124357712e-01f, +2.205683052e-01f, +1.868761267e-01f, +1.249121873e-01f, +5.780259951e-02f, +6.497144181e-03f, -1.926707365e-02f, -2.257499633e-02f, -1.404444612e-02f, -4.246063728e-03f, +1.253457088e-03f, +2.258930210e-03f, +1.206821714e-03f, -3.338102668e-05f, -3.298402511e-05f, +4.014578915e-05f, +1.897776284e-04f, +3.219276085e-04f, +2.590637962e-04f, -1.516732064e-04f, -8.909294177e-04f, -1.694731869e-03f, -2.145582071e-03f, -1.903881483e-03f, -9.386590117e-04f, +4.081406529e-04f, +1.587310811e-03f, +2.141401579e-03f, +1.944336107e-03f, +1.231913124e-03f, +4.219195767e-04f, -1.383606303e-04f, -3.307541039e-04f, -2.544926232e-04f, -9.452494757e-05f, +1.400572709e-05f, +3.910582102e-05f, -1.343934593e-03f, -1.799431625e-03f, +1.462221727e-03f, +9.066086455e-03f, +1.555860457e-02f, +1.165479095e-02f, -6.783065281e-03f, -3.080464160e-02f, -4.151767273e-02f, -2.510224946e-02f, +1.265854450e-02f, +4.729548974e-02f, +5.390397508e-02f, +2.759078557e-02f, -1.240682903e-02f, -3.874192200e-02f, -3.742581979e-02f, -1.605241777e-02f, +6.282247912e-03f, +1.575994073e-02f, +1.211777911e-02f, +3.951233781e-03f, -1.150252392e-03f, -1.753832791e-03f, +3.970202937e-05f, -2.717721072e-05f, -1.780756998e-04f, -2.655982496e-04f, -9.201537813e-05f, +3.496734189e-04f, +7.435661491e-04f, +6.537936395e-04f, -4.442807088e-05f, -9.256514557e-04f, -1.286065738e-03f, -7.525688233e-04f, +3.357730234e-04f, +1.174521759e-03f, +1.170034648e-03f, +4.200043158e-04f, -4.315170851e-04f, -7.840832211e-04f, -5.417797710e-04f, -6.610206861e-05f, +2.339367939e-04f, +2.336725808e-04f, +8.338555042e-05f, -2.560730777e-05f, /* 4,23 (24) */ +7.324787058e-04f, +1.929076550e-03f, +2.088259360e-03f, -1.383117230e-03f, -9.764312144e-03f, -1.986405542e-02f, -2.280423704e-02f, -7.131441472e-03f, +3.419389775e-02f, +9.690992404e-02f, +1.638983689e-01f, +2.114971122e-01f, +2.209764458e-01f, +1.884634375e-01f, +1.270535889e-01f, +5.974693562e-02f, +7.729057306e-03f, -1.884515407e-02f, -2.271335696e-02f, -1.437520023e-02f, -4.500556352e-03f, +1.158932141e-03f, +2.272935938e-03f, +1.245927535e-03f, -3.273766594e-05f, -3.388863118e-05f, +3.650581267e-05f, +1.845979867e-04f, +3.197345265e-04f, +2.657969177e-04f, -1.331393484e-04f, -8.648963243e-04f, -1.672701532e-03f, -2.140813622e-03f, -1.923235351e-03f, -9.771873217e-04f, +3.656417317e-04f, +1.558230343e-03f, +2.135822399e-03f, +1.960253585e-03f, +1.257892630e-03f, +4.447517036e-04f, -1.264596862e-04f, -3.297101550e-04f, -2.590870968e-04f, -9.918700977e-05f, +1.195577071e-05f, +3.928394304e-05f, -1.304232564e-03f, -1.826608836e-03f, +1.284146027e-03f, +8.800488206e-03f, +1.546658919e-02f, +1.200446437e-02f, -6.039499132e-03f, -3.015084797e-02f, -4.156210080e-02f, -2.602790091e-02f, +1.137247876e-02f, +4.654292092e-02f, +5.423974810e-02f, +2.876530733e-02f, -1.123679438e-02f, -3.832191769e-02f, -3.785733687e-02f, -1.683650099e-02f, +5.740468141e-03f, +1.569383866e-02f, +1.235171590e-02f, +4.184906362e-03f, -1.066866841e-03f, -1.779440099e-03f, +4.012208559e-05f, -2.345201148e-05f, -1.732113900e-04f, -2.660085539e-04f, -1.022990993e-04f, +3.342431068e-04f, +7.366479792e-04f, +6.665556153e-04f, -1.635293224e-05f, -9.025245021e-04f, -1.288110505e-03f, -7.811901687e-04f, +3.011401031e-04f, +1.159543829e-03f, +1.183857869e-03f, +4.489019999e-04f, -4.103806698e-04f, -7.830668693e-04f, -5.553734415e-04f, -7.989285652e-05f, +2.293497828e-04f, +2.371103885e-04f, +8.819308537e-05f, -2.380499576e-05f, /* 4,24 (24) */ +6.997410399e-04f, +1.895187919e-03f, +2.124765172e-03f, -1.198519243e-03f, -9.444577618e-03f, -1.959825850e-02f, -2.293737639e-02f, -7.996337796e-03f, +3.252119622e-02f, +9.476911042e-02f, +1.619751336e-01f, +2.105199249e-01f, +2.213420876e-01f, +1.900216679e-01f, +1.291894113e-01f, +6.170718920e-02f, +8.986949936e-03f, -1.840040237e-02f, -2.283981665e-02f, -1.470491038e-02f, -4.759643448e-03f, +1.059745131e-03f, +2.284891708e-03f, +1.285211478e-03f, -3.207352022e-05f, -3.471995310e-05f, +3.295036037e-05f, +1.794138276e-04f, +3.173557501e-04f, +2.721786476e-04f, -1.149523721e-04f, -8.389522168e-04f, -1.650333910e-03f, -2.135348947e-03f, -1.941844558e-03f, -1.015308940e-03f, +3.229887474e-04f, +1.528520206e-03f, +2.129475483e-03f, +1.975640291e-03f, +1.283770252e-03f, +4.678406184e-04f, -1.141800434e-04f, -3.283913767e-04f, -2.635992146e-04f, -1.039061266e-04f, +9.817759973e-06f, +3.941599517e-05f, -1.264110478e-03f, -1.850060847e-03f, +1.110934637e-03f, +8.534479652e-03f, +1.536429009e-02f, +1.233870748e-02f, -5.302851153e-03f, -2.948429235e-02f, -4.157845373e-02f, -2.693042541e-02f, +1.008436826e-02f, +4.576173075e-02f, +5.454088820e-02f, +2.992485116e-02f, -1.005293651e-02f, -3.787301569e-02f, -3.826771754e-02f, -1.761956786e-02f, +5.185094700e-03f, +1.561394580e-02f, +1.258106569e-02f, +4.422016750e-03f, -9.786737559e-04f, -1.803245095e-03f, +4.045682146e-05f, -1.982520010e-05f, -1.682981552e-04f, -2.661523987e-04f, -1.122858102e-04f, +3.187934335e-04f, +7.292420878e-04f, +6.786678989e-04f, +1.149509324e-05f, -8.788807818e-04f, -1.289218010e-03f, -8.092046148e-04f, +2.662708436e-04f, +1.143687639e-03f, +1.196888238e-03f, +4.776818356e-04f, -3.887220543e-04f, -7.814216028e-04f, -5.687212344e-04f, -9.387315197e-05f, +2.244427192e-04f, +2.403921319e-04f, +9.304989612e-05f, -2.189453686e-05f, /* 4,25 (24) */ +6.676675197e-04f, +1.860467966e-03f, +2.157715533e-03f, -1.019105415e-03f, -9.127221868e-03f, -1.932607986e-02f, -2.305232876e-02f, -8.835290013e-03f, +3.087086231e-02f, +9.263376147e-02f, +1.600332890e-01f, +2.095046159e-01f, +2.216650763e-01f, +1.915501881e-01f, +1.313188867e-01f, +6.368282949e-02f, +1.027072019e-02f, -1.793256175e-02f, -2.295399669e-02f, -1.503330176e-02f, -5.023242663e-03f, +9.558390041e-04f, +2.294709468e-03f, +1.324627473e-03f, -3.139016191e-05f, -3.547938035e-05f, +2.948039595e-05f, +1.742296298e-04f, +3.147974895e-04f, +2.782123463e-04f, -9.711619491e-05f, -8.131086244e-04f, -1.627642745e-03f, -2.129195558e-03f, -1.959704540e-03f, -1.053008532e-03f, +2.801996166e-04f, +1.498191019e-03f, +2.122359012e-03f, +1.990484565e-03f, +1.309532375e-03f, +4.911782716e-04f, -1.015216012e-04f, -3.267923248e-04f, -2.680231957e-04f, -1.086795681e-04f, +7.591217706e-06f, +3.950025171e-05f, -1.223653657e-03f, -1.869886047e-03f, +9.426364820e-04f, +8.268327253e-03f, +1.525200428e-02f, +1.265750091e-02f, -4.573609065e-03f, -2.880562445e-02f, -4.156695864e-02f, -2.780930619e-02f, +8.795150246e-03f, +4.495252614e-02f, +5.480715905e-02f, +3.106853880e-02f, -8.856048273e-03f, -3.739533385e-02f, -3.865643960e-02f, -1.840098946e-02f, +4.616373465e-03f, +1.552007265e-02f, +1.280550840e-02f, +4.662408882e-03f, -8.856238598e-04f, -1.825139632e-03f, +4.070845819e-05f, -1.629865360e-05f, -1.633427247e-04f, -2.660352008e-04f, -1.219712837e-04f, +3.033386091e-04f, +7.213609453e-04f, +6.901269306e-04f, +3.909510354e-05f, -8.547421485e-04f, -1.289390737e-03f, -8.365910557e-04f, +2.311925422e-04f, +1.126963471e-03f, +1.209111664e-03f, +5.063196498e-04f, -3.665545286e-04f, -7.791416723e-04f, -5.818078140e-04f, -1.080329663e-04f, +2.192142359e-04f, +2.435106135e-04f, +9.795134253e-05f, -1.987530445e-05f, /* 4,26 (24) */ +6.362773578e-04f, +1.824988586e-03f, +2.187195929e-03f, -8.448757855e-04f, -8.812424378e-03f, -1.904786751e-02f, -2.314944496e-02f, -9.648398637e-03f, +2.924321956e-02f, +9.050456591e-02f, +1.580735845e-01f, +2.084516074e-01f, +2.219452759e-01f, +1.930483791e-01f, +1.334412458e-01f, +6.567331406e-02f, +1.158025256e-02f, -1.744138348e-02f, -2.305551829e-02f, -1.536009408e-02f, -5.291265859e-03f, +8.471594361e-04f, +2.302300686e-03f, +1.364127725e-03f, -3.068914123e-05f, -3.616833997e-05f, +2.609678061e-05f, +1.690497713e-04f, +3.120659607e-04f, +2.839015417e-04f, -7.963447218e-05f, -7.873768925e-04f, -1.604641837e-03f, -2.122361275e-03f, -1.976811134e-03f, -1.090271000e-03f, +2.372923342e-04f, +1.467253741e-03f, +2.114471558e-03f, +2.004774947e-03f, +1.335165314e-03f, +5.147563692e-04f, -8.848449348e-05f, -3.249076470e-04f, -2.723532024e-04f, -1.135044900e-04f, +5.275742626e-06f, +3.953499220e-05f, -1.182945199e-03f, -1.886184701e-03f, +7.792937573e-04f, +8.002292052e-03f, +1.513003300e-02f, +1.296083952e-02f, -3.852248120e-03f, -2.811549752e-02f, -4.152786353e-02f, -2.866404834e-02f, +7.505759509e-03f, +4.411593508e-02f, +5.503835159e-02f, +3.219550227e-02f, -7.646936609e-03f, -3.688901420e-02f, -3.902299412e-02f, -1.918013113e-02f, +4.034565651e-03f, +1.541203968e-02f, +1.302472264e-02f, +4.905919496e-03f, -7.876725172e-04f, -1.845014936e-03f, +4.087927890e-05f, -1.287407632e-05f, -1.583517357e-04f, -2.656625581e-04f, -1.313516642e-04f, +2.878926567e-04f, +7.130173215e-04f, +7.009297703e-04f, +6.642656459e-05f, -8.301307690e-04f, -1.288631960e-03f, -8.633289495e-04f, +1.959326858e-04f, +1.109382373e-03f, +1.220514691e-03f, +5.347912450e-04f, -3.438919470e-04f, -7.762218530e-04f, -5.946179023e-04f, -1.223619839e-04f, +2.136632816e-04f, +2.464586776e-04f, +1.028926238e-04f, -1.774680651e-05f, /* 4,27 (24) */ +6.055882166e-04f, +1.788820246e-03f, +2.213292709e-03f, -6.758260142e-04f, -8.500358418e-03f, -1.876396597e-02f, -2.322907943e-02f, -1.043577553e-02f, +2.763857773e-02f, +8.838220464e-02f, +1.560967734e-01f, +2.073613364e-01f, +2.221825683e-01f, +1.945156329e-01f, +1.355557173e-01f, +6.767808900e-02f, +1.291541788e-02f, -1.692662711e-02f, -2.314400279e-02f, -1.568500173e-02f, -5.563619061e-03f, +7.336549461e-04f, +2.307576429e-03f, +1.403662717e-03f, -2.997198507e-05f, -3.678829431e-05f, +2.280027447e-05f, +1.638785275e-04f, +3.091673808e-04f, +2.892499246e-04f, -6.251059783e-05f, -7.617681777e-04f, -1.581345032e-03f, -2.114854228e-03f, -1.993160576e-03f, -1.127081495e-03f, +1.942849625e-04f, +1.435719672e-03f, +2.105812081e-03f, +2.018500186e-03f, +1.360655321e-03f, +5.385663751e-04f, -7.506909163e-05f, -3.227320879e-04f, -2.765833440e-04f, -1.183779345e-04f, +2.871011414e-06f, +3.951850337e-05f, -1.142065920e-03f, -1.899058777e-03f, +6.209420216e-04f, +7.736629494e-03f, +1.499868133e-02f, +1.324873218e-02f, -3.139230798e-03f, -2.741456775e-02f, -4.146143697e-02f, -2.949417911e-02f, +6.217127549e-03f, +4.325260613e-02f, +5.523428428e-02f, +3.330488464e-02f, -6.426421918e-03f, -3.635422296e-02f, -3.936688607e-02f, -1.995635298e-02f, +3.439947749e-03f, +1.528967770e-02f, +1.323838592e-02f, +5.152378173e-03f, -6.847798935e-04f, -1.862761743e-03f, +4.097162398e-05f, -9.553001232e-06f, -1.533317275e-04f, -2.650402404e-04f, -1.404234661e-04f, +2.724694003e-04f, +7.042242699e-04f, +7.110740955e-04f, +9.346932708e-05f, -8.050691020e-04f, -1.286945741e-03f, -8.893983368e-04f, +1.605189261e-04f, +1.090956146e-03f, +1.231084514e-03f, +5.630724209e-04f, -3.207487185e-04f, -7.726574551e-04f, -6.071362952e-04f, -1.368495688e-04f, +2.077891270e-04f, +2.492292190e-04f, +1.078687810e-04f, -1.550868921e-05f, /* 4,28 (24) */ +5.756162315e-04f, +1.752031952e-03f, +2.236092984e-03f, -5.119474867e-04f, -8.191191037e-03f, -1.847471604e-02f, -2.329159003e-02f, -1.119754371e-02f, +2.605723269e-02f, +8.626735041e-02f, +1.541036128e-01f, +2.062342549e-01f, +2.223768532e-01f, +1.959513525e-01f, +1.376615294e-01f, +6.969658919e-02f, +1.427607320e-02f, -1.638806074e-02f, -2.321907188e-02f, -1.600773382e-02f, -5.840202405e-03f, +6.152770116e-04f, +2.310447440e-03f, +1.443181221e-03f, -2.924019581e-05f, -3.734073876e-05f, +1.959153804e-05f, +1.587200698e-04f, +3.061079629e-04f, +2.942613438e-04f, -4.574770527e-05f, -7.362934421e-04f, -1.557766215e-03f, -2.106682842e-03f, -2.008749506e-03f, -1.163425423e-03f, +1.511956212e-04f, +1.403600444e-03f, +2.096379936e-03f, +2.031649253e-03f, +1.385988598e-03f, +5.625995143e-04f, -6.127600737e-05f, -3.202604942e-04f, -2.807076808e-04f, -1.232968301e-04f, +3.767807771e-07f, +3.944908116e-05f, -1.101094296e-03f, -1.908611778e-03f, +4.676102941e-04f, +7.471589254e-03f, +1.485825787e-02f, +1.352120158e-02f, -2.435006529e-03f, -2.670349365e-02f, -4.136796764e-02f, -3.029924821e-02f, +4.930181808e-03f, +4.236320779e-02f, +5.539480320e-02f, +3.439584079e-02f, -5.195337404e-03f, -3.579115054e-02f, -3.968763479e-02f, -2.072901044e-02f, +2.832811454e-03f, +1.515282813e-02f, +1.344617505e-02f, +5.401607392e-03f, -5.769111124e-04f, -1.878270432e-03f, +4.098788653e-05f, -6.336791463e-06f, -1.482891349e-04f, -2.641741805e-04f, -1.491835725e-04f, +2.570824535e-04f, +6.949951116e-04f, +7.205581984e-04f, +1.202036428e-04f, -7.795798755e-04f, -1.284336918e-03f, -9.147798576e-04f, +1.249790545e-04f, +1.071697343e-03f, +1.240808997e-03f, +5.911389977e-04f, -2.971397975e-04f, -7.684443329e-04f, -6.193478786e-04f, -1.514847712e-04f, +2.015913700e-04f, +2.518151926e-04f, +1.128747009e-04f, -1.316074035e-05f, /* 4,29 (24) */ +5.463760357e-04f, +1.714691213e-03f, +2.255684522e-03f, -3.532274169e-04f, -7.885083074e-03f, -1.818045470e-02f, -2.333733773e-02f, -1.193383715e-02f, +2.449946648e-02f, +8.416066757e-02f, +1.520948633e-01f, +2.050708295e-01f, +2.225280488e-01f, +1.973549530e-01f, +1.397579093e-01f, +7.172823844e-02f, +1.566206180e-02f, -1.582546122e-02f, -2.328034788e-02f, -1.632799431e-02f, -6.120910086e-03f, +4.919801815e-04f, +2.310824221e-03f, +1.482630302e-03f, -2.849525023e-05f, -3.782719946e-05f, +1.647113367e-05f, +1.535784642e-04f, +3.028939125e-04f, +2.989398010e-04f, -2.934866841e-05f, -7.109634486e-04f, -1.533919301e-03f, -2.097855838e-03f, -2.023574966e-03f, -1.199288455e-03f, +1.080424771e-04f, +1.370908015e-03f, +2.086174875e-03f, +2.044211344e-03f, +1.411151296e-03f, +5.868467756e-04f, -4.710609530e-05f, -3.174878198e-04f, -2.847202272e-04f, -1.282579919e-04f, -2.207110546e-06f, +3.932503274e-05f, -1.060106409e-03f, -1.914948570e-03f, +3.193211593e-04f, +7.207415073e-03f, +1.470907429e-02f, +1.377828403e-02f, -1.740011417e-03f, -2.598293546e-02f, -4.124776400e-02f, -3.107882809e-02f, +3.645844890e-03f, +4.144842794e-02f, +5.551978226e-02f, +3.546753813e-02f, -3.954528407e-03f, -3.520001154e-02f, -3.998477459e-02f, -2.149745477e-02f, +2.213463575e-03f, +1.500134336e-02f, +1.364776642e-02f, +5.653422585e-03f, -4.640364116e-04f, -1.891431172e-03f, +4.093050783e-05f, -3.226641988e-06f, -1.432302827e-04f, -2.630704645e-04f, -1.576292334e-04f, +2.417452079e-04f, +6.853434200e-04f, +7.293809816e-04f, +1.466101804e-04f, -7.536860648e-04f, -1.280811105e-03f, -9.394547681e-04f, +8.934097687e-05f, +1.051619252e-03f, +1.249676678e-03f, +6.189668383e-04f, -2.730806734e-04f, -7.635788941e-04f, -6.312376447e-04f, -1.662563353e-04f, +1.950699416e-04f, +2.542096223e-04f, +1.179051185e-04f, -1.070289269e-05f, /* 4,30 (24) */ +5.178807854e-04f, +1.676864013e-03f, +2.272155655e-03f, -1.996489527e-04f, -7.582189161e-03f, -1.788151490e-02f, -2.336668640e-02f, -1.264480060e-02f, +2.296554718e-02f, +8.206281173e-02f, +1.500712883e-01f, +2.038715410e-01f, +2.226360913e-01f, +1.987258610e-01f, +1.418440842e-01f, +7.377244979e-02f, +1.707321309e-02f, -1.523861445e-02f, -2.332745398e-02f, -1.664548213e-02f, -6.405630313e-03f, +3.637221897e-04f, +2.308617110e-03f, +1.521955334e-03f, -2.773859848e-05f, -3.824923106e-05f, +1.343952718e-05f, +1.484576699e-04f, +2.995314222e-04f, +3.032894465e-04f, -1.331610283e-05f, -6.857887560e-04f, -1.509818226e-03f, -2.088382221e-03f, -2.037634402e-03f, -1.234656532e-03f, +6.484373343e-05f, +1.337654664e-03f, +2.075197043e-03f, +2.056175888e-03f, +1.436129532e-03f, +6.112989155e-04f, -3.256045541e-05f, -3.144091316e-04f, -2.886149562e-04f, -1.332581224e-04f, -4.880739804e-06f, +3.914467862e-05f, -1.019175901e-03f, -1.918175212e-03f, +1.760908766e-04f, +6.944344609e-03f, +1.455144506e-02f, +1.402002924e-02f, -1.054667997e-03f, -2.525355447e-02f, -4.110115382e-02f, -3.183251415e-02f, +2.365033785e-03f, +4.050897317e-02f, +5.560912323e-02f, +3.651915739e-02f, -2.704851729e-03f, -3.458104470e-02f, -4.025785526e-02f, -2.226103367e-02f, +1.582225931e-03f, +1.483508702e-02f, +1.384283636e-02f, +5.907632207e-03f, -3.461312931e-04f, -1.902134065e-03f, +4.080197272e-05f, -2.235815352e-07f, -1.381613802e-04f, -2.617353228e-04f, -1.657580629e-04f, +2.264708226e-04f, +6.752830043e-04f, +7.375419549e-04f, +1.726700408e-04f, -7.274108696e-04f, -1.276374679e-03f, -9.634049570e-04f, +5.363268835e-05f, +1.030735887e-03f, +1.257676790e-03f, +6.465318711e-04f, -2.485873599e-04f, -7.580581083e-04f, -6.427907079e-04f, -1.811527070e-04f, +1.882251109e-04f, +2.564056106e-04f, +1.229546211e-04f, -8.135227175e-06f, /* 4,31 (24) */ +4.901421870e-04f, +1.638614782e-03f, +2.285595183e-03f, -5.119128274e-05f, -7.282657739e-03f, -1.757822545e-02f, -2.338000250e-02f, -1.333058935e-02f, +2.145572895e-02f, +7.997442951e-02f, +1.480336539e-01f, +2.026368845e-01f, +2.227009351e-01f, +2.000635157e-01f, +1.439192813e-01f, +7.582862567e-02f, +1.850934262e-02f, -1.462731553e-02f, -2.336001444e-02f, -1.695989127e-02f, -6.694245269e-03f, +2.304640673e-04f, +2.303736370e-03f, +1.561100013e-03f, -2.697166309e-05f, -3.860841448e-05f, +1.049708950e-05f, +1.433615383e-04f, +2.960266674e-04f, +3.073145736e-04f, +2.347632839e-06f, -6.607797145e-04f, -1.485476938e-03f, -2.078271276e-03f, -2.050925659e-03f, -1.269515872e-03f, +2.161761953e-05f, +1.303852983e-03f, +2.063446989e-03f, +2.067532558e-03f, +1.460909391e-03f, +6.359464612e-04f, -1.764043540e-05f, -3.110196137e-04f, -2.923858025e-04f, -1.382938117e-04f, -7.644098300e-06f, +3.890635472e-05f, -9.783739287e-04f, -1.918398793e-03f, +3.792949637e-05f, +6.682609286e-03f, +1.438568700e-02f, +1.424650006e-02f, -3.793849927e-04f, -2.451601252e-02f, -4.092848378e-02f, -3.255992502e-02f, +1.088659106e-03f, +3.954556821e-02f, +5.566275592e-02f, +3.754989327e-02f, -1.447174939e-03f, -3.393451283e-02f, -4.050644262e-02f, -2.301909178e-02f, +9.394352227e-04f, +1.465393432e-02f, +1.403106147e-02f, +6.164037818e-03f, -2.231766720e-04f, -1.910269292e-03f, +4.060480517e-05f, +2.671525331e-06f, -1.330885160e-04f, -2.601751204e-04f, -1.735680368e-04f, +2.112722132e-04f, +6.648278939e-04f, +7.450412298e-04f, +1.983647722e-04f, -7.007776918e-04f, -1.271034774e-03f, -9.866129608e-04f, +1.788224777e-05f, +1.009061979e-03f, +1.264799271e-03f, +6.738101129e-04f, -2.236763837e-04f, -7.518795146e-04f, -6.539923216e-04f, -1.961620417e-04f, +1.810574896e-04f, +2.583963475e-04f, +1.280176524e-04f, -5.457975959e-06f, /* 5, 0 (24) */ -3.157209003e-04f, +2.200933252e-03f, +6.514604421e-03f, +7.225487889e-03f, -2.813138603e-03f, -2.309221197e-02f, -3.776234036e-02f, -2.075986699e-02f, +4.463545552e-02f, +1.458003526e-01f, +2.399263239e-01f, +2.784031908e-01f, +2.399263239e-01f, +1.458003526e-01f, +4.463545552e-02f, -2.075986699e-02f, -3.776234036e-02f, -2.309221197e-02f, -2.813138603e-03f, +7.225487889e-03f, +6.514604421e-03f, +2.200933252e-03f, -3.157209003e-04f, -4.745985996e-04f, -3.344837876e-05f, -1.203735541e-04f, -1.201025358e-04f, +1.113283129e-04f, +5.071816554e-04f, +6.716327570e-04f, +1.159330534e-04f, -1.237233007e-03f, -2.741342671e-03f, -3.328246260e-03f, -2.312914962e-03f, -3.949986729e-05f, +2.256128833e-03f, +3.321960433e-03f, +2.779048968e-03f, +1.287112166e-03f, -8.426151525e-05f, -6.671755267e-04f, -5.185867868e-04f, -1.224586306e-04f, +1.168135820e-04f, +1.225914265e-04f, +3.593688915e-05f, -1.363314209e-05f, -1.065756848e-03f, -5.278430402e-03f, -6.652854040e-03f, +2.225777551e-03f, +1.817429953e-02f, +2.347202169e-02f, +3.321147688e-03f, -3.097435754e-02f, -4.527341035e-02f, -1.784651672e-02f, +3.123613533e-02f, +5.568063817e-02f, +3.123613533e-02f, -1.784651672e-02f, -4.527341035e-02f, -3.097435754e-02f, +3.321147688e-03f, +2.347202169e-02f, +1.817429953e-02f, +2.225777551e-03f, -6.652854040e-03f, -5.278430402e-03f, -1.065756848e-03f, +4.898976646e-04f, +9.908417991e-05f, +1.330920197e-04f, -8.725054394e-05f, -4.448139414e-04f, -4.501546129e-04f, +1.925170661e-04f, +9.852348420e-04f, +9.604702507e-04f, -1.665956790e-04f, -1.399459798e-03f, -1.397566761e-03f, -2.620026282e-05f, +1.371426028e-03f, +1.423191721e-03f, +2.113441000e-04f, -9.398775262e-04f, -1.001351655e-03f, -2.198341146e-04f, +4.396205809e-04f, +4.531964488e-04f, +9.822200801e-05f, -1.306068552e-04f, -1.022919954e-04f, -4.211524069e-06f, /* 5, 1 (24) */ -3.491692790e-04f, +2.080559698e-03f, +6.394501885e-03f, +7.336816202e-03f, -2.305956948e-03f, -2.242057921e-02f, -3.764640731e-02f, -2.199710000e-02f, +4.189411285e-02f, +1.424721063e-01f, +2.376134089e-01f, +2.783636910e-01f, +2.421824527e-01f, +1.491223130e-01f, +4.741450448e-02f, -1.947275482e-02f, -3.784660187e-02f, -2.375938750e-02f, -3.331725390e-03f, +7.103029259e-03f, +6.631418003e-03f, +2.323524679e-03f, -2.797840111e-04f, -4.882317417e-04f, -3.100945145e-05f, -1.180738813e-04f, -1.231474882e-04f, +1.003898453e-04f, +4.955618386e-04f, +6.753511633e-04f, +1.467591928e-04f, -1.187542172e-03f, -2.702707759e-03f, -3.332873833e-03f, -2.368390551e-03f, -1.184764218e-04f, +2.198061489e-03f, +3.314009081e-03f, +2.815793091e-03f, +1.337148185e-03f, -5.175319886e-05f, -6.619669015e-04f, -5.297602692e-04f, -1.337733593e-04f, +1.132776529e-04f, +1.247218530e-04f, +3.847281259e-05f, -1.306337424e-05f, -9.666726676e-04f, -5.145338382e-03f, -6.740104584e-03f, +1.780963610e-03f, +1.772414492e-02f, +2.366453876e-02f, +4.306382530e-03f, -3.001388729e-02f, -4.544000602e-02f, -1.924597652e-02f, +2.983856857e-02f, +5.565443791e-02f, +3.260756136e-02f, -1.642332500e-02f, -4.506206625e-02f, -3.191423507e-02f, +2.319796034e-03f, +2.325218758e-02f, +1.861392011e-02f, +2.678974000e-03f, -6.554632032e-03f, -5.409037257e-03f, -1.168048843e-03f, +4.856861405e-04f, +9.582297529e-05f, +1.353001982e-04f, -7.645233616e-05f, -4.360731296e-04f, -4.599789698e-04f, +1.653967645e-04f, +9.682574761e-04f, +9.798613549e-04f, -1.219875182e-04f, -1.374406946e-03f, -1.422226433e-03f, -7.857232390e-05f, +1.343829552e-03f, +1.445570939e-03f, +2.561839252e-04f, -9.180958213e-04f, -1.016579433e-03f, -2.473179135e-04f, +4.283780575e-04f, +4.612023484e-04f, +1.093551967e-04f, -1.278408987e-04f, -1.054388668e-04f, -6.384690347e-06f, /* 5, 2 (24) */ -3.801787305e-04f, +1.962485817e-03f, +6.271354397e-03f, +7.437206048e-03f, -1.810395109e-03f, -2.174522805e-02f, -3.749964811e-02f, -2.318464217e-02f, +3.919140509e-02f, +1.391392325e-01f, +2.352450184e-01f, +2.782452146e-01f, +2.443805142e-01f, +1.524363221e-01f, +5.023029758e-02f, -1.813560664e-02f, -3.789835507e-02f, -2.442135440e-02f, -3.861485659e-03f, +6.969255899e-03f, +6.744695656e-03f, +2.448246532e-03f, -2.413111985e-04f, -5.012951160e-04f, -2.862214005e-05f, -1.156980079e-04f, -1.259516305e-04f, +8.965028562e-05f, +4.837441552e-04f, +6.783437400e-04f, +1.767321185e-04f, -1.138070623e-03f, -2.663178182e-03f, -3.335851552e-03f, -2.422527267e-03f, -1.973834540e-04f, +2.138743223e-03f, +3.304386071e-03f, +2.851541903e-03f, +1.387309121e-03f, -1.841753301e-05f, -6.559947516e-04f, -5.406850090e-04f, -1.452646791e-04f, +1.094920003e-04f, +1.267591490e-04f, +4.105384145e-05f, -1.243525760e-05f, -8.708496923e-04f, -5.010038184e-03f, -6.816556920e-03f, +1.344890481e-03f, +1.726416595e-02f, +2.382993552e-02f, +5.274640006e-03f, -2.903402594e-02f, -4.556199354e-02f, -2.062038347e-02f, +2.841634214e-02f, +5.557586558e-02f, +3.395139091e-02f, -1.497775406e-02f, -4.480588232e-02f, -3.283233089e-02f, +1.303216601e-03f, +2.300486966e-02f, +1.904229817e-02f, +3.140176349e-03f, -6.445276836e-03f, -5.536878156e-03f, -1.273487710e-03f, +4.793014501e-04f, +9.251582846e-05f, +1.372355424e-04f, -6.583842639e-05f, -4.269924794e-04f, -4.690934086e-04f, +1.385025771e-04f, +9.504487886e-04f, +9.980397348e-04f, -7.756801037e-05f, -1.348066343e-03f, -1.445381490e-03f, -1.308590259e-04f, +1.314804383e-03f, +1.466567125e-03f, +3.010658936e-04f, -8.951393075e-04f, -1.030890490e-03f, -2.749378696e-04f, +4.164291790e-04f, +4.688135280e-04f, +1.206380968e-04f, -1.247907041e-04f, -1.085171417e-04f, -8.647893339e-06f, /* 5, 3 (24) */ -4.088008705e-04f, +1.846787809e-03f, +6.145402767e-03f, +7.526856333e-03f, -1.326650954e-03f, -2.106688431e-02f, -3.732291599e-02f, -2.432271279e-02f, +3.652822691e-02f, +1.358033809e-01f, +2.328224911e-01f, +2.780478311e-01f, +2.465192574e-01f, +1.557407082e-01f, +5.308183948e-02f, -1.674829752e-02f, -3.791677261e-02f, -2.507734915e-02f, -4.402170668e-03f, +6.823991220e-03f, +6.854187656e-03f, +2.575005681e-03f, -2.002573571e-04f, -5.137303736e-04f, -2.628834081e-05f, -1.132514817e-04f, -1.285183626e-04f, +7.911631081e-05f, +4.717452654e-04f, +6.806238860e-04f, +2.058448186e-04f, -1.088848800e-03f, -2.622788251e-03f, -3.337188933e-03f, -2.475297788e-03f, -2.761746757e-04f, +2.078205281e-03f, +3.293086424e-03f, +2.886262718e-03f, +1.437562572e-03f, +1.573524375e-05f, -6.492474063e-04f, -5.513437972e-04f, -1.569243904e-04f, +1.054541107e-04f, +1.286975968e-04f, +4.367753023e-05f, -1.174769073e-05f, -7.783338639e-04f, -4.872802642e-03f, -6.882395347e-03f, +9.178980012e-04f, +1.679507254e-02f, +2.396843810e-02f, +6.225088795e-03f, -2.803598620e-02f, -4.563956155e-02f, -2.196844981e-02f, +2.697096065e-02f, +5.544500656e-02f, +3.526619530e-02f, -1.351118694e-02f, -4.450481643e-02f, -3.372747020e-02f, +2.723261116e-04f, +2.272993179e-02f, +1.945872735e-02f, +3.608989877e-03f, -6.324638739e-03f, -5.661668860e-03f, -1.382004851e-03f, +4.706535568e-04f, +8.917006763e-05f, +1.389025366e-04f, -5.541935889e-05f, -4.175905900e-04f, -4.774986143e-04f, +1.118632115e-04f, +9.318387172e-04f, +1.014995825e-03f, -3.338502793e-05f, -1.320472530e-03f, -1.467010163e-03f, -1.830035781e-04f, +1.284379276e-03f, +1.486151448e-03f, +3.459403981e-04f, -8.710236820e-04f, -1.044257977e-03f, -3.026628272e-04f, +4.037770445e-04f, +4.760120962e-04f, +1.320582228e-04f, -1.214531979e-04f, -1.115190818e-04f, -1.099953653e-05f, /* 5, 4 (24) */ -4.350892113e-04f, +1.733536327e-03f, +6.016884404e-03f, +7.605972644e-03f, -8.549056885e-04f, -2.038626042e-02f, -3.711707118e-02f, -2.541156159e-02f, +3.390543865e-02f, +1.324661920e-01f, +2.303471933e-01f, +2.777716564e-01f, +2.485974627e-01f, +1.590337946e-01f, +5.596810220e-02f, -1.531073495e-02f, -3.790103736e-02f, -2.572659656e-02f, -4.953514465e-03f, +6.667066830e-03f, +6.959641767e-03f, +2.703703278e-03f, -1.565798269e-04f, -5.254780643e-04f, -2.400981416e-05f, -1.107397924e-04f, -1.308512845e-04f, +6.879421704e-05f, +4.595816567e-04f, +6.822053868e-04f, +2.340910800e-04f, -1.039906603e-03f, -2.581572607e-03f, -3.336896596e-03f, -2.526675818e-03f, -3.548038886e-04f, +2.016479832e-03f, +3.280106316e-03f, +2.919923330e-03f, +1.487875705e-03f, +5.069408217e-05f, -6.417136720e-04f, -5.617193249e-04f, -1.687439147e-04f, +1.011617129e-04f, +1.305314530e-04f, +4.634129554e-05f, -1.099963891e-05f, -6.891637963e-04f, -4.733900105e-03f, -6.937814706e-03f, +5.003074112e-04f, +1.631757393e-02f, +2.408030131e-02f, +7.156927512e-03f, -2.702099038e-02f, -4.567294658e-02f, -2.328892234e-02f, +2.550395049e-02f, +5.526200298e-02f, +3.655057457e-02f, -1.202503549e-02f, -4.415887603e-02f, -3.459849388e-02f, -7.719318653e-04f, +2.242726897e-02f, +1.986250440e-02f, +4.085001973e-03f, -6.192580516e-03f, -5.783122058e-03f, -1.493523933e-03f, +4.596540203e-04f, +8.579289225e-05f, +1.403059826e-04f, -4.520517385e-05f, -4.078861655e-04f, -4.851961862e-04f, +8.550668452e-05f, +9.124578601e-04f, +1.030721596e-03f, +1.051413320e-05f, -1.291661356e-03f, -1.487092493e-03f, -2.349493624e-04f, +1.252584658e-03f, +1.504296605e-03f, +3.907575452e-04f, -8.457661589e-04f, -1.056655927e-03f, -3.304611022e-04f, +3.904257248e-04f, +4.827804113e-04f, +1.436026274e-04f, -1.178256924e-04f, -1.144368746e-04f, -1.343779690e-05f, /* 5, 5 (24) */ -4.590990255e-04f, +1.622796535e-03f, +5.886033120e-03f, +7.674766861e-03f, -3.953240318e-04f, -1.970405504e-02f, -3.688298010e-02f, -2.645146819e-02f, +3.132386605e-02f, +1.291292954e-01f, +2.278205175e-01f, +2.774168525e-01f, +2.506139425e-01f, +1.623139009e-01f, +5.888802553e-02f, -1.382285924e-02f, -3.785034328e-02f, -2.636831023e-02f, -5.515233790e-03f, +6.498322915e-03f, +7.060803480e-03f, +2.834234731e-03f, -1.102385313e-04f, -5.364777032e-04f, -2.178818569e-05f, -1.081683664e-04f, -1.329541876e-04f, +5.868992073e-05f, +4.472696310e-04f, +6.831023958e-04f, +2.614654838e-04f, -9.912733666e-04f, -2.539566192e-03f, -3.334986249e-03f, -2.576636113e-03f, -4.332250200e-04f, +1.953599949e-03f, +3.265443094e-03f, +2.952492044e-03f, +1.538215273e-03f, +8.644712225e-05f, -6.333828494e-04f, -5.717941984e-04f, -1.807142965e-04f, +9.661278677e-05f, +1.322549551e-04f, +4.904241628e-05f, -1.019013767e-05f, -6.033709040e-04f, -4.593594122e-03f, -6.983019879e-03f, +9.242124568e-05f, +1.583237774e-02f, +2.416580800e-02f, +8.069385372e-03f, -2.599026878e-02f, -4.566243245e-02f, -2.458058369e-02f, +2.401685799e-02f, +5.502705362e-02f, +3.780315923e-02f, -1.052073888e-02f, -4.376811848e-02f, -3.544426004e-02f, -1.828587792e-03f, +2.209680786e-02f, +2.025293012e-02f, +4.567782384e-03f, -6.048977889e-03f, -5.900947750e-03f, -1.607960808e-03f, +4.462162234e-04f, +8.239136339e-05f, +1.414509860e-04f, -3.520540164e-05f, -3.978979866e-04f, -4.921886228e-04f, +5.946029444e-05f, +8.923374305e-04f, +1.045210559e-03f, +5.408280882e-05f, -1.261669934e-03f, -1.505610351e-03f, -2.866400026e-04f, +1.219452595e-03f, +1.520976867e-03f, +4.354672150e-04f, -8.193854588e-04f, -1.068059295e-03f, -3.583005186e-04f, +3.763802705e-04f, +4.891011109e-04f, +1.552579119e-04f, -1.139058979e-04f, -1.172626453e-04f, -1.596062272e-05f, /* 5, 6 (24) */ -4.808872112e-04f, +1.514628169e-03f, +5.753078932e-03f, +7.733456782e-03f, +5.194559915e-05f, -1.902095264e-02f, -3.662151461e-02f, -2.744274156e-02f, +2.878429985e-02f, +1.257943092e-01f, +2.252438814e-01f, +2.769836275e-01f, +2.525675425e-01f, +1.655793440e-01f, +6.184051757e-02f, -1.228464397e-02f, -3.776389616e-02f, -2.700169308e-02f, -6.087027988e-03f, +6.317608619e-03f, +7.157416267e-03f, +2.966489686e-03f, -6.119611503e-05f, -5.466678409e-04f, -1.962494726e-05f, -1.055425602e-04f, -1.348310455e-04f, +4.880895984e-05f, +4.348252911e-04f, +6.833294152e-04f, +2.879634007e-04f, -9.429778464e-04f, -2.496804215e-03f, -3.331470676e-03f, -2.625154490e-03f, -5.113921588e-04f, +1.889599587e-03f, +3.249095277e-03f, +2.983937706e-03f, +1.588547642e-03f, +1.229816938e-04f, -6.242447504e-04f, -5.815509554e-04f, -1.928262058e-04f, +9.180557103e-05f, +1.338623287e-04f, +5.177803395e-05f, -9.318296287e-06f, -5.209795406e-04f, -4.452143136e-03f, -7.018225281e-03f, -3.054767409e-04f, +1.534018912e-02f, +2.422526829e-02f, +8.961722803e-03f, -2.494505822e-02f, -4.560834964e-02f, -2.584225363e-02f, +2.251124764e-02f, +5.474041361e-02f, +3.902261183e-02f, -8.999762017e-03f, -4.333265127e-02f, -3.626364550e-02f, -2.896647087e-03f, +2.173850735e-02f, +2.062931039e-02f, +5.056883495e-03f, -5.893719977e-03f, -6.014853648e-03f, -1.725223453e-03f, +4.302556006e-04f, +7.897239447e-05f, +1.423429413e-04f, -2.542905799e-05f, -3.876448820e-04f, -4.984793055e-04f, +3.375059295e-05f, +8.715092103e-04f, +1.058457753e-03f, +9.727502049e-05f, -1.230536590e-03f, -1.522547459e-03f, -3.380194324e-04f, +1.185016751e-03f, +1.536168113e-03f, +4.800191230e-04f, -7.919017969e-04f, -1.078443999e-03f, -3.861484449e-04f, +3.616467182e-04f, +4.949571413e-04f, +1.670102390e-04f, -1.096919351e-04f, -1.199884694e-04f, -1.856573183e-05f, /* 5, 7 (24) */ -5.005121585e-04f, +1.409085608e-03f, +5.618247886e-03f, +7.782265742e-03f, +4.867708903e-04f, -1.833762323e-02f, -3.633355121e-02f, -2.838571941e-02f, +2.628749564e-02f, +1.224628385e-01f, +2.226187269e-01f, +2.764722354e-01f, +2.544571421e-01f, +1.688284393e-01f, +6.482445528e-02f, -1.069609633e-02f, -3.764091446e-02f, -2.762593783e-02f, -6.668578944e-03f, +6.124782413e-03f, +7.249221838e-03f, +3.100352015e-03f, -9.418081089e-06f, -5.559861372e-04f, -1.752145831e-05f, -1.028676561e-04f, -1.364860053e-04f, +3.915649547e-05f, +4.222645286e-04f, +6.829012778e-04f, +3.135809844e-04f, -8.950481981e-04f, -2.453322127e-03f, -3.326363721e-03f, -2.672207845e-03f, -5.892595910e-04f, +1.824513555e-03f, +3.231062568e-03f, +3.014229729e-03f, +1.638838817e-03f, +1.602843179e-04f, -6.142897157e-04f, -5.909720811e-04f, -2.050699399e-04f, +8.673857115e-05f, +1.353477948e-04f, +5.454515320e-05f, -8.383301236e-06f, -4.420071462e-04f, -4.309800195e-03f, -7.043654339e-03f, -6.931216229e-04f, +1.484170981e-02f, +2.425901888e-02f, +9.833232013e-03f, -2.388660047e-02f, -4.551107462e-02f, -2.707279022e-02f, +2.098870018e-02f, +5.440239418e-02f, +4.020762858e-02f, -7.463593904e-03f, -4.285263215e-02f, -3.705554730e-02f, -3.975091086e-03f, +2.135235890e-02f, +2.099095711e-02f, +5.551840636e-03f, -5.726709738e-03f, -6.124545583e-03f, -1.845211923e-03f, +4.116898688e-04f, +7.554274255e-05f, +1.429875171e-04f, -1.588464000e-05f, -3.771457014e-04f, -5.040724819e-04f, +8.403359275e-06f, +8.500055040e-04f, +1.070459747e-03f, +1.400455284e-04f, -1.198300808e-03f, -1.537889400e-03f, -3.890319635e-04f, +1.149312357e-03f, +1.549847868e-03f, +5.243628805e-04f, -7.633368679e-04f, -1.087786960e-03f, -4.139718323e-04f, +3.462320965e-04f, +5.003317867e-04f, +1.788453450e-04f, -1.051823464e-04f, -1.226063853e-04f, -2.125061018e-05f, /* 5, 8 (24) */ -5.180336168e-04f, +1.306217952e-03f, +5.481761881e-03f, +7.821422237e-03f, +9.090354189e-04f, -1.765472195e-02f, -3.601997023e-02f, -2.928076761e-02f, +2.383417351e-02f, +1.191364748e-01f, +2.199465191e-01f, +2.758829758e-01f, +2.562816556e-01f, +1.720595018e-01f, +6.783868500e-02f, -9.057257510e-03f, -3.748063015e-02f, -2.824022754e-02f, -7.259551025e-03f, +5.919712473e-03f, +7.335960409e-03f, +3.235699809e-03f, +4.512707211e-05f, -5.643694384e-04f, -1.547894728e-05f, -1.001488561e-04f, -1.379233787e-04f, +2.973731395e-05f, +4.096030115e-04f, +6.818331277e-04f, +3.383151656e-04f, -8.475119607e-04f, -2.409155584e-03f, -3.319680268e-03f, -2.717774172e-03f, -6.667818348e-04f, +1.758377490e-03f, +3.211345856e-03f, +3.043338124e-03f, +1.689054465e-03f, +1.983407091e-04f, -6.035086308e-04f, -6.000400244e-04f, -2.174354272e-04f, +8.141056717e-05f, +1.367055774e-04f, +5.734064266e-05f, -7.384419649e-06f, -3.664644036e-04f, -4.166812678e-03f, -7.059538979e-03f, -1.070267324e-03f, +1.433763733e-02f, +2.426742224e-02f, +1.068323752e-02f, -2.281614072e-02f, -4.537102909e-02f, -2.827109103e-02f, +1.945081078e-02f, +5.401336222e-02f, +4.135694093e-02f, -5.913746036e-03f, -4.232826927e-02f, -3.781888416e-02f, -5.062878046e-03f, +2.093838707e-02f, +2.133718921e-02f, +6.052172423e-03f, -5.547864393e-03f, -6.229727930e-03f, -1.967818308e-03f, +3.904392586e-04f, +7.210900003e-05f, +1.433906409e-04f, -6.580123046e-06f, -3.664192875e-04f, -5.089732471e-04f, -1.655642461e-05f, +8.278590914e-04f, +1.081214627e-03f, +1.823498829e-04f, -1.165003181e-03f, -1.551623638e-03f, -4.396223536e-04f, +1.112376164e-03f, +1.561995332e-03f, +5.684480574e-04f, -7.337138299e-04f, -1.096066144e-03f, -4.417372537e-04f, +3.301444287e-04f, +5.052086988e-04f, +1.907485539e-04f, -1.003761070e-04f, -1.251084075e-04f, -2.401251095e-05f, /* 5, 9 (24) */ -5.335125640e-04f, +1.206069096e-03f, +5.343838502e-03f, +7.851159551e-03f, +1.318638430e-03f, -1.697288882e-02f, -3.568165506e-02f, -3.012827957e-02f, +2.142501793e-02f, +1.158167945e-01f, +2.172287449e-01f, +2.752161939e-01f, +2.580400331e-01f, +1.752708477e-01f, +7.088202313e-02f, -7.368203045e-03f, -3.728228944e-02f, -2.884373617e-02f, -7.859591049e-03f, +5.702277046e-03f, +7.417370976e-03f, +3.372405387e-03f, +1.024677148e-04f, -5.717538580e-04f, -1.349851325e-05f, -9.739127752e-05f, -1.391476333e-04f, +2.055582931e-05f, +3.968561725e-04f, +6.801404013e-04f, +3.621636444e-04f, -8.003960392e-04f, -2.364340423e-03f, -3.311436227e-03f, -2.761832570e-03f, -7.439136762e-04f, +1.691227835e-03f, +3.189947221e-03f, +3.071233527e-03f, +1.739159940e-03f, +2.371357781e-04f, -5.918929427e-04f, -6.087372151e-04f, -2.299122304e-04f, +7.582062120e-05f, +1.379299107e-04f, +6.016123583e-05f, -6.321002691e-06f, -2.943554036e-04f, -4.023422037e-03f, -7.066119102e-03f, -1.436686612e-03f, +1.382866408e-02f, +2.425086582e-02f, +1.151109661e-02f, -2.173492610e-02f, -4.518867921e-02f, -2.943609421e-02f, +1.789918715e-02f, +5.357373986e-02f, +4.246931710e-02f, -4.351750704e-03f, -4.175982121e-02f, -3.855259799e-02f, -6.158944190e-03f, +2.049664982e-02f, +2.166733363e-02f, +6.557381122e-03f, -5.357115839e-03f, -6.330104037e-03f, -2.092926715e-03f, +3.664267477e-04f, +6.867758676e-05f, +1.435584841e-04f, +2.477041435e-06f, -3.554844497e-04f, -5.131875248e-04f, -4.110459735e-05f, +8.051031809e-04f, +1.090721988e-03f, +2.241444749e-04f, -1.130685353e-03f, -1.563739524e-03f, -4.897358727e-04f, +1.074246403e-03f, +1.572591413e-03f, +6.122242440e-04f, -7.030572853e-04f, -1.103260595e-03f, -4.694109435e-04f, +3.133927363e-04f, +5.095719253e-04f, +2.027047918e-04f, -9.527263564e-05f, -1.274865400e-04f, -2.684845389e-05f, /* 5,10 (24) */ -5.470110773e-04f, +1.108677819e-03f, +5.204690869e-03f, +7.871715380e-03f, +1.715494603e-03f, -1.629274842e-02f, -3.531949142e-02f, -3.092867561e-02f, +1.906067751e-02f, +1.125053583e-01f, +2.144669123e-01f, +2.744722803e-01f, +2.597312610e-01f, +1.784607949e-01f, +7.395325666e-02f, -5.629043106e-03f, -3.704515366e-02f, -2.943562912e-02f, -8.468328264e-03f, +5.472364815e-03f, +7.493191597e-03f, +3.510335297e-03f, +1.626289506e-04f, -5.780748607e-04f, -1.158112765e-05f, -9.459994808e-05f, -1.401633830e-04f, +1.161608603e-05f, +3.840391977e-04f, +6.778388088e-04f, +3.851248826e-04f, -7.537266892e-04f, -2.318912626e-03f, -3.301648517e-03f, -2.804363262e-03f, -8.206102037e-04f, +1.623101807e-03f, +3.166869938e-03f, +3.097887227e-03f, +1.789120310e-03f, +2.766536360e-04f, -5.794346753e-04f, -6.170460803e-04f, -2.424895504e-04f, +6.996808483e-05f, +1.390150473e-04f, +6.300353231e-05f, -5.192488908e-06f, -2.256778168e-04f, -3.879863553e-03f, -7.063642061e-03f, -1.792171061e-03f, +1.331547656e-02f, +2.420976122e-02f, +1.231619979e-02f, -2.064420411e-02f, -4.496453473e-02f, -3.056677956e-02f, +1.633544762e-02f, +5.308400399e-02f, +4.354356350e-02f, -2.779159291e-03f, -4.114759696e-02f, -3.925565528e-02f, -7.262204785e-03f, +2.002723887e-02f, +2.198072637e-02f, +7.066953047e-03f, -5.154411047e-03f, -6.425376672e-03f, -2.220413255e-03f, +3.395782938e-04f, +6.525474269e-05f, +1.434974467e-04f, +1.127992733e-05f, -3.443599368e-04f, -5.167220476e-04f, -6.521784023e-05f, +7.817713627e-04f, +1.098982923e-03f, +2.653865847e-04f, -1.095389966e-03f, -1.574228306e-03f, -5.393183701e-04f, +1.034962741e-03f, +1.581618759e-03f, +6.556411139e-04f, -6.713932608e-04f, -1.109350476e-03f, -4.969588382e-04f, +2.959870397e-04f, +5.134059396e-04f, +2.146986025e-04f, -8.987180462e-05f, -1.297327897e-04f, -2.975522529e-05f, /* 5,11 (24) */ -5.585922049e-04f, +1.014077871e-03f, +5.064527486e-03f, +7.883331466e-03f, +2.099533801e-03f, -1.561490961e-02f, -3.493436653e-02f, -3.168240229e-02f, +1.674176488e-02f, +1.092037097e-01f, +2.116625490e-01f, +2.736516701e-01f, +2.613543628e-01f, +1.816276649e-01f, +7.705114388e-02f, -3.839922796e-03f, -3.676850002e-02f, -3.001506379e-02f, -9.085374345e-03f, +5.229875265e-03f, +7.563159682e-03f, +3.649350345e-03f, +2.256324829e-04f, -5.832673496e-04f, -9.727636212e-06f, -9.177980134e-05f, -1.409753797e-04f, +2.921762272e-06f, +3.711670160e-04f, +6.749443147e-04f, +4.071980952e-04f, -7.075295006e-04f, -2.272908290e-03f, -3.290335041e-03f, -2.845347606e-03f, -8.968268430e-04f, +1.554037374e-03f, +3.142118477e-03f, +3.123271196e-03f, +1.838900386e-03f, +3.168775984e-04f, -5.661264457e-04f, -6.249490622e-04f, -2.551562308e-04f, +6.385260626e-05f, +1.399552660e-04f, +6.586399920e-05f, -3.998407513e-06f, -1.604230741e-04f, -3.736366106e-03f, -7.052362133e-03f, -2.136530998e-03f, +1.279875451e-02f, +2.414454338e-02f, +1.309797115e-02f, -1.954522119e-02f, -4.469914815e-02f, -3.166216953e-02f, +1.476121932e-02f, +5.254468562e-02f, +4.457852624e-02f, -1.197540532e-03f, -4.049195585e-02f, -3.992704854e-02f, -8.371555262e-03f, +1.953028003e-02f, +2.227671341e-02f, +7.580358987e-03f, -4.939712445e-03f, -6.515248477e-03f, -2.350146045e-03f, +3.098230685e-04f, +6.184652097e-05f, +1.432141418e-04f, +1.982213440e-05f, -3.330644120e-04f, -5.195843353e-04f, -8.887369771e-05f, +7.578975610e-04f, +1.106000008e-03f, +3.060344296e-04f, -1.059160601e-03f, -1.583083137e-03f, -5.883163394e-04f, +9.945662332e-04f, +1.589061778e-03f, +6.986484862e-04f, -6.387491843e-04f, -1.114317103e-03f, -5.243466183e-04f, +2.779383579e-04f, +5.166956692e-04f, +2.267141634e-04f, -8.417394930e-05f, -1.318391809e-04f, -3.272937824e-05f, /* 5,12 (24) */ -5.683198412e-04f, +9.222980693e-04f, +4.923552106e-03f, +7.886253229e-03f, +2.470700817e-03f, -1.493996530e-02f, -3.452716844e-02f, -3.238993180e-02f, +1.446885659e-02f, +1.059133747e-01f, +2.088172014e-01f, +2.727548432e-01f, +2.629084001e-01f, +1.847697833e-01f, +8.017441508e-02f, -2.001022409e-03f, -3.645162242e-02f, -3.058119024e-02f, -9.710323407e-03f, +4.974719034e-03f, +7.627012288e-03f, +3.789305611e-03f, +2.914964821e-04f, -5.872657572e-04f, -7.938760954e-06f, -8.893567243e-05f, -1.415885041e-04f, -5.523826643e-06f, +3.582542880e-04f, +6.714731191e-04f, +4.283832414e-04f, -6.618293838e-04f, -2.226363603e-03f, -3.277514674e-03f, -2.884768102e-03f, -9.725193914e-04f, +1.484073222e-03f, +3.115698509e-03f, +3.147358112e-03f, +1.888464744e-03f, +3.577901908e-04f, -5.519614785e-04f, -6.324286353e-04f, -2.679007628e-04f, +5.747413731e-05f, +1.407448797e-04f, +6.873897269e-05f, -2.738381617e-06f, -9.857655316e-05f, -3.593151964e-03f, -7.032539999e-03f, -2.469595410e-03f, +1.227917018e-02f, +2.405566968e-02f, +1.385586871e-02f, -1.843922118e-02f, -4.439311372e-02f, -3.272133013e-02f, +1.317813618e-02f, +5.195636928e-02f, +4.557309248e-02f, +3.915212458e-04f, -3.979330736e-02f, -4.056579772e-02f, -9.485872365e-03f, +1.900593342e-02f, +2.255465177e-02f, +8.097054656e-03f, -4.712998281e-03f, -6.599422426e-03f, -2.481985226e-03f, +2.770936903e-04f, +5.845878150e-05f, +1.427153804e-04f, +2.809778795e-05f, -3.216164267e-04f, -5.217826740e-04f, -1.120505966e-04f, +7.335159874e-04f, +1.111777288e-03f, +3.460472098e-04f, -1.022041725e-03f, -1.590299077e-03f, -6.366769833e-04f, +9.530992759e-04f, +1.594906671e-03f, +7.411963889e-04f, -6.051538604e-04f, -1.118142977e-03f, -5.515397501e-04f, +2.592587068e-04f, +5.194265241e-04f, +2.387353031e-04f, -7.817987704e-05f, -1.337977690e-04f, -3.576723343e-05f, /* 5,13 (24) */ -5.762586021e-04f, +8.333623969e-04f, +4.781963602e-03f, +7.880729402e-03f, +2.828955105e-03f, -1.426849218e-02f, -3.409878520e-02f, -3.305176118e-02f, +1.224249299e-02f, +1.026358600e-01f, +2.059324333e-01f, +2.717823238e-01f, +2.643924734e-01f, +1.878854818e-01f, +8.332177319e-02f, -1.125576648e-04f, -3.609383223e-02f, -3.113315172e-02f, -1.034275204e-02f, +4.706818272e-03f, +7.684486426e-03f, +3.930050491e-03f, +3.602354548e-04f, -5.900041388e-04f, -6.215102370e-06f, -8.607229401e-05f, -1.420077569e-04f, -1.371772433e-05f, +3.453153970e-04f, +6.674416385e-04f, +4.486810147e-04f, -6.166505551e-04f, -2.179314805e-03f, -3.263207237e-03f, -2.922608406e-03f, -1.047644052e-03f, +1.413248730e-03f, +3.087616903e-03f, +3.170121386e-03f, +1.937777756e-03f, +3.993731546e-04f, -5.369336214e-04f, -6.394673241e-04f, -2.807112907e-04f, +5.083294009e-05f, +1.413782434e-04f, +7.162465989e-05f, -1.412131386e-06f, -4.011777165e-05f, -3.450436584e-03f, -7.004442211e-03f, -2.791211837e-03f, +1.175738750e-02f, +2.394361909e-02f, +1.458938470e-02f, -1.732744389e-02f, -4.404706651e-02f, -3.374337185e-02f, +1.158783710e-02f, +5.131969230e-02f, +4.652619175e-02f, +1.986427917e-03f, -3.905211097e-02f, -4.117095158e-02f, -1.060401534e-02f, +1.845439367e-02f, +2.281391047e-02f, +8.616481180e-03f, -4.474262978e-03f, -6.677602303e-03f, -2.615782995e-03f, +2.413264568e-04f, +5.509718502e-05f, +1.420081557e-04f, +3.610153773e-05f, -3.100343958e-04f, -5.233260925e-04f, -1.347278638e-04f, +7.086610936e-04f, +1.116320258e-03f, +3.853851526e-04f, -9.840786261e-04f, -1.595873094e-03f, -6.843482775e-04f, +9.106055562e-04f, +1.599141448e-03f, +7.832351216e-04f, -5.706374440e-04f, -1.120811823e-03f, -5.785035294e-04f, +2.399610962e-04f, +5.215844253e-04f, +2.507455190e-04f, -7.189087556e-05f, -1.356006551e-04f, -3.886488029e-05f, /* 5,14 (24) */ -5.824737045e-04f, +7.472901029e-04f, +4.639955845e-03f, +7.867011678e-03f, +3.174270502e-03f, -1.360105054e-02f, -3.365010418e-02f, -3.366841173e-02f, +1.006317818e-02f, +9.937265279e-02f, +2.030098249e-01f, +2.707346798e-01f, +2.658057221e-01f, +1.909730987e-01f, +8.649189458e-02f, +1.825220092e-03f, -3.569445908e-02f, -3.167008534e-02f, -1.098221937e-02f, +4.426106981e-03f, +7.735319366e-03f, +4.071428734e-03f, +4.318601147e-04f, -5.914162702e-04f, -4.557141719e-06f, -8.319429235e-05f, -1.422382495e-04f, -2.165732913e-05f, +3.323644386e-04f, +6.628664873e-04f, +4.680928325e-04f, -5.720165241e-04f, -2.131798163e-03f, -3.247433479e-03f, -2.958853339e-03f, -1.122157466e-03f, +1.341603939e-03f, +3.057881724e-03f, +3.191535193e-03f, +1.986803616e-03f, +4.416074545e-04f, -5.210373591e-04f, -6.460477211e-04f, -2.935756175e-04f, +4.392959355e-05f, +1.418497630e-04f, +7.451714092e-05f, -1.947713690e-08f, +1.497941336e-05f, -3.308428428e-03f, -6.968340673e-03f, -3.101246233e-03f, +1.123406141e-02f, +2.380889122e-02f, +1.529804579e-02f, -1.621112363e-02f, -4.366168136e-02f, -3.472745048e-02f, +9.991964010e-03f, +5.063534402e-02f, +4.743679731e-02f, +3.585569365e-03f, -3.826887585e-02f, -4.174158903e-02f, -1.172482717e-02f, +1.787589014e-02f, +2.305387157e-02f, +9.138065605e-03f, -4.223517459e-03f, -6.749493179e-03f, -2.751383650e-03f, +2.024615766e-04f, +5.176718757e-05f, +1.410996276e-04f, +4.382855603e-05f, -2.983365736e-04f, -5.242243400e-04f, -1.568857425e-04f, +6.833675242e-04f, +1.119635845e-03f, +4.240095559e-04f, -9.453173597e-04f, -1.599804062e-03f, -7.312790333e-04f, +8.671300005e-04f, +1.601755950e-03f, +8.247153181e-04f, -5.352314117e-04f, -1.122308617e-03f, -6.052031248e-04f, +2.200595253e-04f, +5.231558325e-04f, +2.627279961e-04f, -6.530872059e-05f, -1.372400007e-04f, -4.201817875e-05f, /* 5,15 (24) */ -5.870308462e-04f, +6.640958105e-04f, +4.497717596e-03f, +7.845354349e-03f, +3.506634940e-03f, -1.293818405e-02f, -3.318201135e-02f, -3.424042826e-02f, +7.931380019e-03f, +9.612521931e-02f, +2.000509716e-01f, +2.696125223e-01f, +2.671473260e-01f, +1.940309805e-01f, +8.968342977e-02f, +3.812023708e-03f, -3.525285162e-02f, -3.219112270e-02f, -1.162826709e-02f, +4.132531363e-03f, +7.779248959e-03f, +4.213278497e-03f, +5.063772556e-04f, -5.914357473e-04f, -2.965243435e-06f, -8.030618376e-05f, -1.422851959e-04f, -2.934038961e-05f, +3.194152119e-04f, +6.577644584e-04f, +4.866208258e-04f, -5.279500810e-04f, -2.083849941e-03f, -3.230215052e-03f, -2.993488892e-03f, -1.196016749e-03f, +1.269179521e-03f, +3.026502235e-03f, +3.211574492e-03f, +2.035506370e-03f, +4.844732852e-04f, -5.042678272e-04f, -6.521525049e-04f, -3.064812112e-04f, +3.676499970e-05f, +1.421539031e-04f, +7.741237116e-05f, +1.439657656e-06f, +6.674660094e-05f, -3.167328801e-03f, -6.924512117e-03f, -3.399582806e-03f, +1.070983707e-02f, +2.365200548e-02f, +1.598141332e-02f, -1.509148779e-02f, -4.323767180e-02f, -3.567276784e-02f, +8.392159948e-03f, +4.990406499e-02f, +4.830392731e-02f, +5.187325315e-03f, -3.744416054e-02f, -4.227682044e-02f, -1.284713578e-02f, +1.727068701e-02f, +2.327393110e-02f, +9.661221438e-03f, -3.960789463e-03f, -6.814801899e-03f, -2.888623651e-03f, +1.604433978e-04f, +4.847403558e-05f, +1.399971074e-04f, +5.127453495e-05f, -2.865410298e-04f, -5.244878610e-04f, -1.785054070e-04f, +6.576700703e-04f, +1.121732389e-03f, +4.618828287e-04f, -9.058046859e-04f, -1.602092762e-03f, -7.774189589e-04f, +8.227187204e-04f, +1.602741870e-03f, +8.655880094e-04f, -4.989685310e-04f, -1.122619615e-03f, -6.316036224e-04f, +1.995689762e-04f, +5.241277714e-04f, +2.746656266e-04f, -5.843568295e-05f, -1.387080425e-04f, -4.522276128e-05f, /* 5,16 (24) */ -5.899960896e-04f, +5.837896268e-04f, +4.355432400e-03f, +7.816013959e-03f, +3.826050152e-03f, -1.228041959e-02f, -3.269539052e-02f, -3.476837834e-02f, +5.847530078e-03f, +9.289500426e-02f, +1.970574827e-01f, +2.684165056e-01f, +2.684165056e-01f, +1.970574827e-01f, +9.289500426e-02f, +5.847530078e-03f, -3.476837834e-02f, -3.269539052e-02f, -1.228041959e-02f, +3.826050152e-03f, +7.816013959e-03f, +4.355432400e-03f, +5.837896268e-04f, -5.899960896e-04f, -1.439657656e-06f, -7.741237116e-05f, -1.421539031e-04f, -3.676499970e-05f, +3.064812112e-04f, +6.521525049e-04f, +5.042678272e-04f, -4.844732852e-04f, -2.035506370e-03f, -3.211574492e-03f, -3.026502235e-03f, -1.269179521e-03f, +1.196016749e-03f, +2.993488892e-03f, +3.230215052e-03f, +2.083849941e-03f, +5.279500810e-04f, -4.866208258e-04f, -6.577644584e-04f, -3.194152119e-04f, +2.934038961e-05f, +1.422851959e-04f, +8.030618376e-05f, +2.965243435e-06f, +1.152206365e-04f, -3.027331693e-03f, -6.873237582e-03f, -3.686123836e-03f, +1.018534921e-02f, +2.347350007e-02f, +1.663908339e-02f, -1.396975540e-02f, -4.277578897e-02f, -3.657857253e-02f, +6.790067185e-03f, +4.912664603e-02f, +4.912664603e-02f, +6.790067185e-03f, -3.657857253e-02f, -4.277578897e-02f, -1.396975540e-02f, +1.663908339e-02f, +2.347350007e-02f, +1.018534921e-02f, -3.686123836e-03f, -6.873237582e-03f, -3.027331693e-03f, +1.152206365e-04f, +4.522276128e-05f, +1.387080425e-04f, +5.843568295e-05f, -2.746656266e-04f, -5.241277714e-04f, -1.995689762e-04f, +6.316036224e-04f, +1.122619615e-03f, +4.989685310e-04f, -8.655880094e-04f, -1.602741870e-03f, -8.227187204e-04f, +7.774189589e-04f, +1.602092762e-03f, +9.058046859e-04f, -4.618828287e-04f, -1.121732389e-03f, -6.576700703e-04f, +1.785054070e-04f, +5.244878610e-04f, +2.865410298e-04f, -5.127453495e-05f, -1.399971074e-04f, -4.847403558e-05f, /* 5,17 (24) */ -5.914357473e-04f, +5.063772556e-04f, +4.213278497e-03f, +7.779248959e-03f, +4.132531363e-03f, -1.162826709e-02f, -3.219112270e-02f, -3.525285162e-02f, +3.812023708e-03f, +8.968342977e-02f, +1.940309805e-01f, +2.671473260e-01f, +2.696125223e-01f, +2.000509716e-01f, +9.612521931e-02f, +7.931380019e-03f, -3.424042826e-02f, -3.318201135e-02f, -1.293818405e-02f, +3.506634940e-03f, +7.845354349e-03f, +4.497717596e-03f, +6.640958105e-04f, -5.870308462e-04f, +1.947713690e-08f, -7.451714092e-05f, -1.418497630e-04f, -4.392959355e-05f, +2.935756175e-04f, +6.460477211e-04f, +5.210373591e-04f, -4.416074545e-04f, -1.986803616e-03f, -3.191535193e-03f, -3.057881724e-03f, -1.341603939e-03f, +1.122157466e-03f, +2.958853339e-03f, +3.247433479e-03f, +2.131798163e-03f, +5.720165241e-04f, -4.680928325e-04f, -6.628664873e-04f, -3.323644386e-04f, +2.165732913e-05f, +1.422382495e-04f, +8.319429235e-05f, +4.557141719e-06f, +1.604433978e-04f, -2.888623651e-03f, -6.814801899e-03f, -3.960789463e-03f, +9.661221438e-03f, +2.327393110e-02f, +1.727068701e-02f, -1.284713578e-02f, -4.227682044e-02f, -3.744416054e-02f, +5.187325315e-03f, +4.830392731e-02f, +4.990406499e-02f, +8.392159948e-03f, -3.567276784e-02f, -4.323767180e-02f, -1.509148779e-02f, +1.598141332e-02f, +2.365200548e-02f, +1.070983707e-02f, -3.399582806e-03f, -6.924512117e-03f, -3.167328801e-03f, +6.674660094e-05f, +4.201817875e-05f, +1.372400007e-04f, +6.530872059e-05f, -2.627279961e-04f, -5.231558325e-04f, -2.200595253e-04f, +6.052031248e-04f, +1.122308617e-03f, +5.352314117e-04f, -8.247153181e-04f, -1.601755950e-03f, -8.671300005e-04f, +7.312790333e-04f, +1.599804062e-03f, +9.453173597e-04f, -4.240095559e-04f, -1.119635845e-03f, -6.833675242e-04f, +1.568857425e-04f, +5.242243400e-04f, +2.983365736e-04f, -4.382855603e-05f, -1.410996276e-04f, -5.176718757e-05f, /* 5,18 (24) */ -5.914162702e-04f, +4.318601147e-04f, +4.071428734e-03f, +7.735319366e-03f, +4.426106981e-03f, -1.098221937e-02f, -3.167008534e-02f, -3.569445908e-02f, +1.825220092e-03f, +8.649189458e-02f, +1.909730987e-01f, +2.658057221e-01f, +2.707346798e-01f, +2.030098249e-01f, +9.937265279e-02f, +1.006317818e-02f, -3.366841173e-02f, -3.365010418e-02f, -1.360105054e-02f, +3.174270502e-03f, +7.867011678e-03f, +4.639955845e-03f, +7.472901029e-04f, -5.824737045e-04f, +1.412131386e-06f, -7.162465989e-05f, -1.413782434e-04f, -5.083294009e-05f, +2.807112907e-04f, +6.394673241e-04f, +5.369336214e-04f, -3.993731546e-04f, -1.937777756e-03f, -3.170121386e-03f, -3.087616903e-03f, -1.413248730e-03f, +1.047644052e-03f, +2.922608406e-03f, +3.263207237e-03f, +2.179314805e-03f, +6.166505551e-04f, -4.486810147e-04f, -6.674416385e-04f, -3.453153970e-04f, +1.371772433e-05f, +1.420077569e-04f, +8.607229401e-05f, +6.215102370e-06f, +2.024615766e-04f, -2.751383650e-03f, -6.749493179e-03f, -4.223517459e-03f, +9.138065605e-03f, +2.305387157e-02f, +1.787589014e-02f, -1.172482717e-02f, -4.174158903e-02f, -3.826887585e-02f, +3.585569365e-03f, +4.743679731e-02f, +5.063534402e-02f, +9.991964010e-03f, -3.472745048e-02f, -4.366168136e-02f, -1.621112363e-02f, +1.529804579e-02f, +2.380889122e-02f, +1.123406141e-02f, -3.101246233e-03f, -6.968340673e-03f, -3.308428428e-03f, +1.497941336e-05f, +3.886488029e-05f, +1.356006551e-04f, +7.189087556e-05f, -2.507455190e-04f, -5.215844253e-04f, -2.399610962e-04f, +5.785035294e-04f, +1.120811823e-03f, +5.706374440e-04f, -7.832351216e-04f, -1.599141448e-03f, -9.106055562e-04f, +6.843482775e-04f, +1.595873094e-03f, +9.840786261e-04f, -3.853851526e-04f, -1.116320258e-03f, -7.086610936e-04f, +1.347278638e-04f, +5.233260925e-04f, +3.100343958e-04f, -3.610153773e-05f, -1.420081557e-04f, -5.509718502e-05f, /* 5,19 (24) */ -5.900041388e-04f, +3.602354548e-04f, +3.930050491e-03f, +7.684486426e-03f, +4.706818272e-03f, -1.034275204e-02f, -3.113315172e-02f, -3.609383223e-02f, -1.125576648e-04f, +8.332177319e-02f, +1.878854818e-01f, +2.643924734e-01f, +2.717823238e-01f, +2.059324333e-01f, +1.026358600e-01f, +1.224249299e-02f, -3.305176118e-02f, -3.409878520e-02f, -1.426849218e-02f, +2.828955105e-03f, +7.880729402e-03f, +4.781963602e-03f, +8.333623969e-04f, -5.762586021e-04f, +2.738381617e-06f, -6.873897269e-05f, -1.407448797e-04f, -5.747413731e-05f, +2.679007628e-04f, +6.324286353e-04f, +5.519614785e-04f, -3.577901908e-04f, -1.888464744e-03f, -3.147358112e-03f, -3.115698509e-03f, -1.484073222e-03f, +9.725193914e-04f, +2.884768102e-03f, +3.277514674e-03f, +2.226363603e-03f, +6.618293838e-04f, -4.283832414e-04f, -6.714731191e-04f, -3.582542880e-04f, +5.523826643e-06f, +1.415885041e-04f, +8.893567243e-05f, +7.938760954e-06f, +2.413264568e-04f, -2.615782995e-03f, -6.677602303e-03f, -4.474262978e-03f, +8.616481180e-03f, +2.281391047e-02f, +1.845439367e-02f, -1.060401534e-02f, -4.117095158e-02f, -3.905211097e-02f, +1.986427917e-03f, +4.652619175e-02f, +5.131969230e-02f, +1.158783710e-02f, -3.374337185e-02f, -4.404706651e-02f, -1.732744389e-02f, +1.458938470e-02f, +2.394361909e-02f, +1.175738750e-02f, -2.791211837e-03f, -7.004442211e-03f, -3.450436584e-03f, -4.011777165e-05f, +3.576723343e-05f, +1.337977690e-04f, +7.817987704e-05f, -2.387353031e-04f, -5.194265241e-04f, -2.592587068e-04f, +5.515397501e-04f, +1.118142977e-03f, +6.051538604e-04f, -7.411963889e-04f, -1.594906671e-03f, -9.530992759e-04f, +6.366769833e-04f, +1.590299077e-03f, +1.022041725e-03f, -3.460472098e-04f, -1.111777288e-03f, -7.335159874e-04f, +1.120505966e-04f, +5.217826740e-04f, +3.216164267e-04f, -2.809778795e-05f, -1.427153804e-04f, -5.845878150e-05f, /* 5,20 (24) */ -5.872657572e-04f, +2.914964821e-04f, +3.789305611e-03f, +7.627012288e-03f, +4.974719034e-03f, -9.710323407e-03f, -3.058119024e-02f, -3.645162242e-02f, -2.001022409e-03f, +8.017441508e-02f, +1.847697833e-01f, +2.629084001e-01f, +2.727548432e-01f, +2.088172014e-01f, +1.059133747e-01f, +1.446885659e-02f, -3.238993180e-02f, -3.452716844e-02f, -1.493996530e-02f, +2.470700817e-03f, +7.886253229e-03f, +4.923552106e-03f, +9.222980693e-04f, -5.683198412e-04f, +3.998407513e-06f, -6.586399920e-05f, -1.399552660e-04f, -6.385260626e-05f, +2.551562308e-04f, +6.249490622e-04f, +5.661264457e-04f, -3.168775984e-04f, -1.838900386e-03f, -3.123271196e-03f, -3.142118477e-03f, -1.554037374e-03f, +8.968268430e-04f, +2.845347606e-03f, +3.290335041e-03f, +2.272908290e-03f, +7.075295006e-04f, -4.071980952e-04f, -6.749443147e-04f, -3.711670160e-04f, -2.921762272e-06f, +1.409753797e-04f, +9.177980134e-05f, +9.727636212e-06f, +2.770936903e-04f, -2.481985226e-03f, -6.599422426e-03f, -4.712998281e-03f, +8.097054656e-03f, +2.255465177e-02f, +1.900593342e-02f, -9.485872365e-03f, -4.056579772e-02f, -3.979330736e-02f, +3.915212458e-04f, +4.557309248e-02f, +5.195636928e-02f, +1.317813618e-02f, -3.272133013e-02f, -4.439311372e-02f, -1.843922118e-02f, +1.385586871e-02f, +2.405566968e-02f, +1.227917018e-02f, -2.469595410e-03f, -7.032539999e-03f, -3.593151964e-03f, -9.857655316e-05f, +3.272937824e-05f, +1.318391809e-04f, +8.417394930e-05f, -2.267141634e-04f, -5.166956692e-04f, -2.779383579e-04f, +5.243466183e-04f, +1.114317103e-03f, +6.387491843e-04f, -6.986484862e-04f, -1.589061778e-03f, -9.945662332e-04f, +5.883163394e-04f, +1.583083137e-03f, +1.059160601e-03f, -3.060344296e-04f, -1.106000008e-03f, -7.578975610e-04f, +8.887369771e-05f, +5.195843353e-04f, +3.330644120e-04f, -1.982213440e-05f, -1.432141418e-04f, -6.184652097e-05f, /* 5,21 (24) */ -5.832673496e-04f, +2.256324829e-04f, +3.649350345e-03f, +7.563159682e-03f, +5.229875265e-03f, -9.085374345e-03f, -3.001506379e-02f, -3.676850002e-02f, -3.839922796e-03f, +7.705114388e-02f, +1.816276649e-01f, +2.613543628e-01f, +2.736516701e-01f, +2.116625490e-01f, +1.092037097e-01f, +1.674176488e-02f, -3.168240229e-02f, -3.493436653e-02f, -1.561490961e-02f, +2.099533801e-03f, +7.883331466e-03f, +5.064527486e-03f, +1.014077871e-03f, -5.585922049e-04f, +5.192488908e-06f, -6.300353231e-05f, -1.390150473e-04f, -6.996808483e-05f, +2.424895504e-04f, +6.170460803e-04f, +5.794346753e-04f, -2.766536360e-04f, -1.789120310e-03f, -3.097887227e-03f, -3.166869938e-03f, -1.623101807e-03f, +8.206102037e-04f, +2.804363262e-03f, +3.301648517e-03f, +2.318912626e-03f, +7.537266892e-04f, -3.851248826e-04f, -6.778388088e-04f, -3.840391977e-04f, -1.161608603e-05f, +1.401633830e-04f, +9.459994808e-05f, +1.158112765e-05f, +3.098230685e-04f, -2.350146045e-03f, -6.515248477e-03f, -4.939712445e-03f, +7.580358987e-03f, +2.227671341e-02f, +1.953028003e-02f, -8.371555262e-03f, -3.992704854e-02f, -4.049195585e-02f, -1.197540532e-03f, +4.457852624e-02f, +5.254468562e-02f, +1.476121932e-02f, -3.166216953e-02f, -4.469914815e-02f, -1.954522119e-02f, +1.309797115e-02f, +2.414454338e-02f, +1.279875451e-02f, -2.136530998e-03f, -7.052362133e-03f, -3.736366106e-03f, -1.604230741e-04f, +2.975522529e-05f, +1.297327897e-04f, +8.987180462e-05f, -2.146986025e-04f, -5.134059396e-04f, -2.959870397e-04f, +4.969588382e-04f, +1.109350476e-03f, +6.713932608e-04f, -6.556411139e-04f, -1.581618759e-03f, -1.034962741e-03f, +5.393183701e-04f, +1.574228306e-03f, +1.095389966e-03f, -2.653865847e-04f, -1.098982923e-03f, -7.817713627e-04f, +6.521784023e-05f, +5.167220476e-04f, +3.443599368e-04f, -1.127992733e-05f, -1.434974467e-04f, -6.525474269e-05f, /* 5,22 (24) */ -5.780748607e-04f, +1.626289506e-04f, +3.510335297e-03f, +7.493191597e-03f, +5.472364815e-03f, -8.468328264e-03f, -2.943562912e-02f, -3.704515366e-02f, -5.629043106e-03f, +7.395325666e-02f, +1.784607949e-01f, +2.597312610e-01f, +2.744722803e-01f, +2.144669123e-01f, +1.125053583e-01f, +1.906067751e-02f, -3.092867561e-02f, -3.531949142e-02f, -1.629274842e-02f, +1.715494603e-03f, +7.871715380e-03f, +5.204690869e-03f, +1.108677819e-03f, -5.470110773e-04f, +6.321002691e-06f, -6.016123583e-05f, -1.379299107e-04f, -7.582062120e-05f, +2.299122304e-04f, +6.087372151e-04f, +5.918929427e-04f, -2.371357781e-04f, -1.739159940e-03f, -3.071233527e-03f, -3.189947221e-03f, -1.691227835e-03f, +7.439136762e-04f, +2.761832570e-03f, +3.311436227e-03f, +2.364340423e-03f, +8.003960392e-04f, -3.621636444e-04f, -6.801404013e-04f, -3.968561725e-04f, -2.055582931e-05f, +1.391476333e-04f, +9.739127752e-05f, +1.349851325e-05f, +3.395782938e-04f, -2.220413255e-03f, -6.425376672e-03f, -5.154411047e-03f, +7.066953047e-03f, +2.198072637e-02f, +2.002723887e-02f, -7.262204785e-03f, -3.925565528e-02f, -4.114759696e-02f, -2.779159291e-03f, +4.354356350e-02f, +5.308400399e-02f, +1.633544762e-02f, -3.056677956e-02f, -4.496453473e-02f, -2.064420411e-02f, +1.231619979e-02f, +2.420976122e-02f, +1.331547656e-02f, -1.792171061e-03f, -7.063642061e-03f, -3.879863553e-03f, -2.256778168e-04f, +2.684845389e-05f, +1.274865400e-04f, +9.527263564e-05f, -2.027047918e-04f, -5.095719253e-04f, -3.133927363e-04f, +4.694109435e-04f, +1.103260595e-03f, +7.030572853e-04f, -6.122242440e-04f, -1.572591413e-03f, -1.074246403e-03f, +4.897358727e-04f, +1.563739524e-03f, +1.130685353e-03f, -2.241444749e-04f, -1.090721988e-03f, -8.051031809e-04f, +4.110459735e-05f, +5.131875248e-04f, +3.554844497e-04f, -2.477041435e-06f, -1.435584841e-04f, -6.867758676e-05f, /* 5,23 (24) */ -5.717538580e-04f, +1.024677148e-04f, +3.372405387e-03f, +7.417370976e-03f, +5.702277046e-03f, -7.859591049e-03f, -2.884373617e-02f, -3.728228944e-02f, -7.368203045e-03f, +7.088202313e-02f, +1.752708477e-01f, +2.580400331e-01f, +2.752161939e-01f, +2.172287449e-01f, +1.158167945e-01f, +2.142501793e-02f, -3.012827957e-02f, -3.568165506e-02f, -1.697288882e-02f, +1.318638430e-03f, +7.851159551e-03f, +5.343838502e-03f, +1.206069096e-03f, -5.335125640e-04f, +7.384419649e-06f, -5.734064266e-05f, -1.367055774e-04f, -8.141056717e-05f, +2.174354272e-04f, +6.000400244e-04f, +6.035086308e-04f, -1.983407091e-04f, -1.689054465e-03f, -3.043338124e-03f, -3.211345856e-03f, -1.758377490e-03f, +6.667818348e-04f, +2.717774172e-03f, +3.319680268e-03f, +2.409155584e-03f, +8.475119607e-04f, -3.383151656e-04f, -6.818331277e-04f, -4.096030115e-04f, -2.973731395e-05f, +1.379233787e-04f, +1.001488561e-04f, +1.547894728e-05f, +3.664267477e-04f, -2.092926715e-03f, -6.330104037e-03f, -5.357115839e-03f, +6.557381122e-03f, +2.166733363e-02f, +2.049664982e-02f, -6.158944190e-03f, -3.855259799e-02f, -4.175982121e-02f, -4.351750704e-03f, +4.246931710e-02f, +5.357373986e-02f, +1.789918715e-02f, -2.943609421e-02f, -4.518867921e-02f, -2.173492610e-02f, +1.151109661e-02f, +2.425086582e-02f, +1.382866408e-02f, -1.436686612e-03f, -7.066119102e-03f, -4.023422037e-03f, -2.943554036e-04f, +2.401251095e-05f, +1.251084075e-04f, +1.003761070e-04f, -1.907485539e-04f, -5.052086988e-04f, -3.301444287e-04f, +4.417372537e-04f, +1.096066144e-03f, +7.337138299e-04f, -5.684480574e-04f, -1.561995332e-03f, -1.112376164e-03f, +4.396223536e-04f, +1.551623638e-03f, +1.165003181e-03f, -1.823498829e-04f, -1.081214627e-03f, -8.278590914e-04f, +1.655642461e-05f, +5.089732471e-04f, +3.664192875e-04f, +6.580123046e-06f, -1.433906409e-04f, -7.210900003e-05f, /* 5,24 (24) */ -5.643694384e-04f, +4.512707211e-05f, +3.235699809e-03f, +7.335960409e-03f, +5.919712473e-03f, -7.259551025e-03f, -2.824022754e-02f, -3.748063015e-02f, -9.057257510e-03f, +6.783868500e-02f, +1.720595018e-01f, +2.562816556e-01f, +2.758829758e-01f, +2.199465191e-01f, +1.191364748e-01f, +2.383417351e-02f, -2.928076761e-02f, -3.601997023e-02f, -1.765472195e-02f, +9.090354189e-04f, +7.821422237e-03f, +5.481761881e-03f, +1.306217952e-03f, -5.180336168e-04f, +8.383301236e-06f, -5.454515320e-05f, -1.353477948e-04f, -8.673857115e-05f, +2.050699399e-04f, +5.909720811e-04f, +6.142897157e-04f, -1.602843179e-04f, -1.638838817e-03f, -3.014229729e-03f, -3.231062568e-03f, -1.824513555e-03f, +5.892595910e-04f, +2.672207845e-03f, +3.326363721e-03f, +2.453322127e-03f, +8.950481981e-04f, -3.135809844e-04f, -6.829012778e-04f, -4.222645286e-04f, -3.915649547e-05f, +1.364860053e-04f, +1.028676561e-04f, +1.752145831e-05f, +3.904392586e-04f, -1.967818308e-03f, -6.229727930e-03f, -5.547864393e-03f, +6.052172423e-03f, +2.133718921e-02f, +2.093838707e-02f, -5.062878046e-03f, -3.781888416e-02f, -4.232826927e-02f, -5.913746036e-03f, +4.135694093e-02f, +5.401336222e-02f, +1.945081078e-02f, -2.827109103e-02f, -4.537102909e-02f, -2.281614072e-02f, +1.068323752e-02f, +2.426742224e-02f, +1.433763733e-02f, -1.070267324e-03f, -7.059538979e-03f, -4.166812678e-03f, -3.664644036e-04f, +2.125061018e-05f, +1.226063853e-04f, +1.051823464e-04f, -1.788453450e-04f, -5.003317867e-04f, -3.462320965e-04f, +4.139718323e-04f, +1.087786960e-03f, +7.633368679e-04f, -5.243628805e-04f, -1.549847868e-03f, -1.149312357e-03f, +3.890319635e-04f, +1.537889400e-03f, +1.198300808e-03f, -1.400455284e-04f, -1.070459747e-03f, -8.500055040e-04f, -8.403359275e-06f, +5.040724819e-04f, +3.771457014e-04f, +1.588464000e-05f, -1.429875171e-04f, -7.554274255e-05f, /* 5,25 (24) */ -5.559861372e-04f, -9.418081089e-06f, +3.100352015e-03f, +7.249221838e-03f, +6.124782413e-03f, -6.668578944e-03f, -2.762593783e-02f, -3.764091446e-02f, -1.069609633e-02f, +6.482445528e-02f, +1.688284393e-01f, +2.544571421e-01f, +2.764722354e-01f, +2.226187269e-01f, +1.224628385e-01f, +2.628749564e-02f, -2.838571941e-02f, -3.633355121e-02f, -1.833762323e-02f, +4.867708903e-04f, +7.782265742e-03f, +5.618247886e-03f, +1.409085608e-03f, -5.005121585e-04f, +9.318296287e-06f, -5.177803395e-05f, -1.338623287e-04f, -9.180557103e-05f, +1.928262058e-04f, +5.815509554e-04f, +6.242447504e-04f, -1.229816938e-04f, -1.588547642e-03f, -2.983937706e-03f, -3.249095277e-03f, -1.889599587e-03f, +5.113921588e-04f, +2.625154490e-03f, +3.331470676e-03f, +2.496804215e-03f, +9.429778464e-04f, -2.879634007e-04f, -6.833294152e-04f, -4.348252911e-04f, -4.880895984e-05f, +1.348310455e-04f, +1.055425602e-04f, +1.962494726e-05f, +4.116898688e-04f, -1.845211923e-03f, -6.124545583e-03f, -5.726709738e-03f, +5.551840636e-03f, +2.099095711e-02f, +2.135235890e-02f, -3.975091086e-03f, -3.705554730e-02f, -4.285263215e-02f, -7.463593904e-03f, +4.020762858e-02f, +5.440239418e-02f, +2.098870018e-02f, -2.707279022e-02f, -4.551107462e-02f, -2.388660047e-02f, +9.833232013e-03f, +2.425901888e-02f, +1.484170981e-02f, -6.931216229e-04f, -7.043654339e-03f, -4.309800195e-03f, -4.420071462e-04f, +1.856573183e-05f, +1.199884694e-04f, +1.096919351e-04f, -1.670102390e-04f, -4.949571413e-04f, -3.616467182e-04f, +3.861484449e-04f, +1.078443999e-03f, +7.919017969e-04f, -4.800191230e-04f, -1.536168113e-03f, -1.185016751e-03f, +3.380194324e-04f, +1.522547459e-03f, +1.230536590e-03f, -9.727502049e-05f, -1.058457753e-03f, -8.715092103e-04f, -3.375059295e-05f, +4.984793055e-04f, +3.876448820e-04f, +2.542905799e-05f, -1.423429413e-04f, -7.897239447e-05f, /* 5,26 (24) */ -5.466678409e-04f, -6.119611503e-05f, +2.966489686e-03f, +7.157416267e-03f, +6.317608619e-03f, -6.087027988e-03f, -2.700169308e-02f, -3.776389616e-02f, -1.228464397e-02f, +6.184051757e-02f, +1.655793440e-01f, +2.525675425e-01f, +2.769836275e-01f, +2.252438814e-01f, +1.257943092e-01f, +2.878429985e-02f, -2.744274156e-02f, -3.662151461e-02f, -1.902095264e-02f, +5.194559915e-05f, +7.733456782e-03f, +5.753078932e-03f, +1.514628169e-03f, -4.808872112e-04f, +1.019013767e-05f, -4.904241628e-05f, -1.322549551e-04f, -9.661278677e-05f, +1.807142965e-04f, +5.717941984e-04f, +6.333828494e-04f, -8.644712225e-05f, -1.538215273e-03f, -2.952492044e-03f, -3.265443094e-03f, -1.953599949e-03f, +4.332250200e-04f, +2.576636113e-03f, +3.334986249e-03f, +2.539566192e-03f, +9.912733666e-04f, -2.614654838e-04f, -6.831023958e-04f, -4.472696310e-04f, -5.868992073e-05f, +1.329541876e-04f, +1.081683664e-04f, +2.178818569e-05f, +4.302556006e-04f, -1.725223453e-03f, -6.014853648e-03f, -5.893719977e-03f, +5.056883495e-03f, +2.062931039e-02f, +2.173850735e-02f, -2.896647087e-03f, -3.626364550e-02f, -4.333265127e-02f, -8.999762017e-03f, +3.902261183e-02f, +5.474041361e-02f, +2.251124764e-02f, -2.584225363e-02f, -4.560834964e-02f, -2.494505822e-02f, +8.961722803e-03f, +2.422526829e-02f, +1.534018912e-02f, -3.054767409e-04f, -7.018225281e-03f, -4.452143136e-03f, -5.209795406e-04f, +1.596062272e-05f, +1.172626453e-04f, +1.139058979e-04f, -1.552579119e-04f, -4.891011109e-04f, -3.763802705e-04f, +3.583005186e-04f, +1.068059295e-03f, +8.193854588e-04f, -4.354672150e-04f, -1.520976867e-03f, -1.219452595e-03f, +2.866400026e-04f, +1.505610351e-03f, +1.261669934e-03f, -5.408280882e-05f, -1.045210559e-03f, -8.923374305e-04f, -5.946029444e-05f, +4.921886228e-04f, +3.978979866e-04f, +3.520540164e-05f, -1.414509860e-04f, -8.239136339e-05f, /* 5,27 (24) */ -5.364777032e-04f, -1.102385313e-04f, +2.834234731e-03f, +7.060803480e-03f, +6.498322915e-03f, -5.515233790e-03f, -2.636831023e-02f, -3.785034328e-02f, -1.382285924e-02f, +5.888802553e-02f, +1.623139009e-01f, +2.506139425e-01f, +2.774168525e-01f, +2.278205175e-01f, +1.291292954e-01f, +3.132386605e-02f, -2.645146819e-02f, -3.688298010e-02f, -1.970405504e-02f, -3.953240318e-04f, +7.674766861e-03f, +5.886033120e-03f, +1.622796535e-03f, -4.590990255e-04f, +1.099963891e-05f, -4.634129554e-05f, -1.305314530e-04f, -1.011617129e-04f, +1.687439147e-04f, +5.617193249e-04f, +6.417136720e-04f, -5.069408217e-05f, -1.487875705e-03f, -2.919923330e-03f, -3.280106316e-03f, -2.016479832e-03f, +3.548038886e-04f, +2.526675818e-03f, +3.336896596e-03f, +2.581572607e-03f, +1.039906603e-03f, -2.340910800e-04f, -6.822053868e-04f, -4.595816567e-04f, -6.879421704e-05f, +1.308512845e-04f, +1.107397924e-04f, +2.400981416e-05f, +4.462162234e-04f, -1.607960808e-03f, -5.900947750e-03f, -6.048977889e-03f, +4.567782384e-03f, +2.025293012e-02f, +2.209680786e-02f, -1.828587792e-03f, -3.544426004e-02f, -4.376811848e-02f, -1.052073888e-02f, +3.780315923e-02f, +5.502705362e-02f, +2.401685799e-02f, -2.458058369e-02f, -4.566243245e-02f, -2.599026878e-02f, +8.069385372e-03f, +2.416580800e-02f, +1.583237774e-02f, +9.242124568e-05f, -6.983019879e-03f, -4.593594122e-03f, -6.033709040e-04f, +1.343779690e-05f, +1.144368746e-04f, +1.178256924e-04f, -1.436026274e-04f, -4.827804113e-04f, -3.904257248e-04f, +3.304611022e-04f, +1.056655927e-03f, +8.457661589e-04f, -3.907575452e-04f, -1.504296605e-03f, -1.252584658e-03f, +2.349493624e-04f, +1.487092493e-03f, +1.291661356e-03f, -1.051413320e-05f, -1.030721596e-03f, -9.124578601e-04f, -8.550668452e-05f, +4.851961862e-04f, +4.078861655e-04f, +4.520517385e-05f, -1.403059826e-04f, -8.579289225e-05f, /* 5,28 (24) */ -5.254780643e-04f, -1.565798269e-04f, +2.703703278e-03f, +6.959641767e-03f, +6.667066830e-03f, -4.953514465e-03f, -2.572659656e-02f, -3.790103736e-02f, -1.531073495e-02f, +5.596810220e-02f, +1.590337946e-01f, +2.485974627e-01f, +2.777716564e-01f, +2.303471933e-01f, +1.324661920e-01f, +3.390543865e-02f, -2.541156159e-02f, -3.711707118e-02f, -2.038626042e-02f, -8.549056885e-04f, +7.605972644e-03f, +6.016884404e-03f, +1.733536327e-03f, -4.350892113e-04f, +1.174769073e-05f, -4.367753023e-05f, -1.286975968e-04f, -1.054541107e-04f, +1.569243904e-04f, +5.513437972e-04f, +6.492474063e-04f, -1.573524375e-05f, -1.437562572e-03f, -2.886262718e-03f, -3.293086424e-03f, -2.078205281e-03f, +2.761746757e-04f, +2.475297788e-03f, +3.337188933e-03f, +2.622788251e-03f, +1.088848800e-03f, -2.058448186e-04f, -6.806238860e-04f, -4.717452654e-04f, -7.911631081e-05f, +1.285183626e-04f, +1.132514817e-04f, +2.628834081e-05f, +4.596540203e-04f, -1.493523933e-03f, -5.783122058e-03f, -6.192580516e-03f, +4.085001973e-03f, +1.986250440e-02f, +2.242726897e-02f, -7.719318653e-04f, -3.459849388e-02f, -4.415887603e-02f, -1.202503549e-02f, +3.655057457e-02f, +5.526200298e-02f, +2.550395049e-02f, -2.328892234e-02f, -4.567294658e-02f, -2.702099038e-02f, +7.156927512e-03f, +2.408030131e-02f, +1.631757393e-02f, +5.003074112e-04f, -6.937814706e-03f, -4.733900105e-03f, -6.891637963e-04f, +1.099953653e-05f, +1.115190818e-04f, +1.214531979e-04f, -1.320582228e-04f, -4.760120962e-04f, -4.037770445e-04f, +3.026628272e-04f, +1.044257977e-03f, +8.710236820e-04f, -3.459403981e-04f, -1.486151448e-03f, -1.284379276e-03f, +1.830035781e-04f, +1.467010163e-03f, +1.320472530e-03f, +3.338502793e-05f, -1.014995825e-03f, -9.318387172e-04f, -1.118632115e-04f, +4.774986143e-04f, +4.175905900e-04f, +5.541935889e-05f, -1.389025366e-04f, -8.917006763e-05f, /* 5,29 (24) */ -5.137303736e-04f, -2.002573571e-04f, +2.575005681e-03f, +6.854187656e-03f, +6.823991220e-03f, -4.402170668e-03f, -2.507734915e-02f, -3.791677261e-02f, -1.674829752e-02f, +5.308183948e-02f, +1.557407082e-01f, +2.465192574e-01f, +2.780478311e-01f, +2.328224911e-01f, +1.358033809e-01f, +3.652822691e-02f, -2.432271279e-02f, -3.732291599e-02f, -2.106688431e-02f, -1.326650954e-03f, +7.526856333e-03f, +6.145402767e-03f, +1.846787809e-03f, -4.088008705e-04f, +1.243525760e-05f, -4.105384145e-05f, -1.267591490e-04f, -1.094920003e-04f, +1.452646791e-04f, +5.406850090e-04f, +6.559947516e-04f, +1.841753301e-05f, -1.387309121e-03f, -2.851541903e-03f, -3.304386071e-03f, -2.138743223e-03f, +1.973834540e-04f, +2.422527267e-03f, +3.335851552e-03f, +2.663178182e-03f, +1.138070623e-03f, -1.767321185e-04f, -6.783437400e-04f, -4.837441552e-04f, -8.965028562e-05f, +1.259516305e-04f, +1.156980079e-04f, +2.862214005e-05f, +4.706535568e-04f, -1.382004851e-03f, -5.661668860e-03f, -6.324638739e-03f, +3.608989877e-03f, +1.945872735e-02f, +2.272993179e-02f, +2.723261116e-04f, -3.372747020e-02f, -4.450481643e-02f, -1.351118694e-02f, +3.526619530e-02f, +5.544500656e-02f, +2.697096065e-02f, -2.196844981e-02f, -4.563956155e-02f, -2.803598620e-02f, +6.225088795e-03f, +2.396843810e-02f, +1.679507254e-02f, +9.178980012e-04f, -6.882395347e-03f, -4.872802642e-03f, -7.783338639e-04f, +8.647893339e-06f, +1.085171417e-04f, +1.247907041e-04f, -1.206380968e-04f, -4.688135280e-04f, -4.164291790e-04f, +2.749378696e-04f, +1.030890490e-03f, +8.951393075e-04f, -3.010658936e-04f, -1.466567125e-03f, -1.314804383e-03f, +1.308590259e-04f, +1.445381490e-03f, +1.348066343e-03f, +7.756801037e-05f, -9.980397348e-04f, -9.504487886e-04f, -1.385025771e-04f, +4.690934086e-04f, +4.269924794e-04f, +6.583842639e-05f, -1.372355424e-04f, -9.251582846e-05f, /* 5,30 (24) */ -5.012951160e-04f, -2.413111985e-04f, +2.448246532e-03f, +6.744695656e-03f, +6.969255899e-03f, -3.861485659e-03f, -2.442135440e-02f, -3.789835507e-02f, -1.813560664e-02f, +5.023029758e-02f, +1.524363221e-01f, +2.443805142e-01f, +2.782452146e-01f, +2.352450184e-01f, +1.391392325e-01f, +3.919140509e-02f, -2.318464217e-02f, -3.749964811e-02f, -2.174522805e-02f, -1.810395109e-03f, +7.437206048e-03f, +6.271354397e-03f, +1.962485817e-03f, -3.801787305e-04f, +1.306337424e-05f, -3.847281259e-05f, -1.247218530e-04f, -1.132776529e-04f, +1.337733593e-04f, +5.297602692e-04f, +6.619669015e-04f, +5.175319886e-05f, -1.337148185e-03f, -2.815793091e-03f, -3.314009081e-03f, -2.198061489e-03f, +1.184764218e-04f, +2.368390551e-03f, +3.332873833e-03f, +2.702707759e-03f, +1.187542172e-03f, -1.467591928e-04f, -6.753511633e-04f, -4.955618386e-04f, -1.003898453e-04f, +1.231474882e-04f, +1.180738813e-04f, +3.100945145e-05f, +4.793014501e-04f, -1.273487710e-03f, -5.536878156e-03f, -6.445276836e-03f, +3.140176349e-03f, +1.904229817e-02f, +2.300486966e-02f, +1.303216601e-03f, -3.283233089e-02f, -4.480588232e-02f, -1.497775406e-02f, +3.395139091e-02f, +5.557586558e-02f, +2.841634214e-02f, -2.062038347e-02f, -4.556199354e-02f, -2.903402594e-02f, +5.274640006e-03f, +2.382993552e-02f, +1.726416595e-02f, +1.344890481e-03f, -6.816556920e-03f, -5.010038184e-03f, -8.708496923e-04f, +6.384690347e-06f, +1.054388668e-04f, +1.278408987e-04f, -1.093551967e-04f, -4.612023484e-04f, -4.283780575e-04f, +2.473179135e-04f, +1.016579433e-03f, +9.180958213e-04f, -2.561839252e-04f, -1.445570939e-03f, -1.343829552e-03f, +7.857232390e-05f, +1.422226433e-03f, +1.374406946e-03f, +1.219875182e-04f, -9.798613549e-04f, -9.682574761e-04f, -1.653967645e-04f, +4.599789698e-04f, +4.360731296e-04f, +7.645233616e-05f, -1.353001982e-04f, -9.582297529e-05f, /* 5,31 (24) */ -4.882317417e-04f, -2.797840111e-04f, +2.323524679e-03f, +6.631418003e-03f, +7.103029259e-03f, -3.331725390e-03f, -2.375938750e-02f, -3.784660187e-02f, -1.947275482e-02f, +4.741450448e-02f, +1.491223130e-01f, +2.421824527e-01f, +2.783636910e-01f, +2.376134089e-01f, +1.424721063e-01f, +4.189411285e-02f, -2.199710000e-02f, -3.764640731e-02f, -2.242057921e-02f, -2.305956948e-03f, +7.336816202e-03f, +6.394501885e-03f, +2.080559698e-03f, -3.491692790e-04f, +1.363314209e-05f, -3.593688915e-05f, -1.225914265e-04f, -1.168135820e-04f, +1.224586306e-04f, +5.185867868e-04f, +6.671755267e-04f, +8.426151525e-05f, -1.287112166e-03f, -2.779048968e-03f, -3.321960433e-03f, -2.256128833e-03f, +3.949986729e-05f, +2.312914962e-03f, +3.328246260e-03f, +2.741342671e-03f, +1.237233007e-03f, -1.159330534e-04f, -6.716327570e-04f, -5.071816554e-04f, -1.113283129e-04f, +1.201025358e-04f, +1.203735541e-04f, +3.344837876e-05f, +4.856861405e-04f, -1.168048843e-03f, -5.409037257e-03f, -6.554632032e-03f, +2.678974000e-03f, +1.861392011e-02f, +2.325218758e-02f, +2.319796034e-03f, -3.191423507e-02f, -4.506206625e-02f, -1.642332500e-02f, +3.260756136e-02f, +5.565443791e-02f, +2.983856857e-02f, -1.924597652e-02f, -4.544000602e-02f, -3.001388729e-02f, +4.306382530e-03f, +2.366453876e-02f, +1.772414492e-02f, +1.780963610e-03f, -6.740104584e-03f, -5.145338382e-03f, -9.666726676e-04f, +4.211524069e-06f, +1.022919954e-04f, +1.306068552e-04f, -9.822200801e-05f, -4.531964488e-04f, -4.396205809e-04f, +2.198341146e-04f, +1.001351655e-03f, +9.398775262e-04f, -2.113441000e-04f, -1.423191721e-03f, -1.371426028e-03f, +2.620026282e-05f, +1.397566761e-03f, +1.399459798e-03f, +1.665956790e-04f, -9.604702507e-04f, -9.852348420e-04f, -1.925170661e-04f, +4.501546129e-04f, +4.448139414e-04f, +8.725054394e-05f, -1.330920197e-04f, -9.908417991e-05f, /* 6, 0 (24) */ -1.381477748e-03f, -3.077497149e-03f, -1.382496192e-04f, +9.451265441e-03f, +1.536116093e-02f, +3.798097220e-04f, -3.444119267e-02f, -5.173422453e-02f, -6.379548291e-04f, +1.279538359e-01f, +2.711624592e-01f, +3.340838290e-01f, +2.711624592e-01f, +1.279538359e-01f, -6.379548291e-04f, -5.173422453e-02f, -3.444119267e-02f, +3.798097220e-04f, +1.536116093e-02f, +9.451265441e-03f, -1.382496192e-04f, -3.077497149e-03f, -1.381477748e-03f, +1.529906491e-05f, +6.563580115e-05f, +1.271846563e-05f, -2.073530798e-04f, -3.334856284e-04f, +5.702704247e-05f, +8.641498231e-04f, +1.101167895e-03f, -2.767627563e-04f, -2.907938350e-03f, -4.727706059e-03f, -3.710481723e-03f, -6.570013011e-05f, +3.627554861e-03f, +4.745152154e-03f, +2.990393068e-03f, +3.472346398e-04f, -1.085613170e-03f, -8.870096413e-04f, -7.896620590e-05f, +3.307378182e-04f, +2.150355900e-04f, -8.015428714e-06f, -6.635510628e-05f, -1.784466616e-05f, +1.381477748e-03f, +3.077497149e-03f, -1.905329511e-03f, -9.009890737e-03f, -5.096548909e-03f, +1.240770844e-02f, +2.062426252e-02f, -2.077574300e-04f, -2.908566530e-02f, -2.444344784e-02f, +1.424658180e-02f, +3.770038936e-02f, +1.424658180e-02f, -2.444344784e-02f, -2.908566530e-02f, -2.077574300e-04f, +2.062426252e-02f, +1.240770844e-02f, -5.096548909e-03f, -9.009890737e-03f, -1.905329511e-03f, +2.574664269e-03f, +1.381477748e-03f, -1.529906491e-05f, -6.563580115e-05f, -1.271846563e-05f, +2.339013135e-04f, +1.286753269e-04f, -3.844162184e-04f, -5.688768839e-04f, +1.643669824e-04f, +9.949917205e-04f, +5.645336545e-04f, -8.271109120e-04f, -1.277873593e-03f, -2.614726878e-05f, +1.261262345e-03f, +8.655401410e-04f, -5.277248058e-04f, -1.005173835e-03f, -1.968738343e-04f, +5.597509504e-04f, +4.003935711e-04f, -1.169654343e-04f, -2.376998145e-04f, -3.444877766e-05f, +6.635510628e-05f, +1.784466616e-05f, /* 6, 1 (24) */ -1.315841947e-03f, -3.064778684e-03f, -3.456026989e-04f, +9.117779812e-03f, +1.541818797e-02f, +1.243959545e-03f, -3.334002477e-02f, -5.201098729e-02f, -3.545893179e-03f, +1.232261298e-01f, +2.674519775e-01f, +3.340181289e-01f, +2.747900141e-01f, +1.326989880e-01f, +2.352438239e-03f, -5.138698989e-02f, -3.552680584e-02f, -5.071999193e-04f, +1.528219472e-02f, +9.782003259e-03f, +7.678597090e-05f, -3.085512578e-03f, -1.447832854e-03f, -2.545601248e-06f, +6.481352384e-05f, +1.722631685e-05f, -1.995998244e-04f, -3.356832843e-04f, +3.558286875e-05f, +8.407479278e-04f, +1.115016669e-03f, -2.076808167e-04f, -2.824695277e-03f, -4.707280779e-03f, -3.790616984e-03f, -1.970487457e-04f, +3.541891040e-03f, +4.759580019e-03f, +3.071977016e-03f, +4.190523637e-04f, -1.068332631e-03f, -9.092848150e-04f, -1.013822117e-04f, +3.274289891e-04f, +2.226328496e-04f, -3.119045703e-06f, -6.696605421e-05f, -1.944806459e-05f, +1.315841947e-03f, +3.064778684e-03f, -1.671428198e-03f, -8.881215410e-03f, -5.480965128e-03f, +1.183883156e-02f, +2.078862950e-02f, +7.872342904e-04f, -2.852113165e-02f, -2.527055875e-02f, +1.296870820e-02f, +3.767424209e-02f, +1.550784414e-02f, -2.357790770e-02f, -2.961339011e-02f, -1.212931265e-03f, +2.042738868e-02f, +1.296745939e-02f, -4.696155338e-03f, -9.126856171e-03f, -2.143029326e-03f, +2.540215492e-03f, +1.447832854e-03f, +2.545601248e-06f, -6.481352384e-05f, -1.722631685e-05f, +2.297724939e-04f, +1.398967235e-04f, -3.681127511e-04f, -5.769611755e-04f, +1.320208631e-04f, +9.834114395e-04f, +6.002327499e-04f, -7.876498834e-04f, -1.292570593e-03f, -7.840153916e-05f, +1.242758144e-03f, +9.028730329e-04f, -4.898564049e-04f, -1.013928274e-03f, -2.294901511e-04f, +5.495832833e-04f, +4.160109560e-04f, -1.047782799e-04f, -2.411522223e-04f, -4.092376319e-05f, +6.696605421e-05f, +1.944806459e-05f, /* 6, 2 (24) */ -1.251028423e-03f, -3.047552367e-03f, -5.452025233e-04f, +8.782096528e-03f, +1.545377084e-02f, +2.084707473e-03f, -3.222500811e-02f, -5.221866811e-02f, -6.370588456e-03f, +1.185188490e-01f, +2.636613605e-01f, +3.338210801e-01f, +2.783319051e-01f, +1.374585680e-01f, +5.424415255e-03f, -5.096793753e-02f, -3.659513847e-02f, -1.416484734e-03f, +1.518081251e-02f, +1.010943225e-02f, +2.994188205e-04f, -3.088631624e-03f, -1.514798908e-03f, -2.199366583e-05f, +6.389368841e-05f, +2.153753453e-05f, -1.917900568e-04f, -3.373421937e-04f, +1.465074660e-05f, +8.168463171e-04f, +1.127180907e-03f, -1.400308877e-04f, -2.740746193e-03f, -4.683917896e-03f, -3.867908757e-03f, -3.282424799e-04f, +3.453547606e-03f, +4.770953197e-03f, +3.152607797e-03f, +4.921698130e-04f, -1.049308023e-03f, -9.309326212e-04f, -1.242558299e-04f, +3.235488489e-04f, +2.301300971e-04f, +1.968444869e-06f, -6.746330023e-05f, -2.108315094e-05f, +1.251028423e-03f, +3.047552367e-03f, -1.441655704e-03f, -8.741318686e-03f, -5.849077879e-03f, +1.126187038e-02f, +2.092065036e-02f, +1.770645730e-03f, -2.792089890e-02f, -2.605820864e-02f, +1.167613761e-02f, +3.759584055e-02f, +1.675060228e-02f, -2.267503467e-02f, -3.010324651e-02f, -2.226859539e-03f, +2.019789853e-02f, +1.351704268e-02f, -4.280144382e-03f, -9.231634451e-03f, -2.384181548e-03f, +2.499291729e-03f, +1.514798908e-03f, +2.199366583e-05f, -6.389368841e-05f, -2.153753453e-05f, +2.253294414e-04f, +1.506195234e-04f, -3.515170566e-04f, -5.840057251e-04f, +9.988589785e-05f, +9.704645605e-04f, +6.347740361e-04f, -7.472229839e-04f, -1.305335186e-03f, -1.305350756e-04f, +1.222385389e-03f, +9.390465563e-04f, -4.509807251e-04f, -1.021227655e-03f, -2.621639014e-04f, +5.383756226e-04f, +4.312346192e-04f, -9.212622896e-05f, -2.442431118e-04f, -4.752681547e-05f, +6.746330023e-05f, +2.108315094e-05f, /* 6, 3 (24) */ -1.187134734e-03f, -3.026014832e-03f, -7.369925802e-04f, +8.444754334e-03f, +1.546842159e-02f, +2.901553790e-03f, -3.109782720e-02f, -5.235869900e-02f, -9.111334648e-03f, +1.138349311e-01f, +2.597934518e-01f, +3.334928377e-01f, +2.817854527e-01f, +1.422295212e-01f, +8.577023051e-03f, -5.047576772e-02f, -3.764444649e-02f, -2.347417355e-03f, +1.505655668e-02f, +1.043298110e-02f, +5.295489175e-04f, -3.086663179e-03f, -1.582262209e-03f, -4.307681677e-05f, +6.288172682e-05f, +2.565105489e-05f, -1.839377214e-04f, -3.384742792e-04f, -5.753348927e-06f, +7.924870975e-04f, +1.137683536e-03f, -7.385297568e-05f, -2.656173279e-03f, -4.657661463e-03f, -3.942307950e-03f, -4.591782538e-04f, +3.362584557e-03f, +4.779237872e-03f, +3.232203116e-03f, +5.665388902e-04f, -1.028522733e-03f, -9.519102335e-04f, -1.475667527e-04f, +3.190877058e-04f, +2.375123335e-04f, +7.244398905e-06f, -6.784155157e-05f, -2.274722726e-05f, +1.187134734e-03f, +3.026014832e-03f, -1.216326262e-03f, -8.590699163e-03f, -6.200594936e-03f, +1.067786466e-02f, +2.102053626e-02f, +2.741110290e-03f, -2.728612486e-02f, -2.680543162e-02f, +1.037080242e-02f, +3.746530547e-02f, +1.797298767e-02f, -2.173598811e-02f, -3.055422724e-02f, -3.248087194e-03f, +1.993573463e-02f, +1.405541830e-02f, -3.848909763e-03f, -9.323760680e-03f, -2.628424660e-03f, +2.451764913e-03f, +1.582262209e-03f, +4.307681677e-05f, -6.288172682e-05f, -2.565105489e-05f, +2.205885129e-04f, +1.608347588e-04f, -3.346629931e-04f, -5.900142142e-04f, +6.801158183e-05f, +9.561846390e-04f, +6.681116709e-04f, -7.058974164e-04f, -1.316152368e-03f, -1.824676140e-04f, +1.200171545e-03f, +9.739992989e-04f, -4.111520349e-04f, -1.027046790e-03f, -2.948423740e-04f, +5.261315604e-04f, +4.460309708e-04f, -7.902277375e-05f, -2.469574470e-04f, -5.424738949e-05f, +6.784155157e-05f, +2.274722726e-05f, /* 6, 4 (24) */ -1.124253008e-03f, -3.000363778e-03f, -9.209303016e-04f, +8.106280055e-03f, +1.546266824e-02f, +3.694040888e-03f, -2.996014366e-02f, -5.243255197e-02f, -1.176750793e-02f, +1.091772697e-01f, +2.558511438e-01f, +3.330336594e-01f, +2.851480373e-01f, +1.470087591e-01f, +1.180922617e-02f, -4.990922883e-02f, -3.867296923e-02f, -3.299327589e-03f, +1.490898993e-02f, +1.075206880e-02f, +7.670612510e-04f, -3.079418780e-03f, -1.650103760e-03f, -6.582404402e-05f, +6.178307809e-05f, +2.956619010e-05f, -1.760564584e-04f, -3.390919485e-04f, -2.561452950e-05f, +7.677120714e-04f, +1.146548940e-03f, -9.185006537e-06f, -2.571058474e-03f, -4.628557951e-03f, -4.013768311e-03f, -5.897532510e-04f, +3.269064490e-03f, +4.784402921e-03f, +3.310680875e-03f, +6.421095461e-04f, -1.005961845e-03f, -9.721747743e-04f, -1.712936001e-04f, +3.140364966e-04f, +2.447643402e-04f, +1.270576066e-05f, -6.809557905e-05f, -2.443743580e-05f, +1.124253008e-03f, +3.000363778e-03f, -9.957377493e-04f, -8.429864404e-03f, -6.535257929e-03f, +1.008785045e-02f, +2.108854784e-02f, +3.697294929e-03f, -2.661801319e-02f, -2.751132904e-02f, +9.054650055e-03f, +3.728283786e-02f, +1.917315922e-02f, -2.076198881e-02f, -3.096537927e-02f, -4.275133985e-03f, +1.964089226e-02f, +1.458154986e-02f, -3.402878792e-03f, -9.402783454e-03f, -2.875382107e-03f, +2.397517524e-03f, +1.650103760e-03f, +6.582404402e-05f, -6.178307809e-05f, -2.956619010e-05f, +2.155662977e-04f, +1.705345927e-04f, -3.175843266e-04f, -5.949920767e-04f, +3.644640680e-05f, +9.406071432e-04f, +7.002020898e-04f, -6.637415389e-04f, -1.325010312e-03f, -2.341192274e-04f, +1.176147110e-03f, +1.007671578e-03f, -3.704265174e-04f, -1.031362745e-03f, -3.274722649e-04f, +5.128565571e-04f, +4.603666510e-04f, -6.548252658e-05f, -2.492806200e-04f, -6.107441404e-05f, +6.809557905e-05f, +2.443743580e-05f, /* 6, 5 (24) */ -1.062469930e-03f, -2.970797587e-03f, -1.096986760e-03f, +7.767188107e-03f, +1.543705371e-02f, +4.461752959e-03f, -2.881359472e-02f, -5.244173698e-02f, -1.433856640e-02f, +1.045487117e-01f, +2.518373755e-01f, +3.324439062e-01f, +2.884171018e-01f, +1.517931620e-01f, +1.511990704e-02f, -4.926711928e-02f, -3.967893107e-02f, -4.271502363e-03f, +1.473769633e-02f, +1.106610530e-02f, +1.011825591e-03f, -3.066713019e-03f, -1.718199339e-03f, -9.026147983e-05f, +6.060317770e-05f, +3.328261961e-05f, -1.681595893e-04f, -3.392080658e-04f, -4.491899181e-05f, +7.425626902e-04f, +1.153802914e-03f, +5.393719231e-05f, -2.485483383e-03f, -4.596656183e-03f, -4.082246465e-03f, -7.198650226e-04f, +3.173052544e-03f, +4.786419960e-03f, +3.387959259e-03f, +7.188298137e-04f, -9.816121727e-04f, -9.916833680e-04f, -1.954139279e-04f, +3.083868143e-04f, +2.518706986e-04f, +1.834905721e-05f, -6.822022903e-05f, -2.615076039e-05f, +1.062469930e-03f, +2.970797587e-03f, -7.801714517e-04f, -8.259329812e-03f, -6.852842255e-03f, +9.492858368e-03f, +2.112499425e-02f, +4.637902073e-03f, -2.591781110e-02f, -2.817507058e-02f, +7.729639742e-03f, +3.704871863e-02f, +2.034930633e-02f, -1.975431723e-02f, -3.133580579e-02f, -5.306496729e-03f, +1.931341999e-02f, +1.509440642e-02f, -2.942512141e-03f, -9.468265980e-03f, -3.124662727e-03f, +2.336443110e-03f, +1.718199339e-03f, +9.026147983e-05f, -6.060317770e-05f, -3.328261961e-05f, +2.102795790e-04f, +1.797123137e-04f, -3.003146694e-04f, -5.989464665e-04f, +5.237786086e-06f, +9.237693767e-04f, +7.310040664e-04f, -6.208247442e-04f, -1.331900379e-03f, -2.854104603e-04f, +1.150345561e-03f, +1.040005548e-03f, -3.288621856e-04f, -1.034154896e-03f, -3.599997655e-04f, +4.985579560e-04f, +4.742085965e-04f, -5.152121081e-05f, -2.511984901e-04f, -6.799630432e-05f, +6.822022903e-05f, +2.615076039e-05f, /* 6, 6 (24) */ -1.001866752e-03f, -2.937514968e-03f, -1.265146349e-03f, +7.427980041e-03f, +1.539213472e-02f, +5.204315649e-03f, -2.765979181e-02f, -5.238779979e-02f, -1.682404978e-02f, +9.995205552e-02f, +2.477551290e-01f, +3.317240411e-01f, +2.915901543e-01f, +1.565795820e-01f, +1.850786630e-02f, -4.854828947e-02f, -4.066054324e-02f, -5.263185731e-03f, +1.454228240e-02f, +1.137449211e-02f, +1.263696290e-03f, -3.048363962e-03f, -1.786419568e-03f, -1.164122402e-04f, +5.934744720e-05f, +3.680038110e-05f, -1.602601035e-04f, -3.388359222e-04f, -6.365401444e-05f, +7.170800082e-04f, +1.159472611e-03f, +1.154799069e-04f, -2.399529195e-03f, -4.562007266e-03f, -4.147701949e-03f, -8.494115912e-04f, +3.074616339e-03f, +4.785263390e-03f, +3.463956829e-03f, +7.966458449e-04f, -9.554623048e-04f, -1.010393195e-03f, -2.199042372e-04f, +3.021309355e-04f, +2.588158100e-04f, +2.417039358e-05f, -6.821043546e-05f, -2.788402811e-05f, +1.001866752e-03f, +2.937514968e-03f, -5.698918727e-04f, -8.079617498e-03f, -7.153156925e-03f, +8.893911902e-03f, +2.113023204e-02f, +5.561671449e-03f, -2.518680704e-02f, -2.879589532e-02f, +6.397739363e-03f, +3.676330817e-02f, +2.149965189e-02f, -1.871431169e-02f, -3.166466798e-02f, -6.340651625e-03f, +1.895342023e-02f, +1.559296437e-02f, -2.468303545e-03f, -9.519787191e-03f, -3.375861217e-03f, +2.268446805e-03f, +1.786419568e-03f, +1.164122402e-04f, -5.934744720e-05f, -3.680038110e-05f, +2.047452951e-04f, +1.883623296e-04f, -2.828874197e-04f, -6.018862218e-04f, -2.556801747e-05f, +9.057103977e-04f, +7.604787672e-04f, -5.772173382e-04f, -1.336817126e-03f, -3.362624619e-04f, +1.122803310e-03f, +1.070945305e-03f, -2.865187936e-04f, -1.035404989e-03f, -3.923706530e-04f, +4.832449927e-04f, +4.875241071e-04f, -3.715564929e-05f, -2.526974221e-04f, -7.500097594e-05f, +6.821043546e-05f, +2.788402811e-05f, /* 6, 7 (24) */ -9.425193046e-04f, -2.900714587e-03f, -1.425406453e-03f, +7.089144119e-03f, +1.532848070e-02f, +5.921395657e-03f, -2.650031920e-02f, -5.227231988e-02f, -1.922357898e-02f, +9.539004826e-02f, +2.436074271e-01f, +3.308746295e-01f, +2.946647707e-01f, +1.613648454e-01f, +2.197182313e-02f, -4.775164362e-02f, -4.161600555e-02f, -6.273578926e-03f, +1.432237817e-02f, +1.167662305e-02f, +1.522512100e-03f, -3.024193569e-03f, -1.854630004e-03f, -1.442962683e-04f, +5.802128424e-05f, +4.011986105e-05f, -1.523706453e-04f, -3.379892059e-04f, -8.180795328e-05f, +6.913046371e-04f, +1.163586488e-03f, +1.754115491e-04f, -2.313276598e-03f, -4.524664529e-03f, -4.210097246e-03f, -9.782915545e-04f, +2.973825913e-03f, +4.780910436e-03f, +3.538592610e-03f, +8.755019491e-04f, -9.275026422e-04f, -1.028261548e-03f, -2.447399846e-04f, +2.952618468e-04f, +2.655839161e-04f, +3.016544842e-05f, -6.806123211e-05f, -2.963391142e-05f, +9.425193046e-04f, +2.900714587e-03f, -3.651465776e-04f, -7.891255168e-03f, -7.436044344e-03f, +8.292025680e-03f, +2.110466402e-02f, +6.467381847e-03f, -2.442632827e-02f, -2.937311266e-02f, +5.060922236e-03f, +3.642704571e-02f, +2.262245520e-02f, -1.764336638e-02f, -3.195118677e-02f, -7.376056614e-03f, +1.856104957e-02f, +1.607620937e-02f, -1.980779438e-03f, -9.556942840e-03f, -3.628558639e-03f, +2.193445829e-03f, +1.854630004e-03f, +1.442962683e-04f, -5.802128424e-05f, -4.011986105e-05f, +1.989805015e-04f, +1.964801581e-04f, -2.653357019e-04f, -6.038218276e-04f, -5.592596085e-05f, +8.864709371e-04f, +7.885898027e-04f, -5.329904173e-04f, -1.339758308e-03f, -3.865971177e-04f, +1.093559642e-03f, +1.100436991e-03f, -2.434577447e-04f, -1.035097187e-03f, -4.245303820e-04f, +4.669288026e-04f, +5.002809122e-04f, -2.240375052e-05f, -2.537643245e-04f, -8.207586033e-05f, +6.806123211e-05f, +2.963391142e-05f, /* 6, 8 (24) */ -8.844980204e-04f, -2.860594726e-03f, -1.577777098e-03f, +6.751154913e-03f, +1.524667275e-02f, +6.612700294e-03f, -2.533673271e-02f, -5.209690833e-02f, -2.153685558e-02f, +9.086538373e-02f, +2.393973298e-01f, +3.298963380e-01f, +2.976385966e-01f, +1.661457558e-01f, +2.551041574e-02f, -4.687614167e-02f, -4.254350819e-02f, -7.301840474e-03f, +1.407763818e-02f, +1.197188490e-02f, +1.788096016e-03f, -2.994028120e-03f, -1.922691236e-03f, -1.739301798e-04f, +5.663005275e-05f, +4.324178486e-05f, -1.445035018e-04f, -3.366819736e-04f, -9.937023555e-05f, +6.652767031e-04f, +1.166174257e-03f, +2.337026664e-04f, -2.226805702e-03f, -4.484683449e-03f, -4.269397810e-03f, -1.106404188e-03f, +2.870753655e-03f, +4.773341188e-03f, +3.611786181e-03f, +9.553406348e-04f, -8.977254349e-04f, -1.045245885e-03f, -2.698955957e-04f, +2.877732716e-04f, +2.721591211e-04f, +3.632947036e-05f, -6.776776486e-05f, -3.139693059e-05f, +8.844980204e-04f, +2.860594726e-03f, -1.661660761e-04f, -7.694775010e-03f, -7.701380046e-03f, +7.688203853e-03f, +2.104873806e-02f, +7.353852784e-03f, -2.363773847e-02f, -2.990610308e-02f, +3.721163928e-03f, +3.604044859e-02f, +2.371601484e-02f, -1.654292939e-02f, -3.219464451e-02f, -8.411153801e-03f, +1.813651919e-02f, +1.654313817e-02f, -1.480498526e-03f, -9.579346591e-03f, -3.882322963e-03f, +2.111369969e-03f, +1.922691236e-03f, +1.739301798e-04f, -5.663005275e-05f, -4.324178486e-05f, +1.930023331e-04f, +2.040624157e-04f, -2.476923088e-04f, -6.047653749e-04f, -8.579228719e-05f, +8.660933128e-04f, +8.153032736e-04f, -4.882157442e-04f, -1.340724874e-03f, -4.363371811e-04f, +1.062656658e-03f, +1.128428889e-03f, -1.997419964e-04f, -1.033218118e-03f, -4.564241782e-04f, +4.496224237e-04f, +5.124472386e-04f, -7.284492294e-06f, -2.543866878e-04f, -8.920792150e-05f, +6.776776486e-05f, +3.139693059e-05f, /* 6, 9 (24) */ -8.278679676e-04f, -2.817352941e-03f, -1.722280600e-03f, +6.414472939e-03f, +1.514730251e-02f, +7.277976997e-03f, -2.417055845e-02f, -5.186320566e-02f, -2.376366128e-02f, +8.638070028e-02f, +2.351279320e-01f, +3.287899338e-01f, +3.005093502e-01f, +1.709190970e-01f, +2.912220192e-02f, -4.592080104e-02f, -4.344123363e-02f, -8.347086359e-03f, +1.380774258e-02f, +1.225965817e-02f, +2.060255137e-03f, -2.957698650e-03f, -1.990459001e-03f, -2.053271103e-04f, +5.517907351e-05f, +4.616720663e-05f, -1.366705918e-04f, -3.349286204e-04f, -1.163313523e-04f, +6.390358040e-04f, +1.167266825e-03f, +2.903259489e-04f, -2.140195948e-03f, -4.442121581e-03f, -4.325572093e-03f, -1.233649549e-03f, +2.765474238e-03f, +4.762538634e-03f, +3.683457771e-03f, +1.036102654e-03f, -8.661248172e-04f, -1.061303886e-03f, -2.953444788e-04f, +2.796596949e-04f, +2.785254130e-04f, +4.265727503e-05f, -6.732530413e-05f, -3.316945658e-05f, +8.278679676e-04f, +2.817352941e-03f, +2.683625699e-05f, -7.490712594e-03f, -7.949072355e-03f, +7.083438478e-03f, +2.096294577e-02f, +8.219946097e-03f, -2.282243519e-02f, -3.039431882e-02f, +2.380439054e-03f, +3.560411141e-02f, +2.477867150e-02f, -1.541450050e-02f, -3.239438651e-02f, -9.444371919e-03f, +1.768009501e-02f, +1.699276059e-02f, -9.680512870e-04f, -9.586631083e-03f, -4.136709651e-03f, +2.022162048e-03f, +1.990459001e-03f, +2.053271103e-04f, -5.517907351e-05f, -4.616720663e-05f, +1.868279672e-04f, +2.111068049e-04f, -2.299896455e-04f, -6.047305176e-04f, -1.151245892e-04f, +8.446213427e-04f, +8.405878122e-04f, -4.429656241e-04f, -1.339720954e-03f, -4.854064019e-04f, +1.030139207e-03f, +1.154871522e-03f, -1.554359608e-04f, -1.029756914e-03f, -4.879971326e-04f, +4.313407968e-04f, +5.239918765e-04f, +8.182096944e-06f, -2.545526212e-04f, -9.638367424e-05f, +6.732530413e-05f, +3.316945658e-05f, /* 6,10 (24) */ -7.726888941e-04f, -2.771185734e-03f, -1.858951192e-03f, +6.079544319e-03f, +1.503097116e-02f, +7.917012801e-03f, -2.300329163e-02f, -5.157287971e-02f, -2.590385723e-02f, +8.193857870e-02f, +2.308023599e-01f, +3.275562843e-01f, +3.032748245e-01f, +1.756816356e-01f, +3.280565969e-02f, -4.488469839e-02f, -4.430735844e-02f, -9.408390245e-03f, +1.351239811e-02f, +1.253931786e-02f, +2.338780550e-03f, -2.915041375e-03f, -2.057784305e-03f, -2.384965669e-04f, +5.367361504e-05f, +4.889749865e-05f, -1.288834556e-04f, -3.327438508e-04f, -1.326828498e-04f, +6.126209686e-04f, +1.166896245e-03f, +3.452562339e-04f, -2.053526041e-03f, -4.397038482e-03f, -4.378591568e-03f, -1.359928574e-03f, +2.658064548e-03f, +4.748488696e-03f, +3.753528341e-03f, +1.117727050e-03f, -8.326968404e-04f, -1.076393514e-03f, -3.210590406e-04f, +2.709163893e-04f, +2.846666873e-04f, +4.914324270e-05f, -6.672925739e-05f, -3.494771420e-05f, +7.726888941e-04f, +2.771185734e-03f, +2.136642242e-04f, -7.279605790e-03f, -8.179062001e-03f, +6.478707960e-03f, +2.084782118e-02f, +9.064567440e-03f, -2.198184738e-02f, -3.083728444e-02f, +1.040718100e-03f, +3.511870501e-02f, +2.580881071e-02f, -1.425962898e-02f, -3.254982247e-02f, -1.047412883e-02f, +1.719209788e-02f, +1.742410139e-02f, -4.440594105e-04f, -9.578448986e-03f, -4.391262272e-03f, +1.925778373e-03f, +2.057784305e-03f, +2.384965669e-04f, -5.367361504e-05f, -4.889749865e-05f, +1.804745870e-04f, +2.176120983e-04f, -2.122596742e-04f, -6.037324270e-04f, -1.438818692e-04f, +8.221002559e-04f, +8.644146191e-04f, -3.973127796e-04f, -1.336753852e-03f, -5.337296543e-04f, +9.960548144e-04f, +1.179717742e-03f, -1.106054035e-04f, -1.024705255e-03f, -5.191942975e-04f, +4.121007614e-04f, +5.348842467e-04f, +2.397495925e-05f, -2.542508895e-04f, -1.035892036e-04f, +6.672925739e-05f, +3.494771420e-05f, /* 6,11 (24) */ -7.190152791e-04f, -2.722288236e-03f, -1.987834647e-03f, +5.746800468e-03f, +1.489828831e-02f, +8.529633770e-03f, -2.183639538e-02f, -5.122762348e-02f, -2.795738327e-02f, +7.754154022e-02f, +2.264237684e-01f, +3.261963557e-01f, +3.059328890e-01f, +1.804301243e-01f, +3.655918803e-02f, -4.376697134e-02f, -4.514005528e-02f, -1.048478376e-02f, +1.319133907e-02f, +1.281023425e-02f, +2.623447237e-03f, -2.865898132e-03f, -2.124513562e-03f, -2.734442811e-04f, +5.211888475e-05f, +5.143434051e-05f, -1.211532453e-04f, -3.301426497e-04f, -1.484173194e-04f, +5.860706170e-04f, +1.165095656e-03f, +3.984705076e-04f, -1.966873861e-03f, -4.349495642e-03f, -4.428430743e-03f, -1.485143182e-03f, +2.548603607e-03f, +4.731180255e-03f, +3.821919682e-03f, +1.200151202e-03f, -7.974395044e-04f, -1.090473064e-03f, -3.470107043e-04f, +2.615394385e-04f, +2.905667697e-04f, +5.578131674e-05f, -6.597518170e-05f, -3.672778576e-05f, +7.190152791e-04f, +2.722288236e-03f, +3.941388112e-04f, -7.061993691e-03f, -8.391321675e-03f, +5.874975533e-03f, +2.070393931e-02f, +9.886667696e-03f, -2.111743276e-02f, -3.123459722e-02f, -2.960357521e-04f, +3.458497535e-02f, +2.680486552e-02f, -1.307991124e-02f, -3.266042788e-02f, -1.149883409e-02f, +1.667290358e-02f, +1.783620215e-02f, +9.082483626e-05f, -9.554474027e-03f, -4.645513162e-03f, +1.822189170e-03f, +2.124513562e-03f, +2.734442811e-04f, -5.211888475e-05f, -5.143434051e-05f, +1.739593458e-04f, +2.235781227e-04f, -1.945338611e-04f, -6.017877439e-04f, -1.720245964e-04f, +7.985766012e-04f, +8.867574951e-04f, -3.513302258e-04f, -1.331834017e-03f, -5.812330620e-04f, +9.604536064e-04f, +1.202922818e-03f, -6.531733867e-05f, -1.018057400e-03f, -5.499607829e-04f, +3.919210484e-04f, +5.450944670e-04f, +4.007203065e-05f, -2.534709491e-04f, -1.108101859e-04f, +6.597518170e-05f, +3.672778576e-05f, /* 6,12 (24) */ -6.668963943e-04f, -2.670853895e-03f, -2.108987893e-03f, +5.416657818e-03f, +1.474987099e-02f, +9.115704387e-03f, -2.067129973e-02f, -5.082915297e-02f, -2.992425713e-02f, +7.319204457e-02f, +2.219953376e-01f, +3.247112125e-01f, +3.084814926e-01f, +1.851613046e-01f, +4.038110771e-02f, -4.256682013e-02f, -4.593749479e-02f, -1.157525682e-02f, +1.284432836e-02f, +1.307177369e-02f, +2.914014007e-03f, -2.810116815e-03f, -2.190488744e-03f, -3.101720669e-04f, +5.052002055e-05f, +5.377970800e-05f, -1.134907162e-04f, -3.271402533e-04f, -1.635283859e-04f, +5.594225224e-04f, +1.161899229e-03f, +4.499479043e-04f, -1.880316393e-03f, -4.299556399e-03f, -4.475067179e-03f, -1.609196375e-03f, +2.437172497e-03f, +4.710605181e-03f, +3.888554500e-03f, +1.283310884e-03f, -7.603527866e-04f, -1.103501229e-03f, -3.731699285e-04f, +2.515257613e-04f, +2.962094404e-04f, +6.256500263e-05f, -6.505879630e-05f, -3.850561505e-05f, +6.668963943e-04f, +2.670853895e-03f, +5.680981570e-04f, -6.838415569e-03f, -8.585855536e-03f, +5.273187789e-03f, +2.053191472e-02f, +1.068524430e-02f, -2.023067527e-02f, -3.158592745e-02f, -1.627869769e-03f, +3.400374229e-02f, +2.776531913e-02f, -1.187698842e-02f, -3.272574521e-02f, -1.251689149e-02f, +1.612294280e-02f, +1.822812320e-02f, +6.359193033e-04f, -9.514401996e-03f, -4.898984111e-03f, +1.711378984e-03f, +2.190488744e-03f, +3.101720669e-04f, -5.052002055e-05f, -5.377970800e-05f, +1.672993318e-04f, +2.290057391e-04f, -1.768431249e-04f, -5.989145286e-04f, -1.995147604e-04f, +7.740981547e-04f, +9.075928686e-04f, -3.050911452e-04f, -1.324975022e-03f, -6.278441214e-04f, +9.233882296e-04f, +1.224444521e-03f, -1.963992123e-05f, -1.009810214e-03f, -5.802418545e-04f, +3.708222693e-04f, +5.545934181e-04f, +5.645026705e-05f, -2.522029828e-04f, -1.180319106e-04f, +6.505879630e-05f, +3.850561505e-05f, /* 6,13 (24) */ -6.163763738e-04f, -2.617074187e-03f, -2.222478609e-03f, +5.089517565e-03f, +1.458634261e-02f, +9.675126909e-03f, -1.950940050e-02f, -5.037920507e-02f, -3.180457352e-02f, +6.889248817e-02f, +2.175202704e-01f, +3.231020161e-01f, +3.109186651e-01f, +1.898719098e-01f, +4.426966222e-02f, -4.128350925e-02f, -4.669784758e-02f, -1.267875805e-02f, +1.247115843e-02f, +1.332329945e-02f, +3.210223448e-03f, -2.747551813e-03f, -2.255547540e-03f, -3.486776819e-04f, +4.888208265e-05f, +5.593586166e-05f, -1.059062192e-04f, -3.237521202e-04f, -1.780106955e-04f, +5.327137747e-04f, +1.157342108e-03f, +4.996697028e-04f, -1.793929652e-03f, -4.247285863e-03f, -4.518481500e-03f, -1.731992329e-03f, +2.323854286e-03f, +4.686758351e-03f, +3.953356508e-03f, +1.367140312e-03f, -7.214386688e-04f, -1.115437151e-03f, -3.995062278e-04f, +2.408731346e-04f, +3.015784591e-04f, +6.948736784e-05f, -6.397599520e-05f, -4.027701168e-05f, +6.163763738e-04f, +2.617074187e-03f, +7.353974888e-04f, -6.609409829e-03f, -8.762698661e-03f, +4.674273261e-03f, +2.033239995e-02f, +1.145934245e-02f, -1.932308240e-02f, -3.189101859e-02f, -2.952844791e-03f, +3.337589817e-02f, +2.868870736e-02f, -1.065254390e-02f, -3.274538514e-02f, -1.352670170e-02f, +1.554270095e-02f, +1.859894547e-02f, +1.190512721e-03f, -9.457951729e-03f, -5.151187094e-03f, +1.593347073e-03f, +2.255547540e-03f, +3.486776819e-04f, -4.888208265e-05f, -5.593586166e-05f, +1.605115338e-04f, +2.338968232e-04f, -1.592177872e-04f, -5.951322091e-04f, -2.263159219e-04f, +7.487138261e-04f, +9.268998177e-04f, -2.586687636e-04f, -1.316193531e-03f, -6.734918225e-04f, +8.849137654e-04f, +1.244243205e-03f, +2.635766287e-05f, -9.999631993e-04f, -6.099830312e-04f, +3.488269012e-04f, +5.633528087e-04f, +7.308567245e-05f, -2.504379341e-04f, -1.252393043e-04f, +6.397599520e-05f, +4.027701168e-05f, /* 6,14 (24) */ -5.674942911e-04f, -2.561138325e-03f, -2.328384828e-03f, +4.765765445e-03f, +1.440833191e-02f, +1.020784068e-02f, -1.835205839e-02f, -4.987953537e-02f, -3.359850317e-02f, +6.464520231e-02f, +2.130017889e-01f, +3.213700238e-01f, +3.132425194e-01f, +1.945586681e-01f, +4.822301872e-02f, -3.991636894e-02f, -4.741928624e-02f, -1.379419520e-02f, +1.207165220e-02f, +1.356417259e-02f, +3.511801907e-03f, -2.678064445e-03f, -2.319523535e-03f, -3.889546936e-04f, +4.721004585e-05f, +5.790533520e-05f, -9.840969351e-05f, -3.199939028e-04f, -1.918599014e-04f, +5.059807448e-04f, +1.151460357e-03f, +5.476193212e-04f, -1.707788607e-03f, -4.192750838e-03f, -4.558657401e-03f, -1.853436500e-03f, +2.208733939e-03f, +4.659637675e-03f, +4.016250511e-03f, +1.451572205e-03f, -6.807011622e-04f, -1.126240484e-03f, -4.259881958e-04f, +2.295802150e-04f, +3.066575897e-04f, +7.654104238e-05f, -6.272285979e-05f, -4.203765589e-05f, +5.674942911e-04f, +2.561138325e-03f, +8.959090226e-04f, -6.375513006e-03f, -8.921916448e-03f, +4.079141051e-03f, +2.010608403e-02f, +1.220805628e-02f, -1.839618258e-02f, -3.214968736e-02f, -4.269038322e-03f, +3.270240635e-02f, +2.957362112e-02f, -9.408300692e-03f, -3.271902747e-02f, -1.452666490e-02f, +1.493271791e-02f, +1.894777237e-02f, +1.753865530e-03f, -9.384866057e-03f, -5.401625028e-03f, +1.468107769e-03f, +2.319523535e-03f, +3.889546936e-04f, -4.721004585e-05f, -5.790533520e-05f, +1.536128079e-04f, +2.382542419e-04f, -1.416875244e-04f, -5.904615270e-04f, -2.523932593e-04f, +7.224735630e-04f, +9.446600874e-04f, -2.121362253e-04f, -1.305509262e-03f, -7.181067668e-04f, +8.450876411e-04f, +1.262281880e-03f, +7.260530933e-05f, -9.885185114e-04f, -6.391301841e-04f, +3.259592689e-04f, +5.713452407e-04f, +8.995332953e-05f, -2.481675405e-04f, -1.324169550e-04f, +6.272285979e-05f, +4.203765589e-05f, /* 6,15 (24) */ -5.202842453e-04f, -2.503232990e-03f, -2.426794521e-03f, +4.445771542e-03f, +1.421647201e-02f, +1.071382143e-02f, -1.720059803e-02f, -4.933191604e-02f, -3.530629178e-02f, +6.045245147e-02f, +2.084431315e-01f, +3.195165873e-01f, +3.154512533e-01f, +1.992183058e-01f, +5.223926923e-02f, -3.846479673e-02f, -4.809998741e-02f, -1.492043569e-02f, +1.164566401e-02f, +1.379375280e-02f, +3.818459496e-03f, -2.601523403e-03f, -2.382246395e-03f, -4.309923495e-04f, +4.550879214e-05f, +5.969092366e-05f, -9.101066092e-05f, -3.158814194e-04f, -2.050726491e-04f, +4.792590514e-04f, +1.144290896e-03f, +5.937823076e-04f, -1.621967112e-03f, -4.136019738e-03f, -4.595581654e-03f, -1.973435708e-03f, +2.091898242e-03f, +4.629244105e-03f, +4.077162501e-03f, +1.536537839e-03f, -6.381463300e-04f, -1.135871450e-03f, -4.525835287e-04f, +2.176465602e-04f, +3.114306263e-04f, +8.371822012e-05f, -6.129567137e-05f, -4.378310363e-05f, +5.202842453e-04f, +2.503232990e-03f, +1.049521831e-03f, -6.137258764e-03f, -9.063603972e-03f, +3.488679524e-03f, +1.985369077e-02f, +1.293052984e-02f, -1.745152249e-02f, -3.236182358e-02f, -5.574547584e-03f, +3.198429958e-02f, +3.041870876e-02f, -8.146018813e-03f, -3.264642216e-02f, -1.551518341e-02f, +1.429358773e-02f, +1.927373164e-02f, +2.325210771e-03f, -9.294912727e-03f, -5.649792568e-03f, +1.335690814e-03f, +2.382246395e-03f, +4.309923495e-04f, -4.550879214e-05f, -5.969092366e-05f, +1.466198448e-04f, +2.420818303e-04f, -1.242813225e-04f, -5.849244815e-04f, -2.777136124e-04f, +6.954282546e-04f, +9.608581028e-04f, -1.655664700e-04f, -1.292944947e-03f, -7.616212822e-04f, +8.039695356e-04f, +1.278526282e-03f, +1.190321101e-04f, -9.754809765e-04f, -6.676296348e-04f, +3.022455226e-04f, +5.785442723e-04f, +1.070274325e-04f, -2.453843657e-04f, -1.395491384e-04f, +6.129567137e-05f, +4.378310363e-05f, /* 6,16 (24) */ -4.747754531e-04f, -2.443542066e-03f, -2.517805182e-03f, +4.129890123e-03f, +1.401139936e-02f, +1.119308048e-02f, -1.605630714e-02f, -4.873813374e-02f, -3.692825889e-02f, +5.631643174e-02f, +2.038475499e-01f, +3.175431516e-01f, +3.175431516e-01f, +2.038475499e-01f, +5.631643174e-02f, -3.692825889e-02f, -4.873813374e-02f, -1.605630714e-02f, +1.119308048e-02f, +1.401139936e-02f, +4.129890123e-03f, -2.517805182e-03f, -2.443542066e-03f, -4.747754531e-04f, +4.378310363e-05f, +6.129567137e-05f, -8.371822012e-05f, -3.114306263e-04f, -2.176465602e-04f, +4.525835287e-04f, +1.135871450e-03f, +6.381463300e-04f, -1.536537839e-03f, -4.077162501e-03f, -4.629244105e-03f, -2.091898242e-03f, +1.973435708e-03f, +4.595581654e-03f, +4.136019738e-03f, +1.621967112e-03f, -5.937823076e-04f, -1.144290896e-03f, -4.792590514e-04f, +2.050726491e-04f, +3.158814194e-04f, +9.101066092e-05f, -5.969092366e-05f, -4.550879214e-05f, +4.747754531e-04f, +2.443542066e-03f, +1.196141675e-03f, -5.895176934e-03f, -9.187885295e-03f, +2.903755043e-03f, +1.957597716e-02f, +1.362595810e-02f, -1.649066439e-02f, -3.252739005e-02f, -6.867492530e-03f, +3.122267830e-02f, +3.122267830e-02f, -6.867492530e-03f, -3.252739005e-02f, -1.649066439e-02f, +1.362595810e-02f, +1.957597716e-02f, +2.903755043e-03f, -9.187885295e-03f, -5.895176934e-03f, +1.196141675e-03f, +2.443542066e-03f, +4.747754531e-04f, -4.378310363e-05f, -6.129567137e-05f, +1.395491384e-04f, +2.453843657e-04f, -1.070274325e-04f, -5.785442723e-04f, -3.022455226e-04f, +6.676296348e-04f, +9.754809765e-04f, -1.190321101e-04f, -1.278526282e-03f, -8.039695356e-04f, +7.616212822e-04f, +1.292944947e-03f, +1.655664700e-04f, -9.608581028e-04f, -6.954282546e-04f, +2.777136124e-04f, +5.849244815e-04f, +1.242813225e-04f, -2.420818303e-04f, -1.466198448e-04f, +5.969092366e-05f, +4.550879214e-05f, /* 6,17 (24) */ -4.309923495e-04f, -2.382246395e-03f, -2.601523403e-03f, +3.818459496e-03f, +1.379375280e-02f, +1.164566401e-02f, -1.492043569e-02f, -4.809998741e-02f, -3.846479673e-02f, +5.223926923e-02f, +1.992183058e-01f, +3.154512533e-01f, +3.195165873e-01f, +2.084431315e-01f, +6.045245147e-02f, -3.530629178e-02f, -4.933191604e-02f, -1.720059803e-02f, +1.071382143e-02f, +1.421647201e-02f, +4.445771542e-03f, -2.426794521e-03f, -2.503232990e-03f, -5.202842453e-04f, +4.203765589e-05f, +6.272285979e-05f, -7.654104238e-05f, -3.066575897e-04f, -2.295802150e-04f, +4.259881958e-04f, +1.126240484e-03f, +6.807011622e-04f, -1.451572205e-03f, -4.016250511e-03f, -4.659637675e-03f, -2.208733939e-03f, +1.853436500e-03f, +4.558657401e-03f, +4.192750838e-03f, +1.707788607e-03f, -5.476193212e-04f, -1.151460357e-03f, -5.059807448e-04f, +1.918599014e-04f, +3.199939028e-04f, +9.840969351e-05f, -5.790533520e-05f, -4.721004585e-05f, +4.309923495e-04f, +2.382246395e-03f, +1.335690814e-03f, -5.649792568e-03f, -9.294912727e-03f, +2.325210771e-03f, +1.927373164e-02f, +1.429358773e-02f, -1.551518341e-02f, -3.264642216e-02f, -8.146018813e-03f, +3.041870876e-02f, +3.198429958e-02f, -5.574547584e-03f, -3.236182358e-02f, -1.745152249e-02f, +1.293052984e-02f, +1.985369077e-02f, +3.488679524e-03f, -9.063603972e-03f, -6.137258764e-03f, +1.049521831e-03f, +2.503232990e-03f, +5.202842453e-04f, -4.203765589e-05f, -6.272285979e-05f, +1.324169550e-04f, +2.481675405e-04f, -8.995332953e-05f, -5.713452407e-04f, -3.259592689e-04f, +6.391301841e-04f, +9.885185114e-04f, -7.260530933e-05f, -1.262281880e-03f, -8.450876411e-04f, +7.181067668e-04f, +1.305509262e-03f, +2.121362253e-04f, -9.446600874e-04f, -7.224735630e-04f, +2.523932593e-04f, +5.904615270e-04f, +1.416875244e-04f, -2.382542419e-04f, -1.536128079e-04f, +5.790533520e-05f, +4.721004585e-05f, /* 6,18 (24) */ -3.889546936e-04f, -2.319523535e-03f, -2.678064445e-03f, +3.511801907e-03f, +1.356417259e-02f, +1.207165220e-02f, -1.379419520e-02f, -4.741928624e-02f, -3.991636894e-02f, +4.822301872e-02f, +1.945586681e-01f, +3.132425194e-01f, +3.213700238e-01f, +2.130017889e-01f, +6.464520231e-02f, -3.359850317e-02f, -4.987953537e-02f, -1.835205839e-02f, +1.020784068e-02f, +1.440833191e-02f, +4.765765445e-03f, -2.328384828e-03f, -2.561138325e-03f, -5.674942911e-04f, +4.027701168e-05f, +6.397599520e-05f, -6.948736784e-05f, -3.015784591e-04f, -2.408731346e-04f, +3.995062278e-04f, +1.115437151e-03f, +7.214386688e-04f, -1.367140312e-03f, -3.953356508e-03f, -4.686758351e-03f, -2.323854286e-03f, +1.731992329e-03f, +4.518481500e-03f, +4.247285863e-03f, +1.793929652e-03f, -4.996697028e-04f, -1.157342108e-03f, -5.327137747e-04f, +1.780106955e-04f, +3.237521202e-04f, +1.059062192e-04f, -5.593586166e-05f, -4.888208265e-05f, +3.889546936e-04f, +2.319523535e-03f, +1.468107769e-03f, -5.401625028e-03f, -9.384866057e-03f, +1.753865530e-03f, +1.894777237e-02f, +1.493271791e-02f, -1.452666490e-02f, -3.271902747e-02f, -9.408300692e-03f, +2.957362112e-02f, +3.270240635e-02f, -4.269038322e-03f, -3.214968736e-02f, -1.839618258e-02f, +1.220805628e-02f, +2.010608403e-02f, +4.079141051e-03f, -8.921916448e-03f, -6.375513006e-03f, +8.959090226e-04f, +2.561138325e-03f, +5.674942911e-04f, -4.027701168e-05f, -6.397599520e-05f, +1.252393043e-04f, +2.504379341e-04f, -7.308567245e-05f, -5.633528087e-04f, -3.488269012e-04f, +6.099830312e-04f, +9.999631993e-04f, -2.635766287e-05f, -1.244243205e-03f, -8.849137654e-04f, +6.734918225e-04f, +1.316193531e-03f, +2.586687636e-04f, -9.268998177e-04f, -7.487138261e-04f, +2.263159219e-04f, +5.951322091e-04f, +1.592177872e-04f, -2.338968232e-04f, -1.605115338e-04f, +5.593586166e-05f, +4.888208265e-05f, /* 6,19 (24) */ -3.486776819e-04f, -2.255547540e-03f, -2.747551813e-03f, +3.210223448e-03f, +1.332329945e-02f, +1.247115843e-02f, -1.267875805e-02f, -4.669784758e-02f, -4.128350925e-02f, +4.426966222e-02f, +1.898719098e-01f, +3.109186651e-01f, +3.231020161e-01f, +2.175202704e-01f, +6.889248817e-02f, -3.180457352e-02f, -5.037920507e-02f, -1.950940050e-02f, +9.675126909e-03f, +1.458634261e-02f, +5.089517565e-03f, -2.222478609e-03f, -2.617074187e-03f, -6.163763738e-04f, +3.850561505e-05f, +6.505879630e-05f, -6.256500263e-05f, -2.962094404e-04f, -2.515257613e-04f, +3.731699285e-04f, +1.103501229e-03f, +7.603527866e-04f, -1.283310884e-03f, -3.888554500e-03f, -4.710605181e-03f, -2.437172497e-03f, +1.609196375e-03f, +4.475067179e-03f, +4.299556399e-03f, +1.880316393e-03f, -4.499479043e-04f, -1.161899229e-03f, -5.594225224e-04f, +1.635283859e-04f, +3.271402533e-04f, +1.134907162e-04f, -5.377970800e-05f, -5.052002055e-05f, +3.486776819e-04f, +2.255547540e-03f, +1.593347073e-03f, -5.151187094e-03f, -9.457951729e-03f, +1.190512721e-03f, +1.859894547e-02f, +1.554270095e-02f, -1.352670170e-02f, -3.274538514e-02f, -1.065254390e-02f, +2.868870736e-02f, +3.337589817e-02f, -2.952844791e-03f, -3.189101859e-02f, -1.932308240e-02f, +1.145934245e-02f, +2.033239995e-02f, +4.674273261e-03f, -8.762698661e-03f, -6.609409829e-03f, +7.353974888e-04f, +2.617074187e-03f, +6.163763738e-04f, -3.850561505e-05f, -6.505879630e-05f, +1.180319106e-04f, +2.522029828e-04f, -5.645026705e-05f, -5.545934181e-04f, -3.708222693e-04f, +5.802418545e-04f, +1.009810214e-03f, +1.963992123e-05f, -1.224444521e-03f, -9.233882296e-04f, +6.278441214e-04f, +1.324975022e-03f, +3.050911452e-04f, -9.075928686e-04f, -7.740981547e-04f, +1.995147604e-04f, +5.989145286e-04f, +1.768431249e-04f, -2.290057391e-04f, -1.672993318e-04f, +5.377970800e-05f, +5.052002055e-05f, /* 6,20 (24) */ -3.101720669e-04f, -2.190488744e-03f, -2.810116815e-03f, +2.914014007e-03f, +1.307177369e-02f, +1.284432836e-02f, -1.157525682e-02f, -4.593749479e-02f, -4.256682013e-02f, +4.038110771e-02f, +1.851613046e-01f, +3.084814926e-01f, +3.247112125e-01f, +2.219953376e-01f, +7.319204457e-02f, -2.992425713e-02f, -5.082915297e-02f, -2.067129973e-02f, +9.115704387e-03f, +1.474987099e-02f, +5.416657818e-03f, -2.108987893e-03f, -2.670853895e-03f, -6.668963943e-04f, +3.672778576e-05f, +6.597518170e-05f, -5.578131674e-05f, -2.905667697e-04f, -2.615394385e-04f, +3.470107043e-04f, +1.090473064e-03f, +7.974395044e-04f, -1.200151202e-03f, -3.821919682e-03f, -4.731180255e-03f, -2.548603607e-03f, +1.485143182e-03f, +4.428430743e-03f, +4.349495642e-03f, +1.966873861e-03f, -3.984705076e-04f, -1.165095656e-03f, -5.860706170e-04f, +1.484173194e-04f, +3.301426497e-04f, +1.211532453e-04f, -5.143434051e-05f, -5.211888475e-05f, +3.101720669e-04f, +2.190488744e-03f, +1.711378984e-03f, -4.898984111e-03f, -9.514401996e-03f, +6.359193033e-04f, +1.822812320e-02f, +1.612294280e-02f, -1.251689149e-02f, -3.272574521e-02f, -1.187698842e-02f, +2.776531913e-02f, +3.400374229e-02f, -1.627869769e-03f, -3.158592745e-02f, -2.023067527e-02f, +1.068524430e-02f, +2.053191472e-02f, +5.273187789e-03f, -8.585855536e-03f, -6.838415569e-03f, +5.680981570e-04f, +2.670853895e-03f, +6.668963943e-04f, -3.672778576e-05f, -6.597518170e-05f, +1.108101859e-04f, +2.534709491e-04f, -4.007203065e-05f, -5.450944670e-04f, -3.919210484e-04f, +5.499607829e-04f, +1.018057400e-03f, +6.531733867e-05f, -1.202922818e-03f, -9.604536064e-04f, +5.812330620e-04f, +1.331834017e-03f, +3.513302258e-04f, -8.867574951e-04f, -7.985766012e-04f, +1.720245964e-04f, +6.017877439e-04f, +1.945338611e-04f, -2.235781227e-04f, -1.739593458e-04f, +5.143434051e-05f, +5.211888475e-05f, /* 6,21 (24) */ -2.734442811e-04f, -2.124513562e-03f, -2.865898132e-03f, +2.623447237e-03f, +1.281023425e-02f, +1.319133907e-02f, -1.048478376e-02f, -4.514005528e-02f, -4.376697134e-02f, +3.655918803e-02f, +1.804301243e-01f, +3.059328890e-01f, +3.261963557e-01f, +2.264237684e-01f, +7.754154022e-02f, -2.795738327e-02f, -5.122762348e-02f, -2.183639538e-02f, +8.529633770e-03f, +1.489828831e-02f, +5.746800468e-03f, -1.987834647e-03f, -2.722288236e-03f, -7.190152791e-04f, +3.494771420e-05f, +6.672925739e-05f, -4.914324270e-05f, -2.846666873e-04f, -2.709163893e-04f, +3.210590406e-04f, +1.076393514e-03f, +8.326968404e-04f, -1.117727050e-03f, -3.753528341e-03f, -4.748488696e-03f, -2.658064548e-03f, +1.359928574e-03f, +4.378591568e-03f, +4.397038482e-03f, +2.053526041e-03f, -3.452562339e-04f, -1.166896245e-03f, -6.126209686e-04f, +1.326828498e-04f, +3.327438508e-04f, +1.288834556e-04f, -4.889749865e-05f, -5.367361504e-05f, +2.734442811e-04f, +2.124513562e-03f, +1.822189170e-03f, -4.645513162e-03f, -9.554474027e-03f, +9.082483626e-05f, +1.783620215e-02f, +1.667290358e-02f, -1.149883409e-02f, -3.266042788e-02f, -1.307991124e-02f, +2.680486552e-02f, +3.458497535e-02f, -2.960357521e-04f, -3.123459722e-02f, -2.111743276e-02f, +9.886667696e-03f, +2.070393931e-02f, +5.874975533e-03f, -8.391321675e-03f, -7.061993691e-03f, +3.941388112e-04f, +2.722288236e-03f, +7.190152791e-04f, -3.494771420e-05f, -6.672925739e-05f, +1.035892036e-04f, +2.542508895e-04f, -2.397495925e-05f, -5.348842467e-04f, -4.121007614e-04f, +5.191942975e-04f, +1.024705255e-03f, +1.106054035e-04f, -1.179717742e-03f, -9.960548144e-04f, +5.337296543e-04f, +1.336753852e-03f, +3.973127796e-04f, -8.644146191e-04f, -8.221002559e-04f, +1.438818692e-04f, +6.037324270e-04f, +2.122596742e-04f, -2.176120983e-04f, -1.804745870e-04f, +4.889749865e-05f, +5.367361504e-05f, /* 6,22 (24) */ -2.384965669e-04f, -2.057784305e-03f, -2.915041375e-03f, +2.338780550e-03f, +1.253931786e-02f, +1.351239811e-02f, -9.408390245e-03f, -4.430735844e-02f, -4.488469839e-02f, +3.280565969e-02f, +1.756816356e-01f, +3.032748245e-01f, +3.275562843e-01f, +2.308023599e-01f, +8.193857870e-02f, -2.590385723e-02f, -5.157287971e-02f, -2.300329163e-02f, +7.917012801e-03f, +1.503097116e-02f, +6.079544319e-03f, -1.858951192e-03f, -2.771185734e-03f, -7.726888941e-04f, +3.316945658e-05f, +6.732530413e-05f, -4.265727503e-05f, -2.785254130e-04f, -2.796596949e-04f, +2.953444788e-04f, +1.061303886e-03f, +8.661248172e-04f, -1.036102654e-03f, -3.683457771e-03f, -4.762538634e-03f, -2.765474238e-03f, +1.233649549e-03f, +4.325572093e-03f, +4.442121581e-03f, +2.140195948e-03f, -2.903259489e-04f, -1.167266825e-03f, -6.390358040e-04f, +1.163313523e-04f, +3.349286204e-04f, +1.366705918e-04f, -4.616720663e-05f, -5.517907351e-05f, +2.384965669e-04f, +2.057784305e-03f, +1.925778373e-03f, -4.391262272e-03f, -9.578448986e-03f, -4.440594105e-04f, +1.742410139e-02f, +1.719209788e-02f, -1.047412883e-02f, -3.254982247e-02f, -1.425962898e-02f, +2.580881071e-02f, +3.511870501e-02f, +1.040718100e-03f, -3.083728444e-02f, -2.198184738e-02f, +9.064567440e-03f, +2.084782118e-02f, +6.478707960e-03f, -8.179062001e-03f, -7.279605790e-03f, +2.136642242e-04f, +2.771185734e-03f, +7.726888941e-04f, -3.316945658e-05f, -6.732530413e-05f, +9.638367424e-05f, +2.545526212e-04f, -8.182096944e-06f, -5.239918765e-04f, -4.313407968e-04f, +4.879971326e-04f, +1.029756914e-03f, +1.554359608e-04f, -1.154871522e-03f, -1.030139207e-03f, +4.854064019e-04f, +1.339720954e-03f, +4.429656241e-04f, -8.405878122e-04f, -8.446213427e-04f, +1.151245892e-04f, +6.047305176e-04f, +2.299896455e-04f, -2.111068049e-04f, -1.868279672e-04f, +4.616720663e-05f, +5.517907351e-05f, /* 6,23 (24) */ -2.053271103e-04f, -1.990459001e-03f, -2.957698650e-03f, +2.060255137e-03f, +1.225965817e-02f, +1.380774258e-02f, -8.347086359e-03f, -4.344123363e-02f, -4.592080104e-02f, +2.912220192e-02f, +1.709190970e-01f, +3.005093502e-01f, +3.287899338e-01f, +2.351279320e-01f, +8.638070028e-02f, -2.376366128e-02f, -5.186320566e-02f, -2.417055845e-02f, +7.277976997e-03f, +1.514730251e-02f, +6.414472939e-03f, -1.722280600e-03f, -2.817352941e-03f, -8.278679676e-04f, +3.139693059e-05f, +6.776776486e-05f, -3.632947036e-05f, -2.721591211e-04f, -2.877732716e-04f, +2.698955957e-04f, +1.045245885e-03f, +8.977254349e-04f, -9.553406348e-04f, -3.611786181e-03f, -4.773341188e-03f, -2.870753655e-03f, +1.106404188e-03f, +4.269397810e-03f, +4.484683449e-03f, +2.226805702e-03f, -2.337026664e-04f, -1.166174257e-03f, -6.652767031e-04f, +9.937023555e-05f, +3.366819736e-04f, +1.445035018e-04f, -4.324178486e-05f, -5.663005275e-05f, +2.053271103e-04f, +1.990459001e-03f, +2.022162048e-03f, -4.136709651e-03f, -9.586631083e-03f, -9.680512870e-04f, +1.699276059e-02f, +1.768009501e-02f, -9.444371919e-03f, -3.239438651e-02f, -1.541450050e-02f, +2.477867150e-02f, +3.560411141e-02f, +2.380439054e-03f, -3.039431882e-02f, -2.282243519e-02f, +8.219946097e-03f, +2.096294577e-02f, +7.083438478e-03f, -7.949072355e-03f, -7.490712594e-03f, +2.683625699e-05f, +2.817352941e-03f, +8.278679676e-04f, -3.139693059e-05f, -6.776776486e-05f, +8.920792150e-05f, +2.543866878e-04f, +7.284492294e-06f, -5.124472386e-04f, -4.496224237e-04f, +4.564241782e-04f, +1.033218118e-03f, +1.997419964e-04f, -1.128428889e-03f, -1.062656658e-03f, +4.363371811e-04f, +1.340724874e-03f, +4.882157442e-04f, -8.153032736e-04f, -8.660933128e-04f, +8.579228719e-05f, +6.047653749e-04f, +2.476923088e-04f, -2.040624157e-04f, -1.930023331e-04f, +4.324178486e-05f, +5.663005275e-05f, /* 6,24 (24) */ -1.739301798e-04f, -1.922691236e-03f, -2.994028120e-03f, +1.788096016e-03f, +1.197188490e-02f, +1.407763818e-02f, -7.301840474e-03f, -4.254350819e-02f, -4.687614167e-02f, +2.551041574e-02f, +1.661457558e-01f, +2.976385966e-01f, +3.298963380e-01f, +2.393973298e-01f, +9.086538373e-02f, -2.153685558e-02f, -5.209690833e-02f, -2.533673271e-02f, +6.612700294e-03f, +1.524667275e-02f, +6.751154913e-03f, -1.577777098e-03f, -2.860594726e-03f, -8.844980204e-04f, +2.963391142e-05f, +6.806123211e-05f, -3.016544842e-05f, -2.655839161e-04f, -2.952618468e-04f, +2.447399846e-04f, +1.028261548e-03f, +9.275026422e-04f, -8.755019491e-04f, -3.538592610e-03f, -4.780910436e-03f, -2.973825913e-03f, +9.782915545e-04f, +4.210097246e-03f, +4.524664529e-03f, +2.313276598e-03f, -1.754115491e-04f, -1.163586488e-03f, -6.913046371e-04f, +8.180795328e-05f, +3.379892059e-04f, +1.523706453e-04f, -4.011986105e-05f, -5.802128424e-05f, +1.739301798e-04f, +1.922691236e-03f, +2.111369969e-03f, -3.882322963e-03f, -9.579346591e-03f, -1.480498526e-03f, +1.654313817e-02f, +1.813651919e-02f, -8.411153801e-03f, -3.219464451e-02f, -1.654292939e-02f, +2.371601484e-02f, +3.604044859e-02f, +3.721163928e-03f, -2.990610308e-02f, -2.363773847e-02f, +7.353852784e-03f, +2.104873806e-02f, +7.688203853e-03f, -7.701380046e-03f, -7.694775010e-03f, -1.661660761e-04f, +2.860594726e-03f, +8.844980204e-04f, -2.963391142e-05f, -6.806123211e-05f, +8.207586033e-05f, +2.537643245e-04f, +2.240375052e-05f, -5.002809122e-04f, -4.669288026e-04f, +4.245303820e-04f, +1.035097187e-03f, +2.434577447e-04f, -1.100436991e-03f, -1.093559642e-03f, +3.865971177e-04f, +1.339758308e-03f, +5.329904173e-04f, -7.885898027e-04f, -8.864709371e-04f, +5.592596085e-05f, +6.038218276e-04f, +2.653357019e-04f, -1.964801581e-04f, -1.989805015e-04f, +4.011986105e-05f, +5.802128424e-05f, /* 6,25 (24) */ -1.442962683e-04f, -1.854630004e-03f, -3.024193569e-03f, +1.522512100e-03f, +1.167662305e-02f, +1.432237817e-02f, -6.273578926e-03f, -4.161600555e-02f, -4.775164362e-02f, +2.197182313e-02f, +1.613648454e-01f, +2.946647707e-01f, +3.308746295e-01f, +2.436074271e-01f, +9.539004826e-02f, -1.922357898e-02f, -5.227231988e-02f, -2.650031920e-02f, +5.921395657e-03f, +1.532848070e-02f, +7.089144119e-03f, -1.425406453e-03f, -2.900714587e-03f, -9.425193046e-04f, +2.788402811e-05f, +6.821043546e-05f, -2.417039358e-05f, -2.588158100e-04f, -3.021309355e-04f, +2.199042372e-04f, +1.010393195e-03f, +9.554623048e-04f, -7.966458449e-04f, -3.463956829e-03f, -4.785263390e-03f, -3.074616339e-03f, +8.494115912e-04f, +4.147701949e-03f, +4.562007266e-03f, +2.399529195e-03f, -1.154799069e-04f, -1.159472611e-03f, -7.170800082e-04f, +6.365401444e-05f, +3.388359222e-04f, +1.602601035e-04f, -3.680038110e-05f, -5.934744720e-05f, +1.442962683e-04f, +1.854630004e-03f, +2.193445829e-03f, -3.628558639e-03f, -9.556942840e-03f, -1.980779438e-03f, +1.607620937e-02f, +1.856104957e-02f, -7.376056614e-03f, -3.195118677e-02f, -1.764336638e-02f, +2.262245520e-02f, +3.642704571e-02f, +5.060922236e-03f, -2.937311266e-02f, -2.442632827e-02f, +6.467381847e-03f, +2.110466402e-02f, +8.292025680e-03f, -7.436044344e-03f, -7.891255168e-03f, -3.651465776e-04f, +2.900714587e-03f, +9.425193046e-04f, -2.788402811e-05f, -6.821043546e-05f, +7.500097594e-05f, +2.526974221e-04f, +3.715564929e-05f, -4.875241071e-04f, -4.832449927e-04f, +3.923706530e-04f, +1.035404989e-03f, +2.865187936e-04f, -1.070945305e-03f, -1.122803310e-03f, +3.362624619e-04f, +1.336817126e-03f, +5.772173382e-04f, -7.604787672e-04f, -9.057103977e-04f, +2.556801747e-05f, +6.018862218e-04f, +2.828874197e-04f, -1.883623296e-04f, -2.047452951e-04f, +3.680038110e-05f, +5.934744720e-05f, /* 6,26 (24) */ -1.164122402e-04f, -1.786419568e-03f, -3.048363962e-03f, +1.263696290e-03f, +1.137449211e-02f, +1.454228240e-02f, -5.263185731e-03f, -4.066054324e-02f, -4.854828947e-02f, +1.850786630e-02f, +1.565795820e-01f, +2.915901543e-01f, +3.317240411e-01f, +2.477551290e-01f, +9.995205552e-02f, -1.682404978e-02f, -5.238779979e-02f, -2.765979181e-02f, +5.204315649e-03f, +1.539213472e-02f, +7.427980041e-03f, -1.265146349e-03f, -2.937514968e-03f, -1.001866752e-03f, +2.615076039e-05f, +6.822022903e-05f, -1.834905721e-05f, -2.518706986e-04f, -3.083868143e-04f, +1.954139279e-04f, +9.916833680e-04f, +9.816121727e-04f, -7.188298137e-04f, -3.387959259e-03f, -4.786419960e-03f, -3.173052544e-03f, +7.198650226e-04f, +4.082246465e-03f, +4.596656183e-03f, +2.485483383e-03f, -5.393719231e-05f, -1.153802914e-03f, -7.425626902e-04f, +4.491899181e-05f, +3.392080658e-04f, +1.681595893e-04f, -3.328261961e-05f, -6.060317770e-05f, +1.164122402e-04f, +1.786419568e-03f, +2.268446805e-03f, -3.375861217e-03f, -9.519787191e-03f, -2.468303545e-03f, +1.559296437e-02f, +1.895342023e-02f, -6.340651625e-03f, -3.166466798e-02f, -1.871431169e-02f, +2.149965189e-02f, +3.676330817e-02f, +6.397739363e-03f, -2.879589532e-02f, -2.518680704e-02f, +5.561671449e-03f, +2.113023204e-02f, +8.893911902e-03f, -7.153156925e-03f, -8.079617498e-03f, -5.698918727e-04f, +2.937514968e-03f, +1.001866752e-03f, -2.615076039e-05f, -6.822022903e-05f, +6.799630432e-05f, +2.511984901e-04f, +5.152121081e-05f, -4.742085965e-04f, -4.985579560e-04f, +3.599997655e-04f, +1.034154896e-03f, +3.288621856e-04f, -1.040005548e-03f, -1.150345561e-03f, +2.854104603e-04f, +1.331900379e-03f, +6.208247442e-04f, -7.310040664e-04f, -9.237693767e-04f, -5.237786086e-06f, +5.989464665e-04f, +3.003146694e-04f, -1.797123137e-04f, -2.102795790e-04f, +3.328261961e-05f, +6.060317770e-05f, /* 6,27 (24) */ -9.026147983e-05f, -1.718199339e-03f, -3.066713019e-03f, +1.011825591e-03f, +1.106610530e-02f, +1.473769633e-02f, -4.271502363e-03f, -3.967893107e-02f, -4.926711928e-02f, +1.511990704e-02f, +1.517931620e-01f, +2.884171018e-01f, +3.324439062e-01f, +2.518373755e-01f, +1.045487117e-01f, -1.433856640e-02f, -5.244173698e-02f, -2.881359472e-02f, +4.461752959e-03f, +1.543705371e-02f, +7.767188107e-03f, -1.096986760e-03f, -2.970797587e-03f, -1.062469930e-03f, +2.443743580e-05f, +6.809557905e-05f, -1.270576066e-05f, -2.447643402e-04f, -3.140364966e-04f, +1.712936001e-04f, +9.721747743e-04f, +1.005961845e-03f, -6.421095461e-04f, -3.310680875e-03f, -4.784402921e-03f, -3.269064490e-03f, +5.897532510e-04f, +4.013768311e-03f, +4.628557951e-03f, +2.571058474e-03f, +9.185006537e-06f, -1.146548940e-03f, -7.677120714e-04f, +2.561452950e-05f, +3.390919485e-04f, +1.760564584e-04f, -2.956619010e-05f, -6.178307809e-05f, +9.026147983e-05f, +1.718199339e-03f, +2.336443110e-03f, -3.124662727e-03f, -9.468265980e-03f, -2.942512141e-03f, +1.509440642e-02f, +1.931341999e-02f, -5.306496729e-03f, -3.133580579e-02f, -1.975431723e-02f, +2.034930633e-02f, +3.704871863e-02f, +7.729639742e-03f, -2.817507058e-02f, -2.591781110e-02f, +4.637902073e-03f, +2.112499425e-02f, +9.492858368e-03f, -6.852842255e-03f, -8.259329812e-03f, -7.801714517e-04f, +2.970797587e-03f, +1.062469930e-03f, -2.443743580e-05f, -6.809557905e-05f, +6.107441404e-05f, +2.492806200e-04f, +6.548252658e-05f, -4.603666510e-04f, -5.128565571e-04f, +3.274722649e-04f, +1.031362745e-03f, +3.704265174e-04f, -1.007671578e-03f, -1.176147110e-03f, +2.341192274e-04f, +1.325010312e-03f, +6.637415389e-04f, -7.002020898e-04f, -9.406071432e-04f, -3.644640680e-05f, +5.949920767e-04f, +3.175843266e-04f, -1.705345927e-04f, -2.155662977e-04f, +2.956619010e-05f, +6.178307809e-05f, /* 6,28 (24) */ -6.582404402e-05f, -1.650103760e-03f, -3.079418780e-03f, +7.670612510e-04f, +1.075206880e-02f, +1.490898993e-02f, -3.299327589e-03f, -3.867296923e-02f, -4.990922883e-02f, +1.180922617e-02f, +1.470087591e-01f, +2.851480373e-01f, +3.330336594e-01f, +2.558511438e-01f, +1.091772697e-01f, -1.176750793e-02f, -5.243255197e-02f, -2.996014366e-02f, +3.694040888e-03f, +1.546266824e-02f, +8.106280055e-03f, -9.209303016e-04f, -3.000363778e-03f, -1.124253008e-03f, +2.274722726e-05f, +6.784155157e-05f, -7.244398905e-06f, -2.375123335e-04f, -3.190877058e-04f, +1.475667527e-04f, +9.519102335e-04f, +1.028522733e-03f, -5.665388902e-04f, -3.232203116e-03f, -4.779237872e-03f, -3.362584557e-03f, +4.591782538e-04f, +3.942307950e-03f, +4.657661463e-03f, +2.656173279e-03f, +7.385297568e-05f, -1.137683536e-03f, -7.924870975e-04f, +5.753348927e-06f, +3.384742792e-04f, +1.839377214e-04f, -2.565105489e-05f, -6.288172682e-05f, +6.582404402e-05f, +1.650103760e-03f, +2.397517524e-03f, -2.875382107e-03f, -9.402783454e-03f, -3.402878792e-03f, +1.458154986e-02f, +1.964089226e-02f, -4.275133985e-03f, -3.096537927e-02f, -2.076198881e-02f, +1.917315922e-02f, +3.728283786e-02f, +9.054650055e-03f, -2.751132904e-02f, -2.661801319e-02f, +3.697294929e-03f, +2.108854784e-02f, +1.008785045e-02f, -6.535257929e-03f, -8.429864404e-03f, -9.957377493e-04f, +3.000363778e-03f, +1.124253008e-03f, -2.274722726e-05f, -6.784155157e-05f, +5.424738949e-05f, +2.469574470e-04f, +7.902277375e-05f, -4.460309708e-04f, -5.261315604e-04f, +2.948423740e-04f, +1.027046790e-03f, +4.111520349e-04f, -9.739992989e-04f, -1.200171545e-03f, +1.824676140e-04f, +1.316152368e-03f, +7.058974164e-04f, -6.681116709e-04f, -9.561846390e-04f, -6.801158183e-05f, +5.900142142e-04f, +3.346629931e-04f, -1.608347588e-04f, -2.205885129e-04f, +2.565105489e-05f, +6.288172682e-05f, /* 6,29 (24) */ -4.307681677e-05f, -1.582262209e-03f, -3.086663179e-03f, +5.295489175e-04f, +1.043298110e-02f, +1.505655668e-02f, -2.347417355e-03f, -3.764444649e-02f, -5.047576772e-02f, +8.577023051e-03f, +1.422295212e-01f, +2.817854527e-01f, +3.334928377e-01f, +2.597934518e-01f, +1.138349311e-01f, -9.111334648e-03f, -5.235869900e-02f, -3.109782720e-02f, +2.901553790e-03f, +1.546842159e-02f, +8.444754334e-03f, -7.369925802e-04f, -3.026014832e-03f, -1.187134734e-03f, +2.108315094e-05f, +6.746330023e-05f, -1.968444869e-06f, -2.301300971e-04f, -3.235488489e-04f, +1.242558299e-04f, +9.309326212e-04f, +1.049308023e-03f, -4.921698130e-04f, -3.152607797e-03f, -4.770953197e-03f, -3.453547606e-03f, +3.282424799e-04f, +3.867908757e-03f, +4.683917896e-03f, +2.740746193e-03f, +1.400308877e-04f, -1.127180907e-03f, -8.168463171e-04f, -1.465074660e-05f, +3.373421937e-04f, +1.917900568e-04f, -2.153753453e-05f, -6.389368841e-05f, +4.307681677e-05f, +1.582262209e-03f, +2.451764913e-03f, -2.628424660e-03f, -9.323760680e-03f, -3.848909763e-03f, +1.405541830e-02f, +1.993573463e-02f, -3.248087194e-03f, -3.055422724e-02f, -2.173598811e-02f, +1.797298767e-02f, +3.746530547e-02f, +1.037080242e-02f, -2.680543162e-02f, -2.728612486e-02f, +2.741110290e-03f, +2.102053626e-02f, +1.067786466e-02f, -6.200594936e-03f, -8.590699163e-03f, -1.216326262e-03f, +3.026014832e-03f, +1.187134734e-03f, -2.108315094e-05f, -6.746330023e-05f, +4.752681547e-05f, +2.442431118e-04f, +9.212622896e-05f, -4.312346192e-04f, -5.383756226e-04f, +2.621639014e-04f, +1.021227655e-03f, +4.509807251e-04f, -9.390465563e-04f, -1.222385389e-03f, +1.305350756e-04f, +1.305335186e-03f, +7.472229839e-04f, -6.347740361e-04f, -9.704645605e-04f, -9.988589785e-05f, +5.840057251e-04f, +3.515170566e-04f, -1.506195234e-04f, -2.253294414e-04f, +2.153753453e-05f, +6.389368841e-05f, /* 6,30 (24) */ -2.199366583e-05f, -1.514798908e-03f, -3.088631624e-03f, +2.994188205e-04f, +1.010943225e-02f, +1.518081251e-02f, -1.416484734e-03f, -3.659513847e-02f, -5.096793753e-02f, +5.424415255e-03f, +1.374585680e-01f, +2.783319051e-01f, +3.338210801e-01f, +2.636613605e-01f, +1.185188490e-01f, -6.370588456e-03f, -5.221866811e-02f, -3.222500811e-02f, +2.084707473e-03f, +1.545377084e-02f, +8.782096528e-03f, -5.452025233e-04f, -3.047552367e-03f, -1.251028423e-03f, +1.944806459e-05f, +6.696605421e-05f, +3.119045703e-06f, -2.226328496e-04f, -3.274289891e-04f, +1.013822117e-04f, +9.092848150e-04f, +1.068332631e-03f, -4.190523637e-04f, -3.071977016e-03f, -4.759580019e-03f, -3.541891040e-03f, +1.970487457e-04f, +3.790616984e-03f, +4.707280779e-03f, +2.824695277e-03f, +2.076808167e-04f, -1.115016669e-03f, -8.407479278e-04f, -3.558286875e-05f, +3.356832843e-04f, +1.995998244e-04f, -1.722631685e-05f, -6.481352384e-05f, +2.199366583e-05f, +1.514798908e-03f, +2.499291729e-03f, -2.384181548e-03f, -9.231634451e-03f, -4.280144382e-03f, +1.351704268e-02f, +2.019789853e-02f, -2.226859539e-03f, -3.010324651e-02f, -2.267503467e-02f, +1.675060228e-02f, +3.759584055e-02f, +1.167613761e-02f, -2.605820864e-02f, -2.792089890e-02f, +1.770645730e-03f, +2.092065036e-02f, +1.126187038e-02f, -5.849077879e-03f, -8.741318686e-03f, -1.441655704e-03f, +3.047552367e-03f, +1.251028423e-03f, -1.944806459e-05f, -6.696605421e-05f, +4.092376319e-05f, +2.411522223e-04f, +1.047782799e-04f, -4.160109560e-04f, -5.495832833e-04f, +2.294901511e-04f, +1.013928274e-03f, +4.898564049e-04f, -9.028730329e-04f, -1.242758144e-03f, +7.840153916e-05f, +1.292570593e-03f, +7.876498834e-04f, -6.002327499e-04f, -9.834114395e-04f, -1.320208631e-04f, +5.769611755e-04f, +3.681127511e-04f, -1.398967235e-04f, -2.297724939e-04f, +1.722631685e-05f, +6.481352384e-05f, /* 6,31 (24) */ -2.545601248e-06f, -1.447832854e-03f, -3.085512578e-03f, +7.678597090e-05f, +9.782003259e-03f, +1.528219472e-02f, -5.071999193e-04f, -3.552680584e-02f, -5.138698989e-02f, +2.352438239e-03f, +1.326989880e-01f, +2.747900141e-01f, +3.340181289e-01f, +2.674519775e-01f, +1.232261298e-01f, -3.545893179e-03f, -5.201098729e-02f, -3.334002477e-02f, +1.243959545e-03f, +1.541818797e-02f, +9.117779812e-03f, -3.456026989e-04f, -3.064778684e-03f, -1.315841947e-03f, +1.784466616e-05f, +6.635510628e-05f, +8.015428714e-06f, -2.150355900e-04f, -3.307378182e-04f, +7.896620590e-05f, +8.870096413e-04f, +1.085613170e-03f, -3.472346398e-04f, -2.990393068e-03f, -4.745152154e-03f, -3.627554861e-03f, +6.570013011e-05f, +3.710481723e-03f, +4.727706059e-03f, +2.907938350e-03f, +2.767627563e-04f, -1.101167895e-03f, -8.641498231e-04f, -5.702704247e-05f, +3.334856284e-04f, +2.073530798e-04f, -1.271846563e-05f, -6.563580115e-05f, +2.545601248e-06f, +1.447832854e-03f, +2.540215492e-03f, -2.143029326e-03f, -9.126856171e-03f, -4.696155338e-03f, +1.296745939e-02f, +2.042738868e-02f, -1.212931265e-03f, -2.961339011e-02f, -2.357790770e-02f, +1.550784414e-02f, +3.767424209e-02f, +1.296870820e-02f, -2.527055875e-02f, -2.852113165e-02f, +7.872342904e-04f, +2.078862950e-02f, +1.183883156e-02f, -5.480965128e-03f, -8.881215410e-03f, -1.671428198e-03f, +3.064778684e-03f, +1.315841947e-03f, -1.784466616e-05f, -6.635510628e-05f, +3.444877766e-05f, +2.376998145e-04f, +1.169654343e-04f, -4.003935711e-04f, -5.597509504e-04f, +1.968738343e-04f, +1.005173835e-03f, +5.277248058e-04f, -8.655401410e-04f, -1.261262345e-03f, +2.614726878e-05f, +1.277873593e-03f, +8.271109120e-04f, -5.645336545e-04f, -9.949917205e-04f, -1.643669824e-04f, +5.688768839e-04f, +3.844162184e-04f, -1.286753269e-04f, -2.339013135e-04f, +1.271846563e-05f, +6.563580115e-05f, /* 7, 0 (20) */ -2.043579130e-03f, +4.413747039e-04f, +1.026461202e-02f, +1.278751817e-02f, -1.381693015e-02f, -5.194198196e-02f, -2.972362013e-02f, +1.035103880e-01f, +2.854090410e-01f, +3.717842184e-01f, +2.854090410e-01f, +1.035103880e-01f, -2.972362013e-02f, -5.194198196e-02f, -1.381693015e-02f, +1.278751817e-02f, +1.026461202e-02f, +4.413747039e-04f, -2.043579130e-03f, -5.028328800e-04f, +2.654823367e-05f, -2.048103015e-04f, -3.273891760e-04f, +2.952729392e-04f, +1.265534878e-03f, +7.182289642e-04f, -2.343404695e-03f, -5.554816971e-03f, -4.988355315e-03f, -9.184739889e-05f, +4.888817206e-03f, +5.610692295e-03f, +2.462668262e-03f, -6.579391952e-04f, -1.282487004e-03f, -3.272586910e-04f, +3.214273652e-04f, +2.137723839e-04f, -2.266422450e-05f, -4.246420638e-05f, +2.043579130e-03f, -2.603852842e-03f, -7.295781969e-03f, +1.777626449e-03f, +1.768131754e-02f, +9.370481930e-03f, -2.216869121e-02f, -2.781756318e-02f, +1.047598502e-02f, +3.732936584e-02f, +1.047598502e-02f, -2.781756318e-02f, -2.216869121e-02f, +9.370481930e-03f, +1.768131754e-02f, +1.777626449e-03f, -7.295781969e-03f, -2.603852842e-03f, +1.437219775e-03f, +5.028328800e-04f, -2.654823367e-05f, +2.052721633e-04f, -3.310665577e-06f, -5.210311924e-04f, -2.797446115e-04f, +7.822523602e-04f, +8.773782963e-04f, -6.119124701e-04f, -1.412578692e-03f, -3.077706798e-05f, +1.400145616e-03f, +6.628304558e-04f, -8.490965277e-04f, -8.103982468e-04f, +2.529848066e-04f, +5.306655498e-04f, +1.884155900e-05f, -2.073002217e-04f, -2.970926703e-05f, +4.246420638e-05f, /* 7, 1 (20) */ -2.017030896e-03f, +2.365644024e-04f, +9.937222845e-03f, +1.308279111e-02f, -1.255139528e-02f, -5.122375300e-02f, -3.206702483e-02f, +9.795557104e-02f, +2.804206857e-01f, +3.716923710e-01f, +2.902978582e-01f, +1.091210803e-01f, -2.726095187e-02f, -5.259992116e-02f, -1.509941716e-02f, +1.246025947e-02f, +1.058603939e-02f, +6.551470878e-04f, -2.066243355e-03f, -5.452970863e-04f, +3.017266954e-05f, -1.957865608e-04f, -3.325298824e-04f, +2.637867523e-04f, +1.247037532e-03f, +7.757306228e-04f, -2.224462527e-03f, -5.494930663e-03f, -5.083187578e-03f, -2.754502848e-04f, +4.784649184e-03f, +5.662453052e-03f, +2.582120611e-03f, -5.948759102e-04f, -1.297822783e-03f, -3.597015317e-04f, +3.146287443e-04f, +2.226507092e-04f, -1.851937276e-05f, -4.404280889e-05f, +2.017030896e-03f, -2.398580678e-03f, -7.299092635e-03f, +1.256595257e-03f, +1.740157293e-02f, +1.015273429e-02f, -2.129131292e-02f, -2.842947565e-02f, +9.063406332e-03f, +3.729858877e-02f, +1.187613064e-02f, -2.715473272e-02f, -2.301778774e-02f, +8.560083684e-03f, +1.793430235e-02f, +2.308291999e-03f, -7.276940410e-03f, -2.811153063e-03f, +1.407510508e-03f, +5.452970863e-04f, -3.017266954e-05f, +2.028102973e-04f, +1.179701523e-05f, -5.105611064e-04f, -3.054888055e-04f, +7.530520433e-04f, +9.037910865e-04f, -5.602491446e-04f, -1.422484159e-03f, -9.227396912e-05f, +1.385200332e-03f, +7.129021976e-04f, -8.189824236e-04f, -8.374202502e-04f, +2.252474774e-04f, +5.394258599e-04f, +3.477010676e-05f, -2.088760710e-04f, -3.568439400e-05f, +4.404280889e-05f, /* 7, 2 (20) */ -1.986858227e-03f, +4.077784161e-05f, +9.604692963e-03f, +1.334657786e-02f, -1.130435774e-02f, -5.044802238e-02f, -3.429148735e-02f, +9.246064038e-02f, +2.753374981e-01f, +3.714169207e-01f, +2.950825074e-01f, +1.147835334e-01f, -2.467883126e-02f, -5.319479707e-02f, -1.639723994e-02f, +1.210055794e-02f, +1.090066813e-02f, +8.777977970e-04f, -2.084762727e-03f, -5.893398952e-04f, +3.353938457e-05f, -1.867226703e-04f, -3.368663100e-04f, +2.328405920e-04f, +1.227066805e-03f, +8.304336728e-04f, -2.105972156e-03f, -5.431140880e-03f, -5.173243944e-03f, -4.587775555e-04f, +4.675932995e-03f, +5.709999753e-03f, +2.701627071e-03f, -5.290578424e-04f, -1.311471924e-03f, -3.925569985e-04f, +3.069787893e-04f, +2.314226199e-04f, -1.411301470e-05f, -4.555837060e-05f, +1.986858227e-03f, -2.195770381e-03f, -7.287295620e-03f, +7.460341506e-04f, +1.709608413e-02f, +1.090578633e-02f, -2.038752183e-02f, -2.898972479e-02f, +7.640922173e-03f, +3.720631480e-02f, +1.326133097e-02f, -2.644183052e-02f, -2.383677016e-02f, +7.722663433e-03f, +1.815954983e-02f, +2.847717859e-03f, -7.242170304e-03f, -3.020029134e-03f, +1.371826114e-03f, +5.893398952e-04f, -3.353938457e-05f, +1.999336602e-04f, +2.645749345e-05f, -4.992947547e-04f, -3.301820368e-04f, +7.228680859e-04f, +9.283023291e-04f, -5.079422657e-04f, -1.429851616e-03f, -1.535992829e-04f, +1.367763221e-03f, +7.620278883e-04f, -7.870766570e-04f, -8.632504201e-04f, +1.965733985e-04f, +5.472750577e-04f, +5.106921368e-05f, -2.099820088e-04f, -4.180480123e-05f, +4.555837060e-05f, /* 7, 3 (20) */ -1.953318842e-03f, -1.459448287e-04f, +9.267826653e-03f, +1.357941845e-02f, -1.007729094e-02f, -4.961758870e-02f, -3.639745951e-02f, +8.702949950e-02f, +2.701642542e-01f, +3.709581431e-01f, +2.997584404e-01f, +1.204935331e-01f, -2.197720419e-02f, -5.372385491e-02f, -1.770871186e-02f, +1.170800094e-02f, +1.120764692e-02f, +1.109220417e-03f, -2.098875742e-03f, -6.348982658e-04f, +3.665079142e-05f, -1.776395203e-04f, -3.404163420e-04f, +2.024728833e-04f, +1.205695118e-03f, +8.823316633e-04f, -1.988061608e-03f, -5.363558879e-03f, -5.258460319e-03f, -6.416458677e-04f, +4.562756102e-03f, +5.753237171e-03f, +2.821051081e-03f, -4.605079003e-04f, -1.323365107e-03f, -4.257786731e-04f, +2.984642181e-04f, +2.400649321e-04f, -9.445113488e-06f, -4.700299059e-05f, +1.953318842e-03f, -1.995836721e-03f, -7.260838126e-03f, +2.467393959e-04f, +1.676590209e-02f, +1.162865442e-02f, -1.945921950e-02f, -2.949766706e-02f, +6.211070557e-03f, +3.705271552e-02f, +1.462909419e-02f, -2.567980264e-02f, -2.462384682e-02f, +6.859413013e-03f, +1.835612323e-02f, +3.394992917e-03f, -7.191101090e-03f, -3.230011143e-03f, +1.330021313e-03f, +6.348982658e-04f, -3.665079142e-05f, +1.966618593e-04f, +4.064837437e-05f, -4.872726340e-04f, -3.537917286e-04f, +6.917724485e-04f, +9.508835635e-04f, -4.550942873e-04f, -1.434675664e-03f, -2.146390078e-04f, +1.347859614e-03f, +8.101090303e-04f, -7.534238774e-04f, -8.878224722e-04f, +1.670059789e-04f, +5.541774399e-04f, +6.771028362e-05f, -2.106010952e-04f, -4.805757752e-05f, +4.700299059e-05f, /* 7, 4 (20) */ -1.916668051e-03f, -3.235843490e-04f, +8.927410311e-03f, +1.378189133e-02f, -8.871595821e-03f, -4.873525704e-02f, -3.838552112e-02f, +8.166594062e-02f, +2.649057939e-01f, +3.703164973e-01f, +3.043211965e-01f, +1.262467703e-01f, -1.915615311e-02f, -5.418436281e-02f, -1.903207697e-02f, +1.128222227e-02f, +1.150611114e-02f, +1.349285349e-03f, -2.108320856e-03f, -6.819012564e-04f, +3.950983931e-05f, -1.685573558e-04f, -3.431988561e-04f, +1.727199946e-04f, +1.182995347e-03f, +9.314221367e-04f, -1.870856384e-03f, -5.292299490e-03f, -5.338778624e-03f, -8.238724784e-04f, +4.445211600e-03f, +5.792074499e-03f, +2.940254357e-03f, -3.892531985e-04f, -1.333434110e-03f, -4.593182172e-04f, +2.890730509e-04f, +2.485539700e-04f, -4.516279813e-06f, -4.836865338e-05f, +1.916668051e-03f, -1.799174861e-03f, -7.220189752e-03f, -2.405332382e-04f, +1.641211036e-02f, +1.232042687e-02f, -1.850833594e-02f, -2.995276134e-02f, +4.776394893e-03f, +3.683807651e-02f, +1.597695381e-02f, -2.486969360e-02f, -2.537727070e-02f, +5.971590541e-03f, +1.852312920e-02f, +3.949170357e-03f, -7.123390806e-03f, -3.440612238e-03f, +1.281963735e-03f, +6.819012564e-04f, -3.950983931e-05f, +1.930150079e-04f, +5.434888104e-05f, -4.745361639e-04f, -3.762881120e-04f, +6.598380943e-04f, +9.715104632e-04f, -4.018081145e-04f, -1.436955911e-03f, -2.752797265e-04f, +1.325519754e-03f, +8.570486475e-04f, -7.180726487e-04f, -9.110719496e-04f, +1.365912017e-04f, +5.600987715e-04f, +8.466325981e-05f, -2.107172154e-04f, -5.442903877e-05f, +4.836865338e-05f, /* 7, 5 (20) */ -1.877158212e-03f, -4.921417048e-04f, +8.584211455e-03f, +1.395461133e-02f, -7.688600474e-03f, -4.780383490e-02f, -4.025637750e-02f, +7.637364113e-02f, +2.595670152e-01f, +3.694926248e-01f, +3.087664081e-01f, +1.320388448e-01f, -1.621589875e-02f, -5.457361601e-02f, -2.036551108e-02f, +1.082290405e-02f, +1.179518419e-02f, +1.597839319e-03f, -2.112837135e-03f, -7.302699098e-04f, +4.211998972e-05f, -1.594957521e-04f, -3.452336613e-04f, +1.436162238e-04f, +1.159040700e-03f, +9.777065690e-04f, -1.754479317e-03f, -5.217480927e-03f, -5.414146844e-03f, -1.005275483e-03f, +4.323398105e-03f, +5.826425508e-03f, +3.059097074e-03f, -3.153250819e-04f, -1.341611938e-03f, -4.931254120e-04f, +2.787946686e-04f, +2.568656035e-04f, +6.722085081e-07f, -4.964724711e-05f, +1.877158212e-03f, -1.606159853e-03f, -7.165840871e-03f, -7.150694020e-04f, +1.603582225e-02f, +1.298026496e-02f, -1.753682547e-02f, -3.035456946e-02f, +3.339438982e-03f, +3.656279679e-02f, +1.730247356e-02f, -2.401264496e-02f, -2.609534335e-02f, +5.060518591e-03f, +1.865972041e-02f, +4.509269128e-03f, -7.038727546e-03f, -3.651329454e-03f, +1.227534696e-03f, +7.302699098e-04f, -4.211998972e-05f, +1.890136608e-04f, +6.753987228e-05f, -4.611275748e-04f, -3.976442523e-04f, +6.271388219e-04f, +9.901628520e-04f, -3.481868894e-04f, -1.436696948e-03f, -3.354088381e-04f, +1.300778745e-03f, +9.027514936e-04f, -6.810753783e-04f, -9.329363822e-04f, +1.053775565e-04f, +5.650063904e-04f, +1.018966696e-04f, -2.103151419e-04f, -6.090474729e-05f, +4.964724711e-05f, /* 7, 6 (20) */ -1.835038222e-03f, -6.516374570e-04f, +8.238977793e-03f, +1.409822755e-02f, -6.529559773e-03f, -4.682612834e-02f, -4.201085682e-02f, +7.115616020e-02f, +2.541528684e-01f, +3.684873493e-01f, +3.130898062e-01f, +1.378652703e-01f, -1.315680168e-02f, -5.488894109e-02f, -2.170712302e-02f, +1.032977864e-02f, +1.207397886e-02f, +1.854704923e-03f, -2.112164927e-03f, -7.799171569e-04f, +4.448519162e-05f, -1.504735926e-04f, -3.465414342e-04f, +1.151937864e-04f, +1.133904594e-03f, +1.021190305e-03f, -1.639050427e-03f, -5.139224605e-03f, -5.484519075e-03f, -1.185674053e-03f, +4.197419649e-03f, +5.856208695e-03f, +3.177438036e-03f, -2.387591440e-04f, -1.347832958e-03f, -5.271482026e-04f, +2.676198699e-04f, +2.649752862e-04f, +6.118387923e-06f, -5.083058236e-05f, +1.835038222e-03f, -1.417146193e-03f, -7.098300999e-03f, -1.176196977e-03f, +1.563817800e-02f, +1.360740378e-02f, -1.654666262e-02f, -3.070275635e-02f, +1.902742034e-03f, +3.622738795e-02f, +1.860325231e-02f, -2.310989346e-02f, -2.677641873e-02f, +4.127582209e-03f, +1.876509796e-02f, +5.074275519e-03f, -6.936830877e-03f, -3.861644596e-03f, +1.166629949e-03f, +7.799171569e-04f, -4.448519162e-05f, +1.846787500e-04f, +8.020385627e-05f, -4.470897965e-04f, -4.178360684e-04f, +5.937490967e-04f, +1.006824711e-03f, -2.943337751e-04f, -1.433908334e-03f, -3.949147877e-04f, +1.273676493e-03f, +9.471242589e-04f, -6.424882360e-04f, -9.533554423e-04f, +7.341596628e-05f, +5.688693095e-04f, +1.193776738e-04f, -2.093805949e-04f, -6.746953387e-05f, +5.083058236e-05f, /* 7, 7 (20) */ -1.790553030e-03f, -8.021110495e-04f, +7.892436359e-03f, +1.421342134e-02f, -5.395655180e-03f, -4.580493803e-02f, -4.364990725e-02f, +6.601693560e-02f, +2.486683493e-01f, +3.673016753e-01f, +3.172872259e-01f, +1.437214790e-01f, -9.979363640e-03f, -5.512770024e-02f, -2.305495598e-02f, +9.802630440e-03f, +1.234159873e-02f, +2.119680209e-03f, -2.106046539e-03f, -8.307477393e-04f, +4.660985620e-05f, -1.415090478e-04f, -3.471436552e-04f, +8.748280951e-05f, +1.107660528e-03f, +1.061882486e-03f, -1.524686796e-03f, -5.057654947e-03f, -5.549855554e-03f, -1.364888672e-03f, +4.067385554e-03f, +5.881347427e-03f, +3.295134865e-03f, -1.595952382e-04f, -1.352033024e-03f, -5.613327454e-04f, +2.555409276e-04f, +2.728580963e-04f, +1.181959165e-05f, -5.191041191e-05f, +1.790553030e-03f, -1.232467443e-03f, -7.018097142e-03f, -1.623286773e-03f, +1.522034193e-02f, +1.420115288e-02f, -1.553983791e-02f, -3.099709012e-02f, +4.688337005e-04f, +3.583247316e-02f, +1.987692880e-02f, -2.216276920e-02f, -2.741890696e-02f, +3.174226767e-03f, +1.883851393e-02f, +5.643144828e-03f, -6.817453203e-03f, -4.071025190e-03f, +1.099160415e-03f, +8.307477393e-04f, -4.660985620e-05f, +1.800315206e-04f, +9.232499980e-05f, -4.324663462e-04f, -4.368423451e-04f, +5.597438829e-04f, +1.021484178e-03f, -2.403517431e-04f, -1.428604554e-03f, -4.536872945e-04f, +1.244257631e-03f, +9.900757732e-04f, -6.023710661e-04f, -9.722710983e-04f, +4.075970651e-05f, +5.716583171e-04f, +1.370721197e-04f, -2.079003019e-04f, -7.410752232e-05f, +5.191041191e-05f, /* 7, 8 (20) */ -1.743943174e-03f, -9.436200974e-04f, +7.545292704e-03f, +1.430090415e-02f, -4.287994652e-03f, -4.474305555e-02f, -4.517459404e-02f, +6.095928065e-02f, +2.431184938e-01f, +3.659367866e-01f, +3.213546114e-01f, +1.496028264e-01f, -6.684228775e-03f, -5.528729548e-02f, -2.440698900e-02f, +9.241297694e-03f, +1.259713966e-02f, +2.392538305e-03f, -2.094226947e-03f, -8.826581512e-04f, +4.849883127e-05f, -1.326195579e-04f, -3.470625443e-04f, +6.051132815e-05f, +1.080381970e-03f, +1.099795979e-03f, -1.411502428e-03f, -4.972899193e-03f, -5.610122683e-03f, -1.542741369e-03f, +3.933410313e-03f, +5.901770077e-03f, +3.412044185e-03f, -7.787748289e-05f, -1.354149613e-03f, -5.956234609e-04f, +2.425516429e-04f, +2.804887793e-04f, +1.777243331e-05f, -5.287845114e-05f, +1.743943174e-03f, -1.052435922e-03f, -6.925772142e-03f, -2.055753119e-03f, +1.478349958e-02f, +1.476089676e-02f, -1.451835373e-02f, -3.123744187e-02f, -9.597708539e-04f, +3.537878587e-02f, +2.112118643e-02f, -2.117269343e-02f, -2.802127803e-02f, +2.201955669e-03f, +1.887927364e-02f, +6.214803145e-03f, -6.680381083e-03f, -4.278925492e-03f, +1.025052893e-03f, +8.826581512e-04f, -4.849883127e-05f, +1.750934673e-04f, +1.038891331e-04f, -4.173012173e-04f, -4.546447394e-04f, +5.251984770e-04f, +1.034133532e-03f, -1.863433608e-04f, -1.420804980e-03f, -5.116175765e-04f, +1.212571443e-03f, +1.031517205e-03f, -5.607872884e-04f, -9.896277631e-04f, +7.464318658e-06f, +5.733460737e-04f, +1.549445993e-04f, -2.058620556e-04f, -8.080215677e-05f, +5.287845114e-05f, /* 7, 9 (20) */ -1.695444343e-03f, -1.076239655e-03f, +7.198230160e-03f, +1.436141548e-02f, -3.207612682e-03f, -4.364325957e-02f, -4.658609647e-02f, +5.598638146e-02f, +2.375083711e-01f, +3.643940452e-01f, +3.252880217e-01f, +1.555045965e-01f, -3.272184590e-03f, -5.536517296e-02f, -2.576113861e-02f, +8.645674233e-03f, +1.283969130e-02f, +2.673027084e-03f, -2.076454514e-03f, -9.355366023e-04f, +5.015737533e-05f, -1.238218155e-04f, -3.463209978e-04f, +3.430528633e-05f, +1.052142236e-03f, +1.134947292e-03f, -1.299608136e-03f, -4.885087205e-03f, -5.665293048e-03f, -1.719055951e-03f, +3.795613445e-03f, +5.917410157e-03f, +3.528021810e-03f, +6.345740225e-06f, -1.354121950e-03f, -6.299630894e-04f, +2.286473977e-04f, +2.878417919e-04f, +2.397279188e-05f, -5.372639922e-05f, +1.695444343e-03f, -8.773424549e-04f, -6.821883009e-03f, -2.473054337e-03f, +1.432885484e-02f, +1.528609524e-02f, -1.348422020e-02f, -3.142378523e-02f, -2.380575833e-03f, +3.486716829e-02f, +2.233375787e-02f, -2.014117623e-02f, -2.858206532e-02f, +1.212327906e-03f, +1.888673795e-02f, +6.788149219e-03f, -6.525436484e-03f, -4.484787548e-03f, +9.442507362e-04f, +9.355366023e-04f, -5.015737533e-05f, +1.698862713e-04f, +1.148837505e-04f, -4.016387687e-04f, -4.712277792e-04f, +4.901883411e-04f, +1.044769181e-03f, -1.324105813e-04f, -1.410533806e-03f, -5.685985728e-04f, +1.178671770e-03f, +1.071362258e-03f, -5.178037930e-04f, -1.005372440e-03f, -2.641248286e-05f, +5.739072067e-04f, +1.729585111e-04f, -2.032547702e-04f, -8.753623134e-05f, +5.372639922e-05f, /* 7,10 (20) */ -1.645286968e-03f, -1.200061471e-03f, +6.851909162e-03f, +1.439572076e-02f, -2.155470446e-03f, -4.250831227e-02f, -4.788570461e-02f, +5.110129425e-02f, +2.318430780e-01f, +3.626749893e-01f, +3.290836352e-01f, +1.614220066e-01f, +2.558372196e-04f, -5.535882722e-02f, -2.711526056e-02f, +8.015711144e-03f, +1.306833870e-02f, +2.960868876e-03f, -2.052481722e-03f, -9.892630015e-04f, +5.159113137e-05f, -1.151317525e-04f, -3.449425240e-04f, +8.888541570e-06f, +1.023014376e-03f, +1.167356490e-03f, -1.189111422e-03f, -4.794351262e-03f, -5.715345420e-03f, -1.893658228e-03f, +3.654119363e-03f, +5.928206438e-03f, +3.642922938e-03f, +9.302179430e-05f, -1.351891138e-03f, -6.642927522e-04f, +2.138252061e-04f, +2.948913485e-04f, +3.041579779e-05f, -5.444596092e-05f, +1.645286968e-03f, -7.074561836e-04f, -6.706999259e-03f, -2.874693105e-03f, +1.385762706e-02f, +1.577628358e-02f, -1.243945102e-02f, -3.155619581e-02f, -3.791109640e-03f, +3.429856972e-02f, +2.351242964e-02f, -1.906981397e-02f, -2.909986911e-02f, +2.069554655e-04f, +1.886032547e-02f, +7.362056426e-03f, -6.352477973e-03f, -4.688042318e-03f, +8.567145049e-04f, +9.892630015e-04f, -5.159113137e-05f, +1.644317385e-04f, +1.252980066e-04f, -3.855236147e-04f, -4.865788560e-04f, +4.547889381e-04f, +1.053391624e-03f, -7.865453639e-05f, -1.397819994e-03f, -6.245251606e-04f, +1.142616908e-03f, +1.109527359e-03f, -4.734908251e-04f, -1.019454864e-03f, -6.081090988e-05f, +5.733184009e-04f, +1.910761257e-04f, -2.000685362e-04f, -9.429192253e-05f, +5.444596092e-05f, /* 7,11 (20) */ -1.593695836e-03f, -1.315193223e-03f, +6.506966638e-03f, +1.440460930e-02f, -1.132456070e-03f, -4.134095578e-02f, -4.907481603e-02f, +4.630694299e-02f, +2.261277326e-01f, +3.607813310e-01f, +3.327377545e-01f, +1.673502131e-01f, +3.898760157e-03f, -5.526580542e-02f, -2.846715170e-02f, +7.351418392e-03f, +1.328216390e-02f, +3.255760225e-03f, -2.022065924e-03f, -1.043708962e-03f, +5.280610052e-05f, -1.065645271e-04f, -3.429511805e-04f, -1.571712687e-05f, +9.930710598e-04f, +1.197047109e-03f, -1.080116366e-03f, -4.700825868e-03f, -5.760264760e-03f, -2.066376244e-03f, +3.509057213e-03f, +5.934103073e-03f, +3.756602344e-03f, +1.820938026e-04f, -1.347400287e-03f, -6.985520155e-04f, +1.980837627e-04f, +3.016114691e-04f, +3.709582054e-05f, -5.502886915e-05f, +1.593695836e-03f, -5.430244451e-04f, -6.581701252e-03f, -3.260216720e-03f, +1.337104821e-02f, +1.623107252e-02f, -1.138605940e-02f, -3.163485035e-02f, -5.188929633e-03f, +3.367404456e-02f, +2.465504655e-02f, -1.796028661e-02f, -2.957335993e-02f, -8.124993983e-04f, +1.879951456e-02f, +7.935374826e-03f, -6.161401847e-03f, -4.888110854e-03f, +7.624225823e-04f, +1.043708962e-03f, -5.280610052e-05f, +1.587517383e-04f, +1.351227089e-04f, -3.690005166e-04f, -5.006882110e-04f, +4.190755693e-04f, +1.060005420e-03f, -2.517533160e-05f, -1.382697186e-03f, -6.792943695e-04f, +1.104469498e-03f, +1.145931847e-03f, -4.279218625e-04f, -1.031827635e-03f, -9.566920556e-05f, +5.715584861e-04f, +2.092586564e-04f, -1.962946724e-04f, -1.010508240e-04f, +5.502886915e-05f, /* 7,12 (20) */ -1.540889736e-03f, -1.421757750e-03f, +6.164015457e-03f, +1.438889218e-02f, -1.393850104e-04f, -4.014390868e-02f, -5.015493239e-02f, +4.160611712e-02f, +2.203674679e-01f, +3.587149548e-01f, +3.362468117e-01f, +1.732843162e-01f, +7.655362501e-03f, -5.508371162e-02f, -2.981455199e-02f, +6.652866376e-03f, +1.348024766e-02f, +3.557371694e-03f, -1.984970104e-03f, -1.098737832e-03f, +5.380861561e-05f, -9.813451419e-05f, -3.403715108e-04f, -3.949200614e-05f, +9.623844684e-04f, +1.224046059e-03f, -9.727235245e-04f, -4.604647544e-03f, -5.800042201e-03f, -2.237040496e-03f, +3.360560727e-03f, +5.935049702e-03f, +3.868914579e-03f, +2.735006702e-04f, -1.340594641e-03f, -7.326789593e-04f, +1.814234896e-04f, +3.079760284e-04f, +4.400645762e-05f, -5.546690801e-05f, +1.540889736e-03f, -3.842727068e-04f, -6.446578543e-03f, -3.629217237e-03f, +1.287036000e-02f, +1.665014809e-02f, -1.032605398e-02f, -3.166002568e-02f, -6.571626820e-03f, +3.299475019e-02f, +2.575951605e-02f, -1.681435476e-02f, -3.000128180e-02f, -1.844327034e-03f, +1.870384536e-02f, +8.506933313e-03f, -5.952143191e-03f, -5.084405527e-03f, +6.613717584e-04f, +1.098737832e-03f, -5.380861561e-05f, +1.528681437e-04f, +1.443503056e-04f, -3.521142755e-04f, -5.135489144e-04f, +3.831232131e-04f, +1.064619140e-03f, +2.792815481e-05f, -1.365203629e-03f, -7.328055899e-04f, +1.064296405e-03f, +1.180498150e-03f, -3.811734851e-04f, -1.042446355e-03f, -1.309237554e-04f, +5.686085208e-04f, +2.274663326e-04f, -1.919257767e-04f, -1.077939837e-04f, +5.546690801e-05f, /* 7,13 (20) */ -1.487081120e-03f, -1.519892264e-03f, +5.823643947e-03f, +1.434940017e-02f, +8.229994580e-04f, -3.891986262e-02f, -5.112765592e-02f, +3.700146958e-02f, +2.145674257e-01f, +3.564779143e-01f, +3.396073725e-01f, +1.792193659e-01f, +1.152427708e-02f, -5.481021095e-02f, -3.115514663e-02f, +5.920187417e-03f, +1.366167115e-02f, +3.865347722e-03f, -1.940963646e-03f, -1.154204740e-03f, +5.460531467e-05f, -8.985529698e-05f, -3.372284827e-04f, -6.241843442e-05f, +9.310261863e-04f, +1.248383529e-03f, -8.670298343e-04f, -4.505954627e-03f, -5.834675030e-03f, -2.405484152e-03f, +3.208768052e-03f, +5.931001556e-03f, +3.979714171e-03f, +3.671771130e-04f, -1.331421700e-03f, -7.666102496e-04f, +1.638465809e-04f, +3.139588071e-04f, +5.114052502e-05f, -5.575193650e-05f, +1.487081120e-03f, -2.314045631e-04f, -6.302228238e-03f, -3.981331512e-03f, +1.235681108e-02f, +1.703327130e-02f, -9.261434836e-03f, -3.163209752e-02f, -7.936830448e-03f, +3.226194460e-02f, +2.682381246e-02f, -1.563385661e-02f, -3.038245528e-02f, -2.886773388e-03f, +1.857292160e-02f, +9.075541833e-03f, -5.724676858e-03f, -5.276331304e-03f, +5.535777746e-04f, +1.154204740e-03f, -5.460531467e-05f, +1.468027723e-04f, +1.529748702e-04f, -3.349096262e-04f, -5.251568388e-04f, +3.470063668e-04f, +1.067245309e-03f, +8.055846923e-05f, -1.345382071e-03f, -7.849607770e-04f, +1.022168591e-03f, +1.213151962e-03f, -3.333252362e-04f, -1.051269745e-03f, -1.665092036e-04f, +5.644518714e-04f, +2.456584776e-04f, -1.869557736e-04f, -1.145019438e-04f, +5.575193650e-05f, /* 7,14 (20) */ -1.432475805e-03f, -1.609747561e-03f, +5.486415464e-03f, +1.428698174e-02f, +1.754025644e-03f, -3.767147909e-02f, -5.199468575e-02f, +3.249551495e-02f, +2.087327506e-01f, +3.540724301e-01f, +3.428161405e-01f, +1.851503674e-01f, +1.550399125e-02f, -5.444303384e-02f, -3.248656833e-02f, +5.153577167e-03f, +1.382551773e-02f, +4.179306529e-03f, -1.889823121e-03f, -1.209956676e-03f, +5.520311442e-05f, -8.173966085e-05f, -3.335474258e-04f, -8.448078218e-05f, +8.990670975e-04f, +1.270092884e-03f, -7.631285195e-04f, -4.404887064e-03f, -5.864166663e-03f, -2.571543266e-03f, +3.053821581e-03f, +5.921919554e-03f, +4.088855821e-03f, +4.630536933e-04f, -1.319831346e-03f, -8.002812150e-04f, +1.453570448e-04f, +3.195335445e-04f, +5.849004917e-05f, -5.587591266e-05f, +1.432475805e-03f, -8.460179078e-05f, -6.149253368e-03f, -4.316241138e-03f, +1.183165424e-02f, +1.738027767e-02f, -8.194189527e-03f, -3.155153905e-02f, -9.282212520e-03f, +3.147698382e-02f, +2.784598105e-02f, -1.442070465e-02f, -3.071578052e-02f, -3.938043134e-03f, +1.840641240e-02f, +9.639993705e-03f, -5.479018381e-03f, -5.463287077e-03f, +4.390758309e-04f, +1.209956676e-03f, -5.520311442e-05f, +1.405773297e-04f, +1.609920818e-04f, -3.174311340e-04f, -5.355106268e-04f, +3.107988913e-04f, +1.067900350e-03f, +1.326197758e-04f, -1.323279664e-03f, -8.356646486e-04f, +9.781609726e-04f, +1.243822410e-03f, -2.844594777e-04f, -1.058259774e-03f, -2.023585751e-04f, +5.590742877e-04f, +2.637935894e-04f, -1.813799598e-04f, -1.211547821e-04f, +5.587591266e-05f, /* 7,15 (20) */ -1.377272691e-03f, -1.691487222e-03f, +5.152868038e-03f, +1.420250095e-02f, +2.653092742e-03f, -3.640138620e-02f, -5.275781427e-02f, +2.809062789e-02f, +2.028685840e-01f, +3.515008869e-01f, +3.458699621e-01f, +1.910722870e-01f, +1.959284707e-02f, -5.397998014e-02f, -3.380639968e-02f, +4.353295952e-03f, +1.397087478e-02f, +4.498840074e-03f, -1.831333072e-03f, -1.265832589e-03f, +5.560918391e-05f, -7.379958910e-05f, -3.293539716e-04f, -1.056654301e-04f, +8.665772837e-04f, +1.289210562e-03f, -6.611090096e-04f, -4.301586208e-03f, -5.888526601e-03f, -2.735056991e-03f, +2.895867777e-03f, +5.907770388e-03f, +4.196194611e-03f, +5.610568623e-04f, -1.305775965e-03f, -8.336259270e-04f, +1.259607436e-04f, +3.246739927e-04f, +6.604626058e-05f, -5.583091827e-05f, +1.377272691e-03f, +5.597553889e-05f, -5.988261286e-03f, -4.633672272e-03f, +1.129614362e-02f, +1.769107656e-02f, -7.126289177e-03f, -3.141891928e-02f, -1.060549218e-02f, +3.064131917e-02f, +2.882414202e-02f, -1.317688224e-02f, -3.100024000e-02f, -4.996302908e-03f, +1.820405382e-02f, +1.019906799e-02f, -5.215224791e-03f, -5.644667037e-03f, +3.179210487e-04f, +1.265832589e-03f, -5.560918391e-05f, +1.342133529e-04f, +1.683992018e-04f, -2.997230928e-04f, -5.446116517e-04f, +2.745738586e-04f, +1.066604505e-03f, +1.840180448e-04f, -1.298947844e-03f, -8.848248770e-04f, +9.323522747e-04f, +1.272442214e-03f, -2.346612363e-04f, -1.063381764e-03f, -2.384034027e-04f, +5.524639733e-04f, +2.818294260e-04f, -1.751950471e-04f, -1.277321569e-04f, +5.583091827e-05f, /* 7,16 (20) */ -1.321663507e-03f, -1.765286811e-03f, +4.823514067e-03f, +1.409683552e-02f, +3.519670025e-03f, -3.511217564e-02f, -5.341892328e-02f, +2.378904168e-02f, +1.969800574e-01f, +3.487658299e-01f, +3.487658299e-01f, +1.969800574e-01f, +2.378904168e-02f, -5.341892328e-02f, -3.511217564e-02f, +3.519670025e-03f, +1.409683552e-02f, +4.823514067e-03f, -1.765286811e-03f, -1.321663507e-03f, +5.583091827e-05f, -6.604626058e-05f, -3.246739927e-04f, -1.259607436e-04f, +8.336259270e-04f, +1.305775965e-03f, -5.610568623e-04f, -4.196194611e-03f, -5.907770388e-03f, -2.895867777e-03f, +2.735056991e-03f, +5.888526601e-03f, +4.301586208e-03f, +6.611090096e-04f, -1.289210562e-03f, -8.665772837e-04f, +1.056654301e-04f, +3.293539716e-04f, +7.379958910e-05f, -5.560918391e-05f, +1.321663507e-03f, +1.901888918e-04f, -5.819862084e-03f, -4.933395365e-03f, +1.075153197e-02f, +1.796565042e-02f, -6.059684672e-03f, -3.123490123e-02f, -1.190444003e-02f, +2.975649429e-02f, +2.975649429e-02f, -1.190444003e-02f, -3.123490123e-02f, -6.059684672e-03f, +1.796565042e-02f, +1.075153197e-02f, -4.933395365e-03f, -5.819862084e-03f, +1.901888918e-04f, +1.321663507e-03f, -5.583091827e-05f, +1.277321569e-04f, +1.751950471e-04f, -2.818294260e-04f, -5.524639733e-04f, +2.384034027e-04f, +1.063381764e-03f, +2.346612363e-04f, -1.272442214e-03f, -9.323522747e-04f, +8.848248770e-04f, +1.298947844e-03f, -1.840180448e-04f, -1.066604505e-03f, -2.745738586e-04f, +5.446116517e-04f, +2.997230928e-04f, -1.683992018e-04f, -1.342133529e-04f, +5.560918391e-05f, /* 7,17 (20) */ -1.265832589e-03f, -1.831333072e-03f, +4.498840074e-03f, +1.397087478e-02f, +4.353295952e-03f, -3.380639968e-02f, -5.397998014e-02f, +1.959284707e-02f, +1.910722870e-01f, +3.458699621e-01f, +3.515008869e-01f, +2.028685840e-01f, +2.809062789e-02f, -5.275781427e-02f, -3.640138620e-02f, +2.653092742e-03f, +1.420250095e-02f, +5.152868038e-03f, -1.691487222e-03f, -1.377272691e-03f, +5.587591266e-05f, -5.849004917e-05f, -3.195335445e-04f, -1.453570448e-04f, +8.002812150e-04f, +1.319831346e-03f, -4.630536933e-04f, -4.088855821e-03f, -5.921919554e-03f, -3.053821581e-03f, +2.571543266e-03f, +5.864166663e-03f, +4.404887064e-03f, +7.631285195e-04f, -1.270092884e-03f, -8.990670975e-04f, +8.448078218e-05f, +3.335474258e-04f, +8.173966085e-05f, -5.520311442e-05f, +1.265832589e-03f, +3.179210487e-04f, -5.644667037e-03f, -5.215224791e-03f, +1.019906799e-02f, +1.820405382e-02f, -4.996302908e-03f, -3.100024000e-02f, -1.317688224e-02f, +2.882414202e-02f, +3.064131917e-02f, -1.060549218e-02f, -3.141891928e-02f, -7.126289177e-03f, +1.769107656e-02f, +1.129614362e-02f, -4.633672272e-03f, -5.988261286e-03f, +5.597553889e-05f, +1.377272691e-03f, -5.587591266e-05f, +1.211547821e-04f, +1.813799598e-04f, -2.637935894e-04f, -5.590742877e-04f, +2.023585751e-04f, +1.058259774e-03f, +2.844594777e-04f, -1.243822410e-03f, -9.781609726e-04f, +8.356646486e-04f, +1.323279664e-03f, -1.326197758e-04f, -1.067900350e-03f, -3.107988913e-04f, +5.355106268e-04f, +3.174311340e-04f, -1.609920818e-04f, -1.405773297e-04f, +5.520311442e-05f, /* 7,18 (20) */ -1.209956676e-03f, -1.889823121e-03f, +4.179306529e-03f, +1.382551773e-02f, +5.153577167e-03f, -3.248656833e-02f, -5.444303384e-02f, +1.550399125e-02f, +1.851503674e-01f, +3.428161405e-01f, +3.540724301e-01f, +2.087327506e-01f, +3.249551495e-02f, -5.199468575e-02f, -3.767147909e-02f, +1.754025644e-03f, +1.428698174e-02f, +5.486415464e-03f, -1.609747561e-03f, -1.432475805e-03f, +5.575193650e-05f, -5.114052502e-05f, -3.139588071e-04f, -1.638465809e-04f, +7.666102496e-04f, +1.331421700e-03f, -3.671771130e-04f, -3.979714171e-03f, -5.931001556e-03f, -3.208768052e-03f, +2.405484152e-03f, +5.834675030e-03f, +4.505954627e-03f, +8.670298343e-04f, -1.248383529e-03f, -9.310261863e-04f, +6.241843442e-05f, +3.372284827e-04f, +8.985529698e-05f, -5.460531467e-05f, +1.209956676e-03f, +4.390758309e-04f, -5.463287077e-03f, -5.479018381e-03f, +9.639993705e-03f, +1.840641240e-02f, -3.938043134e-03f, -3.071578052e-02f, -1.442070465e-02f, +2.784598105e-02f, +3.147698382e-02f, -9.282212520e-03f, -3.155153905e-02f, -8.194189527e-03f, +1.738027767e-02f, +1.183165424e-02f, -4.316241138e-03f, -6.149253368e-03f, -8.460179078e-05f, +1.432475805e-03f, -5.575193650e-05f, +1.145019438e-04f, +1.869557736e-04f, -2.456584776e-04f, -5.644518714e-04f, +1.665092036e-04f, +1.051269745e-03f, +3.333252362e-04f, -1.213151962e-03f, -1.022168591e-03f, +7.849607770e-04f, +1.345382071e-03f, -8.055846923e-05f, -1.067245309e-03f, -3.470063668e-04f, +5.251568388e-04f, +3.349096262e-04f, -1.529748702e-04f, -1.468027723e-04f, +5.460531467e-05f, /* 7,19 (20) */ -1.154204740e-03f, -1.940963646e-03f, +3.865347722e-03f, +1.366167115e-02f, +5.920187417e-03f, -3.115514663e-02f, -5.481021095e-02f, +1.152427708e-02f, +1.792193659e-01f, +3.396073725e-01f, +3.564779143e-01f, +2.145674257e-01f, +3.700146958e-02f, -5.112765592e-02f, -3.891986262e-02f, +8.229994580e-04f, +1.434940017e-02f, +5.823643947e-03f, -1.519892264e-03f, -1.487081120e-03f, +5.546690801e-05f, -4.400645762e-05f, -3.079760284e-04f, -1.814234896e-04f, +7.326789593e-04f, +1.340594641e-03f, -2.735006702e-04f, -3.868914579e-03f, -5.935049702e-03f, -3.360560727e-03f, +2.237040496e-03f, +5.800042201e-03f, +4.604647544e-03f, +9.727235245e-04f, -1.224046059e-03f, -9.623844684e-04f, +3.949200614e-05f, +3.403715108e-04f, +9.813451419e-05f, -5.380861561e-05f, +1.154204740e-03f, +5.535777746e-04f, -5.276331304e-03f, -5.724676858e-03f, +9.075541833e-03f, +1.857292160e-02f, -2.886773388e-03f, -3.038245528e-02f, -1.563385661e-02f, +2.682381246e-02f, +3.226194460e-02f, -7.936830448e-03f, -3.163209752e-02f, -9.261434836e-03f, +1.703327130e-02f, +1.235681108e-02f, -3.981331512e-03f, -6.302228238e-03f, -2.314045631e-04f, +1.487081120e-03f, -5.546690801e-05f, +1.077939837e-04f, +1.919257767e-04f, -2.274663326e-04f, -5.686085208e-04f, +1.309237554e-04f, +1.042446355e-03f, +3.811734851e-04f, -1.180498150e-03f, -1.064296405e-03f, +7.328055899e-04f, +1.365203629e-03f, -2.792815481e-05f, -1.064619140e-03f, -3.831232131e-04f, +5.135489144e-04f, +3.521142755e-04f, -1.443503056e-04f, -1.528681437e-04f, +5.380861561e-05f, /* 7,20 (20) */ -1.098737832e-03f, -1.984970104e-03f, +3.557371694e-03f, +1.348024766e-02f, +6.652866376e-03f, -2.981455199e-02f, -5.508371162e-02f, +7.655362501e-03f, +1.732843162e-01f, +3.362468117e-01f, +3.587149548e-01f, +2.203674679e-01f, +4.160611712e-02f, -5.015493239e-02f, -4.014390868e-02f, -1.393850104e-04f, +1.438889218e-02f, +6.164015457e-03f, -1.421757750e-03f, -1.540889736e-03f, +5.502886915e-05f, -3.709582054e-05f, -3.016114691e-04f, -1.980837627e-04f, +6.985520155e-04f, +1.347400287e-03f, -1.820938026e-04f, -3.756602344e-03f, -5.934103073e-03f, -3.509057213e-03f, +2.066376244e-03f, +5.760264760e-03f, +4.700825868e-03f, +1.080116366e-03f, -1.197047109e-03f, -9.930710598e-04f, +1.571712687e-05f, +3.429511805e-04f, +1.065645271e-04f, -5.280610052e-05f, +1.098737832e-03f, +6.613717584e-04f, -5.084405527e-03f, -5.952143191e-03f, +8.506933313e-03f, +1.870384536e-02f, -1.844327034e-03f, -3.000128180e-02f, -1.681435476e-02f, +2.575951605e-02f, +3.299475019e-02f, -6.571626820e-03f, -3.166002568e-02f, -1.032605398e-02f, +1.665014809e-02f, +1.287036000e-02f, -3.629217237e-03f, -6.446578543e-03f, -3.842727068e-04f, +1.540889736e-03f, -5.502886915e-05f, +1.010508240e-04f, +1.962946724e-04f, -2.092586564e-04f, -5.715584861e-04f, +9.566920556e-05f, +1.031827635e-03f, +4.279218625e-04f, -1.145931847e-03f, -1.104469498e-03f, +6.792943695e-04f, +1.382697186e-03f, +2.517533160e-05f, -1.060005420e-03f, -4.190755693e-04f, +5.006882110e-04f, +3.690005166e-04f, -1.351227089e-04f, -1.587517383e-04f, +5.280610052e-05f, /* 7,21 (20) */ -1.043708962e-03f, -2.022065924e-03f, +3.255760225e-03f, +1.328216390e-02f, +7.351418392e-03f, -2.846715170e-02f, -5.526580542e-02f, +3.898760157e-03f, +1.673502131e-01f, +3.327377545e-01f, +3.607813310e-01f, +2.261277326e-01f, +4.630694299e-02f, -4.907481603e-02f, -4.134095578e-02f, -1.132456070e-03f, +1.440460930e-02f, +6.506966638e-03f, -1.315193223e-03f, -1.593695836e-03f, +5.444596092e-05f, -3.041579779e-05f, -2.948913485e-04f, -2.138252061e-04f, +6.642927522e-04f, +1.351891138e-03f, -9.302179430e-05f, -3.642922938e-03f, -5.928206438e-03f, -3.654119363e-03f, +1.893658228e-03f, +5.715345420e-03f, +4.794351262e-03f, +1.189111422e-03f, -1.167356490e-03f, -1.023014376e-03f, -8.888541570e-06f, +3.449425240e-04f, +1.151317525e-04f, -5.159113137e-05f, +1.043708962e-03f, +7.624225823e-04f, -4.888110854e-03f, -6.161401847e-03f, +7.935374826e-03f, +1.879951456e-02f, -8.124993983e-04f, -2.957335993e-02f, -1.796028661e-02f, +2.465504655e-02f, +3.367404456e-02f, -5.188929633e-03f, -3.163485035e-02f, -1.138605940e-02f, +1.623107252e-02f, +1.337104821e-02f, -3.260216720e-03f, -6.581701252e-03f, -5.430244451e-04f, +1.593695836e-03f, -5.444596092e-05f, +9.429192253e-05f, +2.000685362e-04f, -1.910761257e-04f, -5.733184009e-04f, +6.081090988e-05f, +1.019454864e-03f, +4.734908251e-04f, -1.109527359e-03f, -1.142616908e-03f, +6.245251606e-04f, +1.397819994e-03f, +7.865453639e-05f, -1.053391624e-03f, -4.547889381e-04f, +4.865788560e-04f, +3.855236147e-04f, -1.252980066e-04f, -1.644317385e-04f, +5.159113137e-05f, /* 7,22 (20) */ -9.892630015e-04f, -2.052481722e-03f, +2.960868876e-03f, +1.306833870e-02f, +8.015711144e-03f, -2.711526056e-02f, -5.535882722e-02f, +2.558372196e-04f, +1.614220066e-01f, +3.290836352e-01f, +3.626749893e-01f, +2.318430780e-01f, +5.110129425e-02f, -4.788570461e-02f, -4.250831227e-02f, -2.155470446e-03f, +1.439572076e-02f, +6.851909162e-03f, -1.200061471e-03f, -1.645286968e-03f, +5.372639922e-05f, -2.397279188e-05f, -2.878417919e-04f, -2.286473977e-04f, +6.299630894e-04f, +1.354121950e-03f, -6.345740225e-06f, -3.528021810e-03f, -5.917410157e-03f, -3.795613445e-03f, +1.719055951e-03f, +5.665293048e-03f, +4.885087205e-03f, +1.299608136e-03f, -1.134947292e-03f, -1.052142236e-03f, -3.430528633e-05f, +3.463209978e-04f, +1.238218155e-04f, -5.015737533e-05f, +9.892630015e-04f, +8.567145049e-04f, -4.688042318e-03f, -6.352477973e-03f, +7.362056426e-03f, +1.886032547e-02f, +2.069554655e-04f, -2.909986911e-02f, -1.906981397e-02f, +2.351242964e-02f, +3.429856972e-02f, -3.791109640e-03f, -3.155619581e-02f, -1.243945102e-02f, +1.577628358e-02f, +1.385762706e-02f, -2.874693105e-03f, -6.706999259e-03f, -7.074561836e-04f, +1.645286968e-03f, -5.372639922e-05f, +8.753623134e-05f, +2.032547702e-04f, -1.729585111e-04f, -5.739072067e-04f, +2.641248286e-05f, +1.005372440e-03f, +5.178037930e-04f, -1.071362258e-03f, -1.178671770e-03f, +5.685985728e-04f, +1.410533806e-03f, +1.324105813e-04f, -1.044769181e-03f, -4.901883411e-04f, +4.712277792e-04f, +4.016387687e-04f, -1.148837505e-04f, -1.698862713e-04f, +5.015737533e-05f, /* 7,23 (20) */ -9.355366023e-04f, -2.076454514e-03f, +2.673027084e-03f, +1.283969130e-02f, +8.645674233e-03f, -2.576113861e-02f, -5.536517296e-02f, -3.272184590e-03f, +1.555045965e-01f, +3.252880217e-01f, +3.643940452e-01f, +2.375083711e-01f, +5.598638146e-02f, -4.658609647e-02f, -4.364325957e-02f, -3.207612682e-03f, +1.436141548e-02f, +7.198230160e-03f, -1.076239655e-03f, -1.695444343e-03f, +5.287845114e-05f, -1.777243331e-05f, -2.804887793e-04f, -2.425516429e-04f, +5.956234609e-04f, +1.354149613e-03f, +7.787748289e-05f, -3.412044185e-03f, -5.901770077e-03f, -3.933410313e-03f, +1.542741369e-03f, +5.610122683e-03f, +4.972899193e-03f, +1.411502428e-03f, -1.099795979e-03f, -1.080381970e-03f, -6.051132815e-05f, +3.470625443e-04f, +1.326195579e-04f, -4.849883127e-05f, +9.355366023e-04f, +9.442507362e-04f, -4.484787548e-03f, -6.525436484e-03f, +6.788149219e-03f, +1.888673795e-02f, +1.212327906e-03f, -2.858206532e-02f, -2.014117623e-02f, +2.233375787e-02f, +3.486716829e-02f, -2.380575833e-03f, -3.142378523e-02f, -1.348422020e-02f, +1.528609524e-02f, +1.432885484e-02f, -2.473054337e-03f, -6.821883009e-03f, -8.773424549e-04f, +1.695444343e-03f, -5.287845114e-05f, +8.080215677e-05f, +2.058620556e-04f, -1.549445993e-04f, -5.733460737e-04f, -7.464318658e-06f, +9.896277631e-04f, +5.607872884e-04f, -1.031517205e-03f, -1.212571443e-03f, +5.116175765e-04f, +1.420804980e-03f, +1.863433608e-04f, -1.034133532e-03f, -5.251984770e-04f, +4.546447394e-04f, +4.173012173e-04f, -1.038891331e-04f, -1.750934673e-04f, +4.849883127e-05f, /* 7,24 (20) */ -8.826581512e-04f, -2.094226947e-03f, +2.392538305e-03f, +1.259713966e-02f, +9.241297694e-03f, -2.440698900e-02f, -5.528729548e-02f, -6.684228775e-03f, +1.496028264e-01f, +3.213546114e-01f, +3.659367866e-01f, +2.431184938e-01f, +6.095928065e-02f, -4.517459404e-02f, -4.474305555e-02f, -4.287994652e-03f, +1.430090415e-02f, +7.545292704e-03f, -9.436200974e-04f, -1.743943174e-03f, +5.191041191e-05f, -1.181959165e-05f, -2.728580963e-04f, -2.555409276e-04f, +5.613327454e-04f, +1.352033024e-03f, +1.595952382e-04f, -3.295134865e-03f, -5.881347427e-03f, -4.067385554e-03f, +1.364888672e-03f, +5.549855554e-03f, +5.057654947e-03f, +1.524686796e-03f, -1.061882486e-03f, -1.107660528e-03f, -8.748280951e-05f, +3.471436552e-04f, +1.415090478e-04f, -4.660985620e-05f, +8.826581512e-04f, +1.025052893e-03f, -4.278925492e-03f, -6.680381083e-03f, +6.214803145e-03f, +1.887927364e-02f, +2.201955669e-03f, -2.802127803e-02f, -2.117269343e-02f, +2.112118643e-02f, +3.537878587e-02f, -9.597708539e-04f, -3.123744187e-02f, -1.451835373e-02f, +1.476089676e-02f, +1.478349958e-02f, -2.055753119e-03f, -6.925772142e-03f, -1.052435922e-03f, +1.743943174e-03f, -5.191041191e-05f, +7.410752232e-05f, +2.079003019e-04f, -1.370721197e-04f, -5.716583171e-04f, -4.075970651e-05f, +9.722710983e-04f, +6.023710661e-04f, -9.900757732e-04f, -1.244257631e-03f, +4.536872945e-04f, +1.428604554e-03f, +2.403517431e-04f, -1.021484178e-03f, -5.597438829e-04f, +4.368423451e-04f, +4.324663462e-04f, -9.232499980e-05f, -1.800315206e-04f, +4.660985620e-05f, /* 7,25 (20) */ -8.307477393e-04f, -2.106046539e-03f, +2.119680209e-03f, +1.234159873e-02f, +9.802630440e-03f, -2.305495598e-02f, -5.512770024e-02f, -9.979363640e-03f, +1.437214790e-01f, +3.172872259e-01f, +3.673016753e-01f, +2.486683493e-01f, +6.601693560e-02f, -4.364990725e-02f, -4.580493803e-02f, -5.395655180e-03f, +1.421342134e-02f, +7.892436359e-03f, -8.021110495e-04f, -1.790553030e-03f, +5.083058236e-05f, -6.118387923e-06f, -2.649752862e-04f, -2.676198699e-04f, +5.271482026e-04f, +1.347832958e-03f, +2.387591440e-04f, -3.177438036e-03f, -5.856208695e-03f, -4.197419649e-03f, +1.185674053e-03f, +5.484519075e-03f, +5.139224605e-03f, +1.639050427e-03f, -1.021190305e-03f, -1.133904594e-03f, -1.151937864e-04f, +3.465414342e-04f, +1.504735926e-04f, -4.448519162e-05f, +8.307477393e-04f, +1.099160415e-03f, -4.071025190e-03f, -6.817453203e-03f, +5.643144828e-03f, +1.883851393e-02f, +3.174226767e-03f, -2.741890696e-02f, -2.216276920e-02f, +1.987692880e-02f, +3.583247316e-02f, +4.688337005e-04f, -3.099709012e-02f, -1.553983791e-02f, +1.420115288e-02f, +1.522034193e-02f, -1.623286773e-03f, -7.018097142e-03f, -1.232467443e-03f, +1.790553030e-03f, -5.083058236e-05f, +6.746953387e-05f, +2.093805949e-04f, -1.193776738e-04f, -5.688693095e-04f, -7.341596628e-05f, +9.533554423e-04f, +6.424882360e-04f, -9.471242589e-04f, -1.273676493e-03f, +3.949147877e-04f, +1.433908334e-03f, +2.943337751e-04f, -1.006824711e-03f, -5.937490967e-04f, +4.178360684e-04f, +4.470897965e-04f, -8.020385627e-05f, -1.846787500e-04f, +4.448519162e-05f, /* 7,26 (20) */ -7.799171569e-04f, -2.112164927e-03f, +1.854704923e-03f, +1.207397886e-02f, +1.032977864e-02f, -2.170712302e-02f, -5.488894109e-02f, -1.315680168e-02f, +1.378652703e-01f, +3.130898062e-01f, +3.684873493e-01f, +2.541528684e-01f, +7.115616020e-02f, -4.201085682e-02f, -4.682612834e-02f, -6.529559773e-03f, +1.409822755e-02f, +8.238977793e-03f, -6.516374570e-04f, -1.835038222e-03f, +4.964724711e-05f, -6.722085081e-07f, -2.568656035e-04f, -2.787946686e-04f, +4.931254120e-04f, +1.341611938e-03f, +3.153250819e-04f, -3.059097074e-03f, -5.826425508e-03f, -4.323398105e-03f, +1.005275483e-03f, +5.414146844e-03f, +5.217480927e-03f, +1.754479317e-03f, -9.777065690e-04f, -1.159040700e-03f, -1.436162238e-04f, +3.452336613e-04f, +1.594957521e-04f, -4.211998972e-05f, +7.799171569e-04f, +1.166629949e-03f, -3.861644596e-03f, -6.936830877e-03f, +5.074275519e-03f, +1.876509796e-02f, +4.127582209e-03f, -2.677641873e-02f, -2.310989346e-02f, +1.860325231e-02f, +3.622738795e-02f, +1.902742034e-03f, -3.070275635e-02f, -1.654666262e-02f, +1.360740378e-02f, +1.563817800e-02f, -1.176196977e-03f, -7.098300999e-03f, -1.417146193e-03f, +1.835038222e-03f, -4.964724711e-05f, +6.090474729e-05f, +2.103151419e-04f, -1.018966696e-04f, -5.650063904e-04f, -1.053775565e-04f, +9.329363822e-04f, +6.810753783e-04f, -9.027514936e-04f, -1.300778745e-03f, +3.354088381e-04f, +1.436696948e-03f, +3.481868894e-04f, -9.901628520e-04f, -6.271388219e-04f, +3.976442523e-04f, +4.611275748e-04f, -6.753987228e-05f, -1.890136608e-04f, +4.211998972e-05f, /* 7,27 (20) */ -7.302699098e-04f, -2.112837135e-03f, +1.597839319e-03f, +1.179518419e-02f, +1.082290405e-02f, -2.036551108e-02f, -5.457361601e-02f, -1.621589875e-02f, +1.320388448e-01f, +3.087664081e-01f, +3.694926248e-01f, +2.595670152e-01f, +7.637364113e-02f, -4.025637750e-02f, -4.780383490e-02f, -7.688600474e-03f, +1.395461133e-02f, +8.584211455e-03f, -4.921417048e-04f, -1.877158212e-03f, +4.836865338e-05f, +4.516279813e-06f, -2.485539700e-04f, -2.890730509e-04f, +4.593182172e-04f, +1.333434110e-03f, +3.892531985e-04f, -2.940254357e-03f, -5.792074499e-03f, -4.445211600e-03f, +8.238724784e-04f, +5.338778624e-03f, +5.292299490e-03f, +1.870856384e-03f, -9.314221367e-04f, -1.182995347e-03f, -1.727199946e-04f, +3.431988561e-04f, +1.685573558e-04f, -3.950983931e-05f, +7.302699098e-04f, +1.227534696e-03f, -3.651329454e-03f, -7.038727546e-03f, +4.509269128e-03f, +1.865972041e-02f, +5.060518591e-03f, -2.609534335e-02f, -2.401264496e-02f, +1.730247356e-02f, +3.656279679e-02f, +3.339438982e-03f, -3.035456946e-02f, -1.753682547e-02f, +1.298026496e-02f, +1.603582225e-02f, -7.150694020e-04f, -7.165840871e-03f, -1.606159853e-03f, +1.877158212e-03f, -4.836865338e-05f, +5.442903877e-05f, +2.107172154e-04f, -8.466325981e-05f, -5.600987715e-04f, -1.365912017e-04f, +9.110719496e-04f, +7.180726487e-04f, -8.570486475e-04f, -1.325519754e-03f, +2.752797265e-04f, +1.436955911e-03f, +4.018081145e-04f, -9.715104632e-04f, -6.598380943e-04f, +3.762881120e-04f, +4.745361639e-04f, -5.434888104e-05f, -1.930150079e-04f, +3.950983931e-05f, /* 7,28 (20) */ -6.819012564e-04f, -2.108320856e-03f, +1.349285349e-03f, +1.150611114e-02f, +1.128222227e-02f, -1.903207697e-02f, -5.418436281e-02f, -1.915615311e-02f, +1.262467703e-01f, +3.043211965e-01f, +3.703164973e-01f, +2.649057939e-01f, +8.166594062e-02f, -3.838552112e-02f, -4.873525704e-02f, -8.871595821e-03f, +1.378189133e-02f, +8.927410311e-03f, -3.235843490e-04f, -1.916668051e-03f, +4.700299059e-05f, +9.445113488e-06f, -2.400649321e-04f, -2.984642181e-04f, +4.257786731e-04f, +1.323365107e-03f, +4.605079003e-04f, -2.821051081e-03f, -5.753237171e-03f, -4.562756102e-03f, +6.416458677e-04f, +5.258460319e-03f, +5.363558879e-03f, +1.988061608e-03f, -8.823316633e-04f, -1.205695118e-03f, -2.024728833e-04f, +3.404163420e-04f, +1.776395203e-04f, -3.665079142e-05f, +6.819012564e-04f, +1.281963735e-03f, -3.440612238e-03f, -7.123390806e-03f, +3.949170357e-03f, +1.852312920e-02f, +5.971590541e-03f, -2.537727070e-02f, -2.486969360e-02f, +1.597695381e-02f, +3.683807651e-02f, +4.776394893e-03f, -2.995276134e-02f, -1.850833594e-02f, +1.232042687e-02f, +1.641211036e-02f, -2.405332382e-04f, -7.220189752e-03f, -1.799174861e-03f, +1.916668051e-03f, -4.700299059e-05f, +4.805757752e-05f, +2.106010952e-04f, -6.771028362e-05f, -5.541774399e-04f, -1.670059789e-04f, +8.878224722e-04f, +7.534238774e-04f, -8.101090303e-04f, -1.347859614e-03f, +2.146390078e-04f, +1.434675664e-03f, +4.550942873e-04f, -9.508835635e-04f, -6.917724485e-04f, +3.537917286e-04f, +4.872726340e-04f, -4.064837437e-05f, -1.966618593e-04f, +3.665079142e-05f, /* 7,29 (20) */ -6.348982658e-04f, -2.098875742e-03f, +1.109220417e-03f, +1.120764692e-02f, +1.170800094e-02f, -1.770871186e-02f, -5.372385491e-02f, -2.197720419e-02f, +1.204935331e-01f, +2.997584404e-01f, +3.709581431e-01f, +2.701642542e-01f, +8.702949950e-02f, -3.639745951e-02f, -4.961758870e-02f, -1.007729094e-02f, +1.357941845e-02f, +9.267826653e-03f, -1.459448287e-04f, -1.953318842e-03f, +4.555837060e-05f, +1.411301470e-05f, -2.314226199e-04f, -3.069787893e-04f, +3.925569985e-04f, +1.311471924e-03f, +5.290578424e-04f, -2.701627071e-03f, -5.709999753e-03f, -4.675932995e-03f, +4.587775555e-04f, +5.173243944e-03f, +5.431140880e-03f, +2.105972156e-03f, -8.304336728e-04f, -1.227066805e-03f, -2.328405920e-04f, +3.368663100e-04f, +1.867226703e-04f, -3.353938457e-05f, +6.348982658e-04f, +1.330021313e-03f, -3.230011143e-03f, -7.191101090e-03f, +3.394992917e-03f, +1.835612323e-02f, +6.859413013e-03f, -2.462384682e-02f, -2.567980264e-02f, +1.462909419e-02f, +3.705271552e-02f, +6.211070557e-03f, -2.949766706e-02f, -1.945921950e-02f, +1.162865442e-02f, +1.676590209e-02f, +2.467393959e-04f, -7.260838126e-03f, -1.995836721e-03f, +1.953318842e-03f, -4.555837060e-05f, +4.180480123e-05f, +2.099820088e-04f, -5.106921368e-05f, -5.472750577e-04f, -1.965733985e-04f, +8.632504201e-04f, +7.870766570e-04f, -7.620278883e-04f, -1.367763221e-03f, +1.535992829e-04f, +1.429851616e-03f, +5.079422657e-04f, -9.283023291e-04f, -7.228680859e-04f, +3.301820368e-04f, +4.992947547e-04f, -2.645749345e-05f, -1.999336602e-04f, +3.353938457e-05f, /* 7,30 (20) */ -5.893398952e-04f, -2.084762727e-03f, +8.777977970e-04f, +1.090066813e-02f, +1.210055794e-02f, -1.639723994e-02f, -5.319479707e-02f, -2.467883126e-02f, +1.147835334e-01f, +2.950825074e-01f, +3.714169207e-01f, +2.753374981e-01f, +9.246064038e-02f, -3.429148735e-02f, -5.044802238e-02f, -1.130435774e-02f, +1.334657786e-02f, +9.604692963e-03f, +4.077784161e-05f, -1.986858227e-03f, +4.404280889e-05f, +1.851937276e-05f, -2.226507092e-04f, -3.146287443e-04f, +3.597015317e-04f, +1.297822783e-03f, +5.948759102e-04f, -2.582120611e-03f, -5.662453052e-03f, -4.784649184e-03f, +2.754502848e-04f, +5.083187578e-03f, +5.494930663e-03f, +2.224462527e-03f, -7.757306228e-04f, -1.247037532e-03f, -2.637867523e-04f, +3.325298824e-04f, +1.957865608e-04f, -3.017266954e-05f, +5.893398952e-04f, +1.371826114e-03f, -3.020029134e-03f, -7.242170304e-03f, +2.847717859e-03f, +1.815954983e-02f, +7.722663433e-03f, -2.383677016e-02f, -2.644183052e-02f, +1.326133097e-02f, +3.720631480e-02f, +7.640922173e-03f, -2.898972479e-02f, -2.038752183e-02f, +1.090578633e-02f, +1.709608413e-02f, +7.460341506e-04f, -7.287295620e-03f, -2.195770381e-03f, +1.986858227e-03f, -4.404280889e-05f, +3.568439400e-05f, +2.088760710e-04f, -3.477010676e-05f, -5.394258599e-04f, -2.252474774e-04f, +8.374202502e-04f, +8.189824236e-04f, -7.129021976e-04f, -1.385200332e-03f, +9.227396912e-05f, +1.422484159e-03f, +5.602491446e-04f, -9.037910865e-04f, -7.530520433e-04f, +3.054888055e-04f, +5.105611064e-04f, -1.179701523e-05f, -2.028102973e-04f, +3.017266954e-05f, /* 7,31 (20) */ -5.452970863e-04f, -2.066243355e-03f, +6.551470878e-04f, +1.058603939e-02f, +1.246025947e-02f, -1.509941716e-02f, -5.259992116e-02f, -2.726095187e-02f, +1.091210803e-01f, +2.902978582e-01f, +3.716923710e-01f, +2.804206857e-01f, +9.795557104e-02f, -3.206702483e-02f, -5.122375300e-02f, -1.255139528e-02f, +1.308279111e-02f, +9.937222845e-03f, +2.365644024e-04f, -2.017030896e-03f, +4.246420638e-05f, +2.266422450e-05f, -2.137723839e-04f, -3.214273652e-04f, +3.272586910e-04f, +1.282487004e-03f, +6.579391952e-04f, -2.462668262e-03f, -5.610692295e-03f, -4.888817206e-03f, +9.184739889e-05f, +4.988355315e-03f, +5.554816971e-03f, +2.343404695e-03f, -7.182289642e-04f, -1.265534878e-03f, -2.952729392e-04f, +3.273891760e-04f, +2.048103015e-04f, -2.654823367e-05f, +5.452970863e-04f, +1.407510508e-03f, -2.811153063e-03f, -7.276940410e-03f, +2.308291999e-03f, +1.793430235e-02f, +8.560083684e-03f, -2.301778774e-02f, -2.715473272e-02f, +1.187613064e-02f, +3.729858877e-02f, +9.063406332e-03f, -2.842947565e-02f, -2.129131292e-02f, +1.015273429e-02f, +1.740157293e-02f, +1.256595257e-03f, -7.299092635e-03f, -2.398580678e-03f, +2.017030896e-03f, -4.246420638e-05f, +2.970926703e-05f, +2.073002217e-04f, -1.884155900e-05f, -5.306655498e-04f, -2.529848066e-04f, +8.103982468e-04f, +8.490965277e-04f, -6.628304558e-04f, -1.400145616e-03f, +3.077706798e-05f, +1.412578692e-03f, +6.119124701e-04f, -8.773782963e-04f, -7.822523602e-04f, +2.797446115e-04f, +5.210311924e-04f, +3.310665577e-06f, -2.052721633e-04f, +2.654823367e-05f, /* 8, 0 (20) */ +0.000000000e+00f, -2.162478138e-03f, +2.968830052e-03f, +1.456514462e-02f, +3.864387390e-03f, -4.257150003e-02f, -5.189231134e-02f, +7.569282484e-02f, +2.958850260e-01f, +4.091135842e-01f, +2.958850260e-01f, +7.569282484e-02f, -5.189231134e-02f, -4.257150003e-02f, +3.864387390e-03f, +1.456514462e-02f, +2.968830052e-03f, -2.162478138e-03f, -6.063593551e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.618617492e-07f, -3.306998416e-04f, -2.257582532e-04f, +9.857902663e-04f, +1.500481324e-03f, -1.466026399e-03f, -6.166729441e-03f, -6.400934007e-03f, -1.226244669e-04f, +6.288962822e-03f, +6.273522751e-03f, +1.613571734e-03f, -1.468337442e-03f, -1.029502197e-03f, +2.034068588e-04f, +3.402689242e-04f, +6.472162169e-06f, -5.237349152e-05f, +0.000000000e+00f, +0.000000000e+00f, -6.255434474e-04f, -5.708818371e-03f, -2.108551328e-03f, +1.418929790e-02f, +1.339449588e-02f, -1.745001859e-02f, -2.945354373e-02f, +8.130342331e-03f, +3.732936584e-02f, +8.130342331e-03f, -2.945354373e-02f, -1.745001859e-02f, +1.339449588e-02f, +1.418929790e-02f, -2.108551328e-03f, -5.708818371e-03f, -6.255434474e-04f, +6.470832082e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.212460831e-04f, +1.186460577e-04f, -3.756000324e-04f, -4.540503574e-04f, +5.830089752e-04f, +1.025476853e-03f, -4.527856805e-04f, -1.499376150e-03f, -3.408818562e-05f, +1.490537654e-03f, +5.111716778e-04f, -1.005631891e-03f, -6.194541872e-04f, +4.361168879e-04f, +3.920153858e-04f, -1.097030990e-04f, -1.267209228e-04f, +2.133747723e-05f, +0.000000000e+00f, /* 8, 1 (20) */ +0.000000000e+00f, -2.162016276e-03f, +2.638130210e-03f, +1.433938636e-02f, +4.850177656e-03f, -4.107101871e-02f, -5.335833774e-02f, +6.952609540e-02f, +2.894840920e-01f, +4.089909597e-01f, +3.021739889e-01f, +8.196634759e-02f, -5.027873961e-02f, -4.403983748e-02f, +2.834885193e-03f, +1.476855147e-02f, +3.309098976e-03f, -2.156005975e-03f, -6.587328467e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.023736503e-06f, -3.207328672e-04f, -2.467743542e-04f, +9.415487266e-04f, +1.528782666e-03f, -1.320671441e-03f, -6.055179807e-03f, -6.505671737e-03f, -3.677242540e-04f, +6.169849517e-03f, +6.375355250e-03f, +1.763138187e-03f, -1.432296160e-03f, -1.072575305e-03f, +1.797243282e-04f, +3.493988511e-04f, +1.377463820e-05f, -5.420376676e-05f, +0.000000000e+00f, +0.000000000e+00f, -5.042973643e-04f, -5.590172313e-03f, -2.484151361e-03f, +1.373524754e-02f, +1.397750486e-02f, -1.642454174e-02f, -2.990632942e-02f, +6.630966181e-03f, +3.729527765e-02f, +9.620879985e-03f, -2.894237206e-02f, -1.845565048e-02f, +1.277504170e-02f, +1.462541478e-02f, -1.716535943e-03f, -5.818521470e-03f, -7.522643702e-04f, +6.684206855e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.156522294e-04f, +1.269625761e-04f, -3.587843512e-04f, -4.706157560e-04f, +5.459703823e-04f, +1.043026549e-03f, -3.939675859e-04f, -1.505248756e-03f, -1.021939107e-04f, +1.478740802e-03f, +5.689991241e-04f, -9.835082565e-04f, -6.552154762e-04f, +4.168291511e-04f, +4.079788706e-04f, -1.001380708e-04f, -1.320541391e-04f, +1.932808259e-05f, +0.000000000e+00f, /* 8, 2 (20) */ +0.000000000e+00f, -2.154992539e-03f, +2.317397343e-03f, +1.409261201e-02f, +5.791726383e-03f, -3.954223604e-02f, -5.467900918e-02f, +6.347091559e-02f, +2.829784203e-01f, +4.086232355e-01f, +3.083438384e-01f, +8.834170284e-02f, -4.851560142e-02f, -4.547213364e-02f, +1.762309887e-03f, +1.494827580e-02f, +3.658497827e-03f, -2.142231337e-03f, -7.129366134e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.321098992e-05f, -3.104088166e-04f, -2.664541626e-04f, +8.968847683e-04f, +1.553301759e-03f, -1.177669827e-03f, -5.939083145e-03f, -6.603095559e-03f, -6.123768384e-04f, +6.043696216e-03f, +6.472027641e-03f, +1.914550414e-03f, -1.392308263e-03f, -1.114898525e-03f, +1.547180591e-04f, +3.580480029e-04f, +2.144061112e-05f, -5.591781592e-05f, +0.000000000e+00f, +0.000000000e+00f, -3.886451349e-04f, -5.463209737e-03f, -2.842935712e-03f, +1.326463178e-02f, +1.452347524e-02f, -1.538151519e-02f, -3.030029700e-02f, +5.125717425e-03f, +3.719308374e-02f, +1.109962079e-02f, -2.837337293e-02f, -1.943915874e-02f, +1.211982622e-02f, +1.504224393e-02f, -1.308557072e-03f, -5.918659541e-03f, -8.843185093e-04f, +6.877487681e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.099615968e-04f, +1.346501531e-04f, -3.416197214e-04f, -4.858028393e-04f, +5.084290207e-04f, +1.058269733e-03f, -3.348439216e-04f, -1.508154461e-03f, -1.700878596e-04f, +1.463999657e-03f, +6.261419350e-04f, -9.591278986e-04f, -6.902025932e-04f, +3.962045354e-04f, +4.234389215e-04f, -8.995724925e-05f, -1.372228099e-04f, +1.710004392e-05f, +0.000000000e+00f, /* 8, 3 (20) */ +0.000000000e+00f, -2.141781549e-03f, +2.006988527e-03f, +1.382615785e-02f, +6.688611151e-03f, -3.798893429e-02f, -5.585667901e-02f, +5.753183244e-02f, +2.763753247e-01f, +4.080108587e-01f, +3.143875346e-01f, +9.481373048e-02f, -4.660105101e-02f, -4.686444190e-02f, +6.474113621e-04f, +1.510299386e-02f, +4.016545830e-03f, -2.120790726e-03f, -7.688544293e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.902233903e-05f, -2.997679676e-04f, -2.847997507e-04f, +8.519033891e-04f, +1.574104112e-03f, -1.037178045e-03f, -5.818653167e-03f, -6.693135983e-03f, -8.562848755e-04f, +5.910615717e-03f, +6.563346201e-03f, +2.067627203e-03f, -1.348330372e-03f, -1.156359128e-03f, +1.283987668e-04f, +3.661745017e-04f, +2.946383688e-05f, -5.750269101e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.786835381e-04f, -5.328559584e-03f, -3.184555433e-03f, +1.277882894e-02f, +1.503190426e-02f, -1.432324546e-02f, -3.063514092e-02f, +3.617562964e-03f, +3.702299588e-02f, +1.256362044e-02f, -2.774723100e-02f, -2.039828664e-02f, +1.142962363e-02f, +1.543844847e-02f, -8.851181504e-04f, -6.008616790e-03f, -1.021541319e-03f, +7.048488120e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.041959854e-04f, +1.417081185e-04f, -3.241572278e-04f, -4.996048872e-04f, +4.704753514e-04f, +1.071200476e-03f, -2.755409949e-04f, -1.508098759e-03f, -2.376293875e-04f, +1.446334796e-03f, +6.824746924e-04f, -9.325181251e-04f, -7.243258077e-04f, +3.742640308e-04f, +4.383440878e-04f, -7.916884454e-05f, -1.422037663e-04f, +1.465200696e-05f, +0.000000000e+00f, /* 8, 4 (20) */ +0.000000000e+00f, -2.122759210e-03f, +1.707220559e-03f, +1.354135809e-02f, +7.540514540e-03f, -3.641483017e-02f, -5.689385706e-02f, +5.171317928e-02f, +2.696821888e-01f, +4.071545738e-01f, +3.202981503e-01f, +1.013770767e-01f, -4.453342381e-02f, -4.821277227e-02f, -5.089477662e-04f, +1.523139263e-02f, +4.382720332e-03f, -2.091326889e-03f, -8.263571204e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.445765210e-05f, -2.888499750e-04f, -3.018161692e-04f, +8.067072348e-04f, +1.591260231e-03f, -8.993459211e-04f, -5.694107605e-03f, -6.775734534e-03f, -1.099152205e-03f, +5.770731354e-03f, +6.649123146e-03f, +2.222181709e-03f, -1.300325148e-03f, -1.196842908e-03f, +1.007805544e-04f, +3.737363107e-04f, +3.783675462e-05f, -5.894531858e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.744875527e-04f, -5.186851466e-03f, -3.508712661e-03f, +1.227922406e-02f, +1.550237961e-02f, -1.325204498e-02f, -3.091068192e-02f, +2.109464205e-03f, +3.678536650e-02f, +1.400995524e-02f, -2.706475631e-02f, -2.133080476e-02f, +1.070529782e-02f, +1.581271250e-02f, -4.467740626e-04f, -6.087785635e-03f, -1.163745085e-03f, +7.195008189e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.837670411e-05f, +1.481375893e-04f, -3.064475298e-04f, -5.120186609e-04f, +4.321994666e-04f, +1.081818129e-03f, -2.161846012e-04f, -1.505093613e-03f, -3.046786581e-04f, +1.425773284e-03f, +7.378729408e-04f, -9.037115885e-04f, -7.574961350e-04f, +3.510322360e-04f, +4.526431748e-04f, -6.778302618e-05f, -1.469736598e-04f, +1.198340192e-05f, +0.000000000e+00f, /* 8, 5 (20) */ +0.000000000e+00f, -2.098301558e-03f, +1.418370584e-03f, +1.323954193e-02f, +8.347221775e-03f, -3.482356994e-02f, -5.779320298e-02f, +4.601907167e-02f, +2.629064542e-01f, +4.060554216e-01f, +3.260688817e-01f, +1.080261998e-01f, -4.231124210e-02f, -4.951309742e-02f, -1.705790674e-03f, +1.533217318e-02f, +4.756456642e-03f, -2.053490135e-03f, -8.853024389e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.951790863e-05f, -2.776937890e-04f, -3.175113510e-04f, +7.613964480e-04f, +1.604845391e-03f, -7.643164645e-04f, -5.565667816e-03f, -6.850843792e-03f, -1.340684321e-03f, +5.624176851e-03f, +6.729177001e-03f, +2.378021695e-03f, -1.248261464e-03f, -1.236234382e-03f, +7.188097839e-05f, +3.806913382e-04f, +4.655046160e-05f, -6.023253879e-05f, +0.000000000e+00f, +0.000000000e+00f, -7.611084864e-05f, -5.038713876e-03f, -3.815160191e-03f, +1.176720539e-02f, +1.593457908e-02f, -1.217022685e-02f, -3.112686652e-02f, +6.043705926e-04f, +3.648068784e-02f, +1.543572852e-02f, -2.632688336e-02f, -2.223451635e-02f, +9.947801685e-03f, +1.616374474e-02f, +5.869112213e-06f, -6.155568661e-03f, -1.310718745e-03f, +7.314842209e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.252451654e-05f, +1.539414209e-04f, -2.885407354e-04f, -5.230443508e-04f, +3.936908756e-04f, +1.090127269e-03f, -1.568997351e-04f, -1.499157406e-03f, -3.710969634e-04f, +1.402348631e-03f, +7.922134833e-04f, -8.727462592e-04f, -7.896255635e-04f, +3.265373564e-04f, +4.662853874e-04f, -5.581194207e-05f, -1.515090324e-04f, +9.094470904e-06f, +0.000000000e+00f, /* 8, 6 (20) */ +0.000000000e+00f, -2.068783650e-03f, +1.140676795e-03f, +1.292203057e-02f, +9.108618223e-03f, -3.321872455e-02f, -5.855751944e-02f, +4.045340386e-02f, +2.560556104e-01f, +4.047147373e-01f, +3.316930585e-01f, +1.147553768e-01f, -3.993322040e-02f, -5.076135888e-02f, -2.942025056e-03f, +1.540405416e-02f, +5.137147981e-03f, -2.006939673e-03f, -9.455349777e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.420515739e-05f, -2.663375779e-04f, -3.318960101e-04f, +7.160685252e-04f, +1.614939401e-03f, -6.322257162e-04f, -5.433558380e-03f, -6.918427409e-03f, -1.580588841e-03f, +5.471096141e-03f, +6.803332954e-03f, +2.534949799e-03f, -1.192114586e-03f, -1.274416991e-03f, +4.172110693e-05f, +3.869975437e-04f, +5.559469128e-05f, -6.135114594e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.641366791e-05f, -4.884772455e-03f, -4.103700926e-03f, +1.124416104e-02f, +1.632826996e-02f, -1.108009958e-02f, -3.128376625e-02f, -8.947868130e-04f, +3.610959088e-02f, +1.683807716e-02f, -2.553466988e-02f, -2.310726261e-02f, +9.158176121e-03f, +1.649028209e-02f, +4.721544996e-04f, -6.211380603e-03f, -1.462227778e-03f, +7.405786918e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.665959027e-05f, +1.591241558e-04f, -2.704862783e-04f, -5.326855166e-04f, +3.550382947e-04f, +1.096137638e-03f, -9.781030550e-05f, -1.490314875e-03f, -4.367470415e-04f, +1.376100729e-03f, +8.453746769e-04f, -8.396653856e-04f, -8.206272825e-04f, +3.008111924e-04f, +4.792204753e-04f, -4.326973245e-05f, -1.557863887e-04f, +5.986293400e-06f, +0.000000000e+00f, /* 8, 7 (20) */ +0.000000000e+00f, -2.034578492e-03f, +8.743392170e-04f, +1.259013456e-02f, +9.824686748e-03f, -3.160378515e-02f, -5.918974516e-02f, +3.501984548e-02f, +2.491371830e-01f, +4.031341484e-01f, +3.371641547e-01f, +1.215587098e-01f, -3.739827060e-02f, -5.195347347e-02f, -4.216442048e-03f, +1.544577527e-02f, +5.524145524e-03f, -1.951344982e-03f, -1.006886124e-03f, +0.000000000e+00f, +0.000000000e+00f, +3.852247275e-05f, -2.548186554e-04f, -3.449835367e-04f, +6.708181825e-04f, +1.621626369e-03f, -5.032026181e-04f, -5.298006690e-03f, -6.978460109e-03f, -1.818575967e-03f, +5.311643185e-03f, +6.871423201e-03f, +2.692763799e-03f, -1.131866336e-03f, -1.311273318e-03f, +1.032557166e-05f, +3.926130473e-04f, +6.495779442e-05f, -6.228793068e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.030732582e-04f, -4.725648300e-03f, -4.374187205e-03f, +1.071147553e-02f, +1.668330825e-02f, -9.983961945e-03f, -3.138157656e-02f, -2.385101688e-03f, +3.567284383e-02f, +1.821417788e-02f, -2.468929520e-02f, -2.394692800e-02f, +8.337548839e-03f, +1.679109329e-02f, +9.513749750e-04f, -6.254650335e-03f, -1.618014166e-03f, +7.465649852e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.080144936e-05f, +1.636919669e-04f, -2.523327995e-04f, -5.409490196e-04f, +3.163294421e-04f, +1.099864065e-03f, -3.903885532e-05f, -1.478597032e-03f, -5.014933909e-04f, +1.347075783e-03f, +8.972367241e-04f, -8.045174409e-04f, -8.504159104e-04f, +2.738891182e-04f, +4.913988792e-04f, -3.017253819e-05f, -1.597822697e-04f, +2.660809337e-06f, +0.000000000e+00f, /* 8, 8 (20) */ +0.000000000e+00f, -1.996056020e-03f, +6.195205617e-04f, +1.224515103e-02f, +1.049550493e-02f, -2.998215878e-02f, -5.969294778e-02f, +2.972183879e-02f, +2.421587229e-01f, +4.013155724e-01f, +3.424757978e-01f, +1.284301330e-01f, -3.470550680e-02f, -5.308533981e-02f, -5.527715365e-03f, +1.545610084e-02f, +5.916758572e-03f, -1.886387187e-03f, -1.069174054e-03f, +0.000000000e+00f, +0.000000000e+00f, +4.247390942e-05f, -2.431734112e-04f, -3.567898892e-04f, +6.257372305e-04f, +1.624994456e-03f, -3.773688956e-04f, -5.159242554e-03f, -7.030927663e-03f, -2.054358946e-03f, +5.145981756e-03f, +6.933287283e-03f, +2.851256896e-03f, -1.067505246e-03f, -1.346685295e-03f, -2.227738715e-05f, +3.974962422e-04f, +7.462672369e-05f, -6.302972345e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.838747075e-04f, -4.561956333e-03f, -4.626520004e-03f, +1.017052651e-02f, +1.699963769e-02f, -8.884097880e-03f, -3.142061541e-02f, -3.863698720e-03f, +3.517135044e-02f, +1.956125367e-02f, -2.379205848e-02f, -2.475144544e-02f, +7.487132928e-03f, +1.706498240e-02f, +1.442773854e-03f, -6.284822874e-03f, -1.777796436e-03f, +7.492257945e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.496893016e-05f, +1.676525981e-04f, -2.341280336e-04f, -5.478449469e-04f, +2.776508377e-04f, +1.101326377e-03f, +1.929371400e-05f, -1.464041066e-03f, -5.652025795e-04f, +1.315326220e-03f, +9.476819635e-04f, -7.673560558e-04f, -8.789077206e-04f, +2.458100504e-04f, +5.027718777e-04f, -1.653850333e-05f, -1.634733292e-04f, -8.791601960e-07f, +0.000000000e+00f, /* 8, 9 (20) */ +0.000000000e+00f, -1.953582110e-03f, +3.763471504e-04f, +1.188836114e-02f, +1.112124216e-02f, -2.835716432e-02f, -6.007031667e-02f, +2.456259623e-02f, +2.351277952e-01f, +3.992612135e-01f, +3.476217796e-01f, +1.353634203e-01f, -3.185424991e-02f, -5.415284505e-02f, -6.874400660e-03f, +1.543382345e-02f, +6.314254814e-03f, -1.811760464e-03f, -1.132203778e-03f, +0.000000000e+00f, +0.000000000e+00f, +4.606445578e-05f, -2.314372474e-04f, -3.673334824e-04f, +5.809144570e-04f, +1.625135633e-03f, -2.548389554e-04f, -5.017497786e-03f, -7.075826854e-03f, -2.287654524e-03f, +4.974285215e-03f, +6.988772415e-03f, +3.010218017e-03f, -9.990266999e-04f, -1.380534433e-03f, -5.605588272e-05f, +4.016059088e-04f, +8.458702163e-05f, -6.356343946e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.588436377e-04f, -4.394303735e-03f, -4.860648038e-03f, +9.622681561e-03f, +1.727728853e-02f, -7.782771502e-03f, -3.140132170e-02f, -5.327739786e-03f, +3.460614786e-02f, +2.087657989e-02f, -2.284437652e-02f, -2.551880149e-02f, +6.608225208e-03f, +1.731079245e-02f, +1.945545732e-03f, -6.301361377e-03f, -1.941269765e-03f, +7.483466343e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.918014043e-05f, +1.710153017e-04f, -2.159186992e-04f, -5.533865287e-04f, +2.390876085e-04f, +1.100549303e-03f, +7.706841200e-05f, -1.446690235e-03f, -6.277435499e-04f, +1.280910578e-03f, +9.965951551e-04f, -7.282399390e-04f, -9.060208672e-04f, +2.166164074e-04f, +5.132917351e-04f, -2.387771828e-06f, -1.668364102e-04f, -4.629894786e-06f, +0.000000000e+00f, /* 8,10 (20) */ +0.000000000e+00f, -1.907517654e-03f, +1.449099031e-04f, +1.152102766e-02f, +1.170215662e-02f, -2.673202869e-02f, -6.032515563e-02f, +1.954509845e-02f, +2.280519684e-01f, +3.969735590e-01f, +3.525960648e-01f, +1.423521927e-01f, -2.884403189e-02f, -5.515187175e-02f, -8.254935092e-03f, +1.537776757e-02f, +6.715860723e-03f, -1.727173442e-03f, -1.195767217e-03f, +0.000000000e+00f, +0.000000000e+00f, +4.929998603e-05f, -2.196445174e-04f, -3.766350731e-04f, +5.364355200e-04f, +1.622145428e-03f, -1.357197978e-04f, -4.873005799e-03f, -7.113165414e-03f, -2.518183389e-03f, +4.796736271e-03f, +7.037733797e-03f, +3.169432113e-03f, -9.264330694e-04f, -1.412702048e-03f, -9.097435133e-05f, +4.049013318e-04f, +9.482281232e-05f, -6.387612474e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.280237781e-04f, -4.223288433e-03f, -5.076566737e-03f, +9.069295032e-03f, +1.751637614e-02f, -6.682222200e-03f, -3.132425329e-02f, -6.774430021e-03f, +3.397840431e-02f, +2.215749047e-02f, -2.184778136e-02f, -2.624704143e-02f, +5.702204340e-03f, +1.752740886e-02f, +2.458837467e-03f, -6.303749149e-03f, -2.108106175e-03f, +7.437167395e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.345242192e-05f, +1.737907723e-04f, -1.977503951e-04f, -5.575900484e-04f, +2.007232999e-04f, +1.097562356e-03f, +1.341684222e-04f, -1.426593742e-03f, -6.889879173e-04f, +1.243893395e-03f, +1.043863763e-03f, -6.872327832e-04f, -9.316756075e-04f, +1.863540588e-04f, +5.229118486e-04f, +1.225752168e-05f, -1.698486244e-04f, -8.586759214e-06f, +0.000000000e+00f, /* 8,11 (20) */ +0.000000000e+00f, -1.858217668e-03f, -7.473461437e-05f, +1.114439258e-02f, +1.223859214e-02f, -2.510988326e-02f, -6.046087543e-02f, +1.467209265e-02f, +2.209388030e-01f, +3.944553756e-01f, +3.573928011e-01f, +1.493899265e-01f, -2.567459978e-02f, -5.607830482e-02f, -9.667637140e-03f, +1.528679322e-02f, +7.120762054e-03f, -1.632350630e-03f, -1.259643342e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.218721123e-05f, -2.078284716e-04f, -3.847176435e-04f, +4.923828488e-04f, +1.616122678e-03f, -2.011094541e-05f, -4.726001200e-03f, -7.142961946e-03f, -2.745670614e-03f, +4.613526711e-03f, +7.080034920e-03f, +3.328680481e-03f, -8.497338328e-04f, -1.443069493e-03f, -1.269935294e-04f, +4.073424191e-04f, +1.053167967e-04f, -6.395500345e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.914762000e-04f, -4.049497661e-03f, -5.274317132e-03f, +8.511704983e-03f, +1.771709944e-02f, -5.584659843e-03f, -3.119008487e-02f, -8.201023763e-03f, +3.328941640e-02f, +2.340138386e-02f, -2.080391760e-02f, -2.693427421e-02f, +4.770528733e-03f, +1.771376292e-02f, +2.981749316e-03f, -6.291491627e-03f, -2.277954800e-03f, +7.351299803e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.780231643e-05f, +1.759910779e-04f, -1.796675011e-04f, -5.604747465e-04f, +1.626396944e-04f, +1.092399722e-03f, +1.904793584e-04f, -1.403806598e-03f, -7.488102621e-04f, +1.204345068e-03f, +1.089378230e-03f, -6.444031594e-04f, -9.557945223e-04f, +1.550722645e-04f, +5.315868954e-04f, +2.737326717e-05f, -1.724874317e-04f, -1.274419075e-05f, +0.000000000e+00f, /* 8,12 (20) */ +0.000000000e+00f, -1.806030457e-03f, -2.825630860e-04f, +1.075967494e-02f, +1.273097499e-02f, -2.349376059e-02f, -6.048098637e-02f, +9.946091448e-03f, +2.137958410e-01f, +3.917097050e-01f, +3.620063278e-01f, +1.564699614e-01f, -2.234591930e-02f, -5.692803865e-02f, -1.111070663e-02f, +1.515979969e-02f, +7.528104474e-03f, -1.527033833e-03f, -1.323598345e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.473362948e-05f, -1.960212053e-04f, -3.916062816e-04f, +4.488355540e-04f, +1.607169272e-03f, +9.189561518e-05f, -4.576719389e-03f, -7.165245829e-03f, -2.969846086e-03f, +4.424857132e-03f, +7.115547851e-03f, +3.487741094e-03f, -7.689456846e-04f, -1.471518397e-03f, -1.640704385e-04f, +4.088898222e-04f, +1.160502517e-04f, -6.378752610e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.492785165e-04f, -3.873506583e-03f, -5.453984633e-03f, +7.951230237e-03f, +1.787973913e-02f, -4.492260122e-03f, -3.099960551e-02f, -9.604830361e-03f, +3.254060613e-02f, +2.460572893e-02f, -1.971453937e-02f, -2.757867737e-02f, +3.814734211e-03f, +1.786883518e-02f, +3.513336211e-03f, -6.264118360e-03f, -2.450442232e-03f, +7.223857896e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.224553531e-05f, +1.776295889e-04f, -1.617130840e-04f, -5.620627177e-04f, +1.249166356e-04f, +1.085100116e-03f, +2.458895125e-04f, -1.378389468e-03f, -8.070884138e-04f, +1.162341705e-03f, +1.133032251e-03f, -5.998243967e-04f, -9.783027328e-04f, +1.228236045e-04f, +5.392729787e-04f, +4.293340064e-05f, -1.747307205e-04f, -1.709568934e-05f, +0.000000000e+00f, /* 8,13 (20) */ +0.000000000e+00f, -1.751296828e-03f, -4.785842912e-04f, +1.036806866e-02f, +1.317981054e-02f, -2.188659131e-02f, -6.038909076e-02f, +5.369372059e-03f, +2.066305952e-01f, +3.887398589e-01f, +3.664311849e-01f, +1.635855092e-01f, -1.885817820e-02f, -5.769698434e-02f, -1.258222503e-02f, +1.499572925e-02f, +7.936994296e-03f, -1.410983581e-03f, -1.387385872e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.694747535e-05f, -1.842536125e-04f, -3.973280606e-04f, +4.058693476e-04f, +1.595389896e-03f, +2.002154750e-04f, -4.425396158e-03f, -7.180057102e-03f, -3.190444929e-03f, +4.230936643e-03f, +7.144153518e-03f, +3.646388934e-03f, -6.840926323e-04f, -1.497930904e-03f, -2.021583781e-04f, +4.095050584e-04f, +1.270030335e-04f, -6.336141875e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.015240518e-04f, -3.695876994e-03f, -5.615697717e-03f, +7.389167519e-03f, +1.800465577e-02f, -3.407160005e-03f, -3.075371600e-02f, -1.098321983e-02f, +3.173351772e-02f, +2.576807063e-02f, -1.858150712e-02f, -2.817850177e-02f, +2.836431478e-03f, +1.799165879e-02f, +4.052609190e-03f, -6.221184959e-03f, -2.625172952e-03f, +7.052901002e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.679693256e-05f, +1.787209045e-04f, -1.439288099e-04f, -5.623788026e-04f, +8.763186081e-05f, +1.075706652e-03f, +3.002900951e-04f, -1.350408511e-03f, -8.637037285e-04f, +1.117964965e-03f, +1.174723035e-03f, -5.535744514e-04f, -9.991281130e-04f, +8.966389948e-05f, +5.459277726e-04f, +5.890993161e-05f, -1.765568897e-04f, -2.163381083e-05f, +0.000000000e+00f, /* 8,14 (20) */ +0.000000000e+00f, -1.694349352e-03f, -6.628379037e-04f, +9.970740597e-03f, +1.358567989e-02f, -2.029120142e-02f, -6.018887528e-02f, +9.439759012e-04f, +1.994505381e-01f, +3.855494140e-01f, +3.706621216e-01f, +1.707296628e-01f, -1.521178927e-02f, -5.838107697e-02f, -1.408015593e-02f, +1.479357087e-02f, +8.346499354e-03f, -1.283980548e-03f, -1.450747290e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.883766883e-05f, -1.725553440e-04f, -4.019119162e-04f, +3.635564707e-04f, +1.580891775e-03f, +3.047718303e-04f, -4.272267288e-03f, -7.187446327e-03f, -3.407207915e-03f, +4.031982553e-03f, +7.165741964e-03f, +3.804396343e-03f, -5.952060805e-04f, -1.522189921e-03f, -2.412069273e-04f, +4.091506342e-04f, +1.381535847e-04f, -6.266473295e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.483209843e-04f, -3.517156089e-03f, -5.759626527e-03f, +6.826788717e-03f, +1.809228763e-02f, -2.331453353e-03f, -3.045342590e-02f, -1.233362834e-02f, +3.086981399e-02f, +2.688603560e-02f, -1.740678408e-02f, -2.873207622e-02f, +1.837303365e-03f, +1.808132269e-02f, +4.598536962e-03f, -6.162275028e-03f, -2.801729842e-03f, +6.836562894e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.147048134e-05f, +1.792807772e-04f, -1.263548615e-04f, -5.614504733e-04f, +5.086084095e-05f, +1.064266684e-03f, +3.535754669e-04f, -1.319935200e-03f, -9.185413560e-04f, +1.071301879e-03f, +1.214351565e-03f, -5.057357615e-04f, -1.018201499e-03f, +5.565212027e-05f, +5.515106656e-04f, +7.527297698e-05f, -1.779449298e-04f, -2.635016326e-05f, +0.000000000e+00f, /* 8,15 (20) */ +0.000000000e+00f, -1.635511683e-03f, -8.353932478e-04f, +9.568828681e-03f, +1.394923636e-02f, -1.871030964e-02f, -5.988410345e-02f, -3.328291387e-03f, +1.922630918e-01f, +3.821422060e-01f, +3.746941041e-01f, +1.778954047e-01f, -1.140739292e-02f, -5.897628305e-02f, -1.560234585e-02f, +1.455236395e-02f, +8.755649988e-03f, -1.145826963e-03f, -1.513412023e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.041376381e-05f, -1.609547698e-04f, -4.053885229e-04f, +3.219656320e-04f, +1.563784421e-03f, +4.054954957e-04f, -4.117568163e-03f, -7.187474445e-03f, -3.619881868e-03f, +3.828220052e-03f, +7.180212602e-03f, +3.961533375e-03f, -5.023249021e-04f, -1.544179367e-03f, -2.811619537e-04f, +4.077901696e-04f, +1.494789456e-04f, -6.168589636e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.897914657e-04f, -3.337875312e-03f, -5.885981388e-03f, +6.265338243e-03f, +1.814314847e-02f, -1.267186669e-03f, -3.009985043e-02f, -1.365356354e-02f, +2.995127264e-02f, +2.795733748e-02f, -1.619243252e-02f, -2.923781198e-02f, +8.191018661e-04f, +1.813697481e-02f, +5.150047628e-03f, -6.087002051e-03f, -2.979674772e-03f, +6.573061261e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.627925413e-05f, +1.793260355e-04f, -1.090298612e-04f, -5.593077148e-04f, +1.467662789e-05f, +1.050831646e-03f, +4.056433600e-04f, -1.287046136e-03f, -9.714904984e-04f, +1.022444659e-03f, +1.251822843e-03f, -4.563950908e-04f, -1.035456889e-03f, +2.085028936e-05f, +5.559829007e-04f, +9.199080094e-05f, -1.788745052e-04f, -3.123540632e-05f, +0.000000000e+00f, /* 8,16 (20) */ +0.000000000e+00f, -1.575097920e-03f, -9.963480176e-04f, +9.163440158e-03f, +1.427120199e-02f, -1.714652522e-02f, -5.947860795e-02f, -7.445859550e-03f, +1.850756173e-01f, +3.785223242e-01f, +3.785223242e-01f, +1.850756173e-01f, -7.445859550e-03f, -5.947860795e-02f, -1.714652522e-02f, +1.427120199e-02f, +9.163440158e-03f, -9.963480176e-04f, -1.575097920e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.168589636e-05f, -1.494789456e-04f, -4.077901696e-04f, +2.811619537e-04f, +1.544179367e-03f, +5.023249021e-04f, -3.961533375e-03f, -7.180212602e-03f, -3.828220052e-03f, +3.619881868e-03f, +7.187474445e-03f, +4.117568163e-03f, -4.054954957e-04f, -1.563784421e-03f, -3.219656320e-04f, +4.053885229e-04f, +1.609547698e-04f, -6.041376381e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.260707198e-04f, -3.158549277e-03f, -5.995011250e-03f, +5.706030529e-03f, +1.815782510e-02f, -2.163550230e-04f, -2.969420707e-02f, -1.494060968e-02f, +2.897978214e-02f, +2.897978214e-02f, -1.494060968e-02f, -2.969420707e-02f, -2.163550230e-04f, +1.815782510e-02f, +5.706030529e-03f, -5.995011250e-03f, -3.158549277e-03f, +6.260707198e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.123540632e-05f, +1.788745052e-04f, -9.199080094e-05f, -5.559829007e-04f, -2.085028936e-05f, +1.035456889e-03f, +4.563950908e-04f, -1.251822843e-03f, -1.022444659e-03f, +9.714904984e-04f, +1.287046136e-03f, -4.056433600e-04f, -1.050831646e-03f, -1.467662789e-05f, +5.593077148e-04f, +1.090298612e-04f, -1.793260355e-04f, -3.627925413e-05f, +0.000000000e+00f, /* 8,17 (20) */ +0.000000000e+00f, -1.513412023e-03f, -1.145826963e-03f, +8.755649988e-03f, +1.455236395e-02f, -1.560234585e-02f, -5.897628305e-02f, -1.140739292e-02f, +1.778954047e-01f, +3.746941041e-01f, +3.821422060e-01f, +1.922630918e-01f, -3.328291387e-03f, -5.988410345e-02f, -1.871030964e-02f, +1.394923636e-02f, +9.568828681e-03f, -8.353932478e-04f, -1.635511683e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.266473295e-05f, -1.381535847e-04f, -4.091506342e-04f, +2.412069273e-04f, +1.522189921e-03f, +5.952060805e-04f, -3.804396343e-03f, -7.165741964e-03f, -4.031982553e-03f, +3.407207915e-03f, +7.187446327e-03f, +4.272267288e-03f, -3.047718303e-04f, -1.580891775e-03f, -3.635564707e-04f, +4.019119162e-04f, +1.725553440e-04f, -5.883766883e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.573061261e-04f, -2.979674772e-03f, -6.087002051e-03f, +5.150047628e-03f, +1.813697481e-02f, +8.191018661e-04f, -2.923781198e-02f, -1.619243252e-02f, +2.795733748e-02f, +2.995127264e-02f, -1.365356354e-02f, -3.009985043e-02f, -1.267186669e-03f, +1.814314847e-02f, +6.265338243e-03f, -5.885981388e-03f, -3.337875312e-03f, +5.897914657e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.635016326e-05f, +1.779449298e-04f, -7.527297698e-05f, -5.515106656e-04f, -5.565212027e-05f, +1.018201499e-03f, +5.057357615e-04f, -1.214351565e-03f, -1.071301879e-03f, +9.185413560e-04f, +1.319935200e-03f, -3.535754669e-04f, -1.064266684e-03f, -5.086084095e-05f, +5.614504733e-04f, +1.263548615e-04f, -1.792807772e-04f, -4.147048134e-05f, +0.000000000e+00f, /* 8,18 (20) */ +0.000000000e+00f, -1.450747290e-03f, -1.283980548e-03f, +8.346499354e-03f, +1.479357087e-02f, -1.408015593e-02f, -5.838107697e-02f, -1.521178927e-02f, +1.707296628e-01f, +3.706621216e-01f, +3.855494140e-01f, +1.994505381e-01f, +9.439759012e-04f, -6.018887528e-02f, -2.029120142e-02f, +1.358567989e-02f, +9.970740597e-03f, -6.628379037e-04f, -1.694349352e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.336141875e-05f, -1.270030335e-04f, -4.095050584e-04f, +2.021583781e-04f, +1.497930904e-03f, +6.840926323e-04f, -3.646388934e-03f, -7.144153518e-03f, -4.230936643e-03f, +3.190444929e-03f, +7.180057102e-03f, +4.425396158e-03f, -2.002154750e-04f, -1.595389896e-03f, -4.058693476e-04f, +3.973280606e-04f, +1.842536125e-04f, -5.694747535e-05f, +0.000000000e+00f, +0.000000000e+00f, +6.836562894e-04f, -2.801729842e-03f, -6.162275028e-03f, +4.598536962e-03f, +1.808132269e-02f, +1.837303365e-03f, -2.873207622e-02f, -1.740678408e-02f, +2.688603560e-02f, +3.086981399e-02f, -1.233362834e-02f, -3.045342590e-02f, -2.331453353e-03f, +1.809228763e-02f, +6.826788717e-03f, -5.759626527e-03f, -3.517156089e-03f, +5.483209843e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.163381083e-05f, +1.765568897e-04f, -5.890993161e-05f, -5.459277726e-04f, -8.966389948e-05f, +9.991281130e-04f, +5.535744514e-04f, -1.174723035e-03f, -1.117964965e-03f, +8.637037285e-04f, +1.350408511e-03f, -3.002900951e-04f, -1.075706652e-03f, -8.763186081e-05f, +5.623788026e-04f, +1.439288099e-04f, -1.787209045e-04f, -4.679693256e-05f, +0.000000000e+00f, /* 8,19 (20) */ +0.000000000e+00f, -1.387385872e-03f, -1.410983581e-03f, +7.936994296e-03f, +1.499572925e-02f, -1.258222503e-02f, -5.769698434e-02f, -1.885817820e-02f, +1.635855092e-01f, +3.664311849e-01f, +3.887398589e-01f, +2.066305952e-01f, +5.369372059e-03f, -6.038909076e-02f, -2.188659131e-02f, +1.317981054e-02f, +1.036806866e-02f, -4.785842912e-04f, -1.751296828e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.378752610e-05f, -1.160502517e-04f, -4.088898222e-04f, +1.640704385e-04f, +1.471518397e-03f, +7.689456846e-04f, -3.487741094e-03f, -7.115547851e-03f, -4.424857132e-03f, +2.969846086e-03f, +7.165245829e-03f, +4.576719389e-03f, -9.189561518e-05f, -1.607169272e-03f, -4.488355540e-04f, +3.916062816e-04f, +1.960212053e-04f, -5.473362948e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.052901002e-04f, -2.625172952e-03f, -6.221184959e-03f, +4.052609190e-03f, +1.799165879e-02f, +2.836431478e-03f, -2.817850177e-02f, -1.858150712e-02f, +2.576807063e-02f, +3.173351772e-02f, -1.098321983e-02f, -3.075371600e-02f, -3.407160005e-03f, +1.800465577e-02f, +7.389167519e-03f, -5.615697717e-03f, -3.695876994e-03f, +5.015240518e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.709568934e-05f, +1.747307205e-04f, -4.293340064e-05f, -5.392729787e-04f, -1.228236045e-04f, +9.783027328e-04f, +5.998243967e-04f, -1.133032251e-03f, -1.162341705e-03f, +8.070884138e-04f, +1.378389468e-03f, -2.458895125e-04f, -1.085100116e-03f, -1.249166356e-04f, +5.620627177e-04f, +1.617130840e-04f, -1.776295889e-04f, -5.224553531e-05f, +0.000000000e+00f, /* 8,20 (20) */ +0.000000000e+00f, -1.323598345e-03f, -1.527033833e-03f, +7.528104474e-03f, +1.515979969e-02f, -1.111070663e-02f, -5.692803865e-02f, -2.234591930e-02f, +1.564699614e-01f, +3.620063278e-01f, +3.917097050e-01f, +2.137958410e-01f, +9.946091448e-03f, -6.048098637e-02f, -2.349376059e-02f, +1.273097499e-02f, +1.075967494e-02f, -2.825630860e-04f, -1.806030457e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.395500345e-05f, -1.053167967e-04f, -4.073424191e-04f, +1.269935294e-04f, +1.443069493e-03f, +8.497338328e-04f, -3.328680481e-03f, -7.080034920e-03f, -4.613526711e-03f, +2.745670614e-03f, +7.142961946e-03f, +4.726001200e-03f, +2.011094541e-05f, -1.616122678e-03f, -4.923828488e-04f, +3.847176435e-04f, +2.078284716e-04f, -5.218721123e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.223857896e-04f, -2.450442232e-03f, -6.264118360e-03f, +3.513336211e-03f, +1.786883518e-02f, +3.814734211e-03f, -2.757867737e-02f, -1.971453937e-02f, +2.460572893e-02f, +3.254060613e-02f, -9.604830361e-03f, -3.099960551e-02f, -4.492260122e-03f, +1.787973913e-02f, +7.951230237e-03f, -5.453984633e-03f, -3.873506583e-03f, +4.492785165e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.274419075e-05f, +1.724874317e-04f, -2.737326717e-05f, -5.315868954e-04f, -1.550722645e-04f, +9.557945223e-04f, +6.444031594e-04f, -1.089378230e-03f, -1.204345068e-03f, +7.488102621e-04f, +1.403806598e-03f, -1.904793584e-04f, -1.092399722e-03f, -1.626396944e-04f, +5.604747465e-04f, +1.796675011e-04f, -1.759910779e-04f, -5.780231643e-05f, +0.000000000e+00f, /* 8,21 (20) */ +0.000000000e+00f, -1.259643342e-03f, -1.632350630e-03f, +7.120762054e-03f, +1.528679322e-02f, -9.667637140e-03f, -5.607830482e-02f, -2.567459978e-02f, +1.493899265e-01f, +3.573928011e-01f, +3.944553756e-01f, +2.209388030e-01f, +1.467209265e-02f, -6.046087543e-02f, -2.510988326e-02f, +1.223859214e-02f, +1.114439258e-02f, -7.473461437e-05f, -1.858217668e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.387612474e-05f, -9.482281232e-05f, -4.049013318e-04f, +9.097435133e-05f, +1.412702048e-03f, +9.264330694e-04f, -3.169432113e-03f, -7.037733797e-03f, -4.796736271e-03f, +2.518183389e-03f, +7.113165414e-03f, +4.873005799e-03f, +1.357197978e-04f, -1.622145428e-03f, -5.364355200e-04f, +3.766350731e-04f, +2.196445174e-04f, -4.929998603e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.351299803e-04f, -2.277954800e-03f, -6.291491627e-03f, +2.981749316e-03f, +1.771376292e-02f, +4.770528733e-03f, -2.693427421e-02f, -2.080391760e-02f, +2.340138386e-02f, +3.328941640e-02f, -8.201023763e-03f, -3.119008487e-02f, -5.584659843e-03f, +1.771709944e-02f, +8.511704983e-03f, -5.274317132e-03f, -4.049497661e-03f, +3.914762000e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.586759214e-06f, +1.698486244e-04f, -1.225752168e-05f, -5.229118486e-04f, -1.863540588e-04f, +9.316756075e-04f, +6.872327832e-04f, -1.043863763e-03f, -1.243893395e-03f, +6.889879173e-04f, +1.426593742e-03f, -1.341684222e-04f, -1.097562356e-03f, -2.007232999e-04f, +5.575900484e-04f, +1.977503951e-04f, -1.737907723e-04f, -6.345242192e-05f, +0.000000000e+00f, /* 8,22 (20) */ +0.000000000e+00f, -1.195767217e-03f, -1.727173442e-03f, +6.715860723e-03f, +1.537776757e-02f, -8.254935092e-03f, -5.515187175e-02f, -2.884403189e-02f, +1.423521927e-01f, +3.525960648e-01f, +3.969735590e-01f, +2.280519684e-01f, +1.954509845e-02f, -6.032515563e-02f, -2.673202869e-02f, +1.170215662e-02f, +1.152102766e-02f, +1.449099031e-04f, -1.907517654e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.356343946e-05f, -8.458702163e-05f, -4.016059088e-04f, +5.605588272e-05f, +1.380534433e-03f, +9.990266999e-04f, -3.010218017e-03f, -6.988772415e-03f, -4.974285215e-03f, +2.287654524e-03f, +7.075826854e-03f, +5.017497786e-03f, +2.548389554e-04f, -1.625135633e-03f, -5.809144570e-04f, +3.673334824e-04f, +2.314372474e-04f, -4.606445578e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.437167395e-04f, -2.108106175e-03f, -6.303749149e-03f, +2.458837467e-03f, +1.752740886e-02f, +5.702204340e-03f, -2.624704143e-02f, -2.184778136e-02f, +2.215749047e-02f, +3.397840431e-02f, -6.774430021e-03f, -3.132425329e-02f, -6.682222200e-03f, +1.751637614e-02f, +9.069295032e-03f, -5.076566737e-03f, -4.223288433e-03f, +3.280237781e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.629894786e-06f, +1.668364102e-04f, +2.387771828e-06f, -5.132917351e-04f, -2.166164074e-04f, +9.060208672e-04f, +7.282399390e-04f, -9.965951551e-04f, -1.280910578e-03f, +6.277435499e-04f, +1.446690235e-03f, -7.706841200e-05f, -1.100549303e-03f, -2.390876085e-04f, +5.533865287e-04f, +2.159186992e-04f, -1.710153017e-04f, -6.918014043e-05f, +0.000000000e+00f, /* 8,23 (20) */ +0.000000000e+00f, -1.132203778e-03f, -1.811760464e-03f, +6.314254814e-03f, +1.543382345e-02f, -6.874400660e-03f, -5.415284505e-02f, -3.185424991e-02f, +1.353634203e-01f, +3.476217796e-01f, +3.992612135e-01f, +2.351277952e-01f, +2.456259623e-02f, -6.007031667e-02f, -2.835716432e-02f, +1.112124216e-02f, +1.188836114e-02f, +3.763471504e-04f, -1.953582110e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.302972345e-05f, -7.462672369e-05f, -3.974962422e-04f, +2.227738715e-05f, +1.346685295e-03f, +1.067505246e-03f, -2.851256896e-03f, -6.933287283e-03f, -5.145981756e-03f, +2.054358946e-03f, +7.030927663e-03f, +5.159242554e-03f, +3.773688956e-04f, -1.624994456e-03f, -6.257372305e-04f, +3.567898892e-04f, +2.431734112e-04f, -4.247390942e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.483466343e-04f, -1.941269765e-03f, -6.301361377e-03f, +1.945545732e-03f, +1.731079245e-02f, +6.608225208e-03f, -2.551880149e-02f, -2.284437652e-02f, +2.087657989e-02f, +3.460614786e-02f, -5.327739786e-03f, -3.140132170e-02f, -7.782771502e-03f, +1.727728853e-02f, +9.622681561e-03f, -4.860648038e-03f, -4.394303735e-03f, +2.588436377e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.791601960e-07f, +1.634733292e-04f, +1.653850333e-05f, -5.027718777e-04f, -2.458100504e-04f, +8.789077206e-04f, +7.673560558e-04f, -9.476819635e-04f, -1.315326220e-03f, +5.652025795e-04f, +1.464041066e-03f, -1.929371400e-05f, -1.101326377e-03f, -2.776508377e-04f, +5.478449469e-04f, +2.341280336e-04f, -1.676525981e-04f, -7.496893016e-05f, +0.000000000e+00f, /* 8,24 (20) */ +0.000000000e+00f, -1.069174054e-03f, -1.886387187e-03f, +5.916758572e-03f, +1.545610084e-02f, -5.527715365e-03f, -5.308533981e-02f, -3.470550680e-02f, +1.284301330e-01f, +3.424757978e-01f, +4.013155724e-01f, +2.421587229e-01f, +2.972183879e-02f, -5.969294778e-02f, -2.998215878e-02f, +1.049550493e-02f, +1.224515103e-02f, +6.195205617e-04f, -1.996056020e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.228793068e-05f, -6.495779442e-05f, -3.926130473e-04f, -1.032557166e-05f, +1.311273318e-03f, +1.131866336e-03f, -2.692763799e-03f, -6.871423201e-03f, -5.311643185e-03f, +1.818575967e-03f, +6.978460109e-03f, +5.298006690e-03f, +5.032026181e-04f, -1.621626369e-03f, -6.708181825e-04f, +3.449835367e-04f, +2.548186554e-04f, -3.852247275e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.492257945e-04f, -1.777796436e-03f, -6.284822874e-03f, +1.442773854e-03f, +1.706498240e-02f, +7.487132928e-03f, -2.475144544e-02f, -2.379205848e-02f, +1.956125367e-02f, +3.517135044e-02f, -3.863698720e-03f, -3.142061541e-02f, -8.884097880e-03f, +1.699963769e-02f, +1.017052651e-02f, -4.626520004e-03f, -4.561956333e-03f, +1.838747075e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.660809337e-06f, +1.597822697e-04f, +3.017253819e-05f, -4.913988792e-04f, -2.738891182e-04f, +8.504159104e-04f, +8.045174409e-04f, -8.972367241e-04f, -1.347075783e-03f, +5.014933909e-04f, +1.478597032e-03f, +3.903885532e-05f, -1.099864065e-03f, -3.163294421e-04f, +5.409490196e-04f, +2.523327995e-04f, -1.636919669e-04f, -8.080144936e-05f, +0.000000000e+00f, /* 8,25 (20) */ +0.000000000e+00f, -1.006886124e-03f, -1.951344982e-03f, +5.524145524e-03f, +1.544577527e-02f, -4.216442048e-03f, -5.195347347e-02f, -3.739827060e-02f, +1.215587098e-01f, +3.371641547e-01f, +4.031341484e-01f, +2.491371830e-01f, +3.501984548e-02f, -5.918974516e-02f, -3.160378515e-02f, +9.824686748e-03f, +1.259013456e-02f, +8.743392170e-04f, -2.034578492e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.135114594e-05f, -5.559469128e-05f, -3.869975437e-04f, -4.172110693e-05f, +1.274416991e-03f, +1.192114586e-03f, -2.534949799e-03f, -6.803332954e-03f, -5.471096141e-03f, +1.580588841e-03f, +6.918427409e-03f, +5.433558380e-03f, +6.322257162e-04f, -1.614939401e-03f, -7.160685252e-04f, +3.318960101e-04f, +2.663375779e-04f, -3.420515739e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.465649852e-04f, -1.618014166e-03f, -6.254650335e-03f, +9.513749750e-04f, +1.679109329e-02f, +8.337548839e-03f, -2.394692800e-02f, -2.468929520e-02f, +1.821417788e-02f, +3.567284383e-02f, -2.385101688e-03f, -3.138157656e-02f, -9.983961945e-03f, +1.668330825e-02f, +1.071147553e-02f, -4.374187205e-03f, -4.725648300e-03f, +1.030732582e-04f, +0.000000000e+00f, +0.000000000e+00f, -5.986293400e-06f, +1.557863887e-04f, +4.326973245e-05f, -4.792204753e-04f, -3.008111924e-04f, +8.206272825e-04f, +8.396653856e-04f, -8.453746769e-04f, -1.376100729e-03f, +4.367470415e-04f, +1.490314875e-03f, +9.781030550e-05f, -1.096137638e-03f, -3.550382947e-04f, +5.326855166e-04f, +2.704862783e-04f, -1.591241558e-04f, -8.665959027e-05f, +0.000000000e+00f, /* 8,26 (20) */ +0.000000000e+00f, -9.455349777e-04f, -2.006939673e-03f, +5.137147981e-03f, +1.540405416e-02f, -2.942025056e-03f, -5.076135888e-02f, -3.993322040e-02f, +1.147553768e-01f, +3.316930585e-01f, +4.047147373e-01f, +2.560556104e-01f, +4.045340386e-02f, -5.855751944e-02f, -3.321872455e-02f, +9.108618223e-03f, +1.292203057e-02f, +1.140676795e-03f, -2.068783650e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.023253879e-05f, -4.655046160e-05f, -3.806913382e-04f, -7.188097839e-05f, +1.236234382e-03f, +1.248261464e-03f, -2.378021695e-03f, -6.729177001e-03f, -5.624176851e-03f, +1.340684321e-03f, +6.850843792e-03f, +5.565667816e-03f, +7.643164645e-04f, -1.604845391e-03f, -7.613964480e-04f, +3.175113510e-04f, +2.776937890e-04f, -2.951790863e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.405786918e-04f, -1.462227778e-03f, -6.211380603e-03f, +4.721544996e-04f, +1.649028209e-02f, +9.158176121e-03f, -2.310726261e-02f, -2.553466988e-02f, +1.683807716e-02f, +3.610959088e-02f, -8.947868130e-04f, -3.128376625e-02f, -1.108009958e-02f, +1.632826996e-02f, +1.124416104e-02f, -4.103700926e-03f, -4.884772455e-03f, +1.641366791e-05f, +0.000000000e+00f, +0.000000000e+00f, -9.094470904e-06f, +1.515090324e-04f, +5.581194207e-05f, -4.662853874e-04f, -3.265373564e-04f, +7.896255635e-04f, +8.727462592e-04f, -7.922134833e-04f, -1.402348631e-03f, +3.710969634e-04f, +1.499157406e-03f, +1.568997351e-04f, -1.090127269e-03f, -3.936908756e-04f, +5.230443508e-04f, +2.885407354e-04f, -1.539414209e-04f, -9.252451654e-05f, +0.000000000e+00f, /* 8,27 (20) */ +0.000000000e+00f, -8.853024389e-04f, -2.053490135e-03f, +4.756456642e-03f, +1.533217318e-02f, -1.705790674e-03f, -4.951309742e-02f, -4.231124210e-02f, +1.080261998e-01f, +3.260688817e-01f, +4.060554216e-01f, +2.629064542e-01f, +4.601907167e-02f, -5.779320298e-02f, -3.482356994e-02f, +8.347221775e-03f, +1.323954193e-02f, +1.418370584e-03f, -2.098301558e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.894531858e-05f, -3.783675462e-05f, -3.737363107e-04f, -1.007805544e-04f, +1.196842908e-03f, +1.300325148e-03f, -2.222181709e-03f, -6.649123146e-03f, -5.770731354e-03f, +1.099152205e-03f, +6.775734534e-03f, +5.694107605e-03f, +8.993459211e-04f, -1.591260231e-03f, -8.067072348e-04f, +3.018161692e-04f, +2.888499750e-04f, -2.445765210e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.314842209e-04f, -1.310718745e-03f, -6.155568661e-03f, +5.869112213e-06f, +1.616374474e-02f, +9.947801685e-03f, -2.223451635e-02f, -2.632688336e-02f, +1.543572852e-02f, +3.648068784e-02f, +6.043705926e-04f, -3.112686652e-02f, -1.217022685e-02f, +1.593457908e-02f, +1.176720539e-02f, -3.815160191e-03f, -5.038713876e-03f, -7.611084864e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.198340192e-05f, +1.469736598e-04f, +6.778302618e-05f, -4.526431748e-04f, -3.510322360e-04f, +7.574961350e-04f, +9.037115885e-04f, -7.378729408e-04f, -1.425773284e-03f, +3.046786581e-04f, +1.505093613e-03f, +2.161846012e-04f, -1.081818129e-03f, -4.321994666e-04f, +5.120186609e-04f, +3.064475298e-04f, -1.481375893e-04f, -9.837670411e-05f, +0.000000000e+00f, /* 8,28 (20) */ +0.000000000e+00f, -8.263571204e-04f, -2.091326889e-03f, +4.382720332e-03f, +1.523139263e-02f, -5.089477662e-04f, -4.821277227e-02f, -4.453342381e-02f, +1.013770767e-01f, +3.202981503e-01f, +4.071545738e-01f, +2.696821888e-01f, +5.171317928e-02f, -5.689385706e-02f, -3.641483017e-02f, +7.540514540e-03f, +1.354135809e-02f, +1.707220559e-03f, -2.122759210e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.750269101e-05f, -2.946383688e-05f, -3.661745017e-04f, -1.283987668e-04f, +1.156359128e-03f, +1.348330372e-03f, -2.067627203e-03f, -6.563346201e-03f, -5.910615717e-03f, +8.562848755e-04f, +6.693135983e-03f, +5.818653167e-03f, +1.037178045e-03f, -1.574104112e-03f, -8.519033891e-04f, +2.847997507e-04f, +2.997679676e-04f, -1.902233903e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.195008189e-04f, -1.163745085e-03f, -6.087785635e-03f, -4.467740626e-04f, +1.581271250e-02f, +1.070529782e-02f, -2.133080476e-02f, -2.706475631e-02f, +1.400995524e-02f, +3.678536650e-02f, +2.109464205e-03f, -3.091068192e-02f, -1.325204498e-02f, +1.550237961e-02f, +1.227922406e-02f, -3.508712661e-03f, -5.186851466e-03f, -1.744875527e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.465200696e-05f, +1.422037663e-04f, +7.916884454e-05f, -4.383440878e-04f, -3.742640308e-04f, +7.243258077e-04f, +9.325181251e-04f, -6.824746924e-04f, -1.446334796e-03f, +2.376293875e-04f, +1.508098759e-03f, +2.755409949e-04f, -1.071200476e-03f, -4.704753514e-04f, +4.996048872e-04f, +3.241572278e-04f, -1.417081185e-04f, -1.041959854e-04f, +0.000000000e+00f, /* 8,29 (20) */ +0.000000000e+00f, -7.688544293e-04f, -2.120790726e-03f, +4.016545830e-03f, +1.510299386e-02f, +6.474113621e-04f, -4.686444190e-02f, -4.660105101e-02f, +9.481373048e-02f, +3.143875346e-01f, +4.080108587e-01f, +2.763753247e-01f, +5.753183244e-02f, -5.585667901e-02f, -3.798893429e-02f, +6.688611151e-03f, +1.382615785e-02f, +2.006988527e-03f, -2.141781549e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.591781592e-05f, -2.144061112e-05f, -3.580480029e-04f, -1.547180591e-04f, +1.114898525e-03f, +1.392308263e-03f, -1.914550414e-03f, -6.472027641e-03f, -6.043696216e-03f, +6.123768384e-04f, +6.603095559e-03f, +5.939083145e-03f, +1.177669827e-03f, -1.553301759e-03f, -8.968847683e-04f, +2.664541626e-04f, +3.104088166e-04f, -1.321098992e-05f, +0.000000000e+00f, +0.000000000e+00f, +7.048488120e-04f, -1.021541319e-03f, -6.008616790e-03f, -8.851181504e-04f, +1.543844847e-02f, +1.142962363e-02f, -2.039828664e-02f, -2.774723100e-02f, +1.256362044e-02f, +3.702299588e-02f, +3.617562964e-03f, -3.063514092e-02f, -1.432324546e-02f, +1.503190426e-02f, +1.277882894e-02f, -3.184555433e-03f, -5.328559584e-03f, -2.786835381e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.710004392e-05f, +1.372228099e-04f, +8.995724925e-05f, -4.234389215e-04f, -3.962045354e-04f, +6.902025932e-04f, +9.591278986e-04f, -6.261419350e-04f, -1.463999657e-03f, +1.700878596e-04f, +1.508154461e-03f, +3.348439216e-04f, -1.058269733e-03f, -5.084290207e-04f, +4.858028393e-04f, +3.416197214e-04f, -1.346501531e-04f, -1.099615968e-04f, +0.000000000e+00f, /* 8,30 (20) */ +0.000000000e+00f, -7.129366134e-04f, -2.142231337e-03f, +3.658497827e-03f, +1.494827580e-02f, +1.762309887e-03f, -4.547213364e-02f, -4.851560142e-02f, +8.834170284e-02f, +3.083438384e-01f, +4.086232355e-01f, +2.829784203e-01f, +6.347091559e-02f, -5.467900918e-02f, -3.954223604e-02f, +5.791726383e-03f, +1.409261201e-02f, +2.317397343e-03f, -2.154992539e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.420376676e-05f, -1.377463820e-05f, -3.493988511e-04f, -1.797243282e-04f, +1.072575305e-03f, +1.432296160e-03f, -1.763138187e-03f, -6.375355250e-03f, -6.169849517e-03f, +3.677242540e-04f, +6.505671737e-03f, +6.055179807e-03f, +1.320671441e-03f, -1.528782666e-03f, -9.415487266e-04f, +2.467743542e-04f, +3.207328672e-04f, -7.023736503e-06f, +0.000000000e+00f, +0.000000000e+00f, +6.877487681e-04f, -8.843185093e-04f, -5.918659541e-03f, -1.308557072e-03f, +1.504224393e-02f, +1.211982622e-02f, -1.943915874e-02f, -2.837337293e-02f, +1.109962079e-02f, +3.719308374e-02f, +5.125717425e-03f, -3.030029700e-02f, -1.538151519e-02f, +1.452347524e-02f, +1.326463178e-02f, -2.842935712e-03f, -5.463209737e-03f, -3.886451349e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.932808259e-05f, +1.320541391e-04f, +1.001380708e-04f, -4.079788706e-04f, -4.168291511e-04f, +6.552154762e-04f, +9.835082565e-04f, -5.689991241e-04f, -1.478740802e-03f, +1.021939107e-04f, +1.505248756e-03f, +3.939675859e-04f, -1.043026549e-03f, -5.459703823e-04f, +4.706157560e-04f, +3.587843512e-04f, -1.269625761e-04f, -1.156522294e-04f, +0.000000000e+00f, /* 8,31 (20) */ +0.000000000e+00f, -6.587328467e-04f, -2.156005975e-03f, +3.309098976e-03f, +1.476855147e-02f, +2.834885193e-03f, -4.403983748e-02f, -5.027873961e-02f, +8.196634759e-02f, +3.021739889e-01f, +4.089909597e-01f, +2.894840920e-01f, +6.952609540e-02f, -5.335833774e-02f, -4.107101871e-02f, +4.850177656e-03f, +1.433938636e-02f, +2.638130210e-03f, -2.162016276e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.237349152e-05f, -6.472162169e-06f, -3.402689242e-04f, -2.034068588e-04f, +1.029502197e-03f, +1.468337442e-03f, -1.613571734e-03f, -6.273522751e-03f, -6.288962822e-03f, +1.226244669e-04f, +6.400934007e-03f, +6.166729441e-03f, +1.466026399e-03f, -1.500481324e-03f, -9.857902663e-04f, +2.257582532e-04f, +3.306998416e-04f, -4.618617492e-07f, +0.000000000e+00f, +0.000000000e+00f, +6.684206855e-04f, -7.522643702e-04f, -5.818521470e-03f, -1.716535943e-03f, +1.462541478e-02f, +1.277504170e-02f, -1.845565048e-02f, -2.894237206e-02f, +9.620879985e-03f, +3.729527765e-02f, +6.630966181e-03f, -2.990632942e-02f, -1.642454174e-02f, +1.397750486e-02f, +1.373524754e-02f, -2.484151361e-03f, -5.590172313e-03f, -5.042973643e-04f, +0.000000000e+00f, +0.000000000e+00f, -2.133747723e-05f, +1.267209228e-04f, +1.097030990e-04f, -3.920153858e-04f, -4.361168879e-04f, +6.194541872e-04f, +1.005631891e-03f, -5.111716778e-04f, -1.490537654e-03f, +3.408818562e-05f, +1.499376150e-03f, +4.527856805e-04f, -1.025476853e-03f, -5.830089752e-04f, +4.540503574e-04f, +3.756000324e-04f, -1.186460577e-04f, -1.212460831e-04f, +0.000000000e+00f, /* 9, 0 (20) */ +0.000000000e+00f, -2.788021585e-03f, -2.739988319e-03f, +1.245659329e-02f, +1.805368529e-02f, -2.917700415e-02f, -6.934232994e-02f, +4.623928110e-02f, +3.040153684e-01f, +4.464429501e-01f, +3.040153684e-01f, +4.623928110e-02f, -6.934232994e-02f, -2.917700415e-02f, +1.805368529e-02f, +1.245659329e-02f, -2.739988319e-03f, -2.788021585e-03f, +4.072385311e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.217079448e-04f, -2.120537838e-04f, -6.013582856e-04f, +5.317399089e-04f, +2.083490300e-03f, -4.405495465e-04f, -6.619515121e-03f, -7.900310157e-03f, -1.567126525e-04f, +7.779500476e-03f, +6.784694429e-03f, +6.079398431e-04f, -2.087791629e-03f, -5.933853095e-04f, +5.954222446e-04f, +2.305658252e-04f, -1.202487606e-04f, -3.103601429e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.788021585e-03f, -6.954497747e-04f, -9.513451793e-03f, +2.287479789e-03f, +2.102105089e-02f, -2.915564891e-03f, -3.246879931e-02f, +1.360596461e-03f, +3.732936584e-02f, +1.360596461e-03f, -3.246879931e-02f, -2.915564891e-03f, +2.102105089e-02f, +2.287479789e-03f, -9.513451793e-03f, -6.954497747e-04f, +2.466267758e-03f, -4.072385311e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.217079448e-04f, +2.791298664e-04f, +8.987193298e-05f, -7.470938414e-04f, -8.255078474e-05f, +1.321526365e-03f, +6.339450830e-05f, -1.728195928e-03f, -4.405076371e-05f, +1.732279086e-03f, +1.405178167e-05f, -1.331931790e-03f, +3.088857861e-05f, +7.592913089e-04f, -6.557991726e-05f, -2.884591603e-04f, +6.119626725e-05f, +3.103601429e-05f, +0.000000000e+00f, /* 9, 1 (20) */ +0.000000000e+00f, -2.666313640e-03f, -2.952042103e-03f, +1.185523500e-02f, +1.858542519e-02f, -2.709351385e-02f, -6.978287948e-02f, +3.961976598e-02f, +2.961150582e-01f, +4.462862374e-01f, +3.117948688e-01f, +5.302397553e-02f, -6.873439009e-02f, -3.126479578e-02f, +1.746029998e-02f, +1.305201553e-02f, -2.509422494e-03f, -2.908270346e-03f, +9.687838816e-06f, +0.000000000e+00f, +0.000000000e+00f, +1.226759659e-04f, -1.937702911e-04f, -6.055587053e-04f, +4.709329705e-04f, +2.074753048e-03f, -2.776448918e-04f, -6.449147393e-03f, -8.010920493e-03f, -4.699181647e-04f, +7.648590319e-03f, +6.944354374e-03f, +7.796299310e-04f, -2.087511637e-03f, -6.557461540e-04f, +5.877031988e-04f, +2.492607803e-04f, -1.182795009e-04f, -3.487568417e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.666313640e-03f, -4.163199083e-04f, -9.423579860e-03f, +1.540385947e-03f, +2.093850011e-02f, -1.594038526e-03f, -3.240540481e-02f, -3.675994675e-04f, +3.728531508e-02f, +3.092875547e-03f, -3.245474753e-02f, -4.247496681e-03f, +2.105193947e-02f, +3.046771098e-03f, -9.579031710e-03f, -9.839089351e-04f, +2.527464025e-03f, -9.687838816e-06f, +0.000000000e+00f, +0.000000000e+00f, -1.226759659e-04f, +2.692234406e-04f, +1.132138829e-04f, -7.331134341e-04f, -1.331115381e-04f, +1.307865322e-03f, +1.400484287e-04f, -1.719817145e-03f, -1.320370426e-04f, +1.732039536e-03f, +9.209013332e-05f, -1.339014882e-03f, -2.174754707e-05f, +7.696325503e-04f, -4.038933415e-05f, -2.971603546e-04f, +5.453398286e-05f, +3.487568417e-05f, +0.000000000e+00f, /* 9, 2 (20) */ +0.000000000e+00f, -2.543637674e-03f, -3.145812394e-03f, +1.124967630e-02f, +1.905635816e-02f, -2.501876080e-02f, -7.006052437e-02f, +3.317061859e-02f, +2.881041377e-01f, +4.458163192e-01f, +3.194434592e-01f, +5.996832990e-02f, -6.795476016e-02f, -3.335230742e-02f, +1.680455382e-02f, +1.363971873e-02f, -2.260161714e-03f, -3.026549847e-03f, -2.518784535e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.231725867e-04f, -1.757586635e-04f, -6.080738841e-04f, +4.110819289e-04f, +2.061730780e-03f, -1.194000942e-04f, -6.273927067e-03f, -8.111250020e-03f, -7.824646979e-04f, +7.507695873e-03f, +7.098169576e-03f, +9.554225158e-04f, -2.082510856e-03f, -7.186939899e-04f, +5.781569807e-04f, +2.680907537e-04f, -1.157821988e-04f, -3.881777201e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.543637674e-03f, -1.470964677e-04f, -9.310365977e-03f, +8.072725131e-04f, +2.080538857e-02f, -2.861732041e-04f, -3.226535638e-02f, -2.087416613e-03f, +3.715327803e-02f, +4.824915084e-03f, -3.236265740e-02f, -5.586511563e-03f, +2.103019192e-02f, +3.816403648e-03f, -9.619421045e-03f, -1.281069290e-03f, +2.581998008e-03f, +2.518784535e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.231725867e-04f, +2.587914125e-04f, +1.355584979e-04f, -7.174273497e-04f, -1.824483844e-04f, +1.291023805e-03f, +2.157133115e-04f, -1.707181490e-03f, -2.196779041e-04f, +1.727461982e-03f, +1.705171546e-04f, -1.342717643e-03f, -7.522529786e-05f, +7.780485578e-04f, -1.435583036e-05f, -3.051832409e-04f, +4.735383549e-05f, +3.881777201e-05f, +0.000000000e+00f, /* 9, 3 (20) */ +0.000000000e+00f, -2.420465088e-03f, -3.321571058e-03f, +1.064160241e-02f, +1.946744009e-02f, -2.295703002e-02f, -7.017992447e-02f, +2.689669152e-02f, +2.799928877e-01f, +4.450338545e-01f, +3.269511550e-01f, +6.706649948e-02f, -6.699933765e-02f, -3.543481827e-02f, +1.608585983e-02f, +1.421787571e-02f, -1.992070960e-03f, -3.142332045e-03f, -6.400561736e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.232183244e-04f, -1.580598491e-04f, -6.089569785e-04f, +3.522985019e-04f, +2.044579463e-03f, +3.402243142e-05f, -6.094194162e-03f, -8.201234742e-03f, -1.093914263e-03f, +7.356950513e-03f, +7.245820893e-03f, +1.135109078e-03f, -2.072656180e-03f, -7.820950974e-04f, +5.667428546e-04f, +2.870056572e-04f, -1.127399294e-04f, -4.285068405e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.420465088e-03f, +1.116949448e-04f, -9.174807479e-03f, +8.984516335e-05f, +2.062294019e-02f, +1.004850601e-03f, -3.204964307e-02f, -3.794598103e-03f, +3.693360013e-02f, +6.552377066e-03f, -3.219214025e-02f, -6.929229206e-03f, +2.095496663e-02f, +4.594452206e-03f, -9.633776875e-03f, -1.586252531e-03f, +2.629351844e-03f, +6.400561736e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.232183244e-04f, +2.478856778e-04f, +1.568628027e-04f, -7.001165165e-04f, -2.304442459e-04f, +1.271085084e-03f, +2.901966692e-04f, -1.690339236e-03f, -3.067441618e-04f, +1.718542995e-03f, +2.491269374e-04f, -1.342991048e-03f, -1.294079547e-04f, +7.844748965e-04f, +1.246089578e-05f, -3.124785706e-04f, +3.966422846e-05f, +4.285068405e-05f, +0.000000000e+00f, /* 9, 4 (20) */ +0.000000000e+00f, -2.297246763e-03f, -3.479630907e-03f, +1.003264543e-02f, +1.981973860e-02f, -2.091245056e-02f, -7.014590204e-02f, +2.080249736e-02f, +2.717916530e-01f, +4.439399403e-01f, +3.343081056e-01f, +7.431232037e-02f, -6.586422857e-02f, -3.750747445e-02f, +1.530376473e-02f, +1.478461857e-02f, -1.705065303e-03f, -3.255071975e-03f, -1.068563014e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.228343562e-04f, -1.407123858e-04f, -6.082636990e-04f, +2.946885739e-04f, +2.023459698e-03f, +1.824722076e-04f, -5.910292206e-03f, -8.280828147e-03f, -1.403830863e-03f, +7.196504639e-03f, +7.386996087e-03f, +1.318470120e-03f, -2.057821283e-03f, -8.458106722e-04f, +5.534237292e-04f, +3.059532845e-04f, -1.091369052e-04f, -4.696191667e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.297246763e-03f, +3.595806226e-04f, -9.017944677e-03f, -6.102713531e-04f, +2.039249594e-02f, +2.275935685e-03f, -3.175944640e-02f, -5.484937339e-03f, +3.662685597e-02f, +8.270920061e-03f, -3.194301331e-02f, -8.272220254e-03f, +2.082555867e-02f, +5.378927102e-03f, -9.621315979e-03f, -1.898731101e-03f, +2.669016072e-03f, +1.068563014e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.228343562e-04f, +2.365583057e-04f, +1.770881657e-04f, -6.812652106e-04f, -2.769876987e-04f, +1.248140225e-03f, +3.633107207e-04f, -1.669351991e-03f, -3.930082645e-04f, +1.705291065e-03f, +3.277116368e-04f, -1.339795282e-03f, -1.841547287e-04f, +7.888519877e-04f, +3.999720662e-05f, -3.189982554e-04f, +3.147584400e-05f, +4.696191667e-05f, +0.000000000e+00f, /* 9, 5 (20) */ +0.000000000e+00f, -2.174412407e-03f, -3.620343293e-03f, +9.424381734e-03f, +2.011442717e-02f, -1.888899086e-02f, -6.996342983e-02f, +1.489220515e-02f, +2.635108248e-01f, +4.425361094e-01f, +3.415046102e-01f, +8.169931646e-02f, -6.454575845e-02f, -3.956529574e-02f, +1.445795406e-02f, +1.533804229e-02f, -1.399112018e-03f, -3.364208880e-03f, -1.538182181e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.220424252e-04f, -1.237523680e-04f, -6.060520864e-04f, +2.383520973e-04f, +1.998536266e-03f, +3.258108042e-04f, -5.722567552e-03f, -8.350001198e-03f, -1.711781284e-03f, +7.026525481e-03f, +7.521390485e-03f, +1.505275436e-03f, -2.037887028e-03f, -9.096970252e-04f, +5.381663658e-04f, +3.248793961e-04f, -1.049585708e-04f, -5.113806788e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.174412407e-03f, +5.961389283e-04f, -8.840856511e-03f, -1.291536564e-03f, +2.011550824e-02f, +3.524075909e-03f, -3.139613568e-02f, -7.154289331e-03f, +3.623384770e-02f, +9.976211126e-03f, -3.161530167e-02f, -9.612015537e-03f, +2.064140394e-02f, +6.167779090e-03f, -9.581318772e-03f, -2.217729357e-03f, +2.700491916e-03f, +1.538182181e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.220424252e-04f, +2.248613507e-04f, +1.962003325e-04f, -6.609607334e-04f, -3.219732290e-04f, +1.222287742e-03f, +4.348728983e-04f, -1.644292481e-03f, -4.782449426e-04f, +1.687726605e-03f, +4.060620597e-04f, -1.333099948e-03f, -2.393211330e-04f, +7.911253806e-04f, +6.818565330e-05f, -3.246955684e-04f, +2.280166760e-05f, +5.113806788e-05f, +0.000000000e+00f, /* 9, 6 (20) */ +0.000000000e+00f, -2.052369982e-03f, -3.744095661e-03f, +8.818329648e-03f, +2.035277927e-02f, -1.689045460e-02f, -6.963761902e-02f, +9.169637602e-03f, +2.551608236e-01f, +4.408243281e-01f, +3.485311357e-01f, +8.922070695e-02f, -6.304048301e-02f, -4.160318276e-02f, +1.354825704e-02f, +1.587620866e-02f, -1.074232622e-03f, -3.469167451e-03f, -2.049562860e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.208647477e-04f, -1.072134221e-04f, -6.023822883e-04f, +1.833830086e-04f, +1.969977696e-03f, +4.639119216e-04f, -5.531368685e-03f, -8.408742284e-03f, -2.017335882e-03f, +6.847196870e-03f, +7.648707631e-03f, +1.695284414e-03f, -2.012741869e-03f, -9.736057991e-04f, +5.209415823e-04f, +3.437278112e-04f, -1.001916974e-04f, -5.536485254e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.052369982e-03f, +8.210002790e-04f, -8.644656178e-03f, -1.952497297e-03f, +1.979353501e-02f, +4.746363651e-03f, -3.096126278e-02f, -8.798581812e-03f, +3.575560276e-02f, +1.166393773e-02f, -3.120923961e-02f, -1.094511548e-02f, +2.040208281e-02f, +6.958904470e-03f, -9.513133119e-03f, -2.542424925e-03f, +2.723293584e-03f, +2.049562860e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.208647477e-04f, +2.128466679e-04f, +2.141694439e-04f, -6.392930840e-04f, -3.653014671e-04f, +1.193633229e-03f, +5.047063370e-04f, -1.615244300e-03f, -5.622318479e-04f, +1.665881937e-03f, +4.839682608e-04f, -1.322884248e-03f, -2.947593716e-04f, +7.912460132e-04f, +9.695511913e-05f, -3.295253456e-04f, +1.365700397e-05f, +5.536485254e-05f, +0.000000000e+00f, /* 9, 7 (20) */ +0.000000000e+00f, -1.931505234e-03f, -3.851309083e-03f, +8.215947360e-03f, +2.053616228e-02f, -1.492047690e-02f, -6.917370710e-02f, +3.638268917e-03f, +2.467520813e-01f, +4.388069922e-01f, +3.553783325e-01f, +9.686941458e-02f, -6.134519860e-02f, -4.361592463e-02f, +1.257465124e-02f, +1.639715024e-02f, -7.305048110e-04f, -3.569359148e-03f, -2.603211385e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.193239221e-04f, -9.112668851e-05f, -5.973163362e-04f, +1.298691629e-04f, +1.937955811e-03f, +5.966614467e-04f, -5.337045545e-03f, -8.457057141e-03f, -2.320069358e-03f, +6.658718969e-03f, +7.768659925e-03f, +1.888246358e-03f, -1.982282247e-03f, -1.037384200e-03f, +5.017244508e-04f, +3.624405091e-04f, -9.482447532e-05f, -5.962712134e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.931505234e-03f, +1.033846947e-03f, -8.430486735e-03f, -2.591790381e-03f, +1.942823355e-02f, +5.939996881e-03f, -3.045655644e-02f, -1.041382611e-02f, +3.519337091e-02f, +1.332981967e-02f, -3.072527135e-02f, -1.226799973e-02f, +2.010732344e-02f, +7.750150484e-03f, -9.416178000e-03f, -2.871950271e-03f, +2.736950588e-03f, +2.603211385e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.193239221e-04f, +2.005657339e-04f, +2.309700388e-04f, -6.163546279e-04f, -4.068794000e-04f, +1.162288975e-03f, +5.726403428e-04f, -1.582301631e-03f, -6.447501854e-04f, +1.639801227e-03f, +5.612201445e-04f, -1.309137140e-03f, -3.503187417e-04f, +7.891704580e-04f, +1.262309784e-04f, -3.334441850e-04f, +4.059484342e-06f, +5.962712134e-05f, +0.000000000e+00f, /* 9, 8 (20) */ +0.000000000e+00f, -1.812181312e-03f, -3.942435771e-03f, +7.618631023e-03f, +2.066603144e-02f, -1.298252109e-02f, -6.857704566e-02f, -1.698776629e-03f, +2.382950242e-01f, +4.364869229e-01f, +3.620370515e-01f, +1.046380745e-01f, -5.945695224e-02f, -4.559820688e-02f, +1.153726704e-02f, +1.689887469e-02f, -3.680643019e-04f, -3.664183623e-03f, -3.199482598e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.174428396e-04f, -7.552081317e-05f, -5.909179227e-04f, +7.789228352e-05f, +1.902645294e-03f, +7.239574817e-04f, -5.139948840e-03f, -8.494968729e-03f, -2.619561526e-03f, +6.461307976e-03f, +7.880969246e-03f, +2.083900841e-03f, -1.946412967e-03f, -1.100875244e-03f, +4.804944906e-04f, +3.809577389e-04f, -8.884660549e-05f, -6.390888365e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.812181312e-03f, +1.234412681e-03f, -8.199516696e-03f, -3.208145009e-03f, +1.902135415e-02f, +7.102285855e-03f, -2.988391610e-02f, -1.199612774e-02f, +3.454862073e-02f, +1.496962089e-02f, -3.016405121e-02f, -1.357713687e-02f, +1.975700470e-02f, +8.539320942e-03f, -9.289947022e-03f, -3.205394456e-03f, +2.741010072e-03f, +3.199482598e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.174428396e-04f, +1.880694730e-04f, +2.465810426e-04f, -5.922397644e-04f, -4.466205602e-04f, +1.128373559e-03f, +6.385108396e-04f, -1.545568935e-03f, -7.255853330e-04f, +1.609540390e-03f, +6.376080704e-04f, -1.291857461e-03f, -4.058460523e-04f, +7.848611546e-04f, +1.559352700e-04f, -3.364106453e-04f, -5.970935089e-06f, +6.390888365e-05f, +0.000000000e+00f, /* 9, 9 (20) */ +0.000000000e+00f, -1.694738472e-03f, -4.017956584e-03f, +7.027713101e-03f, +2.074392372e-02f, -1.107987579e-02f, -6.785308817e-02f, -6.838725469e-03f, +2.298000555e-01f, +4.338673614e-01f, +3.684983595e-01f, +1.125190437e-01f, -5.737305140e-02f, -4.754461985e-02f, +1.043639179e-02f, +1.737936918e-02f, +1.289343693e-05f, -3.753030229e-03f, -3.838571435e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.152445962e-04f, -6.042194565e-05f, -5.832521816e-04f, +2.752792830e-05f, +1.864223241e-03f, +8.457103473e-04f, -4.940429374e-03f, -8.522517089e-03f, -2.915398074e-03f, +6.255195794e-03f, +7.985367570e-03f, +2.281978078e-03f, -1.905047567e-03f, -1.163918025e-03f, +4.572358524e-04f, +3.992181370e-04f, -8.224938858e-05f, -6.819333424e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.694738472e-03f, +1.422482154e-03f, -7.952935653e-03f, -3.800384773e-03f, +1.857473359e-02f, +8.230659415e-03f, -2.924540526e-02f, -1.354169668e-02f, +3.382303539e-02f, +1.657916129e-02f, -2.952644314e-02f, -1.486899433e-02f, +1.935115864e-02f, +9.324182096e-03f, -9.134011752e-03f, -3.541805101e-03f, +2.735039137e-03f, +3.838571435e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.152445962e-04f, +1.754080893e-04f, +2.609857401e-04f, -5.670445928e-04f, -4.844451928e-04f, +1.092011438e-03f, +7.021607935e-04f, -1.505160608e-03f, -8.045274491e-04f, +1.575166969e-03f, +7.129234617e-04f, -1.271054027e-03f, -4.611860537e-04f, +7.782866263e-04f, +1.859868858e-04f, -3.383854403e-04f, -1.641198385e-05f, +6.819333424e-05f, +0.000000000e+00f, /* 9,10 (20) */ +0.000000000e+00f, -1.579493876e-03f, -4.078378530e-03f, +6.444460919e-03f, +2.077145165e-02f, -9.215652553e-03f, -6.700737783e-02f, -1.177915484e-02f, +2.212775384e-01f, +4.309519633e-01f, +3.747535553e-01f, +1.205044113e-01f, -5.509107332e-02f, -4.944966741e-02f, +9.272473769e-03f, +1.783660504e-02f, +4.121115739e-04f, -3.835279617e-03f, -4.520504777e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.127524080e-04f, -4.585374517e-05f, -5.743854683e-04f, -2.115452835e-05f, +1.822868728e-03f, +9.618425585e-04f, -4.738837376e-03f, -8.539759156e-03f, -3.207171306e-03f, +6.040629666e-03f, +8.081597560e-03f, +2.482199329e-03f, -1.858108677e-03f, -1.226347989e-03f, +4.319374973e-04f, +4.171588535e-04f, -7.502581213e-05f, -7.246288396e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.579493876e-03f, +1.597890243e-03f, -7.691949913e-03f, -4.367429366e-03f, +1.809028839e-02f, +9.322670852e-03f, -2.854324447e-02f, -1.504685729e-02f, +3.301850795e-02f, +1.815432825e-02f, -2.881351967e-02f, -1.614004836e-02f, +1.888997259e-02f, +1.010246872e-02f, -8.948024866e-03f, -3.880190541e-03f, +2.718627153e-03f, +4.520504777e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.127524080e-04f, +1.626309055e-04f, +2.741717344e-04f, -5.408665778e-04f, -5.202803985e-04f, +1.053332509e-03f, +7.634406120e-04f, -1.461200618e-03f, -8.813720660e-04f, +1.536759961e-03f, +7.869594125e-04f, -1.246745698e-03f, -5.161818798e-04f, +7.694216806e-04f, +2.163017729e-04f, -3.393316318e-04f, -2.723909709e-05f, +7.246288396e-05f, +0.000000000e+00f, /* 9,11 (20) */ +0.000000000e+00f, -1.466741468e-03f, -4.124232275e-03f, +5.870075451e-03f, +2.075029712e-02f, -7.392783826e-03f, -6.604553527e-02f, -1.651799222e-02f, +2.127377792e-01f, +4.277447920e-01f, +3.807941849e-01f, +1.285860089e-01f, -5.260887399e-02f, -5.130777609e-02f, +8.046125780e-03f, +1.826854253e-02f, +8.292704274e-04f, -3.910305430e-03f, -5.245133617e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.099895277e-04f, -3.183739373e-05f, -5.643851446e-04f, -6.809189769e-05f, +1.778762372e-03f, +1.072288776e-03f, -4.535521841e-03f, -8.546768544e-03f, -3.494480876e-03f, +5.817871779e-03f, +8.169413149e-03f, +2.684277322e-03f, -1.805528355e-03f, -1.287997228e-03f, +4.045933660e-04f, +4.347156863e-04f, -6.717063500e-05f, -7.669919420e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.466741468e-03f, +1.760521149e-03f, -7.417778179e-03f, -4.908295944e-03f, +1.757000799e-02f, +1.037600336e-02f, -2.777980385e-02f, -1.650805790e-02f, +3.213713588e-02f, +1.969108821e-02f, -2.802656026e-02f, -1.738679406e-02f, +1.837379071e-02f, +1.087189040e-02f, -8.731723093e-03f, -4.219522173e-03f, +2.691388056e-03f, +5.245133617e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.099895277e-04f, +1.497862086e-04f, +2.861308923e-04f, -5.138042171e-04f, -5.540602536e-04f, +1.012471674e-03f, +8.222085199e-04f, -1.413822106e-03f, -9.559206659e-04f, +1.494409627e-03f, +8.595112945e-04f, -1.218961417e-03f, -5.706755001e-04f, +7.582475927e-04f, +2.467931502e-04f, -3.392148164e-04f, -3.842544483e-05f, +7.669919420e-05f, +0.000000000e+00f, /* 9,12 (20) */ +0.000000000e+00f, -1.356751941e-03f, -4.156069669e-03f, +5.305690306e-03f, +2.068220522e-02f, -5.614021453e-03f, -6.497324649e-02f, -2.105351406e-02f, +2.041910107e-01f, +4.242503111e-01f, +3.866120567e-01f, +1.367554220e-01f, -4.992459667e-02f, -5.311330444e-02f, +6.758128552e-03f, +1.867313590e-02f, +1.263986114e-03f, -3.977476065e-03f, -6.012125559e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.069791648e-04f, -1.839161634e-05f, -5.533193656e-04f, -1.132271637e-04f, +1.732085908e-03f, +1.176995732e-03f, -4.330829877e-03f, -8.543635297e-03f, -3.776934500e-03f, +5.587198838e-03f, +8.248580102e-03f, +2.887916697e-03f, -1.747248417e-03f, -1.348694792e-03f, +3.752025402e-04f, +4.518232228e-04f, -5.868046884e-05f, -8.088321544e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.356751941e-03f, +1.910307357e-03f, -7.131647286e-03f, -5.422100161e-03f, +1.701594774e-02f, +1.138847504e-02f, -2.695759533e-02f, -1.792188001e-02f, +3.118121521e-02f, +2.118549784e-02f, -2.716704897e-02f, -1.860575548e-02f, +1.780311521e-02f, +1.163013800e-02f, -8.484929943e-03f, -4.558736989e-03f, +2.652962611e-03f, +6.012125559e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.069791648e-04f, +1.369211034e-04f, +2.968592758e-04f, -4.859567114e-04f, -5.857259060e-04f, +9.695683799e-04f, +8.783309074e-04f, -1.363166966e-03f, -1.027981240e-03f, +1.448217257e-03f, +9.303773597e-04f, -1.187740218e-03f, -6.245081812e-04f, +7.447522702e-04f, +2.773717379e-04f, -3.380033093e-04f, -4.994197077e-05f, +8.088321544e-05f, +0.000000000e+00f, /* 9,13 (20) */ +0.000000000e+00f, -1.249772776e-03f, -4.174461285e-03f, +4.752370941e-03f, +2.056897806e-02f, -3.881935545e-03f, -6.379625076e-02f, -2.538434394e-02f, +1.956473754e-01f, +4.204733766e-01f, +3.921992556e-01f, +1.450040021e-01f, -4.703667997e-02f, -5.486055286e-02f, +5.409433760e-03f, +1.904833844e-02f, +1.715809337e-03f, -4.036156533e-03f, -6.820957713e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.037444079e-04f, -5.532707939e-06f, -5.412568705e-04f, -1.565094550e-04f, +1.683021757e-03f, +1.275922127e-03f, -4.125106062e-03f, -8.530465613e-03f, -4.054148657e-03f, +5.348901608e-03f, +8.318876553e-03f, +3.092814483e-03f, -1.683220745e-03f, -1.408267004e-03f, +3.437693945e-04f, +4.684149900e-04f, -4.955385621e-05f, -8.499522959e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.249772776e-03f, +2.047228461e-03f, -6.834788011e-03f, -5.908056872e-03f, +1.643022183e-02f, +1.235804342e-02f, -2.607926443e-02f, -1.928504698e-02f, +3.015323397e-02f, +2.263371510e-02f, -2.623667161e-02f, -1.979349569e-02f, +1.717860703e-02f, +1.237489027e-02f, -8.207558205e-03f, -4.896740299e-03f, +2.603020640e-03f, +6.820957713e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.037444079e-04f, +1.240813725e-04f, +3.063570604e-04f, -4.574236364e-04f, -6.152256489e-04f, +9.247661581e-04f, +9.316826521e-04f, -1.309385403e-03f, -1.097368829e-03f, +1.398294905e-03f, +9.993593378e-04f, -1.153131200e-03f, -6.775209553e-04f, +7.289304000e-04f, +3.079459993e-04f, -3.356683205e-04f, -6.175744052e-05f, +8.499522959e-05f, +0.000000000e+00f, /* 9,14 (20) */ +0.000000000e+00f, -1.146028368e-03f, -4.179993993e-03f, +4.211114070e-03f, +2.041246861e-02f, -2.198913789e-03f, -6.252032863e-02f, -2.950945000e-02f, +1.871169098e-01f, +4.164192280e-01f, +3.975481572e-01f, +1.533228787e-01f, -4.394386549e-02f, -5.654377361e-02f, +4.001166755e-03f, +1.939210783e-02f, +2.184224327e-03f, -4.085710390e-03f, -7.670910009e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.003081502e-04f, +6.725433176e-06f, -5.282667776e-04f, -1.978940026e-04f, +1.631752616e-03f, +1.369038514e-03f, -3.918691821e-03f, -8.507381527e-03f, -4.325749271e-03f, +5.103284432e-03f, +8.380093529e-03f, +3.298660581e-03f, -1.613407579e-03f, -1.466537801e-03f, +3.103037383e-04f, +4.844236112e-04f, -3.979134513e-05f, -8.901489621e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.146028368e-03f, +2.171309833e-03f, -6.528430950e-03f, -6.365480509e-03f, +1.581499619e-02f, +1.328280957e-02f, -2.514758177e-02f, -2.059443238e-02f, +2.905586514e-02f, +2.403201000e-02f, -2.523731227e-02f, -2.094662689e-02f, +1.650108607e-02f, +1.310382067e-02f, -7.899612206e-03f, -5.232408619e-03f, +2.541263200e-03f, +7.670910009e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.003081502e-04f, +1.113113465e-04f, +3.146284418e-04f, -4.283046210e-04f, -6.425149696e-04f, +8.782121549e-04f, +9.821474132e-04f, -1.252635460e-03f, -1.163906035e-03f, +1.344765095e-03f, +1.066263026e-03f, -1.115193478e-03f, -7.295550957e-04f, +7.107835746e-04f, +3.384223955e-04f, -3.321841264e-04f, -7.383849955e-05f, +8.901489621e-05f, +0.000000000e+00f, /* 9,15 (20) */ +0.000000000e+00f, -1.045720218e-03f, -4.173268560e-03f, +3.682847292e-03f, +2.021457460e-02f, -5.671611725e-04f, -6.115129012e-02f, -3.342814182e-02f, +1.786095282e-01f, +4.120934787e-01f, +4.026514416e-01f, +1.617029722e-01f, -4.064520491e-02f, -5.815718119e-02f, +2.534628954e-03f, +1.970241157e-02f, +2.668647938e-03f, -4.125501735e-03f, -8.561058971e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.669301793e-05f, +1.837126566e-05f, -5.144183841e-04f, -2.373420828e-04f, +1.578461049e-03f, +1.456327142e-03f, -3.711924803e-03f, -8.474520581e-03f, -4.591372366e-03f, +4.850664711e-03f, +8.432035445e-03f, +3.505138284e-03f, -1.537781791e-03f, -1.523329078e-03f, +2.748209470e-04f, +4.997809705e-04f, -2.939555957e-05f, -9.292130267e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.045720218e-03f, +2.282621180e-03f, -6.213802508e-03f, -6.793785130e-03f, +1.517248122e-02f, +1.416102173e-02f, -2.416543436e-02f, -2.184706784e-02f, +2.789195911e-02f, +2.537677510e-02f, -2.417104924e-02f, -2.206182037e-02f, +1.577153098e-02f, +1.381460424e-02f, -7.561189810e-03f, -5.564592746e-03f, +2.467424700e-03f, +8.561058971e-04f, +0.000000000e+00f, +0.000000000e+00f, -9.669301793e-05f, +9.865378036e-05f, +3.216815302e-04f, -3.986990295e-04f, -6.675565758e-04f, +8.300566539e-04f, +1.029617897e-03f, -1.193082535e-03f, -1.227423523e-03f, +1.287760488e-03f, +1.130898870e-03f, -1.073996092e-03f, -7.804525961e-04f, +6.903203990e-04f, +3.687056509e-04f, -3.275282327e-04f, -8.614974053e-05f, +9.292130267e-05f, +0.000000000e+00f, /* 9,16 (20) */ +0.000000000e+00f, -9.490271998e-04f, -4.154897294e-03f, +3.168428908e-03f, +1.997723252e-02f, +1.011299876e-03f, -5.969496298e-02f, -3.714006662e-02f, +1.701350077e-01f, +4.075021063e-01f, +4.075021063e-01f, +1.701350077e-01f, -3.714006662e-02f, -5.969496298e-02f, +1.011299876e-03f, +1.997723252e-02f, +3.168428908e-03f, -4.154897294e-03f, -9.490271998e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.292130267e-05f, +2.939555957e-05f, -4.997809705e-04f, -2.748209470e-04f, +1.523329078e-03f, +1.537781791e-03f, -3.505138284e-03f, -8.432035445e-03f, -4.850664711e-03f, +4.591372366e-03f, +8.474520581e-03f, +3.711924803e-03f, -1.456327142e-03f, -1.578461049e-03f, +2.373420828e-04f, +5.144183841e-04f, -1.837126566e-05f, -9.669301793e-05f, +0.000000000e+00f, +0.000000000e+00f, +9.490271998e-04f, +2.381274960e-03f, -5.892120978e-03f, -7.192484159e-03f, +1.450492464e-02f, +1.499107838e-02f, -2.313581646e-02f, -2.304015037e-02f, +2.666453559e-02f, +2.666453559e-02f, -2.304015037e-02f, -2.313581646e-02f, +1.499107838e-02f, +1.450492464e-02f, -7.192484159e-03f, -5.892120978e-03f, +2.381274960e-03f, +9.490271998e-04f, +0.000000000e+00f, +0.000000000e+00f, -9.292130267e-05f, +8.614974053e-05f, +3.275282327e-04f, -3.687056509e-04f, -6.903203990e-04f, +7.804525961e-04f, +1.073996092e-03f, -1.130898870e-03f, -1.287760488e-03f, +1.227423523e-03f, +1.193082535e-03f, -1.029617897e-03f, -8.300566539e-04f, +6.675565758e-04f, +3.986990295e-04f, -3.216815302e-04f, -9.865378036e-05f, +9.669301793e-05f, +0.000000000e+00f, /* 9,17 (20) */ +0.000000000e+00f, -8.561058971e-04f, -4.125501735e-03f, +2.668647938e-03f, +1.970241157e-02f, +2.534628954e-03f, -5.815718119e-02f, -4.064520491e-02f, +1.617029722e-01f, +4.026514416e-01f, +4.120934787e-01f, +1.786095282e-01f, -3.342814182e-02f, -6.115129012e-02f, -5.671611725e-04f, +2.021457460e-02f, +3.682847292e-03f, -4.173268560e-03f, -1.045720218e-03f, +0.000000000e+00f, +0.000000000e+00f, +8.901489621e-05f, +3.979134513e-05f, -4.844236112e-04f, -3.103037383e-04f, +1.466537801e-03f, +1.613407579e-03f, -3.298660581e-03f, -8.380093529e-03f, -5.103284432e-03f, +4.325749271e-03f, +8.507381527e-03f, +3.918691821e-03f, -1.369038514e-03f, -1.631752616e-03f, +1.978940026e-04f, +5.282667776e-04f, -6.725433176e-06f, -1.003081502e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.561058971e-04f, +2.467424700e-03f, -5.564592746e-03f, -7.561189810e-03f, +1.381460424e-02f, +1.577153098e-02f, -2.206182037e-02f, -2.417104924e-02f, +2.537677510e-02f, +2.789195911e-02f, -2.184706784e-02f, -2.416543436e-02f, +1.416102173e-02f, +1.517248122e-02f, -6.793785130e-03f, -6.213802508e-03f, +2.282621180e-03f, +1.045720218e-03f, +0.000000000e+00f, +0.000000000e+00f, -8.901489621e-05f, +7.383849955e-05f, +3.321841264e-04f, -3.384223955e-04f, -7.107835746e-04f, +7.295550957e-04f, +1.115193478e-03f, -1.066263026e-03f, -1.344765095e-03f, +1.163906035e-03f, +1.252635460e-03f, -9.821474132e-04f, -8.782121549e-04f, +6.425149696e-04f, +4.283046210e-04f, -3.146284418e-04f, -1.113113465e-04f, +1.003081502e-04f, +0.000000000e+00f, /* 9,18 (20) */ +0.000000000e+00f, -7.670910009e-04f, -4.085710390e-03f, +2.184224327e-03f, +1.939210783e-02f, +4.001166755e-03f, -5.654377361e-02f, -4.394386549e-02f, +1.533228787e-01f, +3.975481572e-01f, +4.164192280e-01f, +1.871169098e-01f, -2.950945000e-02f, -6.252032863e-02f, -2.198913789e-03f, +2.041246861e-02f, +4.211114070e-03f, -4.179993993e-03f, -1.146028368e-03f, +0.000000000e+00f, +0.000000000e+00f, +8.499522959e-05f, +4.955385621e-05f, -4.684149900e-04f, -3.437693945e-04f, +1.408267004e-03f, +1.683220745e-03f, -3.092814483e-03f, -8.318876553e-03f, -5.348901608e-03f, +4.054148657e-03f, +8.530465613e-03f, +4.125106062e-03f, -1.275922127e-03f, -1.683021757e-03f, +1.565094550e-04f, +5.412568705e-04f, +5.532707939e-06f, -1.037444079e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.670910009e-04f, +2.541263200e-03f, -5.232408619e-03f, -7.899612206e-03f, +1.310382067e-02f, +1.650108607e-02f, -2.094662689e-02f, -2.523731227e-02f, +2.403201000e-02f, +2.905586514e-02f, -2.059443238e-02f, -2.514758177e-02f, +1.328280957e-02f, +1.581499619e-02f, -6.365480509e-03f, -6.528430950e-03f, +2.171309833e-03f, +1.146028368e-03f, +0.000000000e+00f, +0.000000000e+00f, -8.499522959e-05f, +6.175744052e-05f, +3.356683205e-04f, -3.079459993e-04f, -7.289304000e-04f, +6.775209553e-04f, +1.153131200e-03f, -9.993593378e-04f, -1.398294905e-03f, +1.097368829e-03f, +1.309385403e-03f, -9.316826521e-04f, -9.247661581e-04f, +6.152256489e-04f, +4.574236364e-04f, -3.063570604e-04f, -1.240813725e-04f, +1.037444079e-04f, +0.000000000e+00f, /* 9,19 (20) */ +0.000000000e+00f, -6.820957713e-04f, -4.036156533e-03f, +1.715809337e-03f, +1.904833844e-02f, +5.409433760e-03f, -5.486055286e-02f, -4.703667997e-02f, +1.450040021e-01f, +3.921992556e-01f, +4.204733766e-01f, +1.956473754e-01f, -2.538434394e-02f, -6.379625076e-02f, -3.881935545e-03f, +2.056897806e-02f, +4.752370941e-03f, -4.174461285e-03f, -1.249772776e-03f, +0.000000000e+00f, +0.000000000e+00f, +8.088321544e-05f, +5.868046884e-05f, -4.518232228e-04f, -3.752025402e-04f, +1.348694792e-03f, +1.747248417e-03f, -2.887916697e-03f, -8.248580102e-03f, -5.587198838e-03f, +3.776934500e-03f, +8.543635297e-03f, +4.330829877e-03f, -1.176995732e-03f, -1.732085908e-03f, +1.132271637e-04f, +5.533193656e-04f, +1.839161634e-05f, -1.069791648e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.820957713e-04f, +2.603020640e-03f, -4.896740299e-03f, -8.207558205e-03f, +1.237489027e-02f, +1.717860703e-02f, -1.979349569e-02f, -2.623667161e-02f, +2.263371510e-02f, +3.015323397e-02f, -1.928504698e-02f, -2.607926443e-02f, +1.235804342e-02f, +1.643022183e-02f, -5.908056872e-03f, -6.834788011e-03f, +2.047228461e-03f, +1.249772776e-03f, +0.000000000e+00f, +0.000000000e+00f, -8.088321544e-05f, +4.994197077e-05f, +3.380033093e-04f, -2.773717379e-04f, -7.447522702e-04f, +6.245081812e-04f, +1.187740218e-03f, -9.303773597e-04f, -1.448217257e-03f, +1.027981240e-03f, +1.363166966e-03f, -8.783309074e-04f, -9.695683799e-04f, +5.857259060e-04f, +4.859567114e-04f, -2.968592758e-04f, -1.369211034e-04f, +1.069791648e-04f, +0.000000000e+00f, /* 9,20 (20) */ +0.000000000e+00f, -6.012125559e-04f, -3.977476065e-03f, +1.263986114e-03f, +1.867313590e-02f, +6.758128552e-03f, -5.311330444e-02f, -4.992459667e-02f, +1.367554220e-01f, +3.866120567e-01f, +4.242503111e-01f, +2.041910107e-01f, -2.105351406e-02f, -6.497324649e-02f, -5.614021453e-03f, +2.068220522e-02f, +5.305690306e-03f, -4.156069669e-03f, -1.356751941e-03f, +0.000000000e+00f, +0.000000000e+00f, +7.669919420e-05f, +6.717063500e-05f, -4.347156863e-04f, -4.045933660e-04f, +1.287997228e-03f, +1.805528355e-03f, -2.684277322e-03f, -8.169413149e-03f, -5.817871779e-03f, +3.494480876e-03f, +8.546768544e-03f, +4.535521841e-03f, -1.072288776e-03f, -1.778762372e-03f, +6.809189769e-05f, +5.643851446e-04f, +3.183739373e-05f, -1.099895277e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.012125559e-04f, +2.652962611e-03f, -4.558736989e-03f, -8.484929943e-03f, +1.163013800e-02f, +1.780311521e-02f, -1.860575548e-02f, -2.716704897e-02f, +2.118549784e-02f, +3.118121521e-02f, -1.792188001e-02f, -2.695759533e-02f, +1.138847504e-02f, +1.701594774e-02f, -5.422100161e-03f, -7.131647286e-03f, +1.910307357e-03f, +1.356751941e-03f, +0.000000000e+00f, +0.000000000e+00f, -7.669919420e-05f, +3.842544483e-05f, +3.392148164e-04f, -2.467931502e-04f, -7.582475927e-04f, +5.706755001e-04f, +1.218961417e-03f, -8.595112945e-04f, -1.494409627e-03f, +9.559206659e-04f, +1.413822106e-03f, -8.222085199e-04f, -1.012471674e-03f, +5.540602536e-04f, +5.138042171e-04f, -2.861308923e-04f, -1.497862086e-04f, +1.099895277e-04f, +0.000000000e+00f, /* 9,21 (20) */ +0.000000000e+00f, -5.245133617e-04f, -3.910305430e-03f, +8.292704274e-04f, +1.826854253e-02f, +8.046125780e-03f, -5.130777609e-02f, -5.260887399e-02f, +1.285860089e-01f, +3.807941849e-01f, +4.277447920e-01f, +2.127377792e-01f, -1.651799222e-02f, -6.604553527e-02f, -7.392783826e-03f, +2.075029712e-02f, +5.870075451e-03f, -4.124232275e-03f, -1.466741468e-03f, +0.000000000e+00f, +0.000000000e+00f, +7.246288396e-05f, +7.502581213e-05f, -4.171588535e-04f, -4.319374973e-04f, +1.226347989e-03f, +1.858108677e-03f, -2.482199329e-03f, -8.081597560e-03f, -6.040629666e-03f, +3.207171306e-03f, +8.539759156e-03f, +4.738837376e-03f, -9.618425585e-04f, -1.822868728e-03f, +2.115452835e-05f, +5.743854683e-04f, +4.585374517e-05f, -1.127524080e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.245133617e-04f, +2.691388056e-03f, -4.219522173e-03f, -8.731723093e-03f, +1.087189040e-02f, +1.837379071e-02f, -1.738679406e-02f, -2.802656026e-02f, +1.969108821e-02f, +3.213713588e-02f, -1.650805790e-02f, -2.777980385e-02f, +1.037600336e-02f, +1.757000799e-02f, -4.908295944e-03f, -7.417778179e-03f, +1.760521149e-03f, +1.466741468e-03f, +0.000000000e+00f, +0.000000000e+00f, -7.246288396e-05f, +2.723909709e-05f, +3.393316318e-04f, -2.163017729e-04f, -7.694216806e-04f, +5.161818798e-04f, +1.246745698e-03f, -7.869594125e-04f, -1.536759961e-03f, +8.813720660e-04f, +1.461200618e-03f, -7.634406120e-04f, -1.053332509e-03f, +5.202803985e-04f, +5.408665778e-04f, -2.741717344e-04f, -1.626309055e-04f, +1.127524080e-04f, +0.000000000e+00f, /* 9,22 (20) */ +0.000000000e+00f, -4.520504777e-04f, -3.835279617e-03f, +4.121115739e-04f, +1.783660504e-02f, +9.272473769e-03f, -4.944966741e-02f, -5.509107332e-02f, +1.205044113e-01f, +3.747535553e-01f, +4.309519633e-01f, +2.212775384e-01f, -1.177915484e-02f, -6.700737783e-02f, -9.215652553e-03f, +2.077145165e-02f, +6.444460919e-03f, -4.078378530e-03f, -1.579493876e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.819333424e-05f, +8.224938858e-05f, -3.992181370e-04f, -4.572358524e-04f, +1.163918025e-03f, +1.905047567e-03f, -2.281978078e-03f, -7.985367570e-03f, -6.255195794e-03f, +2.915398074e-03f, +8.522517089e-03f, +4.940429374e-03f, -8.457103473e-04f, -1.864223241e-03f, -2.752792830e-05f, +5.832521816e-04f, +6.042194565e-05f, -1.152445962e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.520504777e-04f, +2.718627153e-03f, -3.880190541e-03f, -8.948024866e-03f, +1.010246872e-02f, +1.888997259e-02f, -1.614004836e-02f, -2.881351967e-02f, +1.815432825e-02f, +3.301850795e-02f, -1.504685729e-02f, -2.854324447e-02f, +9.322670852e-03f, +1.809028839e-02f, -4.367429366e-03f, -7.691949913e-03f, +1.597890243e-03f, +1.579493876e-03f, +0.000000000e+00f, +0.000000000e+00f, -6.819333424e-05f, +1.641198385e-05f, +3.383854403e-04f, -1.859868858e-04f, -7.782866263e-04f, +4.611860537e-04f, +1.271054027e-03f, -7.129234617e-04f, -1.575166969e-03f, +8.045274491e-04f, +1.505160608e-03f, -7.021607935e-04f, -1.092011438e-03f, +4.844451928e-04f, +5.670445928e-04f, -2.609857401e-04f, -1.754080893e-04f, +1.152445962e-04f, +0.000000000e+00f, /* 9,23 (20) */ +0.000000000e+00f, -3.838571435e-04f, -3.753030229e-03f, +1.289343693e-05f, +1.737936918e-02f, +1.043639179e-02f, -4.754461985e-02f, -5.737305140e-02f, +1.125190437e-01f, +3.684983595e-01f, +4.338673614e-01f, +2.298000555e-01f, -6.838725469e-03f, -6.785308817e-02f, -1.107987579e-02f, +2.074392372e-02f, +7.027713101e-03f, -4.017956584e-03f, -1.694738472e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.390888365e-05f, +8.884660549e-05f, -3.809577389e-04f, -4.804944906e-04f, +1.100875244e-03f, +1.946412967e-03f, -2.083900841e-03f, -7.880969246e-03f, -6.461307976e-03f, +2.619561526e-03f, +8.494968729e-03f, +5.139948840e-03f, -7.239574817e-04f, -1.902645294e-03f, -7.789228352e-05f, +5.909179227e-04f, +7.552081317e-05f, -1.174428396e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.838571435e-04f, +2.735039137e-03f, -3.541805101e-03f, -9.134011752e-03f, +9.324182096e-03f, +1.935115864e-02f, -1.486899433e-02f, -2.952644314e-02f, +1.657916129e-02f, +3.382303539e-02f, -1.354169668e-02f, -2.924540526e-02f, +8.230659415e-03f, +1.857473359e-02f, -3.800384773e-03f, -7.952935653e-03f, +1.422482154e-03f, +1.694738472e-03f, +0.000000000e+00f, +0.000000000e+00f, -6.390888365e-05f, +5.970935089e-06f, +3.364106453e-04f, -1.559352700e-04f, -7.848611546e-04f, +4.058460523e-04f, +1.291857461e-03f, -6.376080704e-04f, -1.609540390e-03f, +7.255853330e-04f, +1.545568935e-03f, -6.385108396e-04f, -1.128373559e-03f, +4.466205602e-04f, +5.922397644e-04f, -2.465810426e-04f, -1.880694730e-04f, +1.174428396e-04f, +0.000000000e+00f, /* 9,24 (20) */ +0.000000000e+00f, -3.199482598e-04f, -3.664183623e-03f, -3.680643019e-04f, +1.689887469e-02f, +1.153726704e-02f, -4.559820688e-02f, -5.945695224e-02f, +1.046380745e-01f, +3.620370515e-01f, +4.364869229e-01f, +2.382950242e-01f, -1.698776629e-03f, -6.857704566e-02f, -1.298252109e-02f, +2.066603144e-02f, +7.618631023e-03f, -3.942435771e-03f, -1.812181312e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.962712134e-05f, +9.482447532e-05f, -3.624405091e-04f, -5.017244508e-04f, +1.037384200e-03f, +1.982282247e-03f, -1.888246358e-03f, -7.768659925e-03f, -6.658718969e-03f, +2.320069358e-03f, +8.457057141e-03f, +5.337045545e-03f, -5.966614467e-04f, -1.937955811e-03f, -1.298691629e-04f, +5.973163362e-04f, +9.112668851e-05f, -1.193239221e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.199482598e-04f, +2.741010072e-03f, -3.205394456e-03f, -9.289947022e-03f, +8.539320942e-03f, +1.975700470e-02f, -1.357713687e-02f, -3.016405121e-02f, +1.496962089e-02f, +3.454862073e-02f, -1.199612774e-02f, -2.988391610e-02f, +7.102285855e-03f, +1.902135415e-02f, -3.208145009e-03f, -8.199516696e-03f, +1.234412681e-03f, +1.812181312e-03f, +0.000000000e+00f, +0.000000000e+00f, -5.962712134e-05f, -4.059484342e-06f, +3.334441850e-04f, -1.262309784e-04f, -7.891704580e-04f, +3.503187417e-04f, +1.309137140e-03f, -5.612201445e-04f, -1.639801227e-03f, +6.447501854e-04f, +1.582301631e-03f, -5.726403428e-04f, -1.162288975e-03f, +4.068794000e-04f, +6.163546279e-04f, -2.309700388e-04f, -2.005657339e-04f, +1.193239221e-04f, +0.000000000e+00f, /* 9,25 (20) */ +0.000000000e+00f, -2.603211385e-04f, -3.569359148e-03f, -7.305048110e-04f, +1.639715024e-02f, +1.257465124e-02f, -4.361592463e-02f, -6.134519860e-02f, +9.686941458e-02f, +3.553783325e-01f, +4.388069922e-01f, +2.467520813e-01f, +3.638268917e-03f, -6.917370710e-02f, -1.492047690e-02f, +2.053616228e-02f, +8.215947360e-03f, -3.851309083e-03f, -1.931505234e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.536485254e-05f, +1.001916974e-04f, -3.437278112e-04f, -5.209415823e-04f, +9.736057991e-04f, +2.012741869e-03f, -1.695284414e-03f, -7.648707631e-03f, -6.847196870e-03f, +2.017335882e-03f, +8.408742284e-03f, +5.531368685e-03f, -4.639119216e-04f, -1.969977696e-03f, -1.833830086e-04f, +6.023822883e-04f, +1.072134221e-04f, -1.208647477e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.603211385e-04f, +2.736950588e-03f, -2.871950271e-03f, -9.416178000e-03f, +7.750150484e-03f, +2.010732344e-02f, -1.226799973e-02f, -3.072527135e-02f, +1.332981967e-02f, +3.519337091e-02f, -1.041382611e-02f, -3.045655644e-02f, +5.939996881e-03f, +1.942823355e-02f, -2.591790381e-03f, -8.430486735e-03f, +1.033846947e-03f, +1.931505234e-03f, +0.000000000e+00f, +0.000000000e+00f, -5.536485254e-05f, -1.365700397e-05f, +3.295253456e-04f, -9.695511913e-05f, -7.912460132e-04f, +2.947593716e-04f, +1.322884248e-03f, -4.839682608e-04f, -1.665881937e-03f, +5.622318479e-04f, +1.615244300e-03f, -5.047063370e-04f, -1.193633229e-03f, +3.653014671e-04f, +6.392930840e-04f, -2.141694439e-04f, -2.128466679e-04f, +1.208647477e-04f, +0.000000000e+00f, /* 9,26 (20) */ +0.000000000e+00f, -2.049562860e-04f, -3.469167451e-03f, -1.074232622e-03f, +1.587620866e-02f, +1.354825704e-02f, -4.160318276e-02f, -6.304048301e-02f, +8.922070695e-02f, +3.485311357e-01f, +4.408243281e-01f, +2.551608236e-01f, +9.169637602e-03f, -6.963761902e-02f, -1.689045460e-02f, +2.035277927e-02f, +8.818329648e-03f, -3.744095661e-03f, -2.052369982e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.113806788e-05f, +1.049585708e-04f, -3.248793961e-04f, -5.381663658e-04f, +9.096970252e-04f, +2.037887028e-03f, -1.505275436e-03f, -7.521390485e-03f, -7.026525481e-03f, +1.711781284e-03f, +8.350001198e-03f, +5.722567552e-03f, -3.258108042e-04f, -1.998536266e-03f, -2.383520973e-04f, +6.060520864e-04f, +1.237523680e-04f, -1.220424252e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.049562860e-04f, +2.723293584e-03f, -2.542424925e-03f, -9.513133119e-03f, +6.958904470e-03f, +2.040208281e-02f, -1.094511548e-02f, -3.120923961e-02f, +1.166393773e-02f, +3.575560276e-02f, -8.798581812e-03f, -3.096126278e-02f, +4.746363651e-03f, +1.979353501e-02f, -1.952497297e-03f, -8.644656178e-03f, +8.210002790e-04f, +2.052369982e-03f, +0.000000000e+00f, +0.000000000e+00f, -5.113806788e-05f, -2.280166760e-05f, +3.246955684e-04f, -6.818565330e-05f, -7.911253806e-04f, +2.393211330e-04f, +1.333099948e-03f, -4.060620597e-04f, -1.687726605e-03f, +4.782449426e-04f, +1.644292481e-03f, -4.348728983e-04f, -1.222287742e-03f, +3.219732290e-04f, +6.609607334e-04f, -1.962003325e-04f, -2.248613507e-04f, +1.220424252e-04f, +0.000000000e+00f, /* 9,27 (20) */ +0.000000000e+00f, -1.538182181e-04f, -3.364208880e-03f, -1.399112018e-03f, +1.533804229e-02f, +1.445795406e-02f, -3.956529574e-02f, -6.454575845e-02f, +8.169931646e-02f, +3.415046102e-01f, +4.425361094e-01f, +2.635108248e-01f, +1.489220515e-02f, -6.996342983e-02f, -1.888899086e-02f, +2.011442717e-02f, +9.424381734e-03f, -3.620343293e-03f, -2.174412407e-03f, +0.000000000e+00f, +0.000000000e+00f, +4.696191667e-05f, +1.091369052e-04f, -3.059532845e-04f, -5.534237292e-04f, +8.458106722e-04f, +2.057821283e-03f, -1.318470120e-03f, -7.386996087e-03f, -7.196504639e-03f, +1.403830863e-03f, +8.280828147e-03f, +5.910292206e-03f, -1.824722076e-04f, -2.023459698e-03f, -2.946885739e-04f, +6.082636990e-04f, +1.407123858e-04f, -1.228343562e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.538182181e-04f, +2.700491916e-03f, -2.217729357e-03f, -9.581318772e-03f, +6.167779090e-03f, +2.064140394e-02f, -9.612015537e-03f, -3.161530167e-02f, +9.976211126e-03f, +3.623384770e-02f, -7.154289331e-03f, -3.139613568e-02f, +3.524075909e-03f, +2.011550824e-02f, -1.291536564e-03f, -8.840856511e-03f, +5.961389283e-04f, +2.174412407e-03f, +0.000000000e+00f, +0.000000000e+00f, -4.696191667e-05f, -3.147584400e-05f, +3.189982554e-04f, -3.999720662e-05f, -7.888519877e-04f, +1.841547287e-04f, +1.339795282e-03f, -3.277116368e-04f, -1.705291065e-03f, +3.930082645e-04f, +1.669351991e-03f, -3.633107207e-04f, -1.248140225e-03f, +2.769876987e-04f, +6.812652106e-04f, -1.770881657e-04f, -2.365583057e-04f, +1.228343562e-04f, +0.000000000e+00f, /* 9,28 (20) */ +0.000000000e+00f, -1.068563014e-04f, -3.255071975e-03f, -1.705065303e-03f, +1.478461857e-02f, +1.530376473e-02f, -3.750747445e-02f, -6.586422857e-02f, +7.431232037e-02f, +3.343081056e-01f, +4.439399403e-01f, +2.717916530e-01f, +2.080249736e-02f, -7.014590204e-02f, -2.091245056e-02f, +1.981973860e-02f, +1.003264543e-02f, -3.479630907e-03f, -2.297246763e-03f, +0.000000000e+00f, +0.000000000e+00f, +4.285068405e-05f, +1.127399294e-04f, -2.870056572e-04f, -5.667428546e-04f, +7.820950974e-04f, +2.072656180e-03f, -1.135109078e-03f, -7.245820893e-03f, -7.356950513e-03f, +1.093914263e-03f, +8.201234742e-03f, +6.094194162e-03f, -3.402243142e-05f, -2.044579463e-03f, -3.522985019e-04f, +6.089569785e-04f, +1.580598491e-04f, -1.232183244e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.068563014e-04f, +2.669016072e-03f, -1.898731101e-03f, -9.621315979e-03f, +5.378927102e-03f, +2.082555867e-02f, -8.272220254e-03f, -3.194301331e-02f, +8.270920061e-03f, +3.662685597e-02f, -5.484937339e-03f, -3.175944640e-02f, +2.275935685e-03f, +2.039249594e-02f, -6.102713531e-04f, -9.017944677e-03f, +3.595806226e-04f, +2.297246763e-03f, +0.000000000e+00f, +0.000000000e+00f, -4.285068405e-05f, -3.966422846e-05f, +3.124785706e-04f, -1.246089578e-05f, -7.844748965e-04f, +1.294079547e-04f, +1.342991048e-03f, -2.491269374e-04f, -1.718542995e-03f, +3.067441618e-04f, +1.690339236e-03f, -2.901966692e-04f, -1.271085084e-03f, +2.304442459e-04f, +7.001165165e-04f, -1.568628027e-04f, -2.478856778e-04f, +1.232183244e-04f, +0.000000000e+00f, /* 9,29 (20) */ +0.000000000e+00f, -6.400561736e-05f, -3.142332045e-03f, -1.992070960e-03f, +1.421787571e-02f, +1.608585983e-02f, -3.543481827e-02f, -6.699933765e-02f, +6.706649948e-02f, +3.269511550e-01f, +4.450338545e-01f, +2.799928877e-01f, +2.689669152e-02f, -7.017992447e-02f, -2.295703002e-02f, +1.946744009e-02f, +1.064160241e-02f, -3.321571058e-03f, -2.420465088e-03f, +0.000000000e+00f, +0.000000000e+00f, +3.881777201e-05f, +1.157821988e-04f, -2.680907537e-04f, -5.781569807e-04f, +7.186939899e-04f, +2.082510856e-03f, -9.554225158e-04f, -7.098169576e-03f, -7.507695873e-03f, +7.824646979e-04f, +8.111250020e-03f, +6.273927067e-03f, +1.194000942e-04f, -2.061730780e-03f, -4.110819289e-04f, +6.080738841e-04f, +1.757586635e-04f, -1.231725867e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.400561736e-05f, +2.629351844e-03f, -1.586252531e-03f, -9.633776875e-03f, +4.594452206e-03f, +2.095496663e-02f, -6.929229206e-03f, -3.219214025e-02f, +6.552377066e-03f, +3.693360013e-02f, -3.794598103e-03f, -3.204964307e-02f, +1.004850601e-03f, +2.062294019e-02f, +8.984516335e-05f, -9.174807479e-03f, +1.116949448e-04f, +2.420465088e-03f, +0.000000000e+00f, +0.000000000e+00f, -3.881777201e-05f, -4.735383549e-05f, +3.051832409e-04f, +1.435583036e-05f, -7.780485578e-04f, +7.522529786e-05f, +1.342717643e-03f, -1.705171546e-04f, -1.727461982e-03f, +2.196779041e-04f, +1.707181490e-03f, -2.157133115e-04f, -1.291023805e-03f, +1.824483844e-04f, +7.174273497e-04f, -1.355584979e-04f, -2.587914125e-04f, +1.231725867e-04f, +0.000000000e+00f, /* 9,30 (20) */ +0.000000000e+00f, -2.518784535e-05f, -3.026549847e-03f, -2.260161714e-03f, +1.363971873e-02f, +1.680455382e-02f, -3.335230742e-02f, -6.795476016e-02f, +5.996832990e-02f, +3.194434592e-01f, +4.458163192e-01f, +2.881041377e-01f, +3.317061859e-02f, -7.006052437e-02f, -2.501876080e-02f, +1.905635816e-02f, +1.124967630e-02f, -3.145812394e-03f, -2.543637674e-03f, +0.000000000e+00f, +0.000000000e+00f, +3.487568417e-05f, +1.182795009e-04f, -2.492607803e-04f, -5.877031988e-04f, +6.557461540e-04f, +2.087511637e-03f, -7.796299310e-04f, -6.944354374e-03f, -7.648590319e-03f, +4.699181647e-04f, +8.010920493e-03f, +6.449147393e-03f, +2.776448918e-04f, -2.074753048e-03f, -4.709329705e-04f, +6.055587053e-04f, +1.937702911e-04f, -1.226759659e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.518784535e-05f, +2.581998008e-03f, -1.281069290e-03f, -9.619421045e-03f, +3.816403648e-03f, +2.103019192e-02f, -5.586511563e-03f, -3.236265740e-02f, +4.824915084e-03f, +3.715327803e-02f, -2.087416613e-03f, -3.226535638e-02f, -2.861732041e-04f, +2.080538857e-02f, +8.072725131e-04f, -9.310365977e-03f, -1.470964677e-04f, +2.543637674e-03f, +0.000000000e+00f, +0.000000000e+00f, -3.487568417e-05f, -5.453398286e-05f, +2.971603546e-04f, +4.038933415e-05f, -7.696325503e-04f, +2.174754707e-05f, +1.339014882e-03f, -9.209013332e-05f, -1.732039536e-03f, +1.320370426e-04f, +1.719817145e-03f, -1.400484287e-04f, -1.307865322e-03f, +1.331115381e-04f, +7.331134341e-04f, -1.132138829e-04f, -2.692234406e-04f, +1.226759659e-04f, +0.000000000e+00f, /* 9,31 (20) */ +0.000000000e+00f, +9.687838816e-06f, -2.908270346e-03f, -2.509422494e-03f, +1.305201553e-02f, +1.746029998e-02f, -3.126479578e-02f, -6.873439009e-02f, +5.302397553e-02f, +3.117948688e-01f, +4.462862374e-01f, +2.961150582e-01f, +3.961976598e-02f, -6.978287948e-02f, -2.709351385e-02f, +1.858542519e-02f, +1.185523500e-02f, -2.952042103e-03f, -2.666313640e-03f, +0.000000000e+00f, +0.000000000e+00f, +3.103601429e-05f, +1.202487606e-04f, -2.305658252e-04f, -5.954222446e-04f, +5.933853095e-04f, +2.087791629e-03f, -6.079398431e-04f, -6.784694429e-03f, -7.779500476e-03f, +1.567126525e-04f, +7.900310157e-03f, +6.619515121e-03f, +4.405495465e-04f, -2.083490300e-03f, -5.317399089e-04f, +6.013582856e-04f, +2.120537838e-04f, -1.217079448e-04f, +0.000000000e+00f, +0.000000000e+00f, -9.687838816e-06f, +2.527464025e-03f, -9.839089351e-04f, -9.579031710e-03f, +3.046771098e-03f, +2.105193947e-02f, -4.247496681e-03f, -3.245474753e-02f, +3.092875547e-03f, +3.728531508e-02f, -3.675994675e-04f, -3.240540481e-02f, -1.594038526e-03f, +2.093850011e-02f, +1.540385947e-03f, -9.423579860e-03f, -4.163199083e-04f, +2.666313640e-03f, +0.000000000e+00f, +0.000000000e+00f, -3.103601429e-05f, -6.119626725e-05f, +2.884591603e-04f, +6.557991726e-05f, -7.592913089e-04f, -3.088857861e-05f, +1.331931790e-03f, -1.405178167e-05f, -1.732279086e-03f, +4.405076371e-05f, +1.728195928e-03f, -6.339450830e-05f, -1.321526365e-03f, +8.255078474e-05f, +7.470938414e-04f, -8.987193298e-05f, -2.791298664e-04f, +1.217079448e-04f, +0.000000000e+00f, /* 10, 0 (16) */ -3.435438094e-03f, +2.943141494e-03f, +2.034116507e-02f, -8.155953257e-03f, -7.225789483e-02f, +1.377048179e-02f, +3.053759648e-01f, +4.837723159e-01f, +3.053759648e-01f, +1.377048179e-02f, -7.225789483e-02f, -8.155953257e-03f, +2.034116507e-02f, +2.943141494e-03f, -3.435438094e-03f, -3.217538268e-04f, +6.707608258e-05f, -5.114863527e-04f, -2.153539325e-04f, +2.000939515e-03f, +8.809768187e-04f, -6.556120613e-03f, -9.628506085e-03f, -2.007634162e-04f, +9.511779562e-03f, +6.798746210e-03f, -7.239919468e-04f, -2.056903051e-03f, +1.659059994e-04f, +5.298423273e-04f, -5.789333512e-05f, -5.905249340e-05f, +3.435438094e-03f, -4.847709799e-03f, -6.981797302e-03f, +1.656141375e-02f, +8.646918829e-03f, -3.077159020e-02f, -4.021341136e-03f, +3.732936584e-02f, -4.021341136e-03f, -3.077159020e-02f, +8.646918829e-03f, +1.656141375e-02f, -6.981797302e-03f, -4.847709799e-03f, +2.606381379e-03f, +3.217538268e-04f, -6.707608258e-05f, +3.641911522e-04f, -4.062610643e-04f, -6.600034460e-04f, +1.173864442e-03f, +5.790625007e-04f, -1.850959514e-03f, -5.311769911e-05f, +1.872042266e-03f, -4.956591564e-04f, -1.218918145e-03f, +6.236938338e-04f, +4.420194799e-04f, -3.614489713e-04f, -2.785323460e-05f, +5.905249340e-05f, /* 10, 1 (16) */ -3.368362011e-03f, +2.431655141e-03f, +2.012581114e-02f, -6.155013742e-03f, -7.137691801e-02f, +7.214361174e-03f, +2.957474587e-01f, +4.835715525e-01f, +3.148877444e-01f, +2.056922800e-02f, -7.298188677e-02f, -1.021285631e-02f, +2.050707107e-02f, +3.472983821e-03f, -3.493331429e-03f, -3.808063202e-04f, +7.545314953e-05f, -4.923448224e-04f, -2.621804636e-04f, +1.941641510e-03f, +1.030220430e-03f, -6.309098964e-03f, -9.730737638e-03f, -6.019552073e-04f, +9.380629856e-03f, +7.036444507e-03f, -5.593849512e-04f, -2.109259184e-03f, +1.138863962e-04f, +5.473138646e-04f, -4.789957434e-05f, -6.374551801e-05f, +3.368362011e-03f, -4.483518646e-03f, -7.388058366e-03f, +1.590141031e-02f, +9.820783271e-03f, -3.019252770e-02f, -5.872300650e-03f, +3.727624814e-02f, -2.149298869e-03f, -3.126724936e-02f, +7.428000684e-03f, +1.718510759e-02f, -6.539777822e-03f, -5.209158770e-03f, +2.578528144e-03f, +3.808063202e-04f, -7.545314953e-05f, +3.654664619e-04f, -3.701104367e-04f, -6.934136248e-04f, +1.125845779e-03f, +6.598697561e-04f, -1.824406662e-03f, -1.591853495e-04f, +1.887562529e-03f, -4.099047792e-04f, -1.260814382e-03f, +5.845525278e-04f, +4.772438143e-04f, -3.572022469e-04f, -4.096700691e-05f, +6.374551801e-05f, /* 10, 2 (16) */ -3.292908862e-03f, +1.939310319e-03f, +1.986363068e-02f, -4.213372232e-03f, -7.034669758e-02f, +9.052622097e-04f, +2.860167211e-01f, +4.829695973e-01f, +3.242683743e-01f, +2.760567250e-02f, -7.354127172e-02f, -1.232211549e-02f, +2.062095747e-02f, +4.020297686e-03f, -3.541231003e-03f, -4.445518383e-04f, +8.303274900e-05f, -4.725153862e-04f, -3.063454208e-04f, +1.879282395e-03f, +1.171623711e-03f, -6.058213755e-03f, -9.818431511e-03f, -1.002142602e-03f, +9.235157855e-03f, +7.268686731e-03f, -3.872951273e-04f, -2.157736154e-03f, +5.935456784e-05f, +5.638011503e-04f, -3.709248724e-05f, -6.842836328e-05f, +3.292908862e-03f, -4.118052185e-03f, -7.758168803e-03f, +1.520799668e-02f, +1.094662905e-02f, -2.953265794e-02f, -7.696707312e-03f, +3.711706279e-02f, -2.617363403e-04f, -3.167715414e-02f, +6.167186302e-03f, +1.776966011e-02f, -6.062534007e-03f, -5.566361017e-03f, +2.537561137e-03f, +4.445518383e-04f, -8.303274900e-05f, +3.653173998e-04f, -3.337076127e-04f, -7.238681425e-04f, +1.075062234e-03f, +7.378467177e-04f, -1.792493798e-03f, -2.647503330e-04f, +1.897446001e-03f, -3.220545052e-04f, -1.299369010e-03f, +5.426587225e-04f, +5.117908634e-04f, -3.514184228e-04f, -5.451931058e-05f, +6.842836328e-05f, /* 10, 3 (16) */ -3.209876113e-03f, +1.466794933e-03f, +1.955728526e-02f, -2.334089837e-03f, -6.917507387e-02f, -5.152951546e-03f, +2.761982896e-01f, +4.819674547e-01f, +3.335035321e-01f, +3.487435924e-02f, -7.392856685e-02f, -1.447985165e-02f, +2.068031204e-02f, +4.584098836e-03f, -3.578323491e-03f, -5.129802015e-04f, +8.982582867e-05f, -4.520941759e-04f, -3.478180146e-04f, +1.814135217e-03f, +1.305107515e-03f, -5.803997492e-03f, -9.891573978e-03f, -1.400658425e-03f, +9.075493508e-03f, +7.494947831e-03f, -2.078819698e-04f, -2.202064135e-03f, +2.379799119e-06f, +5.792037504e-04f, -2.547291348e-05f, -7.307570094e-05f, +3.209876113e-03f, -3.752734785e-03f, -8.091876415e-03f, +1.448412854e-02f, +1.202169128e-02f, -2.879481123e-02f, -9.489201110e-03f, +3.685231246e-02f, +1.635709661e-03f, -3.199920864e-02f, +4.867817292e-03f, +1.831231884e-02f, -5.550743144e-03f, -5.917779440e-03f, +2.483041827e-03f, +5.129802015e-04f, -8.982582867e-05f, +3.637909909e-04f, -2.971902528e-04f, -7.513222962e-04f, +1.021720648e-03f, +8.127707584e-04f, -1.755348252e-03f, -3.694794580e-04f, +1.901636797e-03f, -2.323727364e-04f, -1.334407010e-03f, +4.981029650e-04f, +5.455166228e-04f, -3.440703317e-04f, -6.846569569e-05f, +7.307570094e-05f, /* 10, 4 (16) */ -3.120050284e-03f, +1.014700757e-03f, +1.920946724e-02f, -5.199546196e-04f, -6.786996635e-02f, -1.095694904e-02f, +2.663067156e-01f, +4.805667962e-01f, +3.425790256e-01f, +4.236930707e-02f, -7.413644882e-02f, -1.668191578e-02f, +2.068269184e-02f, +5.163302586e-03f, -3.603796404e-03f, -5.860559025e-04f, +9.584591995e-05f, -4.311755333e-04f, -3.865766366e-04f, +1.746471999e-03f, +1.430612432e-03f, -5.546981485e-03f, -9.950180138e-03f, -1.796839128e-03f, +8.901795703e-03f, +7.714707724e-03f, -2.132516203e-05f, -2.241976012e-03f, -5.695868450e-05f, +5.934209358e-04f, -1.304497082e-05f, -7.766106117e-05f, +3.120050284e-03f, -3.388943794e-03f, -8.389066668e-03f, +1.373280624e-02f, +1.304341193e-02f, -2.798204047e-02f, -1.124454936e-02f, +3.648283300e-02f, +3.537346458e-03f, -3.223158138e-02f, +3.533410282e-03f, +1.881042180e-02f, -5.005226521e-03f, -6.261849771e-03f, +2.414576131e-03f, +5.860559025e-04f, -9.584591995e-05f, +3.609384715e-04f, -2.606931803e-04f, -7.757428758e-04f, +9.660338085e-04f, +8.844315071e-04f, -1.713114085e-03f, -4.730424052e-04f, +1.900097714e-03f, -1.411322875e-04f, -1.365763233e-03f, +4.509870073e-04f, +5.782768362e-04f, -3.351364524e-04f, -8.275832759e-05f, +7.766106117e-05f, /* 10, 5 (16) */ -3.024204364e-03f, +5.835252234e-04f, +1.882289061e-02f, +1.226517379e-03f, -6.643935392e-02f, -1.650393052e-02f, +2.563565355e-01f, +4.787699571e-01f, +3.514808213e-01f, +5.008401479e-02f, -7.415777398e-02f, -1.892389179e-02f, +2.062573315e-02f, +5.756723522e-03f, -3.616841375e-03f, -6.637169637e-04f, +1.011089827e-04f, -4.098517539e-04f, -4.226086362e-04f, +1.676563037e-03f, +1.548098546e-03f, -5.287694653e-03f, -9.994293679e-03f, -2.190026227e-03f, +8.714252086e-03f, +7.927452544e-03f, +1.721754883e-04f, -2.277208161e-03f, -1.185716446e-04f, +6.063520191e-04f, +1.838277482e-07f, -8.215690319e-05f, +3.024204364e-03f, -3.028005322e-03f, -8.649759848e-03f, +1.295706337e-02f, +1.400944574e-02f, -2.709760896e-02f, -1.295766345e-02f, +3.600979060e-02f, +5.437444172e-03f, -3.237271367e-02f, +2.167647048e-03f, +1.926140881e-02f, -4.426949685e-03f, -6.596986224e-03f, +2.331817803e-03f, +6.637169637e-04f, -1.011089827e-04f, +3.568149648e-04f, -2.243479199e-04f, -7.971080899e-04f, +9.082196071e-04f, +9.526314781e-04f, -1.665951517e-03f, -5.751128615e-04f, +1.892810425e-03f, -4.861349538e-05f, -1.393283111e-03f, +4.014236137e-04f, +6.099275555e-04f, -3.246011477e-04f, -9.734610367e-05f, +8.215690319e-05f, /* 10, 6 (16) */ -2.923095382e-03f, +1.736734695e-04f, +1.840028197e-02f, +2.903080417e-03f, -6.489125537e-02f, -2.179162518e-02f, +2.463622418e-01f, +4.765799309e-01f, +3.601950734e-01f, +5.801146733e-02f, -7.398559850e-02f, -2.120109995e-02f, +2.050716151e-02f, +6.363075541e-03f, -3.616657547e-03f, -7.458738668e-04f, +1.056332458e-04f, -3.882128445e-04f, -4.559100754e-04f, +1.604676229e-03f, +1.657545151e-03f, -5.026662348e-03f, -1.002398658e-02f, -2.579567730e-03f, +8.513078807e-03f, +8.132675892e-03f, +3.724001658e-04f, -2.307501240e-03f, -1.823597859e-04f, +6.178967014e-04f, +1.420246565e-05f, -8.653469341e-05f, +2.923095382e-03f, -2.671190358e-03f, -8.874107768e-03f, +1.215995528e-02f, +1.491766535e-02f, -2.614497748e-02f, -1.462361496e-02f, +3.543467773e-02f, +7.330254596e-03f, -3.242132716e-02f, +7.743639368e-04f, +1.966283242e-02f, -3.817022129e-03f, -6.921587371e-03f, +2.234471700e-03f, +7.458738668e-04f, -1.056332458e-04f, +3.514791479e-04f, -1.882822589e-04f, -8.154074480e-04f, +8.485002010e-04f, +1.017186649e-03f, -1.614036301e-03f, -6.753696396e-04f, +1.879775612e-03f, +4.489670547e-05f, -1.416823338e-03f, +3.495363225e-04f, +6.403257102e-04f, -3.124548839e-04f, -1.121747884e-04f, +8.653469341e-05f, /* 10, 7 (16) */ -2.817462136e-03f, -2.145393750e-04f, +1.794437189e-02f, +4.507756646e-03f, -6.323371022e-02f, -2.681828752e-02f, +2.363382552e-01f, +4.740003632e-01f, +3.687081522e-01f, +6.614414323e-02f, -7.361319833e-02f, -2.350860119e-02f, +2.032480172e-02f, +6.980972243e-03f, -3.602455082e-03f, -8.324085603e-04f, +1.094390454e-04f, -3.663462974e-04f, -4.864854650e-04f, +1.531076411e-03f, +1.758950422e-03f, -4.764405202e-03f, -1.003935877e-02f, -2.964819543e-03f, +8.298520195e-03f, +8.329880069e-03f, +5.791092179e-04f, -2.332600989e-03f, -2.482137416e-04f, +6.279554292e-04f, +2.899632408e-05f, -9.076499098e-05f, +2.817462136e-03f, -2.319711210e-03f, -9.062390027e-03f, +1.134454783e-02f, +1.576616555e-02f, -2.512779083e-02f, -1.623765126e-02f, +3.475930809e-02f, +9.210030208e-03f, -3.237643046e-02f, -6.424594009e-04f, +2.001236875e-02f, -3.176696419e-03f, -7.234042255e-03f, +2.122296911e-03f, +8.324085603e-04f, -1.094390454e-04f, +3.449929113e-04f, -1.526198322e-04f, -8.306416028e-04f, +7.871011619e-04f, +1.077926982e-03f, -1.557559045e-03f, -7.734977779e-04f, +1.861013029e-03f, +1.391057373e-04f, -1.436252516e-03f, +2.954591628e-04f, +6.693296845e-04f, -2.986944284e-04f, -1.271871667e-04f, +9.076499098e-05f, /* 10, 8 (16) */ -2.708023090e-03f, -5.808856724e-04f, +1.745788643e-02f, +6.038833057e-03f, -6.147475980e-02f, -3.158269273e-02f, +2.262988964e-01f, +4.710355436e-01f, +3.770066724e-01f, +7.447402330e-02f, -7.303408911e-02f, -2.584120218e-02f, +2.007658798e-02f, +7.608927672e-03f, -3.573458757e-03f, -9.231735512e-04f, +1.125486598e-04f, -3.443368801e-04f, -5.143474809e-04f, +1.456024734e-03f, +1.852331041e-03f, -4.501438001e-03f, -1.004053766e-02f, -3.345146859e-03f, +8.070848366e-03f, +8.518577317e-03f, +7.920433793e-04f, -2.352259019e-03f, -3.160140896e-04f, +6.364297606e-04f, +4.454709359e-05f, -9.481754058e-05f, +2.708023090e-03f, -1.974718299e-03f, -9.215009859e-03f, +1.051390623e-02f, +1.655326671e-02f, -2.404986385e-02f, -1.779521031e-02f, +3.398581032e-02f, +1.107104324e-02f, -3.223732472e-02f, -2.078711917e-03f, +2.030782791e-02f, -2.507366735e-03f, -7.532736684e-03f, +1.995109745e-03f, +9.231735512e-04f, -1.125486598e-04f, +3.374210131e-04f, -1.174797317e-04f, -8.428221511e-04f, +7.242506242e-04f, +1.134696899e-03f, -1.496724481e-03f, -8.691896187e-04f, +1.836561498e-03f, +2.337163610e-04f, -1.451451769e-03f, +2.393363273e-04f, +6.967999002e-04f, -2.833230255e-04f, -1.423232151e-04f, +9.481754058e-05f, /* 10, 9 (16) */ -2.595474431e-03f, -9.252225525e-04f, +1.694353895e-02f, +7.494857790e-03f, -5.962242876e-02f, -3.608413073e-02f, +2.162583588e-01f, +4.676903968e-01f, +3.850775208e-01f, +8.299260061e-02f, -7.224204573e-02f, -2.819346120e-02f, +1.976057389e-02f, +8.245357433e-03f, -3.528911664e-03f, -1.017991092e-03f, +1.149861436e-04f, -3.222664415e-04f, -5.395166645e-04f, +1.379778048e-03f, +1.937721785e-03f, -4.238268581e-03f, -1.002767770e-02f, -3.719925523e-03f, +7.830362763e-03f, +8.698291032e-03f, +1.010924051e-03f, -2.366233621e-03f, -3.856313990e-04f, +6.432227382e-04f, +6.083269664e-05f, -9.866137243e-05f, +2.595474431e-03f, -1.637297285e-03f, -9.332489591e-03f, +9.671084076e-03f, +1.727751733e-02f, -2.291516695e-02f, -1.929193479e-02f, +3.311662070e-02f, +1.290760473e-02f, -3.200360836e-02f, -3.530163685e-03f, +2.054716424e-02f, -1.810566834e-03f, -7.816059709e-03f, +1.852786530e-03f, +1.017991092e-03f, -1.149861436e-04f, +3.288307295e-04f, -8.297614255e-05f, -8.519713973e-04f, +6.601784345e-04f, +1.187355687e-03f, -1.431750689e-03f, -9.621458585e-04f, +1.806478830e-03f, +3.284276817e-04f, -1.462315310e-03f, +1.813218010e-04f, +7.225994014e-04f, -2.663505488e-04f, -1.575202906e-04f, +9.866137243e-05f, /* 10,10 (16) */ -2.480488287e-03f, -1.247488994e-03f, +1.640402228e-02f, +8.874635839e-03f, -5.768470697e-02f, -4.032239931e-02f, +2.062306811e-01f, +4.639704712e-01f, +3.929078835e-01f, +9.169089164e-02f, -7.123112168e-02f, -3.055969482e-02f, +1.937494249e-02f, +8.888580171e-03f, -3.468078967e-03f, -1.116652464e-03f, +1.167771603e-04f, -3.002137339e-04f, -5.620211061e-04f, +1.302588329e-03f, +2.015175068e-03f, -3.975396764e-03f, -1.000095977e-02f, -4.088543372e-03f, +7.577389627e-03f, +8.868556972e-03f, +1.235453631e-03f, -2.374290557e-03f, -4.569263083e-04f, +6.482392702e-04f, +7.782722175e-05f, -1.022649092e-04f, +2.480488287e-03f, -1.308466556e-03f, -9.415465734e-03f, +8.819112678e-03f, +1.793769577e-02f, -2.172781127e-02f, -2.072368548e-02f, +3.215447484e-02f, +1.471408356e-02f, -3.167518068e-02f, -4.992478995e-03f, +2.072848604e-02f, -1.087967433e-03f, -8.082410258e-03f, +1.695266239e-03f, +1.116652464e-03f, -1.167771603e-04f, +3.192915029e-04f, -4.921800614e-05f, -8.581220787e-04f, +5.951153051e-04f, +1.235777858e-03f, -1.362868279e-03f, -1.052076568e-03f, +1.770841690e-03f, +4.229361746e-04f, -1.468750971e-03f, +1.215789467e-04f, +7.465944404e-04f, -2.477936289e-04f, -1.727133364e-04f, +1.022649092e-04f, /* 10,11 (16) */ -2.363711127e-03f, -1.547702728e-03f, +1.584200118e-02f, +1.017722417e-02f, -5.566953191e-02f, -4.429779607e-02f, +1.962297213e-01f, +4.598819279e-01f, +4.004852732e-01f, +1.005594486e-01f, -6.999566805e-02f, -3.293398538e-02f, +1.891801618e-02f, +9.536819441e-03f, -3.390251745e-03f, -1.218917373e-03f, +1.179488149e-04f, -2.782542523e-04f, -5.818961148e-04f, +1.224702119e-03f, +2.084760450e-03f, -3.713313321e-03f, -9.960590650e-03f, -4.450401542e-03f, +7.312281406e-03f, +9.028924444e-03f, +1.465315904e-03f, -2.376203855e-03f, -5.297496357e-04f, +6.513865162e-04f, +9.550086989e-05f, -1.055960798e-04f, +2.363711127e-03f, -9.891750530e-04f, -9.464683740e-03f, +7.960990600e-03f, +1.853281107e-02f, -2.049203341e-02f, -2.208655376e-02f, +3.110239827e-02f, +1.648492525e-02f, -3.125224450e-02f, -6.461229966e-03f, +2.085006498e-02f, -3.413729927e-04f, -8.330203887e-03f, +1.522552903e-03f, +1.218917373e-03f, -1.179488149e-04f, +3.088745889e-04f, -1.630871143e-05f, -8.613170562e-04f, +5.292919751e-04f, +1.279853446e-03f, -1.290319525e-03f, -1.138702179e-03f, +1.729745387e-03f, +5.169367262e-04f, -1.470680684e-03f, +6.028004957e-05f, +7.686550620e-04f, -2.276757550e-04f, -1.878351046e-04f, +1.055960798e-04f, /* 10,12 (16) */ -2.245762312e-03f, -1.825956980e-03f, +1.526010506e-02f, +1.140192629e-02f, -5.358477146e-02f, -4.801110939e-02f, +1.862691307e-01f, +4.554315263e-01f, +4.077975546e-01f, +1.095883731e-01f, -6.853035215e-02f, -3.531018923e-02f, +1.838826655e-02f, +1.018820596e-02f, -3.294750876e-03f, -1.324513453e-03f, +1.185294870e-04f, -2.564600899e-04f, -5.991838751e-04f, +1.146360002e-03f, +2.146564111e-03f, -3.452498969e-03f, -9.906802264e-03f, -4.804915740e-03f, +7.035416094e-03f, +9.178957462e-03f, +1.700176480e-03f, -2.371756599e-03f, -6.039425217e-04f, +6.525742781e-04f, +1.138199136e-04f, -1.086224396e-04f, +2.245762312e-03f, -6.803004640e-04f, -9.480992451e-03f, +7.099673544e-03f, +1.906210305e-02f, -1.921217996e-02f, -2.337687328e-02f, +2.996369609e-02f, +1.821467064e-02f, -3.073530777e-02f, -7.931910651e-03f, +2.091034503e-02f, +4.272820693e-04f, -8.557879642e-03f, +1.334717798e-03f, +1.324513453e-03f, -1.185294870e-04f, +2.976527050e-04f, +1.565418526e-05f, -8.616089703e-04f, +4.629383813e-04f, +1.319488243e-03f, -1.214357471e-03f, -1.221754428e-03f, +1.683303591e-03f, +6.101236891e-04f, -1.468040921e-03f, -2.394179827e-06f, +7.886556833e-04f, -2.060273506e-04f, -2.028163947e-04f, +1.086224396e-04f, /* 10,13 (16) */ -2.127232825e-03f, -2.082417070e-03f, +1.466092119e-02f, +1.254828629e-02f, -5.143820735e-02f, -5.146360836e-02f, +1.763623284e-01f, +4.506266106e-01f, +4.148329707e-01f, +1.187673305e-01f, -6.683017567e-02f, -3.768194583e-02f, +1.778432403e-02f, +1.084078024e-02f, -3.180930962e-03f, -1.433135893e-03f, +1.185486646e-04f, -2.348998102e-04f, -6.139330914e-04f, +1.067796108e-03f, +2.200688286e-03f, -3.193423410e-03f, -9.839851015e-03f, -5.151517486e-03f, +6.747196514e-03f, +9.318235891e-03f, +1.939683283e-03f, -2.360741701e-03f, -6.793366042e-04f, +6.517153938e-04f, +1.327466695e-04f, -1.113112967e-04f, +2.127232825e-03f, -3.826477591e-04f, -9.465338266e-03f, +6.238064573e-03f, +1.952504143e-02f, -1.789269172e-02f, -2.459123075e-02f, +2.874194167e-02f, +1.989797423e-02f, -3.012518409e-02f, -9.399951571e-03f, +2.090795085e-02f, +1.215937753e-03f, -8.763906993e-03f, +1.131901403e-03f, +1.433135893e-03f, -1.185486646e-04f, +2.856996806e-04f, +4.657921086e-05f, -8.590598665e-04f, +3.962828439e-04f, +1.354603980e-03f, -1.135244995e-03f, -1.300977268e-03f, +1.631647999e-03f, +7.021919452e-04f, -1.460783075e-03f, -6.625514129e-05f, +8.064756664e-04f, -1.828858210e-04f, -2.175863071e-04f, +1.113112967e-04f, /* 10,14 (16) */ -2.008684160e-03f, -2.317316880e-03f, +1.404698810e-02f, +1.361608240e-02f, -4.923751906e-02f, -5.465703177e-02f, +1.665224774e-01f, +4.454750931e-01f, +4.215801672e-01f, +1.280855664e-01f, -6.489049238e-02f, -4.004268753e-02f, +1.710498742e-02f, +1.149249563e-02f, -3.048184293e-03f, -1.544447190e-03f, +1.180367796e-04f, -2.136383358e-04f, -6.261986236e-04f, +9.892376468e-04f, +2.247250669e-03f, -2.936544408e-03f, -9.760016987e-03f, -5.489655306e-03f, +6.448049527e-03f, +9.446356555e-03f, +2.183467104e-03f, -2.342962675e-03f, -7.557542266e-04f, +6.487261338e-04f, +1.522394848e-04f, -1.136298447e-04f, +2.008684160e-03f, -9.694807848e-05f, -9.418759055e-03f, +5.379004707e-03f, +1.992132427e-02f, -1.653808774e-02f, -2.572647575e-02f, +2.744096440e-02f, +2.152962223e-02f, -2.942299214e-02f, -1.086073465e-02f, +2.084169571e-02f, +2.022413419e-03f, -8.946792814e-03f, +9.143150961e-04f, +1.544447190e-03f, -1.180367796e-04f, +2.730901122e-04f, +7.638119638e-05f, -8.537407893e-04f, +3.295512676e-04f, +1.385138445e-03f, -1.053253846e-03f, -1.376127726e-03f, +1.574927919e-03f, +7.928379732e-04f, -1.448873803e-03f, -1.311069184e-04f, +8.219998828e-04f, -1.582955729e-04f, -2.320725114e-04f, +1.136298447e-04f, /* 10,15 (16) */ -1.890647380e-03f, -2.530955216e-03f, +1.342078947e-02f, +1.460532004e-02f, -4.699026839e-02f, -5.759357618e-02f, +1.567624604e-01f, +4.399854378e-01f, +4.280282167e-01f, +1.375319230e-01f, -6.270702528e-02f, -4.238565021e-02f, +1.634923319e-02f, +1.214122176e-02f, -2.895944808e-03f, -1.658077034e-03f, +1.170250460e-04f, -1.927368539e-04f, -6.360411123e-04f, +9.109044728e-04f, +2.286383796e-03f, -2.682306906e-03f, -9.667603116e-03f, -5.818795889e-03f, +6.138425198e-03f, +9.562934316e-03f, +2.431142192e-03f, -2.318234387e-03f, -8.330086791e-04f, +6.435265979e-04f, +1.722527379e-04f, -1.155453001e-04f, +1.890647380e-03f, +1.761420338e-04f, -9.342377859e-03f, +4.525263917e-03f, +2.025087554e-02f, -1.515294930e-02f, -2.677972960e-02f, +2.606483667e-02f, +2.310455015e-02f, -2.863015417e-02f, -1.230960845e-02f, +2.071058879e-02f, +2.844413302e-03f, -9.105088387e-03f, +6.822425847e-04f, +1.658077034e-03f, -1.170250460e-04f, +2.598990228e-04f, +1.049814675e-04f, -8.457313496e-04f, +2.629663626e-04f, +1.411045545e-03f, -9.686636535e-04f, -1.446976716e-03f, +1.513309805e-03f, +8.817609175e-04f, -1.432295302e-03f, -1.967468878e-04f, +8.351192661e-04f, -1.323080046e-04f, -2.462015281e-04f, +1.155453001e-04f, /* 10,16 (16) */ -1.773622334e-03f, -2.723692070e-03f, +1.278474836e-02f, +1.551622452e-02f, -4.470388459e-02f, -6.027588309e-02f, +1.470948573e-01f, +4.341666419e-01f, +4.341666419e-01f, +1.470948573e-01f, -6.027588309e-02f, -4.470388459e-02f, +1.551622452e-02f, +1.278474836e-02f, -2.723692070e-03f, -1.773622334e-03f, +1.155453001e-04f, -1.722527379e-04f, -6.435265979e-04f, +8.330086791e-04f, +2.318234387e-03f, -2.431142192e-03f, -9.562934316e-03f, -6.138425198e-03f, +5.818795889e-03f, +9.667603116e-03f, +2.682306906e-03f, -2.286383796e-03f, -9.109044728e-04f, +6.360411123e-04f, +1.927368539e-04f, -1.170250460e-04f, +1.773622334e-03f, +4.360410565e-04f, -9.237396391e-03f, +3.679532568e-03f, +2.051384191e-02f, -1.374190375e-02f, -2.774839325e-02f, +2.461785996e-02f, +2.461785996e-02f, -2.774839325e-02f, -1.374190375e-02f, +2.051384191e-02f, +3.679532568e-03f, -9.237396391e-03f, +4.360410565e-04f, +1.773622334e-03f, -1.155453001e-04f, +2.462015281e-04f, +1.323080046e-04f, -8.351192661e-04f, +1.967468878e-04f, +1.432295302e-03f, -8.817609175e-04f, -1.513309805e-03f, +1.446976716e-03f, +9.686636535e-04f, -1.411045545e-03f, -2.629663626e-04f, +8.457313496e-04f, -1.049814675e-04f, -2.598990228e-04f, +1.170250460e-04f, /* 10,17 (16) */ -1.658077034e-03f, -2.895944808e-03f, +1.214122176e-02f, +1.634923319e-02f, -4.238565021e-02f, -6.270702528e-02f, +1.375319230e-01f, +4.280282167e-01f, +4.399854378e-01f, +1.567624604e-01f, -5.759357618e-02f, -4.699026839e-02f, +1.460532004e-02f, +1.342078947e-02f, -2.530955216e-03f, -1.890647380e-03f, +1.136298447e-04f, -1.522394848e-04f, -6.487261338e-04f, +7.557542266e-04f, +2.342962675e-03f, -2.183467104e-03f, -9.446356555e-03f, -6.448049527e-03f, +5.489655306e-03f, +9.760016987e-03f, +2.936544408e-03f, -2.247250669e-03f, -9.892376468e-04f, +6.261986236e-04f, +2.136383358e-04f, -1.180367796e-04f, +1.658077034e-03f, +6.822425847e-04f, -9.105088387e-03f, +2.844413302e-03f, +2.071058879e-02f, -1.230960845e-02f, -2.863015417e-02f, +2.310455015e-02f, +2.606483667e-02f, -2.677972960e-02f, -1.515294930e-02f, +2.025087554e-02f, +4.525263917e-03f, -9.342377859e-03f, +1.761420338e-04f, +1.890647380e-03f, -1.136298447e-04f, +2.320725114e-04f, +1.582955729e-04f, -8.219998828e-04f, +1.311069184e-04f, +1.448873803e-03f, -7.928379732e-04f, -1.574927919e-03f, +1.376127726e-03f, +1.053253846e-03f, -1.385138445e-03f, -3.295512676e-04f, +8.537407893e-04f, -7.638119638e-05f, -2.730901122e-04f, +1.180367796e-04f, /* 10,18 (16) */ -1.544447190e-03f, -3.048184293e-03f, +1.149249563e-02f, +1.710498742e-02f, -4.004268753e-02f, -6.489049238e-02f, +1.280855664e-01f, +4.215801672e-01f, +4.454750931e-01f, +1.665224774e-01f, -5.465703177e-02f, -4.923751906e-02f, +1.361608240e-02f, +1.404698810e-02f, -2.317316880e-03f, -2.008684160e-03f, +1.113112967e-04f, -1.327466695e-04f, -6.517153938e-04f, +6.793366042e-04f, +2.360741701e-03f, -1.939683283e-03f, -9.318235891e-03f, -6.747196514e-03f, +5.151517486e-03f, +9.839851015e-03f, +3.193423410e-03f, -2.200688286e-03f, -1.067796108e-03f, +6.139330914e-04f, +2.348998102e-04f, -1.185486646e-04f, +1.544447190e-03f, +9.143150961e-04f, -8.946792814e-03f, +2.022413419e-03f, +2.084169571e-02f, -1.086073465e-02f, -2.942299214e-02f, +2.152962223e-02f, +2.744096440e-02f, -2.572647575e-02f, -1.653808774e-02f, +1.992132427e-02f, +5.379004707e-03f, -9.418759055e-03f, -9.694807848e-05f, +2.008684160e-03f, -1.113112967e-04f, +2.175863071e-04f, +1.828858210e-04f, -8.064756664e-04f, +6.625514129e-05f, +1.460783075e-03f, -7.021919452e-04f, -1.631647999e-03f, +1.300977268e-03f, +1.135244995e-03f, -1.354603980e-03f, -3.962828439e-04f, +8.590598665e-04f, -4.657921086e-05f, -2.856996806e-04f, +1.185486646e-04f, /* 10,19 (16) */ -1.433135893e-03f, -3.180930962e-03f, +1.084078024e-02f, +1.778432403e-02f, -3.768194583e-02f, -6.683017567e-02f, +1.187673305e-01f, +4.148329707e-01f, +4.506266106e-01f, +1.763623284e-01f, -5.146360836e-02f, -5.143820735e-02f, +1.254828629e-02f, +1.466092119e-02f, -2.082417070e-03f, -2.127232825e-03f, +1.086224396e-04f, -1.138199136e-04f, -6.525742781e-04f, +6.039425217e-04f, +2.371756599e-03f, -1.700176480e-03f, -9.178957462e-03f, -7.035416094e-03f, +4.804915740e-03f, +9.906802264e-03f, +3.452498969e-03f, -2.146564111e-03f, -1.146360002e-03f, +5.991838751e-04f, +2.564600899e-04f, -1.185294870e-04f, +1.433135893e-03f, +1.131901403e-03f, -8.763906993e-03f, +1.215937753e-03f, +2.090795085e-02f, -9.399951571e-03f, -3.012518409e-02f, +1.989797423e-02f, +2.874194167e-02f, -2.459123075e-02f, -1.789269172e-02f, +1.952504143e-02f, +6.238064573e-03f, -9.465338266e-03f, -3.826477591e-04f, +2.127232825e-03f, -1.086224396e-04f, +2.028163947e-04f, +2.060273506e-04f, -7.886556833e-04f, +2.394179827e-06f, +1.468040921e-03f, -6.101236891e-04f, -1.683303591e-03f, +1.221754428e-03f, +1.214357471e-03f, -1.319488243e-03f, -4.629383813e-04f, +8.616089703e-04f, -1.565418526e-05f, -2.976527050e-04f, +1.185294870e-04f, /* 10,20 (16) */ -1.324513453e-03f, -3.294750876e-03f, +1.018820596e-02f, +1.838826655e-02f, -3.531018923e-02f, -6.853035215e-02f, +1.095883731e-01f, +4.077975546e-01f, +4.554315263e-01f, +1.862691307e-01f, -4.801110939e-02f, -5.358477146e-02f, +1.140192629e-02f, +1.526010506e-02f, -1.825956980e-03f, -2.245762312e-03f, +1.055960798e-04f, -9.550086989e-05f, -6.513865162e-04f, +5.297496357e-04f, +2.376203855e-03f, -1.465315904e-03f, -9.028924444e-03f, -7.312281406e-03f, +4.450401542e-03f, +9.960590650e-03f, +3.713313321e-03f, -2.084760450e-03f, -1.224702119e-03f, +5.818961148e-04f, +2.782542523e-04f, -1.179488149e-04f, +1.324513453e-03f, +1.334717798e-03f, -8.557879642e-03f, +4.272820693e-04f, +2.091034503e-02f, -7.931910651e-03f, -3.073530777e-02f, +1.821467064e-02f, +2.996369609e-02f, -2.337687328e-02f, -1.921217996e-02f, +1.906210305e-02f, +7.099673544e-03f, -9.480992451e-03f, -6.803004640e-04f, +2.245762312e-03f, -1.055960798e-04f, +1.878351046e-04f, +2.276757550e-04f, -7.686550620e-04f, -6.028004957e-05f, +1.470680684e-03f, -5.169367262e-04f, -1.729745387e-03f, +1.138702179e-03f, +1.290319525e-03f, -1.279853446e-03f, -5.292919751e-04f, +8.613170562e-04f, +1.630871143e-05f, -3.088745889e-04f, +1.179488149e-04f, /* 10,21 (16) */ -1.218917373e-03f, -3.390251745e-03f, +9.536819441e-03f, +1.891801618e-02f, -3.293398538e-02f, -6.999566805e-02f, +1.005594486e-01f, +4.004852732e-01f, +4.598819279e-01f, +1.962297213e-01f, -4.429779607e-02f, -5.566953191e-02f, +1.017722417e-02f, +1.584200118e-02f, -1.547702728e-03f, -2.363711127e-03f, +1.022649092e-04f, -7.782722175e-05f, -6.482392702e-04f, +4.569263083e-04f, +2.374290557e-03f, -1.235453631e-03f, -8.868556972e-03f, -7.577389627e-03f, +4.088543372e-03f, +1.000095977e-02f, +3.975396764e-03f, -2.015175068e-03f, -1.302588329e-03f, +5.620211061e-04f, +3.002137339e-04f, -1.167771603e-04f, +1.218917373e-03f, +1.522552903e-03f, -8.330203887e-03f, -3.413729927e-04f, +2.085006498e-02f, -6.461229966e-03f, -3.125224450e-02f, +1.648492525e-02f, +3.110239827e-02f, -2.208655376e-02f, -2.049203341e-02f, +1.853281107e-02f, +7.960990600e-03f, -9.464683740e-03f, -9.891750530e-04f, +2.363711127e-03f, -1.022649092e-04f, +1.727133364e-04f, +2.477936289e-04f, -7.465944404e-04f, -1.215789467e-04f, +1.468750971e-03f, -4.229361746e-04f, -1.770841690e-03f, +1.052076568e-03f, +1.362868279e-03f, -1.235777858e-03f, -5.951153051e-04f, +8.581220787e-04f, +4.921800614e-05f, -3.192915029e-04f, +1.167771603e-04f, /* 10,22 (16) */ -1.116652464e-03f, -3.468078967e-03f, +8.888580171e-03f, +1.937494249e-02f, -3.055969482e-02f, -7.123112168e-02f, +9.169089164e-02f, +3.929078835e-01f, +4.639704712e-01f, +2.062306811e-01f, -4.032239931e-02f, -5.768470697e-02f, +8.874635839e-03f, +1.640402228e-02f, -1.247488994e-03f, -2.480488287e-03f, +9.866137243e-05f, -6.083269664e-05f, -6.432227382e-04f, +3.856313990e-04f, +2.366233621e-03f, -1.010924051e-03f, -8.698291032e-03f, -7.830362763e-03f, +3.719925523e-03f, +1.002767770e-02f, +4.238268581e-03f, -1.937721785e-03f, -1.379778048e-03f, +5.395166645e-04f, +3.222664415e-04f, -1.149861436e-04f, +1.116652464e-03f, +1.695266239e-03f, -8.082410258e-03f, -1.087967433e-03f, +2.072848604e-02f, -4.992478995e-03f, -3.167518068e-02f, +1.471408356e-02f, +3.215447484e-02f, -2.072368548e-02f, -2.172781127e-02f, +1.793769577e-02f, +8.819112678e-03f, -9.415465734e-03f, -1.308466556e-03f, +2.480488287e-03f, -9.866137243e-05f, +1.575202906e-04f, +2.663505488e-04f, -7.225994014e-04f, -1.813218010e-04f, +1.462315310e-03f, -3.284276817e-04f, -1.806478830e-03f, +9.621458585e-04f, +1.431750689e-03f, -1.187355687e-03f, -6.601784345e-04f, +8.519713973e-04f, +8.297614255e-05f, -3.288307295e-04f, +1.149861436e-04f, /* 10,23 (16) */ -1.017991092e-03f, -3.528911664e-03f, +8.245357433e-03f, +1.976057389e-02f, -2.819346120e-02f, -7.224204573e-02f, +8.299260061e-02f, +3.850775208e-01f, +4.676903968e-01f, +2.162583588e-01f, -3.608413073e-02f, -5.962242876e-02f, +7.494857790e-03f, +1.694353895e-02f, -9.252225525e-04f, -2.595474431e-03f, +9.481754058e-05f, -4.454709359e-05f, -6.364297606e-04f, +3.160140896e-04f, +2.352259019e-03f, -7.920433793e-04f, -8.518577317e-03f, -8.070848366e-03f, +3.345146859e-03f, +1.004053766e-02f, +4.501438001e-03f, -1.852331041e-03f, -1.456024734e-03f, +5.143474809e-04f, +3.443368801e-04f, -1.125486598e-04f, +1.017991092e-03f, +1.852786530e-03f, -7.816059709e-03f, -1.810566834e-03f, +2.054716424e-02f, -3.530163685e-03f, -3.200360836e-02f, +1.290760473e-02f, +3.311662070e-02f, -1.929193479e-02f, -2.291516695e-02f, +1.727751733e-02f, +9.671084076e-03f, -9.332489591e-03f, -1.637297285e-03f, +2.595474431e-03f, -9.481754058e-05f, +1.423232151e-04f, +2.833230255e-04f, -6.967999002e-04f, -2.393363273e-04f, +1.451451769e-03f, -2.337163610e-04f, -1.836561498e-03f, +8.691896187e-04f, +1.496724481e-03f, -1.134696899e-03f, -7.242506242e-04f, +8.428221511e-04f, +1.174797317e-04f, -3.374210131e-04f, +1.125486598e-04f, /* 10,24 (16) */ -9.231735512e-04f, -3.573458757e-03f, +7.608927672e-03f, +2.007658798e-02f, -2.584120218e-02f, -7.303408911e-02f, +7.447402330e-02f, +3.770066724e-01f, +4.710355436e-01f, +2.262988964e-01f, -3.158269273e-02f, -6.147475980e-02f, +6.038833057e-03f, +1.745788643e-02f, -5.808856724e-04f, -2.708023090e-03f, +9.076499098e-05f, -2.899632408e-05f, -6.279554292e-04f, +2.482137416e-04f, +2.332600989e-03f, -5.791092179e-04f, -8.329880069e-03f, -8.298520195e-03f, +2.964819543e-03f, +1.003935877e-02f, +4.764405202e-03f, -1.758950422e-03f, -1.531076411e-03f, +4.864854650e-04f, +3.663462974e-04f, -1.094390454e-04f, +9.231735512e-04f, +1.995109745e-03f, -7.532736684e-03f, -2.507366735e-03f, +2.030782791e-02f, -2.078711917e-03f, -3.223732472e-02f, +1.107104324e-02f, +3.398581032e-02f, -1.779521031e-02f, -2.404986385e-02f, +1.655326671e-02f, +1.051390623e-02f, -9.215009859e-03f, -1.974718299e-03f, +2.708023090e-03f, -9.076499098e-05f, +1.271871667e-04f, +2.986944284e-04f, -6.693296845e-04f, -2.954591628e-04f, +1.436252516e-03f, -1.391057373e-04f, -1.861013029e-03f, +7.734977779e-04f, +1.557559045e-03f, -1.077926982e-03f, -7.871011619e-04f, +8.306416028e-04f, +1.526198322e-04f, -3.449929113e-04f, +1.094390454e-04f, /* 10,25 (16) */ -8.324085603e-04f, -3.602455082e-03f, +6.980972243e-03f, +2.032480172e-02f, -2.350860119e-02f, -7.361319833e-02f, +6.614414323e-02f, +3.687081522e-01f, +4.740003632e-01f, +2.363382552e-01f, -2.681828752e-02f, -6.323371022e-02f, +4.507756646e-03f, +1.794437189e-02f, -2.145393750e-04f, -2.817462136e-03f, +8.653469341e-05f, -1.420246565e-05f, -6.178967014e-04f, +1.823597859e-04f, +2.307501240e-03f, -3.724001658e-04f, -8.132675892e-03f, -8.513078807e-03f, +2.579567730e-03f, +1.002398658e-02f, +5.026662348e-03f, -1.657545151e-03f, -1.604676229e-03f, +4.559100754e-04f, +3.882128445e-04f, -1.056332458e-04f, +8.324085603e-04f, +2.122296911e-03f, -7.234042255e-03f, -3.176696419e-03f, +2.001236875e-02f, -6.424594009e-04f, -3.237643046e-02f, +9.210030208e-03f, +3.475930809e-02f, -1.623765126e-02f, -2.512779083e-02f, +1.576616555e-02f, +1.134454783e-02f, -9.062390027e-03f, -2.319711210e-03f, +2.817462136e-03f, -8.653469341e-05f, +1.121747884e-04f, +3.124548839e-04f, -6.403257102e-04f, -3.495363225e-04f, +1.416823338e-03f, -4.489670547e-05f, -1.879775612e-03f, +6.753696396e-04f, +1.614036301e-03f, -1.017186649e-03f, -8.485002010e-04f, +8.154074480e-04f, +1.882822589e-04f, -3.514791479e-04f, +1.056332458e-04f, /* 10,26 (16) */ -7.458738668e-04f, -3.616657547e-03f, +6.363075541e-03f, +2.050716151e-02f, -2.120109995e-02f, -7.398559850e-02f, +5.801146733e-02f, +3.601950734e-01f, +4.765799309e-01f, +2.463622418e-01f, -2.179162518e-02f, -6.489125537e-02f, +2.903080417e-03f, +1.840028197e-02f, +1.736734695e-04f, -2.923095382e-03f, +8.215690319e-05f, -1.838277482e-07f, -6.063520191e-04f, +1.185716446e-04f, +2.277208161e-03f, -1.721754883e-04f, -7.927452544e-03f, -8.714252086e-03f, +2.190026227e-03f, +9.994293679e-03f, +5.287694653e-03f, -1.548098546e-03f, -1.676563037e-03f, +4.226086362e-04f, +4.098517539e-04f, -1.011089827e-04f, +7.458738668e-04f, +2.234471700e-03f, -6.921587371e-03f, -3.817022129e-03f, +1.966283242e-02f, +7.743639368e-04f, -3.242132716e-02f, +7.330254596e-03f, +3.543467773e-02f, -1.462361496e-02f, -2.614497748e-02f, +1.491766535e-02f, +1.215995528e-02f, -8.874107768e-03f, -2.671190358e-03f, +2.923095382e-03f, -8.215690319e-05f, +9.734610367e-05f, +3.246011477e-04f, -6.099275555e-04f, -4.014236137e-04f, +1.393283111e-03f, +4.861349538e-05f, -1.892810425e-03f, +5.751128615e-04f, +1.665951517e-03f, -9.526314781e-04f, -9.082196071e-04f, +7.971080899e-04f, +2.243479199e-04f, -3.568149648e-04f, +1.011089827e-04f, /* 10,27 (16) */ -6.637169637e-04f, -3.616841375e-03f, +5.756723522e-03f, +2.062573315e-02f, -1.892389179e-02f, -7.415777398e-02f, +5.008401479e-02f, +3.514808213e-01f, +4.787699571e-01f, +2.563565355e-01f, -1.650393052e-02f, -6.643935392e-02f, +1.226517379e-03f, +1.882289061e-02f, +5.835252234e-04f, -3.024204364e-03f, +7.766106117e-05f, +1.304497082e-05f, -5.934209358e-04f, +5.695868450e-05f, +2.241976012e-03f, +2.132516203e-05f, -7.714707724e-03f, -8.901795703e-03f, +1.796839128e-03f, +9.950180138e-03f, +5.546981485e-03f, -1.430612432e-03f, -1.746471999e-03f, +3.865766366e-04f, +4.311755333e-04f, -9.584591995e-05f, +6.637169637e-04f, +2.331817803e-03f, -6.596986224e-03f, -4.426949685e-03f, +1.926140881e-02f, +2.167647048e-03f, -3.237271367e-02f, +5.437444172e-03f, +3.600979060e-02f, -1.295766345e-02f, -2.709760896e-02f, +1.400944574e-02f, +1.295706337e-02f, -8.649759848e-03f, -3.028005322e-03f, +3.024204364e-03f, -7.766106117e-05f, +8.275832759e-05f, +3.351364524e-04f, -5.782768362e-04f, -4.509870073e-04f, +1.365763233e-03f, +1.411322875e-04f, -1.900097714e-03f, +4.730424052e-04f, +1.713114085e-03f, -8.844315071e-04f, -9.660338085e-04f, +7.757428758e-04f, +2.606931803e-04f, -3.609384715e-04f, +9.584591995e-05f, /* 10,28 (16) */ -5.860559025e-04f, -3.603796404e-03f, +5.163302586e-03f, +2.068269184e-02f, -1.668191578e-02f, -7.413644882e-02f, +4.236930707e-02f, +3.425790256e-01f, +4.805667962e-01f, +2.663067156e-01f, -1.095694904e-02f, -6.786996635e-02f, -5.199546196e-04f, +1.920946724e-02f, +1.014700757e-03f, -3.120050284e-03f, +7.307570094e-05f, +2.547291348e-05f, -5.792037504e-04f, -2.379799119e-06f, +2.202064135e-03f, +2.078819698e-04f, -7.494947831e-03f, -9.075493508e-03f, +1.400658425e-03f, +9.891573978e-03f, +5.803997492e-03f, -1.305107515e-03f, -1.814135217e-03f, +3.478180146e-04f, +4.520941759e-04f, -8.982582867e-05f, +5.860559025e-04f, +2.414576131e-03f, -6.261849771e-03f, -5.005226521e-03f, +1.881042180e-02f, +3.533410282e-03f, -3.223158138e-02f, +3.537346458e-03f, +3.648283300e-02f, -1.124454936e-02f, -2.798204047e-02f, +1.304341193e-02f, +1.373280624e-02f, -8.389066668e-03f, -3.388943794e-03f, +3.120050284e-03f, -7.307570094e-05f, +6.846569569e-05f, +3.440703317e-04f, -5.455166228e-04f, -4.981029650e-04f, +1.334407010e-03f, +2.323727364e-04f, -1.901636797e-03f, +3.694794580e-04f, +1.755348252e-03f, -8.127707584e-04f, -1.021720648e-03f, +7.513222962e-04f, +2.971902528e-04f, -3.637909909e-04f, +8.982582867e-05f, /* 10,29 (16) */ -5.129802015e-04f, -3.578323491e-03f, +4.584098836e-03f, +2.068031204e-02f, -1.447985165e-02f, -7.392856685e-02f, +3.487435924e-02f, +3.335035321e-01f, +4.819674547e-01f, +2.761982896e-01f, -5.152951546e-03f, -6.917507387e-02f, -2.334089837e-03f, +1.955728526e-02f, +1.466794933e-03f, -3.209876113e-03f, +6.842836328e-05f, +3.709248724e-05f, -5.638011503e-04f, -5.935456784e-05f, +2.157736154e-03f, +3.872951273e-04f, -7.268686731e-03f, -9.235157855e-03f, +1.002142602e-03f, +9.818431511e-03f, +6.058213755e-03f, -1.171623711e-03f, -1.879282395e-03f, +3.063454208e-04f, +4.725153862e-04f, -8.303274900e-05f, +5.129802015e-04f, +2.483041827e-03f, -5.917779440e-03f, -5.550743144e-03f, +1.831231884e-02f, +4.867817292e-03f, -3.199920864e-02f, +1.635709661e-03f, +3.685231246e-02f, -9.489201110e-03f, -2.879481123e-02f, +1.202169128e-02f, +1.448412854e-02f, -8.091876415e-03f, -3.752734785e-03f, +3.209876113e-03f, -6.842836328e-05f, +5.451931058e-05f, +3.514184228e-04f, -5.117908634e-04f, -5.426587225e-04f, +1.299369010e-03f, +3.220545052e-04f, -1.897446001e-03f, +2.647503330e-04f, +1.792493798e-03f, -7.378467177e-04f, -1.075062234e-03f, +7.238681425e-04f, +3.337076127e-04f, -3.653173998e-04f, +8.303274900e-05f, /* 10,30 (16) */ -4.445518383e-04f, -3.541231003e-03f, +4.020297686e-03f, +2.062095747e-02f, -1.232211549e-02f, -7.354127172e-02f, +2.760567250e-02f, +3.242683743e-01f, +4.829695973e-01f, +2.860167211e-01f, +9.052622097e-04f, -7.034669758e-02f, -4.213372232e-03f, +1.986363068e-02f, +1.939310319e-03f, -3.292908862e-03f, +6.374551801e-05f, +4.789957434e-05f, -5.473138646e-04f, -1.138863962e-04f, +2.109259184e-03f, +5.593849512e-04f, -7.036444507e-03f, -9.380629856e-03f, +6.019552073e-04f, +9.730737638e-03f, +6.309098964e-03f, -1.030220430e-03f, -1.941641510e-03f, +2.621804636e-04f, +4.923448224e-04f, -7.545314953e-05f, +4.445518383e-04f, +2.537561137e-03f, -5.566361017e-03f, -6.062534007e-03f, +1.776966011e-02f, +6.167186302e-03f, -3.167715414e-02f, -2.617363403e-04f, +3.711706279e-02f, -7.696707312e-03f, -2.953265794e-02f, +1.094662905e-02f, +1.520799668e-02f, -7.758168803e-03f, -4.118052185e-03f, +3.292908862e-03f, -6.374551801e-05f, +4.096700691e-05f, +3.572022469e-04f, -4.772438143e-04f, -5.845525278e-04f, +1.260814382e-03f, +4.099047792e-04f, -1.887562529e-03f, +1.591853495e-04f, +1.824406662e-03f, -6.598697561e-04f, -1.125845779e-03f, +6.934136248e-04f, +3.701104367e-04f, -3.654664619e-04f, +7.545314953e-05f, /* 10,31 (16) */ -3.808063202e-04f, -3.493331429e-03f, +3.472983821e-03f, +2.050707107e-02f, -1.021285631e-02f, -7.298188677e-02f, +2.056922800e-02f, +3.148877444e-01f, +4.835715525e-01f, +2.957474587e-01f, +7.214361174e-03f, -7.137691801e-02f, -6.155013742e-03f, +2.012581114e-02f, +2.431655141e-03f, -3.368362011e-03f, +5.905249340e-05f, +5.789333512e-05f, -5.298423273e-04f, -1.659059994e-04f, +2.056903051e-03f, +7.239919468e-04f, -6.798746210e-03f, -9.511779562e-03f, +2.007634162e-04f, +9.628506085e-03f, +6.556120613e-03f, -8.809768187e-04f, -2.000939515e-03f, +2.153539325e-04f, +5.114863527e-04f, -6.707608258e-05f, +3.808063202e-04f, +2.578528144e-03f, -5.209158770e-03f, -6.539777822e-03f, +1.718510759e-02f, +7.428000684e-03f, -3.126724936e-02f, -2.149298869e-03f, +3.727624814e-02f, -5.872300650e-03f, -3.019252770e-02f, +9.820783271e-03f, +1.590141031e-02f, -7.388058366e-03f, -4.483518646e-03f, +3.368362011e-03f, -5.905249340e-05f, +2.785323460e-05f, +3.614489713e-04f, -4.420194799e-04f, -6.236938338e-04f, +1.218918145e-03f, +4.956591564e-04f, -1.872042266e-03f, +5.311769911e-05f, +1.850959514e-03f, -5.790625007e-04f, -1.173864442e-03f, +6.600034460e-04f, +4.062610643e-04f, -3.641911522e-04f, +6.707608258e-05f, /* 11, 0 (16) */ +0.000000000e+00f, -1.904568305e-03f, +1.335936777e-02f, +8.405460496e-03f, -6.361097600e-02f, -1.700110841e-02f, +3.013546237e-01f, +5.211016817e-01f, +3.013546237e-01f, -1.700110841e-02f, -6.361097600e-02f, +8.405460496e-03f, +1.335936777e-02f, -1.904568305e-03f, -8.290567151e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.472952004e-04f, -6.216149968e-04f, +1.340936069e-03f, +2.054841261e-03f, -5.977058112e-03f, -1.147946560e-02f, -2.538811153e-04f, +1.138382183e-02f, +6.303087054e-03f, -1.942910092e-03f, -1.433209217e-03f, +6.079254793e-04f, +1.683933560e-04f, -8.574656972e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.480522463e-03f, -4.775743118e-03f, +1.308464897e-02f, +8.314368759e-03f, -2.916003915e-02f, -4.410825970e-03f, +3.732936584e-02f, -4.410825970e-03f, -2.916003915e-02f, +8.314368759e-03f, +1.308464897e-02f, -4.775743118e-03f, -2.480522463e-03f, +5.676567717e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.049849662e-04f, -2.302028513e-04f, -5.952533556e-04f, +1.005669730e-03f, +6.331246402e-04f, -1.832946003e-03f, -5.432457122e-05f, +1.858153918e-03f, -5.546741618e-04f, -1.053408101e-03f, +5.713413495e-04f, +2.581574779e-04f, -2.078822347e-04f, +1.346620625e-05f, +0.000000000e+00f, /* 11, 1 (16) */ +0.000000000e+00f, -2.051863505e-03f, +1.273775278e-02f, +9.746396564e-03f, -6.155613474e-02f, -2.297816653e-02f, +2.898751581e-01f, +5.208478006e-01f, +3.127384455e-01f, -1.069802136e-02f, -6.555388609e-02f, +6.972251279e-03f, +1.396729325e-02f, -1.736174949e-03f, -9.148032848e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.268783605e-04f, -6.322909003e-04f, +1.248227886e-03f, +2.156066209e-03f, -5.649229208e-03f, -1.155514430e-02f, -7.611405568e-04f, +1.126819238e-02f, +6.626539728e-03f, -1.820199333e-03f, -1.524706656e-03f, +5.911302105e-04f, +1.901116177e-04f, -8.886658125e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.275537496e-03f, -5.005945970e-03f, +1.248939562e-02f, +9.320038489e-03f, -2.852691451e-02f, -6.243771973e-03f, +3.727504127e-02f, -2.552672051e-03f, -2.971471331e-02f, +7.260960658e-03f, +1.365599032e-02f, -4.517585640e-03f, -2.688404697e-03f, +5.811229779e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.012967661e-04f, -2.024810993e-04f, -6.164173868e-04f, +9.556137271e-04f, +7.085417387e-04f, -1.802172594e-03f, -1.627936759e-04f, +1.877678504e-03f, -4.734211408e-04f, -1.098614544e-03f, +5.446973254e-04f, +2.862363067e-04f, -2.099357034e-04f, +9.129372137e-06f, +0.000000000e+00f, /* 11, 2 (16) */ +0.000000000e+00f, -2.178741866e-03f, +1.210546188e-02f, +1.099462445e-02f, -5.940006853e-02f, -2.862739573e-02f, +2.783200138e-01f, +5.200866601e-01f, +3.240066379e-01f, -4.071481631e-03f, -6.737408542e-02f, +5.447544623e-03f, +1.455842346e-02f, -1.546063331e-03f, -1.003669866e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.071979865e-04f, -6.400530335e-04f, +1.155414253e-03f, +2.246685944e-03f, -5.320367038e-03f, -1.161092531e-02f, -1.266892935e-03f, +1.113260386e-02f, +6.946632226e-03f, -1.686664137e-03f, -1.615077431e-03f, +5.711454312e-04f, +2.123827275e-04f, -9.161179782e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.074240730e-03f, -5.208427069e-03f, +1.187297823e-02f, +1.027565222e-02f, -2.781837277e-02f, -8.045944567e-03f, +3.711224759e-02f, -6.749935475e-04f, -3.018813445e-02f, +6.162346114e-03f, +1.420068765e-02f, -4.231349334e-03f, -2.898340401e-03f, +5.902523501e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.968722212e-04f, -1.750964586e-04f, -6.348285654e-04f, +9.034591676e-04f, +7.807080980e-04f, -1.765970402e-03f, -2.707233287e-04f, +1.891421339e-03f, -3.896091618e-04f, -1.141080469e-03f, +5.153485024e-04f, +3.143265902e-04f, -2.110945529e-04f, +4.369440610e-06f, +0.000000000e+00f, /* 11, 3 (16) */ +0.000000000e+00f, -2.285939852e-03f, +1.146540884e-02f, +1.215003870e-02f, -5.715338258e-02f, -3.394776277e-02f, +2.667090885e-01f, +5.188197671e-01f, +3.351392418e-01f, +2.875150595e-03f, -6.906074956e-02f, +3.832467192e-03f, +1.512956889e-02f, -1.333680604e-03f, -1.095281664e-03f, +0.000000000e+00f, +0.000000000e+00f, -8.830318502e-05f, -6.450082674e-04f, +1.062812921e-03f, +2.326828164e-03f, -4.991226734e-03f, -1.164692223e-02f, -1.770137883e-03f, +1.097713031e-02f, +7.262575094e-03f, -1.542288980e-03f, -1.703961170e-03f, +5.478964219e-04f, +2.351334187e-04f, -9.393860917e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.877368509e-03f, -5.383523527e-03f, +1.123814966e-02f, +1.117911138e-02f, -2.703766467e-02f, -9.811914969e-03f, +3.684152426e-02f, +1.216427791e-03f, -3.057774361e-02f, +5.021265645e-03f, +1.471603615e-02f, -3.917022743e-03f, -3.109434954e-03f, +5.946217907e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.917673084e-04f, -1.481483990e-04f, -6.504928668e-04f, +8.494289867e-04f, +8.494205068e-04f, -1.724494415e-03f, -3.777560982e-04f, +1.899303879e-03f, -3.034937685e-04f, -1.180603899e-03f, +4.833335002e-04f, +3.423118946e-04f, -2.113103429e-04f, -8.081390693e-07f, +0.000000000e+00f, /* 11, 4 (16) */ +0.000000000e+00f, -2.374243037e-03f, +1.082040057e-02f, +1.321285162e-02f, -5.482655442e-02f, -3.893898951e-02f, +2.550621663e-01f, +5.170496292e-01f, +3.461163721e-01f, +1.013772569e-02f, -7.060303854e-02f, +2.128506022e-03f, +1.567746532e-02f, -1.098547185e-03f, -1.189220273e-03f, +0.000000000e+00f, +0.000000000e+00f, -7.023706188e-05f, -6.472698169e-04f, +9.707291231e-04f, +2.396646241e-03f, -4.662549978e-03f, -1.166329422e-02f, -2.269881533e-03f, +1.080189342e-02f, +7.573575436e-03f, -1.387088395e-03f, -1.790989004e-03f, +5.213181517e-04f, +2.582844834e-04f, -9.580329841e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.685601201e-03f, -5.531671926e-03f, +1.058765680e-02f, +1.202854037e-02f, -2.618824416e-02f, -1.153640938e-02f, +3.646376817e-02f, +3.115731670e-03f, -3.088123738e-02f, +3.840661746e-03f, +1.519936965e-02f, -3.574710849e-03f, -3.320745296e-03f, +5.938136516e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.860390689e-04f, -1.217313216e-04f, -6.634268523e-04f, +7.937490495e-04f, +9.144905107e-04f, -1.677917215e-03f, -4.835378479e-04f, +1.901267847e-03f, -2.153416212e-04f, -1.216990366e-03f, +4.487024310e-04f, +3.700725160e-04f, -2.105373403e-04f, -6.395100902e-06f, +0.000000000e+00f, /* 11, 5 (16) */ +0.000000000e+00f, -2.444480099e-03f, +1.017313076e-02f, +1.418358075e-02f, -5.242990818e-02f, -4.360153948e-02f, +2.433988720e-01f, +5.147797477e-01f, +3.569182655e-01f, +1.771130113e-02f, -7.199012694e-02f, +3.375170173e-04f, +1.619878347e-02f, -8.402627015e-04f, -1.285023571e-03f, +0.000000000e+00f, +0.000000000e+00f, -5.303678911e-05f, -6.469565560e-04f, +8.794549476e-04f, +2.456318153e-03f, -4.335063175e-03f, -1.166024520e-02f, -2.765139089e-03f, +1.060706251e-02f, +7.878839049e-03f, -1.221107623e-03f, -1.875784547e-03f, +4.913559109e-04f, +2.817508714e-04f, -9.716227592e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.499562132e-03f, -5.653403248e-03f, +9.924229945e-03f, +1.282228942e-02f, -2.527375365e-02f, -1.321432660e-02f, +3.598023032e-02f, +5.016999518e-03f, -3.109657900e-02f, +2.623671381e-03f, +1.564807208e-02f, -3.204638333e-03f, -3.531282637e-03f, +5.874185507e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.797452882e-04f, -9.593428836e-05f, -6.736573625e-04f, +7.366472271e-04f, +9.757449570e-04f, -1.626428246e-03f, -5.877190360e-04f, +1.897275544e-03f, -1.254296023e-04f, -1.250053791e-03f, +4.115169448e-04f, +3.974859214e-04f, -2.087328446e-04f, -1.238029514e-05f, +0.000000000e+00f, /* 11, 6 (16) */ +0.000000000e+00f, -2.497516888e-03f, +9.526174202e-03f, +1.506303569e-02f, -4.997359003e-02f, -4.793660266e-02f, +2.317386268e-01f, +5.120146086e-01f, +3.675253280e-01f, +2.559014017e-02f, -7.321123456e-02f, -1.538267530e-03f, +1.669013938e-02f, -5.585118301e-04f, -1.382185847e-03f, +0.000000000e+00f, +0.000000000e+00f, -3.673369658e-05f, -6.441923343e-04f, +7.892687808e-04f, +2.506045352e-03f, -4.009475700e-03f, -1.163802289e-02f, -3.254937370e-03f, +1.039285442e-02f, +8.177572597e-03f, -1.044423172e-03f, -1.957964918e-03f, +4.579659243e-04f, +3.054418175e-04f, -9.797232276e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.319816844e-03f, -5.749337536e-03f, +9.250572582e-03f, +1.355893665e-02f, -2.429800870e-02f, -1.484075485e-02f, +3.539251128e-02f, +6.914275062e-03f, -3.122200860e-02f, +1.373617589e-03f, +1.605958902e-02f, -2.807152411e-03f, -3.740015481e-03f, +5.750382556e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.729441808e-04f, -7.084078296e-05f, -6.812211733e-04f, +6.783524775e-04f, +1.033026473e-03f, -1.570233017e-03f, -6.899559970e-04f, +1.887310081e-03f, -3.404387314e-05f, -1.279617346e-03f, +3.718502256e-04f, +4.244272151e-04f, -2.058575066e-04f, -1.874963546e-05f, +0.000000000e+00f, /* 11, 7 (16) */ +0.000000000e+00f, -2.534250585e-03f, +8.881981867e-03f, +1.585230448e-02f, -4.746754467e-02f, -5.194607836e-02f, +2.201006040e-01f, +5.087596713e-01f, +3.779181824e-01f, +3.376771277e-02f, -7.425565773e-02f, -3.496232448e-03f, +1.714810530e-02f, -2.530700126e-04f, -1.480158170e-03f, +0.000000000e+00f, +0.000000000e+00f, -2.135338610e-05f, -6.391052972e-04f, +7.004348084e-04f, +2.546051583e-03f, -3.686478220e-03f, -1.159691782e-02f, -3.738317321e-03f, +1.015953322e-02f, +8.468985806e-03f, -8.571432978e-04f, -2.037141826e-03f, +4.211159430e-04f, +3.292610009e-04f, -9.819084264e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.146872663e-03f, -5.820178319e-03f, +8.569351409e-03f, +1.423728912e-02f, -2.326498222e-02f, -1.641098786e-02f, +3.470255529e-02f, +8.801585143e-03f, -3.125605248e-02f, +9.400024357e-05f, +1.643143925e-02f, -2.382725196e-03f, -3.945872988e-03f, +5.562886201e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.656940839e-04f, -4.652850306e-05f, -6.861646173e-04f, +6.190939368e-04f, +1.086193879e-03f, -1.509552241e-03f, -7.899121992e-04f, +1.871375538e-03f, +5.852111391e-05f, -1.305514278e-03f, +3.297869390e-04f, +4.507696264e-04f, -2.018756421e-04f, -2.548606104e-05f, +0.000000000e+00f, /* 11, 8 (16) */ +0.000000000e+00f, -2.555603971e-03f, +8.242876570e-03f, +1.655273928e-02f, -4.492149309e-02f, -5.563255658e-02f, +2.085036861e-01f, +5.050213539e-01f, +3.880777156e-01f, +4.223669858e-02f, -7.511280103e-02f, -5.533374273e-03f, +1.756922125e-02f, +7.619098826e-05f, -1.578349013e-03f, +0.000000000e+00f, +0.000000000e+00f, -6.915867024e-06f, -6.318272127e-04f, +6.132025826e-04f, +2.576581665e-03f, -3.366741102e-03f, -1.153726214e-02f, -4.214336477e-03f, +9.907409864e-03f, +8.752293678e-03f, -6.594083894e-04f, -2.112922692e-03f, +3.807858107e-04f, +3.531067351e-04f, -9.777612154e-05f, +0.000000000e+00f, +0.000000000e+00f, -9.811785789e-04f, -5.866706822e-03f, +7.883186792e-03f, +1.485638306e-02f, -2.217878834e-02f, -1.792054010e-02f, +3.391264309e-02f, +1.067296068e-02f, -3.119753136e-02f, -1.211514035e-03f, +1.676122619e-02f, -1.931955570e-03f, -4.147748630e-03f, +5.308025591e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.580531598e-04f, -2.306918468e-05f, -6.885431715e-04f, +5.591000242e-04f, +1.135122532e-03f, -1.444620927e-03f, -8.872594744e-04f, +1.849497036e-03f, +1.519636454e-04f, -1.327588722e-03f, +2.854231292e-04f, +4.763850190e-04f, -1.967555349e-04f, -3.256951419e-05f, +0.000000000e+00f, /* 11, 9 (16) */ +0.000000000e+00f, -2.562519838e-03f, +7.611049357e-03f, +1.716594187e-02f, -4.234491142e-02f, -5.899929768e-02f, +1.969664240e-01f, +5.008070175e-01f, +3.979851255e-01f, +5.098899226e-02f, -7.577220942e-02f, -7.646296965e-03f, +1.795000706e-02f, +4.292977234e-04f, -1.676125134e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.564288080e-06f, -6.224928071e-04f, +5.278066510e-04f, +2.597900219e-03f, -3.050912894e-03f, -1.145942839e-02f, -4.682071381e-03f, +9.636841592e-03f, +9.026718713e-03f, -4.513912593e-04f, -2.184911820e-03f, +3.369680024e-04f, +3.768721893e-04f, -9.668759395e-05f, +0.000000000e+00f, +0.000000000e+00f, -8.231254191e-04f, -5.889776007e-03f, +7.194643620e-03f, +1.541548309e-02f, -2.104366581e-02f, -1.936516103e-02f, +3.302538361e-02f, +1.252245772e-02f, -3.104556772e-02f, -2.539102756e-03f, +1.704664932e-02f, -1.455570551e-03f, -4.344504165e-03f, +4.982330449e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.500791075e-04f, -5.284584951e-07f, -6.884210159e-04f, +4.985975632e-04f, +1.179704599e-03f, -1.375687421e-03f, -9.816792142e-04f, +1.821720727e-03f, +2.459758139e-04f, -1.345696463e-03f, +2.388660659e-04f, +5.011444191e-04f, -1.904697302e-04f, -3.997693428e-05f, +0.000000000e+00f, /* 11,10 (16) */ +0.000000000e+00f, -2.555955550e-03f, +6.988556550e-03f, +1.769374852e-02f, -3.974701121e-02f, -6.205021057e-02f, +1.855069956e-01f, +4.961249461e-01f, +4.076219671e-01f, +6.001571097e-02f, -7.622360068e-02f, -9.831208785e-03f, +1.828697506e-02f, +8.061699127e-04f, -1.772812728e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.907776907e-05f, -6.112391122e-04f, +4.444662506e-04f, +2.610290373e-03f, -2.739618907e-03f, -1.136382805e-02f, -5.140619940e-03f, +9.348231317e-03f, +9.291493147e-03f, -2.332973398e-04f, -2.252711610e-03f, +2.896681321e-04f, +4.004456412e-04f, -9.488611462e-05f, +0.000000000e+00f, +0.000000000e+00f, -6.730463116e-04f, -5.890304466e-03f, +6.506222604e-03f, +1.591408065e-02f, -1.986396121e-02f, -2.074084845e-02f, +3.204370440e-02f, +1.434417844e-02f, -3.079959190e-02f, -3.884799219e-03f, +1.728551538e-02f, -9.544261318e-04f, -4.534973895e-03f, +4.582561106e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.418288877e-04f, +2.103426197e-05f, -6.858705636e-04f, +4.378109246e-04f, +1.219849269e-03f, -1.303012400e-03f, -1.072863528e-03f, +1.788113712e-03f, +3.402446188e-04f, -1.359705677e-03f, +1.902340416e-04f, +5.249185599e-04f, -1.829953158e-04f, -4.768226821e-05f, +0.000000000e+00f, /* 11,11 (16) */ +0.000000000e+00f, -2.536877781e-03f, +6.377317438e-03f, +1.813821477e-02f, -3.713672083e-02f, -6.478982948e-02f, +1.741431676e-01f, +4.909843261e-01f, +4.169701984e-01f, +6.930720412e-02f, -7.645689802e-02f, -1.208392040e-02f, +1.857664319e-02f, +1.206615554e-03f, -1.867698843e-03f, +0.000000000e+00f, +0.000000000e+00f, +3.062033667e-05f, -5.982048263e-04f, +3.633850627e-04f, +2.614052425e-03f, -2.433459876e-03f, -1.125091018e-02f, -5.589103720e-03f, +9.042026792e-03f, +9.545861170e-03f, -5.364779826e-06f, -2.315923806e-03f, +2.389054263e-04f, +4.237107612e-04f, -9.233423472e-05f, +0.000000000e+00f, +0.000000000e+00f, -5.312174239e-04f, -5.869270204e-03f, +5.820352041e-03f, +1.635189157e-02f, -1.864411194e-02f, -2.204386085e-02f, +3.097084087e-02f, +1.613229216e-02f, -3.045934729e-02f, -5.244504897e-03f, +1.747574943e-02f, -4.295075719e-04f, -4.717969211e-03f, +4.105738424e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.333584586e-04f, +4.156586045e-05f, -6.809719658e-04f, +3.769611920e-04f, +1.255482883e-03f, -1.226867825e-03f, -1.160516358e-03f, +1.748763870e-03f, +4.344530968e-04f, -1.369497622e-03f, +1.396561165e-04f, +5.475784417e-04f, -1.743141886e-04f, -5.565649824e-05f, +0.000000000e+00f, /* 11,12 (16) */ +0.000000000e+00f, -2.506257444e-03f, +5.779112612e-03f, +1.850159983e-02f, -3.452266841e-02f, -6.722328936e-02f, +1.628922574e-01f, +4.853952224e-01f, +4.260122252e-01f, +7.885306529e-02f, -7.646226280e-02f, -1.439984420e-02f, +1.881554862e-02f, +1.630326315e-03f, -1.960033078e-03f, +0.000000000e+00f, +0.000000000e+00f, +4.119261508e-05f, -5.835296898e-04f, +2.847510312e-04f, +2.609502493e-03f, -2.133010727e-03f, -1.112115974e-02f, -6.026670168e-03f, +8.718719686e-03f, +9.789081151e-03f, +2.321355588e-04f, -2.374150778e-03f, +1.847131615e-04f, +4.465469274e-04f, -8.899648114e-05f, +0.000000000e+00f, +0.000000000e+00f, -3.978589652e-04f, -5.827704343e-03f, +5.139380075e-03f, +1.672885277e-02f, -1.738862906e-02f, -2.327072868e-02f, +2.981032451e-02f, +1.788105603e-02f, -3.002489419e-02f, -6.614002519e-03f, +1.761540554e-02f, +1.180708697e-04f, -4.892283400e-03f, +3.549173442e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.247225261e-04f, +6.101956685e-05f, -6.738125947e-04f, +3.162653554e-04f, +1.286549006e-03f, -1.147535856e-03f, -1.244354548e-03f, +1.703779605e-03f, +5.282814765e-04f, -1.374967286e-03f, +8.727181486e-05f, +5.689959034e-04f, -1.644133056e-04f, -6.386768716e-05f, +0.000000000e+00f, /* 11,13 (16) */ +0.000000000e+00f, -2.465064829e-03f, +5.195582922e-03f, +1.878635086e-02f, -3.191316591e-02f, -6.935630008e-02f, +1.517710976e-01f, +4.793685522e-01f, +4.347309449e-01f, +8.864214644e-02f, -7.623012724e-02f, -1.677399498e-02f, +1.900026178e-02f, +2.076873243e-03f, -2.049029559e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.079987044e-05f, -5.673538806e-04f, +2.087362411e-04f, +2.596971129e-03f, -1.838819431e-03f, -1.097509601e-02f, -6.452494754e-03f, +8.378844513e-03f, +1.002042784e-02f, +4.789002077e-04f, -2.426996842e-03f, +1.271390622e-04f, +4.688295727e-04f, -8.483963763e-05f, +0.000000000e+00f, +0.000000000e+00f, -2.731364391e-04f, -5.766684776e-03f, +4.465567480e-03f, +1.704511812e-02f, -1.610208006e-02f, -2.441826453e-02f, +2.856596996e-02f, +1.958483563e-02f, -2.949661271e-02f, -7.988969805e-03f, +1.770267736e-02f, +6.870667731e-04f, -5.056696705e-03f, +2.910496570e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.159743082e-04f, +7.935497537e-05f, -6.644865060e-04f, +2.559355344e-04f, +1.313008429e-03f, -1.065307738e-03f, -1.324108863e-03f, +1.653289520e-03f, +6.214083546e-04f, -1.376023996e-03f, +3.323077078e-05f, +5.890442050e-04f, -1.532849178e-04f, -7.228104141e-05f, +0.000000000e+00f, /* 11,14 (16) */ +0.000000000e+00f, -2.414264959e-03f, +4.628229041e-03f, +1.899508710e-02f, -2.931619478e-02f, -7.119511951e-02f, +1.407960016e-01f, +4.729160575e-01f, +4.431097894e-01f, +9.866257427e-02f, -7.575122703e-02f, -1.920099182e-02f, +1.912740084e-02f, +2.545702815e-03f, -2.133869196e-03f, +0.000000000e+00f, +0.000000000e+00f, +5.945177645e-05f, -5.498174272e-04f, +1.354968576e-04f, +2.576801937e-03f, -1.551405963e-03f, -1.081327083e-02f, -6.865783031e-03f, +8.022977447e-03f, +1.023919453e-02f, +7.345933011e-04f, -2.474069593e-03f, +6.624565629e-05f, +4.904305609e-04f, -7.983302664e-05f, +0.000000000e+00f, +0.000000000e+00f, -1.571621309e-04f, -5.687329801e-03f, +3.801080974e-03f, +1.730105366e-02f, -1.478907163e-02f, -2.548357227e-02f, +2.724186110e-02f, +2.123812515e-02f, -2.887520436e-02f, -9.364993801e-03f, +1.773590813e-02f, +1.276110978e-03f, -5.209981623e-03f, +2.187686156e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.071653152e-04f, +9.653803256e-05f, -6.530938851e-04f, +1.961782338e-04f, +1.334839093e-03f, -9.804826529e-04f, -1.399524947e-03f, +1.597442008e-03f, +7.135118869e-04f, -1.372591967e-03f, -2.230767534e-05f, +6.075986170e-04f, -1.409267840e-04f, -8.085899218e-05f, +0.000000000e+00f, /* 11,15 (16) */ +0.000000000e+00f, -2.354813182e-03f, +4.078411614e-03f, +1.913058396e-02f, -2.673939285e-02f, -7.274652548e-02f, +1.299827308e-01f, +4.660502745e-01f, +4.511327669e-01f, +1.089017688e-01f, -7.501663373e-02f, -2.167506141e-02f, +1.919364650e-02f, +3.036133376e-03f, -2.213702223e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.716216885e-05f, -5.310596448e-04f, +6.517312326e-05f, +2.549350159e-03f, -1.271261362e-03f, -1.063626677e-02f, -7.265772605e-03f, +7.651735003e-03f, +1.044469523e-02f, +9.988468901e-04f, -2.514981275e-03f, +2.110586983e-06f, +5.112185933e-04f, -7.394879023e-05f, +0.000000000e+00f, +0.000000000e+00f, -4.999681573e-05f, -5.590791768e-03f, +3.147987089e-03f, +1.749723189e-02f, -1.345423253e-02f, -2.646405492e-02f, +2.584233615e-02f, +2.283556716e-02f, -2.816169247e-02f, -1.073758577e-02f, +1.771360045e-02f, +1.883709595e-03f, -5.350908407e-03f, +1.379096234e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.834514462e-05f, +1.125409961e-04f, -6.397404787e-04f, +1.371936357e-04f, +1.352035959e-03f, -8.933665568e-04f, -1.470364230e-03f, +1.536404765e-03f, +8.042709914e-04f, -1.364610807e-03f, -7.917492811e-05f, +6.245370154e-04f, -1.273423653e-04f, -8.956129451e-05f, +0.000000000e+00f, /* 11,16 (16) */ +0.000000000e+00f, -2.287651013e-03f, +3.547351969e-03f, +1.919575708e-02f, -2.419004269e-02f, -7.401778684e-02f, +1.193464640e-01f, +4.587845019e-01f, +4.587845019e-01f, +1.193464640e-01f, -7.401778684e-02f, -2.419004269e-02f, +1.919575708e-02f, +3.547351969e-03f, -2.287651013e-03f, +0.000000000e+00f, +0.000000000e+00f, +7.394879023e-05f, -5.112185933e-04f, -2.110586983e-06f, +2.514981275e-03f, -9.988468901e-04f, -1.044469523e-02f, -7.651735003e-03f, +7.265772605e-03f, +1.063626677e-02f, +1.271261362e-03f, -2.549350159e-03f, -6.517312326e-05f, +5.310596448e-04f, -6.716216885e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.834832889e-05f, -5.478250772e-03f, +2.508246610e-03f, +1.763442552e-02f, -1.210219657e-02f, -2.735742148e-02f, +2.437197192e-02f, +2.437197192e-02f, -2.735742148e-02f, -1.210219657e-02f, +1.763442552e-02f, +2.508246610e-03f, -5.478250772e-03f, +4.834832889e-05f, +0.000000000e+00f, +0.000000000e+00f, +8.956129451e-05f, +1.273423653e-04f, -6.245370154e-04f, +7.917492811e-05f, +1.364610807e-03f, -8.042709914e-04f, -1.536404765e-03f, +1.470364230e-03f, +8.933665568e-04f, -1.352035959e-03f, -1.371936357e-04f, +6.397404787e-04f, -1.125409961e-04f, -9.834514462e-05f, +0.000000000e+00f, /* 11,17 (16) */ +0.000000000e+00f, -2.213702223e-03f, +3.036133376e-03f, +1.919364650e-02f, -2.167506141e-02f, -7.501663373e-02f, +1.089017688e-01f, +4.511327669e-01f, +4.660502745e-01f, +1.299827308e-01f, -7.274652548e-02f, -2.673939285e-02f, +1.913058396e-02f, +4.078411614e-03f, -2.354813182e-03f, +0.000000000e+00f, +0.000000000e+00f, +7.983302664e-05f, -4.904305609e-04f, -6.624565629e-05f, +2.474069593e-03f, -7.345933011e-04f, -1.023919453e-02f, -8.022977447e-03f, +6.865783031e-03f, +1.081327083e-02f, +1.551405963e-03f, -2.576801937e-03f, -1.354968576e-04f, +5.498174272e-04f, -5.945177645e-05f, +0.000000000e+00f, +0.000000000e+00f, +1.379096234e-04f, -5.350908407e-03f, +1.883709595e-03f, +1.771360045e-02f, -1.073758577e-02f, -2.816169247e-02f, +2.283556716e-02f, +2.584233615e-02f, -2.646405492e-02f, -1.345423253e-02f, +1.749723189e-02f, +3.147987089e-03f, -5.590791768e-03f, -4.999681573e-05f, +0.000000000e+00f, +0.000000000e+00f, +8.085899218e-05f, +1.409267840e-04f, -6.075986170e-04f, +2.230767534e-05f, +1.372591967e-03f, -7.135118869e-04f, -1.597442008e-03f, +1.399524947e-03f, +9.804826529e-04f, -1.334839093e-03f, -1.961782338e-04f, +6.530938851e-04f, -9.653803256e-05f, -1.071653152e-04f, +0.000000000e+00f, /* 11,18 (16) */ +0.000000000e+00f, -2.133869196e-03f, +2.545702815e-03f, +1.912740084e-02f, -1.920099182e-02f, -7.575122703e-02f, +9.866257427e-02f, +4.431097894e-01f, +4.729160575e-01f, +1.407960016e-01f, -7.119511951e-02f, -2.931619478e-02f, +1.899508710e-02f, +4.628229041e-03f, -2.414264959e-03f, +0.000000000e+00f, +0.000000000e+00f, +8.483963763e-05f, -4.688295727e-04f, -1.271390622e-04f, +2.426996842e-03f, -4.789002077e-04f, -1.002042784e-02f, -8.378844513e-03f, +6.452494754e-03f, +1.097509601e-02f, +1.838819431e-03f, -2.596971129e-03f, -2.087362411e-04f, +5.673538806e-04f, -5.079987044e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.187686156e-04f, -5.209981623e-03f, +1.276110978e-03f, +1.773590813e-02f, -9.364993801e-03f, -2.887520436e-02f, +2.123812515e-02f, +2.724186110e-02f, -2.548357227e-02f, -1.478907163e-02f, +1.730105366e-02f, +3.801080974e-03f, -5.687329801e-03f, -1.571621309e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.228104141e-05f, +1.532849178e-04f, -5.890442050e-04f, -3.323077078e-05f, +1.376023996e-03f, -6.214083546e-04f, -1.653289520e-03f, +1.324108863e-03f, +1.065307738e-03f, -1.313008429e-03f, -2.559355344e-04f, +6.644865060e-04f, -7.935497537e-05f, -1.159743082e-04f, +0.000000000e+00f, /* 11,19 (16) */ +0.000000000e+00f, -2.049029559e-03f, +2.076873243e-03f, +1.900026178e-02f, -1.677399498e-02f, -7.623012724e-02f, +8.864214644e-02f, +4.347309449e-01f, +4.793685522e-01f, +1.517710976e-01f, -6.935630008e-02f, -3.191316591e-02f, +1.878635086e-02f, +5.195582922e-03f, -2.465064829e-03f, +0.000000000e+00f, +0.000000000e+00f, +8.899648114e-05f, -4.465469274e-04f, -1.847131615e-04f, +2.374150778e-03f, -2.321355588e-04f, -9.789081151e-03f, -8.718719686e-03f, +6.026670168e-03f, +1.112115974e-02f, +2.133010727e-03f, -2.609502493e-03f, -2.847510312e-04f, +5.835296898e-04f, -4.119261508e-05f, +0.000000000e+00f, +0.000000000e+00f, +2.910496570e-04f, -5.056696705e-03f, +6.870667731e-04f, +1.770267736e-02f, -7.988969805e-03f, -2.949661271e-02f, +1.958483563e-02f, +2.856596996e-02f, -2.441826453e-02f, -1.610208006e-02f, +1.704511812e-02f, +4.465567480e-03f, -5.766684776e-03f, -2.731364391e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.386768716e-05f, +1.644133056e-04f, -5.689959034e-04f, -8.727181486e-05f, +1.374967286e-03f, -5.282814765e-04f, -1.703779605e-03f, +1.244354548e-03f, +1.147535856e-03f, -1.286549006e-03f, -3.162653554e-04f, +6.738125947e-04f, -6.101956685e-05f, -1.247225261e-04f, +0.000000000e+00f, /* 11,20 (16) */ +0.000000000e+00f, -1.960033078e-03f, +1.630326315e-03f, +1.881554862e-02f, -1.439984420e-02f, -7.646226280e-02f, +7.885306529e-02f, +4.260122252e-01f, +4.853952224e-01f, +1.628922574e-01f, -6.722328936e-02f, -3.452266841e-02f, +1.850159983e-02f, +5.779112612e-03f, -2.506257444e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.233423472e-05f, -4.237107612e-04f, -2.389054263e-04f, +2.315923806e-03f, +5.364779826e-06f, -9.545861170e-03f, -9.042026792e-03f, +5.589103720e-03f, +1.125091018e-02f, +2.433459876e-03f, -2.614052425e-03f, -3.633850627e-04f, +5.982048263e-04f, -3.062033667e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.549173442e-04f, -4.892283400e-03f, +1.180708697e-04f, +1.761540554e-02f, -6.614002519e-03f, -3.002489419e-02f, +1.788105603e-02f, +2.981032451e-02f, -2.327072868e-02f, -1.738862906e-02f, +1.672885277e-02f, +5.139380075e-03f, -5.827704343e-03f, -3.978589652e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.565649824e-05f, +1.743141886e-04f, -5.475784417e-04f, -1.396561165e-04f, +1.369497622e-03f, -4.344530968e-04f, -1.748763870e-03f, +1.160516358e-03f, +1.226867825e-03f, -1.255482883e-03f, -3.769611920e-04f, +6.809719658e-04f, -4.156586045e-05f, -1.333584586e-04f, +0.000000000e+00f, /* 11,21 (16) */ +0.000000000e+00f, -1.867698843e-03f, +1.206615554e-03f, +1.857664319e-02f, -1.208392040e-02f, -7.645689802e-02f, +6.930720412e-02f, +4.169701984e-01f, +4.909843261e-01f, +1.741431676e-01f, -6.478982948e-02f, -3.713672083e-02f, +1.813821477e-02f, +6.377317438e-03f, -2.536877781e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.488611462e-05f, -4.004456412e-04f, -2.896681321e-04f, +2.252711610e-03f, +2.332973398e-04f, -9.291493147e-03f, -9.348231317e-03f, +5.140619940e-03f, +1.136382805e-02f, +2.739618907e-03f, -2.610290373e-03f, -4.444662506e-04f, +6.112391122e-04f, -1.907776907e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.105738424e-04f, -4.717969211e-03f, -4.295075719e-04f, +1.747574943e-02f, -5.244504897e-03f, -3.045934729e-02f, +1.613229216e-02f, +3.097084087e-02f, -2.204386085e-02f, -1.864411194e-02f, +1.635189157e-02f, +5.820352041e-03f, -5.869270204e-03f, -5.312174239e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.768226821e-05f, +1.829953158e-04f, -5.249185599e-04f, -1.902340416e-04f, +1.359705677e-03f, -3.402446188e-04f, -1.788113712e-03f, +1.072863528e-03f, +1.303012400e-03f, -1.219849269e-03f, -4.378109246e-04f, +6.858705636e-04f, -2.103426197e-05f, -1.418288877e-04f, +0.000000000e+00f, /* 11,22 (16) */ +0.000000000e+00f, -1.772812728e-03f, +8.061699127e-04f, +1.828697506e-02f, -9.831208785e-03f, -7.622360068e-02f, +6.001571097e-02f, +4.076219671e-01f, +4.961249461e-01f, +1.855069956e-01f, -6.205021057e-02f, -3.974701121e-02f, +1.769374852e-02f, +6.988556550e-03f, -2.555955550e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.668759395e-05f, -3.768721893e-04f, -3.369680024e-04f, +2.184911820e-03f, +4.513912593e-04f, -9.026718713e-03f, -9.636841592e-03f, +4.682071381e-03f, +1.145942839e-02f, +3.050912894e-03f, -2.597900219e-03f, -5.278066510e-04f, +6.224928071e-04f, -6.564288080e-06f, +0.000000000e+00f, +0.000000000e+00f, +4.582561106e-04f, -4.534973895e-03f, -9.544261318e-04f, +1.728551538e-02f, -3.884799219e-03f, -3.079959190e-02f, +1.434417844e-02f, +3.204370440e-02f, -2.074084845e-02f, -1.986396121e-02f, +1.591408065e-02f, +6.506222604e-03f, -5.890304466e-03f, -6.730463116e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.997693428e-05f, +1.904697302e-04f, -5.011444191e-04f, -2.388660659e-04f, +1.345696463e-03f, -2.459758139e-04f, -1.821720727e-03f, +9.816792142e-04f, +1.375687421e-03f, -1.179704599e-03f, -4.985975632e-04f, +6.884210159e-04f, +5.284584951e-07f, -1.500791075e-04f, +0.000000000e+00f, /* 11,23 (16) */ +0.000000000e+00f, -1.676125134e-03f, +4.292977234e-04f, +1.795000706e-02f, -7.646296965e-03f, -7.577220942e-02f, +5.098899226e-02f, +3.979851255e-01f, +5.008070175e-01f, +1.969664240e-01f, -5.899929768e-02f, -4.234491142e-02f, +1.716594187e-02f, +7.611049357e-03f, -2.562519838e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.777612154e-05f, -3.531067351e-04f, -3.807858107e-04f, +2.112922692e-03f, +6.594083894e-04f, -8.752293678e-03f, -9.907409864e-03f, +4.214336477e-03f, +1.153726214e-02f, +3.366741102e-03f, -2.576581665e-03f, -6.132025826e-04f, +6.318272127e-04f, +6.915867024e-06f, +0.000000000e+00f, +0.000000000e+00f, +4.982330449e-04f, -4.344504165e-03f, -1.455570551e-03f, +1.704664932e-02f, -2.539102756e-03f, -3.104556772e-02f, +1.252245772e-02f, +3.302538361e-02f, -1.936516103e-02f, -2.104366581e-02f, +1.541548309e-02f, +7.194643620e-03f, -5.889776007e-03f, -8.231254191e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.256951419e-05f, +1.967555349e-04f, -4.763850190e-04f, -2.854231292e-04f, +1.327588722e-03f, -1.519636454e-04f, -1.849497036e-03f, +8.872594744e-04f, +1.444620927e-03f, -1.135122532e-03f, -5.591000242e-04f, +6.885431715e-04f, +2.306918468e-05f, -1.580531598e-04f, +0.000000000e+00f, /* 11,24 (16) */ +0.000000000e+00f, -1.578349013e-03f, +7.619098826e-05f, +1.756922125e-02f, -5.533374273e-03f, -7.511280103e-02f, +4.223669858e-02f, +3.880777156e-01f, +5.050213539e-01f, +2.085036861e-01f, -5.563255658e-02f, -4.492149309e-02f, +1.655273928e-02f, +8.242876570e-03f, -2.555603971e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.819084264e-05f, -3.292610009e-04f, -4.211159430e-04f, +2.037141826e-03f, +8.571432978e-04f, -8.468985806e-03f, -1.015953322e-02f, +3.738317321e-03f, +1.159691782e-02f, +3.686478220e-03f, -2.546051583e-03f, -7.004348084e-04f, +6.391052972e-04f, +2.135338610e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.308025591e-04f, -4.147748630e-03f, -1.931955570e-03f, +1.676122619e-02f, -1.211514035e-03f, -3.119753136e-02f, +1.067296068e-02f, +3.391264309e-02f, -1.792054010e-02f, -2.217878834e-02f, +1.485638306e-02f, +7.883186792e-03f, -5.866706822e-03f, -9.811785789e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.548606104e-05f, +2.018756421e-04f, -4.507696264e-04f, -3.297869390e-04f, +1.305514278e-03f, -5.852111391e-05f, -1.871375538e-03f, +7.899121992e-04f, +1.509552241e-03f, -1.086193879e-03f, -6.190939368e-04f, +6.861646173e-04f, +4.652850306e-05f, -1.656940839e-04f, +0.000000000e+00f, /* 11,25 (16) */ +0.000000000e+00f, -1.480158170e-03f, -2.530700126e-04f, +1.714810530e-02f, -3.496232448e-03f, -7.425565773e-02f, +3.376771277e-02f, +3.779181824e-01f, +5.087596713e-01f, +2.201006040e-01f, -5.194607836e-02f, -4.746754467e-02f, +1.585230448e-02f, +8.881981867e-03f, -2.534250585e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.797232276e-05f, -3.054418175e-04f, -4.579659243e-04f, +1.957964918e-03f, +1.044423172e-03f, -8.177572597e-03f, -1.039285442e-02f, +3.254937370e-03f, +1.163802289e-02f, +4.009475700e-03f, -2.506045352e-03f, -7.892687808e-04f, +6.441923343e-04f, +3.673369658e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.562886201e-04f, -3.945872988e-03f, -2.382725196e-03f, +1.643143925e-02f, +9.400024357e-05f, -3.125605248e-02f, +8.801585143e-03f, +3.470255529e-02f, -1.641098786e-02f, -2.326498222e-02f, +1.423728912e-02f, +8.569351409e-03f, -5.820178319e-03f, -1.146872663e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.874963546e-05f, +2.058575066e-04f, -4.244272151e-04f, -3.718502256e-04f, +1.279617346e-03f, +3.404387314e-05f, -1.887310081e-03f, +6.899559970e-04f, +1.570233017e-03f, -1.033026473e-03f, -6.783524775e-04f, +6.812211733e-04f, +7.084078296e-05f, -1.729441808e-04f, +0.000000000e+00f, /* 11,26 (16) */ +0.000000000e+00f, -1.382185847e-03f, -5.585118301e-04f, +1.669013938e-02f, -1.538267530e-03f, -7.321123456e-02f, +2.559014017e-02f, +3.675253280e-01f, +5.120146086e-01f, +2.317386268e-01f, -4.793660266e-02f, -4.997359003e-02f, +1.506303569e-02f, +9.526174202e-03f, -2.497516888e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.716227592e-05f, -2.817508714e-04f, -4.913559109e-04f, +1.875784547e-03f, +1.221107623e-03f, -7.878839049e-03f, -1.060706251e-02f, +2.765139089e-03f, +1.166024520e-02f, +4.335063175e-03f, -2.456318153e-03f, -8.794549476e-04f, +6.469565560e-04f, +5.303678911e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.750382556e-04f, -3.740015481e-03f, -2.807152411e-03f, +1.605958902e-02f, +1.373617589e-03f, -3.122200860e-02f, +6.914275062e-03f, +3.539251128e-02f, -1.484075485e-02f, -2.429800870e-02f, +1.355893665e-02f, +9.250572582e-03f, -5.749337536e-03f, -1.319816844e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.238029514e-05f, +2.087328446e-04f, -3.974859214e-04f, -4.115169448e-04f, +1.250053791e-03f, +1.254296023e-04f, -1.897275544e-03f, +5.877190360e-04f, +1.626428246e-03f, -9.757449570e-04f, -7.366472271e-04f, +6.736573625e-04f, +9.593428836e-05f, -1.797452882e-04f, +0.000000000e+00f, /* 11,27 (16) */ +0.000000000e+00f, -1.285023571e-03f, -8.402627015e-04f, +1.619878347e-02f, +3.375170173e-04f, -7.199012694e-02f, +1.771130113e-02f, +3.569182655e-01f, +5.147797477e-01f, +2.433988720e-01f, -4.360153948e-02f, -5.242990818e-02f, +1.418358075e-02f, +1.017313076e-02f, -2.444480099e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.580329841e-05f, -2.582844834e-04f, -5.213181517e-04f, +1.790989004e-03f, +1.387088395e-03f, -7.573575436e-03f, -1.080189342e-02f, +2.269881533e-03f, +1.166329422e-02f, +4.662549978e-03f, -2.396646241e-03f, -9.707291231e-04f, +6.472698169e-04f, +7.023706188e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.874185507e-04f, -3.531282637e-03f, -3.204638333e-03f, +1.564807208e-02f, +2.623671381e-03f, -3.109657900e-02f, +5.016999518e-03f, +3.598023032e-02f, -1.321432660e-02f, -2.527375365e-02f, +1.282228942e-02f, +9.924229945e-03f, -5.653403248e-03f, -1.499562132e-03f, +0.000000000e+00f, +0.000000000e+00f, +6.395100902e-06f, +2.105373403e-04f, -3.700725160e-04f, -4.487024310e-04f, +1.216990366e-03f, +2.153416212e-04f, -1.901267847e-03f, +4.835378479e-04f, +1.677917215e-03f, -9.144905107e-04f, -7.937490495e-04f, +6.634268523e-04f, +1.217313216e-04f, -1.860390689e-04f, +0.000000000e+00f, /* 11,28 (16) */ +0.000000000e+00f, -1.189220273e-03f, -1.098547185e-03f, +1.567746532e-02f, +2.128506022e-03f, -7.060303854e-02f, +1.013772569e-02f, +3.461163721e-01f, +5.170496292e-01f, +2.550621663e-01f, -3.893898951e-02f, -5.482655442e-02f, +1.321285162e-02f, +1.082040057e-02f, -2.374243037e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.393860917e-05f, -2.351334187e-04f, -5.478964219e-04f, +1.703961170e-03f, +1.542288980e-03f, -7.262575094e-03f, -1.097713031e-02f, +1.770137883e-03f, +1.164692223e-02f, +4.991226734e-03f, -2.326828164e-03f, -1.062812921e-03f, +6.450082674e-04f, +8.830318502e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.938136516e-04f, -3.320745296e-03f, -3.574710849e-03f, +1.519936965e-02f, +3.840661746e-03f, -3.088123738e-02f, +3.115731670e-03f, +3.646376817e-02f, -1.153640938e-02f, -2.618824416e-02f, +1.202854037e-02f, +1.058765680e-02f, -5.531671926e-03f, -1.685601201e-03f, +0.000000000e+00f, +0.000000000e+00f, +8.081390693e-07f, +2.113103429e-04f, -3.423118946e-04f, -4.833335002e-04f, +1.180603899e-03f, +3.034937685e-04f, -1.899303879e-03f, +3.777560982e-04f, +1.724494415e-03f, -8.494205068e-04f, -8.494289867e-04f, +6.504928668e-04f, +1.481483990e-04f, -1.917673084e-04f, +0.000000000e+00f, /* 11,29 (16) */ +0.000000000e+00f, -1.095281664e-03f, -1.333680604e-03f, +1.512956889e-02f, +3.832467192e-03f, -6.906074956e-02f, +2.875150595e-03f, +3.351392418e-01f, +5.188197671e-01f, +2.667090885e-01f, -3.394776277e-02f, -5.715338258e-02f, +1.215003870e-02f, +1.146540884e-02f, -2.285939852e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.161179782e-05f, -2.123827275e-04f, -5.711454312e-04f, +1.615077431e-03f, +1.686664137e-03f, -6.946632226e-03f, -1.113260386e-02f, +1.266892935e-03f, +1.161092531e-02f, +5.320367038e-03f, -2.246685944e-03f, -1.155414253e-03f, +6.400530335e-04f, +1.071979865e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.946217907e-04f, -3.109434954e-03f, -3.917022743e-03f, +1.471603615e-02f, +5.021265645e-03f, -3.057774361e-02f, +1.216427791e-03f, +3.684152426e-02f, -9.811914969e-03f, -2.703766467e-02f, +1.117911138e-02f, +1.123814966e-02f, -5.383523527e-03f, -1.877368509e-03f, +0.000000000e+00f, +0.000000000e+00f, -4.369440610e-06f, +2.110945529e-04f, -3.143265902e-04f, -5.153485024e-04f, +1.141080469e-03f, +3.896091618e-04f, -1.891421339e-03f, +2.707233287e-04f, +1.765970402e-03f, -7.807080980e-04f, -9.034591676e-04f, +6.348285654e-04f, +1.750964586e-04f, -1.968722212e-04f, +0.000000000e+00f, /* 11,30 (16) */ +0.000000000e+00f, -1.003669866e-03f, -1.546063331e-03f, +1.455842346e-02f, +5.447544623e-03f, -6.737408542e-02f, -4.071481631e-03f, +3.240066379e-01f, +5.200866601e-01f, +2.783200138e-01f, -2.862739573e-02f, -5.940006853e-02f, +1.099462445e-02f, +1.210546188e-02f, -2.178741866e-03f, +0.000000000e+00f, +0.000000000e+00f, +8.886658125e-05f, -1.901116177e-04f, -5.911302105e-04f, +1.524706656e-03f, +1.820199333e-03f, -6.626539728e-03f, -1.126819238e-02f, +7.611405568e-04f, +1.155514430e-02f, +5.649229208e-03f, -2.156066209e-03f, -1.248227886e-03f, +6.322909003e-04f, +1.268783605e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.902523501e-04f, -2.898340401e-03f, -4.231349334e-03f, +1.420068765e-02f, +6.162346114e-03f, -3.018813445e-02f, -6.749935475e-04f, +3.711224759e-02f, -8.045944567e-03f, -2.781837277e-02f, +1.027565222e-02f, +1.187297823e-02f, -5.208427069e-03f, -2.074240730e-03f, +0.000000000e+00f, +0.000000000e+00f, -9.129372137e-06f, +2.099357034e-04f, -2.862363067e-04f, -5.446973254e-04f, +1.098614544e-03f, +4.734211408e-04f, -1.877678504e-03f, +1.627936759e-04f, +1.802172594e-03f, -7.085417387e-04f, -9.556137271e-04f, +6.164173868e-04f, +2.024810993e-04f, -2.012967661e-04f, +0.000000000e+00f, /* 11,31 (16) */ +0.000000000e+00f, -9.148032848e-04f, -1.736174949e-03f, +1.396729325e-02f, +6.972251279e-03f, -6.555388609e-02f, -1.069802136e-02f, +3.127384455e-01f, +5.208478006e-01f, +2.898751581e-01f, -2.297816653e-02f, -6.155613474e-02f, +9.746396564e-03f, +1.273775278e-02f, -2.051863505e-03f, +0.000000000e+00f, +0.000000000e+00f, +8.574656972e-05f, -1.683933560e-04f, -6.079254793e-04f, +1.433209217e-03f, +1.942910092e-03f, -6.303087054e-03f, -1.138382183e-02f, +2.538811153e-04f, +1.147946560e-02f, +5.977058112e-03f, -2.054841261e-03f, -1.340936069e-03f, +6.216149968e-04f, +1.472952004e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.811229779e-04f, -2.688404697e-03f, -4.517585640e-03f, +1.365599032e-02f, +7.260960658e-03f, -2.971471331e-02f, -2.552672051e-03f, +3.727504127e-02f, -6.243771973e-03f, -2.852691451e-02f, +9.320038489e-03f, +1.248939562e-02f, -5.005945970e-03f, -2.275537496e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.346620625e-05f, +2.078822347e-04f, -2.581574779e-04f, -5.713413495e-04f, +1.053408101e-03f, +5.546741618e-04f, -1.858153918e-03f, +5.432457122e-05f, +1.832946003e-03f, -6.331246402e-04f, -1.005669730e-03f, +5.952533556e-04f, +2.302028513e-04f, -2.049849662e-04f, +0.000000000e+00f, /* 12, 0 (16) */ +0.000000000e+00f, -4.385090767e-03f, +8.583624654e-03f, +2.149010947e-02f, -5.529660724e-02f, -4.616114756e-02f, +2.969437977e-01f, +5.584310476e-01f, +2.969437977e-01f, -4.616114756e-02f, -5.529660724e-02f, +2.149010947e-02f, +8.583624654e-03f, -4.385090767e-03f, -2.613999434e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.768976579e-05f, -8.518178481e-04f, +7.456827132e-04f, +3.060510991e-03f, -5.343933472e-03f, -1.331241160e-02f, -3.082056865e-04f, +1.324197575e-02f, +5.748412892e-03f, -2.996318192e-03f, -8.618678673e-04f, +8.660829573e-04f, -3.948887869e-05f, -7.228036347e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.385090767e-03f, -8.116893231e-03f, -8.922865569e-04f, +2.202328737e-02f, -2.110190956e-02f, -1.394485664e-02f, +3.732936584e-02f, -1.394485664e-02f, -2.110190956e-02f, +2.202328737e-02f, -8.922865569e-04f, -8.116893231e-03f, +3.333012858e-03f, +2.613999434e-04f, +0.000000000e+00f, +0.000000000e+00f, -5.768976579e-05f, +4.395561877e-04f, -9.567603037e-04f, +2.376959244e-04f, +1.528844573e-03f, -1.937939192e-03f, -7.280146223e-05f, +2.004762733e-03f, -1.464361568e-03f, -3.326174256e-04f, +9.885505371e-04f, -4.199849082e-04f, -6.968989714e-05f, +7.228036347e-05f, +0.000000000e+00f, /* 12, 1 (16) */ +0.000000000e+00f, -4.327401002e-03f, +7.731806806e-03f, +2.223579218e-02f, -5.223609625e-02f, -5.150508103e-02f, +2.836313861e-01f, +5.581228419e-01f, +3.101857735e-01f, -4.041273467e-02f, -5.829292543e-02f, +2.062824160e-02f, +9.449707611e-03f, -4.424579646e-03f, -3.336803069e-04f, +0.000000000e+00f, +0.000000000e+00f, +7.441840558e-05f, -8.347719996e-04f, +6.318104988e-04f, +3.111679936e-03f, -4.940687470e-03f, -1.335731689e-02f, -9.239342327e-04f, +1.314587089e-02f, +6.153118587e-03f, -2.918813877e-03f, -9.800093305e-04f, +8.773665173e-04f, -1.982408569e-05f, -7.973720911e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.327401002e-03f, -7.677337043e-03f, -1.849046861e-03f, +2.226098329e-02f, -1.957306499e-02f, -1.588279583e-02f, +3.725656438e-02f, -1.194009391e-02f, -2.256627113e-02f, +2.169066994e-02f, +9.626398011e-05f, -8.536878139e-03f, +3.263322961e-03f, +3.336803069e-04f, +0.000000000e+00f, +0.000000000e+00f, -7.441840558e-05f, +4.563134437e-04f, -9.215951689e-04f, +1.435751254e-04f, +1.586203207e-03f, -1.863578082e-03f, -2.180929495e-04f, +2.063717530e-03f, -1.392953765e-03f, -4.279244817e-04f, +1.016728084e-03f, -3.976041819e-04f, -9.173925168e-05f, +7.973720911e-05f, +0.000000000e+00f, /* 12, 2 (16) */ +0.000000000e+00f, -4.252982596e-03f, +6.897034807e-03f, +2.286760268e-02f, -4.912441631e-02f, -5.644576850e-02f, +2.702740692e-01f, +5.571989077e-01f, +3.233316444e-01f, -3.425961608e-02f, -6.121173931e-02f, +1.964823227e-02f, +1.032707413e-02f, -4.444403732e-03f, -4.134175160e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.967423475e-05f, -8.151494921e-04f, +5.205856872e-04f, +3.150145112e-03f, -4.539658940e-03f, -1.337689571e-02f, -1.537616264e-03f, +1.302402520e-02f, +6.557023064e-03f, -2.827744606e-03f, -1.099728929e-03f, +8.854720214e-04f, +1.288174649e-06f, -8.724235721e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.252982596e-03f, -7.221023599e-03f, -2.770642030e-03f, +2.240455842e-02f, -1.798686178e-02f, -1.774637391e-02f, +3.703847143e-02f, -9.876376375e-03f, -2.395922489e-02f, +2.126274546e-02f, +1.112992064e-03f, -8.934482321e-03f, +3.171583709e-03f, +4.134175160e-04f, +0.000000000e+00f, +0.000000000e+00f, -8.967423475e-05f, +4.702668609e-04f, -8.833037439e-04f, +5.065945679e-05f, +1.636272318e-03f, -1.782042421e-03f, -3.624515650e-04f, +2.114505956e-03f, -1.314854568e-03f, -5.231930854e-04f, +1.041067443e-03f, -3.724337367e-04f, -1.143898470e-04f, +8.724235721e-05f, +0.000000000e+00f, /* 12, 3 (16) */ +0.000000000e+00f, -4.163308361e-03f, +6.081885314e-03f, +2.338818837e-02f, -4.597427120e-02f, -6.098542744e-02f, +2.568971735e-01f, +5.556612914e-01f, +3.363556696e-01f, -2.770259302e-02f, -6.403948391e-02f, +1.854850334e-02f, +1.121254615e-02f, -4.443115557e-03f, -5.006598732e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.034641234e-04f, -7.931566664e-04f, +4.123200544e-04f, +3.176257150e-03f, -4.141806227e-03f, -1.337141665e-02f, -2.147893981e-03f, +1.287643418e-02f, +6.959081326e-03f, -2.722892879e-03f, -1.220627670e-03f, +8.902083165e-04f, +2.382307579e-05f, -9.474674824e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.163308361e-03f, -6.750756739e-03f, -3.653945773e-03f, +2.245521787e-02f, -1.635058946e-02f, -1.952841633e-02f, +3.667601986e-02f, -7.761870419e-03f, -2.527407946e-02f, +2.073955237e-02f, +2.154059507e-03f, -9.306916058e-03f, +3.057193862e-03f, +5.006598732e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.034641234e-04f, +4.814409226e-04f, -8.421439845e-04f, -4.065915088e-05f, +1.678921589e-03f, -1.693725217e-03f, -5.052601862e-04f, +2.156865482e-03f, -1.230330450e-03f, -6.179923005e-04f, +1.061356810e-03f, -3.445087681e-04f, -1.375350439e-04f, +9.474674824e-05f, +0.000000000e+00f, /* 12, 4 (16) */ +0.000000000e+00f, -4.059844238e-03f, +5.288728648e-03f, +2.380050842e-02f, -4.279801405e-02f, -6.512723367e-02f, +2.435257569e-01f, +5.535133974e-01f, +3.492321037e-01f, -2.074351169e-02f, -6.676237679e-02f, +1.732787567e-02f, +1.210275447e-02f, -4.419292481e-03f, -5.954066215e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.158020071e-04f, -7.690011385e-04f, +3.073022708e-04f, +3.190395290e-03f, -3.748059468e-03f, -1.334121144e-02f, -2.753419381e-03f, +1.270316126e-02f, +7.358233815e-03f, -2.604078761e-03f, -1.342286574e-03f, +8.913906677e-04f, +4.774714309e-05f, -1.021983993e-04f, +0.000000000e+00f, +0.000000000e+00f, +4.059844238e-03f, -6.269315816e-03f, -4.496089758e-03f, +2.241455872e-02f, -1.467166787e-02f, -2.122214155e-02f, +3.617075968e-02f, -5.605004937e-03f, -2.650440991e-02f, +2.012156007e-02f, +3.215416316e-03f, -9.651424826e-03f, +2.919658818e-03f, +5.954066215e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.158020071e-04f, +4.898738829e-04f, -7.983816905e-04f, -1.300029546e-04f, +1.714055781e-03f, -1.599047487e-03f, -6.459088539e-04f, +2.190570068e-03f, -1.139680024e-03f, -7.118862561e-04f, +1.077399460e-03f, -3.138801756e-04f, -1.610611489e-04f, +1.021983993e-04f, +0.000000000e+00f, /* 12, 5 (16) */ +0.000000000e+00f, -3.944042231e-03f, +4.519727509e-03f, +2.410781069e-02f, -3.960761876e-02f, -6.887529314e-02f, +2.301845454e-01f, +5.507599780e-01f, +3.619352650e-01f, -1.338527788e-02f, -6.936645555e-02f, +1.598558910e-02f, +1.299414513e-02f, -4.371545338e-03f, -6.976050208e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.267084991e-04f, -7.428908444e-04f, +2.057975852e-04f, +3.192965380e-03f, -3.359318218e-03f, -1.328667344e-02f, -3.352858125e-03f, +1.250433805e-02f, +7.753409447e-03f, -2.471161414e-03f, -1.464267602e-03f, +8.888418324e-04f, +7.301802684e-05f, -1.095425711e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.944042231e-03f, -5.779441933e-03f, -5.294471448e-03f, +2.228455577e-02f, -1.295761209e-02f, -2.282118904e-02f, +3.552485082e-02f, -3.414434869e-03f, -2.764408994e-02f, +1.940967382e-02f, +4.292815776e-03f, -9.965305001e-03f, +2.758597669e-03f, +6.976050208e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.267084991e-04f, +4.956171750e-04f, -7.522889935e-04f, -2.170099927e-04f, +1.741614807e-03f, -1.498456150e-03f, -7.837975882e-04f, +2.215431384e-03f, -1.043232948e-03f, -8.044361941e-04f, +1.089015067e-03f, -2.806147185e-04f, -1.848478580e-04f, +1.095425711e-04f, +0.000000000e+00f, /* 12, 6 (16) */ +0.000000000e+00f, -3.817333732e-03f, +3.776836665e-03f, +2.431360828e-02f, -3.641465338e-02f, -7.223461136e-02f, +2.168978720e-01f, +5.474071199e-01f, +3.744396031e-01f, -5.631868430e-03f, -7.183761697e-02f, +1.452132150e-02f, +1.388298697e-02f, -4.298527311e-03f, -8.071475918e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.362104842e-04f, -7.150331173e-04f, +1.080476075e-04f, +3.184397829e-03f, -2.976449226e-03f, -1.320825590e-02f, -3.944893367e-03f, +1.228016450e-02f, +8.143528724e-03f, -2.324040518e-03f, -1.586114692e-03f, +8.823931394e-04f, +9.958431085e-05f, -1.167219582e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.817333732e-03f, -5.283824758e-03f, -6.046760442e-03f, +2.206754578e-02f, -1.121599729e-02f, -2.431964519e-02f, +3.474105324e-02f, -1.199003486e-03f, -2.868732288e-02f, +1.860523762e-02f, +5.381830843e-03f, -1.024591972e-02f, +2.573749811e-03f, +8.071475918e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.362104842e-04f, +4.987347624e-04f, -7.041428442e-04f, -3.013355759e-04f, +1.761573627e-03f, -1.392421801e-03f, -9.183391548e-04f, +2.231299853e-03f, -9.413486665e-04f, -8.952025607e-04f, +1.096040968e-03f, -2.447950865e-04f, -2.087687550e-04f, +1.167219582e-04f, +0.000000000e+00f, /* 12, 7 (16) */ +0.000000000e+00f, -3.681123248e-03f, +3.061803548e-03f, +2.442165588e-02f, -3.323025555e-02f, -7.521106058e-02f, +2.036896161e-01f, +5.434622265e-01f, +3.867197676e-01f, +2.511660294e-03f, -7.416165749e-02f, +1.293520680e-02f, +1.476538011e-02f, -4.198943001e-03f, -9.238695501e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.443406978e-04f, -6.856338003e-04f, +1.427019117e-05f, +3.165145520e-03f, -2.600284341e-03f, -1.310647006e-02f, -4.528229520e-03f, +1.203090876e-02f, +8.527506920e-03f, -2.162657576e-03f, -1.707354887e-03f, +8.718855694e-04f, +1.273853588e-04f, -1.236769037e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.681123248e-03f, -4.785089996e-03f, -6.750903286e-03f, +2.176621020e-02f, -9.454423659e-03f, -2.571206699e-02f, +3.382271408e-02f, +1.032296367e-03f, -2.962867155e-02f, +1.771003506e-02f, +6.477871811e-03f, -1.049071481e-02f, +2.364981056e-03f, +9.238695501e-04f, +0.000000000e+00f, +0.000000000e+00f, -1.443406978e-04f, +4.993024377e-04f, -6.542235037e-04f, -3.826536696e-04f, +1.773941977e-03f, -1.281436392e-03f, -1.048961769e-03f, +2.238065516e-03f, -8.344149967e-04f, -9.837471310e-04f, +1.098333359e-03f, -2.065198836e-04f, -2.326918614e-04f, +1.236769037e-04f, +0.000000000e+00f, /* 12, 8 (16) */ +0.000000000e+00f, -3.536782550e-03f, +2.376169748e-03f, +2.443592608e-02f, -3.006511003e-02f, -7.781134492e-02f, +1.905831460e-01f, +5.389339970e-01f, +3.987506763e-01f, +1.103916721e-02f, -7.632431506e-02f, +1.122785192e-02f, +1.563726568e-02f, -4.071557642e-03f, -1.047546454e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.511372927e-04f, -6.548963973e-04f, -7.534058889e-05f, +3.135681689e-03f, -2.231618570e-03f, -1.298188307e-02f, -5.101595952e-03f, +1.175690690e-02f, +8.904257323e-03f, -1.986997111e-03f, -1.827499563e-03f, +8.571708297e-04f, +1.563512002e-04f, -1.303456357e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.536782550e-03f, -4.285787558e-03f, -7.405126790e-03f, +2.138355653e-02f, -7.680481682e-03f, -2.699350338e-02f, +3.277375231e-02f, +3.270361883e-03f, -3.046308655e-02f, +1.672628793e-02f, +7.576205170e-03f, -1.069723469e-02f, +2.132289195e-03f, +1.047546454e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.511372927e-04f, +4.974070735e-04f, -6.028130504e-04f, -4.606581604e-04f, +1.778763934e-03f, -1.166010816e-03f, -1.175111724e-03f, +2.235658703e-03f, -7.228465633e-04f, -1.069635157e-03f, +1.095768412e-03f, -1.659035242e-04f, -2.564802355e-04f, +1.303456357e-04f, +0.000000000e+00f, /* 12, 9 (16) */ +0.000000000e+00f, -3.385645257e-03f, +1.721273350e-03f, +2.436058549e-02f, -2.692942834e-02f, -8.004296349e-02f, +1.776012630e-01f, +5.338324011e-01f, +4.105075832e-01f, +1.994342454e-02f, -7.831131217e-02f, +9.400352354e-03f, +1.649443651e-02f, -3.915206442e-03f, -1.177892089e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.566433956e-04f, -6.230212655e-04f, -1.606143648e-04f, +3.096497783e-03f, -1.871208295e-03f, -1.283511581e-02f, -5.663750595e-03f, +1.145856232e-02f, +9.272694527e-03f, -1.797087722e-03f, -1.946045754e-03f, +8.381124214e-04f, +1.864024591e-04f, -1.366645282e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.385645257e-03f, -3.788380484e-03f, -8.007939840e-03f, +2.092289837e-02f, -5.901717748e-03f, -2.815951420e-02f, +3.159864059e-02f, +5.506020586e-03f, -3.118593311e-02f, +1.565665278e-02f, +8.671973582e-03f, -1.086313821e-02f, +1.875808959e-03f, +1.177892089e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.566433956e-04f, +4.931458313e-04f, -5.501939069e-04f, -5.350640050e-04f, +1.776117314e-03f, -1.046672423e-03f, -1.296255929e-03f, +2.224050523e-03f, -6.070830886e-04f, -1.152437526e-03f, +1.088243314e-03f, -1.230760375e-04f, -2.799926206e-04f, +1.366645282e-04f, +0.000000000e+00f, /* 12,10 (16) */ +0.000000000e+00f, -3.229001861e-03f, +1.098252085e-03f, +2.419997112e-02f, -2.383293056e-02f, -8.191417179e-02f, +1.647661472e-01f, +5.281686505e-01f, +4.219661455e-01f, +2.921611906e-02f, -8.010839990e-02f, +7.454306600e-03f, +1.733254893e-02f, -3.728803982e-03f, -1.314556618e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.609066568e-04f, -5.902048503e-04f, -2.414043130e-04f, +3.048101298e-03f, -1.519769638e-03f, -1.266684045e-02f, -6.213483468e-03f, +1.113634503e-02f, +9.631737766e-03f, -1.593003017e-03f, -2.062477569e-03f, +8.145866919e-04f, +2.174503254e-04f, -1.425683828e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.229001861e-03f, -3.295234653e-03f, -8.558133747e-03f, +2.038783436e-02f, -4.125600433e-03f, -2.920618662e-02f, +3.030238466e-02f, +7.730071109e-03f, -3.179301620e-02f, +1.450421525e-02f, +9.760216896e-03f, -1.098621425e-02f, +1.595816339e-03f, +1.314556618e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.609066568e-04f, +4.866253339e-04f, -4.966473970e-04f, -6.056082532e-04f, +1.766112914e-03f, -9.239624617e-04f, -1.411884346e-03f, +2.203253147e-03f, -4.875875456e-04f, -1.231732925e-03f, +1.075677213e-03f, -7.818278249e-05f, -3.030841367e-04f, +1.425683828e-04f, +0.000000000e+00f, /* 12,11 (16) */ +0.000000000e+00f, -3.068095205e-03f, +5.080472344e-04f, +2.395856681e-02f, -2.078482926e-02f, -8.343394143e-02f, +1.520993067e-01f, +5.219551670e-01f, +4.331024906e-01f, +3.884785683e-02f, -8.170140291e-02f, +5.391829031e-03f, +1.814713562e-02f, -3.511353657e-03f, -1.457125001e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.639787953e-04f, -5.566389658e-04f, -3.175869031e-04f, +2.991013617e-03f, -1.177976993e-03f, -1.247777800e-02f, -6.749620078e-03f, +1.079079066e-02f, +9.980314267e-03f, -1.374862402e-03f, -2.176267689e-03f, +7.864838679e-04f, +2.493965726e-04f, -1.479907330e-04f, +0.000000000e+00f, +0.000000000e+00f, +3.068095205e-03f, -2.808609319e-03f, -9.054781144e-03f, +1.978222611e-02f, -2.359487519e-03f, -3.013014908e-02f, +2.889050031e-02f, +9.933324256e-03f, -3.228060375e-02f, +1.327248232e-02f, +1.083589411e-02f, -1.106439703e-02f, +1.292732202e-03f, +1.457125001e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.639787953e-04f, +4.779608069e-04f, -4.424523385e-04f, -6.720509461e-04f, +1.748893602e-03f, -7.984334752e-04f, -1.521512318e-03f, +2.173319910e-03f, -3.648441826e-04f, -1.307109985e-03f, +1.058012069e-03f, -3.138407093e-05f, -3.256070155e-04f, +1.479907330e-04f, +0.000000000e+00f, /* 12,12 (16) */ +0.000000000e+00f, -2.904116409e-03f, -4.859173137e-05f, +2.364097991e-02f, -1.779381564e-02f, -8.461191842e-02f, +1.396215287e-01f, +5.152055469e-01f, +4.438932812e-01f, +4.882817110e-02f, -8.307626532e-02f, +3.215561342e-03f, +1.893361949e-02f, -3.261957084e-03f, -1.605115733e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.659151412e-04f, -5.225101230e-04f, -3.890615635e-04f, +2.925767848e-03f, -8.464617203e-04f, -1.226869559e-02f, -7.271024717e-03f, +1.042249929e-02f, +1.031736263e-02f, -1.142831727e-03f, -2.286878964e-03f, +7.537090649e-04f, +2.821336218e-04f, -1.528641683e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.904116409e-03f, -2.330648512e-03f, -9.497233483e-03f, +1.911017517e-02f, -6.105939172e-04f, -3.092858256e-02f, +2.736898799e-02f, +1.210664417e-02f, -3.264544793e-02f, +1.196537234e-02f, +1.189390618e-02f, -1.109578111e-02f, +9.671251867e-04f, +1.605115733e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.659151412e-04f, +4.672751941e-04f, -3.878836788e-04f, -7.341758823e-04f, +1.724633258e-03f, -6.706466594e-04f, -1.624682761e-03f, +2.134345200e-03f, -2.393564281e-04f, -1.378169419e-03f, +1.035213400e-03f, +1.714530120e-05f, -3.474113734e-04f, +1.528641683e-04f, +0.000000000e+00f, /* 12,13 (16) */ +0.000000000e+00f, -2.738201268e-03f, -5.711018543e-04f, +2.325191834e-02f, -1.486804779e-02f, -8.545838014e-02f, +1.273528331e-01f, +5.079345222e-01f, +4.543157805e-01f, +5.914553372e-02f, -8.421909704e-02f, +9.286823783e-04f, +1.968732855e-02f, -2.979823463e-03f, -1.757979902e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.667741787e-04f, -4.879989052e-04f, -4.557502649e-04f, +2.852906664e-03f, -5.258110017e-04f, -1.204040375e-02f, -7.776603617e-03f, +1.003213403e-02f, +1.064183619e-02f, -8.971237883e-04f, -2.393766071e-03f, +7.161832671e-04f, +3.155446549e-04f, -1.571206790e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.738201268e-03f, -1.863373318e-03f, -9.885117161e-03f, +1.837599928e-02f, +1.114039340e-03f, -3.159922922e-02f, +2.574430523e-02f, +1.424098937e-02f, -3.288480436e-02f, +1.058720292e-02f, +1.292911958e-02f, -1.107863580e-02f, +6.197138133e-04f, +1.757979902e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.667741787e-04f, +4.546982540e-04f, -3.332111809e-04f, -7.917912538e-04f, +1.693535578e-03f, -5.411691939e-04f, -1.720968237e-03f, +2.086464164e-03f, -1.116446844e-04f, -1.444526114e-03f, +1.007270919e-03f, +6.721661228e-05f, -3.683460194e-04f, +1.571206790e-04f, +0.000000000e+00f, /* 12,14 (16) */ +0.000000000e+00f, -2.571427089e-03f, -1.059100760e-03f, +2.279616808e-02f, -1.201514113e-02f, -8.598419114e-02f, +1.153124294e-01f, +5.001579186e-01f, +4.643479146e-01f, +6.978736991e-02f, -8.511622083e-02f, -1.465083693e-03f, +2.040351182e-02f, -2.664278808e-03f, -1.915100581e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.666170916e-04f, -4.532793947e-04f, -5.175970275e-04f, +2.772980170e-03f, -2.165668702e-04f, -1.179375349e-02f, -8.265307979e-03f, +9.620419455e-03f, +1.095270642e-02f, -6.379986660e-04f, -2.496377269e-03f, +6.738442733e-04f, +3.495037769e-04f, -1.606920188e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.571427089e-03f, -1.408675064e-03f, -1.021832834e-02f, +1.758420803e-02f, +2.807574919e-03f, -3.214039841e-02f, +2.402333700e-02f, +1.632745353e-02f, -3.299644904e-02f, +9.142676806e-03f, +1.393639050e-02f, -1.101141919e-02f, +2.513677939e-04f, +1.915100581e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.666170916e-04f, +4.403656415e-04f, -2.786981641e-04f, -8.447301477e-04f, +1.655832748e-03f, -4.105715627e-04f, -1.809972867e-03f, +2.029852206e-03f, +1.775597749e-05f, -1.505811183e-03f, +9.741990656e-04f, +1.186278635e-04f, -3.882592950e-04f, +1.606920188e-04f, +0.000000000e+00f, /* 12,15 (16) */ +0.000000000e+00f, -2.404809998e-03f, -1.512380154e-03f, +2.227857105e-02f, -9.242160959e-03f, -8.620075801e-02f, +1.035186759e-01f, +4.918926106e-01f, +4.739683340e-01f, +8.074007633e-02f, -8.575421950e-02f, -3.961460961e-03f, +2.107735609e-02f, -2.314775031e-03f, -2.075792600e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.655073135e-04f, -4.185186487e-04f, -5.745673555e-04f, +2.686543794e-03f, +8.077459724e-05f, -1.152963333e-02f, -8.736136835e-03f, +9.188139768e-03f, +1.124896622e-02f, -3.657639165e-04f, -2.594156203e-03f, +6.266476024e-04f, +3.838762280e-04f, -1.635100847e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.404809998e-03f, -9.683094227e-04f, -1.049702651e-02f, +1.673947788e-02f, +4.463407667e-03f, -3.255096997e-02f, +2.221336413e-02f, +1.835730573e-02f, -3.297869306e-02f, +7.636865623e-03f, +1.491058956e-02f, -1.089279133e-02f, -1.368915011e-04f, +2.075792600e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.655073135e-04f, +4.244179817e-04f, -2.246003067e-04f, -8.928509148e-04f, +1.611783985e-03f, -2.794248771e-04f, -1.891334096e-03f, +1.964724298e-03f, +1.482982130e-04f, -1.561673971e-03f, +9.360374043e-04f, +1.711645148e-04f, -4.069999399e-04f, +1.635100847e-04f, +0.000000000e+00f, /* 12,16 (16) */ +0.000000000e+00f, -2.239302684e-03f, -1.930898803e-03f, +2.170400369e-02f, -6.555617165e-03f, -8.611998341e-02f, +9.198904255e-02f, +4.831564738e-01f, +4.831564738e-01f, +9.198904255e-02f, -8.611998341e-02f, -6.555617165e-03f, +2.170400369e-02f, -1.930898803e-03f, -2.239302684e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.635100847e-04f, -3.838762280e-04f, -6.266476024e-04f, +2.594156203e-03f, +3.657639165e-04f, -1.124896622e-02f, -9.188139768e-03f, +8.736136835e-03f, +1.152963333e-02f, -8.077459724e-05f, -2.686543794e-03f, +5.745673555e-04f, +4.185186487e-04f, -1.655073135e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.239302684e-03f, -5.438914410e-04f, -1.072162681e-02f, +1.584662697e-02f, +6.075191651e-03f, -3.283039485e-02f, +2.032203003e-02f, +2.032203003e-02f, -3.283039485e-02f, +6.075191651e-03f, +1.584662697e-02f, -1.072162681e-02f, -5.438914410e-04f, +2.239302684e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.635100847e-04f, +4.069999399e-04f, -1.711645148e-04f, -9.360374043e-04f, +1.561673971e-03f, -1.482982130e-04f, -1.964724298e-03f, +1.891334096e-03f, +2.794248771e-04f, -1.611783985e-03f, +8.928509148e-04f, +2.246003067e-04f, -4.244179817e-04f, +1.655073135e-04f, +0.000000000e+00f, /* 12,17 (16) */ +0.000000000e+00f, -2.075792600e-03f, -2.314775031e-03f, +2.107735609e-02f, -3.961460961e-03f, -8.575421950e-02f, +8.074007633e-02f, +4.739683340e-01f, +4.918926106e-01f, +1.035186759e-01f, -8.620075801e-02f, -9.242160959e-03f, +2.227857105e-02f, -1.512380154e-03f, -2.404809998e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.606920188e-04f, -3.495037769e-04f, -6.738442733e-04f, +2.496377269e-03f, +6.379986660e-04f, -1.095270642e-02f, -9.620419455e-03f, +8.265307979e-03f, +1.179375349e-02f, +2.165668702e-04f, -2.772980170e-03f, +5.175970275e-04f, +4.532793947e-04f, -1.666170916e-04f, +0.000000000e+00f, +0.000000000e+00f, +2.075792600e-03f, -1.368915011e-04f, -1.089279133e-02f, +1.491058956e-02f, +7.636865623e-03f, -3.297869306e-02f, +1.835730573e-02f, +2.221336413e-02f, -3.255096997e-02f, +4.463407667e-03f, +1.673947788e-02f, -1.049702651e-02f, -9.683094227e-04f, +2.404809998e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.606920188e-04f, +3.882592950e-04f, -1.186278635e-04f, -9.741990656e-04f, +1.505811183e-03f, -1.775597749e-05f, -2.029852206e-03f, +1.809972867e-03f, +4.105715627e-04f, -1.655832748e-03f, +8.447301477e-04f, +2.786981641e-04f, -4.403656415e-04f, +1.666170916e-04f, +0.000000000e+00f, /* 12,18 (16) */ +0.000000000e+00f, -1.915100581e-03f, -2.664278808e-03f, +2.040351182e-02f, -1.465083693e-03f, -8.511622083e-02f, +6.978736991e-02f, +4.643479146e-01f, +5.001579186e-01f, +1.153124294e-01f, -8.598419114e-02f, -1.201514113e-02f, +2.279616808e-02f, -1.059100760e-03f, -2.571427089e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.571206790e-04f, -3.155446549e-04f, -7.161832671e-04f, +2.393766071e-03f, +8.971237883e-04f, -1.064183619e-02f, -1.003213403e-02f, +7.776603617e-03f, +1.204040375e-02f, +5.258110017e-04f, -2.852906664e-03f, +4.557502649e-04f, +4.879989052e-04f, -1.667741787e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.915100581e-03f, +2.513677939e-04f, -1.101141919e-02f, +1.393639050e-02f, +9.142676806e-03f, -3.299644904e-02f, +1.632745353e-02f, +2.402333700e-02f, -3.214039841e-02f, +2.807574919e-03f, +1.758420803e-02f, -1.021832834e-02f, -1.408675064e-03f, +2.571427089e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.571206790e-04f, +3.683460194e-04f, -6.721661228e-05f, -1.007270919e-03f, +1.444526114e-03f, +1.116446844e-04f, -2.086464164e-03f, +1.720968237e-03f, +5.411691939e-04f, -1.693535578e-03f, +7.917912538e-04f, +3.332111809e-04f, -4.546982540e-04f, +1.667741787e-04f, +0.000000000e+00f, /* 12,19 (16) */ +0.000000000e+00f, -1.757979902e-03f, -2.979823463e-03f, +1.968732855e-02f, +9.286823783e-04f, -8.421909704e-02f, +5.914553372e-02f, +4.543157805e-01f, +5.079345222e-01f, +1.273528331e-01f, -8.545838014e-02f, -1.486804779e-02f, +2.325191834e-02f, -5.711018543e-04f, -2.738201268e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.528641683e-04f, -2.821336218e-04f, -7.537090649e-04f, +2.286878964e-03f, +1.142831727e-03f, -1.031736263e-02f, -1.042249929e-02f, +7.271024717e-03f, +1.226869559e-02f, +8.464617203e-04f, -2.925767848e-03f, +3.890615635e-04f, +5.225101230e-04f, -1.659151412e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.757979902e-03f, +6.197138133e-04f, -1.107863580e-02f, +1.292911958e-02f, +1.058720292e-02f, -3.288480436e-02f, +1.424098937e-02f, +2.574430523e-02f, -3.159922922e-02f, +1.114039340e-03f, +1.837599928e-02f, -9.885117161e-03f, -1.863373318e-03f, +2.738201268e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.528641683e-04f, +3.474113734e-04f, -1.714530120e-05f, -1.035213400e-03f, +1.378169419e-03f, +2.393564281e-04f, -2.134345200e-03f, +1.624682761e-03f, +6.706466594e-04f, -1.724633258e-03f, +7.341758823e-04f, +3.878836788e-04f, -4.672751941e-04f, +1.659151412e-04f, +0.000000000e+00f, /* 12,20 (16) */ +0.000000000e+00f, -1.605115733e-03f, -3.261957084e-03f, +1.893361949e-02f, +3.215561342e-03f, -8.307626532e-02f, +4.882817110e-02f, +4.438932812e-01f, +5.152055469e-01f, +1.396215287e-01f, -8.461191842e-02f, -1.779381564e-02f, +2.364097991e-02f, -4.859173137e-05f, -2.904116409e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.479907330e-04f, -2.493965726e-04f, -7.864838679e-04f, +2.176267689e-03f, +1.374862402e-03f, -9.980314267e-03f, -1.079079066e-02f, +6.749620078e-03f, +1.247777800e-02f, +1.177976993e-03f, -2.991013617e-03f, +3.175869031e-04f, +5.566389658e-04f, -1.639787953e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.605115733e-03f, +9.671251867e-04f, -1.109578111e-02f, +1.189390618e-02f, +1.196537234e-02f, -3.264544793e-02f, +1.210664417e-02f, +2.736898799e-02f, -3.092858256e-02f, -6.105939172e-04f, +1.911017517e-02f, -9.497233483e-03f, -2.330648512e-03f, +2.904116409e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.479907330e-04f, +3.256070155e-04f, +3.138407093e-05f, -1.058012069e-03f, +1.307109985e-03f, +3.648441826e-04f, -2.173319910e-03f, +1.521512318e-03f, +7.984334752e-04f, -1.748893602e-03f, +6.720509461e-04f, +4.424523385e-04f, -4.779608069e-04f, +1.639787953e-04f, +0.000000000e+00f, /* 12,21 (16) */ +0.000000000e+00f, -1.457125001e-03f, -3.511353657e-03f, +1.814713562e-02f, +5.391829031e-03f, -8.170140291e-02f, +3.884785683e-02f, +4.331024906e-01f, +5.219551670e-01f, +1.520993067e-01f, -8.343394143e-02f, -2.078482926e-02f, +2.395856681e-02f, +5.080472344e-04f, -3.068095205e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.425683828e-04f, -2.174503254e-04f, -8.145866919e-04f, +2.062477569e-03f, +1.593003017e-03f, -9.631737766e-03f, -1.113634503e-02f, +6.213483468e-03f, +1.266684045e-02f, +1.519769638e-03f, -3.048101298e-03f, +2.414043130e-04f, +5.902048503e-04f, -1.609066568e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.457125001e-03f, +1.292732202e-03f, -1.106439703e-02f, +1.083589411e-02f, +1.327248232e-02f, -3.228060375e-02f, +9.933324256e-03f, +2.889050031e-02f, -3.013014908e-02f, -2.359487519e-03f, +1.978222611e-02f, -9.054781144e-03f, -2.808609319e-03f, +3.068095205e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.425683828e-04f, +3.030841367e-04f, +7.818278249e-05f, -1.075677213e-03f, +1.231732925e-03f, +4.875875456e-04f, -2.203253147e-03f, +1.411884346e-03f, +9.239624617e-04f, -1.766112914e-03f, +6.056082532e-04f, +4.966473970e-04f, -4.866253339e-04f, +1.609066568e-04f, +0.000000000e+00f, /* 12,22 (16) */ +0.000000000e+00f, -1.314556618e-03f, -3.728803982e-03f, +1.733254893e-02f, +7.454306600e-03f, -8.010839990e-02f, +2.921611906e-02f, +4.219661455e-01f, +5.281686505e-01f, +1.647661472e-01f, -8.191417179e-02f, -2.383293056e-02f, +2.419997112e-02f, +1.098252085e-03f, -3.229001861e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.366645282e-04f, -1.864024591e-04f, -8.381124214e-04f, +1.946045754e-03f, +1.797087722e-03f, -9.272694527e-03f, -1.145856232e-02f, +5.663750595e-03f, +1.283511581e-02f, +1.871208295e-03f, -3.096497783e-03f, +1.606143648e-04f, +6.230212655e-04f, -1.566433956e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.314556618e-03f, +1.595816339e-03f, -1.098621425e-02f, +9.760216896e-03f, +1.450421525e-02f, -3.179301620e-02f, +7.730071109e-03f, +3.030238466e-02f, -2.920618662e-02f, -4.125600433e-03f, +2.038783436e-02f, -8.558133747e-03f, -3.295234653e-03f, +3.229001861e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.366645282e-04f, +2.799926206e-04f, +1.230760375e-04f, -1.088243314e-03f, +1.152437526e-03f, +6.070830886e-04f, -2.224050523e-03f, +1.296255929e-03f, +1.046672423e-03f, -1.776117314e-03f, +5.350640050e-04f, +5.501939069e-04f, -4.931458313e-04f, +1.566433956e-04f, +0.000000000e+00f, /* 12,23 (16) */ +0.000000000e+00f, -1.177892089e-03f, -3.915206442e-03f, +1.649443651e-02f, +9.400352354e-03f, -7.831131217e-02f, +1.994342454e-02f, +4.105075832e-01f, +5.338324011e-01f, +1.776012630e-01f, -8.004296349e-02f, -2.692942834e-02f, +2.436058549e-02f, +1.721273350e-03f, -3.385645257e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.303456357e-04f, -1.563512002e-04f, -8.571708297e-04f, +1.827499563e-03f, +1.986997111e-03f, -8.904257323e-03f, -1.175690690e-02f, +5.101595952e-03f, +1.298188307e-02f, +2.231618570e-03f, -3.135681689e-03f, +7.534058889e-05f, +6.548963973e-04f, -1.511372927e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.177892089e-03f, +1.875808959e-03f, -1.086313821e-02f, +8.671973582e-03f, +1.565665278e-02f, -3.118593311e-02f, +5.506020586e-03f, +3.159864059e-02f, -2.815951420e-02f, -5.901717748e-03f, +2.092289837e-02f, -8.007939840e-03f, -3.788380484e-03f, +3.385645257e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.303456357e-04f, +2.564802355e-04f, +1.659035242e-04f, -1.095768412e-03f, +1.069635157e-03f, +7.228465633e-04f, -2.235658703e-03f, +1.175111724e-03f, +1.166010816e-03f, -1.778763934e-03f, +4.606581604e-04f, +6.028130504e-04f, -4.974070735e-04f, +1.511372927e-04f, +0.000000000e+00f, /* 12,24 (16) */ +0.000000000e+00f, -1.047546454e-03f, -4.071557642e-03f, +1.563726568e-02f, +1.122785192e-02f, -7.632431506e-02f, +1.103916721e-02f, +3.987506763e-01f, +5.389339970e-01f, +1.905831460e-01f, -7.781134492e-02f, -3.006511003e-02f, +2.443592608e-02f, +2.376169748e-03f, -3.536782550e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.236769037e-04f, -1.273853588e-04f, -8.718855694e-04f, +1.707354887e-03f, +2.162657576e-03f, -8.527506920e-03f, -1.203090876e-02f, +4.528229520e-03f, +1.310647006e-02f, +2.600284341e-03f, -3.165145520e-03f, -1.427019117e-05f, +6.856338003e-04f, -1.443406978e-04f, +0.000000000e+00f, +0.000000000e+00f, +1.047546454e-03f, +2.132289195e-03f, -1.069723469e-02f, +7.576205170e-03f, +1.672628793e-02f, -3.046308655e-02f, +3.270361883e-03f, +3.277375231e-02f, -2.699350338e-02f, -7.680481682e-03f, +2.138355653e-02f, -7.405126790e-03f, -4.285787558e-03f, +3.536782550e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.236769037e-04f, +2.326918614e-04f, +2.065198836e-04f, -1.098333359e-03f, +9.837471310e-04f, +8.344149967e-04f, -2.238065516e-03f, +1.048961769e-03f, +1.281436392e-03f, -1.773941977e-03f, +3.826536696e-04f, +6.542235037e-04f, -4.993024377e-04f, +1.443406978e-04f, +0.000000000e+00f, /* 12,25 (16) */ +0.000000000e+00f, -9.238695501e-04f, -4.198943001e-03f, +1.476538011e-02f, +1.293520680e-02f, -7.416165749e-02f, +2.511660294e-03f, +3.867197676e-01f, +5.434622265e-01f, +2.036896161e-01f, -7.521106058e-02f, -3.323025555e-02f, +2.442165588e-02f, +3.061803548e-03f, -3.681123248e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.167219582e-04f, -9.958431085e-05f, -8.823931394e-04f, +1.586114692e-03f, +2.324040518e-03f, -8.143528724e-03f, -1.228016450e-02f, +3.944893367e-03f, +1.320825590e-02f, +2.976449226e-03f, -3.184397829e-03f, -1.080476075e-04f, +7.150331173e-04f, -1.362104842e-04f, +0.000000000e+00f, +0.000000000e+00f, +9.238695501e-04f, +2.364981056e-03f, -1.049071481e-02f, +6.477871811e-03f, +1.771003506e-02f, -2.962867155e-02f, +1.032296367e-03f, +3.382271408e-02f, -2.571206699e-02f, -9.454423659e-03f, +2.176621020e-02f, -6.750903286e-03f, -4.785089996e-03f, +3.681123248e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.167219582e-04f, +2.087687550e-04f, +2.447950865e-04f, -1.096040968e-03f, +8.952025607e-04f, +9.413486665e-04f, -2.231299853e-03f, +9.183391548e-04f, +1.392421801e-03f, -1.761573627e-03f, +3.013355759e-04f, +7.041428442e-04f, -4.987347624e-04f, +1.362104842e-04f, +0.000000000e+00f, /* 12,26 (16) */ +0.000000000e+00f, -8.071475918e-04f, -4.298527311e-03f, +1.388298697e-02f, +1.452132150e-02f, -7.183761697e-02f, -5.631868430e-03f, +3.744396031e-01f, +5.474071199e-01f, +2.168978720e-01f, -7.223461136e-02f, -3.641465338e-02f, +2.431360828e-02f, +3.776836665e-03f, -3.817333732e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.095425711e-04f, -7.301802684e-05f, -8.888418324e-04f, +1.464267602e-03f, +2.471161414e-03f, -7.753409447e-03f, -1.250433805e-02f, +3.352858125e-03f, +1.328667344e-02f, +3.359318218e-03f, -3.192965380e-03f, -2.057975852e-04f, +7.428908444e-04f, -1.267084991e-04f, +0.000000000e+00f, +0.000000000e+00f, +8.071475918e-04f, +2.573749811e-03f, -1.024591972e-02f, +5.381830843e-03f, +1.860523762e-02f, -2.868732288e-02f, -1.199003486e-03f, +3.474105324e-02f, -2.431964519e-02f, -1.121599729e-02f, +2.206754578e-02f, -6.046760442e-03f, -5.283824758e-03f, +3.817333732e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.095425711e-04f, +1.848478580e-04f, +2.806147185e-04f, -1.089015067e-03f, +8.044361941e-04f, +1.043232948e-03f, -2.215431384e-03f, +7.837975882e-04f, +1.498456150e-03f, -1.741614807e-03f, +2.170099927e-04f, +7.522889935e-04f, -4.956171750e-04f, +1.267084991e-04f, +0.000000000e+00f, /* 12,27 (16) */ +0.000000000e+00f, -6.976050208e-04f, -4.371545338e-03f, +1.299414513e-02f, +1.598558910e-02f, -6.936645555e-02f, -1.338527788e-02f, +3.619352650e-01f, +5.507599780e-01f, +2.301845454e-01f, -6.887529314e-02f, -3.960761876e-02f, +2.410781069e-02f, +4.519727509e-03f, -3.944042231e-03f, +0.000000000e+00f, +0.000000000e+00f, +1.021983993e-04f, -4.774714309e-05f, -8.913906677e-04f, +1.342286574e-03f, +2.604078761e-03f, -7.358233815e-03f, -1.270316126e-02f, +2.753419381e-03f, +1.334121144e-02f, +3.748059468e-03f, -3.190395290e-03f, -3.073022708e-04f, +7.690011385e-04f, -1.158020071e-04f, +0.000000000e+00f, +0.000000000e+00f, +6.976050208e-04f, +2.758597669e-03f, -9.965305001e-03f, +4.292815776e-03f, +1.940967382e-02f, -2.764408994e-02f, -3.414434869e-03f, +3.552485082e-02f, -2.282118904e-02f, -1.295761209e-02f, +2.228455577e-02f, -5.294471448e-03f, -5.779441933e-03f, +3.944042231e-03f, +0.000000000e+00f, +0.000000000e+00f, -1.021983993e-04f, +1.610611489e-04f, +3.138801756e-04f, -1.077399460e-03f, +7.118862561e-04f, +1.139680024e-03f, -2.190570068e-03f, +6.459088539e-04f, +1.599047487e-03f, -1.714055781e-03f, +1.300029546e-04f, +7.983816905e-04f, -4.898738829e-04f, +1.158020071e-04f, +0.000000000e+00f, /* 12,28 (16) */ +0.000000000e+00f, -5.954066215e-04f, -4.419292481e-03f, +1.210275447e-02f, +1.732787567e-02f, -6.676237679e-02f, -2.074351169e-02f, +3.492321037e-01f, +5.535133974e-01f, +2.435257569e-01f, -6.512723367e-02f, -4.279801405e-02f, +2.380050842e-02f, +5.288728648e-03f, -4.059844238e-03f, +0.000000000e+00f, +0.000000000e+00f, +9.474674824e-05f, -2.382307579e-05f, -8.902083165e-04f, +1.220627670e-03f, +2.722892879e-03f, -6.959081326e-03f, -1.287643418e-02f, +2.147893981e-03f, +1.337141665e-02f, +4.141806227e-03f, -3.176257150e-03f, -4.123200544e-04f, +7.931566664e-04f, -1.034641234e-04f, +0.000000000e+00f, +0.000000000e+00f, +5.954066215e-04f, +2.919658818e-03f, -9.651424826e-03f, +3.215416316e-03f, +2.012156007e-02f, -2.650440991e-02f, -5.605004937e-03f, +3.617075968e-02f, -2.122214155e-02f, -1.467166787e-02f, +2.241455872e-02f, -4.496089758e-03f, -6.269315816e-03f, +4.059844238e-03f, +0.000000000e+00f, +0.000000000e+00f, -9.474674824e-05f, +1.375350439e-04f, +3.445087681e-04f, -1.061356810e-03f, +6.179923005e-04f, +1.230330450e-03f, -2.156865482e-03f, +5.052601862e-04f, +1.693725217e-03f, -1.678921589e-03f, +4.065915088e-05f, +8.421439845e-04f, -4.814409226e-04f, +1.034641234e-04f, +0.000000000e+00f, /* 12,29 (16) */ +0.000000000e+00f, -5.006598732e-04f, -4.443115557e-03f, +1.121254615e-02f, +1.854850334e-02f, -6.403948391e-02f, -2.770259302e-02f, +3.363556696e-01f, +5.556612914e-01f, +2.568971735e-01f, -6.098542744e-02f, -4.597427120e-02f, +2.338818837e-02f, +6.081885314e-03f, -4.163308361e-03f, +0.000000000e+00f, +0.000000000e+00f, +8.724235721e-05f, -1.288174649e-06f, -8.854720214e-04f, +1.099728929e-03f, +2.827744606e-03f, -6.557023064e-03f, -1.302402520e-02f, +1.537616264e-03f, +1.337689571e-02f, +4.539658940e-03f, -3.150145112e-03f, -5.205856872e-04f, +8.151494921e-04f, -8.967423475e-05f, +0.000000000e+00f, +0.000000000e+00f, +5.006598732e-04f, +3.057193862e-03f, -9.306916058e-03f, +2.154059507e-03f, +2.073955237e-02f, -2.527407946e-02f, -7.761870419e-03f, +3.667601986e-02f, -1.952841633e-02f, -1.635058946e-02f, +2.245521787e-02f, -3.653945773e-03f, -6.750756739e-03f, +4.163308361e-03f, +0.000000000e+00f, +0.000000000e+00f, -8.724235721e-05f, +1.143898470e-04f, +3.724337367e-04f, -1.041067443e-03f, +5.231930854e-04f, +1.314854568e-03f, -2.114505956e-03f, +3.624515650e-04f, +1.782042421e-03f, -1.636272318e-03f, -5.065945679e-05f, +8.833037439e-04f, -4.702668609e-04f, +8.967423475e-05f, +0.000000000e+00f, /* 12,30 (16) */ +0.000000000e+00f, -4.134175160e-04f, -4.444403732e-03f, +1.032707413e-02f, +1.964823227e-02f, -6.121173931e-02f, -3.425961608e-02f, +3.233316444e-01f, +5.571989077e-01f, +2.702740692e-01f, -5.644576850e-02f, -4.912441631e-02f, +2.286760268e-02f, +6.897034807e-03f, -4.252982596e-03f, +0.000000000e+00f, +0.000000000e+00f, +7.973720911e-05f, +1.982408569e-05f, -8.773665173e-04f, +9.800093305e-04f, +2.918813877e-03f, -6.153118587e-03f, -1.314587089e-02f, +9.239342327e-04f, +1.335731689e-02f, +4.940687470e-03f, -3.111679936e-03f, -6.318104988e-04f, +8.347719996e-04f, -7.441840558e-05f, +0.000000000e+00f, +0.000000000e+00f, +4.134175160e-04f, +3.171583709e-03f, -8.934482321e-03f, +1.112992064e-03f, +2.126274546e-02f, -2.395922489e-02f, -9.876376375e-03f, +3.703847143e-02f, -1.774637391e-02f, -1.798686178e-02f, +2.240455842e-02f, -2.770642030e-03f, -7.221023599e-03f, +4.252982596e-03f, +0.000000000e+00f, +0.000000000e+00f, -7.973720911e-05f, +9.173925168e-05f, +3.976041819e-04f, -1.016728084e-03f, +4.279244817e-04f, +1.392953765e-03f, -2.063717530e-03f, +2.180929495e-04f, +1.863578082e-03f, -1.586203207e-03f, -1.435751254e-04f, +9.215951689e-04f, -4.563134437e-04f, +7.441840558e-05f, +0.000000000e+00f, /* 12,31 (16) */ +0.000000000e+00f, -3.336803069e-04f, -4.424579646e-03f, +9.449707611e-03f, +2.062824160e-02f, -5.829292543e-02f, -4.041273467e-02f, +3.101857735e-01f, +5.581228419e-01f, +2.836313861e-01f, -5.150508103e-02f, -5.223609625e-02f, +2.223579218e-02f, +7.731806806e-03f, -4.327401002e-03f, +0.000000000e+00f, +0.000000000e+00f, +7.228036347e-05f, +3.948887869e-05f, -8.660829573e-04f, +8.618678673e-04f, +2.996318192e-03f, -5.748412892e-03f, -1.324197575e-02f, +3.082056865e-04f, +1.331241160e-02f, +5.343933472e-03f, -3.060510991e-03f, -7.456827132e-04f, +8.518178481e-04f, -5.768976579e-05f, +0.000000000e+00f, +0.000000000e+00f, +3.336803069e-04f, +3.263322961e-03f, -8.536878139e-03f, +9.626398011e-05f, +2.169066994e-02f, -2.256627113e-02f, -1.194009391e-02f, +3.725656438e-02f, -1.588279583e-02f, -1.957306499e-02f, +2.226098329e-02f, -1.849046861e-03f, -7.677337043e-03f, +4.327401002e-03f, +0.000000000e+00f, +0.000000000e+00f, -7.228036347e-05f, +6.968989714e-05f, +4.199849082e-04f, -9.885505371e-04f, +3.326174256e-04f, +1.464361568e-03f, -2.004762733e-03f, +7.280146223e-05f, +1.937939192e-03f, -1.528844573e-03f, -2.376959244e-04f, +9.567603037e-04f, -4.395561877e-04f, +5.768976579e-05f, +0.000000000e+00f, /* 13, 0 (12) */ +4.667314234e-04f, +2.059782291e-02f, -3.327331987e-02f, -6.726305712e-02f, +2.829989411e-01f, +5.957604134e-01f, +2.829989411e-01f, -6.726305712e-02f, -3.327331987e-02f, +2.059782291e-02f, +4.667314234e-04f, -1.052077910e-03f, -4.122616604e-04f, -2.110775905e-04f, +3.298206916e-03f, -3.815088899e-03f, -1.525035079e-02f, -3.810071488e-04f, +1.524673848e-02f, +4.284051325e-03f, -3.328935618e-03f, +1.266826698e-04f, +4.460980491e-04f, -1.091787758e-04f, -3.950298292e-03f, +1.359255440e-03f, +1.656242101e-02f, -2.092552594e-02f, -1.221715500e-02f, +3.732936584e-02f, -1.221715500e-02f, -2.092552594e-02f, +1.656242101e-02f, +1.359255440e-03f, -3.950298292e-03f, +4.123088596e-04f, +2.027049756e-04f, -6.325482595e-04f, +2.453987339e-04f, +1.329735890e-03f, -1.872425123e-03f, -7.050431205e-05f, +1.936185460e-03f, -1.272919965e-03f, -3.215169699e-04f, +6.562259075e-04f, -1.951957310e-04f, -6.396508586e-06f, /* 13, 1 (12) */ +5.446976298e-05f, +2.038674532e-02f, -2.997511296e-02f, -7.107814602e-02f, +2.677485903e-01f, +5.953794063e-01f, +2.982456796e-01f, -6.297900580e-02f, -3.660225549e-02f, +2.072450558e-02f, +9.128294725e-04f, -1.161256685e-03f, -3.784585558e-04f, -2.897846701e-04f, +3.255255062e-03f, -3.354484262e-03f, -1.522089498e-02f, -1.142027182e-03f, +1.520958842e-02f, +4.760164822e-03f, -3.346738359e-03f, +3.671875380e-05f, +4.797623354e-04f, -1.115633374e-04f, -3.747593316e-03f, +7.267071801e-04f, +1.680781975e-02f, -1.959579005e-02f, -1.408958012e-02f, +3.725886153e-02f, -1.028096954e-02f, -2.219844591e-02f, +1.624090404e-02f, +2.015481347e-03f, -4.145494023e-03f, +4.059123510e-04f, +2.085845515e-04f, -6.068231235e-04f, +1.703636618e-04f, +1.380000724e-03f, -1.801595605e-03f, -2.112080461e-04f, +1.992539666e-03f, -1.209699291e-03f, -3.983827397e-04f, +6.776518272e-04f, -1.860167439e-04f, -1.343995169e-05f, /* 13, 2 (12) */ -3.239887928e-04f, +2.009696065e-02f, -2.671985789e-02f, -7.443263029e-02f, +2.525276953e-01f, +5.942373791e-01f, +3.134552680e-01f, -5.821884098e-02f, -3.994899385e-02f, +2.076122433e-02f, +1.392591808e-03f, -1.272820023e-03f, -3.448826313e-04f, -3.627180567e-04f, +3.200804569e-03f, -2.903386621e-03f, -1.515893813e-02f, -1.900067829e-03f, +1.513853115e-02f, +5.242168496e-03f, -3.350937692e-03f, -5.866148612e-05f, +5.130382847e-04f, -1.131016723e-04f, -3.539008765e-03f, +1.198840566e-04f, +1.697818341e-02f, -1.821578933e-02f, -1.589117572e-02f, +3.704765348e-02f, -8.288429870e-03f, -2.340814520e-02f, +1.584252131e-02f, +2.693133174e-03f, -4.331510767e-03f, +3.924723993e-04f, +2.128828168e-04f, -5.792588735e-04f, +9.673397891e-05f, +1.423601243e-03f, -1.724063779e-03f, -3.509985769e-04f, +2.041182561e-03f, -1.140253075e-03f, -4.756484828e-04f, +6.966272125e-04f, -1.751368193e-04f, -2.101743717e-05f, /* 13, 3 (12) */ -6.688714241e-04f, +1.973424259e-02f, -2.351905333e-02f, -7.733601691e-02f, +2.373687572e-01f, +5.923373113e-01f, +3.285937991e-01f, -5.297667248e-02f, -4.329993154e-02f, +2.070256285e-02f, +1.905630093e-03f, -1.385921695e-03f, -3.117157438e-04f, -4.298239302e-04f, +3.135597999e-03f, -2.462884638e-03f, -1.506514186e-02f, -2.653154167e-03f, +1.503329967e-02f, +5.728750876e-03f, -3.340885179e-03f, -1.592708602e-04f, +5.456995484e-04f, -1.137119681e-04f, -3.326125948e-03f, -4.593748169e-04f, +1.707491739e-02f, -1.679218809e-02f, -1.761523950e-02f, +3.669665491e-02f, -6.247247309e-03f, -2.454839827e-02f, +1.536687282e-02f, +3.389760387e-03f, -4.506647586e-03f, +3.714549621e-04f, +2.156557882e-04f, -5.500667276e-04f, +2.481713253e-05f, +1.460457427e-03f, -1.640224450e-03f, -4.892719846e-04f, +2.081842445e-03f, -1.064792956e-03f, -5.529562791e-04f, +7.129599965e-04f, -1.625341969e-04f, -2.910137426e-05f, /* 13, 4 (12) */ -9.805871679e-04f, +1.930441866e-02f, -2.038345533e-02f, -7.979890154e-02f, +2.223036153e-01f, +5.896841571e-01f, +3.436270988e-01f, -4.724792160e-02f, -4.664081672e-02f, +2.054329199e-02f, +2.451329641e-03f, -1.499633663e-03f, -2.791272556e-04f, -4.910794196e-04f, +3.060392336e-03f, -2.034003686e-03f, -1.494025893e-02f, -3.399328234e-03f, +1.489373133e-02f, +6.218553791e-03f, -3.315965017e-03f, -2.648871138e-04f, +5.775104921e-04f, -1.133140058e-04f, -3.110470160e-03f, -1.009441545e-03f, +1.709973452e-02f, -1.533173066e-02f, -1.925546395e-02f, +3.620738292e-02f, -4.165404864e-03f, -2.561319123e-02f, +1.481391654e-02f, +4.102720383e-03f, -4.669181783e-03f, +3.423535879e-04f, +2.169664862e-04f, -5.194594773e-04f, -4.509547366e-05f, +1.490522365e-03f, -1.550498232e-03f, -6.254316455e-04f, +2.114282635e-03f, -9.835624004e-04f, -6.299395067e-04f, +7.264661526e-04f, -1.481970653e-04f, -3.765856183e-05f, /* 13, 5 (12) */ -1.259714424e-03f, +1.881333924e-02f, -1.732306299e-02f, -8.183290523e-02f, +2.073633564e-01f, +5.862848289e-01f, +3.585208301e-01f, -4.102936781e-02f, -4.995678174e-02f, +2.027840487e-02f, +3.028840133e-03f, -1.612947669e-03f, -2.472736694e-04f, -5.464914084e-04f, +2.975955388e-03f, -1.617703411e-03f, -1.478512959e-02f, -4.136655713e-03f, +1.471976944e-02f, +6.710176499e-03f, -3.275597609e-03f, -3.752525352e-04f, +6.082271138e-04f, -1.118298311e-04f, -2.893503673e-03f, -1.528901022e-03f, +1.705463905e-02f, -1.384120829e-02f, -2.080596219e-02f, +3.558195128e-02f, -2.051122229e-03f, -2.659675363e-02f, +1.418397704e-02f, +4.829186536e-03f, -4.817378848e-03f, +3.046950260e-04f, +2.168842588e-04f, -4.876502430e-04f, -1.127296324e-04f, +1.513781996e-03f, -1.455329316e-03f, -7.588910977e-04f, +2.138302843e-03f, -8.968359192e-04f, -7.062245809e-04f, +7.369709832e-04f, -1.321240280e-04f, -4.665017954e-05f, /* 13, 6 (12) */ -1.506988093e-03f, +1.826684783e-02f, -1.434710760e-02f, -8.345060864e-02f, +1.925782268e-01f, +5.821481731e-01f, +3.732405996e-01f, -3.431919132e-02f, -5.323237935e-02f, +1.990315234e-02f, +3.637067247e-03f, -1.724777500e-03f, -2.162983549e-04f, -5.960952367e-04f, +2.883062253e-03f, -1.214875599e-03f, -1.460067770e-02f, -4.863232522e-03f, +1.451146435e-02f, +7.202180058e-03f, -3.219243078e-03f, -4.900737240e-04f, +6.375980530e-04f, -1.091844442e-04f, -2.676619415e-03f, -2.016551265e-03f, +1.694190942e-02f, -1.232742630e-02f, -2.226129150e-02f, +3.482306018e-02f, +8.718061384e-05f, -2.749358955e-02f, +1.347775246e-02f, +5.566157519e-03f, -4.949502876e-03f, +2.580448465e-04f, +2.154840876e-04f, -4.548512623e-04f, -1.778293686e-04f, +1.530254679e-03f, -1.355183132e-03f, -8.890768524e-04f, +2.153740373e-03f, -8.049181191e-04f, -7.814327649e-04f, +7.443103889e-04f, -1.143245190e-04f, -5.603182102e-05f, /* 13, 7 (12) */ -1.723286448e-03f, +1.767075260e-02f, -1.146404535e-02f, -8.466548424e-02f, +1.779775491e-01f, +5.772849406e-01f, +3.877520639e-01f, -2.711701126e-02f, -5.645162242e-02f, +1.941307861e-02f, +4.274665300e-03f, -1.833961944e-03f, -1.863313626e-04f, -6.399533126e-04f, +2.782491851e-03f, -8.263423637e-04f, -1.438790645e-02f, -5.577191289e-03f, +1.426897428e-02f, +7.693091924e-03f, -3.146404707e-03f, -6.090215279e-04f, +6.653656857e-04f, -1.053065026e-04f, -2.461135327e-03f, -2.471402527e-03f, +1.676408005e-02f, -1.079717162e-02f, -2.361647463e-02f, +3.393398333e-02f, +2.240920987e-03f, -2.829850767e-02f, +1.269631969e-02f, +6.310467908e-03f, -5.063827395e-03f, +2.020130255e-04f, +2.128458812e-04f, -4.212727168e-04f, -2.401578552e-04f, +1.539990607e-03f, -1.250543921e-03f, -1.015431139e-03f, +2.160471134e-03f, -7.081425809e-04f, -8.551820431e-04f, +7.483321095e-04f, -9.481916130e-05f, -6.575357007e-05f, /* 13, 8 (12) */ -1.909617810e-03f, +1.703079929e-02f, -8.681553498e-03f, -8.549182660e-02f, +1.635896427e-01f, +5.717077493e-01f, +4.020210382e-01f, -1.942391933e-02f, -5.959802713e-02f, +1.880405709e-02f, +4.940030986e-03f, -1.939268447e-03f, -1.574893238e-04f, -6.781536393e-04f, +2.675023529e-03f, -4.528546356e-04f, -1.414789389e-02f, -6.276707676e-03f, +1.399256560e-02f, +8.181410760e-03f, -3.056632268e-03f, -7.317311509e-04f, +6.912673055e-04f, -1.001290353e-04f, -2.248289446e-03f, -2.892675244e-03f, +1.652392219e-02f, -9.257181012e-03f, -2.486701855e-02f, +3.291855219e-02f, +4.401392120e-03f, -2.900665025e-02f, +1.184113765e-02f, +7.058800017e-03f, -5.158646556e-03f, +1.362594554e-04f, +2.090537622e-04f, -3.871216046e-04f, -2.994982043e-04f, +1.543071053e-03f, -1.141912228e-03f, -1.137414565e-03f, +2.158410463e-03f, -6.068705757e-04f, -9.270890492e-04f, +7.488969293e-04f, -7.364006599e-05f, -7.576012094e-05f, /* 13, 9 (12) */ -2.067107134e-03f, +1.635264565e-02f, -6.006529970e-03f, -8.594468124e-02f, +1.494417488e-01f, +5.654310417e-01f, +4.160136038e-01f, -1.124250857e-02f, -6.265465940e-02f, +1.807232594e-02f, +5.631298291e-03f, -2.039397482e-03f, -1.298754343e-04f, -7.108082717e-04f, +2.561433778e-03f, -9.509098033e-05f, -1.388178823e-02f, -6.960006524e-03f, +1.368261284e-02f, +8.665611439e-03f, -2.949525249e-03f, -8.578024405e-04f, +7.150363840e-04f, -9.359016142e-05f, -2.039235684e-03f, -3.279796849e-03f, +1.622442399e-02f, -7.714109959e-03f, -2.600893078e-02f, +3.178113762e-02f, +6.559802583e-03f, -2.961352082e-02f, +1.091404860e-02f, +7.807696947e-03f, -5.232286622e-03f, +6.049933448e-05f, +2.041953504e-04f, -3.526006638e-04f, -3.556541343e-04f, +1.539607480e-03f, -1.029802339e-03f, -1.254508685e-03f, +2.147513754e-03f, -5.014896212e-04f, -9.967710368e-04f, +7.458798377e-04f, -5.083106712e-05f, -8.599094342e-05f, /* 13,10 (12) */ -2.196982568e-03f, +1.564183737e-02f, -3.445096192e-03f, -8.603977222e-02f, +1.355599605e-01f, +5.584710351e-01f, +4.296962167e-01f, -2.576897136e-03f, -6.560418465e-02f, +1.721452350e-02f, +6.346334675e-03f, -2.132987644e-03f, -1.035795163e-04f, -7.380517100e-04f, +2.442493044e-03f, +2.463432767e-04f, -1.359080291e-02f, -7.625367814e-03f, +1.333959818e-02f, +9.144150220e-03f, -2.824735942e-03f, -9.868003555e-04f, +7.364039095e-04f, -8.563381123e-05f, -1.835040333e-03f, -3.632397512e-03f, +1.586876985e-02f, -6.174502479e-03f, -2.703873312e-02f, +3.052662894e-02f, +8.707316338e-03f, -3.011501045e-02f, +9.917277561e-03f, +8.553576784e-03f, -5.283117689e-03f, -2.549160894e-05f, +1.983610502e-04f, -3.179073510e-04f, -4.084505094e-04f, +1.529740495e-03f, -9.147396575e-04f, -1.366218456e-03f, +2.127776888e-03f, -3.924118856e-04f, -1.063847884e-03f, +7.391711375e-04f, -2.644788973e-05f, -9.638049292e-05f, /* 13,11 (12) */ -2.300562085e-03f, +1.490378566e-02f, -1.002603147e-03f, -8.579342894e-02f, +1.219691576e-01f, +5.508456673e-01f, +4.430358148e-01f, +6.567253084e-03f, -6.842892059e-02f, +1.622772314e-02f, +7.082738584e-03f, -2.218621455e-03f, -7.867815891e-05f, -7.600392416e-04f, +2.318962671e-03f, +5.709166087e-04f, -1.327621148e-02f, -8.271132396e-03f, +1.296411057e-02f, +9.615470084e-03f, -2.681972387e-03f, -1.118255620e-03f, +7.550997970e-04f, -7.621044297e-05f, -1.636679283e-03f, -3.950304863e-03f, +1.546031934e-02f, -4.644761985e-03f, -2.795347278e-02f, +2.916041048e-02f, +1.083509323e-02f, -3.050742233e-02f, +8.853429677e-03f, +9.292747922e-03f, -5.309565579e-03f, -1.218721019e-04f, +1.916433438e-04f, -2.832328815e-04f, -4.577337520e-04f, +1.513638670e-03f, -7.972580578e-04f, -1.472074572e-03f, +2.099236453e-03f, -2.800724448e-04f, -1.127944121e-03f, +7.286774941e-04f, -5.582472163e-07f, -1.068584657e-04f, /* 13,12 (12) */ -2.379240244e-03f, +1.414374642e-02f, +1.316359524e-03f, -8.522251234e-02f, +1.086929461e-01f, +5.425745349e-01f, +4.559999254e-01f, +1.618272317e-02f, -7.111089298e-02f, +1.510946752e-02f, +7.837838381e-03f, -2.294831898e-03f, -5.523492886e-05f, -7.769452423e-04f, +2.191591966e-03f, +8.781715374e-04f, -1.293934225e-02f, -8.895707478e-03f, +1.255684449e-02f, +1.007800620e-02f, -2.521001147e-03f, -1.251665564e-03f, +7.708543661e-04f, -6.527775164e-05f, -1.445035939e-03f, -4.233537745e-03f, +1.500258559e-02f, -3.131123314e-03f, -2.875073084e-02f, +2.768833591e-02f, +1.293432968e-02f, -3.078749478e-02f, +7.725485557e-03f, +1.002142542e-02f, -5.310123826e-03f, -2.287305676e-04f, +1.841360964e-04f, -2.487613335e-04f, -5.033721282e-04f, +1.491497241e-03f, -6.778972102e-04f, -1.571635666e-03f, +2.061969768e-03f, -1.649274018e-04f, -1.188690968e-03f, +7.143229162e-04f, +2.675813412e-05f, -1.173500990e-04f, /* 13,13 (12) */ -2.434475173e-03f, +1.336680118e-02f, +3.507951490e-03f, -8.434434080e-02f, +9.575360390e-02f, +5.336788274e-01f, +4.685567699e-01f, +2.626072937e-02f, -7.363189412e-02f, +1.385780196e-02f, +8.608692748e-03f, -2.360109649e-03f, -3.330065123e-05f, -7.889614458e-04f, +2.061115410e-03f, +1.167724577e-03f, -1.258157294e-02f, -9.497571855e-03f, +1.211859820e-02f, +1.053019151e-02f, -2.341649902e-03f, -1.386495152e-03f, +7.833998794e-04f, -5.280136448e-05f, -1.260899843e-03f, -4.482299078e-03f, +1.449921346e-02f, -1.639626073e-03f, -2.942862805e-02f, +2.611670024e-02f, +1.499629945e-02f, -3.095242218e-02f, +6.536794588e-03f, +1.073574833e-02f, -5.283365692e-03f, -3.460806666e-04f, +1.759338775e-04f, -2.146688219e-04f, -5.452559065e-04f, +1.463536678e-03f, -5.571999031e-04f, -1.664490364e-03f, +2.016094696e-03f, -4.745187593e-05f, -1.245728378e-03f, +6.960496621e-04f, +5.540956598e-05f, -1.277765152e-04f, /* 13,14 (12) */ -2.467775824e-03f, +1.257783973e-02f, +5.569066900e-03f, -8.317661622e-02f, +8.317203096e-02f, +5.241812556e-01f, +4.806753681e-01f, +3.679092087e-02f, -7.597354403e-02f, +1.247130680e-02f, +9.392092627e-03f, -2.412911014e-03f, -1.291375314e-05f, -7.962951917e-04f, +1.928250023e-03f, +1.439265878e-03f, -1.220432505e-02f, -1.007528085e-02f, +1.165027166e-02f, +1.097046239e-02f, -2.143809849e-03f, -1.522178203e-03f, +7.924721368e-04f, -3.875551810e-05f, -1.084965965e-03f, -4.696967900e-03f, +1.395395756e-02f, -1.760893956e-04f, -2.998582795e-02f, +2.445220988e-02f, +1.701239414e-02f, -3.099987405e-02f, +5.291066210e-03f, +1.143179799e-02f, -5.227956126e-03f, -4.738571818e-04f, +1.671313016e-04f, -1.811227425e-04f, -5.832973933e-04f, +1.430001151e-03f, -4.357093718e-04f, -1.750259188e-03f, +1.961769251e-03f, +7.186212692e-05f, -1.298707061e-03f, +6.738190635e-04f, +8.529252613e-05f, -1.380551095e-04f, /* 13,15 (12) */ -2.480689577e-03f, +1.178154454e-02f, +7.497316922e-03f, -8.173735034e-02f, +7.096770591e-02f, +5.141059747e-01f, +4.923256397e-01f, +4.776138327e-02f, -7.811735387e-02f, +1.094912860e-02f, +1.018456476e-02f, -2.451666532e-03f, +5.899333034e-06f, -7.991676621e-04f, +1.793692879e-03f, +1.692558582e-03f, -1.180905820e-02f, -1.062747093e-02f, +1.115286407e-02f, +1.139726444e-02f, -1.927437888e-03f, -1.658118799e-03f, +7.978121172e-04f, -2.312371193e-05f, -9.178346638e-04f, -4.878090643e-03f, +1.337066016e-02f, +1.253911755e-03f, -3.042153732e-02f, +2.270195069e-02f, +1.897416339e-02f, -3.092801193e-02f, +3.992359149e-03f, +1.210561706e-02f, -5.142663600e-03f, -6.119122913e-04f, +1.578223934e-04f, -1.482810923e-04f, -6.174308449e-04f, +1.391156898e-03f, -3.139666497e-04f, -1.828596289e-03f, +1.899191006e-03f, +1.925079550e-04f, -1.347290496e-03f, +6.476122611e-04f, +1.162918651e-04f, -1.480999791e-04f, /* 13,16 (12) */ -2.474790244e-03f, +1.098237688e-02f, +9.291009802e-03f, -8.004479176e-02f, +5.915864770e-02f, +5.034785038e-01f, +5.034785038e-01f, +5.915864770e-02f, -8.004479176e-02f, +9.291009802e-03f, +1.098237688e-02f, -2.474790244e-03f, +2.312371193e-05f, -7.978121172e-04f, +1.658118799e-03f, +1.927437888e-03f, -1.139726444e-02f, -1.115286407e-02f, +1.062747093e-02f, +1.180905820e-02f, -1.692558582e-03f, -1.793692879e-03f, +7.991676621e-04f, -5.899333034e-06f, -7.600122705e-04f, -5.026371735e-03f, +1.275322932e-02f, +2.645068653e-03f, -3.073550397e-02f, +2.087335440e-02f, +2.087335440e-02f, -3.073550397e-02f, +2.645068653e-03f, +1.275322932e-02f, -5.026371735e-03f, -7.600122705e-04f, +1.480999791e-04f, -1.162918651e-04f, -6.476122611e-04f, +1.347290496e-03f, -1.925079550e-04f, -1.899191006e-03f, +1.828596289e-03f, +3.139666497e-04f, -1.391156898e-03f, +6.174308449e-04f, +1.482810923e-04f, -1.578223934e-04f, /* 13,17 (12) */ -2.451666532e-03f, +1.018456476e-02f, +1.094912860e-02f, -7.811735387e-02f, +4.776138327e-02f, +4.923256397e-01f, +5.141059747e-01f, +7.096770591e-02f, -8.173735034e-02f, +7.497316922e-03f, +1.178154454e-02f, -2.480689577e-03f, +3.875551810e-05f, -7.924721368e-04f, +1.522178203e-03f, +2.143809849e-03f, -1.097046239e-02f, -1.165027166e-02f, +1.007528085e-02f, +1.220432505e-02f, -1.439265878e-03f, -1.928250023e-03f, +7.962951917e-04f, +1.291375314e-05f, -6.119122913e-04f, -5.142663600e-03f, +1.210561706e-02f, +3.992359149e-03f, -3.092801193e-02f, +1.897416339e-02f, +2.270195069e-02f, -3.042153732e-02f, +1.253911755e-03f, +1.337066016e-02f, -4.878090643e-03f, -9.178346638e-04f, +1.380551095e-04f, -8.529252613e-05f, -6.738190635e-04f, +1.298707061e-03f, -7.186212692e-05f, -1.961769251e-03f, +1.750259188e-03f, +4.357093718e-04f, -1.430001151e-03f, +5.832973933e-04f, +1.811227425e-04f, -1.671313016e-04f, /* 13,18 (12) */ -2.412911014e-03f, +9.392092627e-03f, +1.247130680e-02f, -7.597354403e-02f, +3.679092087e-02f, +4.806753681e-01f, +5.241812556e-01f, +8.317203096e-02f, -8.317661622e-02f, +5.569066900e-03f, +1.257783973e-02f, -2.467775824e-03f, +5.280136448e-05f, -7.833998794e-04f, +1.386495152e-03f, +2.341649902e-03f, -1.053019151e-02f, -1.211859820e-02f, +9.497571855e-03f, +1.258157294e-02f, -1.167724577e-03f, -2.061115410e-03f, +7.889614458e-04f, +3.330065123e-05f, -4.738571818e-04f, -5.227956126e-03f, +1.143179799e-02f, +5.291066210e-03f, -3.099987405e-02f, +1.701239414e-02f, +2.445220988e-02f, -2.998582795e-02f, -1.760893956e-04f, +1.395395756e-02f, -4.696967900e-03f, -1.084965965e-03f, +1.277765152e-04f, -5.540956598e-05f, -6.960496621e-04f, +1.245728378e-03f, +4.745187593e-05f, -2.016094696e-03f, +1.664490364e-03f, +5.571999031e-04f, -1.463536678e-03f, +5.452559065e-04f, +2.146688219e-04f, -1.759338775e-04f, /* 13,19 (12) */ -2.360109649e-03f, +8.608692748e-03f, +1.385780196e-02f, -7.363189412e-02f, +2.626072937e-02f, +4.685567699e-01f, +5.336788274e-01f, +9.575360390e-02f, -8.434434080e-02f, +3.507951490e-03f, +1.336680118e-02f, -2.434475173e-03f, +6.527775164e-05f, -7.708543661e-04f, +1.251665564e-03f, +2.521001147e-03f, -1.007800620e-02f, -1.255684449e-02f, +8.895707478e-03f, +1.293934225e-02f, -8.781715374e-04f, -2.191591966e-03f, +7.769452423e-04f, +5.523492886e-05f, -3.460806666e-04f, -5.283365692e-03f, +1.073574833e-02f, +6.536794588e-03f, -3.095242218e-02f, +1.499629945e-02f, +2.611670024e-02f, -2.942862805e-02f, -1.639626073e-03f, +1.449921346e-02f, -4.482299078e-03f, -1.260899843e-03f, +1.173500990e-04f, -2.675813412e-05f, -7.143229162e-04f, +1.188690968e-03f, +1.649274018e-04f, -2.061969768e-03f, +1.571635666e-03f, +6.778972102e-04f, -1.491497241e-03f, +5.033721282e-04f, +2.487613335e-04f, -1.841360964e-04f, /* 13,20 (12) */ -2.294831898e-03f, +7.837838381e-03f, +1.510946752e-02f, -7.111089298e-02f, +1.618272317e-02f, +4.559999254e-01f, +5.425745349e-01f, +1.086929461e-01f, -8.522251234e-02f, +1.316359524e-03f, +1.414374642e-02f, -2.379240244e-03f, +7.621044297e-05f, -7.550997970e-04f, +1.118255620e-03f, +2.681972387e-03f, -9.615470084e-03f, -1.296411057e-02f, +8.271132396e-03f, +1.327621148e-02f, -5.709166087e-04f, -2.318962671e-03f, +7.600392416e-04f, +7.867815891e-05f, -2.287305676e-04f, -5.310123826e-03f, +1.002142542e-02f, +7.725485557e-03f, -3.078749478e-02f, +1.293432968e-02f, +2.768833591e-02f, -2.875073084e-02f, -3.131123314e-03f, +1.500258559e-02f, -4.233537745e-03f, -1.445035939e-03f, +1.068584657e-04f, +5.582472163e-07f, -7.286774941e-04f, +1.127944121e-03f, +2.800724448e-04f, -2.099236453e-03f, +1.472074572e-03f, +7.972580578e-04f, -1.513638670e-03f, +4.577337520e-04f, +2.832328815e-04f, -1.916433438e-04f, /* 13,21 (12) */ -2.218621455e-03f, +7.082738584e-03f, +1.622772314e-02f, -6.842892059e-02f, +6.567253084e-03f, +4.430358148e-01f, +5.508456673e-01f, +1.219691576e-01f, -8.579342894e-02f, -1.002603147e-03f, +1.490378566e-02f, -2.300562085e-03f, +8.563381123e-05f, -7.364039095e-04f, +9.868003555e-04f, +2.824735942e-03f, -9.144150220e-03f, -1.333959818e-02f, +7.625367814e-03f, +1.359080291e-02f, -2.463432767e-04f, -2.442493044e-03f, +7.380517100e-04f, +1.035795163e-04f, -1.218721019e-04f, -5.309565579e-03f, +9.292747922e-03f, +8.853429677e-03f, -3.050742233e-02f, +1.083509323e-02f, +2.916041048e-02f, -2.795347278e-02f, -4.644761985e-03f, +1.546031934e-02f, -3.950304863e-03f, -1.636679283e-03f, +9.638049292e-05f, +2.644788973e-05f, -7.391711375e-04f, +1.063847884e-03f, +3.924118856e-04f, -2.127776888e-03f, +1.366218456e-03f, +9.147396575e-04f, -1.529740495e-03f, +4.084505094e-04f, +3.179073510e-04f, -1.983610502e-04f, /* 13,22 (12) */ -2.132987644e-03f, +6.346334675e-03f, +1.721452350e-02f, -6.560418465e-02f, -2.576897136e-03f, +4.296962167e-01f, +5.584710351e-01f, +1.355599605e-01f, -8.603977222e-02f, -3.445096192e-03f, +1.564183737e-02f, -2.196982568e-03f, +9.359016142e-05f, -7.150363840e-04f, +8.578024405e-04f, +2.949525249e-03f, -8.665611439e-03f, -1.368261284e-02f, +6.960006524e-03f, +1.388178823e-02f, +9.509098033e-05f, -2.561433778e-03f, +7.108082717e-04f, +1.298754343e-04f, -2.549160894e-05f, -5.283117689e-03f, +8.553576784e-03f, +9.917277561e-03f, -3.011501045e-02f, +8.707316338e-03f, +3.052662894e-02f, -2.703873312e-02f, -6.174502479e-03f, +1.586876985e-02f, -3.632397512e-03f, -1.835040333e-03f, +8.599094342e-05f, +5.083106712e-05f, -7.458798377e-04f, +9.967710368e-04f, +5.014896212e-04f, -2.147513754e-03f, +1.254508685e-03f, +1.029802339e-03f, -1.539607480e-03f, +3.556541343e-04f, +3.526006638e-04f, -2.041953504e-04f, /* 13,23 (12) */ -2.039397482e-03f, +5.631298291e-03f, +1.807232594e-02f, -6.265465940e-02f, -1.124250857e-02f, +4.160136038e-01f, +5.654310417e-01f, +1.494417488e-01f, -8.594468124e-02f, -6.006529970e-03f, +1.635264565e-02f, -2.067107134e-03f, +1.001290353e-04f, -6.912673055e-04f, +7.317311509e-04f, +3.056632268e-03f, -8.181410760e-03f, -1.399256560e-02f, +6.276707676e-03f, +1.414789389e-02f, +4.528546356e-04f, -2.675023529e-03f, +6.781536393e-04f, +1.574893238e-04f, +6.049933448e-05f, -5.232286622e-03f, +7.807696947e-03f, +1.091404860e-02f, -2.961352082e-02f, +6.559802583e-03f, +3.178113762e-02f, -2.600893078e-02f, -7.714109959e-03f, +1.622442399e-02f, -3.279796849e-03f, -2.039235684e-03f, +7.576012094e-05f, +7.364006599e-05f, -7.488969293e-04f, +9.270890492e-04f, +6.068705757e-04f, -2.158410463e-03f, +1.137414565e-03f, +1.141912228e-03f, -1.543071053e-03f, +2.994982043e-04f, +3.871216046e-04f, -2.090537622e-04f, /* 13,24 (12) */ -1.939268447e-03f, +4.940030986e-03f, +1.880405709e-02f, -5.959802713e-02f, -1.942391933e-02f, +4.020210382e-01f, +5.717077493e-01f, +1.635896427e-01f, -8.549182660e-02f, -8.681553498e-03f, +1.703079929e-02f, -1.909617810e-03f, +1.053065026e-04f, -6.653656857e-04f, +6.090215279e-04f, +3.146404707e-03f, -7.693091924e-03f, -1.426897428e-02f, +5.577191289e-03f, +1.438790645e-02f, +8.263423637e-04f, -2.782491851e-03f, +6.399533126e-04f, +1.863313626e-04f, +1.362594554e-04f, -5.158646556e-03f, +7.058800017e-03f, +1.184113765e-02f, -2.900665025e-02f, +4.401392120e-03f, +3.291855219e-02f, -2.486701855e-02f, -9.257181012e-03f, +1.652392219e-02f, -2.892675244e-03f, -2.248289446e-03f, +6.575357007e-05f, +9.481916130e-05f, -7.483321095e-04f, +8.551820431e-04f, +7.081425809e-04f, -2.160471134e-03f, +1.015431139e-03f, +1.250543921e-03f, -1.539990607e-03f, +2.401578552e-04f, +4.212727168e-04f, -2.128458812e-04f, /* 13,25 (12) */ -1.833961944e-03f, +4.274665300e-03f, +1.941307861e-02f, -5.645162242e-02f, -2.711701126e-02f, +3.877520639e-01f, +5.772849406e-01f, +1.779775491e-01f, -8.466548424e-02f, -1.146404535e-02f, +1.767075260e-02f, -1.723286448e-03f, +1.091844442e-04f, -6.375980530e-04f, +4.900737240e-04f, +3.219243078e-03f, -7.202180058e-03f, -1.451146435e-02f, +4.863232522e-03f, +1.460067770e-02f, +1.214875599e-03f, -2.883062253e-03f, +5.960952367e-04f, +2.162983549e-04f, +2.020130255e-04f, -5.063827395e-03f, +6.310467908e-03f, +1.269631969e-02f, -2.829850767e-02f, +2.240920987e-03f, +3.393398333e-02f, -2.361647463e-02f, -1.079717162e-02f, +1.676408005e-02f, -2.471402527e-03f, -2.461135327e-03f, +5.603182102e-05f, +1.143245190e-04f, -7.443103889e-04f, +7.814327649e-04f, +8.049181191e-04f, -2.153740373e-03f, +8.890768524e-04f, +1.355183132e-03f, -1.530254679e-03f, +1.778293686e-04f, +4.548512623e-04f, -2.154840876e-04f, /* 13,26 (12) */ -1.724777500e-03f, +3.637067247e-03f, +1.990315234e-02f, -5.323237935e-02f, -3.431919132e-02f, +3.732405996e-01f, +5.821481731e-01f, +1.925782268e-01f, -8.345060864e-02f, -1.434710760e-02f, +1.826684783e-02f, -1.506988093e-03f, +1.118298311e-04f, -6.082271138e-04f, +3.752525352e-04f, +3.275597609e-03f, -6.710176499e-03f, -1.471976944e-02f, +4.136655713e-03f, +1.478512959e-02f, +1.617703411e-03f, -2.975955388e-03f, +5.464914084e-04f, +2.472736694e-04f, +2.580448465e-04f, -4.949502876e-03f, +5.566157519e-03f, +1.347775246e-02f, -2.749358955e-02f, +8.718061384e-05f, +3.482306018e-02f, -2.226129150e-02f, -1.232742630e-02f, +1.694190942e-02f, -2.016551265e-03f, -2.676619415e-03f, +4.665017954e-05f, +1.321240280e-04f, -7.369709832e-04f, +7.062245809e-04f, +8.968359192e-04f, -2.138302843e-03f, +7.588910977e-04f, +1.455329316e-03f, -1.513781996e-03f, +1.127296324e-04f, +4.876502430e-04f, -2.168842588e-04f, /* 13,27 (12) */ -1.612947669e-03f, +3.028840133e-03f, +2.027840487e-02f, -4.995678174e-02f, -4.102936781e-02f, +3.585208301e-01f, +5.862848289e-01f, +2.073633564e-01f, -8.183290523e-02f, -1.732306299e-02f, +1.881333924e-02f, -1.259714424e-03f, +1.133140058e-04f, -5.775104921e-04f, +2.648871138e-04f, +3.315965017e-03f, -6.218553791e-03f, -1.489373133e-02f, +3.399328234e-03f, +1.494025893e-02f, +2.034003686e-03f, -3.060392336e-03f, +4.910794196e-04f, +2.791272556e-04f, +3.046950260e-04f, -4.817378848e-03f, +4.829186536e-03f, +1.418397704e-02f, -2.659675363e-02f, -2.051122229e-03f, +3.558195128e-02f, -2.080596219e-02f, -1.384120829e-02f, +1.705463905e-02f, -1.528901022e-03f, -2.893503673e-03f, +3.765856183e-05f, +1.481970653e-04f, -7.264661526e-04f, +6.299395067e-04f, +9.835624004e-04f, -2.114282635e-03f, +6.254316455e-04f, +1.550498232e-03f, -1.490522365e-03f, +4.509547366e-05f, +5.194594773e-04f, -2.169664862e-04f, /* 13,28 (12) */ -1.499633663e-03f, +2.451329641e-03f, +2.054329199e-02f, -4.664081672e-02f, -4.724792160e-02f, +3.436270988e-01f, +5.896841571e-01f, +2.223036153e-01f, -7.979890154e-02f, -2.038345533e-02f, +1.930441866e-02f, -9.805871679e-04f, +1.137119681e-04f, -5.456995484e-04f, +1.592708602e-04f, +3.340885179e-03f, -5.728750876e-03f, -1.503329967e-02f, +2.653154167e-03f, +1.506514186e-02f, +2.462884638e-03f, -3.135597999e-03f, +4.298239302e-04f, +3.117157438e-04f, +3.423535879e-04f, -4.669181783e-03f, +4.102720383e-03f, +1.481391654e-02f, -2.561319123e-02f, -4.165404864e-03f, +3.620738292e-02f, -1.925546395e-02f, -1.533173066e-02f, +1.709973452e-02f, -1.009441545e-03f, -3.110470160e-03f, +2.910137426e-05f, +1.625341969e-04f, -7.129599965e-04f, +5.529562791e-04f, +1.064792956e-03f, -2.081842445e-03f, +4.892719846e-04f, +1.640224450e-03f, -1.460457427e-03f, -2.481713253e-05f, +5.500667276e-04f, -2.156557882e-04f, /* 13,29 (12) */ -1.385921695e-03f, +1.905630093e-03f, +2.070256285e-02f, -4.329993154e-02f, -5.297667248e-02f, +3.285937991e-01f, +5.923373113e-01f, +2.373687572e-01f, -7.733601691e-02f, -2.351905333e-02f, +1.973424259e-02f, -6.688714241e-04f, +1.131016723e-04f, -5.130382847e-04f, +5.866148612e-05f, +3.350937692e-03f, -5.242168496e-03f, -1.513853115e-02f, +1.900067829e-03f, +1.515893813e-02f, +2.903386621e-03f, -3.200804569e-03f, +3.627180567e-04f, +3.448826313e-04f, +3.714549621e-04f, -4.506647586e-03f, +3.389760387e-03f, +1.536687282e-02f, -2.454839827e-02f, -6.247247309e-03f, +3.669665491e-02f, -1.761523950e-02f, -1.679218809e-02f, +1.707491739e-02f, -4.593748169e-04f, -3.326125948e-03f, +2.101743717e-05f, +1.751368193e-04f, -6.966272125e-04f, +4.756484828e-04f, +1.140253075e-03f, -2.041182561e-03f, +3.509985769e-04f, +1.724063779e-03f, -1.423601243e-03f, -9.673397891e-05f, +5.792588735e-04f, -2.128828168e-04f, /* 13,30 (12) */ -1.272820023e-03f, +1.392591808e-03f, +2.076122433e-02f, -3.994899385e-02f, -5.821884098e-02f, +3.134552680e-01f, +5.942373791e-01f, +2.525276953e-01f, -7.443263029e-02f, -2.671985789e-02f, +2.009696065e-02f, -3.239887928e-04f, +1.115633374e-04f, -4.797623354e-04f, -3.671875380e-05f, +3.346738359e-03f, -4.760164822e-03f, -1.520958842e-02f, +1.142027182e-03f, +1.522089498e-02f, +3.354484262e-03f, -3.255255062e-03f, +2.897846701e-04f, +3.784585558e-04f, +3.924723993e-04f, -4.331510767e-03f, +2.693133174e-03f, +1.584252131e-02f, -2.340814520e-02f, -8.288429870e-03f, +3.704765348e-02f, -1.589117572e-02f, -1.821578933e-02f, +1.697818341e-02f, +1.198840566e-04f, -3.539008765e-03f, +1.343995169e-05f, +1.860167439e-04f, -6.776518272e-04f, +3.983827397e-04f, +1.209699291e-03f, -1.992539666e-03f, +2.112080461e-04f, +1.801595605e-03f, -1.380000724e-03f, -1.703636618e-04f, +6.068231235e-04f, -2.085845515e-04f, /* 13,31 (12) */ -1.161256685e-03f, +9.128294725e-04f, +2.072450558e-02f, -3.660225549e-02f, -6.297900580e-02f, +2.982456796e-01f, +5.953794063e-01f, +2.677485903e-01f, -7.107814602e-02f, -2.997511296e-02f, +2.038674532e-02f, +5.446976298e-05f, +1.091787758e-04f, -4.460980491e-04f, -1.266826698e-04f, +3.328935618e-03f, -4.284051325e-03f, -1.524673848e-02f, +3.810071488e-04f, +1.525035079e-02f, +3.815088899e-03f, -3.298206916e-03f, +2.110775905e-04f, +4.122616604e-04f, +4.059123510e-04f, -4.145494023e-03f, +2.015481347e-03f, +1.624090404e-02f, -2.219844591e-02f, -1.028096954e-02f, +3.725886153e-02f, -1.408958012e-02f, -1.959579005e-02f, +1.680781975e-02f, +7.267071801e-04f, -3.747593316e-03f, +6.396508586e-06f, +1.951957310e-04f, -6.562259075e-04f, +3.215169699e-04f, +1.272919965e-03f, -1.936185460e-03f, +7.050431205e-05f, +1.872425123e-03f, -1.329735890e-03f, -2.453987339e-04f, +6.325482595e-04f, -2.027049756e-04f, /* 14, 0 (12) */ -3.483566868e-03f, +2.195707835e-02f, -1.671089886e-02f, -8.818858307e-02f, +2.707817861e-01f, +6.330897793e-01f, +2.707817861e-01f, -8.818858307e-02f, -1.671089886e-02f, +2.195707835e-02f, -3.483566868e-03f, -6.397690500e-04f, -2.095566848e-04f, -8.436258499e-04f, +3.543605650e-03f, -2.485353009e-03f, -1.712277592e-02f, -4.515114608e-04f, +1.718292394e-02f, +3.011131360e-03f, -3.650452588e-03f, +7.829085773e-04f, +2.509023181e-04f, -1.155752844e-04f, -2.786478503e-03f, -3.384442003e-03f, +1.860961494e-02f, -1.609625641e-02f, -1.593698094e-02f, +3.732936584e-02f, -1.593698094e-02f, -1.609625641e-02f, +1.860961494e-02f, -3.384442003e-03f, -2.786478503e-03f, +7.162108030e-04f, +2.877351700e-04f, -5.205013231e-04f, -1.552916331e-04f, +1.621475507e-03f, -1.858124495e-03f, -7.900112358e-05f, +1.943254627e-03f, -1.581791628e-03f, +7.451458378e-05f, +5.621608250e-04f, -2.920940404e-04f, +4.492956993e-05f, /* 14, 1 (12) */ -3.693123553e-03f, +2.111345250e-02f, -1.316729321e-02f, -9.067393607e-02f, +2.536590102e-01f, +6.326382678e-01f, +2.879647100e-01f, -8.517745171e-02f, -2.036135145e-02f, +2.273998693e-02f, -3.232664550e-03f, -7.553443344e-04f, -1.698740044e-04f, -8.966077936e-04f, +3.425618724e-03f, -1.974483539e-03f, -1.702249058e-02f, -1.353235228e-03f, +1.720212808e-02f, +3.550465531e-03f, -3.745121099e-03f, +7.143705810e-04f, +2.937455915e-04f, -1.250032891e-04f, -2.498743333e-03f, -3.904943326e-03f, +1.845432331e-02f, -1.447478090e-02f, -1.779510544e-02f, +3.725036472e-02f, -1.399372632e-02f, -1.767804803e-02f, +1.868412953e-02f, -2.822281178e-03f, -3.078572543e-03f, +7.611403730e-04f, +2.818251726e-04f, -4.778498449e-04f, -2.330186866e-04f, +1.652961485e-03f, -1.765331581e-03f, -2.366256669e-04f, +2.020246759e-03f, -1.533967754e-03f, -8.969655050e-06f, +6.025480632e-04f, -2.947864381e-04f, +4.119965783e-05f, /* 14, 2 (12) */ -3.862997557e-03f, +2.021684471e-02f, -9.741674484e-03f, -9.264841961e-02f, +2.366365196e-01f, +6.312850326e-01f, +3.051668381e-01f, -8.162698617e-02f, -2.410647254e-02f, +2.345435751e-02f, -2.938918959e-03f, -8.803476234e-04f, -1.319998145e-04f, -9.419769302e-04f, +3.297538548e-03f, -1.479785379e-03f, -1.688300191e-02f, -2.251066406e-03f, +1.717971371e-02f, +4.101915421e-03f, -3.826586174e-03f, +6.379657263e-04f, +3.379014654e-04f, -1.341191095e-04f, -2.216918160e-03f, -4.382793171e-03f, +1.822130462e-02f, -1.282181941e-02f, -1.956043702e-02f, +3.701373905e-02f, -1.197347956e-02f, -1.921201579e-02f, +1.867515987e-02f, -2.219733115e-03f, -3.373358981e-03f, +8.023400308e-04f, +2.744845839e-04f, -4.344828754e-04f, -3.073778285e-04f, +1.676234961e-03f, -1.665386148e-03f, -3.931190910e-04f, +2.088663505e-03f, -1.478105414e-03f, -9.479479793e-05f, +6.413805850e-04f, -2.957032450e-04f, +3.666633283e-05f, /* 14, 3 (12) */ -3.994997372e-03f, +1.927486778e-02f, -6.444135936e-03f, -9.412820499e-02f, +2.197535177e-01f, +6.290339662e-01f, +3.223465518e-01f, -7.752507075e-02f, -2.793305872e-02f, +2.409232323e-02f, -2.601017493e-03f, -1.014466733e-03f, -9.605995565e-05f, -9.798906578e-04f, +3.160415132e-03f, -1.002427212e-03f, -1.670536631e-02f, -3.142426152e-03f, +1.711514211e-02f, +4.663957920e-03f, -3.893841458e-03f, +5.536891363e-04f, +3.831653515e-04f, -1.428133424e-04f, -1.942433576e-03f, -4.817276046e-03f, +1.791392679e-02f, -1.114558445e-02f, -2.122582317e-02f, +3.662061996e-02f, -9.884816051e-03f, -2.069012120e-02f, +1.858036507e-02f, -1.578352530e-03f, -3.669062226e-03f, +8.390063636e-04f, +2.658380941e-04f, -3.906715309e-04f, -3.780772691e-04f, +1.691324078e-03f, -1.558830532e-03f, -5.477339459e-04f, +2.148107906e-03f, -1.414349844e-03f, -1.825726615e-04f, +6.783754690e-04f, -2.947425992e-04f, +3.131430453e-05f, /* 14, 4 (12) */ -4.091057328e-03f, +1.829497712e-02f, -3.283720804e-03f, -9.513063220e-02f, +2.030481514e-01f, +6.258915400e-01f, +3.394616939e-01f, -7.286111283e-02f, -3.182690018e-02f, +2.464601237e-02f, -2.217852142e-03f, -1.157280075e-03f, -6.216076941e-05f, -1.010538897e-03f, +3.015296862e-03f, -5.434813215e-04f, -1.649075716e-02f, -4.024759880e-03f, +1.700801397e-02f, +5.234991390e-03f, -3.945904524e-03f, +4.615790388e-04f, +4.293134268e-04f, -1.509725676e-04f, -1.676595482e-03f, -5.207947577e-03f, +1.753584952e-02f, -9.454260375e-03f, -2.278465370e-02f, +3.607288601e-02f, -7.736708145e-03f, -2.210447105e-02f, +1.839779241e-02f, -8.999770607e-04f, -3.963804825e-03f, +8.703206682e-04f, +2.560135196e-04f, -3.466800695e-04f, -4.448524013e-04f, +1.698298923e-03f, -1.446236031e-03f, -6.997326862e-04f, +2.198225824e-03f, -1.342889811e-03f, -2.718949091e-04f, +7.132510745e-04f, -2.918109105e-04f, +2.513456335e-05f, /* 14, 5 (12) */ -4.153218097e-03f, +1.728443822e-02f, -2.684239422e-04f, -9.567411352e-02f, +1.865573942e-01f, +6.218667801e-01f, +3.564697079e-01f, -6.762612144e-02f, -3.577280470e-02f, +2.510759141e-02f, -1.788538715e-03f, -1.308252643e-03f, -3.038941061e-05f, -1.034141651e-03f, +2.863225755e-03f, -1.039214152e-04f, -1.624045891e-02f, -4.895546810e-03f, +1.685807228e-02f, +5.813340580e-03f, -3.981822189e-03f, +3.617184481e-04f, +4.761030859e-04f, -1.584800107e-04f, -1.420581962e-03f, -5.554627647e-03f, +1.709099712e-02f, -7.755961452e-03f, -2.423088973e-02f, +3.537315333e-02f, -5.538482321e-03f, -2.344736086e-02f, +1.812589750e-02f, -1.867259862e-04f, -4.255615736e-03f, +8.954552315e-04f, +2.451407895e-04f, -3.027644889e-04f, -5.074666744e-04f, +1.697270512e-03f, -1.328199640e-03f, -8.483915534e-04f, +2.238708105e-03f, -1.263957192e-03f, -3.623349518e-04f, +7.457288302e-04f, -2.868238523e-04f, +1.812476249e-05f, /* 14, 6 (12) */ -4.183607508e-03f, +1.625029657e-02f, +2.594801813e-03f, -9.577803494e-02f, +1.703169353e-01f, +6.169712333e-01f, +3.733277802e-01f, -6.181278086e-02f, -3.975462689e-02f, +2.546930986e-02f, -1.312435629e-03f, -1.466732654e-03f, -8.142673220e-07f, -1.050946499e-03f, +2.705232885e-03f, +3.153790798e-04f, -1.595586084e-02f, -5.752309374e-03f, +1.666520473e-02f, +6.397261939e-03f, -4.000675843e-03f, +2.542366648e-04f, +5.232735340e-04f, -1.652162652e-04f, -1.175441173e-03f, -5.857392136e-03f, +1.658353045e-02f, -6.058690940e-03f, -2.555908937e-02f, +3.452476177e-02f, -3.299774216e-03f, -2.471131805e-02f, +1.776356255e-02f, +5.590028440e-04f, -4.542439588e-03f, +9.135799940e-04f, +2.333509534e-04f, -2.591712155e-04f, -5.657122833e-04f, +1.688389547e-03f, -1.205340678e-03f, -9.930043805e-04f, +2.269292511e-03f, -1.177826303e-03f, -4.534499955e-04f, +7.755350544e-04f, -2.797073241e-04f, +1.028956101e-05f, /* 14, 7 (12) */ -4.184421775e-03f, +1.519935007e-02f, +5.300034698e-03f, -9.546265586e-02f, +1.543610745e-01f, +6.112189239e-01f, +3.899929849e-01f, -5.541551893e-02f, -4.375530273e-02f, +2.572354652e-02f, -7.891620951e-04f, -1.631948919e-03f, +2.651451868e-05f, -1.061226029e-03f, +2.542333996e-03f, +7.136482429e-04f, -1.563845037e-02f, -6.592622428e-03f, +1.642944541e-02f, +6.984949343e-03f, -4.001586750e-03f, +1.393105816e-04f, +5.705465244e-04f, -1.710600727e-04f, -9.420902195e-04f, -6.116563351e-03f, +1.601781816e-02f, -4.370301393e-03f, -2.676443005e-02f, +3.353175739e-02f, -1.030481705e-03f, -2.588914435e-02f, +1.731011255e-02f, +1.334537898e-03f, -4.822146912e-03f, +9.238695550e-04f, +2.207752179e-04f, -2.161358931e-04f, -6.194106731e-04f, +1.671844972e-03f, -1.078297313e-03f, -1.132886295e-03f, +2.289765401e-03f, -1.084812977e-03f, -5.447832259e-04f, +8.024027933e-04f, -2.703983748e-04f, +1.640924043e-06f, /* 14, 8 (12) */ -4.157907256e-03f, +1.413812404e-02f, +7.842368693e-03f, -9.474900762e-02f, +1.387226241e-01f, +6.046263015e-01f, +4.064224303e-01f, -4.843056958e-02f, -4.775688948e-02f, +2.586285710e-02f, -2.186155707e-04f, -1.803008991e-03f, +5.156443831e-05f, -1.065275244e-03f, +2.375525325e-03f, +1.090216417e-03f, -1.528980612e-02f, -7.414122240e-03f, +1.615097606e-02f, +7.574540184e-03f, -3.983721317e-03f, +1.716577841e-05f, +6.176272395e-04f, -1.758891562e-04f, -7.213150016e-04f, -6.332699244e-03f, +1.539840749e-02f, -2.698456421e-03f, -2.784272736e-02f, +3.239887110e-02f, +1.259283696e-03f, -2.697395733e-02f, +1.676532933e-02f, +2.136940692e-03f, -5.092545287e-03f, +9.255104791e-04f, +2.075440164e-04f, -1.738822750e-04f, -6.684128596e-04f, +1.647862332e-03f, -9.477230128e-04f, -1.267377302e-03f, +2.299963153e-03f, -9.852733917e-04f, -6.358661197e-04f, +8.260736675e-04f, -2.588460809e-04f, -7.801624059e-06f, /* 14, 9 (12) */ -4.106342818e-03f, +1.307284880e-02f, +1.021789402e-02f, -9.365879120e-02f, +1.234328180e-01f, +5.972121793e-01f, +4.225734064e-01f, -4.085602940e-02f, -5.174061080e-02f, +2.588002288e-02f, +3.990116688e-04f, -1.978898148e-03f, +7.431991612e-05f, -1.063408936e-03f, +2.205779643e-03f, +1.444516500e-03f, -1.491159057e-02f, -8.214515209e-03f, +1.583012660e-02f, +8.164121817e-03f, -3.946296285e-03f, -1.119226028e-04f, +6.642053169e-04f, -1.795811048e-04f, -5.137709852e-04f, -6.506581519e-03f, +1.472999463e-02f, -1.050594090e-03f, -2.879045037e-02f, +3.113149380e-02f, +3.559246850e-03f, -2.795923072e-02f, +1.612946321e-02f, +2.963014359e-03f, -5.351391368e-03f, +9.177088550e-04f, +1.937861184e-04f, -1.326212247e-04f, -7.125995664e-04f, +1.616701951e-03f, -8.142829350e-04f, -1.395845724e-03f, +2.299773314e-03f, -8.796026607e-04f, -7.262208694e-04f, +8.462997143e-04f, -2.450123702e-04f, -1.801079715e-05f, /* 14,10 (12) */ -4.032022902e-03f, +1.200943986e-02f, +1.242367366e-02f, -9.221427470e-02f, +1.085212274e-01f, +5.889976641e-01f, +4.384035330e-01f, -3.269190758e-02f, -5.568690709e-02f, +2.576810028e-02f, +1.063216986e-03f, -2.158479252e-03f, +9.478153387e-05f, -1.055959061e-03f, +2.034042535e-03f, +1.776083771e-03f, -1.450554257e-02f, -8.991586271e-03f, +1.546737506e-02f, +8.751738335e-03f, -3.888583826e-03f, -2.476292181e-04f, +7.099560197e-04f, -1.820143042e-04f, -3.199848669e-04f, -6.639202744e-03f, +1.401739507e-02f, +5.661078616e-04f, -2.960473331e-02f, +2.973564807e-02f, +5.859020164e-03f, -2.883883338e-02f, +1.540324234e-02f, +3.809314073e-03f, -5.596403738e-03f, +8.996980578e-04f, +1.796277841e-04f, -9.254982940e-05f, -7.518811835e-04f, +1.578656937e-03f, -6.786502876e-04f, -1.517691483e-03f, +2.289135474e-03f, -7.682331800e-04f, -8.153629108e-04f, +8.628452127e-04f, -2.288727852e-04f, -2.895139895e-05f, /* 14,11 (12) */ -3.937241368e-03f, +1.095348080e-02f, +1.445771620e-02f, -9.043819093e-02f, +9.401568484e-02f, +5.800060778e-01f, +4.538709081e-01f, -2.394016925e-02f, -5.957549091e-02f, +2.552047106e-02f, +1.773173005e-03f, -2.340493557e-03f, +1.129651849e-04f, -1.043272123e-03f, +1.861228919e-03f, +2.084555279e-03f, -1.407346953e-02f, -9.743206968e-03f, +1.506334703e-02f, +9.335397639e-03f, -3.809916508e-03f, -3.895781260e-04f, +7.545415498e-04f, -1.830689087e-04f, -1.403570827e-04f, -6.731752573e-03f, +1.326551388e-02f, +2.144764798e-03f, -3.028338360e-02f, +2.821795659e-02f, +8.148155638e-03f, -2.960706656e-02f, +1.458787943e-02f, +4.672159286e-03f, -5.825276523e-03f, +8.707466589e-04f, +1.651919677e-04f, -5.385062770e-05f, -7.861975489e-04f, +1.534051030e-03f, -5.415026718e-04f, -1.632349197e-03f, +2.268041857e-03f, -6.516327482e-04f, -9.028035375e-04f, +8.754884812e-04f, -2.104171770e-04f, -4.058023191e-05f, /* 14,12 (12) */ -3.824276183e-03f, +9.910208678e-03f, +1.631894512e-02f, -8.835363565e-02f, +7.994221531e-02f, +5.702628708e-01f, +4.689342551e-01f, -1.460477161e-02f, -6.338540742e-02f, +2.513089294e-02f, +2.527714555e-03f, -2.523562465e-03f, +1.289011675e-04f, -1.025706576e-03f, +1.688219838e-03f, +2.369668778e-03f, -1.361723946e-02f, -1.046734314e-02f, +1.461881426e-02f, +9.913078798e-03f, -3.709692115e-03f, -5.373426477e-04f, +7.976125002e-04f, -1.826278507e-04f, +2.483488496e-05f, -6.785603201e-03f, +1.247931633e-02f, +3.678815829e-03f, -3.082488627e-02f, +2.658560739e-02f, +1.041619749e-02f, -3.025869931e-02f, +1.368507589e-02f, +5.547647767e-03f, -6.035693700e-03f, +8.301664270e-04f, +1.505975742e-04f, -1.669095444e-05f, -8.155175604e-04f, +1.483236316e-03f, -4.035184337e-04f, -1.739291087e-03f, +2.236537626e-03f, -5.303024628e-04f, -9.880525889e-04f, +8.840236334e-04f, -1.896503245e-04f, -5.284606617e-05f, /* 14,13 (12) */ -3.695375015e-03f, +8.884502102e-03f, +1.800716495e-02f, -8.598396687e-02f, +6.632497585e-02f, +5.597955277e-01f, +4.835530693e-01f, -4.691692810e-03f, -6.709509954e-02f, +2.459355029e-02f, +3.325327055e-03f, -2.706190316e-03f, +1.426332262e-04f, -1.003630268e-03f, +1.515859504e-03f, +2.631261254e-03f, -1.313877285e-02f, -1.116206222e-02f, +1.413469289e-02f, +1.048273963e-02f, -3.587378280e-03f, -6.904454897e-04f, +8.388094454e-04f, -1.805778797e-04f, +1.754324591e-04f, -6.802294155e-03f, +1.166379877e-02f, +5.162052144e-03f, -3.122840470e-02f, +2.484631631e-02f, +1.265273512e-02f, -3.078900177e-02f, +1.269702330e-02f, +6.431671401e-03f, -6.225344025e-03f, +7.773203608e-04f, +1.359587736e-04f, +1.877759626e-05f, -8.398386216e-04f, +1.426590804e-03f, -2.653730447e-04f, -1.838029668e-03f, +2.194720887e-03f, -4.047744056e-04f, -1.070621198e-03f, +8.882622810e-04f, -1.665924708e-04f, -6.568967103e-05f, /* 14,14 (12) */ -3.552741789e-03f, +7.880871834e-03f, +1.952302446e-02f, -8.335270562e-02f, +5.318620301e-02f, +5.486334655e-01f, +4.976877622e-01f, +5.791046820e-03f, -7.068247782e-02f, +2.390310480e-02f, +4.164136501e-03f, -2.886768196e-03f, +1.542175485e-04f, -9.774179342e-04f, +1.344952629e-03f, +2.869267029e-03f, -1.264003442e-02f, -1.182554003e-02f, +1.361204091e-02f, +1.104232452e-02f, -3.442516910e-03f, -8.483591395e-04f, +8.777646629e-04f, -1.768106276e-04f, +3.113912327e-04f, -6.783516559e-03f, +1.082396015e-02f, +6.588642948e-03f, -3.149377775e-02f, +2.300828664e-02f, +1.484745601e-02f, -3.119377618e-02f, +1.162640210e-02f, +7.319933682e-03f, -6.391936496e-03f, +7.116306898e-04f, +1.213843752e-04f, +5.241958966e-05f, -8.591859308e-04f, +1.364515909e-03f, -1.277355294e-04f, -1.928120205e-03f, +2.142742413e-03f, -2.756091257e-04f, -1.150024578e-03f, +8.880351716e-04f, -1.412797720e-04f, -7.904391072e-05f, /* 14,15 (12) */ -3.398524241e-03f, +6.903453900e-03f, +2.086797709e-02f, -8.048343859e-02f, +4.054616859e-02f, +5.368079254e-01f, +5.112998031e-01f, +1.683337134e-02f, -7.412499473e-02f, +2.305474566e-02f, +5.041901164e-03f, -3.063578823e-03f, +1.637217264e-04f, -9.474487544e-04f, +1.176262034e-03f, +3.083715479e-03f, -1.212302485e-02f, -1.245606722e-02f, +1.305205507e-02f, +1.158977239e-02f, -3.274728383e-03f, -1.010506538e-03f, +9.141039823e-04f, -1.712236910e-04f, +4.327756079e-04f, -6.731096969e-03f, +9.964774221e-03f, +7.953158857e-03f, -3.162151328e-02f, +2.108016643e-02f, +1.699019842e-02f, -3.146938530e-02f, +1.047637753e-02f, +8.207968853e-03f, -6.533216268e-03f, +6.325867791e-04f, +1.069772648e-04f, +8.411605119e-05f, -8.736116193e-04f, +1.297433827e-03f, +8.735035650e-06f, -2.009162944e-03f, +2.080805069e-03f, -1.433929362e-04f, -1.225784842e-03f, +8.831937479e-04f, -1.137646507e-04f, -9.283390635e-05f, /* 14,16 (12) */ -3.234802514e-03f, +5.956005146e-03f, +2.204423912e-02f, -7.739972311e-02f, +2.842314373e-02f, +5.243518582e-01f, +5.243518582e-01f, +2.842314373e-02f, -7.739972311e-02f, +2.204423912e-02f, +5.956005146e-03f, -3.234802514e-03f, +1.712236910e-04f, -9.141039823e-04f, +1.010506538e-03f, +3.274728383e-03f, -1.158977239e-02f, -1.305205507e-02f, +1.245606722e-02f, +1.212302485e-02f, -3.083715479e-03f, -1.176262034e-03f, +9.474487544e-04f, -1.637217264e-04f, +5.397528727e-04f, -6.646980918e-03f, +9.091162601e-03f, +9.250592684e-03f, -3.161277824e-02f, +1.907100349e-02f, +1.907100349e-02f, -3.161277824e-02f, +9.250592684e-03f, +9.091162601e-03f, -6.646980918e-03f, +5.397528727e-04f, +9.283390635e-05f, +1.137646507e-04f, -8.831937479e-04f, +1.225784842e-03f, +1.433929362e-04f, -2.080805069e-03f, +2.009162944e-03f, -8.735035650e-06f, -1.297433827e-03f, +8.736116193e-04f, -8.411605119e-05f, -1.069772648e-04f, /* 14,17 (12) */ -3.063578823e-03f, +5.041901164e-03f, +2.305474566e-02f, -7.412499473e-02f, +1.683337134e-02f, +5.112998031e-01f, +5.368079254e-01f, +4.054616859e-02f, -8.048343859e-02f, +2.086797709e-02f, +6.903453900e-03f, -3.398524241e-03f, +1.768106276e-04f, -8.777646629e-04f, +8.483591395e-04f, +3.442516910e-03f, -1.104232452e-02f, -1.361204091e-02f, +1.182554003e-02f, +1.264003442e-02f, -2.869267029e-03f, -1.344952629e-03f, +9.774179342e-04f, -1.542175485e-04f, +6.325867791e-04f, -6.533216268e-03f, +8.207968853e-03f, +1.047637753e-02f, -3.146938530e-02f, +1.699019842e-02f, +2.108016643e-02f, -3.162151328e-02f, +7.953158857e-03f, +9.964774221e-03f, -6.731096969e-03f, +4.327756079e-04f, +7.904391072e-05f, +1.412797720e-04f, -8.880351716e-04f, +1.150024578e-03f, +2.756091257e-04f, -2.142742413e-03f, +1.928120205e-03f, +1.277355294e-04f, -1.364515909e-03f, +8.591859308e-04f, -5.241958966e-05f, -1.213843752e-04f, /* 14,18 (12) */ -2.886768196e-03f, +4.164136501e-03f, +2.390310480e-02f, -7.068247782e-02f, +5.791046820e-03f, +4.976877622e-01f, +5.486334655e-01f, +5.318620301e-02f, -8.335270562e-02f, +1.952302446e-02f, +7.880871834e-03f, -3.552741789e-03f, +1.805778797e-04f, -8.388094454e-04f, +6.904454897e-04f, +3.587378280e-03f, -1.048273963e-02f, -1.413469289e-02f, +1.116206222e-02f, +1.313877285e-02f, -2.631261254e-03f, -1.515859504e-03f, +1.003630268e-03f, -1.426332262e-04f, +7.116306898e-04f, -6.391936496e-03f, +7.319933682e-03f, +1.162640210e-02f, -3.119377618e-02f, +1.484745601e-02f, +2.300828664e-02f, -3.149377775e-02f, +6.588642948e-03f, +1.082396015e-02f, -6.783516559e-03f, +3.113912327e-04f, +6.568967103e-05f, +1.665924708e-04f, -8.882622810e-04f, +1.070621198e-03f, +4.047744056e-04f, -2.194720887e-03f, +1.838029668e-03f, +2.653730447e-04f, -1.426590804e-03f, +8.398386216e-04f, -1.877759626e-05f, -1.359587736e-04f, /* 14,19 (12) */ -2.706190316e-03f, +3.325327055e-03f, +2.459355029e-02f, -6.709509954e-02f, -4.691692810e-03f, +4.835530693e-01f, +5.597955277e-01f, +6.632497585e-02f, -8.598396687e-02f, +1.800716495e-02f, +8.884502102e-03f, -3.695375015e-03f, +1.826278507e-04f, -7.976125002e-04f, +5.373426477e-04f, +3.709692115e-03f, -9.913078798e-03f, -1.461881426e-02f, +1.046734314e-02f, +1.361723946e-02f, -2.369668778e-03f, -1.688219838e-03f, +1.025706576e-03f, -1.289011675e-04f, +7.773203608e-04f, -6.225344025e-03f, +6.431671401e-03f, +1.269702330e-02f, -3.078900177e-02f, +1.265273512e-02f, +2.484631631e-02f, -3.122840470e-02f, +5.162052144e-03f, +1.166379877e-02f, -6.802294155e-03f, +1.754324591e-04f, +5.284606617e-05f, +1.896503245e-04f, -8.840236334e-04f, +9.880525889e-04f, +5.303024628e-04f, -2.236537626e-03f, +1.739291087e-03f, +4.035184337e-04f, -1.483236316e-03f, +8.155175604e-04f, +1.669095444e-05f, -1.505975742e-04f, /* 14,20 (12) */ -2.523562465e-03f, +2.527714555e-03f, +2.513089294e-02f, -6.338540742e-02f, -1.460477161e-02f, +4.689342551e-01f, +5.702628708e-01f, +7.994221531e-02f, -8.835363565e-02f, +1.631894512e-02f, +9.910208678e-03f, -3.824276183e-03f, +1.830689087e-04f, -7.545415498e-04f, +3.895781260e-04f, +3.809916508e-03f, -9.335397639e-03f, -1.506334703e-02f, +9.743206968e-03f, +1.407346953e-02f, -2.084555279e-03f, -1.861228919e-03f, +1.043272123e-03f, -1.129651849e-04f, +8.301664270e-04f, -6.035693700e-03f, +5.547647767e-03f, +1.368507589e-02f, -3.025869931e-02f, +1.041619749e-02f, +2.658560739e-02f, -3.082488627e-02f, +3.678815829e-03f, +1.247931633e-02f, -6.785603201e-03f, +2.483488496e-05f, +4.058023191e-05f, +2.104171770e-04f, -8.754884812e-04f, +9.028035375e-04f, +6.516327482e-04f, -2.268041857e-03f, +1.632349197e-03f, +5.415026718e-04f, -1.534051030e-03f, +7.861975489e-04f, +5.385062770e-05f, -1.651919677e-04f, /* 14,21 (12) */ -2.340493557e-03f, +1.773173005e-03f, +2.552047106e-02f, -5.957549091e-02f, -2.394016925e-02f, +4.538709081e-01f, +5.800060778e-01f, +9.401568484e-02f, -9.043819093e-02f, +1.445771620e-02f, +1.095348080e-02f, -3.937241368e-03f, +1.820143042e-04f, -7.099560197e-04f, +2.476292181e-04f, +3.888583826e-03f, -8.751738335e-03f, -1.546737506e-02f, +8.991586271e-03f, +1.450554257e-02f, -1.776083771e-03f, -2.034042535e-03f, +1.055959061e-03f, -9.478153387e-05f, +8.707466589e-04f, -5.825276523e-03f, +4.672159286e-03f, +1.458787943e-02f, -2.960706656e-02f, +8.148155638e-03f, +2.821795659e-02f, -3.028338360e-02f, +2.144764798e-03f, +1.326551388e-02f, -6.731752573e-03f, -1.403570827e-04f, +2.895139895e-05f, +2.288727852e-04f, -8.628452127e-04f, +8.153629108e-04f, +7.682331800e-04f, -2.289135474e-03f, +1.517691483e-03f, +6.786502876e-04f, -1.578656937e-03f, +7.518811835e-04f, +9.254982940e-05f, -1.796277841e-04f, /* 14,22 (12) */ -2.158479252e-03f, +1.063216986e-03f, +2.576810028e-02f, -5.568690709e-02f, -3.269190758e-02f, +4.384035330e-01f, +5.889976641e-01f, +1.085212274e-01f, -9.221427470e-02f, +1.242367366e-02f, +1.200943986e-02f, -4.032022902e-03f, +1.795811048e-04f, -6.642053169e-04f, +1.119226028e-04f, +3.946296285e-03f, -8.164121817e-03f, -1.583012660e-02f, +8.214515209e-03f, +1.491159057e-02f, -1.444516500e-03f, -2.205779643e-03f, +1.063408936e-03f, -7.431991612e-05f, +8.996980578e-04f, -5.596403738e-03f, +3.809314073e-03f, +1.540324234e-02f, -2.883883338e-02f, +5.859020164e-03f, +2.973564807e-02f, -2.960473331e-02f, +5.661078616e-04f, +1.401739507e-02f, -6.639202744e-03f, -3.199848669e-04f, +1.801079715e-05f, +2.450123702e-04f, -8.462997143e-04f, +7.262208694e-04f, +8.796026607e-04f, -2.299773314e-03f, +1.395845724e-03f, +8.142829350e-04f, -1.616701951e-03f, +7.125995664e-04f, +1.326212247e-04f, -1.937861184e-04f, /* 14,23 (12) */ -1.978898148e-03f, +3.990116688e-04f, +2.588002288e-02f, -5.174061080e-02f, -4.085602940e-02f, +4.225734064e-01f, +5.972121793e-01f, +1.234328180e-01f, -9.365879120e-02f, +1.021789402e-02f, +1.307284880e-02f, -4.106342818e-03f, +1.758891562e-04f, -6.176272395e-04f, -1.716577841e-05f, +3.983721317e-03f, -7.574540184e-03f, -1.615097606e-02f, +7.414122240e-03f, +1.528980612e-02f, -1.090216417e-03f, -2.375525325e-03f, +1.065275244e-03f, -5.156443831e-05f, +9.177088550e-04f, -5.351391368e-03f, +2.963014359e-03f, +1.612946321e-02f, -2.795923072e-02f, +3.559246850e-03f, +3.113149380e-02f, -2.879045037e-02f, -1.050594090e-03f, +1.472999463e-02f, -6.506581519e-03f, -5.137709852e-04f, +7.801624059e-06f, +2.588460809e-04f, -8.260736675e-04f, +6.358661197e-04f, +9.852733917e-04f, -2.299963153e-03f, +1.267377302e-03f, +9.477230128e-04f, -1.647862332e-03f, +6.684128596e-04f, +1.738822750e-04f, -2.075440164e-04f, /* 14,24 (12) */ -1.803008991e-03f, -2.186155707e-04f, +2.586285710e-02f, -4.775688948e-02f, -4.843056958e-02f, +4.064224303e-01f, +6.046263015e-01f, +1.387226241e-01f, -9.474900762e-02f, +7.842368693e-03f, +1.413812404e-02f, -4.157907256e-03f, +1.710600727e-04f, -5.705465244e-04f, -1.393105816e-04f, +4.001586750e-03f, -6.984949343e-03f, -1.642944541e-02f, +6.592622428e-03f, +1.563845037e-02f, -7.136482429e-04f, -2.542333996e-03f, +1.061226029e-03f, -2.651451868e-05f, +9.255104791e-04f, -5.092545287e-03f, +2.136940692e-03f, +1.676532933e-02f, -2.697395733e-02f, +1.259283696e-03f, +3.239887110e-02f, -2.784272736e-02f, -2.698456421e-03f, +1.539840749e-02f, -6.332699244e-03f, -7.213150016e-04f, -1.640924043e-06f, +2.703983748e-04f, -8.024027933e-04f, +5.447832259e-04f, +1.084812977e-03f, -2.289765401e-03f, +1.132886295e-03f, +1.078297313e-03f, -1.671844972e-03f, +6.194106731e-04f, +2.161358931e-04f, -2.207752179e-04f, /* 14,25 (12) */ -1.631948919e-03f, -7.891620951e-04f, +2.572354652e-02f, -4.375530273e-02f, -5.541551893e-02f, +3.899929849e-01f, +6.112189239e-01f, +1.543610745e-01f, -9.546265586e-02f, +5.300034698e-03f, +1.519935007e-02f, -4.184421775e-03f, +1.652162652e-04f, -5.232735340e-04f, -2.542366648e-04f, +4.000675843e-03f, -6.397261939e-03f, -1.666520473e-02f, +5.752309374e-03f, +1.595586084e-02f, -3.153790798e-04f, -2.705232885e-03f, +1.050946499e-03f, +8.142673220e-07f, +9.238695550e-04f, -4.822146912e-03f, +1.334537898e-03f, +1.731011255e-02f, -2.588914435e-02f, -1.030481705e-03f, +3.353175739e-02f, -2.676443005e-02f, -4.370301393e-03f, +1.601781816e-02f, -6.116563351e-03f, -9.420902195e-04f, -1.028956101e-05f, +2.797073241e-04f, -7.755350544e-04f, +4.534499955e-04f, +1.177826303e-03f, -2.269292511e-03f, +9.930043805e-04f, +1.205340678e-03f, -1.688389547e-03f, +5.657122833e-04f, +2.591712155e-04f, -2.333509534e-04f, /* 14,26 (12) */ -1.466732654e-03f, -1.312435629e-03f, +2.546930986e-02f, -3.975462689e-02f, -6.181278086e-02f, +3.733277802e-01f, +6.169712333e-01f, +1.703169353e-01f, -9.577803494e-02f, +2.594801813e-03f, +1.625029657e-02f, -4.183607508e-03f, +1.584800107e-04f, -4.761030859e-04f, -3.617184481e-04f, +3.981822189e-03f, -5.813340580e-03f, -1.685807228e-02f, +4.895546810e-03f, +1.624045891e-02f, +1.039214152e-04f, -2.863225755e-03f, +1.034141651e-03f, +3.038941061e-05f, +9.135799940e-04f, -4.542439588e-03f, +5.590028440e-04f, +1.776356255e-02f, -2.471131805e-02f, -3.299774216e-03f, +3.452476177e-02f, -2.555908937e-02f, -6.058690940e-03f, +1.658353045e-02f, -5.857392136e-03f, -1.175441173e-03f, -1.812476249e-05f, +2.868238523e-04f, -7.457288302e-04f, +3.623349518e-04f, +1.263957192e-03f, -2.238708105e-03f, +8.483915534e-04f, +1.328199640e-03f, -1.697270512e-03f, +5.074666744e-04f, +3.027644889e-04f, -2.451407895e-04f, /* 14,27 (12) */ -1.308252643e-03f, -1.788538715e-03f, +2.510759141e-02f, -3.577280470e-02f, -6.762612144e-02f, +3.564697079e-01f, +6.218667801e-01f, +1.865573942e-01f, -9.567411352e-02f, -2.684239422e-04f, +1.728443822e-02f, -4.153218097e-03f, +1.509725676e-04f, -4.293134268e-04f, -4.615790388e-04f, +3.945904524e-03f, -5.234991390e-03f, -1.700801397e-02f, +4.024759880e-03f, +1.649075716e-02f, +5.434813215e-04f, -3.015296862e-03f, +1.010538897e-03f, +6.216076941e-05f, +8.954552315e-04f, -4.255615736e-03f, -1.867259862e-04f, +1.812589750e-02f, -2.344736086e-02f, -5.538482321e-03f, +3.537315333e-02f, -2.423088973e-02f, -7.755961452e-03f, +1.709099712e-02f, -5.554627647e-03f, -1.420581962e-03f, -2.513456335e-05f, +2.918109105e-04f, -7.132510745e-04f, +2.718949091e-04f, +1.342889811e-03f, -2.198225824e-03f, +6.997326862e-04f, +1.446236031e-03f, -1.698298923e-03f, +4.448524013e-04f, +3.466800695e-04f, -2.560135196e-04f, /* 14,28 (12) */ -1.157280075e-03f, -2.217852142e-03f, +2.464601237e-02f, -3.182690018e-02f, -7.286111283e-02f, +3.394616939e-01f, +6.258915400e-01f, +2.030481514e-01f, -9.513063220e-02f, -3.283720804e-03f, +1.829497712e-02f, -4.091057328e-03f, +1.428133424e-04f, -3.831653515e-04f, -5.536891363e-04f, +3.893841458e-03f, -4.663957920e-03f, -1.711514211e-02f, +3.142426152e-03f, +1.670536631e-02f, +1.002427212e-03f, -3.160415132e-03f, +9.798906578e-04f, +9.605995565e-05f, +8.703206682e-04f, -3.963804825e-03f, -8.999770607e-04f, +1.839779241e-02f, -2.210447105e-02f, -7.736708145e-03f, +3.607288601e-02f, -2.278465370e-02f, -9.454260375e-03f, +1.753584952e-02f, -5.207947577e-03f, -1.676595482e-03f, -3.131430453e-05f, +2.947425992e-04f, -6.783754690e-04f, +1.825726615e-04f, +1.414349844e-03f, -2.148107906e-03f, +5.477339459e-04f, +1.558830532e-03f, -1.691324078e-03f, +3.780772691e-04f, +3.906715309e-04f, -2.658380941e-04f, /* 14,29 (12) */ -1.014466733e-03f, -2.601017493e-03f, +2.409232323e-02f, -2.793305872e-02f, -7.752507075e-02f, +3.223465518e-01f, +6.290339662e-01f, +2.197535177e-01f, -9.412820499e-02f, -6.444135936e-03f, +1.927486778e-02f, -3.994997372e-03f, +1.341191095e-04f, -3.379014654e-04f, -6.379657263e-04f, +3.826586174e-03f, -4.101915421e-03f, -1.717971371e-02f, +2.251066406e-03f, +1.688300191e-02f, +1.479785379e-03f, -3.297538548e-03f, +9.419769302e-04f, +1.319998145e-04f, +8.390063636e-04f, -3.669062226e-03f, -1.578352530e-03f, +1.858036507e-02f, -2.069012120e-02f, -9.884816051e-03f, +3.662061996e-02f, -2.122582317e-02f, -1.114558445e-02f, +1.791392679e-02f, -4.817276046e-03f, -1.942433576e-03f, -3.666633283e-05f, +2.957032450e-04f, -6.413805850e-04f, +9.479479793e-05f, +1.478105414e-03f, -2.088663505e-03f, +3.931190910e-04f, +1.665386148e-03f, -1.676234961e-03f, +3.073778285e-04f, +4.344828754e-04f, -2.744845839e-04f, /* 14,30 (12) */ -8.803476234e-04f, -2.938918959e-03f, +2.345435751e-02f, -2.410647254e-02f, -8.162698617e-02f, +3.051668381e-01f, +6.312850326e-01f, +2.366365196e-01f, -9.264841961e-02f, -9.741674484e-03f, +2.021684471e-02f, -3.862997557e-03f, +1.250032891e-04f, -2.937455915e-04f, -7.143705810e-04f, +3.745121099e-03f, -3.550465531e-03f, -1.720212808e-02f, +1.353235228e-03f, +1.702249058e-02f, +1.974483539e-03f, -3.425618724e-03f, +8.966077936e-04f, +1.698740044e-04f, +8.023400308e-04f, -3.373358981e-03f, -2.219733115e-03f, +1.867515987e-02f, -1.921201579e-02f, -1.197347956e-02f, +3.701373905e-02f, -1.956043702e-02f, -1.282181941e-02f, +1.822130462e-02f, -4.382793171e-03f, -2.216918160e-03f, -4.119965783e-05f, +2.947864381e-04f, -6.025480632e-04f, +8.969655050e-06f, +1.533967754e-03f, -2.020246759e-03f, +2.366256669e-04f, +1.765331581e-03f, -1.652961485e-03f, +2.330186866e-04f, +4.778498449e-04f, -2.818251726e-04f, /* 14,31 (12) */ -7.553443344e-04f, -3.232664550e-03f, +2.273998693e-02f, -2.036135145e-02f, -8.517745171e-02f, +2.879647100e-01f, +6.326382678e-01f, +2.536590102e-01f, -9.067393607e-02f, -1.316729321e-02f, +2.111345250e-02f, -3.693123553e-03f, +1.155752844e-04f, -2.509023181e-04f, -7.829085773e-04f, +3.650452588e-03f, -3.011131360e-03f, -1.718292394e-02f, +4.515114608e-04f, +1.712277592e-02f, +2.485353009e-03f, -3.543605650e-03f, +8.436258499e-04f, +2.095566848e-04f, +7.611403730e-04f, -3.078572543e-03f, -2.822281178e-03f, +1.868412953e-02f, -1.767804803e-02f, -1.399372632e-02f, +3.725036472e-02f, -1.779510544e-02f, -1.447478090e-02f, +1.845432331e-02f, -3.904943326e-03f, -2.498743333e-03f, -4.492956993e-05f, +2.920940404e-04f, -5.621608250e-04f, -7.451458378e-05f, +1.581791628e-03f, -1.943254627e-03f, +7.900112358e-05f, +1.858124495e-03f, -1.621475507e-03f, +1.552916331e-04f, +5.205013231e-04f, -2.877351700e-04f, /* 15, 0 (12) */ -6.270045371e-03f, +1.857263635e-02f, +1.898716084e-03f, -1.042848395e-01f, +2.548448052e-01f, +6.704191451e-01f, +2.548448052e-01f, -1.042848395e-01f, +1.898716084e-03f, +1.857263635e-02f, -6.270045371e-03f, +7.644175308e-05f, +7.817848527e-05f, -1.364127173e-03f, +3.388314016e-03f, -8.638775022e-04f, -1.898090041e-02f, -5.305125844e-04f, +1.912617857e-02f, +1.429339731e-03f, -3.575938004e-03f, +1.345069402e-03f, -4.119172230e-05f, -7.064571447e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 1 (12) */ -6.191866886e-03f, +1.720850917e-02f, +5.287030100e-03f, -1.051487170e-01f, +2.358639047e-01f, +6.698886325e-01f, +2.739709837e-01f, -1.028554997e-01f, -1.677221920e-03f, +1.991770575e-02f, -6.311237093e-03f, +5.796038602e-06f, +1.119511682e-04f, -1.374457639e-03f, +3.192600037e-03f, -3.215220538e-04f, -1.878782216e-02f, -1.589860895e-03f, +1.922237484e-02f, +2.016497777e-03f, -3.754090754e-03f, +1.316918644e-03f, -1.040846606e-06f, -8.380363123e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 2 (12) */ -6.079915717e-03f, +1.583405154e-02f, +8.479630137e-03f, -1.054702390e-01f, +2.170760826e-01f, +6.682987716e-01f, +2.931933586e-01f, -1.008390020e-01f, -5.431312674e-03f, +2.123462439e-02f, -6.312277940e-03f, -7.800759263e-05f, +1.424847694e-04f, -1.376459806e-03f, +2.990160719e-03f, +1.964495825e-04f, -1.854838806e-02f, -2.644185497e-03f, +1.926837722e-02f, +2.623810007e-03f, -3.921380972e-03f, +1.279346311e-03f, +4.219822040e-05f, -9.745277665e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 3 (12) */ -5.937430948e-03f, +1.445759173e-02f, +1.146979086e-02f, -1.052737894e-01f, +1.985276945e-01f, +6.656545861e-01f, +3.124617358e-01f, -9.821519196e-02f, -9.352693646e-03f, +2.251397070e-02f, -6.270079719e-03f, -1.754603693e-04f, +1.697781384e-04f, -1.370562189e-03f, +2.782337863e-03f, +6.888968659e-04f, -1.826419684e-02f, -3.690160098e-03f, +1.926325002e-02f, +3.249608075e-03f, -4.076414120e-03f, +1.232064605e-03f, +8.842275228e-05f, -1.114990379e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 4 (12) */ -5.767652810e-03f, +1.308702954e-02f, +1.425212872e-02f, -1.045848926e-01f, +1.802634977e-01f, +6.619644260e-01f, +3.317249858e-01f, -9.496558388e-02f, -1.342910777e-02f, +2.374603531e-02f, -6.181656967e-03f, -2.869594071e-04f, +1.938527502e-04f, -1.357218966e-03f, +2.570444461e-03f, +1.154817602e-03f, -1.793699319e-02f, -4.724492566e-03f, +1.920623979e-02f, +3.892101579e-03f, -4.217799433e-03f, +1.174830113e-03f, +1.375025163e-04f, -1.258380042e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 5 (12) */ -5.573800059e-03f, +1.172981057e-02f, +1.682257318e-02f, -1.034300750e-01f, +1.623265045e-01f, +6.572399335e-01f, +3.509312256e-01f, -9.107348230e-02f, -1.764690720e-02f, +2.492086542e-02f, -6.044154451e-03f, -4.127974114e-04f, +2.147513789e-04f, -1.336906140e-03f, +2.355759081e-03f, +1.593349097e-03f, -1.756865855e-02f, -5.743938364e-03f, +1.909678039e-02f, +4.549383387e-03f, -4.344157141e-03f, +1.107447278e-03f, +1.892792335e-04f, -1.403552482e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 6 (12) */ -5.359048680e-03f, +1.039290443e-02f, +1.917833226e-02f, -1.018367259e-01f, +1.447578459e-01f, +6.514959951e-01f, +3.700280060e-01f, -8.652409891e-02f, -2.199106434e-02f, +2.602831270e-02f, -5.854875217e-03f, -5.531526595e-04f, +2.325366861e-04f, -1.310117715e-03f, +2.139520601e-03f, +2.003768627e-03f, -1.716120151e-02f, -6.745313754e-03f, +1.893449724e-02f, +5.219435635e-03f, -4.454125839e-03f, +1.029771719e-03f, +2.435662099e-04f, -1.549267042e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 7 (12) */ -5.126511994e-03f, +9.082786720e-03f, +2.131785286e-02f, -9.983295725e-02f, +1.275966444e-01f, +6.447506813e-01f, +3.889625032e-01f, -8.130466328e-02f, -2.644519018e-02f, +2.705808442e-02f, -5.611309007e-03f, -7.080793637e-04f, +2.472897366e-04f, -1.277361922e-03f, +1.922923322e-03f, +2.385493214e-03f, -1.671674768e-02f, -7.725508723e-03f, +1.871921081e-02f, +5.900136366e-03f, -4.546369976e-03f, +9.417133749e-04f, +3.001481496e-04f, -1.694191487e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 8 (12) */ -4.879222258e-03f, +7.805424797e-03f, +2.324077619e-02f, -9.744746404e-02f, +1.108798967e-01f, +6.370251726e-01f, +4.076817140e-01f, -7.540452691e-02f, -3.099156015e-02f, +2.799979780e-02f, -5.311160858e-03f, -8.774985124e-04f, +2.591084547e-04f, -1.239157519e-03f, +1.707112465e-03f, +2.738078749e-03f, -1.623752913e-02f, -8.681499542e-03f, +1.845093922e-02f, +6.589266792e-03f, -4.619587437e-03f, +8.432394459e-04f, +3.587811586e-04f, -1.836907803e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15, 9 (12) */ -4.620113803e-03f, +6.566267278e-03f, +2.494788865e-02f, -9.470938529e-02f, +9.464236761e-02f, +6.283436731e-01f, +4.261326532e-01f, -6.881526012e-02f, -3.561114759e-02f, +2.884303724e-02f, -4.952379699e-03f, -1.061189293e-03f, +2.681060345e-04f, -1.196030160e-03f, +1.493180077e-03f, +3.061218451e-03f, -1.572587350e-02f, -9.610360933e-03f, +1.812989991e-02f, +7.284519157e-03f, -4.672517155e-03f, +7.343771115e-04f, +4.191929467e-04f, -1.975919020e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,10 (12) */ -4.352007769e-03f, +5.370237118e-03f, +2.644106873e-02f, -9.164816684e-02f, +7.891649411e-02f, +6.187333121e-01f, +4.442625532e-01f, -6.153074096e-02f, -4.028366475e-02f, +2.957741435e-02f, -4.533186752e-03f, -1.258781195e-03f, +2.744093180e-04f, -1.148508890e-03f, +1.282161351e-03f, +3.354740708e-03f, -1.518419286e-02f, -1.050927775e-02f, +1.775651054e-02f, +7.983505155e-03f, -4.703946737e-03f, +6.152159946e-04f, +4.810832345e-04f, -2.109657031e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,11 (12) */ -4.077598451e-03f, +4.221728228e-03f, +2.772323008e-02f, -8.829342613e-02f, +6.373230125e-02f, +6.082240344e-01f, +4.620190637e-01f, -5.354723581e-02f, -4.498761148e-02f, +3.019263035e-02f, -4.052103518e-03f, -1.469746898e-03f, +2.781571526e-04f, -1.097122751e-03f, +1.075031370e-03f, +3.618606309e-03f, -1.461497220e-02f, -1.137555617e-02f, +1.733138888e-02f, +8.683764891e-03f, -4.712720046e-03f, +4.859103552e-04f, +5.441243728e-04f, -2.236491406e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,12 (12) */ -3.799441298e-03f, +3.124605477e-03f, +2.879826145e-02f, -8.467481982e-02f, +4.911732904e-02f, +5.968484782e-01f, +4.793504526e-01f, -4.486347092e-02f, -4.970033153e-02f, +3.067854070e-02f, -3.507979145e-03f, -1.693396038e-03f, +2.794987417e-04f, -1.042397530e-03f, +8.727022773e-04f, +3.852905094e-03f, -1.402075789e-02f, -1.220663423e-02f, +1.685535188e-02f, +9.382776335e-03f, -4.697744704e-03f, +3.466809857e-04f, +6.079621757e-04f, -2.354739168e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,13 (12) */ -3.519942556e-03f, +2.082207947e-03f, +2.967096373e-02f, -8.082191473e-02f, +3.509657115e-02f, +5.846418440e-01f, +4.962058045e-01f, -3.548069458e-02f, -5.439807623e-02f, +3.102522169e-02f, -2.900016969e-03f, -1.928869955e-03f, +2.785919998e-04f, -9.848526714e-04f, +6.760208820e-04f, +4.057852059e-03f, -1.340414589e-02f, -1.300009189e-02f, +1.632941378e-02f, +1.007796522e-02f, -4.657999478e-03f, +1.978167914e-04f, +6.722169746e-04f, -2.462675508e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,14 (12) */ -3.241350556e-03f, +1.097355275e-03f, +3.034698461e-02f, -7.676406267e-02f, +2.169242526e-02f, +5.716417521e-01f, +5.125352182e-01f, -2.540272936e-02f, -5.905607571e-02f, +3.122303848e-02f, -2.227799995e-03f, -2.175137506e-03f, +2.756019237e-04f, -9.249983445e-04f, +4.857666985e-04f, +4.233782938e-03f, -1.276776995e-02f, -1.375366024e-02f, +1.575478333e-02f, +1.076671539e-02f, -4.592541488e-03f, +3.967603208e-05f, +7.364848909e-04f, -2.558545383e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,15 (12) */ -2.965748633e-03f, +1.723569308e-04f, +3.083275131e-02f, -7.253027973e-02f, +8.924655309e-03f, +5.578880919e-01f, +5.282900016e-01f, -1.463601396e-02f, -6.364861720e-02f, +3.126271451e-02f, -1.491315104e-03f, -2.430992044e-03f, +2.706989912e-04f, -8.633327032e-04f, +3.026504151e-04f, +4.381149306e-03f, -1.211428982e-02f, -1.446523016e-02f, +1.513286014e-02f, +1.144637946e-02f, -4.500513226e-03f, -1.273127899e-04f, +8.003393316e-04f, -2.640575974e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,16 (12) */ -2.695049642e-03f, -6.909757724e-04f, +3.113540172e-02f, -6.814913042e-02f, -3.189634508e-03f, +5.434228617e-01f, +5.434228617e-01f, -3.189634508e-03f, -6.814913042e-02f, +3.113540172e-02f, -6.909757724e-04f, -2.695049642e-03f, +2.640575974e-04f, -8.003393316e-04f, +1.273127899e-04f, +4.500513226e-03f, -1.144637946e-02f, -1.513286014e-02f, +1.446523016e-02f, +1.211428982e-02f, -4.381149306e-03f, -3.026504151e-04f, +8.633327032e-04f, -2.706989912e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,17 (12) */ -2.430992044e-03f, -1.491315104e-03f, +3.126271451e-02f, -6.364861720e-02f, -1.463601396e-02f, +5.282900016e-01f, +5.578880919e-01f, +8.924655309e-03f, -7.253027973e-02f, +3.083275131e-02f, +1.723569308e-04f, -2.965748633e-03f, +2.558545383e-04f, -7.364848909e-04f, -3.967603208e-05f, +4.592541488e-03f, -1.076671539e-02f, -1.575478333e-02f, +1.375366024e-02f, +1.276776995e-02f, -4.233782938e-03f, -4.857666985e-04f, +9.249983445e-04f, -2.756019237e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,18 (12) */ -2.175137506e-03f, -2.227799995e-03f, +3.122303848e-02f, -5.905607571e-02f, -2.540272936e-02f, +5.125352182e-01f, +5.716417521e-01f, +2.169242526e-02f, -7.676406267e-02f, +3.034698461e-02f, +1.097355275e-03f, -3.241350556e-03f, +2.462675508e-04f, -6.722169746e-04f, -1.978167914e-04f, +4.657999478e-03f, -1.007796522e-02f, -1.632941378e-02f, +1.300009189e-02f, +1.340414589e-02f, -4.057852059e-03f, -6.760208820e-04f, +9.848526714e-04f, -2.785919998e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,19 (12) */ -1.928869955e-03f, -2.900016969e-03f, +3.102522169e-02f, -5.439807623e-02f, -3.548069458e-02f, +4.962058045e-01f, +5.846418440e-01f, +3.509657115e-02f, -8.082191473e-02f, +2.967096373e-02f, +2.082207947e-03f, -3.519942556e-03f, +2.354739168e-04f, -6.079621757e-04f, -3.466809857e-04f, +4.697744704e-03f, -9.382776335e-03f, -1.685535188e-02f, +1.220663423e-02f, +1.402075789e-02f, -3.852905094e-03f, -8.727022773e-04f, +1.042397530e-03f, -2.794987417e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,20 (12) */ -1.693396038e-03f, -3.507979145e-03f, +3.067854070e-02f, -4.970033153e-02f, -4.486347092e-02f, +4.793504526e-01f, +5.968484782e-01f, +4.911732904e-02f, -8.467481982e-02f, +2.879826145e-02f, +3.124605477e-03f, -3.799441298e-03f, +2.236491406e-04f, -5.441243728e-04f, -4.859103552e-04f, +4.712720046e-03f, -8.683764891e-03f, -1.733138888e-02f, +1.137555617e-02f, +1.461497220e-02f, -3.618606309e-03f, -1.075031370e-03f, +1.097122751e-03f, -2.781571526e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,21 (12) */ -1.469746898e-03f, -4.052103518e-03f, +3.019263035e-02f, -4.498761148e-02f, -5.354723581e-02f, +4.620190637e-01f, +6.082240344e-01f, +6.373230125e-02f, -8.829342613e-02f, +2.772323008e-02f, +4.221728228e-03f, -4.077598451e-03f, +2.109657031e-04f, -4.810832345e-04f, -6.152159946e-04f, +4.703946737e-03f, -7.983505155e-03f, -1.775651054e-02f, +1.050927775e-02f, +1.518419286e-02f, -3.354740708e-03f, -1.282161351e-03f, +1.148508890e-03f, -2.744093180e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,22 (12) */ -1.258781195e-03f, -4.533186752e-03f, +2.957741435e-02f, -4.028366475e-02f, -6.153074096e-02f, +4.442625532e-01f, +6.187333121e-01f, +7.891649411e-02f, -9.164816684e-02f, +2.644106873e-02f, +5.370237118e-03f, -4.352007769e-03f, +1.975919020e-04f, -4.191929467e-04f, -7.343771115e-04f, +4.672517155e-03f, -7.284519157e-03f, -1.812989991e-02f, +9.610360933e-03f, +1.572587350e-02f, -3.061218451e-03f, -1.493180077e-03f, +1.196030160e-03f, -2.681060345e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,23 (12) */ -1.061189293e-03f, -4.952379699e-03f, +2.884303724e-02f, -3.561114759e-02f, -6.881526012e-02f, +4.261326532e-01f, +6.283436731e-01f, +9.464236761e-02f, -9.470938529e-02f, +2.494788865e-02f, +6.566267278e-03f, -4.620113803e-03f, +1.836907803e-04f, -3.587811586e-04f, -8.432394459e-04f, +4.619587437e-03f, -6.589266792e-03f, -1.845093922e-02f, +8.681499542e-03f, +1.623752913e-02f, -2.738078749e-03f, -1.707112465e-03f, +1.239157519e-03f, -2.591084547e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,24 (12) */ -8.774985124e-04f, -5.311160858e-03f, +2.799979780e-02f, -3.099156015e-02f, -7.540452691e-02f, +4.076817140e-01f, +6.370251726e-01f, +1.108798967e-01f, -9.744746404e-02f, +2.324077619e-02f, +7.805424797e-03f, -4.879222258e-03f, +1.694191487e-04f, -3.001481496e-04f, -9.417133749e-04f, +4.546369976e-03f, -5.900136366e-03f, -1.871921081e-02f, +7.725508723e-03f, +1.671674768e-02f, -2.385493214e-03f, -1.922923322e-03f, +1.277361922e-03f, -2.472897366e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,25 (12) */ -7.080793637e-04f, -5.611309007e-03f, +2.705808442e-02f, -2.644519018e-02f, -8.130466328e-02f, +3.889625032e-01f, +6.447506813e-01f, +1.275966444e-01f, -9.983295725e-02f, +2.131785286e-02f, +9.082786720e-03f, -5.126511994e-03f, +1.549267042e-04f, -2.435662099e-04f, -1.029771719e-03f, +4.454125839e-03f, -5.219435635e-03f, -1.893449724e-02f, +6.745313754e-03f, +1.716120151e-02f, -2.003768627e-03f, -2.139520601e-03f, +1.310117715e-03f, -2.325366861e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,26 (12) */ -5.531526595e-04f, -5.854875217e-03f, +2.602831270e-02f, -2.199106434e-02f, -8.652409891e-02f, +3.700280060e-01f, +6.514959951e-01f, +1.447578459e-01f, -1.018367259e-01f, +1.917833226e-02f, +1.039290443e-02f, -5.359048680e-03f, +1.403552482e-04f, -1.892792335e-04f, -1.107447278e-03f, +4.344157141e-03f, -4.549383387e-03f, -1.909678039e-02f, +5.743938364e-03f, +1.756865855e-02f, -1.593349097e-03f, -2.355759081e-03f, +1.336906140e-03f, -2.147513789e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,27 (12) */ -4.127974114e-04f, -6.044154451e-03f, +2.492086542e-02f, -1.764690720e-02f, -9.107348230e-02f, +3.509312256e-01f, +6.572399335e-01f, +1.623265045e-01f, -1.034300750e-01f, +1.682257318e-02f, +1.172981057e-02f, -5.573800059e-03f, +1.258380042e-04f, -1.375025163e-04f, -1.174830113e-03f, +4.217799433e-03f, -3.892101579e-03f, -1.920623979e-02f, +4.724492566e-03f, +1.793699319e-02f, -1.154817602e-03f, -2.570444461e-03f, +1.357218966e-03f, -1.938527502e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,28 (12) */ -2.869594071e-04f, -6.181656967e-03f, +2.374603531e-02f, -1.342910777e-02f, -9.496558388e-02f, +3.317249858e-01f, +6.619644260e-01f, +1.802634977e-01f, -1.045848926e-01f, +1.425212872e-02f, +1.308702954e-02f, -5.767652810e-03f, +1.114990379e-04f, -8.842275228e-05f, -1.232064605e-03f, +4.076414120e-03f, -3.249608075e-03f, -1.926325002e-02f, +3.690160098e-03f, +1.826419684e-02f, -6.888968659e-04f, -2.782337863e-03f, +1.370562189e-03f, -1.697781384e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,29 (12) */ -1.754603693e-04f, -6.270079719e-03f, +2.251397070e-02f, -9.352693646e-03f, -9.821519196e-02f, +3.124617358e-01f, +6.656545861e-01f, +1.985276945e-01f, -1.052737894e-01f, +1.146979086e-02f, +1.445759173e-02f, -5.937430948e-03f, +9.745277665e-05f, -4.219822040e-05f, -1.279346311e-03f, +3.921380972e-03f, -2.623810007e-03f, -1.926837722e-02f, +2.644185497e-03f, +1.854838806e-02f, -1.964495825e-04f, -2.990160719e-03f, +1.376459806e-03f, -1.424847694e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,30 (12) */ -7.800759263e-05f, -6.312277940e-03f, +2.123462439e-02f, -5.431312674e-03f, -1.008390020e-01f, +2.931933586e-01f, +6.682987716e-01f, +2.170760826e-01f, -1.054702390e-01f, +8.479630137e-03f, +1.583405154e-02f, -6.079915717e-03f, +8.380363123e-05f, +1.040846606e-06f, -1.316918644e-03f, +3.754090754e-03f, -2.016497777e-03f, -1.922237484e-02f, +1.589860895e-03f, +1.878782216e-02f, +3.215220538e-04f, -3.192600037e-03f, +1.374457639e-03f, -1.119511682e-04f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, /* 15,31 (12) */ +5.796038602e-06f, -6.311237093e-03f, +1.991770575e-02f, -1.677221920e-03f, -1.028554997e-01f, +2.739709837e-01f, +6.698886325e-01f, +2.358639047e-01f, -1.051487170e-01f, +5.287030100e-03f, +1.720850917e-02f, -6.191866886e-03f, +7.064571447e-05f, +4.119172230e-05f, -1.345069402e-03f, +3.575938004e-03f, -1.429339731e-03f, -1.912617857e-02f, +5.305125844e-04f, +1.898090041e-02f, +8.638775022e-04f, -3.388314016e-03f, +1.364127173e-03f, -7.817848527e-05f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, +0.000000000e+00f, }; constexpr BSincTable bsinc12 = { /* scaleBase */ 1.647904275e-01f, /* scaleRange */ 1.197304285e+00f, /* m */ { 24u, 24u, 24u, 24u, 24u, 24u, 24u, 20u, 20u, 20u, 16u, 16u, 16u, 12u, 12u, 12u }, /* filterOffset */ { 0u, 3072u, 6144u, 9216u, 12288u, 15360u, 18432u, 21504u, 24064u, 26624u, 29184u, 31232u, 33280u, 35328u, 36864u, 38400u }, bsinc12_tab }; } // namespace ================================================ FILE: project/lib/custom/openal/build/default-44100.mhr.h ================================================ static const unsigned char hrtf_default_44100[] = { 0x4d, 0x69, 0x6e, 0x50, 0x48, 0x52, 0x30, 0x32, 0x44, 0xac, 0x00, 0x00, 0x01, 0x00, 0x20, 0x01, 0x78, 0x05, 0x13, 0x01, 0x0c, 0x18, 0x24, 0x2d, 0x38, 0x3c, 0x48, 0x48, 0x48, 0x48, 0x48, 0x3c, 0x38, 0x2d, 0x24, 0x18, 0x0c, 0x01, 0x5b, 0xe6, 0x17, 0xd7, 0xad, 0x20, 0xbe, 0xd2, 0x0d, 0xd1, 0x55, 0x0b, 0x3a, 0x62, 0x04, 0xd1, 0x55, 0x01, 0xd6, 0x67, 0x03, 0x30, 0xcd, 0xfc, 0x5c, 0x6d, 0xf6, 0x6d, 0xdf, 0xfa, 0xd3, 0x44, 0x02, 0xec, 0x7a, 0xff, 0x6a, 0x95, 0xfd, 0xd7, 0xba, 0xfb, 0x9a, 0x17, 0xfc, 0x96, 0x5f, 0xfe, 0xe1, 0x0b, 0xff, 0x4e, 0x34, 0xff, 0xa6, 0xab, 0xff, 0x45, 0x7b, 0xff, 0xfd, 0x87, 0xfe, 0x0f, 0x38, 0xff, 0xb4, 0x60, 0xfe, 0xa0, 0xb3, 0xfe, 0x3e, 0x67, 0xfe, 0x24, 0x9a, 0xfd, 0xd9, 0x15, 0xfe, 0x78, 0xb4, 0xfe, 0x30, 0x31, 0xff, 0x19, 0x9e, 0xff, 0xd4, 0xf9, 0xff, 0x2c, 0x6e, 0xff, 0x60, 0x2e, 0x1b, 0x45, 0xf3, 0x21, 0x05, 0xcd, 0x0b, 0x0d, 0xc7, 0x0c, 0x77, 0x7e, 0x04, 0xe2, 0x17, 0x00, 0x0b, 0x4c, 0x03, 0x99, 0x01, 0xfd, 0xb6, 0x37, 0xf6, 0x84, 0x7a, 0xf9, 0x16, 0x16, 0x02, 0xe4, 0x55, 0x00, 0x62, 0xa9, 0xfd, 0x92, 0x6b, 0xfc, 0x07, 0x37, 0xfc, 0xd2, 0x6a, 0xfc, 0x71, 0x91, 0xfe, 0x3b, 0xaf, 0xff, 0x9b, 0x39, 0xff, 0x1d, 0x29, 0xff, 0x01, 0x24, 0xfe, 0xd6, 0xc8, 0xfe, 0x52, 0x45, 0xfe, 0xc9, 0x8a, 0xfe, 0x80, 0x71, 0xfe, 0xff, 0xd4, 0xfd, 0xd5, 0xfa, 0xfd, 0x52, 0x07, 0xff, 0x06, 0x9a, 0xff, 0x0a, 0xb4, 0xff, 0x1b, 0xfc, 0xff, 0x1e, 0x50, 0xff, 0x97, 0xce, 0x18, 0xe2, 0x9e, 0x1f, 0x93, 0x7d, 0x0b, 0xce, 0x23, 0x0b, 0xe2, 0x59, 0x04, 0x03, 0x57, 0x01, 0x12, 0x52, 0x03, 0x3a, 0x88, 0xfc, 0x96, 0xcc, 0xf6, 0x93, 0x18, 0xfb, 0xda, 0xfa, 0x01, 0x30, 0x40, 0xff, 0x2c, 0xd0, 0xfd, 0x0d, 0xa4, 0xfc, 0x5d, 0x15, 0xfd, 0xc9, 0x1a, 0xfe, 0xd9, 0xb9, 0xfe, 0xe5, 0xb1, 0xff, 0xd0, 0xee, 0xff, 0xc5, 0x54, 0xff, 0xdd, 0x69, 0xfe, 0xb4, 0x43, 0xff, 0x86, 0x6e, 0xfe, 0x45, 0xa0, 0xfe, 0xc6, 0x34, 0xfe, 0xfb, 0xa8, 0xfd, 0x21, 0x3e, 0xfe, 0x64, 0xc5, 0xfe, 0x85, 0x48, 0xff, 0x84, 0xb2, 0xff, 0x43, 0x0d, 0x00, 0xed, 0x79, 0xff, 0x9c, 0x17, 0x17, 0xe4, 0x50, 0x1d, 0x62, 0x91, 0x0a, 0x13, 0x3f, 0x0a, 0x89, 0xe5, 0x03, 0xb9, 0x75, 0x01, 0x14, 0x73, 0x03, 0xf8, 0xcb, 0xfc, 0x26, 0x69, 0xf7, 0xff, 0x3a, 0xfc, 0x7e, 0xbc, 0x02, 0x7b, 0x81, 0xff, 0x44, 0x57, 0xfe, 0x1a, 0x0a, 0xfd, 0xa0, 0x47, 0xfd, 0x3a, 0xe2, 0xfe, 0xf7, 0x2c, 0xff, 0x43, 0x54, 0xff, 0x3f, 0xc1, 0xff, 0x4f, 0x82, 0xff, 0x78, 0xb0, 0xfe, 0x5f, 0x7f, 0xff, 0x9f, 0x9e, 0xfe, 0xb9, 0xf0, 0xfe, 0xd1, 0x90, 0xfe, 0xba, 0xd7, 0xfd, 0x24, 0x54, 0xfe, 0x2c, 0xd7, 0xfe, 0xe9, 0x4e, 0xff, 0xf6, 0xb5, 0xff, 0xe7, 0x05, 0x00, 0xd7, 0x77, 0xff, 0xd1, 0xb1, 0x16, 0x77, 0xdf, 0x1c, 0xc7, 0x6a, 0x0a, 0xf9, 0x16, 0x0a, 0x4f, 0xed, 0x03, 0x95, 0xc3, 0x01, 0xbd, 0xe4, 0x03, 0x80, 0x48, 0xfd, 0x21, 0xdf, 0xf7, 0x1f, 0xa7, 0xfc, 0x55, 0x05, 0x03, 0x8e, 0x9c, 0xff, 0xa4, 0x27, 0xfe, 0xe6, 0xa7, 0xfc, 0x3d, 0x25, 0xfd, 0x48, 0x0f, 0xff, 0x35, 0x47, 0xff, 0xf7, 0x4a, 0xff, 0xad, 0xc0, 0xff, 0x84, 0x8e, 0xff, 0x9a, 0xb9, 0xfe, 0x5b, 0x90, 0xff, 0x54, 0xbf, 0xfe, 0x50, 0x23, 0xff, 0xc0, 0xd2, 0xfe, 0xf1, 0x04, 0xfe, 0xc4, 0x6a, 0xfe, 0xbb, 0xd6, 0xfe, 0xf8, 0x28, 0xff, 0xe7, 0x86, 0xff, 0x01, 0xdd, 0xff, 0xe8, 0x57, 0xff, 0xfa, 0x46, 0x17, 0x44, 0xb5, 0x1d, 0x86, 0x89, 0x0a, 0x66, 0xc4, 0x09, 0xd3, 0x66, 0x03, 0x3d, 0x4f, 0x01, 0x95, 0x8d, 0x03, 0xbb, 0xd0, 0xfc, 0x7f, 0x16, 0xf7, 0x2c, 0xe1, 0xfb, 0x21, 0x07, 0x03, 0x53, 0xef, 0xff, 0x66, 0x32, 0xfe, 0xf1, 0x7a, 0xfc, 0xc1, 0xef, 0xfc, 0x20, 0x10, 0xff, 0x88, 0x8f, 0xff, 0x03, 0x9a, 0xff, 0x3e, 0xf4, 0xff, 0x97, 0xc6, 0xff, 0xe8, 0xe2, 0xfe, 0xe2, 0x98, 0xff, 0xbf, 0xb3, 0xfe, 0x16, 0x01, 0xff, 0xad, 0xaa, 0xfe, 0xcd, 0xeb, 0xfd, 0x00, 0x70, 0xfe, 0x82, 0x07, 0xff, 0x4e, 0x83, 0xff, 0xe5, 0xee, 0xff, 0x89, 0x20, 0x00, 0x89, 0x62, 0xff, 0x3f, 0x74, 0x19, 0xb5, 0x1c, 0x20, 0x26, 0xc8, 0x0a, 0x9d, 0x4c, 0x0a, 0x73, 0x81, 0x03, 0xa5, 0x45, 0x01, 0x2a, 0x7e, 0x03, 0x02, 0xd2, 0xfb, 0x49, 0x82, 0xf5, 0xf3, 0xdb, 0xfa, 0x77, 0x56, 0x03, 0x5a, 0xcc, 0xff, 0x52, 0x55, 0xfd, 0xa1, 0x91, 0xfb, 0x0e, 0x53, 0xfc, 0x94, 0xc3, 0xfe, 0x1d, 0x67, 0xff, 0xab, 0x66, 0xff, 0x8b, 0xdf, 0xff, 0xc7, 0xc2, 0xff, 0x81, 0xa5, 0xfe, 0xcd, 0x84, 0xff, 0x9d, 0xae, 0xfe, 0x82, 0x05, 0xff, 0x15, 0xa8, 0xfe, 0x52, 0xe0, 0xfd, 0x5a, 0x70, 0xfe, 0xcf, 0x19, 0xff, 0x83, 0x80, 0xff, 0x4b, 0xd8, 0xff, 0xfe, 0x26, 0x00, 0x4e, 0x88, 0xff, 0x42, 0xe7, 0x1a, 0x79, 0xc5, 0x22, 0xf8, 0xfb, 0x0b, 0xf5, 0xce, 0x0a, 0x16, 0xa2, 0x03, 0xdc, 0x90, 0x00, 0x63, 0x3e, 0x03, 0xcb, 0x25, 0xfb, 0xe6, 0x0b, 0xf5, 0x33, 0xd7, 0xfa, 0xdb, 0x48, 0x02, 0xdb, 0x18, 0xff, 0x94, 0x93, 0xfd, 0xf9, 0xa0, 0xfb, 0x48, 0x27, 0xfc, 0x56, 0x62, 0xfe, 0x4f, 0x0c, 0xff, 0xa8, 0xb7, 0xff, 0xd6, 0xf6, 0xff, 0xb5, 0x71, 0xff, 0x0e, 0x6a, 0xfe, 0xbf, 0x49, 0xff, 0xd2, 0x71, 0xfe, 0x6c, 0xcb, 0xfe, 0x74, 0x5c, 0xfe, 0xe2, 0xab, 0xfd, 0x2d, 0x48, 0xfe, 0xca, 0xd2, 0xfe, 0x9e, 0x66, 0xff, 0x19, 0xc9, 0xff, 0x68, 0x22, 0x00, 0x67, 0x7e, 0xff, 0xa5, 0xac, 0x1c, 0xd9, 0x8e, 0x23, 0x2f, 0x9c, 0x0b, 0x50, 0x37, 0x0c, 0xef, 0x8e, 0x04, 0x77, 0x71, 0x00, 0xa6, 0x61, 0x02, 0xf2, 0xd9, 0xf9, 0xde, 0x6c, 0xf5, 0x6e, 0x48, 0xfd, 0x9b, 0xcb, 0x01, 0x37, 0x03, 0xfc, 0x02, 0x9c, 0xfc, 0x93, 0x52, 0xfc, 0x6b, 0xb2, 0xfd, 0x89, 0x41, 0xff, 0xc8, 0x4e, 0xfe, 0xd8, 0x1a, 0xff, 0x4d, 0x29, 0x00, 0xfa, 0x5e, 0xff, 0x33, 0x70, 0xfe, 0x42, 0x70, 0xff, 0xc4, 0x31, 0xfe, 0xfc, 0x9c, 0xfe, 0x9f, 0xea, 0xfd, 0x0e, 0x3c, 0xfd, 0x49, 0x2e, 0xfe, 0x93, 0x8a, 0xfe, 0x2b, 0xf2, 0xfe, 0x96, 0x97, 0xff, 0xaf, 0x03, 0x00, 0x33, 0x44, 0xff, 0x01, 0x9c, 0x20, 0xb1, 0x98, 0x26, 0x2e, 0xc2, 0x08, 0x2c, 0xc2, 0x09, 0xf0, 0x57, 0x02, 0x2e, 0x98, 0x00, 0x7e, 0xfa, 0x04, 0x8a, 0x3f, 0xfa, 0xbd, 0x40, 0xf4, 0xd9, 0x4b, 0xfe, 0xfa, 0x02, 0x05, 0x5b, 0x20, 0xfc, 0xbc, 0x91, 0xfa, 0x67, 0x97, 0xfa, 0x64, 0x7a, 0xfd, 0xfa, 0x12, 0x00, 0x34, 0x00, 0xfe, 0x42, 0x0a, 0xfe, 0xde, 0xef, 0xff, 0xb5, 0x6b, 0xff, 0x15, 0xdd, 0xfd, 0xe6, 0x6e, 0xff, 0xc8, 0x1b, 0xfe, 0x60, 0xb4, 0xfe, 0xa7, 0xe5, 0xfd, 0x9c, 0xb1, 0xfc, 0x57, 0x00, 0xfe, 0x9c, 0xbb, 0xfe, 0x7b, 0x06, 0xff, 0x58, 0x90, 0xff, 0x63, 0x0a, 0x00, 0xa6, 0x2c, 0xff, 0xe6, 0xdc, 0x21, 0x58, 0x10, 0x28, 0x95, 0x97, 0x09, 0xd7, 0x19, 0x09, 0x7c, 0xa5, 0x00, 0x2d, 0x83, 0x00, 0x2e, 0x7d, 0x05, 0x9d, 0x29, 0xfb, 0x5b, 0xaf, 0xf2, 0x6d, 0x7b, 0xfc, 0x3c, 0xd1, 0x06, 0x77, 0xf3, 0xfe, 0x54, 0xc0, 0xfa, 0xdd, 0xb4, 0xf7, 0x4d, 0xb1, 0xfb, 0x64, 0xce, 0x00, 0xaa, 0xa3, 0xff, 0x17, 0xc2, 0xfd, 0xf1, 0x11, 0xff, 0xb6, 0x3b, 0xff, 0x87, 0x9e, 0xfd, 0x4a, 0x2d, 0xff, 0x6a, 0xbc, 0xfd, 0x8d, 0xb7, 0xfe, 0xfb, 0x13, 0xfe, 0xa0, 0xe7, 0xfc, 0x8c, 0xe3, 0xfd, 0x25, 0xdc, 0xfe, 0x73, 0x35, 0xff, 0xc4, 0x87, 0xff, 0x71, 0xe5, 0xff, 0xf2, 0xf5, 0xfe, 0x4c, 0x45, 0x20, 0x02, 0x54, 0x27, 0x7d, 0xc5, 0x0c, 0xad, 0xd3, 0x0a, 0xa6, 0x5d, 0x01, 0xce, 0x3d, 0x00, 0x6a, 0xe6, 0x03, 0x7a, 0x92, 0xfb, 0xad, 0xae, 0xf1, 0x44, 0xab, 0xf9, 0xb1, 0x3a, 0x05, 0x15, 0x7f, 0x00, 0xdb, 0xdb, 0xfe, 0xe3, 0x4e, 0xf8, 0xcf, 0x91, 0xf8, 0x9e, 0xc7, 0xff, 0x9e, 0x91, 0x00, 0x81, 0x33, 0xff, 0x85, 0x50, 0xff, 0xa6, 0x08, 0xff, 0x37, 0x13, 0xfe, 0x3e, 0x31, 0xff, 0x73, 0xb1, 0xfd, 0x31, 0xe2, 0xfe, 0x9c, 0x10, 0xfe, 0x4d, 0x7a, 0xfc, 0x58, 0xbc, 0xfd, 0xa6, 0x67, 0xfe, 0x19, 0x3b, 0xff, 0xb7, 0xcc, 0xff, 0x8a, 0x26, 0x00, 0x9d, 0x68, 0xff, 0x8d, 0x46, 0x1e, 0xda, 0xa9, 0x25, 0xff, 0x14, 0x0c, 0xbb, 0xe5, 0x0b, 0xb1, 0x6a, 0x03, 0x3c, 0x0f, 0x00, 0x74, 0xd4, 0x02, 0x19, 0x7d, 0xfb, 0xac, 0xba, 0xf4, 0x24, 0xe1, 0xf8, 0xeb, 0xc9, 0x03, 0xf8, 0x51, 0x00, 0xf3, 0x31, 0xfd, 0xd5, 0xf8, 0xfb, 0x25, 0x1f, 0xf9, 0xfd, 0xde, 0xfb, 0x19, 0xd9, 0xff, 0xf2, 0xf6, 0xff, 0x60, 0xe5, 0xff, 0x12, 0xe2, 0xff, 0xf8, 0x83, 0xfe, 0xb9, 0xbb, 0xfe, 0x05, 0x7a, 0xfd, 0xd4, 0x1f, 0xfe, 0x88, 0xa7, 0xfe, 0x77, 0x75, 0xfd, 0x7f, 0x9e, 0xfd, 0x7a, 0xab, 0xfe, 0x3f, 0x3c, 0xff, 0x4c, 0xcf, 0xff, 0x8b, 0x17, 0x00, 0xcb, 0x5f, 0xff, 0xcc, 0xc0, 0x1e, 0x50, 0xc7, 0x22, 0x81, 0x7e, 0x09, 0xf4, 0x02, 0x0f, 0x32, 0x61, 0x04, 0x35, 0x68, 0xfe, 0x08, 0x63, 0x03, 0x2f, 0x88, 0xfd, 0xc1, 0xf9, 0xf5, 0x9a, 0x7d, 0xf7, 0xe7, 0x16, 0x02, 0xe8, 0xb6, 0x01, 0xeb, 0x8c, 0xfd, 0x5f, 0x4d, 0xfd, 0x6e, 0x22, 0xfc, 0xc3, 0xc5, 0xf9, 0x39, 0x84, 0xfe, 0x93, 0x7a, 0x00, 0x36, 0x82, 0xfe, 0x9a, 0xe0, 0xfe, 0x8e, 0xc1, 0xfd, 0x44, 0x4d, 0xfe, 0x05, 0x4b, 0xfe, 0xbf, 0x59, 0xfe, 0xcf, 0x8d, 0xfe, 0xcf, 0x23, 0xfe, 0x32, 0xc0, 0xfd, 0x92, 0x76, 0xff, 0xe2, 0x09, 0x00, 0xc7, 0xb0, 0xff, 0xbb, 0xf6, 0xff, 0xce, 0x2d, 0xff, 0x0b, 0x61, 0x1b, 0x60, 0x70, 0x20, 0x12, 0x8b, 0x0a, 0xfd, 0xae, 0x0d, 0x32, 0x12, 0x04, 0x4f, 0x81, 0xff, 0x92, 0x44, 0x03, 0xa7, 0x97, 0xfc, 0x8e, 0x22, 0xf7, 0x6d, 0xbf, 0xf9, 0x38, 0xe2, 0x00, 0x18, 0xcf, 0xff, 0x5f, 0x00, 0xfe, 0xbb, 0xbb, 0xfd, 0x0a, 0xc1, 0xfd, 0x4f, 0x25, 0xfc, 0x55, 0x5b, 0xfd, 0xf6, 0x1d, 0x00, 0x17, 0x2a, 0x00, 0xb3, 0x14, 0xff, 0x4c, 0xe7, 0xfd, 0xf0, 0xe7, 0xfe, 0x19, 0x8a, 0xfe, 0xb7, 0xa2, 0xfe, 0xe6, 0x4e, 0xfe, 0x3e, 0xf5, 0xfd, 0x5e, 0x66, 0xfe, 0x1b, 0x00, 0xff, 0x3a, 0x4a, 0xff, 0x06, 0x7a, 0xff, 0xcb, 0x10, 0x00, 0xa6, 0x7a, 0xff, 0xb8, 0x4c, 0x19, 0xce, 0x19, 0x1e, 0x27, 0x79, 0x09, 0x7c, 0x5e, 0x0b, 0x41, 0x85, 0x04, 0x23, 0x55, 0x01, 0xf3, 0x16, 0x03, 0x7d, 0x6b, 0xfc, 0xfc, 0x71, 0xf7, 0x0f, 0x0c, 0xfb, 0xff, 0x60, 0x01, 0x44, 0x3b, 0xff, 0x08, 0x35, 0xfe, 0xc8, 0xc7, 0xfd, 0xb0, 0x10, 0xfe, 0x26, 0x66, 0xfd, 0x95, 0x63, 0xfe, 0x85, 0x6f, 0x00, 0x0b, 0x21, 0x00, 0x75, 0x11, 0xff, 0x43, 0x53, 0xfe, 0x0d, 0x53, 0xff, 0xe3, 0x85, 0xfe, 0xc9, 0x7d, 0xfe, 0xa9, 0xfb, 0xfd, 0xa5, 0xcf, 0xfd, 0x0e, 0x68, 0xfe, 0xa4, 0xcc, 0xfe, 0x7b, 0x60, 0xff, 0x40, 0xc5, 0xff, 0xac, 0x1f, 0x00, 0x04, 0x89, 0xff, 0x74, 0x62, 0x17, 0x56, 0xca, 0x1b, 0xe8, 0x79, 0x08, 0x76, 0x82, 0x0a, 0xaa, 0x71, 0x04, 0x4c, 0x5b, 0x01, 0x80, 0xfc, 0x02, 0xe2, 0x97, 0xfc, 0x50, 0x0d, 0xf8, 0x61, 0x40, 0xfc, 0x7d, 0xa5, 0x01, 0xe3, 0xd9, 0xfe, 0xa0, 0xc0, 0xfe, 0xce, 0x49, 0xfe, 0x0b, 0x2c, 0xfe, 0xeb, 0x5e, 0xfe, 0x8a, 0xe8, 0xfe, 0xe2, 0xd7, 0xff, 0x1d, 0xe4, 0xff, 0xa5, 0x3f, 0xff, 0xc7, 0x84, 0xfe, 0x1f, 0x65, 0xff, 0xf9, 0xa6, 0xfe, 0xaa, 0xec, 0xfe, 0x08, 0x80, 0xfe, 0xf3, 0x0d, 0xfe, 0xe9, 0x46, 0xfe, 0x3f, 0xa9, 0xfe, 0x45, 0x63, 0xff, 0x47, 0xcc, 0xff, 0x6d, 0x15, 0x00, 0x35, 0x79, 0xff, 0x63, 0x5c, 0x15, 0x1a, 0x4b, 0x19, 0xba, 0x07, 0x08, 0xf4, 0x9b, 0x09, 0x1f, 0xbe, 0x03, 0xb5, 0xbf, 0x01, 0xa2, 0x5b, 0x03, 0x5a, 0xfd, 0xfc, 0xef, 0xc5, 0xf8, 0xdc, 0x79, 0xfd, 0x55, 0xc9, 0x02, 0x78, 0x96, 0xff, 0x34, 0x56, 0xff, 0xfc, 0x8a, 0xfe, 0x68, 0x65, 0xfe, 0xa6, 0x20, 0xff, 0xc3, 0x32, 0xff, 0x2a, 0x75, 0xff, 0x60, 0xd1, 0xff, 0x2f, 0x88, 0xff, 0x28, 0xe9, 0xfe, 0x7d, 0xc7, 0xff, 0x80, 0xe2, 0xfe, 0x21, 0x28, 0xff, 0x9c, 0xb7, 0xfe, 0xd8, 0x1f, 0xfe, 0x20, 0x8c, 0xfe, 0x9e, 0xee, 0xfe, 0xd3, 0x69, 0xff, 0x1c, 0xcb, 0xff, 0xb3, 0x0d, 0x00, 0x43, 0x86, 0xff, 0xde, 0x80, 0x14, 0x4a, 0xd2, 0x17, 0xe5, 0xe4, 0x06, 0x6e, 0x89, 0x08, 0xa6, 0x4d, 0x03, 0x9d, 0xfa, 0x01, 0x70, 0x1d, 0x04, 0x05, 0x52, 0xfe, 0x84, 0x3e, 0xfa, 0xb1, 0xd2, 0xfe, 0xbe, 0xc5, 0x03, 0x16, 0x1e, 0x00, 0x25, 0x41, 0xff, 0xa2, 0x0f, 0xfe, 0x9c, 0x22, 0xfe, 0xd7, 0x5c, 0xff, 0xa8, 0x81, 0xff, 0xbb, 0x93, 0xff, 0x7d, 0xe8, 0xff, 0xb0, 0xa2, 0xff, 0xbe, 0xe3, 0xfe, 0xb1, 0xb8, 0xff, 0x25, 0x09, 0xff, 0xcb, 0x6f, 0xff, 0xc4, 0xf4, 0xfe, 0x0c, 0x4e, 0xfe, 0xf1, 0xd0, 0xfe, 0xe2, 0x3c, 0xff, 0x07, 0x92, 0xff, 0xa3, 0xbd, 0xff, 0x78, 0xcb, 0xff, 0xd5, 0x28, 0xff, 0x90, 0x72, 0x14, 0x71, 0x63, 0x18, 0x91, 0xd0, 0x07, 0x4f, 0x4c, 0x09, 0xe5, 0xdb, 0x03, 0xe1, 0x70, 0x02, 0x8a, 0x4a, 0x04, 0x21, 0xfa, 0xfd, 0x1a, 0xb0, 0xf9, 0x19, 0x4f, 0xfe, 0x68, 0x50, 0x03, 0x8c, 0xbe, 0xff, 0x29, 0xe0, 0xfe, 0x8e, 0xb6, 0xfd, 0xe3, 0x32, 0xfe, 0x32, 0x93, 0xff, 0xbb, 0x62, 0xff, 0xc9, 0x57, 0xff, 0x57, 0xd2, 0xff, 0x82, 0xa4, 0xff, 0xb1, 0xfa, 0xfe, 0xc2, 0xeb, 0xff, 0xb2, 0x28, 0xff, 0xd7, 0x92, 0xff, 0x48, 0x40, 0xff, 0x53, 0x74, 0xfe, 0x65, 0xb2, 0xfe, 0x93, 0xe6, 0xfe, 0x7e, 0x12, 0xff, 0xc9, 0x69, 0xff, 0x99, 0xbd, 0xff, 0x23, 0x49, 0xff, 0x54, 0xcc, 0x14, 0x4b, 0xa6, 0x18, 0x5a, 0x70, 0x07, 0xde, 0xad, 0x08, 0x2c, 0x68, 0x03, 0xb1, 0x46, 0x02, 0xef, 0x59, 0x04, 0x7d, 0xff, 0xfd, 0xd8, 0x58, 0xf9, 0x9f, 0x03, 0xfe, 0x03, 0x77, 0x03, 0xbf, 0xc9, 0xff, 0xed, 0x94, 0xfe, 0xa6, 0x4b, 0xfd, 0x9e, 0xdc, 0xfd, 0xe6, 0xd4, 0xff, 0xbf, 0x2a, 0x00, 0xbe, 0xfb, 0xff, 0x60, 0x18, 0x00, 0x6b, 0xa9, 0xff, 0x50, 0xdc, 0xfe, 0xea, 0xa6, 0xff, 0x1d, 0xd2, 0xfe, 0xa5, 0x41, 0xff, 0x56, 0x10, 0xff, 0xcd, 0xab, 0xfe, 0xd3, 0x35, 0xff, 0xe8, 0x53, 0xff, 0x93, 0x46, 0xff, 0x40, 0x5c, 0xff, 0x52, 0x8e, 0xff, 0xb7, 0x22, 0xff, 0x2e, 0xc9, 0x15, 0x3c, 0x24, 0x1a, 0x96, 0xd8, 0x07, 0x12, 0x83, 0x08, 0xf0, 0xbd, 0x02, 0xde, 0x8c, 0x01, 0x21, 0xa5, 0x03, 0x4a, 0x01, 0xfd, 0x69, 0x06, 0xf8, 0xe6, 0xc2, 0xfc, 0x55, 0x8f, 0x03, 0xd0, 0x7e, 0x00, 0x6b, 0xe1, 0xfe, 0x22, 0x4b, 0xfd, 0xa2, 0xc4, 0xfd, 0xe0, 0xa4, 0xff, 0x55, 0x09, 0x00, 0xd7, 0xf8, 0xff, 0x6c, 0x31, 0x00, 0xa1, 0x15, 0x00, 0xf5, 0x48, 0xff, 0xe3, 0xf2, 0xff, 0x1c, 0x0b, 0xff, 0x62, 0x47, 0xff, 0x16, 0xee, 0xfe, 0x64, 0x46, 0xfe, 0x15, 0xc6, 0xfe, 0x77, 0x55, 0xff, 0x19, 0xd4, 0xff, 0x65, 0x3e, 0x00, 0x06, 0x3a, 0x00, 0x01, 0x4d, 0xff, 0xc8, 0x9c, 0x17, 0x89, 0x3a, 0x1c, 0x4b, 0x42, 0x08, 0xea, 0x1b, 0x09, 0x2a, 0xd8, 0x02, 0xb3, 0x89, 0x01, 0x86, 0x90, 0x03, 0x39, 0x12, 0xfc, 0x90, 0x45, 0xf6, 0x41, 0x4a, 0xfb, 0x1c, 0xae, 0x03, 0x54, 0x62, 0x00, 0x41, 0xea, 0xfd, 0x29, 0x5f, 0xfc, 0x23, 0x31, 0xfd, 0xa8, 0x8e, 0xff, 0x88, 0x45, 0x00, 0xab, 0x0f, 0x00, 0x2b, 0x6c, 0x00, 0x42, 0x61, 0x00, 0xcb, 0x32, 0xff, 0x71, 0xe0, 0xff, 0x31, 0xfa, 0xfe, 0x0d, 0x4f, 0xff, 0x59, 0x1a, 0xff, 0x41, 0x72, 0xfe, 0xd8, 0x01, 0xff, 0x61, 0x97, 0xff, 0x86, 0xb7, 0xff, 0x9a, 0xe9, 0xff, 0xc7, 0x12, 0x00, 0x7b, 0x8f, 0xff, 0x3a, 0xc9, 0x1a, 0xd7, 0x0b, 0x1f, 0x90, 0xb2, 0x07, 0xf5, 0xa1, 0x09, 0x80, 0xd3, 0x02, 0x81, 0x6d, 0x01, 0x11, 0x84, 0x03, 0xb4, 0xbc, 0xfa, 0x63, 0xae, 0xf4, 0xe0, 0xe0, 0xfa, 0x0a, 0x95, 0x04, 0x80, 0x1b, 0x00, 0x86, 0xee, 0xfc, 0x59, 0x72, 0xfb, 0xc9, 0xa1, 0xfc, 0xa0, 0x24, 0xff, 0x52, 0xc4, 0xff, 0x67, 0x8f, 0xff, 0xfd, 0x10, 0x00, 0x6c, 0x13, 0x00, 0x4a, 0xbd, 0xfe, 0x38, 0xd6, 0xff, 0xd5, 0x05, 0xff, 0x47, 0x53, 0xff, 0xf4, 0xe6, 0xfe, 0xb5, 0x2c, 0xfe, 0x2f, 0xca, 0xfe, 0x8e, 0x7f, 0xff, 0x7f, 0xc8, 0xff, 0x04, 0x0b, 0x00, 0x4c, 0x4f, 0x00, 0x3c, 0xa2, 0xff, 0x51, 0x5d, 0x1d, 0x5e, 0x61, 0x22, 0x39, 0xc5, 0x07, 0x96, 0xaf, 0x09, 0x6d, 0xcc, 0x02, 0x4a, 0x06, 0x01, 0x85, 0x88, 0x03, 0x53, 0x64, 0xf9, 0x84, 0x84, 0xf3, 0xc3, 0xcf, 0xfa, 0xde, 0x82, 0x04, 0x7e, 0xe9, 0xff, 0x7f, 0xd7, 0xfc, 0x43, 0xcb, 0xfa, 0x6d, 0x2f, 0xfc, 0xfb, 0xe7, 0xfe, 0x15, 0x8f, 0xff, 0xc0, 0xc2, 0xff, 0xc0, 0xdd, 0xff, 0x0b, 0xd6, 0xff, 0xc5, 0x8a, 0xfe, 0xf9, 0x7d, 0xff, 0xf5, 0x77, 0xfe, 0xf3, 0xec, 0xfe, 0x08, 0x81, 0xfe, 0x95, 0xe1, 0xfd, 0x2d, 0xb1, 0xfe, 0xbd, 0x6b, 0xff, 0x4b, 0xda, 0xff, 0x80, 0x03, 0x00, 0xef, 0x5d, 0x00, 0x62, 0x97, 0xff, 0x6f, 0x1d, 0x1e, 0x50, 0xbe, 0x24, 0xa6, 0xaf, 0x09, 0x01, 0x6d, 0x0a, 0x49, 0xf5, 0x02, 0x3b, 0xc3, 0xff, 0x65, 0x24, 0x03, 0x9a, 0x45, 0xf9, 0x30, 0xd0, 0xf3, 0xce, 0xf9, 0xfa, 0xb2, 0x2c, 0x02, 0xc4, 0xcb, 0xfe, 0xfb, 0xb3, 0xfd, 0x5d, 0x86, 0xfb, 0x18, 0x38, 0xfc, 0x74, 0x51, 0xfe, 0xe4, 0x0f, 0xff, 0x7a, 0x64, 0x00, 0xba, 0x30, 0x00, 0x8d, 0x51, 0xff, 0x67, 0x4b, 0xfe, 0x7f, 0x60, 0xff, 0xbf, 0x8b, 0xfe, 0xe4, 0xdf, 0xfe, 0x85, 0x4a, 0xfe, 0x7c, 0xca, 0xfd, 0xc8, 0x7d, 0xfe, 0x89, 0xe8, 0xfe, 0xb3, 0xa1, 0xff, 0x66, 0xf0, 0xff, 0x6e, 0x49, 0x00, 0xfd, 0x8c, 0xff, 0x77, 0x1a, 0x1f, 0x45, 0x8a, 0x25, 0xbf, 0x96, 0x0a, 0x74, 0x62, 0x0c, 0x34, 0x49, 0x04, 0x8f, 0x38, 0xff, 0xa7, 0x88, 0x01, 0x77, 0x06, 0xf8, 0xf3, 0x55, 0xf4, 0xd0, 0x10, 0xfd, 0x34, 0x7b, 0x00, 0x19, 0xd3, 0xfb, 0x38, 0xbe, 0xfd, 0x13, 0xf0, 0xfc, 0xb8, 0xe0, 0xfd, 0x70, 0x63, 0xfe, 0x9c, 0xa7, 0xfd, 0xea, 0xd9, 0xff, 0x74, 0x92, 0x00, 0x4b, 0x6c, 0xff, 0x53, 0xae, 0xfe, 0x7e, 0x92, 0xff, 0xce, 0x60, 0xfe, 0xf7, 0xb9, 0xfe, 0x63, 0xd8, 0xfd, 0xbb, 0x6c, 0xfd, 0x8c, 0x56, 0xfe, 0x99, 0x67, 0xfe, 0x5a, 0x1d, 0xff, 0x3c, 0xc6, 0xff, 0xeb, 0x39, 0x00, 0xed, 0x75, 0xff, 0xda, 0x2e, 0x22, 0x49, 0x0c, 0x26, 0x91, 0x94, 0x08, 0x23, 0xc1, 0x0d, 0x54, 0xb0, 0x04, 0x3c, 0x33, 0xff, 0x0f, 0x2f, 0x01, 0x4f, 0x8a, 0xf6, 0xf7, 0x0f, 0xf5, 0xdf, 0x7e, 0x00, 0x74, 0x5a, 0x00, 0x3e, 0xd1, 0xf7, 0xc3, 0x5c, 0xfc, 0xf5, 0x6e, 0xfd, 0xd3, 0x94, 0xff, 0xc3, 0xdf, 0xff, 0xff, 0x17, 0xfd, 0x01, 0x2f, 0xff, 0x92, 0xd3, 0x00, 0x56, 0x1a, 0xff, 0x30, 0x5e, 0xfe, 0x71, 0xb7, 0xff, 0x9b, 0xed, 0xfd, 0xe1, 0x86, 0xfe, 0x0c, 0x53, 0xfd, 0x87, 0xea, 0xfc, 0x89, 0x63, 0xfe, 0x7d, 0x4b, 0xfe, 0x0e, 0xab, 0xfe, 0xa8, 0xa0, 0xff, 0x73, 0x12, 0x00, 0xb0, 0x10, 0xff, 0xd6, 0x9f, 0x26, 0x90, 0xfa, 0x29, 0x1f, 0x85, 0x04, 0x47, 0x90, 0x0a, 0xa4, 0x32, 0x03, 0x93, 0x5f, 0xff, 0xc0, 0x8f, 0x04, 0x2d, 0xbe, 0xf6, 0xb8, 0x52, 0xf3, 0x8b, 0x38, 0x02, 0x4e, 0x8a, 0x03, 0xbf, 0xe0, 0xf6, 0x8b, 0xe3, 0xf9, 0xc1, 0x90, 0xfc, 0xbc, 0x06, 0x00, 0x0f, 0x1a, 0x01, 0x91, 0xc9, 0xfc, 0xe8, 0x18, 0xfe, 0xf6, 0xe6, 0x00, 0x82, 0x4f, 0xff, 0xc5, 0xc6, 0xfd, 0xfc, 0xb6, 0xff, 0x27, 0xc8, 0xfd, 0xdb, 0x73, 0xfe, 0xa3, 0x23, 0xfd, 0x6f, 0x3d, 0xfc, 0xf6, 0x62, 0xfe, 0xd2, 0x81, 0xfe, 0xfd, 0x76, 0xfe, 0xc8, 0x5d, 0xff, 0x69, 0x48, 0x00, 0x80, 0x3a, 0xff, 0xc0, 0x38, 0x2b, 0x43, 0xe9, 0x2b, 0xe8, 0x1d, 0x01, 0x91, 0xe0, 0x08, 0xd1, 0x55, 0x00, 0x7c, 0x35, 0x00, 0xcc, 0x22, 0x07, 0xba, 0xb6, 0xf6, 0xfd, 0x38, 0xf2, 0x5e, 0x26, 0x03, 0x1c, 0x78, 0x07, 0x52, 0x27, 0xf7, 0xef, 0x99, 0xf7, 0x8c, 0x08, 0xfa, 0xb5, 0x98, 0xff, 0xb9, 0xd6, 0x01, 0xee, 0x28, 0xfc, 0x67, 0xd0, 0xfc, 0xee, 0x9d, 0x00, 0x7b, 0x4b, 0xff, 0x7d, 0x09, 0xfd, 0xe1, 0xdd, 0xff, 0x69, 0xbd, 0xfd, 0xe5, 0xc2, 0xfe, 0x4a, 0x41, 0xfd, 0xa1, 0xad, 0xfb, 0x52, 0x21, 0xfe, 0xfb, 0xca, 0xfe, 0x75, 0xcc, 0xfe, 0x9e, 0x89, 0xff, 0x9e, 0x23, 0x00, 0xcb, 0xd8, 0xfe, 0x1f, 0x9b, 0x2d, 0x7b, 0xc6, 0x2d, 0xb7, 0xd8, 0x00, 0xe7, 0x38, 0x07, 0x1f, 0xdf, 0xfd, 0x36, 0xee, 0x00, 0x97, 0xb8, 0x08, 0x54, 0xcd, 0xf7, 0xe2, 0x1f, 0xf0, 0x86, 0xc2, 0x01, 0x86, 0xdd, 0x0a, 0x71, 0x98, 0xf9, 0x0c, 0xb0, 0xf6, 0xcb, 0x43, 0xf6, 0xa5, 0xed, 0xfd, 0x6e, 0x75, 0x03, 0x84, 0x47, 0xfd, 0x55, 0xf1, 0xfb, 0xaf, 0xb5, 0xff, 0x8f, 0xf4, 0xfe, 0xea, 0xfc, 0xfc, 0x65, 0xe2, 0xff, 0x26, 0x27, 0xfd, 0x34, 0xad, 0xfe, 0xd2, 0x7c, 0xfd, 0x7b, 0xd1, 0xfb, 0x65, 0x49, 0xfe, 0x84, 0x33, 0xff, 0x09, 0xf9, 0xfe, 0x28, 0xa8, 0xff, 0xd8, 0xf4, 0xff, 0x1d, 0x86, 0xfe, 0xd9, 0x19, 0x2e, 0x1a, 0xed, 0x2e, 0x53, 0x99, 0x02, 0x5d, 0x1c, 0x07, 0xbb, 0x9c, 0xfc, 0xa0, 0x82, 0x00, 0xb7, 0x5a, 0x08, 0xb5, 0xab, 0xf8, 0xe4, 0x5a, 0xee, 0x53, 0x6a, 0xff, 0xd6, 0x26, 0x0c, 0x68, 0x27, 0xfd, 0xe7, 0x31, 0xf7, 0x42, 0x51, 0xf3, 0x75, 0x4f, 0xfc, 0x91, 0x10, 0x04, 0x7a, 0xbd, 0xff, 0x4e, 0xb1, 0xfb, 0x0d, 0xaf, 0xfe, 0x03, 0x1d, 0xff, 0x5e, 0x8a, 0xfc, 0x9c, 0x59, 0xff, 0xcd, 0xf5, 0xfc, 0x1f, 0xe6, 0xfe, 0x0e, 0xac, 0xfd, 0x8b, 0x1c, 0xfc, 0x40, 0xcf, 0xfd, 0x26, 0x1d, 0xff, 0x78, 0x2f, 0xff, 0x2d, 0x68, 0xff, 0x90, 0xd0, 0xff, 0xb7, 0x65, 0xfe, 0x61, 0xb2, 0x2c, 0x1f, 0x1d, 0x2f, 0x50, 0x68, 0x06, 0x80, 0xe2, 0x08, 0x16, 0x4a, 0xfc, 0xbf, 0xd4, 0xff, 0x84, 0x15, 0x07, 0x34, 0xd6, 0xf8, 0x4a, 0xe8, 0xec, 0xaf, 0x63, 0xfc, 0x2f, 0x44, 0x0b, 0xb8, 0x79, 0x00, 0x32, 0x82, 0xfb, 0xeb, 0xc1, 0xf1, 0x46, 0x4a, 0xf9, 0x46, 0x1b, 0x04, 0x62, 0xba, 0x01, 0xa9, 0x12, 0xfd, 0xc3, 0xa4, 0xfd, 0x0f, 0xfb, 0xfe, 0x04, 0xf6, 0xfc, 0xc8, 0x2f, 0xff, 0x64, 0x45, 0xfd, 0xb2, 0x64, 0xff, 0xde, 0xa0, 0xfd, 0x81, 0xc9, 0xfb, 0x5d, 0x8b, 0xfd, 0xa4, 0x70, 0xfe, 0x48, 0x3e, 0xff, 0xc1, 0x35, 0xff, 0xaa, 0xf7, 0xff, 0x37, 0xfa, 0xfe, 0x97, 0x71, 0x2a, 0x1c, 0xb0, 0x2d, 0xa3, 0x21, 0x0a, 0xfc, 0x2e, 0x0a, 0xc9, 0xbb, 0xfd, 0x07, 0xa9, 0xff, 0x89, 0xc5, 0x04, 0xd6, 0x10, 0xfa, 0xed, 0xf4, 0xeb, 0xa7, 0x3b, 0xf9, 0x99, 0x50, 0x09, 0xf9, 0x30, 0x01, 0x91, 0x36, 0x00, 0xb2, 0x83, 0xf3, 0x6a, 0xe9, 0xf4, 0x73, 0x95, 0x02, 0x19, 0x35, 0x02, 0x08, 0xc2, 0xfe, 0xee, 0xd2, 0xfe, 0x0c, 0x91, 0xfe, 0xf5, 0xa3, 0xfd, 0x45, 0x42, 0xff, 0xf9, 0xd9, 0xfc, 0x18, 0x4b, 0xff, 0x5f, 0x98, 0xfd, 0xd4, 0x21, 0xfb, 0x3d, 0x94, 0xfd, 0x1f, 0x1e, 0xfe, 0x09, 0x5e, 0xff, 0x7d, 0x06, 0x00, 0x7a, 0x52, 0x00, 0xbc, 0x59, 0xff, 0xc7, 0xcf, 0x27, 0xf2, 0xe4, 0x2b, 0xc9, 0xc9, 0x0a, 0x51, 0x93, 0x0c, 0xad, 0x80, 0xff, 0x3b, 0xc1, 0xfe, 0x45, 0x70, 0x04, 0x7e, 0x30, 0xfa, 0xa8, 0x73, 0xed, 0x9c, 0xac, 0xf6, 0x5c, 0x49, 0x08, 0xf2, 0xcb, 0x00, 0x67, 0x50, 0x00, 0xd0, 0x47, 0xf8, 0x8c, 0xc8, 0xf1, 0xe8, 0xb3, 0xfe, 0xbd, 0xf9, 0x02, 0xcf, 0x31, 0x00, 0x2c, 0xe7, 0xff, 0x08, 0xae, 0xfe, 0x5c, 0xda, 0xfd, 0xab, 0xba, 0xff, 0x38, 0x92, 0xfc, 0xa9, 0x7b, 0xfd, 0x14, 0x47, 0xfe, 0x80, 0x99, 0xfb, 0xb4, 0x7c, 0xfd, 0x1c, 0xb8, 0xfe, 0x1b, 0x56, 0xff, 0xde, 0x4c, 0x00, 0x41, 0x44, 0x00, 0x7e, 0x50, 0xff, 0x69, 0xdc, 0x25, 0x1b, 0x6e, 0x2a, 0xcf, 0x0b, 0x09, 0x49, 0xdc, 0x0c, 0x7c, 0x26, 0x02, 0x8d, 0xa5, 0xfe, 0x7b, 0x56, 0x02, 0xea, 0x2d, 0xfa, 0x44, 0xfe, 0xf2, 0x80, 0x8e, 0xf6, 0x9f, 0x30, 0x06, 0x63, 0x34, 0x01, 0xfd, 0x75, 0xfc, 0xa1, 0x67, 0xfc, 0xa1, 0x29, 0xf5, 0xb6, 0x66, 0xf9, 0xef, 0xa6, 0x01, 0x70, 0xc4, 0x00, 0x20, 0xf4, 0xff, 0xb1, 0x57, 0x00, 0x43, 0x67, 0xfe, 0x73, 0x11, 0xfe, 0x73, 0x7a, 0xfc, 0xe1, 0x9d, 0xfd, 0xef, 0x2a, 0xff, 0x83, 0x3a, 0xfd, 0x80, 0x06, 0xfd, 0x09, 0xbf, 0xfe, 0xc2, 0x4d, 0xff, 0x38, 0x0b, 0x00, 0x47, 0x2f, 0x00, 0xb0, 0x49, 0xff, 0x5b, 0xf9, 0x22, 0x8d, 0xc4, 0x26, 0x1c, 0xb3, 0x08, 0x23, 0x11, 0x0e, 0xb4, 0x9e, 0x03, 0x8f, 0x89, 0xfe, 0x2d, 0x53, 0x02, 0x95, 0x56, 0xfb, 0x34, 0xa4, 0xf4, 0xa4, 0xef, 0xf6, 0xf9, 0xec, 0x04, 0x4a, 0x9a, 0x02, 0x2d, 0xb5, 0xfb, 0x51, 0xcc, 0xfc, 0xb0, 0xd3, 0xf9, 0xf9, 0x1f, 0xf8, 0xbd, 0x55, 0xff, 0xdd, 0xba, 0x00, 0x3a, 0xba, 0xfe, 0xa5, 0x9d, 0xff, 0xa4, 0xa8, 0xfe, 0x3a, 0xb1, 0xfe, 0x15, 0x85, 0xfd, 0x5d, 0xc2, 0xfd, 0x27, 0xef, 0xfe, 0xe7, 0x16, 0xfe, 0x2b, 0xfc, 0xfc, 0xb8, 0xdf, 0xfe, 0xcf, 0x96, 0xff, 0x5c, 0xc4, 0xff, 0xd1, 0x61, 0x00, 0x99, 0x38, 0xff, 0x32, 0xa0, 0x22, 0xb5, 0x12, 0x23, 0x27, 0xff, 0x06, 0xd1, 0x2c, 0x12, 0x58, 0xd3, 0x03, 0x0e, 0x40, 0xfc, 0x93, 0xd1, 0x03, 0xf1, 0x66, 0xfe, 0x17, 0x9a, 0xf5, 0x69, 0xcd, 0xf4, 0x75, 0x78, 0x02, 0x87, 0xad, 0x03, 0x00, 0x12, 0xfd, 0xdc, 0x73, 0xfe, 0x3c, 0xc4, 0xfb, 0x24, 0x61, 0xf6, 0xa0, 0x24, 0xff, 0xc3, 0x87, 0x01, 0xd1, 0x64, 0xfd, 0x1c, 0xb5, 0xfe, 0xce, 0x5e, 0xfd, 0xf8, 0xc1, 0xfd, 0x68, 0x7b, 0xfe, 0xdc, 0x15, 0xfe, 0x9f, 0xc1, 0xfe, 0x3f, 0x85, 0xfe, 0xf4, 0x5a, 0xfd, 0x31, 0x0f, 0x00, 0xe4, 0x7a, 0x00, 0x56, 0x8e, 0xff, 0xe9, 0xee, 0xff, 0xf0, 0x08, 0xff, 0x4a, 0x4d, 0x1e, 0x24, 0x24, 0x21, 0x67, 0x86, 0x09, 0xa1, 0xcb, 0x10, 0x14, 0x47, 0x03, 0x2c, 0xbb, 0xfc, 0x61, 0x60, 0x03, 0x2e, 0x10, 0xfd, 0x01, 0x5b, 0xf7, 0xb9, 0xc5, 0xf7, 0x10, 0xf5, 0xff, 0xd8, 0x40, 0x01, 0xbd, 0x2e, 0xfe, 0x7f, 0x50, 0xff, 0xf9, 0xf6, 0xfd, 0x5a, 0xd3, 0xf8, 0x5e, 0x97, 0xfc, 0xa3, 0xfe, 0x00, 0x27, 0x18, 0x00, 0x85, 0x05, 0xff, 0x06, 0x5b, 0xfd, 0x1b, 0x58, 0xfe, 0x51, 0xb9, 0xfe, 0x5a, 0xab, 0xfe, 0xa7, 0xb6, 0xfe, 0x8d, 0x62, 0xfe, 0x5b, 0x15, 0xfe, 0x9e, 0x3c, 0xff, 0xaa, 0xb6, 0xff, 0xb4, 0x5d, 0xff, 0x5f, 0xfe, 0xff, 0x3b, 0x68, 0xff, 0xd2, 0x96, 0x1b, 0x65, 0x59, 0x1e, 0x32, 0x00, 0x09, 0x80, 0x48, 0x0e, 0xae, 0xd2, 0x03, 0x3d, 0xcc, 0xff, 0x28, 0x2e, 0x03, 0x74, 0x9c, 0xfc, 0x6b, 0x14, 0xf8, 0xe6, 0x1b, 0xf9, 0x60, 0x1d, 0x00, 0x47, 0x27, 0x00, 0x30, 0x5c, 0xfe, 0xb8, 0xf2, 0xfe, 0xcc, 0xba, 0xfe, 0x84, 0x10, 0xfb, 0xf7, 0x1c, 0xfd, 0x43, 0x58, 0x01, 0xa1, 0x4a, 0x00, 0xf5, 0xac, 0xfe, 0x32, 0xe8, 0xfd, 0xe7, 0x17, 0xff, 0x61, 0xc2, 0xfe, 0x8d, 0x58, 0xfe, 0x57, 0xed, 0xfd, 0x47, 0x18, 0xfe, 0x74, 0xa1, 0xfe, 0x09, 0xea, 0xfe, 0x0c, 0x23, 0xff, 0x77, 0x8b, 0xff, 0xc7, 0x44, 0x00, 0xec, 0x9f, 0xff, 0x3a, 0x46, 0x19, 0xd9, 0x34, 0x1c, 0x1a, 0xf8, 0x07, 0x9b, 0xf2, 0x0b, 0x5c, 0xd6, 0x04, 0xab, 0x3f, 0x01, 0x3b, 0xb0, 0x02, 0x68, 0x8c, 0xfc, 0xea, 0x5b, 0xf8, 0xeb, 0x97, 0xfa, 0x76, 0x7e, 0x00, 0x28, 0x8f, 0xff, 0xa8, 0xb9, 0xfe, 0x3b, 0x24, 0xff, 0x2d, 0xf9, 0xfe, 0x16, 0x30, 0xfc, 0x7e, 0x26, 0xfe, 0xc7, 0x78, 0x01, 0xd0, 0x2e, 0x00, 0x1b, 0xb1, 0xfe, 0xf7, 0x4c, 0xfe, 0xf1, 0x63, 0xff, 0x76, 0xa8, 0xfe, 0x5e, 0x46, 0xfe, 0x3f, 0xbf, 0xfd, 0xc6, 0x13, 0xfe, 0x1b, 0x8d, 0xfe, 0x81, 0xc8, 0xfe, 0xd3, 0x7b, 0xff, 0xe6, 0xd5, 0xff, 0x4e, 0x31, 0x00, 0x90, 0x9c, 0xff, 0xc7, 0x25, 0x17, 0xe8, 0xc5, 0x19, 0x72, 0x02, 0x07, 0xfc, 0x15, 0x0b, 0x52, 0x1e, 0x05, 0xb1, 0x44, 0x01, 0x54, 0x73, 0x02, 0xa8, 0xc2, 0xfc, 0x77, 0x00, 0xf9, 0xb4, 0xff, 0xfb, 0xb5, 0xa8, 0x00, 0xf9, 0x04, 0xff, 0xd7, 0x56, 0xff, 0x36, 0x9f, 0xff, 0x19, 0x04, 0xff, 0x40, 0x50, 0xfd, 0x11, 0xde, 0xfe, 0xd0, 0xc8, 0x00, 0xdd, 0xdb, 0xff, 0xca, 0xe7, 0xfe, 0x05, 0x96, 0xfe, 0xdb, 0x7d, 0xff, 0x09, 0xa3, 0xfe, 0x13, 0x95, 0xfe, 0xb3, 0x3f, 0xfe, 0xc7, 0x70, 0xfe, 0xd3, 0x7c, 0xfe, 0x77, 0x97, 0xfe, 0xdb, 0x79, 0xff, 0x1b, 0xf0, 0xff, 0xde, 0x31, 0x00, 0x63, 0x7e, 0xff, 0x46, 0xa3, 0x14, 0xc2, 0x81, 0x17, 0x9f, 0xbc, 0x06, 0x52, 0xf1, 0x09, 0xba, 0x72, 0x04, 0x32, 0xc1, 0x01, 0x51, 0xd4, 0x02, 0x51, 0xf5, 0xfc, 0x40, 0x91, 0xf9, 0x7f, 0x10, 0xfd, 0xce, 0x35, 0x01, 0xe4, 0x45, 0xff, 0xa1, 0x29, 0x00, 0xa9, 0xef, 0xff, 0xfb, 0x19, 0xff, 0x18, 0x59, 0xfe, 0xa2, 0xfd, 0xfe, 0xee, 0x1a, 0x00, 0xc4, 0xde, 0xff, 0x7f, 0x2a, 0xff, 0xb1, 0xc4, 0xfe, 0xf5, 0xd5, 0xff, 0x1e, 0x35, 0xff, 0x14, 0x21, 0xff, 0xbf, 0x7b, 0xfe, 0x14, 0x4a, 0xfe, 0x1d, 0x7d, 0xfe, 0xa8, 0xc2, 0xfe, 0x78, 0x8d, 0xff, 0xa9, 0xd3, 0xff, 0x55, 0x0c, 0x00, 0x17, 0xa3, 0xff, 0x2a, 0x85, 0x12, 0xf9, 0xcb, 0x14, 0x82, 0x86, 0x06, 0x15, 0x40, 0x09, 0x3a, 0xe1, 0x03, 0xf3, 0x21, 0x02, 0xfc, 0x0f, 0x03, 0x94, 0x77, 0xfd, 0xc5, 0x83, 0xfa, 0xba, 0x79, 0xfe, 0x9d, 0x63, 0x02, 0x49, 0xdd, 0xff, 0x29, 0x95, 0x00, 0x86, 0x35, 0x00, 0x34, 0x60, 0xff, 0x5c, 0x14, 0xff, 0xd3, 0x2b, 0xff, 0x30, 0x9e, 0xff, 0xa1, 0xda, 0xff, 0x70, 0x8e, 0xff, 0x14, 0x35, 0xff, 0x76, 0x0b, 0x00, 0x29, 0x2e, 0xff, 0x84, 0x56, 0xff, 0x30, 0xdd, 0xfe, 0xf5, 0x74, 0xfe, 0x63, 0xb9, 0xfe, 0xe9, 0xfa, 0xfe, 0x8f, 0x84, 0xff, 0xdd, 0xdd, 0xff, 0x3a, 0x11, 0x00, 0xa0, 0x9b, 0xff, 0x85, 0x7b, 0x11, 0x86, 0x38, 0x13, 0x3d, 0x8a, 0x05, 0x33, 0xe3, 0x07, 0x60, 0x23, 0x03, 0x6f, 0x48, 0x02, 0x3a, 0xd5, 0x03, 0x40, 0xc8, 0xfe, 0x47, 0xce, 0xfb, 0x9e, 0xf4, 0xff, 0x3f, 0xc6, 0x03, 0x2a, 0xc3, 0x00, 0xf2, 0xb8, 0x00, 0xe5, 0xd8, 0xff, 0xa0, 0x17, 0xff, 0xbe, 0x35, 0xff, 0x27, 0x60, 0xff, 0xb7, 0xba, 0xff, 0x29, 0x2a, 0x00, 0x22, 0xcb, 0xff, 0x42, 0x26, 0xff, 0xf1, 0xf9, 0xff, 0x16, 0x65, 0xff, 0x5c, 0x9c, 0xff, 0x15, 0x04, 0xff, 0xc6, 0x94, 0xfe, 0xac, 0x0e, 0xff, 0x13, 0x62, 0xff, 0x97, 0xbb, 0xff, 0x1e, 0xf0, 0xff, 0xad, 0xdd, 0xff, 0xdc, 0x2a, 0xff, 0x7b, 0xc1, 0x10, 0x0b, 0x37, 0x12, 0x25, 0xcb, 0x04, 0xad, 0xe7, 0x07, 0x99, 0xef, 0x03, 0xf8, 0x04, 0x03, 0x4a, 0x80, 0x04, 0x9f, 0xb8, 0xff, 0x7e, 0xff, 0xfc, 0x73, 0xac, 0x00, 0x36, 0xc1, 0x03, 0x70, 0x45, 0x00, 0x64, 0xc6, 0xff, 0x0e, 0xf7, 0xfe, 0xe0, 0x23, 0xff, 0xcd, 0xe7, 0xff, 0xd9, 0xc8, 0xff, 0x02, 0xa7, 0xff, 0xce, 0xbf, 0xff, 0xe3, 0x99, 0xff, 0x89, 0x3a, 0xff, 0x35, 0x0e, 0x00, 0x08, 0x87, 0xff, 0x57, 0xf3, 0xff, 0x73, 0x78, 0xff, 0x96, 0xcc, 0xfe, 0xe1, 0x1c, 0xff, 0xa0, 0x56, 0xff, 0x4b, 0x86, 0xff, 0x99, 0x88, 0xff, 0x3c, 0x7f, 0xff, 0xd5, 0x0f, 0xff, 0x35, 0xf4, 0x10, 0x3d, 0x70, 0x13, 0xbc, 0x59, 0x06, 0xe7, 0xc3, 0x08, 0x43, 0x25, 0x04, 0xb3, 0x4b, 0x03, 0x07, 0x84, 0x04, 0xe0, 0xf5, 0xfe, 0x0b, 0xdf, 0xfb, 0x06, 0xb5, 0xff, 0x61, 0x1d, 0x03, 0xc5, 0x04, 0x00, 0xdd, 0xc1, 0xff, 0x25, 0xe2, 0xfe, 0xf2, 0x36, 0xff, 0x26, 0xe4, 0xff, 0xf4, 0x65, 0xff, 0x41, 0x61, 0xff, 0x5d, 0xe2, 0xff, 0xe9, 0xbe, 0xff, 0x24, 0x4d, 0xff, 0xd6, 0x45, 0x00, 0xca, 0x9e, 0xff, 0x85, 0xfe, 0xff, 0xbc, 0xb0, 0xff, 0x8d, 0xe8, 0xfe, 0xb4, 0xe8, 0xfe, 0xc5, 0xe4, 0xfe, 0x67, 0xf0, 0xfe, 0x7f, 0x49, 0xff, 0xc4, 0x9c, 0xff, 0x13, 0x44, 0xff, 0xb3, 0x5c, 0x11, 0xbe, 0xab, 0x13, 0x57, 0xfd, 0x05, 0x23, 0x42, 0x08, 0x9c, 0xeb, 0x03, 0x3e, 0x5b, 0x03, 0x2f, 0xb4, 0x04, 0xea, 0xfb, 0xfe, 0x62, 0x6c, 0xfb, 0x99, 0x2a, 0xff, 0xf8, 0xfc, 0x02, 0x37, 0xf4, 0xff, 0x1a, 0x6a, 0xff, 0x16, 0x95, 0xfe, 0xc1, 0x20, 0xff, 0x1b, 0x57, 0x00, 0x10, 0x4d, 0x00, 0xff, 0xec, 0xff, 0x30, 0xdb, 0xff, 0x83, 0x95, 0xff, 0xaf, 0x31, 0xff, 0xa0, 0xe9, 0xff, 0x9b, 0x2d, 0xff, 0xf2, 0xc3, 0xff, 0xde, 0xba, 0xff, 0x38, 0x69, 0xff, 0x19, 0x7a, 0xff, 0x7b, 0x09, 0xff, 0x80, 0xdb, 0xfe, 0x85, 0x0f, 0xff, 0xbf, 0x68, 0xff, 0x47, 0x3e, 0xff, 0xbd, 0xff, 0x11, 0x1e, 0x51, 0x14, 0x53, 0x91, 0x05, 0xee, 0x4f, 0x07, 0x7f, 0xc5, 0x02, 0x51, 0x94, 0x02, 0x3b, 0x6a, 0x04, 0x90, 0xe1, 0xfe, 0x04, 0x03, 0xfb, 0x6e, 0x01, 0xff, 0x8c, 0xc5, 0x03, 0x33, 0xa7, 0x00, 0x96, 0x92, 0xff, 0x53, 0xe8, 0xfd, 0x7b, 0x25, 0xfe, 0x69, 0x29, 0x00, 0xf1, 0xae, 0x00, 0xcc, 0xa8, 0x00, 0xe4, 0xcb, 0x00, 0x51, 0xff, 0xff, 0xb1, 0x25, 0xff, 0x05, 0xf8, 0xff, 0x7d, 0x10, 0xff, 0xb0, 0x40, 0xff, 0x07, 0x3e, 0xff, 0x6b, 0xff, 0xfe, 0x18, 0x8a, 0xff, 0xbf, 0xf5, 0xff, 0x60, 0xe4, 0xff, 0xaa, 0x9b, 0xff, 0x11, 0x52, 0xff, 0x7f, 0xc5, 0xfe, 0xb9, 0x3f, 0x13, 0x45, 0x29, 0x16, 0x58, 0x07, 0x06, 0xbb, 0x67, 0x07, 0x98, 0x65, 0x02, 0xec, 0x01, 0x02, 0x91, 0x99, 0x03, 0xe1, 0x6e, 0xfd, 0x40, 0x3a, 0xf9, 0x8b, 0x68, 0xfd, 0x83, 0xde, 0x03, 0x59, 0x42, 0x01, 0x02, 0x9b, 0xff, 0x0e, 0x29, 0xfe, 0xa8, 0x90, 0xfe, 0x2c, 0x1a, 0x00, 0x3c, 0x80, 0x00, 0x14, 0x52, 0x00, 0xc4, 0x62, 0x00, 0x43, 0x6c, 0x00, 0x21, 0xbb, 0xff, 0x27, 0x41, 0x00, 0x53, 0x6a, 0xff, 0x64, 0x83, 0xff, 0xdd, 0x33, 0xff, 0x70, 0xab, 0xfe, 0x73, 0x14, 0xff, 0xe1, 0x9e, 0xff, 0xd4, 0x24, 0x00, 0xb8, 0x8c, 0x00, 0x81, 0x44, 0x00, 0xb6, 0x2f, 0xff, 0x42, 0x31, 0x15, 0x81, 0x55, 0x18, 0x67, 0x51, 0x06, 0xce, 0xf3, 0x07, 0x58, 0x6b, 0x02, 0x13, 0xe0, 0x01, 0x77, 0x5f, 0x03, 0xc3, 0x4e, 0xfc, 0xee, 0x5b, 0xf7, 0xf0, 0xd7, 0xfb, 0x35, 0x05, 0x04, 0xb5, 0x19, 0x01, 0x60, 0x97, 0xfe, 0xf6, 0x5a, 0xfd, 0x8a, 0x2f, 0xfe, 0xef, 0x58, 0x00, 0x4f, 0xf9, 0x00, 0xd3, 0x73, 0x00, 0x78, 0xa5, 0x00, 0xb6, 0x7e, 0x00, 0xd3, 0x73, 0xff, 0xfb, 0x51, 0x00, 0x20, 0x5b, 0xff, 0x45, 0x9c, 0xff, 0x65, 0x7d, 0xff, 0xcd, 0xdb, 0xfe, 0x02, 0x3b, 0xff, 0x33, 0xe1, 0xff, 0x3c, 0x03, 0x00, 0x83, 0x00, 0x00, 0xe7, 0x47, 0x00, 0xd4, 0xd7, 0xff, 0x18, 0x31, 0x18, 0x7e, 0xaf, 0x1a, 0xfb, 0xe4, 0x05, 0x50, 0xb5, 0x08, 0x4f, 0x5c, 0x02, 0x14, 0x06, 0x02, 0xa7, 0x78, 0x03, 0x5b, 0x28, 0xfb, 0x80, 0x72, 0xf5, 0x34, 0xdb, 0xfa, 0xb6, 0xf5, 0x04, 0xb5, 0xdc, 0x00, 0xd6, 0x59, 0xfd, 0x0b, 0x44, 0xfc, 0x29, 0x63, 0xfd, 0x65, 0xc8, 0xff, 0x11, 0x99, 0x00, 0xba, 0x19, 0x00, 0x5d, 0xa8, 0x00, 0x23, 0xb9, 0x00, 0xb4, 0x5e, 0xff, 0x52, 0x50, 0x00, 0xc4, 0x69, 0xff, 0xb3, 0x80, 0xff, 0x25, 0x63, 0xff, 0xc5, 0xf5, 0xfe, 0x7a, 0x4e, 0xff, 0x18, 0x03, 0x00, 0x7f, 0xf5, 0xff, 0xfd, 0xf2, 0xff, 0x6d, 0x23, 0x00, 0x3e, 0x90, 0xff, 0xb8, 0xd2, 0x1b, 0x52, 0x83, 0x1d, 0x17, 0xb8, 0x04, 0xe1, 0x57, 0x09, 0x3d, 0x4e, 0x02, 0xab, 0xc6, 0x01, 0x7e, 0x67, 0x03, 0x6c, 0x92, 0xf9, 0x65, 0xf9, 0xf3, 0x1f, 0xe5, 0xfa, 0x07, 0x08, 0x06, 0x05, 0x62, 0x00, 0x92, 0x57, 0xfc, 0x53, 0x68, 0xfb, 0xa7, 0x03, 0xfd, 0x47, 0x7d, 0xff, 0xe3, 0x25, 0x00, 0x39, 0xac, 0xff, 0xa9, 0x41, 0x00, 0xad, 0x6f, 0x00, 0x2b, 0xcc, 0xfe, 0x91, 0x2d, 0x00, 0xcb, 0x67, 0xff, 0xf6, 0x98, 0xff, 0x1f, 0x25, 0xff, 0xdc, 0x80, 0xfe, 0xf0, 0x20, 0xff, 0x46, 0xe6, 0xff, 0x01, 0x08, 0x00, 0xf2, 0x36, 0x00, 0xe5, 0x73, 0x00, 0x86, 0xbd, 0xff, 0x04, 0x13, 0x1f, 0x74, 0xe6, 0x20, 0x01, 0xdd, 0x03, 0x31, 0x81, 0x09, 0xc0, 0x7e, 0x02, 0x4c, 0x65, 0x01, 0x09, 0x66, 0x03, 0x57, 0xf5, 0xf7, 0x0f, 0xa7, 0xf2, 0xcf, 0x1e, 0xfb, 0x95, 0x8e, 0x06, 0x18, 0x1f, 0x00, 0xb0, 0xe6, 0xfb, 0x5c, 0xad, 0xfa, 0xe0, 0xbd, 0xfc, 0xd0, 0x69, 0xff, 0x6e, 0xd1, 0xff, 0x78, 0x86, 0xff, 0x81, 0x0e, 0x00, 0x50, 0x5f, 0x00, 0x15, 0x93, 0xfe, 0x3d, 0xc5, 0xff, 0x75, 0xd7, 0xfe, 0xbc, 0x54, 0xff, 0xe8, 0xc5, 0xfe, 0x9d, 0x37, 0xfe, 0x18, 0x0a, 0xff, 0x0f, 0xc9, 0xff, 0xca, 0x0f, 0x00, 0x12, 0x46, 0x00, 0x1a, 0xb1, 0x00, 0xf4, 0xca, 0xff, 0x43, 0xee, 0x20, 0x5b, 0x49, 0x24, 0x4c, 0xce, 0x04, 0xd2, 0x77, 0x09, 0x3d, 0x1a, 0x02, 0xb4, 0x83, 0x00, 0x81, 0xac, 0x03, 0x41, 0xf8, 0xf6, 0xa0, 0x2b, 0xf2, 0xa9, 0xf0, 0xfa, 0x01, 0xdf, 0x04, 0x6c, 0xd3, 0xff, 0xef, 0xcc, 0xfc, 0x09, 0x57, 0xfa, 0x5a, 0xf9, 0xfb, 0x35, 0xfb, 0xfe, 0xe0, 0xcd, 0xff, 0x10, 0x84, 0x00, 0x48, 0xe1, 0xff, 0x88, 0xc7, 0xff, 0xbd, 0x6c, 0xfe, 0x3c, 0x78, 0xff, 0x80, 0x6c, 0xfe, 0x5c, 0xe4, 0xfe, 0x84, 0x69, 0xfe, 0xfd, 0x07, 0xfe, 0xb0, 0xf3, 0xfe, 0x15, 0x8f, 0xff, 0xa4, 0x2d, 0x00, 0x8d, 0x29, 0x00, 0x09, 0x89, 0x00, 0x23, 0x92, 0xff, 0x11, 0x88, 0x21, 0xd5, 0x93, 0x26, 0x76, 0xe9, 0x06, 0xab, 0x43, 0x0a, 0xd5, 0x5b, 0x02, 0x06, 0xe4, 0xfe, 0xa7, 0x1d, 0x03, 0xdc, 0x24, 0xf7, 0x07, 0xcc, 0xf2, 0x1f, 0x40, 0xfb, 0x80, 0xe2, 0x01, 0xab, 0xa4, 0xfe, 0x47, 0xf3, 0xfd, 0xd1, 0x61, 0xfb, 0x72, 0x49, 0xfc, 0x80, 0x29, 0xfe, 0x90, 0x1d, 0xff, 0x79, 0x40, 0x01, 0x85, 0x4b, 0x00, 0xc5, 0x1b, 0xff, 0xdf, 0x31, 0xfe, 0x75, 0x7c, 0xff, 0xb3, 0xaf, 0xfe, 0x52, 0xed, 0xfe, 0xae, 0x31, 0xfe, 0xe8, 0xf9, 0xfd, 0x37, 0xb3, 0xfe, 0xc5, 0xf3, 0xfe, 0xaf, 0xe5, 0xff, 0xfd, 0x11, 0x00, 0x94, 0x6f, 0x00, 0x67, 0x9a, 0xff, 0x8d, 0x54, 0x22, 0x4d, 0x9b, 0x27, 0xd4, 0x66, 0x08, 0xb2, 0x4c, 0x0c, 0x7e, 0x91, 0x03, 0xcd, 0xe2, 0xfd, 0x56, 0x59, 0x01, 0x73, 0x0c, 0xf6, 0x73, 0x80, 0xf3, 0x64, 0x6f, 0xfd, 0xbb, 0x7c, 0xff, 0xcb, 0x83, 0xfb, 0x66, 0xa1, 0xfe, 0x29, 0x40, 0xfd, 0x09, 0xca, 0xfd, 0x10, 0xd0, 0xfd, 0xcc, 0x78, 0xfd, 0x7a, 0xd1, 0x00, 0xd0, 0xbf, 0x00, 0xfe, 0x55, 0xff, 0x3b, 0xca, 0xfe, 0x67, 0x84, 0xff, 0x48, 0x63, 0xfe, 0x0f, 0xd9, 0xfe, 0x49, 0xda, 0xfd, 0x90, 0xad, 0xfd, 0x7c, 0x8f, 0xfe, 0x0a, 0x48, 0xfe, 0xf9, 0x5d, 0xff, 0x79, 0xfc, 0xff, 0x41, 0x70, 0x00, 0xc0, 0x8d, 0xff, 0xf2, 0x99, 0x24, 0x03, 0xad, 0x27, 0x38, 0xa1, 0x07, 0x71, 0xae, 0x0e, 0xe3, 0xb6, 0x04, 0x2c, 0x7c, 0xfd, 0x6e, 0xa6, 0xff, 0xa2, 0xad, 0xf4, 0x61, 0x73, 0xf4, 0x7c, 0x4e, 0x00, 0xe5, 0xc2, 0xfd, 0x91, 0xba, 0xf7, 0x77, 0x8e, 0xfe, 0x01, 0x40, 0xfe, 0xde, 0xfc, 0xff, 0xe4, 0x56, 0xfe, 0x00, 0xf5, 0xfb, 0x6b, 0x75, 0x00, 0xf5, 0x4c, 0x01, 0xb4, 0xf1, 0xfe, 0xee, 0xd5, 0xfe, 0xce, 0xe6, 0xff, 0x72, 0x23, 0xfe, 0x90, 0xac, 0xfe, 0xc8, 0x0b, 0xfd, 0x16, 0x28, 0xfd, 0x8b, 0x84, 0xfe, 0x4c, 0xf8, 0xfd, 0x2f, 0xe5, 0xfe, 0x5e, 0xd5, 0xff, 0x62, 0x2e, 0x00, 0x9b, 0x29, 0xff, 0xde, 0x81, 0x28, 0x01, 0xf4, 0x27, 0xeb, 0xb9, 0x04, 0xf3, 0x33, 0x10, 0x23, 0xa0, 0x04, 0x78, 0x8c, 0xfd, 0x2d, 0xdf, 0xff, 0x77, 0xe0, 0xf2, 0x13, 0x86, 0xf5, 0xb0, 0x75, 0x04, 0x9a, 0x96, 0xfd, 0x54, 0x0b, 0xf3, 0xd2, 0x22, 0xfd, 0x19, 0xf6, 0xfe, 0xb6, 0xa6, 0x01, 0x8d, 0x1c, 0x00, 0x6d, 0x66, 0xfb, 0x63, 0x97, 0xff, 0x08, 0xa6, 0x01, 0x88, 0x9b, 0xfe, 0x2b, 0x5d, 0xfe, 0xc6, 0x0d, 0x00, 0x0d, 0x8e, 0xfd, 0xe0, 0x75, 0xfe, 0xb3, 0x9c, 0xfc, 0x88, 0xae, 0xfc, 0x69, 0xb6, 0xfe, 0xb4, 0xec, 0xfd, 0x08, 0x60, 0xfe, 0xfa, 0xbd, 0xff, 0xf3, 0x22, 0x00, 0x1b, 0xd1, 0xfe, 0x97, 0x73, 0x2d, 0x76, 0x57, 0x2b, 0x12, 0xe7, 0xff, 0xfb, 0xbf, 0x0d, 0x07, 0xc3, 0x03, 0xb1, 0xd5, 0xfd, 0xf4, 0xcd, 0x02, 0x62, 0x93, 0xf2, 0xfb, 0x1c, 0xf4, 0x85, 0xfc, 0x06, 0x7a, 0x89, 0x00, 0x4d, 0xef, 0xf0, 0xa3, 0x78, 0xfa, 0x19, 0x92, 0xfe, 0x79, 0xab, 0x02, 0x3f, 0x88, 0x01, 0xca, 0xd6, 0xfa, 0x9a, 0xad, 0xfe, 0x6f, 0xf9, 0x01, 0x7f, 0x7a, 0xfe, 0x2a, 0xa5, 0xfd, 0xd1, 0x61, 0x00, 0x1a, 0x59, 0xfd, 0x0d, 0x32, 0xfe, 0xeb, 0x4b, 0xfc, 0x03, 0x15, 0xfc, 0xde, 0xca, 0xfe, 0x62, 0x23, 0xfe, 0x69, 0x29, 0xfe, 0xdb, 0x76, 0xff, 0x74, 0x48, 0x00, 0x84, 0xdf, 0xfe, 0xb9, 0x97, 0x33, 0x0c, 0x98, 0x2e, 0xd8, 0xfa, 0xf9, 0x1f, 0xc7, 0x0a, 0x5a, 0x38, 0x01, 0xd1, 0xe8, 0xfe, 0x58, 0x4c, 0x07, 0xf4, 0x03, 0xf2, 0xed, 0x10, 0xf2, 0x81, 0xe9, 0x08, 0xde, 0xda, 0x04, 0xed, 0x73, 0xf0, 0x6f, 0x6d, 0xf7, 0x84, 0xc1, 0xfc, 0xe5, 0x23, 0x03, 0xdb, 0xa0, 0x02, 0x84, 0xa3, 0xf9, 0xb6, 0xf6, 0xfc, 0x15, 0x5c, 0x02, 0xa0, 0x11, 0xff, 0x94, 0xac, 0xfc, 0x38, 0x53, 0x00, 0x97, 0x5f, 0xfd, 0xb0, 0x84, 0xfe, 0x3c, 0x55, 0xfc, 0x40, 0x47, 0xfb, 0xac, 0xa5, 0xfe, 0x65, 0x43, 0xfe, 0x0b, 0x25, 0xfe, 0x3b, 0x98, 0xff, 0xff, 0x88, 0x00, 0x00, 0xc0, 0xfe, 0xaf, 0x01, 0x38, 0xe8, 0x17, 0x30, 0x29, 0xa8, 0xf6, 0x0f, 0x67, 0x09, 0xfc, 0x37, 0xfe, 0x0a, 0x37, 0x00, 0xb6, 0xe0, 0x09, 0xe4, 0xe8, 0xf1, 0x19, 0x99, 0xf0, 0xf8, 0x9c, 0x09, 0xe2, 0x3c, 0x09, 0xe0, 0x63, 0xf0, 0xf2, 0x16, 0xf5, 0x8c, 0x24, 0xfa, 0xaa, 0x69, 0x02, 0xca, 0x7c, 0x03, 0xc6, 0x61, 0xf9, 0x24, 0xb8, 0xfb, 0x62, 0xcb, 0x01, 0x1d, 0xfd, 0xfe, 0x95, 0x0a, 0xfc, 0xa4, 0x97, 0x00, 0x64, 0x34, 0xfd, 0xce, 0xe6, 0xfe, 0xb2, 0x71, 0xfc, 0xad, 0x92, 0xfa, 0x0a, 0x88, 0xfe, 0x62, 0xd6, 0xfe, 0x76, 0x7e, 0xfe, 0xf5, 0x8e, 0xff, 0x2e, 0x45, 0x00, 0xb6, 0x6d, 0xfe, 0xc1, 0xee, 0x3a, 0xb3, 0x2d, 0x32, 0x79, 0x4c, 0xf5, 0x58, 0x65, 0x07, 0x62, 0x6a, 0xfb, 0x72, 0xa0, 0x01, 0xa4, 0x2b, 0x0c, 0xc9, 0x90, 0xf2, 0x80, 0x1e, 0xee, 0x0d, 0x85, 0x08, 0x78, 0x93, 0x0d, 0x30, 0x5a, 0xf2, 0x57, 0x91, 0xf3, 0x6e, 0xe4, 0xf5, 0x1e, 0x03, 0x01, 0x4d, 0xa7, 0x05, 0xf0, 0x06, 0xfa, 0x19, 0x91, 0xfa, 0x45, 0xbf, 0x00, 0x6a, 0xba, 0xfe, 0x9b, 0x01, 0xfc, 0xbf, 0xc1, 0x00, 0xb0, 0xb2, 0xfc, 0x8f, 0xcc, 0xfe, 0xbc, 0x89, 0xfc, 0xa9, 0xa7, 0xfa, 0x43, 0xd3, 0xfe, 0x24, 0x52, 0xff, 0xc2, 0xae, 0xfe, 0x34, 0x8b, 0xff, 0xe8, 0x15, 0x00, 0xea, 0x23, 0xfe, 0x01, 0xdd, 0x3c, 0x54, 0x5f, 0x33, 0xe4, 0x83, 0xf6, 0x9b, 0x27, 0x06, 0xf6, 0x7e, 0xf9, 0xaf, 0x00, 0x02, 0xc9, 0x78, 0x0c, 0xef, 0x2d, 0xf4, 0x07, 0x87, 0xeb, 0xdd, 0xb6, 0x06, 0x97, 0xa4, 0x10, 0x6f, 0x9c, 0xf5, 0x61, 0xab, 0xf2, 0x85, 0x0c, 0xf2, 0xcc, 0xc0, 0xff, 0xcb, 0x46, 0x07, 0x3b, 0x2b, 0xfc, 0xe0, 0x85, 0xf9, 0xde, 0x03, 0x00, 0x50, 0x9f, 0xfe, 0x82, 0xea, 0xfb, 0x1c, 0x5c, 0x00, 0x6e, 0xe5, 0xfb, 0xa7, 0x0b, 0xff, 0xc1, 0x03, 0xfd, 0x06, 0xf8, 0xfa, 0xe3, 0x91, 0xfe, 0x58, 0x89, 0xff, 0x32, 0xd7, 0xfe, 0x02, 0xc4, 0xff, 0x20, 0xc2, 0xff, 0x37, 0xc5, 0xfd, 0xa4, 0xf1, 0x3c, 0x5e, 0xa7, 0x34, 0xf4, 0x8c, 0xf8, 0xea, 0x0c, 0x06, 0x56, 0x34, 0xf8, 0xb2, 0x86, 0x01, 0x48, 0xea, 0x0b, 0x75, 0x01, 0xf5, 0x31, 0x8c, 0xe9, 0xa4, 0x05, 0x04, 0x36, 0x12, 0x12, 0x0a, 0xb3, 0xf9, 0x2c, 0x1b, 0xf3, 0x94, 0xb1, 0xee, 0xd5, 0x33, 0xfe, 0xb7, 0x05, 0x08, 0x2f, 0x0f, 0xff, 0xaf, 0x07, 0xf9, 0xa8, 0xb4, 0xfe, 0x58, 0x17, 0xff, 0x06, 0x3c, 0xfb, 0xcb, 0xcf, 0xff, 0x7f, 0xfa, 0xfb, 0xe2, 0x4d, 0xff, 0xf2, 0x21, 0xfd, 0x17, 0x3a, 0xfb, 0x78, 0xe3, 0xfd, 0x52, 0x74, 0xff, 0x25, 0x17, 0xff, 0x5d, 0x40, 0xff, 0x88, 0xbd, 0xff, 0x18, 0xba, 0xfd, 0x14, 0x63, 0x3b, 0xa4, 0x94, 0x35, 0xf9, 0x9f, 0xfc, 0x82, 0x96, 0x07, 0x13, 0x46, 0xf7, 0xa6, 0xbb, 0x00, 0x98, 0xce, 0x0a, 0xf3, 0x10, 0xf5, 0xeb, 0x08, 0xe8, 0xc1, 0xa4, 0x00, 0x83, 0xf3, 0x11, 0x8f, 0x19, 0xfe, 0x3a, 0x19, 0xf7, 0x75, 0xc1, 0xeb, 0x77, 0x2d, 0xfb, 0x3f, 0xb3, 0x08, 0x3c, 0xc4, 0x01, 0x82, 0x28, 0xfa, 0x20, 0xe7, 0xfc, 0x7b, 0x53, 0xff, 0x15, 0x68, 0xfb, 0x4d, 0x95, 0xff, 0x7f, 0x91, 0xfc, 0x9f, 0xdc, 0xff, 0x34, 0xec, 0xfc, 0x73, 0xe1, 0xfa, 0xe7, 0xb0, 0xfd, 0x9d, 0xc2, 0xfe, 0x35, 0x45, 0xff, 0x3b, 0xc3, 0xfe, 0x1a, 0xf5, 0xff, 0x6d, 0x44, 0xfe, 0xe6, 0x38, 0x39, 0xb5, 0x33, 0x35, 0xd8, 0xa0, 0x01, 0xd3, 0xbc, 0x08, 0xb5, 0xb1, 0xf7, 0x32, 0xe7, 0xff, 0x74, 0xdd, 0x08, 0x1b, 0x89, 0xf6, 0xdc, 0xe3, 0xe5, 0xda, 0x5e, 0xfd, 0xfd, 0x4e, 0x10, 0x6c, 0xbd, 0x00, 0xe1, 0xfd, 0xfc, 0x27, 0xe7, 0xea, 0xaa, 0xe8, 0xf6, 0x4c, 0xb6, 0x08, 0x13, 0xec, 0x02, 0x1c, 0xf7, 0xfb, 0xd3, 0xd1, 0xfc, 0xd7, 0xac, 0xfe, 0xb9, 0xb3, 0xfc, 0x97, 0x5c, 0xff, 0xf9, 0x2e, 0xfc, 0xb7, 0x68, 0x00, 0x0d, 0x1a, 0xfd, 0x43, 0x3d, 0xfa, 0x8e, 0x7a, 0xfd, 0x7b, 0xe0, 0xfd, 0x57, 0x65, 0xff, 0x89, 0x5f, 0xff, 0xc9, 0x31, 0x00, 0x19, 0x07, 0xff, 0x2c, 0xac, 0x36, 0x0b, 0x4e, 0x33, 0xc3, 0xbd, 0x05, 0x57, 0xba, 0x09, 0x9e, 0x73, 0xf9, 0x98, 0xd2, 0xff, 0xdd, 0xf2, 0x05, 0xdb, 0x28, 0xf8, 0xba, 0x26, 0xe5, 0x58, 0xec, 0xf9, 0x0c, 0x86, 0x0e, 0x33, 0x3e, 0x01, 0x35, 0xb9, 0x01, 0xaa, 0x1b, 0xed, 0xee, 0x71, 0xf1, 0xfb, 0x0c, 0x07, 0xce, 0xa0, 0x03, 0x72, 0xc4, 0xfd, 0xd4, 0x49, 0xfe, 0x4a, 0x1d, 0xfe, 0x93, 0x3c, 0xfd, 0x9f, 0x6c, 0xff, 0xc9, 0xce, 0xfb, 0x0b, 0x01, 0x00, 0xe9, 0xea, 0xfc, 0x04, 0x90, 0xf9, 0x73, 0xb3, 0xfd, 0x53, 0xcc, 0xfd, 0x22, 0x9d, 0xff, 0xcb, 0x46, 0x00, 0x95, 0x7a, 0x00, 0x83, 0x40, 0xff, 0xb4, 0x6c, 0x33, 0x60, 0x0d, 0x31, 0xe7, 0xbf, 0x07, 0x59, 0x1c, 0x0d, 0xaa, 0x47, 0xfa, 0x62, 0xbc, 0xfe, 0x82, 0x63, 0x05, 0x88, 0x5d, 0xf8, 0x88, 0xa2, 0xe6, 0xc1, 0x1d, 0xf6, 0x72, 0x49, 0x0d, 0x87, 0x6c, 0x01, 0x05, 0x3c, 0x03, 0x62, 0xa4, 0xf1, 0x2b, 0x54, 0xec, 0x1d, 0xa4, 0x03, 0xd1, 0x47, 0x05, 0x0b, 0x3c, 0xff, 0x0a, 0x11, 0xff, 0x0b, 0x3f, 0xfe, 0x56, 0xa7, 0xfd, 0xac, 0xc5, 0xff, 0xf1, 0x61, 0xfb, 0x3b, 0x00, 0xfe, 0xfe, 0xba, 0xfd, 0xdd, 0xf3, 0xf9, 0x4d, 0x7a, 0xfd, 0xd9, 0x21, 0xfe, 0xae, 0xbb, 0xff, 0x8b, 0xf3, 0x00, 0xac, 0x41, 0x00, 0xfb, 0x23, 0xff, 0x6a, 0x53, 0x31, 0x03, 0xf0, 0x2f, 0xd5, 0x52, 0x06, 0x9d, 0x61, 0x0e, 0x9a, 0x61, 0xfd, 0x39, 0x4d, 0xfc, 0xfc, 0xdd, 0x04, 0x0c, 0xb3, 0xf9, 0x45, 0x39, 0xea, 0xa3, 0x77, 0xf4, 0xec, 0xdd, 0x0b, 0xa7, 0xb3, 0x00, 0xc1, 0x14, 0x00, 0x40, 0x76, 0xf8, 0x39, 0xd8, 0xeb, 0x5a, 0x5e, 0xfd, 0x8a, 0xc3, 0x05, 0x44, 0xa2, 0x00, 0xa3, 0x68, 0x00, 0xeb, 0xee, 0xfe, 0xe0, 0x65, 0xfd, 0x15, 0x4c, 0xff, 0x49, 0x21, 0xfb, 0x14, 0x02, 0xfd, 0xff, 0xd7, 0xfe, 0x6d, 0xde, 0xfa, 0xbe, 0x83, 0xfd, 0x47, 0x1a, 0xff, 0x5b, 0x16, 0xff, 0x51, 0xb1, 0x00, 0xf2, 0x43, 0x00, 0xd1, 0x04, 0xff, 0x6f, 0xd0, 0x2e, 0x52, 0xb0, 0x2e, 0xc8, 0x95, 0x04, 0xca, 0x8e, 0x0e, 0x21, 0x76, 0x00, 0xe8, 0x23, 0xfd, 0xd8, 0xf9, 0x01, 0xbb, 0xdf, 0xf8, 0x7d, 0x33, 0xf1, 0xd1, 0xd7, 0xf3, 0x6e, 0xb5, 0x09, 0x0d, 0xf0, 0x01, 0xd4, 0x4b, 0xfb, 0x98, 0x25, 0xfd, 0x3e, 0x01, 0xf0, 0xc4, 0x38, 0xf7, 0x02, 0x9f, 0x04, 0x64, 0x5c, 0x01, 0xce, 0xcc, 0xff, 0xe5, 0xe9, 0x00, 0x5e, 0x2a, 0xfe, 0x2a, 0x37, 0xfd, 0xfb, 0x6a, 0xfb, 0x50, 0x36, 0xfd, 0x59, 0xf8, 0xff, 0x70, 0xd4, 0xfc, 0x5d, 0x4d, 0xfc, 0x93, 0xfc, 0xfe, 0xbc, 0x5f, 0xff, 0xd1, 0x51, 0x00, 0x4e, 0x3d, 0x00, 0x70, 0x2c, 0xff, 0x83, 0xef, 0x2b, 0xed, 0x16, 0x2b, 0x81, 0x67, 0x04, 0x76, 0x0a, 0x10, 0x0d, 0x48, 0x02, 0x0f, 0xfe, 0xfc, 0xda, 0x7d, 0x01, 0xe8, 0x6e, 0xf9, 0xc3, 0x3e, 0xf3, 0xf5, 0xfc, 0xf4, 0xab, 0x50, 0x08, 0xa8, 0x39, 0x03, 0xcf, 0xf5, 0xf9, 0x40, 0x02, 0xfe, 0x75, 0x5d, 0xf5, 0x97, 0x51, 0xf4, 0xfc, 0xd0, 0x01, 0x4a, 0xbe, 0x01, 0x2d, 0xa1, 0xfe, 0x6a, 0xbd, 0x00, 0x24, 0xec, 0xfe, 0x81, 0xc4, 0xfd, 0x4b, 0xd4, 0xfb, 0x39, 0x42, 0xfd, 0x55, 0x83, 0x00, 0x54, 0x00, 0xfe, 0x7a, 0x7a, 0xfb, 0x03, 0xe5, 0xfe, 0x5d, 0xdf, 0xff, 0x62, 0xf4, 0xff, 0x66, 0x7b, 0x00, 0x33, 0x32, 0xff, 0x59, 0x84, 0x27, 0x41, 0xee, 0x26, 0x4e, 0x82, 0x05, 0xad, 0x6d, 0x11, 0x77, 0x02, 0x03, 0xff, 0x4f, 0xfc, 0x17, 0x92, 0x02, 0x1d, 0x4c, 0xfc, 0x85, 0x6a, 0xf4, 0x63, 0xb9, 0xf3, 0x5b, 0xd7, 0x05, 0xe9, 0x2d, 0x05, 0xd7, 0x9f, 0xfa, 0xa9, 0xed, 0xfd, 0x61, 0x99, 0xf9, 0xfc, 0x74, 0xf4, 0x4c, 0x39, 0x00, 0x7f, 0xc9, 0x01, 0x93, 0x2c, 0xfd, 0x86, 0x42, 0xff, 0x38, 0x5a, 0xfe, 0x26, 0x54, 0xfe, 0x22, 0x16, 0xfe, 0x1c, 0x75, 0xfd, 0x6c, 0xb8, 0xfe, 0xba, 0x7a, 0xfe, 0xbb, 0xb9, 0xfc, 0x1a, 0x87, 0xff, 0x57, 0xf5, 0xff, 0xe6, 0xa9, 0xff, 0xf2, 0x7f, 0x00, 0x5d, 0xfa, 0xfe, 0xf6, 0xce, 0x26, 0xe7, 0xbc, 0x22, 0x54, 0x6e, 0x04, 0x5c, 0x63, 0x16, 0xff, 0x90, 0x02, 0x3b, 0xa6, 0xf9, 0x2f, 0xc2, 0x04, 0xb3, 0x9a, 0xff, 0x59, 0xfa, 0xf4, 0x2e, 0x53, 0xf1, 0x00, 0x79, 0x03, 0x35, 0x3d, 0x06, 0xf3, 0x00, 0xfc, 0x7c, 0x01, 0x00, 0x34, 0xff, 0xfa, 0x6f, 0x32, 0xf2, 0xcb, 0xbd, 0x00, 0xe7, 0xb4, 0x02, 0x9d, 0xc1, 0xfb, 0xd6, 0xc4, 0xfe, 0x5e, 0xf4, 0xfc, 0xc0, 0x23, 0xfd, 0x1b, 0xe2, 0xfe, 0x93, 0xb0, 0xfd, 0xf5, 0x15, 0xff, 0x34, 0xf6, 0xfe, 0x5a, 0xbf, 0xfc, 0x85, 0xe2, 0x00, 0xfe, 0xe2, 0x00, 0xbd, 0x47, 0xff, 0x05, 0xec, 0xff, 0x01, 0xe2, 0xfe, 0xd6, 0x36, 0x21, 0xb0, 0x44, 0x21, 0xac, 0xa2, 0x08, 0x84, 0x57, 0x14, 0x78, 0xb8, 0x01, 0x40, 0xb7, 0xf9, 0xfc, 0xff, 0x03, 0xaf, 0xd5, 0xfd, 0x7b, 0x8e, 0xf7, 0x9c, 0x26, 0xf5, 0xee, 0x47, 0xff, 0xdd, 0x68, 0x03, 0xfa, 0x11, 0xfe, 0xae, 0x3f, 0x01, 0xdd, 0xc5, 0xfd, 0x57, 0xa8, 0xf4, 0xd1, 0xae, 0xfc, 0x1c, 0x4a, 0x02, 0x5f, 0xb7, 0xff, 0x6c, 0x15, 0xff, 0xea, 0xc3, 0xfc, 0x27, 0xc5, 0xfd, 0x9f, 0x1d, 0xff, 0xb7, 0x9b, 0xfe, 0x8f, 0x33, 0xff, 0x1a, 0xc9, 0xfe, 0x0d, 0x7f, 0xfd, 0x13, 0x8d, 0xff, 0x07, 0x3a, 0x00, 0xf0, 0x33, 0xff, 0xec, 0xed, 0xff, 0x64, 0x5e, 0xff, 0x38, 0xa3, 0x1d, 0xbf, 0x69, 0x1e, 0x9e, 0x80, 0x08, 0x80, 0xbe, 0x11, 0xf1, 0xc6, 0x02, 0xee, 0x28, 0xfd, 0xf1, 0x9b, 0x03, 0xc5, 0x38, 0xfd, 0xef, 0xb3, 0xf8, 0x94, 0x9c, 0xf6, 0x88, 0xf6, 0xfe, 0x9b, 0xf9, 0x01, 0x09, 0x69, 0xfe, 0x72, 0xb4, 0x00, 0xea, 0x0b, 0xff, 0xb7, 0xa6, 0xf7, 0x2e, 0x5e, 0xfc, 0xb7, 0xa6, 0x02, 0xb5, 0x3d, 0x00, 0x44, 0x35, 0xfe, 0xf9, 0x60, 0xfd, 0x1c, 0xba, 0xfe, 0x5e, 0x20, 0xff, 0xf4, 0x3c, 0xfe, 0xf6, 0x2a, 0xfe, 0xd5, 0x9e, 0xfe, 0xb9, 0x99, 0xfe, 0x33, 0x2d, 0xff, 0x55, 0x34, 0xff, 0x13, 0x42, 0xff, 0xde, 0x54, 0x00, 0xe5, 0x9d, 0xff, 0x30, 0xdc, 0x1a, 0xcf, 0xc9, 0x1b, 0x69, 0xf0, 0x07, 0x3d, 0x8a, 0x0e, 0xa1, 0xff, 0x03, 0x9e, 0x22, 0x00, 0x1d, 0xa2, 0x02, 0x02, 0xeb, 0xfc, 0xea, 0x28, 0xf9, 0x69, 0x2a, 0xf8, 0x0e, 0x3b, 0xff, 0xc8, 0xf2, 0x00, 0xf9, 0xc1, 0xfe, 0xdc, 0x6d, 0x00, 0x3f, 0xa8, 0xff, 0x76, 0x61, 0xf9, 0x10, 0x39, 0xfd, 0x39, 0xec, 0x02, 0xc8, 0x16, 0x00, 0x94, 0x34, 0xfe, 0xf0, 0x19, 0xfe, 0xed, 0x1d, 0xff, 0xb1, 0xf1, 0xfe, 0xfc, 0xff, 0xfd, 0xe0, 0x8a, 0xfd, 0x79, 0x53, 0xfe, 0x41, 0x9e, 0xfe, 0xe5, 0xda, 0xfe, 0x3a, 0x58, 0xff, 0xc8, 0x9e, 0xff, 0x85, 0x4a, 0x00, 0xc1, 0xc3, 0xff, 0xa2, 0xd2, 0x17, 0x97, 0x7c, 0x19, 0xc2, 0xe2, 0x06, 0x4c, 0x33, 0x0c, 0x44, 0xb9, 0x05, 0xd5, 0x38, 0x01, 0x21, 0xf6, 0x01, 0x60, 0x15, 0xfd, 0xf2, 0xa6, 0xf9, 0x1d, 0x1a, 0xfa, 0x07, 0x72, 0xff, 0x2f, 0x30, 0x00, 0xba, 0x7f, 0xff, 0x5d, 0xe2, 0x00, 0xdf, 0xb9, 0xff, 0x1e, 0xc5, 0xfa, 0x36, 0x81, 0xfe, 0xd1, 0xc0, 0x02, 0x94, 0xf9, 0xff, 0x6b, 0x39, 0xfe, 0x51, 0x71, 0xfe, 0x0a, 0x96, 0xff, 0xf3, 0xd2, 0xfe, 0xd9, 0xee, 0xfd, 0x4c, 0x8e, 0xfd, 0x46, 0x94, 0xfe, 0xb7, 0xae, 0xfe, 0xc5, 0xab, 0xfe, 0x49, 0xb0, 0xff, 0xa6, 0xfd, 0xff, 0xf1, 0x45, 0x00, 0xaf, 0xac, 0xff, 0x70, 0x63, 0x15, 0x52, 0xc6, 0x16, 0xfd, 0x28, 0x06, 0x09, 0x99, 0x0b, 0xfb, 0xda, 0x05, 0x98, 0x00, 0x01, 0x83, 0xbe, 0x01, 0x41, 0x62, 0xfd, 0x43, 0x71, 0xfa, 0xc3, 0x9a, 0xfb, 0x61, 0x62, 0xff, 0xb4, 0x87, 0xff, 0xf2, 0x50, 0x00, 0x6d, 0x57, 0x01, 0x0f, 0xb7, 0xff, 0x86, 0x1d, 0xfc, 0x85, 0x08, 0xff, 0x9f, 0xa5, 0x01, 0x39, 0xa3, 0xff, 0xf1, 0x9a, 0xfe, 0xf7, 0xc4, 0xfe, 0x5d, 0x8b, 0xff, 0xfa, 0xcb, 0xfe, 0x8e, 0x6b, 0xfe, 0x21, 0x39, 0xfe, 0xdf, 0xef, 0xfe, 0xc4, 0x7a, 0xfe, 0xe3, 0x71, 0xfe, 0x25, 0xa4, 0xff, 0x3f, 0x0b, 0x00, 0x83, 0x3e, 0x00, 0xef, 0x87, 0xff, 0x8a, 0x66, 0x12, 0xf8, 0x65, 0x14, 0x29, 0x17, 0x06, 0xa9, 0x5c, 0x0a, 0x8a, 0x43, 0x05, 0x44, 0x8f, 0x01, 0x4f, 0x10, 0x02, 0x46, 0x95, 0xfd, 0xb4, 0x25, 0xfb, 0x93, 0xce, 0xfc, 0x17, 0xc0, 0xff, 0x04, 0x98, 0xff, 0x83, 0x4b, 0x01, 0x51, 0xac, 0x01, 0xf8, 0xc1, 0xff, 0x24, 0x5c, 0xfd, 0x94, 0xf8, 0xfe, 0x5c, 0xc0, 0x00, 0x2a, 0xc8, 0xff, 0x34, 0xed, 0xfe, 0x7a, 0xe6, 0xfe, 0xf2, 0xd2, 0xff, 0xeb, 0x6a, 0xff, 0xc6, 0x15, 0xff, 0x12, 0x86, 0xfe, 0xce, 0xb7, 0xfe, 0xce, 0x5f, 0xfe, 0x3f, 0x9a, 0xfe, 0x2c, 0xba, 0xff, 0x3e, 0xe5, 0xff, 0xc1, 0x14, 0x00, 0x28, 0xb2, 0xff, 0x29, 0x80, 0x0f, 0x5d, 0x77, 0x11, 0x59, 0x6f, 0x06, 0xaa, 0x5d, 0x09, 0xce, 0xa2, 0x04, 0x93, 0x5d, 0x02, 0xd4, 0x4e, 0x02, 0x9f, 0x00, 0xfe, 0x9d, 0xf8, 0xfb, 0x6f, 0x2c, 0xfe, 0xd8, 0xdb, 0x00, 0x6b, 0x22, 0x00, 0xf3, 0xed, 0x01, 0xcc, 0xe0, 0x01, 0x83, 0x00, 0x00, 0x48, 0x6c, 0xfe, 0x6d, 0x2e, 0xff, 0xba, 0x1a, 0x00, 0xb5, 0xb6, 0xff, 0x3d, 0x4f, 0xff, 0x5c, 0x7c, 0xff, 0x45, 0x49, 0x00, 0x0d, 0x7e, 0xff, 0x67, 0x4b, 0xff, 0x4d, 0xd0, 0xfe, 0xb1, 0xc7, 0xfe, 0xae, 0xb6, 0xfe, 0x6f, 0xe1, 0xfe, 0x52, 0xa1, 0xff, 0xaa, 0xde, 0xff, 0x86, 0x0e, 0x00, 0x2a, 0xce, 0xff, 0xee, 0x60, 0x0d, 0x04, 0xf9, 0x0e, 0x78, 0x02, 0x06, 0x95, 0x28, 0x08, 0x02, 0xec, 0x03, 0x89, 0xa6, 0x02, 0x8a, 0xe7, 0x02, 0x47, 0xb4, 0xfe, 0x29, 0x53, 0xfd, 0xb5, 0x24, 0x00, 0xe3, 0x5a, 0x02, 0x24, 0x0c, 0x01, 0x67, 0x16, 0x02, 0x73, 0x11, 0x02, 0x71, 0x4b, 0x00, 0x97, 0xe6, 0xfe, 0xc6, 0x0b, 0xff, 0x6d, 0x97, 0xff, 0x43, 0x28, 0x00, 0x9c, 0xea, 0xff, 0x8a, 0x77, 0xff, 0xc5, 0x28, 0x00, 0xf8, 0xbf, 0xff, 0xd9, 0xb4, 0xff, 0x0c, 0x1e, 0xff, 0x88, 0xdc, 0xfe, 0xfd, 0xfc, 0xfe, 0x74, 0x1c, 0xff, 0x76, 0xb5, 0xff, 0xe1, 0x03, 0x00, 0xf3, 0x0b, 0x00, 0xce, 0x9a, 0xff, 0x6b, 0x8c, 0x0c, 0xe2, 0x7a, 0x0d, 0xa9, 0xd0, 0x04, 0x3d, 0xd5, 0x06, 0x3d, 0x84, 0x03, 0x54, 0x11, 0x03, 0x68, 0xe8, 0x03, 0x04, 0xaa, 0x00, 0xdc, 0xca, 0xfe, 0x0e, 0x59, 0x01, 0x6e, 0x71, 0x03, 0x5c, 0x8e, 0x01, 0x31, 0xee, 0x01, 0x03, 0x31, 0x01, 0xb9, 0xbe, 0xff, 0x99, 0x23, 0xff, 0x8c, 0x97, 0xff, 0x8d, 0xfc, 0xff, 0x50, 0x3a, 0x00, 0xe8, 0xdc, 0xff, 0x7e, 0x76, 0xff, 0xcc, 0x2a, 0x00, 0xb6, 0xe4, 0xff, 0x66, 0xed, 0xff, 0x98, 0x48, 0xff, 0x91, 0x12, 0xff, 0xa9, 0x61, 0xff, 0xc8, 0x99, 0xff, 0xfa, 0xe3, 0xff, 0x68, 0xe8, 0xff, 0x13, 0xa0, 0xff, 0xe4, 0x01, 0xff, 0x1a, 0xb0, 0x0b, 0x81, 0x80, 0x0c, 0xe3, 0x31, 0x04, 0x9d, 0x29, 0x07, 0x28, 0xa6, 0x04, 0x31, 0xdf, 0x03, 0x32, 0x86, 0x04, 0x70, 0x7f, 0x01, 0x6d, 0xf5, 0xff, 0x97, 0xf5, 0x01, 0xf4, 0x37, 0x03, 0x33, 0xdd, 0x00, 0xb1, 0xc0, 0x00, 0x63, 0x44, 0x00, 0x2f, 0x07, 0x00, 0x22, 0x06, 0x00, 0x8c, 0xf0, 0xff, 0xb7, 0xc3, 0xff, 0xbf, 0xaf, 0xff, 0xb2, 0xad, 0xff, 0x23, 0x9d, 0xff, 0x1f, 0x48, 0x00, 0x73, 0x0b, 0x00, 0xdf, 0x54, 0x00, 0xd2, 0xd2, 0xff, 0xa6, 0x41, 0xff, 0x6f, 0x5d, 0xff, 0x54, 0x76, 0xff, 0xad, 0x93, 0xff, 0x69, 0x6c, 0xff, 0xdf, 0x42, 0xff, 0x55, 0x01, 0xff, 0x30, 0xd6, 0x0b, 0x60, 0xd2, 0x0d, 0x72, 0xc4, 0x05, 0xf0, 0x08, 0x08, 0x20, 0x00, 0x05, 0xae, 0x3d, 0x04, 0x9e, 0x79, 0x04, 0xf2, 0x94, 0x00, 0x61, 0xc9, 0xfe, 0x59, 0x19, 0x01, 0x68, 0xac, 0x02, 0xdf, 0x95, 0x00, 0x0e, 0x92, 0x00, 0xdc, 0x11, 0x00, 0x97, 0x33, 0x00, 0xf3, 0x1b, 0x00, 0xf5, 0x87, 0xff, 0x43, 0x78, 0xff, 0x25, 0xca, 0xff, 0xf5, 0xc6, 0xff, 0x4f, 0xb9, 0xff, 0x92, 0x90, 0x00, 0xbc, 0x22, 0x00, 0x0e, 0x69, 0x00, 0x24, 0x23, 0x00, 0x46, 0x58, 0xff, 0x59, 0x19, 0xff, 0xf4, 0xf4, 0xfe, 0x50, 0xec, 0xfe, 0x34, 0x30, 0xff, 0x78, 0x66, 0xff, 0xd8, 0x3e, 0xff, 0xdb, 0x8f, 0x0c, 0xa5, 0xac, 0x0e, 0x02, 0x45, 0x06, 0x6f, 0xe7, 0x07, 0xbc, 0xa8, 0x04, 0xe6, 0x5e, 0x04, 0x38, 0xae, 0x04, 0x1e, 0x59, 0x00, 0xfe, 0xd9, 0xfd, 0xe8, 0xa7, 0xff, 0xe5, 0xdd, 0x01, 0x79, 0xda, 0x00, 0xde, 0xd5, 0x00, 0x85, 0x06, 0x00, 0x11, 0x36, 0x00, 0x4a, 0x54, 0x00, 0x9b, 0xf7, 0xff, 0x58, 0xc1, 0xff, 0xdf, 0xbc, 0xff, 0x52, 0xa1, 0xff, 0x60, 0xbe, 0xff, 0x9a, 0x51, 0x00, 0xb3, 0xa8, 0xff, 0x0a, 0x49, 0x00, 0x71, 0x96, 0x00, 0x95, 0xf8, 0xff, 0xd4, 0x23, 0xff, 0xa1, 0x90, 0xfe, 0x74, 0xa9, 0xfe, 0xec, 0x03, 0xff, 0xf0, 0x58, 0xff, 0xe7, 0x5e, 0xff, 0x2f, 0xc4, 0x0c, 0x9f, 0xa7, 0x0e, 0xe7, 0x40, 0x05, 0x19, 0xfa, 0x06, 0x74, 0x3d, 0x04, 0x97, 0x3b, 0x04, 0xf7, 0xc7, 0x04, 0x18, 0x58, 0x00, 0xcf, 0x8d, 0xfd, 0x83, 0x35, 0x00, 0xc8, 0xdf, 0x02, 0x1e, 0x6f, 0x00, 0x02, 0xe6, 0xff, 0xc6, 0x62, 0xff, 0x56, 0xbd, 0xff, 0x5b, 0xe6, 0x00, 0x55, 0x2e, 0x01, 0xcf, 0x78, 0x00, 0x87, 0x14, 0x00, 0x00, 0xb7, 0xff, 0xfe, 0x66, 0xff, 0x74, 0xef, 0xff, 0xdb, 0x73, 0xff, 0xc8, 0xdd, 0xff, 0x9f, 0xe6, 0xff, 0x21, 0x23, 0x00, 0xfd, 0x45, 0x00, 0x33, 0x72, 0xff, 0x1e, 0xd6, 0xfe, 0x32, 0xce, 0xfe, 0x9f, 0x13, 0xff, 0x22, 0x1e, 0xff, 0xaf, 0xd7, 0x0d, 0x4a, 0xeb, 0x0f, 0x01, 0x0c, 0x05, 0x07, 0x0a, 0x06, 0x9a, 0xce, 0x02, 0xe8, 0x3c, 0x03, 0x4e, 0x39, 0x04, 0x86, 0xd8, 0xff, 0x03, 0xbc, 0xfc, 0x42, 0x75, 0xff, 0x0e, 0xae, 0x03, 0x74, 0xbe, 0x01, 0xf3, 0x6f, 0x00, 0x10, 0xcd, 0xfe, 0x51, 0xde, 0xfe, 0x37, 0x65, 0x00, 0x69, 0x02, 0x01, 0x67, 0x16, 0x01, 0xa3, 0x10, 0x01, 0xf7, 0x48, 0x00, 0xae, 0xaf, 0xff, 0xcf, 0x37, 0x00, 0xe5, 0x61, 0xff, 0x63, 0x7a, 0xff, 0xd1, 0x80, 0xff, 0x4e, 0x57, 0xff, 0x68, 0xda, 0xff, 0x79, 0x47, 0x00, 0xd9, 0x38, 0x00, 0x6d, 0xd4, 0xff, 0x3c, 0x38, 0xff, 0xd4, 0x9b, 0xfe, 0xbc, 0x78, 0x0f, 0x16, 0x06, 0x12, 0x4c, 0x56, 0x05, 0x38, 0x2f, 0x06, 0x45, 0x69, 0x02, 0x93, 0x9f, 0x02, 0x6d, 0x57, 0x03, 0xe8, 0x30, 0xfe, 0x92, 0xa9, 0xfa, 0x1e, 0xb4, 0xfd, 0x2d, 0xfe, 0x03, 0xf0, 0x54, 0x02, 0x66, 0x4f, 0x00, 0x9c, 0x14, 0xff, 0x48, 0x4e, 0xff, 0x92, 0x6d, 0x00, 0xf6, 0xfc, 0x00, 0x17, 0xa5, 0x00, 0x8b, 0x87, 0x00, 0xf6, 0xce, 0x00, 0x62, 0x39, 0x00, 0xf8, 0x7d, 0x00, 0xbf, 0xd6, 0xff, 0x84, 0xb0, 0xff, 0xa4, 0x7f, 0xff, 0xdd, 0x1b, 0xff, 0xa2, 0x56, 0xff, 0x77, 0xe5, 0xff, 0xb8, 0x76, 0x00, 0xb0, 0xd9, 0x00, 0xfb, 0x3d, 0x00, 0x87, 0x0d, 0xff, 0x5c, 0xbd, 0x11, 0x3a, 0x68, 0x14, 0x5f, 0x70, 0x05, 0xfb, 0xc1, 0x06, 0x39, 0x5b, 0x02, 0x71, 0x64, 0x02, 0xf7, 0xff, 0x02, 0x50, 0xd1, 0xfc, 0xb4, 0x8e, 0xf8, 0xaf, 0xfd, 0xfb, 0xde, 0x4a, 0x04, 0x50, 0x1f, 0x02, 0x64, 0x2a, 0xff, 0xf2, 0x56, 0xfe, 0xc4, 0x0e, 0xff, 0x2f, 0xef, 0x00, 0x03, 0xa0, 0x01, 0x51, 0xbd, 0x00, 0xfc, 0xcc, 0x00, 0x5d, 0xb9, 0x00, 0x55, 0xd2, 0xff, 0xa8, 0xb5, 0x00, 0x0f, 0xc5, 0xff, 0x2e, 0xd8, 0xff, 0x75, 0xe2, 0xff, 0x30, 0x4e, 0xff, 0xec, 0x6b, 0xff, 0x99, 0x2c, 0x00, 0xcd, 0x48, 0x00, 0xff, 0x1f, 0x00, 0xf9, 0x75, 0x00, 0x4b, 0x09, 0x00, 0x58, 0xc6, 0x14, 0x2e, 0x9e, 0x16, 0x60, 0xf9, 0x04, 0x87, 0xaf, 0x07, 0x99, 0x45, 0x02, 0x31, 0x92, 0x02, 0xe9, 0x24, 0x03, 0x1c, 0x9a, 0xfb, 0x6d, 0x6d, 0xf6, 0xc2, 0xe0, 0xfa, 0x33, 0x5e, 0x05, 0xe9, 0xd3, 0x01, 0x07, 0xb1, 0xfd, 0xe5, 0x29, 0xfd, 0x01, 0x43, 0xfe, 0xb4, 0x75, 0x00, 0x58, 0x8b, 0x01, 0xcc, 0xa2, 0x00, 0x46, 0x0f, 0x01, 0xa9, 0x63, 0x01, 0x53, 0xc7, 0xff, 0x82, 0x6d, 0x00, 0x8d, 0xbb, 0xff, 0xc9, 0xc7, 0xff, 0xc0, 0xe5, 0xff, 0x72, 0x75, 0xff, 0xc2, 0xcc, 0xff, 0xab, 0x6d, 0x00, 0x2a, 0x09, 0x00, 0x26, 0x0d, 0x00, 0xb0, 0x12, 0x00, 0xd9, 0xc7, 0xff, 0xd6, 0x27, 0x19, 0x26, 0x4c, 0x19, 0xff, 0x73, 0x03, 0x45, 0xb4, 0x08, 0xb6, 0xf9, 0x01, 0x60, 0x9b, 0x02, 0x2e, 0x1e, 0x03, 0xb0, 0xdc, 0xf9, 0xef, 0x82, 0xf4, 0x1a, 0x8b, 0xfa, 0x7c, 0xce, 0x06, 0x49, 0x1d, 0x01, 0x2f, 0x53, 0xfc, 0x9d, 0x31, 0xfc, 0xc5, 0xa3, 0xfd, 0xae, 0xed, 0xff, 0x76, 0xf5, 0x00, 0xcd, 0xfd, 0xff, 0x87, 0xca, 0x00, 0x03, 0x1a, 0x01, 0x8f, 0x48, 0xff, 0xf3, 0xaa, 0x00, 0x92, 0xe3, 0xff, 0x42, 0xc6, 0xff, 0xe9, 0xa5, 0xff, 0x92, 0x46, 0xff, 0x41, 0x8f, 0xff, 0xe1, 0x6f, 0x00, 0xdb, 0x2a, 0x00, 0x38, 0x1b, 0x00, 0x7f, 0x44, 0x00, 0x68, 0xa0, 0xff, 0x8b, 0xa2, 0x1d, 0x5c, 0x81, 0x1c, 0x4f, 0x7c, 0x01, 0x69, 0x97, 0x09, 0x91, 0xf4, 0x01, 0x75, 0x1e, 0x02, 0x80, 0x18, 0x03, 0xac, 0xcf, 0xf7, 0x49, 0x06, 0xf3, 0xc1, 0xf8, 0xfa, 0xfe, 0xfe, 0x07, 0x68, 0x81, 0x00, 0x17, 0x51, 0xfb, 0x9f, 0x36, 0xfb, 0xed, 0x68, 0xfd, 0xd6, 0xcf, 0xff, 0x79, 0x57, 0x00, 0xc8, 0xb9, 0xff, 0xa4, 0x5e, 0x00, 0x23, 0xaf, 0x00, 0x2f, 0xc0, 0xfe, 0x79, 0x87, 0x00, 0x44, 0xbd, 0xff, 0xa9, 0xaa, 0xff, 0x7e, 0x49, 0xff, 0x6b, 0xd9, 0xfe, 0x92, 0x58, 0xff, 0xd1, 0x37, 0x00, 0x49, 0x44, 0x00, 0xb0, 0x61, 0x00, 0x90, 0xc5, 0x00, 0x5e, 0x09, 0x00, 0x22, 0x6b, 0x21, 0x14, 0x1b, 0x20, 0x8f, 0x12, 0x00, 0x47, 0xcf, 0x09, 0xa0, 0x29, 0x02, 0x9e, 0xae, 0x01, 0xbc, 0x26, 0x03, 0x0f, 0xeb, 0xf5, 0x87, 0xb5, 0xf1, 0x8a, 0x72, 0xfb, 0x13, 0x7b, 0x08, 0xf9, 0x17, 0x00, 0x9f, 0xe8, 0xfa, 0x53, 0x7c, 0xfa, 0x2d, 0x2e, 0xfd, 0xa5, 0xb6, 0xff, 0x34, 0x13, 0x00, 0x3e, 0x90, 0xff, 0x49, 0x2d, 0x00, 0x7a, 0xca, 0x00, 0x39, 0x7a, 0xfe, 0x57, 0xf9, 0xff, 0x36, 0x0e, 0xff, 0xd3, 0x84, 0xff, 0x0f, 0xe1, 0xfe, 0x87, 0x80, 0xfe, 0x4c, 0x5c, 0xff, 0x10, 0x27, 0x00, 0xd2, 0x4e, 0x00, 0x85, 0x72, 0x00, 0xfd, 0xef, 0x00, 0x92, 0xe4, 0xff, 0x4d, 0x05, 0x24, 0x7f, 0x0b, 0x24, 0x18, 0x6d, 0x00, 0x36, 0x8b, 0x09, 0x09, 0x9b, 0x01, 0x1d, 0xe0, 0x00, 0x6d, 0x93, 0x03, 0xa8, 0x5f, 0xf4, 0xd7, 0x19, 0xf1, 0x00, 0x4f, 0xfb, 0x58, 0xba, 0x06, 0x07, 0x19, 0x00, 0x92, 0xdf, 0xfb, 0x14, 0xa5, 0xf9, 0xb8, 0x5d, 0xfc, 0x22, 0x43, 0xff, 0x63, 0x2d, 0x00, 0xe1, 0xde, 0x00, 0xf6, 0xa4, 0xff, 0xe9, 0x11, 0x00, 0xd8, 0x68, 0xfe, 0xad, 0xa7, 0xff, 0x9d, 0x6f, 0xfe, 0x61, 0xec, 0xfe, 0xbc, 0x73, 0xfe, 0xf4, 0x48, 0xfe, 0x9f, 0x53, 0xff, 0x45, 0x0f, 0x00, 0x62, 0x8a, 0x00, 0x71, 0x2b, 0x00, 0x1f, 0xaf, 0x00, 0x99, 0x9f, 0xff, 0xca, 0xd1, 0x24, 0x78, 0x1d, 0x27, 0xc1, 0x6a, 0x02, 0x42, 0xf2, 0x09, 0x57, 0xa3, 0x01, 0x61, 0xf6, 0xfe, 0xfc, 0xb3, 0x03, 0x77, 0x7d, 0xf4, 0x23, 0x94, 0xf1, 0xbd, 0x57, 0xfb, 0x91, 0x5c, 0x03, 0x69, 0x57, 0xff, 0x92, 0x90, 0xfd, 0xec, 0x7e, 0xfa, 0x00, 0xdf, 0xfb, 0x52, 0xa4, 0xfe, 0x20, 0xbf, 0xff, 0xdd, 0xc1, 0x01, 0xda, 0xfe, 0xff, 0xe2, 0x5a, 0xff, 0x17, 0x39, 0xfe, 0x00, 0x72, 0xff, 0x17, 0xac, 0xfe, 0x5d, 0xf0, 0xfe, 0xb7, 0x3d, 0xfe, 0x65, 0x45, 0xfe, 0x5c, 0x0c, 0xff, 0xc4, 0x3b, 0xff, 0xc1, 0x64, 0x00, 0x61, 0x51, 0x00, 0x1a, 0xb6, 0x00, 0x60, 0x91, 0xff, 0x06, 0x83, 0x25, 0x03, 0x03, 0x29, 0xae, 0xca, 0x04, 0x4a, 0x7c, 0x0b, 0x0b, 0x56, 0x02, 0x62, 0x06, 0xfd, 0xcf, 0x2e, 0x02, 0x9e, 0x54, 0xf4, 0x07, 0x82, 0xf2, 0x66, 0xde, 0xfc, 0x15, 0xa2, 0xff, 0x14, 0xcd, 0xfc, 0x28, 0x24, 0xff, 0x5f, 0x69, 0xfc, 0x0c, 0xfc, 0xfc, 0x54, 0x86, 0xfd, 0x59, 0x45, 0xfe, 0x48, 0x2f, 0x02, 0xf8, 0x69, 0x00, 0x81, 0x09, 0xff, 0x5f, 0x9f, 0xfe, 0x1c, 0x67, 0xff, 0x74, 0x8e, 0xfe, 0x57, 0x0e, 0xff, 0xe5, 0xf6, 0xfd, 0x1c, 0x17, 0xfe, 0x26, 0xd4, 0xfe, 0x74, 0x6f, 0xfe, 0xb6, 0xf4, 0xff, 0xd6, 0x31, 0x00, 0xc7, 0x91, 0x00, 0xc3, 0x8b, 0xff, 0x0f, 0xb6, 0x26, 0x0d, 0xca, 0x29, 0x83, 0xd6, 0x05, 0x92, 0xd3, 0x0d, 0x1e, 0xa3, 0x03, 0x36, 0xfb, 0xfb, 0x38, 0x37, 0x00, 0x37, 0x01, 0xf3, 0xbb, 0xac, 0xf3, 0xc1, 0x72, 0xff, 0xff, 0x9c, 0xfc, 0x55, 0xc3, 0xf9, 0x11, 0x06, 0x00, 0x78, 0x41, 0xfe, 0x4d, 0xd1, 0xfe, 0xec, 0xfb, 0xfc, 0x87, 0x55, 0xfc, 0x08, 0xe1, 0x01, 0xfb, 0x39, 0x01, 0x79, 0x0d, 0xff, 0x5c, 0x0c, 0xff, 0x82, 0xb2, 0xff, 0x48, 0x71, 0xfe, 0x6c, 0xb9, 0xfe, 0xa3, 0x63, 0xfd, 0x59, 0xc6, 0xfd, 0xc0, 0xb2, 0xfe, 0xb4, 0xdd, 0xfd, 0xb0, 0x62, 0xff, 0x4f, 0x18, 0x00, 0x4d, 0xa1, 0x00, 0x3c, 0xa1, 0xff, 0x83, 0xce, 0x29, 0x63, 0x5a, 0x29, 0xf1, 0x88, 0x04, 0x22, 0xfb, 0x10, 0x9e, 0x92, 0x04, 0xca, 0x58, 0xfb, 0xe0, 0x33, 0xfe, 0xb5, 0xa1, 0xf1, 0x8c, 0x0a, 0xf5, 0xa3, 0xf8, 0x02, 0x28, 0x2a, 0xfa, 0x20, 0x05, 0xf5, 0xa7, 0x7c, 0x00, 0x6f, 0x62, 0xff, 0x82, 0x71, 0x01, 0x6f, 0x7c, 0xfd, 0x33, 0x6d, 0xfa, 0x7a, 0xb3, 0x01, 0xe9, 0xe0, 0x01, 0x72, 0x64, 0xfe, 0x28, 0x25, 0xff, 0xc2, 0x1e, 0x00, 0xdb, 0xf6, 0xfd, 0x6f, 0xa7, 0xfe, 0x10, 0x61, 0xfc, 0xc4, 0x36, 0xfd, 0x30, 0xc3, 0xfe, 0xdf, 0x7d, 0xfd, 0x4e, 0xe0, 0xfe, 0x13, 0xfe, 0xff, 0xc6, 0x3d, 0x00, 0xd0, 0x07, 0xff, 0xa9, 0x59, 0x2e, 0xd5, 0xee, 0x28, 0x85, 0x45, 0x01, 0xe9, 0x8b, 0x13, 0x7a, 0x48, 0x04, 0x28, 0x57, 0xfb, 0x98, 0x5a, 0xfe, 0x63, 0x78, 0xef, 0x52, 0x9d, 0xf6, 0xc7, 0xcd, 0x07, 0xa0, 0x27, 0xf9, 0xba, 0x4b, 0xef, 0xa2, 0xa3, 0xff, 0x3c, 0x99, 0x00, 0x3e, 0x80, 0x03, 0x75, 0x40, 0xff, 0xe1, 0x57, 0xf9, 0x37, 0xe3, 0x00, 0x25, 0x6e, 0x02, 0x2b, 0xe8, 0xfd, 0x52, 0xd1, 0xfe, 0x56, 0x5e, 0x00, 0x0e, 0x18, 0xfd, 0x26, 0x7c, 0xfe, 0x3d, 0x02, 0xfc, 0x56, 0xce, 0xfc, 0x6a, 0xfe, 0xfe, 0xb7, 0x55, 0xfd, 0x01, 0x53, 0xfe, 0x80, 0xf3, 0xff, 0x52, 0x25, 0x00, 0x80, 0xb3, 0xfe, 0x8d, 0x22, 0x34, 0xa8, 0x13, 0x2b, 0x23, 0xab, 0xfb, 0x0b, 0xbe, 0x12, 0x49, 0xc2, 0x03, 0x50, 0xc0, 0xfb, 0x91, 0x83, 0x00, 0x16, 0x19, 0xee, 0xba, 0x59, 0xf6, 0xfe, 0xce, 0x0b, 0x79, 0xfa, 0xfa, 0xab, 0x3f, 0xeb, 0xf6, 0x31, 0xfd, 0xc8, 0xcf, 0x00, 0xa9, 0xef, 0x04, 0xa1, 0x26, 0x01, 0xf8, 0x9f, 0xf8, 0xb0, 0xc8, 0xff, 0xd9, 0xfc, 0x02, 0x1e, 0x7f, 0xfd, 0x76, 0xd1, 0xfd, 0x12, 0xe4, 0x00, 0x9e, 0xce, 0xfc, 0x55, 0x28, 0xfe, 0x53, 0x65, 0xfb, 0x61, 0x19, 0xfc, 0x75, 0x51, 0xff, 0xa6, 0x8d, 0xfd, 0xdf, 0xd4, 0xfd, 0xfc, 0xbf, 0xff, 0x26, 0x4c, 0x00, 0x0b, 0x6e, 0xfe, 0x64, 0x7b, 0x3a, 0x0d, 0xc9, 0x2f, 0x7a, 0x2a, 0xf4, 0x72, 0xd8, 0x0e, 0x82, 0x61, 0x02, 0xfd, 0x9a, 0xfc, 0xe4, 0x4c, 0x06, 0x62, 0x58, 0xed, 0x93, 0xf9, 0xf2, 0xcc, 0x61, 0x0e, 0x6b, 0x9e, 0xff, 0x4b, 0xaa, 0xe9, 0xa7, 0xea, 0xf9, 0x1c, 0x22, 0x00, 0x09, 0x72, 0x05, 0x8d, 0x8e, 0x02, 0xa0, 0xc6, 0xf7, 0xa1, 0x2c, 0xfe, 0x68, 0x68, 0x03, 0xdb, 0x1e, 0xfe, 0x8f, 0xf1, 0xfc, 0x4c, 0xdf, 0x00, 0x9b, 0xa6, 0xfc, 0x88, 0x49, 0xfe, 0x30, 0x52, 0xfb, 0xb1, 0x16, 0xfb, 0x84, 0x87, 0xff, 0x34, 0xde, 0xfd, 0x77, 0x7d, 0xfd, 0x40, 0x71, 0xff, 0x8a, 0xcf, 0x00, 0xa3, 0xbf, 0xfe, 0x1a, 0x63, 0x42, 0xe3, 0x50, 0x31, 0x00, 0xf8, 0xec, 0x88, 0x60, 0x0d, 0xe7, 0x1c, 0xff, 0x98, 0xa9, 0xfe, 0xb3, 0x66, 0x0a, 0x6b, 0xd6, 0xeb, 0x53, 0xac, 0xf1, 0xf4, 0x0b, 0x11, 0x13, 0x90, 0x04, 0x93, 0x57, 0xe8, 0xe7, 0x24, 0xf6, 0x87, 0xd6, 0xfd, 0x83, 0xb8, 0x06, 0xdb, 0xa2, 0x03, 0xe8, 0xa6, 0xf5, 0xf8, 0x6f, 0xfc, 0x54, 0x48, 0x04, 0x90, 0x68, 0xfe, 0x76, 0x81, 0xfb, 0xf9, 0x4b, 0x01, 0xa5, 0xb7, 0xfc, 0x7e, 0xaa, 0xfe, 0x14, 0x58, 0xfb, 0x5e, 0x4a, 0xfa, 0x78, 0x38, 0xff, 0x6c, 0xf7, 0xfd, 0x93, 0xc8, 0xfd, 0x9f, 0xdb, 0xff, 0xb7, 0xc5, 0x00, 0x7f, 0x2f, 0xfe, 0xd9, 0x41, 0x47, 0xd3, 0x7d, 0x32, 0x2c, 0x41, 0xe9, 0x95, 0x2d, 0x0c, 0xfc, 0xa7, 0xfb, 0x64, 0xb0, 0x00, 0x7e, 0x31, 0x0d, 0x20, 0x85, 0xeb, 0x39, 0xbe, 0xef, 0xae, 0xcf, 0x11, 0x92, 0xd3, 0x09, 0x0c, 0xc2, 0xe7, 0x92, 0x87, 0xf3, 0xf3, 0xe7, 0xfa, 0x61, 0xdd, 0x05, 0xbb, 0xd4, 0x04, 0x56, 0x8f, 0xf5, 0x98, 0x01, 0xfb, 0x79, 0x82, 0x03, 0x70, 0x5a, 0xfe, 0x84, 0xe5, 0xfa, 0x3c, 0xb1, 0x01, 0xd9, 0x68, 0xfc, 0x02, 0x2d, 0xff, 0xa2, 0x6b, 0xfb, 0xfc, 0x67, 0xf9, 0x00, 0x44, 0xff, 0x54, 0xcc, 0xfe, 0xaf, 0x1a, 0xfe, 0x1a, 0xa7, 0xff, 0x4e, 0x6d, 0x00, 0x2b, 0xe6, 0xfd, 0xdb, 0x39, 0x4b, 0xf4, 0x56, 0x34, 0x13, 0x16, 0xe7, 0xc3, 0x09, 0x0a, 0x12, 0x51, 0xf8, 0x92, 0x0a, 0x03, 0xb5, 0xe3, 0x0f, 0x06, 0xd1, 0xeb, 0x53, 0xb3, 0xec, 0x21, 0x1c, 0x11, 0xe2, 0x38, 0x0f, 0xba, 0x5e, 0xe9, 0x19, 0x77, 0xf1, 0x51, 0xe2, 0xf5, 0xff, 0xd7, 0x04, 0xe0, 0x9d, 0x07, 0xe1, 0xf3, 0xf5, 0x7a, 0x85, 0xf9, 0x25, 0x6b, 0x02, 0x08, 0x27, 0xfe, 0x31, 0xe2, 0xfa, 0x75, 0xec, 0x01, 0xbd, 0xd2, 0xfb, 0xa2, 0x33, 0xff, 0xc6, 0x71, 0xfb, 0xc9, 0x71, 0xf9, 0x20, 0xae, 0xff, 0xba, 0x62, 0xff, 0x54, 0x3f, 0xfe, 0xd2, 0x97, 0xff, 0xc9, 0x32, 0x00, 0x83, 0x97, 0xfd, 0x9d, 0xd5, 0x4d, 0x12, 0xe9, 0x35, 0x88, 0x9e, 0xe7, 0x79, 0xe0, 0x07, 0xd9, 0xff, 0xf5, 0xd2, 0x3a, 0x04, 0xee, 0xcb, 0x10, 0x74, 0xa2, 0xed, 0xf6, 0x32, 0xe9, 0xec, 0x62, 0x0f, 0x6d, 0x07, 0x14, 0xac, 0x48, 0xec, 0xaa, 0x7f, 0xef, 0x3c, 0x30, 0xf1, 0xa3, 0xca, 0x03, 0x96, 0x47, 0x0a, 0x21, 0xa3, 0xf7, 0xec, 0xdd, 0xf7, 0x19, 0xb0, 0x01, 0xed, 0xfc, 0xfd, 0xda, 0xf6, 0xfa, 0x83, 0xb5, 0x01, 0xa5, 0xb6, 0xfa, 0x24, 0x64, 0xff, 0x13, 0x28, 0xfc, 0xdb, 0xa2, 0xf9, 0x08, 0x91, 0xff, 0x63, 0xd3, 0xff, 0xff, 0x4b, 0xfe, 0x38, 0xee, 0xff, 0xcb, 0xd2, 0xff, 0x7d, 0x1d, 0xfd, 0xd2, 0x10, 0x4f, 0xed, 0x4e, 0x37, 0x5b, 0x5b, 0xe9, 0x98, 0xe2, 0x06, 0xb8, 0x50, 0xf4, 0x99, 0x1b, 0x04, 0x74, 0xa8, 0x10, 0xa3, 0x32, 0xef, 0x9e, 0x2f, 0xe6, 0x7e, 0x33, 0x0d, 0xfb, 0xdb, 0x16, 0x92, 0x77, 0xf0, 0xb2, 0x7b, 0xee, 0x0f, 0x19, 0xed, 0xe1, 0xda, 0x02, 0x4d, 0xa4, 0x0b, 0x07, 0xa9, 0xfa, 0x14, 0x8a, 0xf6, 0x51, 0xa8, 0x00, 0xa3, 0x63, 0xfe, 0xde, 0x72, 0xfa, 0xb7, 0xf8, 0x00, 0xb6, 0x66, 0xfa, 0x18, 0xe0, 0xff, 0x2b, 0x3f, 0xfc, 0x42, 0x35, 0xfa, 0x96, 0xd8, 0xfe, 0x3e, 0xce, 0xff, 0x8c, 0xc4, 0xfe, 0x10, 0xbc, 0xff, 0xe4, 0x72, 0xff, 0x1b, 0xf1, 0xfc, 0x57, 0x2f, 0x4e, 0xfb, 0x2a, 0x39, 0x9d, 0x64, 0xec, 0xd2, 0x0e, 0x07, 0x35, 0xc0, 0xf2, 0xfb, 0x7e, 0x03, 0x6c, 0xd9, 0x0f, 0x8c, 0xdb, 0xef, 0x53, 0x09, 0xe4, 0xf8, 0x89, 0x09, 0x4f, 0x91, 0x18, 0xfd, 0xb7, 0xf5, 0xa9, 0xbc, 0xef, 0xfe, 0xb4, 0xe8, 0x02, 0xcc, 0x00, 0x0c, 0xe6, 0x0c, 0x56, 0x42, 0xfe, 0x0c, 0x0f, 0xf6, 0xb9, 0xa6, 0xfe, 0xa7, 0x50, 0xff, 0x80, 0x90, 0xf9, 0xfa, 0x9c, 0x00, 0xd6, 0xe3, 0xfa, 0x07, 0x39, 0x00, 0xaa, 0x4a, 0xfc, 0xeb, 0x1d, 0xfa, 0x04, 0x32, 0xfe, 0x26, 0xa3, 0xff, 0x1f, 0xfa, 0xfe, 0x72, 0xe0, 0xfe, 0x03, 0xcd, 0xff, 0x79, 0x03, 0xfd, 0x38, 0x63, 0x4c, 0x8f, 0x2f, 0x3a, 0x1d, 0x4b, 0xf1, 0x75, 0x52, 0x08, 0x75, 0x79, 0xf1, 0xc4, 0xc5, 0x02, 0x75, 0x7c, 0x0e, 0xf9, 0x22, 0xf0, 0x82, 0x28, 0xe2, 0x01, 0xd0, 0x05, 0x06, 0xb5, 0x18, 0x81, 0xe7, 0xfa, 0x61, 0x08, 0xf4, 0x71, 0xbc, 0xe4, 0xb5, 0x96, 0xfd, 0x8c, 0x0e, 0x0e, 0xd9, 0x48, 0x01, 0x5c, 0x14, 0xf7, 0x4f, 0x67, 0xfc, 0x6e, 0xc7, 0xff, 0x05, 0xdb, 0xf9, 0xa4, 0x47, 0x00, 0x95, 0xa1, 0xfb, 0xd3, 0xbf, 0x00, 0xfa, 0xf6, 0xfb, 0x41, 0xc9, 0xf9, 0x22, 0xef, 0xfd, 0xe3, 0xd6, 0xfe, 0x68, 0x4b, 0xff, 0x94, 0x4c, 0xfe, 0x86, 0x1a, 0x00, 0xf6, 0xb5, 0xfd, 0x17, 0xe6, 0x49, 0xa4, 0xfe, 0x39, 0x3e, 0x7f, 0xf7, 0x2b, 0x1e, 0x09, 0x74, 0x8b, 0xf1, 0xae, 0xb9, 0x01, 0x0c, 0x5b, 0x0c, 0x3a, 0x16, 0xf2, 0x9e, 0x50, 0xdf, 0xf4, 0x2f, 0x02, 0xa2, 0x3d, 0x17, 0xb4, 0x97, 0xfe, 0x8e, 0xb7, 0xfa, 0xc9, 0x88, 0xe2, 0x1a, 0xc6, 0xf8, 0xae, 0xca, 0x0e, 0xab, 0xc5, 0x02, 0x53, 0x0e, 0xf9, 0xdd, 0xd2, 0xfb, 0x34, 0x13, 0xff, 0xef, 0x8e, 0xfb, 0x1e, 0xc4, 0xff, 0x9a, 0x45, 0xfb, 0x9a, 0x81, 0x01, 0xfb, 0x19, 0xfc, 0xf1, 0x06, 0xf9, 0x49, 0xb2, 0xfd, 0xb4, 0xcc, 0xfd, 0x10, 0x8f, 0xff, 0xaf, 0xee, 0xfe, 0x44, 0x4f, 0x00, 0xc4, 0xa1, 0xfe, 0x4a, 0xba, 0x46, 0xfe, 0xa5, 0x39, 0x1a, 0x56, 0xfc, 0x6c, 0xa2, 0x08, 0x63, 0x24, 0xf4, 0xab, 0x22, 0x01, 0xb8, 0xfc, 0x08, 0x47, 0x6f, 0xf4, 0x52, 0x49, 0xdd, 0x50, 0xd1, 0xfe, 0xa9, 0x7b, 0x15, 0x1f, 0xc4, 0xff, 0x48, 0xec, 0x00, 0xde, 0x51, 0xe3, 0x5d, 0x84, 0xf2, 0x44, 0x52, 0x0e, 0x66, 0x9a, 0x03, 0xa1, 0x18, 0xfb, 0x09, 0xf7, 0xfc, 0xe3, 0x01, 0xfe, 0x50, 0x66, 0xfc, 0x01, 0xcf, 0xff, 0x61, 0xd6, 0xfa, 0x4d, 0x62, 0x01, 0x28, 0xec, 0xfb, 0x4b, 0x4e, 0xf8, 0xba, 0x00, 0xfe, 0xfc, 0x09, 0xfd, 0x65, 0x0d, 0x00, 0x97, 0xe6, 0xff, 0x41, 0x56, 0x00, 0x39, 0x51, 0xff, 0xc9, 0x65, 0x43, 0xf9, 0x0a, 0x36, 0x1d, 0xd2, 0x01, 0x2f, 0x9c, 0x0b, 0xa2, 0x7b, 0xf4, 0xa1, 0x8c, 0x00, 0x23, 0x6c, 0x06, 0x61, 0x59, 0xf6, 0x92, 0xa8, 0xdd, 0x8c, 0x87, 0xf9, 0x3c, 0x21, 0x14, 0xc1, 0xb8, 0x00, 0x18, 0x5c, 0x05, 0x41, 0xce, 0xe6, 0x1b, 0xd4, 0xea, 0xf1, 0x1d, 0x0c, 0x74, 0x7e, 0x05, 0x63, 0x13, 0xfd, 0xc0, 0x58, 0xfe, 0xe9, 0x9e, 0xfd, 0xb6, 0x39, 0xfd, 0xb1, 0xb9, 0xff, 0x6c, 0x35, 0xfa, 0x8e, 0x46, 0x00, 0x2b, 0x49, 0xfc, 0x2e, 0xb1, 0xf7, 0xf9, 0x28, 0xfe, 0xde, 0x91, 0xfd, 0x9a, 0x0e, 0x00, 0x33, 0x14, 0x01, 0x42, 0x92, 0x00, 0xb4, 0xfd, 0xfe, 0xfe, 0x88, 0x3f, 0x2c, 0xbd, 0x34, 0xa9, 0xb8, 0x02, 0x0c, 0xff, 0x0e, 0xbe, 0x04, 0xf6, 0x00, 0x8e, 0xfe, 0xa8, 0xd1, 0x06, 0x3f, 0x30, 0xf6, 0xa7, 0x08, 0xe0, 0x8a, 0x7b, 0xf5, 0x25, 0xac, 0x13, 0x56, 0x68, 0x00, 0xa4, 0x19, 0x05, 0x9d, 0xb1, 0xed, 0x11, 0xf3, 0xe4, 0x99, 0xb3, 0x07, 0x02, 0x05, 0x08, 0xb7, 0x94, 0xfe, 0x7a, 0x25, 0xff, 0x09, 0x97, 0xfd, 0xd3, 0x70, 0xfd, 0x52, 0x66, 0x00, 0x47, 0xad, 0xf9, 0xf2, 0x86, 0xfd, 0x78, 0x10, 0xfe, 0x5c, 0x54, 0xf8, 0xad, 0xbe, 0xfd, 0x73, 0x5c, 0xfe, 0xde, 0xe0, 0xff, 0x54, 0x6f, 0x01, 0x83, 0x34, 0x00, 0x88, 0x04, 0xff, 0x3d, 0x1e, 0x3d, 0xc9, 0x81, 0x33, 0x86, 0x0a, 0x01, 0xe7, 0xcb, 0x10, 0x5c, 0x7f, 0xf9, 0x8d, 0xec, 0xfa, 0x20, 0x52, 0x06, 0x08, 0x45, 0xf8, 0x10, 0x98, 0xe4, 0x6f, 0xef, 0xf2, 0x1c, 0xc3, 0x11, 0x62, 0xf5, 0xff, 0x66, 0x28, 0x01, 0xc8, 0x57, 0xf6, 0xb8, 0xf6, 0xe3, 0x63, 0xc5, 0xff, 0xbb, 0x6e, 0x09, 0x6e, 0x1f, 0x00, 0x2e, 0x85, 0x00, 0x96, 0x8b, 0xfe, 0x74, 0xf6, 0xfc, 0xde, 0x78, 0xff, 0xf2, 0x81, 0xf9, 0xfe, 0xaf, 0xfc, 0x2d, 0x69, 0xff, 0x52, 0x66, 0xf9, 0x74, 0xac, 0xfd, 0x78, 0x64, 0xff, 0xbe, 0xf3, 0xfe, 0x74, 0x43, 0x01, 0x78, 0x35, 0x00, 0x96, 0xcc, 0xfe, 0x01, 0x48, 0x3a, 0x76, 0xda, 0x32, 0x43, 0xbf, 0xfe, 0x9b, 0x02, 0x11, 0x8c, 0x4c, 0xfd, 0x09, 0x8c, 0xfb, 0x96, 0x23, 0x02, 0x8c, 0x25, 0xf8, 0xc9, 0xb4, 0xed, 0x56, 0x30, 0xf0, 0x81, 0xbb, 0x0f, 0xe9, 0x68, 0x01, 0x48, 0x9b, 0xfa, 0xdf, 0x94, 0xfd, 0xda, 0xab, 0xe7, 0x40, 0x80, 0xf7, 0xd2, 0x4b, 0x09, 0x67, 0x2c, 0x01, 0x9c, 0xf7, 0xff, 0xf9, 0x48, 0x01, 0xb9, 0x4c, 0xfd, 0x06, 0x79, 0xfc, 0xdf, 0x66, 0xfa, 0x34, 0xb0, 0xfc, 0x76, 0xc8, 0x00, 0x4c, 0xb0, 0xfb, 0xfd, 0xf3, 0xfb, 0x33, 0x86, 0xff, 0x06, 0x30, 0xff, 0xf3, 0xc8, 0x00, 0xf1, 0x2d, 0x00, 0x5a, 0xf5, 0xfe, 0x81, 0x88, 0x36, 0xf8, 0x72, 0x2f, 0x0d, 0x92, 0xfe, 0xc5, 0xa1, 0x12, 0x88, 0x21, 0x00, 0x7b, 0x8f, 0xfb, 0xf8, 0x0a, 0x01, 0x4f, 0xf7, 0xf6, 0xff, 0xa9, 0xf2, 0x26, 0xd1, 0xf1, 0x87, 0x43, 0x0c, 0x70, 0x25, 0x04, 0xaf, 0x8d, 0xf7, 0x7c, 0xfa, 0xff, 0x54, 0x59, 0xee, 0x81, 0x50, 0xf1, 0xbc, 0x1a, 0x07, 0xad, 0x20, 0x02, 0xb7, 0x21, 0xfe, 0xdf, 0x39, 0x02, 0x79, 0xca, 0xfe, 0x99, 0xef, 0xfb, 0xa6, 0x65, 0xfa, 0x35, 0x4f, 0xfd, 0xd4, 0xc6, 0x01, 0x23, 0x62, 0xfd, 0xb2, 0x4d, 0xfa, 0xc4, 0x57, 0xff, 0xe3, 0xf6, 0xff, 0x66, 0x3c, 0x00, 0x75, 0x76, 0x00, 0x49, 0x27, 0xff, 0xdd, 0x75, 0x32, 0x27, 0xf4, 0x2a, 0xda, 0xc3, 0xff, 0xac, 0x6c, 0x14, 0x17, 0x0f, 0x01, 0xf0, 0x8f, 0xfa, 0x31, 0xb2, 0x01, 0x28, 0x29, 0xfa, 0x53, 0xbb, 0xf2, 0xa7, 0xfb, 0xf0, 0xa8, 0x6c, 0x0b, 0x85, 0x31, 0x06, 0x0b, 0xe4, 0xf6, 0x94, 0xe9, 0xff, 0x0b, 0x76, 0xf4, 0x5b, 0x89, 0xef, 0x43, 0x11, 0x04, 0xff, 0xb9, 0x02, 0x4b, 0x80, 0xfc, 0x89, 0xc8, 0x00, 0xb1, 0xdd, 0xfe, 0xf4, 0x78, 0xfd, 0xad, 0x41, 0xfc, 0xf5, 0xb5, 0xfc, 0x22, 0xc6, 0x00, 0xc4, 0x69, 0xfe, 0x39, 0x9a, 0xfa, 0x77, 0xc2, 0xff, 0xac, 0x19, 0x00, 0xf9, 0xca, 0xff, 0xef, 0xe3, 0x00, 0x7a, 0xca, 0xfe, 0x45, 0xbd, 0x2c, 0x9e, 0x95, 0x26, 0xbb, 0x35, 0x02, 0x0b, 0xf1, 0x15, 0xa6, 0x82, 0x01, 0xf8, 0xb2, 0xf9, 0xa9, 0x40, 0x03, 0x4f, 0x74, 0xfd, 0xcf, 0xd7, 0xf3, 0xf9, 0xe0, 0xef, 0xd5, 0x87, 0x07, 0x9c, 0xf0, 0x07, 0x02, 0x1f, 0xf9, 0x17, 0x80, 0xff, 0x70, 0x6a, 0xf8, 0x88, 0x26, 0xf0, 0x97, 0x4e, 0x02, 0x2d, 0xe9, 0x02, 0x34, 0x43, 0xfb, 0x7c, 0x58, 0xff, 0xf6, 0x08, 0xfe, 0x2a, 0xc7, 0xfd, 0x0c, 0xa5, 0xfe, 0xcb, 0xfc, 0xfc, 0x0c, 0xc7, 0xfe, 0x8f, 0xeb, 0xfe, 0xbf, 0x32, 0xfc, 0x1d, 0x52, 0x00, 0xa8, 0x55, 0x00, 0x26, 0x78, 0xff, 0x68, 0x8d, 0x00, 0x14, 0xc3, 0xfe, 0x41, 0x4f, 0x2b, 0x2e, 0xac, 0x21, 0x55, 0xf3, 0x01, 0x62, 0xbe, 0x1b, 0x40, 0x4a, 0x00, 0x7a, 0xb3, 0xf6, 0x7d, 0x61, 0x06, 0xd1, 0x14, 0x01, 0x92, 0xf9, 0xf3, 0x89, 0xfe, 0xec, 0x47, 0x63, 0x05, 0x77, 0x58, 0x09, 0x89, 0x1b, 0xfa, 0x6f, 0x2b, 0x02, 0x77, 0xa9, 0xf9, 0xb2, 0x36, 0xed, 0xbc, 0xa4, 0x03, 0x5a, 0xc8, 0x03, 0x88, 0x7f, 0xf9, 0x18, 0x39, 0xff, 0xb5, 0x71, 0xfc, 0x66, 0x71, 0xfc, 0xc0, 0x8c, 0xff, 0x98, 0x16, 0xfd, 0xd5, 0x98, 0xff, 0x92, 0x70, 0xff, 0x73, 0xe1, 0xfb, 0xbe, 0x06, 0x02, 0x51, 0x32, 0x01, 0x67, 0xda, 0xfe, 0x68, 0xf7, 0xff, 0x92, 0xb7, 0xfe, 0xc3, 0x75, 0x24, 0x72, 0x29, 0x21, 0x7c, 0x0e, 0x08, 0xba, 0xaf, 0x18, 0x8d, 0x19, 0xff, 0x69, 0x1e, 0xf6, 0x4a, 0x65, 0x05, 0x72, 0xe6, 0xfe, 0xb6, 0x89, 0xf7, 0xd1, 0x9b, 0xf1, 0x2d, 0x0a, 0xff, 0x7b, 0x7c, 0x06, 0xa2, 0x5e, 0xfd, 0x19, 0xba, 0x03, 0x65, 0xed, 0xfc, 0xa9, 0x57, 0xef, 0xca, 0xe4, 0xfd, 0x71, 0xc7, 0x03, 0xbf, 0xe7, 0xfe, 0xe0, 0x63, 0xff, 0xa8, 0xf9, 0xfb, 0x88, 0x18, 0xfd, 0x80, 0xc6, 0xff, 0xc6, 0x70, 0xfe, 0xd9, 0xe9, 0xff, 0xf6, 0x28, 0xff, 0x2d, 0x8c, 0xfc, 0x1e, 0x1d, 0x00, 0xab, 0xe0, 0x00, 0xd1, 0xe0, 0xfe, 0xe1, 0xd8, 0xff, 0x7d, 0x58, 0xff, 0x2a, 0x0d, 0x20, 0x7e, 0xbc, 0x1e, 0x29, 0x51, 0x08, 0xcb, 0x46, 0x16, 0xb6, 0xab, 0x00, 0xca, 0x6b, 0xf9, 0x42, 0xf4, 0x04, 0x46, 0x1c, 0xfe, 0xd3, 0x26, 0xf9, 0x9f, 0x01, 0xf3, 0xe0, 0x0e, 0xfe, 0x1d, 0xe8, 0x04, 0x5a, 0xe3, 0xfd, 0xd5, 0xfd, 0x02, 0xa0, 0xd7, 0xfe, 0x4e, 0xf3, 0xf2, 0xe0, 0x37, 0xfc, 0x29, 0x5c, 0x04, 0x61, 0xe7, 0xff, 0x7f, 0xaf, 0xfd, 0xe4, 0xb3, 0xfc, 0x1a, 0x39, 0xfe, 0x17, 0xbe, 0xff, 0x7a, 0x16, 0xfe, 0x92, 0xa3, 0xfe, 0x10, 0x3b, 0xff, 0x1a, 0x4a, 0xfe, 0x11, 0xaa, 0xff, 0xf7, 0x55, 0xff, 0x45, 0xc1, 0xfe, 0x92, 0x69, 0x00, 0x56, 0x95, 0xff, 0x75, 0x7f, 0x1c, 0x39, 0x7d, 0x1b, 0xd5, 0x7d, 0x08, 0x16, 0x79, 0x12, 0xdd, 0x3b, 0x02, 0x06, 0xe1, 0xfd, 0x1c, 0x4a, 0x03, 0x3e, 0xc0, 0xfd, 0x26, 0x31, 0xfa, 0xfd, 0xa8, 0xf4, 0x64, 0x26, 0xfe, 0xc7, 0x53, 0x03, 0x8b, 0x94, 0xfe, 0x01, 0x68, 0x02, 0x72, 0xc6, 0xff, 0x26, 0x96, 0xf5, 0x30, 0xd8, 0xfc, 0x33, 0xac, 0x04, 0xed, 0xbe, 0xff, 0xad, 0x99, 0xfd, 0xbb, 0xad, 0xfd, 0x2d, 0x05, 0xff, 0x0d, 0x7e, 0xff, 0x61, 0x92, 0xfd, 0xc6, 0xbe, 0xfd, 0xb1, 0x01, 0xff, 0x0d, 0xd7, 0xfe, 0x33, 0xe0, 0xfe, 0x71, 0xe8, 0xfe, 0xfb, 0x76, 0xff, 0xfd, 0xaa, 0x00, 0xd7, 0xca, 0xff, 0x8e, 0x9b, 0x19, 0xd8, 0x57, 0x19, 0x86, 0xe0, 0x07, 0xde, 0x09, 0x0f, 0x74, 0x43, 0x04, 0xcf, 0x31, 0x00, 0x46, 0xde, 0x01, 0x13, 0xae, 0xfd, 0x2f, 0x69, 0xfa, 0xf2, 0x65, 0xf6, 0xcb, 0x3c, 0xfe, 0xbe, 0x65, 0x02, 0x47, 0x04, 0xff, 0xe5, 0x2f, 0x02, 0xf8, 0x5f, 0x00, 0x3c, 0xf1, 0xf6, 0x83, 0xa7, 0xfd, 0x5a, 0xcb, 0x04, 0xa4, 0x81, 0xff, 0x91, 0xb1, 0xfd, 0xbc, 0x64, 0xfe, 0xb0, 0x0b, 0xff, 0xb7, 0x3a, 0xff, 0xd5, 0x84, 0xfd, 0xe7, 0x36, 0xfd, 0x96, 0xbd, 0xfe, 0xca, 0x8d, 0xfe, 0xfb, 0xcb, 0xfe, 0xda, 0x8d, 0xff, 0x01, 0xa2, 0xff, 0xb1, 0x53, 0x00, 0x31, 0xf2, 0xff, 0x79, 0xfe, 0x15, 0xe6, 0x22, 0x17, 0xa1, 0xe7, 0x06, 0x26, 0xc1, 0x0c, 0xd5, 0x9e, 0x06, 0x64, 0xcf, 0x00, 0x3a, 0x1a, 0x01, 0x70, 0x11, 0xfe, 0x81, 0x07, 0xfb, 0xd2, 0xa4, 0xf8, 0xae, 0x2e, 0xfe, 0xe1, 0x86, 0x01, 0x00, 0x1c, 0x00, 0x76, 0xc4, 0x02, 0x65, 0x3c, 0x00, 0xc8, 0x93, 0xf8, 0x04, 0x0b, 0xff, 0x2e, 0x4c, 0x04, 0x74, 0x72, 0xff, 0xe1, 0xb6, 0xfd, 0x5b, 0xb0, 0xfe, 0x66, 0xa8, 0xff, 0xc1, 0x0b, 0xff, 0x2b, 0x76, 0xfd, 0xb6, 0x63, 0xfd, 0x53, 0x2d, 0xff, 0x12, 0xae, 0xfe, 0xc9, 0x8a, 0xfe, 0xeb, 0xe8, 0xff, 0x99, 0x0f, 0x00, 0xa0, 0x54, 0x00, 0x9f, 0xc7, 0xff, 0xf6, 0x55, 0x13, 0x63, 0x48, 0x14, 0xf2, 0x5a, 0x06, 0x73, 0x46, 0x0c, 0x10, 0xf0, 0x06, 0x45, 0x67, 0x00, 0x7d, 0xd3, 0x00, 0x8f, 0x76, 0xfe, 0xec, 0xdf, 0xfb, 0x80, 0x50, 0xfa, 0xb0, 0xe4, 0xfd, 0xb4, 0xbd, 0x00, 0xb2, 0x15, 0x01, 0xcc, 0x25, 0x03, 0xcf, 0x2a, 0x00, 0xf3, 0x22, 0xfa, 0xa8, 0x9f, 0xff, 0x25, 0xeb, 0x02, 0xcd, 0x13, 0xff, 0x8c, 0x39, 0xfe, 0xa9, 0x17, 0xff, 0x30, 0x8b, 0xff, 0xd8, 0xe0, 0xfe, 0x1c, 0xf1, 0xfd, 0xe1, 0x1f, 0xfe, 0xa5, 0xa2, 0xff, 0x24, 0x73, 0xfe, 0x03, 0x3f, 0xfe, 0x90, 0xd6, 0xff, 0x50, 0x2d, 0x00, 0x40, 0x51, 0x00, 0xed, 0x8f, 0xff, 0xd8, 0x22, 0x10, 0xc4, 0xf7, 0x11, 0x45, 0x58, 0x06, 0xd7, 0x4a, 0x0b, 0x66, 0x90, 0x06, 0x6e, 0xa5, 0x00, 0x69, 0xf0, 0x00, 0x84, 0xb9, 0xfe, 0xcf, 0xcd, 0xfc, 0xbf, 0x8a, 0xfb, 0xba, 0xa7, 0xfd, 0x2e, 0x45, 0x00, 0xfe, 0x4f, 0x02, 0x89, 0xa0, 0x03, 0x27, 0x17, 0x00, 0x50, 0x8f, 0xfb, 0xac, 0x2e, 0xff, 0xa9, 0xc0, 0x01, 0x4e, 0x7c, 0xff, 0x67, 0x94, 0xfe, 0xe6, 0x04, 0xff, 0x99, 0x7c, 0xff, 0x90, 0x85, 0xff, 0xa1, 0xe9, 0xfe, 0x88, 0xab, 0xfe, 0xa9, 0x4d, 0xff, 0xca, 0xeb, 0xfd, 0x8d, 0x55, 0xfe, 0x39, 0xfe, 0xff, 0xd9, 0xfa, 0xff, 0xdd, 0x25, 0x00, 0xcf, 0xaa, 0xff, 0x6b, 0x65, 0x0c, 0xfc, 0xba, 0x0f, 0x67, 0xfd, 0x06, 0xe4, 0x29, 0x09, 0x85, 0xda, 0x05, 0x57, 0x22, 0x02, 0x90, 0x80, 0x01, 0xb5, 0xc8, 0xfe, 0x78, 0x53, 0xfd, 0xe2, 0xe2, 0xfc, 0x95, 0xb9, 0xfe, 0xba, 0x21, 0x01, 0x6c, 0x38, 0x03, 0x0c, 0x78, 0x03, 0x8d, 0x3d, 0x00, 0xd7, 0xf4, 0xfc, 0x43, 0x43, 0xff, 0x7e, 0x05, 0x01, 0xdb, 0x93, 0xff, 0xf6, 0xe4, 0xfe, 0xcb, 0x6b, 0xff, 0x21, 0x63, 0x00, 0x61, 0x3b, 0x00, 0xeb, 0x15, 0xff, 0x52, 0x6f, 0xfe, 0x1b, 0x17, 0xff, 0xcf, 0x91, 0xfe, 0xa2, 0xb3, 0xfe, 0x6d, 0xef, 0xff, 0x03, 0xd4, 0xff, 0xff, 0xfd, 0xff, 0x37, 0x0d, 0x00, 0x25, 0x6c, 0x09, 0x80, 0x47, 0x0c, 0x86, 0xe1, 0x07, 0x64, 0xa8, 0x08, 0x8e, 0x62, 0x05, 0x64, 0xc4, 0x02, 0x7d, 0x5c, 0x01, 0x3b, 0x86, 0xff, 0xc4, 0x79, 0xfe, 0x44, 0x67, 0xfe, 0xed, 0xcd, 0xff, 0x39, 0x4e, 0x01, 0xe5, 0xae, 0x03, 0x88, 0xd8, 0x03, 0x4b, 0x92, 0x00, 0x27, 0xf8, 0xfd, 0xdc, 0x5c, 0xff, 0xa6, 0x3d, 0x00, 0xb8, 0x88, 0xff, 0x4b, 0x6e, 0xff, 0x04, 0x31, 0x00, 0x42, 0x7e, 0x00, 0xb6, 0xbd, 0xff, 0x2e, 0x5c, 0xff, 0x63, 0x23, 0xff, 0x06, 0x4e, 0xff, 0x56, 0xbf, 0xfe, 0xb8, 0xe5, 0xfe, 0x78, 0xb8, 0xff, 0xef, 0xea, 0xff, 0xcd, 0x10, 0x00, 0xae, 0xfc, 0xff, 0xb8, 0x2c, 0x07, 0x71, 0x03, 0x0a, 0x61, 0x6b, 0x07, 0xcf, 0x13, 0x07, 0x88, 0xaf, 0x04, 0x78, 0x1e, 0x03, 0x01, 0x3b, 0x02, 0x0a, 0x3c, 0x00, 0x15, 0x03, 0x00, 0xb2, 0x9f, 0x00, 0xfd, 0x58, 0x01, 0x73, 0x59, 0x02, 0x6d, 0x9f, 0x03, 0x05, 0xfe, 0x03, 0x2f, 0xdf, 0x00, 0xd2, 0x51, 0xfe, 0xf7, 0x0b, 0xff, 0xb7, 0xbe, 0xff, 0x35, 0x4c, 0x00, 0x48, 0x15, 0x00, 0xc8, 0xd2, 0xff, 0x09, 0x48, 0x00, 0x58, 0x4b, 0x00, 0xf8, 0xd6, 0xff, 0x80, 0x4d, 0xff, 0xf8, 0x4e, 0xff, 0xaa, 0x16, 0xff, 0x63, 0x21, 0xff, 0xbe, 0xdc, 0xff, 0xfe, 0x17, 0x00, 0xa6, 0x00, 0x00, 0x4b, 0xb6, 0xff, 0x96, 0x59, 0x06, 0x1b, 0x85, 0x08, 0x03, 0x44, 0x06, 0x2c, 0x78, 0x05, 0xe1, 0x2d, 0x04, 0xb8, 0x96, 0x03, 0x9d, 0x50, 0x03, 0xea, 0x6e, 0x02, 0x63, 0x3d, 0x01, 0xca, 0xd6, 0x01, 0xd1, 0xb9, 0x02, 0x88, 0xfd, 0x02, 0x09, 0x8b, 0x03, 0x54, 0xf8, 0x02, 0xbc, 0x2e, 0x00, 0x82, 0x85, 0xfe, 0x79, 0xaf, 0xff, 0xb2, 0x45, 0x00, 0xc6, 0x6b, 0x00, 0xd2, 0xfc, 0xff, 0xad, 0xd5, 0xff, 0x5d, 0x52, 0x00, 0x84, 0x6f, 0x00, 0x19, 0x02, 0x00, 0x5f, 0x65, 0xff, 0xba, 0x87, 0xff, 0x7f, 0x92, 0xff, 0xf2, 0xbc, 0xff, 0xb2, 0x0d, 0x00, 0xfe, 0x06, 0x00, 0xf5, 0x87, 0xff, 0xed, 0xf9, 0xfe, 0x6b, 0x17, 0x05, 0x16, 0xa4, 0x06, 0x11, 0xf2, 0x04, 0x30, 0x74, 0x05, 0x7e, 0x1b, 0x05, 0x64, 0x6b, 0x04, 0xba, 0x6d, 0x04, 0xc2, 0x4e, 0x04, 0xc0, 0x7b, 0x03, 0x26, 0x99, 0x02, 0x6e, 0x34, 0x02, 0xd6, 0x40, 0x02, 0xa9, 0x70, 0x02, 0x7d, 0xfe, 0x01, 0x83, 0x6d, 0x00, 0x73, 0x91, 0xff, 0x56, 0x33, 0x00, 0xd0, 0x13, 0x00, 0x8b, 0xcf, 0xff, 0x1a, 0xe5, 0xff, 0x5e, 0xe1, 0xff, 0x82, 0x39, 0x00, 0xb2, 0x9d, 0x00, 0xbf, 0x7f, 0x00, 0x24, 0xe2, 0xff, 0x9e, 0xc7, 0xff, 0x99, 0xaf, 0xff, 0xf5, 0xc7, 0xff, 0xce, 0xf0, 0xff, 0xa1, 0x6b, 0xff, 0x80, 0x04, 0xff, 0x40, 0xd9, 0xfe, 0xe0, 0x9c, 0x04, 0x5f, 0x3e, 0x07, 0xb9, 0xb6, 0x05, 0x69, 0xc2, 0x06, 0x1f, 0xe8, 0x06, 0x69, 0x0c, 0x05, 0xd2, 0x17, 0x04, 0x05, 0x5d, 0x03, 0x97, 0xd8, 0x02, 0xac, 0xbc, 0x02, 0x00, 0x35, 0x02, 0x03, 0x79, 0x01, 0x48, 0xf0, 0x00, 0x3d, 0x41, 0x01, 0x44, 0x3b, 0x01, 0xb8, 0x60, 0x00, 0xf7, 0x09, 0x00, 0x76, 0x99, 0xff, 0xe1, 0x46, 0xff, 0xbe, 0xae, 0xff, 0x9e, 0x57, 0x00, 0xb6, 0xb3, 0x00, 0x44, 0xbb, 0x00, 0xbf, 0xd8, 0x00, 0x39, 0x92, 0x00, 0x2c, 0xb6, 0xff, 0xb1, 0x5d, 0xff, 0x91, 0x45, 0xff, 0xaa, 0x32, 0xff, 0xe9, 0x16, 0xff, 0x53, 0xf7, 0xfe, 0xbd, 0x34, 0xff, 0x0c, 0x4e, 0x05, 0x47, 0x6f, 0x09, 0xd0, 0xfe, 0x07, 0xf6, 0x1d, 0x07, 0xa4, 0xf9, 0x05, 0x97, 0x38, 0x05, 0x3b, 0x2c, 0x04, 0xe7, 0x41, 0x02, 0x5f, 0x2e, 0x01, 0x71, 0x24, 0x01, 0xf7, 0x49, 0x01, 0x5f, 0xa8, 0x01, 0xde, 0xd6, 0x01, 0xf9, 0x7c, 0x01, 0xfa, 0xfc, 0x00, 0x90, 0xda, 0xff, 0x2f, 0x4f, 0xff, 0xbb, 0x7b, 0xff, 0x51, 0xfd, 0xff, 0xfd, 0x06, 0x00, 0x1b, 0x2c, 0x00, 0x52, 0xdf, 0x00, 0x3a, 0xc1, 0x00, 0x6d, 0xb5, 0x00, 0x91, 0xa4, 0x00, 0x9d, 0xde, 0xff, 0xe4, 0x0e, 0xff, 0x21, 0xb6, 0xfe, 0xcb, 0x93, 0xfe, 0x65, 0x08, 0xff, 0x84, 0x58, 0xff, 0xc7, 0x5f, 0xff, 0xe2, 0x2c, 0x06, 0xe4, 0xdc, 0x09, 0x00, 0xd8, 0x07, 0x57, 0xb6, 0x06, 0xd0, 0xcb, 0x05, 0x5d, 0x6c, 0x05, 0x4f, 0x6e, 0x04, 0xe1, 0x3b, 0x02, 0xa8, 0x5c, 0x00, 0xf7, 0xa7, 0xff, 0xf7, 0xa1, 0x00, 0x4a, 0x24, 0x02, 0x5e, 0xe2, 0x01, 0xc3, 0x4b, 0x01, 0x34, 0x18, 0x01, 0x3f, 0x5c, 0x00, 0x6a, 0x2c, 0x00, 0x28, 0xe0, 0xff, 0x9b, 0x9f, 0xff, 0x88, 0xb3, 0xff, 0x3b, 0x49, 0x00, 0xe8, 0x6f, 0x00, 0xd2, 0x11, 0x00, 0xed, 0xa6, 0x00, 0x78, 0x52, 0x01, 0xa6, 0xae, 0x00, 0x05, 0x1c, 0xff, 0x0a, 0x4d, 0xfe, 0x1a, 0x76, 0xfe, 0xaa, 0xd5, 0xfe, 0x52, 0x2b, 0xff, 0x44, 0x84, 0xff, 0x46, 0x30, 0x06, 0x07, 0x9a, 0x09, 0x93, 0x88, 0x06, 0xbb, 0xd7, 0x05, 0xc8, 0xb2, 0x05, 0x51, 0x77, 0x05, 0x45, 0x9e, 0x04, 0xa2, 0x31, 0x02, 0xb7, 0x18, 0x00, 0xef, 0xaa, 0x00, 0x11, 0xcd, 0x01, 0x4a, 0x18, 0x01, 0x69, 0x87, 0x00, 0x8d, 0xcc, 0x00, 0x41, 0xd3, 0x00, 0x87, 0x3e, 0x01, 0x46, 0xad, 0x01, 0xa3, 0x75, 0x00, 0xf6, 0xba, 0xff, 0xdf, 0xbb, 0xff, 0xfa, 0xd0, 0xff, 0x1c, 0xea, 0xff, 0x48, 0xed, 0xff, 0x68, 0x42, 0x00, 0xfc, 0x6e, 0x00, 0xc9, 0x1b, 0x01, 0x4d, 0xbd, 0x00, 0xaa, 0x18, 0xff, 0xef, 0x43, 0xfe, 0x3c, 0x67, 0xfe, 0xc2, 0xe8, 0xfe, 0xd4, 0x58, 0xff, 0xb2, 0x6a, 0x07, 0x78, 0x8d, 0x0a, 0xf6, 0xe3, 0x05, 0xbb, 0x7e, 0x04, 0x68, 0xd7, 0x03, 0xe1, 0x6b, 0x04, 0x04, 0x63, 0x04, 0x84, 0x4a, 0x02, 0x83, 0x88, 0xff, 0x85, 0x3c, 0x00, 0x5c, 0xf2, 0x02, 0x4b, 0x7e, 0x02, 0x2a, 0x20, 0x01, 0x4f, 0x78, 0xff, 0xe9, 0x20, 0xff, 0xea, 0x10, 0x01, 0x28, 0xfd, 0x01, 0x77, 0x92, 0x01, 0x66, 0x58, 0x01, 0xd8, 0x0a, 0x00, 0x7b, 0xa0, 0xff, 0x1c, 0x4d, 0x00, 0xf1, 0xb3, 0xff, 0xeb, 0x55, 0xff, 0x26, 0x1b, 0x00, 0x45, 0x63, 0x00, 0x39, 0x64, 0x00, 0x26, 0xb1, 0x00, 0x77, 0xfc, 0xff, 0x38, 0x19, 0xff, 0x55, 0x7e, 0xfe, 0xf2, 0x7c, 0xfe, 0x06, 0xa3, 0x08, 0x81, 0x7f, 0x0c, 0x26, 0xf2, 0x05, 0xe1, 0x14, 0x04, 0x47, 0x08, 0x03, 0x60, 0xb1, 0x03, 0x36, 0x5a, 0x03, 0x4f, 0xa4, 0x00, 0x74, 0x13, 0xfe, 0xda, 0xe2, 0xfe, 0x30, 0xb7, 0x03, 0x7c, 0xd1, 0x03, 0xb2, 0x3e, 0x01, 0x9f, 0xe5, 0xff, 0xd0, 0xc2, 0xff, 0xd6, 0x11, 0x00, 0x7b, 0xff, 0x00, 0x82, 0x88, 0x01, 0x4c, 0x3f, 0x01, 0x7f, 0xf5, 0x00, 0x2a, 0xbb, 0x00, 0xbc, 0x63, 0x00, 0xb0, 0xca, 0xff, 0xb0, 0xdd, 0xff, 0x95, 0x91, 0xff, 0xcb, 0x46, 0xff, 0x2a, 0xfb, 0xff, 0x2d, 0x8a, 0x00, 0xbe, 0xee, 0x00, 0xd2, 0x9f, 0x00, 0x83, 0x62, 0xff, 0x89, 0x69, 0xfe, 0xcd, 0x0a, 0x0b, 0xa7, 0xdb, 0x0e, 0x6a, 0xfb, 0x05, 0x9c, 0xb2, 0x04, 0x6a, 0xdb, 0x02, 0x9c, 0x1f, 0x03, 0xa4, 0x87, 0x02, 0x33, 0xc7, 0xfe, 0xc2, 0x5b, 0xfb, 0xe3, 0xd9, 0xfc, 0x70, 0x26, 0x04, 0x05, 0xd1, 0x03, 0xa1, 0xb8, 0x00, 0x50, 0x29, 0x00, 0x47, 0x11, 0x00, 0x29, 0xe4, 0x00, 0xe5, 0xce, 0x01, 0xcc, 0xa1, 0x00, 0x54, 0x4f, 0x00, 0x90, 0x69, 0x01, 0x0d, 0xc6, 0x00, 0xc7, 0xc2, 0x00, 0x93, 0x9e, 0x00, 0x37, 0xbd, 0xff, 0x7d, 0xf9, 0xff, 0xef, 0xbf, 0xff, 0xb4, 0x4d, 0xff, 0x7c, 0xfd, 0xff, 0x6b, 0xb8, 0x00, 0x3d, 0x67, 0x01, 0x4d, 0x85, 0x00, 0x7f, 0x2a, 0xff, 0x8e, 0xb0, 0x0d, 0x11, 0x44, 0x11, 0x91, 0xb0, 0x05, 0x79, 0x5d, 0x05, 0xea, 0xb9, 0x02, 0xf9, 0xfc, 0x02, 0xdb, 0x57, 0x02, 0x30, 0x63, 0xfd, 0xf2, 0x56, 0xf9, 0xfa, 0x52, 0xfb, 0x7e, 0xc4, 0x04, 0x42, 0x6b, 0x03, 0x08, 0x2d, 0xff, 0x59, 0x21, 0xff, 0x9c, 0xb3, 0xff, 0x5d, 0x6b, 0x01, 0x2d, 0x67, 0x02, 0xbb, 0xfd, 0x00, 0xe3, 0x0f, 0x01, 0x5c, 0x10, 0x01, 0x8e, 0x26, 0x00, 0x35, 0x0a, 0x01, 0xf1, 0x29, 0x00, 0xb3, 0x0a, 0x00, 0x61, 0x65, 0x00, 0x43, 0xcf, 0xff, 0x7b, 0xa5, 0xff, 0xf0, 0x9b, 0x00, 0x66, 0x77, 0x00, 0xeb, 0x06, 0x00, 0x40, 0x95, 0x00, 0x13, 0x5f, 0x00, 0xf6, 0xf9, 0x10, 0xdb, 0x45, 0x13, 0xf4, 0xfc, 0x04, 0x34, 0x81, 0x06, 0x38, 0x88, 0x02, 0x9f, 0x3c, 0x03, 0x61, 0x89, 0x02, 0xe6, 0x0f, 0xfc, 0x25, 0x0f, 0xf7, 0x9a, 0x52, 0xfa, 0x04, 0x23, 0x06, 0xce, 0xfb, 0x02, 0xe4, 0x86, 0xfd, 0x52, 0xf8, 0xfd, 0x01, 0xeb, 0xfe, 0xb3, 0xeb, 0x00, 0xd5, 0x6c, 0x02, 0x15, 0xee, 0x00, 0x6d, 0x64, 0x01, 0x24, 0x0d, 0x02, 0x41, 0x14, 0x00, 0x08, 0x8b, 0x00, 0xad, 0x2d, 0x00, 0x35, 0xf8, 0xff, 0x98, 0x6c, 0x00, 0x7c, 0xfe, 0xff, 0x48, 0x30, 0x00, 0xa2, 0xd5, 0x00, 0xef, 0x11, 0x00, 0xf1, 0x1e, 0x00, 0x4b, 0x01, 0x00, 0x31, 0x05, 0x00, 0xa8, 0xfb, 0x15, 0x42, 0xb8, 0x15, 0x45, 0x1a, 0x03, 0xa3, 0xe2, 0x07, 0xcd, 0x03, 0x02, 0xdb, 0x7c, 0x03, 0x16, 0x82, 0x02, 0x66, 0x26, 0xfa, 0x2f, 0xd8, 0xf4, 0xad, 0xd3, 0xf9, 0xe8, 0xeb, 0x07, 0xa1, 0x0f, 0x02, 0x8d, 0xf8, 0xfb, 0x75, 0xf2, 0xfc, 0x08, 0x29, 0xfe, 0x73, 0x56, 0x00, 0x91, 0xb3, 0x01, 0xb5, 0x3d, 0x00, 0xb1, 0x4f, 0x01, 0x7d, 0xaa, 0x01, 0xad, 0xc4, 0xff, 0xb6, 0x17, 0x01, 0x13, 0x52, 0x00, 0x6b, 0xb4, 0xff, 0x91, 0x30, 0x00, 0x38, 0x27, 0x00, 0xfe, 0xc7, 0xff, 0x13, 0xee, 0x00, 0x70, 0x3b, 0x00, 0x01, 0xed, 0xff, 0xab, 0x38, 0x00, 0x3b, 0xb1, 0xff, 0xdb, 0xee, 0x1a, 0x60, 0x21, 0x18, 0x81, 0x9c, 0x00, 0xf3, 0x4b, 0x09, 0x4e, 0x94, 0x01, 0x6b, 0x3c, 0x03, 0xf7, 0x73, 0x02, 0x04, 0x09, 0xf8, 0x2e, 0x7e, 0xf3, 0xb5, 0x7d, 0xfa, 0xc3, 0x5b, 0x09, 0x9c, 0xd8, 0x00, 0x88, 0xc1, 0xfa, 0xe5, 0x40, 0xfc, 0x07, 0xf4, 0xfd, 0x6a, 0xf0, 0xff, 0x14, 0x60, 0x01, 0x69, 0xa8, 0xff, 0x20, 0xcd, 0x00, 0xa2, 0x90, 0x01, 0x80, 0xca, 0xfe, 0x5a, 0xfe, 0x00, 0x98, 0x75, 0x00, 0xe5, 0x2d, 0x00, 0x95, 0xce, 0xff, 0x10, 0x47, 0xff, 0x7c, 0xdd, 0xff, 0x48, 0xdc, 0x00, 0x00, 0x59, 0x00, 0x9b, 0x79, 0x00, 0xc0, 0x6e, 0x00, 0x40, 0xc1, 0xff, 0x7d, 0x2c, 0x20, 0x32, 0xb9, 0x1b, 0x30, 0xca, 0xfd, 0xcd, 0x81, 0x0a, 0x94, 0xac, 0x01, 0x21, 0x6a, 0x02, 0x6b, 0x96, 0x02, 0x9a, 0x7e, 0xf5, 0xd7, 0x09, 0xf2, 0x45, 0x31, 0xfb, 0x6d, 0x80, 0x0a, 0x39, 0x52, 0x00, 0xb7, 0xd9, 0xf9, 0x5b, 0x02, 0xfb, 0xee, 0xe4, 0xfd, 0xac, 0x1a, 0x00, 0xd8, 0x59, 0x00, 0x62, 0xc8, 0xff, 0xf4, 0x69, 0x00, 0x2e, 0xda, 0x00, 0x39, 0xa3, 0xfe, 0xaa, 0xeb, 0x00, 0x40, 0x08, 0x00, 0x1c, 0x8a, 0xff, 0x9f, 0x65, 0xff, 0x7f, 0x40, 0xff, 0xb7, 0x6d, 0xff, 0x12, 0x7f, 0x00, 0xf5, 0x83, 0x00, 0x0f, 0x8a, 0x00, 0x67, 0x45, 0x01, 0xf9, 0x76, 0x00, 0xed, 0x1b, 0x24, 0xfa, 0x47, 0x1f, 0xd1, 0xfd, 0xfb, 0x59, 0xae, 0x0a, 0xfe, 0xe8, 0x01, 0x16, 0x02, 0x02, 0xd1, 0xb5, 0x02, 0x61, 0x7a, 0xf3, 0x7a, 0xe5, 0xf0, 0x75, 0xe9, 0xfb, 0x37, 0xb6, 0x0a, 0xa6, 0xc8, 0xff, 0xc2, 0xa5, 0xf9, 0x5c, 0x6c, 0xfa, 0x0c, 0xb1, 0xfd, 0x7d, 0xeb, 0xff, 0x5d, 0x5a, 0x00, 0x99, 0x86, 0xff, 0x80, 0x4a, 0x00, 0x17, 0x58, 0x01, 0x96, 0x3d, 0xfe, 0x97, 0x1e, 0x00, 0x41, 0x38, 0xff, 0x7b, 0xb0, 0xff, 0x00, 0xef, 0xfe, 0xa9, 0xc9, 0xfe, 0xe9, 0xb0, 0xff, 0x21, 0x88, 0x00, 0xea, 0x86, 0x00, 0x17, 0x9c, 0x00, 0xf4, 0x2f, 0x01, 0x6d, 0xeb, 0xff, 0x84, 0x3a, 0x27, 0xcf, 0x82, 0x23, 0xcc, 0xd0, 0xfb, 0x2f, 0x42, 0x0a, 0xa0, 0x29, 0x01, 0xe2, 0x47, 0x01, 0x28, 0x4e, 0x03, 0xc1, 0x73, 0xf1, 0x6c, 0x65, 0xf0, 0x32, 0xc3, 0xfb, 0xac, 0xb0, 0x08, 0x3d, 0x2e, 0x00, 0x9e, 0xbd, 0xfa, 0xe1, 0x10, 0xf9, 0x0e, 0xe6, 0xfc, 0xb3, 0x73, 0xff, 0xfc, 0x97, 0x00, 0x1e, 0x43, 0x01, 0x14, 0x4a, 0xff, 0xad, 0x76, 0x00, 0x26, 0x54, 0xfe, 0xb5, 0xd3, 0xff, 0x4a, 0x74, 0xfe, 0x24, 0xef, 0xfe, 0xed, 0x80, 0xfe, 0x1b, 0x99, 0xfe, 0x35, 0xb0, 0xff, 0xc6, 0x89, 0x00, 0xbb, 0xdc, 0x00, 0x50, 0x1d, 0x00, 0x40, 0xdf, 0x00, 0x8d, 0xaa, 0xff, 0x71, 0x35, 0x28, 0x9c, 0x45, 0x27, 0x65, 0x61, 0xfd, 0x86, 0x3a, 0x0a, 0xb8, 0x04, 0x01, 0x49, 0x37, 0xff, 0x09, 0x47, 0x04, 0x5d, 0x4e, 0xf1, 0xa1, 0xb0, 0xf0, 0x1e, 0x83, 0xfb, 0x07, 0x32, 0x05, 0x12, 0xfd, 0xff, 0xe6, 0xd9, 0xfc, 0xf2, 0x88, 0xf9, 0xc5, 0x85, 0xfb, 0x10, 0x56, 0xff, 0xdc, 0x6a, 0x00, 0x60, 0x2f, 0x02, 0x22, 0x89, 0xff, 0x11, 0xc6, 0xff, 0x7e, 0x30, 0xfe, 0x1d, 0x58, 0xff, 0x28, 0xb4, 0xfe, 0x3e, 0xf0, 0xfe, 0xfc, 0x51, 0xfe, 0x0c, 0xa0, 0xfe, 0xc7, 0x63, 0xff, 0x29, 0x81, 0xff, 0x66, 0xee, 0x00, 0x14, 0x82, 0x00, 0xf4, 0xfd, 0x00, 0x12, 0x79, 0xff, 0xd2, 0xf4, 0x28, 0x4e, 0xca, 0x29, 0x70, 0xda, 0xff, 0x57, 0xf3, 0x0a, 0x5d, 0x53, 0x01, 0x1e, 0xc5, 0xfc, 0x27, 0x69, 0x03, 0x5c, 0xfa, 0xf1, 0xf0, 0xc1, 0xf1, 0xe1, 0xfe, 0xfb, 0x85, 0x94, 0x00, 0xe6, 0x26, 0xff, 0xcb, 0xa1, 0xfe, 0x4d, 0xda, 0xfa, 0x1c, 0x77, 0xfc, 0x84, 0x85, 0xfd, 0x8b, 0x7b, 0xff, 0x7e, 0x94, 0x03, 0x41, 0xde, 0xff, 0xfc, 0x87, 0xfe, 0xc3, 0x25, 0xfe, 0x77, 0xbc, 0xff, 0x66, 0x1c, 0xff, 0x86, 0xdf, 0xfe, 0x84, 0xf2, 0xfd, 0xdd, 0x9b, 0xfe, 0x4c, 0x08, 0xff, 0xd2, 0xe7, 0xfe, 0x2a, 0x99, 0x00, 0x22, 0x36, 0x00, 0x70, 0xbf, 0x00, 0xd6, 0xb2, 0xff, 0x15, 0xc9, 0x29, 0x89, 0x65, 0x2b, 0xa7, 0x43, 0x02, 0x34, 0x17, 0x0d, 0xae, 0x34, 0x02, 0x6d, 0xa0, 0xfa, 0x70, 0x5e, 0x01, 0x47, 0x58, 0xf1, 0xf2, 0xd4, 0xf2, 0x79, 0xb9, 0xfe, 0x8b, 0x49, 0xfc, 0x71, 0x45, 0xfb, 0x5f, 0x1b, 0x01, 0x2f, 0x6c, 0xfd, 0x6f, 0x8a, 0xfd, 0xde, 0x80, 0xfc, 0x85, 0x62, 0xfd, 0x00, 0x8f, 0x03, 0x79, 0x59, 0x00, 0x21, 0xf0, 0xfe, 0xac, 0x31, 0xff, 0x76, 0x21, 0xff, 0x15, 0x75, 0xfe, 0xaa, 0x3c, 0xff, 0xe3, 0xa7, 0xfd, 0xf1, 0x4a, 0xfe, 0xdd, 0xef, 0xfe, 0x15, 0xbf, 0xfd, 0xf7, 0x27, 0x00, 0x1b, 0x57, 0x00, 0xaf, 0xb2, 0x00, 0x1e, 0x76, 0xff, 0x91, 0x62, 0x2b, 0xb9, 0xb9, 0x2b, 0x34, 0xc7, 0x02, 0xf7, 0xc7, 0x0f, 0x88, 0x7c, 0x03, 0x11, 0x9d, 0xf9, 0xd5, 0x43, 0xff, 0x1a, 0xd7, 0xef, 0x54, 0x85, 0xf4, 0x4b, 0x81, 0x01, 0x15, 0xb6, 0xf8, 0x0c, 0xa1, 0xf8, 0x3c, 0x0e, 0x02, 0x94, 0x1c, 0xff, 0x9e, 0xb4, 0xff, 0xcf, 0xb5, 0xfb, 0x29, 0x42, 0xfb, 0x2c, 0x74, 0x03, 0x10, 0x83, 0x01, 0x97, 0x9e, 0xfe, 0x3f, 0x70, 0xff, 0x4d, 0xca, 0xff, 0x1e, 0x80, 0xfe, 0xcc, 0x8f, 0xfe, 0x80, 0xe8, 0xfc, 0x1e, 0x07, 0xfe, 0xd9, 0xd2, 0xfe, 0x25, 0x58, 0xfd, 0xad, 0x87, 0xff, 0x1e, 0x3b, 0x00, 0x70, 0xd5, 0x00, 0x5a, 0xb0, 0xff, 0xa0, 0x08, 0x2f, 0xe4, 0xae, 0x2a, 0xc0, 0x49, 0x01, 0xec, 0xad, 0x13, 0x2a, 0x27, 0x04, 0x8d, 0xbb, 0xf8, 0xf4, 0xd0, 0xfc, 0x26, 0xb3, 0xee, 0x9f, 0x39, 0xf6, 0x76, 0x4d, 0x05, 0xf9, 0x5b, 0xf5, 0x53, 0x6f, 0xf3, 0x17, 0x5e, 0x03, 0x13, 0x2c, 0x00, 0xb9, 0xab, 0x02, 0x92, 0xec, 0xfb, 0xb4, 0xf7, 0xf8, 0x57, 0x98, 0x03, 0x3f, 0x38, 0x02, 0xee, 0xaf, 0xfd, 0xc9, 0xa5, 0xff, 0x29, 0x40, 0x00, 0x7e, 0xe4, 0xfd, 0x57, 0xa4, 0xfe, 0x27, 0x99, 0xfb, 0xd7, 0x77, 0xfd, 0xa7, 0x01, 0xff, 0x24, 0xe4, 0xfc, 0x33, 0x01, 0xff, 0x02, 0x30, 0x00, 0xbd, 0x4d, 0x00, 0xd4, 0xe4, 0xfe, 0x33, 0xc1, 0x33, 0x59, 0x3b, 0x29, 0x7a, 0x60, 0xfe, 0xe6, 0x9c, 0x17, 0x9c, 0x7c, 0x03, 0x37, 0x8b, 0xf8, 0xe4, 0xc4, 0xfc, 0x67, 0x61, 0xec, 0xb0, 0x4d, 0xf8, 0x02, 0x78, 0x0a, 0xfb, 0x24, 0xf3, 0xa5, 0xf9, 0xec, 0x76, 0x9d, 0x03, 0xb2, 0xec, 0x01, 0x15, 0x23, 0x05, 0xaa, 0x4c, 0xfd, 0x6b, 0x35, 0xf7, 0x77, 0x37, 0x03, 0x3f, 0xe9, 0x02, 0x9d, 0x00, 0xfd, 0x84, 0xcb, 0xff, 0xba, 0x81, 0x00, 0x16, 0x8e, 0xfc, 0x28, 0x9e, 0xfe, 0x79, 0x7a, 0xfb, 0xa7, 0x41, 0xfd, 0x2d, 0x20, 0xff, 0x7d, 0x89, 0xfc, 0x6a, 0x95, 0xfe, 0x4e, 0x2d, 0x00, 0xf8, 0x13, 0x00, 0xff, 0xbc, 0xfe, 0x64, 0x0f, 0x3a, 0x29, 0xf3, 0x28, 0x98, 0xf5, 0xf8, 0x20, 0x99, 0x19, 0x51, 0xa9, 0x02, 0x62, 0x31, 0xf9, 0x25, 0x7c, 0xfd, 0x7d, 0x7d, 0xe9, 0xeb, 0x71, 0xfa, 0x54, 0xfd, 0x0f, 0xbe, 0x50, 0xf2, 0xd8, 0xea, 0xe6, 0xc9, 0x68, 0x02, 0x5c, 0xab, 0x02, 0xba, 0x8e, 0x06, 0xe2, 0xe9, 0xff, 0x4c, 0x77, 0xf6, 0x26, 0x7e, 0x01, 0x98, 0xc1, 0x03, 0x7c, 0x7d, 0xfc, 0x8a, 0x5f, 0xfe, 0x8f, 0x01, 0x01, 0x05, 0x4d, 0xfc, 0x3b, 0x70, 0xfe, 0x78, 0x5d, 0xfa, 0xb6, 0x56, 0xfc, 0x22, 0xf1, 0xff, 0x9a, 0xac, 0xfc, 0xe2, 0x84, 0xfd, 0x81, 0x4e, 0x00, 0xf3, 0x44, 0x00, 0x6e, 0xdc, 0xfd, 0x1c, 0xf3, 0x40, 0xfe, 0xa0, 0x2c, 0x87, 0xff, 0xf0, 0x5c, 0x3a, 0x17, 0xdb, 0x77, 0x02, 0x03, 0x9c, 0xf9, 0xde, 0xb0, 0x01, 0xb9, 0xba, 0xe8, 0x55, 0xf3, 0xf7, 0x6a, 0x93, 0x13, 0x78, 0x57, 0xf6, 0x55, 0x63, 0xe3, 0xd0, 0x22, 0xff, 0xbe, 0x07, 0x03, 0xd2, 0x53, 0x08, 0x10, 0x2d, 0x01, 0x51, 0x08, 0xf5, 0x02, 0xf9, 0x00, 0x06, 0x7a, 0x04, 0xd9, 0xe4, 0xfb, 0xd8, 0xaa, 0xfd, 0x41, 0xfd, 0x01, 0x09, 0xbb, 0xfb, 0xe6, 0xf2, 0xfd, 0x69, 0x34, 0xfa, 0x54, 0xd4, 0xfb, 0x7f, 0x07, 0x00, 0x5f, 0xf0, 0xfc, 0x93, 0x70, 0xfd, 0xb4, 0xd6, 0xff, 0x58, 0x79, 0x00, 0x9b, 0x1d, 0xfe, 0x43, 0x56, 0x48, 0xed, 0x78, 0x31, 0xbd, 0x43, 0xe7, 0xf3, 0x68, 0x13, 0x57, 0xfb, 0x00, 0x5d, 0x18, 0xfb, 0x1e, 0x38, 0x09, 0xd6, 0xa2, 0xe6, 0xd1, 0xad, 0xf3, 0xf9, 0xe2, 0x16, 0xed, 0xa7, 0xfb, 0x67, 0x77, 0xe1, 0x96, 0x8e, 0xfb, 0x55, 0x62, 0x02, 0xfd, 0x73, 0x08, 0x6f, 0xd3, 0x02, 0x23, 0x00, 0xf4, 0x11, 0xb5, 0xfe, 0x60, 0x2a, 0x05, 0x01, 0x1f, 0xfd, 0xbc, 0x68, 0xfc, 0xed, 0xad, 0x01, 0xdb, 0xbb, 0xfb, 0x46, 0x6e, 0xfe, 0x7a, 0x20, 0xfa, 0x49, 0x64, 0xfa, 0x09, 0x8d, 0x00, 0xc4, 0x49, 0xfd, 0x64, 0xd7, 0xfc, 0x35, 0x9e, 0xff, 0x79, 0x4c, 0x01, 0xaf, 0x6b, 0xfe, 0x1c, 0xee, 0x51, 0x94, 0x6d, 0x31, 0xfe, 0xc9, 0xde, 0x7d, 0x3e, 0x13, 0x49, 0x16, 0xfd, 0xed, 0x24, 0xfe, 0xa0, 0x3a, 0x0d, 0xa6, 0x2f, 0xe4, 0x41, 0xf4, 0xf2, 0x55, 0x40, 0x1a, 0x8e, 0xd6, 0x00, 0xea, 0x3b, 0xdf, 0x23, 0x51, 0xf7, 0x94, 0x0c, 0x00, 0x1f, 0xad, 0x0a, 0x60, 0xc7, 0x03, 0xe4, 0xff, 0xf0, 0xaf, 0x1e, 0xfd, 0x56, 0xa2, 0x06, 0x6d, 0x28, 0xfd, 0xa8, 0x9b, 0xfa, 0xea, 0x87, 0x02, 0xd7, 0xc6, 0xfb, 0xb0, 0xd2, 0xfe, 0x30, 0x16, 0xfa, 0x3c, 0x9a, 0xf9, 0x88, 0x2d, 0x00, 0x41, 0x55, 0xfd, 0xd0, 0x4c, 0xfd, 0x12, 0x38, 0x00, 0xa6, 0x14, 0x01, 0x88, 0x9c, 0xfd, 0x8f, 0x19, 0x57, 0x3a, 0x4a, 0x32, 0x42, 0x25, 0xda, 0xbc, 0xac, 0x12, 0x80, 0xa3, 0xf9, 0x0c, 0x59, 0x00, 0x2a, 0xf9, 0x0f, 0x75, 0x7f, 0xe3, 0x51, 0x2b, 0xf1, 0x6d, 0x80, 0x1b, 0x7c, 0xb1, 0x06, 0xa6, 0x21, 0xdd, 0x01, 0x31, 0xf4, 0x9f, 0x27, 0xfe, 0xfb, 0xf3, 0x09, 0x58, 0xaa, 0x04, 0x0d, 0xb4, 0xf0, 0x9b, 0x87, 0xfb, 0x21, 0x13, 0x06, 0x75, 0x4f, 0xfd, 0x77, 0xaa, 0xf9, 0xb5, 0x1d, 0x03, 0xd6, 0x61, 0xfb, 0xe2, 0x83, 0xff, 0x3a, 0x4d, 0xfa, 0x47, 0x43, 0xf8, 0xb0, 0x1c, 0x00, 0x88, 0x52, 0xfe, 0xda, 0xa4, 0xfd, 0x4d, 0xe6, 0xff, 0xeb, 0xaf, 0x00, 0x6d, 0x51, 0xfd, 0x34, 0xac, 0x5d, 0xfd, 0x5f, 0x32, 0xba, 0x8c, 0xd6, 0x0f, 0x1c, 0x11, 0x6a, 0xe8, 0xf4, 0x19, 0xba, 0x04, 0xe3, 0x31, 0x13, 0x50, 0x9d, 0xe2, 0x92, 0x13, 0xee, 0x97, 0x56, 0x1c, 0x10, 0x9e, 0x0c, 0xeb, 0xa6, 0xdd, 0xc8, 0x0d, 0xf2, 0x6c, 0x39, 0xf8, 0x49, 0xc4, 0x09, 0x63, 0xb3, 0x07, 0xa8, 0x79, 0xf0, 0xbb, 0xde, 0xf9, 0x0b, 0x11, 0x05, 0xaa, 0x07, 0xfd, 0x91, 0xa9, 0xf9, 0x5f, 0x84, 0x03, 0xfc, 0xed, 0xfa, 0x48, 0xf6, 0xff, 0x73, 0xc3, 0xf9, 0x42, 0x23, 0xf8, 0x00, 0xf3, 0x00, 0xc5, 0x1b, 0xff, 0xe3, 0xa1, 0xfd, 0x9a, 0xc0, 0xff, 0xe1, 0x68, 0x00, 0x0f, 0x14, 0xfd, 0x87, 0xd2, 0x5f, 0x91, 0x9b, 0x35, 0x6e, 0xe0, 0xd4, 0x42, 0x59, 0x0e, 0x13, 0xcb, 0xf2, 0xda, 0x6c, 0x06, 0xe3, 0x54, 0x15, 0x0e, 0x94, 0xe3, 0x58, 0x21, 0xea, 0xe0, 0x93, 0x1a, 0x5c, 0x2f, 0x13, 0xa9, 0x5c, 0xdf, 0x83, 0x0b, 0xef, 0x83, 0x65, 0xf3, 0x11, 0xf8, 0x08, 0x1b, 0x45, 0x0b, 0x5c, 0xd8, 0xf0, 0x53, 0x10, 0xf8, 0x17, 0x02, 0x04, 0xa8, 0x2b, 0xfd, 0x37, 0xae, 0xf9, 0x86, 0x9f, 0x03, 0x8e, 0xf1, 0xf9, 0xd3, 0xb0, 0xff, 0x5a, 0x6d, 0xfa, 0x85, 0x5e, 0xf8, 0x1d, 0xfd, 0x00, 0x6d, 0x84, 0xff, 0x22, 0xd3, 0xfd, 0x9b, 0xbd, 0xff, 0x6c, 0x30, 0x00, 0x79, 0xab, 0xfc, 0xc1, 0x36, 0x63, 0x83, 0x19, 0x36, 0x8a, 0x58, 0xd6, 0x73, 0xf1, 0x0b, 0xb4, 0x59, 0xf0, 0xb7, 0x12, 0x08, 0xbb, 0x85, 0x15, 0x2e, 0x09, 0xe6, 0x79, 0xbe, 0xe5, 0x3b, 0x46, 0x19, 0xb4, 0x6d, 0x18, 0x6d, 0x77, 0xe2, 0xe7, 0xa0, 0xec, 0xb3, 0x3a, 0xee, 0x6c, 0x8b, 0x08, 0x5a, 0x34, 0x0e, 0x78, 0xfb, 0xf2, 0xcd, 0xce, 0xf5, 0x1d, 0xa9, 0x03, 0x27, 0xf4, 0xfc, 0xa2, 0xd6, 0xf9, 0x1c, 0x2e, 0x03, 0x78, 0x95, 0xf8, 0x00, 0x64, 0x00, 0x2e, 0x43, 0xfb, 0x67, 0x6e, 0xf8, 0x1f, 0xbd, 0x00, 0x7c, 0x17, 0x00, 0x68, 0xb7, 0xfd, 0x78, 0x52, 0x00, 0xb2, 0x95, 0xff, 0x28, 0x24, 0xfc, 0x3b, 0x63, 0x64, 0x81, 0xa7, 0x37, 0xb7, 0x21, 0xd8, 0xaf, 0xb5, 0x0a, 0x0c, 0xb3, 0xee, 0x30, 0xe9, 0x07, 0x73, 0x5c, 0x15, 0xd0, 0xc3, 0xe7, 0x67, 0x29, 0xe2, 0x5e, 0x2f, 0x17, 0x2c, 0xb1, 0x1b, 0x3c, 0xf8, 0xe6, 0xa6, 0xec, 0xea, 0x8e, 0xe2, 0xe9, 0xda, 0x15, 0x08, 0x88, 0xa5, 0x0f, 0x2a, 0x62, 0xf6, 0xfa, 0xe8, 0xf3, 0x5a, 0xa4, 0x02, 0xd2, 0xa4, 0xfd, 0xa7, 0x17, 0xf9, 0x23, 0x54, 0x02, 0x97, 0x79, 0xf8, 0xa8, 0xfd, 0x00, 0x60, 0x24, 0xfb, 0xd1, 0x36, 0xf9, 0x62, 0xbb, 0xff, 0x03, 0x14, 0x00, 0x95, 0x63, 0xfe, 0x43, 0xed, 0xff, 0xe2, 0x2a, 0xff, 0xc0, 0x0e, 0xfc, 0xb1, 0xe8, 0x63, 0xe9, 0x80, 0x39, 0x1d, 0xd7, 0xda, 0x0d, 0x27, 0x0a, 0xf4, 0xfd, 0xec, 0x2b, 0xa7, 0x07, 0x82, 0x71, 0x14, 0x28, 0xdb, 0xe8, 0xc9, 0x6d, 0xdf, 0x29, 0xa6, 0x13, 0x02, 0x48, 0x1e, 0x88, 0x5f, 0xec, 0xee, 0xb6, 0xea, 0x8a, 0x0c, 0xe5, 0x09, 0xcd, 0x06, 0x6b, 0x1b, 0x11, 0x98, 0x3e, 0xfa, 0xab, 0x68, 0xf2, 0x56, 0xcb, 0x00, 0x23, 0xef, 0xfe, 0x8d, 0xba, 0xf7, 0xb5, 0x02, 0x02, 0x12, 0xf8, 0xf8, 0xfe, 0x24, 0x01, 0x8e, 0x54, 0xfb, 0xbc, 0x48, 0xf9, 0xc0, 0xb1, 0xfe, 0x8d, 0x48, 0x00, 0xe9, 0x8f, 0xfe, 0xbc, 0xe7, 0xfe, 0x71, 0xa5, 0xff, 0x90, 0xfe, 0xfb, 0x54, 0x55, 0x61, 0xd5, 0xeb, 0x3c, 0x8f, 0x79, 0xdf, 0xc3, 0xf3, 0x0a, 0x23, 0xf8, 0xea, 0xd9, 0x85, 0x06, 0xfc, 0xd0, 0x13, 0x0c, 0x07, 0xe9, 0xdf, 0x71, 0xdd, 0x94, 0xcd, 0x0e, 0x4d, 0x4c, 0x20, 0x0d, 0x07, 0xf3, 0xca, 0x25, 0xee, 0xfb, 0xfc, 0xde, 0x92, 0xc7, 0x03, 0x1e, 0x7e, 0x13, 0x92, 0x4b, 0xfe, 0xb8, 0xbb, 0xf2, 0x19, 0x90, 0xfd, 0xe4, 0x64, 0x00, 0x2e, 0x38, 0xf7, 0xea, 0xda, 0x01, 0x24, 0xe4, 0xf9, 0x64, 0xfb, 0x01, 0xa4, 0xc9, 0xfa, 0x78, 0xa4, 0xf8, 0x5c, 0xe5, 0xfe, 0xb7, 0x43, 0xff, 0xdb, 0x12, 0xff, 0xd8, 0xf0, 0xfd, 0x2d, 0x4d, 0x00, 0x58, 0x4a, 0xfc, 0x4f, 0xf1, 0x5f, 0x7f, 0xd8, 0x3b, 0x66, 0xe1, 0xe5, 0x41, 0xa8, 0x0b, 0x15, 0xe5, 0xe9, 0x75, 0x7f, 0x06, 0x69, 0x53, 0x11, 0x1d, 0xf2, 0xe9, 0xc3, 0x01, 0xdb, 0x3e, 0xe7, 0x0b, 0x9c, 0x4c, 0x1f, 0xb9, 0xe7, 0xf7, 0xb9, 0x37, 0xf3, 0x05, 0x19, 0xdb, 0x9c, 0xa7, 0x00, 0xa5, 0x70, 0x14, 0x33, 0x94, 0x00, 0xe0, 0xff, 0xf3, 0x16, 0x8f, 0xfb, 0x38, 0x7d, 0x00, 0x0a, 0x6a, 0xf8, 0x0a, 0x1d, 0x01, 0x50, 0xbf, 0xfa, 0x54, 0x0c, 0x02, 0xc8, 0x78, 0xfa, 0x77, 0xb4, 0xf8, 0x2e, 0x14, 0xfe, 0xff, 0x91, 0xfe, 0x31, 0x7f, 0xff, 0x44, 0x8d, 0xfd, 0xb8, 0x72, 0x00, 0x0d, 0x99, 0xfd, 0x8d, 0x4e, 0x5c, 0x29, 0xa6, 0x3c, 0xad, 0x53, 0xed, 0x18, 0x51, 0x0b, 0x4c, 0x81, 0xea, 0xef, 0xa5, 0x04, 0x53, 0x2a, 0x0f, 0x6b, 0x58, 0xed, 0x82, 0xe0, 0xd6, 0x2b, 0xbc, 0x07, 0x3e, 0x05, 0x1e, 0x57, 0x03, 0xfc, 0x86, 0x6b, 0xfb, 0x4b, 0xef, 0xd7, 0x23, 0x69, 0xfa, 0xaf, 0x3e, 0x16, 0x70, 0xbc, 0x01, 0xe0, 0x7a, 0xf6, 0x4f, 0x3a, 0xfb, 0xf9, 0x55, 0xff, 0x0e, 0xea, 0xfa, 0x6b, 0x3c, 0x00, 0xd8, 0xc3, 0xf9, 0xdb, 0x6c, 0x03, 0x6b, 0xb8, 0xfa, 0xba, 0x4d, 0xf7, 0x6b, 0x47, 0xfe, 0x93, 0x28, 0xfd, 0x7d, 0xf4, 0xff, 0x3d, 0xd2, 0xfe, 0x90, 0x98, 0x00, 0xe0, 0x76, 0xfe, 0x17, 0xb1, 0x58, 0x59, 0xbd, 0x3c, 0x86, 0x61, 0xf2, 0xc4, 0xc4, 0x09, 0x9d, 0x2c, 0xee, 0x83, 0xbd, 0x03, 0x4a, 0x1e, 0x0b, 0x69, 0x6c, 0xf0, 0xef, 0x6a, 0xd4, 0x5f, 0x6f, 0x04, 0x0f, 0x66, 0x1c, 0xde, 0x12, 0xfd, 0x51, 0x18, 0x02, 0x8c, 0x7c, 0xd8, 0xb5, 0x1e, 0xf3, 0xd4, 0x5c, 0x16, 0xdc, 0x9f, 0x02, 0x13, 0xa0, 0xf8, 0x80, 0x7c, 0xfc, 0x9d, 0xe9, 0xfd, 0x2c, 0xc0, 0xfb, 0x5e, 0x55, 0x00, 0x69, 0x60, 0xf9, 0xa6, 0x13, 0x03, 0x59, 0x6e, 0xfa, 0x19, 0xa5, 0xf6, 0x9a, 0xc5, 0xfe, 0xbf, 0x45, 0xfc, 0x4c, 0xb5, 0x00, 0x52, 0xc8, 0xff, 0x7a, 0x6b, 0x00, 0x02, 0x4a, 0xff, 0x72, 0x49, 0x55, 0xb9, 0x87, 0x38, 0xb8, 0x3b, 0xfa, 0x54, 0x9e, 0x0b, 0xb4, 0x78, 0xee, 0xff, 0x59, 0x03, 0x26, 0x4c, 0x07, 0xd1, 0xde, 0xf3, 0x07, 0xce, 0xd3, 0x87, 0x6e, 0xfe, 0x6b, 0x7d, 0x1b, 0xc1, 0x73, 0xfe, 0xe1, 0xef, 0x07, 0x17, 0x23, 0xdb, 0x5b, 0xce, 0xe9, 0xee, 0x58, 0x15, 0x9f, 0xa1, 0x04, 0xec, 0xe8, 0xfa, 0xe2, 0x2a, 0xfe, 0x44, 0xf6, 0xfc, 0xe0, 0xe8, 0xfc, 0x15, 0xef, 0xff, 0x76, 0xac, 0xf8, 0x90, 0x89, 0x02, 0x7a, 0x84, 0xfa, 0x46, 0x75, 0xf5, 0xbc, 0x5b, 0xff, 0x2f, 0xf9, 0xfc, 0xfc, 0x7c, 0x00, 0x1a, 0x3c, 0x01, 0x65, 0xde, 0x00, 0x9b, 0xc0, 0xfe, 0xeb, 0x36, 0x50, 0x00, 0xc9, 0x36, 0x9a, 0x40, 0xfd, 0xba, 0xac, 0x10, 0x7e, 0x83, 0xed, 0xec, 0xa2, 0x01, 0xce, 0xb7, 0x07, 0x85, 0x65, 0xf3, 0x18, 0x6d, 0xd6, 0xf6, 0x2d, 0xf8, 0xfb, 0x11, 0x1b, 0x4c, 0x40, 0xff, 0x33, 0xc3, 0x09, 0x11, 0xcf, 0xe0, 0xaf, 0xe9, 0xe0, 0x02, 0xa5, 0x12, 0xbd, 0x62, 0x08, 0x42, 0xdc, 0xfb, 0x4e, 0x3d, 0xfe, 0x62, 0x6d, 0xfd, 0xfa, 0x65, 0xfd, 0xd6, 0x55, 0x00, 0x13, 0xfd, 0xf7, 0x41, 0x43, 0xff, 0xdc, 0xaa, 0xfc, 0x62, 0x1f, 0xf6, 0x76, 0x92, 0xfe, 0x58, 0x25, 0xfd, 0x13, 0xec, 0x00, 0xda, 0x38, 0x02, 0xdf, 0xd1, 0xff, 0x8e, 0xd1, 0xfe, 0x20, 0xb7, 0x4c, 0x23, 0xea, 0x36, 0x25, 0xfd, 0xfb, 0xa9, 0x9d, 0x12, 0x1c, 0xc6, 0xf1, 0xc5, 0x2b, 0xfe, 0x3a, 0xe3, 0x08, 0xc5, 0x70, 0xf3, 0x29, 0x4d, 0xd9, 0x43, 0xfb, 0xf4, 0x45, 0xc7, 0x1b, 0x65, 0x70, 0xfd, 0x7a, 0xbc, 0x06, 0xda, 0xa0, 0xeb, 0xf3, 0xe2, 0xda, 0xe3, 0x8c, 0x0c, 0x88, 0x72, 0x0b, 0xcd, 0xb2, 0xfd, 0x71, 0xd0, 0xff, 0x1f, 0x7c, 0xfc, 0x2e, 0x57, 0xfd, 0x3d, 0x85, 0x01, 0x64, 0x45, 0xf7, 0xd0, 0x82, 0xfc, 0x73, 0x6b, 0xff, 0x1c, 0x4e, 0xf6, 0x02, 0x56, 0xfe, 0xec, 0x29, 0xff, 0x53, 0x9a, 0xff, 0x16, 0xec, 0x01, 0x2a, 0x20, 0x00, 0x3f, 0xed, 0xfe, 0x4a, 0x69, 0x4a, 0xd9, 0x22, 0x35, 0x0f, 0xf0, 0xf9, 0xbe, 0x18, 0x15, 0x46, 0x22, 0xf5, 0x38, 0xdf, 0xf8, 0x7e, 0x21, 0x08, 0x87, 0x47, 0xf7, 0x74, 0x69, 0xdf, 0x5a, 0x41, 0xf1, 0x45, 0x7e, 0x18, 0x46, 0x1c, 0xfe, 0x79, 0x73, 0x01, 0xf2, 0xc6, 0xf5, 0x38, 0xb8, 0xda, 0x28, 0x12, 0x02, 0xea, 0xf4, 0x0d, 0x23, 0x01, 0xff, 0xba, 0x0a, 0x01, 0x56, 0x7f, 0xfe, 0xae, 0x4d, 0xfc, 0x95, 0x3c, 0xff, 0xc1, 0x98, 0xf7, 0x29, 0xa9, 0xfc, 0xae, 0x68, 0x00, 0x6d, 0xd5, 0xf7, 0x15, 0x1f, 0xfe, 0xe0, 0xdb, 0xff, 0x4d, 0x79, 0xfe, 0x50, 0x02, 0x02, 0x46, 0xfa, 0xff, 0x15, 0x76, 0xfe, 0x86, 0x00, 0x47, 0xdb, 0x2a, 0x35, 0xb0, 0x3c, 0xf7, 0xa8, 0x34, 0x15, 0x74, 0xa3, 0xf9, 0xa9, 0x45, 0xfa, 0xcf, 0x54, 0x02, 0xfd, 0x0a, 0xf7, 0x50, 0xc8, 0xea, 0x64, 0x91, 0xec, 0xd6, 0x04, 0x17, 0x4c, 0x40, 0x00, 0xe7, 0x2d, 0xf9, 0xe6, 0xd8, 0xfe, 0xf6, 0x86, 0xde, 0x27, 0x4c, 0xf8, 0xa5, 0xb3, 0x0e, 0x33, 0x21, 0x00, 0x65, 0xdb, 0xff, 0x21, 0xfe, 0x01, 0x82, 0x7c, 0xfc, 0x2d, 0x7e, 0xfb, 0x38, 0x52, 0xf9, 0x08, 0x6c, 0xfc, 0x2e, 0x1d, 0x02, 0xe2, 0x73, 0xfa, 0x74, 0x65, 0xfb, 0x35, 0x36, 0x00, 0x92, 0xff, 0xfe, 0xf6, 0x49, 0x01, 0xe4, 0x0b, 0x00, 0xcd, 0xc8, 0xfe, 0xae, 0x8f, 0x42, 0x48, 0x34, 0x32, 0xff, 0x1b, 0xf7, 0xd5, 0xf6, 0x16, 0x14, 0x3a, 0xfd, 0xc8, 0x24, 0xfa, 0xce, 0xb2, 0x00, 0x41, 0x94, 0xf4, 0x5c, 0x7f, 0xf2, 0x62, 0xdd, 0xed, 0xb8, 0xbc, 0x11, 0xc7, 0xa8, 0x04, 0x30, 0x5d, 0xf4, 0x88, 0xea, 0x02, 0xd2, 0xe0, 0xe5, 0xd0, 0x09, 0xef, 0xdf, 0xcc, 0x0d, 0x7a, 0x76, 0x01, 0x77, 0x60, 0xfd, 0x80, 0x06, 0x04, 0xcd, 0x54, 0xfe, 0x98, 0xe3, 0xf9, 0xb8, 0x34, 0xf9, 0xa6, 0x95, 0xfd, 0x1f, 0x56, 0x03, 0x4b, 0x76, 0xfc, 0xd5, 0xee, 0xf8, 0xd8, 0x27, 0x00, 0x5d, 0x05, 0x00, 0xb1, 0x84, 0x00, 0x9f, 0x68, 0x00, 0xc5, 0x1b, 0xff, 0x6b, 0xed, 0x3e, 0x4a, 0x70, 0x2d, 0x51, 0xc2, 0xf8, 0x1d, 0x26, 0x19, 0x08, 0x0d, 0xfe, 0x90, 0xe0, 0xf8, 0xd7, 0xef, 0x00, 0xa9, 0x0e, 0xf8, 0xc7, 0x4b, 0xf1, 0x2a, 0x79, 0xee, 0x21, 0xc1, 0x11, 0x11, 0x5c, 0x05, 0xe9, 0xe4, 0xf3, 0x96, 0xd2, 0x02, 0xd4, 0xbd, 0xec, 0xa1, 0xce, 0xeb, 0x38, 0xb8, 0x09, 0x25, 0xe4, 0x02, 0x3d, 0x07, 0xfc, 0xaa, 0xce, 0x02, 0x27, 0xd1, 0xfe, 0xf0, 0xf7, 0xfb, 0x00, 0x00, 0xfa, 0xb2, 0x9b, 0xfc, 0x15, 0xba, 0x03, 0x69, 0x77, 0xfd, 0x11, 0x1e, 0xf8, 0xe0, 0x87, 0x00, 0x89, 0x77, 0x00, 0x87, 0xe9, 0xff, 0x3c, 0xf8, 0x00, 0xeb, 0xc0, 0xfe, 0x76, 0xd9, 0x38, 0x0a, 0x35, 0x29, 0xa7, 0x2d, 0xfb, 0x5f, 0x81, 0x1a, 0x1b, 0xd9, 0xfe, 0x1a, 0xa3, 0xf7, 0xfa, 0xc2, 0x02, 0x32, 0xaf, 0xfb, 0xde, 0x1f, 0xf2, 0xba, 0x50, 0xeb, 0x30, 0xb0, 0x0f, 0x02, 0x4e, 0x0a, 0x67, 0x04, 0xf2, 0x86, 0x08, 0x03, 0xf4, 0xd9, 0xf3, 0xb0, 0x6b, 0xe9, 0x2e, 0xdc, 0x07, 0x04, 0x83, 0x03, 0x9d, 0x30, 0xf9, 0xb2, 0x1f, 0x01, 0xca, 0xcb, 0xfe, 0x65, 0x32, 0xfd, 0xdd, 0x7d, 0xfd, 0xb9, 0xbc, 0xfb, 0xdb, 0x9e, 0x00, 0xb3, 0x36, 0xff, 0x7e, 0xbf, 0xf9, 0xfa, 0x0f, 0x01, 0xc3, 0x10, 0x00, 0x74, 0x83, 0xff, 0x0d, 0x81, 0x01, 0xac, 0x1a, 0xfe, 0x6b, 0x0d, 0x32, 0x58, 0x13, 0x25, 0x0f, 0x26, 0xff, 0x72, 0xdc, 0x1b, 0xcf, 0xda, 0xfe, 0x5b, 0xbb, 0xf6, 0x5e, 0xb4, 0x04, 0x08, 0x25, 0xff, 0x3f, 0xed, 0xf2, 0xbe, 0x10, 0xeb, 0x3a, 0xfd, 0x09, 0x23, 0x45, 0x0b, 0xfe, 0xf7, 0xf6, 0x8f, 0xa0, 0x01, 0x6a, 0xc9, 0xf6, 0x12, 0x32, 0xeb, 0x75, 0xa9, 0x05, 0x87, 0xde, 0x03, 0x4c, 0xa4, 0xf8, 0x52, 0xce, 0xff, 0x1c, 0x92, 0xfd, 0xfe, 0x26, 0xfd, 0xcb, 0xa1, 0xff, 0x25, 0x45, 0xfc, 0x03, 0xd9, 0xfe, 0xb2, 0x7f, 0xff, 0x09, 0x8c, 0xfb, 0x36, 0x68, 0x01, 0xd9, 0xa6, 0x00, 0xb7, 0x1d, 0xff, 0x07, 0x9a, 0x00, 0x82, 0x8b, 0xfe, 0xb5, 0x0a, 0x33, 0x27, 0xc7, 0x20, 0x44, 0x70, 0xff, 0x39, 0x14, 0x22, 0x0c, 0xae, 0xf6, 0xef, 0x6b, 0xf2, 0xb7, 0xa5, 0x05, 0x68, 0x2b, 0xfa, 0x51, 0x1e, 0xeb, 0xf5, 0x42, 0xef, 0xc7, 0x4a, 0x19, 0x94, 0xb8, 0x06, 0x92, 0x8f, 0xf8, 0x39, 0x7b, 0x0e, 0x4f, 0x97, 0xf8, 0x1e, 0x95, 0xed, 0x6a, 0x78, 0x07, 0x84, 0x7e, 0x00, 0xa1, 0x04, 0xf6, 0x6e, 0xb7, 0xfb, 0xbb, 0xc8, 0xf8, 0x24, 0x8e, 0xfd, 0x52, 0x2b, 0xfd, 0xb5, 0xc1, 0xf9, 0x07, 0x69, 0xff, 0xf5, 0x19, 0xfd, 0xef, 0x91, 0xfc, 0x1d, 0x1a, 0x02, 0x83, 0x6a, 0xff, 0xd6, 0x01, 0xfe, 0x6c, 0x3d, 0x01, 0x7d, 0xe5, 0xff, 0xbf, 0x97, 0x2a, 0x40, 0x44, 0x20, 0x75, 0x63, 0x03, 0xb5, 0x3c, 0x1e, 0xde, 0x95, 0xfc, 0x9f, 0x0a, 0xf0, 0x10, 0x7a, 0x00, 0x3c, 0xc2, 0xfa, 0x83, 0xa3, 0xf0, 0x8f, 0xae, 0xf4, 0xfa, 0x4d, 0x11, 0x2d, 0x47, 0x08, 0x13, 0x89, 0xfc, 0x5b, 0x43, 0x09, 0xc1, 0xf0, 0xfa, 0x90, 0x02, 0xef, 0x0b, 0x94, 0x00, 0xee, 0x4f, 0x00, 0x15, 0x83, 0xf9, 0x84, 0xbf, 0xfe, 0x69, 0xcd, 0xf9, 0x33, 0x9e, 0xfd, 0x9d, 0x34, 0x00, 0x7b, 0xdf, 0xf8, 0xd2, 0xa6, 0xff, 0x13, 0xb2, 0xfe, 0x2f, 0x07, 0xfa, 0xe1, 0xf1, 0xff, 0x27, 0xd8, 0xff, 0xdc, 0xee, 0xfe, 0xe6, 0x38, 0x00, 0x89, 0xb6, 0xff, 0x7d, 0x39, 0x24, 0xd8, 0x32, 0x1d, 0x80, 0xef, 0x05, 0xd7, 0x93, 0x1b, 0xd1, 0x7d, 0xfe, 0xec, 0xe9, 0xf3, 0xf4, 0xac, 0x00, 0x63, 0x9d, 0xfa, 0x6d, 0x8b, 0xf4, 0x3d, 0xdd, 0xf6, 0x9f, 0x32, 0x0c, 0x0b, 0x6f, 0x07, 0x4a, 0xf7, 0xfc, 0xaa, 0xf2, 0x06, 0x9f, 0x67, 0xfc, 0xcb, 0x74, 0xf1, 0xe4, 0x93, 0xff, 0x5a, 0x8c, 0xff, 0x5e, 0x2c, 0xfb, 0x95, 0xab, 0xff, 0xbd, 0x52, 0xfb, 0x4e, 0xda, 0xfe, 0x2e, 0x03, 0x00, 0xd3, 0xf1, 0xf9, 0xe2, 0xc9, 0xff, 0xf6, 0x87, 0xfe, 0x6e, 0x69, 0xfa, 0xbc, 0xf4, 0xfe, 0x33, 0x0d, 0xff, 0xcd, 0xef, 0xfe, 0xb5, 0x09, 0x00, 0xd0, 0x5f, 0xff, 0x6b, 0xf3, 0x1d, 0x34, 0x46, 0x1a, 0x2a, 0x73, 0x08, 0x6d, 0x79, 0x18, 0x51, 0x42, 0x00, 0x49, 0xaa, 0xf7, 0xe8, 0x81, 0x00, 0x00, 0xaf, 0xfb, 0x38, 0xf8, 0xf7, 0xcc, 0x08, 0xf8, 0x5f, 0x8c, 0x08, 0x2a, 0xb6, 0x05, 0xd1, 0x45, 0xfd, 0xe3, 0x38, 0x05, 0x4c, 0x51, 0xfd, 0x30, 0x3a, 0xf4, 0x0e, 0x0a, 0xfe, 0xc6, 0x89, 0xff, 0xf7, 0x34, 0xfc, 0xf5, 0x6f, 0xff, 0xe5, 0x0f, 0xfe, 0x7d, 0xb8, 0x00, 0x81, 0x24, 0x00, 0x17, 0xf4, 0xfa, 0x82, 0x45, 0xff, 0x31, 0xf3, 0xfd, 0x58, 0x0c, 0xfb, 0x73, 0x07, 0xfe, 0x98, 0xde, 0xfd, 0x9a, 0x49, 0xfe, 0xc4, 0x09, 0x00, 0x03, 0xf7, 0xff, 0x7a, 0xdb, 0x18, 0xf6, 0xff, 0x17, 0x9d, 0xc2, 0x09, 0x19, 0x42, 0x15, 0xc6, 0x7a, 0x02, 0x76, 0x0d, 0xfa, 0x1f, 0x46, 0x00, 0x05, 0x44, 0xfe, 0xe4, 0x1b, 0xfa, 0x1c, 0xc4, 0xf8, 0xb1, 0x05, 0x06, 0x71, 0x14, 0x04, 0xfb, 0x7e, 0xfd, 0x9a, 0xba, 0x03, 0xd8, 0xa4, 0xfe, 0x57, 0xfa, 0xf5, 0x98, 0x1c, 0xfd, 0xbd, 0xfb, 0xff, 0x47, 0xec, 0xfc, 0xb6, 0x8f, 0x00, 0x0d, 0xb1, 0x00, 0x63, 0x7d, 0x01, 0x3f, 0xc1, 0xff, 0x86, 0xd2, 0xfb, 0xc9, 0x8f, 0xfe, 0x57, 0x84, 0xfd, 0x7b, 0xa0, 0xfb, 0xd1, 0x33, 0xfd, 0xbd, 0x96, 0xfd, 0x75, 0x45, 0xfe, 0x5c, 0xd4, 0xff, 0x10, 0x01, 0x00, 0x81, 0xbd, 0x14, 0xf8, 0x42, 0x16, 0xd1, 0xa4, 0x09, 0xed, 0x5b, 0x12, 0x66, 0x74, 0x04, 0xd5, 0x56, 0xfb, 0x6e, 0x29, 0x01, 0x0c, 0x3f, 0x00, 0x0a, 0x54, 0xfb, 0xde, 0xdf, 0xf9, 0x7f, 0x84, 0x03, 0x21, 0x8f, 0x02, 0xaa, 0xd0, 0xfd, 0xc7, 0xcf, 0x02, 0x74, 0x3b, 0xff, 0xf4, 0x86, 0xf7, 0xc3, 0xfe, 0xfc, 0xd2, 0x5d, 0x00, 0x1a, 0x08, 0xff, 0x95, 0xee, 0x01, 0xf3, 0x07, 0x01, 0x32, 0xc2, 0x00, 0x50, 0xca, 0xff, 0x41, 0x78, 0xfc, 0xc9, 0xec, 0xfd, 0xa1, 0x4b, 0xfd, 0x00, 0xf2, 0xfb, 0x85, 0xb5, 0xfd, 0xeb, 0xbf, 0xfd, 0xa7, 0x30, 0xfe, 0x52, 0x81, 0xff, 0xc4, 0x9d, 0xff, 0xe6, 0x3d, 0x12, 0x4c, 0x7e, 0x14, 0x15, 0xe1, 0x08, 0x2c, 0xf3, 0x0f, 0x13, 0xca, 0x04, 0x7b, 0xc2, 0xfc, 0x7e, 0x4e, 0x02, 0xbf, 0xb3, 0x00, 0x1e, 0x71, 0xfc, 0xda, 0xc2, 0xfa, 0x53, 0x1b, 0x01, 0x92, 0x57, 0x01, 0x38, 0x5e, 0xfe, 0xf3, 0x78, 0x02, 0x8a, 0x3d, 0xff, 0x53, 0xd1, 0xf8, 0x5e, 0x00, 0xfe, 0xd7, 0x2d, 0x01, 0xc3, 0x8b, 0x00, 0x22, 0x2c, 0x02, 0x8e, 0x2a, 0x00, 0x4e, 0x04, 0x00, 0x97, 0x6d, 0xff, 0x6f, 0x7f, 0xfc, 0x54, 0xb6, 0xfd, 0x2b, 0x27, 0xfe, 0x1c, 0x0c, 0xfd, 0xa9, 0x68, 0xfd, 0x7b, 0x87, 0xfd, 0xb6, 0x5f, 0xfe, 0xd0, 0x82, 0xff, 0x4d, 0xb5, 0xff, 0x9b, 0xd1, 0x10, 0x8f, 0x0b, 0x12, 0x9c, 0x64, 0x08, 0x67, 0x2c, 0x0e, 0x98, 0x7b, 0x04, 0x46, 0x13, 0xff, 0x33, 0x1d, 0x03, 0x73, 0xfa, 0x00, 0x55, 0x9c, 0xfd, 0x05, 0x61, 0xfb, 0xf8, 0x96, 0xff, 0xe7, 0xe8, 0x00, 0x1b, 0x68, 0xff, 0xe7, 0x79, 0x02, 0x3e, 0x1f, 0x00, 0x4e, 0x88, 0xfa, 0x2c, 0xb9, 0xfe, 0xbb, 0x0b, 0x02, 0x16, 0x86, 0x01, 0x91, 0x6f, 0x01, 0xed, 0x73, 0xff, 0xa4, 0xd6, 0xff, 0x22, 0xfe, 0xfe, 0x64, 0x77, 0xfd, 0x12, 0x37, 0xff, 0x9f, 0xc6, 0xfe, 0x7d, 0x04, 0xfd, 0xe0, 0x6b, 0xfd, 0x40, 0x1f, 0xfe, 0xce, 0xe4, 0xfe, 0x33, 0xdc, 0xff, 0x5c, 0x27, 0x00, 0x90, 0x31, 0x0f, 0xde, 0x1e, 0x10, 0x3e, 0xd2, 0x07, 0xd1, 0x0b, 0x0c, 0x43, 0xc3, 0x04, 0x82, 0xf8, 0x00, 0x7c, 0x2a, 0x03, 0x0c, 0x37, 0x01, 0x62, 0x71, 0xfe, 0xde, 0x9f, 0xfb, 0x38, 0xcb, 0xfe, 0xac, 0xa8, 0x00, 0x01, 0x22, 0x01, 0x66, 0x91, 0x03, 0x81, 0x2d, 0x00, 0x1d, 0x52, 0xfb, 0x59, 0x20, 0xff, 0x30, 0xca, 0x02, 0x1d, 0xba, 0x01, 0xac, 0x35, 0x00, 0xfe, 0xd5, 0xfe, 0xb0, 0x35, 0x00, 0x38, 0x0e, 0x00, 0xf7, 0x6d, 0xfe, 0x73, 0x41, 0xff, 0x44, 0xe4, 0xfe, 0x81, 0x5f, 0xfd, 0xc0, 0xb1, 0xfd, 0xe2, 0xeb, 0xfe, 0xf7, 0xb6, 0xff, 0xdd, 0x71, 0x00, 0x4c, 0x4d, 0x00, 0xc4, 0xbd, 0x0c, 0x57, 0x34, 0x0f, 0xdf, 0x19, 0x07, 0x5a, 0x60, 0x09, 0xfc, 0xcb, 0x05, 0x4d, 0x9b, 0x02, 0x74, 0xf7, 0x02, 0xec, 0x13, 0x01, 0xb4, 0xe2, 0xfe, 0xff, 0xec, 0xfb, 0xeb, 0x4b, 0xff, 0x6a, 0xb9, 0x02, 0x75, 0xe8, 0x01, 0xf6, 0x9f, 0x02, 0x96, 0x46, 0x00, 0xd1, 0x48, 0xfc, 0x6e, 0x62, 0xff, 0x31, 0xe9, 0x02, 0x80, 0x2a, 0x01, 0x5a, 0x85, 0xff, 0x23, 0xd1, 0xff, 0xea, 0x9a, 0x00, 0x1f, 0x5a, 0x00, 0xe4, 0xf3, 0xfe, 0x93, 0xc4, 0xfe, 0x2e, 0xf3, 0xfe, 0x70, 0x59, 0xfe, 0xe4, 0xb6, 0xfe, 0xdc, 0xc2, 0xff, 0x0a, 0x64, 0x00, 0xdf, 0xc1, 0xff, 0x87, 0xc9, 0xfe, 0xda, 0x51, 0x09, 0x7c, 0xf0, 0x0c, 0x11, 0x8f, 0x07, 0x72, 0x93, 0x08, 0xb3, 0x96, 0x06, 0xed, 0xd2, 0x02, 0xa7, 0x7c, 0x02, 0xa5, 0x79, 0x01, 0x1c, 0x89, 0x00, 0x67, 0xe3, 0xfe, 0xea, 0x6e, 0xff, 0xfd, 0x7b, 0x02, 0x8d, 0xad, 0x02, 0x47, 0x9d, 0x01, 0xd3, 0x64, 0x00, 0x4d, 0xc8, 0xfd, 0x96, 0x03, 0xff, 0x1a, 0x6a, 0x02, 0xd4, 0xa4, 0x01, 0x0e, 0xd8, 0xff, 0xb7, 0x1e, 0x00, 0x45, 0xb2, 0x00, 0xbd, 0x35, 0x00, 0x35, 0x18, 0xff, 0x3b, 0x79, 0xff, 0xf7, 0xcc, 0xff, 0xa4, 0x30, 0xff, 0x8e, 0xb8, 0xff, 0x08, 0xe3, 0xff, 0x63, 0x28, 0xff, 0x37, 0xbd, 0xfe, 0x9d, 0xb7, 0xfe, 0xa0, 0x51, 0x07, 0xb6, 0x06, 0x0c, 0x5e, 0x96, 0x07, 0xcc, 0x88, 0x05, 0x99, 0x93, 0x05, 0x99, 0x03, 0x05, 0xad, 0x76, 0x03, 0x82, 0xe9, 0x01, 0x8b, 0x8f, 0x01, 0x9f, 0x22, 0x01, 0x15, 0xe8, 0x00, 0xee, 0xd5, 0x01, 0x8d, 0xd5, 0x01, 0x91, 0x84, 0x00, 0x3a, 0x58, 0x00, 0xe5, 0x1e, 0xff, 0xcb, 0x8d, 0xff, 0xd9, 0x1b, 0x02, 0xf0, 0xa0, 0x01, 0x59, 0x25, 0x00, 0xa0, 0xe2, 0xff, 0x92, 0x65, 0x00, 0xd9, 0x8f, 0x00, 0xbf, 0x4a, 0x00, 0xa6, 0x13, 0x00, 0x7b, 0x3a, 0x00, 0x93, 0x13, 0x00, 0x4c, 0xf0, 0xfe, 0x97, 0x8f, 0xfe, 0x69, 0xc8, 0xfe, 0x5b, 0x08, 0xff, 0x5e, 0x34, 0xff, 0x7c, 0x38, 0x06, 0x20, 0x4d, 0x09, 0xab, 0x59, 0x06, 0xe6, 0x5a, 0x05, 0x28, 0x28, 0x06, 0xb1, 0x98, 0x05, 0x25, 0xd1, 0x04, 0x56, 0xf8, 0x03, 0x4b, 0x43, 0x02, 0x6c, 0xad, 0x01, 0xdc, 0x2e, 0x01, 0x90, 0xcc, 0x00, 0x4d, 0x24, 0x01, 0x0b, 0x93, 0x00, 0x5d, 0x79, 0xff, 0xdc, 0x08, 0x00, 0x82, 0x39, 0x01, 0xd6, 0x57, 0x01, 0x1f, 0xd8, 0x00, 0x7e, 0x0f, 0x00, 0x4d, 0x11, 0x00, 0x6a, 0x19, 0x01, 0x24, 0x7d, 0x01, 0x23, 0xd2, 0x00, 0xe2, 0x61, 0x00, 0x50, 0x99, 0xff, 0x2f, 0xb7, 0xfe, 0xf0, 0xb0, 0xfe, 0xc0, 0xcd, 0xfe, 0x91, 0xe4, 0xfe, 0x13, 0x47, 0xff, 0xfb, 0x3b, 0xff, 0xfb, 0xc1, 0x05, 0xd5, 0x03, 0x07, 0x79, 0xde, 0x05, 0x8f, 0xc8, 0x07, 0x0a, 0x79, 0x07, 0x15, 0x05, 0x06, 0xb1, 0x13, 0x04, 0x61, 0x70, 0x03, 0x07, 0x64, 0x03, 0xba, 0xac, 0x01, 0x05, 0xc2, 0x00, 0x9e, 0x5b, 0x00, 0xa1, 0x0e, 0x00, 0xcb, 0x60, 0x00, 0x11, 0x5c, 0x00, 0xa4, 0x66, 0x00, 0x6c, 0xf8, 0x00, 0x03, 0xaf, 0x00, 0x45, 0xc1, 0x00, 0x73, 0x59, 0x01, 0x7d, 0x2f, 0x01, 0x1e, 0xfc, 0x00, 0x46, 0xf6, 0x00, 0x8c, 0x81, 0x00, 0xcc, 0x93, 0xff, 0x3e, 0xe4, 0xfe, 0x69, 0x6b, 0xfe, 0x64, 0xaf, 0xfe, 0x02, 0x18, 0xff, 0xde, 0xfc, 0xfe, 0x5d, 0x0b, 0xff, 0x98, 0xfc, 0xfe, 0xe8, 0x7b, 0x07, 0x80, 0x99, 0x09, 0x89, 0x79, 0x06, 0xf5, 0xaa, 0x07, 0x3f, 0x3c, 0x07, 0xb9, 0xf3, 0x05, 0xd2, 0xad, 0x03, 0x4f, 0x7d, 0x01, 0x90, 0xfa, 0x00, 0x39, 0x01, 0x01, 0xf6, 0x47, 0x01, 0xc3, 0x89, 0x00, 0xcb, 0x14, 0x00, 0xd5, 0x7a, 0x00, 0x8a, 0xdb, 0x00, 0x55, 0x05, 0x00, 0xfd, 0xf6, 0xff, 0x7d, 0x2c, 0x01, 0xdb, 0xfe, 0x01, 0xf6, 0x50, 0x02, 0x16, 0x97, 0x01, 0x87, 0x50, 0x00, 0xd4, 0x54, 0xff, 0xd8, 0x02, 0xff, 0xf5, 0xda, 0xfe, 0x25, 0xc8, 0xfe, 0x49, 0xf6, 0xfe, 0x48, 0xff, 0xfe, 0x73, 0xe2, 0xfe, 0x3f, 0xea, 0xfe, 0xf4, 0xc0, 0xfe, 0xd8, 0xb2, 0xfe, 0x59, 0x72, 0x06, 0x08, 0x9a, 0x09, 0x35, 0xc6, 0x07, 0x9c, 0x22, 0x08, 0x25, 0x34, 0x07, 0x06, 0xaa, 0x05, 0xb7, 0xd6, 0x02, 0x64, 0x0d, 0x01, 0x35, 0xf3, 0x00, 0x4b, 0xcb, 0x00, 0x48, 0x58, 0x01, 0x74, 0x77, 0x01, 0xdc, 0x02, 0x01, 0x1e, 0x50, 0x00, 0x1a, 0xb1, 0xff, 0x16, 0xc2, 0xff, 0x93, 0xcd, 0x00, 0x01, 0x52, 0x01, 0x97, 0x03, 0x02, 0x43, 0x9c, 0x02, 0xf2, 0xcf, 0x01, 0xba, 0x8f, 0x00, 0xc9, 0x1a, 0xff, 0x52, 0x3b, 0xfe, 0x27, 0x8e, 0xfe, 0x53, 0xc8, 0xfe, 0xf5, 0x0e, 0xff, 0xd3, 0x29, 0xff, 0xdf, 0xe4, 0xfe, 0x56, 0x18, 0xff, 0x6a, 0xcb, 0xfe, 0x5b, 0x89, 0xfe, 0xc2, 0xb4, 0x07, 0x05, 0xb5, 0x0a, 0x9c, 0x5c, 0x06, 0x61, 0x65, 0x07, 0x38, 0xc5, 0x05, 0x4f, 0x49, 0x04, 0x9f, 0x8c, 0x03, 0x67, 0x0e, 0x01, 0xf6, 0x53, 0x00, 0xd7, 0xc7, 0x01, 0x24, 0x25, 0x02, 0xb8, 0x4e, 0x01, 0x35, 0x71, 0x01, 0x60, 0x8b, 0xff, 0x3e, 0x37, 0xff, 0x6c, 0x7f, 0x00, 0x0c, 0xd1, 0x00, 0xe2, 0x10, 0x01, 0xaa, 0xff, 0x01, 0x4a, 0xb6, 0x02, 0xa1, 0xad, 0x01, 0x50, 0xb3, 0x00, 0x04, 0x25, 0xff, 0x7a, 0x1c, 0xfe, 0xf2, 0x97, 0xfe, 0xb8, 0xaf, 0xfe, 0xe5, 0x72, 0xfe, 0xcf, 0x40, 0xff, 0x16, 0x42, 0xff, 0xcd, 0xdf, 0xfe, 0x7a, 0x15, 0xff, 0xf7, 0xa2, 0xfe, 0x1d, 0x98, 0x07, 0x6a, 0x0d, 0x0a, 0x3a, 0x7f, 0x05, 0x68, 0x45, 0x06, 0x6e, 0x1a, 0x05, 0x6a, 0x85, 0x04, 0x8c, 0x68, 0x03, 0xfa, 0x6b, 0x01, 0x75, 0xfa, 0x00, 0xa9, 0xcc, 0x01, 0x72, 0x08, 0x02, 0xb9, 0xc8, 0x01, 0x92, 0xda, 0x01, 0xf9, 0xf7, 0xff, 0xac, 0x38, 0x00, 0xca, 0xbf, 0x00, 0xde, 0x7b, 0x00, 0x1f, 0xa0, 0x00, 0x3f, 0x1b, 0x01, 0xc5, 0xad, 0x01, 0x38, 0x59, 0x02, 0x1f, 0xcb, 0x02, 0xb1, 0x3e, 0x00, 0x50, 0xbe, 0xfe, 0x98, 0x75, 0xfe, 0x43, 0xff, 0xfd, 0x49, 0xdc, 0xfe, 0x55, 0x28, 0xff, 0x94, 0x09, 0xff, 0xcf, 0x26, 0xff, 0xf7, 0x42, 0xff, 0xfd, 0xea, 0xfe, 0xf3, 0x9f, 0x08, 0x7e, 0x26, 0x0b, 0xc9, 0xef, 0x04, 0x40, 0xe1, 0x04, 0xf6, 0xec, 0x03, 0xa0, 0xd6, 0x03, 0x5b, 0x4c, 0x03, 0x62, 0x0a, 0x01, 0xd6, 0xe0, 0xff, 0x3f, 0xb7, 0x01, 0xd9, 0x2f, 0x03, 0x1c, 0xe5, 0x01, 0x42, 0xf5, 0x00, 0xa6, 0x06, 0x01, 0xab, 0xc5, 0x00, 0x41, 0x4a, 0x00, 0x1a, 0xd0, 0x01, 0x9a, 0xca, 0x00, 0x88, 0x60, 0x00, 0x05, 0x60, 0x01, 0xe2, 0xde, 0x00, 0x9e, 0xbc, 0x01, 0xb2, 0x6d, 0x02, 0xd0, 0x8f, 0x01, 0xd5, 0xca, 0xfe, 0xdf, 0xc7, 0xfd, 0x63, 0x44, 0xfe, 0x0a, 0xbc, 0xfe, 0x40, 0x41, 0xff, 0xc3, 0x58, 0xff, 0xae, 0x5f, 0xff, 0x4c, 0x03, 0xff, 0xff, 0x84, 0x0a, 0xed, 0x83, 0x0d, 0x74, 0xd3, 0x04, 0x66, 0xc0, 0x04, 0x82, 0x3a, 0x02, 0x5e, 0x01, 0x02, 0x6b, 0x56, 0x03, 0xd2, 0x6a, 0x00, 0x4f, 0x7a, 0xfe, 0x94, 0xbc, 0x00, 0x66, 0x9d, 0x03, 0x23, 0xed, 0x01, 0x66, 0x9e, 0x01, 0xe6, 0xfa, 0x00, 0xa2, 0xe2, 0xff, 0x5a, 0x4f, 0x01, 0xe3, 0xe7, 0x01, 0xe2, 0xeb, 0x00, 0x5e, 0xc5, 0x01, 0xdd, 0x36, 0x01, 0x28, 0xd5, 0xff, 0xba, 0x64, 0x01, 0x94, 0x96, 0x01, 0xb9, 0x5e, 0x01, 0x0c, 0x75, 0x01, 0x08, 0x9b, 0xff, 0x5a, 0x19, 0xfe, 0xc3, 0x85, 0xfe, 0x4d, 0x21, 0xff, 0x08, 0x2a, 0xff, 0x57, 0x6d, 0xff, 0x81, 0x52, 0xff, 0x06, 0x2f, 0x0c, 0xb3, 0x85, 0x0e, 0x5b, 0xd5, 0x04, 0x86, 0xa6, 0x05, 0x6a, 0xea, 0x02, 0x6d, 0x6f, 0x02, 0x14, 0x5b, 0x02, 0x8e, 0xd6, 0xfd, 0x9b, 0x8a, 0xfb, 0x1e, 0x84, 0x00, 0xcb, 0xee, 0x04, 0x68, 0xf5, 0x00, 0x2c, 0x19, 0x01, 0xde, 0xad, 0x00, 0x57, 0xd6, 0xff, 0x86, 0x81, 0x01, 0x9a, 0xed, 0x00, 0xb1, 0x6e, 0x01, 0x3a, 0xc5, 0x02, 0x43, 0x48, 0x01, 0xb4, 0x60, 0x00, 0xf8, 0xcd, 0x00, 0xb4, 0xf4, 0xff, 0x52, 0x1e, 0x01, 0x79, 0x46, 0x01, 0x0f, 0x3d, 0x00, 0xd6, 0xad, 0x00, 0x95, 0xe2, 0xff, 0x10, 0x60, 0xfe, 0xb9, 0x42, 0xfe, 0x86, 0x6a, 0xff, 0x4f, 0x53, 0xff, 0xb3, 0xcd, 0x0e, 0x52, 0xfc, 0x10, 0x72, 0x42, 0x04, 0xa9, 0x16, 0x06, 0x4d, 0x20, 0x03, 0x60, 0x4f, 0x02, 0x91, 0xc5, 0x01, 0x25, 0xd8, 0xfb, 0x07, 0x92, 0xf9, 0x50, 0x6a, 0x00, 0x80, 0xd9, 0x05, 0x53, 0x47, 0x00, 0xeb, 0x84, 0xff, 0xbf, 0x14, 0xff, 0xe2, 0x8e, 0xff, 0xd6, 0xca, 0x01, 0x36, 0xbb, 0x01, 0xd8, 0x6e, 0x01, 0xaa, 0x8a, 0x01, 0x40, 0x88, 0x01, 0xe5, 0x60, 0x00, 0x4f, 0x30, 0x01, 0xe8, 0xf5, 0x00, 0x8e, 0x27, 0x00, 0xc5, 0xe5, 0xff, 0x90, 0xe3, 0xff, 0xe4, 0xc2, 0x00, 0x21, 0xfd, 0x00, 0x74, 0x44, 0x00, 0xc5, 0x25, 0xff, 0xff, 0x82, 0xfe, 0x52, 0x8f, 0xfe, 0xe7, 0x11, 0x12, 0xfc, 0x4b, 0x14, 0xaa, 0x9d, 0x03, 0xf7, 0xfa, 0x05, 0x1e, 0x76, 0x02, 0xf5, 0xf4, 0x01, 0xa8, 0x42, 0x02, 0xb0, 0x2a, 0xfa, 0x34, 0x49, 0xf7, 0x62, 0xd1, 0x00, 0x73, 0xcc, 0x06, 0x9b, 0x45, 0xff, 0xcc, 0xca, 0xfe, 0xcd, 0x07, 0xfe, 0xd7, 0x60, 0xfe, 0xe0, 0x68, 0x01, 0x79, 0x85, 0x01, 0x74, 0x55, 0x01, 0xd4, 0x3f, 0x02, 0x45, 0x29, 0x01, 0xd3, 0xf2, 0xfe, 0xc5, 0xb0, 0x01, 0x2b, 0x0f, 0x01, 0x76, 0x5e, 0x00, 0xa4, 0x9f, 0x00, 0x20, 0xbe, 0xfe, 0xa4, 0xa5, 0xff, 0x1b, 0x17, 0x01, 0xe5, 0x95, 0x00, 0x31, 0xfb, 0xff, 0x0e, 0x82, 0x00, 0x25, 0xa1, 0xff, 0x82, 0x31, 0x16, 0x8a, 0x2e, 0x17, 0x56, 0x43, 0x02, 0x43, 0x2f, 0x06, 0x01, 0x65, 0x02, 0x9d, 0xe9, 0x01, 0x27, 0xdc, 0x01, 0x75, 0xeb, 0xf7, 0xb1, 0xb8, 0xf5, 0x84, 0x36, 0x02, 0x03, 0x5a, 0x07, 0x8f, 0x41, 0xfe, 0xed, 0x46, 0xfe, 0xd2, 0xab, 0xfc, 0xb1, 0xf2, 0xfd, 0x5a, 0x4b, 0x01, 0x1c, 0xab, 0x00, 0xb5, 0x24, 0x01, 0x09, 0x0c, 0x02, 0x91, 0x44, 0x00, 0xe8, 0x22, 0xff, 0x20, 0x7d, 0x01, 0xad, 0xda, 0xff, 0x32, 0xf9, 0x00, 0x50, 0x73, 0x00, 0x28, 0xb0, 0xfe, 0x2d, 0x16, 0x00, 0x81, 0x9b, 0xff, 0x13, 0xe8, 0xff, 0x68, 0xf6, 0x00, 0xd8, 0x78, 0x01, 0x6d, 0x49, 0x00, 0x02, 0x6f, 0x1a, 0xd8, 0x14, 0x1a, 0xbe, 0xd0, 0x00, 0x66, 0xa3, 0x06, 0x0d, 0x9b, 0x02, 0xee, 0xef, 0x01, 0xf3, 0x2b, 0x01, 0x46, 0xf8, 0xf4, 0x71, 0x6a, 0xf4, 0x9d, 0x7b, 0x04, 0x97, 0xfe, 0x07, 0x2f, 0x39, 0xfd, 0xe6, 0xe7, 0xfd, 0xae, 0x31, 0xfb, 0xa5, 0x79, 0xfd, 0x37, 0x79, 0x01, 0x33, 0x7c, 0x00, 0x15, 0xea, 0x00, 0x41, 0x5c, 0x01, 0x5c, 0xa0, 0xff, 0xcd, 0x9e, 0xfe, 0x2f, 0x84, 0x01, 0x34, 0xe3, 0xff, 0xfd, 0x01, 0x00, 0x2e, 0xc5, 0xff, 0x63, 0x86, 0xfe, 0x97, 0x86, 0xff, 0x70, 0x7e, 0x00, 0x41, 0x4b, 0x00, 0x28, 0xd7, 0xff, 0x87, 0x49, 0x01, 0x76, 0xf6, 0x00, 0x02, 0xec, 0x1e, 0xbe, 0x62, 0x1d, 0x65, 0x89, 0xff, 0x97, 0xd8, 0x06, 0x1a, 0xed, 0x01, 0x8b, 0xa1, 0x01, 0xd2, 0xac, 0x00, 0xd5, 0x1c, 0xf2, 0xfe, 0xd7, 0xf3, 0x3f, 0x65, 0x06, 0x04, 0xf2, 0x07, 0xe3, 0xbc, 0xfc, 0x18, 0xc7, 0xfd, 0x3e, 0xbc, 0xf9, 0x3d, 0xfd, 0xfc, 0xc8, 0x68, 0x01, 0x3d, 0x61, 0x00, 0x1c, 0x33, 0x01, 0x4a, 0xd5, 0x00, 0x21, 0xa1, 0xfe, 0xb5, 0x2f, 0xfe, 0x10, 0x78, 0x01, 0x43, 0x90, 0xff, 0x25, 0xe6, 0xff, 0x3c, 0xa2, 0xfe, 0x14, 0x86, 0xfd, 0x10, 0x7e, 0xff, 0x70, 0x81, 0x00, 0x8a, 0x08, 0x00, 0x24, 0xfa, 0xff, 0x67, 0xc9, 0x01, 0xc1, 0x4f, 0x00, 0x2c, 0x7e, 0x22, 0xd5, 0x3c, 0x21, 0x91, 0x0f, 0xff, 0x78, 0xce, 0x06, 0x7c, 0x37, 0x01, 0xe5, 0x7e, 0x00, 0xc4, 0x6d, 0x00, 0xf7, 0xd3, 0xef, 0x63, 0x99, 0xf3, 0x07, 0x97, 0x07, 0xd5, 0x27, 0x07, 0x70, 0xa3, 0xfc, 0x66, 0xd9, 0xfd, 0xf4, 0x10, 0xf9, 0x00, 0x3c, 0xfc, 0x91, 0xbf, 0x00, 0x32, 0x87, 0x00, 0x68, 0x7f, 0x01, 0x48, 0x59, 0x00, 0xdd, 0x20, 0xfe, 0xd3, 0x9c, 0xfd, 0x66, 0x82, 0x01, 0x1b, 0xf8, 0xfe, 0x96, 0x06, 0xff, 0x06, 0xd3, 0xfe, 0x6a, 0x2c, 0xfd, 0x8f, 0xe5, 0xfe, 0x7a, 0xad, 0xff, 0xfb, 0xcc, 0xff, 0xff, 0x48, 0x00, 0x04, 0x60, 0x01, 0x18, 0x5f, 0x00, 0x24, 0x62, 0x24, 0xf2, 0xcf, 0x25, 0xf6, 0x4b, 0x00, 0xbc, 0x58, 0x06, 0x45, 0x5e, 0x01, 0x38, 0x88, 0xfe, 0xbb, 0xd8, 0xff, 0xbf, 0x18, 0xef, 0xa8, 0x8c, 0xf3, 0x96, 0xe9, 0x07, 0xcf, 0x06, 0x06, 0xc4, 0xc9, 0xfc, 0xfa, 0xd8, 0xfd, 0xfa, 0x3c, 0xf9, 0xac, 0x00, 0xfc, 0x2b, 0x7a, 0xff, 0xa0, 0x42, 0x00, 0x55, 0x4b, 0x02, 0x04, 0x19, 0x00, 0x41, 0x06, 0xfe, 0x0b, 0x1f, 0xfd, 0x1a, 0x74, 0x00, 0x5c, 0xd7, 0xff, 0xab, 0xb5, 0xfe, 0xde, 0x10, 0xfe, 0x34, 0x24, 0xfd, 0x02, 0x31, 0xfe, 0x0f, 0x19, 0x00, 0x78, 0x75, 0xff, 0x0a, 0x58, 0xff, 0x70, 0x75, 0x01, 0x6a, 0xfa, 0xff, 0xd9, 0xce, 0x23, 0x0a, 0x1c, 0x2a, 0xeb, 0x50, 0x04, 0x75, 0x5e, 0x05, 0xa5, 0xd8, 0x01, 0x21, 0xe2, 0xfc, 0x5a, 0x24, 0xfe, 0x24, 0x51, 0xef, 0xde, 0x94, 0xf3, 0xdf, 0xe5, 0x06, 0xf0, 0xff, 0x04, 0xef, 0x26, 0xfd, 0x3b, 0x49, 0xfd, 0xa2, 0xa9, 0xf9, 0x4a, 0xf6, 0xfb, 0x54, 0x3b, 0xfe, 0x47, 0xdd, 0xff, 0x24, 0x73, 0x02, 0xa8, 0x54, 0x00, 0x84, 0x73, 0xfd, 0xf4, 0xbb, 0xfc, 0x75, 0x7f, 0x00, 0x9c, 0xd5, 0xff, 0x7e, 0xa0, 0xfe, 0xb4, 0x48, 0xfd, 0x01, 0x1f, 0xfd, 0x6f, 0xfb, 0xfd, 0xba, 0x58, 0xff, 0x20, 0x4a, 0xff, 0xba, 0xc4, 0xfe, 0x67, 0x52, 0x01, 0x4e, 0x8a, 0x00, 0x83, 0x90, 0x22, 0xff, 0x62, 0x2c, 0xb0, 0x09, 0x0a, 0x8b, 0x0a, 0x06, 0x0e, 0xb4, 0x01, 0x8a, 0x46, 0xfc, 0xe5, 0x95, 0xfc, 0x19, 0x6d, 0xef, 0x03, 0x81, 0xf3, 0x9c, 0x4d, 0x05, 0xd2, 0xeb, 0x03, 0x09, 0x21, 0xfe, 0x64, 0xb8, 0xfc, 0xf4, 0xa7, 0xf9, 0x0f, 0x85, 0xfc, 0x90, 0xde, 0xfc, 0xe8, 0x83, 0xff, 0x7d, 0x79, 0x02, 0x2c, 0x85, 0xff, 0x22, 0x1b, 0xff, 0x3a, 0xce, 0xfc, 0xf1, 0x00, 0xff, 0xb3, 0xf8, 0xff, 0xc0, 0x74, 0xfe, 0xb1, 0xd7, 0xfd, 0xd3, 0x05, 0xfd, 0xb2, 0x0b, 0xfd, 0xb8, 0x62, 0xfe, 0x51, 0x09, 0xff, 0xac, 0x7b, 0xff, 0x79, 0xbc, 0x01, 0x09, 0x4b, 0x00, 0x60, 0x05, 0x23, 0xc2, 0x38, 0x2c, 0xee, 0xd0, 0x0d, 0x91, 0x81, 0x09, 0x3f, 0x01, 0x01, 0x95, 0x28, 0xfc, 0x4a, 0x3a, 0xfc, 0x05, 0x7b, 0xef, 0x2d, 0xee, 0xf3, 0xb8, 0xf0, 0x02, 0x94, 0xbe, 0x01, 0x76, 0xb5, 0xff, 0xe2, 0x99, 0xfc, 0x64, 0x32, 0xf9, 0x0b, 0x40, 0xfd, 0x16, 0xf2, 0xfb, 0x1d, 0x39, 0xfe, 0x6e, 0x17, 0x03, 0xf9, 0x1b, 0x00, 0x8d, 0x79, 0xfe, 0x37, 0xa1, 0xfd, 0xd3, 0x0d, 0xff, 0x61, 0x06, 0x00, 0x82, 0x2f, 0xfe, 0xc1, 0x1d, 0xfd, 0x25, 0x02, 0xfd, 0x0b, 0x47, 0xfc, 0x24, 0xb6, 0xfe, 0x46, 0xc4, 0xff, 0x43, 0x55, 0xff, 0xde, 0xfb, 0x00, 0x83, 0x5e, 0x00, 0x98, 0xba, 0x24, 0x54, 0x29, 0x2b, 0xef, 0x9d, 0x0e, 0xa1, 0x6a, 0x0e, 0xdb, 0x39, 0x01, 0x48, 0x05, 0xfb, 0x15, 0x1a, 0xfc, 0x01, 0xbe, 0xef, 0xa7, 0x54, 0xf5, 0x65, 0x59, 0x00, 0x54, 0x24, 0xfd, 0x82, 0xd3, 0x00, 0x52, 0x49, 0xfd, 0x55, 0x5c, 0xf9, 0x64, 0x53, 0xfe, 0xcb, 0x78, 0xf9, 0x2b, 0x6a, 0xfe, 0x69, 0xd7, 0x03, 0x64, 0x1d, 0xff, 0x31, 0x37, 0xff, 0x4e, 0xec, 0xfd, 0xb2, 0x8b, 0xfe, 0xc9, 0x1a, 0x00, 0x68, 0x30, 0xfe, 0xcd, 0x43, 0xfc, 0x47, 0x54, 0xfd, 0x72, 0x75, 0xfc, 0x73, 0xf8, 0xfd, 0x62, 0xdd, 0xfe, 0x84, 0x5e, 0xff, 0x38, 0xf0, 0x01, 0x64, 0x66, 0x00, 0x95, 0xc7, 0x27, 0x03, 0xeb, 0x29, 0xe1, 0x44, 0x0d, 0xa7, 0xd2, 0x12, 0x71, 0x4b, 0x02, 0x65, 0x52, 0xfa, 0x2a, 0x28, 0xfc, 0xe4, 0x7c, 0xf0, 0x14, 0xc7, 0xf7, 0x2c, 0xf6, 0xfe, 0x14, 0x6b, 0xf6, 0x6d, 0xa3, 0x00, 0xa5, 0x1e, 0xff, 0x78, 0x0f, 0xf8, 0x66, 0x85, 0x00, 0x64, 0x8b, 0xf9, 0x1d, 0x99, 0xfc, 0x74, 0x95, 0x04, 0x57, 0x2b, 0xff, 0xa3, 0x62, 0xff, 0x80, 0x4c, 0xfe, 0x62, 0xb9, 0xfd, 0x80, 0x21, 0x00, 0x02, 0x78, 0xfe, 0xc8, 0xf1, 0xfb, 0xab, 0x02, 0xfe, 0x55, 0x4a, 0xfc, 0x33, 0x0f, 0xfd, 0x51, 0xf1, 0xfe, 0x5e, 0x5d, 0xff, 0xfe, 0x4f, 0x01, 0xea, 0xc0, 0xff, 0xf4, 0xcc, 0x2c, 0x02, 0x55, 0x28, 0xd2, 0xf7, 0x09, 0x7a, 0xf4, 0x16, 0xb7, 0xfe, 0x01, 0x63, 0x4a, 0xfa, 0x76, 0xa1, 0xfc, 0xf3, 0x00, 0xf1, 0x58, 0xa8, 0xfb, 0xf8, 0x03, 0xfe, 0x98, 0xd0, 0xee, 0xb1, 0xc1, 0xff, 0xe3, 0x40, 0x00, 0x12, 0xda, 0xf6, 0x5a, 0x04, 0x03, 0x31, 0x42, 0xf9, 0xe8, 0x5e, 0xfc, 0x42, 0x7b, 0x05, 0xd3, 0xcd, 0xfd, 0x93, 0xf8, 0xfe, 0xb2, 0x6e, 0xff, 0x70, 0xf1, 0xfd, 0x2a, 0xcb, 0xff, 0x13, 0x74, 0xfe, 0x77, 0x2b, 0xfb, 0xe7, 0x3d, 0xfe, 0x16, 0x0d, 0xfd, 0x25, 0xf2, 0xfc, 0x89, 0xe4, 0xfd, 0xeb, 0xc5, 0xfe, 0x18, 0x51, 0x01, 0x80, 0x95, 0xff, 0xfc, 0x0b, 0x32, 0x58, 0x23, 0x27, 0x97, 0x38, 0x05, 0x0c, 0x96, 0x1b, 0x67, 0x0e, 0x01, 0xaf, 0x85, 0xf9, 0xd5, 0xc6, 0xfe, 0xef, 0xa9, 0xf1, 0xd7, 0xfa, 0xff, 0xf0, 0x3d, 0xff, 0xf2, 0xb2, 0xe6, 0x83, 0x05, 0xfc, 0x4b, 0xe8, 0x03, 0xd8, 0x2e, 0xf5, 0x53, 0xdf, 0x03, 0x58, 0x54, 0xfb, 0xf0, 0x2d, 0xfb, 0x56, 0xb0, 0x05, 0xec, 0x3f, 0xfd, 0x8d, 0xa0, 0xfe, 0xff, 0xc0, 0x00, 0x09, 0x7d, 0xfe, 0xab, 0x0e, 0xff, 0x0f, 0x7b, 0xfe, 0xc6, 0x25, 0xfb, 0x82, 0x4b, 0xfe, 0x6b, 0xf8, 0xfc, 0xde, 0x3c, 0xfc, 0x38, 0x9b, 0xfd, 0x4a, 0x4a, 0xff, 0x1c, 0x74, 0x01, 0x48, 0x26, 0xfe, 0x33, 0xda, 0x37, 0x14, 0x41, 0x27, 0xeb, 0x30, 0xfe, 0x16, 0x0b, 0x20, 0xb2, 0x86, 0x00, 0x97, 0x23, 0xf6, 0xe7, 0x77, 0x01, 0xf3, 0xae, 0xf1, 0xa8, 0x53, 0x05, 0x9d, 0x9c, 0x02, 0x72, 0x15, 0xde, 0x5c, 0x4e, 0xf6, 0x43, 0x4b, 0x07, 0xcd, 0x01, 0xf6, 0xf7, 0x57, 0x03, 0x50, 0x2e, 0xfc, 0xaa, 0xa5, 0xfa, 0x02, 0xb2, 0x05, 0x91, 0x5d, 0xfd, 0x2f, 0xb5, 0xfd, 0x9a, 0xfa, 0x00, 0xe0, 0x98, 0xff, 0x33, 0x09, 0xff, 0x3e, 0xa3, 0xfe, 0xd5, 0x8e, 0xfa, 0xd0, 0x02, 0xfd, 0xca, 0x34, 0xfd, 0x54, 0xd2, 0xfc, 0x26, 0x22, 0xfd, 0x19, 0x98, 0xfe, 0x1f, 0x9b, 0x00, 0xe0, 0xb9, 0xfd, 0x81, 0xb2, 0x3d, 0x99, 0x51, 0x2a, 0xd9, 0x98, 0xf5, 0xaf, 0xe5, 0x20, 0x0a, 0x84, 0x02, 0xa2, 0x2e, 0xf3, 0xc8, 0x22, 0x04, 0xd6, 0x67, 0xf1, 0xf3, 0xb7, 0x09, 0x96, 0x23, 0x08, 0x9c, 0xd8, 0xd8, 0x61, 0xfd, 0xee, 0x9b, 0x02, 0x09, 0xb4, 0x9a, 0xf8, 0xde, 0x8b, 0x02, 0x02, 0xc6, 0xfd, 0x00, 0x38, 0xfa, 0xf3, 0x05, 0x05, 0x4d, 0x97, 0xfd, 0xb8, 0xf8, 0xfc, 0x22, 0x76, 0x00, 0xb7, 0x97, 0x01, 0x20, 0xc8, 0xff, 0xd9, 0x70, 0xfd, 0xa9, 0x42, 0xfa, 0x83, 0xc4, 0xfc, 0x46, 0xd7, 0xfd, 0x7f, 0xef, 0xfc, 0xd4, 0x28, 0xfb, 0xbe, 0x61, 0xfe, 0x95, 0x1e, 0x02, 0xbd, 0x6e, 0xfd, 0xa9, 0x2c, 0x46, 0x47, 0x6e, 0x2e, 0x6b, 0xac, 0xeb, 0xa0, 0x7b, 0x1c, 0x34, 0x01, 0x04, 0x46, 0xcf, 0xf2, 0x28, 0x6d, 0x07, 0x61, 0xe3, 0xef, 0xad, 0x50, 0x0a, 0x96, 0x48, 0x0e, 0x6d, 0x6e, 0xd7, 0x02, 0x70, 0xe8, 0x3b, 0x96, 0x07, 0x4b, 0xef, 0xfb, 0x71, 0xf9, 0x02, 0xcc, 0xe9, 0xfe, 0xc6, 0x80, 0xf9, 0x18, 0x74, 0x03, 0x3a, 0xd4, 0xfd, 0x20, 0x14, 0xfc, 0x2b, 0x4f, 0x00, 0x94, 0x93, 0x02, 0xb2, 0xd3, 0xff, 0xfa, 0x65, 0xfc, 0xb7, 0x79, 0xfa, 0x73, 0x62, 0xfc, 0xaf, 0xcf, 0xfc, 0xd5, 0x10, 0xfd, 0xe3, 0x13, 0xfb, 0x79, 0xba, 0xfe, 0x75, 0xa3, 0x02, 0xce, 0xd1, 0xfc, 0x44, 0x42, 0x4e, 0xeb, 0x4c, 0x31, 0xad, 0xf3, 0xe3, 0x03, 0xbb, 0x18, 0x9f, 0x2a, 0x04, 0xd1, 0xfb, 0xf2, 0xf6, 0x57, 0x0a, 0x4a, 0x74, 0xed, 0xce, 0xdc, 0x0a, 0x37, 0xe2, 0x16, 0xb1, 0x9a, 0xd5, 0xa7, 0x20, 0xe3, 0xaf, 0x13, 0x06, 0x70, 0x5f, 0xfe, 0xf9, 0xbd, 0x04, 0x02, 0xb4, 0xfe, 0xa5, 0x65, 0xf9, 0x89, 0x6a, 0x01, 0xa1, 0x2b, 0xfe, 0x0c, 0x12, 0xfc, 0x4d, 0xd7, 0xff, 0x9c, 0x56, 0x02, 0x62, 0x08, 0x00, 0xa4, 0x68, 0xfc, 0x55, 0xaa, 0xf9, 0x65, 0x8b, 0xfb, 0xfa, 0x3b, 0xfc, 0x4c, 0x75, 0xfe, 0x3d, 0x81, 0xfb, 0xd7, 0x9a, 0xfe, 0x55, 0xab, 0x02, 0xd2, 0xcb, 0xfc, 0xd4, 0xa1, 0x56, 0xfe, 0x50, 0x36, 0xf8, 0x11, 0xdb, 0x36, 0xf0, 0x10, 0x3e, 0x2d, 0x01, 0xac, 0xf4, 0xf7, 0xea, 0xd6, 0x0e, 0x8c, 0xf2, 0xe7, 0xbc, 0xba, 0x09, 0x57, 0xad, 0x1c, 0xd7, 0x2f, 0xd6, 0x8b, 0xaf, 0xe1, 0x7a, 0xe3, 0x03, 0x40, 0xaa, 0xfd, 0x50, 0xff, 0x05, 0x35, 0x81, 0xff, 0x4a, 0xa1, 0xf8, 0xa3, 0xb4, 0xff, 0xb9, 0x39, 0xfe, 0x98, 0x72, 0xfb, 0x86, 0xcf, 0xfe, 0xab, 0x5d, 0x02, 0x2c, 0xd8, 0xff, 0xcb, 0x67, 0xfb, 0x82, 0x97, 0xf8, 0x76, 0xe0, 0xfa, 0xb0, 0x42, 0xfc, 0x66, 0xb9, 0xff, 0x8f, 0xce, 0xfb, 0xd2, 0x33, 0xfe, 0x06, 0x09, 0x03, 0xdb, 0x17, 0xfd, 0x0f, 0x1a, 0x5f, 0xc6, 0x00, 0x3a, 0x1b, 0xc7, 0xd4, 0xc4, 0x45, 0x0b, 0x56, 0x20, 0xfd, 0xf6, 0xd9, 0xfe, 0x0d, 0x07, 0x11, 0x86, 0x48, 0xe3, 0x08, 0x43, 0x0b, 0xc4, 0x52, 0x20, 0xa6, 0x8b, 0xda, 0x3f, 0x6f, 0xe1, 0xc2, 0xf6, 0x00, 0x4f, 0xc4, 0xfb, 0x9c, 0xe9, 0x07, 0xfa, 0x4a, 0x02, 0xda, 0xad, 0xf7, 0xf5, 0xd8, 0xfd, 0xfc, 0x7d, 0xfe, 0x75, 0xb7, 0xfb, 0x6f, 0x04, 0xfe, 0xf4, 0x7f, 0x02, 0x7d, 0x0b, 0xff, 0xf1, 0x88, 0xfb, 0x64, 0x5a, 0xf8, 0xda, 0x21, 0xfa, 0xd2, 0xac, 0xfc, 0x2b, 0xc3, 0x00, 0xf7, 0x4f, 0xfc, 0xec, 0x87, 0xfe, 0xf5, 0x22, 0x04, 0xa7, 0xbd, 0xfc, 0xbf, 0x23, 0x66, 0xb3, 0xe9, 0x3c, 0x00, 0xf0, 0xcf, 0x09, 0x73, 0x06, 0x24, 0x07, 0xf9, 0x83, 0xb7, 0x03, 0xf1, 0xbb, 0x10, 0x2b, 0xf7, 0xe0, 0xf4, 0x82, 0x0b, 0x57, 0x5e, 0x23, 0x59, 0xf4, 0xdf, 0x3b, 0xde, 0xdf, 0xf6, 0xc3, 0xfe, 0xb3, 0xa4, 0xf8, 0x3d, 0x3e, 0x0a, 0xa2, 0x97, 0x04, 0xa7, 0x64, 0xf5, 0xd1, 0xda, 0xfc, 0x65, 0xf9, 0xfe, 0x5d, 0x87, 0xfb, 0xf1, 0xa6, 0xfc, 0x0f, 0x1b, 0x02, 0xe6, 0x3f, 0xfe, 0xda, 0x95, 0xfc, 0x4e, 0xad, 0xf7, 0x14, 0xbd, 0xf8, 0x48, 0x1d, 0xfd, 0x2e, 0x72, 0x01, 0xff, 0xf5, 0xfc, 0xdf, 0x0a, 0xff, 0xca, 0x2d, 0x04, 0x0a, 0xfc, 0xfb, 0xef, 0x0a, 0x6c, 0x60, 0x47, 0x3f, 0xd0, 0xf7, 0xcc, 0x8a, 0xd1, 0x02, 0x90, 0x82, 0xf5, 0xcf, 0x3f, 0x06, 0xd5, 0xd2, 0x0f, 0x4d, 0x32, 0xe1, 0x4a, 0xc3, 0x09, 0x48, 0xdb, 0x25, 0xe7, 0xb6, 0xe6, 0x84, 0x45, 0xde, 0x03, 0x6a, 0xfd, 0x75, 0xfc, 0xf4, 0x76, 0xd5, 0x0b, 0xa4, 0xc6, 0x06, 0x9f, 0x82, 0xf3, 0xee, 0xad, 0xfc, 0x7e, 0xb0, 0xff, 0xda, 0x53, 0xfa, 0x5c, 0x6b, 0xfb, 0x61, 0x72, 0x02, 0xcb, 0xb3, 0xfd, 0x03, 0x8f, 0xfd, 0x2c, 0xde, 0xf6, 0xa2, 0x98, 0xf7, 0xd7, 0x98, 0xfd, 0x8d, 0x04, 0x02, 0x8a, 0xc5, 0xfd, 0xe1, 0x31, 0xff, 0x99, 0x6d, 0x03, 0x11, 0x0c, 0xfc, 0x6e, 0x90, 0x6e, 0x72, 0x73, 0x43, 0x03, 0x74, 0xcb, 0xfa, 0x03, 0x00, 0x40, 0xa1, 0xf2, 0x1c, 0x0b, 0x06, 0xfa, 0x14, 0x0f, 0xd2, 0x53, 0xe2, 0x4c, 0x9b, 0x05, 0x97, 0xf5, 0x27, 0x06, 0x6a, 0xef, 0x0e, 0x6a, 0xdc, 0xd7, 0xc5, 0xfb, 0x8f, 0x57, 0xf1, 0xc4, 0x9b, 0x0b, 0xba, 0x90, 0x09, 0x0b, 0x6e, 0xf2, 0x95, 0x7a, 0xfc, 0xe6, 0xfd, 0xff, 0xd1, 0xca, 0xf8, 0xba, 0x6f, 0xfa, 0x62, 0x3e, 0x03, 0x8e, 0x93, 0xfc, 0xec, 0x20, 0xfe, 0xc2, 0xf0, 0xf6, 0xc7, 0x8e, 0xf6, 0x9c, 0xcb, 0xfd, 0xf7, 0x60, 0x02, 0x45, 0x24, 0xfe, 0x1c, 0xc2, 0xfe, 0x0c, 0xe2, 0x02, 0xb1, 0x1c, 0xfc, 0x4b, 0xfe, 0x71, 0x97, 0x2d, 0x44, 0x04, 0xc4, 0xcc, 0x58, 0xab, 0xfe, 0x1f, 0x87, 0xef, 0xf5, 0x9f, 0x05, 0x97, 0x7a, 0x0d, 0xe2, 0xca, 0xe2, 0x18, 0x00, 0x02, 0xbd, 0x16, 0x2a, 0x5f, 0xb1, 0xf6, 0x0d, 0xc6, 0xdc, 0xbd, 0x53, 0xf9, 0x3d, 0x16, 0xee, 0x98, 0x91, 0x0b, 0xb7, 0x0e, 0x0b, 0x37, 0x28, 0xf3, 0x9c, 0xcb, 0xfb, 0x36, 0x54, 0x00, 0x9c, 0x83, 0xf7, 0x2f, 0x2d, 0xfa, 0xe7, 0x6f, 0x03, 0xa8, 0x71, 0xfb, 0x8d, 0xd6, 0xfe, 0x36, 0x75, 0xf7, 0x45, 0x54, 0xf6, 0x11, 0xd5, 0xfd, 0xce, 0x82, 0x02, 0x09, 0x64, 0xfd, 0x10, 0xde, 0xfe, 0xb6, 0x47, 0x02, 0xf3, 0xe9, 0xfb, 0x25, 0x89, 0x72, 0x28, 0xd5, 0x45, 0x93, 0xc3, 0xcf, 0x64, 0xb0, 0xfd, 0xa1, 0x15, 0xec, 0x86, 0x1c, 0x04, 0x1f, 0x23, 0x0d, 0xdd, 0x48, 0xe1, 0x11, 0x13, 0xfe, 0x26, 0xf8, 0x2b, 0x2e, 0xa0, 0xfc, 0x06, 0xcf, 0xde, 0x53, 0xb4, 0xf6, 0x69, 0x5d, 0xeb, 0x17, 0x11, 0x0a, 0x1a, 0x00, 0x0c, 0xb9, 0x4d, 0xf5, 0xc2, 0xf0, 0xf9, 0x42, 0x74, 0x00, 0x27, 0xa3, 0xf7, 0x66, 0x1a, 0xf9, 0x92, 0xc2, 0x02, 0xc0, 0xf5, 0xfa, 0x1d, 0x88, 0xff, 0xe0, 0x3a, 0xf8, 0x59, 0xa5, 0xf6, 0x75, 0x15, 0xfd, 0x47, 0xdb, 0x01, 0x12, 0xcc, 0xfc, 0x06, 0x7c, 0xfe, 0x63, 0xed, 0x01, 0x82, 0x23, 0xfc, 0x0a, 0x86, 0x70, 0x37, 0xbf, 0x48, 0x5c, 0xbd, 0xd4, 0xb6, 0xd6, 0xfd, 0xfe, 0xa4, 0xe7, 0x4e, 0x58, 0x02, 0x14, 0x2b, 0x0f, 0x58, 0xd8, 0xdd, 0xc2, 0x5a, 0xfa, 0xb8, 0xbe, 0x2c, 0x5f, 0xac, 0x01, 0x29, 0x59, 0xe3, 0x8c, 0x3b, 0xf5, 0xcf, 0xb8, 0xe8, 0x3a, 0x07, 0x07, 0x6b, 0xb3, 0x0c, 0xfe, 0x96, 0xf8, 0x74, 0x3f, 0xf8, 0xb9, 0xd2, 0xff, 0x5e, 0xd3, 0xf8, 0x88, 0xce, 0xf7, 0xf6, 0x3d, 0x02, 0x8e, 0x20, 0xfb, 0xf3, 0x35, 0x00, 0x9f, 0xed, 0xf9, 0x3c, 0xe8, 0xf5, 0x2c, 0xde, 0xfb, 0x9a, 0x97, 0x01, 0x43, 0xdc, 0xfb, 0x60, 0xe3, 0xfe, 0x63, 0x6b, 0x02, 0x87, 0xdf, 0xfb, 0x31, 0x3f, 0x6c, 0x5d, 0x10, 0x4c, 0xc7, 0xc5, 0xdb, 0xba, 0xc9, 0xfe, 0xb2, 0x2e, 0xe3, 0xf7, 0x43, 0x00, 0x40, 0x18, 0x12, 0xab, 0x02, 0xda, 0xbd, 0x28, 0xf6, 0xe1, 0xea, 0x2c, 0x8f, 0xa2, 0x05, 0x20, 0xad, 0xe9, 0x67, 0x68, 0xf6, 0x06, 0x67, 0xe4, 0x02, 0xa5, 0x03, 0xbe, 0x78, 0x0d, 0xe5, 0x0f, 0xfb, 0xac, 0x36, 0xf8, 0x06, 0x36, 0xfe, 0xc8, 0x93, 0xf9, 0x58, 0xa8, 0xf7, 0xf7, 0x2a, 0x02, 0x55, 0x05, 0xfc, 0x47, 0x02, 0x01, 0xf4, 0x06, 0xfa, 0xbb, 0xd1, 0xf5, 0x5d, 0xa4, 0xfa, 0xa7, 0x17, 0x00, 0x17, 0x4b, 0xfd, 0xec, 0x5c, 0xff, 0xc2, 0x87, 0x02, 0x48, 0xfe, 0xfb, 0xf9, 0x9c, 0x67, 0xca, 0x3d, 0x4d, 0xf4, 0x70, 0xe4, 0x29, 0x02, 0x00, 0x0d, 0x7e, 0xdf, 0xec, 0xdf, 0xfe, 0xeb, 0x8b, 0x13, 0x43, 0x4e, 0xd8, 0x4a, 0x4d, 0xf0, 0xd7, 0xaa, 0x2c, 0x11, 0x9d, 0x09, 0x9d, 0xe1, 0xee, 0x58, 0xd4, 0xfa, 0x2d, 0xea, 0xde, 0xf4, 0x26, 0x00, 0x66, 0x94, 0x0e, 0x9f, 0x9b, 0xfb, 0x6e, 0x27, 0xf9, 0x28, 0x88, 0xfc, 0xa1, 0xf1, 0xf8, 0x20, 0x5a, 0xf9, 0x89, 0x7c, 0x03, 0xaf, 0x5a, 0xfb, 0x8b, 0x86, 0x01, 0x0e, 0x42, 0xfa, 0x4e, 0xb6, 0xf4, 0x44, 0x98, 0xfa, 0x56, 0x8d, 0xff, 0xcd, 0x72, 0xfe, 0x29, 0xc2, 0xff, 0xfd, 0xb6, 0x02, 0x8b, 0x77, 0xfc, 0x59, 0x9b, 0x60, 0xbb, 0x5a, 0x4f, 0x9e, 0xf1, 0xed, 0x03, 0xd6, 0x00, 0xb6, 0xfb, 0xdd, 0x95, 0x1d, 0xfb, 0x5a, 0xed, 0x12, 0x00, 0x2e, 0xdc, 0x65, 0x96, 0xe7, 0x6f, 0xea, 0x29, 0x48, 0xaf, 0x10, 0x2a, 0x08, 0xf1, 0x69, 0x9c, 0x02, 0x76, 0xc8, 0xda, 0xbd, 0x00, 0xfa, 0xc7, 0x0e, 0x10, 0xc6, 0x75, 0xfa, 0x8d, 0xb5, 0xfa, 0xa0, 0x55, 0xfc, 0xb0, 0x8a, 0xf7, 0x04, 0x69, 0xfb, 0xc8, 0x1e, 0x04, 0xbb, 0x2b, 0xfa, 0xc7, 0xf3, 0x02, 0xfa, 0x2d, 0xf9, 0xf7, 0x16, 0xf4, 0x0b, 0xb4, 0xfc, 0x5d, 0x2f, 0xfe, 0x7e, 0x60, 0xff, 0x0c, 0xa3, 0x00, 0xf7, 0x42, 0x02, 0xc9, 0x4e, 0xfc, 0xc2, 0xb7, 0x5b, 0xfb, 0x8c, 0x4d, 0x4c, 0x45, 0xf7, 0x1b, 0xca, 0x01, 0x64, 0xc9, 0xdc, 0x4d, 0x82, 0xf8, 0x0b, 0x22, 0x0e, 0x60, 0x25, 0xe3, 0xae, 0x21, 0xe1, 0x26, 0xee, 0x23, 0x77, 0xf5, 0x17, 0xff, 0x15, 0xf2, 0xfa, 0x0e, 0x0a, 0x11, 0x98, 0xda, 0x08, 0x41, 0xf1, 0xc6, 0x6a, 0x10, 0xc6, 0x2e, 0xf9, 0xa3, 0x43, 0xfb, 0x75, 0xc4, 0xfe, 0xff, 0x17, 0xf6, 0x3e, 0x79, 0xfa, 0xd0, 0x7d, 0x05, 0x04, 0xa0, 0xf9, 0x5c, 0x12, 0x02, 0xc6, 0x91, 0xfa, 0x3f, 0x5f, 0xf3, 0x19, 0x40, 0xfe, 0x55, 0xce, 0xfe, 0x2a, 0xf2, 0xfe, 0x8b, 0x9e, 0x00, 0xf2, 0xf9, 0x01, 0xf6, 0xad, 0xfc, 0x32, 0x4c, 0x58, 0xdf, 0x42, 0x4a, 0x43, 0x6d, 0xfd, 0x36, 0xe6, 0x04, 0xbd, 0x4a, 0xde, 0x89, 0x9d, 0xf5, 0xb8, 0x1c, 0x09, 0x60, 0xe8, 0xe7, 0x78, 0x4f, 0xdf, 0x59, 0x02, 0x1d, 0xf9, 0x90, 0x1e, 0x08, 0x7f, 0xf4, 0x0f, 0x79, 0x0d, 0xeb, 0xd7, 0xdf, 0xed, 0x85, 0xe7, 0x64, 0xc1, 0x0f, 0x0c, 0x7a, 0xf9, 0x77, 0x77, 0xfa, 0x95, 0xdf, 0x00, 0x35, 0x10, 0xf6, 0x57, 0x78, 0xfa, 0x27, 0xa3, 0x04, 0x03, 0x5a, 0xf9, 0xb3, 0x2c, 0x02, 0xe2, 0xd8, 0xfc, 0x83, 0x1d, 0xf3, 0xbc, 0x03, 0x00, 0x08, 0xe3, 0xfe, 0x5c, 0x01, 0xfe, 0xe2, 0x8c, 0x01, 0xac, 0x73, 0x01, 0xe3, 0x60, 0xfc, 0xe1, 0xce, 0x55, 0x4b, 0x8b, 0x48, 0x5c, 0xfd, 0xfc, 0x2c, 0x54, 0x09, 0x3f, 0xbf, 0xe2, 0xa5, 0x6c, 0xef, 0x6c, 0xc3, 0x06, 0x8a, 0x55, 0xeb, 0xce, 0x15, 0xdd, 0x97, 0xdc, 0x17, 0xd1, 0xc4, 0x24, 0x9f, 0x7e, 0xf6, 0xbf, 0xc1, 0x0d, 0x4d, 0x0f, 0xe7, 0xef, 0xf6, 0xde, 0x43, 0xa0, 0x0e, 0x73, 0x76, 0xfb, 0xa5, 0x0f, 0xf7, 0x08, 0x3a, 0x02, 0x25, 0x99, 0xf6, 0xdd, 0xf9, 0xf9, 0xe6, 0x98, 0x04, 0x3e, 0xb2, 0xf8, 0xb7, 0x96, 0x01, 0x7e, 0x16, 0x00, 0x80, 0x15, 0xf4, 0x99, 0x1e, 0xff, 0xf4, 0x4d, 0xff, 0xe7, 0x80, 0xfe, 0x15, 0xe0, 0x00, 0x56, 0xee, 0x00, 0x35, 0xe4, 0xfc, 0x2f, 0xa1, 0x56, 0x25, 0x46, 0x43, 0x58, 0x4f, 0xfa, 0x5b, 0x26, 0x10, 0x3d, 0x18, 0xe3, 0x08, 0x20, 0xeb, 0x63, 0x60, 0x07, 0x09, 0xd0, 0xed, 0x66, 0x97, 0xdb, 0xfc, 0x72, 0x12, 0x08, 0xba, 0x28, 0xcc, 0xd3, 0xf8, 0xf0, 0x93, 0x0e, 0xe1, 0x2c, 0xec, 0xfb, 0xec, 0xda, 0x6f, 0x74, 0x0a, 0x81, 0x40, 0xfe, 0x0e, 0xee, 0xf6, 0x46, 0xcf, 0xff, 0x37, 0x3d, 0xf6, 0x82, 0x3d, 0xf9, 0xef, 0x6f, 0x06, 0xbe, 0x56, 0xf9, 0x4f, 0x05, 0x00, 0xa2, 0x4f, 0x02, 0x1c, 0xea, 0xf4, 0xf6, 0xd0, 0xfe, 0x07, 0x85, 0xff, 0x14, 0xb8, 0xfd, 0x7e, 0x07, 0x01, 0xbe, 0xdf, 0x00, 0xb5, 0x9e, 0xfc, 0x60, 0x23, 0x53, 0x66, 0x6f, 0x3e, 0xa9, 0xe0, 0xfb, 0x09, 0xc7, 0x16, 0xc2, 0xb1, 0xdf, 0xf3, 0xda, 0xe9, 0x8d, 0x23, 0x0b, 0x08, 0xf0, 0xed, 0x1d, 0x52, 0xdd, 0x95, 0x2a, 0x08, 0x99, 0xa2, 0x29, 0x04, 0x83, 0xfe, 0xed, 0xbe, 0x0d, 0x4c, 0x09, 0xf5, 0xd1, 0x14, 0xd7, 0x69, 0x5b, 0x04, 0x03, 0x24, 0x02, 0x3c, 0xaf, 0xf7, 0x09, 0xae, 0xfd, 0xf8, 0x83, 0xf4, 0x3f, 0x6b, 0xf7, 0x2e, 0x07, 0x08, 0xae, 0xc7, 0xfb, 0x6c, 0x70, 0xfe, 0x64, 0xb3, 0x04, 0xeb, 0x31, 0xf4, 0x59, 0x8e, 0xfc, 0x3b, 0x28, 0x02, 0x07, 0x78, 0xfd, 0x0f, 0x6c, 0x00, 0x67, 0x43, 0x00, 0xf5, 0x7f, 0xfc, 0x55, 0xda, 0x4c, 0x15, 0x4a, 0x39, 0x63, 0x72, 0xfe, 0x27, 0x4d, 0x1b, 0x59, 0xac, 0xe1, 0xa2, 0x25, 0xe9, 0x23, 0x3e, 0x0b, 0xe6, 0x0d, 0xf1, 0x08, 0x8d, 0xdd, 0x2c, 0x9e, 0xfe, 0x9d, 0xb7, 0x27, 0x12, 0xc9, 0x03, 0xd5, 0x52, 0x0c, 0x29, 0xc7, 0xfd, 0x40, 0x82, 0xd8, 0x63, 0xb4, 0xfc, 0xac, 0xb4, 0x05, 0xe7, 0x14, 0xf7, 0xd1, 0x8f, 0xfc, 0x04, 0x45, 0xf5, 0x4f, 0x3f, 0xf4, 0x8a, 0x72, 0x06, 0x44, 0x52, 0xfd, 0x4b, 0x04, 0x01, 0x2c, 0xbb, 0x05, 0x34, 0xfc, 0xf0, 0xd0, 0x44, 0xfb, 0x5d, 0x6c, 0x05, 0x6e, 0x66, 0xfd, 0xc3, 0x01, 0xff, 0x88, 0xfa, 0xff, 0xf5, 0x42, 0xfd, 0xf1, 0x6a, 0x4a, 0x14, 0x5d, 0x32, 0xd7, 0x1c, 0xf8, 0xcf, 0xfe, 0x21, 0xad, 0x35, 0xeb, 0x4c, 0x3c, 0xe9, 0x21, 0xe1, 0x08, 0x22, 0xe8, 0xef, 0xbd, 0x11, 0xdf, 0x91, 0x47, 0xf8, 0x6c, 0xd0, 0x27, 0xe5, 0x8e, 0x07, 0x58, 0xcb, 0x04, 0x77, 0x75, 0x05, 0xb9, 0xa9, 0xdf, 0xa0, 0xdb, 0xf6, 0x72, 0x2f, 0x07, 0x28, 0x8b, 0xf8, 0x4e, 0x09, 0xfa, 0xaf, 0x8d, 0xf5, 0xd4, 0x76, 0xf3, 0x43, 0x3a, 0x03, 0x8b, 0x08, 0xff, 0x1f, 0x6d, 0x01, 0x41, 0xe0, 0x05, 0x87, 0x60, 0xf1, 0x5b, 0x56, 0xf9, 0x50, 0xfd, 0x06, 0x69, 0x11, 0xfe, 0xc7, 0x28, 0xfe, 0x0a, 0xc4, 0xff, 0xe4, 0x20, 0xfe, 0xf7, 0x6e, 0x45, 0x87, 0xfd, 0x2c, 0x8f, 0x8f, 0xf8, 0x68, 0x01, 0x25, 0x9a, 0xa9, 0xee, 0x81, 0x53, 0xe9, 0x6a, 0x08, 0x09, 0xb3, 0x36, 0xf4, 0x2f, 0xda, 0xe0, 0x42, 0x31, 0xf2, 0xae, 0xd9, 0x25, 0x67, 0x5d, 0x08, 0x13, 0x3d, 0xfc, 0xb4, 0xfc, 0x0e, 0xa3, 0x1d, 0xea, 0x22, 0x1b, 0xee, 0xdf, 0xf3, 0x09, 0x9f, 0x06, 0xfa, 0x19, 0x83, 0xf6, 0x22, 0xed, 0xf8, 0x22, 0x59, 0xf4, 0x96, 0x05, 0x00, 0xb6, 0xa0, 0xfd, 0xc3, 0x27, 0xff, 0xc1, 0xcf, 0x06, 0xdd, 0x36, 0xf6, 0x61, 0x55, 0xf7, 0x77, 0x91, 0x04, 0xd4, 0x19, 0x00, 0x55, 0xa3, 0xfe, 0x39, 0xe8, 0xff, 0xfc, 0x40, 0xfe, 0x25, 0x38, 0x3f, 0xf1, 0x73, 0x28, 0x19, 0x3d, 0xfb, 0x89, 0x5c, 0x24, 0xd3, 0x64, 0xf0, 0xf1, 0x81, 0xec, 0x6d, 0x7b, 0x07, 0x77, 0xfe, 0xf6, 0x81, 0x2d, 0xe4, 0x71, 0xa7, 0xee, 0x3e, 0xfa, 0x22, 0x54, 0x8e, 0x06, 0x25, 0xb1, 0xf8, 0x78, 0x51, 0x12, 0x3f, 0xcb, 0xf0, 0xad, 0x3f, 0xec, 0x39, 0xc7, 0x09, 0xb5, 0x61, 0xfb, 0xa9, 0xd5, 0xf4, 0x34, 0xc6, 0xfa, 0xc2, 0xd8, 0xf5, 0xc8, 0xda, 0xfe, 0x82, 0xd1, 0xfb, 0x4f, 0xac, 0xfb, 0x48, 0x86, 0x05, 0xf9, 0xa4, 0xfa, 0x0c, 0xeb, 0xf8, 0xec, 0x21, 0x02, 0xb2, 0x01, 0xff, 0xff, 0x4c, 0xff, 0xf1, 0x9e, 0x01, 0xd6, 0x6f, 0xfe, 0xf5, 0x28, 0x3a, 0xe8, 0xdb, 0x23, 0x88, 0x91, 0xfc, 0xb8, 0x65, 0x24, 0xa3, 0x81, 0xf2, 0x5f, 0x98, 0xef, 0xa2, 0xf3, 0x06, 0x2f, 0xc8, 0xf7, 0x9b, 0x26, 0xe8, 0x7a, 0x70, 0xee, 0x32, 0xfd, 0x1d, 0xf1, 0xea, 0x06, 0xd8, 0x0b, 0xf8, 0x0c, 0xbc, 0x10, 0x26, 0x9d, 0xf4, 0xc6, 0xda, 0xed, 0xf4, 0x32, 0x09, 0xa9, 0x93, 0xfc, 0xef, 0xd0, 0xf5, 0x59, 0x23, 0xfb, 0xce, 0x06, 0xf7, 0x86, 0x68, 0xfe, 0x72, 0x0c, 0xfc, 0x66, 0x1a, 0xfa, 0x37, 0x04, 0x02, 0xb2, 0x2a, 0xfc, 0x0f, 0xdf, 0xfb, 0xc0, 0x46, 0x02, 0xc0, 0xbb, 0xfd, 0x56, 0xbb, 0xfe, 0x2b, 0x96, 0x02, 0xbd, 0xfa, 0xfe, 0x54, 0x2e, 0x3b, 0xc0, 0xce, 0x23, 0x1c, 0xd1, 0xec, 0x36, 0xa0, 0x25, 0x13, 0xd7, 0x02, 0xed, 0x2e, 0xea, 0x84, 0x93, 0xff, 0xbb, 0xaf, 0xfc, 0xb5, 0xf0, 0xeb, 0x3b, 0x23, 0xf0, 0x31, 0xa0, 0x1e, 0x66, 0x36, 0xfe, 0xb2, 0xbc, 0xf1, 0x38, 0xb3, 0x0d, 0x42, 0x3d, 0xfc, 0xa4, 0x70, 0xf6, 0x92, 0x41, 0x0d, 0xc7, 0x2d, 0x03, 0x62, 0x6f, 0xfa, 0x2f, 0x1e, 0x00, 0xd2, 0x8b, 0xf9, 0x59, 0xb9, 0xfd, 0x1a, 0xc8, 0xf6, 0x87, 0x58, 0xf4, 0x8f, 0xb6, 0xfd, 0x18, 0xcf, 0xfb, 0xda, 0x67, 0xf9, 0x0a, 0x3d, 0xff, 0x77, 0x00, 0xff, 0xb1, 0x12, 0x00, 0x21, 0x35, 0x02, 0x8c, 0x55, 0xfe, 0x4d, 0x83, 0x31, 0xc3, 0x69, 0x23, 0x9e, 0x11, 0xf6, 0xbc, 0xa8, 0x20, 0x22, 0x6e, 0x01, 0x08, 0x69, 0xec, 0xb6, 0x3d, 0x00, 0x0a, 0xd4, 0xfb, 0x5a, 0x44, 0xef, 0x21, 0xa2, 0xf1, 0xa4, 0x10, 0x17, 0x3a, 0xc1, 0x01, 0x6d, 0xe4, 0xf6, 0xaf, 0x4c, 0x0b, 0x8c, 0xda, 0xfb, 0x85, 0xdc, 0xf6, 0xb7, 0xae, 0x09, 0x86, 0x9e, 0x02, 0xff, 0x47, 0xfc, 0x63, 0xad, 0xff, 0x1e, 0x87, 0xf9, 0x22, 0x33, 0xfe, 0x00, 0xff, 0xf8, 0x03, 0x69, 0xf6, 0x46, 0x36, 0xfe, 0x0c, 0x75, 0xfb, 0x79, 0x24, 0xfa, 0x5f, 0x31, 0xff, 0x67, 0x8e, 0xfe, 0x56, 0x0c, 0xff, 0xa1, 0x96, 0x01, 0x98, 0x5e, 0xff, 0xab, 0x8a, 0x29, 0x18, 0x91, 0x20, 0x8b, 0xfa, 0xfb, 0x18, 0x3f, 0x1d, 0xa8, 0x0b, 0x02, 0x11, 0xe1, 0xf0, 0x68, 0xc7, 0x01, 0x79, 0xe7, 0xfb, 0xbc, 0x70, 0xf0, 0x52, 0x60, 0xf3, 0x30, 0x54, 0x12, 0x69, 0x63, 0x02, 0xb9, 0xd5, 0xf9, 0x9a, 0x14, 0x09, 0x09, 0xcd, 0xfc, 0x91, 0xb7, 0xf7, 0x10, 0xf1, 0x06, 0x4a, 0xf7, 0x02, 0xfe, 0x7a, 0xfc, 0x30, 0x3f, 0xff, 0x18, 0xc2, 0xfa, 0x20, 0x90, 0xfd, 0x4a, 0xe6, 0xfa, 0x31, 0x09, 0xf9, 0xf1, 0x67, 0xfe, 0x12, 0xa8, 0xfc, 0xed, 0xb8, 0xfa, 0x34, 0xa7, 0xfe, 0x3a, 0x07, 0xff, 0x8d, 0x5c, 0xfe, 0x3f, 0x2b, 0x00, 0x86, 0x14, 0xff, 0xd7, 0x8c, 0x22, 0x7a, 0x39, 0x1d, 0x2b, 0x13, 0x01, 0xfe, 0x94, 0x1a, 0x52, 0x1b, 0x02, 0x0f, 0x06, 0xf5, 0xb5, 0xea, 0x03, 0x43, 0xe0, 0xfb, 0x59, 0x38, 0xf1, 0x27, 0x5a, 0xf5, 0x73, 0xaa, 0x0e, 0xe7, 0x3a, 0x03, 0xf3, 0x16, 0xfb, 0xa2, 0x0d, 0x07, 0x0d, 0x8c, 0xfe, 0xc3, 0x9a, 0xf7, 0xd7, 0xc5, 0x04, 0xb7, 0x8d, 0x03, 0x2f, 0xcd, 0xfc, 0xc2, 0xf4, 0xfe, 0x45, 0x7c, 0xfb, 0x17, 0xb4, 0xfd, 0x17, 0xf4, 0xfb, 0x20, 0x67, 0xfb, 0xa5, 0xe8, 0xff, 0x5b, 0x08, 0xfd, 0x03, 0x14, 0xfb, 0x8e, 0xc6, 0xfe, 0xa3, 0x18, 0xff, 0x07, 0x00, 0xfe, 0x02, 0x34, 0xff, 0xb3, 0x73, 0xfe, 0x14, 0x9f, 0x1d, 0x07, 0x75, 0x1a, 0x4c, 0x15, 0x03, 0x00, 0xcb, 0x17, 0xb7, 0xb9, 0x03, 0xd4, 0x73, 0xf8, 0xb5, 0xb9, 0x03, 0xe0, 0x61, 0xfc, 0x0a, 0x78, 0xf3, 0xb2, 0x18, 0xf6, 0x9b, 0x2d, 0x0c, 0xc1, 0x6f, 0x04, 0xe8, 0xaa, 0xfa, 0xf2, 0x65, 0x05, 0xf7, 0x9a, 0xff, 0xf1, 0x04, 0xf8, 0x66, 0x8b, 0x03, 0xf8, 0x14, 0x03, 0xcf, 0x4d, 0xfd, 0x0d, 0xaf, 0xfe, 0x89, 0x05, 0xfc, 0x6e, 0x1e, 0xfe, 0xfb, 0xd4, 0xfd, 0x55, 0x3b, 0xfd, 0xd2, 0xd3, 0xff, 0xbd, 0x7f, 0xfd, 0x76, 0xe8, 0xfb, 0xed, 0xff, 0xfe, 0x71, 0x7e, 0xfe, 0xe9, 0x52, 0xfd, 0xc0, 0xc1, 0xfe, 0x19, 0x43, 0xfe, 0x92, 0x65, 0x1a, 0xf3, 0x49, 0x18, 0x1a, 0x35, 0x03, 0xb0, 0xdb, 0x14, 0xe6, 0x69, 0x06, 0x38, 0x92, 0xfb, 0x39, 0xaa, 0x01, 0x96, 0x39, 0xfd, 0xcd, 0xf5, 0xf6, 0xbf, 0xeb, 0xf6, 0x23, 0xf1, 0x09, 0x1e, 0xe6, 0x04, 0xb3, 0xec, 0xfa, 0x45, 0x78, 0x03, 0xf5, 0xc0, 0xff, 0x49, 0xe2, 0xf9, 0xd7, 0x98, 0x02, 0xfe, 0x28, 0x02, 0x95, 0xbb, 0xfd, 0xfb, 0xaa, 0xfe, 0xb7, 0x55, 0xfd, 0x28, 0xb3, 0xff, 0x7e, 0x4f, 0xff, 0x18, 0x6e, 0xfd, 0xbb, 0x44, 0xff, 0x96, 0x65, 0xfe, 0xc5, 0xe0, 0xfc, 0xd9, 0x62, 0xfe, 0xee, 0xc3, 0xfd, 0x70, 0x59, 0xfd, 0x80, 0x25, 0xff, 0x79, 0x04, 0xfe, 0x6c, 0x37, 0x16, 0xa4, 0xf4, 0x15, 0x27, 0xc1, 0x04, 0xf6, 0xa0, 0x12, 0x8d, 0x3e, 0x07, 0x42, 0xce, 0xfd, 0x0a, 0x56, 0x01, 0x4b, 0xd5, 0xfd, 0x74, 0x1d, 0xf9, 0xbd, 0x4c, 0xf8, 0x84, 0xa5, 0x07, 0x74, 0xe9, 0x03, 0x9f, 0xb6, 0xfb, 0x0d, 0x0f, 0x02, 0x80, 0xcc, 0xff, 0xce, 0x47, 0xfb, 0xe5, 0x59, 0x01, 0x23, 0x70, 0x01, 0x9d, 0x4d, 0xfe, 0x41, 0xfb, 0xff, 0xf8, 0xc1, 0xfe, 0xa1, 0xe7, 0xff, 0xb3, 0x9d, 0xff, 0x58, 0x6e, 0xfd, 0x4b, 0xe2, 0xfe, 0x12, 0x8d, 0xfe, 0x8c, 0x1b, 0xfd, 0xa7, 0xca, 0xfd, 0xca, 0xcb, 0xfd, 0xac, 0xe9, 0xfd, 0xc1, 0xfb, 0xfe, 0x25, 0x00, 0xfe, 0x55, 0xe8, 0x12, 0xb5, 0xb6, 0x13, 0x63, 0x26, 0x06, 0x61, 0x9a, 0x10, 0x4b, 0xba, 0x07, 0x90, 0x96, 0xff, 0x72, 0x07, 0x01, 0xec, 0xcb, 0xfe, 0xd7, 0x31, 0xfb, 0xea, 0xd8, 0xf9, 0xbd, 0xf2, 0x04, 0x22, 0x16, 0x03, 0xdf, 0xdf, 0xfc, 0x62, 0xcc, 0x00, 0xd2, 0x0c, 0x00, 0xa8, 0x4e, 0xfc, 0x38, 0x92, 0x00, 0x40, 0xfb, 0x01, 0xd4, 0xf6, 0xff, 0x21, 0x08, 0x00, 0xd6, 0x21, 0xff, 0xd0, 0x94, 0x00, 0xcd, 0x7f, 0xff, 0xdb, 0x18, 0xfd, 0xcc, 0x77, 0xfe, 0xff, 0x86, 0xfe, 0x08, 0x72, 0xfd, 0x2e, 0x40, 0xfe, 0xd6, 0x29, 0xfe, 0x4c, 0x2a, 0xfe, 0xfd, 0x35, 0xff, 0x2f, 0x6b, 0xfe, 0x38, 0x85, 0x0f, 0x47, 0xa5, 0x11, 0x35, 0x92, 0x07, 0x65, 0x69, 0x0f, 0xab, 0x2f, 0x07, 0x54, 0x5b, 0x00, 0x8a, 0x43, 0x02, 0xd6, 0xc2, 0xff, 0xac, 0x50, 0xfc, 0x25, 0xb2, 0xfa, 0xd6, 0x2a, 0x03, 0x5e, 0x41, 0x02, 0xa2, 0xe6, 0xfc, 0x86, 0xc8, 0x00, 0xa7, 0xb4, 0x00, 0x2f, 0xf3, 0xfc, 0x89, 0x45, 0x01, 0x0b, 0x6f, 0x02, 0xe6, 0xa4, 0xff, 0xfb, 0x0c, 0x00, 0x99, 0xff, 0xff, 0xe5, 0x92, 0x00, 0xc9, 0x9d, 0xfe, 0xe2, 0x8d, 0xfc, 0x93, 0x99, 0xfe, 0x47, 0x40, 0xff, 0x71, 0x06, 0xfe, 0x83, 0x42, 0xfe, 0x40, 0x62, 0xfe, 0x87, 0xe5, 0xfe, 0xc1, 0xa6, 0xff, 0x6c, 0xe3, 0xfe, 0x38, 0x9d, 0x0d, 0x0b, 0x37, 0x10, 0x76, 0x88, 0x07, 0xe3, 0x04, 0x0e, 0x19, 0xf6, 0x06, 0x6e, 0xc1, 0x00, 0x16, 0xc9, 0x02, 0x2c, 0xc6, 0x00, 0xf6, 0x84, 0xfd, 0x7b, 0xf7, 0xfa, 0xd9, 0x82, 0x01, 0x87, 0x89, 0x01, 0x54, 0x51, 0xfd, 0x2c, 0x67, 0x01, 0x14, 0x39, 0x02, 0xfc, 0xe9, 0xfd, 0xb7, 0x5f, 0x00, 0x80, 0xf7, 0x01, 0x90, 0xff, 0xff, 0x65, 0x62, 0x00, 0xf9, 0x1f, 0x00, 0x3e, 0x6a, 0xff, 0x6d, 0x9c, 0xfd, 0xa4, 0xae, 0xfd, 0x94, 0x90, 0xff, 0xe3, 0x41, 0xff, 0x70, 0x37, 0xfe, 0x78, 0x80, 0xfe, 0x54, 0x28, 0xff, 0x31, 0xae, 0xff, 0x50, 0x4b, 0xff, 0xf4, 0xd6, 0xfd, 0x59, 0xea, 0x0c, 0x15, 0x98, 0x0e, 0x40, 0x00, 0x07, 0xa8, 0x2f, 0x0d, 0x45, 0xfe, 0x05, 0xc9, 0x4b, 0x01, 0x4d, 0xb7, 0x03, 0xd3, 0x90, 0x01, 0x9d, 0xe2, 0xfd, 0xac, 0x15, 0xfb, 0x14, 0xbb, 0x00, 0xad, 0xef, 0x00, 0x6b, 0x82, 0xff, 0x6f, 0x6b, 0x03, 0xf0, 0x5c, 0x01, 0x05, 0x76, 0xfd, 0x17, 0x75, 0x00, 0x9e, 0xbb, 0x01, 0xa2, 0x80, 0x00, 0xfc, 0x27, 0x00, 0xd0, 0x28, 0xff, 0x05, 0x0f, 0xff, 0x9c, 0xa7, 0xfe, 0xe7, 0xdc, 0xfe, 0x5e, 0xc3, 0xff, 0xc1, 0x6a, 0xff, 0x7c, 0x93, 0xfe, 0x56, 0x4b, 0xff, 0x72, 0x5e, 0xff, 0x83, 0xb8, 0xfe, 0x3f, 0x56, 0xfe, 0x40, 0x85, 0xfd, 0x3a, 0x59, 0x0c, 0x5f, 0x67, 0x0d, 0xd3, 0x28, 0x06, 0xa1, 0xfc, 0x0b, 0xe8, 0x8b, 0x05, 0x2a, 0x00, 0x02, 0x20, 0xaa, 0x04, 0x97, 0xae, 0x01, 0x39, 0x0e, 0xfe, 0xe6, 0xa9, 0xfb, 0xba, 0xdd, 0x00, 0x08, 0xd0, 0x02, 0x47, 0xa9, 0x00, 0x44, 0xa8, 0x02, 0xdf, 0x11, 0x01, 0x53, 0x80, 0xfd, 0xf1, 0x4e, 0x00, 0xa8, 0xdd, 0x01, 0x0d, 0x14, 0x00, 0x8c, 0xbc, 0xff, 0x8c, 0xda, 0xff, 0x57, 0xaa, 0xff, 0x0e, 0x85, 0xff, 0x05, 0x5f, 0xff, 0x8c, 0x2b, 0x00, 0x61, 0xfa, 0xff, 0xb5, 0x96, 0xfe, 0x0b, 0x9c, 0xfe, 0x11, 0x82, 0xfe, 0x23, 0x5c, 0xfe, 0x14, 0x66, 0xfe, 0x32, 0x54, 0xfe, 0xd8, 0x6b, 0x0b, 0xaa, 0xfe, 0x0b, 0x74, 0x47, 0x05, 0x34, 0x04, 0x0b, 0x33, 0x8b, 0x05, 0x97, 0xc9, 0x02, 0xfe, 0x12, 0x05, 0x84, 0xbd, 0x01, 0xba, 0xf2, 0xfe, 0x9d, 0x24, 0xfe, 0xf7, 0x1a, 0x01, 0x0f, 0xfc, 0x01, 0x66, 0x8f, 0x01, 0x88, 0x3a, 0x02, 0x00, 0x75, 0x00, 0xa7, 0x93, 0xfd, 0x09, 0x8e, 0xff, 0x72, 0xbd, 0x01, 0xfa, 0xf0, 0x00, 0x17, 0xa2, 0x00, 0x90, 0xdc, 0xff, 0x80, 0xb9, 0xff, 0x22, 0x4c, 0x00, 0x61, 0x6d, 0x00, 0x57, 0x5e, 0x00, 0x56, 0xb3, 0xfe, 0x25, 0x5b, 0xfd, 0x82, 0x4d, 0xfe, 0x07, 0xcf, 0xfe, 0x07, 0xee, 0xfe, 0xe7, 0xcc, 0xfe, 0x74, 0x0e, 0xfe, 0xbe, 0xce, 0x0a, 0xc0, 0xaa, 0x0b, 0xe4, 0x3d, 0x04, 0xe9, 0x1f, 0x08, 0xf0, 0xd9, 0x05, 0x49, 0x02, 0x05, 0x9f, 0x89, 0x05, 0x7f, 0xc4, 0x02, 0x28, 0x88, 0x00, 0x84, 0x1d, 0xfe, 0x19, 0x26, 0x01, 0xc7, 0xc7, 0x02, 0xf7, 0x04, 0x01, 0x08, 0x0b, 0x01, 0x20, 0x86, 0xff, 0x21, 0x9a, 0xfd, 0x4e, 0xef, 0x00, 0xa5, 0xe4, 0x02, 0xc6, 0xda, 0x00, 0x9e, 0x2d, 0x00, 0x2c, 0x4f, 0x00, 0xb3, 0x41, 0x01, 0x9d, 0x1e, 0x01, 0x8f, 0x3d, 0xff, 0x7f, 0x65, 0xfe, 0xce, 0x0a, 0xfe, 0x4b, 0x05, 0xfe, 0x7d, 0xe7, 0xfe, 0x38, 0x46, 0xff, 0x32, 0xb5, 0xfe, 0x31, 0x5a, 0xfe, 0x77, 0x36, 0xfe, 0xae, 0x61, 0x08, 0xb3, 0xa8, 0x0a, 0x60, 0x94, 0x04, 0x20, 0x53, 0x07, 0xf4, 0x5e, 0x06, 0x46, 0x49, 0x05, 0x14, 0xe2, 0x07, 0x43, 0xa4, 0x04, 0xf4, 0xf5, 0x00, 0x09, 0xd7, 0xfe, 0xfb, 0xab, 0xff, 0x95, 0xea, 0x01, 0xc0, 0x1d, 0x01, 0x1a, 0x48, 0x00, 0x99, 0x8d, 0xff, 0x30, 0x4f, 0xff, 0xc1, 0x92, 0x01, 0x4b, 0xf1, 0x02, 0x19, 0x63, 0x01, 0xf6, 0x77, 0x00, 0x8c, 0x06, 0x01, 0x70, 0x3d, 0x01, 0x56, 0xe5, 0xff, 0xc1, 0x29, 0xfe, 0xa3, 0x5b, 0xfe, 0xab, 0x83, 0xfe, 0xb2, 0x7a, 0xfe, 0x05, 0x29, 0xff, 0x50, 0xf4, 0xfe, 0x02, 0x97, 0xfe, 0xf4, 0x65, 0xfe, 0x5c, 0x5a, 0xfe, 0xdf, 0x34, 0x07, 0xee, 0x7f, 0x0a, 0xc1, 0xe8, 0x05, 0x63, 0x3c, 0x07, 0x41, 0x41, 0x08, 0xaf, 0x40, 0x06, 0xea, 0x40, 0x05, 0xb2, 0x96, 0x04, 0x48, 0xf9, 0x01, 0x52, 0x5a, 0xff, 0xbb, 0x0f, 0xff, 0x54, 0x4f, 0xff, 0xff, 0xfc, 0xff, 0x9d, 0xe7, 0x01, 0x37, 0xd4, 0x01, 0xf7, 0x7b, 0x00, 0x18, 0x79, 0x01, 0xbf, 0x60, 0x02, 0x7d, 0xa6, 0x01, 0xe7, 0xa1, 0x00, 0xe2, 0x54, 0x00, 0x00, 0xd7, 0xff, 0x22, 0xd4, 0xfe, 0xa0, 0x7a, 0xfe, 0x38, 0xaa, 0xfe, 0x32, 0x7c, 0xfe, 0xdc, 0x6b, 0xfe, 0x5f, 0xed, 0xfe, 0x50, 0x31, 0xff, 0xcf, 0xc4, 0xfe, 0xf9, 0x50, 0xfe, 0xc7, 0xa5, 0xfe, 0x0f, 0xda, 0x05, 0x57, 0x7f, 0x0a, 0x21, 0x16, 0x08, 0xfb, 0x49, 0x07, 0x5d, 0x48, 0x08, 0x20, 0xfb, 0x07, 0x0c, 0xb9, 0x05, 0xc7, 0x86, 0x02, 0x36, 0x0e, 0x00, 0x4f, 0x02, 0xff, 0xb2, 0x6c, 0xff, 0x9d, 0x72, 0x00, 0xf1, 0xb2, 0x00, 0xee, 0x25, 0x01, 0xa1, 0x2f, 0x02, 0xfb, 0x64, 0x02, 0x93, 0xef, 0x01, 0x5d, 0xbc, 0x01, 0xef, 0xf0, 0x00, 0x4a, 0xf3, 0xff, 0xf0, 0x6d, 0xff, 0xc8, 0x49, 0xff, 0xfd, 0x04, 0xff, 0x6e, 0xac, 0xfe, 0x2c, 0xd1, 0xfe, 0x80, 0xb1, 0xfe, 0xcd, 0x47, 0xfe, 0x59, 0x85, 0xfe, 0xbf, 0x1b, 0xff, 0x55, 0x0d, 0xff, 0x4d, 0x11, 0xff, 0x67, 0xef, 0xfe, 0xad, 0x81, 0x07, 0x06, 0x08, 0x0b, 0x41, 0xab, 0x06, 0xed, 0xc8, 0x08, 0x6d, 0x79, 0x08, 0xa6, 0xff, 0x05, 0x52, 0x25, 0x06, 0x0d, 0xa0, 0x02, 0x22, 0x4f, 0xfe, 0x3d, 0x92, 0xfe, 0x2d, 0xd3, 0x00, 0x25, 0xd4, 0x00, 0x62, 0x08, 0x01, 0x75, 0xec, 0x01, 0x51, 0xd7, 0x01, 0x9e, 0xbc, 0x02, 0x5f, 0x2d, 0x03, 0x25, 0x01, 0x01, 0xcf, 0x23, 0xff, 0xa1, 0x28, 0xff, 0x86, 0x6d, 0xff, 0xd3, 0x62, 0xff, 0x90, 0x50, 0xff, 0x12, 0xce, 0xfe, 0x67, 0x80, 0xfe, 0xb3, 0x7c, 0xfe, 0xa7, 0x95, 0xfe, 0x09, 0x33, 0xff, 0x0c, 0xe7, 0xfe, 0xc1, 0xbc, 0xfe, 0x5d, 0x43, 0xff, 0xae, 0x37, 0xff, 0xe4, 0x66, 0x07, 0xe1, 0xf3, 0x0a, 0x3e, 0x92, 0x07, 0x14, 0xf7, 0x07, 0x52, 0x35, 0x07, 0x1a, 0x4f, 0x05, 0x4a, 0xac, 0x04, 0x04, 0x24, 0x03, 0xb9, 0x44, 0x00, 0x3f, 0xf6, 0xff, 0x1f, 0xf1, 0x00, 0x93, 0xa4, 0x00, 0x37, 0xc0, 0x00, 0x64, 0x9b, 0x01, 0x56, 0x94, 0x02, 0xb6, 0x40, 0x03, 0x30, 0xb1, 0x02, 0x8e, 0x3f, 0x00, 0x7e, 0x11, 0xff, 0x93, 0x21, 0xff, 0x58, 0x03, 0xff, 0x14, 0x5d, 0xff, 0x9a, 0x70, 0xff, 0x25, 0x3f, 0xff, 0x46, 0x9b, 0xfe, 0x6a, 0x31, 0xfe, 0x3c, 0x92, 0xfe, 0xb7, 0x18, 0xff, 0xf4, 0x0e, 0xff, 0x1f, 0x22, 0xff, 0xc3, 0x23, 0xff, 0x80, 0xfe, 0xfe, 0x74, 0x16, 0x08, 0x3d, 0x13, 0x0c, 0xa9, 0xf4, 0x05, 0x99, 0x2f, 0x05, 0xe7, 0xfc, 0x05, 0xa2, 0xc5, 0x04, 0x75, 0x1a, 0x04, 0xe6, 0xb2, 0x04, 0x8c, 0x37, 0x02, 0x7c, 0xfc, 0xff, 0xeb, 0x7c, 0x01, 0x86, 0xc8, 0x00, 0x26, 0x82, 0x00, 0xf1, 0x20, 0x02, 0xa3, 0x92, 0x02, 0x3f, 0xe3, 0x01, 0xfe, 0xd3, 0x02, 0x83, 0xcb, 0x01, 0x28, 0x9c, 0xfe, 0x7d, 0x38, 0xfe, 0xbb, 0x54, 0xff, 0x30, 0xad, 0xff, 0x1b, 0x05, 0xff, 0xdb, 0x1d, 0xff, 0x0e, 0x00, 0xff, 0xc0, 0x8c, 0xfe, 0x20, 0x65, 0xfe, 0x3f, 0x88, 0xfe, 0x6e, 0x22, 0xff, 0x09, 0x72, 0xff, 0xff, 0x37, 0xff, 0x29, 0xe0, 0xfe, 0xba, 0x6f, 0x08, 0xdb, 0x8e, 0x0b, 0x2d, 0x7f, 0x04, 0x01, 0x87, 0x03, 0x90, 0x11, 0x04, 0xb8, 0xa0, 0x04, 0x8b, 0xdb, 0x05, 0x0f, 0x6d, 0x04, 0xd2, 0xee, 0x01, 0x0d, 0x69, 0x02, 0x98, 0xe4, 0x01, 0x14, 0xc7, 0xff, 0x93, 0x4c, 0x01, 0xc9, 0x5e, 0x02, 0x67, 0x4b, 0x02, 0x05, 0x6b, 0x02, 0xe5, 0x73, 0x02, 0xb6, 0x20, 0x02, 0x4e, 0xa5, 0x00, 0x6f, 0xda, 0xfe, 0x28, 0x2d, 0xfe, 0x5c, 0x16, 0xff, 0x24, 0xac, 0xff, 0xfe, 0xce, 0xff, 0x32, 0xea, 0xfe, 0x09, 0x89, 0xfe, 0xc8, 0xcd, 0xfe, 0x4f, 0x8b, 0xfe, 0xb2, 0xb4, 0xfe, 0xed, 0x13, 0xff, 0x25, 0xa2, 0xff, 0x68, 0x52, 0xff, 0x0a, 0xa3, 0x08, 0x39, 0x65, 0x0b, 0xd6, 0x69, 0x04, 0xe8, 0xb5, 0x03, 0x73, 0xeb, 0x03, 0xd6, 0x91, 0x03, 0x99, 0xc5, 0x03, 0xed, 0x04, 0x03, 0xdf, 0xf3, 0x01, 0x5f, 0x09, 0x03, 0x77, 0x2d, 0x03, 0x7b, 0xc8, 0x01, 0xce, 0xb6, 0x00, 0x9d, 0x2e, 0x01, 0x6e, 0x38, 0x03, 0x7c, 0xb1, 0x02, 0xda, 0x07, 0x02, 0xaf, 0x29, 0x02, 0x6e, 0x4d, 0x02, 0x85, 0x89, 0x00, 0x2c, 0x5c, 0xff, 0x88, 0xc4, 0xfe, 0xe7, 0x02, 0xfe, 0x98, 0xdd, 0xff, 0x00, 0xff, 0xff, 0xb1, 0xe7, 0xfe, 0x3c, 0xd3, 0xfe, 0xa4, 0x1f, 0xff, 0x5c, 0x9c, 0xfe, 0xa0, 0xd1, 0xfe, 0x45, 0x65, 0xff, 0x5b, 0x4d, 0xff, 0x37, 0xba, 0x08, 0x11, 0xf6, 0x0b, 0x4e, 0x49, 0x04, 0xe0, 0x66, 0x03, 0xc9, 0xf0, 0x04, 0x89, 0x88, 0x04, 0x41, 0x01, 0x03, 0x88, 0x12, 0x00, 0x75, 0x9c, 0xfe, 0x45, 0x69, 0x03, 0x40, 0x64, 0x05, 0xe8, 0x98, 0x01, 0xe5, 0xcc, 0x00, 0x12, 0x9a, 0x01, 0x22, 0x08, 0x02, 0xd7, 0xa3, 0x02, 0x86, 0xe5, 0x02, 0x37, 0xe4, 0x01, 0x12, 0x11, 0x02, 0x92, 0xa2, 0x02, 0x6d, 0x21, 0x01, 0x43, 0x38, 0xff, 0xae, 0xe6, 0xfe, 0x71, 0xb0, 0xfe, 0x74, 0x49, 0xfe, 0xfa, 0xd8, 0xff, 0x5d, 0xef, 0xff, 0x39, 0xeb, 0xfe, 0xfe, 0x10, 0xff, 0x1f, 0xe7, 0xfe, 0xa7, 0xe0, 0xfe, 0xcc, 0x42, 0xff, 0x59, 0x39, 0x0a, 0x88, 0xed, 0x0c, 0xd2, 0xbf, 0x03, 0xb9, 0xb2, 0x03, 0x16, 0x09, 0x05, 0xf4, 0xd3, 0x04, 0xd6, 0xe1, 0x02, 0x89, 0x0f, 0xfe, 0x43, 0x1b, 0xfd, 0xf8, 0x67, 0x02, 0x9f, 0x21, 0x04, 0x8f, 0xeb, 0x01, 0x1c, 0x75, 0x01, 0x3c, 0x2a, 0x00, 0x9b, 0xc5, 0x01, 0x37, 0x29, 0x03, 0x3c, 0xb2, 0x01, 0x11, 0xeb, 0x01, 0x18, 0xdc, 0x02, 0x8b, 0xa6, 0x01, 0x9d, 0xc8, 0x01, 0xf0, 0x1a, 0x02, 0x5a, 0x4f, 0xff, 0x6f, 0x79, 0xfe, 0xe0, 0x54, 0xfe, 0x4a, 0x31, 0xfe, 0x06, 0x53, 0xff, 0x3b, 0xe5, 0xff, 0xac, 0x60, 0xff, 0xb7, 0xdf, 0xfe, 0xe8, 0xfa, 0xfe, 0x3b, 0x95, 0xfe, 0xbe, 0xff, 0x0b, 0x3d, 0x33, 0x0f, 0xe7, 0x18, 0x04, 0x9c, 0x85, 0x03, 0x75, 0x27, 0x04, 0x97, 0x49, 0x04, 0x0e, 0xd4, 0x02, 0xdd, 0x31, 0xfd, 0x62, 0xba, 0xfb, 0x94, 0xbe, 0x02, 0x50, 0x59, 0x04, 0x22, 0xd1, 0xff, 0x95, 0x65, 0x00, 0x0b, 0x7b, 0x00, 0x21, 0x9a, 0x01, 0x27, 0x21, 0x02, 0x2d, 0x9c, 0x01, 0xb8, 0x43, 0x02, 0xc9, 0x0a, 0x02, 0x8d, 0x1d, 0x02, 0xe1, 0x15, 0x02, 0x63, 0x6a, 0x01, 0x2a, 0x45, 0x01, 0xa6, 0x8d, 0x00, 0x78, 0x0d, 0xfe, 0xe9, 0x50, 0xfe, 0xd5, 0x0c, 0xff, 0x2a, 0x8c, 0xfe, 0x82, 0x45, 0xff, 0x45, 0xdb, 0xff, 0xe4, 0x58, 0xff, 0xa8, 0x9e, 0xfe, 0xdd, 0x35, 0x0e, 0x51, 0x37, 0x11, 0xeb, 0xc3, 0x03, 0x5a, 0xcd, 0x03, 0xe5, 0x1f, 0x04, 0xe4, 0x57, 0x04, 0xc0, 0x6e, 0x02, 0xea, 0xff, 0xfa, 0xfd, 0xc5, 0xfa, 0x33, 0xc1, 0x03, 0x8f, 0x85, 0x04, 0xd0, 0x33, 0xff, 0x6e, 0x48, 0xff, 0x9e, 0x80, 0xfe, 0xcd, 0x54, 0x01, 0x55, 0x99, 0x02, 0xdc, 0x3f, 0x01, 0x06, 0x98, 0x01, 0x73, 0xb6, 0x01, 0x2e, 0x77, 0x01, 0x6a, 0x87, 0x01, 0x48, 0x94, 0x02, 0x9a, 0x16, 0x01, 0xd2, 0xb3, 0x00, 0xd2, 0x85, 0x00, 0x8b, 0x39, 0xff, 0xd2, 0x81, 0xfe, 0x0a, 0x86, 0xfe, 0x77, 0xe4, 0xfe, 0x11, 0xe2, 0xfe, 0xa4, 0x8b, 0xff, 0xbd, 0x5c, 0xff, 0x05, 0xd3, 0x10, 0xb1, 0x29, 0x13, 0xb6, 0x0b, 0x03, 0xf9, 0x7b, 0x04, 0xa9, 0x95, 0x04, 0x78, 0x60, 0x04, 0xb7, 0xc7, 0x01, 0xbe, 0xfe, 0xf8, 0xee, 0x14, 0xfa, 0x2c, 0xf1, 0x04, 0x5f, 0x6f, 0x04, 0xe6, 0x71, 0xfe, 0xb6, 0x09, 0xff, 0xa0, 0xcb, 0xfd, 0xee, 0x5b, 0x00, 0x98, 0x78, 0x01, 0x5e, 0x79, 0x01, 0x80, 0x1a, 0x02, 0x04, 0x1e, 0x01, 0x99, 0x5f, 0x00, 0xff, 0x27, 0x01, 0xea, 0x1f, 0x02, 0xb2, 0xfc, 0x00, 0x6e, 0xb5, 0x01, 0x76, 0x22, 0x00, 0xc8, 0x7f, 0x00, 0x9c, 0xc9, 0x00, 0xe0, 0x91, 0xfe, 0x96, 0x9a, 0xfe, 0x43, 0xf7, 0xfe, 0xea, 0xe7, 0xfe, 0xe9, 0x9b, 0xfe, 0xc6, 0xe2, 0x13, 0xd2, 0x7c, 0x15, 0x77, 0x39, 0x02, 0x94, 0xe9, 0x04, 0x64, 0x90, 0x04, 0x51, 0xea, 0x03, 0x77, 0xf4, 0x00, 0xb7, 0x09, 0xf7, 0x0a, 0x72, 0xfa, 0xae, 0x70, 0x06, 0xc4, 0x85, 0x03, 0x33, 0x46, 0xfd, 0xee, 0x76, 0xfe, 0x8c, 0x51, 0xfd, 0xf9, 0x88, 0x00, 0x7d, 0xe5, 0x00, 0x74, 0x2c, 0x00, 0xfc, 0x06, 0x02, 0x7a, 0x39, 0x01, 0x28, 0xfc, 0xff, 0x27, 0x64, 0x00, 0x9b, 0xfb, 0x00, 0x5f, 0xc0, 0x00, 0x57, 0x16, 0x01, 0x55, 0x2a, 0x00, 0xce, 0x17, 0x01, 0x91, 0x95, 0x00, 0xfb, 0x58, 0x00, 0x61, 0x1c, 0x00, 0x8c, 0x99, 0xfe, 0xfe, 0xc8, 0xfe, 0x6e, 0x8b, 0xfe, 0x1d, 0x37, 0x17, 0xb5, 0xa4, 0x17, 0xfc, 0x49, 0x01, 0x68, 0xe0, 0x05, 0x7e, 0xe7, 0x04, 0xce, 0x21, 0x03, 0x16, 0x77, 0xff, 0xec, 0x01, 0xf5, 0x5b, 0x8c, 0xfb, 0xec, 0x69, 0x08, 0x4f, 0x89, 0x02, 0x54, 0x67, 0xfc, 0xc0, 0xaf, 0xfd, 0x52, 0x86, 0xfc, 0x31, 0xd7, 0x00, 0xc9, 0x6c, 0x00, 0xb5, 0x42, 0x00, 0xf4, 0xdb, 0x01, 0xb0, 0x3c, 0x00, 0x39, 0xcc, 0xff, 0x78, 0x45, 0x00, 0x41, 0xc8, 0x00, 0xec, 0xde, 0xff, 0x8c, 0x4f, 0x00, 0xfc, 0x7c, 0xff, 0xf6, 0xad, 0x00, 0x48, 0x31, 0x01, 0xb7, 0x89, 0x00, 0xfa, 0x92, 0x00, 0x19, 0xa4, 0x00, 0xf2, 0xb6, 0xff, 0x1a, 0xae, 0xfd, 0x3f, 0xaa, 0x1a, 0x7c, 0xfe, 0x19, 0x6d, 0x52, 0x00, 0xf0, 0xf4, 0x06, 0xb3, 0x2f, 0x05, 0x3f, 0x0e, 0x02, 0xb3, 0x91, 0xfd, 0xcd, 0x1e, 0xf3, 0x8e, 0x63, 0xfd, 0xe8, 0x01, 0x0a, 0x1b, 0x45, 0x01, 0xfe, 0xd0, 0xfb, 0x9b, 0x4a, 0xfd, 0x91, 0xda, 0xfb, 0x39, 0xde, 0x00, 0xfd, 0xa2, 0xff, 0x0a, 0xfb, 0xff, 0xde, 0x9e, 0x02, 0x63, 0xcf, 0xff, 0x4f, 0xf9, 0xfe, 0x66, 0xe1, 0xff, 0xe4, 0x8d, 0x00, 0x2f, 0xd3, 0xff, 0x48, 0xf4, 0xff, 0xd5, 0x07, 0xfe, 0xf6, 0x3b, 0x00, 0x19, 0xcd, 0x00, 0x31, 0x08, 0x00, 0xce, 0x8f, 0x01, 0x0f, 0x70, 0x00, 0xc3, 0x17, 0x00, 0x40, 0xc6, 0xff, 0xbd, 0xbf, 0x1d, 0x3f, 0x23, 0x1d, 0xc2, 0x85, 0xff, 0x29, 0x81, 0x07, 0xa3, 0x54, 0x05, 0x7f, 0x99, 0x00, 0xe6, 0xb1, 0xfb, 0x3c, 0x85, 0xf1, 0x97, 0x6e, 0xff, 0x12, 0x20, 0x0b, 0xd4, 0xb3, 0xff, 0xee, 0x71, 0xfb, 0xc8, 0xd8, 0xfc, 0x4d, 0xb3, 0xfb, 0x9c, 0x08, 0x01, 0xbe, 0x82, 0xfe, 0x62, 0x74, 0xff, 0x28, 0xff, 0x02, 0xc5, 0x99, 0xff, 0x6a, 0xf4, 0xfe, 0xe6, 0x62, 0xff, 0xa5, 0xc1, 0xff, 0x90, 0xd1, 0xff, 0xc2, 0x9a, 0xff, 0xc4, 0xa2, 0xfd, 0x07, 0x94, 0xff, 0xa8, 0xad, 0xff, 0xe8, 0x13, 0x00, 0x16, 0x64, 0x00, 0xd3, 0x2c, 0x00, 0xf5, 0x52, 0x01, 0x9c, 0xa8, 0xff, 0x66, 0x73, 0x20, 0x9e, 0x72, 0x20, 0x19, 0x51, 0xff, 0xe6, 0xc3, 0x07, 0xee, 0xaa, 0x05, 0x8b, 0x25, 0xff, 0xcf, 0xb6, 0xf9, 0x19, 0x03, 0xf0, 0xb0, 0xa0, 0x01, 0x2d, 0xe4, 0x0b, 0xfd, 0x47, 0xfe, 0x7e, 0x31, 0xfb, 0x75, 0x33, 0xfc, 0x48, 0xe5, 0xfb, 0x08, 0x58, 0x01, 0xdc, 0xb5, 0xfd, 0xe7, 0xc7, 0xfe, 0x9b, 0xf2, 0x02, 0x6c, 0x50, 0xff, 0xc4, 0x17, 0xff, 0x79, 0x67, 0xff, 0x14, 0x2d, 0xff, 0x7e, 0x68, 0xff, 0x01, 0x56, 0xff, 0xee, 0x2c, 0xfd, 0xaf, 0x94, 0xff, 0x4c, 0x8f, 0xff, 0xb8, 0xee, 0xfd, 0xe9, 0x22, 0x00, 0xa9, 0xfb, 0x00, 0xe9, 0x91, 0x00, 0xc8, 0x0c, 0x00, 0xe4, 0xc2, 0x21, 0xe6, 0x47, 0x24, 0x54, 0x75, 0x00, 0x24, 0x10, 0x07, 0x26, 0x89, 0x06, 0xd1, 0xb4, 0xfd, 0xfe, 0xfa, 0xf7, 0xdd, 0xc3, 0xee, 0x9f, 0xb9, 0x02, 0x4b, 0x9a, 0x0c, 0xac, 0x56, 0xfd, 0x60, 0x1d, 0xfb, 0x2d, 0x2f, 0xfb, 0xb2, 0x0b, 0xfc, 0xae, 0xa7, 0x01, 0xfd, 0x4a, 0xfd, 0x01, 0x81, 0xfe, 0x7b, 0x74, 0x02, 0x0c, 0xbf, 0xfe, 0xf8, 0x10, 0xff, 0xaa, 0x7c, 0xff, 0x49, 0x06, 0xff, 0x47, 0x3d, 0xff, 0xd1, 0x8a, 0xfe, 0x7e, 0x69, 0xfd, 0x42, 0xd7, 0xfe, 0x13, 0x1e, 0xfe, 0xf9, 0xe9, 0xfe, 0xf7, 0xfb, 0xff, 0xc9, 0xd5, 0xff, 0xff, 0x7a, 0x00, 0xf9, 0xba, 0xff, 0x91, 0x2c, 0x21, 0x9e, 0x37, 0x28, 0x35, 0xe2, 0x03, 0x61, 0x7a, 0x05, 0x95, 0x89, 0x07, 0x1d, 0x00, 0xfd, 0xde, 0x6e, 0xf6, 0xa4, 0x30, 0xee, 0xb3, 0x21, 0x02, 0xcc, 0x0e, 0x0d, 0x42, 0x3f, 0xfd, 0x0d, 0x28, 0xfb, 0xa9, 0x4a, 0xfa, 0xfb, 0xb3, 0xfb, 0x05, 0xd4, 0x01, 0x06, 0x33, 0xfd, 0x41, 0x51, 0xfe, 0x26, 0x49, 0x02, 0xc3, 0x4d, 0xfe, 0xcb, 0x6d, 0xfe, 0x29, 0x9b, 0xff, 0xc8, 0xb5, 0xfe, 0xdf, 0x76, 0xff, 0x1e, 0xa5, 0xfe, 0xfd, 0xcb, 0xfb, 0xdb, 0x57, 0xfe, 0x2d, 0xe8, 0xfe, 0x88, 0x4d, 0xfe, 0x4a, 0xaf, 0xff, 0x60, 0xe9, 0xff, 0xff, 0x02, 0x00, 0xa1, 0x6c, 0xff, 0xd9, 0xbd, 0x1f, 0x2b, 0xbc, 0x2a, 0x1d, 0x31, 0x09, 0xba, 0x78, 0x04, 0x9f, 0x6e, 0x07, 0x8e, 0x64, 0xfd, 0xad, 0xdd, 0xf4, 0x06, 0x2a, 0xee, 0x27, 0x96, 0x00, 0x2a, 0x9d, 0x0c, 0xf2, 0xb2, 0xfd, 0xde, 0x31, 0xfb, 0x39, 0xd9, 0xf9, 0xe3, 0xe8, 0xfa, 0x97, 0xcb, 0x01, 0x3a, 0x13, 0xfd, 0xc2, 0x1c, 0xfe, 0x53, 0x41, 0x02, 0x76, 0x42, 0xfe, 0x8f, 0xdd, 0xfd, 0x0a, 0xdf, 0xfe, 0x2c, 0x14, 0xff, 0xb2, 0x73, 0xff, 0x0a, 0xf8, 0xfc, 0x9e, 0x23, 0xfc, 0x1c, 0x8c, 0xfe, 0x07, 0x2d, 0xfe, 0x1f, 0x31, 0xfe, 0x65, 0x41, 0xff, 0x15, 0xed, 0xff, 0xbb, 0x4d, 0x00, 0x2c, 0xda, 0xff, 0xa5, 0x34, 0x1f, 0x7a, 0x43, 0x2b, 0xaf, 0xd5, 0x0d, 0x39, 0x3d, 0x06, 0x0f, 0x0b, 0x06, 0xac, 0xea, 0xfd, 0xf0, 0x15, 0xf4, 0xdc, 0xee, 0xed, 0x7c, 0xd4, 0xff, 0xcd, 0x40, 0x0b, 0xf6, 0xcf, 0xfd, 0x78, 0x5e, 0xfb, 0xfb, 0xa3, 0xf9, 0xf6, 0x67, 0xfa, 0x43, 0x8f, 0x01, 0x0e, 0xad, 0xfc, 0x87, 0x05, 0xfe, 0xc6, 0x44, 0x02, 0xbe, 0x6e, 0xfe, 0xd8, 0x9b, 0xfd, 0xc0, 0xf7, 0xfe, 0x20, 0xe3, 0xfd, 0xb7, 0x6c, 0xfe, 0x80, 0x56, 0xfe, 0x58, 0x75, 0xfb, 0x0a, 0xce, 0xfd, 0xb2, 0x08, 0xfe, 0xfb, 0x07, 0xfe, 0x48, 0x39, 0xff, 0x09, 0x33, 0x00, 0x2c, 0x8d, 0x00, 0x1a, 0x1c, 0xff, 0xd8, 0xb1, 0x1f, 0x51, 0xfa, 0x2a, 0x82, 0x2d, 0x10, 0xd0, 0x00, 0x0a, 0x11, 0x6a, 0x05, 0xe7, 0x16, 0xfd, 0xce, 0x5c, 0xf4, 0x34, 0xdd, 0xed, 0xa3, 0x40, 0xff, 0x60, 0xbb, 0x09, 0xfc, 0xad, 0xfd, 0xa3, 0x6d, 0xfb, 0x9e, 0x17, 0xf9, 0xab, 0x61, 0xfa, 0xa2, 0x5c, 0x01, 0x58, 0x15, 0xfc, 0x1a, 0xe3, 0xfd, 0x3e, 0x32, 0x02, 0xe9, 0xa4, 0xfe, 0xb5, 0xc4, 0xfe, 0xd9, 0x17, 0xfd, 0x05, 0x2d, 0xfd, 0x15, 0x65, 0xff, 0x81, 0x9d, 0xfd, 0xae, 0xa3, 0xfb, 0x34, 0x27, 0xfd, 0xd8, 0x69, 0xfd, 0x2c, 0x3a, 0xfe, 0xf5, 0xc6, 0xff, 0xfc, 0x27, 0x00, 0x80, 0xa4, 0xff, 0x2f, 0x00, 0xff, 0x36, 0x5d, 0x21, 0xb7, 0x16, 0x2a, 0x73, 0x5b, 0x10, 0x8c, 0xa7, 0x0d, 0x61, 0xa7, 0x06, 0xb1, 0xfa, 0xfb, 0x67, 0x54, 0xf4, 0x0e, 0x80, 0xef, 0x52, 0x9b, 0xfe, 0xb4, 0xab, 0x07, 0xa9, 0x68, 0xfd, 0xea, 0x30, 0xfc, 0x6f, 0xc1, 0xf7, 0xfb, 0x11, 0xfa, 0x2e, 0x8d, 0x01, 0xc1, 0x24, 0xfb, 0x59, 0x96, 0xfd, 0x93, 0x83, 0x02, 0x5a, 0xfc, 0xfe, 0xd2, 0xa2, 0xfd, 0x34, 0x23, 0xfe, 0x67, 0x48, 0xfd, 0x4a, 0x3d, 0xfe, 0xc5, 0xc3, 0xfd, 0x7e, 0xba, 0xfb, 0x76, 0x61, 0xfd, 0x4c, 0xae, 0xfc, 0x00, 0x79, 0xfe, 0x3c, 0x84, 0xff, 0x81, 0x57, 0xff, 0xf4, 0x43, 0x00, 0x72, 0xe2, 0xff, 0x5b, 0xf7, 0x24, 0x7d, 0x7b, 0x28, 0xe3, 0x1e, 0x0f, 0x3d, 0x06, 0x11, 0x83, 0x78, 0x07, 0x7d, 0x05, 0xfc, 0xa4, 0xcb, 0xf2, 0xb7, 0x26, 0xf2, 0x93, 0x48, 0xff, 0x06, 0xc9, 0x03, 0xe4, 0xed, 0xfc, 0x24, 0xfb, 0xfd, 0x10, 0xdb, 0xf6, 0x37, 0xd7, 0xf8, 0x95, 0xf1, 0x01, 0x75, 0x6c, 0xf9, 0x63, 0xb7, 0xfe, 0xc8, 0xf0, 0x01, 0x3d, 0x59, 0xfd, 0xe1, 0x22, 0x00, 0x32, 0xd1, 0xfd, 0x76, 0x98, 0xfc, 0xf4, 0x8c, 0xfe, 0x77, 0x4e, 0xfd, 0x5e, 0x8e, 0xfb, 0x1d, 0x1b, 0xfe, 0x25, 0x98, 0xfc, 0x77, 0x5a, 0xfd, 0x6c, 0xe2, 0xfe, 0x23, 0x08, 0x00, 0x85, 0xe0, 0x00, 0xc5, 0x0e, 0xff, 0xb1, 0xb2, 0x29, 0xa7, 0xa4, 0x26, 0x4f, 0x28, 0x0c, 0x2c, 0xee, 0x14, 0x97, 0xc9, 0x06, 0x95, 0xfd, 0xfc, 0xcf, 0xe2, 0xf1, 0xaa, 0x36, 0xf4, 0xc8, 0x19, 0x02, 0xc3, 0x52, 0xfe, 0x39, 0x39, 0xfb, 0x0b, 0x95, 0x00, 0x22, 0xe2, 0xf6, 0x2c, 0x5a, 0xf7, 0x83, 0x69, 0x01, 0x65, 0xd7, 0xf8, 0x86, 0xcf, 0xfd, 0x1e, 0xf2, 0x00, 0x41, 0x57, 0xfe, 0x40, 0xc1, 0x00, 0xc8, 0x87, 0xfd, 0x14, 0xdd, 0xfc, 0x07, 0x6e, 0xfe, 0xca, 0x48, 0xfd, 0x7e, 0x68, 0xfb, 0x5c, 0xb8, 0xfe, 0x85, 0x87, 0xfb, 0x51, 0xdb, 0xfc, 0xa7, 0xdf, 0xff, 0x93, 0x95, 0xff, 0x07, 0xd4, 0xff, 0x59, 0x38, 0xff, 0x7e, 0xcb, 0x2e, 0x0a, 0xa8, 0x25, 0x8a, 0x50, 0x07, 0x9c, 0x9b, 0x19, 0x11, 0xc3, 0x05, 0xb2, 0xb6, 0xfc, 0x7a, 0x4e, 0xf3, 0x82, 0xad, 0xf5, 0xdc, 0x43, 0x06, 0x88, 0x68, 0xf9, 0x5f, 0x14, 0xf7, 0xb0, 0xc8, 0x03, 0x3f, 0x2a, 0xf8, 0xc3, 0xea, 0xf5, 0xf3, 0xf4, 0x01, 0x64, 0xb6, 0xf5, 0xe6, 0x49, 0xfd, 0xe4, 0x9d, 0x02, 0x12, 0xda, 0xfb, 0x19, 0x00, 0x03, 0x00, 0x25, 0xfe, 0x1d, 0x2d, 0xfc, 0xbe, 0xbc, 0xfe, 0xce, 0xb8, 0xfd, 0xd6, 0x9f, 0xfb, 0xe7, 0x09, 0xfe, 0x54, 0x97, 0xfb, 0xfb, 0x39, 0xfd, 0x8f, 0xea, 0xff, 0xfb, 0xd9, 0xfe, 0x22, 0xd7, 0xff, 0xe5, 0xdc, 0xfe, 0xa2, 0x91, 0x33, 0x41, 0x27, 0x26, 0x42, 0x9f, 0x00, 0xc6, 0xc0, 0x1d, 0xf5, 0xff, 0x05, 0x24, 0xcb, 0xf9, 0x1f, 0xdf, 0xf5, 0x32, 0xc4, 0xf7, 0xfb, 0x94, 0x0a, 0x1a, 0x21, 0xf6, 0x1b, 0x82, 0xf0, 0x25, 0x87, 0x05, 0x92, 0x17, 0xfb, 0xc3, 0x13, 0xf6, 0x93, 0x8c, 0xff, 0x30, 0x17, 0xf4, 0x8e, 0x90, 0xfd, 0x03, 0x94, 0x01, 0xdf, 0x35, 0xfb, 0x17, 0x41, 0x04, 0x02, 0xfd, 0xfe, 0xda, 0x79, 0xfb, 0xf2, 0xa9, 0xfe, 0x12, 0x4f, 0xfe, 0x5e, 0xab, 0xfb, 0x55, 0x29, 0xfe, 0x10, 0x5d, 0xfb, 0xf7, 0xd1, 0xfc, 0xd5, 0x50, 0x00, 0x99, 0xd7, 0xfe, 0x21, 0x53, 0xff, 0x72, 0x44, 0xfe, 0x84, 0xaf, 0x39, 0xb1, 0x73, 0x27, 0x73, 0xbd, 0xf8, 0x93, 0x47, 0x1f, 0x45, 0xb8, 0x07, 0x74, 0x79, 0xf6, 0x20, 0xc0, 0xf7, 0xff, 0xa9, 0xfa, 0x6d, 0xe3, 0x0e, 0x19, 0x18, 0xf5, 0xa3, 0xab, 0xe8, 0xd9, 0xc6, 0x04, 0xea, 0xb5, 0x00, 0xed, 0x8f, 0xf4, 0xed, 0x51, 0xfe, 0x5a, 0xac, 0xf3, 0xb8, 0x6f, 0xfb, 0xb2, 0xed, 0x02, 0xa3, 0xb2, 0xf9, 0xed, 0xb2, 0x04, 0x16, 0x61, 0x00, 0x9b, 0xbd, 0xfa, 0x73, 0xc7, 0xfe, 0x01, 0x45, 0xfe, 0xb7, 0xa6, 0xfb, 0x66, 0xe0, 0xfe, 0x00, 0x8c, 0xfb, 0x75, 0xe1, 0xfb, 0xf7, 0x0f, 0x01, 0x2f, 0xc9, 0xfe, 0x59, 0xd0, 0xfe, 0xa0, 0xa8, 0xfd, 0xd6, 0x68, 0x41, 0xa5, 0xab, 0x2c, 0x26, 0xea, 0xed, 0x12, 0x01, 0x1a, 0x6a, 0xe0, 0x0b, 0x91, 0x6a, 0xf7, 0x40, 0xec, 0xf9, 0x38, 0xdc, 0xfa, 0xf8, 0x6c, 0x11, 0x85, 0x20, 0xf8, 0xe2, 0xa2, 0xe1, 0xb1, 0x63, 0x02, 0x5f, 0x4c, 0x05, 0x23, 0x72, 0xf4, 0xb3, 0xb5, 0xfd, 0xad, 0x7c, 0xf2, 0xf1, 0x1e, 0xfb, 0xdd, 0x80, 0x03, 0x13, 0x5a, 0xf9, 0xa8, 0x33, 0x04, 0x29, 0x0d, 0x01, 0x11, 0x97, 0xfb, 0x59, 0x55, 0xfe, 0xf2, 0xe0, 0xfd, 0xaa, 0x74, 0xfb, 0x35, 0xda, 0xff, 0x65, 0x56, 0xfc, 0xfb, 0x8c, 0xfb, 0xcb, 0xb7, 0x00, 0xd6, 0x36, 0xff, 0x8c, 0x95, 0xfe, 0x38, 0x0c, 0xfd, 0x2f, 0x25, 0x49, 0x24, 0x5b, 0x32, 0xf0, 0x2d, 0xe3, 0x06, 0xf4, 0x11, 0xca, 0xfa, 0x0f, 0x7c, 0x72, 0xfa, 0x24, 0xbe, 0xfb, 0x8f, 0xf5, 0xf9, 0x30, 0x5f, 0x12, 0xc5, 0xe6, 0xfb, 0xd1, 0x50, 0xdd, 0x54, 0xc7, 0xfd, 0xf0, 0xa4, 0x07, 0xdb, 0xcf, 0xf6, 0x8b, 0x60, 0xfc, 0x35, 0x02, 0xf2, 0xde, 0x95, 0xfa, 0x5b, 0x41, 0x03, 0xa2, 0xbd, 0xf9, 0x5c, 0x77, 0x03, 0xe8, 0x9c, 0x01, 0xe1, 0xcb, 0xfb, 0x2c, 0x90, 0xfd, 0x76, 0x6a, 0xfd, 0xb5, 0xcf, 0xfb, 0x51, 0x20, 0x00, 0xc4, 0xb9, 0xfc, 0xab, 0x6e, 0xfb, 0xfd, 0x27, 0x00, 0x96, 0xf3, 0xff, 0x16, 0xa8, 0xfe, 0x41, 0x02, 0xfc, 0xa8, 0x89, 0x50, 0xc7, 0xe8, 0x37, 0x29, 0x9c, 0xd9, 0x35, 0x94, 0x09, 0x64, 0x9b, 0x12, 0xf6, 0x49, 0xff, 0xd2, 0x85, 0xfd, 0xf6, 0xc5, 0xf8, 0x9b, 0x88, 0x12, 0x90, 0x1d, 0x00, 0x89, 0x32, 0xdb, 0x30, 0x8a, 0xf8, 0x04, 0x36, 0x08, 0x8d, 0x74, 0xfa, 0x84, 0xbe, 0xfb, 0x0d, 0x57, 0xf1, 0x12, 0x0c, 0xfb, 0x1a, 0x2f, 0x02, 0xf9, 0xff, 0xf9, 0xca, 0x9e, 0x03, 0x3f, 0x87, 0x01, 0x7f, 0xa9, 0xfb, 0x1a, 0x5b, 0xfd, 0x4f, 0x2c, 0xfd, 0xb6, 0x0b, 0xfc, 0x1d, 0xf3, 0xff, 0xe3, 0x8a, 0xfc, 0xda, 0x1b, 0xfc, 0xdb, 0x00, 0x00, 0x3f, 0x6b, 0x00, 0x6f, 0x5c, 0xfe, 0x0f, 0x30, 0xfb, 0x63, 0xba, 0x59, 0x6d, 0x5c, 0x39, 0xe8, 0x5c, 0xd1, 0x23, 0xcf, 0x03, 0x71, 0x52, 0x12, 0x85, 0x81, 0x04, 0x5c, 0x43, 0xfe, 0xdd, 0xcc, 0xf6, 0x01, 0x17, 0x14, 0x6b, 0x13, 0x04, 0xff, 0x44, 0xd8, 0xa2, 0xf0, 0xf3, 0x14, 0x6e, 0x08, 0x1b, 0xed, 0xfc, 0x19, 0xd5, 0xfc, 0xed, 0x41, 0xf0, 0xb2, 0x10, 0xfc, 0x40, 0x0a, 0x00, 0x3c, 0xb1, 0xf9, 0x25, 0xe2, 0x04, 0xa5, 0xa1, 0x00, 0x81, 0x35, 0xfb, 0x80, 0x68, 0xfd, 0x4e, 0x3f, 0xfd, 0xb5, 0xfe, 0xfa, 0xec, 0xe2, 0xff, 0x18, 0x6e, 0xfc, 0xf9, 0xdd, 0xfc, 0xf4, 0xa2, 0xff, 0x4a, 0x21, 0x00, 0xbf, 0x77, 0xfe, 0xfd, 0xd8, 0xfa, 0x3e, 0xb3, 0x61, 0x4a, 0xdf, 0x3a, 0x68, 0xa3, 0xca, 0xfb, 0xf8, 0x00, 0x68, 0x79, 0x10, 0xf1, 0xba, 0x08, 0x50, 0xd1, 0xfe, 0xeb, 0x2a, 0xf4, 0x60, 0xc9, 0x18, 0xbf, 0x8f, 0x08, 0x05, 0xb1, 0xd3, 0x81, 0xfd, 0xf0, 0xa3, 0xf2, 0x08, 0x07, 0xc0, 0xfd, 0x7f, 0x8f, 0x00, 0x4f, 0x19, 0xf0, 0x58, 0x44, 0xfb, 0x4b, 0x85, 0xfe, 0x90, 0xe5, 0xf9, 0xa9, 0x28, 0x06, 0xf5, 0x6b, 0xff, 0xa3, 0x42, 0xfb, 0xdd, 0x15, 0xfe, 0x2a, 0x25, 0xfd, 0x23, 0x75, 0xf9, 0xc2, 0x5f, 0x00, 0xb9, 0xb8, 0xfc, 0xbe, 0xd7, 0xfc, 0x99, 0x88, 0xff, 0x28, 0x21, 0x00, 0xd6, 0x00, 0xff, 0x88, 0x6f, 0xfa, 0xe6, 0x91, 0x68, 0x66, 0x90, 0x3b, 0x6f, 0xf2, 0xc4, 0xad, 0xae, 0x00, 0xb3, 0xd1, 0x0c, 0x86, 0xb5, 0x0a, 0x3e, 0xc7, 0xfe, 0xdd, 0x7b, 0xf0, 0x0d, 0x44, 0x20, 0x5b, 0xd0, 0x0a, 0x6e, 0xd7, 0xce, 0x8f, 0x2b, 0xf0, 0xe7, 0xdc, 0x06, 0x52, 0xb5, 0xfe, 0x96, 0xe9, 0x04, 0xbf, 0x15, 0xf0, 0x47, 0x21, 0xf9, 0x47, 0xb2, 0xfd, 0xec, 0x4e, 0xfa, 0xa3, 0xcc, 0x05, 0x93, 0x54, 0xfe, 0x6f, 0xa9, 0xfb, 0xa2, 0xe1, 0xfe, 0x21, 0x70, 0xfc, 0xdd, 0x14, 0xf8, 0x63, 0x2f, 0x00, 0xff, 0x0a, 0xfd, 0xaa, 0xa7, 0xfc, 0x1c, 0x4d, 0xff, 0xdb, 0x57, 0x00, 0x2a, 0xd1, 0xfe, 0xa2, 0x46, 0xfa, 0xa7, 0x6a, 0x6e, 0x36, 0x1e, 0x3c, 0x98, 0xb0, 0xc0, 0x21, 0x1e, 0x02, 0x72, 0x77, 0x08, 0xd7, 0x18, 0x0b, 0xa4, 0x30, 0xfe, 0x47, 0x21, 0xed, 0x9e, 0x80, 0x28, 0x05, 0x81, 0x0b, 0x73, 0x79, 0xcc, 0x3c, 0xd8, 0xef, 0xb4, 0x4b, 0x03, 0x9f, 0x5a, 0x00, 0xaa, 0x8a, 0x08, 0xee, 0xe5, 0xf0, 0x6e, 0xc8, 0xf6, 0x44, 0x04, 0xfe, 0x98, 0x21, 0xfa, 0x64, 0x07, 0x04, 0xeb, 0x52, 0xfe, 0x5e, 0x63, 0xfc, 0x30, 0x78, 0xff, 0x59, 0x94, 0xfb, 0xdf, 0x08, 0xf7, 0x85, 0xb9, 0xff, 0xfe, 0x9f, 0xfd, 0x45, 0x63, 0xfc, 0x3e, 0x4a, 0xff, 0x15, 0x2a, 0x00, 0x43, 0xb1, 0xfe, 0x2a, 0xd7, 0xfa, 0x95, 0x77, 0x74, 0xc7, 0xc6, 0x3b, 0x61, 0xf9, 0xbd, 0x69, 0x13, 0x04, 0x39, 0xda, 0x03, 0x76, 0x74, 0x0b, 0xa7, 0x81, 0xfc, 0xa2, 0x06, 0xeb, 0xd6, 0x3a, 0x2f, 0x54, 0xcf, 0x0b, 0xe5, 0x5a, 0xcd, 0x38, 0x9e, 0xee, 0x68, 0x25, 0x00, 0x18, 0x68, 0x01, 0xb3, 0xb7, 0x0b, 0x01, 0x71, 0xf2, 0x1e, 0xf1, 0xf4, 0xc1, 0x13, 0xff, 0x65, 0x42, 0xf9, 0x39, 0x91, 0x01, 0x33, 0x0e, 0xff, 0xa3, 0xc7, 0xfd, 0x86, 0x35, 0xff, 0x80, 0xe2, 0xfa, 0xf9, 0x71, 0xf6, 0xaf, 0x85, 0xff, 0x01, 0x3f, 0xfe, 0xb4, 0x19, 0xfc, 0xcc, 0x04, 0xff, 0xd0, 0x7c, 0x00, 0xff, 0xf0, 0xfe, 0xbf, 0x9b, 0xfa, 0xdf, 0xf0, 0x77, 0xae, 0xf5, 0x3d, 0xbc, 0x9f, 0xbb, 0x4a, 0xc8, 0x04, 0xae, 0xdc, 0xff, 0xb9, 0x8e, 0x0b, 0x1b, 0x5c, 0xfa, 0x22, 0x36, 0xe9, 0xaf, 0x41, 0x32, 0x78, 0x8a, 0x0d, 0x94, 0xaf, 0xd0, 0x87, 0xf8, 0xeb, 0x3d, 0x90, 0xfd, 0xff, 0x08, 0x01, 0x4b, 0x79, 0x0e, 0xd7, 0x58, 0xf4, 0x6c, 0x4c, 0xf3, 0xb2, 0x78, 0x00, 0x42, 0xa1, 0xf7, 0x61, 0xd6, 0xfe, 0x45, 0xe6, 0xff, 0x61, 0x52, 0xff, 0x64, 0x0c, 0xfe, 0xab, 0xa9, 0xfa, 0x4f, 0xca, 0xf5, 0x2c, 0x94, 0xff, 0x44, 0xf4, 0xfe, 0xa0, 0xe7, 0xfa, 0x5f, 0x3b, 0xff, 0x60, 0x2e, 0x01, 0x8a, 0x78, 0xfe, 0x3e, 0xcf, 0xf9, 0xd0, 0x81, 0x7b, 0x0f, 0x5b, 0x3f, 0x89, 0xe2, 0xba, 0x47, 0x48, 0x04, 0xd4, 0x59, 0xfc, 0xa5, 0x4a, 0x0c, 0xfb, 0x3b, 0xf7, 0xf2, 0x2e, 0xe8, 0xea, 0xd4, 0x32, 0x71, 0xb5, 0x0f, 0x40, 0x95, 0xd5, 0x7b, 0x2c, 0xe9, 0xf1, 0x9c, 0xfb, 0x27, 0x8e, 0xff, 0xa0, 0x4d, 0x11, 0x0d, 0x00, 0xf6, 0x47, 0x64, 0xf2, 0xeb, 0xaf, 0x01, 0x0b, 0x01, 0xf6, 0xaa, 0x57, 0xfc, 0x0b, 0xb1, 0x00, 0xbf, 0x49, 0x00, 0xbe, 0x1d, 0xfd, 0x8d, 0xe5, 0xfa, 0x42, 0xae, 0xf4, 0xc9, 0x6a, 0x00, 0x00, 0x15, 0xff, 0x0b, 0xed, 0xf9, 0x49, 0x18, 0x00, 0x36, 0x05, 0x01, 0x5f, 0xc4, 0xfd, 0x10, 0x79, 0xf9, 0x3e, 0x60, 0x7e, 0xc1, 0x62, 0x40, 0x06, 0xc9, 0xbb, 0xca, 0xeb, 0x02, 0x3d, 0x96, 0xf9, 0x07, 0xca, 0x0c, 0x16, 0x6c, 0xf4, 0xa5, 0x05, 0xe7, 0xcc, 0x07, 0x31, 0x70, 0xfe, 0x12, 0x34, 0xbd, 0xda, 0x6f, 0x08, 0xe7, 0x73, 0x2d, 0xfa, 0xf9, 0x68, 0xfd, 0x36, 0xb1, 0x13, 0x3e, 0x76, 0xf7, 0x48, 0x3b, 0xf2, 0x61, 0x1d, 0x02, 0xe3, 0xea, 0xf4, 0x7a, 0x6f, 0xfa, 0x8b, 0xfa, 0x00, 0xdb, 0xae, 0x00, 0x17, 0x86, 0xfc, 0xcd, 0x8a, 0xfb, 0x74, 0xde, 0xf3, 0x6d, 0x9b, 0x00, 0x49, 0x33, 0xff, 0x18, 0x08, 0xfa, 0x24, 0x0c, 0x00, 0xec, 0x3e, 0x00, 0x21, 0x7b, 0xfd, 0xcc, 0x42, 0xf9, 0x90, 0xbb, 0x7e, 0xec, 0xb4, 0x43, 0xe6, 0x92, 0xbd, 0xde, 0xbe, 0x00, 0xb2, 0x9d, 0xf7, 0x01, 0xc7, 0x0b, 0x5b, 0x65, 0xf4, 0x91, 0xa1, 0xe3, 0x20, 0x45, 0x2d, 0x21, 0x60, 0x18, 0xfa, 0x2b, 0xdf, 0x03, 0x44, 0xe6, 0x03, 0x9e, 0xf8, 0x54, 0x52, 0xfb, 0xaf, 0x0c, 0x15, 0xb9, 0x2e, 0xf9, 0xf9, 0xc4, 0xf2, 0x71, 0x76, 0x01, 0x1b, 0x5e, 0xf4, 0x07, 0x5a, 0xf9, 0xb3, 0xaf, 0x00, 0x5d, 0x8e, 0x00, 0xe6, 0x29, 0xfc, 0x03, 0xb0, 0xfc, 0x79, 0x76, 0xf3, 0x69, 0xa1, 0xff, 0x3c, 0x0c, 0x00, 0x40, 0x13, 0xfa, 0x01, 0x46, 0xff, 0xa6, 0xc8, 0xff, 0x52, 0x00, 0xfd, 0xf2, 0xda, 0xf9, 0x98, 0x94, 0x7c, 0xe1, 0x64, 0x48, 0x0f, 0x08, 0xc1, 0x61, 0xc3, 0xfe, 0x84, 0xbc, 0xf5, 0x80, 0x1f, 0x09, 0x14, 0x60, 0xf7, 0xe7, 0xb8, 0xdd, 0x3d, 0x45, 0x28, 0x15, 0x6e, 0x1f, 0xe1, 0xac, 0xe2, 0x7d, 0x39, 0xe7, 0xd6, 0xf1, 0xf6, 0x86, 0x26, 0xf9, 0x1b, 0x23, 0x15, 0xfb, 0x80, 0xfb, 0xf1, 0x0e, 0xf4, 0x09, 0xd3, 0xff, 0x30, 0x16, 0xf4, 0xc5, 0xfe, 0xf8, 0xd4, 0x8a, 0x00, 0x86, 0x6a, 0xff, 0xd1, 0x8a, 0xfc, 0xb3, 0xc2, 0xfd, 0x03, 0x35, 0xf3, 0xde, 0xd1, 0xfe, 0xe3, 0xcc, 0xff, 0x8e, 0x62, 0xfa, 0xae, 0x9c, 0xfe, 0xd9, 0x1b, 0xff, 0xff, 0x5f, 0xfd, 0x0e, 0x56, 0xfb, 0xb2, 0x45, 0x78, 0x8f, 0x78, 0x4d, 0x18, 0x59, 0xc6, 0x54, 0xb3, 0xfd, 0x4f, 0x9b, 0xf3, 0x98, 0xa4, 0x05, 0x3f, 0xfb, 0xfb, 0xdb, 0xd8, 0xd5, 0x8f, 0xa2, 0x22, 0x0f, 0x60, 0x27, 0xe7, 0xbe, 0xe5, 0x63, 0x2e, 0xe9, 0x7f, 0x45, 0xf6, 0x9f, 0x82, 0xf6, 0x9d, 0xfd, 0x13, 0xc0, 0xb8, 0xfe, 0x08, 0x95, 0xf5, 0x4f, 0xb8, 0xfd, 0x90, 0xaa, 0xf3, 0xcb, 0xc6, 0xf9, 0xf4, 0x30, 0x00, 0x3f, 0xd3, 0xfd, 0xbf, 0x36, 0xfd, 0xc2, 0x99, 0xfe, 0xd9, 0x3d, 0xf3, 0x56, 0x7e, 0xfd, 0xe8, 0x7b, 0xff, 0x52, 0x80, 0xfa, 0x0f, 0x08, 0xfe, 0x75, 0x94, 0xff, 0x23, 0x50, 0xfe, 0x47, 0x3d, 0xfc, 0x55, 0x13, 0x72, 0x52, 0xdc, 0x51, 0x8f, 0x24, 0xce, 0xc8, 0x52, 0xfd, 0xa3, 0xce, 0xf0, 0xff, 0x69, 0x02, 0x87, 0x7b, 0x00, 0x2a, 0xe8, 0xcd, 0xf6, 0x9a, 0x1b, 0x31, 0xe5, 0x2e, 0x52, 0x5b, 0xe9, 0x37, 0x83, 0xeb, 0x6c, 0x54, 0xf7, 0x66, 0xc3, 0xf2, 0x42, 0xa9, 0x11, 0x3e, 0xb4, 0x02, 0xc8, 0xb7, 0xf6, 0x5b, 0x92, 0xfb, 0x59, 0x0a, 0xf4, 0x06, 0x06, 0xfa, 0x80, 0x2d, 0x00, 0x2b, 0x50, 0xfc, 0xda, 0x0b, 0xfd, 0x9b, 0xaa, 0xff, 0x3b, 0x7c, 0xf2, 0x5e, 0xf4, 0xfc, 0x55, 0x66, 0xfe, 0x6d, 0x65, 0xfa, 0xab, 0x1e, 0xff, 0xd0, 0x0d, 0x00, 0x64, 0xf9, 0xfe, 0x36, 0x5a, 0xfd, 0x68, 0xea, 0x6a, 0x79, 0xae, 0x55, 0x56, 0xc8, 0xd7, 0x7c, 0x0c, 0xfd, 0x3d, 0xc4, 0xed, 0x3b, 0x77, 0x00, 0x95, 0x0f, 0x04, 0x77, 0x56, 0xc8, 0xb0, 0x3b, 0x12, 0x06, 0xc5, 0x34, 0x15, 0x6b, 0xef, 0x54, 0xde, 0xec, 0x70, 0x5f, 0xfb, 0xb7, 0xd7, 0xed, 0x7c, 0xbe, 0x0e, 0xa0, 0x02, 0x07, 0xf9, 0x16, 0xf7, 0xa0, 0x41, 0xfb, 0x0f, 0x31, 0xf4, 0x68, 0x01, 0xfa, 0x34, 0x40, 0x00, 0x2f, 0x06, 0xfc, 0x37, 0xaa, 0xfa, 0xb3, 0xd8, 0x00, 0xc6, 0x22, 0xf3, 0x61, 0xe0, 0xfa, 0xed, 0x88, 0xfe, 0x7e, 0x17, 0xfb, 0x70, 0x3a, 0x00, 0x98, 0x98, 0x00, 0x91, 0x4a, 0x00, 0xa5, 0xd9, 0xfd, 0x6c, 0x46, 0x64, 0x45, 0x05, 0x58, 0xca, 0x48, 0xe0, 0xfc, 0x21, 0xfd, 0x54, 0xd5, 0xec, 0x7a, 0xa4, 0xfd, 0x51, 0xa3, 0x04, 0xe0, 0xda, 0xc7, 0xda, 0x01, 0x07, 0xbd, 0x48, 0x36, 0x98, 0x3e, 0xf9, 0x10, 0x66, 0xec, 0x43, 0x48, 0x00, 0x10, 0x38, 0xea, 0x2b, 0x9e, 0x09, 0xa4, 0x05, 0x0c, 0x1c, 0xc8, 0xf6, 0xef, 0xe9, 0xfb, 0x26, 0xae, 0xf4, 0x39, 0x64, 0xf8, 0xf7, 0xce, 0x00, 0xf9, 0x9d, 0xfb, 0x5e, 0xb5, 0xf7, 0x6f, 0x6c, 0x01, 0x03, 0x68, 0xf3, 0x85, 0x33, 0xfa, 0xf2, 0x95, 0xff, 0x81, 0xba, 0xfa, 0x5f, 0xac, 0x01, 0x0c, 0x02, 0x02, 0xf0, 0x47, 0x00, 0xd9, 0x0f, 0xfd, 0x18, 0x7e, 0x5f, 0x5b, 0x6b, 0x58, 0x40, 0x09, 0xe5, 0x75, 0x48, 0xfe, 0xf6, 0x22, 0xf0, 0xbe, 0x7f, 0xf8, 0x28, 0x02, 0x01, 0x93, 0x50, 0xcc, 0x2b, 0x66, 0xfc, 0x7c, 0x92, 0x33, 0xcd, 0x51, 0x04, 0xf5, 0xbe, 0xeb, 0x8f, 0xd8, 0x03, 0x6d, 0xdc, 0xe8, 0xb0, 0x8a, 0x03, 0xb5, 0x23, 0x10, 0xad, 0xa2, 0xf7, 0x70, 0xeb, 0xfb, 0x83, 0x27, 0xf6, 0xab, 0x54, 0xf5, 0x83, 0x57, 0xff, 0xe1, 0x4e, 0xfd, 0x68, 0x6d, 0xf4, 0xf1, 0xa8, 0xff, 0x90, 0xbf, 0xf5, 0x06, 0x2f, 0xfa, 0x85, 0x5d, 0x00, 0x52, 0x9c, 0xfa, 0xb2, 0xc5, 0x02, 0x22, 0xa3, 0x02, 0x78, 0xb2, 0xff, 0xc1, 0xd7, 0xfc, 0x1b, 0xe4, 0x5d, 0xc4, 0x8f, 0x54, 0xf4, 0xcf, 0xe7, 0x47, 0x56, 0x02, 0x0c, 0x46, 0xf4, 0xcb, 0x20, 0xf4, 0xc9, 0xa3, 0xfa, 0x16, 0xb4, 0xd2, 0xb7, 0x64, 0xf4, 0x3f, 0x81, 0x30, 0xb7, 0x26, 0x0c, 0x90, 0x40, 0xec, 0x3a, 0x8c, 0x07, 0xbd, 0xba, 0xe6, 0x3e, 0x69, 0x00, 0xef, 0x26, 0x12, 0xfd, 0x91, 0xf9, 0x05, 0xd1, 0xfc, 0x79, 0x54, 0xf6, 0xbf, 0x4a, 0xf2, 0x05, 0x93, 0xfe, 0x7a, 0x5f, 0xfd, 0x10, 0xe0, 0xf1, 0xc7, 0x43, 0x00, 0x82, 0xa9, 0xf6, 0xf5, 0xff, 0xfa, 0x6a, 0x5e, 0x01, 0x2c, 0x45, 0xfa, 0x8c, 0x79, 0x03, 0x5f, 0xce, 0x02, 0x28, 0x39, 0xff, 0x50, 0xa1, 0xfc, 0x9b, 0xc2, 0x5c, 0x4b, 0x10, 0x50, 0x25, 0xc4, 0xe8, 0x37, 0xa4, 0x07, 0x4a, 0x81, 0xf8, 0xf2, 0x15, 0xef, 0x32, 0x4a, 0xf5, 0x7d, 0xbe, 0xda, 0x55, 0x2d, 0xec, 0x25, 0x08, 0x2d, 0x6a, 0x1f, 0x14, 0xb4, 0x5f, 0xe9, 0x48, 0x8a, 0x0c, 0x13, 0xf1, 0xe6, 0xdc, 0xc3, 0xfb, 0xca, 0xa0, 0x15, 0x2e, 0x23, 0xfb, 0xc8, 0x88, 0xfc, 0x97, 0xce, 0xf6, 0x1b, 0xb8, 0xf1, 0xae, 0x65, 0xfb, 0xa0, 0xc0, 0xfc, 0xba, 0x36, 0xf1, 0x62, 0x01, 0x01, 0x70, 0xd5, 0xf8, 0x84, 0xc3, 0xf9, 0x63, 0x2e, 0x02, 0x48, 0xfe, 0xfa, 0x04, 0xb1, 0x03, 0x2c, 0x05, 0x02, 0xb4, 0xd0, 0xfe, 0xf1, 0xc6, 0xfd, 0xbb, 0x98, 0x5d, 0x82, 0x0e, 0x4b, 0x87, 0xd6, 0xe6, 0x92, 0xfb, 0x0b, 0x1f, 0x06, 0xfc, 0xb7, 0xfc, 0xea, 0x56, 0x1a, 0xf2, 0x03, 0x3c, 0xe4, 0xe5, 0x40, 0xe7, 0xe1, 0x8c, 0x24, 0x82, 0xec, 0x1c, 0x04, 0x3f, 0xe5, 0xc0, 0x6d, 0x0d, 0xe6, 0x1d, 0xee, 0x94, 0x08, 0xf4, 0x76, 0xf3, 0x19, 0xc8, 0xc2, 0xfc, 0x02, 0x81, 0xf9, 0x5c, 0x5e, 0xfa, 0xf8, 0xd8, 0xf0, 0x77, 0x56, 0xf8, 0x89, 0x53, 0xfc, 0x42, 0xe2, 0xf0, 0x74, 0x2e, 0x01, 0xdf, 0x4c, 0xfc, 0xdf, 0x39, 0xf7, 0x23, 0x61, 0x02, 0x80, 0xac, 0xfc, 0x3a, 0x0a, 0x02, 0x8d, 0xb7, 0x02, 0x60, 0x99, 0xfe, 0x62, 0x24, 0xfe, 0x1b, 0x0b, 0x5c, 0xd1, 0x91, 0x47, 0xbd, 0x66, 0xe5, 0x5c, 0x82, 0x10, 0xa1, 0x97, 0xfe, 0x3a, 0x2c, 0xe8, 0xa1, 0x6e, 0xf0, 0xda, 0x2b, 0xea, 0xd3, 0x4a, 0xe5, 0xa0, 0xf2, 0x1a, 0xf4, 0x06, 0x25, 0xe3, 0x8f, 0xe5, 0xed, 0x65, 0x07, 0xc7, 0xb6, 0xf7, 0x91, 0xdc, 0xee, 0x67, 0x2f, 0x19, 0x07, 0x5b, 0x03, 0x83, 0x5d, 0xf5, 0xe0, 0xf9, 0xfb, 0x2c, 0x57, 0xf2, 0xe8, 0x56, 0xf6, 0x84, 0x20, 0xfc, 0x53, 0x01, 0xf0, 0x74, 0x74, 0x00, 0xcc, 0x98, 0xfe, 0x4d, 0x99, 0xf6, 0xda, 0x2a, 0x01, 0xf0, 0x94, 0xfd, 0x2b, 0x3f, 0x01, 0xce, 0x39, 0x03, 0x68, 0x56, 0xff, 0x01, 0xa8, 0xfd, 0xec, 0x6b, 0x5a, 0xb0, 0xf1, 0x41, 0xd1, 0x0a, 0xe5, 0x07, 0x3d, 0x16, 0x00, 0xfe, 0xfd, 0x52, 0x5f, 0xe7, 0x04, 0x75, 0xf2, 0x6b, 0xe7, 0xeb, 0x11, 0xd7, 0xe3, 0x83, 0xca, 0x14, 0x9e, 0x0f, 0x29, 0x18, 0x12, 0xe7, 0x6d, 0x75, 0x02, 0xab, 0x18, 0xfb, 0x46, 0xd9, 0xef, 0xac, 0x70, 0x17, 0x89, 0xe3, 0x06, 0x56, 0xc3, 0xf4, 0xb2, 0xb3, 0xfb, 0xd6, 0xf1, 0xf4, 0x7c, 0xe1, 0xf4, 0xdb, 0x8c, 0xfd, 0xa9, 0x59, 0xef, 0xeb, 0x7f, 0xfc, 0xb1, 0xb3, 0xff, 0x0f, 0xbf, 0xf7, 0x76, 0xc6, 0x00, 0xcf, 0x53, 0xfd, 0xd6, 0x90, 0x00, 0xc2, 0x41, 0x03, 0xe0, 0xe3, 0xff, 0x9c, 0x07, 0xfe, 0xf6, 0xb6, 0x58, 0x39, 0x89, 0x3d, 0x56, 0xda, 0xe3, 0x4a, 0xc3, 0x1a, 0xdd, 0xc3, 0xfb, 0x6c, 0x53, 0xe5, 0x0c, 0x89, 0xf8, 0xf9, 0xc2, 0xef, 0xe4, 0x4f, 0xe0, 0xee, 0x7b, 0x0d, 0xd8, 0x35, 0x2e, 0x86, 0xdf, 0xe6, 0xbf, 0xa8, 0xfc, 0xb6, 0x62, 0x02, 0x67, 0x2d, 0xee, 0x8b, 0xe1, 0x13, 0x7e, 0x9d, 0x0b, 0xb3, 0x54, 0xf5, 0x34, 0x7e, 0xfb, 0xf5, 0x6d, 0xf6, 0xd5, 0x8e, 0xf4, 0x61, 0xb4, 0xff, 0x05, 0x47, 0xf0, 0xf1, 0x23, 0xf6, 0x6c, 0xa7, 0xfe, 0xf7, 0xee, 0xf9, 0x58, 0x49, 0x01, 0x86, 0xc2, 0xfe, 0x23, 0xc9, 0xfd, 0x55, 0xf5, 0x01, 0xf2, 0x0e, 0x02, 0xd9, 0x5d, 0xff, 0xda, 0x8b, 0x55, 0xd2, 0xab, 0x3b, 0xf8, 0x18, 0xdf, 0x23, 0x6e, 0x1f, 0x17, 0x25, 0xff, 0x5e, 0x12, 0xe0, 0x57, 0x6c, 0xfd, 0x7b, 0xcc, 0xf4, 0xea, 0x8d, 0xdf, 0xec, 0x1d, 0x03, 0xde, 0x1f, 0x31, 0xc6, 0x45, 0xec, 0x40, 0x82, 0xf4, 0x01, 0x37, 0x09, 0x65, 0xab, 0xee, 0x74, 0xa2, 0x0b, 0x86, 0x7f, 0x12, 0x0a, 0x5f, 0xf7, 0x5f, 0x25, 0xfa, 0x3b, 0x9b, 0xf9, 0x6e, 0x79, 0xf2, 0xc7, 0x5d, 0x02, 0xbf, 0xa9, 0xf2, 0x6f, 0xcb, 0xef, 0xc0, 0x1b, 0xfd, 0x7f, 0x32, 0xfb, 0x03, 0xe8, 0x00, 0x5c, 0xb8, 0x01, 0xa8, 0x67, 0xfc, 0xdb, 0xa1, 0xfe, 0x1e, 0x63, 0x04, 0x9b, 0xcd, 0x00, 0xa8, 0x5b, 0x53, 0x7b, 0x13, 0x37, 0xfc, 0x48, 0xdd, 0x27, 0x5e, 0x22, 0xdb, 0x35, 0x03, 0x05, 0x90, 0xdf, 0x92, 0x95, 0xfb, 0x01, 0xe8, 0xfb, 0xe9, 0x17, 0xe2, 0x89, 0x42, 0xf7, 0x5f, 0xec, 0x32, 0xd3, 0x91, 0xf2, 0x06, 0x41, 0xef, 0xea, 0xb6, 0x0c, 0x4e, 0x4c, 0xf1, 0xc6, 0xca, 0x04, 0xe8, 0xc8, 0x13, 0x84, 0xe7, 0xfc, 0xee, 0x3d, 0xfa, 0xa7, 0xfb, 0xfa, 0x4c, 0x3d, 0xf3, 0x42, 0xc7, 0x01, 0xec, 0x79, 0xf4, 0x42, 0xb0, 0xee, 0x51, 0x8c, 0xfb, 0x7a, 0xf8, 0xf9, 0xe5, 0x2d, 0x00, 0x73, 0x0d, 0x04, 0xb4, 0x2e, 0xfd, 0x29, 0x86, 0xfd, 0xe1, 0x72, 0x03, 0xea, 0x65, 0x01, 0xc6, 0x87, 0x4f, 0x69, 0x9c, 0x31, 0x22, 0xb3, 0xdd, 0x4f, 0xfc, 0x25, 0x73, 0xc6, 0x03, 0x3b, 0x8a, 0xe0, 0x96, 0x63, 0xfd, 0xf5, 0x79, 0xfc, 0xd7, 0x66, 0xe4, 0xb0, 0x75, 0xf3, 0xd1, 0xd1, 0x2e, 0x30, 0x0e, 0xf6, 0xd9, 0x13, 0xef, 0x18, 0xc6, 0x0e, 0xe1, 0xaa, 0xf2, 0xcc, 0xc7, 0xff, 0xce, 0x00, 0x13, 0xea, 0xaa, 0xff, 0xe2, 0x9b, 0xfc, 0xa1, 0xd7, 0xfb, 0xd9, 0x94, 0xf4, 0xd4, 0x25, 0x00, 0x51, 0x5c, 0xf4, 0x81, 0xd4, 0xf0, 0xf9, 0x0c, 0xfb, 0x55, 0xd5, 0xf8, 0xa3, 0xa3, 0xfd, 0x64, 0x59, 0x04, 0xd3, 0x97, 0xfe, 0x15, 0xe0, 0xfe, 0xea, 0xdb, 0x01, 0x22, 0x7f, 0xff, 0xf2, 0x43, 0x4a, 0x89, 0x82, 0x2b, 0x85, 0x85, 0xe1, 0x4f, 0x2b, 0x28, 0x28, 0x41, 0x02, 0xa6, 0xd0, 0xe3, 0x0c, 0xdc, 0xfe, 0x13, 0x74, 0xfb, 0xd4, 0xa0, 0xe6, 0x71, 0x9a, 0xf2, 0x51, 0x94, 0x29, 0x98, 0xcf, 0xf7, 0x02, 0x24, 0xf0, 0xe1, 0x3a, 0x10, 0xc5, 0x2c, 0xf5, 0x25, 0x71, 0xfa, 0x45, 0x9f, 0x12, 0x0b, 0x2a, 0x01, 0xf2, 0xa3, 0xfb, 0xcc, 0xb9, 0xff, 0x5b, 0x17, 0xf5, 0x3f, 0x88, 0xfe, 0xad, 0x46, 0xf5, 0x1f, 0xda, 0xf0, 0xaf, 0x28, 0xfd, 0xd3, 0x47, 0xf9, 0x3c, 0x95, 0xfa, 0xd7, 0x8f, 0x02, 0xaf, 0x99, 0xff, 0x0b, 0x1b, 0x00, 0xf1, 0x15, 0x02, 0xc1, 0x61, 0xfe, 0xf3, 0x55, 0x43, 0x24, 0xb0, 0x26, 0xaf, 0x26, 0xe7, 0xee, 0x2c, 0x28, 0xe1, 0xa9, 0x01, 0x68, 0x43, 0xe7, 0xe8, 0x8a, 0xff, 0xd4, 0xcc, 0xfb, 0x66, 0x06, 0xe9, 0x85, 0x62, 0xf1, 0x36, 0x8b, 0x24, 0x31, 0xb5, 0xfa, 0x02, 0x8f, 0xf0, 0x0f, 0xce, 0x0f, 0x5a, 0x5e, 0xf9, 0x8a, 0x0b, 0xf7, 0xdd, 0x1e, 0x10, 0x19, 0x2a, 0x03, 0x14, 0x4e, 0xfa, 0xf2, 0x92, 0x00, 0xfb, 0x40, 0xf8, 0xdb, 0x31, 0xfd, 0xc8, 0xe8, 0xf5, 0xcb, 0x78, 0xf2, 0xbe, 0x7d, 0xfd, 0x52, 0x4f, 0xfb, 0xcd, 0xf6, 0xf8, 0x1e, 0x68, 0x00, 0xef, 0x90, 0xff, 0xf8, 0x66, 0x00, 0x62, 0xe0, 0x02, 0x41, 0x4f, 0xfe, 0xa2, 0xd2, 0x41, 0x80, 0x1d, 0x1e, 0xe9, 0x76, 0xe3, 0xa4, 0xd7, 0x30, 0x23, 0x10, 0x09, 0x96, 0xd1, 0xde, 0x78, 0xae, 0xfb, 0xc9, 0xbc, 0x01, 0x0c, 0x36, 0xed, 0xeb, 0xd1, 0xf8, 0xc0, 0xf5, 0x19, 0x9d, 0xda, 0xf2, 0x5f, 0xbc, 0xf6, 0xd9, 0x65, 0x0d, 0x3a, 0x8c, 0xf9, 0x46, 0x7a, 0xfc, 0xc0, 0x10, 0x0a, 0x41, 0xbb, 0xfe, 0x88, 0x5a, 0xff, 0xd8, 0x85, 0x02, 0x97, 0x67, 0xfd, 0x22, 0xae, 0x04, 0xd9, 0xed, 0xfb, 0xcf, 0xb4, 0xf9, 0x20, 0xe4, 0x00, 0xae, 0x31, 0xfb, 0x57, 0x65, 0xfa, 0x22, 0x93, 0xfe, 0xf7, 0x90, 0xf9, 0x84, 0xc5, 0xfa, 0xcb, 0x4e, 0xfe, 0x37, 0x33, 0xfd, 0xac, 0x75, 0x38, 0x39, 0x5b, 0x1c, 0x44, 0x9c, 0xea, 0x65, 0x80, 0x2a, 0xc7, 0xc2, 0x08, 0x35, 0xe3, 0xe5, 0xc2, 0xa1, 0xfc, 0x83, 0x23, 0x00, 0xa1, 0x5b, 0xf0, 0x30, 0xc3, 0xf8, 0x97, 0xae, 0x15, 0x51, 0x06, 0xf6, 0xdd, 0xfc, 0xf6, 0x8c, 0x65, 0x0b, 0x92, 0xc6, 0xfa, 0xbb, 0xa6, 0xfb, 0xbf, 0xdf, 0x08, 0x55, 0xbe, 0xff, 0x76, 0xeb, 0xfe, 0x9d, 0xc4, 0x01, 0x56, 0x4f, 0xfe, 0x6a, 0xf1, 0x03, 0xe0, 0xad, 0xfb, 0xda, 0x55, 0xfa, 0xba, 0xcf, 0x00, 0x01, 0x52, 0xfb, 0xa9, 0x7a, 0xfb, 0xae, 0x69, 0xff, 0x31, 0x34, 0xfb, 0x14, 0xd3, 0xfb, 0x1b, 0x96, 0xfd, 0x77, 0x82, 0xfd, 0x88, 0xe6, 0x2f, 0x1d, 0x90, 0x1b, 0xcb, 0x0c, 0xf1, 0x82, 0x5d, 0x23, 0x97, 0x14, 0x0a, 0xb0, 0xc7, 0xec, 0x91, 0x0b, 0xfc, 0x59, 0xb6, 0xff, 0x71, 0x3e, 0xf3, 0xa3, 0x80, 0xf8, 0x7e, 0x6d, 0x12, 0x34, 0x1f, 0xf9, 0xac, 0x22, 0xf7, 0x0e, 0x4d, 0x09, 0x49, 0xf9, 0xfc, 0xd6, 0x83, 0xfb, 0x12, 0x4d, 0x07, 0xee, 0xf2, 0x00, 0xf9, 0x28, 0xff, 0xbb, 0x2a, 0x01, 0x74, 0x95, 0xfe, 0x28, 0x48, 0x03, 0xf4, 0xaf, 0xfc, 0xec, 0x88, 0xfa, 0x22, 0x18, 0x00, 0x1c, 0x5b, 0xfc, 0xd5, 0x1f, 0xfc, 0xd8, 0x73, 0x00, 0x2c, 0xb9, 0xfc, 0x63, 0x65, 0xfc, 0x8b, 0xe4, 0xfd, 0x1a, 0x9d, 0xfd, 0x89, 0x3f, 0x28, 0x86, 0x86, 0x1a, 0xd6, 0xcf, 0xf5, 0x7c, 0xf4, 0x1c, 0x7f, 0xf9, 0x0b, 0x7b, 0xfe, 0xf1, 0x7f, 0x7d, 0xfb, 0xee, 0x2c, 0x00, 0xd8, 0x68, 0xf5, 0x8b, 0x47, 0xf8, 0xbc, 0x6f, 0x0f, 0xc8, 0x75, 0xfb, 0xb3, 0x33, 0xf7, 0x8f, 0x34, 0x07, 0xec, 0x88, 0xfe, 0x91, 0xf1, 0xfb, 0xbd, 0xf2, 0x05, 0xc9, 0x0c, 0x01, 0xe8, 0x97, 0xff, 0xf1, 0x04, 0x01, 0x2f, 0x38, 0xfe, 0xcf, 0xa5, 0x02, 0xd0, 0x4e, 0xfd, 0xd7, 0xf4, 0xfa, 0x04, 0xab, 0xff, 0x72, 0x99, 0xfd, 0x64, 0x0a, 0xfd, 0x5d, 0xc3, 0xff, 0x20, 0xcb, 0xfd, 0x96, 0x5e, 0xfd, 0xd0, 0x28, 0xfe, 0x82, 0x94, 0xfd, 0xa4, 0xcc, 0x21, 0xa7, 0x3b, 0x19, 0xeb, 0x67, 0xf9, 0x41, 0x40, 0x18, 0x38, 0x71, 0x0d, 0xfe, 0xe4, 0xf5, 0xae, 0x27, 0xfc, 0xc7, 0x25, 0x01, 0x72, 0xf1, 0xf6, 0xed, 0x59, 0xf8, 0x09, 0x2c, 0x0d, 0x8c, 0x12, 0xfd, 0x9a, 0x6f, 0xf7, 0x24, 0xd6, 0x05, 0xd2, 0xe7, 0xff, 0xca, 0xbf, 0xfc, 0x35, 0x7b, 0x04, 0x53, 0x79, 0x01, 0x95, 0x63, 0x00, 0xfc, 0x64, 0x00, 0x3f, 0x82, 0xfe, 0x18, 0x23, 0x02, 0x56, 0xba, 0xfd, 0x04, 0x11, 0xfc, 0x4d, 0x6d, 0x00, 0xe5, 0x45, 0xfe, 0x36, 0x2e, 0xfd, 0x81, 0xbe, 0xff, 0x02, 0x52, 0xfe, 0x1a, 0x14, 0xfe, 0x99, 0x58, 0xfe, 0x0d, 0x20, 0xfe, 0x3c, 0x37, 0x1c, 0x47, 0x99, 0x17, 0x71, 0xf0, 0xfb, 0x76, 0xdf, 0x14, 0xb2, 0x82, 0x0e, 0xa4, 0xba, 0xf8, 0x79, 0x28, 0xfd, 0xb0, 0xf0, 0x01, 0x3b, 0x1f, 0xf8, 0xcf, 0x6e, 0xf8, 0x46, 0x2a, 0x0b, 0xc7, 0x0a, 0xfe, 0x9d, 0xe5, 0xf7, 0xc1, 0xcf, 0x04, 0x3a, 0xfc, 0x00, 0x9f, 0x0f, 0xfd, 0x4e, 0x94, 0x03, 0x58, 0x4e, 0x02, 0x76, 0xe4, 0xff, 0x37, 0x03, 0x00, 0x8f, 0x18, 0xff, 0x50, 0xea, 0x01, 0xc7, 0x8c, 0xfe, 0xe2, 0xf8, 0xfc, 0x75, 0x91, 0x00, 0x7a, 0xb7, 0xfe, 0x93, 0x7e, 0xfd, 0xb0, 0x66, 0xff, 0xe8, 0x5c, 0xfe, 0x72, 0x3f, 0xfe, 0xde, 0xf4, 0xfe, 0x73, 0x92, 0xfe, 0x94, 0x00, 0x18, 0xde, 0xde, 0x14, 0xd7, 0xf7, 0xfd, 0x62, 0x1b, 0x13, 0xd9, 0x8a, 0x0e, 0x8e, 0xef, 0xfa, 0xe0, 0x5f, 0xfe, 0x01, 0x8e, 0x02, 0xfe, 0x93, 0xf8, 0x68, 0xe7, 0xf8, 0x7a, 0x5d, 0x09, 0xa8, 0xbc, 0xfe, 0x94, 0x70, 0xf8, 0xbb, 0xfa, 0x03, 0x3f, 0xc9, 0x01, 0xf2, 0x63, 0xfd, 0xc5, 0x5e, 0x03, 0x19, 0xe7, 0x01, 0xbb, 0x7f, 0xff, 0xa6, 0x84, 0x00, 0xe3, 0xf5, 0xff, 0x09, 0xc2, 0x01, 0xb7, 0xa2, 0xfe, 0xff, 0xcb, 0xfd, 0xef, 0xdf, 0x00, 0xd2, 0x9e, 0xfe, 0x62, 0x4f, 0xfd, 0x52, 0x02, 0xff, 0xd0, 0x5e, 0xfe, 0x0f, 0xb8, 0xfe, 0xb6, 0x87, 0xff, 0x30, 0x18, 0xff, 0xf6, 0xe2, 0x14, 0xc3, 0x08, 0x13, 0xd4, 0xf6, 0xff, 0xb2, 0xf6, 0x10, 0x01, 0x0d, 0x0d, 0xb4, 0xf0, 0xfc, 0x45, 0x02, 0x00, 0x5a, 0xad, 0x02, 0xf8, 0x4c, 0xf9, 0xa4, 0x85, 0xf9, 0x0c, 0x9f, 0x07, 0xb8, 0xcc, 0xfe, 0x59, 0x59, 0xf9, 0x76, 0x68, 0x04, 0xb8, 0xea, 0x01, 0x92, 0xb9, 0xfd, 0x39, 0x0a, 0x03, 0xdf, 0x29, 0x01, 0xe3, 0xa5, 0x00, 0xef, 0x70, 0x01, 0xf2, 0xb8, 0xff, 0xc3, 0x91, 0x01, 0x20, 0x5a, 0xff, 0xe4, 0x1d, 0xfe, 0x5a, 0xff, 0xff, 0x7f, 0x84, 0xfe, 0xfb, 0x7b, 0xfd, 0x63, 0x10, 0xff, 0x3c, 0x13, 0xff, 0x4b, 0x33, 0xff, 0xcc, 0x5e, 0xff, 0x26, 0x70, 0xfe, 0xf8, 0xa1, 0x11, 0xe2, 0x74, 0x11, 0x1f, 0x4a, 0x01, 0xe8, 0x10, 0x0f, 0x32, 0xe2, 0x0c, 0xa8, 0x2b, 0xff, 0x37, 0x2d, 0x00, 0x6a, 0x1d, 0x02, 0x67, 0xfb, 0xfa, 0xd3, 0x8a, 0xf9, 0xcc, 0x84, 0x05, 0xe5, 0xfb, 0xff, 0xe6, 0x02, 0xfb, 0x5a, 0x27, 0x03, 0xc7, 0xb3, 0x01, 0x13, 0x09, 0xff, 0xe9, 0xc3, 0x02, 0xe1, 0xd0, 0x01, 0x65, 0x53, 0x01, 0xf6, 0xef, 0x00, 0x37, 0xd0, 0xff, 0x74, 0x7b, 0x01, 0x41, 0x57, 0xff, 0x4b, 0xdc, 0xfd, 0xbd, 0x5e, 0xff, 0xec, 0xac, 0xfe, 0x2f, 0x1a, 0xfe, 0xd8, 0x92, 0xff, 0xff, 0x30, 0xff, 0x21, 0x58, 0xfe, 0xc4, 0x7e, 0xfe, 0xa8, 0x4a, 0xfe, 0x00, 0x98, 0x0e, 0xe9, 0xb1, 0x0f, 0x8d, 0x1e, 0x03, 0xe7, 0x48, 0x0d, 0x74, 0x82, 0x0c, 0x65, 0xa1, 0x01, 0xe4, 0xf1, 0xff, 0xf9, 0x53, 0x01, 0x2a, 0x7b, 0xfc, 0xd3, 0x66, 0xfa, 0xd6, 0xfe, 0x03, 0x42, 0x9e, 0x00, 0x95, 0xfc, 0xfb, 0x8e, 0x5f, 0x02, 0x77, 0xd9, 0x02, 0x77, 0x07, 0x01, 0x1b, 0x53, 0x02, 0x03, 0x64, 0x01, 0xfb, 0xa4, 0x01, 0xfc, 0xcc, 0x00, 0xf6, 0xe1, 0xff, 0x75, 0x01, 0x01, 0xad, 0xf8, 0xfe, 0x5e, 0xc8, 0xfd, 0x6b, 0xe8, 0xff, 0x8b, 0x78, 0xff, 0xa5, 0x44, 0xfe, 0x58, 0xee, 0xfe, 0x75, 0x17, 0xfe, 0x43, 0x2d, 0xfe, 0xef, 0xd7, 0xfe, 0x98, 0xd2, 0xfe, 0xfa, 0xaa, 0x0c, 0xdc, 0xbf, 0x0e, 0xb2, 0x6d, 0x04, 0x50, 0x58, 0x0b, 0x41, 0x43, 0x0c, 0x5b, 0xb9, 0x02, 0xec, 0xfc, 0xfe, 0xcf, 0x81, 0x01, 0x43, 0x62, 0xfe, 0x04, 0xca, 0xfa, 0x95, 0x08, 0x02, 0xf1, 0x91, 0x01, 0x03, 0xf1, 0xfd, 0xbf, 0x5b, 0x03, 0xdf, 0x2c, 0x04, 0xc1, 0xca, 0x00, 0x86, 0x75, 0x01, 0x9e, 0xca, 0x01, 0xa0, 0x53, 0x01, 0x8f, 0x70, 0x00, 0x55, 0xa5, 0xff, 0xff, 0x68, 0x00, 0x41, 0xb7, 0xff, 0x91, 0xf4, 0xfe, 0x7d, 0xae, 0xff, 0x58, 0x5c, 0xfe, 0xc0, 0x96, 0xfd, 0x8b, 0x92, 0xfe, 0xf5, 0xab, 0xfe, 0xc2, 0xbd, 0xfe, 0x09, 0x08, 0xff, 0x40, 0xe6, 0xfe, 0xf2, 0x0a, 0x0a, 0x9f, 0xb0, 0x0d, 0x4f, 0x07, 0x06, 0xac, 0x76, 0x09, 0x75, 0xc7, 0x0b, 0xf1, 0xe9, 0x03, 0xba, 0xa9, 0xff, 0x2b, 0x8f, 0x01, 0x6e, 0xee, 0xfd, 0x5c, 0x6d, 0xfb, 0xa6, 0x64, 0x02, 0x18, 0x9f, 0x03, 0xc7, 0x02, 0x00, 0x03, 0xd7, 0x02, 0xd8, 0xa6, 0x03, 0x18, 0xa6, 0x00, 0x0e, 0x6f, 0x01, 0x82, 0xad, 0x01, 0x81, 0x82, 0x00, 0x25, 0x1c, 0x00, 0xc0, 0x58, 0x00, 0x09, 0x0d, 0x01, 0x51, 0xdc, 0xff, 0x32, 0x31, 0xfe, 0xf1, 0x18, 0xfe, 0x2d, 0x20, 0xfe, 0xd0, 0x47, 0xfe, 0x57, 0xe1, 0xfe, 0x17, 0xf6, 0xfe, 0x31, 0xd4, 0xfe, 0xed, 0xaa, 0xfe, 0xff, 0x97, 0xfe, 0x36, 0xb4, 0x08, 0x2c, 0x7c, 0x0d, 0x88, 0xf1, 0x05, 0x57, 0xf0, 0x07, 0xda, 0x1e, 0x0c, 0xe0, 0x2d, 0x04, 0xf4, 0xbd, 0xfe, 0xdb, 0x4f, 0x01, 0x06, 0x6a, 0xff, 0x42, 0x15, 0xfe, 0x8d, 0xa8, 0x03, 0x04, 0x8d, 0x03, 0x68, 0x68, 0x00, 0xd6, 0x02, 0x03, 0xa6, 0x0d, 0x03, 0xd5, 0x5f, 0x00, 0x2e, 0xa4, 0x00, 0xb2, 0x28, 0x01, 0x04, 0x72, 0x01, 0x4c, 0xec, 0x00, 0x25, 0x35, 0x00, 0x0f, 0xc8, 0xff, 0xa1, 0x4e, 0xfe, 0x29, 0xca, 0xfd, 0x4a, 0xa2, 0xfe, 0xb3, 0xc6, 0xfe, 0x81, 0x8d, 0xfe, 0x89, 0xc4, 0xfe, 0xe7, 0x8e, 0xfe, 0xec, 0x82, 0xfe, 0xdd, 0xc9, 0xfe, 0x74, 0xbb, 0xfe, 0x41, 0x34, 0x08, 0x62, 0x2a, 0x0c, 0x80, 0x5d, 0x06, 0x99, 0xd0, 0x08, 0x7d, 0x20, 0x09, 0xec, 0xa0, 0x02, 0xd2, 0x60, 0x01, 0xdb, 0xe3, 0x03, 0x77, 0xe1, 0x00, 0x4f, 0xe0, 0xfe, 0xf8, 0xc4, 0x03, 0x7b, 0x39, 0x03, 0x58, 0xed, 0x00, 0x8a, 0x40, 0x03, 0x59, 0xcd, 0x01, 0xf2, 0x81, 0xff, 0x66, 0x9c, 0x01, 0x80, 0x87, 0x02, 0x09, 0x07, 0x01, 0x29, 0x7b, 0xff, 0x55, 0x9b, 0xfe, 0x35, 0x31, 0xff, 0x21, 0x06, 0xff, 0xd4, 0x6e, 0xfe, 0x28, 0xd8, 0xfe, 0xbf, 0xb5, 0xfe, 0x40, 0x37, 0xfe, 0x1f, 0x5d, 0xfe, 0x39, 0xce, 0xfe, 0x87, 0xa6, 0xfe, 0xbd, 0xe0, 0xfe, 0xa0, 0xf6, 0xfe, 0x39, 0x52, 0x08, 0xc6, 0xf5, 0x0a, 0x21, 0x38, 0x05, 0x63, 0x0e, 0x08, 0x8d, 0x91, 0x08, 0x61, 0x1a, 0x05, 0x66, 0x3c, 0x04, 0x47, 0xfc, 0x03, 0x55, 0x6a, 0x00, 0x1b, 0x1f, 0xff, 0x16, 0x70, 0x04, 0x0d, 0xe8, 0x03, 0xe5, 0x24, 0x00, 0x9b, 0x68, 0x01, 0xbb, 0x6f, 0x02, 0xea, 0x51, 0x01, 0x27, 0x5e, 0x01, 0xcc, 0xd4, 0x00, 0x6f, 0xc5, 0xfe, 0x98, 0x7a, 0xfe, 0x11, 0xa3, 0xff, 0x01, 0x02, 0x00, 0xe1, 0xda, 0xfe, 0x79, 0x32, 0xfe, 0x17, 0x77, 0xfe, 0x95, 0x43, 0xfe, 0x16, 0x2e, 0xfe, 0x00, 0x8a, 0xfe, 0x92, 0xdc, 0xfe, 0x27, 0x07, 0xff, 0xb0, 0xff, 0xfe, 0x86, 0xbb, 0xfe, 0xff, 0xad, 0x06, 0x94, 0xb4, 0x09, 0x3d, 0x13, 0x06, 0xba, 0x38, 0x09, 0xbd, 0x7b, 0x0a, 0x29, 0x61, 0x05, 0x51, 0x97, 0x03, 0xcc, 0x9b, 0x04, 0xf9, 0x7c, 0x01, 0xb6, 0x21, 0x00, 0x35, 0xcc, 0x03, 0x7c, 0xd2, 0x02, 0x1c, 0x78, 0x00, 0x63, 0xd6, 0x02, 0xe6, 0x8c, 0x02, 0x6d, 0x85, 0xff, 0x7b, 0x46, 0xff, 0x61, 0xb0, 0xff, 0x99, 0x7e, 0xff, 0xfb, 0xaf, 0xff, 0xbb, 0xc6, 0xff, 0x6b, 0x7a, 0xff, 0x32, 0x5a, 0xfe, 0xa3, 0xf9, 0xfd, 0x1c, 0x5b, 0xfe, 0x49, 0x5c, 0xfe, 0x51, 0x50, 0xfe, 0x86, 0xe3, 0xfe, 0x9d, 0x40, 0xff, 0x80, 0xe7, 0xfe, 0x4e, 0xdd, 0xfe, 0x2b, 0xda, 0xfe, 0xd9, 0xde, 0x07, 0xe4, 0xd4, 0x0c, 0x16, 0xd1, 0x08, 0xd0, 0x05, 0x08, 0xe6, 0x9b, 0x07, 0x3a, 0x60, 0x05, 0x43, 0x46, 0x04, 0x13, 0xde, 0x03, 0x06, 0xca, 0x01, 0x62, 0x17, 0x01, 0x4c, 0xc6, 0x02, 0xc3, 0xd2, 0x03, 0x1f, 0xdd, 0x01, 0x8a, 0x55, 0xff, 0xdd, 0x5e, 0xff, 0xfd, 0x63, 0xff, 0x82, 0xe7, 0xff, 0x63, 0x50, 0x00, 0xdf, 0xcf, 0xff, 0x6f, 0x80, 0xff, 0x80, 0xdb, 0xfe, 0xaa, 0xad, 0xfe, 0xaa, 0x5d, 0xfe, 0x64, 0x13, 0xfe, 0x0b, 0x51, 0xfe, 0x29, 0xb5, 0xfe, 0x10, 0xdd, 0xfe, 0xa2, 0xc9, 0xfe, 0xa3, 0x3f, 0xff, 0x5a, 0x2f, 0xff, 0x75, 0xe0, 0xfe, 0x40, 0xb8, 0xfe, 0xd5, 0xd7, 0x07, 0x34, 0xf3, 0x0c, 0xfd, 0xee, 0x08, 0x62, 0x5c, 0x07, 0xcc, 0x3b, 0x07, 0x94, 0x1d, 0x06, 0x5a, 0x39, 0x05, 0xc6, 0xb8, 0x04, 0x11, 0x09, 0x03, 0xd0, 0x6d, 0x01, 0x51, 0x62, 0x02, 0x73, 0x7a, 0x03, 0x98, 0x65, 0x00, 0x63, 0xe6, 0xfd, 0x50, 0x17, 0xff, 0xcf, 0x1b, 0x00, 0x1f, 0x8c, 0x00, 0xa0, 0x67, 0x00, 0x9f, 0x7f, 0xff, 0xee, 0xd9, 0xfe, 0x24, 0xe6, 0xfe, 0x1a, 0xfa, 0xfe, 0x91, 0x55, 0xfe, 0xdc, 0x30, 0xfe, 0xfa, 0x98, 0xfe, 0x27, 0xbe, 0xfe, 0x3b, 0xb8, 0xfe, 0xe7, 0xf5, 0xfe, 0x9e, 0x55, 0xff, 0xf2, 0x39, 0xff, 0x40, 0x08, 0xff, 0xfa, 0xbd, 0xfe, 0xe8, 0x87, 0x07, 0xbc, 0x3d, 0x0b, 0x0b, 0xab, 0x06, 0x6b, 0x8c, 0x06, 0xff, 0xc8, 0x06, 0x04, 0x47, 0x06, 0xee, 0x99, 0x06, 0x1c, 0x9d, 0x07, 0xf3, 0x49, 0x05, 0xda, 0x88, 0x02, 0xb0, 0xff, 0x01, 0x05, 0x9e, 0x00, 0xb7, 0x75, 0x00, 0x11, 0x91, 0xff, 0x89, 0xd0, 0xfe, 0xec, 0xcc, 0xff, 0x48, 0xb3, 0x00, 0x14, 0x19, 0x00, 0xfb, 0x2f, 0xff, 0x42, 0x45, 0xff, 0x62, 0x0a, 0xff, 0xcd, 0xdc, 0xfe, 0x8a, 0x8c, 0xfe, 0x3f, 0x64, 0xfe, 0x38, 0xb4, 0xfe, 0xec, 0xbb, 0xfe, 0x35, 0x83, 0xfe, 0xe0, 0xf0, 0xfe, 0x07, 0x5f, 0xff, 0x12, 0x2d, 0xff, 0xff, 0x1a, 0xff, 0xaa, 0xe8, 0xfe, 0x4c, 0x27, 0x08, 0xf8, 0xb6, 0x0b, 0xa3, 0xec, 0x05, 0x38, 0x5e, 0x05, 0x81, 0xf4, 0x04, 0x18, 0xe4, 0x04, 0x0d, 0x42, 0x07, 0x4b, 0x09, 0x08, 0x10, 0x39, 0x05, 0x63, 0xef, 0x02, 0x15, 0x1c, 0x02, 0x4e, 0x17, 0x02, 0x41, 0x8f, 0x02, 0x0b, 0xec, 0xff, 0x46, 0x08, 0xff, 0x22, 0x8b, 0xff, 0xfe, 0x58, 0xff, 0xb8, 0x02, 0x00, 0x3f, 0xc2, 0xff, 0x09, 0xf3, 0xfe, 0xa1, 0x74, 0xfe, 0xef, 0x01, 0xff, 0xf3, 0x06, 0xff, 0x1e, 0x8f, 0xfe, 0xe6, 0xed, 0xfe, 0xd4, 0x28, 0xff, 0x2e, 0xfb, 0xfe, 0x3d, 0xdc, 0xfe, 0x93, 0x09, 0xff, 0xe9, 0x2d, 0xff, 0x9f, 0xec, 0xfe, 0x70, 0xc6, 0xfe, 0xfe, 0x8e, 0x08, 0xfd, 0x58, 0x0b, 0x77, 0x5b, 0x04, 0x74, 0x9b, 0x04, 0x27, 0x2a, 0x05, 0x0e, 0xb7, 0x03, 0x67, 0xaa, 0x03, 0x82, 0xa2, 0x05, 0xee, 0x7a, 0x06, 0x3f, 0x43, 0x05, 0xcc, 0x49, 0x04, 0x80, 0x35, 0x03, 0xe2, 0xaa, 0x02, 0x95, 0x68, 0x03, 0x8b, 0xd5, 0x00, 0x3c, 0x4a, 0xfd, 0x57, 0xb2, 0xfe, 0x23, 0x85, 0xff, 0x6e, 0xc7, 0xff, 0x2b, 0xaf, 0xff, 0x7b, 0xc6, 0xfe, 0x38, 0xd5, 0xfe, 0xe2, 0x02, 0xff, 0x7a, 0xf9, 0xfe, 0x13, 0x12, 0xff, 0x3c, 0x37, 0xff, 0xa5, 0xe3, 0xfe, 0xeb, 0x3f, 0xff, 0x6b, 0xe6, 0xfe, 0x9b, 0xbf, 0xfe, 0x45, 0x37, 0xff, 0x36, 0xb8, 0xfe, 0xb0, 0x09, 0x08, 0xa3, 0xfe, 0x0a, 0x03, 0x58, 0x04, 0x10, 0x52, 0x04, 0xde, 0x66, 0x05, 0x68, 0xb7, 0x04, 0xb5, 0x21, 0x03, 0xf7, 0x7b, 0x01, 0x70, 0x65, 0x02, 0x7c, 0x0c, 0x05, 0x9f, 0x03, 0x06, 0x43, 0x65, 0x04, 0x4b, 0x33, 0x03, 0x60, 0x75, 0x03, 0xcb, 0x4e, 0x04, 0x8a, 0xcf, 0x01, 0xf2, 0x1e, 0xfe, 0x70, 0x0c, 0xfe, 0x08, 0xff, 0xfe, 0x22, 0x74, 0xff, 0x95, 0xcd, 0xff, 0x3d, 0x67, 0xff, 0xc9, 0x90, 0xfe, 0x0b, 0xea, 0xfe, 0xe9, 0x66, 0xff, 0xef, 0xde, 0xfe, 0xc2, 0xfa, 0xfe, 0x6a, 0x75, 0xff, 0x39, 0x09, 0xff, 0x9b, 0xbf, 0xfe, 0x21, 0xd0, 0xfe, 0x0a, 0xf5, 0xfe, 0xba, 0xb4, 0x08, 0x9e, 0x08, 0x0b, 0x6e, 0xc4, 0x02, 0x6a, 0x25, 0x03, 0x83, 0xfc, 0x04, 0x75, 0x7d, 0x04, 0x98, 0x58, 0x03, 0x3d, 0x1a, 0x01, 0xcd, 0x10, 0x00, 0x7e, 0xad, 0x02, 0xb6, 0x5f, 0x04, 0xbd, 0xa3, 0x03, 0xb3, 0xa9, 0x04, 0xbc, 0x6e, 0x05, 0x76, 0x6f, 0x05, 0xfe, 0xf6, 0x03, 0x80, 0x04, 0x02, 0x43, 0x7d, 0x00, 0x7d, 0x8e, 0xfe, 0x9c, 0xb2, 0xfd, 0x23, 0xc2, 0xfe, 0x96, 0x8c, 0xff, 0xe1, 0x2c, 0xff, 0x11, 0xe3, 0xfe, 0x57, 0xd9, 0xfe, 0xec, 0xe6, 0xfe, 0x00, 0x10, 0xff, 0x3f, 0xae, 0xff, 0x24, 0x3f, 0xff, 0xb3, 0xe4, 0xfe, 0x59, 0x1b, 0xff, 0x0d, 0xec, 0xfe, 0xf7, 0xbb, 0x09, 0x68, 0x10, 0x0c, 0x68, 0xd1, 0x02, 0xcc, 0xfd, 0x03, 0xc3, 0x70, 0x05, 0xdf, 0xcb, 0x03, 0x67, 0x7c, 0x02, 0xbe, 0x87, 0xff, 0x4f, 0x12, 0x00, 0x68, 0xdf, 0x03, 0xb4, 0x42, 0x02, 0x20, 0x52, 0x00, 0x36, 0x52, 0x02, 0xce, 0xae, 0x03, 0x8b, 0xcb, 0x05, 0xb5, 0xf7, 0x04, 0xb2, 0x63, 0x03, 0xad, 0xa2, 0x03, 0x77, 0xbd, 0x01, 0xae, 0x32, 0xff, 0x3b, 0x0f, 0xfe, 0xd4, 0xc9, 0xfd, 0x69, 0x5f, 0xfe, 0xda, 0x87, 0xff, 0x05, 0x73, 0xff, 0x11, 0xba, 0xfe, 0x9a, 0xc7, 0xfe, 0xf2, 0x88, 0xff, 0x26, 0x55, 0xff, 0x85, 0x0c, 0xff, 0x33, 0x50, 0xff, 0x8f, 0xe3, 0xfe, 0xe9, 0xd7, 0x0a, 0xff, 0x7b, 0x0c, 0xb5, 0x70, 0x02, 0xa1, 0x6e, 0x05, 0x11, 0x1b, 0x07, 0xca, 0xa3, 0x04, 0x1f, 0x27, 0x01, 0x54, 0x65, 0xfc, 0x71, 0x92, 0xff, 0xa6, 0x6a, 0x05, 0x6b, 0x1a, 0x02, 0x16, 0x33, 0xff, 0xa3, 0x3e, 0x00, 0x50, 0x79, 0x01, 0x54, 0xca, 0x03, 0x28, 0x89, 0x02, 0x82, 0x68, 0x03, 0xc9, 0xf1, 0x04, 0x39, 0x68, 0x03, 0xe7, 0x37, 0x02, 0x93, 0xac, 0x00, 0xc2, 0xe6, 0xfe, 0xb9, 0x5f, 0xfd, 0xd7, 0xd4, 0xfd, 0x78, 0xf3, 0xfe, 0xbd, 0x3c, 0xff, 0x65, 0x54, 0xff, 0xc5, 0x37, 0xff, 0x3e, 0xeb, 0xfe, 0xfd, 0x0d, 0xff, 0xb4, 0x69, 0xff, 0xa8, 0xfb, 0xfe, 0xc6, 0x17, 0x0d, 0x35, 0x7e, 0x0f, 0x13, 0x6f, 0x02, 0x8c, 0x7e, 0x04, 0x39, 0x5e, 0x06, 0x04, 0xb9, 0x04, 0x5b, 0x7a, 0x01, 0x32, 0x5f, 0xfb, 0x58, 0x51, 0xff, 0x32, 0x37, 0x05, 0xa9, 0x18, 0x01, 0x3e, 0xc7, 0xfe, 0x36, 0x44, 0x00, 0xbc, 0xc5, 0x00, 0x5d, 0x01, 0x02, 0xe1, 0x61, 0x01, 0x42, 0x99, 0x01, 0xd3, 0x31, 0x03, 0x4b, 0xad, 0x03, 0x2d, 0xf4, 0x02, 0x3c, 0xc9, 0x01, 0xe1, 0x35, 0x01, 0x8d, 0x05, 0x00, 0xb8, 0x9a, 0xfe, 0x97, 0xb4, 0xfd, 0x32, 0x21, 0xfe, 0xc1, 0x05, 0xff, 0xb9, 0xd4, 0xff, 0x4d, 0x96, 0xff, 0xe1, 0xab, 0xfe, 0xe1, 0xca, 0xfe, 0x7a, 0x29, 0xff, 0x41, 0x14, 0x0f, 0xcf, 0x1f, 0x11, 0x36, 0xfc, 0x01, 0x84, 0x64, 0x05, 0x7f, 0xc0, 0x07, 0xb2, 0x36, 0x04, 0xc2, 0x92, 0xff, 0xc4, 0x9e, 0xf9, 0x8f, 0xc9, 0x00, 0x2f, 0x88, 0x06, 0xc2, 0x57, 0xff, 0xfc, 0x9c, 0xfd, 0x67, 0x96, 0xff, 0xbd, 0xbf, 0x00, 0xb9, 0x7e, 0x02, 0x67, 0x27, 0x00, 0x75, 0x0b, 0x00, 0xe6, 0x08, 0x02, 0x06, 0x69, 0x01, 0x0e, 0x9c, 0x01, 0x4f, 0x8c, 0x02, 0x28, 0x10, 0x02, 0xfc, 0x77, 0x01, 0x34, 0xe8, 0x00, 0xec, 0x67, 0xff, 0xe6, 0x6c, 0xfe, 0xfa, 0xe9, 0xfd, 0xc3, 0x1f, 0xff, 0x10, 0x72, 0xff, 0xb7, 0xfc, 0xfe, 0x9d, 0x24, 0xff, 0xd3, 0x94, 0xfe, 0x56, 0x3e, 0x11, 0x5c, 0xc4, 0x12, 0x7c, 0x82, 0x01, 0xa4, 0x74, 0x06, 0xef, 0x13, 0x09, 0x11, 0x02, 0x04, 0xec, 0x4f, 0xfd, 0x15, 0x03, 0xf8, 0xde, 0x8e, 0x02, 0x41, 0xe5, 0x06, 0x7d, 0x25, 0xfe, 0x16, 0x9d, 0xfd, 0x91, 0xc6, 0xfe, 0x58, 0x2c, 0x00, 0x9c, 0x94, 0x02, 0xc7, 0xbb, 0xff, 0xc7, 0xed, 0xff, 0xbf, 0x1a, 0x01, 0x13, 0x1f, 0x00, 0xca, 0xaf, 0x00, 0xe7, 0x65, 0x00, 0x61, 0x60, 0x01, 0x20, 0x32, 0x02, 0xab, 0x31, 0x01, 0x7b, 0x30, 0x01, 0x69, 0xce, 0x00, 0xa5, 0x1f, 0xff, 0x5f, 0x10, 0xff, 0x7b, 0xab, 0xfe, 0xf9, 0x7c, 0xfe, 0x7b, 0xf5, 0xfe, 0xb3, 0xec, 0xfe, 0x7b, 0x4b, 0x14, 0x10, 0xdf, 0x15, 0xa8, 0x00, 0x01, 0x45, 0xeb, 0x05, 0xd2, 0xfb, 0x08, 0x77, 0x6d, 0x03, 0xc7, 0xed, 0xfb, 0x3c, 0xc7, 0xf7, 0x10, 0x2d, 0x04, 0xdc, 0x1f, 0x06, 0x85, 0x88, 0xfc, 0x94, 0xf0, 0xfd, 0x1e, 0xb9, 0xfe, 0xe9, 0xfc, 0xff, 0x95, 0x64, 0x02, 0xe3, 0xf7, 0xfe, 0x76, 0xc8, 0xff, 0x9a, 0x11, 0x01, 0x27, 0x6b, 0xff, 0xee, 0xbc, 0xff, 0x78, 0xbb, 0xff, 0xfc, 0x52, 0x00, 0x01, 0x94, 0x00, 0x1d, 0xbd, 0x00, 0x8c, 0x82, 0x01, 0xfb, 0x5c, 0x01, 0x05, 0xe6, 0x00, 0x5e, 0x0e, 0x01, 0xe4, 0x46, 0xff, 0x2a, 0x2a, 0xfe, 0x0b, 0xa5, 0xfe, 0x81, 0x32, 0xfe, 0xf9, 0x54, 0x16, 0x1a, 0x61, 0x17, 0xe9, 0xb2, 0x00, 0x14, 0x06, 0x08, 0x27, 0xe6, 0x0a, 0xc5, 0xb0, 0x01, 0xa9, 0x41, 0xf8, 0xb7, 0xaf, 0xf7, 0x84, 0x12, 0x07, 0xff, 0x78, 0x05, 0x47, 0x14, 0xfb, 0x7f, 0xff, 0xfd, 0x08, 0x40, 0xfe, 0xa0, 0x24, 0x00, 0xed, 0x44, 0x02, 0x8f, 0x1e, 0xfe, 0xf3, 0xd7, 0xff, 0x8d, 0x0a, 0x01, 0x7c, 0xa6, 0xfe, 0x89, 0xaf, 0xff, 0x8c, 0xfb, 0xfe, 0x5d, 0x71, 0xff, 0x10, 0x91, 0x00, 0x35, 0x20, 0xff, 0xae, 0x09, 0x00, 0xd7, 0x6f, 0x01, 0x3d, 0xeb, 0x00, 0x4d, 0xf8, 0x01, 0x4f, 0x31, 0x01, 0xc7, 0x88, 0xff, 0x32, 0xee, 0xfe, 0x74, 0x04, 0xfe, 0x85, 0xa5, 0x18, 0xac, 0x3e, 0x1a, 0x31, 0x93, 0x00, 0x83, 0x5d, 0x08, 0x52, 0xd9, 0x0b, 0x35, 0x69, 0x00, 0x1a, 0x83, 0xf5, 0x31, 0x40, 0xf8, 0x70, 0x7d, 0x09, 0xb8, 0xd6, 0x03, 0xec, 0xb9, 0xf9, 0x91, 0x8a, 0xfe, 0x2e, 0x07, 0xfe, 0xff, 0x6f, 0x00, 0x50, 0x49, 0x02, 0x29, 0x4c, 0xfd, 0x4b, 0x89, 0xff, 0x20, 0xf8, 0x00, 0x73, 0x31, 0xfe, 0x98, 0xa8, 0xff, 0xed, 0xbc, 0xfe, 0x18, 0x0a, 0xff, 0x28, 0x03, 0x00, 0xd5, 0x49, 0xfe, 0x0b, 0xc2, 0xff, 0xc8, 0x6b, 0x00, 0xb9, 0x16, 0x00, 0x67, 0xbd, 0x01, 0x1e, 0x22, 0x01, 0x89, 0x7c, 0x00, 0x27, 0x8b, 0x00, 0xd9, 0x01, 0xff, 0x8b, 0x54, 0x1a, 0x76, 0x52, 0x1d, 0xe1, 0x12, 0x01, 0xb4, 0x48, 0x08, 0xf9, 0xce, 0x0c, 0x09, 0x42, 0xff, 0xf3, 0xad, 0xf2, 0xc7, 0xc9, 0xf8, 0xd3, 0xcb, 0x0b, 0x67, 0x45, 0x02, 0x6b, 0x11, 0xf8, 0x46, 0x15, 0xff, 0x80, 0xdc, 0xfd, 0xa7, 0x82, 0x00, 0x61, 0x63, 0x02, 0x3d, 0xc7, 0xfc, 0x5c, 0x47, 0xff, 0xb7, 0xc0, 0x00, 0x36, 0xa2, 0xfd, 0xc8, 0x4d, 0xff, 0x84, 0x66, 0xfe, 0x34, 0xc4, 0xfe, 0x6d, 0x33, 0x00, 0x5b, 0x99, 0xfd, 0xa6, 0xcf, 0xfe, 0x18, 0x37, 0x00, 0x34, 0xaa, 0xff, 0x7c, 0xce, 0x00, 0x2a, 0x82, 0x00, 0x28, 0xe7, 0xff, 0xed, 0x93, 0x00, 0xc2, 0x64, 0x00, 0x6f, 0xda, 0x1b, 0x08, 0x15, 0x21, 0x60, 0x1b, 0x02, 0x6a, 0xd0, 0x06, 0xa7, 0x3b, 0x0d, 0xc3, 0xb3, 0xfe, 0x8d, 0xb1, 0xf0, 0x10, 0x45, 0xf9, 0x8a, 0xe9, 0x0c, 0xe0, 0x60, 0x01, 0x4a, 0xb2, 0xf6, 0xb4, 0xe5, 0xfe, 0xfb, 0x23, 0xfe, 0x77, 0x45, 0x00, 0xea, 0x9b, 0x02, 0x36, 0xa1, 0xfc, 0x73, 0xc7, 0xfe, 0x5f, 0xaf, 0x00, 0xdb, 0x5d, 0xfd, 0x49, 0xcc, 0xfe, 0x30, 0xf6, 0xfd, 0xa0, 0x5e, 0xfe, 0xec, 0xde, 0xff, 0xb6, 0x97, 0xfd, 0xf0, 0x8c, 0xfe, 0x2b, 0x92, 0xff, 0x89, 0x46, 0xff, 0xe5, 0xa5, 0x00, 0xdc, 0xf7, 0xff, 0xd4, 0x4a, 0xff, 0x49, 0xcf, 0xff, 0x21, 0x0c, 0xff, 0x41, 0x97, 0x1c, 0x85, 0x80, 0x24, 0xa9, 0xe2, 0x03, 0x8a, 0xff, 0x05, 0x68, 0x72, 0x0d, 0x38, 0x0e, 0xfe, 0x32, 0x2e, 0xef, 0x55, 0x7a, 0xf9, 0x8c, 0xb7, 0x0d, 0xf8, 0xe5, 0x00, 0x8a, 0xc6, 0xf5, 0x47, 0x27, 0xfe, 0x61, 0x50, 0xfe, 0x62, 0x32, 0x00, 0x06, 0xa4, 0x02, 0x41, 0xf2, 0xfc, 0xb1, 0xf8, 0xfd, 0xcf, 0x8d, 0x00, 0xcd, 0x9e, 0xfd, 0x59, 0x82, 0xfe, 0x5e, 0x7a, 0xfd, 0xad, 0xaa, 0xfd, 0x74, 0x87, 0xff, 0xa9, 0x63, 0xfd, 0x6b, 0x61, 0xfe, 0x65, 0x5d, 0xff, 0x60, 0x15, 0xff, 0xa0, 0x37, 0x00, 0x49, 0x5f, 0x00, 0x76, 0x6e, 0xfe, 0xd9, 0x28, 0xfe, 0x65, 0x61, 0xff, 0x3c, 0xbd, 0x1c, 0x5d, 0x82, 0x27, 0x7c, 0x61, 0x06, 0xca, 0x93, 0x05, 0x3e, 0x57, 0x0d, 0xfc, 0x87, 0xfd, 0xd8, 0x9f, 0xee, 0x40, 0xf8, 0xf8, 0xe4, 0xf1, 0x0d, 0xa9, 0x29, 0x01, 0x67, 0xd2, 0xf4, 0x1d, 0xb4, 0xfd, 0x35, 0x27, 0xfe, 0xb3, 0xcf, 0xff, 0xf8, 0xdb, 0x02, 0xfb, 0x34, 0xfd, 0x22, 0x48, 0xfd, 0x6d, 0x5d, 0x00, 0xa8, 0xd9, 0xfd, 0xf3, 0x53, 0xfe, 0x36, 0x62, 0xfd, 0x0a, 0xfa, 0xfc, 0xad, 0x27, 0xff, 0xc9, 0x03, 0xfd, 0x8b, 0xda, 0xfd, 0x4f, 0x13, 0xff, 0x64, 0x47, 0xff, 0x2c, 0xc9, 0x00, 0x96, 0xb1, 0xfe, 0x7f, 0x04, 0xfe, 0x66, 0xb9, 0xfe, 0x1e, 0x72, 0xfe, 0x32, 0xc6, 0x1d, 0x05, 0x93, 0x2a, 0xcf, 0x9d, 0x08, 0xa8, 0x29, 0x04, 0x0c, 0x0f, 0x0c, 0xb9, 0xdc, 0xfd, 0x64, 0xa8, 0xef, 0x82, 0x19, 0xf8, 0x3f, 0x30, 0x0c, 0xa8, 0xfb, 0x01, 0xe8, 0xb6, 0xf4, 0xdc, 0xdc, 0xfc, 0x64, 0x8b, 0xfe, 0x42, 0xf6, 0xfe, 0x0b, 0x49, 0x02, 0xe2, 0x3a, 0xfe, 0x66, 0xb0, 0xfc, 0x9d, 0x79, 0xff, 0xc6, 0x5c, 0xfe, 0x05, 0x30, 0xfe, 0x27, 0xf5, 0xfc, 0xf9, 0xe1, 0xfc, 0x48, 0xf6, 0xfe, 0x78, 0x9a, 0xfc, 0x9a, 0xdf, 0xfc, 0x58, 0x65, 0xff, 0x88, 0x29, 0xff, 0x1d, 0x15, 0xff, 0x10, 0x75, 0xff, 0xfa, 0x36, 0xfe, 0x87, 0xb0, 0xfd, 0x34, 0xa1, 0xfe, 0xca, 0x79, 0x1e, 0xc8, 0xe3, 0x2b, 0x95, 0x06, 0x0c, 0x95, 0xf9, 0x03, 0x73, 0xcf, 0x09, 0xf9, 0x93, 0x00, 0x63, 0xd1, 0xf0, 0xf5, 0xe7, 0xf5, 0x39, 0xe8, 0x0a, 0x75, 0xea, 0x02, 0xf6, 0x8d, 0xf5, 0x8c, 0x9d, 0xfc, 0xa3, 0xc3, 0xfd, 0x24, 0x87, 0xfe, 0xf1, 0x0c, 0x02, 0x7c, 0xab, 0xfe, 0xa9, 0x3b, 0xfd, 0xe2, 0x43, 0xfe, 0x24, 0xac, 0xfd, 0x17, 0xdf, 0xfe, 0xb0, 0xa8, 0xfd, 0xbe, 0x56, 0xfc, 0x4d, 0x3e, 0xfe, 0xe0, 0x26, 0xfd, 0x6f, 0x94, 0xfd, 0x60, 0xef, 0xfd, 0x7e, 0x98, 0xfd, 0x13, 0x26, 0x00, 0xa6, 0xfe, 0xfe, 0x3d, 0x08, 0xfe, 0x07, 0x3e, 0xfe, 0x15, 0x34, 0xfe, 0x6e, 0xac, 0x20, 0xbb, 0xa9, 0x2a, 0x37, 0xf5, 0x0c, 0xf3, 0xd5, 0x07, 0xa7, 0xc0, 0x08, 0x11, 0x31, 0x01, 0x5b, 0xa1, 0xf0, 0xf6, 0x44, 0xf5, 0xfe, 0xc9, 0x09, 0x9e, 0x6b, 0x02, 0xf8, 0x5a, 0xf7, 0x4b, 0xf6, 0xfb, 0xd6, 0xcd, 0xfc, 0x93, 0xd2, 0xfe, 0x5c, 0xb8, 0x01, 0x80, 0x6e, 0xfe, 0x85, 0xb5, 0xfd, 0xdc, 0x2e, 0xfd, 0xf8, 0x09, 0xfd, 0xd8, 0xa5, 0xff, 0xe7, 0x4a, 0xfd, 0x10, 0xfe, 0xfb, 0x92, 0x0c, 0xfe, 0x4c, 0x21, 0xfe, 0xb4, 0xfc, 0xfc, 0x0e, 0xd9, 0xfc, 0xdb, 0xbc, 0xfd, 0x1c, 0x01, 0xff, 0x58, 0x39, 0xff, 0x4e, 0x4c, 0xfe, 0x4f, 0xeb, 0xfd, 0xe7, 0x1b, 0xfe, 0xbe, 0x44, 0x23, 0x96, 0xee, 0x27, 0x46, 0xa8, 0x0c, 0x72, 0x0b, 0x0e, 0x52, 0x55, 0x08, 0xab, 0x42, 0x01, 0x57, 0x5f, 0xf0, 0x6a, 0x73, 0xf5, 0x04, 0xea, 0x08, 0x5e, 0xbc, 0xff, 0xe9, 0x1f, 0xfa, 0x55, 0x98, 0xfc, 0x04, 0x20, 0xfb, 0xc4, 0x6e, 0xff, 0x21, 0x39, 0x01, 0xf8, 0xaa, 0xfd, 0x78, 0xa6, 0xfe, 0x34, 0xb4, 0xfc, 0xef, 0x3b, 0xfc, 0x70, 0xb5, 0xff, 0xb8, 0x2c, 0xfc, 0xa4, 0x0f, 0xfd, 0x0b, 0x53, 0xfe, 0xb9, 0x58, 0xfc, 0xd3, 0x27, 0xfe, 0x9c, 0xfc, 0xfc, 0x81, 0x64, 0xfc, 0x8d, 0x4c, 0xff, 0xd5, 0x0f, 0xff, 0xb3, 0x08, 0xfe, 0x25, 0xf9, 0xfd, 0x01, 0x4c, 0xfe, 0x7c, 0xc3, 0x26, 0xbb, 0x9b, 0x23, 0x7e, 0xf2, 0x08, 0x75, 0x87, 0x17, 0xd3, 0x11, 0x0b, 0xfc, 0x65, 0xfd, 0x54, 0x74, 0xf0, 0xc3, 0x67, 0xf8, 0xc2, 0x5c, 0x06, 0x87, 0x29, 0xfb, 0xcd, 0x38, 0xfe, 0xdd, 0x0c, 0xfe, 0x96, 0xbd, 0xf8, 0xbe, 0xbc, 0xff, 0xc9, 0xae, 0x00, 0x2b, 0x6b, 0xfd, 0x30, 0x70, 0xff, 0xce, 0x11, 0xfc, 0x67, 0x38, 0xfb, 0xca, 0x77, 0xff, 0xc5, 0x3a, 0xfc, 0xc1, 0xef, 0xfc, 0x21, 0x94, 0xfc, 0x65, 0x15, 0xfd, 0x29, 0xd2, 0xfe, 0xfe, 0x6d, 0xfc, 0x6c, 0xc8, 0xfc, 0x7e, 0x71, 0xfe, 0x73, 0xfe, 0xfe, 0x5c, 0x87, 0xfe, 0x44, 0x94, 0xfe, 0x39, 0x86, 0xfd, 0x0d, 0xc8, 0x2b, 0x4a, 0xee, 0x22, 0xdd, 0xcd, 0x02, 0x61, 0xd4, 0x1c, 0xba, 0xbf, 0x0d, 0x36, 0x01, 0xf9, 0xaa, 0xf6, 0xf2, 0x39, 0x22, 0xfe, 0x63, 0x99, 0x02, 0x80, 0x92, 0xf3, 0x8d, 0xdb, 0x01, 0xda, 0x79, 0x02, 0xb9, 0xdb, 0xf6, 0x2d, 0x4c, 0xff, 0xe5, 0xd9, 0xff, 0x61, 0x21, 0xfd, 0x0f, 0xfc, 0x00, 0xc3, 0x48, 0xfb, 0x93, 0xe1, 0xf9, 0x1f, 0xeb, 0x00, 0xd9, 0x2b, 0xfa, 0x19, 0x9d, 0xfb, 0xfb, 0x89, 0xfe, 0x3f, 0x66, 0xfb, 0xdc, 0x4c, 0xff, 0x84, 0x1b, 0xfd, 0x04, 0xa9, 0xfc, 0x7e, 0xb8, 0xfe, 0x9c, 0xd9, 0xfe, 0xce, 0x44, 0xff, 0x3b, 0x68, 0xfe, 0x4d, 0x88, 0xfc, 0x56, 0xd4, 0x30, 0x49, 0xbe, 0x23, 0x86, 0x39, 0xfb, 0x66, 0xae, 0x1f, 0x11, 0x76, 0x12, 0x8c, 0x6f, 0xf4, 0x87, 0xdc, 0xf3, 0x94, 0x99, 0x05, 0xa2, 0xde, 0x00, 0x2f, 0xe5, 0xe9, 0xcb, 0x72, 0x02, 0xae, 0x21, 0x09, 0x0d, 0x55, 0xf6, 0xdc, 0xef, 0xfd, 0x51, 0x0b, 0xff, 0x3a, 0x02, 0xfc, 0xfe, 0x8f, 0x02, 0xc5, 0x20, 0xfb, 0x8d, 0xbd, 0xf9, 0xb9, 0x98, 0xff, 0xab, 0x6b, 0xf8, 0xf5, 0x48, 0xfc, 0x25, 0xe8, 0xfd, 0xa7, 0x25, 0xfb, 0xe5, 0xc4, 0xff, 0xaf, 0xd8, 0xfc, 0x2b, 0xe3, 0xfc, 0xa6, 0xf6, 0xff, 0xf1, 0x0b, 0xff, 0xc0, 0xfa, 0xfd, 0x59, 0x7b, 0xfe, 0x8f, 0xb1, 0xfd, 0x37, 0x6d, 0x35, 0x6d, 0x0b, 0x26, 0x8e, 0x6a, 0xf3, 0x16, 0xc4, 0x1f, 0x37, 0xb4, 0x18, 0x8b, 0x36, 0xf1, 0x27, 0x3d, 0xf3, 0xc6, 0x3d, 0x0d, 0x4f, 0xf5, 0x01, 0x96, 0xc9, 0xe0, 0x31, 0xe6, 0xfe, 0xfe, 0xf8, 0x0f, 0x0f, 0x00, 0xf9, 0xb7, 0xee, 0xfb, 0xf8, 0x49, 0xfe, 0xb7, 0x6b, 0xfa, 0xe8, 0x80, 0x03, 0xef, 0x20, 0xfd, 0x7f, 0x84, 0xf7, 0x87, 0xef, 0xfe, 0x0a, 0xa7, 0xf8, 0x5b, 0xe3, 0xf9, 0x7f, 0x0a, 0xff, 0xce, 0x7d, 0xfb, 0xe8, 0x1b, 0xff, 0x89, 0x43, 0xfd, 0x3e, 0x2a, 0xfd, 0x79, 0x45, 0x01, 0x87, 0xb1, 0xfe, 0xea, 0xf1, 0xfc, 0xea, 0x6b, 0xff, 0x7b, 0x51, 0xfe, 0x9f, 0x32, 0x3b, 0x31, 0xf0, 0x29, 0x05, 0x44, 0xea, 0xb5, 0x2c, 0x1b, 0x56, 0xe4, 0x1f, 0xe4, 0xe5, 0xf1, 0x10, 0x31, 0xf0, 0xd7, 0xe4, 0x11, 0xc4, 0xce, 0x04, 0xb3, 0x0b, 0xdb, 0x1b, 0xae, 0xf8, 0xfd, 0xbb, 0x13, 0xdb, 0x0b, 0xfe, 0x10, 0xe3, 0xfa, 0x88, 0xad, 0xfc, 0x11, 0xa0, 0xf8, 0x3a, 0x21, 0x05, 0xac, 0xe1, 0xfc, 0x46, 0x84, 0xf5, 0x33, 0x3d, 0x00, 0x99, 0x3f, 0xf7, 0xb6, 0x4a, 0xf8, 0x37, 0x3f, 0xff, 0x63, 0x00, 0xfc, 0xf5, 0x51, 0xff, 0xa0, 0x12, 0xfd, 0xaa, 0x56, 0xfd, 0x65, 0x88, 0x01, 0xf5, 0xb7, 0xfe, 0xe7, 0xe9, 0xfc, 0x7e, 0x8f, 0xff, 0x62, 0x3d, 0xfe, 0xf3, 0x6f, 0x41, 0x85, 0x62, 0x2d, 0x6b, 0x0d, 0xe2, 0x12, 0x2b, 0x16, 0x71, 0xe7, 0x24, 0xce, 0x4a, 0xf4, 0x95, 0xad, 0xed, 0xfa, 0x2d, 0x16, 0xf1, 0x9a, 0x07, 0xeb, 0x0e, 0xd7, 0xdf, 0x3e, 0xf2, 0x11, 0xc8, 0x14, 0xe9, 0x6a, 0x04, 0x7d, 0xb2, 0xfb, 0xa6, 0xe3, 0xf9, 0x3c, 0xbc, 0xf7, 0x86, 0xf8, 0x05, 0x4c, 0xd8, 0xfb, 0x3c, 0x7b, 0xf5, 0x75, 0xe6, 0xff, 0x2e, 0x51, 0xf7, 0x0a, 0x26, 0xf7, 0x5e, 0x66, 0xfe, 0x54, 0x33, 0xfd, 0x99, 0xa4, 0xff, 0xf2, 0x27, 0xfd, 0x94, 0xc1, 0xfc, 0x78, 0x9e, 0x01, 0x8e, 0x0a, 0xff, 0x80, 0x6d, 0xfd, 0xba, 0x2f, 0xff, 0x8a, 0x53, 0xfe, 0x76, 0x69, 0x4a, 0x00, 0xbd, 0x2e, 0xf4, 0x86, 0xd9, 0xc7, 0x9c, 0x11, 0xc7, 0x83, 0x27, 0x9c, 0x46, 0xf8, 0x25, 0x30, 0xec, 0x5f, 0x42, 0x19, 0x0a, 0x01, 0x09, 0xea, 0xe2, 0xd4, 0xc2, 0xa0, 0xed, 0xff, 0x89, 0x13, 0x28, 0x53, 0x0a, 0xd2, 0xad, 0xfd, 0x80, 0x68, 0xf7, 0x0b, 0x64, 0xf6, 0x2e, 0xfa, 0x06, 0x60, 0xe1, 0xfa, 0x91, 0xe6, 0xf4, 0x41, 0x56, 0x00, 0xa4, 0xe2, 0xf6, 0x66, 0x01, 0xf7, 0x03, 0x0e, 0xfe, 0x11, 0x93, 0xfd, 0x32, 0x1f, 0x00, 0xad, 0x59, 0xfd, 0x92, 0xd4, 0xfb, 0xfb, 0xca, 0x01, 0xc4, 0xcb, 0xff, 0xcd, 0x59, 0xfd, 0x72, 0x04, 0xff, 0xee, 0x43, 0xfe, 0x7b, 0x70, 0x54, 0x61, 0x21, 0x30, 0x9b, 0x95, 0xcf, 0xe0, 0x73, 0x0c, 0x9c, 0xea, 0x28, 0x38, 0x05, 0xfe, 0xfb, 0x5e, 0xeb, 0x15, 0x34, 0x19, 0xd5, 0xcd, 0x09, 0x6b, 0xb5, 0xd4, 0x0b, 0x80, 0xea, 0x01, 0x76, 0x10, 0xec, 0x3a, 0x0e, 0xf9, 0xc1, 0x00, 0x7f, 0xbf, 0xf5, 0xe3, 0xed, 0xf3, 0x1b, 0x4e, 0x08, 0xd4, 0xca, 0xf9, 0x37, 0xd5, 0xf3, 0xcc, 0xff, 0x00, 0x21, 0x1c, 0xf6, 0xec, 0xd9, 0xf7, 0x88, 0x2e, 0xfd, 0xbd, 0xb8, 0xfd, 0x2b, 0xa4, 0x00, 0x1a, 0xe0, 0xfc, 0x48, 0x30, 0xfb, 0xdf, 0x21, 0x02, 0xd9, 0x4f, 0x00, 0x12, 0xc7, 0xfc, 0xd7, 0xd1, 0xfe, 0xa4, 0x0a, 0xfe, 0x65, 0x06, 0x5d, 0x10, 0x64, 0x33, 0x48, 0xc9, 0xc5, 0x82, 0xd7, 0x08, 0x07, 0xbf, 0x28, 0x22, 0x89, 0x03, 0xeb, 0x03, 0xec, 0xd8, 0xf8, 0x17, 0xe9, 0xea, 0x0c, 0x98, 0x16, 0xd5, 0x60, 0xe1, 0xe7, 0xca, 0x00, 0x0d, 0x61, 0x7b, 0x10, 0xa0, 0x7d, 0x05, 0x53, 0xe1, 0xf4, 0x15, 0xc9, 0xf1, 0x50, 0x63, 0x09, 0x33, 0x10, 0xf9, 0x6d, 0x7b, 0xf3, 0xca, 0xf7, 0x01, 0x32, 0xc8, 0xf5, 0x0d, 0x42, 0xf8, 0xb1, 0x3f, 0xfd, 0x54, 0xb7, 0xfd, 0x38, 0xd2, 0x00, 0x30, 0x83, 0xfc, 0x73, 0x6d, 0xfb, 0xf8, 0xd2, 0x02, 0x90, 0xe2, 0xff, 0x8b, 0x5c, 0xfc, 0x6c, 0x2e, 0xff, 0xd2, 0x0d, 0xfe, 0xaa, 0x13, 0x67, 0x4d, 0x49, 0x32, 0xf4, 0xb1, 0xbd, 0xc8, 0xc0, 0x08, 0x7b, 0x07, 0x26, 0x91, 0x41, 0x05, 0x37, 0x73, 0xed, 0xa4, 0x54, 0x17, 0xcf, 0x01, 0x11, 0xb2, 0x5a, 0xd4, 0x0b, 0x71, 0xe4, 0xce, 0xbc, 0x0a, 0x05, 0xef, 0x10, 0xd0, 0x8c, 0x09, 0xca, 0x12, 0xf4, 0x75, 0x1a, 0xf1, 0x90, 0x1b, 0x09, 0x1c, 0x09, 0xf7, 0xab, 0xeb, 0xf4, 0x49, 0xcb, 0x02, 0x1f, 0x81, 0xf4, 0x99, 0x0a, 0xf8, 0xee, 0x2e, 0xfe, 0x2f, 0x0b, 0xfd, 0xb0, 0x75, 0x00, 0x0b, 0x4b, 0xfc, 0x17, 0x2f, 0xfc, 0xc4, 0x3a, 0x03, 0x48, 0x61, 0xfe, 0x9e, 0x7b, 0xfc, 0x88, 0x61, 0xff, 0x1d, 0x11, 0xfe, 0xf2, 0x29, 0x6d, 0x4d, 0xe4, 0x34, 0xd7, 0x91, 0xb6, 0x33, 0x10, 0x0a, 0x91, 0x09, 0x22, 0x8c, 0xa0, 0x04, 0x3a, 0xfc, 0xee, 0xe8, 0xf2, 0x15, 0xe8, 0x33, 0x19, 0x43, 0xb2, 0xd3, 0x30, 0x4d, 0xde, 0x42, 0x8a, 0x09, 0x57, 0x6a, 0x11, 0xd8, 0x60, 0x0b, 0xaf, 0xb0, 0xf5, 0x6d, 0x72, 0xf1, 0x8b, 0x7d, 0x06, 0x7e, 0x75, 0xf6, 0x87, 0x04, 0xf7, 0x64, 0xe0, 0x02, 0x10, 0x8c, 0xf3, 0x66, 0xdd, 0xf7, 0x70, 0xe3, 0xfe, 0x97, 0x10, 0xfc, 0x5f, 0x0d, 0x00, 0x71, 0xe0, 0xfc, 0xd4, 0xa5, 0xfc, 0x17, 0x5f, 0x03, 0x62, 0x11, 0xfd, 0x7e, 0xb2, 0xfc, 0x7b, 0xba, 0xff, 0x4e, 0xa6, 0xfd, 0xe4, 0xf5, 0x73, 0xc1, 0xef, 0x33, 0x98, 0x8a, 0xb2, 0x1e, 0x9b, 0x0d, 0x62, 0x9e, 0x1c, 0x09, 0xb2, 0x01, 0x3f, 0xe7, 0xee, 0x17, 0x5a, 0x16, 0xf7, 0x2d, 0x22, 0xa2, 0xa1, 0xd2, 0x52, 0xe8, 0xd7, 0xb0, 0x04, 0x09, 0x59, 0x99, 0x11, 0x46, 0x10, 0x0b, 0x58, 0x33, 0xf9, 0xbe, 0xd7, 0xf1, 0x86, 0x18, 0x03, 0x83, 0x35, 0xf7, 0x88, 0x78, 0xf8, 0x84, 0xa1, 0x02, 0xb3, 0x5b, 0xf2, 0x35, 0xc2, 0xf8, 0xf7, 0xe6, 0xfe, 0x41, 0x8c, 0xfa, 0x93, 0xf3, 0xff, 0x36, 0xc3, 0xfd, 0x12, 0x07, 0xfd, 0x98, 0x28, 0x03, 0x47, 0x3e, 0xfc, 0xe0, 0x90, 0xfc, 0x0c, 0x59, 0x00, 0x19, 0x8e, 0xfc, 0xae, 0x9c, 0x78, 0x4c, 0xe0, 0x33, 0x46, 0xef, 0xb0, 0x55, 0x45, 0x11, 0xff, 0x28, 0x17, 0x3f, 0x6d, 0xfe, 0x7b, 0x6d, 0xec, 0xd1, 0x9b, 0x17, 0x11, 0xbb, 0x2b, 0x0c, 0x35, 0xd2, 0x87, 0xb6, 0xd2, 0x80, 0xc5, 0x07, 0x84, 0x15, 0x11, 0x79, 0x05, 0x0a, 0x4c, 0x77, 0xfe, 0x18, 0x21, 0xf1, 0x30, 0x6b, 0x00, 0x7c, 0x95, 0xf9, 0xd5, 0x10, 0xf8, 0x7e, 0x9a, 0x02, 0x1a, 0xab, 0xf1, 0xb7, 0x37, 0xfa, 0x49, 0x52, 0xfe, 0x2f, 0x2b, 0xf9, 0x8d, 0xab, 0xff, 0x8a, 0xec, 0xfe, 0x6f, 0x8c, 0xfd, 0xcb, 0x60, 0x02, 0x93, 0x4f, 0xfc, 0x22, 0x48, 0xfc, 0x9f, 0x7e, 0x00, 0x3f, 0xef, 0xfa, 0xb5, 0x2e, 0x7a, 0x67, 0x39, 0x36, 0x68, 0xfd, 0xb0, 0xf4, 0x61, 0x13, 0x77, 0x2c, 0x13, 0xd8, 0x0a, 0xfc, 0x4f, 0xbc, 0xe7, 0x5c, 0xe7, 0x17, 0x58, 0x47, 0x34, 0x16, 0xca, 0xd3, 0xa9, 0x3b, 0xd0, 0x16, 0x62, 0x04, 0x76, 0x0a, 0x10, 0x2d, 0xc3, 0x08, 0x6a, 0xd5, 0x03, 0x1a, 0xbd, 0xf0, 0x90, 0xfb, 0xfd, 0xa1, 0xee, 0xfc, 0xbe, 0x9d, 0xf6, 0x7b, 0x1e, 0x02, 0xc0, 0x45, 0xf2, 0xfd, 0x93, 0xfb, 0x09, 0x21, 0xfd, 0x05, 0x40, 0xf8, 0xe0, 0x55, 0xff, 0xca, 0xf5, 0xff, 0x61, 0xf1, 0xfd, 0x65, 0x36, 0x01, 0x37, 0x8e, 0xfd, 0xe3, 0x4d, 0xfb, 0x87, 0x70, 0xff, 0xa6, 0x6e, 0xfa, 0x50, 0x14, 0x7c, 0xf1, 0x43, 0x39, 0xba, 0x02, 0xb1, 0x31, 0x0e, 0x13, 0xf7, 0xf5, 0x10, 0x3c, 0xbf, 0xfa, 0x2c, 0x65, 0xe1, 0x39, 0x33, 0x17, 0x99, 0xb1, 0x3a, 0x49, 0x17, 0xd7, 0x10, 0xde, 0xcf, 0xd3, 0x00, 0xff, 0x67, 0x41, 0x0f, 0xca, 0x62, 0x08, 0x4f, 0x67, 0x07, 0xa9, 0xb1, 0xf1, 0x16, 0x12, 0xfc, 0x3b, 0x26, 0xff, 0x33, 0xaf, 0xf5, 0x83, 0x0c, 0x01, 0x25, 0x90, 0xf3, 0x25, 0x3c, 0xfc, 0xa7, 0xe3, 0xfb, 0xdc, 0xcd, 0xf7, 0xf1, 0x07, 0xff, 0x47, 0x7d, 0x00, 0x78, 0x04, 0xfe, 0x51, 0x0d, 0x01, 0x5d, 0x21, 0xfe, 0x74, 0x80, 0xf9, 0x67, 0xd5, 0xfe, 0xb0, 0x7c, 0xfa, 0x2f, 0x3c, 0x7d, 0x96, 0x0c, 0x3b, 0x45, 0x50, 0xb3, 0x2c, 0x8a, 0x11, 0xa4, 0xc3, 0x0f, 0x79, 0xe6, 0xf9, 0xcc, 0x9d, 0xdb, 0x0d, 0x1b, 0x15, 0x43, 0x60, 0x3d, 0xd3, 0x28, 0xdd, 0xe6, 0x2c, 0xd1, 0x70, 0xd1, 0xf8, 0x45, 0x01, 0x0e, 0x8d, 0x21, 0x09, 0x47, 0x61, 0x08, 0x0c, 0x7f, 0xf3, 0xbc, 0xd0, 0xfb, 0x2c, 0x37, 0xff, 0x9e, 0x05, 0xf6, 0xfd, 0x0e, 0x00, 0x9a, 0x02, 0xf5, 0x8d, 0x39, 0xfc, 0xf5, 0xec, 0xfa, 0x1b, 0xbf, 0xf7, 0x64, 0x8a, 0xfe, 0xd2, 0x68, 0x00, 0xa0, 0x8d, 0xfe, 0xb8, 0xd4, 0x00, 0x45, 0x9d, 0xfc, 0x0a, 0x94, 0xf9, 0x12, 0xd4, 0xfd, 0x10, 0x52, 0xfa, 0x76, 0x6b, 0x7b, 0x40, 0x49, 0x3f, 0xa9, 0xe4, 0xb6, 0x99, 0xf5, 0x0e, 0x52, 0x96, 0x0f, 0x68, 0x49, 0xf8, 0xfd, 0xcb, 0xd8, 0xd6, 0x0f, 0x0f, 0x28, 0x87, 0x3e, 0x98, 0x57, 0xe6, 0xc1, 0x86, 0xd2, 0x1c, 0xcf, 0xf2, 0x63, 0x2c, 0x0c, 0x46, 0xf5, 0x0a, 0x15, 0x78, 0x07, 0x0e, 0xf8, 0xf5, 0x07, 0x31, 0xfd, 0xe1, 0xaf, 0xfd, 0x52, 0xd6, 0xf6, 0x7a, 0x6e, 0x00, 0x1d, 0xd3, 0xf5, 0x6d, 0xad, 0xfb, 0x68, 0x78, 0xfa, 0x04, 0x4f, 0xf7, 0x36, 0x71, 0xfe, 0xdf, 0xb8, 0x00, 0x1c, 0xd1, 0xfd, 0x2b, 0xdb, 0xff, 0xd4, 0xfc, 0xfb, 0xb0, 0xcf, 0xf9, 0xd4, 0xfa, 0xfc, 0x16, 0x70, 0xfb, 0x5d, 0x62, 0x77, 0x1e, 0x1a, 0x45, 0x63, 0xd2, 0xbb, 0x57, 0xe9, 0x0b, 0xba, 0x14, 0x0f, 0xaf, 0xf1, 0xf6, 0xf9, 0x08, 0xd9, 0x2e, 0x0a, 0x05, 0x9e, 0x9f, 0x3e, 0xe2, 0x37, 0xf1, 0x78, 0xe6, 0xd3, 0x81, 0xbb, 0xee, 0x8f, 0x1e, 0x09, 0x7f, 0x0a, 0x0d, 0x4d, 0x95, 0x05, 0x7c, 0xd0, 0xf8, 0xf2, 0xef, 0xff, 0xb0, 0xf3, 0xfa, 0x35, 0xad, 0xf8, 0x9b, 0x54, 0x01, 0x7a, 0x45, 0xf6, 0x9b, 0xb5, 0xfa, 0xa8, 0xe2, 0xf9, 0x4a, 0x68, 0xf7, 0x3b, 0xed, 0xfe, 0x7f, 0xaf, 0xff, 0xb5, 0xad, 0xfb, 0x02, 0xd7, 0x00, 0x63, 0xed, 0xfa, 0x40, 0x5f, 0xfa, 0xe5, 0xef, 0xfd, 0x29, 0x38, 0xfb, 0xe4, 0x8a, 0x71, 0x65, 0xd3, 0x4b, 0x6a, 0x42, 0xc2, 0xc4, 0x46, 0x07, 0xaf, 0x23, 0x0d, 0x52, 0x05, 0xf8, 0xcf, 0xde, 0xdb, 0x15, 0x4d, 0xf7, 0xd2, 0xcb, 0x3c, 0xd1, 0x9f, 0xfc, 0x17, 0xee, 0xd5, 0x1d, 0x5c, 0xed, 0xb8, 0x6f, 0x04, 0x22, 0x75, 0x0d, 0x40, 0xa7, 0x04, 0xe9, 0xcc, 0xfa, 0xb1, 0xb1, 0x03, 0xd5, 0x74, 0xf8, 0x5d, 0x23, 0xfa, 0x34, 0xcd, 0x02, 0xa0, 0x16, 0xf6, 0x67, 0x6d, 0xf9, 0x0d, 0x8e, 0xf9, 0xe5, 0x45, 0xf8, 0x4e, 0x05, 0xfd, 0x86, 0x5c, 0xfe, 0x84, 0xb8, 0xfa, 0x32, 0x6a, 0x01, 0xca, 0x09, 0xfb, 0xf7, 0x5e, 0xfb, 0x75, 0x18, 0xfe, 0xb8, 0x8d, 0xfa, 0xaf, 0xd2, 0x6b, 0xc4, 0x3e, 0x4e, 0x49, 0xf3, 0xcb, 0x81, 0x40, 0x05, 0x0e, 0xc7, 0x08, 0xe1, 0xe7, 0xf9, 0x9d, 0xea, 0xdc, 0xad, 0xbe, 0xea, 0x5a, 0x64, 0x3a, 0xcf, 0x19, 0x07, 0xfb, 0xe6, 0xd7, 0xbc, 0x1e, 0xee, 0xa7, 0x84, 0xff, 0x4a, 0x09, 0x0a, 0x55, 0xdd, 0x07, 0x8f, 0x87, 0xfa, 0x8f, 0x2d, 0x07, 0xa4, 0xc4, 0xf8, 0x06, 0xc3, 0xf8, 0x11, 0xbc, 0x05, 0x73, 0x1a, 0xf5, 0x5b, 0x98, 0xf8, 0x7e, 0x9e, 0xf9, 0xb0, 0xb5, 0xf6, 0xa6, 0x06, 0xfb, 0x3d, 0xfb, 0xfd, 0xd1, 0xfb, 0xf9, 0xc4, 0x94, 0x02, 0xa2, 0x4a, 0xfc, 0x9b, 0x69, 0xfa, 0x19, 0xfa, 0xfe, 0xb1, 0xba, 0xfa, 0x4a, 0x1d, 0x64, 0xf5, 0x6e, 0x4f, 0x79, 0xfd, 0xd7, 0x39, 0x08, 0x05, 0x6e, 0x6a, 0x04, 0x37, 0x9f, 0xfb, 0x4e, 0x1f, 0xdd, 0x8a, 0xd6, 0xde, 0x22, 0x16, 0x37, 0x34, 0x55, 0x12, 0xe7, 0x79, 0xd9, 0x02, 0x32, 0xef, 0x40, 0x15, 0xfd, 0xe3, 0x5a, 0x02, 0xa2, 0x75, 0x0d, 0x8d, 0xf6, 0xfa, 0xf6, 0x3f, 0x07, 0x6f, 0xcb, 0xfd, 0xfa, 0x6c, 0xf5, 0x12, 0x4d, 0x07, 0x58, 0xc5, 0xf6, 0x94, 0x60, 0xf6, 0xca, 0x27, 0xf9, 0xc5, 0x8b, 0xf5, 0x68, 0x7d, 0xf8, 0xcf, 0xa6, 0xfe, 0x04, 0x7e, 0xfa, 0x58, 0x96, 0x02, 0xbd, 0x03, 0xfe, 0xa4, 0x74, 0xf9, 0x44, 0xbb, 0xff, 0xd4, 0x45, 0xfa, 0x7c, 0x60, 0x5d, 0xfb, 0xf1, 0x50, 0xb1, 0x93, 0xe3, 0xa2, 0xdf, 0x01, 0x0a, 0x99, 0xfe, 0x2f, 0xc3, 0xff, 0xa3, 0x56, 0xe1, 0x32, 0x3a, 0xd4, 0x74, 0x72, 0x2e, 0xa6, 0xe7, 0x1c, 0xc8, 0x46, 0xdc, 0xcb, 0xed, 0xef, 0x4f, 0xa0, 0xff, 0x48, 0x42, 0xf8, 0x04, 0xc8, 0x0f, 0x48, 0xd7, 0xff, 0x77, 0x2e, 0x04, 0x4e, 0x58, 0x03, 0xce, 0xe4, 0xf4, 0x07, 0xcd, 0x04, 0xd7, 0xac, 0xf9, 0xae, 0x15, 0xf5, 0xd6, 0xc1, 0xf7, 0x6f, 0x8e, 0xf5, 0x4d, 0x09, 0xf7, 0x8a, 0xb8, 0xfe, 0xf1, 0xf3, 0xfb, 0x87, 0x81, 0x01, 0xda, 0x9d, 0xff, 0xb3, 0x0d, 0xf9, 0xce, 0xe7, 0xfe, 0x6e, 0x58, 0xfb, 0xd2, 0x27, 0x59, 0xd5, 0x19, 0x51, 0x9d, 0x14, 0xe7, 0xaa, 0xcf, 0x04, 0x78, 0x38, 0x00, 0x9c, 0x4d, 0xf9, 0xee, 0xfb, 0xe4, 0x07, 0xea, 0xd2, 0x72, 0xba, 0x21, 0x1d, 0xd5, 0x24, 0xf0, 0xd3, 0xe1, 0x6c, 0x6d, 0xed, 0xf6, 0x0d, 0x05, 0x10, 0x0a, 0xf1, 0x64, 0x0a, 0x0d, 0x43, 0x98, 0x07, 0x39, 0x2d, 0x01, 0x1a, 0xc7, 0x04, 0xe8, 0x9c, 0xf7, 0x47, 0x57, 0x00, 0x2b, 0x6f, 0xfc, 0x2c, 0xe6, 0xf5, 0xdd, 0x62, 0xf5, 0xad, 0x2d, 0xf8, 0x73, 0x37, 0xf5, 0x43, 0x12, 0xfe, 0xd3, 0x79, 0xfd, 0xd2, 0x4c, 0x00, 0x76, 0x75, 0xff, 0x16, 0xb5, 0xf9, 0x1b, 0x4a, 0xfe, 0x0c, 0xcb, 0xfb, 0x83, 0xfa, 0x5a, 0x1e, 0x1c, 0x4d, 0xab, 0xc0, 0xe4, 0x4d, 0x78, 0x0a, 0xd7, 0x13, 0x03, 0x51, 0xd7, 0xf0, 0xac, 0x57, 0xe5, 0x9a, 0x5f, 0xd9, 0x46, 0xb8, 0x15, 0x7a, 0x34, 0x26, 0xcb, 0x50, 0xe9, 0xd3, 0x92, 0xea, 0xfa, 0x2a, 0x0a, 0xeb, 0x7b, 0xee, 0xff, 0x3b, 0x09, 0xce, 0xe4, 0x0a, 0x74, 0xac, 0x00, 0xe5, 0x94, 0x03, 0x11, 0xc8, 0xf9, 0xf3, 0x5b, 0xff, 0x0f, 0x0c, 0xfb, 0x5f, 0x61, 0xf9, 0xb4, 0xb5, 0xf4, 0x02, 0x3e, 0xfa, 0xcd, 0x7b, 0xf5, 0xe7, 0xe3, 0xfa, 0xb7, 0x3b, 0xfe, 0x18, 0x36, 0xff, 0xba, 0xf5, 0xff, 0xcc, 0xac, 0xf9, 0xe6, 0x94, 0xfd, 0x29, 0x32, 0xfc, 0xe1, 0x54, 0x5a, 0xe1, 0x5a, 0x4b, 0x6a, 0x75, 0xe2, 0x32, 0x07, 0x0f, 0x34, 0x31, 0x06, 0xb9, 0x0b, 0xea, 0x62, 0xa6, 0xe7, 0xbf, 0x91, 0xde, 0x26, 0x42, 0x0a, 0x12, 0x89, 0x25, 0xf3, 0xe8, 0xf3, 0x65, 0x43, 0xe6, 0x8b, 0x9b, 0x0e, 0x66, 0x2f, 0xef, 0x25, 0x9c, 0x03, 0x0a, 0x74, 0x0e, 0x68, 0xf7, 0xfb, 0x8d, 0x25, 0x06, 0x0f, 0x09, 0xfb, 0x6e, 0xb5, 0xfc, 0x48, 0x17, 0xfe, 0x24, 0x34, 0xfc, 0x5d, 0x71, 0xf5, 0xb1, 0xb8, 0xfb, 0x7e, 0x1d, 0xf6, 0x14, 0x2d, 0xf7, 0x89, 0xf3, 0xfd, 0x80, 0xf3, 0xfd, 0x97, 0x72, 0x01, 0x60, 0x16, 0xfa, 0xa0, 0x17, 0xfb, 0x90, 0x1b, 0xfd, 0x02, 0x57, 0x5d, 0x39, 0x77, 0x43, 0x32, 0x0d, 0xe1, 0xa8, 0xc9, 0x15, 0x3f, 0x19, 0x04, 0xb9, 0x1b, 0xe7, 0xac, 0x36, 0xea, 0x1a, 0xd5, 0xe1, 0x62, 0xe6, 0x00, 0x3b, 0xc0, 0x25, 0xb1, 0xbe, 0xfb, 0x5d, 0x17, 0xe3, 0xf4, 0xb6, 0x0f, 0xbf, 0x6e, 0xf4, 0x0c, 0xfa, 0xfc, 0x6f, 0xad, 0x0d, 0x69, 0x69, 0xfd, 0x34, 0xc2, 0x00, 0x6e, 0x24, 0xff, 0x17, 0x6c, 0xfd, 0xe0, 0xe9, 0xff, 0x8a, 0x7c, 0xff, 0x56, 0xe6, 0xf4, 0xb2, 0x03, 0xfc, 0x63, 0x02, 0xf8, 0xa7, 0xc2, 0xf5, 0x48, 0x14, 0xfa, 0x9a, 0x63, 0xfe, 0x52, 0xc6, 0x00, 0x2b, 0xe2, 0xfa, 0x90, 0x98, 0xfa, 0x94, 0x9b, 0xfc, 0x8c, 0x16, 0x5f, 0xd0, 0x7f, 0x40, 0x02, 0xfb, 0xd8, 0xeb, 0xb5, 0x1b, 0xcb, 0x55, 0x09, 0xf1, 0x31, 0xdf, 0xb6, 0x17, 0xeb, 0x30, 0x49, 0xeb, 0xbc, 0x51, 0xfa, 0xd0, 0x28, 0x1d, 0x5e, 0x50, 0x07, 0xab, 0x2b, 0xe2, 0xd4, 0xc3, 0x0b, 0x7d, 0x6d, 0xfb, 0x52, 0xa3, 0xf8, 0x61, 0x6b, 0x0b, 0x5c, 0xee, 0xfd, 0x21, 0xac, 0xfc, 0x9b, 0xcf, 0x01, 0x1b, 0xda, 0x02, 0x14, 0xd0, 0xfe, 0xde, 0x65, 0x01, 0x06, 0x44, 0xf6, 0xd8, 0x90, 0xfa, 0x93, 0x90, 0xfa, 0x92, 0x86, 0xf5, 0x63, 0xe4, 0xf7, 0xf9, 0x34, 0xfc, 0xe9, 0x1f, 0xff, 0xde, 0xc5, 0xfb, 0x8a, 0xe5, 0xfc, 0xc5, 0x46, 0xfc, 0x59, 0x5f, 0x60, 0x51, 0x70, 0x3c, 0xf1, 0x07, 0xd0, 0x86, 0x28, 0x24, 0x94, 0x48, 0x0e, 0x78, 0xc2, 0xd5, 0xca, 0x7d, 0xed, 0x0d, 0x60, 0xf5, 0xc2, 0xbe, 0xf4, 0x49, 0x2e, 0x13, 0x21, 0x2c, 0x11, 0xb1, 0x01, 0xe3, 0x0a, 0xbe, 0x06, 0x1f, 0x3d, 0x01, 0x27, 0x11, 0xf5, 0xcb, 0xcd, 0x09, 0xca, 0xc7, 0xfe, 0x28, 0x51, 0xfb, 0xad, 0x10, 0x03, 0xa1, 0x65, 0x04, 0x79, 0xe0, 0x00, 0xde, 0x17, 0x02, 0x28, 0xd6, 0xf6, 0x0f, 0xbd, 0xfa, 0x64, 0x09, 0xfb, 0xee, 0x38, 0xf6, 0x8d, 0x23, 0xf8, 0xc8, 0xca, 0xf9, 0x2a, 0x17, 0xfb, 0xdd, 0x06, 0xfd, 0x69, 0xa2, 0xff, 0xe5, 0xaa, 0xfc, 0x61, 0xdc, 0x61, 0xaf, 0xcc, 0x34, 0x40, 0x24, 0xca, 0x06, 0x5d, 0x2e, 0xe8, 0xc5, 0x0e, 0x17, 0xb1, 0xcf, 0x3c, 0x37, 0xf1, 0xb0, 0x47, 0xfc, 0xdc, 0x0b, 0xf2, 0x9e, 0x5e, 0x09, 0x3a, 0xb3, 0x16, 0xe6, 0xa4, 0xe6, 0xcd, 0x74, 0x03, 0x64, 0x91, 0x02, 0x05, 0x4a, 0xf2, 0x27, 0x7a, 0x0b, 0x32, 0x8a, 0x00, 0xb5, 0xd3, 0xf8, 0x2d, 0x90, 0x05, 0x4c, 0x86, 0x02, 0x8a, 0x3c, 0x01, 0x3f, 0x79, 0x06, 0x8d, 0x1b, 0xf5, 0xd5, 0xb7, 0xfb, 0xed, 0xcd, 0xfb, 0xfe, 0xfe, 0xf4, 0xb2, 0xca, 0xfa, 0x55, 0xf7, 0xf8, 0xdf, 0xbd, 0xf6, 0xd8, 0xe9, 0xfc, 0xb2, 0xf3, 0x00, 0x9c, 0xc3, 0xfd, 0xb2, 0x1c, 0x62, 0xda, 0x19, 0x2b, 0x90, 0x0c, 0xc9, 0xf8, 0xe8, 0x37, 0xd6, 0x96, 0x0b, 0x49, 0x90, 0xcd, 0x32, 0xd1, 0xf5, 0x98, 0x41, 0x01, 0xb1, 0x13, 0xed, 0x91, 0x43, 0x03, 0x36, 0xc2, 0x1c, 0x0b, 0x2c, 0xe7, 0x92, 0x7a, 0xff, 0xed, 0xa7, 0x06, 0x65, 0x2f, 0xf1, 0x98, 0xb8, 0x08, 0xc7, 0x04, 0x06, 0xa4, 0xba, 0xf8, 0x98, 0x9c, 0x02, 0x5e, 0x85, 0x03, 0x4c, 0x13, 0x00, 0x3f, 0x92, 0x07, 0x9f, 0x75, 0xf8, 0x30, 0x8d, 0xf9, 0x06, 0x80, 0xfd, 0xea, 0x6b, 0xf5, 0xb2, 0xf8, 0xf9, 0xad, 0x01, 0xfc, 0x2f, 0x7d, 0xf4, 0x87, 0x57, 0xfa, 0x16, 0x0a, 0x01, 0x1e, 0x0a, 0xff, 0xc2, 0xb1, 0x5d, 0x25, 0x85, 0x23, 0x2e, 0x09, 0xce, 0x7c, 0xf1, 0x3b, 0xa4, 0xb9, 0x06, 0x09, 0x83, 0xd1, 0xad, 0x2c, 0xfa, 0x3f, 0xd6, 0xff, 0x04, 0xb7, 0xea, 0x79, 0xde, 0x01, 0x55, 0x0e, 0x1e, 0x73, 0xb9, 0xe6, 0xe6, 0x7f, 0xfd, 0xf1, 0x27, 0x0b, 0xed, 0x95, 0xf0, 0x96, 0xe9, 0x04, 0xc1, 0x72, 0x0a, 0x90, 0xe1, 0xf9, 0x3b, 0x16, 0x00, 0x2a, 0x38, 0x03, 0x41, 0x31, 0xff, 0x26, 0x83, 0x07, 0x55, 0x33, 0xfa, 0x60, 0x88, 0xf9, 0x5a, 0xd4, 0xfe, 0xed, 0x35, 0xf6, 0xfa, 0x0c, 0xf9, 0x6e, 0x61, 0xfd, 0x7e, 0xe8, 0xf5, 0x64, 0xa4, 0xf8, 0x6e, 0xc8, 0xfe, 0xd5, 0x5b, 0xff, 0x15, 0xab, 0x55, 0x76, 0x55, 0x1f, 0x8e, 0xe1, 0xd5, 0xc8, 0x46, 0x3a, 0xa3, 0x56, 0x05, 0x7b, 0x8e, 0xd7, 0xb7, 0x13, 0xfa, 0x9f, 0xeb, 0xff, 0xf3, 0xd1, 0xeb, 0x2d, 0xc5, 0xfd, 0x65, 0x99, 0x1d, 0x51, 0x7b, 0xea, 0xa4, 0x98, 0xfa, 0x3d, 0x8e, 0x0c, 0xbd, 0x03, 0xf4, 0xbe, 0xcc, 0x01, 0x87, 0x31, 0x0a, 0x87, 0xc2, 0xfb, 0x09, 0x12, 0x01, 0x13, 0x50, 0x01, 0xe7, 0xd3, 0xfd, 0xaf, 0x79, 0x08, 0xc0, 0x31, 0xf9, 0x5b, 0xa6, 0xfa, 0x80, 0x09, 0x01, 0x6d, 0x3b, 0xf6, 0x70, 0xa3, 0xf9, 0x23, 0xce, 0xfd, 0x8f, 0x30, 0xf7, 0xde, 0x56, 0xf9, 0x41, 0x53, 0xfd, 0x89, 0xde, 0xfd, 0x34, 0xe6, 0x4b, 0x26, 0x43, 0x1e, 0xb4, 0x9d, 0xdc, 0xe9, 0x27, 0x36, 0x93, 0x91, 0x07, 0x73, 0x9e, 0xda, 0x14, 0x25, 0xfa, 0x8a, 0x38, 0x02, 0x68, 0xf6, 0xeb, 0x8f, 0xea, 0xf9, 0x61, 0xff, 0x1c, 0xa0, 0x0d, 0xef, 0xf6, 0x61, 0xf7, 0xf1, 0x7f, 0x0d, 0xa9, 0xb5, 0xf7, 0x47, 0x78, 0xfe, 0x47, 0xd0, 0x09, 0xea, 0x84, 0xfd, 0xf3, 0x8e, 0x00, 0xbe, 0xe0, 0x01, 0x8f, 0x0a, 0xfd, 0xa8, 0x64, 0x06, 0x60, 0x2a, 0xfb, 0xfb, 0xc9, 0xf9, 0x6c, 0x74, 0x01, 0x65, 0x07, 0xf9, 0xb1, 0x68, 0xf9, 0xbc, 0xa1, 0xfe, 0xf6, 0xf1, 0xf7, 0x11, 0x07, 0xfa, 0x81, 0xd8, 0xfd, 0x53, 0x0e, 0xfd, 0x79, 0x81, 0x3d, 0xb0, 0x0e, 0x17, 0x6e, 0xcf, 0xea, 0x6f, 0xe4, 0x36, 0xc0, 0x3f, 0x04, 0x0d, 0x2c, 0xdc, 0x51, 0xf6, 0xff, 0xaf, 0x9e, 0x01, 0x72, 0x85, 0xf1, 0x49, 0x13, 0x00, 0x4b, 0x56, 0x09, 0xb7, 0xe9, 0xf1, 0xed, 0xa4, 0x06, 0x3e, 0x78, 0x08, 0x79, 0x3e, 0xf6, 0xfb, 0x7d, 0xfe, 0x59, 0x9f, 0x04, 0xe4, 0x86, 0xfd, 0x22, 0x73, 0xfc, 0x8a, 0xe2, 0x00, 0x38, 0x44, 0xff, 0xcd, 0x0c, 0x00, 0x81, 0x16, 0xfe, 0xc6, 0xe3, 0x02, 0xc9, 0x3b, 0x03, 0xa9, 0xaa, 0x00, 0xcc, 0x1a, 0x01, 0x8d, 0x43, 0xfe, 0xb4, 0xe8, 0xfb, 0x9c, 0x41, 0xfe, 0x92, 0x87, 0xfc, 0xe5, 0x3c, 0xfa, 0x82, 0x81, 0x34, 0x04, 0xc7, 0x16, 0x36, 0x7d, 0xf0, 0x95, 0x1f, 0x2f, 0x3e, 0xff, 0x05, 0x0a, 0x05, 0xe3, 0x77, 0x2b, 0xff, 0x8b, 0x4e, 0x00, 0x6a, 0x6e, 0xf3, 0xf3, 0x19, 0x00, 0x4e, 0xa1, 0x08, 0x21, 0x84, 0xf4, 0x0b, 0xa9, 0x04, 0x59, 0x7f, 0x07, 0x8d, 0x4c, 0xf8, 0x7c, 0x6f, 0xfd, 0xe4, 0x2c, 0x03, 0xf6, 0x55, 0xfe, 0xf6, 0xe5, 0xfc, 0x67, 0xef, 0xff, 0xc7, 0x94, 0xff, 0xc6, 0x4e, 0x01, 0x9c, 0x86, 0xfe, 0x13, 0x66, 0x01, 0x6b, 0x3d, 0x03, 0x15, 0xc9, 0x00, 0xc9, 0xf7, 0xff, 0xbc, 0x67, 0xfe, 0x39, 0xba, 0xfc, 0xc9, 0xd4, 0xfd, 0x3f, 0x26, 0xfd, 0x9d, 0x38, 0xfc, 0xe1, 0x16, 0x2d, 0xfa, 0xa5, 0x16, 0xf1, 0xca, 0xf4, 0x97, 0x3f, 0x28, 0xf6, 0x5e, 0x08, 0xc5, 0x43, 0xe8, 0xc5, 0x23, 0xfe, 0x48, 0x43, 0x00, 0x27, 0x67, 0xf5, 0xa9, 0xcf, 0xff, 0x5a, 0x26, 0x08, 0xe7, 0x31, 0xf7, 0xb1, 0x7a, 0x02, 0xe3, 0xed, 0x06, 0x7a, 0x92, 0xfa, 0x1a, 0x71, 0xfc, 0xd6, 0x91, 0x02, 0x8c, 0x0a, 0xff, 0x60, 0x49, 0xfd, 0x93, 0xe5, 0xff, 0x80, 0x20, 0x00, 0x01, 0x97, 0x01, 0x48, 0xa8, 0xfe, 0x4f, 0x67, 0x01, 0x4a, 0x41, 0x02, 0x9e, 0x29, 0x00, 0x25, 0xa9, 0x00, 0xc9, 0x0a, 0xff, 0xc2, 0xe3, 0xfc, 0x60, 0xdf, 0xfd, 0xa4, 0xec, 0xfd, 0x63, 0x67, 0xfd, 0x06, 0x04, 0x27, 0x1c, 0x19, 0x16, 0xbd, 0x66, 0xf7, 0x1b, 0xf9, 0x22, 0x3c, 0xea, 0x09, 0xfd, 0x47, 0xec, 0x52, 0x26, 0xfe, 0xa8, 0x6a, 0x00, 0x08, 0x34, 0xf7, 0x43, 0x9a, 0xff, 0x06, 0xd0, 0x07, 0x32, 0xb8, 0xf8, 0x51, 0xf2, 0x00, 0xbd, 0xa6, 0x06, 0x5b, 0x86, 0xfb, 0xa3, 0x38, 0xfc, 0x43, 0x3c, 0x02, 0xd0, 0xad, 0xff, 0xf4, 0xa0, 0xfd, 0x8f, 0x19, 0x00, 0xef, 0xda, 0x00, 0xdf, 0xea, 0x00, 0xd3, 0x0d, 0xff, 0xb0, 0x39, 0x01, 0x75, 0x32, 0x01, 0x7b, 0x37, 0x00, 0xdb, 0x3d, 0x01, 0xcb, 0xbc, 0xff, 0x4f, 0x2e, 0xfd, 0x74, 0x4e, 0xfe, 0xf6, 0x66, 0xfe, 0xc5, 0xa4, 0xfd, 0x6a, 0x4c, 0x22, 0x01, 0xa1, 0x14, 0xac, 0x69, 0xf9, 0x85, 0xf1, 0x1e, 0x09, 0x2e, 0x0a, 0xc0, 0x39, 0xf0, 0x53, 0x3a, 0xfe, 0xba, 0xc1, 0x00, 0x6c, 0xf7, 0xf8, 0x38, 0x3d, 0xff, 0xc3, 0x4f, 0x07, 0x5e, 0xb8, 0xf9, 0x3c, 0x17, 0x00, 0x1d, 0xdf, 0x05, 0xd2, 0x51, 0xfc, 0x68, 0x58, 0xfc, 0x94, 0x2d, 0x02, 0x8f, 0x1e, 0x00, 0x19, 0xf3, 0xfd, 0xbb, 0xc8, 0x00, 0x86, 0x8b, 0x00, 0x59, 0x77, 0x00, 0x47, 0x7f, 0xff, 0x85, 0x92, 0x00, 0xfb, 0x44, 0x01, 0xd6, 0x8e, 0x00, 0x65, 0x43, 0x01, 0xae, 0x4f, 0x00, 0x7a, 0xcf, 0xfd, 0x5f, 0x7c, 0xfe, 0xcb, 0xa9, 0xfe, 0x0a, 0xde, 0xfd, 0xa0, 0x31, 0x1e, 0x2c, 0x23, 0x13, 0x47, 0x65, 0xfb, 0xb4, 0xd1, 0x1a, 0x57, 0x6c, 0x0a, 0x75, 0x1c, 0xf4, 0x8d, 0x60, 0xfe, 0x36, 0x5b, 0x01, 0x80, 0x17, 0xfa, 0x03, 0x55, 0xff, 0x13, 0xa3, 0x06, 0xaa, 0x46, 0xfa, 0x14, 0xbd, 0xff, 0xd6, 0x4c, 0x05, 0xf3, 0xf2, 0xfc, 0x3d, 0x9c, 0xfc, 0xb9, 0x75, 0x02, 0x5b, 0x6e, 0x00, 0xa7, 0xce, 0xfe, 0xc1, 0x98, 0x00, 0x48, 0x16, 0x00, 0x84, 0xea, 0x00, 0x79, 0x80, 0xff, 0x15, 0xb4, 0x00, 0x7b, 0x87, 0x01, 0xfe, 0xd7, 0x00, 0x8b, 0x50, 0x01, 0x3c, 0x5f, 0x00, 0xed, 0x71, 0xfe, 0xf6, 0xe8, 0xfe, 0xe0, 0xf6, 0xfe, 0xc1, 0x2f, 0xfe, 0xd4, 0x19, 0x1a, 0x0d, 0x41, 0x11, 0xde, 0x25, 0xfd, 0xe1, 0xe6, 0x17, 0xc3, 0x2c, 0x0b, 0x1f, 0x03, 0xf7, 0x8d, 0x76, 0xfe, 0xcb, 0xcf, 0x01, 0xeb, 0x58, 0xfb, 0xeb, 0x4c, 0xff, 0xc0, 0x75, 0x05, 0x58, 0x1d, 0xfb, 0xc0, 0xb2, 0xff, 0xa0, 0x7c, 0x04, 0xcd, 0x6b, 0xfd, 0x1a, 0xce, 0xfd, 0x52, 0x6f, 0x02, 0xd5, 0x63, 0x00, 0xaf, 0x5d, 0xff, 0x2e, 0x60, 0x00, 0x7c, 0xa4, 0x00, 0x9b, 0x34, 0x01, 0x3f, 0x8c, 0xff, 0xf7, 0xdd, 0x00, 0x63, 0xc4, 0x01, 0xb2, 0xea, 0x00, 0xd4, 0x52, 0x01, 0x38, 0x7e, 0x00, 0x7d, 0xeb, 0xfe, 0xe9, 0xa9, 0xff, 0x05, 0xe4, 0xfe, 0x6d, 0x73, 0xfd, 0x56, 0x38, 0x16, 0x4d, 0x1d, 0x10, 0xf3, 0x8e, 0xfe, 0xcd, 0xd6, 0x14, 0xb8, 0x9c, 0x0b, 0xd5, 0xbf, 0xf9, 0x00, 0xcc, 0xfe, 0xda, 0x20, 0x02, 0x79, 0x36, 0xfc, 0xac, 0xeb, 0xfe, 0x00, 0xbe, 0x04, 0x47, 0x03, 0xfc, 0x2f, 0x81, 0xff, 0x14, 0xc6, 0x03, 0xfd, 0x7a, 0xfe, 0xf8, 0x59, 0xfe, 0x74, 0xf1, 0x01, 0xbe, 0x24, 0x01, 0x1e, 0xbb, 0xff, 0xe5, 0xc7, 0x00, 0x0b, 0x14, 0x01, 0x6e, 0xf2, 0x00, 0x56, 0x00, 0x00, 0x5b, 0x00, 0x01, 0x5c, 0xbe, 0x01, 0x85, 0xf4, 0x00, 0x32, 0x3b, 0x01, 0x33, 0xe1, 0x00, 0x2a, 0x3b, 0xff, 0x68, 0xdf, 0xfe, 0xd3, 0xe6, 0xfd, 0x10, 0x0e, 0xfd, 0xbb, 0x18, 0x13, 0x21, 0xd8, 0x0e, 0xcf, 0xb1, 0xff, 0x02, 0x78, 0x12, 0x56, 0xca, 0x0b, 0x95, 0x15, 0xfc, 0x52, 0x51, 0xff, 0x52, 0x3b, 0x02, 0x07, 0xd6, 0xfc, 0xc4, 0xd1, 0xfe, 0xcb, 0x33, 0x04, 0xb9, 0x26, 0xfd, 0x55, 0x66, 0xff, 0x5c, 0xfc, 0x02, 0x0d, 0x6f, 0xff, 0x1a, 0x0a, 0xff, 0xd1, 0x49, 0x02, 0xc0, 0xf1, 0x01, 0x64, 0x46, 0x00, 0x62, 0x25, 0x01, 0x68, 0x1b, 0x01, 0xab, 0x19, 0x01, 0xf7, 0x6e, 0x00, 0x16, 0x2d, 0x01, 0xa5, 0xa3, 0x01, 0x53, 0x2d, 0x01, 0x75, 0x3b, 0x01, 0xd7, 0xd7, 0xff, 0x84, 0x67, 0xfe, 0xf8, 0x51, 0xfe, 0x2f, 0xe0, 0xfd, 0xcb, 0x45, 0xfd, 0xef, 0x7f, 0x10, 0x0c, 0xb2, 0x0d, 0xad, 0xd7, 0x00, 0x34, 0x86, 0x10, 0x41, 0x53, 0x0b, 0x96, 0x95, 0xfd, 0x18, 0x4a, 0x00, 0xc7, 0x3c, 0x02, 0x82, 0xd7, 0xfc, 0x8a, 0x2c, 0xff, 0xb8, 0x4b, 0x04, 0xc8, 0x5e, 0xfd, 0xe2, 0x92, 0xfe, 0xd1, 0x68, 0x03, 0x87, 0xc9, 0x00, 0x91, 0xd2, 0xff, 0x46, 0xff, 0x02, 0x20, 0x08, 0x02, 0x27, 0x8d, 0x00, 0x73, 0xa2, 0x01, 0xe3, 0x2a, 0x01, 0x3a, 0x46, 0x01, 0xda, 0xb2, 0x00, 0xc2, 0x29, 0x01, 0x14, 0x0e, 0x01, 0xf8, 0x11, 0x00, 0x7c, 0x2a, 0x00, 0x4c, 0x29, 0xff, 0x2d, 0x50, 0xfe, 0x9c, 0x28, 0xfe, 0x38, 0x78, 0xfd, 0xae, 0xfb, 0xfc, 0x9c, 0x5f, 0x0f, 0xdb, 0xa1, 0x0d, 0x16, 0x50, 0x01, 0xc6, 0xfe, 0x0d, 0x51, 0x5b, 0x0a, 0xce, 0xae, 0xfe, 0x72, 0x1a, 0x01, 0x85, 0x75, 0x02, 0x11, 0xef, 0xfc, 0x11, 0x05, 0xff, 0xc0, 0xe2, 0x03, 0xba, 0x1a, 0xfe, 0x3d, 0x1c, 0xff, 0x92, 0xa2, 0x04, 0x9b, 0x03, 0x02, 0xde, 0xf7, 0xff, 0x30, 0x42, 0x03, 0x55, 0xaa, 0x02, 0x42, 0x61, 0x01, 0x40, 0x74, 0x01, 0x0e, 0x00, 0x01, 0xb4, 0x64, 0x01, 0x2d, 0x1a, 0x00, 0x19, 0x8d, 0xff, 0x90, 0xcb, 0xff, 0x92, 0xf2, 0xff, 0xdb, 0xce, 0xff, 0x24, 0xed, 0xfe, 0xb0, 0x87, 0xfd, 0xfe, 0x60, 0xfd, 0xd2, 0xcf, 0xfd, 0xdc, 0x58, 0xfd, 0x5e, 0x57, 0x0d, 0x2d, 0xe2, 0x0b, 0xc8, 0x3c, 0x02, 0x86, 0xfc, 0x0d, 0xc7, 0xca, 0x09, 0xda, 0x7b, 0xff, 0xe7, 0xfc, 0x01, 0x39, 0xc4, 0x01, 0x8c, 0xca, 0xfc, 0x27, 0xd2, 0xff, 0x1d, 0x48, 0x04, 0x39, 0x2a, 0xff, 0xde, 0x3c, 0x00, 0xdd, 0xb9, 0x04, 0xaa, 0x65, 0x02, 0x49, 0xa3, 0x01, 0x60, 0x02, 0x04, 0xac, 0x96, 0x02, 0x66, 0x0c, 0x01, 0x18, 0x0c, 0x01, 0x26, 0x9b, 0x00, 0x18, 0xb2, 0xff, 0xf9, 0xc3, 0xfe, 0xe6, 0x17, 0xff, 0x02, 0xce, 0xff, 0x07, 0xf1, 0xff, 0xde, 0xf0, 0xfe, 0x3a, 0x3d, 0xfe, 0x6b, 0x87, 0xfd, 0x2e, 0x04, 0xfe, 0xf9, 0x15, 0xfe, 0x5b, 0x55, 0xfd, 0x96, 0x6c, 0x0c, 0x8a, 0xb9, 0x0b, 0x89, 0xcd, 0x02, 0x18, 0xd0, 0x0c, 0x52, 0x30, 0x09, 0xea, 0xbc, 0xff, 0x62, 0x58, 0x01, 0x3e, 0x40, 0x02, 0x23, 0xbc, 0xfe, 0x50, 0x6b, 0x00, 0xbd, 0x71, 0x04, 0xb1, 0x1a, 0x00, 0xad, 0x65, 0x01, 0x91, 0x07, 0x06, 0x95, 0xd8, 0x03, 0xdb, 0xea, 0x01, 0x96, 0x49, 0x03, 0x30, 0x09, 0x02, 0x50, 0xea, 0xff, 0xcb, 0x76, 0xff, 0x8e, 0x05, 0xff, 0x7b, 0x6f, 0xff, 0xd1, 0xc5, 0xfe, 0x80, 0xe9, 0xfe, 0xac, 0xc1, 0xff, 0x34, 0x11, 0xff, 0x34, 0xaf, 0xfe, 0xf9, 0x83, 0xfe, 0x53, 0x02, 0xfe, 0x61, 0x37, 0xfe, 0x3a, 0x0f, 0xfe, 0xc9, 0x8f, 0xfd, 0x34, 0xa5, 0x0a, 0x33, 0xda, 0x0a, 0x0b, 0x31, 0x04, 0xb1, 0xa8, 0x0b, 0x5d, 0xd3, 0x07, 0xb2, 0x86, 0x01, 0xdf, 0x69, 0x02, 0x12, 0xbc, 0x02, 0x4b, 0x10, 0x00, 0x50, 0x65, 0x00, 0x14, 0xcf, 0x04, 0xd3, 0x6a, 0x02, 0x5a, 0x04, 0x03, 0xe1, 0xd2, 0x05, 0xcc, 0x72, 0x03, 0x05, 0x82, 0x01, 0x5d, 0xc3, 0x01, 0x27, 0xb2, 0xff, 0xbe, 0x72, 0xfe, 0xb1, 0x67, 0xff, 0xa3, 0x04, 0xff, 0x36, 0xdb, 0xfe, 0x1c, 0x23, 0xfe, 0x86, 0xb0, 0xfe, 0x75, 0xc5, 0xff, 0xa8, 0x36, 0xff, 0x3d, 0xc5, 0xfe, 0x1e, 0x56, 0xfe, 0x7c, 0x1a, 0xfe, 0x83, 0x59, 0xfe, 0xdb, 0xdf, 0xfd, 0x61, 0xbb, 0xfd, 0xf0, 0xbd, 0x09, 0xc9, 0xff, 0x09, 0xf0, 0x14, 0x04, 0x76, 0xf8, 0x0a, 0x52, 0x42, 0x09, 0x91, 0x68, 0x03, 0xfd, 0x63, 0x02, 0x68, 0x1b, 0x03, 0xcb, 0xee, 0x01, 0x29, 0x1d, 0x02, 0x54, 0x1c, 0x05, 0x4e, 0xc1, 0x03, 0x30, 0x8b, 0x03, 0xf0, 0x4c, 0x04, 0x23, 0xce, 0x01, 0xa1, 0x5f, 0xff, 0x44, 0xe8, 0xff, 0x40, 0xa0, 0xff, 0xf9, 0x09, 0xff, 0x2e, 0x94, 0xfe, 0x85, 0xdf, 0xfd, 0x83, 0x89, 0xfe, 0x63, 0xfa, 0xfe, 0xd7, 0x92, 0xff, 0xf7, 0x5f, 0xff, 0xf6, 0xa0, 0xfe, 0x97, 0xaa, 0xfe, 0x72, 0xd0, 0xfe, 0xb3, 0x4c, 0xfe, 0xf0, 0xe2, 0xfd, 0x55, 0x10, 0xfe, 0xcd, 0x58, 0xfe, 0x67, 0xc7, 0x08, 0x83, 0x74, 0x0b, 0x21, 0x70, 0x06, 0x5f, 0xcb, 0x09, 0xe1, 0xf9, 0x08, 0x5d, 0x24, 0x04, 0x45, 0xe7, 0x03, 0xfb, 0x2f, 0x05, 0xc6, 0xa9, 0x02, 0x71, 0xd6, 0x02, 0x69, 0x2d, 0x05, 0x22, 0x06, 0x02, 0x35, 0x59, 0x01, 0xf0, 0x7c, 0x02, 0x2f, 0x2e, 0x00, 0xd6, 0xbe, 0xfe, 0xa9, 0x64, 0xff, 0x43, 0xed, 0xfe, 0x1f, 0x26, 0xfe, 0x55, 0x54, 0xfe, 0xc9, 0x6f, 0xfe, 0xb7, 0xd8, 0xfe, 0x15, 0x3b, 0xff, 0xbd, 0x6b, 0xff, 0x23, 0x00, 0xff, 0x5e, 0x72, 0xfe, 0xe0, 0xa3, 0xfe, 0x41, 0x78, 0xfe, 0xfa, 0x4d, 0xfe, 0x43, 0x4d, 0xfe, 0x34, 0x55, 0xfe, 0x43, 0x81, 0xfe, 0x91, 0xef, 0x07, 0x84, 0xdb, 0x0b, 0xda, 0x79, 0x07, 0xcc, 0x12, 0x0a, 0xb0, 0xf8, 0x0b, 0x8f, 0x70, 0x07, 0xe3, 0xdd, 0x03, 0x43, 0x69, 0x04, 0x4e, 0x08, 0x03, 0xfa, 0x7d, 0x01, 0xca, 0x2a, 0x02, 0x17, 0x8e, 0x00, 0xb9, 0x85, 0x00, 0x37, 0xb5, 0x01, 0x18, 0xf4, 0xff, 0x2c, 0x42, 0xfe, 0xfc, 0x9b, 0xfe, 0xa6, 0x75, 0xfe, 0x84, 0x16, 0xfe, 0xfd, 0x9d, 0xfe, 0x13, 0xc0, 0xfe, 0x70, 0x0e, 0xff, 0x34, 0x19, 0xff, 0xa4, 0xd1, 0xfe, 0x5a, 0xa5, 0xfe, 0xf2, 0xa3, 0xfe, 0x83, 0xd3, 0xfe, 0x1b, 0x96, 0xfe, 0xec, 0x43, 0xfe, 0x7d, 0x2f, 0xfe, 0xa7, 0x89, 0xfe, 0x1d, 0xd2, 0xfe, 0x73, 0xd0, 0x08, 0x9c, 0x25, 0x0e, 0x97, 0xe7, 0x09, 0x2d, 0xba, 0x0b, 0x93, 0x1b, 0x0b, 0xe5, 0x9f, 0x06, 0x75, 0x5a, 0x05, 0x26, 0x1f, 0x04, 0x6a, 0x39, 0x00, 0x7a, 0xbd, 0xfe, 0x31, 0xb8, 0x01, 0x49, 0x3d, 0x01, 0x48, 0x40, 0xff, 0xb4, 0xa6, 0x00, 0x7c, 0xf3, 0xff, 0x54, 0x4a, 0xfd, 0x5d, 0xa6, 0xfe, 0xb5, 0x6a, 0xff, 0x4e, 0x23, 0xfe, 0x0c, 0x89, 0xfe, 0x1e, 0xea, 0xfe, 0xc0, 0xd6, 0xfe, 0xce, 0x1b, 0xff, 0xbc, 0xe2, 0xfe, 0x6d, 0x8d, 0xfe, 0x1a, 0xb5, 0xfe, 0x3b, 0x99, 0xfe, 0xfa, 0xb0, 0xfe, 0x98, 0xab, 0xfe, 0x99, 0x5b, 0xfe, 0x6e, 0x98, 0xfe, 0x05, 0xd5, 0xfe, 0x70, 0x7b, 0x0a, 0xe4, 0x33, 0x12, 0x20, 0x3e, 0x0c, 0x42, 0x6b, 0x09, 0xc9, 0x86, 0x08, 0x04, 0xbd, 0x05, 0x18, 0x39, 0x04, 0xe6, 0xf6, 0x02, 0xa2, 0xcf, 0x00, 0xff, 0x43, 0x00, 0x4d, 0x65, 0x00, 0x55, 0x02, 0xff, 0x28, 0xa7, 0xff, 0xd4, 0x45, 0x00, 0xfe, 0xf5, 0xfe, 0xbe, 0x47, 0xfe, 0x51, 0xe4, 0xfe, 0x7a, 0xbb, 0xfe, 0x47, 0x9a, 0xfe, 0x75, 0xf4, 0xfe, 0x59, 0x90, 0xfe, 0xbe, 0xe6, 0xfe, 0x71, 0xcd, 0xfe, 0xb9, 0xb3, 0xfe, 0x12, 0xbe, 0xfe, 0xc2, 0xa1, 0xfe, 0xba, 0xa1, 0xfe, 0xe1, 0x9b, 0xfe, 0x7c, 0xaf, 0xfe, 0xbb, 0x96, 0xfe, 0x1e, 0xe1, 0xfe, 0xde, 0xc8, 0xfe, 0x25, 0x8a, 0x0b, 0x49, 0x5b, 0x12, 0x1e, 0x17, 0x0b, 0xda, 0xc9, 0x07, 0xfd, 0x9f, 0x06, 0x3b, 0x81, 0x05, 0x3a, 0x97, 0x05, 0x1f, 0x65, 0x03, 0x19, 0x14, 0x01, 0xe3, 0x8b, 0x02, 0xf0, 0x14, 0x01, 0x9e, 0xa4, 0xfe, 0xea, 0x9f, 0xfe, 0x31, 0x47, 0xff, 0x97, 0x81, 0x00, 0x93, 0x3d, 0xff, 0x2d, 0xa3, 0xfd, 0xe1, 0xc9, 0xfe, 0xea, 0xc0, 0xff, 0x25, 0xcb, 0xfe, 0x79, 0xcc, 0xfe, 0x57, 0xe0, 0xfe, 0x7b, 0x7b, 0xfe, 0xcf, 0xda, 0xfe, 0x61, 0x9d, 0xfe, 0x05, 0xbd, 0xfe, 0x05, 0xd4, 0xfe, 0xe0, 0xc9, 0xfe, 0x0d, 0xcc, 0xfe, 0xfd, 0xc3, 0xfe, 0x78, 0xfd, 0xfe, 0xb8, 0xfa, 0xfe, 0x6c, 0x69, 0x0a, 0x23, 0x6b, 0x10, 0x9a, 0x8f, 0x09, 0xe4, 0x7c, 0x06, 0x60, 0x42, 0x06, 0x0f, 0xac, 0x04, 0xf0, 0x7d, 0x04, 0x54, 0x71, 0x05, 0x72, 0x43, 0x03, 0xc1, 0xbb, 0x02, 0xcd, 0x9a, 0x03, 0xcc, 0x4c, 0x00, 0x3d, 0xf7, 0xfe, 0x5c, 0xf2, 0xff, 0xb0, 0x50, 0xff, 0x37, 0x9c, 0xfe, 0x3f, 0x6c, 0xff, 0x86, 0x73, 0xff, 0x0a, 0x8d, 0xfe, 0x86, 0x40, 0xff, 0x71, 0x6d, 0xff, 0x66, 0x6b, 0xfe, 0x49, 0x3b, 0xfe, 0xe4, 0xc6, 0xfe, 0xe1, 0xc2, 0xfe, 0x2b, 0xd5, 0xfe, 0x43, 0x01, 0xff, 0x66, 0x08, 0xff, 0x28, 0x17, 0xff, 0x71, 0xe0, 0xfe, 0x01, 0xe8, 0xfe, 0x8f, 0xe9, 0xfe, 0x52, 0x5f, 0x09, 0xa6, 0x81, 0x0d, 0x1d, 0xd8, 0x07, 0xb2, 0xc1, 0x06, 0xca, 0x50, 0x05, 0xd2, 0xda, 0x03, 0x5e, 0x05, 0x04, 0xc5, 0x9d, 0x02, 0x47, 0xa8, 0x02, 0x4b, 0xb9, 0x05, 0xe9, 0x2d, 0x05, 0x6b, 0x3b, 0x03, 0x8a, 0x27, 0x02, 0x01, 0x41, 0x00, 0xdc, 0x75, 0x00, 0xbc, 0x6c, 0xff, 0x63, 0x05, 0xfe, 0xf7, 0xf9, 0xfe, 0x97, 0xd0, 0xff, 0x02, 0x01, 0xff, 0x48, 0x10, 0xfe, 0x3f, 0xc4, 0xfe, 0x0f, 0x0d, 0xff, 0x6a, 0x86, 0xfe, 0x39, 0xbe, 0xfe, 0x8d, 0x28, 0xff, 0x3d, 0x38, 0xff, 0xd7, 0x3f, 0xff, 0x6d, 0xdd, 0xfe, 0xaa, 0xb9, 0xfe, 0xc0, 0xa9, 0xfe, 0x93, 0xe1, 0xfe, 0x9d, 0xc8, 0x07, 0x1f, 0xd9, 0x09, 0x15, 0xe7, 0x04, 0x97, 0xa8, 0x06, 0xfc, 0xef, 0x06, 0x6e, 0x5b, 0x05, 0x93, 0xe2, 0x01, 0x4e, 0x62, 0xff, 0xfe, 0x9d, 0x02, 0x0e, 0xd7, 0x04, 0x10, 0x5e, 0x04, 0xd3, 0xa1, 0x05, 0x53, 0x82, 0x05, 0x1c, 0x73, 0x04, 0x7d, 0xbc, 0x03, 0x08, 0x66, 0x00, 0xd1, 0x65, 0xff, 0x71, 0x90, 0xff, 0xd1, 0x25, 0xfe, 0x19, 0x7c, 0xfe, 0x59, 0x7a, 0xff, 0x54, 0xdb, 0xfe, 0xa7, 0x5c, 0xfe, 0xd8, 0x19, 0xff, 0x5e, 0x6a, 0xff, 0x03, 0x29, 0xff, 0xe3, 0xe6, 0xfe, 0xf1, 0x70, 0xff, 0xdc, 0x4a, 0xff, 0x32, 0xcb, 0xfe, 0x45, 0xc5, 0xfe, 0x33, 0xc9, 0xfe, 0x25, 0xe9, 0x08, 0x24, 0x22, 0x0b, 0x5c, 0x5f, 0x03, 0xe4, 0x41, 0x04, 0x56, 0xf8, 0x05, 0x4b, 0xde, 0x04, 0xed, 0xbb, 0x01, 0xb3, 0x55, 0xff, 0xaf, 0xe8, 0x01, 0xbb, 0xbb, 0x03, 0x09, 0x76, 0x02, 0xc2, 0x12, 0x03, 0x37, 0xf7, 0x04, 0xae, 0x37, 0x06, 0x70, 0x21, 0x06, 0xc5, 0x27, 0x03, 0x8f, 0xa8, 0x01, 0xde, 0xda, 0x00, 0xe7, 0x68, 0xff, 0x0e, 0xc7, 0xfe, 0xad, 0xfc, 0xfd, 0x38, 0xbe, 0xfe, 0xee, 0x93, 0xff, 0xc7, 0xe2, 0xfe, 0xb7, 0x8c, 0xfe, 0xca, 0x90, 0xff, 0x58, 0xb4, 0xff, 0xeb, 0x18, 0xff, 0xec, 0xd0, 0xfe, 0x5b, 0xa2, 0xfe, 0xd3, 0x08, 0xff, 0x77, 0xf4, 0xfe, 0x6d, 0xb3, 0x09, 0xba, 0x14, 0x0c, 0x34, 0x1f, 0x04, 0x19, 0xb8, 0x04, 0x93, 0xf2, 0x05, 0xcb, 0x9c, 0x04, 0x87, 0x9d, 0x00, 0xd3, 0x5c, 0xfe, 0x8b, 0x0a, 0x03, 0xe1, 0x3d, 0x04, 0x33, 0x25, 0x00, 0x38, 0xee, 0x00, 0x11, 0x62, 0x02, 0xf7, 0x24, 0x03, 0x92, 0x2d, 0x05, 0xd0, 0x11, 0x04, 0x27, 0x88, 0x03, 0xc3, 0xc1, 0x03, 0x86, 0x6d, 0x01, 0x8a, 0x9c, 0xff, 0x2a, 0x37, 0xff, 0x14, 0x82, 0xfe, 0xf6, 0x4c, 0xfe, 0xcd, 0xd5, 0xfe, 0xd6, 0x48, 0xff, 0x64, 0x39, 0xff, 0xf6, 0xcc, 0xfe, 0x44, 0x76, 0xff, 0xa5, 0x79, 0xff, 0xd0, 0x5b, 0xfe, 0x2b, 0xa9, 0xfe, 0x45, 0x3e, 0xff, 0xca, 0x31, 0x0b, 0x1f, 0x75, 0x0d, 0x42, 0xbd, 0x03, 0xd1, 0x7e, 0x05, 0xee, 0x66, 0x07, 0x12, 0x5f, 0x04, 0x30, 0x23, 0xff, 0x0b, 0x5d, 0xfd, 0x6b, 0xea, 0x03, 0x2e, 0x22, 0x04, 0xfc, 0x37, 0xff, 0x4a, 0x9a, 0x00, 0x29, 0x48, 0x01, 0x4e, 0xb7, 0x01, 0xe6, 0x6e, 0x02, 0xcc, 0xfe, 0x00, 0xb2, 0xcf, 0x02, 0x98, 0x55, 0x04, 0x86, 0xb5, 0x02, 0x8c, 0x39, 0x02, 0x16, 0xfb, 0x00, 0x09, 0x0f, 0xff, 0x3c, 0x6f, 0xff, 0xf2, 0xc2, 0xfe, 0x54, 0x49, 0xfe, 0xb2, 0x66, 0xff, 0xae, 0x7a, 0xff, 0xe0, 0xfd, 0xfe, 0x3f, 0x8f, 0xfe, 0x50, 0xe4, 0xfe, 0xdf, 0x0e, 0xff, 0xd0, 0xcd, 0xfe, 0x2b, 0x98, 0x0c, 0x42, 0xcf, 0x0f, 0x45, 0x28, 0x04, 0xbc, 0x2d, 0x05, 0x7e, 0xb3, 0x07, 0xe6, 0x62, 0x04, 0xc7, 0x0b, 0xfe, 0xce, 0x2d, 0xfd, 0x61, 0xf1, 0x04, 0x1d, 0x39, 0x03, 0x46, 0x0b, 0xfe, 0x16, 0xc2, 0x00, 0xff, 0x04, 0x01, 0x41, 0x5b, 0x01, 0x87, 0x1c, 0x02, 0x67, 0x59, 0xff, 0xdf, 0x53, 0x00, 0x86, 0x5d, 0x02, 0x7e, 0x03, 0x02, 0x71, 0x5e, 0x02, 0x27, 0xfd, 0x01, 0xce, 0x77, 0x01, 0x88, 0xbe, 0x00, 0xb7, 0x78, 0xff, 0x55, 0x63, 0xff, 0xc4, 0x96, 0xff, 0x15, 0xda, 0xfe, 0xcc, 0x0d, 0xff, 0xe7, 0x0d, 0xff, 0x1d, 0x4a, 0xfe, 0x70, 0x7c, 0xfe, 0x3a, 0x13, 0xff, 0x88, 0x19, 0x0e, 0xf1, 0xaa, 0x11, 0xc0, 0x3e, 0x04, 0x34, 0xb7, 0x05, 0x40, 0xc3, 0x08, 0xaf, 0xcf, 0x03, 0x87, 0x0c, 0xfc, 0x02, 0x56, 0xfd, 0x3a, 0x39, 0x06, 0x19, 0x48, 0x02, 0xcf, 0x52, 0xfd, 0x17, 0x96, 0x00, 0x03, 0x89, 0x00, 0x32, 0x0d, 0x01, 0xc8, 0x20, 0x02, 0x34, 0x1a, 0xff, 0x3d, 0x92, 0xff, 0x0e, 0x32, 0x01, 0x4a, 0xfa, 0xff, 0x2c, 0x80, 0x00, 0x6f, 0x20, 0x01, 0x34, 0x7f, 0x01, 0x5a, 0xca, 0x01, 0x13, 0x4d, 0x01, 0x32, 0xbc, 0x00, 0x5b, 0x43, 0x00, 0xad, 0xf6, 0xff, 0xc1, 0x54, 0xff, 0xe2, 0x48, 0xfe, 0xeb, 0x3f, 0xfe, 0x8d, 0xc8, 0xfe, 0x97, 0x99, 0xfe, 0x52, 0x71, 0x10, 0x92, 0x5f, 0x14, 0x05, 0xee, 0x03, 0x3b, 0x30, 0x05, 0x7d, 0x42, 0x09, 0x33, 0x2a, 0x03, 0xb2, 0xdd, 0xfa, 0xa9, 0x28, 0xfe, 0x35, 0x78, 0x06, 0xa7, 0xde, 0x00, 0xca, 0xf6, 0xfc, 0x9e, 0xc1, 0x00, 0x0a, 0x38, 0x00, 0xac, 0xc0, 0x00, 0x43, 0xdb, 0x01, 0xf0, 0xcd, 0xfe, 0xea, 0x6c, 0xff, 0xe6, 0xdc, 0x00, 0x3d, 0x34, 0xff, 0x1f, 0xa2, 0xff, 0x94, 0x5a, 0xff, 0xa5, 0xcf, 0xff, 0x32, 0x11, 0x01, 0x4d, 0xf5, 0x00, 0xc3, 0xe5, 0x01, 0x84, 0x4a, 0x02, 0x6c, 0xc8, 0x00, 0xb1, 0xd6, 0xff, 0xe2, 0x4c, 0xff, 0xd8, 0x3a, 0xfe, 0x21, 0x29, 0xfe, 0x35, 0xc1, 0xfe, 0x10, 0x57, 0x12, 0x97, 0x96, 0x16, 0x1d, 0x16, 0x04, 0x6d, 0x69, 0x05, 0xd6, 0x16, 0x0a, 0x50, 0x42, 0x02, 0x26, 0xe9, 0xf8, 0x9d, 0x72, 0xff, 0x42, 0x8e, 0x07, 0xf5, 0x08, 0xff, 0xb0, 0x91, 0xfc, 0x86, 0x15, 0x01, 0x1f, 0x9a, 0xff, 0x8e, 0x9d, 0x00, 0xda, 0x11, 0x02, 0x06, 0x91, 0xfe, 0x1b, 0x17, 0xff, 0x15, 0xad, 0x00, 0x79, 0x06, 0xff, 0xe8, 0x50, 0xff, 0x66, 0xb2, 0xfe, 0x1b, 0x06, 0xff, 0xd5, 0x6e, 0xff, 0xc9, 0x82, 0xff, 0x42, 0x70, 0x01, 0x9c, 0x43, 0x02, 0x29, 0xf5, 0x01, 0xf5, 0x4e, 0x01, 0x29, 0xe9, 0xff, 0x7d, 0x18, 0xff, 0x12, 0x48, 0xff, 0xf3, 0x90, 0xfe, 0x25, 0xa4, 0x14, 0x65, 0xd4, 0x18, 0xdb, 0xa4, 0x03, 0x8a, 0xe6, 0x05, 0x17, 0x19, 0x0b, 0x6f, 0x78, 0x00, 0x84, 0x19, 0xf7, 0x78, 0x8f, 0x01, 0x86, 0xe9, 0x07, 0xc1, 0x03, 0xfd, 0xe1, 0x62, 0xfc, 0xa5, 0x41, 0x01, 0x9e, 0x74, 0xff, 0x36, 0x1b, 0x00, 0x6c, 0xd5, 0x01, 0xdf, 0x7f, 0xfe, 0x6e, 0xdb, 0xfe, 0x66, 0x97, 0x00, 0x27, 0xd5, 0xfe, 0xbe, 0xfe, 0xfe, 0xf5, 0x3c, 0xfe, 0xca, 0x81, 0xfe, 0x7d, 0xef, 0xfe, 0x62, 0xad, 0xfe, 0xa6, 0x32, 0x00, 0xca, 0x39, 0x01, 0x91, 0x2e, 0x01, 0xb7, 0x20, 0x01, 0xf0, 0x30, 0x01, 0x8e, 0x31, 0x00, 0xf8, 0xb8, 0xff, 0x3a, 0x3e, 0xff, 0xe1, 0x66, 0x16, 0x7e, 0xad, 0x1a, 0x89, 0x40, 0x04, 0xc9, 0x88, 0x06, 0xd9, 0xdb, 0x0b, 0x5b, 0x3e, 0xff, 0xcd, 0xe0, 0xf4, 0xc2, 0x92, 0x03, 0xfa, 0x19, 0x09, 0x94, 0xb7, 0xfa, 0x13, 0x07, 0xfc, 0x20, 0xbd, 0x01, 0xb2, 0x60, 0xff, 0x35, 0xbf, 0xff, 0xb5, 0x9a, 0x01, 0x6a, 0x89, 0xfe, 0x40, 0x62, 0xfe, 0xdc, 0xa3, 0x00, 0x97, 0x0e, 0xff, 0x34, 0xa3, 0xfe, 0x68, 0xe2, 0xfd, 0x59, 0x63, 0xfe, 0x48, 0x9b, 0xfe, 0x98, 0x3c, 0xfe, 0xe8, 0xc2, 0xff, 0xcc, 0x4f, 0x00, 0x19, 0x64, 0x00, 0xbc, 0x62, 0x00, 0x20, 0x72, 0x00, 0x21, 0x38, 0x00, 0x89, 0x99, 0x00, 0x42, 0x16, 0x00, 0x2f, 0x07, 0x18, 0x51, 0x0b, 0x1d, 0xe8, 0xe1, 0x04, 0x8b, 0xa2, 0x06, 0x64, 0x7e, 0x0c, 0xe4, 0xae, 0xfe, 0x72, 0xd5, 0xf2, 0x9c, 0x04, 0x05, 0x66, 0x26, 0x0a, 0xfb, 0xad, 0xf8, 0xec, 0x00, 0xfc, 0xeb, 0x2c, 0x02, 0x4a, 0x11, 0xff, 0xe5, 0x85, 0xff, 0x19, 0x3f, 0x01, 0x91, 0xdf, 0xfe, 0x6a, 0x4d, 0xfe, 0x45, 0x00, 0x00, 0x49, 0x38, 0xff, 0x54, 0x7d, 0xfe, 0x9c, 0xb8, 0xfd, 0x23, 0x8a, 0xfe, 0x05, 0x35, 0xfe, 0x06, 0xce, 0xfd, 0xb7, 0x60, 0xff, 0x92, 0x04, 0x00, 0x7d, 0x51, 0x00, 0xc9, 0xa7, 0xff, 0x5a, 0x71, 0xff, 0x6f, 0x56, 0xff, 0x06, 0x0b, 0x00, 0x08, 0x87, 0x00, 0x3a, 0xac, 0x1a, 0x50, 0x02, 0x20, 0x98, 0x81, 0x03, 0x2e, 0x33, 0x07, 0xbb, 0x27, 0x0d, 0x52, 0xdd, 0xfc, 0x56, 0xc4, 0xf2, 0xb4, 0xf5, 0x05, 0xe8, 0xbc, 0x09, 0xb5, 0x8b, 0xf7, 0x6e, 0x2e, 0xfc, 0x79, 0x6a, 0x02, 0x1d, 0xc5, 0xfe, 0xca, 0x07, 0xff, 0xdc, 0x34, 0x01, 0x46, 0x44, 0xff, 0x25, 0xda, 0xfd, 0x3f, 0x82, 0xff, 0x32, 0x4f, 0xff, 0x5c, 0x63, 0xfe, 0xe1, 0x7e, 0xfd, 0xb5, 0x81, 0xfe, 0xd8, 0xd0, 0xfd, 0x58, 0x86, 0xfd, 0xa6, 0x9b, 0xff, 0x06, 0xa3, 0xff, 0xf8, 0xf0, 0xff, 0x33, 0x4c, 0xff, 0x84, 0xc7, 0xfe, 0xcd, 0x0b, 0xff, 0x1d, 0x7d, 0xff, 0xf7, 0x62, 0xff, 0xbb, 0xa9, 0x1c, 0xc5, 0x37, 0x22, 0x83, 0x52, 0x03, 0x7c, 0x1e, 0x08, 0x11, 0x8c, 0x0d, 0x8a, 0x84, 0xfb, 0xc5, 0x44, 0xf2, 0xf3, 0x4a, 0x06, 0x5f, 0x2b, 0x0a, 0xa4, 0x8b, 0xf6, 0xb9, 0xab, 0xfb, 0xba, 0xca, 0x02, 0x56, 0x9e, 0xfe, 0x7f, 0xa1, 0xfe, 0x87, 0x34, 0x01, 0x59, 0x7b, 0xff, 0xc5, 0x55, 0xfd, 0x13, 0x10, 0xff, 0xe6, 0x7f, 0xff, 0x07, 0x89, 0xfe, 0x15, 0xef, 0xfc, 0x16, 0xf1, 0xfd, 0x2f, 0xf2, 0xfd, 0x47, 0x7d, 0xfd, 0x70, 0x72, 0xff, 0x6b, 0x8b, 0xff, 0x43, 0x4f, 0xff, 0x82, 0x20, 0xff, 0x24, 0xbc, 0xfe, 0x61, 0x92, 0xfe, 0xdd, 0x06, 0xff, 0xd2, 0xd3, 0xfe, 0x5e, 0x96, 0x1d, 0xb6, 0xce, 0x23, 0x94, 0x33, 0x04, 0xe0, 0xb3, 0x09, 0x71, 0x05, 0x0e, 0x16, 0x23, 0xfa, 0xc4, 0xe4, 0xf1, 0xad, 0x22, 0x06, 0xb0, 0x9e, 0x0a, 0xcd, 0x55, 0xf6, 0x7b, 0x8d, 0xfa, 0x8c, 0xe7, 0x02, 0x09, 0x0f, 0xff, 0x68, 0x55, 0xfe, 0x58, 0x92, 0x00, 0x15, 0xe3, 0xff, 0x8e, 0x4e, 0xfd, 0xd1, 0x63, 0xfe, 0x16, 0xce, 0xff, 0x40, 0x1e, 0xfe, 0xb1, 0x64, 0xfc, 0x17, 0x03, 0xfe, 0x51, 0xf1, 0xfd, 0x72, 0x6e, 0xfd, 0x3e, 0xb8, 0xfe, 0x41, 0x14, 0xff, 0xcb, 0xff, 0xff, 0x69, 0x0e, 0xff, 0x8a, 0x12, 0xfe, 0x21, 0x2e, 0xfe, 0x57, 0x06, 0xff, 0xcd, 0x94, 0xfe, 0x77, 0x5b, 0x1e, 0x94, 0x13, 0x25, 0x27, 0xfe, 0x05, 0xa9, 0x72, 0x0a, 0xb0, 0x7b, 0x0d, 0x83, 0xdf, 0xfa, 0x51, 0xfb, 0xf1, 0x96, 0x5c, 0x04, 0xfc, 0xdc, 0x0a, 0xcd, 0xcc, 0xf6, 0x0f, 0x49, 0xf9, 0xe0, 0x72, 0x03, 0x36, 0x55, 0xff, 0xcf, 0x75, 0xfd, 0x38, 0x62, 0x00, 0x94, 0xf1, 0xff, 0xd0, 0x41, 0xfe, 0xef, 0xe6, 0xfd, 0xc7, 0x7b, 0xfe, 0x53, 0x74, 0xfe, 0x20, 0x3f, 0xfc, 0x61, 0xaa, 0xfd, 0x2d, 0x0f, 0xfe, 0x01, 0x08, 0xfd, 0xca, 0x1f, 0xfe, 0x7a, 0x23, 0xff, 0x2b, 0x12, 0x00, 0x65, 0x23, 0xff, 0xbb, 0xfd, 0xfd, 0xfe, 0xf3, 0xfd, 0x84, 0x59, 0xfe, 0xd8, 0xbb, 0xfd, 0xef, 0x54, 0x1f, 0x68, 0x45, 0x25, 0x47, 0x5a, 0x08, 0x28, 0x5b, 0x0b, 0xec, 0xe8, 0x0b, 0x3d, 0x43, 0xfd, 0x0f, 0x67, 0xf2, 0xf0, 0xa9, 0x01, 0x99, 0x60, 0x0a, 0x9f, 0xf7, 0xf7, 0x9c, 0xea, 0xf8, 0x3d, 0xb6, 0x02, 0x06, 0xdc, 0xff, 0xc4, 0xfc, 0xfc, 0xc9, 0x9b, 0xff, 0x16, 0xb8, 0x00, 0x22, 0x09, 0xff, 0x43, 0x06, 0xfd, 0x25, 0x9e, 0xfd, 0x0e, 0xba, 0xfe, 0x5e, 0x18, 0xfc, 0x55, 0x55, 0xfd, 0x26, 0x16, 0xfd, 0xb6, 0x1e, 0xfd, 0xf8, 0xb2, 0xfe, 0xcb, 0x68, 0xfe, 0xc5, 0xdf, 0xff, 0x10, 0x81, 0xff, 0x73, 0x2c, 0xfe, 0x9b, 0x25, 0xfd, 0xa1, 0x9f, 0xfd, 0xcb, 0xb6, 0xfd, 0x5f, 0xd4, 0x20, 0x95, 0x96, 0x23, 0x36, 0xcc, 0x09, 0x05, 0xc7, 0x0e, 0xdc, 0xfe, 0x0a, 0xae, 0xbc, 0xfd, 0xba, 0x63, 0xf2, 0x37, 0x05, 0x01, 0xe5, 0xa3, 0x08, 0xc9, 0x59, 0xf8, 0x42, 0x09, 0xfa, 0x79, 0xad, 0x00, 0xaf, 0xc0, 0xff, 0xbb, 0x01, 0xfe, 0x3b, 0x77, 0xfe, 0xd7, 0x7f, 0x00, 0x90, 0x07, 0x00, 0x4e, 0x7d, 0xfc, 0xea, 0xf6, 0xfc, 0x0d, 0x3d, 0xff, 0xb8, 0x23, 0xfb, 0x28, 0x4c, 0xfc, 0x67, 0xbf, 0xfc, 0x3b, 0x50, 0xfd, 0x48, 0xad, 0xfe, 0xd0, 0xf4, 0xfd, 0xc5, 0xa1, 0xff, 0x18, 0xe6, 0xff, 0x21, 0xac, 0xfd, 0x61, 0x61, 0xfc, 0x15, 0xdc, 0xfd, 0xb8, 0x88, 0xfc, 0xef, 0x5f, 0x22, 0x77, 0x79, 0x20, 0xd5, 0x80, 0x09, 0x74, 0xa5, 0x15, 0xcb, 0xf0, 0x0c, 0x47, 0x9c, 0xfa, 0x29, 0xcf, 0xf1, 0x9d, 0xfb, 0x04, 0x4c, 0x92, 0x05, 0x9b, 0x35, 0xf6, 0x4d, 0xe3, 0xfd, 0x65, 0xe3, 0xfe, 0x4e, 0x3a, 0xfe, 0xc4, 0x8d, 0x00, 0xb1, 0x1f, 0xfd, 0x17, 0x90, 0xff, 0xf8, 0xdd, 0x01, 0xd9, 0x66, 0xfc, 0xa8, 0xdb, 0xfc, 0xf7, 0x7d, 0xff, 0x01, 0x12, 0xfa, 0x66, 0x00, 0xfc, 0x70, 0x95, 0xfc, 0xa7, 0xca, 0xfc, 0xbd, 0xfb, 0xfe, 0xc5, 0xc4, 0xfd, 0x94, 0xb2, 0xff, 0x78, 0x22, 0xff, 0xa2, 0x29, 0xfe, 0x2c, 0x98, 0xfc, 0x9e, 0xcf, 0xfc, 0x3d, 0xc5, 0xfc, 0x72, 0xf6, 0x25, 0x99, 0x52, 0x1e, 0xd0, 0x2d, 0x05, 0xde, 0x9a, 0x1c, 0x99, 0xa7, 0x0f, 0x26, 0x57, 0xf5, 0xdd, 0x8c, 0xf3, 0x03, 0x79, 0x09, 0x69, 0xef, 0xff, 0xa6, 0xc0, 0xf3, 0xc1, 0xd3, 0x02, 0x21, 0x31, 0xfe, 0x23, 0x21, 0xfb, 0xec, 0xdc, 0x01, 0xa4, 0x58, 0xfd, 0x6f, 0x5a, 0xfe, 0xab, 0x33, 0x03, 0xeb, 0x40, 0xfc, 0x48, 0x66, 0xfc, 0xc5, 0xa8, 0xff, 0x5b, 0xee, 0xf9, 0x4d, 0x74, 0xfb, 0x50, 0x32, 0xfb, 0x1f, 0xb8, 0xfc, 0x2f, 0xa3, 0xff, 0x34, 0x19, 0xfd, 0x42, 0xae, 0xfe, 0xd3, 0x66, 0xff, 0x31, 0xec, 0xfd, 0xbd, 0x80, 0xfc, 0x8c, 0x66, 0xfd, 0xb6, 0x0b, 0xfc, 0x46, 0x76, 0x2a, 0x99, 0x2e, 0x1e, 0xa8, 0xe9, 0xfe, 0xa4, 0x56, 0x20, 0x0f, 0x62, 0x14, 0xd0, 0x25, 0xf1, 0xc3, 0xbd, 0xf4, 0xd5, 0x82, 0x0e, 0x03, 0x78, 0xfa, 0x46, 0x44, 0xf0, 0x9b, 0x05, 0x08, 0xb4, 0x28, 0xff, 0xc1, 0x53, 0xf7, 0x6c, 0x00, 0x02, 0x81, 0x46, 0xff, 0xf8, 0xa3, 0xfc, 0xe7, 0xf7, 0x03, 0x98, 0x07, 0xfd, 0x96, 0x98, 0xfb, 0x9b, 0x18, 0x00, 0x61, 0x24, 0xfa, 0x9f, 0x97, 0xfa, 0x67, 0x5d, 0xfa, 0x9f, 0x02, 0xfd, 0x7a, 0x56, 0xff, 0x0e, 0x46, 0xfc, 0x9b, 0x0f, 0xfe, 0x6c, 0x9b, 0xff, 0x5d, 0xd4, 0xfd, 0xc5, 0xd8, 0xfc, 0xc6, 0x96, 0xfd, 0xa2, 0x78, 0xfb, 0xf5, 0x3c, 0x2e, 0x11, 0x98, 0x20, 0xf6, 0xac, 0xf7, 0xf4, 0x8b, 0x20, 0x6e, 0x3d, 0x1b, 0xf2, 0xcd, 0xee, 0xcb, 0x7e, 0xf4, 0x1e, 0xdc, 0x13, 0x02, 0xaa, 0xf6, 0x77, 0xdf, 0xea, 0xd4, 0x70, 0x0c, 0x21, 0x79, 0x02, 0x50, 0x0a, 0xf4, 0x56, 0xcc, 0xff, 0x3e, 0xf2, 0x01, 0x27, 0x21, 0xfc, 0x09, 0x81, 0x03, 0x9d, 0xb0, 0xfe, 0x6d, 0xa3, 0xfa, 0x00, 0x79, 0x00, 0xa5, 0x4c, 0xfa, 0x05, 0xa5, 0xfa, 0xfe, 0xf9, 0xf9, 0x67, 0xe6, 0xfb, 0x03, 0x24, 0xff, 0xb1, 0xfc, 0xfb, 0x0a, 0x7d, 0xfd, 0x57, 0x4b, 0xff, 0xb7, 0x97, 0xfe, 0xe9, 0x9c, 0xfc, 0x7f, 0x0a, 0xfe, 0x5f, 0xe9, 0xfb, 0x78, 0x1d, 0x32, 0x10, 0x5e, 0x23, 0x89, 0x1f, 0xf1, 0x56, 0xe7, 0x1d, 0x36, 0xa3, 0x21, 0x16, 0x66, 0xee, 0x85, 0x85, 0xf3, 0x4a, 0x10, 0x19, 0xdb, 0xdb, 0xf3, 0x9f, 0x71, 0xe4, 0x76, 0xfe, 0x0e, 0xec, 0x24, 0x07, 0x47, 0x30, 0xf2, 0xd1, 0xe9, 0xfb, 0x48, 0x49, 0x03, 0x97, 0x41, 0xfd, 0x67, 0x69, 0x02, 0xe6, 0x03, 0x00, 0xcf, 0x43, 0xfa, 0xbe, 0xcb, 0xff, 0x41, 0x22, 0xfb, 0xdb, 0x6d, 0xfa, 0x64, 0x50, 0xf9, 0xc4, 0x18, 0xfb, 0xa2, 0x29, 0xfe, 0x76, 0xae, 0xfb, 0x01, 0xbc, 0xfd, 0xe7, 0x9c, 0xfe, 0xcc, 0xaa, 0xfe, 0x36, 0xd8, 0xfc, 0xa3, 0xa1, 0xfe, 0x89, 0x85, 0xfc, 0xad, 0x71, 0x37, 0x2c, 0xc6, 0x24, 0x35, 0xb4, 0xeb, 0x21, 0xc8, 0x1a, 0xf6, 0x63, 0x25, 0x1c, 0x54, 0xef, 0xd5, 0xa8, 0xf3, 0x9f, 0x37, 0x1e, 0xc7, 0xd1, 0xf0, 0xf6, 0xf1, 0xde, 0x47, 0x9b, 0x0f, 0x2e, 0xe4, 0x0b, 0xf0, 0x84, 0xf2, 0x2c, 0xb2, 0xf7, 0x08, 0xd8, 0x02, 0x5a, 0x38, 0xff, 0x6a, 0x2c, 0x02, 0x3b, 0x71, 0x00, 0x5e, 0xcd, 0xfa, 0xf9, 0xc1, 0xfe, 0xcc, 0xee, 0xfb, 0xf1, 0xe0, 0xf9, 0xb1, 0xea, 0xf8, 0xfe, 0x98, 0xfa, 0x06, 0x12, 0xfd, 0x19, 0xc4, 0xfb, 0xe8, 0xa4, 0xfd, 0x3c, 0xac, 0xfe, 0x69, 0x2c, 0xfe, 0x93, 0x78, 0xfd, 0x6f, 0x39, 0xff, 0x3c, 0x88, 0xfc, 0xe9, 0x2d, 0x3d, 0x16, 0xd4, 0x25, 0x3c, 0xbe, 0xe6, 0x38, 0x47, 0x18, 0xe4, 0x2d, 0x26, 0x97, 0xe6, 0xf0, 0x7f, 0x49, 0xf5, 0xee, 0x08, 0x23, 0x81, 0xfc, 0xed, 0x73, 0x93, 0xda, 0x71, 0x63, 0x0e, 0x36, 0xb4, 0x0f, 0xe8, 0xf0, 0xf4, 0x2f, 0x05, 0xf4, 0x59, 0xda, 0x00, 0xb4, 0xb8, 0x00, 0x98, 0x6a, 0x03, 0xd5, 0x28, 0x00, 0xdf, 0xbf, 0xfb, 0x79, 0x24, 0xfe, 0x25, 0x41, 0xfb, 0x7e, 0x49, 0xfa, 0xe6, 0x51, 0xf8, 0xd5, 0xfa, 0xf9, 0x5a, 0x08, 0xfd, 0x8f, 0x55, 0xfb, 0xca, 0x44, 0xfd, 0x0e, 0x96, 0xff, 0x24, 0xfb, 0xfd, 0xd0, 0x36, 0xfd, 0x7e, 0xac, 0xff, 0x07, 0xb3, 0xfc, 0x1c, 0xcd, 0x44, 0x4b, 0x99, 0x24, 0xd1, 0x22, 0xe2, 0x06, 0xad, 0x17, 0x1a, 0x38, 0x24, 0xa1, 0x8d, 0xf0, 0x46, 0x89, 0xf9, 0xc3, 0xaa, 0x27, 0xab, 0xa7, 0xe9, 0x13, 0x23, 0xd8, 0xdc, 0x9d, 0x0c, 0xd2, 0x78, 0x11, 0x6c, 0xf5, 0xf7, 0x52, 0xf1, 0xf1, 0x83, 0x0a, 0xfe, 0x47, 0xe9, 0x00, 0xad, 0xc1, 0x05, 0x68, 0xcb, 0xff, 0x0b, 0xc4, 0xfc, 0x3a, 0xf2, 0xfc, 0xf4, 0x15, 0xfa, 0xeb, 0x47, 0xfb, 0x02, 0xef, 0xf6, 0xfd, 0x9a, 0xfa, 0xa4, 0x57, 0xfc, 0x23, 0xa2, 0xfa, 0xfd, 0xe8, 0xfd, 0x37, 0x33, 0x00, 0xa9, 0xd3, 0xfd, 0x08, 0xa0, 0xfc, 0x51, 0x84, 0xff, 0x73, 0x0d, 0xfd, 0xf4, 0x08, 0x4c, 0xa4, 0x24, 0x24, 0x06, 0x3d, 0xdd, 0x6c, 0x5f, 0x18, 0x97, 0xfa, 0x20, 0xf9, 0x47, 0xef, 0x9d, 0x81, 0xfe, 0xba, 0x7a, 0x2c, 0x72, 0x8b, 0xe6, 0x76, 0xc1, 0xd5, 0xf2, 0xee, 0x0a, 0x61, 0x2f, 0x12, 0x4a, 0xbc, 0xfa, 0x31, 0x9d, 0xf1, 0x88, 0x52, 0xfb, 0xbc, 0xd4, 0xff, 0x7a, 0x71, 0x08, 0xae, 0x8b, 0x00, 0xcd, 0xfd, 0xfc, 0xa7, 0xd1, 0xfb, 0x46, 0x6a, 0xf9, 0x71, 0xaf, 0xfb, 0xfa, 0xc5, 0xf6, 0xb7, 0xe9, 0xfa, 0xa0, 0x5d, 0xfb, 0x66, 0xd0, 0xfa, 0x31, 0x71, 0xfe, 0x16, 0xec, 0x00, 0xbd, 0xb2, 0xfd, 0x8b, 0x82, 0xfb, 0x22, 0x83, 0xff, 0x26, 0xd6, 0xfd, 0x39, 0x93, 0x54, 0x32, 0xd4, 0x24, 0x12, 0x50, 0xd5, 0xd7, 0xa8, 0x17, 0x43, 0x43, 0x20, 0x26, 0x82, 0xef, 0x14, 0xb8, 0x00, 0x71, 0x34, 0x2e, 0x67, 0x27, 0xe6, 0xcd, 0x8a, 0xd4, 0xf3, 0xab, 0x09, 0x1c, 0xda, 0x11, 0x6e, 0x5d, 0xfb, 0xf5, 0x95, 0xf2, 0x00, 0xef, 0xf9, 0x92, 0xd1, 0xfd, 0xfb, 0xe2, 0x0a, 0x38, 0xd0, 0x01, 0x72, 0x46, 0xfb, 0x08, 0xfe, 0xfb, 0xd5, 0x54, 0xf9, 0x3e, 0x13, 0xfb, 0xe7, 0x35, 0xf7, 0x67, 0x64, 0xfa, 0x6b, 0x85, 0xfb, 0xfc, 0x4a, 0xfb, 0xa8, 0x3c, 0xfe, 0x68, 0x91, 0x01, 0x9a, 0x64, 0xfd, 0x55, 0x8c, 0xfa, 0x64, 0xc4, 0xff, 0xeb, 0x8f, 0xfe, 0xe7, 0x42, 0x5c, 0x40, 0xb0, 0x26, 0xd2, 0x1a, 0xcd, 0x09, 0x58, 0x17, 0xd3, 0x8f, 0x1f, 0x29, 0x7e, 0xef, 0x60, 0x8d, 0x01, 0xc5, 0x8e, 0x2f, 0x1a, 0x36, 0xe8, 0x24, 0x5e, 0xd2, 0x54, 0xd3, 0x08, 0xe7, 0xd9, 0x11, 0xb9, 0x7d, 0xfa, 0x87, 0x0e, 0xf4, 0x5c, 0x2c, 0xfa, 0xf6, 0xbc, 0xfa, 0x1f, 0x8a, 0x0c, 0x51, 0xbd, 0x03, 0x57, 0xe0, 0xf8, 0x63, 0x3e, 0xfd, 0x88, 0x5d, 0xf9, 0x2b, 0x2f, 0xfa, 0xf7, 0xef, 0xf7, 0x15, 0x00, 0xfa, 0xb1, 0xf4, 0xfb, 0xa3, 0xa1, 0xfb, 0x8e, 0x39, 0xfe, 0x1a, 0x9e, 0x01, 0x51, 0x09, 0xfd, 0x59, 0x24, 0xfa, 0x12, 0x68, 0x00, 0x83, 0xa4, 0xfe, 0xc2, 0xa3, 0x63, 0x48, 0x96, 0x27, 0xc9, 0xce, 0xc6, 0x1f, 0x76, 0x17, 0xa0, 0x53, 0x1e, 0xd8, 0xa7, 0xee, 0x60, 0x52, 0x01, 0x33, 0x0b, 0x31, 0x2c, 0xd7, 0xeb, 0x80, 0xcc, 0xcf, 0xf9, 0xd7, 0x07, 0xf6, 0x20, 0x12, 0x93, 0x02, 0xf9, 0x4a, 0xc1, 0xf5, 0x6a, 0x40, 0xfb, 0x98, 0x4d, 0xf7, 0x99, 0x09, 0x0d, 0x05, 0xbc, 0x05, 0xa0, 0x49, 0xf7, 0xb5, 0x95, 0xfe, 0xef, 0x40, 0xf9, 0x7b, 0x82, 0xf9, 0x57, 0x03, 0xf9, 0xb5, 0xa4, 0xf9, 0x4a, 0xfd, 0xfb, 0x99, 0x3d, 0xfc, 0x8d, 0x19, 0xfe, 0x5e, 0x6b, 0x01, 0xae, 0x98, 0xfc, 0x16, 0x03, 0xfa, 0xa9, 0x82, 0x01, 0x28, 0xae, 0xfd, 0x25, 0x04, 0x68, 0x40, 0x9a, 0x2a, 0x9c, 0x09, 0xc2, 0x49, 0x37, 0x17, 0xaa, 0xa1, 0x1c, 0xdc, 0xab, 0xed, 0x61, 0x78, 0xfe, 0xf9, 0x20, 0x33, 0x53, 0x6f, 0xf1, 0xdb, 0xa0, 0xcc, 0x84, 0x07, 0x06, 0x56, 0x2b, 0x12, 0xb7, 0x4a, 0xf8, 0xc1, 0xdf, 0xf6, 0x2a, 0x5b, 0xfc, 0xb7, 0x41, 0xf4, 0x23, 0xc5, 0x0b, 0xc7, 0xb9, 0x07, 0x8f, 0x04, 0xf7, 0x42, 0xf5, 0xfe, 0xa3, 0xac, 0xf9, 0x2b, 0x51, 0xf9, 0x40, 0xa0, 0xf9, 0xa8, 0x47, 0xf9, 0x3b, 0xeb, 0xfb, 0x8a, 0xb0, 0xfc, 0xf6, 0xf2, 0xfd, 0x8a, 0xc8, 0x00, 0x29, 0x70, 0xfc, 0x16, 0x2a, 0xfa, 0x0a, 0xa2, 0x01, 0xde, 0xa3, 0xfc, 0x43, 0x8b, 0x6b, 0xea, 0xdd, 0x2c, 0xda, 0x24, 0xc0, 0x35, 0x8b, 0x16, 0xff, 0xe9, 0x1a, 0x31, 0x33, 0xec, 0x8b, 0xea, 0xf9, 0xc0, 0xed, 0x35, 0xd9, 0xe7, 0xf6, 0xb5, 0xbe, 0xca, 0xac, 0xf8, 0x03, 0xb9, 0x0a, 0x11, 0x5b, 0x0a, 0xf9, 0x9d, 0xbc, 0xf7, 0x6e, 0xba, 0xfc, 0x92, 0x77, 0xf2, 0x59, 0x89, 0x09, 0x0a, 0xca, 0x08, 0x8a, 0x8d, 0xf8, 0x17, 0x3c, 0xfe, 0x81, 0xc1, 0xfa, 0x18, 0x2e, 0xfa, 0xf2, 0xf0, 0xf8, 0xf3, 0x9b, 0xf9, 0x17, 0xd6, 0xfb, 0x6b, 0x06, 0xfd, 0x8b, 0xab, 0xfd, 0x5c, 0xd9, 0xff, 0xc0, 0xd7, 0xfc, 0xbe, 0x18, 0xfa, 0x3c, 0x77, 0x00, 0x8d, 0xad, 0xfc, 0x1b, 0x41, 0x6e, 0x9a, 0xe2, 0x2d, 0x81, 0x5c, 0xc1, 0xe8, 0x9f, 0x15, 0x1a, 0x74, 0x19, 0xa9, 0x15, 0xea, 0x10, 0x6a, 0xf4, 0x7f, 0xe8, 0x38, 0x85, 0x8d, 0xfb, 0x64, 0xfa, 0xca, 0x15, 0xb2, 0x01, 0x17, 0x82, 0x0e, 0x3e, 0x43, 0xfb, 0x2c, 0xd6, 0xf8, 0x3b, 0xc4, 0xfb, 0x02, 0xbc, 0xf1, 0xc0, 0x7a, 0x07, 0x09, 0x58, 0x08, 0xa5, 0xb8, 0xfb, 0x32, 0x09, 0xfd, 0x2d, 0xd0, 0xfb, 0xf8, 0x47, 0xfc, 0x78, 0x52, 0xf7, 0xb7, 0x93, 0xfa, 0xb8, 0xcd, 0xfb, 0x10, 0x27, 0xfd, 0xb9, 0xf6, 0xfc, 0x12, 0x70, 0xff, 0xbe, 0xb1, 0xfc, 0xcd, 0x94, 0xf9, 0x6c, 0xee, 0xff, 0x64, 0x89, 0xfc, 0xaa, 0x36, 0x6e, 0x94, 0x4d, 0x30, 0x65, 0xdb, 0xc4, 0xc5, 0xb5, 0x14, 0x17, 0xf0, 0x17, 0x3b, 0x08, 0xe7, 0x5f, 0xbb, 0xee, 0x3b, 0xe4, 0x3a, 0x03, 0xbc, 0x00, 0x28, 0x95, 0xcc, 0xda, 0x97, 0xfe, 0x9e, 0x3a, 0x0b, 0xa4, 0xd9, 0xfe, 0xe6, 0x2b, 0xfa, 0x70, 0x72, 0xf9, 0x12, 0xcb, 0xf1, 0xe8, 0x57, 0x06, 0x39, 0x23, 0x06, 0x7d, 0xbb, 0xff, 0xc4, 0x99, 0xfc, 0xd0, 0xc1, 0xfb, 0x17, 0x74, 0xff, 0x7d, 0xfb, 0xf5, 0x2d, 0x46, 0xfb, 0x1a, 0x13, 0xfc, 0xb2, 0x7a, 0xfc, 0x80, 0xcb, 0xfc, 0x0d, 0x19, 0xfe, 0xa2, 0xb6, 0xfb, 0x13, 0xd4, 0xfa, 0xf5, 0xf7, 0xfe, 0x06, 0xea, 0xfb, 0xf5, 0x1a, 0x6c, 0xdb, 0xbd, 0x33, 0x0a, 0x79, 0xc9, 0x3c, 0x98, 0x13, 0x96, 0x7d, 0x16, 0xd4, 0x8e, 0xe4, 0xca, 0x2e, 0xe9, 0x21, 0x4b, 0x39, 0x21, 0xda, 0x06, 0x11, 0xc7, 0xcf, 0x25, 0x1c, 0xfb, 0xb4, 0x82, 0x07, 0x1d, 0x7d, 0x02, 0x99, 0x7e, 0xfb, 0xa3, 0xa2, 0xf6, 0xbc, 0xcb, 0xf2, 0x02, 0x91, 0x05, 0xc4, 0x9a, 0x02, 0x16, 0x0d, 0x03, 0xb2, 0x69, 0xfe, 0x41, 0x2d, 0xfa, 0xb6, 0x7d, 0x02, 0x8c, 0x5a, 0xf6, 0xd7, 0x9b, 0xfa, 0x2e, 0xe1, 0xfc, 0xbb, 0x11, 0xfc, 0x21, 0x9a, 0xfa, 0xc6, 0x7c, 0xfc, 0x96, 0x38, 0xfc, 0x9b, 0x4c, 0xfb, 0xeb, 0xc1, 0xfe, 0x60, 0x8a, 0xfb, 0x7d, 0x1c, 0x68, 0x92, 0xe9, 0x36, 0x45, 0x0f, 0xd0, 0xd5, 0x2f, 0x14, 0xdd, 0xe1, 0x13, 0x4f, 0xf2, 0xe1, 0x83, 0x2f, 0xe4, 0xbc, 0x3d, 0x35, 0x9d, 0x5e, 0x0e, 0x98, 0x3f, 0xd3, 0xab, 0x39, 0xf7, 0x48, 0x76, 0x04, 0x8a, 0x4d, 0x05, 0xa0, 0x19, 0xfd, 0xff, 0x94, 0xf4, 0xe9, 0xca, 0xf3, 0x65, 0xf9, 0x04, 0x58, 0x2b, 0xff, 0xb6, 0x8e, 0x04, 0xf9, 0x45, 0x02, 0xa0, 0x78, 0xf8, 0xcb, 0xf2, 0x03, 0x62, 0xf0, 0xf8, 0x69, 0x39, 0xf9, 0x1e, 0xd5, 0xfd, 0xed, 0x1e, 0xfa, 0x34, 0x69, 0xf8, 0xfd, 0x8b, 0xfc, 0x49, 0x40, 0xfb, 0xaf, 0x8a, 0xfc, 0xc3, 0x8b, 0xff, 0xb9, 0x07, 0xfb, 0xa5, 0x83, 0x63, 0xd4, 0xa9, 0x3a, 0x65, 0x6b, 0xd6, 0xa4, 0x96, 0x13, 0xbc, 0x8c, 0x11, 0x7e, 0x93, 0xe3, 0x75, 0x75, 0xde, 0xf2, 0x74, 0x2c, 0x65, 0x51, 0x17, 0x48, 0x10, 0xd7, 0x70, 0x59, 0xf4, 0x2b, 0xbd, 0x02, 0x2a, 0xf1, 0x04, 0xfd, 0x87, 0xff, 0xee, 0x9b, 0xf4, 0x4a, 0x18, 0xf4, 0x72, 0xcf, 0x04, 0x1e, 0xea, 0xfb, 0x2d, 0x6a, 0x04, 0xe7, 0x9f, 0x06, 0xb7, 0xc8, 0xf8, 0xc7, 0x07, 0x03, 0xbd, 0x5b, 0xfc, 0x9b, 0x04, 0xf9, 0x31, 0x57, 0xfb, 0xd7, 0x90, 0xfa, 0x5c, 0x29, 0xf7, 0x32, 0x42, 0xfb, 0x58, 0x12, 0xfb, 0xd9, 0xec, 0xfd, 0xb0, 0xf6, 0x00, 0xd7, 0xc1, 0xfa, 0xfb, 0x79, 0x5f, 0x07, 0x1a, 0x3e, 0x2d, 0xfc, 0xda, 0x22, 0xdc, 0x13, 0x5d, 0x55, 0x0e, 0x5d, 0x4a, 0xe6, 0xd2, 0x8d, 0xdb, 0x47, 0x94, 0x1f, 0xd0, 0x06, 0x1f, 0x23, 0x5d, 0xdc, 0x44, 0x81, 0xf1, 0x26, 0x25, 0x02, 0xaf, 0x1d, 0x03, 0x0e, 0xe9, 0x00, 0x9a, 0x03, 0xf7, 0x64, 0x1a, 0xf4, 0x01, 0xd3, 0x03, 0x14, 0x85, 0xfa, 0xa1, 0x95, 0x02, 0x50, 0x99, 0x09, 0x07, 0x7e, 0xfa, 0x2f, 0x3e, 0x02, 0xf3, 0xae, 0xfd, 0x70, 0x79, 0xf8, 0x43, 0xd7, 0xf9, 0x6c, 0x60, 0xfb, 0xe0, 0xd5, 0xf6, 0x5e, 0x07, 0xfa, 0xc6, 0xf1, 0xfa, 0x52, 0xec, 0xfe, 0x37, 0xfd, 0x01, 0xcc, 0x96, 0xfa, 0x73, 0xf0, 0x5c, 0x52, 0x1e, 0x3f, 0x14, 0xef, 0xde, 0xd7, 0x19, 0x16, 0x29, 0xcd, 0x0a, 0x15, 0x31, 0xe7, 0xb7, 0xb2, 0xdb, 0x2a, 0x14, 0x13, 0xe7, 0xec, 0x22, 0x6f, 0x8f, 0xe3, 0x5d, 0x3a, 0xee, 0x1b, 0x49, 0x02, 0xa4, 0x4a, 0x02, 0x92, 0xf3, 0xff, 0x7c, 0x8a, 0xfb, 0xae, 0x18, 0xf4, 0xa6, 0x4e, 0x02, 0x0c, 0x72, 0xfb, 0x9a, 0xd4, 0xfe, 0xdc, 0x0b, 0x0b, 0x0a, 0x6c, 0xfd, 0x13, 0xa4, 0x00, 0x8e, 0x48, 0xfd, 0xc9, 0x9b, 0xf9, 0x09, 0x21, 0xf9, 0x5c, 0xa0, 0xfc, 0x3e, 0xb3, 0xf7, 0x05, 0xce, 0xf8, 0x43, 0xc2, 0xfb, 0xcf, 0xb0, 0xfd, 0x07, 0xd3, 0x01, 0x80, 0xd8, 0xfb, 0x56, 0x8d, 0x5a, 0x03, 0x2d, 0x40, 0x1c, 0xc7, 0xe1, 0xd6, 0x0f, 0x19, 0x60, 0xb7, 0x08, 0xb9, 0xa0, 0xe5, 0x82, 0xfa, 0xde, 0xa3, 0x6c, 0x07, 0x7b, 0xe6, 0x22, 0xa4, 0x77, 0xed, 0x75, 0x03, 0xea, 0xa0, 0x3b, 0x02, 0x66, 0x88, 0x04, 0x53, 0xae, 0xfc, 0x82, 0x45, 0x00, 0x7e, 0x36, 0xf6, 0x31, 0xbc, 0xff, 0x98, 0xdb, 0xfd, 0x78, 0x5a, 0xfa, 0x54, 0x18, 0x0a, 0xeb, 0xf7, 0x00, 0x47, 0x53, 0xfe, 0xc0, 0x91, 0xfd, 0x32, 0xc9, 0xfb, 0x48, 0xc0, 0xf9, 0xca, 0x88, 0xfd, 0x85, 0xfe, 0xf9, 0x85, 0xf7, 0xf8, 0xa4, 0x0a, 0xfa, 0x33, 0xa3, 0xfb, 0xa4, 0x49, 0x02, 0x09, 0xa1, 0xfd, 0x56, 0x0f, 0x56, 0x48, 0xd2, 0x41, 0x22, 0x6e, 0xe6, 0xe8, 0xc3, 0x18, 0xf5, 0x8a, 0x07, 0x3a, 0x9b, 0xe6, 0x63, 0xf9, 0xe0, 0xea, 0xe5, 0xfb, 0xaa, 0x22, 0x22, 0x1a, 0xc1, 0xf6, 0x65, 0x25, 0xe6, 0x8d, 0x25, 0x02, 0x03, 0x6c, 0x07, 0x41, 0x3f, 0xf9, 0x49, 0x13, 0x04, 0x98, 0xb0, 0xf9, 0x1b, 0xc4, 0xfb, 0xc4, 0x56, 0x00, 0x90, 0xa5, 0xf7, 0xe5, 0x5a, 0x04, 0x17, 0x33, 0x04, 0x06, 0xe1, 0xfe, 0xf3, 0xd9, 0xfc, 0xad, 0xe6, 0xfe, 0x47, 0xec, 0xfa, 0xc2, 0x25, 0xff, 0x52, 0xb9, 0xfb, 0xee, 0x79, 0xf8, 0xaa, 0xf4, 0xf8, 0x25, 0x69, 0xf9, 0xe3, 0x9a, 0x00, 0xe2, 0x1e, 0xff, 0x29, 0x04, 0x53, 0x5e, 0xd8, 0x40, 0x95, 0x9b, 0xeb, 0x73, 0xbe, 0x17, 0x16, 0x2b, 0x05, 0x23, 0x04, 0xea, 0x46, 0xd9, 0xe0, 0x15, 0x28, 0xf3, 0x3e, 0x4d, 0x20, 0x02, 0x1c, 0xfd, 0x61, 0x2a, 0xe5, 0xe6, 0xc5, 0x01, 0x88, 0xf0, 0x08, 0x96, 0x4e, 0xf8, 0x41, 0x31, 0x07, 0x66, 0x51, 0xf9, 0x0e, 0x1b, 0xfa, 0x90, 0xca, 0x02, 0x40, 0x52, 0xf4, 0xb7, 0x9f, 0xff, 0x3f, 0x2a, 0x04, 0x3e, 0x5f, 0x01, 0xff, 0x98, 0xfd, 0xad, 0x74, 0x01, 0xe2, 0xbb, 0xfc, 0x14, 0x2b, 0xff, 0x3c, 0x9d, 0xfd, 0x03, 0x7c, 0xf8, 0x19, 0xd2, 0xf8, 0xf2, 0x64, 0xf6, 0x41, 0x61, 0xfd, 0x21, 0xfb, 0xff, 0x8c, 0x43, 0x52, 0x5c, 0x7f, 0x3d, 0xec, 0x38, 0xef, 0x1e, 0x43, 0x19, 0x7e, 0xa7, 0x01, 0x16, 0x79, 0xed, 0x8c, 0x9c, 0xe2, 0xd9, 0xc2, 0xeb, 0x64, 0x63, 0x1d, 0x93, 0xef, 0x03, 0x52, 0x70, 0xe4, 0xdc, 0x07, 0x01, 0x12, 0x9c, 0x0d, 0xe9, 0x64, 0xf6, 0x51, 0x79, 0x07, 0xd6, 0x1e, 0xfa, 0x23, 0x75, 0xf8, 0x87, 0x4e, 0x04, 0xec, 0x35, 0xf3, 0x9b, 0x01, 0xfe, 0x09, 0x28, 0x01, 0x27, 0x6c, 0x02, 0x2a, 0xd8, 0x03, 0xec, 0x17, 0x01, 0xe7, 0xe1, 0xfc, 0x64, 0xeb, 0x01, 0xe2, 0x7f, 0xfe, 0x52, 0x9a, 0xf8, 0x4f, 0xd9, 0xf8, 0x66, 0x66, 0xf5, 0x02, 0xa6, 0xf9, 0xb7, 0xa4, 0xfe, 0x5a, 0x3c, 0x53, 0x42, 0xaa, 0x38, 0xe3, 0x6f, 0xef, 0x61, 0xc9, 0x1c, 0x41, 0x1d, 0xff, 0xea, 0x0a, 0xee, 0x98, 0xc8, 0xe4, 0xe5, 0x33, 0xe8, 0x81, 0x51, 0x18, 0xa1, 0x55, 0x09, 0x5f, 0x65, 0xe6, 0x1f, 0xeb, 0xfe, 0x5b, 0xee, 0x11, 0xbf, 0xda, 0xf4, 0xa4, 0x03, 0x04, 0x99, 0xb1, 0xfc, 0xa8, 0xc5, 0xf6, 0x54, 0xeb, 0x03, 0xdf, 0xd1, 0xf5, 0x70, 0x83, 0xfb, 0x52, 0xe3, 0x01, 0xfa, 0x7d, 0x00, 0x27, 0xd0, 0x04, 0x43, 0xc6, 0x05, 0xd1, 0x8e, 0xfb, 0x01, 0x80, 0x03, 0x50, 0x13, 0x00, 0x57, 0x6d, 0xf7, 0x7a, 0x70, 0xf9, 0x47, 0x0c, 0xf6, 0x8a, 0x9b, 0xf6, 0x40, 0x68, 0xfc, 0xb8, 0xf5, 0x54, 0x83, 0x14, 0x35, 0x54, 0x86, 0xe8, 0x51, 0xba, 0x24, 0xae, 0x0c, 0x01, 0x10, 0xbf, 0xe6, 0x6a, 0x2a, 0xe9, 0x60, 0xc6, 0xe9, 0x83, 0x24, 0x12, 0xc3, 0x08, 0x0c, 0xd4, 0x02, 0xeb, 0x9a, 0x10, 0xfc, 0x29, 0x5c, 0x14, 0x4f, 0xed, 0xf3, 0xc0, 0x08, 0xff, 0xd0, 0x9d, 0x00, 0xd9, 0x56, 0xf6, 0x3d, 0x90, 0x01, 0x1d, 0xed, 0xf9, 0x14, 0xf2, 0xfc, 0x1d, 0xf0, 0x00, 0x33, 0x01, 0xff, 0x24, 0x09, 0x01, 0x39, 0x5d, 0x0b, 0x87, 0x02, 0xfe, 0x14, 0x25, 0x00, 0x2d, 0x91, 0x04, 0x6c, 0xf5, 0xf5, 0xec, 0x0f, 0xf8, 0xb3, 0xd1, 0xf9, 0x7c, 0x38, 0xf5, 0xcb, 0xf8, 0xf8, 0x4a, 0xa8, 0x59, 0xd5, 0xbf, 0x2d, 0xb5, 0x41, 0xde, 0x83, 0x5a, 0x32, 0xb4, 0xc0, 0x01, 0xfb, 0xe0, 0xd9, 0xb5, 0xf1, 0xef, 0x1b, 0x61, 0xf1, 0x2c, 0x40, 0x09, 0x17, 0xe2, 0x0b, 0xbe, 0x10, 0xf3, 0xcb, 0xcc, 0xf5, 0xe1, 0x2f, 0x15, 0x19, 0x66, 0xf6, 0x1d, 0xee, 0xf7, 0x1f, 0xe5, 0x03, 0xd7, 0x4d, 0xf9, 0x00, 0x3b, 0xfe, 0x2e, 0x92, 0xfc, 0x83, 0x00, 0x01, 0x19, 0x3e, 0xfe, 0x7c, 0xe5, 0xfd, 0xe6, 0xad, 0xff, 0x73, 0x26, 0x09, 0x15, 0x72, 0x03, 0x79, 0x6c, 0x00, 0xd6, 0x7c, 0x02, 0xcf, 0xd8, 0xf8, 0x6d, 0xf8, 0xf6, 0x25, 0x66, 0xfa, 0xa8, 0x2a, 0xf7, 0xce, 0xb2, 0xf6, 0xc4, 0x68, 0x5d, 0xe5, 0x14, 0x24, 0x40, 0xea, 0xd9, 0x19, 0x0e, 0x3d, 0xb7, 0x3b, 0xfd, 0x56, 0x52, 0xd5, 0x41, 0xc1, 0xf6, 0x7b, 0x20, 0xf6, 0x9f, 0xce, 0x02, 0x3a, 0x58, 0x0a, 0xc9, 0xc3, 0xf8, 0xce, 0x92, 0xf2, 0xdb, 0x49, 0x14, 0x11, 0xe5, 0xf7, 0x2b, 0x8a, 0xf4, 0xa2, 0x37, 0x05, 0x8d, 0xa9, 0xfd, 0x48, 0xb7, 0xfc, 0x7b, 0xe0, 0xfc, 0x5b, 0xb3, 0x02, 0xd1, 0xef, 0xfe, 0x40, 0x27, 0xfd, 0x18, 0x08, 0xfd, 0xc5, 0xe3, 0x07, 0xc5, 0xe1, 0x04, 0x75, 0xa9, 0x02, 0xb1, 0x8e, 0x01, 0xf7, 0x15, 0xfb, 0x50, 0xbd, 0xf7, 0x29, 0x12, 0xf8, 0x45, 0xf8, 0xf9, 0x7c, 0xf1, 0xf7, 0x8a, 0x34, 0x5e, 0x09, 0x7e, 0x1c, 0xf6, 0x81, 0xd7, 0x3a, 0x18, 0x44, 0x97, 0x54, 0xfb, 0x1f, 0xcd, 0xd0, 0xa7, 0xa6, 0xfc, 0x0b, 0x54, 0xfe, 0x00, 0x13, 0xf9, 0xbe, 0x45, 0x06, 0xd3, 0x57, 0x02, 0x21, 0xc4, 0xee, 0x20, 0xb0, 0x0f, 0x14, 0x1b, 0xfd, 0x1d, 0xf9, 0xf3, 0x17, 0x48, 0x03, 0x06, 0xda, 0x00, 0x6f, 0xee, 0xfd, 0x01, 0xec, 0xfc, 0xd2, 0x3e, 0x01, 0x79, 0x40, 0xff, 0xda, 0x8a, 0xff, 0xf8, 0x01, 0xfa, 0x68, 0xa3, 0x06, 0x22, 0x02, 0x06, 0xcb, 0xc8, 0x00, 0xc8, 0x83, 0x04, 0x30, 0x8f, 0xfc, 0x3b, 0xad, 0xf6, 0xe0, 0xbd, 0xf9, 0x50, 0x05, 0xfa, 0xb7, 0xae, 0xf8, 0x57, 0x73, 0x59, 0x40, 0xa0, 0x17, 0x56, 0xf7, 0xd9, 0xbd, 0xd9, 0x46, 0x94, 0xc5, 0xfa, 0xdb, 0xd7, 0xcf, 0x41, 0x70, 0x01, 0x18, 0xdf, 0x00, 0xf4, 0xf6, 0xf2, 0xb5, 0x74, 0x05, 0xef, 0x6c, 0x06, 0xc6, 0x12, 0xec, 0x42, 0x74, 0x0d, 0x45, 0x0b, 0x02, 0x7c, 0x08, 0xf3, 0x9e, 0xc5, 0x02, 0x04, 0x3e, 0x02, 0xfa, 0x2f, 0xfd, 0x19, 0xcc, 0xfe, 0x05, 0xea, 0xff, 0x23, 0x4e, 0xfe, 0x51, 0x22, 0x01, 0x89, 0x77, 0xfa, 0x7a, 0x7c, 0x04, 0x2e, 0xf0, 0x04, 0x59, 0x6b, 0x01, 0x47, 0x54, 0x04, 0x44, 0x1a, 0xfe, 0xeb, 0x49, 0xf7, 0x98, 0x59, 0xfb, 0xff, 0xe8, 0xfa, 0xaa, 0x24, 0xf7, 0xe5, 0x54, 0x50, 0x16, 0xcd, 0x15, 0xbf, 0xd2, 0xdf, 0x58, 0x7e, 0x44, 0xf7, 0xf0, 0xfc, 0x2b, 0x00, 0xd3, 0x1e, 0x15, 0x01, 0x96, 0xca, 0x01, 0x8e, 0x2c, 0xf2, 0x90, 0xac, 0x02, 0xee, 0x94, 0x07, 0x1b, 0x6a, 0xed, 0xfa, 0x54, 0x0b, 0x6e, 0x90, 0x04, 0xf6, 0x56, 0xf4, 0xb5, 0xcf, 0x01, 0xe8, 0x7a, 0x02, 0x7b, 0x34, 0xfd, 0x34, 0x7b, 0xfe, 0xac, 0x69, 0x00, 0xe1, 0x37, 0xfe, 0xf8, 0x2a, 0x00, 0x15, 0x77, 0xfc, 0xb6, 0xb8, 0x03, 0xfe, 0x01, 0x03, 0xa4, 0x21, 0x02, 0xe8, 0x5a, 0x03, 0xb2, 0xde, 0xfd, 0xb7, 0x37, 0xfa, 0x6d, 0x3f, 0xfc, 0xda, 0x43, 0xfb, 0x14, 0xe4, 0xf7, 0x61, 0x58, 0x46, 0x12, 0xcd, 0x16, 0xa1, 0xf8, 0xe4, 0x07, 0x12, 0x3e, 0x01, 0xb9, 0x01, 0x17, 0x85, 0xd6, 0x78, 0x31, 0x00, 0x9d, 0xe2, 0x02, 0x17, 0x2f, 0xf1, 0x81, 0x53, 0x00, 0xe9, 0x2a, 0x09, 0x1a, 0xb6, 0xef, 0xa0, 0x4a, 0x08, 0xe1, 0x8e, 0x07, 0xb9, 0x1e, 0xf5, 0x98, 0x93, 0xff, 0x5e, 0x45, 0x04, 0x39, 0x46, 0xfd, 0x20, 0xbf, 0xfc, 0x35, 0x2f, 0x01, 0x7d, 0x01, 0xff, 0x12, 0x37, 0xff, 0x2a, 0x76, 0xfd, 0xe9, 0xef, 0x03, 0x3b, 0xe1, 0x02, 0xe7, 0xa7, 0x00, 0xe6, 0xba, 0x02, 0x33, 0x20, 0xfe, 0x6e, 0xef, 0xfa, 0xd7, 0x1f, 0xfe, 0xa7, 0x80, 0xfb, 0x91, 0xce, 0xf8, 0x2c, 0x53, 0x3e, 0x48, 0x8b, 0x1c, 0x63, 0xa5, 0xed, 0xe9, 0xec, 0x2b, 0x8c, 0x7f, 0xfe, 0x8a, 0x9e, 0xe1, 0x93, 0x02, 0x00, 0xd4, 0x34, 0xfd, 0x1f, 0x59, 0xfc, 0x94, 0x2b, 0x01, 0xfc, 0xfd, 0xfc, 0xf7, 0x9e, 0xfb, 0xbf, 0x0d, 0x09, 0xd2, 0x28, 0x00, 0x99, 0x73, 0xf9, 0xcc, 0x99, 0xfe, 0x21, 0x6f, 0x01, 0xf6, 0x1f, 0xfe, 0xd6, 0x84, 0xfa, 0xc2, 0x4c, 0x00, 0x22, 0xc6, 0x00, 0x45, 0xa4, 0x00, 0x6c, 0x1e, 0x00, 0xa0, 0xb5, 0x00, 0x92, 0x25, 0x00, 0x26, 0x69, 0x02, 0xcc, 0x92, 0x01, 0x16, 0x75, 0xff, 0x69, 0xeb, 0xff, 0xce, 0x7c, 0xff, 0xe7, 0xa3, 0xfe, 0xd3, 0x4c, 0xff, 0x32, 0xb9, 0x34, 0xbb, 0x4a, 0x1a, 0x58, 0xc5, 0xf4, 0x78, 0xfe, 0x28, 0x7e, 0xcd, 0xfe, 0xfc, 0x1e, 0xe6, 0xee, 0x0f, 0x00, 0x25, 0x24, 0xfc, 0xbe, 0x56, 0xfd, 0xcf, 0x96, 0x01, 0x4c, 0xf9, 0xfc, 0x67, 0xeb, 0xfb, 0xb4, 0x04, 0x09, 0xcf, 0xba, 0x00, 0x49, 0x92, 0xf9, 0x3b, 0x7b, 0xfe, 0xee, 0xdd, 0x00, 0xe9, 0x5f, 0xfe, 0xb0, 0x5b, 0xfb, 0xdb, 0x4d, 0x00, 0xb4, 0x2d, 0x00, 0x79, 0x4a, 0x00, 0x03, 0x87, 0x00, 0x2e, 0xd5, 0x00, 0x71, 0xcb, 0x00, 0x32, 0x6a, 0x02, 0x7d, 0x27, 0x01, 0x96, 0x4f, 0xff, 0xb5, 0x3d, 0x00, 0x2e, 0xcf, 0xff, 0xf6, 0x28, 0xfe, 0xd7, 0x4f, 0xff, 0xa5, 0xe4, 0x2b, 0xa2, 0xd9, 0x18, 0x6d, 0xba, 0xfb, 0xca, 0x87, 0x23, 0xf4, 0xd0, 0xff, 0x10, 0x7c, 0xec, 0xe4, 0xff, 0xfd, 0xbf, 0xe1, 0xfa, 0xe2, 0x3f, 0xff, 0x2d, 0x33, 0x02, 0xf0, 0x3e, 0xfc, 0xf9, 0xba, 0xfc, 0xb2, 0x9e, 0x08, 0x9a, 0xe8, 0x00, 0xcb, 0x82, 0xfa, 0x69, 0x1a, 0xfe, 0xeb, 0xd5, 0x00, 0x37, 0x6c, 0xfe, 0x7e, 0xd6, 0xfb, 0xc7, 0x6c, 0x00, 0x05, 0x07, 0x00, 0xf1, 0xf5, 0xff, 0x11, 0x89, 0x00, 0x4b, 0x21, 0x01, 0xd2, 0x6e, 0x01, 0x93, 0xfa, 0x01, 0x30, 0x52, 0x00, 0xf1, 0xdf, 0xff, 0x34, 0x54, 0x00, 0xbe, 0xa8, 0xff, 0x7e, 0x2e, 0xff, 0x30, 0xa1, 0xff, 0xbf, 0xd9, 0x24, 0x53, 0x60, 0x18, 0xba, 0x59, 0xff, 0x79, 0xc4, 0x1d, 0x8d, 0x72, 0x02, 0x3a, 0xc3, 0xf0, 0xf7, 0xaf, 0xfc, 0x1c, 0xff, 0xfa, 0xa2, 0x47, 0x00, 0xf6, 0x50, 0x02, 0xd2, 0x96, 0xfc, 0x6a, 0x7d, 0xfd, 0x79, 0xf5, 0x06, 0xc7, 0x77, 0x01, 0x94, 0x9f, 0xfb, 0x84, 0x9d, 0xfd, 0x81, 0x87, 0x00, 0x18, 0xcd, 0xfe, 0xbe, 0x69, 0xfc, 0x51, 0x52, 0x00, 0x14, 0x1c, 0x00, 0x02, 0xf9, 0xff, 0x14, 0x30, 0x00, 0x55, 0x91, 0x01, 0x5a, 0x07, 0x02, 0xc2, 0x75, 0x00, 0x51, 0x3f, 0x00, 0x08, 0x3c, 0x01, 0x5e, 0x08, 0x00, 0x57, 0x42, 0xff, 0xbb, 0x95, 0x00, 0x9e, 0x7f, 0x00, 0xab, 0x59, 0x20, 0x39, 0x04, 0x18, 0x66, 0xce, 0xff, 0xeb, 0x99, 0x19, 0x38, 0xf4, 0x04, 0xf8, 0x80, 0xf2, 0xbb, 0xe0, 0xfc, 0xf8, 0xe2, 0xfc, 0xa2, 0xfd, 0xff, 0x7c, 0x9a, 0x01, 0x34, 0x76, 0xfe, 0x97, 0x11, 0xfe, 0xdd, 0x91, 0x04, 0x5d, 0x4d, 0x02, 0xd0, 0xdb, 0xfc, 0xff, 0xcf, 0xfc, 0x9d, 0x61, 0x00, 0x76, 0xa3, 0xff, 0x11, 0x08, 0xfd, 0x17, 0xf8, 0xff, 0xc0, 0x7b, 0x00, 0xdf, 0x0a, 0x00, 0xd5, 0x0d, 0x00, 0x3e, 0x4e, 0x02, 0x41, 0x60, 0x01, 0xf8, 0x12, 0x00, 0x2e, 0x4e, 0x01, 0x70, 0x65, 0x01, 0x6c, 0xf4, 0xff, 0x66, 0x48, 0x00, 0x81, 0x84, 0x01, 0xa1, 0x31, 0x00, 0x76, 0xca, 0x1d, 0xd2, 0x33, 0x17, 0x70, 0x2f, 0xff, 0x9b, 0x5f, 0x16, 0x5c, 0xae, 0x05, 0xac, 0x5e, 0xf4, 0x00, 0x60, 0xfe, 0xe8, 0xec, 0xfd, 0x6d, 0x62, 0xff, 0x68, 0x91, 0x01, 0x5d, 0x39, 0x00, 0xd1, 0xec, 0xfd, 0x8e, 0x2d, 0x03, 0xc4, 0xce, 0x02, 0x1d, 0xf9, 0xfc, 0xe0, 0x0f, 0xfd, 0x88, 0xbc, 0x00, 0xc1, 0xe5, 0xff, 0xa8, 0x52, 0xfd, 0x33, 0x47, 0x00, 0x84, 0xc2, 0x00, 0x30, 0x83, 0xff, 0x68, 0x2d, 0x01, 0x88, 0x8f, 0x02, 0x28, 0x8f, 0x00, 0x0f, 0xb1, 0x00, 0x20, 0xef, 0x01, 0xed, 0xcc, 0x01, 0x17, 0x7b, 0x00, 0xa6, 0x15, 0x01, 0x58, 0x00, 0x01, 0x96, 0x31, 0xff, 0x26, 0x11, 0x1b, 0xe4, 0xb0, 0x15, 0xbc, 0x2d, 0xff, 0xa8, 0x1e, 0x14, 0xa4, 0xdf, 0x05, 0x33, 0x56, 0xf6, 0x7d, 0x7a, 0xff, 0xdc, 0x60, 0xfe, 0x29, 0x24, 0xff, 0x10, 0x00, 0x02, 0x9d, 0x0a, 0x01, 0xb1, 0x8b, 0xfd, 0xbf, 0x5b, 0x02, 0x66, 0x9d, 0x02, 0xaa, 0xa8, 0xfd, 0x60, 0x9d, 0xfd, 0x3a, 0x89, 0x00, 0x41, 0x00, 0x00, 0x6f, 0xc7, 0xfd, 0xa6, 0xaa, 0x00, 0xfa, 0x64, 0x00, 0x4e, 0x7c, 0x00, 0xf3, 0x5b, 0x02, 0x50, 0x22, 0x01, 0xd1, 0xd3, 0x00, 0xbb, 0x2d, 0x02, 0xe9, 0x70, 0x02, 0xac, 0x8d, 0x01, 0x17, 0x49, 0x00, 0x98, 0xbc, 0x00, 0x88, 0xbc, 0xff, 0x5c, 0xd3, 0xfe, 0x50, 0x2b, 0x18, 0x83, 0x7c, 0x13, 0xc1, 0x0e, 0x00, 0xac, 0xe9, 0x12, 0x05, 0xce, 0x05, 0x19, 0x26, 0xf8, 0xa4, 0xff, 0xff, 0xaa, 0x2b, 0xff, 0xff, 0xcc, 0xff, 0x5e, 0xdb, 0x01, 0xb3, 0xbd, 0x00, 0x62, 0xba, 0xfd, 0xde, 0x8b, 0x02, 0x12, 0x4a, 0x02, 0x37, 0xea, 0xfd, 0xf1, 0x38, 0xfe, 0xbf, 0xa4, 0x00, 0x9e, 0xd2, 0xff, 0x19, 0xa1, 0xfe, 0xf4, 0x43, 0x01, 0x8f, 0xb8, 0x00, 0xe3, 0xc6, 0x01, 0x1a, 0x08, 0x02, 0x14, 0x42, 0x01, 0x24, 0x2b, 0x02, 0x82, 0x55, 0x02, 0x19, 0x00, 0x02, 0x86, 0x96, 0x00, 0x81, 0xc4, 0xff, 0x32, 0x1b, 0x00, 0xd3, 0x64, 0xff, 0x94, 0xd1, 0xfe, 0x5f, 0xca, 0x15, 0x19, 0x71, 0x12, 0xad, 0x8d, 0x00, 0xbc, 0x3c, 0x10, 0x66, 0xf1, 0x05, 0xd6, 0x69, 0xfa, 0x71, 0xf3, 0x00, 0x37, 0x5e, 0xff, 0x01, 0x78, 0xff, 0xf2, 0x15, 0x02, 0xbe, 0x30, 0x01, 0x62, 0x20, 0xfe, 0xf9, 0xe2, 0x01, 0x92, 0x02, 0x02, 0xb5, 0x99, 0xfe, 0x16, 0x9d, 0xfe, 0x5d, 0x91, 0x00, 0x06, 0x8a, 0x00, 0x97, 0x09, 0x00, 0x84, 0x44, 0x01, 0x5e, 0xcb, 0x01, 0x8c, 0x07, 0x03, 0x17, 0xc7, 0x01, 0xa3, 0xc8, 0x01, 0x66, 0xcd, 0x01, 0xe8, 0x09, 0x01, 0x53, 0x36, 0x01, 0xd6, 0x1e, 0x00, 0x8f, 0x72, 0xff, 0xd9, 0xc7, 0xff, 0x3b, 0x64, 0xff, 0xf2, 0x55, 0xfe, 0xcc, 0xe4, 0x12, 0x1b, 0xac, 0x10, 0xe1, 0x78, 0x01, 0x68, 0x23, 0x0f, 0x35, 0x90, 0x06, 0x71, 0xcf, 0xfb, 0xcb, 0xed, 0x00, 0xdf, 0xca, 0xff, 0x7a, 0x3a, 0x00, 0xb0, 0x04, 0x02, 0x85, 0xc4, 0x00, 0x3a, 0x88, 0xfe, 0xda, 0xce, 0x01, 0x8d, 0xbe, 0x01, 0x17, 0x37, 0xff, 0x38, 0x52, 0xff, 0x41, 0x04, 0x01, 0xd7, 0x8d, 0x01, 0xcb, 0x06, 0x01, 0x33, 0x4b, 0x02, 0x85, 0x14, 0x03, 0xfd, 0xcd, 0x02, 0x1b, 0x11, 0x01, 0xa4, 0x8c, 0x00, 0xe5, 0x89, 0x00, 0x14, 0xb1, 0x00, 0xa5, 0xda, 0x00, 0x5f, 0x1f, 0x00, 0x2c, 0x2a, 0xff, 0xcc, 0x26, 0xff, 0x8f, 0x13, 0xff, 0x71, 0x12, 0xfe, 0x90, 0x14, 0x10, 0x14, 0x1b, 0x0f, 0x44, 0xe7, 0x02, 0x6e, 0xf3, 0x0d, 0x4e, 0x27, 0x06, 0xa3, 0x88, 0xfd, 0xe1, 0xc9, 0x01, 0xba, 0xa1, 0xff, 0x04, 0x60, 0x00, 0x05, 0x3b, 0x02, 0x5d, 0x84, 0x00, 0x07, 0x9d, 0xfe, 0x79, 0xfd, 0x01, 0xb6, 0x3c, 0x02, 0xdd, 0xff, 0xff, 0x0f, 0xd3, 0xff, 0xd9, 0x17, 0x02, 0xc3, 0x58, 0x03, 0x53, 0x03, 0x02, 0x39, 0xbe, 0x02, 0x18, 0x8c, 0x02, 0x1d, 0x80, 0x00, 0x9e, 0xbc, 0xff, 0x39, 0x5e, 0x00, 0x0d, 0x21, 0x00, 0xeb, 0x8c, 0x00, 0x93, 0x82, 0x00, 0x4f, 0x51, 0xff, 0x88, 0xd5, 0xfe, 0xe6, 0x26, 0xff, 0x22, 0x96, 0xfe, 0x50, 0x9b, 0xfd, 0x91, 0x90, 0x0e, 0xfd, 0xab, 0x0e, 0x0f, 0xf0, 0x02, 0x0f, 0xb5, 0x0b, 0x87, 0xd4, 0x06, 0x4e, 0xb7, 0xff, 0x2b, 0x8a, 0x01, 0x1f, 0x82, 0xff, 0x56, 0x9b, 0x00, 0xed, 0x33, 0x02, 0xd4, 0x45, 0x01, 0x96, 0x94, 0xff, 0x8e, 0x0c, 0x02, 0x5e, 0x8e, 0x02, 0xd9, 0x8d, 0x01, 0x0d, 0x19, 0x02, 0x62, 0x91, 0x03, 0x86, 0x7e, 0x03, 0xd1, 0x4b, 0x01, 0xdf, 0x0b, 0x01, 0xc6, 0xc5, 0x00, 0x33, 0x13, 0x00, 0x3e, 0xcd, 0xff, 0x80, 0x0a, 0x00, 0x7c, 0xd3, 0xff, 0x24, 0x0e, 0x00, 0xe4, 0x05, 0x00, 0x25, 0x12, 0xff, 0x3d, 0xbb, 0xfe, 0x74, 0xd2, 0xfe, 0xac, 0x15, 0xfe, 0x76, 0xa2, 0xfd, 0x07, 0x4e, 0x0b, 0x7e, 0x8c, 0x0c, 0x83, 0x57, 0x05, 0xfd, 0xf3, 0x0b, 0xde, 0x48, 0x06, 0xcd, 0xba, 0x00, 0x2b, 0xdd, 0x01, 0x1b, 0xb3, 0xff, 0xc2, 0xac, 0x01, 0x22, 0x99, 0x02, 0x69, 0xf5, 0x00, 0xb9, 0x9b, 0x00, 0x97, 0x0a, 0x04, 0xb1, 0x40, 0x04, 0x1d, 0x72, 0x02, 0x8b, 0x7c, 0x02, 0x49, 0xee, 0x02, 0x3f, 0x7e, 0x01, 0x4e, 0xf5, 0xff, 0x6e, 0xa2, 0x00, 0xa6, 0x54, 0x00, 0x54, 0x37, 0x00, 0xdf, 0x68, 0xff, 0xd6, 0x24, 0xff, 0x47, 0x7e, 0xff, 0xad, 0x9d, 0xff, 0x5a, 0xc2, 0xff, 0x91, 0x06, 0xff, 0x37, 0x7b, 0xfe, 0x6a, 0x60, 0xfe, 0x1e, 0xf3, 0xfd, 0xad, 0x15, 0xfe, 0xf1, 0xc7, 0x0a, 0x35, 0x6b, 0x0d, 0x3e, 0x3e, 0x05, 0x71, 0xfc, 0x08, 0x8e, 0xc1, 0x06, 0xdc, 0x21, 0x02, 0x64, 0xed, 0x01, 0x77, 0x13, 0x00, 0x06, 0x04, 0x02, 0xc8, 0x48, 0x04, 0xce, 0x3d, 0x03, 0x7f, 0xae, 0x02, 0xc0, 0x7e, 0x04, 0x58, 0x0e, 0x04, 0xd7, 0xc1, 0x01, 0xee, 0xe1, 0xff, 0x41, 0x94, 0x00, 0x0a, 0x71, 0x01, 0xbc, 0xc9, 0x00, 0xb9, 0x3a, 0x00, 0x3e, 0x2d, 0xff, 0x9b, 0x0d, 0xff, 0x3c, 0x0d, 0xff, 0x10, 0x33, 0xff, 0x08, 0x3b, 0xff, 0x32, 0x44, 0xff, 0x21, 0xf6, 0xfe, 0xca, 0x9a, 0xfe, 0xcc, 0xd8, 0xfe, 0x0d, 0x4f, 0xfe, 0x7d, 0x38, 0xfe, 0xb5, 0x35, 0xfe, 0xe2, 0xab, 0x08, 0x9b, 0xce, 0x0b, 0x40, 0xab, 0x06, 0x9a, 0xc0, 0x09, 0x96, 0x48, 0x07, 0xad, 0x4b, 0x02, 0x6c, 0x80, 0x02, 0x66, 0x71, 0x02, 0xf2, 0xba, 0x04, 0xb4, 0xca, 0x05, 0xe2, 0x1d, 0x04, 0x0f, 0xef, 0x02, 0x7c, 0x1a, 0x02, 0xce, 0x0c, 0x01, 0xea, 0x09, 0x00, 0x8d, 0x56, 0x00, 0x3a, 0x83, 0x01, 0xc7, 0x42, 0x01, 0x1b, 0x6c, 0xff, 0xbe, 0xef, 0xfe, 0x84, 0xbb, 0xff, 0x0e, 0xc8, 0xfe, 0x9d, 0x2e, 0xfe, 0x6a, 0xc1, 0xfe, 0x9e, 0x0f, 0xff, 0x6d, 0x22, 0xff, 0x18, 0xd2, 0xfe, 0x01, 0x12, 0xff, 0xa8, 0xca, 0xfe, 0x1b, 0x85, 0xfe, 0xeb, 0x62, 0xfe, 0x6f, 0x2d, 0xfe, 0x6f, 0x52, 0x09, 0x32, 0x39, 0x0e, 0xdb, 0x96, 0x07, 0x9e, 0x06, 0x07, 0x09, 0x0c, 0x06, 0x70, 0x81, 0x05, 0x3f, 0x8f, 0x07, 0x5f, 0x87, 0x05, 0xdf, 0x05, 0x04, 0x54, 0x8f, 0x03, 0x12, 0x4b, 0x01, 0x7b, 0xbc, 0xff, 0x11, 0x40, 0x00, 0x02, 0x20, 0x01, 0x48, 0x92, 0x01, 0xa7, 0x4d, 0x00, 0x65, 0x7a, 0xff, 0xfa, 0x5a, 0x00, 0x4b, 0x86, 0xff, 0xdc, 0xb2, 0xfe, 0x3c, 0x9c, 0xfe, 0x95, 0xcb, 0xfd, 0x5a, 0x3c, 0xfe, 0x38, 0x46, 0xff, 0x94, 0x17, 0xff, 0xd6, 0xdb, 0xfe, 0xb2, 0x38, 0xff, 0xa9, 0x5c, 0xff, 0x56, 0xa4, 0xfe, 0x2c, 0x2e, 0xfe, 0xf9, 0x6d, 0xfe, 0x97, 0x65, 0xfe, 0x05, 0xe5, 0x09, 0xba, 0x23, 0x0e, 0x78, 0x0d, 0x09, 0xd3, 0x37, 0x0b, 0x2b, 0x56, 0x09, 0xc9, 0x57, 0x07, 0x32, 0x82, 0x07, 0x95, 0xe5, 0x02, 0xf6, 0xfd, 0xff, 0x41, 0x75, 0x00, 0x21, 0x40, 0x00, 0x6f, 0x3b, 0x00, 0x50, 0x97, 0x00, 0xd5, 0x80, 0x00, 0xbb, 0x04, 0x01, 0xec, 0x8d, 0xff, 0xd6, 0x2d, 0xff, 0x44, 0xfc, 0xff, 0xc8, 0x9a, 0xfe, 0x20, 0x31, 0xfe, 0xfe, 0x26, 0xfe, 0x95, 0xa9, 0xfd, 0xc7, 0x87, 0xfe, 0xc8, 0x8b, 0xff, 0xe3, 0x5b, 0xff, 0xe1, 0xe8, 0xfe, 0xf1, 0x0d, 0xff, 0x9b, 0x34, 0xff, 0x71, 0xac, 0xfe, 0x22, 0x53, 0xfe, 0xf1, 0x52, 0xfe, 0x82, 0x3f, 0xfe, 0x7f, 0x80, 0x0b, 0x44, 0x11, 0x12, 0xd2, 0xc4, 0x0e, 0x32, 0x0a, 0x0e, 0x5a, 0xa4, 0x07, 0x30, 0xe8, 0x03, 0x13, 0x42, 0x02, 0x8a, 0xfa, 0xff, 0xdc, 0xf3, 0xff, 0xb5, 0xb5, 0x00, 0x7f, 0x62, 0x00, 0x28, 0x61, 0xff, 0xab, 0xb5, 0xff, 0x2f, 0x24, 0x00, 0x7e, 0xe1, 0x00, 0x10, 0x40, 0xff, 0xa2, 0xa9, 0xfe, 0xa6, 0x0d, 0xff, 0x33, 0xf0, 0xfd, 0xdd, 0xf6, 0xfd, 0x4a, 0x2b, 0xfe, 0x36, 0x97, 0xfe, 0x8b, 0xdb, 0xfe, 0x00, 0xf7, 0xfe, 0xb7, 0x09, 0xff, 0x87, 0x5b, 0xff, 0xb3, 0x50, 0xff, 0x8e, 0xcd, 0xfe, 0x59, 0x6d, 0xfe, 0x42, 0x41, 0xfe, 0xa7, 0x6b, 0xfe, 0x1e, 0x4f, 0xfe, 0xe0, 0xd0, 0x0d, 0x69, 0xda, 0x18, 0x37, 0xa0, 0x12, 0xa4, 0x3e, 0x08, 0x89, 0xc0, 0x00, 0x40, 0xfa, 0x01, 0xdf, 0x20, 0x04, 0x49, 0xe4, 0x02, 0xe9, 0xe8, 0xfe, 0xd1, 0x1e, 0xfe, 0x1b, 0xf6, 0xff, 0x39, 0x41, 0x00, 0x24, 0xfe, 0xff, 0x0e, 0x16, 0xff, 0xe9, 0x21, 0x00, 0xd2, 0x84, 0xff, 0x61, 0x59, 0xfe, 0x15, 0x53, 0xfe, 0x33, 0x0c, 0xfe, 0x6e, 0xb5, 0xfe, 0x71, 0x6b, 0xfe, 0xf4, 0x61, 0xfe, 0xf1, 0x84, 0xfe, 0x33, 0x19, 0xff, 0xdb, 0x3a, 0xff, 0x4e, 0x23, 0xff, 0xe1, 0x65, 0xff, 0x1e, 0xb9, 0xfe, 0xa5, 0x74, 0xfe, 0x30, 0x2b, 0xfe, 0xdc, 0x5b, 0xfe, 0xb8, 0xb1, 0xfe, 0x94, 0xcb, 0x0e, 0x52, 0xdd, 0x18, 0x3d, 0xe5, 0x0c, 0xf8, 0x9e, 0x04, 0x58, 0xf4, 0x02, 0x98, 0xfb, 0x05, 0x62, 0x14, 0x07, 0x07, 0x8f, 0x01, 0xe8, 0xee, 0xfd, 0x2b, 0x01, 0x00, 0x79, 0x54, 0x00, 0x6b, 0x6b, 0xfe, 0xa9, 0x27, 0x00, 0xe5, 0x77, 0xff, 0x9f, 0x2f, 0xff, 0x3d, 0x46, 0xff, 0x27, 0x4a, 0xfe, 0x7d, 0xe9, 0xfe, 0x18, 0xa1, 0xfe, 0x76, 0x47, 0xfe, 0xda, 0x9e, 0xfe, 0x80, 0x64, 0xfe, 0x4f, 0x0a, 0xfe, 0xfc, 0x03, 0xff, 0x32, 0x46, 0xff, 0xf7, 0xed, 0xfe, 0x8a, 0x22, 0xff, 0xe5, 0xcc, 0xfe, 0xd9, 0xa6, 0xfe, 0x0c, 0x91, 0xfe, 0x16, 0x58, 0xfe, 0x65, 0x7a, 0xfe, 0xa0, 0xfc, 0x08, 0xc5, 0xa2, 0x0d, 0x36, 0x97, 0x07, 0x31, 0xc4, 0x07, 0x3e, 0xfb, 0x08, 0x56, 0xfa, 0x08, 0x6e, 0x2b, 0x08, 0x8b, 0xdb, 0x03, 0xef, 0xfe, 0x01, 0xca, 0xc7, 0x02, 0x02, 0x5d, 0x01, 0x07, 0x5c, 0xff, 0x49, 0xe4, 0xfe, 0x64, 0xa6, 0xff, 0x3f, 0xec, 0xff, 0x94, 0x83, 0xfe, 0xcc, 0x81, 0xfe, 0x37, 0x35, 0xff, 0xfb, 0x18, 0xff, 0xe4, 0x3f, 0xff, 0xf4, 0x62, 0xfe, 0x61, 0x41, 0xfe, 0x2e, 0xd6, 0xfe, 0xee, 0x7d, 0xfe, 0x73, 0x6f, 0xfe, 0xfa, 0x00, 0xff, 0xf6, 0xd5, 0xfe, 0xdf, 0xaf, 0xfe, 0xcb, 0x4c, 0xff, 0x12, 0x0b, 0xff, 0x1c, 0x77, 0xfe, 0x28, 0x66, 0xfe, 0x3e, 0x17, 0x07, 0x5b, 0xd1, 0x09, 0xe3, 0x70, 0x04, 0x27, 0x2c, 0x05, 0x24, 0xdd, 0x07, 0xfa, 0x14, 0x08, 0x80, 0x35, 0x06, 0xc8, 0xcb, 0x04, 0xef, 0x05, 0x06, 0x5a, 0x02, 0x06, 0xb9, 0x3e, 0x04, 0x91, 0x54, 0x02, 0xd2, 0x3f, 0x01, 0x22, 0xe3, 0x00, 0x9a, 0x79, 0xff, 0x88, 0xa4, 0xfe, 0x9b, 0x22, 0xff, 0xe9, 0x9e, 0xfe, 0x7b, 0x70, 0xfe, 0x07, 0x9c, 0xff, 0xb2, 0xe3, 0xfe, 0x04, 0xc6, 0xfe, 0xdd, 0x4d, 0xff, 0xd6, 0xa2, 0xfe, 0x41, 0xb1, 0xfe, 0x19, 0xec, 0xfe, 0x94, 0x93, 0xfe, 0x32, 0x43, 0xfe, 0x07, 0xc0, 0xfe, 0x1c, 0x06, 0xff, 0x96, 0xe5, 0xfe, 0x83, 0x0d, 0xff, 0xf9, 0xc7, 0x07, 0xb3, 0xb3, 0x0a, 0xe6, 0xf5, 0x04, 0xcb, 0x52, 0x05, 0xa2, 0xa6, 0x06, 0x95, 0xf6, 0x04, 0x2f, 0xc5, 0x02, 0xb6, 0x54, 0x02, 0x63, 0xd3, 0x04, 0xf6, 0x50, 0x06, 0xda, 0x00, 0x05, 0xaf, 0xe5, 0x03, 0xef, 0xa5, 0x03, 0xef, 0x08, 0x03, 0xa7, 0x5a, 0x01, 0x05, 0x91, 0xff, 0x35, 0x28, 0xff, 0x93, 0x09, 0xff, 0xe7, 0xed, 0xfe, 0xec, 0xb9, 0xfe, 0x79, 0x72, 0xfe, 0x1f, 0xea, 0xfe, 0xe5, 0x73, 0xff, 0xd5, 0x01, 0xff, 0x4c, 0xc7, 0xfe, 0xed, 0x11, 0xff, 0x55, 0x78, 0xfe, 0x05, 0x76, 0xfe, 0x4f, 0xd3, 0xfe, 0xad, 0x6e, 0xfe, 0x14, 0xb2, 0xfe, 0x53, 0x2e, 0xff, 0x0c, 0xcc, 0x08, 0x79, 0xa7, 0x0b, 0x24, 0xe8, 0x03, 0x3d, 0xea, 0x04, 0xa7, 0x02, 0x07, 0x42, 0xa2, 0x04, 0xbe, 0x1e, 0x01, 0xce, 0x59, 0x00, 0x51, 0xbd, 0x03, 0xa5, 0x8c, 0x04, 0x8d, 0xcb, 0x02, 0xbc, 0xe6, 0x03, 0xa3, 0x4e, 0x05, 0x4b, 0xaf, 0x04, 0x28, 0x69, 0x03, 0x29, 0x5a, 0x01, 0xb1, 0xab, 0x00, 0xce, 0xdd, 0xff, 0x4a, 0xef, 0xfe, 0xfc, 0x4e, 0xff, 0x14, 0x7b, 0xfe, 0x2b, 0x62, 0xfe, 0x6d, 0x61, 0xff, 0x77, 0xff, 0xfe, 0xa9, 0x54, 0xff, 0xf2, 0xae, 0xff, 0x82, 0xa9, 0xfe, 0x28, 0x9c, 0xfe, 0x4f, 0xd7, 0xfe, 0x7c, 0x4f, 0xfe, 0xc1, 0xa4, 0xfe, 0xcd, 0xd8, 0xfe, 0xee, 0xb0, 0x09, 0x74, 0x98, 0x0d, 0x69, 0x92, 0x04, 0x3d, 0xac, 0x04, 0xc0, 0xc7, 0x06, 0xb6, 0x53, 0x03, 0x61, 0x3b, 0x00, 0x43, 0x47, 0x01, 0x15, 0xec, 0x03, 0x49, 0x62, 0x02, 0xc4, 0xc6, 0x00, 0xa7, 0x24, 0x02, 0x07, 0xfa, 0x02, 0xfc, 0xe7, 0x03, 0xb4, 0x7d, 0x04, 0xd7, 0xdc, 0x02, 0x54, 0x08, 0x02, 0xa9, 0x52, 0x01, 0xb9, 0x6d, 0x00, 0xf1, 0x27, 0x00, 0x6b, 0xca, 0xfe, 0x1c, 0xc5, 0xfe, 0x12, 0x23, 0xff, 0xf5, 0x78, 0xfe, 0x09, 0x42, 0xff, 0x39, 0xb4, 0xff, 0x8a, 0x02, 0xff, 0xf3, 0x01, 0xff, 0x6e, 0xe4, 0xfe, 0xe1, 0x63, 0xfe, 0xbf, 0x9d, 0xfe, 0xbb, 0xdc, 0xfe, 0xfa, 0x56, 0x0a, 0x5a, 0x85, 0x0e, 0x42, 0x2a, 0x05, 0xab, 0x62, 0x05, 0xaf, 0xf0, 0x07, 0x38, 0xb9, 0x02, 0xd1, 0x01, 0xfe, 0x1b, 0x45, 0x01, 0x60, 0xc0, 0x04, 0xe2, 0xc9, 0x01, 0x86, 0x41, 0x00, 0x95, 0x7e, 0x01, 0x4c, 0x63, 0x01, 0x77, 0xd0, 0x01, 0x6e, 0x3e, 0x02, 0x31, 0xd6, 0x01, 0x19, 0xd2, 0x02, 0xad, 0xf0, 0x02, 0x34, 0x9c, 0x01, 0x21, 0x05, 0x01, 0xc3, 0x88, 0x00, 0xf0, 0xbe, 0xff, 0xb5, 0x1a, 0xff, 0xe1, 0xf1, 0xfe, 0x09, 0x11, 0xff, 0x16, 0x21, 0xff, 0x5a, 0x13, 0xff, 0x23, 0x0b, 0xff, 0x3c, 0x1a, 0xff, 0xfd, 0xd5, 0xfe, 0x41, 0x94, 0xfe, 0xae, 0xb4, 0xfe, 0xcb, 0x93, 0x0b, 0x73, 0x2e, 0x10, 0x57, 0xce, 0x05, 0xe4, 0x32, 0x05, 0x8e, 0xfa, 0x07, 0x44, 0x63, 0x02, 0x71, 0xd7, 0xfc, 0x06, 0xd2, 0x01, 0x69, 0xdf, 0x04, 0x41, 0x32, 0x00, 0xd0, 0xe7, 0xff, 0xfc, 0xe0, 0x01, 0x7c, 0x44, 0x01, 0xb4, 0xb6, 0x00, 0xa7, 0x20, 0x01, 0x65, 0x3e, 0x00, 0x71, 0x26, 0x00, 0xd2, 0xc5, 0x01, 0x0e, 0x73, 0x02, 0x8b, 0x10, 0x02, 0xa2, 0x55, 0x01, 0xb5, 0xe3, 0x00, 0xf1, 0x46, 0x00, 0x26, 0x80, 0xff, 0x3a, 0x48, 0xff, 0xa5, 0x65, 0xff, 0x2b, 0xfd, 0xfe, 0x80, 0x8c, 0xfe, 0xc1, 0xc1, 0xfe, 0x8a, 0x05, 0xff, 0xbb, 0xe0, 0xfe, 0x0e, 0x99, 0xfe, 0x31, 0xa8, 0x0c, 0x4b, 0xf5, 0x11, 0x22, 0x87, 0x06, 0x17, 0x00, 0x05, 0xd2, 0x6c, 0x08, 0x6a, 0x45, 0x02, 0x8c, 0x8b, 0xfb, 0xbb, 0x40, 0x02, 0x16, 0x30, 0x05, 0x03, 0x1e, 0xff, 0x62, 0x81, 0xff, 0x1b, 0x2b, 0x02, 0xd1, 0x23, 0x01, 0x09, 0x61, 0x00, 0x8e, 0xec, 0x00, 0x5b, 0xbb, 0xff, 0x20, 0x66, 0xff, 0x8c, 0x14, 0x00, 0x00, 0x47, 0x00, 0xa1, 0x1d, 0x01, 0xcc, 0xaf, 0x01, 0xda, 0x2e, 0x02, 0xcf, 0x46, 0x01, 0x66, 0x60, 0x00, 0xab, 0x77, 0x00, 0x8f, 0xf2, 0xff, 0xdf, 0x52, 0xff, 0xae, 0xfe, 0xfe, 0x4d, 0xaf, 0xfe, 0x0c, 0x85, 0xfe, 0x38, 0xff, 0xfe, 0xbb, 0xc5, 0xfe, 0x0f, 0x8e, 0x0e, 0xe8, 0x53, 0x14, 0xf6, 0x6f, 0x06, 0x10, 0x5e, 0x04, 0x35, 0x7a, 0x08, 0xc2, 0xf9, 0x01, 0x3a, 0x01, 0xfb, 0x3a, 0xef, 0x02, 0x2a, 0xbd, 0x04, 0x1f, 0x8d, 0xfd, 0x69, 0x70, 0xff, 0x1d, 0x9d, 0x02, 0xdc, 0x25, 0x01, 0xb0, 0xd5, 0xff, 0xaa, 0x79, 0x00, 0xd3, 0xa4, 0xff, 0xbc, 0x13, 0xff, 0xd5, 0x9b, 0xff, 0x54, 0x9b, 0xff, 0xf1, 0xaa, 0xff, 0x70, 0x79, 0xff, 0x59, 0x1b, 0x01, 0xb0, 0xdf, 0x01, 0x02, 0x75, 0x01, 0xf7, 0x16, 0x01, 0xe3, 0x96, 0x00, 0xb1, 0x54, 0x00, 0xa6, 0x89, 0xff, 0x04, 0xd9, 0xfe, 0xd5, 0xa2, 0xfe, 0x87, 0xe5, 0xfe, 0x3d, 0x80, 0xfe, 0x94, 0x16, 0x10, 0x2c, 0x3c, 0x16, 0x70, 0xc8, 0x06, 0x68, 0x63, 0x04, 0x0e, 0xb8, 0x08, 0x27, 0x2d, 0x01, 0x81, 0x42, 0xfa, 0x17, 0x34, 0x04, 0x82, 0xb6, 0x04, 0x24, 0xda, 0xfb, 0x1b, 0xf7, 0xfe, 0x8b, 0xe6, 0x02, 0x83, 0x31, 0x01, 0x00, 0xe7, 0xff, 0x88, 0x24, 0x00, 0x33, 0x34, 0xff, 0x21, 0xec, 0xfe, 0xd6, 0x76, 0xff, 0x87, 0x7c, 0xff, 0x8d, 0x41, 0xff, 0x78, 0xad, 0xfe, 0x4f, 0x8b, 0xff, 0x52, 0x2b, 0x00, 0x7b, 0xb3, 0x00, 0xbf, 0x91, 0x01, 0x83, 0x5d, 0x01, 0x4b, 0xea, 0x00, 0xd8, 0x6c, 0x00, 0x4e, 0xaf, 0xff, 0xfb, 0xf3, 0xfe, 0x76, 0xfe, 0xfe, 0x94, 0xdd, 0xfe, 0x96, 0x0d, 0x12, 0xab, 0x34, 0x18, 0x96, 0xa2, 0x06, 0xda, 0xd6, 0x04, 0x00, 0x17, 0x09, 0x8f, 0xd1, 0xff, 0x18, 0xfa, 0xf9, 0xfe, 0xf0, 0x05, 0xb4, 0x66, 0x04, 0x12, 0x35, 0xfa, 0x24, 0xd0, 0xfe, 0xbb, 0x46, 0x03, 0xb9, 0x29, 0x01, 0x16, 0xbd, 0xff, 0x9b, 0x01, 0x00, 0x9e, 0x39, 0xff, 0x05, 0xca, 0xfe, 0x9b, 0x35, 0xff, 0xa6, 0x9d, 0xff, 0xf3, 0x23, 0xff, 0x8c, 0x7d, 0xfe, 0x24, 0x24, 0xff, 0x72, 0x6f, 0xff, 0x27, 0x9e, 0xff, 0x8e, 0x17, 0x00, 0xac, 0xc6, 0x00, 0x9d, 0x5b, 0x01, 0x74, 0x09, 0x01, 0xda, 0x3f, 0x00, 0xcc, 0xcd, 0xff, 0x9a, 0xf4, 0xff, 0x3a, 0x36, 0xff, 0xcb, 0x43, 0x14, 0xba, 0xf8, 0x19, 0x6b, 0x1e, 0x06, 0x43, 0xd2, 0x05, 0x3d, 0x58, 0x09, 0xff, 0xb7, 0xfd, 0x85, 0xd3, 0xf9, 0xc1, 0xdc, 0x07, 0xa2, 0xe1, 0x03, 0x1a, 0xb4, 0xf8, 0xda, 0x6c, 0xfe, 0xcb, 0x50, 0x03, 0xc5, 0x55, 0x01, 0xd2, 0x81, 0xff, 0xbd, 0xcc, 0xff, 0x02, 0xf8, 0xfe, 0x60, 0x79, 0xfe, 0xa7, 0xe6, 0xfe, 0x55, 0xe8, 0xff, 0x6e, 0xfd, 0xfe, 0x70, 0x40, 0xfe, 0xec, 0x13, 0xff, 0x7d, 0x8a, 0xfe, 0x80, 0x93, 0xff, 0x03, 0xdd, 0xff, 0x65, 0x52, 0xff, 0x01, 0xc6, 0xff, 0xd1, 0x63, 0x00, 0x92, 0xa2, 0x00, 0xa5, 0x82, 0x00, 0x9e, 0x36, 0x00, 0xd6, 0xc6, 0xff, 0x1a, 0xc1, 0x16, 0x25, 0xe0, 0x1b, 0x07, 0x62, 0x05, 0x8c, 0xa2, 0x06, 0x0f, 0x8f, 0x09, 0x81, 0xcb, 0xfb, 0x6d, 0xd3, 0xf9, 0x95, 0x79, 0x09, 0xb7, 0x29, 0x03, 0x0b, 0xae, 0xf7, 0xaa, 0x45, 0xfe, 0xcf, 0x02, 0x03, 0xbd, 0x42, 0x01, 0x47, 0x4f, 0xff, 0xbe, 0x28, 0x00, 0xf4, 0xb8, 0xfe, 0xcd, 0xa3, 0xfd, 0x26, 0xb7, 0xfe, 0x89, 0xf9, 0xff, 0x49, 0x2b, 0xff, 0x88, 0x17, 0xfe, 0x7e, 0xe2, 0xfe, 0x20, 0x2b, 0xfe, 0x74, 0x6f, 0xff, 0x72, 0xd1, 0xff, 0x2e, 0xf9, 0xfe, 0x17, 0x0c, 0xff, 0x8d, 0xfa, 0xfe, 0x1a, 0x84, 0xff, 0xa6, 0x0a, 0x00, 0xd3, 0x78, 0x00, 0x90, 0x20, 0x00, 0xc2, 0xbc, 0x18, 0xcf, 0xd7, 0x1d, 0xd3, 0x89, 0x05, 0x0e, 0x01, 0x07, 0xf9, 0xe3, 0x09, 0x9c, 0x91, 0xfa, 0x32, 0x2e, 0xf9, 0xdc, 0x4d, 0x0b, 0x4a, 0x26, 0x03, 0xf9, 0x3c, 0xf6, 0x6d, 0x6d, 0xfe, 0xb8, 0xe5, 0x02, 0xbe, 0x0e, 0x01, 0x54, 0x5d, 0xff, 0xc8, 0x0e, 0x00, 0x8a, 0x20, 0xff, 0xaa, 0x4b, 0xfd, 0x8d, 0x1b, 0xfe, 0xdc, 0x46, 0x00, 0x3c, 0xfd, 0xfe, 0x50, 0xc2, 0xfd, 0xb6, 0x8a, 0xff, 0xbb, 0x26, 0xfe, 0x2e, 0xe8, 0xfe, 0x7e, 0xf0, 0xff, 0xd1, 0xdd, 0xfe, 0xd5, 0xf8, 0xfe, 0xe9, 0xc3, 0xfe, 0xaf, 0x62, 0xfe, 0x7c, 0xd6, 0xfe, 0xe2, 0xc8, 0xff, 0xa5, 0x1a, 0x00, 0x15, 0x6e, 0x1a, 0x3e, 0x96, 0x1f, 0x70, 0xb3, 0x05, 0xec, 0x12, 0x08, 0xc4, 0x36, 0x0a, 0xe2, 0x4d, 0xf8, 0x99, 0xdd, 0xf8, 0x6c, 0x1f, 0x0d, 0xf4, 0xd6, 0x02, 0xba, 0x21, 0xf5, 0xe2, 0x32, 0xfe, 0x8c, 0xcc, 0x02, 0x1f, 0xd2, 0x00, 0xfe, 0x13, 0xff, 0xb6, 0xf0, 0xff, 0x1b, 0x6a, 0xff, 0x1a, 0x12, 0xfd, 0xa7, 0x90, 0xfd, 0xe9, 0x4c, 0x00, 0x95, 0xd2, 0xfe, 0x92, 0x48, 0xfd, 0xf1, 0x81, 0xff, 0x09, 0x6d, 0xfe, 0x97, 0xb9, 0xfe, 0x4a, 0x91, 0xff, 0x91, 0x29, 0xff, 0xa3, 0xd6, 0xfe, 0x30, 0x2c, 0xfe, 0x69, 0xfa, 0xfd, 0x94, 0x73, 0xfe, 0xd8, 0x52, 0xff, 0xb1, 0xdf, 0xfe, 0x2d, 0xf5, 0x1b, 0xaf, 0xab, 0x21, 0xa3, 0x34, 0x06, 0x0a, 0x0f, 0x08, 0x74, 0xe6, 0x0a, 0x98, 0x67, 0xf7, 0xa2, 0x00, 0xf8, 0xb3, 0x13, 0x0e, 0x75, 0x06, 0x03, 0x79, 0xa7, 0xf4, 0xab, 0xdf, 0xfd, 0x89, 0xc5, 0x02, 0xa6, 0x65, 0x00, 0x25, 0xfc, 0xfe, 0x79, 0xf7, 0xff, 0xb6, 0x7e, 0xff, 0xa9, 0x5c, 0xfd, 0x1d, 0xb3, 0xfc, 0x09, 0x3e, 0x00, 0x0f, 0x7f, 0xff, 0xec, 0xb6, 0xfc, 0xf7, 0x01, 0xff, 0x69, 0x84, 0xfe, 0xe0, 0xe2, 0xfe, 0x77, 0x93, 0xff, 0x73, 0x19, 0xff, 0xfb, 0xe4, 0xfe, 0x87, 0xcb, 0xfd, 0xfb, 0xc7, 0xfd, 0x45, 0x59, 0xfe, 0xec, 0xfa, 0xfe, 0xf1, 0x41, 0xfe, 0x46, 0xf8, 0x1c, 0x75, 0x77, 0x24, 0xf1, 0x2d, 0x07, 0x08, 0x62, 0x06, 0x6b, 0xdb, 0x0b, 0xed, 0x53, 0xf8, 0xb3, 0x53, 0xf6, 0xd9, 0x94, 0x0d, 0x28, 0x98, 0x03, 0x53, 0x31, 0xf5, 0xf9, 0x19, 0xfd, 0x04, 0x47, 0x02, 0xdf, 0x7a, 0x00, 0x87, 0x8a, 0xfe, 0x67, 0x20, 0x00, 0xeb, 0x90, 0xff, 0x18, 0x66, 0xfd, 0x7f, 0x58, 0xfc, 0x66, 0xc0, 0xff, 0x9b, 0xe3, 0xff, 0xd4, 0xf3, 0xfc, 0x37, 0x3c, 0xfe, 0xe5, 0x20, 0xfe, 0x1c, 0x68, 0xff, 0x77, 0x72, 0xff, 0x55, 0x95, 0xfe, 0xc4, 0xfd, 0xfe, 0x4f, 0xee, 0xfd, 0x3b, 0xa8, 0xfd, 0xc4, 0x0e, 0xfe, 0x78, 0x4c, 0xfe, 0xb1, 0x4a, 0xfe, 0x84, 0xb9, 0x1d, 0x3f, 0x2a, 0x26, 0x5f, 0x09, 0x09, 0x79, 0x95, 0x05, 0xf0, 0xfc, 0x0b, 0x69, 0xfe, 0xf9, 0x40, 0x7c, 0xf4, 0xff, 0x82, 0x0c, 0x4e, 0x70, 0x04, 0x15, 0xc3, 0xf5, 0x0b, 0xad, 0xfc, 0xce, 0x6c, 0x01, 0x97, 0x96, 0x00, 0xcd, 0x59, 0xfe, 0x80, 0xcf, 0xff, 0x8c, 0xca, 0xff, 0x2b, 0x9e, 0xfd, 0xfd, 0xfb, 0xfb, 0x9a, 0x51, 0xff, 0x15, 0x0d, 0x00, 0x41, 0xc9, 0xfc, 0x98, 0x48, 0xfe, 0x9b, 0xf1, 0xfd, 0xce, 0xf2, 0xfe, 0xa7, 0x93, 0xff, 0x17, 0x54, 0xfe, 0xcb, 0x96, 0xfe, 0x4f, 0x63, 0xfe, 0x4c, 0x47, 0xfd, 0x86, 0x70, 0xfd, 0xac, 0x9c, 0xfe, 0x7e, 0x27, 0xfe, 0x12, 0xa8, 0x1f, 0xf4, 0x30, 0x26, 0x87, 0xf9, 0x09, 0x27, 0x6d, 0x07, 0x61, 0xb6, 0x0b, 0x79, 0x2f, 0xfa, 0x98, 0xc3, 0xf3, 0xf9, 0x22, 0x0c, 0xbb, 0xf7, 0x03, 0xb3, 0xb2, 0xf6, 0x7a, 0xdd, 0xfc, 0x73, 0x57, 0x00, 0xe4, 0xde, 0x00, 0xe6, 0x32, 0xfe, 0x4f, 0x30, 0xff, 0x18, 0x4a, 0x00, 0x02, 0x5b, 0xfe, 0xc6, 0x7a, 0xfb, 0x0a, 0xb4, 0xfe, 0x10, 0x69, 0x00, 0xde, 0xe8, 0xfc, 0x3b, 0x12, 0xfe, 0x20, 0xf3, 0xfd, 0xac, 0xa5, 0xfe, 0xed, 0x70, 0xff, 0x80, 0x79, 0xfe, 0x83, 0x7e, 0xfe, 0x86, 0xe7, 0xfd, 0xa9, 0x17, 0xfd, 0x4c, 0x3d, 0xfd, 0xb2, 0x41, 0xff, 0x9a, 0x07, 0xfe, 0x17, 0xcd, 0x22, 0x64, 0xd5, 0x24, 0x24, 0x16, 0x09, 0x59, 0xa4, 0x0b, 0x67, 0xc8, 0x0b, 0xa4, 0x65, 0xf8, 0x07, 0x0d, 0xf4, 0x66, 0x60, 0x0c, 0x1a, 0xb0, 0x01, 0xe4, 0xfb, 0xf7, 0xda, 0xdf, 0xfd, 0xf6, 0xf2, 0xfe, 0x44, 0xa3, 0x00, 0x1a, 0x1f, 0xfe, 0xe3, 0xad, 0xfe, 0x25, 0x4d, 0x00, 0x97, 0x67, 0xff, 0x4c, 0xeb, 0xfa, 0x09, 0xd7, 0xfd, 0x03, 0xbb, 0x00, 0xa6, 0x7b, 0xfd, 0x7b, 0x46, 0xfd, 0x5b, 0xb8, 0xfd, 0x2f, 0xdf, 0xfe, 0xdb, 0xf9, 0xfe, 0xd2, 0x99, 0xfe, 0xcc, 0x68, 0xfe, 0xd1, 0x1b, 0xfd, 0xbc, 0xb4, 0xfc, 0x43, 0xeb, 0xfd, 0xfc, 0xf7, 0xfe, 0x8f, 0xc2, 0xfd, 0xf3, 0xd2, 0x24, 0xf4, 0x51, 0x23, 0x1a, 0x8b, 0x08, 0x64, 0xa5, 0x0f, 0xb0, 0x40, 0x0e, 0xd1, 0x59, 0xf6, 0xe9, 0xa6, 0xf2, 0x83, 0xc1, 0x0e, 0xcd, 0x87, 0xfe, 0xe2, 0xea, 0xf7, 0xd3, 0x0f, 0x01, 0x56, 0xd1, 0xfd, 0x2f, 0xd3, 0xfe, 0xfc, 0xe7, 0xfe, 0x4b, 0xa4, 0xfe, 0xab, 0x33, 0xff, 0x07, 0x90, 0x01, 0x7c, 0x48, 0xfa, 0x16, 0xc6, 0xfc, 0x1e, 0x79, 0x01, 0xd1, 0xbe, 0xfd, 0xcd, 0x0c, 0xfd, 0xa2, 0x2c, 0xfd, 0x5f, 0x38, 0xff, 0x74, 0xbd, 0xfe, 0xe1, 0x7d, 0xfe, 0x4f, 0x1c, 0xfe, 0x5d, 0x14, 0xfd, 0x03, 0xb2, 0xfc, 0x79, 0xb1, 0xfd, 0x51, 0xba, 0xfe, 0x3b, 0xc5, 0xfd, 0xa0, 0x7a, 0x27, 0x43, 0xd4, 0x20, 0xdd, 0x7d, 0x05, 0x5f, 0x77, 0x17, 0xd6, 0x90, 0x10, 0x94, 0xfa, 0xf0, 0x91, 0xa3, 0xf4, 0xb8, 0x1f, 0x12, 0xc1, 0x82, 0xf8, 0x45, 0x6b, 0xf7, 0x5b, 0x83, 0x05, 0x57, 0x51, 0xfd, 0xb9, 0x19, 0xfd, 0x9a, 0x45, 0xfe, 0x07, 0x61, 0xff, 0x0d, 0x0c, 0xfe, 0x0c, 0xb5, 0x02, 0xfc, 0x44, 0xfb, 0xdc, 0x14, 0xfb, 0x23, 0xa4, 0x01, 0x3b, 0x54, 0xfe, 0xc6, 0x14, 0xfd, 0x6c, 0x03, 0xfd, 0x3e, 0x35, 0xff, 0x51, 0x37, 0xfe, 0x0f, 0x67, 0xfe, 0x61, 0xcd, 0xfd, 0x25, 0xe0, 0xfd, 0x78, 0x58, 0xfc, 0x9a, 0x72, 0xfc, 0x04, 0x60, 0xff, 0xff, 0x1e, 0xfd, 0x0f, 0xc0, 0x2a, 0xb1, 0xc7, 0x20, 0x05, 0x32, 0x00, 0x79, 0xbf, 0x1b, 0xd4, 0x8d, 0x14, 0x5d, 0xa6, 0xed, 0xda, 0x4e, 0xf6, 0x3c, 0xdd, 0x14, 0x47, 0x9f, 0xf2, 0xa6, 0xe2, 0xf5, 0x42, 0x7d, 0x0a, 0x57, 0x68, 0xfd, 0xcb, 0x32, 0xfb, 0x83, 0x6b, 0xfd, 0xf6, 0x99, 0x00, 0x04, 0xe1, 0xfc, 0x86, 0x55, 0x02, 0xdc, 0x87, 0xfd, 0x27, 0x96, 0xf9, 0xca, 0x13, 0x01, 0xe8, 0x57, 0xff, 0xd3, 0x0f, 0xfd, 0x0b, 0xef, 0xfc, 0x5c, 0x5c, 0xff, 0xe0, 0xff, 0xfd, 0xc0, 0xd5, 0xfd, 0xf6, 0xcc, 0xfd, 0x81, 0xcf, 0xfd, 0x2a, 0x99, 0xfc, 0xf7, 0x0f, 0xfc, 0x90, 0x77, 0xfe, 0xf1, 0xc9, 0xfc, 0x11, 0x77, 0x2f, 0x5f, 0x22, 0x22, 0x3b, 0x7f, 0xf9, 0x98, 0xb6, 0x1b, 0x57, 0x4e, 0x1a, 0x83, 0x92, 0xec, 0x88, 0xc3, 0xf6, 0x1b, 0xd4, 0x16, 0x75, 0xd8, 0xed, 0x76, 0xdb, 0xf3, 0xb4, 0x8a, 0x0e, 0xd9, 0x77, 0xfe, 0x5c, 0x1d, 0xf9, 0xe2, 0x7e, 0xfc, 0xbd, 0xea, 0x01, 0x29, 0x6c, 0xfc, 0xd8, 0x4d, 0x00, 0x4c, 0xc4, 0xff, 0x23, 0xa5, 0xf9, 0xfb, 0x3b, 0xff, 0xa2, 0xa9, 0x00, 0xcb, 0x15, 0xfd, 0xa6, 0xe0, 0xfc, 0xf6, 0x1c, 0x00, 0xa4, 0x44, 0xfd, 0xc5, 0xa0, 0xfd, 0xf2, 0xb5, 0xfd, 0xa8, 0xb2, 0xfc, 0x13, 0x77, 0xfd, 0x7e, 0x2a, 0xfc, 0x0d, 0x95, 0xfc, 0x3e, 0x32, 0xfd, 0x46, 0x8a, 0x34, 0xde, 0xec, 0x23, 0xfc, 0x99, 0xf2, 0x27, 0x81, 0x1a, 0xb5, 0xc6, 0x1e, 0xd2, 0x3b, 0xed, 0xc4, 0xf4, 0xf7, 0xbc, 0xac, 0x17, 0x77, 0x06, 0xea, 0x72, 0x4f, 0xf1, 0x46, 0x26, 0x11, 0xd9, 0xf2, 0x00, 0xb0, 0x32, 0xf7, 0xf5, 0x12, 0xfb, 0x42, 0x15, 0x03, 0x2a, 0x8a, 0xfc, 0xcc, 0x2a, 0xfe, 0x01, 0x71, 0x00, 0xce, 0x4d, 0xfb, 0xea, 0x3b, 0xfd, 0x9b, 0xe7, 0x00, 0x7a, 0xfb, 0xfd, 0x13, 0xd0, 0xfc, 0xab, 0x06, 0x01, 0xb3, 0xaa, 0xfc, 0xac, 0x35, 0xfd, 0x3a, 0x40, 0xfd, 0xa8, 0x2a, 0xfc, 0x0b, 0x4f, 0xfd, 0x8d, 0x25, 0xfc, 0x2a, 0x59, 0xfc, 0xb9, 0xda, 0xfc, 0x6f, 0xdb, 0x38, 0xc2, 0x8d, 0x26, 0x02, 0xaf, 0xed, 0x74, 0xc6, 0x15, 0x64, 0xc2, 0x22, 0xe6, 0x84, 0xf0, 0x8e, 0x24, 0xf8, 0x8b, 0x3e, 0x19, 0xf1, 0xc2, 0xe6, 0xad, 0x78, 0xee, 0x09, 0x39, 0x12, 0x35, 0x32, 0x04, 0x7e, 0x56, 0xf6, 0x00, 0xf4, 0xf8, 0x10, 0x10, 0x04, 0xe6, 0x20, 0xfd, 0xa2, 0x86, 0xfc, 0xc6, 0x71, 0xff, 0x60, 0xb4, 0xfd, 0xcc, 0x39, 0xfc, 0x03, 0xcf, 0xff, 0xda, 0xa9, 0xff, 0x2f, 0xcb, 0xfc, 0x89, 0xec, 0x01, 0x97, 0x7c, 0xfc, 0x16, 0x5f, 0xfc, 0x04, 0x07, 0xfd, 0xad, 0x95, 0xfb, 0x3a, 0x7c, 0xfc, 0xfb, 0x5e, 0xfc, 0x18, 0x45, 0xfd, 0x3c, 0x24, 0xfc, 0xf4, 0x88, 0x3c, 0x67, 0xe0, 0x29, 0xf8, 0x31, 0xea, 0x81, 0x9b, 0x0f, 0x64, 0xb2, 0x24, 0xcd, 0x00, 0xf5, 0xca, 0xd1, 0xf8, 0xfc, 0x17, 0x1b, 0xb2, 0xc5, 0xe3, 0xc0, 0xce, 0xeb, 0xc7, 0x0f, 0x12, 0xa4, 0x26, 0x07, 0xe1, 0x9f, 0xf6, 0x50, 0xb8, 0xf6, 0xc2, 0x56, 0x04, 0x3a, 0xef, 0xfd, 0x18, 0xc8, 0xfb, 0x52, 0x4e, 0xfd, 0x0f, 0x6f, 0xff, 0x06, 0xa3, 0xfc, 0x7f, 0x39, 0xfe, 0xec, 0x0d, 0x01, 0x73, 0xa1, 0xfd, 0x7f, 0xf0, 0x01, 0x22, 0x6b, 0xfc, 0x6e, 0x2b, 0xfc, 0x9c, 0x90, 0xfc, 0xb2, 0x97, 0xfa, 0xfb, 0xef, 0xfb, 0x0b, 0x7d, 0xfc, 0x49, 0x17, 0xfe, 0x42, 0x60, 0xfc, 0xd6, 0x21, 0x43, 0xc2, 0x15, 0x2a, 0xff, 0x02, 0xe6, 0x8d, 0x6e, 0x0d, 0x14, 0x02, 0x23, 0xfd, 0x46, 0xf6, 0x4a, 0xc7, 0xfe, 0xa7, 0x39, 0x1b, 0xd2, 0x1b, 0xdf, 0x8c, 0xdb, 0xeb, 0x21, 0x5a, 0x11, 0x00, 0xa2, 0x08, 0x90, 0x10, 0xf7, 0x98, 0x8c, 0xf5, 0x8b, 0x0d, 0x04, 0xe7, 0x2d, 0xfe, 0xad, 0xdf, 0xfb, 0x03, 0x56, 0xfb, 0x40, 0x8e, 0xff, 0xf2, 0xd0, 0xfd, 0xce, 0x82, 0xfd, 0xdf, 0x8b, 0x01, 0x0b, 0x72, 0xff, 0x25, 0xfc, 0x00, 0xb7, 0x1a, 0xfc, 0x17, 0xfb, 0xfc, 0xa2, 0x63, 0xfb, 0x0a, 0xfb, 0xf9, 0x1e, 0x72, 0xfb, 0x56, 0x41, 0xfc, 0x8e, 0xe4, 0xfe, 0x9a, 0xb6, 0xfd, 0xfa, 0x0a, 0x48, 0xf9, 0xc5, 0x2c, 0xe0, 0x36, 0xe1, 0x3a, 0xf9, 0x0b, 0xd8, 0x35, 0x20, 0x44, 0xe9, 0xf6, 0xa8, 0x73, 0x04, 0x35, 0xd0, 0x1c, 0x0e, 0x61, 0xdb, 0x13, 0xad, 0xea, 0x77, 0x84, 0x11, 0x03, 0x04, 0x09, 0x69, 0xec, 0xf7, 0x05, 0x2f, 0xf5, 0xac, 0x00, 0x03, 0x80, 0x52, 0xfe, 0x34, 0x69, 0xfc, 0xbf, 0x2c, 0xfa, 0xe4, 0x61, 0xfe, 0x5d, 0xc4, 0xfe, 0xdf, 0x32, 0xfe, 0xbd, 0xe8, 0x01, 0x0b, 0xb7, 0x00, 0x25, 0x00, 0x00, 0x61, 0x69, 0xfc, 0x18, 0x67, 0xfd, 0x45, 0x9a, 0xfa, 0x56, 0xc8, 0xf9, 0x0d, 0x9b, 0xfa, 0xbc, 0x1f, 0xfc, 0x61, 0xbb, 0xff, 0xf3, 0x3a, 0xff, 0xbd, 0x4b, 0x4e, 0x1b, 0x57, 0x2d, 0x6a, 0x21, 0xdd, 0xf8, 0x56, 0x0b, 0xc4, 0x4f, 0x1d, 0x12, 0x8e, 0xf4, 0x0b, 0xee, 0x0a, 0xfe, 0xee, 0x1e, 0xc1, 0x44, 0xd7, 0xa2, 0xdf, 0xe9, 0xb9, 0x1f, 0x12, 0xbb, 0x7a, 0x08, 0xbe, 0xd3, 0xf7, 0x2a, 0x3f, 0xf6, 0x64, 0x3e, 0x01, 0x10, 0xa0, 0xfd, 0x64, 0x70, 0xfd, 0x8a, 0x79, 0xf9, 0x46, 0xe2, 0xfc, 0x3d, 0x60, 0xfe, 0x09, 0xfe, 0xff, 0xf7, 0x05, 0x03, 0x86, 0x20, 0x00, 0xa6, 0xa6, 0xff, 0xc5, 0x37, 0xfd, 0x01, 0xec, 0xfc, 0x1c, 0x6a, 0xfa, 0x9e, 0x83, 0xf9, 0x26, 0xa0, 0xf9, 0x77, 0x56, 0xfc, 0x44, 0xf0, 0xff, 0xda, 0x9a, 0x00, 0x56, 0x6d, 0x52, 0x6a, 0xbb, 0x30, 0x4e, 0xf8, 0xd8, 0x53, 0x48, 0x0a, 0x28, 0x24, 0x1b, 0x55, 0xf4, 0xf1, 0x7a, 0x26, 0x0e, 0xa8, 0xac, 0x23, 0x5c, 0xdd, 0xd4, 0x7e, 0x67, 0xe7, 0xa8, 0x47, 0x13, 0x6e, 0x98, 0x07, 0x4e, 0xd2, 0xf7, 0x6c, 0xb6, 0xf7, 0xea, 0xa1, 0xff, 0x9a, 0x0f, 0xfc, 0x80, 0x13, 0xff, 0xe4, 0x21, 0xf9, 0x98, 0xa7, 0xfb, 0xb5, 0x74, 0xfd, 0x7a, 0x5c, 0x01, 0x70, 0xc6, 0x05, 0x21, 0x15, 0xfe, 0x58, 0xe0, 0xff, 0x14, 0xc0, 0xfe, 0x40, 0xb3, 0xfb, 0x64, 0x26, 0xfb, 0xeb, 0x14, 0xf9, 0x4c, 0xf2, 0xf8, 0x9d, 0x45, 0xfc, 0x16, 0xf2, 0xff, 0x9f, 0x55, 0x01, 0xff, 0xcc, 0x56, 0x76, 0xfe, 0x32, 0x37, 0x44, 0xd6, 0xe9, 0xa1, 0x08, 0xf0, 0xf0, 0x19, 0xb9, 0x41, 0xee, 0x1f, 0x65, 0x0f, 0x67, 0xf7, 0x28, 0x90, 0x32, 0xd3, 0x40, 0xa7, 0xe5, 0x2d, 0x89, 0x13, 0x11, 0xa5, 0x06, 0x1d, 0xc2, 0xf7, 0x54, 0x3a, 0xf9, 0xcb, 0x25, 0xfe, 0x9b, 0x15, 0xfa, 0xa0, 0xaf, 0x00, 0xab, 0x99, 0xf8, 0xb9, 0x66, 0xfb, 0xe0, 0x13, 0xfc, 0x52, 0xb9, 0x01, 0x73, 0x3a, 0x09, 0xdd, 0x18, 0xfc, 0x80, 0xa7, 0xff, 0x50, 0xd0, 0x00, 0x6c, 0x5b, 0xfa, 0x84, 0xd5, 0xfb, 0xec, 0x4b, 0xf9, 0x23, 0x9c, 0xf7, 0x5c, 0x47, 0xfc, 0x03, 0x49, 0xff, 0xa6, 0x7a, 0x01, 0x9f, 0x78, 0x5a, 0xcd, 0xf1, 0x34, 0x80, 0x24, 0xd5, 0x80, 0x54, 0x06, 0x3c, 0xbb, 0x19, 0x96, 0x33, 0xea, 0x3b, 0x6f, 0x0e, 0x4a, 0x66, 0x2e, 0xe0, 0xc7, 0xd2, 0x4b, 0x17, 0xe5, 0xec, 0x47, 0x12, 0xd9, 0x8f, 0x05, 0x7f, 0x92, 0xf8, 0x9f, 0x0f, 0xfa, 0xb1, 0xbc, 0xfc, 0xd9, 0x9c, 0xf8, 0x1e, 0xab, 0x01, 0x42, 0x19, 0xf8, 0x58, 0x18, 0xfc, 0x6e, 0xb4, 0xfa, 0xa0, 0xf0, 0x00, 0xe5, 0x48, 0x0c, 0x18, 0xc8, 0xfb, 0x09, 0x72, 0xfe, 0xa3, 0x31, 0x03, 0x3e, 0xfd, 0xf9, 0xf0, 0xa8, 0xfb, 0xcf, 0x33, 0xfa, 0xd9, 0xe5, 0xf5, 0x29, 0xd4, 0xfb, 0xdb, 0x2e, 0xfe, 0x6b, 0x48, 0x01, 0x84, 0xb0, 0x5d, 0x2e, 0x51, 0x36, 0x74, 0x7a, 0xd4, 0x59, 0xc5, 0x05, 0x3c, 0x20, 0x18, 0x36, 0xc9, 0xe6, 0xdb, 0x7d, 0x0c, 0xdd, 0xce, 0x31, 0xb1, 0x00, 0xd4, 0xc3, 0xbe, 0xe5, 0x3d, 0x42, 0x10, 0x57, 0x76, 0x03, 0x36, 0xaa, 0xfa, 0x60, 0x1d, 0xfa, 0x18, 0xd1, 0xfa, 0x77, 0x4a, 0xf8, 0x4e, 0xe6, 0x01, 0x56, 0xc1, 0xf7, 0x83, 0x19, 0xfd, 0xf1, 0xb1, 0xf9, 0x40, 0x73, 0xff, 0x77, 0xd1, 0x0d, 0x22, 0x53, 0xfd, 0xfb, 0x31, 0xfd, 0xe4, 0xbe, 0x04, 0xf3, 0x47, 0xfb, 0xeb, 0x5b, 0xfa, 0x4c, 0x0c, 0xfb, 0xcd, 0x3c, 0xf4, 0xc6, 0xe9, 0xfa, 0x5d, 0x24, 0xfd, 0x11, 0x48, 0x00, 0xef, 0xcd, 0x60, 0x16, 0x53, 0x37, 0x3a, 0x1a, 0xd4, 0x43, 0x8b, 0x07, 0xc5, 0x9c, 0x14, 0xc1, 0x36, 0xe4, 0x46, 0xcd, 0x0a, 0xe7, 0x66, 0x32, 0x9e, 0x56, 0xd7, 0xc5, 0x03, 0xe7, 0xa3, 0x9a, 0x0d, 0x66, 0x28, 0x01, 0x79, 0x98, 0xfd, 0x08, 0xfb, 0xf9, 0x69, 0xa0, 0xf8, 0x1e, 0xf0, 0xf8, 0x6f, 0x80, 0x02, 0xd2, 0x1d, 0xf7, 0x6e, 0x60, 0xfe, 0xec, 0x6a, 0xf9, 0x63, 0x89, 0xfd, 0x5f, 0x9b, 0x0d, 0x43, 0x71, 0x00, 0x76, 0x71, 0xfd, 0x79, 0x61, 0x04, 0xc1, 0x22, 0xfe, 0x4e, 0xb2, 0xf8, 0xf3, 0x85, 0xfa, 0x51, 0xea, 0xf3, 0xe5, 0xe7, 0xf9, 0x85, 0xaa, 0xfb, 0x4a, 0x66, 0xff, 0x60, 0x9f, 0x5f, 0xdb, 0x73, 0x3b, 0x70, 0x12, 0xd7, 0x59, 0xd9, 0x04, 0xa7, 0x1c, 0x14, 0xd3, 0x29, 0xe2, 0x76, 0x6f, 0x05, 0x40, 0x48, 0x33, 0xd9, 0xbf, 0xdc, 0xa5, 0xa9, 0xe7, 0xd5, 0xb5, 0x09, 0xed, 0xda, 0xff, 0x4f, 0xf6, 0xff, 0x42, 0xa7, 0xf9, 0x9f, 0x38, 0xf7, 0x6a, 0x0b, 0xf9, 0x07, 0xed, 0x03, 0xc5, 0x27, 0xf6, 0x36, 0xca, 0xfe, 0xd2, 0xdf, 0xfa, 0x19, 0x7d, 0xfa, 0x5f, 0x5b, 0x0b, 0x42, 0x6c, 0x05, 0x23, 0xba, 0xfe, 0x3d, 0x1e, 0x02, 0xb5, 0x75, 0x01, 0x31, 0xb0, 0xf6, 0x0f, 0xd9, 0xf9, 0x5c, 0xbc, 0xf4, 0x69, 0xdf, 0xf7, 0xc9, 0x5c, 0xfb, 0xfa, 0x9e, 0xfd, 0xf5, 0x28, 0x5b, 0xbc, 0x11, 0x41, 0x68, 0x03, 0xde, 0x6d, 0x05, 0xff, 0xbc, 0xc3, 0x14, 0xd7, 0x74, 0xe2, 0x09, 0x1e, 0xfc, 0x1a, 0xdf, 0x33, 0xb3, 0xca, 0xe4, 0x52, 0x9d, 0xe6, 0x8f, 0xd4, 0x06, 0x11, 0x45, 0xfe, 0x83, 0x51, 0x01, 0xe8, 0xa8, 0xfa, 0xe8, 0xd6, 0xf5, 0x4c, 0x9f, 0xf9, 0xfe, 0xdd, 0x04, 0x08, 0xa4, 0xf5, 0x2c, 0xd8, 0xfe, 0x26, 0x85, 0xfc, 0xa4, 0x8f, 0xf8, 0xc6, 0x8a, 0x07, 0x57, 0x90, 0x09, 0x90, 0x0c, 0x02, 0x1b, 0x86, 0xfe, 0x8d, 0xf2, 0x02, 0x7a, 0x8a, 0xf7, 0x95, 0x66, 0xf8, 0x76, 0x98, 0xf5, 0x15, 0x17, 0xf7, 0xbd, 0xe6, 0xfa, 0xa8, 0x43, 0xfc, 0x50, 0xb8, 0x58, 0x6c, 0x73, 0x43, 0xee, 0xd4, 0xe3, 0xbb, 0x82, 0xfe, 0xad, 0x31, 0x11, 0xb1, 0x45, 0xe4, 0x80, 0xf1, 0xf4, 0xde, 0x6f, 0x30, 0xdb, 0x04, 0xee, 0xf8, 0x2d, 0xe5, 0xd3, 0x93, 0x05, 0x88, 0x38, 0xfc, 0xa8, 0x99, 0x01, 0xd3, 0xfe, 0xfc, 0x17, 0xf3, 0xf4, 0x6b, 0xfe, 0xf9, 0xce, 0x94, 0x05, 0x82, 0x51, 0xf5, 0xb9, 0xff, 0xfe, 0x25, 0x04, 0xfe, 0x6f, 0xe6, 0xf7, 0xf6, 0xf1, 0x04, 0x05, 0x5d, 0x09, 0x06, 0xbb, 0x05, 0xf7, 0xa1, 0xfc, 0xee, 0xb9, 0x02, 0xa5, 0xd0, 0xf9, 0x9e, 0x5e, 0xf7, 0x1b, 0x71, 0xf6, 0x6b, 0x37, 0xf7, 0xe6, 0x3f, 0xfb, 0x0e, 0x00, 0xfb, 0xab, 0x6c, 0x59, 0x34, 0xc4, 0x42, 0xb8, 0x08, 0xe5, 0x3b, 0xf4, 0x05, 0x74, 0xdb, 0x09, 0xdc, 0x6e, 0xe3, 0x30, 0x45, 0xf4, 0xbc, 0x9e, 0x28, 0x22, 0x44, 0xf5, 0x14, 0x9d, 0xe6, 0x78, 0x4f, 0x03, 0xa8, 0x4f, 0xfa, 0xdb, 0xde, 0x02, 0x73, 0xf9, 0xfd, 0x8c, 0x0f, 0xf6, 0xec, 0x82, 0xf9, 0xa0, 0x36, 0x05, 0x99, 0xe9, 0xf6, 0xce, 0xb3, 0xfd, 0x87, 0x88, 0x00, 0xfd, 0x1a, 0xf8, 0x93, 0xa9, 0x02, 0x4f, 0x53, 0x05, 0xaf, 0x26, 0x08, 0xc3, 0xfa, 0xfe, 0x40, 0x37, 0x00, 0x7e, 0xf9, 0xfc, 0xee, 0x67, 0xf7, 0x38, 0x87, 0xf6, 0xe1, 0x6c, 0xf9, 0xff, 0x00, 0xfb, 0xea, 0x61, 0xf8, 0x7b, 0xae, 0x59, 0xea, 0x6a, 0x42, 0x68, 0xb2, 0xe4, 0x27, 0xfc, 0x0e, 0x57, 0x3b, 0x03, 0x40, 0x58, 0xe0, 0xce, 0x76, 0xf6, 0x26, 0x29, 0x1f, 0x09, 0x14, 0xfb, 0xdc, 0x11, 0xea, 0xbd, 0x22, 0xff, 0xe2, 0xf6, 0xf9, 0x20, 0x17, 0x05, 0xc2, 0x4b, 0xfd, 0xba, 0x96, 0xf8, 0xc4, 0x65, 0xf8, 0x40, 0xa0, 0x03, 0xd4, 0xe4, 0xfa, 0x26, 0x35, 0xfb, 0xa0, 0x27, 0x03, 0xa2, 0xdf, 0xf8, 0x2a, 0x01, 0xfe, 0x3f, 0x44, 0x02, 0x23, 0xb7, 0x08, 0x20, 0x86, 0x02, 0xcc, 0x0a, 0x00, 0x68, 0x8f, 0xfd, 0x7a, 0xca, 0xf9, 0x62, 0xac, 0xf7, 0x35, 0x1d, 0xf9, 0xf0, 0xde, 0xfa, 0x33, 0xfa, 0xf7, 0xde, 0x0b, 0x59, 0x40, 0xd1, 0x41, 0xf0, 0xfb, 0xe5, 0x96, 0x0d, 0x15, 0x69, 0x32, 0xff, 0x1d, 0xf0, 0xdc, 0x55, 0xe3, 0xf7, 0xf4, 0x61, 0x16, 0xaf, 0x75, 0xff, 0x46, 0x5f, 0xee, 0xe9, 0x29, 0xfa, 0x60, 0x34, 0xfb, 0xcb, 0xaa, 0x07, 0xe9, 0x54, 0xfb, 0x90, 0x21, 0xfb, 0x57, 0x66, 0xf8, 0x78, 0x81, 0x00, 0xf4, 0x88, 0x00, 0x7f, 0x1e, 0xf9, 0xf8, 0x75, 0x01, 0xa2, 0x7e, 0xfb, 0x73, 0x5d, 0xfa, 0xc7, 0xd9, 0xfe, 0xe9, 0xb9, 0x08, 0xee, 0x6a, 0x05, 0x60, 0xe1, 0x01, 0xd0, 0x57, 0xfe, 0x9a, 0xe7, 0xfb, 0x1f, 0xdc, 0xf7, 0x82, 0xb3, 0xf8, 0xc2, 0x0a, 0xfc, 0x82, 0xe3, 0xf7, 0x90, 0x8d, 0x56, 0x19, 0xdb, 0x41, 0x9d, 0x9c, 0xe9, 0x70, 0x02, 0x17, 0xad, 0x05, 0xfe, 0xfd, 0xd2, 0xdb, 0xf5, 0xdc, 0xf5, 0x6e, 0x58, 0x0f, 0x40, 0x97, 0x03, 0xb8, 0xb0, 0xf1, 0xe7, 0xf1, 0xf6, 0x76, 0xaf, 0xfc, 0xbb, 0xa9, 0x09, 0x2a, 0x40, 0xfa, 0xad, 0xdb, 0xfb, 0x2c, 0x61, 0xfa, 0xda, 0x3a, 0xfe, 0xc9, 0x60, 0x02, 0x56, 0x68, 0xf9, 0xfa, 0x7d, 0xfd, 0xab, 0xf9, 0xfc, 0x90, 0xe6, 0xfb, 0x58, 0x3c, 0xfb, 0x41, 0x53, 0x06, 0x96, 0xaf, 0x07, 0x28, 0x47, 0x07, 0x3b, 0x41, 0xfd, 0x8d, 0x33, 0xfb, 0x3a, 0x0b, 0xfc, 0x27, 0xa6, 0xf7, 0x04, 0x57, 0xfb, 0x67, 0xec, 0xf8, 0xbf, 0xad, 0x53, 0xaa, 0xb5, 0x41, 0x88, 0x48, 0xed, 0x78, 0xf4, 0x17, 0x2c, 0x82, 0xfd, 0x51, 0xa8, 0xdc, 0xa1, 0xc0, 0xf2, 0xb7, 0x41, 0x08, 0x32, 0x49, 0x08, 0xa9, 0xec, 0xf4, 0x5b, 0xda, 0xf3, 0xa8, 0x73, 0xff, 0x9e, 0x52, 0x0a, 0xf7, 0xc4, 0xf9, 0x66, 0x78, 0xfd, 0x14, 0x22, 0xfb, 0x20, 0x66, 0xfc, 0x41, 0x57, 0x02, 0x10, 0x79, 0xf9, 0xa7, 0x1b, 0xfb, 0x3c, 0x69, 0xfd, 0x52, 0xce, 0xff, 0x48, 0x91, 0xf8, 0x31, 0x31, 0x05, 0x14, 0xfe, 0x07, 0x92, 0x10, 0x08, 0xde, 0x0f, 0x01, 0x1d, 0x35, 0xfa, 0xb3, 0xe1, 0xfd, 0x2e, 0xcf, 0xf7, 0x1e, 0x7b, 0xfb, 0xad, 0x90, 0xf9, 0x9c, 0x73, 0x53, 0x52, 0x35, 0x3d, 0xae, 0x59, 0xf1, 0x9e, 0x67, 0x19, 0x9d, 0xed, 0xfa, 0x91, 0xdf, 0xdf, 0xb5, 0x0c, 0xef, 0xea, 0xd5, 0x01, 0xdd, 0x36, 0x0c, 0xd7, 0xd3, 0xf8, 0xbd, 0x9a, 0xf0, 0xec, 0xa8, 0x01, 0x9b, 0x74, 0x0c, 0xbb, 0xc1, 0xf8, 0xde, 0xaf, 0xfd, 0xb2, 0x9c, 0xfa, 0x74, 0x29, 0xfc, 0xbc, 0x46, 0x00, 0x2f, 0xec, 0xf8, 0xda, 0x0b, 0xfd, 0x64, 0x80, 0xfb, 0x17, 0xea, 0x01, 0x6b, 0xf4, 0xfc, 0x2c, 0x06, 0x02, 0xca, 0x32, 0x04, 0xdd, 0x34, 0x08, 0xf4, 0x3e, 0x06, 0xdb, 0xc0, 0xf9, 0x6d, 0x15, 0xfc, 0x01, 0xa3, 0xfb, 0x6a, 0x4b, 0xfb, 0x90, 0xef, 0xf8, 0xc6, 0x68, 0x4f, 0x29, 0x2e, 0x3b, 0x59, 0x71, 0xf7, 0xa5, 0xe1, 0x17, 0xb8, 0x22, 0xf9, 0x84, 0x3b, 0xe7, 0x0c, 0x67, 0xe8, 0x0d, 0x9a, 0xfa, 0x75, 0x86, 0x13, 0x91, 0xd3, 0xfa, 0xa1, 0x5a, 0xed, 0xb4, 0xb2, 0x05, 0xa7, 0x3f, 0x0c, 0xd5, 0xfa, 0xf7, 0x58, 0x96, 0xfe, 0x37, 0x84, 0xf7, 0x9b, 0xa6, 0xfc, 0xa5, 0x6b, 0x01, 0x1b, 0x63, 0xf5, 0xf4, 0xe1, 0xff, 0xe6, 0xe3, 0xfd, 0xb5, 0xa0, 0xff, 0xf0, 0xc4, 0x01, 0xac, 0x60, 0x01, 0xde, 0xf5, 0xff, 0x60, 0x1d, 0x07, 0xfa, 0x15, 0x06, 0xdc, 0xee, 0xfd, 0xa7, 0x7d, 0xfc, 0x4a, 0x55, 0xfb, 0x90, 0x88, 0xfd, 0x17, 0xbe, 0xf8, 0xb8, 0x5f, 0x4e, 0x34, 0x97, 0x36, 0xfa, 0xd1, 0xfb, 0xd5, 0x00, 0x17, 0x1d, 0xad, 0xf4, 0xac, 0xbb, 0xef, 0x0c, 0xa5, 0xe6, 0x14, 0x4c, 0xf1, 0x62, 0xf3, 0x18, 0xed, 0xc0, 0xff, 0x06, 0x39, 0xea, 0xb3, 0xab, 0x07, 0x3a, 0x6f, 0x0c, 0x3b, 0x5c, 0xf6, 0x71, 0x00, 0xfe, 0xd9, 0x55, 0xf6, 0x91, 0x57, 0xfe, 0x2f, 0xb4, 0x00, 0xf2, 0x01, 0xf4, 0xba, 0xe5, 0x02, 0x60, 0x9a, 0x00, 0xb1, 0xca, 0xfc, 0x3b, 0x74, 0x03, 0xb9, 0x44, 0x04, 0x4f, 0x56, 0xfd, 0xfc, 0x95, 0x03, 0x38, 0xc7, 0x03, 0xba, 0xa4, 0x01, 0x6c, 0xb8, 0xff, 0x98, 0xfc, 0xf9, 0x11, 0xf8, 0xfe, 0xf2, 0x8f, 0xfa, 0x73, 0xad, 0x52, 0x95, 0x3b, 0x31, 0xbd, 0xab, 0xf5, 0x2c, 0x0f, 0x1c, 0x60, 0xbc, 0xf2, 0x74, 0xd6, 0xee, 0x4d, 0x22, 0xea, 0xb8, 0x9d, 0xf0, 0xfa, 0x69, 0x17, 0x59, 0xf9, 0x01, 0x09, 0x80, 0xec, 0x88, 0x4b, 0x06, 0x43, 0x49, 0x0c, 0xda, 0xae, 0xf4, 0x89, 0xaa, 0xfc, 0xc1, 0xfc, 0xf7, 0xa9, 0xc6, 0xfe, 0x31, 0x5d, 0x01, 0xec, 0x97, 0xf4, 0xe0, 0xcc, 0x02, 0x74, 0xcf, 0x01, 0xce, 0x73, 0xfe, 0x2f, 0x50, 0x03, 0x84, 0xb5, 0x03, 0xda, 0xae, 0xfd, 0xa8, 0x18, 0x01, 0xba, 0xb2, 0x02, 0x4a, 0xf7, 0x00, 0x2a, 0x06, 0x02, 0x1f, 0x3a, 0xfd, 0x14, 0xbd, 0xfc, 0x24, 0x6d, 0xfd, 0x3d, 0xa6, 0x56, 0x6f, 0x27, 0x2a, 0x5e, 0x74, 0xed, 0xb4, 0xce, 0x25, 0x2c, 0x32, 0xf1, 0xf3, 0xd4, 0xe7, 0x0d, 0x51, 0xf1, 0x1c, 0x63, 0xf3, 0xc6, 0x8d, 0x12, 0x01, 0xce, 0x03, 0x24, 0x4f, 0xed, 0xd5, 0x47, 0x03, 0xcf, 0xfa, 0x0d, 0x01, 0xfa, 0xf3, 0xec, 0x6c, 0xf9, 0x4f, 0xfc, 0xfa, 0x1a, 0x48, 0x00, 0x8b, 0x15, 0x01, 0x39, 0x90, 0xf5, 0x0e, 0x36, 0x01, 0xee, 0x8d, 0x02, 0xd1, 0xd3, 0x00, 0x7d, 0xac, 0x01, 0x3b, 0xa1, 0x02, 0x70, 0xf5, 0xfe, 0xa4, 0x34, 0xff, 0x53, 0xac, 0x01, 0x58, 0x76, 0x00, 0xf0, 0x3e, 0x01, 0xf7, 0x17, 0x01, 0x8c, 0x81, 0xfc, 0x15, 0x20, 0xfd, 0x0b, 0x4a, 0x55, 0xcb, 0x1e, 0x24, 0x4b, 0x82, 0xe8, 0x9c, 0x0b, 0x30, 0x63, 0xa5, 0xf2, 0x5e, 0x41, 0xdf, 0xf4, 0x53, 0xf7, 0x97, 0xa9, 0xfa, 0xee, 0xf4, 0x0b, 0x65, 0xe4, 0x00, 0xfd, 0x9f, 0xf1, 0x5a, 0xb8, 0x00, 0xce, 0xfc, 0x0d, 0x64, 0xf8, 0xf4, 0xea, 0x14, 0xf8, 0x7c, 0x18, 0xfe, 0xba, 0x13, 0x00, 0x3d, 0xd8, 0xff, 0xa3, 0xd7, 0xf7, 0x32, 0xd2, 0x01, 0x5a, 0x91, 0x00, 0xa5, 0x52, 0x01, 0x35, 0x71, 0x02, 0x63, 0x19, 0x02, 0xb0, 0x9e, 0xfe, 0x0e, 0x29, 0x00, 0xf7, 0xed, 0xff, 0xdb, 0xf3, 0xfe, 0xfc, 0x34, 0x03, 0x69, 0x72, 0x00, 0xa1, 0x76, 0xfe, 0x7a, 0x61, 0xfe, 0x4b, 0xe7, 0x52, 0x6b, 0xd2, 0x1e, 0x17, 0xdc, 0xe6, 0x85, 0x40, 0x36, 0x71, 0x34, 0xf3, 0xd6, 0x72, 0xd9, 0xfd, 0xbb, 0xfe, 0x7d, 0x47, 0xfd, 0x11, 0x43, 0x04, 0x2e, 0x5b, 0x02, 0x1a, 0x5b, 0xf4, 0x67, 0x14, 0xfd, 0xef, 0x13, 0x0e, 0x5b, 0xef, 0xf7, 0xa1, 0xb6, 0xf7, 0xb1, 0xe7, 0xff, 0x17, 0x26, 0x00, 0xa2, 0xca, 0xfd, 0x3d, 0x77, 0xfa, 0xd7, 0x25, 0x02, 0x5d, 0x8e, 0xfe, 0xa8, 0xf2, 0x00, 0x89, 0x1e, 0x03, 0xea, 0xe6, 0x01, 0x8c, 0x2b, 0xfe, 0x10, 0x74, 0x00, 0x52, 0x47, 0x00, 0x1c, 0xca, 0xfe, 0xda, 0x65, 0x02, 0xbd, 0x83, 0x00, 0xbd, 0xfc, 0xfe, 0x97, 0xfa, 0xff, 0x1f, 0xf8, 0x4d, 0x46, 0x44, 0x1d, 0xf4, 0x89, 0xe7, 0x30, 0x5d, 0x33, 0xb2, 0x66, 0xf5, 0xe6, 0x66, 0xde, 0xd1, 0x9c, 0x00, 0xbf, 0x0d, 0xfa, 0x7b, 0xfb, 0x01, 0x60, 0x1e, 0x03, 0xa8, 0x9e, 0xf6, 0xdb, 0x61, 0xfb, 0x71, 0x2e, 0x0d, 0xf7, 0xba, 0xfa, 0x96, 0x34, 0xf8, 0xd4, 0x86, 0x00, 0x51, 0xdf, 0xff, 0x09, 0x9f, 0xfd, 0x32, 0x0d, 0xfb, 0x16, 0x40, 0x01, 0xc9, 0x76, 0xff, 0x4a, 0xf5, 0x00, 0xac, 0x6c, 0x01, 0x34, 0x3a, 0x02, 0x44, 0x9d, 0xfe, 0x05, 0xd5, 0xff, 0xf2, 0xfa, 0x01, 0x04, 0xb9, 0xff, 0x6e, 0xf1, 0xff, 0x28, 0x4c, 0x00, 0x1e, 0xb0, 0xff, 0x08, 0xd5, 0xff, 0xde, 0x58, 0x47, 0x27, 0xb2, 0x1c, 0x06, 0xba, 0xe9, 0x60, 0x0c, 0x2f, 0x14, 0x39, 0xfa, 0xeb, 0x02, 0xe1, 0xa1, 0x59, 0xff, 0x13, 0xc7, 0xfb, 0x06, 0xdd, 0xfe, 0x61, 0xb9, 0x01, 0x4d, 0x45, 0xfa, 0xdf, 0x68, 0xfb, 0xe3, 0xeb, 0x0a, 0x14, 0x60, 0xfd, 0x31, 0x7f, 0xf9, 0x8e, 0x20, 0xff, 0x91, 0xc6, 0x00, 0x89, 0x39, 0xfe, 0xa3, 0x0e, 0xfa, 0x38, 0xa6, 0x00, 0xdf, 0xf0, 0x00, 0xaf, 0xc3, 0x00, 0x75, 0x03, 0x00, 0xcd, 0xa1, 0x01, 0x90, 0x5e, 0xff, 0xe6, 0x08, 0x01, 0x65, 0x17, 0x02, 0x8c, 0xf2, 0xff, 0xdf, 0x6f, 0xff, 0x51, 0x28, 0xff, 0xc8, 0x0e, 0x00, 0xc0, 0x85, 0xff, 0xda, 0xef, 0x38, 0x02, 0x81, 0x20, 0x41, 0xba, 0xfc, 0x25, 0x80, 0x16, 0x08, 0x75, 0xf5, 0x4f, 0x1a, 0xf6, 0x95, 0x63, 0xf9, 0xde, 0x17, 0xf9, 0xb4, 0xeb, 0x06, 0x75, 0xdf, 0xff, 0x25, 0x61, 0xf6, 0xb6, 0xd9, 0x03, 0xca, 0x50, 0x08, 0x95, 0xbc, 0xfa, 0x71, 0xd5, 0xfc, 0xf7, 0x61, 0xfb, 0x7b, 0xc1, 0x00, 0x8c, 0xba, 0xfe, 0xb0, 0x8b, 0xf9, 0x6d, 0x6b, 0x01, 0x8f, 0xd4, 0xfe, 0xb8, 0x74, 0xfe, 0x87, 0x32, 0x01, 0xc7, 0xa8, 0x01, 0x20, 0x70, 0x02, 0xa4, 0x81, 0x04, 0xd4, 0x00, 0xff, 0xe3, 0xf4, 0xfc, 0xff, 0xf9, 0xfe, 0xfc, 0x6c, 0xfd, 0x62, 0x2c, 0xff, 0xfa, 0x69, 0x01, 0x99, 0x60, 0x31, 0x37, 0x07, 0x20, 0x7c, 0xfe, 0xfd, 0x6e, 0x69, 0x14, 0x2e, 0x7c, 0xfa, 0x42, 0xe8, 0xf4, 0x33, 0xc7, 0xfa, 0x50, 0xb8, 0xfa, 0xd6, 0xc1, 0x03, 0x08, 0x61, 0x00, 0x6a, 0x62, 0xf8, 0xb0, 0xf1, 0x02, 0xd4, 0x4f, 0x07, 0x4a, 0x4c, 0xfc, 0x0f, 0xb1, 0xfc, 0xb9, 0xca, 0xfb, 0xad, 0xde, 0x00, 0x8c, 0x28, 0xfe, 0x64, 0x0c, 0xfa, 0x31, 0x75, 0x01, 0xd6, 0x56, 0xfe, 0x70, 0x3b, 0xfe, 0x1d, 0xe1, 0x01, 0xd0, 0x94, 0x01, 0xed, 0x12, 0x02, 0x69, 0x3d, 0x03, 0x94, 0xbb, 0xfe, 0xc9, 0xa6, 0xfe, 0xa5, 0x13, 0xff, 0x77, 0x08, 0xfd, 0x4b, 0xc7, 0xff, 0x79, 0x5c, 0x01, 0x18, 0x24, 0x2b, 0xfa, 0xdc, 0x1e, 0x25, 0x6e, 0xff, 0x55, 0x0d, 0x14, 0xb5, 0xc6, 0xfc, 0xd7, 0x78, 0xf4, 0xcd, 0xf7, 0xfc, 0x80, 0x36, 0xfb, 0x1f, 0x2d, 0x02, 0x77, 0x84, 0x00, 0x3c, 0x42, 0xfa, 0x51, 0xcf, 0x02, 0xbe, 0x13, 0x06, 0xb2, 0x86, 0xfd, 0x1a, 0x38, 0xfd, 0x54, 0xac, 0xfc, 0x52, 0x4c, 0x00, 0xf9, 0xfa, 0xfd, 0x09, 0x69, 0xfb, 0xba, 0xe3, 0x00, 0x1e, 0x20, 0xfe, 0xf5, 0xdf, 0xfe, 0x4c, 0xbb, 0x01, 0xb6, 0xb5, 0x01, 0xff, 0x2f, 0x02, 0x85, 0xb5, 0x01, 0x32, 0xdd, 0xfe, 0x1a, 0x40, 0x00, 0x7a, 0x6a, 0xff, 0x73, 0x39, 0xfd, 0x77, 0x0c, 0x00, 0xe7, 0xb6, 0x01, 0x29, 0xe8, 0x24, 0x9c, 0xa3, 0x1c, 0x2d, 0x0d, 0x03, 0x7e, 0xb2, 0x12, 0x46, 0x0d, 0xfd, 0x29, 0x05, 0xf7, 0xfe, 0x7c, 0xfd, 0x4f, 0x2d, 0xfb, 0x03, 0x30, 0x02, 0xfd, 0x50, 0x00, 0x1e, 0x62, 0xfb, 0xa1, 0x98, 0x02, 0xd9, 0x7c, 0x05, 0x44, 0x13, 0xfe, 0x70, 0xb2, 0xfd, 0x6f, 0xa9, 0xfd, 0x23, 0x9a, 0xff, 0x83, 0x25, 0xfe, 0xc3, 0x34, 0xfc, 0x4f, 0x5e, 0x00, 0xec, 0xa9, 0xfe, 0xe1, 0x1e, 0xff, 0x50, 0x47, 0x01, 0x6c, 0xe6, 0x01, 0x23, 0xe2, 0x01, 0x27, 0xb0, 0x00, 0xec, 0xd8, 0xff, 0xcd, 0x10, 0x01, 0x6b, 0xdc, 0xff, 0xe7, 0x29, 0xfe, 0xc6, 0xee, 0xff, 0xcf, 0x2a, 0x02, 0x9b, 0x68, 0x1e, 0xd9, 0xaa, 0x1a, 0x41, 0x84, 0x07, 0x6c, 0xd3, 0x0f, 0xbb, 0xc4, 0xfd, 0x35, 0xe7, 0xfa, 0x39, 0xd7, 0xfc, 0xae, 0xe6, 0xfa, 0xe4, 0xe0, 0x02, 0x83, 0xb6, 0x00, 0xf4, 0x8a, 0xfb, 0x7f, 0x63, 0x02, 0x01, 0x1f, 0x05, 0xa8, 0x6d, 0xfe, 0x3b, 0xbc, 0xfe, 0x44, 0xf7, 0xfd, 0x53, 0xf8, 0xfe, 0x77, 0xa5, 0xfe, 0xf8, 0x0e, 0xfd, 0xa5, 0xf4, 0xff, 0xa0, 0xdf, 0xfe, 0xb9, 0x7a, 0xff, 0xc5, 0xdf, 0x00, 0xe6, 0xe2, 0x01, 0x33, 0x54, 0x01, 0x73, 0xcd, 0x00, 0xb5, 0x1d, 0x01, 0xb0, 0xab, 0x01, 0x49, 0x8c, 0x00, 0x58, 0x86, 0xfe, 0xbf, 0x33, 0x00, 0x1e, 0xcf, 0x01, 0xea, 0x09, 0x18, 0x5d, 0x71, 0x18, 0xbc, 0x7d, 0x0b, 0xa5, 0xba, 0x0d, 0x8a, 0xfd, 0xfe, 0x22, 0xf2, 0xfd, 0x02, 0x3d, 0xfc, 0x98, 0xce, 0xfa, 0xe5, 0xb6, 0x03, 0x95, 0x19, 0x01, 0x41, 0x90, 0xfb, 0xbf, 0xcf, 0x01, 0x6d, 0xa2, 0x04, 0xcb, 0xe6, 0xff, 0x29, 0x37, 0xff, 0x13, 0x2b, 0xfd, 0x99, 0x43, 0xff, 0x9f, 0xd8, 0xff, 0x27, 0x21, 0xfd, 0x8b, 0x6d, 0xff, 0xde, 0x5f, 0xff, 0x88, 0x59, 0xff, 0x6e, 0x27, 0x01, 0xf3, 0xd3, 0x01, 0x43, 0xc1, 0x00, 0x11, 0xda, 0x01, 0xb8, 0x98, 0x02, 0xf8, 0x3f, 0x02, 0x7f, 0x32, 0x00, 0x93, 0x8e, 0xfe, 0xee, 0x75, 0x00, 0x43, 0xec, 0x00, 0xcb, 0x63, 0x14, 0x1a, 0xd5, 0x16, 0xf8, 0x42, 0x0c, 0x3e, 0xf2, 0x0b, 0x84, 0x05, 0x00, 0x4a, 0x61, 0xff, 0xf9, 0x0a, 0xfd, 0x59, 0x73, 0xfb, 0x53, 0x08, 0x03, 0xb5, 0x47, 0x01, 0x80, 0xb0, 0xfc, 0x40, 0x72, 0x01, 0x97, 0xa1, 0x03, 0x60, 0xb3, 0x00, 0x97, 0x91, 0xff, 0x17, 0xdf, 0xfc, 0xc3, 0xea, 0xff, 0x7a, 0x68, 0x00, 0x15, 0xe5, 0xfc, 0x2b, 0x37, 0xff, 0xb7, 0xd1, 0xff, 0x24, 0xc6, 0xff, 0xc9, 0x68, 0x01, 0x33, 0xc2, 0x01, 0xd8, 0x57, 0x01, 0xec, 0x2a, 0x03, 0xe9, 0x4e, 0x03, 0x08, 0x82, 0x01, 0x0f, 0x24, 0xff, 0x63, 0xc9, 0xfe, 0x50, 0x20, 0x00, 0x87, 0x71, 0x00, 0x6e, 0xf5, 0x11, 0xeb, 0xff, 0x14, 0xef, 0x57, 0x0c, 0x32, 0x23, 0x0b, 0xe2, 0x31, 0x00, 0x93, 0xb2, 0x00, 0xbb, 0x79, 0xfe, 0x4e, 0x73, 0xfb, 0x44, 0x89, 0x02, 0xa7, 0x0f, 0x02, 0x0b, 0xc7, 0xfd, 0x77, 0x99, 0x00, 0xae, 0xef, 0x02, 0x11, 0xd6, 0x01, 0x0c, 0xbd, 0xff, 0x0e, 0xf8, 0xfc, 0xa7, 0x83, 0x00, 0x42, 0x57, 0x00, 0x9d, 0x16, 0xfd, 0xdf, 0xec, 0xff, 0xf0, 0xed, 0xff, 0x92, 0x90, 0x00, 0x60, 0xae, 0x02, 0x73, 0x00, 0x02, 0x37, 0x05, 0x02, 0x66, 0x9f, 0x03, 0xc4, 0x87, 0x02, 0xb7, 0x4d, 0x00, 0x80, 0xda, 0xfe, 0x81, 0xc7, 0xfe, 0xd5, 0x64, 0x00, 0x19, 0xca, 0x00, 0xfd, 0x40, 0x10, 0xb1, 0xc8, 0x12, 0x8a, 0xa2, 0x0b, 0x34, 0x3f, 0x0b, 0x28, 0xdc, 0x00, 0xb5, 0xb6, 0x00, 0xc2, 0xa5, 0xfe, 0x8f, 0x92, 0xfc, 0x41, 0xcf, 0x02, 0x92, 0xb2, 0x01, 0x63, 0xbf, 0xfd, 0xb3, 0x8d, 0x00, 0x5e, 0x26, 0x03, 0x84, 0xf3, 0x01, 0x71, 0x67, 0xff, 0x38, 0x34, 0xfd, 0x11, 0x03, 0x01, 0xb7, 0x67, 0x00, 0x8a, 0x51, 0xfd, 0xd1, 0x97, 0x00, 0x80, 0xf6, 0x00, 0x3f, 0x11, 0x02, 0x90, 0xfb, 0x02, 0x84, 0x1f, 0x01, 0x77, 0xfe, 0x01, 0x49, 0x0e, 0x03, 0xe1, 0xe0, 0x00, 0x41, 0x64, 0xff, 0x03, 0x61, 0xff, 0x19, 0x54, 0xff, 0xd1, 0xe3, 0xff, 0x20, 0xd7, 0xff, 0x1b, 0xca, 0x0f, 0x6f, 0x0b, 0x12, 0xed, 0x00, 0x0a, 0x78, 0xdd, 0x09, 0xfd, 0x59, 0x01, 0x95, 0x35, 0x01, 0x75, 0x61, 0xff, 0x57, 0x57, 0xfd, 0xa1, 0x7c, 0x02, 0x36, 0x90, 0x01, 0xd2, 0x63, 0xfe, 0xb2, 0x46, 0x01, 0xf1, 0xdd, 0x02, 0xf9, 0xdc, 0x00, 0xc0, 0xf7, 0xff, 0x5a, 0xa2, 0xfe, 0x02, 0xbd, 0x00, 0x51, 0x8d, 0x00, 0x69, 0x33, 0xff, 0x56, 0x15, 0x02, 0xe8, 0x02, 0x02, 0xea, 0x1b, 0x02, 0x56, 0x69, 0x01, 0x3d, 0x9f, 0x00, 0x3c, 0xc0, 0x01, 0x8c, 0xbe, 0x01, 0x60, 0x88, 0x00, 0x7a, 0xad, 0xff, 0x87, 0x3c, 0xff, 0x05, 0x08, 0xff, 0xed, 0xdb, 0xff, 0xa7, 0xaf, 0xff, 0x04, 0x6a, 0x0e, 0xef, 0x71, 0x10, 0x85, 0x95, 0x09, 0x71, 0xdf, 0x09, 0x61, 0xdb, 0x01, 0xd2, 0x43, 0x01, 0x32, 0x88, 0xff, 0x94, 0x23, 0xfe, 0xb4, 0xc8, 0x02, 0x31, 0xc6, 0x01, 0x2d, 0x91, 0xfe, 0x10, 0x1e, 0x01, 0x74, 0xd1, 0x02, 0xec, 0x28, 0x01, 0xc2, 0x82, 0x00, 0xd2, 0x71, 0xff, 0xdd, 0xde, 0x01, 0x4b, 0x20, 0x02, 0x3f, 0x7b, 0x00, 0x37, 0xbd, 0x01, 0x91, 0x91, 0x01, 0x30, 0xf6, 0x00, 0x6f, 0x06, 0x00, 0xb1, 0xb4, 0x00, 0x96, 0x7d, 0x01, 0x05, 0x86, 0x01, 0x70, 0x2f, 0x00, 0xf8, 0x3b, 0xff, 0xa8, 0x43, 0xff, 0x21, 0x0c, 0xff, 0x97, 0xc9, 0xff, 0x6d, 0x37, 0xff, 0xda, 0x59, 0x0d, 0x50, 0x7c, 0x0f, 0x6d, 0x22, 0x09, 0xb9, 0x67, 0x09, 0xdd, 0x33, 0x02, 0x99, 0x14, 0x01, 0x95, 0xf0, 0xff, 0x5f, 0x6c, 0xff, 0x02, 0xfd, 0x02, 0x37, 0x3f, 0x01, 0xc0, 0xb4, 0xfe, 0x6a, 0x2a, 0x02, 0x5f, 0xa8, 0x02, 0x68, 0x2b, 0x01, 0xff, 0xc7, 0x02, 0x55, 0x89, 0x01, 0x6a, 0x29, 0x02, 0xc3, 0xfa, 0x01, 0xe3, 0xe3, 0xff, 0xeb, 0xbf, 0x00, 0x8e, 0xc8, 0x00, 0xa4, 0xa5, 0xff, 0xd4, 0x57, 0x00, 0x68, 0x66, 0x01, 0xea, 0xa2, 0x00, 0xd9, 0xc3, 0x00, 0xb7, 0xff, 0xff, 0xfd, 0x47, 0xff, 0x25, 0x21, 0xff, 0x51, 0x07, 0xff, 0x54, 0x6f, 0xff, 0xb7, 0xf3, 0xfe, 0xf6, 0xd5, 0x0c, 0x55, 0x34, 0x0f, 0xd3, 0xc6, 0x08, 0xad, 0x09, 0x08, 0x84, 0xb6, 0x01, 0xa7, 0xf1, 0x01, 0x7e, 0x4c, 0x01, 0xf5, 0x39, 0xff, 0xcf, 0x50, 0x02, 0x7c, 0x32, 0x02, 0xaa, 0xa2, 0xff, 0x4a, 0x2f, 0x02, 0xf5, 0x2f, 0x04, 0x0e, 0x95, 0x03, 0xb9, 0x92, 0x03, 0xd0, 0x00, 0x01, 0xa2, 0x9c, 0x00, 0xe4, 0xb0, 0x00, 0xc6, 0x21, 0xff, 0x78, 0x52, 0x00, 0xf5, 0x8f, 0x00, 0xf7, 0xa7, 0xff, 0x17, 0x39, 0x00, 0xbb, 0xb2, 0x00, 0xa8, 0xab, 0x00, 0x83, 0x45, 0x00, 0xcd, 0x65, 0xff, 0xa6, 0x0d, 0xff, 0x37, 0xf7, 0xfe, 0xfd, 0x1d, 0xff, 0x9f, 0xfe, 0xfe, 0x5c, 0x8b, 0xfe, 0x27, 0xe2, 0x0b, 0x06, 0xcf, 0x0d, 0x32, 0xfb, 0x08, 0x7f, 0xed, 0x08, 0xb5, 0x20, 0x02, 0x7e, 0x16, 0x01, 0xb7, 0xfc, 0x00, 0x62, 0x6e, 0x01, 0xff, 0x0b, 0x03, 0xf5, 0xa7, 0x01, 0x3b, 0xe3, 0x01, 0xe0, 0x05, 0x05, 0xea, 0xde, 0x04, 0x30, 0xa8, 0x02, 0xc7, 0x1e, 0x02, 0xdd, 0x54, 0xff, 0xc7, 0x84, 0xff, 0x15, 0x33, 0x00, 0xae, 0x7b, 0xff, 0x2b, 0x98, 0x00, 0xf1, 0xb1, 0xff, 0x96, 0x88, 0xff, 0xbe, 0x56, 0x00, 0x44, 0xa8, 0x00, 0xf3, 0x23, 0x00, 0x36, 0x81, 0xff, 0x66, 0x46, 0xff, 0x79, 0xd1, 0xfe, 0xc7, 0x25, 0xff, 0x43, 0xef, 0xfe, 0xe0, 0x7f, 0xfe, 0x0f, 0x64, 0xfe, 0x9d, 0x83, 0x0b, 0x60, 0x6c, 0x0e, 0xfe, 0x8f, 0x09, 0x2e, 0x5f, 0x07, 0x6b, 0xd4, 0x00, 0xb5, 0x79, 0x02, 0x20, 0xa5, 0x02, 0xe2, 0x22, 0x02, 0x7b, 0xe1, 0x04, 0x1a, 0xce, 0x04, 0x02, 0xfe, 0x02, 0x8a, 0xc3, 0x03, 0xf2, 0x21, 0x03, 0xea, 0x55, 0x00, 0xd5, 0x4c, 0x00, 0xbe, 0x1e, 0xff, 0x2b, 0xff, 0xff, 0xf2, 0x24, 0x00, 0x18, 0x1d, 0xff, 0x4c, 0x1d, 0x00, 0x87, 0xe3, 0xff, 0x44, 0xd6, 0xff, 0x1d, 0x1a, 0x00, 0x70, 0x33, 0x00, 0x11, 0x23, 0xff, 0x75, 0x46, 0xff, 0x5f, 0x36, 0xff, 0x2e, 0xcf, 0xfe, 0x6e, 0x27, 0xff, 0x0f, 0x6c, 0xfe, 0xe7, 0x65, 0xfe, 0x2c, 0x81, 0xfe, 0x1a, 0x81, 0x0b, 0xdc, 0x5b, 0x0e, 0xc4, 0x9b, 0x09, 0x99, 0x49, 0x07, 0x8a, 0xbf, 0x00, 0xa3, 0xfc, 0x02, 0x03, 0x2b, 0x06, 0xfa, 0xae, 0x06, 0xe0, 0xce, 0x04, 0x3b, 0x08, 0x03, 0x8e, 0x9e, 0x01, 0xcf, 0xfd, 0x00, 0xc1, 0x8c, 0x01, 0xe4, 0x99, 0xff, 0xde, 0x22, 0x00, 0xd5, 0xbc, 0xff, 0x45, 0xf6, 0xfe, 0x60, 0xaf, 0xff, 0xc4, 0xbc, 0xff, 0x15, 0xfe, 0xff, 0x8d, 0xe1, 0xff, 0xc3, 0x86, 0xff, 0x29, 0x5b, 0xff, 0xee, 0xbc, 0xff, 0x03, 0xe3, 0xfe, 0xf9, 0xd4, 0xfe, 0x9f, 0x1f, 0xff, 0x93, 0xd0, 0xfe, 0x3a, 0xeb, 0xfe, 0xfe, 0x89, 0xfe, 0x02, 0x4f, 0xfe, 0x61, 0xa5, 0xfe, 0x14, 0x1e, 0x0b, 0x25, 0xfb, 0x0d, 0x4a, 0x91, 0x09, 0xf8, 0x5e, 0x08, 0x78, 0x65, 0x04, 0xd2, 0xbf, 0x05, 0x52, 0x92, 0x06, 0xe6, 0x00, 0x07, 0x23, 0x9e, 0x03, 0x0e, 0x03, 0xff, 0xc8, 0xfd, 0xfe, 0x25, 0x6f, 0x01, 0x15, 0x90, 0x01, 0xa9, 0xf2, 0xfe, 0xe3, 0x59, 0xff, 0xab, 0x59, 0xff, 0x6c, 0x48, 0xff, 0xc5, 0x92, 0xff, 0xd9, 0xa4, 0xff, 0x20, 0xce, 0xff, 0x9b, 0x37, 0xff, 0x96, 0x36, 0xff, 0x60, 0x4b, 0xff, 0x2e, 0xdd, 0xfe, 0xf5, 0x60, 0xfe, 0x5b, 0xed, 0xfe, 0x50, 0xda, 0xfe, 0xf2, 0xfd, 0xfe, 0xeb, 0xf1, 0xfe, 0xcd, 0x45, 0xfe, 0x13, 0xa6, 0xfe, 0xc4, 0xdd, 0xfe, 0x64, 0x05, 0x0a, 0x92, 0x0a, 0x10, 0xda, 0x86, 0x0d, 0x38, 0x5a, 0x0a, 0x14, 0x85, 0x05, 0x27, 0x82, 0x05, 0x73, 0x28, 0x06, 0xe9, 0xd9, 0x03, 0xf3, 0x08, 0x00, 0xc5, 0x1b, 0x00, 0xdb, 0xe6, 0xff, 0x92, 0x43, 0x00, 0xd6, 0xe0, 0x00, 0xa7, 0x0d, 0xff, 0x32, 0x00, 0x00, 0xeb, 0x5c, 0xff, 0x59, 0xf6, 0xfe, 0x6a, 0x08, 0x00, 0x50, 0x6a, 0xff, 0x04, 0x57, 0xff, 0xb4, 0x9a, 0xff, 0x70, 0x47, 0xff, 0xea, 0x9d, 0xfe, 0x8b, 0x89, 0xfe, 0xee, 0x9b, 0xfe, 0x35, 0x2d, 0xff, 0x84, 0x3a, 0xff, 0xa5, 0x19, 0xff, 0x65, 0xfd, 0xfe, 0x0b, 0x99, 0xfe, 0xbf, 0xdf, 0xfe, 0xe4, 0xdd, 0xfe, 0x6f, 0xae, 0x0c, 0xf4, 0x5f, 0x17, 0x59, 0x69, 0x0f, 0xc7, 0xe0, 0x05, 0xff, 0x01, 0x03, 0x16, 0x63, 0x05, 0x39, 0x04, 0x03, 0x49, 0x86, 0x01, 0x96, 0x57, 0x02, 0xc2, 0xaa, 0xff, 0xcd, 0x8f, 0xfe, 0x01, 0xc7, 0xff, 0x27, 0xcd, 0x01, 0xe5, 0xce, 0xff, 0x2b, 0x8d, 0xfe, 0x40, 0xbc, 0xff, 0xcf, 0x3b, 0xff, 0x7b, 0xeb, 0xfe, 0xdf, 0x9c, 0xff, 0xf4, 0xc3, 0xff, 0xba, 0x3b, 0xff, 0xbc, 0xc7, 0xfe, 0x86, 0x65, 0xfe, 0x40, 0x99, 0xfe, 0x25, 0x05, 0xff, 0x7f, 0x34, 0xff, 0xd3, 0x4c, 0xff, 0xf5, 0x21, 0xff, 0x20, 0xd8, 0xfe, 0x19, 0xbb, 0xfe, 0x6d, 0xc2, 0xfe, 0x8e, 0xa1, 0xfe, 0x64, 0xc3, 0x0e, 0xec, 0xab, 0x17, 0x74, 0xd0, 0x0d, 0xaf, 0x01, 0x07, 0x27, 0x85, 0x01, 0xf2, 0x5e, 0x01, 0xad, 0xff, 0x04, 0xa8, 0x44, 0x04, 0x84, 0xa8, 0xff, 0x82, 0x3c, 0xff, 0x75, 0x01, 0x01, 0xcc, 0xc3, 0xff, 0x4f, 0x8c, 0x00, 0xf5, 0x40, 0x00, 0xfb, 0x5f, 0xff, 0xb5, 0x00, 0xff, 0xac, 0xb3, 0xfe, 0x57, 0xe5, 0xfe, 0x6d, 0x86, 0xff, 0xfd, 0xb0, 0xff, 0x14, 0x2a, 0xff, 0x1b, 0x0b, 0xff, 0x97, 0x48, 0xfe, 0xd0, 0xc5, 0xfe, 0xab, 0x25, 0xff, 0x8b, 0x0a, 0xff, 0x90, 0x01, 0xff, 0x5c, 0x03, 0xff, 0x68, 0xf3, 0xfe, 0xac, 0xbb, 0xfe, 0xd0, 0x96, 0xfe, 0xd4, 0xaf, 0xfe, 0xc9, 0x12, 0x0b, 0x1f, 0xe4, 0x13, 0xb9, 0x01, 0x0f, 0x6d, 0x17, 0x08, 0x82, 0xb0, 0x01, 0x3d, 0x8b, 0x02, 0x6c, 0x76, 0x05, 0x34, 0x05, 0x04, 0x95, 0xe4, 0x00, 0x05, 0xf9, 0xff, 0x8f, 0x5c, 0x01, 0x5a, 0x58, 0x01, 0x55, 0xac, 0x00, 0x54, 0xd8, 0xff, 0x34, 0x22, 0x00, 0x91, 0x2f, 0xff, 0x30, 0x9d, 0xfe, 0x84, 0xea, 0xfe, 0x07, 0xd0, 0xfe, 0x71, 0x36, 0xff, 0xfd, 0xde, 0xff, 0xda, 0x46, 0xff, 0x94, 0x70, 0xfe, 0x68, 0x51, 0xff, 0xbc, 0x1e, 0xff, 0xf0, 0xd7, 0xfe, 0x45, 0xc3, 0xfe, 0x33, 0xce, 0xfe, 0x0d, 0xcc, 0xfe, 0xbc, 0xb9, 0xfe, 0x14, 0xde, 0xfe, 0xb1, 0xaf, 0xfe, 0xc1, 0x8e, 0x0a, 0x4a, 0xfc, 0x12, 0xf8, 0xba, 0x0b, 0x1e, 0x58, 0x05, 0x6e, 0xb3, 0x03, 0x4e, 0x17, 0x04, 0x98, 0x42, 0x04, 0xee, 0xca, 0x03, 0xc8, 0x06, 0x03, 0x65, 0x03, 0x01, 0x78, 0xe7, 0x00, 0xa4, 0xac, 0x02, 0xd8, 0x39, 0x02, 0x05, 0x75, 0x00, 0xc8, 0x28, 0x00, 0xbb, 0xdc, 0xff, 0x44, 0x33, 0xff, 0x0a, 0x62, 0xfe, 0x6a, 0xf0, 0xfe, 0xe3, 0x46, 0xff, 0x63, 0x0f, 0xff, 0x6f, 0x7b, 0xff, 0x89, 0x7e, 0xff, 0x96, 0x77, 0xff, 0xe8, 0x56, 0xff, 0x7c, 0x56, 0xff, 0x30, 0xc3, 0xfe, 0x8e, 0x6e, 0xfe, 0x93, 0x81, 0xfe, 0xf9, 0xb3, 0xfe, 0x55, 0xe3, 0xfe, 0xf7, 0xbd, 0xfe, 0xbb, 0x0a, 0x0a, 0x9a, 0xcd, 0x11, 0xc6, 0xb6, 0x09, 0x0a, 0x4f, 0x04, 0x9a, 0x36, 0x05, 0x74, 0x8b, 0x03, 0x62, 0xda, 0x01, 0xe4, 0x11, 0x04, 0xd8, 0xdb, 0x03, 0xc6, 0xa7, 0x01, 0xf3, 0x6d, 0x02, 0x89, 0xa6, 0x02, 0x8e, 0x1d, 0x02, 0xc6, 0x67, 0x02, 0x66, 0xaf, 0x01, 0x5d, 0xbb, 0xff, 0xb8, 0xc4, 0xff, 0x75, 0xbd, 0xff, 0xe1, 0x75, 0xfe, 0x45, 0x99, 0xfe, 0x78, 0x78, 0xff, 0x74, 0x76, 0xff, 0xbe, 0xdf, 0xfe, 0xd0, 0x0a, 0x00, 0xe4, 0x35, 0x00, 0xae, 0x3c, 0xff, 0x53, 0x3e, 0xff, 0x9c, 0xc8, 0xfe, 0xd2, 0x4a, 0xfe, 0x86, 0x4c, 0xfe, 0x2c, 0x9c, 0xfe, 0xe7, 0xe4, 0xfe, 0xbb, 0x6c, 0x09, 0x13, 0x52, 0x10, 0xb6, 0x24, 0x09, 0x69, 0x01, 0x05, 0x4b, 0xc1, 0x05, 0xcd, 0x8d, 0x02, 0x37, 0x7c, 0x00, 0x2f, 0xeb, 0x03, 0x7a, 0x74, 0x03, 0xf1, 0xe1, 0x00, 0x06, 0x1f, 0x02, 0xf9, 0x8b, 0x03, 0xd7, 0x40, 0x03, 0x46, 0x2e, 0x02, 0xf4, 0xb2, 0x01, 0xa1, 0xa2, 0x01, 0xdd, 0xd8, 0x00, 0x03, 0xb0, 0xff, 0x92, 0x8d, 0xff, 0x09, 0x38, 0xff, 0x51, 0xbe, 0xfe, 0x78, 0x05, 0xff, 0x18, 0x73, 0xff, 0x0a, 0xa9, 0xff, 0xfc, 0xa2, 0xff, 0x89, 0x1b, 0x00, 0xc6, 0xa7, 0xff, 0x17, 0xcc, 0xfe, 0x99, 0xcd, 0xfe, 0x3f, 0x75, 0xfe, 0x76, 0x13, 0xfe, 0x5e, 0x81, 0xfe, 0x62, 0x98, 0x09, 0x81, 0x54, 0x10, 0x84, 0x08, 0x09, 0x0f, 0xe5, 0x04, 0x47, 0xce, 0x05, 0x58, 0x35, 0x02, 0x6f, 0xc8, 0xff, 0x8b, 0x0d, 0x04, 0x7b, 0x86, 0x03, 0x63, 0xb2, 0xff, 0x4f, 0xc9, 0x00, 0xad, 0x57, 0x03, 0xb3, 0xf7, 0x02, 0x5b, 0x71, 0x02, 0x37, 0xd7, 0x02, 0x39, 0x50, 0x01, 0xb7, 0xb8, 0x00, 0xe4, 0x88, 0x01, 0x1f, 0xb5, 0x00, 0x63, 0x20, 0xff, 0xce, 0xa5, 0xff, 0x12, 0xf1, 0xff, 0xd8, 0xcb, 0xfe, 0x3c, 0x5c, 0xff, 0x3c, 0x39, 0x00, 0x0e, 0xd2, 0xff, 0x9c, 0x53, 0xff, 0x91, 0x7f, 0xff, 0xfc, 0x25, 0xff, 0x26, 0xa0, 0xfe, 0x1f, 0xa2, 0xfe, 0x20, 0x67, 0xfe, 0xa8, 0xa8, 0x09, 0xea, 0x2a, 0x10, 0x57, 0x2f, 0x09, 0x16, 0x18, 0x06, 0x53, 0x4e, 0x06, 0x49, 0xc7, 0x00, 0x32, 0x02, 0xff, 0xbe, 0x13, 0x05, 0xe8, 0x94, 0x03, 0xf7, 0xad, 0xfe, 0x94, 0x4e, 0x00, 0xb6, 0xb3, 0x02, 0xc5, 0xfc, 0x01, 0x14, 0x86, 0x01, 0x07, 0x7c, 0x02, 0x0f, 0xb2, 0x01, 0x92, 0xdc, 0x00, 0xc0, 0x22, 0x01, 0x11, 0x30, 0x01, 0xea, 0xa4, 0x00, 0xc5, 0x06, 0x00, 0xa1, 0x14, 0x00, 0x69, 0x20, 0x00, 0x30, 0xdb, 0xff, 0xae, 0x92, 0xff, 0xa2, 0xbc, 0xff, 0xde, 0xaa, 0xff, 0xa3, 0x15, 0xff, 0xdb, 0xd5, 0xfe, 0xbf, 0x28, 0xff, 0xfd, 0xe6, 0xfe, 0x41, 0xb2, 0xfe, 0xa1, 0x3f, 0x0a, 0x13, 0x4a, 0x11, 0x0c, 0x74, 0x09, 0x1a, 0xb5, 0x05, 0x2d, 0x56, 0x06, 0x2b, 0xb8, 0x00, 0xbd, 0xae, 0xfe, 0x23, 0xf0, 0x04, 0x38, 0x93, 0x03, 0x8e, 0x65, 0xfe, 0x2e, 0xe2, 0xff, 0x42, 0x31, 0x02, 0x44, 0xb0, 0x01, 0x2e, 0x1c, 0x01, 0x4d, 0x67, 0x01, 0x72, 0xf0, 0x00, 0x77, 0x19, 0x00, 0xe4, 0xba, 0x00, 0x71, 0xa1, 0x01, 0x50, 0xa5, 0x00, 0x07, 0x0f, 0x00, 0xe3, 0x10, 0x01, 0xc1, 0xc4, 0x00, 0x27, 0x53, 0x00, 0x33, 0xa7, 0x00, 0xba, 0x21, 0x00, 0x02, 0x35, 0xff, 0x6c, 0xe4, 0xfe, 0xc6, 0xd2, 0xfe, 0x5e, 0xbf, 0xfe, 0xd7, 0xc6, 0xfe, 0xfa, 0x04, 0xff, 0x30, 0x23, 0x0b, 0x36, 0x3d, 0x12, 0x10, 0x9a, 0x09, 0x91, 0x3e, 0x06, 0xb6, 0x70, 0x06, 0x60, 0xd1, 0xff, 0x01, 0x8b, 0xfe, 0xa7, 0x91, 0x05, 0x35, 0x54, 0x03, 0xc9, 0xe1, 0xfd, 0xcf, 0xbd, 0xff, 0xb3, 0x43, 0x02, 0xd8, 0x4e, 0x01, 0xb5, 0x6a, 0x00, 0x78, 0xb5, 0x01, 0x32, 0xd0, 0x00, 0x9e, 0xd4, 0xfe, 0x45, 0x6b, 0xff, 0x56, 0x0b, 0x01, 0x78, 0xc0, 0x00, 0xd4, 0x14, 0x00, 0x21, 0xf7, 0x00, 0x39, 0x30, 0x01, 0xdd, 0x56, 0x01, 0x47, 0x2b, 0x01, 0x3f, 0xd4, 0x00, 0x6b, 0x61, 0x00, 0x69, 0x16, 0xff, 0x39, 0x38, 0xfe, 0xe5, 0x87, 0xfe, 0xf4, 0xf0, 0xfe, 0xc8, 0xb7, 0xfe, 0x9c, 0x6e, 0x0c, 0x3e, 0xd3, 0x13, 0xb8, 0x83, 0x09, 0xbc, 0xf2, 0x05, 0xef, 0x86, 0x06, 0x50, 0x93, 0xff, 0xd6, 0x7e, 0xfe, 0xf4, 0x8c, 0x05, 0x7c, 0xee, 0x02, 0x01, 0x9a, 0xfd, 0x4a, 0xe8, 0xff, 0x99, 0x03, 0x02, 0x81, 0xf4, 0x00, 0x0c, 0x25, 0x00, 0x37, 0x5c, 0x01, 0xac, 0x1e, 0x01, 0xf8, 0xdb, 0xfe, 0xb8, 0x72, 0xfe, 0x71, 0x8d, 0xff, 0x76, 0x23, 0x00, 0x60, 0xa3, 0xff, 0xf0, 0x44, 0x00, 0xe5, 0x84, 0x01, 0xe4, 0x8b, 0x01, 0xc1, 0x72, 0x01, 0x73, 0x98, 0x01, 0xf3, 0xf4, 0x00, 0xd0, 0xd3, 0xff, 0xff, 0xd7, 0xfe, 0x6b, 0x70, 0xfe, 0x63, 0x79, 0xfe, 0x16, 0xa4, 0xfe, 0xd3, 0x3f, 0x0d, 0xdf, 0x5e, 0x15, 0x0f, 0x15, 0x0a, 0xb3, 0x91, 0x05, 0x7d, 0xaa, 0x06, 0xee, 0x76, 0xff, 0xba, 0xfe, 0xfd, 0xc2, 0x0a, 0x06, 0x19, 0xbc, 0x02, 0xe4, 0xcb, 0xfc, 0x68, 0xf0, 0xff, 0x72, 0x1f, 0x02, 0xaa, 0xcc, 0x00, 0x6a, 0xaf, 0xff, 0x5b, 0xc4, 0x00, 0xa0, 0x6a, 0x01, 0x24, 0x55, 0xff, 0xaf, 0xf9, 0xfd, 0x2d, 0xfa, 0xfe, 0xf8, 0x58, 0xff, 0x82, 0xad, 0xfe, 0xf8, 0x7d, 0xff, 0x02, 0xac, 0x00, 0x43, 0x80, 0x01, 0x2b, 0xb1, 0x01, 0x51, 0x8f, 0x01, 0xbb, 0x75, 0x01, 0x52, 0x6b, 0x00, 0xb0, 0x69, 0xff, 0xd4, 0x10, 0xff, 0xb2, 0xca, 0xfe, 0x3a, 0x91, 0xfe, 0xfb, 0xbf, 0x0e, 0x10, 0x6a, 0x17, 0xba, 0xfa, 0x09, 0x02, 0xc7, 0x04, 0x9d, 0x01, 0x07, 0xac, 0x7c, 0xff, 0x82, 0xa8, 0xfd, 0xb6, 0x48, 0x06, 0x8b, 0x8b, 0x02, 0x60, 0x5c, 0xfc, 0x10, 0x01, 0x00, 0xc1, 0xe6, 0x01, 0x1e, 0x80, 0x00, 0x51, 0xbe, 0xff, 0x73, 0x4e, 0x00, 0xed, 0x50, 0x01, 0xc4, 0x97, 0xff, 0x76, 0x1f, 0xfe, 0x46, 0xac, 0xfe, 0x75, 0xec, 0xfe, 0xbb, 0x8a, 0xfe, 0xac, 0x9b, 0xfe, 0x32, 0xa7, 0xff, 0xcd, 0x17, 0x01, 0x42, 0x6c, 0x01, 0x9f, 0x29, 0x01, 0x47, 0x91, 0x01, 0x71, 0xb9, 0x00, 0x4b, 0xac, 0xff, 0x56, 0xa7, 0xff, 0x31, 0x46, 0xff, 0x97, 0xfa, 0xfe, 0x72, 0x93, 0x10, 0xd8, 0x75, 0x19, 0x56, 0xa3, 0x09, 0xa5, 0x38, 0x04, 0xf3, 0x44, 0x07, 0x48, 0xf1, 0xfe, 0x27, 0xa9, 0xfd, 0x7c, 0xdc, 0x06, 0xb1, 0xd1, 0x01, 0xa4, 0xd5, 0xfb, 0xcb, 0x47, 0x00, 0x53, 0x0b, 0x02, 0x52, 0xe4, 0xff, 0x58, 0x36, 0xff, 0xa1, 0x40, 0x00, 0x62, 0x29, 0x01, 0x1d, 0xb8, 0xff, 0x0c, 0x28, 0xfe, 0xe9, 0x78, 0xfe, 0xe8, 0xcd, 0xfe, 0x67, 0x60, 0xfe, 0x78, 0x4c, 0xfe, 0x54, 0x2a, 0xff, 0x8c, 0x58, 0x00, 0xe1, 0xfb, 0x00, 0xe2, 0x9a, 0x00, 0x0f, 0xe2, 0x00, 0x3b, 0x9f, 0x00, 0x91, 0xc4, 0xff, 0xfd, 0xb3, 0xff, 0x72, 0x81, 0xff, 0x53, 0x8b, 0xff, 0xaf, 0xb1, 0x12, 0xd7, 0xb7, 0x1b, 0xd7, 0x01, 0x09, 0x26, 0xc2, 0x03, 0x84, 0x90, 0x07, 0x65, 0x2e, 0xfe, 0x75, 0xe6, 0xfd, 0x1d, 0x91, 0x07, 0xd4, 0xef, 0x00, 0x62, 0x75, 0xfb, 0x96, 0xa4, 0x00, 0xab, 0x1a, 0x02, 0xe8, 0x89, 0xff, 0x78, 0xcc, 0xfe, 0xea, 0xfe, 0xff, 0xd4, 0xf0, 0x00, 0x7d, 0xab, 0xff, 0xab, 0x79, 0xfe, 0x0c, 0x9f, 0xfe, 0xe9, 0x68, 0xfe, 0x67, 0x32, 0xfe, 0x97, 0x6f, 0xfe, 0xd6, 0x34, 0xff, 0x2e, 0xb7, 0xff, 0x34, 0xab, 0x00, 0x92, 0x58, 0x00, 0xb2, 0x2d, 0x00, 0xff, 0x37, 0x00, 0x43, 0x14, 0xff, 0x39, 0x7e, 0xff, 0x0d, 0xeb, 0xff, 0x87, 0xc2, 0xff, 0xb3, 0xb1, 0x14, 0xd2, 0xf3, 0x1d, 0x55, 0x8f, 0x08, 0x6c, 0x67, 0x03, 0xb8, 0xe2, 0x07, 0xf6, 0x12, 0xfd, 0x90, 0x0c, 0xfe, 0xbd, 0xaa, 0x08, 0x54, 0xf9, 0xff, 0x8f, 0xda, 0xfa, 0xa1, 0x0a, 0x01, 0x77, 0x43, 0x02, 0x2a, 0x48, 0xff, 0x38, 0x48, 0xfe, 0xf3, 0xa0, 0xff, 0x23, 0xc5, 0x00, 0xff, 0x84, 0xff, 0xe1, 0x77, 0xfe, 0x2a, 0xd0, 0xfe, 0xad, 0x4d, 0xfe, 0x1b, 0xfe, 0xfd, 0x05, 0x47, 0xfe, 0x7a, 0x90, 0xff, 0x60, 0x77, 0xff, 0x55, 0xf2, 0xff, 0x77, 0xbd, 0x00, 0xd9, 0xbb, 0xff, 0x05, 0x62, 0xff, 0x6f, 0xb0, 0xfe, 0x2a, 0xda, 0xfe, 0x86, 0x7e, 0xff, 0x79, 0xc0, 0xff, 0x87, 0x8f, 0x16, 0x05, 0x68, 0x20, 0xf0, 0x4c, 0x08, 0x35, 0xbc, 0x02, 0x9b, 0x54, 0x08, 0xc9, 0xf0, 0xfb, 0xb4, 0xdd, 0xfd, 0x8f, 0xc9, 0x09, 0xdf, 0x27, 0xff, 0x06, 0x49, 0xfa, 0x74, 0x58, 0x01, 0x9b, 0x33, 0x02, 0x59, 0x32, 0xff, 0x12, 0xfc, 0xfd, 0x35, 0xec, 0xfe, 0xe1, 0x88, 0x00, 0xc6, 0x80, 0xff, 0xdf, 0x65, 0xfe, 0x59, 0xc1, 0xfe, 0x91, 0x23, 0xfe, 0x4d, 0xfd, 0xfd, 0x0f, 0x13, 0xfe, 0x78, 0xac, 0xff, 0x4b, 0xc7, 0xff, 0x63, 0x45, 0xff, 0xef, 0x8f, 0x00, 0xd4, 0x01, 0x00, 0x4e, 0xbc, 0xfe, 0xa8, 0x64, 0xfe, 0xb1, 0x5b, 0xfe, 0xc8, 0x99, 0xfe, 0xed, 0x61, 0xff, 0x68, 0x0b, 0x18, 0xd3, 0xf8, 0x22, 0x27, 0x7d, 0x08, 0x95, 0xcc, 0x01, 0x20, 0xe0, 0x08, 0xa6, 0x3d, 0xfb, 0x1c, 0x6b, 0xfd, 0xe6, 0xc2, 0x0a, 0xa7, 0xa8, 0xfe, 0x25, 0xdd, 0xf9, 0x4f, 0xb8, 0x01, 0xbe, 0x4f, 0x02, 0x51, 0xc8, 0xfe, 0x58, 0x00, 0xfe, 0x54, 0x91, 0xfe, 0x60, 0xe0, 0xff, 0xbc, 0x80, 0xff, 0xa7, 0x66, 0xfe, 0x32, 0xdd, 0xfe, 0x91, 0x1a, 0xfe, 0xe9, 0xce, 0xfd, 0x3c, 0xd0, 0xfd, 0x90, 0xb8, 0xff, 0x69, 0x8a, 0x00, 0x41, 0x32, 0xff, 0x93, 0x97, 0xff, 0x41, 0x45, 0x00, 0xe1, 0xfb, 0xfe, 0xba, 0x03, 0xfe, 0x9e, 0x30, 0xfe, 0x6a, 0xc0, 0xfd, 0x2a, 0xda, 0xfe, 0x7e, 0x52, 0x1a, 0xb6, 0x21, 0x25, 0x8f, 0xfb, 0x07, 0x66, 0x9f, 0x01, 0xb6, 0xf3, 0x08, 0x1f, 0x1f, 0xfa, 0x0d, 0x82, 0xfd, 0xf7, 0x2c, 0x0b, 0x6c, 0xa5, 0xfd, 0x6c, 0x22, 0xfa, 0x2c, 0xf4, 0x01, 0x72, 0x1f, 0x02, 0xfc, 0x63, 0xfe, 0x91, 0xd5, 0xfd, 0xc4, 0xac, 0xfe, 0xf2, 0xef, 0xfe, 0x39, 0x0d, 0xff, 0x04, 0x92, 0xfe, 0x67, 0x12, 0xff, 0xad, 0xf6, 0xfd, 0xc1, 0x82, 0xfd, 0x35, 0x97, 0xfd, 0xfe, 0xa8, 0xff, 0x4b, 0xc6, 0x00, 0x5c, 0xb2, 0xff, 0x64, 0x27, 0xff, 0x02, 0x7c, 0xff, 0xd9, 0x6f, 0xff, 0xec, 0xc3, 0xfd, 0x65, 0xdf, 0xfd, 0x5d, 0xa4, 0xfd, 0x2a, 0x11, 0xfe, 0xa0, 0x1b, 0x1d, 0x2e, 0xb3, 0x26, 0x43, 0x25, 0x07, 0x7e, 0x99, 0x02, 0x00, 0x7a, 0x08, 0xb1, 0x0c, 0xf9, 0x5c, 0xe9, 0xfd, 0x5b, 0x41, 0x0b, 0xa8, 0x9a, 0xfc, 0xea, 0x9f, 0xfa, 0x94, 0x64, 0x02, 0xa1, 0xe5, 0x01, 0xca, 0x24, 0xfe, 0xbb, 0x69, 0xfd, 0x48, 0x43, 0xff, 0x33, 0x0f, 0xfe, 0x69, 0x53, 0xfe, 0x7e, 0xd8, 0xfe, 0x7a, 0x2e, 0xff, 0xb5, 0x30, 0xfe, 0x2d, 0x36, 0xfd, 0xde, 0x5f, 0xfd, 0x31, 0xd8, 0xff, 0xf6, 0xa1, 0x00, 0x81, 0xd5, 0xff, 0xc9, 0xe5, 0xff, 0xdf, 0xc1, 0xfe, 0x64, 0xe2, 0xfe, 0x3d, 0x04, 0xfe, 0xbc, 0xba, 0xfd, 0x19, 0x96, 0xfd, 0x70, 0xae, 0xfd, 0x51, 0x57, 0x1f, 0x4f, 0xdc, 0x27, 0x74, 0x2c, 0x07, 0x0c, 0xab, 0x03, 0x93, 0x12, 0x08, 0x7d, 0x9a, 0xf8, 0x53, 0x90, 0xfd, 0x92, 0x1a, 0x0b, 0x28, 0x36, 0xfc, 0xab, 0x03, 0xfb, 0xe9, 0x5c, 0x02, 0x89, 0x02, 0x02, 0xc9, 0x5b, 0xfe, 0x47, 0x8e, 0xfc, 0xef, 0xaf, 0xff, 0x83, 0xd5, 0xfd, 0x61, 0x79, 0xfd, 0x60, 0xb6, 0xfe, 0xb9, 0x58, 0xff, 0x30, 0x7f, 0xfe, 0xf3, 0x6c, 0xfd, 0xac, 0xf4, 0xfc, 0x09, 0xb7, 0xff, 0x0f, 0xfa, 0x00, 0x7c, 0x91, 0xff, 0x58, 0x76, 0x00, 0xbd, 0xd6, 0xfe, 0x91, 0x25, 0xfe, 0xe8, 0x02, 0xfe, 0x93, 0xb1, 0xfd, 0x05, 0x6f, 0xfd, 0xd0, 0xb9, 0xfd, 0x41, 0x24, 0x21, 0xc3, 0x87, 0x28, 0x45, 0xc6, 0x07, 0x11, 0xe8, 0x04, 0x6b, 0xe5, 0x07, 0x19, 0xa5, 0xf8, 0x99, 0x5c, 0xfc, 0x7f, 0xe9, 0x0a, 0x1f, 0x17, 0xfc, 0xd1, 0x3d, 0xfb, 0x2d, 0x6b, 0x02, 0xf3, 0xb9, 0x01, 0x85, 0xf1, 0xfe, 0x2e, 0x05, 0xfc, 0xdf, 0x57, 0xff, 0x57, 0x18, 0xfe, 0x27, 0xf0, 0xfc, 0xcb, 0xbf, 0xfd, 0x86, 0xb0, 0xff, 0x92, 0xe2, 0xfe, 0x9a, 0xa1, 0xfd, 0x8f, 0xe3, 0xfc, 0x09, 0xf1, 0xfe, 0xb3, 0xcf, 0x01, 0xa6, 0x66, 0xff, 0xbc, 0x16, 0x00, 0x2e, 0x5c, 0xff, 0x59, 0x0b, 0xfe, 0x25, 0xa6, 0xfd, 0xc0, 0x4b, 0xfd, 0x0d, 0x6b, 0xfd, 0xb5, 0xcf, 0xfd, 0xbd, 0x48, 0x23, 0xc5, 0x71, 0x28, 0x7c, 0xda, 0x07, 0xe2, 0xdb, 0x06, 0x42, 0x94, 0x08, 0xf5, 0xee, 0xf7, 0x9d, 0xf4, 0xfa, 0x61, 0x3a, 0x0b, 0x27, 0x6f, 0xfb, 0x00, 0x42, 0xfb, 0xd3, 0xeb, 0x02, 0x11, 0x38, 0x01, 0xf4, 0x02, 0xff, 0x9b, 0x57, 0xfc, 0xb2, 0xb5, 0xfe, 0x9d, 0xea, 0xfd, 0x3c, 0x18, 0xfd, 0xbf, 0x7d, 0xfc, 0xc7, 0x82, 0xff, 0x2b, 0xac, 0xff, 0xdf, 0x8b, 0xfd, 0x7c, 0x1c, 0xfd, 0x74, 0x7d, 0xfe, 0x15, 0xd3, 0x01, 0xff, 0x00, 0x00, 0x4e, 0x44, 0xff, 0xa9, 0x80, 0xff, 0xc6, 0x97, 0xfe, 0xef, 0x27, 0xfd, 0x9a, 0xcb, 0xfc, 0xbb, 0xa0, 0xfd, 0x67, 0x9b, 0xfd, 0x21, 0x88, 0x26, 0xd3, 0x7a, 0x27, 0x78, 0xfa, 0x05, 0xd5, 0xd1, 0x0a, 0x7d, 0x1a, 0x0a, 0xe1, 0x53, 0xf5, 0x98, 0x99, 0xfa, 0x9f, 0x06, 0x0c, 0x22, 0xea, 0xf9, 0xfe, 0x51, 0xfb, 0xbc, 0x9b, 0x03, 0x82, 0xfd, 0x00, 0xde, 0x84, 0xfe, 0xfc, 0xee, 0xfc, 0x85, 0xbd, 0xfe, 0x0e, 0xfa, 0xfc, 0xc6, 0x79, 0xfd, 0x67, 0xfc, 0xfb, 0xcf, 0x81, 0xfe, 0xd8, 0x56, 0x00, 0x29, 0xe7, 0xfd, 0x44, 0x14, 0xfd, 0x5c, 0xee, 0xfe, 0xf5, 0x2f, 0x01, 0xf3, 0x61, 0x00, 0x64, 0x62, 0xff, 0xc7, 0x25, 0xff, 0x2a, 0xc3, 0xfe, 0x0f, 0x16, 0xfd, 0xce, 0xaa, 0xfc, 0x64, 0xae, 0xfd, 0x59, 0x56, 0xfd, 0xb2, 0x66, 0x29, 0xc4, 0xf7, 0x25, 0x34, 0xb2, 0x03, 0xfc, 0xac, 0x10, 0x88, 0xfd, 0x0b, 0x01, 0x08, 0xf1, 0xe0, 0x90, 0xfb, 0x79, 0xd6, 0x0d, 0x49, 0x12, 0xf7, 0xce, 0x03, 0xfb, 0x9b, 0x0a, 0x05, 0x95, 0x15, 0x01, 0xae, 0xc4, 0xfd, 0x54, 0x11, 0xfd, 0x5d, 0x77, 0xff, 0xc0, 0x64, 0xfc, 0x33, 0x6e, 0xfd, 0xd3, 0xf4, 0xfb, 0x44, 0x36, 0xfd, 0x2f, 0x61, 0x00, 0x5c, 0x5b, 0xff, 0x6c, 0x7c, 0xfc, 0x81, 0x66, 0xff, 0xb6, 0x2a, 0x01, 0x92, 0x0f, 0x00, 0xea, 0x68, 0x00, 0x1f, 0x78, 0xfe, 0x90, 0x86, 0xfe, 0x85, 0xc1, 0xfd, 0xea, 0xc0, 0xfc, 0x42, 0xfa, 0xfc, 0xa8, 0xbe, 0xfd, 0x57, 0x7e, 0x2a, 0xd0, 0x96, 0x24, 0x05, 0x88, 0x02, 0xf5, 0xa9, 0x16, 0xdd, 0xd5, 0x0d, 0xb6, 0x4b, 0xec, 0x78, 0xb3, 0xfd, 0x93, 0xc0, 0x10, 0x5f, 0x5f, 0xf2, 0xb0, 0xf4, 0xf9, 0x54, 0xa6, 0x07, 0x1f, 0x60, 0x01, 0xb2, 0x91, 0xfc, 0x36, 0xaa, 0xfc, 0x0c, 0x96, 0x00, 0xae, 0x52, 0xfc, 0x59, 0x0d, 0xfd, 0xfc, 0x0f, 0xfc, 0xf2, 0xf8, 0xfb, 0x0e, 0x7d, 0xff, 0xfd, 0x10, 0x01, 0xf4, 0x6d, 0xfc, 0x83, 0x15, 0xff, 0x0c, 0xc2, 0x01, 0x75, 0x79, 0xff, 0xa4, 0x4f, 0x01, 0xf9, 0x67, 0xfe, 0x50, 0x13, 0xfe, 0xa4, 0x39, 0xfe, 0xc0, 0xe4, 0xfc, 0xeb, 0x4c, 0xfc, 0xe9, 0x49, 0xfe, 0x04, 0xf7, 0x2c, 0xef, 0x9e, 0x26, 0xd6, 0xff, 0xfd, 0x79, 0xa8, 0x16, 0xb1, 0x0c, 0x13, 0xe0, 0x6c, 0xeb, 0x88, 0x2a, 0xfc, 0x5b, 0x5e, 0x12, 0x38, 0xd1, 0xef, 0xc1, 0xb2, 0xf8, 0x7e, 0x8f, 0x09, 0xe6, 0x2d, 0x01, 0x1e, 0x5f, 0xfb, 0xe6, 0x8b, 0xfc, 0x77, 0xaa, 0x01, 0xa6, 0xa9, 0xfb, 0x03, 0x6b, 0xfc, 0x85, 0xc4, 0xfc, 0x22, 0x69, 0xfb, 0xf9, 0xa3, 0xfd, 0x4f, 0x7e, 0x01, 0xf3, 0xee, 0xfd, 0x03, 0x39, 0xfe, 0x5c, 0x17, 0x02, 0x98, 0x95, 0xff, 0x3e, 0x58, 0x01, 0x93, 0xbd, 0xfe, 0x06, 0xcb, 0xfd, 0x99, 0x4c, 0xfe, 0x88, 0xc9, 0xfc, 0xff, 0xf5, 0xfb, 0x01, 0x13, 0xfe, 0x36, 0x5c, 0x31, 0xe5, 0x87, 0x28, 0x66, 0x23, 0xf9, 0xeb, 0xc6, 0x13, 0x23, 0x5d, 0x18, 0xda, 0xe0, 0xec, 0xab, 0x80, 0xfa, 0x55, 0x77, 0x12, 0xde, 0x4e, 0xee, 0xdb, 0xed, 0xf7, 0x17, 0xcb, 0x0a, 0x04, 0x70, 0x01, 0xe4, 0xbe, 0xf9, 0xbe, 0x9f, 0xfc, 0x89, 0xd0, 0x02, 0x01, 0x31, 0xfb, 0x07, 0x85, 0xfb, 0x55, 0x56, 0xfd, 0x1d, 0xb4, 0xfb, 0x2e, 0x25, 0xfc, 0x95, 0x96, 0x00, 0x2c, 0xad, 0xff, 0x87, 0x4b, 0xfe, 0x40, 0x9f, 0x01, 0x03, 0x79, 0x00, 0xe4, 0x2f, 0x01, 0xf0, 0xed, 0xfe, 0x33, 0x2d, 0xfe, 0x45, 0x22, 0xfe, 0x98, 0x6b, 0xfc, 0x38, 0xe8, 0xfb, 0xe4, 0x87, 0xfd, 0xa7, 0xab, 0x35, 0x6d, 0xcb, 0x2a, 0xff, 0x25, 0xf4, 0x0d, 0x78, 0x10, 0xea, 0x8c, 0x1b, 0x83, 0x6b, 0xf0, 0x99, 0x93, 0xf9, 0xf0, 0x51, 0x11, 0x7b, 0xba, 0xed, 0xc9, 0x27, 0xf7, 0x75, 0x8d, 0x0b, 0x1f, 0x07, 0x02, 0x54, 0x13, 0xf8, 0xd5, 0x81, 0xfc, 0x31, 0xa0, 0x03, 0xf4, 0xe8, 0xfa, 0xb2, 0xa7, 0xfa, 0x9e, 0x77, 0xfd, 0xdc, 0x41, 0xfc, 0x4b, 0x49, 0xfb, 0xae, 0xd9, 0xfe, 0x27, 0xe9, 0x00, 0x88, 0x46, 0xff, 0x15, 0x97, 0x00, 0x2f, 0x77, 0x01, 0xba, 0x66, 0x01, 0xa1, 0xfd, 0xfe, 0xe9, 0xf2, 0xfe, 0xdb, 0xc6, 0xfd, 0x06, 0xc5, 0xfb, 0x45, 0x16, 0xfc, 0xf9, 0x13, 0xfd, 0xfa, 0x98, 0x39, 0x2d, 0xcc, 0x2d, 0xec, 0x3c, 0xf0, 0x96, 0xea, 0x0b, 0xd5, 0x69, 0x1d, 0x09, 0xf6, 0xf4, 0x3d, 0x83, 0xf9, 0xd5, 0x98, 0x0f, 0xa1, 0x3f, 0xed, 0xda, 0xd6, 0xf6, 0x71, 0x77, 0x0b, 0x8e, 0x06, 0x03, 0x4d, 0xb8, 0xf6, 0xab, 0x1b, 0xfc, 0x9c, 0x4f, 0x04, 0x9b, 0xc5, 0xfa, 0xd0, 0x48, 0xfa, 0x1d, 0x17, 0xfd, 0x31, 0x15, 0xfd, 0x4a, 0x17, 0xfb, 0x52, 0x1b, 0xfd, 0x2e, 0x0e, 0x01, 0x9e, 0xdd, 0x00, 0xe9, 0xe2, 0xff, 0x49, 0xcd, 0x01, 0x24, 0x37, 0x02, 0xd5, 0x47, 0xff, 0x9a, 0x9e, 0xff, 0xd1, 0x5f, 0xfd, 0xe6, 0x44, 0xfb, 0x7c, 0x09, 0xfc, 0xea, 0xc8, 0xfc, 0xdd, 0x2e, 0x3d, 0xc1, 0x2e, 0x31, 0xf3, 0x47, 0xed, 0xf6, 0x9d, 0x06, 0x96, 0x13, 0x1e, 0x06, 0x02, 0xf9, 0xc6, 0xd9, 0xfa, 0xeb, 0xef, 0x0d, 0xdb, 0xfc, 0xeb, 0x39, 0x69, 0xf7, 0xc8, 0xca, 0x0a, 0x0f, 0xa4, 0x03, 0xef, 0x24, 0xf6, 0x84, 0x4a, 0xfb, 0x32, 0x8e, 0x04, 0x3f, 0xbb, 0xfa, 0x09, 0x34, 0xfa, 0x9f, 0x6b, 0xfc, 0xae, 0xbe, 0xfd, 0xed, 0x51, 0xfb, 0x78, 0x18, 0xfc, 0xbc, 0xf2, 0xff, 0x0c, 0x2e, 0x02, 0x5c, 0x39, 0x00, 0x11, 0x59, 0x01, 0x7d, 0x3f, 0x03, 0xb9, 0xf3, 0xff, 0x38, 0xdd, 0xff, 0x81, 0xf6, 0xfc, 0xaf, 0x2f, 0xfb, 0xeb, 0xb4, 0xfb, 0xd8, 0x43, 0xfc, 0x41, 0xed, 0x3f, 0xc3, 0x46, 0x35, 0xaa, 0xde, 0xea, 0x3b, 0x52, 0x01, 0x68, 0xc4, 0x1d, 0x21, 0xd0, 0xfb, 0x5c, 0x3b, 0xfd, 0xc1, 0x2b, 0x0d, 0xd2, 0xb2, 0xe9, 0xda, 0xb0, 0xf8, 0xa0, 0x17, 0x0a, 0x07, 0x3b, 0x03, 0x04, 0x8f, 0xf6, 0x89, 0x4d, 0xfa, 0xf0, 0x02, 0x04, 0x12, 0xd3, 0xfa, 0x58, 0x6e, 0xfa, 0xf0, 0x8e, 0xfb, 0xe5, 0x39, 0xfe, 0xa3, 0xc9, 0xfb, 0x3b, 0xd5, 0xfb, 0xd7, 0x56, 0xfe, 0xe9, 0x88, 0x02, 0x04, 0x2f, 0x01, 0xf1, 0xeb, 0x00, 0xb1, 0x24, 0x04, 0x0f, 0xd1, 0x00, 0x36, 0xcf, 0xff, 0xa0, 0xc0, 0xfc, 0xad, 0x59, 0xfb, 0x1c, 0x46, 0xfb, 0x3c, 0xa7, 0xfb, 0xbb, 0x95, 0x43, 0xa7, 0xb8, 0x38, 0xc0, 0x9d, 0xe7, 0xb7, 0x6c, 0xfe, 0xe5, 0x11, 0x1c, 0x95, 0x94, 0xfc, 0x0f, 0xe1, 0x00, 0xc5, 0x34, 0x0d, 0x4f, 0x9b, 0xe6, 0x70, 0x86, 0xfa, 0x42, 0xff, 0x09, 0xc6, 0x91, 0x01, 0x37, 0xa8, 0xf7, 0xf6, 0xcb, 0xf9, 0xd8, 0xb9, 0x02, 0x36, 0xb3, 0xfa, 0xe3, 0x47, 0xfb, 0x24, 0x85, 0xfa, 0x44, 0xc5, 0xfe, 0x2f, 0x7d, 0xfc, 0x1f, 0xc2, 0xfb, 0x9b, 0x53, 0xfd, 0x7e, 0xf9, 0x01, 0x12, 0x0a, 0x02, 0x43, 0xe8, 0x00, 0xf4, 0x50, 0x05, 0x81, 0x8d, 0x01, 0xeb, 0x5e, 0xff, 0x7d, 0xf7, 0xfc, 0x78, 0x63, 0xfb, 0x70, 0xeb, 0xfa, 0x54, 0x27, 0xfb, 0xca, 0x93, 0x4a, 0x33, 0x77, 0x38, 0x5e, 0x93, 0xe2, 0x1f, 0x5f, 0x00, 0xcb, 0xd8, 0x17, 0xa0, 0x63, 0xfb, 0x01, 0x12, 0x06, 0x3f, 0x33, 0x0c, 0x99, 0xcd, 0xe3, 0xb6, 0x08, 0xfd, 0x9f, 0xf7, 0x09, 0x72, 0xd9, 0xfe, 0x13, 0x1b, 0xf9, 0x62, 0x8d, 0xf9, 0x8b, 0xe4, 0x00, 0xd3, 0x6f, 0xfa, 0xa7, 0xf9, 0xfb, 0x23, 0xfb, 0xf9, 0x9c, 0x15, 0xff, 0xdd, 0x4d, 0xfd, 0x72, 0x91, 0xfb, 0x54, 0xf4, 0xfc, 0xe0, 0x26, 0x01, 0xbf, 0x37, 0x02, 0x75, 0x0e, 0x01, 0x86, 0xec, 0x06, 0x4e, 0x2f, 0x02, 0xdc, 0x38, 0xfe, 0xc0, 0x8f, 0xfd, 0x0f, 0x10, 0xfb, 0xd1, 0x73, 0xfa, 0xa2, 0x0b, 0xfb, 0x00, 0x46, 0x51, 0xa3, 0x24, 0x38, 0xae, 0xe2, 0xdd, 0x9e, 0x7d, 0x03, 0xa3, 0x73, 0x12, 0x59, 0x2b, 0xfa, 0x6c, 0x4b, 0x0a, 0xf4, 0x7b, 0x0b, 0xf9, 0x73, 0xe2, 0x17, 0xa5, 0xfe, 0xf8, 0xd6, 0x09, 0x70, 0x31, 0xfc, 0x5b, 0x2f, 0xfb, 0x7a, 0x9a, 0xf8, 0x4e, 0x2b, 0xff, 0xf6, 0xa5, 0xfa, 0x5d, 0x04, 0xfc, 0x6c, 0x74, 0xfa, 0x89, 0x07, 0xff, 0x84, 0xe9, 0xfd, 0xe2, 0x07, 0xfc, 0x18, 0x54, 0xfc, 0xbe, 0xb0, 0x00, 0xe6, 0x0f, 0x02, 0x82, 0xd1, 0x00, 0xa2, 0xf2, 0x08, 0xcf, 0x02, 0x03, 0x09, 0xb8, 0xfc, 0xbe, 0x0f, 0xfe, 0x26, 0xce, 0xfa, 0x22, 0xb6, 0xf9, 0x9a, 0x7f, 0xfb, 0xbe, 0x5c, 0x56, 0x06, 0xbe, 0x38, 0x4d, 0xaf, 0xda, 0x4b, 0x20, 0x06, 0x84, 0x63, 0x0d, 0xc5, 0xab, 0xf8, 0xcb, 0x3a, 0x0d, 0x75, 0x50, 0x0b, 0x18, 0xd1, 0xe2, 0x75, 0x4e, 0xff, 0x94, 0x21, 0x09, 0x63, 0x9d, 0xfa, 0x9f, 0x04, 0xfd, 0xa8, 0x79, 0xf7, 0x94, 0x9c, 0xfd, 0x94, 0x2d, 0xfb, 0x19, 0x39, 0xfc, 0xf1, 0xf3, 0xfa, 0x14, 0xfa, 0xfe, 0x90, 0x61, 0xfe, 0x11, 0xe7, 0xfc, 0xdc, 0xc1, 0xfb, 0x85, 0x52, 0x00, 0xc8, 0x4f, 0x02, 0x2e, 0xfc, 0xff, 0x37, 0x94, 0x0a, 0xb4, 0x49, 0x04, 0x8f, 0x71, 0xfb, 0xac, 0xe6, 0xfd, 0x4a, 0xfa, 0xfa, 0xff, 0x29, 0xf9, 0xdc, 0x2e, 0xfc, 0x88, 0x7d, 0x59, 0x86, 0x36, 0x3a, 0xe7, 0x5f, 0xd9, 0x81, 0x44, 0x07, 0x22, 0xee, 0x08, 0x54, 0x8c, 0xf6, 0xce, 0x9b, 0x0e, 0x68, 0x89, 0x0b, 0x0a, 0x23, 0xe4, 0x7b, 0x0a, 0xff, 0x02, 0xd3, 0x07, 0x6f, 0x9c, 0xf9, 0xeb, 0x58, 0xfe, 0x9f, 0x76, 0xf6, 0x7c, 0xd9, 0xfb, 0x3b, 0xf2, 0xfb, 0xfe, 0xc9, 0xfc, 0x8f, 0x5f, 0xfa, 0xeb, 0x59, 0xff, 0xd5, 0x96, 0xfe, 0xc6, 0x71, 0xfd, 0x9c, 0xd5, 0xfb, 0x64, 0x65, 0xff, 0x66, 0x6e, 0x03, 0x9e, 0x94, 0xfe, 0xe9, 0x35, 0x0a, 0x72, 0xf6, 0x05, 0x86, 0x2a, 0xfb, 0x38, 0x72, 0xfc, 0x28, 0x85, 0xfb, 0x90, 0x5a, 0xf9, 0xd2, 0x27, 0xfc, 0x3a, 0xce, 0x5a, 0x18, 0x2b, 0x3c, 0xf1, 0x7c, 0xda, 0x42, 0x23, 0x07, 0xc5, 0x40, 0x05, 0x29, 0x19, 0xf4, 0xe9, 0xb3, 0x0e, 0xe6, 0x2c, 0x0c, 0xb8, 0x10, 0xe6, 0x50, 0x90, 0xfe, 0xa1, 0x2e, 0x06, 0x96, 0xdf, 0xf8, 0xb8, 0x91, 0xff, 0x99, 0xcf, 0xf5, 0x3f, 0x59, 0xfa, 0x2a, 0xe4, 0xfc, 0xdf, 0x76, 0xfd, 0xaa, 0x1b, 0xf9, 0x59, 0x28, 0x00, 0x39, 0xc6, 0xfe, 0x74, 0x6b, 0xfd, 0x42, 0x17, 0xfd, 0xb1, 0x36, 0xfe, 0x21, 0xee, 0x04, 0xb0, 0x23, 0xfd, 0xb7, 0x74, 0x07, 0x0e, 0xd6, 0x07, 0x09, 0x66, 0xfc, 0x3c, 0xbf, 0xfa, 0x2c, 0x1b, 0xfc, 0xed, 0x36, 0xfa, 0xd0, 0xf8, 0xfb, 0x4a, 0x0d, 0x5a, 0xe2, 0x22, 0x3f, 0xc8, 0x9a, 0xdd, 0x67, 0x21, 0x06, 0x53, 0xfa, 0x01, 0xf7, 0xed, 0xf1, 0x92, 0x41, 0x0d, 0xe4, 0x35, 0x0d, 0x13, 0x90, 0xe8, 0x97, 0xaf, 0xfd, 0xca, 0xd7, 0x04, 0x5a, 0xbd, 0xf7, 0x1a, 0x4a, 0x01, 0x6f, 0xaf, 0xf5, 0x5a, 0x53, 0xf9, 0x80, 0x85, 0xfd, 0xea, 0x02, 0xfe, 0xaa, 0xed, 0xf7, 0x9a, 0xc7, 0x00, 0x2d, 0x67, 0xff, 0xb0, 0x95, 0xfc, 0x1e, 0xf3, 0xff, 0x8a, 0xf1, 0xfc, 0xd2, 0x0a, 0x05, 0x64, 0xed, 0xfc, 0x3a, 0x63, 0x03, 0xb2, 0x40, 0x08, 0x8d, 0x64, 0xff, 0x8c, 0x80, 0xfa, 0x49, 0x60, 0xfb, 0xd7, 0x1f, 0xfc, 0x18, 0x5e, 0xfc, 0xa9, 0x19, 0x59, 0xa8, 0x80, 0x40, 0xe0, 0xd8, 0xe2, 0x7e, 0xe5, 0x04, 0x7a, 0xe3, 0xfe, 0x70, 0xf9, 0xef, 0x8d, 0x76, 0x0a, 0x4a, 0xca, 0x0e, 0xde, 0x61, 0xea, 0xb6, 0x5f, 0xfd, 0x23, 0x66, 0x03, 0x05, 0x73, 0xf6, 0xe2, 0x8b, 0x03, 0x34, 0x1f, 0xf6, 0x2e, 0x63, 0xf8, 0x94, 0xaa, 0xfd, 0xcc, 0x86, 0xfe, 0xd4, 0xd8, 0xf6, 0x1e, 0x77, 0x01, 0x77, 0xcc, 0xff, 0x20, 0x43, 0xfc, 0xcd, 0x1d, 0x03, 0x75, 0xc3, 0xfa, 0xc7, 0x25, 0x04, 0x9d, 0x53, 0xfe, 0x52, 0xde, 0xfe, 0xd1, 0x00, 0x07, 0x3c, 0x89, 0x03, 0x69, 0x2d, 0xfb, 0x78, 0xca, 0xfa, 0x96, 0xaf, 0xfe, 0xe5, 0x6f, 0xfb, 0xcb, 0x1d, 0x57, 0xdd, 0xc5, 0x41, 0xe5, 0xb1, 0xe8, 0x0f, 0x9f, 0x03, 0x4b, 0x80, 0xfc, 0xaf, 0x30, 0xed, 0xa9, 0x27, 0x07, 0xb7, 0x61, 0x10, 0x9d, 0x51, 0xeb, 0x1b, 0x76, 0xfd, 0xef, 0xe2, 0x01, 0x00, 0x59, 0xf5, 0xc8, 0x51, 0x06, 0xc0, 0x79, 0xf6, 0xbb, 0x90, 0xf7, 0x2f, 0x16, 0xfd, 0xe4, 0xd5, 0xfe, 0xe5, 0xaf, 0xf6, 0x02, 0xca, 0x00, 0xac, 0xab, 0x01, 0xa6, 0x96, 0xfb, 0xa9, 0xcf, 0x03, 0x3a, 0x4c, 0xfa, 0x71, 0xd7, 0x01, 0x06, 0x24, 0x00, 0x5c, 0x94, 0xfc, 0xc9, 0xbc, 0x03, 0x3b, 0x40, 0x06, 0x5f, 0x6a, 0xfe, 0xdd, 0xb6, 0xfa, 0x25, 0xce, 0xfe, 0xe2, 0x2e, 0xfb, 0x94, 0xb7, 0x54, 0x6a, 0x06, 0x43, 0x52, 0xd9, 0xed, 0x31, 0x9b, 0x04, 0xbf, 0x14, 0xfa, 0x4a, 0x11, 0xea, 0x49, 0xc4, 0x04, 0x48, 0x8f, 0x10, 0x0c, 0xd3, 0xec, 0xa7, 0x86, 0xfd, 0x20, 0x59, 0x01, 0xf0, 0xf1, 0xf4, 0xa2, 0x1a, 0x09, 0xdf, 0x3d, 0xf7, 0x12, 0x68, 0xf6, 0xff, 0xf3, 0xfc, 0xf6, 0xad, 0xfe, 0x8c, 0xb0, 0xf7, 0x86, 0x87, 0x00, 0x31, 0xb9, 0x02, 0x05, 0x36, 0xfa, 0x82, 0x09, 0x04, 0x78, 0x04, 0xfb, 0x72, 0xf8, 0xfe, 0x6c, 0xd3, 0x02, 0xbb, 0xad, 0xfc, 0x4e, 0x33, 0xff, 0x69, 0x4a, 0x08, 0x4b, 0x33, 0x02, 0xb9, 0x2e, 0xfa, 0xfe, 0x15, 0xff, 0x7a, 0xb8, 0xfc, 0xb7, 0x4d, 0x51, 0x7d, 0xc6, 0x44, 0x6e, 0x4b, 0xf2, 0x70, 0x2f, 0x06, 0x79, 0x8a, 0xf8, 0x20, 0x57, 0xe6, 0xd1, 0x80, 0x02, 0xa9, 0x9d, 0x0f, 0x6c, 0xb4, 0xee, 0xba, 0xc2, 0xfd, 0x3c, 0x0e, 0x01, 0x74, 0x7a, 0xf5, 0x3a, 0x21, 0x0b, 0x79, 0xc3, 0xf7, 0x40, 0xcc, 0xf5, 0x6d, 0x0e, 0xfc, 0xbf, 0x11, 0xff, 0xa3, 0x93, 0xfa, 0x9b, 0x63, 0xfd, 0x8f, 0x06, 0x03, 0x39, 0x81, 0xfa, 0xf0, 0xe9, 0x01, 0xe4, 0x10, 0xfd, 0x2f, 0x66, 0xfe, 0x4a, 0xf7, 0x01, 0x39, 0x60, 0x00, 0x3e, 0x44, 0xfd, 0x9b, 0x90, 0x04, 0x1e, 0x2d, 0x05, 0x70, 0xb6, 0xfc, 0x1f, 0x09, 0xff, 0x2d, 0x51, 0xfc, 0x61, 0xab, 0x4e, 0x95, 0xa5, 0x44, 0xe4, 0xc5, 0xf6, 0x1b, 0x79, 0x07, 0x6a, 0xd9, 0xf7, 0x1d, 0xf8, 0xe2, 0x1d, 0x6b, 0xff, 0x06, 0x28, 0x0e, 0xe4, 0x1b, 0xf1, 0x3c, 0x55, 0xfe, 0x10, 0xc4, 0x00, 0x77, 0xad, 0xf6, 0x63, 0x57, 0x0c, 0x9a, 0x5b, 0xf8, 0x3c, 0x0d, 0xf4, 0x61, 0xc4, 0xfd, 0x3b, 0x22, 0xff, 0x5f, 0x7b, 0xfa, 0xe1, 0xf8, 0xfb, 0x79, 0xa6, 0x01, 0x58, 0xe1, 0xfa, 0x66, 0x76, 0x01, 0xc8, 0x30, 0xfe, 0x8a, 0x83, 0xfe, 0x4b, 0x7e, 0x01, 0xa1, 0xc0, 0x04, 0x00, 0x14, 0xfc, 0xa3, 0x64, 0xfe, 0x2b, 0xf2, 0x07, 0x9c, 0xee, 0xfe, 0x03, 0x52, 0xfe, 0x30, 0xe0, 0xfc, 0xba, 0x29, 0x4d, 0x86, 0xbc, 0x42, 0x5f, 0x57, 0xfa, 0x2e, 0xfb, 0x09, 0xb1, 0xbf, 0xf6, 0x88, 0x84, 0xe0, 0x3e, 0x2b, 0xfc, 0xb1, 0xb3, 0x0b, 0x42, 0x62, 0xf5, 0x1a, 0x0a, 0xff, 0x69, 0xc3, 0xfe, 0x33, 0xd2, 0xfa, 0x19, 0x5f, 0x0b, 0x80, 0x8f, 0xf7, 0x55, 0xfc, 0xf6, 0x4f, 0xc4, 0xfc, 0x88, 0xca, 0xfd, 0x64, 0xa8, 0xfb, 0x21, 0x50, 0xf9, 0x94, 0x3e, 0x00, 0xf7, 0x7f, 0xfd, 0x6d, 0x9f, 0x00, 0xaa, 0x56, 0xfd, 0xac, 0x96, 0x02, 0x4e, 0xec, 0x00, 0x6c, 0x61, 0x03, 0xe0, 0x42, 0x00, 0x63, 0xd7, 0xfa, 0x97, 0xfe, 0x03, 0x30, 0xff, 0x00, 0xa8, 0x44, 0x00, 0xd8, 0xb1, 0xfd, 0xe8, 0x78, 0x4b, 0xf3, 0xfc, 0x40, 0xfb, 0xaa, 0xfc, 0x7d, 0xa3, 0x0c, 0x0d, 0xe9, 0xf5, 0x3e, 0x87, 0xde, 0xc7, 0xff, 0xf7, 0xae, 0x09, 0x0b, 0xa4, 0x2c, 0xf9, 0xeb, 0xa4, 0xff, 0xee, 0xca, 0xfd, 0xb5, 0xb4, 0xfc, 0xce, 0x7b, 0x0b, 0x1d, 0x8b, 0xf8, 0x55, 0x42, 0xf7, 0xb2, 0x07, 0xfc, 0x82, 0xe3, 0xfc, 0x97, 0x95, 0xfa, 0x23, 0x86, 0xf8, 0x79, 0x3e, 0x01, 0xe0, 0xcf, 0xfc, 0xc2, 0x42, 0x01, 0xfc, 0xe0, 0xff, 0x12, 0xf1, 0x01, 0x48, 0xb3, 0x00, 0x42, 0xe4, 0x03, 0xf2, 0x17, 0x03, 0x4b, 0x3e, 0xf9, 0x33, 0xc3, 0xfe, 0x7a, 0x43, 0x01, 0xe3, 0xbc, 0x02, 0xa2, 0xc7, 0xfe, 0xd5, 0xe8, 0x4b, 0xa3, 0x2f, 0x3c, 0x75, 0xee, 0xfe, 0x81, 0xf1, 0x0f, 0x4c, 0x30, 0xf3, 0x70, 0x1a, 0xde, 0x7c, 0xcb, 0xf5, 0x7d, 0x84, 0x08, 0x31, 0x1d, 0xff, 0xe9, 0xdd, 0xff, 0x5d, 0x00, 0xfa, 0xbe, 0x4b, 0x02, 0x00, 0x86, 0x0a, 0x5b, 0x1d, 0xf7, 0xdb, 0xed, 0xf9, 0xa3, 0x6c, 0xf9, 0xf4, 0xe5, 0xfa, 0xc4, 0x72, 0xfc, 0x98, 0x87, 0xf8, 0xf3, 0x65, 0xff, 0x48, 0x80, 0xff, 0x51, 0xbc, 0x02, 0x01, 0x9a, 0xfe, 0x99, 0x51, 0x01, 0x93, 0x3d, 0x03, 0x97, 0x28, 0x04, 0x7e, 0x10, 0x01, 0xc0, 0x21, 0xfc, 0x25, 0x17, 0xfc, 0x9c, 0x4d, 0xfd, 0x15, 0x6b, 0x04, 0xc3, 0x8e, 0x00, 0x88, 0xda, 0x4a, 0x77, 0xdf, 0x37, 0x5a, 0xa9, 0x00, 0xd5, 0x1b, 0x13, 0xde, 0x58, 0xf0, 0x1e, 0x0c, 0xdf, 0x3a, 0xec, 0xf3, 0x20, 0xb9, 0x06, 0x21, 0x45, 0x03, 0x60, 0xab, 0x00, 0x8b, 0xd4, 0xf7, 0x83, 0x22, 0x04, 0xf4, 0xd6, 0x0a, 0x03, 0xaa, 0xf6, 0xf9, 0xc4, 0xf9, 0x82, 0x9c, 0xf6, 0xf3, 0xb5, 0xfc, 0x5c, 0xec, 0xfc, 0x19, 0x6a, 0xf6, 0x96, 0xd0, 0x02, 0x41, 0x19, 0x00, 0x7b, 0x09, 0x00, 0x96, 0x71, 0x00, 0xc5, 0xcb, 0x01, 0xcb, 0x5d, 0x02, 0xcd, 0x31, 0x05, 0x98, 0xea, 0xff, 0xa5, 0x82, 0xfd, 0x6d, 0xb1, 0xfc, 0xaf, 0xc6, 0xf8, 0x89, 0x81, 0x03, 0x2a, 0x21, 0x02, 0x02, 0xfe, 0x46, 0xf1, 0x1c, 0x34, 0x6d, 0x71, 0x05, 0xb7, 0xbd, 0x13, 0x97, 0xa0, 0xec, 0x3c, 0x64, 0xe6, 0xc2, 0x7e, 0xef, 0x1b, 0x02, 0x01, 0x96, 0x92, 0x0d, 0x16, 0x79, 0xff, 0x9a, 0xf1, 0xf1, 0xad, 0x0d, 0x09, 0x7d, 0x12, 0x0a, 0x10, 0x4a, 0xf5, 0xae, 0x26, 0xfa, 0x0f, 0x16, 0xf6, 0x46, 0xe7, 0xfc, 0xfb, 0xc7, 0xfd, 0x05, 0xe9, 0xf7, 0x3d, 0xf9, 0x02, 0xe0, 0xec, 0xfe, 0x72, 0xa9, 0xff, 0xfe, 0xc6, 0x02, 0x0d, 0x31, 0x00, 0xb4, 0x1e, 0x01, 0x4d, 0x3c, 0x07, 0x7b, 0x36, 0x00, 0xb7, 0x2e, 0xfc, 0xbd, 0x6d, 0xfe, 0xf7, 0x1d, 0xf8, 0x87, 0x8e, 0xff, 0xf4, 0xd0, 0x02, 0xa7, 0x8a, 0x47, 0x30, 0x2f, 0x31, 0x6a, 0x7b, 0x04, 0x44, 0x43, 0x0f, 0x0c, 0x5a, 0xed, 0x92, 0xed, 0xed, 0x60, 0x3b, 0xed, 0xc0, 0x08, 0xff, 0x54, 0x1f, 0x11, 0x90, 0x87, 0xfe, 0x88, 0x64, 0xf1, 0x71, 0x84, 0x09, 0xf3, 0x15, 0x08, 0xe4, 0x11, 0xf6, 0x14, 0x24, 0xfb, 0xa5, 0xf7, 0xf3, 0x0a, 0xa0, 0xff, 0x33, 0xc4, 0xff, 0x7e, 0x51, 0xf7, 0xdc, 0x9e, 0x02, 0x9b, 0xad, 0xfe, 0xfa, 0xaa, 0x00, 0x13, 0x4c, 0x02, 0x08, 0x5b, 0xff, 0xb7, 0xbc, 0x01, 0x4f, 0x87, 0x07, 0xbe, 0x5d, 0x00, 0xe3, 0x4f, 0xfc, 0x8c, 0xb1, 0xfd, 0xb1, 0xde, 0xf8, 0x71, 0xa4, 0xfe, 0x54, 0x4c, 0x02, 0x17, 0x68, 0x4a, 0x88, 0xd7, 0x2d, 0x5f, 0x46, 0xfc, 0x63, 0x03, 0x11, 0xd8, 0xf2, 0xec, 0x23, 0xe1, 0xf0, 0x9e, 0x39, 0xf3, 0xaa, 0x05, 0xfa, 0xd3, 0xc3, 0x10, 0x99, 0x8f, 0x00, 0x96, 0x55, 0xf0, 0x08, 0x35, 0x08, 0x02, 0xf9, 0x07, 0x5f, 0xb5, 0xf5, 0x62, 0xdc, 0xfa, 0xf8, 0x52, 0xf7, 0xa5, 0xc3, 0xff, 0xe9, 0x1e, 0xff, 0x33, 0x0d, 0xf8, 0xd0, 0xf9, 0x02, 0x72, 0x6d, 0xff, 0x48, 0x93, 0xfe, 0x49, 0x54, 0x01, 0x76, 0x8b, 0x01, 0x09, 0x4c, 0x02, 0x24, 0x83, 0x05, 0x53, 0x91, 0x00, 0x52, 0x05, 0xfd, 0xff, 0xae, 0xfc, 0x12, 0xf6, 0xf9, 0x10, 0x25, 0xff, 0x80, 0xc5, 0x00, 0xf6, 0x47, 0x4a, 0x4e, 0x01, 0x29, 0x4f, 0xdf, 0xf6, 0x25, 0x59, 0x16, 0x4d, 0x92, 0xee, 0xd4, 0xb6, 0xef, 0x1c, 0x1e, 0xf6, 0xa5, 0xb5, 0xfc, 0x83, 0xc8, 0x0c, 0x93, 0x2f, 0xfe, 0xbd, 0x77, 0xf3, 0x66, 0x2d, 0x07, 0x4f, 0x78, 0x07, 0xd3, 0xf8, 0xf4, 0x5f, 0xea, 0xfc, 0x28, 0xb0, 0xf9, 0x15, 0x46, 0xff, 0x12, 0x72, 0xfe, 0x81, 0x80, 0xf8, 0x73, 0x31, 0x04, 0x15, 0x89, 0xfe, 0xb0, 0x68, 0xfd, 0xa3, 0x86, 0x01, 0xd5, 0x37, 0x02, 0x26, 0xa3, 0x02, 0x0f, 0xfd, 0x04, 0x03, 0xe0, 0xff, 0xef, 0x42, 0xfd, 0x6d, 0xd0, 0xfc, 0x35, 0xb8, 0xfa, 0xc0, 0x1e, 0x00, 0x11, 0x2b, 0x00, 0x68, 0xf3, 0x46, 0xdb, 0x32, 0x25, 0x35, 0x1b, 0xf4, 0x28, 0xa6, 0x1b, 0x6f, 0x99, 0xf0, 0x29, 0xc3, 0xec, 0x47, 0xf2, 0xfb, 0x76, 0xb6, 0xfc, 0xda, 0xfa, 0x06, 0x58, 0xc2, 0xff, 0xa7, 0x24, 0xf5, 0xf1, 0x85, 0x05, 0x0c, 0x75, 0x07, 0x2e, 0xc1, 0xf6, 0x0b, 0x5c, 0xfd, 0x61, 0x10, 0xfb, 0xa4, 0x37, 0xff, 0xbe, 0xf8, 0xfd, 0x66, 0x08, 0xfa, 0xff, 0xe5, 0x02, 0xa2, 0xf7, 0xfd, 0xb8, 0x6d, 0xfe, 0xa6, 0x48, 0x01, 0xa7, 0x3a, 0x01, 0xa6, 0x84, 0x03, 0x18, 0x4e, 0x05, 0xac, 0xaf, 0xfe, 0x64, 0x31, 0xfd, 0x3b, 0xa5, 0xfd, 0x63, 0x90, 0xfb, 0x94, 0x03, 0x00, 0x77, 0x55, 0x01, 0x00, 0xd8, 0x40, 0xf7, 0xf7, 0x21, 0xa5, 0x6b, 0xf7, 0xd7, 0xec, 0x1a, 0xe6, 0xa4, 0xf1, 0x31, 0xad, 0xf1, 0x88, 0x29, 0xfc, 0x0e, 0x1e, 0xf9, 0xff, 0x75, 0x07, 0x98, 0xfb, 0xff, 0xd2, 0x31, 0xf5, 0x31, 0xa8, 0x04, 0x01, 0x37, 0x08, 0xd9, 0xa8, 0xf8, 0x68, 0x24, 0xfd, 0x45, 0xa6, 0xfb, 0xd4, 0x66, 0xff, 0x9d, 0xd4, 0xfe, 0x00, 0xe3, 0xf9, 0x28, 0x8a, 0x01, 0x09, 0x95, 0xfe, 0x6d, 0xe3, 0xfe, 0x06, 0xa9, 0x00, 0x3e, 0x47, 0x01, 0xe7, 0x98, 0x03, 0x62, 0xbd, 0x04, 0xd8, 0xdb, 0xfe, 0x2b, 0xb0, 0xfc, 0x9e, 0x54, 0xfe, 0x47, 0x07, 0xfd, 0xe0, 0x57, 0xff, 0x95, 0x68, 0x01, 0xf4, 0xed, 0x38, 0x9e, 0x1d, 0x21, 0x65, 0x01, 0x01, 0x6b, 0x47, 0x11, 0x97, 0x00, 0xef, 0xad, 0x88, 0xf6, 0xab, 0x65, 0x00, 0x15, 0x2a, 0xff, 0x66, 0x1a, 0xff, 0x89, 0xc1, 0xfc, 0xb2, 0xc4, 0xf8, 0xd7, 0x47, 0x06, 0xe5, 0xb8, 0x04, 0xd6, 0x1a, 0xf8, 0xd9, 0xf3, 0x00, 0xc5, 0x46, 0xfb, 0x95, 0x40, 0xfe, 0x08, 0xbd, 0xff, 0x2f, 0x55, 0xfa, 0x58, 0x6b, 0x01, 0xc3, 0xc8, 0xfe, 0x18, 0x2b, 0xfd, 0x3b, 0x71, 0x01, 0xe4, 0xd9, 0x00, 0x61, 0x66, 0xfe, 0x7d, 0x4d, 0x03, 0xbb, 0x55, 0x01, 0x0f, 0x47, 0xff, 0x87, 0x7d, 0x00, 0xb8, 0x6d, 0xfc, 0x0d, 0xd7, 0xfe, 0x51, 0x3b, 0xff, 0x0e, 0xf7, 0x2f, 0xe1, 0xe2, 0x1f, 0x73, 0x95, 0x05, 0x14, 0x9b, 0x0d, 0xbd, 0x5e, 0xf3, 0x5d, 0x14, 0xfb, 0x04, 0x14, 0xfe, 0x43, 0xd3, 0xfd, 0x7c, 0x9f, 0x00, 0x2f, 0xb2, 0xfd, 0x35, 0x7c, 0xf8, 0x7e, 0x29, 0x05, 0x74, 0xae, 0x05, 0x7d, 0xc5, 0xf9, 0x5c, 0x55, 0x00, 0xbb, 0x12, 0xfc, 0xa4, 0xe2, 0xfe, 0x78, 0x91, 0xff, 0xcc, 0x45, 0xfb, 0x67, 0xea, 0x00, 0x63, 0xc8, 0xfe, 0x0e, 0xb0, 0xfd, 0xfb, 0x1e, 0x01, 0xaf, 0x97, 0x00, 0x69, 0x15, 0xff, 0x43, 0x52, 0x03, 0x4c, 0x40, 0x01, 0xfd, 0xdb, 0xff, 0x65, 0xa9, 0xff, 0xaa, 0xb7, 0xfc, 0xbd, 0x11, 0x00, 0xbd, 0xfb, 0xff, 0x31, 0x5a, 0x26, 0x09, 0xd8, 0x1f, 0x21, 0xbb, 0x09, 0x1a, 0x86, 0x09, 0x3b, 0xe3, 0xf7, 0x5c, 0xaa, 0xfd, 0xde, 0xc9, 0xfc, 0x93, 0xc4, 0xfc, 0xbb, 0x30, 0x01, 0x8c, 0x51, 0xfe, 0xf5, 0x27, 0xf9, 0xfd, 0x6f, 0x04, 0xae, 0xbd, 0x04, 0x9d, 0xa2, 0xfb, 0x8a, 0x16, 0x00, 0x0b, 0xc5, 0xfc, 0x40, 0xd4, 0xfe, 0x7c, 0x33, 0xff, 0xcb, 0x7d, 0xfc, 0x66, 0x91, 0x00, 0x00, 0x62, 0xfe, 0x46, 0xd8, 0xfd, 0x9a, 0x3a, 0x01, 0x1f, 0x31, 0x00, 0xdc, 0xb3, 0xff, 0xf3, 0x98, 0x02, 0xe4, 0xfa, 0x00, 0xb5, 0x8b, 0x00, 0x1b, 0x60, 0xff, 0x6e, 0x6e, 0xfd, 0xa8, 0xcd, 0x00, 0x3b, 0xc4, 0x00, 0x5d, 0x1a, 0x20, 0xf6, 0x22, 0x1e, 0xf7, 0x51, 0x0a, 0x86, 0xa8, 0x09, 0xe9, 0xea, 0xfa, 0x2b, 0xfe, 0xfc, 0x80, 0xdd, 0xfd, 0x3e, 0xbd, 0xfd, 0x6d, 0xbc, 0x00, 0x66, 0x1c, 0xfe, 0x47, 0xb9, 0xfa, 0xca, 0xdd, 0x03, 0x2a, 0x15, 0x04, 0xb9, 0x88, 0xfc, 0x48, 0x04, 0x00, 0x99, 0xca, 0xfd, 0x1f, 0x8a, 0xfe, 0x54, 0x7f, 0xff, 0x9d, 0x59, 0xfd, 0xa3, 0xde, 0xff, 0x31, 0x9d, 0xfe, 0xfb, 0xcd, 0xfe, 0x37, 0x82, 0x00, 0xee, 0xca, 0xff, 0x78, 0x78, 0x00, 0xa9, 0x25, 0x02, 0xbf, 0x7e, 0x01, 0xe4, 0xfa, 0x00, 0xab, 0x7c, 0xff, 0xcd, 0xf0, 0xfe, 0xe2, 0x64, 0x01, 0xbc, 0x08, 0x00, 0x69, 0x5b, 0x1c, 0x39, 0x35, 0x1b, 0x9a, 0xe4, 0x09, 0x64, 0xa7, 0x0a, 0xe9, 0x52, 0xfc, 0x2f, 0x3e, 0xfc, 0xa8, 0x4d, 0xff, 0x88, 0x33, 0xff, 0xb0, 0x85, 0xff, 0xae, 0x39, 0xfe, 0xcc, 0x6d, 0xfc, 0x5c, 0xf6, 0x02, 0xf3, 0x7f, 0x03, 0x0f, 0xe2, 0xfc, 0xa2, 0x66, 0x00, 0x67, 0xb8, 0xfe, 0xc8, 0x0f, 0xfe, 0x5e, 0x9e, 0xff, 0xa9, 0x54, 0xfe, 0xa2, 0xa0, 0xff, 0x67, 0xa5, 0xfe, 0x2d, 0x35, 0xff, 0x09, 0xd3, 0xff, 0x9b, 0x17, 0x00, 0x47, 0x21, 0x01, 0x7c, 0x36, 0x02, 0xec, 0x78, 0x02, 0xc8, 0xfb, 0x00, 0xac, 0x9e, 0xff, 0x16, 0xd8, 0xff, 0xb9, 0xd1, 0x00, 0x60, 0x1b, 0xff, 0xd2, 0xa9, 0x18, 0xec, 0x77, 0x18, 0x61, 0x6e, 0x0a, 0xd9, 0xe8, 0x0a, 0x07, 0x90, 0xfd, 0xb4, 0x80, 0xfc, 0x4f, 0xde, 0xff, 0xa2, 0x67, 0x00, 0xd8, 0x46, 0xff, 0x48, 0xc4, 0xfe, 0xd7, 0x33, 0xfd, 0x01, 0xe9, 0x01, 0x70, 0x79, 0x03, 0x4b, 0xf4, 0xfd, 0x77, 0x6b, 0x00, 0x5f, 0xe4, 0xfe, 0x93, 0x61, 0xfe, 0xc8, 0x6f, 0x00, 0x57, 0xfb, 0xfe, 0xaf, 0xc2, 0xfe, 0xa5, 0x46, 0xff, 0xf9, 0xdb, 0xff, 0xc6, 0x88, 0xff, 0xa4, 0x3e, 0x01, 0x71, 0xcc, 0x01, 0xe8, 0x99, 0x02, 0xc5, 0xdb, 0x02, 0x8e, 0x71, 0x00, 0xa2, 0x96, 0xff, 0x25, 0xc9, 0xff, 0xd7, 0x34, 0x00, 0xf7, 0xbc, 0xfe, 0x3b, 0x29, 0x15, 0x3c, 0xf7, 0x15, 0x95, 0x0f, 0x0b, 0x93, 0x00, 0x0b, 0x44, 0xbd, 0xfe, 0xfa, 0xb6, 0xfc, 0x4a, 0x1a, 0x00, 0x62, 0xca, 0x01, 0x2b, 0x42, 0xff, 0xcd, 0xe0, 0xfe, 0x76, 0xb2, 0xfd, 0xc5, 0x54, 0x01, 0x3b, 0x81, 0x03, 0xa1, 0x87, 0xfe, 0x7e, 0x8f, 0x00, 0x6a, 0x52, 0xff, 0xce, 0xec, 0xfe, 0x8e, 0xdd, 0x00, 0x60, 0xed, 0xfe, 0xa3, 0xe1, 0xfe, 0x64, 0x6c, 0x00, 0xff, 0x91, 0x00, 0x79, 0x3a, 0x00, 0xd8, 0xab, 0x01, 0x68, 0xce, 0x01, 0x6a, 0xea, 0x02, 0x2a, 0xf1, 0x01, 0xa6, 0x53, 0xff, 0xca, 0xcc, 0xff, 0x7a, 0x0e, 0x00, 0x2b, 0xd5, 0xff, 0x01, 0x79, 0xfe, 0x4f, 0x81, 0x12, 0x9a, 0x8d, 0x14, 0xe5, 0xda, 0x0a, 0x1c, 0xf9, 0x09, 0x48, 0x20, 0x00, 0xd9, 0x6d, 0xfd, 0x97, 0x60, 0x00, 0x5d, 0x56, 0x02, 0xf2, 0x51, 0xff, 0x4b, 0x7f, 0xff, 0x24, 0x23, 0xfe, 0x8c, 0x86, 0x00, 0x0e, 0x8a, 0x03, 0x89, 0xdc, 0xff, 0xcf, 0x53, 0x00, 0x42, 0x7c, 0xff, 0x82, 0xbb, 0xff, 0x64, 0xfc, 0x00, 0x5f, 0xba, 0xff, 0x11, 0x4b, 0x00, 0x37, 0x9e, 0x01, 0x6b, 0x6c, 0x00, 0x98, 0x2b, 0x00, 0x8d, 0x0a, 0x02, 0xdf, 0x54, 0x01, 0xd5, 0x8b, 0x01, 0xd0, 0x23, 0x01, 0x0a, 0xb4, 0xff, 0xed, 0x15, 0x00, 0xe7, 0xe7, 0xff, 0xd5, 0x48, 0xff, 0xf4, 0xab, 0xfe, 0x40, 0x8d, 0x0f, 0xa5, 0x58, 0x12, 0x58, 0xa3, 0x0b, 0xb9, 0x92, 0x0a, 0x40, 0x84, 0x00, 0x76, 0x5c, 0xfd, 0x89, 0xbd, 0x00, 0xf9, 0x60, 0x03, 0x1d, 0xb5, 0xff, 0xb1, 0x42, 0xff, 0xbd, 0x74, 0xfe, 0x86, 0xa9, 0x00, 0x59, 0x9e, 0x03, 0x6c, 0x61, 0x00, 0x83, 0x64, 0x00, 0xb2, 0xf9, 0xff, 0xff, 0x01, 0x01, 0x1a, 0x36, 0x02, 0x77, 0xe9, 0x00, 0xbf, 0xe3, 0x00, 0x62, 0xec, 0x00, 0xa1, 0x2f, 0x00, 0xcc, 0x01, 0x00, 0xfe, 0xcb, 0x00, 0x4a, 0xe5, 0x00, 0xd1, 0x49, 0x01, 0x04, 0xf4, 0x00, 0xb3, 0xc1, 0xff, 0x52, 0x25, 0x00, 0xba, 0xe0, 0xff, 0xe3, 0xf1, 0xfe, 0x01, 0xfa, 0xfe, 0x18, 0x39, 0x0e, 0x50, 0x74, 0x11, 0x33, 0x70, 0x0b, 0xc0, 0x1b, 0x09, 0xbf, 0xa9, 0x00, 0xbf, 0x47, 0xfe, 0x4a, 0x82, 0x01, 0xbf, 0x39, 0x03, 0xd2, 0xe2, 0xff, 0x8b, 0xc7, 0xff, 0xf0, 0xc4, 0xfe, 0xdd, 0xe2, 0x00, 0x03, 0xa4, 0x03, 0x07, 0xb1, 0x00, 0x7c, 0x52, 0x01, 0x1b, 0x36, 0x02, 0xd7, 0x3b, 0x02, 0x0f, 0xb4, 0x01, 0xa4, 0xb7, 0x00, 0xfc, 0xb9, 0x00, 0xa6, 0x9f, 0xff, 0x84, 0x23, 0xff, 0x57, 0x0f, 0x00, 0xbe, 0xbb, 0x00, 0xee, 0x99, 0x00, 0x3f, 0xcf, 0x00, 0xfc, 0x90, 0x00, 0x43, 0x1c, 0x00, 0xe7, 0x46, 0x00, 0x04, 0x45, 0xff, 0x11, 0xe7, 0xfe, 0xf7, 0xd9, 0xfe, 0xa3, 0xbe, 0x0c, 0x5b, 0x54, 0x10, 0x0a, 0xa8, 0x0b, 0xc6, 0xcc, 0x08, 0x09, 0x48, 0x00, 0x41, 0x92, 0xfe, 0x87, 0x92, 0x02, 0xd1, 0x9c, 0x03, 0x7a, 0xb7, 0xff, 0x1d, 0x6e, 0x00, 0x83, 0x34, 0xff, 0x48, 0xa4, 0x00, 0x3f, 0x33, 0x05, 0x28, 0xe4, 0x02, 0xa0, 0xff, 0x01, 0x9c, 0xe8, 0x01, 0xd7, 0x92, 0x01, 0x4c, 0x5d, 0x01, 0xfa, 0xc2, 0xff, 0x27, 0xe8, 0xfe, 0x74, 0x60, 0xff, 0xee, 0x02, 0x00, 0xf0, 0x8a, 0xff, 0xd3, 0x18, 0x00, 0x70, 0x8f, 0x00, 0x91, 0xb9, 0x00, 0x7f, 0x95, 0x00, 0x05, 0xdc, 0xff, 0xec, 0xdc, 0xff, 0x57, 0xf5, 0xfe, 0xc3, 0xbd, 0xfe, 0x7f, 0xca, 0xfe, 0x88, 0x2d, 0x0c, 0x79, 0x19, 0x10, 0x86, 0x5b, 0x0b, 0x16, 0x9f, 0x07, 0x1d, 0xfe, 0xff, 0x0a, 0x9d, 0xff, 0xf5, 0x6f, 0x03, 0x21, 0xfe, 0x03, 0x43, 0x4f, 0xff, 0xf8, 0x99, 0x00, 0x9b, 0x02, 0x02, 0x05, 0xea, 0x02, 0x18, 0xec, 0x04, 0x4d, 0xde, 0x01, 0xc3, 0xa7, 0x01, 0xbb, 0x5a, 0x01, 0x17, 0xea, 0xff, 0x55, 0xe4, 0xff, 0x5e, 0x84, 0xff, 0x47, 0xf2, 0xfe, 0x55, 0x5f, 0xff, 0xb3, 0x9c, 0xff, 0x92, 0x3c, 0xff, 0xc4, 0xc6, 0x00, 0xb6, 0x62, 0x00, 0x82, 0x83, 0xff, 0x3c, 0x60, 0x00, 0x84, 0x0a, 0x00, 0xb7, 0x28, 0xff, 0xc8, 0xc0, 0xfe, 0x97, 0xd4, 0xfe, 0x99, 0x5f, 0xfe, 0x15, 0xa1, 0x0c, 0x91, 0xd3, 0x10, 0x57, 0x46, 0x0a, 0xba, 0x24, 0x06, 0x92, 0x4c, 0x00, 0x01, 0x1d, 0x01, 0x61, 0x72, 0x03, 0x1b, 0xa1, 0x04, 0x58, 0x24, 0x02, 0xa3, 0x64, 0x02, 0x20, 0x8d, 0x02, 0xd1, 0x91, 0x01, 0x6a, 0x9b, 0x03, 0x85, 0x74, 0x01, 0xe5, 0xd1, 0xff, 0xca, 0xf6, 0xff, 0xfc, 0x12, 0x00, 0xcd, 0xc4, 0xff, 0xc2, 0xf5, 0xfe, 0x51, 0x93, 0xfe, 0xb1, 0x0a, 0x00, 0x27, 0x4f, 0x00, 0xa8, 0x19, 0xff, 0x8e, 0x00, 0x00, 0x1b, 0x7e, 0xff, 0xf6, 0x88, 0xff, 0x10, 0x7a, 0x00, 0xd2, 0xdb, 0xff, 0xdb, 0xbd, 0xfe, 0xeb, 0x66, 0xfe, 0x3e, 0xf4, 0xfe, 0x0e, 0x7d, 0xfe, 0x53, 0x38, 0x0d, 0x20, 0x75, 0x12, 0x97, 0xd4, 0x08, 0x44, 0xb9, 0x04, 0x82, 0x31, 0x00, 0xb8, 0x8b, 0x03, 0xd0, 0xe8, 0x07, 0x97, 0x76, 0x05, 0xdc, 0x4f, 0x01, 0x82, 0x66, 0x01, 0xb0, 0x18, 0x02, 0x09, 0x71, 0x00, 0xc3, 0x81, 0x01, 0x3f, 0x5f, 0x00, 0x90, 0x28, 0x00, 0xd2, 0xda, 0xff, 0x99, 0x2e, 0xff, 0xf7, 0x96, 0xff, 0x3e, 0x4f, 0xff, 0x5c, 0xf8, 0xff, 0xa1, 0x40, 0x00, 0x60, 0x38, 0xff, 0xdf, 0xa6, 0xfe, 0xba, 0xa0, 0xff, 0x8e, 0x85, 0xff, 0x68, 0x93, 0xff, 0x75, 0x79, 0x00, 0xe6, 0x80, 0xff, 0xbf, 0x51, 0xfe, 0x83, 0xc0, 0xfe, 0x03, 0x3e, 0xff, 0x31, 0xd7, 0xfe, 0x75, 0x67, 0x0d, 0xe3, 0x1b, 0x13, 0x8f, 0x9d, 0x07, 0x6d, 0x52, 0x04, 0x53, 0xf7, 0x04, 0x62, 0xd2, 0x06, 0xcd, 0x95, 0x06, 0x30, 0xf4, 0x03, 0x5c, 0xec, 0x00, 0xe7, 0x50, 0x00, 0xf6, 0xa5, 0x00, 0x65, 0xad, 0xff, 0xbc, 0x1f, 0x01, 0xc8, 0x01, 0x00, 0x2d, 0xd7, 0xff, 0x4a, 0xb8, 0xff, 0xa5, 0xef, 0xfe, 0xd7, 0x7b, 0x00, 0xd0, 0x99, 0x00, 0x2a, 0x2b, 0xff, 0xf6, 0x05, 0xff, 0xad, 0x64, 0xff, 0x28, 0xd9, 0xfe, 0xe8, 0xdf, 0xfe, 0x7e, 0x5e, 0xff, 0x6c, 0x22, 0x00, 0x54, 0xc5, 0xff, 0x3e, 0x4f, 0xff, 0x1a, 0x06, 0xff, 0xc3, 0x02, 0xff, 0xfd, 0x0a, 0xff, 0xf3, 0xc1, 0xfe, 0x22, 0x22, 0x0c, 0xe1, 0x67, 0x12, 0x8e, 0x92, 0x0b, 0x7b, 0xb5, 0x07, 0x30, 0xaa, 0x03, 0x9f, 0x00, 0x06, 0x35, 0xe3, 0x06, 0x46, 0xf1, 0x02, 0x1e, 0xc0, 0xff, 0xa3, 0xc2, 0xff, 0x5e, 0xc4, 0x00, 0xd1, 0xce, 0xff, 0xc0, 0x52, 0x00, 0x24, 0xda, 0xff, 0x6b, 0xf9, 0xff, 0x4a, 0x32, 0x00, 0xd7, 0x69, 0x00, 0x05, 0x7c, 0x00, 0xe5, 0x81, 0xff, 0xbf, 0x4f, 0xff, 0xda, 0x59, 0xff, 0x5f, 0x12, 0xff, 0xfc, 0x71, 0xfe, 0xe2, 0x10, 0xff, 0x90, 0x64, 0xff, 0xaa, 0xbe, 0xff, 0xd2, 0x28, 0x00, 0xc1, 0xd7, 0xff, 0x79, 0x62, 0xff, 0x8c, 0xdb, 0xfe, 0xfa, 0x96, 0xfe, 0xff, 0xc7, 0xfe, 0xca, 0x36, 0x0f, 0xcb, 0x19, 0x17, 0xac, 0x94, 0x09, 0x9e, 0x7f, 0x03, 0xae, 0x89, 0x04, 0xb0, 0x26, 0x06, 0xd3, 0x1e, 0x05, 0x58, 0x55, 0x02, 0xd4, 0x51, 0xff, 0x67, 0xc0, 0xff, 0x2e, 0xb3, 0x00, 0xf1, 0x02, 0x00, 0x17, 0xa1, 0x00, 0x7a, 0x5a, 0xff, 0x5b, 0x8d, 0x00, 0xbf, 0xee, 0x01, 0xa7, 0x57, 0x00, 0x68, 0xdc, 0xfe, 0x4e, 0xe8, 0xff, 0xed, 0xf5, 0xff, 0x60, 0xcf, 0xfe, 0x7c, 0x96, 0xfe, 0xee, 0xa0, 0xfe, 0xb3, 0x37, 0xff, 0xc9, 0x2f, 0xff, 0x40, 0x2a, 0x00, 0xd8, 0xa2, 0x00, 0xa7, 0x06, 0x00, 0x3f, 0xf2, 0xfe, 0xcd, 0x80, 0xfe, 0x2d, 0xc8, 0xfe, 0x10, 0x87, 0xfe, 0x49, 0x10, 0x10, 0xb0, 0xf5, 0x18, 0x58, 0x0b, 0x08, 0xa8, 0x10, 0x01, 0xe7, 0x83, 0x04, 0xc9, 0x76, 0x05, 0xc5, 0xb8, 0x04, 0x3f, 0x3f, 0x03, 0xf2, 0x05, 0x00, 0xc4, 0xf9, 0xfe, 0x4a, 0x4c, 0x01, 0xf3, 0x6f, 0x00, 0x4f, 0x49, 0x00, 0xbf, 0x65, 0x00, 0xf8, 0x4b, 0x01, 0x1a, 0xd1, 0x01, 0x29, 0xf4, 0xff, 0x9e, 0x9d, 0xff, 0x30, 0xe6, 0xff, 0xd7, 0xb3, 0xff, 0xc4, 0xd8, 0xfe, 0x69, 0xe9, 0xfe, 0xa6, 0xa1, 0xfe, 0x84, 0xb3, 0xfe, 0xb2, 0x96, 0xff, 0x9a, 0x52, 0x00, 0x82, 0xae, 0x00, 0xb1, 0xee, 0xff, 0x03, 0x3f, 0xff, 0x35, 0x7b, 0xfe, 0x45, 0x98, 0xfe, 0x23, 0xa7, 0xfe, 0x60, 0x15, 0x0c, 0xd4, 0x95, 0x16, 0x3d, 0x25, 0x0d, 0x06, 0x3c, 0x02, 0x6a, 0x1b, 0x01, 0x9f, 0x99, 0x03, 0xd6, 0x65, 0x05, 0x30, 0xfb, 0x04, 0xd5, 0x53, 0x00, 0xa5, 0x1e, 0xff, 0x1a, 0xb4, 0x01, 0x53, 0x7b, 0x01, 0x91, 0xf4, 0xff, 0x87, 0x38, 0x00, 0xaa, 0xf6, 0x01, 0x9c, 0x03, 0x02, 0xdc, 0xd6, 0x00, 0xfe, 0xac, 0xff, 0x28, 0xcf, 0xff, 0x8f, 0x2a, 0x00, 0x7c, 0x5e, 0xff, 0x0d, 0x9d, 0xfe, 0x44, 0xe0, 0xfe, 0x4e, 0x06, 0xff, 0x36, 0x0b, 0xff, 0x6d, 0x0f, 0x00, 0xe5, 0x92, 0x00, 0xe8, 0x34, 0x00, 0x4a, 0x62, 0xff, 0xcd, 0xef, 0xfe, 0x73, 0xbf, 0xfe, 0x2a, 0x93, 0xfe, 0x74, 0x12, 0x0a, 0x13, 0xe2, 0x13, 0xb9, 0xab, 0x0e, 0xa3, 0xb9, 0x04, 0x37, 0xa4, 0x00, 0xd7, 0x2b, 0x02, 0x30, 0x1a, 0x04, 0x0e, 0xe4, 0x04, 0x97, 0x2e, 0x01, 0xbd, 0x2d, 0xff, 0x2c, 0x8d, 0x01, 0x9a, 0x53, 0x02, 0x8b, 0x81, 0x00, 0xdb, 0x45, 0x00, 0x76, 0xb1, 0x01, 0x81, 0x7c, 0x01, 0xf3, 0xbb, 0x01, 0xc5, 0xab, 0x00, 0x51, 0x20, 0x00, 0x50, 0x3a, 0x00, 0x0d, 0x4d, 0xff, 0x7f, 0x46, 0xff, 0x3f, 0x69, 0xff, 0x97, 0xe8, 0xfe, 0x92, 0xd7, 0xfe, 0x6c, 0xf7, 0xff, 0x4c, 0x7b, 0x00, 0x20, 0xf5, 0xff, 0xf4, 0x2c, 0xff, 0xa7, 0x4e, 0xff, 0x81, 0x2f, 0xff, 0x85, 0xae, 0xfe, 0xdc, 0xf8, 0x09, 0xa7, 0x5d, 0x13, 0xdf, 0xd1, 0x0d, 0x2a, 0x5e, 0x05, 0x62, 0x5a, 0x01, 0x43, 0x69, 0x01, 0x05, 0xd0, 0x03, 0x52, 0xf3, 0x04, 0xdf, 0xb8, 0x00, 0xf2, 0x4a, 0xfe, 0xcd, 0x38, 0x01, 0x7b, 0xa9, 0x02, 0x00, 0xd6, 0x00, 0xb4, 0x36, 0x00, 0xe0, 0xba, 0x01, 0x6a, 0xb1, 0x01, 0xc2, 0x4f, 0x01, 0x91, 0xdb, 0x00, 0xad, 0xd6, 0x00, 0xbb, 0xb0, 0x00, 0xde, 0xbf, 0xff, 0xac, 0x8a, 0xff, 0x1e, 0x83, 0xff, 0x7d, 0x5d, 0xff, 0xc6, 0x96, 0xff, 0x67, 0x92, 0xff, 0x95, 0x19, 0x00, 0xaf, 0x4c, 0x00, 0xe1, 0x1d, 0xff, 0xfb, 0xd2, 0xfe, 0x3f, 0xf1, 0xfe, 0xd4, 0x2c, 0xff, 0xb9, 0x66, 0x0a, 0x62, 0x5d, 0x13, 0x45, 0x2a, 0x0d, 0x50, 0xbb, 0x05, 0xe2, 0xdf, 0x01, 0x94, 0xfa, 0x00, 0x94, 0x6c, 0x03, 0xc7, 0x15, 0x05, 0x4b, 0xd7, 0x00, 0xb3, 0x04, 0xfe, 0x1d, 0x91, 0x00, 0xfe, 0xfd, 0x01, 0x76, 0x67, 0x00, 0x15, 0x08, 0x00, 0x66, 0x9e, 0x01, 0xed, 0x57, 0x01, 0xe3, 0x32, 0x01, 0xb2, 0x92, 0x01, 0xd1, 0x90, 0x00, 0xa1, 0x3e, 0x00, 0x89, 0x7c, 0x00, 0x4d, 0x01, 0x00, 0xb6, 0xd5, 0xff, 0xaa, 0xd5, 0xff, 0xcd, 0xf5, 0xff, 0xb7, 0xe6, 0xff, 0x35, 0x3b, 0x00, 0x97, 0x2a, 0x00, 0x0c, 0x57, 0xff, 0x58, 0xaa, 0xfe, 0x93, 0x92, 0xfe, 0xff, 0xde, 0xfe, 0x3f, 0x57, 0x0b, 0x15, 0x39, 0x14, 0x9a, 0x8c, 0x0c, 0x4b, 0x90, 0x05, 0x5c, 0x11, 0x02, 0x57, 0xd7, 0x00, 0x3f, 0x8b, 0x03, 0x77, 0x32, 0x05, 0x5c, 0x89, 0x00, 0x53, 0xdb, 0xfd, 0xfe, 0x9a, 0x00, 0x55, 0xf0, 0x01, 0x2f, 0x49, 0x00, 0x8e, 0xf4, 0xfe, 0xc1, 0xc4, 0x00, 0x60, 0x18, 0x01, 0xe8, 0xb2, 0x00, 0x60, 0xa7, 0x01, 0x2f, 0x0c, 0x01, 0xe3, 0x3e, 0x00, 0xce, 0x14, 0x00, 0x14, 0xa1, 0xff, 0x94, 0x87, 0x00, 0xd6, 0x9c, 0x00, 0xbd, 0xed, 0xff, 0x6e, 0xbd, 0x00, 0x7c, 0xb3, 0x00, 0xbd, 0x31, 0x00, 0xbd, 0x9c, 0xff, 0xf3, 0xe7, 0xfe, 0xc6, 0x92, 0xfe, 0x32, 0x82, 0xfe, 0x9d, 0x1d, 0x0c, 0x5c, 0x8b, 0x15, 0x56, 0x63, 0x0c, 0x4d, 0xf9, 0x04, 0x02, 0x8e, 0x02, 0xcc, 0xaf, 0x00, 0xdd, 0x3a, 0x03, 0x27, 0x6e, 0x05, 0x84, 0x6d, 0x00, 0x39, 0xaf, 0xfd, 0x4a, 0x64, 0x00, 0xcd, 0xd3, 0x01, 0xdc, 0xa5, 0x00, 0xe8, 0xac, 0xfe, 0x74, 0xed, 0xff, 0x47, 0x87, 0x00, 0x0f, 0x7f, 0xff, 0xbd, 0xdc, 0x00, 0xde, 0xce, 0x01, 0x74, 0x32, 0x00, 0xa6, 0x98, 0xff, 0x6f, 0x95, 0xff, 0x4b, 0x1a, 0x00, 0x90, 0xb3, 0x00, 0x3b, 0x3a, 0x00, 0x5e, 0x15, 0x01, 0x59, 0x31, 0x01, 0x0b, 0x92, 0x00, 0x15, 0x3a, 0x00, 0xed, 0x24, 0xff, 0x26, 0x7c, 0xfe, 0x41, 0xc0, 0xfe, 0x86, 0x27, 0x0d, 0x98, 0x32, 0x17, 0xa7, 0x33, 0x0c, 0xd5, 0x7a, 0x04, 0xa2, 0xf6, 0x02, 0xa8, 0x4e, 0x00, 0x06, 0xfc, 0x02, 0x0f, 0xbf, 0x05, 0xac, 0x25, 0x00, 0x2c, 0x31, 0xfd, 0x07, 0x89, 0x00, 0xda, 0xc8, 0x01, 0xa9, 0x79, 0x00, 0x0c, 0xdd, 0xfe, 0xd0, 0x6e, 0xff, 0x6a, 0x3f, 0x00, 0x67, 0xfe, 0xfe, 0x0a, 0x7e, 0xff, 0x03, 0x95, 0x01, 0x2d, 0x3f, 0x00, 0x6a, 0x33, 0xff, 0x58, 0x65, 0xff, 0xf2, 0x9b, 0xff, 0x3e, 0x99, 0x00, 0xd9, 0x3a, 0x00, 0xe1, 0x9b, 0x00, 0x02, 0x81, 0x01, 0x32, 0x08, 0x01, 0xfa, 0x46, 0x00, 0x63, 0xe1, 0xff, 0xd0, 0x39, 0xff, 0xfe, 0x87, 0xfe, 0x80, 0x9e, 0x0e, 0x73, 0x3f, 0x19, 0xef, 0xee, 0x0b, 0xa0, 0xb3, 0x03, 0xac, 0x75, 0x03, 0x7a, 0x1b, 0x00, 0x82, 0xaa, 0x02, 0x3a, 0x10, 0x06, 0x6f, 0xf2, 0xff, 0x83, 0xc8, 0xfc, 0x8d, 0x97, 0x00, 0xc8, 0xc9, 0x01, 0x59, 0x44, 0x00, 0x2f, 0x2f, 0xff, 0xa5, 0x3f, 0xff, 0x32, 0xd2, 0xff, 0x38, 0xf6, 0xfe, 0x21, 0xbe, 0xfe, 0x05, 0x13, 0x01, 0x37, 0xa8, 0x00, 0x41, 0x8b, 0xfe, 0x3d, 0xa6, 0xfe, 0x6a, 0xb7, 0xff, 0xba, 0x59, 0x00, 0x3c, 0x12, 0x00, 0x45, 0x24, 0x00, 0x09, 0x77, 0x01, 0x18, 0x17, 0x01, 0xc3, 0x0f, 0x00, 0x27, 0x5e, 0x00, 0xe6, 0xbe, 0xff, 0x37, 0x22, 0xff, 0xa4, 0x57, 0x10, 0x0d, 0xa3, 0x1b, 0x6a, 0xa3, 0x0b, 0xee, 0xb0, 0x02, 0x6e, 0xe5, 0x03, 0x15, 0xe1, 0xff, 0xf6, 0x76, 0x02, 0xf0, 0x75, 0x06, 0x34, 0x48, 0xff, 0xec, 0x85, 0xfc, 0x99, 0xeb, 0x00, 0xaf, 0xb6, 0x01, 0xf2, 0xd3, 0xff, 0x1c, 0x1d, 0xff, 0x24, 0x9c, 0xff, 0x9b, 0x74, 0xff, 0x31, 0x9e, 0xfe, 0xbc, 0x82, 0xfe, 0xf5, 0x5e, 0x00, 0x40, 0x0b, 0x01, 0xd2, 0xd0, 0xfe, 0x6a, 0xb6, 0xfd, 0x5e, 0x63, 0xff, 0xd4, 0x26, 0x00, 0x32, 0xdb, 0xff, 0x79, 0x07, 0x00, 0x7c, 0xcb, 0x00, 0x51, 0xdb, 0x00, 0x32, 0x3b, 0x00, 0x15, 0x06, 0x00, 0x66, 0xd0, 0xff, 0xd0, 0x93, 0xff, 0xce, 0x89, 0x12, 0x92, 0x36, 0x1e, 0x9d, 0xfd, 0x0a, 0x3b, 0xc7, 0x01, 0xdf, 0x31, 0x04, 0x0b, 0x5f, 0xff, 0x28, 0x95, 0x02, 0x59, 0xe2, 0x06, 0xb6, 0x38, 0xfe, 0xe9, 0x38, 0xfc, 0xf0, 0x8a, 0x01, 0xcf, 0xaf, 0x01, 0x44, 0x33, 0xff, 0x6e, 0xe2, 0xfe, 0x9c, 0xd4, 0xff, 0x01, 0x38, 0xff, 0xa5, 0x2e, 0xfe, 0x82, 0x55, 0xfe, 0x4a, 0xf5, 0xff, 0xa9, 0xc8, 0x00, 0x6d, 0x6c, 0xff, 0xaf, 0x6c, 0xfd, 0x91, 0xe5, 0xfe, 0x5f, 0x3e, 0x00, 0xe1, 0x5c, 0xff, 0x97, 0xcc, 0xff, 0x70, 0x6b, 0x00, 0xbb, 0x31, 0x00, 0x27, 0x05, 0x00, 0x0d, 0xea, 0xff, 0x02, 0xc8, 0xff, 0xde, 0x4f, 0xff, 0x93, 0xb3, 0x14, 0x45, 0xee, 0x20, 0x90, 0x89, 0x0a, 0xc4, 0xc4, 0x00, 0xf5, 0x33, 0x04, 0xc6, 0xa1, 0xfe, 0x58, 0xcf, 0x02, 0xbf, 0x5d, 0x07, 0x90, 0xd4, 0xfc, 0x37, 0xbb, 0xfb, 0x7c, 0x50, 0x02, 0x05, 0xb1, 0x01, 0xdb, 0x64, 0xfe, 0x80, 0x79, 0xfe, 0xc1, 0x08, 0x00, 0xeb, 0xf3, 0xfe, 0xbb, 0x87, 0xfd, 0xff, 0xf2, 0xfd, 0xa9, 0xb5, 0xff, 0x68, 0x6c, 0x00, 0x65, 0x97, 0xff, 0x0e, 0xac, 0xfd, 0xb6, 0x53, 0xfe, 0xfe, 0x36, 0x00, 0x28, 0x78, 0xff, 0x74, 0x39, 0xff, 0x65, 0x44, 0x00, 0xf0, 0x41, 0xff, 0x1b, 0x59, 0xff, 0x3d, 0x0c, 0x00, 0xdb, 0x71, 0xff, 0xdf, 0x1c, 0xff, 0x4f, 0xe3, 0x16, 0xa9, 0xc2, 0x23, 0x97, 0x77, 0x0a, 0x9b, 0x23, 0x00, 0xbf, 0x1e, 0x04, 0x19, 0xe4, 0xfd, 0x7f, 0x5e, 0x03, 0x00, 0x32, 0x08, 0x3e, 0x70, 0xfb, 0xda, 0x5f, 0xfb, 0x7d, 0x6e, 0x03, 0x4a, 0xf5, 0x01, 0x6d, 0xdb, 0xfd, 0x15, 0x1a, 0xfe, 0x1f, 0x67, 0x00, 0x40, 0xff, 0xfe, 0x87, 0x23, 0xfd, 0xb2, 0xa9, 0xfd, 0x8f, 0x66, 0xff, 0xad, 0x5e, 0x00, 0x64, 0xd8, 0xff, 0x78, 0x26, 0xfe, 0xde, 0x7b, 0xfe, 0x25, 0xbe, 0xff, 0x9b, 0x16, 0x00, 0xf8, 0x72, 0xff, 0xe6, 0xcb, 0xff, 0x62, 0x48, 0xff, 0x1c, 0x8c, 0xfe, 0x3c, 0xcd, 0xff, 0x1b, 0xa6, 0xff, 0x92, 0xf8, 0xfe, 0x1f, 0x79, 0x18, 0x4c, 0x70, 0x26, 0x8c, 0x4d, 0x0b, 0x7d, 0x5f, 0xff, 0xb0, 0xc7, 0x03, 0xaf, 0xf3, 0xfc, 0x35, 0x70, 0x03, 0xf1, 0x43, 0x09, 0x66, 0x17, 0xfa, 0x3a, 0x7b, 0xfa, 0xb1, 0x6d, 0x04, 0xdf, 0x62, 0x02, 0x71, 0x33, 0xfd, 0x06, 0x8d, 0xfd, 0x0c, 0x7c, 0x00, 0x79, 0x04, 0xff, 0xc6, 0xce, 0xfc, 0x74, 0x27, 0xfd, 0xae, 0xc0, 0xfe, 0xb1, 0x31, 0x00, 0x5b, 0x01, 0x00, 0xfa, 0x1e, 0xfe, 0x8f, 0x13, 0xff, 0x57, 0x73, 0xff, 0x02, 0xc1, 0xff, 0x4b, 0x3b, 0x00, 0x45, 0x59, 0xff, 0x92, 0xd5, 0xfe, 0xc8, 0xa2, 0xfe, 0x36, 0xe4, 0xfe, 0x2d, 0x62, 0xff, 0xfd, 0x30, 0xff, 0x27, 0xd6, 0x19, 0x30, 0x2f, 0x29, 0x2b, 0x71, 0x0c, 0xa8, 0xb6, 0xfe, 0xd8, 0x6c, 0x03, 0x79, 0x71, 0xfc, 0x36, 0x26, 0x03, 0xa5, 0xe3, 0x09, 0xe4, 0x75, 0xf9, 0x81, 0x8a, 0xf9, 0x84, 0x19, 0x05, 0x8d, 0x13, 0x03, 0x63, 0xcc, 0xfc, 0x4d, 0xeb, 0xfc, 0x99, 0x98, 0x00, 0x5d, 0x03, 0xff, 0xc4, 0x90, 0xfc, 0x74, 0x04, 0xfd, 0x12, 0xdd, 0xfd, 0xa9, 0xb9, 0xff, 0x62, 0xbd, 0x00, 0x30, 0xcd, 0xfd, 0x72, 0x39, 0xff, 0x5e, 0x56, 0x00, 0x0d, 0x0a, 0xff, 0x4d, 0x80, 0x00, 0xa2, 0xf8, 0xff, 0x8c, 0x28, 0xfe, 0x06, 0x60, 0xfe, 0x16, 0xf7, 0xfe, 0x0f, 0xab, 0xfe, 0xe5, 0x80, 0xff, 0x83, 0xb9, 0x1a, 0x56, 0xd7, 0x2b, 0x78, 0x31, 0x0e, 0xbe, 0xb8, 0xfd, 0x9d, 0x67, 0x03, 0xdc, 0x8b, 0xfc, 0xd5, 0x44, 0x02, 0x31, 0xb9, 0x09, 0xd4, 0xa3, 0xf9, 0xeb, 0xed, 0xf8, 0x66, 0xfa, 0x04, 0x07, 0xd1, 0x03, 0xb8, 0xb8, 0xfc, 0x0d, 0x7c, 0xfc, 0xcf, 0x68, 0x00, 0x90, 0x00, 0xff, 0x2d, 0x35, 0xfc, 0x78, 0x0d, 0xfd, 0xaa, 0x76, 0xfd, 0xdd, 0x61, 0xfe, 0xad, 0x2c, 0x01, 0xdc, 0xa6, 0xfe, 0xca, 0x75, 0xfe, 0xd5, 0x1e, 0x01, 0x4e, 0x59, 0xff, 0x3d, 0xbb, 0xff, 0x6a, 0xe4, 0x00, 0x14, 0x43, 0xfe, 0xc2, 0x6b, 0xfd, 0xdf, 0xfc, 0xfe, 0x64, 0x7a, 0xfe, 0xe6, 0x57, 0xff, 0x63, 0x8a, 0x1c, 0xef, 0x0e, 0x2e, 0xc8, 0x7a, 0x0e, 0x84, 0xc6, 0xfd, 0xea, 0xa2, 0x03, 0xaa, 0x36, 0xfc, 0x15, 0xa6, 0x01, 0x53, 0xed, 0x08, 0x32, 0xb8, 0xf9, 0xcb, 0xd8, 0xf8, 0xe9, 0x8f, 0x04, 0x34, 0x27, 0x04, 0xec, 0xbc, 0xfc, 0x72, 0x3c, 0xfc, 0x15, 0x30, 0x00, 0x6e, 0xed, 0xfe, 0xb0, 0x92, 0xfb, 0xbe, 0x1b, 0xfd, 0x4d, 0x63, 0xfd, 0xfd, 0x3d, 0xfd, 0xef, 0x80, 0x00, 0x5f, 0xeb, 0xff, 0x9c, 0x7b, 0xfe, 0xf6, 0x93, 0x00, 0xfa, 0x9a, 0x00, 0xf4, 0x0b, 0xff, 0x06, 0xc4, 0x00, 0x0d, 0x49, 0xff, 0x16, 0xc4, 0xfc, 0xc8, 0x39, 0xfe, 0x42, 0xa8, 0xfe, 0x84, 0xf2, 0xfe, 0x36, 0x2d, 0x20, 0xe3, 0x81, 0x2f, 0xd3, 0x67, 0x0c, 0x3a, 0x48, 0xff, 0xad, 0xe2, 0x04, 0x6f, 0x03, 0xfb, 0x61, 0xef, 0x00, 0x08, 0xca, 0x08, 0xde, 0xf8, 0xf8, 0x64, 0x8a, 0xf9, 0x5b, 0x0d, 0x04, 0xb4, 0x49, 0x04, 0x38, 0x03, 0xfd, 0x67, 0xbc, 0xfb, 0xc8, 0x7e, 0x00, 0x28, 0x8a, 0xfe, 0xb1, 0x77, 0xfb, 0xf6, 0x9b, 0xfc, 0xd4, 0x90, 0xfd, 0x21, 0xdf, 0xfc, 0xfc, 0x45, 0xff, 0x87, 0x79, 0x00, 0x93, 0xe2, 0xff, 0x9a, 0xd3, 0xff, 0xa7, 0xf7, 0x00, 0x3c, 0xe1, 0xff, 0x38, 0xd5, 0xff, 0x49, 0xf1, 0xff, 0xb7, 0x52, 0xfd, 0xa4, 0x27, 0xfd, 0x68, 0x6e, 0xfe, 0x15, 0x1d, 0xff, 0x4b, 0x51, 0x24, 0xe0, 0xfa, 0x2f, 0x12, 0xbe, 0x08, 0x6d, 0x0c, 0x03, 0xe9, 0xfe, 0x06, 0xdb, 0xc0, 0xf7, 0xbf, 0x5d, 0x00, 0xf9, 0xd2, 0x09, 0x9f, 0xa8, 0xf7, 0x5c, 0xab, 0xf9, 0x17, 0xe5, 0x03, 0x21, 0x1e, 0x04, 0xd2, 0x63, 0xfd, 0x3b, 0x0c, 0xfb, 0xed, 0xc4, 0x00, 0x20, 0x01, 0xfe, 0x89, 0x9b, 0xfb, 0xfd, 0x1d, 0xfc, 0xa5, 0x37, 0xfd, 0xfd, 0xf7, 0xfc, 0x7b, 0x58, 0xfe, 0x8c, 0xcf, 0xff, 0xf4, 0x55, 0x01, 0x14, 0x69, 0x00, 0xf0, 0x17, 0x00, 0x8e, 0xdc, 0x00, 0x81, 0x83, 0xff, 0x66, 0xbb, 0xff, 0xd2, 0x2c, 0xfe, 0x5f, 0xdd, 0xfc, 0xc1, 0x7f, 0xfd, 0x95, 0x25, 0xff, 0xcd, 0xa3, 0x27, 0x8e, 0x44, 0x2f, 0xee, 0x53, 0x05, 0x80, 0x96, 0x09, 0xd0, 0xbb, 0x08, 0x4d, 0x32, 0xf2, 0xed, 0x19, 0x01, 0x6b, 0x33, 0x0c, 0xd3, 0x5d, 0xf5, 0xfb, 0xad, 0xf8, 0x4e, 0xf9, 0x04, 0x70, 0xba, 0x03, 0xde, 0x1b, 0xfd, 0x84, 0xcf, 0xfa, 0x30, 0x00, 0x01, 0x90, 0x47, 0xfd, 0xd0, 0x95, 0xfb, 0x81, 0x1a, 0xfc, 0xb3, 0xad, 0xfc, 0x5d, 0xe4, 0xfc, 0x52, 0xe8, 0xfd, 0xc0, 0xd3, 0xfe, 0x05, 0xce, 0x01, 0x7f, 0xb6, 0x01, 0x89, 0x9a, 0xff, 0x6c, 0x2c, 0x01, 0x33, 0xb7, 0xff, 0x3d, 0x4f, 0xff, 0x35, 0x85, 0xfe, 0x7b, 0x74, 0xfd, 0xe9, 0xf9, 0xfc, 0xdd, 0x3d, 0xfe, 0xbd, 0x35, 0x2a, 0x86, 0x5a, 0x2d, 0x29, 0x61, 0x03, 0x10, 0xca, 0x11, 0xde, 0x0b, 0x09, 0xbe, 0x21, 0xec, 0xd2, 0xb7, 0x03, 0x7a, 0xd7, 0x0e, 0x96, 0xf3, 0xf1, 0x7b, 0x9f, 0xf7, 0x62, 0x31, 0x07, 0xf0, 0x19, 0x03, 0xe2, 0x01, 0xfc, 0x36, 0x7a, 0xfb, 0xa0, 0x43, 0x01, 0x1f, 0x56, 0xfc, 0x8c, 0x85, 0xfb, 0x4a, 0x98, 0xfc, 0xda, 0x4f, 0xfc, 0x37, 0x76, 0xfc, 0x03, 0x07, 0xfe, 0xbb, 0x34, 0xfe, 0x2d, 0x63, 0x01, 0x79, 0x8c, 0x02, 0xab, 0x28, 0x00, 0xfa, 0x91, 0x01, 0xfb, 0xe2, 0xff, 0x92, 0x0d, 0xff, 0x7c, 0x7a, 0xfe, 0x7b, 0x8a, 0xfe, 0xdb, 0x14, 0xfd, 0x0c, 0x79, 0xfd, 0x3e, 0xb5, 0x30, 0x55, 0x31, 0x2e, 0x81, 0x4c, 0xfc, 0x4b, 0xa2, 0x12, 0x91, 0x0f, 0x0d, 0x3d, 0x0b, 0xec, 0xbf, 0xfb, 0x01, 0x87, 0x13, 0x0e, 0x83, 0x21, 0xf1, 0x07, 0x22, 0xf8, 0xae, 0x0c, 0x08, 0xf0, 0xc9, 0x01, 0x0b, 0xcb, 0xfa, 0x3c, 0x52, 0xfc, 0x3a, 0x32, 0x01, 0x74, 0x08, 0xfb, 0x96, 0x84, 0xfb, 0x97, 0x6b, 0xfc, 0xb6, 0x9f, 0xfc, 0x20, 0xf5, 0xfb, 0x6f, 0x21, 0xfe, 0xbe, 0x1a, 0xfe, 0x8b, 0x56, 0x00, 0xf4, 0x4e, 0x03, 0x37, 0xcc, 0x00, 0x49, 0x3e, 0x01, 0x8e, 0x19, 0x00, 0x52, 0x5e, 0xff, 0x21, 0x10, 0xfe, 0x2e, 0xd3, 0xfe, 0xc2, 0x55, 0xfd, 0x0f, 0xd4, 0xfd, 0xab, 0x1a, 0x37, 0x77, 0xa7, 0x2f, 0x0b, 0x91, 0xf5, 0x12, 0x88, 0x11, 0x30, 0xea, 0x10, 0x03, 0x2c, 0xee, 0x12, 0x5a, 0xff, 0xb8, 0xf8, 0x0c, 0xb1, 0x17, 0xf1, 0xdc, 0x94, 0xf8, 0x5d, 0xa1, 0x08, 0x3c, 0xde, 0x00, 0x9e, 0x9a, 0xf9, 0x8e, 0xcc, 0xfc, 0x64, 0x60, 0x01, 0x80, 0x88, 0xf9, 0xfc, 0xd9, 0xfb, 0x5e, 0xf0, 0xfb, 0x8d, 0x4d, 0xfd, 0xc7, 0xcd, 0xfb, 0x7a, 0xd3, 0xfd, 0x1f, 0xed, 0xfe, 0x6f, 0xfb, 0xfe, 0x90, 0x4c, 0x03, 0x62, 0xe1, 0x01, 0x62, 0x33, 0x01, 0xbc, 0xe1, 0xff, 0x39, 0xe2, 0xff, 0xda, 0x32, 0xfe, 0xa5, 0xdc, 0xfe, 0xef, 0x9d, 0xfd, 0xd7, 0xa6, 0xfe, 0x97, 0x87, 0x3c, 0x2a, 0x7e, 0x32, 0x08, 0x5f, 0xef, 0x56, 0xb2, 0x0e, 0xac, 0xe9, 0x13, 0xf5, 0x36, 0xf2, 0xe2, 0x6c, 0xfc, 0xf5, 0x4d, 0x0b, 0xa0, 0xd4, 0xf1, 0xa7, 0xcf, 0xf8, 0x48, 0xd9, 0x08, 0x07, 0x18, 0x00, 0xd6, 0x15, 0xf9, 0xb0, 0x4b, 0xfc, 0x03, 0xb7, 0x01, 0x48, 0x47, 0xf8, 0x1c, 0xe7, 0xfb, 0x72, 0xa4, 0xfb, 0xd6, 0xd0, 0xfd, 0xe2, 0x54, 0xfc, 0xd3, 0xfb, 0xfc, 0x73, 0xff, 0xff, 0xf8, 0x44, 0xfe, 0x15, 0x52, 0x02, 0x83, 0xa7, 0x02, 0xae, 0xe4, 0x01, 0x9f, 0x37, 0xff, 0x22, 0x5f, 0x00, 0x05, 0xd3, 0xfe, 0x7c, 0x6a, 0xfe, 0x27, 0x73, 0xfe, 0x52, 0xf4, 0xfe, 0x83, 0xdf, 0x42, 0x54, 0x24, 0x34, 0xc8, 0x13, 0xea, 0xf1, 0xcf, 0x0b, 0xb6, 0xa1, 0x14, 0xee, 0xbc, 0xf6, 0x4c, 0xdf, 0xfa, 0x57, 0xc4, 0x08, 0x0c, 0x70, 0xf2, 0x27, 0xea, 0xf9, 0x5d, 0x48, 0x08, 0x27, 0x25, 0xff, 0xb3, 0x5f, 0xf9, 0xe1, 0x0c, 0xfb, 0x7c, 0xac, 0x01, 0xa8, 0x9d, 0xf7, 0x44, 0x7a, 0xfb, 0xf7, 0xd0, 0xfb, 0xea, 0x0f, 0xfe, 0xb0, 0x07, 0xfd, 0xea, 0x81, 0xfc, 0xb3, 0x43, 0x00, 0x69, 0xd9, 0xfe, 0xa1, 0xb4, 0x00, 0xac, 0xe8, 0x02, 0x64, 0xda, 0x02, 0xaf, 0x7d, 0xfe, 0xd2, 0xe5, 0x00, 0xbf, 0x5f, 0xff, 0x03, 0xf2, 0xfd, 0xc0, 0x73, 0xff, 0x5b, 0xcc, 0xfe, 0xba, 0x34, 0x48, 0xf7, 0xcc, 0x36, 0xa9, 0x37, 0xe5, 0xe0, 0x21, 0x09, 0xbf, 0xc5, 0x13, 0x2d, 0xd2, 0xfa, 0xa3, 0xcf, 0xfa, 0xd4, 0xd1, 0x05, 0x78, 0x67, 0xf3, 0x19, 0xfa, 0xfa, 0xc9, 0x67, 0x07, 0x6a, 0x18, 0xfe, 0x2b, 0x68, 0xfa, 0x71, 0x29, 0xf9, 0xd8, 0x53, 0x01, 0x18, 0x84, 0xf7, 0x50, 0xcc, 0xfa, 0x4b, 0x7f, 0xfc, 0x90, 0xfe, 0xfd, 0x43, 0xa1, 0xfd, 0xbd, 0x86, 0xfc, 0xaa, 0x06, 0x00, 0x3b, 0xc9, 0xff, 0x09, 0xc5, 0xff, 0x8d, 0x0f, 0x02, 0xa2, 0x27, 0x04, 0x67, 0xfe, 0xfd, 0x3f, 0xca, 0x00, 0x9b, 0x16, 0x00, 0xe8, 0xa6, 0xfd, 0xdf, 0xe9, 0xff, 0x29, 0xec, 0xfe, 0xd9, 0xd0, 0x4c, 0x60, 0xfa, 0x39, 0xde, 0x0a, 0xe1, 0x16, 0x23, 0x07, 0x25, 0x8c, 0x11, 0x7a, 0x8b, 0xfd, 0x87, 0x44, 0xfc, 0x03, 0xef, 0x02, 0xdb, 0xab, 0xf4, 0x2d, 0x8c, 0xfb, 0x82, 0x9a, 0x06, 0xd4, 0x34, 0xfd, 0xfa, 0x54, 0xfb, 0x32, 0x93, 0xf7, 0x4a, 0x9f, 0x00, 0x86, 0xc3, 0xf7, 0x43, 0x88, 0xfa, 0xcd, 0x27, 0xfd, 0xfe, 0xb7, 0xfd, 0xa1, 0x46, 0xfe, 0x70, 0xcc, 0xfc, 0x1a, 0xa9, 0xff, 0x9d, 0xa0, 0x00, 0x21, 0xe9, 0xff, 0x22, 0x88, 0x00, 0xdb, 0x7b, 0x05, 0x20, 0xc0, 0xfd, 0xc0, 0xb5, 0xff, 0xc7, 0x08, 0x01, 0xb6, 0x90, 0xfd, 0x6d, 0xe1, 0xff, 0x63, 0xba, 0xff, 0x57, 0x7e, 0x52, 0xcb, 0xe7, 0x3a, 0x39, 0x39, 0xde, 0xd4, 0x66, 0x06, 0xe4, 0xfe, 0x0d, 0xa9, 0xd0, 0xfe, 0xe4, 0x45, 0xfe, 0xd9, 0x3a, 0x01, 0xf2, 0x50, 0xf5, 0x8b, 0x11, 0xfc, 0xa0, 0xcd, 0x05, 0x6d, 0x7e, 0xfc, 0xf5, 0xc0, 0xfb, 0x27, 0xbf, 0xf6, 0x9a, 0xa3, 0xff, 0x40, 0x31, 0xf8, 0x88, 0x09, 0xfb, 0x54, 0x06, 0xfd, 0x47, 0x9d, 0xfd, 0x62, 0x04, 0xff, 0xa4, 0xed, 0xfc, 0xdf, 0xb7, 0xff, 0x90, 0xe8, 0x00, 0xa0, 0xf2, 0x00, 0x26, 0x81, 0xff, 0xf3, 0x82, 0x05, 0x85, 0xef, 0xfd, 0x84, 0x17, 0xfe, 0xb0, 0x51, 0x01, 0xbd, 0xe0, 0xfd, 0x39, 0x58, 0x00, 0x93, 0x45, 0x00, 0xf0, 0x8a, 0x56, 0xda, 0x8f, 0x3c, 0x62, 0x04, 0xdd, 0xb1, 0x5e, 0x05, 0x41, 0xf8, 0x09, 0xba, 0xa2, 0xfe, 0xf5, 0x4c, 0x00, 0x83, 0xa5, 0x00, 0xdd, 0x5b, 0xf5, 0x22, 0x34, 0xfc, 0x22, 0x19, 0x05, 0xdf, 0x50, 0xfb, 0xe5, 0xb5, 0xfc, 0x62, 0x1a, 0xf6, 0x87, 0x88, 0xfe, 0x86, 0x4d, 0xf9, 0xf2, 0x39, 0xfb, 0x06, 0x6c, 0xfc, 0x1f, 0x9e, 0xfd, 0x48, 0xcb, 0xff, 0xdc, 0xef, 0xfc, 0xd3, 0xdf, 0xff, 0x8c, 0x0d, 0x01, 0xfa, 0x8a, 0x02, 0x09, 0x83, 0xfe, 0x3a, 0x30, 0x04, 0xa0, 0xc1, 0xfe, 0x7b, 0x43, 0xfc, 0x6c, 0x57, 0x00, 0xa4, 0x40, 0xff, 0xd8, 0xf1, 0x00, 0x58, 0x67, 0x00, 0x52, 0x4c, 0x59, 0xeb, 0x4a, 0x3e, 0x35, 0x91, 0xdd, 0xc9, 0xb6, 0x04, 0x60, 0x26, 0x05, 0x5c, 0xb3, 0xfd, 0x3c, 0x75, 0x02, 0x8c, 0x69, 0x00, 0x84, 0x3f, 0xf5, 0xe5, 0x7c, 0xfc, 0xe3, 0xdb, 0x03, 0x36, 0x3a, 0xfa, 0x95, 0xa3, 0xfe, 0x77, 0x9c, 0xf5, 0x23, 0xa6, 0xfd, 0x60, 0x86, 0xfa, 0x7f, 0x31, 0xfb, 0x5a, 0xa1, 0xfb, 0x72, 0xb7, 0xfd, 0x61, 0xdc, 0x00, 0xe7, 0x65, 0xfc, 0x8c, 0xbe, 0x00, 0x58, 0x84, 0x01, 0xc4, 0xf9, 0x02, 0xc9, 0x0e, 0xfe, 0x96, 0x85, 0x02, 0x5c, 0x27, 0xff, 0xf0, 0x51, 0xfb, 0xc0, 0x5f, 0xff, 0xd7, 0xc3, 0xff, 0x48, 0x04, 0x02, 0x01, 0xac, 0x01, 0x5b, 0x1e, 0x5b, 0x54, 0x4a, 0x3f, 0xf9, 0xe7, 0xdf, 0x63, 0xb7, 0x04, 0x6d, 0x05, 0xff, 0x69, 0xb9, 0xfc, 0x16, 0x0d, 0x04, 0xb5, 0x10, 0x00, 0x19, 0x2f, 0xf5, 0xac, 0xaa, 0xfc, 0xf3, 0x28, 0x02, 0x91, 0x8e, 0xf9, 0xf8, 0x85, 0x01, 0xdf, 0x03, 0xf5, 0xaf, 0xcf, 0xfc, 0xb5, 0xa6, 0xfb, 0x8d, 0x9c, 0xfa, 0x7b, 0x29, 0xfb, 0x60, 0x20, 0xfe, 0x1b, 0xf7, 0x00, 0xd5, 0xde, 0xfc, 0x52, 0xbf, 0x01, 0xa2, 0x81, 0x00, 0x4a, 0x3d, 0x03, 0x01, 0x14, 0xfe, 0x0e, 0x6c, 0x00, 0x00, 0x70, 0xff, 0xe0, 0x0e, 0xfc, 0x37, 0xfe, 0xfd, 0x3c, 0x25, 0xff, 0xbb, 0x01, 0x04, 0xd1, 0x7b, 0x02, 0xa0, 0xc8, 0x5b, 0x5d, 0xef, 0x3f, 0x95, 0x94, 0xe3, 0x37, 0xd4, 0x04, 0xc2, 0x52, 0xf8, 0x51, 0x72, 0xfb, 0x55, 0xfc, 0x04, 0xa5, 0x84, 0xff, 0x2e, 0xc7, 0xf4, 0xc3, 0xc7, 0xfc, 0xb8, 0x8d, 0x00, 0x1a, 0xa9, 0xf9, 0x58, 0xa4, 0x04, 0x28, 0x30, 0xf4, 0x21, 0x3a, 0xfc, 0xba, 0xce, 0xfb, 0x41, 0x40, 0xfa, 0x24, 0x5f, 0xfb, 0x67, 0x81, 0xfd, 0xce, 0x37, 0x02, 0x78, 0xa9, 0xfc, 0x44, 0x42, 0x01, 0x41, 0xf7, 0xff, 0x4c, 0xfe, 0x02, 0x55, 0xb1, 0xfd, 0xbc, 0x96, 0xff, 0xf8, 0x12, 0x00, 0xf8, 0xcd, 0xfb, 0xe2, 0xbf, 0xfe, 0xff, 0x54, 0xfe, 0x11, 0x7f, 0x02, 0xa7, 0x21, 0x04, 0x4f, 0x3b, 0x5a, 0x72, 0x50, 0x41, 0xa2, 0xbc, 0xe8, 0x4b, 0x4e, 0x05, 0x73, 0x85, 0xf2, 0x10, 0x56, 0xf9, 0x49, 0x84, 0x05, 0xbf, 0x0a, 0xff, 0xef, 0x40, 0xf4, 0x73, 0x5d, 0xfd, 0x9b, 0x35, 0x00, 0x94, 0xbd, 0xf9, 0x37, 0xde, 0x07, 0x92, 0x10, 0xf4, 0xf4, 0xac, 0xfa, 0xa8, 0xba, 0xfc, 0xf4, 0xd4, 0xf9, 0xcc, 0x23, 0xfc, 0x17, 0xe3, 0xfd, 0x0a, 0x73, 0x01, 0xda, 0x1f, 0xfc, 0x1c, 0x95, 0x01, 0x38, 0xa3, 0xfe, 0x9f, 0xad, 0x02, 0xb8, 0x03, 0xff, 0x06, 0xd3, 0xfe, 0x80, 0x4b, 0x00, 0x79, 0x78, 0xfd, 0xbc, 0x2d, 0xff, 0x74, 0xc7, 0xfc, 0x4e, 0xb9, 0x00, 0x20, 0x4e, 0x05, 0x9e, 0x18, 0x5a, 0x42, 0x69, 0x3f, 0x17, 0x0b, 0xef, 0xf1, 0x68, 0x05, 0x3b, 0x6b, 0xed, 0x0b, 0x56, 0xf6, 0x6d, 0x19, 0x05, 0x3e, 0xd6, 0xfe, 0x42, 0x47, 0xf3, 0xc1, 0xa3, 0xff, 0x88, 0xff, 0xfe, 0xb6, 0xc6, 0xfa, 0x7a, 0x4f, 0x0a, 0x0a, 0x86, 0xf3, 0x21, 0x6d, 0xf9, 0x01, 0xc6, 0xfc, 0xea, 0xdc, 0xfb, 0x60, 0xe2, 0xfb, 0x45, 0x09, 0xfc, 0xeb, 0x48, 0x01, 0x3c, 0xca, 0xfb, 0xdd, 0x9c, 0x00, 0xd8, 0x86, 0xfe, 0x4f, 0x24, 0x03, 0x21, 0xfb, 0xfe, 0x78, 0x8f, 0xff, 0x84, 0x59, 0x01, 0x66, 0x33, 0xfd, 0x69, 0xb5, 0xfe, 0x8e, 0x32, 0xfe, 0x6f, 0xc4, 0xfe, 0xa8, 0xd9, 0x01, 0x44, 0x97, 0x56, 0xc0, 0xd9, 0x3f, 0x96, 0x63, 0xf5, 0xa5, 0xd7, 0x05, 0xa1, 0x8e, 0xea, 0x98, 0xde, 0xf1, 0xa9, 0x5e, 0x03, 0xa3, 0x43, 0x00, 0x75, 0x97, 0xf3, 0xdb, 0xb7, 0x00, 0xda, 0x01, 0xff, 0xe6, 0xa9, 0xfb, 0x13, 0x5c, 0x0c, 0x5c, 0xae, 0xf2, 0x5f, 0x8d, 0xf8, 0xa3, 0x14, 0x00, 0x43, 0x60, 0xfa, 0x8f, 0xe2, 0xfa, 0x06, 0xc4, 0xfb, 0x87, 0xce, 0xff, 0x97, 0xde, 0xfb, 0x20, 0x1b, 0x01, 0xad, 0x48, 0xfe, 0x06, 0xe2, 0x02, 0xe5, 0x2d, 0x01, 0xe8, 0x08, 0x00, 0x09, 0x84, 0xff, 0xd1, 0xbd, 0xfe, 0x40, 0x3b, 0x00, 0xc8, 0x51, 0xfc, 0x98, 0x34, 0xff, 0x49, 0xd6, 0xfe, 0xa7, 0x7a, 0x53, 0x71, 0xcd, 0x3e, 0xd5, 0x56, 0xfb, 0x4b, 0xf2, 0x05, 0x94, 0x22, 0xe9, 0x91, 0x74, 0xec, 0x35, 0xae, 0x00, 0x58, 0x4b, 0x04, 0x26, 0xae, 0xf3, 0x6a, 0x71, 0x00, 0x2a, 0x37, 0x00, 0x52, 0xf7, 0xfc, 0x0e, 0x94, 0x0a, 0x0b, 0x89, 0xf5, 0xf2, 0x34, 0xf9, 0x7f, 0x02, 0xfe, 0x36, 0xef, 0xfa, 0x2d, 0xc3, 0xf9, 0x10, 0x78, 0xfa, 0x93, 0xd3, 0xff, 0x81, 0xe9, 0xfc, 0xe5, 0xf4, 0xff, 0x2e, 0x54, 0xff, 0x05, 0xc4, 0x04, 0x24, 0x57, 0xff, 0xcc, 0x53, 0x00, 0x39, 0xbc, 0x00, 0x1e, 0x60, 0xfe, 0x90, 0x94, 0x00, 0x6e, 0x91, 0xfb, 0xb2, 0x3d, 0x00, 0x44, 0xba, 0xfd, 0x25, 0x69, 0x50, 0xe0, 0xba, 0x3d, 0x6c, 0x44, 0xfe, 0x45, 0xca, 0x08, 0xd3, 0x32, 0xe7, 0xc5, 0x87, 0xe6, 0x6f, 0x1d, 0x01, 0xdb, 0x3a, 0x07, 0xc0, 0x09, 0xf3, 0x19, 0xd3, 0x02, 0x10, 0xd1, 0xfe, 0x9f, 0xea, 0xfc, 0xff, 0x18, 0x0e, 0xfd, 0x93, 0xf4, 0xba, 0xce, 0xf8, 0x72, 0x2b, 0xfe, 0xcc, 0x84, 0xf8, 0xa3, 0xb2, 0xfa, 0x1e, 0xfd, 0xfa, 0x81, 0xac, 0xfe, 0xdf, 0x80, 0xfd, 0xce, 0xec, 0x01, 0xd5, 0xc2, 0xff, 0x77, 0x76, 0x02, 0xb2, 0x20, 0x00, 0xa5, 0x23, 0x02, 0xc7, 0x89, 0xff, 0x47, 0x30, 0xfd, 0xc2, 0x2d, 0x03, 0x6d, 0x6f, 0xfb, 0x48, 0x51, 0xfe, 0x92, 0xfe, 0xff, 0xfe, 0x25, 0x50, 0x5b, 0x32, 0x38, 0x27, 0x92, 0x01, 0x57, 0x42, 0x0b, 0x0a, 0x4b, 0xe3, 0xdb, 0xab, 0xe5, 0x77, 0xc2, 0x00, 0x59, 0x95, 0x08, 0x36, 0xc8, 0xf5, 0x75, 0x77, 0x01, 0x2f, 0x07, 0xfe, 0x30, 0x68, 0x00, 0x8e, 0x79, 0x0c, 0x91, 0xd6, 0xf4, 0x9e, 0x2c, 0xf9, 0xd6, 0x00, 0xfb, 0xfd, 0xe5, 0xf9, 0xcd, 0xcd, 0xfc, 0x8d, 0x84, 0xf8, 0xb0, 0xa6, 0xff, 0x43, 0x42, 0x01, 0x52, 0x6d, 0xff, 0xc8, 0xd1, 0xfe, 0x90, 0x3a, 0x04, 0x98, 0xbb, 0xff, 0x07, 0xf6, 0x00, 0xa3, 0x2f, 0x00, 0x20, 0xad, 0xfd, 0xce, 0x27, 0x03, 0x7a, 0x79, 0xfc, 0xfa, 0xd5, 0xfc, 0xe2, 0x89, 0x00, 0x97, 0xdc, 0x4c, 0xab, 0x44, 0x34, 0x7b, 0xf7, 0x04, 0x64, 0xa5, 0x0b, 0xbe, 0xc5, 0xe2, 0xab, 0x95, 0xe5, 0xa8, 0x4d, 0x00, 0x83, 0xc5, 0x08, 0x33, 0x58, 0xf8, 0xda, 0x40, 0x03, 0xf4, 0xc8, 0xf8, 0x68, 0xca, 0x03, 0x27, 0x3a, 0x0d, 0xb7, 0xee, 0xf1, 0xa0, 0xa9, 0xf9, 0x94, 0xf3, 0xfa, 0x29, 0x27, 0xfb, 0x76, 0x35, 0xfc, 0xc8, 0x28, 0xfa, 0x5e, 0x30, 0x01, 0x7f, 0x41, 0xff, 0xd7, 0x58, 0xff, 0x0a, 0x84, 0x00, 0x0d, 0xa6, 0x02, 0xfc, 0xcc, 0xfe, 0xd3, 0xd6, 0x01, 0x5f, 0x73, 0x00, 0x0e, 0x0f, 0xfe, 0x2d, 0x58, 0x02, 0xed, 0x6f, 0xfd, 0x24, 0x88, 0xfd, 0xed, 0xfc, 0xfd, 0xfb, 0x76, 0x47, 0x64, 0xe1, 0x32, 0xd6, 0x75, 0x06, 0x65, 0xa5, 0x09, 0x20, 0x91, 0xe5, 0x41, 0x14, 0xea, 0x7f, 0x52, 0xfb, 0x7c, 0x3f, 0x09, 0xdc, 0xb3, 0xff, 0x1e, 0x25, 0xfd, 0xf9, 0xc3, 0xf7, 0x27, 0x05, 0x08, 0x6c, 0xee, 0x08, 0x9f, 0x41, 0xf2, 0x9f, 0x57, 0xfc, 0xed, 0x29, 0xf9, 0xdb, 0xec, 0xfb, 0x29, 0xff, 0xff, 0x80, 0xdd, 0xf8, 0x1e, 0xe3, 0xff, 0x16, 0xd9, 0x00, 0x22, 0x71, 0xff, 0x67, 0x3b, 0xff, 0xb6, 0x09, 0x02, 0x1a, 0xab, 0xff, 0xe9, 0x98, 0x01, 0x2a, 0x95, 0x00, 0x98, 0x91, 0xfe, 0x1a, 0x20, 0x02, 0x26, 0xb9, 0xfd, 0xac, 0xf7, 0xfd, 0x22, 0x11, 0xfd, 0xc6, 0x7b, 0x48, 0xba, 0x7f, 0x2f, 0xdc, 0xa5, 0xfe, 0x7a, 0x38, 0x0b, 0xac, 0x32, 0xe7, 0x28, 0xc8, 0xed, 0xfb, 0xbf, 0xff, 0x33, 0xa6, 0x04, 0xf5, 0x55, 0xff, 0xe5, 0xf8, 0xfe, 0xbb, 0x9a, 0xf6, 0xe4, 0xf6, 0x07, 0xe8, 0x31, 0x07, 0x5e, 0x84, 0xf2, 0xc9, 0x8b, 0xfd, 0xfa, 0x10, 0xfa, 0x3a, 0x4a, 0xfe, 0x7a, 0x2d, 0xff, 0xbc, 0xcf, 0xf7, 0xe2, 0x2d, 0x02, 0xca, 0x08, 0x01, 0xea, 0xfb, 0xfc, 0xb0, 0xad, 0xff, 0x01, 0x7f, 0x02, 0x3e, 0xc3, 0xff, 0x1a, 0x6e, 0x01, 0xad, 0xd7, 0xff, 0xf8, 0xbf, 0xff, 0x66, 0xa3, 0x02, 0x5f, 0x77, 0xfc, 0x60, 0x9e, 0xfd, 0x33, 0x7b, 0xfe, 0x9f, 0x0b, 0x45, 0xd6, 0x1c, 0x29, 0x95, 0xcf, 0xff, 0xb6, 0x8e, 0x0d, 0x83, 0x95, 0xe6, 0x63, 0x38, 0xf5, 0x77, 0x04, 0xfe, 0xe2, 0xdf, 0x01, 0xd1, 0x13, 0x03, 0x8d, 0x35, 0xfb, 0xeb, 0xf3, 0xf5, 0xad, 0x16, 0x0a, 0xc6, 0xd0, 0x05, 0x64, 0x06, 0xf2, 0x0e, 0x81, 0x00, 0xbc, 0x52, 0xfb, 0x84, 0x08, 0xfe, 0x76, 0xe9, 0xfe, 0x8e, 0x7d, 0xf8, 0x7f, 0x17, 0x03, 0x15, 0xa9, 0xff, 0x6a, 0x85, 0xfc, 0x55, 0x7b, 0x00, 0x6f, 0x71, 0x02, 0x28, 0xfb, 0xfe, 0xfd, 0xcc, 0x01, 0xb3, 0xc5, 0x00, 0xe2, 0x85, 0xff, 0x17, 0x36, 0x02, 0x06, 0x7e, 0xfc, 0xd3, 0xc7, 0xfd, 0xfa, 0xbb, 0xfe, 0xd7, 0xb6, 0x3f, 0xe6, 0x09, 0x24, 0xa2, 0xb9, 0x00, 0xaf, 0xea, 0x0f, 0x72, 0x04, 0xeb, 0xa6, 0xf9, 0xf4, 0xbd, 0xe9, 0xfe, 0x77, 0xcc, 0x02, 0x01, 0xf4, 0xff, 0x04, 0xa3, 0xfa, 0xa0, 0x1a, 0xf8, 0x7f, 0x56, 0x09, 0x7d, 0xc0, 0x03, 0x0a, 0x2a, 0xf5, 0x6c, 0x0a, 0x02, 0xa0, 0xdd, 0xfa, 0x49, 0x34, 0xfe, 0x4e, 0x28, 0xff, 0x4f, 0xa7, 0xf9, 0x88, 0x5e, 0x02, 0xfb, 0xf4, 0xfe, 0xac, 0xb8, 0xfc, 0x5f, 0x65, 0x01, 0x6e, 0x76, 0x01, 0xa2, 0x65, 0xfe, 0xca, 0x18, 0x03, 0x4f, 0x0b, 0x01, 0x34, 0x1b, 0xff, 0x0c, 0xc0, 0x01, 0x75, 0xbc, 0xfc, 0x08, 0xb5, 0xfd, 0x1d, 0x1c, 0xff, 0xf9, 0xd4, 0x3c, 0xa5, 0x1b, 0x2c, 0xbf, 0x4d, 0x09, 0x91, 0xd6, 0x01, 0x54, 0x26, 0xd8, 0xdd, 0x76, 0xf2, 0xcb, 0xbb, 0x0b, 0xe2, 0xd3, 0x0c, 0x72, 0x07, 0xfe, 0x4a, 0x76, 0xf8, 0x00, 0xec, 0xf2, 0xde, 0x01, 0x01, 0x41, 0x7a, 0x06, 0xae, 0x42, 0xf8, 0x18, 0x99, 0x04, 0x9e, 0x9d, 0xfe, 0xfe, 0xb9, 0xfd, 0x75, 0x5e, 0x02, 0x43, 0x6d, 0xfd, 0xaa, 0xdf, 0x01, 0x0a, 0xb9, 0xff, 0x0a, 0x84, 0xfd, 0x62, 0x10, 0xff, 0xa4, 0x54, 0xfd, 0x30, 0x63, 0xfe, 0xcd, 0x24, 0x02, 0xa5, 0xda, 0xfd, 0x40, 0x9d, 0xff, 0x57, 0xcb, 0x03, 0xaf, 0xc8, 0xfe, 0x7f, 0xe3, 0x00, 0x00, 0x93, 0xff, 0x33, 0x38, 0x33, 0xdf, 0x0a, 0x2b, 0x57, 0x79, 0x0c, 0xb0, 0xfb, 0x04, 0x39, 0x0c, 0xde, 0x6e, 0x97, 0xed, 0x3a, 0x41, 0x08, 0x8f, 0x9a, 0x0a, 0xe2, 0x9b, 0x01, 0xfb, 0xc7, 0xfc, 0xab, 0xa5, 0xf3, 0x68, 0xf5, 0xfd, 0xf7, 0x8c, 0x04, 0x86, 0xd5, 0xfb, 0x97, 0xd8, 0x03, 0xb3, 0x6c, 0xfe, 0xef, 0x3e, 0xfe, 0x18, 0xd2, 0x02, 0x04, 0xd8, 0xfd, 0x03, 0x11, 0x01, 0xce, 0xfb, 0x00, 0x63, 0x4a, 0xfe, 0x86, 0x2a, 0xff, 0x3a, 0xad, 0xfd, 0x1b, 0xab, 0xfd, 0x08, 0x07, 0x01, 0xa3, 0x48, 0xfd, 0x5d, 0x33, 0x00, 0x61, 0x5d, 0x04, 0xcd, 0x97, 0xff, 0x2f, 0x9d, 0x01, 0x29, 0x9f, 0xff, 0x6e, 0x52, 0x2c, 0x6a, 0x89, 0x27, 0xf0, 0x78, 0x0d, 0x53, 0xe0, 0x06, 0x37, 0xba, 0xe3, 0xee, 0x11, 0xef, 0x17, 0xdf, 0x05, 0xd0, 0x71, 0x07, 0x75, 0x1a, 0x02, 0x59, 0x45, 0xfe, 0x6e, 0xae, 0xf5, 0x78, 0xdf, 0xfc, 0x94, 0x5c, 0x04, 0x38, 0x2d, 0xfd, 0x03, 0x23, 0x02, 0xfd, 0xf1, 0xfe, 0x5c, 0x6c, 0xfe, 0x8a, 0x7e, 0x02, 0xe0, 0x77, 0xfe, 0xba, 0x6c, 0x00, 0x7d, 0x0a, 0x01, 0x22, 0x29, 0xff, 0x68, 0xe4, 0xfe, 0x1e, 0xbc, 0xfd, 0xfd, 0x1a, 0xfe, 0x94, 0x33, 0x00, 0xb1, 0xb1, 0xfd, 0xc6, 0xca, 0x00, 0xaf, 0xe0, 0x03, 0xa6, 0x6a, 0x00, 0x5f, 0x6a, 0x01, 0x22, 0x60, 0xff, 0x43, 0x76, 0x24, 0x9c, 0xec, 0x23, 0x27, 0xc0, 0x0f, 0x48, 0x62, 0x07, 0x60, 0x99, 0xe9, 0x41, 0xa2, 0xf1, 0x87, 0x72, 0x02, 0x10, 0xa7, 0x05, 0xe0, 0xab, 0x02, 0x51, 0x4d, 0xff, 0xd3, 0xe0, 0xf7, 0x2b, 0x5e, 0xfc, 0xf9, 0xf4, 0x03, 0xdf, 0xd1, 0xfd, 0xb8, 0x0a, 0x01, 0xab, 0x82, 0xff, 0x9b, 0xa7, 0xfe, 0xe3, 0x1f, 0x02, 0xbc, 0x30, 0xff, 0xfd, 0x13, 0x00, 0xfb, 0x37, 0x01, 0xfe, 0xdf, 0xff, 0x35, 0xa0, 0xfe, 0xff, 0x02, 0xfe, 0x3c, 0x6e, 0xfe, 0xec, 0x0f, 0x00, 0x6d, 0xf6, 0xfe, 0x56, 0x23, 0x01, 0x50, 0x11, 0x03, 0x4b, 0xc7, 0x00, 0x2f, 0xe9, 0x00, 0x91, 0x3c, 0xff, 0xdc, 0x90, 0x1e, 0xbe, 0x82, 0x21, 0x3d, 0x68, 0x11, 0xde, 0x01, 0x07, 0x12, 0x10, 0xee, 0xe2, 0x8f, 0xf3, 0x17, 0x8b, 0x00, 0x01, 0xe7, 0x04, 0xe2, 0x9d, 0x02, 0x4e, 0x1e, 0x00, 0x05, 0xc8, 0xf9, 0xb0, 0x5c, 0xfc, 0xf9, 0x1d, 0x03, 0x71, 0x35, 0xfe, 0x43, 0xf3, 0x00, 0x1b, 0xdb, 0xff, 0x92, 0xac, 0xfe, 0x2b, 0x13, 0x02, 0x6b, 0xf6, 0xff, 0xb0, 0xf5, 0xff, 0x4d, 0x54, 0x01, 0xb9, 0x22, 0x00, 0xff, 0xb2, 0xfe, 0x50, 0xe5, 0xfe, 0x74, 0x48, 0xff, 0x34, 0x13, 0x00, 0x3d, 0x6f, 0xff, 0xb0, 0x11, 0x01, 0x36, 0x2c, 0x02, 0xd1, 0xab, 0x00, 0x00, 0x8b, 0x00, 0xf4, 0x0f, 0xff, 0x83, 0xc1, 0x18, 0x9b, 0xa1, 0x1e, 0x01, 0x73, 0x12, 0x3b, 0x75, 0x07, 0x3e, 0x20, 0xf2, 0x25, 0xa7, 0xf4, 0xd4, 0x5b, 0xff, 0x2d, 0x3b, 0x04, 0xc6, 0xbd, 0x02, 0x1d, 0xd3, 0x00, 0xe0, 0x1f, 0xfb, 0xa2, 0xb5, 0xfc, 0x05, 0x68, 0x02, 0xbd, 0x4d, 0xfe, 0x57, 0xc0, 0x00, 0x83, 0x70, 0x00, 0xca, 0xf4, 0xfe, 0x0f, 0xdd, 0x01, 0xb2, 0x88, 0x00, 0xd0, 0x0b, 0x00, 0x1f, 0x45, 0x01, 0x10, 0xd6, 0x00, 0x3f, 0xd0, 0xff, 0x52, 0xdd, 0xff, 0xd7, 0x4f, 0xff, 0x68, 0x25, 0xff, 0xd7, 0x95, 0xff, 0x38, 0xa7, 0x00, 0x8b, 0x08, 0x01, 0x35, 0x78, 0x00, 0xd8, 0x54, 0x00, 0x38, 0x61, 0xff, 0xf3, 0xde, 0x14, 0x8b, 0xff, 0x1b, 0x91, 0x15, 0x13, 0x60, 0x8f, 0x08, 0x35, 0xab, 0xf4, 0x05, 0x60, 0xf5, 0x5c, 0xf7, 0xfe, 0x04, 0x05, 0x04, 0x06, 0x24, 0x03, 0x2e, 0x15, 0x01, 0x00, 0x34, 0xfc, 0x20, 0x91, 0xfd, 0x45, 0xaa, 0x01, 0x5b, 0x51, 0xfe, 0x9c, 0x41, 0x01, 0xef, 0xe6, 0x00, 0x85, 0x4f, 0xff, 0x2e, 0x09, 0x02, 0xe3, 0x9d, 0x00, 0xf4, 0xeb, 0x00, 0xb0, 0x9a, 0x02, 0x7d, 0x3c, 0x01, 0x5e, 0xdb, 0xff, 0x39, 0x0b, 0x00, 0x63, 0xf3, 0xfe, 0x76, 0x48, 0xfe, 0x3a, 0xbb, 0xff, 0x37, 0x92, 0x00, 0xb8, 0x9a, 0x00, 0x55, 0xc5, 0x00, 0x3d, 0x4e, 0x00, 0x9e, 0x1d, 0xff, 0x7c, 0x9a, 0x12, 0xfd, 0x44, 0x1a, 0x14, 0x69, 0x12, 0x76, 0xff, 0x07, 0x80, 0x05, 0xf6, 0x1f, 0xcc, 0xf6, 0x04, 0x2a, 0xff, 0x8a, 0x64, 0x03, 0x70, 0x16, 0x03, 0x87, 0x61, 0x01, 0x34, 0x0d, 0xfd, 0xa7, 0xbf, 0xfd, 0x6b, 0x2d, 0x01, 0xac, 0x97, 0xfe, 0x50, 0x95, 0x01, 0x28, 0x03, 0x01, 0xca, 0x61, 0xff, 0xdd, 0xa6, 0x02, 0xb2, 0xdb, 0x01, 0xe6, 0x8e, 0x01, 0x91, 0x39, 0x02, 0x6c, 0xac, 0x00, 0xa0, 0x7a, 0xff, 0x14, 0x61, 0xff, 0xdc, 0xf3, 0xfd, 0xec, 0x66, 0xfe, 0x44, 0x2d, 0x00, 0x33, 0xe5, 0xff, 0xf1, 0x9e, 0x00, 0x40, 0x39, 0x00, 0xe5, 0x9e, 0xff, 0x0c, 0x20, 0x00, 0xd9, 0x53, 0x10, 0xa4, 0xee, 0x17, 0xaa, 0x09, 0x12, 0x72, 0x6a, 0x08, 0x19, 0x50, 0xf7, 0x81, 0x89, 0xf7, 0x0a, 0x49, 0xff, 0x8b, 0x84, 0x03, 0xa3, 0x50, 0x03, 0x7f, 0x6e, 0x01, 0xbf, 0xf8, 0xfd, 0xc5, 0x49, 0xfe, 0xfd, 0xf2, 0x00, 0x0b, 0xf4, 0xfe, 0x6f, 0x85, 0x01, 0x98, 0x3b, 0x02, 0x9e, 0x73, 0x01, 0x3d, 0xda, 0x02, 0x11, 0x8a, 0x01, 0x08, 0x0f, 0x01, 0x8e, 0x74, 0x01, 0xa5, 0xb4, 0xff, 0xd1, 0xbb, 0xfe, 0x60, 0x75, 0xff, 0xf7, 0xe7, 0xfd, 0xf8, 0xb8, 0xfe, 0x26, 0x5c, 0x00, 0x37, 0x23, 0xff, 0xbd, 0xf2, 0xff, 0xd6, 0xdf, 0x00, 0x63, 0x31, 0x00, 0x15, 0xe6, 0xff, 0xfa, 0xaa, 0x0f, 0x90, 0x64, 0x17, 0xe1, 0xb9, 0x10, 0x14, 0x27, 0x07, 0x91, 0x0b, 0xf8, 0xfe, 0xfa, 0xf8, 0xfd, 0x20, 0x00, 0x8c, 0xa6, 0x03, 0x21, 0x69, 0x03, 0x76, 0x86, 0x01, 0x2d, 0x14, 0xff, 0xae, 0xae, 0xfe, 0x9a, 0x95, 0x00, 0x50, 0x49, 0x00, 0x7d, 0x36, 0x03, 0xb8, 0x29, 0x03, 0xfb, 0x12, 0x01, 0xad, 0xc5, 0x01, 0x55, 0x09, 0x01, 0x34, 0x98, 0x00, 0x56, 0xb1, 0x00, 0xbc, 0x7d, 0xff, 0xfa, 0x17, 0xff, 0x62, 0x44, 0xff, 0x8d, 0x4d, 0xfe, 0x89, 0xf0, 0xfe, 0x1d, 0x68, 0xff, 0x3c, 0xf9, 0xff, 0x25, 0xca, 0x00, 0xe8, 0x1f, 0x00, 0xec, 0xe1, 0xff, 0x21, 0x27, 0x00, 0xbe, 0x64, 0x0f, 0x31, 0xa0, 0x16, 0xf7, 0x68, 0x0f, 0xe5, 0xe2, 0x05, 0xf8, 0x85, 0xf8, 0x2d, 0xc2, 0xfa, 0x18, 0x44, 0x01, 0x51, 0xa3, 0x03, 0xe5, 0xc0, 0x03, 0xf8, 0xf7, 0x01, 0x4d, 0xac, 0xff, 0x42, 0xc6, 0xff, 0x63, 0x5a, 0x02, 0x3d, 0x48, 0x01, 0x6b, 0x6f, 0x02, 0xf4, 0x0c, 0x02, 0xd5, 0x3d, 0x00, 0x85, 0xec, 0x00, 0xe9, 0x82, 0x00, 0x6e, 0x8b, 0x00, 0x83, 0x8b, 0x00, 0x8b, 0x94, 0xff, 0x49, 0xd7, 0xfe, 0x7a, 0x14, 0xff, 0x7b, 0x57, 0xfe, 0x5c, 0xa0, 0xff, 0x8d, 0x8f, 0x00, 0x3c, 0x2b, 0xff, 0x83, 0x03, 0x00, 0xcd, 0x0b, 0x00, 0x7d, 0x39, 0x00, 0xf3, 0x66, 0x00, 0x37, 0x40, 0x0f, 0x09, 0x7e, 0x16, 0x43, 0xe6, 0x0d, 0x72, 0x1a, 0x05, 0xd0, 0x8d, 0xf9, 0xad, 0xcc, 0xfb, 0x77, 0x6f, 0x02, 0xc0, 0x2c, 0x04, 0x75, 0x82, 0x03, 0x7d, 0xc6, 0x02, 0x38, 0x02, 0x02, 0x8f, 0x1f, 0x00, 0x42, 0x12, 0x01, 0xf6, 0xe1, 0x00, 0x5e, 0x62, 0x01, 0x56, 0x42, 0x01, 0x25, 0x1b, 0x00, 0xb6, 0xb3, 0x00, 0xaa, 0xaa, 0x00, 0x99, 0x8d, 0x00, 0xe1, 0x2e, 0x00, 0x37, 0x63, 0xff, 0x6a, 0xaa, 0xfe, 0x3d, 0x5e, 0xff, 0x1d, 0x0a, 0x00, 0x1f, 0x9d, 0xff, 0xee, 0x12, 0xff, 0x33, 0x44, 0xff, 0xe7, 0x0c, 0x00, 0x1d, 0x13, 0x00, 0x9e, 0x15, 0x00, 0x16, 0x92, 0x00, 0x04, 0x5c, 0x0e, 0x8e, 0x08, 0x16, 0xec, 0x46, 0x0d, 0xcf, 0xd8, 0x04, 0x54, 0x35, 0xfb, 0x81, 0x53, 0xfd, 0x71, 0x5a, 0x03, 0xbe, 0xc9, 0x04, 0xe9, 0x12, 0x05, 0xed, 0x90, 0x03, 0x60, 0xb0, 0x00, 0x57, 0x4c, 0xff, 0xeb, 0x02, 0x00, 0xb3, 0xe2, 0xff, 0xdf, 0x0c, 0x01, 0xc0, 0xec, 0x00, 0xcc, 0x5d, 0x00, 0x76, 0x89, 0x00, 0xcd, 0x61, 0x00, 0x55, 0x45, 0x00, 0x4f, 0x09, 0x00, 0xef, 0x90, 0xff, 0x3d, 0x89, 0xff, 0x2c, 0xc0, 0x00, 0xf0, 0x06, 0xff, 0xe1, 0x7f, 0xfe, 0x52, 0x4d, 0xff, 0x26, 0x7d, 0xff, 0xa7, 0x74, 0xff, 0x81, 0xb8, 0xff, 0x19, 0xe1, 0x00, 0x97, 0xd4, 0xff, 0xdd, 0x30, 0x0e, 0xbc, 0x00, 0x16, 0x8f, 0x5e, 0x0c, 0xd5, 0x84, 0x04, 0xa4, 0x63, 0xfd, 0x26, 0xcd, 0xfe, 0x0f, 0x83, 0x04, 0x9f, 0x04, 0x06, 0x17, 0xb7, 0x03, 0xbe, 0xd4, 0x01, 0x6d, 0x51, 0x00, 0x21, 0xec, 0xfe, 0xad, 0xc0, 0xff, 0x3a, 0x7e, 0xff, 0x28, 0x04, 0x01, 0xa4, 0xef, 0x00, 0xc2, 0x0f, 0x00, 0x7d, 0x3d, 0x00, 0x5e, 0x5c, 0x00, 0x0f, 0xc8, 0x00, 0x80, 0xa4, 0xff, 0x54, 0xb1, 0x00, 0x2c, 0xbf, 0x00, 0x23, 0xc6, 0xfe, 0x37, 0xb9, 0xfe, 0x84, 0x25, 0xff, 0xc5, 0x0b, 0xff, 0x9f, 0xe0, 0xfe, 0xfa, 0xa4, 0xff, 0xa2, 0xf6, 0xff, 0xab, 0xc2, 0xff, 0xc4, 0x20, 0x00, 0x62, 0xa4, 0x0e, 0x52, 0x46, 0x16, 0x1b, 0xaa, 0x0b, 0x65, 0x67, 0x04, 0x1c, 0x01, 0xff, 0xea, 0xd7, 0x00, 0xcf, 0xc4, 0x04, 0x55, 0x76, 0x04, 0x55, 0x5f, 0x02, 0x4a, 0x1f, 0x01, 0x5a, 0x07, 0x00, 0xac, 0x23, 0xff, 0x53, 0xd0, 0xff, 0xa4, 0x1d, 0xff, 0xb8, 0xe8, 0x00, 0xb1, 0xe0, 0x00, 0xa8, 0x6f, 0xff, 0xb9, 0x77, 0x00, 0x1b, 0x44, 0x01, 0xaf, 0x1e, 0x00, 0x6c, 0x9b, 0x00, 0x6b, 0xcb, 0x01, 0xbd, 0xe6, 0xfe, 0xe2, 0xb9, 0xfe, 0x42, 0x35, 0xff, 0xaa, 0xb0, 0xfe, 0x5c, 0x8b, 0xfe, 0x7d, 0x53, 0xff, 0x9f, 0xaf, 0xff, 0x62, 0xcb, 0xfe, 0xb2, 0x1a, 0x00, 0x2c, 0xdb, 0x00, 0xc7, 0x7c, 0x0e, 0xe5, 0x7e, 0x17, 0xf6, 0xb9, 0x0c, 0x24, 0x3c, 0x04, 0x63, 0x3b, 0xff, 0xf4, 0x82, 0x00, 0xe6, 0xcd, 0x03, 0x80, 0xd2, 0x03, 0x6e, 0xe6, 0x01, 0x83, 0x03, 0x01, 0x4e, 0x88, 0x00, 0x1c, 0x8f, 0xfe, 0x48, 0xb9, 0xff, 0x13, 0x97, 0xff, 0xd1, 0x2a, 0x00, 0xf8, 0xd1, 0x00, 0x36, 0xe0, 0xff, 0x7b, 0xf4, 0x00, 0xe4, 0xac, 0x00, 0xb3, 0x11, 0x01, 0xc3, 0x28, 0x02, 0x10, 0xac, 0xff, 0x6d, 0xdb, 0xfe, 0x94, 0xd8, 0xff, 0xbf, 0x8e, 0xfe, 0x19, 0xee, 0xfd, 0x5b, 0x03, 0xff, 0xe0, 0x71, 0xff, 0x22, 0xae, 0xfe, 0x52, 0x47, 0xff, 0x6d, 0x9c, 0x00, 0x35, 0x40, 0x01, 0x8a, 0x5c, 0x0f, 0x31, 0x0f, 0x19, 0x33, 0x32, 0x0d, 0x44, 0x58, 0x03, 0x9e, 0x46, 0xfe, 0x4d, 0xd1, 0xfe, 0x14, 0xe7, 0x02, 0xd8, 0x9c, 0x04, 0xc7, 0x2b, 0x02, 0x0f, 0xf5, 0x00, 0x8c, 0xa0, 0x00, 0x35, 0x59, 0xfe, 0x65, 0x46, 0xff, 0x76, 0xce, 0xff, 0x80, 0x7f, 0x00, 0x91, 0x8f, 0x00, 0xfb, 0x7f, 0x00, 0x77, 0xc2, 0x00, 0x5d, 0x51, 0x00, 0xda, 0xb1, 0x02, 0xef, 0x80, 0x01, 0xdd, 0xea, 0xfe, 0x91, 0x92, 0xff, 0x80, 0x99, 0xff, 0x59, 0x78, 0xfe, 0xff, 0xf5, 0xfd, 0xa3, 0x1d, 0xff, 0x61, 0x96, 0xfe, 0xef, 0xbb, 0xfe, 0x6f, 0x55, 0x00, 0xbb, 0xdd, 0x00, 0xad, 0x75, 0x00, 0x70, 0x83, 0x0f, 0x20, 0x92, 0x1a, 0x6c, 0xdd, 0x0d, 0x27, 0x4d, 0x02, 0x02, 0x63, 0xfd, 0x5d, 0x90, 0xfd, 0x19, 0x43, 0x02, 0x97, 0x76, 0x04, 0x2d, 0xfc, 0x01, 0xc9, 0x7b, 0x01, 0x63, 0xd0, 0x00, 0x3c, 0x05, 0xfe, 0xdf, 0x61, 0xff, 0x7d, 0x11, 0x00, 0x44, 0x4d, 0x00, 0x32, 0xc6, 0x00, 0x62, 0x16, 0x01, 0xaf, 0xdb, 0xff, 0xcf, 0x81, 0x00, 0x6c, 0xd3, 0x03, 0x58, 0xe1, 0x00, 0x29, 0xe7, 0xfe, 0x5a, 0xff, 0xff, 0x28, 0x62, 0xff, 0x5c, 0x47, 0xfe, 0x5a, 0xa3, 0xfe, 0xeb, 0xee, 0xfe, 0x9e, 0xe2, 0xfd, 0x81, 0xcc, 0xfe, 0x2e, 0xce, 0x00, 0xdf, 0x6a, 0x01, 0x20, 0x91, 0xff, 0x60, 0xbe, 0x0e, 0x72, 0xfc, 0x1a, 0xb6, 0x6e, 0x0f, 0x11, 0xf6, 0x01, 0x3e, 0x55, 0xfc, 0xe7, 0x28, 0xfd, 0xe4, 0x7b, 0x02, 0x6a, 0x90, 0x04, 0x5b, 0x56, 0x01, 0x38, 0x6a, 0x00, 0xc3, 0xa0, 0x00, 0x49, 0xc9, 0xfe, 0x01, 0x71, 0xff, 0x05, 0xfe, 0xff, 0x0c, 0xf3, 0x00, 0x59, 0xb4, 0x00, 0x2c, 0x7a, 0x00, 0x2e, 0x2d, 0x00, 0x45, 0x49, 0x00, 0xd5, 0x74, 0x03, 0xbc, 0xc2, 0x01, 0xb6, 0x05, 0xff, 0x8a, 0xc6, 0xff, 0x21, 0x8f, 0xff, 0x0f, 0x64, 0xfe, 0xc6, 0xdc, 0xfe, 0xed, 0xd9, 0xfe, 0x7c, 0xf3, 0xfd, 0x07, 0xdf, 0xfe, 0xd4, 0x7a, 0x00, 0x34, 0x49, 0x01, 0xfc, 0xb6, 0xff, 0x62, 0x8c, 0x0d, 0x73, 0xec, 0x1a, 0xe5, 0x95, 0x11, 0x56, 0xb6, 0x02, 0x67, 0x4c, 0xfb, 0x1d, 0x78, 0xfc, 0xc0, 0x90, 0x02, 0x91, 0x62, 0x05, 0x12, 0x04, 0x02, 0x60, 0x56, 0xff, 0xaa, 0x74, 0xff, 0x70, 0x7c, 0xfe, 0x8f, 0xe4, 0xfe, 0xe0, 0x96, 0x00, 0xaa, 0xeb, 0x01, 0x9d, 0xbd, 0x00, 0x7b, 0x86, 0x00, 0xf0, 0x65, 0x00, 0x0a, 0x69, 0xff, 0x70, 0x08, 0x03, 0xa1, 0xf5, 0x02, 0x46, 0x41, 0xff, 0x78, 0x80, 0xff, 0xb9, 0x14, 0x00, 0xad, 0xea, 0xfe, 0xde, 0xf8, 0xfe, 0x18, 0x0a, 0xff, 0x8f, 0x49, 0xfe, 0xd9, 0xe2, 0xfe, 0x90, 0x7f, 0x00, 0xd9, 0x40, 0x01, 0x88, 0xab, 0xff, 0xc5, 0x47, 0x0d, 0x85, 0x11, 0x1b, 0x85, 0xb1, 0x12, 0xcf, 0x24, 0x03, 0x7a, 0x9c, 0xfa, 0xa4, 0xc3, 0xfb, 0x04, 0x95, 0x02, 0xc1, 0x02, 0x06, 0x1c, 0x5d, 0x02, 0x1a, 0x09, 0xff, 0xfc, 0x07, 0xff, 0x40, 0x3b, 0xfe, 0x89, 0xe2, 0xfd, 0x56, 0x83, 0xff, 0x91, 0xec, 0x01, 0xfd, 0x95, 0x01, 0x1c, 0x7b, 0x00, 0x0f, 0x87, 0x00, 0x84, 0xb8, 0xff, 0xbb, 0xa9, 0x01, 0x33, 0x46, 0x03, 0xba, 0x13, 0x00, 0x25, 0xe0, 0xfe, 0xb2, 0xb5, 0xff, 0x90, 0x67, 0xff, 0x82, 0x90, 0xff, 0x60, 0x3f, 0xff, 0x48, 0x3c, 0xfe, 0x56, 0xd7, 0xfe, 0xd3, 0xae, 0x00, 0xb1, 0x0d, 0x01, 0x6e, 0xe8, 0xff, 0xd9, 0xe5, 0x0d, 0x49, 0xfa, 0x1b, 0x63, 0xfa, 0x12, 0x76, 0x4e, 0x03, 0xa5, 0xbd, 0xf9, 0x08, 0x20, 0xfb, 0x4e, 0x1f, 0x03, 0x3c, 0x5f, 0x06, 0x93, 0xab, 0x02, 0x5c, 0xb0, 0xfe, 0xfa, 0xc0, 0xfe, 0xaf, 0x8a, 0xfe, 0xd5, 0x9a, 0xfd, 0xbe, 0xd2, 0xfe, 0xdf, 0x11, 0x01, 0x2b, 0x3f, 0x01, 0x62, 0x60, 0x00, 0xeb, 0xb9, 0x00, 0xfd, 0x84, 0x00, 0xec, 0x27, 0x01, 0xbe, 0xee, 0x02, 0x7e, 0x1c, 0x01, 0x08, 0x89, 0xfe, 0x3f, 0xbc, 0xfe, 0xf9, 0x90, 0xff, 0xe5, 0xf1, 0xff, 0xf8, 0xd3, 0xff, 0x61, 0x9e, 0xfe, 0xd3, 0xee, 0xfe, 0xd2, 0xa8, 0x00, 0xed, 0xfc, 0x00, 0x14, 0x45, 0x00, 0x86, 0xc5, 0x0e, 0x7f, 0x5f, 0x1d, 0x70, 0xd3, 0x13, 0x0c, 0x1c, 0x03, 0xd5, 0xa0, 0xf8, 0x81, 0x6a, 0xfa, 0x63, 0x5d, 0x03, 0x0b, 0x63, 0x07, 0x63, 0xab, 0x02, 0x1a, 0x10, 0xfe, 0x0f, 0xbf, 0xfe, 0x19, 0x9a, 0xfe, 0x5a, 0xb7, 0xfd, 0x07, 0xa8, 0xfe, 0x97, 0x80, 0x00, 0x59, 0xe5, 0x00, 0x2e, 0x9c, 0xff, 0x4a, 0xad, 0xff, 0xae, 0x12, 0x01, 0x64, 0x2d, 0x01, 0xa4, 0x86, 0x02, 0x7c, 0x4a, 0x02, 0xcb, 0x2f, 0xff, 0xd5, 0xb0, 0xfd, 0x23, 0x9f, 0xfe, 0xd2, 0xdb, 0xff, 0x12, 0x5c, 0x00, 0xa7, 0x27, 0xff, 0x67, 0xeb, 0xfe, 0x13, 0x01, 0x01, 0xc4, 0x05, 0x01, 0xd6, 0x58, 0x00, 0x3f, 0xb0, 0x0f, 0x01, 0x55, 0x1f, 0xff, 0x9b, 0x14, 0x76, 0x0e, 0x02, 0x8f, 0xb1, 0xf7, 0x37, 0xfb, 0xf9, 0x30, 0x85, 0x03, 0xb0, 0x3f, 0x08, 0xc6, 0x72, 0x02, 0x81, 0x52, 0xfd, 0xf9, 0x90, 0xfe, 0x72, 0xae, 0xfe, 0xc4, 0xde, 0xfd, 0xf5, 0xaf, 0xfe, 0x3b, 0x20, 0x00, 0x17, 0x97, 0x00, 0xf3, 0xa7, 0xff, 0x8e, 0xb9, 0xfe, 0xab, 0x60, 0x00, 0x9d, 0x3d, 0x01, 0x59, 0xe3, 0x01, 0x0e, 0x5b, 0x02, 0x33, 0x8a, 0x00, 0xc0, 0xd9, 0xfd, 0x1c, 0x8e, 0xfd, 0xb7, 0x45, 0xff, 0x34, 0x58, 0x00, 0x50, 0x50, 0xff, 0x72, 0xe6, 0xfe, 0x43, 0x01, 0x01, 0xec, 0xe3, 0x00, 0xee, 0x76, 0x00, 0x7b, 0x54, 0x11, 0xa3, 0xe7, 0x21, 0xe1, 0x6a, 0x15, 0x45, 0xbf, 0x00, 0xa2, 0x83, 0xf6, 0xb2, 0x0d, 0xf9, 0xb2, 0xe9, 0x03, 0xba, 0xe9, 0x09, 0x69, 0xdb, 0x01, 0x5b, 0x24, 0xfc, 0x36, 0x5f, 0xfe, 0x30, 0xe7, 0xfe, 0x7f, 0xe6, 0xfd, 0x29, 0xc8, 0xfe, 0x12, 0x27, 0x00, 0xdd, 0x44, 0x00, 0x49, 0x8a, 0xff, 0x5c, 0x57, 0xfe, 0xa1, 0xde, 0xff, 0x30, 0xf0, 0x00, 0xed, 0x2c, 0x01, 0x5e, 0xbe, 0x01, 0x07, 0x45, 0x01, 0x0c, 0x8d, 0xfe, 0x40, 0x81, 0xfd, 0x12, 0xa3, 0xfe, 0xdd, 0xf3, 0xff, 0x89, 0x88, 0xff, 0xd3, 0xb0, 0xfe, 0x63, 0xa0, 0x00, 0x3f, 0x8d, 0x00, 0xd5, 0x44, 0x00, 0x0a, 0x53, 0x13, 0xb1, 0x8d, 0x24, 0x41, 0xb4, 0x15, 0x14, 0x50, 0xff, 0x29, 0x37, 0xf5, 0xac, 0x22, 0xf8, 0x81, 0xbd, 0x04, 0x01, 0x4c, 0x0b, 0x19, 0x1e, 0x01, 0xd4, 0xfd, 0xfa, 0x6e, 0x30, 0xfe, 0xcf, 0x2e, 0xff, 0xe8, 0xab, 0xfd, 0xa0, 0xd5, 0xfe, 0x5f, 0x64, 0x00, 0x69, 0xfc, 0xff, 0xbe, 0x58, 0xff, 0x33, 0x1c, 0xfe, 0x99, 0xb4, 0xff, 0x46, 0xc2, 0x00, 0xec, 0xa7, 0x00, 0xea, 0x2c, 0x01, 0xa0, 0x54, 0x01, 0xfa, 0x0d, 0xff, 0xa7, 0x4c, 0xfd, 0xc7, 0x73, 0xfe, 0xfc, 0xf8, 0xff, 0x17, 0x97, 0xff, 0x67, 0x99, 0xfe, 0x96, 0x6f, 0x00, 0x4f, 0x1b, 0x00, 0x8c, 0x32, 0xff, 0xa0, 0x6f, 0x14, 0xd1, 0x2f, 0x28, 0xeb, 0x50, 0x17, 0x10, 0x82, 0xfd, 0x1a, 0x81, 0xf3, 0xaa, 0x44, 0xf7, 0x89, 0x17, 0x05, 0xdc, 0xfc, 0x0c, 0x52, 0xa8, 0x00, 0xa2, 0x68, 0xf9, 0x5f, 0x13, 0xfe, 0xcc, 0x54, 0xff, 0xb8, 0xaa, 0xfd, 0x26, 0x88, 0xfe, 0x04, 0xab, 0x00, 0x74, 0xd4, 0xff, 0x6c, 0xd9, 0xfe, 0x94, 0x46, 0xfe, 0x3c, 0x51, 0xff, 0xa4, 0x7e, 0x00, 0x7f, 0x7e, 0x00, 0xe6, 0x4c, 0x00, 0x6c, 0x4c, 0x01, 0xc4, 0x85, 0xff, 0xb7, 0x75, 0xfd, 0xd1, 0x21, 0xfe, 0x47, 0x6b, 0xff, 0xef, 0xac, 0xff, 0x7a, 0x50, 0xff, 0xd6, 0x16, 0x00, 0xfb, 0xad, 0xff, 0xd1, 0x95, 0xfe, 0x8e, 0xd0, 0x16, 0x2b, 0x99, 0x2b, 0xde, 0x7f, 0x17, 0xf4, 0x9e, 0xfb, 0x5c, 0xa9, 0xf1, 0x53, 0xe6, 0xf6, 0xb1, 0x4c, 0x06, 0x54, 0x2e, 0x0e, 0x9c, 0xbd, 0xff, 0xaf, 0xe9, 0xf7, 0xc9, 0x51, 0xfe, 0x4a, 0x9e, 0xff, 0x95, 0x7e, 0xfd, 0x32, 0x68, 0xfe, 0xdc, 0xf8, 0x00, 0xbd, 0xc4, 0xff, 0x05, 0x5a, 0xfe, 0xde, 0x4b, 0xfe, 0xa7, 0x59, 0xff, 0xe0, 0x73, 0x00, 0x6f, 0x39, 0x00, 0xc0, 0xb2, 0xff, 0xff, 0x3e, 0x01, 0x90, 0xc4, 0xff, 0x68, 0xd0, 0xfd, 0x9e, 0x28, 0xfe, 0x4c, 0x37, 0xff, 0x7a, 0x54, 0xff, 0x00, 0x62, 0xff, 0x36, 0xae, 0x00, 0x11, 0x6e, 0xff, 0xd0, 0x69, 0xfe, 0xfc, 0x7b, 0x18, 0xd0, 0x0d, 0x2f, 0xe0, 0x7c, 0x18, 0x19, 0x23, 0xfa, 0xaf, 0xb4, 0xef, 0xad, 0x30, 0xf6, 0x97, 0x6e, 0x07, 0x74, 0x2b, 0x0f, 0x1a, 0x2a, 0xff, 0x82, 0x6f, 0xf6, 0x2e, 0x56, 0xfe, 0xb6, 0x32, 0x00, 0xf0, 0x3d, 0xfd, 0xc0, 0x11, 0xfe, 0xa8, 0x40, 0x01, 0x33, 0xf8, 0xff, 0x67, 0xd0, 0xfd, 0x1d, 0x16, 0xfe, 0xcf, 0x6d, 0xff, 0xba, 0x73, 0x00, 0x82, 0x2c, 0x00, 0x8c, 0xfc, 0xfe, 0xc4, 0xe5, 0x00, 0x4d, 0x2d, 0x00, 0x36, 0x21, 0xfe, 0xb5, 0x81, 0xfe, 0xba, 0xf6, 0xfe, 0x75, 0x33, 0xff, 0x5c, 0x28, 0xff, 0x77, 0xda, 0x00, 0x1a, 0x8f, 0xff, 0xa3, 0x54, 0xfe, 0x4f, 0xa6, 0x1a, 0xa3, 0x9d, 0x32, 0xd1, 0xae, 0x19, 0x31, 0x64, 0xf8, 0x22, 0x09, 0xed, 0x7a, 0x1d, 0xf5, 0x21, 0x8e, 0x08, 0x9d, 0x22, 0x10, 0xe5, 0xf4, 0xfd, 0x79, 0x75, 0xf4, 0xb4, 0x42, 0xfe, 0xbf, 0xce, 0x00, 0x0b, 0xd3, 0xfc, 0xa5, 0x72, 0xfd, 0x64, 0x11, 0x01, 0x28, 0x37, 0x00, 0x6c, 0x49, 0xfd, 0x59, 0xa7, 0xfd, 0x11, 0x0c, 0xff, 0x1a, 0x55, 0x00, 0xef, 0x23, 0x00, 0x38, 0x2a, 0xfe, 0x97, 0x0b, 0x00, 0x52, 0x3f, 0x00, 0xfe, 0x71, 0xfe, 0x9c, 0xd9, 0xfe, 0x65, 0x03, 0xff, 0x5e, 0xb7, 0xfe, 0x16, 0x02, 0xff, 0x7b, 0x61, 0x00, 0x1a, 0xc9, 0xff, 0x04, 0xf2, 0xfd, 0x1b, 0x22, 0x1c, 0x1c, 0x9e, 0x35, 0x35, 0x22, 0x1b, 0x72, 0x5a, 0xf8, 0x21, 0x36, 0xeb, 0xf2, 0xdf, 0xf3, 0x31, 0xea, 0x09, 0x23, 0xe1, 0x10, 0x66, 0xaa, 0xfd, 0x74, 0x0d, 0xf3, 0xe1, 0x17, 0xfe, 0x14, 0xfa, 0x01, 0x60, 0xbf, 0xfc, 0xa7, 0x23, 0xfd, 0x35, 0x2c, 0x01, 0x62, 0x76, 0x00, 0x8d, 0x2b, 0xfd, 0x22, 0xd1, 0xfd, 0xee, 0xe7, 0xfe, 0x8d, 0x47, 0x00, 0x3a, 0x61, 0x00, 0xdb, 0xfd, 0xfd, 0x63, 0x64, 0xff, 0xa0, 0x56, 0x00, 0x1d, 0x1f, 0xff, 0x6d, 0x12, 0xff, 0x50, 0xcb, 0xff, 0x31, 0x8c, 0xfe, 0x1c, 0x47, 0xff, 0x68, 0x32, 0x00, 0x61, 0xbb, 0xff, 0x3d, 0x55, 0xfe, 0xf7, 0x37, 0x1f, 0x47, 0x65, 0x38, 0xad, 0xfa, 0x1a, 0x3f, 0xe9, 0xf8, 0xb7, 0x38, 0xe9, 0x2a, 0x3c, 0xf2, 0x6a, 0xd0, 0x0b, 0x5a, 0x0e, 0x11, 0x27, 0x75, 0xfc, 0xe3, 0xd1, 0xf1, 0x9c, 0xab, 0xfd, 0x20, 0x00, 0x03, 0x6d, 0xc2, 0xfc, 0xb4, 0x64, 0xfc, 0xb8, 0x64, 0x01, 0x43, 0x79, 0x00, 0xe4, 0xbb, 0xfc, 0x5c, 0xe6, 0xfd, 0x30, 0xc8, 0xfe, 0x10, 0x2d, 0x00, 0x08, 0x3f, 0x00, 0x73, 0x1d, 0xfe, 0x1b, 0x52, 0xfe, 0x38, 0xcb, 0xff, 0x67, 0x31, 0x00, 0xd2, 0x1c, 0xff, 0x39, 0x57, 0x00, 0x95, 0xcd, 0xfe, 0x16, 0x25, 0xff, 0xe8, 0x70, 0x00, 0xad, 0x59, 0xff, 0xad, 0x57, 0xfe, 0xd7, 0xae, 0x22, 0x87, 0xec, 0x3a, 0x8d, 0x20, 0x19, 0xf6, 0xd9, 0xf8, 0x8c, 0xad, 0xe8, 0xb7, 0x98, 0xf1, 0x95, 0x4c, 0x0d, 0xef, 0x24, 0x10, 0x79, 0x38, 0xfb, 0x9a, 0xa9, 0xf1, 0x21, 0x02, 0xfd, 0x9f, 0x85, 0x03, 0x99, 0x16, 0xfd, 0x71, 0xa6, 0xfb, 0x1b, 0x66, 0x01, 0xa1, 0x99, 0x00, 0xcc, 0x52, 0xfc, 0x90, 0xf9, 0xfd, 0x4e, 0xb6, 0xfe, 0xcd, 0x12, 0x00, 0x61, 0xf0, 0xff, 0x77, 0x6d, 0xfe, 0x6d, 0xe8, 0xfd, 0xc3, 0x76, 0xfe, 0x95, 0x17, 0x01, 0xff, 0xa1, 0xff, 0xea, 0x4b, 0x00, 0x6d, 0x8a, 0xff, 0x0c, 0xdc, 0xfe, 0x1b, 0x8a, 0x00, 0xca, 0x94, 0xff, 0x60, 0xe6, 0xfd, 0xd7, 0x45, 0x29, 0xf3, 0x9b, 0x3d, 0x78, 0x3e, 0x13, 0x1c, 0x6b, 0xf8, 0xc7, 0xc9, 0xe9, 0xcd, 0x09, 0xf2, 0x4f, 0x50, 0x0e, 0x26, 0x3f, 0x0e, 0xee, 0x2f, 0xf9, 0x83, 0x7b, 0xf2, 0x8b, 0x5d, 0xfc, 0xb0, 0x4d, 0x03, 0xd5, 0xf6, 0xfd, 0x3d, 0xc7, 0xfa, 0x02, 0x15, 0x01, 0xeb, 0x88, 0x00, 0xab, 0x36, 0xfc, 0x6c, 0xe7, 0xfd, 0x03, 0xd8, 0xfe, 0x6d, 0xf9, 0xff, 0x7c, 0x55, 0xff, 0xef, 0x93, 0xfe, 0x27, 0x0f, 0xfe, 0xe7, 0x12, 0xfd, 0xc0, 0x2a, 0x01, 0xb2, 0xe0, 0x00, 0x69, 0xc3, 0xff, 0x68, 0x8d, 0x00, 0x39, 0x2f, 0xff, 0x18, 0xd4, 0xff, 0x40, 0x4a, 0x00, 0x53, 0x7d, 0xfd, 0xd9, 0xa7, 0x2e, 0x70, 0x09, 0x3e, 0xe0, 0x7b, 0x0e, 0xec, 0x67, 0xfb, 0xf3, 0x21, 0xeb, 0x0e, 0xc1, 0xef, 0x0d, 0x0e, 0x0f, 0x8d, 0x63, 0x0e, 0xba, 0x3f, 0xf7, 0xae, 0x77, 0xf2, 0x35, 0x4f, 0xfc, 0x27, 0x37, 0x03, 0x69, 0x61, 0xfe, 0xfd, 0x33, 0xfa, 0xaf, 0xcf, 0x00, 0x4b, 0x53, 0x00, 0x06, 0x26, 0xfc, 0x2f, 0x09, 0xfe, 0x29, 0x53, 0xff, 0xb8, 0x9d, 0xff, 0x02, 0xee, 0xfe, 0x50, 0x96, 0xfe, 0x16, 0x61, 0xfe, 0xb6, 0x7b, 0xfc, 0x7b, 0x46, 0x00, 0x98, 0x57, 0x02, 0xf2, 0x80, 0xff, 0x34, 0xed, 0x00, 0xbe, 0x0c, 0x00, 0x35, 0x33, 0xff, 0x12, 0xa6, 0x00, 0x48, 0x86, 0xfd, 0x0f, 0xe1, 0x33, 0x4a, 0xac, 0x3d, 0xd6, 0x9e, 0x09, 0xa1, 0x83, 0xff, 0x08, 0x83, 0xec, 0xa7, 0x14, 0xed, 0xf4, 0xa6, 0x0f, 0x1d, 0xba, 0x0e, 0xbb, 0x1a, 0xf5, 0xcc, 0x44, 0xf2, 0x7a, 0xe3, 0xfc, 0xf4, 0xb7, 0x02, 0xab, 0x62, 0xfe, 0x6c, 0xec, 0xf9, 0x81, 0x98, 0x00, 0x06, 0xca, 0xff, 0x0e, 0xe0, 0xfb, 0x5a, 0x71, 0xfe, 0xfd, 0x1e, 0x00, 0xc5, 0xed, 0xfe, 0x12, 0x84, 0xfe, 0xed, 0xcf, 0xfe, 0xd7, 0x3e, 0xfe, 0xdf, 0x63, 0xfc, 0xb3, 0x33, 0xff, 0x4d, 0x3f, 0x03, 0x67, 0xea, 0xff, 0x16, 0xb5, 0x00, 0xc7, 0xf2, 0x00, 0xe8, 0x0c, 0xff, 0x76, 0x58, 0x00, 0x8d, 0xcf, 0xfd, 0x6f, 0x64, 0x3b, 0x3d, 0x90, 0x3f, 0xce, 0x4d, 0x00, 0x99, 0x2e, 0x00, 0xb1, 0xac, 0xf0, 0xf8, 0xd2, 0xed, 0x44, 0x4b, 0x0e, 0xa0, 0x4e, 0x0d, 0xee, 0xab, 0xf3, 0xd5, 0x38, 0xf2, 0xbe, 0xbe, 0xfd, 0x8d, 0xc2, 0x01, 0x53, 0xac, 0xfe, 0x35, 0x66, 0xf9, 0x0c, 0x1d, 0x00, 0x5a, 0x40, 0xff, 0xbf, 0xd5, 0xfb, 0xdf, 0x9f, 0xfe, 0x6d, 0x02, 0x01, 0xc7, 0xda, 0xfe, 0x53, 0xbe, 0xfd, 0x8b, 0xef, 0xfe, 0xd4, 0xb0, 0xfd, 0xff, 0x05, 0xfd, 0x65, 0x6e, 0xfe, 0x11, 0xf5, 0x02, 0x62, 0x15, 0x01, 0xf8, 0xb6, 0x00, 0x53, 0x21, 0x01, 0x1d, 0x7c, 0xff, 0x28, 0xa9, 0xff, 0x62, 0xe5, 0xfd, 0x04, 0x5f, 0x43, 0x5a, 0x46, 0x40, 0x02, 0xc1, 0xf7, 0xc1, 0xe3, 0xff, 0x24, 0x13, 0xf4, 0xdd, 0x7f, 0xf0, 0x4a, 0x9b, 0x0c, 0xb4, 0x93, 0x0b, 0x5a, 0x0a, 0xf3, 0x0b, 0xf0, 0xf1, 0x34, 0x9c, 0xfe, 0xc6, 0x34, 0x01, 0xde, 0xd1, 0xfe, 0x2b, 0xc5, 0xf8, 0x4e, 0x0f, 0x00, 0x8c, 0x87, 0xfe, 0x90, 0x18, 0xfc, 0x0e, 0x0e, 0xff, 0x32, 0x9a, 0x01, 0x69, 0x01, 0xff, 0x8d, 0x02, 0xfd, 0xe7, 0x47, 0xff, 0x51, 0x1c, 0xfd, 0x2b, 0xb5, 0xfd, 0xaa, 0x69, 0xfe, 0x98, 0x4a, 0x02, 0x29, 0xcf, 0x01, 0xb3, 0x4c, 0x01, 0xf9, 0xbc, 0x00, 0x14, 0xc6, 0xff, 0xa3, 0x98, 0xff, 0x63, 0x5e, 0xfd, 0xa5, 0xae, 0x4a, 0x19, 0x4b, 0x43, 0xc4, 0x5c, 0xee, 0xe4, 0x97, 0xfd, 0x24, 0x14, 0xf8, 0x1c, 0x8a, 0xf4, 0x24, 0xe4, 0x09, 0xe5, 0x91, 0x09, 0x5d, 0x96, 0xf3, 0x4c, 0x84, 0xf0, 0xdf, 0x69, 0xff, 0xa7, 0x98, 0x00, 0x58, 0x0f, 0xff, 0xd6, 0xdf, 0xf7, 0x2a, 0xd7, 0xff, 0xc8, 0xe7, 0xfd, 0xa1, 0x84, 0xfc, 0x4c, 0x95, 0xff, 0x69, 0xde, 0x01, 0xef, 0x85, 0xff, 0x56, 0xd2, 0xfb, 0xab, 0xc3, 0xff, 0xac, 0xa3, 0xfc, 0x4d, 0x32, 0xfe, 0x82, 0xe9, 0xfe, 0xf2, 0x97, 0x01, 0xa3, 0x83, 0x01, 0x34, 0x4b, 0x02, 0xc0, 0x42, 0x00, 0x6e, 0x38, 0xff, 0xfb, 0x31, 0x00, 0xaa, 0xb3, 0xfc, 0x96, 0xf2, 0x50, 0xb0, 0x94, 0x45, 0x41, 0x6e, 0xe7, 0x2c, 0x8e, 0xfa, 0x3e, 0x6c, 0xfa, 0x3b, 0xc1, 0xf8, 0xdf, 0xa4, 0x07, 0xb8, 0x14, 0x08, 0xe5, 0x5b, 0xf4, 0xb6, 0xf1, 0xee, 0x60, 0xd7, 0xff, 0x77, 0x13, 0x00, 0x85, 0x33, 0xff, 0xe6, 0x5c, 0xf7, 0x89, 0x9b, 0xff, 0x11, 0x90, 0xfd, 0x1e, 0x18, 0xfd, 0xaf, 0xe7, 0xff, 0x07, 0xd1, 0x01, 0xed, 0x0c, 0x00, 0x70, 0xdd, 0xfa, 0x60, 0x32, 0x00, 0x8a, 0x72, 0xfc, 0xd7, 0x56, 0xfe, 0x08, 0xea, 0xff, 0xd5, 0x3d, 0x01, 0x25, 0x35, 0x00, 0x7a, 0x06, 0x03, 0x25, 0x28, 0x00, 0x09, 0x48, 0xfe, 0x20, 0xc7, 0x00, 0x89, 0xdc, 0xfc, 0x6a, 0xef, 0x57, 0x6a, 0xfe, 0x47, 0xe9, 0x3a, 0xe1, 0x3c, 0x19, 0xf6, 0x6e, 0x98, 0xfb, 0x90, 0x99, 0xfd, 0x55, 0xcb, 0x05, 0xe0, 0x13, 0x07, 0x96, 0xf8, 0xf4, 0x3c, 0x1e, 0xed, 0x1d, 0xdd, 0xff, 0x18, 0x3c, 0xff, 0x8c, 0xa1, 0xff, 0x8e, 0x2c, 0xf7, 0x22, 0x97, 0xff, 0x0b, 0x72, 0xfd, 0x03, 0xca, 0xfd, 0x93, 0xfc, 0xff, 0xd9, 0x97, 0x01, 0x08, 0xb0, 0x00, 0xd4, 0x25, 0xfa, 0x7a, 0xb9, 0x00, 0x95, 0x0d, 0xfc, 0xbe, 0xec, 0xfe, 0xc8, 0x16, 0x01, 0x7a, 0x89, 0x00, 0x77, 0xa8, 0xfe, 0x1e, 0xcc, 0x02, 0xa3, 0x78, 0x00, 0xd0, 0xa3, 0xfd, 0xbd, 0x09, 0x01, 0x1f, 0xe2, 0xfd, 0x7b, 0xd5, 0x5c, 0x44, 0xae, 0x4a, 0x2c, 0x2f, 0xdd, 0x26, 0x1f, 0xf2, 0x74, 0x11, 0xfb, 0x34, 0xb7, 0x00, 0x0e, 0x8f, 0x05, 0xb2, 0xa4, 0x06, 0x5c, 0x29, 0xf5, 0x9d, 0xa6, 0xeb, 0x8e, 0x3e, 0xff, 0xeb, 0x54, 0xfe, 0x84, 0x7c, 0x00, 0x9c, 0x74, 0xf7, 0x96, 0xa1, 0xff, 0x5b, 0xbb, 0xfd, 0x9c, 0xed, 0xfd, 0x20, 0xc1, 0xff, 0x4b, 0x5a, 0x01, 0x3c, 0x70, 0x01, 0x68, 0xe9, 0xf9, 0xf4, 0xbf, 0x00, 0x05, 0x1f, 0xfc, 0x2f, 0xa7, 0xff, 0x94, 0x0c, 0x01, 0x94, 0x18, 0x00, 0x18, 0x86, 0xfd, 0x57, 0xb0, 0x01, 0xa5, 0x2c, 0x01, 0xb5, 0xd4, 0xfd, 0x1b, 0xe9, 0x00, 0xd6, 0xa8, 0xfe, 0xa7, 0xf3, 0x60, 0xa4, 0x40, 0x4d, 0xcb, 0xcf, 0xda, 0xa2, 0xf8, 0xee, 0x99, 0x8f, 0xf8, 0xa3, 0xfc, 0x02, 0xc5, 0x93, 0x06, 0xba, 0x54, 0x06, 0xa4, 0x37, 0xf5, 0x1d, 0x66, 0xea, 0xc4, 0x00, 0xfe, 0x21, 0x7b, 0xfd, 0xde, 0x46, 0x02, 0x04, 0xf4, 0xf7, 0xfa, 0xc2, 0xff, 0x81, 0x4a, 0xfe, 0x66, 0x8a, 0xfd, 0xa3, 0x5a, 0xff, 0x74, 0x7c, 0x01, 0x67, 0x66, 0x02, 0x63, 0xad, 0xf9, 0x0d, 0xfa, 0x00, 0xfc, 0x7d, 0xfc, 0xf9, 0x84, 0xff, 0xb0, 0x99, 0x00, 0x73, 0xe2, 0xff, 0x67, 0x74, 0xfc, 0x5e, 0xc4, 0x00, 0xf8, 0x20, 0x02, 0x70, 0x6c, 0xfe, 0x4a, 0xad, 0x00, 0x53, 0x42, 0xff, 0x65, 0x5c, 0x65, 0x0f, 0x49, 0x4f, 0xac, 0xa3, 0xd9, 0x1a, 0x53, 0xec, 0x62, 0x03, 0xf3, 0xdf, 0xc8, 0x04, 0x0e, 0xc7, 0x08, 0xc0, 0xe0, 0x05, 0x24, 0xf7, 0xf4, 0x34, 0x00, 0xe9, 0x91, 0x05, 0xfc, 0xb3, 0x1f, 0xfd, 0x9e, 0x4a, 0x05, 0xc8, 0x1b, 0xf8, 0xcb, 0x45, 0x00, 0x6f, 0x69, 0xfe, 0x30, 0x85, 0xfc, 0xbb, 0x82, 0xff, 0x6d, 0xe1, 0x01, 0xac, 0xce, 0x02, 0xc5, 0x6b, 0xfa, 0x89, 0x38, 0x01, 0x62, 0x3c, 0xfb, 0x88, 0x4b, 0xff, 0xae, 0x01, 0x00, 0xf9, 0x26, 0xff, 0x56, 0x59, 0xfc, 0xb1, 0x5d, 0x00, 0x2c, 0x7a, 0x02, 0x2c, 0x57, 0xff, 0xb2, 0x06, 0x01, 0x0d, 0x3e, 0xff, 0x01, 0xb7, 0x68, 0x14, 0xc0, 0x4f, 0x4c, 0x7b, 0xda, 0xa4, 0xaa, 0xea, 0x51, 0xd3, 0xec, 0x58, 0xe2, 0x05, 0xa0, 0x87, 0x0a, 0xc3, 0x9e, 0x05, 0xfe, 0x30, 0xf4, 0x67, 0x54, 0xe8, 0x29, 0xad, 0xfa, 0x82, 0x85, 0xfd, 0x49, 0xbf, 0x07, 0x35, 0x4a, 0xf8, 0xd4, 0x79, 0x00, 0xd9, 0x99, 0xfd, 0x5d, 0x83, 0xfc, 0xbd, 0xf6, 0xff, 0x76, 0xae, 0x01, 0x77, 0xc4, 0x03, 0x91, 0x14, 0xfb, 0x5e, 0x9c, 0xff, 0xf5, 0x72, 0xfa, 0xd7, 0x23, 0xff, 0x80, 0x1a, 0xff, 0x5b, 0x5b, 0xff, 0x6d, 0x22, 0xfd, 0x02, 0xcb, 0xff, 0xfe, 0x4a, 0x02, 0xe1, 0xbb, 0x00, 0x48, 0x01, 0x01, 0xfc, 0x41, 0xfe, 0x8c, 0x4a, 0x6a, 0xb9, 0x97, 0x50, 0xfe, 0xad, 0xdd, 0xcb, 0x08, 0xe9, 0x60, 0x3e, 0xe5, 0x4b, 0x61, 0x05, 0x1b, 0xae, 0x0c, 0xfd, 0x38, 0x05, 0xcb, 0x15, 0xf3, 0x6e, 0x7d, 0xe9, 0x66, 0x52, 0xf9, 0x26, 0xc1, 0xfd, 0xc1, 0xc9, 0x0a, 0x95, 0x2f, 0xf8, 0x63, 0x7b, 0xff, 0x17, 0xc8, 0xfd, 0x7b, 0xd6, 0xfc, 0x0f, 0x4e, 0x00, 0x50, 0x84, 0x02, 0x89, 0x58, 0x03, 0x10, 0x31, 0xfa, 0x11, 0xc1, 0xfe, 0xfe, 0x41, 0xf9, 0xb5, 0xdd, 0xfe, 0x5a, 0x82, 0xff, 0xa6, 0xcb, 0xff, 0x0a, 0x9c, 0xfd, 0xfd, 0xb0, 0xff, 0x05, 0x56, 0x02, 0xf7, 0xbf, 0x00, 0x76, 0x3f, 0x01, 0x2a, 0x76, 0xfe, 0xcb, 0x0e, 0x69, 0xa8, 0xcd, 0x52, 0x56, 0x70, 0xe1, 0x6e, 0xc6, 0xe8, 0x0e, 0x7a, 0xde, 0x6d, 0xbd, 0x02, 0x14, 0xf9, 0x0e, 0xc1, 0x1f, 0x04, 0xc1, 0x06, 0xf4, 0x9d, 0x60, 0xeb, 0xb5, 0xdd, 0xf7, 0xb2, 0x48, 0xfe, 0x50, 0x8a, 0x0c, 0x4a, 0xda, 0xf7, 0x9d, 0xbc, 0xfe, 0x6c, 0xb3, 0xfe, 0x3c, 0x53, 0xfd, 0xe0, 0xb7, 0x01, 0x7e, 0x99, 0x00, 0x37, 0x43, 0x02, 0x3f, 0xac, 0xfa, 0x72, 0x5c, 0xfd, 0xef, 0x13, 0xf9, 0x95, 0xac, 0xff, 0x67, 0xb0, 0xff, 0x63, 0xc1, 0xff, 0x85, 0xb7, 0xfe, 0x58, 0xa3, 0xff, 0xb8, 0x1f, 0x01, 0x8a, 0xff, 0x00, 0x56, 0xdc, 0x02, 0xc7, 0x8b, 0xfd, 0xf2, 0x49, 0x69, 0x28, 0xd8, 0x50, 0x6e, 0xd6, 0xe7, 0x3f, 0x16, 0xe9, 0xe6, 0x35, 0xd6, 0xa7, 0x6c, 0xff, 0x12, 0xbd, 0x0f, 0x8e, 0x52, 0x05, 0xe1, 0x85, 0xf5, 0xa2, 0xcc, 0xed, 0x7c, 0xe2, 0xf6, 0x02, 0x6c, 0xfe, 0x00, 0x97, 0x0d, 0xb1, 0x29, 0xf7, 0xc1, 0xdc, 0xfe, 0xa3, 0x51, 0x01, 0x29, 0x83, 0xfd, 0x95, 0xb9, 0xff, 0xa4, 0x7e, 0xff, 0x91, 0x23, 0x01, 0x54, 0x10, 0xfb, 0x3a, 0x39, 0xfd, 0x8e, 0xb6, 0xf9, 0x20, 0x13, 0x00, 0x96, 0xc6, 0xff, 0xff, 0x84, 0x00, 0xa7, 0x8f, 0xfe, 0x52, 0x3f, 0xff, 0x43, 0x54, 0x01, 0xf9, 0xfd, 0x00, 0x91, 0x49, 0x03, 0x80, 0xa7, 0xfd, 0xaf, 0x70, 0x66, 0xad, 0x0b, 0x51, 0x6c, 0x9c, 0xed, 0xff, 0x2a, 0xea, 0x8b, 0xf7, 0xcf, 0xbf, 0x3f, 0xfa, 0xa6, 0x3d, 0x11, 0x2d, 0x41, 0x08, 0xdd, 0x82, 0xf6, 0x43, 0x09, 0xf0, 0x0f, 0x81, 0xf6, 0xe8, 0xa2, 0xfd, 0x89, 0x71, 0x0d, 0xf4, 0x14, 0xf8, 0xec, 0xe2, 0x00, 0x82, 0x43, 0x01, 0x5e, 0x90, 0xfb, 0xad, 0x8f, 0xff, 0x5e, 0x16, 0xfe, 0x4a, 0x1c, 0x01, 0xdb, 0x71, 0xfc, 0x34, 0x15, 0xfd, 0x70, 0x62, 0xfa, 0x92, 0xa9, 0x00, 0x0c, 0xb7, 0xff, 0x6d, 0xae, 0xff, 0xb4, 0x4e, 0xff, 0x39, 0xe2, 0xff, 0xd0, 0xaa, 0x00, 0xb7, 0xa4, 0x00, 0x03, 0x2a, 0x04, 0x0e, 0xc1, 0xfd, 0xd6, 0x49, 0x65, 0xfe, 0x2d, 0x4e, 0x4c, 0x6b, 0xf2, 0x75, 0xd4, 0xeb, 0xb0, 0x96, 0xc9, 0x92, 0xf2, 0xf5, 0x44, 0xea, 0x13, 0x10, 0xad, 0x0a, 0x31, 0xb3, 0xf6, 0x08, 0x41, 0xf3, 0xeb, 0x5c, 0xf5, 0x06, 0x9d, 0xfb, 0x84, 0x92, 0x0f, 0xcd, 0x61, 0xf9, 0xc2, 0xfc, 0xff, 0xd8, 0xc6, 0x00, 0x2f, 0xe6, 0xf9, 0x7c, 0x4a, 0xff, 0x25, 0x69, 0xfe, 0xad, 0xfd, 0x00, 0x7c, 0x4b, 0xfd, 0x8c, 0x78, 0xfd, 0x52, 0xa7, 0xfb, 0xce, 0xb2, 0xff, 0xfd, 0xd7, 0xfe, 0x17, 0x7f, 0x00, 0x89, 0xe7, 0xff, 0x11, 0x36, 0xff, 0x63, 0xad, 0x00, 0x58, 0xd4, 0x00, 0xf3, 0x1b, 0x04, 0x2f, 0xba, 0xfd, 0x47, 0x59, 0x62, 0x96, 0xdd, 0x4a, 0x97, 0xeb, 0xf6, 0x86, 0x6d, 0xee, 0xdf, 0x5b, 0xc3, 0xf9, 0xcc, 0xf3, 0xa1, 0x79, 0x15, 0xdb, 0xcd, 0x0c, 0xb8, 0x00, 0xf9, 0x31, 0xcf, 0xf4, 0x5a, 0xf6, 0xf2, 0xf2, 0x93, 0xfd, 0xd2, 0x02, 0x10, 0x50, 0xf8, 0xf7, 0x5b, 0x89, 0x00, 0xa6, 0x15, 0xfe, 0x38, 0x10, 0xfa, 0xcd, 0x2a, 0x01, 0xcd, 0x54, 0xfd, 0x83, 0x57, 0x01, 0x2f, 0x2a, 0xff, 0x96, 0xd5, 0xfd, 0xe2, 0xcb, 0xfa, 0x7c, 0x44, 0xff, 0xe0, 0xa8, 0xff, 0x48, 0x28, 0x00, 0xcd, 0xda, 0xff, 0xa5, 0x62, 0xff, 0xfd, 0xed, 0x00, 0x9c, 0xaa, 0x00, 0xd2, 0x9b, 0x03, 0x3b, 0xe1, 0xfd, 0x68, 0xa3, 0x5f, 0x37, 0x5e, 0x46, 0x4a, 0x9c, 0xfa, 0xf8, 0x27, 0xef, 0x0a, 0xcc, 0xc2, 0xd2, 0x24, 0xf2, 0x9f, 0x6f, 0x15, 0x8f, 0x1b, 0x10, 0x61, 0x71, 0xf8, 0x52, 0xad, 0xf6, 0xce, 0x56, 0xf3, 0xbd, 0xae, 0xfc, 0xcf, 0xf1, 0x0f, 0x09, 0x69, 0xf7, 0x14, 0xc0, 0xfe, 0xd4, 0x88, 0xfe, 0xd6, 0x7b, 0xfb, 0xca, 0xe0, 0x00, 0x9c, 0x9d, 0xfd, 0x15, 0x9c, 0x02, 0xde, 0x19, 0xff, 0x4f, 0xda, 0xfc, 0x56, 0xc1, 0xfb, 0xe2, 0x8d, 0xff, 0x42, 0xcb, 0xfe, 0xb6, 0x2e, 0x00, 0xf5, 0x65, 0x00, 0xea, 0x48, 0xff, 0xed, 0xfc, 0x00, 0xf9, 0x4d, 0x00, 0x24, 0xa7, 0x03, 0x78, 0xf5, 0xfd, 0xa5, 0xeb, 0x59, 0x5e, 0x82, 0x41, 0x31, 0xd7, 0xfd, 0x97, 0x43, 0xf2, 0xe3, 0xcf, 0xc4, 0xe2, 0x14, 0xf0, 0x31, 0x09, 0x15, 0x6e, 0x8e, 0x10, 0x61, 0xc5, 0xfb, 0x62, 0xef, 0xf7, 0xb4, 0x2e, 0xf0, 0x8d, 0xd6, 0xfe, 0x6f, 0xc3, 0x0d, 0xb8, 0x02, 0xf6, 0x0d, 0xc9, 0xff, 0xa2, 0xe0, 0xfe, 0x15, 0xf5, 0xfb, 0x0c, 0x07, 0x02, 0xde, 0xb2, 0xfe, 0xd8, 0xfd, 0x00, 0x92, 0x48, 0xff, 0x35, 0xb7, 0xfd, 0x3b, 0x58, 0xfc, 0xba, 0xb0, 0xfe, 0x67, 0x47, 0xfe, 0x22, 0x05, 0x01, 0x07, 0x97, 0x00, 0x57, 0x75, 0xfe, 0xee, 0x39, 0x01, 0x7f, 0x3a, 0x01, 0x09, 0x74, 0x02, 0x12, 0xd9, 0xfd, 0xae, 0x6d, 0x54, 0xfc, 0x41, 0x3c, 0x7b, 0xb4, 0xff, 0x3f, 0xd2, 0xf6, 0xb1, 0x21, 0xc8, 0xf9, 0xb4, 0xee, 0xe4, 0xc9, 0x12, 0x86, 0x3e, 0x13, 0xb3, 0x8e, 0xfc, 0xaf, 0xbf, 0xf6, 0xd7, 0xac, 0xf0, 0x43, 0x63, 0xfe, 0x43, 0xb1, 0x0c, 0x0f, 0xee, 0xf5, 0xf8, 0x8e, 0x00, 0x1c, 0xc8, 0xfe, 0xfa, 0x5d, 0xfd, 0x65, 0x6b, 0x03, 0x46, 0x7f, 0xfc, 0xe9, 0x1f, 0x01, 0xb5, 0xa2, 0x00, 0xff, 0x42, 0xfd, 0x92, 0x8a, 0xfc, 0x25, 0x52, 0xfe, 0x34, 0x5a, 0xfe, 0x22, 0xb8, 0x01, 0xad, 0x94, 0xff, 0x64, 0x30, 0xfe, 0xbf, 0xc6, 0x02, 0x7a, 0xac, 0x00, 0x3a, 0x4c, 0x01, 0x45, 0x8e, 0xfe, 0x5a, 0x95, 0x4d, 0x37, 0xd5, 0x34, 0x9a, 0x52, 0x02, 0x24, 0xf6, 0xfd, 0x71, 0xed, 0xca, 0x68, 0x3c, 0xee, 0xf7, 0xa0, 0x13, 0x58, 0xc4, 0x10, 0xcc, 0x05, 0xfd, 0xbc, 0x19, 0xf8, 0x6b, 0xc4, 0xee, 0xff, 0xa6, 0x00, 0xe8, 0x20, 0x0b, 0xd7, 0x5a, 0xf5, 0x0c, 0xe6, 0x01, 0xa5, 0xbf, 0xff, 0xd7, 0xb4, 0xfe, 0x31, 0xd2, 0x01, 0xcc, 0x44, 0xfc, 0x1a, 0x5d, 0x02, 0x9c, 0x94, 0x00, 0x87, 0x82, 0xfc, 0xfc, 0x7d, 0xfd, 0xc3, 0x4f, 0xfe, 0x5f, 0x58, 0xfe, 0xbd, 0x78, 0x01, 0xba, 0x22, 0xff, 0x37, 0xe8, 0xfe, 0x2e, 0x2a, 0x03, 0x58, 0x21, 0x00, 0xe1, 0xa8, 0x00, 0x6b, 0x06, 0xff, 0x8f, 0x4c, 0x45, 0x60, 0x43, 0x30, 0xa8, 0x02, 0x06, 0x6e, 0xd0, 0x00, 0x52, 0x80, 0xcf, 0x13, 0x8a, 0xf1, 0x38, 0xb1, 0x0f, 0x1f, 0x29, 0x0e, 0x5b, 0xd5, 0xfe, 0xf8, 0x0c, 0xf7, 0xd8, 0xaf, 0xf0, 0xdd, 0x40, 0x01, 0x9a, 0xd1, 0x08, 0x7a, 0x30, 0xf6, 0x2b, 0x72, 0x03, 0x47, 0x2d, 0x00, 0x48, 0x7c, 0xfd, 0x49, 0xf9, 0x01, 0xd2, 0x07, 0xfd, 0x77, 0x41, 0x02, 0x6b, 0x0a, 0x00, 0x02, 0xad, 0xfc, 0xae, 0x95, 0xfe, 0xd6, 0xe4, 0xfd, 0xcb, 0xef, 0xfd, 0xc0, 0xe7, 0x01, 0x1e, 0xf4, 0xfe, 0x7a, 0xb5, 0xfe, 0x14, 0xbe, 0x03, 0xaa, 0x88, 0xff, 0x68, 0x72, 0x00, 0x2f, 0x52, 0xff, 0xe0, 0xb5, 0x41, 0x0d, 0xb3, 0x2e, 0x64, 0xd2, 0x01, 0x71, 0x4d, 0xf9, 0x81, 0x8e, 0xd3, 0x73, 0x41, 0xff, 0xba, 0xca, 0x13, 0x6c, 0xfe, 0x05, 0x14, 0x23, 0xfa, 0x1e, 0x61, 0xfa, 0x44, 0xac, 0xf5, 0x87, 0x90, 0xfe, 0x02, 0x95, 0x08, 0x30, 0xad, 0xf6, 0x01, 0x71, 0x02, 0x5b, 0x83, 0x00, 0xdc, 0x7a, 0xfd, 0x8a, 0x37, 0x01, 0x4a, 0x60, 0xfe, 0x33, 0xd5, 0x01, 0x94, 0x52, 0xff, 0x06, 0xa1, 0xfd, 0x81, 0x7e, 0xfd, 0x27, 0x2c, 0xff, 0xa2, 0x06, 0xff, 0xc3, 0xf5, 0xff, 0x1a, 0xe7, 0xff, 0xd1, 0xb1, 0xff, 0x5c, 0x24, 0xff, 0xff, 0x26, 0xff, 0x33, 0x3f, 0x03, 0x79, 0x6b, 0xff, 0x18, 0x54, 0x35, 0x6f, 0xf8, 0x2e, 0xd6, 0xa9, 0x0c, 0x53, 0x8d, 0xfc, 0xe9, 0x64, 0xd4, 0xa3, 0x2f, 0xf5, 0x09, 0x10, 0x0d, 0x37, 0x3a, 0x0a, 0xc3, 0xac, 0x02, 0xa5, 0xef, 0xfb, 0xca, 0xb8, 0xf4, 0x67, 0xbc, 0xfb, 0x89, 0xc0, 0x04, 0x22, 0xff, 0xf9, 0xf8, 0x80, 0x04, 0xdf, 0xc4, 0x00, 0xb9, 0xcb, 0xfc, 0x66, 0x76, 0x02, 0x2e, 0xa2, 0xfe, 0xfc, 0x77, 0x00, 0x2b, 0x11, 0x01, 0x5c, 0xad, 0xfe, 0xd8, 0xf9, 0xfd, 0x91, 0x96, 0x00, 0x5f, 0x9b, 0xfc, 0xb9, 0x46, 0xfe, 0xea, 0xfc, 0xff, 0x28, 0xc1, 0xfe, 0x17, 0x44, 0x01, 0x4c, 0x36, 0x01, 0x3e, 0x11, 0x03, 0x4e, 0xd0, 0xff, 0x5c, 0xce, 0x2b, 0xea, 0xb8, 0x2a, 0x25, 0x72, 0x0f, 0xd9, 0xa6, 0xff, 0x41, 0x90, 0xdd, 0xc8, 0x7b, 0xf4, 0x63, 0x60, 0x09, 0xc6, 0xe7, 0x08, 0x7c, 0x50, 0x02, 0x16, 0x3c, 0xfd, 0x82, 0x80, 0xf7, 0x86, 0xa6, 0xfb, 0x0e, 0x37, 0x03, 0xa6, 0x22, 0xfc, 0x7c, 0xa5, 0x03, 0x96, 0x92, 0x00, 0x3e, 0x4a, 0xfd, 0xf3, 0x43, 0x02, 0xb7, 0x17, 0xff, 0xe7, 0x31, 0x00, 0xb3, 0x76, 0x01, 0x73, 0x29, 0xff, 0x51, 0xcf, 0xfe, 0x19, 0xa2, 0x00, 0x47, 0xe9, 0xfc, 0x58, 0x94, 0xfe, 0x00, 0x69, 0x00, 0x50, 0x07, 0xff, 0x37, 0xd3, 0x00, 0xb7, 0x7e, 0x01, 0x53, 0x7a, 0x02, 0xe7, 0xeb, 0xff, 0xd8, 0x1d, 0x24, 0x2a, 0xe6, 0x26, 0x39, 0x9c, 0x10, 0xfb, 0x8d, 0x02, 0x7b, 0xe6, 0xe4, 0x41, 0x55, 0xf4, 0xf0, 0xe0, 0x06, 0x2b, 0x06, 0x07, 0x1f, 0x40, 0x02, 0xa8, 0xd1, 0xfe, 0xf0, 0x8a, 0xf9, 0xa8, 0xb1, 0xfb, 0xc7, 0x84, 0x02, 0xb4, 0x73, 0xfd, 0x25, 0xae, 0x02, 0x07, 0xa2, 0x00, 0xf1, 0xe1, 0xfd, 0x6e, 0x0e, 0x02, 0x01, 0x81, 0xff, 0x22, 0x36, 0x00, 0x13, 0xad, 0x01, 0x34, 0xf6, 0xff, 0x41, 0x21, 0xff, 0x34, 0xd2, 0x00, 0xed, 0x2c, 0xfe, 0x21, 0xbf, 0xfe, 0x40, 0x33, 0x00, 0xd8, 0xc2, 0xfe, 0xa6, 0x6c, 0x00, 0xfb, 0x50, 0x01, 0x16, 0xef, 0x01, 0xa7, 0x2a, 0x00, 0x37, 0x64, 0x1e, 0x97, 0x36, 0x23, 0x98, 0x14, 0x11, 0x24, 0x2f, 0x04, 0x4f, 0x42, 0xea, 0x4e, 0x25, 0xf5, 0xbf, 0x08, 0x05, 0x9c, 0x50, 0x05, 0x1f, 0x76, 0x02, 0x68, 0xee, 0xff, 0x32, 0x0e, 0xfb, 0x07, 0x19, 0xfc, 0xd9, 0xe7, 0x01, 0xe2, 0x39, 0xfe, 0xaf, 0xe3, 0x01, 0xcf, 0xd7, 0x00, 0x49, 0x5f, 0xfe, 0x24, 0xc6, 0x01, 0x15, 0xfa, 0xff, 0xf4, 0x5a, 0x00, 0xbe, 0xce, 0x01, 0x4d, 0xc3, 0x00, 0xc8, 0xf7, 0xff, 0xc5, 0x09, 0x01, 0x8d, 0x87, 0xfe, 0x92, 0x48, 0xfe, 0xc2, 0xa6, 0xff, 0xac, 0x99, 0xfe, 0xb0, 0x8e, 0xff, 0xa6, 0x10, 0x01, 0x5d, 0x22, 0x02, 0x85, 0x1c, 0x00, 0x11, 0x5a, 0x1a, 0x07, 0x93, 0x20, 0x32, 0x92, 0x10, 0x2a, 0xb9, 0x04, 0x48, 0x9b, 0xee, 0xa3, 0xa9, 0xf6, 0x50, 0xbb, 0x03, 0xc5, 0x5d, 0x04, 0x2a, 0xd4, 0x02, 0x99, 0x8c, 0x00, 0xee, 0x82, 0xfc, 0x12, 0xce, 0xfc, 0x0a, 0xac, 0x01, 0x96, 0xac, 0xfe, 0xa5, 0xad, 0x01, 0x88, 0x39, 0x01, 0xe8, 0xe7, 0xfe, 0x60, 0xcc, 0x01, 0x44, 0x65, 0x00, 0x0f, 0x4f, 0x01, 0xfb, 0x9e, 0x02, 0xdc, 0x48, 0x01, 0x53, 0x0e, 0x00, 0x7d, 0xa9, 0x00, 0x80, 0x9a, 0xfe, 0x08, 0x01, 0xfe, 0x7e, 0x31, 0xff, 0x95, 0x7a, 0xfe, 0xf2, 0x64, 0xff, 0x74, 0x40, 0x01, 0x04, 0x47, 0x02, 0x81, 0x20, 0x00, 0x68, 0x62, 0x17, 0x85, 0xf1, 0x1d, 0x3a, 0x1c, 0x10, 0xdd, 0x91, 0x04, 0x96, 0x4c, 0xf1, 0x7f, 0x01, 0xf8, 0xa4, 0xe7, 0x02, 0x69, 0x96, 0x03, 0x4b, 0xe0, 0x02, 0x76, 0x04, 0x01, 0xf3, 0x91, 0xfd, 0x0e, 0x61, 0xfd, 0x8d, 0x1c, 0x01, 0xb4, 0xfb, 0xfe, 0x69, 0xb8, 0x01, 0x3d, 0x28, 0x01, 0xe5, 0x32, 0xff, 0x0d, 0x33, 0x02, 0x69, 0x58, 0x01, 0xd0, 0x91, 0x01, 0x5c, 0x1f, 0x02, 0xa4, 0xaa, 0x00, 0xfa, 0x95, 0xff, 0x93, 0x45, 0x00, 0x2d, 0x46, 0xfe, 0x34, 0xac, 0xfd, 0xde, 0x03, 0xff, 0xfa, 0x4f, 0xfe, 0x20, 0xef, 0xfe, 0x28, 0x4d, 0x01, 0x62, 0xf7, 0x01, 0xa8, 0xb3, 0xff, 0x59, 0x5a, 0x15, 0x4a, 0x5d, 0x1c, 0xb6, 0x0e, 0x0f, 0x48, 0xfc, 0x03, 0x13, 0xdb, 0xf3, 0xc2, 0x5e, 0xf9, 0x0e, 0x9c, 0x02, 0xc4, 0x69, 0x03, 0x93, 0x35, 0x03, 0x92, 0x72, 0x01, 0x9a, 0x93, 0xfe, 0x5f, 0x19, 0xfe, 0xde, 0xf5, 0x00, 0x87, 0x7c, 0xff, 0x60, 0xd8, 0x01, 0x0b, 0xdb, 0x01, 0xa3, 0x14, 0x00, 0xb2, 0x36, 0x02, 0xf9, 0x52, 0x01, 0x5a, 0x1f, 0x01, 0xe5, 0x70, 0x01, 0x45, 0x77, 0x00, 0x05, 0x69, 0xff, 0x58, 0x0c, 0x00, 0xe0, 0xbd, 0xfe, 0xbe, 0xac, 0xfd, 0x18, 0x9b, 0xfe, 0x2d, 0x62, 0xfe, 0xcb, 0x1c, 0xff, 0xba, 0x0e, 0x01, 0xa7, 0x5b, 0x02, 0xef, 0x8a, 0x00, 0x46, 0x02, 0x14, 0xd3, 0x45, 0x1b, 0x51, 0xde, 0x0d, 0x5a, 0x25, 0x03, 0xef, 0xfa, 0xf5, 0x38, 0x8e, 0xfa, 0x6a, 0xca, 0x02, 0x7d, 0xb5, 0x03, 0xf0, 0x7c, 0x03, 0xd2, 0xd0, 0x01, 0x26, 0x56, 0xff, 0xb8, 0xdb, 0xfe, 0x8e, 0xeb, 0x00, 0x38, 0x53, 0x00, 0x6f, 0x77, 0x02, 0x2a, 0xc0, 0x01, 0xa9, 0xd0, 0xff, 0x6f, 0x57, 0x01, 0x2d, 0x36, 0x01, 0xcb, 0xf1, 0x00, 0x70, 0xc7, 0x00, 0xfe, 0x85, 0x00, 0xf7, 0xb3, 0xff, 0xac, 0xf7, 0xff, 0xf8, 0xbb, 0xfe, 0x80, 0xc3, 0xfd, 0x4c, 0x9f, 0xfe, 0xd4, 0x24, 0xfe, 0xf4, 0xd1, 0xff, 0xe6, 0xee, 0x01, 0xae, 0x6b, 0x01, 0x1d, 0x10, 0x00, 0xbb, 0xf8, 0x12, 0x1d, 0xba, 0x1a, 0xb5, 0xb8, 0x0c, 0x32, 0x13, 0x02, 0x15, 0xcc, 0xf7, 0xa7, 0xaf, 0xfb, 0xae, 0x47, 0x03, 0xda, 0x46, 0x04, 0x6f, 0x74, 0x03, 0xae, 0x42, 0x02, 0xe4, 0xb3, 0xff, 0xe0, 0x86, 0xff, 0x6d, 0x92, 0x01, 0x67, 0x19, 0x00, 0xaf, 0xc5, 0x01, 0xb0, 0x42, 0x01, 0x1e, 0x68, 0xff, 0xb6, 0x80, 0x00, 0xcf, 0x16, 0x01, 0xb7, 0x0b, 0x01, 0x7e, 0x74, 0x00, 0xa0, 0x9a, 0x00, 0x2a, 0xc2, 0xff, 0x1b, 0x8b, 0xff, 0x88, 0x3a, 0xff, 0x51, 0x04, 0xfe, 0x87, 0xe3, 0xfd, 0x41, 0xad, 0xff, 0xd0, 0x4c, 0x00, 0x0b, 0x17, 0x00, 0x89, 0xb8, 0x00, 0xd5, 0x7e, 0x00, 0x04, 0x4e, 0x12, 0xb5, 0xa0, 0x1a, 0x2f, 0xd4, 0x0b, 0xe6, 0x7c, 0x01, 0x1a, 0x5f, 0xf9, 0xba, 0xe1, 0xfc, 0x96, 0xd9, 0x03, 0x7a, 0x17, 0x05, 0xad, 0x70, 0x03, 0xf7, 0x8e, 0x02, 0xff, 0xc2, 0x00, 0x80, 0xfc, 0xfe, 0xb8, 0x46, 0x01, 0xaa, 0xf0, 0xff, 0x0b, 0x26, 0x01, 0xf3, 0x39, 0x01, 0xb6, 0x27, 0xff, 0xe5, 0x04, 0x00, 0x09, 0xf5, 0x00, 0x18, 0xac, 0x01, 0xac, 0x59, 0x00, 0x85, 0x3c, 0x00, 0x01, 0x45, 0x00, 0x21, 0x16, 0x00, 0xa6, 0xcf, 0xfe, 0xdf, 0xb7, 0xfe, 0xf2, 0x9e, 0xff, 0xfd, 0x7f, 0xfe, 0x20, 0x53, 0xff, 0x81, 0x45, 0x00, 0xf2, 0x5b, 0x00, 0x2c, 0x9a, 0x00, 0x32, 0x15, 0x12, 0x30, 0x7c, 0x1a, 0x3f, 0x49, 0x0b, 0xf4, 0x67, 0x01, 0xc5, 0x9e, 0xfa, 0xb6, 0x86, 0xfd, 0x70, 0x07, 0x04, 0x43, 0x45, 0x05, 0xf1, 0xf1, 0x03, 0x04, 0x5a, 0x02, 0x06, 0x9d, 0x00, 0x0b, 0x60, 0xfe, 0x53, 0x34, 0x00, 0x3c, 0x5d, 0x00, 0x44, 0xd0, 0x00, 0xfd, 0xfd, 0x00, 0x73, 0xf7, 0xfe, 0x99, 0xa1, 0xff, 0x72, 0x2c, 0x01, 0x85, 0x3c, 0x01, 0x36, 0x5d, 0x00, 0x38, 0x77, 0x00, 0x29, 0x99, 0x00, 0x30, 0x91, 0xff, 0xe6, 0xc3, 0xff, 0x70, 0x54, 0x00, 0x75, 0xd3, 0xfd, 0x94, 0xc5, 0xfd, 0x89, 0x76, 0xff, 0xf1, 0x29, 0x00, 0xd4, 0x1c, 0x00, 0x03, 0x41, 0x00, 0x97, 0xb6, 0x11, 0x95, 0xb3, 0x1a, 0x24, 0xb9, 0x0b, 0xa2, 0xb9, 0x01, 0x80, 0x89, 0xfb, 0x47, 0x62, 0xfd, 0x22, 0x86, 0x03, 0xaf, 0x24, 0x05, 0x9d, 0x9c, 0x03, 0x78, 0x8f, 0x02, 0xfa, 0x68, 0x00, 0x31, 0x16, 0xfe, 0x98, 0xdd, 0xff, 0xbf, 0xbb, 0xff, 0x90, 0xe8, 0x00, 0x38, 0xf0, 0x00, 0xe8, 0x3e, 0xff, 0x01, 0x7d, 0xff, 0x2e, 0xdb, 0x00, 0xc7, 0x20, 0x01, 0x7c, 0x04, 0x00, 0x3c, 0x23, 0x01, 0x0d, 0x0b, 0x00, 0xf1, 0x56, 0x00, 0x12, 0xae, 0x01, 0x2c, 0x49, 0xfe, 0x6a, 0x52, 0xfd, 0x62, 0x9c, 0xfe, 0xed, 0xc4, 0xfe, 0x34, 0xd5, 0xff, 0x60, 0xa8, 0x00, 0xfd, 0xe8, 0xff, 0xa1, 0xd1, 0x11, 0xbd, 0x8d, 0x1b, 0xe1, 0x45, 0x0c, 0xe6, 0x8d, 0x01, 0xc2, 0xbd, 0xfb, 0x49, 0x89, 0xfd, 0xac, 0xb8, 0x02, 0x6e, 0x53, 0x04, 0x3c, 0x0e, 0x03, 0xa2, 0xf8, 0x01, 0x67, 0x2f, 0x01, 0x7a, 0x77, 0xfe, 0x3a, 0x2e, 0xff, 0xfc, 0xc7, 0xff, 0x1e, 0x4f, 0x00, 0x38, 0xd2, 0x00, 0xd6, 0xe5, 0xff, 0x30, 0xe4, 0xff, 0x45, 0x83, 0x00, 0x5c, 0x61, 0x00, 0x3c, 0xa3, 0x00, 0x55, 0x5f, 0x00, 0x9b, 0x0a, 0x00, 0x96, 0xc9, 0x02, 0x10, 0x62, 0x00, 0x11, 0x28, 0xfd, 0xdc, 0x47, 0xfe, 0xc1, 0x7a, 0xfe, 0xe7, 0xa9, 0xfe, 0x7f, 0x06, 0x00, 0x56, 0xa8, 0x00, 0x60, 0xea, 0xfe, 0x1d, 0x14, 0x12, 0x74, 0xd8, 0x1c, 0xad, 0x09, 0x0d, 0xb4, 0xae, 0x00, 0xe2, 0x93, 0xfb, 0x54, 0x87, 0xfd, 0xf9, 0x90, 0x02, 0xf2, 0x4a, 0x04, 0xcf, 0xd3, 0x01, 0xf3, 0x31, 0x01, 0xce, 0x14, 0x01, 0x7c, 0x74, 0xfe, 0x0e, 0xf4, 0xff, 0x25, 0xc1, 0xff, 0x3c, 0x29, 0x00, 0xd3, 0xe0, 0x00, 0xa7, 0x98, 0xff, 0xe8, 0x51, 0x00, 0x08, 0xd5, 0x00, 0x1e, 0x41, 0x00, 0xfa, 0x3c, 0x00, 0xf3, 0xd7, 0xff, 0x56, 0xff, 0x00, 0xa9, 0x2e, 0x03, 0x10, 0x4d, 0xff, 0x0f, 0x8f, 0xfd, 0xdc, 0x8d, 0xfe, 0x9f, 0x59, 0xfe, 0xfa, 0x3a, 0xff, 0x15, 0x6d, 0x00, 0xe5, 0xf5, 0xff, 0x91, 0x64, 0xfe, 0x7c, 0x09, 0x12, 0xe9, 0x7f, 0x1e, 0x8d, 0x0b, 0x0e, 0xaa, 0xc0, 0xff, 0xa0, 0xfc, 0xfa, 0x05, 0xda, 0xfc, 0x97, 0xf7, 0x02, 0xd0, 0xf4, 0x04, 0x0e, 0x57, 0x01, 0xf4, 0x65, 0x00, 0xd1, 0x09, 0x00, 0x64, 0xca, 0xfd, 0xc3, 0x90, 0xff, 0x2f, 0x5a, 0x00, 0x74, 0x20, 0x01, 0x51, 0xce, 0x00, 0xc8, 0x9a, 0xff, 0x9a, 0x23, 0x00, 0x4b, 0x67, 0x00, 0xd4, 0x95, 0x00, 0xd8, 0x8c, 0x00, 0x31, 0x54, 0xff, 0x5b, 0xdd, 0x00, 0x58, 0x6d, 0x03, 0xf7, 0xb8, 0xfe, 0x35, 0x9a, 0xfd, 0xdb, 0x0b, 0xff, 0x47, 0x42, 0xfe, 0x60, 0xd0, 0xff, 0x8e, 0xc5, 0x00, 0xe9, 0x5c, 0xff, 0xc8, 0x5e, 0xfe, 0xfe, 0x34, 0x12, 0xff, 0xf7, 0x1f, 0x83, 0x87, 0x0f, 0x57, 0xea, 0xfe, 0xf1, 0xd1, 0xf9, 0xa3, 0x48, 0xfc, 0xd0, 0x72, 0x03, 0x8b, 0xd2, 0x05, 0x13, 0x67, 0x01, 0xd3, 0x0f, 0x00, 0x3e, 0x79, 0xff, 0xbc, 0x18, 0xfd, 0x57, 0x64, 0xfe, 0x13, 0x07, 0x00, 0xe0, 0x5e, 0x01, 0x2c, 0x67, 0x01, 0x49, 0x64, 0x00, 0xce, 0x28, 0x00, 0xf6, 0x42, 0x00, 0xd5, 0x37, 0x00, 0xad, 0xb7, 0x00, 0x7a, 0x70, 0xff, 0x86, 0x9d, 0x00, 0x48, 0x6c, 0x03, 0x7c, 0x79, 0xfe, 0x17, 0x81, 0xfd, 0xd6, 0x3d, 0xff, 0xcb, 0x61, 0xfe, 0x2b, 0x59, 0x00, 0x0f, 0x11, 0x01, 0x0f, 0x5f, 0xff, 0xb2, 0x5b, 0xfe, 0xf6, 0x76, 0x12, 0x3f, 0xdf, 0x21, 0xb6, 0xcd, 0x10, 0xd9, 0x48, 0xfe, 0xbd, 0x88, 0xf8, 0x79, 0x47, 0xfb, 0x3b, 0x34, 0x04, 0xf1, 0x83, 0x06, 0xb5, 0x8c, 0x01, 0xe0, 0xc0, 0xff, 0xd9, 0x30, 0xff, 0x57, 0xf9, 0xfc, 0xd6, 0xbe, 0xfd, 0xb1, 0x39, 0xff, 0x71, 0xeb, 0x00, 0x40, 0x1f, 0x01, 0x52, 0x3d, 0x00, 0xc7, 0xbe, 0x00, 0xad, 0x03, 0x01, 0xec, 0x27, 0x00, 0x62, 0x68, 0x00, 0xc7, 0xd5, 0xff, 0x40, 0x96, 0xff, 0xbb, 0x1a, 0x03, 0x77, 0xb3, 0xff, 0x88, 0xb8, 0xfc, 0x58, 0xa6, 0xfe, 0x3c, 0xcc, 0xfe, 0xad, 0x94, 0x00, 0x30, 0x1e, 0x01, 0xa7, 0xa8, 0xff, 0xfb, 0xa2, 0xfe, 0xd8, 0x05, 0x13, 0x75, 0xf2, 0x23, 0x90, 0x87, 0x12, 0x5b, 0xfa, 0xfc, 0x9d, 0xaa, 0xf6, 0x47, 0x37, 0xfb, 0x51, 0xa9, 0x04, 0x33, 0x6e, 0x07, 0x8f, 0xb0, 0x01, 0x11, 0xa2, 0xfe, 0xb9, 0x6a, 0xff, 0x65, 0x1d, 0xfd, 0xe7, 0x25, 0xfd, 0xae, 0x1c, 0xff, 0xa3, 0x53, 0x00, 0x08, 0xa6, 0x00, 0x16, 0x8f, 0xff, 0xa4, 0x09, 0x00, 0x90, 0x7f, 0x01, 0x44, 0x5f, 0x00, 0x62, 0x98, 0x00, 0x55, 0xc3, 0x00, 0xa2, 0x78, 0xfe, 0xf1, 0x0f, 0x02, 0x91, 0x0f, 0x01, 0xf3, 0x9a, 0xfc, 0x71, 0xf7, 0xfd, 0x3d, 0xe9, 0xfe, 0x6a, 0x35, 0x00, 0xa5, 0x3a, 0x01, 0x16, 0xf4, 0xff, 0x23, 0x90, 0xfe, 0xb1, 0xc5, 0x13, 0xc6, 0x68, 0x26, 0xb8, 0xa7, 0x14, 0x8b, 0xae, 0xfb, 0xb1, 0x72, 0xf4, 0x1b, 0xdb, 0xfa, 0xc9, 0x35, 0x05, 0xb1, 0x6a, 0x08, 0x90, 0x90, 0x01, 0x30, 0x8e, 0xfd, 0xf7, 0x7a, 0xff, 0x7d, 0xab, 0xfd, 0x29, 0xc1, 0xfc, 0x4d, 0x0f, 0xff, 0x9a, 0x18, 0x00, 0xf5, 0x29, 0x00, 0xf9, 0x5d, 0xff, 0x6f, 0x36, 0xff, 0x6c, 0x29, 0x01, 0x30, 0xba, 0x00, 0xb3, 0xd8, 0xff, 0xa2, 0x4e, 0x01, 0x2e, 0x72, 0xff, 0x16, 0x42, 0x00, 0x8b, 0xc8, 0x01, 0xa4, 0x47, 0xfe, 0x47, 0xcb, 0xfc, 0x40, 0x09, 0xfe, 0x4b, 0x45, 0x00, 0x48, 0x2d, 0x01, 0x3c, 0xc2, 0xff, 0x1c, 0xc1, 0xfe, 0x27, 0x1e, 0x14, 0x1a, 0x1a, 0x29, 0x3c, 0xdd, 0x17, 0x9b, 0x36, 0xfa, 0x61, 0xf7, 0xf1, 0x30, 0x4b, 0xfa, 0x1b, 0x8f, 0x05, 0x57, 0xca, 0x09, 0x8d, 0x68, 0x01, 0xb5, 0x2e, 0xfc, 0x63, 0x24, 0xff, 0x8b, 0x73, 0xfe, 0x16, 0x94, 0xfc, 0x23, 0xe2, 0xfe, 0xfa, 0x4e, 0x00, 0xeb, 0xa3, 0xff, 0xb8, 0x0f, 0xff, 0x34, 0xbc, 0xfe, 0x2d, 0xa9, 0x00, 0x22, 0x2a, 0x01, 0x30, 0x5d, 0xff, 0x9e, 0x4e, 0x00, 0x04, 0x3d, 0x00, 0x4e, 0x8a, 0xff, 0x08, 0x57, 0x01, 0xf2, 0x90, 0x00, 0xac, 0x39, 0xfd, 0x3f, 0xfa, 0xfc, 0xed, 0x78, 0xff, 0x39, 0xa3, 0x00, 0x06, 0x08, 0x00, 0xc3, 0xce, 0xfe, 0x5e, 0xaa, 0x14, 0x14, 0x19, 0x2c, 0x2b, 0x5b, 0x1b, 0xa4, 0x91, 0xf8, 0x1c, 0x01, 0xef, 0xfa, 0xd8, 0xf9, 0xca, 0x26, 0x06, 0xc4, 0x3b, 0x0b, 0x46, 0x3c, 0x01, 0x2b, 0x7a, 0xfa, 0xc7, 0xbb, 0xfe, 0x78, 0x3e, 0xff, 0xef, 0x7f, 0xfc, 0xe6, 0x95, 0xfe, 0x1c, 0x94, 0x00, 0xd6, 0x8e, 0xff, 0xba, 0x95, 0xfe, 0x99, 0x71, 0xfe, 0xa5, 0x3b, 0x00, 0x50, 0x07, 0x01, 0xf3, 0x10, 0x00, 0x69, 0x40, 0xff, 0xb4, 0x8a, 0xff, 0x1d, 0xc8, 0xff, 0xd0, 0xf6, 0xff, 0x41, 0xa8, 0x01, 0x6a, 0xdd, 0xff, 0x00, 0x96, 0xfc, 0x1d, 0x21, 0xfe, 0xb7, 0x9f, 0x00, 0xfb, 0x78, 0xff, 0xbc, 0x79, 0xfe, 0x07, 0xa3, 0x17, 0xfa, 0x92, 0x30, 0x2c, 0x83, 0x1b, 0x75, 0x4c, 0xf5, 0x78, 0x5d, 0xec, 0xbd, 0xc2, 0xf9, 0xc3, 0x27, 0x08, 0x27, 0x41, 0x0c, 0x92, 0xbd, 0xff, 0xcf, 0xce, 0xf8, 0x71, 0x8c, 0xfe, 0xac, 0xb0, 0xff, 0x95, 0x85, 0xfc, 0xee, 0x4d, 0xfe, 0x36, 0x9f, 0x00, 0x8c, 0x82, 0xff, 0xf7, 0x07, 0xfe, 0xa4, 0x42, 0xfe, 0xa8, 0xff, 0xff, 0xfd, 0xb1, 0x00, 0x9b, 0x37, 0x00, 0x7f, 0x31, 0xff, 0xbb, 0x8c, 0xfe, 0x6c, 0x3e, 0xff, 0xfe, 0x8d, 0xff, 0x27, 0x27, 0x01, 0xed, 0x8e, 0x01, 0x9e, 0x3a, 0xfe, 0x85, 0x1b, 0xfd, 0x9f, 0xbf, 0xff, 0x14, 0xaa, 0xff, 0x40, 0xde, 0xfd, 0xc3, 0x84, 0x19, 0x1d, 0x70, 0x34, 0x27, 0xb6, 0x1d, 0xa0, 0xf3, 0xf2, 0x62, 0x13, 0xe9, 0xc6, 0xcd, 0xf9, 0x99, 0x9d, 0x09, 0x9a, 0x25, 0x0d, 0x35, 0x05, 0xff, 0x65, 0xe9, 0xf6, 0x7c, 0x18, 0xfe, 0x2d, 0xcd, 0x00, 0x88, 0x1e, 0xfc, 0x3b, 0x1a, 0xfe, 0xc4, 0xe8, 0x00, 0x38, 0x2e, 0xff, 0x75, 0xcd, 0xfd, 0xa8, 0x35, 0xfe, 0x04, 0xab, 0xff, 0xe3, 0xac, 0x00, 0xde, 0x12, 0x00, 0x8c, 0x39, 0xff, 0x49, 0x7f, 0xfe, 0xa5, 0xe9, 0xfd, 0xf0, 0x7d, 0xff, 0x70, 0xdd, 0x00, 0xf9, 0xcb, 0x01, 0xc8, 0x6d, 0x00, 0x60, 0x9c, 0xfd, 0x88, 0x34, 0xfe, 0xa4, 0xb6, 0xff, 0xe4, 0x03, 0xfe, 0xf2, 0x64, 0x1b, 0x3b, 0xf4, 0x37, 0x70, 0x5e, 0x20, 0xb7, 0x0b, 0xf1, 0x51, 0x49, 0xe5, 0xa7, 0xe2, 0xf9, 0xdd, 0x2d, 0x0b, 0xcf, 0xc6, 0x0d, 0x80, 0x3b, 0xfe, 0x1d, 0x06, 0xf5, 0x1a, 0x45, 0xfd, 0x95, 0x3f, 0x02, 0x50, 0xef, 0xfb, 0xbd, 0x40, 0xfd, 0x78, 0x45, 0x01, 0x1a, 0x2c, 0xff, 0x19, 0x4a, 0xfd, 0xef, 0x17, 0xfe, 0x94, 0xc5, 0xff, 0x20, 0x30, 0x00, 0xcc, 0x43, 0x00, 0xf0, 0xc1, 0xfe, 0x64, 0xc1, 0xfe, 0x1e, 0x56, 0xfd, 0x01, 0x46, 0xfe, 0x50, 0x43, 0x01, 0xbd, 0xa4, 0x01, 0xf9, 0x3d, 0x01, 0xc2, 0x92, 0xff, 0x0e, 0x90, 0xfd, 0x50, 0x30, 0xfe, 0xab, 0xab, 0xfe, 0x3d, 0x51, 0x1f, 0xb8, 0x1b, 0x3c, 0x18, 0xca, 0x1f, 0x06, 0xb8, 0xee, 0x58, 0x9a, 0xe2, 0x3a, 0x22, 0xfa, 0x13, 0xad, 0x0d, 0xc9, 0xe9, 0x0d, 0x8b, 0x3c, 0xfc, 0xc6, 0xb1, 0xf3, 0x42, 0x0c, 0xfd, 0x1e, 0x0b, 0x03, 0x32, 0x09, 0xfc, 0xed, 0x94, 0xfc, 0x98, 0x72, 0x01, 0x20, 0xfa, 0xfe, 0xe6, 0x44, 0xfd, 0x2d, 0xca, 0xfd, 0xe6, 0x07, 0x00, 0x7c, 0x26, 0x00, 0x92, 0xbf, 0xff, 0x5f, 0xd9, 0xfe, 0x6c, 0x79, 0xfe, 0x30, 0x5c, 0xfd, 0xd5, 0x9e, 0xfd, 0x13, 0xd0, 0x00, 0x7d, 0x2e, 0x02, 0x41, 0x37, 0x01, 0x36, 0xac, 0x00, 0x88, 0x11, 0xff, 0x17, 0xa0, 0xfc, 0xae, 0xe7, 0xfd, 0xbd, 0xa6, 0x22, 0x6f, 0x7f, 0x3f, 0xf2, 0x91, 0x1f, 0x01, 0x13, 0xee, 0x0c, 0x31, 0xe0, 0x99, 0x93, 0xf9, 0x4a, 0x15, 0x10, 0xb1, 0xa8, 0x0d, 0x78, 0xc1, 0xfa, 0x45, 0xbc, 0xf2, 0xd7, 0x38, 0xfc, 0xf5, 0xe1, 0x03, 0xdd, 0x66, 0xfc, 0xd1, 0x9c, 0xfb, 0xcd, 0x87, 0x01, 0xb2, 0x09, 0xff, 0x0a, 0x04, 0xfd, 0x8f, 0xe7, 0xfd, 0x8a, 0x21, 0x00, 0x4a, 0x36, 0x00, 0xe7, 0x47, 0xff, 0x56, 0xbb, 0xfe, 0x97, 0x4f, 0xfe, 0x5c, 0x6a, 0xfd, 0xb5, 0xad, 0xfd, 0x98, 0xd6, 0xff, 0xd4, 0x74, 0x02, 0x98, 0xac, 0x01, 0x7b, 0x85, 0x00, 0xcb, 0xd6, 0x00, 0x64, 0x0d, 0xfd, 0x04, 0xed, 0xfb, 0x3b, 0x0d, 0x26, 0x82, 0x8d, 0x42, 0xab, 0x0c, 0x1e, 0x63, 0x1c, 0xee, 0x99, 0x0b, 0xdf, 0x05, 0x29, 0xf8, 0xfa, 0x03, 0x12, 0x13, 0x49, 0x0d, 0x7b, 0x22, 0xf9, 0xae, 0x1a, 0xf2, 0xd0, 0x40, 0xfb, 0xb7, 0x59, 0x04, 0x49, 0xae, 0xfc, 0x68, 0x9a, 0xfa, 0x03, 0x2a, 0x01, 0x6e, 0x27, 0xff, 0x17, 0xc6, 0xfc, 0xf7, 0x0a, 0xfe, 0x0b, 0x2e, 0x00, 0x1f, 0x33, 0x00, 0xc6, 0xe4, 0xfe, 0xd2, 0x16, 0xfe, 0x30, 0x60, 0xfe, 0xb8, 0x19, 0xfd, 0xbf, 0x40, 0xfe, 0xb6, 0x53, 0xff, 0x25, 0x63, 0x01, 0x51, 0x81, 0x02, 0xd7, 0x4f, 0x00, 0x29, 0x0f, 0x01, 0xf3, 0xe4, 0xfe, 0x64, 0xb9, 0xfa, 0x3a, 0x31, 0x2c, 0x72, 0x92, 0x45, 0x5c, 0xed, 0x18, 0xc5, 0x3a, 0xed, 0x53, 0x0a, 0xe0, 0x24, 0xc8, 0xf7, 0x24, 0x6d, 0x13, 0x9c, 0xae, 0x0c, 0xee, 0x00, 0xf7, 0xec, 0xae, 0xf1, 0x20, 0x58, 0xfb, 0xa1, 0x57, 0x04, 0xdd, 0x8a, 0xfc, 0x9a, 0x33, 0xfa, 0xe7, 0xb6, 0x00, 0x72, 0x07, 0xff, 0xc5, 0x0c, 0xfd, 0x80, 0x3b, 0xfe, 0x22, 0x75, 0x00, 0x9c, 0x66, 0x00, 0x6c, 0x47, 0xfe, 0xae, 0xbc, 0xfd, 0xb5, 0x54, 0xfe, 0xf4, 0xe5, 0xfc, 0x86, 0xce, 0xfe, 0xf6, 0x09, 0x00, 0x9b, 0xe3, 0xff, 0x23, 0x7b, 0x02, 0xd0, 0xeb, 0x00, 0x54, 0x63, 0x00, 0x4d, 0x72, 0x00, 0xc5, 0x27, 0xfb, 0xc2, 0x7a, 0x33, 0x14, 0x4c, 0x48, 0x6a, 0xa4, 0x11, 0xee, 0xa9, 0xec, 0x51, 0x53, 0xe2, 0xe5, 0x5d, 0xf8, 0x25, 0xa8, 0x13, 0x2a, 0xf2, 0x0b, 0x8d, 0x8d, 0xf5, 0xb5, 0xf4, 0xf0, 0x13, 0x21, 0xfc, 0x86, 0xc6, 0x03, 0x2b, 0x9d, 0xfc, 0x73, 0xc3, 0xf9, 0x4d, 0x68, 0x00, 0x8f, 0xe3, 0xfe, 0xc3, 0x80, 0xfd, 0xb3, 0x95, 0xfe, 0xa8, 0xa5, 0x00, 0x45, 0xe8, 0x00, 0x8c, 0x5e, 0xfd, 0xbb, 0xee, 0xfd, 0x54, 0x0d, 0xfe, 0x5a, 0xfb, 0xfc, 0x92, 0x3c, 0xff, 0xad, 0x1f, 0x01, 0x71, 0xd5, 0xfe, 0x83, 0x84, 0x01, 0x7d, 0x98, 0x01, 0x19, 0xde, 0xff, 0x98, 0x1f, 0x01, 0xc9, 0x62, 0xfc, 0x13, 0xd6, 0x3a, 0x73, 0x2f, 0x4b, 0x59, 0x0c, 0x09, 0xbb, 0xa5, 0xeb, 0xe5, 0x54, 0xe5, 0x50, 0x59, 0xf9, 0x4e, 0xac, 0x12, 0x0b, 0x28, 0x0b, 0xac, 0xc5, 0xf4, 0x5a, 0xac, 0xef, 0x69, 0xf5, 0xfc, 0xe9, 0x92, 0x02, 0x7c, 0xe0, 0xfc, 0xdd, 0x55, 0xf9, 0x7c, 0xf7, 0xff, 0x73, 0xf5, 0xfe, 0xdb, 0xb4, 0xfd, 0xdd, 0xfe, 0xfe, 0x37, 0x79, 0x00, 0x34, 0x66, 0x01, 0x20, 0x5e, 0xfc, 0x48, 0x6e, 0xfe, 0x6b, 0x9a, 0xfd, 0xff, 0x12, 0xfd, 0x1c, 0xb7, 0xff, 0xaf, 0x9e, 0x01, 0xbe, 0x46, 0xfe, 0x63, 0xf7, 0xff, 0xf8, 0xca, 0x01, 0xe9, 0xb2, 0xff, 0xc6, 0x2d, 0x01, 0x75, 0xae, 0xfd, 0xbb, 0x09, 0x44, 0x21, 0xeb, 0x4c, 0xdb, 0x35, 0xff, 0x0f, 0x51, 0xea, 0x94, 0x74, 0xe8, 0x0e, 0xb2, 0xfb, 0xa8, 0x03, 0x11, 0xea, 0x74, 0x0a, 0x4d, 0xeb, 0xf3, 0x03, 0x96, 0xee, 0x3c, 0xa7, 0xfd, 0xba, 0x33, 0x01, 0x76, 0x51, 0xfd, 0xf4, 0x4a, 0xf9, 0x72, 0xee, 0xff, 0xce, 0xe5, 0xfe, 0xe5, 0x31, 0xfe, 0x6a, 0x0f, 0xff, 0xe4, 0x7c, 0x00, 0x67, 0x98, 0x01, 0x37, 0xd7, 0xfb, 0x7c, 0x0b, 0xff, 0x1e, 0x38, 0xfd, 0x11, 0x73, 0xfd, 0xe7, 0x3d, 0x00, 0x63, 0x70, 0x01, 0x8d, 0xc0, 0xfd, 0xe6, 0xf2, 0xfe, 0x45, 0x3c, 0x01, 0x3d, 0xe1, 0xff, 0xae, 0x7d, 0x01, 0x0f, 0xc0, 0xfe, 0x02, 0x9c, 0x4d, 0x6d, 0x09, 0x4e, 0x3d, 0x83, 0xf5, 0x00, 0xce, 0xe8, 0xa9, 0xd7, 0xea, 0xe9, 0x95, 0xfe, 0x5c, 0x64, 0x0f, 0x01, 0xec, 0x09, 0x8e, 0x0b, 0xf3, 0xaa, 0x56, 0xed, 0x0d, 0xeb, 0xfd, 0x5f, 0xc5, 0xff, 0x1a, 0x4e, 0xfe, 0xad, 0xd9, 0xf9, 0x5b, 0xdd, 0xff, 0x28, 0xf1, 0xfe, 0xa3, 0x9a, 0xfe, 0xe7, 0x99, 0xfe, 0x3d, 0xcc, 0x00, 0x3c, 0xc6, 0x01, 0xee, 0xbd, 0xfb, 0xea, 0x88, 0xff, 0x48, 0xf8, 0xfc, 0x31, 0x0d, 0xfe, 0xae, 0x32, 0x00, 0x66, 0xb9, 0x00, 0x58, 0x7e, 0xfd, 0xe4, 0x48, 0xfe, 0x55, 0x67, 0x00, 0xcb, 0x78, 0x00, 0xe7, 0xea, 0x01, 0x45, 0x6a, 0xff, 0x83, 0xf1, 0x55, 0x1c, 0x58, 0x4f, 0x2b, 0xcb, 0xec, 0x04, 0x82, 0xe7, 0x96, 0xc5, 0xeb, 0x29, 0xa0, 0x01, 0x43, 0x47, 0x0e, 0xb8, 0x5e, 0x09, 0x10, 0x2d, 0xf2, 0x41, 0xaf, 0xeb, 0x88, 0x0c, 0xfe, 0xea, 0x67, 0xfe, 0x01, 0x79, 0x00, 0xd5, 0x35, 0xfa, 0xcc, 0xd4, 0xff, 0x05, 0x31, 0xff, 0x3b, 0x18, 0xfe, 0xa4, 0x62, 0xfe, 0xae, 0x47, 0x01, 0x5f, 0x30, 0x02, 0x6f, 0xba, 0xfb, 0x9a, 0xf9, 0xff, 0x2a, 0xb8, 0xfc, 0x4e, 0xfe, 0xfd, 0x77, 0xc3, 0xff, 0x69, 0x35, 0x00, 0x91, 0x50, 0xfd, 0x14, 0xf2, 0xfd, 0xb4, 0x1a, 0x00, 0x07, 0xf7, 0x00, 0xe2, 0x9c, 0x01, 0x66, 0x79, 0x00, 0x5c, 0x3c, 0x5d, 0x06, 0xc0, 0x50, 0xef, 0x9e, 0xe5, 0x5b, 0x10, 0xe6, 0x8a, 0xcb, 0xea, 0x0d, 0xbc, 0x04, 0xad, 0xff, 0x0d, 0x1e, 0x5f, 0x08, 0x71, 0x2e, 0xf1, 0x49, 0xd7, 0xe9, 0x2d, 0x56, 0xfe, 0x06, 0xbd, 0xfd, 0x76, 0x4e, 0x03, 0x1b, 0xfe, 0xf9, 0xd8, 0x6c, 0x00, 0x78, 0xa7, 0xfe, 0x82, 0x4d, 0xfd, 0x48, 0xff, 0xfe, 0x94, 0x93, 0x01, 0xab, 0xe3, 0x02, 0x20, 0xc0, 0xfb, 0x43, 0x45, 0x00, 0x62, 0x4a, 0xfb, 0x66, 0xc2, 0xfd, 0xb2, 0xb5, 0xff, 0x5b, 0xa8, 0xff, 0x83, 0x55, 0xfd, 0xd0, 0xbf, 0xfe, 0x44, 0xad, 0xff, 0x4c, 0x8c, 0x00, 0xce, 0xf4, 0x01, 0x1a, 0x30, 0x01, 0x0f, 0x55, 0x63, 0xde, 0xe4, 0x51, 0x41, 0x99, 0xe0, 0x1c, 0x4b, 0xe4, 0xbf, 0x52, 0xe8, 0xff, 0x52, 0x07, 0x52, 0x6e, 0x0e, 0x51, 0xe5, 0x06, 0x7b, 0xcd, 0xef, 0x85, 0xf3, 0xe8, 0x09, 0x2d, 0xff, 0xf3, 0x59, 0xfd, 0xa3, 0x37, 0x06, 0x81, 0xc1, 0xf9, 0xad, 0x77, 0x00, 0xb9, 0xdd, 0xfd, 0x7b, 0x5c, 0xfd, 0x69, 0xe4, 0xff, 0xed, 0x8b, 0x01, 0x85, 0xd7, 0x03, 0x0e, 0x7e, 0xfb, 0x1f, 0xf6, 0xfe, 0x7e, 0x06, 0xfa, 0xc1, 0x3c, 0xfe, 0xaa, 0x33, 0xff, 0xb1, 0xfd, 0xff, 0x81, 0x20, 0xfe, 0xf1, 0x1e, 0xff, 0x5e, 0xdf, 0xfe, 0x7c, 0xc7, 0x00, 0x15, 0xe8, 0x01, 0x1b, 0xbb, 0x00, 0xd0, 0x2f, 0x68, 0xb1, 0x09, 0x52, 0xc7, 0x93, 0xdd, 0x98, 0x1d, 0xe3, 0x01, 0xd1, 0xe4, 0xb5, 0xe2, 0x08, 0x12, 0x7a, 0x0f, 0xd6, 0x93, 0x04, 0xca, 0xb9, 0xee, 0x55, 0x8e, 0xea, 0x66, 0xff, 0xfe, 0xd4, 0xaa, 0xfd, 0xbc, 0xd2, 0x08, 0xcb, 0xe3, 0xf8, 0xcc, 0x09, 0x00, 0x15, 0x1e, 0xfe, 0xfb, 0x14, 0xfe, 0xdc, 0x5b, 0x00, 0x32, 0xb2, 0x01, 0x70, 0x80, 0x03, 0x17, 0x29, 0xfa, 0x3a, 0x42, 0xfe, 0x83, 0x80, 0xf9, 0xf9, 0x38, 0xfe, 0xf1, 0x23, 0x00, 0x29, 0xaf, 0x00, 0x29, 0x01, 0xfe, 0xfd, 0x6c, 0xff, 0xd1, 0x1b, 0xff, 0x8f, 0xef, 0xff, 0x28, 0x5f, 0x01, 0x03, 0x5f, 0x01, 0xd1, 0x71, 0x6a, 0x70, 0x53, 0x52, 0x5d, 0xc9, 0xdb, 0x57, 0xaa, 0xe3, 0x05, 0x10, 0xe0, 0x83, 0x7f, 0x09, 0xac, 0xdf, 0x10, 0x9d, 0xbd, 0x01, 0xa5, 0xe7, 0xef, 0x63, 0x39, 0xec, 0x97, 0xeb, 0xfe, 0x84, 0x31, 0xfe, 0x79, 0x40, 0x0a, 0xfe, 0xaf, 0xf7, 0x45, 0xff, 0xff, 0xac, 0xc0, 0xff, 0x3f, 0x2c, 0xfe, 0x58, 0xa7, 0x00, 0x00, 0xd2, 0xff, 0xb6, 0x93, 0x02, 0x96, 0x27, 0xfa, 0x07, 0xbf, 0xfd, 0x93, 0x43, 0xf9, 0x36, 0x9d, 0xff, 0x18, 0x2c, 0x01, 0x2b, 0xe7, 0xff, 0x76, 0xd5, 0xfe, 0x41, 0xb8, 0xff, 0x94, 0x64, 0xfe, 0xb5, 0x51, 0xff, 0x39, 0xb1, 0x01, 0x85, 0x2f, 0x01, 0x81, 0xfe, 0x6c, 0x95, 0x8a, 0x4f, 0xe4, 0x3e, 0xdd, 0x4c, 0xd1, 0xe3, 0x1b, 0x48, 0xd9, 0x57, 0x6f, 0x09, 0x76, 0x66, 0x12, 0x4b, 0x8d, 0x01, 0x90, 0x69, 0xf0, 0xf7, 0xec, 0xee, 0x53, 0x11, 0xfe, 0xa8, 0x0f, 0xfe, 0x1e, 0x2a, 0x0b, 0x71, 0x2f, 0xf7, 0xc5, 0x6c, 0x01, 0x0c, 0xd4, 0x00, 0xdc, 0x59, 0xfd, 0xd8, 0xa7, 0xfe, 0x71, 0x24, 0xff, 0x18, 0x2c, 0x02, 0x21, 0x7c, 0xfa, 0xce, 0xea, 0xfd, 0xd1, 0x01, 0xfa, 0x79, 0x3e, 0x00, 0x58, 0xe8, 0x00, 0x7c, 0x0d, 0x00, 0xa3, 0x15, 0xff, 0xe5, 0x7b, 0xff, 0x9d, 0x6f, 0xfe, 0xe0, 0xf3, 0xfe, 0xef, 0x9c, 0x01, 0x70, 0x0c, 0x01, 0x11, 0xda, 0x6b, 0x90, 0x49, 0x4e, 0xd3, 0xb4, 0xdf, 0xa3, 0xb1, 0xe4, 0x3d, 0xb2, 0xd1, 0xd3, 0x2b, 0x08, 0x2b, 0x67, 0x16, 0xb5, 0xdb, 0x00, 0x46, 0x9e, 0xf1, 0xe1, 0xd4, 0xf1, 0xde, 0x4c, 0xfc, 0x7b, 0x0d, 0xfd, 0xb9, 0x2c, 0x0d, 0x5e, 0x9a, 0xf7, 0x9c, 0xf3, 0x01, 0x0d, 0x85, 0x00, 0x74, 0x6d, 0xfa, 0x9c, 0xfe, 0xfe, 0x18, 0xb8, 0xfe, 0xd6, 0xcb, 0x01, 0x85, 0xf9, 0xfb, 0x3d, 0x82, 0xfe, 0x80, 0xe1, 0xf9, 0xc9, 0x69, 0x00, 0xb3, 0xd7, 0x00, 0x7b, 0xa7, 0xff, 0x48, 0x95, 0xff, 0x2a, 0x4a, 0xff, 0xaa, 0x8c, 0xfe, 0xbe, 0x6e, 0xfe, 0xa7, 0xf7, 0x01, 0x8e, 0xb0, 0x00, 0xbb, 0xe6, 0x6b, 0x3f, 0x45, 0x48, 0xd2, 0x77, 0xe3, 0x04, 0x98, 0xe5, 0x46, 0x0e, 0xcb, 0x21, 0x01, 0x0a, 0x00, 0x56, 0x18, 0xa4, 0x8d, 0x00, 0x3a, 0x1d, 0xf3, 0x23, 0x5c, 0xf4, 0x8a, 0xa3, 0xf9, 0x24, 0x6f, 0xfe, 0xb8, 0xb4, 0x0e, 0x99, 0x64, 0xf6, 0x61, 0x03, 0x02, 0xc5, 0x4f, 0xfe, 0x68, 0x11, 0xfa, 0x12, 0x05, 0x00, 0x1a, 0x27, 0xfe, 0x4a, 0x58, 0x02, 0xa3, 0xb1, 0xfd, 0xb0, 0xd0, 0xfd, 0x8e, 0xfd, 0xf9, 0x0f, 0xa2, 0x00, 0x73, 0x6e, 0x00, 0x90, 0xa4, 0xff, 0xc1, 0xa4, 0xff, 0x87, 0x60, 0xff, 0x88, 0x98, 0xfe, 0xfc, 0x56, 0xfe, 0xcd, 0x46, 0x02, 0x50, 0xf7, 0xff, 0x9c, 0x59, 0x68, 0xa9, 0xa4, 0x43, 0xc1, 0x7c, 0xe7, 0x7c, 0x5b, 0xe7, 0xc3, 0xec, 0xc7, 0x08, 0x18, 0x0a, 0xb4, 0x71, 0x19, 0x72, 0xab, 0x01, 0xc0, 0xcb, 0xf3, 0xb7, 0x64, 0xf6, 0x67, 0x2b, 0xf9, 0xdf, 0xb2, 0xfe, 0x3d, 0xa8, 0x0e, 0x43, 0x36, 0xf5, 0xb3, 0xb1, 0x00, 0xda, 0x74, 0xfe, 0x56, 0xbd, 0xfa, 0x7b, 0x3b, 0x00, 0x11, 0x04, 0xff, 0xd7, 0xb9, 0x02, 0x72, 0x0a, 0xfe, 0xaa, 0x56, 0xfd, 0xfe, 0x97, 0xfa, 0x8d, 0xd3, 0x00, 0x69, 0x8b, 0xff, 0x9b, 0xce, 0xff, 0xf1, 0xea, 0xff, 0x62, 0x75, 0xff, 0xc5, 0xda, 0xfe, 0x81, 0x24, 0xfe, 0x46, 0x75, 0x02, 0x41, 0xe0, 0xff, 0x27, 0xc2, 0x60, 0x79, 0x90, 0x3f, 0xe8, 0x0a, 0xec, 0xa6, 0x61, 0xeb, 0xe9, 0xc8, 0xc7, 0x47, 0x1e, 0x08, 0xa2, 0x1a, 0x1a, 0xa8, 0xe7, 0x01, 0xf0, 0xc9, 0xf5, 0xf5, 0x8b, 0xf8, 0x04, 0xa1, 0xf7, 0xe9, 0x93, 0xfe, 0xcc, 0xa7, 0x0d, 0xdd, 0xb5, 0xf3, 0x47, 0x31, 0x01, 0x8b, 0x22, 0xff, 0xee, 0x77, 0xfa, 0x7a, 0x3f, 0x02, 0xfe, 0xd7, 0xfe, 0xf0, 0xf2, 0x01, 0x7c, 0x7e, 0xfe, 0x8f, 0x79, 0xfd, 0x3b, 0x7f, 0xfb, 0xb3, 0xa5, 0xff, 0xc0, 0x91, 0xff, 0x5d, 0x04, 0x00, 0x2b, 0xee, 0xff, 0xf1, 0xa9, 0xff, 0x21, 0xbc, 0xfe, 0xe8, 0x3e, 0xfe, 0x61, 0xcb, 0x02, 0xe8, 0x50, 0xff, 0x67, 0x0f, 0x58, 0xa4, 0x5d, 0x39, 0x1d, 0x08, 0xf3, 0xa0, 0xbb, 0xef, 0x0a, 0x1e, 0xca, 0x79, 0x95, 0x05, 0x24, 0xb2, 0x17, 0x7c, 0xa7, 0x04, 0x69, 0xb5, 0xf7, 0xb6, 0xa0, 0xf8, 0xb5, 0x3e, 0xf7, 0xa3, 0x07, 0xfe, 0x16, 0x57, 0x0b, 0x63, 0xfa, 0xf4, 0x79, 0x62, 0x01, 0xda, 0xef, 0xfe, 0x29, 0x8a, 0xfc, 0xab, 0x82, 0x02, 0x93, 0xfb, 0xfd, 0x54, 0x83, 0x01, 0x56, 0x9e, 0xff, 0x17, 0x67, 0xfd, 0x55, 0x62, 0xfb, 0x53, 0xbb, 0xff, 0x61, 0x6f, 0xff, 0x8a, 0xf3, 0xff, 0xe3, 0x16, 0x00, 0x8f, 0x86, 0xff, 0x9e, 0x16, 0xff, 0x84, 0x75, 0xfe, 0x82, 0x74, 0x02, 0x0b, 0x6e, 0xff, 0x6d, 0xb8, 0x4d, 0x35, 0x84, 0x33, 0xc7, 0x76, 0xfa, 0xe6, 0xa0, 0xf4, 0xcf, 0x60, 0xce, 0xfd, 0x9e, 0x01, 0xfc, 0x61, 0x16, 0x31, 0x9a, 0x06, 0x7f, 0xdf, 0xf7, 0x1e, 0x38, 0xfa, 0x35, 0x29, 0xf6, 0xc8, 0x75, 0xfd, 0x74, 0xc6, 0x0a, 0xf4, 0x90, 0xf5, 0x6f, 0x86, 0x01, 0xe1, 0x29, 0x00, 0x95, 0x72, 0xfd, 0xb7, 0xd8, 0x01, 0xd3, 0x9c, 0xfd, 0x9d, 0x20, 0x02, 0x54, 0xc7, 0xff, 0xbe, 0xc8, 0xfc, 0xb4, 0xb5, 0xfc, 0x1d, 0x87, 0xff, 0x26, 0x17, 0xff, 0xc9, 0x21, 0x00, 0x3e, 0xf6, 0xff, 0x7e, 0xc5, 0xff, 0x4c, 0x32, 0xff, 0x0c, 0x63, 0xfe, 0x2c, 0xdf, 0x02, 0x1f, 0xcd, 0xff, 0x01, 0xc5, 0x3d, 0x01, 0xcf, 0x27, 0x88, 0x16, 0xf3, 0x18, 0x07, 0xfb, 0x90, 0x42, 0xef, 0x3e, 0x13, 0x0d, 0x93, 0xbb, 0x07, 0xa7, 0xc3, 0xf7, 0xd2, 0x5d, 0xf8, 0xae, 0xc8, 0x00, 0xc2, 0xdd, 0x00, 0xac, 0xc7, 0xfe, 0x98, 0x48, 0x05, 0x06, 0x72, 0xf7, 0x2a, 0x37, 0x00, 0x54, 0x8e, 0xff, 0x3d, 0x99, 0xfb, 0x24, 0x94, 0x00, 0x8e, 0x4f, 0xfe, 0xb5, 0x39, 0x00, 0x96, 0x74, 0xff, 0x3a, 0xf9, 0xfd, 0x89, 0x66, 0xfd, 0x82, 0x22, 0x03, 0x5a, 0xae, 0xff, 0xd8, 0x0e, 0x00, 0xb5, 0x77, 0x00, 0xcb, 0x60, 0xfd, 0x70, 0xbc, 0xff, 0xcb, 0x1c, 0xfe, 0x2a, 0x03, 0xff, 0xc1, 0x18, 0x00, 0xf4, 0xe2, 0x34, 0xc1, 0x02, 0x27, 0xe2, 0x7f, 0xf8, 0xa5, 0xc3, 0xfa, 0xd6, 0x26, 0xf0, 0x93, 0x6a, 0x0a, 0x77, 0x39, 0x09, 0x72, 0x6e, 0xfa, 0xb5, 0x06, 0xf9, 0xa3, 0x02, 0x00, 0x08, 0xcd, 0xff, 0x1c, 0xce, 0xfe, 0x8d, 0xa8, 0x04, 0xb4, 0xeb, 0xf8, 0xcc, 0xde, 0xff, 0x3f, 0x21, 0x00, 0xa2, 0xa0, 0xfc, 0x1c, 0x3c, 0x00, 0x36, 0x03, 0xff, 0x68, 0x42, 0x00, 0x0d, 0x75, 0xff, 0x39, 0x1e, 0xfe, 0xcd, 0x41, 0xfd, 0xd5, 0x77, 0x02, 0xd5, 0x1f, 0x00, 0x2c, 0x0f, 0x00, 0x11, 0xfe, 0x00, 0x17, 0x13, 0xfe, 0x29, 0x7f, 0xff, 0x44, 0x78, 0xfe, 0x57, 0x04, 0xff, 0xec, 0xbc, 0xff, 0x72, 0x77, 0x2d, 0x18, 0x67, 0x25, 0xa7, 0x4a, 0xfd, 0x77, 0x04, 0xfb, 0xea, 0xd7, 0xf1, 0x50, 0x51, 0x08, 0xa1, 0xac, 0x09, 0x92, 0x82, 0xfc, 0xdf, 0x39, 0xfa, 0xa5, 0x54, 0xff, 0xd5, 0x2e, 0xff, 0x1e, 0x57, 0xff, 0x6a, 0xe9, 0x03, 0x92, 0x7b, 0xfa, 0x6b, 0xda, 0xff, 0x53, 0xae, 0x00, 0x5f, 0x99, 0xfd, 0xc3, 0x32, 0x00, 0x8b, 0xb5, 0xff, 0x1d, 0x60, 0x00, 0x7f, 0xa2, 0xff, 0x2b, 0x7a, 0xfe, 0x96, 0x89, 0xfd, 0xbb, 0xf6, 0x01, 0xb7, 0xb8, 0x00, 0xed, 0x3a, 0x00, 0x13, 0x08, 0x01, 0x09, 0x9b, 0xfe, 0x41, 0x69, 0xff, 0xdf, 0xd7, 0xfe, 0x53, 0xea, 0xfe, 0xd1, 0xa0, 0xff, 0x4e, 0x81, 0x27, 0xe3, 0x00, 0x24, 0x60, 0x59, 0x00, 0xc7, 0x53, 0xfb, 0x8c, 0xa3, 0xf3, 0x75, 0xd5, 0x06, 0x2e, 0x99, 0x09, 0xc8, 0x3b, 0xfe, 0xf3, 0x73, 0xfb, 0x56, 0xd7, 0xfe, 0x29, 0x2c, 0xff, 0xdb, 0xb4, 0xff, 0x73, 0x3a, 0x03, 0x5b, 0xd6, 0xfb, 0x09, 0x35, 0x00, 0x42, 0x0e, 0x01, 0xa8, 0x5f, 0xfe, 0xb8, 0x4d, 0x00, 0x86, 0x46, 0x00, 0xef, 0xa3, 0x00, 0x2e, 0xc1, 0xff, 0xa3, 0x15, 0xff, 0x97, 0x10, 0xfe, 0x3b, 0x8d, 0x01, 0x4c, 0xf4, 0x00, 0x62, 0x3e, 0x00, 0xae, 0xe3, 0x00, 0x37, 0x03, 0xff, 0xae, 0x66, 0xff, 0x91, 0x01, 0xff, 0xa1, 0x23, 0xff, 0x24, 0x9e, 0xff, 0x15, 0x0c, 0x23, 0x6f, 0xb2, 0x22, 0xb2, 0xff, 0x01, 0xdd, 0x3e, 0xfb, 0xe0, 0x5e, 0xf5, 0x63, 0xbd, 0x05, 0xb1, 0x0f, 0x09, 0x0e, 0x7a, 0xff, 0x93, 0x67, 0xfc, 0xdb, 0xb0, 0xfe, 0x27, 0x49, 0xff, 0xbc, 0xbd, 0xff, 0x7e, 0xa7, 0x02, 0x46, 0x03, 0xfd, 0xe4, 0x7e, 0x00, 0xd7, 0x1a, 0x01, 0x57, 0xf5, 0xfe, 0x97, 0x61, 0x00, 0xaa, 0x8d, 0x00, 0xe9, 0xe7, 0x00, 0xf3, 0xe8, 0xff, 0xc5, 0x86, 0xff, 0xbb, 0x53, 0xfe, 0x40, 0xdc, 0x00, 0x24, 0xe3, 0x00, 0x25, 0x2d, 0x00, 0x64, 0x69, 0x00, 0xe6, 0x35, 0xff, 0x02, 0x70, 0xff, 0xf5, 0x39, 0xff, 0x47, 0x25, 0xff, 0xe7, 0x1f, 0xff, 0xf6, 0xcf, 0x1f, 0x50, 0x75, 0x21, 0x3f, 0xd4, 0x02, 0xdd, 0x2f, 0xfb, 0x57, 0x12, 0xf7, 0x95, 0xef, 0x04, 0x8a, 0x68, 0x08, 0xf2, 0x87, 0x00, 0x4f, 0x2e, 0xfd, 0x46, 0xe1, 0xfe, 0xf2, 0x71, 0xff, 0x04, 0xcd, 0xff, 0x20, 0x81, 0x02, 0xa5, 0xd8, 0xfd, 0x19, 0xc2, 0x00, 0x7a, 0x2d, 0x01, 0xac, 0x67, 0xff, 0xcb, 0x74, 0x00, 0xd8, 0xdd, 0x00, 0x1f, 0x18, 0x01, 0xa2, 0xd3, 0xff, 0xf1, 0xc2, 0xff, 0xfb, 0x77, 0xfe, 0x16, 0x2a, 0x00, 0xdf, 0xb2, 0x00, 0xfd, 0x0f, 0x00, 0x59, 0x0f, 0x00, 0xdb, 0x91, 0xff, 0x64, 0x84, 0xff, 0x61, 0x25, 0xff, 0x7d, 0x19, 0xff, 0xa0, 0x3a, 0xff, 0x70, 0x5e, 0x1d, 0xec, 0xaf, 0x20, 0xaa, 0x33, 0x03, 0x00, 0x26, 0xfb, 0x5f, 0x88, 0xf8, 0x8f, 0x5b, 0x04, 0x2c, 0xeb, 0x07, 0xfc, 0x7b, 0x01, 0x06, 0xb3, 0xfd, 0xba, 0x4c, 0xff, 0xe9, 0x00, 0x00, 0xe8, 0xab, 0xff, 0x03, 0xad, 0x02, 0x18, 0x7a, 0xfe, 0x7a, 0xd7, 0x00, 0x23, 0x67, 0x01, 0xca, 0xc4, 0xff, 0x45, 0x7d, 0x00, 0x89, 0xd6, 0x00, 0xab, 0x4c, 0x01, 0xe4, 0xab, 0xff, 0x31, 0xb9, 0xff, 0xb5, 0xb7, 0xfe, 0xec, 0x87, 0xff, 0x97, 0x7d, 0x00, 0x0f, 0x60, 0x00, 0x67, 0xde, 0xff, 0xe2, 0xbb, 0xff, 0xae, 0x8a, 0xff, 0xd8, 0x5d, 0xff, 0xa9, 0x3b, 0xff, 0xb3, 0xcc, 0xfe, 0xd9, 0xe2, 0x1b, 0xf5, 0x0e, 0x20, 0xb6, 0x34, 0x03, 0xa2, 0xfb, 0xfa, 0x7a, 0xd9, 0xf9, 0x75, 0x27, 0x04, 0x03, 0x6f, 0x07, 0x89, 0x20, 0x02, 0x56, 0xf7, 0xfd, 0x70, 0xaa, 0xff, 0x91, 0xee, 0x00, 0x6b, 0x50, 0xff, 0x14, 0xa6, 0x02, 0xe4, 0x35, 0xff, 0x36, 0x8f, 0x00, 0x44, 0x98, 0x01, 0x73, 0xeb, 0xff, 0x28, 0x20, 0x00, 0x2a, 0xc2, 0x00, 0xfd, 0x5b, 0x01, 0x8e, 0x95, 0xff, 0xa6, 0x58, 0xff, 0xf2, 0xdd, 0xfe, 0xf8, 0x7a, 0xff, 0x1f, 0x29, 0x00, 0xcc, 0x92, 0x00, 0x86, 0xc1, 0xff, 0xb1, 0xaf, 0xff, 0x56, 0xf2, 0xff, 0x32, 0x1d, 0xff, 0xca, 0x76, 0xff, 0xd4, 0x37, 0x00, 0x64, 0x6c, 0x1a, 0x63, 0x0a, 0x20, 0x0a, 0x6c, 0x03, 0xb5, 0xee, 0xfa, 0x18, 0x04, 0xfb, 0xeb, 0x1a, 0x04, 0xd0, 0x0e, 0x07, 0x87, 0x4c, 0x02, 0x79, 0x69, 0xfe, 0x87, 0x83, 0xff, 0x14, 0xe8, 0x01, 0x95, 0x94, 0xff, 0x6f, 0xbf, 0x01, 0x4f, 0x1f, 0x00, 0xbf, 0x7d, 0x00, 0x4a, 0xe0, 0x00, 0xb4, 0x44, 0x00, 0x5f, 0x06, 0x00, 0xdc, 0x49, 0x00, 0xbd, 0x53, 0x01, 0x65, 0xcc, 0xff, 0x1c, 0x0d, 0xff, 0xd0, 0xc0, 0xfe, 0x56, 0xff, 0xff, 0x00, 0xbd, 0xff, 0x90, 0x4a, 0x00, 0x6d, 0x38, 0x00, 0x55, 0xb0, 0xff, 0x42, 0xa2, 0xff, 0x42, 0x31, 0x00, 0x09, 0x57, 0x00, 0x00, 0x2f, 0xff, 0xbd, 0xd8, 0x19, 0x49, 0xba, 0x1f, 0x97, 0xb7, 0x03, 0x9a, 0xf9, 0xfa, 0x54, 0x03, 0xfc, 0x4f, 0x5d, 0x04, 0x14, 0xb4, 0x06, 0xa4, 0x14, 0x02, 0x67, 0x4c, 0xfe, 0x9b, 0xbf, 0xff, 0x46, 0xe1, 0x01, 0xc6, 0x2f, 0x00, 0xb8, 0x8b, 0x01, 0x3f, 0x9f, 0xff, 0x6a, 0x12, 0x01, 0x9d, 0x68, 0x00, 0x6e, 0xa4, 0xff, 0xb0, 0x74, 0x00, 0x45, 0x24, 0x00, 0xb2, 0xbb, 0x00, 0xfe, 0xeb, 0xff, 0x22, 0x98, 0xff, 0x2d, 0x76, 0xfe, 0x12, 0xaa, 0xff, 0xc6, 0xf6, 0xff, 0x09, 0x38, 0x00, 0xf2, 0x01, 0x00, 0xdb, 0x80, 0xff, 0x27, 0xf8, 0x00, 0xd9, 0x9c, 0x00, 0x7c, 0x47, 0xff, 0xd0, 0x6d, 0xff, 0xa6, 0x6d, 0x19, 0x52, 0x0f, 0x20, 0xef, 0xea, 0x03, 0x64, 0xed, 0xfa, 0xf2, 0xca, 0xfc, 0xe1, 0x9b, 0x04, 0x75, 0x73, 0x06, 0x50, 0xce, 0x01, 0x4e, 0xcf, 0xfd, 0xb9, 0x6d, 0xff, 0xb1, 0xfe, 0x01, 0xb3, 0xd3, 0xff, 0xfd, 0xcb, 0x01, 0xbd, 0xd4, 0xff, 0x1d, 0x54, 0x00, 0xa0, 0xc7, 0x00, 0xe3, 0x56, 0xff, 0x2e, 0xb3, 0xff, 0x72, 0x9b, 0x00, 0x17, 0x91, 0x00, 0x38, 0x6c, 0xff, 0x50, 0xec, 0xff, 0x8a, 0xde, 0xfe, 0x92, 0xdc, 0xfe, 0x3a, 0xc4, 0xff, 0x09, 0xa6, 0x00, 0xe7, 0x2d, 0xff, 0x16, 0x5b, 0x00, 0x0a, 0xc9, 0x01, 0x83, 0x6f, 0xff, 0xba, 0x9d, 0xff, 0x6c, 0x52, 0xff, 0x18, 0xb8, 0x19, 0x4c, 0xc5, 0x20, 0x0d, 0xd4, 0x03, 0x4e, 0x8f, 0xfa, 0x75, 0x8b, 0xfd, 0x6f, 0x52, 0x05, 0xd0, 0x8e, 0x06, 0xe3, 0x76, 0x01, 0x81, 0x88, 0xfd, 0x2f, 0xde, 0xfe, 0xcd, 0xaf, 0x01, 0xa5, 0xe0, 0xff, 0xa8, 0x5a, 0x01, 0x28, 0x3d, 0x00, 0xba, 0xea, 0x00, 0xb9, 0x54, 0x00, 0xec, 0x55, 0xff, 0x42, 0x09, 0x00, 0xed, 0xed, 0xff, 0xe1, 0xbc, 0x00, 0x76, 0xed, 0xff, 0x9e, 0x97, 0xff, 0x77, 0xde, 0xfe, 0x8a, 0x31, 0xff, 0x6a, 0xe5, 0xff, 0xab, 0xad, 0xff, 0x91, 0xc5, 0xff, 0x86, 0xba, 0x01, 0xc9, 0x78, 0x00, 0xb1, 0x7a, 0xff, 0xad, 0x64, 0x00, 0x5f, 0xb8, 0xfe, 0x21, 0x49, 0x1a, 0xf3, 0xe1, 0x21, 0xd5, 0xad, 0x03, 0x1b, 0x6f, 0xf9, 0x2a, 0xee, 0xfd, 0x87, 0xfa, 0x05, 0xc1, 0xd6, 0x06, 0x2a, 0x63, 0x01, 0x3f, 0xa3, 0xfc, 0xc6, 0x5e, 0xfe, 0x39, 0x82, 0x01, 0x9f, 0x0c, 0xff, 0x7c, 0xd7, 0x00, 0x9c, 0x3b, 0x00, 0xba, 0xcc, 0x00, 0xed, 0xd1, 0x00, 0x53, 0x40, 0xff, 0xaf, 0x81, 0xff, 0xb1, 0x48, 0x00, 0x89, 0x41, 0x00, 0x2d, 0x69, 0xff, 0x76, 0x17, 0x00, 0xdf, 0x7b, 0xfe, 0xf3, 0x16, 0xff, 0x6b, 0x24, 0x00, 0x2c, 0x2c, 0xff, 0x40, 0x22, 0x00, 0xf0, 0xb1, 0x01, 0xf1, 0xb1, 0xff, 0x45, 0xbf, 0xff, 0xf6, 0x03, 0x00, 0x0f, 0xc8, 0xfe, 0x66, 0xed, 0x1a, 0x0c, 0x92, 0x23, 0x98, 0xbc, 0x03, 0x00, 0x38, 0xf8, 0xae, 0x0c, 0xfe, 0xe4, 0x93, 0x06, 0xc5, 0x3a, 0x07, 0x80, 0x78, 0x01, 0x5a, 0x27, 0xfc, 0xa0, 0xb4, 0xfd, 0x99, 0x8a, 0x01, 0x20, 0xcc, 0xfe, 0x82, 0xf1, 0xff, 0xcf, 0xd4, 0xff, 0x0a, 0xf0, 0x00, 0x77, 0xac, 0x00, 0x68, 0x51, 0xff, 0xad, 0x0d, 0x00, 0x82, 0x0e, 0x00, 0xa1, 0x32, 0x00, 0x47, 0x68, 0xff, 0xf3, 0x82, 0xff, 0xa9, 0x50, 0xfe, 0xad, 0x98, 0xff, 0xda, 0x2d, 0x00, 0xbd, 0xe8, 0xfe, 0x65, 0xa7, 0x00, 0xd9, 0x95, 0x01, 0xad, 0xe8, 0xfe, 0x7a, 0xb6, 0xff, 0xbc, 0x03, 0x00, 0x7b, 0xca, 0xfe, 0x09, 0xea, 0x1b, 0x3d, 0xac, 0x25, 0x9e, 0xaf, 0x03, 0xb7, 0xa0, 0xf6, 0x2a, 0x4f, 0xfe, 0xab, 0x37, 0x07, 0xa9, 0x94, 0x07, 0xa7, 0x95, 0x01, 0x3d, 0x72, 0xfb, 0x83, 0xa1, 0xfd, 0x31, 0xba, 0x01, 0x96, 0x66, 0xfe, 0xcb, 0x72, 0xff, 0xdf, 0x86, 0xff, 0x54, 0x8c, 0x00, 0x53, 0x7c, 0x00, 0xa2, 0x22, 0xff, 0x08, 0xea, 0xff, 0x79, 0xa2, 0x00, 0xe8, 0x72, 0x00, 0xc4, 0x0b, 0xff, 0x23, 0x86, 0xff, 0x2e, 0x14, 0xfe, 0xf2, 0x2d, 0xff, 0xa6, 0xab, 0x00, 0x02, 0x4a, 0xff, 0xf3, 0x65, 0x00, 0x45, 0xd2, 0x01, 0x6e, 0xcf, 0xfe, 0xfd, 0x43, 0xff, 0xa1, 0x9a, 0xff, 0xd6, 0xea, 0xfe, 0xb7, 0x97, 0x1d, 0x12, 0xb8, 0x27, 0x1b, 0x35, 0x03, 0x9b, 0x11, 0xf5, 0xe1, 0x85, 0xfe, 0x8d, 0x0e, 0x08, 0xe4, 0xa6, 0x07, 0xc4, 0x41, 0x01, 0x83, 0x9d, 0xfa, 0x7e, 0x8f, 0xfd, 0x85, 0x58, 0x02, 0x4d, 0x1c, 0xfe, 0x63, 0xd2, 0xfe, 0x87, 0x08, 0xff, 0x52, 0x8b, 0x00, 0x4f, 0x1e, 0x00, 0x83, 0x69, 0xfe, 0x97, 0xbd, 0xff, 0x9d, 0xa3, 0x00, 0x39, 0x76, 0x00, 0x07, 0x32, 0xff, 0x76, 0x8d, 0xff, 0x4f, 0xd7, 0xfd, 0x44, 0x26, 0xff, 0xdd, 0x9e, 0x00, 0xd0, 0x1f, 0xff, 0x11, 0x32, 0x00, 0x49, 0x4d, 0x02, 0x10, 0x10, 0xff, 0x91, 0x6f, 0xfe, 0x9a, 0x81, 0xff, 0xd9, 0xc9, 0xfe, 0x72, 0xa0, 0x1f, 0x85, 0x0b, 0x2a, 0x7d, 0x48, 0x02, 0xb7, 0x3f, 0xf3, 0xc8, 0xd5, 0xfe, 0xfa, 0xec, 0x08, 0x32, 0xa1, 0x07, 0x12, 0x93, 0x00, 0xaf, 0xa2, 0xf9, 0xf9, 0x5b, 0xfd, 0x6c, 0x0d, 0x03, 0xd9, 0xdf, 0xfd, 0x47, 0x12, 0xfe, 0xd1, 0xb2, 0xfe, 0xc6, 0x36, 0x00, 0x39, 0xb6, 0xff, 0x72, 0xfc, 0xfd, 0xab, 0x17, 0xff, 0xa1, 0x55, 0x00, 0x3f, 0x3e, 0x00, 0x88, 0xc1, 0xfe, 0x2c, 0xbb, 0xff, 0x16, 0x1a, 0xfe, 0x2b, 0xfb, 0xfe, 0x7e, 0x9a, 0x00, 0xdd, 0x5e, 0xff, 0xb9, 0xeb, 0xfe, 0x78, 0x14, 0x02, 0x27, 0x78, 0x00, 0xfe, 0xc3, 0xfd, 0x09, 0xd8, 0xfe, 0x8a, 0xe0, 0xfe, 0x54, 0x94, 0x22, 0xb5, 0xaa, 0x2c, 0xf9, 0xf1, 0x00, 0x26, 0x8d, 0xf1, 0xcb, 0x7a, 0xff, 0x1d, 0x43, 0x0a, 0xaa, 0x92, 0x07, 0x15, 0xc2, 0xff, 0xb2, 0x9f, 0xf8, 0x6e, 0xb3, 0xfd, 0xf0, 0x00, 0x04, 0x1b, 0xe2, 0xfd, 0x01, 0x7a, 0xfd, 0x86, 0x77, 0xfe, 0x41, 0x81, 0x00, 0x35, 0x61, 0xff, 0x8b, 0x79, 0xfd, 0xfe, 0x31, 0xff, 0xf3, 0x26, 0x00, 0xf0, 0xbc, 0xff, 0x53, 0xa1, 0xfe, 0xa0, 0x82, 0xff, 0x2a, 0xb0, 0xfe, 0xde, 0x90, 0xff, 0x44, 0x72, 0x00, 0x9a, 0xee, 0xff, 0xbd, 0x77, 0xfe, 0xc9, 0xf4, 0x00, 0x22, 0x7e, 0x01, 0x59, 0x7c, 0xfe, 0x92, 0x21, 0xfe, 0xfd, 0x1a, 0xff, 0x22, 0xe3, 0x25, 0xe2, 0x12, 0x2f, 0x22, 0x65, 0xff, 0xa9, 0xe8, 0xef, 0xf4, 0xf9, 0xff, 0x68, 0x98, 0x0b, 0x54, 0x3e, 0x07, 0xe7, 0xac, 0xfe, 0x69, 0x47, 0xf7, 0x67, 0x15, 0xfe, 0xdd, 0xea, 0x04, 0x15, 0xd0, 0xfd, 0xed, 0xc1, 0xfc, 0x8c, 0x03, 0xfe, 0x2f, 0x9c, 0x00, 0x54, 0x36, 0xff, 0xee, 0xd9, 0xfc, 0x76, 0xe8, 0xfe, 0xf6, 0x56, 0x00, 0xb3, 0xe4, 0xfe, 0xcf, 0x5b, 0xfe, 0x20, 0x35, 0xff, 0x17, 0x9e, 0xfe, 0xf4, 0x8a, 0x00, 0x28, 0x4c, 0x00, 0xd2, 0xf8, 0xff, 0x94, 0xa7, 0xfe, 0x2e, 0x97, 0xff, 0xc0, 0x73, 0x01, 0x00, 0xcd, 0xff, 0x52, 0x71, 0xfd, 0x3d, 0xda, 0xfe, 0xb8, 0x2f, 0x29, 0xb1, 0xf9, 0x31, 0xeb, 0xe9, 0xfd, 0xb4, 0x55, 0xee, 0xce, 0x55, 0x00, 0xaa, 0x03, 0x0d, 0x8e, 0x05, 0x07, 0x85, 0x85, 0xfd, 0x9f, 0x2f, 0xf6, 0xbb, 0x37, 0xfe, 0x96, 0x20, 0x06, 0x6a, 0xb0, 0xfd, 0x3a, 0x3b, 0xfc, 0x20, 0xa9, 0xfd, 0x8f, 0x9b, 0x00, 0x3a, 0x10, 0xff, 0x1d, 0x92, 0xfc, 0x44, 0x8f, 0xfe, 0x5d, 0x98, 0x00, 0x11, 0x6e, 0xfe, 0xa0, 0xd8, 0xfd, 0x2c, 0x52, 0xff, 0xef, 0x4d, 0xfe, 0xc8, 0x5e, 0x01, 0x2d, 0x96, 0x00, 0xff, 0xcd, 0xff, 0x43, 0xe8, 0xfe, 0x67, 0x01, 0xff, 0xe7, 0x56, 0x00, 0x24, 0x35, 0x01, 0xcb, 0xfd, 0xfd, 0x1b, 0xba, 0xfd, 0x1a, 0xc1, 0x2b, 0x47, 0x35, 0x35, 0xaf, 0x16, 0xfd, 0xfd, 0x2d, 0xed, 0xc7, 0x31, 0x00, 0x43, 0x27, 0x0e, 0xcd, 0x1a, 0x07, 0x34, 0x59, 0xfc, 0x2e, 0x93, 0xf5, 0xea, 0xea, 0xfd, 0x9f, 0x4c, 0x07, 0x17, 0x97, 0xfd, 0x92, 0xc6, 0xfb, 0x31, 0x6e, 0xfd, 0xc9, 0x97, 0x00, 0xb7, 0xdd, 0xfe, 0x3c, 0x4d, 0xfc, 0xbb, 0x63, 0xfe, 0xa8, 0x88, 0x00, 0x64, 0x84, 0xfe, 0x9d, 0x3b, 0xfd, 0x56, 0x99, 0xff, 0xb4, 0x00, 0xfe, 0xbf, 0xe5, 0x01, 0xcc, 0x15, 0x01, 0x88, 0xa6, 0xff, 0x4f, 0xfe, 0xfe, 0x77, 0xd4, 0xfe, 0xda, 0x48, 0xff, 0x66, 0x6c, 0x01, 0x9d, 0xc9, 0xff, 0x90, 0xd7, 0xfc, 0xe2, 0xc2, 0x2e, 0xaa, 0x16, 0x38, 0xf0, 0xf4, 0xfb, 0xcb, 0x7b, 0xec, 0xeb, 0xb7, 0xff, 0xeb, 0xee, 0x0e, 0x7d, 0x09, 0x07, 0xf1, 0x3a, 0xfb, 0x2f, 0xf5, 0xf4, 0xd0, 0xaf, 0xfd, 0xe5, 0x16, 0x08, 0xc0, 0x71, 0xfd, 0x82, 0x2f, 0xfb, 0xd1, 0x46, 0xfd, 0x60, 0x80, 0x00, 0x6d, 0xa9, 0xfe, 0x48, 0xf4, 0xfb, 0xb7, 0x20, 0xfe, 0x6c, 0x55, 0x00, 0xbd, 0x96, 0xfe, 0x37, 0xdd, 0xfc, 0xd6, 0xce, 0xff, 0x32, 0xf4, 0xfd, 0xd3, 0xdc, 0x01, 0xda, 0x94, 0x01, 0x32, 0x92, 0xff, 0xe7, 0xd7, 0xfe, 0x15, 0x96, 0xfe, 0xb1, 0x9f, 0xfe, 0xa4, 0xa8, 0x00, 0x87, 0x6f, 0x01, 0x78, 0x3f, 0xfd, 0xf0, 0x98, 0x32, 0x76, 0xde, 0x39, 0x09, 0x89, 0xfa, 0x95, 0x8f, 0xec, 0x73, 0x3f, 0xff, 0x10, 0x27, 0x0f, 0x94, 0xd3, 0x06, 0x19, 0x69, 0xfa, 0x59, 0x73, 0xf4, 0xd9, 0x95, 0xfd, 0x71, 0x7f, 0x08, 0x66, 0x35, 0xfd, 0x20, 0xba, 0xfa, 0xb3, 0x18, 0xfd, 0xfb, 0x71, 0x00, 0x73, 0x66, 0xfe, 0x90, 0xc1, 0xfb, 0xae, 0xc6, 0xfd, 0x6a, 0x0f, 0x00, 0x32, 0x9e, 0xfe, 0xe9, 0xeb, 0xfc, 0x9b, 0xc4, 0xff, 0x60, 0x55, 0xfe, 0x3a, 0xb5, 0x01, 0xc5, 0xa4, 0x01, 0xa8, 0xab, 0xff, 0xfe, 0xc1, 0xfe, 0xa7, 0x20, 0xfe, 0xbd, 0x46, 0xfe, 0xec, 0xf0, 0xff, 0x4f, 0xd8, 0x01, 0x76, 0xce, 0xfe, 0xca, 0x59, 0x36, 0xf9, 0xcb, 0x3b, 0x05, 0xa3, 0xf8, 0x37, 0x34, 0xed, 0x4c, 0xe1, 0xfe, 0xc4, 0x97, 0x0e, 0x87, 0xb2, 0x06, 0xc5, 0xe5, 0xf9, 0x12, 0x25, 0xf4, 0xe5, 0x3c, 0xfd, 0xba, 0xca, 0x08, 0xe0, 0xf1, 0xfc, 0x01, 0x89, 0xfa, 0xf0, 0xf2, 0xfc, 0xfb, 0x36, 0x00, 0x06, 0x50, 0xfe, 0x08, 0x9c, 0xfb, 0x8c, 0x68, 0xfd, 0xe3, 0xcd, 0xff, 0xb0, 0xca, 0xfe, 0x7c, 0x2d, 0xfd, 0x18, 0xa0, 0xff, 0x89, 0xd6, 0xfe, 0xe3, 0xa4, 0x01, 0xfd, 0x53, 0x01, 0xd3, 0xd9, 0xff, 0xf4, 0xc5, 0xfe, 0x04, 0x9d, 0xfd, 0xd9, 0xf8, 0xfd, 0xbe, 0xb7, 0xff, 0x80, 0x2a, 0x01, 0x4a, 0x64, 0x00, 0xbb, 0x10, 0x3a, 0xb6, 0xe1, 0x3d, 0x3e, 0x57, 0xf5, 0x66, 0x4b, 0xee, 0x53, 0xd3, 0xfe, 0x92, 0x40, 0x0d, 0xef, 0xb6, 0x06, 0x3e, 0x7a, 0xf9, 0x58, 0xdb, 0xf3, 0x4f, 0x88, 0xfc, 0xcc, 0xe7, 0x08, 0x39, 0x83, 0xfc, 0xcb, 0xce, 0xfa, 0x7c, 0x92, 0xfc, 0x1e, 0xe4, 0xff, 0x0b, 0x36, 0xfe, 0xce, 0x5d, 0xfb, 0x6d, 0x26, 0xfd, 0x2d, 0x5b, 0xff, 0xe4, 0x48, 0xff, 0xea, 0x2f, 0xfd, 0xed, 0x91, 0xff, 0x05, 0x27, 0xff, 0x0b, 0x75, 0x01, 0x04, 0xbf, 0x00, 0xf5, 0x22, 0x00, 0x7e, 0x8c, 0xfe, 0x7a, 0x46, 0xfd, 0x79, 0xcc, 0xfd, 0x07, 0x7c, 0xff, 0xb1, 0x31, 0x00, 0x0b, 0x34, 0x01, 0x99, 0xd2, 0x3f, 0xab, 0xa0, 0x3e, 0xac, 0x0a, 0xf0, 0xa9, 0x67, 0xf0, 0x8f, 0x4f, 0xff, 0x77, 0xc7, 0x0b, 0x28, 0x68, 0x06, 0x02, 0xf1, 0xf8, 0x54, 0x68, 0xf3, 0xb8, 0x3b, 0xfc, 0x2f, 0x00, 0x09, 0xd1, 0xdb, 0xfb, 0x8f, 0xdd, 0xfb, 0x36, 0xe6, 0xfb, 0xf6, 0xf2, 0xff, 0x02, 0xd7, 0xfd, 0x89, 0x1c, 0xfb, 0x4b, 0x35, 0xfd, 0x17, 0x2c, 0xff, 0x34, 0xc5, 0xff, 0x54, 0x00, 0xfd, 0xae, 0x08, 0x00, 0x11, 0xd0, 0xfe, 0x92, 0x65, 0x01, 0xbf, 0x5e, 0x00, 0x4a, 0x40, 0x00, 0x58, 0x40, 0xfe, 0x58, 0x5c, 0xfd, 0x33, 0xf7, 0xfd, 0x63, 0xb5, 0xfe, 0x8e, 0xcb, 0xff, 0xff, 0x7b, 0x01, 0x3e, 0x4b, 0x47, 0x1d, 0x9a, 0x3d, 0x08, 0x58, 0xe9, 0xd3, 0x77, 0xf3, 0xcf, 0x82, 0xff, 0x9b, 0xe3, 0x0a, 0xa5, 0x67, 0x05, 0x7a, 0x5d, 0xf8, 0x83, 0xa9, 0xf2, 0x1a, 0x76, 0xfc, 0xc8, 0x2f, 0x09, 0xa8, 0x25, 0xfb, 0xec, 0x3c, 0xfd, 0x77, 0x36, 0xfb, 0x41, 0x26, 0x00, 0xda, 0x2c, 0xfd, 0x9e, 0x0c, 0xfb, 0xc1, 0xaf, 0xfd, 0xc6, 0x1e, 0xff, 0xfd, 0xbf, 0xff, 0xd9, 0x42, 0xfd, 0x00, 0x19, 0x00, 0x7c, 0xec, 0xfd, 0x24, 0x11, 0x02, 0xf2, 0xca, 0xff, 0x79, 0x24, 0x00, 0x20, 0x85, 0xfe, 0xa6, 0x88, 0xfd, 0xa6, 0xbe, 0xfd, 0xc8, 0x20, 0xfe, 0x91, 0x0f, 0x00, 0xd4, 0xe2, 0x00, 0x2f, 0x8d, 0x4e, 0x8a, 0xa1, 0x3b, 0x80, 0xde, 0xe2, 0x47, 0xb0, 0xf6, 0x8d, 0x56, 0xff, 0x85, 0x74, 0x0a, 0x29, 0xdf, 0x03, 0x2c, 0xaf, 0xf7, 0xd0, 0xca, 0xf1, 0x6a, 0x05, 0xfd, 0x15, 0xa7, 0x09, 0xa1, 0x45, 0xfa, 0xa4, 0xe0, 0xfe, 0xa5, 0x8f, 0xfa, 0xff, 0x18, 0x00, 0x0e, 0x87, 0xfc, 0xc1, 0x83, 0xfb, 0x4f, 0x5d, 0xfe, 0x8e, 0x3a, 0xfe, 0x85, 0x46, 0x00, 0x90, 0x19, 0xfd, 0xf1, 0x22, 0xff, 0x4f, 0x1d, 0xfe, 0x0a, 0x66, 0x02, 0x9e, 0xfe, 0xfe, 0xb2, 0xcd, 0x00, 0x9e, 0xde, 0xfe, 0xb1, 0xd8, 0xfc, 0x42, 0xe1, 0xfd, 0xff, 0x54, 0xfe, 0x42, 0x6c, 0xff, 0xa2, 0x2b, 0x00, 0xaf, 0x3b, 0x55, 0xb3, 0x0a, 0x39, 0x8a, 0x2a, 0xdd, 0xce, 0xed, 0xf9, 0x57, 0xcc, 0xfe, 0x9c, 0x44, 0x0a, 0x69, 0x4d, 0x02, 0xbb, 0xce, 0xf6, 0x70, 0x59, 0xf1, 0xb4, 0x63, 0xfe, 0xa6, 0xbb, 0x09, 0x22, 0xa4, 0xf9, 0xfa, 0xfb, 0x00, 0x4a, 0x75, 0xf9, 0x58, 0x1e, 0x00, 0xc4, 0xbf, 0xfc, 0xe1, 0x2e, 0xfc, 0x05, 0x40, 0xfe, 0x82, 0xf1, 0xfd, 0x9b, 0x4c, 0x00, 0x73, 0x23, 0xfc, 0x56, 0x67, 0xff, 0xd7, 0xdd, 0xfd, 0x79, 0xb2, 0x02, 0xc4, 0x66, 0xff, 0xea, 0x4c, 0x01, 0x9d, 0x64, 0xfe, 0x33, 0xbb, 0xfc, 0x80, 0xb7, 0xfe, 0x63, 0xa2, 0xfd, 0x93, 0xb9, 0xfe, 0xd1, 0x49, 0x00, 0x23, 0x40, 0x5a, 0x9d, 0x9a, 0x36, 0x27, 0xab, 0xd8, 0xbd, 0xfe, 0xfc, 0xf5, 0x28, 0xfd, 0xd0, 0x5a, 0x0a, 0x94, 0x2c, 0x01, 0x79, 0x91, 0xf5, 0x97, 0xf1, 0xf1, 0x81, 0x98, 0xff, 0xd6, 0x61, 0x09, 0x8f, 0xb1, 0xf9, 0x46, 0xc1, 0x02, 0xb2, 0xf1, 0xf7, 0xb7, 0x20, 0x01, 0x8e, 0x62, 0xfd, 0xe0, 0xac, 0xfb, 0x1f, 0xe4, 0xfe, 0x0b, 0x90, 0xfc, 0x14, 0x1e, 0x00, 0x51, 0x71, 0xfc, 0xa6, 0xa2, 0xfe, 0xe4, 0x0d, 0xfe, 0x4d, 0x12, 0x04, 0x4c, 0x54, 0xff, 0xc6, 0xf9, 0x00, 0x67, 0xc3, 0xfe, 0xc0, 0xde, 0xfc, 0x9f, 0x82, 0xfe, 0x50, 0x2a, 0xfd, 0x11, 0x99, 0xfe, 0x7e, 0x37, 0x00, 0x55, 0x8a, 0x5d, 0xc9, 0x46, 0x33, 0xfb, 0xca, 0xd6, 0x08, 0x38, 0xff, 0xc4, 0x52, 0xfa, 0x17, 0x26, 0x0b, 0x4d, 0xa7, 0x00, 0x37, 0xab, 0xf4, 0x5b, 0xab, 0xf2, 0xfb, 0xe0, 0x00, 0x50, 0xa1, 0x08, 0x26, 0x07, 0xfa, 0x71, 0xfb, 0x03, 0x69, 0x6b, 0xf7, 0x14, 0x1f, 0x02, 0x83, 0x5f, 0xfd, 0x61, 0xad, 0xfb, 0x22, 0xd5, 0xfd, 0x2e, 0x1f, 0xfc, 0xdf, 0x9c, 0x00, 0x4d, 0xbc, 0xfb, 0xfd, 0xd1, 0xfe, 0xe8, 0xfa, 0xfe, 0x85, 0x8b, 0x04, 0x84, 0xce, 0xfe, 0x65, 0x9f, 0x01, 0x07, 0xcc, 0xfe, 0x33, 0x55, 0xfc, 0xbf, 0xa4, 0xfe, 0xeb, 0xef, 0xfc, 0x4d, 0x75, 0xfe, 0x07, 0x31, 0x00, 0xff, 0xbf, 0x5e, 0x15, 0x80, 0x2f, 0x3b, 0xf7, 0xd7, 0xe7, 0xd8, 0xff, 0xb3, 0x9a, 0xf6, 0x02, 0xb5, 0x0c, 0x72, 0x38, 0x01, 0x3a, 0x82, 0xf3, 0x99, 0x84, 0xf3, 0x25, 0x86, 0x02, 0x8d, 0xcc, 0x06, 0x93, 0xb2, 0xfa, 0xae, 0x1c, 0x06, 0x56, 0x57, 0xf6, 0x15, 0xd3, 0x02, 0x4b, 0xae, 0xfd, 0x54, 0xd2, 0xf9, 0xea, 0x69, 0xfe, 0x36, 0x09, 0xfc, 0x0b, 0x16, 0x00, 0x88, 0xaf, 0xfc, 0x50, 0x02, 0xff, 0xc8, 0x0d, 0xff, 0x5e, 0xb0, 0x04, 0x6f, 0x3e, 0xff, 0xf2, 0x71, 0x01, 0x35, 0xa7, 0xfe, 0x05, 0x18, 0xfc, 0x4b, 0xc4, 0xfe, 0x13, 0xf8, 0xfc, 0xe7, 0x2e, 0xfe, 0x02, 0x7d, 0x00, 0xe6, 0x9e, 0x5c, 0x9d, 0x27, 0x2d, 0x88, 0xc0, 0xda, 0xa2, 0x51, 0xff, 0x73, 0xd5, 0xf2, 0xf4, 0x01, 0x0f, 0xec, 0x2b, 0x02, 0x26, 0x6a, 0xf2, 0xa0, 0x0c, 0xf5, 0xff, 0xdc, 0x02, 0x08, 0xe8, 0x04, 0xed, 0xaf, 0xfc, 0x69, 0xd9, 0x06, 0xa8, 0xbc, 0xf5, 0xc2, 0x15, 0x03, 0x8d, 0xa8, 0xfc, 0xfc, 0xcf, 0xf9, 0x07, 0xbb, 0xfe, 0x7e, 0xc6, 0xfb, 0x03, 0xcc, 0x00, 0xe2, 0x6c, 0xfd, 0x67, 0x8e, 0xfe, 0x04, 0xeb, 0xfe, 0x4f, 0x47, 0x05, 0xc8, 0xf6, 0xfe, 0xfb, 0x28, 0x01, 0x72, 0xb2, 0xfe, 0x75, 0xfa, 0xfb, 0x07, 0x30, 0xff, 0x53, 0xa0, 0xfc, 0x9a, 0x50, 0xfe, 0xe7, 0xe8, 0x00, 0x2e, 0x9d, 0x57, 0xc5, 0xac, 0x2b, 0x0a, 0x27, 0xdf, 0x98, 0xfa, 0xfd, 0x4a, 0x47, 0xf0, 0x7c, 0x78, 0x10, 0xc1, 0x7f, 0x03, 0x1f, 0x8c, 0xf2, 0x60, 0xbb, 0xf5, 0x2d, 0xd9, 0x02, 0x66, 0x33, 0x04, 0xa5, 0x65, 0xfd, 0x84, 0x9b, 0x07, 0x79, 0x49, 0xf5, 0x67, 0xdb, 0x01, 0xbd, 0x99, 0xfd, 0x49, 0x5d, 0xf9, 0x9c, 0x4d, 0xff, 0x86, 0x85, 0xfc, 0xf3, 0x16, 0x01, 0xdc, 0xb7, 0xfd, 0x9a, 0x37, 0xfe, 0xb3, 0xf0, 0xfe, 0x37, 0x2a, 0x05, 0x13, 0xc9, 0xfe, 0x5c, 0x9c, 0x00, 0x42, 0x6c, 0xff, 0xc6, 0xea, 0xfb, 0x6e, 0x3c, 0xff, 0xd3, 0xbf, 0xfc, 0xfb, 0xd6, 0xfe, 0xab, 0xd5, 0x00, 0xe6, 0x19, 0x51, 0xda, 0x5f, 0x29, 0x8a, 0xbb, 0xe5, 0x10, 0x41, 0xfc, 0x52, 0xff, 0xee, 0xac, 0x95, 0x10, 0xe4, 0x37, 0x05, 0x0b, 0x3d, 0xf3, 0x24, 0x69, 0xf6, 0x1e, 0x7a, 0x03, 0xbe, 0x0c, 0x02, 0xb6, 0xfb, 0xfe, 0x42, 0x12, 0x07, 0x57, 0xe1, 0xf4, 0x91, 0xd5, 0x01, 0x0e, 0xd3, 0xfd, 0x33, 0x00, 0xfa, 0x55, 0xd9, 0xff, 0x04, 0x95, 0xfd, 0x17, 0x9a, 0x00, 0x9f, 0x33, 0xfe, 0x96, 0x3a, 0xfe, 0xd7, 0x9f, 0xfe, 0xa3, 0x95, 0x04, 0xae, 0x9f, 0xfe, 0xaa, 0xc9, 0x00, 0x17, 0xbc, 0xff, 0x86, 0x01, 0xfc, 0xbb, 0x6b, 0xff, 0x48, 0x76, 0xfd, 0x42, 0xd0, 0xfe, 0x5d, 0xc9, 0x00, 0x43, 0x33, 0x48, 0xef, 0x71, 0x28, 0x5d, 0x43, 0xec, 0x7e, 0x20, 0xfb, 0x9a, 0x81, 0xee, 0x54, 0x92, 0x0f, 0x86, 0xaa, 0x06, 0x2b, 0xe1, 0xf4, 0x23, 0xd0, 0xf7, 0x17, 0x0c, 0x02, 0x93, 0x5d, 0x01, 0x91, 0x4c, 0xff, 0x5a, 0xce, 0x05, 0x77, 0x1e, 0xf6, 0x65, 0xdc, 0x00, 0x71, 0xc9, 0xfe, 0xf1, 0xa9, 0xfa, 0x32, 0x6d, 0x00, 0x5c, 0x15, 0xfe, 0xd5, 0x08, 0x00, 0xfe, 0x08, 0xff, 0x9f, 0x28, 0xfe, 0xc4, 0xcf, 0xfd, 0xfa, 0xd8, 0x03, 0xe0, 0x29, 0xff, 0x6c, 0x77, 0x00, 0x26, 0x0d, 0x00, 0xba, 0x71, 0xfc, 0xc0, 0xcd, 0xff, 0xf1, 0xc3, 0xfd, 0x33, 0xf8, 0xfe, 0x89, 0x9c, 0x00, 0x9f, 0x2f, 0x3b, 0xa4, 0xc1, 0x28, 0xbc, 0xc1, 0xf0, 0xe9, 0xb6, 0xfb, 0x7b, 0xad, 0xf8, 0x76, 0x40, 0x08, 0x23, 0x71, 0x01, 0xc4, 0x79, 0xf7, 0x06, 0x59, 0xf8, 0x07, 0x1d, 0x02, 0x33, 0x1a, 0x03, 0x94, 0x4e, 0xff, 0xcc, 0x85, 0x04, 0xe8, 0x30, 0xfa, 0x96, 0x28, 0x01, 0xcc, 0x0e, 0x00, 0x47, 0x52, 0xfc, 0x8b, 0x6e, 0xff, 0xc2, 0xed, 0xfe, 0xe6, 0x0d, 0x00, 0x8c, 0x5c, 0xfe, 0x68, 0xd0, 0xfe, 0x97, 0x6c, 0xfe, 0x55, 0x6a, 0x02, 0xf1, 0xfe, 0xfe, 0xb2, 0xe3, 0xff, 0x8f, 0x7f, 0x00, 0xc8, 0x99, 0xfd, 0x30, 0xdb, 0xfe, 0xd5, 0x3c, 0xfe, 0x30, 0x6b, 0xfe, 0xed, 0x90, 0xff, 0xf1, 0x55, 0x32, 0x0f, 0xc0, 0x27, 0xeb, 0x75, 0xf6, 0x73, 0x58, 0xfa, 0x5e, 0xa8, 0xf8, 0xa2, 0xc5, 0x07, 0x81, 0x35, 0x03, 0xbb, 0xa9, 0xf9, 0x35, 0x64, 0xf9, 0x3d, 0x72, 0x00, 0x17, 0xa7, 0x02, 0x65, 0x89, 0xff, 0x0e, 0xb6, 0x03, 0xb6, 0xa0, 0xfb, 0x6a, 0x40, 0x00, 0x21, 0x9a, 0x00, 0x76, 0x71, 0xfd, 0xa9, 0x02, 0x00, 0x69, 0x9e, 0xff, 0x08, 0x21, 0x00, 0x7b, 0x05, 0xff, 0x10, 0xae, 0xfe, 0xbc, 0xf9, 0xfd, 0x40, 0xd1, 0x01, 0x3c, 0x69, 0xff, 0x11, 0xbe, 0xff, 0xb0, 0xdc, 0x00, 0xde, 0x4b, 0xfe, 0x50, 0x0e, 0xff, 0xfb, 0x87, 0xfe, 0xfe, 0x98, 0xfe, 0x83, 0x56, 0xff, 0x78, 0x12, 0x2b, 0xcc, 0x6a, 0x26, 0xce, 0xa8, 0xfa, 0xa7, 0xb1, 0xf9, 0xab, 0x40, 0xf9, 0x30, 0xbb, 0x06, 0x2b, 0x3c, 0x04, 0xb9, 0xf0, 0xfb, 0xb3, 0x2a, 0xfa, 0x23, 0x66, 0xff, 0x84, 0x55, 0x02, 0xd5, 0x86, 0xff, 0xcf, 0x52, 0x03, 0x81, 0xf4, 0xfc, 0xaf, 0xd9, 0xff, 0x19, 0x04, 0x01, 0x2f, 0xa5, 0xfe, 0x46, 0x16, 0x00, 0xb8, 0x19, 0x00, 0xae, 0xa3, 0x00, 0xff, 0x30, 0xff, 0x4d, 0xed, 0xfe, 0x96, 0xe9, 0xfd, 0x80, 0x1c, 0x01, 0xad, 0xc6, 0xff, 0x2a, 0x97, 0xff, 0x2e, 0xb4, 0x00, 0xa5, 0xd6, 0xfe, 0x82, 0x33, 0xff, 0xb8, 0xc5, 0xfe, 0xc2, 0xed, 0xfe, 0x1d, 0xfc, 0xfe, 0xda, 0xa1, 0x25, 0xe3, 0x1b, 0x25, 0xdc, 0x38, 0xfd, 0x88, 0x4f, 0xf9, 0x9d, 0x0c, 0xfa, 0xf9, 0xb2, 0x05, 0x98, 0xb6, 0x04, 0x75, 0x8f, 0xfd, 0xc0, 0xf1, 0xfa, 0x4f, 0xdc, 0xfe, 0xac, 0x16, 0x02, 0x00, 0x96, 0xff, 0x01, 0xd6, 0x02, 0xcf, 0x27, 0xfe, 0x58, 0xde, 0xff, 0x14, 0x0a, 0x01, 0xe8, 0x6d, 0xff, 0x87, 0x06, 0x00, 0x28, 0x66, 0x00, 0x48, 0xef, 0x00, 0x3c, 0x57, 0xff, 0x45, 0x1c, 0xff, 0xbc, 0xdb, 0xfd, 0x5a, 0x60, 0x00, 0x4f, 0xbb, 0xff, 0x0e, 0x4a, 0xff, 0x3c, 0x36, 0x00, 0x37, 0x60, 0xff, 0xd6, 0x59, 0xff, 0xfd, 0xec, 0xfe, 0xd9, 0xf5, 0xfe, 0x8d, 0xc1, 0xfe, 0x02, 0x2e, 0x22, 0xe7, 0xec, 0x23, 0xe0, 0xba, 0xfe, 0x5b, 0x27, 0xf9, 0x1f, 0x0f, 0xfb, 0xaf, 0x0f, 0x05, 0xdf, 0xe8, 0x04, 0x99, 0xb7, 0xfe, 0x39, 0xae, 0xfb, 0xaf, 0xca, 0xfe, 0xa4, 0x06, 0x02, 0x61, 0x05, 0x00, 0x21, 0x8e, 0x02, 0x1b, 0x03, 0xff, 0x48, 0x69, 0x00, 0xc7, 0xda, 0x00, 0x1d, 0xc8, 0xff, 0x7b, 0x41, 0x00, 0x4a, 0x8b, 0x00, 0x52, 0xf9, 0x00, 0xd7, 0x7a, 0xff, 0xaf, 0x5e, 0xff, 0xd6, 0xda, 0xfd, 0x39, 0xb4, 0xff, 0x7f, 0x96, 0xff, 0x79, 0x27, 0xff, 0x6c, 0x22, 0x00, 0xcf, 0xf3, 0xff, 0x10, 0x5c, 0xff, 0xcb, 0xe8, 0xfe, 0xe3, 0x82, 0xff, 0xec, 0xe4, 0xfe, 0x46, 0xcd, 0x1f, 0x47, 0x37, 0x23, 0x51, 0xb2, 0xff, 0x86, 0x00, 0xf9, 0xb0, 0x1d, 0xfc, 0xce, 0xb3, 0x04, 0x97, 0xdf, 0x04, 0x88, 0x7c, 0xff, 0x08, 0xce, 0xfb, 0x62, 0xda, 0xfe, 0x96, 0x19, 0x02, 0x56, 0x45, 0x00, 0x24, 0xac, 0x02, 0x5f, 0x36, 0xff, 0xff, 0xcb, 0x00, 0x36, 0x18, 0x01, 0xf6, 0x5b, 0xff, 0x25, 0x26, 0x00, 0x38, 0xc4, 0x00, 0xe3, 0xbb, 0x00, 0x02, 0x2c, 0xff, 0x6c, 0xb8, 0xff, 0x42, 0xef, 0xfd, 0xe9, 0xd9, 0xfe, 0x5a, 0x9a, 0xff, 0xf9, 0x80, 0xff, 0x6b, 0xda, 0xff, 0x52, 0xb5, 0xff, 0xf7, 0xc4, 0xff, 0x82, 0x76, 0xff, 0x58, 0xf1, 0xfe, 0x32, 0xa7, 0xff, 0x42, 0x8d, 0x1e, 0xce, 0xf5, 0x22, 0xde, 0x24, 0x00, 0xea, 0xe5, 0xf8, 0xbf, 0x36, 0xfd, 0x21, 0xf1, 0x04, 0x2d, 0x72, 0x04, 0x0d, 0xdb, 0xff, 0xba, 0xb5, 0xfb, 0x81, 0x5a, 0xfe, 0x68, 0x8a, 0x02, 0xbe, 0x05, 0x00, 0x31, 0x80, 0x02, 0x24, 0xf7, 0xff, 0xfe, 0x88, 0x00, 0x67, 0x31, 0x01, 0xca, 0x92, 0xff, 0x77, 0x46, 0xff, 0x82, 0x93, 0x00, 0x20, 0x1e, 0x01, 0x11, 0xb5, 0xfe, 0x35, 0x2a, 0xff, 0xcd, 0x7c, 0xfe, 0xd9, 0x06, 0xff, 0xc7, 0x06, 0xff, 0x4f, 0x99, 0xff, 0x88, 0x9e, 0xff, 0xb0, 0xaa, 0xff, 0x9c, 0x15, 0x00, 0x52, 0xf5, 0xfe, 0x99, 0x82, 0x00, 0x70, 0xbb, 0x00, 0x65, 0x80, 0x1e, 0x2e, 0x51, 0x23, 0xbe, 0xd4, 0xff, 0xea, 0xad, 0xf8, 0x88, 0x47, 0xfe, 0xe8, 0xab, 0x05, 0x22, 0x72, 0x04, 0xb7, 0x3f, 0xff, 0xf0, 0x9f, 0xfb, 0x42, 0x14, 0xfe, 0x2d, 0x07, 0x02, 0xb8, 0x01, 0x00, 0x8c, 0x03, 0x02, 0xdb, 0x25, 0x00, 0x77, 0x30, 0x01, 0x40, 0xfe, 0x00, 0x1a, 0x68, 0xff, 0x05, 0x98, 0xff, 0xb9, 0x06, 0x00, 0x3d, 0x7f, 0x00, 0x4b, 0x0a, 0xff, 0x9c, 0x0a, 0xff, 0x33, 0x0f, 0xfe, 0x5d, 0x73, 0xff, 0xc8, 0x9c, 0xff, 0x0a, 0xb4, 0xfe, 0x0a, 0x6e, 0xff, 0x78, 0x31, 0x00, 0x68, 0x32, 0xff, 0x2f, 0x3c, 0x00, 0x5c, 0x84, 0x01, 0x99, 0xf5, 0xfe, 0xef, 0xca, 0x1e, 0x96, 0x97, 0x24, 0x4b, 0xb4, 0xff, 0x8d, 0xed, 0xf7, 0x8a, 0x51, 0xff, 0x1a, 0x88, 0x06, 0x90, 0xa7, 0x04, 0xf8, 0xf5, 0xfe, 0x5a, 0xdd, 0xfa, 0xbb, 0xd2, 0xfd, 0xec, 0x1f, 0x02, 0x24, 0x34, 0xff, 0x7c, 0x5f, 0x01, 0x4f, 0x52, 0x00, 0x90, 0x0a, 0x01, 0xc1, 0x90, 0x01, 0xe2, 0xa2, 0xff, 0x71, 0x72, 0xff, 0xc8, 0x76, 0x00, 0x39, 0x2a, 0x00, 0xb5, 0x0f, 0xfe, 0xe0, 0x40, 0xff, 0xbc, 0x96, 0xfe, 0x0f, 0x27, 0xff, 0x2d, 0x65, 0xff, 0x67, 0x65, 0xff, 0xc8, 0xb5, 0xff, 0x08, 0xcc, 0xfe, 0xc7, 0xe2, 0xff, 0x07, 0x88, 0x01, 0x1e, 0xf0, 0xff, 0x5e, 0xb3, 0xfe, 0x07, 0x75, 0x20, 0x56, 0x12, 0x26, 0xa0, 0xe1, 0xfe, 0xe9, 0x02, 0xf7, 0xec, 0x2a, 0x00, 0x34, 0x8f, 0x07, 0x7e, 0xb3, 0x04, 0x0c, 0x97, 0xfe, 0xc9, 0x58, 0xfa, 0xcd, 0x65, 0xfd, 0x83, 0x3f, 0x02, 0x2f, 0xf2, 0xfe, 0xd8, 0x81, 0x00, 0xe8, 0xac, 0xff, 0x63, 0x28, 0x01, 0xfe, 0x86, 0x01, 0xc6, 0x5d, 0xff, 0x9c, 0x1b, 0x00, 0x92, 0xe4, 0x00, 0x27, 0xe5, 0xff, 0x95, 0xed, 0xfd, 0x47, 0xd1, 0xfe, 0x1e, 0xfd, 0xfd, 0x0c, 0xb1, 0xff, 0xf3, 0xb9, 0xff, 0xdf, 0x1f, 0xff, 0x4c, 0xbd, 0xff, 0x70, 0x15, 0xff, 0x10, 0x25, 0x00, 0x24, 0xea, 0x00, 0x38, 0x64, 0xff, 0xf0, 0xcd, 0xfe, 0x28, 0xce, 0x22, 0xff, 0x2f, 0x28, 0xa4, 0x71, 0xfd, 0x42, 0xc8, 0xf5, 0x46, 0x41, 0x01, 0xdb, 0x47, 0x08, 0x65, 0x78, 0x04, 0x3e, 0xf8, 0xfd, 0x6b, 0x96, 0xf9, 0x5d, 0x70, 0xfd, 0x73, 0x88, 0x02, 0x3e, 0x8e, 0xfe, 0x0a, 0x9e, 0xff, 0x7a, 0x3c, 0xff, 0x58, 0x02, 0x01, 0x09, 0xf8, 0x00, 0x60, 0xed, 0xfe, 0xf9, 0xfe, 0xff, 0xfd, 0x36, 0x01, 0x24, 0x08, 0x00, 0x36, 0xe1, 0xfd, 0xe6, 0xaa, 0xfe, 0xd0, 0xab, 0xfd, 0x18, 0x8a, 0xff, 0x85, 0x5e, 0xff, 0x1c, 0x93, 0xff, 0xc6, 0xd5, 0xff, 0x6e, 0xb5, 0xfe, 0x3b, 0x16, 0x00, 0x40, 0x1f, 0x01, 0xf0, 0x20, 0xff, 0xf7, 0xcd, 0xfd, 0x0a, 0xe9, 0x25, 0x8c, 0x94, 0x2a, 0x11, 0x81, 0xfb, 0xf4, 0xb7, 0xf4, 0x1c, 0x6b, 0x02, 0xc6, 0x05, 0x09, 0xd9, 0xaa, 0x03, 0x2b, 0x22, 0xfd, 0x20, 0xdb, 0xf8, 0xf7, 0xc2, 0xfd, 0x1e, 0x50, 0x03, 0x6d, 0xd9, 0xfd, 0xf5, 0xff, 0xfe, 0x53, 0xa4, 0xfe, 0xec, 0x17, 0x01, 0x15, 0xbe, 0x00, 0x1d, 0xe5, 0xfd, 0x1f, 0xc8, 0xff, 0x4c, 0x29, 0x01, 0x0b, 0xa8, 0xff, 0x5a, 0xe8, 0xfd, 0x54, 0x08, 0xff, 0x2a, 0x84, 0xfd, 0x1f, 0xfe, 0xff, 0x24, 0x1c, 0xff, 0x6a, 0xcf, 0xfe, 0x45, 0xfe, 0xff, 0x35, 0x11, 0xff, 0x72, 0x5b, 0xff, 0x01, 0xa7, 0x00, 0x6e, 0x1f, 0x00, 0xf4, 0x8b, 0xfd, 0xd7, 0xe6, 0x29, 0xaf, 0x2a, 0x2d, 0x2f, 0x0a, 0xf9, 0x96, 0x05, 0xf4, 0x60, 0xa4, 0x03, 0x7a, 0xae, 0x09, 0x25, 0xa9, 0x02, 0x72, 0xe2, 0xfb, 0xb5, 0x45, 0xf8, 0x63, 0x58, 0xfe, 0xb5, 0x7c, 0x04, 0xf2, 0x19, 0xfd, 0xdb, 0x32, 0xfe, 0x72, 0x72, 0xfe, 0xcd, 0x23, 0x01, 0x11, 0x81, 0x00, 0x29, 0x70, 0xfd, 0x5f, 0x3a, 0xff, 0xa8, 0xd6, 0x00, 0x1f, 0x7a, 0xff, 0x4a, 0x61, 0xfd, 0xf1, 0x7d, 0xff, 0x75, 0xc8, 0xfd, 0xde, 0x6c, 0x00, 0xe2, 0x8c, 0xff, 0x30, 0x50, 0xfe, 0xf9, 0x90, 0xff, 0xfe, 0xef, 0xfe, 0x62, 0xfa, 0xfe, 0x25, 0x1f, 0x00, 0x90, 0xe8, 0x00, 0xba, 0x1f, 0xfe, 0x69, 0x63, 0x2e, 0xea, 0xf9, 0x2f, 0x76, 0x8a, 0xf6, 0xa8, 0xde, 0xf3, 0x98, 0x90, 0x04, 0xc2, 0x0e, 0x0a, 0x13, 0xc3, 0x01, 0xbf, 0xb3, 0xfa, 0x19, 0xdb, 0xf7, 0x7c, 0x11, 0xff, 0xf5, 0xc0, 0x05, 0xe8, 0x85, 0xfc, 0x93, 0x8f, 0xfd, 0xe8, 0x4d, 0xfe, 0x96, 0x7b, 0x01, 0x6e, 0x20, 0x00, 0x30, 0x25, 0xfd, 0xac, 0x29, 0xff, 0xf8, 0x40, 0x00, 0x06, 0x62, 0xff, 0x79, 0x38, 0xfd, 0x8c, 0x9c, 0xff, 0xd4, 0x4b, 0xfe, 0x67, 0xd3, 0x00, 0x91, 0xe6, 0xff, 0x5f, 0x91, 0xfe, 0xba, 0x59, 0xff, 0xa9, 0x86, 0xfe, 0x41, 0x64, 0xfe, 0x6c, 0xa5, 0xff, 0x22, 0x26, 0x01, 0x3a, 0xc1, 0xff, 0x25, 0x4b, 0x33, 0xcc, 0x8c, 0x32, 0x24, 0xb6, 0xf3, 0x1e, 0x0f, 0xf4, 0xd0, 0xb3, 0x04, 0x1b, 0xbd, 0x09, 0xd4, 0xdd, 0x00, 0x2c, 0xa4, 0xf9, 0x4d, 0x5b, 0xf7, 0xd8, 0x90, 0xff, 0xaa, 0xa2, 0x06, 0x7f, 0xba, 0xfb, 0xc6, 0x23, 0xfd, 0xd1, 0x00, 0xfe, 0x57, 0x95, 0x01, 0xcf, 0xbb, 0xff, 0x6e, 0xa7, 0xfc, 0xe3, 0xcb, 0xfe, 0xe2, 0xd9, 0xff, 0xa2, 0x47, 0xff, 0x68, 0xf7, 0xfc, 0xbd, 0xb2, 0xff, 0xd4, 0x90, 0xfe, 0x66, 0xdd, 0x00, 0xea, 0xde, 0xff, 0x21, 0xfe, 0xfe, 0x9f, 0x09, 0xff, 0x8f, 0x25, 0xfe, 0x5a, 0xc1, 0xfd, 0xa0, 0xef, 0xfe, 0xa3, 0xa4, 0x00, 0x75, 0x04, 0x01, 0x05, 0x3e, 0x38, 0xf0, 0x24, 0x35, 0xa4, 0xc2, 0xf0, 0x95, 0xe3, 0xf4, 0xfe, 0x48, 0x04, 0x1a, 0xdb, 0x08, 0x2a, 0x5e, 0x00, 0xa6, 0x0a, 0xf9, 0x62, 0x0c, 0xf7, 0xba, 0xc8, 0xff, 0x83, 0x54, 0x07, 0xad, 0x1f, 0xfb, 0x96, 0x1a, 0xfd, 0x6e, 0xcc, 0xfd, 0x34, 0x8f, 0x01, 0x2f, 0x8b, 0xff, 0xfa, 0x44, 0xfc, 0xf8, 0x62, 0xfe, 0x26, 0xa4, 0xff, 0x36, 0x7d, 0xff, 0x4d, 0xe3, 0xfc, 0x1a, 0x04, 0x00, 0x84, 0xa6, 0xfe, 0xc2, 0xd2, 0x00, 0x08, 0xae, 0xff, 0xdc, 0x85, 0xff, 0xc1, 0xe3, 0xfe, 0x1a, 0xe1, 0xfd, 0x09, 0x91, 0xfd, 0xef, 0x17, 0xfe, 0x4b, 0x4b, 0x00, 0x8d, 0x83, 0x01, 0x28, 0xd7, 0x3d, 0x04, 0xba, 0x36, 0x32, 0xe5, 0xec, 0xc6, 0x43, 0xf6, 0x9e, 0x5f, 0x03, 0x5c, 0x53, 0x07, 0x99, 0xc2, 0xff, 0x61, 0x87, 0xf8, 0x1e, 0x8f, 0xf6, 0xb1, 0xb7, 0xff, 0x19, 0x90, 0x07, 0xef, 0x8d, 0xfa, 0xa2, 0x5a, 0xfd, 0xd1, 0x5c, 0xfd, 0x76, 0x63, 0x01, 0x87, 0x24, 0xff, 0xdc, 0xd9, 0xfb, 0x8f, 0xfc, 0xfd, 0x26, 0x7d, 0xff, 0xff, 0x6e, 0xff, 0xb0, 0xdc, 0xfc, 0x4e, 0x37, 0x00, 0xde, 0x34, 0xfe, 0x45, 0xdc, 0x00, 0x25, 0x29, 0xff, 0x89, 0xb1, 0xff, 0xef, 0xed, 0xfe, 0xe6, 0x91, 0xfd, 0x9f, 0x67, 0xfd, 0xd1, 0x1c, 0xfd, 0xb5, 0x31, 0x00, 0x26, 0x46, 0x01, 0x90, 0x3b, 0x44, 0x10, 0x20, 0x37, 0x1d, 0x05, 0xe8, 0xa2, 0x80, 0xf8, 0x10, 0x8c, 0x02, 0x88, 0xc9, 0x05, 0x6c, 0xe0, 0xfe, 0xbb, 0x43, 0xf8, 0x32, 0x09, 0xf6, 0xb1, 0xbc, 0xff, 0x84, 0x27, 0x08, 0x12, 0xd9, 0xf9, 0x53, 0x3f, 0xfe, 0xd5, 0x0d, 0xfd, 0xa3, 0x36, 0x01, 0x84, 0xa4, 0xfe, 0x99, 0xe4, 0xfb, 0x77, 0x21, 0xfe, 0xcb, 0xc4, 0xfe, 0x95, 0xde, 0xff, 0x2d, 0xe5, 0xfc, 0xe0, 0xb1, 0xff, 0xdd, 0x39, 0xfe, 0xf1, 0x03, 0x01, 0xb3, 0x85, 0xfe, 0x35, 0x29, 0x00, 0x72, 0x55, 0xff, 0x96, 0xed, 0xfc, 0x37, 0x73, 0xfd, 0xcb, 0x01, 0xfd, 0xb2, 0xa9, 0xff, 0xb9, 0xcb, 0x00, 0x35, 0x05, 0x4b, 0xca, 0x9c, 0x35, 0x1e, 0x00, 0xe3, 0x09, 0x88, 0xfb, 0x83, 0xe3, 0x01, 0x9d, 0x74, 0x04, 0x03, 0x82, 0xfd, 0xe0, 0x3e, 0xf8, 0xf6, 0x47, 0xf5, 0x2c, 0xc8, 0x00, 0x9a, 0x9b, 0x08, 0xc0, 0x04, 0xf9, 0x79, 0x13, 0x00, 0x2b, 0x70, 0xfc, 0xfb, 0x0d, 0x01, 0x5e, 0x9b, 0xfe, 0x72, 0xad, 0xfc, 0xf6, 0x7d, 0xfd, 0xdc, 0x72, 0xfe, 0x38, 0x72, 0x00, 0x16, 0xd8, 0xfb, 0x8a, 0xf2, 0xff, 0x27, 0x2d, 0xfe, 0xe6, 0xf2, 0x00, 0x20, 0xda, 0xfe, 0x1b, 0xd0, 0x00, 0x70, 0x22, 0xff, 0x1f, 0x74, 0xfc, 0xf7, 0x3a, 0xfe, 0x33, 0xcc, 0xfc, 0x47, 0x93, 0xfe, 0xf1, 0xcf, 0x00, 0x50, 0xd3, 0x4f, 0xfe, 0xc9, 0x33, 0x85, 0x9c, 0xde, 0xc8, 0x91, 0xfe, 0xbb, 0xc5, 0x00, 0x95, 0x36, 0x03, 0x51, 0x60, 0xfc, 0x56, 0x94, 0xf7, 0x85, 0x52, 0xf5, 0x0e, 0xd0, 0x01, 0x05, 0x78, 0x08, 0x6e, 0x00, 0xf9, 0xb6, 0xb8, 0x01, 0xe7, 0x2b, 0xfb, 0xf9, 0xab, 0x01, 0x04, 0x35, 0xff, 0xbb, 0x1a, 0xfc, 0x45, 0xbb, 0xfd, 0x30, 0x78, 0xfd, 0x43, 0xfb, 0xff, 0x94, 0xf8, 0xfb, 0xee, 0x62, 0xff, 0x3f, 0x1f, 0xfe, 0x52, 0x1a, 0x02, 0x6c, 0xde, 0xfe, 0x14, 0xb3, 0x00, 0x33, 0x56, 0xff, 0x55, 0x98, 0xfc, 0x15, 0xfc, 0xfd, 0xc7, 0x5f, 0xfc, 0xff, 0x46, 0xfe, 0x7d, 0x7c, 0x00, 0xa4, 0x4f, 0x52, 0x29, 0x98, 0x30, 0x77, 0x5e, 0xdd, 0xe4, 0xdb, 0x00, 0xbb, 0xd3, 0xfe, 0x44, 0x2f, 0x03, 0x67, 0x92, 0xfb, 0xb5, 0x41, 0xf7, 0x23, 0xac, 0xf5, 0xf8, 0xd0, 0x02, 0x8c, 0x3b, 0x08, 0xde, 0x68, 0xf9, 0x2a, 0xd1, 0x02, 0xc6, 0xf9, 0xfa, 0xef, 0x69, 0x02, 0x3e, 0xf6, 0xfe, 0x0c, 0x8e, 0xfc, 0xa1, 0xbc, 0xfc, 0x02, 0xc5, 0xfc, 0xc1, 0x69, 0x00, 0x33, 0x4a, 0xfb, 0x44, 0x97, 0xff, 0xc9, 0x12, 0xff, 0x98, 0x89, 0x02, 0x6d, 0x90, 0xfe, 0xc5, 0x70, 0x01, 0x5c, 0x71, 0xff, 0xdc, 0x08, 0xfc, 0xfb, 0xe8, 0xfd, 0x77, 0x89, 0xfc, 0xc5, 0x13, 0xfe, 0x39, 0x1f, 0x00, 0xd2, 0x35, 0x51, 0xb0, 0xb1, 0x2d, 0x14, 0x53, 0xdf, 0x4d, 0x36, 0x01, 0xab, 0x82, 0xfc, 0x6c, 0x69, 0x04, 0x0b, 0x26, 0xfc, 0x79, 0x87, 0xf6, 0x38, 0x3a, 0xf6, 0xcf, 0xff, 0x03, 0xe3, 0xb9, 0x06, 0xc1, 0x99, 0xfa, 0x03, 0xc9, 0x04, 0xc6, 0xd9, 0xf9, 0x73, 0x1b, 0x03, 0xf9, 0x59, 0xff, 0x72, 0x19, 0xfb, 0xe2, 0x7f, 0xfd, 0x18, 0x65, 0xfc, 0x71, 0x08, 0x00, 0xf6, 0x74, 0xfc, 0xc3, 0x84, 0xff, 0x5f, 0x30, 0xff, 0x4a, 0x0b, 0x03, 0xd0, 0x04, 0xff, 0x3a, 0x37, 0x01, 0x07, 0x30, 0xff, 0x47, 0x21, 0xfc, 0x71, 0x07, 0xfe, 0x01, 0xc7, 0xfc, 0x7d, 0xf2, 0xfd, 0x47, 0xf8, 0xff, 0xd8, 0x8d, 0x4c, 0x6c, 0x29, 0x2b, 0xf4, 0x10, 0xe4, 0xc2, 0xb5, 0xff, 0xc3, 0x6d, 0xfa, 0xb4, 0x84, 0x06, 0x32, 0x48, 0xfd, 0x07, 0x0a, 0xf6, 0xbc, 0x11, 0xf7, 0x94, 0xab, 0x03, 0xee, 0x83, 0x05, 0xa2, 0xca, 0xfc, 0x03, 0xdd, 0x04, 0x6c, 0x05, 0xfa, 0x8d, 0xa3, 0x02, 0x05, 0xe4, 0xfe, 0x80, 0x8a, 0xfb, 0x99, 0x75, 0xfd, 0x95, 0x09, 0xfd, 0x74, 0x5f, 0x00, 0x1d, 0x1b, 0xfd, 0xc4, 0x01, 0xff, 0x2d, 0x54, 0xff, 0xa5, 0x99, 0x03, 0xa4, 0x89, 0xfe, 0x35, 0xce, 0x00, 0xb6, 0x6e, 0xff, 0x9c, 0x6e, 0xfc, 0x3a, 0x45, 0xfe, 0x77, 0xe9, 0xfc, 0x97, 0x2a, 0xfe, 0x71, 0x3e, 0x00, 0x56, 0xa4, 0x44, 0xea, 0xef, 0x29, 0xaa, 0x19, 0xea, 0x5a, 0x5b, 0xfd, 0x53, 0x18, 0xf9, 0xd9, 0xd8, 0x07, 0x83, 0x3a, 0xff, 0x77, 0x58, 0xf6, 0x3a, 0x40, 0xf7, 0x02, 0x41, 0x03, 0xc0, 0x5a, 0x04, 0x2a, 0xd3, 0xfd, 0x6b, 0x84, 0x05, 0x7b, 0x68, 0xf9, 0xa7, 0xc5, 0x01, 0xdb, 0xbd, 0xff, 0xc4, 0x33, 0xfb, 0x17, 0xbb, 0xfe, 0x97, 0xce, 0xfd, 0x42, 0x3c, 0x00, 0x7c, 0xa6, 0xfd, 0x30, 0xaa, 0xfe, 0x9c, 0x42, 0xff, 0x6a, 0xd7, 0x02, 0x3a, 0x9a, 0xfe, 0xfa, 0x55, 0x00, 0xf0, 0xd9, 0xff, 0x59, 0xec, 0xfc, 0xa0, 0x5b, 0xfe, 0x68, 0x97, 0xfd, 0x36, 0x81, 0xfe, 0xc7, 0xc1, 0xff, 0x80, 0xa0, 0x36, 0x8b, 0x28, 0x28, 0x1b, 0xed, 0xee, 0x83, 0x6d, 0xfe, 0xbc, 0x11, 0x02, 0xde, 0x8f, 0x04, 0xfe, 0x2c, 0xfe, 0x57, 0x90, 0xf9, 0xea, 0x30, 0xf9, 0x81, 0x69, 0x02, 0x81, 0x18, 0x05, 0xbb, 0xa7, 0xfd, 0x57, 0x4f, 0x02, 0xe7, 0x50, 0xfd, 0x7c, 0xf6, 0x01, 0x7b, 0x98, 0xff, 0x89, 0x0a, 0xfd, 0xe4, 0x06, 0xfe, 0x83, 0xa8, 0xfd, 0x23, 0x0d, 0x00, 0xef, 0x1b, 0xfe, 0x1d, 0x7b, 0xff, 0xde, 0x5a, 0xff, 0xcf, 0x59, 0x02, 0x26, 0x59, 0xff, 0xce, 0x3e, 0x00, 0xff, 0xb0, 0xff, 0x03, 0x51, 0xfd, 0x54, 0x30, 0xfe, 0x29, 0xe0, 0xfd, 0x61, 0x61, 0xfe, 0x63, 0x18, 0xff, 0xb9, 0xd6, 0x31, 0x4c, 0x5f, 0x28, 0x5c, 0x9d, 0xf1, 0x4b, 0xa5, 0xfa, 0x7f, 0x14, 0x01, 0x43, 0xc6, 0x06, 0x9d, 0x61, 0x00, 0x57, 0x5f, 0xfa, 0xa9, 0x97, 0xf8, 0xfd, 0x16, 0x00, 0x4b, 0x97, 0x04, 0x4e, 0xb8, 0xfe, 0x49, 0xa4, 0x02, 0x17, 0xf9, 0xfd, 0xed, 0xbf, 0x01, 0xf9, 0xd2, 0x00, 0x6e, 0x7d, 0xfd, 0xc1, 0xe6, 0xfe, 0xe5, 0x1a, 0xff, 0x9e, 0xed, 0xff, 0xea, 0x66, 0xfe, 0x2a, 0x18, 0xff, 0x98, 0x87, 0xfe, 0x77, 0x35, 0x02, 0xdc, 0x67, 0xff, 0x5a, 0x96, 0xff, 0xa4, 0x46, 0x00, 0xa5, 0xfd, 0xfd, 0xc9, 0x6d, 0xfe, 0x4d, 0x4d, 0xfe, 0xb2, 0x9d, 0xfe, 0x31, 0x50, 0xff, 0xa5, 0xdb, 0x2d, 0xa4, 0xb5, 0x28, 0x5a, 0x37, 0xf4, 0xae, 0xf2, 0xf7, 0xe5, 0xdf, 0xff, 0x32, 0x32, 0x07, 0x98, 0x0a, 0x02, 0xee, 0xd8, 0xfb, 0x42, 0xcd, 0xf8, 0xbf, 0xb3, 0xfe, 0x25, 0xdd, 0x03, 0xc8, 0x2a, 0xff, 0x5b, 0xc4, 0x02, 0x65, 0xa5, 0xfe, 0x80, 0xa4, 0x01, 0xa9, 0x69, 0x01, 0x6f, 0x4c, 0xfe, 0x08, 0x13, 0xff, 0x3f, 0xf3, 0xff, 0x80, 0x26, 0x00, 0xb6, 0x51, 0xfe, 0xf7, 0x46, 0xff, 0x09, 0xc2, 0xfd, 0xce, 0x4b, 0x01, 0x51, 0xdd, 0xff, 0xab, 0x14, 0xff, 0xb6, 0x16, 0x00, 0x70, 0xcf, 0xfe, 0x6d, 0x8b, 0xfe, 0x55, 0x8a, 0xfe, 0x60, 0x23, 0xff, 0x42, 0x15, 0xff, 0xbc, 0x79, 0x2b, 0x08, 0x3a, 0x29, 0xd9, 0xa0, 0xf5, 0x21, 0xae, 0xf6, 0x6b, 0xb4, 0xff, 0xa4, 0x4f, 0x07, 0x13, 0xaf, 0x02, 0xe8, 0x61, 0xfc, 0xc4, 0x1e, 0xf9, 0xf4, 0x29, 0xfe, 0xf9, 0x67, 0x03, 0x64, 0xf8, 0xfe, 0x14, 0x9b, 0x02, 0x2c, 0xee, 0xfe, 0x63, 0xbb, 0x01, 0xdb, 0xd0, 0x01, 0xbb, 0x83, 0xfe, 0x9b, 0x69, 0xff, 0xef, 0x25, 0x00, 0x4d, 0xe5, 0xff, 0x8c, 0xfa, 0xfd, 0xed, 0x78, 0xff, 0x9b, 0x78, 0xfd, 0x7e, 0x29, 0x00, 0x93, 0x33, 0x00, 0xea, 0x31, 0xff, 0xab, 0xbe, 0xff, 0x73, 0xf2, 0xfe, 0x70, 0xe0, 0xfe, 0x47, 0xa5, 0xfe, 0x8c, 0x3d, 0xff, 0x8d, 0x5d, 0xff, 0x09, 0x44, 0x2b, 0xde, 0x9f, 0x29, 0x1c, 0x60, 0xf5, 0xde, 0x95, 0xf6, 0x28, 0x43, 0x01, 0x25, 0xd7, 0x07, 0x59, 0x8c, 0x02, 0x36, 0xcf, 0xfb, 0x9d, 0xf2, 0xf8, 0x47, 0x51, 0xfe, 0x04, 0x85, 0x03, 0xf0, 0x8c, 0xfe, 0x2f, 0x87, 0x01, 0x69, 0x58, 0xff, 0xfc, 0x93, 0x01, 0xa6, 0xbc, 0x01, 0x09, 0xef, 0xfe, 0x17, 0x99, 0xff, 0xc0, 0x77, 0x00, 0x69, 0x9f, 0xff, 0x26, 0x50, 0xfd, 0x94, 0xfc, 0xfe, 0xbf, 0xd6, 0xfd, 0x46, 0x0f, 0x00, 0xb2, 0xc3, 0xff, 0x90, 0x97, 0xff, 0xbb, 0xba, 0xff, 0x5c, 0xeb, 0xfe, 0x5a, 0x0f, 0xff, 0xee, 0x42, 0xfe, 0xd9, 0x63, 0xff, 0x4c, 0x1e, 0x00, 0x96, 0x5c, 0x2d, 0xd8, 0x4e, 0x29, 0x5d, 0xcd, 0xf3, 0x9c, 0xfe, 0xf7, 0xd4, 0xa2, 0x03, 0x2e, 0x59, 0x08, 0xda, 0x54, 0x01, 0x88, 0xd8, 0xfa, 0x71, 0xd2, 0xf8, 0x73, 0xff, 0xfe, 0x73, 0xd7, 0x03, 0xe6, 0x03, 0xfe, 0x67, 0x7c, 0x00, 0xaf, 0xaf, 0xfe, 0xe1, 0x09, 0x02, 0xff, 0x06, 0x01, 0x28, 0x55, 0xfe, 0x3b, 0x8e, 0x00, 0x5a, 0x72, 0x00, 0xb8, 0x27, 0xff, 0x6c, 0x4a, 0xfd, 0xc4, 0x6d, 0xfe, 0x76, 0x99, 0xfd, 0x40, 0x9e, 0x00, 0x85, 0xfe, 0xff, 0xe4, 0x54, 0xff, 0x71, 0x9c, 0xff, 0xd7, 0x3d, 0xff, 0x2f, 0xb2, 0xfe, 0x7e, 0x0b, 0xfe, 0x95, 0x6f, 0xff, 0x2e, 0x45, 0x00, 0x5b, 0x57, 0x30, 0xc9, 0xd0, 0x29, 0xbc, 0x2e, 0xf2, 0xe7, 0x18, 0xfa, 0x0a, 0x65, 0x05, 0x09, 0x57, 0x07, 0xfd, 0xbe, 0xff, 0x7a, 0x0e, 0xfa, 0x42, 0x47, 0xf9, 0x82, 0x60, 0x00, 0x34, 0x8f, 0x04, 0xff, 0x0b, 0xfd, 0x61, 0x5c, 0xff, 0x49, 0xb3, 0xfe, 0xb0, 0xb8, 0x01, 0x30, 0x15, 0x00, 0x54, 0xe1, 0xfd, 0x2e, 0xfd, 0xff, 0x8b, 0x58, 0x00, 0xda, 0xed, 0xfe, 0xe7, 0x48, 0xfd, 0x7e, 0xc3, 0xfe, 0x30, 0xcb, 0xfd, 0x56, 0x9d, 0x00, 0x7b, 0xac, 0xff, 0x14, 0xf7, 0xff, 0xff, 0x69, 0xff, 0x40, 0xb3, 0xfe, 0x1e, 0x79, 0xfe, 0x15, 0xd4, 0xfd, 0x0a, 0x77, 0xff, 0x74, 0x32, 0x00, 0xb8, 0x8b, 0x34, 0x79, 0x2b, 0x2b, 0xfc, 0x52, 0xf0, 0xda, 0xd9, 0xfb, 0x2d, 0xff, 0x04, 0x36, 0x05, 0x05, 0x92, 0x92, 0xfe, 0xa1, 0x26, 0xfa, 0x61, 0x23, 0xfa, 0x2e, 0x4d, 0x02, 0xac, 0x28, 0x05, 0x51, 0xa9, 0xfb, 0x33, 0xec, 0xfe, 0x81, 0xa2, 0xfe, 0x79, 0x24, 0x01, 0x3c, 0xed, 0xfe, 0xb7, 0x85, 0xfd, 0xec, 0xa4, 0xfe, 0x39, 0x8a, 0xff, 0xc6, 0x50, 0xff, 0x02, 0x1a, 0xfd, 0xfd, 0x80, 0xff, 0xcb, 0x58, 0xfe, 0x74, 0x66, 0x00, 0x4b, 0x5c, 0xff, 0xdb, 0x70, 0x00, 0x1e, 0x4b, 0xff, 0xec, 0xc8, 0xfd, 0xc1, 0x6f, 0xfe, 0x75, 0x8b, 0xfd, 0xdc, 0xf0, 0xfe, 0x00, 0x4d, 0x00, 0x61, 0x8e, 0x39, 0x45, 0x7d, 0x2d, 0x10, 0x43, 0xed, 0x82, 0x7f, 0xfc, 0x30, 0xc1, 0x02, 0xde, 0x75, 0x02, 0x3d, 0x77, 0xfe, 0x5a, 0xbe, 0xfa, 0x28, 0xd5, 0xfa, 0x32, 0xec, 0x03, 0xc9, 0x94, 0x05, 0x52, 0x21, 0xfa, 0x35, 0xb2, 0xff, 0xcb, 0x0a, 0xfe, 0xd1, 0xf7, 0xff, 0xa9, 0xe5, 0xfe, 0x7b, 0x51, 0xfc, 0x24, 0x34, 0xfd, 0x3c, 0x5a, 0xff, 0x3e, 0x85, 0xff, 0xb2, 0xe5, 0xfc, 0x9c, 0x26, 0x00, 0x39, 0x7b, 0xfe, 0x48, 0x49, 0x00, 0x15, 0xaf, 0xff, 0x5d, 0x75, 0x00, 0x53, 0xb8, 0xfe, 0x1c, 0x6a, 0xfd, 0xa8, 0x81, 0xfe, 0xd8, 0x9a, 0xfc, 0xec, 0x77, 0xfe, 0xb5, 0xa2, 0x00, 0x2e, 0x71, 0x3e, 0x19, 0x89, 0x2d, 0x9f, 0x75, 0xea, 0xf6, 0xd8, 0xfd, 0x6c, 0xd5, 0x00, 0x08, 0xcb, 0x00, 0x3e, 0x98, 0xfe, 0x77, 0x45, 0xfb, 0x2f, 0x54, 0xfb, 0x9b, 0x39, 0x05, 0xe8, 0xa7, 0x05, 0x9e, 0xac, 0xf9, 0x09, 0x07, 0x01, 0x07, 0x1c, 0xfd, 0xb5, 0xbb, 0xff, 0xa1, 0x01, 0xff, 0xb8, 0x62, 0xfb, 0x7e, 0x95, 0xfc, 0x61, 0xfc, 0xfe, 0x5d, 0xf5, 0xff, 0xc0, 0xfa, 0xfc, 0x35, 0x47, 0x00, 0xee, 0xfb, 0xfe, 0x3c, 0x96, 0x00, 0xb7, 0x19, 0x00, 0xf2, 0x6b, 0x00, 0xc9, 0x84, 0xfe, 0xe4, 0x97, 0xfd, 0xb3, 0xfb, 0xfd, 0x38, 0x36, 0xfc, 0xec, 0x7b, 0xfe, 0x40, 0x9b, 0x00, 0x3d, 0x28, 0x3f, 0x90, 0x8b, 0x2c, 0x40, 0x9b, 0xe9, 0x7a, 0x44, 0xff, 0x83, 0x72, 0x00, 0x16, 0x4f, 0x00, 0xf7, 0xdc, 0xfd, 0x66, 0xf0, 0xfa, 0x0f, 0x14, 0xfb, 0x9a, 0x4e, 0x05, 0x24, 0x0e, 0x06, 0x0d, 0xe8, 0xf9, 0x2a, 0xa1, 0x01, 0x80, 0x66, 0xfd, 0x74, 0x92, 0xff, 0x72, 0x07, 0xff, 0xff, 0x0a, 0xfc, 0x54, 0x75, 0xfb, 0xfe, 0x85, 0xfe, 0x83, 0x59, 0x00, 0x35, 0x5e, 0xfc, 0x12, 0xc5, 0x00, 0x4a, 0x96, 0xff, 0xba, 0xc6, 0x00, 0xd6, 0x0e, 0x00, 0x37, 0xbd, 0x00, 0xbb, 0x9b, 0xfe, 0xa3, 0xf6, 0xfc, 0xda, 0xf9, 0xfd, 0xc0, 0x62, 0xfc, 0xf0, 0x35, 0xfe, 0x92, 0x38, 0x00, 0x66, 0x6c, 0x3c, 0xb2, 0xc8, 0x29, 0x44, 0x82, 0xeb, 0xb0, 0xee, 0xff, 0xee, 0x66, 0x01, 0xc9, 0xb5, 0x01, 0xa3, 0x46, 0xfd, 0xde, 0x2f, 0xfa, 0xfb, 0x1b, 0xfa, 0x6c, 0xad, 0x04, 0xa6, 0xc2, 0x05, 0x9c, 0x43, 0xfb, 0x0a, 0x6e, 0x02, 0x7f, 0x1b, 0xfd, 0x0e, 0xd5, 0x00, 0x29, 0x63, 0xff, 0xb4, 0x3d, 0xfc, 0x6b, 0x7c, 0xfc, 0x47, 0x91, 0xfd, 0x79, 0x0b, 0x00, 0xb4, 0x4d, 0xfd, 0x84, 0x5c, 0x00, 0xe2, 0xd4, 0xff, 0x74, 0x4d, 0x01, 0x55, 0xfe, 0xff, 0x09, 0xb7, 0x00, 0x53, 0xb8, 0xfe, 0x29, 0x0b, 0xfd, 0xa1, 0x02, 0xfe, 0xdb, 0x38, 0xfd, 0x6b, 0x12, 0xfe, 0x63, 0x92, 0xff, 0x9c, 0x58, 0x2e, 0x21, 0x78, 0x28, 0x48, 0x00, 0xf4, 0x02, 0x85, 0xfd, 0x24, 0x3d, 0x05, 0xe0, 0x56, 0x02, 0x32, 0xf0, 0xfe, 0xfb, 0x8c, 0xfb, 0xc9, 0x11, 0xfc, 0xda, 0x32, 0x04, 0x5d, 0xe1, 0x04, 0x8e, 0x02, 0xfd, 0x97, 0xec, 0xff, 0x31, 0x41, 0xff, 0xfd, 0x8f, 0x00, 0x17, 0xc5, 0xff, 0x32, 0x03, 0xfe, 0xfd, 0x06, 0xfd, 0x99, 0xb3, 0xfe, 0x3c, 0xbb, 0xff, 0xf3, 0x2f, 0xfd, 0xf0, 0xef, 0xff, 0xee, 0xf2, 0xff, 0x06, 0x3a, 0x01, 0xe6, 0x20, 0x01, 0x6f, 0xfb, 0x00, 0x79, 0x9b, 0xfe, 0xee, 0x8a, 0xfc, 0x4e, 0x14, 0xfd, 0x06, 0xda, 0xfd, 0x86, 0xcb, 0xff, 0x42, 0xd8, 0x00, 0x12, 0x11, 0x12, 0x12, 0x14, 0x13, 0x12, 0x11, 0x10, 0x10, 0x0f, 0x0f, 0x10, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x13, 0x16, 0x14, 0x13, 0x12, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0e, 0x0d, 0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0e, 0x0e, 0x0d, 0x0f, 0x10, 0x11, 0x11, 0x12, 0x13, 0x13, 0x14, 0x17, 0x15, 0x14, 0x13, 0x13, 0x12, 0x11, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0c, 0x0d, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x14, 0x15, 0x18, 0x17, 0x16, 0x15, 0x14, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x10, 0x11, 0x12, 0x13, 0x14, 0x14, 0x15, 0x16, 0x1b, 0x18, 0x17, 0x16, 0x15, 0x14, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x1d, 0x1a, 0x19, 0x19, 0x18, 0x17, 0x16, 0x15, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x05, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x09, 0x0b, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x20, 0x1b, 0x1a, 0x19, 0x19, 0x18, 0x17, 0x16, 0x16, 0x15, 0x14, 0x14, 0x13, 0x12, 0x11, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1b, 0x1a, 0x19, 0x18, 0x18, 0x17, 0x16, 0x15, 0x15, 0x14, 0x13, 0x12, 0x11, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x14, 0x15, 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1c, 0x1e, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x04, 0x04, 0x05, 0x06, 0x07, 0x07, 0x08, 0x0a, 0x0b, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x1f, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x06, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x0b, 0x0c, 0x0d, 0x0e, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1d, 0x1c, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x06, 0x05, 0x05, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x17, 0x18, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x05, 0x04, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x05, 0x06, 0x07, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x18, 0x18, 0x18, 0x18, 0x17, 0x16, 0x15, 0x15, 0x13, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b, 0x06, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x10, 0x11, 0x11, 0x11, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x04, 0x05, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x10, 0x10, 0x0f, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x08, 0x09, 0x0a, 0x0a, 0x0a, 0x09, 0x09, 0x08, 0x07, 0x07, 0x07, 0x07, 0x05, }; ================================================ FILE: project/lib/custom/openal/build/default-48000.mhr.h ================================================ static const unsigned char hrtf_default_48000[] = { 0x4d, 0x69, 0x6e, 0x50, 0x48, 0x52, 0x30, 0x32, 0x80, 0xbb, 0x00, 0x00, 0x01, 0x00, 0x20, 0x01, 0x78, 0x05, 0x13, 0x01, 0x0c, 0x18, 0x24, 0x2d, 0x38, 0x3c, 0x48, 0x48, 0x48, 0x48, 0x48, 0x3c, 0x38, 0x2d, 0x24, 0x18, 0x0c, 0x01, 0x88, 0x69, 0x16, 0x08, 0x0c, 0x22, 0x83, 0xe8, 0x10, 0x65, 0xc8, 0x0a, 0xa3, 0xdf, 0x07, 0x72, 0xc9, 0x00, 0x0e, 0x0c, 0x03, 0x41, 0x89, 0x01, 0xe3, 0x24, 0xfa, 0x13, 0x31, 0xf6, 0x24, 0x57, 0xfc, 0xe1, 0x71, 0x02, 0x72, 0x9c, 0xff, 0xfc, 0x9c, 0xfd, 0x66, 0x0c, 0xfc, 0x79, 0x8c, 0xfb, 0xbd, 0xc9, 0xfd, 0x97, 0xe5, 0xfe, 0x13, 0x35, 0xff, 0x76, 0x4a, 0xff, 0xd9, 0xdc, 0xff, 0x3a, 0x1b, 0xff, 0x6d, 0x9e, 0xfe, 0x3b, 0x2e, 0xff, 0x91, 0x63, 0xfe, 0x77, 0xa0, 0xfe, 0xb0, 0x92, 0xfe, 0x91, 0xa4, 0xfd, 0x9d, 0xe0, 0xfd, 0x75, 0x75, 0xfe, 0x2a, 0x07, 0xff, 0x53, 0x56, 0xff, 0xd2, 0xe0, 0x19, 0x80, 0xf0, 0x23, 0x6b, 0xa6, 0x0e, 0x49, 0x54, 0x0b, 0xee, 0x18, 0x09, 0x88, 0x86, 0xff, 0xcb, 0x6f, 0x02, 0x17, 0x92, 0x01, 0x0a, 0x52, 0xfa, 0xbf, 0xa5, 0xf5, 0xd8, 0x08, 0xfb, 0x1d, 0x6e, 0x02, 0x05, 0x6d, 0x00, 0xae, 0xbf, 0xfd, 0xe0, 0x8a, 0xfc, 0x66, 0x26, 0xfc, 0x98, 0x46, 0xfc, 0x14, 0x70, 0xfd, 0x7d, 0xa3, 0xff, 0xae, 0x5e, 0xff, 0x3d, 0x5c, 0xff, 0x9f, 0xce, 0xfe, 0x6f, 0x30, 0xfe, 0x41, 0xc7, 0xfe, 0xa8, 0x46, 0xfe, 0x53, 0x7d, 0xfe, 0x5b, 0x8b, 0xfe, 0xeb, 0xe6, 0xfd, 0x97, 0xd7, 0xfd, 0x68, 0x8d, 0xfe, 0x98, 0x87, 0xff, 0xbb, 0x91, 0xff, 0xb0, 0x9b, 0x17, 0x79, 0x59, 0x21, 0x6f, 0x3c, 0x0e, 0x85, 0x15, 0x0a, 0x1d, 0x01, 0x08, 0xfc, 0xa1, 0x00, 0x3d, 0x32, 0x03, 0x67, 0x36, 0x01, 0xd0, 0x01, 0xfa, 0x42, 0xa2, 0xf6, 0x82, 0x91, 0xfc, 0x17, 0x25, 0x02, 0x3d, 0x52, 0xff, 0xf5, 0xcc, 0xfd, 0xc7, 0xd5, 0xfc, 0xf0, 0xb1, 0xfc, 0x18, 0xf7, 0xfd, 0xac, 0x55, 0xfe, 0x62, 0x5e, 0xff, 0xbe, 0xce, 0xff, 0x1b, 0xf3, 0xff, 0x57, 0xe7, 0xfe, 0xbb, 0x89, 0xfe, 0x2c, 0x3d, 0xff, 0x19, 0x6f, 0xfe, 0xfb, 0x91, 0xfe, 0x3d, 0x5d, 0xfe, 0x9c, 0x9f, 0xfd, 0x0e, 0x0f, 0xfe, 0xcb, 0x8d, 0xfe, 0x40, 0x1b, 0xff, 0x61, 0x6d, 0xff, 0x33, 0xfa, 0x15, 0x34, 0xf0, 0x1e, 0xdc, 0x1b, 0x0d, 0x61, 0x48, 0x09, 0x99, 0x45, 0x07, 0x91, 0x9d, 0x00, 0xbd, 0x55, 0x03, 0x7f, 0x63, 0x01, 0x7e, 0x57, 0xfa, 0x75, 0x66, 0xf7, 0xbf, 0xb8, 0xfd, 0x6a, 0xd8, 0x02, 0x43, 0x92, 0xff, 0xa3, 0x4b, 0xfe, 0x1e, 0x4f, 0xfd, 0x94, 0xda, 0xfc, 0x90, 0x8d, 0xfe, 0x77, 0x19, 0xff, 0x47, 0x50, 0xff, 0x09, 0x68, 0xff, 0xa3, 0xec, 0xff, 0xca, 0x21, 0xff, 0xae, 0xd1, 0xfe, 0xa7, 0x76, 0xff, 0x88, 0x9f, 0xfe, 0x18, 0xe0, 0xfe, 0x61, 0xbc, 0xfe, 0x86, 0xd9, 0xfd, 0x25, 0x27, 0xfe, 0xf1, 0xa1, 0xfe, 0xfd, 0x25, 0xff, 0x55, 0x72, 0xff, 0x10, 0x9a, 0x15, 0x6b, 0x76, 0x1e, 0x46, 0xed, 0x0c, 0xf9, 0x22, 0x09, 0xfb, 0x33, 0x07, 0x3b, 0xd2, 0x00, 0x23, 0xb9, 0x03, 0x39, 0xde, 0x01, 0x48, 0xd2, 0xfa, 0xb0, 0xdb, 0xf7, 0x61, 0x20, 0xfe, 0xce, 0x1d, 0x03, 0x59, 0xac, 0xff, 0x0e, 0x22, 0xfe, 0x22, 0xed, 0xfc, 0x78, 0x9f, 0xfc, 0xca, 0xaa, 0xfe, 0x12, 0x46, 0xff, 0x6b, 0x53, 0xff, 0xda, 0x5d, 0xff, 0x5c, 0xf2, 0xff, 0x27, 0x2e, 0xff, 0xf0, 0xda, 0xfe, 0x61, 0x89, 0xff, 0xd3, 0xc0, 0xfe, 0xc8, 0x11, 0xff, 0x48, 0xfe, 0xfe, 0xa2, 0x0d, 0xfe, 0x74, 0x42, 0xfe, 0x9c, 0xac, 0xfe, 0xf6, 0x0f, 0xff, 0x4a, 0x43, 0xff, 0x21, 0x28, 0x16, 0xb5, 0x55, 0x1f, 0x63, 0x31, 0x0d, 0x75, 0xe0, 0x08, 0x0b, 0xba, 0x06, 0x82, 0x4a, 0x00, 0xb0, 0x5a, 0x03, 0xe7, 0x7f, 0x01, 0x89, 0x44, 0xfa, 0x94, 0x00, 0xf7, 0xe0, 0x71, 0xfd, 0x8c, 0x2f, 0x03, 0x1a, 0x02, 0x00, 0xe6, 0x33, 0xfe, 0x58, 0xc5, 0xfc, 0xa7, 0x65, 0xfc, 0x1f, 0x94, 0xfe, 0x01, 0x76, 0xff, 0x4d, 0xaa, 0xff, 0x84, 0x9f, 0xff, 0xa9, 0x24, 0x00, 0x30, 0x66, 0xff, 0xb8, 0xfd, 0xfe, 0x03, 0x8f, 0xff, 0x1b, 0xb4, 0xfe, 0x63, 0xf0, 0xfe, 0x11, 0xd5, 0xfe, 0x08, 0xf0, 0xfd, 0xff, 0x3c, 0xfe, 0xb7, 0xcc, 0xfe, 0x2c, 0x59, 0xff, 0x56, 0xaa, 0xff, 0xdd, 0x3a, 0x18, 0x59, 0xf3, 0x21, 0x82, 0xb0, 0x0d, 0x3d, 0x33, 0x09, 0x94, 0x21, 0x07, 0xa6, 0x22, 0x00, 0x0d, 0x75, 0x03, 0x9c, 0x13, 0x01, 0x4a, 0x03, 0xf9, 0xc5, 0x64, 0xf5, 0xca, 0xa9, 0xfc, 0x94, 0x8b, 0x03, 0x4f, 0xe3, 0xff, 0x5b, 0x5b, 0xfd, 0xaf, 0xd4, 0xfb, 0x7b, 0xb0, 0xfb, 0x7e, 0x34, 0xfe, 0x80, 0x44, 0xff, 0x89, 0x81, 0xff, 0xfc, 0x6d, 0xff, 0xeb, 0x23, 0x00, 0x09, 0x51, 0xff, 0x55, 0xc1, 0xfe, 0xda, 0x7e, 0xff, 0xfb, 0xaf, 0xfe, 0xe8, 0xf3, 0xfe, 0x98, 0xd5, 0xfe, 0xb7, 0xe3, 0xfd, 0xcb, 0x38, 0xfe, 0x5a, 0xd9, 0xfe, 0x13, 0x67, 0xff, 0x26, 0x97, 0xff, 0xfd, 0x9b, 0x19, 0xa4, 0xa1, 0x24, 0x3b, 0x3f, 0x0f, 0x58, 0xb2, 0x09, 0x2a, 0x88, 0x07, 0xa9, 0xa3, 0xff, 0xf2, 0xe9, 0x02, 0x75, 0xca, 0x00, 0x6d, 0x37, 0xf8, 0x2a, 0x28, 0xf5, 0x4e, 0x87, 0xfc, 0x33, 0x72, 0x02, 0x7a, 0x2b, 0xff, 0x76, 0x93, 0xfd, 0x3f, 0xf8, 0xfb, 0x06, 0x8b, 0xfb, 0x7c, 0xea, 0xfd, 0x78, 0xca, 0xfe, 0x84, 0x82, 0xff, 0x4a, 0xcb, 0xff, 0xe8, 0x06, 0x00, 0x67, 0xfe, 0xfe, 0x5f, 0x88, 0xfe, 0xfe, 0x42, 0xff, 0x5c, 0x73, 0xfe, 0x06, 0xba, 0xfe, 0xf8, 0x8b, 0xfe, 0x3d, 0xa5, 0xfd, 0xc8, 0x16, 0xfe, 0xc8, 0x97, 0xfe, 0xa8, 0x33, 0xff, 0x36, 0x89, 0xff, 0x48, 0x4a, 0x1b, 0xc6, 0xb1, 0x25, 0x84, 0xbf, 0x0e, 0x0c, 0xab, 0x0a, 0x87, 0xec, 0x08, 0xe8, 0xdc, 0xff, 0x31, 0x71, 0x02, 0x41, 0x9b, 0xff, 0x6d, 0x2b, 0xf7, 0x34, 0x3f, 0xf6, 0xe0, 0xe3, 0xfe, 0x7c, 0x9b, 0x01, 0x73, 0x09, 0xfc, 0xe8, 0x5e, 0xfc, 0x04, 0x85, 0xfc, 0x74, 0xf8, 0xfc, 0x68, 0x40, 0xff, 0x24, 0x99, 0xfe, 0xf7, 0x8f, 0xfe, 0x7d, 0x9b, 0xff, 0xc4, 0x3b, 0x00, 0x03, 0xdb, 0xfe, 0x69, 0xa2, 0xfe, 0x29, 0x5f, 0xff, 0x1f, 0x33, 0xfe, 0xd2, 0x88, 0xfe, 0x7a, 0x27, 0xfe, 0xd8, 0x23, 0xfd, 0xfb, 0xeb, 0xfd, 0x25, 0x70, 0xfe, 0x25, 0xc4, 0xfe, 0x56, 0x2c, 0xff, 0x98, 0x09, 0x1f, 0x46, 0x54, 0x29, 0x19, 0x99, 0x0c, 0x6e, 0xaa, 0x07, 0x6c, 0xc8, 0x06, 0xc8, 0x76, 0xfe, 0x06, 0x67, 0x04, 0x49, 0xad, 0x01, 0x73, 0xc0, 0xf6, 0x8f, 0x35, 0xf5, 0x66, 0x7e, 0x00, 0xad, 0xc6, 0x04, 0xcd, 0x2b, 0xfc, 0xb4, 0x52, 0xfa, 0xf9, 0xa2, 0xfa, 0xba, 0x4b, 0xfc, 0x1e, 0x04, 0x00, 0xc4, 0xe4, 0xfe, 0x93, 0xa9, 0xfd, 0x81, 0xbf, 0xfe, 0xa2, 0x52, 0x00, 0xf3, 0xb2, 0xfe, 0x4d, 0x1a, 0xfe, 0xea, 0x65, 0xff, 0x68, 0x1f, 0xfe, 0x8b, 0x98, 0xfe, 0xa9, 0x38, 0xfe, 0x0f, 0xa4, 0xfc, 0xc0, 0x92, 0xfd, 0x44, 0x8b, 0xfe, 0xed, 0xf3, 0xfe, 0xbe, 0x28, 0xff, 0xf2, 0x3d, 0x20, 0x13, 0xdd, 0x2a, 0x3d, 0x8d, 0x0d, 0x9f, 0x8c, 0x07, 0x90, 0x0c, 0x05, 0x0f, 0xa1, 0xfd, 0x53, 0xba, 0x04, 0x70, 0x7c, 0x02, 0x76, 0x2e, 0xf7, 0x6a, 0x0a, 0xf3, 0x7e, 0x28, 0xff, 0xc9, 0xd4, 0x06, 0xa0, 0x09, 0xff, 0x43, 0xd2, 0xfa, 0xcf, 0xf7, 0xf7, 0x50, 0xe4, 0xf9, 0x2c, 0x02, 0x00, 0x43, 0x8e, 0x00, 0xbd, 0x84, 0xfe, 0xd3, 0xd1, 0xfd, 0xdd, 0xbc, 0xff, 0x89, 0x86, 0xfe, 0x78, 0xde, 0xfd, 0x07, 0x1f, 0xff, 0xba, 0xc0, 0xfd, 0x1c, 0x97, 0xfe, 0x2b, 0x64, 0xfe, 0xe7, 0xe1, 0xfc, 0x81, 0x8b, 0xfd, 0x98, 0x81, 0xfe, 0x6e, 0x35, 0xff, 0xf7, 0x35, 0xff, 0x64, 0xb7, 0x1e, 0x53, 0xbf, 0x29, 0xc7, 0x4a, 0x10, 0x20, 0x18, 0x0a, 0xb3, 0xbc, 0x05, 0x9d, 0x25, 0xfe, 0x0f, 0x58, 0x03, 0x17, 0xa0, 0x01, 0xd2, 0xa4, 0xf7, 0xfc, 0x5c, 0xf1, 0x6f, 0x56, 0xfc, 0xd4, 0x6d, 0x05, 0xbe, 0x9c, 0x00, 0x71, 0xf2, 0xfe, 0xbb, 0x80, 0xf9, 0xb9, 0x0e, 0xf7, 0xd8, 0xed, 0xfd, 0xa2, 0xf5, 0x00, 0x5a, 0xe6, 0xff, 0xb2, 0xf1, 0xfe, 0xd2, 0x8b, 0xff, 0xe8, 0x88, 0xfe, 0x03, 0x4d, 0xfe, 0x71, 0x1a, 0xff, 0xe4, 0xb4, 0xfd, 0x99, 0xbf, 0xfe, 0x06, 0x73, 0xfe, 0x32, 0x79, 0xfc, 0xd4, 0x52, 0xfd, 0xb8, 0x2f, 0xfe, 0xca, 0xe1, 0xfe, 0x33, 0x7c, 0xff, 0x39, 0xd2, 0x1c, 0xf8, 0xe9, 0x27, 0xab, 0x7f, 0x0f, 0xe2, 0x81, 0x0a, 0x73, 0xfb, 0x07, 0xfd, 0xf3, 0xfe, 0x8b, 0x8c, 0x02, 0x59, 0x7f, 0x00, 0x80, 0xc8, 0xf8, 0xde, 0x2b, 0xf4, 0x5b, 0xda, 0xfa, 0x8f, 0x2d, 0x04, 0x86, 0x71, 0x00, 0xc9, 0x24, 0xfd, 0xc5, 0x66, 0xfc, 0x3d, 0x6d, 0xf9, 0xd7, 0x65, 0xfa, 0x02, 0x9a, 0xfe, 0x14, 0x66, 0x00, 0x27, 0xae, 0xff, 0x2e, 0x2a, 0x00, 0x36, 0x6e, 0xff, 0xbc, 0x82, 0xfe, 0x62, 0xa3, 0xfe, 0x3c, 0x78, 0xfd, 0x5c, 0x01, 0xfe, 0x68, 0xc2, 0xfe, 0x09, 0xad, 0xfd, 0xd3, 0x62, 0xfd, 0x6a, 0x44, 0xfe, 0x93, 0x13, 0xff, 0x23, 0x6e, 0xff, 0xb0, 0xb1, 0x1d, 0x55, 0x5f, 0x25, 0x5f, 0xe1, 0x0b, 0xe7, 0xaa, 0x0c, 0x01, 0x89, 0x0a, 0x6b, 0xa2, 0xfd, 0xec, 0xc7, 0x01, 0x08, 0xe7, 0x01, 0x9e, 0xca, 0xfa, 0x3d, 0xde, 0xf4, 0x21, 0x28, 0xf9, 0xaf, 0xb6, 0x02, 0x11, 0xc3, 0x01, 0xd8, 0xb5, 0xfd, 0xf8, 0x27, 0xfd, 0x60, 0xc6, 0xfc, 0x17, 0xfa, 0xf9, 0x79, 0xf6, 0xfb, 0x23, 0xb5, 0x00, 0xa1, 0x5e, 0xff, 0xda, 0xa4, 0xfe, 0x4b, 0x9a, 0xfe, 0x78, 0xb9, 0xfd, 0x39, 0x5a, 0xfe, 0xa6, 0x4b, 0xfe, 0xcb, 0x53, 0xfe, 0x34, 0x8e, 0xfe, 0x37, 0x4a, 0xfe, 0x6c, 0xb0, 0xfd, 0x3a, 0xaa, 0xfe, 0x9d, 0x28, 0x00, 0x6b, 0xb8, 0xff, 0x21, 0x6d, 0x1a, 0x46, 0x91, 0x22, 0x96, 0xd1, 0x0c, 0x65, 0x0e, 0x0c, 0xb7, 0x52, 0x09, 0xed, 0x92, 0xfe, 0x91, 0x6d, 0x02, 0x3d, 0x39, 0x01, 0x6b, 0x32, 0xfa, 0xc2, 0xb9, 0xf6, 0x48, 0x0f, 0xfb, 0x24, 0x37, 0x01, 0x23, 0xd6, 0xff, 0xf9, 0x09, 0xfe, 0x33, 0xb4, 0xfd, 0xf7, 0xd7, 0xfd, 0xe1, 0xb3, 0xfc, 0xa8, 0x3c, 0xfc, 0x22, 0x23, 0xff, 0xd0, 0x58, 0x00, 0xd4, 0xf8, 0xff, 0xd1, 0x8c, 0xfe, 0xb7, 0x02, 0xfe, 0x77, 0xf0, 0xfe, 0x5a, 0x8a, 0xfe, 0xc3, 0x9a, 0xfe, 0x24, 0x6a, 0xfe, 0x30, 0xec, 0xfd, 0x83, 0x41, 0xfe, 0xfe, 0xbf, 0xfe, 0x03, 0x47, 0xff, 0x21, 0x43, 0xff, 0x2d, 0x68, 0x18, 0x01, 0x0d, 0x20, 0x3c, 0xc3, 0x0b, 0x51, 0xf0, 0x09, 0xf2, 0x62, 0x08, 0x3c, 0x93, 0x00, 0x97, 0x38, 0x03, 0x39, 0xd0, 0x00, 0x47, 0x29, 0xfa, 0xdb, 0x44, 0xf7, 0xf6, 0x6c, 0xfc, 0xbb, 0x8d, 0x01, 0x02, 0x41, 0xff, 0x53, 0x2e, 0xfe, 0xc8, 0xd6, 0xfd, 0xd2, 0xf3, 0xfd, 0x89, 0xbc, 0xfd, 0x9c, 0x83, 0xfd, 0x73, 0xc5, 0xff, 0x81, 0x75, 0x00, 0x33, 0xe2, 0xff, 0xea, 0xa2, 0xfe, 0x4c, 0x7f, 0xfe, 0x7b, 0x50, 0xff, 0x85, 0x83, 0xfe, 0x5b, 0x75, 0xfe, 0xa5, 0x1b, 0xfe, 0x3f, 0xb2, 0xfd, 0xa3, 0x48, 0xfe, 0xeb, 0x9a, 0xfe, 0x4e, 0x2b, 0xff, 0xa5, 0x85, 0xff, 0x78, 0x90, 0x16, 0xc7, 0x9b, 0x1d, 0xa0, 0x9e, 0x0a, 0x07, 0x0f, 0x09, 0x6f, 0xff, 0x07, 0xbc, 0xb8, 0x00, 0xa7, 0x17, 0x03, 0xc3, 0xd5, 0x00, 0x52, 0x6a, 0xfa, 0x98, 0x16, 0xf8, 0xd0, 0x97, 0xfd, 0xae, 0xb4, 0x01, 0x4d, 0xdd, 0xfe, 0x7e, 0xa7, 0xfe, 0x9a, 0x77, 0xfe, 0xac, 0x05, 0xfe, 0x59, 0x6c, 0xfe, 0xa7, 0x7a, 0xfe, 0x46, 0x92, 0xff, 0xf0, 0xde, 0xff, 0xb4, 0xdb, 0xff, 0x92, 0xd9, 0xfe, 0xe1, 0xac, 0xfe, 0xc6, 0x5f, 0xff, 0x73, 0xa6, 0xfe, 0x81, 0xe1, 0xfe, 0x64, 0xa3, 0xfe, 0xe7, 0x05, 0xfe, 0x6d, 0x3c, 0xfe, 0xa8, 0x6b, 0xfe, 0xfe, 0x1e, 0xff, 0x21, 0x8f, 0xff, 0xd0, 0x9b, 0x14, 0x00, 0xf2, 0x1a, 0xec, 0xea, 0x09, 0xbf, 0x76, 0x08, 0x2b, 0xf3, 0x06, 0xee, 0xc6, 0x00, 0xa9, 0x8f, 0x03, 0x45, 0x2e, 0x01, 0x25, 0xe2, 0xfa, 0x47, 0xf2, 0xf8, 0xcc, 0xdd, 0xfe, 0xda, 0xcf, 0x02, 0x45, 0x99, 0xff, 0x6a, 0x3e, 0xff, 0xad, 0xc8, 0xfe, 0x7f, 0x2a, 0xfe, 0x53, 0x0c, 0xff, 0xdb, 0x1b, 0xff, 0xee, 0x64, 0xff, 0x8f, 0x87, 0xff, 0x72, 0xf3, 0xff, 0xb6, 0x2e, 0xff, 0xb6, 0x14, 0xff, 0xe5, 0xbe, 0xff, 0x2b, 0xe1, 0xfe, 0x35, 0x1b, 0xff, 0x01, 0xe0, 0xfe, 0x1c, 0x1a, 0xfe, 0x18, 0x6d, 0xfe, 0x5b, 0xc1, 0xfe, 0x9f, 0x3d, 0xff, 0x7e, 0x8d, 0xff, 0x50, 0xc7, 0x13, 0xc2, 0x76, 0x19, 0xbc, 0xb8, 0x08, 0x97, 0x5e, 0x07, 0x23, 0x38, 0x06, 0x18, 0xca, 0x00, 0x4e, 0x08, 0x04, 0xab, 0x37, 0x02, 0x7b, 0x50, 0xfc, 0xb6, 0x69, 0xfa, 0xc6, 0x2a, 0x00, 0xf7, 0xc1, 0x03, 0x9d, 0x1e, 0x00, 0x60, 0x33, 0xff, 0xbd, 0x51, 0xfe, 0x18, 0xcc, 0xfd, 0xdf, 0x25, 0xff, 0x75, 0x75, 0xff, 0x76, 0x99, 0xff, 0xff, 0x9c, 0xff, 0xa8, 0x0d, 0x00, 0xd9, 0x43, 0xff, 0x54, 0x08, 0xff, 0xa0, 0xb3, 0xff, 0xe9, 0x09, 0xff, 0x05, 0x63, 0xff, 0x76, 0x20, 0xff, 0xb7, 0x48, 0xfe, 0x9a, 0xa8, 0xfe, 0xa6, 0x12, 0xff, 0xf1, 0x7a, 0xff, 0x7c, 0x9d, 0xff, 0xe6, 0xbb, 0x13, 0x73, 0xf4, 0x19, 0x12, 0xa6, 0x09, 0x29, 0x30, 0x08, 0x9e, 0xd6, 0x06, 0xb6, 0x47, 0x01, 0xf8, 0x66, 0x04, 0x28, 0x2c, 0x02, 0x20, 0xd8, 0xfb, 0xea, 0xda, 0xf9, 0x82, 0xa8, 0xff, 0x24, 0x4f, 0x03, 0xa4, 0xbe, 0xff, 0x47, 0xd4, 0xfe, 0x0b, 0xf1, 0xfd, 0x25, 0xc0, 0xfd, 0x74, 0x64, 0xff, 0x90, 0x7b, 0xff, 0xd4, 0x5d, 0xff, 0x24, 0x6e, 0xff, 0xe8, 0x03, 0x00, 0xe1, 0x49, 0xff, 0x53, 0x26, 0xff, 0x6c, 0xe7, 0xff, 0xb7, 0x28, 0xff, 0x33, 0x84, 0xff, 0x6a, 0x69, 0xff, 0x0e, 0x7e, 0xfe, 0x55, 0x9b, 0xfe, 0xd0, 0xd0, 0xfe, 0x86, 0x06, 0xff, 0xa4, 0x26, 0xff, 0xf7, 0x11, 0x14, 0x77, 0x44, 0x1a, 0xc2, 0x5f, 0x09, 0x53, 0x92, 0x07, 0xcb, 0x4c, 0x06, 0x68, 0xfe, 0x00, 0x98, 0x5e, 0x04, 0x59, 0x44, 0x02, 0x96, 0xc2, 0xfb, 0xf0, 0x73, 0xf9, 0xd9, 0x6f, 0xff, 0x31, 0x7b, 0x03, 0x65, 0xca, 0xff, 0x9b, 0x8c, 0xfe, 0xe6, 0x87, 0xfd, 0xc1, 0x5a, 0xfd, 0x03, 0x6b, 0xff, 0xc0, 0x22, 0x00, 0x30, 0x26, 0x00, 0x5a, 0xe8, 0xff, 0xe0, 0x2c, 0x00, 0x84, 0x42, 0xff, 0x46, 0x00, 0xff, 0x3f, 0x9e, 0xff, 0x9c, 0xd1, 0xfe, 0x62, 0x32, 0xff, 0x66, 0x31, 0xff, 0x44, 0x9d, 0xfe, 0x84, 0x14, 0xff, 0x84, 0x4f, 0xff, 0xf9, 0x55, 0xff, 0x7e, 0x3b, 0xff, 0xc8, 0x06, 0x15, 0x0c, 0xd0, 0x1b, 0x93, 0xfc, 0x09, 0x59, 0x7c, 0x07, 0x49, 0xce, 0x05, 0xcd, 0x32, 0x00, 0x6f, 0xb7, 0x03, 0x39, 0x70, 0x01, 0x0f, 0xad, 0xfa, 0x76, 0x0a, 0xf8, 0xeb, 0x58, 0xfe, 0x97, 0xb2, 0x03, 0xa2, 0x83, 0x00, 0xc2, 0xe2, 0xfe, 0x6b, 0x8d, 0xfd, 0x9d, 0x45, 0xfd, 0x61, 0x42, 0xff, 0x39, 0xf3, 0xff, 0x91, 0x19, 0x00, 0x22, 0xeb, 0xff, 0x1b, 0x63, 0x00, 0x96, 0xbb, 0xff, 0xfb, 0x64, 0xff, 0xc1, 0xe8, 0xff, 0xc1, 0x08, 0xff, 0x4c, 0x3a, 0xff, 0x16, 0x14, 0xff, 0x89, 0x46, 0xfe, 0x8e, 0x98, 0xfe, 0xca, 0x1d, 0xff, 0x14, 0xa7, 0xff, 0x39, 0xff, 0xff, 0x6d, 0xca, 0x16, 0x17, 0x0f, 0x1e, 0xbc, 0x94, 0x0a, 0x7d, 0xf5, 0x07, 0xd0, 0x2f, 0x06, 0x0b, 0x14, 0x00, 0xcc, 0xce, 0x03, 0xc2, 0x06, 0x01, 0x96, 0x72, 0xf9, 0x04, 0x29, 0xf6, 0x02, 0x21, 0xfd, 0x8a, 0xe7, 0x03, 0x39, 0x69, 0x00, 0x7b, 0xf1, 0xfd, 0xac, 0x94, 0xfc, 0xff, 0x99, 0xfc, 0x77, 0x03, 0xff, 0x0a, 0x1f, 0x00, 0x45, 0x4a, 0x00, 0x68, 0x00, 0x00, 0x54, 0xb7, 0x00, 0xba, 0xec, 0xff, 0xf0, 0x46, 0xff, 0x41, 0xd7, 0xff, 0x80, 0xf8, 0xfe, 0x36, 0x3f, 0xff, 0xce, 0x3e, 0xff, 0x82, 0x73, 0xfe, 0x23, 0xcc, 0xfe, 0x75, 0x67, 0xff, 0xd0, 0xbd, 0xff, 0xc1, 0xb8, 0xff, 0xea, 0xda, 0x19, 0x91, 0x41, 0x21, 0xaa, 0x4a, 0x0a, 0x9a, 0x0a, 0x08, 0x4f, 0xa3, 0x06, 0x42, 0xb4, 0xff, 0xab, 0xff, 0x03, 0x5a, 0x6c, 0x00, 0x58, 0xe2, 0xf7, 0x97, 0xb1, 0xf4, 0xec, 0x0c, 0xfd, 0x2b, 0xce, 0x04, 0x64, 0x22, 0x00, 0xa4, 0xf2, 0xfc, 0x1f, 0xa1, 0xfb, 0x6c, 0xee, 0xfb, 0x3e, 0xa0, 0xfe, 0xcb, 0xa0, 0xff, 0xab, 0xcb, 0xff, 0x55, 0x85, 0xff, 0x8a, 0x71, 0x00, 0x56, 0x8b, 0xff, 0xfb, 0xde, 0xfe, 0x5b, 0xd6, 0xff, 0x2b, 0x05, 0xff, 0x15, 0x44, 0xff, 0x46, 0x14, 0xff, 0x9f, 0x29, 0xfe, 0x9d, 0x92, 0xfe, 0xb8, 0x3c, 0xff, 0x93, 0xc3, 0xff, 0xff, 0xcd, 0xff, 0x79, 0x58, 0x1c, 0xa9, 0xcf, 0x24, 0x34, 0xdb, 0x0a, 0xcb, 0xc5, 0x07, 0xf3, 0xe7, 0x06, 0xe4, 0x34, 0xff, 0x53, 0xfa, 0x03, 0x62, 0xf7, 0xff, 0xd9, 0x4d, 0xf6, 0x79, 0xd7, 0xf3, 0xb1, 0x11, 0xfd, 0x83, 0xb7, 0x04, 0xd2, 0xef, 0xff, 0x97, 0xdf, 0xfc, 0x9d, 0x0e, 0xfb, 0x63, 0x57, 0xfb, 0x8a, 0x6c, 0xfe, 0x6a, 0x50, 0xff, 0xeb, 0xde, 0xff, 0x20, 0x9a, 0xff, 0x9e, 0x27, 0x00, 0x58, 0x56, 0xff, 0x43, 0xa8, 0xfe, 0xa9, 0x76, 0xff, 0xb0, 0x76, 0xfe, 0x1f, 0xda, 0xfe, 0xeb, 0xb2, 0xfe, 0xec, 0xce, 0xfd, 0xbd, 0x75, 0xfe, 0xaa, 0x20, 0xff, 0x23, 0xcb, 0xff, 0xc2, 0xd4, 0xff, 0x5d, 0x11, 0x1d, 0x73, 0x11, 0x27, 0xe9, 0x0e, 0x0d, 0xe3, 0xaa, 0x08, 0xef, 0x63, 0x07, 0x46, 0x6a, 0xfe, 0xcb, 0xe1, 0x02, 0x80, 0xef, 0xff, 0xad, 0x20, 0xf6, 0x72, 0x65, 0xf4, 0xcf, 0xd2, 0xfc, 0xa3, 0x4a, 0x02, 0xdd, 0xce, 0xfe, 0x50, 0xb3, 0xfd, 0x62, 0xe5, 0xfb, 0x37, 0x8b, 0xfb, 0xff, 0xfe, 0xfd, 0x50, 0x9c, 0xfe, 0x56, 0xf5, 0xff, 0x49, 0x60, 0x00, 0xc8, 0x10, 0x00, 0x7b, 0xd2, 0xfe, 0x9c, 0x74, 0xfe, 0x17, 0x5e, 0xff, 0xa4, 0x8b, 0xfe, 0x30, 0xd1, 0xfe, 0xe4, 0x7b, 0xfe, 0x19, 0xb0, 0xfd, 0x24, 0x58, 0xfe, 0xa8, 0xaf, 0xfe, 0xe6, 0x60, 0xff, 0xa8, 0xbe, 0xff, 0xbe, 0x06, 0x1e, 0xbc, 0xf0, 0x27, 0x35, 0xcc, 0x0d, 0x31, 0x72, 0x0a, 0x9d, 0x29, 0x09, 0x6a, 0xb3, 0xfe, 0x0a, 0x90, 0x01, 0x74, 0x5b, 0xfe, 0xe5, 0x3a, 0xf5, 0xd5, 0xa0, 0xf5, 0x46, 0x9f, 0xfe, 0x1a, 0x3c, 0x00, 0x9b, 0xcb, 0xfb, 0x52, 0x8d, 0xfd, 0x12, 0x3a, 0xfd, 0x6a, 0x4a, 0xfd, 0x4a, 0xbe, 0xfe, 0x5e, 0x86, 0xfd, 0x40, 0xc0, 0xfe, 0x43, 0x6d, 0x00, 0xd9, 0x66, 0x00, 0xba, 0xf0, 0xfe, 0x48, 0xe2, 0xfe, 0x70, 0x80, 0xff, 0xf6, 0x5e, 0xfe, 0x7e, 0xac, 0xfe, 0x40, 0x12, 0xfe, 0x5d, 0x41, 0xfd, 0xae, 0x2e, 0xfe, 0x7b, 0x58, 0xfe, 0x3c, 0xc5, 0xfe, 0xd1, 0x66, 0xff, 0x8f, 0xfb, 0x20, 0x97, 0x04, 0x29, 0x7b, 0x89, 0x0b, 0xaa, 0x11, 0x0b, 0x07, 0x56, 0x0a, 0x32, 0x7c, 0xfe, 0xea, 0xb0, 0x01, 0x18, 0x52, 0xfd, 0x4a, 0x11, 0xf4, 0x15, 0x48, 0xf7, 0xdf, 0xff, 0x01, 0xfa, 0x94, 0xff, 0x6c, 0xbc, 0xf7, 0xe6, 0xe2, 0xfb, 0x9c, 0x9a, 0xfd, 0x68, 0xb7, 0xfe, 0xd1, 0xa6, 0x00, 0x8f, 0xb8, 0xfd, 0x54, 0xca, 0xfd, 0x90, 0x3d, 0x00, 0xb9, 0x9e, 0x00, 0x58, 0x70, 0xfe, 0x7f, 0xbb, 0xfe, 0x11, 0x98, 0xff, 0xd0, 0xec, 0xfd, 0x3f, 0x72, 0xfe, 0x3d, 0xa2, 0xfd, 0xfa, 0xa2, 0xfc, 0x8c, 0x1e, 0xfe, 0xd1, 0x62, 0xfe, 0x4c, 0x6a, 0xfe, 0xe3, 0x09, 0xff, 0x6d, 0x48, 0x25, 0x25, 0x99, 0x2d, 0x2a, 0x88, 0x08, 0x89, 0xcd, 0x06, 0xfd, 0xc6, 0x08, 0x12, 0x61, 0xfd, 0x46, 0xfd, 0x03, 0xb5, 0x0f, 0x00, 0x3b, 0xf7, 0xf2, 0x09, 0x0a, 0xf6, 0x5e, 0x5e, 0x04, 0xf8, 0x9b, 0x02, 0x3a, 0xc2, 0xf6, 0xfd, 0x4c, 0xf9, 0x35, 0x7c, 0xfc, 0xde, 0xdb, 0xfe, 0x33, 0xe0, 0x01, 0xa4, 0x32, 0xfe, 0xac, 0xc1, 0xfc, 0x70, 0x8b, 0xff, 0x18, 0x03, 0x01, 0xa4, 0x5d, 0xfe, 0xf8, 0x2c, 0xfe, 0x5a, 0xa1, 0xff, 0x62, 0xc7, 0xfd, 0x43, 0x58, 0xfe, 0x26, 0x89, 0xfd, 0x9f, 0xf6, 0xfb, 0xd1, 0xdf, 0xfd, 0x0a, 0xa5, 0xfe, 0x2b, 0x6c, 0xfe, 0x2b, 0xb4, 0xfe, 0xe3, 0xb5, 0x29, 0x85, 0x4f, 0x30, 0x1a, 0x55, 0x05, 0xc1, 0xb0, 0x04, 0x75, 0x52, 0x06, 0x0d, 0xf2, 0xfb, 0xb7, 0xba, 0x06, 0x4a, 0x8d, 0x01, 0x65, 0x6a, 0xf2, 0x4b, 0xf6, 0xf4, 0xb6, 0x10, 0x06, 0x11, 0x7a, 0x06, 0x1e, 0x08, 0xf7, 0x47, 0x06, 0xf7, 0x2b, 0xdb, 0xf9, 0x52, 0xc4, 0xfd, 0x84, 0xac, 0x02, 0x4a, 0x2e, 0xfe, 0x00, 0x97, 0xfb, 0x0a, 0x84, 0xfe, 0x78, 0x1c, 0x01, 0x70, 0x0f, 0xfe, 0xbb, 0x8a, 0xfd, 0x03, 0xd3, 0xff, 0xf1, 0xbe, 0xfd, 0xf9, 0x9c, 0xfe, 0xa5, 0xc5, 0xfd, 0xbd, 0x73, 0xfb, 0x72, 0x76, 0xfd, 0xeb, 0xbf, 0xfe, 0x8e, 0xd2, 0xfe, 0x27, 0xf2, 0xfe, 0xf4, 0x03, 0x2c, 0xb7, 0x70, 0x32, 0x20, 0x48, 0x05, 0xc2, 0x80, 0x03, 0x4d, 0xa0, 0x03, 0x5b, 0x33, 0xfb, 0x7b, 0x51, 0x08, 0x93, 0x11, 0x03, 0x7a, 0xbb, 0xf2, 0xfc, 0x3a, 0xf2, 0x8c, 0x88, 0x05, 0xa9, 0x13, 0x0a, 0x46, 0x7f, 0xf9, 0x7d, 0x5a, 0xf6, 0x44, 0x41, 0xf6, 0xce, 0x24, 0xfb, 0x6b, 0x9e, 0x03, 0xdf, 0xf2, 0xff, 0x6e, 0x96, 0xfb, 0x3d, 0x52, 0xfd, 0xd5, 0x7a, 0x00, 0xed, 0xc5, 0xfd, 0x6e, 0x96, 0xfd, 0x13, 0xc5, 0xff, 0xd6, 0x28, 0xfd, 0xde, 0x7b, 0xfe, 0x36, 0x03, 0xfe, 0x6a, 0x9e, 0xfb, 0xdf, 0x92, 0xfd, 0x04, 0x18, 0xff, 0xf4, 0x24, 0xff, 0x4d, 0x0e, 0xff, 0x12, 0x84, 0x2c, 0xda, 0x81, 0x33, 0xe7, 0x0d, 0x07, 0x9b, 0x18, 0x04, 0x06, 0x4e, 0x02, 0x9e, 0x8b, 0xfa, 0xad, 0xc6, 0x07, 0x38, 0x59, 0x03, 0x81, 0x28, 0xf3, 0x8e, 0xc3, 0xef, 0x5a, 0xa0, 0x03, 0x30, 0xb7, 0x0b, 0x2c, 0x16, 0xfd, 0x71, 0x41, 0xf7, 0x4c, 0x70, 0xf3, 0x92, 0xfe, 0xf8, 0x69, 0x73, 0x03, 0xe5, 0x17, 0x02, 0x79, 0x10, 0xfd, 0x18, 0x0f, 0xfc, 0x6e, 0x06, 0x00, 0x93, 0xda, 0xfd, 0xbe, 0x0f, 0xfd, 0x65, 0x41, 0xff, 0x8d, 0xf9, 0xfc, 0x67, 0xb8, 0xfe, 0xf0, 0x2c, 0xfe, 0x35, 0xf6, 0xfb, 0x83, 0x51, 0xfd, 0xaa, 0xaa, 0xfe, 0x3d, 0x6e, 0xff, 0x9b, 0xfc, 0xfe, 0x50, 0x2b, 0x2b, 0xe7, 0x4b, 0x33, 0x4d, 0x8e, 0x0a, 0x27, 0xdc, 0x06, 0xf4, 0x40, 0x02, 0xb3, 0x1e, 0xfa, 0xa9, 0x8d, 0x06, 0x1a, 0xa4, 0x02, 0x6f, 0x41, 0xf3, 0x04, 0x9d, 0xed, 0x46, 0xb7, 0x00, 0x93, 0x24, 0x0b, 0xc3, 0x7a, 0x00, 0x6a, 0xd3, 0xfb, 0x67, 0xd3, 0xf2, 0x90, 0x83, 0xf5, 0xc3, 0x87, 0x02, 0x5a, 0x84, 0x03, 0x1e, 0x3c, 0xff, 0xd3, 0x38, 0xfc, 0xfb, 0xe5, 0xfe, 0xe8, 0x22, 0xfe, 0xc2, 0x55, 0xfd, 0xec, 0x1e, 0xff, 0x97, 0x48, 0xfd, 0x62, 0x3d, 0xff, 0x9b, 0x38, 0xfe, 0xa5, 0x99, 0xfb, 0x18, 0x22, 0xfd, 0x0b, 0x08, 0xfe, 0x53, 0x22, 0xff, 0x05, 0x0e, 0xff, 0x6e, 0xf6, 0x28, 0x93, 0x62, 0x31, 0x77, 0xcf, 0x0d, 0x0f, 0x2f, 0x09, 0x56, 0x11, 0x03, 0xab, 0x7e, 0xfb, 0x15, 0x61, 0x04, 0xce, 0xc4, 0x01, 0xb5, 0x86, 0xf4, 0xf0, 0xb9, 0xeb, 0x39, 0x93, 0xfd, 0xe1, 0x5b, 0x09, 0xfb, 0x3c, 0x01, 0x19, 0x65, 0x00, 0x8f, 0xb2, 0xf5, 0xc7, 0xd8, 0xf1, 0x27, 0x78, 0xff, 0xa7, 0xba, 0x03, 0x65, 0x30, 0x00, 0x6a, 0x3d, 0xfe, 0x70, 0x34, 0xff, 0xc9, 0xea, 0xfd, 0x29, 0x11, 0xfe, 0x1c, 0x14, 0xff, 0xac, 0xdd, 0xfc, 0x73, 0x1a, 0xff, 0x0d, 0x43, 0xfe, 0x0e, 0xfd, 0xfa, 0x0b, 0xee, 0xfc, 0x5d, 0xff, 0xfd, 0xfc, 0xc5, 0xfe, 0xaf, 0xbb, 0xff, 0x2c, 0x69, 0x26, 0x7e, 0x4b, 0x2f, 0x56, 0x2b, 0x0e, 0xeb, 0x23, 0x0b, 0xb7, 0xa9, 0x05, 0x06, 0x58, 0xfb, 0x33, 0x9e, 0x03, 0xdd, 0x77, 0x01, 0x08, 0x5c, 0xf5, 0xc8, 0x97, 0xec, 0x6d, 0x9b, 0xfa, 0xb2, 0xa0, 0x08, 0xaa, 0xe0, 0x00, 0xf7, 0x15, 0x00, 0x17, 0x81, 0xfa, 0x28, 0xfd, 0xf0, 0x24, 0x31, 0xfa, 0x1b, 0x28, 0x03, 0xcb, 0x8b, 0x01, 0xc3, 0xbc, 0xff, 0x8f, 0xd4, 0xff, 0x51, 0x01, 0xfe, 0xf1, 0x4b, 0xfe, 0x3c, 0x94, 0xff, 0xf5, 0x84, 0xfc, 0xb6, 0x41, 0xfd, 0x31, 0x97, 0xfe, 0x80, 0xdc, 0xfb, 0x61, 0xa7, 0xfc, 0xd1, 0x8c, 0xfe, 0xac, 0xf9, 0xfe, 0xce, 0xd1, 0xff, 0x6d, 0x8c, 0x24, 0x46, 0xb5, 0x2d, 0xfb, 0x90, 0x0c, 0x8a, 0x6c, 0x0a, 0x38, 0x2e, 0x08, 0xc7, 0xa9, 0xfc, 0x5c, 0x3d, 0x02, 0x8a, 0x60, 0xff, 0x9e, 0x8b, 0xf7, 0x9e, 0xed, 0xf1, 0x74, 0x38, 0xf9, 0x75, 0xdd, 0x06, 0x55, 0x42, 0x01, 0x9e, 0x44, 0xfc, 0x21, 0x04, 0xfd, 0x66, 0x7c, 0xf6, 0x3b, 0x75, 0xf6, 0xe3, 0x4d, 0xff, 0xec, 0x24, 0x02, 0x40, 0xd6, 0xff, 0x6c, 0x68, 0x00, 0x36, 0xcc, 0xff, 0xf0, 0x43, 0xfe, 0x53, 0xea, 0xfd, 0xc4, 0x74, 0xfc, 0x3e, 0x74, 0xfd, 0x80, 0x38, 0xff, 0x35, 0xb4, 0xfd, 0xbe, 0xb1, 0xfc, 0xa7, 0x25, 0xfe, 0x1b, 0x33, 0xff, 0x05, 0x8b, 0xff, 0x84, 0xc1, 0x21, 0x75, 0xd4, 0x29, 0xef, 0xa5, 0x0b, 0x18, 0x74, 0x0b, 0xda, 0xc0, 0x09, 0xd8, 0x54, 0xfd, 0xa9, 0xc3, 0x01, 0xbc, 0xf3, 0xff, 0x51, 0xe8, 0xf8, 0xe4, 0x8f, 0xf3, 0xbc, 0x1e, 0xf9, 0x05, 0xb4, 0x05, 0xbb, 0xa7, 0x02, 0xea, 0xd1, 0xfb, 0x96, 0x88, 0xfc, 0x83, 0x09, 0xfb, 0x48, 0x86, 0xf7, 0x2b, 0x21, 0xfc, 0x13, 0x77, 0x01, 0xa9, 0x68, 0xff, 0x3c, 0x15, 0xff, 0x97, 0x6a, 0xff, 0x15, 0x9e, 0xfe, 0xcb, 0x9b, 0xfe, 0x53, 0x7e, 0xfd, 0x65, 0xac, 0xfd, 0x4b, 0xde, 0xfe, 0xca, 0x73, 0xfe, 0x6d, 0x05, 0xfd, 0xec, 0xf6, 0xfd, 0xb5, 0xa5, 0xff, 0x0e, 0x74, 0xff, 0x0f, 0xe0, 0x21, 0x60, 0x3a, 0x26, 0xeb, 0xae, 0x08, 0x1f, 0x02, 0x0f, 0x31, 0x02, 0x0c, 0x58, 0xf4, 0xfa, 0xfd, 0x38, 0x01, 0xaf, 0x9f, 0x02, 0xae, 0x88, 0xfb, 0x78, 0xb5, 0xf3, 0x4a, 0xa7, 0xf6, 0x99, 0x87, 0x03, 0x02, 0xa7, 0x03, 0x13, 0x4d, 0xfd, 0x92, 0xf4, 0xfd, 0xc2, 0x64, 0xfd, 0x99, 0xbd, 0xf6, 0xba, 0xb2, 0xfa, 0x46, 0x89, 0x02, 0x56, 0x18, 0xff, 0x75, 0xb1, 0xfd, 0x12, 0x93, 0xfe, 0xa4, 0x30, 0xfd, 0xec, 0xe7, 0xfd, 0x8b, 0x7b, 0xfe, 0x1e, 0x18, 0xfe, 0x37, 0x9f, 0xfe, 0xe9, 0xd1, 0xfe, 0x5c, 0x5b, 0xfd, 0x6b, 0xd5, 0xfe, 0x0d, 0xef, 0x00, 0xa7, 0xbd, 0xff, 0xa7, 0xa1, 0x1d, 0x85, 0xa1, 0x23, 0x3d, 0x39, 0x0b, 0x41, 0xa7, 0x0e, 0x4b, 0x8a, 0x0a, 0x61, 0x76, 0xfb, 0xe3, 0x4b, 0x01, 0xdb, 0xa7, 0x01, 0xd3, 0xac, 0xfa, 0x1f, 0x86, 0xf6, 0x0e, 0xe8, 0xf8, 0x21, 0x9e, 0x00, 0x4f, 0x3e, 0x01, 0xae, 0x4b, 0xfe, 0x39, 0xf9, 0xfe, 0x4f, 0xf9, 0xfe, 0xf5, 0xe9, 0xf9, 0x14, 0xf8, 0xf9, 0x32, 0xdb, 0xff, 0xaf, 0xcb, 0x00, 0x30, 0xd2, 0xff, 0xde, 0x6b, 0xfe, 0xe5, 0x5b, 0xfd, 0x8c, 0x78, 0xfe, 0xbd, 0xba, 0xfe, 0xf9, 0xa8, 0xfe, 0xf0, 0xb9, 0xfe, 0x93, 0x7b, 0xfe, 0x5a, 0x10, 0xfe, 0xbc, 0xac, 0xfe, 0xcc, 0xca, 0xff, 0xc1, 0x68, 0xff, 0xe6, 0xf6, 0x1a, 0x74, 0x93, 0x20, 0x6c, 0xa5, 0x0a, 0x0b, 0x9b, 0x0c, 0xea, 0x51, 0x09, 0x96, 0x76, 0xfe, 0xc3, 0xde, 0x02, 0xc1, 0xcc, 0x00, 0x77, 0xae, 0xfa, 0xf3, 0x73, 0xf7, 0x4a, 0x3e, 0xfa, 0xf3, 0x8d, 0x00, 0xe9, 0x25, 0x00, 0x55, 0x66, 0xfe, 0xb0, 0xc1, 0xfe, 0x77, 0x2a, 0xff, 0x7a, 0x1f, 0xfc, 0x29, 0x3f, 0xfb, 0x0b, 0x00, 0x00, 0xa0, 0x46, 0x01, 0x01, 0xb0, 0xff, 0x2b, 0x3b, 0xfe, 0x57, 0x13, 0xfe, 0x07, 0x28, 0xff, 0xd3, 0xbd, 0xfe, 0xc9, 0x57, 0xfe, 0x8b, 0xfb, 0xfd, 0x25, 0xf6, 0xfd, 0x5e, 0x89, 0xfe, 0x30, 0xc9, 0xfe, 0x1d, 0x19, 0xff, 0xbe, 0x32, 0xff, 0xe6, 0xb0, 0x18, 0xe4, 0x37, 0x1e, 0xf1, 0xbd, 0x09, 0xa4, 0x50, 0x0a, 0x80, 0xe9, 0x08, 0x21, 0x93, 0x00, 0x9d, 0x0b, 0x03, 0x30, 0x62, 0x00, 0x3c, 0xb0, 0xfa, 0xff, 0x07, 0xf8, 0x04, 0xc6, 0xfb, 0xef, 0xbd, 0x00, 0xe6, 0x8d, 0xff, 0xa8, 0xb5, 0xfe, 0x94, 0x0a, 0xff, 0xef, 0x46, 0xff, 0x62, 0xfe, 0xfc, 0xbf, 0x82, 0xfc, 0x83, 0x88, 0x00, 0x6d, 0x33, 0x01, 0xb2, 0x98, 0xff, 0xd0, 0x56, 0xfe, 0x16, 0x85, 0xfe, 0x90, 0x65, 0xff, 0x59, 0xa2, 0xfe, 0x76, 0x44, 0xfe, 0x3e, 0xd0, 0xfd, 0x90, 0xe4, 0xfd, 0xb8, 0x87, 0xfe, 0xdd, 0x97, 0xfe, 0xf7, 0x39, 0xff, 0xae, 0xa0, 0xff, 0x7e, 0x9c, 0x16, 0x17, 0xa2, 0x1b, 0x55, 0xa7, 0x08, 0x48, 0x64, 0x09, 0xf6, 0xca, 0x08, 0x69, 0xf3, 0x00, 0x35, 0xbb, 0x02, 0xb3, 0x61, 0x00, 0x1b, 0xf7, 0xfa, 0xb9, 0xf0, 0xf8, 0xc0, 0x1f, 0xfd, 0xfa, 0xbe, 0x00, 0x76, 0x03, 0xff, 0xd5, 0x40, 0xff, 0x80, 0xa9, 0xff, 0x01, 0x43, 0xff, 0x47, 0xc3, 0xfd, 0x50, 0xb6, 0xfd, 0xba, 0x5d, 0x00, 0x3d, 0x7a, 0x00, 0x3a, 0x8b, 0xff, 0x43, 0x9a, 0xfe, 0xa4, 0xcb, 0xfe, 0x76, 0x76, 0xff, 0x59, 0x9e, 0xfe, 0x27, 0x8f, 0xfe, 0x02, 0x50, 0xfe, 0x2d, 0x51, 0xfe, 0x39, 0x96, 0xfe, 0xc4, 0x62, 0xfe, 0x5f, 0x20, 0xff, 0x3a, 0xb2, 0xff, 0xf8, 0x2c, 0x14, 0xbb, 0x1d, 0x19, 0x07, 0x46, 0x08, 0x75, 0x8a, 0x08, 0xa7, 0xaf, 0x07, 0xa5, 0x1c, 0x01, 0x96, 0x43, 0x03, 0x25, 0xa6, 0x00, 0xff, 0x33, 0xfb, 0xca, 0xb0, 0xf9, 0x2d, 0x2c, 0xfe, 0xda, 0x3b, 0x01, 0x40, 0x43, 0xff, 0x67, 0x0e, 0x00, 0x03, 0x20, 0x00, 0xb9, 0x36, 0xff, 0xe4, 0x97, 0xfe, 0x11, 0x6c, 0xfe, 0xba, 0xd1, 0xff, 0x0a, 0x09, 0x00, 0xa9, 0xbe, 0xff, 0x07, 0xd7, 0xfe, 0xb8, 0xfc, 0xfe, 0x5c, 0xd7, 0xff, 0xaf, 0x31, 0xff, 0xbd, 0x1d, 0xff, 0x7d, 0x99, 0xfe, 0xca, 0x35, 0xfe, 0x2f, 0x7f, 0xfe, 0x5a, 0x89, 0xfe, 0xb4, 0x42, 0xff, 0x3a, 0xb1, 0xff, 0xd4, 0x17, 0x12, 0x88, 0x3c, 0x16, 0x72, 0xbe, 0x07, 0xe9, 0x33, 0x08, 0x44, 0xc4, 0x06, 0x19, 0x44, 0x01, 0x1d, 0x98, 0x03, 0xe8, 0xf0, 0x00, 0x13, 0xdb, 0xfb, 0x6e, 0xc6, 0xfa, 0x76, 0x9e, 0xff, 0xf8, 0x59, 0x02, 0xad, 0xd9, 0xff, 0x9e, 0x78, 0x00, 0x03, 0x6f, 0x00, 0x68, 0x6c, 0xff, 0x09, 0x38, 0xff, 0x5f, 0xf9, 0xfe, 0x40, 0x80, 0xff, 0x20, 0xab, 0xff, 0xb5, 0xee, 0xff, 0x8e, 0x46, 0xff, 0xdf, 0x67, 0xff, 0xed, 0x01, 0x00, 0xb1, 0x2a, 0xff, 0x4c, 0x4e, 0xff, 0x44, 0xfe, 0xfe, 0x84, 0x6a, 0xfe, 0x16, 0xae, 0xfe, 0xc4, 0xd1, 0xfe, 0xb4, 0x50, 0xff, 0xe4, 0xa9, 0xff, 0x97, 0x12, 0x11, 0x96, 0x9e, 0x14, 0x5d, 0xb5, 0x06, 0x75, 0xf2, 0x06, 0x31, 0xa7, 0x05, 0x0c, 0x24, 0x01, 0xdc, 0x06, 0x04, 0x67, 0x06, 0x02, 0xb8, 0x30, 0xfd, 0x3b, 0x18, 0xfc, 0xb7, 0x1f, 0x01, 0x1d, 0xb4, 0x03, 0x3c, 0xbd, 0x00, 0xe1, 0xa7, 0x00, 0x4d, 0x1a, 0x00, 0x87, 0x12, 0xff, 0x03, 0x39, 0xff, 0x55, 0x38, 0xff, 0x6d, 0x9e, 0xff, 0x3f, 0xdc, 0xff, 0x99, 0x44, 0x00, 0x43, 0x6e, 0xff, 0xd1, 0x4e, 0xff, 0x15, 0xf7, 0xff, 0x46, 0x64, 0xff, 0x7f, 0x95, 0xff, 0x21, 0x29, 0xff, 0x8a, 0x86, 0xfe, 0x0e, 0xf1, 0xfe, 0xa9, 0x3e, 0xff, 0x24, 0x9e, 0xff, 0xd4, 0xcf, 0xff, 0xa6, 0x5e, 0x10, 0xfc, 0x97, 0x13, 0x27, 0xe6, 0x05, 0x09, 0xb6, 0x06, 0x24, 0x4a, 0x06, 0x18, 0xf9, 0x01, 0x22, 0xaf, 0x04, 0x5f, 0xc6, 0x02, 0x4e, 0x41, 0xfe, 0x68, 0x40, 0xfd, 0x35, 0xb2, 0x01, 0xad, 0xa0, 0x03, 0x8e, 0x3b, 0x00, 0xb4, 0xba, 0xff, 0x18, 0x25, 0xff, 0x5f, 0xdf, 0xfe, 0xef, 0xd6, 0xff, 0xa6, 0xcf, 0xff, 0xff, 0xc4, 0xff, 0xbc, 0x94, 0xff, 0xe2, 0xdd, 0xff, 0xd2, 0x58, 0xff, 0xa9, 0x66, 0xff, 0xb9, 0x0b, 0x00, 0x7b, 0x87, 0xff, 0x26, 0xea, 0xff, 0xec, 0x9f, 0xff, 0x4b, 0xcd, 0xfe, 0xc3, 0x05, 0xff, 0x14, 0x3e, 0xff, 0x55, 0x7d, 0xff, 0xf9, 0x80, 0xff, 0xdf, 0x92, 0x10, 0x5f, 0xb8, 0x14, 0xea, 0x82, 0x07, 0x4e, 0xca, 0x07, 0x57, 0xa3, 0x06, 0xb8, 0x2a, 0x02, 0x26, 0xf0, 0x04, 0x26, 0x77, 0x02, 0x46, 0x4a, 0xfd, 0x2d, 0x20, 0xfc, 0x61, 0xc7, 0x00, 0xec, 0x06, 0x03, 0x28, 0xfc, 0xff, 0x15, 0xb7, 0xff, 0x1d, 0x11, 0xff, 0x70, 0xe6, 0xfe, 0xc6, 0xea, 0xff, 0x66, 0x8b, 0xff, 0x2f, 0x5d, 0xff, 0x43, 0x80, 0xff, 0x4a, 0x11, 0x00, 0xfe, 0x71, 0xff, 0x0c, 0x80, 0xff, 0x1c, 0x44, 0x00, 0x72, 0x9d, 0xff, 0xd2, 0xf3, 0xff, 0x2f, 0xd4, 0xff, 0xa9, 0xf7, 0xfe, 0x8f, 0xe6, 0xfe, 0x78, 0xe1, 0xfe, 0x3d, 0xed, 0xfe, 0x0f, 0x04, 0xff, 0x66, 0xf7, 0x10, 0xe6, 0x02, 0x15, 0xf8, 0x39, 0x07, 0xfd, 0x43, 0x07, 0xbb, 0x4a, 0x06, 0xa8, 0x21, 0x02, 0xf8, 0x15, 0x05, 0xe4, 0xa2, 0x02, 0x44, 0x2a, 0xfd, 0x39, 0x95, 0xfb, 0xe1, 0x4a, 0x00, 0xa8, 0xee, 0x02, 0x0d, 0xec, 0xff, 0xd3, 0x61, 0xff, 0x85, 0xbd, 0xfe, 0xee, 0xbf, 0xfe, 0x7e, 0x29, 0x00, 0x59, 0x5b, 0x00, 0x9d, 0x2b, 0x00, 0x19, 0xc3, 0xff, 0xed, 0xec, 0xff, 0x3a, 0x4f, 0xff, 0x49, 0x5d, 0xff, 0x73, 0xdf, 0xff, 0x17, 0x2d, 0xff, 0xcd, 0xb6, 0xff, 0x87, 0xd3, 0xff, 0xaf, 0x61, 0xff, 0xcb, 0x87, 0xff, 0x4b, 0x2f, 0xff, 0xcb, 0xe8, 0xfe, 0xeb, 0xdd, 0xfe, 0x92, 0x97, 0x11, 0x8e, 0xba, 0x15, 0x92, 0xf9, 0x06, 0x0c, 0x64, 0x06, 0xc5, 0x2a, 0x05, 0x6e, 0x20, 0x01, 0x97, 0x96, 0x04, 0x0a, 0x7a, 0x02, 0x38, 0x01, 0xfd, 0x3e, 0x1d, 0xfb, 0x74, 0x4d, 0x00, 0x50, 0xc4, 0x03, 0x23, 0x9f, 0x00, 0x27, 0x94, 0xff, 0x7b, 0x31, 0xfe, 0xb2, 0xb4, 0xfd, 0x61, 0xb2, 0xff, 0xf3, 0x97, 0x00, 0x7c, 0xba, 0x00, 0x1b, 0xa9, 0x00, 0x18, 0xc0, 0x00, 0x2d, 0x88, 0xff, 0xc6, 0x4d, 0xff, 0x3f, 0xf0, 0xff, 0x52, 0x0b, 0xff, 0x93, 0x35, 0xff, 0x89, 0x51, 0xff, 0x7a, 0xf3, 0xfe, 0xf1, 0x60, 0xff, 0x3f, 0xd5, 0xff, 0x36, 0x05, 0x00, 0xe9, 0xb4, 0xff, 0xa5, 0xd1, 0x12, 0x45, 0xa5, 0x17, 0xdb, 0xa8, 0x07, 0xfb, 0x7b, 0x06, 0xf3, 0x01, 0x05, 0x29, 0x88, 0x00, 0xdf, 0x00, 0x04, 0xae, 0x5a, 0x01, 0x3e, 0x6f, 0xfb, 0xe4, 0x3f, 0xf9, 0xfb, 0xed, 0xfe, 0xc3, 0x03, 0x04, 0x4e, 0x3c, 0x01, 0xc2, 0xa1, 0xff, 0xe9, 0x5f, 0xfe, 0xd9, 0x28, 0xfe, 0x99, 0xcc, 0xff, 0xad, 0x63, 0x00, 0x77, 0x87, 0x00, 0x14, 0x2d, 0x00, 0xc6, 0x98, 0x00, 0xdc, 0x20, 0x00, 0x03, 0xd2, 0xff, 0x61, 0x37, 0x00, 0x68, 0x65, 0xff, 0xef, 0x7a, 0xff, 0x59, 0x51, 0xff, 0x6c, 0xab, 0xfe, 0x02, 0xef, 0xfe, 0x04, 0x68, 0xff, 0x29, 0xf2, 0xff, 0x7c, 0x56, 0x00, 0x7c, 0xb8, 0x14, 0xdc, 0xfc, 0x19, 0x80, 0x23, 0x08, 0xc9, 0xe2, 0x06, 0xe6, 0x56, 0x05, 0xc3, 0x49, 0x00, 0x93, 0xfb, 0x03, 0x0f, 0xc0, 0x00, 0xd6, 0x09, 0xfa, 0xfb, 0x41, 0xf7, 0xe4, 0xa5, 0xfd, 0x03, 0x43, 0x04, 0x54, 0x12, 0x01, 0xc0, 0xa0, 0xfe, 0xac, 0x81, 0xfd, 0x03, 0xab, 0xfd, 0x19, 0xda, 0xff, 0xa6, 0xe0, 0x00, 0x9f, 0xd3, 0x00, 0x70, 0x4b, 0x00, 0xdd, 0xe5, 0x00, 0xc9, 0x07, 0x00, 0x09, 0x97, 0xff, 0x23, 0x4b, 0x00, 0x30, 0x56, 0xff, 0x07, 0x8f, 0xff, 0xd5, 0x9b, 0xff, 0xc8, 0xe1, 0xfe, 0x58, 0x13, 0xff, 0xd6, 0xa2, 0xff, 0xcf, 0x14, 0x00, 0x35, 0xe8, 0xff, 0x54, 0xa7, 0x17, 0x9f, 0xb0, 0x1c, 0x37, 0xd6, 0x07, 0x83, 0x53, 0x07, 0xaa, 0xbe, 0x05, 0xbc, 0x0f, 0x00, 0x68, 0x69, 0x04, 0x38, 0x49, 0x00, 0xb3, 0x93, 0xf8, 0xbd, 0x4d, 0xf5, 0xcb, 0x15, 0xfd, 0x76, 0x3c, 0x05, 0xcd, 0xd1, 0x00, 0x50, 0x62, 0xfd, 0xae, 0x5f, 0xfc, 0x86, 0xcc, 0xfc, 0xb2, 0x3a, 0xff, 0x04, 0x70, 0x00, 0x86, 0x79, 0x00, 0x5a, 0x09, 0x00, 0x01, 0x15, 0x01, 0x75, 0x2d, 0x00, 0xe5, 0x7c, 0xff, 0xef, 0x4d, 0x00, 0x8b, 0x64, 0xff, 0x3c, 0x75, 0xff, 0x59, 0x7b, 0xff, 0x14, 0xf6, 0xfe, 0xf6, 0x28, 0xff, 0xab, 0xc1, 0xff, 0xce, 0x21, 0x00, 0x97, 0xcf, 0xff, 0xe8, 0x34, 0x1b, 0x57, 0xf9, 0x1f, 0x50, 0xe6, 0x06, 0xb8, 0x5b, 0x07, 0xe4, 0x52, 0x06, 0x1f, 0x7a, 0xff, 0x1a, 0x9b, 0x04, 0xf5, 0x86, 0xff, 0x17, 0xd2, 0xf6, 0x52, 0x17, 0xf4, 0x11, 0x78, 0xfd, 0x09, 0x41, 0x06, 0x3a, 0x52, 0x00, 0x6d, 0x59, 0xfc, 0x06, 0x7d, 0xfb, 0x8f, 0x49, 0xfc, 0xdf, 0x04, 0xff, 0x89, 0xfb, 0xff, 0xeb, 0x13, 0x00, 0xb2, 0x8e, 0xff, 0xe0, 0xc9, 0x00, 0x0c, 0xca, 0xff, 0x6a, 0xf4, 0xfe, 0xe3, 0x36, 0x00, 0xfc, 0x63, 0xff, 0xcb, 0x8c, 0xff, 0x63, 0x4f, 0xff, 0x1d, 0x79, 0xfe, 0x6f, 0xeb, 0xfe, 0x41, 0x9f, 0xff, 0x71, 0x1c, 0x00, 0x33, 0xfa, 0xff, 0xb7, 0x63, 0x1e, 0xb5, 0xb6, 0x23, 0x1a, 0x82, 0x06, 0xe3, 0xe8, 0x06, 0x3f, 0xf2, 0x06, 0x35, 0xff, 0xfe, 0x66, 0xa6, 0x04, 0x2e, 0xe7, 0xfe, 0x11, 0xf9, 0xf4, 0x5a, 0x2b, 0xf3, 0x68, 0xe3, 0xfd, 0x13, 0xbb, 0x06, 0xbf, 0x0c, 0x00, 0xda, 0xe8, 0xfb, 0x36, 0xc9, 0xfa, 0x38, 0xd6, 0xfb, 0x46, 0x05, 0xff, 0x57, 0xad, 0xff, 0xd8, 0xdc, 0xff, 0x1c, 0x61, 0xff, 0xda, 0xa3, 0x00, 0x6a, 0xb5, 0xff, 0x93, 0xb1, 0xfe, 0x98, 0xc6, 0xff, 0x4b, 0xd4, 0xfe, 0x93, 0x45, 0xff, 0x09, 0xf9, 0xfe, 0xa7, 0x1d, 0xfe, 0x51, 0xd4, 0xfe, 0x02, 0x7c, 0xff, 0x69, 0x19, 0x00, 0xbd, 0xff, 0xff, 0xe2, 0x33, 0x20, 0xb3, 0x28, 0x27, 0xd6, 0xf6, 0x07, 0x96, 0xce, 0x06, 0x50, 0xe2, 0x06, 0x3d, 0xff, 0xfd, 0x18, 0x79, 0x04, 0xa5, 0xdb, 0xfe, 0x6a, 0xc5, 0xf3, 0x73, 0x0e, 0xf3, 0xd8, 0x6b, 0xfd, 0xda, 0x08, 0x05, 0x4a, 0xc5, 0xff, 0x9b, 0xd7, 0xfc, 0xa0, 0xab, 0xfa, 0x40, 0xfe, 0xfa, 0x33, 0x8b, 0xfe, 0xb6, 0x58, 0xff, 0x3e, 0x88, 0x00, 0xe2, 0x12, 0x00, 0x37, 0x0c, 0x00, 0x8e, 0x46, 0xff, 0xb3, 0x8a, 0xfe, 0xc0, 0x74, 0xff, 0x9c, 0x68, 0xfe, 0x23, 0xd3, 0xfe, 0xb1, 0x9b, 0xfe, 0xca, 0xde, 0xfd, 0xc3, 0xc6, 0xfe, 0xa6, 0x40, 0xff, 0x20, 0x11, 0x00, 0x25, 0x15, 0x00, 0x92, 0xc9, 0x20, 0xe7, 0x51, 0x29, 0x01, 0x56, 0x0a, 0x2d, 0xc7, 0x07, 0xb8, 0x79, 0x07, 0x8f, 0x0f, 0xfd, 0xe0, 0xf6, 0x02, 0x2c, 0xf2, 0xfe, 0x2c, 0xe3, 0xf3, 0x70, 0xfc, 0xf3, 0x9e, 0x26, 0xfd, 0xe6, 0xf0, 0x01, 0xe3, 0x9a, 0xfe, 0xe2, 0xf9, 0xfd, 0xc6, 0xc7, 0xfb, 0x6b, 0x8c, 0xfb, 0xb4, 0x03, 0xfe, 0x1d, 0x5d, 0xfe, 0xb9, 0x99, 0x00, 0x49, 0x02, 0x01, 0x76, 0xee, 0xff, 0xab, 0x9e, 0xfe, 0x3b, 0x67, 0xfe, 0x88, 0x7f, 0xff, 0x54, 0xad, 0xfe, 0x09, 0xe2, 0xfe, 0xf3, 0x61, 0xfe, 0x01, 0xca, 0xfd, 0xcc, 0xa2, 0xfe, 0x4b, 0xb8, 0xfe, 0x2c, 0x92, 0xff, 0x1e, 0xf7, 0xff, 0x01, 0x93, 0x21, 0x10, 0x59, 0x2a, 0xa0, 0xb2, 0x0b, 0x7c, 0xc4, 0x09, 0xe4, 0x2a, 0x09, 0x6c, 0x03, 0xfd, 0x45, 0x36, 0x01, 0xdf, 0x71, 0xfd, 0xa3, 0x1f, 0xf3, 0x96, 0x79, 0xf5, 0xfd, 0xe2, 0xfe, 0x34, 0x20, 0xff, 0x97, 0x77, 0xfb, 0x89, 0x7a, 0xfe, 0x3c, 0xa3, 0xfd, 0x9c, 0x44, 0xfd, 0x2a, 0x58, 0xfe, 0x24, 0xec, 0xfc, 0xdc, 0x5d, 0xff, 0x3f, 0x37, 0x01, 0x86, 0x4c, 0x00, 0x15, 0xee, 0xfe, 0xc7, 0xfb, 0xfe, 0x6b, 0x6f, 0xff, 0xc7, 0x60, 0xfe, 0x88, 0xce, 0xfe, 0x65, 0x13, 0xfe, 0xa0, 0x6e, 0xfd, 0xb0, 0x85, 0xfe, 0x73, 0x42, 0xfe, 0xc5, 0xd6, 0xfe, 0xd1, 0xb2, 0xff, 0x5d, 0xcb, 0x23, 0x45, 0xcc, 0x2a, 0x52, 0x7f, 0x0a, 0x8b, 0xa3, 0x0b, 0xd8, 0x14, 0x0b, 0x43, 0x21, 0xfd, 0x26, 0x1b, 0x00, 0xbf, 0x95, 0xfb, 0x57, 0x55, 0xf2, 0xb7, 0x3e, 0xf7, 0xe3, 0x73, 0x01, 0xce, 0xda, 0xfc, 0x24, 0xaa, 0xf7, 0x5a, 0x38, 0xfe, 0x97, 0x8f, 0xfe, 0x8e, 0x47, 0xff, 0xb0, 0xc8, 0xff, 0x9d, 0xce, 0xfb, 0x1d, 0x30, 0xfe, 0x8a, 0x88, 0x01, 0x6c, 0x99, 0x00, 0xc7, 0x6e, 0xfe, 0x15, 0x3d, 0xff, 0x15, 0xbd, 0xff, 0x3b, 0x20, 0xfe, 0xe4, 0xa2, 0xfe, 0x8b, 0x56, 0xfd, 0x6e, 0xc0, 0xfc, 0xd1, 0x6f, 0xfe, 0x3c, 0x17, 0xfe, 0x16, 0x5e, 0xfe, 0xc7, 0x5b, 0xff, 0x75, 0x96, 0x27, 0xf9, 0xca, 0x2b, 0x12, 0x39, 0x07, 0x52, 0x4c, 0x0c, 0xd0, 0x09, 0x0c, 0x27, 0x7c, 0xfc, 0x48, 0xde, 0x00, 0xb0, 0xae, 0xfa, 0x95, 0xec, 0xf0, 0x30, 0x7d, 0xf9, 0xcc, 0x79, 0x05, 0x89, 0x03, 0xfc, 0xeb, 0xee, 0xf2, 0xed, 0x7c, 0xfc, 0xab, 0x32, 0xff, 0x83, 0xaa, 0x00, 0x16, 0xe1, 0x01, 0xb0, 0x2f, 0xfc, 0x5c, 0x08, 0xfd, 0xa5, 0x48, 0x01, 0x46, 0xef, 0x00, 0x0a, 0xd3, 0xfd, 0xb3, 0xf8, 0xfe, 0x1a, 0xd4, 0xff, 0x98, 0x8b, 0xfd, 0xfb, 0x61, 0xfe, 0xad, 0xfe, 0xfc, 0xaa, 0x29, 0xfc, 0x67, 0x7e, 0xfe, 0x44, 0x41, 0xfe, 0xe2, 0xf7, 0xfd, 0xf6, 0xf6, 0xfe, 0x84, 0x6d, 0x2c, 0xcf, 0xf0, 0x2f, 0xc6, 0x36, 0x03, 0x08, 0x85, 0x08, 0xee, 0x54, 0x0b, 0x72, 0xaa, 0xfb, 0xa6, 0x0c, 0x03, 0xcc, 0xc6, 0xfc, 0xdd, 0x86, 0xef, 0xfc, 0xd1, 0xf8, 0x73, 0x9d, 0x08, 0xca, 0xa0, 0xfe, 0xa1, 0xbe, 0xf0, 0xf9, 0xa4, 0xf9, 0xd1, 0x8a, 0xfe, 0xa9, 0x63, 0x01, 0xc5, 0x7c, 0x03, 0x70, 0x78, 0xfc, 0xc2, 0xe5, 0xfb, 0x3e, 0xef, 0x00, 0x28, 0x61, 0x01, 0x31, 0x55, 0xfd, 0xea, 0x6e, 0xfe, 0x42, 0x2f, 0x00, 0x05, 0x53, 0xfd, 0x88, 0x15, 0xfe, 0xe0, 0xc0, 0xfc, 0x67, 0x84, 0xfb, 0xbe, 0x5f, 0xfe, 0x82, 0x86, 0xfe, 0x5a, 0xf8, 0xfd, 0x0d, 0x9c, 0xfe, 0x30, 0x6e, 0x32, 0x67, 0x31, 0x34, 0xbc, 0xfa, 0xfd, 0xc4, 0x4e, 0x04, 0x1b, 0x28, 0x09, 0x32, 0x39, 0xfa, 0x26, 0x19, 0x07, 0xb8, 0x92, 0xff, 0x1f, 0xa9, 0xed, 0xc4, 0x64, 0xf7, 0xb8, 0x67, 0x0b, 0x5b, 0xc5, 0x02, 0xa7, 0x31, 0xf0, 0x98, 0x8b, 0xf6, 0xaf, 0x74, 0xfc, 0xac, 0x4f, 0x01, 0x49, 0xd9, 0x04, 0x76, 0x39, 0xfc, 0x95, 0xfc, 0xf9, 0xba, 0x01, 0x00, 0xf1, 0x51, 0x02, 0x3a, 0x63, 0xfd, 0x2a, 0x7a, 0xfd, 0xaa, 0x39, 0x00, 0x89, 0x59, 0xfd, 0x06, 0x61, 0xfe, 0x38, 0xee, 0xfc, 0x01, 0xbf, 0xfa, 0x90, 0xfd, 0xfd, 0x74, 0xa6, 0xfe, 0x85, 0x05, 0xfe, 0xdc, 0x98, 0xfe, 0xab, 0xbf, 0x36, 0x58, 0x6c, 0x36, 0x4b, 0xb5, 0xfa, 0xec, 0xa3, 0x02, 0xdf, 0x94, 0x06, 0xc3, 0x08, 0xf9, 0x1a, 0x3a, 0x0a, 0x62, 0xdd, 0x00, 0xcf, 0x0b, 0xed, 0x84, 0xd4, 0xf5, 0x6f, 0x16, 0x0d, 0xe8, 0x0c, 0x07, 0x60, 0x15, 0xf0, 0x57, 0x2e, 0xf4, 0xd3, 0xd3, 0xf9, 0x26, 0xe9, 0xff, 0x8f, 0xa0, 0x05, 0xfa, 0x83, 0xfc, 0x32, 0x18, 0xf9, 0xde, 0xcc, 0xfe, 0x09, 0x33, 0x02, 0xf2, 0x0e, 0xfd, 0x4a, 0xfd, 0xfc, 0x0c, 0x82, 0x00, 0x53, 0x2f, 0xfd, 0x97, 0xb6, 0xfe, 0x64, 0x32, 0xfd, 0x77, 0x12, 0xfa, 0x11, 0xa1, 0xfd, 0x6f, 0x0b, 0xff, 0xd4, 0x97, 0xfe, 0xfa, 0xb4, 0xfe, 0x79, 0xa1, 0x39, 0xbd, 0xe1, 0x38, 0xe7, 0xa5, 0xf9, 0xbb, 0xdb, 0x00, 0xd7, 0x9a, 0x03, 0xd5, 0x67, 0xf8, 0x23, 0xe4, 0x0c, 0x37, 0x7c, 0x02, 0xe2, 0xd8, 0xec, 0x75, 0xc8, 0xf2, 0xbf, 0x1c, 0x0d, 0xc0, 0x89, 0x0b, 0x34, 0x04, 0xf2, 0xc4, 0xd7, 0xf2, 0xe7, 0xbd, 0xf5, 0xd7, 0x4f, 0xfd, 0xb2, 0x50, 0x07, 0x5c, 0x1a, 0xfe, 0xa4, 0x9a, 0xf8, 0x34, 0x6b, 0xfd, 0x5a, 0x84, 0x01, 0x3a, 0xdb, 0xfc, 0x77, 0x0e, 0xfd, 0x0b, 0x9b, 0x00, 0x0a, 0xad, 0xfc, 0xa5, 0x91, 0xfe, 0xc1, 0x51, 0xfd, 0x0c, 0x1f, 0xfa, 0x71, 0xdc, 0xfd, 0x8c, 0x7d, 0xff, 0xef, 0xf7, 0xfe, 0xde, 0xbf, 0xfe, 0x5a, 0x80, 0x3b, 0xe4, 0x33, 0x3a, 0xd0, 0xd2, 0xfa, 0x81, 0x92, 0x00, 0xd7, 0x17, 0x01, 0x77, 0x35, 0xf8, 0x2c, 0x14, 0x0d, 0x2c, 0x99, 0x03, 0x83, 0x8b, 0xed, 0x9f, 0x64, 0xef, 0x0d, 0x40, 0x0c, 0x33, 0xdf, 0x0e, 0x42, 0x47, 0xf5, 0x5e, 0x4a, 0xf2, 0x77, 0xdf, 0xf1, 0x96, 0x42, 0xfb, 0xe3, 0x27, 0x08, 0xc8, 0xa6, 0x00, 0x67, 0x15, 0xf9, 0x1e, 0xf2, 0xfb, 0x23, 0x47, 0x01, 0x1e, 0xac, 0xfc, 0x65, 0x06, 0xfd, 0xb5, 0x16, 0x00, 0xac, 0xe4, 0xfb, 0x2b, 0xca, 0xfe, 0xcf, 0xca, 0xfd, 0xd1, 0x8a, 0xfa, 0x2c, 0xae, 0xfd, 0xfe, 0x7c, 0xff, 0xbc, 0x3d, 0xff, 0x50, 0xe4, 0xfe, 0x36, 0x9f, 0x3b, 0x30, 0x52, 0x3b, 0x24, 0xf1, 0xfc, 0xb2, 0x31, 0x01, 0x6f, 0xbc, 0xff, 0xfb, 0x8a, 0xf7, 0x44, 0x63, 0x0c, 0xe2, 0xbe, 0x03, 0x7c, 0xe9, 0xed, 0xc9, 0x9e, 0xec, 0xef, 0x0f, 0x0a, 0x99, 0xbd, 0x10, 0xf5, 0x62, 0xf9, 0xc4, 0x25, 0xf3, 0x73, 0x9a, 0xee, 0xa6, 0x1e, 0xf9, 0xce, 0x1d, 0x08, 0xc6, 0x25, 0x03, 0xe5, 0xbc, 0xfa, 0x46, 0x2c, 0xfa, 0xb0, 0xe1, 0x00, 0xa3, 0xf6, 0xfc, 0xee, 0x34, 0xfc, 0xea, 0xa1, 0xff, 0xe6, 0xfa, 0xfb, 0xda, 0x14, 0xff, 0x24, 0xe0, 0xfd, 0xd3, 0xdc, 0xfa, 0x0b, 0x42, 0xfd, 0xa7, 0xee, 0xfe, 0x69, 0xab, 0xff, 0xdd, 0xa2, 0xfe, 0xa1, 0x20, 0x3a, 0x26, 0xcf, 0x3b, 0xfe, 0xe5, 0x00, 0x49, 0xbf, 0x03, 0x20, 0x2e, 0xff, 0x5a, 0xa9, 0xf6, 0x50, 0x5e, 0x0b, 0xf8, 0x07, 0x03, 0x82, 0xf7, 0xed, 0x4d, 0x42, 0xea, 0x58, 0xeb, 0x06, 0xfa, 0x0f, 0x11, 0x4c, 0xe2, 0xfd, 0xe9, 0x7b, 0xf7, 0x00, 0x8e, 0xec, 0xd3, 0x3f, 0xf5, 0x29, 0xdb, 0x07, 0x35, 0x41, 0x05, 0x11, 0x54, 0xfd, 0x10, 0x7d, 0xf9, 0x46, 0x74, 0xff, 0x83, 0x9d, 0xfd, 0x75, 0x1c, 0xfc, 0xc2, 0x86, 0xff, 0x3b, 0x8f, 0xfc, 0xa2, 0xae, 0xff, 0xeb, 0xc3, 0xfd, 0x2d, 0x68, 0xfa, 0x2c, 0x32, 0xfd, 0xea, 0x38, 0xfe, 0xe0, 0x87, 0xff, 0xf2, 0x96, 0xfe, 0xa3, 0xfe, 0x37, 0x53, 0xdf, 0x3a, 0xa8, 0x93, 0x05, 0x3f, 0x4b, 0x06, 0x6c, 0x15, 0xff, 0x40, 0x20, 0xf7, 0xc3, 0xf7, 0x08, 0x5e, 0xdc, 0x02, 0x81, 0xdf, 0xee, 0xa7, 0x34, 0xe7, 0x6a, 0xde, 0x03, 0xdc, 0xa7, 0x0f, 0x4f, 0x9e, 0x00, 0x97, 0x86, 0xfd, 0xa3, 0xfd, 0xec, 0xd9, 0xaa, 0xf0, 0xcc, 0x87, 0x06, 0x8d, 0x5d, 0x06, 0x1f, 0xd3, 0xfe, 0xa3, 0xe7, 0xfa, 0xfa, 0x86, 0xfe, 0x10, 0xa7, 0xfd, 0x38, 0x54, 0xfd, 0xe0, 0x22, 0xff, 0x82, 0x32, 0xfc, 0x4a, 0x36, 0x00, 0xca, 0x14, 0xfe, 0x28, 0xcd, 0xf9, 0xd9, 0xe5, 0xfc, 0xdd, 0x9d, 0xfd, 0xbe, 0xe9, 0xfe, 0xf4, 0x4b, 0xff, 0x18, 0x73, 0x35, 0xd8, 0x76, 0x38, 0xef, 0x2f, 0x09, 0x43, 0x76, 0x08, 0xaa, 0xd8, 0xff, 0xe9, 0xfe, 0xf8, 0x9a, 0x43, 0x06, 0x8e, 0xca, 0x01, 0xb9, 0xab, 0xf0, 0xe9, 0x4a, 0xe5, 0xc6, 0x7c, 0x00, 0x64, 0x13, 0x0e, 0xce, 0x2b, 0x01, 0xbb, 0x0f, 0x02, 0x54, 0x60, 0xf0, 0x37, 0x24, 0xec, 0xd9, 0xdc, 0x02, 0x94, 0xf2, 0x06, 0x34, 0xcc, 0xff, 0x64, 0x39, 0xfd, 0x7d, 0xef, 0xfe, 0xd7, 0x41, 0xfd, 0x4e, 0xf1, 0xfd, 0x0e, 0x17, 0xff, 0x0a, 0xd4, 0xfb, 0xef, 0xc5, 0xff, 0xc6, 0xef, 0xfd, 0x7a, 0x26, 0xf9, 0x5e, 0xcf, 0xfc, 0x4c, 0xdd, 0xfd, 0x77, 0xaf, 0xfe, 0xb2, 0x16, 0x00, 0x72, 0x47, 0x32, 0xce, 0xd0, 0x35, 0x21, 0x9f, 0x0a, 0x70, 0xe1, 0x0b, 0xf9, 0xe5, 0x01, 0x39, 0x22, 0xf8, 0x70, 0x87, 0x05, 0x6a, 0x31, 0x01, 0xdc, 0xd4, 0xf1, 0x89, 0xbc, 0xe5, 0xdf, 0x44, 0xfc, 0xbf, 0x4e, 0x0d, 0xc8, 0x5e, 0x01, 0x15, 0x2b, 0x03, 0xb1, 0x6f, 0xf5, 0xbb, 0x27, 0xe9, 0xfc, 0x38, 0xfd, 0x78, 0x92, 0x07, 0x90, 0x80, 0x01, 0x19, 0x8d, 0xfe, 0x4b, 0x44, 0xff, 0xb9, 0x83, 0xfd, 0x3a, 0x4f, 0xfe, 0xd9, 0x75, 0xff, 0x11, 0x51, 0xfb, 0xac, 0xb9, 0xfd, 0x9c, 0x66, 0xfe, 0x56, 0xfe, 0xf9, 0x5a, 0x63, 0xfc, 0xc9, 0x37, 0xfe, 0xb2, 0xba, 0xfe, 0xea, 0x9a, 0x00, 0x12, 0x31, 0x30, 0x77, 0x8e, 0x34, 0xf4, 0x60, 0x09, 0x41, 0xcf, 0x0b, 0x44, 0xb2, 0x05, 0xc2, 0xaa, 0xf7, 0x7a, 0x4a, 0x03, 0xcd, 0xa3, 0x01, 0xd8, 0x1a, 0xf4, 0x84, 0xc6, 0xe8, 0xc3, 0xb6, 0xf9, 0xea, 0x4c, 0x0c, 0x2b, 0x9e, 0x00, 0x46, 0xa1, 0xff, 0x70, 0x3c, 0xfb, 0x51, 0xf3, 0xeb, 0xf1, 0x74, 0xf6, 0xe9, 0x8b, 0x05, 0x5b, 0x23, 0x03, 0x88, 0xdd, 0xff, 0xb0, 0x7d, 0x00, 0x40, 0xeb, 0xfd, 0x57, 0xe6, 0xfd, 0x63, 0x09, 0xff, 0x65, 0x0b, 0xfb, 0xbd, 0xb5, 0xfc, 0x1e, 0x37, 0xff, 0xe0, 0x52, 0xfb, 0x4d, 0x46, 0xfc, 0x5d, 0x1c, 0xff, 0x30, 0xdb, 0xfe, 0x6c, 0xd6, 0xff, 0x2f, 0xc8, 0x2d, 0x8c, 0x1b, 0x33, 0xe5, 0xe6, 0x07, 0x7e, 0xeb, 0x0a, 0x26, 0x71, 0x08, 0x89, 0xd3, 0xf9, 0x45, 0x41, 0x02, 0x0f, 0x22, 0xfe, 0x8c, 0x7b, 0xf6, 0xab, 0x5e, 0xef, 0x71, 0x76, 0xf7, 0x9f, 0xbc, 0x0a, 0xf7, 0xce, 0x01, 0x8e, 0xe5, 0xfa, 0x4c, 0x0d, 0xfe, 0xed, 0x81, 0xf2, 0xa5, 0x18, 0xf2, 0x40, 0x59, 0x01, 0x8c, 0x43, 0x04, 0x9b, 0x8e, 0xff, 0xb2, 0xa4, 0x00, 0xb3, 0x3c, 0x00, 0x07, 0xd8, 0xfd, 0x22, 0x04, 0xfd, 0x43, 0x63, 0xfb, 0x34, 0x02, 0xfd, 0x0b, 0xfd, 0xff, 0x52, 0xa6, 0xfd, 0x3e, 0xc3, 0xfb, 0x38, 0x2b, 0xfe, 0x80, 0x64, 0xff, 0x8e, 0xa8, 0xff, 0x06, 0xf5, 0x2a, 0x57, 0x4c, 0x2f, 0x64, 0x28, 0x07, 0x2a, 0x2f, 0x0c, 0x79, 0x60, 0x0a, 0x66, 0xa5, 0xfa, 0xe5, 0x81, 0x01, 0x9d, 0x1b, 0xfe, 0x1e, 0x75, 0xf7, 0x57, 0xae, 0xf1, 0x06, 0xf9, 0xf7, 0xde, 0x6a, 0x09, 0x98, 0x1b, 0x03, 0x3a, 0xd9, 0xf9, 0x1e, 0xcb, 0xfd, 0xe6, 0x1f, 0xf8, 0x03, 0x03, 0xf2, 0x95, 0xda, 0xfc, 0x0f, 0xf9, 0x03, 0x05, 0x4b, 0xff, 0xab, 0x85, 0xff, 0xee, 0x7c, 0x00, 0xa0, 0x9d, 0xfe, 0x5b, 0x8b, 0xfd, 0x5c, 0xc9, 0xfb, 0x84, 0x13, 0xfd, 0xa3, 0x5c, 0x00, 0xb3, 0xf4, 0xfe, 0x84, 0x7b, 0xfb, 0x0b, 0x66, 0xfd, 0x33, 0x09, 0x00, 0xbc, 0x9d, 0xff, 0xe6, 0xa4, 0x26, 0x50, 0xab, 0x2a, 0xc1, 0xa4, 0x07, 0xca, 0xd9, 0x0d, 0x25, 0x57, 0x0b, 0x96, 0x85, 0xfa, 0x3c, 0x20, 0x01, 0x50, 0x78, 0x00, 0xcf, 0xee, 0xf9, 0xa0, 0x54, 0xf2, 0x9f, 0x2a, 0xf6, 0xee, 0x2c, 0x07, 0x84, 0x1c, 0x05, 0xd6, 0xd7, 0xfa, 0xd8, 0x2c, 0xfd, 0x34, 0xe4, 0xfb, 0xcf, 0x0a, 0xf4, 0x92, 0xec, 0xfa, 0xd5, 0x8c, 0x03, 0xc0, 0xda, 0xfe, 0x6b, 0xbb, 0xfd, 0xec, 0x4d, 0xff, 0xe4, 0x2e, 0xfe, 0xbb, 0x5c, 0xfe, 0xef, 0x0d, 0xfe, 0xdc, 0x71, 0xfd, 0x85, 0x82, 0xfe, 0xe8, 0xe2, 0xfe, 0x3d, 0xd6, 0xfc, 0xe4, 0x39, 0xfe, 0x3d, 0x69, 0x00, 0x9e, 0x66, 0xff, 0xa8, 0x6f, 0x26, 0x4e, 0x61, 0x26, 0x98, 0x2e, 0x05, 0xcb, 0x8c, 0x12, 0x5d, 0x44, 0x0d, 0xc0, 0x5c, 0xf7, 0xe0, 0xf6, 0x00, 0x6f, 0xcc, 0x03, 0xc9, 0x7d, 0xfc, 0x92, 0x03, 0xf2, 0xd4, 0x82, 0xf3, 0x5a, 0x28, 0x05, 0xa8, 0x0f, 0x06, 0xfb, 0x49, 0xfc, 0xf6, 0x12, 0xff, 0xcf, 0xf3, 0xfd, 0xd7, 0x68, 0xf2, 0x2a, 0xf1, 0xf9, 0xe9, 0x30, 0x05, 0x04, 0x4b, 0xfe, 0x3e, 0x8b, 0xfc, 0x8f, 0xd1, 0xfe, 0xb7, 0x85, 0xfc, 0x08, 0x74, 0xfd, 0x29, 0xe0, 0xfe, 0x4f, 0xba, 0xfd, 0x7b, 0xc6, 0xfe, 0x75, 0x80, 0xff, 0xd2, 0xc5, 0xfc, 0x62, 0x1e, 0xff, 0x4e, 0xdd, 0x01, 0xd4, 0x91, 0xff, 0x96, 0xdf, 0x20, 0xb5, 0x05, 0x24, 0xa0, 0x99, 0x09, 0xa8, 0xed, 0x11, 0xdd, 0x35, 0x0b, 0xf9, 0xaa, 0xf7, 0xe6, 0x8c, 0x00, 0x78, 0x85, 0x02, 0xf5, 0x62, 0xfb, 0xb8, 0x19, 0xf6, 0x39, 0x1b, 0xf6, 0x1b, 0x76, 0x00, 0xd0, 0x55, 0x03, 0x6a, 0x40, 0xfe, 0x8c, 0x87, 0x00, 0xc0, 0x04, 0x00, 0x94, 0x04, 0xf6, 0xc5, 0x09, 0xf8, 0xf5, 0x85, 0x01, 0x8d, 0x17, 0x01, 0x0a, 0x80, 0xff, 0x1f, 0x72, 0xfe, 0xe6, 0x9a, 0xfc, 0xc4, 0x0c, 0xfe, 0xf7, 0x1e, 0xff, 0x62, 0x9e, 0xfe, 0x16, 0x18, 0xff, 0xd0, 0x17, 0xff, 0x50, 0x95, 0xfd, 0xc3, 0x8e, 0xfe, 0xb6, 0x74, 0x00, 0xf1, 0x8a, 0xff, 0xb9, 0x53, 0x1d, 0x0d, 0xcc, 0x20, 0x83, 0x81, 0x09, 0x00, 0xc7, 0x0f, 0xa4, 0x52, 0x0a, 0xa3, 0x3f, 0xfb, 0x60, 0x24, 0x02, 0x30, 0x60, 0x01, 0x1b, 0x75, 0xfb, 0xe6, 0x7c, 0xf7, 0x7f, 0x6e, 0xf7, 0xce, 0xe0, 0xff, 0x8c, 0xec, 0x01, 0x5e, 0x85, 0xfe, 0xbb, 0x2c, 0x00, 0xe1, 0x70, 0x00, 0x08, 0x3d, 0xf9, 0xb3, 0xf5, 0xf8, 0xee, 0xfc, 0x00, 0x8c, 0x12, 0x02, 0xff, 0x46, 0xff, 0xe9, 0xca, 0xfd, 0x4c, 0x82, 0xfd, 0x8e, 0xe6, 0xfe, 0x28, 0x1a, 0xff, 0xdd, 0x42, 0xfe, 0xc8, 0x1c, 0xfe, 0xb2, 0x91, 0xfe, 0x00, 0x99, 0xfe, 0xfe, 0xe5, 0xfe, 0xd6, 0x5f, 0xff, 0xcb, 0x00, 0xff, 0x03, 0x8e, 0x1a, 0x0b, 0xe7, 0x1d, 0x61, 0x0a, 0x09, 0x21, 0xfc, 0x0c, 0x8e, 0x55, 0x09, 0x91, 0xde, 0xfe, 0x36, 0xd7, 0x02, 0xb7, 0x3b, 0x00, 0xff, 0x8c, 0xfb, 0x68, 0x2b, 0xf8, 0x65, 0x10, 0xf9, 0x1a, 0xdd, 0xff, 0x81, 0xeb, 0x00, 0xb5, 0xd0, 0xfe, 0x70, 0x06, 0x00, 0x9a, 0xa0, 0x00, 0x7b, 0xe6, 0xfa, 0xe3, 0x3a, 0xfa, 0x0d, 0x73, 0x01, 0xf6, 0x28, 0x02, 0x99, 0x0b, 0xff, 0x58, 0x05, 0xfe, 0xd3, 0x45, 0xfe, 0x3f, 0x31, 0xff, 0x13, 0xe9, 0xfe, 0xda, 0x06, 0xfe, 0xca, 0x85, 0xfd, 0x6b, 0x22, 0xfe, 0xca, 0xa4, 0xfe, 0xd1, 0xa8, 0xfe, 0x54, 0x37, 0xff, 0x4c, 0x63, 0xff, 0xf3, 0x8a, 0x17, 0x08, 0x51, 0x1b, 0x77, 0x34, 0x08, 0xa4, 0x7f, 0x0a, 0x61, 0x9c, 0x09, 0xf2, 0x1e, 0x01, 0xcc, 0x75, 0x02, 0x58, 0xfa, 0xff, 0xc5, 0xb7, 0xfb, 0xe1, 0x13, 0xf9, 0x51, 0xfa, 0xfa, 0x6e, 0xd1, 0xff, 0x36, 0x2d, 0x00, 0xa5, 0x7c, 0xff, 0xf8, 0xa2, 0x00, 0xef, 0x99, 0x00, 0x6f, 0xda, 0xfb, 0xd5, 0xe5, 0xfb, 0xd1, 0xdb, 0x01, 0x3c, 0xda, 0x01, 0xb7, 0x09, 0xff, 0x43, 0x11, 0xfe, 0x89, 0xb8, 0xfe, 0xbf, 0x98, 0xff, 0x16, 0xc7, 0xfe, 0x8c, 0xf2, 0xfd, 0x08, 0x88, 0xfd, 0x4a, 0x55, 0xfe, 0xc2, 0xd7, 0xfe, 0x78, 0x75, 0xfe, 0x00, 0x4d, 0xff, 0x73, 0xdc, 0xff, 0x48, 0x22, 0x15, 0x58, 0x6e, 0x18, 0xe3, 0x48, 0x07, 0xa6, 0xe3, 0x09, 0xfb, 0x7b, 0x09, 0xaf, 0x37, 0x01, 0x06, 0x08, 0x02, 0x24, 0x10, 0x00, 0x5d, 0x16, 0xfc, 0xed, 0x28, 0xfa, 0x29, 0x5e, 0xfc, 0x58, 0x90, 0xff, 0xac, 0x88, 0xff, 0xbe, 0x3c, 0x00, 0xac, 0x46, 0x01, 0xb0, 0x79, 0x00, 0x19, 0xd1, 0xfc, 0x04, 0x21, 0xfd, 0x9a, 0x42, 0x01, 0x6e, 0xe0, 0x00, 0x2e, 0x18, 0xff, 0xe7, 0x7b, 0xfe, 0x46, 0xfd, 0xfe, 0x82, 0x83, 0xff, 0xc7, 0xc4, 0xfe, 0x73, 0x6b, 0xfe, 0x75, 0x34, 0xfe, 0x7b, 0xcb, 0xfe, 0xcd, 0xc3, 0xfe, 0xcc, 0x2c, 0xfe, 0x55, 0x2f, 0xff, 0x79, 0xdf, 0xff, 0x48, 0x33, 0x12, 0x64, 0xc0, 0x15, 0xf9, 0x24, 0x07, 0xff, 0xf7, 0x08, 0xd8, 0x61, 0x08, 0x23, 0x83, 0x01, 0x85, 0x89, 0x02, 0xf6, 0x47, 0x00, 0x07, 0x5e, 0xfc, 0xb9, 0x16, 0xfb, 0xa4, 0x80, 0xfd, 0x10, 0xd6, 0xff, 0x76, 0x99, 0xff, 0x64, 0x30, 0x01, 0x98, 0xcb, 0x01, 0xb0, 0x56, 0x00, 0xfa, 0xd6, 0xfd, 0x14, 0xd7, 0xfd, 0xd0, 0x64, 0x00, 0x75, 0x6a, 0x00, 0xb4, 0x71, 0xff, 0x43, 0xbc, 0xfe, 0x20, 0x1e, 0xff, 0x84, 0xd6, 0xff, 0x36, 0x66, 0xff, 0x48, 0x18, 0xff, 0x09, 0x91, 0xfe, 0x9b, 0xa5, 0xfe, 0xa2, 0x8f, 0xfe, 0x8b, 0x47, 0xfe, 0xa7, 0x55, 0xff, 0x4c, 0xda, 0xff, 0x40, 0x53, 0x0f, 0x1f, 0x8a, 0x12, 0xe3, 0x35, 0x07, 0xb1, 0x85, 0x08, 0x03, 0x26, 0x07, 0xf7, 0x0b, 0x02, 0x95, 0x19, 0x03, 0x2c, 0x7e, 0x00, 0x37, 0xed, 0xfc, 0x0d, 0x0e, 0xfc, 0x3e, 0xeb, 0xfe, 0xd1, 0xdd, 0x00, 0xb9, 0x23, 0x00, 0x6f, 0xd1, 0x01, 0x7e, 0x17, 0x02, 0x33, 0x6f, 0x00, 0xbe, 0xbf, 0xfe, 0xa0, 0x95, 0xfe, 0x86, 0xef, 0xff, 0xde, 0xf0, 0xff, 0x35, 0x9a, 0xff, 0xa3, 0x30, 0xff, 0xd8, 0xb8, 0xff, 0xa4, 0x3f, 0x00, 0x8e, 0x77, 0xff, 0x0c, 0x4a, 0xff, 0xfe, 0xe1, 0xfe, 0xd2, 0xb8, 0xfe, 0x46, 0xcc, 0xfe, 0xe3, 0xac, 0xfe, 0x55, 0x5b, 0xff, 0xa9, 0xc2, 0xff, 0x21, 0x36, 0x0d, 0x94, 0xe2, 0x0f, 0xad, 0x9a, 0x06, 0x09, 0x9d, 0x07, 0x68, 0xff, 0x05, 0xfb, 0x11, 0x02, 0x63, 0x8f, 0x03, 0x8d, 0x29, 0x01, 0xbb, 0xbc, 0xfd, 0x2b, 0xad, 0xfd, 0x21, 0xdc, 0x00, 0x04, 0x4e, 0x02, 0x6b, 0x0a, 0x01, 0x1b, 0xff, 0x01, 0xf4, 0x3f, 0x02, 0x6b, 0xb5, 0x00, 0x5b, 0x30, 0xff, 0xa3, 0xd0, 0xfe, 0xb8, 0x62, 0xff, 0x1d, 0xd0, 0xff, 0x85, 0x45, 0x00, 0x33, 0xa3, 0xff, 0xd3, 0x9b, 0xff, 0xbc, 0x28, 0x00, 0x9e, 0xbd, 0xff, 0x42, 0xb3, 0xff, 0xa3, 0x37, 0xff, 0xb8, 0xd1, 0xfe, 0x7e, 0xff, 0xfe, 0x42, 0xfc, 0xfe, 0x84, 0x74, 0xff, 0xb3, 0xe2, 0xff, 0x04, 0x63, 0x0c, 0x62, 0x63, 0x0e, 0xe2, 0x60, 0x05, 0x1d, 0x4b, 0x06, 0x5d, 0x28, 0x05, 0xfb, 0x4b, 0x02, 0xae, 0x29, 0x04, 0xaa, 0xac, 0x02, 0xa2, 0xac, 0xff, 0x3c, 0xfa, 0xfe, 0x7c, 0x15, 0x02, 0x6f, 0x57, 0x03, 0xcd, 0x89, 0x01, 0xee, 0xe2, 0x01, 0x55, 0x6d, 0x01, 0x63, 0xfd, 0xff, 0x87, 0x38, 0xff, 0xee, 0x4f, 0xff, 0x57, 0xe5, 0xff, 0x2a, 0x0f, 0x00, 0x3b, 0x42, 0x00, 0x31, 0x98, 0xff, 0xb5, 0x9b, 0xff, 0xc3, 0x2c, 0x00, 0x9a, 0xe4, 0xff, 0x04, 0xec, 0xff, 0x7f, 0x63, 0xff, 0x80, 0x02, 0xff, 0x6d, 0x54, 0xff, 0x79, 0x7c, 0xff, 0xb3, 0xcd, 0xff, 0x17, 0xe9, 0xff, 0xdf, 0x8b, 0x0b, 0xd1, 0x5e, 0x0d, 0x08, 0xb1, 0x04, 0x98, 0x4f, 0x06, 0x5f, 0x2e, 0x06, 0x62, 0x4b, 0x03, 0x8c, 0xcf, 0x04, 0xcb, 0x56, 0x03, 0x5a, 0xa7, 0x00, 0xa5, 0x1c, 0x00, 0x47, 0x83, 0x02, 0xe7, 0x0f, 0x03, 0x19, 0xd4, 0x00, 0x59, 0xba, 0x00, 0x64, 0x63, 0x00, 0x77, 0xfc, 0xff, 0xe7, 0x15, 0x00, 0x45, 0xec, 0xff, 0xe3, 0xea, 0xff, 0x68, 0xa1, 0xff, 0x1f, 0xc6, 0xff, 0xba, 0x8e, 0xff, 0x49, 0xc4, 0xff, 0x76, 0x49, 0x00, 0xa7, 0x0c, 0x00, 0xe3, 0x50, 0x00, 0xa8, 0xf1, 0xff, 0x0b, 0x46, 0xff, 0xc0, 0x56, 0xff, 0x29, 0x67, 0xff, 0x44, 0x91, 0xff, 0x69, 0x81, 0xff, 0x1d, 0xb5, 0x0b, 0xda, 0x95, 0x0e, 0x5f, 0x58, 0x06, 0x42, 0x5d, 0x07, 0xcd, 0xa4, 0x06, 0x4b, 0xa0, 0x03, 0x00, 0x15, 0x05, 0xea, 0xe6, 0x02, 0x27, 0x8c, 0xff, 0x7a, 0xfe, 0xfe, 0xbd, 0xb6, 0x01, 0xf4, 0x8c, 0x02, 0x04, 0x8d, 0x00, 0xdb, 0x8d, 0x00, 0xec, 0x2a, 0x00, 0xf0, 0x12, 0x00, 0xef, 0x4a, 0x00, 0xee, 0xaa, 0xff, 0x20, 0x7b, 0xff, 0x0f, 0x89, 0xff, 0x96, 0xed, 0xff, 0xd3, 0x9f, 0xff, 0xea, 0xeb, 0xff, 0x49, 0x91, 0x00, 0x04, 0x21, 0x00, 0x13, 0x63, 0x00, 0xd5, 0x3e, 0x00, 0x94, 0x71, 0xff, 0x1a, 0x26, 0xff, 0x0c, 0xfd, 0xfe, 0x8e, 0xed, 0xfe, 0xbc, 0xfc, 0xfe, 0xd1, 0x69, 0x0c, 0xfe, 0x78, 0x0f, 0x5b, 0xe9, 0x06, 0xd8, 0x68, 0x07, 0x40, 0x40, 0x06, 0x7a, 0x8e, 0x03, 0x06, 0x56, 0x05, 0x38, 0xf6, 0x02, 0x95, 0x18, 0xff, 0x6f, 0xdb, 0xfd, 0xac, 0x49, 0x00, 0x11, 0xdc, 0x01, 0x03, 0xd7, 0x00, 0x43, 0xd8, 0x00, 0x80, 0x24, 0x00, 0xc9, 0x0d, 0x00, 0x7c, 0x6e, 0x00, 0xbd, 0x0d, 0x00, 0xda, 0xe1, 0xff, 0xac, 0xab, 0xff, 0x17, 0xc9, 0xff, 0xa3, 0x87, 0xff, 0x23, 0xee, 0xff, 0xe1, 0x44, 0x00, 0x6e, 0xa7, 0xff, 0xfa, 0x3d, 0x00, 0xde, 0xa2, 0x00, 0xb7, 0x1a, 0x00, 0xe4, 0x64, 0xff, 0x19, 0xab, 0xfe, 0xf8, 0x93, 0xfe, 0x0a, 0xca, 0xfe, 0x97, 0x9f, 0x0c, 0x4e, 0x84, 0x0f, 0x0c, 0x07, 0x06, 0x4b, 0x57, 0x06, 0x85, 0xb4, 0x05, 0x8b, 0x4e, 0x03, 0x5a, 0x56, 0x05, 0x11, 0x16, 0x03, 0xea, 0xf1, 0xfe, 0x6d, 0xa7, 0xfd, 0xca, 0x0d, 0x01, 0x59, 0xca, 0x02, 0x36, 0x63, 0x00, 0x66, 0xe3, 0xff, 0x3d, 0x7b, 0xff, 0x21, 0x7d, 0xff, 0xba, 0x9f, 0x00, 0x7a, 0x30, 0x01, 0xda, 0xe6, 0x00, 0x98, 0x27, 0x00, 0xca, 0x0f, 0x00, 0x77, 0x7b, 0xff, 0xf6, 0x89, 0xff, 0xa3, 0xe7, 0xff, 0xa4, 0x73, 0xff, 0x9e, 0xd6, 0xff, 0x2d, 0xef, 0xff, 0x74, 0x05, 0x00, 0xb1, 0x5e, 0x00, 0xfb, 0xc3, 0xff, 0x51, 0x0c, 0xff, 0xba, 0xb9, 0xfe, 0x03, 0xb1, 0x0d, 0xc0, 0xde, 0x10, 0x7d, 0x0b, 0x06, 0xd4, 0x86, 0x05, 0xdb, 0x61, 0x04, 0x4c, 0x03, 0x02, 0xc6, 0xa8, 0x04, 0x16, 0x8f, 0x02, 0xb8, 0x69, 0xfe, 0xb5, 0xb4, 0xfc, 0x40, 0x86, 0x00, 0x00, 0xbc, 0x03, 0x2f, 0xb3, 0x01, 0xab, 0x7d, 0x00, 0xb8, 0x08, 0xff, 0x47, 0x91, 0xfe, 0x94, 0x05, 0x00, 0x2b, 0xd9, 0x00, 0xc1, 0x1e, 0x01, 0xa7, 0x0f, 0x01, 0xcc, 0xf1, 0x00, 0xb0, 0xec, 0xff, 0x6e, 0xd0, 0xff, 0x5f, 0x2c, 0x00, 0xd3, 0x5a, 0xff, 0xe8, 0x73, 0xff, 0x47, 0x8d, 0xff, 0x13, 0x4d, 0xff, 0xd2, 0xb1, 0xff, 0xf0, 0x28, 0x00, 0xa4, 0x54, 0x00, 0x57, 0x08, 0x00, 0xfc, 0x4e, 0x0f, 0xb9, 0x16, 0x13, 0x5f, 0x91, 0x06, 0x1f, 0x9d, 0x05, 0x0a, 0x44, 0x04, 0x56, 0x58, 0x01, 0xe2, 0x0e, 0x04, 0xc3, 0x4a, 0x01, 0x9a, 0x9c, 0xfc, 0xaa, 0x8a, 0xfa, 0x4f, 0x14, 0xff, 0x96, 0x36, 0x04, 0x56, 0x47, 0x02, 0x31, 0x5f, 0x00, 0x8f, 0x3a, 0xff, 0xc8, 0x0c, 0xff, 0x05, 0x2b, 0x00, 0x1a, 0xd1, 0x00, 0xf6, 0xf6, 0x00, 0xc8, 0x63, 0x00, 0x77, 0xc6, 0x00, 0xfc, 0x9b, 0x00, 0x92, 0x40, 0x00, 0x19, 0x77, 0x00, 0xb7, 0xcf, 0xff, 0x43, 0xad, 0xff, 0xce, 0x8f, 0xff, 0xd9, 0x21, 0xff, 0x81, 0x3a, 0xff, 0x27, 0xac, 0xff, 0xf9, 0x3b, 0x00, 0x68, 0xb1, 0x00, 0x0a, 0x8e, 0x11, 0x0a, 0xac, 0x15, 0x18, 0xde, 0x06, 0x9c, 0xfe, 0x05, 0x49, 0x97, 0x04, 0xe5, 0xf6, 0x00, 0x75, 0xfa, 0x03, 0x50, 0x7c, 0x00, 0xd7, 0xf8, 0xfa, 0x5e, 0x4f, 0xf8, 0x0f, 0xb8, 0xfd, 0x59, 0x9e, 0x04, 0x57, 0x0b, 0x02, 0x2e, 0x3a, 0xff, 0x56, 0x69, 0xfe, 0x95, 0xac, 0xfe, 0xfe, 0x72, 0x00, 0x2f, 0x8c, 0x01, 0x7d, 0x49, 0x01, 0x53, 0x7b, 0x00, 0x68, 0x10, 0x01, 0xf6, 0x4b, 0x00, 0xe8, 0xf9, 0xff, 0x6c, 0xb1, 0x00, 0x49, 0xbc, 0xff, 0xf1, 0xce, 0xff, 0xe0, 0xf5, 0xff, 0x06, 0x5e, 0xff, 0x23, 0x51, 0xff, 0x6a, 0xdf, 0xff, 0x05, 0x67, 0x00, 0xcb, 0x17, 0x00, 0x50, 0x8f, 0x14, 0xb5, 0x38, 0x18, 0x18, 0x77, 0x06, 0x2c, 0xa0, 0x06, 0x1c, 0x06, 0x05, 0xd5, 0xb6, 0x00, 0x75, 0x7b, 0x04, 0xb2, 0x02, 0x00, 0x56, 0x65, 0xf9, 0x07, 0x1f, 0xf6, 0xaf, 0x1a, 0xfd, 0xa4, 0xba, 0x05, 0x3f, 0xb6, 0x01, 0xfa, 0xc0, 0xfd, 0x64, 0x2b, 0xfd, 0x93, 0xcd, 0xfd, 0xa0, 0xde, 0xff, 0x84, 0x55, 0x01, 0x5b, 0x3e, 0x01, 0x81, 0x6c, 0x00, 0x95, 0x97, 0x01, 0x20, 0xd4, 0x00, 0xed, 0xcc, 0xff, 0x60, 0x6f, 0x00, 0xae, 0xb4, 0xff, 0xac, 0xbe, 0xff, 0xaa, 0xf4, 0xff, 0xb7, 0x7e, 0xff, 0x34, 0x9f, 0xff, 0xc8, 0x46, 0x00, 0x3a, 0x4f, 0x00, 0x77, 0xe5, 0xff, 0x42, 0xe5, 0x18, 0x91, 0x73, 0x1b, 0xfb, 0x02, 0x05, 0xeb, 0x11, 0x07, 0x26, 0x80, 0x05, 0x33, 0x1f, 0x00, 0xa2, 0x01, 0x05, 0x05, 0x16, 0xff, 0xa3, 0x7b, 0xf7, 0x15, 0x59, 0xf4, 0x90, 0x4b, 0xfd, 0xdd, 0x18, 0x07, 0x37, 0xf5, 0x00, 0x71, 0x58, 0xfc, 0x94, 0x2a, 0xfc, 0x87, 0x16, 0xfd, 0x93, 0x5f, 0xff, 0x64, 0xbe, 0x00, 0x3c, 0xa2, 0x00, 0xb6, 0xdd, 0xff, 0xc0, 0x76, 0x01, 0x52, 0x60, 0x00, 0x36, 0x70, 0xff, 0x1a, 0xb8, 0x00, 0x3d, 0xda, 0xff, 0x69, 0xbe, 0xff, 0x0e, 0xba, 0xff, 0x90, 0x48, 0xff, 0xa4, 0x69, 0xff, 0xe7, 0x21, 0x00, 0xb6, 0x7a, 0x00, 0xb4, 0xee, 0xff, 0x38, 0x55, 0x1d, 0x71, 0x38, 0x1f, 0xc3, 0x4b, 0x03, 0x67, 0x17, 0x07, 0x88, 0x63, 0x06, 0xbd, 0x34, 0xff, 0xfe, 0x3b, 0x05, 0x75, 0x20, 0xfe, 0x8c, 0x4c, 0xf5, 0xd6, 0x4f, 0xf3, 0x99, 0x10, 0xfe, 0x19, 0x2f, 0x08, 0xac, 0x50, 0x00, 0x10, 0x51, 0xfb, 0x64, 0x2d, 0xfb, 0x9a, 0x9e, 0xfc, 0xef, 0x6f, 0xff, 0x2a, 0x2c, 0x00, 0x2f, 0x3b, 0x00, 0x70, 0x8c, 0xff, 0x46, 0x0b, 0x01, 0x6e, 0xe8, 0xff, 0xd9, 0xf4, 0xfe, 0x0b, 0x9d, 0x00, 0x3a, 0xb3, 0xff, 0xde, 0xa1, 0xff, 0xa8, 0x6a, 0xff, 0xf1, 0xcd, 0xfe, 0xbf, 0x2f, 0xff, 0xa4, 0xe0, 0xff, 0xbf, 0x6f, 0x00, 0x58, 0x1f, 0x00, 0xf3, 0x14, 0x21, 0xcf, 0x3c, 0x23, 0x14, 0x59, 0x02, 0xaa, 0x8c, 0x06, 0x9f, 0x27, 0x07, 0x98, 0x96, 0xfe, 0x05, 0x60, 0x05, 0x74, 0x63, 0xfd, 0xb2, 0x31, 0xf3, 0x13, 0x87, 0xf2, 0x4a, 0xb6, 0xfe, 0xe2, 0x93, 0x08, 0x32, 0xe4, 0xff, 0x79, 0xe8, 0xfa, 0x34, 0x7b, 0xfa, 0xae, 0x35, 0xfc, 0x30, 0x70, 0xff, 0xe4, 0xdf, 0xff, 0xb0, 0x15, 0x00, 0x05, 0x4d, 0xff, 0xf2, 0x00, 0x01, 0xe9, 0xf3, 0xff, 0xae, 0x9b, 0xfe, 0x07, 0x05, 0x00, 0x11, 0x07, 0xff, 0xcd, 0x78, 0xff, 0xa3, 0x12, 0xff, 0x18, 0x5a, 0xfe, 0x73, 0x2e, 0xff, 0xd9, 0xcf, 0xff, 0x05, 0x74, 0x00, 0x1d, 0x24, 0x00, 0x82, 0xa7, 0x23, 0x66, 0x55, 0x27, 0x09, 0x4a, 0x03, 0x93, 0x10, 0x06, 0xc8, 0xff, 0x06, 0xa4, 0x72, 0xfd, 0xad, 0x80, 0x05, 0x78, 0x20, 0xfd, 0x21, 0x77, 0xf1, 0x99, 0x70, 0xf2, 0x47, 0x3a, 0xfe, 0xdf, 0xd6, 0x06, 0x49, 0xef, 0xff, 0xf6, 0xf1, 0xfb, 0xdc, 0xdd, 0xf9, 0xb2, 0x30, 0xfb, 0xf5, 0x06, 0xff, 0xfa, 0x7d, 0xff, 0x80, 0x21, 0x01, 0xc1, 0xfc, 0xff, 0x92, 0x04, 0x00, 0x9f, 0x85, 0xff, 0x4b, 0x86, 0xfe, 0xfa, 0xa8, 0xff, 0x75, 0x66, 0xfe, 0x2f, 0xdc, 0xfe, 0x0f, 0xa5, 0xfe, 0x4e, 0x0e, 0xfe, 0x78, 0x2b, 0xff, 0x08, 0xab, 0xff, 0xb9, 0x99, 0x00, 0xc9, 0x30, 0x00, 0x4c, 0x71, 0x24, 0xe5, 0x46, 0x2a, 0x70, 0xbe, 0x05, 0x23, 0x87, 0x06, 0x29, 0x74, 0x07, 0x61, 0x0d, 0xfc, 0x07, 0x4b, 0x04, 0x3c, 0xc5, 0xfd, 0x54, 0x4b, 0xf1, 0x16, 0x50, 0xf3, 0x06, 0x8c, 0xfd, 0x23, 0x70, 0x03, 0x0a, 0x3d, 0xff, 0x4d, 0xa2, 0xfd, 0x14, 0xef, 0xfa, 0x9a, 0xe6, 0xfa, 0xf8, 0x5d, 0xfe, 0xa1, 0xe6, 0xfe, 0x6c, 0x59, 0x01, 0x10, 0x08, 0x01, 0x6f, 0xbd, 0xff, 0xa4, 0xeb, 0xfe, 0x2f, 0x5d, 0xfe, 0xc3, 0x7a, 0xff, 0xa3, 0xa6, 0xfe, 0x53, 0xe5, 0xfe, 0x2c, 0x6c, 0xfe, 0xb3, 0x02, 0xfe, 0x25, 0x0d, 0xff, 0x53, 0xf1, 0xfe, 0xe5, 0x09, 0x00, 0xeb, 0x56, 0x00, 0xe0, 0x20, 0x25, 0xde, 0x10, 0x2c, 0xde, 0x30, 0x08, 0x8d, 0x3f, 0x08, 0x51, 0x99, 0x08, 0xee, 0x36, 0xfb, 0x36, 0xf5, 0x01, 0x42, 0x22, 0xfd, 0x69, 0x3a, 0xf1, 0xb7, 0xe3, 0xf4, 0x89, 0x57, 0xfe, 0x5f, 0x5d, 0xff, 0xa4, 0xc2, 0xfc, 0x89, 0x1e, 0xff, 0x59, 0xe4, 0xfc, 0xaf, 0x59, 0xfc, 0xf7, 0xeb, 0xfd, 0x7f, 0x23, 0xfd, 0x09, 0xdf, 0x00, 0xdd, 0xd3, 0x01, 0x04, 0xb7, 0xff, 0x4e, 0xc3, 0xfe, 0x59, 0xcb, 0xfe, 0x66, 0x5b, 0xff, 0x31, 0x8d, 0xfe, 0x5b, 0x06, 0xff, 0x5c, 0x2d, 0xfe, 0x35, 0xc6, 0xfd, 0xa8, 0xee, 0xfe, 0x5c, 0x4f, 0xfe, 0x41, 0x52, 0xff, 0xa7, 0x26, 0x00, 0xdb, 0x52, 0x26, 0x63, 0xec, 0x2c, 0x90, 0x03, 0x09, 0x0c, 0x6d, 0x0a, 0x23, 0x82, 0x0a, 0x66, 0x20, 0xfb, 0xcc, 0x1e, 0x00, 0xf6, 0x5b, 0xfb, 0x06, 0x69, 0xf0, 0x13, 0x04, 0xf7, 0xa0, 0x3d, 0x00, 0x1a, 0xe3, 0xfb, 0xb0, 0xc3, 0xf9, 0x63, 0xe2, 0xff, 0x84, 0xa9, 0xfe, 0x6d, 0x63, 0xfe, 0xf6, 0x3b, 0xfe, 0xd0, 0x58, 0xfb, 0x71, 0x8c, 0xff, 0xa9, 0x5e, 0x02, 0x75, 0x44, 0x00, 0xad, 0xc2, 0xfe, 0x0e, 0x4f, 0xff, 0x8d, 0x93, 0xff, 0xe4, 0x6c, 0xfe, 0xf3, 0xb5, 0xfe, 0x69, 0x98, 0xfd, 0xd6, 0x63, 0xfd, 0x5a, 0xce, 0xfe, 0xf9, 0xef, 0xfd, 0x32, 0x9f, 0xfe, 0x70, 0xd4, 0xff, 0x56, 0x62, 0x29, 0xed, 0x00, 0x2d, 0x23, 0x08, 0x07, 0x1b, 0x04, 0x0d, 0xbe, 0x8b, 0x0c, 0x55, 0xe2, 0xfa, 0xce, 0xcb, 0xfe, 0x67, 0x39, 0xf9, 0xf4, 0xce, 0xef, 0x0c, 0x52, 0xf9, 0xfc, 0x55, 0x03, 0x59, 0xaf, 0xf8, 0x36, 0x10, 0xf5, 0xab, 0x27, 0x00, 0x7d, 0xc5, 0xff, 0x81, 0xb9, 0x00, 0xe4, 0xe9, 0xff, 0x02, 0xc9, 0xf9, 0x8d, 0x50, 0xfe, 0x2e, 0xf1, 0x02, 0x5f, 0x7d, 0x00, 0x22, 0x02, 0xfe, 0x81, 0xb5, 0xff, 0x7a, 0xd8, 0xff, 0xda, 0xf4, 0xfd, 0x13, 0xa4, 0xfe, 0xc3, 0xb0, 0xfc, 0x73, 0x97, 0xfc, 0xae, 0xda, 0xfe, 0x43, 0xbf, 0xfd, 0x42, 0x14, 0xfe, 0x84, 0x82, 0xff, 0x14, 0xd9, 0x2d, 0x3f, 0x66, 0x2d, 0x6d, 0x15, 0x03, 0x42, 0xb6, 0x0e, 0x2f, 0xb7, 0x0d, 0x0d, 0xe6, 0xf9, 0xdf, 0xb1, 0xff, 0x3d, 0xf6, 0xf7, 0xc6, 0x49, 0xee, 0x0f, 0x4a, 0xfc, 0xa1, 0xd8, 0x07, 0x3a, 0xcd, 0xf6, 0xae, 0x55, 0xef, 0xa9, 0xf9, 0xfe, 0xf7, 0xfa, 0x00, 0x0b, 0x7b, 0x02, 0x60, 0x3a, 0x02, 0xa4, 0xaf, 0xf9, 0x53, 0xe1, 0xfc, 0x51, 0xf6, 0x02, 0xd6, 0xde, 0x00, 0x54, 0x42, 0xfd, 0x4d, 0xab, 0xff, 0x39, 0xf5, 0xff, 0x15, 0x17, 0xfd, 0x2f, 0x6c, 0xfe, 0xeb, 0x6c, 0xfc, 0xfa, 0x0c, 0xfc, 0x55, 0xfe, 0xfe, 0x02, 0xd4, 0xfd, 0x67, 0x95, 0xfd, 0xc6, 0x27, 0xff, 0x3d, 0x90, 0x33, 0xf0, 0x79, 0x30, 0x95, 0xc4, 0xfd, 0xa5, 0x6c, 0x0c, 0xbd, 0xe6, 0x0d, 0x98, 0x17, 0xf9, 0x42, 0xd1, 0x01, 0x22, 0xba, 0xf8, 0xce, 0x79, 0xec, 0xce, 0x3a, 0xfd, 0x4c, 0x28, 0x0c, 0xda, 0xfb, 0xf7, 0xfb, 0x33, 0xeb, 0xa3, 0x46, 0xfc, 0xac, 0x02, 0x01, 0xc5, 0x96, 0x03, 0x5a, 0x5e, 0x04, 0x06, 0x10, 0xfa, 0xbe, 0x6d, 0xfb, 0x26, 0xaf, 0x02, 0x33, 0x74, 0x01, 0xaf, 0x53, 0xfc, 0x4c, 0x01, 0xff, 0x1d, 0x7e, 0x00, 0x0b, 0xc8, 0xfc, 0x60, 0x0f, 0xfe, 0xd6, 0xea, 0xfb, 0x44, 0x33, 0xfb, 0xf1, 0x14, 0xff, 0x6c, 0x3f, 0xfe, 0x37, 0x5b, 0xfd, 0xd0, 0xa5, 0xfe, 0x9d, 0xe0, 0x39, 0x0a, 0x22, 0x36, 0x77, 0x88, 0xf7, 0x98, 0x83, 0x06, 0xf3, 0xcf, 0x0c, 0xce, 0xd6, 0xf7, 0xd8, 0x48, 0x06, 0x27, 0xb8, 0xfc, 0x55, 0x7b, 0xe9, 0x25, 0xff, 0xfa, 0x86, 0xc4, 0x0f, 0x1b, 0x4c, 0xfc, 0x0d, 0x79, 0xe9, 0x01, 0xd9, 0xf8, 0xaf, 0x10, 0x00, 0xfb, 0xce, 0x03, 0x42, 0xcc, 0x05, 0x24, 0x48, 0xfa, 0x4c, 0xad, 0xf9, 0xaf, 0xdd, 0x01, 0x3b, 0x66, 0x02, 0xe7, 0x6c, 0xfc, 0x17, 0x26, 0xfe, 0x01, 0x90, 0x00, 0x8a, 0x9b, 0xfc, 0x4b, 0x28, 0xfe, 0xbc, 0xfe, 0xfb, 0xed, 0x2e, 0xfa, 0x43, 0xe9, 0xfe, 0x5e, 0xbd, 0xfe, 0x55, 0x47, 0xfd, 0x77, 0x2b, 0xfe, 0x51, 0xab, 0x41, 0x2d, 0xff, 0x38, 0xe9, 0x42, 0xf0, 0x95, 0xe4, 0x03, 0xef, 0x6f, 0x0a, 0x31, 0x74, 0xf6, 0x09, 0x49, 0x0b, 0xbc, 0x24, 0xfe, 0xea, 0x6f, 0xe7, 0x06, 0x5d, 0xfa, 0x99, 0x68, 0x13, 0xae, 0xe2, 0x00, 0x41, 0x0b, 0xe8, 0x80, 0x00, 0xf5, 0x01, 0x6f, 0xfd, 0xb3, 0x4a, 0x04, 0x12, 0xad, 0x07, 0xca, 0x22, 0xf9, 0x34, 0x43, 0xf7, 0x10, 0x4b, 0x01, 0x64, 0xaf, 0x03, 0xb6, 0xe3, 0xfb, 0xb5, 0xf4, 0xfc, 0xf7, 0x1a, 0x01, 0xef, 0xa6, 0xfc, 0x13, 0x80, 0xfe, 0x75, 0x2d, 0xfc, 0xe4, 0x64, 0xf9, 0x88, 0x73, 0xfe, 0xdb, 0xb2, 0xfe, 0x48, 0x89, 0xfd, 0xac, 0x80, 0xfe, 0xd7, 0x7f, 0x46, 0xa4, 0xf2, 0x3a, 0xb4, 0x71, 0xec, 0x80, 0x7f, 0x02, 0x82, 0x70, 0x07, 0xae, 0x7c, 0xf5, 0x9b, 0x2b, 0x0f, 0xcd, 0x3a, 0xff, 0x85, 0xa1, 0xe6, 0x66, 0x42, 0xf8, 0xaa, 0x7b, 0x15, 0x30, 0xf0, 0x05, 0x72, 0x5a, 0xe7, 0x5a, 0x56, 0xf2, 0x99, 0x8c, 0xfa, 0x8a, 0xa2, 0x02, 0x7c, 0xbd, 0x08, 0x08, 0xab, 0xf9, 0x68, 0x5d, 0xf6, 0x98, 0xcc, 0xff, 0x8c, 0x7e, 0x03, 0x64, 0x8e, 0xfb, 0xed, 0x8a, 0xfc, 0xc6, 0x7c, 0x01, 0x10, 0x58, 0xfc, 0x9f, 0xf4, 0xfe, 0x5d, 0x74, 0xfc, 0x3c, 0x81, 0xf8, 0x97, 0x2a, 0xfe, 0xaa, 0x5e, 0xff, 0xaa, 0x39, 0xfe, 0x2d, 0x77, 0xfe, 0x23, 0x71, 0x4a, 0x01, 0x54, 0x3d, 0xf0, 0x69, 0xea, 0x9c, 0x9f, 0x00, 0x30, 0xe0, 0x03, 0x8d, 0x33, 0xf5, 0xc2, 0xd6, 0x12, 0x6f, 0xb8, 0x00, 0x72, 0x02, 0xe6, 0x2d, 0xaf, 0xf4, 0x49, 0x43, 0x16, 0xc0, 0x5d, 0x0b, 0x18, 0xe1, 0xe8, 0xc5, 0x73, 0xf0, 0xce, 0xac, 0xf5, 0xe4, 0x1e, 0x00, 0x9c, 0x3e, 0x0b, 0xb9, 0x3d, 0xfb, 0xdc, 0x7d, 0xf5, 0x9a, 0x32, 0xfe, 0x1e, 0xe0, 0x02, 0xb4, 0x5f, 0xfb, 0xe2, 0xa9, 0xfc, 0x57, 0x9f, 0x01, 0x5c, 0xc2, 0xfb, 0xf3, 0xf0, 0xfe, 0x14, 0x8a, 0xfc, 0xb5, 0x76, 0xf8, 0xc8, 0x7f, 0xfe, 0x11, 0xf1, 0xff, 0xaf, 0x9f, 0xfe, 0xe6, 0x6e, 0xfe, 0xe4, 0x02, 0x4d, 0xb9, 0x1b, 0x3f, 0xd7, 0x08, 0xeb, 0xf8, 0x66, 0xff, 0xfd, 0xa6, 0x00, 0x63, 0x70, 0xf5, 0x6f, 0xde, 0x13, 0x9e, 0x47, 0x02, 0xd3, 0x92, 0xe6, 0x29, 0x40, 0xf0, 0xf2, 0x05, 0x16, 0x3b, 0x5e, 0x10, 0x7c, 0xba, 0xeb, 0xe8, 0xc6, 0xee, 0xe3, 0xee, 0xf0, 0x79, 0xf0, 0xfd, 0x75, 0x2d, 0x0d, 0x93, 0xf6, 0xfd, 0x8b, 0x1d, 0xf5, 0x1c, 0x7b, 0xfc, 0x4b, 0xaa, 0x02, 0x7d, 0x23, 0xfb, 0x9c, 0xdf, 0xfc, 0xf2, 0x37, 0x01, 0x92, 0xab, 0xfa, 0xc1, 0x14, 0xff, 0x99, 0x43, 0xfd, 0x33, 0xd0, 0xf8, 0x05, 0x51, 0xfe, 0x99, 0x42, 0x00, 0xca, 0xdd, 0xfe, 0x55, 0x90, 0xfe, 0xf3, 0x3f, 0x4e, 0x24, 0x7c, 0x40, 0x72, 0xd4, 0xec, 0xf6, 0x54, 0xff, 0x10, 0x77, 0xfe, 0x09, 0x1a, 0xf5, 0x04, 0x5f, 0x13, 0x99, 0x44, 0x03, 0xcf, 0x0b, 0xe7, 0xf6, 0x71, 0xec, 0x43, 0xc9, 0x14, 0x41, 0x95, 0x13, 0xeb, 0xe1, 0xef, 0xbf, 0x32, 0xee, 0x88, 0xa6, 0xec, 0xe4, 0x56, 0xfc, 0xa0, 0xbe, 0x0d, 0xa5, 0xfe, 0x00, 0x05, 0x1d, 0xf6, 0x9e, 0x4b, 0xfa, 0x41, 0xa9, 0x02, 0x14, 0x3f, 0xfb, 0x4c, 0x4e, 0xfc, 0xec, 0x73, 0x00, 0xaf, 0x66, 0xfa, 0xb9, 0x98, 0xff, 0x74, 0x50, 0xfd, 0xf7, 0x6a, 0xf9, 0x7e, 0xf5, 0xfd, 0xdf, 0xad, 0xff, 0xd4, 0x74, 0xff, 0x3d, 0x9f, 0xfe, 0x16, 0x72, 0x4d, 0xe7, 0xff, 0x41, 0x3e, 0x13, 0xf0, 0xe3, 0x59, 0x00, 0x74, 0xff, 0xfc, 0x6e, 0x29, 0xf4, 0x42, 0x98, 0x12, 0x94, 0x10, 0x03, 0xdc, 0x68, 0xe7, 0xc8, 0x32, 0xe9, 0xa7, 0xbf, 0x11, 0xf9, 0xe4, 0x15, 0xc5, 0x28, 0xf5, 0xd1, 0xe7, 0xef, 0x8e, 0x91, 0xe8, 0x25, 0x58, 0xf9, 0xc7, 0x1b, 0x0e, 0x3b, 0x1b, 0x04, 0x94, 0x53, 0xf8, 0x9d, 0xe5, 0xf7, 0xf9, 0x08, 0x02, 0x5f, 0xf8, 0xfb, 0xd8, 0x2b, 0xfb, 0xdf, 0x53, 0x00, 0x1d, 0xdb, 0xfa, 0xf3, 0xfc, 0xff, 0xe2, 0x5e, 0xfd, 0xb6, 0x5c, 0xf9, 0x6e, 0x80, 0xfd, 0x5b, 0x11, 0xff, 0xb2, 0xe3, 0xff, 0x2d, 0x18, 0xfe, 0x7b, 0xb0, 0x4b, 0x06, 0x86, 0x42, 0x43, 0xda, 0xf4, 0x97, 0xf0, 0x02, 0x5b, 0xdd, 0xfb, 0x2e, 0x60, 0xf3, 0x5f, 0x63, 0x11, 0xd0, 0x4f, 0x02, 0xef, 0x99, 0xe7, 0x8a, 0x4d, 0xe6, 0x90, 0x66, 0x0e, 0x09, 0x8d, 0x16, 0xf5, 0x75, 0xfa, 0x59, 0x98, 0xf4, 0x8f, 0x87, 0xe5, 0x58, 0x03, 0xf5, 0xe0, 0x51, 0x0e, 0x89, 0x97, 0x06, 0xc4, 0x11, 0xfb, 0xf3, 0xcb, 0xf6, 0x10, 0x64, 0x00, 0x06, 0xf6, 0xfc, 0x63, 0x11, 0xfb, 0x84, 0x29, 0x00, 0x47, 0x95, 0xfb, 0xc3, 0x91, 0x00, 0x15, 0x20, 0xfd, 0xaa, 0xe7, 0xf8, 0x1d, 0x6f, 0xfd, 0x85, 0x32, 0xfe, 0x7d, 0xd5, 0xff, 0xbb, 0x16, 0xfe, 0x4b, 0x34, 0x49, 0xd4, 0xb0, 0x41, 0x1a, 0xc3, 0xfa, 0x95, 0x83, 0x05, 0xaf, 0x27, 0xfb, 0x1c, 0xcc, 0xf3, 0xb6, 0x85, 0x0e, 0xc3, 0x79, 0x02, 0xef, 0xa0, 0xe8, 0x5d, 0x69, 0xe2, 0x13, 0x2e, 0x0b, 0x44, 0x5f, 0x15, 0x67, 0x4b, 0xfe, 0xb3, 0x86, 0xfb, 0x80, 0xbf, 0xe4, 0x70, 0x77, 0xef, 0xe1, 0x9f, 0x0d, 0x06, 0x34, 0x08, 0x5c, 0xd0, 0xfc, 0x2d, 0x1a, 0xf8, 0x7a, 0xe7, 0xfe, 0xf8, 0x44, 0xfd, 0x46, 0x8d, 0xfc, 0xa3, 0x71, 0xff, 0x80, 0x47, 0xfb, 0x30, 0x52, 0x01, 0x18, 0x6b, 0xfd, 0xe5, 0x29, 0xf8, 0xb4, 0x1e, 0xfd, 0x23, 0x74, 0xfd, 0x63, 0x33, 0xff, 0x47, 0xfa, 0xfe, 0xb4, 0x0b, 0x46, 0xe6, 0xa4, 0x40, 0x66, 0xb4, 0xff, 0xe9, 0x26, 0x06, 0x34, 0x0c, 0xfc, 0xf3, 0x34, 0xf6, 0x96, 0x97, 0x0a, 0xe4, 0x08, 0x02, 0x4f, 0x64, 0xea, 0x41, 0x3d, 0xdf, 0x7f, 0x1c, 0x08, 0xe0, 0xc8, 0x13, 0x23, 0x8b, 0xff, 0x96, 0xa9, 0x01, 0xe7, 0x05, 0xe7, 0xe5, 0x84, 0xe9, 0x21, 0x01, 0x0b, 0x28, 0x63, 0x09, 0x23, 0xcd, 0xfd, 0x0a, 0x9c, 0xfa, 0xba, 0xa6, 0xfe, 0xdd, 0xa9, 0xfc, 0x88, 0x7c, 0xfd, 0x83, 0x52, 0xff, 0x4c, 0xdd, 0xfa, 0x48, 0x2a, 0x01, 0xbd, 0x56, 0xfd, 0x2c, 0x62, 0xf7, 0xac, 0x3c, 0xfd, 0xaf, 0x2e, 0xfd, 0xfd, 0xaf, 0xfe, 0xcd, 0x41, 0x00, 0x67, 0xab, 0x42, 0xd9, 0x84, 0x3c, 0x9e, 0x0e, 0x04, 0xb1, 0xc5, 0x0a, 0x0d, 0x5b, 0xfc, 0x49, 0x9e, 0xf6, 0x6c, 0x49, 0x08, 0x52, 0xfd, 0x00, 0xd5, 0x1c, 0xed, 0x1e, 0xb4, 0xdd, 0xf5, 0xd7, 0x02, 0xa1, 0xf2, 0x12, 0x0e, 0x88, 0x00, 0xfb, 0xc3, 0x05, 0x04, 0xcb, 0xeb, 0x16, 0x6b, 0xe3, 0x10, 0xb8, 0x05, 0xf6, 0x19, 0x0b, 0xd4, 0x5c, 0xff, 0x62, 0xf3, 0xfc, 0x85, 0xef, 0xfe, 0xc2, 0x9d, 0xfc, 0x46, 0x46, 0xfe, 0x78, 0x1e, 0xff, 0x5b, 0x39, 0xfa, 0x78, 0xff, 0xff, 0x64, 0x9e, 0xfd, 0x34, 0x0c, 0xf7, 0x15, 0xdb, 0xfc, 0xc4, 0x05, 0xfe, 0x64, 0x90, 0xfe, 0xd7, 0xf6, 0x00, 0xb2, 0xdb, 0x3e, 0xd9, 0xcd, 0x3a, 0x0d, 0xd6, 0x04, 0x8c, 0x5e, 0x0d, 0xb9, 0xa0, 0xff, 0xcb, 0xee, 0xf4, 0xdf, 0xc8, 0x07, 0x2b, 0xe7, 0x00, 0xbe, 0x18, 0xee, 0xe2, 0x0d, 0xdf, 0xd7, 0x36, 0xfe, 0x9b, 0x2d, 0x13, 0x22, 0x24, 0x00, 0x6f, 0xe7, 0x04, 0x22, 0xf7, 0xf2, 0x00, 0x98, 0xe0, 0x21, 0x6f, 0xfe, 0x71, 0x59, 0x0c, 0x45, 0x7c, 0x01, 0x06, 0x3d, 0xfe, 0x90, 0x3d, 0xff, 0xb3, 0xac, 0xfc, 0x5d, 0x7e, 0xfe, 0x0b, 0xe1, 0xff, 0xd5, 0x87, 0xf9, 0x8a, 0x2c, 0xfd, 0xf0, 0xeb, 0xfe, 0xd1, 0x74, 0xf8, 0xbd, 0x11, 0xfc, 0xeb, 0xc9, 0xfe, 0xcd, 0xa7, 0xfe, 0xa9, 0x14, 0x01, 0x61, 0x6d, 0x3c, 0x21, 0x6f, 0x39, 0x82, 0x57, 0x03, 0xc7, 0x8b, 0x0d, 0xb9, 0x3c, 0x04, 0xd6, 0x9a, 0xf3, 0x29, 0xcc, 0x04, 0xe8, 0xd8, 0x01, 0x0d, 0x4a, 0xf1, 0x0d, 0xc0, 0xe2, 0x80, 0x71, 0xfa, 0x6b, 0xf5, 0x11, 0xe3, 0x98, 0xff, 0x21, 0x86, 0x00, 0x67, 0x68, 0xfa, 0x2c, 0xba, 0xe3, 0xd4, 0x90, 0xf5, 0x7c, 0x9a, 0x0a, 0xf2, 0xde, 0x03, 0xb6, 0x63, 0xff, 0xe2, 0xaf, 0x00, 0xa7, 0x3c, 0xfd, 0xfe, 0xc1, 0xfd, 0xc0, 0x0a, 0xff, 0x05, 0x5d, 0xf9, 0xb3, 0x50, 0xfc, 0xfd, 0xf5, 0xff, 0xd1, 0x00, 0xfa, 0x72, 0xd5, 0xfb, 0x7d, 0xc1, 0xff, 0x82, 0x9c, 0xfe, 0xdb, 0x25, 0x00, 0x1f, 0xb2, 0x39, 0x6a, 0x8e, 0x38, 0x95, 0x88, 0x01, 0xe1, 0x4b, 0x0c, 0x4c, 0xc7, 0x07, 0x3d, 0xf5, 0xf5, 0x33, 0xe7, 0x02, 0xcc, 0x54, 0xfd, 0xab, 0xa6, 0xf5, 0xf3, 0x78, 0xea, 0xbe, 0xbd, 0xf5, 0x50, 0x01, 0x11, 0x34, 0xe8, 0x00, 0x7a, 0xd7, 0xf9, 0x13, 0x7d, 0xff, 0x86, 0x01, 0xeb, 0x63, 0x8c, 0xee, 0xb3, 0x88, 0x06, 0x56, 0x04, 0x06, 0xce, 0xf0, 0xfe, 0x07, 0x43, 0x01, 0x5b, 0x32, 0x00, 0x39, 0xe3, 0xfc, 0xd0, 0x4d, 0xfc, 0xfb, 0x57, 0xfa, 0x95, 0x71, 0xfc, 0x80, 0xd4, 0x00, 0xbc, 0xde, 0xfc, 0x62, 0xcf, 0xfa, 0xb3, 0xd4, 0xfe, 0x49, 0x59, 0xff, 0xf7, 0xc4, 0xff, 0x12, 0xf8, 0x35, 0x95, 0xd9, 0x34, 0x0a, 0x00, 0x01, 0x6a, 0x60, 0x0d, 0x0e, 0xba, 0x0a, 0x67, 0x33, 0xf7, 0x2b, 0x2d, 0x02, 0xca, 0xbe, 0xfb, 0x47, 0x21, 0xf6, 0x98, 0x3c, 0xf0, 0x31, 0x8f, 0xf5, 0xb8, 0xf7, 0x0d, 0x5b, 0xad, 0x03, 0x2a, 0x2d, 0xf7, 0xe0, 0xff, 0xff, 0x6b, 0x19, 0xf3, 0xcd, 0x98, 0xeb, 0xf4, 0xd5, 0x00, 0x8f, 0x40, 0x07, 0x87, 0x26, 0xfe, 0x55, 0x13, 0x00, 0xae, 0xcd, 0x01, 0xf6, 0xfd, 0xfd, 0x7b, 0xa2, 0xfb, 0x11, 0x68, 0xfa, 0x06, 0x15, 0xfd, 0x66, 0xa4, 0x01, 0x51, 0xd1, 0xfe, 0x0a, 0x00, 0xfa, 0x7a, 0x79, 0xfd, 0x64, 0x64, 0x00, 0xa0, 0xae, 0xff, 0x40, 0xef, 0x31, 0x69, 0xfa, 0x2f, 0xfb, 0x6d, 0x01, 0xcc, 0x7a, 0x0f, 0xc2, 0xe7, 0x0b, 0xea, 0x17, 0xf7, 0x23, 0x27, 0x01, 0xb7, 0x37, 0xfe, 0x3d, 0x82, 0xf8, 0x2b, 0xc0, 0xef, 0x90, 0xaa, 0xf4, 0x81, 0x49, 0x0d, 0x4c, 0xc7, 0x05, 0x1c, 0xd5, 0xf6, 0xb6, 0xf6, 0xfe, 0x1a, 0xe7, 0xf8, 0xba, 0xe8, 0xec, 0x3a, 0x74, 0xfc, 0x82, 0xf3, 0x06, 0x98, 0xf8, 0xfd, 0x76, 0x10, 0xfe, 0xf0, 0xd2, 0x00, 0x22, 0x5a, 0xfe, 0x4b, 0x5c, 0xfd, 0x68, 0x32, 0xfc, 0x3d, 0x97, 0xfc, 0x83, 0x6a, 0x00, 0x8f, 0x9f, 0xff, 0x57, 0xa5, 0xfa, 0xdb, 0xa0, 0xfd, 0xd4, 0xf0, 0x00, 0x35, 0x45, 0xff, 0x04, 0x4b, 0x2c, 0x85, 0xf1, 0x2a, 0x10, 0x46, 0x03, 0x75, 0x98, 0x11, 0x95, 0x92, 0x0c, 0x43, 0xbb, 0xf6, 0xbc, 0xd8, 0x00, 0x4d, 0x4a, 0x01, 0x6b, 0x13, 0xfb, 0x49, 0x78, 0xf0, 0xa8, 0xcd, 0xf2, 0x91, 0x91, 0x09, 0xec, 0xa4, 0x07, 0x53, 0x62, 0xf9, 0xd7, 0x50, 0xfe, 0x12, 0x22, 0xfc, 0x91, 0x5b, 0xef, 0x0b, 0x93, 0xfa, 0x4e, 0x76, 0x06, 0x37, 0xc7, 0xfd, 0xa0, 0x6b, 0xfc, 0x00, 0xa1, 0xff, 0x7b, 0x99, 0xfd, 0xdc, 0xfa, 0xfd, 0x0b, 0x9a, 0xfe, 0x2d, 0x06, 0xfd, 0xc1, 0x62, 0xfe, 0xfd, 0x80, 0xff, 0x67, 0x58, 0xfc, 0xee, 0x84, 0xfe, 0x8b, 0x4a, 0x01, 0xb5, 0x3f, 0xff, 0xf3, 0x63, 0x2b, 0xc8, 0xb1, 0x25, 0xda, 0x8a, 0x01, 0x6b, 0x77, 0x17, 0x19, 0xfd, 0x0d, 0x92, 0xcb, 0xf2, 0xbd, 0x42, 0x01, 0x2f, 0x71, 0x05, 0x94, 0x94, 0xfd, 0x88, 0xa0, 0xef, 0x3e, 0xc3, 0xef, 0x50, 0xe9, 0x07, 0x0f, 0xdd, 0x08, 0x81, 0x6d, 0xfa, 0xfd, 0xba, 0x00, 0x78, 0x59, 0xfe, 0x1c, 0xd4, 0xec, 0x49, 0x12, 0xfa, 0x92, 0xa7, 0x08, 0xe1, 0xaa, 0xfc, 0x7f, 0x4f, 0xfb, 0xa1, 0x6d, 0xff, 0x87, 0x9f, 0xfb, 0xce, 0x07, 0xfd, 0x1d, 0x83, 0xff, 0x9b, 0x25, 0xfd, 0xf0, 0x11, 0xff, 0xd4, 0x55, 0x00, 0x8c, 0xda, 0xfb, 0xce, 0x9b, 0xff, 0x30, 0xf1, 0x02, 0x2e, 0x23, 0xff, 0xaa, 0x7e, 0x24, 0xc2, 0x17, 0x24, 0x39, 0x29, 0x08, 0x9f, 0x39, 0x16, 0x5f, 0x44, 0x0b, 0x99, 0xbb, 0xf2, 0xbe, 0x3c, 0x00, 0x02, 0x01, 0x04, 0xd6, 0x37, 0xfc, 0x5f, 0x38, 0xf5, 0x28, 0x6e, 0xf2, 0xaa, 0x05, 0x01, 0x60, 0x42, 0x06, 0x3f, 0x9b, 0xfd, 0xe6, 0x8a, 0x02, 0x31, 0xdc, 0x00, 0xbd, 0x93, 0xf0, 0x62, 0xa8, 0xf6, 0xc4, 0x22, 0x04, 0x32, 0xe9, 0x00, 0xa8, 0x15, 0xff, 0x1a, 0xad, 0xfe, 0xc8, 0x8d, 0xfb, 0x5d, 0xa2, 0xfd, 0x87, 0xc3, 0xff, 0x78, 0x76, 0xfe, 0xd2, 0xa7, 0xff, 0x00, 0xcd, 0xff, 0xb8, 0xb0, 0xfc, 0xa7, 0x81, 0xfe, 0x52, 0x69, 0x01, 0x43, 0x98, 0xff, 0x53, 0x17, 0x20, 0x7a, 0x34, 0x21, 0xc0, 0x9f, 0x08, 0xc7, 0x16, 0x14, 0xb0, 0x02, 0x0b, 0x14, 0x5f, 0xf6, 0xd5, 0xac, 0x01, 0x57, 0xbd, 0x02, 0xbc, 0x4d, 0xfc, 0x21, 0x1e, 0xf7, 0x57, 0x78, 0xf3, 0x69, 0xca, 0xff, 0x35, 0xbb, 0x04, 0x7d, 0x11, 0xfe, 0xee, 0x02, 0x02, 0xeb, 0xa2, 0x01, 0x2f, 0xd3, 0xf4, 0xc2, 0xb2, 0xf6, 0x8d, 0xc2, 0x02, 0xb6, 0xc5, 0x02, 0xa7, 0xa0, 0xfe, 0x23, 0x5a, 0xfd, 0x36, 0xbb, 0xfc, 0x60, 0x94, 0xfe, 0xd1, 0xb4, 0xff, 0x1e, 0x22, 0xfe, 0xba, 0x6f, 0xfe, 0xfb, 0x5f, 0xff, 0x83, 0x5a, 0xfe, 0x25, 0x12, 0xff, 0xd1, 0xe3, 0xff, 0x27, 0xa7, 0xfe, 0x49, 0x80, 0x1c, 0x5c, 0x9c, 0x1d, 0x24, 0xd5, 0x08, 0x3b, 0x0f, 0x11, 0xf7, 0xa6, 0x09, 0x38, 0x8d, 0xfb, 0x05, 0xb1, 0x02, 0x99, 0xc7, 0x00, 0x50, 0xdc, 0xfc, 0x68, 0x33, 0xf8, 0x11, 0x34, 0xf5, 0x56, 0x7d, 0xff, 0x1f, 0x36, 0x03, 0x1a, 0xb0, 0xfe, 0x93, 0xa8, 0x01, 0x0e, 0xd2, 0x01, 0xf2, 0x86, 0xf7, 0xb4, 0x13, 0xf8, 0x93, 0x04, 0x03, 0x5a, 0xff, 0x02, 0x90, 0x48, 0xfe, 0x5e, 0x97, 0xfd, 0x50, 0xd0, 0xfd, 0x52, 0x3e, 0xff, 0x50, 0x6c, 0xff, 0x51, 0x9e, 0xfd, 0x41, 0x95, 0xfd, 0x81, 0xe0, 0xfe, 0x98, 0xf1, 0xfe, 0xaf, 0xc9, 0xfe, 0x02, 0xf5, 0xfe, 0x83, 0xf5, 0xfe, 0xe0, 0x95, 0x19, 0xf3, 0x2f, 0x1b, 0x59, 0x80, 0x08, 0x6b, 0xcc, 0x0d, 0x1e, 0x65, 0x09, 0x70, 0x3d, 0xff, 0x91, 0x62, 0x02, 0x1c, 0xc7, 0xff, 0x86, 0xf6, 0xfc, 0xff, 0xbc, 0xf8, 0x0c, 0x02, 0xf7, 0x5b, 0x40, 0xff, 0x6e, 0x55, 0x02, 0x21, 0x18, 0xff, 0x88, 0x85, 0x01, 0x9a, 0x19, 0x02, 0x2f, 0xd7, 0xf8, 0x1b, 0x2a, 0xf9, 0x9b, 0x6d, 0x03, 0x23, 0xe8, 0x02, 0x76, 0x0d, 0xfe, 0xc0, 0xee, 0xfd, 0x23, 0x7d, 0xfe, 0x46, 0x27, 0xff, 0xe1, 0x2d, 0xff, 0xb7, 0x92, 0xfd, 0x89, 0x15, 0xfd, 0xc4, 0x86, 0xfe, 0x95, 0xba, 0xfe, 0x1f, 0x80, 0xfe, 0x8b, 0x5c, 0xff, 0x38, 0x89, 0xff, 0x4d, 0xf7, 0x15, 0xbd, 0xa6, 0x18, 0xb1, 0xd8, 0x07, 0xf1, 0x2e, 0x0b, 0x4a, 0x5a, 0x0a, 0x7d, 0x74, 0x01, 0x7d, 0x78, 0x01, 0x24, 0xc6, 0xff, 0xdd, 0x39, 0xfd, 0x27, 0xe3, 0xf9, 0xc5, 0x24, 0xf9, 0xa8, 0xe1, 0xfe, 0xe9, 0x82, 0x01, 0x07, 0x1d, 0x00, 0xc0, 0x50, 0x02, 0x3a, 0xdf, 0x01, 0xdd, 0xe3, 0xf9, 0xcb, 0x1f, 0xfb, 0xd5, 0x98, 0x03, 0xa1, 0x6a, 0x02, 0x45, 0x2b, 0xfe, 0xf3, 0xe7, 0xfd, 0xc9, 0xf3, 0xfe, 0xc8, 0xae, 0xff, 0xd7, 0xf9, 0xfe, 0xd1, 0x7f, 0xfd, 0x4c, 0x3f, 0xfd, 0x29, 0xe9, 0xfe, 0x4c, 0x0a, 0xff, 0x60, 0x3f, 0xfe, 0xae, 0x6a, 0xff, 0xb9, 0x0d, 0x00, 0xa0, 0x4c, 0x13, 0x61, 0x9e, 0x15, 0x60, 0x16, 0x07, 0xf2, 0xb0, 0x0a, 0x0e, 0x6d, 0x0a, 0xf9, 0x86, 0x01, 0x4a, 0xd2, 0x00, 0x42, 0xf2, 0xff, 0xa0, 0xa3, 0xfd, 0x1a, 0x15, 0xfb, 0x07, 0xa7, 0xfa, 0x2b, 0x5a, 0xfe, 0x4b, 0xc5, 0x00, 0x9f, 0x06, 0x01, 0xc9, 0xe6, 0x02, 0xa3, 0xa4, 0x01, 0xe1, 0x03, 0xfb, 0x84, 0x87, 0xfc, 0x89, 0xcf, 0x02, 0x0e, 0x3e, 0x01, 0x0a, 0x4d, 0xfe, 0x86, 0x70, 0xfe, 0x3f, 0x46, 0xff, 0xb4, 0x80, 0xff, 0xfc, 0xd5, 0xfe, 0x07, 0xf6, 0xfd, 0xe3, 0xfa, 0xfd, 0xab, 0x79, 0xff, 0x4f, 0xf9, 0xfe, 0xd0, 0xe4, 0xfd, 0x7a, 0x40, 0xff, 0xde, 0x15, 0x00, 0x5e, 0x20, 0x10, 0x97, 0xff, 0x12, 0xaa, 0x07, 0x07, 0x66, 0xe9, 0x09, 0xc8, 0xac, 0x09, 0x21, 0xb0, 0x01, 0xf8, 0xfa, 0x00, 0xa1, 0x18, 0x00, 0x4d, 0x0b, 0xfe, 0xac, 0x40, 0xfc, 0x04, 0xb1, 0xfb, 0x3d, 0xf9, 0xfd, 0x2b, 0x52, 0x00, 0x9d, 0x33, 0x02, 0x70, 0xa1, 0x03, 0xd0, 0x5c, 0x01, 0x9e, 0x32, 0xfc, 0xde, 0x1b, 0xfd, 0x9a, 0x72, 0x01, 0x75, 0xda, 0x00, 0xe7, 0xe0, 0xfe, 0x0b, 0xa3, 0xfe, 0x18, 0x27, 0xff, 0x99, 0x82, 0xff, 0xf2, 0x82, 0xff, 0xb0, 0xf0, 0xfe, 0x9f, 0x99, 0xfe, 0xa2, 0x4f, 0xff, 0x07, 0x5e, 0xfe, 0x76, 0xc4, 0xfd, 0xa4, 0x7b, 0xff, 0x06, 0x0e, 0x00, 0xd7, 0x67, 0x0c, 0xfe, 0x58, 0x10, 0x5f, 0xbd, 0x07, 0x30, 0x63, 0x08, 0xa2, 0xeb, 0x07, 0xce, 0xc2, 0x02, 0xf3, 0x1f, 0x02, 0x59, 0x50, 0x00, 0x30, 0x26, 0xfe, 0x2d, 0x0b, 0xfd, 0x14, 0x11, 0xfd, 0xe8, 0xfd, 0xfe, 0xc5, 0x2e, 0x01, 0x96, 0x24, 0x03, 0x4c, 0x9e, 0x03, 0x41, 0x37, 0x01, 0x5f, 0x6f, 0xfd, 0xda, 0xe6, 0xfd, 0x5a, 0xc9, 0x00, 0x66, 0x75, 0x00, 0x62, 0x29, 0xff, 0x32, 0xed, 0xfe, 0x3f, 0xa7, 0xff, 0x17, 0x72, 0x00, 0xd6, 0x30, 0x00, 0xc3, 0x20, 0xff, 0x5d, 0x69, 0xfe, 0xae, 0xfe, 0xfe, 0x17, 0xd2, 0xfe, 0x3a, 0x61, 0xfe, 0x9e, 0x82, 0xff, 0xf9, 0xfb, 0xff, 0xe5, 0x66, 0x09, 0x2a, 0xa4, 0x0c, 0xd9, 0x2b, 0x08, 0xe8, 0x91, 0x08, 0x6f, 0xdf, 0x06, 0x88, 0x5c, 0x03, 0x32, 0x3d, 0x02, 0xc4, 0x6e, 0x00, 0xd6, 0x25, 0xff, 0xaa, 0x3f, 0xfe, 0xbe, 0xa2, 0xfe, 0x13, 0xef, 0xff, 0x66, 0x5d, 0x01, 0x74, 0x92, 0x03, 0xce, 0x0f, 0x04, 0x69, 0x72, 0x01, 0x42, 0x51, 0xfe, 0xe4, 0x8f, 0xfe, 0x7c, 0x2b, 0x00, 0x70, 0xee, 0xff, 0xee, 0x63, 0xff, 0x86, 0x93, 0xff, 0x01, 0x60, 0x00, 0x01, 0x6a, 0x00, 0xf8, 0xb6, 0xff, 0xb2, 0x5d, 0xff, 0x6f, 0x23, 0xff, 0xdf, 0x4c, 0xff, 0x23, 0xf1, 0xfe, 0xb4, 0xa7, 0xfe, 0x35, 0x6e, 0xff, 0xb4, 0xd9, 0xff, 0xd0, 0x23, 0x07, 0xed, 0x34, 0x0a, 0x26, 0xa5, 0x07, 0x5a, 0x3f, 0x07, 0x26, 0xa4, 0x05, 0x21, 0x70, 0x03, 0xe2, 0xe0, 0x02, 0xfa, 0x4e, 0x01, 0x6b, 0xee, 0xff, 0xde, 0x28, 0x00, 0xee, 0xc0, 0x00, 0x63, 0x6e, 0x01, 0x08, 0x64, 0x02, 0xdc, 0x8a, 0x03, 0x3a, 0x23, 0x04, 0x1a, 0xc2, 0x01, 0x1b, 0xa8, 0xfe, 0x49, 0x9f, 0xfe, 0x45, 0x7d, 0xff, 0x13, 0x03, 0x00, 0x51, 0x58, 0x00, 0x37, 0xea, 0xff, 0x4a, 0xe7, 0xff, 0x12, 0x51, 0x00, 0x30, 0x49, 0x00, 0xb7, 0xda, 0xff, 0x24, 0x57, 0xff, 0x5d, 0x4a, 0xff, 0x66, 0x30, 0xff, 0x5a, 0xff, 0xfe, 0xaa, 0x8a, 0xff, 0xd4, 0x0f, 0x00, 0x2a, 0x4f, 0x06, 0x1a, 0xb5, 0x08, 0xb8, 0x7b, 0x06, 0xa6, 0xb6, 0x05, 0x0c, 0x94, 0x04, 0x0c, 0xbb, 0x03, 0x8b, 0x7b, 0x03, 0x04, 0x0b, 0x03, 0xde, 0xf4, 0x01, 0x6c, 0x2d, 0x01, 0x9a, 0x19, 0x02, 0x58, 0xbd, 0x02, 0x0c, 0x05, 0x03, 0x35, 0x84, 0x03, 0xa6, 0x31, 0x03, 0xa4, 0xe2, 0x00, 0x64, 0x9f, 0xfe, 0x43, 0x29, 0xff, 0x11, 0x21, 0x00, 0x62, 0x5d, 0x00, 0xe1, 0x56, 0x00, 0x92, 0xd5, 0xff, 0xf6, 0xee, 0xff, 0xff, 0x5b, 0x00, 0x8d, 0x6f, 0x00, 0x4b, 0x06, 0x00, 0x04, 0x6f, 0xff, 0xb3, 0x79, 0xff, 0xd4, 0x96, 0xff, 0x77, 0xa0, 0xff, 0x0a, 0xf1, 0xff, 0xbb, 0x18, 0x00, 0x53, 0x0e, 0x05, 0x34, 0xd0, 0x06, 0x0b, 0x07, 0x05, 0xcc, 0x53, 0x05, 0x51, 0x5c, 0x05, 0xc7, 0x9e, 0x04, 0x8f, 0x61, 0x04, 0x61, 0x71, 0x04, 0x1a, 0x1c, 0x04, 0x9b, 0x31, 0x03, 0xfd, 0x81, 0x02, 0x1f, 0x2d, 0x02, 0xa1, 0x45, 0x02, 0x21, 0x6f, 0x02, 0x0a, 0x21, 0x02, 0xdd, 0xd0, 0x00, 0x3a, 0x99, 0xff, 0x8a, 0xf3, 0xff, 0xc3, 0x42, 0x00, 0x6e, 0xe1, 0xff, 0xb1, 0xd9, 0xff, 0xc5, 0xe0, 0xff, 0xf2, 0xec, 0xff, 0x56, 0x47, 0x00, 0xb6, 0xa2, 0x00, 0xfa, 0x81, 0x00, 0xa8, 0xf1, 0xff, 0x99, 0xc3, 0xff, 0x53, 0xbc, 0xff, 0xa8, 0xae, 0xff, 0x80, 0xf2, 0xff, 0x3e, 0xbe, 0xff, 0x19, 0x9a, 0x04, 0x10, 0x4e, 0x07, 0x10, 0xdb, 0x05, 0xd0, 0x5a, 0x06, 0x08, 0x3b, 0x07, 0x0c, 0xcb, 0x05, 0x68, 0x71, 0x04, 0x79, 0xce, 0x03, 0x1a, 0x1e, 0x03, 0xe1, 0xcf, 0x02, 0xa8, 0xaf, 0x02, 0xb4, 0x20, 0x02, 0x85, 0x75, 0x01, 0xa9, 0xf2, 0x00, 0xcb, 0x2e, 0x01, 0xc5, 0x5a, 0x01, 0x18, 0x9c, 0x00, 0xbc, 0x1f, 0x00, 0x16, 0xd9, 0xff, 0x86, 0x5f, 0xff, 0x74, 0x5a, 0xff, 0x79, 0xe1, 0xff, 0xde, 0x74, 0x00, 0x53, 0xb7, 0x00, 0x36, 0xbc, 0x00, 0xdb, 0xd7, 0x00, 0x0b, 0xa6, 0x00, 0xf1, 0xdc, 0xff, 0x1f, 0x66, 0xff, 0xc9, 0x50, 0xff, 0x40, 0x36, 0xff, 0x85, 0x2c, 0xff, 0xa0, 0x4d, 0x05, 0x18, 0x64, 0x09, 0x61, 0x4a, 0x08, 0xb1, 0x45, 0x07, 0xd1, 0x69, 0x06, 0x15, 0x6c, 0x05, 0xf6, 0xde, 0x04, 0xd8, 0x56, 0x03, 0x07, 0xbe, 0x01, 0xf2, 0x18, 0x01, 0x5f, 0x2d, 0x01, 0x8d, 0x4f, 0x01, 0x4d, 0xab, 0x01, 0x07, 0xdb, 0x01, 0x27, 0x88, 0x01, 0x7a, 0x29, 0x01, 0x96, 0x32, 0x00, 0xac, 0x65, 0xff, 0xd0, 0x58, 0xff, 0xf3, 0xb3, 0xff, 0x68, 0x18, 0x00, 0x20, 0xf9, 0xff, 0x78, 0x55, 0x00, 0x95, 0xe7, 0x00, 0x7c, 0xbe, 0x00, 0xbd, 0xb3, 0x00, 0x4f, 0xb0, 0x00, 0xbb, 0x0d, 0x00, 0x58, 0x3b, 0xff, 0xee, 0xcd, 0xfe, 0x73, 0x96, 0xfe, 0x52, 0xba, 0xfe, 0x40, 0x27, 0x06, 0x90, 0xe9, 0x09, 0x3d, 0x2c, 0x08, 0x99, 0xed, 0x06, 0x39, 0x14, 0x06, 0x38, 0x85, 0x05, 0xe9, 0x20, 0x05, 0xa2, 0x88, 0x03, 0x73, 0x7f, 0x01, 0x5d, 0x04, 0x00, 0x71, 0xb8, 0xff, 0x00, 0xce, 0x00, 0xc3, 0x2b, 0x02, 0xcc, 0xee, 0x01, 0xf7, 0x51, 0x01, 0x15, 0x34, 0x01, 0x53, 0x8d, 0x00, 0x04, 0x34, 0x00, 0x48, 0x0d, 0x00, 0xc8, 0xb8, 0xff, 0xf3, 0x9a, 0xff, 0xf9, 0xd3, 0xff, 0xf6, 0x67, 0x00, 0x7a, 0x61, 0x00, 0xd6, 0x12, 0x00, 0x1c, 0x9f, 0x00, 0xe6, 0x4c, 0x01, 0x2f, 0xec, 0x00, 0x27, 0x88, 0xff, 0x7e, 0x70, 0xfe, 0xb2, 0x53, 0xfe, 0x2c, 0xa4, 0xfe, 0xe0, 0x2d, 0x06, 0x8d, 0xb5, 0x09, 0xe1, 0xfc, 0x06, 0x28, 0xcd, 0x05, 0x0e, 0xd6, 0x05, 0x5e, 0x84, 0x05, 0xd3, 0x40, 0x05, 0x7d, 0xb3, 0x03, 0xc3, 0x46, 0x01, 0x36, 0xf6, 0xff, 0xc0, 0xfa, 0x00, 0xe3, 0xcc, 0x01, 0xdf, 0x11, 0x01, 0x81, 0x88, 0x00, 0x72, 0xc1, 0x00, 0x5f, 0xd8, 0x00, 0xfa, 0x02, 0x01, 0x0b, 0xb2, 0x01, 0xd4, 0x23, 0x01, 0x0c, 0xf3, 0xff, 0xa9, 0xba, 0xff, 0x06, 0xba, 0xff, 0xc1, 0xdd, 0xff, 0x76, 0xe5, 0xff, 0x41, 0xf2, 0xff, 0x74, 0x3f, 0x00, 0xda, 0x65, 0x00, 0x8e, 0xfa, 0x00, 0x15, 0x0c, 0x01, 0xb2, 0xac, 0xff, 0x25, 0x78, 0xfe, 0x3d, 0x41, 0xfe, 0x7b, 0x68, 0x07, 0xfc, 0xc8, 0x0a, 0xe6, 0x88, 0x06, 0x39, 0x9d, 0x04, 0x7a, 0x09, 0x04, 0x12, 0x05, 0x04, 0x2e, 0xb5, 0x04, 0xcb, 0xac, 0x03, 0xf9, 0x42, 0x01, 0xee, 0x35, 0xff, 0xc1, 0xd4, 0x00, 0x4d, 0x0d, 0x03, 0x77, 0x76, 0x02, 0xcc, 0x34, 0x01, 0xeb, 0xb0, 0xff, 0x45, 0xf4, 0xfe, 0xea, 0x6b, 0x00, 0x83, 0xea, 0x01, 0x36, 0xc1, 0x01, 0x7a, 0x85, 0x01, 0xec, 0xf8, 0x00, 0xab, 0xb1, 0xff, 0x8b, 0xc9, 0xff, 0x75, 0x4d, 0x00, 0xfa, 0xa7, 0xff, 0x37, 0x53, 0xff, 0x7a, 0x03, 0x00, 0xfb, 0x67, 0x00, 0x44, 0x54, 0x00, 0xc4, 0xa5, 0x00, 0xa2, 0x6b, 0x00, 0x28, 0x7f, 0xff, 0xe2, 0xa3, 0x08, 0xcc, 0xcb, 0x0c, 0x15, 0xe2, 0x06, 0x52, 0x2f, 0x04, 0xe8, 0x6b, 0x03, 0xde, 0x20, 0x03, 0x62, 0x07, 0x04, 0x6f, 0x37, 0x02, 0xd3, 0xb5, 0xff, 0xa0, 0xaf, 0xfd, 0x5e, 0xbe, 0xff, 0xe3, 0x09, 0x04, 0x2e, 0xc3, 0x03, 0x40, 0x5d, 0x01, 0x28, 0x00, 0x00, 0x15, 0xba, 0xff, 0xc3, 0xef, 0xff, 0x23, 0x95, 0x00, 0xe4, 0x70, 0x01, 0x06, 0x6e, 0x01, 0xbf, 0x23, 0x01, 0x72, 0xe0, 0x00, 0x84, 0xb1, 0x00, 0x96, 0x4e, 0x00, 0x9c, 0xc6, 0xff, 0x12, 0xdd, 0xff, 0x2b, 0xa3, 0xff, 0x02, 0x3e, 0xff, 0x5f, 0xc1, 0xff, 0x14, 0x62, 0x00, 0x6a, 0xc7, 0x00, 0x70, 0xf0, 0x00, 0x6f, 0x0c, 0x0b, 0xfc, 0x5a, 0x0f, 0x85, 0x16, 0x07, 0xf0, 0x9f, 0x04, 0xb2, 0xaf, 0x03, 0x07, 0x80, 0x02, 0x25, 0x84, 0x03, 0xcd, 0xeb, 0x00, 0x48, 0x8a, 0xfd, 0x70, 0xdb, 0xfa, 0xd6, 0x2d, 0xfe, 0x75, 0x99, 0x04, 0xae, 0xb8, 0x03, 0xc9, 0xcf, 0x00, 0x8a, 0x31, 0x00, 0x42, 0x09, 0x00, 0xe4, 0x88, 0x00, 0xa0, 0xa2, 0x01, 0xca, 0x63, 0x01, 0x42, 0x1c, 0x00, 0x8f, 0xd2, 0x00, 0xe7, 0x5c, 0x01, 0x52, 0xa6, 0x00, 0x68, 0xd0, 0x00, 0x50, 0x93, 0x00, 0x2b, 0xc0, 0xff, 0x2f, 0xed, 0xff, 0x61, 0xe3, 0xff, 0xb0, 0x4c, 0xff, 0x57, 0xb2, 0xff, 0x2a, 0x65, 0x00, 0x2f, 0x21, 0x01, 0x65, 0xb3, 0x0d, 0xeb, 0x01, 0x12, 0x58, 0xf6, 0x06, 0xc5, 0x06, 0x05, 0xe4, 0x05, 0x04, 0x05, 0x11, 0x02, 0x7e, 0xa9, 0x03, 0xa7, 0x23, 0x00, 0xba, 0xec, 0xfb, 0x51, 0xb8, 0xf8, 0xf3, 0x10, 0xfd, 0xc7, 0x4b, 0x05, 0xa4, 0x44, 0x03, 0x86, 0x44, 0xff, 0xa7, 0x13, 0xff, 0x1a, 0x7e, 0xff, 0x3f, 0xd4, 0x00, 0x1c, 0x56, 0x02, 0x9f, 0xc3, 0x01, 0x64, 0xad, 0x00, 0x6d, 0x60, 0x01, 0x1b, 0xa2, 0x00, 0xf6, 0x4c, 0x00, 0xba, 0x0a, 0x01, 0xcc, 0x1c, 0x00, 0x77, 0x04, 0x00, 0x4f, 0x6b, 0x00, 0x53, 0xf0, 0xff, 0x58, 0x8f, 0xff, 0x18, 0x3f, 0x00, 0x38, 0xc2, 0x00, 0x2c, 0x15, 0x00, 0x01, 0xfe, 0x10, 0x32, 0x5f, 0x14, 0x89, 0x3d, 0x06, 0x0b, 0xde, 0x05, 0xe9, 0x6d, 0x04, 0xbe, 0xc3, 0x01, 0x8e, 0x4d, 0x04, 0x5f, 0x9a, 0xff, 0x87, 0x39, 0xfa, 0xaf, 0x67, 0xf6, 0x48, 0xa9, 0xfc, 0xa0, 0xa9, 0x06, 0x40, 0xc4, 0x02, 0x10, 0x9e, 0xfd, 0xca, 0xd6, 0xfd, 0x4e, 0xa6, 0xfe, 0xa8, 0x37, 0x00, 0x24, 0x2d, 0x02, 0xc6, 0xd2, 0x01, 0x3b, 0x9e, 0x00, 0x85, 0x19, 0x02, 0xb2, 0x71, 0x01, 0xbb, 0xfe, 0xff, 0xab, 0x9a, 0x00, 0x2b, 0x24, 0x00, 0x0e, 0xf2, 0xff, 0xbf, 0x6c, 0x00, 0xc4, 0x17, 0x00, 0x5a, 0xfd, 0xff, 0xee, 0xc0, 0x00, 0x9a, 0x76, 0x00, 0xcb, 0xf0, 0xff, 0x8a, 0x00, 0x16, 0x9a, 0x6c, 0x17, 0xe3, 0x46, 0x04, 0x18, 0xb3, 0x06, 0x8e, 0xcd, 0x04, 0xc9, 0x26, 0x01, 0x10, 0x14, 0x05, 0xf1, 0x7a, 0xfe, 0xd4, 0x2c, 0xf8, 0x98, 0x43, 0xf4, 0x6d, 0xd9, 0xfc, 0x59, 0x56, 0x08, 0xe4, 0xc6, 0x01, 0xea, 0x03, 0xfc, 0x52, 0xcb, 0xfc, 0xd1, 0xcc, 0xfd, 0x38, 0xa5, 0xff, 0x81, 0x80, 0x01, 0xd5, 0x0e, 0x01, 0xcb, 0x2e, 0x00, 0x99, 0x11, 0x02, 0x16, 0xe4, 0x00, 0x2a, 0xea, 0xff, 0x3f, 0x29, 0x01, 0x2f, 0x41, 0x00, 0xdd, 0xb0, 0xff, 0x15, 0x24, 0x00, 0x76, 0x40, 0x00, 0xb1, 0xba, 0xff, 0x92, 0x87, 0x00, 0x24, 0xd1, 0x00, 0xe6, 0xc7, 0xff, 0xad, 0xf5, 0x1a, 0xfa, 0x76, 0x1a, 0x9c, 0xc3, 0x01, 0x79, 0x4f, 0x07, 0xa5, 0x78, 0x05, 0x11, 0x1b, 0x00, 0x9e, 0x9d, 0x05, 0x70, 0x45, 0xfd, 0x54, 0x1b, 0xf6, 0x3e, 0x54, 0xf3, 0xbe, 0xf1, 0xfd, 0xc2, 0x91, 0x09, 0xf9, 0x82, 0x00, 0x7c, 0xbf, 0xfa, 0x98, 0x10, 0xfc, 0x25, 0x7b, 0xfd, 0x44, 0x65, 0xff, 0x66, 0x08, 0x01, 0xea, 0xc2, 0x00, 0x08, 0x62, 0xff, 0xc2, 0xed, 0x01, 0x8b, 0x7c, 0x00, 0x72, 0x00, 0xff, 0xa8, 0x2a, 0x01, 0x4c, 0x65, 0x00, 0x4c, 0x29, 0x00, 0x7e, 0xec, 0xff, 0xba, 0x44, 0xff, 0x31, 0xa0, 0xff, 0x05, 0x95, 0x00, 0x4b, 0xbe, 0x00, 0x89, 0x29, 0x00, 0x39, 0x36, 0x20, 0x77, 0xb0, 0x1e, 0x84, 0x3a, 0xff, 0x82, 0x5b, 0x07, 0x6d, 0xca, 0x06, 0x36, 0xc7, 0xfe, 0xd4, 0xe8, 0x05, 0x74, 0x2e, 0xfc, 0x5b, 0x77, 0xf3, 0xa0, 0x88, 0xf2, 0xde, 0xe9, 0xfe, 0x23, 0x98, 0x0a, 0x8a, 0xf2, 0xff, 0x24, 0xd9, 0xf9, 0x8c, 0xd7, 0xfa, 0x41, 0x04, 0xfd, 0x4f, 0xe5, 0xff, 0x6e, 0x2c, 0x00, 0x6e, 0x50, 0x00, 0x84, 0x88, 0xff, 0xe8, 0x36, 0x01, 0x44, 0xf1, 0xff, 0xf7, 0xe9, 0xfe, 0x44, 0x10, 0x01, 0x30, 0xf3, 0xff, 0xfa, 0x84, 0xff, 0xa2, 0x77, 0xff, 0xbd, 0x35, 0xff, 0x95, 0x5b, 0xff, 0xdc, 0x06, 0x00, 0x22, 0xca, 0x00, 0x1d, 0x3d, 0x00, 0xbc, 0x27, 0x24, 0xe6, 0xa9, 0x22, 0x87, 0xe2, 0xfd, 0x98, 0xb6, 0x06, 0xa1, 0x9a, 0x07, 0x3e, 0x24, 0xfe, 0x44, 0x29, 0x06, 0xc0, 0x63, 0xfb, 0x5d, 0x4a, 0xf1, 0x14, 0x09, 0xf2, 0x6b, 0xb7, 0xff, 0xb7, 0xab, 0x0a, 0x70, 0x69, 0xff, 0x38, 0xa5, 0xf9, 0xef, 0x4a, 0xfa, 0x23, 0xb0, 0xfc, 0x51, 0xc7, 0xff, 0x4a, 0x08, 0x00, 0x52, 0x52, 0x00, 0x29, 0x1a, 0xff, 0xc0, 0x7c, 0x01, 0x0b, 0x3d, 0x00, 0x9b, 0x60, 0xfe, 0x2f, 0x39, 0x00, 0x3c, 0x2b, 0xff, 0x2a, 0xa8, 0xff, 0x85, 0x1f, 0xff, 0x9f, 0x93, 0xfe, 0x15, 0x8d, 0xff, 0xb2, 0x23, 0x00, 0xee, 0xcf, 0x00, 0xdd, 0x3b, 0x00, 0xeb, 0x45, 0x27, 0x09, 0x1c, 0x27, 0xd2, 0x52, 0xfe, 0x38, 0xf8, 0x05, 0xf0, 0x56, 0x07, 0x52, 0xd8, 0xfc, 0x00, 0x9f, 0x06, 0x07, 0xea, 0xfa, 0x5a, 0x31, 0xef, 0x8f, 0x2f, 0xf2, 0x11, 0x14, 0xff, 0x23, 0xb8, 0x08, 0x71, 0xe0, 0xff, 0xef, 0xd8, 0xfa, 0x74, 0x29, 0xf9, 0x38, 0x90, 0xfb, 0x2f, 0x76, 0xff, 0x9a, 0x93, 0xff, 0xab, 0xdb, 0x01, 0xfb, 0xc8, 0xff, 0x5b, 0xfb, 0xff, 0x6b, 0xd8, 0xff, 0x81, 0x6b, 0xfe, 0x13, 0xdf, 0xff, 0x67, 0x63, 0xfe, 0x3c, 0xe1, 0xfe, 0x91, 0xaf, 0xfe, 0xf1, 0x4c, 0xfe, 0xf6, 0x93, 0xff, 0xfb, 0x0a, 0x00, 0xa3, 0x1f, 0x01, 0x44, 0x36, 0x00, 0xb0, 0x40, 0x28, 0x77, 0xc3, 0x2a, 0x5e, 0x8a, 0x00, 0xdb, 0xce, 0x05, 0x0a, 0xbc, 0x07, 0x9a, 0x07, 0xfb, 0x6b, 0xf8, 0x05, 0x82, 0x0f, 0xfc, 0xdd, 0x8b, 0xee, 0x07, 0x02, 0xf3, 0x4c, 0xfd, 0xfd, 0xb6, 0x4d, 0x05, 0x3c, 0xc7, 0xff, 0xb4, 0xf5, 0xfc, 0x86, 0x00, 0xfa, 0x2c, 0x47, 0xfa, 0xbb, 0xf1, 0xfe, 0xbb, 0x85, 0xff, 0xb7, 0x18, 0x02, 0xe8, 0xdc, 0x00, 0xcc, 0x88, 0xff, 0x80, 0x63, 0xff, 0xfc, 0x32, 0xfe, 0x08, 0x70, 0xff, 0x0d, 0xaa, 0xfe, 0xcd, 0xe5, 0xfe, 0x8f, 0x7d, 0xfe, 0xae, 0x4a, 0xfe, 0xd2, 0x7c, 0xff, 0x8b, 0x1f, 0xff, 0x5f, 0x8f, 0x00, 0x59, 0xb0, 0x00, 0xe4, 0xfe, 0x28, 0x08, 0x25, 0x2d, 0x3d, 0x49, 0x03, 0x62, 0xc2, 0x06, 0xd3, 0x60, 0x08, 0xca, 0xad, 0xf9, 0xf8, 0x98, 0x03, 0xe4, 0x73, 0xfc, 0x98, 0x05, 0xef, 0xc1, 0x89, 0xf4, 0xa4, 0x74, 0xfd, 0x32, 0x9b, 0x00, 0x34, 0x14, 0xff, 0xd0, 0xc9, 0xfe, 0x1b, 0x3f, 0xfb, 0xdf, 0xa0, 0xfb, 0x14, 0xcd, 0xfd, 0x7e, 0xbb, 0xfd, 0xb4, 0xa9, 0x02, 0xa6, 0x39, 0x02, 0xfc, 0xfa, 0xfe, 0xb2, 0x52, 0xfe, 0x3c, 0x65, 0xfe, 0x81, 0xd0, 0xff, 0x08, 0x12, 0xff, 0x20, 0xdc, 0xfe, 0x7b, 0x15, 0xfe, 0x0d, 0x41, 0xfe, 0x52, 0x43, 0xff, 0x5e, 0x8a, 0xfe, 0xa3, 0x16, 0x00, 0x82, 0x6d, 0x00, 0x19, 0xd5, 0x29, 0xed, 0xab, 0x2e, 0x28, 0xa2, 0x05, 0x65, 0x0a, 0x09, 0x88, 0xe0, 0x09, 0x95, 0xc5, 0xf8, 0x51, 0xde, 0x00, 0xc0, 0x4d, 0xfb, 0x18, 0x8e, 0xee, 0x93, 0xa6, 0xf6, 0xe0, 0x54, 0xff, 0x49, 0xb3, 0xfb, 0xe6, 0x57, 0xfb, 0x83, 0x15, 0x01, 0xd2, 0x03, 0xfe, 0xd7, 0x08, 0xfd, 0xf7, 0x7f, 0xfd, 0x94, 0x9f, 0xfb, 0x91, 0x88, 0x01, 0x2f, 0xd1, 0x02, 0x2b, 0x39, 0xff, 0xce, 0x0b, 0xff, 0x08, 0x3d, 0xff, 0x0f, 0x05, 0xff, 0xe3, 0x7a, 0xfe, 0x3a, 0x39, 0xff, 0x4b, 0xe2, 0xfd, 0x51, 0xd3, 0xfd, 0x55, 0x48, 0xff, 0x03, 0xb3, 0xfd, 0x16, 0x1a, 0xff, 0x82, 0x77, 0x00, 0xb0, 0x71, 0x2b, 0x87, 0x28, 0x2f, 0x41, 0xcb, 0x05, 0x42, 0x79, 0x0b, 0xfe, 0xe7, 0x0b, 0x1a, 0x9f, 0xf8, 0x53, 0x0f, 0xff, 0xe9, 0x46, 0xf9, 0xa4, 0xc7, 0xed, 0x8d, 0x68, 0xf9, 0x20, 0x2c, 0x01, 0xb5, 0xb0, 0xf7, 0xae, 0xcf, 0xf8, 0x8d, 0xf9, 0x01, 0x5c, 0x88, 0xff, 0x5a, 0x68, 0xff, 0xf0, 0xb6, 0xfd, 0x67, 0x88, 0xf9, 0x69, 0x3d, 0x00, 0xbd, 0xba, 0x03, 0x6c, 0xe5, 0xff, 0x47, 0x9c, 0xfe, 0x72, 0xba, 0xff, 0x48, 0x9d, 0xff, 0x5b, 0x7c, 0xfe, 0x75, 0x93, 0xfe, 0xcb, 0x13, 0xfd, 0xb2, 0x80, 0xfd, 0xf1, 0x24, 0xff, 0x44, 0x79, 0xfd, 0xf0, 0x74, 0xfe, 0xf0, 0x11, 0x00, 0x3b, 0x18, 0x2f, 0x83, 0xb0, 0x2e, 0x97, 0x63, 0x03, 0xf4, 0xe0, 0x0e, 0x3c, 0xe7, 0x0d, 0x99, 0x15, 0xf8, 0x5f, 0x5f, 0xfd, 0x53, 0xeb, 0xf6, 0x38, 0x93, 0xed, 0x80, 0x0a, 0xfc, 0x22, 0x67, 0x04, 0xd7, 0x6c, 0xf3, 0xd1, 0xc3, 0xf3, 0x6c, 0x20, 0x03, 0x9e, 0x9e, 0x00, 0x56, 0xfd, 0x01, 0x75, 0x66, 0xff, 0x05, 0x61, 0xf7, 0x44, 0x1f, 0xff, 0x2a, 0x97, 0x04, 0x79, 0xfa, 0xff, 0xb1, 0xa3, 0xfd, 0x54, 0x54, 0x00, 0xc2, 0xd6, 0xff, 0x4d, 0xe9, 0xfd, 0x05, 0xaa, 0xfe, 0xee, 0xe5, 0xfb, 0x93, 0x9c, 0xfc, 0x67, 0x5c, 0xff, 0xd2, 0x3b, 0xfd, 0x8a, 0xdb, 0xfd, 0xe2, 0xc9, 0xff, 0xae, 0xc7, 0x33, 0xe0, 0x0d, 0x2e, 0x4f, 0x67, 0xff, 0x50, 0x28, 0x12, 0xa1, 0x1c, 0x0f, 0x7c, 0xab, 0xf6, 0x10, 0x3e, 0xfe, 0xe0, 0x4d, 0xf5, 0xf9, 0x2b, 0xec, 0x41, 0x9f, 0xff, 0x55, 0xff, 0x08, 0x96, 0x28, 0xf0, 0x16, 0x67, 0xed, 0xa7, 0x0b, 0x03, 0x22, 0x73, 0x02, 0xb0, 0x25, 0x04, 0xf5, 0xad, 0x01, 0x56, 0x6b, 0xf6, 0xfc, 0xaa, 0xfd, 0xbc, 0x20, 0x05, 0x9c, 0x33, 0x00, 0x1c, 0xde, 0xfc, 0xb3, 0xd0, 0x00, 0x54, 0xd1, 0xff, 0x8c, 0x98, 0xfc, 0x3d, 0x95, 0xfe, 0x0f, 0xe3, 0xfb, 0xd7, 0x48, 0xfc, 0xd6, 0x80, 0xff, 0x23, 0x0f, 0xfd, 0x2f, 0x5c, 0xfd, 0x2c, 0x98, 0xff, 0x07, 0x0f, 0x3a, 0xd5, 0xd1, 0x2e, 0x85, 0x5c, 0xf9, 0x6a, 0xf1, 0x12, 0x3e, 0xc7, 0x0f, 0x2a, 0xa6, 0xf5, 0x38, 0x41, 0x00, 0x3e, 0xbd, 0xf3, 0xef, 0x42, 0xea, 0x98, 0x6c, 0x03, 0xaa, 0x0a, 0x0e, 0x74, 0x5f, 0xee, 0x12, 0x5c, 0xe7, 0xdd, 0x8a, 0x01, 0x17, 0x3b, 0x03, 0xbb, 0x25, 0x05, 0x63, 0x64, 0x04, 0x6b, 0x36, 0xf7, 0x2c, 0xa3, 0xfb, 0x62, 0xa3, 0x04, 0xd3, 0x20, 0x01, 0x8c, 0x92, 0xfb, 0x38, 0xdb, 0xff, 0xfd, 0x52, 0x00, 0xd6, 0x54, 0xfc, 0xdc, 0x60, 0xfe, 0xf5, 0xf0, 0xfa, 0x6b, 0x0f, 0xfb, 0xa6, 0xfe, 0xff, 0x65, 0xbb, 0xfd, 0x19, 0x91, 0xfc, 0xf8, 0xeb, 0xfe, 0x6e, 0xf7, 0x40, 0x13, 0x83, 0x33, 0x45, 0x42, 0xf2, 0xbe, 0x63, 0x0e, 0x48, 0x27, 0x10, 0x75, 0xb9, 0xf4, 0x0d, 0x6d, 0x03, 0xa7, 0x8d, 0xf6, 0xfa, 0xc5, 0xe7, 0x18, 0x2e, 0x02, 0xf6, 0x96, 0x12, 0x09, 0xbf, 0xf1, 0xf1, 0xab, 0xe3, 0xaa, 0x0d, 0xfe, 0x5a, 0x43, 0x03, 0x23, 0xab, 0x06, 0xad, 0x3c, 0x06, 0x31, 0x97, 0xf6, 0xc8, 0x43, 0xfa, 0xb1, 0xf8, 0x04, 0x9a, 0x97, 0x01, 0xb1, 0x8b, 0xfa, 0xdf, 0x9b, 0xff, 0x59, 0x41, 0x01, 0x2c, 0xb2, 0xfb, 0x17, 0xd7, 0xfd, 0xc3, 0xda, 0xfa, 0x53, 0x80, 0xfa, 0x57, 0xf1, 0xff, 0x36, 0xf8, 0xfd, 0x31, 0xbe, 0xfc, 0xec, 0x82, 0xfe, 0xf0, 0x68, 0x48, 0xfc, 0x72, 0x39, 0x08, 0xd3, 0xe9, 0x5e, 0x00, 0x08, 0x0b, 0x67, 0x0f, 0xc7, 0x37, 0xf3, 0xa8, 0xc7, 0x09, 0x6e, 0xf6, 0xfa, 0x05, 0x03, 0xe3, 0x11, 0xb5, 0xff, 0x4a, 0x09, 0x17, 0xd5, 0x9e, 0xf6, 0x5c, 0x8a, 0xe1, 0xcc, 0x54, 0xfa, 0x8f, 0x67, 0x02, 0x4d, 0x7f, 0x06, 0x92, 0xba, 0x07, 0x18, 0xef, 0xf6, 0x8f, 0xe8, 0xf7, 0xa1, 0xd3, 0x03, 0xb4, 0x24, 0x03, 0x80, 0xf9, 0xfa, 0xf1, 0x42, 0xfe, 0x09, 0x21, 0x01, 0x15, 0xad, 0xfb, 0x0b, 0x4d, 0xfe, 0xd8, 0x00, 0xfb, 0x0b, 0x06, 0xf9, 0x1e, 0xe9, 0xff, 0x1c, 0xb8, 0xfe, 0xee, 0x69, 0xfc, 0x08, 0xeb, 0xfd, 0xbd, 0xf4, 0x51, 0x12, 0xfb, 0x3a, 0x25, 0xab, 0xe0, 0x94, 0xc1, 0x06, 0x33, 0xc9, 0x0c, 0xf8, 0xfd, 0xf1, 0x89, 0xd4, 0x0f, 0xee, 0x48, 0xfb, 0xdb, 0xad, 0xe0, 0x2f, 0xc3, 0xff, 0x68, 0x6b, 0x1b, 0x11, 0x3f, 0xfb, 0x0e, 0x2e, 0xdf, 0x3f, 0x02, 0xf6, 0xc2, 0xa8, 0xff, 0xa3, 0xcc, 0x07, 0x12, 0x00, 0x0a, 0x0f, 0xdc, 0xf4, 0xea, 0x25, 0xf5, 0x94, 0xc6, 0x03, 0x85, 0xd0, 0x04, 0xb2, 0xeb, 0xf9, 0xb7, 0xef, 0xfc, 0x3c, 0x19, 0x02, 0xe6, 0xa9, 0xfb, 0x6f, 0xa9, 0xfe, 0x1e, 0x22, 0xfb, 0xe5, 0x34, 0xf8, 0xdd, 0x74, 0xff, 0x07, 0x8e, 0xfe, 0x4e, 0xc4, 0xfc, 0xa8, 0x72, 0xfe, 0x15, 0x29, 0x57, 0xfa, 0xa5, 0x3c, 0xa9, 0xd6, 0xdb, 0x63, 0xbc, 0x05, 0x85, 0x1f, 0x0a, 0xc4, 0xf6, 0xf0, 0xa0, 0x04, 0x14, 0x25, 0xec, 0xfb, 0xe8, 0xc0, 0xdf, 0x49, 0xd5, 0xfd, 0x55, 0x2c, 0x1e, 0xe1, 0xb1, 0x00, 0xa0, 0xe2, 0xdc, 0x60, 0xbc, 0xf2, 0xeb, 0xc8, 0xfd, 0x42, 0x87, 0x06, 0x77, 0xca, 0x0a, 0x15, 0x1c, 0xf5, 0xe2, 0x15, 0xf4, 0x89, 0x38, 0x02, 0x71, 0x02, 0x05, 0x34, 0x8b, 0xf9, 0x99, 0x45, 0xfc, 0xe7, 0xaf, 0x02, 0x32, 0x40, 0xfb, 0x29, 0x4a, 0xff, 0x32, 0x9d, 0xfb, 0xbb, 0xe6, 0xf6, 0xab, 0xef, 0xfe, 0x10, 0x57, 0xff, 0xbe, 0x90, 0xfd, 0xb9, 0x54, 0xfe, 0x9a, 0xb3, 0x5d, 0xfb, 0xaf, 0x3d, 0x71, 0xa4, 0xd7, 0x7d, 0xc9, 0x04, 0xe4, 0x34, 0x05, 0xb8, 0x4f, 0xf1, 0x29, 0xbf, 0x19, 0x23, 0x94, 0xfc, 0xa6, 0x4d, 0xde, 0x39, 0x8e, 0xfa, 0xd6, 0xc1, 0x20, 0x36, 0x44, 0x06, 0x81, 0x54, 0xdd, 0x3c, 0xc5, 0xf0, 0xfe, 0x05, 0xf8, 0xee, 0x77, 0x04, 0x83, 0x14, 0x0e, 0x90, 0x0d, 0xf6, 0xef, 0xda, 0xf2, 0xb2, 0x94, 0x00, 0x3b, 0x7e, 0x04, 0x5a, 0x35, 0xf9, 0xeb, 0x7f, 0xfc, 0x3c, 0xf3, 0x02, 0x7d, 0xd2, 0xfa, 0x65, 0xb8, 0xff, 0xec, 0x37, 0xfb, 0xd1, 0x7f, 0xf6, 0xab, 0xa7, 0xff, 0xb8, 0x37, 0x00, 0x06, 0xf3, 0xfd, 0xd4, 0x1c, 0xfe, 0xec, 0xee, 0x5f, 0x0d, 0x14, 0x41, 0x82, 0xb8, 0xd6, 0x8f, 0xf2, 0x01, 0x45, 0xa1, 0x02, 0xf8, 0x5b, 0xf1, 0xb6, 0x45, 0x1c, 0xef, 0x4a, 0xfe, 0x08, 0x00, 0xde, 0x5a, 0xb3, 0xf5, 0xfd, 0xe3, 0x20, 0x42, 0xfb, 0x0c, 0x88, 0xce, 0xde, 0xd2, 0xf1, 0xed, 0xb7, 0x3b, 0xf3, 0x99, 0x33, 0x02, 0xf4, 0x40, 0x11, 0xb0, 0xfd, 0xf7, 0x9f, 0xa0, 0xf1, 0x3b, 0xd1, 0xfe, 0x95, 0x12, 0x04, 0x9f, 0x52, 0xf9, 0x7b, 0x96, 0xfc, 0x3f, 0xf0, 0x02, 0xc5, 0xd2, 0xf9, 0x91, 0x62, 0xff, 0x57, 0xe1, 0xfb, 0x33, 0xd5, 0xf6, 0x8d, 0xaa, 0xff, 0x0e, 0x83, 0x00, 0x4e, 0x4f, 0xfe, 0x38, 0x29, 0xfe, 0x00, 0x44, 0x63, 0x84, 0xd6, 0x41, 0xa3, 0xe3, 0xd7, 0xea, 0x26, 0x01, 0xae, 0xa0, 0xfe, 0x4a, 0x7d, 0xf2, 0x5d, 0xad, 0x1c, 0x8a, 0xe4, 0xff, 0x20, 0xc9, 0xde, 0x17, 0x5a, 0xf0, 0x02, 0x73, 0x21, 0x4c, 0x41, 0x12, 0x58, 0xd7, 0xe1, 0x13, 0xde, 0xeb, 0x53, 0xda, 0xed, 0x67, 0xa7, 0x00, 0xdb, 0x72, 0x13, 0x52, 0x43, 0xfb, 0xe4, 0xfc, 0xf0, 0xb1, 0xd9, 0xfc, 0xad, 0x51, 0x04, 0x14, 0xe2, 0xf8, 0x21, 0xf6, 0xfc, 0x48, 0x30, 0x02, 0x07, 0x89, 0xf8, 0x21, 0x0d, 0x00, 0x0b, 0xc2, 0xfc, 0x61, 0x1a, 0xf7, 0xc9, 0x44, 0xff, 0x70, 0xf6, 0x00, 0x7e, 0x78, 0xfe, 0x8d, 0x4f, 0xfe, 0xa9, 0x79, 0x64, 0x4f, 0x55, 0x43, 0x12, 0xce, 0xd9, 0x08, 0xd6, 0x00, 0xf6, 0x5d, 0xfc, 0x45, 0x42, 0xf2, 0xab, 0xfd, 0x1b, 0xce, 0x1d, 0x01, 0x1b, 0x18, 0xdf, 0x42, 0x07, 0xec, 0x3e, 0x7d, 0x20, 0x80, 0xe9, 0x15, 0x79, 0x44, 0xe6, 0xf9, 0x9e, 0xea, 0x70, 0x25, 0xe9, 0x10, 0x99, 0xff, 0xa9, 0x18, 0x14, 0x0e, 0xab, 0xfe, 0x3c, 0xd7, 0xf1, 0x91, 0x1e, 0xfa, 0x09, 0xb2, 0x04, 0xde, 0x0c, 0xf9, 0x1d, 0x2a, 0xfc, 0x3c, 0x56, 0x01, 0xd5, 0x7d, 0xf8, 0xd9, 0xb3, 0x00, 0x55, 0x90, 0xfc, 0xc9, 0xe6, 0xf7, 0x43, 0xc4, 0xfe, 0x96, 0x28, 0x00, 0x60, 0x58, 0xff, 0x02, 0x4e, 0xfe, 0x91, 0x11, 0x64, 0xa0, 0xe4, 0x44, 0xe8, 0xbf, 0xdc, 0x7a, 0x31, 0x01, 0x16, 0x64, 0xfa, 0x64, 0xc1, 0xf1, 0x99, 0x29, 0x1b, 0x3d, 0x22, 0x01, 0xad, 0x9a, 0xdf, 0xa9, 0x1e, 0xe8, 0x45, 0xde, 0x1d, 0x5e, 0x1f, 0x19, 0x8c, 0x9f, 0xeb, 0xe9, 0xe2, 0xea, 0xd6, 0x4b, 0xe4, 0x9f, 0x72, 0xfd, 0x1e, 0xb8, 0x14, 0xf7, 0x2c, 0x02, 0xe9, 0x88, 0xf3, 0x69, 0xe7, 0xf6, 0x48, 0xc1, 0x04, 0xfe, 0xb8, 0xf9, 0x6d, 0x9d, 0xfa, 0xe9, 0x4e, 0x01, 0x65, 0xed, 0xf8, 0x15, 0xe8, 0x00, 0x5d, 0xb0, 0xfc, 0x84, 0x21, 0xf8, 0x2e, 0xee, 0xfd, 0x6f, 0xa6, 0xff, 0xfe, 0x1a, 0x00, 0xb1, 0x75, 0xfd, 0x94, 0x95, 0x61, 0x5a, 0xb0, 0x47, 0xf2, 0xe6, 0xe1, 0xf9, 0xda, 0x02, 0x9a, 0x07, 0xf9, 0xcb, 0xdf, 0xef, 0x52, 0x9b, 0x1a, 0x1d, 0x99, 0x00, 0xc5, 0xd9, 0xdf, 0x8d, 0xa8, 0xe4, 0xac, 0xc2, 0x19, 0xe5, 0xea, 0x1b, 0xf4, 0x56, 0xf2, 0x1b, 0xc3, 0xee, 0x26, 0x26, 0xdf, 0x9c, 0xad, 0xf8, 0xa2, 0x40, 0x16, 0xd0, 0xab, 0x05, 0xf7, 0xbb, 0xf6, 0x81, 0x3a, 0xf4, 0x77, 0x3e, 0x03, 0xda, 0x59, 0xfb, 0x40, 0x92, 0xf9, 0xec, 0x8a, 0x01, 0xab, 0xc1, 0xf9, 0x34, 0xd0, 0x01, 0x5f, 0x58, 0xfc, 0xc6, 0x29, 0xf7, 0x61, 0x5e, 0xfe, 0xf1, 0xa3, 0xfe, 0x18, 0x2f, 0x00, 0x06, 0x47, 0xfd, 0x62, 0x22, 0x60, 0xb3, 0x2e, 0x46, 0xe4, 0x9f, 0xe7, 0x63, 0xd3, 0x05, 0xf2, 0xfa, 0xf6, 0x84, 0x9d, 0xf0, 0x60, 0x6f, 0x18, 0x95, 0xb9, 0xff, 0xa6, 0x47, 0xe0, 0xf4, 0x66, 0xe1, 0x9d, 0x39, 0x17, 0x5e, 0x41, 0x1b, 0xf7, 0x66, 0xf7, 0x70, 0x3a, 0xf4, 0x95, 0x28, 0xdc, 0x91, 0x8d, 0xf4, 0xd4, 0x57, 0x16, 0xcc, 0x99, 0x07, 0x7a, 0xfc, 0xf8, 0xdd, 0xcc, 0xf3, 0x04, 0x4e, 0x01, 0x04, 0x70, 0xfc, 0x1b, 0x3a, 0xfa, 0x04, 0xe1, 0x00, 0xce, 0xa8, 0xfa, 0xf7, 0xee, 0x01, 0x29, 0xf3, 0xfb, 0x55, 0x47, 0xf7, 0x02, 0xce, 0xfd, 0x9d, 0xa9, 0xfd, 0x86, 0x3e, 0x00, 0x34, 0x7e, 0xfd, 0xef, 0x7c, 0x5c, 0x34, 0x20, 0x46, 0xbe, 0x33, 0xef, 0xcd, 0x5a, 0x07, 0xb9, 0x4c, 0xf6, 0xc7, 0x28, 0xf1, 0x99, 0x65, 0x14, 0xe7, 0x32, 0x01, 0xb5, 0xce, 0xe1, 0xe8, 0xfe, 0xdb, 0x3e, 0xd0, 0x13, 0x50, 0x3d, 0x1a, 0x0a, 0xb4, 0xfb, 0xdb, 0xab, 0xfc, 0x4d, 0xcc, 0xda, 0x11, 0x2e, 0xed, 0x08, 0x5f, 0x16, 0xfa, 0x83, 0x09, 0x23, 0x77, 0xfa, 0x07, 0xfa, 0xf5, 0xde, 0x6c, 0xff, 0x77, 0xc2, 0xfc, 0xac, 0x6d, 0xfc, 0x9b, 0x9b, 0xff, 0xed, 0xcd, 0xf9, 0xfb, 0x46, 0x03, 0x89, 0x82, 0xfc, 0x42, 0xd3, 0xf5, 0xb7, 0xbc, 0xfd, 0xab, 0xf0, 0xfc, 0x7b, 0x40, 0xff, 0xea, 0x1b, 0xff, 0x3a, 0xd9, 0x58, 0x86, 0x75, 0x45, 0x1d, 0xa6, 0xf4, 0x69, 0xcd, 0x06, 0x5a, 0xae, 0xf7, 0xd0, 0x44, 0xf4, 0x02, 0x48, 0x0f, 0xc3, 0x16, 0x01, 0x84, 0xe7, 0xe3, 0x5f, 0x53, 0xd8, 0xa4, 0xf8, 0x10, 0xd2, 0xbe, 0x18, 0xda, 0xd8, 0xfc, 0x4a, 0x46, 0x03, 0x25, 0xf8, 0xdc, 0x07, 0x1d, 0xe6, 0x83, 0xfb, 0x13, 0x7a, 0x29, 0x0b, 0x38, 0x46, 0xfb, 0xee, 0xd1, 0xf8, 0x36, 0xf7, 0xfe, 0x2f, 0xea, 0xfb, 0x32, 0x64, 0xfd, 0xb0, 0x87, 0xff, 0x1b, 0x71, 0xf9, 0x10, 0xe4, 0x02, 0x97, 0x4d, 0xfc, 0xca, 0x0e, 0xf5, 0x66, 0x13, 0xfe, 0xda, 0x9b, 0xfc, 0xb6, 0xc8, 0xfe, 0xbe, 0xae, 0x00, 0x15, 0x4c, 0x55, 0xbb, 0xa7, 0x40, 0xde, 0x37, 0xfb, 0xb0, 0x49, 0x0b, 0x0b, 0xc4, 0xf6, 0x9b, 0xcc, 0xf5, 0x04, 0x93, 0x0b, 0x96, 0x44, 0x00, 0xa5, 0xbe, 0xe7, 0xbd, 0x38, 0xd5, 0x4e, 0x75, 0x0b, 0xe5, 0x57, 0x18, 0x33, 0x41, 0xfe, 0x37, 0xd4, 0x08, 0x76, 0x48, 0xe1, 0x3a, 0xfd, 0xdd, 0xb3, 0x5b, 0x0f, 0xec, 0xb9, 0x0d, 0x05, 0x95, 0xfc, 0xef, 0xe3, 0xfb, 0xd2, 0xf3, 0xfe, 0xb4, 0x93, 0xfb, 0x05, 0x83, 0xfe, 0x5b, 0xe6, 0xfe, 0xdf, 0xcd, 0xf8, 0x1b, 0x47, 0x02, 0x49, 0x75, 0xfc, 0x87, 0x05, 0xf4, 0xa9, 0xe6, 0xfd, 0x99, 0xe3, 0xfd, 0x53, 0x6e, 0xfe, 0x97, 0x6c, 0x01, 0x9e, 0x4b, 0x50, 0xeb, 0x54, 0x3e, 0x96, 0xb7, 0xfd, 0x61, 0x55, 0x10, 0xdf, 0x63, 0xf8, 0x91, 0xb9, 0xf2, 0xd6, 0x21, 0x0c, 0x62, 0x59, 0xff, 0x90, 0x28, 0xe9, 0xe4, 0x05, 0xd6, 0x72, 0xad, 0x04, 0xe4, 0xfa, 0x18, 0xc5, 0xe1, 0xfe, 0xe8, 0x20, 0x0a, 0xbc, 0xf9, 0xe7, 0xad, 0x8d, 0xd7, 0xae, 0xa8, 0x08, 0x2d, 0x10, 0x11, 0x8d, 0xaf, 0xfe, 0x8f, 0x5e, 0xfc, 0xa1, 0xe5, 0xfe, 0x00, 0x59, 0xfc, 0x31, 0xc1, 0xfe, 0xd3, 0x72, 0xff, 0x01, 0xe6, 0xf7, 0x54, 0xef, 0xfe, 0x2d, 0x17, 0xfe, 0xc8, 0x8e, 0xf5, 0x75, 0xd2, 0xfc, 0xa0, 0x10, 0xfe, 0xe9, 0x69, 0xfe, 0x24, 0x97, 0x02, 0x16, 0xb9, 0x4c, 0xbd, 0x32, 0x3e, 0x52, 0x07, 0xfd, 0x0a, 0x46, 0x10, 0x05, 0x18, 0xfe, 0xfc, 0x28, 0xf1, 0xc9, 0xb4, 0x0a, 0xb0, 0x7d, 0x00, 0xbd, 0xf0, 0xe9, 0x23, 0x3a, 0xd8, 0x1a, 0xcf, 0x00, 0x3c, 0x72, 0x1a, 0x2a, 0xd4, 0xfc, 0x50, 0x3a, 0x06, 0x05, 0xa1, 0xf2, 0x52, 0xf0, 0xd5, 0xc1, 0x2a, 0xff, 0x3e, 0x8b, 0x12, 0xc4, 0x00, 0x01, 0x27, 0x73, 0xfe, 0xf5, 0x5c, 0xff, 0xae, 0x63, 0xfb, 0xe7, 0x00, 0xff, 0x5b, 0xae, 0x00, 0xe2, 0xf8, 0xf6, 0x6b, 0x11, 0xfc, 0x0b, 0x6c, 0x00, 0xe5, 0xc5, 0xf6, 0xd5, 0xa9, 0xfb, 0xcc, 0x32, 0x00, 0x0d, 0x64, 0xfe, 0x64, 0x54, 0x01, 0x25, 0x63, 0x4a, 0x21, 0x5b, 0x3c, 0x4b, 0xff, 0xfa, 0x1c, 0xfd, 0x10, 0x4e, 0x1a, 0x03, 0x63, 0x83, 0xee, 0xae, 0x71, 0x06, 0x89, 0x44, 0x02, 0x49, 0x15, 0xef, 0xcf, 0xef, 0xdc, 0x6a, 0x4e, 0xfb, 0x70, 0x4c, 0x18, 0xf4, 0x4f, 0xfd, 0x3c, 0x9e, 0x00, 0x48, 0x07, 0xfb, 0xa0, 0xc8, 0xda, 0xf1, 0xd6, 0xf3, 0xf3, 0xab, 0x10, 0x2d, 0x54, 0x04, 0x68, 0xb6, 0xfe, 0x7c, 0x7e, 0x01, 0xec, 0xa7, 0xfc, 0x7b, 0x60, 0xfd, 0x87, 0x96, 0xfe, 0xf3, 0x6a, 0xf7, 0xac, 0x3c, 0xfc, 0x1c, 0x26, 0x01, 0x47, 0xa0, 0xf8, 0x07, 0x8e, 0xfb, 0x11, 0xc7, 0x00, 0x96, 0x14, 0xfe, 0xec, 0x63, 0x00, 0x51, 0x17, 0x47, 0x72, 0x1b, 0x3c, 0x89, 0x01, 0xf9, 0xe3, 0x5b, 0x0f, 0x07, 0x34, 0x07, 0x54, 0xc0, 0xf1, 0xb5, 0x46, 0x04, 0x22, 0xda, 0xfb, 0x3f, 0x08, 0xf5, 0x16, 0xe1, 0xe5, 0x3b, 0x62, 0xf4, 0x04, 0x7c, 0x18, 0xa8, 0x1e, 0xff, 0x3b, 0x20, 0xf8, 0x3f, 0xb5, 0x01, 0x9a, 0xdf, 0xe2, 0x7d, 0x15, 0xeb, 0x68, 0xcf, 0x0c, 0xc6, 0x50, 0x07, 0x31, 0x98, 0xfd, 0xf4, 0xf9, 0x01, 0x58, 0x70, 0x00, 0x4e, 0xe7, 0xfb, 0x5a, 0x5d, 0xfb, 0x9a, 0x3d, 0xf9, 0x69, 0x24, 0xfc, 0x0a, 0x32, 0x02, 0x91, 0x1a, 0xfc, 0x9c, 0x99, 0xf9, 0x13, 0x96, 0xff, 0xf8, 0x56, 0xff, 0x3f, 0xe9, 0xff, 0x6e, 0x9f, 0x42, 0x67, 0xca, 0x38, 0xd3, 0xb8, 0xf8, 0x0d, 0x47, 0x10, 0x7d, 0x05, 0x0b, 0x60, 0x0a, 0xf3, 0xd3, 0x71, 0x03, 0x55, 0xf5, 0xf8, 0x89, 0x7b, 0xf5, 0x38, 0x9f, 0xee, 0x16, 0xb3, 0xf2, 0x61, 0x30, 0x14, 0xf9, 0x8e, 0x03, 0x5e, 0xb5, 0xf3, 0x3e, 0x4b, 0x03, 0x8f, 0xd2, 0xec, 0xcd, 0x01, 0xe5, 0x71, 0xcf, 0x06, 0x47, 0x31, 0x0a, 0xfd, 0x05, 0xfc, 0xa1, 0xe5, 0x00, 0x4b, 0x38, 0x03, 0x15, 0xf4, 0xfc, 0x60, 0x99, 0xf9, 0xc8, 0x4c, 0xf9, 0x0e, 0x51, 0xfd, 0x77, 0x39, 0x03, 0x67, 0x79, 0xfe, 0xad, 0x29, 0xf8, 0x43, 0xdf, 0xfd, 0x8a, 0xdf, 0x00, 0xe6, 0xac, 0xff, 0x6a, 0xfa, 0x3e, 0x71, 0xb9, 0x33, 0x3d, 0x70, 0xf9, 0xcd, 0xf7, 0x12, 0xbe, 0x11, 0x0c, 0x14, 0xe7, 0xf2, 0x14, 0xcc, 0x01, 0xff, 0x9c, 0xfb, 0xf9, 0x85, 0xf7, 0xf1, 0x23, 0xed, 0xb9, 0xc0, 0xf3, 0xab, 0xf4, 0x13, 0x58, 0x5a, 0x04, 0x8a, 0x78, 0xf3, 0xce, 0x40, 0x02, 0x97, 0x5e, 0xf3, 0x1f, 0x9a, 0xe5, 0xcb, 0x9c, 0x00, 0xa5, 0x48, 0x0a, 0xc6, 0x70, 0xfc, 0x7e, 0x19, 0xff, 0x19, 0x7c, 0x02, 0x0c, 0xd6, 0xfd, 0xdb, 0xbc, 0xfb, 0x4b, 0xf1, 0xf9, 0xf3, 0x5e, 0xfc, 0x90, 0x5b, 0x03, 0x9b, 0xaf, 0xff, 0xc2, 0xb3, 0xf7, 0xf7, 0x85, 0xfd, 0x71, 0xce, 0x01, 0xbb, 0x44, 0xff, 0x26, 0xe5, 0x38, 0x88, 0xda, 0x2e, 0xba, 0x5f, 0xfb, 0x81, 0xc0, 0x14, 0x8b, 0x16, 0x0d, 0x1e, 0x65, 0xf2, 0x56, 0x5a, 0x01, 0x96, 0x1e, 0xff, 0x60, 0x50, 0xfa, 0xe6, 0x0d, 0xed, 0xfc, 0xf6, 0xef, 0x67, 0xb5, 0x12, 0x43, 0x58, 0x09, 0xfc, 0x0a, 0xf2, 0x0d, 0x03, 0x01, 0xa0, 0xa1, 0xfa, 0xa0, 0x38, 0xe6, 0xca, 0xd5, 0xfc, 0x89, 0xfb, 0x0a, 0x58, 0x5e, 0xfb, 0x5b, 0x1a, 0xfc, 0x3c, 0x8c, 0x01, 0x03, 0xe9, 0xfd, 0xe1, 0x5a, 0xfd, 0xc2, 0x65, 0xfd, 0x41, 0xb5, 0xfb, 0x6f, 0xf2, 0xff, 0x84, 0xa8, 0x00, 0xd0, 0xd8, 0xf9, 0x43, 0x3a, 0xfe, 0xaa, 0xf5, 0x01, 0x59, 0x7e, 0xfe, 0x66, 0x21, 0x32, 0xca, 0xe4, 0x29, 0x8f, 0xd4, 0xfe, 0xe8, 0x13, 0x17, 0x28, 0x2e, 0x0d, 0xbe, 0xe4, 0xf1, 0xe0, 0x28, 0x01, 0x84, 0xc0, 0x02, 0x24, 0x97, 0xfc, 0xff, 0xdb, 0xed, 0x28, 0xbb, 0xee, 0x20, 0xf2, 0x0c, 0xd2, 0x93, 0x0a, 0xa9, 0x48, 0xf7, 0xed, 0xf5, 0xff, 0xd4, 0x41, 0xfc, 0xe6, 0xa1, 0xe9, 0xac, 0x21, 0xfb, 0xcb, 0x1c, 0x0a, 0xd2, 0xcb, 0xfb, 0xa1, 0xf7, 0xfa, 0xd2, 0x4d, 0x00, 0xee, 0xb7, 0xfc, 0x0a, 0xa9, 0xfd, 0x5f, 0x8e, 0xff, 0xa4, 0x5a, 0xfc, 0x22, 0x39, 0xfe, 0x36, 0x53, 0x00, 0xd8, 0xaf, 0xfb, 0x0b, 0x07, 0xff, 0xe6, 0x51, 0x02, 0x39, 0xe0, 0xfe, 0x14, 0x21, 0x33, 0x46, 0x04, 0x26, 0xad, 0x22, 0xfd, 0xa3, 0x3c, 0x1e, 0xe6, 0x81, 0x09, 0x2d, 0x30, 0xe9, 0xcb, 0xd1, 0x01, 0xb6, 0x3b, 0x01, 0xa2, 0x11, 0xf6, 0x45, 0x0f, 0xe7, 0x1d, 0xed, 0xf6, 0x6a, 0x11, 0x1b, 0xa1, 0xb1, 0x05, 0xd4, 0xa0, 0xf7, 0x83, 0x47, 0x0d, 0x03, 0x20, 0x00, 0xe8, 0xc2, 0xea, 0x36, 0x70, 0xfe, 0x30, 0x9d, 0x08, 0x69, 0x49, 0xf8, 0x00, 0x70, 0xf8, 0x3f, 0x4a, 0xfb, 0x7d, 0xe7, 0xf8, 0x52, 0x54, 0xfe, 0xc4, 0xcb, 0xfc, 0x0d, 0xb8, 0xf9, 0xf4, 0xe3, 0xfe, 0x46, 0x2c, 0xfe, 0xa0, 0x81, 0xfb, 0x5f, 0xa9, 0x00, 0x9a, 0x7e, 0x01, 0x97, 0xa8, 0xfd, 0x73, 0xa8, 0x2a, 0x27, 0x41, 0x24, 0x32, 0x53, 0x02, 0x02, 0x7b, 0x1a, 0xef, 0x8f, 0x0c, 0xcb, 0x6c, 0xec, 0xa9, 0x1b, 0xfb, 0x4f, 0x4f, 0xff, 0x5b, 0x9f, 0xf7, 0x13, 0x74, 0xee, 0x8b, 0xbb, 0xf9, 0x04, 0xd5, 0x12, 0x87, 0x9a, 0x07, 0xc5, 0x2f, 0xfc, 0xd9, 0x58, 0x08, 0x15, 0x55, 0x00, 0x0d, 0x9b, 0xee, 0xa1, 0x4c, 0xf9, 0x26, 0x23, 0x04, 0xbb, 0x18, 0xfb, 0xc5, 0x9d, 0xfb, 0x76, 0x2e, 0xfe, 0xa3, 0x2e, 0xf9, 0x4d, 0xd6, 0xfe, 0x85, 0xd0, 0xff, 0x68, 0xee, 0xf8, 0x0f, 0xaa, 0xfe, 0x13, 0x2f, 0x00, 0x6d, 0xed, 0xf9, 0x34, 0xc8, 0xfd, 0xa2, 0xdd, 0x00, 0x60, 0xc3, 0xfe, 0xb3, 0x46, 0x24, 0xa1, 0x66, 0x20, 0x29, 0x09, 0x05, 0x7b, 0xb8, 0x18, 0x77, 0x13, 0x0c, 0x2a, 0xdd, 0xf0, 0xa3, 0xf1, 0xfc, 0xb7, 0xd2, 0xfe, 0x19, 0x8d, 0xf8, 0x53, 0x1f, 0xf3, 0x9a, 0x4e, 0xfa, 0x4a, 0x99, 0x0d, 0xa6, 0xec, 0x06, 0xd4, 0xcf, 0xfc, 0xd1, 0x00, 0x06, 0x2e, 0xcc, 0x00, 0x4b, 0x81, 0xf1, 0x63, 0x96, 0xf9, 0x6a, 0x89, 0x02, 0x61, 0xb7, 0xfb, 0x3c, 0x3c, 0xfd, 0x82, 0xfe, 0xfe, 0x9f, 0xf1, 0xfa, 0x54, 0xc9, 0xff, 0x2e, 0xa7, 0xff, 0x11, 0xf8, 0xf9, 0xf8, 0x00, 0xff, 0x5b, 0xd7, 0xff, 0x53, 0x65, 0xfa, 0x37, 0x4a, 0xfd, 0xf0, 0xb1, 0xff, 0xdf, 0x80, 0xfe, 0xd0, 0xfd, 0x1d, 0x96, 0xb0, 0x1c, 0x6b, 0xc5, 0x07, 0xff, 0x96, 0x16, 0xbb, 0x42, 0x0b, 0xdc, 0x5b, 0xf5, 0x91, 0x4c, 0xfe, 0x34, 0xa5, 0xfe, 0x6f, 0x9d, 0xfa, 0xda, 0x98, 0xf6, 0xcf, 0x6d, 0xfa, 0x62, 0xc8, 0x09, 0x27, 0x4f, 0x05, 0x11, 0x2a, 0xfd, 0x8e, 0x71, 0x04, 0xf8, 0xad, 0x00, 0x84, 0xa3, 0xf4, 0xad, 0x96, 0xf9, 0x8c, 0xf4, 0x00, 0x12, 0x01, 0xfd, 0xb2, 0x64, 0xfd, 0x7d, 0x70, 0xff, 0x3d, 0x04, 0xfe, 0x56, 0x41, 0x01, 0x83, 0xcf, 0xff, 0x46, 0xf9, 0xfa, 0x12, 0xb7, 0xfe, 0x0c, 0xf8, 0xfe, 0x1e, 0xfb, 0xfa, 0x64, 0x05, 0xfd, 0xcf, 0x51, 0xfe, 0xac, 0xa8, 0xfd, 0xdb, 0xe2, 0x18, 0x46, 0xcb, 0x19, 0xa8, 0x70, 0x09, 0x72, 0xe3, 0x13, 0x55, 0x18, 0x0b, 0xda, 0x2f, 0xf9, 0x87, 0x61, 0xfe, 0x8f, 0xa4, 0xff, 0xbf, 0x66, 0xfd, 0x68, 0x6e, 0xf8, 0xbc, 0xa6, 0xfa, 0x43, 0x05, 0x07, 0x77, 0xc5, 0x03, 0xc2, 0x6e, 0xfd, 0xc1, 0x03, 0x03, 0xca, 0x25, 0x01, 0x1a, 0x06, 0xf7, 0x26, 0x4e, 0xf9, 0x77, 0x7b, 0x00, 0x0e, 0xeb, 0xfd, 0xdf, 0xf3, 0xfd, 0x2a, 0x23, 0x01, 0x2a, 0x8f, 0x00, 0x53, 0xaa, 0x01, 0xe9, 0x7a, 0xff, 0x0f, 0xd6, 0xfb, 0x57, 0x3a, 0xfe, 0xe5, 0x2c, 0xfe, 0x9f, 0xa3, 0xfb, 0x68, 0x9f, 0xfc, 0x83, 0x95, 0xfd, 0x2c, 0xb4, 0xfd, 0xbb, 0xc3, 0x14, 0x5b, 0x9a, 0x17, 0xf1, 0xc7, 0x09, 0x16, 0xf4, 0x10, 0x71, 0x62, 0x0b, 0x2f, 0xa8, 0xfb, 0x49, 0xac, 0xfe, 0xdc, 0x76, 0x01, 0x32, 0xf2, 0xfe, 0x8f, 0xd5, 0xf9, 0xea, 0x3b, 0xfb, 0x0c, 0x45, 0x04, 0x6a, 0x58, 0x02, 0x80, 0xc5, 0xfd, 0x42, 0x2d, 0x02, 0x0e, 0x37, 0x01, 0xb8, 0xaa, 0xf8, 0xbc, 0xd9, 0xf9, 0xec, 0x2b, 0x00, 0xbb, 0x4f, 0xff, 0xfb, 0x00, 0x00, 0x75, 0x2c, 0x02, 0x8d, 0xa9, 0x00, 0xfb, 0xe1, 0x00, 0xa5, 0x99, 0xff, 0xe6, 0x81, 0xfc, 0x4c, 0xaf, 0xfd, 0xa9, 0xc5, 0xfd, 0xf7, 0xe1, 0xfb, 0xf2, 0x15, 0xfd, 0x40, 0xf7, 0xfd, 0x75, 0xae, 0xfd, 0x72, 0x41, 0x12, 0x71, 0x9e, 0x15, 0xc6, 0x37, 0x09, 0x84, 0x9e, 0x0e, 0xc4, 0x9a, 0x0a, 0x0a, 0x15, 0xfd, 0xb7, 0xe7, 0xff, 0x3a, 0x66, 0x02, 0x5a, 0x54, 0xff, 0x5b, 0x4e, 0xfb, 0xd3, 0x86, 0xfb, 0xf2, 0xb2, 0x01, 0xe7, 0x35, 0x01, 0x30, 0x51, 0xfe, 0xe8, 0xf5, 0x01, 0x0d, 0xf8, 0x00, 0x9a, 0xaa, 0xf9, 0xb9, 0x27, 0xfb, 0xf4, 0xd8, 0x00, 0xee, 0x8c, 0x00, 0x73, 0x46, 0x01, 0xe7, 0xe9, 0x01, 0xa8, 0xc7, 0xff, 0x9a, 0x2a, 0x00, 0xa9, 0x45, 0xff, 0xc8, 0x88, 0xfc, 0x9a, 0x76, 0xfd, 0xc7, 0x58, 0xfe, 0x99, 0x32, 0xfd, 0x29, 0x3a, 0xfd, 0x17, 0x81, 0xfd, 0xfd, 0xc3, 0xfd, 0x65, 0xcd, 0x10, 0x02, 0x1b, 0x13, 0x43, 0x87, 0x08, 0x78, 0x4d, 0x0d, 0x24, 0x2f, 0x09, 0xe2, 0xe0, 0xfe, 0xb6, 0xac, 0x01, 0x56, 0xa9, 0x02, 0x34, 0xe7, 0xff, 0xf8, 0x92, 0xfc, 0x75, 0xc1, 0xfb, 0xd6, 0x12, 0x00, 0x03, 0xdb, 0x00, 0x52, 0x5c, 0xff, 0x88, 0x11, 0x02, 0x49, 0x7c, 0x01, 0x45, 0x63, 0xfb, 0x60, 0x49, 0xfc, 0xc2, 0x6a, 0x01, 0x35, 0xbb, 0x01, 0x35, 0xab, 0x01, 0x15, 0xe6, 0x00, 0xcb, 0x49, 0xff, 0x02, 0xef, 0xff, 0x60, 0xde, 0xfe, 0x7f, 0x73, 0xfd, 0x2d, 0x05, 0xff, 0x06, 0x25, 0xff, 0x2f, 0x4d, 0xfd, 0x36, 0x1d, 0xfd, 0x58, 0xde, 0xfd, 0x13, 0x6b, 0xfe, 0x1d, 0x26, 0x0f, 0x1f, 0x12, 0x11, 0x2d, 0xf5, 0x07, 0xd8, 0x75, 0x0b, 0xc8, 0x33, 0x08, 0x71, 0xcf, 0x00, 0x96, 0x98, 0x02, 0x1e, 0x81, 0x02, 0xd2, 0x78, 0x00, 0xc8, 0x57, 0xfd, 0x10, 0xd0, 0xfb, 0x0b, 0x34, 0xff, 0xad, 0xa9, 0x00, 0xe3, 0x02, 0x01, 0x71, 0x69, 0x03, 0x3d, 0x8a, 0x01, 0x21, 0x01, 0xfc, 0x44, 0xe8, 0xfc, 0x89, 0xdc, 0x01, 0x35, 0x8b, 0x02, 0x2c, 0x32, 0x01, 0x1f, 0xa8, 0xff, 0x48, 0xeb, 0xfe, 0xa6, 0x66, 0x00, 0xc3, 0xf6, 0xff, 0x58, 0x6e, 0xfe, 0x23, 0x25, 0xff, 0x09, 0x29, 0xff, 0x8d, 0xac, 0xfd, 0xb7, 0x5a, 0xfd, 0x53, 0x69, 0xfe, 0xee, 0x57, 0xff, 0x19, 0xb6, 0x0c, 0xf1, 0xe4, 0x0f, 0xa5, 0xa8, 0x07, 0x37, 0xbc, 0x08, 0xd1, 0xd7, 0x07, 0x0e, 0xf2, 0x02, 0x25, 0x17, 0x03, 0xc7, 0x2d, 0x02, 0x87, 0x86, 0x00, 0x00, 0xe0, 0xfd, 0x10, 0x02, 0xfc, 0x19, 0xdf, 0xff, 0x23, 0xbe, 0x02, 0x9e, 0xed, 0x01, 0xbe, 0x88, 0x02, 0x96, 0x47, 0x01, 0x25, 0xed, 0xfc, 0x57, 0x78, 0xfd, 0x6f, 0xf4, 0x01, 0x0c, 0x87, 0x02, 0xc3, 0x46, 0x00, 0xb6, 0x78, 0xff, 0x62, 0xfd, 0xff, 0x07, 0xaa, 0x00, 0x29, 0x4c, 0x00, 0x5e, 0xfb, 0xfe, 0x58, 0xb8, 0xfe, 0x1e, 0x00, 0xff, 0x37, 0x7c, 0xfe, 0x63, 0x6f, 0xfe, 0xb9, 0x4c, 0xff, 0xd1, 0x2d, 0x00, 0xb8, 0x4c, 0x09, 0x69, 0x46, 0x0d, 0xda, 0x17, 0x08, 0x2b, 0x17, 0x08, 0xfb, 0xfd, 0x07, 0x57, 0xd9, 0x03, 0x20, 0x8e, 0x02, 0xbe, 0x22, 0x02, 0x08, 0x27, 0x01, 0xe8, 0x24, 0x00, 0x4f, 0xb0, 0xfe, 0x09, 0xb9, 0xff, 0xce, 0x8b, 0x02, 0x7e, 0xbe, 0x02, 0xb4, 0xb5, 0x01, 0xc1, 0xd8, 0x00, 0x59, 0x6e, 0xfe, 0xb6, 0xe4, 0xfd, 0x1e, 0x21, 0x01, 0xbb, 0x99, 0x02, 0xa8, 0xc3, 0x00, 0xe1, 0xc1, 0xff, 0x6d, 0x48, 0x00, 0xc4, 0xb5, 0x00, 0x4c, 0x27, 0x00, 0x2b, 0x1c, 0xff, 0x0d, 0x5f, 0xff, 0xb2, 0xdd, 0xff, 0xf2, 0x4a, 0xff, 0xbc, 0x6d, 0xff, 0x2d, 0xfe, 0xff, 0x7c, 0x8b, 0xff, 0xb4, 0x4f, 0x07, 0xa3, 0x1e, 0x0c, 0x5c, 0x63, 0x08, 0x48, 0xa1, 0x05, 0xbb, 0x9f, 0x05, 0xdb, 0x51, 0x05, 0x88, 0x5f, 0x04, 0xf2, 0xa3, 0x02, 0x7b, 0xb7, 0x01, 0x9f, 0x7b, 0x01, 0x1e, 0x0a, 0x01, 0xc6, 0xf3, 0x00, 0x0f, 0xdd, 0x01, 0xd0, 0xe6, 0x01, 0xd9, 0xa1, 0x00, 0xbc, 0x64, 0x00, 0x0f, 0x94, 0xff, 0xb5, 0xe5, 0xfe, 0x6f, 0x15, 0x01, 0x50, 0x4e, 0x02, 0xd6, 0xf8, 0x00, 0xa9, 0xf1, 0xff, 0x40, 0xf6, 0xff, 0x91, 0x75, 0x00, 0xce, 0x8d, 0x00, 0xce, 0x4c, 0x00, 0x2c, 0x17, 0x00, 0xa0, 0x2b, 0x00, 0x0e, 0x3f, 0x00, 0x8e, 0x59, 0xff, 0xe4, 0x93, 0xfe, 0x24, 0xa9, 0xfe, 0xc2, 0x2f, 0x06, 0xf6, 0x6d, 0x09, 0xc8, 0xcf, 0x06, 0x31, 0x51, 0x05, 0x11, 0xf2, 0x05, 0x40, 0x03, 0x06, 0x58, 0x1a, 0x05, 0xf0, 0x96, 0x04, 0x4d, 0x62, 0x03, 0xc5, 0xf4, 0x01, 0x2b, 0xa7, 0x01, 0x33, 0x17, 0x01, 0xb5, 0xd0, 0x00, 0xa3, 0x20, 0x01, 0xbc, 0xbb, 0x00, 0x5d, 0xa1, 0xff, 0xa1, 0xaa, 0xff, 0xa8, 0xe1, 0x00, 0x33, 0x65, 0x01, 0xa0, 0x2e, 0x01, 0x3a, 0x8a, 0x00, 0xe0, 0xed, 0xff, 0x88, 0x3d, 0x00, 0x7e, 0x39, 0x01, 0xea, 0x79, 0x01, 0x24, 0xd6, 0x00, 0xcf, 0x6e, 0x00, 0xcc, 0xcc, 0xff, 0x5f, 0xe1, 0xfe, 0x22, 0xa1, 0xfe, 0xd7, 0xc7, 0xfe, 0x46, 0xd0, 0xfe, 0x6d, 0xb6, 0x05, 0x52, 0x3c, 0x07, 0x5c, 0xb6, 0x05, 0x61, 0x6e, 0x07, 0xf5, 0xd1, 0x07, 0xab, 0xaa, 0x06, 0x27, 0x0d, 0x05, 0x45, 0x81, 0x03, 0x3a, 0x9a, 0x03, 0x7c, 0x00, 0x03, 0x19, 0x6a, 0x01, 0xf4, 0xb2, 0x00, 0x35, 0x5d, 0x00, 0xc4, 0x0a, 0x00, 0xf6, 0x55, 0x00, 0x18, 0x6a, 0x00, 0x73, 0x49, 0x00, 0x69, 0xcf, 0x00, 0x53, 0xe6, 0x00, 0x5b, 0x93, 0x00, 0xb6, 0x03, 0x01, 0x14, 0x61, 0x01, 0x70, 0x1d, 0x01, 0x37, 0xfb, 0x00, 0xbb, 0xf5, 0x00, 0x92, 0x86, 0x00, 0xe6, 0xae, 0xff, 0xb1, 0xff, 0xfe, 0xa4, 0x82, 0xfe, 0x5d, 0x7d, 0xfe, 0xa5, 0xfe, 0xfe, 0x41, 0x0e, 0xff, 0x88, 0x72, 0x07, 0x2a, 0xe4, 0x09, 0x0b, 0xa4, 0x06, 0x59, 0x56, 0x07, 0x94, 0xa4, 0x07, 0x4b, 0x77, 0x06, 0xec, 0x02, 0x05, 0xb1, 0x7c, 0x02, 0xb8, 0x3a, 0x01, 0xab, 0xe6, 0x00, 0xf9, 0x1b, 0x01, 0x4d, 0x3b, 0x01, 0x67, 0x87, 0x00, 0x4a, 0x13, 0x00, 0x31, 0x64, 0x00, 0x98, 0xe0, 0x00, 0xce, 0x52, 0x00, 0x05, 0xc2, 0xff, 0xb5, 0x97, 0x00, 0x9c, 0x9e, 0x01, 0x75, 0x32, 0x02, 0x99, 0x38, 0x02, 0xbb, 0x55, 0x01, 0xd5, 0x25, 0x00, 0x2a, 0x4f, 0xff, 0x05, 0x01, 0xff, 0x89, 0xe2, 0xfe, 0x4b, 0xc3, 0xfe, 0x02, 0xe9, 0xfe, 0x25, 0x05, 0xff, 0x36, 0xea, 0xfe, 0x4c, 0xe7, 0xfe, 0x7e, 0x6d, 0x06, 0xdc, 0xb5, 0x09, 0xbb, 0xea, 0x07, 0xe7, 0x0f, 0x08, 0xe1, 0xaa, 0x07, 0x3e, 0x5c, 0x06, 0x19, 0x60, 0x04, 0x2c, 0xb6, 0x01, 0xad, 0x01, 0x01, 0x4f, 0xdc, 0x00, 0x35, 0xdf, 0x00, 0x1b, 0x63, 0x01, 0x2a, 0x78, 0x01, 0xf9, 0x0a, 0x01, 0x44, 0x69, 0x00, 0xb0, 0xce, 0xff, 0xb0, 0x98, 0xff, 0xc5, 0x65, 0x00, 0x1a, 0x29, 0x01, 0x7c, 0x8b, 0x01, 0xfb, 0x5d, 0x02, 0x0e, 0x81, 0x02, 0x2b, 0x8e, 0x01, 0x18, 0x62, 0x00, 0xf1, 0x08, 0xff, 0x80, 0x3b, 0xfe, 0x2a, 0x81, 0xfe, 0x31, 0xc2, 0xfe, 0xd4, 0xf3, 0xfe, 0x0d, 0x36, 0xff, 0x25, 0xf8, 0xfe, 0x9b, 0xf8, 0xfe, 0x3f, 0xb5, 0x07, 0x4b, 0xfa, 0x0a, 0x41, 0xc1, 0x06, 0x78, 0x06, 0x07, 0xe1, 0xc0, 0x06, 0xa2, 0x75, 0x04, 0x10, 0x3b, 0x04, 0x7d, 0x76, 0x02, 0x59, 0x81, 0x00, 0x5a, 0x93, 0x00, 0x60, 0x0e, 0x02, 0x45, 0x0a, 0x02, 0x07, 0x4d, 0x01, 0xd3, 0x7d, 0x01, 0x09, 0xd4, 0xff, 0xa8, 0x01, 0xff, 0xc0, 0x32, 0x00, 0xe6, 0xc1, 0x00, 0x5c, 0xeb, 0x00, 0x96, 0x5d, 0x01, 0x67, 0x77, 0x02, 0xea, 0x83, 0x02, 0x1d, 0x74, 0x01, 0x1d, 0x8a, 0x00, 0x0b, 0x11, 0xff, 0xf8, 0x1a, 0xfe, 0x95, 0x86, 0xfe, 0xf5, 0xbf, 0xfe, 0xde, 0x69, 0xfe, 0x31, 0xee, 0xfe, 0xc4, 0x6f, 0xff, 0x87, 0xf9, 0xfe, 0xbb, 0x99, 0x07, 0xe2, 0x5b, 0x0a, 0x21, 0xe8, 0x05, 0xb6, 0xf8, 0x05, 0x22, 0xc4, 0x05, 0xb1, 0x7b, 0x04, 0xc1, 0x4f, 0x04, 0x92, 0x63, 0x02, 0x23, 0x1f, 0x01, 0x2d, 0x16, 0x01, 0xc2, 0xfa, 0x01, 0x19, 0xf9, 0x01, 0xfb, 0xc9, 0x01, 0x6e, 0xed, 0x01, 0x1f, 0x2d, 0x00, 0x9c, 0xf8, 0xff, 0xb8, 0xc5, 0x00, 0x97, 0x86, 0x00, 0xa9, 0x8d, 0x00, 0x31, 0xc2, 0x00, 0xfb, 0x63, 0x01, 0x35, 0xc7, 0x01, 0x5b, 0x9a, 0x02, 0xcf, 0x9b, 0x02, 0x0a, 0x1b, 0x00, 0xb3, 0xbf, 0xfe, 0x4f, 0x88, 0xfe, 0xa9, 0xfa, 0xfd, 0xfc, 0x94, 0xfe, 0x68, 0x2e, 0xff, 0x56, 0x0d, 0xff, 0xce, 0x14, 0xff, 0x1c, 0xa2, 0x08, 0xe1, 0x8a, 0x0b, 0xf6, 0x9d, 0x05, 0x0b, 0xa5, 0x04, 0xfa, 0x77, 0x04, 0x71, 0x93, 0x03, 0x1e, 0xf2, 0x03, 0x60, 0x54, 0x02, 0x68, 0x66, 0x00, 0x52, 0x12, 0x00, 0x7e, 0x35, 0x02, 0x5d, 0x25, 0x03, 0x61, 0xd8, 0x01, 0xfe, 0xff, 0x00, 0xca, 0xf6, 0x00, 0x73, 0xf9, 0x00, 0xf0, 0x2e, 0x00, 0x49, 0x44, 0x01, 0x39, 0xa7, 0x01, 0x02, 0x24, 0x00, 0x77, 0xee, 0x00, 0x09, 0x3d, 0x01, 0xdb, 0xef, 0x00, 0x04, 0xe1, 0x01, 0xa7, 0x70, 0x02, 0x20, 0xa0, 0x01, 0x90, 0x16, 0xff, 0x9c, 0xc1, 0xfd, 0xad, 0x25, 0xfe, 0x4d, 0x86, 0xfe, 0x17, 0x17, 0xff, 0xd3, 0x4d, 0xff, 0x23, 0x89, 0x0a, 0xc4, 0x0d, 0x0e, 0xf4, 0xc8, 0x05, 0x40, 0x75, 0x04, 0x51, 0x83, 0x03, 0x0a, 0x3b, 0x01, 0x4b, 0x4b, 0x03, 0x0a, 0x4d, 0x02, 0x5b, 0x6c, 0xff, 0xb4, 0x9a, 0xfe, 0xd8, 0x85, 0x01, 0xd9, 0x9b, 0x03, 0xcf, 0xdf, 0x01, 0x1c, 0x9a, 0x01, 0x1a, 0x33, 0x01, 0xab, 0xe8, 0xff, 0x57, 0xc1, 0x00, 0x7d, 0x01, 0x02, 0x91, 0x4d, 0x01, 0x4b, 0x1a, 0x01, 0xfd, 0xfb, 0x01, 0xe1, 0x92, 0x00, 0x62, 0x01, 0x00, 0xb6, 0x92, 0x01, 0x13, 0x8d, 0x01, 0xcc, 0x5c, 0x01, 0xd6, 0x88, 0x01, 0x7d, 0x0e, 0x00, 0xe8, 0x4c, 0xfe, 0x9c, 0x3b, 0xfe, 0x5f, 0xf5, 0xfe, 0xbc, 0x27, 0xff, 0x9a, 0x30, 0x0c, 0xeb, 0x3a, 0x0f, 0x5b, 0xbd, 0x05, 0x0c, 0x35, 0x05, 0xeb, 0x53, 0x04, 0x74, 0xcd, 0x01, 0x7d, 0x2d, 0x03, 0xc2, 0x86, 0x00, 0xe7, 0x81, 0xfc, 0x12, 0x10, 0xfc, 0xda, 0xf4, 0x01, 0x0a, 0xc0, 0x04, 0x4c, 0xe0, 0x00, 0xda, 0x01, 0x01, 0x12, 0xf8, 0x00, 0xca, 0xa6, 0xff, 0x76, 0x27, 0x01, 0xe4, 0x4d, 0x01, 0x6c, 0xdb, 0x00, 0xad, 0x40, 0x02, 0x3b, 0x86, 0x02, 0x0f, 0xb7, 0x00, 0xf5, 0x86, 0x00, 0x0f, 0xb8, 0x00, 0xc3, 0xf3, 0xff, 0x06, 0x12, 0x01, 0xf4, 0x67, 0x01, 0xb3, 0x4d, 0x00, 0x59, 0x90, 0x00, 0xe3, 0x60, 0x00, 0xf1, 0xf5, 0xfe, 0x73, 0x11, 0xfe, 0xc8, 0xd1, 0x0e, 0x2a, 0xf0, 0x11, 0x93, 0x67, 0x05, 0x6c, 0x44, 0x05, 0x73, 0xe0, 0x04, 0xf2, 0x9d, 0x01, 0xb2, 0x0e, 0x03, 0xa1, 0x44, 0xff, 0x10, 0x4f, 0xfa, 0x73, 0x6f, 0xfa, 0xfa, 0x41, 0x02, 0x3e, 0x93, 0x05, 0x43, 0x27, 0x00, 0x86, 0x74, 0xff, 0xa8, 0x49, 0xff, 0x7e, 0x0f, 0xff, 0x64, 0x63, 0x01, 0xd2, 0xda, 0x01, 0x29, 0x97, 0x01, 0x90, 0x58, 0x01, 0x51, 0xbe, 0x01, 0x7d, 0x25, 0x01, 0x61, 0x65, 0x00, 0x5b, 0x4c, 0x01, 0xbc, 0xe6, 0x00, 0xfd, 0x2a, 0x00, 0x39, 0xef, 0xff, 0x57, 0xcd, 0xff, 0xda, 0x85, 0x00, 0xee, 0x07, 0x01, 0xb0, 0xaf, 0x00, 0xde, 0xb3, 0xff, 0xf9, 0x18, 0x12, 0xef, 0x88, 0x15, 0xf6, 0x25, 0x05, 0xb7, 0xd9, 0x04, 0xc5, 0xa4, 0x04, 0xa8, 0xb9, 0x00, 0x84, 0x83, 0x03, 0x42, 0x03, 0xff, 0x62, 0xfb, 0xf7, 0xa3, 0xaf, 0xf8, 0xdf, 0x1b, 0x03, 0x0f, 0x54, 0x06, 0x2d, 0x1e, 0xff, 0x56, 0xb3, 0xfe, 0xc4, 0x58, 0xfe, 0xb6, 0xc3, 0xfd, 0x67, 0xcd, 0x00, 0x6f, 0xa6, 0x01, 0xcf, 0x5b, 0x01, 0x82, 0x9b, 0x01, 0xfc, 0x67, 0x02, 0x1f, 0x23, 0x00, 0xc5, 0x46, 0xff, 0xec, 0xef, 0x01, 0x66, 0xf1, 0x00, 0x83, 0x57, 0x00, 0xe2, 0xc2, 0x00, 0x4d, 0xfe, 0xfe, 0x54, 0x1f, 0xff, 0xa8, 0xc9, 0x00, 0x36, 0xff, 0x00, 0x13, 0x1e, 0x00, 0x62, 0x39, 0x16, 0x2c, 0xda, 0x18, 0x77, 0x07, 0x04, 0xa6, 0x95, 0x04, 0x07, 0xee, 0x04, 0xdf, 0x6e, 0x00, 0x02, 0x9e, 0x03, 0x92, 0xc4, 0xfd, 0x37, 0x85, 0xf5, 0x18, 0xee, 0xf7, 0x40, 0xbd, 0x04, 0xf5, 0x9a, 0x06, 0xe2, 0x18, 0xfe, 0x19, 0x35, 0xfe, 0xe2, 0x0c, 0xfd, 0xf6, 0x01, 0xfd, 0x26, 0xdc, 0x00, 0x4a, 0xf0, 0x00, 0x40, 0xc5, 0x00, 0xa0, 0x9e, 0x01, 0x8c, 0xdb, 0x01, 0xd0, 0x62, 0xff, 0x97, 0xac, 0xff, 0xb9, 0x79, 0x01, 0xce, 0xca, 0xff, 0x4d, 0xe9, 0x00, 0x4c, 0xc3, 0x00, 0x13, 0xab, 0xfe, 0x79, 0xc8, 0xff, 0xb9, 0xe6, 0xff, 0x37, 0x90, 0xff, 0x19, 0x69, 0x00, 0x2c, 0x77, 0x1a, 0xc2, 0x34, 0x1c, 0xc3, 0xcb, 0x02, 0xa2, 0x7a, 0x04, 0x2c, 0x8c, 0x05, 0xde, 0x47, 0x00, 0x0d, 0xac, 0x03, 0x01, 0xf6, 0xfb, 0xb0, 0x89, 0xf2, 0xc7, 0xc2, 0xf7, 0xe1, 0x26, 0x07, 0x20, 0xe7, 0x06, 0xae, 0x11, 0xfd, 0x93, 0xdd, 0xfd, 0x8f, 0xa9, 0xfb, 0x52, 0x29, 0xfc, 0xd0, 0x15, 0x01, 0xac, 0xd0, 0x00, 0xcb, 0xa0, 0x00, 0x1f, 0x28, 0x01, 0x55, 0x25, 0x01, 0x0c, 0xc4, 0xfe, 0xb2, 0x3d, 0xff, 0x86, 0x91, 0x01, 0x95, 0xca, 0xff, 0x3a, 0xf7, 0xff, 0xb3, 0xf7, 0xff, 0xf6, 0x8c, 0xfe, 0x5c, 0x30, 0xff, 0xb4, 0x32, 0x00, 0x86, 0xa0, 0x00, 0x9a, 0xcc, 0xff, 0x89, 0xf4, 0x1e, 0x69, 0xf8, 0x1f, 0x6c, 0xc7, 0x01, 0xad, 0x44, 0x04, 0x80, 0x6d, 0x05, 0x95, 0x66, 0xff, 0x65, 0xd8, 0x03, 0xe0, 0x36, 0xfa, 0x88, 0xe4, 0xef, 0x5d, 0x3d, 0xf8, 0x3b, 0xef, 0x08, 0x10, 0xa4, 0x06, 0xa8, 0x98, 0xfc, 0x27, 0xcf, 0xfd, 0x4c, 0x46, 0xfa, 0x7d, 0x5a, 0xfb, 0x05, 0x19, 0x01, 0xf1, 0x93, 0x00, 0x64, 0xdc, 0x00, 0x78, 0x26, 0x01, 0xdf, 0x55, 0x00, 0x23, 0xd3, 0xfd, 0xf1, 0xfd, 0xfe, 0x8d, 0x77, 0x01, 0x27, 0x7c, 0xff, 0x24, 0xdc, 0xff, 0x55, 0xf5, 0xfe, 0xc3, 0x59, 0xfd, 0x3c, 0xfc, 0xfe, 0xf8, 0x41, 0x00, 0xf3, 0x7c, 0x00, 0x00, 0x93, 0xff, 0x8b, 0x87, 0x22, 0x54, 0x1d, 0x24, 0x12, 0xc6, 0x01, 0xe8, 0xdc, 0x03, 0x7c, 0x54, 0x05, 0xe3, 0xed, 0xfd, 0x7f, 0x8e, 0x03, 0x55, 0x18, 0xf9, 0x76, 0xb4, 0xed, 0x50, 0xe6, 0xf8, 0xab, 0xc7, 0x09, 0x62, 0xca, 0x05, 0xd9, 0x83, 0xfc, 0xe8, 0xef, 0xfd, 0x44, 0xa6, 0xf9, 0x59, 0x9c, 0xfa, 0xf2, 0x58, 0x00, 0x92, 0x5c, 0x00, 0x70, 0x4f, 0x01, 0x5a, 0x0a, 0x01, 0xc0, 0xcc, 0xff, 0x96, 0x48, 0xfd, 0xa1, 0x82, 0xfe, 0x8f, 0x88, 0x01, 0xa4, 0xd5, 0xfe, 0x61, 0xf3, 0xfe, 0x71, 0x1a, 0xff, 0x45, 0x27, 0xfd, 0xec, 0x63, 0xfe, 0xbb, 0x88, 0xff, 0xd9, 0xcd, 0xff, 0xe1, 0xd5, 0xff, 0x3a, 0x6c, 0x24, 0x10, 0xab, 0x28, 0x44, 0xca, 0x03, 0xb2, 0x35, 0x03, 0xa6, 0xb9, 0x05, 0x34, 0xa0, 0xfc, 0x6f, 0x02, 0x02, 0xfd, 0xd3, 0xf8, 0x23, 0xd1, 0xec, 0x38, 0x53, 0xf9, 0x4d, 0xbc, 0x09, 0x2c, 0xb6, 0x04, 0x91, 0xae, 0xfc, 0x77, 0xf9, 0xfd, 0xc2, 0xbd, 0xf9, 0x30, 0xa4, 0xfa, 0x65, 0x39, 0xff, 0x61, 0x7d, 0xff, 0xa2, 0xe0, 0x01, 0x2c, 0x79, 0x01, 0xb5, 0x5c, 0xff, 0xb6, 0x52, 0xfd, 0xf9, 0xb2, 0xfd, 0x7f, 0xac, 0x00, 0x17, 0xc1, 0xff, 0xcd, 0xb1, 0xfe, 0xd9, 0x38, 0xfe, 0x81, 0x2c, 0xfd, 0xbf, 0xb8, 0xfd, 0xdc, 0x86, 0xff, 0xde, 0x20, 0x00, 0xfc, 0xd9, 0xfe, 0x53, 0xd8, 0x23, 0xed, 0x86, 0x2c, 0x3d, 0xa7, 0x08, 0x4c, 0xce, 0x02, 0xbe, 0xa9, 0x05, 0xea, 0x4d, 0xfc, 0x43, 0x8f, 0xff, 0xea, 0x3c, 0xf8, 0xf2, 0x14, 0xed, 0x48, 0x2f, 0xf9, 0x14, 0x7e, 0x08, 0xa6, 0xde, 0x03, 0x3a, 0x0b, 0xfd, 0x99, 0x70, 0xfd, 0x1f, 0xf9, 0xf9, 0x02, 0xfc, 0xfa, 0xaa, 0x10, 0xfe, 0x5d, 0xb7, 0xfe, 0x81, 0xd5, 0x01, 0x7f, 0xc5, 0x01, 0x44, 0x55, 0xff, 0x67, 0xa2, 0xfc, 0xc3, 0x79, 0xfd, 0xae, 0xb3, 0x00, 0x4e, 0xc2, 0xff, 0x0a, 0xa1, 0xfe, 0xf0, 0x76, 0xfd, 0x96, 0xf4, 0xfc, 0xa5, 0xc6, 0xfd, 0x6f, 0xc1, 0xfe, 0x7f, 0xc4, 0xff, 0xc8, 0x8b, 0xfe, 0xbd, 0x95, 0x22, 0x95, 0x4d, 0x2e, 0x28, 0x86, 0x0e, 0x15, 0xc7, 0x04, 0x3b, 0x26, 0x05, 0x4f, 0x61, 0xfc, 0xee, 0xfe, 0xfd, 0x05, 0x66, 0xf7, 0x6e, 0x65, 0xed, 0x5b, 0xbe, 0xf8, 0xa4, 0xb3, 0x06, 0x9a, 0x10, 0x03, 0x45, 0x05, 0xfe, 0x92, 0xf8, 0xfc, 0xf3, 0xb0, 0xf9, 0x30, 0xc8, 0xfb, 0x2e, 0x22, 0xfd, 0x1a, 0xa6, 0xfd, 0xf0, 0x28, 0x02, 0xb0, 0x11, 0x01, 0xad, 0x51, 0xff, 0x94, 0x77, 0xfe, 0xef, 0xd0, 0xfc, 0xb2, 0x65, 0xff, 0x91, 0xec, 0xff, 0x73, 0x74, 0xfe, 0x01, 0xf3, 0xfd, 0xe3, 0x1f, 0xfd, 0x44, 0xed, 0xfc, 0xc4, 0xc8, 0xfd, 0x7a, 0x0b, 0xff, 0x4a, 0xe4, 0xfe, 0x9e, 0x06, 0x23, 0xe1, 0x0e, 0x2e, 0xf2, 0x8f, 0x11, 0x43, 0x30, 0x09, 0x1f, 0x52, 0x05, 0xba, 0xc6, 0xfb, 0xd2, 0xfa, 0xfd, 0x90, 0xf0, 0xf6, 0x25, 0xdf, 0xed, 0x73, 0xa6, 0xf8, 0x63, 0xde, 0x03, 0x89, 0x4e, 0x01, 0xff, 0x9f, 0xff, 0x97, 0x06, 0xfd, 0xe6, 0xf9, 0xf8, 0xcb, 0x8e, 0xfc, 0x88, 0xc1, 0xfc, 0x9c, 0x2a, 0xfc, 0x40, 0xc9, 0x01, 0x9e, 0x2d, 0x02, 0xf0, 0x2c, 0xff, 0x72, 0x29, 0xfe, 0x53, 0xba, 0xfd, 0x9f, 0x4a, 0xff, 0x34, 0x06, 0x00, 0xbc, 0x37, 0xfe, 0x5a, 0x24, 0xfd, 0x07, 0x20, 0xfd, 0x2a, 0x47, 0xfc, 0x28, 0x91, 0xfd, 0xc0, 0xdc, 0xff, 0x94, 0x3e, 0xff, 0x97, 0xb9, 0x24, 0x99, 0x42, 0x2d, 0xb4, 0x69, 0x11, 0xab, 0xf7, 0x0d, 0x39, 0x62, 0x07, 0xd0, 0x5a, 0xfa, 0xad, 0x9c, 0xfd, 0x76, 0xc6, 0xf6, 0x26, 0xbb, 0xee, 0xf7, 0x92, 0xf9, 0x9e, 0x40, 0x00, 0x80, 0x21, 0xfd, 0xc9, 0xd5, 0x00, 0x9a, 0xe8, 0xfd, 0x24, 0xd0, 0xf8, 0x9e, 0x09, 0xfe, 0x75, 0x05, 0xfb, 0x91, 0xbf, 0xfa, 0x60, 0x35, 0x03, 0x12, 0xa9, 0x01, 0x2a, 0xbe, 0xfe, 0x59, 0x11, 0xff, 0x3f, 0xc1, 0xfd, 0x0d, 0xc9, 0xfe, 0x14, 0x27, 0x00, 0x96, 0x3e, 0xfe, 0xeb, 0x4a, 0xfc, 0x39, 0x2f, 0xfd, 0xdc, 0xbb, 0xfc, 0x9d, 0x0c, 0xfd, 0x1f, 0xf6, 0xfe, 0xc8, 0x9a, 0xfe, 0xc6, 0xc4, 0x27, 0x12, 0x86, 0x2c, 0x5e, 0x2a, 0x0f, 0xce, 0xaf, 0x11, 0x7a, 0x16, 0x0a, 0x5b, 0xa7, 0xf9, 0xbd, 0x69, 0xfd, 0x81, 0xf2, 0xf6, 0xe6, 0x26, 0xf0, 0xba, 0xd7, 0xfb, 0x91, 0x63, 0xfd, 0xdb, 0x93, 0xf6, 0x4d, 0xd3, 0x00, 0xb9, 0xfd, 0xff, 0xf6, 0x70, 0xf7, 0xe6, 0x90, 0xff, 0xcb, 0x6f, 0xfc, 0x39, 0xc5, 0xf8, 0xdc, 0xe7, 0x02, 0x9f, 0x6a, 0x02, 0xb7, 0x89, 0xfe, 0x24, 0x82, 0xff, 0xc4, 0xe1, 0xfd, 0xcd, 0xeb, 0xfd, 0xc5, 0x42, 0x00, 0x68, 0x8a, 0xfe, 0xd6, 0xf1, 0xfb, 0x2e, 0xb6, 0xfd, 0x06, 0x03, 0xfd, 0x61, 0x1c, 0xfc, 0x3a, 0x9a, 0xfe, 0x2f, 0xd3, 0xfe, 0xe8, 0xc8, 0x2c, 0x8e, 0xc8, 0x2b, 0xa3, 0xc4, 0x0a, 0x8f, 0x04, 0x15, 0x76, 0xa9, 0x0b, 0x41, 0x88, 0xf8, 0x0e, 0x5d, 0xfe, 0xae, 0xc7, 0xf6, 0x4c, 0xfe, 0xf1, 0xe9, 0x8f, 0xff, 0xea, 0x9e, 0xfa, 0x94, 0x1b, 0xef, 0x6e, 0x21, 0x00, 0x9a, 0x5f, 0x01, 0xf9, 0xfa, 0xf5, 0x1a, 0x99, 0x01, 0xdb, 0x60, 0xfd, 0x81, 0xaf, 0xf7, 0x29, 0xf4, 0x03, 0x32, 0x30, 0x02, 0x42, 0x1e, 0xfd, 0x8f, 0xb5, 0xff, 0x20, 0x08, 0xff, 0x90, 0xef, 0xfd, 0x9a, 0xf6, 0xff, 0xb3, 0x88, 0xfe, 0x9b, 0x32, 0xfb, 0x49, 0xa9, 0xfd, 0xf0, 0xd1, 0xfd, 0x9f, 0x62, 0xfc, 0x67, 0xdd, 0xfd, 0x73, 0xcd, 0xfd, 0x04, 0x0d, 0x32, 0xfe, 0x89, 0x2b, 0x02, 0x07, 0x05, 0x38, 0x49, 0x18, 0x46, 0x7b, 0x0d, 0x7b, 0xec, 0xf5, 0x19, 0x3b, 0x00, 0xb5, 0xda, 0xf7, 0x30, 0xac, 0xf3, 0x9e, 0x43, 0x04, 0xf5, 0x02, 0xfa, 0x67, 0x91, 0xe6, 0xce, 0xaa, 0xfc, 0x8d, 0x10, 0x05, 0xc9, 0xf1, 0xf4, 0xd8, 0x2d, 0x01, 0x8f, 0x38, 0x00, 0x2d, 0x2b, 0xf7, 0xb6, 0x66, 0x03, 0xeb, 0x5c, 0x02, 0xef, 0x42, 0xfc, 0x82, 0xea, 0xff, 0x58, 0x72, 0x00, 0x4b, 0x3a, 0xfe, 0xb4, 0x3a, 0xff, 0x42, 0x8a, 0xfe, 0xff, 0x37, 0xfb, 0x9b, 0xa4, 0xfd, 0xaa, 0xe6, 0xfd, 0x1a, 0xd0, 0xfb, 0xf3, 0x46, 0xfd, 0x98, 0xee, 0xfd, 0x72, 0xe1, 0x37, 0x04, 0xbd, 0x2c, 0xf3, 0x7b, 0xfd, 0xf1, 0x42, 0x1a, 0x06, 0x9e, 0x10, 0x7d, 0x23, 0xf1, 0x77, 0x08, 0x01, 0xf3, 0x7b, 0xf9, 0x87, 0x91, 0xf4, 0xba, 0xe0, 0x0a, 0xb4, 0x1a, 0xfb, 0x38, 0x4e, 0xdd, 0x9a, 0x36, 0xf7, 0x53, 0x40, 0x08, 0xce, 0x72, 0xf6, 0x39, 0x54, 0x00, 0x19, 0x08, 0x01, 0x62, 0x22, 0xf7, 0x8b, 0xe9, 0x02, 0x84, 0xb4, 0x02, 0x9c, 0xeb, 0xfb, 0x67, 0x0f, 0xff, 0xe0, 0x11, 0x01, 0x39, 0x3a, 0xff, 0xeb, 0x2d, 0xff, 0xe2, 0xaf, 0xfe, 0x02, 0xcc, 0xfa, 0xed, 0x48, 0xfc, 0xef, 0xaa, 0xfd, 0xde, 0x90, 0xfc, 0x40, 0x3b, 0xfd, 0xfd, 0x42, 0xfd, 0x16, 0xbd, 0x3d, 0xfd, 0xcc, 0x30, 0x88, 0x99, 0xf5, 0xae, 0xc8, 0x17, 0xab, 0xd1, 0x14, 0x27, 0x4b, 0xee, 0xbb, 0x5d, 0x01, 0xef, 0x6f, 0xfb, 0xad, 0x8c, 0xf4, 0xce, 0x1d, 0x11, 0x20, 0xfa, 0xfe, 0x4b, 0x23, 0xd7, 0xa2, 0x05, 0xf0, 0x0a, 0x88, 0x09, 0xec, 0xa6, 0xf9, 0x6e, 0x9b, 0xff, 0x86, 0x0f, 0x02, 0xfa, 0xdc, 0xf7, 0x91, 0xc3, 0x01, 0xf3, 0xb5, 0x02, 0xe6, 0xe4, 0xfb, 0x05, 0x13, 0xfe, 0x0c, 0x0f, 0x01, 0x88, 0x59, 0x01, 0x38, 0xcb, 0xff, 0xf1, 0x75, 0xfd, 0x09, 0x71, 0xfa, 0x1e, 0x04, 0xfc, 0xf2, 0xff, 0xfd, 0x59, 0x45, 0xfd, 0x7e, 0xee, 0xfb, 0xc7, 0xa2, 0xfb, 0x23, 0x25, 0x46, 0x03, 0x2b, 0x36, 0x94, 0xe4, 0xec, 0xef, 0x9b, 0x10, 0xa7, 0x11, 0x16, 0x92, 0x05, 0xee, 0x1c, 0x1a, 0x03, 0xe3, 0x93, 0xfd, 0xab, 0xf3, 0xf1, 0xf4, 0x1d, 0x14, 0xdd, 0x82, 0x04, 0x41, 0xbd, 0xd4, 0x16, 0x7a, 0xe9, 0x18, 0xab, 0x07, 0x32, 0xec, 0xfc, 0x28, 0xa6, 0x00, 0x63, 0xb3, 0x02, 0xf2, 0x79, 0xf8, 0xaa, 0xc0, 0xff, 0x42, 0x4d, 0x02, 0x97, 0xd1, 0xfb, 0xf5, 0x19, 0xfd, 0x97, 0x46, 0x01, 0x1f, 0x4f, 0x02, 0xe1, 0xc8, 0xff, 0x1f, 0x60, 0xfc, 0x23, 0x8d, 0xfa, 0x3b, 0xef, 0xfb, 0xdc, 0xd8, 0xfc, 0xb4, 0x14, 0xfd, 0xe6, 0x04, 0xfc, 0xd5, 0xa0, 0xfb, 0xd4, 0x2a, 0x4e, 0x52, 0x2d, 0x3a, 0xe1, 0xdf, 0xe5, 0x70, 0x1f, 0x0b, 0x99, 0xd9, 0x15, 0x17, 0xcb, 0xed, 0x32, 0x07, 0x05, 0xdc, 0x17, 0xff, 0xbd, 0x4f, 0xee, 0xf0, 0x00, 0x18, 0xb3, 0x3d, 0x0c, 0x52, 0xc6, 0xd1, 0xc9, 0x3c, 0xe4, 0x8c, 0xf5, 0x05, 0xe2, 0xe0, 0xfe, 0x16, 0x2b, 0x03, 0xfc, 0x7e, 0x02, 0x19, 0xc7, 0xf8, 0xd4, 0x3d, 0xfe, 0xf1, 0x17, 0x01, 0x9d, 0x8e, 0xfc, 0x10, 0xac, 0xfc, 0x45, 0xf2, 0x00, 0xa8, 0x0b, 0x02, 0x9d, 0x0b, 0x00, 0x34, 0x69, 0xfc, 0x95, 0xc1, 0xf9, 0x63, 0x2a, 0xfb, 0x6b, 0xed, 0xfb, 0x56, 0xee, 0xfd, 0x96, 0x2e, 0xfd, 0xc7, 0x7e, 0xfb, 0x1f, 0x98, 0x56, 0x86, 0x43, 0x40, 0x0a, 0x73, 0xde, 0x2c, 0x14, 0x02, 0x0f, 0x41, 0x11, 0x2c, 0x47, 0xef, 0x64, 0xfc, 0x0b, 0xd8, 0xe2, 0xfe, 0x3e, 0x38, 0xe8, 0xf9, 0xdb, 0x19, 0xd3, 0x92, 0x11, 0xb1, 0xe4, 0xd1, 0x32, 0xb8, 0xe2, 0x25, 0xe0, 0x03, 0x37, 0xb3, 0xfd, 0xf5, 0x52, 0x04, 0xcd, 0x7e, 0x03, 0x61, 0xcb, 0xf8, 0x74, 0x8a, 0xfc, 0x84, 0x24, 0x00, 0x65, 0xc1, 0xfc, 0xad, 0x9d, 0xfb, 0x49, 0x2e, 0x00, 0x37, 0x1a, 0x02, 0xbc, 0xd5, 0xff, 0xd8, 0x6b, 0xfb, 0x30, 0xa2, 0xf8, 0x6e, 0x73, 0xfa, 0x4b, 0x9f, 0xfb, 0x1a, 0xe9, 0xfe, 0x1f, 0x28, 0xfe, 0x91, 0x2a, 0xfb, 0x89, 0x0c, 0x5f, 0x87, 0x0e, 0x45, 0x4d, 0xc0, 0xd8, 0xe0, 0x4b, 0xfc, 0x6c, 0xa3, 0x0b, 0xc5, 0xd0, 0xf1, 0x2a, 0x4b, 0x13, 0x2e, 0xfb, 0xfb, 0x3e, 0x66, 0xe5, 0x40, 0x64, 0x1c, 0x6b, 0x81, 0x15, 0xe1, 0x04, 0xd6, 0x92, 0x56, 0xe2, 0xfd, 0xf6, 0x00, 0xa1, 0x80, 0xfb, 0x72, 0x4f, 0x05, 0x29, 0xca, 0x06, 0xb6, 0x40, 0xf9, 0x12, 0x8d, 0xfa, 0x1f, 0x21, 0xff, 0x54, 0x84, 0xfd, 0xec, 0x54, 0xfb, 0x72, 0x96, 0xff, 0x25, 0x30, 0x02, 0x3b, 0x06, 0xff, 0x69, 0x81, 0xfb, 0xcf, 0x90, 0xf8, 0x85, 0x95, 0xf9, 0x96, 0xbe, 0xfb, 0xe9, 0xcd, 0xff, 0x34, 0x12, 0xff, 0xff, 0x4c, 0xfb, 0xb4, 0x1a, 0x66, 0xb5, 0xdd, 0x48, 0xf9, 0x4b, 0xd4, 0x26, 0xb8, 0xf7, 0xb0, 0x1e, 0x06, 0x36, 0x8b, 0xf3, 0x82, 0x4d, 0x17, 0x58, 0xf8, 0xf8, 0x2e, 0x90, 0xe4, 0x88, 0xb9, 0x1c, 0xd9, 0xb8, 0x19, 0xfc, 0xda, 0xda, 0xfe, 0xaa, 0xe0, 0x6d, 0xc2, 0xfe, 0x88, 0x4e, 0xf8, 0x6a, 0x21, 0x06, 0xbe, 0x77, 0x0a, 0x7a, 0xf8, 0xf7, 0x96, 0xa5, 0xf8, 0xea, 0xea, 0xfe, 0xea, 0x24, 0xfe, 0x90, 0x83, 0xfa, 0x73, 0x6f, 0xfe, 0x52, 0xc2, 0x01, 0x16, 0x45, 0xfe, 0xf9, 0x86, 0xfc, 0x60, 0x3c, 0xf8, 0xe4, 0xe9, 0xf7, 0x5a, 0xd8, 0xfb, 0xaa, 0x75, 0x00, 0x76, 0xcb, 0xff, 0xf0, 0xd3, 0xfb, 0xd2, 0x00, 0x6c, 0x62, 0xf3, 0x4b, 0x18, 0x80, 0xd1, 0xc2, 0x9d, 0xf4, 0x2c, 0x75, 0x01, 0xef, 0x47, 0xf4, 0xdf, 0xba, 0x18, 0x32, 0xa5, 0xf7, 0x8b, 0x07, 0xe5, 0x8b, 0x7f, 0x1a, 0x05, 0x37, 0x1e, 0xa7, 0xd7, 0xe0, 0x0c, 0x02, 0xdf, 0x73, 0x5e, 0xfd, 0xfa, 0xd3, 0xf4, 0x65, 0x0d, 0x06, 0x6c, 0xe5, 0x0d, 0x97, 0xdf, 0xf6, 0xe6, 0x69, 0xf7, 0x01, 0x7a, 0xff, 0x0f, 0x66, 0xfe, 0x60, 0xcb, 0xf8, 0x5a, 0xb6, 0xfd, 0x16, 0x05, 0x02, 0x1a, 0xbc, 0xfd, 0x5d, 0x7e, 0xfd, 0xcf, 0xba, 0xf7, 0xa2, 0x75, 0xf6, 0x7f, 0x15, 0xfc, 0x42, 0x00, 0x01, 0xab, 0x8c, 0x00, 0x46, 0x74, 0xfc, 0xe6, 0xab, 0x6e, 0xac, 0x41, 0x50, 0xa7, 0xdc, 0xd0, 0xae, 0xce, 0xf1, 0xe9, 0x53, 0xfe, 0xc1, 0x21, 0xf3, 0x5d, 0x4b, 0x18, 0xa0, 0xc9, 0xf7, 0x08, 0x07, 0xe5, 0x66, 0xe5, 0x15, 0xd6, 0xf1, 0x22, 0xe9, 0xce, 0xe8, 0x34, 0xed, 0xdc, 0x76, 0xac, 0xfb, 0xa5, 0x8b, 0xf1, 0x0c, 0x42, 0x04, 0xf7, 0x10, 0x11, 0x2b, 0xf1, 0xf6, 0xd1, 0x69, 0xf6, 0x90, 0xd3, 0xff, 0x0d, 0x30, 0xfe, 0x8f, 0xdf, 0xf6, 0xcd, 0x60, 0xfd, 0x1c, 0xa5, 0x02, 0xf7, 0x94, 0xfc, 0x78, 0x01, 0xfe, 0xd2, 0x0e, 0xf8, 0xc1, 0x55, 0xf5, 0xde, 0x02, 0xfc, 0x03, 0x5b, 0x01, 0x9e, 0xfb, 0x00, 0x2d, 0x7e, 0xfc, 0x9e, 0x07, 0x72, 0xdf, 0x4d, 0x51, 0x97, 0xcc, 0xd1, 0x55, 0xdc, 0xf1, 0xce, 0x98, 0xfa, 0x99, 0x4a, 0xf2, 0x47, 0xf6, 0x16, 0x02, 0x3e, 0xf7, 0xc1, 0x8f, 0xe4, 0x2e, 0x26, 0x12, 0x79, 0x32, 0x27, 0x12, 0x89, 0xef, 0x95, 0x36, 0xdd, 0x96, 0x43, 0xf9, 0xb7, 0x33, 0xee, 0x48, 0x66, 0x03, 0x22, 0x72, 0x12, 0x44, 0x32, 0xf8, 0x9e, 0x1b, 0xf6, 0xd7, 0x97, 0xff, 0x09, 0x34, 0xfe, 0xbd, 0x5e, 0xf5, 0x50, 0x9c, 0xfd, 0x81, 0x90, 0x02, 0x62, 0x7d, 0xfb, 0x11, 0xac, 0xfe, 0xbf, 0xb2, 0xf8, 0xca, 0x2b, 0xf5, 0x76, 0xe2, 0xfb, 0x35, 0xaa, 0x01, 0x02, 0x77, 0x00, 0x94, 0x1a, 0xfc, 0x8e, 0x91, 0x72, 0xe0, 0xce, 0x52, 0x2e, 0xda, 0xd4, 0x9c, 0x35, 0xf2, 0x06, 0x2e, 0xf7, 0x4a, 0xf8, 0xef, 0x39, 0x24, 0x16, 0x99, 0xf1, 0xf6, 0x5e, 0xc2, 0xe1, 0x58, 0xf6, 0x0e, 0xb3, 0x7c, 0x2a, 0x12, 0x53, 0xf5, 0x15, 0x21, 0xdf, 0xa9, 0xc8, 0xf6, 0x3e, 0x47, 0xeb, 0xa3, 0xb3, 0x01, 0x58, 0x4e, 0x12, 0xf3, 0xcf, 0xfa, 0x04, 0xe1, 0xf5, 0x22, 0xfa, 0xfd, 0x00, 0x0c, 0xff, 0x75, 0xd7, 0xf4, 0xb2, 0xa5, 0xfc, 0xc8, 0xdf, 0x01, 0x46, 0x0b, 0xfb, 0x25, 0x5c, 0xff, 0x12, 0x7a, 0xf9, 0x90, 0xa9, 0xf5, 0x2b, 0x5c, 0xfb, 0xd3, 0xdf, 0x00, 0xb2, 0xe7, 0xff, 0x3f, 0x8d, 0xfb, 0x0b, 0x9b, 0x70, 0xd8, 0x27, 0x55, 0xe0, 0x31, 0xda, 0x18, 0xb5, 0xf3, 0xf5, 0xd0, 0xf3, 0x56, 0x01, 0xec, 0xbf, 0x70, 0x17, 0x58, 0x2a, 0xf7, 0x34, 0x08, 0xdd, 0xae, 0x72, 0x0c, 0x9d, 0x0a, 0x2c, 0x36, 0xbe, 0xfa, 0x81, 0x87, 0xe3, 0x72, 0x8e, 0xf5, 0xb7, 0x9f, 0xe8, 0xe3, 0xa9, 0xfe, 0xee, 0x49, 0x11, 0x33, 0x46, 0xfe, 0x26, 0x93, 0xf6, 0xf4, 0xb1, 0xfb, 0x40, 0xcf, 0xff, 0xe8, 0x5a, 0xf5, 0x06, 0x2d, 0xfb, 0x70, 0x96, 0x01, 0xf5, 0x2e, 0xfb, 0xb4, 0x01, 0x00, 0xbd, 0x37, 0xfb, 0x0b, 0x7d, 0xf5, 0xd0, 0xd6, 0xf9, 0xc4, 0x8a, 0x00, 0xe8, 0x2c, 0xff, 0xc1, 0x0b, 0xfb, 0x5f, 0x66, 0x6c, 0x8d, 0x8b, 0x57, 0x14, 0xb9, 0xe1, 0x13, 0x36, 0xf6, 0xb0, 0xca, 0xf0, 0xb8, 0x83, 0xe7, 0xba, 0x35, 0x19, 0x49, 0xf0, 0xf7, 0x2d, 0x96, 0xd7, 0x90, 0x9f, 0x09, 0x5d, 0xc6, 0x2c, 0xea, 0x37, 0xff, 0x3e, 0xce, 0xe9, 0xe2, 0x22, 0xf7, 0xec, 0xbc, 0xe4, 0x1f, 0x87, 0xfa, 0x93, 0xed, 0x10, 0x1a, 0x8a, 0x00, 0x06, 0x2a, 0xf8, 0xa3, 0x3c, 0xfa, 0x29, 0x12, 0xff, 0x10, 0x39, 0xf6, 0x88, 0xbd, 0xfa, 0xf5, 0xb9, 0x01, 0x9a, 0x0e, 0xfc, 0xb7, 0xd8, 0x00, 0x74, 0x61, 0xfb, 0x90, 0x66, 0xf5, 0x9f, 0x26, 0xf9, 0x67, 0x87, 0xfe, 0xf9, 0x8a, 0xff, 0xda, 0x63, 0xfc, 0x74, 0xc4, 0x67, 0xc0, 0xc6, 0x57, 0x49, 0x47, 0xea, 0x8f, 0xd5, 0xf9, 0x37, 0x97, 0xed, 0x6d, 0xca, 0xe4, 0xb9, 0x9e, 0x19, 0xc5, 0xf7, 0xf8, 0xc4, 0xb5, 0xd3, 0x60, 0x61, 0x04, 0x21, 0xec, 0x2d, 0x0f, 0x37, 0x03, 0x85, 0x21, 0xef, 0x33, 0xe4, 0xfb, 0x0f, 0x62, 0xe0, 0x66, 0x60, 0xf5, 0x96, 0xae, 0x11, 0xe8, 0x0f, 0x01, 0xca, 0x44, 0xf9, 0x3a, 0x09, 0xfa, 0x66, 0x27, 0xfd, 0xe7, 0x7c, 0xf6, 0xcb, 0x8f, 0xfc, 0xa1, 0xd6, 0x02, 0x16, 0x4d, 0xfb, 0x2e, 0x59, 0x01, 0xae, 0xd5, 0xfb, 0x30, 0x3e, 0xf4, 0x5e, 0xfd, 0xf8, 0x2f, 0x02, 0xfe, 0x1f, 0xeb, 0xff, 0x66, 0x8c, 0xfd, 0x40, 0xd2, 0x60, 0x93, 0x92, 0x58, 0x7d, 0x2f, 0xf4, 0x4e, 0xbb, 0xfc, 0x62, 0x1d, 0xec, 0xd7, 0x57, 0xe2, 0xde, 0xcc, 0x15, 0x66, 0x26, 0xfc, 0x1a, 0x10, 0xd4, 0x4b, 0x20, 0xfa, 0x69, 0x86, 0x2e, 0xaf, 0xc6, 0x09, 0x82, 0x68, 0xf1, 0xb5, 0x92, 0x03, 0x00, 0x8b, 0xde, 0xa0, 0x48, 0xed, 0xae, 0x68, 0x12, 0xce, 0xb1, 0x00, 0xbf, 0x44, 0xf9, 0x43, 0xb5, 0xfb, 0x43, 0xa0, 0xfb, 0x40, 0x24, 0xf6, 0x8b, 0xc9, 0xfe, 0xf6, 0x14, 0x03, 0x72, 0x1b, 0xfa, 0xbc, 0xd0, 0x02, 0x37, 0x27, 0xfb, 0x92, 0xd5, 0xf2, 0x77, 0x35, 0xfb, 0xdb, 0xa1, 0xfd, 0x34, 0x54, 0xff, 0x9a, 0x2e, 0xff, 0x8d, 0xe9, 0x5b, 0xa6, 0xd1, 0x55, 0xb9, 0xce, 0xfc, 0xfb, 0xa8, 0x00, 0xb6, 0xc2, 0xe9, 0xab, 0x34, 0xe2, 0xf9, 0x78, 0x0f, 0x93, 0x43, 0xfd, 0x17, 0x33, 0xd9, 0x6f, 0xf2, 0xef, 0x1b, 0x1c, 0x2c, 0xa5, 0xd6, 0x10, 0x38, 0x73, 0xf2, 0x53, 0xa5, 0x0a, 0x0e, 0xb6, 0xe0, 0x52, 0x15, 0xe4, 0xf1, 0x74, 0x10, 0x24, 0xfa, 0x00, 0x33, 0xbc, 0xf7, 0x0f, 0x48, 0xfe, 0x4f, 0x8f, 0xfc, 0x1f, 0x4d, 0xf4, 0x0f, 0x69, 0xfe, 0x72, 0x84, 0x04, 0x8a, 0x62, 0xf9, 0xe2, 0xd9, 0x01, 0x93, 0x95, 0xfc, 0xce, 0x55, 0xf2, 0x0c, 0xf4, 0xfb, 0x69, 0x38, 0xff, 0x6e, 0xc9, 0xfe, 0xb6, 0x3b, 0xff, 0x8f, 0x68, 0x58, 0x47, 0xfb, 0x51, 0x80, 0xf6, 0x01, 0x3c, 0x46, 0x05, 0xd5, 0x18, 0xeb, 0x3d, 0x45, 0xe2, 0xce, 0x66, 0x09, 0xb1, 0x90, 0xfc, 0xd7, 0x2e, 0xde, 0xde, 0x99, 0xea, 0x95, 0x3e, 0x27, 0x16, 0x2e, 0x18, 0x23, 0x9a, 0xf4, 0x1a, 0x7f, 0x0d, 0xcd, 0x79, 0xe7, 0xa4, 0x2f, 0xdc, 0x4c, 0xaf, 0x0b, 0x6d, 0x47, 0x03, 0x65, 0xb5, 0xf5, 0x45, 0xcc, 0xff, 0x49, 0xb4, 0xfd, 0x25, 0x4f, 0xf4, 0xf1, 0x28, 0xfe, 0x31, 0xb9, 0x03, 0x2b, 0x1e, 0xf9, 0x26, 0xdb, 0x01, 0x3c, 0xe5, 0xfe, 0x3f, 0x74, 0xf2, 0x67, 0xe1, 0xfc, 0x6f, 0xbc, 0x00, 0x8e, 0x48, 0xfd, 0x43, 0xb6, 0xff, 0x86, 0xee, 0x55, 0x44, 0x12, 0x50, 0xff, 0x57, 0x01, 0x2c, 0x05, 0x08, 0xd8, 0x84, 0xf1, 0x51, 0xca, 0xdf, 0xb3, 0x25, 0x03, 0x35, 0x06, 0xfe, 0xeb, 0x9f, 0xe0, 0x42, 0x58, 0xe6, 0x36, 0x87, 0x23, 0xd5, 0x3e, 0x1f, 0x23, 0x36, 0xf6, 0x55, 0x3b, 0x0d, 0x2c, 0x63, 0xef, 0x92, 0x84, 0xd6, 0xac, 0xe8, 0x05, 0xd6, 0x36, 0x07, 0xb0, 0x28, 0xf3, 0x5f, 0x85, 0xfe, 0x8b, 0x6f, 0xff, 0xb9, 0x3e, 0xf4, 0x90, 0xc1, 0xfd, 0x62, 0xac, 0x03, 0xb9, 0x70, 0xf8, 0x10, 0x20, 0x01, 0xc2, 0xec, 0x01, 0x59, 0x3f, 0xf4, 0x46, 0xe9, 0xfb, 0x44, 0xc9, 0x00, 0xdd, 0xdb, 0xfd, 0xa9, 0xd0, 0xff, 0xd2, 0xab, 0x56, 0xab, 0x5e, 0x4b, 0x5d, 0xfe, 0xfc, 0xfb, 0xb0, 0x0d, 0x86, 0x46, 0xf5, 0x04, 0x96, 0xdb, 0x61, 0x47, 0x01, 0x1a, 0xeb, 0xff, 0x1b, 0xad, 0xe2, 0x27, 0xc0, 0xe2, 0x54, 0x47, 0x1f, 0x63, 0xdf, 0x23, 0x41, 0x68, 0xf8, 0x7a, 0xaf, 0x0d, 0x04, 0xc7, 0xf4, 0x48, 0xae, 0xd4, 0x18, 0xf0, 0xff, 0xc1, 0x32, 0x08, 0xe4, 0x56, 0xf5, 0xfe, 0x6f, 0xfc, 0x80, 0xd6, 0xfd, 0x11, 0xe7, 0xf3, 0x47, 0x40, 0xfd, 0xa1, 0xd0, 0x05, 0xc1, 0xdc, 0xf8, 0xe0, 0x7b, 0xff, 0x8b, 0xdb, 0x03, 0xd6, 0xb2, 0xf5, 0xe4, 0x73, 0xfb, 0x51, 0x1b, 0x01, 0xcf, 0x5c, 0xfd, 0x24, 0x5e, 0xff, 0x95, 0x2a, 0x53, 0x2a, 0x65, 0x46, 0x73, 0x08, 0xfd, 0x8f, 0x90, 0x14, 0x99, 0x8c, 0xf5, 0x6f, 0xcb, 0xd6, 0xa7, 0xca, 0x04, 0x8a, 0x34, 0x01, 0x39, 0x39, 0xe4, 0x18, 0xbf, 0xe1, 0x7b, 0x9a, 0x14, 0xd2, 0xc0, 0x26, 0xf7, 0xd6, 0xfd, 0x17, 0x81, 0x0c, 0x7c, 0x3d, 0xfd, 0x59, 0xaa, 0xd4, 0xac, 0x6b, 0xf7, 0x65, 0x96, 0x09, 0x74, 0x8b, 0xf8, 0x9a, 0x35, 0xfb, 0x52, 0xc4, 0xfb, 0x13, 0x2b, 0xf2, 0x95, 0xb7, 0xfb, 0x80, 0x01, 0x08, 0xab, 0x17, 0xfb, 0xbf, 0xe2, 0xfd, 0xa4, 0xd8, 0x05, 0x96, 0x48, 0xf6, 0x53, 0x42, 0xf8, 0x16, 0xb7, 0x02, 0x35, 0xcf, 0xfe, 0x14, 0x5b, 0xfe, 0x71, 0xf0, 0x4c, 0x80, 0x9f, 0x40, 0xcf, 0xa8, 0xfe, 0x9f, 0x27, 0x19, 0x78, 0xa0, 0xf8, 0x5d, 0xdf, 0xd6, 0xc2, 0x02, 0x04, 0xe6, 0xa2, 0x02, 0x90, 0x96, 0xe7, 0xb1, 0x3d, 0xdf, 0x8f, 0xa1, 0x0a, 0xef, 0x80, 0x26, 0xbb, 0xf4, 0x02, 0xab, 0x0d, 0x0b, 0x3f, 0x93, 0x04, 0x71, 0x09, 0xda, 0xb7, 0x41, 0xef, 0xaa, 0x68, 0x09, 0xa0, 0x8f, 0xfb, 0x2d, 0x9a, 0xf8, 0x72, 0x61, 0xfc, 0xb5, 0xbb, 0xf1, 0x8c, 0x57, 0xf8, 0x6a, 0xea, 0x06, 0xe6, 0xb8, 0xfc, 0xc8, 0x7a, 0x00, 0xe4, 0x3b, 0x07, 0x81, 0xc3, 0xf3, 0xa2, 0x7f, 0xf5, 0x9e, 0x31, 0x05, 0xa4, 0xb8, 0x00, 0xf8, 0xeb, 0xfc, 0x6d, 0x7d, 0x4a, 0xb2, 0x0f, 0x3a, 0xa5, 0x41, 0xf7, 0x0f, 0x6b, 0x1c, 0x77, 0xaf, 0x03, 0xa2, 0x70, 0xda, 0x15, 0x1e, 0x02, 0x4a, 0x3a, 0x00, 0xe1, 0x08, 0xe8, 0x26, 0x52, 0xdf, 0xa7, 0xa5, 0x03, 0x67, 0x16, 0x28, 0xa0, 0x77, 0x06, 0xbf, 0x7c, 0x03, 0x11, 0xb5, 0x09, 0x91, 0x59, 0xe4, 0xe0, 0x15, 0xeb, 0xb0, 0x49, 0x07, 0x3a, 0xd9, 0xfe, 0x64, 0x72, 0xf7, 0x87, 0x76, 0xfa, 0x13, 0x96, 0xf2, 0x51, 0x89, 0xf6, 0x4b, 0x1d, 0x04, 0x92, 0x96, 0xfe, 0x31, 0x01, 0x01, 0x92, 0x18, 0x07, 0x37, 0xab, 0xf4, 0x2a, 0x94, 0xf3, 0xb9, 0x77, 0x05, 0xbb, 0x7e, 0x02, 0x7f, 0x6f, 0xfc, 0x5a, 0x87, 0x45, 0x6e, 0x4e, 0x34, 0x48, 0xe6, 0xf6, 0xe7, 0x0d, 0x1f, 0xf6, 0x55, 0x07, 0xfe, 0x2a, 0xdc, 0x0e, 0x38, 0x01, 0x88, 0x60, 0x02, 0x23, 0x8d, 0xec, 0x9e, 0xf0, 0xde, 0xe5, 0x03, 0xfd, 0x2d, 0x2e, 0x27, 0x0e, 0x11, 0x07, 0xac, 0xda, 0xfa, 0xd8, 0xfb, 0x0f, 0x45, 0xba, 0xf2, 0x92, 0x3e, 0xe5, 0x09, 0x1d, 0x04, 0x4f, 0x36, 0x04, 0x13, 0x75, 0xf4, 0x56, 0x7d, 0xf9, 0xa1, 0x79, 0xf6, 0x2f, 0x0a, 0xf6, 0x10, 0xfe, 0x00, 0x4d, 0x32, 0xfd, 0x16, 0xce, 0xfe, 0xb8, 0x3c, 0x07, 0xc8, 0xb5, 0xf9, 0xfb, 0xb1, 0xf3, 0x86, 0xbb, 0x01, 0x4a, 0x36, 0x03, 0x50, 0x21, 0xfe, 0x81, 0x4d, 0x3f, 0x4f, 0x17, 0x2f, 0xb3, 0x25, 0xf9, 0xda, 0x6c, 0x1f, 0x05, 0x46, 0x07, 0x74, 0x2d, 0xe0, 0xdf, 0x79, 0x01, 0x33, 0xac, 0x01, 0x2d, 0xfe, 0xf0, 0x62, 0x61, 0xe0, 0xba, 0xec, 0xf8, 0x2b, 0xa1, 0x24, 0x13, 0x3b, 0x05, 0x74, 0x35, 0xf7, 0x5c, 0x01, 0x12, 0x23, 0x24, 0xfa, 0x35, 0xba, 0xe5, 0xd5, 0xe2, 0x01, 0xff, 0x39, 0x06, 0xae, 0xd5, 0xf3, 0x00, 0xb7, 0xf8, 0xac, 0xfd, 0xf8, 0x78, 0xd2, 0xf6, 0xe6, 0xb1, 0xff, 0x9b, 0x53, 0xfb, 0x42, 0x5c, 0xfb, 0x23, 0x53, 0x05, 0x87, 0x75, 0xfd, 0xcb, 0xe3, 0xf6, 0xb5, 0xf8, 0xff, 0x4e, 0x42, 0x01, 0xb1, 0xe9, 0xfd, 0x7e, 0x3f, 0x3a, 0x70, 0x01, 0x2a, 0x3e, 0xfc, 0xf9, 0xa1, 0xf6, 0x1f, 0xb3, 0x14, 0x08, 0x6e, 0xd9, 0xe3, 0xa9, 0x87, 0x02, 0xb6, 0xf8, 0x00, 0x27, 0x2e, 0xf3, 0x72, 0x2d, 0xe4, 0xb8, 0x3b, 0xf7, 0xb1, 0xda, 0x1f, 0xbd, 0xb8, 0x05, 0x31, 0xd2, 0xf6, 0x9a, 0xe4, 0x0f, 0x8d, 0x2c, 0xfd, 0x2a, 0xab, 0xe8, 0xa5, 0x71, 0x01, 0xf5, 0x87, 0x06, 0x9d, 0x57, 0xf5, 0x56, 0x2a, 0xf9, 0xa3, 0xb5, 0xf9, 0xce, 0xc5, 0xf7, 0xb0, 0x29, 0xff, 0x2f, 0x95, 0xfb, 0x15, 0xf0, 0xf9, 0x82, 0x9a, 0x01, 0x2d, 0xee, 0xfd, 0xc8, 0x2d, 0xfa, 0x7c, 0x1c, 0x01, 0x56, 0x5a, 0x00, 0x3b, 0xb3, 0xfc, 0xcf, 0x49, 0x3b, 0xe3, 0xdc, 0x2a, 0x26, 0xc0, 0xeb, 0x0e, 0xb9, 0x19, 0x76, 0xd0, 0x18, 0xd1, 0xfa, 0xe7, 0xf1, 0xf9, 0xf7, 0x01, 0x88, 0xff, 0x04, 0x60, 0xf9, 0xf1, 0x7b, 0xe6, 0x57, 0x76, 0xf9, 0xa5, 0x7d, 0x1f, 0x3b, 0xf9, 0xfc, 0xa6, 0x2e, 0xf0, 0x13, 0x41, 0x0c, 0x51, 0x25, 0x02, 0xa1, 0x10, 0xf3, 0xdc, 0xd5, 0x05, 0x4d, 0x5a, 0x0c, 0xd2, 0x1f, 0xfb, 0xdb, 0xcc, 0xfd, 0x2c, 0x51, 0xfe, 0x00, 0xa8, 0xf9, 0x88, 0xe1, 0xfd, 0x87, 0x30, 0xf6, 0xba, 0x1b, 0xf4, 0x6b, 0x09, 0xfd, 0x12, 0xec, 0xfc, 0xde, 0xfc, 0xf8, 0xbc, 0x22, 0xfd, 0x66, 0x0e, 0x00, 0x7b, 0x75, 0xfe, 0x44, 0x9a, 0x31, 0x2b, 0xd8, 0x28, 0xb2, 0xca, 0xf5, 0x20, 0xaf, 0x17, 0x57, 0x5e, 0x14, 0x5a, 0x42, 0xea, 0x6b, 0x2e, 0xf9, 0x91, 0x9c, 0xff, 0x59, 0xf4, 0xf8, 0xc1, 0x2c, 0xeb, 0xce, 0x9d, 0xf8, 0x93, 0x3c, 0x18, 0xc4, 0xd4, 0x00, 0x73, 0xc8, 0xf5, 0x22, 0x5b, 0x0a, 0x3e, 0xdf, 0x00, 0xed, 0x15, 0xf4, 0x5c, 0x84, 0x03, 0x4c, 0x67, 0x09, 0xa9, 0xae, 0xfc, 0xb3, 0xb3, 0xfe, 0x96, 0xce, 0xfd, 0xf1, 0xba, 0xf9, 0xb0, 0x87, 0xfe, 0xcf, 0x78, 0xf8, 0x0a, 0x36, 0xf6, 0xe1, 0xb8, 0xfd, 0x8e, 0x8b, 0xfc, 0xaa, 0x73, 0xf9, 0xa3, 0x9a, 0xfd, 0x37, 0x8a, 0xff, 0x6f, 0xf9, 0xfd, 0xa3, 0x9e, 0x29, 0xf5, 0xd4, 0x24, 0x87, 0xe2, 0xfb, 0xb2, 0x58, 0x16, 0x71, 0xff, 0x11, 0x65, 0xcf, 0xee, 0x27, 0xed, 0xfb, 0xd7, 0x93, 0x00, 0xe8, 0xba, 0xf8, 0xf7, 0x53, 0xed, 0x13, 0x2f, 0xf9, 0xdc, 0x5d, 0x13, 0xf5, 0xad, 0x01, 0x84, 0xfe, 0xf8, 0x4d, 0x6b, 0x08, 0x19, 0xcb, 0x00, 0xec, 0xf6, 0xf5, 0x95, 0x7d, 0x01, 0x53, 0xe4, 0x07, 0xd0, 0xd0, 0xfd, 0xac, 0x09, 0xfe, 0x7e, 0x1f, 0xfe, 0xa2, 0xaa, 0xfa, 0xfe, 0xe4, 0xfd, 0x98, 0x8e, 0xfa, 0x67, 0xeb, 0xf8, 0x08, 0x04, 0xfe, 0x35, 0x7c, 0xfd, 0xa2, 0x85, 0xfa, 0x4a, 0x20, 0xfd, 0xa7, 0x9b, 0xff, 0x66, 0x33, 0xfe, 0x86, 0x9c, 0x22, 0xf3, 0x81, 0x20, 0xa2, 0xea, 0x00, 0xf3, 0x9e, 0x15, 0xad, 0x9a, 0x0f, 0xa5, 0x94, 0xf2, 0xda, 0x0a, 0xff, 0x73, 0xee, 0x01, 0xe2, 0x2d, 0xf8, 0x2c, 0x2f, 0xef, 0x33, 0x29, 0xfa, 0xaa, 0x9a, 0x0f, 0xa4, 0xad, 0x02, 0xde, 0x8b, 0xfa, 0x01, 0x45, 0x06, 0xca, 0xd7, 0x01, 0xd6, 0x17, 0xf7, 0xa6, 0x53, 0xff, 0x68, 0x24, 0x07, 0x3f, 0xd0, 0xfe, 0x35, 0xc9, 0xfd, 0x40, 0x2f, 0xfe, 0x20, 0x5e, 0xfb, 0x75, 0x00, 0xfe, 0xca, 0xb5, 0xfb, 0xfa, 0x46, 0xfb, 0x2a, 0xb0, 0xff, 0xb7, 0xfa, 0xfd, 0xf3, 0xd9, 0xfa, 0x4b, 0x5f, 0xfd, 0xde, 0xa5, 0xff, 0x3f, 0x31, 0xfe, 0xa4, 0xad, 0x1d, 0xeb, 0x1c, 0x1d, 0x95, 0x0b, 0x03, 0xb2, 0xb7, 0x13, 0x3f, 0xd6, 0x0e, 0x8f, 0xbe, 0xf6, 0xab, 0x34, 0x00, 0x45, 0xb4, 0x01, 0xac, 0x43, 0xf9, 0xbd, 0xa9, 0xf1, 0xdc, 0xfb, 0xf9, 0xae, 0x47, 0x0d, 0xfd, 0xf1, 0x03, 0x9d, 0x5e, 0xfa, 0x93, 0x55, 0x04, 0x87, 0x84, 0x02, 0xc1, 0xfe, 0xf7, 0x3c, 0x97, 0xfe, 0xe7, 0xf2, 0x05, 0x7c, 0x20, 0xff, 0x16, 0xf0, 0xfd, 0x79, 0x0e, 0xfe, 0x27, 0xf7, 0xfb, 0xb1, 0x77, 0xfe, 0xbf, 0xad, 0xfd, 0x09, 0x2d, 0xfd, 0x4d, 0xb2, 0xff, 0x43, 0x42, 0xfe, 0xac, 0xb3, 0xfb, 0x27, 0xe3, 0xfd, 0xc4, 0x5b, 0xff, 0xfb, 0x72, 0xfd, 0xcd, 0x72, 0x1a, 0x05, 0x94, 0x1a, 0x7e, 0x68, 0x03, 0xa6, 0x0c, 0x11, 0x79, 0x10, 0x0f, 0x09, 0x66, 0xfb, 0x2b, 0xf4, 0xff, 0x7a, 0x26, 0x00, 0x0c, 0x8a, 0xfb, 0x78, 0xf7, 0xf4, 0x86, 0xec, 0xf9, 0x0d, 0x1f, 0x0b, 0xc0, 0x77, 0x04, 0x70, 0xca, 0xfa, 0xf1, 0x78, 0x02, 0xc1, 0xf3, 0x01, 0x7d, 0xdf, 0xf9, 0x4b, 0xe1, 0xfe, 0xae, 0x57, 0x04, 0xf6, 0x2d, 0xff, 0x2f, 0x1e, 0xfe, 0x32, 0x51, 0xfe, 0x38, 0x7b, 0xfd, 0x32, 0x07, 0x00, 0xf6, 0x22, 0xff, 0x8b, 0x6e, 0xfd, 0x19, 0x13, 0xff, 0x78, 0xdd, 0xfe, 0x49, 0xee, 0xfc, 0xa9, 0xcb, 0xfd, 0x2e, 0x72, 0xfe, 0x0e, 0x17, 0xfd, 0xf6, 0x42, 0x16, 0x0e, 0xbc, 0x17, 0x9a, 0x09, 0x05, 0x13, 0x8c, 0x0f, 0x8c, 0x2b, 0x0e, 0xa2, 0x1f, 0xfe, 0x0f, 0x92, 0x00, 0x34, 0xec, 0xff, 0x00, 0xbb, 0xfc, 0x26, 0x56, 0xf7, 0xa1, 0xa1, 0xfa, 0x9e, 0xa4, 0x08, 0x1f, 0x91, 0x03, 0x6a, 0xa2, 0xfb, 0xcd, 0x48, 0x01, 0x50, 0x50, 0x01, 0xc2, 0x74, 0xfb, 0xd8, 0x9a, 0xfe, 0x0c, 0xe3, 0x02, 0x9d, 0x40, 0xff, 0x42, 0xe6, 0xfe, 0xa2, 0xdf, 0xff, 0xb2, 0xa5, 0xfe, 0x90, 0x2a, 0x00, 0x01, 0x75, 0xff, 0xed, 0x73, 0xfd, 0x63, 0xae, 0xfe, 0xb5, 0xe3, 0xfe, 0x63, 0x48, 0xfd, 0xe9, 0x71, 0xfd, 0xb9, 0xfc, 0xfd, 0x21, 0x9d, 0xfd, 0xef, 0xf0, 0x12, 0x23, 0x16, 0x15, 0x6f, 0x6b, 0x06, 0xab, 0x48, 0x0e, 0x26, 0x18, 0x0d, 0xe2, 0x60, 0x00, 0x1d, 0xe4, 0x00, 0x05, 0x01, 0x00, 0x92, 0x19, 0xfe, 0x04, 0xad, 0xf9, 0xfa, 0x75, 0xfb, 0x6d, 0xbb, 0x05, 0x22, 0xda, 0x02, 0x3a, 0xe2, 0xfc, 0x37, 0x34, 0x00, 0x60, 0xfc, 0x00, 0x8c, 0xb9, 0xfc, 0x9f, 0x61, 0xfe, 0x29, 0x62, 0x02, 0x2b, 0xc4, 0x00, 0xfd, 0x02, 0x00, 0xee, 0xbe, 0xff, 0x52, 0x3d, 0xff, 0x1b, 0xbe, 0x00, 0xe4, 0x51, 0xff, 0x97, 0x1e, 0xfd, 0xdb, 0x41, 0xfe, 0xb3, 0xc3, 0xfe, 0x1b, 0x8e, 0xfd, 0x19, 0xe1, 0xfd, 0x49, 0x6c, 0xfe, 0x75, 0xe7, 0xfd, 0x43, 0x8c, 0x0f, 0xa1, 0x9e, 0x12, 0x30, 0xc6, 0x07, 0xd9, 0xc1, 0x0d, 0x74, 0xde, 0x0b, 0x9f, 0xe2, 0x00, 0xed, 0xda, 0x01, 0x55, 0x4f, 0x01, 0x33, 0xe2, 0xfe, 0xa7, 0x09, 0xfb, 0x8e, 0xd1, 0xfb, 0x65, 0xd8, 0x03, 0x2d, 0x12, 0x02, 0x48, 0xec, 0xfc, 0xe1, 0x1e, 0x00, 0xf1, 0x8a, 0x01, 0x89, 0x67, 0xfd, 0xde, 0x09, 0xff, 0x28, 0x0d, 0x03, 0x77, 0xda, 0x00, 0xe9, 0x9d, 0xff, 0x7e, 0x19, 0x00, 0xf8, 0x11, 0x00, 0xfb, 0x8d, 0x00, 0xd9, 0x6e, 0xfe, 0xf7, 0x8d, 0xfc, 0x86, 0x4f, 0xfe, 0x7a, 0x69, 0xff, 0x01, 0x43, 0xfe, 0x3b, 0x0f, 0xfe, 0xce, 0x6a, 0xfe, 0x12, 0x75, 0xfe, 0xc3, 0xa2, 0x0d, 0x06, 0x01, 0x11, 0x90, 0xc7, 0x07, 0xca, 0x97, 0x0c, 0x9d, 0x0b, 0x0b, 0x59, 0x4c, 0x01, 0x19, 0x2e, 0x02, 0xfd, 0x1b, 0x02, 0x07, 0xf6, 0xff, 0x0c, 0x37, 0xfc, 0xb5, 0xaa, 0xfb, 0x39, 0x23, 0x02, 0xf3, 0x64, 0x01, 0xa2, 0x53, 0xfd, 0xf8, 0xaa, 0x00, 0x86, 0xe1, 0x02, 0x66, 0xd1, 0xfe, 0x5b, 0xb7, 0xfe, 0xfa, 0x16, 0x02, 0xeb, 0xea, 0x00, 0xed, 0xfa, 0xff, 0x1c, 0x70, 0x00, 0xae, 0x00, 0x00, 0xb6, 0x3d, 0xff, 0x6b, 0x86, 0xfd, 0x6f, 0xa1, 0xfd, 0x95, 0x6c, 0xff, 0xdc, 0x7b, 0xff, 0x38, 0x64, 0xfe, 0xcf, 0x45, 0xfe, 0x6e, 0xe6, 0xfe, 0x57, 0x6b, 0xff, 0x6f, 0xed, 0x0c, 0x95, 0x61, 0x0f, 0x5e, 0x0e, 0x07, 0x22, 0x06, 0x0c, 0x7b, 0xd3, 0x09, 0xc6, 0x43, 0x01, 0x4d, 0x11, 0x03, 0xdd, 0x01, 0x03, 0x4a, 0x9f, 0x00, 0x63, 0x7f, 0xfc, 0x86, 0xb1, 0xfb, 0x1b, 0x3f, 0x01, 0x1c, 0xd8, 0x00, 0x96, 0x61, 0xff, 0x0f, 0x05, 0x03, 0xa2, 0x79, 0x02, 0xb1, 0xf0, 0xfd, 0x9a, 0xdf, 0xfe, 0xec, 0xd7, 0x01, 0xdc, 0x0b, 0x01, 0x79, 0x69, 0x00, 0x4c, 0xdd, 0xff, 0x1e, 0x10, 0xff, 0x03, 0x0c, 0xff, 0xd2, 0xa0, 0xfe, 0xaa, 0xd6, 0xfe, 0xe8, 0xb1, 0xff, 0x44, 0x9b, 0xff, 0x55, 0xad, 0xfe, 0x5c, 0xee, 0xfe, 0x64, 0x90, 0xff, 0x28, 0xfb, 0xfe, 0xa0, 0x5a, 0x0c, 0x17, 0x31, 0x0e, 0xe9, 0x2f, 0x06, 0x57, 0xe8, 0x0a, 0x9f, 0xf4, 0x08, 0xe5, 0x9a, 0x01, 0xa2, 0x04, 0x04, 0x20, 0xb2, 0x03, 0x73, 0x84, 0x00, 0x55, 0xed, 0xfc, 0xc2, 0x21, 0xfc, 0x83, 0x7b, 0x01, 0x9a, 0xc1, 0x02, 0xb8, 0xab, 0x00, 0x63, 0x5d, 0x02, 0x62, 0xfe, 0x01, 0x78, 0xfe, 0xfd, 0x06, 0xc1, 0xfe, 0x59, 0xd7, 0x01, 0x09, 0x12, 0x01, 0xba, 0xbd, 0xff, 0xd8, 0xd0, 0xff, 0x86, 0xd0, 0xff, 0x45, 0xa7, 0xff, 0x4f, 0x80, 0xff, 0x2b, 0x5e, 0xff, 0xbd, 0x0f, 0x00, 0xf8, 0x34, 0x00, 0x07, 0xde, 0xfe, 0x7b, 0x7e, 0xfe, 0x32, 0xa5, 0xfe, 0x5f, 0x5c, 0xfe, 0x6d, 0x6d, 0x0b, 0xe0, 0xc0, 0x0c, 0x41, 0x43, 0x05, 0xd8, 0xee, 0x09, 0xb9, 0x80, 0x08, 0x93, 0x44, 0x02, 0x67, 0xa7, 0x04, 0xd5, 0xed, 0x03, 0xfd, 0x9d, 0x00, 0x88, 0x63, 0xfe, 0x8a, 0x81, 0xfe, 0xfe, 0x65, 0x01, 0xdc, 0xf5, 0x01, 0x28, 0x8c, 0x01, 0xde, 0x30, 0x02, 0x6b, 0x28, 0x01, 0x9c, 0x16, 0xfe, 0x98, 0x45, 0xfe, 0x64, 0x39, 0x01, 0x70, 0x79, 0x01, 0x6c, 0xc3, 0x00, 0x4d, 0x7b, 0x00, 0x3d, 0xb5, 0xff, 0xd5, 0xcd, 0xff, 0x99, 0x4f, 0x00, 0xa6, 0x6c, 0x00, 0x8f, 0x6e, 0x00, 0x45, 0x22, 0xff, 0x77, 0x75, 0xfd, 0x51, 0xdc, 0xfd, 0x0d, 0xbd, 0xfe, 0x6c, 0xd1, 0xfe, 0x48, 0xce, 0x0a, 0x52, 0x60, 0x0c, 0x17, 0x92, 0x04, 0x3e, 0x24, 0x07, 0xe2, 0x5d, 0x07, 0x72, 0x6d, 0x04, 0x1b, 0xf6, 0x05, 0xcb, 0x48, 0x04, 0x6b, 0x1e, 0x02, 0x50, 0xa2, 0xff, 0xf2, 0x44, 0xfe, 0xd3, 0x93, 0x01, 0x2b, 0xbf, 0x02, 0x99, 0x16, 0x01, 0xac, 0x01, 0x01, 0xf7, 0x23, 0x00, 0x3b, 0xb5, 0xfd, 0x73, 0x3c, 0xff, 0xf7, 0xb8, 0x02, 0x4d, 0x0e, 0x02, 0x85, 0x60, 0x00, 0x2c, 0x2e, 0x00, 0x47, 0x70, 0x00, 0x8b, 0x60, 0x01, 0xf2, 0x0a, 0x01, 0x43, 0x4b, 0xff, 0x3e, 0x6e, 0xfe, 0x59, 0x1f, 0xfe, 0x3d, 0xeb, 0xfd, 0xba, 0x8c, 0xfe, 0xe1, 0x45, 0xff, 0xee, 0x07, 0xff, 0xe0, 0x61, 0x08, 0xde, 0x17, 0x0b, 0x98, 0x0f, 0x05, 0x58, 0x58, 0x06, 0xa6, 0x87, 0x07, 0xa1, 0xcb, 0x04, 0xd3, 0x08, 0x07, 0x8d, 0x1b, 0x07, 0xce, 0x18, 0x03, 0xc4, 0x47, 0x00, 0xb6, 0xac, 0xfe, 0x06, 0xf8, 0xff, 0x67, 0xed, 0x01, 0x9c, 0x34, 0x01, 0x18, 0x55, 0x00, 0x5b, 0xc7, 0xff, 0xa0, 0x1f, 0xff, 0xd4, 0x87, 0x00, 0xa9, 0xb9, 0x02, 0x68, 0x6d, 0x02, 0x58, 0xcd, 0x00, 0x3f, 0x8f, 0x00, 0xfc, 0x27, 0x01, 0x14, 0x2a, 0x01, 0x2f, 0xcb, 0xff, 0xca, 0x2f, 0xfe, 0xfc, 0x47, 0xfe, 0x30, 0x91, 0xfe, 0xe2, 0x60, 0xfe, 0xf0, 0xf3, 0xfe, 0x5b, 0x29, 0xff, 0xed, 0xb7, 0xfe, 0x7a, 0x36, 0x07, 0x30, 0xb9, 0x0a, 0x39, 0x70, 0x06, 0x59, 0x78, 0x06, 0x73, 0x7c, 0x08, 0x04, 0x13, 0x07, 0x70, 0x93, 0x05, 0x18, 0x16, 0x05, 0xd4, 0xec, 0x03, 0xdb, 0x17, 0x01, 0xc5, 0x22, 0xff, 0x16, 0x1b, 0xff, 0xad, 0x4d, 0xff, 0x6e, 0xea, 0xff, 0x2a, 0xaa, 0x01, 0x49, 0x20, 0x02, 0xaf, 0xb2, 0x00, 0x32, 0xe3, 0x00, 0x94, 0x2e, 0x02, 0xe1, 0x2f, 0x02, 0x03, 0x39, 0x01, 0x54, 0x78, 0x00, 0x0a, 0x4c, 0x00, 0xbe, 0xb5, 0xff, 0xf5, 0xc9, 0xfe, 0xa8, 0x79, 0xfe, 0x83, 0xa6, 0xfe, 0x41, 0x8c, 0xfe, 0x82, 0x5d, 0xfe, 0xe6, 0xb9, 0xfe, 0x8e, 0x27, 0xff, 0xc1, 0x0f, 0xff, 0xd2, 0xda, 0x05, 0x49, 0x76, 0x0a, 0xa1, 0x95, 0x08, 0x76, 0x24, 0x07, 0xbd, 0x0a, 0x08, 0xcb, 0x53, 0x08, 0x98, 0x10, 0x07, 0x47, 0x58, 0x04, 0x47, 0x86, 0x01, 0xe6, 0xa0, 0xff, 0x50, 0xf9, 0xfe, 0x10, 0x8b, 0xff, 0xa7, 0x74, 0x00, 0xec, 0xb4, 0x00, 0x51, 0x05, 0x01, 0xf6, 0xfd, 0x01, 0xdf, 0x75, 0x02, 0xbc, 0x17, 0x02, 0xcf, 0xd6, 0x01, 0x06, 0x79, 0x01, 0x66, 0x88, 0x00, 0x91, 0xbe, 0xff, 0xfc, 0x60, 0xff, 0x80, 0x45, 0xff, 0x2f, 0xff, 0xfe, 0xea, 0xac, 0xfe, 0x39, 0xcb, 0xfe, 0xea, 0xc3, 0xfe, 0xa0, 0x5c, 0xfe, 0xb8, 0x54, 0xfe, 0x42, 0xe8, 0xfe, 0x02, 0x22, 0xff, 0xe9, 0x81, 0x07, 0x0c, 0x43, 0x0b, 0x0a, 0x16, 0x07, 0xe4, 0xee, 0x07, 0x05, 0x5c, 0x09, 0xb5, 0x8c, 0x06, 0x1e, 0x30, 0x06, 0x47, 0x2f, 0x05, 0x33, 0xd0, 0x00, 0x1a, 0xe1, 0xfd, 0x54, 0x08, 0xff, 0x75, 0xf1, 0x00, 0xb5, 0xcf, 0x00, 0x9b, 0xfb, 0x00, 0x96, 0xdd, 0x01, 0x58, 0xda, 0x01, 0x3c, 0x56, 0x02, 0x0d, 0x52, 0x03, 0x3b, 0x39, 0x02, 0x17, 0xe7, 0xff, 0x10, 0xff, 0xfe, 0x77, 0x46, 0xff, 0x64, 0x6e, 0xff, 0x49, 0x61, 0xff, 0x7c, 0x4d, 0xff, 0x63, 0xd2, 0xfe, 0x9b, 0x80, 0xfe, 0xbd, 0x81, 0xfe, 0xa9, 0x7a, 0xfe, 0x15, 0x04, 0xff, 0x79, 0x27, 0xff, 0x7d, 0xad, 0xfe, 0x8b, 0x64, 0x07, 0xde, 0x1e, 0x0b, 0x4e, 0xf3, 0x07, 0x7a, 0xb1, 0x07, 0x56, 0xd3, 0x07, 0xba, 0xeb, 0x05, 0xbb, 0xed, 0x04, 0x7e, 0x44, 0x04, 0x32, 0x20, 0x02, 0xba, 0xd1, 0xff, 0x7c, 0x33, 0x00, 0x1b, 0xf5, 0x00, 0x44, 0xa1, 0x00, 0x80, 0xba, 0x00, 0x50, 0x75, 0x01, 0x28, 0x66, 0x02, 0x28, 0x18, 0x03, 0x5b, 0x2f, 0x03, 0x85, 0x73, 0x01, 0xee, 0x66, 0xff, 0x8a, 0x1a, 0xff, 0xb0, 0x11, 0xff, 0x3f, 0x11, 0xff, 0x79, 0x64, 0xff, 0x08, 0x71, 0xff, 0xd5, 0x40, 0xff, 0xfc, 0xb0, 0xfe, 0xe4, 0x34, 0xfe, 0xf3, 0x67, 0xfe, 0xd3, 0xf6, 0xfe, 0xe2, 0x1d, 0xff, 0x3f, 0x0c, 0xff, 0xd7, 0x16, 0x08, 0x5e, 0x53, 0x0c, 0x9c, 0xd9, 0x06, 0x23, 0xd1, 0x04, 0x24, 0x0d, 0x06, 0x84, 0x54, 0x05, 0x00, 0x3b, 0x04, 0xdd, 0x62, 0x04, 0x91, 0x56, 0x04, 0x35, 0x30, 0x01, 0x8d, 0x28, 0x00, 0x97, 0x90, 0x01, 0x75, 0xbe, 0x00, 0xcf, 0x74, 0x00, 0x68, 0xe8, 0x01, 0xf0, 0xac, 0x02, 0xf6, 0xfa, 0x01, 0x82, 0x5f, 0x02, 0x57, 0xd1, 0x02, 0x3e, 0x37, 0x00, 0x09, 0x17, 0xfe, 0x60, 0x84, 0xfe, 0x9e, 0x86, 0xff, 0xb0, 0x9a, 0xff, 0xa5, 0x01, 0xff, 0x8b, 0x19, 0xff, 0x2a, 0x0f, 0xff, 0x6b, 0x9a, 0xfe, 0xdc, 0x6c, 0xfe, 0x9d, 0x6a, 0xfe, 0xa1, 0xd9, 0xfe, 0xea, 0x5d, 0xff, 0x55, 0x6f, 0x08, 0xac, 0xeb, 0x0b, 0xaa, 0x75, 0x05, 0xf7, 0x39, 0x03, 0x06, 0x1e, 0x04, 0x26, 0x25, 0x04, 0x06, 0x75, 0x05, 0x55, 0x9d, 0x05, 0xec, 0x6b, 0x03, 0x8f, 0xc0, 0x01, 0x30, 0x9a, 0x02, 0x0f, 0xa0, 0x01, 0xd9, 0xc2, 0xff, 0x9a, 0x2f, 0x01, 0x1c, 0x59, 0x02, 0x90, 0x4a, 0x02, 0xbd, 0x65, 0x02, 0x88, 0x6e, 0x02, 0xe5, 0x69, 0x02, 0xb5, 0x8f, 0x01, 0x7b, 0xf5, 0xff, 0xbc, 0x71, 0xfe, 0xc5, 0x4e, 0xfe, 0x2c, 0x31, 0xff, 0x8b, 0xb3, 0xff, 0xe0, 0xce, 0xff, 0x8c, 0x0b, 0xff, 0xb9, 0x7c, 0xfe, 0x20, 0xcb, 0xfe, 0x2d, 0xa1, 0xfe, 0xac, 0x92, 0xfe, 0x3e, 0xdf, 0xfe, 0xa0, 0xa2, 0x08, 0xb5, 0xca, 0x0b, 0x20, 0x4e, 0x05, 0xef, 0x68, 0x03, 0xb8, 0x1d, 0x04, 0x32, 0x8f, 0x03, 0x75, 0xbd, 0x03, 0xf3, 0x98, 0x03, 0x61, 0x89, 0x02, 0x8f, 0x09, 0x02, 0x8a, 0x47, 0x03, 0xe3, 0x0b, 0x03, 0xf1, 0xbf, 0x01, 0x23, 0xc5, 0x00, 0x1e, 0xed, 0x00, 0xc6, 0xef, 0x02, 0x62, 0x0d, 0x03, 0x2e, 0x24, 0x02, 0xd2, 0x0c, 0x02, 0x49, 0x56, 0x02, 0x6c, 0xe0, 0x01, 0x8e, 0xf1, 0xff, 0x3d, 0x56, 0xff, 0xcf, 0x93, 0xfe, 0xff, 0x0d, 0xfe, 0xa7, 0xcf, 0xff, 0x95, 0x1d, 0x00, 0xc3, 0x0c, 0xff, 0xee, 0xc0, 0xfe, 0xf7, 0x12, 0xff, 0xf3, 0xe6, 0xfe, 0x21, 0x81, 0xfe, 0x15, 0xbc, 0x08, 0x2a, 0x57, 0x0c, 0x6c, 0x5b, 0x05, 0x95, 0xef, 0x02, 0xa9, 0xb8, 0x04, 0xe4, 0xd2, 0x04, 0x7e, 0xed, 0x03, 0x62, 0xe4, 0x01, 0x22, 0x06, 0xff, 0x9a, 0x61, 0xff, 0x1e, 0x66, 0x04, 0x55, 0x1c, 0x05, 0x4e, 0x83, 0x01, 0x7a, 0xc5, 0x00, 0x08, 0x83, 0x01, 0xc9, 0xf2, 0x01, 0xe3, 0x6c, 0x02, 0x50, 0xf6, 0x02, 0x47, 0x68, 0x02, 0x0c, 0xb5, 0x01, 0xd8, 0x74, 0x02, 0xf2, 0x63, 0x02, 0x6b, 0xab, 0x00, 0x34, 0x12, 0xff, 0x29, 0xea, 0xfe, 0x88, 0xb6, 0xfe, 0x7c, 0x39, 0xfe, 0x20, 0x86, 0xff, 0xff, 0x2f, 0x00, 0x58, 0x26, 0xff, 0x7d, 0xf2, 0xfe, 0x71, 0x0e, 0xff, 0x34, 0x39, 0x0a, 0x00, 0x7b, 0x0d, 0x16, 0xde, 0x04, 0x2c, 0x04, 0x03, 0xcc, 0x01, 0x05, 0xc8, 0xde, 0x04, 0x04, 0x5b, 0x04, 0xcf, 0xd8, 0x00, 0x38, 0xe8, 0xfc, 0xfb, 0x2b, 0xfe, 0x98, 0x4f, 0x03, 0x08, 0xeb, 0x03, 0x1c, 0xe3, 0x01, 0x14, 0x84, 0x01, 0x5d, 0x41, 0x00, 0x4a, 0x2b, 0x01, 0x3e, 0x2a, 0x03, 0xdf, 0x47, 0x02, 0xe4, 0x7c, 0x01, 0xcb, 0x89, 0x02, 0x71, 0x98, 0x02, 0xaa, 0x5c, 0x01, 0x07, 0x16, 0x02, 0x48, 0xd7, 0x01, 0x56, 0x31, 0xff, 0xd8, 0x76, 0xfe, 0x8a, 0x65, 0xfe, 0xb3, 0x17, 0xfe, 0xa7, 0xfd, 0xfe, 0x18, 0xd4, 0xff, 0x66, 0xb4, 0xff, 0x59, 0x05, 0xff, 0xb4, 0x02, 0x0c, 0x5d, 0xda, 0x0f, 0xf5, 0x78, 0x05, 0xc1, 0xe7, 0x02, 0xb3, 0x5d, 0x04, 0x53, 0xff, 0x03, 0x28, 0x3a, 0x04, 0xa1, 0x8f, 0x00, 0x50, 0xac, 0xfb, 0x27, 0x14, 0xfd, 0xdd, 0xf1, 0x03, 0x1f, 0xe2, 0x03, 0xea, 0xc0, 0xff, 0x12, 0x57, 0x00, 0x3e, 0x81, 0x00, 0x68, 0x35, 0x01, 0x17, 0x48, 0x02, 0x14, 0x9e, 0x01, 0x02, 0x01, 0x02, 0x14, 0x3b, 0x02, 0xb5, 0x01, 0x02, 0xff, 0x2a, 0x02, 0xa9, 0xfc, 0x01, 0x8c, 0x55, 0x01, 0x4d, 0x48, 0x01, 0x90, 0x9e, 0x00, 0x26, 0x42, 0xfe, 0x45, 0x0a, 0xfe, 0x92, 0x12, 0xff, 0x17, 0xa4, 0xfe, 0xa2, 0xd7, 0xfe, 0x12, 0xab, 0xff, 0x2a, 0x39, 0x0e, 0x4a, 0x12, 0x12, 0xba, 0x51, 0x05, 0x64, 0xf6, 0x02, 0x3a, 0x97, 0x04, 0x93, 0xd4, 0x03, 0xae, 0x64, 0x04, 0xc9, 0x41, 0xff, 0xc2, 0x7f, 0xf9, 0x71, 0xd3, 0xfc, 0xfd, 0xfe, 0x04, 0x36, 0xe7, 0x03, 0x8e, 0x22, 0xff, 0x2b, 0x4b, 0xff, 0xfe, 0x80, 0xfe, 0x5f, 0x76, 0x00, 0xa6, 0xd3, 0x02, 0x90, 0x8e, 0x01, 0xd7, 0x64, 0x01, 0xff, 0xa8, 0x01, 0x32, 0xba, 0x01, 0xc7, 0x4b, 0x01, 0xed, 0xd1, 0x01, 0x65, 0x85, 0x02, 0x5a, 0x02, 0x01, 0xd9, 0xaf, 0x00, 0xcd, 0xa3, 0x00, 0xa4, 0x71, 0xff, 0x7c, 0xa6, 0xfe, 0x28, 0x66, 0xfe, 0x23, 0xcf, 0xfe, 0x6e, 0xd4, 0xfe, 0x15, 0xd8, 0x10, 0x52, 0x49, 0x14, 0xa5, 0xb9, 0x04, 0xde, 0x3c, 0x03, 0x82, 0x62, 0x05, 0x85, 0xdf, 0x03, 0x4e, 0x4f, 0x04, 0x43, 0xdf, 0xfd, 0xe0, 0x97, 0xf7, 0xc3, 0xd3, 0xfc, 0xda, 0x29, 0x06, 0x69, 0xa1, 0x03, 0x86, 0x62, 0xfe, 0x5e, 0x0f, 0xff, 0xe9, 0xd8, 0xfd, 0x9b, 0x91, 0xff, 0x4a, 0x9d, 0x01, 0x99, 0x2c, 0x01, 0x26, 0x14, 0x02, 0x88, 0xad, 0x01, 0xde, 0xd0, 0x00, 0xc4, 0x51, 0x00, 0x79, 0x93, 0x01, 0xc7, 0xfc, 0x01, 0x38, 0xfd, 0x00, 0x0d, 0xb6, 0x01, 0xde, 0x58, 0x00, 0x09, 0x27, 0x00, 0xb2, 0x28, 0x01, 0xbd, 0x33, 0xff, 0x17, 0x64, 0xfe, 0x9d, 0xcd, 0xfe, 0xd5, 0xe7, 0x13, 0xd6, 0xeb, 0x16, 0xfb, 0x15, 0x04, 0xaa, 0x47, 0x03, 0x46, 0xcc, 0x05, 0x05, 0x56, 0x03, 0x77, 0xf0, 0x03, 0xfc, 0x54, 0xfc, 0x3f, 0x12, 0xf6, 0x61, 0xf2, 0xfd, 0x90, 0x50, 0x07, 0x6a, 0x89, 0x02, 0xf4, 0x39, 0xfd, 0xb8, 0x7e, 0xfe, 0xb3, 0x4b, 0xfd, 0x27, 0xaa, 0xff, 0x24, 0x6e, 0x01, 0x4f, 0xe6, 0xff, 0xd9, 0x58, 0x01, 0xf2, 0xee, 0x01, 0xcc, 0xad, 0x00, 0x35, 0xdf, 0xff, 0x68, 0xa8, 0x00, 0x53, 0xea, 0x00, 0xf7, 0xc8, 0x00, 0x0d, 0x1a, 0x01, 0xe8, 0x33, 0x00, 0xa0, 0xe1, 0x00, 0x3f, 0xef, 0x00, 0xee, 0x2b, 0x00, 0xdc, 0x8b, 0x00, 0x95, 0x39, 0xff, 0xc1, 0x3a, 0x17, 0xe5, 0x6f, 0x19, 0xe7, 0x3b, 0x03, 0xa0, 0xc0, 0x03, 0x16, 0xb9, 0x06, 0x7c, 0xc3, 0x02, 0x24, 0xf9, 0x02, 0x41, 0x45, 0xfa, 0xdd, 0xd0, 0xf4, 0xc8, 0xdc, 0xff, 0x0e, 0xcb, 0x08, 0xa8, 0x60, 0x01, 0x0f, 0x60, 0xfc, 0x8d, 0xc5, 0xfd, 0xe6, 0x57, 0xfc, 0x71, 0xe6, 0xff, 0x74, 0x33, 0x01, 0xa0, 0x98, 0xff, 0xf3, 0x9f, 0x01, 0x53, 0x27, 0x01, 0x7d, 0xf4, 0xff, 0xea, 0xc7, 0xff, 0xa1, 0x89, 0x00, 0xf2, 0xa5, 0x00, 0x70, 0xe2, 0xff, 0xd3, 0x4d, 0x00, 0x08, 0x8e, 0xff, 0x59, 0x4c, 0x00, 0x8a, 0x5a, 0x01, 0x1b, 0xa3, 0x00, 0x23, 0x98, 0x00, 0x58, 0x89, 0x00, 0x3d, 0xac, 0x1a, 0x2f, 0x29, 0x1c, 0x82, 0x5e, 0x02, 0x59, 0x4b, 0x04, 0xf9, 0xb4, 0x07, 0xcc, 0xf2, 0x01, 0x3b, 0xa9, 0x01, 0x55, 0xe1, 0xf7, 0xcc, 0x15, 0xf4, 0x0c, 0x4e, 0x02, 0x37, 0xc0, 0x09, 0x1e, 0x07, 0x00, 0x67, 0xcf, 0xfb, 0xd8, 0x6d, 0xfd, 0x38, 0x97, 0xfb, 0xf1, 0xe1, 0xff, 0x74, 0xb6, 0x00, 0x5d, 0xce, 0xfe, 0x60, 0x2e, 0x02, 0xc0, 0x7f, 0x01, 0x12, 0x2f, 0xff, 0x1f, 0x11, 0xff, 0xeb, 0x38, 0x00, 0x85, 0x6a, 0x00, 0xe2, 0xdc, 0xff, 0xdf, 0xf8, 0xff, 0x48, 0x25, 0xfe, 0x78, 0x90, 0xff, 0x4b, 0x34, 0x01, 0x6a, 0xd6, 0xff, 0xb6, 0x18, 0x01, 0x85, 0x34, 0x01, 0x53, 0xc5, 0x1d, 0x87, 0x95, 0x1f, 0xf0, 0xee, 0x01, 0x61, 0x42, 0x04, 0xe7, 0x82, 0x08, 0xc0, 0xd3, 0x00, 0x0a, 0x1b, 0x00, 0x5f, 0xb1, 0xf5, 0x98, 0xa5, 0xf3, 0x23, 0xd3, 0x04, 0xf8, 0x20, 0x0a, 0xf4, 0x7a, 0xfe, 0xcc, 0x72, 0xfb, 0xeb, 0x08, 0xfd, 0x2f, 0x49, 0xfb, 0x42, 0x30, 0x00, 0xdb, 0xea, 0xff, 0xd3, 0xc3, 0xfd, 0xe4, 0x63, 0x02, 0x26, 0x9e, 0x01, 0x69, 0xf8, 0xfe, 0xbe, 0x09, 0xff, 0xa5, 0x8d, 0xff, 0x88, 0xb2, 0xff, 0x58, 0xe1, 0xff, 0x48, 0xa3, 0xff, 0x99, 0xb5, 0xfd, 0xa6, 0x16, 0xff, 0xc6, 0xf8, 0xff, 0xe5, 0x94, 0xff, 0x42, 0xab, 0x00, 0x87, 0xe1, 0xff, 0xa0, 0x76, 0x20, 0x71, 0x1a, 0x23, 0x53, 0x28, 0x02, 0xdd, 0x12, 0x04, 0xa8, 0x4a, 0x09, 0xfd, 0xe8, 0xff, 0xf5, 0x66, 0xfe, 0x9f, 0x7a, 0xf3, 0x88, 0x62, 0xf3, 0xfe, 0x5c, 0x07, 0xd3, 0x29, 0x0a, 0x85, 0x22, 0xfd, 0xb1, 0x34, 0xfb, 0xcc, 0x66, 0xfc, 0x12, 0x4f, 0xfb, 0x0e, 0xad, 0x00, 0x02, 0x63, 0xff, 0x9d, 0xdd, 0xfc, 0x3d, 0x26, 0x02, 0xc2, 0x7d, 0x01, 0x8b, 0xbe, 0xfe, 0xf1, 0x49, 0xff, 0x99, 0x68, 0xff, 0xfc, 0x18, 0xff, 0x00, 0x7e, 0xff, 0x6a, 0x5c, 0xff, 0x39, 0x46, 0xfd, 0x5e, 0xea, 0xfe, 0x12, 0x32, 0x00, 0x5c, 0xfd, 0xfd, 0xca, 0x0e, 0xff, 0x8f, 0xd2, 0x00, 0xdd, 0xc1, 0x21, 0xbf, 0xe2, 0x26, 0xcb, 0x05, 0x04, 0x1e, 0x2f, 0x03, 0x03, 0x01, 0x0a, 0xf3, 0x8c, 0xff, 0xd7, 0x72, 0xfc, 0xe0, 0xed, 0xf1, 0x72, 0xbd, 0xf2, 0x44, 0xe9, 0x08, 0xa9, 0x5b, 0x0a, 0xa3, 0x40, 0xfc, 0xec, 0x21, 0xfb, 0x83, 0x65, 0xfb, 0xb8, 0x3b, 0xfb, 0x02, 0x2f, 0x01, 0xd0, 0x0a, 0xff, 0x69, 0x8f, 0xfc, 0xcf, 0xc5, 0x01, 0x02, 0xeb, 0x00, 0x12, 0x4e, 0xfe, 0x0e, 0x6c, 0xff, 0x51, 0x64, 0xff, 0x93, 0xf9, 0xfe, 0xf5, 0x4a, 0xff, 0xc4, 0x8e, 0xfe, 0xe1, 0x67, 0xfd, 0xec, 0x98, 0xfe, 0x18, 0x79, 0xfe, 0x13, 0x3b, 0xfe, 0xa7, 0xe1, 0xff, 0xb1, 0xbd, 0xff, 0xac, 0x2a, 0x21, 0x1f, 0x69, 0x2a, 0xf1, 0x53, 0x08, 0x37, 0x17, 0x02, 0xc8, 0x05, 0x0a, 0xd5, 0x3c, 0x00, 0xab, 0x91, 0xfa, 0xb7, 0x1c, 0xf1, 0xb5, 0xf8, 0xf1, 0x3e, 0xae, 0x08, 0x37, 0xc5, 0x0a, 0x85, 0x25, 0xfc, 0x7d, 0x2b, 0xfb, 0x5f, 0x8a, 0xfa, 0xbd, 0xb8, 0xfa, 0x40, 0x63, 0x01, 0x3d, 0xfc, 0xfe, 0x25, 0x6f, 0xfc, 0xc6, 0x8a, 0x01, 0xa2, 0xbf, 0x00, 0x5b, 0x9f, 0xfd, 0x9c, 0x08, 0xff, 0x87, 0x7f, 0xff, 0x7f, 0xa2, 0xfe, 0x00, 0x90, 0xff, 0xf3, 0xb5, 0xfe, 0x9a, 0xe5, 0xfb, 0xc3, 0xa7, 0xfd, 0xd6, 0x41, 0xff, 0x19, 0x22, 0xfe, 0x58, 0x2a, 0xff, 0xa2, 0xd8, 0xff, 0x2d, 0xbb, 0x1f, 0x68, 0x63, 0x2c, 0x93, 0x08, 0x0e, 0xe5, 0x7d, 0x02, 0x53, 0xb8, 0x08, 0x62, 0x65, 0x01, 0x95, 0x5a, 0xf9, 0x15, 0x52, 0xf0, 0x79, 0x9e, 0xf1, 0xcd, 0x05, 0x07, 0x72, 0xb7, 0x0a, 0xf6, 0x8a, 0xfc, 0x5a, 0x35, 0xfb, 0x76, 0x24, 0xfa, 0x2c, 0xe0, 0xf9, 0xf7, 0x39, 0x01, 0x3b, 0xf4, 0xfe, 0x61, 0x35, 0xfc, 0x9c, 0x6b, 0x01, 0xc9, 0xc6, 0x00, 0xf2, 0x6a, 0xfd, 0x55, 0x53, 0xfe, 0x07, 0xe6, 0xfe, 0xfb, 0x24, 0xff, 0x47, 0x70, 0xff, 0xf1, 0x07, 0xfd, 0xbc, 0xfa, 0xfb, 0x78, 0x31, 0xfe, 0xf8, 0x7c, 0xfe, 0x8b, 0xea, 0xfd, 0x46, 0xd8, 0xfe, 0xd5, 0x94, 0xff, 0x61, 0x30, 0x1f, 0x22, 0xa4, 0x2c, 0x73, 0x40, 0x12, 0x2e, 0xa8, 0x05, 0x5a, 0x76, 0x07, 0xbd, 0x4d, 0x01, 0x1d, 0x6d, 0xf9, 0x9b, 0x6a, 0xef, 0xc3, 0x9c, 0xf1, 0xbc, 0xcc, 0x05, 0x94, 0x9e, 0x09, 0x7e, 0xbb, 0xfc, 0xc9, 0x5f, 0xfb, 0x5e, 0xf7, 0xf9, 0x08, 0x5b, 0xf9, 0x57, 0xf8, 0x00, 0x11, 0x95, 0xfe, 0xf8, 0xf9, 0xfb, 0x08, 0x68, 0x01, 0x40, 0xe3, 0x00, 0xea, 0x76, 0xfd, 0x80, 0x14, 0xfe, 0xf2, 0xf7, 0xfe, 0xfa, 0xb1, 0xfd, 0x3f, 0x90, 0xfe, 0xf9, 0x63, 0xfe, 0xea, 0x90, 0xfb, 0x2b, 0x35, 0xfd, 0x85, 0x5c, 0xfe, 0xa4, 0xad, 0xfd, 0x93, 0xd1, 0xfe, 0x6a, 0x97, 0xff, 0x4a, 0xad, 0x1f, 0xa4, 0x5c, 0x2c, 0xec, 0xea, 0x13, 0xb2, 0xd0, 0x09, 0xfc, 0x3c, 0x08, 0xd2, 0xdf, 0xff, 0xec, 0x7c, 0xf9, 0xad, 0x83, 0xef, 0x6f, 0x7f, 0xf1, 0x6b, 0xdd, 0x04, 0x4f, 0x31, 0x08, 0x31, 0xc3, 0xfc, 0x10, 0x66, 0xfb, 0xf1, 0x6a, 0xf9, 0xe5, 0x44, 0xf9, 0xc1, 0xe0, 0x00, 0x4f, 0x0d, 0xfe, 0x5a, 0x91, 0xfb, 0xef, 0x7e, 0x01, 0x43, 0xa4, 0x00, 0xc8, 0x57, 0xfe, 0x92, 0x98, 0xfe, 0xfe, 0xba, 0xfc, 0x80, 0x77, 0xfd, 0x50, 0x76, 0xff, 0x46, 0xad, 0xfd, 0xfd, 0xaa, 0xfb, 0x64, 0xd0, 0xfc, 0xd5, 0x7f, 0xfd, 0x0e, 0xac, 0xfd, 0x6c, 0x3e, 0xff, 0xb0, 0x0b, 0x00, 0x9d, 0x54, 0x21, 0x86, 0xba, 0x2b, 0x5b, 0x65, 0x13, 0xf7, 0x27, 0x0d, 0x8a, 0xa0, 0x0a, 0x6b, 0x5a, 0xff, 0x54, 0x82, 0xf8, 0x19, 0x8b, 0xf0, 0x01, 0xb4, 0xf2, 0x2a, 0x7e, 0x03, 0xf1, 0x47, 0x06, 0x08, 0xbf, 0xfc, 0x38, 0x20, 0xfc, 0x31, 0x2c, 0xf8, 0x70, 0xa0, 0xf8, 0x83, 0x54, 0x01, 0x41, 0x34, 0xfd, 0x72, 0x05, 0xfb, 0x9b, 0x72, 0x01, 0x04, 0x4d, 0x01, 0x83, 0xf6, 0xfd, 0xc5, 0xcb, 0xfd, 0x3b, 0x17, 0xfe, 0x28, 0x2c, 0xfd, 0xec, 0x60, 0xfe, 0xc5, 0xcd, 0xfd, 0xaa, 0xbd, 0xfb, 0xe2, 0x21, 0xfd, 0xcb, 0xea, 0xfc, 0x29, 0x77, 0xfd, 0x81, 0x89, 0xff, 0xcf, 0x33, 0xff, 0x4c, 0xe8, 0x24, 0x56, 0xb1, 0x2a, 0x13, 0x28, 0x11, 0x19, 0x4b, 0x10, 0x49, 0x40, 0x0c, 0x81, 0xc2, 0xff, 0x0f, 0x68, 0xf7, 0x33, 0x52, 0xf0, 0x48, 0x0c, 0xf6, 0xc2, 0x50, 0x02, 0x10, 0x95, 0x02, 0xb5, 0xbc, 0xfc, 0xcb, 0xe1, 0xfd, 0x56, 0x7b, 0xf7, 0x69, 0x0b, 0xf7, 0x72, 0xdb, 0x01, 0x78, 0xd4, 0xfb, 0x5d, 0xc3, 0xfa, 0xb9, 0xba, 0x02, 0x84, 0x02, 0xff, 0xe3, 0x3b, 0xfe, 0x19, 0x08, 0x00, 0x42, 0x33, 0xfd, 0x90, 0xb5, 0xfc, 0x47, 0xb0, 0xfe, 0x96, 0x57, 0xfd, 0x3e, 0x7b, 0xfb, 0x68, 0xc1, 0xfd, 0x6c, 0x3b, 0xfd, 0x07, 0x8a, 0xfc, 0x53, 0x89, 0xfe, 0x7e, 0x2e, 0xff, 0x20, 0xa5, 0x29, 0xc0, 0xaa, 0x29, 0xd5, 0x01, 0x0d, 0x2b, 0xb9, 0x13, 0xb0, 0x11, 0x0d, 0x9a, 0x7d, 0xff, 0x20, 0x23, 0xf8, 0xb7, 0x4c, 0xef, 0x93, 0x16, 0xfa, 0xa3, 0xbf, 0x02, 0x41, 0xc4, 0xfc, 0xb0, 0xd6, 0xfb, 0xe6, 0x75, 0x00, 0xe2, 0xb6, 0xf7, 0x7a, 0x83, 0xf5, 0x19, 0x29, 0x01, 0x97, 0x56, 0xfb, 0x2c, 0x02, 0xfa, 0x22, 0x95, 0x01, 0x27, 0xc9, 0xfe, 0x98, 0x97, 0xff, 0x6e, 0x18, 0x00, 0xb0, 0x16, 0xfd, 0x16, 0xec, 0xfc, 0x9c, 0x94, 0xfe, 0xd5, 0x52, 0xfd, 0x41, 0x45, 0xfb, 0x6a, 0x5d, 0xfe, 0x10, 0xb6, 0xfc, 0x2d, 0x59, 0xfb, 0x12, 0x41, 0xff, 0xef, 0xa7, 0xff, 0x5e, 0xc4, 0x2e, 0x1d, 0x9e, 0x29, 0x5e, 0x38, 0x07, 0x2b, 0xfd, 0x16, 0xa7, 0xd3, 0x0e, 0x1e, 0x25, 0xfd, 0x94, 0x18, 0xfa, 0xfb, 0x9c, 0xef, 0xdf, 0x76, 0xfd, 0x69, 0x2b, 0x05, 0x61, 0x9d, 0xf6, 0xd3, 0x9e, 0xf8, 0x26, 0xb5, 0x03, 0x72, 0x4f, 0xf9, 0x64, 0xf9, 0xf3, 0xab, 0x96, 0x01, 0x93, 0x87, 0xf9, 0xc9, 0x25, 0xf7, 0x3e, 0xe5, 0x03, 0x3f, 0xcf, 0xfd, 0xe6, 0x68, 0xfe, 0xe0, 0xdb, 0x02, 0xf2, 0xe6, 0xfc, 0x13, 0x6e, 0xfc, 0x7c, 0xe5, 0xfe, 0xe2, 0xba, 0xfd, 0x61, 0xa2, 0xfb, 0xc8, 0xae, 0xfd, 0x50, 0x93, 0xfc, 0xe0, 0xa2, 0xfb, 0x9a, 0x9e, 0xff, 0xd5, 0x25, 0xff, 0xa1, 0x9e, 0x33, 0x60, 0x02, 0x2b, 0x9a, 0x42, 0x00, 0xcc, 0x8f, 0x18, 0x48, 0x65, 0x12, 0xa6, 0x39, 0xf9, 0x51, 0xb9, 0xfa, 0xe7, 0xfb, 0xf1, 0x4f, 0x66, 0x00, 0x8a, 0xaf, 0x08, 0xb0, 0x73, 0xf1, 0xe5, 0xc5, 0xf2, 0xda, 0x90, 0x05, 0xe9, 0x65, 0xfc, 0xa1, 0x80, 0xf4, 0x44, 0x9c, 0xff, 0xa3, 0x36, 0xf7, 0x80, 0x12, 0xf7, 0xa9, 0xa3, 0x03, 0x4e, 0x7f, 0xfc, 0x64, 0x94, 0xfe, 0xac, 0x4a, 0x04, 0xd3, 0x5d, 0xfd, 0x8f, 0xae, 0xfb, 0xa7, 0xde, 0xfe, 0x98, 0x59, 0xfe, 0x3c, 0xb2, 0xfb, 0x9f, 0xca, 0xfd, 0x4e, 0x84, 0xfc, 0x44, 0x1f, 0xfb, 0xb8, 0xb7, 0xff, 0x29, 0x7e, 0xff, 0x96, 0xb0, 0x39, 0xc7, 0x66, 0x2d, 0x15, 0x82, 0xf8, 0xba, 0x4c, 0x17, 0x9c, 0x32, 0x16, 0x29, 0x6f, 0xf6, 0x1c, 0xe9, 0xf9, 0x4b, 0xc6, 0xf4, 0x0b, 0xbe, 0x03, 0x3c, 0x96, 0x0c, 0x6e, 0xa2, 0xee, 0xb4, 0xf0, 0xea, 0x7a, 0x23, 0x05, 0xd0, 0x15, 0x02, 0xe7, 0xfe, 0xf3, 0xa8, 0x6a, 0xfd, 0xd9, 0x91, 0xf7, 0x6f, 0xa5, 0xf4, 0xce, 0xc3, 0x03, 0xea, 0xfa, 0xfc, 0x28, 0xd8, 0xfc, 0x22, 0xcf, 0x05, 0xe2, 0x22, 0xfe, 0x74, 0xf8, 0xfa, 0xc3, 0x03, 0xff, 0xd0, 0x4f, 0xfe, 0xa8, 0xa6, 0xfb, 0x21, 0x56, 0xfe, 0xad, 0x24, 0xfd, 0x53, 0x36, 0xfa, 0x6f, 0xb6, 0xff, 0xb3, 0x3b, 0x00, 0x64, 0x62, 0x41, 0x77, 0xc7, 0x33, 0x6f, 0x6a, 0xef, 0x75, 0xa0, 0x0e, 0x93, 0x35, 0x19, 0x25, 0xbe, 0xf8, 0xb5, 0x20, 0xfb, 0x65, 0xa1, 0xf6, 0xa6, 0xae, 0x03, 0x53, 0x7f, 0x10, 0x6b, 0x04, 0xf0, 0xca, 0x5a, 0xe3, 0xc2, 0x16, 0x03, 0xe4, 0xac, 0x06, 0x8b, 0x81, 0xf4, 0x54, 0x98, 0xfc, 0x68, 0xba, 0xf6, 0xe9, 0x9c, 0xf3, 0x7a, 0x4e, 0x04, 0xc5, 0x23, 0xfd, 0x5d, 0x4d, 0xfc, 0x36, 0x8a, 0x05, 0x70, 0x0e, 0xff, 0x04, 0xa8, 0xfb, 0x83, 0x88, 0xfe, 0x93, 0xeb, 0xfd, 0x5d, 0x63, 0xfb, 0x91, 0x16, 0xff, 0x11, 0x36, 0xfe, 0x5e, 0x33, 0xfa, 0x6e, 0x34, 0xff, 0x00, 0x4d, 0x00, 0x35, 0x19, 0x49, 0x79, 0x88, 0x3a, 0xf9, 0xc7, 0xe6, 0x4c, 0x9a, 0x03, 0xe7, 0xac, 0x1a, 0x77, 0x1a, 0xfd, 0x8d, 0x33, 0xfd, 0x52, 0xa4, 0xf7, 0x8e, 0x47, 0x02, 0xee, 0x15, 0x13, 0x6a, 0xcd, 0xf2, 0x31, 0x4f, 0xde, 0xa4, 0xa0, 0xfe, 0xaf, 0xc1, 0x08, 0xaf, 0x57, 0xf7, 0x7d, 0xc5, 0xfb, 0x3c, 0xb5, 0xf5, 0xb9, 0x73, 0xf3, 0x51, 0x85, 0x03, 0x3d, 0x91, 0xfd, 0x07, 0x25, 0xfc, 0xf0, 0x01, 0x05, 0xf9, 0xce, 0xff, 0x44, 0xa9, 0xfb, 0x8c, 0xc4, 0xfd, 0x2e, 0x6b, 0xfd, 0xce, 0xb0, 0xfb, 0x13, 0x6c, 0xff, 0xd7, 0x81, 0xfe, 0x5c, 0x77, 0xfa, 0x6f, 0x86, 0xfe, 0x28, 0x69, 0x00, 0xe6, 0x8b, 0x50, 0x72, 0x03, 0x41, 0x3f, 0x34, 0xdf, 0xca, 0xf9, 0xf8, 0xc8, 0x4a, 0x1a, 0xe9, 0x36, 0x02, 0x46, 0x93, 0x00, 0x02, 0x17, 0xf8, 0x1b, 0xa0, 0x00, 0x91, 0xd7, 0x14, 0x22, 0x88, 0xf6, 0x72, 0x6d, 0xdb, 0xde, 0x60, 0xf9, 0xa1, 0x06, 0x09, 0x23, 0x0d, 0xfb, 0xdf, 0x2f, 0xfc, 0x0f, 0x49, 0xf4, 0x37, 0x1c, 0xf4, 0xee, 0xe9, 0x02, 0xbf, 0xeb, 0xfc, 0x87, 0xab, 0xfc, 0xb2, 0xee, 0x04, 0xe6, 0xcb, 0xff, 0x36, 0x76, 0xfb, 0x87, 0x96, 0xfd, 0x58, 0x28, 0xfd, 0xc2, 0xde, 0xfb, 0xab, 0x71, 0xff, 0x82, 0x0d, 0xfe, 0x6f, 0x17, 0xfb, 0x40, 0xad, 0xfe, 0x55, 0x75, 0x00, 0x73, 0xa5, 0x59, 0x35, 0xce, 0x43, 0xc6, 0x4e, 0xd7, 0x1e, 0x5b, 0xf2, 0xab, 0xae, 0x17, 0x83, 0x37, 0x06, 0x53, 0x59, 0x04, 0x2a, 0xb2, 0xf6, 0xa0, 0x6f, 0xff, 0xe7, 0xa3, 0x17, 0x23, 0xd7, 0xf9, 0xbf, 0xb4, 0xd7, 0xe7, 0xe5, 0xf4, 0x0f, 0x0a, 0x09, 0x88, 0x52, 0xfd, 0x21, 0x11, 0xfe, 0x4f, 0x21, 0xf3, 0x69, 0xaf, 0xf4, 0xf8, 0x83, 0x02, 0x51, 0x96, 0xfa, 0x4d, 0xd2, 0xfd, 0x1d, 0x6b, 0x05, 0xd6, 0xe3, 0xfe, 0xd8, 0x08, 0xfb, 0xd7, 0xb6, 0xfd, 0x86, 0x3c, 0xfd, 0x81, 0xda, 0xfa, 0xd8, 0x31, 0xff, 0x36, 0xf5, 0xfd, 0xf8, 0x8c, 0xfb, 0x5b, 0x0d, 0xff, 0xd0, 0xba, 0xff, 0x42, 0x9e, 0x61, 0x0c, 0x77, 0x46, 0x14, 0xa5, 0xd0, 0xb5, 0xc8, 0xee, 0x3c, 0x25, 0x15, 0x85, 0x06, 0x08, 0x6e, 0x5a, 0x08, 0x30, 0x42, 0xf4, 0x34, 0xef, 0xfe, 0x28, 0xb5, 0x1d, 0x78, 0xba, 0xfc, 0x7d, 0x9c, 0xd2, 0x46, 0x15, 0xf2, 0x51, 0x9c, 0x09, 0x08, 0xb9, 0xfd, 0x7f, 0xb9, 0x01, 0x86, 0x4d, 0xf4, 0x6e, 0x9a, 0xf3, 0xd6, 0x9e, 0x01, 0x86, 0x24, 0xf9, 0x70, 0x3b, 0xff, 0x08, 0xca, 0x05, 0x9e, 0xbc, 0xfd, 0x40, 0x3d, 0xfb, 0x51, 0x6a, 0xfe, 0x58, 0x2d, 0xfd, 0x71, 0x4f, 0xf9, 0x69, 0x41, 0xff, 0x2d, 0x9c, 0xfe, 0x94, 0x63, 0xfb, 0x69, 0x2c, 0xff, 0xc4, 0x6b, 0xff, 0x06, 0x80, 0x68, 0x32, 0x35, 0x48, 0x9f, 0x9c, 0xca, 0x90, 0xd7, 0xed, 0xdf, 0x8c, 0x12, 0x0c, 0xaa, 0x06, 0x3a, 0xb4, 0x0b, 0xc9, 0x67, 0xf0, 0x64, 0xf1, 0xfe, 0x48, 0x07, 0x26, 0x54, 0x9e, 0xfc, 0x18, 0x02, 0xce, 0x85, 0x47, 0xf1, 0xb8, 0xa4, 0x07, 0x8b, 0xce, 0xfd, 0x0f, 0x29, 0x06, 0xb5, 0xd1, 0xf5, 0xc4, 0xa5, 0xf1, 0xb2, 0x0b, 0x00, 0x7b, 0x05, 0xf9, 0xa3, 0xa1, 0xff, 0x8b, 0xfa, 0x04, 0x9d, 0xdc, 0xfc, 0x3c, 0xd0, 0xfb, 0x67, 0x2d, 0xff, 0xb8, 0x83, 0xfc, 0xf1, 0xe3, 0xf7, 0x95, 0xcf, 0xfe, 0x53, 0xf1, 0xfe, 0xab, 0x67, 0xfb, 0x1d, 0xd6, 0xfe, 0xca, 0x71, 0xff, 0xb2, 0x5a, 0x6e, 0xd4, 0xab, 0x49, 0x03, 0xd1, 0xc5, 0xcb, 0xc5, 0xee, 0xa2, 0x3c, 0x10, 0x23, 0x89, 0x03, 0x73, 0x27, 0x0e, 0x38, 0x25, 0xec, 0x94, 0xea, 0xff, 0x3b, 0x4e, 0x2e, 0x36, 0x49, 0xfb, 0x98, 0x34, 0xcc, 0xc5, 0xd5, 0xf0, 0x17, 0x0c, 0x04, 0x07, 0x9e, 0xfe, 0x42, 0xf0, 0x09, 0x3e, 0xca, 0xf7, 0x5a, 0xf6, 0xef, 0x50, 0xb6, 0xfe, 0x70, 0xfb, 0xf9, 0xb7, 0x55, 0xfe, 0x05, 0xa6, 0x03, 0x6d, 0x1a, 0xfd, 0xb5, 0x98, 0xfc, 0xce, 0xb5, 0xff, 0x64, 0xaf, 0xfb, 0x07, 0xd1, 0xf6, 0x3e, 0x27, 0xfe, 0xc4, 0x60, 0xff, 0x59, 0x89, 0xfb, 0xc2, 0x7c, 0xfe, 0x81, 0x99, 0xff, 0x13, 0x54, 0x74, 0xc2, 0x47, 0x4a, 0x4e, 0x1b, 0xc2, 0x38, 0xf1, 0xf0, 0x8f, 0x60, 0x0d, 0x59, 0xba, 0x00, 0xb3, 0xa2, 0x0f, 0x26, 0xc0, 0xe7, 0xa5, 0xf0, 0x01, 0x50, 0x39, 0x34, 0x97, 0xd3, 0xfa, 0x4c, 0x4e, 0xcd, 0xcd, 0x81, 0xef, 0xd4, 0xb2, 0x00, 0x40, 0x36, 0xff, 0x69, 0xcb, 0x0c, 0x4a, 0x7e, 0xfa, 0x77, 0xb3, 0xee, 0xfc, 0x34, 0xfe, 0xe5, 0x17, 0xfb, 0xa5, 0x0d, 0xfc, 0x6a, 0x02, 0x02, 0xba, 0x4d, 0xfe, 0x33, 0xd2, 0xfd, 0xdf, 0x63, 0xff, 0xd8, 0xf6, 0xfa, 0x4b, 0x43, 0xf6, 0x0e, 0xbd, 0xfd, 0x9f, 0xf4, 0xff, 0x3b, 0xa1, 0xfb, 0x6c, 0xfe, 0xfd, 0x44, 0xb1, 0xff, 0x1e, 0xf0, 0x77, 0x9a, 0xe3, 0x4c, 0x71, 0xc4, 0xbf, 0xc5, 0x6b, 0xf1, 0x93, 0xd6, 0x0a, 0x06, 0x48, 0xfe, 0x33, 0x37, 0x10, 0x46, 0xde, 0xe3, 0x19, 0xb6, 0x02, 0x77, 0xdf, 0x36, 0xb0, 0xde, 0xfc, 0xa8, 0x6b, 0xd0, 0xbc, 0xa2, 0xec, 0x05, 0xff, 0xfd, 0xb1, 0x9a, 0xfe, 0x30, 0xb5, 0x0e, 0x22, 0xbb, 0xfd, 0x4f, 0x65, 0xed, 0x54, 0x57, 0xfe, 0x9b, 0xd0, 0xfb, 0x71, 0x33, 0xf9, 0x52, 0x21, 0x00, 0xc9, 0xcc, 0xff, 0xf4, 0x00, 0xff, 0xcb, 0x31, 0xfe, 0x65, 0xb1, 0xfa, 0xff, 0xbf, 0xf5, 0xa8, 0x60, 0xfd, 0xbb, 0xf7, 0x00, 0xfb, 0xdc, 0xfa, 0x65, 0x54, 0xfd, 0x38, 0x7d, 0x00, 0xdb, 0x88, 0x7b, 0x67, 0xb3, 0x4e, 0x5b, 0xce, 0xbe, 0x18, 0x94, 0xf1, 0x56, 0x74, 0x07, 0xce, 0x76, 0xfd, 0xae, 0xc9, 0x0f, 0xde, 0x25, 0xe0, 0x29, 0x62, 0x03, 0xa4, 0xeb, 0x36, 0x7b, 0x4e, 0x00, 0x73, 0xae, 0xd4, 0x0d, 0xbe, 0xe9, 0x19, 0xe6, 0xfb, 0x9e, 0x08, 0xfd, 0xe1, 0x67, 0x10, 0x0e, 0xdb, 0x00, 0x7f, 0x66, 0xec, 0xd3, 0xf6, 0xfe, 0xd3, 0x20, 0xfc, 0xea, 0x9e, 0xf6, 0xe8, 0x62, 0xfe, 0x23, 0x26, 0x01, 0x67, 0x9b, 0xff, 0x0e, 0x48, 0xfd, 0x3e, 0xf0, 0xfa, 0xa6, 0xb6, 0xf4, 0xf5, 0xb2, 0xfd, 0x9e, 0xda, 0x01, 0x0a, 0xa2, 0xf9, 0xa5, 0x9d, 0xfd, 0x43, 0x14, 0x01, 0x31, 0x5c, 0x7e, 0x97, 0x01, 0x50, 0x5b, 0x78, 0xbf, 0x7c, 0x67, 0xf1, 0x16, 0xfe, 0x03, 0xa2, 0x5c, 0xfd, 0xfe, 0xb5, 0x0e, 0x14, 0x6a, 0xdd, 0x10, 0x8d, 0x02, 0xf7, 0x4b, 0x35, 0x86, 0x2e, 0x05, 0x36, 0xf8, 0xd8, 0x97, 0x9c, 0xe7, 0x4b, 0x5e, 0xfa, 0x5c, 0xd4, 0xfa, 0x6f, 0xb1, 0x11, 0xeb, 0x77, 0x03, 0x38, 0x25, 0xec, 0x4e, 0x6b, 0xff, 0xee, 0xf7, 0xfb, 0x7f, 0xf7, 0xf4, 0xb1, 0xde, 0xfc, 0x24, 0xdb, 0x01, 0x42, 0xc0, 0xff, 0x36, 0xb9, 0xfc, 0xc4, 0x9d, 0xfb, 0x60, 0xff, 0xf3, 0xf2, 0x95, 0xfd, 0xa0, 0x3a, 0x02, 0x7e, 0x83, 0xf9, 0x7d, 0xea, 0xfd, 0x58, 0x7b, 0x00, 0x90, 0xbb, 0x7e, 0x9a, 0x23, 0x53, 0x6e, 0xf4, 0xc1, 0x6a, 0xd8, 0xef, 0x2d, 0xaa, 0x01, 0x68, 0xf9, 0xfb, 0xa6, 0x5a, 0x0e, 0xc0, 0x9f, 0xdc, 0xc4, 0xb7, 0xfd, 0x5e, 0xb1, 0x33, 0x1f, 0x98, 0x0b, 0x4d, 0xa3, 0xdc, 0x2d, 0xd6, 0xe6, 0x41, 0xd7, 0xf8, 0x91, 0x93, 0xf8, 0xfb, 0x49, 0x12, 0x2a, 0x85, 0x05, 0x5c, 0x19, 0xed, 0xe6, 0x40, 0xff, 0xaa, 0x41, 0xfb, 0x35, 0x4e, 0xf4, 0xb0, 0xcc, 0xfb, 0x18, 0xcb, 0x01, 0x27, 0x85, 0xff, 0x13, 0x65, 0xfc, 0x84, 0xc8, 0xfc, 0x12, 0xd6, 0xf3, 0x73, 0x65, 0xfc, 0xd4, 0xb5, 0x02, 0x36, 0x1e, 0xfa, 0xa1, 0x3f, 0xfd, 0xb8, 0xe2, 0xff, 0x8a, 0x99, 0x7c, 0x4d, 0x39, 0x57, 0x3a, 0xa3, 0xc6, 0x30, 0x41, 0xee, 0x5f, 0x29, 0x00, 0x24, 0xae, 0xf8, 0x26, 0x15, 0x0f, 0x6c, 0x8e, 0xdd, 0xbb, 0x01, 0xf5, 0xb2, 0xae, 0x32, 0x13, 0xfb, 0x12, 0x8e, 0x90, 0xdf, 0x54, 0xcd, 0xe7, 0xc0, 0x4d, 0xf7, 0x3f, 0x33, 0xf6, 0x2a, 0xe2, 0x11, 0x97, 0x37, 0x07, 0xf3, 0x82, 0xef, 0xe2, 0x6d, 0xfe, 0x8d, 0x17, 0xfa, 0x18, 0x26, 0xf4, 0x6f, 0x82, 0xfb, 0xb6, 0x7a, 0x01, 0x1e, 0x67, 0xfe, 0x90, 0xdb, 0xfc, 0x47, 0xeb, 0xfd, 0x41, 0xac, 0xf3, 0x98, 0xa6, 0xfb, 0x2a, 0x29, 0x02, 0x7d, 0x74, 0xfa, 0x0c, 0x08, 0xfd, 0x45, 0x0a, 0xff, 0x20, 0x50, 0x78, 0x87, 0x5d, 0x5b, 0xb7, 0x51, 0xcd, 0x64, 0xa9, 0xed, 0x14, 0x1a, 0xff, 0x00, 0x16, 0xf4, 0xfd, 0xb0, 0x10, 0xf7, 0xfb, 0xde, 0x9b, 0xcc, 0xe9, 0x55, 0x12, 0x32, 0xcb, 0xe1, 0x1a, 0x25, 0x27, 0xe2, 0x71, 0xc7, 0xe9, 0xe1, 0xd0, 0xf6, 0xe9, 0xa0, 0xf3, 0xa9, 0x0e, 0x10, 0xef, 0x45, 0x09, 0x98, 0xb6, 0xf2, 0xfb, 0x45, 0xfd, 0x9f, 0x79, 0xf8, 0xbb, 0x5d, 0xf4, 0x90, 0x49, 0xfc, 0xf2, 0x97, 0x00, 0x74, 0x04, 0xfd, 0xe8, 0x97, 0xfd, 0x65, 0xcd, 0xfe, 0xaa, 0xd0, 0xf3, 0x2f, 0x84, 0xfa, 0x8e, 0x53, 0x01, 0x76, 0xcc, 0xfa, 0x23, 0x86, 0xfc, 0x9b, 0xe8, 0xfe, 0x74, 0x25, 0x72, 0xf6, 0x84, 0x5e, 0x44, 0x41, 0xd6, 0x47, 0x80, 0xee, 0xfa, 0x59, 0xfd, 0x35, 0x7a, 0xef, 0x90, 0x66, 0x12, 0x3c, 0x5b, 0xe0, 0x21, 0x2c, 0xde, 0x81, 0xf0, 0x2f, 0x51, 0xc5, 0x22, 0x58, 0x33, 0xe5, 0x62, 0x29, 0xec, 0x88, 0x17, 0xf8, 0x01, 0x67, 0xf0, 0x9a, 0x90, 0x0c, 0xe2, 0xdc, 0x0b, 0x9e, 0x11, 0xf6, 0x62, 0x90, 0xfb, 0x53, 0x77, 0xf7, 0xe8, 0xf5, 0xf4, 0x71, 0x74, 0xfc, 0x94, 0x55, 0x00, 0xca, 0x6e, 0xfb, 0x9a, 0x8d, 0xfd, 0xf9, 0xeb, 0xff, 0xd8, 0x2b, 0xf3, 0xcf, 0xe6, 0xf9, 0xe1, 0x72, 0x00, 0x0b, 0x03, 0xfa, 0x0a, 0x6f, 0xfd, 0x64, 0xaf, 0xff, 0x81, 0x08, 0x6b, 0x97, 0xed, 0x60, 0x5b, 0xcd, 0xe0, 0xe4, 0x39, 0xf0, 0x54, 0xb6, 0xfa, 0x02, 0x3f, 0xec, 0x93, 0xda, 0x13, 0xd1, 0x0f, 0xe2, 0x1e, 0x74, 0xd4, 0x4b, 0x11, 0x2a, 0x06, 0x7b, 0x2a, 0xd0, 0x56, 0xea, 0x80, 0x98, 0xed, 0x17, 0x42, 0xfc, 0x24, 0xcb, 0xec, 0x4e, 0x88, 0x07, 0xba, 0x73, 0x0f, 0x71, 0x32, 0xf8, 0xaa, 0xf9, 0xfa, 0x42, 0x82, 0xf7, 0xc3, 0x13, 0xf5, 0x96, 0x5f, 0xfc, 0xcf, 0x84, 0x00, 0xbe, 0xd7, 0xfa, 0x67, 0x2e, 0xfb, 0xa1, 0xfd, 0x00, 0xd8, 0x49, 0xf4, 0x80, 0xd1, 0xf7, 0xc2, 0x01, 0x00, 0x33, 0x9c, 0xfa, 0xbc, 0x75, 0xfe, 0x57, 0x7e, 0x00, 0x24, 0x6c, 0x64, 0x8e, 0x05, 0x62, 0xe3, 0xea, 0xe9, 0x34, 0x03, 0xf2, 0x77, 0xa2, 0xf9, 0x54, 0x5c, 0xea, 0xcd, 0xb4, 0x11, 0x27, 0x59, 0xe4, 0x11, 0x92, 0xcf, 0xc2, 0x7b, 0x1f, 0xd5, 0xb8, 0x2f, 0x58, 0x26, 0xf3, 0x19, 0x1b, 0xed, 0x5f, 0xeb, 0x00, 0xae, 0x2e, 0xeb, 0xef, 0x3e, 0x00, 0xd7, 0x1b, 0x13, 0x1c, 0x5b, 0xfa, 0x4f, 0x16, 0xfa, 0xb5, 0x16, 0xf9, 0xcc, 0x3f, 0xf4, 0xdb, 0x38, 0xfb, 0x1f, 0x54, 0x01, 0x20, 0xfa, 0xf9, 0x9e, 0x3d, 0xf8, 0xb0, 0x78, 0x01, 0xde, 0xe5, 0xf4, 0x08, 0xd2, 0xf6, 0xfb, 0x01, 0x01, 0xdf, 0x92, 0xfa, 0xec, 0xe5, 0xfe, 0x68, 0x5d, 0x02, 0xe6, 0xa3, 0x5f, 0x60, 0xa2, 0x61, 0xe8, 0xf8, 0xee, 0x25, 0x79, 0xf3, 0x88, 0x9e, 0xfc, 0x54, 0xc0, 0xe9, 0x49, 0x1e, 0x0a, 0xc2, 0x8a, 0xe6, 0x1f, 0x15, 0xd0, 0x81, 0xf6, 0x12, 0x17, 0x7e, 0x31, 0x1d, 0x84, 0xfd, 0x63, 0x59, 0xec, 0x2d, 0x09, 0x04, 0x2e, 0xac, 0xeb, 0x1e, 0xff, 0xf8, 0xe2, 0xf5, 0x14, 0x8b, 0xa3, 0xfd, 0x8e, 0x20, 0xf9, 0xdc, 0xa9, 0xfa, 0xce, 0x20, 0xf4, 0x14, 0xb0, 0xf7, 0xfc, 0xf4, 0x00, 0xd8, 0x68, 0xfb, 0x81, 0xb3, 0xf4, 0xd2, 0x88, 0xff, 0x67, 0x3c, 0xf7, 0x41, 0x1f, 0xf7, 0xba, 0x83, 0x01, 0x16, 0xe0, 0xfa, 0x35, 0x23, 0xff, 0x13, 0xd0, 0x03, 0x30, 0x02, 0x5e, 0x2b, 0xa0, 0x5d, 0x79, 0x99, 0xf0, 0x98, 0xe3, 0xf7, 0xd2, 0xa4, 0x00, 0xce, 0x8d, 0xea, 0xe6, 0xfe, 0x00, 0xbb, 0x4c, 0xe7, 0xd4, 0xc1, 0xd3, 0x2f, 0x4c, 0x08, 0x14, 0x3a, 0x32, 0x56, 0xb7, 0x04, 0x80, 0xdf, 0xec, 0x20, 0x9d, 0x07, 0xd9, 0xb8, 0xea, 0xb0, 0xdd, 0xf4, 0x84, 0xe9, 0x15, 0x84, 0x0d, 0x00, 0x3e, 0x4a, 0xfa, 0x2b, 0x8b, 0xfb, 0xed, 0x10, 0xf3, 0xea, 0x94, 0xf4, 0x4b, 0xfd, 0x00, 0xd7, 0x09, 0xfb, 0x2c, 0x2b, 0xf2, 0xc2, 0x0d, 0x00, 0xe0, 0x4c, 0xf8, 0x24, 0xba, 0xf7, 0x9d, 0xcd, 0x02, 0x2a, 0xc6, 0xfa, 0x33, 0x4b, 0xff, 0x80, 0x92, 0x04, 0x9d, 0xe8, 0x5c, 0x79, 0x1d, 0x59, 0x60, 0x48, 0xf0, 0x13, 0xd9, 0xfc, 0x0f, 0xae, 0x05, 0xd8, 0x69, 0xea, 0x86, 0x19, 0xf8, 0x02, 0x95, 0xe9, 0x00, 0xa9, 0xd8, 0xd4, 0xf9, 0xfc, 0x8c, 0xdb, 0x32, 0xc4, 0xd3, 0x0b, 0xad, 0xe5, 0xe9, 0xc8, 0x2c, 0x0c, 0x5b, 0xae, 0xec, 0xfb, 0x59, 0xef, 0xc3, 0x91, 0x17, 0x32, 0x35, 0x03, 0x41, 0x46, 0xfa, 0x9f, 0x8b, 0xfb, 0xe8, 0x9d, 0xf3, 0xc8, 0xff, 0xf2, 0x02, 0xfc, 0xfd, 0xfc, 0xba, 0xfa, 0xe4, 0x6e, 0xf1, 0x1c, 0xae, 0x00, 0xee, 0xb9, 0xfa, 0xea, 0xd4, 0xf6, 0xc9, 0xd4, 0x02, 0x11, 0xfa, 0xfb, 0xbf, 0x84, 0xff, 0x7a, 0x86, 0x04, 0xc4, 0xb2, 0x5d, 0x09, 0x81, 0x54, 0x39, 0x0c, 0xed, 0x87, 0x56, 0x00, 0x3a, 0x2e, 0x0a, 0x53, 0xf7, 0xe9, 0x57, 0x9f, 0xf1, 0xea, 0xfb, 0xec, 0x7c, 0x6c, 0xe0, 0x74, 0x1b, 0xf3, 0x47, 0x1a, 0x2e, 0xcc, 0xaa, 0x14, 0x46, 0x63, 0xe5, 0x83, 0x03, 0x0c, 0xab, 0x58, 0xf5, 0x19, 0x0e, 0xe9, 0x2d, 0x31, 0x17, 0x49, 0x20, 0x09, 0xc0, 0x93, 0xf6, 0x24, 0x52, 0xfc, 0x83, 0x69, 0xf6, 0x30, 0xba, 0xf0, 0xe7, 0x4a, 0xfb, 0xdf, 0x9a, 0xfa, 0x71, 0x03, 0xf1, 0xef, 0xb5, 0x00, 0x5f, 0x54, 0xfe, 0x14, 0x67, 0xf5, 0xb9, 0x2d, 0x01, 0xdc, 0x9f, 0xfe, 0xbe, 0x7f, 0xfe, 0x8e, 0xff, 0x03, 0xfb, 0x36, 0x5c, 0x4a, 0x0b, 0x51, 0xff, 0xd5, 0xea, 0xf7, 0xbd, 0x03, 0xb5, 0x67, 0x0e, 0x65, 0xfa, 0xe8, 0x79, 0x1d, 0xee, 0x53, 0xd1, 0xee, 0x18, 0x2a, 0xe6, 0x29, 0xdb, 0xec, 0x15, 0xba, 0x26, 0xd2, 0xfb, 0x1d, 0x88, 0x1a, 0xe5, 0x74, 0x41, 0x05, 0xa3, 0x59, 0xfe, 0x87, 0xd7, 0xe7, 0xf4, 0x75, 0x11, 0xcc, 0xae, 0x10, 0x60, 0x68, 0xf6, 0x06, 0x5b, 0xf9, 0x54, 0xbb, 0xf9, 0x0d, 0x89, 0xf0, 0x2e, 0x89, 0xf9, 0x09, 0x83, 0xfa, 0x2c, 0x0f, 0xf0, 0x52, 0xe5, 0xff, 0x75, 0x7d, 0x00, 0xa4, 0xa7, 0xf5, 0x84, 0x4f, 0xff, 0x9b, 0x59, 0xff, 0x3d, 0x62, 0xfe, 0x63, 0x7d, 0x03, 0x19, 0x8b, 0x5a, 0x0d, 0x98, 0x4b, 0x58, 0xda, 0xe8, 0x79, 0x50, 0x09, 0xc8, 0x36, 0x10, 0xb2, 0xdb, 0xe6, 0x98, 0x79, 0xef, 0x9d, 0x95, 0xf0, 0x08, 0xc3, 0xe7, 0x14, 0x34, 0xe9, 0x62, 0xae, 0x21, 0xb7, 0xd4, 0x22, 0xdd, 0x5e, 0xe6, 0xf4, 0x17, 0x00, 0xaa, 0xcc, 0x00, 0x73, 0x6a, 0xea, 0xd6, 0x12, 0x0f, 0xf0, 0xbe, 0x12, 0x5b, 0xa0, 0xf8, 0x17, 0x5c, 0xf7, 0x0d, 0x81, 0xfb, 0xba, 0x02, 0xf2, 0xad, 0x0d, 0xf8, 0xd6, 0x51, 0xfc, 0x33, 0x12, 0xef, 0x1f, 0xde, 0xfb, 0xc9, 0x18, 0x01, 0x60, 0x42, 0xf7, 0x2a, 0x09, 0xff, 0xc9, 0x1f, 0xff, 0xf7, 0xd2, 0xfd, 0x49, 0x08, 0x03, 0x41, 0xd4, 0x58, 0x2e, 0x4f, 0x47, 0x77, 0x82, 0xe6, 0x19, 0x6a, 0x0d, 0x8f, 0xf0, 0x10, 0x3a, 0x7d, 0xe2, 0x63, 0x6f, 0xf2, 0x2c, 0xc5, 0xf6, 0xd5, 0x84, 0xe9, 0x57, 0x53, 0xe3, 0xb8, 0xf3, 0x1b, 0x7d, 0xd7, 0x28, 0x85, 0xc8, 0xe5, 0x97, 0xc0, 0xf9, 0x69, 0x31, 0x07, 0xe9, 0xe3, 0xeb, 0xd7, 0x6b, 0x09, 0x08, 0x9f, 0x15, 0x42, 0xe3, 0xfb, 0xac, 0x81, 0xf6, 0x77, 0x58, 0xfc, 0xaa, 0x0e, 0xf3, 0xce, 0xc2, 0xf7, 0x1b, 0xeb, 0xfe, 0x9a, 0xa0, 0xef, 0x0e, 0x90, 0xf5, 0xd2, 0x14, 0xff, 0x13, 0xbb, 0xf9, 0xac, 0x7e, 0xff, 0x25, 0xbc, 0x00, 0x54, 0xfe, 0xfc, 0x6a, 0xe1, 0xff, 0xb8, 0xb1, 0x55, 0x0b, 0x7a, 0x45, 0x47, 0xd6, 0xe1, 0x81, 0xf7, 0x0e, 0xdb, 0xd2, 0x17, 0x8b, 0x26, 0xde, 0xd6, 0xf9, 0xf1, 0x8a, 0x4c, 0xfd, 0x83, 0x17, 0xed, 0x1c, 0x97, 0xdf, 0x5e, 0xef, 0x11, 0x78, 0xb7, 0x2d, 0xa8, 0xc9, 0xea, 0xfc, 0x7e, 0xf1, 0x43, 0xfa, 0x0b, 0xc3, 0x82, 0xf0, 0x81, 0x1e, 0x00, 0xd4, 0x34, 0x17, 0x1c, 0xeb, 0x02, 0xf5, 0x81, 0xf4, 0x86, 0xa1, 0xfd, 0xff, 0x01, 0xf5, 0xa7, 0x8e, 0xf5, 0x22, 0x80, 0x02, 0xd5, 0x8c, 0xf1, 0x36, 0x4c, 0xef, 0x33, 0xa2, 0xfc, 0x0e, 0x54, 0xfb, 0x86, 0xec, 0xfe, 0x68, 0xc4, 0x02, 0xa1, 0x85, 0xfe, 0x41, 0x12, 0xfc, 0xed, 0x78, 0x53, 0xd0, 0xef, 0x40, 0x09, 0x3d, 0xdf, 0x99, 0xeb, 0x10, 0xc0, 0x2d, 0x1c, 0x71, 0xed, 0xdf, 0x24, 0x6b, 0xef, 0x18, 0xc7, 0xfe, 0xfb, 0xa5, 0xf5, 0x0b, 0x20, 0xdd, 0xa5, 0x7f, 0x06, 0x1f, 0x70, 0x31, 0xdd, 0xd1, 0xf0, 0xd8, 0x5a, 0xec, 0xec, 0xe5, 0x0d, 0x30, 0x59, 0xf5, 0x21, 0x8f, 0xfa, 0x3d, 0x0f, 0x14, 0x55, 0x8b, 0x08, 0xf1, 0x73, 0xf7, 0xf9, 0x63, 0xfd, 0xb9, 0xf5, 0xf6, 0x49, 0x96, 0xf5, 0x04, 0x3f, 0x02, 0x08, 0x5a, 0xf3, 0xfd, 0x49, 0xee, 0xff, 0xe9, 0xfa, 0x68, 0x42, 0xfa, 0x14, 0x97, 0xfd, 0x3c, 0x4c, 0x04, 0xb4, 0x7d, 0x00, 0x04, 0xa2, 0xfb, 0xb2, 0xa4, 0x4f, 0x20, 0x46, 0x3b, 0x3e, 0x86, 0xde, 0x62, 0x8f, 0x14, 0xf2, 0xcd, 0x1d, 0x2f, 0x13, 0xe0, 0x0f, 0x6e, 0xf1, 0x42, 0xb0, 0xff, 0x62, 0xf1, 0xf6, 0x08, 0xb2, 0xde, 0x8f, 0x68, 0x01, 0x67, 0x3d, 0x2e, 0x8b, 0x5a, 0xf4, 0xa4, 0x64, 0xec, 0x9a, 0x36, 0x0f, 0xca, 0x18, 0xf8, 0xd8, 0x7f, 0xf6, 0xfc, 0xed, 0x10, 0x95, 0x50, 0x0a, 0x59, 0x67, 0xfa, 0x03, 0x06, 0xff, 0xc0, 0xef, 0xf7, 0xe7, 0x9d, 0xf6, 0xbc, 0x4c, 0x00, 0xad, 0x7d, 0xf3, 0xf3, 0x78, 0xf0, 0xef, 0x9a, 0xfa, 0x02, 0x56, 0xf9, 0x8e, 0x23, 0xfb, 0x3a, 0x55, 0x03, 0xee, 0xd7, 0x01, 0xe8, 0x10, 0xfd, 0x9f, 0x62, 0x4a, 0x5a, 0xa1, 0x34, 0xf9, 0x06, 0xe1, 0x32, 0x6f, 0x18, 0x42, 0x26, 0x1c, 0x14, 0x7e, 0xe1, 0x5a, 0xce, 0xf4, 0x22, 0x51, 0xff, 0x70, 0xca, 0xf6, 0x32, 0x36, 0xe1, 0x3b, 0x13, 0xff, 0x6f, 0x60, 0x29, 0xd3, 0x40, 0xf6, 0x56, 0xb2, 0xed, 0xfc, 0x05, 0x10, 0xd2, 0x96, 0xfb, 0xb3, 0xe0, 0xf2, 0x7b, 0x53, 0x0d, 0xae, 0xbb, 0x0c, 0x6e, 0xc5, 0xf9, 0x90, 0xcb, 0xff, 0xe2, 0xef, 0xfb, 0x12, 0xe3, 0xf5, 0x05, 0x18, 0xff, 0x2b, 0x61, 0xf4, 0xfb, 0x83, 0xf0, 0xe0, 0x75, 0xfc, 0x4d, 0x9b, 0xfa, 0xa4, 0x9d, 0xf8, 0xd2, 0xa2, 0x00, 0xc4, 0xcc, 0x01, 0x77, 0x86, 0xfe, 0xf5, 0x73, 0x43, 0x25, 0xe7, 0x2e, 0xd0, 0xeb, 0xe5, 0xac, 0x89, 0x1a, 0x50, 0x22, 0x1a, 0x05, 0x3e, 0xe4, 0x83, 0x13, 0xf7, 0xcb, 0x50, 0xff, 0x87, 0xdb, 0xf7, 0x78, 0x90, 0xe3, 0x8d, 0x6d, 0xfc, 0x7c, 0xd6, 0x24, 0x44, 0x49, 0xf9, 0x77, 0x87, 0xee, 0xe0, 0xc9, 0x0e, 0x7b, 0xe1, 0xff, 0x2f, 0xfc, 0xf1, 0xd7, 0xc2, 0x08, 0xb7, 0xbd, 0x0d, 0x74, 0x85, 0xfa, 0xd5, 0x39, 0xfe, 0x23, 0x48, 0xfe, 0x2b, 0x47, 0xf8, 0x39, 0x7f, 0xfd, 0x8b, 0x3a, 0xf5, 0x86, 0x34, 0xf2, 0x47, 0xa9, 0xfc, 0x01, 0xa3, 0xfc, 0x6a, 0x39, 0xf8, 0xd3, 0xe2, 0xfd, 0x04, 0x18, 0x01, 0xe0, 0xb0, 0xfe, 0xe7, 0xf1, 0x41, 0x6b, 0xa8, 0x26, 0xfb, 0x66, 0xe0, 0x06, 0xb2, 0x20, 0x07, 0x6a, 0x24, 0xad, 0xe5, 0xe1, 0x31, 0x48, 0xed, 0x7d, 0x0d, 0x02, 0xb7, 0xa4, 0xfc, 0x8a, 0x58, 0xe9, 0xc3, 0xdc, 0x01, 0xe3, 0xae, 0x18, 0x95, 0xd6, 0xf1, 0x42, 0xbd, 0xf4, 0xc6, 0x8e, 0x0d, 0x03, 0xff, 0xfd, 0xf9, 0xc8, 0xf7, 0x32, 0x92, 0x07, 0x7c, 0x89, 0x05, 0x57, 0xc9, 0xfb, 0x98, 0xd1, 0x02, 0xc7, 0x09, 0x00, 0x95, 0xaf, 0xfe, 0x8c, 0xab, 0x04, 0x72, 0x54, 0xfb, 0xcb, 0x70, 0xf9, 0x0c, 0xb7, 0x00, 0x65, 0xae, 0xfc, 0x0a, 0x42, 0xf9, 0xd5, 0x09, 0xfe, 0x21, 0x2c, 0xfc, 0x17, 0xbc, 0xf8, 0xbc, 0x8f, 0x38, 0xd6, 0x74, 0x23, 0x04, 0x3e, 0xe8, 0x21, 0x26, 0x1d, 0x50, 0xb9, 0x1f, 0x01, 0x3b, 0xe8, 0xff, 0xb4, 0xf1, 0x46, 0xd3, 0x00, 0xc4, 0x5b, 0xfc, 0x2e, 0x06, 0xed, 0x58, 0x2c, 0x00, 0x03, 0xea, 0x14, 0x43, 0x24, 0xf5, 0xe3, 0x5b, 0xf5, 0x24, 0x39, 0x0b, 0x78, 0xe4, 0xfe, 0xba, 0xda, 0xf7, 0x1b, 0xe8, 0x05, 0xf4, 0xb5, 0x05, 0x17, 0x9c, 0xfc, 0xb2, 0xab, 0x01, 0x7a, 0xfc, 0xff, 0xa6, 0x68, 0xff, 0x52, 0xcb, 0x03, 0x3f, 0x28, 0xfb, 0x9e, 0x14, 0xfa, 0x79, 0xb5, 0x00, 0x82, 0xa2, 0xfc, 0xd3, 0x2e, 0xfa, 0xf9, 0xfd, 0xfe, 0xa5, 0x4d, 0xfd, 0xdc, 0x8c, 0xfa, 0x72, 0xfb, 0x2f, 0xb1, 0x49, 0x21, 0x0a, 0xad, 0xef, 0x92, 0x72, 0x18, 0xbe, 0x06, 0x1c, 0x37, 0xbb, 0xef, 0x30, 0x7a, 0xf4, 0x95, 0x4f, 0xff, 0x3d, 0x3a, 0xfd, 0xc1, 0xf9, 0xef, 0x47, 0xaf, 0xfe, 0xbf, 0x18, 0x12, 0x48, 0x5b, 0xf8, 0x7e, 0xde, 0xf5, 0x89, 0xbf, 0x08, 0x83, 0x81, 0x00, 0xf6, 0xf6, 0xf8, 0x51, 0x17, 0x04, 0x09, 0xaf, 0x05, 0xa1, 0xf6, 0xfd, 0xa6, 0x1b, 0x01, 0x0b, 0xd1, 0xff, 0xdd, 0x78, 0xff, 0xe7, 0x37, 0x03, 0xc5, 0x39, 0xfc, 0x29, 0x5d, 0xfa, 0xec, 0xdd, 0xff, 0x44, 0x71, 0xfd, 0x6b, 0x0e, 0xfb, 0xbc, 0xa7, 0xff, 0xfb, 0xdf, 0xfe, 0x26, 0x9c, 0xfb, 0xc9, 0x50, 0x28, 0x73, 0x11, 0x1f, 0x62, 0x62, 0xf5, 0xdb, 0xcb, 0x13, 0xb4, 0x8b, 0x19, 0xc0, 0x24, 0xf6, 0x21, 0x0a, 0xf6, 0x2c, 0xb7, 0xfe, 0xb9, 0x62, 0xfe, 0xc0, 0x29, 0xf2, 0x3d, 0x73, 0xfd, 0xc7, 0x70, 0x0f, 0x19, 0xca, 0xfa, 0x62, 0x41, 0xf6, 0x34, 0x5f, 0x06, 0xfd, 0x79, 0x01, 0x8f, 0x39, 0xfa, 0x9a, 0xfc, 0x02, 0x4d, 0xf0, 0x04, 0x65, 0x8b, 0xfe, 0x97, 0x3b, 0x01, 0x28, 0xa8, 0xff, 0x8f, 0xf8, 0xfe, 0xd5, 0xaf, 0x02, 0x3a, 0xe5, 0xfc, 0xfd, 0xd4, 0xfa, 0x3d, 0x67, 0xff, 0x35, 0x51, 0xfe, 0xb4, 0x7d, 0xfc, 0xcb, 0x27, 0xff, 0xa6, 0x0a, 0xff, 0x30, 0x06, 0xfd, 0x0d, 0xdb, 0x21, 0xf3, 0xd3, 0x1c, 0xac, 0xa7, 0xf9, 0x0d, 0x61, 0x10, 0x52, 0xd2, 0x17, 0x6c, 0xd1, 0xfa, 0x3c, 0xc0, 0xf7, 0x3a, 0x6e, 0xff, 0x48, 0x76, 0xff, 0x87, 0xc9, 0xf3, 0xac, 0xc3, 0xfc, 0x8a, 0x63, 0x0d, 0x59, 0x7a, 0xfc, 0xa0, 0xb5, 0xf6, 0xd3, 0xd3, 0x04, 0x9b, 0x53, 0x02, 0xca, 0xb1, 0xfb, 0x2c, 0x0f, 0x02, 0xd5, 0x12, 0x04, 0x7c, 0xca, 0xff, 0x4f, 0x37, 0x01, 0xde, 0x44, 0xff, 0x8e, 0x36, 0xff, 0x25, 0x22, 0x02, 0x41, 0x66, 0xfd, 0x3e, 0xf4, 0xfb, 0x07, 0x2b, 0x00, 0x78, 0x0e, 0xff, 0x46, 0xc4, 0xfc, 0x2a, 0x20, 0xff, 0x33, 0x40, 0xff, 0x69, 0xd0, 0xfd, 0x5b, 0x43, 0x1c, 0x87, 0x6f, 0x1a, 0x3f, 0xa3, 0xfc, 0x2a, 0xe6, 0x0d, 0x6e, 0xa4, 0x16, 0x5b, 0x1a, 0xfe, 0x21, 0x53, 0xf9, 0x05, 0x5d, 0x00, 0x21, 0x39, 0x00, 0x02, 0x16, 0xf5, 0xc9, 0x38, 0xfc, 0x52, 0x83, 0x0b, 0xd4, 0x84, 0xfd, 0x79, 0x52, 0xf7, 0xe4, 0xb9, 0x03, 0x7a, 0xf8, 0x02, 0x92, 0xad, 0xfc, 0xee, 0x1f, 0x01, 0x33, 0x2e, 0x04, 0xb2, 0x63, 0x00, 0x03, 0x42, 0x00, 0x30, 0x6e, 0xff, 0xb3, 0x9d, 0xff, 0xc8, 0xf2, 0x01, 0x31, 0x47, 0xfe, 0x75, 0xe2, 0xfc, 0xbc, 0x59, 0x00, 0x07, 0x65, 0xff, 0xa3, 0x43, 0xfd, 0x64, 0xe6, 0xfe, 0x85, 0x15, 0xff, 0xd9, 0xf1, 0xfd, 0xb0, 0x0a, 0x18, 0xb1, 0x30, 0x17, 0x24, 0x91, 0xfe, 0xf8, 0x16, 0x0d, 0x61, 0x42, 0x15, 0xbb, 0x2c, 0x00, 0x8a, 0xec, 0xfa, 0x9f, 0x6f, 0x01, 0x27, 0x84, 0x00, 0xfd, 0xd4, 0xf5, 0xe3, 0x39, 0xfc, 0x7a, 0xbc, 0x09, 0x3f, 0x49, 0xfe, 0xb1, 0x03, 0xf8, 0x9c, 0xcd, 0x02, 0x7a, 0x82, 0x03, 0xb2, 0x51, 0xfd, 0x3e, 0x01, 0x01, 0xb4, 0xe4, 0x03, 0x93, 0xe5, 0xff, 0xf6, 0x1d, 0x00, 0x1b, 0x36, 0x00, 0xcf, 0x4f, 0x00, 0x62, 0xb5, 0x01, 0x9f, 0x69, 0xfe, 0x4c, 0xb6, 0xfd, 0x43, 0xbc, 0x00, 0xd0, 0x53, 0xff, 0xfe, 0x1f, 0xfd, 0xff, 0x8b, 0xfe, 0xf8, 0xd6, 0xfe, 0x74, 0x3a, 0xfe, 0x12, 0xea, 0x14, 0xcf, 0xef, 0x14, 0x08, 0x85, 0x00, 0xa2, 0x18, 0x0c, 0x42, 0x9b, 0x12, 0x59, 0x35, 0x01, 0xc4, 0x13, 0xfd, 0x79, 0x61, 0x02, 0x33, 0x81, 0x00, 0x78, 0xed, 0xf6, 0x94, 0x54, 0xfc, 0xe3, 0xfb, 0x07, 0x0a, 0x68, 0xfe, 0x7f, 0xf4, 0xf8, 0x31, 0x44, 0x03, 0x29, 0xb4, 0x03, 0xc2, 0x8a, 0xfd, 0x66, 0x27, 0x01, 0xf6, 0xf8, 0x02, 0x59, 0xfe, 0xff, 0xa7, 0x89, 0x01, 0x50, 0xb7, 0x00, 0x03, 0xfb, 0xff, 0x91, 0x9c, 0x01, 0x45, 0x2a, 0xff, 0x44, 0x13, 0xfe, 0x54, 0xe6, 0xff, 0x47, 0x01, 0xff, 0x2d, 0x61, 0xfd, 0x33, 0x84, 0xfe, 0x9a, 0x49, 0xff, 0xd5, 0xf3, 0xfe, 0x55, 0xa8, 0x11, 0x9f, 0xf4, 0x12, 0x46, 0xee, 0x01, 0x99, 0xe6, 0x0a, 0x88, 0x32, 0x11, 0xc8, 0x15, 0x03, 0x5d, 0x85, 0xfe, 0xf6, 0xb8, 0x01, 0x1e, 0xae, 0x00, 0xb0, 0xbe, 0xf8, 0x88, 0xa1, 0xfb, 0xf9, 0x08, 0x06, 0x0e, 0xae, 0xff, 0xc7, 0xbf, 0xfa, 0xb9, 0x48, 0x02, 0x4c, 0xe6, 0x02, 0x09, 0xd9, 0xfe, 0xa4, 0x71, 0x01, 0xd3, 0xdc, 0x02, 0x46, 0x1b, 0x01, 0x37, 0x95, 0x01, 0x82, 0x50, 0x00, 0x49, 0x1e, 0x00, 0xc4, 0x7d, 0x01, 0x00, 0x2a, 0xff, 0x09, 0xd7, 0xfd, 0x4f, 0x40, 0xff, 0x54, 0xfa, 0xfe, 0x04, 0xf8, 0xfd, 0xfd, 0x11, 0xff, 0x44, 0xab, 0xff, 0x8d, 0x98, 0xfe, 0x4a, 0x9d, 0x0e, 0x1c, 0xcb, 0x10, 0x01, 0xb8, 0x03, 0xab, 0x14, 0x0a, 0xf4, 0x74, 0x0f, 0x1b, 0x2d, 0x05, 0xdd, 0xd7, 0xff, 0x36, 0xb0, 0x00, 0x8f, 0xa0, 0x00, 0xd0, 0x91, 0xfa, 0xc8, 0xe7, 0xfb, 0xe3, 0x87, 0x04, 0x2f, 0x62, 0x00, 0xf7, 0xd5, 0xfb, 0xe4, 0x8d, 0x01, 0x9e, 0x70, 0x03, 0x75, 0x15, 0x01, 0x75, 0xef, 0x01, 0xdc, 0xfc, 0x01, 0x81, 0x43, 0x01, 0x07, 0xb2, 0x01, 0x19, 0x3b, 0x00, 0x8b, 0x20, 0x00, 0xc8, 0xf6, 0x00, 0xa8, 0xd0, 0xfe, 0x1f, 0xc1, 0xfd, 0xb9, 0xb2, 0xff, 0x1b, 0xd4, 0xff, 0x61, 0x52, 0xfe, 0xdd, 0xc0, 0xfe, 0x47, 0x98, 0xfe, 0x4a, 0xdb, 0xfd, 0x47, 0xad, 0x0c, 0x0d, 0x90, 0x0f, 0x3a, 0x1e, 0x05, 0xfa, 0xde, 0x08, 0x22, 0xff, 0x0d, 0x67, 0x82, 0x06, 0x5e, 0xb3, 0xff, 0x92, 0xda, 0xff, 0x7e, 0x8e, 0x01, 0x2d, 0x81, 0xfc, 0xfc, 0xa0, 0xfb, 0x78, 0xa8, 0x02, 0x67, 0x6a, 0x01, 0x3b, 0xdd, 0xfd, 0x17, 0x8b, 0x02, 0x87, 0xca, 0x04, 0xa4, 0x77, 0x01, 0x95, 0xe9, 0x00, 0x35, 0xe6, 0x01, 0xcc, 0x8b, 0x01, 0xb0, 0x1f, 0x01, 0x17, 0x0e, 0x00, 0x5e, 0xbd, 0xff, 0xca, 0x75, 0x00, 0x4c, 0xa2, 0xff, 0x3e, 0xf2, 0xfe, 0x9a, 0xa8, 0xff, 0x2b, 0xbe, 0xfe, 0x66, 0x83, 0xfd, 0xd6, 0x3e, 0xfe, 0x27, 0xbc, 0xfe, 0xac, 0xa1, 0xfe, 0x29, 0x0a, 0x0a, 0x41, 0x23, 0x0e, 0x13, 0xd4, 0x06, 0x3a, 0xc2, 0x07, 0xab, 0x6f, 0x0c, 0xac, 0x8d, 0x07, 0xc7, 0x8f, 0x00, 0xb1, 0x6a, 0x00, 0x71, 0x32, 0x01, 0x44, 0x59, 0xfc, 0x89, 0x49, 0xfc, 0x48, 0x0f, 0x03, 0x65, 0x86, 0x03, 0x8d, 0x0f, 0x00, 0x69, 0x44, 0x02, 0x36, 0x1b, 0x04, 0x8e, 0x4c, 0x01, 0x6c, 0xcd, 0x00, 0xd7, 0xf1, 0x01, 0x7a, 0x15, 0x01, 0x9b, 0x4c, 0x00, 0x6d, 0x13, 0x00, 0x16, 0x88, 0x00, 0x1b, 0x08, 0x01, 0xe0, 0xc1, 0xff, 0xb0, 0x37, 0xfe, 0x8e, 0x11, 0xfe, 0xcd, 0x25, 0xfe, 0x35, 0x29, 0xfe, 0x6f, 0xb0, 0xfe, 0xbb, 0xfe, 0xfe, 0xe2, 0xe3, 0xfe, 0x75, 0xb5, 0x08, 0x8b, 0xc3, 0x0d, 0x01, 0x05, 0x07, 0x02, 0x47, 0x06, 0xc5, 0x11, 0x0c, 0xfa, 0x49, 0x08, 0x26, 0x04, 0x00, 0xb5, 0x9a, 0xff, 0x73, 0x76, 0x01, 0xd3, 0x56, 0xfe, 0x55, 0xdc, 0xfe, 0x3c, 0x1d, 0x04, 0x00, 0x72, 0x03, 0x1e, 0x6d, 0x00, 0x86, 0x90, 0x02, 0x51, 0x91, 0x03, 0x4e, 0xee, 0x00, 0x2f, 0x4f, 0x00, 0x6e, 0x03, 0x01, 0x3d, 0x4b, 0x01, 0x11, 0x67, 0x01, 0x34, 0xa1, 0x00, 0xeb, 0x29, 0x00, 0x74, 0xa2, 0xff, 0x69, 0x3c, 0xfe, 0x02, 0xc6, 0xfd, 0x10, 0x8b, 0xfe, 0xbd, 0xd4, 0xfe, 0xae, 0x8d, 0xfe, 0x07, 0xb4, 0xfe, 0xdf, 0xb2, 0xfe, 0x3a, 0x75, 0xfe, 0xbe, 0x36, 0x08, 0x7c, 0x70, 0x0c, 0xf1, 0x03, 0x07, 0x5a, 0x9b, 0x07, 0x92, 0x3c, 0x0a, 0xb8, 0x35, 0x05, 0x5a, 0xff, 0x00, 0x47, 0xa7, 0x02, 0x26, 0x98, 0x03, 0xac, 0x9a, 0xff, 0x87, 0x89, 0xff, 0x84, 0x25, 0x04, 0x4f, 0x1f, 0x03, 0xd2, 0xe5, 0x00, 0xaf, 0xfc, 0x02, 0x1a, 0x8d, 0x02, 0xb7, 0xb4, 0xff, 0xc1, 0x90, 0x00, 0x2e, 0x90, 0x02, 0x89, 0xf0, 0x01, 0xb1, 0x6d, 0x00, 0x6a, 0x15, 0xff, 0x32, 0xa5, 0xfe, 0x64, 0x43, 0xff, 0x55, 0xfa, 0xfe, 0x24, 0x6f, 0xfe, 0x35, 0xcb, 0xfe, 0x9b, 0xce, 0xfe, 0x36, 0x4f, 0xfe, 0x52, 0x38, 0xfe, 0x62, 0xaa, 0xfe, 0xc3, 0xc4, 0xfe, 0xe5, 0x51, 0x08, 0xa5, 0x58, 0x0b, 0x5e, 0xb5, 0x05, 0x1c, 0xec, 0x06, 0x0e, 0x4f, 0x09, 0xe8, 0x54, 0x06, 0x0c, 0x5c, 0x04, 0xc6, 0x4e, 0x04, 0x3e, 0x2b, 0x03, 0x5b, 0x51, 0xff, 0xef, 0xe3, 0xff, 0xb2, 0xd7, 0x04, 0x5e, 0xcb, 0x03, 0x58, 0x3a, 0x00, 0xec, 0x13, 0x01, 0xac, 0x7f, 0x02, 0xce, 0xa2, 0x01, 0x80, 0x33, 0x01, 0x65, 0x61, 0x01, 0x25, 0xdf, 0xff, 0x2d, 0x5d, 0xfe, 0x06, 0xc6, 0xfe, 0x82, 0xd8, 0xff, 0x27, 0xec, 0xff, 0xc3, 0xc9, 0xfe, 0xf0, 0x31, 0xfe, 0xf4, 0x71, 0xfe, 0x5b, 0x54, 0xfe, 0x5c, 0x24, 0xfe, 0x04, 0x64, 0xfe, 0xb1, 0xbe, 0xfe, 0x60, 0xf3, 0xfe, 0x73, 0xad, 0x06, 0x48, 0xe9, 0x09, 0x5b, 0x5e, 0x06, 0xbc, 0x00, 0x08, 0x9e, 0x12, 0x0b, 0x59, 0x95, 0x07, 0x87, 0xb3, 0x03, 0x94, 0x38, 0x04, 0x34, 0x03, 0x04, 0x52, 0x7c, 0x00, 0x2d, 0xae, 0x00, 0xfd, 0x0a, 0x04, 0x63, 0xb9, 0x02, 0xf3, 0x76, 0x00, 0xb6, 0x77, 0x02, 0x14, 0x18, 0x03, 0x5d, 0x40, 0x00, 0x5e, 0x0f, 0xff, 0xb2, 0xa1, 0xff, 0x80, 0x92, 0xff, 0x58, 0x8c, 0xff, 0x69, 0xb9, 0xff, 0xbe, 0xc7, 0xff, 0x05, 0x5b, 0xff, 0x29, 0x4e, 0xfe, 0x10, 0xf6, 0xfd, 0x3b, 0x53, 0xfe, 0x11, 0x63, 0xfe, 0xfa, 0x46, 0xfe, 0x2a, 0xa0, 0xfe, 0x18, 0x36, 0xff, 0xc2, 0x19, 0xff, 0x89, 0xdf, 0x07, 0xf2, 0xea, 0x0c, 0xfe, 0x76, 0x09, 0x23, 0xde, 0x07, 0xc2, 0x13, 0x08, 0xc7, 0x47, 0x06, 0xfe, 0x96, 0x04, 0x13, 0x36, 0x04, 0xa2, 0x4b, 0x03, 0x9d, 0x4a, 0x01, 0xfd, 0x4d, 0x01, 0x92, 0xfa, 0x02, 0x34, 0xcf, 0x03, 0x05, 0x0e, 0x02, 0xe9, 0x81, 0xff, 0xcf, 0x47, 0xff, 0x5d, 0x6c, 0xff, 0x3e, 0x95, 0xff, 0x2c, 0x4c, 0x00, 0x8e, 0x15, 0x00, 0xcf, 0xb5, 0xff, 0x6e, 0x52, 0xff, 0x67, 0xc5, 0xfe, 0xbb, 0xa9, 0xfe, 0x6b, 0x57, 0xfe, 0x80, 0x12, 0xfe, 0xc5, 0x46, 0xfe, 0x26, 0xa1, 0xfe, 0x4d, 0xe0, 0xfe, 0x62, 0xc3, 0xfe, 0x5d, 0x06, 0xff, 0xe5, 0x53, 0xff, 0x48, 0xd7, 0x07, 0x22, 0x04, 0x0d, 0x15, 0xa6, 0x09, 0x04, 0x61, 0x07, 0x65, 0x6c, 0x07, 0x0d, 0x9c, 0x06, 0x65, 0x94, 0x05, 0xbd, 0x0b, 0x05, 0x98, 0x4e, 0x04, 0x80, 0x75, 0x02, 0x88, 0x63, 0x01, 0xb1, 0x9b, 0x02, 0x69, 0x72, 0x03, 0x1c, 0xa5, 0x00, 0xcb, 0xf4, 0xfd, 0xf0, 0xbc, 0xfe, 0x09, 0xe9, 0xff, 0x6c, 0x67, 0x00, 0xc8, 0x99, 0x00, 0x61, 0x05, 0x00, 0xa9, 0x30, 0xff, 0x18, 0xc9, 0xfe, 0x16, 0xf8, 0xfe, 0xfe, 0xe9, 0xfe, 0xe5, 0x4e, 0xfe, 0x1f, 0x2d, 0xfe, 0xfd, 0x8e, 0xfe, 0x01, 0xbd, 0xfe, 0x53, 0xb7, 0xfe, 0x97, 0xd3, 0xfe, 0x8c, 0x35, 0xff, 0x17, 0x55, 0xff, 0x2c, 0x89, 0x07, 0xc4, 0x6f, 0x0b, 0x6c, 0x46, 0x07, 0xb8, 0x3c, 0x06, 0xbb, 0xf4, 0x06, 0x92, 0x67, 0x06, 0xc0, 0x4e, 0x06, 0x43, 0x22, 0x07, 0x2b, 0x50, 0x07, 0x19, 0x44, 0x04, 0xca, 0x65, 0x02, 0xce, 0xe2, 0x01, 0x15, 0x96, 0x00, 0x63, 0x78, 0x00, 0xe1, 0xc1, 0xff, 0x1b, 0xcf, 0xfe, 0x58, 0x6a, 0xff, 0xd9, 0x7c, 0x00, 0xf6, 0x92, 0x00, 0x8c, 0x8c, 0xff, 0x25, 0x2d, 0xff, 0xe4, 0x3e, 0xff, 0x3f, 0xfc, 0xfe, 0xbc, 0xd5, 0xfe, 0x0b, 0x88, 0xfe, 0x14, 0x62, 0xfe, 0x3f, 0xab, 0xfe, 0x41, 0xc5, 0xfe, 0x2d, 0x89, 0xfe, 0x86, 0xb5, 0xfe, 0x72, 0x46, 0xff, 0x48, 0x4d, 0xff, 0x2b, 0x28, 0x08, 0xaf, 0xfd, 0x0b, 0xc2, 0xb1, 0x06, 0x2d, 0x1f, 0x05, 0x07, 0x61, 0x05, 0x38, 0x81, 0x04, 0x68, 0x0b, 0x06, 0xa6, 0x05, 0x08, 0x5a, 0x5e, 0x07, 0x66, 0x5b, 0x04, 0xc7, 0xc2, 0x02, 0xe5, 0x08, 0x02, 0xee, 0x1b, 0x02, 0x64, 0xa1, 0x02, 0xae, 0x50, 0x00, 0x98, 0xed, 0xfe, 0x1a, 0x87, 0xff, 0x41, 0x54, 0xff, 0x26, 0xb3, 0xff, 0x29, 0x0c, 0x00, 0xce, 0x77, 0xff, 0xb6, 0xb7, 0xfe, 0x52, 0x81, 0xfe, 0xa0, 0x13, 0xff, 0xdc, 0x00, 0xff, 0x9e, 0x8d, 0xfe, 0x23, 0xe0, 0xfe, 0x32, 0x28, 0xff, 0xa8, 0x0a, 0xff, 0xdd, 0xdf, 0xfe, 0x86, 0xec, 0xfe, 0x93, 0x27, 0xff, 0xd9, 0x90, 0x08, 0x7f, 0xbe, 0x0b, 0x66, 0x34, 0x05, 0x2c, 0x05, 0x04, 0xde, 0x73, 0x05, 0x73, 0x38, 0x04, 0xed, 0x72, 0x03, 0x8c, 0x58, 0x04, 0x5a, 0x47, 0x06, 0x13, 0x3c, 0x06, 0xb9, 0x0b, 0x05, 0x4b, 0x33, 0x04, 0xdc, 0x2c, 0x03, 0x8c, 0xa8, 0x02, 0xb0, 0x5f, 0x03, 0x7b, 0xcf, 0x01, 0x38, 0xd8, 0xfd, 0x30, 0xda, 0xfd, 0x32, 0x70, 0xff, 0x80, 0x86, 0xff, 0xcd, 0xef, 0xff, 0x22, 0x60, 0xff, 0x45, 0xb7, 0xfe, 0xa2, 0xdd, 0xfe, 0x35, 0x03, 0xff, 0xbc, 0xfa, 0xfe, 0x23, 0x08, 0xff, 0xb5, 0x3f, 0xff, 0xc0, 0xee, 0xfe, 0xc4, 0x17, 0xff, 0x6b, 0x32, 0xff, 0xde, 0xa2, 0xfe, 0x15, 0x0b, 0x08, 0x95, 0x57, 0x0b, 0xed, 0x33, 0x05, 0x88, 0xc4, 0x03, 0xd1, 0x69, 0x05, 0x1c, 0x05, 0x05, 0xac, 0x1b, 0x04, 0xb1, 0x34, 0x02, 0xf8, 0x7d, 0x01, 0x4f, 0x0c, 0x03, 0xc2, 0x78, 0x05, 0xa8, 0xee, 0x05, 0xcd, 0x57, 0x04, 0x63, 0x3f, 0x03, 0xe7, 0x51, 0x03, 0x38, 0x4a, 0x04, 0xa3, 0xfc, 0x02, 0xd9, 0x33, 0xff, 0x53, 0xb1, 0xfd, 0x75, 0x8d, 0xfe, 0xd0, 0x30, 0xff, 0x7b, 0x93, 0xff, 0xb5, 0xcf, 0xff, 0xa3, 0x46, 0xff, 0xf3, 0x8c, 0xfe, 0x70, 0xe2, 0xfe, 0xfd, 0x68, 0xff, 0xe9, 0xfa, 0xfe, 0xca, 0xd4, 0xfe, 0x5f, 0x60, 0xff, 0xa6, 0x4a, 0xff, 0x0c, 0xd1, 0xfe, 0x9b, 0xb6, 0x08, 0x62, 0x84, 0x0b, 0xeb, 0xc7, 0x03, 0x73, 0x58, 0x02, 0x3d, 0xd9, 0x04, 0xf8, 0xb5, 0x04, 0x84, 0x18, 0x04, 0x12, 0x6c, 0x02, 0x28, 0x6c, 0x00, 0xd4, 0x71, 0x00, 0xa5, 0x47, 0x03, 0x9c, 0x54, 0x04, 0xfd, 0xa1, 0x03, 0x4a, 0x9a, 0x04, 0x0e, 0x61, 0x05, 0x87, 0x87, 0x05, 0x0b, 0x93, 0x04, 0xfe, 0xab, 0x02, 0xec, 0x3c, 0x01, 0xa1, 0x9b, 0xff, 0x3a, 0x01, 0xfe, 0x66, 0xda, 0xfd, 0xf3, 0x0b, 0xff, 0xc6, 0x88, 0xff, 0x59, 0x27, 0xff, 0x9b, 0xe4, 0xfe, 0xcf, 0xd5, 0xfe, 0x19, 0xe9, 0xfe, 0x2d, 0xf1, 0xfe, 0xa3, 0x82, 0xff, 0x9c, 0x92, 0xff, 0x0d, 0xf0, 0xfe, 0x21, 0xbe, 0x09, 0x7d, 0xa2, 0x0c, 0xa2, 0xe0, 0x03, 0xf5, 0xf2, 0x02, 0x2e, 0xb2, 0x05, 0xdb, 0x52, 0x04, 0x0d, 0x57, 0x03, 0x92, 0x3b, 0x01, 0xcd, 0x05, 0xff, 0x44, 0x28, 0x01, 0xab, 0x17, 0x04, 0xac, 0xde, 0x01, 0xef, 0x54, 0x00, 0xc5, 0x3b, 0x02, 0xb0, 0x73, 0x03, 0x16, 0x6d, 0x05, 0x29, 0x9f, 0x05, 0x4d, 0xa9, 0x03, 0xb5, 0x98, 0x03, 0x2b, 0x15, 0x03, 0xaa, 0xae, 0x00, 0x7d, 0xb5, 0xfe, 0xef, 0xf5, 0xfd, 0x00, 0xcb, 0xfd, 0xf4, 0x6e, 0xfe, 0x94, 0x81, 0xff, 0xab, 0x85, 0xff, 0x8f, 0xd6, 0xfe, 0x2b, 0xa5, 0xfe, 0x00, 0x4c, 0xff, 0xc9, 0x91, 0xff, 0xc0, 0x10, 0xff, 0x3c, 0xdb, 0x0a, 0x5d, 0x32, 0x0d, 0xc2, 0x65, 0x03, 0xd1, 0xf3, 0x03, 0x58, 0x87, 0x07, 0x6e, 0x8c, 0x05, 0x47, 0x51, 0x03, 0x87, 0xb7, 0xfe, 0xd8, 0x5a, 0xfc, 0x42, 0x9c, 0x01, 0x18, 0x7b, 0x05, 0xf7, 0x88, 0x01, 0x9b, 0x30, 0xff, 0x9b, 0x38, 0x00, 0x42, 0x25, 0x01, 0x12, 0x8a, 0x03, 0x1a, 0x14, 0x03, 0xb2, 0x8a, 0x02, 0x2d, 0xb4, 0x04, 0xbc, 0x5d, 0x04, 0x0e, 0xea, 0x02, 0x5c, 0xd2, 0x01, 0x80, 0x50, 0x00, 0xa7, 0xa6, 0xfe, 0xf2, 0x56, 0xfd, 0x87, 0xca, 0xfd, 0xb0, 0xdd, 0xfe, 0xb8, 0x37, 0xff, 0xef, 0x4e, 0xff, 0x5c, 0x4b, 0xff, 0x28, 0x0b, 0xff, 0xc2, 0xe2, 0xfe, 0x66, 0x1c, 0x0d, 0x4b, 0x57, 0x10, 0xb4, 0xdc, 0x03, 0x3d, 0xfc, 0x02, 0xcf, 0xbf, 0x06, 0x43, 0x26, 0x05, 0x2b, 0xdb, 0x03, 0x1e, 0x64, 0xfe, 0xb6, 0x5a, 0xfb, 0xfa, 0x9e, 0x01, 0x64, 0x0f, 0x05, 0xf2, 0x8b, 0x00, 0xf0, 0xc6, 0xfe, 0xce, 0x3f, 0x00, 0xac, 0x9f, 0x00, 0x86, 0xd7, 0x01, 0xea, 0xb4, 0x01, 0x54, 0x31, 0x01, 0x8b, 0x87, 0x02, 0xc7, 0x8e, 0x03, 0x64, 0x92, 0x03, 0xe0, 0x8c, 0x02, 0x57, 0xa9, 0x01, 0xab, 0x17, 0x01, 0x7b, 0xf4, 0xff, 0x9e, 0xa4, 0xfe, 0x6a, 0xbd, 0xfd, 0x14, 0xf9, 0xfd, 0xba, 0xc5, 0xfe, 0x6f, 0x97, 0xff, 0x0b, 0xe3, 0xff, 0xaf, 0x12, 0xff, 0x29, 0x16, 0x0f, 0xe1, 0x2b, 0x12, 0x9a, 0x8a, 0x03, 0xfb, 0x5f, 0x03, 0x7d, 0x60, 0x08, 0x5f, 0x70, 0x05, 0x54, 0x8c, 0x02, 0x0f, 0x2d, 0xfc, 0xe4, 0x8c, 0xfa, 0xed, 0xaf, 0x03, 0x8e, 0xbb, 0x05, 0x47, 0xae, 0xfe, 0x17, 0xa4, 0xfd, 0x3e, 0x93, 0xff, 0xf4, 0x6b, 0x00, 0xb7, 0x73, 0x02, 0xb5, 0x07, 0x01, 0x85, 0x76, 0xff, 0x44, 0x61, 0x01, 0x27, 0xed, 0x01, 0xe7, 0x41, 0x01, 0x6c, 0xee, 0x01, 0xf5, 0x97, 0x02, 0x56, 0xed, 0x01, 0x85, 0x78, 0x01, 0xf0, 0xf0, 0x00, 0xda, 0x8e, 0xff, 0xea, 0x98, 0xfe, 0xac, 0xe7, 0xfd, 0xcc, 0x94, 0xfe, 0xca, 0x96, 0xff, 0xbd, 0x17, 0xff, 0x4e, 0x3f, 0x11, 0x63, 0x09, 0x14, 0x21, 0x26, 0x03, 0xf0, 0xf3, 0x03, 0x9f, 0xf3, 0x09, 0x23, 0xed, 0x05, 0x56, 0x4a, 0x01, 0x0b, 0x8e, 0xf9, 0xf7, 0x3f, 0xfa, 0x36, 0xa4, 0x05, 0x47, 0x84, 0x05, 0xe4, 0x94, 0xfd, 0x13, 0xa5, 0xfd, 0xc6, 0xd3, 0xfe, 0x06, 0xae, 0xff, 0x86, 0x8f, 0x02, 0x35, 0xb3, 0x00, 0x7d, 0x39, 0xff, 0x0d, 0x04, 0x01, 0x29, 0x8d, 0x00, 0xa9, 0x46, 0x00, 0x0d, 0xac, 0x00, 0x93, 0x71, 0x00, 0xc4, 0x92, 0x01, 0x89, 0x30, 0x02, 0xf5, 0x35, 0x01, 0x56, 0x24, 0x01, 0x0e, 0x10, 0x01, 0x3b, 0x7c, 0xff, 0xd4, 0xf4, 0xfe, 0xb4, 0xfc, 0xfe, 0x41, 0x63, 0xfe, 0x8e, 0x4b, 0x14, 0x5a, 0x65, 0x17, 0x7d, 0x0e, 0x03, 0xa3, 0x2a, 0x03, 0x6c, 0xe1, 0x09, 0x58, 0x95, 0x05, 0xa3, 0x48, 0x00, 0x21, 0x40, 0xf8, 0x48, 0xf7, 0xfa, 0x12, 0xfb, 0x06, 0xf4, 0x38, 0x04, 0xa3, 0x28, 0xfc, 0xbe, 0xfd, 0xfd, 0x80, 0xd4, 0xfe, 0xe0, 0x6d, 0xff, 0xf1, 0x7e, 0x02, 0x13, 0x00, 0x00, 0xed, 0xc4, 0xfe, 0xd8, 0x18, 0x01, 0x3b, 0x37, 0x00, 0xd1, 0x66, 0xff, 0x35, 0xc7, 0xff, 0x44, 0xcd, 0xff, 0x3d, 0x64, 0x00, 0xd1, 0x97, 0x00, 0xa8, 0xb4, 0x00, 0x15, 0x73, 0x01, 0x45, 0x7e, 0x01, 0xa9, 0xe8, 0x00, 0xf2, 0x1d, 0x01, 0xb8, 0x46, 0x00, 0x4d, 0x62, 0xfe, 0x93, 0x55, 0x16, 0xfc, 0x1d, 0x19, 0x4b, 0xbd, 0x02, 0x08, 0x98, 0x04, 0x6e, 0x76, 0x0c, 0x33, 0x67, 0x05, 0x09, 0x05, 0xfd, 0x14, 0x77, 0xf5, 0x72, 0xa1, 0xfc, 0x0d, 0x55, 0x09, 0xa7, 0xf1, 0x02, 0xd5, 0xea, 0xfa, 0x71, 0x0b, 0xfe, 0xa2, 0x60, 0xfe, 0xb8, 0x76, 0xff, 0xe2, 0x9a, 0x02, 0x83, 0x2f, 0xff, 0x97, 0x69, 0xfe, 0x79, 0x61, 0x01, 0xad, 0xaf, 0xff, 0x71, 0xd8, 0xfe, 0x13, 0xbc, 0xff, 0x3b, 0xd1, 0xfe, 0xf5, 0xab, 0xff, 0x11, 0x8f, 0x00, 0xe1, 0x23, 0xff, 0x27, 0xcb, 0xff, 0x9d, 0x67, 0x01, 0x96, 0xf6, 0x00, 0x12, 0x8c, 0x01, 0x6b, 0xec, 0x01, 0xb9, 0x34, 0x00, 0xbd, 0xa7, 0x18, 0x51, 0x26, 0x1c, 0x5b, 0xfc, 0x02, 0x01, 0x83, 0x04, 0xf1, 0x94, 0x0d, 0x54, 0x35, 0x05, 0x20, 0x8e, 0xfa, 0xb2, 0x97, 0xf3, 0xd3, 0xa1, 0xfe, 0xc4, 0xe5, 0x0a, 0x86, 0xd1, 0x00, 0xe9, 0xe0, 0xf9, 0xde, 0x95, 0xfe, 0x5b, 0x2d, 0xfe, 0x8b, 0xa8, 0xff, 0x98, 0xd5, 0x02, 0x7b, 0x7d, 0xfe, 0xb9, 0xcd, 0xfd, 0x80, 0x5c, 0x01, 0xf7, 0x61, 0xff, 0x77, 0x7d, 0xfe, 0x7a, 0xc3, 0xff, 0x67, 0x76, 0xfe, 0x17, 0x4c, 0xff, 0x1e, 0xf8, 0xff, 0xae, 0x4a, 0xfe, 0x26, 0x80, 0xff, 0xa7, 0x8f, 0x00, 0x8a, 0xe8, 0xff, 0x84, 0x38, 0x01, 0xab, 0xb6, 0x01, 0x64, 0x8f, 0x00, 0x7c, 0x5a, 0x1a, 0x8f, 0x45, 0x1f, 0x8c, 0xf8, 0x03, 0x00, 0x2c, 0x04, 0x89, 0x75, 0x0e, 0xd6, 0x3e, 0x05, 0x02, 0x06, 0xf8, 0x28, 0xb4, 0xf1, 0x34, 0x88, 0x00, 0x2c, 0x6d, 0x0c, 0x1f, 0xb5, 0xfe, 0xce, 0x86, 0xf8, 0xaa, 0x21, 0xff, 0xea, 0x0e, 0xfe, 0xb2, 0xa0, 0xff, 0x88, 0x10, 0x03, 0x69, 0x13, 0xfe, 0x08, 0x63, 0xfd, 0x23, 0x39, 0x01, 0xdc, 0xfb, 0xfe, 0x40, 0xf1, 0xfd, 0xfd, 0x7b, 0xff, 0x9c, 0x12, 0xfe, 0x20, 0x1b, 0xff, 0xf3, 0x24, 0x00, 0xd9, 0xa3, 0xfd, 0xd5, 0x7c, 0xfe, 0x9b, 0x41, 0x00, 0x87, 0xa5, 0xff, 0x06, 0x63, 0x00, 0x9c, 0xe5, 0x00, 0x9e, 0x07, 0x00, 0x6b, 0xe1, 0x1b, 0xd2, 0xfe, 0x22, 0xbd, 0xb9, 0x05, 0x15, 0xc6, 0x02, 0x0a, 0x3d, 0x0e, 0x4f, 0x9e, 0x05, 0x32, 0x3d, 0xf6, 0x24, 0x88, 0xf0, 0x47, 0xba, 0x01, 0xb9, 0x0f, 0x0d, 0x1a, 0x8b, 0xfd, 0x5a, 0x3a, 0xf7, 0xbf, 0xfb, 0xfe, 0x35, 0x5a, 0xfe, 0x91, 0x6a, 0xff, 0xaf, 0x2a, 0x03, 0x02, 0x2d, 0xfe, 0x41, 0xdb, 0xfc, 0x69, 0xfc, 0x00, 0x77, 0xe6, 0xfe, 0x90, 0x8a, 0xfd, 0x93, 0xfb, 0xfe, 0x1a, 0xa6, 0xfd, 0x5e, 0xb6, 0xfe, 0xeb, 0xd1, 0xff, 0x65, 0xa2, 0xfd, 0xd5, 0x48, 0xfe, 0xb7, 0xa2, 0xff, 0x88, 0x26, 0xff, 0xcd, 0x33, 0x00, 0xb9, 0x94, 0x00, 0xf6, 0x56, 0xff, 0xd7, 0x9f, 0x1c, 0x6a, 0x47, 0x26, 0x90, 0x1d, 0x08, 0x18, 0x2a, 0x02, 0x34, 0x14, 0x0e, 0xaf, 0xa6, 0x05, 0xb4, 0xcc, 0xf4, 0xd6, 0x96, 0xef, 0xaf, 0x79, 0x02, 0xef, 0x8f, 0x0d, 0x77, 0xe6, 0xfc, 0x40, 0x4a, 0xf6, 0xeb, 0x43, 0xfe, 0x76, 0x7a, 0xfe, 0x7d, 0x72, 0xff, 0x88, 0x05, 0x03, 0xe5, 0xa1, 0xfe, 0x98, 0x67, 0xfc, 0x4d, 0x50, 0x00, 0x1d, 0x30, 0xff, 0x49, 0x8d, 0xfd, 0xd2, 0xa5, 0xfe, 0x07, 0x15, 0xfd, 0x42, 0x0a, 0xfe, 0x19, 0x7d, 0xff, 0xb6, 0x6e, 0xfd, 0x11, 0x1e, 0xfe, 0xde, 0x6a, 0xff, 0xc1, 0x01, 0xff, 0x83, 0xc4, 0xff, 0x9e, 0x98, 0x00, 0x80, 0x8d, 0xff, 0xb3, 0xc5, 0x1c, 0xc6, 0x11, 0x29, 0x53, 0x1b, 0x0b, 0x54, 0x25, 0x02, 0x40, 0xc4, 0x0d, 0xe5, 0x6b, 0x05, 0xca, 0x20, 0xf4, 0xd3, 0x18, 0xef, 0xbd, 0x15, 0x02, 0x95, 0x06, 0x0e, 0x23, 0xeb, 0xfc, 0x43, 0x4c, 0xf5, 0x68, 0xd7, 0xfd, 0x38, 0x54, 0xfe, 0x02, 0x0d, 0xff, 0xa9, 0x12, 0x03, 0x3c, 0x0e, 0xff, 0xa8, 0x05, 0xfc, 0x33, 0xaf, 0xff, 0xf6, 0x64, 0xff, 0xc5, 0x94, 0xfd, 0x9c, 0x80, 0xfe, 0x7d, 0xe6, 0xfc, 0xa9, 0x4f, 0xfd, 0xa5, 0x25, 0xff, 0xcf, 0x11, 0xfd, 0x4f, 0x8f, 0xfd, 0xc7, 0x1e, 0xff, 0xa8, 0xed, 0xfe, 0x25, 0x8c, 0x00, 0x8c, 0xe2, 0xff, 0x62, 0xe4, 0xfd, 0x74, 0xcb, 0x1d, 0xa3, 0x04, 0x2c, 0x37, 0xd2, 0x0d, 0x22, 0x71, 0x01, 0x0c, 0x01, 0x0c, 0x55, 0x2f, 0x05, 0x58, 0x00, 0xf5, 0x0d, 0xaa, 0xef, 0x47, 0x5f, 0x00, 0x75, 0xe6, 0x0c, 0x34, 0xed, 0xfd, 0xbe, 0xf3, 0xf4, 0xb8, 0x08, 0xfd, 0x2c, 0xb5, 0xfe, 0xe9, 0x6b, 0xfe, 0x17, 0x1f, 0x02, 0xfc, 0xe0, 0xff, 0x42, 0x45, 0xfc, 0xfe, 0x73, 0xfe, 0x2a, 0x49, 0xff, 0x91, 0x0b, 0xfe, 0xb8, 0x1d, 0xfe, 0x12, 0x92, 0xfc, 0x2c, 0x36, 0xfd, 0x7d, 0xf4, 0xfe, 0x8d, 0xac, 0xfc, 0xc1, 0x93, 0xfc, 0xeb, 0x1c, 0xff, 0xe5, 0x5d, 0xff, 0x8e, 0xf3, 0xfe, 0x43, 0x6a, 0xff, 0x05, 0x09, 0xff, 0x29, 0x7e, 0x1e, 0x23, 0x33, 0x2d, 0x61, 0x15, 0x11, 0xcf, 0xad, 0x02, 0xc8, 0x42, 0x09, 0x70, 0x06, 0x06, 0x0f, 0xef, 0xf7, 0xd1, 0xeb, 0xee, 0xa4, 0x14, 0xfe, 0xf4, 0x47, 0x0c, 0x22, 0x0c, 0xff, 0x06, 0xaf, 0xf5, 0xc1, 0xbf, 0xfc, 0xe6, 0xf3, 0xfd, 0x69, 0xe5, 0xfd, 0xee, 0xe3, 0x01, 0x43, 0xfd, 0xff, 0xb5, 0x1b, 0xfd, 0x2a, 0x01, 0xfe, 0xe2, 0xf1, 0xfd, 0xfc, 0xfb, 0xfd, 0xe3, 0xf2, 0xfe, 0x8a, 0x17, 0xfd, 0xf2, 0x80, 0xfc, 0x6a, 0x4c, 0xfe, 0xf8, 0x2d, 0xfd, 0xd5, 0x63, 0xfd, 0x38, 0x25, 0xfe, 0x9d, 0x44, 0xfd, 0x67, 0x65, 0xff, 0xc0, 0xf0, 0xff, 0x41, 0x2a, 0xfe, 0x73, 0xb3, 0x20, 0x8e, 0x44, 0x2c, 0x08, 0xfd, 0x10, 0xc4, 0xf5, 0x06, 0x76, 0x72, 0x09, 0x05, 0x7a, 0x05, 0x02, 0xc6, 0xf8, 0x6e, 0x13, 0xee, 0x34, 0x99, 0xfd, 0xfe, 0xde, 0x0a, 0xef, 0x25, 0xff, 0x8c, 0x6f, 0xf7, 0x88, 0x00, 0xfc, 0x1b, 0xef, 0xfc, 0xa1, 0x1d, 0xfe, 0x51, 0xc4, 0x01, 0x6a, 0x82, 0xff, 0x83, 0x83, 0xfd, 0x39, 0xcf, 0xfd, 0x3d, 0x86, 0xfc, 0x98, 0x35, 0xfe, 0xae, 0x75, 0xff, 0xd6, 0xa0, 0xfc, 0x9a, 0x2a, 0xfc, 0xbf, 0x24, 0xfe, 0x12, 0x26, 0xfe, 0x5b, 0x15, 0xfd, 0x14, 0xc8, 0xfc, 0x2f, 0x68, 0xfd, 0x84, 0x97, 0xfe, 0x3b, 0x57, 0xff, 0x79, 0xc9, 0xfe, 0x3e, 0x4e, 0x23, 0xaf, 0x08, 0x2a, 0x0d, 0x2a, 0x0f, 0xfc, 0x0c, 0x0d, 0xb8, 0x41, 0x0b, 0x46, 0x65, 0x04, 0x38, 0x62, 0xf9, 0x04, 0x5e, 0xed, 0x78, 0x40, 0xfe, 0x60, 0xcf, 0x08, 0x6b, 0x45, 0xfd, 0x09, 0x82, 0xfa, 0x9f, 0x7b, 0xfc, 0xca, 0x32, 0xfb, 0xeb, 0x86, 0xfe, 0x2b, 0xb9, 0x01, 0x43, 0x66, 0xfe, 0x7e, 0x00, 0xfe, 0x21, 0x55, 0xfe, 0xfc, 0x60, 0xfb, 0xda, 0x05, 0xfe, 0xf6, 0x1f, 0xff, 0x15, 0xb2, 0xfb, 0xf3, 0x7e, 0xfd, 0x2c, 0x3e, 0xfe, 0xf4, 0x53, 0xfc, 0x07, 0xf8, 0xfd, 0xb8, 0x82, 0xfd, 0x84, 0xf9, 0xfb, 0x20, 0x63, 0xfe, 0x03, 0x99, 0xff, 0x05, 0x5d, 0xfe, 0x14, 0xc9, 0x26, 0xde, 0x93, 0x26, 0xd8, 0x97, 0x09, 0xde, 0x92, 0x14, 0xd6, 0xf4, 0x11, 0x45, 0x70, 0x01, 0xb6, 0x0e, 0xf7, 0x24, 0x58, 0xef, 0x0c, 0x47, 0x00, 0xc9, 0x56, 0x04, 0x3c, 0x1a, 0xfa, 0x8e, 0x15, 0xff, 0xcc, 0xbc, 0xfd, 0xb0, 0xc3, 0xf8, 0xac, 0x95, 0xfe, 0xf3, 0x88, 0x01, 0x97, 0xb8, 0xfd, 0xca, 0xac, 0xfe, 0x9f, 0x86, 0xfe, 0xeb, 0x38, 0xfa, 0x1b, 0x63, 0xfd, 0x62, 0xeb, 0xfe, 0xfa, 0xe3, 0xfb, 0xde, 0x1e, 0xfd, 0xc8, 0x84, 0xfc, 0x90, 0xf8, 0xfc, 0x6e, 0xe7, 0xfe, 0x20, 0xd9, 0xfc, 0xb6, 0x56, 0xfc, 0x4d, 0xef, 0xfd, 0xfa, 0xf3, 0xfe, 0xe7, 0xb9, 0xfe, 0x54, 0xd0, 0x2b, 0x49, 0xdb, 0x26, 0xcf, 0xd5, 0x02, 0x10, 0x34, 0x17, 0x0f, 0xb9, 0x17, 0xbe, 0x37, 0xfe, 0x69, 0x37, 0xf5, 0x06, 0xd9, 0xf4, 0x54, 0xb3, 0x03, 0x3f, 0xdf, 0xfd, 0xf3, 0xfd, 0xf3, 0x24, 0xb5, 0x03, 0x91, 0xfa, 0x01, 0x75, 0x01, 0xf7, 0xe6, 0xdc, 0xfd, 0x24, 0x04, 0x01, 0x69, 0xd4, 0xfc, 0x45, 0xe4, 0xff, 0x8e, 0x37, 0xff, 0xf9, 0x66, 0xf8, 0x63, 0x50, 0xfd, 0x50, 0x00, 0x00, 0x0a, 0x11, 0xf9, 0xe9, 0x8f, 0xfc, 0x70, 0x5b, 0xfe, 0x8d, 0x5d, 0xfb, 0xbd, 0xf8, 0xfe, 0x0e, 0xeb, 0xfd, 0x04, 0x12, 0xfc, 0xae, 0x4e, 0xfe, 0x10, 0xcf, 0xfe, 0xf3, 0x06, 0xff, 0x30, 0xdd, 0x30, 0x7f, 0x9c, 0x28, 0x85, 0x5f, 0xfb, 0xa4, 0xc6, 0x16, 0x01, 0x63, 0x1e, 0xc8, 0x80, 0xfc, 0x6b, 0x92, 0xf1, 0x83, 0x15, 0xfa, 0xd9, 0x93, 0x09, 0x0a, 0x9a, 0xf8, 0xca, 0x0c, 0xeb, 0x40, 0xb1, 0x05, 0x27, 0x8f, 0x08, 0x4a, 0xd3, 0xf6, 0xa9, 0x2f, 0xfc, 0xc5, 0x80, 0x00, 0x10, 0x40, 0xfb, 0x3e, 0xc2, 0x00, 0xa9, 0x2e, 0x00, 0x06, 0xd8, 0xf7, 0x59, 0x34, 0xfd, 0x82, 0x04, 0xfe, 0x83, 0xe7, 0xf7, 0xaf, 0x41, 0xfd, 0xd9, 0xa6, 0xfd, 0x3e, 0x11, 0xfb, 0x01, 0x7b, 0xff, 0x26, 0xc0, 0xfd, 0x0b, 0x05, 0xfc, 0xde, 0x4c, 0xff, 0x7d, 0xc8, 0xff, 0xa0, 0x3d, 0xfe, 0x0c, 0x7a, 0x35, 0xf3, 0xb3, 0x2b, 0x54, 0x63, 0xf4, 0x17, 0x7c, 0x13, 0x05, 0x07, 0x25, 0x60, 0x32, 0xfd, 0x3c, 0x5a, 0xed, 0x19, 0x14, 0xfe, 0x1a, 0xb6, 0x10, 0xf2, 0x43, 0xf6, 0x08, 0x90, 0xe1, 0xaa, 0x84, 0x03, 0x27, 0x7f, 0x0f, 0x50, 0xf3, 0xf9, 0x54, 0x44, 0xfa, 0x34, 0x95, 0xff, 0x0c, 0xe1, 0xf9, 0x17, 0x3c, 0x00, 0xd4, 0xa1, 0x02, 0xe3, 0xea, 0xf7, 0xdf, 0xa4, 0xfa, 0x9a, 0x69, 0xfe, 0x38, 0x5a, 0xf7, 0xcb, 0x10, 0xfb, 0xd7, 0xe9, 0xfe, 0xf8, 0x85, 0xfb, 0xac, 0xab, 0xfe, 0x2c, 0x29, 0xfe, 0x5e, 0x29, 0xfc, 0xb3, 0x64, 0x00, 0xb6, 0x72, 0x00, 0x9a, 0x13, 0xfd, 0x68, 0x40, 0x3b, 0x85, 0x74, 0x30, 0x4c, 0xce, 0xec, 0xac, 0xb1, 0x0b, 0x10, 0x05, 0x2a, 0x66, 0x25, 0x02, 0xbb, 0xfa, 0xe9, 0x17, 0x3f, 0xfe, 0x71, 0x5a, 0x16, 0x10, 0xce, 0xf6, 0x04, 0xbd, 0xda, 0x8a, 0x12, 0xfe, 0x9d, 0x79, 0x13, 0x7e, 0x54, 0xff, 0x75, 0xb7, 0xf9, 0x1b, 0xf9, 0xfd, 0xe5, 0xe0, 0xf7, 0x4a, 0x72, 0x00, 0x24, 0x54, 0x04, 0x3e, 0xc2, 0xf5, 0xf4, 0x21, 0xfa, 0xbb, 0x6f, 0xff, 0x70, 0x65, 0xf5, 0xc6, 0xc3, 0xf9, 0x0a, 0x29, 0xff, 0x0c, 0x07, 0xfc, 0x51, 0xf5, 0xfe, 0x45, 0xf7, 0xfd, 0xb2, 0x3b, 0xfc, 0xed, 0xaa, 0x00, 0xb0, 0x9b, 0x00, 0x21, 0xfe, 0xfc, 0xbf, 0x87, 0x41, 0x23, 0xc3, 0x34, 0xad, 0xdf, 0xe5, 0x6b, 0x60, 0x04, 0x17, 0x89, 0x2c, 0xe2, 0x61, 0x07, 0xc1, 0x4c, 0xe8, 0x23, 0x34, 0xfe, 0x23, 0xab, 0x1b, 0x2d, 0xaf, 0xf7, 0x2e, 0xc6, 0xd5, 0xc8, 0xf3, 0xf7, 0x79, 0xc0, 0x14, 0x60, 0xce, 0x05, 0x48, 0x67, 0xfb, 0xdc, 0x79, 0xfb, 0x63, 0xfe, 0xf5, 0xfa, 0x40, 0x01, 0x7e, 0x11, 0x04, 0xbe, 0xeb, 0xf4, 0x59, 0x41, 0xfa, 0x4c, 0x04, 0xff, 0xf2, 0x7f, 0xf5, 0xcb, 0x5e, 0xf8, 0xa1, 0x74, 0xfe, 0x6a, 0x39, 0xfd, 0xa8, 0x5b, 0xff, 0x6f, 0x22, 0xfe, 0x7d, 0xbd, 0xfb, 0x6a, 0x74, 0x00, 0xb7, 0xe3, 0x00, 0x11, 0x76, 0xfd, 0xcd, 0x76, 0x4a, 0x80, 0x69, 0x37, 0xa8, 0xb9, 0xdd, 0x39, 0x5b, 0xfe, 0x56, 0xb6, 0x2c, 0x43, 0x7d, 0x0c, 0xe3, 0xbb, 0xe8, 0xfe, 0xf5, 0xfd, 0x5e, 0x79, 0x1f, 0x2e, 0xaf, 0xf7, 0xb9, 0x3c, 0xd3, 0xb8, 0x2e, 0xf3, 0xc0, 0xb2, 0x13, 0xb9, 0xa3, 0x0b, 0xf5, 0x40, 0xfe, 0x06, 0x85, 0xf9, 0xcf, 0xcb, 0xf3, 0x71, 0xd0, 0x01, 0x33, 0x4b, 0x04, 0xb4, 0x80, 0xf3, 0xcb, 0x78, 0xfa, 0x0e, 0x1b, 0xff, 0xf3, 0x23, 0xf5, 0x8a, 0x2b, 0xf8, 0xd5, 0x27, 0xfe, 0x93, 0x8f, 0xfd, 0x45, 0xda, 0xff, 0x8a, 0x79, 0xfe, 0x99, 0x05, 0xfb, 0xea, 0xfe, 0xff, 0x7e, 0xbc, 0x01, 0x10, 0xc1, 0xfd, 0x72, 0x76, 0x54, 0x68, 0x4a, 0x3a, 0x06, 0x25, 0xd4, 0x88, 0xac, 0xf7, 0xc4, 0xb2, 0x2b, 0xa0, 0xde, 0x11, 0x7b, 0x79, 0xeb, 0x4b, 0x2d, 0xfc, 0x66, 0x79, 0x20, 0x13, 0x0b, 0xf8, 0xe1, 0xdb, 0xd2, 0xdf, 0xa2, 0xef, 0x39, 0xba, 0x10, 0x21, 0x57, 0x0f, 0x74, 0xdb, 0x01, 0x28, 0xd7, 0xf8, 0x3c, 0xc0, 0xf0, 0xb7, 0xf8, 0x01, 0x15, 0x10, 0x05, 0x60, 0x5a, 0xf1, 0x35, 0xba, 0xfa, 0xa5, 0x1f, 0xff, 0xc2, 0xb1, 0xf4, 0xa6, 0xf0, 0xf8, 0x4d, 0x3f, 0xfd, 0x61, 0x9f, 0xfd, 0xbf, 0x82, 0x00, 0x0e, 0x18, 0xfe, 0x26, 0x60, 0xfa, 0x32, 0xd5, 0xff, 0x31, 0x8c, 0x02, 0xc6, 0x91, 0xfd, 0xe0, 0x2d, 0x5d, 0x27, 0xc9, 0x3e, 0x58, 0x16, 0xcb, 0xf3, 0x12, 0xf2, 0x24, 0xaa, 0x2a, 0xae, 0x32, 0x15, 0xb3, 0x1a, 0xf0, 0x28, 0x24, 0xfa, 0x2d, 0x43, 0x21, 0x3a, 0xf6, 0xfa, 0x8e, 0x82, 0xd2, 0x53, 0xd4, 0xec, 0xb1, 0x3d, 0x0d, 0xd5, 0x49, 0x11, 0x8a, 0xd4, 0x06, 0x46, 0x53, 0xf9, 0x54, 0x06, 0xee, 0xcd, 0x28, 0x02, 0x12, 0xa5, 0x05, 0x08, 0x0a, 0xf0, 0x6b, 0x5c, 0xfb, 0x97, 0xa8, 0xff, 0xcf, 0x66, 0xf4, 0x95, 0x6a, 0xf9, 0xf8, 0x41, 0xfd, 0x75, 0xa1, 0xfd, 0x89, 0xb2, 0x00, 0xab, 0xd1, 0xfd, 0x5f, 0x50, 0xfa, 0x12, 0x92, 0x00, 0xcd, 0xb1, 0x02, 0xf2, 0xd1, 0xfc, 0x5c, 0x1e, 0x67, 0xea, 0x50, 0x3f, 0x67, 0x14, 0xc2, 0x63, 0x04, 0xf1, 0x0c, 0xdc, 0x28, 0x79, 0x3b, 0x14, 0xaf, 0x56, 0xf3, 0x08, 0x5b, 0xf9, 0xa1, 0x90, 0x22, 0x7e, 0xaa, 0xfe, 0x43, 0xa8, 0xd0, 0x33, 0x7b, 0xe9, 0xeb, 0x05, 0x0b, 0x72, 0x6c, 0x11, 0x27, 0xf0, 0x0a, 0x7b, 0xb6, 0xf9, 0xc8, 0x72, 0xec, 0x96, 0x9d, 0x02, 0xf9, 0xb5, 0x03, 0x47, 0x7b, 0xef, 0x61, 0x41, 0xfd, 0x87, 0xaa, 0xff, 0xd6, 0x13, 0xf3, 0x28, 0x7b, 0xf9, 0x76, 0x28, 0xfe, 0x22, 0xfd, 0xfc, 0x58, 0x3c, 0x00, 0xd9, 0xa1, 0xfd, 0xd9, 0xa2, 0xfa, 0x47, 0x9f, 0x01, 0x92, 0xa3, 0x01, 0x86, 0xe7, 0xfb, 0x56, 0x55, 0x6d, 0x7c, 0xe5, 0x42, 0xd2, 0x17, 0xbb, 0x17, 0x80, 0xf0, 0x5e, 0xc4, 0x27, 0x1c, 0xdb, 0x0f, 0xa9, 0x62, 0xf6, 0xc1, 0xb9, 0xf7, 0xa2, 0xb8, 0x24, 0x7c, 0x98, 0x06, 0xc6, 0x88, 0xcd, 0x47, 0xd3, 0xe3, 0xde, 0xdb, 0x09, 0xac, 0xd9, 0x11, 0xd3, 0xaa, 0x0c, 0xed, 0x6b, 0xfb, 0xa8, 0x78, 0xed, 0xe4, 0xe7, 0x00, 0xd3, 0x6e, 0x01, 0xfe, 0xbc, 0xf0, 0x3d, 0xe0, 0xfe, 0xa5, 0x31, 0xff, 0x95, 0x25, 0xf2, 0xa6, 0x84, 0xf9, 0x96, 0xce, 0xfe, 0x4c, 0x14, 0xfc, 0xa1, 0x97, 0xff, 0x98, 0x3d, 0xfe, 0x1d, 0x06, 0xfb, 0x96, 0x26, 0x02, 0x7b, 0xbe, 0x00, 0x0a, 0x0f, 0xfb, 0xd1, 0x0b, 0x74, 0x13, 0x17, 0x43, 0xab, 0xd3, 0xb5, 0x3f, 0xb0, 0xf3, 0x27, 0xa6, 0x25, 0x37, 0xbc, 0x09, 0xa2, 0xd2, 0xf6, 0xf6, 0x1c, 0xf6, 0x01, 0xe6, 0x28, 0x07, 0xa4, 0x0e, 0x0a, 0x21, 0xca, 0x74, 0xd8, 0xdd, 0xdb, 0x7b, 0x09, 0x63, 0x1a, 0x12, 0x1c, 0x1c, 0x0c, 0xd4, 0x3b, 0xfe, 0x4c, 0xcc, 0xef, 0x71, 0xc7, 0xfd, 0x33, 0x0e, 0x00, 0xa8, 0x79, 0xf2, 0x0e, 0xbf, 0xff, 0xf4, 0x6c, 0xfe, 0x07, 0x3e, 0xf1, 0x08, 0x94, 0xfa, 0xa4, 0xb3, 0xfe, 0x24, 0x88, 0xfa, 0x4d, 0x52, 0xff, 0x1f, 0x0b, 0xff, 0xaa, 0xa4, 0xfb, 0x17, 0x18, 0x02, 0x4e, 0x32, 0x00, 0xb2, 0x46, 0xfa, 0xca, 0xb1, 0x78, 0x3c, 0xc1, 0x43, 0xbb, 0x36, 0xb3, 0xca, 0x7b, 0xf7, 0x11, 0x3c, 0x23, 0xd1, 0xe4, 0x03, 0x69, 0x6d, 0xf5, 0x18, 0x26, 0xf3, 0x84, 0x86, 0x2e, 0x7e, 0xd2, 0x16, 0x5b, 0xba, 0xc7, 0x9c, 0xe1, 0xd8, 0x49, 0x55, 0x08, 0xe2, 0xb8, 0x11, 0x63, 0x92, 0x0a, 0x6a, 0x91, 0x02, 0xd9, 0x1a, 0xf2, 0x06, 0xaf, 0xf9, 0xa1, 0x27, 0x01, 0x99, 0xb2, 0xf3, 0xbf, 0x41, 0xff, 0xc0, 0x36, 0xfe, 0x12, 0xd8, 0xf0, 0xe9, 0x1b, 0xfc, 0xcd, 0xf8, 0xfd, 0xda, 0x18, 0xf9, 0xb3, 0xf7, 0xfe, 0x06, 0xde, 0xff, 0x02, 0xca, 0xfc, 0x59, 0x4d, 0x01, 0x8b, 0x15, 0x00, 0x20, 0x0d, 0xfa, 0x1e, 0x63, 0x7a, 0x82, 0x3d, 0x46, 0x2f, 0x33, 0xb3, 0x26, 0xb1, 0xf9, 0xe8, 0x42, 0x21, 0xe6, 0xf8, 0xff, 0x26, 0xe9, 0xf2, 0xed, 0x3c, 0xee, 0xbb, 0x5d, 0x33, 0x11, 0x4d, 0x1e, 0x7a, 0x16, 0xc8, 0x24, 0x2b, 0xd6, 0x9a, 0xf6, 0x04, 0xe9, 0xad, 0x10, 0x7c, 0xf4, 0x08, 0x9d, 0xb5, 0x06, 0x28, 0xf9, 0xf4, 0xcf, 0x83, 0xf5, 0x5f, 0x3a, 0x03, 0x23, 0x12, 0xf5, 0x78, 0x6c, 0xfd, 0xfa, 0x47, 0xfe, 0x8f, 0xa4, 0xf1, 0x62, 0x58, 0xfd, 0x58, 0xa4, 0xfc, 0x61, 0x25, 0xf8, 0xa7, 0xa0, 0xfe, 0xa5, 0x7c, 0x00, 0x1b, 0xf8, 0xfd, 0x7d, 0xf0, 0xff, 0x1c, 0x96, 0x00, 0x20, 0x8e, 0xfa, 0x6e, 0x5b, 0x7c, 0x49, 0x67, 0x49, 0x46, 0x8a, 0xb3, 0xd4, 0x92, 0xf9, 0x0d, 0x62, 0x1f, 0x9f, 0x97, 0xfe, 0x08, 0x57, 0xef, 0x42, 0x22, 0xe8, 0xea, 0xb3, 0x36, 0x6a, 0x24, 0x24, 0xbf, 0xf6, 0xca, 0xd6, 0x0f, 0xd5, 0x6f, 0x9d, 0xff, 0x08, 0xa3, 0x0f, 0xed, 0x9c, 0x08, 0x00, 0x30, 0x09, 0xc3, 0x07, 0xf8, 0x08, 0x19, 0xf3, 0xc3, 0x1b, 0x04, 0xd3, 0x62, 0xf6, 0x74, 0xa5, 0xfb, 0x4c, 0x0a, 0xfe, 0xf9, 0x12, 0xf3, 0x50, 0xbd, 0xfd, 0xd6, 0x56, 0xfb, 0xdc, 0xb4, 0xf7, 0xcf, 0x4d, 0xfe, 0x03, 0xcf, 0x00, 0x7f, 0x71, 0xfe, 0x91, 0x6e, 0xff, 0xbf, 0x49, 0x01, 0xe5, 0xf4, 0xf9, 0xcc, 0x79, 0x7d, 0xaf, 0x25, 0x4b, 0x66, 0xf9, 0xb5, 0x4e, 0x24, 0xf9, 0x86, 0x35, 0x1d, 0x56, 0xbb, 0xfe, 0x3c, 0x89, 0xeb, 0x5f, 0xde, 0xe2, 0x7e, 0xb0, 0x36, 0xf8, 0xc4, 0x27, 0x0f, 0x30, 0xd1, 0x47, 0x31, 0xd5, 0xe0, 0x77, 0xf9, 0x14, 0xff, 0x0d, 0x90, 0x7d, 0x09, 0x62, 0xd3, 0x09, 0x5e, 0xf3, 0xf9, 0xe8, 0xac, 0xf3, 0xe1, 0x8a, 0x03, 0xfb, 0x16, 0xf7, 0x6e, 0x29, 0xfb, 0x29, 0x9b, 0xfd, 0x96, 0xae, 0xf4, 0xf6, 0x5c, 0xfd, 0xfd, 0x6e, 0xfa, 0x15, 0xa7, 0xf7, 0x40, 0xd3, 0xfd, 0x3e, 0x9f, 0x00, 0x08, 0xcf, 0xfe, 0xe5, 0xd3, 0xff, 0x88, 0xe9, 0xff, 0x1e, 0x3e, 0xf9, 0xd5, 0xa0, 0x7b, 0x13, 0xd8, 0x4e, 0x94, 0xae, 0xba, 0x57, 0x23, 0xf7, 0x99, 0x37, 0x1c, 0x9d, 0x11, 0xfe, 0x27, 0x54, 0xe9, 0x7d, 0x92, 0xde, 0x31, 0x6f, 0x31, 0x7a, 0x45, 0x2c, 0xac, 0xf6, 0xd9, 0xfd, 0x50, 0xd5, 0xa4, 0x79, 0xf3, 0x24, 0xb5, 0x0b, 0xcc, 0x77, 0x0b, 0x70, 0x30, 0x09, 0x10, 0x10, 0xfb, 0xdb, 0xa6, 0xf6, 0xb1, 0x66, 0x02, 0x3d, 0xb4, 0xf6, 0x06, 0xfc, 0xfb, 0x73, 0x0b, 0xfe, 0x78, 0x61, 0xf5, 0xd3, 0xa7, 0xfc, 0x2a, 0x08, 0xfa, 0x63, 0x37, 0xf7, 0x56, 0x9c, 0xfd, 0x19, 0x0b, 0x01, 0x18, 0x49, 0xfe, 0x53, 0xf0, 0xfe, 0xa7, 0xe2, 0xfe, 0x8a, 0x54, 0xf9, 0x3c, 0x92, 0x77, 0x28, 0xbf, 0x53, 0x23, 0x51, 0xc1, 0x93, 0x93, 0xf4, 0x8e, 0x3c, 0x1b, 0x55, 0x96, 0xfc, 0x82, 0xcf, 0xe9, 0x1a, 0xc0, 0xda, 0x88, 0x74, 0x27, 0x3a, 0x9d, 0x31, 0x2f, 0xcc, 0xe3, 0xb0, 0xba, 0xd5, 0xe5, 0x5f, 0xef, 0x67, 0x4a, 0x08, 0x3d, 0x6f, 0x0d, 0x84, 0x19, 0x08, 0xda, 0x78, 0xfb, 0x66, 0x8d, 0xfb, 0x51, 0xc5, 0x00, 0xf9, 0xe2, 0xf5, 0x7a, 0x28, 0xfe, 0x2f, 0x84, 0xfe, 0x33, 0xbd, 0xf5, 0x21, 0x7e, 0xfb, 0xcf, 0x8d, 0xf9, 0x03, 0x4b, 0xf7, 0x90, 0x0b, 0xfe, 0x02, 0x9f, 0x00, 0x74, 0xb5, 0xfb, 0xda, 0x38, 0xff, 0xa9, 0xec, 0xfe, 0x6d, 0x6f, 0xf8, 0x44, 0xba, 0x71, 0xe9, 0x3a, 0x59, 0xe4, 0xd9, 0xc9, 0x9f, 0x01, 0xf1, 0x59, 0x51, 0x18, 0xdb, 0xb4, 0xfb, 0xea, 0x0a, 0xee, 0x2a, 0xb7, 0xd6, 0xa1, 0x35, 0x19, 0x42, 0x50, 0x36, 0x07, 0xfc, 0xed, 0x08, 0x18, 0xd7, 0xce, 0xf0, 0xed, 0xed, 0x85, 0x03, 0x6b, 0x37, 0x0d, 0xc7, 0xf0, 0x07, 0xff, 0x65, 0xfb, 0xb1, 0x7f, 0x00, 0x5a, 0x5f, 0x00, 0x41, 0x6e, 0xf4, 0x4c, 0x9d, 0x00, 0xfd, 0x31, 0xff, 0xc9, 0x72, 0xf5, 0x6b, 0x0c, 0xfa, 0xcb, 0x65, 0xf9, 0x81, 0x31, 0xf8, 0xfb, 0x57, 0xfc, 0x97, 0x10, 0xff, 0xb4, 0xa2, 0xfa, 0x24, 0x40, 0xff, 0xea, 0x74, 0xff, 0xe8, 0xa9, 0xf8, 0x9e, 0xf4, 0x6b, 0xa5, 0x76, 0x5a, 0x1f, 0x0b, 0xd4, 0x1c, 0xf0, 0xf1, 0x08, 0x13, 0x13, 0x66, 0xdc, 0xfa, 0x11, 0xbb, 0xf1, 0x9b, 0xa8, 0xd1, 0x59, 0x71, 0x0c, 0x54, 0xa3, 0x39, 0xa4, 0xa4, 0xf7, 0x28, 0x6a, 0xd8, 0xc5, 0xb7, 0xee, 0x37, 0xf8, 0xfe, 0x84, 0x97, 0x08, 0x02, 0xe1, 0x0a, 0x1a, 0xe2, 0xfb, 0xac, 0x25, 0x02, 0x8e, 0x9c, 0x03, 0x55, 0x4b, 0xf2, 0x3d, 0x73, 0x01, 0x2b, 0x7e, 0x01, 0x36, 0xe3, 0xf3, 0x56, 0x82, 0xf9, 0x6f, 0x6d, 0xf9, 0x71, 0xa8, 0xf6, 0x1d, 0x43, 0xfa, 0xfa, 0x70, 0xfe, 0x28, 0x0f, 0xfa, 0x07, 0x5f, 0xff, 0x45, 0x78, 0x01, 0xde, 0x68, 0xf8, 0x6f, 0x3e, 0x64, 0x22, 0x2a, 0x5a, 0x40, 0x30, 0xe0, 0xc2, 0x39, 0xf5, 0x64, 0x18, 0x0e, 0xaa, 0x12, 0xfa, 0xdb, 0x9b, 0xf4, 0x2f, 0x81, 0xcc, 0x9e, 0xfb, 0xff, 0xd3, 0x12, 0x3c, 0xe4, 0x57, 0x02, 0x5e, 0x08, 0xd9, 0xe1, 0xea, 0xef, 0x26, 0x2b, 0xfd, 0x1a, 0x1f, 0x00, 0x0a, 0x1b, 0x0e, 0xc9, 0xb9, 0xff, 0x1f, 0x8e, 0xff, 0x00, 0x9f, 0x08, 0x53, 0x38, 0xf3, 0xb6, 0x76, 0xfe, 0x60, 0x9b, 0x04, 0xbf, 0x49, 0xf4, 0xf6, 0x5d, 0xf7, 0x91, 0x03, 0xf9, 0x1f, 0x94, 0xf5, 0x7b, 0xa3, 0xf7, 0xac, 0x69, 0xfe, 0xdf, 0x3b, 0xfb, 0xe0, 0xce, 0xfe, 0x99, 0x13, 0x03, 0x14, 0xc0, 0xf8, 0x33, 0x7e, 0x5d, 0xb7, 0x44, 0x5a, 0xe1, 0x15, 0xec, 0x26, 0x2a, 0xf6, 0x79, 0x70, 0x06, 0x31, 0x76, 0xfa, 0x2d, 0xde, 0xfa, 0x7b, 0x37, 0xcb, 0xa0, 0x0f, 0xf2, 0x57, 0x3b, 0x39, 0xd7, 0xad, 0x0d, 0x13, 0x6c, 0xda, 0x78, 0xe9, 0xf0, 0xf6, 0x3f, 0x00, 0xd2, 0xc0, 0xf6, 0xee, 0x58, 0x0c, 0x64, 0x3b, 0x07, 0x27, 0x30, 0xfd, 0x1f, 0x35, 0x0a, 0x99, 0x20, 0xf8, 0xc9, 0xe6, 0xfa, 0xea, 0x64, 0x04, 0x92, 0xc0, 0xf6, 0x1f, 0xad, 0xf5, 0x79, 0xb0, 0xf7, 0xe0, 0xa4, 0xf5, 0x1b, 0x4b, 0xf6, 0xb1, 0xd7, 0xfd, 0x00, 0x01, 0xfd, 0x6d, 0x39, 0xfe, 0x8f, 0x4b, 0x03, 0x95, 0x3d, 0xfa, 0x93, 0x43, 0x59, 0x44, 0xcc, 0x59, 0xec, 0xbe, 0xef, 0x26, 0xc0, 0xf8, 0xea, 0xd7, 0x09, 0xec, 0x22, 0xf6, 0xdb, 0xe2, 0xf7, 0x5e, 0x13, 0xd1, 0xa6, 0xa9, 0xe9, 0x2a, 0x49, 0x30, 0x8e, 0x50, 0x18, 0xae, 0x1f, 0xde, 0xfd, 0x98, 0xee, 0xaa, 0xbd, 0x05, 0x0e, 0x6d, 0xf1, 0xf2, 0x01, 0x06, 0x1f, 0xb9, 0x0e, 0x3f, 0x4b, 0xfe, 0xb7, 0x45, 0x07, 0x1a, 0xc5, 0xfc, 0xea, 0xe1, 0xf9, 0xac, 0x0c, 0x01, 0x23, 0x9d, 0xfa, 0x2b, 0x63, 0xf5, 0xdc, 0x97, 0xf5, 0x4e, 0x34, 0xf8, 0x92, 0x14, 0xf5, 0x53, 0x37, 0xfc, 0x62, 0xca, 0xfe, 0x0c, 0xc9, 0xfd, 0x1d, 0x3f, 0x02, 0x0d, 0xec, 0xfa, 0xb9, 0x07, 0x5b, 0x85, 0x53, 0x56, 0x33, 0x2b, 0xec, 0x3c, 0x04, 0xfd, 0x7a, 0x4a, 0x0f, 0x0a, 0x93, 0xf1, 0xd7, 0xa0, 0xf0, 0xf1, 0x35, 0xd8, 0x32, 0x94, 0xe9, 0xbf, 0x01, 0x24, 0xf6, 0xb4, 0x1d, 0x67, 0x27, 0xe4, 0x9e, 0xcc, 0xeb, 0x7a, 0xa2, 0x0a, 0x38, 0x86, 0xf0, 0x6c, 0xa3, 0x00, 0xc6, 0x06, 0x11, 0xf6, 0xc8, 0xff, 0x62, 0x5d, 0x05, 0x38, 0x55, 0xfd, 0x33, 0xc9, 0xfb, 0x3e, 0xbf, 0xfe, 0xd3, 0x97, 0xfa, 0x56, 0xae, 0xf8, 0xa1, 0xce, 0xf4, 0x4c, 0x1d, 0xfa, 0x93, 0x23, 0xf6, 0x91, 0xb5, 0xf8, 0xc5, 0xe8, 0xfe, 0xab, 0x7e, 0xfd, 0xf3, 0x96, 0x01, 0x05, 0xd7, 0xfb, 0xea, 0x64, 0x5a, 0x80, 0xb5, 0x54, 0x10, 0x87, 0xe9, 0x7c, 0xa4, 0xff, 0x30, 0x04, 0x15, 0x52, 0x87, 0xed, 0xf3, 0x41, 0xec, 0xb1, 0x44, 0xdf, 0x77, 0xf5, 0xe8, 0x4d, 0xad, 0x17, 0x4f, 0x6a, 0x21, 0x5f, 0xa2, 0xed, 0x89, 0x4c, 0xe7, 0xab, 0x61, 0x0e, 0x9f, 0x67, 0xf3, 0x18, 0xaf, 0xf9, 0x39, 0xa8, 0x13, 0xff, 0x1f, 0xfe, 0x8a, 0xbf, 0x02, 0x32, 0x13, 0x02, 0xcf, 0xc7, 0xf9, 0x01, 0xcc, 0xfd, 0xdc, 0x18, 0xfe, 0xd3, 0x37, 0xfb, 0xb3, 0x80, 0xf5, 0xff, 0x7a, 0xfb, 0x63, 0x5b, 0xf7, 0xc6, 0x25, 0xf5, 0x4b, 0xb1, 0xfd, 0x3d, 0xed, 0xfc, 0x4c, 0x22, 0x01, 0x4b, 0x3c, 0xfe, 0xa5, 0x5b, 0x5d, 0x72, 0x96, 0x4d, 0x37, 0x75, 0xe5, 0x81, 0xcc, 0x06, 0x6f, 0x9d, 0x15, 0xc4, 0xdc, 0xe9, 0x29, 0x84, 0xeb, 0xa0, 0x47, 0xe4, 0x19, 0xbc, 0xe7, 0xcb, 0x05, 0x0e, 0x78, 0xe9, 0x24, 0x4c, 0x9e, 0xf4, 0xae, 0xf4, 0xe3, 0x52, 0xe0, 0x0e, 0x3d, 0x6b, 0xf9, 0xaf, 0x30, 0xf5, 0x37, 0x0e, 0x0f, 0x0c, 0xd8, 0x01, 0x26, 0x67, 0xfe, 0x2b, 0xc4, 0x00, 0xa1, 0x51, 0xfe, 0xa2, 0x52, 0xfd, 0x85, 0x1d, 0x01, 0x4e, 0xeb, 0xfd, 0xa1, 0xe7, 0xf4, 0x94, 0xba, 0xfb, 0x16, 0x2a, 0xf9, 0x7a, 0xe3, 0xf4, 0xe1, 0x62, 0xf9, 0xf5, 0x2d, 0xfc, 0x36, 0x3d, 0x01, 0x84, 0xdd, 0xfd, 0x0e, 0x20, 0x5f, 0xc0, 0x63, 0x4b, 0x47, 0xdc, 0xdc, 0x38, 0xe0, 0x08, 0xfd, 0x6e, 0x1e, 0xb3, 0x9f, 0xe5, 0xef, 0x88, 0xe5, 0x90, 0x64, 0xeb, 0x09, 0xba, 0xed, 0xd7, 0x1e, 0x03, 0xcf, 0x40, 0x20, 0xaf, 0xaf, 0x00, 0x22, 0x85, 0xe2, 0x6d, 0x24, 0x0a, 0x62, 0x74, 0x00, 0x01, 0x5e, 0xf3, 0xea, 0x4f, 0x0a, 0x0d, 0x29, 0x03, 0x16, 0xaa, 0xfb, 0x02, 0x88, 0xfe, 0x6d, 0xcc, 0x03, 0x18, 0xce, 0x00, 0x29, 0xc0, 0xff, 0xfb, 0x6b, 0x00, 0xf6, 0xfc, 0xf5, 0xe5, 0x35, 0xfa, 0xbc, 0x7b, 0xfb, 0x5c, 0x8e, 0xf5, 0x17, 0x3b, 0xf7, 0x3e, 0x20, 0xfa, 0x73, 0x06, 0xff, 0xd4, 0x5b, 0xfd, 0x96, 0x79, 0x60, 0x22, 0x26, 0x48, 0x4c, 0x0c, 0xd3, 0x09, 0xe3, 0x0c, 0x16, 0x8d, 0x28, 0x99, 0x4d, 0xdf, 0x12, 0xe8, 0xdf, 0x03, 0xe8, 0xf3, 0xec, 0x45, 0xf4, 0xf0, 0x15, 0xf9, 0x2b, 0x8c, 0x19, 0x79, 0x80, 0x0b, 0x17, 0xd2, 0xe2, 0x48, 0x8b, 0x04, 0x98, 0xfc, 0x05, 0x46, 0x14, 0xf2, 0x3c, 0x69, 0x06, 0x73, 0xa4, 0x04, 0x6a, 0x8a, 0xfa, 0x9e, 0x66, 0xfe, 0xd8, 0x51, 0x05, 0xcd, 0x87, 0x02, 0xe0, 0xab, 0x01, 0x97, 0xf6, 0x00, 0xa1, 0x96, 0xf6, 0xe5, 0x62, 0xfa, 0x77, 0xde, 0xfb, 0x6f, 0x50, 0xf6, 0xc0, 0xa3, 0xf7, 0xb5, 0x14, 0xf9, 0xd5, 0xc3, 0xfa, 0x6f, 0x8c, 0xfb, 0x13, 0xee, 0x61, 0x41, 0x6f, 0x41, 0x19, 0xd6, 0xca, 0xa5, 0xc1, 0x14, 0xf7, 0x80, 0x2e, 0x5f, 0xce, 0xd8, 0x5d, 0xaf, 0xde, 0x3a, 0x4b, 0xfa, 0x8b, 0x71, 0xf9, 0x73, 0x80, 0xf2, 0xfc, 0x98, 0x11, 0xe9, 0x3c, 0x12, 0x2a, 0x2c, 0xe6, 0x0a, 0x14, 0x01, 0x18, 0x35, 0x07, 0x51, 0x16, 0xf0, 0xb3, 0xd1, 0x05, 0xae, 0x41, 0x08, 0x83, 0x98, 0xf8, 0xe5, 0x4a, 0xfe, 0x3c, 0x3e, 0x07, 0x26, 0xad, 0xff, 0x4c, 0xcf, 0x03, 0x68, 0xbd, 0x04, 0xc8, 0xb8, 0xf4, 0x6b, 0x39, 0xfb, 0x5e, 0x1b, 0xfd, 0x43, 0xc7, 0xf4, 0xec, 0x7f, 0xf9, 0xdb, 0x72, 0xfa, 0x50, 0xda, 0xf6, 0x34, 0xd9, 0xf8, 0x27, 0x2d, 0x62, 0xe3, 0x50, 0x38, 0xfa, 0xa2, 0xc6, 0x33, 0x8c, 0x1e, 0x0a, 0x87, 0x2f, 0x49, 0xfa, 0xd3, 0xa5, 0xae, 0xe0, 0xd3, 0x07, 0x00, 0xa2, 0xf5, 0xfb, 0x1c, 0x03, 0xeb, 0xe9, 0xc7, 0x0d, 0xbc, 0xc1, 0x18, 0xd4, 0x69, 0xe6, 0x47, 0xce, 0xfc, 0xd1, 0x9f, 0x0a, 0x30, 0x17, 0xf1, 0xb7, 0x7e, 0x01, 0x18, 0x87, 0x0b, 0x9f, 0x7f, 0xfc, 0x98, 0x3a, 0xfb, 0x73, 0x01, 0x06, 0x2b, 0x95, 0x00, 0xe4, 0x4d, 0x02, 0x9a, 0xa3, 0x06, 0x29, 0xd7, 0xf7, 0xed, 0x21, 0xf9, 0xa5, 0x30, 0xfe, 0xf4, 0x46, 0xf6, 0x5f, 0xc5, 0xf7, 0xc6, 0x0d, 0xfd, 0x4f, 0x55, 0xf7, 0x05, 0x51, 0xf5, 0x8f, 0xc4, 0x5d, 0x16, 0x52, 0x30, 0x8f, 0x7d, 0xc9, 0xb3, 0x2b, 0x25, 0x6f, 0x95, 0x2b, 0x07, 0x98, 0xd3, 0x58, 0xe8, 0xe6, 0xb9, 0x6e, 0x01, 0x95, 0xcf, 0xf9, 0xad, 0xbe, 0xe8, 0xc0, 0xd1, 0x0c, 0xc4, 0x3a, 0x1a, 0x87, 0xd4, 0xe5, 0x32, 0xa0, 0xfa, 0x91, 0x82, 0x0e, 0xd4, 0xad, 0xf2, 0x37, 0xaa, 0xfc, 0x02, 0x4b, 0x0d, 0x7e, 0xaa, 0x00, 0xca, 0x91, 0xf9, 0x3a, 0x3d, 0x04, 0x66, 0x72, 0x00, 0x46, 0x3b, 0x01, 0x58, 0xf7, 0x06, 0x78, 0x88, 0xf9, 0xd4, 0x28, 0xf9, 0x0b, 0x43, 0xff, 0xc2, 0x95, 0xf7, 0xf0, 0xd9, 0xf6, 0x23, 0x7f, 0xfd, 0x57, 0x52, 0xf9, 0x66, 0x4d, 0xf5, 0xaf, 0xbf, 0x55, 0x8e, 0xf3, 0x2a, 0xe1, 0xc7, 0xd0, 0x4a, 0x9b, 0x26, 0x00, 0x82, 0x27, 0x15, 0x59, 0xd8, 0x86, 0x5c, 0xea, 0x2e, 0x15, 0x00, 0x81, 0x25, 0xfb, 0xad, 0x92, 0xe8, 0xea, 0x62, 0x08, 0xe3, 0xad, 0x1a, 0x1f, 0x80, 0xe9, 0x09, 0xf4, 0xf7, 0xe7, 0xb7, 0x0e, 0xbb, 0x16, 0xf7, 0x58, 0xd6, 0xfa, 0x5d, 0x31, 0x0b, 0xbe, 0x36, 0x02, 0xb4, 0x3a, 0xfb, 0x94, 0x4c, 0x04, 0x36, 0x03, 0xfe, 0x05, 0x9f, 0x00, 0x40, 0xd1, 0x07, 0x41, 0x78, 0xf8, 0xae, 0x2d, 0xfa, 0x1a, 0xa7, 0x01, 0x31, 0xd6, 0xf7, 0xbb, 0x37, 0xf7, 0x7b, 0x08, 0xfe, 0x13, 0x15, 0xfa, 0xb2, 0xbc, 0xf6, 0x76, 0x02, 0x4c, 0x71, 0x60, 0x28, 0x15, 0x60, 0xd8, 0xd3, 0x33, 0x24, 0xc3, 0x6e, 0x26, 0x88, 0x14, 0xdd, 0xe8, 0xbb, 0xea, 0x46, 0x5b, 0x01, 0x14, 0x22, 0xfd, 0x09, 0xaa, 0xe7, 0xff, 0x2f, 0x04, 0x42, 0x0a, 0x1b, 0x30, 0xfc, 0xed, 0xab, 0x10, 0xf5, 0x13, 0x56, 0x0e, 0x73, 0xba, 0xfb, 0x01, 0xfb, 0xf8, 0x67, 0xc1, 0x08, 0x28, 0xf5, 0x03, 0x00, 0xde, 0xfb, 0x6f, 0xcf, 0x03, 0xf8, 0xd0, 0xfe, 0x52, 0x08, 0xff, 0xf0, 0x36, 0x06, 0xb8, 0x7c, 0xfa, 0x0c, 0x70, 0xf9, 0xff, 0x80, 0x01, 0xe0, 0xe0, 0xfa, 0x5c, 0x90, 0xf7, 0x50, 0x3d, 0xfe, 0xb7, 0x2b, 0xfb, 0x78, 0x42, 0xf7, 0xb4, 0x90, 0x3d, 0xa2, 0x12, 0x1f, 0xbd, 0x80, 0xe5, 0x8e, 0x56, 0x29, 0x6d, 0x0a, 0x22, 0xd4, 0xd9, 0xdc, 0x69, 0xe2, 0xee, 0x03, 0xb7, 0x05, 0xae, 0x7a, 0xfb, 0xd1, 0x40, 0xf1, 0x75, 0x3a, 0x05, 0x4c, 0x11, 0x07, 0xbb, 0xaf, 0xf1, 0xbd, 0x2f, 0x05, 0x27, 0x1a, 0x0b, 0x34, 0x0e, 0xf8, 0x5d, 0x91, 0xfa, 0x23, 0x27, 0x04, 0x8b, 0x9b, 0x01, 0x6e, 0x19, 0xfb, 0xc4, 0xe2, 0xfe, 0xf2, 0x6b, 0x00, 0x78, 0x7b, 0xff, 0x73, 0xc5, 0xff, 0x7e, 0x32, 0xfe, 0xb4, 0xab, 0x02, 0xc4, 0xad, 0x03, 0x27, 0xbe, 0x00, 0xa9, 0x2b, 0x01, 0x3d, 0xa3, 0xff, 0xcf, 0x54, 0xfc, 0xc1, 0xce, 0xfc, 0x48, 0x90, 0x34, 0xbd, 0x60, 0x1d, 0xc4, 0x78, 0xec, 0x4a, 0xa6, 0x23, 0xfb, 0xac, 0x1e, 0xd7, 0x7b, 0xe4, 0x56, 0x90, 0xf1, 0x26, 0xb6, 0x03, 0x27, 0x57, 0xfb, 0x93, 0x59, 0xf3, 0x79, 0x8a, 0x04, 0xe1, 0xc6, 0x06, 0x2d, 0x4c, 0xf4, 0x4f, 0x6e, 0x03, 0xba, 0x79, 0x09, 0x37, 0x19, 0xfa, 0x2c, 0x8c, 0xfa, 0x93, 0x44, 0x02, 0x6d, 0x69, 0x01, 0x71, 0x3e, 0xfc, 0x8c, 0x8a, 0xfe, 0x55, 0xaf, 0xff, 0x52, 0x12, 0x00, 0x7e, 0x15, 0x01, 0xcf, 0x80, 0xfe, 0x07, 0x36, 0x01, 0x9f, 0x6e, 0x03, 0x90, 0x26, 0x01, 0x4f, 0x23, 0x00, 0xde, 0x27, 0xff, 0xf6, 0x2c, 0xfd, 0x74, 0x0c, 0xfd, 0xa7, 0x21, 0x2d, 0x2b, 0x16, 0x1c, 0xad, 0xfa, 0xf1, 0xf8, 0x45, 0x1e, 0xc0, 0x8a, 0x1c, 0x1f, 0x2a, 0xeb, 0xe8, 0xe6, 0xf2, 0x8c, 0x7a, 0x02, 0xaf, 0x36, 0xfc, 0x61, 0x36, 0xf5, 0x86, 0xa3, 0x03, 0xee, 0xbd, 0x06, 0x67, 0xf7, 0xf6, 0xcd, 0x79, 0x01, 0x02, 0x29, 0x08, 0x92, 0x84, 0xfc, 0x64, 0x72, 0xfa, 0xe6, 0x0a, 0x01, 0x9c, 0xb6, 0x01, 0x8e, 0xf8, 0xfc, 0x93, 0xa2, 0xfe, 0x0b, 0xcc, 0xff, 0x4c, 0xa5, 0x00, 0xfb, 0x4f, 0x01, 0xf6, 0xa1, 0xfe, 0x76, 0x3f, 0x01, 0xc3, 0x87, 0x02, 0x26, 0x4b, 0x00, 0x35, 0x91, 0x00, 0x8e, 0xf1, 0xff, 0xaa, 0x87, 0xfd, 0x3c, 0x10, 0xfd, 0xb3, 0x0d, 0x27, 0xf5, 0xa7, 0x1a, 0x88, 0x80, 0xf5, 0x43, 0xf7, 0x19, 0x2b, 0xdc, 0x1a, 0xce, 0xe7, 0xef, 0x0d, 0x8c, 0xf4, 0x1a, 0x16, 0x02, 0xa3, 0x0b, 0xfd, 0x2f, 0xe7, 0xf6, 0x4c, 0xef, 0x02, 0x10, 0xb9, 0x06, 0x5d, 0x79, 0xf8, 0x28, 0x0b, 0x00, 0x8d, 0x7c, 0x07, 0xeb, 0x8d, 0xfd, 0x07, 0x89, 0xfa, 0xfc, 0x97, 0x00, 0x75, 0xda, 0x01, 0x41, 0xc3, 0xfd, 0x11, 0xa0, 0xfe, 0x60, 0x5d, 0x00, 0x48, 0x15, 0x01, 0x07, 0xa3, 0x00, 0x46, 0x14, 0xff, 0xad, 0x21, 0x01, 0x70, 0x6b, 0x01, 0x5a, 0x25, 0x00, 0xb2, 0x0d, 0x01, 0xe9, 0xab, 0x00, 0x8b, 0xfe, 0xfd, 0x10, 0x58, 0xfd, 0x00, 0x57, 0x22, 0x09, 0x8b, 0x18, 0xc9, 0xef, 0xf7, 0x2d, 0x06, 0x17, 0x4b, 0x91, 0x18, 0xd9, 0xbf, 0xf3, 0x2e, 0x8d, 0xf6, 0xcf, 0x97, 0x01, 0xda, 0x33, 0xfe, 0xe0, 0x58, 0xf8, 0xa5, 0x32, 0x02, 0xaf, 0x6f, 0x06, 0x2c, 0x7a, 0xf9, 0x6c, 0x49, 0xff, 0xe5, 0x7b, 0x06, 0xaf, 0x2c, 0xfe, 0xe9, 0xfc, 0xfa, 0x65, 0x65, 0x00, 0x6c, 0x26, 0x02, 0x80, 0x24, 0xfe, 0x7b, 0x10, 0xff, 0x69, 0xf6, 0x00, 0x7a, 0x7d, 0x00, 0x34, 0x61, 0x00, 0x08, 0x7c, 0xff, 0xca, 0x81, 0x00, 0x3b, 0x57, 0x01, 0x13, 0x97, 0x00, 0x2d, 0x0b, 0x01, 0x72, 0x0b, 0x01, 0x1c, 0xb4, 0xfe, 0x46, 0xc1, 0xfd, 0xd0, 0x3a, 0x1e, 0x35, 0x79, 0x16, 0x16, 0x48, 0xfa, 0x5b, 0x11, 0x14, 0xf6, 0x24, 0x16, 0x04, 0xa9, 0xf7, 0xac, 0x64, 0xf8, 0x66, 0x78, 0x01, 0x58, 0x37, 0xff, 0x0e, 0x4f, 0xf9, 0xe2, 0x05, 0x02, 0x0c, 0xd5, 0x05, 0x57, 0x0e, 0xfa, 0x3f, 0x06, 0xff, 0xae, 0xbf, 0x05, 0x20, 0xb1, 0xfe, 0xaf, 0x61, 0xfb, 0x3e, 0xa6, 0x00, 0xea, 0x63, 0x02, 0xb5, 0xbd, 0xfe, 0x37, 0xbe, 0xff, 0x4c, 0x6c, 0x00, 0xb7, 0x44, 0x00, 0xb1, 0xd5, 0x00, 0xa5, 0x76, 0xff, 0x1f, 0xa2, 0x00, 0xcb, 0x99, 0x01, 0x62, 0xde, 0x00, 0x76, 0x34, 0x01, 0x85, 0xf9, 0x00, 0x3e, 0x25, 0xff, 0xf4, 0x5b, 0xfe, 0xfb, 0x1f, 0x1a, 0x7f, 0x0e, 0x14, 0xc0, 0x3e, 0xfc, 0x0d, 0x03, 0x12, 0x7f, 0xd1, 0x14, 0xdf, 0xe1, 0xfa, 0x47, 0xa2, 0xf9, 0xb4, 0x69, 0x01, 0xde, 0x0c, 0x00, 0x60, 0x7f, 0xfa, 0x18, 0x8d, 0x01, 0xfe, 0xc9, 0x04, 0x9f, 0xee, 0xfa, 0xbf, 0x16, 0xff, 0x3b, 0xde, 0x04, 0xd3, 0xd9, 0xfe, 0x60, 0x8d, 0xfc, 0xbf, 0x37, 0x01, 0xfd, 0xfc, 0x01, 0x3f, 0x3d, 0xff, 0x00, 0xf1, 0xff, 0xc2, 0x53, 0x00, 0xce, 0xe8, 0x00, 0xfc, 0x09, 0x01, 0xd7, 0x83, 0xff, 0xde, 0xcc, 0x00, 0x9f, 0xd3, 0x01, 0xca, 0x00, 0x01, 0x88, 0x2d, 0x01, 0x66, 0x13, 0x01, 0x2a, 0x62, 0xff, 0xb0, 0x1a, 0xff, 0x99, 0x40, 0x16, 0x00, 0x65, 0x12, 0x53, 0x09, 0xfe, 0x96, 0xa6, 0x0f, 0x42, 0x5e, 0x13, 0x5f, 0xaf, 0xfd, 0xf0, 0x13, 0xfb, 0x5e, 0x6e, 0x01, 0x8c, 0xab, 0x00, 0x56, 0x37, 0xfb, 0xc8, 0xdf, 0x00, 0x0c, 0x3d, 0x04, 0x4d, 0xd7, 0xfb, 0x08, 0x01, 0xff, 0x1c, 0x04, 0x04, 0x56, 0x94, 0xff, 0x3a, 0x94, 0xfd, 0x24, 0xcb, 0x00, 0x01, 0x24, 0x02, 0x95, 0x0f, 0x00, 0xd3, 0x17, 0x00, 0x95, 0xed, 0x00, 0xc0, 0x20, 0x01, 0x3d, 0xd3, 0x00, 0xce, 0xfd, 0xff, 0xda, 0xf3, 0x00, 0x54, 0xc7, 0x01, 0x87, 0x13, 0x01, 0x2d, 0x10, 0x01, 0x18, 0x44, 0x01, 0x0c, 0xe4, 0xff, 0xe9, 0xeb, 0xfe, 0x44, 0x21, 0x13, 0x47, 0xb8, 0x10, 0xb8, 0x62, 0xff, 0x9d, 0xe9, 0x0d, 0x69, 0x0e, 0x12, 0xee, 0xe8, 0xff, 0xc0, 0x83, 0xfc, 0x99, 0x8b, 0x01, 0xf9, 0xf1, 0x00, 0xeb, 0xd7, 0xfb, 0x84, 0x81, 0x00, 0xde, 0xd8, 0x03, 0x46, 0xff, 0xfc, 0xaf, 0x06, 0xff, 0x34, 0x15, 0x03, 0xb4, 0x3c, 0x00, 0x80, 0x8b, 0xfe, 0xba, 0x14, 0x01, 0xb3, 0xc9, 0x02, 0x45, 0xcc, 0x00, 0x96, 0x8c, 0x00, 0x40, 0x37, 0x01, 0x37, 0x1d, 0x01, 0x8c, 0x09, 0x01, 0x01, 0x6c, 0x00, 0x81, 0x23, 0x01, 0xdd, 0xae, 0x01, 0x5f, 0x34, 0x01, 0x2d, 0x4a, 0x01, 0xa0, 0x82, 0x00, 0xc9, 0xd9, 0xfe, 0x7a, 0x46, 0xfe, 0xaf, 0x86, 0x10, 0x97, 0x3b, 0x0f, 0x6a, 0xa9, 0x00, 0x2c, 0x9d, 0x0c, 0x5a, 0x8b, 0x10, 0x25, 0x10, 0x01, 0x70, 0xd7, 0xfd, 0xf4, 0x20, 0x02, 0x7b, 0xbd, 0x00, 0x04, 0x0e, 0xfc, 0x58, 0xc7, 0x00, 0x7e, 0xf9, 0x03, 0x56, 0x33, 0xfd, 0x9a, 0x38, 0xfe, 0x7e, 0x38, 0x03, 0x40, 0xa0, 0x01, 0x5f, 0x70, 0xff, 0xe1, 0xdb, 0x01, 0x7e, 0x2b, 0x03, 0x90, 0xd4, 0x00, 0xfc, 0x03, 0x01, 0x8a, 0x95, 0x01, 0xa0, 0x24, 0x01, 0x9c, 0x3f, 0x01, 0xa4, 0xad, 0x00, 0xc9, 0x23, 0x01, 0xa6, 0x2c, 0x01, 0xb0, 0x27, 0x00, 0xcb, 0x2b, 0x00, 0x4b, 0xa5, 0xff, 0x14, 0x88, 0xfe, 0xaa, 0x3f, 0xfe, 0xb6, 0x63, 0x0f, 0x04, 0xfd, 0x0e, 0x64, 0x6b, 0x01, 0xa1, 0xa1, 0x0a, 0xf2, 0x8c, 0x0e, 0x48, 0xbb, 0x01, 0x78, 0xe3, 0xfe, 0x7b, 0xb4, 0x02, 0x0b, 0xd0, 0x00, 0x4b, 0x2f, 0xfc, 0x6e, 0x7a, 0x00, 0x44, 0xa8, 0x03, 0x45, 0xf4, 0xfd, 0xfd, 0xc4, 0xfe, 0xbc, 0x4a, 0x04, 0x6e, 0x11, 0x03, 0x89, 0xc9, 0xff, 0x0f, 0x03, 0x02, 0x8d, 0x97, 0x03, 0x8e, 0xb0, 0x01, 0x6f, 0x87, 0x01, 0x60, 0x3a, 0x01, 0xce, 0x1b, 0x01, 0xc2, 0x51, 0x01, 0xeb, 0x07, 0x00, 0x3e, 0x8c, 0xff, 0xc6, 0xc5, 0xff, 0x64, 0xec, 0xff, 0xdd, 0xe8, 0xff, 0xb5, 0x55, 0xff, 0x2d, 0x1e, 0xfe, 0x23, 0x35, 0xfd, 0x0f, 0x5a, 0x0d, 0xd7, 0x07, 0x0d, 0x79, 0x1a, 0x02, 0xb1, 0x11, 0x0b, 0x24, 0xd8, 0x0d, 0xb8, 0xf3, 0x01, 0x00, 0x0e, 0x00, 0xc4, 0xe6, 0x02, 0x33, 0xf9, 0xff, 0x8d, 0x77, 0xfc, 0x2c, 0x39, 0x01, 0x8e, 0x10, 0x04, 0xb1, 0x09, 0xff, 0xd8, 0xef, 0xff, 0xe5, 0x81, 0x04, 0x54, 0x30, 0x03, 0xca, 0x39, 0x01, 0x05, 0x54, 0x03, 0x9c, 0xb4, 0x03, 0x33, 0x8d, 0x01, 0xcc, 0x0d, 0x01, 0x8d, 0xf2, 0x00, 0xe1, 0x7a, 0x00, 0xa1, 0x86, 0xff, 0x76, 0xc1, 0xfe, 0x47, 0x12, 0xff, 0xcc, 0xb9, 0xff, 0x22, 0x08, 0x00, 0xdb, 0x39, 0xff, 0xe4, 0x76, 0xfe, 0x90, 0xcb, 0xfd, 0x01, 0x95, 0xfd, 0xf7, 0x6d, 0x0c, 0x14, 0xbc, 0x0c, 0x02, 0xc8, 0x02, 0x5d, 0x45, 0x0a, 0xe5, 0xbc, 0x0c, 0x05, 0x29, 0x02, 0x0e, 0xd6, 0xff, 0x52, 0x62, 0x02, 0x39, 0x3c, 0x01, 0xe7, 0x3d, 0xfe, 0xf0, 0x8f, 0x01, 0x2d, 0x4c, 0x04, 0x2a, 0xff, 0xff, 0xb9, 0x16, 0x01, 0x8e, 0xc7, 0x05, 0x98, 0xac, 0x04, 0xe9, 0xfe, 0x01, 0x50, 0xc5, 0x02, 0xf9, 0x18, 0x03, 0xa4, 0xce, 0x00, 0xe2, 0xb3, 0xff, 0x24, 0x47, 0xff, 0x89, 0x14, 0xff, 0x4f, 0x6d, 0xff, 0x58, 0xbb, 0xfe, 0x69, 0xe0, 0xfe, 0xb4, 0xbd, 0xff, 0x94, 0x3e, 0xff, 0x9d, 0xb2, 0xfe, 0x44, 0xa5, 0xfe, 0x52, 0x30, 0xfe, 0x20, 0x06, 0xfe, 0x56, 0xa7, 0x0a, 0x49, 0x9d, 0x0b, 0x4c, 0x1e, 0x04, 0xf2, 0xed, 0x09, 0xcc, 0xba, 0x0a, 0x73, 0xe2, 0x02, 0x92, 0xba, 0x01, 0x95, 0xcd, 0x02, 0x80, 0x25, 0x02, 0xc4, 0x5d, 0xff, 0x4f, 0x57, 0x01, 0xae, 0xe2, 0x04, 0xe6, 0x55, 0x02, 0xda, 0xd0, 0x02, 0xa7, 0xbf, 0x05, 0x51, 0x34, 0x04, 0xc6, 0xb6, 0x01, 0x19, 0xbe, 0x01, 0xb4, 0xf8, 0x00, 0x7c, 0xa6, 0xfe, 0x92, 0xd7, 0xfe, 0x19, 0x64, 0xff, 0xb4, 0xf3, 0xfe, 0xb4, 0xcc, 0xfe, 0x34, 0x1c, 0xfe, 0x37, 0xa4, 0xfe, 0xca, 0xbd, 0xff, 0x67, 0x5d, 0xff, 0x71, 0xd8, 0xfe, 0xa0, 0x86, 0xfe, 0xe6, 0x1a, 0xfe, 0x67, 0x3e, 0xfe, 0x45, 0xbe, 0x09, 0x5f, 0xad, 0x0a, 0xb2, 0x07, 0x04, 0xb5, 0x3d, 0x09, 0x87, 0x43, 0x0b, 0x44, 0x29, 0x05, 0xe7, 0x81, 0x02, 0xf9, 0xa6, 0x02, 0xed, 0x0b, 0x03, 0x41, 0x79, 0x01, 0x3d, 0xbe, 0x02, 0x32, 0x2f, 0x05, 0x1d, 0xb4, 0x03, 0x36, 0x7a, 0x03, 0xeb, 0x5e, 0x04, 0xc4, 0x8e, 0x02, 0x27, 0xc3, 0xff, 0x78, 0x8e, 0xff, 0x03, 0x00, 0x00, 0x8c, 0x37, 0xff, 0x0a, 0xfd, 0xfe, 0xe5, 0x43, 0xfe, 0xfd, 0xef, 0xfd, 0x34, 0x9f, 0xfe, 0xaf, 0xff, 0xfe, 0x26, 0x8f, 0xff, 0x60, 0x75, 0xff, 0x4c, 0xb9, 0xfe, 0x40, 0x97, 0xfe, 0x68, 0xd2, 0xfe, 0x8a, 0x97, 0xfe, 0x9d, 0x01, 0xfe, 0x68, 0xc7, 0x08, 0xae, 0xd5, 0x0b, 0xaa, 0xbe, 0x06, 0x86, 0xb6, 0x08, 0x62, 0x46, 0x0a, 0xb2, 0xc6, 0x05, 0xab, 0x6b, 0x03, 0x39, 0xbb, 0x04, 0x3d, 0xac, 0x04, 0x7a, 0x0f, 0x02, 0x82, 0x7c, 0x03, 0xe8, 0x12, 0x05, 0x50, 0xef, 0x01, 0xa7, 0x42, 0x01, 0xce, 0x89, 0x02, 0xef, 0xd0, 0x00, 0xc2, 0xd7, 0xfe, 0xb3, 0x21, 0xff, 0xd2, 0x59, 0xff, 0x09, 0x70, 0xfe, 0x26, 0x2b, 0xfe, 0xa6, 0x5e, 0xfe, 0xa7, 0x7c, 0xfe, 0xa1, 0xe9, 0xfe, 0xc0, 0x3d, 0xff, 0x2f, 0x6c, 0xff, 0x0c, 0x15, 0xff, 0x15, 0x7c, 0xfe, 0xf2, 0x93, 0xfe, 0xfa, 0x94, 0xfe, 0x5a, 0x55, 0xfe, 0xdf, 0x4c, 0xfe, 0xda, 0xef, 0x07, 0x5a, 0x11, 0x0c, 0x23, 0xed, 0x07, 0x91, 0xe6, 0x08, 0x96, 0x37, 0x0c, 0x7e, 0xa9, 0x09, 0xd8, 0x06, 0x05, 0x8b, 0xdf, 0x03, 0xd6, 0x5f, 0x04, 0xb4, 0x50, 0x02, 0xdd, 0x9b, 0x01, 0x92, 0x1e, 0x02, 0xe8, 0x80, 0x00, 0x2a, 0x72, 0x00, 0x24, 0xb1, 0x01, 0xf0, 0x83, 0x00, 0xce, 0x81, 0xfe, 0x4a, 0x61, 0xfe, 0xfa, 0xb1, 0xfe, 0x26, 0x28, 0xfe, 0xe6, 0x42, 0xfe, 0x61, 0xb2, 0xfe, 0x4c, 0xc9, 0xfe, 0xfd, 0x17, 0xff, 0x95, 0x16, 0xff, 0x4b, 0xd2, 0xfe, 0x11, 0xaa, 0xfe, 0xfc, 0x9b, 0xfe, 0xaa, 0xcc, 0xfe, 0x6d, 0xb7, 0xfe, 0x6f, 0x61, 0xfe, 0xf7, 0x2e, 0xfe, 0xcb, 0xd1, 0x08, 0x5f, 0x49, 0x0e, 0x51, 0x64, 0x0a, 0x99, 0xe7, 0x0a, 0x1d, 0x36, 0x0c, 0x7a, 0x35, 0x08, 0x15, 0xa5, 0x05, 0x7d, 0x1b, 0x05, 0x5f, 0xfb, 0x02, 0x81, 0x41, 0xff, 0x55, 0x28, 0xff, 0x39, 0xf0, 0x01, 0x57, 0x2b, 0x01, 0x80, 0x44, 0xff, 0x2f, 0x6a, 0x00, 0x7a, 0x83, 0x00, 0x87, 0xc8, 0xfd, 0x65, 0xc3, 0xfd, 0x82, 0x87, 0xff, 0x25, 0xc4, 0xfe, 0xb4, 0x18, 0xfe, 0xcd, 0xbf, 0xfe, 0xd4, 0xe2, 0xfe, 0x7f, 0xdc, 0xfe, 0x76, 0x1d, 0xff, 0xb7, 0xe6, 0xfe, 0xe3, 0x8d, 0xfe, 0x0f, 0xaf, 0xfe, 0x43, 0xa4, 0xfe, 0x06, 0x9d, 0xfe, 0xb5, 0xc1, 0xfe, 0x32, 0x7b, 0xfe, 0xcd, 0x7a, 0x0a, 0xda, 0x3f, 0x12, 0x92, 0x63, 0x0d, 0x93, 0x86, 0x09, 0x1f, 0x28, 0x09, 0xa9, 0xd3, 0x06, 0xbc, 0xcc, 0x04, 0x20, 0xc7, 0x03, 0x1b, 0x42, 0x02, 0x7a, 0x63, 0x00, 0x75, 0x64, 0x00, 0xf9, 0x46, 0x00, 0x90, 0xfc, 0xfe, 0x56, 0x93, 0xff, 0xa5, 0x53, 0x00, 0x8f, 0x4b, 0xff, 0xba, 0x4a, 0xfe, 0x4b, 0xa3, 0xfe, 0xe4, 0xf4, 0xfe, 0xdc, 0x84, 0xfe, 0x13, 0xd0, 0xfe, 0x3e, 0xd9, 0xfe, 0x12, 0x93, 0xfe, 0xbc, 0xef, 0xfe, 0xa6, 0xc9, 0xfe, 0x08, 0xb1, 0xfe, 0xb5, 0xc2, 0xfe, 0x16, 0xa1, 0xfe, 0x31, 0xa6, 0xfe, 0xad, 0x95, 0xfe, 0xf3, 0xae, 0xfe, 0xa2, 0x9c, 0xfe, 0xc8, 0x8a, 0x0b, 0xfc, 0x8b, 0x12, 0xb3, 0x58, 0x0c, 0xc9, 0x0a, 0x08, 0xa8, 0x2b, 0x07, 0x0f, 0xba, 0x05, 0x24, 0x9d, 0x05, 0xdc, 0x0b, 0x05, 0xde, 0x33, 0x02, 0x9b, 0x46, 0x01, 0x21, 0xa8, 0x02, 0xf6, 0xbc, 0x00, 0xdf, 0x9a, 0xfe, 0x91, 0xa0, 0xfe, 0x00, 0x18, 0xff, 0x94, 0x60, 0x00, 0xc4, 0xe2, 0xff, 0xd1, 0xf5, 0xfd, 0xaf, 0xff, 0xfd, 0x62, 0x80, 0xff, 0x92, 0x7e, 0xff, 0x29, 0x9b, 0xfe, 0x9e, 0xeb, 0xfe, 0x7e, 0xca, 0xfe, 0x5a, 0x7e, 0xfe, 0x4e, 0xd9, 0xfe, 0x0a, 0xa5, 0xfe, 0xe3, 0xac, 0xfe, 0x04, 0xda, 0xfe, 0x7c, 0xc4, 0xfe, 0xc4, 0xd4, 0xfe, 0x76, 0xba, 0xfe, 0xca, 0x65, 0x0a, 0x95, 0x9e, 0x10, 0xbc, 0xbf, 0x0a, 0xc1, 0xa4, 0x06, 0xe3, 0x7f, 0x06, 0x2e, 0x59, 0x05, 0xb0, 0x3e, 0x04, 0xce, 0x12, 0x05, 0xa6, 0x07, 0x05, 0x37, 0xa6, 0x02, 0xfe, 0x13, 0x03, 0x82, 0x6b, 0x03, 0x48, 0x36, 0x00, 0x35, 0xee, 0xfe, 0xb4, 0xdf, 0xff, 0xac, 0x92, 0xff, 0x7c, 0xa7, 0xfe, 0x3b, 0x06, 0xff, 0x26, 0xb3, 0xff, 0x6a, 0xef, 0xfe, 0x36, 0xa7, 0xfe, 0x37, 0x7c, 0xff, 0x4d, 0x3f, 0xff, 0xff, 0x4f, 0xfe, 0xc7, 0x41, 0xfe, 0x0d, 0xc3, 0xfe, 0x01, 0xc8, 0xfe, 0x00, 0xc8, 0xfe, 0x89, 0xfd, 0xfe, 0xa0, 0x00, 0xff, 0x76, 0x19, 0xff, 0x83, 0xfd, 0xfe, 0xd6, 0x5b, 0x09, 0xe5, 0xc8, 0x0d, 0x42, 0x9a, 0x08, 0xc1, 0xba, 0x06, 0xcb, 0x16, 0x06, 0x7e, 0x1b, 0x04, 0xe7, 0x03, 0x04, 0x10, 0x98, 0x03, 0xf4, 0x2d, 0x02, 0x4b, 0x69, 0x03, 0xae, 0x09, 0x06, 0x96, 0xe9, 0x04, 0x37, 0x35, 0x03, 0x15, 0x45, 0x02, 0x42, 0x66, 0x00, 0xb4, 0x5c, 0x00, 0xfc, 0xfe, 0xff, 0x3a, 0x47, 0xfe, 0x13, 0x5b, 0xfe, 0x44, 0x86, 0xff, 0xf9, 0xb3, 0xff, 0x1b, 0x97, 0xfe, 0x10, 0x1c, 0xfe, 0x25, 0xdf, 0xfe, 0xf9, 0x08, 0xff, 0x94, 0x87, 0xfe, 0x26, 0xae, 0xfe, 0x2b, 0x1f, 0xff, 0x10, 0x31, 0xff, 0xd0, 0x49, 0xff, 0x95, 0x0a, 0xff, 0x43, 0xc2, 0xfe, 0x43, 0xc7, 0x07, 0xbc, 0x36, 0x0a, 0xe4, 0x4e, 0x05, 0x17, 0xf7, 0x05, 0xcb, 0x4f, 0x07, 0xe8, 0x07, 0x06, 0xef, 0xf3, 0x03, 0x80, 0x24, 0x00, 0xa5, 0x0f, 0x00, 0xa6, 0xa1, 0x03, 0x42, 0xcb, 0x04, 0x7d, 0x6a, 0x04, 0x55, 0xa9, 0x05, 0x55, 0x9b, 0x05, 0x9c, 0x7b, 0x04, 0x13, 0x24, 0x04, 0x05, 0x6f, 0x01, 0x97, 0x4f, 0xff, 0x7d, 0xbd, 0xff, 0xee, 0xe7, 0xfe, 0xeb, 0xff, 0xfd, 0x2f, 0xdb, 0xfe, 0x37, 0x7e, 0xff, 0xbd, 0xb4, 0xfe, 0x72, 0x63, 0xfe, 0x82, 0x12, 0xff, 0x48, 0x6a, 0xff, 0xcb, 0x3e, 0xff, 0xb5, 0xe2, 0xfe, 0x2f, 0x3c, 0xff, 0xbd, 0x7e, 0xff, 0x15, 0xff, 0xfe, 0x9f, 0xe8, 0x08, 0x8b, 0x9f, 0x0b, 0x27, 0x41, 0x04, 0x1f, 0x69, 0x03, 0xcd, 0xe7, 0x05, 0xfe, 0x75, 0x05, 0xc7, 0x96, 0x03, 0x90, 0x25, 0x00, 0xe5, 0xd0, 0xff, 0x74, 0xc6, 0x02, 0x57, 0x9b, 0x03, 0x50, 0x61, 0x02, 0x31, 0x1d, 0x03, 0x5a, 0xe6, 0x04, 0x65, 0x0d, 0x06, 0xe9, 0x74, 0x06, 0x77, 0x1d, 0x04, 0x37, 0xe9, 0x01, 0xbd, 0x67, 0x01, 0x9a, 0x19, 0x00, 0x40, 0x29, 0xff, 0x09, 0x81, 0xfe, 0x9f, 0xfe, 0xfd, 0x12, 0xe9, 0xfe, 0xfe, 0x94, 0xff, 0xad, 0xe8, 0xfe, 0xde, 0x80, 0xfe, 0x49, 0x5c, 0xff, 0xc8, 0xd2, 0xff, 0xb2, 0x46, 0xff, 0x7a, 0xee, 0xfe, 0x7e, 0xac, 0xfe, 0xb7, 0xb2, 0x09, 0xe4, 0x97, 0x0c, 0xee, 0x04, 0x05, 0x5c, 0xfe, 0x03, 0xc8, 0xfe, 0x05, 0x7e, 0x56, 0x05, 0xb2, 0xf2, 0x02, 0x65, 0xca, 0xfe, 0xc6, 0x82, 0xff, 0x40, 0x37, 0x04, 0x2c, 0x88, 0x03, 0x1e, 0xf0, 0xff, 0x89, 0xfb, 0x00, 0xe8, 0x64, 0x02, 0xcf, 0xdd, 0x02, 0x86, 0xf2, 0x04, 0x09, 0xa0, 0x04, 0x6a, 0x69, 0x03, 0xd5, 0xe9, 0x03, 0x0f, 0xea, 0x02, 0x6a, 0x82, 0x00, 0x70, 0x6f, 0xff, 0x75, 0x1d, 0xff, 0x03, 0x68, 0xfe, 0xde, 0x53, 0xfe, 0x45, 0xcf, 0xfe, 0xd3, 0x3f, 0xff, 0xcd, 0x4d, 0xff, 0xa8, 0xd6, 0xfe, 0x89, 0x24, 0xff, 0x15, 0xb5, 0xff, 0x8c, 0xe6, 0xfe, 0xd0, 0x2e, 0x0b, 0xb8, 0x1e, 0x0e, 0x7d, 0xc4, 0x04, 0xf8, 0x4a, 0x04, 0xd4, 0x96, 0x07, 0xf0, 0xda, 0x05, 0xd2, 0xf0, 0x01, 0x71, 0x34, 0xfd, 0xd4, 0x3c, 0xff, 0xb4, 0x28, 0x05, 0x8b, 0x13, 0x03, 0x40, 0x14, 0xff, 0x77, 0xa7, 0x00, 0x14, 0x54, 0x01, 0xce, 0x7e, 0x01, 0x83, 0x93, 0x02, 0x82, 0x47, 0x01, 0xda, 0xb7, 0x01, 0x81, 0x23, 0x04, 0x7b, 0xb3, 0x03, 0x10, 0x57, 0x02, 0x63, 0x1b, 0x02, 0x9e, 0x78, 0x00, 0xe0, 0xfd, 0xfe, 0x80, 0x76, 0xff, 0xaf, 0xcb, 0xfe, 0xc6, 0x37, 0xfe, 0x55, 0x38, 0xff, 0xcf, 0x8f, 0xff, 0x87, 0x30, 0xff, 0x64, 0xad, 0xfe, 0xf1, 0xa4, 0xfe, 0x51, 0x97, 0x0c, 0x8f, 0x84, 0x10, 0x47, 0x8b, 0x05, 0xdd, 0xe9, 0x03, 0xcd, 0xb9, 0x07, 0x4e, 0x26, 0x06, 0x9e, 0x58, 0x01, 0x14, 0x24, 0xfc, 0x6a, 0xc4, 0xff, 0xb9, 0xe1, 0x05, 0x86, 0xd3, 0x01, 0xf3, 0x11, 0xfe, 0xfc, 0xcf, 0x00, 0xc0, 0x1c, 0x01, 0x55, 0x14, 0x01, 0x06, 0x5e, 0x02, 0xaf, 0x18, 0x00, 0x55, 0x5e, 0xff, 0x74, 0xce, 0x01, 0x9b, 0x41, 0x02, 0x7f, 0x16, 0x02, 0x34, 0x60, 0x02, 0x8a, 0xd9, 0x01, 0x6f, 0x68, 0x01, 0xaf, 0xb1, 0x00, 0x91, 0x7d, 0xff, 0x9b, 0x56, 0xff, 0xfc, 0xa4, 0xff, 0xa3, 0x08, 0xff, 0xb4, 0xdb, 0xfe, 0xd9, 0x3a, 0xff, 0xa7, 0xa3, 0xfe, 0xce, 0x18, 0x0e, 0x9c, 0x7b, 0x12, 0xbb, 0xd5, 0x05, 0xae, 0x26, 0x04, 0x2b, 0xdb, 0x08, 0xbe, 0x6e, 0x06, 0x98, 0xb9, 0xff, 0xaa, 0xab, 0xfa, 0xa1, 0xd9, 0x00, 0xb5, 0xa2, 0x06, 0x2f, 0xad, 0x00, 0x9e, 0x78, 0xfd, 0xfb, 0xa2, 0x00, 0x9f, 0xa1, 0x00, 0xf7, 0xba, 0x00, 0xcb, 0x55, 0x02, 0xe6, 0x02, 0x00, 0x19, 0xc2, 0xfe, 0xbc, 0xe3, 0x00, 0x53, 0xae, 0x00, 0xe3, 0xed, 0xff, 0x73, 0xc9, 0x00, 0x2c, 0x2f, 0x01, 0x20, 0x8f, 0x01, 0x5e, 0xcb, 0x01, 0xfa, 0x4f, 0x01, 0xd1, 0xcc, 0x00, 0x5e, 0x57, 0x00, 0xfa, 0x09, 0x00, 0x03, 0xa6, 0xff, 0xae, 0xb2, 0xfe, 0x9a, 0x18, 0xfe, 0xa5, 0x71, 0x10, 0x86, 0x5b, 0x15, 0x37, 0xf0, 0x05, 0xcf, 0x59, 0x03, 0x61, 0x35, 0x09, 0xeb, 0x75, 0x06, 0x0c, 0x69, 0xfe, 0xeb, 0x48, 0xfa, 0x58, 0xf2, 0x01, 0x80, 0x42, 0x06, 0xc5, 0x49, 0xff, 0x6a, 0x43, 0xfd, 0xc3, 0xc9, 0x00, 0x16, 0x57, 0x00, 0xa0, 0x67, 0x00, 0x6d, 0x14, 0x02, 0xb8, 0xb3, 0xff, 0xb4, 0x8b, 0xfe, 0x7c, 0xbc, 0x00, 0x8d, 0x16, 0x00, 0xb6, 0x26, 0xff, 0xab, 0xb8, 0xff, 0x94, 0x43, 0xff, 0xf6, 0x01, 0x00, 0x29, 0x19, 0x01, 0x7b, 0xf1, 0x00, 0xd2, 0xc1, 0x01, 0x67, 0x67, 0x02, 0xaa, 0x3e, 0x01, 0xc4, 0x08, 0x00, 0x8e, 0x9c, 0xff, 0x2a, 0xc6, 0xfe, 0x3c, 0x58, 0x12, 0x44, 0xb2, 0x17, 0x16, 0x5b, 0x06, 0x48, 0x59, 0x03, 0xba, 0x07, 0x0a, 0xe4, 0x87, 0x06, 0x3c, 0x6d, 0xfc, 0xc8, 0x79, 0xf9, 0x4e, 0xf4, 0x03, 0xb3, 0x60, 0x06, 0x2d, 0x68, 0xfd, 0x1f, 0x1a, 0xfd, 0xae, 0x16, 0x01, 0x5f, 0xbf, 0xff, 0xa1, 0x26, 0x00, 0xad, 0x50, 0x02, 0x16, 0x9c, 0xff, 0xb7, 0x2b, 0xfe, 0xd7, 0x81, 0x00, 0x59, 0xe6, 0xff, 0x9f, 0xf8, 0xfe, 0x14, 0x48, 0xff, 0x96, 0x97, 0xfe, 0x96, 0x25, 0xff, 0x2c, 0x6d, 0xff, 0x3c, 0x76, 0xff, 0xe4, 0x3a, 0x01, 0x63, 0x40, 0x02, 0xe6, 0x0f, 0x02, 0xd3, 0xa0, 0x01, 0x47, 0x92, 0x00, 0xe3, 0x53, 0xff, 0xc5, 0xa6, 0x14, 0x4e, 0x23, 0x1a, 0x45, 0x2b, 0x06, 0xa6, 0x5c, 0x03, 0x00, 0x4c, 0x0b, 0x38, 0x07, 0x06, 0xd4, 0xcd, 0xf9, 0x75, 0x76, 0xf9, 0x70, 0x48, 0x06, 0x9e, 0xa1, 0x05, 0x2f, 0x94, 0xfb, 0x0a, 0x13, 0xfd, 0xf5, 0x3f, 0x01, 0x5d, 0x9e, 0xff, 0xf8, 0xac, 0xff, 0x3e, 0xf6, 0x01, 0x63, 0x95, 0xff, 0x7c, 0xf3, 0xfd, 0xb0, 0x5c, 0x00, 0x81, 0xcb, 0xff, 0x35, 0xb8, 0xfe, 0xa6, 0xed, 0xfe, 0xc5, 0x19, 0xfe, 0x35, 0xa4, 0xfe, 0xa5, 0xea, 0xfe, 0x45, 0xa6, 0xfe, 0xf7, 0x00, 0x00, 0x91, 0x23, 0x01, 0x6e, 0x3e, 0x01, 0x80, 0x15, 0x01, 0xf4, 0x43, 0x01, 0x18, 0xc8, 0x00, 0x94, 0x68, 0x16, 0xc7, 0x17, 0x1c, 0x44, 0xe5, 0x06, 0x50, 0xea, 0x03, 0x31, 0x22, 0x0c, 0xf7, 0xeb, 0x05, 0x18, 0x5d, 0xf7, 0xdd, 0xd6, 0xf8, 0x16, 0x08, 0x09, 0x14, 0x89, 0x05, 0x9a, 0x52, 0xf9, 0x50, 0xf7, 0xfc, 0xb3, 0xb7, 0x01, 0x3c, 0x8f, 0xff, 0xff, 0x5a, 0xff, 0x35, 0xa0, 0x01, 0x77, 0xa8, 0xff, 0x93, 0xa1, 0xfd, 0xb7, 0x0b, 0x00, 0xcf, 0x18, 0x00, 0x11, 0xb7, 0xfe, 0xf9, 0x7f, 0xfe, 0x56, 0xce, 0xfd, 0xe6, 0x86, 0xfe, 0x33, 0x91, 0xfe, 0x11, 0x35, 0xfe, 0xfa, 0x98, 0xff, 0x33, 0x4c, 0x00, 0x27, 0x5d, 0x00, 0x72, 0x63, 0x00, 0xf4, 0x71, 0x00, 0x8e, 0x51, 0x00, 0xc1, 0x0c, 0x18, 0xfa, 0x84, 0x1e, 0x92, 0xcf, 0x07, 0x2c, 0xf7, 0x03, 0x57, 0xa0, 0x0c, 0x9e, 0x37, 0x06, 0xac, 0x89, 0xf5, 0xd3, 0xf0, 0xf7, 0x8c, 0x44, 0x0b, 0x8e, 0x74, 0x05, 0xdd, 0x5a, 0xf7, 0xde, 0x2e, 0xfd, 0x47, 0x1f, 0x02, 0x7d, 0x41, 0xff, 0xca, 0x25, 0xff, 0xee, 0x3a, 0x01, 0x08, 0xc9, 0xff, 0x52, 0xea, 0xfd, 0x77, 0x72, 0xff, 0x18, 0xd0, 0xff, 0xca, 0xea, 0xfe, 0x8c, 0x35, 0xfe, 0xdf, 0xc3, 0xfd, 0xa5, 0xa3, 0xfe, 0xd2, 0x23, 0xfe, 0x48, 0xc6, 0xfd, 0x51, 0x38, 0xff, 0xea, 0xf1, 0xff, 0x74, 0x4e, 0x00, 0xb6, 0xf0, 0xff, 0x01, 0x73, 0xff, 0x82, 0x62, 0xff, 0xac, 0xb7, 0x1a, 0x7a, 0xbf, 0x21, 0xcb, 0xdf, 0x06, 0xa8, 0xa5, 0x03, 0x76, 0x0c, 0x0e, 0x18, 0xf4, 0x04, 0x2d, 0x4e, 0xf4, 0x36, 0xab, 0xf8, 0xcd, 0xe5, 0x0b, 0xc9, 0xa1, 0x04, 0x46, 0x61, 0xf6, 0x6c, 0x79, 0xfd, 0x3c, 0x57, 0x02, 0xfb, 0xf9, 0xfe, 0xc6, 0xaa, 0xfe, 0xf5, 0x01, 0x01, 0x05, 0x35, 0x00, 0xd0, 0xd1, 0xfd, 0x10, 0xca, 0xfe, 0xdf, 0xa2, 0xff, 0x6a, 0x04, 0xff, 0xe7, 0x02, 0xfe, 0x93, 0x95, 0xfd, 0x72, 0x99, 0xfe, 0x9b, 0xb8, 0xfd, 0xd8, 0x7a, 0xfd, 0x0f, 0x72, 0xff, 0xe1, 0xb3, 0xff, 0x29, 0xd3, 0xff, 0xc8, 0xb0, 0xff, 0x3e, 0xd5, 0xfe, 0xec, 0xe1, 0xfe, 0xd7, 0xb4, 0x1c, 0x6d, 0x21, 0x24, 0xf7, 0xe4, 0x06, 0x50, 0x22, 0x04, 0xd9, 0x14, 0x0f, 0xf8, 0xfb, 0x03, 0xe2, 0x3f, 0xf3, 0x82, 0x92, 0xf8, 0x0a, 0x72, 0x0c, 0x22, 0xbb, 0x04, 0x63, 0x40, 0xf5, 0x34, 0x1e, 0xfd, 0x31, 0xb8, 0x02, 0xf4, 0xd9, 0xfe, 0xe7, 0x44, 0xfe, 0xe6, 0xde, 0x00, 0x67, 0x7c, 0x00, 0xd2, 0x96, 0xfd, 0xd1, 0x25, 0xfe, 0xfa, 0x82, 0xff, 0x44, 0x4c, 0xff, 0x21, 0xfb, 0xfd, 0xb5, 0xe8, 0xfc, 0xa2, 0x20, 0xfe, 0xc1, 0xdd, 0xfd, 0x9a, 0x75, 0xfd, 0xb8, 0x42, 0xff, 0x76, 0xa9, 0xff, 0x2b, 0x4e, 0xff, 0x71, 0x3d, 0xff, 0xf9, 0xea, 0xfe, 0xe0, 0x8c, 0xfe, 0xf4, 0xa0, 0x1d, 0x39, 0xc0, 0x25, 0xb7, 0xd3, 0x07, 0x50, 0x81, 0x05, 0x63, 0x4f, 0x10, 0xd0, 0xfb, 0x02, 0x13, 0x44, 0xf2, 0x6f, 0x6b, 0xf8, 0xd1, 0x68, 0x0c, 0x8a, 0x40, 0x05, 0xd6, 0xbb, 0xf4, 0xfa, 0x0e, 0xfc, 0x57, 0xde, 0x02, 0xa5, 0x4e, 0xff, 0x96, 0x18, 0xfe, 0x91, 0x2b, 0x00, 0x22, 0x92, 0x00, 0x43, 0x03, 0xfe, 0xef, 0x79, 0xfd, 0x8a, 0x53, 0xff, 0x39, 0x87, 0xff, 0xef, 0x52, 0xfd, 0xb7, 0x88, 0xfc, 0x6a, 0x36, 0xfe, 0xe1, 0xdb, 0xfd, 0xb0, 0x69, 0xfd, 0x54, 0x9c, 0xfe, 0x6f, 0xfc, 0xfe, 0x02, 0xcf, 0xff, 0x8f, 0x9d, 0xff, 0xba, 0x51, 0xfe, 0xfa, 0x04, 0xfe, 0x00, 0x64, 0x1e, 0x59, 0xfd, 0x26, 0x66, 0x92, 0x09, 0x5c, 0xb5, 0x06, 0xba, 0xe6, 0x0f, 0xf0, 0x15, 0x03, 0x21, 0x2d, 0xf3, 0xbf, 0x65, 0xf7, 0xb8, 0xfb, 0x0a, 0x42, 0x0c, 0x06, 0x16, 0xc2, 0xf4, 0xa3, 0xd7, 0xfa, 0x58, 0x74, 0x03, 0x14, 0xb1, 0xff, 0xd3, 0x35, 0xfd, 0x93, 0xde, 0xff, 0xd2, 0x7d, 0x00, 0x15, 0xb2, 0xfe, 0x1e, 0x02, 0xfe, 0x1f, 0xf8, 0xfd, 0xd1, 0xd9, 0xfe, 0x0b, 0xc1, 0xfd, 0xec, 0x33, 0xfc, 0x92, 0xf1, 0xfd, 0xd6, 0xf9, 0xfd, 0x14, 0x08, 0xfd, 0x3b, 0xf9, 0xfd, 0x50, 0xf0, 0xfe, 0xd6, 0xee, 0xff, 0xb0, 0xa8, 0xff, 0xe7, 0x5e, 0xfe, 0xca, 0xd0, 0xfd, 0xf0, 0x59, 0x1f, 0x40, 0x31, 0x27, 0x2d, 0x81, 0x0b, 0xed, 0xa7, 0x08, 0x59, 0x3e, 0x0e, 0x11, 0xde, 0x03, 0x2a, 0x96, 0xf5, 0x79, 0xce, 0xf5, 0x45, 0xac, 0x08, 0x33, 0x50, 0x06, 0x4f, 0xd0, 0xf5, 0x88, 0x4b, 0xfa, 0x04, 0xbc, 0x02, 0x38, 0x37, 0x00, 0x1b, 0xee, 0xfc, 0x35, 0xee, 0xfe, 0xff, 0xcf, 0x00, 0x62, 0xc8, 0xff, 0xc5, 0xe9, 0xfd, 0x44, 0xba, 0xfc, 0x73, 0x8b, 0xfe, 0x48, 0xfc, 0xfd, 0xe6, 0xff, 0xfb, 0x75, 0x88, 0xfd, 0xea, 0x02, 0xfd, 0x16, 0x0d, 0xfd, 0x18, 0xab, 0xfe, 0x6a, 0x5a, 0xfe, 0x20, 0x77, 0xff, 0x31, 0xee, 0xff, 0x10, 0xb9, 0xfe, 0x98, 0x93, 0xfd, 0xaa, 0xd8, 0x20, 0xb6, 0xb3, 0x25, 0x52, 0xee, 0x0b, 0x54, 0xad, 0x0c, 0x25, 0x4a, 0x0e, 0x23, 0x77, 0x03, 0xac, 0x36, 0xf6, 0xe3, 0x62, 0xf5, 0x51, 0xb0, 0x07, 0x3c, 0xaf, 0x04, 0x5a, 0xc7, 0xf6, 0x8d, 0x20, 0xfb, 0xdb, 0xa0, 0x00, 0x8a, 0xf6, 0xff, 0x1f, 0x16, 0xfe, 0xd2, 0x28, 0xfe, 0x1c, 0xf8, 0xff, 0x9a, 0xa8, 0x00, 0xbd, 0x44, 0xfe, 0x3f, 0xac, 0xfb, 0xed, 0x8f, 0xfe, 0x70, 0x35, 0xfe, 0xa7, 0xd5, 0xfa, 0x7a, 0x95, 0xfc, 0x37, 0xb7, 0xfc, 0x2b, 0x39, 0xfd, 0x10, 0xb8, 0xfe, 0xd5, 0xee, 0xfd, 0xaf, 0x18, 0xff, 0x83, 0x25, 0x00, 0x44, 0xdc, 0xfe, 0x2d, 0x87, 0xfc, 0x7a, 0x6a, 0x22, 0x9b, 0xf1, 0x22, 0x5c, 0x3d, 0x0a, 0x1d, 0xd7, 0x12, 0xc8, 0xa1, 0x12, 0x0f, 0xb0, 0x01, 0x87, 0x43, 0xf3, 0x18, 0xbe, 0xf7, 0x1f, 0x1e, 0x0a, 0x4d, 0x2b, 0x00, 0x52, 0x41, 0xf6, 0x22, 0xdb, 0xfe, 0x22, 0xa7, 0xfe, 0xf1, 0x29, 0xfe, 0x5e, 0x90, 0x00, 0x73, 0xd3, 0xfd, 0xef, 0x08, 0xfe, 0xda, 0x08, 0x02, 0x4c, 0x48, 0xff, 0x25, 0x20, 0xfb, 0x30, 0xe4, 0xfe, 0xd8, 0x0d, 0xfe, 0x37, 0xba, 0xf9, 0xbc, 0x72, 0xfc, 0x17, 0x7e, 0xfc, 0x42, 0xb1, 0xfc, 0x3d, 0xfe, 0xfe, 0x23, 0xd2, 0xfd, 0xe5, 0x20, 0xff, 0x53, 0xac, 0xff, 0xf3, 0x83, 0xfe, 0x99, 0x6f, 0xfd, 0xf6, 0x08, 0x26, 0x97, 0x8c, 0x21, 0x55, 0xdc, 0x04, 0x26, 0x90, 0x17, 0x1a, 0xc9, 0x18, 0x3b, 0x04, 0xfe, 0x8a, 0x45, 0xf0, 0x07, 0xd2, 0xfc, 0x58, 0x52, 0x0b, 0xbb, 0x6c, 0xf9, 0x57, 0xd5, 0xf5, 0x94, 0xbd, 0x03, 0xa9, 0xbe, 0xfd, 0xd0, 0xef, 0xfa, 0x2a, 0x63, 0x01, 0x45, 0xd2, 0xfe, 0x23, 0x8f, 0xfc, 0xe6, 0x9a, 0x02, 0x67, 0x3b, 0x00, 0xdb, 0x57, 0xfa, 0xa7, 0xe1, 0xfe, 0xe9, 0x16, 0xfe, 0x6f, 0x96, 0xf9, 0x18, 0xc1, 0xfb, 0xf3, 0x1a, 0xfb, 0xc9, 0x94, 0xfc, 0x55, 0xad, 0xff, 0xba, 0x76, 0xfd, 0x13, 0xee, 0xfd, 0x24, 0x8d, 0xff, 0xdc, 0xba, 0xfe, 0x2d, 0xea, 0xfc, 0xa3, 0x86, 0x2a, 0xce, 0x44, 0x22, 0xea, 0x5f, 0xfe, 0x01, 0x72, 0x18, 0x0e, 0x75, 0x1f, 0xfe, 0x9c, 0xfc, 0x91, 0xfc, 0xec, 0x80, 0xc6, 0x01, 0x69, 0x3a, 0x0d, 0xfc, 0x69, 0xf2, 0x56, 0x70, 0xf4, 0xd4, 0x14, 0x09, 0x6d, 0x88, 0xfe, 0xec, 0x24, 0xf7, 0x27, 0xbe, 0x00, 0x65, 0x31, 0x01, 0xea, 0x8e, 0xfb, 0xef, 0xf1, 0x01, 0x53, 0xd7, 0x01, 0x42, 0xf0, 0xf9, 0x1a, 0x7f, 0xfe, 0xca, 0xa7, 0xfe, 0x6e, 0x96, 0xf9, 0x0b, 0xc8, 0xfa, 0x2d, 0x54, 0xfa, 0xf2, 0xdc, 0xfc, 0xd0, 0x7b, 0xff, 0xd6, 0xad, 0xfc, 0x13, 0x29, 0xfd, 0x94, 0x83, 0xff, 0xbd, 0xdf, 0xfe, 0xf8, 0xd5, 0xfc, 0xbb, 0x53, 0x2e, 0x02, 0x59, 0x25, 0xc8, 0x07, 0xf8, 0xb6, 0x4d, 0x15, 0xcb, 0x80, 0x26, 0x4a, 0x2d, 0xfe, 0x77, 0x7e, 0xe9, 0x9f, 0x6d, 0x05, 0x5b, 0x88, 0x10, 0x3b, 0x4d, 0xec, 0x47, 0xc3, 0xf0, 0x31, 0x17, 0x0e, 0x1c, 0xaf, 0x01, 0x36, 0x14, 0xf4, 0x35, 0xda, 0xfd, 0x6f, 0x54, 0x03, 0x04, 0x83, 0xfc, 0xd5, 0x5a, 0x00, 0x13, 0x5b, 0x03, 0xbf, 0x4e, 0xfa, 0xa9, 0xa6, 0xfd, 0xa2, 0x58, 0xff, 0x81, 0x83, 0xf9, 0x3a, 0xee, 0xfa, 0xe1, 0xd6, 0xf9, 0xb9, 0xc1, 0xfb, 0x8f, 0x35, 0xff, 0x01, 0x73, 0xfc, 0x35, 0xb1, 0xfc, 0x90, 0xe1, 0xfe, 0xbf, 0x60, 0xff, 0xdb, 0x2f, 0xfd, 0xaf, 0x31, 0x32, 0x0c, 0xb7, 0x28, 0x00, 0xa0, 0xf2, 0x69, 0x0a, 0x10, 0x58, 0x81, 0x2b, 0x5e, 0xa1, 0x01, 0x51, 0x90, 0xe6, 0xe6, 0x1a, 0x08, 0xfe, 0x5d, 0x14, 0x23, 0xeb, 0xe6, 0xac, 0x92, 0xeb, 0xf0, 0x75, 0x11, 0xff, 0x42, 0x06, 0xa9, 0x96, 0xf2, 0xaa, 0xa3, 0xf9, 0x56, 0x8f, 0x03, 0xba, 0x97, 0xfe, 0x76, 0x63, 0xff, 0x3e, 0x9c, 0x03, 0x96, 0x68, 0xfb, 0x36, 0x88, 0xfc, 0x1f, 0x52, 0xff, 0xc7, 0x3f, 0xfa, 0x8a, 0x96, 0xfa, 0x0e, 0x2c, 0xf9, 0x41, 0xf5, 0xfa, 0xdd, 0x3b, 0xfe, 0xbe, 0xea, 0xfb, 0x74, 0x01, 0xfd, 0x04, 0x75, 0xfe, 0xc8, 0xf3, 0xfe, 0x94, 0x8b, 0xfd, 0x2c, 0x7b, 0x37, 0x5a, 0xdc, 0x2a, 0x08, 0xc0, 0xed, 0xca, 0x84, 0x0b, 0x47, 0x7d, 0x2d, 0x9e, 0xfc, 0x04, 0xa5, 0x4d, 0xe5, 0x55, 0x60, 0x0b, 0xc0, 0xc8, 0x17, 0x60, 0xca, 0xe1, 0xbb, 0xf9, 0xe6, 0x41, 0xbf, 0x12, 0x07, 0x00, 0x0b, 0xf1, 0x5d, 0xf3, 0xff, 0x72, 0xf5, 0xe5, 0x07, 0x02, 0xff, 0x78, 0x00, 0x3a, 0x13, 0x00, 0xed, 0x2f, 0x03, 0x2d, 0x81, 0xfc, 0x08, 0x22, 0xfc, 0xc3, 0xb5, 0xfe, 0x4f, 0x1b, 0xfb, 0x7b, 0xcc, 0xf9, 0x45, 0xdf, 0xf8, 0xe1, 0x7a, 0xfa, 0x4f, 0x0f, 0xfd, 0x82, 0xe2, 0xfb, 0xa7, 0xf0, 0xfc, 0xf2, 0x8e, 0xfe, 0x47, 0x99, 0xfe, 0x54, 0x77, 0xfd, 0x09, 0x43, 0x3d, 0xad, 0xa8, 0x2c, 0x81, 0x06, 0xe9, 0xef, 0x30, 0x08, 0x20, 0x2f, 0x2d, 0xb8, 0xf7, 0x06, 0xc5, 0x01, 0xe6, 0x23, 0x30, 0x0f, 0xe3, 0xb8, 0x1a, 0x4f, 0x65, 0xdd, 0x84, 0x1d, 0xe3, 0xac, 0x06, 0x12, 0xf6, 0xd3, 0x0e, 0xef, 0x42, 0xf6, 0xbd, 0x1b, 0xf2, 0x34, 0x45, 0xff, 0x31, 0x21, 0x01, 0x90, 0xf8, 0x01, 0x9c, 0x3d, 0x03, 0xb4, 0xbc, 0xfc, 0x07, 0xe9, 0xfc, 0xe9, 0x90, 0xfd, 0xdb, 0xde, 0xfa, 0x12, 0x17, 0xfa, 0x14, 0x44, 0xf8, 0x92, 0xd5, 0xf9, 0x3e, 0xf9, 0xfc, 0xcb, 0xa2, 0xfb, 0x42, 0x44, 0xfc, 0x7f, 0x39, 0xff, 0xfc, 0x0d, 0xff, 0x23, 0xed, 0xfc, 0xee, 0xcd, 0x44, 0x76, 0x89, 0x2c, 0xf1, 0xa7, 0xe3, 0x14, 0x63, 0x07, 0xd6, 0x79, 0x2b, 0x2e, 0xae, 0x05, 0x05, 0x8e, 0xe7, 0xfd, 0x49, 0x15, 0x00, 0x19, 0x1c, 0x2f, 0x75, 0xd8, 0xbe, 0x46, 0xe1, 0x6f, 0x49, 0x10, 0x5d, 0xb0, 0x10, 0xe4, 0x94, 0xf9, 0x2e, 0x75, 0xf0, 0x99, 0x5a, 0xfc, 0xaa, 0x00, 0x00, 0x0e, 0x56, 0x04, 0xae, 0x01, 0x04, 0xc7, 0xa0, 0xfc, 0xb7, 0xe0, 0xfd, 0x61, 0x6c, 0xfb, 0xd6, 0xa3, 0xfa, 0x96, 0xbc, 0xfa, 0x5e, 0xf0, 0xf6, 0xa0, 0x5f, 0xfa, 0xf7, 0x93, 0xfc, 0xf0, 0x97, 0xfa, 0x09, 0xbe, 0xfc, 0x00, 0xe6, 0xff, 0x09, 0x5b, 0xff, 0xdf, 0x59, 0xfc, 0x27, 0x0b, 0x4c, 0xf5, 0x23, 0x2d, 0xce, 0x10, 0xde, 0x00, 0x92, 0x07, 0x18, 0xb4, 0x29, 0x60, 0x75, 0x02, 0xd6, 0x99, 0xe9, 0xa0, 0xaa, 0x1b, 0x4c, 0x15, 0x1e, 0x0f, 0x97, 0xd4, 0xe8, 0x5a, 0xdf, 0xd1, 0xa1, 0x0e, 0x85, 0x74, 0x11, 0x04, 0x82, 0xfc, 0xdd, 0x82, 0xf0, 0x48, 0x0c, 0xfa, 0x03, 0xb8, 0xfd, 0x14, 0x30, 0x06, 0x8c, 0x00, 0x06, 0xc7, 0xc9, 0xfc, 0xea, 0xe8, 0xfd, 0x73, 0xe8, 0xf9, 0x34, 0x7d, 0xfa, 0x95, 0xfd, 0xfa, 0x58, 0xd5, 0xf6, 0xcf, 0xb1, 0xfa, 0x64, 0xa9, 0xfb, 0x0b, 0x78, 0xfa, 0xa6, 0x55, 0xfd, 0xcc, 0x7c, 0x00, 0x63, 0xe2, 0xff, 0x04, 0x71, 0xfb, 0x76, 0x91, 0x54, 0xc1, 0x23, 0x2f, 0xd9, 0xf6, 0xd5, 0xd7, 0x40, 0x05, 0x7a, 0xab, 0x29, 0x85, 0xa6, 0x01, 0x23, 0x36, 0xeb, 0x9a, 0xe7, 0x1d, 0x0e, 0x28, 0x1f, 0x3d, 0xc5, 0xd3, 0x5d, 0x1c, 0xde, 0xa2, 0x6d, 0x0d, 0x59, 0x1e, 0x11, 0x05, 0x24, 0xfd, 0x8f, 0x7e, 0xf1, 0x74, 0x6c, 0xf9, 0x29, 0x19, 0xfb, 0xbb, 0x07, 0x07, 0xb4, 0xce, 0x08, 0x3c, 0x18, 0xfc, 0x48, 0xa4, 0xfc, 0xa0, 0x68, 0xfa, 0xfa, 0x17, 0xfa, 0x9a, 0x83, 0xfa, 0xa9, 0x48, 0xf7, 0x43, 0x2f, 0xfa, 0x09, 0xa8, 0xfb, 0x27, 0x1a, 0xfb, 0xca, 0x1e, 0xfd, 0xdf, 0xe1, 0x00, 0x4e, 0x3d, 0x00, 0x86, 0x85, 0xfa, 0xc6, 0x4e, 0x5c, 0x24, 0x30, 0x32, 0x0b, 0xe8, 0xcd, 0x50, 0xeb, 0x02, 0xa2, 0x1d, 0x2a, 0x2b, 0x71, 0x00, 0xb4, 0x5b, 0xec, 0x76, 0x58, 0x1e, 0xd2, 0x6d, 0x21, 0xca, 0xc4, 0xd4, 0x02, 0x9f, 0xdb, 0x4c, 0xf0, 0x0c, 0x00, 0x08, 0x11, 0xf3, 0x42, 0xfc, 0xad, 0x9e, 0xf2, 0x52, 0x87, 0xfa, 0xd7, 0x59, 0xf8, 0xe6, 0x41, 0x06, 0xc8, 0x2e, 0x0c, 0xa5, 0x40, 0xfb, 0xa6, 0x2b, 0xfb, 0x7c, 0x23, 0xfc, 0xe3, 0x6d, 0xf9, 0xc8, 0xeb, 0xf9, 0x74, 0xfc, 0xf7, 0xca, 0xcf, 0xf9, 0x5e, 0xf6, 0xfb, 0x3d, 0x98, 0xfb, 0x18, 0x18, 0xfd, 0x70, 0xf5, 0x00, 0x30, 0x1c, 0x00, 0x14, 0xf7, 0xf9, 0x3a, 0x9f, 0x63, 0x50, 0x40, 0x34, 0x41, 0x5b, 0xc7, 0x3e, 0xbf, 0x01, 0xca, 0xfa, 0x29, 0x2b, 0xac, 0xfe, 0x89, 0x6f, 0xec, 0xdf, 0xf7, 0x1d, 0x3e, 0xa8, 0x24, 0x15, 0xf7, 0xd6, 0x8e, 0x8d, 0xd8, 0x1a, 0x64, 0x0c, 0x6c, 0x46, 0x11, 0x5d, 0xb7, 0xfa, 0x9d, 0xd9, 0xf3, 0xe7, 0x76, 0xfc, 0xa6, 0xbc, 0xf5, 0xdd, 0x62, 0x04, 0xb9, 0xe5, 0x0e, 0x15, 0x12, 0xfb, 0xbb, 0x4a, 0xfa, 0xbf, 0xcb, 0xfd, 0x5a, 0xac, 0xf8, 0xf7, 0x95, 0xf9, 0x23, 0x09, 0xf9, 0xb5, 0x7d, 0xf9, 0xe1, 0xdb, 0xfb, 0xf3, 0x3b, 0xfc, 0x26, 0x2e, 0xfd, 0x8a, 0xad, 0x00, 0xc6, 0xe9, 0xff, 0x23, 0x5a, 0xf9, 0x9b, 0x27, 0x68, 0x68, 0xd8, 0x37, 0x90, 0x0c, 0xc3, 0x78, 0x41, 0x00, 0x95, 0x5c, 0x29, 0xcf, 0xe5, 0xfc, 0x67, 0x02, 0xeb, 0x27, 0x95, 0x1b, 0x79, 0xcc, 0x29, 0xc4, 0x76, 0xda, 0xf0, 0x97, 0xd4, 0xa4, 0x21, 0x0b, 0x4d, 0x3a, 0x11, 0xe8, 0x00, 0xfa, 0xc4, 0xa8, 0xf4, 0xeb, 0x0b, 0xfe, 0x89, 0xdc, 0xf3, 0x81, 0x61, 0x01, 0xb1, 0x41, 0x10, 0x71, 0x23, 0xfc, 0x79, 0xd5, 0xf9, 0x21, 0x89, 0xfe, 0xcc, 0xc6, 0xf8, 0x5b, 0x8d, 0xf9, 0xbc, 0x94, 0xf9, 0x97, 0x37, 0xf9, 0x1b, 0x9e, 0xfb, 0xb3, 0xbc, 0xfc, 0xee, 0x38, 0xfd, 0xa5, 0x19, 0x00, 0x73, 0x85, 0xff, 0x8f, 0x54, 0xf9, 0xc3, 0xc1, 0x6b, 0x02, 0x7f, 0x3a, 0x75, 0x5b, 0xc1, 0x40, 0x67, 0xff, 0x8f, 0xe2, 0x27, 0x76, 0xa5, 0xfb, 0x68, 0xb2, 0xe7, 0x95, 0xb8, 0x18, 0x6a, 0x8e, 0x2f, 0x83, 0xea, 0xdd, 0x96, 0x1d, 0xd2, 0x32, 0x3b, 0x09, 0xf1, 0x1c, 0x10, 0x39, 0xad, 0xfa, 0x29, 0x9a, 0xf5, 0x27, 0x92, 0xfe, 0x70, 0xe4, 0xf2, 0x6a, 0xb0, 0xfe, 0x87, 0xb6, 0x0f, 0x75, 0x18, 0xfe, 0x5b, 0x5e, 0xfa, 0x42, 0xf2, 0xfd, 0xaf, 0x3f, 0xfa, 0x42, 0x1b, 0xfa, 0x92, 0xe3, 0xf8, 0xf3, 0x90, 0xf9, 0x58, 0x8d, 0xfb, 0x6a, 0xf9, 0xfc, 0xaa, 0x4e, 0xfd, 0x81, 0x1a, 0xff, 0x0d, 0x55, 0xff, 0x6a, 0xd8, 0xf9, 0x27, 0x68, 0x6e, 0x10, 0xbd, 0x3b, 0xed, 0x63, 0xc2, 0x8b, 0x6a, 0xff, 0x8f, 0xd8, 0x25, 0x11, 0xd9, 0xfa, 0x5f, 0xc9, 0xe2, 0xf7, 0xec, 0x15, 0x3d, 0xe0, 0x34, 0x86, 0x24, 0xe1, 0x47, 0xf1, 0xd1, 0xfc, 0x9d, 0x06, 0x3b, 0xb3, 0x0d, 0x5f, 0xb7, 0xfc, 0xd7, 0x29, 0xf7, 0x15, 0xc1, 0xfd, 0xb1, 0x1f, 0xf2, 0x3a, 0x4d, 0xfd, 0xe3, 0x9e, 0x0d, 0x94, 0x0e, 0x00, 0x17, 0x65, 0xfc, 0x97, 0x38, 0xfc, 0x92, 0x70, 0xfc, 0x3b, 0x88, 0xfb, 0x61, 0x54, 0xf7, 0x22, 0x75, 0xfa, 0x9f, 0xb8, 0xfb, 0x23, 0xf3, 0xfc, 0x6e, 0xff, 0xfc, 0x96, 0x45, 0xfe, 0x1f, 0x5b, 0xff, 0x7f, 0x63, 0xf9, 0xc0, 0x57, 0x6e, 0xe5, 0xe9, 0x3d, 0xe4, 0x26, 0xc6, 0xb2, 0x9e, 0xff, 0x08, 0xed, 0x23, 0x26, 0x48, 0xf9, 0xba, 0x5a, 0xdd, 0x75, 0xb2, 0x12, 0x5e, 0x54, 0x39, 0xfc, 0x83, 0xe5, 0xa4, 0xd5, 0xd2, 0xf7, 0xf9, 0x02, 0x4a, 0x9f, 0x0a, 0x19, 0x06, 0x00, 0xbe, 0x57, 0xf9, 0xe7, 0x94, 0xfb, 0x1e, 0x52, 0xf1, 0x26, 0x7d, 0xfd, 0xfa, 0xa3, 0x0a, 0x6d, 0xf3, 0x00, 0xe8, 0x08, 0x00, 0x76, 0x5d, 0xfa, 0x38, 0xc9, 0xfd, 0xd2, 0x38, 0xfe, 0xab, 0xea, 0xf5, 0x25, 0x11, 0xfb, 0xb7, 0x43, 0xfc, 0xd9, 0x2c, 0xfc, 0x07, 0xdd, 0xfc, 0x75, 0x6c, 0xfd, 0x56, 0xbc, 0xfd, 0x5d, 0xbf, 0xf9, 0x74, 0x38, 0x6c, 0x47, 0xcc, 0x40, 0x39, 0x6f, 0xcb, 0x4d, 0x94, 0xff, 0x21, 0x2c, 0x22, 0xac, 0xbc, 0xf7, 0x30, 0x17, 0xd9, 0x58, 0x81, 0x0d, 0x07, 0x08, 0x3b, 0xa6, 0xe9, 0xeb, 0x50, 0xc2, 0xd4, 0x93, 0xed, 0xfe, 0x5f, 0x1c, 0x07, 0xdf, 0x4f, 0x03, 0xc7, 0xaf, 0xfb, 0x17, 0xbe, 0xf8, 0xdf, 0x28, 0xf1, 0xfd, 0x76, 0xfe, 0x48, 0x2d, 0x07, 0x3f, 0x1e, 0x00, 0x3b, 0x7b, 0x04, 0x51, 0x30, 0xfa, 0x3d, 0x09, 0xfd, 0xc4, 0x6e, 0x01, 0x4b, 0x10, 0xf6, 0x17, 0x58, 0xfa, 0x67, 0x10, 0xfd, 0x83, 0x17, 0xfc, 0x4b, 0x19, 0xfb, 0xe4, 0x29, 0xfb, 0x6c, 0x82, 0xfd, 0xef, 0x74, 0xfa, 0xcd, 0x37, 0x68, 0x3d, 0x29, 0x43, 0xf3, 0x7d, 0xd2, 0xc4, 0x96, 0x01, 0x3a, 0x34, 0x20, 0x24, 0xdf, 0xf4, 0xa0, 0x05, 0xd6, 0x6b, 0x0f, 0x07, 0x1b, 0x2e, 0x3b, 0xd8, 0x3a, 0xf4, 0xa7, 0x5d, 0xd6, 0x7a, 0xb5, 0xfa, 0x54, 0x40, 0x04, 0x1b, 0xc7, 0x05, 0x65, 0x21, 0xfe, 0x7c, 0xb0, 0xf6, 0x09, 0x47, 0xf1, 0xb7, 0x46, 0xff, 0x7f, 0x57, 0x04, 0xa6, 0x1d, 0xfe, 0x92, 0x20, 0x08, 0xd5, 0x8e, 0xfc, 0xb0, 0x00, 0xfb, 0xdb, 0xae, 0x03, 0xa1, 0x65, 0xf8, 0x62, 0xf6, 0xf8, 0x42, 0xde, 0xfd, 0x86, 0xfe, 0xfa, 0x16, 0x2a, 0xf8, 0x29, 0x00, 0xfb, 0x2e, 0xc7, 0xfc, 0x6b, 0x60, 0xfa, 0xd6, 0xa6, 0x63, 0xff, 0x01, 0x46, 0x72, 0x9a, 0xd9, 0x75, 0x7c, 0x02, 0x6a, 0x92, 0x1d, 0x61, 0xfc, 0xf4, 0x08, 0x0c, 0xd6, 0xda, 0x89, 0xfc, 0xf5, 0x87, 0x38, 0x06, 0x9a, 0xfe, 0x46, 0xd2, 0xd7, 0x49, 0xe6, 0xf7, 0xef, 0x94, 0x02, 0xa1, 0x24, 0x05, 0x1c, 0x99, 0x00, 0x69, 0x38, 0xf7, 0xd0, 0x2a, 0xf1, 0x1b, 0xdf, 0xff, 0x54, 0x41, 0x02, 0xf1, 0x4a, 0xfb, 0x3d, 0x55, 0x0a, 0x9b, 0x83, 0x00, 0xcd, 0x3b, 0xfa, 0xa5, 0x58, 0x03, 0x75, 0xde, 0xfb, 0xbf, 0xef, 0xf8, 0x33, 0x2c, 0xfb, 0x1d, 0x22, 0xfb, 0x26, 0x98, 0xf7, 0x9a, 0x4f, 0xf9, 0x6d, 0x2c, 0xfc, 0x2c, 0xe0, 0xfa, 0x9b, 0xaa, 0x5f, 0x42, 0xb8, 0x48, 0x31, 0xd4, 0xde, 0x59, 0xb3, 0x03, 0x34, 0x09, 0x1b, 0xf9, 0x44, 0xf4, 0xf8, 0x83, 0xd9, 0x72, 0xcf, 0xf1, 0xd8, 0x64, 0x31, 0x5f, 0x55, 0x09, 0x5f, 0x5d, 0xda, 0x85, 0x3d, 0xf5, 0x48, 0x00, 0x02, 0x63, 0x3b, 0x03, 0x6b, 0x87, 0x01, 0xd7, 0xc4, 0xf9, 0x8e, 0x07, 0xf2, 0x66, 0xd9, 0xfe, 0x7b, 0x67, 0x01, 0x15, 0x19, 0xf9, 0xa7, 0x15, 0x0a, 0x71, 0x21, 0x04, 0x7f, 0xf0, 0xfa, 0xa1, 0xc4, 0x02, 0x29, 0x38, 0xfd, 0x3a, 0x7e, 0xf8, 0x91, 0x80, 0xf9, 0x86, 0xa5, 0xfb, 0x06, 0xe0, 0xf7, 0x60, 0x0b, 0xf8, 0x1d, 0x80, 0xfb, 0xb2, 0x57, 0xfb, 0x65, 0x18, 0x5d, 0x69, 0x56, 0x49, 0x52, 0xa2, 0xe2, 0x8f, 0xd6, 0x06, 0x26, 0x33, 0x19, 0x66, 0xa3, 0xf1, 0x2a, 0x5c, 0xdd, 0xf5, 0xa8, 0xea, 0xff, 0xe4, 0x27, 0x27, 0x8a, 0x11, 0x33, 0x21, 0xdf, 0x9a, 0xc8, 0xf1, 0xa8, 0x47, 0x02, 0xd7, 0x92, 0x02, 0x2a, 0x05, 0x00, 0x07, 0x91, 0xfd, 0x6f, 0x48, 0xf4, 0x2a, 0x53, 0xfc, 0x12, 0x56, 0x02, 0x51, 0xa9, 0xf7, 0x3b, 0x12, 0x07, 0xa1, 0x58, 0x07, 0x54, 0xcc, 0xfc, 0x4c, 0xfa, 0x00, 0x14, 0xf8, 0xfc, 0xb5, 0xa5, 0xf9, 0x8c, 0xeb, 0xf8, 0x15, 0x46, 0xfc, 0x80, 0x94, 0xf9, 0xbd, 0xda, 0xf6, 0xff, 0xa1, 0xfb, 0x6f, 0x7c, 0xfb, 0x01, 0xa9, 0x5a, 0x96, 0x10, 0x4a, 0x04, 0x75, 0xe5, 0x62, 0xdd, 0x09, 0xdd, 0x83, 0x19, 0xef, 0x84, 0xed, 0xbd, 0xc7, 0xe0, 0x39, 0xcc, 0xe7, 0x07, 0x10, 0x1c, 0xa1, 0x60, 0x17, 0x31, 0xe4, 0xe6, 0x22, 0xce, 0xec, 0xe1, 0x8e, 0x02, 0x33, 0x19, 0x05, 0x70, 0xc4, 0xfc, 0xea, 0x51, 0x00, 0xc1, 0x21, 0xf9, 0x95, 0x83, 0xf9, 0x5c, 0x3a, 0x03, 0xb1, 0xc9, 0xf7, 0xcd, 0xa4, 0x01, 0x60, 0x47, 0x09, 0x68, 0x27, 0xff, 0x90, 0x7b, 0xfe, 0x16, 0x77, 0xfd, 0x59, 0xdb, 0xfb, 0xdb, 0xb2, 0xf9, 0x32, 0xdf, 0xfc, 0x43, 0xc7, 0xfb, 0x6b, 0x0c, 0xf8, 0x9e, 0x78, 0xfa, 0x1e, 0x70, 0xf9, 0x74, 0x22, 0x56, 0x2d, 0xf4, 0x4a, 0xa0, 0xa7, 0xea, 0x72, 0x60, 0x0a, 0xed, 0x8c, 0x18, 0x95, 0xb2, 0xec, 0xfd, 0x4e, 0xe4, 0xf5, 0xf7, 0xe3, 0x65, 0x71, 0x10, 0x67, 0x2d, 0x1c, 0xdf, 0x4a, 0xee, 0xcb, 0x32, 0xe8, 0x50, 0xc0, 0x02, 0x7b, 0x49, 0x08, 0x6f, 0x94, 0xf9, 0x80, 0xf0, 0x01, 0x04, 0xe6, 0xfe, 0xa8, 0xc4, 0xf6, 0x36, 0x53, 0x02, 0xef, 0x10, 0xfa, 0x8b, 0x8e, 0xfb, 0x1e, 0x34, 0x06, 0xf4, 0xf5, 0x02, 0x99, 0x44, 0xfe, 0xd1, 0xfc, 0xfc, 0x33, 0xe9, 0xfe, 0x1c, 0x2b, 0xfb, 0x4e, 0x16, 0xfe, 0x27, 0xf3, 0xfd, 0xe3, 0x32, 0xf8, 0xea, 0x8e, 0xf9, 0x03, 0xea, 0xf7, 0xbd, 0x0b, 0x53, 0xeb, 0x6a, 0x49, 0x64, 0x91, 0xef, 0xc3, 0x6b, 0x0b, 0xfe, 0x10, 0x15, 0x47, 0x27, 0xee, 0xd8, 0x85, 0xe7, 0xde, 0x6b, 0xdf, 0x1c, 0xf5, 0x07, 0xed, 0xf3, 0x1d, 0x8d, 0xfc, 0xf3, 0x24, 0x96, 0xe6, 0x13, 0x83, 0x02, 0x3e, 0xf9, 0x09, 0x95, 0x84, 0xf8, 0xb5, 0x52, 0x04, 0xef, 0x78, 0x00, 0x2d, 0x0e, 0xf4, 0x41, 0xc2, 0x03, 0x27, 0xa3, 0xfa, 0xb5, 0x79, 0xf6, 0xaf, 0xa5, 0x02, 0x23, 0xe1, 0x03, 0x70, 0xa3, 0x00, 0x9c, 0xb9, 0xfd, 0x50, 0x5b, 0x01, 0x4a, 0x69, 0xfd, 0x39, 0xe7, 0xfd, 0x8d, 0xac, 0xff, 0xa5, 0xed, 0xf8, 0xe4, 0x62, 0xf9, 0xad, 0xd8, 0xf6, 0xd2, 0x3b, 0x52, 0x60, 0xfa, 0x45, 0x0c, 0xf3, 0xf1, 0xdf, 0xf0, 0x0e, 0x20, 0x98, 0x11, 0xc3, 0x83, 0xee, 0x83, 0x14, 0xec, 0xd7, 0xd2, 0xdc, 0xd2, 0xf6, 0xff, 0x25, 0x8f, 0x1e, 0x5a, 0x96, 0xfa, 0xe7, 0xeb, 0xe4, 0x85, 0xfc, 0x01, 0x71, 0xc6, 0x0e, 0xd2, 0x53, 0xf7, 0x8a, 0x6b, 0x03, 0x70, 0x3f, 0x02, 0x91, 0x67, 0xf2, 0xda, 0x0d, 0x04, 0x62, 0x7b, 0xfb, 0x2d, 0xac, 0xf4, 0xb5, 0xeb, 0x00, 0x4f, 0xd2, 0x00, 0x9e, 0xd1, 0x02, 0xd1, 0xe6, 0x03, 0xa0, 0x1e, 0x01, 0x77, 0x16, 0xfd, 0x45, 0xa7, 0x00, 0x61, 0x0f, 0x01, 0xcd, 0x3d, 0xf9, 0xc0, 0x4e, 0xf9, 0x93, 0xdd, 0xf6, 0x69, 0x2d, 0x53, 0x92, 0x78, 0x41, 0xfe, 0x8a, 0xf0, 0x48, 0x46, 0x13, 0x1a, 0x64, 0x10, 0xa2, 0x06, 0xed, 0x95, 0x74, 0xee, 0xec, 0x2e, 0xdd, 0x78, 0x4a, 0xfa, 0x4d, 0xec, 0x1b, 0x04, 0xf1, 0x00, 0xd1, 0xcb, 0xe5, 0xaf, 0xfe, 0xff, 0x96, 0xff, 0x12, 0x25, 0x03, 0xf7, 0x9e, 0x05, 0xff, 0x50, 0xbb, 0x03, 0x8a, 0x1a, 0xf3, 0x83, 0x56, 0x01, 0x11, 0xf6, 0xfd, 0x7b, 0x20, 0xf5, 0xcc, 0xbd, 0xfe, 0x98, 0xcc, 0x01, 0x43, 0x72, 0x00, 0x4f, 0x4d, 0x05, 0x58, 0xef, 0x05, 0x07, 0x1b, 0xfc, 0xe5, 0x54, 0x01, 0xe9, 0x76, 0x03, 0x54, 0x8d, 0xf8, 0xad, 0xcf, 0xf8, 0x2f, 0x2b, 0xf8, 0x0e, 0xf6, 0x54, 0x5c, 0xa3, 0x3e, 0xf8, 0x9b, 0xe8, 0x95, 0xe5, 0x17, 0x3c, 0x77, 0x17, 0x60, 0x47, 0xe6, 0x09, 0xb2, 0xec, 0x53, 0x2e, 0xe3, 0xb9, 0xb2, 0xf7, 0x8d, 0xe8, 0x16, 0x60, 0x65, 0x05, 0x1f, 0x97, 0xe9, 0xa4, 0x10, 0xfd, 0x88, 0x22, 0x15, 0x36, 0x6b, 0xf7, 0x05, 0x3d, 0xf9, 0x12, 0x85, 0x05, 0x64, 0xd4, 0xf5, 0x4b, 0xf0, 0xfd, 0xea, 0xe2, 0xfe, 0xca, 0x65, 0xf9, 0x15, 0xb3, 0xfe, 0x89, 0x1f, 0x01, 0x0a, 0x62, 0xfe, 0x48, 0xc1, 0x01, 0x5f, 0x41, 0x0b, 0xf6, 0xe0, 0xff, 0x10, 0x6b, 0xfd, 0xcb, 0x7c, 0x06, 0xb6, 0x5b, 0xfa, 0x69, 0x36, 0xf5, 0x46, 0x7e, 0xfa, 0x0e, 0xae, 0x59, 0xc1, 0xcd, 0x38, 0xd0, 0xdd, 0xdb, 0x79, 0x28, 0x21, 0x30, 0xc6, 0x20, 0x29, 0xdb, 0xd9, 0x59, 0xc2, 0xe8, 0x9a, 0xbd, 0xee, 0x14, 0xe8, 0xf8, 0xef, 0x4b, 0x0d, 0x4b, 0xb2, 0x08, 0xb6, 0x93, 0xf0, 0x5c, 0x95, 0xf6, 0x6c, 0x2f, 0x15, 0x12, 0x58, 0xfb, 0x73, 0x89, 0xf2, 0x25, 0x12, 0x05, 0xed, 0x5e, 0xfb, 0x6c, 0x24, 0xfc, 0x14, 0x57, 0xfd, 0x00, 0x27, 0xfe, 0x5b, 0xc8, 0x00, 0x32, 0xea, 0xfd, 0xe2, 0xbf, 0xfd, 0x92, 0x30, 0x00, 0xc6, 0xd9, 0x08, 0x49, 0xd6, 0x04, 0x45, 0x86, 0xff, 0x30, 0x64, 0x03, 0x87, 0x65, 0xfc, 0x6d, 0x33, 0xf6, 0x09, 0x15, 0xf9, 0x6f, 0x65, 0x5d, 0xe0, 0x4f, 0x30, 0x82, 0x24, 0xd4, 0xf4, 0x44, 0x2b, 0x37, 0x0a, 0x22, 0x26, 0xda, 0xd1, 0xb6, 0xf2, 0xea, 0x09, 0xa3, 0xf6, 0x11, 0xac, 0xf9, 0xf6, 0xda, 0x05, 0xfc, 0xb5, 0x09, 0x85, 0xb6, 0xf5, 0xd3, 0x37, 0xf3, 0x0e, 0xdd, 0x13, 0x96, 0x4c, 0xfd, 0x1d, 0xbf, 0xef, 0xef, 0x08, 0x04, 0xde, 0x2a, 0x00, 0x43, 0x31, 0xfd, 0x71, 0x9d, 0xfb, 0xa8, 0xb5, 0xff, 0xab, 0x12, 0x02, 0x0f, 0x80, 0xfe, 0xfd, 0xa7, 0xfc, 0x32, 0x85, 0xfd, 0x74, 0x8c, 0x07, 0x4a, 0xe7, 0x05, 0xa2, 0x25, 0x02, 0xeb, 0xf9, 0x02, 0xe3, 0x05, 0xfd, 0x63, 0xfe, 0xf8, 0x8d, 0x21, 0xf7, 0xac, 0x30, 0x5e, 0x3f, 0x4a, 0x29, 0x9d, 0x7a, 0xcf, 0xa5, 0xe3, 0x31, 0x1f, 0xbe, 0x23, 0x59, 0x6f, 0xcc, 0xb0, 0xdf, 0xea, 0x29, 0x80, 0x00, 0x95, 0x44, 0xfc, 0xb0, 0xde, 0xf9, 0xad, 0x9d, 0x09, 0x29, 0xdf, 0xfe, 0x7a, 0x09, 0xef, 0x1e, 0xab, 0x0e, 0x25, 0x02, 0x02, 0xfd, 0x17, 0xf1, 0x01, 0xf3, 0x00, 0xcc, 0x11, 0x02, 0x6d, 0xd3, 0xff, 0x64, 0xf6, 0xfb, 0x14, 0x61, 0xff, 0x94, 0x6f, 0x00, 0x56, 0xca, 0xff, 0xde, 0x94, 0xfe, 0x0d, 0x4f, 0xfa, 0x4e, 0x1c, 0x06, 0xe9, 0x4a, 0x07, 0x83, 0x54, 0x00, 0x42, 0x66, 0x04, 0xae, 0x49, 0x00, 0x2c, 0xdf, 0xf7, 0x45, 0xb0, 0xf7, 0x69, 0x72, 0x59, 0x46, 0xf3, 0x23, 0x9f, 0x02, 0xd1, 0xbd, 0x44, 0x35, 0x23, 0x30, 0x24, 0x8b, 0xe3, 0xca, 0xe4, 0x8a, 0xec, 0xd9, 0x4d, 0x06, 0x42, 0x14, 0xfb, 0xfb, 0xc7, 0xf3, 0x19, 0x80, 0x0a, 0x5d, 0xac, 0x02, 0xfe, 0x23, 0xec, 0x3b, 0x01, 0x0c, 0x29, 0xad, 0x06, 0x23, 0xcf, 0xf1, 0x96, 0xfd, 0xfe, 0xcf, 0xf0, 0x03, 0x5c, 0x5b, 0xff, 0x27, 0x94, 0xfc, 0x4a, 0xa2, 0x00, 0x3d, 0x60, 0xfe, 0xf8, 0x9b, 0xff, 0x44, 0x35, 0x00, 0xf7, 0xa3, 0xfa, 0x85, 0x05, 0x04, 0x01, 0xdc, 0x05, 0x35, 0x07, 0x01, 0xce, 0x2c, 0x04, 0x26, 0x46, 0x01, 0x5a, 0x27, 0xf9, 0x39, 0x49, 0xf8, 0xa6, 0x60, 0x50, 0xec, 0xca, 0x20, 0xdd, 0x5d, 0xd7, 0x19, 0x51, 0x34, 0xb0, 0xd6, 0x23, 0x71, 0x40, 0xcf, 0x5b, 0x30, 0xed, 0x36, 0x6c, 0x06, 0xed, 0xda, 0xfb, 0x30, 0x26, 0xf2, 0xde, 0xfc, 0x07, 0x4d, 0x55, 0x04, 0x22, 0x59, 0xed, 0xcd, 0xd4, 0x09, 0x72, 0x97, 0x08, 0xdc, 0x0a, 0xf4, 0xfb, 0x13, 0xfe, 0x17, 0xcf, 0x03, 0xce, 0x96, 0xff, 0x28, 0x64, 0xfc, 0x11, 0x74, 0x00, 0x64, 0x19, 0xff, 0xe9, 0x02, 0xff, 0x8d, 0x94, 0xff, 0x41, 0xaa, 0xfc, 0xec, 0x69, 0x03, 0x7d, 0xa8, 0x03, 0x6f, 0x85, 0x01, 0x04, 0xdc, 0x03, 0x05, 0x0f, 0x00, 0x2f, 0x22, 0xfb, 0xee, 0xb7, 0xfa, 0xf7, 0x6f, 0x46, 0x5d, 0x38, 0x20, 0x7b, 0x4b, 0xde, 0x12, 0xb9, 0x2e, 0xa6, 0x46, 0x24, 0xb2, 0xdb, 0xd5, 0xb9, 0xcd, 0xec, 0x1e, 0xc6, 0x06, 0x4b, 0x6a, 0xfc, 0x8b, 0x9c, 0xf0, 0xae, 0xd3, 0x05, 0x9c, 0x89, 0x06, 0x02, 0x7d, 0xef, 0x19, 0xc6, 0x06, 0xd3, 0xbb, 0x0a, 0x33, 0x58, 0xf6, 0x61, 0x7a, 0xfb, 0xde, 0x5c, 0x04, 0x6a, 0x1d, 0x01, 0x7e, 0x1a, 0xfb, 0xf0, 0x53, 0xff, 0xcf, 0x83, 0x00, 0xfa, 0x2a, 0xff, 0x9f, 0xcf, 0xfe, 0x60, 0xae, 0xfd, 0x75, 0xb0, 0x03, 0x9d, 0x8b, 0x03, 0x88, 0x56, 0x00, 0xf4, 0xa7, 0x02, 0x8b, 0x5b, 0x00, 0xbb, 0x4d, 0xfb, 0x84, 0x58, 0xfc, 0xbb, 0x53, 0x3e, 0xcf, 0x2e, 0x24, 0x4e, 0x13, 0xea, 0xf0, 0xe7, 0x20, 0xb8, 0x31, 0x18, 0x1c, 0x3f, 0xdf, 0x03, 0x89, 0xf3, 0x5c, 0x73, 0x01, 0x42, 0x7c, 0xfb, 0x2e, 0xac, 0xfd, 0x8f, 0x62, 0x01, 0x26, 0x21, 0xfc, 0xf5, 0xc3, 0xfb, 0x4f, 0xdd, 0x08, 0xad, 0x32, 0x02, 0xb3, 0x41, 0xf9, 0x9e, 0x18, 0xfd, 0x2a, 0xac, 0x00, 0xda, 0xd9, 0x00, 0x77, 0x0b, 0xfb, 0xda, 0x88, 0xfc, 0x83, 0xfe, 0x00, 0xdd, 0xba, 0x00, 0xb0, 0x80, 0x00, 0x66, 0x37, 0x00, 0xea, 0xa2, 0x00, 0xd7, 0x2c, 0x00, 0x28, 0xe1, 0x01, 0x18, 0x61, 0x02, 0x43, 0xc8, 0xff, 0x27, 0xb3, 0xff, 0x71, 0xd8, 0xff, 0x79, 0xbc, 0x34, 0xe5, 0x87, 0x20, 0x4a, 0x83, 0xf1, 0xbe, 0x31, 0x20, 0xf9, 0xbd, 0x15, 0x42, 0x9a, 0xe3, 0x5e, 0xea, 0xf5, 0xc4, 0x54, 0x00, 0x6d, 0x1d, 0xfb, 0xe1, 0xd8, 0xfe, 0xd3, 0x8b, 0x01, 0xc1, 0x2b, 0xfc, 0x2d, 0x14, 0xfc, 0x0c, 0xc7, 0x08, 0x10, 0xc4, 0x02, 0x60, 0x7a, 0xf9, 0x9c, 0x0d, 0xfd, 0x29, 0x3f, 0x00, 0x33, 0x82, 0x00, 0xdb, 0xd4, 0xfb, 0xf8, 0x13, 0xfd, 0xf3, 0xd0, 0x00, 0xfb, 0x09, 0x00, 0xc9, 0x4f, 0x00, 0x4d, 0x9a, 0x00, 0xcb, 0xc5, 0x00, 0x2b, 0xc6, 0x00, 0x74, 0x19, 0x02, 0xa7, 0xef, 0x01, 0x6f, 0x8b, 0xff, 0xa4, 0xc4, 0xff, 0xbd, 0x58, 0x00, 0xfa, 0xeb, 0x2b, 0x47, 0xb2, 0x1d, 0x9c, 0x20, 0xf9, 0xe4, 0x40, 0x1d, 0xbd, 0x59, 0x12, 0xd2, 0x8a, 0xea, 0x1c, 0xbf, 0xf7, 0x78, 0x5b, 0xfd, 0x59, 0x59, 0xfb, 0x8b, 0xd2, 0x00, 0xc9, 0xaa, 0x01, 0xbf, 0x8c, 0xfb, 0x47, 0xea, 0xfc, 0x1a, 0x73, 0x08, 0x7e, 0xae, 0x02, 0xbc, 0x91, 0xfa, 0x2d, 0xef, 0xfc, 0x3b, 0x04, 0x00, 0x98, 0x87, 0x00, 0x46, 0x15, 0xfc, 0xc8, 0x82, 0xfd, 0x3c, 0xd3, 0x00, 0x6c, 0xd3, 0xff, 0x6f, 0x03, 0x00, 0x29, 0x9c, 0x00, 0x02, 0x14, 0x01, 0x6b, 0x66, 0x01, 0xa3, 0xfa, 0x01, 0x8c, 0xe8, 0x00, 0x7b, 0xb0, 0xff, 0x5d, 0x4f, 0x00, 0x22, 0x08, 0x00, 0x79, 0xe1, 0x24, 0xaf, 0x27, 0x1c, 0xe5, 0xcc, 0xfd, 0xf8, 0xa3, 0x18, 0xd6, 0x12, 0x11, 0xaa, 0x7e, 0xf0, 0x6c, 0x51, 0xf8, 0x62, 0x3f, 0xfc, 0x84, 0x06, 0xfc, 0xb3, 0xc1, 0x01, 0xc5, 0x97, 0x01, 0x1a, 0x11, 0xfc, 0x6d, 0xa2, 0xfd, 0x13, 0xd1, 0x06, 0x86, 0xce, 0x02, 0x46, 0xfe, 0xfb, 0xc7, 0xbb, 0xfc, 0x32, 0x8a, 0xff, 0x5f, 0x8a, 0x00, 0xc5, 0xbe, 0xfc, 0x94, 0xca, 0xfd, 0xb3, 0xb6, 0x00, 0xa9, 0xf0, 0xff, 0xf5, 0xfb, 0xff, 0x72, 0x40, 0x00, 0xbc, 0x7b, 0x01, 0x13, 0x27, 0x02, 0x63, 0xbd, 0x00, 0xa1, 0x11, 0x00, 0x06, 0x01, 0x01, 0x7b, 0xd5, 0x00, 0x84, 0x49, 0xff, 0x1a, 0x61, 0x20, 0xe2, 0x33, 0x1b, 0x3b, 0x26, 0xff, 0x1b, 0x80, 0x14, 0x7f, 0x39, 0x11, 0x63, 0xdc, 0xf3, 0x59, 0x47, 0xf8, 0x4f, 0x89, 0xfd, 0xb9, 0x68, 0xfd, 0x36, 0xf3, 0x00, 0x21, 0x46, 0x01, 0xc7, 0x1a, 0xfe, 0x74, 0x1f, 0xfe, 0x35, 0x66, 0x04, 0x43, 0x21, 0x03, 0xbc, 0xa6, 0xfd, 0xb5, 0x47, 0xfc, 0x63, 0xf4, 0xfe, 0xf8, 0xfd, 0x00, 0xa7, 0xb7, 0xfd, 0xcb, 0xef, 0xfd, 0xd7, 0x71, 0x00, 0xad, 0x6c, 0x00, 0x43, 0xed, 0xff, 0xde, 0x29, 0x00, 0x4c, 0x3b, 0x02, 0x1a, 0xad, 0x01, 0xa0, 0x08, 0x00, 0x0b, 0xf5, 0x00, 0x02, 0x9d, 0x01, 0x1c, 0x9c, 0x00, 0x6f, 0xb6, 0xff, 0x70, 0xcf, 0x1d, 0xc3, 0x1d, 0x1a, 0x78, 0x04, 0xff, 0x9b, 0x52, 0x11, 0x38, 0x6c, 0x10, 0x4f, 0xe9, 0xf5, 0xbb, 0xbf, 0xf9, 0xc9, 0x16, 0xff, 0x4f, 0xd5, 0xfd, 0xff, 0x2d, 0x00, 0x5f, 0xa7, 0x01, 0x58, 0xdc, 0xff, 0xb0, 0xeb, 0xfd, 0xb3, 0xeb, 0x02, 0x67, 0x7b, 0x03, 0x22, 0xf2, 0xfd, 0x40, 0x57, 0xfc, 0x9d, 0x6b, 0xff, 0xb2, 0x2d, 0x01, 0x33, 0x19, 0xfe, 0xda, 0x1b, 0xfe, 0x99, 0xe9, 0x00, 0x8f, 0x70, 0x00, 0x30, 0x82, 0xff, 0xf9, 0x57, 0x01, 0x58, 0x90, 0x02, 0x65, 0xc8, 0x00, 0xe4, 0x6d, 0x00, 0x62, 0xb2, 0x01, 0xd6, 0x0e, 0x02, 0x5e, 0x03, 0x01, 0xa3, 0x7a, 0x00, 0x0d, 0x17, 0x1b, 0x33, 0x51, 0x18, 0x59, 0x33, 0xff, 0x3e, 0x5f, 0x0f, 0x1b, 0x65, 0x0f, 0x1c, 0xb5, 0xf7, 0x79, 0x49, 0xfb, 0xa6, 0xef, 0xff, 0x55, 0xf9, 0xfd, 0x89, 0xf8, 0xff, 0xfd, 0x48, 0x02, 0x8b, 0x97, 0x00, 0xb5, 0x85, 0xfd, 0x25, 0x13, 0x02, 0x6c, 0x2f, 0x03, 0xb4, 0x75, 0xfe, 0x29, 0x1b, 0xfd, 0x90, 0x68, 0xff, 0xbd, 0x0c, 0x01, 0x26, 0x68, 0xfe, 0xba, 0x9e, 0xfe, 0xed, 0x16, 0x01, 0x8b, 0x19, 0x00, 0x2c, 0xc3, 0x00, 0xc8, 0x64, 0x02, 0xfb, 0x2b, 0x01, 0x4d, 0xb9, 0x00, 0x33, 0xf8, 0x01, 0x0a, 0x7a, 0x02, 0xf0, 0x09, 0x02, 0x37, 0xa8, 0x00, 0x3d, 0x6c, 0x00, 0x38, 0x31, 0x18, 0x09, 0xcd, 0x15, 0xa6, 0xf4, 0xff, 0xdd, 0xc0, 0x0e, 0x0b, 0x5c, 0x0e, 0xc5, 0x4b, 0xf9, 0x69, 0x74, 0xfc, 0x87, 0x5f, 0x00, 0x21, 0xe8, 0xfe, 0x76, 0x63, 0x00, 0x6b, 0x0f, 0x02, 0x12, 0x50, 0x00, 0x4b, 0xb9, 0xfd, 0xe8, 0x49, 0x02, 0x1f, 0xe1, 0x02, 0x6e, 0x88, 0xfe, 0x03, 0xb8, 0xfd, 0xb0, 0xc4, 0xff, 0x70, 0xd9, 0x00, 0x15, 0xa0, 0xfe, 0x62, 0xa6, 0xff, 0x7e, 0x62, 0x01, 0xb6, 0xaf, 0x00, 0xd9, 0xfb, 0x01, 0x4c, 0xfc, 0x01, 0xe3, 0x3b, 0x01, 0x98, 0x17, 0x02, 0xf6, 0x59, 0x02, 0x46, 0x2c, 0x02, 0x5f, 0x30, 0x01, 0xea, 0xe0, 0xff, 0xc8, 0xf7, 0xff, 0x6a, 0xce, 0x15, 0x65, 0x75, 0x14, 0x9f, 0xb4, 0x00, 0xd0, 0x95, 0x0c, 0xe9, 0xfb, 0x0c, 0x29, 0x6e, 0xfb, 0x75, 0x08, 0xfe, 0x1d, 0x00, 0x01, 0x93, 0xcd, 0xfe, 0xea, 0x27, 0x00, 0x64, 0x5e, 0x02, 0xaf, 0xc6, 0x00, 0xc8, 0x1c, 0xfe, 0xce, 0xab, 0x01, 0x95, 0x6e, 0x02, 0x11, 0x20, 0xff, 0xda, 0x44, 0xfe, 0x09, 0xd1, 0xff, 0xf7, 0xf8, 0x00, 0xf7, 0xf7, 0xff, 0x6b, 0x8e, 0x00, 0x78, 0x5e, 0x01, 0x41, 0x1c, 0x02, 0xf8, 0xfe, 0x02, 0xd4, 0xb9, 0x01, 0x6d, 0xbe, 0x01, 0xce, 0xeb, 0x01, 0x07, 0x10, 0x01, 0x1a, 0x3e, 0x01, 0x8c, 0x9d, 0x00, 0x7f, 0x8c, 0xff, 0xfc, 0x97, 0xff, 0x71, 0xe7, 0x12, 0x76, 0x5c, 0x12, 0x02, 0x9d, 0x01, 0x3a, 0xe4, 0x0b, 0xbe, 0xa3, 0x0c, 0x5c, 0x19, 0xfd, 0xda, 0x8a, 0xfe, 0xd2, 0x02, 0x01, 0xc1, 0x76, 0xff, 0x4c, 0xca, 0x00, 0x71, 0x1e, 0x02, 0xe7, 0x6a, 0x00, 0x8b, 0x89, 0xfe, 0xe1, 0xa1, 0x01, 0x76, 0x19, 0x02, 0x08, 0x90, 0xff, 0x8b, 0x10, 0xff, 0x54, 0x49, 0x00, 0xf0, 0xaa, 0x01, 0xcf, 0x20, 0x01, 0x44, 0x67, 0x01, 0x87, 0x9d, 0x02, 0x52, 0x29, 0x03, 0xfa, 0x9c, 0x02, 0xe0, 0x01, 0x01, 0x5b, 0x89, 0x00, 0xc7, 0x8f, 0x00, 0xb5, 0x9c, 0x00, 0x70, 0xe5, 0x00, 0xae, 0x77, 0x00, 0xef, 0x85, 0xff, 0xf7, 0x06, 0xff, 0x00, 0x16, 0x10, 0xb5, 0x72, 0x10, 0x26, 0x00, 0x03, 0xd1, 0x65, 0x0b, 0x41, 0x60, 0x0b, 0xd8, 0x56, 0xfe, 0x33, 0x0b, 0x00, 0x67, 0x4c, 0x01, 0x5a, 0x48, 0xff, 0x05, 0x12, 0x01, 0xb0, 0x39, 0x02, 0xe9, 0x29, 0x00, 0xdd, 0xa2, 0xfe, 0xf0, 0xcd, 0x01, 0x35, 0x87, 0x02, 0xbb, 0x58, 0x00, 0x21, 0xa3, 0xff, 0x98, 0xff, 0x00, 0xbe, 0x49, 0x03, 0x87, 0xb0, 0x02, 0xa8, 0x10, 0x02, 0xdb, 0xf7, 0x02, 0xb3, 0x2d, 0x02, 0x43, 0x43, 0x00, 0xa2, 0xc3, 0xff, 0x2b, 0x5b, 0x00, 0x15, 0x29, 0x00, 0x67, 0x68, 0x00, 0xdc, 0xb3, 0x00, 0x03, 0xbd, 0xff, 0x3b, 0xe6, 0xfe, 0x29, 0xf8, 0xfe, 0x51, 0x93, 0x0e, 0xc3, 0xd0, 0x0f, 0x17, 0x54, 0x03, 0x41, 0x66, 0x09, 0x26, 0xa7, 0x0a, 0x2e, 0xb5, 0x00, 0xbb, 0xec, 0x00, 0x62, 0xc4, 0x00, 0xa9, 0x72, 0xff, 0x30, 0x31, 0x01, 0x29, 0x44, 0x02, 0xa2, 0x04, 0x01, 0x91, 0x95, 0xff, 0xe3, 0xe6, 0x01, 0x85, 0xb7, 0x02, 0x30, 0xa1, 0x01, 0x0a, 0xd5, 0x01, 0x84, 0xf2, 0x02, 0xca, 0xfe, 0x03, 0xd2, 0x6b, 0x02, 0x53, 0xfd, 0x00, 0xcd, 0x11, 0x01, 0xc8, 0x9f, 0x00, 0x3e, 0xff, 0xff, 0x39, 0xd0, 0xff, 0xbd, 0x08, 0x00, 0x31, 0xdb, 0xff, 0xb5, 0xf5, 0xff, 0xc6, 0x2a, 0x00, 0xd6, 0x68, 0xff, 0x0b, 0xc2, 0xfe, 0x37, 0xd0, 0xfe, 0xae, 0x50, 0x0b, 0x0e, 0x49, 0x0d, 0x0c, 0x68, 0x05, 0xc2, 0x7f, 0x0a, 0x40, 0xc5, 0x09, 0x4f, 0x4d, 0x01, 0xcf, 0xc1, 0x01, 0xec, 0xcd, 0x00, 0x67, 0xf8, 0xff, 0x20, 0x48, 0x02, 0xef, 0x67, 0x02, 0x94, 0xc4, 0x00, 0x5f, 0xa7, 0x00, 0x26, 0xe1, 0x03, 0xc0, 0x81, 0x04, 0x52, 0xb0, 0x02, 0x1e, 0x5a, 0x02, 0x70, 0xd8, 0x02, 0x64, 0x7b, 0x02, 0xb1, 0x74, 0x00, 0x7d, 0x28, 0x00, 0x41, 0xa6, 0x00, 0xe3, 0x45, 0x00, 0x92, 0x2a, 0x00, 0x30, 0x5e, 0xff, 0xdf, 0x1f, 0xff, 0xfc, 0x7b, 0xff, 0xd4, 0x8f, 0xff, 0x7b, 0xcb, 0xff, 0x1e, 0x5a, 0xff, 0x1d, 0x9d, 0xfe, 0xc8, 0x73, 0xfe, 0xcf, 0xc9, 0x0a, 0xac, 0x04, 0x0e, 0xce, 0xdc, 0x05, 0x8f, 0xb6, 0x07, 0x35, 0xc9, 0x08, 0x8f, 0x19, 0x03, 0xd5, 0x2f, 0x02, 0xe3, 0x07, 0x01, 0x30, 0x41, 0x00, 0x35, 0xe5, 0x02, 0xa4, 0x4e, 0x04, 0xa1, 0x10, 0x03, 0x51, 0xb5, 0x02, 0x96, 0x6d, 0x04, 0x4b, 0x4b, 0x04, 0x38, 0x4b, 0x02, 0xdc, 0x40, 0x00, 0x91, 0x04, 0x00, 0x8d, 0x51, 0x01, 0xc8, 0x29, 0x01, 0x86, 0x9f, 0x00, 0xcd, 0xea, 0xff, 0x43, 0x0f, 0xff, 0x8e, 0x11, 0xff, 0xdf, 0x0c, 0xff, 0xd8, 0x30, 0xff, 0xac, 0x3d, 0xff, 0x2b, 0x3f, 0xff, 0xef, 0x1f, 0xff, 0x88, 0x9d, 0xfe, 0x24, 0xca, 0xfe, 0x98, 0xa5, 0xfe, 0xee, 0xab, 0x08, 0x54, 0x29, 0x0c, 0xbc, 0x04, 0x07, 0x62, 0xcd, 0x08, 0xdd, 0x3b, 0x09, 0x3c, 0x8a, 0x03, 0x76, 0x3e, 0x02, 0x44, 0x6b, 0x02, 0x41, 0xf7, 0x02, 0x24, 0x64, 0x05, 0x3b, 0x93, 0x05, 0x28, 0xf3, 0x03, 0x14, 0xe9, 0x02, 0xae, 0x29, 0x02, 0x8e, 0x34, 0x01, 0x10, 0x33, 0x00, 0x18, 0x11, 0x00, 0xe8, 0x1d, 0x01, 0x5c, 0xa8, 0x01, 0x31, 0x79, 0x00, 0xbf, 0xf0, 0xfe, 0xfd, 0x33, 0xff, 0xb7, 0xb2, 0xff, 0x86, 0x98, 0xfe, 0xb0, 0x34, 0xfe, 0x11, 0xbc, 0xfe, 0x61, 0x08, 0xff, 0x87, 0x2b, 0xff, 0x80, 0xdd, 0xfe, 0x1e, 0xf7, 0xfe, 0xbe, 0x01, 0xff, 0x7a, 0x95, 0xfe, 0x10, 0x54, 0x09, 0xbd, 0x7b, 0x0e, 0xb6, 0x85, 0x08, 0xe3, 0xae, 0x06, 0x7f, 0xda, 0x06, 0x3d, 0x0d, 0x05, 0xc6, 0xde, 0x06, 0xc5, 0x16, 0x07, 0x60, 0xae, 0x04, 0x3c, 0xfe, 0x03, 0xcf, 0x41, 0x03, 0x5e, 0x09, 0x01, 0x81, 0xb8, 0xff, 0x4e, 0x35, 0x00, 0xf8, 0x00, 0x01, 0xea, 0x97, 0x01, 0x25, 0xd5, 0x00, 0xdd, 0x7c, 0xff, 0x6c, 0xfc, 0xff, 0x1f, 0x39, 0x00, 0xe7, 0x08, 0xff, 0x66, 0xb5, 0xfe, 0x8f, 0x77, 0xfe, 0x3e, 0xbc, 0xfd, 0xd3, 0x4c, 0xfe, 0xdb, 0x41, 0xff, 0x8d, 0x25, 0xff, 0x43, 0xd9, 0xfe, 0xd9, 0x17, 0xff, 0xcf, 0x68, 0xff, 0xfa, 0x05, 0xff, 0xc6, 0x4b, 0xfe, 0xab, 0xe5, 0x09, 0x47, 0x72, 0x0e, 0xdc, 0x77, 0x09, 0x70, 0x84, 0x0a, 0xf3, 0xb2, 0x0a, 0x4e, 0x69, 0x07, 0xa7, 0xe8, 0x07, 0x8e, 0xe5, 0x05, 0x5f, 0x56, 0x01, 0xe3, 0xf9, 0xff, 0x2a, 0x86, 0x00, 0x3d, 0x32, 0x00, 0xa3, 0x3d, 0x00, 0x46, 0x9b, 0x00, 0xaf, 0x72, 0x00, 0x7c, 0x03, 0x01, 0x5b, 0x24, 0x00, 0x2b, 0xee, 0xfe, 0xe4, 0xd7, 0xff, 0x6a, 0x7d, 0xff, 0xad, 0x38, 0xfe, 0xba, 0x45, 0xfe, 0xec, 0x03, 0xfe, 0x56, 0xaf, 0xfd, 0xc5, 0x98, 0xfe, 0xb1, 0x88, 0xff, 0xad, 0x6a, 0xff, 0xac, 0xf5, 0xfe, 0x34, 0xf6, 0xfe, 0xd8, 0x39, 0xff, 0x3c, 0xf5, 0xfe, 0xa9, 0x6b, 0xfe, 0x03, 0x81, 0x0b, 0x04, 0x2e, 0x12, 0x58, 0x1a, 0x0f, 0x1d, 0x8a, 0x0e, 0xc3, 0x1b, 0x0a, 0xf7, 0xa0, 0x04, 0x75, 0x5b, 0x03, 0xd6, 0x09, 0x01, 0x40, 0xc8, 0xff, 0x41, 0x21, 0x00, 0xb2, 0xcc, 0x00, 0xce, 0x40, 0x00, 0x15, 0x5d, 0xff, 0xc7, 0xb3, 0xff, 0x61, 0x05, 0x00, 0x42, 0xde, 0x00, 0x50, 0xe7, 0xff, 0xbd, 0x81, 0xfe, 0x37, 0x1b, 0xff, 0x70, 0x89, 0xfe, 0xb1, 0xcf, 0xfd, 0x3e, 0x0a, 0xfe, 0x89, 0x3b, 0xfe, 0x90, 0xa4, 0xfe, 0xc1, 0xdd, 0xfe, 0x6f, 0xf5, 0xfe, 0xbe, 0x05, 0xff, 0x82, 0x49, 0xff, 0x71, 0x68, 0xff, 0x21, 0xfa, 0xfe, 0xd7, 0x94, 0xfe, 0x0e, 0x49, 0xfe, 0x3e, 0xd2, 0x0d, 0xb5, 0xba, 0x18, 0xd9, 0x3d, 0x14, 0x1f, 0xc6, 0x0a, 0xea, 0x53, 0x02, 0x51, 0xb2, 0x00, 0xbd, 0x85, 0x03, 0xd0, 0xfe, 0x03, 0xbd, 0xa4, 0x01, 0xb0, 0x1f, 0xfe, 0x01, 0x7d, 0xfe, 0xed, 0x0f, 0x00, 0xf7, 0x3c, 0x00, 0xaa, 0x11, 0x00, 0xe3, 0x15, 0xff, 0xb3, 0xe2, 0xff, 0x7d, 0xff, 0xff, 0xd9, 0x8d, 0xfe, 0xef, 0x65, 0xfe, 0x85, 0x16, 0xfe, 0x09, 0x4a, 0xfe, 0x2b, 0xb8, 0xfe, 0x3b, 0x5a, 0xfe, 0xc2, 0x65, 0xfe, 0x7b, 0x89, 0xfe, 0x9b, 0x12, 0xff, 0x99, 0x44, 0xff, 0xb3, 0x14, 0xff, 0x90, 0x6a, 0xff, 0x53, 0xfd, 0xfe, 0x22, 0x82, 0xfe, 0xf1, 0x55, 0xfe, 0x3e, 0xd0, 0x0e, 0xde, 0x14, 0x19, 0x61, 0x3a, 0x0f, 0x84, 0xb3, 0x05, 0x06, 0x17, 0x03, 0xab, 0x43, 0x04, 0x08, 0x8c, 0x07, 0x46, 0x19, 0x05, 0x0f, 0xa6, 0xff, 0x75, 0x12, 0xfe, 0x67, 0x7a, 0x00, 0x7d, 0x11, 0x00, 0xc3, 0x6a, 0xfe, 0x9b, 0x15, 0x00, 0xdc, 0xb0, 0xff, 0x9c, 0x05, 0xff, 0x9e, 0x81, 0xff, 0xeb, 0x7c, 0xfe, 0x7c, 0x91, 0xfe, 0xb1, 0xf2, 0xfe, 0xdb, 0x63, 0xfe, 0x3e, 0x5a, 0xfe, 0xa9, 0xa7, 0xfe, 0xd2, 0x4d, 0xfe, 0xa0, 0x0e, 0xfe, 0xe8, 0xfb, 0xfe, 0x43, 0x51, 0xff, 0x6e, 0xef, 0xfe, 0x80, 0x1a, 0xff, 0x8a, 0xf5, 0xfe, 0x3d, 0xa8, 0xfe, 0x4b, 0xa5, 0xfe, 0x8c, 0xfd, 0x08, 0x82, 0xe0, 0x0d, 0x7d, 0x6c, 0x08, 0x22, 0x26, 0x07, 0x37, 0xfb, 0x08, 0x3a, 0xd4, 0x08, 0xd7, 0x0d, 0x09, 0xfa, 0x7c, 0x06, 0x43, 0xa8, 0x02, 0x91, 0x33, 0x02, 0x53, 0xba, 0x02, 0x51, 0x1e, 0x01, 0x1f, 0x51, 0xff, 0x49, 0xe4, 0xfe, 0x5d, 0x7f, 0xff, 0x0f, 0x0e, 0x00, 0x62, 0xf0, 0xfe, 0x12, 0x3d, 0xfe, 0x62, 0x05, 0xff, 0x28, 0x24, 0xff, 0x2b, 0x31, 0xff, 0xcb, 0x16, 0xff, 0x1a, 0x38, 0xfe, 0xcb, 0x56, 0xfe, 0x96, 0xd8, 0xfe, 0x31, 0x80, 0xfe, 0xac, 0x64, 0xfe, 0xed, 0xe9, 0xfe, 0xe2, 0xf7, 0xfe, 0xa7, 0x9c, 0xfe, 0x50, 0x0c, 0xff, 0xb3, 0x50, 0xff, 0xc7, 0x15, 0x07, 0x60, 0x1a, 0x0a, 0x8e, 0x1d, 0x05, 0x52, 0x69, 0x04, 0xe3, 0x48, 0x07, 0xaa, 0x3d, 0x08, 0xa1, 0x5d, 0x07, 0x49, 0x3f, 0x05, 0x63, 0x15, 0x05, 0x32, 0x48, 0x06, 0xc2, 0xbf, 0x05, 0x2b, 0x0b, 0x04, 0x32, 0x48, 0x02, 0xcd, 0x48, 0x01, 0x35, 0xf9, 0x00, 0x08, 0xd9, 0xff, 0x65, 0xae, 0xfe, 0x62, 0xf3, 0xfe, 0x2f, 0x08, 0xff, 0xd3, 0x44, 0xfe, 0x2b, 0xec, 0xfe, 0x13, 0x9a, 0xff, 0x22, 0xb0, 0xfe, 0xce, 0xe1, 0xfe, 0x6d, 0x4b, 0xff, 0x42, 0xa5, 0xfe, 0x8e, 0xa6, 0xfe, 0x62, 0xeb, 0xfe, 0xb8, 0xb6, 0xfe, 0xe7, 0x4a, 0xfe, 0x07, 0x78, 0xfe, 0xf1, 0xfa, 0xfe, 0x6b, 0xc5, 0x07, 0xfc, 0x03, 0x0b, 0x93, 0xad, 0x05, 0x95, 0xb5, 0x04, 0xc3, 0xa6, 0x06, 0x48, 0xd1, 0x05, 0xe1, 0xcf, 0x03, 0xa7, 0x2d, 0x02, 0x40, 0x01, 0x03, 0xb1, 0x84, 0x05, 0xf8, 0x3a, 0x06, 0x05, 0xd4, 0x04, 0x7f, 0xe3, 0x03, 0x84, 0xab, 0x03, 0x83, 0x2b, 0x03, 0xc0, 0xd0, 0x01, 0x93, 0xf7, 0xff, 0xd9, 0x32, 0xff, 0x61, 0x1d, 0xff, 0x2a, 0xf7, 0xfe, 0x31, 0xe5, 0xfe, 0x71, 0x9b, 0xfe, 0xcd, 0x79, 0xfe, 0x40, 0x03, 0xff, 0x99, 0x74, 0xff, 0xa0, 0x06, 0xff, 0xcf, 0xbf, 0xfe, 0x93, 0x11, 0xff, 0x61, 0xac, 0xfe, 0xf5, 0x4e, 0xfe, 0xe0, 0xc5, 0xfe, 0x20, 0xa5, 0xfe, 0xc7, 0xcc, 0x08, 0x29, 0x17, 0x0c, 0xa7, 0xd8, 0x04, 0xc0, 0xed, 0x03, 0x03, 0xfa, 0x06, 0x47, 0xdd, 0x05, 0xa2, 0xd6, 0x02, 0x44, 0x20, 0x00, 0x73, 0x5a, 0x01, 0x7b, 0x72, 0x04, 0xbe, 0x38, 0x04, 0x43, 0xbf, 0x02, 0xae, 0xf4, 0x03, 0x84, 0x4e, 0x05, 0x11, 0xcf, 0x04, 0x62, 0xcb, 0x03, 0x69, 0xea, 0x01, 0xba, 0xc2, 0x00, 0xd1, 0x6a, 0x00, 0x9b, 0x3f, 0xff, 0xe6, 0x0d, 0xff, 0xa8, 0x37, 0xff, 0x25, 0x46, 0xfe, 0xcc, 0x86, 0xfe, 0xb3, 0x64, 0xff, 0xc2, 0x02, 0xff, 0xf5, 0x3a, 0xff, 0x57, 0xc1, 0xff, 0x71, 0xf1, 0xfe, 0x8f, 0x75, 0xfe, 0x66, 0xde, 0xfe, 0x68, 0x92, 0xfe, 0x81, 0xb2, 0x09, 0x92, 0x06, 0x0e, 0x12, 0xd0, 0x05, 0x4f, 0xb6, 0x03, 0x27, 0xdb, 0x06, 0xbf, 0x03, 0x05, 0xeb, 0x66, 0x01, 0x24, 0x16, 0x00, 0xe2, 0x6f, 0x02, 0xa6, 0xf0, 0x03, 0xf6, 0xdb, 0x01, 0xb4, 0xd5, 0x00, 0x89, 0x2c, 0x02, 0xc9, 0xf6, 0x02, 0x2a, 0xb7, 0x03, 0x3d, 0x97, 0x04, 0x4f, 0x6a, 0x03, 0xb6, 0x2c, 0x02, 0xa8, 0xcb, 0x01, 0x88, 0xc7, 0x00, 0xa9, 0x63, 0x00, 0x83, 0xd2, 0xff, 0xe4, 0x97, 0xfe, 0x6d, 0xe1, 0xfe, 0x3c, 0x1c, 0xff, 0xb5, 0x79, 0xfe, 0xc8, 0x1e, 0xff, 0x38, 0xc3, 0xff, 0xa1, 0x2c, 0xff, 0xb5, 0xee, 0xfe, 0x8d, 0x0a, 0xff, 0x88, 0x9c, 0xfe, 0xc8, 0x57, 0x0a, 0x67, 0xf7, 0x0e, 0xd6, 0x74, 0x06, 0x89, 0x4f, 0x04, 0x69, 0xfd, 0x07, 0x1b, 0x72, 0x05, 0xa2, 0x86, 0xff, 0x5f, 0x83, 0xfe, 0xd8, 0x2c, 0x03, 0xf1, 0x65, 0x04, 0x27, 0x25, 0x01, 0xb1, 0x5c, 0x00, 0xab, 0x80, 0x01, 0x31, 0x6b, 0x01, 0xb0, 0xac, 0x01, 0x83, 0x4c, 0x02, 0x3c, 0xdc, 0x01, 0x32, 0x57, 0x02, 0xb7, 0x2f, 0x03, 0x0c, 0x56, 0x02, 0x0b, 0x4b, 0x01, 0xb8, 0xe9, 0x00, 0x94, 0x62, 0x00, 0x4a, 0xa3, 0xff, 0x28, 0x16, 0xff, 0xda, 0xf0, 0xfe, 0x13, 0x0d, 0xff, 0xc9, 0x20, 0xff, 0x51, 0x18, 0xff, 0xbe, 0x09, 0xff, 0x7f, 0x16, 0xff, 0x06, 0x06, 0xff, 0x23, 0x93, 0x0b, 0xf9, 0xac, 0x10, 0xe6, 0x47, 0x07, 0xd0, 0x3e, 0x04, 0x5c, 0xdf, 0x07, 0x23, 0x7f, 0x05, 0x1f, 0x85, 0xfe, 0x24, 0xe7, 0xfd, 0x55, 0x14, 0x04, 0xa8, 0xdd, 0x03, 0xbf, 0x9c, 0xff, 0x13, 0x2b, 0x00, 0x7c, 0xe3, 0x01, 0x60, 0x58, 0x01, 0x20, 0xae, 0x00, 0x46, 0x1c, 0x01, 0x2d, 0x9b, 0x00, 0x8e, 0xe2, 0xff, 0x32, 0x01, 0x01, 0xad, 0x43, 0x02, 0x1b, 0x65, 0x02, 0x99, 0xd8, 0x01, 0x2b, 0x38, 0x01, 0xcf, 0xd4, 0x00, 0xf1, 0x3c, 0x00, 0xa7, 0x84, 0xff, 0x9c, 0x45, 0xff, 0x5d, 0x66, 0xff, 0x1e, 0x27, 0xff, 0x87, 0xa2, 0xfe, 0xca, 0x9b, 0xfe, 0xf6, 0xea, 0xfe, 0xdd, 0xa8, 0x0c, 0xe8, 0x76, 0x12, 0x16, 0x3e, 0x08, 0xec, 0x1d, 0x04, 0x82, 0x0b, 0x08, 0xb0, 0xf0, 0x05, 0x89, 0x7d, 0xfd, 0xc2, 0x28, 0xfd, 0x84, 0xe6, 0x04, 0x6f, 0xb2, 0x03, 0xf9, 0x82, 0xfe, 0x56, 0xe5, 0xff, 0xba, 0x2b, 0x02, 0xf6, 0x41, 0x01, 0xfb, 0x51, 0x00, 0x07, 0xec, 0x00, 0xfe, 0x30, 0x00, 0xd2, 0x3e, 0xff, 0x13, 0xdb, 0xff, 0x3c, 0x1e, 0x00, 0x35, 0x91, 0x00, 0x0c, 0x4e, 0x01, 0x27, 0xd4, 0x01, 0x00, 0x29, 0x02, 0xbb, 0x35, 0x01, 0x2c, 0x61, 0x00, 0x65, 0x79, 0x00, 0x67, 0x17, 0x00, 0xd4, 0x75, 0xff, 0xc0, 0x16, 0xff, 0x98, 0xd7, 0xfe, 0x6a, 0x84, 0xfe, 0x04, 0x91, 0x0e, 0xf1, 0xf3, 0x14, 0x03, 0x86, 0x08, 0xc1, 0x5e, 0x03, 0x56, 0xef, 0x07, 0x44, 0xee, 0x05, 0x65, 0xd8, 0xfc, 0xa3, 0x26, 0xfd, 0x7e, 0x8e, 0x05, 0xee, 0xad, 0x02, 0x26, 0x1c, 0xfd, 0x92, 0xfb, 0xff, 0xb3, 0x99, 0x02, 0x02, 0x4e, 0x01, 0x41, 0xd4, 0xff, 0xbe, 0x60, 0x00, 0x03, 0x10, 0x00, 0xfe, 0x08, 0xff, 0x26, 0x6f, 0xff, 0xd6, 0x95, 0xff, 0xd4, 0xb3, 0xff, 0x04, 0x86, 0xff, 0x47, 0xaf, 0xff, 0xbb, 0x54, 0x01, 0x0d, 0xdd, 0x01, 0x99, 0x77, 0x01, 0x80, 0x26, 0x01, 0xa0, 0xa7, 0x00, 0x4c, 0x70, 0x00, 0xfc, 0xda, 0xff, 0xd0, 0x1b, 0xff, 0x13, 0xa5, 0xfe, 0x85, 0x1a, 0x10, 0x37, 0xf1, 0x16, 0x7f, 0x18, 0x09, 0xf8, 0x52, 0x03, 0x37, 0x34, 0x08, 0x2d, 0xac, 0x05, 0xe7, 0xa9, 0xfb, 0x5f, 0x5b, 0xfd, 0xd1, 0xd7, 0x06, 0xa9, 0xf1, 0x01, 0x19, 0x7b, 0xfb, 0xec, 0xab, 0xff, 0x68, 0xe1, 0x02, 0xf0, 0x5c, 0x01, 0xdd, 0xe5, 0xff, 0x88, 0x2a, 0x00, 0xbc, 0x8e, 0xff, 0x82, 0xcf, 0xfe, 0x9c, 0x48, 0xff, 0xbe, 0x79, 0xff, 0xf6, 0x7f, 0xff, 0xdf, 0x03, 0xff, 0x9f, 0xc0, 0xfe, 0xbd, 0xad, 0xff, 0x7f, 0x2f, 0x00, 0x75, 0xab, 0x00, 0xaa, 0x84, 0x01, 0x83, 0x77, 0x01, 0xc6, 0x05, 0x01, 0x8f, 0xa0, 0x00, 0xfc, 0x0b, 0x00, 0x7e, 0x42, 0xff, 0x33, 0x12, 0x12, 0xad, 0x12, 0x19, 0xeb, 0x25, 0x09, 0xd5, 0x78, 0x03, 0xe2, 0xed, 0x08, 0xfe, 0xea, 0x04, 0xce, 0x5d, 0xfa, 0xd6, 0x45, 0xfe, 0x91, 0x45, 0x08, 0xb4, 0xe9, 0x00, 0x5f, 0x03, 0xfa, 0x11, 0xaa, 0xff, 0x2b, 0x3f, 0x03, 0xf6, 0x5a, 0x01, 0x96, 0xbb, 0xff, 0x81, 0x04, 0x00, 0x27, 0x87, 0xff, 0x5f, 0xcd, 0xfe, 0x34, 0xfd, 0xfe, 0xb9, 0x6a, 0xff, 0xd5, 0x9a, 0xff, 0x41, 0xd3, 0xfe, 0x25, 0x91, 0xfe, 0x81, 0x37, 0xff, 0xd7, 0x70, 0xff, 0x1a, 0x9b, 0xff, 0x2f, 0x07, 0x00, 0x1e, 0xa1, 0x00, 0x7f, 0x44, 0x01, 0x2d, 0x40, 0x01, 0x64, 0x9b, 0x00, 0x2b, 0xec, 0xff, 0xbd, 0x48, 0x14, 0x0b, 0x10, 0x1b, 0x41, 0xbd, 0x08, 0xe2, 0xfe, 0x03, 0xb4, 0xee, 0x09, 0x8f, 0x72, 0x03, 0xe2, 0xb9, 0xf8, 0xd5, 0x85, 0xff, 0x9f, 0xad, 0x09, 0x7c, 0xbb, 0xff, 0x1b, 0xb4, 0xf8, 0x9d, 0x59, 0xff, 0x06, 0x4b, 0x03, 0xfe, 0x8a, 0x01, 0xe4, 0x89, 0xff, 0x45, 0xca, 0xff, 0x7a, 0x4c, 0xff, 0x5d, 0x84, 0xfe, 0x0f, 0x9d, 0xfe, 0x2f, 0x5f, 0xff, 0xc1, 0xe6, 0xff, 0xe1, 0x78, 0xfe, 0x54, 0x79, 0xfe, 0xd2, 0x09, 0xff, 0xc0, 0x8b, 0xfe, 0xbb, 0x88, 0xff, 0xea, 0xed, 0xff, 0xcb, 0x59, 0xff, 0xf5, 0x97, 0xff, 0xac, 0x2f, 0x00, 0x62, 0x9c, 0x00, 0x24, 0x90, 0x00, 0x8a, 0xc6, 0x16, 0x20, 0x39, 0x1d, 0x98, 0x24, 0x08, 0xcf, 0x50, 0x04, 0x5a, 0xda, 0x0a, 0x4d, 0x0e, 0x02, 0xf2, 0x51, 0xf7, 0x07, 0xbd, 0x00, 0x7d, 0xb1, 0x0a, 0xed, 0x8b, 0xfe, 0x26, 0xeb, 0xf7, 0xba, 0x32, 0xff, 0xfa, 0xfb, 0x02, 0xf8, 0x79, 0x01, 0x53, 0x51, 0xff, 0x5a, 0x0b, 0x00, 0xc0, 0x66, 0xff, 0x65, 0xb0, 0xfd, 0x4a, 0x20, 0xfe, 0x7b, 0x55, 0xff, 0xd4, 0x0d, 0x00, 0xc4, 0x91, 0xfe, 0x54, 0x47, 0xfe, 0xfc, 0xd5, 0xfe, 0x1e, 0x2b, 0xfe, 0x15, 0x61, 0xff, 0xd6, 0xe9, 0xff, 0x2a, 0x0b, 0xff, 0x1a, 0x09, 0xff, 0xe7, 0xf3, 0xfe, 0x08, 0x40, 0xff, 0xe6, 0xbf, 0xff, 0x30, 0xc1, 0x18, 0x90, 0x56, 0x1f, 0xa1, 0x79, 0x08, 0xc9, 0x83, 0x04, 0xb9, 0x68, 0x0b, 0xbf, 0x7c, 0x01, 0x03, 0xde, 0xf5, 0xc8, 0x5d, 0x01, 0x48, 0x69, 0x0c, 0x48, 0xbc, 0xfd, 0x46, 0xb6, 0xf6, 0x4a, 0x71, 0xff, 0xa5, 0xd8, 0x02, 0x74, 0x3f, 0x01, 0x11, 0x65, 0xff, 0x6c, 0xe7, 0xff, 0x3b, 0xb4, 0xff, 0xbe, 0xc6, 0xfd, 0x61, 0x61, 0xfd, 0x46, 0x2f, 0xff, 0x01, 0x5c, 0x00, 0x80, 0x27, 0xfe, 0x65, 0x29, 0xfe, 0x3f, 0x85, 0xff, 0xb0, 0x17, 0xfe, 0x93, 0xd5, 0xfe, 0xcb, 0xfe, 0xff, 0xaa, 0x03, 0xff, 0x78, 0xe2, 0xfe, 0x4d, 0xec, 0xfe, 0x94, 0x81, 0xfe, 0x47, 0x6f, 0xfe, 0x1f, 0x72, 0x1a, 0x69, 0x36, 0x21, 0x61, 0xc0, 0x08, 0x35, 0x42, 0x05, 0xf6, 0x72, 0x0c, 0xc8, 0xfc, 0xff, 0x11, 0xff, 0xf3, 0x90, 0x81, 0x02, 0x3a, 0xc2, 0x0d, 0xe0, 0xe3, 0xfc, 0x34, 0xc0, 0xf5, 0xd0, 0x46, 0xff, 0x43, 0xbc, 0x02, 0x52, 0x06, 0x01, 0x79, 0x1a, 0xff, 0x57, 0xb6, 0xff, 0xe8, 0xea, 0xff, 0xde, 0xda, 0xfd, 0x0b, 0xd3, 0xfc, 0x7b, 0xe4, 0xfe, 0xaa, 0x70, 0x00, 0xed, 0xd1, 0xfd, 0xfb, 0xbd, 0xfd, 0x73, 0x8c, 0xff, 0xbf, 0x5e, 0xfe, 0x06, 0xab, 0xfe, 0x54, 0x94, 0xff, 0x75, 0x38, 0xff, 0x9f, 0xfa, 0xfe, 0x9e, 0x5f, 0xfe, 0x97, 0x05, 0xfe, 0x56, 0x0a, 0xfe, 0x0e, 0xf8, 0x1b, 0x6b, 0x5c, 0x23, 0x37, 0x89, 0x09, 0x41, 0x22, 0x05, 0x9d, 0x10, 0x0d, 0x7a, 0xec, 0xff, 0xb8, 0x95, 0xf2, 0x72, 0x9c, 0x02, 0xae, 0xae, 0x0e, 0xb8, 0xc6, 0xfc, 0x11, 0x43, 0xf5, 0x8d, 0xfe, 0xfe, 0x82, 0xb4, 0x02, 0x67, 0x9e, 0x00, 0x6e, 0xeb, 0xfe, 0xe0, 0xcd, 0xff, 0x93, 0xdb, 0xff, 0x14, 0x42, 0xfe, 0x91, 0x79, 0xfc, 0xd3, 0x11, 0xfe, 0x0b, 0xf3, 0x00, 0x15, 0x31, 0xfe, 0xb5, 0x04, 0xfd, 0xe5, 0x27, 0xff, 0xbb, 0x77, 0xfe, 0xb8, 0xd5, 0xfe, 0x29, 0x9d, 0xff, 0xd3, 0x20, 0xff, 0x5e, 0x10, 0xff, 0x90, 0x23, 0xfe, 0x7c, 0xaa, 0xfd, 0x96, 0xf6, 0xfd, 0x93, 0xfb, 0x1c, 0x27, 0x17, 0x26, 0xef, 0x1b, 0x0b, 0x35, 0xa1, 0x03, 0xd1, 0xe8, 0x0c, 0x11, 0xa8, 0x01, 0xc8, 0xd4, 0xf1, 0x69, 0x1e, 0x01, 0xda, 0xba, 0x0e, 0x66, 0x71, 0xfd, 0xdd, 0x9e, 0xf5, 0x5e, 0x1f, 0xfe, 0x33, 0x3d, 0x02, 0x36, 0xbb, 0x00, 0xa8, 0x78, 0xfe, 0x16, 0xd7, 0xff, 0x59, 0x05, 0x00, 0x00, 0x45, 0xfe, 0x52, 0x66, 0xfc, 0x69, 0x7b, 0xfd, 0x7c, 0xc5, 0x00, 0xb4, 0xb5, 0xfe, 0x62, 0x0b, 0xfd, 0x2c, 0x50, 0xfe, 0x91, 0x25, 0xfe, 0xd2, 0x57, 0xff, 0x02, 0x9a, 0xff, 0x25, 0x92, 0xfe, 0x5a, 0xfd, 0xfe, 0xdc, 0x5e, 0xfe, 0x74, 0x99, 0xfd, 0x0c, 0xd4, 0xfd, 0x3f, 0xbd, 0x1d, 0x8c, 0xb3, 0x27, 0x5a, 0x29, 0x0d, 0x36, 0x78, 0x03, 0x89, 0x17, 0x0c, 0xc1, 0x73, 0x03, 0x02, 0xc1, 0xf1, 0xea, 0xe0, 0xfe, 0x41, 0xa0, 0x0e, 0x1a, 0x55, 0xfe, 0xa1, 0x0c, 0xf6, 0xb5, 0x95, 0xfd, 0xa1, 0x63, 0x01, 0xcd, 0xd1, 0x00, 0xd1, 0x5d, 0xfe, 0xad, 0x72, 0xff, 0x57, 0x1d, 0x00, 0x82, 0x90, 0xfe, 0xdb, 0x5b, 0xfc, 0xbc, 0xe8, 0xfc, 0x10, 0xa0, 0x00, 0xd3, 0xd3, 0xfe, 0x9d, 0xdb, 0xfc, 0xbc, 0x64, 0xfe, 0xdd, 0xed, 0xfd, 0xb8, 0xdf, 0xfe, 0xe2, 0xaf, 0xff, 0xaa, 0x77, 0xfe, 0xe7, 0x73, 0xfe, 0x81, 0x9a, 0xfe, 0xed, 0xcb, 0xfd, 0x0e, 0x01, 0xfd, 0xd5, 0xab, 0x1f, 0x35, 0xe9, 0x27, 0x01, 0x9e, 0x0d, 0xc3, 0xa7, 0x05, 0x67, 0x37, 0x0c, 0xe9, 0x76, 0x03, 0x7f, 0x88, 0xf1, 0x73, 0x2a, 0xfe, 0xaa, 0x43, 0x0e, 0x09, 0x12, 0xfe, 0x28, 0x2a, 0xf7, 0x95, 0x88, 0xfd, 0x63, 0x4d, 0x00, 0x77, 0x12, 0x01, 0xea, 0x59, 0xfe, 0xf3, 0xc6, 0xfe, 0x74, 0x38, 0x00, 0x99, 0x77, 0xff, 0x55, 0x75, 0xfc, 0xca, 0x17, 0xfc, 0x75, 0x67, 0x00, 0xc5, 0x43, 0xff, 0x3d, 0xd7, 0xfc, 0x62, 0x35, 0xfe, 0x62, 0xee, 0xfd, 0xa2, 0x94, 0xfe, 0xe1, 0x80, 0xff, 0x08, 0x98, 0xfe, 0x21, 0x7c, 0xfe, 0x48, 0x2d, 0xfe, 0xdc, 0x79, 0xfd, 0x86, 0xcb, 0xfc, 0xdc, 0xcf, 0x22, 0x9c, 0x0b, 0x27, 0x22, 0xc1, 0x0b, 0x3f, 0x7d, 0x09, 0x0c, 0x0b, 0x0e, 0xa9, 0xad, 0x01, 0xb9, 0xa6, 0xf0, 0xbe, 0x17, 0xff, 0x54, 0x53, 0x0d, 0xb9, 0x3d, 0xfc, 0xf1, 0x09, 0xf9, 0x7e, 0x29, 0xfe, 0x9d, 0xe4, 0xfe, 0x37, 0xce, 0x00, 0xe8, 0x49, 0xfe, 0x6a, 0x62, 0xfe, 0x14, 0xd6, 0xff, 0xad, 0x67, 0x00, 0xe0, 0xcc, 0xfc, 0x98, 0x09, 0xfb, 0x63, 0xf8, 0xff, 0x8c, 0xd7, 0xff, 0x56, 0x30, 0xfd, 0xdc, 0x4f, 0xfd, 0xa9, 0xc6, 0xfd, 0xd7, 0xd4, 0xfe, 0xc1, 0x08, 0xff, 0x5e, 0x9e, 0xfe, 0x99, 0x8f, 0xfe, 0x35, 0x9b, 0xfd, 0x98, 0xab, 0xfc, 0x93, 0x16, 0xfd, 0x84, 0xd5, 0x24, 0x1b, 0xdd, 0x25, 0xff, 0x67, 0x0a, 0x8e, 0xe3, 0x0c, 0x24, 0x8c, 0x11, 0x5e, 0x81, 0x01, 0x25, 0xa3, 0xed, 0xee, 0x3c, 0x00, 0xef, 0x3b, 0x0e, 0x98, 0x91, 0xf8, 0x8d, 0x4e, 0xfa, 0xb7, 0x0e, 0x01, 0x18, 0xa6, 0xfd, 0xa4, 0xed, 0xfe, 0x31, 0xba, 0xfe, 0xab, 0x01, 0xff, 0xc9, 0x4d, 0xfe, 0xfe, 0xa6, 0x01, 0x4a, 0x12, 0xfe, 0xa6, 0x4d, 0xf9, 0x8d, 0xea, 0xff, 0x80, 0x7a, 0x00, 0xe0, 0x69, 0xfd, 0xcd, 0xf2, 0xfc, 0xf1, 0x48, 0xfd, 0x81, 0x2a, 0xff, 0xad, 0xdd, 0xfe, 0x88, 0x73, 0xfe, 0xff, 0x58, 0xfe, 0xed, 0x65, 0xfd, 0xee, 0xc4, 0xfc, 0x2a, 0xeb, 0xfc, 0x0a, 0x86, 0x27, 0x9d, 0xfd, 0x23, 0x1b, 0x23, 0x06, 0xd2, 0xc4, 0x12, 0x91, 0x9a, 0x17, 0xb7, 0x6b, 0xfd, 0xf8, 0xed, 0xea, 0x55, 0x13, 0x05, 0x1c, 0x14, 0x0e, 0x9d, 0x45, 0xf2, 0x9a, 0xb8, 0xfb, 0xb1, 0x31, 0x05, 0x24, 0x05, 0xfd, 0xb8, 0x39, 0xfd, 0xbb, 0xc9, 0xfd, 0x80, 0xcb, 0xff, 0x2e, 0x9b, 0xfd, 0xb3, 0x6d, 0x01, 0x9d, 0x1e, 0x00, 0x8a, 0x88, 0xf8, 0xa2, 0xb1, 0xfe, 0xd5, 0x06, 0x01, 0xee, 0xe5, 0xfd, 0x50, 0xe7, 0xfc, 0x7d, 0x24, 0xfd, 0x90, 0x2a, 0xff, 0x58, 0x59, 0xfe, 0x7a, 0x4d, 0xfe, 0xab, 0x10, 0xfe, 0x49, 0xb7, 0xfd, 0x7a, 0x6f, 0xfd, 0x18, 0x81, 0xfb, 0xaf, 0xd6, 0x2a, 0xb9, 0x9a, 0x24, 0x50, 0xa1, 0x00, 0x84, 0x68, 0x14, 0x82, 0xd2, 0x1d, 0xb7, 0xec, 0xfb, 0x5a, 0x06, 0xe9, 0x29, 0x0d, 0x09, 0xfa, 0xc3, 0x0d, 0x20, 0xce, 0xeb, 0x04, 0x2b, 0xfc, 0x64, 0x06, 0x0a, 0x98, 0xf7, 0xfc, 0x3d, 0x53, 0xfb, 0x82, 0xaa, 0xfc, 0x30, 0xca, 0x00, 0xe6, 0x7d, 0xfd, 0xb4, 0xbc, 0xff, 0xf5, 0x0c, 0x02, 0x77, 0x3f, 0xf9, 0x75, 0xc1, 0xfc, 0x7c, 0x54, 0x01, 0x68, 0xbb, 0xfe, 0xe6, 0xd2, 0xfc, 0x35, 0x0f, 0xfd, 0x8d, 0x55, 0xff, 0xca, 0x32, 0xfe, 0x14, 0xb5, 0xfd, 0x20, 0xf0, 0xfd, 0xa8, 0xaf, 0xfd, 0xb5, 0x8a, 0xfd, 0xba, 0x9c, 0xfb, 0x2c, 0x81, 0x2f, 0xb6, 0xc3, 0x26, 0x80, 0x6c, 0xfa, 0xf9, 0xa7, 0x11, 0xf2, 0x7f, 0x23, 0x91, 0xc8, 0xfd, 0xf4, 0x36, 0xe7, 0xa1, 0x8f, 0x0b, 0x5b, 0x75, 0x0d, 0xb8, 0x66, 0xe6, 0x3c, 0xb2, 0xfb, 0x90, 0x24, 0x0e, 0x6b, 0xeb, 0xfd, 0x6a, 0x45, 0xf9, 0x07, 0x6f, 0xfb, 0xd1, 0xc7, 0x01, 0xd7, 0x17, 0xfe, 0x15, 0x72, 0xfd, 0xdc, 0x4e, 0x02, 0x1e, 0x96, 0xfb, 0xc3, 0x25, 0xfb, 0x7a, 0x72, 0x00, 0x74, 0x2a, 0x00, 0x26, 0x98, 0xfc, 0x5b, 0x18, 0xfd, 0x82, 0x19, 0x00, 0x5b, 0x9a, 0xfd, 0xee, 0x3b, 0xfd, 0xb8, 0x20, 0xfe, 0x47, 0xa8, 0xfc, 0x44, 0x5f, 0xfd, 0x45, 0xce, 0xfc, 0x39, 0x8e, 0x34, 0xc8, 0x5f, 0x29, 0xaa, 0x24, 0xf4, 0xfb, 0x06, 0x0e, 0x54, 0x85, 0x27, 0xbe, 0x28, 0x00, 0x81, 0x61, 0xe7, 0xff, 0x76, 0x0d, 0x98, 0x9f, 0x0c, 0xc7, 0x19, 0xe2, 0x8e, 0x1e, 0xfa, 0xf1, 0x1a, 0x11, 0x58, 0x4d, 0x00, 0xa6, 0x87, 0xf7, 0xd4, 0x9c, 0xf9, 0x7c, 0x9f, 0x02, 0xfa, 0xea, 0xfe, 0x84, 0xd1, 0xfb, 0x52, 0x14, 0x01, 0xb0, 0xb5, 0xfd, 0x30, 0x47, 0xfb, 0xcb, 0x76, 0xfe, 0x99, 0x10, 0x01, 0x17, 0x37, 0xfd, 0x54, 0x19, 0xfd, 0xca, 0x02, 0x01, 0xf5, 0x29, 0xfd, 0xde, 0xa6, 0xfc, 0xb5, 0xd2, 0xfd, 0x98, 0x01, 0xfc, 0x45, 0x1c, 0xfd, 0x9a, 0xb4, 0xfc, 0xe9, 0xdd, 0x38, 0x7a, 0x85, 0x2c, 0x4e, 0x44, 0xf0, 0xe4, 0x05, 0x08, 0xe1, 0xdf, 0x28, 0x4c, 0x4c, 0x05, 0xf4, 0xfe, 0xe7, 0x65, 0xb7, 0x0e, 0xac, 0xd7, 0x0c, 0xaa, 0x1d, 0xde, 0x5c, 0xf8, 0xf7, 0x2d, 0x9b, 0x12, 0x63, 0x7c, 0x03, 0x4c, 0x02, 0xf7, 0x55, 0x1e, 0xf7, 0x27, 0x2e, 0x03, 0x7a, 0xeb, 0xff, 0x5f, 0x11, 0xfb, 0x00, 0x03, 0xff, 0x0b, 0xa8, 0xfe, 0xeb, 0x21, 0xfd, 0xf8, 0x6e, 0xfc, 0xaa, 0xe5, 0x00, 0xce, 0xc1, 0xfe, 0xc8, 0x12, 0xfd, 0x8c, 0xde, 0x01, 0x25, 0x39, 0xfd, 0xb8, 0xb3, 0xfb, 0x31, 0x8c, 0xfd, 0xe1, 0x93, 0xfb, 0x38, 0x56, 0xfc, 0xe6, 0x24, 0xfc, 0xc4, 0x9b, 0x3c, 0xb2, 0x23, 0x30, 0x05, 0x01, 0xee, 0x28, 0x68, 0x01, 0xaa, 0xa4, 0x27, 0x6c, 0x8d, 0x0a, 0xf2, 0xcc, 0xe9, 0x46, 0x26, 0x10, 0x4c, 0x60, 0x0d, 0x7c, 0x73, 0xda, 0x3e, 0xc5, 0xf5, 0xec, 0xd3, 0x12, 0x05, 0x65, 0x06, 0xa3, 0xae, 0xf7, 0x02, 0xaf, 0xf4, 0x79, 0x0a, 0x03, 0x1e, 0xba, 0x00, 0x82, 0x41, 0xfb, 0xe1, 0xe6, 0xfc, 0x5d, 0x07, 0xfe, 0x1e, 0x6a, 0xff, 0xde, 0x91, 0xfb, 0x11, 0xdf, 0xff, 0xec, 0x50, 0x00, 0x90, 0xd4, 0xfd, 0x33, 0xe5, 0x01, 0xef, 0x2a, 0xfd, 0xd5, 0x83, 0xfb, 0xc5, 0x39, 0xfd, 0xfc, 0xae, 0xfa, 0x4d, 0x88, 0xfb, 0x03, 0xdb, 0xfb, 0xf6, 0x12, 0x43, 0x2e, 0x4b, 0x31, 0xf7, 0x9a, 0xe9, 0x8d, 0xfa, 0xfe, 0x09, 0xb3, 0x25, 0xc5, 0x18, 0x0a, 0x55, 0x00, 0xee, 0xec, 0x1c, 0x15, 0xaa, 0x5a, 0x0a, 0x50, 0xe1, 0xd6, 0xd9, 0x1b, 0xf6, 0x40, 0x12, 0x12, 0x6b, 0xf4, 0x07, 0x07, 0x53, 0xf8, 0x96, 0x69, 0xf3, 0x7d, 0xb5, 0x02, 0x90, 0xa3, 0x00, 0x60, 0xe1, 0xfb, 0xbd, 0x99, 0xfb, 0xb2, 0x8e, 0xfc, 0xaf, 0x7b, 0x00, 0xd5, 0x33, 0xfc, 0x19, 0x14, 0xff, 0xf7, 0x20, 0x01, 0xd4, 0x9e, 0xff, 0x5a, 0xf8, 0x00, 0xd6, 0x96, 0xfc, 0x40, 0x7b, 0xfc, 0xb0, 0x76, 0xfc, 0x01, 0xaf, 0xf9, 0xc1, 0x26, 0xfb, 0xc9, 0x56, 0xfb, 0x83, 0x1c, 0x48, 0xf5, 0x98, 0x34, 0x31, 0x49, 0xe5, 0x8e, 0x90, 0xfc, 0x23, 0xc8, 0x23, 0x2c, 0x1e, 0x08, 0x56, 0x26, 0xf2, 0x54, 0x14, 0x1a, 0x27, 0x5f, 0x09, 0x6d, 0x4c, 0xd3, 0xa2, 0x72, 0xf5, 0x9f, 0x4a, 0x12, 0x59, 0x44, 0x08, 0x64, 0x4c, 0xf9, 0x4b, 0x2c, 0xf3, 0xeb, 0xb0, 0x01, 0x52, 0x4a, 0x00, 0x20, 0x99, 0xfc, 0xcb, 0x4b, 0xfb, 0xc6, 0xf3, 0xfa, 0x2d, 0x1c, 0x00, 0x7d, 0x6b, 0xfd, 0x62, 0x7a, 0xff, 0xee, 0xae, 0x01, 0x11, 0xd4, 0x00, 0x1f, 0x0a, 0x00, 0x78, 0x99, 0xfc, 0xfa, 0x44, 0xfd, 0x31, 0xab, 0xfb, 0xb0, 0x6d, 0xf9, 0x32, 0x8d, 0xfa, 0x0a, 0xad, 0xfa, 0x64, 0x37, 0x4e, 0x5a, 0x1d, 0x36, 0x69, 0xee, 0xe0, 0xa7, 0x61, 0xfb, 0xcf, 0x34, 0x22, 0x47, 0xff, 0x03, 0xdd, 0xaf, 0xf4, 0xaa, 0xac, 0x20, 0xff, 0x29, 0x08, 0x16, 0x86, 0xcf, 0x47, 0x55, 0xf5, 0x1b, 0xc1, 0x12, 0x84, 0xc4, 0x07, 0x47, 0x0c, 0xf9, 0x3e, 0x5d, 0xf4, 0x0a, 0x89, 0x00, 0x6f, 0xa9, 0xfe, 0x14, 0x92, 0xfd, 0xf2, 0x6c, 0xfb, 0xfb, 0xbd, 0xf9, 0xde, 0xb2, 0xfe, 0x58, 0xc9, 0xfd, 0x3e, 0x66, 0x01, 0x5f, 0x8a, 0x02, 0xa2, 0x35, 0x00, 0x5f, 0x9e, 0xff, 0xd0, 0x6c, 0xfd, 0x08, 0x0c, 0xfd, 0x29, 0x2d, 0xfb, 0x09, 0x88, 0xf9, 0xaa, 0x8b, 0xf9, 0xaf, 0x56, 0xfa, 0xca, 0x79, 0x52, 0xa2, 0xfc, 0x39, 0xd9, 0x71, 0xdd, 0x78, 0x29, 0xf9, 0x5c, 0x47, 0x21, 0x6b, 0x80, 0x00, 0xae, 0xd4, 0xf4, 0x99, 0xd4, 0x25, 0x7f, 0xc1, 0x0a, 0x3e, 0xf1, 0xcb, 0x5d, 0xc2, 0xf3, 0xee, 0xf4, 0x13, 0x80, 0xc3, 0x06, 0x76, 0xf2, 0xf8, 0xdf, 0xe2, 0xf5, 0x59, 0xb7, 0xff, 0x58, 0x54, 0xfc, 0xb7, 0x61, 0xfe, 0x44, 0x7c, 0xfc, 0xff, 0x79, 0xf8, 0xac, 0xb4, 0xfd, 0x0d, 0x13, 0xfd, 0x59, 0x99, 0x03, 0x59, 0xd2, 0x04, 0x61, 0x03, 0xfe, 0x0d, 0xb8, 0xff, 0x4a, 0x3b, 0xff, 0x4f, 0xfa, 0xfb, 0x06, 0x5e, 0xfb, 0xcd, 0xe1, 0xf9, 0xfe, 0x88, 0xf8, 0x67, 0x25, 0xfa, 0x1d, 0xd4, 0x56, 0xd1, 0xc3, 0x3c, 0x66, 0x1d, 0xdb, 0x53, 0xf6, 0xf6, 0xce, 0x75, 0x20, 0x51, 0x92, 0xfd, 0xe3, 0x6e, 0xf2, 0x0f, 0x59, 0x2a, 0xc3, 0x13, 0x0e, 0x92, 0x27, 0xc9, 0x93, 0xb5, 0xf2, 0x57, 0x1f, 0x14, 0xd0, 0xcc, 0x05, 0xcb, 0xc5, 0xf8, 0xbf, 0x60, 0xf7, 0xa7, 0x2d, 0xff, 0x10, 0x8d, 0xf9, 0xee, 0x28, 0xff, 0x0b, 0x40, 0xfd, 0x3f, 0x9d, 0xf7, 0x9f, 0x7e, 0xfd, 0xa4, 0x5a, 0xfb, 0xf1, 0x27, 0x05, 0xda, 0xde, 0x07, 0x2d, 0xd3, 0xfb, 0x08, 0x54, 0xff, 0x40, 0x87, 0x01, 0xc4, 0xfe, 0xfa, 0xbf, 0x39, 0xfb, 0x2d, 0xef, 0xfa, 0xfb, 0x5b, 0xf7, 0x46, 0x7c, 0xf9, 0x37, 0x6e, 0x5a, 0xfb, 0x13, 0x3f, 0x8a, 0x5a, 0xda, 0xdd, 0x95, 0xf4, 0x66, 0xc4, 0x1f, 0x2e, 0xa8, 0xfb, 0xa8, 0xf6, 0xed, 0xfa, 0x9f, 0x2d, 0x19, 0x0b, 0x12, 0xba, 0xd6, 0xc7, 0x4d, 0x6e, 0xf2, 0xae, 0xa0, 0x12, 0xe3, 0xcc, 0x04, 0x82, 0x87, 0xf9, 0xff, 0x4c, 0xf8, 0xc5, 0x6c, 0xfe, 0x42, 0x60, 0xf7, 0x60, 0xbd, 0xff, 0xf9, 0x65, 0xfd, 0xd5, 0x7c, 0xf7, 0xed, 0xf5, 0xfd, 0x10, 0x51, 0xf9, 0x31, 0x68, 0x05, 0x30, 0xe7, 0x0a, 0x7e, 0x46, 0xfb, 0x80, 0x03, 0xfe, 0x05, 0xc5, 0x03, 0xda, 0x5f, 0xfb, 0x88, 0x4c, 0xfa, 0x28, 0x36, 0xfc, 0x24, 0x81, 0xf6, 0x3a, 0x22, 0xf8, 0xee, 0xa5, 0x5d, 0x69, 0xc6, 0x40, 0x64, 0xb3, 0xd9, 0x02, 0x27, 0xf4, 0xfe, 0x81, 0x1e, 0xef, 0x1d, 0xf9, 0x4d, 0x3f, 0xea, 0x2e, 0x7b, 0x2e, 0xf5, 0x56, 0x15, 0xc7, 0x7f, 0xc8, 0xf7, 0xfa, 0xf2, 0x90, 0x37, 0x10, 0x14, 0xcb, 0x02, 0xcf, 0x8e, 0xfb, 0x91, 0xd3, 0xf8, 0xea, 0x98, 0xfc, 0x8e, 0x63, 0xf6, 0xba, 0x2e, 0x00, 0xf9, 0x04, 0xfd, 0x74, 0xd8, 0xf7, 0x5d, 0xa2, 0xfe, 0x6c, 0x9f, 0xf7, 0x27, 0x79, 0x04, 0x90, 0xb9, 0x0c, 0x26, 0xb1, 0xfc, 0xaa, 0xc5, 0xfc, 0xcb, 0xdf, 0x04, 0x30, 0x64, 0xfd, 0x09, 0xfe, 0xf8, 0x89, 0x94, 0xfc, 0xa7, 0x32, 0xf6, 0xfb, 0x32, 0xf6, 0xa3, 0xca, 0x60, 0x2e, 0x2a, 0x42, 0x08, 0xe7, 0xd8, 0x1c, 0x2b, 0xf6, 0x37, 0xaa, 0x1c, 0x8a, 0x55, 0xf5, 0xb2, 0xa1, 0xe8, 0x2a, 0x17, 0x2d, 0xc7, 0x72, 0x17, 0xfe, 0x97, 0xcb, 0xd2, 0x9d, 0xf3, 0x5c, 0x31, 0x0d, 0x87, 0x9e, 0x00, 0x51, 0x5f, 0xfe, 0x4f, 0x6c, 0xf9, 0xad, 0x34, 0xfa, 0x9b, 0x32, 0xf6, 0x16, 0x59, 0x01, 0x96, 0x89, 0xfc, 0xd5, 0x08, 0xf8, 0xa8, 0xe0, 0xff, 0x0f, 0x87, 0xf6, 0xc8, 0xa9, 0x02, 0x93, 0xf6, 0x0c, 0xc0, 0xdf, 0xff, 0x71, 0x2b, 0xfd, 0x8c, 0x0d, 0x04, 0x98, 0x53, 0x00, 0x2f, 0x84, 0xf8, 0xe9, 0xfc, 0xfa, 0x38, 0x6e, 0xf6, 0xe3, 0x36, 0xf5, 0x6b, 0xa2, 0x5f, 0x7c, 0xd6, 0x45, 0x00, 0xe8, 0xdc, 0x08, 0x22, 0xf4, 0x99, 0x20, 0x1b, 0xb9, 0xec, 0xf4, 0xf6, 0x02, 0xe4, 0x99, 0x6a, 0x29, 0x46, 0x05, 0x1b, 0x54, 0x5b, 0xd0, 0x64, 0x19, 0xf3, 0x53, 0x2c, 0x09, 0x44, 0x7a, 0xff, 0xbf, 0xb4, 0x00, 0x0a, 0x92, 0xf9, 0xa2, 0xb3, 0xf8, 0xe7, 0xb2, 0xf5, 0xf2, 0xab, 0x02, 0x5c, 0xd2, 0xfc, 0x82, 0xf0, 0xf6, 0x3d, 0x6f, 0x01, 0x97, 0xe7, 0xf6, 0x0a, 0xf1, 0xfe, 0x93, 0x96, 0x0b, 0xd0, 0x0b, 0x05, 0xd4, 0xba, 0xfe, 0x5a, 0x5f, 0x01, 0x6a, 0x39, 0x03, 0xfd, 0x5d, 0xf8, 0xde, 0x77, 0xf8, 0x71, 0xf2, 0xf7, 0xfb, 0x0a, 0xf4, 0xf6, 0x2b, 0x5b, 0xae, 0x58, 0x4a, 0x3b, 0x92, 0xe5, 0xca, 0x22, 0xf0, 0x99, 0x50, 0x18, 0x22, 0x1d, 0xf8, 0x9f, 0x10, 0xde, 0x41, 0xff, 0x21, 0x7a, 0x94, 0x20, 0xa2, 0x8d, 0xd6, 0x89, 0xe1, 0xf0, 0x0f, 0x6c, 0x06, 0xe3, 0xfb, 0xfd, 0xae, 0xd4, 0x01, 0x0e, 0x12, 0xfb, 0xa9, 0x5e, 0xf7, 0x66, 0x9b, 0xf5, 0xab, 0xda, 0x03, 0xa7, 0xf3, 0xfc, 0x46, 0x4a, 0xf6, 0xb0, 0x4e, 0x02, 0xc2, 0x28, 0xf8, 0x70, 0xdf, 0xfb, 0xbb, 0x71, 0x08, 0x54, 0x86, 0x09, 0xa2, 0x54, 0x02, 0x07, 0xee, 0xfd, 0x4c, 0x80, 0x03, 0x94, 0x79, 0xfa, 0x94, 0xda, 0xf6, 0xcc, 0x22, 0xf8, 0xd0, 0x4d, 0xf4, 0x79, 0xba, 0x58, 0x76, 0x29, 0x4c, 0x0e, 0x87, 0xeb, 0x5b, 0xaf, 0xf1, 0xe2, 0x2c, 0x14, 0xf8, 0x6b, 0xf8, 0xcb, 0xda, 0xdc, 0x47, 0x72, 0x18, 0x6b, 0xd0, 0x23, 0x49, 0x0d, 0xde, 0x70, 0x3d, 0xee, 0xb3, 0x73, 0x05, 0x32, 0xf0, 0xfb, 0xbd, 0xb2, 0x01, 0xd5, 0xd5, 0xfd, 0x2f, 0xbc, 0xf6, 0x78, 0x83, 0xf5, 0xaf, 0xa4, 0x04, 0x7c, 0x31, 0xfd, 0x08, 0xc4, 0xf5, 0xcb, 0x3e, 0x03, 0x57, 0x51, 0xf9, 0xc4, 0xa0, 0xfa, 0x96, 0xd3, 0x05, 0x33, 0x95, 0x09, 0x70, 0x10, 0x06, 0xeb, 0xac, 0xfc, 0x6b, 0x13, 0x02, 0xd7, 0x38, 0xfd, 0x05, 0x76, 0xf6, 0x99, 0x0b, 0xf8, 0xe4, 0x20, 0xf5, 0x86, 0x7e, 0x59, 0x5b, 0xbe, 0x4b, 0x04, 0x56, 0xeb, 0x45, 0x9c, 0xf9, 0x65, 0xb5, 0x11, 0x0e, 0x9d, 0xf1, 0xbc, 0x78, 0xe0, 0x15, 0x56, 0x11, 0x98, 0x39, 0x21, 0x11, 0xf3, 0xe5, 0x86, 0xf6, 0xed, 0x48, 0x41, 0x03, 0x7c, 0x18, 0xfa, 0x54, 0xb6, 0x02, 0xc3, 0x34, 0xff, 0xdb, 0x6c, 0xf7, 0x36, 0x31, 0xf6, 0x5c, 0x0a, 0x03, 0x9a, 0x04, 0xff, 0xb4, 0x77, 0xf5, 0xed, 0x1f, 0x03, 0x0f, 0xff, 0xfb, 0xa1, 0x00, 0xfa, 0x90, 0x4e, 0x03, 0x1d, 0x93, 0x05, 0xd7, 0x43, 0x08, 0x79, 0xd8, 0xff, 0xe2, 0x5c, 0xff, 0xee, 0x2a, 0xff, 0x3f, 0x5c, 0xf8, 0x94, 0xf6, 0xf6, 0x8e, 0xe4, 0xf6, 0x89, 0xd8, 0x59, 0x36, 0xae, 0x4b, 0x10, 0xcc, 0xe9, 0xfc, 0xf8, 0x01, 0x92, 0x7a, 0x11, 0xcc, 0x75, 0xe8, 0xc9, 0xab, 0xe4, 0x64, 0x5e, 0x0c, 0x6b, 0x68, 0x1b, 0x41, 0x2b, 0xee, 0x1e, 0x0b, 0xef, 0xb0, 0x25, 0xff, 0xfa, 0xe5, 0xf9, 0x21, 0xf4, 0x04, 0x14, 0xca, 0xfe, 0x9a, 0xff, 0xf8, 0xb4, 0x70, 0xf7, 0x3c, 0x61, 0xff, 0xe5, 0x20, 0x02, 0xac, 0x73, 0xf6, 0x84, 0x32, 0x01, 0xfa, 0xde, 0xff, 0x03, 0xf3, 0xf8, 0x3d, 0xb1, 0xfe, 0x66, 0x98, 0x02, 0x24, 0xae, 0x08, 0x6d, 0x7b, 0x03, 0x9b, 0xdc, 0xff, 0xc9, 0xfc, 0xfe, 0x0d, 0x85, 0xfa, 0x70, 0xda, 0xf8, 0xa9, 0x33, 0xf7, 0x16, 0x2b, 0x59, 0xf5, 0x26, 0x4b, 0x40, 0x3c, 0xea, 0x80, 0xd8, 0x07, 0xf8, 0xbd, 0x11, 0x73, 0x93, 0xe1, 0xbf, 0xb9, 0xe6, 0x71, 0x5d, 0x08, 0x54, 0xfe, 0x14, 0xd6, 0x9b, 0xf5, 0x19, 0xd6, 0xf0, 0x21, 0x41, 0xfa, 0x35, 0x5a, 0xfb, 0x25, 0xbd, 0x07, 0x37, 0x0f, 0xfd, 0xc8, 0x31, 0xfa, 0xf1, 0xda, 0xf9, 0x73, 0x2b, 0xfb, 0x25, 0x8c, 0x04, 0x57, 0x3f, 0xfa, 0xbe, 0xca, 0xfc, 0xa6, 0xb0, 0x00, 0x13, 0x8a, 0xfa, 0x81, 0x8a, 0xfa, 0x2d, 0x5f, 0xff, 0xa1, 0x8b, 0x08, 0xab, 0x3a, 0x06, 0x33, 0x29, 0x02, 0x52, 0xa3, 0xff, 0xca, 0x5f, 0xfc, 0x69, 0x2a, 0xfa, 0x77, 0x9d, 0xf6, 0xa4, 0x99, 0x56, 0xa9, 0xd1, 0x4a, 0x0b, 0xab, 0xed, 0x41, 0x73, 0x0a, 0x36, 0x9e, 0x11, 0xd5, 0xa2, 0xdf, 0xc8, 0x85, 0xe6, 0x1f, 0xf3, 0x02, 0xe1, 0x9f, 0x10, 0xf1, 0xdc, 0xfb, 0x4d, 0x39, 0xf2, 0xeb, 0x2e, 0xf7, 0x3a, 0xfa, 0xfc, 0x93, 0xd8, 0x09, 0xcd, 0x4c, 0xfc, 0x58, 0xfc, 0xf9, 0xbc, 0x7c, 0xfc, 0xb6, 0xfa, 0xf9, 0xe4, 0xc7, 0x03, 0x4f, 0x00, 0xfd, 0x5e, 0x7d, 0xfa, 0x4d, 0xb6, 0xfd, 0xb7, 0xfd, 0xfc, 0x2e, 0x59, 0xfb, 0x8a, 0xa5, 0xfb, 0x94, 0x06, 0x06, 0x66, 0xe4, 0x07, 0x5a, 0xa7, 0x07, 0x45, 0xbc, 0x00, 0x61, 0xb9, 0xf9, 0x96, 0x85, 0xfd, 0xee, 0xa2, 0xf8, 0xd1, 0xba, 0x53, 0xa9, 0x2d, 0x4a, 0xd0, 0x45, 0xf1, 0x0e, 0x38, 0x0c, 0x92, 0x2b, 0x11, 0xa5, 0xe3, 0xdf, 0x8a, 0x92, 0xe6, 0x61, 0x78, 0xfc, 0x63, 0xa8, 0x0c, 0x5e, 0x9e, 0x02, 0x6e, 0x52, 0xf3, 0xd8, 0x80, 0xf4, 0x81, 0xca, 0xff, 0x3d, 0xc6, 0x0a, 0x16, 0x96, 0xfb, 0x44, 0x44, 0xfb, 0xb8, 0xf4, 0xfd, 0x4d, 0xc7, 0xf8, 0xca, 0x89, 0x02, 0x71, 0xa1, 0xfd, 0x72, 0x8e, 0xf9, 0x53, 0x51, 0xfb, 0xf9, 0xc5, 0xfe, 0xc4, 0xc6, 0xfe, 0x04, 0xbd, 0xf8, 0xef, 0xb3, 0x04, 0x56, 0x7e, 0x08, 0x10, 0x90, 0x07, 0x0e, 0xd0, 0x04, 0x74, 0x0b, 0xfa, 0xb1, 0x9d, 0xfd, 0x8e, 0x96, 0xfa, 0x1f, 0x62, 0x53, 0x7e, 0xac, 0x45, 0xf3, 0xc4, 0xf3, 0x58, 0x09, 0x10, 0xa8, 0xe1, 0x0d, 0x3d, 0x8c, 0xe1, 0x97, 0x9e, 0xe7, 0x10, 0x7d, 0xf5, 0xc6, 0x5d, 0x09, 0x46, 0x5b, 0x08, 0xc2, 0x8d, 0xf5, 0xce, 0x3f, 0xf1, 0xda, 0x2f, 0x02, 0x8b, 0x2d, 0x0d, 0x29, 0x91, 0xfa, 0xc9, 0x65, 0xfb, 0xe0, 0x93, 0xfd, 0x84, 0x89, 0xf8, 0x33, 0x76, 0x01, 0x38, 0x70, 0xfb, 0x64, 0xa1, 0xfa, 0x01, 0x5c, 0xfc, 0x1a, 0xbc, 0xfc, 0xde, 0xd4, 0x01, 0x55, 0xe4, 0xfc, 0x88, 0xa8, 0x01, 0xfd, 0x79, 0x04, 0x60, 0xa1, 0x06, 0x5f, 0x44, 0x09, 0xae, 0xaa, 0xfc, 0x27, 0x52, 0xfa, 0x77, 0x70, 0xfc, 0x49, 0x6d, 0x4f, 0x6b, 0xe0, 0x42, 0xed, 0x68, 0xf9, 0x42, 0x4c, 0x11, 0xbc, 0x67, 0x09, 0xec, 0x4c, 0xe7, 0x64, 0x88, 0xe9, 0x41, 0xa5, 0xea, 0xec, 0xd4, 0x07, 0x3a, 0x87, 0x10, 0xfe, 0x3d, 0xf5, 0x81, 0xb7, 0xee, 0xdb, 0x2f, 0x06, 0x82, 0x73, 0x0d, 0xf0, 0x21, 0xf9, 0xf6, 0xd2, 0xfc, 0xc9, 0x39, 0xfb, 0x23, 0xe6, 0xf6, 0x5c, 0xc6, 0x03, 0x1f, 0xc0, 0xf9, 0x98, 0x69, 0xf8, 0x9d, 0xd3, 0x00, 0x31, 0x60, 0xfd, 0x56, 0x1e, 0x00, 0x57, 0xe5, 0x01, 0x01, 0x4e, 0x01, 0xc6, 0xeb, 0xff, 0xb9, 0x5a, 0x05, 0x5b, 0x4b, 0x08, 0x1c, 0xd3, 0xff, 0x2d, 0x22, 0xfd, 0x8c, 0x52, 0xfb, 0x3b, 0x4c, 0x4e, 0x51, 0x2a, 0x3e, 0x24, 0x58, 0xfc, 0xc1, 0x9b, 0x13, 0x73, 0xfe, 0x02, 0x8e, 0x98, 0xeb, 0xb1, 0xe6, 0xef, 0x95, 0x30, 0xe2, 0x5e, 0xdd, 0x02, 0x17, 0x55, 0x18, 0xa8, 0x11, 0xf8, 0xb9, 0xa1, 0xeb, 0xd5, 0x51, 0x08, 0xe2, 0xe5, 0x0d, 0x59, 0x4d, 0xf7, 0x0b, 0x6b, 0xfc, 0x1f, 0xb4, 0xf9, 0xb9, 0xc4, 0xf7, 0x7e, 0xb9, 0x04, 0x67, 0xeb, 0xf7, 0x38, 0x6b, 0xf8, 0xaf, 0xca, 0x04, 0x74, 0xc5, 0xfe, 0x59, 0x38, 0xfd, 0xa0, 0xeb, 0x03, 0x98, 0x58, 0x04, 0x06, 0xb4, 0xfd, 0xdb, 0xd5, 0x01, 0x3e, 0x29, 0x05, 0x3d, 0x54, 0x01, 0x75, 0xf9, 0x01, 0x95, 0xbd, 0xfb, 0x72, 0x93, 0x52, 0x62, 0xe4, 0x39, 0xcc, 0x6e, 0xf4, 0x77, 0x71, 0x17, 0x7e, 0x1f, 0x04, 0x55, 0x3b, 0xe8, 0x71, 0x98, 0xf2, 0x68, 0x2e, 0xe4, 0xae, 0x30, 0x01, 0xda, 0x8a, 0x17, 0x4c, 0xe8, 0xfa, 0x43, 0x77, 0xed, 0xd6, 0xec, 0x06, 0xd3, 0xae, 0x0d, 0x64, 0xff, 0xf5, 0xf6, 0x6f, 0xfa, 0xa3, 0xdf, 0xfa, 0x6c, 0xdc, 0xf8, 0xe6, 0xf1, 0x04, 0x70, 0xe0, 0xf8, 0x60, 0x89, 0xf8, 0x12, 0xf6, 0x04, 0xb9, 0x3d, 0x00, 0x29, 0xc3, 0xfe, 0xc1, 0xac, 0x03, 0x10, 0xbc, 0x03, 0xbc, 0x2e, 0xfe, 0xb3, 0xc6, 0xff, 0x2d, 0x55, 0x03, 0x63, 0xe2, 0x00, 0x39, 0x1a, 0x02, 0x41, 0x0e, 0x00, 0x82, 0x95, 0x56, 0xd8, 0x0a, 0x34, 0x61, 0xfa, 0xe9, 0xc7, 0x6f, 0x1e, 0xe8, 0xea, 0x08, 0x44, 0x5b, 0xdf, 0x18, 0x5e, 0xf3, 0xfd, 0x43, 0xec, 0x8f, 0xaa, 0xff, 0x0e, 0xc1, 0x13, 0x6b, 0x9d, 0xfd, 0x43, 0x9e, 0xed, 0x33, 0xe5, 0x03, 0xfc, 0x3a, 0x0f, 0x53, 0x1a, 0xf6, 0x87, 0xba, 0xf6, 0xaf, 0x25, 0xfc, 0x12, 0x05, 0xfc, 0x75, 0x8e, 0x04, 0x94, 0x95, 0xf9, 0x6b, 0xa4, 0xf8, 0xf1, 0x53, 0x03, 0x40, 0xe5, 0x01, 0x6f, 0xbf, 0x00, 0xd3, 0xe5, 0x01, 0xc0, 0x88, 0x02, 0xd5, 0x82, 0xff, 0x59, 0x84, 0xfe, 0x9a, 0x7d, 0x01, 0x57, 0xee, 0x00, 0x1c, 0x8a, 0x00, 0x33, 0xd6, 0x01, 0x87, 0x53, 0x55, 0x9d, 0x6a, 0x2e, 0x19, 0x75, 0xe3, 0x99, 0xc4, 0x25, 0x3b, 0x5b, 0x10, 0x61, 0x4f, 0xd7, 0xf6, 0x33, 0xf1, 0x86, 0x43, 0xf6, 0x1d, 0xe3, 0x01, 0xbb, 0xe2, 0x0b, 0xc5, 0xf0, 0xfc, 0x1e, 0xaa, 0xf1, 0x72, 0x23, 0x01, 0x51, 0xf2, 0x0e, 0x42, 0x9c, 0xf7, 0xd6, 0x0e, 0xf5, 0x45, 0x48, 0xfe, 0x5e, 0xd4, 0xfd, 0xab, 0xaf, 0x02, 0xf3, 0x1b, 0xfa, 0x59, 0x15, 0xfb, 0xf9, 0xb3, 0x02, 0x77, 0x31, 0x00, 0x65, 0x80, 0x01, 0xda, 0x9f, 0x02, 0x19, 0x00, 0x02, 0xd5, 0x0f, 0xff, 0xd4, 0x62, 0xff, 0x4d, 0xd0, 0x00, 0x79, 0x4b, 0xfe, 0xf1, 0xb3, 0x01, 0xa9, 0xae, 0x02, 0x5f, 0xe3, 0x52, 0x51, 0x3c, 0x29, 0x0e, 0x95, 0xe0, 0xc9, 0xa5, 0x2a, 0xd4, 0xa5, 0x14, 0xdd, 0x74, 0xd1, 0xca, 0x9f, 0xf1, 0x88, 0x36, 0xff, 0x27, 0xe9, 0xfe, 0xfc, 0x71, 0x05, 0xb8, 0x07, 0x00, 0xbe, 0x99, 0xf3, 0x1c, 0x80, 0xfd, 0x3d, 0x9c, 0x0e, 0x43, 0xd5, 0xfa, 0xd7, 0x1d, 0xf5, 0x19, 0x21, 0xff, 0xb4, 0x98, 0xff, 0xc1, 0x69, 0x00, 0x4c, 0x4a, 0xfa, 0xf8, 0xc7, 0xfd, 0x19, 0xcb, 0x01, 0x1e, 0x5d, 0xfe, 0xa2, 0x5e, 0x01, 0x51, 0x4a, 0x03, 0x08, 0xd9, 0x01, 0x72, 0x88, 0xfe, 0xda, 0x98, 0xff, 0xc8, 0x2b, 0x01, 0x6e, 0x72, 0xfe, 0x34, 0xfa, 0x00, 0x2f, 0x41, 0x02, 0xff, 0xec, 0x4d, 0x13, 0x22, 0x27, 0x29, 0xba, 0xe1, 0x1f, 0xf9, 0x27, 0xd2, 0xb4, 0x14, 0xa7, 0x24, 0xd6, 0x62, 0x9f, 0xf5, 0x25, 0x93, 0xfe, 0xac, 0x4a, 0xfb, 0x4b, 0xfd, 0x03, 0x9b, 0x5c, 0x01, 0x63, 0xa0, 0xf5, 0x1a, 0xc5, 0xfb, 0xeb, 0x5b, 0x0d, 0xe1, 0xa0, 0xfd, 0x47, 0x12, 0xf6, 0xb4, 0x84, 0xff, 0x47, 0xf5, 0xff, 0xbf, 0xac, 0xff, 0x6b, 0xef, 0xfa, 0x88, 0xa2, 0xfd, 0x7e, 0x35, 0x01, 0x3e, 0x7a, 0xff, 0x52, 0x09, 0x01, 0x02, 0x99, 0x01, 0xab, 0x20, 0x02, 0x4a, 0x24, 0xff, 0x37, 0xeb, 0xfe, 0x4c, 0x26, 0x02, 0x40, 0x66, 0x00, 0xeb, 0x94, 0xff, 0xb3, 0x49, 0x00, 0x95, 0x51, 0x47, 0x38, 0xa0, 0x25, 0x10, 0xf4, 0xe4, 0x1c, 0xde, 0x23, 0x31, 0x2d, 0x16, 0xca, 0xdf, 0xdb, 0x12, 0x76, 0xf4, 0x07, 0x38, 0xff, 0x5a, 0xc8, 0xfb, 0x99, 0x2d, 0x00, 0xdf, 0x3a, 0x01, 0x62, 0x4c, 0xf9, 0x06, 0xad, 0xfb, 0xab, 0xec, 0x0a, 0xc8, 0xbd, 0xff, 0x27, 0x51, 0xf8, 0x60, 0x39, 0xfe, 0x56, 0xf4, 0xff, 0x57, 0xd8, 0x00, 0xff, 0xc1, 0xfa, 0x94, 0x5f, 0xfc, 0x06, 0x59, 0x01, 0x41, 0xe9, 0x00, 0x10, 0x8b, 0x00, 0xe4, 0x2b, 0x00, 0x21, 0x87, 0x01, 0x95, 0xb5, 0xff, 0x13, 0x3f, 0x00, 0x69, 0x7f, 0x02, 0x5b, 0x7d, 0x00, 0x82, 0xa6, 0xff, 0xa3, 0x21, 0xff, 0x09, 0xe7, 0x38, 0xb1, 0x4f, 0x26, 0x9d, 0xf8, 0xfa, 0x80, 0x88, 0x14, 0xfc, 0x2d, 0x02, 0xf8, 0x6c, 0xef, 0x8f, 0x2b, 0xfc, 0x0b, 0xc4, 0xf5, 0x81, 0xe7, 0xfe, 0xe6, 0x2a, 0x07, 0x48, 0x1b, 0xfd, 0x4a, 0xce, 0xf6, 0x3c, 0x21, 0x04, 0x42, 0x2a, 0x09, 0x4c, 0x8f, 0xfb, 0x7c, 0x2c, 0xfc, 0xf5, 0xf3, 0xfb, 0x4d, 0xb9, 0xfd, 0xf3, 0x2f, 0x02, 0xf1, 0x2f, 0xfa, 0x01, 0x92, 0xfc, 0xed, 0xa9, 0x01, 0x4a, 0x28, 0xfe, 0x13, 0xbf, 0xfe, 0xd8, 0x60, 0x01, 0x46, 0x99, 0x01, 0x9b, 0x33, 0x02, 0x9e, 0x8c, 0x04, 0x70, 0xf6, 0x00, 0xd7, 0x87, 0xfc, 0x7e, 0x92, 0xfe, 0x65, 0x37, 0xfe, 0xcc, 0x59, 0x31, 0x93, 0xe2, 0x24, 0x80, 0x58, 0xfd, 0xc4, 0x99, 0x11, 0xf4, 0xe5, 0x05, 0x1d, 0x67, 0xf1, 0x70, 0x8b, 0xfa, 0xc0, 0x1b, 0xf9, 0x5c, 0x18, 0xfe, 0xaf, 0x75, 0x04, 0xb3, 0x57, 0xfe, 0x53, 0x9c, 0xf8, 0xa1, 0x2f, 0x03, 0x42, 0xf5, 0x07, 0xa3, 0x13, 0xfd, 0x23, 0x69, 0xfc, 0x1c, 0xef, 0xfb, 0xa3, 0x5b, 0xfe, 0x20, 0x8b, 0x01, 0x93, 0x36, 0xfa, 0x33, 0x01, 0xfd, 0x6f, 0x8b, 0x01, 0xf9, 0x92, 0xfd, 0xe6, 0xb2, 0xfe, 0xa0, 0x09, 0x02, 0xf5, 0x8e, 0x01, 0xc8, 0xdc, 0x01, 0x67, 0x77, 0x03, 0x6e, 0x0e, 0x00, 0x42, 0xe1, 0xfd, 0x71, 0xa2, 0xff, 0xba, 0xa7, 0xfd, 0xf6, 0x21, 0x2b, 0x05, 0xfb, 0x22, 0x8f, 0x48, 0xff, 0x18, 0xdc, 0x10, 0x69, 0xf3, 0x07, 0xd9, 0xef, 0xf1, 0x6f, 0xfe, 0xfa, 0x65, 0x8f, 0xfb, 0xcd, 0x37, 0xfd, 0xae, 0x34, 0x03, 0x5a, 0xe0, 0xfe, 0xbd, 0x7e, 0xfa, 0xf5, 0xfd, 0x02, 0xec, 0x92, 0x06, 0x2a, 0x2f, 0xfe, 0xec, 0x17, 0xfd, 0xe0, 0xb3, 0xfc, 0x57, 0x92, 0xfe, 0x72, 0x90, 0x00, 0x47, 0x31, 0xfb, 0xd2, 0xc2, 0xfd, 0x9b, 0xbc, 0x00, 0xa2, 0xa8, 0xfd, 0x93, 0x50, 0xff, 0x76, 0xd6, 0x01, 0xe7, 0xac, 0x01, 0x2e, 0x1c, 0x02, 0x67, 0x1d, 0x02, 0x76, 0x69, 0xff, 0xdb, 0x65, 0xff, 0x36, 0x91, 0x00, 0xc1, 0xbc, 0xfd, 0xbc, 0xe9, 0x24, 0xb4, 0xee, 0x1f, 0x4c, 0xf8, 0x02, 0xdd, 0xa1, 0x10, 0xbb, 0xd3, 0x06, 0x4f, 0x53, 0xf4, 0x00, 0x97, 0xfc, 0xac, 0x8e, 0xfb, 0x54, 0x4e, 0xfd, 0x69, 0x0c, 0x03, 0xf4, 0xe2, 0xfe, 0x43, 0xa4, 0xfb, 0x4d, 0xbd, 0x02, 0x21, 0xe3, 0x05, 0x81, 0xb9, 0xfe, 0x06, 0x78, 0xfd, 0xe7, 0xbd, 0xfd, 0x2d, 0x8f, 0xfe, 0x5b, 0xda, 0xff, 0x69, 0x26, 0xfc, 0x4e, 0xe7, 0xfd, 0x38, 0x61, 0x00, 0xc1, 0x55, 0xfe, 0xd3, 0x6a, 0xff, 0x4f, 0x62, 0x01, 0xdb, 0xda, 0x01, 0x5c, 0xf5, 0x01, 0x6b, 0xfe, 0x00, 0x73, 0xd2, 0xff, 0xa4, 0xa5, 0x00, 0x8a, 0xd5, 0x00, 0x56, 0xa9, 0xfe, 0x73, 0x6b, 0x1e, 0x50, 0x06, 0x1d, 0xba, 0xaa, 0x07, 0xeb, 0x56, 0x0f, 0x43, 0xfd, 0x04, 0x21, 0x80, 0xf8, 0x45, 0xff, 0xfd, 0x9e, 0x79, 0xfa, 0x00, 0x9a, 0xfd, 0x8e, 0xb1, 0x03, 0x8d, 0x3c, 0xff, 0xc1, 0xc3, 0xfb, 0x12, 0x88, 0x02, 0xdd, 0x7e, 0x05, 0x2c, 0xf4, 0xfe, 0xfe, 0x70, 0xfe, 0xc2, 0x6c, 0xfe, 0x19, 0x17, 0xfe, 0xce, 0xa1, 0xff, 0xaa, 0x2a, 0xfd, 0x7a, 0x3b, 0xfe, 0x9f, 0xf1, 0xff, 0xaf, 0xbe, 0xfe, 0x17, 0xa8, 0xff, 0xad, 0xf9, 0x00, 0x94, 0xd6, 0x01, 0x9a, 0x7a, 0x01, 0x26, 0xc9, 0x00, 0x47, 0x03, 0x01, 0x5b, 0x7d, 0x01, 0x9f, 0x6c, 0x01, 0x39, 0x45, 0xff, 0x20, 0x0c, 0x18, 0xde, 0xec, 0x19, 0xe7, 0xcb, 0x0b, 0x9b, 0x7d, 0x0e, 0xb0, 0x15, 0x04, 0xa0, 0x25, 0xfc, 0x3e, 0xe2, 0xfe, 0xbe, 0xad, 0xf9, 0xbd, 0xfe, 0xfd, 0x1e, 0x81, 0x04, 0xab, 0x83, 0xff, 0xff, 0xbf, 0xfb, 0xcb, 0xf2, 0x01, 0x60, 0xe7, 0x04, 0x5d, 0x45, 0x00, 0xfa, 0x60, 0xff, 0x13, 0xb9, 0xfd, 0x4e, 0xd5, 0xfd, 0x15, 0x99, 0x00, 0x9e, 0x19, 0xfe, 0x4c, 0xbe, 0xfd, 0x30, 0xc5, 0xff, 0x7d, 0x35, 0xff, 0x2b, 0x7d, 0xff, 0xbd, 0x47, 0x01, 0x7b, 0xd3, 0x01, 0x92, 0xd2, 0x00, 0x02, 0x84, 0x01, 0x0c, 0x95, 0x02, 0x0c, 0x72, 0x02, 0x1e, 0x66, 0x01, 0xb7, 0xea, 0xfe, 0x41, 0x65, 0x14, 0x61, 0xe4, 0x17, 0xf8, 0xc6, 0x0c, 0x5a, 0xfa, 0x0c, 0xc3, 0xea, 0x03, 0xc1, 0x09, 0xfe, 0x89, 0xad, 0xff, 0xcb, 0xaa, 0xfa, 0x1c, 0x18, 0xfe, 0x01, 0xd1, 0x03, 0x04, 0x00, 0x00, 0xeb, 0xd1, 0xfc, 0xc2, 0x8b, 0x01, 0xde, 0xd2, 0x03, 0x44, 0xe4, 0x00, 0x67, 0x07, 0x00, 0x07, 0x61, 0xfd, 0x49, 0x21, 0xfe, 0xff, 0x61, 0x01, 0x83, 0x4a, 0xfe, 0x4b, 0x5b, 0xfd, 0x4d, 0xc7, 0xff, 0xd3, 0xb1, 0xff, 0xe6, 0xe6, 0xff, 0x42, 0x83, 0x01, 0xa4, 0xc3, 0x01, 0x2c, 0x48, 0x01, 0x9e, 0xcb, 0x02, 0x4e, 0x93, 0x03, 0x1c, 0x3f, 0x02, 0x5e, 0x28, 0x00, 0xe0, 0x86, 0xfe, 0x07, 0xf6, 0x11, 0x5f, 0xd6, 0x15, 0xfd, 0xce, 0x0c, 0xe5, 0x56, 0x0c, 0x93, 0x91, 0x03, 0xf5, 0x05, 0xff, 0x92, 0x37, 0x01, 0xd3, 0x9e, 0xfb, 0xbd, 0xa4, 0xfd, 0xad, 0x94, 0x03, 0x55, 0x02, 0x01, 0xdc, 0xc5, 0xfd, 0x8f, 0xa9, 0x00, 0x7c, 0x01, 0x03, 0x4f, 0xf1, 0x01, 0x45, 0x7f, 0x00, 0xb9, 0x43, 0xfd, 0x82, 0xb5, 0xfe, 0x14, 0xa3, 0x01, 0xd3, 0x2a, 0xfe, 0x73, 0xdb, 0xfd, 0xbb, 0x5e, 0x00, 0x45, 0xc5, 0xff, 0x55, 0xdf, 0x00, 0xa0, 0xbd, 0x02, 0xf0, 0x05, 0x02, 0xba, 0xe1, 0x01, 0xa7, 0x6e, 0x03, 0xc9, 0x1e, 0x03, 0xdf, 0x03, 0x01, 0xd6, 0x66, 0xff, 0xcf, 0x88, 0xfe, 0x93, 0x41, 0x10, 0x54, 0x8a, 0x13, 0x28, 0xe1, 0x0b, 0xb0, 0x48, 0x0c, 0xbb, 0x23, 0x04, 0xc4, 0x68, 0xff, 0x8e, 0x0a, 0x01, 0x0e, 0x55, 0xfc, 0xf6, 0xa6, 0xfe, 0xc9, 0x8a, 0x03, 0x2f, 0xb0, 0x00, 0xdb, 0xc1, 0xfd, 0xd1, 0x9e, 0x00, 0x15, 0x32, 0x03, 0x47, 0x22, 0x02, 0x0d, 0x2f, 0x00, 0x25, 0x44, 0xfd, 0x2e, 0x3e, 0xff, 0x09, 0xe4, 0x01, 0xb3, 0x35, 0xfe, 0xdc, 0x45, 0xfe, 0x2e, 0x20, 0x01, 0x53, 0xee, 0x00, 0x1b, 0x59, 0x02, 0xf0, 0xf0, 0x02, 0x7c, 0x24, 0x01, 0xef, 0xc4, 0x01, 0xc5, 0x20, 0x03, 0x86, 0x9d, 0x01, 0xc9, 0xa4, 0xff, 0xa0, 0x5e, 0xff, 0xed, 0x4e, 0xff, 0x50, 0xca, 0x0f, 0x5e, 0xd5, 0x12, 0x61, 0x6a, 0x0a, 0x59, 0x91, 0x0a, 0x2f, 0x22, 0x04, 0xa0, 0x15, 0x00, 0xad, 0x7e, 0x01, 0xf7, 0x4a, 0xfd, 0xb0, 0x08, 0xff, 0x50, 0x1a, 0x03, 0xaa, 0xb7, 0x00, 0x9f, 0x72, 0xfe, 0xe4, 0x55, 0x01, 0x23, 0xfd, 0x02, 0x18, 0x06, 0x01, 0x56, 0x41, 0x00, 0xf9, 0xce, 0xfe, 0x3d, 0xa3, 0xff, 0x39, 0x67, 0x01, 0x7d, 0x50, 0xff, 0x31, 0x38, 0x00, 0xfe, 0x65, 0x02, 0x93, 0xe9, 0x01, 0x88, 0x20, 0x02, 0x9a, 0x5a, 0x01, 0x59, 0x97, 0x00, 0x1c, 0xa5, 0x01, 0x35, 0xe3, 0x01, 0x9f, 0xe2, 0x00, 0x75, 0xe4, 0xff, 0xf5, 0x70, 0xff, 0xe6, 0x03, 0xff, 0x6f, 0x6a, 0x0e, 0x3a, 0x27, 0x11, 0x64, 0xda, 0x09, 0x0e, 0x7b, 0x0a, 0x90, 0x85, 0x04, 0x29, 0x6d, 0x00, 0x70, 0x63, 0x01, 0xba, 0xd5, 0xfd, 0x19, 0xbc, 0xff, 0x17, 0x4a, 0x03, 0x3c, 0xf7, 0x00, 0x4e, 0x95, 0xfe, 0x7f, 0x2d, 0x01, 0x20, 0xeb, 0x02, 0x66, 0x47, 0x01, 0x8d, 0xc0, 0x00, 0xf2, 0x85, 0xff, 0xa8, 0xa7, 0x00, 0x7d, 0xbe, 0x02, 0x9e, 0xfe, 0x00, 0xbb, 0xe1, 0x00, 0x9e, 0xd9, 0x01, 0x4a, 0x79, 0x01, 0x78, 0xd0, 0x00, 0x51, 0x07, 0x00, 0x19, 0xa8, 0x00, 0x7e, 0x74, 0x01, 0x9f, 0x97, 0x01, 0xec, 0xab, 0x00, 0xcf, 0x57, 0xff, 0xcd, 0x52, 0xff, 0x61, 0x0b, 0xff, 0x80, 0x5a, 0x0d, 0x88, 0x1e, 0x10, 0x2f, 0x6a, 0x09, 0x9c, 0xe8, 0x09, 0xf6, 0xac, 0x04, 0x34, 0x8f, 0x00, 0xa8, 0x35, 0x01, 0x1a, 0xdd, 0xfe, 0xa5, 0xc4, 0x00, 0x5e, 0x2f, 0x03, 0xe1, 0x72, 0x00, 0x64, 0xdc, 0xfe, 0xf6, 0x39, 0x02, 0xd7, 0xd5, 0x02, 0x2e, 0x0e, 0x01, 0x71, 0x9d, 0x02, 0x12, 0x03, 0x02, 0xbe, 0x8f, 0x01, 0x3f, 0xa1, 0x02, 0xc6, 0xc6, 0x00, 0xf7, 0xfc, 0xff, 0x03, 0xfd, 0x00, 0x03, 0x8e, 0x00, 0xc2, 0x92, 0xff, 0x55, 0x71, 0x00, 0x89, 0x65, 0x01, 0xea, 0xb4, 0x00, 0x1f, 0xb9, 0x00, 0xdd, 0x57, 0x00, 0x21, 0x61, 0xff, 0xda, 0x40, 0xff, 0xb3, 0xf5, 0xfe, 0x0d, 0xd4, 0x0c, 0x8c, 0xcb, 0x0f, 0xbe, 0x31, 0x09, 0x2a, 0xac, 0x08, 0x06, 0xb9, 0x03, 0x77, 0xec, 0x00, 0x5c, 0x8a, 0x02, 0x42, 0xbd, 0xff, 0xba, 0x0e, 0x00, 0x2d, 0xe3, 0x02, 0xd5, 0x9a, 0x01, 0x25, 0xa7, 0xff, 0x91, 0x42, 0x02, 0x19, 0x3c, 0x04, 0xa2, 0x8e, 0x03, 0xe8, 0xca, 0x03, 0xca, 0xd4, 0x01, 0x28, 0x51, 0x00, 0x12, 0x0c, 0x01, 0xb4, 0xce, 0xff, 0x97, 0x52, 0xff, 0xc1, 0xac, 0x00, 0x6e, 0x56, 0x00, 0x02, 0xa3, 0xff, 0xb5, 0x46, 0x00, 0xbf, 0xb0, 0x00, 0x31, 0xae, 0x00, 0x08, 0x6a, 0x00, 0xb6, 0x9b, 0xff, 0xef, 0x1d, 0xff, 0x5a, 0xfd, 0xfe, 0x8c, 0x00, 0xff, 0x74, 0xde, 0x0b, 0x21, 0x58, 0x0e, 0x8b, 0x1e, 0x09, 0x4b, 0x8e, 0x09, 0xd1, 0x5f, 0x04, 0x28, 0x9e, 0x00, 0x7b, 0x7b, 0x01, 0x53, 0xa8, 0x00, 0x63, 0x4a, 0x02, 0xa8, 0xda, 0x02, 0x6a, 0x6b, 0x01, 0xdf, 0x29, 0x02, 0x17, 0x12, 0x05, 0x7a, 0x0a, 0x05, 0xe4, 0xc5, 0x02, 0xe8, 0x6a, 0x02, 0x03, 0x2a, 0x00, 0x85, 0xed, 0xfe, 0xcf, 0x4f, 0x00, 0x0b, 0xa4, 0xff, 0xc6, 0xe7, 0xff, 0xfc, 0x8a, 0x00, 0x02, 0x7b, 0xff, 0x7c, 0xa2, 0xff, 0x00, 0x60, 0x00, 0xe3, 0xa6, 0x00, 0x35, 0x3e, 0x00, 0xa4, 0x8f, 0xff, 0xd8, 0x61, 0xff, 0x23, 0xea, 0xfe, 0xe0, 0xf5, 0xfe, 0x80, 0x29, 0xff, 0x3d, 0x83, 0x0b, 0x73, 0xd8, 0x0e, 0x61, 0xed, 0x09, 0x9a, 0x7a, 0x08, 0x3a, 0x89, 0x02, 0x21, 0xfa, 0x00, 0x40, 0x6b, 0x03, 0xdd, 0xc9, 0x01, 0x0b, 0x1e, 0x03, 0x54, 0x3c, 0x05, 0xd2, 0x72, 0x04, 0x08, 0xf1, 0x02, 0x06, 0xc7, 0x03, 0xfb, 0x53, 0x03, 0x61, 0x82, 0x00, 0x7f, 0x55, 0x00, 0x80, 0x7a, 0xff, 0x2e, 0x57, 0xff, 0x4d, 0x8d, 0x00, 0x65, 0x63, 0xff, 0x87, 0x76, 0xff, 0x4a, 0x2b, 0x00, 0xd8, 0xd3, 0xff, 0xd9, 0xd9, 0xff, 0x23, 0x21, 0x00, 0x30, 0x37, 0x00, 0xad, 0x3d, 0xff, 0x72, 0x25, 0xff, 0x51, 0x64, 0xff, 0x55, 0xc9, 0xfe, 0x7e, 0x1a, 0xff, 0x72, 0xd7, 0xfe, 0x80, 0x7f, 0x0b, 0x87, 0xc7, 0x0e, 0x36, 0xf7, 0x09, 0x80, 0x6e, 0x08, 0x5f, 0x6f, 0x02, 0x8e, 0x0c, 0x01, 0xb2, 0x34, 0x05, 0xee, 0x85, 0x06, 0x5f, 0x60, 0x06, 0x49, 0x1d, 0x04, 0x0f, 0xdc, 0x02, 0x2a, 0x70, 0x01, 0x91, 0xfe, 0x00, 0xe7, 0xa2, 0x01, 0x8f, 0xc5, 0xff, 0x7e, 0xe4, 0xff, 0x78, 0x24, 0x00, 0xeb, 0xf8, 0xfe, 0xd3, 0x64, 0xff, 0x4a, 0xb9, 0xff, 0x8c, 0xd7, 0xff, 0x1c, 0xfc, 0xff, 0x42, 0xd8, 0xff, 0xf4, 0x72, 0xff, 0x87, 0x62, 0xff, 0xd9, 0xbc, 0xff, 0x36, 0xff, 0xfe, 0x4e, 0xb9, 0xfe, 0x7f, 0x26, 0xff, 0x59, 0xe1, 0xfe, 0xf1, 0xe1, 0xfe, 0x33, 0xca, 0xfe, 0xf5, 0x1a, 0x0b, 0x51, 0x60, 0x0e, 0x97, 0xe0, 0x09, 0x4a, 0x06, 0x09, 0x6d, 0x62, 0x05, 0x3a, 0xb9, 0x04, 0x7f, 0x82, 0x06, 0x8e, 0xbd, 0x06, 0xd4, 0x87, 0x06, 0x8b, 0x0e, 0x02, 0x30, 0xae, 0xfe, 0x20, 0x32, 0xff, 0x3c, 0x79, 0x01, 0x68, 0xb7, 0x01, 0x59, 0x24, 0xff, 0x71, 0x24, 0xff, 0xbb, 0x81, 0xff, 0x36, 0x28, 0xff, 0xd3, 0x88, 0xff, 0x83, 0x86, 0xff, 0x6b, 0xce, 0xff, 0xef, 0xa2, 0xff, 0x43, 0x2b, 0xff, 0x84, 0x39, 0xff, 0x13, 0x4c, 0xff, 0xd0, 0xe1, 0xfe, 0x54, 0x5f, 0xfe, 0x47, 0xd2, 0xfe, 0xff, 0xef, 0xfe, 0xa0, 0xd8, 0xfe, 0x52, 0x21, 0xff, 0xb8, 0x89, 0xfe, 0xce, 0x04, 0x0a, 0x48, 0x10, 0x10, 0x7b, 0xf8, 0x0d, 0x21, 0x6a, 0x0b, 0x50, 0xce, 0x06, 0x39, 0xf8, 0x04, 0x32, 0x2a, 0x06, 0x78, 0x91, 0x05, 0x2b, 0x61, 0x02, 0x03, 0xa6, 0xff, 0x2e, 0x43, 0x00, 0xfa, 0xd0, 0xff, 0x93, 0x49, 0x00, 0x8a, 0xfa, 0x00, 0x6b, 0x26, 0xff, 0xec, 0xbc, 0xff, 0x24, 0xd4, 0xff, 0xec, 0xbc, 0xfe, 0xab, 0xb2, 0xff, 0x28, 0xda, 0xff, 0xb3, 0x43, 0xff, 0x00, 0x6e, 0xff, 0x29, 0x9d, 0xff, 0xda, 0x2b, 0xff, 0x48, 0x9b, 0xfe, 0xfa, 0x87, 0xfe, 0xff, 0x93, 0xfe, 0x42, 0x10, 0xff, 0x56, 0x4b, 0xff, 0x6b, 0x17, 0xff, 0x74, 0x1d, 0xff, 0xfa, 0xbd, 0xfe, 0x84, 0xb2, 0x0c, 0xf1, 0x4c, 0x17, 0x8e, 0x54, 0x11, 0x53, 0xab, 0x07, 0x7a, 0x16, 0x03, 0x5f, 0x77, 0x04, 0x62, 0xe9, 0x04, 0x52, 0x99, 0x01, 0x2f, 0x1f, 0x02, 0x83, 0xce, 0x01, 0xfe, 0x3d, 0xff, 0x2b, 0x96, 0xfe, 0x10, 0xd5, 0xff, 0xa8, 0xc7, 0x01, 0xfc, 0x3b, 0x00, 0x98, 0x73, 0xfe, 0x4e, 0x7b, 0xff, 0x25, 0x93, 0xff, 0xb3, 0xe4, 0xfe, 0x9f, 0x31, 0xff, 0xb5, 0xcc, 0xff, 0xed, 0xa0, 0xff, 0xb8, 0x20, 0xff, 0x68, 0xb8, 0xfe, 0x99, 0x62, 0xfe, 0x0f, 0x96, 0xfe, 0x74, 0xfb, 0xfe, 0xa2, 0x2d, 0xff, 0x44, 0x4a, 0xff, 0x49, 0x39, 0xff, 0x53, 0xf6, 0xfe, 0x5d, 0xc1, 0xfe, 0xf9, 0xc4, 0x0e, 0x9e, 0xeb, 0x17, 0xd6, 0x95, 0x0f, 0xc4, 0x44, 0x08, 0xda, 0x34, 0x03, 0xc2, 0x68, 0x00, 0xc2, 0x77, 0x03, 0x88, 0x62, 0x05, 0x15, 0xc8, 0x02, 0xe7, 0xd8, 0xfe, 0xbd, 0xbc, 0xff, 0x2d, 0xf4, 0x00, 0x84, 0xbc, 0xff, 0xe3, 0x81, 0x00, 0xde, 0x66, 0x00, 0x92, 0x7c, 0xff, 0xa3, 0x22, 0xff, 0xc6, 0xbe, 0xfe, 0x12, 0xc6, 0xfe, 0x06, 0x1c, 0xff, 0xbc, 0xc3, 0xff, 0x26, 0x7c, 0xff, 0xb7, 0x2b, 0xff, 0x35, 0xf1, 0xfe, 0xd6, 0x47, 0xfe, 0xe9, 0xbb, 0xfe, 0x58, 0x29, 0xff, 0xbe, 0x0a, 0xff, 0x43, 0x06, 0xff, 0x6e, 0xfe, 0xfe, 0xe4, 0x02, 0xff, 0xbb, 0xd7, 0xfe, 0xba, 0x12, 0x0b, 0xeb, 0xd1, 0x13, 0x15, 0x2b, 0x10, 0xc1, 0xd1, 0x09, 0xd7, 0x52, 0x03, 0x49, 0x3a, 0x01, 0xed, 0x8b, 0x04, 0x9c, 0x41, 0x05, 0x36, 0xf7, 0x02, 0x3c, 0x40, 0x00, 0xcc, 0x36, 0x00, 0x88, 0x6f, 0x01, 0x7a, 0x55, 0x01, 0x64, 0xbb, 0x00, 0xd5, 0xe1, 0xff, 0xbb, 0x17, 0x00, 0x12, 0x9c, 0xff, 0xd1, 0x9a, 0xfe, 0x52, 0xd6, 0xfe, 0xb8, 0xd9, 0xfe, 0x09, 0xe5, 0xfe, 0xb2, 0x6a, 0xff, 0x9d, 0xe8, 0xff, 0xb7, 0x16, 0xff, 0x57, 0x75, 0xfe, 0x6c, 0x4b, 0xff, 0x39, 0x31, 0xff, 0x6c, 0xd7, 0xfe, 0xf6, 0xce, 0xfe, 0x7b, 0xbd, 0xfe, 0x6c, 0xdd, 0xfe, 0x50, 0xb2, 0xfe, 0xdf, 0x90, 0x0a, 0x7b, 0xfe, 0x12, 0xd6, 0x53, 0x0d, 0xd6, 0x46, 0x06, 0xf1, 0xfc, 0x03, 0xef, 0xc2, 0x03, 0xd1, 0x61, 0x04, 0x04, 0x02, 0x04, 0x8c, 0xaf, 0x03, 0x98, 0x86, 0x02, 0x39, 0xc0, 0x00, 0xd1, 0x12, 0x01, 0x55, 0xb3, 0x02, 0xe4, 0x55, 0x02, 0xe6, 0x9c, 0x00, 0xee, 0x2a, 0x00, 0x50, 0xff, 0xff, 0x2f, 0x81, 0xff, 0xa8, 0xae, 0xfe, 0x99, 0x74, 0xfe, 0xa2, 0x3d, 0xff, 0x3d, 0x27, 0xff, 0x4e, 0x22, 0xff, 0x8a, 0x82, 0xff, 0x46, 0x7d, 0xff, 0xfe, 0x78, 0xff, 0x40, 0x57, 0xff, 0xb9, 0x5d, 0xff, 0x25, 0xf6, 0xfe, 0x20, 0x74, 0xfe, 0xd0, 0x7b, 0xfe, 0xcf, 0x8b, 0xfe, 0x37, 0x0c, 0x0a, 0xd6, 0xde, 0x11, 0x50, 0x6b, 0x0b, 0x4c, 0xac, 0x04, 0x02, 0xf3, 0x04, 0x4f, 0xa0, 0x04, 0x39, 0x36, 0x02, 0xc7, 0x8c, 0x02, 0x06, 0x9a, 0x04, 0x24, 0x1f, 0x03, 0x5d, 0x9b, 0x01, 0x9f, 0x8d, 0x02, 0x6d, 0xa1, 0x02, 0x47, 0x21, 0x02, 0x0b, 0x5c, 0x02, 0x4a, 0x0a, 0x02, 0x21, 0x38, 0x00, 0xee, 0x81, 0xff, 0xc0, 0x05, 0x00, 0x83, 0x1b, 0xff, 0x5d, 0x51, 0xfe, 0x93, 0xd9, 0xfe, 0x5b, 0x98, 0xff, 0x9e, 0x5a, 0xff, 0xd2, 0xe3, 0xfe, 0x78, 0xff, 0xff, 0xb5, 0x50, 0x00, 0xa6, 0x57, 0xff, 0xaf, 0x3a, 0xff, 0xb7, 0x04, 0xff, 0xf5, 0x71, 0xfe, 0x53, 0x3c, 0xfe, 0x86, 0x6e, 0x09, 0xc5, 0x66, 0x10, 0x9c, 0x99, 0x0a, 0xee, 0x29, 0x05, 0x02, 0xba, 0x05, 0x26, 0x53, 0x04, 0x40, 0xaf, 0x00, 0x13, 0xbd, 0x01, 0x84, 0x8b, 0x04, 0xd4, 0x89, 0x02, 0xde, 0xdb, 0x00, 0x2b, 0x59, 0x02, 0xa0, 0x8d, 0x03, 0x68, 0x51, 0x03, 0x69, 0x4e, 0x02, 0x60, 0xbe, 0x01, 0x90, 0xad, 0x01, 0xef, 0x46, 0x01, 0x85, 0x24, 0x00, 0xa5, 0x84, 0xff, 0xee, 0x88, 0xff, 0x21, 0x02, 0xff, 0x95, 0xc2, 0xfe, 0x57, 0x12, 0xff, 0x0b, 0x79, 0xff, 0xdd, 0xa8, 0xff, 0xfa, 0x9c, 0xff, 0xc5, 0x07, 0x00, 0x6c, 0xeb, 0xff, 0x1d, 0xff, 0xfe, 0x84, 0xc3, 0xfe, 0x6c, 0xb7, 0xfe, 0xdf, 0x99, 0x09, 0x5b, 0x6e, 0x10, 0xf3, 0x7e, 0x0a, 0x58, 0x0a, 0x05, 0x17, 0xbb, 0x05, 0x98, 0x3f, 0x04, 0x7a, 0x00, 0x00, 0x62, 0x55, 0x01, 0xc7, 0xdc, 0x04, 0x73, 0x4f, 0x02, 0x43, 0x7d, 0xff, 0x76, 0x1e, 0x01, 0xf4, 0x5c, 0x03, 0x62, 0x0e, 0x03, 0xd5, 0x60, 0x02, 0x1b, 0xe7, 0x02, 0xf6, 0xde, 0x01, 0x18, 0xa5, 0x00, 0x73, 0x36, 0x01, 0xa5, 0x6e, 0x01, 0x53, 0x02, 0x00, 0x80, 0x09, 0xff, 0x95, 0xe3, 0xff, 0x77, 0xcc, 0xff, 0x80, 0xc6, 0xfe, 0x35, 0x51, 0xff, 0x1e, 0x32, 0x00, 0xfa, 0xf4, 0xff, 0xc8, 0x62, 0xff, 0x9c, 0x6b, 0xff, 0x83, 0x6a, 0xff, 0x60, 0xcf, 0xfe, 0xe7, 0xa9, 0x09, 0xcf, 0x49, 0x10, 0x2a, 0x82, 0x0a, 0x74, 0x0b, 0x06, 0x1c, 0xbf, 0x06, 0x82, 0x7a, 0x03, 0xf9, 0x7b, 0xfe, 0x84, 0x84, 0x01, 0xca, 0xdd, 0x05, 0x54, 0xe4, 0x01, 0x31, 0x84, 0xfe, 0x3d, 0xad, 0x00, 0x49, 0xb5, 0x02, 0x1b, 0x15, 0x02, 0xdc, 0x6d, 0x01, 0x54, 0x5e, 0x02, 0x6e, 0x19, 0x02, 0x90, 0x00, 0x01, 0x6b, 0xf9, 0x00, 0x77, 0x38, 0x01, 0x96, 0x10, 0x01, 0x85, 0x67, 0x00, 0x0f, 0x00, 0x00, 0x6a, 0x18, 0x00, 0x45, 0x20, 0x00, 0x70, 0xdd, 0xff, 0x35, 0x95, 0xff, 0x58, 0xb1, 0xff, 0x19, 0xc0, 0xff, 0xe7, 0x4f, 0xff, 0xe9, 0xd6, 0xfe, 0x19, 0xfd, 0xfe, 0xcf, 0x40, 0x0a, 0xae, 0x6a, 0x11, 0x70, 0xf9, 0x0a, 0x1e, 0xae, 0x05, 0xf5, 0xa1, 0x06, 0x0f, 0x8c, 0x03, 0xba, 0x3c, 0xfe, 0x00, 0x3b, 0x01, 0x69, 0xd1, 0x05, 0x59, 0xd6, 0x01, 0xd8, 0x2e, 0xfe, 0x8f, 0x3f, 0x00, 0x19, 0x32, 0x02, 0xfa, 0xc3, 0x01, 0x87, 0x19, 0x01, 0x37, 0x5d, 0x01, 0x3e, 0x32, 0x01, 0x0f, 0x52, 0x00, 0x19, 0x3d, 0x00, 0xa4, 0x4b, 0x01, 0x54, 0x79, 0x01, 0x6a, 0x3f, 0x00, 0xd2, 0x3d, 0x00, 0x8f, 0x20, 0x01, 0xf5, 0xba, 0x00, 0x33, 0x51, 0x00, 0xb2, 0xa3, 0x00, 0xe9, 0x4f, 0x00, 0x40, 0x6a, 0xff, 0x53, 0xf0, 0xfe, 0x4e, 0xdc, 0xfe, 0x1a, 0xc5, 0xfe, 0x95, 0x24, 0x0b, 0xa3, 0x6e, 0x12, 0xb0, 0x2d, 0x0b, 0xf2, 0x16, 0x06, 0x85, 0x11, 0x07, 0x8f, 0xea, 0x02, 0xa6, 0x82, 0xfd, 0xd6, 0xa0, 0x01, 0x2a, 0x3f, 0x06, 0x00, 0x62, 0x01, 0x12, 0xbc, 0xfd, 0x77, 0x23, 0x00, 0x46, 0x44, 0x02, 0xbb, 0x6e, 0x01, 0xeb, 0x57, 0x00, 0x35, 0x7a, 0x01, 0xda, 0x69, 0x01, 0xab, 0x61, 0xff, 0x5a, 0xd2, 0xfe, 0x89, 0x3e, 0x00, 0x23, 0x39, 0x01, 0xaf, 0x64, 0x00, 0x22, 0x36, 0x00, 0x72, 0x0c, 0x01, 0xa4, 0x31, 0x01, 0xcb, 0x54, 0x01, 0xd2, 0x38, 0x01, 0x12, 0xde, 0x00, 0x3f, 0x98, 0x00, 0x1c, 0x96, 0xff, 0x92, 0x75, 0xfe, 0x47, 0x3d, 0xfe, 0xfb, 0x6e, 0x0c, 0x16, 0x1c, 0x14, 0xc1, 0x54, 0x0b, 0x46, 0xab, 0x05, 0xd7, 0x23, 0x07, 0x4d, 0xcb, 0x02, 0x6d, 0x4e, 0xfd, 0x0d, 0xac, 0x01, 0x68, 0x1a, 0x06, 0xb3, 0xee, 0x00, 0x3a, 0x8f, 0xfd, 0x52, 0x4d, 0x00, 0xb5, 0x00, 0x02, 0x56, 0x10, 0x01, 0xa6, 0x19, 0x00, 0xa3, 0x11, 0x01, 0x05, 0x8a, 0x01, 0xe5, 0xac, 0xff, 0x63, 0x52, 0xfe, 0xe5, 0xe3, 0xfe, 0x97, 0xef, 0xff, 0xad, 0x05, 0x00, 0x1c, 0xa0, 0xff, 0x2b, 0x73, 0x00, 0x82, 0x8f, 0x01, 0x22, 0x8d, 0x01, 0x51, 0x6f, 0x01, 0x45, 0x9b, 0x01, 0x68, 0x38, 0x01, 0x17, 0x3c, 0x00, 0xff, 0x3a, 0xff, 0x62, 0x8d, 0xfe, 0x33, 0x41, 0x0d, 0x89, 0xa7, 0x15, 0xd6, 0x23, 0x0c, 0xc0, 0x5d, 0x05, 0x18, 0x0f, 0x07, 0x4c, 0xfb, 0x02, 0xaa, 0xc7, 0xfc, 0x18, 0x99, 0x01, 0xf6, 0x9a, 0x06, 0x39, 0x64, 0x00, 0x17, 0xde, 0xfc, 0x32, 0x66, 0x00, 0xc0, 0x19, 0x02, 0x18, 0xec, 0x00, 0xcb, 0xb1, 0xff, 0xc7, 0x6b, 0x00, 0xdb, 0x84, 0x01, 0x6f, 0x4d, 0x00, 0xc0, 0x43, 0xfe, 0x67, 0x43, 0xfe, 0xb4, 0x5c, 0xff, 0xf1, 0x1a, 0xff, 0x57, 0xb8, 0xfe, 0x5f, 0xa8, 0xff, 0x52, 0xba, 0x00, 0x64, 0x7a, 0x01, 0x80, 0xb6, 0x01, 0x67, 0x8f, 0x01, 0x25, 0x8f, 0x01, 0x98, 0xe0, 0x00, 0x61, 0xc2, 0xff, 0x5a, 0x31, 0xff, 0xa1, 0xc1, 0x0e, 0x89, 0xc8, 0x17, 0xf5, 0x68, 0x0c, 0x42, 0x73, 0x04, 0x11, 0x16, 0x07, 0x25, 0x54, 0x03, 0x8c, 0x6e, 0xfc, 0x7b, 0x88, 0x01, 0x9b, 0xd2, 0x06, 0x3d, 0x07, 0x00, 0x08, 0x83, 0xfc, 0x0b, 0x7d, 0x00, 0x20, 0xdc, 0x01, 0xf7, 0x99, 0x00, 0xeb, 0xc2, 0xff, 0x5e, 0x0f, 0x00, 0xa9, 0x34, 0x01, 0x71, 0x86, 0x00, 0xb4, 0x7a, 0xfe, 0xfa, 0x42, 0xfe, 0x50, 0xe3, 0xfe, 0x0e, 0xd2, 0xfe, 0x22, 0x7f, 0xfe, 0x1a, 0xad, 0xfe, 0x87, 0xbc, 0xff, 0x30, 0x0d, 0x01, 0x63, 0x76, 0x01, 0xaa, 0x25, 0x01, 0x1f, 0x7e, 0x01, 0x91, 0x35, 0x01, 0x90, 0xf9, 0xff, 0xc3, 0x9f, 0xff, 0xd7, 0x93, 0x10, 0x3f, 0xf8, 0x19, 0x5d, 0x67, 0x0c, 0xbf, 0xac, 0x03, 0x2b, 0x43, 0x07, 0x3c, 0x29, 0x03, 0xfa, 0xe1, 0xfb, 0xf9, 0x10, 0x02, 0xe2, 0xfe, 0x06, 0xb1, 0x22, 0xff, 0xe5, 0x2d, 0xfc, 0x72, 0xcb, 0x00, 0x6a, 0xfd, 0x01, 0x9a, 0x06, 0x00, 0xcb, 0x25, 0xff, 0x9b, 0xf8, 0xff, 0x3a, 0x10, 0x01, 0xd4, 0x86, 0x00, 0xc4, 0xa2, 0xfe, 0x5f, 0x25, 0xfe, 0x13, 0xb3, 0xfe, 0xad, 0xb7, 0xfe, 0xfb, 0x4a, 0xfe, 0x55, 0x5b, 0xfe, 0x8a, 0x3a, 0xff, 0x6f, 0x4e, 0x00, 0x4b, 0xfb, 0x00, 0x08, 0xac, 0x00, 0xbb, 0xbe, 0x00, 0x38, 0xe5, 0x00, 0xb5, 0x0d, 0x00, 0xd2, 0xaf, 0xff, 0xc4, 0xb1, 0x12, 0x48, 0x68, 0x1c, 0xda, 0x23, 0x0c, 0xed, 0xdc, 0x02, 0x97, 0x9a, 0x07, 0x5f, 0xc6, 0x02, 0x9e, 0x55, 0xfb, 0x78, 0xe6, 0x02, 0xb2, 0x22, 0x07, 0x7d, 0x23, 0xfe, 0xe0, 0x08, 0xfc, 0xd9, 0x27, 0x01, 0x5b, 0x09, 0x02, 0xaa, 0xb1, 0xff, 0x9d, 0xb5, 0xfe, 0xcf, 0xb2, 0xff, 0xec, 0xd2, 0x00, 0x12, 0x63, 0x00, 0x25, 0xc8, 0xfe, 0x72, 0x82, 0xfe, 0xee, 0x98, 0xfe, 0x2c, 0x50, 0xfe, 0x01, 0x33, 0xfe, 0x95, 0x83, 0xfe, 0x33, 0x3f, 0xff, 0xee, 0xae, 0xff, 0xe1, 0x97, 0x00, 0x17, 0x83, 0x00, 0xc6, 0x0f, 0x00, 0x69, 0x6a, 0x00, 0x35, 0x82, 0xff, 0x3b, 0x15, 0xff, 0x16, 0xb1, 0x14, 0xed, 0xcc, 0x1e, 0xbe, 0x0c, 0x0c, 0xdc, 0x2d, 0x02, 0x01, 0x06, 0x08, 0x40, 0x32, 0x02, 0x0a, 0x70, 0xfa, 0x86, 0xf2, 0x03, 0x0e, 0x94, 0x07, 0x72, 0xef, 0xfc, 0x5f, 0xb6, 0xfb, 0x5f, 0x91, 0x01, 0xd4, 0x2e, 0x02, 0x20, 0x77, 0xff, 0xfc, 0x31, 0xfe, 0x48, 0x49, 0xff, 0x58, 0x9a, 0x00, 0x11, 0x40, 0x00, 0x48, 0xa8, 0xfe, 0x2c, 0xa6, 0xfe, 0xcf, 0xb4, 0xfe, 0x90, 0x24, 0xfe, 0xb1, 0xfd, 0xfd, 0x12, 0x66, 0xfe, 0x13, 0x9f, 0xff, 0x03, 0x79, 0xff, 0x7b, 0xcb, 0xff, 0xf8, 0xc6, 0x00, 0x80, 0xff, 0xff, 0x48, 0x7a, 0xff, 0x64, 0x05, 0xff, 0x42, 0x93, 0xfe, 0xfa, 0x8d, 0x16, 0xf2, 0x5f, 0x21, 0x8c, 0x3b, 0x0c, 0xff, 0x38, 0x01, 0x7a, 0x64, 0x08, 0x1b, 0xc8, 0x01, 0xf3, 0x41, 0xf9, 0x84, 0xc9, 0x04, 0x57, 0x22, 0x08, 0x95, 0xda, 0xfb, 0xf7, 0x67, 0xfb, 0x72, 0xdd, 0x01, 0x51, 0x1c, 0x02, 0xc8, 0x60, 0xff, 0xb6, 0xf6, 0xfd, 0x5a, 0x9b, 0xfe, 0x34, 0x2c, 0x00, 0xaf, 0x3e, 0x00, 0x8d, 0x93, 0xfe, 0x5f, 0x9e, 0xfe, 0x44, 0x95, 0xfe, 0x46, 0x05, 0xfe, 0xba, 0xfa, 0xfd, 0x64, 0x2d, 0xfe, 0x88, 0xc4, 0xff, 0x60, 0xcd, 0xff, 0xc9, 0x33, 0xff, 0x3e, 0x5e, 0x00, 0x07, 0x5f, 0x00, 0x00, 0x18, 0xff, 0x8e, 0x73, 0xfe, 0x64, 0x5f, 0xfe, 0xae, 0x0a, 0x18, 0x9f, 0xfb, 0x23, 0xf9, 0xeb, 0x0c, 0x1a, 0x23, 0x00, 0x08, 0x9b, 0x08, 0x52, 0xd7, 0x01, 0xd6, 0x27, 0xf8, 0x76, 0x46, 0x05, 0xc4, 0xbe, 0x08, 0x38, 0x1d, 0xfb, 0x3d, 0x2e, 0xfb, 0x58, 0x44, 0x02, 0x5c, 0x32, 0x02, 0x76, 0xf9, 0xfe, 0xfd, 0xe8, 0xfd, 0x09, 0x72, 0xfe, 0x91, 0x6d, 0xff, 0xb7, 0x09, 0x00, 0xbb, 0x9f, 0xfe, 0x51, 0xa5, 0xfe, 0xef, 0xb0, 0xfe, 0xf8, 0xe8, 0xfd, 0xe7, 0xca, 0xfd, 0x50, 0xe8, 0xfd, 0x81, 0xdb, 0xff, 0x43, 0x8e, 0x00, 0x7e, 0x4d, 0xff, 0xd1, 0x61, 0xff, 0x45, 0x3f, 0x00, 0x76, 0x9e, 0xff, 0x10, 0x2d, 0xfe, 0xaf, 0x26, 0xfe, 0xda, 0x51, 0x1a, 0xd2, 0x56, 0x26, 0x2b, 0xb4, 0x0c, 0x4a, 0xa9, 0xff, 0x06, 0xe4, 0x08, 0x90, 0x16, 0x01, 0xaa, 0x58, 0xf7, 0x57, 0xf9, 0x05, 0x7a, 0x81, 0x08, 0x55, 0x40, 0xfa, 0x66, 0xa5, 0xfb, 0x54, 0x69, 0x02, 0x01, 0x01, 0x02, 0x18, 0x9c, 0xfe, 0x8d, 0xa0, 0xfd, 0xc4, 0xab, 0xfe, 0x9c, 0xba, 0xfe, 0x00, 0x3b, 0xff, 0x1a, 0x9d, 0xfe, 0x77, 0xdf, 0xfe, 0x19, 0xcf, 0xfe, 0xc7, 0xaa, 0xfd, 0x95, 0x83, 0xfd, 0x4d, 0xb1, 0xfd, 0x84, 0xcf, 0xff, 0x25, 0xc7, 0x00, 0x8c, 0xcf, 0xff, 0x88, 0x36, 0xff, 0x5f, 0x47, 0xff, 0x65, 0xbe, 0xff, 0x8b, 0x6b, 0xfe, 0x04, 0x9e, 0xfd, 0x99, 0x1d, 0x1d, 0xbe, 0x37, 0x28, 0xa7, 0xda, 0x0b, 0xab, 0x4c, 0x00, 0x8d, 0x33, 0x09, 0x72, 0xca, 0xff, 0x47, 0x12, 0xf7, 0x7e, 0x90, 0x06, 0xe0, 0x03, 0x08, 0xd1, 0x6b, 0xf9, 0xa1, 0x60, 0xfc, 0xf8, 0xb8, 0x02, 0x5c, 0xc5, 0x01, 0x6c, 0x69, 0xfe, 0x4c, 0x16, 0xfd, 0x5b, 0x34, 0xff, 0x97, 0x66, 0xfe, 0xc4, 0x0c, 0xfe, 0xd5, 0xa7, 0xfe, 0xc4, 0x0b, 0xff, 0x4a, 0x01, 0xff, 0xe8, 0xc4, 0xfd, 0x7d, 0x27, 0xfd, 0x47, 0x89, 0xfd, 0x86, 0x00, 0x00, 0xd3, 0xa5, 0x00, 0x15, 0xd6, 0xff, 0x69, 0x03, 0x00, 0x46, 0xfc, 0xfe, 0xf6, 0xcf, 0xfe, 0x5f, 0x87, 0xfe, 0x55, 0xad, 0xfd, 0xf0, 0x5b, 0x1f, 0xa9, 0x98, 0x29, 0x45, 0xc2, 0x0b, 0xad, 0x58, 0x01, 0x79, 0x4d, 0x09, 0x89, 0x2b, 0xff, 0x2d, 0xbb, 0xf6, 0x57, 0x4d, 0x06, 0x7f, 0xc8, 0x07, 0x26, 0x25, 0xf9, 0xc9, 0xd7, 0xfc, 0x07, 0x9d, 0x02, 0x1e, 0xe5, 0x01, 0x12, 0xb7, 0xfe, 0x8b, 0x34, 0xfc, 0xd5, 0x5f, 0xff, 0xf2, 0x9c, 0xfe, 0xb8, 0x2a, 0xfd, 0xd7, 0x33, 0xfe, 0xcf, 0x15, 0xff, 0xc9, 0x3e, 0xff, 0x44, 0x14, 0xfe, 0x94, 0x47, 0xfd, 0x5a, 0x0c, 0xfd, 0x2b, 0xee, 0xff, 0x4c, 0x00, 0x01, 0x7c, 0x94, 0xff, 0x46, 0x66, 0x00, 0xd7, 0x6b, 0xff, 0x50, 0x24, 0xfe, 0xdf, 0x2a, 0xfe, 0x52, 0xcd, 0xfd, 0x9e, 0x2c, 0x21, 0x0b, 0x6b, 0x2a, 0x90, 0x1e, 0x0c, 0xd4, 0xc5, 0x02, 0xb5, 0x65, 0x09, 0xfe, 0x34, 0xff, 0xa4, 0x1f, 0xf6, 0xfc, 0x43, 0x05, 0xcc, 0xe0, 0x07, 0x90, 0xf2, 0xf8, 0x69, 0x31, 0xfd, 0x0f, 0x92, 0x02, 0xb2, 0x9b, 0x01, 0xdf, 0x55, 0xff, 0xbc, 0xcd, 0xfb, 0x1e, 0xd6, 0xfe, 0x82, 0xd6, 0xfe, 0x45, 0x09, 0xfd, 0xec, 0x37, 0xfd, 0x02, 0x9d, 0xfe, 0x52, 0xe3, 0xff, 0xb2, 0x40, 0xfe, 0xe7, 0x95, 0xfd, 0x19, 0xcb, 0xfc, 0x7a, 0x35, 0xff, 0x57, 0xcf, 0x01, 0x98, 0x9c, 0xff, 0xc2, 0xd1, 0xff, 0x21, 0xe2, 0xff, 0x2a, 0x48, 0xfe, 0x96, 0xe1, 0xfd, 0x8f, 0x5b, 0xfd, 0x3c, 0x4f, 0x23, 0x4d, 0x95, 0x2a, 0xf5, 0xc4, 0x0b, 0x77, 0xa6, 0x04, 0x6f, 0x8c, 0x0a, 0x1e, 0x24, 0xff, 0x75, 0xa8, 0xf4, 0xf6, 0xa5, 0x04, 0x1c, 0x20, 0x08, 0xcd, 0x21, 0xf8, 0x74, 0x81, 0xfd, 0xdc, 0xf8, 0x02, 0x18, 0x13, 0x01, 0x19, 0x60, 0xff, 0x9b, 0x2b, 0xfc, 0x5a, 0x67, 0xfe, 0xec, 0x4e, 0xfe, 0xc0, 0x61, 0xfd, 0x4c, 0x8c, 0xfc, 0xdd, 0x76, 0xfd, 0x92, 0x69, 0x00, 0x55, 0xc6, 0xfe, 0x7e, 0x7f, 0xfd, 0x12, 0x02, 0xfd, 0xba, 0xb8, 0xfe, 0xa8, 0xc6, 0x01, 0xa0, 0x4e, 0x00, 0xf1, 0x2b, 0xff, 0x91, 0x92, 0xff, 0x6c, 0xfe, 0xfe, 0xc4, 0xcf, 0xfd, 0x73, 0xad, 0xfc, 0xf9, 0x87, 0x26, 0xf2, 0x28, 0x2a, 0x19, 0x28, 0x09, 0x4c, 0xa6, 0x07, 0x1a, 0xc2, 0x0d, 0xd7, 0x8a, 0xfd, 0x12, 0x9c, 0xf2, 0xec, 0x87, 0x05, 0xb1, 0x04, 0x08, 0x4c, 0xa7, 0xf6, 0xdf, 0xf3, 0xfd, 0xb1, 0x8f, 0x03, 0x28, 0xd4, 0x00, 0x60, 0xdd, 0xfe, 0xe4, 0x99, 0xfc, 0xb5, 0xd1, 0xfe, 0x8e, 0x50, 0xfd, 0x91, 0x51, 0xfd, 0xdc, 0xc1, 0xfc, 0x14, 0x5d, 0xfc, 0x37, 0xfd, 0xff, 0xbe, 0xa7, 0xff, 0x03, 0x98, 0xfd, 0x01, 0x18, 0xfd, 0x72, 0x1f, 0xff, 0x28, 0x26, 0x01, 0xfe, 0x89, 0x00, 0xc6, 0x86, 0xff, 0x43, 0x21, 0xff, 0x53, 0x12, 0xff, 0x01, 0xdd, 0xfd, 0xa4, 0x8c, 0xfc, 0xe6, 0x61, 0x29, 0xa5, 0x37, 0x29, 0x7d, 0xf1, 0x05, 0x25, 0x0c, 0x0c, 0x61, 0x71, 0x12, 0x33, 0x62, 0xfa, 0xb3, 0x3c, 0xf0, 0xce, 0x52, 0x08, 0x4c, 0xe6, 0x07, 0x97, 0xcc, 0xf3, 0xa8, 0x5f, 0xfe, 0x21, 0xe4, 0x04, 0xb1, 0xe5, 0x00, 0x92, 0x20, 0xfe, 0xae, 0x82, 0xfc, 0x61, 0xaf, 0xff, 0x33, 0x06, 0xfd, 0x8f, 0xe5, 0xfc, 0x26, 0xfe, 0xfc, 0xec, 0xb5, 0xfb, 0x39, 0xbf, 0xfe, 0xda, 0x7e, 0x00, 0x21, 0xb5, 0xfe, 0x74, 0x69, 0xfc, 0x80, 0xab, 0xff, 0x91, 0x30, 0x01, 0x89, 0x07, 0x00, 0x6e, 0x92, 0x00, 0xa3, 0xe8, 0xfe, 0x68, 0x5f, 0xfe, 0x02, 0x51, 0xfe, 0x72, 0x1c, 0xfd, 0xc5, 0x7d, 0x2a, 0x46, 0x22, 0x28, 0x47, 0x00, 0x04, 0xfb, 0xad, 0x10, 0x07, 0x37, 0x17, 0x5c, 0xcd, 0xf6, 0xf5, 0x09, 0xee, 0x07, 0xd8, 0x0c, 0x99, 0xcb, 0x07, 0x48, 0xe1, 0xee, 0x82, 0x92, 0xfe, 0x04, 0x6a, 0x07, 0x40, 0x1b, 0x01, 0xd2, 0xfb, 0xfc, 0x0d, 0xd3, 0xfb, 0x14, 0xb6, 0x00, 0x99, 0x6d, 0xfd, 0x28, 0x5b, 0xfc, 0xaf, 0x0a, 0xfd, 0x9d, 0x5b, 0xfb, 0x8c, 0x26, 0xfd, 0x57, 0x74, 0x00, 0x87, 0x76, 0x00, 0x11, 0x02, 0xfc, 0xa0, 0x79, 0xff, 0x69, 0xcc, 0x01, 0x68, 0x70, 0xff, 0xf3, 0x39, 0x01, 0xf5, 0x57, 0xff, 0x79, 0xba, 0xfd, 0x10, 0x75, 0xfe, 0x5b, 0xa0, 0xfd, 0xa9, 0x02, 0x2d, 0xc0, 0x8b, 0x2a, 0xba, 0x2d, 0x00, 0xb6, 0x72, 0x0e, 0xe1, 0x31, 0x1c, 0xd8, 0xdc, 0xf8, 0x00, 0x5d, 0xeb, 0x23, 0x64, 0x0d, 0x16, 0x5e, 0x08, 0x1c, 0xbb, 0xeb, 0xe4, 0x38, 0xfe, 0xdb, 0x4d, 0x09, 0x61, 0xd0, 0x00, 0x40, 0xd0, 0xfb, 0x86, 0x6f, 0xfb, 0xbb, 0xc8, 0x01, 0x74, 0x68, 0xfd, 0x5e, 0x3d, 0xfb, 0x2d, 0x64, 0xfd, 0x0f, 0xbb, 0xfb, 0x0e, 0xe4, 0xfb, 0xb6, 0xda, 0xfe, 0x4c, 0x92, 0x01, 0x36, 0x34, 0xfd, 0x3b, 0x97, 0xfe, 0x2d, 0x15, 0x02, 0x65, 0xae, 0xff, 0x86, 0x19, 0x01, 0x87, 0xcb, 0xff, 0x83, 0x8b, 0xfd, 0x42, 0x60, 0xfe, 0x23, 0xaa, 0xfd, 0x24, 0x4e, 0x31, 0xc9, 0x16, 0x2d, 0xc6, 0x0c, 0xfc, 0xba, 0xea, 0x09, 0x89, 0x95, 0x1f, 0xfe, 0x33, 0xfd, 0x97, 0xf3, 0xe9, 0xd6, 0xba, 0x0c, 0x4d, 0x1d, 0x08, 0x62, 0xfc, 0xe9, 0xd6, 0xf1, 0xfd, 0x89, 0x91, 0x0a, 0x48, 0x0b, 0x01, 0x27, 0x2e, 0xfa, 0x69, 0x2c, 0xfb, 0x2d, 0x02, 0x03, 0x61, 0x7a, 0xfd, 0xf4, 0x2d, 0xfa, 0x0d, 0x43, 0xfd, 0x9c, 0x88, 0xfc, 0xca, 0x80, 0xfb, 0xdb, 0x1b, 0xfd, 0x63, 0x4b, 0x01, 0x52, 0x01, 0xff, 0x3f, 0x8a, 0xfe, 0x9a, 0x8b, 0x01, 0xc3, 0x95, 0x00, 0x03, 0x1b, 0x01, 0x2a, 0xc6, 0xff, 0x56, 0xfe, 0xfd, 0x82, 0x7a, 0xfe, 0x4a, 0x47, 0xfd, 0x1c, 0xa0, 0x35, 0xf9, 0xeb, 0x2f, 0x5b, 0xd8, 0xf7, 0x4e, 0x49, 0x05, 0x92, 0xea, 0x20, 0xd2, 0xae, 0x01, 0xc7, 0x0e, 0xeb, 0xda, 0x23, 0x0b, 0xf5, 0x5e, 0x07, 0xe3, 0x4c, 0xe9, 0x4a, 0x4d, 0xfd, 0x27, 0x88, 0x0b, 0x5e, 0x89, 0x01, 0x81, 0x96, 0xf8, 0xbe, 0xaf, 0xfa, 0x78, 0xea, 0x03, 0x84, 0x8a, 0xfd, 0x8f, 0x5d, 0xf9, 0xd4, 0xcf, 0xfc, 0xd4, 0x12, 0xfd, 0xf4, 0xba, 0xfb, 0x1f, 0xad, 0xfb, 0x5a, 0xf5, 0xff, 0xf2, 0x90, 0x00, 0x3a, 0x60, 0xff, 0xef, 0x7b, 0x00, 0xe6, 0x68, 0x01, 0xf2, 0xa6, 0x01, 0x3b, 0x91, 0xff, 0xfa, 0xbf, 0xfe, 0x9a, 0xb2, 0xfe, 0xf7, 0x87, 0xfc, 0x34, 0x94, 0x39, 0xca, 0x59, 0x33, 0xb4, 0xe8, 0xf4, 0xf5, 0xfc, 0xff, 0x77, 0x78, 0x20, 0xcd, 0x4f, 0x06, 0x58, 0x7c, 0xed, 0xee, 0xb3, 0x09, 0x5e, 0xff, 0x05, 0xe2, 0x14, 0xe9, 0xd7, 0xd7, 0xfc, 0xe3, 0xa8, 0x0b, 0x9c, 0x79, 0x02, 0x44, 0x5f, 0xf7, 0x22, 0xe7, 0xf9, 0x98, 0xb6, 0x04, 0x2a, 0x89, 0xfd, 0xdc, 0x24, 0xf9, 0xe6, 0x3b, 0xfc, 0xd7, 0x48, 0xfd, 0x41, 0x86, 0xfc, 0x27, 0xd7, 0xfa, 0x5f, 0x4b, 0xfe, 0x30, 0x1e, 0x01, 0x4d, 0xe4, 0x00, 0x6e, 0xd5, 0xff, 0x40, 0x7d, 0x01, 0x2f, 0xa7, 0x02, 0xbf, 0xc7, 0xff, 0x8a, 0x74, 0xff, 0xe5, 0xcd, 0xfe, 0x29, 0xe1, 0xfb, 0x4c, 0x29, 0x3d, 0x2f, 0x13, 0x37, 0xfd, 0x02, 0xf3, 0x50, 0x5e, 0xfa, 0xfa, 0xca, 0x1e, 0x79, 0xfa, 0x09, 0x80, 0x78, 0xf0, 0x3e, 0x96, 0x09, 0xbd, 0xe7, 0x03, 0xcb, 0x91, 0xe8, 0x7f, 0x42, 0xfd, 0x25, 0xfe, 0x0a, 0xe0, 0x1c, 0x03, 0x16, 0xed, 0xf6, 0x32, 0xdf, 0xf8, 0xce, 0xf2, 0x04, 0xfa, 0x79, 0xfd, 0x5f, 0x41, 0xf9, 0xa1, 0x9e, 0xfb, 0x9c, 0x2c, 0xfd, 0x13, 0x4e, 0xfd, 0xcc, 0xb2, 0xfa, 0xf3, 0x0d, 0xfd, 0x24, 0x44, 0x00, 0x7b, 0x43, 0x02, 0xfe, 0x44, 0x00, 0xe0, 0xe1, 0x00, 0xba, 0x8d, 0x03, 0x3d, 0x9a, 0x00, 0x1a, 0xe2, 0xff, 0xb5, 0x9f, 0xfe, 0x3f, 0x87, 0xfb, 0x9f, 0xf3, 0x3f, 0xa0, 0x58, 0x3b, 0xbc, 0xdb, 0xf1, 0xf6, 0xca, 0xf4, 0x63, 0x9b, 0x1c, 0x9e, 0x22, 0x0c, 0xe8, 0x49, 0xf3, 0xe3, 0x0a, 0x0b, 0x7e, 0xc9, 0x01, 0xfc, 0x3d, 0xe7, 0x2b, 0x9d, 0xfe, 0xfb, 0x0a, 0x0a, 0x8f, 0xc0, 0x02, 0xc3, 0x6c, 0xf7, 0x71, 0xf1, 0xf7, 0x81, 0x48, 0x04, 0x3b, 0x50, 0xfd, 0x49, 0xb8, 0xf9, 0x37, 0x0f, 0xfb, 0xf0, 0xc7, 0xfc, 0x32, 0x07, 0xfe, 0x8f, 0xff, 0xfa, 0x76, 0x78, 0xfc, 0xac, 0xb2, 0xfe, 0x93, 0xba, 0x02, 0x44, 0x51, 0x01, 0xb3, 0x6b, 0x00, 0x5f, 0x35, 0x04, 0x3a, 0xaa, 0x01, 0x2a, 0x1e, 0x00, 0xb1, 0x5a, 0xfe, 0x36, 0x88, 0xfb, 0x65, 0xae, 0x43, 0x43, 0x2d, 0x3f, 0x5d, 0x6a, 0xef, 0x51, 0x4c, 0xf1, 0x19, 0xb8, 0x1a, 0xb5, 0x76, 0x0b, 0xaa, 0x03, 0xf6, 0x93, 0x07, 0x0e, 0xd2, 0xc1, 0xff, 0x25, 0x2b, 0xe5, 0xb2, 0xde, 0x00, 0x38, 0x71, 0x09, 0x6d, 0x25, 0x01, 0x3f, 0x7f, 0xf8, 0x53, 0xb9, 0xf7, 0x51, 0xfb, 0x02, 0x71, 0xa5, 0xfc, 0x37, 0xa0, 0xfa, 0xce, 0xd0, 0xfa, 0x97, 0x0e, 0xfc, 0xcb, 0x18, 0xff, 0x6e, 0x5a, 0xfb, 0x2e, 0x47, 0xfc, 0xf3, 0x94, 0xfd, 0x76, 0x3c, 0x02, 0xc3, 0x38, 0x02, 0x49, 0x66, 0x00, 0x58, 0x1f, 0x05, 0xb5, 0xd4, 0x02, 0x69, 0xd3, 0xff, 0xa3, 0x45, 0xfe, 0xb9, 0xc4, 0xfb, 0xfc, 0xa2, 0x4a, 0x3f, 0x0b, 0x40, 0x04, 0x92, 0xe9, 0x6d, 0x8a, 0xf2, 0xaa, 0xff, 0x18, 0xa5, 0xec, 0x06, 0x3a, 0xad, 0xf9, 0xde, 0x5e, 0x11, 0xf1, 0xcf, 0xfc, 0xad, 0xb1, 0xe3, 0xed, 0xc4, 0x03, 0x66, 0xbc, 0x08, 0x79, 0x83, 0xfe, 0xe6, 0xcb, 0xf9, 0x82, 0xfb, 0xf7, 0xd1, 0x17, 0x01, 0xcf, 0xd2, 0xfb, 0x0a, 0x3f, 0xfb, 0xe3, 0xe6, 0xfa, 0x86, 0x85, 0xfb, 0x59, 0xf9, 0xff, 0x59, 0xcd, 0xfb, 0x59, 0x0e, 0xfc, 0x26, 0x1f, 0xfd, 0xf4, 0x6e, 0x01, 0xda, 0x62, 0x02, 0x45, 0x86, 0x00, 0x4d, 0x66, 0x06, 0x7b, 0x38, 0x04, 0xd0, 0xc3, 0xfe, 0xd4, 0x24, 0xfe, 0x06, 0x3f, 0xfc, 0x59, 0x5c, 0x51, 0x53, 0xcd, 0x40, 0xa5, 0xe4, 0xe3, 0x04, 0x18, 0xf5, 0x5f, 0xbf, 0x16, 0x19, 0xa0, 0x01, 0x9c, 0x3f, 0xfd, 0x33, 0x93, 0x13, 0x01, 0x37, 0xfb, 0x80, 0xfe, 0xe2, 0x19, 0xb4, 0x05, 0xdd, 0x09, 0x08, 0xce, 0xec, 0xfb, 0x40, 0xc0, 0xfb, 0x96, 0xb9, 0xf7, 0xfa, 0xda, 0xfe, 0x04, 0xda, 0xfb, 0x4a, 0x3a, 0xfb, 0x39, 0x50, 0xfb, 0x44, 0xb6, 0xfb, 0xdf, 0x0e, 0x00, 0xc7, 0x8e, 0xfc, 0xe5, 0x48, 0xfc, 0xea, 0x6b, 0xfc, 0xa3, 0x01, 0x01, 0xe0, 0x3f, 0x02, 0x46, 0x2a, 0x00, 0x2e, 0x04, 0x08, 0x0e, 0xef, 0x05, 0x9c, 0x85, 0xfd, 0xb0, 0xa9, 0xfd, 0xec, 0xe3, 0xfc, 0x22, 0x81, 0x56, 0xd8, 0x2c, 0x42, 0xfb, 0x0a, 0xe0, 0x2f, 0x5b, 0xf7, 0x33, 0x82, 0x14, 0x56, 0x96, 0xfc, 0x83, 0xc5, 0xff, 0xa9, 0xf4, 0x14, 0x3e, 0x01, 0xfb, 0xe8, 0x81, 0xe3, 0xa7, 0x51, 0x06, 0xe4, 0x0e, 0x07, 0x0c, 0x63, 0xfa, 0x54, 0x8a, 0xfd, 0x6e, 0x2e, 0xf7, 0x05, 0xc6, 0xfc, 0xbc, 0x22, 0xfc, 0x3f, 0x80, 0xfb, 0xe7, 0xbe, 0xfb, 0x98, 0xf7, 0xfb, 0xf6, 0x09, 0x00, 0x2f, 0x4b, 0xfd, 0x08, 0xf9, 0xfc, 0xf3, 0xad, 0xfb, 0xc6, 0xb9, 0x00, 0x5e, 0x86, 0x02, 0x15, 0x4e, 0xff, 0x89, 0x16, 0x09, 0x4e, 0xe6, 0x07, 0x1e, 0xce, 0xfc, 0x99, 0xb8, 0xfc, 0x2b, 0x48, 0xfd, 0x36, 0xa9, 0x59, 0xd1, 0x0f, 0x44, 0x65, 0x87, 0xde, 0x3f, 0x7f, 0xf8, 0x15, 0x0d, 0x12, 0xd6, 0x02, 0xf8, 0xf2, 0x9c, 0x00, 0x77, 0x8f, 0x15, 0x23, 0xb2, 0xfb, 0xfc, 0x98, 0xe4, 0xb7, 0xc3, 0x05, 0x45, 0xaf, 0x05, 0xc0, 0x6b, 0xf9, 0x0e, 0xd8, 0xfe, 0x72, 0xa6, 0xf6, 0xf3, 0xa7, 0xfa, 0x64, 0x4a, 0xfc, 0x5c, 0x7e, 0xfc, 0x2d, 0x83, 0xfb, 0xb5, 0xa4, 0xfb, 0x0c, 0xa3, 0x00, 0x23, 0x53, 0xfd, 0xba, 0xbf, 0xfd, 0x3e, 0x6b, 0xfb, 0x10, 0xea, 0xff, 0x45, 0xa0, 0x03, 0x69, 0x37, 0xfe, 0xe3, 0x10, 0x08, 0xab, 0x7c, 0x09, 0x1f, 0x6f, 0xfd, 0x58, 0x56, 0xfb, 0xe3, 0xa8, 0xfc, 0x94, 0xf3, 0x5a, 0xa1, 0x16, 0x46, 0xe5, 0xb8, 0xdf, 0x26, 0xf3, 0xf8, 0x1d, 0x68, 0x0f, 0xf7, 0x42, 0xf4, 0xf8, 0xfa, 0xff, 0x44, 0xb0, 0x15, 0x63, 0x0b, 0xfd, 0x7b, 0x20, 0xe6, 0x3c, 0xdf, 0x04, 0xf7, 0x06, 0x04, 0xa6, 0xc0, 0xf8, 0x59, 0x04, 0x00, 0xc3, 0x6b, 0xf6, 0x6a, 0xe4, 0xf8, 0xe9, 0x8b, 0xfc, 0xc0, 0xca, 0xfd, 0xec, 0xd3, 0xfa, 0x8f, 0xfa, 0xfa, 0xb2, 0xe3, 0x01, 0x4e, 0xd8, 0xfc, 0xfc, 0x57, 0xfe, 0x8a, 0x56, 0xfc, 0x3b, 0xc5, 0xfe, 0x62, 0x0e, 0x05, 0x03, 0x66, 0xfd, 0xd5, 0xc2, 0x04, 0xe8, 0x4d, 0x0a, 0xee, 0xa5, 0xff, 0x6e, 0x80, 0xfa, 0x51, 0x89, 0xfb, 0xb6, 0x34, 0x5a, 0xb2, 0xbc, 0x48, 0x03, 0x4f, 0xe3, 0xd9, 0xec, 0xf8, 0x9c, 0x79, 0x0c, 0xa3, 0x67, 0xf1, 0xcd, 0x5d, 0xfe, 0x23, 0xcb, 0x14, 0xa1, 0x59, 0xff, 0xe0, 0xc3, 0xe7, 0xa6, 0xb6, 0x03, 0x94, 0xa3, 0x02, 0xa3, 0xb0, 0xf7, 0xf7, 0x9e, 0x01, 0xf6, 0xcb, 0xf6, 0x83, 0x93, 0xf7, 0xfa, 0xd7, 0xfc, 0xdf, 0x96, 0xfe, 0x18, 0x73, 0xfa, 0x18, 0xfd, 0xf9, 0xa3, 0x6b, 0x03, 0xc6, 0x63, 0xfc, 0x48, 0x59, 0xfe, 0xbb, 0x16, 0xff, 0xcc, 0x4f, 0xfd, 0x51, 0x09, 0x05, 0x96, 0xbe, 0xfd, 0x4c, 0xc5, 0x00, 0x84, 0x20, 0x09, 0xba, 0x86, 0x02, 0x89, 0x02, 0xfc, 0xac, 0x26, 0xfa, 0x62, 0x30, 0x59, 0x15, 0xb7, 0x49, 0x38, 0x8d, 0xe8, 0xe5, 0xaa, 0xf9, 0x0b, 0xd1, 0x08, 0x58, 0xa2, 0xef, 0x82, 0x75, 0xfb, 0xc1, 0x91, 0x13, 0x4a, 0xe7, 0x01, 0x0e, 0xc7, 0xe8, 0xa3, 0x4e, 0x03, 0x62, 0xf5, 0x00, 0xfe, 0x88, 0xf6, 0x3a, 0xbc, 0x03, 0x02, 0xbb, 0xf7, 0x95, 0x8f, 0xf6, 0x08, 0xa5, 0xfc, 0x3b, 0x3b, 0xff, 0xef, 0x11, 0xfa, 0x53, 0x36, 0xf9, 0x74, 0xc6, 0x04, 0x83, 0xe8, 0xfb, 0xac, 0xea, 0xfe, 0x08, 0x0e, 0x02, 0x26, 0xdc, 0xfa, 0x73, 0xf3, 0x03, 0xbf, 0x89, 0xff, 0x3c, 0x0e, 0xfd, 0xd0, 0xf7, 0x05, 0x6c, 0xa4, 0x05, 0x71, 0xfa, 0xfe, 0xec, 0x06, 0xf9, 0x8b, 0x26, 0x57, 0xf2, 0x6e, 0x4a, 0x24, 0x82, 0xee, 0x1e, 0x57, 0xfa, 0x88, 0xbf, 0x05, 0xe9, 0xd2, 0xed, 0xe7, 0x67, 0xf7, 0xc8, 0x77, 0x12, 0x84, 0xf6, 0x03, 0x61, 0x2f, 0xe9, 0x47, 0x5d, 0x03, 0xeb, 0x27, 0xff, 0xc6, 0x92, 0xf5, 0x04, 0x6a, 0x06, 0x0c, 0x99, 0xf8, 0x76, 0xa5, 0xf5, 0xa9, 0x13, 0xfc, 0xdd, 0x05, 0xff, 0xcd, 0x9f, 0xfa, 0x06, 0x32, 0xf8, 0x53, 0x46, 0x05, 0x44, 0x6c, 0xfd, 0x18, 0xf7, 0xfd, 0x3b, 0x12, 0x03, 0x97, 0x29, 0xfa, 0x97, 0x88, 0x01, 0x58, 0x32, 0x01, 0xb0, 0xf0, 0xfb, 0x4d, 0xd8, 0x01, 0xed, 0x52, 0x06, 0x35, 0xfc, 0x02, 0x2b, 0x7f, 0xfa, 0xb0, 0xbd, 0x54, 0x78, 0x27, 0x4b, 0xea, 0xa8, 0xf3, 0x28, 0xa1, 0xfc, 0x75, 0x06, 0x04, 0x81, 0xcb, 0xea, 0x9c, 0x76, 0xf4, 0x72, 0xfb, 0x10, 0x7c, 0x0d, 0x05, 0x58, 0x5c, 0xea, 0xe4, 0x45, 0x03, 0x57, 0x89, 0xfe, 0x63, 0x39, 0xf5, 0xfc, 0x16, 0x09, 0xf8, 0xf4, 0xf9, 0xee, 0x5f, 0xf4, 0x41, 0xe0, 0xfb, 0xa9, 0x9b, 0xfe, 0x8e, 0x62, 0xfb, 0x4e, 0x8c, 0xf8, 0x02, 0x68, 0x05, 0xf7, 0x32, 0xfe, 0x4b, 0x3d, 0xfc, 0x44, 0xd2, 0x03, 0x2a, 0xaf, 0xfa, 0x5b, 0x93, 0xfe, 0xb9, 0x52, 0x03, 0xf0, 0x80, 0xfd, 0xb4, 0x52, 0xfd, 0x92, 0x9b, 0x05, 0x88, 0x55, 0x07, 0xf8, 0x2a, 0xfc, 0x99, 0x5d, 0x51, 0x89, 0x42, 0x4c, 0x2f, 0x65, 0xf8, 0xda, 0xce, 0xfe, 0x6b, 0xbe, 0x03, 0xf3, 0x4f, 0xe7, 0x5f, 0x79, 0xf1, 0x84, 0x14, 0x0f, 0x45, 0x36, 0x05, 0xca, 0x45, 0xec, 0x91, 0x12, 0x03, 0x11, 0x63, 0xfe, 0xa2, 0xbc, 0xf5, 0x43, 0x1a, 0x0b, 0x59, 0xdb, 0xfa, 0x33, 0xad, 0xf3, 0x64, 0x5d, 0xfb, 0x9d, 0x9d, 0xfd, 0x15, 0x4f, 0xfe, 0x52, 0xaf, 0xf8, 0xc7, 0x4b, 0x02, 0x12, 0xc3, 0xff, 0x81, 0x74, 0xfb, 0xfa, 0x1a, 0x02, 0xff, 0xd6, 0xfc, 0xb9, 0x20, 0xfe, 0xf5, 0xfb, 0x01, 0xec, 0xe4, 0x00, 0xa0, 0xa4, 0xfd, 0x8b, 0xd6, 0x00, 0xa9, 0xa2, 0x07, 0x51, 0xea, 0xff, 0x05, 0xab, 0x4e, 0x5b, 0xa6, 0x4b, 0x1a, 0xba, 0xfc, 0x9d, 0x03, 0x01, 0xcd, 0x9f, 0x03, 0xd0, 0xf1, 0xe4, 0x86, 0xe0, 0xed, 0x74, 0x7c, 0x0c, 0x89, 0x16, 0x05, 0x9d, 0xf1, 0xee, 0x22, 0xf8, 0x02, 0x85, 0x5b, 0xfe, 0xc5, 0xeb, 0xf6, 0x4a, 0x44, 0x0c, 0xd1, 0xdb, 0xfb, 0x0f, 0xde, 0xf1, 0xcf, 0x25, 0xfc, 0x59, 0xd0, 0xfe, 0x68, 0xcb, 0xfd, 0x02, 0x81, 0xf8, 0x1d, 0x35, 0x00, 0x37, 0x33, 0xff, 0x0b, 0xae, 0xfb, 0xd4, 0xb6, 0x01, 0x60, 0x0c, 0xfe, 0xde, 0x4f, 0xfe, 0x8c, 0x33, 0x01, 0x45, 0x9c, 0x04, 0x9f, 0x4d, 0xff, 0x6f, 0x5c, 0xfa, 0xf7, 0x56, 0x06, 0xd6, 0x12, 0x04, 0x37, 0x15, 0x4d, 0xc9, 0x85, 0x49, 0xb4, 0x88, 0xff, 0xa7, 0x80, 0x04, 0x6a, 0x6a, 0x03, 0x45, 0xd4, 0xe2, 0xb8, 0x25, 0xeb, 0x41, 0xd0, 0x08, 0x60, 0xdf, 0x04, 0x64, 0xbe, 0xf3, 0x7c, 0x28, 0x02, 0x66, 0xfd, 0xfc, 0x7f, 0x1a, 0xfb, 0x21, 0xa6, 0x0b, 0x47, 0x58, 0xfa, 0xe0, 0xb7, 0xf4, 0xfc, 0x90, 0xfc, 0xc5, 0xa4, 0xfc, 0xfe, 0x65, 0xfe, 0x7b, 0x5f, 0xf8, 0xf1, 0xcd, 0xfc, 0x7d, 0x7d, 0xff, 0xeb, 0x13, 0xfe, 0x66, 0x59, 0x00, 0x4c, 0x76, 0xfd, 0xc0, 0x52, 0x02, 0x1a, 0x7d, 0x01, 0x17, 0x27, 0x02, 0x46, 0x18, 0x03, 0xf5, 0x42, 0xfa, 0x60, 0x85, 0x00, 0x3a, 0xa7, 0x03, 0x77, 0x7b, 0x4b, 0x5d, 0x7d, 0x47, 0x65, 0x46, 0x01, 0xb3, 0xb5, 0x07, 0xec, 0x82, 0x03, 0x23, 0x52, 0xe1, 0xda, 0xde, 0xe7, 0x72, 0x46, 0x05, 0x83, 0x4d, 0x06, 0xbc, 0x78, 0xf7, 0xdd, 0xc4, 0x01, 0x18, 0x77, 0xfc, 0xa4, 0xdf, 0xfc, 0x10, 0xf2, 0x0b, 0x59, 0x0b, 0xfb, 0x90, 0x75, 0xf5, 0xe8, 0xe4, 0xfb, 0x2c, 0xd4, 0xfb, 0x3b, 0x6e, 0xfd, 0xa8, 0x2d, 0xf7, 0xea, 0xc7, 0xfc, 0x07, 0x58, 0x00, 0x91, 0x1c, 0xfd, 0x8c, 0x83, 0x01, 0x90, 0xe7, 0xff, 0x28, 0xbc, 0x01, 0xcc, 0x21, 0x01, 0xd9, 0x6e, 0x02, 0x9b, 0x77, 0x05, 0x05, 0x3d, 0xfb, 0x46, 0x7d, 0xfb, 0x4f, 0xaa, 0x00, 0x61, 0xcc, 0x4b, 0xfc, 0xe3, 0x42, 0x75, 0xd7, 0x01, 0x4d, 0x73, 0x0c, 0xa0, 0xce, 0x01, 0xbe, 0xa2, 0xdf, 0xb2, 0x7c, 0xe7, 0xb3, 0x84, 0x01, 0x3a, 0xbe, 0x06, 0xb0, 0xc9, 0xfd, 0x89, 0xdd, 0xff, 0x3b, 0x89, 0xf9, 0x37, 0x92, 0x02, 0x3f, 0x7d, 0x0b, 0x75, 0xb7, 0xf8, 0x0e, 0x4f, 0xf8, 0x60, 0xd2, 0xfa, 0xc3, 0xa4, 0xf8, 0x00, 0xd0, 0xfd, 0xa5, 0x12, 0xf9, 0x1d, 0x3c, 0xfb, 0xce, 0xa3, 0xff, 0x48, 0x3e, 0x00, 0x32, 0x77, 0x02, 0x68, 0x97, 0xfe, 0xde, 0x08, 0x01, 0xc6, 0x65, 0x03, 0xaa, 0xc2, 0x03, 0x42, 0xed, 0x02, 0x08, 0xe1, 0xfc, 0x16, 0x69, 0xfc, 0x77, 0x7c, 0xfb, 0x9e, 0xc4, 0x4a, 0x00, 0x91, 0x3e, 0xc0, 0x2d, 0x02, 0x1e, 0xcc, 0x10, 0x13, 0xf4, 0xff, 0xc4, 0xbf, 0xde, 0xd4, 0x22, 0xe8, 0xdf, 0x21, 0xfe, 0x84, 0x65, 0x07, 0x3b, 0x0d, 0x02, 0xc2, 0x7d, 0xff, 0x00, 0xaa, 0xf7, 0x11, 0x71, 0x04, 0xd0, 0x0a, 0x0c, 0xd0, 0xfa, 0xf7, 0x20, 0xac, 0xf8, 0x22, 0x2f, 0xf8, 0x83, 0x58, 0xf8, 0x7f, 0x55, 0x00, 0x28, 0x1f, 0xf7, 0x43, 0x10, 0xfb, 0x4a, 0x73, 0x03, 0xdd, 0x71, 0xff, 0xe0, 0x23, 0x00, 0x7f, 0x97, 0x00, 0x88, 0xa1, 0x01, 0xf3, 0x51, 0x02, 0x44, 0xc8, 0x04, 0x80, 0x49, 0x02, 0x37, 0xce, 0xfc, 0x8b, 0xae, 0xfe, 0x65, 0xf3, 0xf8, 0xa1, 0x07, 0x47, 0x58, 0x39, 0x3a, 0xaf, 0xed, 0x05, 0x33, 0x00, 0x14, 0x2f, 0x13, 0xfb, 0xe9, 0x8c, 0xe2, 0xbf, 0x34, 0xec, 0xcd, 0xad, 0xf4, 0x24, 0x58, 0x08, 0x63, 0x1a, 0x0c, 0x38, 0x1c, 0xfb, 0x67, 0x16, 0xf3, 0xb2, 0x51, 0x09, 0x3d, 0xca, 0x0b, 0x92, 0xff, 0xf5, 0xae, 0x43, 0xf9, 0x77, 0xa0, 0xf7, 0x0a, 0x57, 0xf8, 0xa3, 0xbe, 0x00, 0xf0, 0x81, 0xf8, 0x2b, 0x2e, 0xfc, 0x58, 0x30, 0x03, 0xd1, 0x16, 0xfe, 0xee, 0x39, 0x00, 0x3c, 0xe1, 0x02, 0x6b, 0x2d, 0x00, 0xd9, 0x97, 0x00, 0x08, 0x9c, 0x06, 0x49, 0x5a, 0x03, 0x57, 0x8e, 0xfb, 0x12, 0xdd, 0xfe, 0x82, 0xcb, 0xfa, 0x1d, 0x6d, 0x47, 0xd1, 0x85, 0x37, 0x7c, 0xa0, 0x04, 0xa5, 0xb1, 0x10, 0xe9, 0x35, 0xf8, 0x38, 0x8a, 0xe9, 0xf5, 0x74, 0xef, 0xbd, 0x27, 0xf0, 0x58, 0x60, 0x09, 0x96, 0xdd, 0x0e, 0xb1, 0xb1, 0xf9, 0xa4, 0xc1, 0xf2, 0x43, 0xd4, 0x09, 0x17, 0xc4, 0x09, 0x77, 0x3d, 0xf6, 0x6e, 0xfd, 0xfa, 0x09, 0xa3, 0xf5, 0xb9, 0xfb, 0xf8, 0x3c, 0x33, 0x04, 0x10, 0xc0, 0xf8, 0xf5, 0xb0, 0xfb, 0x92, 0xbc, 0x02, 0xa0, 0x24, 0xfe, 0x64, 0x32, 0x01, 0x8e, 0x52, 0x02, 0x42, 0x47, 0xff, 0xb5, 0x21, 0x01, 0x2e, 0x0f, 0x07, 0x5d, 0x5f, 0x03, 0xa2, 0xf8, 0xfb, 0xf6, 0x2f, 0xfe, 0x69, 0xdb, 0xfa, 0x92, 0x47, 0x4a, 0x52, 0x1a, 0x35, 0xce, 0xc5, 0xfb, 0x92, 0x5d, 0x10, 0x0e, 0xad, 0xf9, 0x9d, 0x06, 0xe9, 0x5a, 0xa0, 0xf6, 0x71, 0x06, 0xf1, 0xc3, 0x27, 0x04, 0x83, 0x6c, 0x10, 0x93, 0x0d, 0xfb, 0x00, 0x8f, 0xf1, 0x09, 0x8e, 0x08, 0xb9, 0x88, 0x09, 0x47, 0x28, 0xf6, 0x9a, 0x1a, 0xfa, 0xf0, 0x5c, 0xf8, 0x41, 0xeb, 0xfa, 0x0b, 0xfb, 0x02, 0x24, 0x2b, 0xf9, 0x05, 0x1a, 0xfc, 0xdc, 0x69, 0x03, 0x5e, 0x70, 0xfe, 0xea, 0xe1, 0xfe, 0x75, 0x8a, 0x01, 0xf4, 0x6e, 0x01, 0x90, 0x15, 0x02, 0xa1, 0x31, 0x05, 0x7f, 0xb3, 0x02, 0xb2, 0x26, 0xfd, 0xe1, 0x8d, 0xfd, 0x35, 0xa0, 0xfa, 0x60, 0x3c, 0x4a, 0xdd, 0xc1, 0x30, 0x28, 0x43, 0xf5, 0x2d, 0xb6, 0x13, 0xb7, 0xf3, 0xfd, 0x1a, 0x76, 0xe7, 0xbf, 0x9f, 0xf7, 0xaa, 0xb1, 0xf4, 0x45, 0xdf, 0x04, 0x78, 0x5c, 0x0b, 0x55, 0x43, 0xfa, 0xec, 0x85, 0xf4, 0xe4, 0x72, 0x07, 0x84, 0xf3, 0x08, 0x9d, 0x76, 0xf5, 0xf7, 0x42, 0xfb, 0x51, 0x74, 0xfb, 0x69, 0x2e, 0xfb, 0xff, 0x3b, 0x02, 0xad, 0xc9, 0xf8, 0x9a, 0x2e, 0xfd, 0x5d, 0x29, 0x04, 0x73, 0x32, 0xfd, 0x9c, 0xe5, 0xfd, 0xf9, 0xc4, 0x01, 0x0f, 0x21, 0x02, 0x7f, 0x78, 0x02, 0xba, 0xde, 0x04, 0xe8, 0xda, 0x01, 0x8d, 0x21, 0xfd, 0x9f, 0xcb, 0xfd, 0xe0, 0xe6, 0xfa, 0x9f, 0xff, 0x46, 0xcb, 0xe1, 0x2c, 0x57, 0xe9, 0xf1, 0x30, 0x11, 0x17, 0xa9, 0x07, 0x03, 0xb1, 0x50, 0xe4, 0x32, 0x3c, 0xf9, 0x63, 0x67, 0xfa, 0x61, 0xec, 0x00, 0x4e, 0x22, 0x07, 0x9a, 0xae, 0xfc, 0x80, 0xca, 0xf5, 0x4a, 0xbd, 0x05, 0xaf, 0xc7, 0x08, 0x4c, 0x42, 0xf7, 0x5f, 0xea, 0xfb, 0xda, 0x72, 0xfc, 0xcf, 0x25, 0xfc, 0x53, 0x2f, 0x01, 0x10, 0xad, 0xf9, 0x54, 0xed, 0xfd, 0x57, 0x76, 0x02, 0xd2, 0x32, 0xfd, 0x44, 0xdf, 0xfe, 0x86, 0x6e, 0x01, 0x83, 0x21, 0x01, 0x6f, 0x21, 0x03, 0xf3, 0xa0, 0x05, 0x2f, 0xbc, 0x00, 0xce, 0x9c, 0xfc, 0x8f, 0x40, 0xfe, 0x47, 0x04, 0xfc, 0x5b, 0xd9, 0x40, 0x50, 0xf2, 0x28, 0xf9, 0xfc, 0xf4, 0x34, 0x74, 0x17, 0x52, 0x75, 0x02, 0x8b, 0x76, 0xe8, 0x50, 0xb7, 0xfc, 0x5d, 0xc9, 0xf7, 0x47, 0x87, 0xfe, 0x8f, 0x10, 0x08, 0xb2, 0xba, 0xfc, 0xf3, 0xc9, 0xf5, 0x9b, 0xea, 0x04, 0x5a, 0x48, 0x09, 0xc3, 0x6f, 0xf9, 0xdf, 0xe1, 0xfb, 0x9d, 0xc6, 0xfc, 0x23, 0x94, 0xfc, 0x51, 0x8b, 0x01, 0x89, 0x92, 0xfa, 0xfb, 0xde, 0xfc, 0xec, 0x99, 0x01, 0x71, 0x07, 0xfe, 0xc3, 0x2a, 0xff, 0x3b, 0xc9, 0x00, 0x49, 0x27, 0x01, 0xda, 0x50, 0x03, 0x8a, 0x07, 0x05, 0x55, 0xc9, 0x00, 0x74, 0x65, 0xfc, 0x51, 0x09, 0xfe, 0xe0, 0x99, 0xfd, 0xba, 0xe6, 0x38, 0x4e, 0x8d, 0x26, 0xcb, 0x6e, 0xff, 0xc3, 0x1a, 0x12, 0xa9, 0x16, 0xfa, 0xb4, 0x7a, 0xed, 0xb0, 0x7b, 0xff, 0x6d, 0x05, 0xff, 0x80, 0xa2, 0xff, 0xab, 0xb4, 0xfe, 0xe0, 0xa5, 0xfb, 0xec, 0x6e, 0xf9, 0xe4, 0x66, 0x06, 0x07, 0x06, 0x06, 0x25, 0xd4, 0xf7, 0x49, 0xb8, 0xff, 0x43, 0xc0, 0xfd, 0x2a, 0x0d, 0xfb, 0x30, 0x94, 0x01, 0x86, 0xab, 0xfb, 0x13, 0xc8, 0xfc, 0xf1, 0xc9, 0x01, 0xe5, 0xd3, 0xfd, 0x2c, 0x7b, 0xfd, 0x18, 0xb5, 0x01, 0xd7, 0xe8, 0x00, 0xd6, 0x46, 0xfe, 0xaa, 0x68, 0x02, 0xf8, 0xc6, 0x02, 0x7d, 0xf4, 0xfe, 0x39, 0xbc, 0x00, 0x2c, 0x5d, 0xfe, 0x53, 0xed, 0x2f, 0x69, 0x14, 0x24, 0xa5, 0xdb, 0x04, 0xa8, 0x56, 0x0f, 0x7f, 0xf2, 0xfa, 0xea, 0x33, 0xf4, 0xf4, 0xc6, 0xff, 0xe8, 0x4e, 0xfc, 0x14, 0x89, 0xff, 0xdd, 0x5c, 0x00, 0x51, 0x5b, 0xfc, 0xc4, 0xf9, 0xf8, 0x68, 0x5a, 0x05, 0x07, 0xc0, 0x06, 0x6b, 0xcb, 0xf9, 0x00, 0x54, 0xff, 0x9c, 0xed, 0xfd, 0x4d, 0x3c, 0xfc, 0x3a, 0x56, 0x01, 0x32, 0x35, 0xfc, 0xb4, 0x4e, 0xfd, 0x44, 0x23, 0x01, 0xb3, 0x14, 0xfe, 0xe7, 0xef, 0xfd, 0x6d, 0x56, 0x01, 0xd3, 0xa2, 0x00, 0x67, 0xe5, 0xfe, 0xf7, 0xaa, 0x02, 0xc5, 0x73, 0x02, 0x4e, 0x95, 0xff, 0xbe, 0x7a, 0x00, 0x82, 0xb8, 0xfd, 0x4c, 0x53, 0x26, 0x86, 0xae, 0x22, 0x98, 0x52, 0x0a, 0xd3, 0xa3, 0x0b, 0x98, 0x6f, 0xfc, 0x75, 0x54, 0xf9, 0x9c, 0x66, 0xff, 0x16, 0x0d, 0xfb, 0x5d, 0xdb, 0xfe, 0xda, 0x42, 0x01, 0x64, 0xdb, 0xfc, 0xbb, 0xa4, 0xf9, 0xf5, 0x9b, 0x04, 0xc5, 0x94, 0x05, 0xac, 0xa5, 0xfb, 0x76, 0x7d, 0xff, 0x99, 0x15, 0xfe, 0xc4, 0xf8, 0xfc, 0xb9, 0x76, 0x00, 0x36, 0xf0, 0xfc, 0x48, 0x0b, 0xfe, 0x07, 0x95, 0x00, 0x2e, 0xc6, 0xfd, 0xa4, 0x2f, 0xfe, 0x18, 0x61, 0x01, 0x6d, 0x3c, 0x00, 0x3d, 0x76, 0xff, 0x33, 0x4c, 0x02, 0xcf, 0xaa, 0x01, 0xd6, 0x56, 0x00, 0x84, 0x73, 0x00, 0xf8, 0xd1, 0xfd, 0xe0, 0x17, 0x20, 0x0e, 0x4f, 0x20, 0x78, 0x52, 0x0b, 0x36, 0x0f, 0x0b, 0xca, 0x59, 0xff, 0x97, 0x18, 0xfa, 0x45, 0xff, 0xfe, 0xdd, 0xc2, 0xfc, 0xbb, 0x20, 0xff, 0x65, 0xb1, 0x00, 0x94, 0xfc, 0xfc, 0xee, 0x31, 0xfb, 0xba, 0x00, 0x04, 0xcf, 0xba, 0x04, 0x04, 0xa7, 0xfc, 0xbd, 0x64, 0xff, 0xfa, 0xe7, 0xfe, 0x27, 0x56, 0xfd, 0x4f, 0x07, 0x00, 0x41, 0xf4, 0xfd, 0xd4, 0x3a, 0xfe, 0xdb, 0xe6, 0xff, 0xc0, 0x52, 0xfe, 0x40, 0x0b, 0xff, 0xb0, 0x90, 0x00, 0xf9, 0xc9, 0xff, 0xa3, 0x43, 0x00, 0x59, 0x00, 0x02, 0xf9, 0xc5, 0x01, 0x6a, 0x1e, 0x01, 0x88, 0x5f, 0x00, 0xfd, 0xac, 0xfe, 0x49, 0x5a, 0x1c, 0xca, 0x19, 0x1d, 0xe4, 0xae, 0x0a, 0xe1, 0x96, 0x0b, 0xb9, 0x22, 0x01, 0xa1, 0xf1, 0xf9, 0x6f, 0xf5, 0xfe, 0x55, 0xf0, 0xfe, 0x1a, 0x86, 0xff, 0xde, 0x59, 0xff, 0xad, 0xae, 0xfd, 0xf3, 0xbb, 0xfc, 0x1f, 0x11, 0x03, 0xf5, 0x03, 0x04, 0xc0, 0x0c, 0xfd, 0x4a, 0x9b, 0xff, 0xa1, 0xe6, 0xff, 0xdd, 0x67, 0xfd, 0x2a, 0x80, 0xff, 0x82, 0xc8, 0xfe, 0x29, 0xd0, 0xfe, 0xa2, 0x81, 0xff, 0xfd, 0x91, 0xfe, 0x4a, 0x55, 0xff, 0x96, 0xdb, 0xff, 0xf1, 0x0a, 0x00, 0x2c, 0x05, 0x01, 0x76, 0x03, 0x02, 0xa2, 0x96, 0x02, 0x04, 0xa1, 0x01, 0x05, 0x15, 0x00, 0x17, 0x76, 0xff, 0xb8, 0xa9, 0x18, 0x6e, 0x03, 0x1a, 0x5a, 0x06, 0x0b, 0xcf, 0xdd, 0x0b, 0xe0, 0x14, 0x02, 0x0e, 0xd3, 0xfa, 0xb2, 0xf3, 0xfe, 0x78, 0x22, 0x00, 0xec, 0x38, 0x00, 0x3f, 0x0a, 0xff, 0xb9, 0x7f, 0xfe, 0x77, 0x52, 0xfd, 0xb4, 0x01, 0x02, 0x4c, 0xda, 0x03, 0x9d, 0x2c, 0xfe, 0xdc, 0xcf, 0xff, 0x31, 0xeb, 0xff, 0x2d, 0xbe, 0xfd, 0x39, 0xf3, 0xff, 0xed, 0xdc, 0xff, 0x0a, 0xc0, 0xfe, 0xf9, 0xcb, 0xfe, 0xdc, 0x86, 0xff, 0x5f, 0xc4, 0xff, 0x9c, 0x99, 0xff, 0xe7, 0x2b, 0x01, 0xb3, 0xd1, 0x01, 0xe9, 0x50, 0x02, 0xcb, 0x27, 0x03, 0x51, 0x4e, 0x01, 0x40, 0xb8, 0xff, 0x42, 0x98, 0xff, 0x70, 0x2a, 0x15, 0xc0, 0x2a, 0x17, 0x8b, 0x7e, 0x0b, 0xbb, 0x07, 0x0c, 0x57, 0xe2, 0x02, 0x5c, 0xbc, 0xfb, 0x43, 0xb1, 0xfe, 0xd4, 0x25, 0x01, 0x43, 0x41, 0x01, 0x8a, 0xc9, 0xfe, 0x12, 0xd1, 0xfe, 0x4a, 0xb7, 0xfd, 0xc8, 0x6c, 0x01, 0x7e, 0xcd, 0x03, 0x5c, 0xca, 0xfe, 0x5e, 0xfe, 0xff, 0x8c, 0x3a, 0x00, 0xb6, 0x4c, 0xfe, 0x6d, 0x71, 0x00, 0xb4, 0x21, 0x00, 0xe3, 0x8d, 0xfe, 0x7a, 0x47, 0xff, 0xa1, 0xaf, 0x00, 0x2c, 0x6b, 0x00, 0xea, 0x4c, 0x00, 0x62, 0xa1, 0x01, 0x29, 0xcc, 0x01, 0xbe, 0xa9, 0x02, 0xb7, 0xa8, 0x02, 0xf2, 0xf1, 0xff, 0xf2, 0x64, 0xff, 0xc9, 0x07, 0x00, 0x6a, 0x83, 0x12, 0x42, 0x7e, 0x15, 0xa2, 0x72, 0x0b, 0xdc, 0xd9, 0x0a, 0x52, 0x89, 0x03, 0x38, 0x22, 0xfd, 0x80, 0xd2, 0xfe, 0x12, 0xba, 0x01, 0x70, 0x90, 0x01, 0x85, 0xed, 0xfe, 0xf9, 0x86, 0xff, 0xe7, 0x07, 0xfe, 0x96, 0x9c, 0x00, 0x14, 0xb5, 0x03, 0xb9, 0x28, 0x00, 0x06, 0x1a, 0x00, 0x41, 0xfa, 0xff, 0xa6, 0x28, 0xff, 0xf7, 0xc7, 0x00, 0xba, 0x72, 0x00, 0xd6, 0xa4, 0xff, 0x3b, 0xc5, 0x00, 0x5c, 0x9f, 0x01, 0x3e, 0x2b, 0x00, 0xea, 0x46, 0x00, 0xfc, 0x03, 0x02, 0xa0, 0x71, 0x01, 0x2a, 0x65, 0x01, 0x30, 0x86, 0x01, 0x02, 0x05, 0x00, 0xe8, 0xd5, 0xff, 0x97, 0x1d, 0x00, 0xd3, 0x91, 0x0f, 0x69, 0xff, 0x12, 0x93, 0xfc, 0x0b, 0x29, 0x99, 0x0b, 0x07, 0xf8, 0x03, 0x67, 0x44, 0xfd, 0x12, 0xca, 0xfe, 0x6b, 0x83, 0x02, 0x4e, 0x82, 0x02, 0xdc, 0x0b, 0xff, 0x87, 0x56, 0xff, 0xfb, 0x63, 0xfe, 0x68, 0xbd, 0x00, 0x7a, 0xbf, 0x03, 0x4f, 0xb0, 0x00, 0x16, 0x40, 0x00, 0xc9, 0x35, 0x00, 0xe2, 0x39, 0x00, 0x84, 0x17, 0x02, 0xa8, 0xa1, 0x01, 0xad, 0xc0, 0x00, 0x84, 0xf6, 0x00, 0x89, 0xd5, 0x00, 0x97, 0x12, 0x00, 0x7d, 0x0b, 0x00, 0x46, 0xc8, 0x00, 0x77, 0xe3, 0x00, 0x08, 0x32, 0x01, 0x67, 0x3b, 0x01, 0xcc, 0x0e, 0x00, 0x7e, 0xdb, 0xff, 0xcb, 0x37, 0x00, 0xd7, 0x35, 0x0e, 0xdb, 0xfd, 0x11, 0x46, 0xe6, 0x0b, 0x6e, 0x42, 0x0a, 0x33, 0x6c, 0x03, 0x31, 0x1e, 0xfe, 0x82, 0xb0, 0xff, 0xbc, 0xeb, 0x02, 0x85, 0x43, 0x02, 0x1b, 0x6f, 0xff, 0xaa, 0xd0, 0xff, 0x08, 0xb0, 0xfe, 0x54, 0xfa, 0x00, 0x2b, 0xbe, 0x03, 0x2f, 0xfa, 0x00, 0x35, 0xef, 0x00, 0xcb, 0x28, 0x02, 0x03, 0x2f, 0x02, 0x5c, 0x28, 0x02, 0xa9, 0x18, 0x01, 0xd5, 0xbe, 0x00, 0x55, 0x81, 0x00, 0x7b, 0x64, 0xff, 0xf4, 0x31, 0xff, 0xa7, 0x1e, 0x00, 0xb2, 0xba, 0x00, 0x40, 0x9c, 0x00, 0xa2, 0xc1, 0x00, 0xee, 0xbc, 0x00, 0xa7, 0x26, 0x00, 0x97, 0x49, 0x00, 0xf6, 0xdf, 0xff, 0xaa, 0xba, 0x0c, 0x11, 0xbb, 0x10, 0x81, 0x0a, 0x0c, 0x74, 0x20, 0x0a, 0x8e, 0xf3, 0x02, 0x31, 0x11, 0xfe, 0x82, 0x79, 0x00, 0x3a, 0xe0, 0x03, 0xb0, 0x49, 0x02, 0xfd, 0x68, 0xff, 0xbb, 0x95, 0x00, 0x8a, 0xfe, 0xfe, 0x3b, 0xc1, 0x00, 0x19, 0x2d, 0x05, 0x47, 0x4b, 0x03, 0xcc, 0xf0, 0x01, 0x59, 0x14, 0x02, 0xc1, 0x90, 0x01, 0xb2, 0xa7, 0x01, 0xd7, 0xad, 0x00, 0x77, 0x4b, 0xff, 0x51, 0xe5, 0xfe, 0x41, 0x9a, 0xff, 0x89, 0xf8, 0xff, 0xbb, 0x8a, 0xff, 0xcc, 0x10, 0x00, 0x70, 0x8d, 0x00, 0xef, 0xaa, 0x00, 0x56, 0xbf, 0x00, 0x98, 0x07, 0x00, 0xc0, 0xe3, 0xff, 0xa7, 0x81, 0xff, 0xcd, 0x29, 0x0c, 0xc6, 0x72, 0x10, 0x35, 0xde, 0x0b, 0x55, 0x11, 0x09, 0xdc, 0x29, 0x02, 0x25, 0xba, 0xfe, 0x76, 0x91, 0x01, 0x00, 0x84, 0x04, 0x9e, 0x72, 0x02, 0xd8, 0xdb, 0xfe, 0xb2, 0x3b, 0x01, 0x2a, 0xf4, 0x01, 0xee, 0xf9, 0x02, 0x4f, 0x00, 0x05, 0x3b, 0x40, 0x02, 0xa9, 0x71, 0x01, 0x7f, 0xc3, 0x01, 0xc1, 0x48, 0x00, 0xf0, 0xd9, 0xff, 0x39, 0xcb, 0xff, 0x73, 0x47, 0xff, 0x72, 0xeb, 0xfe, 0x0e, 0x8f, 0xff, 0xdf, 0x82, 0xff, 0x4f, 0x47, 0xff, 0x9f, 0xbc, 0x00, 0x49, 0x8f, 0x00, 0xfa, 0x7c, 0xff, 0x06, 0x2b, 0x00, 0x78, 0x51, 0x00, 0x66, 0x87, 0xff, 0xbd, 0xd8, 0xfe, 0xbe, 0x9f, 0x0c, 0x4e, 0x3c, 0x11, 0xcc, 0x19, 0x0b, 0x26, 0x69, 0x07, 0x51, 0xca, 0x01, 0x02, 0x0e, 0x00, 0x64, 0x7a, 0x02, 0xf4, 0x39, 0x04, 0x5b, 0x17, 0x04, 0xb3, 0xa8, 0x01, 0xe5, 0xc1, 0x02, 0xe6, 0x54, 0x02, 0x79, 0x98, 0x01, 0xe4, 0x98, 0x03, 0x7a, 0xe2, 0x01, 0x75, 0xea, 0xff, 0x0b, 0xea, 0xff, 0xaa, 0x08, 0x00, 0x5f, 0x03, 0x00, 0x02, 0x69, 0xff, 0xd0, 0xaf, 0xfe, 0x42, 0xd0, 0xfe, 0x5c, 0x61, 0x00, 0x8f, 0x1b, 0x00, 0x71, 0x1a, 0xff, 0x1e, 0xfc, 0xff, 0x1e, 0x9b, 0xff, 0x10, 0x59, 0xff, 0x63, 0x5a, 0x00, 0x75, 0x34, 0x00, 0x7a, 0x3b, 0xff, 0x31, 0x5d, 0xfe, 0xd7, 0x3c, 0x0d, 0x2c, 0xef, 0x12, 0x51, 0x2c, 0x0a, 0x27, 0x8f, 0x05, 0xe1, 0x68, 0x01, 0xba, 0x03, 0x01, 0x2b, 0xb6, 0x06, 0xfd, 0x6c, 0x07, 0x68, 0xe9, 0x03, 0xd1, 0xc4, 0x00, 0x42, 0xcd, 0x01, 0xf9, 0xe9, 0x01, 0xe1, 0x6d, 0x00, 0x43, 0x7d, 0x01, 0xa7, 0x97, 0x00, 0x9d, 0x07, 0x00, 0x02, 0x2c, 0x00, 0x80, 0x35, 0xff, 0x98, 0x7a, 0xff, 0x92, 0x70, 0xff, 0x26, 0x73, 0xff, 0x53, 0x2f, 0x00, 0xa4, 0x1f, 0x00, 0x86, 0x0e, 0xff, 0x92, 0xac, 0xfe, 0x3c, 0x9b, 0xff, 0x95, 0x96, 0xff, 0xfd, 0x6c, 0xff, 0xcb, 0x57, 0x00, 0x76, 0x0d, 0x00, 0x7e, 0xa9, 0xfe, 0x5d, 0x5b, 0xfe, 0xd7, 0x69, 0x0d, 0x4c, 0x9f, 0x13, 0x71, 0x55, 0x09, 0x40, 0x46, 0x04, 0xad, 0xc4, 0x04, 0x76, 0xed, 0x05, 0x35, 0x46, 0x07, 0x20, 0x7f, 0x05, 0x77, 0xed, 0x02, 0xdf, 0x57, 0x00, 0x07, 0x8a, 0x00, 0x52, 0x83, 0x00, 0x9a, 0xae, 0xff, 0x4d, 0x18, 0x01, 0xfb, 0x3c, 0x00, 0xb8, 0xaa, 0xff, 0x6c, 0x07, 0x00, 0xdf, 0xf2, 0xfe, 0x0c, 0xad, 0xff, 0x2d, 0xe0, 0x00, 0x38, 0x15, 0x00, 0x6a, 0xea, 0xfe, 0x07, 0x2c, 0xff, 0x51, 0x57, 0xff, 0x23, 0xd5, 0xfe, 0x14, 0xdd, 0xfe, 0x57, 0x48, 0xff, 0x70, 0x0b, 0x00, 0x2c, 0xf7, 0xff, 0xec, 0x67, 0xff, 0xc6, 0x2b, 0xff, 0x97, 0xed, 0xfe, 0x13, 0x25, 0x0c, 0x1e, 0xa8, 0x12, 0x6a, 0x9e, 0x0c, 0x35, 0x98, 0x08, 0x72, 0xa8, 0x04, 0x59, 0x52, 0x04, 0x53, 0x6e, 0x07, 0x62, 0x4f, 0x05, 0xef, 0xa3, 0x01, 0x37, 0x58, 0xff, 0xbf, 0x15, 0x00, 0x61, 0xb5, 0x00, 0xb5, 0xc8, 0xff, 0x8b, 0x51, 0x00, 0x52, 0xf0, 0xff, 0x38, 0xd9, 0xff, 0x10, 0x39, 0x00, 0x3c, 0x38, 0x00, 0xcc, 0xa6, 0x00, 0xc4, 0x03, 0x00, 0x89, 0x5a, 0xff, 0x48, 0x4f, 0xff, 0x63, 0x5c, 0xff, 0x93, 0xf6, 0xfe, 0xbb, 0x72, 0xfe, 0xf5, 0x09, 0xff, 0x31, 0x63, 0xff, 0xae, 0x9f, 0xff, 0x14, 0x21, 0x00, 0xc0, 0xfd, 0xff, 0x75, 0x9a, 0xff, 0x2b, 0x1c, 0xff, 0x19, 0x3a, 0x0f, 0xcc, 0x90, 0x17, 0x45, 0xe2, 0x0b, 0xc3, 0xd1, 0x03, 0x42, 0x0e, 0x04, 0x9d, 0x98, 0x05, 0x52, 0x12, 0x06, 0xae, 0xf9, 0x03, 0x0c, 0x36, 0x01, 0x6c, 0xf6, 0xfe, 0xdc, 0x24, 0x00, 0x32, 0x9c, 0x00, 0x3d, 0x03, 0x00, 0xaf, 0xa8, 0x00, 0x5a, 0x7b, 0xff, 0x5c, 0x09, 0x00, 0x81, 0xdb, 0x01, 0x54, 0x29, 0x01, 0xe1, 0x45, 0xff, 0xce, 0x1d, 0xff, 0x62, 0x45, 0x00, 0xfc, 0x8c, 0xff, 0x79, 0xba, 0xfe, 0xf7, 0x8d, 0xfe, 0x35, 0xa8, 0xfe, 0xdc, 0x35, 0xff, 0x3b, 0x29, 0xff, 0x9d, 0xec, 0xff, 0x38, 0xaa, 0x00, 0x8b, 0x4c, 0x00, 0xd4, 0x74, 0xff, 0xc7, 0x8a, 0xfe, 0xfb, 0x13, 0x10, 0xcb, 0x7e, 0x19, 0x68, 0x06, 0x0b, 0xa8, 0xf8, 0x00, 0x91, 0x83, 0x03, 0x66, 0x5d, 0x05, 0xc9, 0x3c, 0x05, 0xc8, 0x2d, 0x04, 0x54, 0x57, 0x02, 0xf4, 0x32, 0xff, 0xc3, 0x65, 0xff, 0x34, 0x61, 0x01, 0x53, 0x64, 0x00, 0xb7, 0x44, 0x00, 0x1e, 0x67, 0x00, 0xb1, 0xf3, 0x00, 0x6b, 0x04, 0x02, 0x2f, 0xa5, 0x00, 0x63, 0x8d, 0xff, 0x41, 0xc3, 0xff, 0x3a, 0xef, 0xff, 0xce, 0x71, 0xff, 0x29, 0xc7, 0xfe, 0x40, 0xed, 0xfe, 0x20, 0x9b, 0xfe, 0x19, 0xad, 0xfe, 0xf2, 0x7f, 0xff, 0x88, 0x2c, 0x00, 0x8c, 0xb5, 0x00, 0x13, 0x3e, 0x00, 0x19, 0x8a, 0xff, 0x9a, 0xd8, 0xfe, 0x24, 0x17, 0x0c, 0x8f, 0x87, 0x16, 0xfd, 0x77, 0x0f, 0xee, 0xf6, 0x03, 0xb6, 0xaf, 0x00, 0x5c, 0x97, 0x02, 0xc1, 0xa2, 0x04, 0x04, 0xbe, 0x05, 0x42, 0xa0, 0x03, 0x12, 0x50, 0xff, 0xd0, 0x93, 0xff, 0xa1, 0xda, 0x01, 0x4b, 0x70, 0x01, 0xbc, 0x05, 0x00, 0x92, 0x05, 0x00, 0xe6, 0xa8, 0x01, 0x5d, 0x35, 0x02, 0x4f, 0x57, 0x01, 0xe0, 0x20, 0x00, 0xd9, 0x8c, 0xff, 0x5a, 0x0f, 0x00, 0xe0, 0x05, 0x00, 0x34, 0x27, 0xff, 0x3f, 0x96, 0xfe, 0x31, 0xe7, 0xfe, 0x4f, 0x07, 0xff, 0x69, 0xfc, 0xfe, 0x0b, 0xd9, 0xff, 0x43, 0x8a, 0x00, 0x40, 0x6a, 0x00, 0x0b, 0xc0, 0xff, 0x7b, 0x17, 0xff, 0xf0, 0x13, 0x0a, 0x63, 0xa8, 0x13, 0xf4, 0x44, 0x10, 0xf4, 0xd8, 0x06, 0x31, 0x1c, 0x01, 0xfa, 0x4b, 0x01, 0x00, 0x33, 0x03, 0xba, 0xd1, 0x04, 0x38, 0x0d, 0x04, 0xcb, 0x13, 0x00, 0xe9, 0x76, 0xff, 0x50, 0xca, 0x01, 0x9b, 0x4c, 0x02, 0xeb, 0x9e, 0x00, 0x52, 0x17, 0x00, 0x61, 0x87, 0x01, 0x62, 0x92, 0x01, 0xa6, 0xa5, 0x01, 0x04, 0x5d, 0x01, 0xae, 0x26, 0x00, 0x96, 0x4c, 0x00, 0x6c, 0xf8, 0xff, 0xae, 0x33, 0xff, 0x7f, 0x50, 0xff, 0x01, 0x67, 0xff, 0xc9, 0xec, 0xfe, 0x26, 0xc6, 0xfe, 0xb5, 0xbc, 0xff, 0xd5, 0x76, 0x00, 0x68, 0x3b, 0x00, 0xc0, 0x73, 0xff, 0xda, 0x22, 0xff, 0xe6, 0xfa, 0x09, 0x53, 0x32, 0x13, 0xbb, 0x5a, 0x0f, 0x79, 0x10, 0x07, 0x9c, 0x2a, 0x02, 0x90, 0xfc, 0x00, 0xf6, 0x7c, 0x02, 0x70, 0xd5, 0x04, 0x0b, 0xfa, 0x03, 0x29, 0x73, 0xff, 0xdc, 0x99, 0xfe, 0xed, 0x8d, 0x01, 0xf7, 0xa4, 0x02, 0x41, 0xf6, 0x00, 0x40, 0x16, 0x00, 0x81, 0x77, 0x01, 0xe9, 0xd9, 0x01, 0x4a, 0x6b, 0x01, 0xbc, 0x18, 0x01, 0x17, 0xbe, 0x00, 0x32, 0xea, 0x00, 0x2e, 0x6c, 0x00, 0xf7, 0x9f, 0xff, 0x34, 0x8e, 0xff, 0xe8, 0x7f, 0xff, 0xfd, 0x5c, 0xff, 0x49, 0x91, 0xff, 0xfc, 0x92, 0xff, 0xa9, 0xdf, 0xff, 0xa1, 0x6f, 0x00, 0x90, 0xa7, 0xff, 0xc6, 0xcf, 0xfe, 0x10, 0x6a, 0x0a, 0x5c, 0x46, 0x13, 0xd6, 0xb0, 0x0e, 0x31, 0x20, 0x07, 0xce, 0xdd, 0x02, 0x88, 0xe6, 0x00, 0x76, 0xec, 0x01, 0xb7, 0xb4, 0x04, 0x30, 0x2b, 0x04, 0xad, 0x7d, 0xff, 0xbc, 0x3b, 0xfe, 0x51, 0xe2, 0x00, 0x15, 0xf9, 0x01, 0x4a, 0x84, 0x00, 0xa0, 0xe0, 0xff, 0x6e, 0x5c, 0x01, 0x09, 0x99, 0x01, 0x4f, 0x0e, 0x01, 0xe6, 0x8b, 0x01, 0x0e, 0x36, 0x01, 0xa5, 0x42, 0x00, 0x60, 0x5e, 0x00, 0x03, 0x6b, 0x00, 0xcb, 0xf4, 0xff, 0x27, 0xd4, 0xff, 0x83, 0xd6, 0xff, 0x91, 0xf2, 0xff, 0x9a, 0xe8, 0xff, 0x99, 0x1a, 0x00, 0xe2, 0x51, 0x00, 0x8c, 0xb9, 0xff, 0xff, 0xf5, 0xfe, 0xb9, 0x5a, 0x0b, 0xff, 0x3c, 0x14, 0x75, 0x39, 0x0e, 0x3a, 0xb6, 0x06, 0xe3, 0x1b, 0x03, 0xa4, 0xd6, 0x00, 0xf6, 0xe1, 0x01, 0x8b, 0xe6, 0x04, 0xa0, 0x23, 0x04, 0x92, 0x24, 0xff, 0xb5, 0x26, 0xfe, 0x4c, 0xe8, 0x00, 0xba, 0xeb, 0x01, 0xb8, 0x6e, 0x00, 0xde, 0xe9, 0xfe, 0xde, 0x51, 0x00, 0xfb, 0x4c, 0x01, 0xa6, 0x9f, 0x00, 0x84, 0x40, 0x01, 0xa0, 0x9b, 0x01, 0xa6, 0x9d, 0x00, 0xf5, 0x36, 0x00, 0xd5, 0xf7, 0xff, 0x42, 0xa8, 0xff, 0x27, 0x96, 0x00, 0x63, 0xa4, 0x00, 0x0a, 0xeb, 0xff, 0x25, 0x94, 0x00, 0x72, 0xd6, 0x00, 0xd9, 0x58, 0x00, 0xb6, 0xeb, 0xff, 0x44, 0x3b, 0xff, 0x6b, 0x20, 0x0c, 0x55, 0x99, 0x15, 0xb5, 0x59, 0x0e, 0xad, 0xf5, 0x05, 0x82, 0x5b, 0x03, 0x26, 0x1a, 0x01, 0x66, 0x6b, 0x01, 0xc0, 0xe6, 0x04, 0xea, 0x50, 0x04, 0x51, 0xf4, 0xfe, 0x62, 0x00, 0xfe, 0x13, 0xac, 0x00, 0x5a, 0xd3, 0x01, 0x5a, 0xc9, 0x00, 0x4e, 0xc7, 0xfe, 0xad, 0x7b, 0xff, 0xfe, 0xb1, 0x00, 0x98, 0xbd, 0xff, 0xe0, 0xf1, 0xff, 0x73, 0xaa, 0x01, 0x29, 0x56, 0x01, 0x81, 0xd1, 0xff, 0xdf, 0x9e, 0xff, 0x0f, 0x94, 0xff, 0xdc, 0x28, 0x00, 0x3b, 0xb5, 0x00, 0x07, 0x3c, 0x00, 0xaa, 0xde, 0x00, 0x67, 0x58, 0x01, 0x18, 0xb9, 0x00, 0xa4, 0x70, 0x00, 0x94, 0xc4, 0xff, 0xc0, 0x2a, 0x0d, 0x5c, 0x4f, 0x17, 0x27, 0x7d, 0x0e, 0xef, 0x40, 0x05, 0xef, 0xa5, 0x03, 0x3b, 0x1e, 0x01, 0x49, 0xe2, 0x00, 0x68, 0x05, 0x05, 0x39, 0x83, 0x04, 0x93, 0x80, 0xfe, 0x32, 0x9b, 0xfd, 0xb9, 0xda, 0x00, 0xde, 0xc4, 0x01, 0x80, 0x96, 0x00, 0xca, 0xfb, 0xfe, 0xe0, 0x22, 0xff, 0x71, 0x3b, 0x00, 0xe2, 0x8e, 0xff, 0x37, 0xc9, 0xfe, 0x28, 0xa8, 0x00, 0x70, 0x77, 0x01, 0x09, 0xab, 0xff, 0xb6, 0x42, 0xff, 0x9b, 0x60, 0xff, 0xcd, 0xa7, 0xff, 0x55, 0x96, 0x00, 0xd4, 0x4a, 0x00, 0x3b, 0x67, 0x00, 0xe1, 0x61, 0x01, 0x65, 0x50, 0x01, 0xca, 0x90, 0x00, 0x94, 0x0f, 0x00, 0xb5, 0xa1, 0x0e, 0x38, 0x73, 0x19, 0x69, 0x9e, 0x0e, 0xd2, 0x41, 0x04, 0x1d, 0xe0, 0x03, 0x24, 0x5e, 0x01, 0xa6, 0x5e, 0x00, 0x84, 0x13, 0x05, 0xc7, 0xbd, 0x04, 0xf5, 0x26, 0xfe, 0xc7, 0x42, 0xfd, 0x6e, 0xf3, 0x00, 0x72, 0xc2, 0x01, 0x6e, 0x5d, 0x00, 0x55, 0x42, 0xff, 0x45, 0x25, 0xff, 0x74, 0xb7, 0xff, 0x44, 0x7a, 0xff, 0x71, 0x70, 0xfe, 0x27, 0xc2, 0xff, 0xd4, 0x6f, 0x01, 0x45, 0xf0, 0xff, 0xf1, 0x5e, 0xfe, 0x40, 0xc7, 0xfe, 0xcb, 0xc3, 0xff, 0x4c, 0x58, 0x00, 0x23, 0x21, 0x00, 0x81, 0xfe, 0xff, 0x03, 0x22, 0x01, 0x01, 0x83, 0x01, 0x00, 0x52, 0x00, 0x9e, 0x2e, 0x00, 0x15, 0x5b, 0x10, 0x6c, 0xf1, 0x1b, 0x25, 0xca, 0x0e, 0xb1, 0x08, 0x03, 0xcd, 0xf9, 0x03, 0x18, 0x9b, 0x01, 0xb6, 0xd9, 0xff, 0xec, 0x57, 0x05, 0x7f, 0xd1, 0x04, 0x86, 0x63, 0xfd, 0xf1, 0x31, 0xfd, 0x49, 0x44, 0x01, 0x3e, 0xab, 0x01, 0xeb, 0xef, 0xff, 0x4f, 0x15, 0xff, 0x54, 0x86, 0xff, 0x0d, 0x98, 0xff, 0x2b, 0xf8, 0xfe, 0x8d, 0x50, 0xfe, 0x63, 0x35, 0xff, 0x50, 0xff, 0x00, 0xf4, 0x94, 0x00, 0x5d, 0x52, 0xfe, 0xf4, 0xd3, 0xfd, 0xd3, 0x79, 0xff, 0x9f, 0x27, 0x00, 0xbb, 0xe0, 0xff, 0x6b, 0xf0, 0xff, 0xcd, 0x93, 0x00, 0x82, 0xfe, 0x00, 0x92, 0x78, 0x00, 0x41, 0x1a, 0x00, 0x24, 0x8d, 0x12, 0xe0, 0xb0, 0x1e, 0x65, 0x9c, 0x0e, 0xc6, 0xcc, 0x01, 0xab, 0x1d, 0x04, 0x43, 0x7a, 0x01, 0x2e, 0x62, 0xff, 0x7c, 0xef, 0x05, 0x9b, 0xb2, 0x04, 0x33, 0x43, 0xfc, 0x0d, 0x30, 0xfd, 0x47, 0xdf, 0x01, 0x08, 0x9f, 0x01, 0x58, 0x51, 0xff, 0xc4, 0xc0, 0xfe, 0xd4, 0xbb, 0xff, 0xd2, 0x87, 0xff, 0x2e, 0x85, 0xfe, 0x13, 0x06, 0xfe, 0xa3, 0x01, 0xff, 0x80, 0x79, 0x00, 0x24, 0xa2, 0x00, 0x26, 0xe4, 0xfe, 0x94, 0x64, 0xfd, 0xde, 0x05, 0xff, 0x49, 0x41, 0x00, 0x03, 0x6e, 0xff, 0x09, 0x9d, 0xff, 0x49, 0x5b, 0x00, 0x55, 0x4e, 0x00, 0xe8, 0x12, 0x00, 0x32, 0xf7, 0xff, 0x80, 0xb6, 0x14, 0xe9, 0x8f, 0x21, 0x32, 0xa6, 0x0e, 0x75, 0x8b, 0x00, 0xb4, 0x01, 0x04, 0xb5, 0x0c, 0x01, 0x16, 0xdb, 0xfe, 0xfb, 0xb2, 0x06, 0xc8, 0x7c, 0x04, 0x5b, 0xc6, 0xfa, 0xe6, 0x11, 0xfd, 0x0a, 0xa3, 0x02, 0x1c, 0x99, 0x01, 0x01, 0x87, 0xfe, 0x34, 0x3a, 0xfe, 0x67, 0xe4, 0xff, 0x42, 0x79, 0xff, 0x3d, 0xec, 0xfd, 0x23, 0x79, 0xfd, 0x64, 0xbf, 0xfe, 0xc8, 0x28, 0x00, 0x23, 0x5b, 0x00, 0xb5, 0x2f, 0xff, 0x91, 0x8a, 0xfd, 0xb3, 0x6f, 0xfe, 0x8a, 0x32, 0x00, 0x60, 0x9e, 0xff, 0x74, 0x10, 0xff, 0xf5, 0x20, 0x00, 0x19, 0xbf, 0xff, 0x58, 0xfd, 0xfe, 0x7c, 0xe0, 0xff, 0x6c, 0xe6, 0x16, 0xfb, 0x87, 0x24, 0x8f, 0x05, 0x0f, 0x97, 0xbd, 0xff, 0x15, 0xf0, 0x03, 0x0f, 0x81, 0x00, 0xf6, 0x83, 0xfe, 0x61, 0xdc, 0x07, 0xd0, 0x82, 0x04, 0x39, 0x40, 0xf9, 0xa6, 0x28, 0xfd, 0x52, 0xbd, 0x03, 0x5f, 0xd6, 0x01, 0xb3, 0x03, 0xfe, 0x06, 0xc3, 0xfd, 0x00, 0x28, 0x00, 0xf9, 0xb7, 0xff, 0x43, 0x9b, 0xfd, 0x11, 0x21, 0xfd, 0xac, 0x75, 0xfe, 0xce, 0xe4, 0xff, 0x2c, 0x6b, 0x00, 0x6a, 0x7b, 0xff, 0xf8, 0x09, 0xfe, 0x61, 0x8c, 0xfe, 0xef, 0xb6, 0xff, 0xbd, 0x1d, 0x00, 0xe7, 0x8c, 0xff, 0x1b, 0x9e, 0xff, 0x52, 0xb9, 0xff, 0x98, 0x91, 0xfe, 0x13, 0x1d, 0xff, 0x0c, 0x7b, 0x18, 0x64, 0x3d, 0x27, 0xd7, 0x45, 0x10, 0x2d, 0x1c, 0xff, 0x55, 0x76, 0x03, 0xe9, 0xe4, 0xff, 0x30, 0xb2, 0xfd, 0x64, 0xd0, 0x08, 0x68, 0xe0, 0x04, 0x20, 0x8e, 0xf7, 0x5c, 0xb8, 0xfc, 0x65, 0xc9, 0x04, 0xf9, 0x3b, 0x02, 0xbf, 0x64, 0xfd, 0xd8, 0x1f, 0xfd, 0x0e, 0x25, 0x00, 0xe9, 0xd2, 0xff, 0xbf, 0x65, 0xfd, 0xed, 0xaf, 0xfc, 0x99, 0xde, 0xfd, 0x9e, 0x52, 0xff, 0xff, 0x72, 0x00, 0x90, 0x92, 0xff, 0x15, 0x11, 0xfe, 0x73, 0x26, 0xff, 0xd4, 0x75, 0xff, 0x99, 0xa4, 0xff, 0x0e, 0x4a, 0x00, 0xdf, 0x96, 0xff, 0xe3, 0xfa, 0xfe, 0x3a, 0xa8, 0xfe, 0x75, 0xba, 0xfe, 0x78, 0xd7, 0x19, 0x9d, 0xfa, 0x29, 0x86, 0xd2, 0x11, 0xea, 0xa9, 0xfe, 0xd3, 0xed, 0x02, 0xc8, 0x91, 0xff, 0xdd, 0x14, 0xfd, 0x21, 0x0d, 0x09, 0x99, 0x4a, 0x05, 0x1c, 0x8b, 0xf6, 0x48, 0x0d, 0xfc, 0x95, 0x91, 0x05, 0x12, 0xe6, 0x02, 0x97, 0x0c, 0xfd, 0x46, 0x6d, 0xfc, 0xb7, 0x1f, 0x00, 0xec, 0xf4, 0xff, 0x6b, 0x26, 0xfd, 0xfe, 0x92, 0xfc, 0xcc, 0x71, 0xfd, 0xf6, 0x51, 0xfe, 0x02, 0x72, 0x00, 0x66, 0x41, 0x00, 0x48, 0x9b, 0xfd, 0xb3, 0x66, 0xff, 0x3e, 0x5e, 0x00, 0x09, 0x0a, 0xff, 0xb9, 0x36, 0x00, 0xb0, 0x6d, 0x00, 0x94, 0xad, 0xfe, 0x9b, 0xfc, 0xfd, 0x9c, 0xe1, 0xfe, 0xba, 0xb7, 0x1a, 0x5a, 0x8a, 0x2c, 0x31, 0x04, 0x14, 0x11, 0x12, 0xfe, 0x25, 0x57, 0x02, 0x94, 0x01, 0x00, 0x60, 0x81, 0xfc, 0x89, 0x56, 0x08, 0x9b, 0x69, 0x05, 0xf1, 0x8c, 0xf6, 0x3d, 0x5e, 0xfb, 0x28, 0x98, 0x05, 0x92, 0xa1, 0x03, 0x52, 0x07, 0xfd, 0x43, 0xfb, 0xfb, 0xa7, 0xdd, 0xff, 0xa5, 0xf5, 0xff, 0x95, 0xe7, 0xfc, 0x58, 0x58, 0xfc, 0xd9, 0x87, 0xfd, 0x90, 0x63, 0xfd, 0x9e, 0x5b, 0xff, 0x11, 0x1f, 0x01, 0x4b, 0x35, 0xfe, 0x6c, 0xa4, 0xfe, 0xad, 0x18, 0x01, 0x78, 0x96, 0xff, 0x2d, 0x58, 0xff, 0x17, 0xf3, 0x00, 0x37, 0x6a, 0xff, 0x61, 0x2d, 0xfd, 0xcd, 0x55, 0xfe, 0xf3, 0x88, 0x1c, 0xa9, 0xdc, 0x2e, 0x24, 0x93, 0x14, 0x06, 0x00, 0xfe, 0x1d, 0xa7, 0x02, 0x22, 0xe1, 0xff, 0x7c, 0x06, 0xfc, 0xe5, 0x8f, 0x07, 0xda, 0xd4, 0x04, 0x10, 0xcc, 0xf6, 0x61, 0x19, 0xfb, 0xc7, 0x44, 0x05, 0x3b, 0xf5, 0x03, 0x16, 0x16, 0xfd, 0x63, 0xbe, 0xfb, 0xd8, 0x98, 0xff, 0xf1, 0xee, 0xff, 0xa1, 0x6d, 0xfc, 0x44, 0xf5, 0xfb, 0xba, 0xc7, 0xfd, 0x12, 0xe1, 0xfc, 0x57, 0x1a, 0xfe, 0x92, 0xde, 0x00, 0x55, 0x8e, 0xff, 0x50, 0x8b, 0xfe, 0x31, 0x7e, 0x00, 0x8c, 0xd3, 0x00, 0x7f, 0x15, 0xff, 0x8c, 0x3f, 0x00, 0xc6, 0x72, 0x00, 0x17, 0x53, 0xfd, 0xd9, 0x46, 0xfd, 0xc3, 0x30, 0x20, 0x61, 0xc5, 0x30, 0x8e, 0x78, 0x12, 0xb3, 0x97, 0xfe, 0x58, 0xa4, 0x04, 0x38, 0x6e, 0xff, 0x9e, 0xb6, 0xfa, 0xc3, 0x6c, 0x07, 0x74, 0x4d, 0x04, 0x59, 0x67, 0xf6, 0x1d, 0xc8, 0xfb, 0x2b, 0xa6, 0x04, 0x32, 0x20, 0x04, 0xa4, 0x74, 0xfd, 0x99, 0x28, 0xfb, 0xe4, 0xe1, 0xff, 0xc1, 0xb4, 0xff, 0x08, 0x34, 0xfc, 0x8b, 0xa9, 0xfb, 0xaf, 0x74, 0xfd, 0xbb, 0x27, 0xfd, 0x2c, 0x49, 0xfd, 0xef, 0xcf, 0xff, 0xc2, 0x6b, 0x00, 0x8a, 0xdc, 0xff, 0xbb, 0xcc, 0xff, 0x62, 0xe5, 0x00, 0x55, 0x3a, 0x00, 0x9e, 0x82, 0xff, 0x48, 0x5d, 0x00, 0x9e, 0x6a, 0xfe, 0x73, 0xda, 0xfc, 0xa5, 0x58, 0x24, 0xa0, 0xea, 0x31, 0x9d, 0x73, 0x0e, 0x14, 0x9f, 0x00, 0xae, 0xbc, 0x08, 0x43, 0x79, 0xfd, 0xa5, 0x23, 0xf8, 0x5e, 0x57, 0x08, 0x22, 0x77, 0x04, 0xe9, 0x1b, 0xf5, 0xac, 0x2f, 0xfc, 0x12, 0x54, 0x04, 0xe1, 0xfe, 0x03, 0xda, 0xe6, 0xfd, 0x3c, 0x72, 0xfa, 0xda, 0x0e, 0x00, 0x76, 0x68, 0xff, 0x2a, 0xf9, 0xfb, 0x3e, 0xb7, 0xfb, 0x89, 0xb1, 0xfc, 0xf3, 0x35, 0xfd, 0xc0, 0x1c, 0xfd, 0x15, 0xc1, 0xfe, 0x8f, 0xfb, 0xff, 0x82, 0x61, 0x01, 0x65, 0x7a, 0x00, 0x70, 0xed, 0xff, 0xc7, 0xfd, 0x00, 0x7d, 0xbe, 0xff, 0x03, 0xae, 0xff, 0xab, 0x17, 0xff, 0xaf, 0x4b, 0xfd, 0xc3, 0xae, 0x27, 0x4b, 0xde, 0x31, 0x10, 0x3e, 0x0a, 0x3e, 0x23, 0x05, 0x20, 0x0e, 0x0e, 0x9b, 0x06, 0xf9, 0x16, 0x15, 0xf5, 0xfc, 0x2f, 0x0b, 0xf1, 0x2e, 0x05, 0x69, 0x65, 0xf2, 0x03, 0xec, 0xfb, 0xd2, 0x4c, 0x05, 0x67, 0x98, 0x03, 0xe2, 0x99, 0xfd, 0x06, 0x2c, 0xfa, 0xc4, 0x47, 0x00, 0x5a, 0xf9, 0xfe, 0xec, 0x74, 0xfb, 0x5c, 0x05, 0xfc, 0xd5, 0x3d, 0xfc, 0x99, 0xdd, 0xfc, 0x7f, 0x06, 0xfd, 0x4d, 0x27, 0xfe, 0x21, 0x0b, 0xff, 0x57, 0xf5, 0x01, 0x11, 0xd3, 0x01, 0x63, 0x8c, 0xff, 0xb1, 0x09, 0x01, 0x93, 0x3b, 0x00, 0x63, 0x43, 0xff, 0x5c, 0x11, 0xff, 0x5b, 0xe7, 0xfd, 0x4a, 0x42, 0x2a, 0x81, 0x88, 0x30, 0x36, 0x05, 0x07, 0x0a, 0xcc, 0x0b, 0x49, 0xce, 0x12, 0x75, 0x0f, 0xf3, 0x60, 0x1f, 0xf3, 0x75, 0x9c, 0x0f, 0xb4, 0x5f, 0x05, 0x6a, 0xac, 0xee, 0xca, 0xe4, 0xfb, 0xa4, 0x6a, 0x07, 0x94, 0xe4, 0x02, 0x85, 0x69, 0xfc, 0x52, 0xad, 0xfa, 0x81, 0xd6, 0x00, 0xb8, 0x38, 0xfe, 0x5e, 0xdf, 0xfa, 0xfa, 0x81, 0xfc, 0x09, 0x61, 0xfc, 0x10, 0x4f, 0xfc, 0x21, 0xcb, 0xfc, 0x4a, 0x3c, 0xfe, 0xe9, 0x4d, 0xfe, 0x5e, 0x9f, 0x01, 0x6b, 0xa2, 0x02, 0x9e, 0x2b, 0x00, 0xfa, 0x6d, 0x01, 0x25, 0x82, 0x00, 0xfc, 0x27, 0xff, 0xc1, 0xbd, 0xfe, 0x76, 0x7c, 0xfe, 0x18, 0xba, 0x30, 0x5a, 0x6f, 0x32, 0x5f, 0xf4, 0xff, 0xde, 0x49, 0x0a, 0xc5, 0x1c, 0x17, 0x97, 0xb9, 0xf4, 0x68, 0xa5, 0xf1, 0x35, 0x41, 0x0e, 0x16, 0xb3, 0x04, 0x86, 0xf6, 0xed, 0xdb, 0xc0, 0xfc, 0xfa, 0x10, 0x08, 0xdb, 0x8d, 0x01, 0xe6, 0x17, 0xfb, 0x3a, 0x52, 0xfb, 0xcc, 0x47, 0x01, 0x84, 0xde, 0xfc, 0x47, 0x77, 0xfa, 0x34, 0x75, 0xfc, 0xea, 0x68, 0xfc, 0x6c, 0x75, 0xfc, 0x08, 0x32, 0xfc, 0x35, 0x92, 0xfe, 0xab, 0xf6, 0xfd, 0x0e, 0xa0, 0x00, 0x75, 0x57, 0x03, 0x0f, 0xf4, 0x00, 0x90, 0x2b, 0x01, 0x48, 0x7d, 0x00, 0xb7, 0xa4, 0xff, 0x35, 0x86, 0xfe, 0x89, 0x50, 0xfe, 0x26, 0x1e, 0x37, 0x91, 0xdd, 0x34, 0xe9, 0x81, 0xf9, 0xf4, 0x44, 0x07, 0x8c, 0x0b, 0x1a, 0x1e, 0x67, 0xf8, 0x3c, 0xee, 0xf0, 0x48, 0x96, 0x0b, 0x31, 0x6b, 0x04, 0xd8, 0xdb, 0xed, 0x81, 0x6c, 0xfd, 0x3d, 0x7f, 0x08, 0x63, 0x9a, 0x00, 0x9f, 0xe0, 0xf9, 0x36, 0x83, 0xfb, 0xe2, 0xf5, 0x01, 0xc1, 0x63, 0xfb, 0xb4, 0x31, 0xfa, 0x75, 0x85, 0xfc, 0x7b, 0x22, 0xfc, 0xda, 0x5b, 0xfd, 0x0f, 0x7c, 0xfb, 0xff, 0xc2, 0xfe, 0x72, 0x8f, 0xfe, 0x44, 0x3a, 0xff, 0x9a, 0x41, 0x03, 0x64, 0x13, 0x02, 0xe3, 0x5a, 0x01, 0xbd, 0x21, 0x00, 0x10, 0xfb, 0xff, 0x8d, 0xea, 0xfe, 0x01, 0x4d, 0xfe, 0xec, 0x9d, 0x3c, 0x66, 0x70, 0x38, 0xd3, 0x14, 0xf4, 0xab, 0xd5, 0x02, 0x54, 0x63, 0x1b, 0x54, 0x34, 0xfd, 0x19, 0x7d, 0xf1, 0x11, 0xcf, 0x07, 0xc7, 0x51, 0x04, 0xf6, 0x5b, 0xee, 0xd5, 0xbc, 0xfd, 0x8f, 0x9d, 0x08, 0x20, 0xca, 0xff, 0xb2, 0x68, 0xf9, 0x51, 0xdb, 0xfa, 0x96, 0x5d, 0x02, 0x5b, 0x83, 0xfa, 0x9a, 0x80, 0xf9, 0x37, 0xc9, 0xfc, 0xe3, 0xb1, 0xfb, 0xe1, 0x7f, 0xfe, 0xbd, 0x3d, 0xfb, 0x9f, 0x4b, 0xfe, 0x77, 0xa3, 0xff, 0xc9, 0x63, 0xfe, 0x38, 0x3e, 0x02, 0xf9, 0xb0, 0x02, 0xfe, 0x45, 0x02, 0x70, 0xb2, 0xff, 0x9c, 0xce, 0xff, 0x1b, 0xf6, 0xff, 0xde, 0x19, 0xfe, 0x98, 0xf6, 0x42, 0xd5, 0xf5, 0x3a, 0x27, 0x09, 0xef, 0x06, 0x3c, 0xff, 0xa8, 0x86, 0x1a, 0x02, 0x25, 0x01, 0xd0, 0x98, 0xf3, 0x52, 0x70, 0x04, 0x13, 0x28, 0x03, 0x3d, 0x42, 0xef, 0x57, 0xbd, 0xfe, 0x73, 0xcc, 0x07, 0xbe, 0xe5, 0xfe, 0xfd, 0xba, 0xf9, 0x14, 0xb5, 0xf9, 0x10, 0x03, 0x02, 0x46, 0x44, 0xfa, 0x91, 0xa4, 0xf8, 0x7d, 0xee, 0xfc, 0x67, 0xbf, 0xfb, 0xef, 0x0c, 0xff, 0xdb, 0xb2, 0xfb, 0x53, 0xae, 0xfd, 0x5d, 0x2c, 0x00, 0x26, 0xd4, 0xfe, 0x4d, 0xb0, 0x00, 0xf5, 0x93, 0x02, 0x72, 0x83, 0x03, 0x4d, 0x34, 0xff, 0xa8, 0xac, 0xff, 0x89, 0xf8, 0x00, 0x8d, 0xd1, 0xfd, 0x8c, 0x56, 0x48, 0x96, 0x56, 0x3e, 0x5b, 0xa7, 0xea, 0x8c, 0xd5, 0xfb, 0x5f, 0xd8, 0x18, 0x3c, 0x6a, 0x03, 0x53, 0xf6, 0xf6, 0x41, 0xad, 0x01, 0xf3, 0xa1, 0x01, 0xfb, 0x9e, 0xf0, 0x03, 0x8e, 0xff, 0x7b, 0xaf, 0x06, 0xa3, 0xe9, 0xfd, 0x08, 0xcd, 0xfa, 0xd8, 0x26, 0xf8, 0x3c, 0xf8, 0x00, 0x5a, 0xad, 0xfa, 0x7a, 0xa7, 0xf7, 0x12, 0x42, 0xfd, 0x7e, 0x19, 0xfc, 0xa9, 0x17, 0xff, 0xc1, 0x61, 0xfc, 0xb3, 0x6c, 0xfd, 0x90, 0x20, 0x00, 0xd0, 0xbc, 0xff, 0x54, 0xd7, 0xff, 0xd6, 0x71, 0x01, 0xfa, 0xb5, 0x04, 0x8b, 0x4e, 0xff, 0x85, 0xf8, 0xfe, 0xd6, 0xbb, 0x01, 0x44, 0xef, 0xfd, 0xd6, 0xfa, 0x4c, 0x93, 0x23, 0x42, 0xd7, 0x01, 0xe7, 0xef, 0x24, 0xf9, 0xdf, 0xbf, 0x16, 0xf5, 0x7a, 0x03, 0xd5, 0xe4, 0xfa, 0xbe, 0x01, 0x00, 0xfd, 0x06, 0x00, 0xed, 0x40, 0xf2, 0x0b, 0xc5, 0xff, 0xcb, 0xc6, 0x05, 0x66, 0x10, 0xfd, 0x78, 0xb9, 0xfb, 0x06, 0xf3, 0xf6, 0x28, 0x9f, 0xff, 0xfb, 0x2b, 0xfb, 0xc2, 0x31, 0xf7, 0x8b, 0xc2, 0xfd, 0x81, 0x45, 0xfc, 0xb9, 0x04, 0xff, 0x46, 0x28, 0xfd, 0x41, 0x75, 0xfd, 0x65, 0xd1, 0xff, 0x7e, 0xa7, 0x00, 0x0b, 0x0d, 0x00, 0xb3, 0xd7, 0xff, 0xc8, 0x8b, 0x05, 0x13, 0x02, 0x00, 0x05, 0x75, 0xfd, 0xae, 0x14, 0x02, 0x77, 0x99, 0xfe, 0x79, 0x97, 0x52, 0x37, 0xdb, 0x43, 0x38, 0xde, 0xe3, 0xf8, 0x88, 0xf8, 0xfa, 0xbe, 0x13, 0xae, 0x05, 0x02, 0xd9, 0x13, 0xfe, 0x4b, 0xc5, 0xff, 0x39, 0xd6, 0xfe, 0xfb, 0x44, 0xf3, 0x7f, 0x02, 0x00, 0x3b, 0xe2, 0x04, 0x71, 0x63, 0xfc, 0xe9, 0x20, 0xfc, 0x8a, 0x5d, 0xf6, 0x6a, 0x63, 0xfe, 0x6d, 0x4a, 0xfb, 0xe0, 0xc8, 0xf7, 0x31, 0xfe, 0xfd, 0x50, 0xe6, 0xfb, 0x66, 0x5d, 0xff, 0xb2, 0xc5, 0xfd, 0xfe, 0x8a, 0xfd, 0x5c, 0xd7, 0xff, 0x26, 0x02, 0x01, 0x22, 0x17, 0x01, 0xec, 0x09, 0xff, 0x7e, 0x10, 0x05, 0xf9, 0xbb, 0x00, 0xe7, 0x03, 0xfc, 0xf9, 0x73, 0x01, 0x66, 0x2f, 0xff, 0x3f, 0x98, 0x56, 0xc3, 0x00, 0x46, 0x0a, 0x9a, 0xe2, 0xad, 0xe6, 0xf7, 0xe9, 0x5c, 0x10, 0xff, 0x75, 0xff, 0x4c, 0x2b, 0x00, 0x0d, 0x7e, 0x00, 0x0d, 0x3c, 0xfe, 0x03, 0x77, 0xf3, 0xd9, 0x12, 0x00, 0x2d, 0x06, 0x04, 0xc9, 0x3f, 0xfb, 0x55, 0x04, 0xfd, 0x80, 0x20, 0xf6, 0x61, 0xe3, 0xfc, 0x70, 0x02, 0xfc, 0xc1, 0x88, 0xf8, 0x05, 0x99, 0xfd, 0x77, 0x5e, 0xfb, 0x9a, 0xdd, 0xff, 0x98, 0x55, 0xfe, 0x1d, 0x8d, 0xfd, 0xae, 0xf3, 0xff, 0x05, 0x3b, 0x01, 0xb2, 0xa7, 0x02, 0xf0, 0x7d, 0xfe, 0x05, 0x37, 0x03, 0xc4, 0x82, 0x01, 0xa6, 0x30, 0xfb, 0x5a, 0x6e, 0xff, 0x45, 0xa9, 0xff, 0x8b, 0x53, 0x59, 0xe2, 0xfb, 0x47, 0x38, 0x13, 0xe3, 0xdc, 0x15, 0xf8, 0x63, 0x69, 0x0c, 0xda, 0x03, 0xfc, 0x13, 0xe3, 0x01, 0x6b, 0xa8, 0x01, 0x89, 0xb8, 0xfd, 0x74, 0x97, 0xf3, 0x5d, 0x38, 0x00, 0x89, 0x97, 0x02, 0xf2, 0x3a, 0xfa, 0x10, 0xe5, 0xfe, 0x32, 0x23, 0xf6, 0x25, 0x86, 0xfb, 0x4e, 0xfa, 0xfc, 0x37, 0x1c, 0xf9, 0x3e, 0x02, 0xfd, 0xb2, 0xb0, 0xfa, 0x37, 0xae, 0x00, 0xf8, 0xed, 0xfe, 0x75, 0x11, 0xfd, 0xb9, 0xf8, 0x00, 0x35, 0xa5, 0x01, 0xa2, 0x0b, 0x03, 0xc9, 0x56, 0xfe, 0x98, 0x5d, 0x01, 0x3b, 0x88, 0x01, 0x5a, 0xfb, 0xfa, 0xf5, 0x02, 0xfe, 0x8b, 0x83, 0xff, 0xc9, 0x25, 0x5b, 0x5e, 0x10, 0x49, 0x1c, 0x08, 0xe5, 0x61, 0xa5, 0xf9, 0x4d, 0x4d, 0x07, 0x11, 0x0d, 0xf8, 0x5d, 0x6f, 0x03, 0x14, 0x43, 0x02, 0x05, 0x4b, 0xfd, 0xaf, 0xb4, 0xf3, 0x51, 0x35, 0x00, 0xee, 0xb4, 0x00, 0x03, 0xa9, 0xf9, 0x7c, 0xc6, 0x01, 0x6e, 0x22, 0xf6, 0xb2, 0x1e, 0xfa, 0x65, 0xff, 0xfd, 0xa1, 0x38, 0xf9, 0x10, 0x2c, 0xfc, 0x85, 0xb8, 0xfa, 0x04, 0x1b, 0x01, 0xaa, 0xec, 0xfe, 0x62, 0xd6, 0xfd, 0xac, 0xc5, 0x01, 0x81, 0x97, 0x00, 0x81, 0x3c, 0x03, 0x1f, 0xa9, 0xfe, 0xb0, 0x51, 0xff, 0x56, 0x00, 0x01, 0xb7, 0x18, 0xfc, 0xd9, 0x7d, 0xfd, 0xc0, 0xf1, 0xfd, 0xc8, 0xd6, 0x5b, 0x4f, 0x96, 0x49, 0xe1, 0x43, 0xe8, 0x99, 0xbc, 0xfb, 0x88, 0x99, 0x01, 0xe9, 0xc9, 0xf3, 0xc6, 0x6c, 0x04, 0xc7, 0x65, 0x02, 0x39, 0xa6, 0xfc, 0x48, 0x86, 0xf3, 0x03, 0x24, 0x00, 0xda, 0xff, 0xfe, 0x6a, 0xd5, 0xf9, 0x15, 0x00, 0x05, 0x04, 0xcd, 0xf5, 0x36, 0x08, 0xf9, 0x4f, 0x64, 0xfe, 0x9b, 0xb1, 0xf8, 0x04, 0x74, 0xfc, 0x9e, 0x44, 0xfa, 0xc9, 0x2d, 0x01, 0x3e, 0x1a, 0x00, 0x1d, 0x4f, 0xfd, 0xac, 0x58, 0x01, 0xb2, 0x0c, 0x00, 0x43, 0xef, 0x02, 0x42, 0x71, 0xfe, 0x4a, 0x48, 0xfe, 0x18, 0x73, 0x01, 0x8f, 0x29, 0xfc, 0x7d, 0xa3, 0xfd, 0xd3, 0x86, 0xfe, 0x95, 0x5b, 0x5a, 0x4a, 0x79, 0x4a, 0x2e, 0x50, 0xed, 0xfb, 0x17, 0xfe, 0x8b, 0xe8, 0xfc, 0x4e, 0x5f, 0xef, 0xb3, 0x7b, 0x04, 0x00, 0x8f, 0x02, 0xec, 0xee, 0xfb, 0xf0, 0x55, 0xf3, 0xc5, 0xb2, 0x00, 0xa3, 0x92, 0xfe, 0xef, 0xe7, 0xf9, 0xb5, 0x43, 0x08, 0xd6, 0x53, 0xf6, 0x77, 0x18, 0xf7, 0x45, 0xfb, 0xfe, 0x9f, 0xc5, 0xf8, 0x72, 0x72, 0xfc, 0x1a, 0x3c, 0xfb, 0x89, 0x09, 0x01, 0xd2, 0x30, 0xff, 0xcd, 0x11, 0xfd, 0xf8, 0x8b, 0x01, 0x44, 0xae, 0xfe, 0x4f, 0x81, 0x02, 0x80, 0xd8, 0xff, 0x24, 0xdc, 0xfd, 0xb4, 0x05, 0x01, 0xb3, 0xad, 0xfd, 0x11, 0xcb, 0xfe, 0xe5, 0x01, 0xfe, 0xbe, 0x0f, 0x5a, 0x40, 0x5b, 0x48, 0x1a, 0x9b, 0xf2, 0xd1, 0x0b, 0x01, 0x13, 0xe6, 0xf7, 0x02, 0xa0, 0xeb, 0xdb, 0x89, 0x02, 0xd3, 0x0b, 0x03, 0x1d, 0xca, 0xfa, 0xd6, 0x64, 0xf3, 0x41, 0xc2, 0x02, 0xf0, 0x18, 0xfd, 0x01, 0x17, 0xfb, 0x76, 0xd6, 0x0a, 0xe2, 0x0f, 0xf6, 0xe9, 0xe3, 0xf5, 0x5b, 0x50, 0xfe, 0xe7, 0x6e, 0xfa, 0x87, 0xac, 0xfd, 0xf2, 0xb4, 0xf9, 0x84, 0xb9, 0xff, 0x8e, 0x40, 0xff, 0x4e, 0x85, 0xfc, 0x29, 0x97, 0x00, 0xd4, 0xa7, 0xfe, 0x82, 0xf3, 0x02, 0xfe, 0xd9, 0xff, 0xbb, 0x5b, 0xfe, 0x6c, 0x33, 0x02, 0x9f, 0xf3, 0xfd, 0x9e, 0x04, 0xfe, 0x99, 0x8f, 0xfe, 0xe8, 0x93, 0x56, 0x4c, 0x08, 0x48, 0xe2, 0xf0, 0xf8, 0xa0, 0x31, 0x03, 0xb2, 0x8e, 0xf5, 0xcb, 0xc5, 0xe7, 0xbd, 0x97, 0xfe, 0x70, 0x7b, 0x03, 0x7a, 0xc4, 0xfb, 0xe0, 0xe9, 0xf3, 0xf0, 0xb1, 0x03, 0xd0, 0x1e, 0xfd, 0xf7, 0xf2, 0xfb, 0xe6, 0xfc, 0x0c, 0x88, 0xb5, 0xf5, 0xd9, 0x36, 0xf4, 0xb9, 0x22, 0x01, 0xe8, 0x2c, 0xfb, 0x00, 0x57, 0xfb, 0x5c, 0xd9, 0xf9, 0x3a, 0xa1, 0xfe, 0x9e, 0x26, 0xfe, 0xda, 0xd3, 0xfc, 0x53, 0x08, 0x01, 0x74, 0x61, 0xfe, 0x15, 0x9c, 0x02, 0x9e, 0xe5, 0x01, 0x6c, 0x87, 0xff, 0xe0, 0x75, 0x00, 0x7a, 0xf2, 0xfd, 0xc0, 0xab, 0x00, 0x8c, 0xcf, 0xfd, 0xb9, 0x69, 0x53, 0x88, 0x58, 0x46, 0x90, 0x9e, 0xfe, 0x88, 0x05, 0x05, 0x9b, 0x0c, 0xf4, 0x7e, 0x9c, 0xe4, 0xe5, 0x84, 0xf8, 0xa2, 0x06, 0x05, 0xbe, 0xe3, 0xfe, 0x60, 0x60, 0xf3, 0x2b, 0xa3, 0x03, 0x76, 0x8c, 0xfe, 0x29, 0x26, 0xfd, 0xca, 0x37, 0x0b, 0x66, 0xdc, 0xf7, 0x9f, 0x47, 0xf6, 0xa0, 0xbc, 0xfe, 0x9b, 0x2c, 0xfb, 0x78, 0x2b, 0xfb, 0xf9, 0x57, 0xf8, 0xbc, 0xae, 0xfd, 0x14, 0xbb, 0xfe, 0x8e, 0x8c, 0xfd, 0xf1, 0xc6, 0xff, 0x34, 0xa3, 0xff, 0xb8, 0x96, 0x04, 0x5a, 0x42, 0x00, 0xc5, 0x1c, 0xff, 0xfa, 0x04, 0x02, 0x23, 0xd5, 0xfd, 0xd0, 0xc8, 0x00, 0xb2, 0xa8, 0xfd, 0x45, 0x71, 0x50, 0xb2, 0xc9, 0x44, 0x9a, 0x3c, 0x01, 0x44, 0x39, 0x08, 0x45, 0x2d, 0xf4, 0x31, 0x4a, 0xdf, 0x98, 0xd5, 0xf4, 0x59, 0x43, 0x08, 0x86, 0xff, 0xff, 0xee, 0x6b, 0xf3, 0x8e, 0xd8, 0x05, 0x67, 0xd0, 0xfc, 0x1e, 0x2b, 0xfd, 0x23, 0xe5, 0x0e, 0xa3, 0x6a, 0xf7, 0x2f, 0x3e, 0xf5, 0x29, 0x7c, 0xff, 0xbb, 0x2e, 0xf9, 0x24, 0x3c, 0xfa, 0x77, 0xf3, 0xf9, 0x2b, 0x20, 0xfd, 0x23, 0xeb, 0xfd, 0x4e, 0x88, 0xfe, 0x59, 0xcb, 0x01, 0x7d, 0xdf, 0xff, 0x65, 0x4d, 0x02, 0xf6, 0x90, 0x00, 0x80, 0x3f, 0x01, 0xed, 0x9e, 0x01, 0x61, 0xf3, 0xfb, 0x5a, 0xe8, 0x01, 0x6c, 0xf9, 0xff, 0x38, 0x0f, 0x50, 0xc6, 0x53, 0x3f, 0x08, 0xbe, 0x02, 0x67, 0xc4, 0x0c, 0xa9, 0xf6, 0xf0, 0x69, 0x0e, 0xdd, 0xff, 0x8d, 0xf4, 0x42, 0x3b, 0x08, 0x6f, 0x55, 0x02, 0x63, 0x78, 0xf5, 0xad, 0xce, 0x03, 0x10, 0xa6, 0xfc, 0x78, 0xa5, 0x00, 0x02, 0x81, 0x0d, 0x7a, 0xfc, 0xf6, 0xd1, 0x89, 0xf6, 0x19, 0x85, 0xfc, 0x06, 0x73, 0xf8, 0x21, 0x2b, 0xfd, 0x6d, 0xcd, 0xf9, 0x1c, 0xb4, 0xfa, 0xfb, 0xd2, 0x00, 0xc4, 0x37, 0x01, 0x4d, 0xd8, 0xfe, 0x7a, 0x33, 0xff, 0xc9, 0x11, 0x04, 0xd9, 0x72, 0x00, 0xdc, 0xf3, 0xff, 0x04, 0xba, 0x01, 0xac, 0xea, 0xfc, 0xb6, 0xa8, 0x01, 0x04, 0xca, 0x00, 0x6c, 0xbf, 0x4c, 0x98, 0xf6, 0x3a, 0x46, 0x65, 0x05, 0x81, 0x85, 0x0e, 0xc3, 0xd8, 0xef, 0xb8, 0x64, 0xdd, 0x60, 0xcc, 0xf3, 0x8e, 0x54, 0x08, 0x21, 0xb1, 0x02, 0x8d, 0x1a, 0xf9, 0xef, 0xd5, 0x03, 0xa0, 0xb5, 0xf7, 0xe2, 0x2f, 0x04, 0x46, 0xd2, 0x0e, 0xcd, 0xa9, 0xf3, 0x04, 0xd1, 0xf6, 0x9d, 0x5e, 0xfc, 0x98, 0x7f, 0xf9, 0xc4, 0x6e, 0xfd, 0xe2, 0xa3, 0xf9, 0x5e, 0x34, 0xfd, 0xb7, 0x21, 0x01, 0x85, 0x20, 0xff, 0x2f, 0x3e, 0xff, 0x1a, 0xd3, 0x00, 0x97, 0x91, 0x02, 0x6c, 0x2e, 0xff, 0x72, 0xce, 0x00, 0x0f, 0x0f, 0x02, 0x75, 0x63, 0xfd, 0xb3, 0x52, 0x01, 0xa7, 0x5c, 0x00, 0xe0, 0x68, 0x47, 0xa9, 0xe4, 0x38, 0x34, 0x4c, 0x07, 0x3e, 0xdc, 0x0c, 0x5e, 0x56, 0xf0, 0xf7, 0xf6, 0xe2, 0x36, 0x7d, 0xf3, 0x88, 0xda, 0x02, 0xa7, 0xfa, 0x07, 0x8f, 0x9f, 0xfd, 0xb2, 0x80, 0xfc, 0xbf, 0x2a, 0xf8, 0xf9, 0x3b, 0x08, 0xe5, 0xbb, 0x0a, 0x16, 0xe6, 0xf2, 0x8c, 0x06, 0xfa, 0x4b, 0xa0, 0xfb, 0x70, 0x50, 0xf8, 0xa5, 0xe7, 0x00, 0x34, 0x83, 0xfb, 0x2c, 0xc8, 0xfa, 0xfa, 0x07, 0x01, 0x13, 0xa6, 0x00, 0x80, 0x17, 0xff, 0x33, 0x7f, 0xff, 0x7b, 0xea, 0x01, 0x08, 0x01, 0x00, 0x32, 0xd2, 0x00, 0xa0, 0xda, 0x01, 0x68, 0x07, 0xfe, 0xde, 0x54, 0x01, 0xbc, 0x41, 0x00, 0x18, 0x83, 0x48, 0x73, 0x22, 0x36, 0xc1, 0x1c, 0xff, 0xaa, 0x21, 0x0c, 0x7b, 0x26, 0xf3, 0x26, 0x6e, 0xe4, 0xa1, 0x92, 0xf9, 0xbd, 0xf8, 0x02, 0x62, 0x3f, 0x03, 0xbe, 0x17, 0xff, 0x8a, 0x89, 0xfd, 0xc8, 0x16, 0xf7, 0xb1, 0x22, 0x08, 0xdb, 0x13, 0x09, 0xba, 0xad, 0xf2, 0xc0, 0x75, 0xfb, 0x46, 0x34, 0xfc, 0xcd, 0x7f, 0xfa, 0x8f, 0xed, 0x01, 0x4a, 0xad, 0xf9, 0x22, 0x24, 0xfb, 0x83, 0x6a, 0x03, 0xa4, 0xde, 0xff, 0x77, 0xd1, 0xfc, 0x6f, 0x0e, 0x00, 0xb6, 0x6e, 0x02, 0x87, 0x03, 0x00, 0x47, 0xea, 0x00, 0xfa, 0xeb, 0x00, 0x5e, 0x98, 0xfe, 0x9d, 0x88, 0x02, 0x29, 0xca, 0xff, 0x56, 0x1b, 0x45, 0x41, 0x95, 0x2f, 0x36, 0xc5, 0xfe, 0x82, 0xb6, 0x0f, 0xf8, 0xcd, 0xf1, 0xa5, 0x49, 0xe9, 0x1b, 0x59, 0xfe, 0xd6, 0x9c, 0xfd, 0x89, 0x43, 0x04, 0xa6, 0x4c, 0x01, 0x90, 0x39, 0xf9, 0x4e, 0x2a, 0xf7, 0xfa, 0x34, 0x0a, 0x46, 0xd4, 0x07, 0x53, 0xb8, 0xf1, 0x0e, 0xfa, 0xfd, 0x74, 0x63, 0xfe, 0xae, 0x69, 0xfa, 0xaa, 0xb4, 0x01, 0x2f, 0x96, 0xf9, 0x2b, 0x57, 0xfc, 0xcd, 0xa6, 0x03, 0x4b, 0x59, 0xfe, 0x27, 0xa4, 0xfc, 0x44, 0xd8, 0x00, 0x61, 0x6e, 0x02, 0x53, 0x36, 0xff, 0x3d, 0xfd, 0x00, 0x6f, 0xf0, 0x01, 0xbe, 0xcb, 0xfe, 0x3c, 0x01, 0x02, 0x78, 0x9d, 0xff, 0x37, 0xb6, 0x3f, 0xde, 0x14, 0x2a, 0x78, 0x0f, 0xff, 0x3d, 0xa5, 0x11, 0x41, 0x19, 0xf6, 0x0d, 0x3f, 0xeb, 0x61, 0x89, 0xfd, 0xca, 0xb4, 0xff, 0x27, 0x67, 0x03, 0x27, 0x3b, 0xfe, 0x6e, 0x7a, 0xf9, 0xf6, 0x3c, 0xf9, 0x1b, 0x65, 0x09, 0x87, 0x88, 0x05, 0xa7, 0x5c, 0xf4, 0x6e, 0x6e, 0x00, 0xdd, 0xe8, 0xfd, 0x96, 0x93, 0xfa, 0xb2, 0xa0, 0x01, 0x98, 0x8d, 0xfa, 0x52, 0xe7, 0xfc, 0x65, 0xa9, 0x02, 0xc1, 0xd2, 0xfd, 0x51, 0xfd, 0xfc, 0xd8, 0xbb, 0x01, 0x03, 0x81, 0x01, 0xf5, 0x5d, 0xfe, 0x83, 0x2c, 0x02, 0x78, 0x93, 0x02, 0xe9, 0x8b, 0xfe, 0x9f, 0x6a, 0x01, 0x79, 0x90, 0xff, 0x4b, 0xd7, 0x3c, 0x39, 0x02, 0x31, 0x64, 0xd6, 0x09, 0xa6, 0xec, 0x08, 0xc3, 0x78, 0xe1, 0xb4, 0x04, 0xe1, 0xd4, 0x4f, 0x04, 0xea, 0xf0, 0x0d, 0xb3, 0xce, 0x08, 0x9d, 0x06, 0xfb, 0x20, 0xaf, 0xf7, 0x5c, 0x1d, 0xf3, 0x39, 0x4d, 0x01, 0xbd, 0xa7, 0x07, 0x6b, 0x28, 0xf8, 0x0d, 0x3f, 0x02, 0xe0, 0x4d, 0x02, 0xc5, 0x3e, 0xfb, 0xf8, 0x49, 0x02, 0x32, 0x64, 0xff, 0xcf, 0xb0, 0xfe, 0x07, 0x29, 0x02, 0x8c, 0xd8, 0xfe, 0xd0, 0x97, 0xfd, 0x6f, 0x23, 0xff, 0x41, 0x5e, 0xfd, 0x37, 0xe3, 0xfd, 0xad, 0x02, 0x02, 0x8d, 0x4a, 0xff, 0x94, 0x89, 0xfd, 0xa5, 0x59, 0x03, 0x3d, 0x63, 0x01, 0xbf, 0x3c, 0x33, 0x99, 0xcb, 0x2e, 0x68, 0x9d, 0x0d, 0xc3, 0xbc, 0x0a, 0x4c, 0x71, 0xe8, 0xc2, 0x27, 0xe0, 0xdc, 0xd3, 0xfe, 0x3f, 0x6b, 0x0b, 0xd5, 0xd4, 0x07, 0xec, 0x00, 0x00, 0xa1, 0x35, 0xfb, 0x63, 0x85, 0xf3, 0xb1, 0x34, 0xfe, 0xcf, 0x47, 0x05, 0x85, 0xae, 0xfb, 0xc9, 0x7a, 0x02, 0xde, 0x4b, 0x01, 0xf4, 0x08, 0xfc, 0xbb, 0x64, 0x02, 0xf9, 0x48, 0x00, 0xd3, 0x4f, 0xfe, 0x91, 0xd6, 0x01, 0x04, 0x4e, 0x00, 0x6f, 0x2d, 0xfe, 0x9b, 0x41, 0xff, 0xa0, 0xba, 0xfd, 0x07, 0x4c, 0xfd, 0x3a, 0xdf, 0x00, 0x2c, 0x7c, 0xfe, 0x15, 0xc1, 0xfd, 0x5d, 0x11, 0x04, 0xab, 0xf1, 0x01, 0x74, 0x52, 0x2c, 0xaa, 0xa1, 0x2a, 0xfb, 0x89, 0x0e, 0xd0, 0xd4, 0x0b, 0x3b, 0x8e, 0xed, 0x0f, 0xf2, 0xe3, 0x15, 0xf1, 0xfd, 0x14, 0x21, 0x08, 0xe5, 0xc4, 0x05, 0x12, 0x17, 0x01, 0x68, 0xd6, 0xfc, 0xbc, 0x62, 0xf5, 0xe2, 0x19, 0xfd, 0x52, 0xcb, 0x04, 0x98, 0x60, 0xfd, 0xad, 0x06, 0x01, 0xf9, 0xf8, 0x00, 0x97, 0xe3, 0xfc, 0x3e, 0xcc, 0x01, 0x43, 0xac, 0x00, 0x89, 0x80, 0xfe, 0x1c, 0x23, 0x01, 0x4d, 0xab, 0x00, 0x99, 0xfc, 0xfe, 0xf6, 0xeb, 0xfe, 0x9f, 0xc1, 0xfd, 0xed, 0xd4, 0xfd, 0x01, 0x2b, 0x00, 0x26, 0x60, 0xfe, 0xcb, 0xb4, 0xfe, 0xe8, 0xc0, 0x03, 0xc0, 0x0e, 0x02, 0x3b, 0x77, 0x24, 0x60, 0x25, 0x26, 0x40, 0xdc, 0x10, 0x9a, 0x24, 0x0c, 0x0b, 0xba, 0xf1, 0x42, 0x58, 0xe9, 0x27, 0x8b, 0xfc, 0x3b, 0xb8, 0x04, 0xfd, 0x22, 0x05, 0x26, 0xc0, 0x01, 0xf9, 0x2a, 0xfe, 0x62, 0x75, 0xf7, 0x2f, 0x90, 0xfc, 0x8f, 0x34, 0x04, 0xe9, 0x38, 0xfe, 0x2b, 0x0c, 0x00, 0x60, 0xed, 0x00, 0xd2, 0xaf, 0xfd, 0xd8, 0x48, 0x01, 0x27, 0xf9, 0x00, 0x27, 0xf2, 0xfe, 0x36, 0xad, 0x00, 0xf6, 0x1d, 0x01, 0x3b, 0x9b, 0xff, 0x14, 0xa0, 0xfe, 0x84, 0x02, 0xfe, 0xa1, 0x3f, 0xfe, 0x95, 0xf2, 0xff, 0x54, 0x47, 0xff, 0x2c, 0xc7, 0xff, 0xbe, 0x03, 0x03, 0xca, 0xe2, 0x01, 0x30, 0x91, 0x1e, 0x0f, 0x0e, 0x23, 0x2b, 0xb4, 0x12, 0xc4, 0xa2, 0x0b, 0xc9, 0xa2, 0xf4, 0x67, 0x84, 0xed, 0xe8, 0xa8, 0xfb, 0x3b, 0x1e, 0x03, 0xab, 0xc0, 0x04, 0x12, 0xd0, 0x01, 0x69, 0x4a, 0xff, 0x8e, 0x4a, 0xf9, 0xeb, 0x85, 0xfc, 0x24, 0x46, 0x03, 0x33, 0x93, 0xfe, 0x91, 0x0b, 0x00, 0x7e, 0x12, 0x01, 0xe9, 0x06, 0xfe, 0x71, 0xfa, 0x00, 0xae, 0x79, 0x01, 0xb5, 0x75, 0xff, 0xa8, 0x75, 0x00, 0x6d, 0x59, 0x01, 0xff, 0xd1, 0xff, 0x7c, 0xb6, 0xfe, 0x93, 0xdf, 0xfe, 0x0b, 0x31, 0xff, 0xf6, 0x09, 0x00, 0xbb, 0x92, 0xff, 0x73, 0x25, 0x00, 0x2a, 0x39, 0x02, 0xc3, 0x5e, 0x01, 0x53, 0xc3, 0x18, 0xd8, 0x90, 0x1f, 0xe5, 0xca, 0x13, 0xfe, 0xb5, 0x0b, 0x84, 0xd4, 0xf7, 0xb0, 0x89, 0xf0, 0x1c, 0xe6, 0xfa, 0x19, 0x23, 0x02, 0x71, 0x4b, 0x04, 0x92, 0x27, 0x02, 0xdc, 0x1a, 0x00, 0x31, 0xa4, 0xfa, 0x0a, 0xd8, 0xfc, 0xcf, 0x83, 0x02, 0x1b, 0xa5, 0xfe, 0xc0, 0xdd, 0xff, 0x6d, 0x5d, 0x01, 0x22, 0xae, 0xfe, 0xea, 0xbc, 0x00, 0xdb, 0xac, 0x01, 0x4d, 0xf9, 0xff, 0xdc, 0x62, 0x00, 0x8b, 0x66, 0x01, 0x80, 0xa1, 0x00, 0xf0, 0xd1, 0xff, 0x18, 0xdc, 0xff, 0xf9, 0x61, 0xff, 0xdf, 0x1e, 0xff, 0xd3, 0x66, 0xff, 0x84, 0x3c, 0x00, 0xb9, 0x14, 0x01, 0x6a, 0xb7, 0x00, 0x0c, 0xe1, 0x14, 0x56, 0x91, 0x1c, 0x6e, 0x39, 0x14, 0x8b, 0x8f, 0x0c, 0x1a, 0x21, 0xfa, 0xd1, 0x46, 0xf2, 0x8c, 0xbb, 0xfa, 0x09, 0xc6, 0x01, 0x62, 0x49, 0x04, 0x4c, 0x97, 0x02, 0x93, 0x64, 0x00, 0x5e, 0xd3, 0xfb, 0x14, 0xac, 0xfd, 0xdd, 0xc8, 0x01, 0xb8, 0x83, 0xfe, 0x97, 0x59, 0x00, 0x07, 0xd7, 0x01, 0xea, 0x18, 0xff, 0x9b, 0xfd, 0x00, 0xc5, 0xc4, 0x01, 0x71, 0x38, 0x00, 0x4f, 0x92, 0x01, 0x03, 0x96, 0x02, 0x6e, 0xee, 0x00, 0x17, 0xdd, 0xff, 0xb0, 0x0a, 0x00, 0xd2, 0x20, 0xff, 0x15, 0x37, 0xfe, 0x4d, 0x43, 0xff, 0x08, 0x73, 0x00, 0x8d, 0x96, 0x00, 0xe1, 0xac, 0x00, 0x5d, 0x9d, 0x12, 0x80, 0xab, 0x1a, 0x87, 0x91, 0x13, 0xc9, 0xc2, 0x0b, 0x60, 0xe5, 0xfa, 0x33, 0xf7, 0xf3, 0x3c, 0x91, 0xfb, 0x31, 0x75, 0x01, 0xcd, 0xc3, 0x03, 0xa0, 0xad, 0x02, 0x2c, 0xc7, 0x00, 0xe0, 0xaf, 0xfc, 0x3f, 0xd5, 0xfd, 0xe4, 0x43, 0x01, 0x3c, 0xb6, 0xfe, 0x27, 0xb8, 0x00, 0x71, 0x01, 0x02, 0xf3, 0x24, 0xff, 0xdf, 0x42, 0x01, 0x26, 0xc5, 0x02, 0xc4, 0x61, 0x01, 0x64, 0xe1, 0x01, 0x43, 0x14, 0x02, 0x41, 0x67, 0x00, 0xbc, 0x7a, 0xff, 0xed, 0x65, 0xff, 0x48, 0x1b, 0xfe, 0x03, 0x0b, 0xfe, 0xeb, 0xe6, 0xff, 0x4a, 0x08, 0x00, 0x8c, 0x30, 0x00, 0xab, 0xb6, 0x00, 0xed, 0x55, 0x10, 0xe0, 0x2e, 0x18, 0x41, 0xf8, 0x12, 0x92, 0xfb, 0x0b, 0x6c, 0xfe, 0xfb, 0xd4, 0x14, 0xf5, 0xe4, 0xe3, 0xfb, 0x3a, 0x86, 0x01, 0x75, 0xf8, 0x03, 0xdc, 0xd3, 0x02, 0x3a, 0xec, 0x00, 0xa2, 0xac, 0xfd, 0x19, 0x59, 0xfe, 0x60, 0x03, 0x01, 0x1c, 0x0d, 0xff, 0xc8, 0xb8, 0x00, 0xa8, 0x9b, 0x02, 0x5e, 0x51, 0x01, 0xbb, 0x60, 0x02, 0x74, 0x80, 0x02, 0xe7, 0x12, 0x01, 0xdd, 0x41, 0x01, 0xe4, 0x49, 0x01, 0x4d, 0x67, 0xff, 0xe7, 0xc6, 0xfe, 0x7a, 0x77, 0xff, 0xa1, 0x13, 0xfe, 0x6d, 0x41, 0xfe, 0xf2, 0x44, 0x00, 0xf8, 0x93, 0xff, 0x6b, 0x44, 0xff, 0x1a, 0xa8, 0x00, 0xd5, 0xad, 0x0f, 0x8e, 0xa2, 0x17, 0x92, 0xd9, 0x11, 0xa7, 0x6d, 0x0a, 0x27, 0x1a, 0xfc, 0xfc, 0x73, 0xf6, 0xfc, 0x21, 0xfd, 0x68, 0xf9, 0x01, 0x8f, 0x11, 0x04, 0x81, 0xe0, 0x02, 0x19, 0x27, 0x01, 0x4a, 0xd7, 0xfe, 0xd8, 0xb3, 0xfe, 0x3a, 0x99, 0x00, 0xae, 0x2a, 0x00, 0x51, 0x7f, 0x02, 0x27, 0xd0, 0x03, 0x70, 0x7d, 0x01, 0xa8, 0x68, 0x01, 0xd2, 0xa3, 0x01, 0x2b, 0xb2, 0x00, 0xf9, 0xad, 0x00, 0x7d, 0x8c, 0x00, 0x1f, 0x51, 0xff, 0x11, 0x20, 0xff, 0x49, 0x49, 0xff, 0xb1, 0x5b, 0xfe, 0xa7, 0xba, 0xfe, 0x5f, 0x62, 0xff, 0xb4, 0x9d, 0xff, 0x27, 0x9d, 0x00, 0x22, 0x8c, 0x00, 0x73, 0x63, 0x0f, 0xbd, 0xeb, 0x16, 0x96, 0x9d, 0x10, 0x00, 0xfe, 0x08, 0x71, 0xea, 0xfb, 0x3e, 0xe9, 0xf7, 0xd9, 0xd2, 0xfe, 0x17, 0x79, 0x02, 0x01, 0x12, 0x04, 0x1f, 0x50, 0x03, 0x87, 0x98, 0x01, 0x1a, 0x77, 0xff, 0x2b, 0xd3, 0xff, 0x62, 0x56, 0x02, 0xb6, 0x67, 0x01, 0x5f, 0x04, 0x02, 0x36, 0xa8, 0x02, 0x4d, 0x93, 0x00, 0x7e, 0x95, 0x00, 0x34, 0xda, 0x00, 0x2a, 0x69, 0x00, 0xed, 0x9e, 0x00, 0x1a, 0x6d, 0x00, 0xd8, 0x68, 0xff, 0xcc, 0xd9, 0xfe, 0x60, 0x15, 0xff, 0x0d, 0x65, 0xfe, 0x1d, 0x2e, 0xff, 0x65, 0xb3, 0x00, 0x95, 0x86, 0xff, 0x95, 0x78, 0xff, 0x92, 0x40, 0x00, 0x36, 0x41, 0x0f, 0x72, 0xd5, 0x16, 0x91, 0x50, 0x0f, 0x24, 0xb7, 0x07, 0x06, 0x94, 0xfc, 0x6a, 0x05, 0xf9, 0x4e, 0xeb, 0xff, 0x9f, 0x84, 0x03, 0x1d, 0x3a, 0x04, 0xf3, 0x21, 0x03, 0xee, 0xc9, 0x02, 0xf7, 0xc8, 0x01, 0x86, 0x17, 0x00, 0x93, 0x0b, 0x01, 0x28, 0xf0, 0x00, 0x98, 0x2a, 0x01, 0xfc, 0x95, 0x01, 0xee, 0x56, 0x00, 0x72, 0x5e, 0x00, 0x96, 0xc8, 0x00, 0x5d, 0x9c, 0x00, 0xa2, 0x7b, 0x00, 0x4c, 0x10, 0x00, 0x29, 0x3e, 0xff, 0x76, 0xac, 0xfe, 0x34, 0x53, 0xff, 0x2c, 0x08, 0x00, 0xe8, 0xbc, 0xff, 0x3e, 0x2d, 0xff, 0x45, 0x15, 0xff, 0xf8, 0xb9, 0xff, 0xcc, 0x2e, 0x00, 0x8e, 0x5e, 0x0e, 0x4f, 0x4f, 0x16, 0x5a, 0xd0, 0x0e, 0x18, 0x19, 0x07, 0xed, 0xbe, 0xfd, 0xff, 0xcf, 0xfa, 0xf5, 0x18, 0x01, 0x83, 0x38, 0x04, 0x37, 0x0e, 0x05, 0xfd, 0xd8, 0x04, 0xea, 0x17, 0x03, 0x3b, 0x69, 0x00, 0x57, 0x48, 0xff, 0x66, 0x06, 0x00, 0x1d, 0xd4, 0xff, 0x44, 0xc9, 0x00, 0xaf, 0x2f, 0x01, 0x14, 0x69, 0x00, 0xe8, 0x83, 0x00, 0xec, 0x6f, 0x00, 0x8a, 0x64, 0x00, 0x35, 0x29, 0x00, 0xef, 0x04, 0x00, 0x17, 0x72, 0xff, 0x8f, 0x9c, 0xff, 0x84, 0xbe, 0x00, 0xa0, 0x48, 0xff, 0xb3, 0x59, 0xfe, 0x9e, 0x2e, 0xff, 0x6a, 0x67, 0xff, 0xac, 0x90, 0xff, 0xbd, 0x5c, 0xff, 0xf9, 0x31, 0x0e, 0x28, 0x4c, 0x16, 0xec, 0x13, 0x0e, 0xd5, 0x47, 0x06, 0xec, 0x4f, 0xff, 0xdf, 0xe8, 0xfc, 0xb2, 0x10, 0x02, 0xc4, 0xb8, 0x05, 0x86, 0x86, 0x05, 0x70, 0xfa, 0x02, 0xf2, 0xa7, 0x01, 0x82, 0x14, 0x00, 0xb9, 0xea, 0xfe, 0xec, 0xbf, 0xff, 0xa3, 0x75, 0xff, 0xd4, 0x9f, 0x00, 0x13, 0x4c, 0x01, 0x2e, 0x2a, 0x00, 0x26, 0x39, 0x00, 0xf5, 0x28, 0x00, 0x5e, 0xae, 0x00, 0x0e, 0x7a, 0x00, 0x6c, 0xa2, 0xff, 0x32, 0xe3, 0x00, 0x1e, 0xaa, 0x00, 0x9e, 0xcd, 0xfe, 0xc6, 0xa9, 0xfe, 0x93, 0x1a, 0xff, 0x18, 0x1e, 0xff, 0x45, 0xdd, 0xfe, 0x28, 0x37, 0xff, 0xb1, 0xf9, 0xff, 0x07, 0xa5, 0x0e, 0xd3, 0xa3, 0x16, 0x45, 0x7a, 0x0d, 0x2a, 0xd4, 0x05, 0x20, 0x67, 0x00, 0x1f, 0x0d, 0xff, 0xee, 0x68, 0x03, 0xcf, 0xfd, 0x04, 0xe2, 0xd8, 0x03, 0x03, 0xd8, 0x01, 0xe2, 0x04, 0x01, 0x81, 0xd9, 0xff, 0xac, 0x23, 0xff, 0x83, 0xd7, 0xff, 0xac, 0x1a, 0xff, 0xbd, 0x6b, 0x00, 0x78, 0x54, 0x01, 0xd4, 0xb5, 0xff, 0x0c, 0xd0, 0xff, 0x07, 0x08, 0x01, 0x77, 0x05, 0x01, 0x48, 0xd8, 0xff, 0x86, 0x1e, 0x01, 0x63, 0x8e, 0x01, 0xef, 0xca, 0xfe, 0x3e, 0xad, 0xfe, 0xf2, 0x42, 0xff, 0xc3, 0xbe, 0xfe, 0x89, 0x8e, 0xfe, 0xaf, 0xe4, 0xfe, 0xcd, 0xd5, 0xff, 0x84, 0x1d, 0xff, 0xd7, 0x7d, 0x0e, 0x2d, 0xbf, 0x17, 0x1c, 0xc4, 0x0e, 0x8f, 0xca, 0x05, 0xb8, 0x7a, 0x00, 0xa4, 0x1c, 0xff, 0x7f, 0x9c, 0x02, 0x61, 0x1b, 0x04, 0x45, 0x53, 0x03, 0xac, 0x60, 0x01, 0x0f, 0x17, 0x01, 0x18, 0x4d, 0x00, 0x02, 0x8b, 0xfe, 0xfc, 0xa7, 0xff, 0x3b, 0xb1, 0xff, 0x0a, 0xd4, 0xff, 0xd7, 0xf2, 0x00, 0x01, 0x10, 0x00, 0x4f, 0x5b, 0x00, 0x7f, 0x17, 0x01, 0x3d, 0x7c, 0x00, 0xec, 0x9b, 0x01, 0xfb, 0xe3, 0x01, 0x6a, 0x51, 0xff, 0x8e, 0xec, 0xfe, 0xd3, 0xd7, 0xff, 0x01, 0xbf, 0xfe, 0xb4, 0xdf, 0xfd, 0x4c, 0xa8, 0xfe, 0xeb, 0x83, 0xff, 0xd1, 0xf8, 0xfe, 0xfb, 0xc1, 0xfe, 0x6d, 0x5c, 0x0f, 0x65, 0x51, 0x19, 0x29, 0x84, 0x0f, 0xdf, 0x15, 0x05, 0xca, 0x8a, 0xff, 0xbd, 0xc2, 0xfd, 0xc4, 0xf4, 0x00, 0x1e, 0x21, 0x04, 0x5c, 0x20, 0x04, 0x55, 0x71, 0x01, 0x3f, 0x13, 0x01, 0x7a, 0x62, 0x00, 0x63, 0x52, 0xfe, 0x97, 0x32, 0xff, 0xba, 0xca, 0xff, 0xaf, 0x47, 0x00, 0xed, 0xbb, 0x00, 0xa3, 0x4e, 0x00, 0x36, 0xe2, 0x00, 0x28, 0x4d, 0x00, 0x15, 0x11, 0x01, 0x99, 0xf7, 0x02, 0x96, 0xbe, 0x00, 0xfc, 0xde, 0xfe, 0x1d, 0x9e, 0xff, 0xfd, 0x9d, 0xff, 0x8c, 0x9e, 0xfe, 0x40, 0xe0, 0xfd, 0xe1, 0xd6, 0xfe, 0x3d, 0xfa, 0xfe, 0x6e, 0x50, 0xfe, 0x8d, 0x92, 0xff, 0xea, 0x83, 0x0f, 0x0f, 0xbf, 0x1a, 0x27, 0x89, 0x10, 0xce, 0x3d, 0x04, 0x13, 0x96, 0xfe, 0x90, 0xac, 0xfc, 0xc5, 0xd6, 0xff, 0xc1, 0xdf, 0x03, 0xc0, 0xe3, 0x03, 0x6b, 0x6e, 0x01, 0x8c, 0xa6, 0x01, 0xcb, 0x7b, 0x00, 0x2a, 0xfe, 0xfd, 0x28, 0x47, 0xff, 0x03, 0x15, 0x00, 0x71, 0x2c, 0x00, 0x2c, 0xad, 0x00, 0x71, 0x02, 0x01, 0xae, 0xac, 0x00, 0xfc, 0x6d, 0xff, 0x65, 0x0f, 0x02, 0x61, 0x99, 0x03, 0x91, 0x05, 0x00, 0xc6, 0x02, 0xff, 0xde, 0x05, 0x00, 0x6f, 0x6a, 0xff, 0x1c, 0x5b, 0xfe, 0x88, 0x73, 0xfe, 0xcf, 0x0f, 0xff, 0xd1, 0x2f, 0xfe, 0x92, 0x16, 0xfe, 0xf5, 0xce, 0xff, 0x28, 0xbe, 0x0e, 0xb9, 0xfb, 0x1a, 0x5b, 0x2a, 0x12, 0x68, 0x6d, 0x04, 0x4a, 0x7f, 0xfd, 0x9e, 0xfa, 0xfb, 0xb5, 0xca, 0xff, 0x30, 0x2c, 0x04, 0xfd, 0xbf, 0x03, 0xe7, 0x97, 0x00, 0xd7, 0xa2, 0x00, 0x9b, 0x71, 0x00, 0xfc, 0xc3, 0xfe, 0x2b, 0x62, 0xff, 0x87, 0xed, 0xff, 0xc9, 0xbb, 0x00, 0x2f, 0xf8, 0x00, 0x59, 0x5e, 0x00, 0x7c, 0x90, 0x00, 0x55, 0xbf, 0xff, 0x7a, 0x7d, 0x01, 0x64, 0xa5, 0x03, 0xcd, 0xe9, 0x00, 0xdd, 0xfc, 0xfe, 0x80, 0xd2, 0xff, 0xc8, 0x97, 0xff, 0xb5, 0x75, 0xfe, 0xc4, 0xae, 0xfe, 0xdf, 0x10, 0xff, 0x5a, 0x21, 0xfe, 0x72, 0x43, 0xfe, 0x0c, 0xa7, 0xff, 0xb7, 0x8e, 0x0d, 0xce, 0xb0, 0x1a, 0x45, 0x2e, 0x14, 0x1b, 0xc4, 0x05, 0xa2, 0xcc, 0xfc, 0x5e, 0xfc, 0xfa, 0x5d, 0x84, 0xff, 0x4b, 0x93, 0x04, 0x42, 0xb9, 0x04, 0xb5, 0xe1, 0x00, 0xfc, 0x4e, 0xff, 0x09, 0x68, 0xff, 0x49, 0x75, 0xfe, 0xde, 0xd3, 0xfe, 0x6c, 0x52, 0x00, 0xd8, 0xd1, 0x01, 0x65, 0x40, 0x01, 0xf5, 0x45, 0x00, 0xf5, 0xd8, 0x00, 0xf5, 0x8a, 0xff, 0x0f, 0x6c, 0x00, 0x61, 0xd1, 0x03, 0xf5, 0x1d, 0x02, 0x96, 0x08, 0xff, 0x45, 0x94, 0xff, 0x4c, 0x19, 0x00, 0x9f, 0x06, 0xff, 0xf6, 0xda, 0xfe, 0x0a, 0x2c, 0xff, 0x3e, 0x7c, 0xfe, 0x2c, 0x6b, 0xfe, 0x0a, 0xa0, 0xff, 0x89, 0x4a, 0x0d, 0x98, 0xc0, 0x1a, 0x69, 0x35, 0x15, 0x52, 0x83, 0x06, 0xc9, 0x5d, 0xfc, 0xdc, 0x2b, 0xfa, 0xb8, 0x1e, 0xff, 0x56, 0xf2, 0x04, 0xd1, 0x57, 0x05, 0x05, 0x0f, 0x01, 0xb1, 0xea, 0xfe, 0x86, 0x03, 0xff, 0xda, 0x32, 0xfe, 0xd6, 0xdb, 0xfd, 0x88, 0x2b, 0xff, 0xf3, 0x89, 0x01, 0x97, 0x01, 0x02, 0x49, 0xaf, 0x00, 0x6c, 0x93, 0x00, 0x73, 0x21, 0x00, 0x72, 0xfd, 0xff, 0x79, 0x97, 0x02, 0x98, 0xdd, 0x02, 0x2e, 0xaa, 0xff, 0x34, 0xea, 0xfe, 0x9c, 0xb4, 0xff, 0x56, 0x6f, 0xff, 0xa0, 0x81, 0xff, 0xb9, 0x77, 0xff, 0x64, 0x87, 0xfe, 0xa8, 0x49, 0xfe, 0xda, 0xc2, 0xff, 0x61, 0xea, 0x0d, 0xb0, 0xb0, 0x1b, 0x4b, 0x90, 0x15, 0xb8, 0xbd, 0x06, 0x35, 0xe2, 0xfb, 0xc5, 0x1e, 0xf9, 0x02, 0x3c, 0xff, 0x21, 0x7e, 0x05, 0x06, 0xaa, 0x05, 0xbd, 0x44, 0x01, 0xe2, 0x73, 0xfe, 0x71, 0xd4, 0xfe, 0x23, 0x81, 0xfe, 0x41, 0x9e, 0xfd, 0x0d, 0x84, 0xfe, 0x06, 0xae, 0x00, 0xe2, 0x75, 0x01, 0xbe, 0x97, 0x00, 0x78, 0x7d, 0x00, 0xa4, 0xc2, 0x00, 0xce, 0x75, 0x00, 0x53, 0xca, 0x01, 0x33, 0xe8, 0x02, 0x5a, 0xad, 0x00, 0x56, 0x7a, 0xfe, 0x84, 0xb5, 0xfe, 0x36, 0x7f, 0xff, 0x67, 0xe3, 0xff, 0x26, 0xfb, 0xff, 0xd3, 0x0f, 0xff, 0x39, 0x73, 0xfe, 0xb8, 0xd1, 0xff, 0xa3, 0xca, 0x0e, 0x44, 0x18, 0x1d, 0xf8, 0x88, 0x16, 0xc3, 0xd8, 0x06, 0xae, 0xef, 0xfa, 0x9a, 0x20, 0xf8, 0xbb, 0xf8, 0xfe, 0x12, 0x33, 0x06, 0xcf, 0x85, 0x06, 0xc2, 0xe8, 0x00, 0xbd, 0xec, 0xfd, 0x13, 0xdb, 0xfe, 0x18, 0x91, 0xfe, 0x24, 0xba, 0xfd, 0x07, 0x6b, 0xfe, 0x00, 0x27, 0x00, 0x41, 0x04, 0x01, 0x3a, 0x25, 0x00, 0xb4, 0x4b, 0xff, 0x71, 0x6a, 0x00, 0x72, 0x2b, 0x01, 0x0d, 0x68, 0x01, 0x53, 0xcc, 0x02, 0x25, 0xf7, 0x01, 0xe5, 0x09, 0xff, 0xe7, 0xb1, 0xfd, 0x87, 0x75, 0xfe, 0x33, 0xa9, 0xff, 0x01, 0x5b, 0x00, 0x9d, 0xbd, 0xff, 0x49, 0x97, 0xfe, 0x56, 0xf0, 0xff, 0xaf, 0xb5, 0x0f, 0x5a, 0x09, 0x1f, 0x98, 0xa7, 0x17, 0x0c, 0x18, 0x06, 0x13, 0xca, 0xf9, 0xf2, 0x8f, 0xf7, 0x74, 0xb9, 0xfe, 0xf8, 0xce, 0x06, 0xf3, 0x2b, 0x07, 0x2a, 0x5e, 0x00, 0x75, 0x45, 0xfd, 0xf5, 0xb7, 0xfe, 0xf1, 0xa6, 0xfe, 0x54, 0xe1, 0xfd, 0x77, 0x7b, 0xfe, 0xc4, 0xdf, 0xff, 0xed, 0x91, 0x00, 0x5d, 0x33, 0x00, 0xd8, 0xdd, 0xfe, 0x73, 0x4b, 0xff, 0xca, 0xeb, 0x00, 0xc2, 0x54, 0x01, 0x3f, 0x1b, 0x02, 0x85, 0x42, 0x02, 0x5d, 0x65, 0x00, 0x28, 0xea, 0xfd, 0x78, 0x6d, 0xfd, 0x97, 0xed, 0xfe, 0xce, 0x38, 0x00, 0x47, 0xe4, 0xff, 0x4f, 0xa7, 0xfe, 0xfc, 0xe7, 0xff, 0x84, 0x59, 0x11, 0x65, 0xa4, 0x21, 0x9f, 0xe0, 0x18, 0x87, 0x1d, 0x05, 0x91, 0x67, 0xf8, 0xce, 0x99, 0xf6, 0x19, 0x2a, 0xfe, 0x16, 0x27, 0x08, 0xfa, 0x44, 0x08, 0x6f, 0x47, 0xff, 0xc1, 0x44, 0xfc, 0x48, 0x9a, 0xfe, 0x3d, 0xdf, 0xfe, 0xc6, 0xed, 0xfd, 0x43, 0x89, 0xfe, 0xb1, 0xfd, 0xff, 0xcc, 0x47, 0x00, 0x84, 0x03, 0x00, 0x4c, 0xab, 0xfe, 0xaf, 0xc5, 0xfe, 0x3c, 0x82, 0x00, 0xa8, 0xfb, 0x00, 0x0c, 0x49, 0x01, 0xad, 0xcc, 0x01, 0x67, 0x2b, 0x01, 0x95, 0xa4, 0xfe, 0x20, 0x72, 0xfd, 0x2d, 0x63, 0xfe, 0x27, 0xa1, 0xff, 0x01, 0x03, 0x00, 0x81, 0xb0, 0xfe, 0x4f, 0x89, 0xff, 0xfa, 0x55, 0x13, 0xc8, 0x63, 0x24, 0x14, 0x9b, 0x19, 0xaf, 0xe1, 0x03, 0xc3, 0xfd, 0xf6, 0x95, 0x74, 0xf5, 0x35, 0xf8, 0xfd, 0x57, 0xaa, 0x09, 0x30, 0xfe, 0x08, 0x2e, 0x29, 0xfe, 0xad, 0x44, 0xfb, 0xd9, 0x84, 0xfe, 0x7d, 0x24, 0xff, 0x95, 0xba, 0xfd, 0xfe, 0x7c, 0xfe, 0x36, 0x4f, 0x00, 0x29, 0x1a, 0x00, 0x92, 0xc0, 0xff, 0x44, 0x7d, 0xfe, 0x00, 0x87, 0xfe, 0x3b, 0x66, 0x00, 0xc1, 0xb3, 0x00, 0x02, 0xb9, 0x00, 0x42, 0x43, 0x01, 0xda, 0x47, 0x01, 0xc3, 0x26, 0xff, 0xf4, 0x50, 0xfd, 0x88, 0x20, 0xfe, 0x1f, 0xa4, 0xff, 0xb3, 0x0a, 0x00, 0xb7, 0xb7, 0xfe, 0x3c, 0x54, 0xff, 0x88, 0x77, 0x14, 0x58, 0xea, 0x27, 0x0b, 0xe2, 0x1b, 0x1a, 0x99, 0x02, 0x5b, 0xfb, 0xf4, 0x63, 0x50, 0xf4, 0xbf, 0x89, 0xfd, 0xee, 0xdc, 0x0a, 0x1c, 0x4a, 0x0a, 0x9a, 0x02, 0xfd, 0x94, 0xe9, 0xf9, 0x2e, 0x80, 0xfe, 0x30, 0x4b, 0xff, 0x23, 0xbc, 0xfd, 0x92, 0x30, 0xfe, 0xba, 0x71, 0x00, 0x96, 0x3e, 0x00, 0x32, 0x28, 0xff, 0xe9, 0x6d, 0xfe, 0xa6, 0x8c, 0xfe, 0xb0, 0xde, 0xff, 0x54, 0xa1, 0x00, 0xfc, 0x5c, 0x00, 0x1f, 0x6c, 0x00, 0x02, 0x4a, 0x01, 0x7a, 0xa2, 0xff, 0x6a, 0x83, 0xfd, 0x5b, 0xe8, 0xfd, 0x78, 0x15, 0xff, 0x58, 0xc9, 0xff, 0xf8, 0x57, 0xff, 0xc7, 0xa4, 0xff, 0xf5, 0xd8, 0x16, 0xe9, 0x72, 0x2b, 0x57, 0xa5, 0x1c, 0x8e, 0xf6, 0x00, 0x22, 0xf5, 0xf2, 0xac, 0x36, 0xf3, 0x2a, 0x18, 0xfe, 0x45, 0x56, 0x0c, 0xbd, 0xe6, 0x0a, 0x4b, 0x94, 0xfb, 0x1e, 0xb5, 0xf8, 0x1c, 0xda, 0xfe, 0x60, 0x91, 0xff, 0x26, 0x92, 0xfd, 0x84, 0x07, 0xfe, 0xf3, 0xab, 0x00, 0x6e, 0x68, 0x00, 0x54, 0xaf, 0xfe, 0x03, 0x30, 0xfe, 0xd9, 0xaa, 0xfe, 0x33, 0xd5, 0xff, 0x3d, 0x96, 0x00, 0x8c, 0xf9, 0xff, 0x4b, 0xda, 0xff, 0x09, 0x44, 0x01, 0x33, 0xe0, 0xff, 0x15, 0xde, 0xfd, 0x2f, 0x07, 0xfe, 0x09, 0xe5, 0xfe, 0x38, 0x84, 0xff, 0xa6, 0x10, 0xff, 0x58, 0x2a, 0x00, 0x4c, 0x86, 0x18, 0xab, 0xe8, 0x2e, 0xe9, 0x35, 0x1e, 0xf8, 0xd7, 0xff, 0x1f, 0x02, 0xf1, 0x9c, 0xc0, 0xf1, 0xd0, 0x7c, 0xfe, 0x3e, 0xaa, 0x0d, 0x1e, 0x70, 0x0b, 0x2e, 0x8f, 0xfa, 0xe9, 0x5d, 0xf7, 0x8f, 0x0b, 0xff, 0xce, 0x20, 0x00, 0xd9, 0x5b, 0xfd, 0xea, 0xa3, 0xfd, 0x57, 0xd1, 0x00, 0xca, 0xc7, 0x00, 0xba, 0x5a, 0xfe, 0x21, 0xb6, 0xfd, 0xac, 0xae, 0xfe, 0x60, 0xde, 0xff, 0xd9, 0x9a, 0x00, 0x33, 0xd2, 0xff, 0x91, 0x15, 0xff, 0x5a, 0xf9, 0x00, 0x7f, 0x47, 0x00, 0x4b, 0x2e, 0xfe, 0x6d, 0x6c, 0xfe, 0x3a, 0xc9, 0xfe, 0x24, 0x48, 0xff, 0x99, 0xee, 0xfe, 0xab, 0x04, 0x00, 0xa2, 0xb1, 0x1a, 0xdf, 0x81, 0x32, 0x88, 0xf2, 0x1f, 0x68, 0xac, 0xfe, 0x47, 0x5b, 0xee, 0x60, 0xc6, 0xef, 0x3f, 0xaf, 0xfe, 0x3f, 0x19, 0x0f, 0x1f, 0xb8, 0x0b, 0xe7, 0xdd, 0xf8, 0xef, 0x98, 0xf5, 0x0b, 0x30, 0xff, 0x56, 0xb5, 0x00, 0xb1, 0xfd, 0xfc, 0x4a, 0x00, 0xfd, 0x4a, 0x7a, 0x00, 0x83, 0x0a, 0x01, 0x3b, 0x21, 0xfe, 0x21, 0x1c, 0xfd, 0x25, 0x59, 0xfe, 0x29, 0x7e, 0xff, 0x26, 0xa0, 0x00, 0x62, 0xa4, 0xff, 0x19, 0x31, 0xfe, 0x59, 0x25, 0x00, 0x2f, 0x55, 0x00, 0x6e, 0x81, 0xfe, 0xa2, 0xbb, 0xfe, 0x55, 0x0a, 0xff, 0x2c, 0xd3, 0xfe, 0xec, 0xb6, 0xfe, 0x05, 0xa7, 0xff, 0x37, 0x2f, 0x1c, 0x9c, 0x81, 0x35, 0x9f, 0xbc, 0x21, 0xcf, 0xf2, 0xfe, 0xea, 0x21, 0xed, 0x11, 0xb9, 0xed, 0xba, 0x06, 0xff, 0x01, 0x83, 0x10, 0x24, 0x0b, 0x0c, 0xf9, 0x44, 0xf8, 0x3e, 0x28, 0xf4, 0xc4, 0x47, 0xff, 0x17, 0xde, 0x01, 0x80, 0xf9, 0xfc, 0xbd, 0xa7, 0xfc, 0x06, 0x7c, 0x00, 0x84, 0x55, 0x01, 0xea, 0x1b, 0xfe, 0x51, 0x1c, 0xfd, 0xe0, 0x79, 0xfe, 0x45, 0x3d, 0xff, 0xdc, 0xbd, 0x00, 0x5f, 0xd2, 0xff, 0xf5, 0xf3, 0xfd, 0x6c, 0x7b, 0xff, 0x66, 0x62, 0x00, 0x93, 0x3a, 0xff, 0xcb, 0xec, 0xfe, 0x5c, 0xc7, 0xff, 0x1f, 0x04, 0xff, 0x4e, 0x9d, 0xfe, 0xd9, 0xf7, 0xff, 0xf4, 0x44, 0x1f, 0x7a, 0x8f, 0x38, 0x85, 0xc1, 0x21, 0xca, 0x67, 0xff, 0x4c, 0x46, 0xec, 0x17, 0xfd, 0xea, 0x9d, 0xa2, 0xff, 0x9f, 0x2b, 0x12, 0xd2, 0x66, 0x0b, 0x38, 0x0e, 0xf7, 0x23, 0xef, 0xf2, 0xa8, 0x0e, 0xff, 0x40, 0xe3, 0x02, 0xa9, 0x17, 0xfd, 0xb0, 0xdb, 0xfb, 0xc1, 0x82, 0x00, 0xa1, 0x95, 0x01, 0x1a, 0xaa, 0xfd, 0x8b, 0xfe, 0xfc, 0xf0, 0x81, 0xfe, 0x6f, 0x19, 0xff, 0x4b, 0x9c, 0x00, 0x2d, 0xc3, 0xff, 0xbc, 0x01, 0xfe, 0x4f, 0x5b, 0xfe, 0xb9, 0xc3, 0xff, 0x87, 0x49, 0x00, 0x43, 0x25, 0xff, 0x59, 0x0e, 0x00, 0xe3, 0xa0, 0xff, 0x34, 0x65, 0xfe, 0xc6, 0x2a, 0x00, 0x7e, 0xbc, 0x22, 0x5f, 0x7b, 0x3b, 0xf3, 0x35, 0x20, 0x79, 0xb5, 0xfe, 0x9d, 0x64, 0xec, 0x77, 0xb9, 0xe9, 0x57, 0x7a, 0x00, 0x97, 0xfc, 0x12, 0x54, 0xcf, 0x09, 0x5a, 0x4c, 0xf6, 0xee, 0xac, 0xf2, 0xfe, 0x73, 0xfe, 0xe8, 0x6c, 0x03, 0x68, 0x82, 0xfd, 0xfe, 0x24, 0xfb, 0xc3, 0x4a, 0x00, 0x3b, 0xde, 0x01, 0x66, 0x53, 0xfd, 0x57, 0xd6, 0xfc, 0x08, 0x96, 0xfe, 0x8d, 0xfd, 0xfe, 0x30, 0x74, 0x00, 0x11, 0x81, 0xff, 0xaf, 0x61, 0xfe, 0x1f, 0xd9, 0xfd, 0x2c, 0x66, 0xfe, 0x49, 0xf8, 0x00, 0x75, 0xfc, 0xff, 0x8e, 0xdb, 0xff, 0x2d, 0x48, 0x00, 0xfc, 0x9a, 0xfe, 0x47, 0xd0, 0xff, 0x37, 0x56, 0x29, 0xe3, 0x16, 0x3f, 0x6b, 0xb0, 0x1a, 0x8c, 0x8a, 0xfc, 0x89, 0xf2, 0xed, 0x9a, 0xf4, 0xe9, 0x51, 0x96, 0x01, 0xab, 0xfa, 0x12, 0x8b, 0x2a, 0x07, 0x95, 0x25, 0xf5, 0x46, 0x89, 0xf3, 0x2d, 0xa2, 0xfd, 0x84, 0x3f, 0x03, 0x07, 0x77, 0xfe, 0x2f, 0x67, 0xfa, 0x7c, 0xc0, 0xff, 0x15, 0xdb, 0x01, 0x84, 0x2c, 0xfd, 0xa8, 0xc7, 0xfc, 0xe2, 0x8d, 0xfe, 0xad, 0x2c, 0xff, 0xbd, 0x1e, 0x00, 0xba, 0xf8, 0xfe, 0xb6, 0xa4, 0xfe, 0x48, 0xef, 0xfd, 0x97, 0x08, 0xfd, 0x12, 0xb8, 0x00, 0xd7, 0x67, 0x01, 0xfc, 0x9a, 0xff, 0x2d, 0x8a, 0x00, 0x7e, 0xcf, 0xff, 0xa0, 0x1c, 0xff, 0xd9, 0xb5, 0x2e, 0x58, 0x62, 0x40, 0xf0, 0x8d, 0x15, 0x9c, 0xc6, 0xfd, 0x43, 0x29, 0xf1, 0xa8, 0x17, 0xe8, 0x05, 0xb0, 0x00, 0x85, 0x34, 0x14, 0xb9, 0x37, 0x06, 0x48, 0x7b, 0xf3, 0x47, 0xcb, 0xf3, 0xd6, 0x77, 0xfd, 0x1a, 0x2d, 0x03, 0x9c, 0xef, 0xfe, 0xfe, 0xe1, 0xf9, 0x76, 0x64, 0xff, 0x25, 0xa7, 0x01, 0xe7, 0x09, 0xfd, 0x35, 0xca, 0xfc, 0xd8, 0xe6, 0xfe, 0x6d, 0x79, 0xff, 0x16, 0x8b, 0xff, 0x8b, 0xb8, 0xfe, 0x7c, 0xa8, 0xfe, 0xd3, 0x46, 0xfe, 0x30, 0x7e, 0xfc, 0xc5, 0x9e, 0xff, 0xfe, 0xa7, 0x02, 0xfc, 0xfb, 0xff, 0x63, 0x2d, 0x00, 0x6d, 0x09, 0x01, 0x8c, 0xff, 0xfe, 0x53, 0xee, 0x33, 0x4c, 0xeb, 0x40, 0x51, 0x0f, 0x10, 0xd8, 0x0a, 0x00, 0x72, 0xde, 0xf4, 0x99, 0xd1, 0xe5, 0x9e, 0x88, 0xff, 0xe7, 0x6c, 0x15, 0x76, 0x75, 0x05, 0xc3, 0x6f, 0xf1, 0x75, 0x13, 0xf4, 0xc1, 0xe7, 0xfd, 0x4b, 0xab, 0x02, 0xd3, 0xf1, 0xfe, 0xa8, 0x9f, 0xf9, 0xa1, 0x2e, 0xff, 0x6a, 0x35, 0x01, 0xb2, 0x92, 0xfc, 0x79, 0xda, 0xfc, 0xb0, 0xa6, 0xff, 0x2a, 0xdd, 0xff, 0x8c, 0x93, 0xfe, 0x14, 0xa1, 0xfe, 0xfc, 0xc9, 0xfe, 0xe9, 0x2b, 0xfe, 0xa8, 0x6d, 0xfc, 0x31, 0x85, 0xfe, 0x82, 0x26, 0x03, 0xb0, 0xe9, 0x00, 0x17, 0xc0, 0xff, 0xbd, 0xa5, 0x01, 0x94, 0x88, 0xff, 0xb5, 0x7a, 0x3b, 0x5e, 0x0b, 0x44, 0xb7, 0x0b, 0x07, 0xd3, 0x9e, 0xfd, 0x7e, 0x94, 0xf9, 0x4c, 0xc1, 0xe7, 0xc0, 0x1d, 0xff, 0x9a, 0xb5, 0x13, 0x7b, 0x37, 0x04, 0x9f, 0x04, 0xf0, 0x4e, 0x86, 0xf4, 0x65, 0x8f, 0xfe, 0x4a, 0xb2, 0x01, 0x6f, 0x34, 0xff, 0x03, 0x40, 0xf9, 0x9b, 0x95, 0xfe, 0xcc, 0xc0, 0x00, 0x31, 0x39, 0xfc, 0xf0, 0x09, 0xfd, 0x47, 0x09, 0x00, 0xbe, 0xca, 0x00, 0x8b, 0xeb, 0xfd, 0x01, 0x29, 0xfe, 0x37, 0xd1, 0xfe, 0xa2, 0xa5, 0xfd, 0xd4, 0x0c, 0xfd, 0x74, 0xf5, 0xfd, 0x70, 0x71, 0x02, 0xb5, 0x03, 0x02, 0xae, 0x33, 0x00, 0x42, 0x83, 0x01, 0x2e, 0x11, 0x00, 0x76, 0x6a, 0x43, 0x41, 0x12, 0x46, 0xe2, 0x71, 0xfe, 0xdd, 0x12, 0xfb, 0x2c, 0x9e, 0xfc, 0x7c, 0x19, 0xeb, 0x06, 0xc1, 0xff, 0xfe, 0x12, 0x11, 0xda, 0x5a, 0x03, 0xd1, 0x25, 0xef, 0x21, 0xb1, 0xf4, 0x07, 0x42, 0xff, 0x43, 0x2a, 0x01, 0x1d, 0x54, 0xff, 0xdf, 0xb2, 0xf8, 0x99, 0x67, 0xfe, 0x55, 0x47, 0x00, 0x9a, 0xdd, 0xfb, 0x74, 0xb7, 0xfd, 0x48, 0x49, 0x00, 0x2a, 0x97, 0x01, 0x5e, 0x83, 0xfd, 0x23, 0xb5, 0xfd, 0x8e, 0x16, 0xff, 0xf6, 0x14, 0xfd, 0xf4, 0xad, 0xfd, 0xb9, 0x2b, 0xfe, 0xce, 0x9f, 0x01, 0x53, 0x6b, 0x02, 0x5f, 0x12, 0x01, 0x30, 0x6c, 0x01, 0xf8, 0xdb, 0xff, 0x63, 0xc3, 0x4a, 0x36, 0x3e, 0x4a, 0xff, 0xd5, 0xf5, 0xf8, 0x18, 0xf6, 0xb4, 0x84, 0xff, 0xe4, 0xdc, 0xef, 0x4e, 0xb8, 0x00, 0xa0, 0xfc, 0x0c, 0x31, 0x45, 0x03, 0x7c, 0xdf, 0xee, 0xa6, 0xa2, 0xf3, 0x94, 0x0d, 0x00, 0x8e, 0x89, 0x00, 0xc4, 0x89, 0xff, 0x78, 0xfb, 0xf7, 0xbc, 0xe4, 0xfd, 0x60, 0xfa, 0xff, 0xb7, 0x7e, 0xfb, 0xd7, 0xc0, 0xfe, 0x3f, 0x36, 0x00, 0x5e, 0x6a, 0x02, 0x6d, 0x4d, 0xfd, 0xce, 0xc3, 0xfc, 0xf7, 0x9b, 0xff, 0x40, 0x94, 0xfc, 0xab, 0x1b, 0xfe, 0x01, 0xd6, 0xfe, 0xb6, 0x08, 0x01, 0x81, 0xda, 0x01, 0xce, 0xbb, 0x01, 0xd5, 0xed, 0x01, 0xd3, 0xbf, 0xfe, 0x87, 0x05, 0x51, 0xb8, 0x78, 0x4d, 0xfd, 0x7a, 0xef, 0x0f, 0x80, 0xf1, 0x36, 0x4f, 0x00, 0xc6, 0x48, 0xf4, 0xb3, 0x0d, 0x02, 0x10, 0x76, 0x09, 0x7f, 0x97, 0x03, 0xdf, 0xc2, 0xee, 0x6c, 0x52, 0xf2, 0xef, 0x83, 0x00, 0x86, 0x01, 0x00, 0x2b, 0xa3, 0xff, 0x58, 0x9c, 0xf7, 0xbe, 0x7b, 0xfd, 0x4c, 0xc5, 0xff, 0x15, 0x7e, 0xfb, 0x52, 0xa5, 0xff, 0x8c, 0xea, 0xff, 0xda, 0xeb, 0x02, 0x45, 0x4b, 0xfd, 0xc7, 0xf2, 0xfb, 0x9e, 0x1f, 0x00, 0x4d, 0x59, 0xfc, 0x54, 0x30, 0xfe, 0x06, 0xdf, 0xff, 0x80, 0x0b, 0x01, 0x83, 0x7b, 0x00, 0x25, 0xb1, 0x01, 0xd3, 0xbb, 0x02, 0xc5, 0xb6, 0xfd, 0x96, 0xf3, 0x57, 0xfa, 0xdd, 0x50, 0xd8, 0xd3, 0xe9, 0x69, 0x29, 0xec, 0xb9, 0x43, 0xff, 0x62, 0xef, 0xf8, 0x03, 0xed, 0x03, 0x1a, 0x61, 0x06, 0xa7, 0x40, 0x04, 0xdc, 0x58, 0xee, 0x12, 0xcd, 0xf0, 0x35, 0x83, 0x00, 0x82, 0x30, 0xff, 0x78, 0xfd, 0xff, 0x08, 0x96, 0xf7, 0x21, 0x4e, 0xfd, 0xd3, 0xc4, 0xff, 0x0c, 0xb5, 0xfb, 0x9d, 0x70, 0x00, 0x0a, 0x5a, 0xff, 0xf8, 0x5d, 0x03, 0xb4, 0x72, 0xfd, 0xd5, 0x61, 0xfb, 0x8e, 0xab, 0x00, 0x58, 0xef, 0xfb, 0xa9, 0xae, 0xfe, 0xba, 0x32, 0x01, 0xb0, 0xac, 0x00, 0xc5, 0xf7, 0xfe, 0x21, 0xd3, 0x00, 0x7c, 0x28, 0x03, 0x2b, 0x7f, 0xfd, 0x8d, 0xd5, 0x5c, 0x07, 0x2c, 0x54, 0xa5, 0x6a, 0xe6, 0xab, 0xc1, 0xe7, 0x6c, 0x44, 0xfd, 0x4c, 0x3b, 0xfb, 0x8d, 0xe0, 0x05, 0x29, 0x21, 0x05, 0xcb, 0xa1, 0x04, 0xb1, 0xe3, 0xed, 0x0c, 0x73, 0xef, 0x2c, 0xe2, 0xff, 0xd1, 0x4b, 0xfe, 0x54, 0xc8, 0x00, 0x6d, 0x0e, 0xf8, 0x0d, 0x37, 0xfd, 0x94, 0x1f, 0x00, 0xd5, 0xcf, 0xfb, 0xe3, 0x8c, 0x00, 0x97, 0xcc, 0xfe, 0xba, 0xb1, 0x03, 0xee, 0xf5, 0xfd, 0x64, 0x1c, 0xfb, 0x97, 0xb3, 0x00, 0xbe, 0x0c, 0xfc, 0x7d, 0x5f, 0xff, 0x73, 0x51, 0x01, 0xd3, 0x34, 0x00, 0xbd, 0x2a, 0xfe, 0xdb, 0x55, 0xff, 0x3d, 0x2f, 0x03, 0xc4, 0x3f, 0xfe, 0xf6, 0xf3, 0x60, 0x53, 0x35, 0x57, 0x37, 0x7c, 0xe4, 0x11, 0xbe, 0xe4, 0x14, 0x01, 0xfa, 0xb1, 0xa9, 0xfb, 0x41, 0x70, 0x08, 0x39, 0xe2, 0x04, 0xeb, 0xc1, 0x04, 0x05, 0x84, 0xed, 0xb5, 0x2c, 0xee, 0xd2, 0x9b, 0xfe, 0x34, 0x7c, 0xfd, 0x68, 0x83, 0x02, 0x3d, 0xdd, 0xf8, 0x8b, 0x1f, 0xfd, 0xb3, 0xd4, 0x00, 0x76, 0xac, 0xfb, 0x3e, 0x24, 0x00, 0xdd, 0x72, 0xfe, 0x18, 0x5b, 0x04, 0x19, 0xa2, 0xfe, 0xea, 0xce, 0xfa, 0x80, 0x04, 0x01, 0xef, 0x6a, 0xfc, 0x35, 0x3b, 0xff, 0xaa, 0xe4, 0x00, 0x9b, 0xf5, 0xff, 0xe5, 0x72, 0xfd, 0x23, 0xfd, 0xfd, 0x89, 0x6c, 0x03, 0x05, 0x59, 0xff, 0x7a, 0x59, 0x65, 0x39, 0xbc, 0x59, 0x48, 0x57, 0xe3, 0xdc, 0x0e, 0xe3, 0x9a, 0x59, 0xf4, 0x32, 0x0b, 0xfa, 0x41, 0x03, 0x0c, 0xc8, 0x42, 0x05, 0x75, 0x89, 0x04, 0xa8, 0xe8, 0xec, 0xfe, 0xb2, 0xec, 0x7a, 0x8e, 0xfc, 0x03, 0x41, 0xfd, 0xb7, 0x82, 0x05, 0x19, 0x71, 0xf9, 0x64, 0x39, 0xfd, 0x26, 0x8a, 0x01, 0x32, 0xa9, 0xfa, 0xdf, 0xc7, 0xff, 0x3d, 0xcd, 0xfe, 0xf9, 0xc3, 0x04, 0x9f, 0x11, 0xff, 0xa7, 0xa3, 0xfb, 0x37, 0x02, 0x01, 0x4c, 0x2b, 0xfb, 0x43, 0xf6, 0xfe, 0x56, 0x70, 0x00, 0xd7, 0x11, 0xff, 0xe6, 0x4f, 0xfd, 0x48, 0xa6, 0xfd, 0xe2, 0x4d, 0x03, 0x90, 0x28, 0x00, 0x6f, 0xaf, 0x68, 0x46, 0x87, 0x5a, 0x38, 0xbd, 0xe3, 0x5b, 0x16, 0xe3, 0xe1, 0x2c, 0xee, 0x63, 0xe1, 0xf7, 0xeb, 0xbb, 0x0e, 0x1d, 0xc1, 0x05, 0x00, 0x22, 0x04, 0x5b, 0x09, 0xec, 0x99, 0x0b, 0xec, 0x8c, 0x23, 0xfb, 0x67, 0xc3, 0xfd, 0x5a, 0x03, 0x08, 0x79, 0xda, 0xf9, 0xd4, 0x61, 0xfd, 0xb1, 0x14, 0x01, 0xe9, 0x08, 0xfa, 0x16, 0x62, 0x00, 0x0b, 0xcd, 0xfe, 0xcd, 0xd9, 0x04, 0x62, 0x4e, 0x00, 0xd5, 0xc9, 0xfb, 0x72, 0x4d, 0xff, 0x72, 0x75, 0xfa, 0xc9, 0xd7, 0xfe, 0x33, 0x87, 0xff, 0xfe, 0xfb, 0xfe, 0x6c, 0x2d, 0xfe, 0xb1, 0x99, 0xfd, 0xfe, 0x89, 0x02, 0xd2, 0xf3, 0x00, 0x5f, 0x48, 0x6a, 0xb3, 0x55, 0x5b, 0x1a, 0x9d, 0xe6, 0x9b, 0xb8, 0xe3, 0x13, 0xf3, 0xe6, 0xcd, 0xf0, 0xf3, 0xb9, 0xc4, 0x10, 0xcd, 0xf8, 0x06, 0x69, 0xf1, 0x02, 0x03, 0xa0, 0xeb, 0x5e, 0x11, 0xed, 0x3a, 0x95, 0xf9, 0x85, 0x14, 0xfe, 0x70, 0x24, 0x0b, 0x05, 0x2b, 0xfa, 0x65, 0x46, 0xfc, 0x20, 0xee, 0x00, 0x15, 0x76, 0xfa, 0xd0, 0x92, 0x00, 0x2c, 0x7b, 0xff, 0xbb, 0x63, 0x05, 0x1e, 0x87, 0xff, 0x7d, 0xfa, 0xfa, 0xfa, 0x5f, 0xfe, 0x0b, 0x47, 0xf9, 0xb2, 0x8a, 0xfe, 0xc8, 0xe6, 0xff, 0xb2, 0x69, 0xff, 0x9c, 0xb3, 0xfe, 0xad, 0xb1, 0xfd, 0xa6, 0x6f, 0x02, 0x49, 0x0b, 0x01, 0x5e, 0x29, 0x69, 0x1e, 0x19, 0x5d, 0x9d, 0x99, 0xea, 0xcd, 0xe7, 0xe4, 0x88, 0xc4, 0xe1, 0x86, 0x29, 0xee, 0xde, 0xfa, 0x11, 0xfb, 0x0b, 0x08, 0x5c, 0x9b, 0x01, 0x85, 0xaf, 0xed, 0x29, 0x26, 0xee, 0x53, 0x32, 0xf8, 0xa5, 0x92, 0xfe, 0x6c, 0x08, 0x0d, 0x17, 0x1b, 0xfa, 0x55, 0x41, 0xfb, 0xdc, 0x9f, 0x01, 0x83, 0xf5, 0xfa, 0xbf, 0xcf, 0x01, 0x7b, 0xb0, 0xff, 0xfa, 0xe6, 0x02, 0xad, 0x6b, 0xff, 0xdf, 0x14, 0xfb, 0xaa, 0xef, 0xfc, 0x42, 0x33, 0xf9, 0xd4, 0x58, 0xff, 0x9a, 0x2f, 0x00, 0xae, 0x3f, 0xff, 0xff, 0x97, 0xff, 0x98, 0x52, 0xfe, 0x31, 0x74, 0x01, 0x22, 0x35, 0x00, 0x81, 0x46, 0x69, 0x5d, 0xf9, 0x5a, 0x14, 0xc8, 0xef, 0x78, 0x87, 0xe8, 0xa3, 0x5f, 0xda, 0x49, 0x4a, 0xe8, 0xe9, 0x3c, 0x11, 0xa6, 0x64, 0x09, 0x17, 0x99, 0x02, 0x60, 0xb5, 0xef, 0x75, 0x25, 0xf0, 0xe6, 0xf8, 0xf6, 0xd8, 0xd1, 0xfe, 0x91, 0x22, 0x0e, 0x51, 0x95, 0xf9, 0x47, 0xe6, 0xfa, 0xf9, 0xbc, 0x03, 0x59, 0xb7, 0xfc, 0x15, 0x1b, 0x00, 0x89, 0x3c, 0xfe, 0xae, 0xa5, 0x01, 0xb6, 0xc0, 0xfe, 0x44, 0x81, 0xfb, 0xe6, 0xc6, 0xfc, 0x7e, 0xe1, 0xf9, 0x96, 0xca, 0xff, 0x56, 0x2f, 0x00, 0x36, 0x02, 0x00, 0x73, 0xbf, 0xff, 0x19, 0xd1, 0xfd, 0x4c, 0x77, 0x01, 0xab, 0x59, 0x00, 0xe0, 0x80, 0x66, 0x20, 0x88, 0x5a, 0x1f, 0x4a, 0xf5, 0xbd, 0x8a, 0xeb, 0xbd, 0xe5, 0xd5, 0x5f, 0x89, 0xe1, 0x73, 0x6a, 0x0f, 0xc9, 0xa9, 0x0c, 0xa1, 0x70, 0x04, 0xf7, 0x1c, 0xf1, 0x85, 0x16, 0xf2, 0x52, 0x6c, 0xf6, 0xf4, 0xf8, 0xfd, 0xeb, 0x0b, 0x0e, 0x7c, 0x36, 0xfa, 0x7d, 0xec, 0xfc, 0xb8, 0xa0, 0x04, 0xc6, 0xeb, 0xfa, 0x48, 0x29, 0xff, 0x87, 0xcf, 0xfd, 0x0b, 0x22, 0x00, 0x29, 0x9c, 0xff, 0xad, 0x8e, 0xfc, 0x6e, 0xa0, 0xfc, 0x11, 0x96, 0xfa, 0x2e, 0x68, 0x00, 0x57, 0x37, 0x00, 0xe4, 0x2f, 0xff, 0x89, 0xf3, 0xff, 0xc4, 0xe5, 0xfe, 0x7e, 0x36, 0x01, 0x4a, 0x9f, 0xff, 0x9c, 0x46, 0x65, 0x9b, 0x73, 0x57, 0x10, 0xef, 0xf8, 0xfd, 0x75, 0xef, 0xba, 0x25, 0xd1, 0x0f, 0x4b, 0xdb, 0x41, 0xcc, 0x0e, 0x9b, 0x8d, 0x10, 0x24, 0x4c, 0x05, 0x84, 0x28, 0xf2, 0xf4, 0x1d, 0xf5, 0x71, 0xb5, 0xf4, 0xb0, 0x0f, 0xfc, 0x54, 0x07, 0x10, 0x41, 0xe9, 0xfb, 0x9d, 0x37, 0xfc, 0x96, 0x0d, 0x04, 0x7f, 0xc4, 0xf9, 0xf1, 0xc5, 0xfd, 0x64, 0x60, 0xfe, 0xae, 0xf2, 0xff, 0xd1, 0xed, 0xff, 0xa8, 0x44, 0xfd, 0x73, 0x22, 0xfd, 0xf6, 0xd0, 0xfb, 0x38, 0x86, 0xff, 0xac, 0x1e, 0xff, 0xc1, 0xd2, 0xff, 0xed, 0xc8, 0x00, 0x0d, 0x9a, 0xfe, 0xe2, 0xac, 0x00, 0xd8, 0x01, 0x00, 0x5e, 0x76, 0x62, 0xae, 0xa9, 0x53, 0xe3, 0x50, 0xfc, 0xf9, 0x18, 0xf4, 0x67, 0xa9, 0xcc, 0x1d, 0x7f, 0xd6, 0xbe, 0x33, 0x0f, 0x6d, 0x9c, 0x12, 0x6a, 0x42, 0x07, 0x2d, 0xd1, 0xf4, 0xf2, 0xb1, 0xf5, 0x09, 0x80, 0xf2, 0xf3, 0x04, 0xfe, 0xdc, 0xe0, 0x10, 0x70, 0x19, 0xfa, 0xb7, 0xf5, 0xfc, 0xda, 0x1f, 0x02, 0xb4, 0x13, 0xf8, 0xeb, 0xe2, 0xff, 0x84, 0xc0, 0xfe, 0xbc, 0xdc, 0xfe, 0x85, 0x0f, 0x01, 0x47, 0xf9, 0xfe, 0xe2, 0x47, 0xfd, 0xa6, 0xe9, 0xfa, 0x7e, 0x12, 0xff, 0x24, 0xe3, 0xff, 0x31, 0xc2, 0xff, 0x1a, 0x72, 0x00, 0xd3, 0xde, 0xfe, 0x52, 0xcd, 0x00, 0x2f, 0x3a, 0x00, 0x8a, 0xa9, 0x5f, 0x04, 0xd5, 0x4e, 0xdd, 0x04, 0xff, 0x47, 0x5a, 0xf6, 0x02, 0xa4, 0xcb, 0xd1, 0xf3, 0xd5, 0x35, 0x0f, 0x0d, 0x25, 0x2b, 0x15, 0xba, 0x29, 0x09, 0x94, 0x62, 0xf4, 0xff, 0xd9, 0xf7, 0xc2, 0x84, 0xf2, 0xe2, 0x24, 0xfd, 0xed, 0xce, 0x10, 0x84, 0xae, 0xf9, 0xa9, 0x4b, 0xfb, 0x29, 0x90, 0x01, 0xce, 0xc6, 0xf9, 0x37, 0x39, 0x00, 0x05, 0x7a, 0xfe, 0x8c, 0xa2, 0xff, 0x18, 0x3a, 0x02, 0x5c, 0x74, 0xfe, 0xf2, 0x79, 0xfc, 0xa2, 0xf0, 0xfb, 0x37, 0x68, 0xff, 0xb4, 0x0a, 0xff, 0xe5, 0x88, 0xff, 0xa4, 0x09, 0x01, 0x38, 0xf3, 0xfe, 0xa2, 0xc3, 0x00, 0xdc, 0x23, 0x00, 0xf3, 0xe5, 0x59, 0xee, 0x5e, 0x49, 0x88, 0x70, 0x01, 0xfa, 0xcf, 0xf9, 0x35, 0x44, 0xce, 0x66, 0x70, 0xd5, 0x02, 0x17, 0x0b, 0x42, 0xa5, 0x15, 0x82, 0x00, 0x0a, 0xfb, 0x71, 0xf8, 0xf9, 0x93, 0xf7, 0x23, 0xc4, 0xef, 0x72, 0x57, 0xff, 0xbe, 0xeb, 0x0e, 0x75, 0xa0, 0xf7, 0x62, 0x60, 0xfc, 0x54, 0xe7, 0x01, 0x7b, 0x56, 0xfa, 0x22, 0xbd, 0x00, 0xed, 0x36, 0x00, 0x4d, 0x78, 0xff, 0x44, 0xc3, 0x00, 0x4e, 0x09, 0xff, 0xc8, 0x4d, 0xfd, 0x21, 0x7e, 0xfc, 0xbb, 0x96, 0xfe, 0x46, 0x53, 0xfe, 0x02, 0x49, 0x00, 0x94, 0x84, 0x01, 0xd2, 0x64, 0xfe, 0x4c, 0x33, 0x00, 0x1a, 0x32, 0x01, 0xef, 0x72, 0x54, 0x65, 0x9e, 0x43, 0x06, 0x55, 0x02, 0xba, 0x2a, 0xfe, 0x55, 0x60, 0xd2, 0x41, 0x34, 0xd6, 0x03, 0x10, 0x08, 0xb6, 0xab, 0x15, 0x48, 0xef, 0x0c, 0x11, 0x29, 0xf8, 0x81, 0xa7, 0xf6, 0x2c, 0x52, 0xf0, 0x57, 0xd5, 0xfe, 0x54, 0xd8, 0x0d, 0x1a, 0x5a, 0xf7, 0xa5, 0x21, 0xfd, 0xe7, 0x0d, 0x02, 0x05, 0xcb, 0xfa, 0x09, 0xf7, 0x02, 0x97, 0xb3, 0xff, 0xd5, 0x6e, 0xfd, 0xef, 0xe2, 0x01, 0x51, 0xf0, 0xff, 0x34, 0xd8, 0xfc, 0x85, 0xb1, 0xfc, 0xfe, 0x42, 0xfe, 0xff, 0x38, 0xfe, 0xc5, 0x1b, 0x01, 0xe7, 0xf5, 0x00, 0xb8, 0x64, 0xfd, 0x46, 0x57, 0x01, 0xcf, 0x0f, 0x02, 0x49, 0xa3, 0x4d, 0x6d, 0x9e, 0x3b, 0x5a, 0x5e, 0x03, 0x84, 0x28, 0x05, 0xe4, 0x24, 0xd7, 0x25, 0x25, 0xd6, 0xea, 0x7c, 0x08, 0x92, 0x65, 0x15, 0xd4, 0x4c, 0x0a, 0x66, 0x0e, 0xfa, 0x60, 0xf1, 0xf6, 0x27, 0xc1, 0xee, 0xd0, 0x18, 0x01, 0xf9, 0x8d, 0x0c, 0x77, 0x25, 0xf6, 0x25, 0xa3, 0xfe, 0x5d, 0xbc, 0x02, 0x60, 0x8a, 0xfc, 0xcf, 0x91, 0x02, 0x10, 0x2d, 0xfe, 0xb7, 0x1a, 0xfe, 0x83, 0xf6, 0x02, 0x4d, 0x7f, 0xff, 0x83, 0x47, 0xfc, 0x9c, 0xab, 0xfd, 0x68, 0x4d, 0xfe, 0x89, 0x1d, 0xfe, 0x5e, 0x14, 0x01, 0xb2, 0x49, 0x00, 0x16, 0xd5, 0xfd, 0xfa, 0xff, 0x01, 0x68, 0x0c, 0x02, 0xdc, 0x67, 0x45, 0xb7, 0x1c, 0x36, 0xac, 0x8b, 0x06, 0xb8, 0x48, 0x08, 0x28, 0xdc, 0xda, 0x0f, 0x0e, 0xdb, 0x44, 0xff, 0x07, 0x57, 0x72, 0x10, 0x1c, 0x0d, 0x0a, 0xea, 0x53, 0xfb, 0xd3, 0xe4, 0xf5, 0xce, 0x05, 0xf1, 0xba, 0x91, 0x01, 0x54, 0x2a, 0x0a, 0xd2, 0x9b, 0xf6, 0x4e, 0x3c, 0x00, 0x6c, 0xaf, 0x03, 0x62, 0xb5, 0xfb, 0x43, 0xca, 0x01, 0x56, 0xfd, 0xfe, 0x77, 0x80, 0xfe, 0xe0, 0xb7, 0x02, 0x3f, 0xec, 0xfe, 0x86, 0xae, 0xfc, 0xb0, 0xb5, 0xfe, 0x8f, 0xf2, 0xfd, 0x57, 0x93, 0xfd, 0x40, 0x77, 0x01, 0xed, 0x5a, 0x00, 0xda, 0x65, 0xfd, 0x96, 0x6d, 0x02, 0x73, 0x2a, 0x02, 0x64, 0xc4, 0x41, 0xf2, 0x61, 0x34, 0x21, 0x60, 0x03, 0x14, 0x5b, 0x00, 0x8d, 0x02, 0xda, 0x73, 0xc4, 0xe6, 0xf1, 0x0f, 0x13, 0x68, 0x9c, 0x0d, 0xad, 0xba, 0x01, 0x9e, 0xaa, 0xf8, 0x0c, 0x98, 0xfa, 0x7d, 0x2f, 0xf5, 0x62, 0xee, 0xfe, 0xa5, 0x7f, 0x09, 0x25, 0x95, 0xf7, 0xea, 0x0f, 0xff, 0x28, 0xbd, 0x03, 0x1c, 0x15, 0xfc, 0x05, 0x0b, 0x01, 0x33, 0x2a, 0xff, 0xaf, 0xc0, 0xff, 0xe5, 0x99, 0x01, 0x7f, 0xc2, 0xfe, 0x0f, 0x7e, 0xfd, 0x01, 0x90, 0xfd, 0xeb, 0x26, 0xff, 0xbf, 0x07, 0xff, 0x10, 0xb9, 0xff, 0x38, 0x24, 0x00, 0xec, 0x86, 0xff, 0xad, 0xd0, 0xff, 0x89, 0x4c, 0xfe, 0x30, 0x6c, 0x35, 0x65, 0xbf, 0x32, 0xdc, 0xba, 0x0e, 0xb2, 0xc7, 0x04, 0xa7, 0x6f, 0xdc, 0xde, 0xfb, 0xe0, 0x6b, 0x37, 0x08, 0xf2, 0xf6, 0x0b, 0x28, 0x9e, 0x08, 0xbc, 0x2e, 0x00, 0x6c, 0xd5, 0xfa, 0xad, 0x5c, 0xf4, 0x6b, 0xf9, 0xfb, 0x71, 0x5a, 0x05, 0x95, 0x47, 0xfa, 0xef, 0xdc, 0x01, 0xfa, 0x4b, 0x04, 0x99, 0x9e, 0xfb, 0x3b, 0x1c, 0x01, 0xe7, 0xc1, 0x00, 0xea, 0xc2, 0xfe, 0x04, 0x02, 0x01, 0x72, 0xd2, 0x00, 0x3b, 0x3c, 0xfe, 0xa8, 0x24, 0xfe, 0xdf, 0x9b, 0x00, 0x05, 0x07, 0xfd, 0xc2, 0x5c, 0xfd, 0xa7, 0x54, 0x00, 0xc0, 0x93, 0xfe, 0x2e, 0x65, 0x00, 0x28, 0x25, 0x01, 0x90, 0xdc, 0x2b, 0xd5, 0x78, 0x2d, 0x78, 0x80, 0x11, 0x6d, 0xc5, 0x06, 0x6c, 0xdc, 0xe4, 0x75, 0x65, 0xe5, 0x39, 0xf9, 0x03, 0x58, 0xc3, 0x09, 0x43, 0x72, 0x07, 0xea, 0x4d, 0x00, 0x78, 0x76, 0xfc, 0x36, 0x19, 0xf7, 0x72, 0xd3, 0xfb, 0x4f, 0x92, 0x03, 0x76, 0x53, 0xfc, 0x81, 0xc1, 0x01, 0x8e, 0x50, 0x03, 0xa1, 0x71, 0xfc, 0x5f, 0xd8, 0x00, 0x86, 0x17, 0x01, 0x09, 0xdc, 0xfe, 0x44, 0xe2, 0x00, 0x1e, 0x43, 0x01, 0x89, 0xc6, 0xfe, 0x7b, 0xf6, 0xfe, 0xba, 0xab, 0x00, 0x6c, 0x43, 0xfd, 0x1b, 0xbe, 0xfd, 0xd5, 0x9a, 0x00, 0x66, 0x24, 0xff, 0x2f, 0x06, 0x00, 0xa3, 0x23, 0x01, 0x4c, 0x2b, 0x24, 0x0b, 0xe3, 0x28, 0x0c, 0x9c, 0x12, 0x78, 0x72, 0x08, 0x5a, 0xef, 0xeb, 0xfb, 0xe0, 0xe8, 0x0e, 0x66, 0x01, 0xa0, 0xbb, 0x07, 0xc0, 0xd8, 0x05, 0xd2, 0xed, 0x00, 0xfe, 0x29, 0xfe, 0x27, 0x15, 0xf9, 0x24, 0xd4, 0xfb, 0x1a, 0xb5, 0x02, 0xbe, 0xaf, 0xfd, 0xa9, 0x3c, 0x01, 0xf4, 0xaf, 0x02, 0xfd, 0x4f, 0xfd, 0xc1, 0xbe, 0x00, 0x48, 0x39, 0x01, 0x87, 0x2c, 0xff, 0xe2, 0xdd, 0x00, 0xc5, 0x98, 0x01, 0x53, 0x9c, 0xff, 0x3a, 0x3a, 0xff, 0x3d, 0xd4, 0x00, 0x2e, 0x80, 0xfe, 0x58, 0x31, 0xfe, 0x8d, 0x53, 0x00, 0x5e, 0x04, 0xff, 0xd3, 0x88, 0xff, 0x7d, 0xf9, 0x00, 0xc1, 0x6c, 0x1e, 0x4b, 0xae, 0x24, 0x50, 0xeb, 0x12, 0x80, 0x4b, 0x09, 0x02, 0xba, 0xf0, 0x64, 0x2d, 0xec, 0x1b, 0x18, 0x00, 0x11, 0xde, 0x05, 0x7e, 0x95, 0x04, 0x1d, 0xa4, 0x01, 0x1b, 0x4c, 0xff, 0x20, 0x9c, 0xfa, 0xb4, 0x33, 0xfc, 0xf5, 0xfe, 0x01, 0xa3, 0x79, 0xfe, 0x3b, 0xc0, 0x00, 0x1c, 0x4f, 0x02, 0xc0, 0x20, 0xfe, 0x2d, 0x8c, 0x00, 0x99, 0x52, 0x01, 0xf4, 0x9d, 0xff, 0x80, 0xeb, 0x00, 0x7c, 0xd4, 0x01, 0x31, 0x7f, 0x00, 0x26, 0x08, 0x00, 0x1b, 0x0c, 0x01, 0xa2, 0xde, 0xfe, 0x5d, 0xed, 0xfd, 0x61, 0x9e, 0xff, 0x3d, 0xe3, 0xfe, 0x6b, 0xef, 0xfe, 0x26, 0x3c, 0x00, 0xda, 0x62, 0x1a, 0xc7, 0xb3, 0x21, 0xa9, 0x6a, 0x12, 0xa6, 0x13, 0x09, 0x6a, 0x49, 0xf4, 0x43, 0x84, 0xef, 0x2e, 0xa2, 0xff, 0xb4, 0x7b, 0x04, 0xf6, 0x1b, 0x04, 0xe0, 0x2b, 0x02, 0x5a, 0x00, 0x00, 0x37, 0x1e, 0xfc, 0x3c, 0xe1, 0xfc, 0x91, 0xb7, 0x01, 0x9b, 0xee, 0xfe, 0x4b, 0xa5, 0x00, 0x33, 0x66, 0x02, 0x65, 0xce, 0xfe, 0xfb, 0xb7, 0x00, 0xe5, 0x71, 0x01, 0x86, 0x44, 0x00, 0x7b, 0xec, 0x01, 0x6a, 0x8c, 0x02, 0x94, 0x00, 0x01, 0xc7, 0x13, 0x00, 0x72, 0xab, 0x00, 0x32, 0xe8, 0xfe, 0xa5, 0xc6, 0xfd, 0xc8, 0x18, 0xff, 0x8d, 0xb2, 0xfe, 0xcc, 0xc5, 0xfe, 0xa3, 0x37, 0x00, 0xe0, 0x65, 0x17, 0xb7, 0xd9, 0x1e, 0x1c, 0xd9, 0x11, 0x40, 0x99, 0x08, 0x7a, 0x29, 0xf6, 0xc0, 0x04, 0xf2, 0xd0, 0x82, 0xff, 0x8c, 0x85, 0x03, 0x9e, 0x95, 0x03, 0xcd, 0x63, 0x02, 0x35, 0x8d, 0x00, 0x69, 0x36, 0xfd, 0x88, 0x6f, 0xfd, 0x1b, 0x23, 0x01, 0x00, 0x24, 0xff, 0x5d, 0xd9, 0x00, 0x72, 0x36, 0x02, 0x6b, 0x0e, 0xff, 0x92, 0xf9, 0x00, 0x3f, 0x2a, 0x02, 0xd1, 0x19, 0x01, 0x9f, 0xe4, 0x01, 0xfc, 0xfa, 0x01, 0xa1, 0x65, 0x00, 0x42, 0x9d, 0xff, 0xb9, 0x46, 0x00, 0x95, 0x92, 0xfe, 0x4f, 0x72, 0xfd, 0x93, 0xd8, 0xfe, 0x23, 0x9d, 0xfe, 0xae, 0x5c, 0xfe, 0xb2, 0xf8, 0xff, 0x31, 0x5c, 0x15, 0xc0, 0x22, 0x1d, 0xa7, 0xe5, 0x10, 0xe9, 0x7f, 0x07, 0x8f, 0xea, 0xf7, 0xfb, 0x62, 0xf4, 0x3b, 0xb3, 0xff, 0xb5, 0x2f, 0x03, 0x71, 0x94, 0x03, 0x4d, 0xcb, 0x02, 0xd9, 0x06, 0x01, 0x95, 0x47, 0xfe, 0xf8, 0x21, 0xfe, 0x5c, 0xf8, 0x00, 0x76, 0x98, 0xff, 0x1c, 0x13, 0x01, 0x45, 0x98, 0x02, 0xb2, 0x1f, 0x00, 0xc4, 0x4f, 0x01, 0xd4, 0x1f, 0x02, 0xbd, 0xfc, 0x00, 0xc8, 0x4b, 0x01, 0x7d, 0x5d, 0x01, 0xd3, 0x3f, 0x00, 0xb9, 0x6c, 0xff, 0x0b, 0x08, 0x00, 0x09, 0x00, 0xff, 0x31, 0x9e, 0xfd, 0x08, 0x6c, 0xfe, 0xb4, 0x80, 0xfe, 0xe3, 0x94, 0xfe, 0xf7, 0xf3, 0xff, 0x57, 0x01, 0x14, 0xac, 0xf9, 0x1b, 0xee, 0xdb, 0x0f, 0xa7, 0x2d, 0x06, 0x27, 0x47, 0xf9, 0x30, 0x65, 0xf6, 0xc7, 0x0c, 0x00, 0x54, 0x76, 0x03, 0x21, 0xd6, 0x03, 0x21, 0x1b, 0x03, 0x57, 0x6d, 0x01, 0x5f, 0x17, 0xff, 0x52, 0xe2, 0xfe, 0xa0, 0xeb, 0x00, 0x66, 0x4d, 0x00, 0x5c, 0xea, 0x01, 0x44, 0x91, 0x02, 0xe0, 0x04, 0x00, 0x69, 0x9d, 0x00, 0x1b, 0x7d, 0x01, 0x9b, 0x0f, 0x01, 0x5d, 0xe1, 0x00, 0x6e, 0xc8, 0x00, 0x64, 0x67, 0x00, 0xbb, 0xb3, 0xff, 0x54, 0xf4, 0xff, 0x9d, 0xf9, 0xfe, 0x60, 0xb2, 0xfd, 0x58, 0x7e, 0xfe, 0x5a, 0x4d, 0xfe, 0x8d, 0xb3, 0xfe, 0x74, 0x21, 0x01, 0x86, 0xf8, 0x12, 0x14, 0x5d, 0x1b, 0xe0, 0xf5, 0x0e, 0xc9, 0xa7, 0x04, 0x98, 0x55, 0xfa, 0xc3, 0x36, 0xf8, 0xa3, 0x86, 0x00, 0x3a, 0x27, 0x04, 0x89, 0x1d, 0x04, 0x8f, 0x25, 0x03, 0xbf, 0xea, 0x01, 0x59, 0x72, 0xff, 0x6b, 0x91, 0xff, 0x76, 0x9b, 0x01, 0xe5, 0x30, 0x00, 0x26, 0x44, 0x01, 0x16, 0xf5, 0x01, 0xeb, 0xb1, 0xff, 0x0c, 0xe8, 0xff, 0xd7, 0xd9, 0x00, 0x64, 0x34, 0x01, 0x5d, 0xd0, 0x00, 0x50, 0x7d, 0x00, 0xbc, 0x89, 0x00, 0x63, 0xbb, 0xff, 0x1b, 0x86, 0xff, 0xd8, 0x56, 0xff, 0xd9, 0x3b, 0xfe, 0x77, 0xb1, 0xfd, 0xc8, 0xf9, 0xfe, 0x8c, 0x51, 0x00, 0xc7, 0x13, 0x00, 0xd2, 0x50, 0x12, 0x8c, 0x38, 0x1b, 0xf5, 0x49, 0x0e, 0x51, 0xa5, 0x03, 0xc9, 0x5f, 0xfb, 0x2f, 0xd8, 0xf9, 0xbe, 0x34, 0x01, 0xf3, 0xdf, 0x04, 0xbc, 0xbe, 0x04, 0x91, 0xf8, 0x02, 0xeb, 0x7c, 0x02, 0x84, 0x68, 0x00, 0x62, 0xff, 0xfe, 0x0d, 0x40, 0x01, 0xf7, 0x22, 0x00, 0xbc, 0x9a, 0x00, 0x58, 0xca, 0x01, 0x3a, 0x98, 0xff, 0xb4, 0x7c, 0xff, 0x53, 0x69, 0x00, 0x6a, 0x6c, 0x01, 0x2a, 0x63, 0x01, 0x90, 0x2d, 0x00, 0xcb, 0x44, 0x00, 0x7b, 0x46, 0x00, 0xde, 0x16, 0x00, 0x5b, 0xfe, 0xfe, 0x8b, 0x7d, 0xfe, 0x29, 0x9d, 0xff, 0x93, 0xe1, 0xfe, 0xa2, 0xa9, 0xfe, 0xe3, 0x00, 0x00, 0x53, 0x15, 0x12, 0xc9, 0x15, 0x1b, 0x08, 0xd4, 0x0d, 0x96, 0x3f, 0x03, 0xfe, 0x5c, 0xfc, 0xa5, 0xdf, 0xfa, 0xa8, 0x83, 0x01, 0x7c, 0xff, 0x04, 0xde, 0x11, 0x05, 0xd8, 0x60, 0x03, 0x18, 0x2d, 0x02, 0x0c, 0x4c, 0x00, 0xc8, 0x5b, 0xfe, 0x02, 0x1d, 0x00, 0x87, 0x73, 0x00, 0xe0, 0x87, 0x00, 0x9f, 0x51, 0x01, 0x99, 0x9d, 0xff, 0x67, 0xf6, 0xfe, 0xf8, 0x6f, 0x00, 0x27, 0x6b, 0x01, 0xc0, 0xf5, 0x00, 0x60, 0x4d, 0x00, 0xf6, 0x82, 0x00, 0x5e, 0x96, 0x00, 0x04, 0x96, 0xff, 0x27, 0xa1, 0xff, 0x2c, 0x7c, 0x00, 0x15, 0x8c, 0xfe, 0x78, 0x50, 0xfd, 0xc0, 0xd3, 0xfe, 0x19, 0xe4, 0xff, 0xdd, 0xb6, 0x11, 0x5f, 0x3b, 0x1b, 0x21, 0x52, 0x0e, 0xec, 0x7a, 0x03, 0xe7, 0x2f, 0xfd, 0xa0, 0x51, 0xfb, 0xaf, 0xe9, 0x00, 0xdb, 0xc3, 0x04, 0x9b, 0xd4, 0x04, 0xd6, 0x27, 0x03, 0xf8, 0x69, 0x02, 0x58, 0x04, 0x00, 0x0b, 0x17, 0xfe, 0x20, 0xcc, 0xff, 0xd0, 0xc7, 0xff, 0x8d, 0x81, 0x00, 0x62, 0x57, 0x01, 0x7f, 0xb7, 0xff, 0x09, 0x2e, 0xff, 0x58, 0x04, 0x00, 0x44, 0x4e, 0x01, 0xb1, 0xaf, 0x00, 0xdd, 0x25, 0x00, 0xe6, 0x2d, 0x01, 0x94, 0xf7, 0xff, 0xaf, 0x41, 0x00, 0xfc, 0xcb, 0x01, 0xad, 0x04, 0xff, 0x17, 0x16, 0xfd, 0xa7, 0x4c, 0xfe, 0xd9, 0xae, 0xfe, 0x2e, 0x2b, 0xff, 0x4f, 0xd4, 0x11, 0x52, 0x07, 0x1c, 0x0b, 0x07, 0x0f, 0x53, 0x60, 0x03, 0x6b, 0x37, 0xfd, 0xe7, 0xa6, 0xfb, 0x43, 0x93, 0x00, 0x73, 0xc9, 0x03, 0x0e, 0x30, 0x04, 0xed, 0x87, 0x02, 0xae, 0xfc, 0x01, 0xfd, 0xe9, 0x00, 0xde, 0x6a, 0xfe, 0x9c, 0x1b, 0xff, 0x94, 0xc6, 0xff, 0xed, 0x15, 0x00, 0x1f, 0xdf, 0x00, 0x33, 0x40, 0x00, 0x5a, 0xbb, 0xff, 0x22, 0x31, 0x00, 0xa3, 0x92, 0x00, 0xf9, 0x51, 0x00, 0x3a, 0xc4, 0x00, 0xf0, 0x2e, 0x00, 0xf0, 0x25, 0x00, 0x0a, 0xbd, 0x02, 0xa2, 0xf0, 0x00, 0x60, 0x54, 0xfd, 0x37, 0xe7, 0xfd, 0x2c, 0x90, 0xfe, 0x44, 0x70, 0xfe, 0xe8, 0x33, 0xff, 0x5c, 0x15, 0x12, 0x68, 0x41, 0x1d, 0x96, 0x10, 0x10, 0xa4, 0xb9, 0x02, 0xb4, 0xac, 0xfc, 0x57, 0xcc, 0xfb, 0xd5, 0x56, 0x00, 0x29, 0xd6, 0x03, 0x1f, 0xc7, 0x03, 0x67, 0x2e, 0x01, 0x95, 0x71, 0x01, 0x41, 0xcb, 0x00, 0xa4, 0x6c, 0xfe, 0x9f, 0xdf, 0xff, 0x67, 0xe5, 0xff, 0xc0, 0xd2, 0xff, 0x74, 0x01, 0x01, 0xd0, 0xf9, 0xff, 0x32, 0xc7, 0xff, 0xa5, 0xbe, 0x00, 0x72, 0xa9, 0x00, 0x2f, 0x26, 0x00, 0x79, 0x42, 0x00, 0x76, 0xc5, 0xff, 0xb3, 0x2b, 0x01, 0xa1, 0x32, 0x03, 0xe7, 0xd9, 0xff, 0xe4, 0x6d, 0xfd, 0x92, 0x71, 0xfe, 0x00, 0x5f, 0xfe, 0xf1, 0xb6, 0xfe, 0x19, 0xdc, 0xff, 0x50, 0x0c, 0x12, 0xff, 0xc7, 0x1e, 0x8c, 0x72, 0x11, 0x75, 0x05, 0x02, 0x83, 0xed, 0xfb, 0x16, 0x2a, 0xfb, 0x5c, 0x08, 0x00, 0xbb, 0xae, 0x04, 0x5b, 0x01, 0x04, 0x64, 0x8e, 0x00, 0x53, 0x96, 0x00, 0x5b, 0xc3, 0xff, 0x91, 0xc4, 0xfd, 0xe6, 0x76, 0xff, 0x4a, 0x51, 0x00, 0xd6, 0xe7, 0x00, 0xab, 0x31, 0x01, 0x3e, 0xd8, 0xff, 0xe1, 0xd1, 0xff, 0x4a, 0x50, 0x00, 0x80, 0x78, 0x00, 0xd4, 0xa0, 0x00, 0x80, 0x65, 0x00, 0x08, 0x36, 0xff, 0x25, 0x16, 0x01, 0xeb, 0x74, 0x03, 0x9d, 0x54, 0xff, 0xea, 0x3d, 0xfd, 0x49, 0x02, 0xff, 0x80, 0x66, 0xfe, 0x4a, 0xe7, 0xfe, 0x08, 0x9a, 0x00, 0xa1, 0x36, 0x12, 0xb5, 0x22, 0x20, 0x0a, 0x2c, 0x13, 0xef, 0xb0, 0x01, 0x04, 0x9d, 0xfa, 0xd8, 0x5c, 0xfa, 0x69, 0xea, 0xff, 0xc3, 0x90, 0x05, 0x7c, 0x9a, 0x04, 0x8e, 0x79, 0x00, 0xcf, 0x30, 0x00, 0x23, 0x31, 0xff, 0x24, 0x11, 0xfd, 0xcb, 0x48, 0xfe, 0x44, 0xd5, 0xff, 0x77, 0x1e, 0x01, 0x74, 0x9b, 0x01, 0xca, 0xbb, 0x00, 0x7f, 0x2a, 0x00, 0x61, 0x39, 0x00, 0x37, 0x39, 0x00, 0xb9, 0x57, 0x00, 0x2f, 0xa9, 0x00, 0xb0, 0x3e, 0xff, 0x10, 0xd7, 0x00, 0x31, 0x74, 0x03, 0x00, 0x1d, 0xff, 0x50, 0x0e, 0xfd, 0x64, 0x31, 0xff, 0xe1, 0x80, 0xfe, 0x0e, 0x41, 0xff, 0x2f, 0x22, 0x01, 0xe5, 0x77, 0x12, 0x3b, 0xf0, 0x21, 0xee, 0xc4, 0x14, 0xca, 0x63, 0x01, 0x8f, 0x7d, 0xf9, 0x07, 0xfe, 0xf8, 0xcd, 0xd8, 0xff, 0xcd, 0x8f, 0x06, 0x32, 0x0a, 0x05, 0x7f, 0x85, 0x00, 0xe5, 0xd0, 0xff, 0xed, 0xf2, 0xfe, 0x5e, 0xf1, 0xfc, 0x3b, 0xa8, 0xfd, 0x69, 0x05, 0xff, 0x8b, 0x91, 0x00, 0xa5, 0x55, 0x01, 0xe3, 0x72, 0x00, 0x20, 0x65, 0x00, 0x7a, 0x05, 0x01, 0xd3, 0xc0, 0x00, 0x77, 0x08, 0x00, 0xce, 0x88, 0x00, 0x88, 0x94, 0xff, 0x7d, 0xbd, 0xff, 0x3b, 0x0e, 0x03, 0xb2, 0x63, 0x00, 0x8a, 0xa7, 0xfc, 0xd5, 0x3d, 0xfe, 0xed, 0xbc, 0xfe, 0x53, 0x9e, 0xff, 0x38, 0x3e, 0x01, 0xa9, 0x06, 0x13, 0x25, 0xe8, 0x23, 0x60, 0xd0, 0x16, 0x65, 0xcd, 0x00, 0xb7, 0x55, 0xf7, 0xf6, 0x3e, 0xf8, 0x76, 0x31, 0x00, 0x21, 0x2d, 0x07, 0xa1, 0xf5, 0x05, 0xe2, 0x26, 0x00, 0xe9, 0xcb, 0xfe, 0x33, 0x4f, 0xff, 0x21, 0x0d, 0xfd, 0x4d, 0x0c, 0xfd, 0x31, 0xe3, 0xfe, 0x16, 0x18, 0x00, 0xab, 0xbf, 0x00, 0xbd, 0xf9, 0xff, 0x81, 0x7c, 0xff, 0x3a, 0xde, 0x00, 0xcb, 0x5b, 0x01, 0x70, 0x09, 0x00, 0xa0, 0xf7, 0x00, 0x4c, 0x65, 0x00, 0xa8, 0x83, 0xfe, 0xab, 0xee, 0x01, 0x15, 0xa6, 0x01, 0xfc, 0xfb, 0xfc, 0x80, 0x5e, 0xfd, 0xd9, 0xbd, 0xfe, 0x10, 0x74, 0xff, 0xd5, 0xf9, 0x00, 0xc4, 0xc8, 0x13, 0x2c, 0x3e, 0x26, 0x6a, 0x49, 0x19, 0x8f, 0x58, 0x00, 0xda, 0xe5, 0xf4, 0x93, 0x24, 0xf7, 0x9d, 0x67, 0x00, 0xd9, 0x01, 0x08, 0xd7, 0xbf, 0x06, 0x3e, 0x9b, 0xff, 0xed, 0xca, 0xfd, 0x3b, 0x88, 0xff, 0xa5, 0x94, 0xfd, 0x36, 0xb0, 0xfc, 0xc7, 0xbf, 0xfe, 0x26, 0x03, 0x00, 0xbc, 0x33, 0x00, 0xa1, 0xc4, 0xff, 0xde, 0xfb, 0xfe, 0x5c, 0x06, 0x00, 0x2f, 0x7c, 0x01, 0x1c, 0x23, 0x00, 0xc0, 0x2d, 0x00, 0xfe, 0x40, 0x01, 0x9b, 0x5b, 0xff, 0x2c, 0x28, 0x00, 0x19, 0xeb, 0x01, 0xd8, 0x05, 0xff, 0xf4, 0xca, 0xfc, 0xdb, 0x71, 0xfd, 0x2f, 0x3f, 0xff, 0x3f, 0x12, 0x01, 0xd7, 0x21, 0x14, 0x5f, 0xb3, 0x28, 0xc9, 0xdd, 0x1c, 0xb8, 0x0c, 0x00, 0xa3, 0x09, 0xf2, 0x48, 0xf4, 0xf5, 0x9c, 0x42, 0x00, 0xf4, 0xf6, 0x08, 0x8e, 0xdc, 0x07, 0x8f, 0xe9, 0xfe, 0x9f, 0x76, 0xfc, 0x42, 0x60, 0xff, 0x6e, 0x5b, 0xfe, 0xa9, 0x94, 0xfc, 0xd9, 0x73, 0xfe, 0xd5, 0x4b, 0x00, 0x27, 0xd8, 0xff, 0xd1, 0x4e, 0xff, 0x8d, 0xb4, 0xfe, 0x49, 0x5e, 0xff, 0x65, 0x59, 0x01, 0xd0, 0x92, 0x00, 0x4d, 0x56, 0xff, 0x3c, 0x77, 0x00, 0x43, 0x2c, 0x00, 0xe3, 0x82, 0xff, 0x60, 0x28, 0x01, 0x10, 0x14, 0x01, 0x5e, 0x07, 0xfe, 0x6a, 0x8d, 0xfc, 0x9a, 0x58, 0xfe, 0x09, 0x51, 0x00, 0xfb, 0xac, 0x14, 0x0b, 0x77, 0x2b, 0xdd, 0xbe, 0x20, 0x09, 0xbc, 0xff, 0x26, 0xaf, 0xee, 0x7d, 0x99, 0xf4, 0x85, 0x6b, 0x00, 0xdc, 0x0a, 0x0a, 0xa1, 0x0f, 0x09, 0x02, 0x17, 0xfe, 0xa1, 0xd1, 0xfa, 0x38, 0x2c, 0xff, 0xec, 0x25, 0xff, 0x1c, 0x91, 0xfc, 0xd5, 0x13, 0xfe, 0x41, 0x83, 0x00, 0x1d, 0xee, 0xff, 0xd2, 0xea, 0xfe, 0x09, 0x49, 0xfe, 0xf5, 0x1a, 0xff, 0xe2, 0xd6, 0x00, 0x34, 0xd0, 0x00, 0xaf, 0xda, 0xff, 0x17, 0x34, 0xff, 0xfa, 0x95, 0xff, 0x19, 0xc9, 0xff, 0x20, 0xd6, 0xff, 0x1e, 0x6e, 0x01, 0xdf, 0xd6, 0x00, 0xfe, 0x5d, 0xfd, 0x9d, 0xe0, 0xfc, 0xad, 0xb0, 0xff, 0xe3, 0xa5, 0x17, 0x21, 0x12, 0x30, 0x12, 0xc4, 0x21, 0x88, 0xe1, 0xfc, 0x16, 0x85, 0xeb, 0x0c, 0x5f, 0xf3, 0xe1, 0xa9, 0x01, 0xf7, 0x0c, 0x0c, 0xa7, 0x22, 0x09, 0x94, 0x3f, 0xfc, 0xdf, 0x62, 0xf9, 0x05, 0x21, 0xff, 0x70, 0x95, 0xff, 0x28, 0xa1, 0xfc, 0xd0, 0xc9, 0xfd, 0xf6, 0x78, 0x00, 0xb1, 0x04, 0x00, 0x47, 0x79, 0xfe, 0xa7, 0xe0, 0xfd, 0xf8, 0xff, 0xfe, 0x82, 0x7e, 0x00, 0x25, 0x97, 0x00, 0xca, 0x13, 0x00, 0x42, 0x03, 0xff, 0x71, 0x94, 0xfe, 0x70, 0x37, 0xff, 0xda, 0x7e, 0xff, 0xf9, 0xc0, 0x00, 0xd3, 0xe1, 0x01, 0x59, 0x91, 0xff, 0xf1, 0xed, 0xfc, 0x0f, 0x4a, 0xfe, 0xc6, 0x8b, 0x19, 0x3d, 0xdd, 0x33, 0x93, 0x8d, 0x24, 0xa4, 0x94, 0xfb, 0xc1, 0xd2, 0xe7, 0xe7, 0x02, 0xf2, 0x5f, 0xce, 0x02, 0x0c, 0x6d, 0x0d, 0x69, 0x89, 0x09, 0xdf, 0x14, 0xfb, 0x34, 0x82, 0xf7, 0xb8, 0xf7, 0xfe, 0x6e, 0xab, 0x00, 0xc4, 0x51, 0xfc, 0xc0, 0x6a, 0xfd, 0xdb, 0xd2, 0x00, 0x4d, 0xd5, 0xff, 0x31, 0x20, 0xfe, 0x04, 0xd1, 0xfd, 0x4a, 0xd1, 0xfe, 0x13, 0x34, 0x00, 0x28, 0xa5, 0x00, 0x63, 0xda, 0xff, 0xf0, 0x25, 0xff, 0x04, 0x72, 0xfe, 0x83, 0xe5, 0xfd, 0x6f, 0x44, 0xff, 0x8c, 0xab, 0x00, 0xe5, 0x9c, 0x01, 0x6b, 0x54, 0x01, 0xd0, 0xa2, 0xfe, 0x58, 0x63, 0xfd, 0x45, 0x6e, 0x1b, 0x97, 0x50, 0x37, 0xe8, 0x9d, 0x27, 0x9d, 0xf1, 0xfa, 0x3e, 0xc9, 0xe3, 0x7d, 0x62, 0xf0, 0xbc, 0x2b, 0x04, 0xb9, 0xb2, 0x0e, 0x5c, 0xb1, 0x09, 0xdf, 0xeb, 0xf9, 0x48, 0x93, 0xf5, 0xca, 0x6e, 0xfe, 0x58, 0x20, 0x02, 0x5b, 0x47, 0xfc, 0x2b, 0x6c, 0xfc, 0x8c, 0x0c, 0x01, 0x4b, 0x05, 0x00, 0x37, 0xc1, 0xfd, 0x64, 0x5c, 0xfd, 0x27, 0x07, 0xff, 0x7c, 0xf6, 0xff, 0xfb, 0x58, 0x00, 0x9d, 0xfd, 0xff, 0xa6, 0xaa, 0xfe, 0xac, 0xbb, 0xfe, 0xea, 0x64, 0xfd, 0x21, 0xe8, 0xfd, 0x3e, 0xe6, 0x00, 0xc4, 0xac, 0x01, 0x24, 0x78, 0x01, 0x92, 0x81, 0x00, 0x8a, 0x68, 0xfe, 0xe6, 0x59, 0x1f, 0xef, 0xc6, 0x3b, 0x5f, 0xab, 0x27, 0x10, 0xd7, 0xf8, 0x52, 0xff, 0xe0, 0xd7, 0x0c, 0xef, 0x26, 0x2b, 0x06, 0x6d, 0x8d, 0x10, 0x81, 0xc7, 0x08, 0xbb, 0xe3, 0xf7, 0x66, 0x7b, 0xf4, 0xe5, 0x51, 0xfe, 0xdb, 0xef, 0x02, 0x9a, 0x78, 0xfc, 0x8d, 0xb1, 0xfb, 0x4f, 0x20, 0x01, 0x59, 0xf4, 0xff, 0x2d, 0xa2, 0xfd, 0x92, 0x3a, 0xfd, 0x1c, 0xd6, 0xfe, 0x17, 0x60, 0x00, 0x3c, 0xfa, 0xff, 0x97, 0xa2, 0xff, 0x6c, 0xbb, 0xfe, 0xd3, 0x74, 0xfe, 0xdb, 0x68, 0xfd, 0xbd, 0x5c, 0xfd, 0x51, 0x3a, 0x00, 0x90, 0x1b, 0x02, 0x24, 0xa9, 0x01, 0x9f, 0xca, 0x00, 0xc8, 0x44, 0x00, 0x70, 0xb1, 0x22, 0xcd, 0x6e, 0x3f, 0xb8, 0xd2, 0x27, 0x78, 0x45, 0xf8, 0xf6, 0x33, 0xdf, 0xe2, 0xf9, 0xec, 0xaa, 0xc8, 0x07, 0x9f, 0x39, 0x12, 0xc1, 0x9d, 0x07, 0x33, 0x9c, 0xf6, 0x4b, 0x7c, 0xf3, 0x8a, 0xa0, 0xfd, 0x92, 0xcc, 0x03, 0xd1, 0xf3, 0xfc, 0xe8, 0xbc, 0xfa, 0x7f, 0xf2, 0x00, 0xd1, 0x36, 0x00, 0xaa, 0x57, 0xfd, 0xff, 0x38, 0xfd, 0xb0, 0xef, 0xfe, 0x5b, 0x85, 0x00, 0xef, 0xe0, 0xff, 0x1f, 0x29, 0xff, 0x77, 0xab, 0xfe, 0xfc, 0x45, 0xfe, 0xf3, 0x72, 0xfd, 0x1a, 0x85, 0xfd, 0xa9, 0x53, 0xff, 0x20, 0xe6, 0x01, 0x2d, 0x69, 0x02, 0x80, 0x9a, 0x00, 0xb8, 0xf3, 0x00, 0x94, 0x1d, 0x26, 0xab, 0xd5, 0x42, 0x67, 0xb0, 0x26, 0x7c, 0xb7, 0xf7, 0x60, 0x04, 0xdf, 0xd2, 0xc8, 0xea, 0x31, 0x6f, 0x08, 0xa8, 0xc9, 0x13, 0xb2, 0x35, 0x06, 0xae, 0x5d, 0xf5, 0xe0, 0xc7, 0xf2, 0x2c, 0xbd, 0xfc, 0x86, 0x4a, 0x04, 0xbe, 0x52, 0xfd, 0xa0, 0xcb, 0xf9, 0x2e, 0x57, 0x00, 0xed, 0x58, 0x00, 0x71, 0x2f, 0xfd, 0xec, 0x22, 0xfd, 0xf2, 0x23, 0xff, 0x25, 0x78, 0x00, 0x77, 0xe1, 0xff, 0xb5, 0x95, 0xfe, 0xa7, 0x25, 0xfe, 0x0e, 0x51, 0xfe, 0x10, 0x26, 0xfd, 0x23, 0xfe, 0xfd, 0x4d, 0x3d, 0xff, 0x3f, 0x8b, 0x00, 0xec, 0xba, 0x02, 0xce, 0x27, 0x01, 0x31, 0x5d, 0x00, 0x4f, 0x3a, 0x2c, 0x17, 0xb0, 0x46, 0x54, 0x0c, 0x22, 0x67, 0x43, 0xf5, 0x53, 0x60, 0xe0, 0x36, 0x7a, 0xea, 0x66, 0x0e, 0x09, 0xb3, 0xdb, 0x14, 0x11, 0x97, 0x04, 0xbe, 0x91, 0xf3, 0xae, 0x9b, 0xf2, 0x6f, 0xd0, 0xfc, 0x72, 0x46, 0x04, 0x7b, 0x36, 0xfd, 0x8e, 0x67, 0xf9, 0x16, 0xe4, 0xff, 0x4a, 0x12, 0x00, 0x36, 0x5c, 0xfd, 0x79, 0x69, 0xfd, 0x8f, 0x4a, 0xff, 0x8b, 0xda, 0x00, 0xd6, 0xd0, 0xff, 0xf0, 0xf0, 0xfd, 0x54, 0xd9, 0xfd, 0x44, 0x4a, 0xfe, 0xfe, 0xec, 0xfc, 0x73, 0x6b, 0xfe, 0x2c, 0x30, 0x00, 0xd4, 0x84, 0xff, 0x69, 0xbd, 0x01, 0x03, 0x1f, 0x02, 0xd1, 0xff, 0xff, 0x9a, 0x7c, 0x33, 0x3d, 0x82, 0x4a, 0x90, 0x2f, 0x1b, 0x4e, 0x77, 0xf2, 0x88, 0xf3, 0xe2, 0x43, 0x71, 0xeb, 0xff, 0x99, 0x09, 0xc6, 0x95, 0x14, 0xca, 0xa9, 0x03, 0x38, 0xfa, 0xf1, 0x96, 0x57, 0xf2, 0x27, 0x85, 0xfd, 0xdc, 0xaf, 0x03, 0x41, 0x42, 0xfd, 0xf5, 0x13, 0xf9, 0x9b, 0x71, 0xff, 0x13, 0xf7, 0xff, 0xab, 0x70, 0xfd, 0x26, 0x1e, 0xfe, 0xb9, 0x3c, 0xff, 0x0d, 0x7d, 0x01, 0x36, 0xc7, 0xff, 0x10, 0x2c, 0xfd, 0x45, 0x10, 0xfe, 0xb7, 0x06, 0xfe, 0x3d, 0xf3, 0xfc, 0x98, 0xd4, 0xfe, 0x66, 0x3d, 0x01, 0x14, 0x42, 0xff, 0xc9, 0x16, 0x00, 0x74, 0x87, 0x02, 0x49, 0x16, 0x00, 0xe2, 0xd7, 0x3a, 0x6c, 0x8b, 0x4e, 0xf4, 0x31, 0x13, 0xb1, 0xc9, 0xee, 0x44, 0x09, 0xe6, 0xed, 0x25, 0xed, 0xf8, 0xab, 0x09, 0x30, 0x26, 0x13, 0xb9, 0x60, 0x03, 0x1b, 0xa4, 0xf0, 0x4b, 0x90, 0xf1, 0x74, 0x45, 0xfe, 0xcf, 0x71, 0x02, 0xe9, 0x70, 0xfd, 0xec, 0xe5, 0xf8, 0x3c, 0xb6, 0xfe, 0x2d, 0x28, 0x00, 0x35, 0x50, 0xfd, 0xa4, 0xcf, 0xfe, 0xd9, 0x08, 0xff, 0xe7, 0xd5, 0x01, 0x7c, 0xc0, 0xff, 0xb4, 0x57, 0xfc, 0xa9, 0x9a, 0xfe, 0x91, 0x8d, 0xfd, 0xfa, 0xf5, 0xfc, 0x0e, 0x65, 0xff, 0x9b, 0xa4, 0x01, 0xd8, 0x49, 0xff, 0xd3, 0x6c, 0xfe, 0xa7, 0x03, 0x02, 0x77, 0x5d, 0x00, 0x6f, 0x05, 0x44, 0xbb, 0xbb, 0x51, 0x31, 0x96, 0x09, 0xb7, 0xeb, 0xea, 0x72, 0xae, 0xe8, 0x93, 0x37, 0xf0, 0xb5, 0x01, 0x0a, 0x68, 0x13, 0x11, 0x7c, 0x60, 0x03, 0xea, 0x1f, 0xef, 0xcf, 0x15, 0xf1, 0x0c, 0xc6, 0xfe, 0x39, 0x13, 0x01, 0x54, 0xca, 0xfd, 0x65, 0x07, 0xf9, 0xbc, 0x89, 0xfe, 0x90, 0x30, 0x00, 0x8e, 0x76, 0xfd, 0x03, 0x5c, 0xff, 0x9a, 0xbb, 0xfe, 0xe8, 0x3a, 0x02, 0x42, 0x88, 0xff, 0xda, 0x11, 0xfc, 0x9f, 0x2d, 0xff, 0x46, 0x27, 0xfd, 0x85, 0x47, 0xfd, 0xa9, 0x07, 0x00, 0xec, 0x84, 0x01, 0xbd, 0xe9, 0xfe, 0x4d, 0x83, 0xfd, 0x7c, 0x1f, 0x01, 0xe8, 0x3f, 0x00, 0x54, 0x91, 0x4d, 0xb6, 0x5b, 0x54, 0x70, 0xe9, 0xff, 0xd3, 0x38, 0xe7, 0x4c, 0x69, 0xea, 0x42, 0x73, 0xf3, 0x2d, 0xba, 0x0a, 0xbb, 0xfb, 0x0e, 0x30, 0x91, 0x03, 0xd4, 0x81, 0xed, 0xcf, 0x6b, 0xf0, 0x78, 0xd4, 0xfe, 0x02, 0xab, 0xff, 0x0e, 0xaa, 0xfe, 0xe3, 0xcb, 0xf9, 0x07, 0x7a, 0xfe, 0x0f, 0x2a, 0x00, 0xd1, 0xd1, 0xfd, 0x2b, 0x59, 0xff, 0x78, 0x59, 0xfe, 0x50, 0xd8, 0x02, 0x60, 0x5e, 0xff, 0x38, 0x37, 0xfc, 0x52, 0x90, 0xff, 0xa7, 0xeb, 0xfc, 0xa6, 0xdb, 0xfd, 0xbf, 0x23, 0x00, 0x0a, 0xcc, 0x00, 0x48, 0x8a, 0xfe, 0xb6, 0x23, 0xfd, 0xa3, 0x17, 0x00, 0x49, 0x21, 0x00, 0xc7, 0xef, 0x55, 0xd7, 0xf7, 0x56, 0x4f, 0x40, 0xf7, 0x73, 0x11, 0xe4, 0x7c, 0x08, 0xeb, 0xa1, 0xe0, 0xf5, 0x36, 0x3c, 0x0c, 0x4b, 0xfa, 0x0c, 0xa1, 0xd7, 0x03, 0x86, 0xbd, 0xeb, 0x0e, 0x60, 0xef, 0xc5, 0xc5, 0xfe, 0x62, 0x53, 0xfe, 0x87, 0xbb, 0x00, 0xd5, 0x96, 0xfa, 0x04, 0x25, 0xfe, 0x92, 0xaa, 0x00, 0x35, 0x65, 0xfd, 0xfc, 0x00, 0xff, 0x66, 0x58, 0xfe, 0x9f, 0x8f, 0x03, 0x42, 0x7c, 0xff, 0xce, 0x5a, 0xfc, 0x4c, 0xf0, 0xff, 0x0b, 0xa8, 0xfc, 0x65, 0xcc, 0xfd, 0x26, 0xc3, 0xff, 0x76, 0x3c, 0x00, 0xcf, 0x47, 0xfe, 0x6f, 0xf2, 0xfc, 0xc5, 0x95, 0xff, 0x3f, 0x58, 0x00, 0x39, 0x40, 0x5d, 0x40, 0x83, 0x59, 0x5b, 0x15, 0xf0, 0x0f, 0x6b, 0xe1, 0xeb, 0xf2, 0xe9, 0x98, 0x45, 0xf7, 0xdb, 0xbf, 0x0e, 0x59, 0x1c, 0x0b, 0x21, 0xb9, 0x03, 0x60, 0xd6, 0xe9, 0xae, 0x33, 0xee, 0x3d, 0xe1, 0xfe, 0x61, 0xbb, 0xfd, 0x05, 0x83, 0x03, 0xe3, 0xd7, 0xfa, 0x51, 0x36, 0xfe, 0xff, 0x09, 0x01, 0x59, 0xee, 0xfb, 0x05, 0x75, 0xff, 0x66, 0x95, 0xfe, 0x03, 0x39, 0x04, 0x0e, 0xdf, 0xff, 0xcb, 0x83, 0xfc, 0x15, 0x0d, 0x00, 0x0a, 0x34, 0xfb, 0x9f, 0x81, 0xfd, 0x9c, 0xd0, 0xff, 0xce, 0xab, 0xff, 0x81, 0x11, 0xfe, 0x39, 0x9d, 0xfd, 0x64, 0xde, 0xff, 0x7e, 0x8f, 0xff, 0xe2, 0x52, 0x63, 0xae, 0x96, 0x5b, 0x0d, 0xf7, 0xea, 0x55, 0x40, 0xdf, 0xd3, 0x58, 0xe7, 0x40, 0xa3, 0xf7, 0x8b, 0x89, 0x11, 0x84, 0xb0, 0x09, 0xc9, 0xc6, 0x02, 0x8c, 0xfe, 0xe7, 0x0b, 0x09, 0xee, 0xe3, 0x72, 0xff, 0xca, 0x72, 0xfd, 0xa8, 0x59, 0x06, 0x66, 0x1f, 0xfb, 0x57, 0xda, 0xfd, 0xac, 0xde, 0x00, 0xdd, 0x07, 0xfb, 0x1d, 0xa1, 0x00, 0xb9, 0xaf, 0xfe, 0xe5, 0xaf, 0x04, 0x68, 0x9b, 0x00, 0xc7, 0x02, 0xfc, 0xa9, 0x9a, 0xfe, 0x9a, 0x09, 0xfa, 0x9e, 0xf4, 0xfd, 0xf8, 0x6d, 0xff, 0xe8, 0xae, 0xff, 0x15, 0xf0, 0xfe, 0x85, 0x2e, 0xfe, 0x1d, 0x8e, 0xff, 0x13, 0xef, 0xfe, 0x25, 0x2b, 0x68, 0x25, 0x6e, 0x5c, 0x1a, 0x98, 0xe7, 0x4b, 0x4d, 0xde, 0xe8, 0x02, 0xe4, 0xab, 0xc5, 0xf6, 0xf4, 0x1d, 0x14, 0xaf, 0xc7, 0x08, 0x80, 0x76, 0x00, 0x7b, 0xba, 0xe7, 0xe7, 0xb8, 0xef, 0xca, 0xfa, 0xfe, 0x14, 0xde, 0xfd, 0xb4, 0x08, 0x09, 0xa6, 0xa5, 0xfa, 0xc1, 0x08, 0xfd, 0x85, 0x1c, 0x01, 0x22, 0x7b, 0xfb, 0x92, 0x6d, 0x01, 0x5b, 0xd8, 0xfe, 0x69, 0xda, 0x04, 0x37, 0xda, 0xff, 0x86, 0xb9, 0xfa, 0xac, 0xf9, 0xfd, 0xd1, 0x83, 0xf9, 0x31, 0xe9, 0xfd, 0x19, 0x4c, 0x00, 0x9f, 0x8a, 0x00, 0x68, 0xf1, 0xfe, 0x66, 0x3d, 0xfe, 0xe6, 0x07, 0x00, 0x5b, 0xa0, 0xfe, 0xd6, 0x87, 0x6a, 0xf5, 0x09, 0x5d, 0x79, 0x87, 0xe5, 0xad, 0x01, 0xdf, 0x0f, 0xbb, 0xe0, 0x66, 0xeb, 0xf3, 0x0e, 0x22, 0x17, 0x6b, 0x6a, 0x07, 0x62, 0x91, 0xfe, 0x7f, 0xba, 0xe9, 0x4c, 0xee, 0xf0, 0xa0, 0xea, 0xfe, 0x87, 0x5b, 0xfe, 0x15, 0x96, 0x0a, 0xf6, 0xbc, 0xf9, 0xa7, 0x46, 0xfc, 0x63, 0xdb, 0x02, 0xad, 0xec, 0xfb, 0xa0, 0xcc, 0x01, 0x5a, 0x34, 0xfe, 0xeb, 0xd9, 0x02, 0x84, 0x7c, 0xff, 0xf4, 0x9a, 0xfa, 0xb1, 0x72, 0xfd, 0xf2, 0x50, 0xf9, 0xb9, 0x43, 0xff, 0x48, 0x92, 0x01, 0x54, 0xd3, 0xff, 0x25, 0x4c, 0xff, 0x10, 0x0e, 0xff, 0x8a, 0x96, 0xff, 0x0c, 0xd1, 0xfd, 0xce, 0x0a, 0x6d, 0x07, 0x96, 0x5a, 0x66, 0xb8, 0xe5, 0x79, 0x3d, 0xe1, 0x46, 0x95, 0xda, 0x64, 0xa4, 0xf0, 0xde, 0x02, 0x19, 0x56, 0x11, 0x08, 0x68, 0x34, 0xfe, 0xde, 0x0b, 0xeb, 0x5b, 0x5b, 0xf3, 0xa1, 0xbb, 0xfd, 0x0a, 0x51, 0xfe, 0x7b, 0x9b, 0x0b, 0xe3, 0x29, 0xf9, 0xe8, 0x58, 0xfd, 0x78, 0x4c, 0x04, 0xa8, 0xed, 0xfb, 0x1f, 0xf8, 0xff, 0x95, 0xbf, 0xfc, 0x51, 0x61, 0x02, 0x4a, 0x3f, 0xff, 0xb6, 0xfc, 0xfa, 0xec, 0xa0, 0xfd, 0x3c, 0x13, 0xfa, 0x24, 0xf5, 0xff, 0x4f, 0x50, 0x01, 0x7f, 0xde, 0xff, 0xe2, 0xa2, 0xff, 0xae, 0xe9, 0xfe, 0x06, 0x85, 0xff, 0x4d, 0xb4, 0xfd, 0xc5, 0xfb, 0x6b, 0xa8, 0x1e, 0x59, 0xab, 0x90, 0xe7, 0x76, 0xb6, 0xe3, 0x17, 0xe9, 0xd4, 0x99, 0x13, 0xeb, 0xf2, 0x4f, 0x1c, 0x48, 0x2c, 0x0a, 0xdd, 0x1d, 0xfd, 0xe9, 0x83, 0xed, 0x70, 0x7f, 0xf5, 0xc1, 0xba, 0xfb, 0x75, 0x53, 0xfd, 0xdc, 0xa6, 0x0d, 0xf2, 0xd1, 0xf9, 0x76, 0x98, 0xfd, 0x7f, 0xdc, 0x04, 0x2f, 0x52, 0xf9, 0x86, 0xa0, 0xfe, 0x92, 0x6c, 0xfd, 0x23, 0x5b, 0x01, 0x7d, 0x9f, 0xff, 0x97, 0x72, 0xfc, 0xca, 0x12, 0xfe, 0x7b, 0xee, 0xf9, 0xff, 0x1f, 0x00, 0xbc, 0x56, 0x01, 0x1a, 0x5d, 0xff, 0xdf, 0x08, 0x00, 0xf3, 0xf2, 0xfe, 0xba, 0x7c, 0xff, 0x14, 0x89, 0xfd, 0x6d, 0xf5, 0x6b, 0xe6, 0x28, 0x53, 0x5c, 0x63, 0xe9, 0xfe, 0xa3, 0xe7, 0x20, 0x55, 0xce, 0x7a, 0x6a, 0xe9, 0xc1, 0x75, 0x1f, 0xdf, 0xbf, 0x0a, 0x64, 0xef, 0xfc, 0xed, 0xf1, 0xef, 0x42, 0x27, 0xf7, 0xe1, 0xf2, 0xf8, 0xf1, 0xd9, 0xfe, 0x87, 0x76, 0x0f, 0x51, 0x80, 0xf8, 0xc7, 0xbf, 0xfd, 0x7d, 0x30, 0x03, 0x02, 0xc7, 0xf7, 0xe2, 0x8f, 0xff, 0xff, 0xc2, 0xfd, 0x86, 0xb5, 0x00, 0xe3, 0xf0, 0x00, 0x40, 0xbb, 0xfd, 0xcf, 0x43, 0xfd, 0x60, 0x19, 0xfa, 0x5e, 0x67, 0x00, 0x60, 0xe3, 0x00, 0xbc, 0x50, 0xff, 0x80, 0x14, 0x00, 0xb4, 0x04, 0xff, 0x79, 0x9c, 0xff, 0xa0, 0x69, 0xfd, 0xaa, 0x71, 0x68, 0xcd, 0x12, 0x4e, 0x9e, 0x42, 0xec, 0x9b, 0x3b, 0xeb, 0x1b, 0x95, 0xcb, 0x20, 0x1c, 0xe8, 0x63, 0x4f, 0x20, 0x90, 0x16, 0x0c, 0xf6, 0x9a, 0xfd, 0x92, 0x28, 0xf1, 0xc4, 0xde, 0xf8, 0x03, 0x63, 0xf8, 0x6e, 0x16, 0xff, 0x55, 0x94, 0x0f, 0x78, 0x51, 0xf7, 0xd6, 0x70, 0xfc, 0xf1, 0xb2, 0x02, 0x1b, 0xa5, 0xf8, 0x0b, 0xc0, 0xff, 0x13, 0x5d, 0xfe, 0x57, 0x6e, 0x01, 0x30, 0x4e, 0x01, 0x3c, 0xef, 0xfd, 0x0d, 0xcb, 0xfc, 0x64, 0xc2, 0xfa, 0xec, 0xaa, 0x00, 0xca, 0xf5, 0xff, 0x22, 0x4c, 0xff, 0xf6, 0x6f, 0x00, 0x9f, 0x15, 0xff, 0x24, 0xdd, 0xff, 0x87, 0x6f, 0xfd, 0xdf, 0xf2, 0x60, 0xd9, 0x0e, 0x49, 0x14, 0x22, 0xf0, 0xd6, 0xe3, 0xef, 0x30, 0xef, 0xcc, 0xa0, 0x1c, 0xe6, 0x15, 0xa7, 0x1f, 0xc9, 0xfd, 0x0c, 0x96, 0xcf, 0xfd, 0x92, 0x00, 0xf4, 0x45, 0x23, 0xfa, 0x75, 0xde, 0xf6, 0xca, 0xef, 0xfe, 0x3f, 0xbc, 0x0e, 0xb8, 0xa4, 0xf5, 0x56, 0x7f, 0xfc, 0x74, 0xbb, 0x03, 0xc0, 0x4e, 0xf8, 0x45, 0xc5, 0x00, 0xfa, 0x02, 0x00, 0xa0, 0x4b, 0x00, 0x9f, 0x2d, 0x01, 0xef, 0x35, 0xfe, 0xb4, 0x1a, 0xfd, 0x96, 0x95, 0xfb, 0xeb, 0x8a, 0xff, 0xda, 0xbc, 0xff, 0x01, 0xb6, 0xff, 0x2a, 0x4c, 0x00, 0xde, 0x62, 0xff, 0xa8, 0xcd, 0xff, 0x23, 0x64, 0xfd, 0xdb, 0x34, 0x58, 0xe6, 0xcc, 0x41, 0x9c, 0xef, 0xf5, 0x05, 0x97, 0xf5, 0xd8, 0x91, 0xcf, 0x34, 0x21, 0xe6, 0x28, 0x90, 0x1b, 0x46, 0x5b, 0x0d, 0x45, 0xbe, 0x00, 0x86, 0x67, 0xf5, 0x2d, 0xf3, 0xf9, 0xc8, 0x8d, 0xf6, 0x4c, 0x5c, 0xfe, 0x8f, 0x57, 0x0c, 0x18, 0x75, 0xf6, 0x1e, 0x6b, 0xfd, 0x97, 0xe2, 0x02, 0x05, 0x05, 0xfa, 0x5d, 0x08, 0x02, 0xbf, 0x9d, 0xff, 0x5f, 0x4b, 0xff, 0x7a, 0x55, 0x01, 0x07, 0x43, 0xff, 0x4f, 0xe4, 0xfc, 0x34, 0x80, 0xfb, 0x05, 0xa4, 0xff, 0xff, 0x9a, 0xff, 0x96, 0x9d, 0xff, 0x66, 0x6c, 0x00, 0xdf, 0x5e, 0xff, 0x19, 0xce, 0xff, 0xa3, 0xf0, 0xfd, 0xdd, 0xcd, 0x4d, 0x8e, 0xad, 0x3a, 0x6f, 0x7a, 0xfc, 0xcc, 0x45, 0xfb, 0x4f, 0x6b, 0xd4, 0x63, 0xca, 0xe5, 0xe4, 0xdd, 0x16, 0xb6, 0x06, 0x0f, 0x8b, 0x8a, 0x01, 0x17, 0x26, 0xf6, 0x68, 0x31, 0xfb, 0xa8, 0x51, 0xf5, 0xce, 0xd7, 0xfd, 0x45, 0xbb, 0x0b, 0xc1, 0xee, 0xf6, 0x11, 0xb5, 0xfd, 0x11, 0x91, 0x03, 0x41, 0x90, 0xfb, 0x99, 0xcc, 0x01, 0x1a, 0x03, 0xff, 0x88, 0x2f, 0xff, 0x17, 0x2c, 0x02, 0x71, 0xff, 0xfe, 0x3d, 0x81, 0xfc, 0x10, 0xd9, 0xfc, 0x3f, 0x7e, 0xff, 0xfd, 0x22, 0xff, 0xde, 0xd7, 0xff, 0x84, 0x49, 0x00, 0x24, 0x82, 0xff, 0x5e, 0x06, 0x00, 0x52, 0xec, 0xfd, 0xdf, 0xd4, 0x3d, 0x20, 0xf6, 0x2d, 0xce, 0x4c, 0xf5, 0x9a, 0xcf, 0xfa, 0x9c, 0x96, 0xf0, 0x4f, 0xab, 0xfe, 0x14, 0xf6, 0x11, 0x8b, 0x29, 0xfd, 0x72, 0xc1, 0xf7, 0x51, 0x6b, 0xf9, 0x42, 0x7f, 0x02, 0x6d, 0xf7, 0xff, 0x63, 0xd2, 0xfe, 0x6b, 0xe7, 0x05, 0x16, 0x66, 0xf8, 0x16, 0x42, 0xfd, 0xb9, 0x4d, 0x02, 0x76, 0xc3, 0xfa, 0x5c, 0x5a, 0xff, 0x4b, 0x55, 0xff, 0x17, 0xfc, 0xfe, 0xa0, 0x20, 0x00, 0xef, 0x61, 0xff, 0xe0, 0x82, 0xfd, 0x4a, 0xad, 0xfd, 0xf2, 0x08, 0x03, 0x0c, 0x48, 0x00, 0x47, 0x4b, 0xff, 0x53, 0x57, 0x01, 0xd4, 0xaf, 0xfd, 0xef, 0xd7, 0xfe, 0xfb, 0x33, 0xff, 0x14, 0xf9, 0x34, 0x2f, 0xe9, 0x2b, 0x10, 0x46, 0xfb, 0x9a, 0x33, 0xfb, 0x48, 0x5e, 0xf1, 0x90, 0x5f, 0xfd, 0xf3, 0x68, 0x10, 0xf0, 0x68, 0x00, 0x53, 0x64, 0xf9, 0x4b, 0xe6, 0xf9, 0xa3, 0x58, 0x01, 0xc0, 0x18, 0xff, 0x06, 0xdb, 0xfe, 0xe3, 0x2a, 0x05, 0x06, 0xca, 0xf9, 0x2d, 0x63, 0xfd, 0xcb, 0x24, 0x02, 0xf3, 0x3c, 0xfc, 0x84, 0x43, 0xff, 0x4e, 0x83, 0xff, 0xcb, 0x8e, 0xff, 0xe1, 0x0e, 0x00, 0xcb, 0x66, 0xff, 0x3e, 0xb2, 0xfd, 0x5c, 0x76, 0xfd, 0x18, 0x60, 0x02, 0x36, 0x9e, 0x00, 0x1f, 0x76, 0xff, 0x52, 0x84, 0x01, 0xd1, 0xa5, 0xfe, 0x9f, 0xd3, 0xfe, 0x35, 0x36, 0xff, 0x47, 0x83, 0x2d, 0x29, 0x4e, 0x29, 0xdb, 0x48, 0x00, 0x63, 0x0f, 0xfc, 0xdb, 0xc4, 0xf2, 0x56, 0xff, 0xfc, 0xff, 0x8e, 0x0e, 0x10, 0x72, 0x02, 0x3f, 0x06, 0xfb, 0x81, 0xd8, 0xfa, 0xfe, 0x49, 0x00, 0x7c, 0xb6, 0xfe, 0xeb, 0x67, 0xff, 0x65, 0x50, 0x04, 0xc1, 0x34, 0xfb, 0x86, 0xda, 0xfd, 0x0f, 0x15, 0x02, 0xb1, 0x93, 0xfd, 0x32, 0x5b, 0xff, 0xf4, 0xe9, 0xff, 0xd0, 0x11, 0x00, 0x39, 0x25, 0x00, 0xec, 0x95, 0xff, 0x77, 0x1d, 0xfe, 0xda, 0xb0, 0xfd, 0xf9, 0xdd, 0x01, 0x13, 0x19, 0x01, 0xdd, 0xdb, 0xff, 0xcc, 0x5a, 0x01, 0xb0, 0x37, 0xff, 0x23, 0xea, 0xfe, 0xdf, 0x54, 0xff, 0xa6, 0x8a, 0x27, 0x71, 0x24, 0x27, 0xe4, 0x8c, 0x03, 0x14, 0x92, 0xfc, 0xdc, 0x5b, 0xf4, 0xbc, 0x06, 0xfd, 0x25, 0xf0, 0x0c, 0x99, 0xac, 0x03, 0xce, 0xa4, 0xfc, 0x7e, 0xba, 0xfb, 0xcf, 0x96, 0xff, 0xaf, 0xe0, 0xfe, 0xd4, 0xc3, 0xff, 0xc9, 0x89, 0x03, 0xac, 0x68, 0xfc, 0x05, 0x93, 0xfe, 0x01, 0x24, 0x02, 0x4f, 0x7e, 0xfe, 0x7d, 0x9d, 0xff, 0xc1, 0x3c, 0x00, 0xb5, 0x97, 0x00, 0x04, 0x52, 0x00, 0xc6, 0xbe, 0xff, 0xed, 0xce, 0xfe, 0x93, 0x29, 0xfe, 0x2c, 0x76, 0x01, 0x2a, 0x3f, 0x01, 0x6b, 0x05, 0x00, 0xa9, 0x16, 0x01, 0x5a, 0x8a, 0xff, 0xdd, 0x19, 0xff, 0x4b, 0x54, 0xff, 0x0f, 0x14, 0x23, 0xf2, 0x4b, 0x25, 0x10, 0x64, 0x05, 0x2c, 0x79, 0xfc, 0xe4, 0xc5, 0xf5, 0x40, 0x5c, 0xfd, 0x7a, 0x5a, 0x0b, 0xb0, 0x43, 0x04, 0x44, 0xe4, 0xfd, 0x01, 0x70, 0xfc, 0xd8, 0x50, 0xff, 0xf0, 0x13, 0xff, 0xb7, 0xc9, 0xff, 0xca, 0xe1, 0x02, 0xc1, 0x73, 0xfd, 0xe7, 0x34, 0xff, 0xdf, 0xfb, 0x01, 0x1e, 0x10, 0xff, 0xe6, 0xe2, 0xff, 0x6e, 0x5c, 0x00, 0xcb, 0xe8, 0x00, 0xe8, 0x8b, 0x00, 0xa8, 0xe9, 0xff, 0x86, 0x4d, 0xff, 0x01, 0x60, 0xfe, 0xf2, 0xc6, 0x00, 0xe3, 0x13, 0x01, 0xbd, 0x16, 0x00, 0xfe, 0x91, 0x00, 0x70, 0x88, 0xff, 0x65, 0x45, 0xff, 0x47, 0x62, 0xff, 0x37, 0xd6, 0x1f, 0x7e, 0xb1, 0x23, 0x7d, 0x56, 0x06, 0x5c, 0x47, 0xfc, 0x34, 0x29, 0xf7, 0x04, 0xe1, 0xfd, 0x3f, 0xea, 0x09, 0xdb, 0xa1, 0x04, 0xa2, 0xf4, 0xfe, 0xa3, 0x0f, 0xfd, 0x49, 0x6f, 0xff, 0x69, 0x41, 0xff, 0xa1, 0xd9, 0xff, 0x9b, 0xad, 0x02, 0xb4, 0x37, 0xfe, 0xcf, 0xaf, 0xff, 0xc4, 0xee, 0x01, 0xc5, 0x7d, 0xff, 0xb2, 0x1a, 0x00, 0x41, 0x80, 0x00, 0x2a, 0x41, 0x01, 0xbf, 0x9f, 0x00, 0xed, 0xd7, 0xff, 0x22, 0x98, 0xff, 0x7d, 0x79, 0xfe, 0x3a, 0x17, 0x00, 0x96, 0xcb, 0x00, 0xe7, 0x13, 0x00, 0xb9, 0x23, 0x00, 0xc6, 0xb0, 0xff, 0x95, 0x90, 0xff, 0x6a, 0x52, 0xff, 0xa9, 0x66, 0x1d, 0x2f, 0xa6, 0x22, 0xc7, 0xdb, 0x06, 0xa9, 0x02, 0xfc, 0x49, 0x68, 0xf8, 0xdf, 0x59, 0xfe, 0xe5, 0xd0, 0x08, 0x9c, 0xfd, 0x04, 0x0c, 0xdf, 0xff, 0xe3, 0x74, 0xfd, 0xf1, 0xeb, 0xff, 0x8c, 0xc3, 0xff, 0x3d, 0xb7, 0xff, 0x41, 0xca, 0x02, 0xfd, 0xe1, 0xfe, 0x7d, 0xdc, 0xff, 0xd5, 0x0c, 0x02, 0x2c, 0xe0, 0xff, 0x78, 0x4e, 0x00, 0x5f, 0x6f, 0x00, 0xe5, 0x54, 0x01, 0x23, 0xca, 0x00, 0x83, 0x9c, 0xff, 0xe6, 0xa4, 0xff, 0x62, 0xb2, 0xfe, 0xaa, 0x79, 0xff, 0x2d, 0x77, 0x00, 0x12, 0x6d, 0x00, 0x3c, 0x07, 0x00, 0xce, 0xb1, 0xff, 0x13, 0xbb, 0xff, 0x5e, 0x53, 0xff, 0xd0, 0xe8, 0x1b, 0xf3, 0xdf, 0x21, 0xfb, 0xf4, 0x06, 0xc8, 0xa1, 0xfb, 0x71, 0x6e, 0xf9, 0xaa, 0x05, 0xff, 0xc7, 0x05, 0x08, 0xd6, 0x1c, 0x05, 0xb4, 0x84, 0x00, 0x15, 0x97, 0xfd, 0xe3, 0x78, 0x00, 0x02, 0x9e, 0x00, 0xe8, 0x57, 0xff, 0x3d, 0xaa, 0x02, 0x15, 0xaf, 0xff, 0x0d, 0xbb, 0xff, 0x6e, 0xfd, 0x01, 0x05, 0x3e, 0x00, 0x64, 0x0f, 0x00, 0x9b, 0x2d, 0x00, 0x91, 0x52, 0x01, 0x92, 0xdc, 0x00, 0x0d, 0x6d, 0xff, 0x86, 0x4c, 0xff, 0x68, 0xde, 0xfe, 0xb2, 0x71, 0xff, 0x76, 0x1a, 0x00, 0x04, 0x8f, 0x00, 0x09, 0x0f, 0x00, 0xe4, 0x7c, 0xff, 0x2b, 0x09, 0x00, 0xf9, 0x81, 0xff, 0xa5, 0x74, 0x1a, 0x64, 0xad, 0x21, 0xd2, 0x5e, 0x07, 0x74, 0x57, 0xfb, 0x82, 0x6e, 0xfa, 0xb5, 0x97, 0xff, 0xc9, 0x93, 0x07, 0xf0, 0xf2, 0x04, 0x29, 0xe5, 0x00, 0xe0, 0xdf, 0xfd, 0xe6, 0x61, 0x00, 0x38, 0xb4, 0x01, 0x98, 0x8d, 0xff, 0xd5, 0xb5, 0x01, 0xa1, 0x6d, 0x00, 0x49, 0x17, 0x00, 0x0d, 0x21, 0x01, 0x09, 0x47, 0x00, 0xc0, 0x53, 0x00, 0xd4, 0xc5, 0xff, 0x09, 0xf9, 0x00, 0x66, 0xf7, 0x00, 0x3b, 0x95, 0xff, 0x1a, 0xf1, 0xfe, 0x3f, 0xcd, 0xfe, 0xbd, 0xf7, 0xff, 0xb7, 0xca, 0xff, 0x03, 0x1a, 0x00, 0x77, 0x6e, 0x00, 0xa4, 0xc0, 0xff, 0x47, 0xaf, 0xff, 0x0a, 0xba, 0xff, 0x0a, 0xde, 0x19, 0x3e, 0x4b, 0x21, 0xbf, 0xab, 0x07, 0x32, 0x58, 0xfb, 0xcd, 0x23, 0xfb, 0xdd, 0x65, 0x00, 0x2e, 0x4a, 0x07, 0x38, 0xb6, 0x04, 0x07, 0xa2, 0x00, 0x74, 0xe9, 0xfd, 0x68, 0x91, 0x00, 0xa1, 0xb4, 0x01, 0x03, 0x2c, 0x00, 0xb3, 0x95, 0x01, 0x44, 0xcd, 0xff, 0x37, 0x93, 0x00, 0xdc, 0x1a, 0x01, 0x56, 0x65, 0xff, 0xc3, 0x61, 0x00, 0x06, 0x1f, 0x00, 0xd4, 0x80, 0x00, 0x26, 0x81, 0x00, 0xf2, 0xe2, 0xff, 0xd4, 0x6d, 0xff, 0x9e, 0x78, 0xfe, 0x9e, 0x9b, 0xff, 0x75, 0x03, 0x00, 0xc7, 0x14, 0x00, 0x57, 0x46, 0x00, 0x86, 0x68, 0xff, 0xcd, 0x4f, 0x00, 0x8b, 0x25, 0x01, 0x09, 0x74, 0x19, 0xbe, 0x8d, 0x21, 0x5b, 0x01, 0x08, 0xb9, 0x2e, 0xfb, 0x7d, 0xbb, 0xfb, 0xf4, 0xff, 0x00, 0xf6, 0x29, 0x07, 0xec, 0x74, 0x04, 0x69, 0x4c, 0x00, 0xbe, 0x63, 0xfd, 0x50, 0x5d, 0x00, 0x8f, 0xcc, 0x01, 0x69, 0xcf, 0xff, 0xa3, 0xc5, 0x01, 0x75, 0x2c, 0x00, 0xbd, 0xd8, 0xff, 0x6e, 0x21, 0x01, 0x13, 0xa6, 0xff, 0x9f, 0x76, 0xff, 0x4d, 0x01, 0x00, 0x18, 0xef, 0x00, 0xcc, 0x13, 0x00, 0x76, 0x83, 0xff, 0x6d, 0xdc, 0xff, 0x83, 0xd4, 0xfe, 0x44, 0xd5, 0xfe, 0xfd, 0xa2, 0xff, 0x12, 0xa3, 0x00, 0xeb, 0xa3, 0xff, 0xa3, 0x64, 0xff, 0x83, 0xca, 0x01, 0xb8, 0xaa, 0x00, 0xe5, 0xbd, 0x19, 0xa5, 0x44, 0x22, 0x5a, 0x1a, 0x08, 0xa7, 0xad, 0xfa, 0xf5, 0x28, 0xfc, 0xcc, 0xe3, 0x01, 0x71, 0x90, 0x07, 0x59, 0x52, 0x04, 0x5d, 0xf1, 0xff, 0xf8, 0x17, 0xfd, 0xef, 0xc0, 0xff, 0x56, 0x93, 0x01, 0x54, 0xd9, 0xff, 0xbb, 0x54, 0x01, 0xf1, 0x6b, 0x00, 0xf8, 0x94, 0x00, 0x6b, 0xed, 0x00, 0x06, 0x47, 0xff, 0x0b, 0xe6, 0xff, 0xa6, 0xd5, 0xff, 0x04, 0x54, 0x00, 0x01, 0x98, 0x00, 0x22, 0xd0, 0xff, 0xe3, 0x83, 0xff, 0x70, 0xda, 0xfe, 0xbb, 0x28, 0xff, 0xcb, 0xdb, 0xff, 0x00, 0xca, 0xff, 0x79, 0x81, 0xff, 0x71, 0x1a, 0x01, 0x66, 0x88, 0x01, 0xdd, 0x70, 0xff, 0xb9, 0x4c, 0x1a, 0x85, 0x65, 0x23, 0xb7, 0x42, 0x08, 0xf7, 0x83, 0xf9, 0x09, 0x00, 0xfc, 0xd0, 0xb0, 0x02, 0xb5, 0xf2, 0x07, 0x7d, 0x8c, 0x04, 0x26, 0x8a, 0xff, 0x47, 0x2a, 0xfc, 0x82, 0x67, 0xff, 0x96, 0x58, 0x01, 0xe6, 0x02, 0xff, 0x5e, 0xc5, 0x00, 0x86, 0x69, 0x00, 0x9f, 0x6f, 0x00, 0xe3, 0x3d, 0x01, 0xd4, 0x9c, 0xff, 0x60, 0x4f, 0xff, 0x37, 0xc2, 0xff, 0x07, 0x95, 0x00, 0xf4, 0xd2, 0xff, 0xb9, 0x96, 0xff, 0x2a, 0xfb, 0xff, 0xf7, 0x6e, 0xfe, 0x3b, 0x04, 0xff, 0x2c, 0x2d, 0x00, 0x5d, 0x53, 0xff, 0x4b, 0x91, 0xff, 0x78, 0x82, 0x01, 0xc5, 0xc6, 0x00, 0x41, 0x33, 0xff, 0xef, 0xf0, 0x1a, 0xe2, 0x13, 0x25, 0x1d, 0xba, 0x08, 0xfa, 0x49, 0xf8, 0x33, 0xa3, 0xfb, 0x9c, 0x45, 0x03, 0xba, 0x71, 0x08, 0xff, 0xd5, 0x04, 0xa0, 0x72, 0xff, 0xea, 0x89, 0xfb, 0x4b, 0xd6, 0xfe, 0x15, 0x6d, 0x01, 0xe2, 0xbb, 0xfe, 0x3c, 0xe1, 0xff, 0x86, 0xe6, 0xff, 0xf8, 0x86, 0x00, 0xed, 0x38, 0x01, 0x92, 0x71, 0xff, 0xc3, 0xca, 0xff, 0x22, 0xff, 0xff, 0xaa, 0x41, 0x00, 0x0b, 0xe8, 0xff, 0xb4, 0x73, 0xff, 0x96, 0x61, 0xff, 0x12, 0x50, 0xfe, 0x28, 0x83, 0xff, 0xf4, 0x4f, 0x00, 0xf4, 0xfd, 0xfe, 0x18, 0xea, 0xff, 0xf3, 0xd3, 0x01, 0xf2, 0x0d, 0x00, 0x85, 0xbf, 0xfe, 0x7a, 0xee, 0x1b, 0xc8, 0x30, 0x27, 0x70, 0x30, 0x09, 0x0a, 0xa9, 0xf6, 0x55, 0x3d, 0xfb, 0x48, 0x0c, 0x04, 0x0a, 0xd3, 0x08, 0x81, 0x38, 0x05, 0x26, 0x35, 0xff, 0x09, 0xde, 0xfa, 0x71, 0xe9, 0xfe, 0x8b, 0x91, 0x01, 0x5e, 0x51, 0xfe, 0xde, 0x61, 0xff, 0x2c, 0x94, 0xff, 0xc0, 0x28, 0x00, 0x57, 0xf0, 0x00, 0x81, 0x54, 0xff, 0xbc, 0x86, 0xff, 0x0c, 0x2f, 0x00, 0x19, 0xe6, 0x00, 0xa6, 0xe0, 0xff, 0x3a, 0x22, 0xff, 0xc1, 0x69, 0xff, 0xf7, 0x0d, 0xfe, 0xbc, 0x12, 0xff, 0x36, 0xb6, 0x00, 0x23, 0x87, 0xff, 0x35, 0xb3, 0xff, 0xa5, 0xe3, 0x01, 0xbf, 0x38, 0x00, 0x6d, 0x66, 0xfe, 0xcf, 0x98, 0x1d, 0x85, 0x5c, 0x29, 0x19, 0x25, 0x09, 0xab, 0x07, 0xf5, 0x29, 0xca, 0xfa, 0x7d, 0xf1, 0x04, 0xfc, 0x42, 0x09, 0x9c, 0x19, 0x05, 0x11, 0xb1, 0xfe, 0xbc, 0x0e, 0xfa, 0x24, 0x1a, 0xff, 0x01, 0x20, 0x02, 0xea, 0x03, 0xfe, 0xe9, 0xbf, 0xfe, 0x34, 0x0b, 0xff, 0xce, 0x11, 0x00, 0x97, 0xca, 0x00, 0x7e, 0x99, 0xfe, 0xb7, 0x13, 0xff, 0x7a, 0x29, 0x00, 0xdd, 0xe3, 0x00, 0xf1, 0xec, 0xff, 0x4a, 0x4c, 0xff, 0x4f, 0x64, 0xff, 0x33, 0xd2, 0xfd, 0x50, 0x08, 0xff, 0xb4, 0xae, 0x00, 0x6e, 0x61, 0xff, 0xb9, 0x76, 0xff, 0x68, 0x12, 0x02, 0xfa, 0xd7, 0x00, 0x24, 0xfd, 0xfd, 0xac, 0x9d, 0x1f, 0xa7, 0xdc, 0x2b, 0x00, 0xbd, 0x08, 0x97, 0x01, 0xf3, 0x3c, 0x65, 0xfa, 0xec, 0xe4, 0x05, 0x4c, 0xb4, 0x09, 0xff, 0xbc, 0x04, 0xcb, 0xdb, 0xfd, 0xbb, 0x22, 0xf9, 0xf1, 0x2a, 0xff, 0x3e, 0xcd, 0x02, 0x85, 0xc1, 0xfd, 0x71, 0xfb, 0xfd, 0x4e, 0xaa, 0xfe, 0xde, 0xc5, 0xff, 0xe1, 0x60, 0x00, 0xa8, 0x37, 0xfe, 0xed, 0x81, 0xfe, 0xdf, 0x97, 0xff, 0xa6, 0xbb, 0x00, 0x6f, 0x94, 0xff, 0x35, 0xf3, 0xfe, 0x2e, 0xa1, 0xff, 0x1d, 0x13, 0xfe, 0x22, 0xdd, 0xfe, 0x23, 0x9b, 0x00, 0x3c, 0xb7, 0xff, 0x43, 0x9b, 0xfe, 0x70, 0xfd, 0x00, 0xba, 0x07, 0x02, 0xce, 0x8f, 0xfe, 0x9d, 0x8f, 0x22, 0x73, 0xc3, 0x2e, 0xc4, 0xe7, 0x07, 0x5e, 0xfd, 0xf0, 0x76, 0x43, 0xfa, 0xfa, 0x55, 0x07, 0xc1, 0x5d, 0x0a, 0x04, 0x41, 0x04, 0x6e, 0xe0, 0xfc, 0xa9, 0x56, 0xf8, 0x66, 0xca, 0xff, 0x93, 0xb0, 0x03, 0xaa, 0xbc, 0xfd, 0xbf, 0x67, 0xfd, 0xf8, 0x51, 0xfe, 0x06, 0x0e, 0x00, 0x64, 0x48, 0x00, 0xfc, 0x9e, 0xfd, 0x2f, 0x58, 0xfe, 0xea, 0xb5, 0xff, 0x48, 0x50, 0x00, 0x9b, 0x2e, 0xff, 0x27, 0xd5, 0xfe, 0x44, 0x6f, 0xff, 0x17, 0xb8, 0xfe, 0xea, 0x78, 0xff, 0x75, 0x72, 0x00, 0x52, 0x2b, 0x00, 0x91, 0xa5, 0xfe, 0x8f, 0xb5, 0xff, 0xb8, 0x0b, 0x02, 0x8c, 0xf9, 0xff, 0xd4, 0xdd, 0x25, 0x7b, 0x80, 0x31, 0xbf, 0xc7, 0x06, 0x12, 0x0d, 0xef, 0xd1, 0xfe, 0xf9, 0xed, 0xc0, 0x08, 0x3e, 0xe3, 0x0a, 0x4e, 0x7c, 0x03, 0x76, 0x96, 0xfb, 0x5d, 0x48, 0xf7, 0xe5, 0x7c, 0x00, 0xc0, 0x85, 0x04, 0x55, 0xa2, 0xfd, 0x47, 0xb8, 0xfc, 0x3f, 0xc0, 0xfd, 0x0f, 0x21, 0x00, 0x3c, 0x3b, 0x00, 0x07, 0x2a, 0xfd, 0x9f, 0xb8, 0xfd, 0x97, 0xd7, 0xff, 0x70, 0x24, 0x00, 0x26, 0x4c, 0xfe, 0x7b, 0xba, 0xfe, 0x44, 0x0a, 0xff, 0xf3, 0xb8, 0xfe, 0x89, 0x74, 0x00, 0xd3, 0x6c, 0x00, 0x19, 0x06, 0x00, 0x76, 0x0d, 0xff, 0x11, 0xce, 0xfe, 0xd8, 0xf7, 0x00, 0xac, 0x14, 0x01, 0x35, 0x29, 0x29, 0xa6, 0xba, 0x34, 0x62, 0xcd, 0x05, 0xb5, 0x23, 0xed, 0xda, 0xb4, 0xf9, 0xad, 0x0a, 0x0a, 0x6c, 0xae, 0x0b, 0x71, 0x96, 0x02, 0x54, 0x73, 0xfa, 0x3a, 0x50, 0xf6, 0x03, 0x00, 0x01, 0x2b, 0xa8, 0x05, 0x34, 0x7b, 0xfd, 0x76, 0x30, 0xfc, 0x3e, 0x5b, 0xfd, 0xff, 0x13, 0x00, 0x07, 0x28, 0x00, 0xd6, 0xed, 0xfc, 0x99, 0x57, 0xfd, 0x21, 0xc1, 0xff, 0x8f, 0x58, 0x00, 0xee, 0x8c, 0xfd, 0x40, 0x78, 0xfe, 0xf5, 0x12, 0xff, 0x99, 0x71, 0xfe, 0xff, 0x40, 0x01, 0x19, 0xdb, 0x00, 0xb1, 0xcd, 0xff, 0x72, 0x41, 0xff, 0x69, 0xb1, 0xfe, 0xd1, 0xb6, 0xff, 0x43, 0x0d, 0x01, 0x57, 0xbd, 0x2b, 0xd3, 0x2b, 0x38, 0x3c, 0x88, 0x05, 0x13, 0xb6, 0xeb, 0x73, 0x47, 0xf9, 0xea, 0xaa, 0x0a, 0xe3, 0xbc, 0x0c, 0xe1, 0xbc, 0x01, 0x5b, 0x86, 0xf9, 0x52, 0xab, 0xf5, 0x9d, 0xff, 0x00, 0x0c, 0xd6, 0x06, 0x8a, 0x56, 0xfd, 0x57, 0xb5, 0xfb, 0x41, 0x21, 0xfd, 0xd8, 0xfb, 0xff, 0xb1, 0x1d, 0x00, 0x4e, 0x8c, 0xfc, 0x6b, 0x3f, 0xfd, 0x0e, 0x7a, 0xff, 0x7a, 0x8a, 0x00, 0xd4, 0x52, 0xfd, 0x41, 0x01, 0xfe, 0xcf, 0x5a, 0xff, 0x4f, 0x23, 0xfe, 0x64, 0xba, 0x01, 0x58, 0x7d, 0x01, 0xd1, 0xa2, 0xff, 0x2a, 0x53, 0xff, 0x8d, 0xaa, 0xfe, 0xb9, 0x0f, 0xff, 0xec, 0x1c, 0x00, 0x6c, 0xc8, 0x2e, 0x85, 0x52, 0x3b, 0xff, 0xcf, 0x04, 0x4f, 0xb6, 0xea, 0x6a, 0xca, 0xf8, 0x62, 0xd7, 0x0a, 0xc4, 0x88, 0x0d, 0x4f, 0xe0, 0x00, 0xf4, 0x98, 0xf8, 0xbc, 0x18, 0xf5, 0x02, 0xf6, 0x00, 0x93, 0xa8, 0x07, 0x68, 0x21, 0xfd, 0xae, 0x1e, 0xfb, 0xa0, 0xed, 0xfc, 0x05, 0xe4, 0xff, 0xa9, 0xfc, 0xff, 0x54, 0x30, 0xfc, 0x26, 0xfe, 0xfc, 0x7f, 0x29, 0xff, 0x83, 0x86, 0x00, 0x12, 0x43, 0xfd, 0x10, 0xad, 0xfd, 0xb2, 0x9f, 0xff, 0x46, 0x0d, 0xfe, 0xbf, 0xab, 0x01, 0x8d, 0xff, 0x01, 0xc0, 0xa7, 0xff, 0xb6, 0x2a, 0xff, 0xb0, 0x75, 0xfe, 0x91, 0xb1, 0xfe, 0x96, 0x17, 0xff, 0x2b, 0x9a, 0x32, 0xac, 0x8e, 0x3d, 0x12, 0x67, 0x03, 0x58, 0x8a, 0xea, 0xfd, 0x8a, 0xf8, 0x69, 0xa3, 0x0a, 0xa2, 0xd5, 0x0d, 0x37, 0x2e, 0x00, 0xa9, 0xea, 0xf7, 0xd1, 0x9d, 0xf4, 0x01, 0x08, 0x01, 0xff, 0x04, 0x08, 0xec, 0xe5, 0xfc, 0xac, 0xa2, 0xfa, 0x90, 0xb7, 0xfc, 0x88, 0xd8, 0xff, 0x78, 0xc4, 0xff, 0x8f, 0xf8, 0xfb, 0xa5, 0xb7, 0xfc, 0xf8, 0xcf, 0xfe, 0x67, 0x55, 0x00, 0x7c, 0x63, 0xfd, 0x4c, 0xa4, 0xfd, 0x80, 0xaa, 0xff, 0xe8, 0x67, 0xfe, 0xaa, 0x8b, 0x01, 0xa1, 0xfe, 0x01, 0xea, 0xce, 0xff, 0x7f, 0x20, 0xff, 0x05, 0x22, 0xfe, 0xd1, 0x3f, 0xfe, 0x61, 0xa5, 0xfe, 0xa9, 0x5a, 0x36, 0xcb, 0xf4, 0x3f, 0x39, 0x8d, 0x01, 0x07, 0x9d, 0xea, 0x60, 0xdf, 0xf8, 0x7d, 0xb7, 0x09, 0xee, 0xc7, 0x0d, 0xa6, 0xbe, 0xff, 0xec, 0x8b, 0xf7, 0x4b, 0x38, 0xf4, 0x91, 0xd3, 0x00, 0x87, 0x4b, 0x08, 0x2b, 0xa2, 0xfc, 0xf6, 0x68, 0xfa, 0x0a, 0x9c, 0xfc, 0xed, 0x96, 0xff, 0x5c, 0xa6, 0xff, 0x3c, 0xe2, 0xfb, 0x5e, 0x6e, 0xfc, 0x6f, 0x74, 0xfe, 0x5b, 0x32, 0x00, 0x76, 0xb3, 0xfd, 0x32, 0xc4, 0xfd, 0x20, 0x94, 0xff, 0x8a, 0xea, 0xfe, 0xd8, 0x85, 0x01, 0xc3, 0x9d, 0x01, 0xba, 0xf3, 0xff, 0xe9, 0x39, 0xff, 0xad, 0xd2, 0xfd, 0xf0, 0xac, 0xfd, 0xe9, 0xa0, 0xfe, 0x2c, 0x18, 0x3a, 0x3e, 0x93, 0x42, 0x5d, 0x6d, 0xfe, 0x9c, 0x7e, 0xea, 0x5f, 0x16, 0xfa, 0x37, 0x0e, 0x08, 0xec, 0x7a, 0x0d, 0xcb, 0x7c, 0xff, 0xbc, 0x44, 0xf7, 0x8e, 0xbb, 0xf3, 0x46, 0x42, 0x00, 0xa6, 0x68, 0x08, 0x65, 0x30, 0xfc, 0xa6, 0xa8, 0xfa, 0xba, 0x61, 0xfc, 0x04, 0x17, 0xff, 0xe9, 0xa6, 0xff, 0xdd, 0x8e, 0xfb, 0xc9, 0x56, 0xfc, 0xd3, 0xe9, 0xfd, 0xef, 0x24, 0x00, 0xdd, 0x2d, 0xfe, 0x32, 0xab, 0xfd, 0x30, 0x92, 0xff, 0xb2, 0x3e, 0xff, 0xae, 0x5a, 0x01, 0xe3, 0xfd, 0x00, 0x96, 0x1f, 0x00, 0x78, 0x3b, 0xff, 0x01, 0x66, 0xfd, 0x8b, 0x76, 0xfd, 0xf4, 0x7f, 0xfe, 0x84, 0xd1, 0x3f, 0x71, 0x47, 0x44, 0xfe, 0xd0, 0xf8, 0xd5, 0xfb, 0xea, 0x91, 0x30, 0xfc, 0x16, 0x70, 0x06, 0x22, 0xeb, 0x0c, 0xcd, 0xf1, 0xfe, 0x6f, 0xed, 0xf6, 0x44, 0x19, 0xf3, 0x53, 0x3d, 0x00, 0x3e, 0x52, 0x08, 0x9e, 0x99, 0xfb, 0x75, 0xad, 0xfb, 0x25, 0xf6, 0xfb, 0x63, 0xca, 0xfe, 0x14, 0xb8, 0xff, 0xce, 0xde, 0xfa, 0xce, 0x9c, 0xfc, 0x86, 0x90, 0xfd, 0x55, 0x68, 0x00, 0xad, 0x69, 0xfe, 0x28, 0x99, 0xfd, 0xe3, 0xfe, 0xff, 0x9d, 0xe4, 0xfe, 0xb1, 0x44, 0x01, 0xc2, 0xab, 0x00, 0xf0, 0x16, 0x00, 0x2e, 0x2f, 0xff, 0x26, 0x17, 0xfd, 0xa5, 0xf0, 0xfd, 0x47, 0x0a, 0xfe, 0xc7, 0x45, 0x47, 0xac, 0x86, 0x44, 0xa1, 0x37, 0xf1, 0x1a, 0x6a, 0xec, 0x9e, 0x2d, 0xfe, 0x00, 0x2c, 0x05, 0x99, 0x55, 0x0c, 0xde, 0xc7, 0xfd, 0x72, 0x9d, 0xf6, 0x21, 0x38, 0xf2, 0x7c, 0xdc, 0x00, 0x0b, 0x39, 0x08, 0xd6, 0xf2, 0xfa, 0x93, 0x10, 0xfd, 0xdb, 0x7a, 0xfb, 0x2f, 0xb4, 0xfe, 0x2f, 0x89, 0xff, 0x89, 0x27, 0xfa, 0xd0, 0x40, 0xfd, 0x56, 0x9e, 0xfd, 0xa3, 0x75, 0x00, 0xb8, 0x51, 0xfe, 0x1d, 0x09, 0xfe, 0x40, 0xd3, 0xff, 0xc8, 0x0f, 0xfe, 0x7e, 0xeb, 0x01, 0xa6, 0x43, 0x00, 0x3d, 0xb1, 0xff, 0x8d, 0x93, 0xff, 0x8d, 0x27, 0xfd, 0x5b, 0x20, 0xfe, 0x3e, 0x56, 0xfd, 0x68, 0x88, 0x4e, 0xff, 0xce, 0x43, 0x2d, 0x9d, 0xe9, 0x96, 0x45, 0xee, 0x55, 0xac, 0xff, 0x76, 0x36, 0x04, 0xd7, 0xb9, 0x0b, 0x93, 0x1a, 0xfc, 0x8e, 0x4d, 0xf6, 0xaf, 0x3c, 0xf1, 0x0b, 0xe8, 0x01, 0x66, 0x59, 0x08, 0x6d, 0x1c, 0xfa, 0xb4, 0xba, 0xfe, 0x48, 0x15, 0xfb, 0x05, 0x62, 0xfe, 0xc6, 0x40, 0xff, 0xc6, 0xc1, 0xf9, 0x17, 0x7f, 0xfe, 0x89, 0x32, 0xfd, 0xed, 0x06, 0x00, 0x73, 0xec, 0xfe, 0x1f, 0x93, 0xfd, 0x82, 0xe9, 0xfe, 0x06, 0x54, 0xfe, 0xc6, 0x49, 0x02, 0xd8, 0x77, 0xff, 0x12, 0x08, 0x00, 0x9d, 0x54, 0x00, 0x4d, 0x93, 0xfc, 0x3e, 0xd8, 0xfd, 0x9d, 0xae, 0xfd, 0x8d, 0x35, 0x55, 0x78, 0x64, 0x42, 0x7f, 0xa3, 0xe2, 0xba, 0x7e, 0xf0, 0xb4, 0xac, 0x00, 0xe0, 0x58, 0x03, 0x18, 0x46, 0x0b, 0xe5, 0x43, 0xfa, 0x80, 0xe5, 0xf5, 0xb5, 0xf1, 0xf0, 0x9f, 0x94, 0x03, 0x6a, 0x09, 0x08, 0xbd, 0x8b, 0xf9, 0x19, 0xeb, 0x00, 0xa1, 0x47, 0xfa, 0xe8, 0xf0, 0xfd, 0xdf, 0xaa, 0xff, 0xb2, 0x11, 0xfa, 0xe6, 0x1e, 0xff, 0x24, 0x88, 0xfc, 0xfa, 0x3d, 0x00, 0x13, 0x72, 0xfe, 0x31, 0xda, 0xfc, 0x8e, 0x2f, 0xff, 0xdf, 0x14, 0xfe, 0x5e, 0x8d, 0x02, 0x0d, 0xe6, 0xff, 0x1f, 0x88, 0x00, 0xa7, 0x33, 0x00, 0x1d, 0xfa, 0xfb, 0x63, 0x99, 0xfe, 0x78, 0xdf, 0xfd, 0x77, 0x45, 0x5a, 0x32, 0xda, 0x40, 0x77, 0xff, 0xdc, 0x80, 0xe2, 0xf2, 0x19, 0xb3, 0x00, 0x86, 0xfd, 0x01, 0x50, 0x9e, 0x0b, 0x9e, 0x41, 0xf8, 0x9f, 0x8d, 0xf5, 0x71, 0xbb, 0xf1, 0xe2, 0xb7, 0x04, 0x50, 0x81, 0x07, 0xf1, 0x9d, 0xf9, 0x21, 0xdd, 0x02, 0x50, 0xf0, 0xf8, 0x4a, 0x2e, 0xfe, 0x25, 0x1b, 0x01, 0xff, 0x51, 0xf9, 0x38, 0xaa, 0xff, 0xa5, 0x37, 0xfc, 0x75, 0xed, 0xfe, 0x7d, 0xb7, 0xfe, 0xe4, 0xef, 0xfc, 0x83, 0x5d, 0xfe, 0x84, 0x63, 0xfe, 0x9a, 0xeb, 0x03, 0x0a, 0x05, 0x00, 0xb2, 0x10, 0x00, 0xbc, 0x7a, 0x00, 0x1a, 0x3f, 0xfc, 0x4f, 0x8c, 0xfe, 0x33, 0x7c, 0xfd, 0x39, 0x93, 0x5d, 0x0e, 0x20, 0x3e, 0xfe, 0xd1, 0xd9, 0xf4, 0x8a, 0xf5, 0x8a, 0xdc, 0xfe, 0x1d, 0xec, 0x00, 0xca, 0xa3, 0x0c, 0xad, 0xd2, 0xf6, 0x5d, 0x5d, 0xf5, 0x0a, 0xbc, 0xf2, 0xe3, 0xc8, 0x05, 0x83, 0x9f, 0x06, 0x3f, 0xfb, 0xf9, 0xce, 0x41, 0x04, 0x44, 0x5a, 0xf8, 0x67, 0xfc, 0xfe, 0xd0, 0x7d, 0x01, 0x76, 0x2e, 0xf9, 0xa9, 0x52, 0xff, 0x42, 0xea, 0xfa, 0x73, 0x45, 0xff, 0x72, 0xc7, 0xfe, 0xa5, 0x4a, 0xfc, 0xe0, 0xad, 0xfe, 0x45, 0x57, 0xff, 0xba, 0x6e, 0x04, 0x39, 0x7d, 0xff, 0x02, 0x7e, 0x00, 0x07, 0xeb, 0x00, 0x37, 0x9f, 0xfb, 0x2c, 0x7e, 0xfe, 0xac, 0x7a, 0xfd, 0xfc, 0xb8, 0x5e, 0x72, 0x95, 0x3a, 0x25, 0xbb, 0xd9, 0x71, 0xc3, 0xf7, 0xab, 0x2b, 0xfb, 0xc0, 0x57, 0x00, 0xac, 0xa0, 0x0e, 0x87, 0x1b, 0xf6, 0x0e, 0xa1, 0xf4, 0x41, 0x40, 0xf4, 0x06, 0xe4, 0x06, 0x64, 0xa8, 0x04, 0x54, 0xc2, 0xfa, 0xb4, 0x8e, 0x06, 0x61, 0x74, 0xf7, 0xbb, 0x1c, 0xff, 0x49, 0x8a, 0x02, 0xce, 0x9e, 0xf7, 0x3b, 0x9a, 0xfe, 0x20, 0xcc, 0xfb, 0x0b, 0x84, 0xfe, 0xa0, 0xcf, 0xfe, 0x3e, 0x36, 0xfd, 0x9e, 0xc5, 0xfe, 0x49, 0x6f, 0xff, 0x8d, 0x8e, 0x04, 0x0b, 0xf0, 0xff, 0x9e, 0x71, 0x00, 0x1d, 0xaf, 0x00, 0xe5, 0x7b, 0xfb, 0x5b, 0x53, 0xfe, 0x56, 0xc7, 0xfd, 0xc5, 0xa3, 0x5c, 0x13, 0xe8, 0x37, 0x58, 0xf4, 0xdb, 0xcc, 0xf2, 0xf8, 0xf6, 0x09, 0xf7, 0x6e, 0x40, 0x00, 0x9c, 0x5c, 0x11, 0x4b, 0x6f, 0xf5, 0x28, 0x43, 0xf4, 0xa6, 0x2a, 0xf6, 0x22, 0x68, 0x06, 0x9d, 0x0e, 0x03, 0xc9, 0xc1, 0xfc, 0xf2, 0x8d, 0x07, 0x66, 0xaa, 0xf6, 0xdc, 0x79, 0xff, 0xcc, 0xc7, 0x01, 0x01, 0x01, 0xf7, 0x10, 0x1b, 0xff, 0xe5, 0xad, 0xfb, 0xb4, 0x88, 0xfe, 0x49, 0xba, 0xff, 0x6b, 0xb9, 0xfd, 0x2c, 0x3b, 0xfe, 0x64, 0x5a, 0xff, 0x06, 0x2a, 0x05, 0x33, 0xbf, 0xff, 0x49, 0x0e, 0x00, 0xfe, 0xbe, 0x00, 0xab, 0x51, 0xfb, 0xa4, 0x98, 0xfe, 0xf6, 0xe6, 0xfd, 0x29, 0xb1, 0x57, 0xdf, 0xa2, 0x35, 0x56, 0x58, 0xe0, 0x93, 0x46, 0xf9, 0xde, 0xbc, 0xf3, 0xc5, 0x54, 0x00, 0xb3, 0x3f, 0x13, 0x26, 0x1a, 0xf6, 0x34, 0x67, 0xf4, 0x69, 0xfe, 0xf6, 0x25, 0xff, 0x05, 0x4e, 0x8c, 0x02, 0x50, 0x6b, 0xfd, 0xed, 0x63, 0x08, 0xb7, 0x73, 0xf6, 0x51, 0x0b, 0xfe, 0xca, 0x49, 0x02, 0x67, 0x41, 0xf7, 0xdc, 0xc4, 0xfe, 0x1e, 0xcb, 0xfc, 0xbb, 0xdd, 0xfe, 0x90, 0x2c, 0x00, 0xb6, 0xcf, 0xfd, 0x1f, 0xee, 0xfd, 0x74, 0x5e, 0xff, 0xd4, 0x0d, 0x05, 0x10, 0xa0, 0xff, 0x46, 0x6d, 0xff, 0x94, 0x32, 0x01, 0x29, 0xb3, 0xfb, 0x9e, 0x5e, 0xfe, 0x26, 0x1d, 0xfe, 0x83, 0x19, 0x51, 0xbc, 0x58, 0x32, 0x7d, 0xd5, 0xe6, 0x9c, 0xb0, 0xf9, 0xc3, 0x21, 0xf1, 0x75, 0x7e, 0x00, 0x86, 0xcc, 0x13, 0x15, 0x22, 0xf8, 0x6f, 0x54, 0xf4, 0x7f, 0x55, 0xf8, 0x98, 0xd1, 0x05, 0xaf, 0x98, 0x00, 0xed, 0x16, 0xff, 0xc3, 0xfd, 0x07, 0x49, 0xcb, 0xf5, 0x56, 0x33, 0xfe, 0x6b, 0x22, 0x02, 0xf7, 0x16, 0xf8, 0x24, 0x01, 0xff, 0x85, 0xf3, 0xfd, 0x8f, 0x3a, 0xff, 0xe1, 0xd0, 0xff, 0x81, 0x5f, 0xfe, 0x65, 0xd7, 0xfd, 0x1a, 0x0a, 0xff, 0x55, 0x7d, 0x04, 0xaa, 0x5e, 0xff, 0x08, 0x9b, 0xff, 0xfb, 0x71, 0x01, 0x31, 0xf5, 0xfb, 0x2a, 0x55, 0xfe, 0xfb, 0xb0, 0xfe, 0xcd, 0x34, 0x48, 0x4b, 0x1b, 0x30, 0xba, 0xd5, 0xed, 0x8b, 0xf6, 0xf9, 0x65, 0x03, 0xf0, 0x17, 0xd3, 0xff, 0xd4, 0xa7, 0x13, 0x2d, 0x3a, 0xfa, 0xd9, 0xbb, 0xf5, 0xe3, 0x5f, 0xf9, 0xa6, 0xe7, 0x03, 0xd2, 0x4c, 0x00, 0x4f, 0x5b, 0xff, 0xe0, 0x98, 0x06, 0x91, 0xff, 0xf6, 0x58, 0x9c, 0xfd, 0xce, 0x35, 0x02, 0xcc, 0x71, 0xf9, 0xe4, 0x16, 0xff, 0xc8, 0x08, 0xff, 0x4b, 0xec, 0xfe, 0x51, 0xb8, 0xff, 0x50, 0x26, 0xff, 0xb5, 0xa9, 0xfd, 0x99, 0x2b, 0xfe, 0x41, 0xbc, 0x03, 0x0b, 0xda, 0xff, 0x7e, 0x77, 0xff, 0x3f, 0x6d, 0x01, 0x8b, 0x8f, 0xfc, 0x0e, 0x9b, 0xfe, 0x81, 0x28, 0xff, 0xdf, 0x33, 0x3b, 0x5e, 0xb1, 0x2e, 0x7b, 0xfa, 0xf3, 0x4a, 0xc8, 0xf8, 0x13, 0x96, 0xf9, 0x7e, 0xa5, 0x00, 0xd6, 0x5c, 0x09, 0x6f, 0x67, 0xfa, 0xfe, 0xa8, 0xf7, 0xee, 0xaf, 0xf9, 0x66, 0x14, 0x04, 0x6c, 0x2c, 0x02, 0xfe, 0x4e, 0xff, 0x06, 0xfc, 0x04, 0x8d, 0xdd, 0xfa, 0x82, 0xea, 0xfe, 0x74, 0x5f, 0x02, 0x12, 0xfc, 0xfb, 0x34, 0xb1, 0xfe, 0xe5, 0xd2, 0xfe, 0x29, 0xcb, 0xff, 0xe3, 0x59, 0xff, 0x5e, 0x97, 0xfe, 0xf8, 0x8a, 0xfe, 0xc7, 0xa7, 0xfe, 0x18, 0x53, 0x02, 0x4c, 0x86, 0xff, 0x87, 0x19, 0xff, 0xca, 0x37, 0x01, 0xb1, 0x15, 0xfe, 0x89, 0x48, 0xfe, 0xa9, 0xb6, 0xfe, 0x75, 0x5e, 0x32, 0xf6, 0x6c, 0x2c, 0x22, 0x36, 0xfa, 0xe9, 0x93, 0xf8, 0xee, 0xc6, 0xf8, 0xe0, 0x91, 0x00, 0x5d, 0x96, 0x09, 0xf8, 0xf0, 0xfc, 0x82, 0x6d, 0xf9, 0xc4, 0x29, 0xfa, 0xae, 0x22, 0x02, 0xbf, 0x0b, 0x02, 0x68, 0x83, 0xff, 0xa5, 0x05, 0x04, 0x3f, 0x4f, 0xfc, 0xbf, 0x76, 0xfe, 0xfb, 0x12, 0x02, 0x3e, 0x6d, 0xfd, 0xe8, 0x33, 0xff, 0x34, 0xb6, 0xff, 0x1a, 0x0d, 0x00, 0x83, 0xac, 0xff, 0x1e, 0x1e, 0xff, 0x38, 0x5f, 0xfe, 0x53, 0x27, 0xfe, 0x76, 0xbb, 0x01, 0xaf, 0xdb, 0xff, 0xd9, 0x1d, 0xff, 0xff, 0x41, 0x01, 0x50, 0xe5, 0xfe, 0x87, 0x9c, 0xfe, 0xe1, 0xf4, 0xfe, 0xe1, 0x1c, 0x2b, 0x6f, 0x1b, 0x2a, 0x6d, 0xbf, 0xfe, 0x4d, 0xa5, 0xf8, 0xd6, 0xe1, 0xf8, 0xc2, 0x62, 0x00, 0x04, 0xed, 0x08, 0xa2, 0x29, 0xff, 0x4e, 0x39, 0xfb, 0xad, 0x73, 0xfa, 0x65, 0xf2, 0x00, 0xfc, 0xe4, 0x01, 0xa0, 0x80, 0xff, 0xa4, 0x81, 0x03, 0xaf, 0xa1, 0xfd, 0x86, 0x72, 0xfe, 0xa1, 0xde, 0x01, 0x18, 0xc5, 0xfe, 0x7e, 0xaa, 0xff, 0x34, 0xe3, 0xff, 0xd3, 0x9e, 0x00, 0x7f, 0x1d, 0x00, 0xe5, 0x37, 0xff, 0xaf, 0xad, 0xfe, 0x20, 0x04, 0xfe, 0xcd, 0x06, 0x01, 0x61, 0x20, 0x00, 0xc2, 0x2b, 0xff, 0xdb, 0xe3, 0x00, 0xb2, 0x53, 0xff, 0x4a, 0xf7, 0xfe, 0xb0, 0x0c, 0xff, 0xe7, 0xad, 0x25, 0xb8, 0x19, 0x28, 0x81, 0x8b, 0x01, 0x05, 0x97, 0xf8, 0xdb, 0x61, 0xf9, 0x16, 0x3b, 0x00, 0x45, 0x12, 0x08, 0x26, 0xa2, 0x00, 0x96, 0x8f, 0xfc, 0x49, 0xf0, 0xfa, 0xa1, 0x3e, 0x00, 0x85, 0xc6, 0x01, 0xdd, 0x8e, 0xff, 0xbd, 0xee, 0x02, 0xfb, 0xba, 0xfe, 0x11, 0xdb, 0xfe, 0xed, 0x8a, 0x01, 0x90, 0x8e, 0xff, 0x7a, 0xee, 0xff, 0x19, 0xe7, 0xff, 0xf0, 0xfe, 0x00, 0xcb, 0x5c, 0x00, 0xa1, 0x57, 0xff, 0x8c, 0xe3, 0xfe, 0x37, 0xe9, 0xfd, 0x26, 0x4d, 0x00, 0x81, 0xfc, 0xff, 0xf9, 0x0c, 0xff, 0x14, 0x3a, 0x00, 0x3b, 0x99, 0xff, 0x98, 0x64, 0xff, 0xe2, 0x15, 0xff, 0xf3, 0x35, 0x22, 0xed, 0x7f, 0x26, 0xc3, 0x23, 0x03, 0xd3, 0x94, 0xf8, 0x2f, 0x1b, 0xfa, 0x2f, 0x71, 0x00, 0xd7, 0x57, 0x07, 0xd1, 0x99, 0x01, 0x14, 0x90, 0xfd, 0x70, 0x88, 0xfb, 0x7f, 0x08, 0x00, 0x6b, 0xcc, 0x01, 0x9c, 0x01, 0x00, 0x50, 0x9e, 0x02, 0x1a, 0x71, 0xff, 0x69, 0xa8, 0xff, 0xdd, 0x5f, 0x01, 0x64, 0xbc, 0xff, 0x62, 0x43, 0x00, 0x2b, 0x17, 0x00, 0xd3, 0x14, 0x01, 0x6b, 0x6d, 0x00, 0xbd, 0x7e, 0xff, 0xc5, 0x2a, 0xff, 0x25, 0xdd, 0xfd, 0xa1, 0xa2, 0xff, 0x5c, 0xc3, 0xff, 0x81, 0xff, 0xfe, 0xfa, 0xfd, 0xff, 0xc4, 0x0d, 0x00, 0x76, 0xba, 0xff, 0xe9, 0xec, 0xfe, 0xe5, 0xd3, 0x1f, 0xba, 0x7e, 0x25, 0xb3, 0x36, 0x04, 0x0b, 0x75, 0xf8, 0x94, 0xde, 0xfa, 0x35, 0xe0, 0x00, 0x63, 0xaf, 0x06, 0x0d, 0x36, 0x02, 0x67, 0x18, 0xfe, 0x65, 0x9a, 0xfb, 0xec, 0x16, 0x00, 0xd5, 0xe2, 0x01, 0xd1, 0x43, 0x00, 0x94, 0xbb, 0x02, 0xd3, 0x9f, 0xff, 0xac, 0x00, 0x00, 0x92, 0xbe, 0x01, 0x04, 0x88, 0xff, 0x03, 0xdd, 0xff, 0x14, 0x44, 0x00, 0x91, 0x28, 0x01, 0xd6, 0x15, 0x00, 0x64, 0x4a, 0xff, 0x5e, 0x94, 0xff, 0x42, 0xe4, 0xfd, 0x19, 0xc7, 0xfe, 0x37, 0xa6, 0xff, 0x79, 0x6b, 0xff, 0xce, 0xd8, 0xff, 0xb0, 0xb7, 0xff, 0x25, 0xc9, 0xff, 0xa2, 0xa2, 0xff, 0x91, 0x93, 0x1e, 0xf2, 0x14, 0x25, 0x1b, 0xc2, 0x04, 0x79, 0x4b, 0xf8, 0xd9, 0x9f, 0xfb, 0x07, 0xbf, 0x01, 0xf5, 0x47, 0x06, 0xfc, 0x22, 0x02, 0xf7, 0x7d, 0xfe, 0xdc, 0x3d, 0xfb, 0x83, 0xbe, 0xff, 0x73, 0x59, 0x02, 0x0f, 0xff, 0xff, 0x3b, 0x7b, 0x02, 0xa0, 0x64, 0x00, 0x6e, 0xf4, 0xff, 0x2b, 0x8d, 0x01, 0xd2, 0xf9, 0xff, 0x1a, 0x64, 0xff, 0x4e, 0x7d, 0xff, 0x1a, 0x5e, 0x01, 0x68, 0x4e, 0x00, 0x3a, 0xa8, 0xfe, 0xc8, 0x26, 0xff, 0xc1, 0x79, 0xfe, 0x5e, 0xfe, 0xfe, 0x05, 0x10, 0xff, 0xb0, 0x66, 0xff, 0x12, 0xcd, 0xff, 0x35, 0x66, 0xff, 0x91, 0x32, 0x00, 0x99, 0x69, 0xff, 0x79, 0x86, 0x1e, 0x28, 0x6e, 0x25, 0x07, 0x9b, 0x04, 0x32, 0xd3, 0xf7, 0xf7, 0x64, 0xfc, 0xb0, 0xc3, 0x02, 0x45, 0xa2, 0x06, 0x76, 0xcc, 0x01, 0xb1, 0xf5, 0xfd, 0x16, 0x44, 0xfb, 0x09, 0x54, 0xff, 0xd1, 0xe5, 0x01, 0x53, 0xfb, 0xff, 0xc1, 0x00, 0x02, 0xb5, 0x6b, 0x00, 0x94, 0xa9, 0x00, 0xd9, 0x9c, 0x01, 0x1d, 0x9f, 0xff, 0x53, 0x9a, 0xff, 0xee, 0x89, 0xff, 0x45, 0x89, 0x00, 0x66, 0x03, 0x00, 0xd5, 0x02, 0xff, 0xa7, 0xed, 0xfe, 0xd3, 0x10, 0xfe, 0x36, 0x63, 0xff, 0x04, 0xbf, 0xff, 0xca, 0xbe, 0xfe, 0x54, 0x20, 0xff, 0x5c, 0x16, 0x00, 0x83, 0xbe, 0xff, 0xcc, 0x2c, 0xff, 0x31, 0xd3, 0x1e, 0x8f, 0xad, 0x26, 0x98, 0xd7, 0x04, 0xd0, 0xda, 0xf6, 0x43, 0xef, 0xfc, 0xbd, 0xf1, 0x03, 0xe3, 0x11, 0x07, 0xbe, 0xd9, 0x01, 0x43, 0x6c, 0xfd, 0x88, 0x8f, 0xfa, 0x92, 0x33, 0xff, 0x1e, 0xf5, 0x01, 0x6b, 0x25, 0xff, 0xb8, 0x4e, 0x01, 0x60, 0x93, 0x00, 0x84, 0x88, 0x00, 0x1a, 0xf0, 0x01, 0x22, 0x2f, 0x00, 0xd3, 0x6c, 0xff, 0x5c, 0xb3, 0xff, 0x6e, 0xe0, 0x00, 0x24, 0x51, 0xff, 0xf6, 0x2d, 0xfe, 0x87, 0x4b, 0xff, 0xcb, 0x8f, 0xfe, 0x50, 0x1b, 0xff, 0xde, 0x75, 0xff, 0xab, 0x44, 0xff, 0xbd, 0xcd, 0xff, 0x4e, 0x0d, 0xff, 0x1b, 0x17, 0xff, 0x17, 0xea, 0x00, 0x69, 0x78, 0x20, 0x85, 0x53, 0x28, 0x2f, 0x51, 0x04, 0x3a, 0xac, 0xf5, 0x48, 0x40, 0xfd, 0xb8, 0x2a, 0x05, 0xe5, 0x97, 0x07, 0x60, 0x9e, 0x01, 0x80, 0x05, 0xfd, 0xf6, 0xfd, 0xf9, 0xc1, 0xe3, 0xfe, 0x61, 0x17, 0x02, 0x34, 0xdf, 0xfe, 0xc4, 0x74, 0x00, 0xc1, 0xd7, 0xff, 0x8d, 0x83, 0x00, 0x4f, 0x12, 0x02, 0xde, 0xd5, 0xff, 0x3a, 0xa5, 0xff, 0x48, 0x78, 0x00, 0xb7, 0xf6, 0x00, 0x99, 0x06, 0xff, 0x3a, 0x12, 0xfe, 0xa9, 0xc2, 0xfe, 0x1c, 0x03, 0xfe, 0x49, 0x9b, 0xff, 0x14, 0xe8, 0xff, 0xd3, 0x02, 0xff, 0xca, 0xbc, 0xff, 0x7b, 0x41, 0xff, 0xa0, 0x73, 0xff, 0x01, 0xd0, 0x00, 0x43, 0xce, 0x22, 0x7d, 0xaf, 0x2a, 0x8c, 0x54, 0x03, 0x08, 0xf3, 0xf3, 0x36, 0xc8, 0xfd, 0x74, 0x53, 0x06, 0x12, 0xb7, 0x07, 0x95, 0x36, 0x01, 0x1b, 0x45, 0xfc, 0x9a, 0x60, 0xf9, 0x65, 0x13, 0xff, 0x0d, 0x54, 0x02, 0x2d, 0x76, 0xfe, 0xba, 0x92, 0xff, 0xb1, 0x4c, 0xff, 0x84, 0x67, 0x00, 0x57, 0x9b, 0x01, 0xc2, 0x4b, 0xff, 0x1e, 0x5e, 0xff, 0xc8, 0x91, 0x00, 0xc3, 0x50, 0x01, 0xd0, 0x09, 0xff, 0x9d, 0x0c, 0xfe, 0xd3, 0x8c, 0xfe, 0x74, 0xb7, 0xfd, 0x9c, 0x73, 0xff, 0xc7, 0x87, 0xff, 0xb0, 0x4e, 0xff, 0xef, 0x16, 0x00, 0xb7, 0xe4, 0xfe, 0x5f, 0x41, 0xff, 0x05, 0xe3, 0x00, 0x01, 0xe7, 0x25, 0xe0, 0x6c, 0x2d, 0x78, 0xd4, 0x01, 0xd7, 0x40, 0xf2, 0x61, 0x77, 0xfe, 0x5a, 0x8b, 0x07, 0xed, 0x94, 0x07, 0xeb, 0x36, 0x00, 0x2d, 0x86, 0xfb, 0xaa, 0xbf, 0xf8, 0x48, 0xb0, 0xff, 0xed, 0xf8, 0x02, 0x32, 0xbb, 0xfd, 0x26, 0xf1, 0xfe, 0x8f, 0xb0, 0xfe, 0x07, 0x4f, 0x00, 0xaa, 0xb2, 0x01, 0x12, 0x5c, 0xfe, 0xbe, 0xb6, 0xfe, 0x06, 0x92, 0x00, 0x6d, 0x21, 0x01, 0x78, 0xa9, 0xfe, 0x15, 0x42, 0xfe, 0x72, 0xd4, 0xfe, 0x8b, 0x95, 0xfd, 0x85, 0xe0, 0xff, 0x62, 0x6f, 0xff, 0x30, 0x76, 0xfe, 0x83, 0xff, 0xff, 0x78, 0x58, 0xff, 0xcc, 0x10, 0xff, 0xb4, 0xea, 0xff, 0xaf, 0xe0, 0x29, 0x6c, 0x7d, 0x30, 0x10, 0xbf, 0xff, 0x67, 0xc2, 0xf0, 0x84, 0x6a, 0xff, 0xa7, 0xa0, 0x08, 0xa2, 0x68, 0x07, 0xcf, 0xce, 0xfe, 0xf8, 0x8c, 0xfa, 0x94, 0x56, 0xf8, 0x5e, 0x96, 0x00, 0x39, 0xff, 0x03, 0x27, 0xf3, 0xfc, 0x3d, 0x18, 0xfe, 0xb4, 0x71, 0xfe, 0x31, 0x54, 0x00, 0x03, 0x99, 0x01, 0x16, 0xec, 0xfd, 0x79, 0x3c, 0xfe, 0x78, 0x02, 0x00, 0x68, 0x02, 0x01, 0x29, 0x49, 0xfe, 0x19, 0xe4, 0xfd, 0x03, 0x59, 0xff, 0x84, 0xd7, 0xfd, 0x2b, 0x46, 0x00, 0xce, 0xf9, 0xff, 0xc2, 0x14, 0xfe, 0x73, 0x79, 0xff, 0x25, 0x27, 0xff, 0x67, 0xde, 0xfe, 0xfe, 0x53, 0xff, 0xe6, 0x5a, 0x2e, 0xf3, 0xd5, 0x33, 0x4c, 0x8f, 0xfd, 0xa1, 0xc5, 0xef, 0xc1, 0x66, 0x00, 0xda, 0x38, 0x09, 0x1d, 0x41, 0x07, 0x8c, 0x79, 0xfd, 0x27, 0xaf, 0xf9, 0xa7, 0x18, 0xf8, 0xce, 0x9d, 0x01, 0x02, 0x1d, 0x05, 0x24, 0x57, 0xfc, 0xb2, 0x6c, 0xfd, 0xc6, 0x3a, 0xfe, 0x4d, 0xa2, 0x00, 0xdb, 0x82, 0x01, 0x1d, 0x61, 0xfd, 0xc3, 0x46, 0xfe, 0x0b, 0x9a, 0xff, 0x0b, 0x93, 0x00, 0xa9, 0x3b, 0xfe, 0x2d, 0xbb, 0xfd, 0x5e, 0x88, 0xff, 0x43, 0x5e, 0xfe, 0xa8, 0xac, 0x00, 0x5d, 0x52, 0x00, 0x59, 0x66, 0xfe, 0xfe, 0x5d, 0xff, 0x78, 0xce, 0xfe, 0x6b, 0x53, 0xfe, 0x0e, 0xc8, 0xfe, 0x30, 0x42, 0x33, 0xcd, 0x05, 0x37, 0x11, 0xea, 0xfa, 0x2f, 0x21, 0xef, 0x91, 0x01, 0x01, 0x71, 0xd8, 0x08, 0x20, 0xd8, 0x06, 0x09, 0x3e, 0xfc, 0x56, 0xe5, 0xf8, 0x0c, 0xb6, 0xf7, 0xc9, 0x66, 0x02, 0x8a, 0xd4, 0x05, 0xd1, 0x86, 0xfb, 0x4e, 0xf8, 0xfc, 0x12, 0xec, 0xfd, 0x5c, 0xa7, 0x00, 0x6a, 0x5e, 0x01, 0xcf, 0xc1, 0xfc, 0x25, 0xf9, 0xfd, 0x71, 0x1c, 0xff, 0x3e, 0x59, 0x00, 0x59, 0x12, 0xfe, 0x70, 0x85, 0xfd, 0x9f, 0xa8, 0xff, 0x59, 0xa4, 0xfe, 0x89, 0xb9, 0x00, 0x0a, 0x3e, 0x00, 0x88, 0xd2, 0xfe, 0x8e, 0x47, 0xff, 0xff, 0x5b, 0xfe, 0x2d, 0xe2, 0xfd, 0x27, 0x06, 0xfe, 0x63, 0x3c, 0x38, 0xc5, 0x3c, 0x3a, 0xc3, 0x16, 0xf8, 0x98, 0x0a, 0xef, 0x79, 0x93, 0x01, 0x81, 0x92, 0x07, 0x37, 0x7a, 0x06, 0x0f, 0x80, 0xfb, 0xc5, 0x81, 0xf8, 0x65, 0x65, 0xf7, 0x59, 0xd9, 0x02, 0x37, 0x6c, 0x06, 0xaf, 0xe3, 0xfa, 0xe6, 0xea, 0xfc, 0xb7, 0xc3, 0xfd, 0x26, 0x89, 0x00, 0x84, 0x57, 0x01, 0x65, 0x54, 0xfc, 0x56, 0xa9, 0xfd, 0x87, 0xa2, 0xfe, 0x87, 0x6e, 0x00, 0xf2, 0x27, 0xfe, 0x01, 0x84, 0xfd, 0x2d, 0xfa, 0xff, 0x0a, 0xb8, 0xfe, 0x41, 0xb0, 0x00, 0x75, 0x05, 0x00, 0x07, 0x3f, 0xff, 0xdc, 0x73, 0xff, 0xc1, 0xe5, 0xfd, 0x02, 0xe5, 0xfd, 0x3f, 0x60, 0xfd, 0x1e, 0xda, 0x3d, 0xdc, 0x9b, 0x3c, 0xdb, 0x0d, 0xf4, 0x92, 0x66, 0xef, 0x82, 0x0f, 0x02, 0x0d, 0x83, 0x05, 0xa3, 0xc3, 0x05, 0xcf, 0xc9, 0xfa, 0x7e, 0x25, 0xf8, 0x61, 0xd6, 0xf6, 0x20, 0xff, 0x02, 0x2b, 0x8c, 0x06, 0x81, 0x50, 0xfa, 0xce, 0x2b, 0xfd, 0x65, 0x69, 0xfd, 0xda, 0x3f, 0x00, 0x58, 0x1d, 0x01, 0xe0, 0xca, 0xfb, 0xe8, 0x58, 0xfd, 0xc6, 0x37, 0xfe, 0x86, 0x76, 0x00, 0x88, 0xfb, 0xfd, 0x7a, 0xa3, 0xfd, 0xd9, 0x13, 0x00, 0x2a, 0x48, 0xfe, 0x8a, 0xb9, 0x00, 0x92, 0x8c, 0xff, 0x16, 0x34, 0xff, 0xab, 0xbf, 0xff, 0x11, 0x7b, 0xfd, 0x68, 0xe4, 0xfd, 0x12, 0xac, 0xfc, 0x0b, 0x40, 0x44, 0x21, 0xff, 0x3d, 0x5f, 0xa4, 0xee, 0x69, 0x75, 0xf0, 0x97, 0xec, 0x02, 0x6b, 0x69, 0x03, 0x22, 0xea, 0x04, 0x3a, 0xed, 0xf9, 0xcb, 0x1e, 0xf8, 0x15, 0x17, 0xf6, 0xed, 0x66, 0x03, 0x39, 0xf2, 0x06, 0xea, 0x9d, 0xf9, 0x7b, 0x0b, 0xfe, 0x4e, 0x4b, 0xfd, 0xe7, 0xea, 0xff, 0xa3, 0xd9, 0x00, 0xa0, 0x59, 0xfb, 0xbd, 0xd8, 0xfd, 0xc9, 0xb1, 0xfd, 0x01, 0x24, 0x00, 0xe2, 0x7f, 0xfe, 0x5e, 0x7a, 0xfd, 0x5c, 0x91, 0xff, 0x9c, 0x57, 0xfe, 0x2a, 0xe7, 0x00, 0x78, 0xec, 0xfe, 0x02, 0x64, 0xff, 0xcf, 0x75, 0x00, 0xfc, 0x01, 0xfd, 0x56, 0x92, 0xfd, 0xbb, 0xd1, 0xfc, 0x9a, 0x03, 0x4b, 0x26, 0x9b, 0x3d, 0xb2, 0x8c, 0xe8, 0x3c, 0x85, 0xf2, 0x34, 0xe8, 0x03, 0x1e, 0xbc, 0x01, 0x46, 0xb4, 0x03, 0x6b, 0xf2, 0xf8, 0x55, 0x30, 0xf8, 0x21, 0x4d, 0xf5, 0xc0, 0xeb, 0x04, 0x4f, 0xfe, 0x06, 0xbf, 0xda, 0xf8, 0xb5, 0xe3, 0xff, 0xf3, 0xf6, 0xfc, 0xa6, 0x7c, 0xff, 0x84, 0xdd, 0x00, 0xff, 0xc6, 0xfb, 0xb1, 0x3c, 0xfe, 0xfa, 0x8a, 0xfc, 0x4d, 0xad, 0x00, 0xb1, 0x77, 0xfe, 0x4f, 0x8d, 0xfc, 0x14, 0xeb, 0xff, 0x9d, 0x42, 0xfe, 0xc0, 0xd0, 0x00, 0xf3, 0x38, 0xff, 0x83, 0x04, 0x00, 0x31, 0x9f, 0x00, 0xc9, 0x52, 0xfc, 0x23, 0xe6, 0xfd, 0x75, 0x70, 0xfd, 0x36, 0xda, 0x4f, 0xd6, 0xa1, 0x3c, 0xe4, 0x35, 0xe3, 0x7d, 0xa8, 0xf4, 0x93, 0x9b, 0x04, 0x3c, 0xb7, 0xff, 0x2a, 0xfa, 0x02, 0x7d, 0xa6, 0xf7, 0x34, 0xf0, 0xf7, 0xa5, 0x83, 0xf5, 0xdf, 0x01, 0x06, 0xf4, 0xa9, 0x06, 0x71, 0xdb, 0xf8, 0x0e, 0xac, 0x01, 0xc2, 0xe4, 0xfb, 0xdd, 0x75, 0xff, 0x71, 0x0a, 0x02, 0x8c, 0x2f, 0xfb, 0xe9, 0x52, 0xfe, 0xc1, 0x40, 0xfc, 0xda, 0xa6, 0xff, 0xc3, 0x4b, 0xfe, 0xc1, 0x9f, 0xfc, 0x63, 0x43, 0xff, 0x34, 0x4f, 0xfe, 0x87, 0xf5, 0x01, 0x52, 0x63, 0xff, 0x2d, 0xcd, 0xff, 0x3d, 0xce, 0x00, 0x93, 0x7f, 0xfc, 0xd0, 0xdf, 0xfd, 0x30, 0x02, 0xfd, 0x3a, 0x53, 0x52, 0xbc, 0xec, 0x39, 0xc4, 0xc4, 0xe0, 0x98, 0x51, 0xf7, 0x78, 0x93, 0x03, 0xd8, 0xa2, 0xfe, 0x14, 0xfd, 0x02, 0x92, 0x9f, 0xf6, 0xeb, 0x0a, 0xf8, 0x87, 0xfc, 0xf5, 0x68, 0xfc, 0x06, 0x34, 0x4a, 0x06, 0x8b, 0x4e, 0xf9, 0xe2, 0xe0, 0x02, 0x8d, 0xa6, 0xfb, 0xb4, 0x29, 0x00, 0x16, 0x08, 0x02, 0xac, 0x52, 0xfb, 0x9e, 0x51, 0xfe, 0x88, 0xca, 0xfa, 0x99, 0xc4, 0xff, 0xe6, 0x5d, 0xfe, 0x21, 0xfb, 0xfb, 0xcc, 0x9d, 0xff, 0x60, 0x46, 0xff, 0xfa, 0x6d, 0x02, 0xa5, 0x0e, 0xff, 0xd5, 0x5d, 0x00, 0x70, 0x49, 0x01, 0x16, 0xf4, 0xfb, 0x32, 0x97, 0xfd, 0x24, 0x14, 0xfd, 0xd4, 0x34, 0x51, 0xb4, 0xe7, 0x36, 0xc3, 0xf3, 0xe1, 0xe0, 0xf4, 0xf8, 0x80, 0x1a, 0x01, 0xe4, 0x85, 0xfe, 0x86, 0x70, 0x04, 0x1a, 0x60, 0xf6, 0x8b, 0x76, 0xf7, 0x01, 0x1c, 0xf7, 0xb4, 0xaf, 0x07, 0x34, 0xc3, 0x04, 0xa6, 0x93, 0xfa, 0xf3, 0x0a, 0x05, 0xc7, 0xab, 0xfa, 0x39, 0x4a, 0x00, 0x1b, 0x1a, 0x03, 0x62, 0x0b, 0xfa, 0xdd, 0xff, 0xfd, 0x5b, 0x8e, 0xfb, 0xc7, 0xcf, 0xfe, 0x81, 0xab, 0xfe, 0xf7, 0x03, 0xfd, 0x7d, 0x6d, 0xff, 0xc1, 0x71, 0xff, 0x7e, 0xeb, 0x02, 0xe3, 0x8d, 0xff, 0x09, 0x48, 0x00, 0x9d, 0xea, 0x00, 0xac, 0xff, 0xfb, 0xb5, 0xaa, 0xfd, 0x24, 0x4d, 0xfd, 0xc6, 0x84, 0x4c, 0x46, 0xaf, 0x33, 0x88, 0x62, 0xe6, 0xe3, 0x70, 0xf9, 0x8b, 0xc6, 0xfd, 0x93, 0x84, 0xff, 0x80, 0x78, 0x06, 0x27, 0x96, 0xf6, 0x09, 0x27, 0xf7, 0x9b, 0x31, 0xf8, 0x6f, 0xbf, 0x06, 0xed, 0xe6, 0x03, 0x48, 0xcb, 0xfc, 0x7f, 0x40, 0x05, 0x90, 0xad, 0xfa, 0x17, 0x34, 0x00, 0xd9, 0x37, 0x02, 0x00, 0x80, 0xfa, 0x67, 0xfc, 0xfd, 0xd2, 0xe9, 0xfb, 0xee, 0x53, 0xff, 0x17, 0x21, 0xff, 0x23, 0x82, 0xfd, 0x97, 0xd6, 0xfe, 0xf9, 0xa6, 0xff, 0xff, 0x81, 0x03, 0x79, 0x25, 0xff, 0x1d, 0xc6, 0xff, 0xfa, 0x00, 0x01, 0x30, 0x5b, 0xfc, 0xd7, 0xe6, 0xfd, 0x24, 0x86, 0xfd, 0xed, 0xa0, 0x44, 0xde, 0x43, 0x31, 0x77, 0xcf, 0xec, 0xd0, 0xe1, 0xf8, 0xa8, 0x0f, 0xfb, 0x91, 0x45, 0x00, 0x5b, 0x34, 0x08, 0xff, 0x21, 0xf8, 0x77, 0xf7, 0xf6, 0xb6, 0x9b, 0xf8, 0x57, 0xe5, 0x05, 0xb7, 0xf5, 0x02, 0x95, 0xd9, 0xfd, 0x42, 0xf6, 0x05, 0xd3, 0x46, 0xfa, 0x18, 0x10, 0xff, 0xc4, 0xd0, 0x02, 0x82, 0xa3, 0xfa, 0xd4, 0x25, 0xfe, 0x9c, 0x9d, 0xfd, 0x4f, 0x46, 0xff, 0xaa, 0x64, 0xff, 0x17, 0xd2, 0xfd, 0xe8, 0x89, 0xfe, 0x18, 0x8a, 0xff, 0x99, 0xc3, 0x02, 0x33, 0x22, 0xff, 0x0b, 0x70, 0xff, 0x53, 0x01, 0x01, 0x0d, 0x22, 0xfd, 0xbb, 0xee, 0xfd, 0xd6, 0xf4, 0xfd, 0x0f, 0xa2, 0x36, 0xb3, 0xb8, 0x2d, 0xbd, 0xc9, 0xf2, 0x02, 0xbb, 0xf8, 0xae, 0x4f, 0x03, 0xdf, 0xa4, 0x02, 0x3a, 0x58, 0x03, 0x53, 0x70, 0xfa, 0x9a, 0xa9, 0xf9, 0xde, 0x12, 0xfa, 0x74, 0xb8, 0x04, 0xfd, 0x11, 0x04, 0xb5, 0x94, 0xfd, 0xac, 0x72, 0x02, 0x14, 0xa7, 0xfd, 0x26, 0x9e, 0x00, 0x54, 0xa4, 0x01, 0xc9, 0x9f, 0xfc, 0x7a, 0x64, 0xfe, 0x2e, 0x00, 0xfd, 0x78, 0x2a, 0xff, 0x2c, 0x56, 0xff, 0x64, 0x64, 0xfe, 0xa4, 0x5d, 0xff, 0x30, 0x8c, 0xff, 0x7a, 0x43, 0x02, 0x62, 0xcb, 0xff, 0x63, 0x9e, 0xff, 0x03, 0x9d, 0x00, 0xc5, 0x89, 0xfd, 0x1a, 0xef, 0xfd, 0xab, 0xf7, 0xfd, 0x75, 0xde, 0x31, 0xe8, 0x31, 0x2d, 0x28, 0x33, 0xf6, 0x08, 0xf8, 0xf5, 0x5a, 0xa0, 0x00, 0x98, 0x24, 0x04, 0xae, 0xbe, 0x05, 0xf2, 0x2a, 0xfc, 0x85, 0xf3, 0xf9, 0xe2, 0xfe, 0xf8, 0x43, 0x5a, 0x02, 0x5e, 0xeb, 0x03, 0x95, 0xa1, 0xfe, 0xb9, 0xc1, 0x02, 0x7e, 0x64, 0xfe, 0x36, 0x6b, 0x00, 0x1a, 0x6f, 0x02, 0xff, 0xa8, 0xfd, 0x2c, 0x98, 0xfe, 0xf5, 0x9b, 0xfe, 0xdb, 0xe9, 0xff, 0x25, 0x3a, 0xff, 0x61, 0xab, 0xfe, 0x12, 0xdd, 0xfe, 0xac, 0xb7, 0xfe, 0xd0, 0x1c, 0x02, 0xf9, 0xe7, 0xff, 0x68, 0xfe, 0xfe, 0xc8, 0xc2, 0x00, 0xc3, 0x76, 0xfe, 0xc3, 0x30, 0xfe, 0x98, 0x5d, 0xfe, 0xef, 0xe5, 0x2d, 0xeb, 0xe8, 0x2c, 0xc3, 0x5c, 0xf9, 0x9f, 0x25, 0xf4, 0x9f, 0x6c, 0xfe, 0x68, 0x30, 0x04, 0xd2, 0xbb, 0x06, 0x2a, 0x12, 0xfe, 0x68, 0xfc, 0xfa, 0x55, 0xca, 0xf8, 0xcc, 0xd2, 0x00, 0xc8, 0x63, 0x03, 0x07, 0x19, 0xff, 0xfe, 0xd5, 0x02, 0x88, 0x16, 0xff, 0x77, 0x73, 0x00, 0xac, 0xa4, 0x02, 0xaa, 0xae, 0xfe, 0xde, 0xdd, 0xfe, 0x86, 0x1c, 0xff, 0xe0, 0xaa, 0x00, 0x84, 0x3e, 0xff, 0xa5, 0xa3, 0xfe, 0x7d, 0x08, 0xff, 0xcb, 0xda, 0xfd, 0xab, 0x2e, 0x01, 0xc5, 0x4a, 0x00, 0x5f, 0xc0, 0xfe, 0xac, 0x33, 0x00, 0xed, 0x26, 0xff, 0x65, 0xad, 0xfe, 0x17, 0x59, 0xfe, 0x1b, 0x87, 0x2b, 0xe9, 0x0d, 0x2d, 0x17, 0x2d, 0xfb, 0x28, 0x2e, 0xf3, 0xc3, 0xc7, 0xfd, 0xf5, 0x50, 0x04, 0xa8, 0x0d, 0x07, 0xae, 0xcb, 0xfe, 0x78, 0x6c, 0xfb, 0xc3, 0xf4, 0xf8, 0x95, 0x29, 0x00, 0xe5, 0xff, 0x02, 0xf3, 0xe7, 0xfe, 0xe4, 0xa0, 0x02, 0x68, 0x62, 0xff, 0x3f, 0x88, 0x00, 0x12, 0xf9, 0x02, 0x2b, 0x01, 0xff, 0xc5, 0x14, 0xff, 0x91, 0x7f, 0xff, 0xe3, 0xa7, 0x00, 0x5b, 0xef, 0xfe, 0xba, 0x58, 0xfe, 0xc0, 0x4c, 0xff, 0xfe, 0x7a, 0xfd, 0x1c, 0x0a, 0x00, 0x9c, 0x79, 0x00, 0x32, 0x12, 0xff, 0xea, 0xd1, 0xff, 0x48, 0x21, 0xff, 0x16, 0xf7, 0xfe, 0x5e, 0x9f, 0xfe, 0xf0, 0x50, 0x2b, 0xcb, 0x6a, 0x2d, 0x20, 0x1f, 0xfb, 0x55, 0xbb, 0xf2, 0xff, 0x07, 0xff, 0x1e, 0x74, 0x05, 0x5d, 0x15, 0x07, 0x74, 0x80, 0xfe, 0xab, 0xd3, 0xfa, 0x25, 0xfe, 0xf8, 0xf2, 0x44, 0x00, 0x95, 0x21, 0x03, 0xa0, 0x72, 0xfe, 0x27, 0x83, 0x01, 0xb3, 0xa5, 0xff, 0x54, 0xa3, 0x00, 0xb6, 0xa1, 0x02, 0x38, 0x6c, 0xff, 0x79, 0x4c, 0xff, 0xdb, 0xcc, 0xff, 0xd5, 0xce, 0x00, 0xb3, 0x7e, 0xfe, 0xff, 0xa7, 0xfd, 0x47, 0xe8, 0xfe, 0xa2, 0xe0, 0xfd, 0x65, 0xf6, 0xff, 0xe9, 0xfa, 0xff, 0xf0, 0x5d, 0xff, 0x91, 0xff, 0xff, 0xfc, 0xf5, 0xfe, 0x5a, 0x2f, 0xff, 0x73, 0x85, 0xfe, 0xe1, 0x5e, 0x2d, 0x3a, 0x74, 0x2d, 0xc9, 0x48, 0xf9, 0xc0, 0x71, 0xf3, 0xed, 0x76, 0x01, 0x5b, 0xeb, 0x06, 0xdd, 0x79, 0x06, 0x46, 0x32, 0xfd, 0x52, 0x2a, 0xfa, 0x5f, 0x17, 0xf9, 0x28, 0x06, 0x01, 0xa9, 0x54, 0x03, 0xd0, 0xe8, 0xfd, 0x95, 0x7c, 0x00, 0x80, 0xd2, 0xfe, 0x93, 0x03, 0x01, 0x8b, 0x66, 0x02, 0x3a, 0x5f, 0xfe, 0x58, 0xbb, 0xff, 0xc5, 0x8f, 0x00, 0x5b, 0x5d, 0x00, 0x1a, 0x35, 0xfe, 0x80, 0x96, 0xfd, 0x6b, 0x48, 0xfe, 0x6d, 0xb5, 0xfd, 0x38, 0x7e, 0x00, 0xa1, 0x4b, 0x00, 0x21, 0x29, 0xff, 0xa8, 0xbf, 0xff, 0xeb, 0x3d, 0xff, 0x64, 0x28, 0xff, 0x71, 0x14, 0xfe, 0x37, 0x51, 0x30, 0x1f, 0x66, 0x2e, 0x31, 0x69, 0xf7, 0x21, 0xb8, 0xf4, 0x88, 0xf5, 0x03, 0xa8, 0xdc, 0x06, 0xe9, 0xe8, 0x04, 0xcd, 0xd7, 0xfb, 0xa6, 0xcf, 0xf9, 0x7c, 0xda, 0xf9, 0xf1, 0x73, 0x02, 0xcb, 0xdb, 0x03, 0x85, 0xeb, 0xfc, 0xfa, 0x4e, 0xff, 0xeb, 0xb6, 0xfe, 0x9c, 0xee, 0x00, 0xe8, 0x74, 0x01, 0x78, 0xc6, 0xfd, 0x2a, 0x38, 0xff, 0x13, 0x27, 0x00, 0x91, 0x55, 0x00, 0x5e, 0xe9, 0xfd, 0x33, 0xbd, 0xfd, 0x98, 0x93, 0xfe, 0x14, 0xec, 0xfd, 0xf5, 0x7e, 0x00, 0xda, 0xee, 0xff, 0x34, 0xab, 0xff, 0x3e, 0xed, 0xff, 0x0f, 0x99, 0xfe, 0x22, 0xe2, 0xfe, 0xfe, 0xd0, 0xfd, 0x8d, 0x81, 0x34, 0xc7, 0x4e, 0x30, 0x39, 0x55, 0xf5, 0xc5, 0xd7, 0xf5, 0x3c, 0xd2, 0x04, 0xd2, 0xbf, 0x04, 0xcb, 0x11, 0x03, 0x20, 0x40, 0xfb, 0x85, 0x37, 0xfa, 0x38, 0xf9, 0xfa, 0x11, 0x6f, 0x04, 0x69, 0x24, 0x04, 0x7b, 0x88, 0xfb, 0x3d, 0xcf, 0xfe, 0xdf, 0xa7, 0xfe, 0x2b, 0x8c, 0x00, 0x71, 0x4b, 0x00, 0x5b, 0x29, 0xfd, 0xf9, 0x86, 0xfe, 0xd6, 0x98, 0xfe, 0x3a, 0x45, 0x00, 0x87, 0x1b, 0xfe, 0xfe, 0xa8, 0xfd, 0x33, 0x66, 0xff, 0x2b, 0x70, 0xfe, 0xb3, 0x4a, 0x00, 0x33, 0x94, 0xff, 0xcf, 0x02, 0x00, 0xcd, 0x2b, 0x00, 0x0f, 0xb9, 0xfd, 0xe4, 0x6f, 0xfe, 0x80, 0xdc, 0xfd, 0x14, 0x8e, 0x39, 0x11, 0x44, 0x33, 0xc4, 0x51, 0xf2, 0xff, 0xc3, 0xf5, 0x72, 0x19, 0x04, 0x46, 0x5c, 0x01, 0x8c, 0x0e, 0x02, 0xea, 0x85, 0xfb, 0x9f, 0xe4, 0xfa, 0xaa, 0xcd, 0xfb, 0x9c, 0x27, 0x06, 0x02, 0x3e, 0x04, 0xfa, 0xfd, 0xf9, 0xf9, 0x87, 0xff, 0x39, 0x68, 0xfe, 0x9d, 0x20, 0xff, 0xc7, 0x2c, 0x00, 0xe8, 0x7b, 0xfc, 0xb0, 0xf4, 0xfc, 0x59, 0xa0, 0xfd, 0x7c, 0x7d, 0x00, 0xc1, 0x16, 0xfe, 0x17, 0x9a, 0xfd, 0xdb, 0x14, 0x00, 0xec, 0x86, 0xfe, 0x88, 0x2a, 0x00, 0xda, 0xe1, 0xff, 0x4e, 0x23, 0x00, 0xf1, 0xbb, 0xff, 0x99, 0x21, 0xfd, 0xd7, 0x7c, 0xfe, 0x85, 0x7e, 0xfd, 0x38, 0x69, 0x3e, 0xa8, 0x0a, 0x34, 0xdf, 0xfa, 0xee, 0xa6, 0xbb, 0xf6, 0x60, 0x7c, 0x03, 0x07, 0xd7, 0xfe, 0xcf, 0x9c, 0x01, 0x8a, 0xd9, 0xfb, 0x91, 0x75, 0xfb, 0x8f, 0x65, 0xfc, 0x61, 0x88, 0x07, 0x90, 0x0b, 0x04, 0xdd, 0x98, 0xf9, 0xa9, 0xe1, 0x00, 0x1a, 0xc3, 0xfd, 0xc3, 0x74, 0xfe, 0x91, 0x92, 0x00, 0x70, 0xbe, 0xfb, 0xdf, 0x2e, 0xfc, 0x1e, 0x0d, 0xfd, 0x5d, 0x73, 0x00, 0x3a, 0x8c, 0xfe, 0xdd, 0x95, 0xfd, 0x6c, 0x49, 0x00, 0x00, 0x07, 0xff, 0xb1, 0x77, 0x00, 0xb7, 0x4b, 0x00, 0x71, 0x3c, 0x00, 0x17, 0x72, 0xff, 0x05, 0x47, 0xfd, 0xde, 0x52, 0xfe, 0x66, 0xd8, 0xfc, 0x45, 0x28, 0x3f, 0x10, 0x37, 0x33, 0xd7, 0xbd, 0xed, 0x79, 0xf9, 0xf7, 0x9c, 0xc8, 0x03, 0x59, 0x24, 0xfe, 0x41, 0x21, 0x01, 0xc1, 0x1f, 0xfb, 0x5c, 0x4b, 0xfb, 0x0f, 0x1e, 0xfc, 0x49, 0xbf, 0x07, 0x60, 0x6d, 0x04, 0xe6, 0xd0, 0xf9, 0x34, 0x80, 0x01, 0xc3, 0x18, 0xfe, 0x61, 0x68, 0xfe, 0x8b, 0x5c, 0x00, 0xe8, 0x65, 0xfc, 0x8a, 0xfe, 0xfb, 0x9c, 0xb4, 0xfb, 0x2f, 0xb7, 0x00, 0xc6, 0x8e, 0xfe, 0xe3, 0x13, 0xfd, 0xff, 0xe7, 0x00, 0x4a, 0x99, 0xff, 0x4d, 0xac, 0x00, 0xfb, 0x40, 0x00, 0xea, 0x75, 0x00, 0xed, 0xbf, 0xff, 0xef, 0xc3, 0xfc, 0x62, 0xf6, 0xfd, 0x0a, 0x10, 0xfd, 0x9f, 0x65, 0x3c, 0xa5, 0x28, 0x30, 0x52, 0x28, 0xef, 0xa2, 0x45, 0xf9, 0x1c, 0x1e, 0x04, 0x93, 0xed, 0xff, 0x7f, 0x5d, 0x01, 0x41, 0x58, 0xfa, 0x65, 0x79, 0xfa, 0x12, 0x30, 0xfb, 0x46, 0x2b, 0x07, 0x64, 0x3c, 0x04, 0x1f, 0x38, 0xfb, 0x89, 0x69, 0x02, 0x01, 0xbb, 0xfd, 0x16, 0x69, 0xff, 0x7e, 0x39, 0x01, 0x0a, 0x42, 0xfc, 0x45, 0xf4, 0xfc, 0xc9, 0xf5, 0xfb, 0xce, 0x78, 0xff, 0x5a, 0xed, 0xfe, 0x47, 0xcb, 0xfd, 0xa0, 0x6d, 0x00, 0x95, 0xe9, 0xff, 0x93, 0x35, 0x01, 0xf1, 0x39, 0x00, 0x70, 0x69, 0x00, 0x71, 0xcf, 0xff, 0xff, 0xee, 0xfc, 0x9a, 0xdf, 0xfd, 0xa0, 0x8a, 0xfd, 0xb0, 0x52, 0x2e, 0x93, 0xd3, 0x2c, 0x54, 0xc5, 0xf8, 0x09, 0x08, 0xf8, 0xd7, 0xba, 0x05, 0xf8, 0xec, 0x02, 0x9b, 0x50, 0x01, 0x84, 0xd1, 0xfc, 0xf4, 0x58, 0xfb, 0x8b, 0x69, 0xfd, 0x73, 0xbe, 0x05, 0x61, 0xf0, 0x03, 0x63, 0xe7, 0xfc, 0xa2, 0xd9, 0xff, 0xfd, 0x5f, 0xff, 0xce, 0x20, 0x00, 0xb2, 0x7f, 0x00, 0x74, 0x5e, 0xfe, 0x2f, 0x97, 0xfd, 0xc7, 0x12, 0xfd, 0x22, 0xfc, 0xff, 0xdc, 0x9f, 0xfe, 0x28, 0x97, 0xfd, 0xa0, 0x13, 0x00, 0xf9, 0x02, 0x00, 0x2d, 0x21, 0x01, 0x29, 0x42, 0x01, 0xbc, 0xfc, 0x00, 0xa8, 0x99, 0xff, 0x87, 0xca, 0xfc, 0x67, 0xd5, 0xfc, 0x9f, 0x47, 0xfd, 0x14, 0x12, 0x13, 0x14, 0x16, 0x14, 0x13, 0x13, 0x12, 0x11, 0x11, 0x11, 0x11, 0x10, 0x12, 0x13, 0x13, 0x14, 0x15, 0x18, 0x16, 0x15, 0x14, 0x13, 0x12, 0x12, 0x11, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x10, 0x0e, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x15, 0x16, 0x1a, 0x17, 0x16, 0x15, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0d, 0x0f, 0x10, 0x11, 0x12, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x0c, 0x0b, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x11, 0x13, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x1d, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x16, 0x15, 0x14, 0x13, 0x11, 0x10, 0x0f, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x07, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x20, 0x1c, 0x1b, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x17, 0x16, 0x15, 0x14, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x05, 0x05, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x23, 0x1d, 0x1c, 0x1b, 0x1b, 0x1a, 0x19, 0x18, 0x18, 0x17, 0x16, 0x16, 0x15, 0x14, 0x13, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x05, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x15, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1d, 0x1c, 0x1b, 0x1a, 0x1a, 0x19, 0x18, 0x17, 0x17, 0x16, 0x15, 0x14, 0x13, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x05, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x05, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x21, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x04, 0x04, 0x05, 0x07, 0x08, 0x08, 0x09, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1e, 0x20, 0x21, 0x22, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x16, 0x15, 0x14, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x05, 0x04, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x20, 0x1e, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x05, 0x05, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0a, 0x0b, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x15, 0x16, 0x17, 0x18, 0x19, 0x19, 0x1a, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x11, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x05, 0x05, 0x04, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x05, 0x07, 0x08, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x13, 0x14, 0x16, 0x17, 0x18, 0x18, 0x19, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x19, 0x18, 0x17, 0x17, 0x15, 0x15, 0x13, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x08, 0x07, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x07, 0x07, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x07, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x11, 0x13, 0x13, 0x13, 0x11, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x05, 0x04, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05, 0x07, 0x04, 0x05, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x09, 0x09, 0x08, 0x07, 0x05, 0x04, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x11, 0x11, 0x10, 0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x09, 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x08, 0x08, 0x08, 0x05, }; ================================================ FILE: project/lib/custom/openal/build/version.h ================================================ /* Define to the library version */ #define ALSOFT_VERSION "1.20.1" /* Define the branch being built */ #define ALSOFT_GIT_BRANCH "master" /* Define the hash of the head commit */ #define ALSOFT_GIT_COMMIT_HASH "f5e0eef3" ================================================ FILE: project/lib/custom/openal/include/config-android.h ================================================ /* API declaration export attribute */ #define AL_API __attribute__((visibility("protected"))) #define ALC_API __attribute__((visibility("protected"))) /* Define a restrict macro for non-aliased pointers */ #define RESTRICT __restrict /* Define if HRTF data is embedded in the library */ #define ALSOFT_EMBED_HRTF_DATA /* Define if we have the C11 aligned_alloc function */ /* #undef HAVE_ALIGNED_ALLOC */ /* Define if we have the posix_memalign function */ /* #undef HAVE_POSIX_MEMALIGN */ /* Define if we have the _aligned_malloc function */ /* #undef HAVE__ALIGNED_MALLOC */ /* Define if we have the proc_pidpath function */ /* #undef HAVE_PROC_PIDPATH */ /* Define if we have the getopt function */ /* #undef HAVE_GETOPT */ /* Define if we have SSE CPU extensions */ /* #undef HAVE_SSE */ /* #undef HAVE_SSE2 */ /* #undef HAVE_SSE3 */ /* #undef HAVE_SSE4_1 */ /* Define if we have ARM Neon CPU extensions */ /* #undef HAVE_NEON */ /* Define if we have the ALSA backend */ /* #undef HAVE_ALSA */ /* Define if we have the OSS backend */ /* #undef HAVE_OSS */ /* Define if we have the Solaris backend */ /* #undef HAVE_SOLARIS */ /* Define if we have the SndIO backend */ /* #undef HAVE_SNDIO */ /* Define if we have the QSA backend */ /* #undef HAVE_QSA */ /* Define if we have the WASAPI backend */ /* #undef HAVE_WASAPI */ /* Define if we have the DSound backend */ /* #undef HAVE_DSOUND */ /* Define if we have the Windows Multimedia backend */ /* #undef HAVE_WINMM */ /* Define if we have the PortAudio backend */ /* #undef HAVE_PORTAUDIO */ /* Define if we have the PulseAudio backend */ /* #undef HAVE_PULSEAUDIO */ /* Define if we have the JACK backend */ /* #undef HAVE_JACK */ /* Define if we have the CoreAudio backend */ /* #undef HAVE_COREAUDIO */ /* Define if we have the OpenSL backend */ #define HAVE_OPENSL /* Define if we have the Wave Writer backend */ #define HAVE_WAVE /* Define if we have the SDL2 backend */ /* #undef HAVE_SDL2 */ /* Define if we have the stat function */ #define HAVE_STAT /* Define to the size of a long int type */ #define SIZEOF_LONG 4 /* Define if we have GCC's format attribute */ #define HAVE_GCC_FORMAT /* Define if we have dlfcn.h */ #define HAVE_DLFCN_H /* Define if we have pthread_np.h */ /* #undef HAVE_PTHREAD_NP_H */ /* Define if we have malloc.h */ #define HAVE_MALLOC_H /* Define if we have dirent.h */ #define HAVE_DIRENT_H /* Define if we have cpuid.h */ /* #undef HAVE_CPUID_H */ /* Define if we have intrin.h */ /* #undef HAVE_INTRIN_H */ /* Define if we have sys/sysconf.h */ #define HAVE_SYS_SYSCONF_H /* Define if we have guiddef.h */ /* #undef HAVE_GUIDDEF_H */ /* Define if we have initguid.h */ /* #undef HAVE_INITGUID_H */ /* Define if we have GCC's __get_cpuid() */ /* #undef HAVE_GCC_GET_CPUID */ /* Define if we have the __cpuid() intrinsic */ /* #undef HAVE_CPUID_INTRINSIC */ /* Define if we have the _BitScanForward64() intrinsic */ /* #undef HAVE_BITSCANFORWARD64_INTRINSIC */ /* Define if we have the _BitScanForward() intrinsic */ /* #undef HAVE_BITSCANFORWARD_INTRINSIC */ /* Define if we have pthread_setschedparam() */ #define HAVE_PTHREAD_SETSCHEDPARAM /* Define if we have pthread_setname_np() */ /* #undef HAVE_PTHREAD_SETNAME_NP */ /* Define if pthread_setname_np() only accepts one parameter */ /* #undef PTHREAD_SETNAME_NP_ONE_PARAM */ /* Define if pthread_setname_np() accepts three parameters */ /* #undef PTHREAD_SETNAME_NP_THREE_PARAMS */ /* Define if we have pthread_set_name_np() */ /* #undef HAVE_PTHREAD_SET_NAME_NP */ ================================================ FILE: project/lib/custom/openal/include/config-linux-x86_64.h ================================================ /* API declaration export attribute */ #define AL_API __attribute__((visibility("protected"))) #define ALC_API __attribute__((visibility("protected"))) /* Define any available alignment declaration */ #define ALIGN(x) __attribute__((aligned(x))) /* Define a restrict macro for non-aliased pointers */ #define RESTRICT __restrict /* Define if HRTF data is embedded in the library */ #define ALSOFT_EMBED_HRTF_DATA /* Define if we have the posix_memalign function */ #define HAVE_POSIX_MEMALIGN /* Define if we have the _aligned_malloc function */ /* #undef HAVE__ALIGNED_MALLOC */ /* Define if we have the proc_pidpath function */ /* #undef HAVE_PROC_PIDPATH */ /* Define if we have the getopt function */ /* #undef HAVE_GETOPT */ /* Define if we have SSE CPU extensions */ #if !defined(RASPBERRYPI) && !defined(HXCPP_ARM64) #define HAVE_SSE #define HAVE_SSE2 #define HAVE_SSE3 /* #undef HAVE_SSE4_1 */ #endif /* Define if we have ARM Neon CPU extensions */ #ifdef RASPBERRYPI #define HAVE_NEON #endif /* Define if we have the ALSA backend */ #define HAVE_ALSA /* Define if we have the OSS backend */ #define HAVE_OSS /* Define if we have the Solaris backend */ /* #undef HAVE_SOLARIS */ /* Define if we have the SndIO backend */ /* #undef HAVE_SNDIO */ /* Define if we have the QSA backend */ /* #undef HAVE_QSA */ /* Define if we have the WASAPI backend */ /* #undef HAVE_WASAPI */ /* Define if we have the DSound backend */ /* #undef HAVE_DSOUND */ /* Define if we have the Windows Multimedia backend */ /* #undef HAVE_WINMM */ /* Define if we have the PortAudio backend */ /* #undef HAVE_PORTAUDIO */ /* Define if we have the PulseAudio backend */ #define HAVE_PULSEAUDIO /* Define if we have the JACK backend */ /* #undef HAVE_JACK */ /* Define if we have the CoreAudio backend */ /* #undef HAVE_COREAUDIO */ /* Define if we have the OpenSL backend */ /* #undef HAVE_OPENSL */ /* Define if we have the Wave Writer backend */ #define HAVE_WAVE /* Define if we have the SDL2 backend */ /* #undef HAVE_SDL2 */ /* Define if we have the stat function */ #define HAVE_STAT /* Define to the size of a long int type */ #define SIZEOF_LONG 8 /* Define if we have GCC's format attribute */ #define HAVE_GCC_FORMAT /* Define if we have dlfcn.h */ #define HAVE_DLFCN_H /* Define if we have pthread_np.h */ /* #undef HAVE_PTHREAD_NP_H */ /* Define if we have malloc.h */ #define HAVE_MALLOC_H /* Define if we have dirent.h */ #define HAVE_DIRENT_H /* Define if we have cpuid.h */ #if !defined(RASPBERRYPI) && !defined(HXCPP_ARM64) #define HAVE_CPUID_H #endif /* Define if we have intrin.h */ /* #undef HAVE_INTRIN_H */ /* Define if we have sys/sysconf.h */ /* #undef HAVE_SYS_SYSCONF_H */ /* Define if we have guiddef.h */ /* #undef HAVE_GUIDDEF_H */ /* Define if we have initguid.h */ /* #undef HAVE_INITGUID_H */ /* Define if we have GCC's __get_cpuid() */ #define HAVE_GCC_GET_CPUID /* Define if we have the __cpuid() intrinsic */ /* #undef HAVE_CPUID_INTRINSIC */ /* Define if we have the _BitScanForward64() intrinsic */ /* #undef HAVE_BITSCANFORWARD64_INTRINSIC */ /* Define if we have the _BitScanForward() intrinsic */ /* #undef HAVE_BITSCANFORWARD_INTRINSIC */ /* Define if we have pthread_setschedparam() */ #define HAVE_PTHREAD_SETSCHEDPARAM /* Define if we have pthread_setname_np() */ /* #undef HAVE_PTHREAD_SETNAME_NP */ /* Define if pthread_setname_np() only accepts one parameter */ /* #undef PTHREAD_SETNAME_NP_ONE_PARAM */ /* Define if pthread_setname_np() accepts three parameters */ /* #undef PTHREAD_SETNAME_NP_THREE_PARAMS */ /* Define if we have pthread_set_name_np() */ /* #undef HAVE_PTHREAD_SET_NAME_NP */ ================================================ FILE: project/lib/custom/openal/include/config-macos-arm64.h ================================================ /* API declaration export attribute */ #define AL_API __attribute__((visibility("default"))) #define ALC_API __attribute__((visibility("default"))) /* Define a restrict macro for non-aliased pointers */ #define RESTRICT __restrict /* Define if HRTF data is embedded in the library */ #define ALSOFT_EMBED_HRTF_DATA /* Define if we have the C11 aligned_alloc function */ /* #undef HAVE_ALIGNED_ALLOC */ /* Define if we have the posix_memalign function */ #define HAVE_POSIX_MEMALIGN /* Define if we have the _aligned_malloc function */ /* #undef HAVE__ALIGNED_MALLOC */ /* Define if we have the proc_pidpath function */ /* #undef HAVE_PROC_PIDPATH */ /* Define if we have the getopt function */ /* #undef HAVE_GETOPT */ /* Define if we have SSE CPU extensions */ #undef HAVE_SSE #undef HAVE_SSE2 #undef HAVE_SSE3 /* #undef HAVE_SSE4_1 */ /* Define if we have ARM Neon CPU extensions */ #define HAVE_NEON /* Define if we have the ALSA backend */ /* #undef HAVE_ALSA */ /* Define if we have the OSS backend */ /* #undef HAVE_OSS */ /* Define if we have the Solaris backend */ /* #undef HAVE_SOLARIS */ /* Define if we have the SndIO backend */ /* #undef HAVE_SNDIO */ /* Define if we have the QSA backend */ /* #undef HAVE_QSA */ /* Define if we have the WASAPI backend */ /* #undef HAVE_WASAPI */ /* Define if we have the DSound backend */ /* #undef HAVE_DSOUND */ /* Define if we have the Windows Multimedia backend */ /* #undef HAVE_WINMM */ /* Define if we have the PortAudio backend */ /* #undef HAVE_PORTAUDIO */ /* Define if we have the PulseAudio backend */ /* #undef HAVE_PULSEAUDIO */ /* Define if we have the JACK backend */ /* #undef HAVE_JACK */ /* Define if we have the CoreAudio backend */ #define HAVE_COREAUDIO /* Define if we have the OpenSL backend */ /* #undef HAVE_OPENSL */ /* Define if we have the Wave Writer backend */ #define HAVE_WAVE /* Define if we have the SDL2 backend */ /* #undef HAVE_SDL2 */ /* Define if we have the stat function */ #define HAVE_STAT /* Define to the size of a long int type */ #define SIZEOF_LONG 8 /* Define if we have GCC's format attribute */ #define HAVE_GCC_FORMAT /* Define if we have dlfcn.h */ #define HAVE_DLFCN_H /* Define if we have pthread_np.h */ /* #undef HAVE_PTHREAD_NP_H */ /* Define if we have malloc.h */ /* #undef HAVE_MALLOC_H */ /* Define if we have dirent.h */ #define HAVE_DIRENT_H /* Define if we have cpuid.h */ #undef HAVE_CPUID_H /* Define if we have intrin.h */ /* #undef HAVE_INTRIN_H */ /* Define if we have sys/sysconf.h */ /* #undef HAVE_SYS_SYSCONF_H */ /* Define if we have guiddef.h */ /* #undef HAVE_GUIDDEF_H */ /* Define if we have initguid.h */ /* #undef HAVE_INITGUID_H */ /* Define if we have GCC's __get_cpuid() */ #undef HAVE_GCC_GET_CPUID /* Define if we have the __cpuid() intrinsic */ /* #undef HAVE_CPUID_INTRINSIC */ /* Define if we have the _BitScanForward64() intrinsic */ /* #undef HAVE_BITSCANFORWARD64_INTRINSIC */ /* Define if we have the _BitScanForward() intrinsic */ /* #undef HAVE_BITSCANFORWARD_INTRINSIC */ /* Define if we have pthread_setschedparam() */ #define HAVE_PTHREAD_SETSCHEDPARAM /* Define if we have pthread_setname_np() */ /* #undef HAVE_PTHREAD_SETNAME_NP */ /* Define if pthread_setname_np() only accepts one parameter */ /* #undef PTHREAD_SETNAME_NP_ONE_PARAM */ /* Define if pthread_setname_np() accepts three parameters */ /* #undef PTHREAD_SETNAME_NP_THREE_PARAMS */ /* Define if we have pthread_set_name_np() */ /* #undef HAVE_PTHREAD_SET_NAME_NP */ ================================================ FILE: project/lib/custom/openal/include/config-macos-x86_64.h ================================================ /* API declaration export attribute */ #define AL_API __attribute__((visibility("default"))) #define ALC_API __attribute__((visibility("default"))) /* Define a restrict macro for non-aliased pointers */ #define RESTRICT __restrict /* Define if HRTF data is embedded in the library */ #define ALSOFT_EMBED_HRTF_DATA /* Define if we have the C11 aligned_alloc function */ /* #undef HAVE_ALIGNED_ALLOC */ /* Define if we have the posix_memalign function */ #define HAVE_POSIX_MEMALIGN /* Define if we have the _aligned_malloc function */ /* #undef HAVE__ALIGNED_MALLOC */ /* Define if we have the proc_pidpath function */ /* #undef HAVE_PROC_PIDPATH */ /* Define if we have the getopt function */ /* #undef HAVE_GETOPT */ /* Define if we have SSE CPU extensions */ #define HAVE_SSE #define HAVE_SSE2 #define HAVE_SSE3 /* #undef HAVE_SSE4_1 */ /* Define if we have ARM Neon CPU extensions */ /* #undef HAVE_NEON */ /* Define if we have the ALSA backend */ /* #undef HAVE_ALSA */ /* Define if we have the OSS backend */ /* #undef HAVE_OSS */ /* Define if we have the Solaris backend */ /* #undef HAVE_SOLARIS */ /* Define if we have the SndIO backend */ /* #undef HAVE_SNDIO */ /* Define if we have the QSA backend */ /* #undef HAVE_QSA */ /* Define if we have the WASAPI backend */ /* #undef HAVE_WASAPI */ /* Define if we have the DSound backend */ /* #undef HAVE_DSOUND */ /* Define if we have the Windows Multimedia backend */ /* #undef HAVE_WINMM */ /* Define if we have the PortAudio backend */ /* #undef HAVE_PORTAUDIO */ /* Define if we have the PulseAudio backend */ /* #undef HAVE_PULSEAUDIO */ /* Define if we have the JACK backend */ /* #undef HAVE_JACK */ /* Define if we have the CoreAudio backend */ #define HAVE_COREAUDIO /* Define if we have the OpenSL backend */ /* #undef HAVE_OPENSL */ /* Define if we have the Wave Writer backend */ #define HAVE_WAVE /* Define if we have the SDL2 backend */ /* #undef HAVE_SDL2 */ /* Define if we have the stat function */ #define HAVE_STAT /* Define to the size of a long int type */ #define SIZEOF_LONG 8 /* Define if we have GCC's format attribute */ #define HAVE_GCC_FORMAT /* Define if we have dlfcn.h */ #define HAVE_DLFCN_H /* Define if we have pthread_np.h */ /* #undef HAVE_PTHREAD_NP_H */ /* Define if we have malloc.h */ /* #undef HAVE_MALLOC_H */ /* Define if we have dirent.h */ #define HAVE_DIRENT_H /* Define if we have cpuid.h */ #define HAVE_CPUID_H /* Define if we have intrin.h */ /* #undef HAVE_INTRIN_H */ /* Define if we have sys/sysconf.h */ /* #undef HAVE_SYS_SYSCONF_H */ /* Define if we have guiddef.h */ /* #undef HAVE_GUIDDEF_H */ /* Define if we have initguid.h */ /* #undef HAVE_INITGUID_H */ /* Define if we have GCC's __get_cpuid() */ #define HAVE_GCC_GET_CPUID /* Define if we have the __cpuid() intrinsic */ /* #undef HAVE_CPUID_INTRINSIC */ /* Define if we have the _BitScanForward64() intrinsic */ /* #undef HAVE_BITSCANFORWARD64_INTRINSIC */ /* Define if we have the _BitScanForward() intrinsic */ /* #undef HAVE_BITSCANFORWARD_INTRINSIC */ /* Define if we have pthread_setschedparam() */ #define HAVE_PTHREAD_SETSCHEDPARAM /* Define if we have pthread_setname_np() */ /* #undef HAVE_PTHREAD_SETNAME_NP */ /* Define if pthread_setname_np() only accepts one parameter */ /* #undef PTHREAD_SETNAME_NP_ONE_PARAM */ /* Define if pthread_setname_np() accepts three parameters */ /* #undef PTHREAD_SETNAME_NP_THREE_PARAMS */ /* Define if we have pthread_set_name_np() */ /* #undef HAVE_PTHREAD_SET_NAME_NP */ ================================================ FILE: project/lib/custom/openal/include/config-windows-x86.h ================================================ /* API declaration export attribute */ #define AL_API __declspec(dllexport) #define ALC_API __declspec(dllexport) // #ifndef inline // #define inline __inline // #endif #if defined(_MSC_VER) && _MSC_VER <1900 #define snprintf _snprintf #endif #include /* Define a restrict macro for non-aliased pointers */ #define RESTRICT __restrict /* Define if HRTF data is embedded in the library */ #define ALSOFT_EMBED_HRTF_DATA /* Define if we have the posix_memalign function */ /* #undef HAVE_POSIX_MEMALIGN */ /* Define if we have the _aligned_malloc function */ #define HAVE__ALIGNED_MALLOC /* Define if we have the proc_pidpath function */ /* #undef HAVE_PROC_PIDPATH */ /* Define if we have the getopt function */ /* #undef HAVE_GETOPT */ /* Define if we have SSE CPU extensions */ #define HAVE_SSE #define HAVE_SSE2 /* #undef HAVE_SSE3 */ /* #undef HAVE_SSE4_1 */ /* Define if we have ARM Neon CPU extensions */ /* #undef HAVE_NEON */ /* Define if we have the ALSA backend */ /* #undef HAVE_ALSA */ /* Define if we have the OSS backend */ /* #undef HAVE_OSS */ /* Define if we have the Solaris backend */ /* #undef HAVE_SOLARIS */ /* Define if we have the SndIO backend */ /* #undef HAVE_SNDIO */ /* Define if we have the QSA backend */ /* #undef HAVE_QSA */ /* Define if we have the WASAPI backend */ #define HAVE_WASAPI /* Define if we have the DSound backend */ #define HAVE_DSOUND /* Define if we have the Windows Multimedia backend */ #define HAVE_WINMM /* Define if we have the PortAudio backend */ /* #undef HAVE_PORTAUDIO */ /* Define if we have the PulseAudio backend */ /* #undef HAVE_PULSEAUDIO */ /* Define if we have the JACK backend */ /* #undef HAVE_JACK */ /* Define if we have the CoreAudio backend */ /* #undef HAVE_COREAUDIO */ /* Define if we have the OpenSL backend */ /* #undef HAVE_OPENSL */ /* Define if we have the Wave Writer backend */ #define HAVE_WAVE /* Define if we have the SDL2 backend */ /* #undef HAVE_SDL2 */ /* Define if we have the stat function */ #define HAVE_STAT /* Define to the size of a long int type */ #define SIZEOF_LONG 4 /* Define if we have GCC's format attribute */ /* #undef HAVE_GCC_FORMAT */ /* Define if we have dlfcn.h */ /* #undef HAVE_DLFCN_H */ /* Define if we have pthread_np.h */ /* #undef HAVE_PTHREAD_NP_H */ /* Define if we have malloc.h */ #define HAVE_MALLOC_H /* Define if we have dirent.h */ /* #undef HAVE_DIRENT_H */ /* Define if we have cpuid.h */ /* #undef HAVE_CPUID_H */ /* Define if we have intrin.h */ #define HAVE_INTRIN_H /* Define if we have sys/sysconf.h */ /* #undef HAVE_SYS_SYSCONF_H */ /* Define if we have guiddef.h */ #define HAVE_GUIDDEF_H /* Define if we have initguid.h */ /* #undef HAVE_INITGUID_H */ /* Define if we have GCC's __get_cpuid() */ /* #undef HAVE_GCC_GET_CPUID */ /* Define if we have the __cpuid() intrinsic */ #define HAVE_CPUID_INTRINSIC /* Define if we have the _BitScanForward64() intrinsic */ /* #undef HAVE_BITSCANFORWARD64_INTRINSIC */ /* Define if we have the _BitScanForward() intrinsic */ #define HAVE_BITSCANFORWARD_INTRINSIC /* Define if we have pthread_setschedparam() */ /* #undef HAVE_PTHREAD_SETSCHEDPARAM */ /* Define if we have pthread_setname_np() */ /* #undef HAVE_PTHREAD_SETNAME_NP */ /* Define if pthread_setname_np() only accepts one parameter */ /* #undef PTHREAD_SETNAME_NP_ONE_PARAM */ /* Define if pthread_setname_np() accepts three parameters */ /* #undef PTHREAD_SETNAME_NP_THREE_PARAMS */ /* Define if we have pthread_set_name_np() */ /* #undef HAVE_PTHREAD_SET_NAME_NP */ ================================================ FILE: project/lib/custom/openal/include/config-windows-x86_64.h ================================================ /* API declaration export attribute */ #define AL_API __declspec(dllexport) #define ALC_API __declspec(dllexport) /* Define a restrict macro for non-aliased pointers */ #define RESTRICT __restrict /* Define if HRTF data is embedded in the library */ #define ALSOFT_EMBED_HRTF_DATA /* Define if we have the posix_memalign function */ /* #undef HAVE_POSIX_MEMALIGN */ /* Define if we have the _aligned_malloc function */ #define HAVE__ALIGNED_MALLOC /* Define if we have the proc_pidpath function */ /* #undef HAVE_PROC_PIDPATH */ /* Define if we have the getopt function */ /* #undef HAVE_GETOPT */ /* Define if we have SSE CPU extensions */ #define HAVE_SSE #define HAVE_SSE2 /* #undef HAVE_SSE3 */ /* #undef HAVE_SSE4_1 */ /* Define if we have ARM Neon CPU extensions */ /* #undef HAVE_NEON */ /* Define if we have the ALSA backend */ /* #undef HAVE_ALSA */ /* Define if we have the OSS backend */ /* #undef HAVE_OSS */ /* Define if we have the Solaris backend */ /* #undef HAVE_SOLARIS */ /* Define if we have the SndIO backend */ /* #undef HAVE_SNDIO */ /* Define if we have the QSA backend */ /* #undef HAVE_QSA */ /* Define if we have the WASAPI backend */ #define HAVE_WASAPI /* Define if we have the DSound backend */ /* #undef HAVE_DSOUND */ /* Define if we have the Windows Multimedia backend */ #define HAVE_WINMM /* Define if we have the PortAudio backend */ /* #undef HAVE_PORTAUDIO */ /* Define if we have the PulseAudio backend */ /* #undef HAVE_PULSEAUDIO */ /* Define if we have the JACK backend */ /* #undef HAVE_JACK */ /* Define if we have the CoreAudio backend */ /* #undef HAVE_COREAUDIO */ /* Define if we have the OpenSL backend */ /* #undef HAVE_OPENSL */ /* Define if we have the Wave Writer backend */ #define HAVE_WAVE /* Define if we have the SDL2 backend */ /* #undef HAVE_SDL2 */ /* Define if we have the stat function */ #define HAVE_STAT /* Define to the size of a long int type */ #define SIZEOF_LONG 4 /* Define if we have GCC's format attribute */ /* #undef HAVE_GCC_FORMAT */ /* Define if we have dlfcn.h */ /* #undef HAVE_DLFCN_H */ /* Define if we have pthread_np.h */ /* #undef HAVE_PTHREAD_NP_H */ /* Define if we have malloc.h */ #define HAVE_MALLOC_H /* Define if we have dirent.h */ /* #undef HAVE_DIRENT_H */ /* Define if we have cpuid.h */ /* #undef HAVE_CPUID_H */ /* Define if we have intrin.h */ #define HAVE_INTRIN_H /* Define if we have sys/sysconf.h */ /* #undef HAVE_SYS_SYSCONF_H */ /* Define if we have guiddef.h */ #define HAVE_GUIDDEF_H /* Define if we have initguid.h */ /* #undef HAVE_INITGUID_H */ /* Define if we have GCC's __get_cpuid() */ /* #undef HAVE_GCC_GET_CPUID */ /* Define if we have the __cpuid() intrinsic */ #define HAVE_CPUID_INTRINSIC /* Define if we have the _BitScanForward64() intrinsic */ /* #undef HAVE_BITSCANFORWARD64_INTRINSIC */ /* Define if we have the _BitScanForward() intrinsic */ #define HAVE_BITSCANFORWARD_INTRINSIC /* Define if we have pthread_setschedparam() */ /* #undef HAVE_PTHREAD_SETSCHEDPARAM */ /* Define if we have pthread_setname_np() */ /* #undef HAVE_PTHREAD_SETNAME_NP */ /* Define if pthread_setname_np() only accepts one parameter */ /* #undef PTHREAD_SETNAME_NP_ONE_PARAM */ /* Define if pthread_setname_np() accepts three parameters */ /* #undef PTHREAD_SETNAME_NP_THREE_PARAMS */ /* Define if we have pthread_set_name_np() */ /* #undef HAVE_PTHREAD_SET_NAME_NP */ ================================================ FILE: project/lib/custom/openal/include/config.h ================================================ #if defined(HX_MACOS) && defined(HXCPP_ARM64) #include "config-macos-arm64.h" #elif defined(HX_MACOS) #include "config-macos-x86_64.h" #elif defined(HX_WINDOWS) #ifdef HXCPP_M64 #include "config-windows-x86_64.h" #else #include "config-windows-x86.h" #endif #elif defined(HX_LINUX) #include "config-linux-x86_64.h" #elif defined (HX_ANDROID) #include "config-android.h" #endif ================================================ FILE: project/lib/custom/pixman/config.h ================================================ /** Modified version of config.h, customized for OpenFL/Lime. The conditional compilation blocks allow this same file to be used across machines. Run autogen.sh to generate a new version of this file, but be warned that the new version will lack any conditional compilation blocks, making it machine-specific. (To run autogen.sh on Windows, see https://docs.microsoft.com/en-us/windows/wsl/about .) With the new version generated: 1. Compare this file to project/lib/pixman/config.h. 2. If you find a new `#define`, copy it to this file, placing it in a conditional compilation block. Use the existing blocks as a guide. 3. Update the version number(s) if they've changed. **/ /* Define if building universal (internal helper macro) */ /* #undef AC_APPLE_UNIVERSAL_BUILD */ /* Whether we have alarm() */ #ifdef HX_LINUX #define HAVE_ALARM 1 #else /* #undef HAVE_ALARM */ #endif /* Whether the compiler supports __builtin_clz */ #if defined(HX_LINUX) || defined(HX_MACOS) || defined(HX_ANDROID) #define HAVE_BUILTIN_CLZ /**/ #else /* #undef HAVE_BUILTIN_CLZ */ #endif /* Define to 1 if you have the header file. */ #ifndef HX_WINDOWS #define HAVE_DLFCN_H 1 #else /* #undef HAVE_DLFCN_H */ #endif /* Whether we have FE_DIVBYZERO */ #ifdef HX_LINUX #define HAVE_FEDIVBYZERO 1 #else /* #undef HAVE_FEDIVBYZERO */ #endif /* Whether we have feenableexcept() */ #ifdef HX_LINUX #define HAVE_FEENABLEEXCEPT 1 #else /* #undef HAVE_FEENABLEEXCEPT */ #endif /* Define to 1 if we have */ #ifndef HX_WINDOWS #define HAVE_FENV_H 1 #else /* #undef HAVE_FENV_H */ #endif /* Whether the tool chain supports __float128 */ #ifdef HX_LINUX #define HAVE_FLOAT128 /**/ #else /* #undef HAVE_FLOAT128 */ #endif /* Whether the compiler supports GCC vector extensions */ #ifdef HX_LINUX #define HAVE_GCC_VECTOR_EXTENSIONS /**/ #else /* #undef HAVE_GCC_VECTOR_EXTENSIONS */ #endif /* Define to 1 if you have the `getisax' function. */ /* #undef HAVE_GETISAX */ /* Whether we have getpagesize() */ #ifdef HX_LINUX #define HAVE_GETPAGESIZE 1 #else /* #undef HAVE_GETPAGESIZE */ #endif /* Whether we have gettimeofday() */ #ifdef HX_LINUX #define HAVE_GETTIMEOFDAY 1 #else /* #undef HAVE_GETTIMEOFDAY */ #endif /* Define to 1 if you have the header file. */ #ifndef HX_WINDOWS #define HAVE_INTTYPES_H 1 #else /* #undef HAVE_INTTYPES_H */ #endif /* Define to 1 if you have the `pixman-1' library (-lpixman-1). */ /* #undef HAVE_LIBPIXMAN_1 */ /* Whether we have libpng */ #ifdef NATIVE_TOOLKIT_HAVE_PNG #define HAVE_LIBPNG 1 #else /* #undef HAVE_LIBPNG */ #endif /* Define to 1 if you have the header file. */ #ifdef HX_LINUX #define HAVE_MEMORY_H 1 #else /* #undef HAVE_MEMORY_H */ #endif /* Whether we have mmap() */ #ifdef HX_LINUX #define HAVE_MMAP 1 #else /* #undef HAVE_MMAP */ #endif /* Whether we have mprotect() */ #ifdef HX_LINUX #define HAVE_MPROTECT 1 #else /* #undef HAVE_MPROTECT */ #endif /* Whether we have posix_memalign() */ #ifdef HX_LINUX #define HAVE_POSIX_MEMALIGN 1 #else /* #undef HAVE_POSIX_MEMALIGN */ #endif /* Whether pthreads is supported */ #ifndef HX_WINDOWS #define HAVE_PTHREADS /**/ #else /* #undef HAVE_PTHREADS */ #endif /* Whether we have sigaction() */ #ifdef HX_LINUX #define HAVE_SIGACTION 1 #else /* #undef HAVE_SIGACTION */ #endif /* Define to 1 if you have the header file. */ #ifndef HX_WINDOWS #define HAVE_STDINT_H 1 #else /* #undef HAVE_STDINT_H */ #endif /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #ifndef HX_WINDOWS #define HAVE_STRINGS_H 1 #else /* #undef HAVE_STRINGS_H */ #endif /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if we have */ #ifndef HX_WINDOWS #define HAVE_SYS_MMAN_H 1 #else /* #undef HAVE_SYS_MMAN_H */ #endif /* Define to 1 if you have the header file. */ #ifndef HX_WINDOWS #define HAVE_SYS_STAT_H 1 #else /* #undef HAVE_SYS_STAT_H */ #endif /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #ifndef HX_WINDOWS #define HAVE_UNISTD_H 1 #else /* #undef HAVE_UNISTD_H */ #endif /* Define to the sub-directory where libtool stores uninstalled libraries. */ /* #undef LT_OBJDIR */ /* Name of package */ #define PACKAGE "pixman" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "pixman@lists.freedesktop.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "pixman" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "pixman 0.42.2" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "pixman" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "0.42.2" /* enable output that can be piped to gnuplot */ /* #undef PIXMAN_GNUPLOT */ /* enable TIMER_BEGIN/TIMER_END macros */ /* #undef PIXMAN_TIMERS */ /* The size of `long', as computed by sizeof. */ #if (defined(HX_LINUX) && defined(HXCPP_M64)) || defined(HX_MACOS) #define SIZEOF_LONG 8 #else #define SIZEOF_LONG 4 #endif /* Define to 1 if you have the ANSI C header files. */ #ifndef HX_WINDOWS #define STDC_HEADERS 1 #else /* #undef STDC_HEADERS */ #endif /* The compiler supported TLS storage class */ #if !defined(HX_WINDOWS) && !defined(IPHONE) #define TLS __thread #else /* #undef TLS */ #endif /* Whether the tool chain supports __attribute__((constructor)) */ #ifdef __GNUC__ #define TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR /**/ #else /* #undef TOOLCHAIN_SUPPORTS_ATTRIBUTE_CONSTRUCTOR */ #endif /* use ARM A64_NEON assembly optimizations */ /* #undef USE_ARM_A64_NEON */ /* use ARM IWMMXT compiler intrinsics */ // #if !defined(HX_LINUX) && !defined(HX_MACOS) && !defined(HX_WINDOWS) && !defined(EMSCRIPTEN) // #define USE_ARM_IWMMXT 1 // #else /* #undef USE_ARM_IWMMXT */ // #endif /* use ARM NEON assembly optimizations */ // #if defined(HXCPP_ARMV7) || defined(HXCPP_ARMV7S) || defined(HXCPP_ARM64) // #define USE_ARM_NEON 1 // #else /* #undef USE_ARM_NEON */ // #endif /* use ARM SIMD assembly optimizations */ // #if defined(HXCPP_ARMV7) || defined(HXCPP_ARMV7S) || defined(HXCPP_ARM64) // #define USE_ARM_SIMD 1 // #else /* #undef USE_ARM_SIMD */ // #endif /* use GNU-style inline assembler */ #ifdef __GNUC__ #define USE_GCC_INLINE_ASM 1 #else /* #undef USE_GCC_INLINE_ASM */ #endif /* use Loongson Multimedia Instructions */ /* #undef USE_LOONGSON_MMI */ /* use MIPS DSPr2 assembly optimizations */ /* #undef USE_MIPS_DSPR2 */ /* use OpenMP in the test suite */ /* #undef USE_OPENMP */ /* use SSE2 compiler intrinsics */ #if defined(HX_WINDOWS) || (defined(HX_MACOS) && !defined(HXCPP_ARM64)) || (defined(HX_LINUX) && !defined(RASPBERRYPI) && !defined(HXCPP_ARM64)) #define USE_SSE2 1 #else /* #undef USE_SSE2 */ #endif /* use SSSE3 compiler intrinsics */ #if defined(HX_WINDOWS) || (defined(HX_MACOS) && !defined(HXCPP_ARM64)) || (defined(HX_LINUX) && !defined(RASPBERRYPI) && !defined(HXCPP_ARM64)) #define USE_SSE3 1 #else /* #undef USE_SSE3 */ #endif /* use VMX compiler intrinsics */ /* #undef USE_VMX */ /* use x86 MMX compiler intrinsics */ #if (defined(HX_WINDOWS) || /*defined(HX_MACOS) ||*/ (defined(HX_LINUX) && !defined(RASPBERRYPI)) ) && !defined(HXCPP_M64) #define USE_X86_MMX 1 #else /* #undef USE_X86_MMX */ #endif /* Version number of package */ #define VERSION "0.42.2" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN /* # undef WORDS_BIGENDIAN */ # endif #endif /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to sqrt if you do not have the `sqrtf' function. */ /* #undef sqrtf */ ================================================ FILE: project/lib/custom/pixman/pixman/pixman-version.h ================================================ /* * Copyright © 2008 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * * Author: Carl D. Worth */ #ifndef PIXMAN_VERSION_H__ #define PIXMAN_VERSION_H__ #ifndef PIXMAN_H__ # error pixman-version.h should only be included by pixman.h #endif #define PIXMAN_VERSION_MAJOR 0 #define PIXMAN_VERSION_MINOR 40 #define PIXMAN_VERSION_MICRO 1 #define PIXMAN_VERSION_STRING "0.40.1" #define PIXMAN_VERSION_ENCODE(major, minor, micro) ( \ ((major) * 10000) \ + ((minor) * 100) \ + ((micro) * 1)) #define PIXMAN_VERSION PIXMAN_VERSION_ENCODE( \ PIXMAN_VERSION_MAJOR, \ PIXMAN_VERSION_MINOR, \ PIXMAN_VERSION_MICRO) #ifndef PIXMAN_API # define PIXMAN_API #endif #endif /* PIXMAN_VERSION_H__ */ ================================================ FILE: project/lib/custom/png/pnglibconf.h ================================================ /* pnglibconf.h - library build configuration */ /* libpng version 1.6.37 */ /* Copyright (c) 2018-2019 Cosmin Truta */ /* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson */ /* This code is released under the libpng license. */ /* For conditions of distribution and use, see the disclaimer */ /* and license in png.h */ /* pnglibconf.h */ /* Machine generated file: DO NOT EDIT */ /* Derived from: scripts/pnglibconf.dfa */ #ifndef PNGLCONF_H #define PNGLCONF_H /* options */ #define PNG_16BIT_SUPPORTED #define PNG_ALIGNED_MEMORY_SUPPORTED /*#undef PNG_ARM_NEON_API_SUPPORTED*/ /*#undef PNG_ARM_NEON_CHECK_SUPPORTED*/ #define PNG_BENIGN_ERRORS_SUPPORTED #define PNG_BENIGN_READ_ERRORS_SUPPORTED /*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/ #define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED #define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED #define PNG_COLORSPACE_SUPPORTED #define PNG_CONSOLE_IO_SUPPORTED #define PNG_CONVERT_tIME_SUPPORTED #define PNG_EASY_ACCESS_SUPPORTED /*#undef PNG_ERROR_NUMBERS_SUPPORTED*/ #define PNG_ERROR_TEXT_SUPPORTED #define PNG_FIXED_POINT_SUPPORTED #define PNG_FLOATING_ARITHMETIC_SUPPORTED #define PNG_FLOATING_POINT_SUPPORTED #define PNG_FORMAT_AFIRST_SUPPORTED #define PNG_FORMAT_BGR_SUPPORTED #define PNG_GAMMA_SUPPORTED #define PNG_GET_PALETTE_MAX_SUPPORTED #define PNG_HANDLE_AS_UNKNOWN_SUPPORTED #define PNG_INCH_CONVERSIONS_SUPPORTED #define PNG_INFO_IMAGE_SUPPORTED #define PNG_IO_STATE_SUPPORTED #define PNG_MNG_FEATURES_SUPPORTED #define PNG_POINTER_INDEXING_SUPPORTED /*#undef PNG_POWERPC_VSX_API_SUPPORTED*/ /*#undef PNG_POWERPC_VSX_CHECK_SUPPORTED*/ #define PNG_PROGRESSIVE_READ_SUPPORTED #define PNG_READ_16BIT_SUPPORTED #define PNG_READ_ALPHA_MODE_SUPPORTED #define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED #define PNG_READ_BACKGROUND_SUPPORTED #define PNG_READ_BGR_SUPPORTED #define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED #define PNG_READ_COMPOSITE_NODIV_SUPPORTED #define PNG_READ_COMPRESSED_TEXT_SUPPORTED #define PNG_READ_EXPAND_16_SUPPORTED #define PNG_READ_EXPAND_SUPPORTED #define PNG_READ_FILLER_SUPPORTED #define PNG_READ_GAMMA_SUPPORTED #define PNG_READ_GET_PALETTE_MAX_SUPPORTED #define PNG_READ_GRAY_TO_RGB_SUPPORTED #define PNG_READ_INTERLACING_SUPPORTED #define PNG_READ_INT_FUNCTIONS_SUPPORTED #define PNG_READ_INVERT_ALPHA_SUPPORTED #define PNG_READ_INVERT_SUPPORTED #define PNG_READ_OPT_PLTE_SUPPORTED #define PNG_READ_PACKSWAP_SUPPORTED #define PNG_READ_PACK_SUPPORTED #define PNG_READ_QUANTIZE_SUPPORTED #define PNG_READ_RGB_TO_GRAY_SUPPORTED #define PNG_READ_SCALE_16_TO_8_SUPPORTED #define PNG_READ_SHIFT_SUPPORTED #define PNG_READ_STRIP_16_TO_8_SUPPORTED #define PNG_READ_STRIP_ALPHA_SUPPORTED #define PNG_READ_SUPPORTED #define PNG_READ_SWAP_ALPHA_SUPPORTED #define PNG_READ_SWAP_SUPPORTED #define PNG_READ_TEXT_SUPPORTED #define PNG_READ_TRANSFORMS_SUPPORTED #define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED #define PNG_READ_USER_CHUNKS_SUPPORTED #define PNG_READ_USER_TRANSFORM_SUPPORTED #define PNG_READ_bKGD_SUPPORTED #define PNG_READ_cHRM_SUPPORTED #define PNG_READ_eXIf_SUPPORTED #define PNG_READ_gAMA_SUPPORTED #define PNG_READ_hIST_SUPPORTED #define PNG_READ_iCCP_SUPPORTED #define PNG_READ_iTXt_SUPPORTED #define PNG_READ_oFFs_SUPPORTED #define PNG_READ_pCAL_SUPPORTED #define PNG_READ_pHYs_SUPPORTED #define PNG_READ_sBIT_SUPPORTED #define PNG_READ_sCAL_SUPPORTED #define PNG_READ_sPLT_SUPPORTED #define PNG_READ_sRGB_SUPPORTED #define PNG_READ_tEXt_SUPPORTED #define PNG_READ_tIME_SUPPORTED #define PNG_READ_tRNS_SUPPORTED #define PNG_READ_zTXt_SUPPORTED #define PNG_SAVE_INT_32_SUPPORTED #define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED #define PNG_SEQUENTIAL_READ_SUPPORTED #define PNG_SETJMP_SUPPORTED #define PNG_SET_OPTION_SUPPORTED #define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED #define PNG_SET_USER_LIMITS_SUPPORTED #define PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED #define PNG_SIMPLIFIED_READ_BGR_SUPPORTED #define PNG_SIMPLIFIED_READ_SUPPORTED #define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED #define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED #define PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED #define PNG_SIMPLIFIED_WRITE_SUPPORTED #define PNG_STDIO_SUPPORTED #define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED #define PNG_TEXT_SUPPORTED #define PNG_TIME_RFC1123_SUPPORTED #define PNG_UNKNOWN_CHUNKS_SUPPORTED #define PNG_USER_CHUNKS_SUPPORTED #define PNG_USER_LIMITS_SUPPORTED #define PNG_USER_MEM_SUPPORTED #define PNG_USER_TRANSFORM_INFO_SUPPORTED #define PNG_USER_TRANSFORM_PTR_SUPPORTED /*#undef PNG_WARNINGS_SUPPORTED*/ #define PNG_WRITE_16BIT_SUPPORTED #define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED #define PNG_WRITE_BGR_SUPPORTED #define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED #define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED #define PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED #define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED #define PNG_WRITE_FILLER_SUPPORTED #define PNG_WRITE_FILTER_SUPPORTED #define PNG_WRITE_FLUSH_SUPPORTED #define PNG_WRITE_GET_PALETTE_MAX_SUPPORTED #define PNG_WRITE_INTERLACING_SUPPORTED #define PNG_WRITE_INT_FUNCTIONS_SUPPORTED #define PNG_WRITE_INVERT_ALPHA_SUPPORTED #define PNG_WRITE_INVERT_SUPPORTED #define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED #define PNG_WRITE_PACKSWAP_SUPPORTED #define PNG_WRITE_PACK_SUPPORTED #define PNG_WRITE_SHIFT_SUPPORTED #define PNG_WRITE_SUPPORTED #define PNG_WRITE_SWAP_ALPHA_SUPPORTED #define PNG_WRITE_SWAP_SUPPORTED #define PNG_WRITE_TEXT_SUPPORTED #define PNG_WRITE_TRANSFORMS_SUPPORTED #define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED #define PNG_WRITE_USER_TRANSFORM_SUPPORTED #define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED #define PNG_WRITE_bKGD_SUPPORTED #define PNG_WRITE_cHRM_SUPPORTED #define PNG_WRITE_eXIf_SUPPORTED #define PNG_WRITE_gAMA_SUPPORTED #define PNG_WRITE_hIST_SUPPORTED #define PNG_WRITE_iCCP_SUPPORTED #define PNG_WRITE_iTXt_SUPPORTED #define PNG_WRITE_oFFs_SUPPORTED #define PNG_WRITE_pCAL_SUPPORTED #define PNG_WRITE_pHYs_SUPPORTED #define PNG_WRITE_sBIT_SUPPORTED #define PNG_WRITE_sCAL_SUPPORTED #define PNG_WRITE_sPLT_SUPPORTED #define PNG_WRITE_sRGB_SUPPORTED #define PNG_WRITE_tEXt_SUPPORTED #define PNG_WRITE_tIME_SUPPORTED #define PNG_WRITE_tRNS_SUPPORTED #define PNG_WRITE_zTXt_SUPPORTED #define PNG_bKGD_SUPPORTED #define PNG_cHRM_SUPPORTED #define PNG_eXIf_SUPPORTED #define PNG_gAMA_SUPPORTED #define PNG_hIST_SUPPORTED #define PNG_iCCP_SUPPORTED #define PNG_iTXt_SUPPORTED #define PNG_oFFs_SUPPORTED #define PNG_pCAL_SUPPORTED #define PNG_pHYs_SUPPORTED #define PNG_sBIT_SUPPORTED #define PNG_sCAL_SUPPORTED #define PNG_sPLT_SUPPORTED #define PNG_sRGB_SUPPORTED #define PNG_tEXt_SUPPORTED #define PNG_tIME_SUPPORTED #define PNG_tRNS_SUPPORTED #define PNG_zTXt_SUPPORTED /* end of options */ /* settings */ #define PNG_API_RULE 0 #define PNG_COST_SHIFT 3 #define PNG_DEFAULT_READ_MACROS 1 #define PNG_GAMMA_THRESHOLD_FIXED 5000 #define PNG_IDAT_READ_SIZE PNG_ZBUF_SIZE #define PNG_INFLATE_BUF_SIZE 1024 #define PNG_LINKAGE_API extern #define PNG_LINKAGE_CALLBACK extern #define PNG_LINKAGE_DATA extern #define PNG_LINKAGE_FUNCTION extern #define PNG_MAX_GAMMA_8 11 #define PNG_QUANTIZE_BLUE_BITS 5 #define PNG_QUANTIZE_GREEN_BITS 5 #define PNG_QUANTIZE_RED_BITS 5 #define PNG_TEXT_Z_DEFAULT_COMPRESSION (-1) #define PNG_TEXT_Z_DEFAULT_STRATEGY 0 #define PNG_USER_CHUNK_CACHE_MAX 1000 #define PNG_USER_CHUNK_MALLOC_MAX 8000000 #define PNG_USER_HEIGHT_MAX 1000000 #define PNG_USER_WIDTH_MAX 1000000 #define PNG_WEIGHT_SHIFT 8 #define PNG_ZBUF_SIZE 8192 #define PNG_ZLIB_VERNUM 0 /* unknown */ #define PNG_Z_DEFAULT_COMPRESSION (-1) #define PNG_Z_DEFAULT_NOFILTER_STRATEGY 0 #define PNG_Z_DEFAULT_STRATEGY 1 #define PNG_sCAL_PRECISION 5 #define PNG_sRGB_PROFILE_CHECKS 2 /* end of settings */ #ifdef HX_WINRT /* Prevent pngpriv.h from attempting to reference EndProcess */ #define PNG_ABORT() abort() #endif /* HX_WINRT */ #endif /* PNGLCONF_H */ ================================================ FILE: project/lib/custom/sdl/include/SDL2/SDL.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2020 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /** * \file SDL.h * * Main include header for the SDL library */ #ifndef SDL_h_ #define SDL_h_ #include "SDL_main.h" #include "SDL_stdinc.h" #include "SDL_assert.h" #include "SDL_atomic.h" #include "SDL_audio.h" #include "SDL_clipboard.h" #include "SDL_cpuinfo.h" #include "SDL_endian.h" #include "SDL_error.h" #include "SDL_events.h" #include "SDL_filesystem.h" #include "SDL_gamecontroller.h" #include "SDL_haptic.h" #include "SDL_hints.h" #include "SDL_joystick.h" #include "SDL_loadso.h" #include "SDL_log.h" #include "SDL_messagebox.h" #include "SDL_metal.h" #include "SDL_mutex.h" #include "SDL_power.h" #include "SDL_render.h" #include "SDL_rwops.h" #include "SDL_sensor.h" #include "SDL_shape.h" #include "SDL_system.h" #include "SDL_thread.h" #include "SDL_timer.h" #include "SDL_version.h" #include "SDL_video.h" #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif /* As of version 0.5, SDL is loaded dynamically into the application */ /** * \name SDL_INIT_* * * These are the flags which may be passed to SDL_Init(). You should * specify the subsystems which you will be using in your application. */ /* @{ */ #define SDL_INIT_TIMER 0x00000001u #define SDL_INIT_AUDIO 0x00000010u #define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ #define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ #define SDL_INIT_HAPTIC 0x00001000u #define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ #define SDL_INIT_EVENTS 0x00004000u #define SDL_INIT_SENSOR 0x00008000u #define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */ #define SDL_INIT_EVERYTHING ( \ SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \ ) /* @} */ /** * This function initializes the subsystems specified by \c flags */ extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); /** * This function initializes specific SDL subsystems * * Subsystem initialization is ref-counted, you must call * SDL_QuitSubSystem() for each SDL_InitSubSystem() to correctly * shutdown a subsystem manually (or call SDL_Quit() to force shutdown). * If a subsystem is already loaded then this call will * increase the ref-count and return. */ extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); /** * This function cleans up specific SDL subsystems */ extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); /** * This function returns a mask of the specified subsystems which have * previously been initialized. * * If \c flags is 0, it returns a mask of all initialized subsystems. */ extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); /** * This function cleans up all initialized subsystems. You should * call it upon all exit conditions. */ extern DECLSPEC void SDLCALL SDL_Quit(void); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #include "close_code.h" #endif /* SDL_h_ */ /* vi: set ts=4 sw=4 expandtab: */ ================================================ FILE: project/lib/custom/sdl/include/SDL_config.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2020 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_config_h_ #define SDL_config_h_ #include "SDL_platform.h" /** * \file SDL_config.h */ /* Add any platform that doesn't build using the configure system. */ #if defined(__WIN32__) #include "SDL_config_windows.h" #elif defined(__WINRT__) #include "SDL_config_winrt.h" #elif defined(__MACOSX__) #include "SDL_config_macosx.h" #elif defined(__IPHONEOS__) #include "SDL_config_iphoneos.h" #elif defined(__ANDROID__) #include "SDL_config_android.h" #elif defined(__OS2__) #include "SDL_config_os2.h" #elif defined(__EMSCRIPTEN__) #include "SDL_config_emscripten.h" #elif defined(__NGAGE__) #include "SDL_config_ngage.h" #elif defined(RASPBERRYPI) #include "SDL_config_rpi.h" #elif defined(HX_LINUX) #include "SDL_config_linux.h" #else /* This is a minimal configuration just to get SDL running on new platforms. */ #include "SDL_config_minimal.h" #endif /* platform config */ #endif /* SDL_config_h_ */ ================================================ FILE: project/lib/custom/sdl/include/SDL_config_linux.h ================================================ /* include/SDL_config.h. Generated from SDL_config.h.in by configure. */ /* Simple DirectMedia Layer Copyright (C) 1997-2020 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_config_linux_h_ #define SDL_config_linux_h_ #ifdef HX_LINUX /* General platform specific identifiers */ #include "SDL_platform.h" /* Make sure that this isn't included by Visual C++ */ #ifdef _MSC_VER #error You should run hg revert SDL_config.h #endif /* C language features */ /* #undef const */ /* #undef inline */ /* #undef volatile */ /* C datatypes */ #ifdef __LP64__ #define SIZEOF_VOIDP 8 #else #define SIZEOF_VOIDP 4 #endif #define HAVE_GCC_ATOMICS 1 /* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */ #define HAVE_PTHREAD_SPINLOCK 1 /* Comment this if you want to build without any C library requirements */ #define HAVE_LIBC 1 #if HAVE_LIBC #define HAVE_INOTIFY 1 /* Useful headers */ #define HAVE_ALLOCA_H 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_STDIO_H 1 #define STDC_HEADERS 1 #define HAVE_STDLIB_H 1 #define HAVE_STDARG_H 1 #define HAVE_MALLOC_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STRING_H 1 #define HAVE_STRINGS_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 #define HAVE_CTYPE_H 1 #define HAVE_MATH_H 1 #define HAVE_ICONV_H 1 #define HAVE_SIGNAL_H 1 /* #undef HAVE_ALTIVEC_H */ /* #undef HAVE_PTHREAD_NP_H */ /* #undef HAVE_LIBUDEV_H */ /* #undef HAVE_DBUS_DBUS_H */ /* C library functions */ #define HAVE_MALLOC 1 #define HAVE_CALLOC 1 #define HAVE_REALLOC 1 #define HAVE_FREE 1 #define HAVE_ALLOCA 1 #define HAVE_GETENV 1 #define HAVE_SETENV 1 #define HAVE_PUTENV 1 #define HAVE_UNSETENV 1 #define HAVE_QSORT 1 #define HAVE_ABS 1 #define HAVE_BCOPY 1 #define HAVE_MEMSET 1 #define HAVE_MEMCPY 1 #define HAVE_MEMMOVE 1 #define HAVE_MEMCMP 1 #define HAVE_STRLEN 1 /* #undef HAVE_STRLCPY */ /* #undef HAVE_STRLCAT */ #define HAVE_STRCHR 1 #define HAVE_STRRCHR 1 #define HAVE_STRSTR 1 #define HAVE_STRTOL 1 #define HAVE_STRTOUL 1 #define HAVE_STRTOLL 1 #define HAVE_STRTOULL 1 #define HAVE_STRTOD 1 #define HAVE_ATOI 1 #define HAVE_ATOF 1 #define HAVE_STRCMP 1 #define HAVE_STRNCMP 1 #define HAVE_STRCASECMP 1 #define HAVE_STRNCASECMP 1 #define HAVE_VSSCANF 1 #define HAVE_VSNPRINTF 1 #define HAVE_M_PI 1 #define HAVE_ACOS 1 #define HAVE_ACOSF 1 #define HAVE_ASIN 1 #define HAVE_ASINF 1 #define HAVE_ATAN 1 #define HAVE_ATANF 1 #define HAVE_ATAN2 1 #define HAVE_ATAN2F 1 #define HAVE_CEIL 1 #define HAVE_CEILF 1 #define HAVE_COPYSIGN 1 #define HAVE_COPYSIGNF 1 #define HAVE_COS 1 #define HAVE_COSF 1 #define HAVE_EXP 1 #define HAVE_EXPF 1 #define HAVE_FABS 1 #define HAVE_FABSF 1 #define HAVE_FLOOR 1 #define HAVE_FLOORF 1 #define HAVE_FMOD 1 #define HAVE_FMODF 1 #define HAVE_LOG 1 #define HAVE_LOGF 1 #define HAVE_LOG10 1 #define HAVE_LOG10F 1 #define HAVE_POW 1 #define HAVE_POWF 1 #define HAVE_SCALBN 1 #define HAVE_SCALBNF 1 #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 #define HAVE_SQRTF 1 #define HAVE_TAN 1 #define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 #define HAVE_SYSCONF 1 /* #undef HAVE_SYSCTLBYNAME */ #else #define HAVE_STDARG_H 1 #define HAVE_STDDEF_H 1 #define HAVE_STDINT_H 1 #endif /* HAVE_LIBC */ /* SDL internal assertion support */ /* #undef SDL_DEFAULT_ASSERT_LEVEL */ /* Allow disabling of core subsystems */ /* #undef SDL_ATOMIC_DISABLED */ /* #undef SDL_AUDIO_DISABLED */ /* #undef SDL_CPUINFO_DISABLED */ /* #undef SDL_EVENTS_DISABLED */ /* #undef SDL_FILE_DISABLED */ /* #undef SDL_JOYSTICK_DISABLED */ /* #undef SDL_HAPTIC_DISABLED */ /* #undef SDL_LOADSO_DISABLED */ /* #undef SDL_RENDER_DISABLED */ /* #undef SDL_THREADS_DISABLED */ /* #undef SDL_TIMERS_DISABLED */ /* #undef SDL_VIDEO_DISABLED */ /* #undef SDL_POWER_DISABLED */ /* #undef SDL_FILESYSTEM_DISABLED */ /* Enable various audio drivers */ #define SDL_AUDIO_DRIVER_ALSA 1 #define SDL_AUDIO_DRIVER_ALSA_DYNAMIC "libasound.so.2" /* #undef SDL_AUDIO_DRIVER_ARTS */ /* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */ #define SDL_AUDIO_DRIVER_PULSEAUDIO 1 #define SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC "libpulse.so.0" /* #undef SDL_AUDIO_DRIVER_HAIKU */ /* #undef SDL_AUDIO_DRIVER_BSD */ /* #undef SDL_AUDIO_DRIVER_COREAUDIO */ #define SDL_AUDIO_DRIVER_DISK 1 #define SDL_AUDIO_DRIVER_DUMMY 1 /* #undef SDL_AUDIO_DRIVER_XAUDIO2 */ /* #undef SDL_AUDIO_DRIVER_DSOUND */ /* #undef SDL_AUDIO_DRIVER_ESD */ /* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_NAS */ /* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_SNDIO */ /* #undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */ #define SDL_AUDIO_DRIVER_OSS 1 /* #undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H */ /* #undef SDL_AUDIO_DRIVER_PAUDIO */ /* #undef SDL_AUDIO_DRIVER_QSA */ /* #undef SDL_AUDIO_DRIVER_SUNAUDIO */ /* #undef SDL_AUDIO_DRIVER_WINMM */ /* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */ /* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */ /* Enable various input drivers */ #define SDL_INPUT_LINUXEV 1 #define SDL_INPUT_LINUXKD 1 /* #undef SDL_INPUT_TSLIB */ /* #undef SDL_JOYSTICK_HAIKU */ /* #undef SDL_JOYSTICK_DINPUT */ /* #undef SDL_JOYSTICK_DUMMY */ /* #undef SDL_JOYSTICK_IOKIT */ #define SDL_JOYSTICK_LINUX 1 /* #undef SDL_JOYSTICK_HIDAPI */ /* #undef SDL_JOYSTICK_WINMM */ /* #undef SDL_JOYSTICK_USBHID */ /* #undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H */ /* #undef SDL_HAPTIC_DUMMY */ #define SDL_HAPTIC_LINUX 1 /* #undef SDL_HAPTIC_IOKIT */ /* #undef SDL_HAPTIC_DINPUT */ /* Enable the dummy sensor driver */ #define SDL_SENSOR_DUMMY 1 /* Enable various shared object loading systems */ /* #undef SDL_LOADSO_HAIKU */ #define SDL_LOADSO_DLOPEN 1 /* #undef SDL_LOADSO_DUMMY */ /* #undef SDL_LOADSO_LDG */ /* #undef SDL_LOADSO_WINDOWS */ /* Enable various threading systems */ #define SDL_THREAD_PTHREAD 1 #define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 /* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */ /* #undef SDL_THREAD_WINDOWS */ /* Enable various timer systems */ /* #undef SDL_TIMER_HAIKU */ /* #undef SDL_TIMER_DUMMY */ #define SDL_TIMER_UNIX 1 /* #undef SDL_TIMER_WINDOWS */ /* Enable various video drivers */ /* #undef SDL_VIDEO_DRIVER_HAIKU */ /* #undef SDL_VIDEO_DRIVER_COCOA */ /* #undef SDL_VIDEO_DRIVER_DIRECTFB */ /* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */ #define SDL_VIDEO_DRIVER_DUMMY 1 /* #undef SDL_VIDEO_DRIVER_WINDOWS */ /* #undef SDL_VIDEO_DRIVER_WAYLAND */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON */ /* #undef SDL_VIDEO_DRIVER_MIR */ /* #undef SDL_VIDEO_DRIVER_MIR_DYNAMIC */ /* #undef SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON */ #define SDL_VIDEO_DRIVER_X11 1 /* #undef SDL_VIDEO_DRIVER_RPI */ #define SDL_VIDEO_DRIVER_X11_DYNAMIC "libX11.so.6" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "libXext.so.6" /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR */ #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "libXinerama.so.1" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "libXi.so.6" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "libxrandr.so.2" /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS */ /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE */ /* #undef SDL_VIDEO_DRIVER_X11_XCURSOR */ #define SDL_VIDEO_DRIVER_X11_XINERAMA 1 #define SDL_VIDEO_DRIVER_X11_XINPUT2 NATIVE_TOOLKIT_SDL_X11_XINPUT2 #define SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH NATIVE_TOOLKIT_SDL_X11_XINPUT2_SUPPORTS_MULTITOUCH #define SDL_VIDEO_DRIVER_X11_XRANDR 1 /* #undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER */ #define SDL_VIDEO_DRIVER_X11_XSHAPE 1 /* #undef SDL_VIDEO_DRIVER_X11_XVIDMODE */ #define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1 /* #undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 */ /* #undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY */ #define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1 /* #undef SDL_VIDEO_RENDER_D3D */ /* #undef SDL_VIDEO_RENDER_D3D11 */ #define SDL_VIDEO_RENDER_OGL 1 /* #undef SDL_VIDEO_RENDER_OGL_ES */ /* #undef SDL_VIDEO_RENDER_OGL_ES2 */ /* #undef SDL_VIDEO_RENDER_DIRECTFB */ /* Enable OpenGL support */ #define SDL_VIDEO_OPENGL 1 /* #undef SDL_VIDEO_OPENGL_ES */ /* #undef SDL_VIDEO_OPENGL_ES2 */ /* #undef SDL_VIDEO_OPENGL_BGL */ /* #undef SDL_VIDEO_OPENGL_CGL */ /* #undef SDL_VIDEO_OPENGL_EGL */ #define SDL_VIDEO_OPENGL_GLX 1 /* #undef SDL_VIDEO_OPENGL_WGL */ /* #undef SDL_VIDEO_OPENGL_OSMESA */ /* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */ /* Enable system power support */ #define SDL_POWER_LINUX 1 /* #undef SDL_POWER_WINDOWS */ /* #undef SDL_POWER_MACOSX */ /* #undef SDL_POWER_HAIKU */ /* #undef SDL_POWER_HARDWIRED */ /* Enable system filesystem support */ /* #undef SDL_FILESYSTEM_HAIKU */ /* #undef SDL_FILESYSTEM_COCOA */ /* #undef SDL_FILESYSTEM_DUMMY */ #define SDL_FILESYSTEM_UNIX 1 /* #undef SDL_FILESYSTEM_WINDOWS */ /* Enable assembly routines */ #define SDL_ASSEMBLY_ROUTINES 1 /* #undef SDL_ALTIVEC_BLITTERS */ #endif //HX_LINUX #endif /* SDL_config_linux_h_ */ ================================================ FILE: project/lib/custom/sdl/include/SDL_config_macosx.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2020 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_config_macosx_h_ #define SDL_config_macosx_h_ #define SDL_config_h_ #include "SDL_platform.h" /* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */ #include /* This is a set of defines to configure the SDL features */ #ifdef __LP64__ #define SIZEOF_VOIDP 8 #else #define SIZEOF_VOIDP 4 #endif /* Useful headers */ #define STDC_HEADERS 1 #define HAVE_ALLOCA_H 1 #define HAVE_CTYPE_H 1 #define HAVE_FLOAT_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_LIMITS_H 1 #define HAVE_MATH_H 1 #define HAVE_SIGNAL_H 1 #define HAVE_STDINT_H 1 #define HAVE_STDIO_H 1 #define HAVE_STRING_H 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_LIBUNWIND_H 1 /* C library functions */ #define HAVE_MALLOC 1 #define HAVE_CALLOC 1 #define HAVE_REALLOC 1 #define HAVE_FREE 1 #define HAVE_ALLOCA 1 #define HAVE_GETENV 1 #define HAVE_SETENV 1 #define HAVE_PUTENV 1 #define HAVE_UNSETENV 1 #define HAVE_QSORT 1 #define HAVE_ABS 1 #define HAVE_BCOPY 1 #define HAVE_MEMSET 1 #define HAVE_MEMCPY 1 #define HAVE_MEMMOVE 1 #define HAVE_MEMCMP 1 #define HAVE_STRLEN 1 #define HAVE_STRLCPY 1 #define HAVE_STRLCAT 1 #define HAVE_STRCHR 1 #define HAVE_STRRCHR 1 #define HAVE_STRSTR 1 #define HAVE_STRTOK_R 1 #define HAVE_STRTOL 1 #define HAVE_STRTOUL 1 #define HAVE_STRTOLL 1 #define HAVE_STRTOULL 1 #define HAVE_STRTOD 1 #define HAVE_ATOI 1 #define HAVE_ATOF 1 #define HAVE_STRCMP 1 #define HAVE_STRNCMP 1 #define HAVE_STRCASECMP 1 #define HAVE_STRNCASECMP 1 #define HAVE_VSSCANF 1 #define HAVE_VSNPRINTF 1 #define HAVE_M_PI 1 #define HAVE_ACOS 1 #define HAVE_ACOSF 1 #define HAVE_ASIN 1 #define HAVE_ASINF 1 #define HAVE_ATAN 1 #define HAVE_ATANF 1 #define HAVE_ATAN2 1 #define HAVE_ATAN2F 1 #define HAVE_CEIL 1 #define HAVE_CEILF 1 #define HAVE_COPYSIGN 1 #define HAVE_COPYSIGNF 1 #define HAVE_COS 1 #define HAVE_COSF 1 #define HAVE_EXP 1 #define HAVE_EXPF 1 #define HAVE_FABS 1 #define HAVE_FABSF 1 #define HAVE_FLOOR 1 #define HAVE_FLOORF 1 #define HAVE_FMOD 1 #define HAVE_FMODF 1 #define HAVE_LOG 1 #define HAVE_LOGF 1 #define HAVE_LOG10 1 #define HAVE_LOG10F 1 #define HAVE_POW 1 #define HAVE_POWF 1 #define HAVE_SCALBN 1 #define HAVE_SCALBNF 1 #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 #define HAVE_SQRTF 1 #define HAVE_TAN 1 #define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 #define HAVE_SYSCONF 1 #define HAVE_SYSCTLBYNAME 1 #define HAVE_GCC_ATOMICS 1 /* Enable various audio drivers */ #define SDL_AUDIO_DRIVER_COREAUDIO 1 #define SDL_AUDIO_DRIVER_DISK 1 #define SDL_AUDIO_DRIVER_DUMMY 1 /* Enable various input drivers */ #define SDL_JOYSTICK_IOKIT 1 #define SDL_JOYSTICK_HIDAPI 1 #define SDL_HAPTIC_IOKIT 1 /* Enable the dummy sensor driver */ #define SDL_SENSOR_DUMMY 1 /* Enable various shared object loading systems */ #define SDL_LOADSO_DLOPEN 1 /* Enable various threading systems */ #define SDL_THREAD_PTHREAD 1 #define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 /* Enable various timer systems */ #define SDL_TIMER_UNIX 1 /* Enable various video drivers */ #define SDL_VIDEO_DRIVER_COCOA 1 #define SDL_VIDEO_DRIVER_DUMMY 1 #undef SDL_VIDEO_DRIVER_X11 #define SDL_VIDEO_DRIVER_X11_DYNAMIC "/opt/X11/lib/libX11.6.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "/opt/X11/lib/libXext.6.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "/opt/X11/lib/libXinerama.1.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "/opt/X11/lib/libXi.6.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/opt/X11/lib/libXrandr.2.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/opt/X11/lib/libXss.1.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "/opt/X11/lib/libXxf86vm.1.dylib" #define SDL_VIDEO_DRIVER_X11_XDBE 1 #define SDL_VIDEO_DRIVER_X11_XINERAMA 1 #define SDL_VIDEO_DRIVER_X11_XRANDR 1 #define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1 #define SDL_VIDEO_DRIVER_X11_XSHAPE 1 #define SDL_VIDEO_DRIVER_X11_XVIDMODE 1 #define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1 #ifdef MAC_OS_X_VERSION_10_8 /* * No matter the versions targeted, this is the 10.8 or later SDK, so you have * to use the external Xquartz, which is a more modern Xlib. Previous SDKs * used an older Xlib. */ #define SDL_VIDEO_DRIVER_X11_XINPUT2 1 #define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1 #define SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1 #endif #ifndef SDL_VIDEO_RENDER_OGL #define SDL_VIDEO_RENDER_OGL 1 #endif #ifndef SDL_VIDEO_RENDER_OGL_ES2 #define SDL_VIDEO_RENDER_OGL_ES2 0 #endif #ifndef SDL_VIDEO_RENDER_METAL /* Metal only supported on 64-bit architectures with 10.11+ */ #if TARGET_CPU_X86_64 && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100) // #define SDL_VIDEO_RENDER_METAL 1 #else #define SDL_VIDEO_RENDER_METAL 0 #endif #endif /* Enable OpenGL support */ #ifndef SDL_VIDEO_OPENGL #define SDL_VIDEO_OPENGL 1 #endif #ifndef SDL_VIDEO_OPENGL_ES2 #define SDL_VIDEO_OPENGL_ES2 1 #endif #ifndef SDL_VIDEO_OPENGL_EGL #define SDL_VIDEO_OPENGL_EGL 1 #endif #ifndef SDL_VIDEO_OPENGL_CGL #define SDL_VIDEO_OPENGL_CGL 1 #endif #ifndef SDL_VIDEO_OPENGL_GLX #define SDL_VIDEO_OPENGL_GLX 1 #endif /* Enable Vulkan support */ /* Metal/MoltenVK/Vulkan only supported on 64-bit architectures with 10.11+ */ #if TARGET_CPU_X86_64 && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100) // #define SDL_VIDEO_VULKAN 1 #else #define SDL_VIDEO_VULKAN 0 #endif /* Enable system power support */ #define SDL_POWER_MACOSX 1 /* enable filesystem support */ #define SDL_FILESYSTEM_COCOA 1 /* Enable assembly routines */ #define SDL_ASSEMBLY_ROUTINES 1 #ifdef __ppc__ #define SDL_ALTIVEC_BLITTERS 1 #endif #endif /* SDL_config_macosx_h_ */ ================================================ FILE: project/lib/custom/sdl/include/SDL_config_rpi.h ================================================ /* include/SDL_config.h. Generated from SDL_config.h.in by configure. */ /* Simple DirectMedia Layer Copyright (C) 1997-2020 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_config_rpi_h_ #define SDL_config_rpi_h_ #ifdef RASPBERRYPI /* General platform specific identifiers */ #include "SDL_platform.h" /* Make sure that this isn't included by Visual C++ */ #ifdef _MSC_VER #error You should run git checkout -f include/SDL_config.h #endif /* C language features */ /* #undef const */ /* #undef inline */ /* #undef volatile */ /* C datatypes */ #if defined(__LP64__) || defined(_LP64) || defined(_WIN64) #define SIZEOF_VOIDP 8 #else #define SIZEOF_VOIDP 4 #endif #define HAVE_GCC_ATOMICS 1 /* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */ /* Comment this if you want to build without any C library requirements */ #define HAVE_LIBC 1 #if HAVE_LIBC /* Useful headers */ #define STDC_HEADERS 1 #define HAVE_ALLOCA_H 1 #define HAVE_CTYPE_H 1 #define HAVE_FLOAT_H 1 #define HAVE_ICONV_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_LIMITS_H 1 #define HAVE_MALLOC_H 1 #define HAVE_MATH_H 1 #define HAVE_MEMORY_H 1 #define HAVE_SIGNAL_H 1 #define HAVE_STDARG_H 1 #define HAVE_STDINT_H 1 #define HAVE_STDIO_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRINGS_H 1 #define HAVE_STRING_H 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_WCHAR_H 1 /* #undef HAVE_PTHREAD_NP_H */ /* #undef HAVE_LIBUNWIND_H */ /* C library functions */ #define HAVE_DLOPEN 1 #define HAVE_MALLOC 1 #define HAVE_CALLOC 1 #define HAVE_REALLOC 1 #define HAVE_FREE 1 #define HAVE_ALLOCA 1 #ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */ #define HAVE_GETENV 1 #define HAVE_SETENV 1 #define HAVE_PUTENV 1 #define HAVE_UNSETENV 1 #endif #define HAVE_QSORT 1 #define HAVE_ABS 1 #define HAVE_BCOPY 1 #define HAVE_MEMSET 1 #define HAVE_MEMCPY 1 #define HAVE_MEMMOVE 1 #define HAVE_MEMCMP 1 #define HAVE_WCSLEN 1 /* #undef HAVE_WCSLCPY */ /* #undef HAVE_WCSLCAT */ /* #undef HAVE__WCSDUP */ #define HAVE_WCSDUP 1 #define HAVE_WCSSTR 1 #define HAVE_WCSCMP 1 #define HAVE_WCSNCMP 1 #define HAVE_WCSCASECMP 1 /* #undef HAVE__WCSICMP */ #define HAVE_WCSNCASECMP 1 /* #undef HAVE__WCSNICMP */ #define HAVE_STRLEN 1 /* #undef HAVE_STRLCPY */ /* #undef HAVE_STRLCAT */ /* #undef HAVE__STRREV */ /* #undef HAVE__STRUPR */ /* #undef HAVE__STRLWR */ #define HAVE_INDEX 1 #define HAVE_RINDEX 1 #define HAVE_STRCHR 1 #define HAVE_STRRCHR 1 #define HAVE_STRSTR 1 #define HAVE_STRTOK_R 1 /* #undef HAVE_ITOA */ /* #undef HAVE__LTOA */ /* #undef HAVE__UITOA */ /* #undef HAVE__ULTOA */ #define HAVE_STRTOL 1 #define HAVE_STRTOUL 1 /* #undef HAVE__I64TOA */ /* #undef HAVE__UI64TOA */ #define HAVE_STRTOLL 1 #define HAVE_STRTOULL 1 #define HAVE_STRTOD 1 #define HAVE_ATOI 1 #define HAVE_ATOF 1 #define HAVE_STRCMP 1 #define HAVE_STRNCMP 1 /* #undef HAVE__STRICMP */ #define HAVE_STRCASECMP 1 /* #undef HAVE__STRNICMP */ #define HAVE_STRNCASECMP 1 /* #undef HAVE_SSCANF */ #define HAVE_VSSCANF 1 /* #undef HAVE_SNPRINTF */ #define HAVE_VSNPRINTF 1 #define HAVE_M_PI /**/ #define HAVE_ACOS 1 #define HAVE_ACOSF 1 #define HAVE_ASIN 1 #define HAVE_ASINF 1 #define HAVE_ATAN 1 #define HAVE_ATANF 1 #define HAVE_ATAN2 1 #define HAVE_ATAN2F 1 #define HAVE_CEIL 1 #define HAVE_CEILF 1 #define HAVE_COPYSIGN 1 #define HAVE_COPYSIGNF 1 #define HAVE_COS 1 #define HAVE_COSF 1 #define HAVE_EXP 1 #define HAVE_EXPF 1 #define HAVE_FABS 1 #define HAVE_FABSF 1 #define HAVE_FLOOR 1 #define HAVE_FLOORF 1 #define HAVE_FMOD 1 #define HAVE_FMODF 1 #define HAVE_LOG 1 #define HAVE_LOGF 1 #define HAVE_LOG10 1 #define HAVE_LOG10F 1 #define HAVE_LROUND 1 #define HAVE_LROUNDF 1 #define HAVE_POW 1 #define HAVE_POWF 1 #define HAVE_ROUND 1 #define HAVE_ROUNDF 1 #define HAVE_SCALBN 1 #define HAVE_SCALBNF 1 #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 #define HAVE_SQRTF 1 #define HAVE_TAN 1 #define HAVE_TANF 1 #define HAVE_TRUNC 1 #define HAVE_TRUNCF 1 #define HAVE_FOPEN64 1 #define HAVE_FSEEKO 1 #define HAVE_FSEEKO64 1 #define HAVE_SIGACTION 1 #define HAVE_SA_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 #define HAVE_SYSCONF 1 /* #undef HAVE_SYSCTLBYNAME */ #define HAVE_CLOCK_GETTIME 1 /* #undef HAVE_GETPAGESIZE */ #define HAVE_MPROTECT 1 #define HAVE_ICONV 1 #define HAVE_PTHREAD_SETNAME_NP 1 /* #undef HAVE_PTHREAD_SET_NAME_NP */ #define HAVE_SEM_TIMEDWAIT 1 #define HAVE_GETAUXVAL 1 /* #undef HAVE_ELF_AUX_INFO */ #define HAVE_POLL 1 #define HAVE__EXIT 1 #else #define HAVE_STDARG_H 1 #define HAVE_STDDEF_H 1 #define HAVE_STDINT_H 1 #endif /* HAVE_LIBC */ #define HAVE_O_CLOEXEC 1 /* #undef HAVE_ALTIVEC_H */ #define HAVE_DBUS_DBUS_H 1 #define HAVE_FCITX 1 #define HAVE_SYS_INOTIFY_H 1 #define HAVE_INOTIFY_INIT 1 #define HAVE_INOTIFY_INIT1 1 #define HAVE_INOTIFY 1 /* #undef HAVE_IBUS_IBUS_H */ /* #undef HAVE_IMMINTRIN_H */ #define HAVE_LIBUDEV_H 1 /* #undef HAVE_LIBSAMPLERATE_H */ /* #undef HAVE_LIBDECOR_H */ /* #undef HAVE_DDRAW_H */ /* #undef HAVE_DINPUT_H */ /* #undef HAVE_DSOUND_H */ /* #undef HAVE_DXGI_H */ /* #undef HAVE_WINDOWS_GAMING_INPUT_H */ /* #undef HAVE_XINPUT_H */ /* #undef HAVE_XINPUT_GAMEPAD_EX */ /* #undef HAVE_XINPUT_STATE_EX */ /* #undef HAVE_MMDEVICEAPI_H */ /* #undef HAVE_AUDIOCLIENT_H */ /* #undef HAVE_SENSORSAPI_H */ /* SDL internal assertion support */ /* #undef SDL_DEFAULT_ASSERT_LEVEL */ /* Allow disabling of core subsystems */ /* #undef SDL_ATOMIC_DISABLED */ /* #undef SDL_AUDIO_DISABLED */ /* #undef SDL_CPUINFO_DISABLED */ /* #undef SDL_EVENTS_DISABLED */ /* #undef SDL_FILE_DISABLED */ /* #undef SDL_JOYSTICK_DISABLED */ /* #undef SDL_HAPTIC_DISABLED */ /* #undef SDL_HIDAPI_DISABLED */ /* #undef SDL_SENSOR_DISABLED */ /* #undef SDL_LOADSO_DISABLED */ /* #undef SDL_RENDER_DISABLED */ /* #undef SDL_THREADS_DISABLED */ /* #undef SDL_TIMERS_DISABLED */ /* #undef SDL_VIDEO_DISABLED */ /* #undef SDL_POWER_DISABLED */ /* #undef SDL_FILESYSTEM_DISABLED */ /* Enable various audio drivers */ /* #undef SDL_AUDIO_DRIVER_AAUDIO */ #define SDL_AUDIO_DRIVER_ALSA 1 #define SDL_AUDIO_DRIVER_ALSA_DYNAMIC "libasound.so.2" /* #undef SDL_AUDIO_DRIVER_ANDROID */ /* #undef SDL_AUDIO_DRIVER_ARTS */ /* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_COREAUDIO */ #define SDL_AUDIO_DRIVER_DISK 1 /* #undef SDL_AUDIO_DRIVER_DSOUND */ #define SDL_AUDIO_DRIVER_DUMMY 1 /* #undef SDL_AUDIO_DRIVER_EMSCRIPTEN */ /* #undef SDL_AUDIO_DRIVER_ESD */ /* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */ /* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_HAIKU */ /* #undef SDL_AUDIO_DRIVER_JACK */ /* #undef SDL_AUDIO_DRIVER_JACK_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_NACL */ /* #undef SDL_AUDIO_DRIVER_NAS */ /* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_NETBSD */ /* #undef SDL_AUDIO_DRIVER_OPENSLES */ #define SDL_AUDIO_DRIVER_OSS 1 /* #undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H */ /* #undef SDL_AUDIO_DRIVER_PAUDIO */ /* #undef SDL_AUDIO_DRIVER_PIPEWIRE */ /* #undef SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_PULSEAUDIO */ /* #undef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_QSA */ /* #undef SDL_AUDIO_DRIVER_SNDIO */ /* #undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */ /* #undef SDL_AUDIO_DRIVER_SUNAUDIO */ /* #undef SDL_AUDIO_DRIVER_WASAPI */ /* #undef SDL_AUDIO_DRIVER_WINMM */ /* #undef SDL_AUDIO_DRIVER_OS2 */ /* Enable various input drivers */ #define SDL_INPUT_LINUXEV 1 /* #undef SDL_INPUT_FBSDKBIO */ #define SDL_INPUT_LINUXKD 1 /* #undef SDL_INPUT_WSCONS */ /* #undef SDL_JOYSTICK_HAIKU */ /* #undef SDL_JOYSTICK_DINPUT */ /* #undef SDL_JOYSTICK_WGI */ /* #undef SDL_JOYSTICK_XINPUT */ /* #undef SDL_JOYSTICK_DUMMY */ /* #undef SDL_JOYSTICK_IOKIT */ /* #undef SDL_JOYSTICK_MFI */ #define SDL_JOYSTICK_LINUX 1 /* #undef SDL_JOYSTICK_ANDROID */ /* #undef SDL_JOYSTICK_OS2 */ /* #undef SDL_JOYSTICK_USBHID */ /* #undef SDL_HAVE_MACHINE_JOYSTICK_H */ #define SDL_JOYSTICK_HIDAPI 1 /* #undef SDL_JOYSTICK_RAWINPUT */ /* #undef SDL_JOYSTICK_EMSCRIPTEN */ // #define SDL_JOYSTICK_VIRTUAL 1 /* #undef SDL_HAPTIC_DUMMY */ /* #undef SDL_HAPTIC_ANDROID */ #define SDL_HAPTIC_LINUX 1 /* #undef SDL_HAPTIC_IOKIT */ /* #undef SDL_HAPTIC_DINPUT */ /* #undef SDL_HAPTIC_XINPUT */ /* Enable various sensor drivers */ /* #undef SDL_SENSOR_ANDROID */ /* #undef SDL_SENSOR_COREMOTION */ /* #undef SDL_SENSOR_WINDOWS */ #define SDL_SENSOR_DUMMY 1 /* Enable various shared object loading systems */ #define SDL_LOADSO_DLOPEN 1 /* #undef SDL_LOADSO_DUMMY */ /* #undef SDL_LOADSO_LDG */ /* #undef SDL_LOADSO_WINDOWS */ /* #undef SDL_LOADSO_OS2 */ /* Enable various threading systems */ /* #undef SDL_THREAD_GENERIC_COND_SUFFIX */ #define SDL_THREAD_PTHREAD 1 #define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 /* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */ /* #undef SDL_THREAD_WINDOWS */ /* #undef SDL_THREAD_OS2 */ /* Enable various timer systems */ /* #undef SDL_TIMER_HAIKU */ /* #undef SDL_TIMER_DUMMY */ #define SDL_TIMER_UNIX 1 /* #undef SDL_TIMER_WINDOWS */ /* #undef SDL_TIMER_OS2 */ /* Enable various video drivers */ /* #undef SDL_VIDEO_DRIVER_HAIKU */ /* #undef SDL_VIDEO_DRIVER_COCOA */ /* #undef SDL_VIDEO_DRIVER_DIRECTFB */ /* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */ #define SDL_VIDEO_DRIVER_DUMMY 1 /* #undef SDL_VIDEO_DRIVER_WINDOWS */ /* #undef SDL_VIDEO_DRIVER_WAYLAND */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON */ /* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR */ #define SDL_VIDEO_DRIVER_X11 1 /* #undef SDL_VIDEO_DRIVER_RPI */ #define SDL_VIDEO_DRIVER_KMSDRM 1 #define SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC "libdrm.so.2" #define SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM "libgbm.so.1" /* #undef SDL_VIDEO_DRIVER_ANDROID */ /* #undef SDL_VIDEO_DRIVER_EMSCRIPTEN */ /* #undef SDL_VIDEO_DRIVER_OFFSCREEN */ #define SDL_VIDEO_DRIVER_X11_DYNAMIC "libX11.so.6" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "libXext.so.6" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "libXcursor.so.1" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "libXinerama.so.1" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "libXi.so.6" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES "libXfixes.so.3" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "libXrandr.so.2" /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS */ /* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE */ #define SDL_VIDEO_DRIVER_X11_XCURSOR 1 #define SDL_VIDEO_DRIVER_X11_XDBE 1 #define SDL_VIDEO_DRIVER_X11_XINERAMA 1 #define SDL_VIDEO_DRIVER_X11_XINPUT2 1 #define SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH 1 #define SDL_VIDEO_DRIVER_X11_XFIXES 1 #define SDL_VIDEO_DRIVER_X11_XRANDR 1 /* #undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER */ #define SDL_VIDEO_DRIVER_X11_XSHAPE 1 /* #undef SDL_VIDEO_DRIVER_X11_XVIDMODE */ #define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1 #define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1 /* #undef SDL_VIDEO_DRIVER_NACL */ /* #undef SDL_VIDEO_DRIVER_VIVANTE */ /* #undef SDL_VIDEO_DRIVER_VIVANTE_VDK */ /* #undef SDL_VIDEO_DRIVER_OS2 */ /* #undef SDL_VIDEO_DRIVER_QNX */ /* #undef SDL_VIDEO_DRIVER_RISCOS */ /* #undef SDL_VIDEO_RENDER_D3D */ /* #undef SDL_VIDEO_RENDER_D3D11 */ #define SDL_VIDEO_RENDER_OGL 1 #define SDL_VIDEO_RENDER_OGL_ES 1 #define SDL_VIDEO_RENDER_OGL_ES2 1 /* #undef SDL_VIDEO_RENDER_DIRECTFB */ /* #undef SDL_VIDEO_RENDER_METAL */ /* Enable OpenGL support */ #define SDL_VIDEO_OPENGL 1 #define SDL_VIDEO_OPENGL_ES 1 #define SDL_VIDEO_OPENGL_ES2 1 /* #undef SDL_VIDEO_OPENGL_BGL */ /* #undef SDL_VIDEO_OPENGL_CGL */ #define SDL_VIDEO_OPENGL_EGL 1 #define SDL_VIDEO_OPENGL_GLX 1 /* #undef SDL_VIDEO_OPENGL_WGL */ /* #undef SDL_VIDEO_OPENGL_OSMESA */ /* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */ /* Enable Vulkan support */ /* #undef SDL_VIDEO_VULKAN */ /* Enable Metal support */ /* #undef SDL_VIDEO_METAL */ /* Enable system power support */ #define SDL_POWER_LINUX 1 /* #undef SDL_POWER_WINDOWS */ /* #undef SDL_POWER_MACOSX */ /* #undef SDL_POWER_HAIKU */ /* #undef SDL_POWER_ANDROID */ /* #undef SDL_POWER_EMSCRIPTEN */ /* #undef SDL_POWER_HARDWIRED */ /* Enable system filesystem support */ /* #undef SDL_FILESYSTEM_HAIKU */ /* #undef SDL_FILESYSTEM_COCOA */ /* #undef SDL_FILESYSTEM_DUMMY */ #define SDL_FILESYSTEM_UNIX 1 /* #undef SDL_FILESYSTEM_WINDOWS */ /* #undef SDL_FILESYSTEM_NACL */ /* #undef SDL_FILESYSTEM_ANDROID */ /* #undef SDL_FILESYSTEM_EMSCRIPTEN */ /* #undef SDL_FILESYSTEM_OS2 */ /* #undef SDL_FILESYSTEM_RISCOS */ /* Enable assembly routines */ #define SDL_ASSEMBLY_ROUTINES 1 /* #undef SDL_ALTIVEC_BLITTERS */ /* #undef SDL_ARM_SIMD_BLITTERS */ /* #undef SDL_ARM_NEON_BLITTERS */ /* Whether SDL_DYNAMIC_API needs dlopen() */ #define DYNAPI_NEEDS_DLOPEN 1 /* Enable ime support */ #define SDL_USE_IME 1 /* Enable dynamic udev support */ #define SDL_UDEV_DYNAMIC "libudev.so.1" /* Enable dynamic libusb support */ /* #undef SDL_LIBUSB_DYNAMIC */ /* Enable dynamic libsamplerate support */ /* #undef SDL_LIBSAMPLERATE_DYNAMIC */ #endif //RASPBERRYPI #endif /* SDL_config_rpi_h_ */ ================================================ FILE: project/lib/custom/sdl/include/SDL_config_windows.h ================================================ /* Simple DirectMedia Layer Copyright (C) 1997-2020 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef SDL_config_windows_h_ #define SDL_config_windows_h_ #define SDL_config_h_ #ifdef HX_WINDOWS #include "SDL_platform.h" /* This is a set of defines to configure the SDL features */ #if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H) #if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__) #define HAVE_STDINT_H 1 #elif defined(_MSC_VER) typedef signed __int8 int8_t; typedef unsigned __int8 uint8_t; typedef signed __int16 int16_t; typedef unsigned __int16 uint16_t; typedef signed __int32 int32_t; typedef unsigned __int32 uint32_t; typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; #ifndef _UINTPTR_T_DEFINED #ifdef _WIN64 typedef unsigned __int64 uintptr_t; #else typedef unsigned int uintptr_t; #endif #define _UINTPTR_T_DEFINED #endif /* Older Visual C++ headers don't have the Win64-compatible typedefs... */ #if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) #define DWORD_PTR DWORD #endif #if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) #define LONG_PTR LONG #endif #else /* !__GNUC__ && !_MSC_VER */ typedef signed char int8_t; typedef unsigned char uint8_t; typedef signed short int16_t; typedef unsigned short uint16_t; typedef signed int int32_t; typedef unsigned int uint32_t; typedef signed long long int64_t; typedef unsigned long long uint64_t; #ifndef _SIZE_T_DEFINED_ #define _SIZE_T_DEFINED_ typedef unsigned int size_t; #endif typedef unsigned int uintptr_t; #endif /* __GNUC__ || _MSC_VER */ #endif /* !_STDINT_H_ && !HAVE_STDINT_H */ #ifdef _WIN64 # define SIZEOF_VOIDP 8 #else # define SIZEOF_VOIDP 4 #endif #define HAVE_DDRAW_H 1 #define HAVE_DINPUT_H 1 #define HAVE_DSOUND_H 1 #define HAVE_DXGI_H 1 #define HAVE_XINPUT_H 1 #define HAVE_MMDEVICEAPI_H 1 #define HAVE_AUDIOCLIENT_H 1 /* This is disabled by default to avoid C runtime dependencies and manifest requirements */ #ifdef HAVE_LIBC /* Useful headers */ #define STDC_HEADERS 1 #define HAVE_CTYPE_H 1 #define HAVE_FLOAT_H 1 #define HAVE_LIMITS_H 1 #define HAVE_MATH_H 1 #define HAVE_SIGNAL_H 1 #define HAVE_STDIO_H 1 #define HAVE_STRING_H 1 /* C library functions */ #define HAVE_MALLOC 1 #define HAVE_CALLOC 1 #define HAVE_REALLOC 1 #define HAVE_FREE 1 #define HAVE_ALLOCA 1 #define HAVE_QSORT 1 #define HAVE_ABS 1 #define HAVE_MEMSET 1 #define HAVE_MEMCPY 1 #define HAVE_MEMMOVE 1 #define HAVE_MEMCMP 1 #define HAVE_STRLEN 1 #define HAVE__STRREV 1 /* These functions have security warnings, so we won't use them */ /* #undef HAVE__STRUPR */ /* #undef HAVE__STRLWR */ #define HAVE_STRCHR 1 #define HAVE_STRRCHR 1 #define HAVE_STRSTR 1 /* #undef HAVE_STRTOK_R */ #if defined(_MSC_VER) #define HAVE_STRTOK_S 1 #endif /* These functions have security warnings, so we won't use them */ /* #undef HAVE__LTOA */ /* #undef HAVE__ULTOA */ #define HAVE_STRTOL 1 #define HAVE_STRTOUL 1 #define HAVE_STRTOD 1 #define HAVE_ATOI 1 #define HAVE_ATOF 1 #define HAVE_STRCMP 1 #define HAVE_STRNCMP 1 #define HAVE__STRICMP 1 #define HAVE__STRNICMP 1 #define HAVE_ACOS 1 #define HAVE_ACOSF 1 #define HAVE_ASIN 1 #define HAVE_ASINF 1 #define HAVE_ATAN 1 #define HAVE_ATANF 1 #define HAVE_ATAN2 1 #define HAVE_ATAN2F 1 #define HAVE_CEILF 1 #define HAVE__COPYSIGN 1 #define HAVE_COS 1 #define HAVE_COSF 1 #define HAVE_EXP 1 #define HAVE_EXPF 1 #define HAVE_FABS 1 #define HAVE_FABSF 1 #define HAVE_FLOOR 1 #define HAVE_FLOORF 1 #define HAVE_FMOD 1 #define HAVE_FMODF 1 #define HAVE_LOG 1 #define HAVE_LOGF 1 #define HAVE_LOG10 1 #define HAVE_LOG10F 1 #define HAVE_POW 1 #define HAVE_POWF 1 #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 #define HAVE_SQRTF 1 #define HAVE_TAN 1 #define HAVE_TANF 1 #if defined(_MSC_VER) /* These functions were added with the VC++ 2013 C runtime library */ #if _MSC_VER >= 1800 #define HAVE_STRTOLL 1 #define HAVE_VSSCANF 1 #define HAVE_SCALBN 1 #define HAVE_SCALBNF 1 #endif /* This function is available with at least the VC++ 2008 C runtime library */ #if _MSC_VER >= 1400 #define HAVE__FSEEKI64 1 #endif #endif #if !defined(_MSC_VER) || defined(_USE_MATH_DEFINES) #define HAVE_M_PI 1 #endif #else #define HAVE_STDARG_H 1 #define HAVE_STDDEF_H 1 #endif /* Enable various audio drivers */ #define SDL_AUDIO_DRIVER_WASAPI 1 #define SDL_AUDIO_DRIVER_DSOUND 1 #define SDL_AUDIO_DRIVER_WINMM 1 #define SDL_AUDIO_DRIVER_DISK 1 #define SDL_AUDIO_DRIVER_DUMMY 1 /* Enable various input drivers */ #define SDL_JOYSTICK_DINPUT 1 #define SDL_JOYSTICK_XINPUT 1 #define SDL_JOYSTICK_HIDAPI 1 #define SDL_HAPTIC_DINPUT 1 #define SDL_HAPTIC_XINPUT 1 /* Enable the dummy sensor driver */ #define SDL_SENSOR_DUMMY 1 /* Enable various shared object loading systems */ #define SDL_LOADSO_WINDOWS 1 /* Enable various threading systems */ #define SDL_THREAD_WINDOWS 1 /* Enable various timer systems */ #define SDL_TIMER_WINDOWS 1 /* Enable various video drivers */ #define SDL_VIDEO_DRIVER_DUMMY 1 #define SDL_VIDEO_DRIVER_WINDOWS 1 #ifndef SDL_VIDEO_RENDER_D3D #define SDL_VIDEO_RENDER_D3D 0 #endif #ifndef SDL_VIDEO_RENDER_D3D11 #define SDL_VIDEO_RENDER_D3D11 0 #endif #ifndef NATIVE_TOOLKIT_SDL_ANGLE /* Enable OpenGL support */ #ifndef SDL_VIDEO_OPENGL #define SDL_VIDEO_OPENGL 1 #endif #ifndef SDL_VIDEO_OPENGL_WGL #define SDL_VIDEO_OPENGL_WGL 1 #endif #ifndef SDL_VIDEO_RENDER_OGL #define SDL_VIDEO_RENDER_OGL 1 #endif #ifndef SDL_VIDEO_RENDER_OGL_ES2 #define SDL_VIDEO_RENDER_OGL_ES2 0 #endif #ifndef SDL_VIDEO_OPENGL_ES2 #define SDL_VIDEO_OPENGL_ES2 0 #endif #ifndef SDL_VIDEO_OPENGL_EGL #define SDL_VIDEO_OPENGL_EGL 0 #endif /* Enable Vulkan support */ #define SDL_VIDEO_VULKAN 1 #else /* Enable OpenGL support (ES2/ANGLE) */ #ifndef SDL_VIDEO_OPENGL #define SDL_VIDEO_OPENGL 1 #endif #ifndef SDL_VIDEO_OPENGL_WGL #define SDL_VIDEO_OPENGL_WGL 0 #endif #ifndef SDL_VIDEO_RENDER_OGL #define SDL_VIDEO_RENDER_OGL 0 #endif #ifndef SDL_VIDEO_RENDER_OGL_ES2 #define SDL_VIDEO_RENDER_OGL_ES2 1 #endif #ifndef SDL_VIDEO_OPENGL_ES2 #define SDL_VIDEO_OPENGL_ES2 1 #endif #ifndef SDL_VIDEO_OPENGL_EGL #define SDL_VIDEO_OPENGL_EGL 1 #endif #endif /* Enable Vulkan support */ #define SDL_VIDEO_VULKAN 1 /* Enable system power support */ #define SDL_POWER_WINDOWS 1 /* Enable filesystem support */ #define SDL_FILESYSTEM_WINDOWS 1 /* Enable assembly routines (Win64 doesn't have inline asm) */ #ifndef _WIN64 #define SDL_ASSEMBLY_ROUTINES 1 #endif #endif //HX_WINDOWS #endif /* SDL_config_windows_h_ */ ================================================ FILE: project/lib/efsw-files.xml ================================================ ================================================ FILE: project/lib/freetype-files.xml ================================================ ================================================ FILE: project/lib/harfbuzz-files.xml ================================================ ================================================ FILE: project/lib/jpeg-files.xml ================================================ ================================================ FILE: project/lib/lzma-files.xml ================================================ ================================================ FILE: project/lib/mbedtls-files.xml ================================================ ================================================ FILE: project/lib/mojoal-files.xml ================================================ ================================================ FILE: project/lib/neko-files.xml ================================================ ================================================ FILE: project/lib/ogg-files.xml ================================================ ================================================ FILE: project/lib/openal-files.xml ================================================
    ================================================ FILE: project/lib/pixman-files.xml ================================================
    ================================================ FILE: project/lib/png-files.xml ================================================
    ================================================ FILE: project/lib/sdl-files.xml ================================================
    ================================================ FILE: project/lib/tinyfiledialogs-files.xml ================================================ ================================================ FILE: project/lib/vorbis-files.xml ================================================ ================================================ FILE: project/lib/vpx-files.xml ================================================ ================================================ FILE: project/lib/webm-files.xml ================================================ ================================================ FILE: project/lib/zlib-files.xml ================================================ ================================================ FILE: project/src/ExternalInterface.cpp ================================================ #ifndef STATIC_LINK #define IMPLEMENT_API #endif #if defined(HX_WINDOWS) || defined(HX_MACOS) || defined(HX_LINUX) #define NEKO_COMPATIBLE #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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HX_WINDOWS #include #include #endif #include #include #include DEFINE_KIND (k_finalizer); namespace lime { void gc_application (value handle) { Application* application = (Application*)val_data (handle); delete application; } void hl_gc_application (HL_CFFIPointer* handle) { Application* application = (Application*)handle->ptr; delete application; } void gc_file_watcher (value handle) { #ifdef LIME_EFSW FileWatcher* watcher = (FileWatcher*)val_data (handle); delete watcher; #endif } void hl_gc_file_watcher (HL_CFFIPointer* handle) { #ifdef LIME_EFSW FileWatcher* watcher = (FileWatcher*)handle->ptr; delete watcher; #endif } void gc_font (value handle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (handle); delete font; #endif } void hl_gc_font (HL_CFFIPointer* handle) { #ifdef LIME_FREETYPE Font* font = (Font*)handle->ptr; delete font; #endif } void gc_window (value handle) { Window* window = (Window*)val_data (handle); delete window; } void hl_gc_window (HL_CFFIPointer* handle) { Window* window = (Window*)handle->ptr; delete window; } std::string wstring_utf8 (const std::wstring& val) { std::string out; unsigned int codepoint = 0; for (const wchar_t chr : val) { if (chr >= 0xd800 && chr <= 0xdbff) { codepoint = ((chr - 0xd800) << 10) + 0x10000; } else { if (chr >= 0xdc00 && chr <= 0xdfff) { codepoint |= chr - 0xdc00; } else { codepoint = chr; } if (codepoint <= 0x7f) { out.append (1, static_cast (codepoint)); } else if (codepoint <= 0x7ff) { out.append (1, static_cast (0xc0 | ((codepoint >> 6) & 0x1f))); out.append (1, static_cast (0x80 | (codepoint & 0x3f))); } else if (codepoint <= 0xffff) { out.append (1, static_cast (0xe0 | ((codepoint >> 12) & 0x0f))); out.append (1, static_cast (0x80 | ((codepoint >> 6) & 0x3f))); out.append (1, static_cast (0x80 | (codepoint & 0x3f))); } else { out.append (1, static_cast (0xf0 | ((codepoint >> 18) & 0x07))); out.append (1, static_cast (0x80 | ((codepoint >> 12) & 0x3f))); out.append (1, static_cast (0x80 | ((codepoint >> 6) & 0x3f))); out.append (1, static_cast (0x80 | (codepoint & 0x3f))); } codepoint = 0; } } return out; } vbyte* hl_wstring_to_utf8_bytes (const std::wstring& val) { const std::string utf8 (wstring_utf8 (val)); vbyte* const bytes = hl_alloc_bytes (utf8.size () + 1); std::memcpy(bytes, utf8.c_str (), utf8.size () + 1); return bytes; } std::wstring* hxstring_to_wstring (HxString val) { if (val.c_str ()) { #ifdef HX_WINDOWS return new std::wstring (hxs_wchar (val, nullptr)); #else const std::string _val (hxs_utf8 (val, nullptr)); return new std::wstring (_val.begin (), _val.end ()); #endif } else { return 0; } } std::wstring* hxstring_to_wstring (hl_vstring* val) { if (val) { std::string _val = std::string (hl_to_utf8 (val->bytes)); #ifdef HX_WINDOWS std::wstring_convert> converter; return new std::wstring (converter.from_bytes (_val)); #else return new std::wstring (_val.begin (), _val.end ()); #endif } else { return 0; } } value wstring_to_value (std::wstring* val) { if (val) { #ifdef HX_WINDOWS return alloc_wstring (val->c_str ()); #else std::string _val = std::string (val->begin (), val->end ()); return alloc_string (_val.c_str ()); #endif } else { return 0; } } value lime_application_create () { Application* application = CreateApplication (); return CFFIPointer (application, gc_application); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_application_create) () { Application* application = CreateApplication (); return HLCFFIPointer (application, (hl_finalizer)hl_gc_application); } void lime_application_event_manager_register (value callback, value eventObject) { ApplicationEvent::callback = new ValuePointer (callback); ApplicationEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_application_event_manager_register) (vclosure* callback, ApplicationEvent* eventObject) { ApplicationEvent::callback = new ValuePointer (callback); ApplicationEvent::eventObject = new ValuePointer ((vobj*)eventObject); } int lime_application_exec (value application) { Application* app = (Application*)val_data (application); return app->Exec (); } HL_PRIM int HL_NAME(hl_application_exec) (HL_CFFIPointer* application) { Application* app = (Application*)application->ptr; return app->Exec (); } void lime_application_init (value application) { Application* app = (Application*)val_data (application); app->Init (); } HL_PRIM void HL_NAME(hl_application_init) (HL_CFFIPointer* application) { Application* app = (Application*)application->ptr; app->Init (); } int lime_application_quit (value application) { Application* app = (Application*)val_data (application); return app->Quit (); } HL_PRIM int HL_NAME(hl_application_quit) (HL_CFFIPointer* application) { Application* app = (Application*)application->ptr; return app->Quit (); } void lime_application_set_frame_rate (value application, double frameRate) { Application* app = (Application*)val_data (application); app->SetFrameRate (frameRate); } HL_PRIM void HL_NAME(hl_application_set_frame_rate) (HL_CFFIPointer* application, double frameRate) { Application* app = (Application*)application->ptr; app->SetFrameRate (frameRate); } bool lime_application_update (value application) { Application* app = (Application*)val_data (application); return app->Update (); } HL_PRIM bool HL_NAME(hl_application_update) (HL_CFFIPointer* application) { Application* app = (Application*)application->ptr; return app->Update (); } value lime_audio_load_bytes (value data, value buffer) { Resource resource; Bytes bytes; AudioBuffer audioBuffer = AudioBuffer (buffer); bytes.Set (data); resource = Resource (&bytes); if (WAV::Decode (&resource, &audioBuffer)) { return audioBuffer.Value (buffer); } #ifdef LIME_OGG if (OGG::Decode (&resource, &audioBuffer)) { return audioBuffer.Value (buffer); } #endif return alloc_null (); } HL_PRIM AudioBuffer* HL_NAME(hl_audio_load_bytes) (Bytes* data, AudioBuffer* buffer) { Resource resource = Resource (data); if (WAV::Decode (&resource, buffer)) { return buffer; } #ifdef LIME_OGG if (OGG::Decode (&resource, buffer)) { return buffer; } #endif return 0; } value lime_audio_load_file (value data, value buffer) { Resource resource; AudioBuffer audioBuffer = AudioBuffer (buffer); resource = Resource (val_string (data)); if (WAV::Decode (&resource, &audioBuffer)) { return audioBuffer.Value (buffer); } #ifdef LIME_OGG if (OGG::Decode (&resource, &audioBuffer)) { return audioBuffer.Value (buffer); } #endif return alloc_null (); } HL_PRIM AudioBuffer* HL_NAME(hl_audio_load_file) (hl_vstring* data, AudioBuffer* buffer) { Resource resource = Resource (data ? hl_to_utf8 ((const uchar*)data->bytes) : NULL); if (WAV::Decode (&resource, buffer)) { return buffer; } #ifdef LIME_OGG if (OGG::Decode (&resource, buffer)) { return buffer; } #endif return 0; } value lime_audio_load (value data, value buffer) { if (val_is_string (data)) { return lime_audio_load_file (data, buffer); } else { return lime_audio_load_bytes (data, buffer); } } value lime_bytes_from_data_pointer (double data, int length, value _bytes) { uintptr_t ptr = (uintptr_t)data; Bytes bytes (_bytes); bytes.Resize (length); if (ptr) { memcpy (bytes.b, (const void*)ptr, length); } return bytes.Value (_bytes); } HL_PRIM Bytes* HL_NAME(hl_bytes_from_data_pointer) (double data, int length, Bytes* bytes) { uintptr_t ptr = (uintptr_t)data; bytes->Resize (length); if (ptr) { memcpy (bytes->b, (const void*)ptr, length); } return bytes; } double lime_bytes_get_data_pointer (value bytes) { Bytes data = Bytes (bytes); return (uintptr_t)data.b; } HL_PRIM double HL_NAME(hl_bytes_get_data_pointer) (Bytes* bytes) { return bytes ? (uintptr_t)bytes->b : 0; } double lime_bytes_get_data_pointer_offset (value bytes, int offset) { if (val_is_null (bytes)) return 0; Bytes data = Bytes (bytes); return (uintptr_t)data.b + offset; } HL_PRIM double HL_NAME(hl_bytes_get_data_pointer_offset) (Bytes* bytes, int offset) { if (!bytes) return 0; return (uintptr_t)bytes->b + offset; } value lime_bytes_read_file (HxString path, value bytes) { Bytes data (bytes); data.ReadFile (hxs_utf8 (path, nullptr)); return data.Value (bytes); } HL_PRIM Bytes* HL_NAME(hl_bytes_read_file) (hl_vstring* path, Bytes* bytes) { if (!path) return 0; bytes->ReadFile (hl_to_utf8 ((const uchar*)path->bytes)); return bytes; } double lime_cffi_get_native_pointer (value handle) { return (uintptr_t)val_data (handle); } HL_PRIM double HL_NAME(hl_cffi_get_native_pointer) (HL_CFFIPointer* handle) { return (uintptr_t)handle->ptr; } void lime_cffi_finalizer (value abstract) { val_call0 ((value)val_data (abstract)); } value lime_cffi_set_finalizer (value callback) { value abstract = alloc_abstract (k_finalizer, callback); val_gc (abstract, lime_cffi_finalizer); return abstract; } void lime_clipboard_event_manager_register (value callback, value eventObject) { ClipboardEvent::callback = new ValuePointer (callback); ClipboardEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_clipboard_event_manager_register) (vclosure* callback, ClipboardEvent* eventObject) { ClipboardEvent::callback = new ValuePointer (callback); ClipboardEvent::eventObject = new ValuePointer ((vobj*)eventObject); } value lime_clipboard_get_text () { if (Clipboard::HasText ()) { const char* text = Clipboard::GetText (); value _text = alloc_string (text); // TODO: Should we free for all backends? (SDL requires it) free ((char*)text); return _text; } else { return alloc_null (); } } HL_PRIM vbyte* HL_NAME(hl_clipboard_get_text) () { if (Clipboard::HasText ()) { const char* text = Clipboard::GetText (); return (vbyte*)text; } else { return 0; } } void lime_clipboard_set_text (HxString text) { Clipboard::SetText (hxs_utf8 (text, nullptr)); } HL_PRIM void HL_NAME(hl_clipboard_set_text) (hl_vstring* text) { Clipboard::SetText (text ? (const char*)hl_to_utf8 ((const uchar*)text->bytes) : NULL); } double lime_data_pointer_offset (double pointer, int offset) { return (uintptr_t)pointer + offset; } HL_PRIM double HL_NAME(hl_data_pointer_offset) (double pointer, int offset) { return (uintptr_t)pointer + offset; } value lime_deflate_compress (value buffer, value bytes) { #ifdef LIME_ZLIB Bytes data (buffer); Bytes result (bytes); Zlib::Compress (DEFLATE, &data, &result); return result.Value (bytes); #else return alloc_null(); #endif } HL_PRIM Bytes* HL_NAME(hl_deflate_compress) (Bytes* buffer, Bytes* bytes) { #ifdef LIME_ZLIB Zlib::Compress (DEFLATE, buffer, bytes); return bytes; #else return 0; #endif } value lime_deflate_decompress (value buffer, value bytes) { #ifdef LIME_ZLIB Bytes data (buffer); Bytes result (bytes); Zlib::Decompress (DEFLATE, &data, &result); return result.Value (bytes); #else return alloc_null (); #endif } HL_PRIM Bytes* HL_NAME(hl_deflate_decompress) (Bytes* buffer, Bytes* bytes) { #ifdef LIME_ZLIB Zlib::Decompress (DEFLATE, buffer, bytes); return bytes; #else return 0; #endif } void lime_drop_event_manager_register (value callback, value eventObject) { DropEvent::callback = new ValuePointer (callback); DropEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_drop_event_manager_register) (vclosure* callback, DropEvent* eventObject) { DropEvent::callback = new ValuePointer (callback); DropEvent::eventObject = new ValuePointer ((vobj*)eventObject); } value lime_file_dialog_open_directory (HxString title, HxString filter, HxString defaultPath) { #ifdef LIME_TINYFILEDIALOGS std::wstring* _title = hxstring_to_wstring (title); std::wstring* _filter = hxstring_to_wstring (filter); std::wstring* _defaultPath = hxstring_to_wstring (defaultPath); std::wstring* path = FileDialog::OpenDirectory (_title, _filter, _defaultPath); if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (path) { value _path = wstring_to_value (path); delete path; return _path; } else { return alloc_null (); } #endif return alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_file_dialog_open_directory) (hl_vstring* title, hl_vstring* filter, hl_vstring* defaultPath) { #ifdef LIME_TINYFILEDIALOGS std::wstring* _title = hxstring_to_wstring (title); std::wstring* _filter = hxstring_to_wstring (filter); std::wstring* _defaultPath = hxstring_to_wstring (defaultPath); std::wstring* path = FileDialog::OpenDirectory (_title, _filter, _defaultPath); if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (path) { vbyte* const result = hl_wstring_to_utf8_bytes (*path); delete path; return result; } else { return NULL; } #endif return NULL; } value lime_file_dialog_open_file (HxString title, HxString filter, HxString defaultPath) { #ifdef LIME_TINYFILEDIALOGS std::wstring* _title = hxstring_to_wstring (title); std::wstring* _filter = hxstring_to_wstring (filter); std::wstring* _defaultPath = hxstring_to_wstring (defaultPath); std::wstring* path = FileDialog::OpenFile (_title, _filter, _defaultPath); if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (path) { value _path = wstring_to_value (path); delete path; return _path; } else { return alloc_null (); } #endif return alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_file_dialog_open_file) (hl_vstring* title, hl_vstring* filter, hl_vstring* defaultPath) { #ifdef LIME_TINYFILEDIALOGS std::wstring* _title = hxstring_to_wstring (title); std::wstring* _filter = hxstring_to_wstring (filter); std::wstring* _defaultPath = hxstring_to_wstring (defaultPath); std::wstring* path = FileDialog::OpenFile (_title, _filter, _defaultPath); if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (path) { vbyte* const result = hl_wstring_to_utf8_bytes (*path); delete path; return result; } else { return NULL; } #endif return NULL; } value lime_file_dialog_open_files (HxString title, HxString filter, HxString defaultPath) { #ifdef LIME_TINYFILEDIALOGS std::wstring* _title = hxstring_to_wstring (title); std::wstring* _filter = hxstring_to_wstring (filter); std::wstring* _defaultPath = hxstring_to_wstring (defaultPath); std::vector files; FileDialog::OpenFiles (&files, _title, _filter, _defaultPath); value result = alloc_array (files.size ()); if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; for (int i = 0; i < files.size (); i++) { value _file = wstring_to_value (files[i]); val_array_set_i (result, i, _file); delete files[i]; } #else value result = alloc_array (0); #endif return result; } HL_PRIM hl_varray* HL_NAME(hl_file_dialog_open_files) (hl_vstring* title, hl_vstring* filter, hl_vstring* defaultPath) { #ifdef LIME_TINYFILEDIALOGS std::wstring* _title = hxstring_to_wstring (title); std::wstring* _filter = hxstring_to_wstring (filter); std::wstring* _defaultPath = hxstring_to_wstring (defaultPath); std::vector files; FileDialog::OpenFiles (&files, _title, _filter, _defaultPath); hl_varray* result = (hl_varray*)hl_alloc_array (&hlt_bytes, files.size ()); vbyte** resultData = hl_aptr (result, vbyte*); if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; for (int i = 0; i < files.size (); i++) { *resultData++ = hl_wstring_to_utf8_bytes (*files[i]); delete files[i]; } #else hl_varray* result = hl_alloc_array (&hlt_bytes, 0); #endif return result; } value lime_file_dialog_save_file (HxString title, HxString filter, HxString defaultPath) { #ifdef LIME_TINYFILEDIALOGS std::wstring* _title = hxstring_to_wstring (title); std::wstring* _filter = hxstring_to_wstring (filter); std::wstring* _defaultPath = hxstring_to_wstring (defaultPath); std::wstring* path = FileDialog::SaveFile (_title, _filter, _defaultPath); if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (path) { value _path = wstring_to_value (path); delete path; return _path; } else { return alloc_null (); } #endif return alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_file_dialog_save_file) (hl_vstring* title, hl_vstring* filter, hl_vstring* defaultPath) { #ifdef LIME_TINYFILEDIALOGS std::wstring* _title = hxstring_to_wstring (title); std::wstring* _filter = hxstring_to_wstring (filter); std::wstring* _defaultPath = hxstring_to_wstring (defaultPath); std::wstring* path = FileDialog::SaveFile (_title, _filter, _defaultPath); if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (path) { vbyte* const result = hl_wstring_to_utf8_bytes (*path); delete path; return result; } else { return NULL; } #endif return NULL; } value lime_file_watcher_create (value callback) { #ifdef LIME_EFSW FileWatcher* watcher = new FileWatcher (callback); return CFFIPointer (watcher, gc_file_watcher); #else return alloc_null (); #endif } HL_PRIM HL_CFFIPointer* HL_NAME(hl_file_watcher_create) (vclosure* callback) { // #ifdef LIME_EFSW // FileWatcher* watcher = new FileWatcher (callback); // return HLCFFIPointer (watcher, (hl_finalizer)hl_gc_file_watcher); // #else return 0; // #endif } value lime_file_watcher_add_directory (value handle, value path, bool recursive) { #ifdef LIME_EFSW FileWatcher* watcher = (FileWatcher*)val_data (handle); return alloc_int (watcher->AddDirectory (val_string (path), recursive)); #else return alloc_int (0); #endif } HL_PRIM int HL_NAME(hl_file_watcher_add_directory) (HL_CFFIPointer* handle, hl_vstring* path, bool recursive) { #ifdef LIME_EFSW FileWatcher* watcher = (FileWatcher*)handle->ptr; return watcher->AddDirectory ((const char*)path, recursive); #else return 0; #endif } void lime_file_watcher_remove_directory (value handle, value watchID) { #ifdef LIME_EFSW FileWatcher* watcher = (FileWatcher*)val_data (handle); watcher->RemoveDirectory (val_int (watchID)); #endif } HL_PRIM void HL_NAME(hl_file_watcher_remove_directory) (HL_CFFIPointer* handle, int watchID) { #ifdef LIME_EFSW FileWatcher* watcher = (FileWatcher*)handle->ptr; watcher->RemoveDirectory (watchID); #endif } void lime_file_watcher_update (value handle) { #ifdef LIME_EFSW FileWatcher* watcher = (FileWatcher*)val_data (handle); watcher->Update (); #endif } HL_PRIM void HL_NAME(hl_file_watcher_update) (HL_CFFIPointer* handle) { #ifdef LIME_EFSW FileWatcher* watcher = (FileWatcher*)handle->ptr; watcher->Update (); #endif } int lime_font_get_ascender (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetAscender (); #else return 0; #endif } HL_PRIM int HL_NAME(hl_font_get_ascender) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetAscender (); #else return 0; #endif } int lime_font_get_descender (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetDescender (); #else return 0; #endif } HL_PRIM int HL_NAME(hl_font_get_descender) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetDescender (); #else return 0; #endif } value lime_font_get_family_name (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); wchar_t *name = font->GetFamilyName (); value result = alloc_wstring (name); delete name; return result; #else return alloc_null (); #endif } HL_PRIM vbyte* HL_NAME(hl_font_get_family_name) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; wchar_t *name = font->GetFamilyName (); if (!name) return nullptr; vbyte* const result = hl_wstring_to_utf8_bytes (name); delete name; return result; #else return 0; #endif } int lime_font_get_glyph_index (value fontHandle, HxString character) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetGlyphIndex (hxs_utf8 (character, nullptr)); #else return -1; #endif } HL_PRIM int HL_NAME(hl_font_get_glyph_index) (HL_CFFIPointer* fontHandle, hl_vstring* character) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetGlyphIndex (character ? (char*)hl_to_utf8 ((const uchar*)character->bytes) : NULL); #else return -1; #endif } value lime_font_get_glyph_indices (value fontHandle, HxString characters) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return (value)font->GetGlyphIndices (true, hxs_utf8 (characters, nullptr)); #else return alloc_null (); #endif } HL_PRIM hl_varray* HL_NAME(hl_font_get_glyph_indices) (HL_CFFIPointer* fontHandle, hl_vstring* characters) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return (hl_varray*)font->GetGlyphIndices (false, characters ? (char*)hl_to_utf8 ((const uchar*)characters->bytes) : NULL); #else return 0; #endif } value lime_font_get_glyph_metrics (value fontHandle, int index) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return (value)font->GetGlyphMetrics (true, index); #else return alloc_null (); #endif } HL_PRIM vdynamic* HL_NAME(hl_font_get_glyph_metrics) (HL_CFFIPointer* fontHandle, int index) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return (vdynamic*)font->GetGlyphMetrics (false, index); #else return 0; #endif } int lime_font_get_height (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetHeight (); #else return 0; #endif } HL_PRIM int HL_NAME(hl_font_get_height) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetHeight (); #else return 0; #endif } int lime_font_get_num_glyphs (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetNumGlyphs (); #else return 0; #endif } HL_PRIM int HL_NAME(hl_font_get_num_glyphs) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetNumGlyphs (); #else return 0; #endif } int lime_font_get_underline_position (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetUnderlinePosition (); #else return 0; #endif } HL_PRIM int HL_NAME(hl_font_get_underline_position) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetUnderlinePosition (); #else return 0; #endif } int lime_font_get_underline_thickness (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetUnderlineThickness (); #else return 0; #endif } HL_PRIM int HL_NAME(hl_font_get_underline_thickness) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetUnderlineThickness (); #else return 0; #endif } int lime_font_get_strikethrough_position (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetStrikethroughPosition (); #else return 0; #endif } HL_PRIM int HL_NAME(hl_font_get_strikethrough_position) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetStrikethroughPosition (); #else return 0; #endif } int lime_font_get_strikethrough_thickness (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetStrikethroughThickness (); #else return 0; #endif } HL_PRIM int HL_NAME(hl_font_get_strikethrough_thickness) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetStrikethroughThickness (); #else return 0; #endif } int lime_font_get_units_per_em (value fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return font->GetUnitsPerEM (); #else return 0; #endif } HL_PRIM int HL_NAME(hl_font_get_units_per_em) (HL_CFFIPointer* fontHandle) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return font->GetUnitsPerEM (); #else return 0; #endif } value lime_font_load_bytes (value data) { #ifdef LIME_FREETYPE Resource resource; Bytes bytes; bytes.Set (data); resource = Resource (&bytes); Font *font = new Font (&resource, 0); if (font) { if (font->face) { return CFFIPointer (font, gc_font); } else { delete font; } } #endif return alloc_null (); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_font_load_bytes) (Bytes* data) { #ifdef LIME_FREETYPE Resource resource = Resource (data); Font *font = new Font (&resource, 0); if (font) { if (font->face) { return HLCFFIPointer (font, (hl_finalizer)hl_gc_font); } else { delete font; } } #endif return 0; } value lime_font_load_file (value data) { #ifdef LIME_FREETYPE Resource resource = Resource (val_string (data)); Font *font = new Font (&resource, 0); if (font) { if (font->face) { return CFFIPointer (font, gc_font); } else { delete font; } } #endif return alloc_null (); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_font_load_file) (hl_vstring* data) { #ifdef LIME_FREETYPE Resource resource = Resource (data ? hl_to_utf8 ((const uchar*)data->bytes) : NULL); Font *font = new Font (&resource, 0); if (font) { if (font->face) { return HLCFFIPointer (font, (hl_finalizer)hl_gc_font); } else { delete font; } } #endif return 0; } value lime_font_load (value data) { if (val_is_string (data)) { return lime_font_load_file (data); } else { return lime_font_load_bytes (data); } } value lime_font_outline_decompose (value fontHandle, int size) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); return (value)font->Decompose (true, size); #else return alloc_null (); #endif } HL_PRIM vdynamic* HL_NAME(hl_font_outline_decompose) (HL_CFFIPointer* fontHandle, int size) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; return (vdynamic*)font->Decompose (false, size); #else return 0; #endif } value lime_font_render_glyph (value fontHandle, int index, value data) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); Bytes bytes (data); if (font->RenderGlyph (index, &bytes)) { return bytes.Value (data); } #endif return alloc_null (); } HL_PRIM Bytes* HL_NAME(hl_font_render_glyph) (HL_CFFIPointer* fontHandle, int index, Bytes* data) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; if (font->RenderGlyph (index, data)) { return data; } #endif return NULL; } value lime_font_render_glyphs (value fontHandle, value indices, value data) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); Bytes bytes (data); if (font->RenderGlyphs (indices, &bytes)) { return bytes.Value (data); } #endif return alloc_null (); } HL_PRIM Bytes* HL_NAME(hl_font_render_glyphs) (HL_CFFIPointer* fontHandle, hl_varray* indices, Bytes* data) { // #ifdef LIME_FREETYPE // Font *font = (Font*)fontHandle->ptr; // return font->RenderGlyphs (indices, &bytes); // #else return NULL; // #endif } void lime_font_set_size (value fontHandle, int fontSize, int dpi) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); font->SetSize (fontSize, dpi); #endif } HL_PRIM void HL_NAME(hl_font_set_size) (HL_CFFIPointer* fontHandle, int fontSize, int dpi) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; font->SetSize (fontSize, dpi); #endif } void lime_gamepad_add_mappings (value mappings) { int length = val_array_size (mappings); for (int i = 0; i < length; i++) { Gamepad::AddMapping (val_string (val_array_i (mappings, i))); } } HL_PRIM void HL_NAME(hl_gamepad_add_mappings) (hl_varray* mappings) { int length = mappings->size; hl_vstring** mappingsData = hl_aptr (mappings, hl_vstring*); for (int i = 0; i < length; i++) { Gamepad::AddMapping (hl_to_utf8 ((const uchar*)((*mappingsData++)->bytes))); } } void lime_gamepad_event_manager_register (value callback, value eventObject) { GamepadEvent::callback = new ValuePointer (callback); GamepadEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_gamepad_event_manager_register) (vclosure* callback, GamepadEvent* eventObject) { GamepadEvent::callback = new ValuePointer (callback); GamepadEvent::eventObject = new ValuePointer ((vobj*)eventObject); } value lime_gamepad_get_device_guid (int id) { const char* guid = Gamepad::GetDeviceGUID (id); if (guid) { value result = alloc_string (guid); delete guid; return result; } else { return alloc_null (); } } HL_PRIM vbyte* HL_NAME(hl_gamepad_get_device_guid) (int id) { const char* guid = Gamepad::GetDeviceGUID (id); if (guid) { return (vbyte*)guid; } else { return 0; } } value lime_gamepad_get_device_name (int id) { const char* name = Gamepad::GetDeviceName (id); return name ? alloc_string (name) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_gamepad_get_device_name) (int id) { return (vbyte*)Gamepad::GetDeviceName (id); } void lime_gamepad_rumble (int id, double lowFrequencyRumble, double highFrequencyRumble, int duration) { Gamepad::Rumble (id, lowFrequencyRumble, highFrequencyRumble, duration); } HL_PRIM void HL_NAME(hl_gamepad_rumble) (int id, double lowFrequencyRumble, double highFrequencyRumble, int duration) { Gamepad::Rumble (id, lowFrequencyRumble, highFrequencyRumble, duration); } value lime_gzip_compress (value buffer, value bytes) { #ifdef LIME_ZLIB Bytes data (buffer); Bytes result (bytes); Zlib::Compress (GZIP, &data, &result); return result.Value (bytes); #else return alloc_null (); #endif } HL_PRIM Bytes* HL_NAME(hl_gzip_compress) (Bytes* buffer, Bytes* bytes) { #ifdef LIME_ZLIB Zlib::Compress (GZIP, buffer, bytes); return bytes; #else return 0; #endif } value lime_gzip_decompress (value buffer, value bytes) { #ifdef LIME_ZLIB Bytes data (buffer); Bytes result (bytes); Zlib::Decompress (GZIP, &data, &result); return result.Value (bytes); #else return alloc_null (); #endif } HL_PRIM Bytes* HL_NAME(hl_gzip_decompress) (Bytes* buffer, Bytes* bytes) { #ifdef LIME_ZLIB Zlib::Decompress (GZIP, buffer, bytes); return bytes; #else return 0; #endif } void lime_haptic_vibrate (int period, int duration) { #ifdef IPHONE Haptic::Vibrate (period, duration); #endif } HL_PRIM void HL_NAME(hl_haptic_vibrate) (int period, int duration) { #ifdef IPHONE Haptic::Vibrate (period, duration); #endif } value lime_image_encode (value buffer, int type, int quality, value bytes) { ImageBuffer imageBuffer = ImageBuffer (buffer); Bytes data = Bytes (bytes); switch (type) { case 0: #ifdef LIME_PNG if (PNG::Encode (&imageBuffer, &data)) { return data.Value (bytes); } #endif break; case 1: #ifdef LIME_JPEG if (JPEG::Encode (&imageBuffer, &data, quality)) { return data.Value (bytes); } #endif break; default: break; } return alloc_null (); } HL_PRIM Bytes* HL_NAME(hl_image_encode) (ImageBuffer* buffer, int type, int quality, Bytes* bytes) { switch (type) { case 0: #ifdef LIME_PNG if (PNG::Encode (buffer, bytes)) { return bytes; } #endif break; case 1: #ifdef LIME_JPEG if (JPEG::Encode (buffer, bytes, quality)) { return bytes; } #endif break; default: break; } return 0; } value lime_image_load_bytes (value data, value buffer) { Resource resource; Bytes bytes; ImageBuffer imageBuffer = ImageBuffer (buffer); bytes.Set (data); resource = Resource (&bytes); #ifdef LIME_PNG if (PNG::Decode (&resource, &imageBuffer)) { return imageBuffer.Value (buffer); } #endif #ifdef LIME_JPEG if (JPEG::Decode (&resource, &imageBuffer)) { return imageBuffer.Value (buffer); } #endif return alloc_null (); } HL_PRIM ImageBuffer* HL_NAME(hl_image_load_bytes) (Bytes* data, ImageBuffer* buffer) { Resource resource = Resource (data); #ifdef LIME_PNG if (PNG::Decode (&resource, buffer)) { return buffer; } #endif #ifdef LIME_JPEG if (JPEG::Decode (&resource, buffer)) { return buffer; } #endif return 0; } value lime_image_load_file (value data, value buffer) { Resource resource = Resource (val_string (data)); ImageBuffer imageBuffer = ImageBuffer (buffer); #ifdef LIME_PNG if (PNG::Decode (&resource, &imageBuffer)) { return imageBuffer.Value (buffer); } #endif #ifdef LIME_JPEG if (JPEG::Decode (&resource, &imageBuffer)) { return imageBuffer.Value (buffer); } #endif return alloc_null (); } HL_PRIM ImageBuffer* HL_NAME(hl_image_load_file) (hl_vstring* data, ImageBuffer* buffer) { Resource resource = Resource (data); #ifdef LIME_PNG if (PNG::Decode (&resource, buffer)) { return buffer; } #endif #ifdef LIME_JPEG if (JPEG::Decode (&resource, buffer)) { return buffer; } #endif return 0; } value lime_image_load (value data, value buffer) { if (val_is_string (data)) { return lime_image_load_file (data, buffer); } else { return lime_image_load_bytes (data, buffer); } } void lime_image_data_util_color_transform (value image, value rect, value colorMatrix) { Image _image = Image (image); Rectangle _rect = Rectangle (rect); ColorMatrix _colorMatrix = ColorMatrix (colorMatrix); ImageDataUtil::ColorTransform (&_image, &_rect, &_colorMatrix); } HL_PRIM void HL_NAME(hl_image_data_util_color_transform) (Image* image, Rectangle* rect, ArrayBufferView* colorMatrix) { ColorMatrix _colorMatrix = ColorMatrix (colorMatrix); ImageDataUtil::ColorTransform (image, rect, &_colorMatrix); } void lime_image_data_util_copy_channel (value image, value sourceImage, value sourceRect, value destPoint, int srcChannel, int destChannel) { Image _image = Image (image); Image _sourceImage = Image (sourceImage); Rectangle _sourceRect = Rectangle (sourceRect); Vector2 _destPoint = Vector2 (destPoint); ImageDataUtil::CopyChannel (&_image, &_sourceImage, &_sourceRect, &_destPoint, srcChannel, destChannel); } HL_PRIM void HL_NAME(hl_image_data_util_copy_channel) (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int srcChannel, int destChannel) { ImageDataUtil::CopyChannel (image, sourceImage, sourceRect, destPoint, srcChannel, destChannel); } void lime_image_data_util_copy_pixels (value image, value sourceImage, value sourceRect, value destPoint, value alphaImage, value alphaPoint, bool mergeAlpha) { Image _image = Image (image); Image _sourceImage = Image (sourceImage); Rectangle _sourceRect = Rectangle (sourceRect); Vector2 _destPoint = Vector2 (destPoint); if (val_is_null (alphaImage)) { ImageDataUtil::CopyPixels (&_image, &_sourceImage, &_sourceRect, &_destPoint, 0, 0, mergeAlpha); } else { Image _alphaImage = Image (alphaImage); Vector2 _alphaPoint = Vector2 (alphaPoint); ImageDataUtil::CopyPixels (&_image, &_sourceImage, &_sourceRect, &_destPoint, &_alphaImage, &_alphaPoint, mergeAlpha); } } HL_PRIM void HL_NAME(hl_image_data_util_copy_pixels) (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, Image* alphaImage, Vector2* alphaPoint, bool mergeAlpha) { if (!alphaImage) { ImageDataUtil::CopyPixels (image, sourceImage, sourceRect, destPoint, NULL, NULL, mergeAlpha); } else { if (!alphaPoint) { Vector2 _alphaPoint = Vector2 (0, 0); ImageDataUtil::CopyPixels (image, sourceImage, sourceRect, destPoint, alphaImage, &_alphaPoint, mergeAlpha); } else { ImageDataUtil::CopyPixels (image, sourceImage, sourceRect, destPoint, alphaImage, alphaPoint, mergeAlpha); } } } void lime_image_data_util_fill_rect (value image, value rect, int rg, int ba) { Image _image = Image (image); Rectangle _rect = Rectangle (rect); int32_t color = (rg << 16) | ba; ImageDataUtil::FillRect (&_image, &_rect, color); } HL_PRIM void HL_NAME(hl_image_data_util_fill_rect) (Image* image, Rectangle* rect, int rg, int ba) { int32_t color = (rg << 16) | ba; ImageDataUtil::FillRect (image, rect, color); } void lime_image_data_util_flood_fill (value image, int x, int y, int rg, int ba) { Image _image = Image (image); int32_t color = (rg << 16) | ba; ImageDataUtil::FloodFill (&_image, x, y, color); } HL_PRIM void HL_NAME(hl_image_data_util_flood_fill) (Image* image, int x, int y, int rg, int ba) { int32_t color = (rg << 16) | ba; ImageDataUtil::FloodFill (image, x, y, color); } void lime_image_data_util_get_pixels (value image, value rect, int format, value bytes) { Image _image = Image (image); Rectangle _rect = Rectangle (rect); PixelFormat _format = (PixelFormat)format; Bytes pixels = Bytes (bytes); ImageDataUtil::GetPixels (&_image, &_rect, _format, &pixels); } HL_PRIM void HL_NAME(hl_image_data_util_get_pixels) (Image* image, Rectangle* rect, PixelFormat format, Bytes* bytes) { ImageDataUtil::GetPixels (image, rect, format, bytes); } void lime_image_data_util_merge (value image, value sourceImage, value sourceRect, value destPoint, int redMultiplier, int greenMultiplier, int blueMultiplier, int alphaMultiplier) { Image _image = Image (image); Image _sourceImage = Image (sourceImage); Rectangle _sourceRect = Rectangle (sourceRect); Vector2 _destPoint = Vector2 (destPoint); ImageDataUtil::Merge (&_image, &_sourceImage, &_sourceRect, &_destPoint, redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier); } HL_PRIM void HL_NAME(hl_image_data_util_merge) (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int redMultiplier, int greenMultiplier, int blueMultiplier, int alphaMultiplier) { ImageDataUtil::Merge (image, sourceImage, sourceRect, destPoint, redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier); } void lime_image_data_util_multiply_alpha (value image) { Image _image = Image (image); ImageDataUtil::MultiplyAlpha (&_image); } HL_PRIM void HL_NAME(hl_image_data_util_multiply_alpha) (Image* image) { ImageDataUtil::MultiplyAlpha (image); } void lime_image_data_util_resize (value image, value buffer, int width, int height) { Image _image = Image (image); ImageBuffer _buffer = ImageBuffer (buffer); ImageDataUtil::Resize (&_image, &_buffer, width, height); } HL_PRIM void HL_NAME(hl_image_data_util_resize) (Image* image, ImageBuffer* buffer, int width, int height) { ImageDataUtil::Resize (image, buffer, width, height); } void lime_image_data_util_set_format (value image, int format) { Image _image = Image (image); PixelFormat _format = (PixelFormat)format; ImageDataUtil::SetFormat (&_image, _format); } HL_PRIM void HL_NAME(hl_image_data_util_set_format) (Image* image, PixelFormat format) { ImageDataUtil::SetFormat (image, format); } void lime_image_data_util_set_pixels (value image, value rect, value bytes, int offset, int format, int endian) { Image _image = Image (image); Rectangle _rect = Rectangle (rect); Bytes _bytes (bytes); PixelFormat _format = (PixelFormat)format; Endian _endian = (Endian)endian; ImageDataUtil::SetPixels (&_image, &_rect, &_bytes, offset, _format, _endian); } HL_PRIM void HL_NAME(hl_image_data_util_set_pixels) (Image* image, Rectangle* rect, Bytes* bytes, int offset, PixelFormat format, Endian endian) { ImageDataUtil::SetPixels (image, rect, bytes, offset, format, endian); } int lime_image_data_util_threshold (value image, value sourceImage, value sourceRect, value destPoint, int operation, int thresholdRG, int thresholdBA, int colorRG, int colorBA, int maskRG, int maskBA, bool copySource) { Image _image = Image (image); Image _sourceImage = Image (sourceImage); Rectangle _sourceRect = Rectangle (sourceRect); Vector2 _destPoint = Vector2 (destPoint); int32_t threshold = (thresholdRG << 16) | thresholdBA; int32_t color = (colorRG << 16) | colorBA; int32_t mask = (maskRG << 16) | maskBA; return ImageDataUtil::Threshold (&_image, &_sourceImage, &_sourceRect, &_destPoint, operation, threshold, color, mask, copySource); } HL_PRIM int HL_NAME(hl_image_data_util_threshold) (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int operation, int thresholdRG, int thresholdBA, int colorRG, int colorBA, int maskRG, int maskBA, bool copySource) { int32_t threshold = (thresholdRG << 16) | thresholdBA; int32_t color = (colorRG << 16) | colorBA; int32_t mask = (maskRG << 16) | maskBA; return ImageDataUtil::Threshold (image, sourceImage, sourceRect, destPoint, operation, threshold, color, mask, copySource); } void lime_image_data_util_unmultiply_alpha (value image) { Image _image = Image (image); ImageDataUtil::UnmultiplyAlpha (&_image); } HL_PRIM void HL_NAME(hl_image_data_util_unmultiply_alpha) (Image* image) { ImageDataUtil::UnmultiplyAlpha (image); } double lime_jni_getenv () { #ifdef ANDROID return (uintptr_t)JNI::GetEnv (); #else return 0; #endif } HL_PRIM double HL_NAME(hl_jni_getenv) () { #ifdef ANDROID return (uintptr_t)JNI::GetEnv (); #else return 0; #endif } void lime_joystick_event_manager_register (value callback, value eventObject) { JoystickEvent::callback = new ValuePointer (callback); JoystickEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_joystick_event_manager_register) (vclosure* callback, JoystickEvent* eventObject) { JoystickEvent::callback = new ValuePointer (callback); JoystickEvent::eventObject = new ValuePointer ((vobj*)eventObject); } value lime_joystick_get_device_guid (int id) { const char* guid = Joystick::GetDeviceGUID (id); return guid ? alloc_string (guid) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_joystick_get_device_guid) (int id) { return (vbyte*)Joystick::GetDeviceGUID (id); } value lime_joystick_get_device_name (int id) { const char* name = Joystick::GetDeviceName (id); return name ? alloc_string (name) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_joystick_get_device_name) (int id) { return (vbyte*)Joystick::GetDeviceName (id); } int lime_joystick_get_num_axes (int id) { return Joystick::GetNumAxes (id); } HL_PRIM int HL_NAME(hl_joystick_get_num_axes) (int id) { return Joystick::GetNumAxes (id); } int lime_joystick_get_num_buttons (int id) { return Joystick::GetNumButtons (id); } HL_PRIM int HL_NAME(hl_joystick_get_num_buttons) (int id) { return Joystick::GetNumButtons (id); } int lime_joystick_get_num_hats (int id) { return Joystick::GetNumHats (id); } HL_PRIM int HL_NAME(hl_joystick_get_num_hats) (int id) { return Joystick::GetNumHats (id); } value lime_jpeg_decode_bytes (value data, bool decodeData, value buffer) { ImageBuffer imageBuffer (buffer); Bytes bytes (data); Resource resource = Resource (&bytes); #ifdef LIME_JPEG if (JPEG::Decode (&resource, &imageBuffer, decodeData)) { return imageBuffer.Value (buffer); } #endif return alloc_null (); } HL_PRIM ImageBuffer* HL_NAME(hl_jpeg_decode_bytes) (Bytes* data, bool decodeData, ImageBuffer* buffer) { Resource resource = Resource (data); #ifdef LIME_JPEG if (JPEG::Decode (&resource, buffer, decodeData)) { return buffer; } #endif return 0; } value lime_jpeg_decode_file (HxString path, bool decodeData, value buffer) { ImageBuffer imageBuffer (buffer); Resource resource = Resource (hxs_utf8 (path, nullptr)); #ifdef LIME_JPEG if (JPEG::Decode (&resource, &imageBuffer, decodeData)) { return imageBuffer.Value (buffer); } #endif return alloc_null (); } HL_PRIM ImageBuffer* HL_NAME(hl_jpeg_decode_file) (hl_vstring* path, bool decodeData, ImageBuffer* buffer) { Resource resource = Resource (path); #ifdef LIME_JPEG if (JPEG::Decode (&resource, buffer, decodeData)) { return buffer; } #endif return 0; } int lime_key_code_from_scan_code (int scanCode) { return KeyCode::FromScanCode (scanCode); } HL_PRIM int HL_NAME(hl_key_code_from_scan_code) (int scanCode) { return KeyCode::FromScanCode (scanCode); } int lime_key_code_to_scan_code (int keyCode) { return KeyCode::ToScanCode (keyCode); } HL_PRIM int HL_NAME(hl_key_code_to_scan_code) (int keyCode) { return KeyCode::ToScanCode (keyCode); } void lime_key_event_manager_register (value callback, value eventObject) { KeyEvent::callback = new ValuePointer (callback); KeyEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_key_event_manager_register) (vclosure* callback, KeyEvent* eventObject) { KeyEvent::callback = new ValuePointer (callback); KeyEvent::eventObject = new ValuePointer ((vobj*)eventObject); } value lime_locale_get_system_locale () { std::string* locale = Locale::GetSystemLocale (); if (!locale) { return alloc_null (); } else { value result = alloc_string (locale->c_str ()); delete locale; return result; } } HL_PRIM vbyte* HL_NAME(hl_locale_get_system_locale) () { std::string* locale = Locale::GetSystemLocale (); if (!locale) { return 0; } else { int size = locale->size (); char* _locale = (char*)malloc (size + 1); strncpy (_locale, locale->c_str (), size); _locale[size] = '\0'; delete locale; return (vbyte*)_locale; } } value lime_lzma_compress (value buffer, value bytes) { #ifdef LIME_LZMA Bytes data (buffer); Bytes result (bytes); LZMA::Compress (&data, &result); return result.Value (bytes); #else return alloc_null (); #endif } HL_PRIM Bytes* HL_NAME(hl_lzma_compress) (Bytes* buffer, Bytes* bytes) { #ifdef LIME_LZMA LZMA::Compress (buffer, bytes); return bytes; #else return 0; #endif } value lime_lzma_decompress (value buffer, value bytes) { #ifdef LIME_LZMA Bytes data (buffer); Bytes result (bytes); LZMA::Decompress (&data, &result); return result.Value (bytes); #else return alloc_null (); #endif } HL_PRIM Bytes* HL_NAME(hl_lzma_decompress) (Bytes* buffer, Bytes* bytes) { #ifdef LIME_LZMA LZMA::Decompress (buffer, bytes); return bytes; #else return 0; #endif } void lime_mouse_event_manager_register (value callback, value eventObject) { MouseEvent::callback = new ValuePointer (callback); MouseEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_mouse_event_manager_register) (vclosure* callback, MouseEvent* eventObject) { MouseEvent::callback = new ValuePointer (callback); MouseEvent::eventObject = new ValuePointer ((vobj*)eventObject); } void lime_neko_execute (HxString module) { #ifdef LIME_NEKO NekoVM::Execute (module.c_str ()); #endif } void lime_orientation_event_manager_register (value callback, value eventObject) { OrientationEvent::callback = new ValuePointer (callback); OrientationEvent::eventObject = new ValuePointer (eventObject); System::EnableDeviceOrientationChange(true); } HL_PRIM void HL_NAME(hl_orientation_event_manager_register) (vclosure* callback, OrientationEvent* eventObject) { OrientationEvent::callback = new ValuePointer (callback); OrientationEvent::eventObject = new ValuePointer ((vobj*)eventObject); } value lime_png_decode_bytes (value data, bool decodeData, value buffer) { ImageBuffer imageBuffer (buffer); Bytes bytes (data); Resource resource = Resource (&bytes); #ifdef LIME_PNG if (PNG::Decode (&resource, &imageBuffer, decodeData)) { return imageBuffer.Value (buffer); } #endif return alloc_null (); } HL_PRIM ImageBuffer* HL_NAME(hl_png_decode_bytes) (Bytes* data, bool decodeData, ImageBuffer* buffer) { Resource resource = Resource (data); #ifdef LIME_PNG if (PNG::Decode (&resource, buffer, decodeData)) { return buffer; } #endif return 0; } value lime_png_decode_file (HxString path, bool decodeData, value buffer) { ImageBuffer imageBuffer (buffer); Resource resource = Resource (hxs_utf8 (path, nullptr)); #ifdef LIME_PNG if (PNG::Decode (&resource, &imageBuffer, decodeData)) { return imageBuffer.Value (buffer); } #endif return alloc_null (); } HL_PRIM ImageBuffer* HL_NAME(hl_png_decode_file) (hl_vstring* path, bool decodeData, ImageBuffer* buffer) { Resource resource = Resource (path); #ifdef LIME_PNG if (PNG::Decode (&resource, buffer, decodeData)) { return buffer; } #endif return 0; } void lime_render_event_manager_register (value callback, value eventObject) { RenderEvent::callback = new ValuePointer (callback); RenderEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_render_event_manager_register) (vclosure* callback, RenderEvent* eventObject) { RenderEvent::callback = new ValuePointer (callback); RenderEvent::eventObject = new ValuePointer ((vobj*)eventObject); } void lime_sensor_event_manager_register (value callback, value eventObject) { SensorEvent::callback = new ValuePointer (callback); SensorEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_sensor_event_manager_register) (vclosure* callback, SensorEvent* eventObject) { SensorEvent::callback = new ValuePointer (callback); SensorEvent::eventObject = new ValuePointer ((vobj*)eventObject); } bool lime_system_get_allow_screen_timeout () { return System::GetAllowScreenTimeout (); } HL_PRIM bool HL_NAME(hl_system_get_allow_screen_timeout) () { return System::GetAllowScreenTimeout (); } value lime_system_get_device_model () { std::wstring* model = System::GetDeviceModel (); if (model) { value result = alloc_wstring (model->c_str ()); delete model; return result; } else { return alloc_null (); } } HL_PRIM vbyte* HL_NAME(hl_system_get_device_model) () { #ifndef EMSCRIPTEN std::wstring* model = System::GetDeviceModel (); if (model) { vbyte* const result = hl_wstring_to_utf8_bytes (*model); delete model; return result; } #endif return 0; } value lime_system_get_device_vendor () { std::wstring* vendor = System::GetDeviceVendor (); if (vendor) { value result = alloc_wstring (vendor->c_str ()); delete vendor; return result; } else { return alloc_null (); } } HL_PRIM vbyte* HL_NAME(hl_system_get_device_vendor) () { #ifndef EMSCRIPTEN std::wstring* vendor = System::GetDeviceVendor (); if (vendor) { vbyte* const result = hl_wstring_to_utf8_bytes (*vendor); delete vendor; return result; } #endif return 0; } value lime_system_get_directory (int type, HxString company, HxString title) { std::wstring* path = System::GetDirectory ((SystemDirectory)type, hxs_utf8 (company, nullptr), hxs_utf8 (title, nullptr)); if (path) { value result = alloc_wstring (path->c_str ()); delete path; return result; } else { return alloc_null (); } } HL_PRIM vbyte* HL_NAME(hl_system_get_directory) (int type, hl_vstring* company, hl_vstring* title) { #ifndef EMSCRIPTEN std::wstring* path = System::GetDirectory ((SystemDirectory)type, company ? (char*)hl_to_utf8 ((const uchar*)company->bytes) : NULL, title ? (char*)hl_to_utf8 ((const uchar*)title->bytes) : NULL); if (path) { vbyte* const result = hl_wstring_to_utf8_bytes (*path); delete path; return result; } #endif return 0; } value lime_system_get_display (int id) { return (value)System::GetDisplay (true, id); } HL_PRIM vdynamic* HL_NAME(hl_system_get_display) (int id) { return (vdynamic*)System::GetDisplay (false, id); } bool lime_system_get_ios_tablet () { #ifdef IPHONE return System::GetIOSTablet (); #else return false; #endif } HL_PRIM bool HL_NAME(hl_system_get_ios_tablet) () { #ifdef IPHONE return System::GetIOSTablet (); #else return false; #endif } int lime_system_get_num_displays () { return System::GetNumDisplays (); } HL_PRIM int HL_NAME(hl_system_get_num_displays) () { return System::GetNumDisplays (); } int lime_system_get_device_orientation () { return System::GetDeviceOrientation(); } HL_PRIM int HL_NAME(hl_system_get_device_orientation) () { return System::GetDeviceOrientation(); } value lime_system_get_platform_label () { std::wstring* label = System::GetPlatformLabel (); if (label) { value result = alloc_wstring (label->c_str ()); delete label; return result; } else { return alloc_null (); } } HL_PRIM vbyte* HL_NAME(hl_system_get_platform_label) () { #ifndef EMSCRIPTEN std::wstring* label = System::GetPlatformLabel (); if (label) { vbyte* const result = hl_wstring_to_utf8_bytes (*label); delete label; return result; } #endif return 0; } value lime_system_get_platform_name () { std::wstring* name = System::GetPlatformName (); if (name) { value result = alloc_wstring (name->c_str ()); delete name; return result; } else { return 0; } } HL_PRIM vbyte* HL_NAME(hl_system_get_platform_name) () { #ifndef EMSCRIPTEN std::wstring* name = System::GetPlatformName (); if (name) { vbyte* const result = hl_wstring_to_utf8_bytes (*name); delete name; return result; } #endif return 0; } value lime_system_get_platform_version () { std::wstring* version = System::GetPlatformVersion (); if (version) { value result = alloc_wstring (version->c_str ()); delete version; return result; } else { return alloc_null (); } } HL_PRIM vbyte* HL_NAME(hl_system_get_platform_version) () { #ifndef EMSCRIPTEN std::wstring* version = System::GetPlatformVersion (); if (version) { vbyte* const result = hl_wstring_to_utf8_bytes (*version); delete version; return result; } #endif return 0; } double lime_system_get_timer () { return System::GetTimer (); } HL_PRIM double HL_NAME(hl_system_get_timer) () { return System::GetTimer (); } int lime_system_get_windows_console_mode (int handleType) { #if defined (HX_WINDOWS) && !defined (HX_WINRT) return System::GetWindowsConsoleMode (handleType); #else return 0; #endif } HL_PRIM int HL_NAME(hl_system_get_windows_console_mode) (int handleType) { #if defined (HX_WINDOWS) && !defined (HX_WINRT) return System::GetWindowsConsoleMode (handleType); #else return 0; #endif } void lime_system_open_file (HxString path) { #ifdef IPHONE System::OpenFile (path.c_str ()); #endif } HL_PRIM void HL_NAME(hl_system_open_file) (vbyte* path) { #ifdef IPHONE System::OpenFile ((char*)path); #endif } void lime_system_open_url (HxString url, HxString target) { #ifdef IPHONE System::OpenURL (url.c_str (), target.c_str ()); #endif } HL_PRIM void HL_NAME(hl_system_open_url) (vbyte* url, vbyte* target) { #ifdef IPHONE System::OpenURL ((char*)url, (char*)target); #endif } bool lime_system_set_allow_screen_timeout (bool allow) { return System::SetAllowScreenTimeout (allow); } HL_PRIM bool HL_NAME(hl_system_set_allow_screen_timeout) (bool allow) { return System::SetAllowScreenTimeout (allow); } bool lime_system_set_windows_console_mode (int handleType, int mode) { #if defined (HX_WINDOWS) && !defined (HX_WINRT) return System::SetWindowsConsoleMode (handleType, mode); #else return false; #endif } HL_PRIM bool HL_NAME(hl_system_set_windows_console_mode) (int handleType, int mode) { #if defined (HX_WINDOWS) && !defined (HX_WINRT) return System::SetWindowsConsoleMode (handleType, mode); #else return false; #endif } void lime_text_event_manager_register (value callback, value eventObject) { TextEvent::callback = new ValuePointer (callback); TextEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_text_event_manager_register) (vclosure* callback, TextEvent* eventObject) { TextEvent::callback = new ValuePointer (callback); TextEvent::eventObject = new ValuePointer ((vobj*)eventObject); } void lime_touch_event_manager_register (value callback, value eventObject) { TouchEvent::callback = new ValuePointer (callback); TouchEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_touch_event_manager_register) (vclosure* callback, TouchEvent* eventObject) { TouchEvent::callback = new ValuePointer (callback); TouchEvent::eventObject = new ValuePointer ((vobj*)eventObject); } void lime_window_alert (value window, HxString message, HxString title) { Window* targetWindow = (Window*)val_data (window); targetWindow->Alert (hxs_utf8 (message, nullptr), hxs_utf8 (title, nullptr)); } HL_PRIM void HL_NAME(hl_window_alert) (HL_CFFIPointer* window, hl_vstring* message, hl_vstring* title) { Window* targetWindow = (Window*)window->ptr; const char *cmessage = message ? hl_to_utf8(message->bytes) : nullptr; const char *ctitle = title ? hl_to_utf8(title->bytes) : nullptr; targetWindow->Alert (cmessage, ctitle); } void lime_window_close (value window) { Window* targetWindow = (Window*)val_data (window); targetWindow->Close (); } HL_PRIM void HL_NAME(hl_window_close) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; targetWindow->Close (); } void lime_window_context_flip (value window) { ((Window*)val_data (window))->ContextFlip (); } HL_PRIM void HL_NAME(hl_window_context_flip) (HL_CFFIPointer* window) { ((Window*)window->ptr)->ContextFlip (); } value lime_window_context_lock (value window) { return (value)((Window*)val_data (window))->ContextLock (true); } HL_PRIM vdynamic* HL_NAME(hl_window_context_lock) (HL_CFFIPointer* window) { return (vdynamic*)((Window*)window->ptr)->ContextLock (false); } void lime_window_context_make_current (value window) { ((Window*)val_data (window))->ContextMakeCurrent (); } HL_PRIM void HL_NAME(hl_window_context_make_current) (HL_CFFIPointer* window) { ((Window*)window->ptr)->ContextMakeCurrent (); } void lime_window_context_unlock (value window) { ((Window*)val_data (window))->ContextUnlock (); } HL_PRIM void HL_NAME(hl_window_context_unlock) (HL_CFFIPointer* window) { ((Window*)window->ptr)->ContextUnlock (); } value lime_window_create (value application, int width, int height, int flags, HxString title) { Window* window = CreateWindow ((Application*)val_data (application), width, height, flags, hxs_utf8 (title, nullptr)); return CFFIPointer (window, gc_window); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_window_create) (HL_CFFIPointer* application, int width, int height, int flags, hl_vstring* title) { Window* window = CreateWindow ((Application*)application->ptr, width, height, flags, (const char*)hl_to_utf8 ((const uchar*)title->bytes)); return HLCFFIPointer (window, (hl_finalizer)hl_gc_window); } void lime_window_event_manager_register (value callback, value eventObject) { WindowEvent::callback = new ValuePointer (callback); WindowEvent::eventObject = new ValuePointer (eventObject); } HL_PRIM void HL_NAME(hl_window_event_manager_register) (vclosure* callback, WindowEvent* eventObject) { WindowEvent::callback = new ValuePointer (callback); WindowEvent::eventObject = new ValuePointer ((vobj*)eventObject); } void lime_window_focus (value window) { Window* targetWindow = (Window*)val_data (window); targetWindow->Focus (); } HL_PRIM void HL_NAME(hl_window_focus) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; targetWindow->Focus (); } double lime_window_get_context (value window) { Window* targetWindow = (Window*)val_data (window); return (uintptr_t)targetWindow->GetContext (); } HL_PRIM double HL_NAME(hl_window_get_context) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return (uintptr_t)targetWindow->GetContext (); } value lime_window_get_context_type (value window) { Window* targetWindow = (Window*)val_data (window); const char* type = targetWindow->GetContextType (); return type ? alloc_string (type) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_window_get_context_type) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return (vbyte*)targetWindow->GetContextType (); } int lime_window_get_display (value window) { Window* targetWindow = (Window*)val_data (window); return targetWindow->GetDisplay (); } HL_PRIM int HL_NAME(hl_window_get_display) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return targetWindow->GetDisplay (); } value lime_window_get_display_mode (value window) { Window* targetWindow = (Window*)val_data (window); DisplayMode displayMode; targetWindow->GetDisplayMode (&displayMode); return (value)displayMode.Value (); } HL_PRIM void HL_NAME(hl_window_get_display_mode) (HL_CFFIPointer* window, DisplayMode* result) { Window* targetWindow = (Window*)window->ptr; DisplayMode displayMode; targetWindow->GetDisplayMode (&displayMode); result->CopyFrom(&displayMode); } int lime_window_get_height (value window) { Window* targetWindow = (Window*)val_data (window); return targetWindow->GetHeight (); } HL_PRIM int HL_NAME(hl_window_get_height) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return targetWindow->GetHeight (); } int32_t lime_window_get_id (value window) { Window* targetWindow = (Window*)val_data (window); return (int32_t)targetWindow->GetID (); } HL_PRIM int32_t HL_NAME(hl_window_get_id) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return (int32_t)targetWindow->GetID (); } bool lime_window_get_mouse_lock (value window) { Window* targetWindow = (Window*)val_data (window); return targetWindow->GetMouseLock (); } HL_PRIM bool HL_NAME(hl_window_get_mouse_lock) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return targetWindow->GetMouseLock (); } double lime_window_get_opacity (value window) { Window* targetWindow = (Window*)val_data (window); return (float)targetWindow->GetOpacity (); } HL_PRIM double HL_NAME(hl_window_get_opacity) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return (float)targetWindow->GetOpacity (); } double lime_window_get_scale (value window) { Window* targetWindow = (Window*)val_data (window); return targetWindow->GetScale (); } HL_PRIM double HL_NAME(hl_window_get_scale) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return targetWindow->GetScale (); } bool lime_window_get_text_input_enabled (value window) { Window* targetWindow = (Window*)val_data (window); return targetWindow->GetTextInputEnabled (); } HL_PRIM bool HL_NAME(hl_window_get_text_input_enabled) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return targetWindow->GetTextInputEnabled (); } int lime_window_get_width (value window) { Window* targetWindow = (Window*)val_data (window); return targetWindow->GetWidth (); } HL_PRIM int HL_NAME(hl_window_get_width) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return targetWindow->GetWidth (); } int lime_window_get_x (value window) { Window* targetWindow = (Window*)val_data (window); return targetWindow->GetX (); } HL_PRIM int HL_NAME(hl_window_get_x) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return targetWindow->GetX (); } int lime_window_get_y (value window) { Window* targetWindow = (Window*)val_data (window); return targetWindow->GetY (); } HL_PRIM int HL_NAME(hl_window_get_y) (HL_CFFIPointer* window) { Window* targetWindow = (Window*)window->ptr; return targetWindow->GetY (); } void lime_window_move (value window, int x, int y) { Window* targetWindow = (Window*)val_data (window); targetWindow->Move (x, y); } HL_PRIM void HL_NAME(hl_window_move) (HL_CFFIPointer* window, int x, int y) { Window* targetWindow = (Window*)window->ptr; targetWindow->Move (x, y); } value lime_window_read_pixels (value window, value rect, value imageBuffer) { Window* targetWindow = (Window*)val_data (window); ImageBuffer buffer (imageBuffer); if (!val_is_null (rect)) { Rectangle _rect = Rectangle (rect); targetWindow->ReadPixels (&buffer, &_rect); } else { targetWindow->ReadPixels (&buffer, NULL); } return buffer.Value (imageBuffer); } HL_PRIM ImageBuffer* HL_NAME(hl_window_read_pixels) (HL_CFFIPointer* window, Rectangle* rect, ImageBuffer* imageBuffer) { Window* targetWindow = (Window*)window->ptr; if (rect) { targetWindow->ReadPixels (imageBuffer, rect); } else { targetWindow->ReadPixels (imageBuffer, NULL); } return imageBuffer; } void lime_window_resize (value window, int width, int height) { Window* targetWindow = (Window*)val_data (window); targetWindow->Resize (width, height); } HL_PRIM void HL_NAME(hl_window_resize) (HL_CFFIPointer* window, int width, int height) { Window* targetWindow = (Window*)window->ptr; targetWindow->Resize (width, height); } void lime_window_set_minimum_size (value window, int width, int height) { Window* targetWindow = (Window*)val_data (window); targetWindow->SetMinimumSize (width, height); } HL_PRIM void HL_NAME(hl_window_set_minimum_size) (HL_CFFIPointer* window, int width, int height) { Window* targetWindow = (Window*)window->ptr; targetWindow->SetMinimumSize (width, height); } void lime_window_set_maximum_size (value window, int width, int height) { Window* targetWindow = (Window*)val_data (window); targetWindow->SetMaximumSize (width, height); } HL_PRIM void HL_NAME(hl_window_set_maximum_size) (HL_CFFIPointer* window, int width, int height) { Window* targetWindow = (Window*)window->ptr; targetWindow->SetMaximumSize (width, height); } bool lime_window_set_borderless (value window, bool borderless) { Window* targetWindow = (Window*)val_data (window); return targetWindow->SetBorderless (borderless); } HL_PRIM bool HL_NAME(hl_window_set_borderless) (HL_CFFIPointer* window, bool borderless) { Window* targetWindow = (Window*)window->ptr; return targetWindow->SetBorderless (borderless); } void lime_window_set_cursor (value window, int cursor) { Window* targetWindow = (Window*)val_data (window); targetWindow->SetCursor ((Cursor)cursor); } HL_PRIM void HL_NAME(hl_window_set_cursor) (HL_CFFIPointer* window, int cursor) { Window* targetWindow = (Window*)window->ptr; targetWindow->SetCursor ((Cursor)cursor); } value lime_window_set_display_mode (value window, value displayMode) { Window* targetWindow = (Window*)val_data (window); DisplayMode _displayMode (displayMode); targetWindow->SetDisplayMode (&_displayMode); targetWindow->GetDisplayMode (&_displayMode); return (value)_displayMode.Value (); } HL_PRIM void HL_NAME(hl_window_set_display_mode) (HL_CFFIPointer* window, DisplayMode* displayMode, DisplayMode* result) { Window* targetWindow = (Window*)window->ptr; targetWindow->SetDisplayMode (displayMode); targetWindow->GetDisplayMode (displayMode); result->CopyFrom(displayMode); } bool lime_window_set_fullscreen (value window, bool fullscreen) { Window* targetWindow = (Window*)val_data (window); return targetWindow->SetFullscreen (fullscreen); } HL_PRIM bool HL_NAME(hl_window_set_fullscreen) (HL_CFFIPointer* window, bool fullscreen) { Window* targetWindow = (Window*)window->ptr; return targetWindow->SetFullscreen (fullscreen); } void lime_window_set_icon (value window, value buffer) { Window* targetWindow = (Window*)val_data (window); ImageBuffer imageBuffer = ImageBuffer (buffer); targetWindow->SetIcon (&imageBuffer); } HL_PRIM void HL_NAME(hl_window_set_icon) (HL_CFFIPointer* window, ImageBuffer* buffer) { Window* targetWindow = (Window*)window->ptr; targetWindow->SetIcon (buffer); } bool lime_window_set_maximized (value window, bool maximized) { Window* targetWindow = (Window*)val_data(window); return targetWindow->SetMaximized (maximized); } HL_PRIM bool HL_NAME(hl_window_set_maximized) (HL_CFFIPointer* window, bool maximized) { Window* targetWindow = (Window*)window->ptr; return targetWindow->SetMaximized (maximized); } bool lime_window_set_minimized (value window, bool minimized) { Window* targetWindow = (Window*)val_data (window); return targetWindow->SetMinimized (minimized); } HL_PRIM bool HL_NAME(hl_window_set_minimized) (HL_CFFIPointer* window, bool minimized) { Window* targetWindow = (Window*)window->ptr; return targetWindow->SetMinimized (minimized); } void lime_window_set_mouse_lock (value window, bool mouseLock) { Window* targetWindow = (Window*)val_data (window); targetWindow->SetMouseLock (mouseLock); } HL_PRIM void HL_NAME(hl_window_set_mouse_lock) (HL_CFFIPointer* window, bool mouseLock) { Window* targetWindow = (Window*)window->ptr; targetWindow->SetMouseLock (mouseLock); } void lime_window_set_opacity (value window, double opacity) { Window* targetWindow = (Window*)val_data (window); targetWindow->SetOpacity ((float)opacity); } HL_PRIM void HL_NAME(hl_window_set_opacity) (HL_CFFIPointer* window, double opacity) { Window* targetWindow = (Window*)window->ptr; targetWindow->SetOpacity ((float)opacity); } bool lime_window_set_resizable (value window, bool resizable) { Window* targetWindow = (Window*)val_data (window); return targetWindow->SetResizable (resizable); } HL_PRIM bool HL_NAME(hl_window_set_resizable) (HL_CFFIPointer* window, bool resizable) { Window* targetWindow = (Window*)window->ptr; return targetWindow->SetResizable (resizable); } void lime_window_set_text_input_enabled (value window, bool enabled) { Window* targetWindow = (Window*)val_data (window); targetWindow->SetTextInputEnabled (enabled); } HL_PRIM void HL_NAME(hl_window_set_text_input_enabled) (HL_CFFIPointer* window, bool enabled) { Window* targetWindow = (Window*)window->ptr; targetWindow->SetTextInputEnabled (enabled); } void lime_window_set_text_input_rect (value window, value rect) { Window* targetWindow = (Window*)val_data (window); Rectangle _rect = Rectangle (rect); targetWindow->SetTextInputRect (&_rect); } HL_PRIM void HL_NAME(hl_window_set_text_input_rect) (HL_CFFIPointer* window, Rectangle* rect) { Window* targetWindow = (Window*)window->ptr; targetWindow->SetTextInputRect (rect); } value lime_window_set_title (value window, HxString title) { Window* targetWindow = (Window*)val_data (window); const char* titleUtf8 = hxs_utf8 (title, nullptr); const char* result = targetWindow->SetTitle (titleUtf8); if (result) { value _result = alloc_string (result); if (result != titleUtf8) { free ((char*) result); } return _result; } else { return alloc_null (); } } HL_PRIM hl_vstring* HL_NAME(hl_window_set_title) (HL_CFFIPointer* window, hl_vstring* title) { Window* targetWindow = (Window*)window->ptr; const char* result = targetWindow->SetTitle ((char*)hl_to_utf8 ((const uchar*)title->bytes)); if (result) { return title; } else { return 0; } } bool lime_window_set_visible (value window, bool visible) { Window* targetWindow = (Window*)val_data (window); return targetWindow->SetVisible (visible); } HL_PRIM bool HL_NAME(hl_window_set_visible) (HL_CFFIPointer* window, bool visible) { Window* targetWindow = (Window*)window->ptr; return targetWindow->SetVisible (visible); } void lime_window_warp_mouse (value window, int x, int y) { Window* targetWindow = (Window*)val_data (window); targetWindow->WarpMouse (x, y); } HL_PRIM void HL_NAME(hl_window_warp_mouse) (HL_CFFIPointer* window, int x, int y) { Window* targetWindow = (Window*)window->ptr; targetWindow->WarpMouse (x, y); } value lime_zlib_compress (value buffer, value bytes) { #ifdef LIME_ZLIB Bytes data (buffer); Bytes result (bytes); Zlib::Compress (ZLIB, &data, &result); return result.Value (bytes); #else return alloc_null (); #endif } HL_PRIM Bytes* HL_NAME(hl_zlib_compress) (Bytes* buffer, Bytes* bytes) { #ifdef LIME_ZLIB Zlib::Compress (ZLIB, buffer, bytes); return bytes; #else return 0; #endif } value lime_zlib_decompress (value buffer, value bytes) { #ifdef LIME_ZLIB Bytes data (buffer); Bytes result (bytes); Zlib::Decompress (ZLIB, &data, &result); return result.Value (bytes); #else return alloc_null (); #endif } HL_PRIM Bytes* HL_NAME(hl_zlib_decompress) (Bytes* buffer, Bytes* bytes) { #ifdef LIME_ZLIB Zlib::Decompress (ZLIB, buffer, bytes); return bytes; #else return 0; #endif } DEFINE_PRIME0 (lime_application_create); DEFINE_PRIME2v (lime_application_event_manager_register); DEFINE_PRIME1 (lime_application_exec); DEFINE_PRIME1v (lime_application_init); DEFINE_PRIME1 (lime_application_quit); DEFINE_PRIME2v (lime_application_set_frame_rate); DEFINE_PRIME1 (lime_application_update); DEFINE_PRIME2 (lime_audio_load); DEFINE_PRIME2 (lime_audio_load_bytes); DEFINE_PRIME2 (lime_audio_load_file); DEFINE_PRIME3 (lime_bytes_from_data_pointer); DEFINE_PRIME1 (lime_bytes_get_data_pointer); DEFINE_PRIME2 (lime_bytes_get_data_pointer_offset); DEFINE_PRIME2 (lime_bytes_read_file); DEFINE_PRIME1 (lime_cffi_get_native_pointer); DEFINE_PRIME1 (lime_cffi_set_finalizer); DEFINE_PRIME2v (lime_clipboard_event_manager_register); DEFINE_PRIME0 (lime_clipboard_get_text); DEFINE_PRIME1v (lime_clipboard_set_text); DEFINE_PRIME2 (lime_data_pointer_offset); DEFINE_PRIME2 (lime_deflate_compress); DEFINE_PRIME2 (lime_deflate_decompress); DEFINE_PRIME2v (lime_drop_event_manager_register); DEFINE_PRIME3 (lime_file_dialog_open_directory); DEFINE_PRIME3 (lime_file_dialog_open_file); DEFINE_PRIME3 (lime_file_dialog_open_files); DEFINE_PRIME3 (lime_file_dialog_save_file); DEFINE_PRIME1 (lime_file_watcher_create); DEFINE_PRIME3 (lime_file_watcher_add_directory); DEFINE_PRIME2v (lime_file_watcher_remove_directory); DEFINE_PRIME1v (lime_file_watcher_update); DEFINE_PRIME1 (lime_font_get_ascender); DEFINE_PRIME1 (lime_font_get_descender); DEFINE_PRIME1 (lime_font_get_family_name); DEFINE_PRIME2 (lime_font_get_glyph_index); DEFINE_PRIME2 (lime_font_get_glyph_indices); DEFINE_PRIME2 (lime_font_get_glyph_metrics); DEFINE_PRIME1 (lime_font_get_height); DEFINE_PRIME1 (lime_font_get_num_glyphs); DEFINE_PRIME1 (lime_font_get_underline_position); DEFINE_PRIME1 (lime_font_get_underline_thickness); DEFINE_PRIME1 (lime_font_get_strikethrough_position); DEFINE_PRIME1 (lime_font_get_strikethrough_thickness); DEFINE_PRIME1 (lime_font_get_units_per_em); DEFINE_PRIME1 (lime_font_load); DEFINE_PRIME1 (lime_font_load_bytes); DEFINE_PRIME1 (lime_font_load_file); DEFINE_PRIME2 (lime_font_outline_decompose); DEFINE_PRIME3 (lime_font_render_glyph); DEFINE_PRIME3 (lime_font_render_glyphs); DEFINE_PRIME3v (lime_font_set_size); DEFINE_PRIME1v (lime_gamepad_add_mappings); DEFINE_PRIME2v (lime_gamepad_event_manager_register); DEFINE_PRIME1 (lime_gamepad_get_device_guid); DEFINE_PRIME1 (lime_gamepad_get_device_name); DEFINE_PRIME4v (lime_gamepad_rumble); DEFINE_PRIME2 (lime_gzip_compress); DEFINE_PRIME2 (lime_gzip_decompress); DEFINE_PRIME2v (lime_haptic_vibrate); DEFINE_PRIME3v (lime_image_data_util_color_transform); DEFINE_PRIME6v (lime_image_data_util_copy_channel); DEFINE_PRIME7v (lime_image_data_util_copy_pixels); DEFINE_PRIME4v (lime_image_data_util_fill_rect); DEFINE_PRIME5v (lime_image_data_util_flood_fill); DEFINE_PRIME4v (lime_image_data_util_get_pixels); DEFINE_PRIME8v (lime_image_data_util_merge); DEFINE_PRIME1v (lime_image_data_util_multiply_alpha); DEFINE_PRIME4v (lime_image_data_util_resize); DEFINE_PRIME2v (lime_image_data_util_set_format); DEFINE_PRIME6v (lime_image_data_util_set_pixels); DEFINE_PRIME12 (lime_image_data_util_threshold); DEFINE_PRIME1v (lime_image_data_util_unmultiply_alpha); DEFINE_PRIME4 (lime_image_encode); DEFINE_PRIME2 (lime_image_load); DEFINE_PRIME2 (lime_image_load_bytes); DEFINE_PRIME2 (lime_image_load_file); DEFINE_PRIME0 (lime_jni_getenv); DEFINE_PRIME2v (lime_joystick_event_manager_register); DEFINE_PRIME1 (lime_joystick_get_device_guid); DEFINE_PRIME1 (lime_joystick_get_device_name); DEFINE_PRIME1 (lime_joystick_get_num_axes); DEFINE_PRIME1 (lime_joystick_get_num_buttons); DEFINE_PRIME1 (lime_joystick_get_num_hats); DEFINE_PRIME3 (lime_jpeg_decode_bytes); DEFINE_PRIME3 (lime_jpeg_decode_file); DEFINE_PRIME1 (lime_key_code_from_scan_code); DEFINE_PRIME1 (lime_key_code_to_scan_code); DEFINE_PRIME2v (lime_key_event_manager_register); DEFINE_PRIME0 (lime_locale_get_system_locale); DEFINE_PRIME2 (lime_lzma_compress); DEFINE_PRIME2 (lime_lzma_decompress); DEFINE_PRIME2v (lime_mouse_event_manager_register); DEFINE_PRIME1v (lime_neko_execute); DEFINE_PRIME2v (lime_orientation_event_manager_register); DEFINE_PRIME3 (lime_png_decode_bytes); DEFINE_PRIME3 (lime_png_decode_file); DEFINE_PRIME2v (lime_render_event_manager_register); DEFINE_PRIME2v (lime_sensor_event_manager_register); DEFINE_PRIME0 (lime_system_get_allow_screen_timeout); DEFINE_PRIME0 (lime_system_get_device_model); DEFINE_PRIME0 (lime_system_get_device_vendor); DEFINE_PRIME3 (lime_system_get_directory); DEFINE_PRIME1 (lime_system_get_display); DEFINE_PRIME0 (lime_system_get_ios_tablet); DEFINE_PRIME0 (lime_system_get_num_displays); DEFINE_PRIME0 (lime_system_get_device_orientation); DEFINE_PRIME0 (lime_system_get_platform_label); DEFINE_PRIME0 (lime_system_get_platform_name); DEFINE_PRIME0 (lime_system_get_platform_version); DEFINE_PRIME0 (lime_system_get_timer); DEFINE_PRIME1 (lime_system_get_windows_console_mode); DEFINE_PRIME1v (lime_system_open_file); DEFINE_PRIME2v (lime_system_open_url); DEFINE_PRIME1 (lime_system_set_allow_screen_timeout); DEFINE_PRIME2 (lime_system_set_windows_console_mode); DEFINE_PRIME2v (lime_text_event_manager_register); DEFINE_PRIME2v (lime_touch_event_manager_register); DEFINE_PRIME3v (lime_window_alert); DEFINE_PRIME1v (lime_window_close); DEFINE_PRIME1v (lime_window_context_flip); DEFINE_PRIME1 (lime_window_context_lock); DEFINE_PRIME1v (lime_window_context_make_current); DEFINE_PRIME1v (lime_window_context_unlock); DEFINE_PRIME5 (lime_window_create); DEFINE_PRIME2v (lime_window_event_manager_register); DEFINE_PRIME1v (lime_window_focus); DEFINE_PRIME1 (lime_window_get_context); DEFINE_PRIME1 (lime_window_get_context_type); DEFINE_PRIME1 (lime_window_get_display); DEFINE_PRIME1 (lime_window_get_display_mode); DEFINE_PRIME1 (lime_window_get_height); DEFINE_PRIME1 (lime_window_get_id); DEFINE_PRIME1 (lime_window_get_mouse_lock); DEFINE_PRIME1 (lime_window_get_scale); DEFINE_PRIME1 (lime_window_get_text_input_enabled); DEFINE_PRIME1 (lime_window_get_width); DEFINE_PRIME1 (lime_window_get_x); DEFINE_PRIME1 (lime_window_get_y); DEFINE_PRIME3v (lime_window_move); DEFINE_PRIME3 (lime_window_read_pixels); DEFINE_PRIME3v (lime_window_resize); DEFINE_PRIME3v (lime_window_set_minimum_size); DEFINE_PRIME3v (lime_window_set_maximum_size); DEFINE_PRIME2 (lime_window_set_borderless); DEFINE_PRIME2v (lime_window_set_cursor); DEFINE_PRIME2 (lime_window_set_display_mode); DEFINE_PRIME2 (lime_window_set_fullscreen); DEFINE_PRIME2v (lime_window_set_icon); DEFINE_PRIME2 (lime_window_set_maximized); DEFINE_PRIME2 (lime_window_set_minimized); DEFINE_PRIME2v (lime_window_set_mouse_lock); DEFINE_PRIME2 (lime_window_set_resizable); DEFINE_PRIME2v (lime_window_set_text_input_enabled); DEFINE_PRIME2v (lime_window_set_text_input_rect); DEFINE_PRIME2 (lime_window_set_title); DEFINE_PRIME2 (lime_window_set_visible); DEFINE_PRIME3v (lime_window_warp_mouse); DEFINE_PRIME1 (lime_window_get_opacity); DEFINE_PRIME2v (lime_window_set_opacity); DEFINE_PRIME2 (lime_zlib_compress); DEFINE_PRIME2 (lime_zlib_decompress); #define _ENUM "?" // #define _TCFFIPOINTER _ABSTRACT (HL_CFFIPointer) #define _TAPPLICATION_EVENT _OBJ (_I32 _I32) #define _TBYTES _OBJ (_I32 _BYTES) #define _TCFFIPOINTER _DYN #define _TCLIPBOARD_EVENT _OBJ (_I32) #define _TDISPLAYMODE _OBJ (_I32 _I32 _I32 _I32) #define _TDROP_EVENT _OBJ (_BYTES _I32) #define _TGAMEPAD_EVENT _OBJ (_I32 _I32 _I32 _I32 _F64) #define _TJOYSTICK_EVENT _OBJ (_I32 _I32 _I32 _I32 _F64 _F64) #define _TKEY_EVENT _OBJ (_F64 _I32 _I32 _I32) #define _TMOUSE_EVENT _OBJ (_I32 _F64 _F64 _I32 _I32 _F64 _F64 _I32) #define _TORIENTATION_EVENT _OBJ (_I32 _I32 _I32) #define _TRECTANGLE _OBJ (_F64 _F64 _F64 _F64) #define _TRENDER_EVENT _OBJ (_I32) #define _TSENSOR_EVENT _OBJ (_I32 _F64 _F64 _F64 _I32) #define _TTEXT_EVENT _OBJ (_I32 _I32 _I32 _BYTES _I32 _I32) #define _TTOUCH_EVENT _OBJ (_I32 _F64 _F64 _I32 _F64 _I32 _F64 _F64) #define _TVECTOR2 _OBJ (_F64 _F64) #define _TVORBISFILE _OBJ (_I32 _DYN) #define _TWINDOW_EVENT _OBJ (_I32 _I32 _I32 _I32 _I32 _I32) #define _TARRAYBUFFER _TBYTES #define _TARRAYBUFFERVIEW _OBJ (_I32 _TARRAYBUFFER _I32 _I32 _I32 _I32) #define _TAUDIOBUFFER _OBJ (_I32 _I32 _TARRAYBUFFERVIEW _I32 _DYN _DYN _DYN _DYN _DYN _TVORBISFILE) #define _TIMAGEBUFFER _OBJ (_I32 _TARRAYBUFFERVIEW _I32 _I32 _BOOL _BOOL _I32 _DYN _DYN _DYN _DYN _DYN _DYN) #define _TIMAGE _OBJ (_TIMAGEBUFFER _BOOL _I32 _I32 _I32 _TRECTANGLE _ENUM _I32 _I32 _F64 _F64) #define _TARRAY _OBJ (_BYTES _I32) #define _TARRAY2 _OBJ (_ARR) DEFINE_HL_PRIM (_TCFFIPOINTER, hl_application_create, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_application_event_manager_register, _FUN(_VOID, _NO_ARG) _TAPPLICATION_EVENT); DEFINE_HL_PRIM (_I32, hl_application_exec, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_application_init, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_application_quit, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_application_set_frame_rate, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_BOOL, hl_application_update, _TCFFIPOINTER); DEFINE_HL_PRIM (_TAUDIOBUFFER, hl_audio_load_bytes, _TBYTES _TAUDIOBUFFER); DEFINE_HL_PRIM (_TAUDIOBUFFER, hl_audio_load_file, _STRING _TAUDIOBUFFER); DEFINE_HL_PRIM (_TBYTES, hl_bytes_from_data_pointer, _F64 _I32 _TBYTES); DEFINE_HL_PRIM (_F64, hl_bytes_get_data_pointer, _TBYTES); DEFINE_HL_PRIM (_F64, hl_bytes_get_data_pointer_offset, _TBYTES _I32); DEFINE_HL_PRIM (_TBYTES, hl_bytes_read_file, _STRING _TBYTES); DEFINE_HL_PRIM (_F64, hl_cffi_get_native_pointer, _TCFFIPOINTER); // DEFINE_PRIME1 (lime_cffi_set_finalizer); DEFINE_HL_PRIM (_VOID, hl_clipboard_event_manager_register, _FUN(_VOID, _NO_ARG) _TCLIPBOARD_EVENT); DEFINE_HL_PRIM (_BYTES, hl_clipboard_get_text, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_clipboard_set_text, _STRING); DEFINE_HL_PRIM (_F64, hl_data_pointer_offset, _F64 _I32); DEFINE_HL_PRIM (_TBYTES, hl_deflate_compress, _TBYTES _TBYTES); DEFINE_HL_PRIM (_TBYTES, hl_deflate_decompress, _TBYTES _TBYTES); DEFINE_HL_PRIM (_VOID, hl_drop_event_manager_register, _FUN(_VOID, _NO_ARG) _TDROP_EVENT); DEFINE_HL_PRIM (_BYTES, hl_file_dialog_open_directory, _STRING _STRING _STRING); DEFINE_HL_PRIM (_BYTES, hl_file_dialog_open_file, _STRING _STRING _STRING); DEFINE_HL_PRIM (_ARR, hl_file_dialog_open_files, _STRING _STRING _STRING); DEFINE_HL_PRIM (_BYTES, hl_file_dialog_save_file, _STRING _STRING _STRING); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_file_watcher_create, _DYN); DEFINE_HL_PRIM (_I32, hl_file_watcher_add_directory, _TCFFIPOINTER _STRING _BOOL); DEFINE_HL_PRIM (_VOID, hl_file_watcher_remove_directory, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_file_watcher_update, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_font_get_ascender, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_font_get_descender, _TCFFIPOINTER); DEFINE_HL_PRIM (_BYTES, hl_font_get_family_name, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_font_get_glyph_index, _TCFFIPOINTER _STRING); DEFINE_HL_PRIM (_ARR, hl_font_get_glyph_indices, _TCFFIPOINTER _STRING); DEFINE_HL_PRIM (_DYN, hl_font_get_glyph_metrics, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_I32, hl_font_get_height, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_font_get_num_glyphs, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_font_get_underline_position, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_font_get_underline_thickness, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_font_get_strikethrough_position, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_font_get_strikethrough_thickness, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_font_get_units_per_em, _TCFFIPOINTER); // DEFINE_PRIME1 (lime_font_load); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_font_load_bytes, _TBYTES); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_font_load_file, _STRING); DEFINE_HL_PRIM (_DYN, hl_font_outline_decompose, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_TBYTES, hl_font_render_glyph, _TCFFIPOINTER _I32 _TBYTES); DEFINE_HL_PRIM (_TBYTES, hl_font_render_glyphs, _TCFFIPOINTER _ARR _TBYTES); DEFINE_HL_PRIM (_VOID, hl_font_set_size, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gamepad_add_mappings, _ARR); DEFINE_HL_PRIM (_VOID, hl_gamepad_event_manager_register, _FUN(_VOID, _NO_ARG) _TGAMEPAD_EVENT); DEFINE_HL_PRIM (_BYTES, hl_gamepad_get_device_guid, _I32); DEFINE_HL_PRIM (_BYTES, hl_gamepad_get_device_name, _I32); DEFINE_HL_PRIM (_VOID, hl_gamepad_rumble, _I32 _F64 _F64 _I32); DEFINE_HL_PRIM (_TBYTES, hl_gzip_compress, _TBYTES _TBYTES); DEFINE_HL_PRIM (_TBYTES, hl_gzip_decompress, _TBYTES _TBYTES); DEFINE_HL_PRIM (_VOID, hl_haptic_vibrate, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_image_data_util_color_transform, _TIMAGE _TRECTANGLE _TARRAYBUFFERVIEW); DEFINE_HL_PRIM (_VOID, hl_image_data_util_copy_channel, _TIMAGE _TIMAGE _TRECTANGLE _TVECTOR2 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_image_data_util_copy_pixels, _TIMAGE _TIMAGE _TRECTANGLE _TVECTOR2 _TIMAGE _TVECTOR2 _BOOL); DEFINE_HL_PRIM (_VOID, hl_image_data_util_fill_rect, _TIMAGE _TRECTANGLE _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_image_data_util_flood_fill, _TIMAGE _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_image_data_util_get_pixels, _TIMAGE _TRECTANGLE _I32 _TBYTES); DEFINE_HL_PRIM (_VOID, hl_image_data_util_merge, _TIMAGE _TIMAGE _TRECTANGLE _TVECTOR2 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_image_data_util_multiply_alpha, _TIMAGE); DEFINE_HL_PRIM (_VOID, hl_image_data_util_resize, _TIMAGE _TIMAGEBUFFER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_image_data_util_set_format, _TIMAGE _I32); DEFINE_HL_PRIM (_VOID, hl_image_data_util_set_pixels, _TIMAGE _TRECTANGLE _TBYTES _I32 _I32 _I32); DEFINE_HL_PRIM (_I32, hl_image_data_util_threshold, _TIMAGE _TIMAGE _TRECTANGLE _TVECTOR2 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _BOOL); DEFINE_HL_PRIM (_VOID, hl_image_data_util_unmultiply_alpha, _TIMAGE); DEFINE_HL_PRIM (_TBYTES, hl_image_encode, _TIMAGEBUFFER _I32 _I32 _TBYTES); // DEFINE_PRIME2 (lime_image_load); DEFINE_HL_PRIM (_TIMAGEBUFFER, hl_image_load_bytes, _TBYTES _TIMAGEBUFFER); DEFINE_HL_PRIM (_TIMAGEBUFFER, hl_image_load_file, _STRING _TIMAGEBUFFER); DEFINE_HL_PRIM (_F64, hl_jni_getenv, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_joystick_event_manager_register, _FUN(_VOID, _NO_ARG) _TJOYSTICK_EVENT); DEFINE_HL_PRIM (_BYTES, hl_joystick_get_device_guid, _I32); DEFINE_HL_PRIM (_BYTES, hl_joystick_get_device_name, _I32); DEFINE_HL_PRIM (_I32, hl_joystick_get_num_axes, _I32); DEFINE_HL_PRIM (_I32, hl_joystick_get_num_buttons, _I32); DEFINE_HL_PRIM (_I32, hl_joystick_get_num_hats, _I32); DEFINE_HL_PRIM (_TIMAGEBUFFER, hl_jpeg_decode_bytes, _TBYTES _BOOL _TIMAGEBUFFER); DEFINE_HL_PRIM (_TIMAGEBUFFER, hl_jpeg_decode_file, _STRING _BOOL _TIMAGEBUFFER); DEFINE_HL_PRIM (_I32, hl_key_code_from_scan_code, _I32); DEFINE_HL_PRIM (_I32, hl_key_code_to_scan_code, _I32); DEFINE_HL_PRIM (_VOID, hl_key_event_manager_register, _FUN (_VOID, _NO_ARG) _TKEY_EVENT); DEFINE_HL_PRIM (_BYTES, hl_locale_get_system_locale, _NO_ARG); DEFINE_HL_PRIM (_TBYTES, hl_lzma_compress, _TBYTES _TBYTES); DEFINE_HL_PRIM (_TBYTES, hl_lzma_decompress, _TBYTES _TBYTES); DEFINE_HL_PRIM (_VOID, hl_mouse_event_manager_register, _FUN (_VOID, _NO_ARG) _TMOUSE_EVENT); // DEFINE_PRIME1v (lime_neko_execute); DEFINE_HL_PRIM (_VOID, hl_orientation_event_manager_register, _FUN (_VOID, _NO_ARG) _TORIENTATION_EVENT); DEFINE_HL_PRIM (_TIMAGEBUFFER, hl_png_decode_bytes, _TBYTES _BOOL _TIMAGEBUFFER); DEFINE_HL_PRIM (_TIMAGEBUFFER, hl_png_decode_file, _STRING _BOOL _TIMAGEBUFFER); DEFINE_HL_PRIM (_VOID, hl_render_event_manager_register, _FUN (_VOID, _NO_ARG) _TRENDER_EVENT); DEFINE_HL_PRIM (_VOID, hl_sensor_event_manager_register, _FUN (_VOID, _NO_ARG) _TSENSOR_EVENT); DEFINE_HL_PRIM (_BOOL, hl_system_get_allow_screen_timeout, _NO_ARG); DEFINE_HL_PRIM (_BYTES, hl_system_get_device_model, _NO_ARG); DEFINE_HL_PRIM (_BYTES, hl_system_get_device_vendor, _NO_ARG); DEFINE_HL_PRIM (_BYTES, hl_system_get_directory, _I32 _STRING _STRING); DEFINE_HL_PRIM (_DYN, hl_system_get_display, _I32); DEFINE_HL_PRIM (_BOOL, hl_system_get_ios_tablet, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_system_get_num_displays, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_system_get_device_orientation, _NO_ARG); DEFINE_HL_PRIM (_BYTES, hl_system_get_platform_label, _NO_ARG); DEFINE_HL_PRIM (_BYTES, hl_system_get_platform_name, _NO_ARG); DEFINE_HL_PRIM (_BYTES, hl_system_get_platform_version, _NO_ARG); DEFINE_HL_PRIM (_F64, hl_system_get_timer, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_system_get_windows_console_mode, _I32); DEFINE_HL_PRIM (_VOID, hl_system_open_file, _STRING); DEFINE_HL_PRIM (_VOID, hl_system_open_url, _STRING _STRING); DEFINE_HL_PRIM (_BOOL, hl_system_set_allow_screen_timeout, _BOOL); DEFINE_HL_PRIM (_BOOL, hl_system_set_windows_console_mode, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_text_event_manager_register, _FUN (_VOID, _NO_ARG) _TTEXT_EVENT); DEFINE_HL_PRIM (_VOID, hl_touch_event_manager_register, _FUN (_VOID, _NO_ARG) _TTOUCH_EVENT); DEFINE_HL_PRIM (_VOID, hl_window_alert, _TCFFIPOINTER _STRING _STRING); DEFINE_HL_PRIM (_VOID, hl_window_close, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_window_context_flip, _TCFFIPOINTER); DEFINE_HL_PRIM (_DYN, hl_window_context_lock, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_window_context_make_current, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_window_context_unlock, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_window_create, _TCFFIPOINTER _I32 _I32 _I32 _STRING); DEFINE_HL_PRIM (_VOID, hl_window_event_manager_register, _FUN (_VOID, _NO_ARG) _TWINDOW_EVENT); DEFINE_HL_PRIM (_VOID, hl_window_focus, _TCFFIPOINTER); DEFINE_HL_PRIM (_F64, hl_window_get_context, _TCFFIPOINTER); DEFINE_HL_PRIM (_BYTES, hl_window_get_context_type, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_window_get_display, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_window_get_display_mode, _TCFFIPOINTER _TDISPLAYMODE); DEFINE_HL_PRIM (_I32, hl_window_get_height, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_window_get_id, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_window_get_mouse_lock, _TCFFIPOINTER); DEFINE_HL_PRIM (_F64, hl_window_get_scale, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_window_get_text_input_enabled, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_window_get_width, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_window_get_x, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_window_get_y, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_window_move, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_DYN, hl_window_read_pixels, _TCFFIPOINTER _TRECTANGLE _TIMAGEBUFFER); DEFINE_HL_PRIM (_VOID, hl_window_resize, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_window_set_minimum_size, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_window_set_maximum_size, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_BOOL, hl_window_set_borderless, _TCFFIPOINTER _BOOL); DEFINE_HL_PRIM (_VOID, hl_window_set_cursor, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_window_set_display_mode, _TCFFIPOINTER _TDISPLAYMODE _TDISPLAYMODE); DEFINE_HL_PRIM (_BOOL, hl_window_set_fullscreen, _TCFFIPOINTER _BOOL); DEFINE_HL_PRIM (_VOID, hl_window_set_icon, _TCFFIPOINTER _TIMAGEBUFFER); DEFINE_HL_PRIM (_BOOL, hl_window_set_maximized, _TCFFIPOINTER _BOOL); DEFINE_HL_PRIM (_BOOL, hl_window_set_minimized, _TCFFIPOINTER _BOOL); DEFINE_HL_PRIM (_VOID, hl_window_set_mouse_lock, _TCFFIPOINTER _BOOL); DEFINE_HL_PRIM (_BOOL, hl_window_set_resizable, _TCFFIPOINTER _BOOL); DEFINE_HL_PRIM (_VOID, hl_window_set_text_input_enabled, _TCFFIPOINTER _BOOL); DEFINE_HL_PRIM (_VOID, hl_window_set_text_input_rect, _TCFFIPOINTER _TRECTANGLE); DEFINE_HL_PRIM (_STRING, hl_window_set_title, _TCFFIPOINTER _STRING); DEFINE_HL_PRIM (_BOOL, hl_window_set_visible, _TCFFIPOINTER _BOOL); DEFINE_HL_PRIM (_VOID, hl_window_warp_mouse, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_F64, hl_window_get_opacity, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_window_set_opacity, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_TBYTES, hl_zlib_compress, _TBYTES _TBYTES); DEFINE_HL_PRIM (_TBYTES, hl_zlib_decompress, _TBYTES _TBYTES); } #ifdef LIME_CAIRO extern "C" int lime_cairo_register_prims (); #else extern "C" int lime_cairo_register_prims () { return 0; } #endif #ifdef LIME_CURL extern "C" int lime_curl_register_prims (); #else extern "C" int lime_curl_register_prims () { return 0; } #endif #ifdef LIME_HARFBUZZ extern "C" int lime_harfbuzz_register_prims (); #else extern "C" int lime_harfbuzz_register_prims () { return 0; } #endif #ifdef LIME_OPENAL extern "C" int lime_openal_register_prims (); #else extern "C" int lime_openal_register_prims () { return 0; } #endif #ifdef LIME_OPENGL extern "C" int lime_opengl_register_prims (); #else extern "C" int lime_opengl_register_prims () { return 0; } #endif #ifdef LIME_VORBIS extern "C" int lime_vorbis_register_prims (); #else extern "C" int lime_vorbis_register_prims () { return 0; } #endif extern "C" int lime_register_prims () { lime_cairo_register_prims (); lime_curl_register_prims (); lime_harfbuzz_register_prims (); lime_openal_register_prims (); lime_opengl_register_prims (); lime_vorbis_register_prims (); return 0; } ================================================ FILE: project/src/app/ApplicationEvent.cpp ================================================ #include #include namespace lime { ValuePointer* ApplicationEvent::callback = 0; ValuePointer* ApplicationEvent::eventObject = 0; static int id_deltaTime; static int id_type; static bool init = false; ApplicationEvent::ApplicationEvent () { deltaTime = 0; type = UPDATE; } void ApplicationEvent::Dispatch (ApplicationEvent* event) { if (ApplicationEvent::callback) { if (ApplicationEvent::eventObject->IsCFFIValue ()) { if (!init) { id_deltaTime = val_id ("deltaTime"); id_type = val_id ("type"); init = true; } value object = (value)ApplicationEvent::eventObject->Get (); alloc_field (object, id_deltaTime, alloc_int (event->deltaTime)); alloc_field (object, id_type, alloc_int (event->type)); } else { ApplicationEvent* eventObject = (ApplicationEvent*)ApplicationEvent::eventObject->Get (); eventObject->deltaTime = event->deltaTime; eventObject->type = event->type; } ApplicationEvent::callback->Call (); } } } ================================================ FILE: project/src/backend/sdl/SDLApplication.cpp ================================================ #include "SDLApplication.h" #include "SDLGamepad.h" #include "SDLJoystick.h" #include #ifdef HX_MACOS #include #endif #ifdef EMSCRIPTEN #include "emscripten.h" #endif namespace lime { AutoGCRoot* Application::callback = 0; SDLApplication* SDLApplication::currentApplication = 0; const int analogAxisDeadZone = 1000; std::map > gamepadsAxisMap; bool inBackground = false; static double nextFrac = 0.0; static double s_minSleepCostMs = 2.0; // initial estimate static bool s_minSleepCalibrated = false; static inline bool CanUseDelay1(Uint32 remainingMs) { return remainingMs > (Uint32)(s_minSleepCostMs + 1.0); } static inline void CalibrateMinSleep() { Uint32 t0 = SDL_GetTicks(); SDL_Delay(1); Uint32 t1 = SDL_GetTicks(); Uint32 observed = t1 - t0; if (observed < 1) observed = 1; double observedD = (double)observed; s_minSleepCostMs = (s_minSleepCostMs + observedD) * 0.5; s_minSleepCalibrated = true; } static inline Uint32 SleepMinStep() { if (!s_minSleepCalibrated) CalibrateMinSleep(); else CalibrateMinSleep(); return (Uint32)s_minSleepCostMs; } static inline Uint32 NextFrameStep(double framePeriod) { Uint32 base = (Uint32)framePeriod; nextFrac += framePeriod - (double)base; if (nextFrac >= 1.0) { base++; nextFrac -= 1.0; } return base; } static inline Sint32 GetFrameTimeRemaining(Uint32 nextUpdate) { Uint32 now = SDL_GetTicks(); Sint32 remaining = (Sint32)(nextUpdate - now); return remaining > 0 ? remaining : 0; } static double s_delay1CostMs = 2.0; static bool s_delay1Calibrated = false; static inline void CalibrateDelay1() { Uint32 t0 = SDL_GetTicks(); SDL_Delay(1); Uint32 t1 = SDL_GetTicks(); double observed = (double)(t1 - t0); if (observed < 1.0) observed = 1.0; s_delay1CostMs = (s_delay1CostMs + observed) * 0.5; s_delay1Calibrated = true; } static inline Uint32 SleepShortest(Uint32 timeRemainingMs) { if (!s_delay1Calibrated) { CalibrateDelay1(); return 0; } // The "+1" is a small guard because observed delay is quantized and jittery if (timeRemainingMs > (Uint32)(s_delay1CostMs + 1.0)) { Uint32 t0 = SDL_GetTicks(); SDL_Delay(1); Uint32 t1 = SDL_GetTicks(); double observed = (double)(t1 - t0); if (observed < 1.0) observed = 1.0; s_delay1CostMs = (s_delay1CostMs + observed) * 0.5; return (Uint32)observed; } // Otherwise, we're too close: yield instead of risking a multi-ms overshoot // Yield cost is scheduler-dependent so we don't try to model it here! SDL_Delay(0); return 0; } SDLApplication::SDLApplication () { initFlags = SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_TIMER | SDL_INIT_JOYSTICK; #if defined(LIME_MOJOAL) || defined(LIME_OPENALSOFT) initFlags |= SDL_INIT_AUDIO; #endif if (SDL_Init (initFlags) != 0) { printf ("Could not initialize SDL: %s.\n", SDL_GetError ()); } SDL_LogSetPriority (SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN); currentApplication = this; framePeriod = 1000.0 / 60.0; currentUpdate = 0; lastUpdate = 0; nextUpdate = 0; ApplicationEvent applicationEvent; ClipboardEvent clipboardEvent; DropEvent dropEvent; GamepadEvent gamepadEvent; JoystickEvent joystickEvent; KeyEvent keyEvent; MouseEvent mouseEvent; OrientationEvent orientationEvent; RenderEvent renderEvent; SensorEvent sensorEvent; TextEvent textEvent; TouchEvent touchEvent; WindowEvent windowEvent; SDL_EventState (SDL_DROPFILE, SDL_ENABLE); SDLJoystick::Init (); #ifdef HX_MACOS CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL (CFBundleGetMainBundle ()); char path[PATH_MAX]; if (CFURLGetFileSystemRepresentation (resourcesURL, TRUE, (UInt8 *)path, PATH_MAX)) { chdir (path); } CFRelease (resourcesURL); #endif } SDLApplication::~SDLApplication () { } int SDLApplication::Exec () { Init (); #ifdef EMSCRIPTEN emscripten_cancel_main_loop (); emscripten_set_main_loop (UpdateFrame, 0, 0); emscripten_set_main_loop_timing (EM_TIMING_RAF, 1); #endif #if defined(IPHONE) || defined(EMSCRIPTEN) return 0; #else while (active) { Update (); } return Quit (); #endif } void SDLApplication::HandleEvent (SDL_Event* event) { #if defined(IPHONE) || defined(EMSCRIPTEN) int top = 0; gc_set_top_of_stack(&top,false); #endif switch (event->type) { case SDL_USEREVENT: if (!inBackground) { currentUpdate = SDL_GetTicks (); applicationEvent.type = UPDATE; applicationEvent.deltaTime = currentUpdate - lastUpdate; lastUpdate = currentUpdate; nextUpdate += NextFrameStep(framePeriod); while (nextUpdate <= currentUpdate) { nextUpdate += NextFrameStep(framePeriod); } ApplicationEvent::Dispatch (&applicationEvent); RenderEvent::Dispatch (&renderEvent); } break; case SDL_APP_WILLENTERBACKGROUND: inBackground = true; windowEvent.type = WINDOW_DEACTIVATE; WindowEvent::Dispatch (&windowEvent); break; case SDL_APP_WILLENTERFOREGROUND: break; case SDL_APP_DIDENTERFOREGROUND: windowEvent.type = WINDOW_ACTIVATE; WindowEvent::Dispatch (&windowEvent); inBackground = false; break; case SDL_CLIPBOARDUPDATE: ProcessClipboardEvent (event); break; case SDL_CONTROLLERAXISMOTION: case SDL_CONTROLLERBUTTONDOWN: case SDL_CONTROLLERBUTTONUP: case SDL_CONTROLLERDEVICEADDED: case SDL_CONTROLLERDEVICEREMOVED: ProcessGamepadEvent (event); break; case SDL_DISPLAYEVENT: switch (event->display.event) { case SDL_DISPLAYEVENT_ORIENTATION: // this is the orientation of what is rendered, which // may not exactly match the orientation of the device, // if the app was locked to portrait or landscape. orientationEvent.type = DISPLAY_ORIENTATION_CHANGE; orientationEvent.orientation = event->display.data1; orientationEvent.display = event->display.display; OrientationEvent::Dispatch (&orientationEvent); break; } break; case SDL_DROPFILE: ProcessDropEvent (event); break; case SDL_FINGERMOTION: case SDL_FINGERDOWN: case SDL_FINGERUP: ProcessTouchEvent (event); break; case SDL_JOYAXISMOTION: if (SDLJoystick::IsAccelerometer (event->jaxis.which)) { ProcessSensorEvent (event); } else { ProcessJoystickEvent (event); } break; case SDL_JOYBALLMOTION: case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: case SDL_JOYHATMOTION: case SDL_JOYDEVICEADDED: case SDL_JOYDEVICEREMOVED: ProcessJoystickEvent (event); break; case SDL_KEYDOWN: case SDL_KEYUP: ProcessKeyEvent (event); break; case SDL_MOUSEMOTION: case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: case SDL_MOUSEWHEEL: ProcessMouseEvent (event); break; #ifndef EMSCRIPTEN case SDL_RENDER_DEVICE_RESET: renderEvent.type = RENDER_CONTEXT_LOST; RenderEvent::Dispatch (&renderEvent); renderEvent.type = RENDER_CONTEXT_RESTORED; RenderEvent::Dispatch (&renderEvent); renderEvent.type = RENDER; break; #endif case SDL_TEXTINPUT: case SDL_TEXTEDITING: ProcessTextEvent (event); break; case SDL_WINDOWEVENT: switch (event->window.event) { case SDL_WINDOWEVENT_ENTER: case SDL_WINDOWEVENT_LEAVE: case SDL_WINDOWEVENT_SHOWN: case SDL_WINDOWEVENT_HIDDEN: case SDL_WINDOWEVENT_FOCUS_GAINED: case SDL_WINDOWEVENT_FOCUS_LOST: case SDL_WINDOWEVENT_MAXIMIZED: case SDL_WINDOWEVENT_MINIMIZED: case SDL_WINDOWEVENT_MOVED: case SDL_WINDOWEVENT_RESTORED: ProcessWindowEvent (event); break; case SDL_WINDOWEVENT_EXPOSED: ProcessWindowEvent (event); if (!inBackground) { RenderEvent::Dispatch (&renderEvent); } break; case SDL_WINDOWEVENT_SIZE_CHANGED: ProcessWindowEvent (event); if (!inBackground) { RenderEvent::Dispatch (&renderEvent); } break; case SDL_WINDOWEVENT_CLOSE: ProcessWindowEvent (event); // Avoid handling SDL_QUIT if in response to window.close SDL_Event event; if (SDL_PollEvent (&event)) { if (event.type != SDL_QUIT) { HandleEvent (&event); } } break; } break; case SDL_QUIT: active = false; break; } } void SDLApplication::Init () { active = true; lastUpdate = SDL_GetTicks (); nextUpdate = lastUpdate; } void SDLApplication::ProcessClipboardEvent (SDL_Event* event) { if (ClipboardEvent::callback) { clipboardEvent.type = CLIPBOARD_UPDATE; ClipboardEvent::Dispatch (&clipboardEvent); } } void SDLApplication::ProcessDropEvent (SDL_Event* event) { if (DropEvent::callback) { dropEvent.type = DROP_FILE; dropEvent.file = (vbyte*)event->drop.file; DropEvent::Dispatch (&dropEvent); SDL_free (dropEvent.file); } } void SDLApplication::ProcessGamepadEvent (SDL_Event* event) { if (GamepadEvent::callback) { switch (event->type) { case SDL_CONTROLLERAXISMOTION: if (gamepadsAxisMap[event->caxis.which].empty ()) { gamepadsAxisMap[event->caxis.which][event->caxis.axis] = event->caxis.value; } else if (gamepadsAxisMap[event->caxis.which][event->caxis.axis] == event->caxis.value) { break; } gamepadEvent.type = GAMEPAD_AXIS_MOVE; gamepadEvent.axis = event->caxis.axis; gamepadEvent.id = event->caxis.which; if (event->caxis.value > -analogAxisDeadZone && event->caxis.value < analogAxisDeadZone) { if (gamepadsAxisMap[event->caxis.which][event->caxis.axis] != 0) { gamepadsAxisMap[event->caxis.which][event->caxis.axis] = 0; gamepadEvent.axisValue = 0; GamepadEvent::Dispatch (&gamepadEvent); } break; } gamepadsAxisMap[event->caxis.which][event->caxis.axis] = event->caxis.value; gamepadEvent.axisValue = event->caxis.value / (event->caxis.value > 0 ? 32767.0 : 32768.0); GamepadEvent::Dispatch (&gamepadEvent); break; case SDL_CONTROLLERBUTTONDOWN: gamepadEvent.type = GAMEPAD_BUTTON_DOWN; gamepadEvent.button = event->cbutton.button; gamepadEvent.id = event->cbutton.which; GamepadEvent::Dispatch (&gamepadEvent); break; case SDL_CONTROLLERBUTTONUP: gamepadEvent.type = GAMEPAD_BUTTON_UP; gamepadEvent.button = event->cbutton.button; gamepadEvent.id = event->cbutton.which; GamepadEvent::Dispatch (&gamepadEvent); break; case SDL_CONTROLLERDEVICEADDED: if (SDLGamepad::Connect (event->cdevice.which)) { gamepadEvent.type = GAMEPAD_CONNECT; gamepadEvent.id = SDLGamepad::GetInstanceID (event->cdevice.which); GamepadEvent::Dispatch (&gamepadEvent); } break; case SDL_CONTROLLERDEVICEREMOVED: { gamepadEvent.type = GAMEPAD_DISCONNECT; gamepadEvent.id = event->cdevice.which; GamepadEvent::Dispatch (&gamepadEvent); SDLGamepad::Disconnect (event->cdevice.which); break; } } } } void SDLApplication::ProcessJoystickEvent (SDL_Event* event) { if (JoystickEvent::callback) { switch (event->type) { case SDL_JOYAXISMOTION: if (!SDLJoystick::IsAccelerometer (event->jaxis.which)) { joystickEvent.type = JOYSTICK_AXIS_MOVE; joystickEvent.index = event->jaxis.axis; joystickEvent.x = event->jaxis.value / (event->jaxis.value > 0 ? 32767.0 : 32768.0); joystickEvent.id = event->jaxis.which; JoystickEvent::Dispatch (&joystickEvent); } break; case SDL_JOYBUTTONDOWN: if (!SDLJoystick::IsAccelerometer (event->jbutton.which)) { joystickEvent.type = JOYSTICK_BUTTON_DOWN; joystickEvent.index = event->jbutton.button; joystickEvent.id = event->jbutton.which; JoystickEvent::Dispatch (&joystickEvent); } break; case SDL_JOYBUTTONUP: if (!SDLJoystick::IsAccelerometer (event->jbutton.which)) { joystickEvent.type = JOYSTICK_BUTTON_UP; joystickEvent.index = event->jbutton.button; joystickEvent.id = event->jbutton.which; JoystickEvent::Dispatch (&joystickEvent); } break; case SDL_JOYHATMOTION: if (!SDLJoystick::IsAccelerometer (event->jhat.which)) { joystickEvent.type = JOYSTICK_HAT_MOVE; joystickEvent.index = event->jhat.hat; joystickEvent.eventValue = event->jhat.value; joystickEvent.id = event->jhat.which; JoystickEvent::Dispatch (&joystickEvent); } break; case SDL_JOYDEVICEADDED: if (SDLJoystick::Connect (event->jdevice.which)) { joystickEvent.type = JOYSTICK_CONNECT; joystickEvent.id = SDLJoystick::GetInstanceID (event->jdevice.which); JoystickEvent::Dispatch (&joystickEvent); } break; case SDL_JOYDEVICEREMOVED: if (!SDLJoystick::IsAccelerometer (event->jdevice.which)) { joystickEvent.type = JOYSTICK_DISCONNECT; joystickEvent.id = event->jdevice.which; JoystickEvent::Dispatch (&joystickEvent); SDLJoystick::Disconnect (event->jdevice.which); } break; } } } void SDLApplication::ProcessKeyEvent (SDL_Event* event) { if (KeyEvent::callback) { switch (event->type) { case SDL_KEYDOWN: keyEvent.type = KEY_DOWN; break; case SDL_KEYUP: keyEvent.type = KEY_UP; break; } keyEvent.keyCode = event->key.keysym.sym; keyEvent.modifier = event->key.keysym.mod; keyEvent.windowID = event->key.windowID; if (keyEvent.type == KEY_DOWN) { if (keyEvent.keyCode == SDLK_CAPSLOCK) keyEvent.modifier |= KMOD_CAPS; if (keyEvent.keyCode == SDLK_LALT) keyEvent.modifier |= KMOD_LALT; if (keyEvent.keyCode == SDLK_LCTRL) keyEvent.modifier |= KMOD_LCTRL; if (keyEvent.keyCode == SDLK_LGUI) keyEvent.modifier |= KMOD_LGUI; if (keyEvent.keyCode == SDLK_LSHIFT) keyEvent.modifier |= KMOD_LSHIFT; if (keyEvent.keyCode == SDLK_MODE) keyEvent.modifier |= KMOD_MODE; if (keyEvent.keyCode == SDLK_NUMLOCKCLEAR) keyEvent.modifier |= KMOD_NUM; if (keyEvent.keyCode == SDLK_RALT) keyEvent.modifier |= KMOD_RALT; if (keyEvent.keyCode == SDLK_RCTRL) keyEvent.modifier |= KMOD_RCTRL; if (keyEvent.keyCode == SDLK_RGUI) keyEvent.modifier |= KMOD_RGUI; if (keyEvent.keyCode == SDLK_RSHIFT) keyEvent.modifier |= KMOD_RSHIFT; } KeyEvent::Dispatch (&keyEvent); } } void SDLApplication::ProcessMouseEvent (SDL_Event* event) { if (MouseEvent::callback) { switch (event->type) { case SDL_MOUSEMOTION: mouseEvent.type = MOUSE_MOVE; mouseEvent.x = event->motion.x; mouseEvent.y = event->motion.y; mouseEvent.movementX = event->motion.xrel; mouseEvent.movementY = event->motion.yrel; break; case SDL_MOUSEBUTTONDOWN: SDL_CaptureMouse (SDL_TRUE); mouseEvent.type = MOUSE_DOWN; mouseEvent.button = event->button.button - 1; mouseEvent.x = event->button.x; mouseEvent.y = event->button.y; mouseEvent.clickCount = event->button.clicks; break; case SDL_MOUSEBUTTONUP: SDL_CaptureMouse (SDL_FALSE); mouseEvent.type = MOUSE_UP; mouseEvent.button = event->button.button - 1; mouseEvent.x = event->button.x; mouseEvent.y = event->button.y; mouseEvent.clickCount = event->button.clicks; break; case SDL_MOUSEWHEEL: mouseEvent.type = MOUSE_WHEEL; if (event->wheel.direction == SDL_MOUSEWHEEL_FLIPPED) { mouseEvent.x = -event->wheel.x; mouseEvent.y = -event->wheel.y; } else { mouseEvent.x = event->wheel.x; mouseEvent.y = event->wheel.y; } break; } mouseEvent.windowID = event->button.windowID; MouseEvent::Dispatch (&mouseEvent); } } void SDLApplication::ProcessSensorEvent (SDL_Event* event) { if (SensorEvent::callback) { double value = event->jaxis.value / 32767.0f; switch (event->jaxis.axis) { case 0: sensorEvent.x = value; break; case 1: sensorEvent.y = value; break; case 2: sensorEvent.z = value; break; default: break; } SensorEvent::Dispatch (&sensorEvent); } } void SDLApplication::ProcessTextEvent (SDL_Event* event) { if (TextEvent::callback) { switch (event->type) { case SDL_TEXTINPUT: textEvent.type = TEXT_INPUT; break; case SDL_TEXTEDITING: textEvent.type = TEXT_EDIT; textEvent.start = event->edit.start; textEvent.length = event->edit.length; break; } if (textEvent.text) { free (textEvent.text); } textEvent.text = (vbyte*)malloc (strlen (event->text.text) + 1); strcpy ((char*)textEvent.text, event->text.text); textEvent.windowID = event->text.windowID; TextEvent::Dispatch (&textEvent); } } void SDLApplication::ProcessTouchEvent (SDL_Event* event) { if (TouchEvent::callback) { switch (event->type) { case SDL_FINGERMOTION: touchEvent.type = TOUCH_MOVE; break; case SDL_FINGERDOWN: touchEvent.type = TOUCH_START; break; case SDL_FINGERUP: touchEvent.type = TOUCH_END; break; } touchEvent.x = event->tfinger.x; touchEvent.y = event->tfinger.y; touchEvent.id = event->tfinger.fingerId; touchEvent.dx = event->tfinger.dx; touchEvent.dy = event->tfinger.dy; touchEvent.pressure = event->tfinger.pressure; touchEvent.device = event->tfinger.touchId; TouchEvent::Dispatch (&touchEvent); } } void SDLApplication::ProcessWindowEvent (SDL_Event* event) { if (WindowEvent::callback) { switch (event->window.event) { case SDL_WINDOWEVENT_SHOWN: windowEvent.type = WINDOW_SHOW; break; case SDL_WINDOWEVENT_CLOSE: windowEvent.type = WINDOW_CLOSE; break; case SDL_WINDOWEVENT_HIDDEN: windowEvent.type = WINDOW_HIDE; break; case SDL_WINDOWEVENT_ENTER: windowEvent.type = WINDOW_ENTER; break; case SDL_WINDOWEVENT_FOCUS_GAINED: windowEvent.type = WINDOW_FOCUS_IN; break; case SDL_WINDOWEVENT_FOCUS_LOST: windowEvent.type = WINDOW_FOCUS_OUT; break; case SDL_WINDOWEVENT_LEAVE: windowEvent.type = WINDOW_LEAVE; break; case SDL_WINDOWEVENT_MAXIMIZED: windowEvent.type = WINDOW_MAXIMIZE; break; case SDL_WINDOWEVENT_MINIMIZED: windowEvent.type = WINDOW_MINIMIZE; break; case SDL_WINDOWEVENT_EXPOSED: windowEvent.type = WINDOW_EXPOSE; break; case SDL_WINDOWEVENT_MOVED: windowEvent.type = WINDOW_MOVE; windowEvent.x = event->window.data1; windowEvent.y = event->window.data2; break; case SDL_WINDOWEVENT_SIZE_CHANGED: windowEvent.type = WINDOW_RESIZE; windowEvent.width = event->window.data1; windowEvent.height = event->window.data2; break; case SDL_WINDOWEVENT_RESTORED: windowEvent.type = WINDOW_RESTORE; break; } windowEvent.windowID = event->window.windowID; WindowEvent::Dispatch (&windowEvent); } } int SDLApplication::Quit () { applicationEvent.type = EXIT; ApplicationEvent::Dispatch (&applicationEvent); SDL_QuitSubSystem (initFlags); SDL_Quit (); return 0; } void SDLApplication::RegisterWindow (SDLWindow *window) { #ifdef IPHONE SDL_iPhoneSetAnimationCallback (window->sdlWindow, 1, UpdateFrame, NULL); #endif } void SDLApplication::SetFrameRate (double frameRate) { if (frameRate > 0) { framePeriod = 1000.0 / frameRate; } else { framePeriod = 1000.0; } } static SDL_TimerID timerID = 0; bool timerActive = false; bool firstTime = true; Uint32 OnTimer (Uint32 interval, void *) { SDL_Event event; SDL_UserEvent userevent; userevent.type = SDL_USEREVENT; userevent.code = 0; userevent.data1 = NULL; userevent.data2 = NULL; event.type = SDL_USEREVENT; event.user = userevent; timerActive = false; timerID = 0; SDL_PushEvent (&event); return 0; } bool SDLApplication::Update () { SDL_Event event; event.type = -1; #if (!defined (IPHONE) && !defined (EMSCRIPTEN)) if (active && (firstTime || WaitEvent (&event))) { firstTime = false; HandleEvent (&event); event.type = -1; if (!active) return active; #endif while (SDL_PollEvent (&event)) { HandleEvent (&event); event.type = -1; if (!active) return active; } currentUpdate = SDL_GetTicks (); #if defined (IPHONE) || defined (EMSCRIPTEN) if (currentUpdate >= nextUpdate) { event.type = SDL_USEREVENT; HandleEvent (&event); event.type = -1; } #else if (currentUpdate >= nextUpdate) { if (timerActive) SDL_RemoveTimer (timerID); OnTimer (0, 0); } else if (!timerActive) { timerActive = true; timerID = SDL_AddTimer (nextUpdate - currentUpdate, OnTimer, 0); } } #endif return active; } void SDLApplication::UpdateFrame () { #ifdef EMSCRIPTEN System::GCTryExitBlocking (); #endif currentApplication->Update (); #ifdef EMSCRIPTEN System::GCTryEnterBlocking (); #endif } void SDLApplication::UpdateFrame (void*) { UpdateFrame (); } int SDLApplication::WaitEvent (SDL_Event *event) { #if defined(HX_MACOS) || defined(ANDROID) System::GCEnterBlocking (); int result = SDL_WaitEvent (event); System::GCExitBlocking (); return result; #else bool isBlocking = false; for(;;) { SDL_PumpEvents (); switch (SDL_PeepEvents (event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)) { case -1: if (isBlocking) System::GCExitBlocking (); return 0; case 1: if (isBlocking) System::GCExitBlocking (); return 1; default: if (!isBlocking) System::GCEnterBlocking (); isBlocking = true; Uint32 now = SDL_GetTicks(); Sint32 remaining = (Sint32)(nextUpdate - now); if (remaining > 0) { if (lime::CanUseDelay1((Uint32)remaining)) { lime::SleepMinStep(); } else { SDL_Delay(0); } } break; } } #endif } Application* CreateApplication () { return new SDLApplication (); } } #ifdef ANDROID int SDL_main (int argc, char *argv[]) { return 0; } #endif ================================================ FILE: project/src/backend/sdl/SDLApplication.h ================================================ #ifndef LIME_SDL_APPLICATION_H #define LIME_SDL_APPLICATION_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "SDLWindow.h" namespace lime { class SDLApplication : public Application { public: SDLApplication (); ~SDLApplication (); virtual int Exec (); virtual void Init (); virtual int Quit (); virtual void SetFrameRate (double frameRate); virtual bool Update (); void RegisterWindow (SDLWindow *window); private: void HandleEvent (SDL_Event* event); void ProcessClipboardEvent (SDL_Event* event); void ProcessDropEvent (SDL_Event* event); void ProcessGamepadEvent (SDL_Event* event); void ProcessJoystickEvent (SDL_Event* event); void ProcessKeyEvent (SDL_Event* event); void ProcessMouseEvent (SDL_Event* event); void ProcessSensorEvent (SDL_Event* event); void ProcessTextEvent (SDL_Event* event); void ProcessTouchEvent (SDL_Event* event); void ProcessWindowEvent (SDL_Event* event); int WaitEvent (SDL_Event* event); static void UpdateFrame (); static void UpdateFrame (void*); static SDLApplication* currentApplication; bool active; ApplicationEvent applicationEvent; ClipboardEvent clipboardEvent; Uint32 currentUpdate; double framePeriod; Uint32 initFlags; DropEvent dropEvent; GamepadEvent gamepadEvent; JoystickEvent joystickEvent; KeyEvent keyEvent; Uint32 lastUpdate; MouseEvent mouseEvent; Uint32 nextUpdate; OrientationEvent orientationEvent; RenderEvent renderEvent; SensorEvent sensorEvent; TextEvent textEvent; TouchEvent touchEvent; WindowEvent windowEvent; }; } #endif ================================================ FILE: project/src/backend/sdl/SDLCursor.h ================================================ #ifndef LIME_SDL_CURSOR_H #define LIME_SDL_CURSOR_H #include namespace lime { class SDLCursor { public: static SDL_Cursor* arrowCursor; static SDL_Cursor* crosshairCursor; static SDL_Cursor* moveCursor; static SDL_Cursor* pointerCursor; static SDL_Cursor* resizeNESWCursor; static SDL_Cursor* resizeNSCursor; static SDL_Cursor* resizeNWSECursor; static SDL_Cursor* resizeWECursor; static SDL_Cursor* textCursor; static SDL_Cursor* waitCursor; static SDL_Cursor* waitArrowCursor; }; } #endif ================================================ FILE: project/src/backend/sdl/SDLGamepad.cpp ================================================ #include "SDLGamepad.h" namespace lime { std::map gameControllers; std::map gameControllerIDs; bool SDLGamepad::Connect (int deviceID) { if (!SDL_IsGameController (deviceID)) return false; SDL_GameController *gameController = SDL_GameControllerOpen (deviceID); if (gameController == nullptr) return false; SDL_Joystick *joystick = SDL_GameControllerGetJoystick (gameController); int id = SDL_JoystickInstanceID (joystick); gameControllers[id] = gameController; gameControllerIDs[deviceID] = id; return true; } bool SDLGamepad::Disconnect (int id) { auto it = gameControllers.find (id); if (it == gameControllers.end ()) return false; SDL_GameControllerClose (it->second); gameControllers.erase (id); return true; } int SDLGamepad::GetInstanceID (int deviceID) { return gameControllerIDs[deviceID]; } void Gamepad::AddMapping (const char* content) { SDL_GameControllerAddMapping (content); } const char* Gamepad::GetDeviceGUID (int id) { auto it = gameControllers.find (id); if (it == gameControllers.end ()) return nullptr; SDL_Joystick* joystick = SDL_GameControllerGetJoystick (it->second); if (joystick == nullptr) return nullptr; char* guid = new char[64]; SDL_JoystickGetGUIDString (SDL_JoystickGetGUID (joystick), guid, 64); return guid; } const char* Gamepad::GetDeviceName (int id) { auto it = gameControllers.find (id); if (it == gameControllers.end ()) return nullptr; return SDL_GameControllerName (it->second); } void Gamepad::Rumble (int id, double lowFrequencyRumble, double highFrequencyRumble, int duration) { auto it = gameControllers.find (id); if (it == gameControllers.end ()) return; if (highFrequencyRumble < 0.0f) highFrequencyRumble = 0.0f; else if (highFrequencyRumble > 1.0f) highFrequencyRumble = 1.0f; if (lowFrequencyRumble < 0.0f) lowFrequencyRumble = 0.0f; else if (lowFrequencyRumble > 1.0f) lowFrequencyRumble = 1.0f; SDL_GameControllerRumble (it->second, lowFrequencyRumble * 0xFFFF, highFrequencyRumble * 0xFFFF, duration); } } ================================================ FILE: project/src/backend/sdl/SDLGamepad.h ================================================ #ifndef LIME_SDL_GAMEPAD_H #define LIME_SDL_GAMEPAD_H #include #include #include namespace lime { class SDLGamepad { public: static bool Connect (int deviceID); static int GetInstanceID (int deviceID); static bool Disconnect (int id); }; } #endif ================================================ FILE: project/src/backend/sdl/SDLJoystick.cpp ================================================ #include "SDLJoystick.h" namespace lime { static SDL_Joystick* accelerometer = 0; static SDL_JoystickID accelerometerID = -1; std::map joystickIDs = std::map (); std::map joysticks = std::map (); bool SDLJoystick::Connect (int deviceID) { if (deviceID != accelerometerID) { SDL_Joystick* joystick = SDL_JoystickOpen (deviceID); int id = SDL_JoystickInstanceID (joystick); if (joystick) { joysticks[id] = joystick; joystickIDs[deviceID] = id; return true; } } return false; } bool SDLJoystick::Disconnect (int id) { if (joysticks.find (id) != joysticks.end ()) { SDL_Joystick* joystick = joysticks[id]; SDL_JoystickClose (joystick); joysticks.erase (id); return true; } return false; } int SDLJoystick::GetInstanceID (int deviceID) { return joystickIDs[deviceID]; } void SDLJoystick::Init () { #if defined(IPHONE) || defined(ANDROID) || defined(TVOS) for (int i = 0; i < SDL_NumJoysticks (); i++) { if (strstr (SDL_JoystickNameForIndex (i), "Accelerometer")) { accelerometer = SDL_JoystickOpen (i); accelerometerID = SDL_JoystickInstanceID (accelerometer); } } #endif } bool SDLJoystick::IsAccelerometer (int id) { return (id == accelerometerID); } const char* Joystick::GetDeviceGUID (int id) { char* guid = new char[64]; SDL_JoystickGetGUIDString (SDL_JoystickGetGUID (joysticks[id]), guid, 64); return guid; } const char* Joystick::GetDeviceName (int id) { return SDL_JoystickName (joysticks[id]); } int Joystick::GetNumAxes (int id) { return SDL_JoystickNumAxes (joysticks[id]); } int Joystick::GetNumButtons (int id) { return SDL_JoystickNumButtons (joysticks[id]); } int Joystick::GetNumHats (int id) { return SDL_JoystickNumHats (joysticks[id]); } } ================================================ FILE: project/src/backend/sdl/SDLJoystick.h ================================================ #ifndef LIME_SDL_JOYSTICK_H #define LIME_SDL_JOYSTICK_H #include #include #include namespace lime { class SDLJoystick { public: static bool Connect (int id); static bool Disconnect (int id); static int GetInstanceID (int deviceID); static void Init (); static bool IsAccelerometer (int id); }; } #endif ================================================ FILE: project/src/backend/sdl/SDLKeyCode.cpp ================================================ #include #include namespace lime { int32_t KeyCode::FromScanCode (int32_t scanCode) { return SDL_GetKeyFromScancode ((SDL_Scancode)scanCode); } int32_t KeyCode::ToScanCode (int32_t keyCode) { return SDL_GetScancodeFromKey ((SDL_Keycode)keyCode); } } ================================================ FILE: project/src/backend/sdl/SDLMutex.cpp ================================================ #include #include namespace lime { Mutex::Mutex () { mutex = SDL_CreateMutex (); } Mutex::~Mutex () { if (mutex) { SDL_DestroyMutex ((SDL_mutex*)mutex); } } bool Mutex::Lock () const { if (mutex) { return SDL_LockMutex ((SDL_mutex*)mutex) == 0; } return false; } bool Mutex::TryLock () const { if (mutex) { return SDL_TryLockMutex ((SDL_mutex*)mutex) == 0; } return false; } bool Mutex::Unlock () const { if (mutex) { return SDL_UnlockMutex ((SDL_mutex*)mutex) == 0; } return false; } } ================================================ FILE: project/src/backend/sdl/SDLSystem.cpp ================================================ #include #include #include #include #include #include #include #ifdef HX_MACOS #include #endif #ifdef HX_WINDOWS #include #include //#include //#include #ifdef __MINGW32__ #ifndef CSIDL_MYDOCUMENTS #define CSIDL_MYDOCUMENTS CSIDL_PERSONAL #endif #ifndef SHGFP_TYPE_CURRENT #define SHGFP_TYPE_CURRENT 0 #endif #endif #if UNICODE #define WIN_StringToUTF8(S) SDL_iconv_string("UTF-8", "UTF-16LE", (char *)(S), (SDL_wcslen(S)+1)*sizeof(WCHAR)) #define WIN_UTF8ToString(S) (WCHAR *)SDL_iconv_string("UTF-16LE", "UTF-8", (char *)(S), SDL_strlen(S)+1) #else #define WIN_StringToUTF8(S) SDL_iconv_string("UTF-8", "ASCII", (char *)(S), (SDL_strlen(S)+1)) #define WIN_UTF8ToString(S) SDL_iconv_string("ASCII", "UTF-8", (char *)(S), SDL_strlen(S)+1) #endif #endif #ifdef ANDROID #include #endif #include #include #include #include using wstring_convert = std::wstring_convert>; namespace lime { static int id_bounds; static int id_currentMode; static int id_dpi; static int id_height; static int id_name; static int id_orientation; static int id_pixelFormat; static int id_refreshRate; static int id_supportedModes; static int id_width; static int id_safeArea; static bool init = false; const char* Clipboard::GetText () { return SDL_GetClipboardText (); } bool Clipboard::HasText () { return SDL_HasClipboardText (); } bool Clipboard::SetText (const char* text) { return (SDL_SetClipboardText (text) == 0); } void *JNI::GetEnv () { #ifdef ANDROID return SDL_AndroidGetJNIEnv (); #else return 0; #endif } bool System::GetAllowScreenTimeout () { return SDL_IsScreenSaverEnabled (); } std::wstring* System::GetDirectory (SystemDirectory type, const char* company, const char* title) { std::wstring* result = 0; System::GCEnterBlocking (); switch (type) { case APPLICATION: { char* path = SDL_GetBasePath (); if (path != nullptr) { wstring_convert converter; result = new std::wstring (converter.from_bytes(path)); SDL_free (path); } break; } case APPLICATION_STORAGE: { char* path = SDL_GetPrefPath (company, title); if (path != nullptr) { wstring_convert converter; result = new std::wstring (converter.from_bytes(path)); SDL_free (path); } break; } case DESKTOP: { #if defined (HX_WINRT) Windows::Storage::StorageFolder^ folder = Windows::Storage::KnownFolders::HomeGroup; result = new std::wstring (folder->Path->Data ()); #elif defined (HX_WINDOWS) WCHAR folderPath[MAX_PATH] = L""; SHGetFolderPathW (NULL, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, folderPath); result = new std::wstring (folderPath); #elif defined (IPHONE) result = System::GetIOSDirectory (type); #elif !defined (ANDROID) char const* home = getenv ("HOME"); if (home != NULL) { std::string path = std::string (home) + std::string ("/Desktop"); wstring_convert converter; result = new std::wstring (converter.from_bytes(path)); } #endif break; } case DOCUMENTS: { #if defined (HX_WINRT) Windows::Storage::StorageFolder^ folder = Windows::Storage::KnownFolders::DocumentsLibrary; result = new std::wstring (folder->Path->Data ()); #elif defined (HX_WINDOWS) WCHAR folderPath[MAX_PATH] = L""; SHGetFolderPathW (NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, folderPath); result = new std::wstring (folderPath); #elif defined (IPHONE) result = System::GetIOSDirectory (type); #elif defined (ANDROID) result = new std::wstring (L"/mnt/sdcard/Documents"); #else char const* home = getenv ("HOME"); if (home != NULL) { std::string path = std::string (home) + std::string ("/Documents"); wstring_convert converter; result = new std::wstring (converter.from_bytes(path)); } #endif break; } case FONTS: { #if defined (HX_WINRT) // TODO #elif defined (HX_WINDOWS) WCHAR folderPath[MAX_PATH] = L""; SHGetFolderPathW (NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, folderPath); result = new std::wstring (folderPath); #elif defined (HX_MACOS) result = new std::wstring (L"/Library/Fonts"); #elif defined (IPHONE) result = new std::wstring (L"/System/Library/Fonts"); #elif defined (ANDROID) result = new std::wstring (L"/system/fonts"); #elif defined (BLACKBERRY) result = new std::wstring (L"/usr/fonts/font_repository/monotype"); #else result = new std::wstring (L"/usr/share/fonts/truetype"); #endif break; } case USER: { #if defined (HX_WINRT) Windows::Storage::StorageFolder^ folder = Windows::Storage::ApplicationData::Current->RoamingFolder; result = new std::wstring (folder->Path->Data ()); #elif defined (HX_WINDOWS) WCHAR folderPath[MAX_PATH] = L""; SHGetFolderPathW (NULL, CSIDL_PROFILE, NULL, SHGFP_TYPE_CURRENT, folderPath); result = new std::wstring (folderPath); #elif defined (IPHONE) result = System::GetIOSDirectory (type); #elif defined (ANDROID) result = new std::wstring (L"/mnt/sdcard"); #else char const* home = getenv ("HOME"); if (home != NULL) { std::string path = std::string (home); wstring_convert converter; result = new std::wstring (converter.from_bytes(path)); } #endif break; } } System::GCExitBlocking (); return result; } void* System::GetDisplay (bool useCFFIValue, int id) { if (useCFFIValue) { if (!init) { id_bounds = val_id ("bounds"); id_currentMode = val_id ("currentMode"); id_dpi = val_id ("dpi"); id_height = val_id ("height"); id_name = val_id ("name"); id_orientation = val_id ("orientation"); id_pixelFormat = val_id ("pixelFormat"); id_refreshRate = val_id ("refreshRate"); id_supportedModes = val_id ("supportedModes"); id_width = val_id ("width"); id_safeArea = val_id ("safeArea"); init = true; } int numDisplays = GetNumDisplays (); if (id < 0 || id >= numDisplays) { return alloc_null (); } value display = alloc_empty_object (); alloc_field (display, id_name, alloc_string (SDL_GetDisplayName (id))); SDL_Rect bounds = { 0, 0, 0, 0 }; SDL_GetDisplayBounds (id, &bounds); alloc_field (display, id_bounds, Rectangle (bounds.x, bounds.y, bounds.w, bounds.h).Value ()); Rectangle safeAreaInsets; Display::GetSafeAreaInsets(id, &safeAreaInsets); alloc_field (display, id_safeArea, Rectangle (bounds.x + safeAreaInsets.x, bounds.y + safeAreaInsets.y, bounds.w - safeAreaInsets.x - safeAreaInsets.width, bounds.h - safeAreaInsets.y - safeAreaInsets.height).Value ()); float dpi = 72.0; #ifndef EMSCRIPTEN SDL_GetDisplayDPI (id, &dpi, NULL, NULL); #endif alloc_field (display, id_dpi, alloc_float (dpi)); SDL_DisplayOrientation orientation = SDL_GetDisplayOrientation(id); alloc_field (display, id_orientation, alloc_int (orientation)); SDL_DisplayMode displayMode = { SDL_PIXELFORMAT_UNKNOWN, 0, 0, 0, 0 }; DisplayMode mode; SDL_GetDesktopDisplayMode (id, &displayMode); mode.height = displayMode.h; switch (displayMode.format) { case SDL_PIXELFORMAT_ARGB8888: mode.pixelFormat = ARGB32; break; case SDL_PIXELFORMAT_BGRA8888: case SDL_PIXELFORMAT_BGRX8888: mode.pixelFormat = BGRA32; break; default: mode.pixelFormat = RGBA32; } mode.refreshRate = displayMode.refresh_rate; mode.width = displayMode.w; alloc_field (display, id_currentMode, (value)mode.Value ()); int numDisplayModes = SDL_GetNumDisplayModes (id); value supportedModes = alloc_array (numDisplayModes); for (int i = 0; i < numDisplayModes; i++) { SDL_GetDisplayMode (id, i, &displayMode); mode.height = displayMode.h; switch (displayMode.format) { case SDL_PIXELFORMAT_ARGB8888: mode.pixelFormat = ARGB32; break; case SDL_PIXELFORMAT_BGRA8888: case SDL_PIXELFORMAT_BGRX8888: mode.pixelFormat = BGRA32; break; default: mode.pixelFormat = RGBA32; } mode.refreshRate = displayMode.refresh_rate; mode.width = displayMode.w; val_array_set_i (supportedModes, i, (value)mode.Value ()); } alloc_field (display, id_supportedModes, supportedModes); return display; } else { const int id_bounds = hl_hash_utf8 ("bounds"); const int id_currentMode = hl_hash_utf8 ("currentMode"); const int id_dpi = hl_hash_utf8 ("dpi"); const int id_height = hl_hash_utf8 ("height"); const int id_name = hl_hash_utf8 ("name"); const int id_orientation = hl_hash_utf8 ("orientation"); const int id_pixelFormat = hl_hash_utf8 ("pixelFormat"); const int id_refreshRate = hl_hash_utf8 ("refreshRate"); const int id_supportedModes = hl_hash_utf8 ("supportedModes"); const int id_width = hl_hash_utf8 ("width"); const int id_safeArea = hl_hash_utf8 ("safeArea"); const int id_x = hl_hash_utf8 ("x"); const int id_y = hl_hash_utf8 ("y"); int numDisplays = GetNumDisplays (); if (id < 0 || id >= numDisplays) { return 0; } vdynamic* display = (vdynamic*)hl_alloc_dynobj (); const char* displayName = SDL_GetDisplayName (id); char* _displayName = (char*)malloc(strlen(displayName) + 1); strcpy (_displayName, displayName); hl_dyn_setp (display, id_name, &hlt_bytes, _displayName); SDL_Rect bounds = { 0, 0, 0, 0 }; SDL_GetDisplayBounds (id, &bounds); vdynamic* _bounds = (vdynamic*)hl_alloc_dynobj (); hl_dyn_seti (_bounds, id_x, &hlt_i32, bounds.x); hl_dyn_seti (_bounds, id_y, &hlt_i32, bounds.y); hl_dyn_seti (_bounds, id_width, &hlt_i32, bounds.w); hl_dyn_seti (_bounds, id_height, &hlt_i32, bounds.h); hl_dyn_setp (display, id_bounds, &hlt_dynobj, _bounds); Rectangle safeAreaInsets; Display::GetSafeAreaInsets(id, &safeAreaInsets); vdynamic* _safeArea = (vdynamic*)hl_alloc_dynobj (); hl_dyn_seti (_safeArea, id_x, &hlt_i32, bounds.x + safeAreaInsets.x); hl_dyn_seti (_safeArea, id_y, &hlt_i32, bounds.y + safeAreaInsets.y); hl_dyn_seti (_safeArea, id_width, &hlt_i32, bounds.w - safeAreaInsets.x - safeAreaInsets.width); hl_dyn_seti (_safeArea, id_height, &hlt_i32, bounds.h - safeAreaInsets.y - safeAreaInsets.height); hl_dyn_setp (display, id_safeArea, &hlt_dynobj, _safeArea); float dpi = 72.0; #ifndef EMSCRIPTEN SDL_GetDisplayDPI (id, &dpi, NULL, NULL); #endif hl_dyn_setf (display, id_dpi, dpi); SDL_DisplayOrientation orientation = SDL_GetDisplayOrientation(id); hl_dyn_seti (display, id_orientation, &hlt_i32, orientation); SDL_DisplayMode displayMode = { SDL_PIXELFORMAT_UNKNOWN, 0, 0, 0, 0 }; DisplayMode mode; SDL_GetDesktopDisplayMode (id, &displayMode); mode.height = displayMode.h; switch (displayMode.format) { case SDL_PIXELFORMAT_ARGB8888: mode.pixelFormat = ARGB32; break; case SDL_PIXELFORMAT_BGRA8888: case SDL_PIXELFORMAT_BGRX8888: mode.pixelFormat = BGRA32; break; default: mode.pixelFormat = RGBA32; } mode.refreshRate = displayMode.refresh_rate; mode.width = displayMode.w; vdynamic* _displayMode = (vdynamic*)hl_alloc_dynobj (); hl_dyn_seti (_displayMode, id_height, &hlt_i32, mode.height); hl_dyn_seti (_displayMode, id_pixelFormat, &hlt_i32, mode.pixelFormat); hl_dyn_seti (_displayMode, id_refreshRate, &hlt_i32, mode.refreshRate); hl_dyn_seti (_displayMode, id_width, &hlt_i32, mode.width); hl_dyn_setp (display, id_currentMode, &hlt_dynobj, _displayMode); int numDisplayModes = SDL_GetNumDisplayModes (id); hl_varray* supportedModes = (hl_varray*)hl_alloc_array (&hlt_dynobj, numDisplayModes); vdynamic** supportedModesData = hl_aptr (supportedModes, vdynamic*); for (int i = 0; i < numDisplayModes; i++) { SDL_GetDisplayMode (id, i, &displayMode); mode.height = displayMode.h; switch (displayMode.format) { case SDL_PIXELFORMAT_ARGB8888: mode.pixelFormat = ARGB32; break; case SDL_PIXELFORMAT_BGRA8888: case SDL_PIXELFORMAT_BGRX8888: mode.pixelFormat = BGRA32; break; default: mode.pixelFormat = RGBA32; } mode.refreshRate = displayMode.refresh_rate; mode.width = displayMode.w; vdynamic* _displayMode = (vdynamic*)hl_alloc_dynobj (); hl_dyn_seti (_displayMode, id_height, &hlt_i32, mode.height); hl_dyn_seti (_displayMode, id_pixelFormat, &hlt_i32, mode.pixelFormat); hl_dyn_seti (_displayMode, id_refreshRate, &hlt_i32, mode.refreshRate); hl_dyn_seti (_displayMode, id_width, &hlt_i32, mode.width); *supportedModesData++ = _displayMode; } hl_dyn_setp (display, id_supportedModes, &hlt_array, supportedModes); return display; } } int System::GetNumDisplays () { return SDL_GetNumVideoDisplays (); } double System::GetTimer () { return SDL_GetTicks (); } bool System::SetAllowScreenTimeout (bool allow) { if (allow) { SDL_EnableScreenSaver (); } else { SDL_DisableScreenSaver (); } return allow; } FILE* FILE_HANDLE::getFile () { #ifndef HX_WINDOWS switch (((SDL_RWops*)handle)->type) { case SDL_RWOPS_STDFILE: { #ifdef HAVE_STDIO_H return ((SDL_RWops*)handle)->hidden.stdio.fp; #else #error Lime requires HAVE_STDIO_H #endif } case SDL_RWOPS_JNIFILE: { #ifdef ANDROID System::GCEnterBlocking (); int fd; off_t outStart; off_t outLength; fd = AAsset_openFileDescriptor ((AAsset*)(((SDL_RWops*)handle)->hidden.androidio.asset), &outStart, &outLength); FILE* file = ::fdopen (fd, "rb"); ::fseek (file, outStart, 0); System::GCExitBlocking (); return file; #endif } } return NULL; #else return (FILE*)handle; #endif } int FILE_HANDLE::getLength () { #ifndef HX_WINDOWS System::GCEnterBlocking (); int size = SDL_RWsize (((SDL_RWops*)handle)); System::GCExitBlocking (); return size; #else return 0; #endif } bool FILE_HANDLE::isFile () { #ifndef HX_WINDOWS return ((SDL_RWops*)handle)->type == SDL_RWOPS_STDFILE; #else return true; #endif } int fclose (FILE_HANDLE *stream) { #ifndef HX_WINDOWS if (stream) { System::GCEnterBlocking (); int code = SDL_RWclose ((SDL_RWops*)stream->handle); delete stream; System::GCExitBlocking (); return code; } return 0; #else if (stream) { System::GCEnterBlocking (); int code = ::fclose ((FILE*)stream->handle); delete stream; System::GCExitBlocking (); return code; } return 0; #endif } FILE_HANDLE *fdopen (int fd, const char *mode) { #ifndef HX_WINDOWS System::GCEnterBlocking (); FILE* fp = ::fdopen (fd, mode); SDL_RWops *result = SDL_RWFromFP (fp, SDL_TRUE); System::GCExitBlocking (); if (result) { return new FILE_HANDLE (result); } return NULL; #else FILE* result; System::GCEnterBlocking (); result = ::fdopen (fd, mode); System::GCExitBlocking (); if (result) { return new FILE_HANDLE (result); } return NULL; #endif } FILE_HANDLE *fopen (const char *filename, const char *mode) { #ifndef HX_WINDOWS SDL_RWops *result; System::GCEnterBlocking (); #ifdef HX_MACOS result = SDL_RWFromFile (filename, "rb"); if (!result) { CFStringRef str = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8); CFURLRef path = CFBundleCopyResourceURL (CFBundleGetMainBundle (), str, NULL, NULL); CFRelease (str); if (path) { str = CFURLCopyPath (path); CFIndex maxSize = CFStringGetMaximumSizeForEncoding (CFStringGetLength (str), kCFStringEncodingUTF8); char *buffer = (char *)malloc (maxSize); if (CFStringGetCString (str, buffer, maxSize, kCFStringEncodingUTF8)) { result = SDL_RWFromFP (::fopen (buffer, "rb"), SDL_TRUE); free (buffer); } CFRelease (str); CFRelease (path); } } #else result = SDL_RWFromFile (filename, mode); #endif System::GCExitBlocking (); if (result) { return new FILE_HANDLE (result); } return NULL; #else FILE* result; std::wstring_convert> converter; std::wstring* wfilename = new std::wstring (converter.from_bytes (filename)); std::wstring* wmode = new std::wstring (converter.from_bytes (mode)); System::GCEnterBlocking (); result = ::_wfopen (wfilename->c_str(), wmode->c_str()); System::GCExitBlocking (); delete wfilename; delete wmode; if (result) { return new FILE_HANDLE (result); } return NULL; #endif } size_t fread (void *ptr, size_t size, size_t count, FILE_HANDLE *stream) { size_t nmem; System::GCEnterBlocking (); #ifndef HX_WINDOWS nmem = SDL_RWread (stream ? (SDL_RWops*)stream->handle : NULL, ptr, size, count); #else nmem = ::fread (ptr, size, count, (FILE*)stream->handle); #endif System::GCExitBlocking (); return nmem; } int fseek (FILE_HANDLE *stream, long int offset, int origin) { int success; System::GCEnterBlocking (); #ifndef HX_WINDOWS success = SDL_RWseek (stream ? (SDL_RWops*)stream->handle : NULL, offset, origin); #else success = ::fseek ((FILE*)stream->handle, offset, origin); #endif System::GCExitBlocking (); return success; } long int ftell (FILE_HANDLE *stream) { long int pos; System::GCEnterBlocking (); #ifndef HX_WINDOWS pos = SDL_RWtell (stream ? (SDL_RWops*)stream->handle : NULL); #else pos = ::ftell ((FILE*)stream->handle); #endif System::GCExitBlocking (); return pos; } size_t fwrite (const void *ptr, size_t size, size_t count, FILE_HANDLE *stream) { size_t nmem; System::GCEnterBlocking (); #ifndef HX_WINDOWS nmem = SDL_RWwrite (stream ? (SDL_RWops*)stream->handle : NULL, ptr, size, count); #else nmem = ::fwrite (ptr, size, count, (FILE*)stream->handle); #endif System::GCExitBlocking (); return nmem; } } ================================================ FILE: project/src/backend/sdl/SDLWindow.cpp ================================================ #include "SDLWindow.h" #include "SDLCursor.h" #include "SDLApplication.h" #include "../../graphics/opengl/OpenGL.h" #include "../../graphics/opengl/OpenGLBindings.h" #ifdef HX_WINDOWS #include #include #undef CreateWindow #endif namespace lime { static Cursor currentCursor = DEFAULT; SDL_Cursor* SDLCursor::arrowCursor = 0; SDL_Cursor* SDLCursor::crosshairCursor = 0; SDL_Cursor* SDLCursor::moveCursor = 0; SDL_Cursor* SDLCursor::pointerCursor = 0; SDL_Cursor* SDLCursor::resizeNESWCursor = 0; SDL_Cursor* SDLCursor::resizeNSCursor = 0; SDL_Cursor* SDLCursor::resizeNWSECursor = 0; SDL_Cursor* SDLCursor::resizeWECursor = 0; SDL_Cursor* SDLCursor::textCursor = 0; SDL_Cursor* SDLCursor::waitCursor = 0; SDL_Cursor* SDLCursor::waitArrowCursor = 0; static bool displayModeSet = false; SDLWindow::SDLWindow (Application* application, int width, int height, int flags, const char* title) { sdlTexture = 0; sdlRenderer = 0; context = 0; contextWidth = 0; contextHeight = 0; currentApplication = application; this->flags = flags; int sdlWindowFlags = 0; if (flags & WINDOW_FLAG_FULLSCREEN) sdlWindowFlags |= SDL_WINDOW_FULLSCREEN_DESKTOP; if (flags & WINDOW_FLAG_RESIZABLE) sdlWindowFlags |= SDL_WINDOW_RESIZABLE; if (flags & WINDOW_FLAG_BORDERLESS) sdlWindowFlags |= SDL_WINDOW_BORDERLESS; if (flags & WINDOW_FLAG_HIDDEN) sdlWindowFlags |= SDL_WINDOW_HIDDEN; if (flags & WINDOW_FLAG_MINIMIZED) sdlWindowFlags |= SDL_WINDOW_MINIMIZED; if (flags & WINDOW_FLAG_MAXIMIZED) sdlWindowFlags |= SDL_WINDOW_MAXIMIZED; #ifndef EMSCRIPTEN if (flags & WINDOW_FLAG_ALWAYS_ON_TOP) sdlWindowFlags |= SDL_WINDOW_ALWAYS_ON_TOP; #endif #if defined (HX_WINDOWS) && defined (NATIVE_TOOLKIT_SDL_ANGLE) && !defined (HX_WINRT) OSVERSIONINFOEXW osvi = { sizeof (osvi), 0, 0, 0, 0, {0}, 0, 0 }; DWORDLONG const dwlConditionMask = VerSetConditionMask (VerSetConditionMask (VerSetConditionMask (0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); osvi.dwMajorVersion = HIBYTE (_WIN32_WINNT_VISTA); osvi.dwMinorVersion = LOBYTE (_WIN32_WINNT_VISTA); osvi.wServicePackMajor = 0; if (VerifyVersionInfoW (&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) == FALSE) { flags &= ~WINDOW_FLAG_HARDWARE; } #endif #if !defined(EMSCRIPTEN) && !defined(LIME_SWITCH) SDL_SetHint (SDL_HINT_ANDROID_TRAP_BACK_BUTTON, "0"); SDL_SetHint (SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1"); SDL_SetHint (SDL_HINT_MOUSE_TOUCH_EVENTS, "0"); SDL_SetHint (SDL_HINT_TOUCH_MOUSE_EVENTS, "1"); #endif if (flags & WINDOW_FLAG_HARDWARE) { sdlWindowFlags |= SDL_WINDOW_OPENGL; if (flags & WINDOW_FLAG_ALLOW_HIGHDPI) { sdlWindowFlags |= SDL_WINDOW_ALLOW_HIGHDPI; } #if defined (HX_WINDOWS) && defined (NATIVE_TOOLKIT_SDL_ANGLE) SDL_GL_SetAttribute (SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 0); SDL_SetHint (SDL_HINT_VIDEO_WIN_D3DCOMPILER, "d3dcompiler_47.dll"); #endif #if defined (RASPBERRYPI) SDL_GL_SetAttribute (SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 0); SDL_SetHint (SDL_HINT_RENDER_DRIVER, "opengles2"); #endif #if defined (IPHONE) || defined (APPLETV) SDL_GL_SetAttribute (SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 3); #endif if (flags & WINDOW_FLAG_DEPTH_BUFFER) { SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 32 - (flags & WINDOW_FLAG_STENCIL_BUFFER) ? 8 : 0); } if (flags & WINDOW_FLAG_STENCIL_BUFFER) { SDL_GL_SetAttribute (SDL_GL_STENCIL_SIZE, 8); } if (flags & WINDOW_FLAG_HW_AA_HIRES) { SDL_GL_SetAttribute (SDL_GL_MULTISAMPLEBUFFERS, true); SDL_GL_SetAttribute (SDL_GL_MULTISAMPLESAMPLES, 4); } else if (flags & WINDOW_FLAG_HW_AA) { SDL_GL_SetAttribute (SDL_GL_MULTISAMPLEBUFFERS, true); SDL_GL_SetAttribute (SDL_GL_MULTISAMPLESAMPLES, 2); } if (flags & WINDOW_FLAG_COLOR_DEPTH_32_BIT) { SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, 8); } else { SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 6); SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 5); } } sdlWindow = SDL_CreateWindow (title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, sdlWindowFlags); #if defined (IPHONE) || defined (APPLETV) if (sdlWindow && !SDL_GL_CreateContext (sdlWindow)) { SDL_DestroyWindow (sdlWindow); SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 2); sdlWindow = SDL_CreateWindow (title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, sdlWindowFlags); } #endif if (!sdlWindow) { printf ("Could not create SDL window: %s.\n", SDL_GetError ()); return; } #if defined (HX_WINDOWS) && !defined (HX_WINRT) HINSTANCE handle = ::GetModuleHandle (nullptr); HICON icon = ::LoadIcon (handle, MAKEINTRESOURCE (1)); if (icon != nullptr) { SDL_SysWMinfo wminfo; SDL_VERSION (&wminfo.version); if (SDL_GetWindowWMInfo (sdlWindow, &wminfo) == 1) { HWND hwnd = wminfo.info.win.window; #ifdef _WIN64 ::SetClassLongPtr (hwnd, GCLP_HICON, reinterpret_cast(icon)); #else ::SetClassLong (hwnd, GCL_HICON, reinterpret_cast(icon)); #endif } } #endif int sdlRendererFlags = 0; if (flags & WINDOW_FLAG_HARDWARE) { sdlRendererFlags |= SDL_RENDERER_ACCELERATED; // if (window->flags & WINDOW_FLAG_VSYNC) { #ifdef EMSCRIPTEN sdlRendererFlags |= SDL_RENDERER_PRESENTVSYNC; #endif // } // sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlRendererFlags); // if (sdlRenderer) { // context = SDL_GL_GetCurrentContext (); // } context = SDL_GL_CreateContext (sdlWindow); if (context && SDL_GL_MakeCurrent (sdlWindow, context) == 0) { if (flags & WINDOW_FLAG_VSYNC) { SDL_GL_SetSwapInterval (1); } else { SDL_GL_SetSwapInterval (0); } OpenGLBindings::Init (); #ifndef LIME_GLES int version = 0; glGetIntegerv (GL_MAJOR_VERSION, &version); if (version == 0) { float versionScan = 0; sscanf ((const char*)glGetString (GL_VERSION), "%f", &versionScan); version = versionScan; } if (version < 2 && !strstr ((const char*)glGetString (GL_VERSION), "OpenGL ES")) { SDL_GL_DeleteContext (context); context = 0; } #elif defined(IPHONE) || defined(APPLETV) // SDL_SysWMinfo windowInfo; // SDL_GetWindowWMInfo (sdlWindow, &windowInfo); // OpenGLBindings::defaultFramebuffer = windowInfo.info.uikit.framebuffer; // OpenGLBindings::defaultRenderbuffer = windowInfo.info.uikit.colorbuffer; glGetIntegerv (GL_FRAMEBUFFER_BINDING, &OpenGLBindings::defaultFramebuffer); glGetIntegerv (GL_RENDERBUFFER_BINDING, &OpenGLBindings::defaultRenderbuffer); #endif } else { SDL_GL_DeleteContext (context); context = NULL; } } if (!context) { sdlRendererFlags &= ~SDL_RENDERER_ACCELERATED; sdlRendererFlags &= ~SDL_RENDERER_PRESENTVSYNC; sdlRendererFlags |= SDL_RENDERER_SOFTWARE; sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlRendererFlags); } if (context || sdlRenderer) { ((SDLApplication*)currentApplication)->RegisterWindow (this); } else { printf ("Could not create SDL renderer: %s.\n", SDL_GetError ()); } } SDLWindow::~SDLWindow () { if (sdlWindow) { SDL_DestroyWindow (sdlWindow); sdlWindow = 0; } if (sdlRenderer) { SDL_DestroyRenderer (sdlRenderer); } else if (context) { SDL_GL_DeleteContext (context); } } void SDLWindow::Alert (const char* message, const char* title) { #if defined (HX_WINDOWS) && !defined (HX_WINRT) int count = 0; int speed = 0; bool stopOnForeground = true; SDL_SysWMinfo info; SDL_VERSION (&info.version); SDL_GetWindowWMInfo (sdlWindow, &info); FLASHWINFO fi; fi.cbSize = sizeof (FLASHWINFO); fi.hwnd = info.info.win.window; fi.dwFlags = stopOnForeground ? FLASHW_ALL | FLASHW_TIMERNOFG : FLASHW_ALL | FLASHW_TIMER; fi.uCount = count; fi.dwTimeout = speed; FlashWindowEx (&fi); #endif if (message) { SDL_ShowSimpleMessageBox (SDL_MESSAGEBOX_INFORMATION, title, message, sdlWindow); } } void SDLWindow::Close () { if (sdlWindow) { SDL_DestroyWindow (sdlWindow); sdlWindow = 0; } } bool SDLWindow::SetVisible (bool visible) { if (visible) { SDL_ShowWindow (sdlWindow); } else { SDL_HideWindow (sdlWindow); } return (SDL_GetWindowFlags (sdlWindow) & SDL_WINDOW_SHOWN); } void SDLWindow::ContextFlip () { if (context && !sdlRenderer) { SDL_GL_SwapWindow (sdlWindow); } else if (sdlRenderer) { SDL_RenderPresent (sdlRenderer); } } void* SDLWindow::ContextLock (bool useCFFIValue) { if (sdlRenderer) { int width; int height; SDL_GetRendererOutputSize (sdlRenderer, &width, &height); if (width != contextWidth || height != contextHeight) { if (sdlTexture) { SDL_DestroyTexture (sdlTexture); } sdlTexture = SDL_CreateTexture (sdlRenderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, width, height); contextWidth = width; contextHeight = height; } void *pixels; int pitch; if (useCFFIValue) { if (SDL_LockTexture (sdlTexture, NULL, &pixels, &pitch) == 0) { value result = alloc_empty_object (); alloc_field (result, val_id ("width"), alloc_int (contextWidth)); alloc_field (result, val_id ("height"), alloc_int (contextHeight)); alloc_field (result, val_id ("pixels"), alloc_float ((uintptr_t)pixels)); alloc_field (result, val_id ("pitch"), alloc_int (pitch)); return result; } else { return alloc_null (); } } else { const int id_width = hl_hash_utf8 ("width"); const int id_height = hl_hash_utf8 ("height"); const int id_pixels = hl_hash_utf8 ("pixels"); const int id_pitch = hl_hash_utf8 ("pitch"); if (SDL_LockTexture (sdlTexture, NULL, &pixels, &pitch) == 0) { vdynamic* result = (vdynamic*)hl_alloc_dynobj(); hl_dyn_seti (result, id_width, &hlt_i32, contextWidth); hl_dyn_seti (result, id_height, &hlt_i32, contextHeight); hl_dyn_setd (result, id_pixels, (uintptr_t)pixels); hl_dyn_seti (result, id_pitch, &hlt_i32, pitch); return result; } else { return 0; } } } else { if (useCFFIValue) { return alloc_null (); } else { return 0; } } } void SDLWindow::ContextMakeCurrent () { if (sdlWindow && context) { SDL_GL_MakeCurrent (sdlWindow, context); } } void SDLWindow::ContextUnlock () { if (sdlTexture) { SDL_UnlockTexture (sdlTexture); SDL_RenderClear (sdlRenderer); SDL_RenderCopy (sdlRenderer, sdlTexture, NULL, NULL); } } void SDLWindow::Focus () { SDL_RaiseWindow (sdlWindow); } void* SDLWindow::GetContext () { return context; } const char* SDLWindow::GetContextType () { if (context) { return "opengl"; } else if (sdlRenderer) { SDL_RendererInfo info; SDL_GetRendererInfo (sdlRenderer, &info); if (info.flags & SDL_RENDERER_SOFTWARE) { return "software"; } else { return "opengl"; } } return "none"; } int SDLWindow::GetDisplay () { return SDL_GetWindowDisplayIndex (sdlWindow); } void SDLWindow::GetDisplayMode (DisplayMode* displayMode) { SDL_DisplayMode mode; SDL_GetWindowDisplayMode (sdlWindow, &mode); displayMode->width = mode.w; displayMode->height = mode.h; switch (mode.format) { case SDL_PIXELFORMAT_ARGB8888: displayMode->pixelFormat = ARGB32; break; case SDL_PIXELFORMAT_BGRA8888: case SDL_PIXELFORMAT_BGRX8888: displayMode->pixelFormat = BGRA32; break; default: displayMode->pixelFormat = RGBA32; } displayMode->refreshRate = mode.refresh_rate; } int SDLWindow::GetHeight () { int width; int height; SDL_GetWindowSize (sdlWindow, &width, &height); return height; } uint32_t SDLWindow::GetID () { return SDL_GetWindowID (sdlWindow); } bool SDLWindow::GetMouseLock () { return SDL_GetRelativeMouseMode (); } float SDLWindow::GetOpacity () { float opacity = 1.0f; SDL_GetWindowOpacity (sdlWindow, &opacity); return opacity; } double SDLWindow::GetScale () { if (sdlRenderer) { int outputWidth; int outputHeight; SDL_GetRendererOutputSize (sdlRenderer, &outputWidth, &outputHeight); int width; int height; SDL_GetWindowSize (sdlWindow, &width, &height); double scale = double (outputWidth) / width; return scale; } else if (context) { int outputWidth; int outputHeight; SDL_GL_GetDrawableSize (sdlWindow, &outputWidth, &outputHeight); int width; int height; SDL_GetWindowSize (sdlWindow, &width, &height); double scale = double (outputWidth) / width; return scale; } return 1; } bool SDLWindow::GetTextInputEnabled () { return SDL_IsTextInputActive (); } int SDLWindow::GetWidth () { int width; int height; SDL_GetWindowSize (sdlWindow, &width, &height); return width; } int SDLWindow::GetX () { int x; int y; SDL_GetWindowPosition (sdlWindow, &x, &y); return x; } int SDLWindow::GetY () { int x; int y; SDL_GetWindowPosition (sdlWindow, &x, &y); return y; } void SDLWindow::Move (int x, int y) { SDL_SetWindowPosition (sdlWindow, x, y); } void SDLWindow::ReadPixels (ImageBuffer *buffer, Rectangle *rect) { if (sdlRenderer) { SDL_Rect bounds = { 0, 0, 0, 0 }; if (rect) { bounds.x = rect->x; bounds.y = rect->y; bounds.w = rect->width; bounds.h = rect->height; } else { SDL_GetWindowSize (sdlWindow, &bounds.w, &bounds.h); } buffer->Resize (bounds.w, bounds.h, 32); SDL_RenderReadPixels (sdlRenderer, &bounds, SDL_PIXELFORMAT_ABGR8888, buffer->data->buffer->b, buffer->Stride ()); } else if (context) { // TODO } } void SDLWindow::Resize (int width, int height) { SDL_SetWindowSize (sdlWindow, width, height); } void SDLWindow::SetMinimumSize (int width, int height) { SDL_SetWindowMinimumSize (sdlWindow, width, height); } void SDLWindow::SetMaximumSize (int width, int height) { SDL_SetWindowMaximumSize (sdlWindow, width, height); } bool SDLWindow::SetBorderless (bool borderless) { if (borderless) { SDL_SetWindowBordered (sdlWindow, SDL_FALSE); } else { SDL_SetWindowBordered (sdlWindow, SDL_TRUE); } return borderless; } void SDLWindow::SetCursor (Cursor cursor) { if (cursor != currentCursor) { if (currentCursor == HIDDEN) { SDL_ShowCursor (SDL_ENABLE); } switch (cursor) { case HIDDEN: SDL_ShowCursor (SDL_DISABLE); case CROSSHAIR: if (!SDLCursor::crosshairCursor) { SDLCursor::crosshairCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_CROSSHAIR); } SDL_SetCursor (SDLCursor::crosshairCursor); break; case MOVE: if (!SDLCursor::moveCursor) { SDLCursor::moveCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZEALL); } SDL_SetCursor (SDLCursor::moveCursor); break; case POINTER: if (!SDLCursor::pointerCursor) { SDLCursor::pointerCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_HAND); } SDL_SetCursor (SDLCursor::pointerCursor); break; case RESIZE_NESW: if (!SDLCursor::resizeNESWCursor) { SDLCursor::resizeNESWCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZENESW); } SDL_SetCursor (SDLCursor::resizeNESWCursor); break; case RESIZE_NS: if (!SDLCursor::resizeNSCursor) { SDLCursor::resizeNSCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZENS); } SDL_SetCursor (SDLCursor::resizeNSCursor); break; case RESIZE_NWSE: if (!SDLCursor::resizeNWSECursor) { SDLCursor::resizeNWSECursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZENWSE); } SDL_SetCursor (SDLCursor::resizeNWSECursor); break; case RESIZE_WE: if (!SDLCursor::resizeWECursor) { SDLCursor::resizeWECursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZEWE); } SDL_SetCursor (SDLCursor::resizeWECursor); break; case TEXT: if (!SDLCursor::textCursor) { SDLCursor::textCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_IBEAM); } SDL_SetCursor (SDLCursor::textCursor); break; case WAIT: if (!SDLCursor::waitCursor) { SDLCursor::waitCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_WAIT); } SDL_SetCursor (SDLCursor::waitCursor); break; case WAIT_ARROW: if (!SDLCursor::waitArrowCursor) { SDLCursor::waitArrowCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_WAITARROW); } SDL_SetCursor (SDLCursor::waitArrowCursor); break; default: if (!SDLCursor::arrowCursor) { SDLCursor::arrowCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_ARROW); } SDL_SetCursor (SDLCursor::arrowCursor); break; } currentCursor = cursor; } } void SDLWindow::SetDisplayMode (DisplayMode* displayMode) { Uint32 pixelFormat = 0; switch (displayMode->pixelFormat) { case ARGB32: pixelFormat = SDL_PIXELFORMAT_ARGB8888; break; case BGRA32: pixelFormat = SDL_PIXELFORMAT_BGRA8888; break; default: pixelFormat = SDL_PIXELFORMAT_RGBA8888; } SDL_DisplayMode mode = { pixelFormat, displayMode->width, displayMode->height, displayMode->refreshRate, 0 }; if (SDL_SetWindowDisplayMode (sdlWindow, &mode) == 0) { displayModeSet = true; if (SDL_GetWindowFlags (sdlWindow) & SDL_WINDOW_FULLSCREEN_DESKTOP) { SDL_SetWindowFullscreen (sdlWindow, SDL_WINDOW_FULLSCREEN); } } } bool SDLWindow::SetFullscreen (bool fullscreen) { if (fullscreen) { if (displayModeSet) { SDL_SetWindowFullscreen (sdlWindow, SDL_WINDOW_FULLSCREEN); } else { SDL_SetWindowFullscreen (sdlWindow, SDL_WINDOW_FULLSCREEN_DESKTOP); } } else { SDL_SetWindowFullscreen (sdlWindow, 0); } return fullscreen; } void SDLWindow::SetIcon (ImageBuffer *imageBuffer) { SDL_Surface *surface = SDL_CreateRGBSurfaceFrom (imageBuffer->data->buffer->b, imageBuffer->width, imageBuffer->height, imageBuffer->bitsPerPixel, imageBuffer->Stride (), 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000); if (surface) { SDL_SetWindowIcon (sdlWindow, surface); SDL_FreeSurface (surface); } } bool SDLWindow::SetMaximized (bool maximized) { if (maximized) { SDL_MaximizeWindow (sdlWindow); } else { SDL_RestoreWindow (sdlWindow); } return maximized; } bool SDLWindow::SetMinimized (bool minimized) { if (minimized) { SDL_MinimizeWindow (sdlWindow); } else { SDL_RestoreWindow (sdlWindow); } return minimized; } void SDLWindow::SetMouseLock (bool mouseLock) { if (mouseLock) { SDL_SetRelativeMouseMode (SDL_TRUE); } else { SDL_SetRelativeMouseMode (SDL_FALSE); } } void SDLWindow::SetOpacity (float opacity) { SDL_SetWindowOpacity (sdlWindow, opacity); } bool SDLWindow::SetResizable (bool resizable) { #ifndef EMSCRIPTEN if (resizable) { SDL_SetWindowResizable (sdlWindow, SDL_TRUE); } else { SDL_SetWindowResizable (sdlWindow, SDL_FALSE); } return (SDL_GetWindowFlags (sdlWindow) & SDL_WINDOW_RESIZABLE); #else return resizable; #endif } void SDLWindow::SetTextInputEnabled (bool enabled) { if (enabled) { SDL_StartTextInput (); } else { SDL_StopTextInput (); } } void SDLWindow::SetTextInputRect (Rectangle * rect) { SDL_Rect bounds = { 0, 0, 0, 0 }; if (rect) { bounds.x = rect->x; bounds.y = rect->y; bounds.w = rect->width; bounds.h = rect->height; } SDL_SetTextInputRect(&bounds); } const char* SDLWindow::SetTitle (const char* title) { SDL_SetWindowTitle (sdlWindow, title); return title; } void SDLWindow::WarpMouse (int x, int y) { SDL_WarpMouseInWindow (sdlWindow, x, y); } Window* CreateWindow (Application* application, int width, int height, int flags, const char* title) { return new SDLWindow (application, width, height, flags, title); } } ================================================ FILE: project/src/backend/sdl/SDLWindow.h ================================================ #ifndef LIME_SDL_WINDOW_H #define LIME_SDL_WINDOW_H #include #include #include #include namespace lime { class SDLWindow : public Window { public: SDLWindow (Application* application, int width, int height, int flags, const char* title); ~SDLWindow (); virtual void Alert (const char* message, const char* title); virtual void Close (); virtual void ContextFlip (); virtual void* ContextLock (bool useCFFIValue); virtual void ContextMakeCurrent (); virtual void ContextUnlock (); virtual void Focus (); virtual void* GetContext (); virtual const char* GetContextType (); // virtual Cursor GetCursor (); virtual int GetDisplay (); virtual void GetDisplayMode (DisplayMode* displayMode); virtual int GetHeight (); virtual uint32_t GetID (); virtual bool GetMouseLock (); virtual float GetOpacity (); virtual double GetScale (); virtual bool GetTextInputEnabled (); virtual int GetWidth (); virtual int GetX (); virtual int GetY (); virtual void Move (int x, int y); virtual void ReadPixels (ImageBuffer *buffer, Rectangle *rect); virtual void Resize (int width, int height); virtual void SetMinimumSize (int width, int height); virtual void SetMaximumSize (int width, int height); virtual bool SetBorderless (bool borderless); virtual void SetCursor (Cursor cursor); virtual void SetDisplayMode (DisplayMode* displayMode); virtual bool SetFullscreen (bool fullscreen); virtual void SetIcon (ImageBuffer *imageBuffer); virtual bool SetMaximized (bool maximized); virtual bool SetMinimized (bool minimized); virtual void SetMouseLock (bool mouseLock); virtual void SetOpacity (float opacity); virtual bool SetResizable (bool resizable); virtual void SetTextInputEnabled (bool enabled); virtual void SetTextInputRect (Rectangle *rect); virtual const char* SetTitle (const char* title); virtual bool SetVisible (bool visible); virtual void WarpMouse (int x, int y); SDL_Renderer* sdlRenderer; SDL_Texture* sdlTexture; SDL_Window* sdlWindow; private: SDL_GLContext context; int contextHeight; int contextWidth; }; } #endif ================================================ FILE: project/src/graphics/Image.cpp ================================================ #include namespace lime { static int id_buffer; static int id_height; static int id_offsetX; static int id_offsetY; static int id_width; static bool init = false; Image::Image (value image) { if (!init) { id_buffer = val_id ("buffer"); id_height = val_id ("height"); id_offsetX = val_id ("offsetX"); id_offsetY = val_id ("offsetY"); id_width = val_id ("width"); init = true; } width = val_int (val_field (image, id_width)); height = val_int (val_field (image, id_height)); buffer = new ImageBuffer (val_field (image, id_buffer)); offsetX = val_int (val_field (image, id_offsetX)); offsetY = val_int (val_field (image, id_offsetY)); } Image::~Image () { if (buffer) { delete buffer; } } } ================================================ FILE: project/src/graphics/ImageBuffer.cpp ================================================ #include namespace lime { static int id_bitsPerPixel; static int id_data; static int id_format; static int id_height; static int id_premultiplied; static int id_transparent; static int id_width; static bool init = false; ImageBuffer::ImageBuffer (value imageBuffer) { if (!init) { id_bitsPerPixel = val_id ("bitsPerPixel"); id_transparent = val_id ("transparent"); id_data = val_id ("data"); id_width = val_id ("width"); id_height = val_id ("height"); id_format = val_id ("format"); id_premultiplied = val_id ("premultiplied"); init = true; } if (!val_is_null (imageBuffer)) { width = val_int (val_field (imageBuffer, id_width)); height = val_int (val_field (imageBuffer, id_height)); bitsPerPixel = val_int (val_field (imageBuffer, id_bitsPerPixel)); format = (PixelFormat)val_int (val_field (imageBuffer, id_format)); transparent = val_bool (val_field (imageBuffer, id_transparent)); premultiplied = val_bool (val_field (imageBuffer, id_premultiplied)); data = new ArrayBufferView (val_field (imageBuffer, id_data)); } else { width = 0; height = 0; bitsPerPixel = 32; format = RGBA32; data = 0; premultiplied = false; transparent = false; } } ImageBuffer::~ImageBuffer () { if (data) { delete data; } } void ImageBuffer::Blit (const unsigned char *data, int x, int y, int width, int height) { if (x < 0 || x + width > this->width || y < 0 || y + height > this->height) { return; } int stride = Stride (); unsigned char *bytes = this->data->buffer->b; for (int i = 0; i < height; i++) { memcpy (&bytes[(i + y) * this->width + x], &data[i * width], stride); } } void ImageBuffer::Resize (int width, int height, int bitsPerPixel) { this->bitsPerPixel = bitsPerPixel; this->width = width; this->height = height; int stride = Stride (); if (!this->data) { //this->data = new ArrayBufferView (height * stride); } else { this->data->Resize (height * stride); } } int ImageBuffer::Stride () { return width * (((bitsPerPixel + 3) & ~0x3) >> 3); } value ImageBuffer::Value () { return Value (alloc_empty_object ()); } value ImageBuffer::Value (value imageBuffer) { if (!init) { id_bitsPerPixel = val_id ("bitsPerPixel"); id_transparent = val_id ("transparent"); id_data = val_id ("data"); id_width = val_id ("width"); id_height = val_id ("height"); id_format = val_id ("format"); id_premultiplied = val_id ("premultiplied"); init = true; } alloc_field (imageBuffer, id_width, alloc_int (width)); alloc_field (imageBuffer, id_height, alloc_int (height)); alloc_field (imageBuffer, id_bitsPerPixel, alloc_int (bitsPerPixel)); alloc_field (imageBuffer, id_data, data ? data->Value (val_field (imageBuffer, id_data)) : alloc_null ()); alloc_field (imageBuffer, id_transparent, alloc_bool (transparent)); alloc_field (imageBuffer, id_format, alloc_int (format)); alloc_field (imageBuffer, id_premultiplied, alloc_bool (premultiplied)); return imageBuffer; } } ================================================ FILE: project/src/graphics/RenderEvent.cpp ================================================ #include #include namespace lime { ValuePointer* RenderEvent::callback = 0; ValuePointer* RenderEvent::eventObject = 0; static int id_type; static bool init = false; RenderEvent::RenderEvent () { type = RENDER; } void RenderEvent::Dispatch (RenderEvent* event) { if (RenderEvent::callback) { if (RenderEvent::eventObject->IsCFFIValue ()) { if (!init) { id_type = val_id ("type"); } value object = (value)RenderEvent::eventObject->Get (); alloc_field (object, id_type, alloc_int (event->type)); } else { RenderEvent* eventObject = (RenderEvent*)RenderEvent::eventObject->Get (); eventObject->type = event->type; } RenderEvent::callback->Call (); } } } ================================================ FILE: project/src/graphics/cairo/CairoBindings.cpp ================================================ #include #include #include #include #include #include #include #include #include #include namespace lime { static int id_index; static int id_x; static int id_y; static bool init = false; cairo_user_data_key_t userData; std::map cairoObjects; Mutex cairoObjects_Mutex; struct HL_CairoGlyph { hl_type* t; int index; double x; double y; }; void gc_cairo (value handle) { if (!val_is_null (handle)) { cairo_t* cairo = (cairo_t*)val_data (handle); cairoObjects_Mutex.Lock (); cairoObjects.erase (cairo); cairoObjects_Mutex.Unlock (); cairo_destroy (cairo); } } void hl_gc_cairo (HL_CFFIPointer* handle) { cairo_t* cairo = (cairo_t*)handle->ptr; handle->ptr = 0; cairoObjects_Mutex.Lock (); cairoObjects.erase (cairo); cairoObjects_Mutex.Unlock (); cairo_destroy (cairo); } void gc_cairo_font_face (value handle) { if (!val_is_null (handle)) { cairo_font_face_t* face = (cairo_font_face_t*)val_data (handle); cairoObjects_Mutex.Lock (); cairoObjects.erase (face); cairoObjects_Mutex.Unlock (); cairo_font_face_destroy (face); } } void hl_gc_cairo_font_face (HL_CFFIPointer* handle) { cairo_font_face_t* face = (cairo_font_face_t*)handle->ptr; handle->ptr = 0; cairoObjects_Mutex.Lock (); cairoObjects.erase (face); cairoObjects_Mutex.Unlock (); cairo_font_face_destroy (face); } void gc_cairo_font_options (value handle) { if (!val_is_null (handle)) { cairo_font_options_t* options = (cairo_font_options_t*)val_data (handle); cairo_font_options_destroy (options); } } void hl_gc_cairo_font_options (HL_CFFIPointer* handle) { cairo_font_options_t* options = (cairo_font_options_t*)handle->ptr; handle->ptr = 0; cairo_font_options_destroy (options); } void gc_cairo_pattern (value handle) { if (!val_is_null (handle)) { cairo_pattern_t* pattern = (cairo_pattern_t*)val_data (handle); cairoObjects_Mutex.Lock (); cairoObjects.erase (pattern); cairoObjects_Mutex.Unlock (); cairo_pattern_destroy (pattern); } } void hl_gc_cairo_pattern (HL_CFFIPointer* handle) { cairo_pattern_t* pattern = (cairo_pattern_t*)handle->ptr; handle->ptr = 0; cairoObjects_Mutex.Lock (); cairoObjects.erase (pattern); cairoObjects_Mutex.Unlock (); cairo_pattern_destroy (pattern); } void gc_cairo_surface (value handle) { if (!val_is_null (handle)) { cairo_surface_t* surface = (cairo_surface_t*)val_data (handle); cairoObjects_Mutex.Lock (); cairoObjects.erase (surface); cairoObjects_Mutex.Unlock (); cairo_surface_destroy (surface); } } void hl_gc_cairo_surface (HL_CFFIPointer* handle) { cairo_surface_t* surface = (cairo_surface_t*)handle->ptr; handle->ptr = 0; cairoObjects_Mutex.Lock (); cairoObjects.erase (surface); cairoObjects_Mutex.Unlock (); cairo_surface_destroy (surface); } void gc_user_data (void* data) { ValuePointer* reference = (ValuePointer*)data; delete reference; } void lime_cairo_arc (value handle, double xc, double yc, double radius, double angle1, double angle2) { cairo_arc ((cairo_t*)val_data (handle), xc, yc, radius, angle1, angle2); } HL_PRIM void HL_NAME(hl_cairo_arc) (HL_CFFIPointer* handle, double xc, double yc, double radius, double angle1, double angle2) { cairo_arc ((cairo_t*)handle->ptr, xc, yc, radius, angle1, angle2); } void lime_cairo_arc_negative (value handle, double xc, double yc, double radius, double angle1, double angle2) { cairo_arc_negative ((cairo_t*)val_data (handle), xc, yc, radius, angle1, angle2); } HL_PRIM void HL_NAME(hl_cairo_arc_negative) (HL_CFFIPointer* handle, double xc, double yc, double radius, double angle1, double angle2) { cairo_arc_negative ((cairo_t*)handle->ptr, xc, yc, radius, angle1, angle2); } void lime_cairo_clip (value handle) { cairo_clip ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_clip) (HL_CFFIPointer* handle) { cairo_clip ((cairo_t*)handle->ptr); } void lime_cairo_clip_extents (value handle, double x1, double y1, double x2, double y2) { cairo_clip_extents ((cairo_t*)val_data (handle), &x1, &y1, &x2, &y2); } HL_PRIM void HL_NAME(hl_cairo_clip_extents) (HL_CFFIPointer* handle, double x1, double y1, double x2, double y2) { cairo_clip_extents ((cairo_t*)handle->ptr, &x1, &y1, &x2, &y2); } void lime_cairo_clip_preserve (value handle) { cairo_clip_preserve ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_clip_preserve) (HL_CFFIPointer* handle) { cairo_clip_preserve ((cairo_t*)handle->ptr); } void lime_cairo_close_path (value handle) { cairo_close_path ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_close_path) (HL_CFFIPointer* handle) { cairo_close_path ((cairo_t*)handle->ptr); } void lime_cairo_copy_page (value handle) { cairo_copy_page ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_copy_page) (HL_CFFIPointer* handle) { cairo_copy_page ((cairo_t*)handle->ptr); } value lime_cairo_create (value surface) { cairo_t* cairo = cairo_create ((cairo_surface_t*)val_data (surface)); value object = CFFIPointer (cairo, gc_cairo); cairoObjects_Mutex.Lock (); cairoObjects[cairo] = object; cairoObjects_Mutex.Unlock (); return object; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_create) (HL_CFFIPointer* surface) { cairo_t* cairo = cairo_create ((cairo_surface_t*)surface->ptr); HL_CFFIPointer* object = HLCFFIPointer (cairo, (hl_finalizer)hl_gc_cairo); cairoObjects_Mutex.Lock (); cairoObjects[cairo] = object; cairoObjects_Mutex.Unlock (); return object; } void lime_cairo_curve_to (value handle, double x1, double y1, double x2, double y2, double x3, double y3) { cairo_curve_to ((cairo_t*)val_data (handle), x1, y1, x2, y2, x3, y3); } HL_PRIM void HL_NAME(hl_cairo_curve_to) (HL_CFFIPointer* handle, double x1, double y1, double x2, double y2, double x3, double y3) { cairo_curve_to ((cairo_t*)handle->ptr, x1, y1, x2, y2, x3, y3); } void lime_cairo_fill (value handle) { cairo_fill ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_fill) (HL_CFFIPointer* handle) { cairo_fill ((cairo_t*)handle->ptr); } void lime_cairo_fill_extents (value handle, double x1, double y1, double x2, double y2) { cairo_fill_extents ((cairo_t*)val_data (handle), &x1, &y1, &x2, &y2); } HL_PRIM void HL_NAME(hl_cairo_fill_extents) (HL_CFFIPointer* handle, double x1, double y1, double x2, double y2) { cairo_fill_extents ((cairo_t*)handle->ptr, &x1, &y1, &x2, &y2); } void lime_cairo_fill_preserve (value handle) { cairo_fill_preserve ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_fill_preserve) (HL_CFFIPointer* handle) { cairo_fill_preserve ((cairo_t*)handle->ptr); } int lime_cairo_font_face_status (value handle) { return cairo_font_face_status ((cairo_font_face_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_font_face_status) (HL_CFFIPointer* handle) { return cairo_font_face_status ((cairo_font_face_t*)handle->ptr); } value lime_cairo_font_options_create () { cairo_font_options_t* options = cairo_font_options_create (); return CFFIPointer (options, gc_cairo_font_options); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_font_options_create) () { cairo_font_options_t* options = cairo_font_options_create (); return HLCFFIPointer (options, (hl_finalizer)hl_gc_cairo_font_options); } int lime_cairo_font_options_get_antialias (value handle) { return cairo_font_options_get_antialias ((cairo_font_options_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_font_options_get_antialias) (HL_CFFIPointer* handle) { return cairo_font_options_get_antialias ((cairo_font_options_t*)handle->ptr); } int lime_cairo_font_options_get_hint_metrics (value handle) { return cairo_font_options_get_hint_metrics ((cairo_font_options_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_font_options_get_hint_metrics) (HL_CFFIPointer* handle) { return cairo_font_options_get_hint_metrics ((cairo_font_options_t*)handle->ptr); } int lime_cairo_font_options_get_hint_style (value handle) { return cairo_font_options_get_hint_style ((cairo_font_options_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_font_options_get_hint_style) (HL_CFFIPointer* handle) { return cairo_font_options_get_hint_style ((cairo_font_options_t*)handle->ptr); } int lime_cairo_font_options_get_subpixel_order (value handle) { return cairo_font_options_get_subpixel_order ((cairo_font_options_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_font_options_get_subpixel_order) (HL_CFFIPointer* handle) { return cairo_font_options_get_subpixel_order ((cairo_font_options_t*)handle->ptr); } void lime_cairo_font_options_set_antialias (value handle, int v) { cairo_font_options_set_antialias ((cairo_font_options_t*)val_data (handle), (cairo_antialias_t)v); } HL_PRIM void HL_NAME(hl_cairo_font_options_set_antialias) (HL_CFFIPointer* handle, int v) { cairo_font_options_set_antialias ((cairo_font_options_t*)handle->ptr, (cairo_antialias_t)v); } void lime_cairo_font_options_set_hint_metrics (value handle, int v) { cairo_font_options_set_hint_metrics ((cairo_font_options_t*)val_data (handle), (cairo_hint_metrics_t)v); } HL_PRIM void HL_NAME(hl_cairo_font_options_set_hint_metrics) (HL_CFFIPointer* handle, int v) { cairo_font_options_set_hint_metrics ((cairo_font_options_t*)handle->ptr, (cairo_hint_metrics_t)v); } void lime_cairo_font_options_set_hint_style (value handle, int v) { cairo_font_options_set_hint_style ((cairo_font_options_t*)val_data (handle), (cairo_hint_style_t)v); } HL_PRIM void HL_NAME(hl_cairo_font_options_set_hint_style) (HL_CFFIPointer* handle, int v) { cairo_font_options_set_hint_style ((cairo_font_options_t*)handle->ptr, (cairo_hint_style_t)v); } void lime_cairo_font_options_set_subpixel_order (value handle, int v) { cairo_font_options_set_subpixel_order ((cairo_font_options_t*)val_data (handle), (cairo_subpixel_order_t)v); } HL_PRIM void HL_NAME(hl_cairo_font_options_set_subpixel_order) (HL_CFFIPointer* handle, int v) { cairo_font_options_set_subpixel_order ((cairo_font_options_t*)handle->ptr, (cairo_subpixel_order_t)v); } value lime_cairo_ft_font_face_create (value face, int flags) { #ifdef LIME_FREETYPE Font* font = (Font*)val_data (face); cairo_font_face_t* cairoFont = cairo_ft_font_face_create_for_ft_face ((FT_Face)font->face, flags); ValuePointer* fontReference = new ValuePointer (face); cairo_font_face_set_user_data (cairoFont, &userData, fontReference, gc_user_data); value object = CFFIPointer (cairoFont, gc_cairo_font_face); cairoObjects_Mutex.Lock (); cairoObjects[cairoFont] = object; cairoObjects_Mutex.Unlock (); return object; #else return 0; #endif } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_ft_font_face_create) (HL_CFFIPointer* face, int flags) { #ifdef LIME_FREETYPE Font* font = (Font*)face->ptr; cairo_font_face_t* cairoFont = cairo_ft_font_face_create_for_ft_face ((FT_Face)font->face, flags); ValuePointer* fontReference = new ValuePointer ((vobj*)face); cairo_font_face_set_user_data (cairoFont, &userData, fontReference, gc_user_data); HL_CFFIPointer* object = HLCFFIPointer (cairoFont, (hl_finalizer)hl_gc_cairo_font_face); cairoObjects_Mutex.Lock (); cairoObjects[cairoFont] = object; cairoObjects_Mutex.Unlock (); return object; #else return 0; #endif } int lime_cairo_get_antialias (value handle) { return cairo_get_antialias ((cairo_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_get_antialias) (HL_CFFIPointer* handle) { return cairo_get_antialias ((cairo_t*)handle->ptr); } value lime_cairo_get_current_point (value handle) { double x, y; cairo_get_current_point ((cairo_t*)val_data (handle), &x, &y); Vector2 vec2 = Vector2 (x, y); return vec2.Value (); } HL_PRIM Vector2* HL_NAME(hl_cairo_get_current_point) (HL_CFFIPointer* handle, Vector2* out) { cairo_get_current_point ((cairo_t*)handle->ptr, &out->x, &out->y); return out; } value lime_cairo_get_dash (value handle) { int length = cairo_get_dash_count ((cairo_t*)val_data (handle)); double* dashes = new double[length]; double offset; cairo_get_dash ((cairo_t*)val_data (handle), dashes, &offset); value result = alloc_array (length); for (int i = 0; i < length; i++) { val_array_set_i (result, i, alloc_float (dashes[i])); } delete[] dashes; return result; } HL_PRIM varray* HL_NAME(hl_cairo_get_dash) (HL_CFFIPointer* handle) { int length = cairo_get_dash_count ((cairo_t*)handle->ptr); varray* result = hl_alloc_array (&hlt_f64, length); double offset; cairo_get_dash ((cairo_t*)handle->ptr, hl_aptr (result, double), &offset); return result; } int lime_cairo_get_dash_count (value handle) { return cairo_get_dash_count ((cairo_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_get_dash_count) (HL_CFFIPointer* handle) { return cairo_get_dash_count ((cairo_t*)handle->ptr); } int lime_cairo_get_fill_rule (value handle) { return cairo_get_fill_rule ((cairo_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_get_fill_rule) (HL_CFFIPointer* handle) { return cairo_get_fill_rule ((cairo_t*)handle->ptr); } value lime_cairo_get_font_face (value handle) { cairo_font_face_t* face = cairo_get_font_face ((cairo_t*)val_data (handle)); if (cairoObjects.find (face) != cairoObjects.end ()) { return (value)cairoObjects[face]; } else { cairo_font_face_reference (face); value object = CFFIPointer (face, gc_cairo_font_face); cairoObjects_Mutex.Lock (); cairoObjects[face] = object; cairoObjects_Mutex.Unlock (); return object; } } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_get_font_face) (HL_CFFIPointer* handle) { cairo_font_face_t* face = cairo_get_font_face ((cairo_t*)handle->ptr); if (cairoObjects.find (face) != cairoObjects.end ()) { return (HL_CFFIPointer*)cairoObjects[face]; } else { cairo_font_face_reference (face); HL_CFFIPointer* object = HLCFFIPointer (face, (hl_finalizer)hl_gc_cairo_font_face); cairoObjects_Mutex.Lock (); cairoObjects[face] = object; cairoObjects_Mutex.Unlock (); return object; } } value lime_cairo_get_font_options (value handle) { cairo_font_options_t* options = 0; cairo_get_font_options ((cairo_t*)val_data (handle), options); return CFFIPointer (options, gc_cairo_font_options); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_get_font_options) (HL_CFFIPointer* handle) { cairo_font_options_t* options = 0; cairo_get_font_options ((cairo_t*)handle->ptr, options); return HLCFFIPointer (options, (hl_finalizer)hl_gc_cairo_font_options); } value lime_cairo_get_group_target (value handle) { cairo_surface_t* surface = cairo_get_group_target ((cairo_t*)val_data (handle)); if (cairoObjects.find (surface) != cairoObjects.end ()) { return (value)cairoObjects[surface]; } else { cairo_surface_reference (surface); value object = CFFIPointer (surface, gc_cairo_surface); cairoObjects_Mutex.Lock (); cairoObjects[surface] = object; cairoObjects_Mutex.Unlock (); return object; } } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_get_group_target) (HL_CFFIPointer* handle) { cairo_surface_t* surface = cairo_get_group_target ((cairo_t*)handle->ptr); if (cairoObjects.find (surface) != cairoObjects.end ()) { return (HL_CFFIPointer*)cairoObjects[surface]; } else { cairo_surface_reference (surface); HL_CFFIPointer* object = HLCFFIPointer (surface, (hl_finalizer)hl_gc_cairo_surface); cairoObjects_Mutex.Lock (); cairoObjects[surface] = object; cairoObjects_Mutex.Unlock (); return object; } } int lime_cairo_get_line_cap (value handle) { return cairo_get_line_cap ((cairo_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_get_line_cap) (HL_CFFIPointer* handle) { return cairo_get_line_cap ((cairo_t*)handle->ptr); } int lime_cairo_get_line_join (value handle) { return cairo_get_line_join ((cairo_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_get_line_join) (HL_CFFIPointer* handle) { return cairo_get_line_join ((cairo_t*)handle->ptr); } double lime_cairo_get_line_width (value handle) { return cairo_get_line_width ((cairo_t*)val_data (handle)); } HL_PRIM double HL_NAME(hl_cairo_get_line_width) (HL_CFFIPointer* handle) { return cairo_get_line_width ((cairo_t*)handle->ptr); } value lime_cairo_get_matrix (value handle) { cairo_matrix_t cm; cairo_get_matrix ((cairo_t*)val_data (handle), &cm); Matrix3 mat3 = Matrix3 (cm.xx, cm.yx, cm.xy, cm.yy, cm.x0, cm.y0); return mat3.Value (); } HL_PRIM Matrix3* HL_NAME(hl_cairo_get_matrix) (HL_CFFIPointer* handle, Matrix3* out) { // cairo_matrix_t cm; // cairo_get_matrix ((cairo_t*)handle->ptr, &cm); // out->a = cm.xx; // out->b = cm.yx; // out->c = cm.xy; // out->d = cm.yy; // out->tx = cm.x0; // out->ty = cm.y0; cairo_get_matrix ((cairo_t*)handle->ptr, (cairo_matrix_t*)&out->a); return out; } double lime_cairo_get_miter_limit (value handle) { return cairo_get_miter_limit ((cairo_t*)val_data (handle)); } HL_PRIM double HL_NAME(hl_cairo_get_miter_limit) (HL_CFFIPointer* handle) { return cairo_get_miter_limit ((cairo_t*)handle->ptr); } int lime_cairo_get_operator (value handle) { return cairo_get_operator ((cairo_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_get_operator) (HL_CFFIPointer* handle) { return cairo_get_operator ((cairo_t*)handle->ptr); } value lime_cairo_get_source (value handle) { cairo_pattern_t* pattern = cairo_get_source ((cairo_t*)val_data (handle)); if (cairoObjects.find (pattern) != cairoObjects.end ()) { return (value)cairoObjects[pattern]; } else { cairo_pattern_reference (pattern); value object = CFFIPointer (pattern, gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_get_source) (HL_CFFIPointer* handle) { cairo_pattern_t* pattern = cairo_get_source ((cairo_t*)handle->ptr); if (cairoObjects.find (pattern) != cairoObjects.end ()) { return (HL_CFFIPointer*)cairoObjects[pattern]; } else { cairo_pattern_reference (pattern); HL_CFFIPointer* object = HLCFFIPointer (pattern, (hl_finalizer)hl_gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } } value lime_cairo_get_target (value handle) { cairo_surface_t* surface = cairo_get_target ((cairo_t*)val_data (handle)); if (cairoObjects.find (surface) != cairoObjects.end ()) { return (value)cairoObjects[surface]; } else { cairo_surface_reference (surface); value object = CFFIPointer (surface, gc_cairo_surface); cairoObjects_Mutex.Lock (); cairoObjects[surface] = object; cairoObjects_Mutex.Unlock (); return object; } } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_get_target) (HL_CFFIPointer* handle) { cairo_surface_t* surface = cairo_get_target ((cairo_t*)handle->ptr); if (cairoObjects.find (surface) != cairoObjects.end ()) { return (HL_CFFIPointer*)cairoObjects[surface]; } else { cairo_surface_reference (surface); HL_CFFIPointer* object = HLCFFIPointer (surface, (hl_finalizer)hl_gc_cairo_surface); cairoObjects_Mutex.Lock (); cairoObjects[surface] = object; cairoObjects_Mutex.Unlock (); return object; } } double lime_cairo_get_tolerance (value handle) { return cairo_get_tolerance ((cairo_t*)val_data (handle)); } HL_PRIM double HL_NAME(hl_cairo_get_tolerance) (HL_CFFIPointer* handle) { return cairo_get_tolerance ((cairo_t*)handle->ptr); } bool lime_cairo_has_current_point (value handle) { return cairo_has_current_point ((cairo_t*)val_data (handle)); } HL_PRIM bool HL_NAME(hl_cairo_has_current_point) (HL_CFFIPointer* handle) { return cairo_has_current_point ((cairo_t*)handle->ptr); } void lime_cairo_identity_matrix (value handle) { cairo_identity_matrix ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_identity_matrix) (HL_CFFIPointer* handle) { cairo_identity_matrix ((cairo_t*)handle->ptr); } value lime_cairo_image_surface_create (int format, int width, int height) { cairo_surface_t* surface = cairo_image_surface_create ((cairo_format_t)format, width, height); value object = CFFIPointer (surface, gc_cairo_surface); cairoObjects_Mutex.Lock (); cairoObjects[surface] = object; cairoObjects_Mutex.Unlock (); return object; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_image_surface_create) (int format, int width, int height) { cairo_surface_t* surface = cairo_image_surface_create ((cairo_format_t)format, width, height); HL_CFFIPointer* object = HLCFFIPointer (surface, (hl_finalizer)hl_gc_cairo_surface); cairoObjects_Mutex.Lock (); cairoObjects[surface] = object; cairoObjects_Mutex.Unlock (); return object; } value lime_cairo_image_surface_create_for_data (double data, int format, int width, int height, int stride) { cairo_surface_t* surface = cairo_image_surface_create_for_data ((unsigned char*)(uintptr_t)data, (cairo_format_t)format, width, height, stride); value object = CFFIPointer (surface, gc_cairo_surface); cairoObjects_Mutex.Lock (); cairoObjects[surface] = object; cairoObjects_Mutex.Unlock (); return object; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_image_surface_create_for_data) (double data, int format, int width, int height, int stride) { cairo_surface_t* surface = cairo_image_surface_create_for_data ((unsigned char*)(uintptr_t)data, (cairo_format_t)format, width, height, stride); HL_CFFIPointer* object = HLCFFIPointer (surface, (hl_finalizer)hl_gc_cairo_surface); cairoObjects_Mutex.Lock (); cairoObjects[surface] = object; cairoObjects_Mutex.Unlock (); return object; } double lime_cairo_image_surface_get_data (value handle) { return (uintptr_t)cairo_image_surface_get_data ((cairo_surface_t*)val_data (handle)); } HL_PRIM double HL_NAME(hl_cairo_image_surface_get_data) (HL_CFFIPointer* handle) { return (uintptr_t)cairo_image_surface_get_data ((cairo_surface_t*)handle->ptr); } int lime_cairo_image_surface_get_format (value handle) { return (int)cairo_image_surface_get_format ((cairo_surface_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_image_surface_get_format) (HL_CFFIPointer* handle) { return (int)cairo_image_surface_get_format ((cairo_surface_t*)handle->ptr); } int lime_cairo_image_surface_get_height (value handle) { return cairo_image_surface_get_height ((cairo_surface_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_image_surface_get_height) (HL_CFFIPointer* handle) { return cairo_image_surface_get_height ((cairo_surface_t*)handle->ptr); } int lime_cairo_image_surface_get_stride (value handle) { return cairo_image_surface_get_stride ((cairo_surface_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_image_surface_get_stride) (HL_CFFIPointer* handle) { return cairo_image_surface_get_stride ((cairo_surface_t*)handle->ptr); } int lime_cairo_image_surface_get_width (value handle) { return cairo_image_surface_get_width ((cairo_surface_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_image_surface_get_width) (HL_CFFIPointer* handle) { return cairo_image_surface_get_width ((cairo_surface_t*)handle->ptr); } bool lime_cairo_in_clip (value handle, double x, double y) { return cairo_in_clip ((cairo_t*)val_data (handle), x, y); } HL_PRIM bool HL_NAME(hl_cairo_in_clip) (HL_CFFIPointer* handle, double x, double y) { return cairo_in_clip ((cairo_t*)handle->ptr, x, y); } bool lime_cairo_in_fill (value handle, double x, double y) { return cairo_in_fill ((cairo_t*)val_data (handle), x, y); } HL_PRIM bool HL_NAME(hl_cairo_in_fill) (HL_CFFIPointer* handle, double x, double y) { return cairo_in_fill ((cairo_t*)handle->ptr, x, y); } bool lime_cairo_in_stroke (value handle, double x, double y) { return cairo_in_stroke ((cairo_t*)val_data (handle), x, y); } HL_PRIM bool HL_NAME(hl_cairo_in_stroke) (HL_CFFIPointer* handle, double x, double y) { return cairo_in_stroke ((cairo_t*)handle->ptr, x, y); } void lime_cairo_line_to (value handle, double x, double y) { cairo_line_to ((cairo_t*)val_data (handle), x, y); } HL_PRIM void HL_NAME(hl_cairo_line_to) (HL_CFFIPointer* handle, double x, double y) { cairo_line_to ((cairo_t*)handle->ptr, x, y); } void lime_cairo_mask (value handle, value pattern) { cairo_mask ((cairo_t*)val_data (handle), (cairo_pattern_t*)val_data (pattern)); } HL_PRIM void HL_NAME(hl_cairo_mask) (HL_CFFIPointer* handle, HL_CFFIPointer* pattern) { cairo_mask ((cairo_t*)handle->ptr, (cairo_pattern_t*)pattern->ptr); } void lime_cairo_mask_surface (value handle, value surface, double x, double y) { cairo_mask_surface ((cairo_t*)val_data (handle), (cairo_surface_t*)val_data (surface), x, y); } HL_PRIM void HL_NAME(hl_cairo_mask_surface) (HL_CFFIPointer* handle, HL_CFFIPointer* surface, double x, double y) { cairo_mask_surface ((cairo_t*)handle->ptr, (cairo_surface_t*)surface->ptr, x, y); } void lime_cairo_move_to (value handle, double x, double y) { cairo_move_to ((cairo_t*)val_data (handle), x, y); } HL_PRIM void HL_NAME(hl_cairo_move_to) (HL_CFFIPointer* handle, double x, double y) { cairo_move_to ((cairo_t*)handle->ptr, x, y); } void lime_cairo_new_path (value handle) { cairo_new_path ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_new_path) (HL_CFFIPointer* handle) { cairo_new_path ((cairo_t*)handle->ptr); } void lime_cairo_paint (value handle) { cairo_paint ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_paint) (HL_CFFIPointer* handle) { cairo_paint ((cairo_t*)handle->ptr); } void lime_cairo_paint_with_alpha (value handle, double alpha) { cairo_paint_with_alpha ((cairo_t*)val_data (handle), alpha); } HL_PRIM void HL_NAME(hl_cairo_paint_with_alpha) (HL_CFFIPointer* handle, double alpha) { cairo_paint_with_alpha ((cairo_t*)handle->ptr, alpha); } void lime_cairo_pattern_add_color_stop_rgb (value handle, double offset, double red, double green, double blue) { cairo_pattern_add_color_stop_rgb ((cairo_pattern_t*)val_data (handle), offset, red, green, blue); } HL_PRIM void HL_NAME(hl_cairo_pattern_add_color_stop_rgb) (HL_CFFIPointer* handle, double offset, double red, double green, double blue) { cairo_pattern_add_color_stop_rgb ((cairo_pattern_t*)handle->ptr, offset, red, green, blue); } void lime_cairo_pattern_add_color_stop_rgba (value handle, double offset, double red, double green, double blue, double alpha) { cairo_pattern_add_color_stop_rgba ((cairo_pattern_t*)val_data (handle), offset, red, green, blue, alpha); } HL_PRIM void HL_NAME(hl_cairo_pattern_add_color_stop_rgba) (HL_CFFIPointer* handle, double offset, double red, double green, double blue, double alpha) { cairo_pattern_add_color_stop_rgba ((cairo_pattern_t*)handle->ptr, offset, red, green, blue, alpha); } value lime_cairo_pattern_create_for_surface (value surface) { cairo_pattern_t* pattern = cairo_pattern_create_for_surface ((cairo_surface_t*)val_data (surface)); value object = CFFIPointer (pattern, gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_pattern_create_for_surface) (HL_CFFIPointer* surface) { cairo_pattern_t* pattern = cairo_pattern_create_for_surface ((cairo_surface_t*)surface->ptr); HL_CFFIPointer* object = HLCFFIPointer (pattern, (hl_finalizer)hl_gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } value lime_cairo_pattern_create_linear (double x0, double y0, double x1, double y1) { cairo_pattern_t* pattern = cairo_pattern_create_linear (x0, y0, x1, y1); value object = CFFIPointer (pattern, gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_pattern_create_linear) (double x0, double y0, double x1, double y1) { cairo_pattern_t* pattern = cairo_pattern_create_linear (x0, y0, x1, y1); HL_CFFIPointer* object = HLCFFIPointer (pattern, (hl_finalizer)hl_gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } value lime_cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1) { cairo_pattern_t* pattern = cairo_pattern_create_radial (cx0, cy0, radius0, cx1, cy1, radius1); value object = CFFIPointer (pattern, gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_pattern_create_radial) (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1) { cairo_pattern_t* pattern = cairo_pattern_create_radial (cx0, cy0, radius0, cx1, cy1, radius1); HL_CFFIPointer* object = HLCFFIPointer (pattern, (hl_finalizer)hl_gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } value lime_cairo_pattern_create_rgb (double r, double g, double b) { cairo_pattern_t* pattern = cairo_pattern_create_rgb (r, g, b); value object = CFFIPointer (pattern, gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_pattern_create_rgb) (double r, double g, double b) { cairo_pattern_t* pattern = cairo_pattern_create_rgb (r, g, b); HL_CFFIPointer* object = HLCFFIPointer (pattern, (hl_finalizer)hl_gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } value lime_cairo_pattern_create_rgba (double r, double g, double b, double a) { cairo_pattern_t* pattern = cairo_pattern_create_rgba (r, g, b, a); value object = CFFIPointer (pattern, gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_pattern_create_rgba) (double r, double g, double b, double a) { cairo_pattern_t* pattern = cairo_pattern_create_rgba (r, g, b, a); HL_CFFIPointer* object = HLCFFIPointer (pattern, (hl_finalizer)hl_gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } int lime_cairo_pattern_get_color_stop_count (value handle) { int count; cairo_pattern_get_color_stop_count ((cairo_pattern_t*)val_data (handle), &count); return count; } HL_PRIM int HL_NAME(hl_cairo_pattern_get_color_stop_count) (HL_CFFIPointer* handle) { int count; cairo_pattern_get_color_stop_count ((cairo_pattern_t*)handle->ptr, &count); return count; } int lime_cairo_pattern_get_extend (value handle) { return cairo_pattern_get_extend ((cairo_pattern_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_pattern_get_extend) (HL_CFFIPointer* handle) { return cairo_pattern_get_extend ((cairo_pattern_t*)handle->ptr); } int lime_cairo_pattern_get_filter (value handle) { return cairo_pattern_get_filter ((cairo_pattern_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_pattern_get_filter) (HL_CFFIPointer* handle) { return cairo_pattern_get_filter ((cairo_pattern_t*)handle->ptr); } value lime_cairo_pattern_get_matrix (value handle) { cairo_matrix_t cm; cairo_pattern_get_matrix ((cairo_pattern_t*)val_data (handle), &cm); Matrix3 mat3 = Matrix3 (cm.xx, cm.yx, cm.xy, cm.yy, cm.x0, cm.y0); return mat3.Value (); } HL_PRIM Matrix3* HL_NAME(hl_cairo_pattern_get_matrix) (HL_CFFIPointer* handle, Matrix3* out) { // cairo_matrix_t cm; // cairo_pattern_get_matrix ((cairo_pattern_t*)handle->ptr, &cm); // out->a = cm.xx; // out->b = cm.yx; // out->c = cm.xy; // out->d = cm.yy; // out->tx = cm.x0; // out->ty = cm.y0; cairo_pattern_get_matrix ((cairo_pattern_t*)handle->ptr, (cairo_matrix_t*)&out->a); return out; } void lime_cairo_pattern_set_extend (value handle, int extend) { cairo_pattern_set_extend ((cairo_pattern_t*)val_data (handle), (cairo_extend_t)extend); } HL_PRIM void HL_NAME(hl_cairo_pattern_set_extend) (HL_CFFIPointer* handle, int extend) { cairo_pattern_set_extend ((cairo_pattern_t*)handle->ptr, (cairo_extend_t)extend); } void lime_cairo_pattern_set_filter (value handle, int filter) { cairo_pattern_set_filter ((cairo_pattern_t*)val_data (handle), (cairo_filter_t)filter); } HL_PRIM void HL_NAME(hl_cairo_pattern_set_filter) (HL_CFFIPointer* handle, int filter) { cairo_pattern_set_filter ((cairo_pattern_t*)handle->ptr, (cairo_filter_t)filter); } void lime_cairo_pattern_set_matrix (value handle, value matrix) { Matrix3 mat3 = Matrix3 (matrix); cairo_matrix_t cm; cairo_matrix_init (&cm, mat3.a, mat3.b, mat3.c, mat3.d, mat3.tx, mat3.ty); cairo_pattern_set_matrix ((cairo_pattern_t*)val_data (handle), &cm); } HL_PRIM void HL_NAME(hl_cairo_pattern_set_matrix) (HL_CFFIPointer* handle, Matrix3* matrix) { // cairo_matrix_t cm; // cairo_matrix_init (&cm, mat3.a, mat3.b, mat3.c, mat3.d, mat3.tx, mat3.ty); // cairo_pattern_set_matrix ((cairo_pattern_t*)handle->ptr, &cm); cairo_pattern_set_matrix ((cairo_pattern_t*)handle->ptr, (cairo_matrix_t*)&matrix->a); } value lime_cairo_pop_group (value handle) { cairo_pattern_t* pattern = cairo_pop_group ((cairo_t*)val_data (handle)); if (cairoObjects.find (pattern) != cairoObjects.end ()) { return (value)cairoObjects[pattern]; } else { cairo_pattern_reference (pattern); value object = CFFIPointer (pattern, gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } } HL_PRIM HL_CFFIPointer* HL_NAME(hl_cairo_pop_group) (HL_CFFIPointer* handle) { cairo_pattern_t* pattern = cairo_pop_group ((cairo_t*)handle->ptr); if (cairoObjects.find (pattern) != cairoObjects.end ()) { return (HL_CFFIPointer*)cairoObjects[pattern]; } else { cairo_pattern_reference (pattern); HL_CFFIPointer* object = HLCFFIPointer (pattern, (hl_finalizer)hl_gc_cairo_pattern); cairoObjects_Mutex.Lock (); cairoObjects[pattern] = object; cairoObjects_Mutex.Unlock (); return object; } } void lime_cairo_pop_group_to_source (value handle) { cairo_pop_group_to_source ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_pop_group_to_source) (HL_CFFIPointer* handle) { cairo_pop_group_to_source ((cairo_t*)handle->ptr); } void lime_cairo_push_group (value handle) { cairo_push_group ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_push_group) (HL_CFFIPointer* handle) { cairo_push_group ((cairo_t*)handle->ptr); } void lime_cairo_push_group_with_content (value handle, int content) { cairo_push_group_with_content ((cairo_t*)val_data (handle), (cairo_content_t)content); } HL_PRIM void HL_NAME(hl_cairo_push_group_with_content) (HL_CFFIPointer* handle, int content) { cairo_push_group_with_content ((cairo_t*)handle->ptr, (cairo_content_t)content); } void lime_cairo_rectangle (value handle, double x, double y, double width, double height) { cairo_rectangle ((cairo_t*)val_data (handle), x, y, width, height); } HL_PRIM void HL_NAME(hl_cairo_rectangle) (HL_CFFIPointer* handle, double x, double y, double width, double height) { cairo_rectangle ((cairo_t*)handle->ptr, x, y, width, height); } void lime_cairo_rel_curve_to (value handle, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3) { cairo_rel_curve_to ((cairo_t*)val_data (handle), dx1, dy1, dx2, dy2, dx3, dy3); } HL_PRIM void HL_NAME(hl_cairo_rel_curve_to) (HL_CFFIPointer* handle, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3) { cairo_rel_curve_to ((cairo_t*)handle->ptr, dx1, dy1, dx2, dy2, dx3, dy3); } void lime_cairo_rel_line_to (value handle, double dx, double dy) { cairo_rel_line_to ((cairo_t*)val_data (handle), dx, dy); } HL_PRIM void HL_NAME(hl_cairo_rel_line_to) (HL_CFFIPointer* handle, double dx, double dy) { cairo_rel_line_to ((cairo_t*)handle->ptr, dx, dy); } void lime_cairo_rel_move_to (value handle, double dx, double dy) { cairo_rel_move_to ((cairo_t*)val_data (handle), dx, dy); } HL_PRIM void HL_NAME(hl_cairo_rel_move_to) (HL_CFFIPointer* handle, double dx, double dy) { cairo_rel_move_to ((cairo_t*)handle->ptr, dx, dy); } void lime_cairo_reset_clip (value handle) { cairo_reset_clip ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_reset_clip) (HL_CFFIPointer* handle) { cairo_reset_clip ((cairo_t*)handle->ptr); } void lime_cairo_restore (value handle) { cairo_restore ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_restore) (HL_CFFIPointer* handle) { cairo_restore ((cairo_t*)handle->ptr); } void lime_cairo_rotate (value handle, double amount) { cairo_rotate ((cairo_t*)val_data (handle), amount); } HL_PRIM void HL_NAME(hl_cairo_rotate) (HL_CFFIPointer* handle, double amount) { cairo_rotate ((cairo_t*)handle->ptr, amount); } void lime_cairo_save (value handle) { cairo_save ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_save) (HL_CFFIPointer* handle) { cairo_save ((cairo_t*)handle->ptr); } void lime_cairo_scale (value handle, double x, double y) { cairo_scale ((cairo_t*)val_data (handle), x, y); } HL_PRIM void HL_NAME(hl_cairo_scale) (HL_CFFIPointer* handle, double x, double y) { cairo_scale ((cairo_t*)handle->ptr, x, y); } void lime_cairo_set_antialias (value handle, int cap) { cairo_set_antialias ((cairo_t*)val_data (handle), (cairo_antialias_t)cap); } HL_PRIM void HL_NAME(hl_cairo_set_antialias) (HL_CFFIPointer* handle, int cap) { cairo_set_antialias ((cairo_t*)handle->ptr, (cairo_antialias_t)cap); } void lime_cairo_set_dash (value handle, value dash) { int length = val_array_size (dash); double* dashPattern = new double[length]; for (int i = 0; i < length; i++) { dashPattern[i] = val_number (val_array_i (dash, i)); } cairo_set_dash ((cairo_t*)val_data (handle), dashPattern, length, 0); delete[] dashPattern; } HL_PRIM void HL_NAME(hl_cairo_set_dash) (HL_CFFIPointer* handle, varray* dash) { cairo_set_dash ((cairo_t*)handle->ptr, hl_aptr (dash, double), dash->size, 0); } void lime_cairo_set_fill_rule (value handle, int cap) { cairo_set_fill_rule ((cairo_t*)val_data (handle), (cairo_fill_rule_t)cap); } HL_PRIM void HL_NAME(hl_cairo_set_fill_rule) (HL_CFFIPointer* handle, int cap) { cairo_set_fill_rule ((cairo_t*)handle->ptr, (cairo_fill_rule_t)cap); } void lime_cairo_set_font_face (value handle, value face) { cairo_set_font_face ((cairo_t*)val_data (handle), (cairo_font_face_t*)val_data (face)); } HL_PRIM void HL_NAME(hl_cairo_set_font_face) (HL_CFFIPointer* handle, HL_CFFIPointer* face) { cairo_set_font_face ((cairo_t*)handle->ptr, (cairo_font_face_t*)face->ptr); } void lime_cairo_set_font_options (value handle, value options) { cairo_set_font_options ((cairo_t*)val_data (handle), (cairo_font_options_t*)val_data (options)); } HL_PRIM void HL_NAME(hl_cairo_set_font_options) (HL_CFFIPointer* handle, HL_CFFIPointer* options) { cairo_set_font_options ((cairo_t*)handle->ptr, (cairo_font_options_t*)options->ptr); } void lime_cairo_set_font_size (value handle, double size) { cairo_font_face_t* face = cairo_get_font_face ((cairo_t*)val_data (handle)); if (face) { cairo_font_type_t type = cairo_font_face_get_type (face); if (type == CAIRO_FONT_TYPE_FT) { ValuePointer* fontReference = (ValuePointer*)cairo_font_face_get_user_data (face, &userData); if (fontReference) { Font* font = (Font*)val_data ((value)fontReference->Get ()); font->SetSize (size, 72); } } } cairo_set_font_size ((cairo_t*)val_data (handle), size); } HL_PRIM void HL_NAME(hl_cairo_set_font_size) (HL_CFFIPointer* handle, double size) { cairo_font_face_t* face = cairo_get_font_face ((cairo_t*)handle->ptr); if (face) { cairo_font_type_t type = cairo_font_face_get_type (face); if (type == CAIRO_FONT_TYPE_FT) { ValuePointer* fontReference = (ValuePointer*)cairo_font_face_get_user_data (face, &userData); if (fontReference) { Font* font = (Font*)((HL_CFFIPointer*)fontReference->Get ())->ptr; font->SetSize (size, 72); } } } cairo_set_font_size ((cairo_t*)handle->ptr, size); } void lime_cairo_set_line_cap (value handle, int cap) { cairo_set_line_cap ((cairo_t*)val_data (handle), (cairo_line_cap_t)cap); } HL_PRIM void HL_NAME(hl_cairo_set_line_cap) (HL_CFFIPointer* handle, int cap) { cairo_set_line_cap ((cairo_t*)handle->ptr, (cairo_line_cap_t)cap); } void lime_cairo_set_line_join (value handle, int join) { cairo_set_line_join ((cairo_t*)val_data (handle), (cairo_line_join_t)join); } HL_PRIM void HL_NAME(hl_cairo_set_line_join) (HL_CFFIPointer* handle, int join) { cairo_set_line_join ((cairo_t*)handle->ptr, (cairo_line_join_t)join); } void lime_cairo_set_line_width (value handle, double width) { cairo_set_line_width ((cairo_t*)val_data (handle), width); } HL_PRIM void HL_NAME(hl_cairo_set_line_width) (HL_CFFIPointer* handle, double width) { cairo_set_line_width ((cairo_t*)handle->ptr, width); } void lime_cairo_set_matrix (value handle, double a, double b, double c, double d, double tx, double ty) { cairo_matrix_t cm; cairo_matrix_init (&cm, a, b, c, d, tx, ty); cairo_set_matrix ((cairo_t*)val_data (handle), &cm); } HL_PRIM void HL_NAME(hl_cairo_set_matrix) (HL_CFFIPointer* handle, Matrix3* matrix) { // cairo_matrix_t cm; // cairo_matrix_init (&cm, a, b, c, d, tx, ty); cairo_set_matrix ((cairo_t*)handle->ptr, (cairo_matrix_t*)&matrix->a); } /*void lime_cairo_set_matrix (value handle, value matrix) { Matrix3 mat3 = Matrix3 (matrix); cairo_matrix_t cm; cairo_matrix_init (&cm, mat3.a, mat3.b, mat3.c, mat3.d, mat3.tx, mat3.ty); cairo_set_matrix ((cairo_t*)val_data (handle), &cm); }*/ void lime_cairo_set_miter_limit (value handle, double miterLimit) { cairo_set_miter_limit ((cairo_t*)val_data (handle), miterLimit); } HL_PRIM void HL_NAME(hl_cairo_set_miter_limit) (HL_CFFIPointer* handle, double miterLimit) { cairo_set_miter_limit ((cairo_t*)handle->ptr, miterLimit); } void lime_cairo_set_operator (value handle, int op) { cairo_set_operator ((cairo_t*)val_data (handle), (cairo_operator_t)op); } HL_PRIM void HL_NAME(hl_cairo_set_operator) (HL_CFFIPointer* handle, int op) { cairo_set_operator ((cairo_t*)handle->ptr, (cairo_operator_t)op); } void lime_cairo_set_source (value handle, value pattern) { cairo_set_source ((cairo_t*)val_data (handle), (cairo_pattern_t*)val_data (pattern)); } HL_PRIM void HL_NAME(hl_cairo_set_source) (HL_CFFIPointer* handle, HL_CFFIPointer* pattern) { cairo_set_source ((cairo_t*)handle->ptr, (cairo_pattern_t*)pattern->ptr); } void lime_cairo_set_source_rgb (value handle, double r, double g, double b) { cairo_set_source_rgb ((cairo_t*)val_data (handle), r, g, b); } HL_PRIM void HL_NAME(hl_cairo_set_source_rgb) (HL_CFFIPointer* handle, double r, double g, double b) { cairo_set_source_rgb ((cairo_t*)handle->ptr, r, g, b); } void lime_cairo_set_source_rgba (value handle, double r, double g, double b, double a) { cairo_set_source_rgba ((cairo_t*)val_data (handle), r, g, b, a); } HL_PRIM void HL_NAME(hl_cairo_set_source_rgba) (HL_CFFIPointer* handle, double r, double g, double b, double a) { cairo_set_source_rgba ((cairo_t*)handle->ptr, r, g, b, a); } void lime_cairo_set_source_surface (value handle, value surface, double x, double y) { cairo_set_source_surface ((cairo_t*)val_data (handle), (cairo_surface_t*)val_data (surface), x, y); } HL_PRIM void HL_NAME(hl_cairo_set_source_surface) (HL_CFFIPointer* handle, HL_CFFIPointer* surface, double x, double y) { cairo_set_source_surface ((cairo_t*)handle->ptr, (cairo_surface_t*)surface->ptr, x, y); } void lime_cairo_set_tolerance (value handle, double tolerance) { cairo_set_tolerance ((cairo_t*)val_data (handle), tolerance); } HL_PRIM void HL_NAME(hl_cairo_set_tolerance) (HL_CFFIPointer* handle, double tolerance) { cairo_set_tolerance ((cairo_t*)handle->ptr, tolerance); } void lime_cairo_show_glyphs (value handle, value glyphs) { if (!init) { id_index = val_id ("index"); id_x = val_id ("x"); id_y = val_id ("y"); } int length = val_array_size (glyphs); cairo_glyph_t* _glyphs = cairo_glyph_allocate (length); value glyph; for (int i = 0; i < length; i++) { glyph = val_array_i (glyphs, i); _glyphs[i].index = val_int (val_field (glyph, id_index)); _glyphs[i].x = val_number (val_field (glyph, id_x)); _glyphs[i].y = val_number (val_field (glyph, id_y)); } cairo_show_glyphs ((cairo_t*)val_data (handle), _glyphs, length); cairo_glyph_free (_glyphs); } HL_PRIM void HL_NAME(hl_cairo_show_glyphs) (HL_CFFIPointer* handle, varray* glyphs) { const int id_index = hl_hash_utf8 ("index"); const int id_x = hl_hash_utf8 ("x"); const int id_y = hl_hash_utf8 ("y"); int length = glyphs->size; HL_CairoGlyph** glyphData = hl_aptr (glyphs, HL_CairoGlyph*); cairo_glyph_t* _glyphs = cairo_glyph_allocate (length); HL_CairoGlyph* glyph; for (int i = 0; i < length; i++) { glyph = *glyphData++; _glyphs[i].index = glyph->index; _glyphs[i].x = glyph->x; _glyphs[i].y = glyph->y; } cairo_show_glyphs ((cairo_t*)handle->ptr, _glyphs, length); cairo_glyph_free (_glyphs); } void lime_cairo_show_page (value handle) { cairo_show_page ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_show_page) (HL_CFFIPointer* handle) { cairo_show_page ((cairo_t*)handle->ptr); } void lime_cairo_show_text (value handle, HxString text) { cairo_show_text ((cairo_t*)val_data (handle), (char*)text.__s); } HL_PRIM void HL_NAME(hl_cairo_show_text) (HL_CFFIPointer* handle, hl_vstring* text) { cairo_show_text ((cairo_t*)handle->ptr, (char*)hl_to_utf8 ((const uchar*)text->bytes)); } int lime_cairo_status (value handle) { return cairo_status ((cairo_t*)val_data (handle)); } HL_PRIM int HL_NAME(hl_cairo_status) (HL_CFFIPointer* handle) { return cairo_status ((cairo_t*)handle->ptr); } void lime_cairo_stroke (value handle) { cairo_stroke ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_stroke) (HL_CFFIPointer* handle) { cairo_stroke ((cairo_t*)handle->ptr); } void lime_cairo_stroke_extents (value handle, double x1, double y1, double x2, double y2) { cairo_stroke_extents ((cairo_t*)val_data (handle), &x1, &y1, &x2, &y2); } HL_PRIM void HL_NAME(hl_cairo_stroke_extents) (HL_CFFIPointer* handle, double x1, double y1, double x2, double y2) { cairo_stroke_extents ((cairo_t*)handle->ptr, &x1, &y1, &x2, &y2); } void lime_cairo_stroke_preserve (value handle) { cairo_stroke_preserve ((cairo_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_stroke_preserve) (HL_CFFIPointer* handle) { cairo_stroke_preserve ((cairo_t*)handle->ptr); } void lime_cairo_surface_flush (value handle) { cairo_surface_flush ((cairo_surface_t*)val_data (handle)); } HL_PRIM void HL_NAME(hl_cairo_surface_flush) (HL_CFFIPointer* handle) { cairo_surface_flush ((cairo_surface_t*)handle->ptr); } void lime_cairo_text_path (value handle, HxString text) { cairo_text_path ((cairo_t*)val_data (handle), (char*)text.__s); } HL_PRIM void HL_NAME(hl_cairo_text_path) (HL_CFFIPointer* handle, hl_vstring* text) { cairo_text_path ((cairo_t*)handle->ptr, (char*)hl_to_utf8 ((const uchar*)text->bytes)); } void lime_cairo_transform (value handle, value matrix) { Matrix3 mat3 = Matrix3 (matrix); cairo_matrix_t cm; cairo_matrix_init (&cm, mat3.a, mat3.b, mat3.c, mat3.d, mat3.tx, mat3.ty); cairo_transform ((cairo_t*)val_data (handle), &cm); } HL_PRIM void HL_NAME(hl_cairo_transform) (HL_CFFIPointer* handle, Matrix3* matrix) { // cairo_matrix_t cm; // cairo_matrix_init (&cm, mat3.a, mat3.b, mat3.c, mat3.d, mat3.tx, mat3.ty); // cairo_transform ((cairo_t*)handle->ptr, &cm); cairo_transform ((cairo_t*)handle->ptr, (cairo_matrix_t*)&matrix->a); } void lime_cairo_translate (value handle, double x, double y) { cairo_translate ((cairo_t*)val_data (handle), x, y); } HL_PRIM void HL_NAME(hl_cairo_translate) (HL_CFFIPointer* handle, double x, double y) { cairo_translate ((cairo_t*)handle->ptr, x, y); } int lime_cairo_version () { return cairo_version (); } HL_PRIM int HL_NAME(hl_cairo_version) () { return cairo_version (); } HxString lime_cairo_version_string () { const char* version = cairo_version_string (); return version ? HxString (version) : HxString (0, 0); } HL_PRIM vbyte* HL_NAME(hl_cairo_version_string) () { const char* version = cairo_version_string (); int length = strlen (version); char* _version = (char*)malloc (length + 1); strcpy (_version, version); return (vbyte*)_version; } DEFINE_PRIME6v (lime_cairo_arc); DEFINE_PRIME6v (lime_cairo_arc_negative); DEFINE_PRIME1v (lime_cairo_clip); DEFINE_PRIME5v (lime_cairo_clip_extents); DEFINE_PRIME1v (lime_cairo_clip_preserve); DEFINE_PRIME1v (lime_cairo_close_path); DEFINE_PRIME1v (lime_cairo_copy_page); DEFINE_PRIME1 (lime_cairo_create); DEFINE_PRIME7v (lime_cairo_curve_to); DEFINE_PRIME1v (lime_cairo_fill); DEFINE_PRIME5v (lime_cairo_fill_extents); DEFINE_PRIME1v (lime_cairo_fill_preserve); DEFINE_PRIME2 (lime_cairo_ft_font_face_create); DEFINE_PRIME1 (lime_cairo_font_face_status); DEFINE_PRIME0 (lime_cairo_font_options_create); DEFINE_PRIME1 (lime_cairo_font_options_get_antialias); DEFINE_PRIME1 (lime_cairo_font_options_get_subpixel_order); DEFINE_PRIME1 (lime_cairo_font_options_get_hint_style); DEFINE_PRIME1 (lime_cairo_font_options_get_hint_metrics); DEFINE_PRIME2v (lime_cairo_font_options_set_antialias); DEFINE_PRIME2v (lime_cairo_font_options_set_subpixel_order); DEFINE_PRIME2v (lime_cairo_font_options_set_hint_style); DEFINE_PRIME2v (lime_cairo_font_options_set_hint_metrics); DEFINE_PRIME1 (lime_cairo_get_antialias); DEFINE_PRIME1 (lime_cairo_get_current_point); DEFINE_PRIME1 (lime_cairo_get_dash); DEFINE_PRIME1 (lime_cairo_get_dash_count); DEFINE_PRIME1 (lime_cairo_get_fill_rule); DEFINE_PRIME1 (lime_cairo_get_font_face); DEFINE_PRIME1 (lime_cairo_get_font_options); DEFINE_PRIME1 (lime_cairo_get_group_target); DEFINE_PRIME1 (lime_cairo_get_line_cap); DEFINE_PRIME1 (lime_cairo_get_line_join); DEFINE_PRIME1 (lime_cairo_get_line_width); DEFINE_PRIME1 (lime_cairo_get_matrix); DEFINE_PRIME1 (lime_cairo_get_miter_limit); DEFINE_PRIME1 (lime_cairo_get_operator); DEFINE_PRIME1 (lime_cairo_get_source); DEFINE_PRIME1 (lime_cairo_get_target); DEFINE_PRIME1 (lime_cairo_get_tolerance); DEFINE_PRIME1 (lime_cairo_has_current_point); DEFINE_PRIME1v (lime_cairo_identity_matrix); DEFINE_PRIME3 (lime_cairo_image_surface_create); DEFINE_PRIME5 (lime_cairo_image_surface_create_for_data); DEFINE_PRIME1 (lime_cairo_image_surface_get_data); DEFINE_PRIME1 (lime_cairo_image_surface_get_format); DEFINE_PRIME1 (lime_cairo_image_surface_get_height); DEFINE_PRIME1 (lime_cairo_image_surface_get_stride); DEFINE_PRIME1 (lime_cairo_image_surface_get_width); DEFINE_PRIME3 (lime_cairo_in_clip); DEFINE_PRIME3 (lime_cairo_in_fill); DEFINE_PRIME3 (lime_cairo_in_stroke); DEFINE_PRIME3v (lime_cairo_line_to); DEFINE_PRIME2v (lime_cairo_mask); DEFINE_PRIME4v (lime_cairo_mask_surface); DEFINE_PRIME3v (lime_cairo_move_to); DEFINE_PRIME1v (lime_cairo_new_path); DEFINE_PRIME1v (lime_cairo_paint); DEFINE_PRIME2v (lime_cairo_paint_with_alpha); DEFINE_PRIME5v (lime_cairo_pattern_add_color_stop_rgb); DEFINE_PRIME6v (lime_cairo_pattern_add_color_stop_rgba); DEFINE_PRIME1 (lime_cairo_pattern_create_for_surface); DEFINE_PRIME4 (lime_cairo_pattern_create_linear); DEFINE_PRIME6 (lime_cairo_pattern_create_radial); DEFINE_PRIME3 (lime_cairo_pattern_create_rgb); DEFINE_PRIME4 (lime_cairo_pattern_create_rgba); DEFINE_PRIME1 (lime_cairo_pattern_get_color_stop_count); DEFINE_PRIME1 (lime_cairo_pattern_get_extend); DEFINE_PRIME1 (lime_cairo_pattern_get_filter); DEFINE_PRIME1 (lime_cairo_pattern_get_matrix); DEFINE_PRIME2v (lime_cairo_pattern_set_extend); DEFINE_PRIME2v (lime_cairo_pattern_set_filter); DEFINE_PRIME2v (lime_cairo_pattern_set_matrix); DEFINE_PRIME1 (lime_cairo_pop_group); DEFINE_PRIME1v (lime_cairo_pop_group_to_source); DEFINE_PRIME1v (lime_cairo_push_group); DEFINE_PRIME2v (lime_cairo_push_group_with_content); DEFINE_PRIME5v (lime_cairo_rectangle); DEFINE_PRIME7v (lime_cairo_rel_curve_to); DEFINE_PRIME3v (lime_cairo_rel_line_to); DEFINE_PRIME3v (lime_cairo_rel_move_to); DEFINE_PRIME1v (lime_cairo_reset_clip); DEFINE_PRIME1v (lime_cairo_restore); DEFINE_PRIME2v (lime_cairo_rotate); DEFINE_PRIME1v (lime_cairo_save); DEFINE_PRIME3v (lime_cairo_scale); DEFINE_PRIME2v (lime_cairo_set_antialias); DEFINE_PRIME2v (lime_cairo_set_dash); DEFINE_PRIME2v (lime_cairo_set_fill_rule); DEFINE_PRIME2v (lime_cairo_set_font_face); DEFINE_PRIME2v (lime_cairo_set_font_size); DEFINE_PRIME2v (lime_cairo_set_font_options); DEFINE_PRIME2v (lime_cairo_set_line_cap); DEFINE_PRIME2v (lime_cairo_set_line_join); DEFINE_PRIME2v (lime_cairo_set_line_width); DEFINE_PRIME7v (lime_cairo_set_matrix); //DEFINE_PRIME2v (lime_cairo_set_matrix); DEFINE_PRIME2v (lime_cairo_set_miter_limit); DEFINE_PRIME2v (lime_cairo_set_operator); DEFINE_PRIME2v (lime_cairo_set_source); DEFINE_PRIME4v (lime_cairo_set_source_rgb); DEFINE_PRIME5v (lime_cairo_set_source_rgba); DEFINE_PRIME4v (lime_cairo_set_source_surface); DEFINE_PRIME2v (lime_cairo_set_tolerance); DEFINE_PRIME2v (lime_cairo_show_glyphs); DEFINE_PRIME1v (lime_cairo_show_page); DEFINE_PRIME2v (lime_cairo_show_text); DEFINE_PRIME1 (lime_cairo_status); DEFINE_PRIME1v (lime_cairo_stroke); DEFINE_PRIME5v (lime_cairo_stroke_extents); DEFINE_PRIME1v (lime_cairo_stroke_preserve); DEFINE_PRIME1v (lime_cairo_surface_flush); DEFINE_PRIME2v (lime_cairo_text_path); DEFINE_PRIME2v (lime_cairo_transform); DEFINE_PRIME3v (lime_cairo_translate); DEFINE_PRIME0 (lime_cairo_version); DEFINE_PRIME0 (lime_cairo_version_string); #define _TCFFIPOINTER _DYN #define _TMATRIX3 _OBJ (_F64 _F64 _F64 _F64 _F64 _F64) #define _TVECTOR2 _OBJ (_F64 _F64) DEFINE_HL_PRIM (_VOID, hl_cairo_arc, _TCFFIPOINTER _F64 _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_arc_negative, _TCFFIPOINTER _F64 _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_clip, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_clip_extents, _TCFFIPOINTER _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_clip_preserve, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_close_path, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_copy_page, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_create, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_curve_to, _TCFFIPOINTER _F64 _F64 _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_fill, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_fill_extents, _TCFFIPOINTER _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_fill_preserve, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_ft_font_face_create, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_I32, hl_cairo_font_face_status, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_font_options_create, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_cairo_font_options_get_antialias, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_font_options_get_subpixel_order, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_font_options_get_hint_style, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_font_options_get_hint_metrics, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_font_options_set_antialias, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_font_options_set_subpixel_order, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_font_options_set_hint_style, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_font_options_set_hint_metrics, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_I32, hl_cairo_get_antialias, _TCFFIPOINTER); DEFINE_HL_PRIM (_TVECTOR2, hl_cairo_get_current_point, _TCFFIPOINTER _TVECTOR2); DEFINE_HL_PRIM (_ARR, hl_cairo_get_dash, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_get_dash_count, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_get_fill_rule, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_get_font_face, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_get_font_options, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_get_group_target, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_get_line_cap, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_get_line_join, _TCFFIPOINTER); DEFINE_HL_PRIM (_F64, hl_cairo_get_line_width, _TCFFIPOINTER); DEFINE_HL_PRIM (_TMATRIX3, hl_cairo_get_matrix, _TCFFIPOINTER _TMATRIX3); DEFINE_HL_PRIM (_F64, hl_cairo_get_miter_limit, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_get_operator, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_get_source, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_get_target, _TCFFIPOINTER); DEFINE_HL_PRIM (_F64, hl_cairo_get_tolerance, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_cairo_has_current_point, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_identity_matrix, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_image_surface_create, _I32 _I32 _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_image_surface_create_for_data, _F64 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_F64, hl_cairo_image_surface_get_data, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_image_surface_get_format, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_image_surface_get_height, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_image_surface_get_stride, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_image_surface_get_width, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_cairo_in_clip, _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_BOOL, hl_cairo_in_fill, _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_BOOL, hl_cairo_in_stroke, _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_line_to, _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_mask, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_mask_surface, _TCFFIPOINTER _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_move_to, _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_new_path, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_paint, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_paint_with_alpha, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_pattern_add_color_stop_rgb, _TCFFIPOINTER _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_pattern_add_color_stop_rgba, _TCFFIPOINTER _F64 _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_pattern_create_for_surface, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_pattern_create_linear, _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_pattern_create_radial, _F64 _F64 _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_pattern_create_rgb, _F64 _F64 _F64); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_pattern_create_rgba, _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_I32, hl_cairo_pattern_get_color_stop_count, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_pattern_get_extend, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_cairo_pattern_get_filter, _TCFFIPOINTER); DEFINE_HL_PRIM (_TMATRIX3, hl_cairo_pattern_get_matrix, _TCFFIPOINTER _TMATRIX3); DEFINE_HL_PRIM (_VOID, hl_cairo_pattern_set_extend, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_pattern_set_filter, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_pattern_set_matrix, _TCFFIPOINTER _TMATRIX3); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_cairo_pop_group, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_pop_group_to_source, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_push_group, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_push_group_with_content, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_rectangle, _TCFFIPOINTER _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_rel_curve_to, _TCFFIPOINTER _F64 _F64 _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_rel_line_to, _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_rel_move_to, _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_reset_clip, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_restore, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_rotate, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_save, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_scale, _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_set_antialias, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_set_dash, _TCFFIPOINTER _ARR); DEFINE_HL_PRIM (_VOID, hl_cairo_set_fill_rule, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_set_font_face, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_set_font_size, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_set_font_options, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_set_line_cap, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_set_line_join, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_set_line_width, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_set_matrix, _TCFFIPOINTER _TMATRIX3); DEFINE_HL_PRIM (_VOID, hl_cairo_set_miter_limit, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_set_operator, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_cairo_set_source, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_set_source_rgb, _TCFFIPOINTER _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_set_source_rgba, _TCFFIPOINTER _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_set_source_surface, _TCFFIPOINTER _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_set_tolerance, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_show_glyphs, _TCFFIPOINTER _ARR); DEFINE_HL_PRIM (_VOID, hl_cairo_show_page, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_show_text, _TCFFIPOINTER _STRING); DEFINE_HL_PRIM (_I32, hl_cairo_status, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_stroke, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_stroke_extents, _TCFFIPOINTER _F64 _F64 _F64 _F64); DEFINE_HL_PRIM (_VOID, hl_cairo_stroke_preserve, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_surface_flush, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_cairo_text_path, _TCFFIPOINTER _STRING); DEFINE_HL_PRIM (_VOID, hl_cairo_transform, _TCFFIPOINTER _TMATRIX3); DEFINE_HL_PRIM (_VOID, hl_cairo_translate, _TCFFIPOINTER _F64 _F64); DEFINE_HL_PRIM (_I32, hl_cairo_version, _NO_ARG); DEFINE_HL_PRIM (_BYTES, hl_cairo_version_string, _NO_ARG); } extern "C" int lime_cairo_register_prims () { return 0; } ================================================ FILE: project/src/graphics/format/JPEG.cpp ================================================ #include extern "C" { #include #include #include } #include #include namespace lime { struct ErrorData { struct jpeg_error_mgr base; jmp_buf on_error; }; static void OnOutput (j_common_ptr cinfo) {} // #ifdef NDEBUG // char errorMessage[JMSG_LENGTH_MAX]; // #endif static void OnError (j_common_ptr cinfo) { ErrorData * err = (ErrorData *)cinfo->err; // #ifdef NDEBUG // ( *(cinfo->err->format_message) ) (cinfo, errorMessage); // fprintf(stderr, "%s\n", errorMessage); // #endif longjmp (err->on_error, 1); } struct MySrcManager { MySrcManager (const JOCTET *inData, int inLen) : mData (inData), mLen (inLen) { pub.init_source = my_init_source; pub.fill_input_buffer = my_fill_input_buffer; pub.skip_input_data = my_skip_input_data; pub.resync_to_restart = my_resync_to_restart; pub.term_source = my_term_source; pub.next_input_byte = 0; pub.bytes_in_buffer = 0; mUsed = false; mEOI[0] = 0xff; mEOI[1] = JPEG_EOI; } struct jpeg_source_mgr pub; /* public fields */ const JOCTET * mData; size_t mLen; bool mUsed; unsigned char mEOI[2]; static void my_init_source (j_decompress_ptr cinfo) { MySrcManager *man = (MySrcManager *)cinfo->src; man->mUsed = false; } static boolean my_fill_input_buffer (j_decompress_ptr cinfo) { MySrcManager *man = (MySrcManager *)cinfo->src; if (man->mUsed) { man->pub.next_input_byte = man->mEOI; man->pub.bytes_in_buffer = 2; } else { man->pub.next_input_byte = man->mData; man->pub.bytes_in_buffer = man->mLen; man->mUsed = true; } return TRUE; } static void my_skip_input_data (j_decompress_ptr cinfo, long num_bytes) { MySrcManager *man = (MySrcManager *)cinfo->src; man->pub.next_input_byte += num_bytes; man->pub.bytes_in_buffer -= num_bytes; // was < 0 and was always false PJK 16JUN12 if (man->pub.bytes_in_buffer == 0) { man->pub.next_input_byte = man->mEOI; man->pub.bytes_in_buffer = 2; } } static boolean my_resync_to_restart (j_decompress_ptr cinfo, int desired) { MySrcManager *man = (MySrcManager *)cinfo->src; man->mUsed = false; return TRUE; } static void my_term_source (j_decompress_ptr cinfo) {} }; struct MyDestManager { enum { BUF_SIZE = 4096 }; struct jpeg_destination_mgr pub; /* public fields */ QuickVec mOutput; unsigned char mTmpBuf[BUF_SIZE]; MyDestManager () { pub.init_destination = init_buffer; pub.empty_output_buffer = copy_buffer; pub.term_destination = term_buffer; pub.next_output_byte = mTmpBuf; pub.free_in_buffer = BUF_SIZE; } void CopyBuffer () { mOutput.append (mTmpBuf, BUF_SIZE); pub.next_output_byte = mTmpBuf; pub.free_in_buffer = BUF_SIZE; } void TermBuffer () { mOutput.append (mTmpBuf, BUF_SIZE - pub.free_in_buffer); } static void init_buffer (jpeg_compress_struct* cinfo) {} static boolean copy_buffer (jpeg_compress_struct* cinfo) { MyDestManager *man = (MyDestManager *)cinfo->dest; man->CopyBuffer (); return TRUE; } static void term_buffer (jpeg_compress_struct* cinfo) { MyDestManager *man = (MyDestManager *)cinfo->dest; man->TermBuffer (); } }; bool JPEG::Decode (Resource *resource, ImageBuffer* imageBuffer, bool decodeData) { struct jpeg_decompress_struct cinfo; //struct jpeg_error_mgr jerr; //cinfo.err = jpeg_std_error (&jerr); struct ErrorData jpegError; cinfo.err = jpeg_std_error (&jpegError.base); jpegError.base.error_exit = OnError; jpegError.base.output_message = OnOutput; FILE_HANDLE *file = NULL; Bytes *data = NULL; MySrcManager *manager = NULL; if (resource->path) { file = lime::fopen (resource->path, "rb"); if (!file) { return false; } } if (setjmp (jpegError.on_error)) { if (file) { lime::fclose (file); } if (manager) { delete manager; } if (data) { delete data; } jpeg_destroy_decompress (&cinfo); return false; } jpeg_create_decompress (&cinfo); jpeg_save_markers (&cinfo, JPEG_APP0 + 14, 0xFF); if (file) { if (file->isFile ()) { jpeg_stdio_src (&cinfo, file->getFile ()); } else { data = new Bytes (); data->ReadFile (resource->path); manager = new MySrcManager (data->b, data->length); cinfo.src = &manager->pub; } } else { manager = new MySrcManager (resource->data->b, resource->data->length); cinfo.src = &manager->pub; } bool decoded = false; if (jpeg_read_header (&cinfo, TRUE) == JPEG_HEADER_OK) { switch (cinfo.jpeg_color_space) { case JCS_CMYK: case JCS_YCCK: cinfo.out_color_space = JCS_CMYK; break; case JCS_GRAYSCALE: case JCS_RGB: case JCS_YCbCr: default: cinfo.out_color_space = JCS_RGB; break; // case JCS_BG_RGB: // case JCS_BG_YCC: // case JCS_UNKNOWN: } if (decodeData) { jpeg_start_decompress (&cinfo); int components = cinfo.output_components; imageBuffer->Resize (cinfo.output_width, cinfo.output_height, 32); unsigned char *bytes = imageBuffer->data->buffer->b; unsigned char *scanline = new unsigned char [imageBuffer->width * components]; if (cinfo.out_color_space == JCS_CMYK) { bool invert = false; jpeg_saved_marker_ptr marker; marker = cinfo.marker_list; while (marker) { if (marker->marker == JPEG_APP0 + 14 && marker->data_length >= 12 && !strncmp ((const char*)marker->data, "Adobe", 5)) { // Are there other transforms? invert = true; } marker = marker->next; } while (cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines (&cinfo, &scanline, 1); const unsigned char *line = scanline; const unsigned char *const end = line + imageBuffer->width * components; unsigned char c, m, y, k; while (line < end) { if (invert) { c = 0xFF - *line++; m = 0xFF - *line++; y = 0xFF - *line++; k = 0xFF - *line++; } else { c = *line++; m = *line++; y = *line++; k = *line++; } *bytes++ = (unsigned char)((0xFF - c) * (0xFF - k) / 0xFF); *bytes++ = (unsigned char)((0xFF - m) * (0xFF - k) / 0xFF); *bytes++ = (unsigned char)((0xFF - y) * (0xFF - k) / 0xFF); *bytes++ = 0xFF; } } } else { while (cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines (&cinfo, &scanline, 1); // convert 24-bit scanline to 32-bit const unsigned char *line = scanline; const unsigned char *const end = line + imageBuffer->width * components; while (line < end) { *bytes++ = *line++; *bytes++ = *line++; *bytes++ = *line++; *bytes++ = 0xFF; } } } delete[] scanline; jpeg_finish_decompress (&cinfo); } else { imageBuffer->width = cinfo.image_width; imageBuffer->height = cinfo.image_height; } decoded = true; } if (file) { lime::fclose (file); } if (manager) { delete manager; } if (data) { delete data; } jpeg_destroy_decompress (&cinfo); return decoded; } bool JPEG::Encode (ImageBuffer *imageBuffer, Bytes *bytes, int quality) { struct jpeg_compress_struct cinfo; struct ErrorData jpegError; cinfo.err = jpeg_std_error (&jpegError.base); jpegError.base.error_exit = OnError; jpegError.base.output_message = OnOutput; MyDestManager dest; int w = imageBuffer->width; int h = imageBuffer->height; QuickVec row_buf (w * 3); jpeg_create_compress (&cinfo); if (setjmp (jpegError.on_error)) { jpeg_destroy_compress (&cinfo); return false; } cinfo.dest = (jpeg_destination_mgr *)&dest; cinfo.image_width = w; cinfo.image_height = h; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; jpeg_set_defaults (&cinfo); jpeg_set_quality (&cinfo, quality, TRUE); jpeg_start_compress (&cinfo, TRUE); JSAMPROW row_pointer = &row_buf[0]; unsigned char* imageData = imageBuffer->data->buffer->b; int stride = imageBuffer->Stride (); while (cinfo.next_scanline < cinfo.image_height) { const unsigned char *src = (const unsigned char *)(imageData + (stride * cinfo.next_scanline)); unsigned char *dest = &row_buf[0]; for(int x = 0; x < w; x++) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; dest += 3; src += 4; } jpeg_write_scanlines (&cinfo, &row_pointer, 1); } jpeg_finish_compress (&cinfo); int size = dest.mOutput.size (); if (size > 0) { bytes->Resize (size); memcpy (bytes->b, &dest.mOutput[0], size); } jpeg_destroy_compress (&cinfo); return true; } } ================================================ FILE: project/src/graphics/format/PNG.cpp ================================================ extern "C" { #include #include #define PNG_SIG_SIZE 8 } #include #include #include #include #include #include namespace lime { struct ReadBuffer { ReadBuffer (const unsigned char* data, int length) : data (data), length (length), position (0) {} bool Read (unsigned char* out, int count) { if (position >= length) return false; if (count > length - position) { memcpy (out, data + position, length - position); position = length; } else { memcpy (out, data + position, count); position += count; } return true; } char unused; // the first byte gets corrupted when passed to libpng? const unsigned char* data; int length; int position; }; static void user_error_fn (png_structp png_ptr, png_const_charp error_msg) { longjmp (png_ptr->jmp_buf_local, 1); } static void user_read_data_fn (png_structp png_ptr, png_bytep data, png_size_t length) { ReadBuffer* buffer = (ReadBuffer*)png_get_io_ptr (png_ptr); if (!buffer->Read (data, length)) { png_error (png_ptr, "Read Error"); } } static void user_warning_fn (png_structp png_ptr, png_const_charp warning_msg) {} void user_write_data (png_structp png_ptr, png_bytep data, png_size_t length) { QuickVec *buffer = (QuickVec *)png_get_io_ptr (png_ptr); buffer->append ((unsigned char *)data,(int)length); } void user_flush_data (png_structp png_ptr) {} bool PNG::Decode (Resource *resource, ImageBuffer *imageBuffer, bool decodeData) { png_structp png_ptr; png_infop info_ptr; png_uint_32 width, height; int bit_depth, color_type, interlace_type; FILE_HANDLE* file = NULL; Bytes* data = NULL; if (resource->path) { file = lime::fopen (resource->path, "rb"); if (!file) return false; unsigned char png_sig[PNG_SIG_SIZE]; int read = lime::fread (&png_sig, PNG_SIG_SIZE, 1, file); if (png_sig_cmp (png_sig, 0, PNG_SIG_SIZE)) { lime::fclose (file); return false; } } else { if (png_sig_cmp (resource->data->b, 0, PNG_SIG_SIZE)) { return false; } } if ((png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL)) == NULL) { if (file) lime::fclose (file); return false; } if ((info_ptr = png_create_info_struct (png_ptr)) == NULL) { png_destroy_read_struct (&png_ptr, (png_infopp)NULL, (png_infopp)NULL); if (file) lime::fclose (file); return false; } // sets the point which libpng will jump back to in the case of an error if (setjmp (png_jmpbuf (png_ptr))) { png_destroy_read_struct (&png_ptr, &info_ptr, (png_infopp)NULL); if (file) lime::fclose (file); return false; } if (file) { if (file->isFile ()) { png_init_io (png_ptr, file->getFile ()); png_set_sig_bytes (png_ptr, PNG_SIG_SIZE); } else { data = new Bytes (); data->ReadFile (resource->path); ReadBuffer buffer (data->b, data->length); png_set_read_fn (png_ptr, &buffer, user_read_data_fn); } } else { ReadBuffer buffer (resource->data->b, resource->data->length); png_set_read_fn (png_ptr, &buffer, user_read_data_fn); } png_read_info (png_ptr, info_ptr); png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); if (decodeData) { //bool has_alpha = (color_type == PNG_COLOR_TYPE_GRAY_ALPHA || color_type == PNG_COLOR_TYPE_RGB_ALPHA || png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)); png_set_expand (png_ptr); png_set_filler (png_ptr, 0xff, PNG_FILLER_AFTER); //png_set_gray_1_2_4_to_8 (png_ptr); png_set_palette_to_rgb (png_ptr); png_set_gray_to_rgb (png_ptr); if (bit_depth < 8) { png_set_packing (png_ptr); } else if (bit_depth == 16) { png_set_scale_16 (png_ptr); } //png_set_bgr (png_ptr); imageBuffer->Resize (width, height, 32); const unsigned int stride = imageBuffer->Stride (); unsigned char *bytes = imageBuffer->data->buffer->b; int number_of_passes = png_set_interlace_handling (png_ptr); for (int pass = 0; pass < number_of_passes; pass++) { for (int i = 0; i < height; i++) { png_bytep anAddr = (png_bytep)(bytes + i * stride); png_read_rows (png_ptr, (png_bytepp) &anAddr, NULL, 1); } } png_read_end (png_ptr, NULL); } else { imageBuffer->width = width; imageBuffer->height = height; } png_destroy_read_struct (&png_ptr, &info_ptr, (png_infopp)NULL); if (file) lime::fclose (file); if (data) delete data; return true; } bool PNG::Encode (ImageBuffer *imageBuffer, Bytes* bytes) { png_structp png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, user_error_fn, user_warning_fn); if (!png_ptr) { return false; } png_infop info_ptr = png_create_info_struct (png_ptr); if (!info_ptr) { png_destroy_write_struct (&png_ptr, NULL); return false; } if (setjmp (png_jmpbuf (png_ptr))) { png_destroy_write_struct (&png_ptr, &info_ptr); return false; } QuickVec out_buffer; png_set_write_fn (png_ptr, &out_buffer, user_write_data, user_flush_data); int w = imageBuffer->width; int h = imageBuffer->height; int bit_depth = 8; //int color_type = (inSurface->Format () & pfHasAlpha) ? PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB; int color_type = PNG_COLOR_TYPE_RGB_ALPHA; png_set_IHDR (png_ptr, info_ptr, w, h, bit_depth, color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_write_info (png_ptr, info_ptr); bool do_alpha = (color_type == PNG_COLOR_TYPE_RGBA); unsigned char* imageData = imageBuffer->data->buffer->b; int stride = imageBuffer->Stride (); { QuickVec row_data (w * 4); png_bytep row = &row_data[0]; for (int y = 0; y < h; y++) { unsigned char *buf = &row_data[0]; const unsigned char *src = (const unsigned char *)(imageData + (stride * y)); for (int x = 0; x < w; x++) { buf[0] = src[0]; buf[1] = src[1]; buf[2] = src[2]; src += 3; buf += 3; if (do_alpha) { *buf++ = *src; } src++; } png_write_rows (png_ptr, &row, 1); } } png_write_end (png_ptr, NULL); int size = out_buffer.size (); if (size > 0) { bytes->Resize (size); memcpy (bytes->b, &out_buffer[0], size); } png_destroy_write_struct (&png_ptr, &info_ptr); return true; } } ================================================ FILE: project/src/graphics/opengl/OpenGL.h ================================================ #ifndef LIME_GRAPHICS_OPENGL_OPENGL_H #define LIME_GRAPHICS_OPENGL_OPENGL_H #if defined (ANDROID) || defined (RASPBERRYPI) #define LIME_GLES //#include //#define __gl2_h_ #include #include #elif defined (EMSCRIPTEN) #define LIME_GLES // #define LIME_GLES3_API #include #include #elif defined (TIZEN) #define LIME_GLES #define LIME_GLES3_API #include #include #elif defined (IPHONE) || defined(APPLETV) #define LIME_GLES #define LIME_GLES3_API // #include // #include // #include // #include #include #include #elif defined (HX_LINUX) #define LIME_GLES3_API #define NEED_EXTENSIONS #define DYNAMIC_OGL #define GL_GLEXT_PROTOTYPES #include #include #define FORCE_NON_PO2 #elif defined (HX_MACOS) //#define LIME_GLES3_API #define NEED_EXTENSIONS #define DYNAMIC_OGL #define GL_GLEXT_PROTOTYPES #include #include #define FORCE_NON_PO2 #define glBindFramebuffer glBindFramebufferEXT #define glBindRenderbuffer glBindRenderbufferEXT #define glGenFramebuffers glGenFramebuffersEXT #define glDeleteFramebuffers glDeleteFramebuffersEXT #define glGenRenderbuffers glGenRenderbuffersEXT #define glDeleteRenderbuffers glDeleteRenderbuffersEXT #define glFramebufferRenderbuffer glFramebufferRenderbufferEXT #define glFramebufferTexture2D glFramebufferTexture2DEXT #define glRenderbufferStorage glRenderbufferStorageEXT #define glCheckFramebufferStatus glCheckFramebufferStatusEXT #define glCheckFramebufferStatus glCheckFramebufferStatusEXT #define glGenerateMipmap glGenerateMipmapEXT #define glGetFramebufferAttachmentParameteriv glGetFramebufferAttachmentParameterivEXT #define glGetRenderbufferParameteriv glGetRenderbufferParameterivEXT #define glIsFramebuffer glIsFramebufferEXT #define glIsRenderbuffer glIsRenderbufferEXT #elif defined (HX_WINDOWS) //#define LIME_GLES3_API #include #ifndef NATIVE_TOOLKIT_SDL_ANGLE #include #endif // typedef ptrdiff_t GLsizeiptrARB; #define NEED_EXTENSIONS #define DYNAMIC_OGL #ifdef NATIVE_TOOLKIT_SDL_ANGLE #define LIME_GLES #endif #ifdef NATIVE_TOOLKIT_SDL_ANGLE #include #else #define GL_GLEXT_PROTOTYPES #include #include #endif #endif #ifdef HX_WINDOWS typedef HDC WinDC; typedef HGLRC GLCtx; #else typedef void *WinDC; typedef void *GLCtx; #endif #ifndef GL_BUFFER_SIZE #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 #define GL_READ_WRITE 0x88BA #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_COMPILE_STATUS 0x8B81 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_VERTEX_SHADER 0x8B31 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_TEXTURE0 0x84C0 #endif #ifndef GL_CLAMP_TO_EDGE #define GL_CLAMP_TO_EDGE 0x812F #endif #ifndef GL_POINT_SMOOTH #define GL_POINT_SMOOTH 0x0B10 #endif #ifndef GL_LINE_SMOOTH #define GL_LINE_SMOOTH 0x0B20 #endif #ifdef NEED_EXTENSIONS #define DECLARE_EXTENSION #include "OpenGLExtensions.h" #undef DECLARE_EXTENSION #define CHECK_EXT(x) x #else #define CHECK_EXT(x) true #endif #endif ================================================ FILE: project/src/graphics/opengl/OpenGLBindings.cpp ================================================ #include #include #include #include #include "OpenGL.h" #include "OpenGLBindings.h" #include #include #include #ifdef NEED_EXTENSIONS #define DEFINE_EXTENSION #include "OpenGLExtensions.h" #undef DEFINE_EXTENSION #endif #ifdef HX_LINUX #include #endif #ifndef APIENTRY #define APIENTRY GLAPIENTRY #endif #ifdef LIME_SDL #include #endif namespace lime { // TODO(lime): `defined (LIME_GLES3_API) || !defined (LIME_GLES)` is a // stopgap for desktop-valid modern GL wrappers. Desktop proc loading already // exists, but `LIME_GLES3_API` is too narrow a gate for desktop GL. Audit the // remaining GLES3-only wrappers and replace this pattern with an explicit // desktop-GL macro/capability gate later, rather than broadening everything // mechanically. bool OpenGLBindings::initialized = false; int OpenGLBindings::defaultFramebuffer = 0; int OpenGLBindings::defaultRenderbuffer = 0; void* OpenGLBindings::handle = 0; #ifdef NATIVE_TOOLKIT_SDL_ANGLE void* OpenGLBindings::eglHandle = 0; #endif #if (defined (HX_LINUX) || defined (HX_WINDOWS) || defined (HX_MACOS)) && !defined (NATIVE_TOOLKIT_SDL_ANGLE) && !defined (RASPBERRYPI) typedef void (APIENTRY * GL_DebugMessageCallback_Func)(GLDEBUGPROC, const void *); GL_DebugMessageCallback_Func glDebugMessageCallback_ptr = 0; #endif std::map > glObjects; std::map glObjectIDs; std::map glObjectPtrs; std::map glObjectTypes; std::vector gc_gl_id; std::vector gc_gl_ptr; std::vector gc_gl_type; Mutex gc_gl_mutex; void gc_gl_object (value object) { gc_gl_mutex.Lock (); if (glObjectTypes.find (object) != glObjectTypes.end ()) { GLObjectType type = glObjectTypes[object]; if (type != TYPE_SYNC) { GLuint id = glObjectIDs[object]; gc_gl_id.push_back (id); gc_gl_type.push_back (type); glObjects[type].erase (id); glObjectIDs.erase (object); glObjectTypes.erase (object); } else { void* ptr = glObjectPtrs[object]; gc_gl_ptr.push_back (ptr); glObjectPtrs.erase (object); glObjectTypes.erase (object); } } gc_gl_mutex.Unlock (); } void hl_gc_gl_object (HL_CFFIPointer* handle) { gc_gl_mutex.Lock (); void* object = handle->ptr; if (glObjectTypes.find (object) != glObjectTypes.end ()) { GLObjectType type = glObjectTypes[object]; if (type != TYPE_SYNC) { GLuint id = glObjectIDs[object]; gc_gl_id.push_back (id); gc_gl_type.push_back (type); glObjects[type].erase (id); glObjectIDs.erase (object); glObjectTypes.erase (object); } else { void* ptr = glObjectPtrs[object]; gc_gl_ptr.push_back (ptr); glObjectPtrs.erase (object); glObjectTypes.erase (object); } } gc_gl_mutex.Unlock (); } void gc_gl_run () { if (gc_gl_id.size () > 0) { gc_gl_mutex.Lock (); int size = gc_gl_id.size (); GLuint id; GLObjectType type; for (int i = 0; i < size; i++) { id = gc_gl_id[i]; type = gc_gl_type[i]; switch (type) { case TYPE_BUFFER: if (glIsBuffer (id)) glDeleteBuffers (1, &id); break; case TYPE_FRAMEBUFFER: if (glIsFramebuffer (id)) glDeleteFramebuffers (1, &id); break; case TYPE_PROGRAM: if (glIsProgram (id)) glDeleteProgram (id); break; #ifdef LIME_GLES3_API case TYPE_QUERY: if (glIsQuery (id)) glDeleteQueries (1, &id); break; #endif case TYPE_RENDERBUFFER: if (glIsRenderbuffer (id)) glDeleteRenderbuffers (1, &id); break; #ifdef LIME_GLES3_API case TYPE_SAMPLER: if (glIsSampler (id)) glDeleteSamplers (1, &id); break; #endif case TYPE_SHADER: if (glIsShader (id)) glDeleteShader (id); break; case TYPE_TEXTURE: if (glIsTexture (id)) glDeleteTextures (1, &id); break; #ifdef LIME_GLES3_API case TYPE_VERTEX_ARRAY_OBJECT: if (glIsVertexArray (id)) glDeleteVertexArrays (1, &id); break; #endif default: break; } } size = gc_gl_ptr.size (); void* ptr; for (int i = 0; i < size; i++) { ptr = gc_gl_ptr[i]; //type = gc_gl_type[i]; #ifdef LIME_GLES3_API if (glIsSync ((GLsync)ptr)) glDeleteSync ((GLsync)ptr); #endif } gc_gl_id.clear (); gc_gl_ptr.clear (); gc_gl_type.clear (); gc_gl_mutex.Unlock (); } } #if (defined (HX_LINUX) || defined (HX_WINDOWS) || defined (HX_MACOS)) && !defined (NATIVE_TOOLKIT_SDL_ANGLE) && !defined (RASPBERRYPI) void APIENTRY gl_debug_callback (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, GLvoid *userParam) { puts (message); } #endif void lime_gl_active_texture (int texture) { glActiveTexture (texture); } HL_PRIM void HL_NAME(hl_gl_active_texture) (int texture) { glActiveTexture (texture); } void lime_gl_attach_shader (int program, int shader) { glAttachShader (program, shader); } HL_PRIM void HL_NAME(hl_gl_attach_shader) (int program, int shader) { glAttachShader (program, shader); } void lime_gl_begin_query (int target, int query) { #ifdef LIME_GLES3_API glBeginQuery (target, query); #endif } HL_PRIM void HL_NAME(hl_gl_begin_query) (int target, int query) { #ifdef LIME_GLES3_API glBeginQuery (target, query); #endif } void lime_gl_begin_transform_feedback (int primitiveNode) { #ifdef LIME_GLES3_API glBeginTransformFeedback (primitiveNode); #endif } HL_PRIM void HL_NAME(hl_gl_begin_transform_feedback) (int primitiveNode) { #ifdef LIME_GLES3_API glBeginTransformFeedback (primitiveNode); #endif } void lime_gl_bind_attrib_location (int program, int index, HxString name) { glBindAttribLocation (program, index, name.__s); } HL_PRIM void HL_NAME(hl_gl_bind_attrib_location) (int program, int index, hl_vstring* name) { glBindAttribLocation (program, index, name ? hl_to_utf8 (name->bytes) : NULL); } void lime_gl_bind_buffer (int target, int buffer) { glBindBuffer (target, buffer); } HL_PRIM void HL_NAME(hl_gl_bind_buffer) (int target, int buffer) { glBindBuffer (target, buffer); } void lime_gl_bind_buffer_base (int target, int index, int buffer) { #ifdef LIME_GLES3_API glBindBufferBase (target, index, buffer); #endif } HL_PRIM void HL_NAME(hl_gl_bind_buffer_base) (int target, int index, int buffer) { #ifdef LIME_GLES3_API glBindBufferBase (target, index, buffer); #endif } void lime_gl_bind_buffer_range (int target, int index, int buffer, double offset, int size) { #ifdef LIME_GLES3_API glBindBufferRange (target, index, buffer, (GLintptr)(uintptr_t)offset, size); #endif } HL_PRIM void HL_NAME(hl_gl_bind_buffer_range) (int target, int index, int buffer, double offset, int size) { #ifdef LIME_GLES3_API glBindBufferRange (target, index, buffer, (GLintptr)(uintptr_t)offset, size); #endif } void lime_gl_bind_framebuffer (int target, int framebuffer) { if (!framebuffer) { framebuffer = OpenGLBindings::defaultFramebuffer; } glBindFramebuffer (target, framebuffer); } HL_PRIM void HL_NAME(hl_gl_bind_framebuffer) (int target, int framebuffer) { if (!framebuffer) { framebuffer = OpenGLBindings::defaultFramebuffer; } glBindFramebuffer (target, framebuffer); } void lime_gl_bind_renderbuffer (int target, int renderbuffer) { if (!renderbuffer) { renderbuffer = OpenGLBindings::defaultRenderbuffer; } glBindRenderbuffer (target, renderbuffer); } HL_PRIM void HL_NAME(hl_gl_bind_renderbuffer) (int target, int renderbuffer) { if (!renderbuffer) { renderbuffer = OpenGLBindings::defaultRenderbuffer; } glBindRenderbuffer (target, renderbuffer); } void lime_gl_bind_sampler (int unit, int sampler) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glBindSampler) { glBindSampler (unit, sampler); } #endif } HL_PRIM void HL_NAME(hl_gl_bind_sampler) (int unit, int sampler) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glBindSampler) { glBindSampler (unit, sampler); } #endif } void lime_gl_bind_texture (int target, int texture) { glBindTexture (target, texture); } HL_PRIM void HL_NAME(hl_gl_bind_texture) (int target, int texture) { glBindTexture (target, texture); } void lime_gl_bind_transform_feedback (int target, int transformFeedback) { #ifdef LIME_GLES3_API glBindTransformFeedback (target, transformFeedback); #endif } HL_PRIM void HL_NAME(hl_gl_bind_transform_feedback) (int target, int transformFeedback) { #ifdef LIME_GLES3_API glBindTransformFeedback (target, transformFeedback); #endif } void lime_gl_bind_vertex_array (int vertexArray) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glBindVertexArray) { glBindVertexArray (vertexArray); } #endif } HL_PRIM void HL_NAME(hl_gl_bind_vertex_array) (int vertexArray) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glBindVertexArray) { glBindVertexArray (vertexArray); } #endif } void lime_gl_blend_color (float r, float g, float b, float a) { glBlendColor (r, g, b, a); } HL_PRIM void HL_NAME(hl_gl_blend_color) (float r, float g, float b, float a) { glBlendColor (r, g, b, a); } void lime_gl_blend_equation (int mode) { glBlendEquation (mode); } HL_PRIM void HL_NAME(hl_gl_blend_equation) (int mode) { glBlendEquation (mode); } void lime_gl_blend_equation_separate (int rgb, int a) { glBlendEquationSeparate (rgb, a); } HL_PRIM void HL_NAME(hl_gl_blend_equation_separate) (int rgb, int a) { glBlendEquationSeparate (rgb, a); } void lime_gl_blend_func (int sfactor, int dfactor) { glBlendFunc (sfactor, dfactor); } HL_PRIM void HL_NAME(hl_gl_blend_func) (int sfactor, int dfactor) { glBlendFunc (sfactor, dfactor); } void lime_gl_blend_func_separate (int srcRGB, int destRGB, int srcAlpha, int destAlpha) { glBlendFuncSeparate (srcRGB, destRGB, srcAlpha, destAlpha); } HL_PRIM void HL_NAME(hl_gl_blend_func_separate) (int srcRGB, int destRGB, int srcAlpha, int destAlpha) { glBlendFuncSeparate (srcRGB, destRGB, srcAlpha, destAlpha); } void lime_gl_blit_framebuffer (int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glBlitFramebuffer) { glBlitFramebuffer (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } #endif } HL_PRIM void HL_NAME(hl_gl_blit_framebuffer) (int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glBlitFramebuffer) { glBlitFramebuffer (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } #endif } void lime_gl_buffer_data (int target, int size, double data, int usage) { glBufferData (target, size, (void*)(uintptr_t)data, usage); } HL_PRIM void HL_NAME(hl_gl_buffer_data) (int target, int size, double data, int usage) { glBufferData (target, size, (void*)(uintptr_t)data, usage); } void lime_gl_buffer_sub_data (int target, int offset, int size, double data) { glBufferSubData (target, offset, size, (void*)(uintptr_t)data); } HL_PRIM void HL_NAME(hl_gl_buffer_sub_data) (int target, int offset, int size, double data) { glBufferSubData (target, offset, size, (void*)(uintptr_t)data); } int lime_gl_check_framebuffer_status (int target) { return glCheckFramebufferStatus (target); } HL_PRIM int HL_NAME(hl_gl_check_framebuffer_status) (int target) { return glCheckFramebufferStatus (target); } void lime_gl_clear (int mask) { gc_gl_run (); glClear (mask); } HL_PRIM void HL_NAME(hl_gl_clear) (int mask) { gc_gl_run (); glClear (mask); } void lime_gl_clear_bufferfi (int buffer, int drawBuffer, float depth, int stencil) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glClearBufferfi) { glClearBufferfi (buffer, drawBuffer, depth, stencil); } #endif } HL_PRIM void HL_NAME(hl_gl_clear_bufferfi) (int buffer, int drawBuffer, float depth, int stencil) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glClearBufferfi) { glClearBufferfi (buffer, drawBuffer, depth, stencil); } #endif } void lime_gl_clear_bufferfv (int buffer, int drawBuffer, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glClearBufferfv) { glClearBufferfv (buffer, drawBuffer, (GLfloat*)(uintptr_t)data); } #endif } HL_PRIM void HL_NAME(hl_gl_clear_bufferfv) (int buffer, int drawBuffer, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glClearBufferfv) { glClearBufferfv (buffer, drawBuffer, (GLfloat*)(uintptr_t)data); } #endif } void lime_gl_clear_bufferiv (int buffer, int drawBuffer, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glClearBufferiv) { glClearBufferiv (buffer, drawBuffer, (GLint*)(uintptr_t)data); } #endif } HL_PRIM void HL_NAME(hl_gl_clear_bufferiv) (int buffer, int drawBuffer, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glClearBufferiv) { glClearBufferiv (buffer, drawBuffer, (GLint*)(uintptr_t)data); } #endif } void lime_gl_clear_bufferuiv (int buffer, int drawBuffer, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glClearBufferuiv) { glClearBufferuiv (buffer, drawBuffer, (GLuint*)(uintptr_t)data); } #endif } HL_PRIM void HL_NAME(hl_gl_clear_bufferuiv) (int buffer, int drawBuffer, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glClearBufferuiv) { glClearBufferuiv (buffer, drawBuffer, (GLuint*)(uintptr_t)data); } #endif } void lime_gl_clear_color (float red, float green, float blue, float alpha) { glClearColor (red, green, blue, alpha); } HL_PRIM void HL_NAME(hl_gl_clear_color) (float red, float green, float blue, float alpha) { glClearColor (red, green, blue, alpha); } void lime_gl_clear_depthf (float depth) { #ifdef LIME_GLES glClearDepthf (depth); #else glClearDepth (depth); #endif } HL_PRIM void HL_NAME(hl_gl_clear_depthf) (float depth) { #ifdef LIME_GLES glClearDepthf (depth); #else glClearDepth (depth); #endif } void lime_gl_clear_stencil (int stencil) { glClearStencil (stencil); } HL_PRIM void HL_NAME(hl_gl_clear_stencil) (int stencil) { glClearStencil (stencil); } int lime_gl_client_wait_sync (value sync, int flags, int timeoutA, int timeoutB) { #ifdef LIME_GLES3_API GLuint64 timeout = (GLuint64) timeoutA << 32 | timeoutB; return glClientWaitSync ((GLsync)val_data (sync), flags, timeout); #else return 0; #endif } HL_PRIM int HL_NAME(hl_gl_client_wait_sync) (HL_CFFIPointer* sync, int flags, int timeoutA, int timeoutB) { #ifdef LIME_GLES3_API GLuint64 timeout = (GLuint64) timeoutA << 32 | timeoutB; return glClientWaitSync ((GLsync)sync->ptr, flags, timeout); #else return 0; #endif } void lime_gl_color_mask (bool red, bool green, bool blue, bool alpha) { glColorMask (red, green, blue, alpha); } HL_PRIM void HL_NAME(hl_gl_color_mask) (bool red, bool green, bool blue, bool alpha) { glColorMask (red, green, blue, alpha); } void lime_gl_compile_shader (int shader) { glCompileShader (shader); } HL_PRIM void HL_NAME(hl_gl_compile_shader) (int shader) { glCompileShader (shader); } void lime_gl_compressed_tex_image_2d (int target, int level, int internalformat, int width, int height, int border, int imageSize, double data) { glCompressedTexImage2D (target, level, internalformat, width, height, border, imageSize, (void*)(uintptr_t)data); } HL_PRIM void HL_NAME(hl_gl_compressed_tex_image_2d) (int target, int level, int internalformat, int width, int height, int border, int imageSize, double data) { glCompressedTexImage2D (target, level, internalformat, width, height, border, imageSize, (void*)(uintptr_t)data); } void lime_gl_compressed_tex_image_3d (int target, int level, int internalformat, int width, int height, int depth, int border, int imageSize, double data) { #ifdef LIME_GLES3_API glCompressedTexImage3D (target, level, internalformat, width, height, depth, border, imageSize, (void*)(uintptr_t)data); #endif } HL_PRIM void HL_NAME(hl_gl_compressed_tex_image_3d) (int target, int level, int internalformat, int width, int height, int depth, int border, int imageSize, double data) { #ifdef LIME_GLES3_API glCompressedTexImage3D (target, level, internalformat, width, height, depth, border, imageSize, (void*)(uintptr_t)data); #endif } void lime_gl_compressed_tex_sub_image_2d (int target, int level, int xoffset, int yoffset, int width, int height, int format, int imageSize, double data) { glCompressedTexSubImage2D (target, level, xoffset, yoffset, width, height, format, imageSize, (void*)(uintptr_t)data); } HL_PRIM void HL_NAME(hl_gl_compressed_tex_sub_image_2d) (int target, int level, int xoffset, int yoffset, int width, int height, int format, int imageSize, double data) { glCompressedTexSubImage2D (target, level, xoffset, yoffset, width, height, format, imageSize, (void*)(uintptr_t)data); } void lime_gl_compressed_tex_sub_image_3d (int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int imageSize, double data) { #ifdef LIME_GLES3_API glCompressedTexSubImage3D (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (void*)(uintptr_t)data); #endif } HL_PRIM void HL_NAME(hl_gl_compressed_tex_sub_image_3d) (int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int imageSize, double data) { #ifdef LIME_GLES3_API glCompressedTexSubImage3D (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, (void*)(uintptr_t)data); #endif } void lime_gl_copy_buffer_sub_data (int readTarget, int writeTarget, double readOffset, double writeOffset, int size) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glCopyBufferSubData) { glCopyBufferSubData (readTarget, writeTarget, (GLintptr)(uintptr_t)readOffset, (GLintptr)(uintptr_t)writeOffset, size); } #endif } HL_PRIM void HL_NAME(hl_gl_copy_buffer_sub_data) (int readTarget, int writeTarget, double readOffset, double writeOffset, int size) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glCopyBufferSubData) { glCopyBufferSubData (readTarget, writeTarget, (GLintptr)(uintptr_t)readOffset, (GLintptr)(uintptr_t)writeOffset, size); } #endif } void lime_gl_copy_tex_image_2d (int target, int level, int internalformat, int x, int y, int width, int height, int border) { glCopyTexImage2D (target, level, internalformat, x, y, width, height, border); } HL_PRIM void HL_NAME(hl_gl_copy_tex_image_2d) (int target, int level, int internalformat, int x, int y, int width, int height, int border) { glCopyTexImage2D (target, level, internalformat, x, y, width, height, border); } void lime_gl_copy_tex_sub_image_2d (int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) { glCopyTexSubImage2D (target, level, xoffset, yoffset, x, y, width, height); } HL_PRIM void HL_NAME(hl_gl_copy_tex_sub_image_2d) (int target, int level, int xoffset, int yoffset, int x, int y, int width, int height) { glCopyTexSubImage2D (target, level, xoffset, yoffset, x, y, width, height); } void lime_gl_copy_tex_sub_image_3d (int target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glCopyTexSubImage3D) { glCopyTexSubImage3D (target, level, xoffset, yoffset, zoffset, x, y, width, height); } #endif } HL_PRIM void HL_NAME(hl_gl_copy_tex_sub_image_3d) (int target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glCopyTexSubImage3D) { glCopyTexSubImage3D (target, level, xoffset, yoffset, zoffset, x, y, width, height); } #endif } int lime_gl_create_buffer () { GLuint id = 0; glGenBuffers (1, &id); return id; } HL_PRIM int HL_NAME(hl_gl_create_buffer) () { GLuint id = 0; glGenBuffers (1, &id); return id; } int lime_gl_create_framebuffer () { GLuint id = 0; glGenFramebuffers (1, &id); return id; } HL_PRIM int HL_NAME(hl_gl_create_framebuffer) () { GLuint id = 0; glGenFramebuffers (1, &id); return id; } int lime_gl_create_program () { return glCreateProgram (); } HL_PRIM int HL_NAME(hl_gl_create_program) () { return glCreateProgram (); } int lime_gl_create_query () { GLuint id = 0; #ifdef LIME_GLES3_API glGenQueries (1, &id); #endif return id; } HL_PRIM int HL_NAME(hl_gl_create_query) () { GLuint id = 0; #ifdef LIME_GLES3_API glGenQueries (1, &id); #endif return id; } int lime_gl_create_renderbuffer () { GLuint id = 0; glGenRenderbuffers (1, &id); return id; } HL_PRIM int HL_NAME(hl_gl_create_renderbuffer) () { GLuint id = 0; glGenRenderbuffers (1, &id); return id; } int lime_gl_create_sampler () { GLuint id = 0; #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGenSamplers) { glGenSamplers (1, &id); } #endif return id; } HL_PRIM int HL_NAME(hl_gl_create_sampler) () { GLuint id = 0; #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGenSamplers) { glGenSamplers (1, &id); } #endif return id; } int lime_gl_create_shader (int type) { return glCreateShader (type); } HL_PRIM int HL_NAME(hl_gl_create_shader) (int type) { return glCreateShader (type); } int lime_gl_create_texture () { GLuint id = 0; glGenTextures (1, &id); return id; } HL_PRIM int HL_NAME(hl_gl_create_texture) () { GLuint id = 0; glGenTextures (1, &id); return id; } int lime_gl_create_transform_feedback () { GLuint id = 0; #ifdef LIME_GLES3_API glGenTransformFeedbacks (1, &id); #endif return id; } HL_PRIM int HL_NAME(hl_gl_create_transform_feedback) () { GLuint id = 0; #ifdef LIME_GLES3_API glGenTransformFeedbacks (1, &id); #endif return id; } int lime_gl_create_vertex_array () { GLuint id = 0; #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGenVertexArrays) { glGenVertexArrays (1, &id); } #endif return id; } HL_PRIM int HL_NAME(hl_gl_create_vertex_array) () { GLuint id = 0; #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGenVertexArrays) { glGenVertexArrays (1, &id); } #endif return id; } void lime_gl_cull_face (int mode) { glCullFace (mode); } HL_PRIM void HL_NAME(hl_gl_cull_face) (int mode) { glCullFace (mode); } void lime_gl_delete_buffer (int buffer) { glDeleteBuffers (1, (GLuint*)&buffer); } HL_PRIM void HL_NAME(hl_gl_delete_buffer) (int buffer) { glDeleteBuffers (1, (GLuint*)&buffer); } void lime_gl_delete_framebuffer (int framebuffer) { glDeleteFramebuffers (1, (GLuint*)&framebuffer); } HL_PRIM void HL_NAME(hl_gl_delete_framebuffer) (int framebuffer) { glDeleteFramebuffers (1, (GLuint*)&framebuffer); } void lime_gl_delete_program (int program) { glDeleteProgram (program); } HL_PRIM void HL_NAME(hl_gl_delete_program) (int program) { glDeleteProgram (program); } void lime_gl_delete_query (int query) { #ifdef LIME_GLES3_API glDeleteQueries (1, (GLuint*)&query); #endif } HL_PRIM void HL_NAME(hl_gl_delete_query) (int query) { #ifdef LIME_GLES3_API glDeleteQueries (1, (GLuint*)&query); #endif } void lime_gl_delete_renderbuffer (int renderbuffer) { glDeleteRenderbuffers (1, (GLuint*)&renderbuffer); } HL_PRIM void HL_NAME(hl_gl_delete_renderbuffer) (int renderbuffer) { glDeleteRenderbuffers (1, (GLuint*)&renderbuffer); } void lime_gl_delete_sampler (int sampler) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDeleteSamplers) { glDeleteSamplers (1, (GLuint*)&sampler); } #endif } HL_PRIM void HL_NAME(hl_gl_delete_sampler) (int sampler) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDeleteSamplers) { glDeleteSamplers (1, (GLuint*)&sampler); } #endif } void lime_gl_delete_shader (int shader) { glDeleteShader (shader); } HL_PRIM void HL_NAME(hl_gl_delete_shader) (int shader) { glDeleteShader (shader); } void lime_gl_delete_sync (value sync) { #ifdef LIME_GLES3_API if (val_is_null (sync)) return; glDeleteSync ((GLsync)val_data (sync)); #endif } HL_PRIM void HL_NAME(hl_gl_delete_sync) (HL_CFFIPointer* sync) { #ifdef LIME_GLES3_API if (!sync) return; glDeleteSync ((GLsync)sync->ptr); #endif } void lime_gl_delete_texture (int texture) { glDeleteTextures (1, (GLuint*)&texture); } HL_PRIM void HL_NAME(hl_gl_delete_texture) (int texture) { glDeleteTextures (1, (GLuint*)&texture); } void lime_gl_delete_transform_feedback (int transformFeedback) { #ifdef LIME_GLES3_API glDeleteTransformFeedbacks (1, (GLuint*)&transformFeedback); #endif } HL_PRIM void HL_NAME(hl_gl_delete_transform_feedback) (int transformFeedback) { #ifdef LIME_GLES3_API glDeleteTransformFeedbacks (1, (GLuint*)&transformFeedback); #endif } void lime_gl_delete_vertex_array (int vertexArray) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDeleteVertexArrays) { glDeleteVertexArrays (1, (GLuint*)&vertexArray); } #endif } HL_PRIM void HL_NAME(hl_gl_delete_vertex_array) (int vertexArray) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDeleteVertexArrays) { glDeleteVertexArrays (1, (GLuint*)&vertexArray); } #endif } void lime_gl_depth_func (int func) { glDepthFunc (func); } HL_PRIM void HL_NAME(hl_gl_depth_func) (int func) { glDepthFunc (func); } void lime_gl_depth_mask (bool flag) { glDepthMask (flag); } HL_PRIM void HL_NAME(hl_gl_depth_mask) (bool flag) { glDepthMask (flag); } void lime_gl_depth_rangef (float zNear, float zFar) { #ifdef LIME_GLES glDepthRangef (zNear, zFar); #else glDepthRange (zNear, zFar); #endif } HL_PRIM void HL_NAME(hl_gl_depth_rangef) (float zNear, float zFar) { #ifdef LIME_GLES glDepthRangef (zNear, zFar); #else glDepthRange (zNear, zFar); #endif } void lime_gl_detach_shader (int program, int shader) { glDetachShader (program, shader); } HL_PRIM void HL_NAME(hl_gl_detach_shader) (int program, int shader) { glDetachShader (program, shader); } void lime_gl_disable (int cap) { glDisable (cap); } HL_PRIM void HL_NAME(hl_gl_disable) (int cap) { glDisable (cap); } void lime_gl_disable_vertex_attrib_array (int index) { glDisableVertexAttribArray (index); } HL_PRIM void HL_NAME(hl_gl_disable_vertex_attrib_array) (int index) { glDisableVertexAttribArray (index); } void lime_gl_draw_arrays (int mode, int first, int count) { glDrawArrays (mode, first, count); } HL_PRIM void HL_NAME(hl_gl_draw_arrays) (int mode, int first, int count) { glDrawArrays (mode, first, count); } void lime_gl_draw_arrays_instanced (int mode, int first, int count, int instanceCount) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDrawArraysInstanced) { glDrawArraysInstanced (mode, first, count, instanceCount); } #endif } HL_PRIM void HL_NAME(hl_gl_draw_arrays_instanced) (int mode, int first, int count, int instanceCount) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDrawArraysInstanced) { glDrawArraysInstanced (mode, first, count, instanceCount); } #endif } void lime_gl_draw_buffers (value buffers) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDrawBuffers) { GLsizei size = val_array_size (buffers); GLenum *_buffers = (GLenum*)alloca (size * sizeof(GLenum)); for (int i = 0; i < size; i++) { _buffers[i] = val_int (val_array_i (buffers, i)); } glDrawBuffers (size, _buffers); } #endif } HL_PRIM void HL_NAME(hl_gl_draw_buffers) (hl_varray* buffers) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDrawBuffers) { GLsizei size = buffers->size; glDrawBuffers (size, (GLenum*)hl_aptr (buffers, int)); } #endif } void lime_gl_draw_elements (int mode, int count, int type, double offset) { glDrawElements (mode, count, type, (void*)(uintptr_t)offset); } HL_PRIM void HL_NAME(hl_gl_draw_elements) (int mode, int count, int type, double offset) { glDrawElements (mode, count, type, (void*)(uintptr_t)offset); } void lime_gl_draw_elements_instanced (int mode, int count, int type, double offset, int instanceCount) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDrawElementsInstanced) { glDrawElementsInstanced (mode, count, type, (void*)(uintptr_t)offset, instanceCount); } #endif } HL_PRIM void HL_NAME(hl_gl_draw_elements_instanced) (int mode, int count, int type, double offset, int instanceCount) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDrawElementsInstanced) { glDrawElementsInstanced (mode, count, type, (void*)(uintptr_t)offset, instanceCount); } #endif } void lime_gl_draw_range_elements (int mode, int start, int end, int count, int type, double offset) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDrawRangeElements) { glDrawRangeElements (mode, start, end, count, type, (void*)(uintptr_t)offset); } #endif } HL_PRIM void HL_NAME(hl_gl_draw_range_elements) (int mode, int start, int end, int count, int type, double offset) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glDrawRangeElements) { glDrawRangeElements (mode, start, end, count, type, (void*)(uintptr_t)offset); } #endif } void lime_gl_enable (int cap) { glEnable (cap); } HL_PRIM void HL_NAME(hl_gl_enable) (int cap) { glEnable (cap); } void lime_gl_enable_vertex_attrib_array (int index) { glEnableVertexAttribArray (index); } HL_PRIM void HL_NAME(hl_gl_enable_vertex_attrib_array) (int index) { glEnableVertexAttribArray (index); } void lime_gl_end_query (int target) { #ifdef LIME_GLES3_API glEndQuery (target); #endif } HL_PRIM void HL_NAME(hl_gl_end_query) (int target) { #ifdef LIME_GLES3_API glEndQuery (target); #endif } void lime_gl_end_transform_feedback () { #ifdef LIME_GLES3_API glEndTransformFeedback (); #endif } HL_PRIM void HL_NAME(hl_gl_end_transform_feedback) () { #ifdef LIME_GLES3_API glEndTransformFeedback (); #endif } value lime_gl_fence_sync (int condition, int flags) { #ifdef LIME_GLES3_API GLsync result = glFenceSync (condition, flags); value handle = CFFIPointer (result, gc_gl_object); glObjectPtrs[handle] = result; return handle; #else return alloc_null (); #endif } HL_PRIM HL_CFFIPointer* HL_NAME(hl_gl_fence_sync) (int condition, int flags) { #ifdef LIME_GLES3_API GLsync result = glFenceSync (condition, flags); HL_CFFIPointer* handle = HLCFFIPointer (result, (hl_finalizer)hl_gc_gl_object); glObjectPtrs[handle] = result; return handle; #else return NULL; #endif } void lime_gl_finish () { glFinish (); } HL_PRIM void HL_NAME(hl_gl_finish) () { glFinish (); } void lime_gl_flush () { glFlush (); } HL_PRIM void HL_NAME(hl_gl_flush) () { glFlush (); } void lime_gl_framebuffer_renderbuffer (int target, int attachment, int renderbuffertarget, int renderbuffer) { glFramebufferRenderbuffer (target, attachment, renderbuffertarget, renderbuffer); } HL_PRIM void HL_NAME(hl_gl_framebuffer_renderbuffer) (int target, int attachment, int renderbuffertarget, int renderbuffer) { glFramebufferRenderbuffer (target, attachment, renderbuffertarget, renderbuffer); } void lime_gl_framebuffer_texture2D (int target, int attachment, int textarget, int texture, int level) { glFramebufferTexture2D (target, attachment, textarget, texture, level); } HL_PRIM void HL_NAME(hl_gl_framebuffer_texture2D) (int target, int attachment, int textarget, int texture, int level) { glFramebufferTexture2D (target, attachment, textarget, texture, level); } void lime_gl_framebuffer_texture_layer (int target, int attachment, int texture, int level, int layer) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glFramebufferTextureLayer) { glFramebufferTextureLayer (target, attachment, texture, level, layer); } #endif } HL_PRIM void HL_NAME(hl_gl_framebuffer_texture_layer) (int target, int attachment, int texture, int level, int layer) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glFramebufferTextureLayer) { glFramebufferTextureLayer (target, attachment, texture, level, layer); } #endif } void lime_gl_front_face (int face) { glFrontFace (face); } HL_PRIM void HL_NAME(hl_gl_front_face) (int face) { glFrontFace (face); } void lime_gl_generate_mipmap (int target) { glGenerateMipmap (target); } HL_PRIM void HL_NAME(hl_gl_generate_mipmap) (int target) { glGenerateMipmap (target); } value lime_gl_get_active_attrib (int program, int index) { value result = alloc_empty_object (); std::string buffer (GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, 0); GLsizei outLen = 0; GLsizei size = 0; GLenum type = 0; glGetActiveAttrib (program, index, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &outLen, &size, &type, &buffer[0]); buffer.resize (outLen); alloc_field (result, val_id ("size"), alloc_int (size)); alloc_field (result, val_id ("type"), alloc_int (type)); alloc_field (result, val_id ("name"), alloc_string (buffer.c_str ())); return result; } HL_PRIM vdynamic* HL_NAME(hl_gl_get_active_attrib) (int program, int index) { char buffer[GL_ACTIVE_ATTRIBUTE_MAX_LENGTH]; GLsizei outLen = 0; GLsizei size = 0; GLenum type = 0; glGetActiveAttrib (program, index, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &outLen, &size, &type, &buffer[0]); char* _buffer = (char*)malloc (outLen + 1); memcpy (_buffer, &buffer, outLen); _buffer[outLen] = '\0'; const int id_size = hl_hash_utf8 ("size"); const int id_type = hl_hash_utf8 ("type"); const int id_name = hl_hash_utf8 ("name"); vdynamic *result = (vdynamic*)hl_alloc_dynobj(); hl_dyn_seti (result, id_size, &hlt_i32, size); hl_dyn_seti (result, id_type, &hlt_i32, type); hl_dyn_setp (result, id_name, &hlt_bytes, _buffer); return result; } value lime_gl_get_active_uniform (int program, int index) { std::string buffer (GL_ACTIVE_UNIFORM_MAX_LENGTH, 0); GLsizei outLen = 0; GLsizei size = 0; GLenum type = 0; glGetActiveUniform (program, index, GL_ACTIVE_UNIFORM_MAX_LENGTH, &outLen, &size, &type, &buffer[0]); buffer.resize (outLen); value result = alloc_empty_object (); alloc_field (result, val_id ("size"), alloc_int (size)); alloc_field (result, val_id ("type"), alloc_int (type)); alloc_field (result, val_id ("name"), alloc_string (buffer.c_str ())); return result; } HL_PRIM vdynamic* HL_NAME(hl_gl_get_active_uniform) (int program, int index) { char* buffer[GL_ACTIVE_UNIFORM_MAX_LENGTH]; GLsizei outLen = 0; GLsizei size = 0; GLenum type = 0; glGetActiveUniform (program, index, GL_ACTIVE_UNIFORM_MAX_LENGTH, &outLen, &size, &type, (GLchar*)&buffer); char* _buffer = (char*)malloc (outLen + 1); memcpy (_buffer, &buffer, outLen); _buffer[outLen] = '\0'; const int id_size = hl_hash_utf8 ("size"); const int id_type = hl_hash_utf8 ("type"); const int id_name = hl_hash_utf8 ("name"); vdynamic *result = (vdynamic*)hl_alloc_dynobj(); hl_dyn_seti (result, id_size, &hlt_i32, size); hl_dyn_seti (result, id_type, &hlt_i32, type); hl_dyn_setp (result, id_name, &hlt_bytes, _buffer); return result; } int lime_gl_get_active_uniform_blocki (int program, int uniformBlockIndex, int pname) { GLint param = 0; #ifdef LIME_GLES3_API glGetActiveUniformBlockiv (program, uniformBlockIndex, pname, ¶m); #endif return param; } HL_PRIM int HL_NAME(hl_gl_get_active_uniform_blocki) (int program, int uniformBlockIndex, int pname) { GLint param = 0; #ifdef LIME_GLES3_API glGetActiveUniformBlockiv (program, uniformBlockIndex, pname, ¶m); #endif return param; } void lime_gl_get_active_uniform_blockiv (int program, int uniformBlockIndex, int pname, double params) { #ifdef LIME_GLES3_API glGetActiveUniformBlockiv (program, uniformBlockIndex, pname, (GLint*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_active_uniform_blockiv) (int program, int uniformBlockIndex, int pname, double params) { #ifdef LIME_GLES3_API glGetActiveUniformBlockiv (program, uniformBlockIndex, pname, (GLint*)(uintptr_t)params); #endif } value lime_gl_get_active_uniform_block_name (int program, int uniformBlockIndex) { #ifdef LIME_GLES3_API GLint length; glGetActiveUniformBlockiv (program, uniformBlockIndex, GL_UNIFORM_BLOCK_NAME_LENGTH, &length); std::string buffer (length, 0); glGetActiveUniformBlockName (program, uniformBlockIndex, length, 0, &buffer[0]); return alloc_string (buffer.c_str ()); #else return alloc_null (); #endif } HL_PRIM vbyte* HL_NAME(hl_gl_get_active_uniform_block_name) (int program, int uniformBlockIndex) { #ifdef LIME_GLES3_API GLint length; glGetActiveUniformBlockiv (program, uniformBlockIndex, GL_UNIFORM_BLOCK_NAME_LENGTH, &length); char* buffer = (char*)malloc (length + 1); glGetActiveUniformBlockName (program, uniformBlockIndex, length, 0, buffer); buffer[length] = '\0'; return (vbyte*)buffer; #else return NULL; #endif } void lime_gl_get_active_uniformsiv (int program, value uniformIndices, int pname, double params) { #ifdef LIME_GLES3_API GLsizei size = val_array_size (uniformIndices); GLenum *_uniformIndices = (GLenum*)alloca (size * sizeof(GLenum)); for (int i = 0; i < size; i++) { _uniformIndices[i] = val_int (val_array_i (uniformIndices, i)); } glGetActiveUniformsiv (program, size, _uniformIndices, pname, (GLint*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_active_uniformsiv) (int program, hl_varray* uniformIndices, int pname, double params) { #ifdef LIME_GLES3_API GLsizei size = uniformIndices->size; glGetActiveUniformsiv (program, size, (GLenum*)hl_aptr (uniformIndices, int), pname, (GLint*)(uintptr_t)params); #endif } value lime_gl_get_attached_shaders (int program) { GLsizei maxCount = 0; glGetProgramiv (program, GL_ATTACHED_SHADERS, &maxCount); if (!maxCount) { return alloc_null (); } GLsizei count; GLuint* shaders = new GLuint[maxCount]; glGetAttachedShaders (program, maxCount, &count, shaders); value data = alloc_array (maxCount); for (int i = 0; i < maxCount; i++) { val_array_set_i (data, i, alloc_int (shaders[i])); } delete[] shaders; return data; } HL_PRIM varray* HL_NAME(hl_gl_get_attached_shaders) (int program) { GLsizei maxCount = 0; glGetProgramiv (program, GL_ATTACHED_SHADERS, &maxCount); if (!maxCount) { return NULL; } GLsizei count; varray* data = hl_alloc_array (&hlt_i32, maxCount); glGetAttachedShaders (program, maxCount, &count, (GLuint*)hl_aptr (data, int)); return data; } int lime_gl_get_attrib_location (int program, HxString name) { return glGetAttribLocation (program, name.__s); } HL_PRIM int HL_NAME(hl_gl_get_attrib_location) (int program, hl_vstring* name) { return glGetAttribLocation (program, name ? hl_to_utf8 (name->bytes) : NULL); } bool lime_gl_get_boolean (int pname) { unsigned char params; glGetBooleanv (pname, ¶ms); return params; } HL_PRIM bool HL_NAME(hl_gl_get_boolean) (int pname) { unsigned char params; glGetBooleanv (pname, ¶ms); return params; } void lime_gl_get_booleanv (int pname, double params) { glGetBooleanv (pname, (unsigned char*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_booleanv) (int pname, double params) { glGetBooleanv (pname, (unsigned char*)(uintptr_t)params); } int lime_gl_get_buffer_parameteri (int target, int index) { GLint params = 0; glGetBufferParameteriv (target, index, ¶ms); return params; } HL_PRIM int HL_NAME(hl_gl_get_buffer_parameteri) (int target, int index) { GLint params = 0; glGetBufferParameteriv (target, index, ¶ms); return params; } void lime_gl_get_buffer_parameteri64v (int target, int index, double params) { #ifdef LIME_GLES3_API glGetBufferParameteri64v (target, index, (GLint64*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_buffer_parameteri64v) (int target, int index, double params) { #ifdef LIME_GLES3_API glGetBufferParameteri64v (target, index, (GLint64*)(uintptr_t)params); #endif } void lime_gl_get_buffer_parameteriv (int target, int index, double params) { glGetBufferParameteriv (target, index, (GLint*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_buffer_parameteriv) (int target, int index, double params) { glGetBufferParameteriv (target, index, (GLint*)(uintptr_t)params); } double lime_gl_get_buffer_pointerv (int target, int pname) { uintptr_t result = 0; #ifdef LIME_GLES3_API glGetBufferPointerv (target, pname, (void**)result); #endif return (double)result; } HL_PRIM double HL_NAME(hl_gl_get_buffer_pointerv) (int target, int pname) { uintptr_t result = 0; #ifdef LIME_GLES3_API glGetBufferPointerv (target, pname, (void**)result); #endif return (double)result; } void lime_gl_get_buffer_sub_data (int target, double offset, int size, double data) { #ifndef LIME_GLES glGetBufferSubData (target, (GLintptr)(uintptr_t)offset, size, (void*)(uintptr_t)data); #endif } HL_PRIM void HL_NAME(hl_gl_get_buffer_sub_data) (int target, double offset, int size, double data) { #ifndef LIME_GLES glGetBufferSubData (target, (GLintptr)(uintptr_t)offset, size, (void*)(uintptr_t)data); #endif } value lime_gl_get_context_attributes () { value result = alloc_empty_object (); alloc_field (result, val_id ("alpha"), alloc_bool (true)); alloc_field (result, val_id ("depth"), alloc_bool (true)); alloc_field (result, val_id ("stencil"), alloc_bool (true)); alloc_field (result, val_id ("antialias"), alloc_bool (true)); return result; } HL_PRIM vdynamic* HL_NAME(hl_gl_get_context_attributes) () { const int id_alpha = hl_hash_utf8 ("alpha"); const int id_depth = hl_hash_utf8 ("depth"); const int id_stencil = hl_hash_utf8 ("stencil"); const int id_antialias = hl_hash_utf8 ("antialias"); // TODO: Handle if depth and stencil are disabled vdynamic *result = (vdynamic*)hl_alloc_dynobj(); hl_dyn_seti (result, id_alpha, &hlt_bool, true); hl_dyn_seti (result, id_depth, &hlt_bool, true); hl_dyn_seti (result, id_stencil, &hlt_bool, true); hl_dyn_seti (result, id_antialias, &hlt_bool, true); return result; } int lime_gl_get_error () { return glGetError (); } HL_PRIM int HL_NAME(hl_gl_get_error) () { return glGetError (); } value lime_gl_get_extension (HxString name) { #if (defined (HX_LINUX) || defined (HX_WINDOWS) || defined (HX_MACOS)) && !defined (NATIVE_TOOLKIT_SDL_ANGLE) && !defined (RASPBERRYPI) if (!glDebugMessageCallback_ptr && strcmp (name.__s, "KHR_debug") == 0) { glDebugMessageCallback_ptr = (GL_DebugMessageCallback_Func)SDL_GL_GetProcAddress ("glDebugMessageCallback"); if (!glDebugMessageCallback_ptr) { glDebugMessageCallback_ptr = (GL_DebugMessageCallback_Func)SDL_GL_GetProcAddress ("glDebugMessageCallbackKHR"); } if (glDebugMessageCallback_ptr) { glDebugMessageCallback_ptr ((GLDEBUGPROCARB)gl_debug_callback, NULL); } } #endif // void *result = 0; // #ifdef LIME_SDL // result = SDL_GL_GetProcAddress (name.__s); // #endif // if (result) { // static bool init = false; // static vkind functionKind; // if (!init) { // init = true; // kind_share (&functionKind, "function"); // } // return alloc_abstract (functionKind, result); // } return alloc_null (); } HL_PRIM vdynamic* HL_NAME(hl_gl_get_extension) (hl_vstring* name) { if (name == NULL) return NULL; #if (defined (HX_LINUX) || defined (HX_WINDOWS) || defined (HX_MACOS)) && !defined (NATIVE_TOOLKIT_SDL_ANGLE) && !defined (RASPBERRYPI) if (!glDebugMessageCallback_ptr && strcmp (hl_to_utf8 (name->bytes), "KHR_debug") == 0) { glDebugMessageCallback_ptr = (GL_DebugMessageCallback_Func)SDL_GL_GetProcAddress ("glDebugMessageCallback"); if (!glDebugMessageCallback_ptr) { glDebugMessageCallback_ptr = (GL_DebugMessageCallback_Func)SDL_GL_GetProcAddress ("glDebugMessageCallbackKHR"); } if (glDebugMessageCallback_ptr) { glDebugMessageCallback_ptr ((GLDEBUGPROCARB)gl_debug_callback, NULL); } } #endif // void *result = 0; // #ifdef LIME_SDL // result = SDL_GL_GetProcAddress (name.__s); // #endif // if (result) { // static bool init = false; // static vkind functionKind; // if (!init) { // init = true; // kind_share (&functionKind, "function"); // } // return alloc_abstract (functionKind, result); // } return NULL; } float lime_gl_get_float (int pname) { GLfloat params; glGetFloatv (pname, ¶ms); return params; } HL_PRIM float HL_NAME(hl_gl_get_float) (int pname) { GLfloat params; glGetFloatv (pname, ¶ms); return params; } void lime_gl_get_floatv (int pname, double params) { glGetFloatv (pname, (GLfloat*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_floatv) (int pname, double params) { glGetFloatv (pname, (GLfloat*)(uintptr_t)params); } int lime_gl_get_frag_data_location (int program, HxString name) { #ifdef LIME_GLES3_API return glGetFragDataLocation (program, name.__s); #else return 0; #endif } HL_PRIM int HL_NAME(hl_gl_get_frag_data_location) (int program, hl_vstring* name) { #ifdef LIME_GLES3_API return glGetFragDataLocation (program, name ? hl_to_utf8 (name->bytes) : NULL); #else return 0; #endif } int lime_gl_get_framebuffer_attachment_parameteri (int target, int attachment, int pname) { GLint params = 0; glGetFramebufferAttachmentParameteriv (target, attachment, pname, ¶ms); return params; } HL_PRIM int HL_NAME(hl_gl_get_framebuffer_attachment_parameteri) (int target, int attachment, int pname) { GLint params = 0; glGetFramebufferAttachmentParameteriv (target, attachment, pname, ¶ms); return params; } void lime_gl_get_framebuffer_attachment_parameteriv (int target, int attachment, int pname, double params) { glGetFramebufferAttachmentParameteriv (target, attachment, pname, (GLint*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_framebuffer_attachment_parameteriv) (int target, int attachment, int pname, double params) { glGetFramebufferAttachmentParameteriv (target, attachment, pname, (GLint*)(uintptr_t)params); } int lime_gl_get_integer (int pname) { GLint params; glGetIntegerv (pname, ¶ms); return params; } HL_PRIM int HL_NAME(hl_gl_get_integer) (int pname) { GLint params; glGetIntegerv (pname, ¶ms); return params; } void lime_gl_get_integer64v (int pname, double params) { #ifdef LIME_GLES3_API glGetInteger64v (pname, (GLint64*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_integer64v) (int pname, double params) { #ifdef LIME_GLES3_API glGetInteger64v (pname, (GLint64*)(uintptr_t)params); #endif } void lime_gl_get_integer64i_v (int pname, int index, double params) { #ifdef LIME_GLES3_API glGetInteger64i_v (pname, index, (GLint64*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_integer64i_v) (int pname, int index, double params) { #ifdef LIME_GLES3_API glGetInteger64i_v (pname, index, (GLint64*)(uintptr_t)params); #endif } void lime_gl_get_integerv (int pname, double params) { glGetIntegerv (pname, (GLint*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_integerv) (int pname, double params) { glGetIntegerv (pname, (GLint*)(uintptr_t)params); } void lime_gl_get_integeri_v (int pname, int index, double params) { #ifdef LIME_GLES3_API glGetIntegeri_v (pname, index, (GLint*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_integeri_v) (int pname, int index, double params) { #ifdef LIME_GLES3_API glGetIntegeri_v (pname, index, (GLint*)(uintptr_t)params); #endif } void lime_gl_get_internalformativ (int target, int internalformat, int pname, int bufSize, double params) { #ifdef LIME_GLES3_API glGetInternalformativ (target, internalformat, pname, (GLsizei)bufSize, (GLint*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_internalformativ) (int target, int internalformat, int pname, int bufSize, double params) { #ifdef LIME_GLES3_API glGetInternalformativ (target, internalformat, pname, (GLsizei)bufSize, (GLint*)(uintptr_t)params); #endif } void lime_gl_get_program_binary (int program, int binaryFormat, value bytes) { #ifdef LIME_GLES3_API GLint size = 0; glGetProgramiv (program, GL_PROGRAM_BINARY_LENGTH, &size); if (size > 0) { Bytes _bytes (bytes); _bytes.Resize (size); glGetProgramBinary (program, size, &size, (GLenum*)&binaryFormat, _bytes.b); } #endif } HL_PRIM void HL_NAME(hl_gl_get_program_binary) (int program, int binaryFormat, Bytes* bytes) { #ifdef LIME_GLES3_API GLint size = 0; glGetProgramiv (program, GL_PROGRAM_BINARY_LENGTH, &size); if (size > 0) { bytes->Resize (size); glGetProgramBinary (program, size, &size, (GLenum*)&binaryFormat, bytes->b); } #endif } value lime_gl_get_program_info_log (int handle) { GLuint program = handle; GLint logSize = 0; glGetProgramiv (program, GL_INFO_LOG_LENGTH, &logSize); if (logSize == 0) { return alloc_null (); } std::string buffer (logSize, 0); glGetProgramInfoLog (program, logSize, 0, &buffer[0]); return alloc_string (buffer.c_str ()); } HL_PRIM vbyte* HL_NAME(hl_gl_get_program_info_log) (int handle) { GLuint program = handle; GLint logSize = 0; glGetProgramiv (program, GL_INFO_LOG_LENGTH, &logSize); if (logSize == 0) { return NULL; } char* buffer = (char*)malloc (logSize + 1); glGetProgramInfoLog (program, logSize, 0, buffer); buffer[logSize] = '\0'; return (vbyte*)buffer; } int lime_gl_get_programi (int program, int pname) { GLint params = 0; glGetProgramiv (program, pname, ¶ms); return params; } HL_PRIM int HL_NAME(hl_gl_get_programi) (int program, int pname) { GLint params = 0; glGetProgramiv (program, pname, ¶ms); return params; } void lime_gl_get_programiv (int program, int pname, double params) { glGetProgramiv (program, pname, (GLint*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_programiv) (int program, int pname, double params) { glGetProgramiv (program, pname, (GLint*)(uintptr_t)params); } int lime_gl_get_queryi (int target, int pname) { GLint param = 0; #ifdef LIME_GLES3_API glGetQueryiv (target, pname, ¶m); #endif return param; } HL_PRIM int HL_NAME(hl_gl_get_queryi) (int target, int pname) { GLint param = 0; #ifdef LIME_GLES3_API glGetQueryiv (target, pname, ¶m); #endif return param; } void lime_gl_get_queryiv (int target, int pname, double params) { #ifdef LIME_GLES3_API glGetQueryiv (target, pname, (GLint*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_queryiv) (int target, int pname, double params) { #ifdef LIME_GLES3_API glGetQueryiv (target, pname, (GLint*)(uintptr_t)params); #endif } int lime_gl_get_query_objectui (int query, int pname) { GLuint param = 0; #ifdef LIME_GLES3_API glGetQueryObjectuiv (query, pname, ¶m); #endif return param; } HL_PRIM int HL_NAME(hl_gl_get_query_objectui) (int query, int pname) { GLuint param = 0; #ifdef LIME_GLES3_API glGetQueryObjectuiv (query, pname, ¶m); #endif return param; } void lime_gl_get_query_objectuiv (int query, int pname, double params) { #ifdef LIME_GLES3_API glGetQueryObjectuiv (query, pname, (GLuint*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_query_objectuiv) (int query, int pname, double params) { #ifdef LIME_GLES3_API glGetQueryObjectuiv (query, pname, (GLuint*)(uintptr_t)params); #endif } int lime_gl_get_renderbuffer_parameteri (int target, int pname) { GLint param = 0; glGetRenderbufferParameteriv (target, pname, ¶m); return param; } HL_PRIM int HL_NAME(hl_gl_get_renderbuffer_parameteri) (int target, int pname) { GLint param = 0; glGetRenderbufferParameteriv (target, pname, ¶m); return param; } void lime_gl_get_renderbuffer_parameteriv (int target, int pname, double params) { glGetRenderbufferParameteriv (target, pname, (GLint*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_renderbuffer_parameteriv) (int target, int pname, double params) { glGetRenderbufferParameteriv (target, pname, (GLint*)(uintptr_t)params); } float lime_gl_get_sampler_parameterf (int sampler, int pname) { GLfloat param = 0; #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGetSamplerParameterfv) { glGetSamplerParameterfv (sampler, pname, ¶m); } #endif return param; } HL_PRIM float HL_NAME(hl_gl_get_sampler_parameterf) (int sampler, int pname) { GLfloat param = 0; #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGetSamplerParameterfv) { glGetSamplerParameterfv (sampler, pname, ¶m); } #endif return param; } void lime_gl_get_sampler_parameterfv (int sampler, int pname, double params) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGetSamplerParameterfv) { glGetSamplerParameterfv (sampler, pname, (GLfloat*)(uintptr_t)params); } #endif } HL_PRIM void HL_NAME(hl_gl_get_sampler_parameterfv) (int sampler, int pname, double params) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGetSamplerParameterfv) { glGetSamplerParameterfv (sampler, pname, (GLfloat*)(uintptr_t)params); } #endif } int lime_gl_get_sampler_parameteri (int sampler, int pname) { GLint param = 0; #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGetSamplerParameteriv) { glGetSamplerParameteriv (sampler, pname, ¶m); } #endif return param; } HL_PRIM int HL_NAME(hl_gl_get_sampler_parameteri) (int sampler, int pname) { GLint param = 0; #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGetSamplerParameteriv) { glGetSamplerParameteriv (sampler, pname, ¶m); } #endif return param; } void lime_gl_get_sampler_parameteriv (int sampler, int pname, double params) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGetSamplerParameteriv) { glGetSamplerParameteriv (sampler, pname, (GLint*)(uintptr_t)params); } #endif } HL_PRIM void HL_NAME(hl_gl_get_sampler_parameteriv) (int sampler, int pname, double params) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glGetSamplerParameteriv) { glGetSamplerParameteriv (sampler, pname, (GLint*)(uintptr_t)params); } #endif } value lime_gl_get_shader_info_log (int handle) { GLuint shader = handle; GLint logSize = 0; glGetShaderiv (shader, GL_INFO_LOG_LENGTH, &logSize); if (logSize == 0) { return alloc_null (); } std::string buffer (logSize, 0); GLint writeSize; glGetShaderInfoLog (shader, logSize, &writeSize, &buffer[0]); return alloc_string (buffer.c_str ()); } HL_PRIM vbyte* HL_NAME(hl_gl_get_shader_info_log) (int handle) { GLuint shader = handle; GLint logSize = 0; glGetShaderiv (shader, GL_INFO_LOG_LENGTH, &logSize); if (logSize == 0) { return NULL; } char* buffer = (char*)malloc (logSize + 1); GLint writeSize; glGetShaderInfoLog (shader, logSize, &writeSize, buffer); buffer[logSize] = '\0'; return (vbyte*)buffer; } int lime_gl_get_shaderi (int shader, int pname) { GLint params = 0; glGetShaderiv (shader, pname, ¶ms); return params; } HL_PRIM int HL_NAME(hl_gl_get_shaderi) (int shader, int pname) { GLint params = 0; glGetShaderiv (shader, pname, ¶ms); return params; } void lime_gl_get_shaderiv (int shader, int pname, double params) { glGetShaderiv (shader, pname, (GLint*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_shaderiv) (int shader, int pname, double params) { glGetShaderiv (shader, pname, (GLint*)(uintptr_t)params); } value lime_gl_get_shader_precision_format (int shadertype, int precisiontype) { #ifdef LIME_GLES GLint range[2]; GLint precision; glGetShaderPrecisionFormat (shadertype, precisiontype, range, &precision); value result = alloc_empty_object (); alloc_field (result, val_id ("rangeMin"), alloc_int (range[0])); alloc_field (result, val_id ("rangeMax"), alloc_int (range[1])); alloc_field (result, val_id ("precision"), alloc_int (precision)); return result; #else return alloc_null (); #endif } HL_PRIM vdynamic* HL_NAME(hl_gl_get_shader_precision_format) (int shadertype, int precisiontype) { #ifdef LIME_GLES GLint range[2]; GLint precision; glGetShaderPrecisionFormat (shadertype, precisiontype, range, &precision); const int id_rangeMin = hl_hash_utf8 ("rangeMin"); const int id_rangeMax = hl_hash_utf8 ("rangeMax"); const int id_precision = hl_hash_utf8 ("precision"); vdynamic *result = (vdynamic*)hl_alloc_dynobj(); hl_dyn_seti (result, id_rangeMin, &hlt_i32, range[0]); hl_dyn_seti (result, id_rangeMax, &hlt_i32, range[1]); hl_dyn_seti (result, id_precision, &hlt_i32, precision); return result; #else return NULL; #endif } value lime_gl_get_shader_source (int shader) { GLint len = 0; glGetShaderiv (shader, GL_SHADER_SOURCE_LENGTH, &len); if (len == 0) { return alloc_null (); } char *buf = new char[len + 1]; glGetShaderSource (shader, len + 1, 0, buf); value result = alloc_string (buf); delete [] buf; return result; } HL_PRIM vbyte* HL_NAME(hl_gl_get_shader_source) (int shader) { GLint len = 0; glGetShaderiv (shader, GL_SHADER_SOURCE_LENGTH, &len); if (len == 0) { return NULL; } char *result = new char[len + 1]; glGetShaderSource (shader, len, 0, result); result[len] = '\0'; return (vbyte*)result; } value lime_gl_get_string (int pname) { const char* val = (const char*)glGetString (pname); if (val) { return alloc_string (val); } else { return alloc_null (); } } HL_PRIM vbyte* HL_NAME(hl_gl_get_string) (int pname) { const char* val = (const char*)glGetString (pname); if (val) { int size = strlen (val); char* result = (char*)malloc (size + 1); memcpy (result, val, size); result[size] = '\0'; return (vbyte*)result; } else { return NULL; } } value lime_gl_get_stringi (int pname, int index) { #ifdef LIME_GLES3_API const char* val = (const char*)glGetStringi (pname, index); if (val) { return alloc_string (val); } else { return alloc_null (); } #else return alloc_null (); #endif } HL_PRIM vbyte* HL_NAME(hl_gl_get_stringi) (int pname, int index) { #ifdef LIME_GLES3_API const char* val = (const char*)glGetStringi (pname, index); if (val) { int size = strlen (val); char* result = (char*)malloc (size + 1); memcpy (result, val, size); result[size] = '\0'; return (vbyte*)result; } else { return NULL; } #else return NULL; #endif } int lime_gl_get_sync_parameteri (value sync, int pname) { // TODO GLint param = 0; //glGetSynciv ((GLsync)(uintptr_t)sync, pname, ¶m); return param; } HL_PRIM int HL_NAME(hl_gl_get_sync_parameteri) (HL_CFFIPointer* sync, int pname) { // TODO GLint param = 0; //glGetSynciv ((GLsync)(uintptr_t)sync, pname, ¶m); return param; } void lime_gl_get_sync_parameteriv (value sync, int pname, double params) { // TODO //glGetSynciv ((GLsync)(uintptr_t)sync, pname, (GLint*)(uintptr_t)param); } HL_PRIM void HL_NAME(hl_gl_get_sync_parameteriv) (HL_CFFIPointer* sync, int pname, double params) { // TODO //glGetSynciv ((GLsync)(uintptr_t)sync, pname, (GLint*)(uintptr_t)param); } float lime_gl_get_tex_parameterf (int target, int pname) { GLfloat params = 0; glGetTexParameterfv (target, pname, ¶ms); return params; } HL_PRIM float HL_NAME(hl_gl_get_tex_parameterf) (int target, int pname) { GLfloat params = 0; glGetTexParameterfv (target, pname, ¶ms); return params; } void lime_gl_get_tex_parameterfv (int target, int pname, double params) { glGetTexParameterfv (target, pname, (GLfloat*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_tex_parameterfv) (int target, int pname, double params) { glGetTexParameterfv (target, pname, (GLfloat*)(uintptr_t)params); } int lime_gl_get_tex_parameteri (int target, int pname) { GLint params = 0; glGetTexParameteriv (target, pname, ¶ms); return params; } HL_PRIM int HL_NAME(hl_gl_get_tex_parameteri) (int target, int pname) { GLint params = 0; glGetTexParameteriv (target, pname, ¶ms); return params; } void lime_gl_get_tex_parameteriv (int target, int pname, double params) { glGetTexParameteriv (target, pname, (GLint*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_tex_parameteriv) (int target, int pname, double params) { glGetTexParameteriv (target, pname, (GLint*)(uintptr_t)params); } value lime_gl_get_transform_feedback_varying (int program, int index) { #ifdef LIME_GLES3_API value result = alloc_empty_object (); GLint maxLength = 0; glGetProgramiv (program, GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH, &maxLength); GLsizei outLen = 0; GLsizei size = 0; GLenum type = 0; std::string buffer (maxLength, 0); glGetTransformFeedbackVarying (program, index, maxLength, &outLen, &size, &type, &buffer[0]); buffer.resize (outLen); alloc_field (result, val_id ("size"), alloc_int (size)); alloc_field (result, val_id ("type"), alloc_int (type)); alloc_field (result, val_id ("name"), alloc_string (buffer.c_str ())); return result; #else return alloc_null (); #endif } HL_PRIM vdynamic* HL_NAME(hl_gl_get_transform_feedback_varying) (int program, int index) { #ifdef LIME_GLES3_API GLint maxLength = 0; glGetProgramiv (program, GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH, &maxLength); GLsizei outLen = 0; GLsizei size = 0; GLenum type = 0; char* buffer = (char*)malloc (maxLength); glGetTransformFeedbackVarying (program, index, maxLength, &outLen, &size, &type, buffer); char* _buffer = (char*)malloc (outLen + 1); memcpy (_buffer, &buffer, outLen); _buffer[outLen] = '\0'; const int id_size = hl_hash_utf8 ("size"); const int id_type = hl_hash_utf8 ("type"); const int id_name = hl_hash_utf8 ("name"); vdynamic *result = (vdynamic*)hl_alloc_dynobj(); hl_dyn_seti (result, id_size, &hlt_i32, size); hl_dyn_seti (result, id_type, &hlt_i32, type); hl_dyn_setp (result, id_name, &hlt_bytes, _buffer); return result; #else return NULL; #endif } float lime_gl_get_uniformf (int program, int location) { GLfloat params = 0; glGetUniformfv (program, location, ¶ms); return params; } HL_PRIM float HL_NAME(hl_gl_get_uniformf) (int program, int location) { GLfloat params = 0; glGetUniformfv (program, location, ¶ms); return params; } void lime_gl_get_uniformfv (int program, int location, double params) { glGetUniformfv (program, location, (GLfloat*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_uniformfv) (int program, int location, double params) { glGetUniformfv (program, location, (GLfloat*)(uintptr_t)params); } int lime_gl_get_uniformi (int program, int location) { GLint params = 0; glGetUniformiv (program, location, ¶ms); return params; } HL_PRIM int HL_NAME(hl_gl_get_uniformi) (int program, int location) { GLint params = 0; glGetUniformiv (program, location, ¶ms); return params; } void lime_gl_get_uniformiv (int program, int location, double params) { glGetUniformiv (program, location, (GLint*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_uniformiv) (int program, int location, double params) { glGetUniformiv (program, location, (GLint*)(uintptr_t)params); } int lime_gl_get_uniformui (int program, int location) { GLuint params = 0; #ifdef LIME_GLES3_API glGetUniformuiv (program, location, ¶ms); #endif return params; } HL_PRIM int HL_NAME(hl_gl_get_uniformui) (int program, int location) { GLuint params = 0; #ifdef LIME_GLES3_API glGetUniformuiv (program, location, ¶ms); #endif return params; } void lime_gl_get_uniformuiv (int program, int location, double params) { #ifdef LIME_GLES3_API glGetUniformuiv (program, location, (GLuint*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_uniformuiv) (int program, int location, double params) { #ifdef LIME_GLES3_API glGetUniformuiv (program, location, (GLuint*)(uintptr_t)params); #endif } int lime_gl_get_uniform_block_index (int program, HxString uniformBlockName) { #ifdef LIME_GLES3_API return glGetUniformBlockIndex (program, uniformBlockName.__s); #else return 0; #endif } HL_PRIM int HL_NAME(hl_gl_get_uniform_block_index) (int program, hl_vstring* uniformBlockName) { #ifdef LIME_GLES3_API return glGetUniformBlockIndex (program, uniformBlockName ? hl_to_utf8 (uniformBlockName->bytes) : NULL); #else return 0; #endif } int lime_gl_get_uniform_location (int program, HxString name) { return glGetUniformLocation (program, name.__s); } HL_PRIM int HL_NAME(hl_gl_get_uniform_location) (int program, hl_vstring* name) { return glGetUniformLocation (program, name ? hl_to_utf8 (name->bytes) : NULL); } float lime_gl_get_vertex_attribf (int index, int pname) { GLfloat params = 0; glGetVertexAttribfv (index, pname, ¶ms); return params; } HL_PRIM float HL_NAME(hl_gl_get_vertex_attribf) (int index, int pname) { GLfloat params = 0; glGetVertexAttribfv (index, pname, ¶ms); return params; } void lime_gl_get_vertex_attribfv (int index, int pname, double params) { glGetVertexAttribfv (index, pname, (GLfloat*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_vertex_attribfv) (int index, int pname, double params) { glGetVertexAttribfv (index, pname, (GLfloat*)(uintptr_t)params); } int lime_gl_get_vertex_attribi (int index, int pname) { GLint params = 0; glGetVertexAttribiv (index, pname, ¶ms); return params; } HL_PRIM int HL_NAME(hl_gl_get_vertex_attribi) (int index, int pname) { GLint params = 0; glGetVertexAttribiv (index, pname, ¶ms); return params; } void lime_gl_get_vertex_attribiv (int index, int pname, double params) { glGetVertexAttribiv (index, pname, (GLint*)(uintptr_t)params); } HL_PRIM void HL_NAME(hl_gl_get_vertex_attribiv) (int index, int pname, double params) { glGetVertexAttribiv (index, pname, (GLint*)(uintptr_t)params); } int lime_gl_get_vertex_attribii (int index, int pname) { GLint params = 0; #ifdef LIME_GLES3_API glGetVertexAttribIiv (index, pname, ¶ms); #endif return params; } HL_PRIM int HL_NAME(hl_gl_get_vertex_attribii) (int index, int pname) { GLint params = 0; #ifdef LIME_GLES3_API glGetVertexAttribIiv (index, pname, ¶ms); #endif return params; } void lime_gl_get_vertex_attribiiv (int index, int pname, double params) { #ifdef LIME_GLES3_API glGetVertexAttribIiv (index, pname, (GLint*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_vertex_attribiiv) (int index, int pname, double params) { #ifdef LIME_GLES3_API glGetVertexAttribIiv (index, pname, (GLint*)(uintptr_t)params); #endif } int lime_gl_get_vertex_attribiui (int index, int pname) { GLuint params = 0; #ifdef LIME_GLES3_API glGetVertexAttribIuiv (index, pname, ¶ms); #endif return params; } HL_PRIM int HL_NAME(hl_gl_get_vertex_attribiui) (int index, int pname) { GLuint params = 0; #ifdef LIME_GLES3_API glGetVertexAttribIuiv (index, pname, ¶ms); #endif return params; } void lime_gl_get_vertex_attribiuiv (int index, int pname, double params) { #ifdef LIME_GLES3_API glGetVertexAttribIuiv (index, pname, (GLuint*)(uintptr_t)params); #endif } HL_PRIM void HL_NAME(hl_gl_get_vertex_attribiuiv) (int index, int pname, double params) { #ifdef LIME_GLES3_API glGetVertexAttribIuiv (index, pname, (GLuint*)(uintptr_t)params); #endif } double lime_gl_get_vertex_attrib_pointerv (int index, int pname) { uintptr_t result = 0; glGetVertexAttribPointerv (index, pname, (void**)result); return (double)result; } HL_PRIM double HL_NAME(hl_gl_get_vertex_attrib_pointerv) (int index, int pname) { uintptr_t result = 0; glGetVertexAttribPointerv (index, pname, (void**)result); return (double)result; } void lime_gl_hint (int target, int mode) { glHint (target, mode); } HL_PRIM void HL_NAME(hl_gl_hint) (int target, int mode) { glHint (target, mode); } void lime_gl_invalidate_framebuffer (int target, value attachments) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glInvalidateFramebuffer) { GLint size = val_array_size (attachments); GLenum *_attachments = (GLenum*)alloca (size * sizeof(GLenum)); for (int i = 0; i < size; i++) { _attachments[i] = val_int (val_array_i (attachments, i)); } glInvalidateFramebuffer (target, size, _attachments); } #endif } HL_PRIM void HL_NAME(hl_gl_invalidate_framebuffer) (int target, varray* attachments) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glInvalidateFramebuffer) { GLint size = attachments->size; glInvalidateFramebuffer (target, size, (GLenum*)hl_aptr (attachments, int)); } #endif } void lime_gl_invalidate_sub_framebuffer (int target, value attachments, int x, int y, int width, int height) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glInvalidateSubFramebuffer) { GLint size = val_array_size (attachments); GLenum *_attachments = (GLenum*)alloca (size * sizeof(GLenum)); for (int i = 0; i < size; i++) { _attachments[i] = val_int (val_array_i (attachments, i)); } glInvalidateSubFramebuffer (target, size, _attachments, x, y, width, height); } #endif } HL_PRIM void HL_NAME(hl_gl_invalidate_sub_framebuffer) (int target, varray* attachments, int x, int y, int width, int height) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glInvalidateSubFramebuffer) { GLint size = attachments->size; glInvalidateSubFramebuffer (target, size, (GLenum*)hl_aptr (attachments, int), x, y, width, height); } #endif } bool lime_gl_is_buffer (int handle) { return glIsBuffer (handle); } HL_PRIM bool HL_NAME(hl_gl_is_buffer) (int handle) { return glIsBuffer (handle); } bool lime_gl_is_enabled (int cap) { return glIsEnabled (cap); } HL_PRIM bool HL_NAME(hl_gl_is_enabled) (int cap) { return glIsEnabled (cap); } bool lime_gl_is_framebuffer (int handle) { return glIsFramebuffer (handle); } HL_PRIM bool HL_NAME(hl_gl_is_framebuffer) (int handle) { return glIsFramebuffer (handle); } bool lime_gl_is_program (int handle) { return glIsProgram (handle); } HL_PRIM bool HL_NAME(hl_gl_is_program) (int handle) { return glIsProgram (handle); } bool lime_gl_is_query (int handle) { #ifdef LIME_GLES3_API return glIsQuery (handle); #else return false; #endif } HL_PRIM bool HL_NAME(hl_gl_is_query) (int handle) { #ifdef LIME_GLES3_API return glIsQuery (handle); #else return false; #endif } bool lime_gl_is_renderbuffer (int handle) { return glIsRenderbuffer (handle); } HL_PRIM bool HL_NAME(hl_gl_is_renderbuffer) (int handle) { return glIsRenderbuffer (handle); } bool lime_gl_is_sampler (int handle) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) return glIsSampler ? glIsSampler (handle) : false; #else return false; #endif } HL_PRIM bool HL_NAME(hl_gl_is_sampler) (int handle) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) return glIsSampler ? glIsSampler (handle) : false; #else return false; #endif } bool lime_gl_is_shader (int handle) { return glIsShader (handle); } HL_PRIM bool HL_NAME(hl_gl_is_shader) (int handle) { return glIsShader (handle); } bool lime_gl_is_sync (value handle) { #ifdef LIME_GLES3_API if (val_is_null (handle)) return false; return glIsSync ((GLsync)val_data (handle)); #else return false; #endif } HL_PRIM bool HL_NAME(hl_gl_is_sync) (HL_CFFIPointer* handle) { #ifdef LIME_GLES3_API if (!handle) return false; return glIsSync ((GLsync)handle->ptr); #else return false; #endif } bool lime_gl_is_texture (int handle) { return glIsTexture (handle); } HL_PRIM bool HL_NAME(hl_gl_is_texture) (int handle) { return glIsTexture (handle); } bool lime_gl_is_transform_feedback (int handle) { #ifdef LIME_GLES3_API return glIsTransformFeedback (handle); #else return false; #endif } HL_PRIM bool HL_NAME(hl_gl_is_transform_feedback) (int handle) { #ifdef LIME_GLES3_API return glIsTransformFeedback (handle); #else return false; #endif } bool lime_gl_is_vertex_array (int handle) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) return glIsVertexArray ? glIsVertexArray (handle) : false; #else return false; #endif } HL_PRIM bool HL_NAME(hl_gl_is_vertex_array) (int handle) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) return glIsVertexArray ? glIsVertexArray (handle) : false; #else return false; #endif } void lime_gl_line_width (float width) { glLineWidth (width); } HL_PRIM void HL_NAME(hl_gl_line_width) (float width) { glLineWidth (width); } void lime_gl_link_program (int program) { glLinkProgram (program); } HL_PRIM void HL_NAME(hl_gl_link_program) (int program) { glLinkProgram (program); } double lime_gl_map_buffer_range (int target, double offset, int length, int access) { #ifdef LIME_GLES3_API uintptr_t result = (uintptr_t)glMapBufferRange (target, (GLintptr)(uintptr_t)offset, length, access); return (double)result; #else return 0; #endif } HL_PRIM double HL_NAME(hl_gl_map_buffer_range) (int target, double offset, int length, int access) { #ifdef LIME_GLES3_API uintptr_t result = (uintptr_t)glMapBufferRange (target, (GLintptr)(uintptr_t)offset, length, access); return (double)result; #else return 0; #endif } void lime_gl_object_deregister (value object) { if (glObjectIDs.find (object) != glObjectIDs.end ()) { GLuint id = glObjectIDs[object]; GLObjectType type = glObjectTypes[object]; glObjects[type].erase (id); glObjectTypes.erase (object); glObjectIDs.erase (object); } if (glObjectPtrs.find (object) != glObjectPtrs.end ()) { value handle = (value)glObjectPtrs[object]; val_gc (handle, 0); glObjectPtrs.erase (object); } } HL_PRIM void HL_NAME(hl_gl_object_deregister) (void* object) { if (glObjectIDs.find (object) != glObjectIDs.end ()) { GLuint id = glObjectIDs[object]; GLObjectType type = glObjectTypes[object]; glObjects[type].erase (id); glObjectTypes.erase (object); glObjectIDs.erase (object); } if (glObjectPtrs.find (object) != glObjectPtrs.end ()) { HL_CFFIPointer* handle = (HL_CFFIPointer*)glObjectPtrs[object]; handle->finalizer = NULL; //delete handle; glObjectPtrs.erase (object); } } value lime_gl_object_from_id (int id, int type) { GLObjectType _type = (GLObjectType)type; if (glObjects[_type].find (id) != glObjects[_type].end ()) { return (value)glObjects[_type][id]; } else { return alloc_null (); } } HL_PRIM void* HL_NAME(hl_gl_object_from_id) (int id, int type) { GLObjectType _type = (GLObjectType)type; if (glObjects[_type].find (id) != glObjects[_type].end ()) { return glObjects[_type][id]; } else { return NULL; } } value lime_gl_object_register (int id, int type, value object) { GLObjectType _type = (GLObjectType)type; value handle = CFFIPointer (object, gc_gl_object); //if (glObjects[_type].find (id) != glObjects[_type].end ()) { // //value otherObject = glObjects[_type][id]; //if (otherObject == object) return; // //glObjectTypes.erase (otherObject); //glObjectIDs.erase (object); // //val_gc (otherObject, 0); // //} glObjectTypes[object] = (GLObjectType)type; glObjectIDs[object] = id; glObjects[_type][id] = object; glObjectPtrs[object] = handle; return handle; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_gl_object_register) (int id, int type, void* object) { GLObjectType _type = (GLObjectType)type; HL_CFFIPointer* handle = HLCFFIPointer ((vobj*)object, (hl_finalizer)hl_gc_gl_object); //if (glObjects[_type].find (id) != glObjects[_type].end ()) { // //value otherObject = glObjects[_type][id]; //if (otherObject == object) return; // //glObjectTypes.erase (otherObject); //glObjectIDs.erase (object); // //val_gc (otherObject, 0); // //} glObjectTypes[object] = (GLObjectType)type; glObjectIDs[object] = id; glObjects[_type][id] = object; glObjectPtrs[object] = handle; return handle; } void lime_gl_pause_transform_feedback () { #ifdef LIME_GLES3_API glPauseTransformFeedback (); #endif } HL_PRIM void HL_NAME(hl_gl_pause_transform_feedback) () { #ifdef LIME_GLES3_API glPauseTransformFeedback (); #endif } void lime_gl_pixel_storei (int pname, int param) { glPixelStorei (pname, param); } HL_PRIM void HL_NAME(hl_gl_pixel_storei) (int pname, int param) { glPixelStorei (pname, param); } void lime_gl_polygon_offset (float factor, float units) { glPolygonOffset (factor, units); } HL_PRIM void HL_NAME(hl_gl_polygon_offset) (float factor, float units) { glPolygonOffset (factor, units); } void lime_gl_program_binary (int program, int binaryFormat, double binary, int length) { #ifdef LIME_GLES3_API glProgramBinary (program, binaryFormat, (void*)(uintptr_t)binary, length); #endif } HL_PRIM void HL_NAME(hl_gl_program_binary) (int program, int binaryFormat, double binary, int length) { #ifdef LIME_GLES3_API glProgramBinary (program, binaryFormat, (void*)(uintptr_t)binary, length); #endif } void lime_gl_program_parameteri (int program, int pname, int value) { #ifdef LIME_GLES3_API glProgramParameteri (program, pname, value); #endif } HL_PRIM void HL_NAME(hl_gl_program_parameteri) (int program, int pname, int value) { #ifdef LIME_GLES3_API glProgramParameteri (program, pname, value); #endif } void lime_gl_read_buffer (int src) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glReadBuffer) { glReadBuffer (src); } #endif } HL_PRIM void HL_NAME(hl_gl_read_buffer) (int src) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glReadBuffer) { glReadBuffer (src); } #endif } void lime_gl_read_pixels (int x, int y, int width, int height, int format, int type, double pixels) { glReadPixels (x, y, width, height, format, type, (void*)(uintptr_t)pixels); } HL_PRIM void HL_NAME(hl_gl_read_pixels) (int x, int y, int width, int height, int format, int type, double pixels) { glReadPixels (x, y, width, height, format, type, (void*)(uintptr_t)pixels); } void lime_gl_release_shader_compiler () { #ifdef LIME_GLES3_API glReleaseShaderCompiler (); #endif } HL_PRIM void HL_NAME(hl_gl_release_shader_compiler) () { #ifdef LIME_GLES3_API glReleaseShaderCompiler (); #endif } void lime_gl_renderbuffer_storage (int target, int internalformat, int width, int height) { glRenderbufferStorage (target, internalformat, width, height); } HL_PRIM void HL_NAME(hl_gl_renderbuffer_storage) (int target, int internalformat, int width, int height) { glRenderbufferStorage (target, internalformat, width, height); } void lime_gl_renderbuffer_storage_multisample (int target, int samples, int internalformat, int width, int height) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glRenderbufferStorageMultisample) { glRenderbufferStorageMultisample (target, samples, internalformat, width, height); } #endif } HL_PRIM void HL_NAME(hl_gl_renderbuffer_storage_multisample) (int target, int samples, int internalformat, int width, int height) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glRenderbufferStorageMultisample) { glRenderbufferStorageMultisample (target, samples, internalformat, width, height); } #endif } void lime_gl_resume_transform_feedback () { #ifdef LIME_GLES3_API glResumeTransformFeedback (); #endif } HL_PRIM void HL_NAME(hl_gl_resume_transform_feedback) () { #ifdef LIME_GLES3_API glResumeTransformFeedback (); #endif } void lime_gl_sample_coverage (float val, bool invert) { #ifdef LIME_GLES3_API glSampleCoverage (val, invert); #endif } HL_PRIM void HL_NAME(hl_gl_sample_coverage) (float val, bool invert) { #ifdef LIME_GLES3_API glSampleCoverage (val, invert); #endif } void lime_gl_sampler_parameterf (int sampler, int pname, float param) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glSamplerParameterf) { glSamplerParameterf (sampler, pname, param); } #endif } HL_PRIM void HL_NAME(hl_gl_sampler_parameterf) (int sampler, int pname, float param) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glSamplerParameterf) { glSamplerParameterf (sampler, pname, param); } #endif } void lime_gl_sampler_parameteri (int sampler, int pname, int param) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glSamplerParameteri) { glSamplerParameteri (sampler, pname, param); } #endif } HL_PRIM void HL_NAME(hl_gl_sampler_parameteri) (int sampler, int pname, int param) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glSamplerParameteri) { glSamplerParameteri (sampler, pname, param); } #endif } void lime_gl_scissor (int x, int y, int width, int height) { glScissor (x, y, width, height); } HL_PRIM void HL_NAME(hl_gl_scissor) (int x, int y, int width, int height) { glScissor (x, y, width, height); } void lime_gl_shader_binary (value shaders, int binaryformat, double binary, int length) { #ifdef LIME_GLES3_API GLsizei size = val_array_size (shaders); GLenum *_shaders = (GLenum*)alloca (size * sizeof(GLenum)); for (int i = 0; i < size; i++) { _shaders[i] = val_int (val_array_i (shaders, i)); } glShaderBinary (size, _shaders, binaryformat, (void*)(uintptr_t)binary, length); #endif } HL_PRIM void HL_NAME(hl_gl_shader_binary) (varray* shaders, int binaryformat, double binary, int length) { #ifdef LIME_GLES3_API GLsizei size = shaders->size; glShaderBinary (size, (GLenum*)hl_aptr (shaders, int), binaryformat, (void*)(uintptr_t)binary, length); #endif } void lime_gl_shader_source (int handle, HxString source) { glShaderSource (handle, 1, &source.__s, 0); } HL_PRIM void HL_NAME(hl_gl_shader_source) (int handle, hl_vstring* source) { const char* _source = source ? hl_to_utf8 (source->bytes) : NULL; glShaderSource (handle, 1, (const char**)&_source, 0); } void lime_gl_stencil_func (int func, int ref, int mask) { glStencilFunc (func, ref, mask); } HL_PRIM void HL_NAME(hl_gl_stencil_func) (int func, int ref, int mask) { glStencilFunc (func, ref, mask); } void lime_gl_stencil_func_separate (int face, int func, int ref, int mask) { glStencilFuncSeparate (face, func, ref, mask); } HL_PRIM void HL_NAME(hl_gl_stencil_func_separate) (int face, int func, int ref, int mask) { glStencilFuncSeparate (face, func, ref, mask); } void lime_gl_stencil_mask (int mask) { glStencilMask (mask); } HL_PRIM void HL_NAME(hl_gl_stencil_mask) (int mask) { glStencilMask (mask); } void lime_gl_stencil_mask_separate (int face, int mask) { glStencilMaskSeparate (face, mask); } HL_PRIM void HL_NAME(hl_gl_stencil_mask_separate) (int face, int mask) { glStencilMaskSeparate (face, mask); } void lime_gl_stencil_op (int sfail, int dpfail, int dppass) { glStencilOp (sfail, dpfail, dppass); } HL_PRIM void HL_NAME(hl_gl_stencil_op) (int sfail, int dpfail, int dppass) { glStencilOp (sfail, dpfail, dppass); } void lime_gl_stencil_op_separate (int face, int sfail, int dpfail, int dppass) { glStencilOpSeparate (face, sfail, dpfail, dppass); } HL_PRIM void HL_NAME(hl_gl_stencil_op_separate) (int face, int sfail, int dpfail, int dppass) { glStencilOpSeparate (face, sfail, dpfail, dppass); } void lime_gl_tex_image_2d (int target, int level, int internalformat, int width, int height, int border, int format, int type, double data) { glTexImage2D (target, level, internalformat, width, height, border, format, type, (void*)(uintptr_t)data); } HL_PRIM void HL_NAME(hl_gl_tex_image_2d) (int target, int level, int internalformat, int width, int height, int border, int format, int type, double data) { glTexImage2D (target, level, internalformat, width, height, border, format, type, (void*)(uintptr_t)data); } void lime_gl_tex_image_3d (int target, int level, int internalformat, int width, int height, int depth, int border, int format, int type, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glTexImage3D) { glTexImage3D (target, level, internalformat, width, height, depth, border, format, type, (void*)(uintptr_t)data); } #endif } HL_PRIM void HL_NAME(hl_gl_tex_image_3d) (int target, int level, int internalformat, int width, int height, int depth, int border, int format, int type, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glTexImage3D) { glTexImage3D (target, level, internalformat, width, height, depth, border, format, type, (void*)(uintptr_t)data); } #endif } void lime_gl_tex_parameterf (int target, int pname, float param) { glTexParameterf (target, pname, param); } HL_PRIM void HL_NAME(hl_gl_tex_parameterf) (int target, int pname, float param) { glTexParameterf (target, pname, param); } void lime_gl_tex_parameteri (int target, int pname, int param) { glTexParameterf (target, pname, param); } HL_PRIM void HL_NAME(hl_gl_tex_parameteri) (int target, int pname, int param) { glTexParameterf (target, pname, param); } void lime_gl_tex_storage_2d (int target, int level, int internalformat, int width, int height) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glTexStorage2D) { glTexStorage2D (target, level, internalformat, width, height); } #endif } HL_PRIM void HL_NAME(hl_gl_tex_storage_2d) (int target, int level, int internalformat, int width, int height) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glTexStorage2D) { glTexStorage2D (target, level, internalformat, width, height); } #endif } void lime_gl_tex_storage_3d (int target, int level, int internalformat, int width, int height, int depth) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glTexStorage3D) { glTexStorage3D (target, level, internalformat, width, height, depth); } #endif } HL_PRIM void HL_NAME(hl_gl_tex_storage_3d) (int target, int level, int internalformat, int width, int height, int depth) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glTexStorage3D) { glTexStorage3D (target, level, internalformat, width, height, depth); } #endif } void lime_gl_tex_sub_image_2d (int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, double data) { glTexSubImage2D (target, level, xoffset, yoffset, width, height, format, type, (void*)(uintptr_t)data); } HL_PRIM void HL_NAME(hl_gl_tex_sub_image_2d) (int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, double data) { glTexSubImage2D (target, level, xoffset, yoffset, width, height, format, type, (void*)(uintptr_t)data); } void lime_gl_tex_sub_image_3d (int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int type, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glTexSubImage3D) { glTexSubImage3D (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (void*)(uintptr_t)data); } #endif } HL_PRIM void HL_NAME(hl_gl_tex_sub_image_3d) (int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int type, double data) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glTexSubImage3D) { glTexSubImage3D (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, (void*)(uintptr_t)data); } #endif } void lime_gl_transform_feedback_varyings (int program, value varyings, int bufferMode) { #ifdef LIME_GLES3_API GLsizei size = val_array_size (varyings); const char **_varyings = (const char**)alloca (size * sizeof(GLenum)); for (int i = 0; i < size; i++) { _varyings[i] = val_string (val_array_i (varyings, i)); } glTransformFeedbackVaryings (program, size, _varyings, bufferMode); #endif } HL_PRIM void HL_NAME(hl_gl_transform_feedback_varyings) (int program, varray* varyings, int bufferMode) { #ifdef LIME_GLES3_API GLsizei size = varyings->size; glTransformFeedbackVaryings (program, size, (const char**)hl_aptr (varyings, int), bufferMode); #endif } void lime_gl_uniform1f (int location, float v0) { glUniform1f (location, v0); } HL_PRIM void HL_NAME(hl_gl_uniform1f) (int location, float v0) { glUniform1f (location, v0); } void lime_gl_uniform1fv (int location, int count, double _value) { glUniform1fv (location, count, (GLfloat*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform1fv) (int location, int count, double _value) { glUniform1fv (location, count, (GLfloat*)(uintptr_t)_value); } void lime_gl_uniform1i (int location, int v0) { glUniform1i (location, v0); } HL_PRIM void HL_NAME(hl_gl_uniform1i) (int location, int v0) { glUniform1i (location, v0); } void lime_gl_uniform1iv (int location, int count, double _value) { glUniform1iv (location, count, (GLint*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform1iv) (int location, int count, double _value) { glUniform1iv (location, count, (GLint*)(uintptr_t)_value); } void lime_gl_uniform1ui (int location, int v0) { #ifdef LIME_GLES3_API glUniform1ui (location, v0); #endif } HL_PRIM void HL_NAME(hl_gl_uniform1ui) (int location, int v0) { #ifdef LIME_GLES3_API glUniform1ui (location, v0); #endif } void lime_gl_uniform1uiv (int location, int count, double _value) { #ifdef LIME_GLES3_API glUniform1uiv (location, count, (GLuint*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform1uiv) (int location, int count, double _value) { #ifdef LIME_GLES3_API glUniform1uiv (location, count, (GLuint*)(uintptr_t)_value); #endif } void lime_gl_uniform2f (int location, float v0, float v1) { glUniform2f (location, v0, v1); } HL_PRIM void HL_NAME(hl_gl_uniform2f) (int location, float v0, float v1) { glUniform2f (location, v0, v1); } void lime_gl_uniform2fv (int location, int count, double _value) { glUniform2fv (location, count, (GLfloat*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform2fv) (int location, int count, double _value) { glUniform2fv (location, count, (GLfloat*)(uintptr_t)_value); } void lime_gl_uniform2i (int location, int v0, int v1) { glUniform2i (location, v0, v1); } HL_PRIM void HL_NAME(hl_gl_uniform2i) (int location, int v0, int v1) { glUniform2i (location, v0, v1); } void lime_gl_uniform2iv (int location, int count, double _value) { glUniform2iv (location, count, (GLint*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform2iv) (int location, int count, double _value) { glUniform2iv (location, count, (GLint*)(uintptr_t)_value); } void lime_gl_uniform2ui (int location, int v0, int v1) { #ifdef LIME_GLES3_API glUniform2ui (location, v0, v1); #endif } HL_PRIM void HL_NAME(hl_gl_uniform2ui) (int location, int v0, int v1) { #ifdef LIME_GLES3_API glUniform2ui (location, v0, v1); #endif } void lime_gl_uniform2uiv (int location, int count, double _value) { #ifdef LIME_GLES3_API glUniform2uiv (location, count, (GLuint*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform2uiv) (int location, int count, double _value) { #ifdef LIME_GLES3_API glUniform2uiv (location, count, (GLuint*)(uintptr_t)_value); #endif } void lime_gl_uniform3f (int location, float v0, float v1, float v2) { glUniform3f (location, v0, v1, v2); } HL_PRIM void HL_NAME(hl_gl_uniform3f) (int location, float v0, float v1, float v2) { glUniform3f (location, v0, v1, v2); } void lime_gl_uniform3fv (int location, int count, double _value) { glUniform3fv (location, count, (GLfloat*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform3fv) (int location, int count, double _value) { glUniform3fv (location, count, (GLfloat*)(uintptr_t)_value); } void lime_gl_uniform3i (int location, int v0, int v1, int v2) { glUniform3i (location, v0, v1, v2); } HL_PRIM void HL_NAME(hl_gl_uniform3i) (int location, int v0, int v1, int v2) { glUniform3i (location, v0, v1, v2); } void lime_gl_uniform3iv (int location, int count, double _value) { glUniform3iv (location, count, (GLint*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform3iv) (int location, int count, double _value) { glUniform3iv (location, count, (GLint*)(uintptr_t)_value); } void lime_gl_uniform3ui (int location, int v0, int v1, int v2) { #ifdef LIME_GLES3_API glUniform3ui (location, v0, v1, v2); #endif } HL_PRIM void HL_NAME(hl_gl_uniform3ui) (int location, int v0, int v1, int v2) { #ifdef LIME_GLES3_API glUniform3ui (location, v0, v1, v2); #endif } void lime_gl_uniform3uiv (int location, int count, double _value) { #ifdef LIME_GLES3_API glUniform3uiv (location, count, (GLuint*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform3uiv) (int location, int count, double _value) { #ifdef LIME_GLES3_API glUniform3uiv (location, count, (GLuint*)(uintptr_t)_value); #endif } void lime_gl_uniform4f (int location, float v0, float v1, float v2, float v3) { glUniform4f (location, v0, v1, v2, v3); } HL_PRIM void HL_NAME(hl_gl_uniform4f) (int location, float v0, float v1, float v2, float v3) { glUniform4f (location, v0, v1, v2, v3); } void lime_gl_uniform4fv (int location, int count, double _value) { glUniform4fv (location, count, (GLfloat*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform4fv) (int location, int count, double _value) { glUniform4fv (location, count, (GLfloat*)(uintptr_t)_value); } void lime_gl_uniform4i (int location, int v0, int v1, int v2, int v3) { glUniform4i (location, v0, v1, v2, v3); } HL_PRIM void HL_NAME(hl_gl_uniform4i) (int location, int v0, int v1, int v2, int v3) { glUniform4i (location, v0, v1, v2, v3); } void lime_gl_uniform4iv (int location, int count, double _value) { glUniform4iv (location, count, (GLint*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform4iv) (int location, int count, double _value) { glUniform4iv (location, count, (GLint*)(uintptr_t)_value); } void lime_gl_uniform4ui (int location, int v0, int v1, int v2, int v3) { #ifdef LIME_GLES3_API glUniform4ui (location, v0, v1, v2, v3); #endif } HL_PRIM void HL_NAME(hl_gl_uniform4ui) (int location, int v0, int v1, int v2, int v3) { #ifdef LIME_GLES3_API glUniform4ui (location, v0, v1, v2, v3); #endif } void lime_gl_uniform4uiv (int location, int count, double _value) { #ifdef LIME_GLES3_API glUniform4uiv (location, count, (GLuint*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform4uiv) (int location, int count, double _value) { #ifdef LIME_GLES3_API glUniform4uiv (location, count, (GLuint*)(uintptr_t)_value); #endif } void lime_gl_uniform_block_binding (int program, int uniformBlockIndex, int uniformBlockBinding) { #ifdef LIME_GLES3_API glUniformBlockBinding (program, uniformBlockIndex, uniformBlockBinding); #endif } HL_PRIM void HL_NAME(hl_gl_uniform_block_binding) (int program, int uniformBlockIndex, int uniformBlockBinding) { #ifdef LIME_GLES3_API glUniformBlockBinding (program, uniformBlockIndex, uniformBlockBinding); #endif } void lime_gl_uniform_matrix2fv (int location, int count, bool transpose, double _value) { glUniformMatrix2fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform_matrix2fv) (int location, int count, bool transpose, double _value) { glUniformMatrix2fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); } void lime_gl_uniform_matrix2x3fv (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix2x3fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform_matrix2x3fv) (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix2x3fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } void lime_gl_uniform_matrix2x4fv (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix2x4fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform_matrix2x4fv) (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix2x4fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } void lime_gl_uniform_matrix3fv (int location, int count, bool transpose, double _value) { glUniformMatrix3fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform_matrix3fv) (int location, int count, bool transpose, double _value) { glUniformMatrix3fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); } void lime_gl_uniform_matrix3x2fv (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix3x2fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform_matrix3x2fv) (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix3x2fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } void lime_gl_uniform_matrix3x4fv (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix3x4fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform_matrix3x4fv) (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix3x4fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } void lime_gl_uniform_matrix4fv (int location, int count, bool transpose, double _value) { glUniformMatrix4fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); } HL_PRIM void HL_NAME(hl_gl_uniform_matrix4fv) (int location, int count, bool transpose, double _value) { glUniformMatrix4fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); } void lime_gl_uniform_matrix4x2fv (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix4x2fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform_matrix4x2fv) (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix4x2fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } void lime_gl_uniform_matrix4x3fv (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix4x3fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } HL_PRIM void HL_NAME(hl_gl_uniform_matrix4x3fv) (int location, int count, bool transpose, double _value) { #ifdef LIME_GLES3_API glUniformMatrix4x3fv (location, count, transpose, (GLfloat*)(uintptr_t)_value); #endif } bool lime_gl_unmap_buffer (int target) { #ifdef LIME_GLES3_API return glUnmapBuffer (target); #else return false; #endif } HL_PRIM bool HL_NAME(hl_gl_unmap_buffer) (int target) { #ifdef LIME_GLES3_API return glUnmapBuffer (target); #else return false; #endif } void lime_gl_use_program (int handle) { glUseProgram (handle); } HL_PRIM void HL_NAME(hl_gl_use_program) (int handle) { glUseProgram (handle); } void lime_gl_validate_program (int handle) { glValidateProgram (handle); } HL_PRIM void HL_NAME(hl_gl_validate_program) (int handle) { glValidateProgram (handle); } void lime_gl_vertex_attrib_divisor (int index, int divisor) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glVertexAttribDivisor) { glVertexAttribDivisor (index, divisor); } #endif } HL_PRIM void HL_NAME(hl_gl_vertex_attrib_divisor) (int index, int divisor) { #if defined (LIME_GLES3_API) || !defined (LIME_GLES) if (glVertexAttribDivisor) { glVertexAttribDivisor (index, divisor); } #endif } void lime_gl_vertex_attrib_ipointer (int index, int size, int type, int stride, double offset) { #ifdef LIME_GLES3_API glVertexAttribIPointer (index, size, type, stride, (void*)(uintptr_t)offset); #endif } HL_PRIM void HL_NAME(hl_gl_vertex_attrib_ipointer) (int index, int size, int type, int stride, double offset) { #ifdef LIME_GLES3_API glVertexAttribIPointer (index, size, type, stride, (void*)(uintptr_t)offset); #endif } void lime_gl_vertex_attrib_pointer (int index, int size, int type, bool normalized, int stride, double offset) { glVertexAttribPointer (index, size, type, normalized, stride, (void*)(uintptr_t)offset); } HL_PRIM void HL_NAME(hl_gl_vertex_attrib_pointer) (int index, int size, int type, bool normalized, int stride, double offset) { glVertexAttribPointer (index, size, type, normalized, stride, (void*)(uintptr_t)offset); } void lime_gl_vertex_attribi4i (int index, int v0, int v1, int v2, int v3) { #ifdef LIME_GLES3_API glVertexAttribI4i (index, v0, v1, v2, v3); #endif } HL_PRIM void HL_NAME(hl_gl_vertex_attribi4i) (int index, int v0, int v1, int v2, int v3) { #ifdef LIME_GLES3_API glVertexAttribI4i (index, v0, v1, v2, v3); #endif } void lime_gl_vertex_attribi4iv (int index, double v) { #ifdef LIME_GLES3_API glVertexAttribI4iv (index, (GLint*)(uintptr_t)v); #endif } HL_PRIM void HL_NAME(hl_gl_vertex_attribi4iv) (int index, double v) { #ifdef LIME_GLES3_API glVertexAttribI4iv (index, (GLint*)(uintptr_t)v); #endif } void lime_gl_vertex_attribi4ui (int index, int v0, int v1, int v2, int v3) { #ifdef LIME_GLES3_API glVertexAttribI4ui (index, v0, v1, v2, v3); #endif } HL_PRIM void HL_NAME(hl_gl_vertex_attribi4ui) (int index, int v0, int v1, int v2, int v3) { #ifdef LIME_GLES3_API glVertexAttribI4ui (index, v0, v1, v2, v3); #endif } void lime_gl_vertex_attribi4uiv (int index, double v) { #ifdef LIME_GLES3_API glVertexAttribI4uiv (index, (GLuint*)(uintptr_t)v); #endif } HL_PRIM void HL_NAME(hl_gl_vertex_attribi4uiv) (int index, double v) { #ifdef LIME_GLES3_API glVertexAttribI4uiv (index, (GLuint*)(uintptr_t)v); #endif } void lime_gl_vertex_attrib1f (int index, float v0) { glVertexAttrib1f (index, v0); } HL_PRIM void HL_NAME(hl_gl_vertex_attrib1f) (int index, float v0) { glVertexAttrib1f (index, v0); } void lime_gl_vertex_attrib1fv (int index, double v) { glVertexAttrib1fv (index, (GLfloat*)(uintptr_t)v); } HL_PRIM void HL_NAME(hl_gl_vertex_attrib1fv) (int index, double v) { glVertexAttrib1fv (index, (GLfloat*)(uintptr_t)v); } void lime_gl_vertex_attrib2f (int index, float v0, float v1) { glVertexAttrib2f (index, v0, v1); } HL_PRIM void HL_NAME(hl_gl_vertex_attrib2f) (int index, float v0, float v1) { glVertexAttrib2f (index, v0, v1); } void lime_gl_vertex_attrib2fv (int index, double v) { glVertexAttrib2fv (index, (GLfloat*)(uintptr_t)v); } HL_PRIM void HL_NAME(hl_gl_vertex_attrib2fv) (int index, double v) { glVertexAttrib2fv (index, (GLfloat*)(uintptr_t)v); } void lime_gl_vertex_attrib3f (int index, float v0, float v1, float v2) { glVertexAttrib3f (index, v0, v1, v2); } HL_PRIM void HL_NAME(hl_gl_vertex_attrib3f) (int index, float v0, float v1, float v2) { glVertexAttrib3f (index, v0, v1, v2); } void lime_gl_vertex_attrib3fv (int index, double v) { glVertexAttrib3fv (index, (GLfloat*)(uintptr_t)v); } HL_PRIM void HL_NAME(hl_gl_vertex_attrib3fv) (int index, double v) { glVertexAttrib3fv (index, (GLfloat*)(uintptr_t)v); } void lime_gl_vertex_attrib4f (int index, float v0, float v1, float v2, float v3) { glVertexAttrib4f (index, v0, v1, v2, v3); } HL_PRIM void HL_NAME(hl_gl_vertex_attrib4f) (int index, float v0, float v1, float v2, float v3) { glVertexAttrib4f (index, v0, v1, v2, v3); } void lime_gl_vertex_attrib4fv (int index, double v) { glVertexAttrib4fv (index, (GLfloat*)(uintptr_t)v); } HL_PRIM void HL_NAME(hl_gl_vertex_attrib4fv) (int index, double v) { glVertexAttrib4fv (index, (GLfloat*)(uintptr_t)v); } void lime_gl_viewport (int x, int y, int width, int height) { glViewport (x, y, width, height); } HL_PRIM void HL_NAME(hl_gl_viewport) (int x, int y, int width, int height) { glViewport (x, y, width, height); } void lime_gl_wait_sync (value sync, int flags, int timeoutA, int timeoutB) { #ifdef LIME_GLES3_API GLuint64 timeout = (GLuint64) timeoutA << 32 | timeoutB; glWaitSync ((GLsync)val_data (sync), flags, timeout); #endif } HL_PRIM void HL_NAME(hl_gl_wait_sync) (HL_CFFIPointer* sync, int flags, int timeoutA, int timeoutB) { #ifdef LIME_GLES3_API GLuint64 timeout = (GLuint64) timeoutA << 32 | timeoutB; glWaitSync ((GLsync)sync->ptr, flags, timeout); #endif } bool OpenGLBindings::Init () { static bool result = true; if (!initialized) { initialized = true; #ifdef HX_LINUX OpenGLBindings::handle = dlopen ("libGL.so.1", RTLD_NOW|RTLD_GLOBAL); if (!OpenGLBindings::handle) { OpenGLBindings::handle = dlopen ("libGL.so", RTLD_NOW|RTLD_GLOBAL); } if (!OpenGLBindings::handle) { result = false; return result; } #endif #ifdef NATIVE_TOOLKIT_SDL_ANGLE #ifdef HX_WINRT return true; #else OpenGLBindings::eglHandle = LoadLibraryW (L"libegl.dll"); if (!OpenGLBindings::eglHandle) { result = false; return result; } #endif #endif #ifdef NEED_EXTENSIONS #define GET_EXTENSION #include "OpenGLExtensions.h" #undef DEFINE_EXTENSION #endif } return result; } DEFINE_PRIME1v (lime_gl_active_texture); DEFINE_PRIME2v (lime_gl_attach_shader); DEFINE_PRIME2v (lime_gl_begin_query); DEFINE_PRIME1v (lime_gl_begin_transform_feedback); DEFINE_PRIME3v (lime_gl_bind_attrib_location); DEFINE_PRIME2v (lime_gl_bind_buffer); DEFINE_PRIME3v (lime_gl_bind_buffer_base); DEFINE_PRIME5v (lime_gl_bind_buffer_range); DEFINE_PRIME2v (lime_gl_bind_framebuffer); DEFINE_PRIME2v (lime_gl_bind_renderbuffer); DEFINE_PRIME2v (lime_gl_bind_sampler); DEFINE_PRIME2v (lime_gl_bind_texture); DEFINE_PRIME2v (lime_gl_bind_transform_feedback); DEFINE_PRIME1v (lime_gl_bind_vertex_array); DEFINE_PRIME4v (lime_gl_blend_color); DEFINE_PRIME1v (lime_gl_blend_equation); DEFINE_PRIME2v (lime_gl_blend_equation_separate); DEFINE_PRIME2v (lime_gl_blend_func); DEFINE_PRIME4v (lime_gl_blend_func_separate); DEFINE_PRIME10v (lime_gl_blit_framebuffer); DEFINE_PRIME4v (lime_gl_buffer_data); DEFINE_PRIME4v (lime_gl_buffer_sub_data); DEFINE_PRIME1 (lime_gl_check_framebuffer_status); DEFINE_PRIME1v (lime_gl_clear); DEFINE_PRIME4v (lime_gl_clear_bufferfi); DEFINE_PRIME3v (lime_gl_clear_bufferfv); DEFINE_PRIME3v (lime_gl_clear_bufferiv); DEFINE_PRIME3v (lime_gl_clear_bufferuiv); DEFINE_PRIME4v (lime_gl_clear_color); DEFINE_PRIME1v (lime_gl_clear_depthf); DEFINE_PRIME1v (lime_gl_clear_stencil); DEFINE_PRIME4 (lime_gl_client_wait_sync); DEFINE_PRIME4v (lime_gl_color_mask); DEFINE_PRIME1v (lime_gl_compile_shader); DEFINE_PRIME8v (lime_gl_compressed_tex_image_2d); DEFINE_PRIME9v (lime_gl_compressed_tex_image_3d); DEFINE_PRIME9v (lime_gl_compressed_tex_sub_image_2d); DEFINE_PRIME11v (lime_gl_compressed_tex_sub_image_3d); DEFINE_PRIME5v (lime_gl_copy_buffer_sub_data); DEFINE_PRIME8v (lime_gl_copy_tex_image_2d); DEFINE_PRIME8v (lime_gl_copy_tex_sub_image_2d); DEFINE_PRIME9v (lime_gl_copy_tex_sub_image_3d); DEFINE_PRIME0 (lime_gl_create_buffer); DEFINE_PRIME0 (lime_gl_create_framebuffer); DEFINE_PRIME0 (lime_gl_create_program); DEFINE_PRIME0 (lime_gl_create_query); DEFINE_PRIME0 (lime_gl_create_renderbuffer); DEFINE_PRIME0 (lime_gl_create_sampler); DEFINE_PRIME1 (lime_gl_create_shader); DEFINE_PRIME0 (lime_gl_create_texture); DEFINE_PRIME0 (lime_gl_create_transform_feedback); DEFINE_PRIME0 (lime_gl_create_vertex_array); DEFINE_PRIME1v (lime_gl_cull_face); DEFINE_PRIME1v (lime_gl_delete_buffer); DEFINE_PRIME1v (lime_gl_delete_framebuffer); DEFINE_PRIME1v (lime_gl_delete_program); DEFINE_PRIME1v (lime_gl_delete_query); DEFINE_PRIME1v (lime_gl_delete_renderbuffer); DEFINE_PRIME1v (lime_gl_delete_sampler); DEFINE_PRIME1v (lime_gl_delete_shader); DEFINE_PRIME1v (lime_gl_delete_sync); DEFINE_PRIME1v (lime_gl_delete_texture); DEFINE_PRIME1v (lime_gl_delete_transform_feedback); DEFINE_PRIME1v (lime_gl_delete_vertex_array); DEFINE_PRIME1v (lime_gl_depth_func); DEFINE_PRIME1v (lime_gl_depth_mask); DEFINE_PRIME2v (lime_gl_depth_rangef); DEFINE_PRIME2v (lime_gl_detach_shader); DEFINE_PRIME1v (lime_gl_disable); DEFINE_PRIME1v (lime_gl_disable_vertex_attrib_array); DEFINE_PRIME3v (lime_gl_draw_arrays); DEFINE_PRIME4v (lime_gl_draw_arrays_instanced); DEFINE_PRIME1v (lime_gl_draw_buffers); DEFINE_PRIME4v (lime_gl_draw_elements); DEFINE_PRIME5v (lime_gl_draw_elements_instanced); DEFINE_PRIME6v (lime_gl_draw_range_elements); DEFINE_PRIME1v (lime_gl_enable); DEFINE_PRIME1v (lime_gl_enable_vertex_attrib_array); DEFINE_PRIME1v (lime_gl_end_query); DEFINE_PRIME0v (lime_gl_end_transform_feedback); DEFINE_PRIME2 (lime_gl_fence_sync); DEFINE_PRIME0v (lime_gl_finish); DEFINE_PRIME0v (lime_gl_flush); DEFINE_PRIME4v (lime_gl_framebuffer_renderbuffer); DEFINE_PRIME5v (lime_gl_framebuffer_texture_layer); DEFINE_PRIME5v (lime_gl_framebuffer_texture2D); DEFINE_PRIME1v (lime_gl_front_face); DEFINE_PRIME1v (lime_gl_generate_mipmap); DEFINE_PRIME2 (lime_gl_get_active_attrib); DEFINE_PRIME2 (lime_gl_get_active_uniform); DEFINE_PRIME3 (lime_gl_get_active_uniform_blocki); DEFINE_PRIME4v (lime_gl_get_active_uniform_blockiv); DEFINE_PRIME2 (lime_gl_get_active_uniform_block_name); DEFINE_PRIME4v (lime_gl_get_active_uniformsiv); DEFINE_PRIME1 (lime_gl_get_attached_shaders); DEFINE_PRIME2 (lime_gl_get_attrib_location); DEFINE_PRIME1 (lime_gl_get_boolean); DEFINE_PRIME2v (lime_gl_get_booleanv); DEFINE_PRIME2 (lime_gl_get_buffer_parameteri); DEFINE_PRIME3v (lime_gl_get_buffer_parameteriv); DEFINE_PRIME3v (lime_gl_get_buffer_parameteri64v); DEFINE_PRIME2 (lime_gl_get_buffer_pointerv); DEFINE_PRIME4v (lime_gl_get_buffer_sub_data); DEFINE_PRIME0 (lime_gl_get_context_attributes); DEFINE_PRIME0 (lime_gl_get_error); DEFINE_PRIME1 (lime_gl_get_extension); DEFINE_PRIME1 (lime_gl_get_float); DEFINE_PRIME2v (lime_gl_get_floatv); DEFINE_PRIME2 (lime_gl_get_frag_data_location); DEFINE_PRIME3 (lime_gl_get_framebuffer_attachment_parameteri); DEFINE_PRIME4v (lime_gl_get_framebuffer_attachment_parameteriv); DEFINE_PRIME1 (lime_gl_get_integer); DEFINE_PRIME2v (lime_gl_get_integerv); DEFINE_PRIME2v (lime_gl_get_integer64v); DEFINE_PRIME3v (lime_gl_get_integer64i_v); DEFINE_PRIME3v (lime_gl_get_integeri_v); DEFINE_PRIME5v (lime_gl_get_internalformativ); DEFINE_PRIME2 (lime_gl_get_programi); DEFINE_PRIME3v (lime_gl_get_programiv); DEFINE_PRIME3v (lime_gl_get_program_binary); DEFINE_PRIME1 (lime_gl_get_program_info_log); DEFINE_PRIME2 (lime_gl_get_queryi); DEFINE_PRIME3v (lime_gl_get_queryiv); DEFINE_PRIME2 (lime_gl_get_query_objectui); DEFINE_PRIME3v (lime_gl_get_query_objectuiv); DEFINE_PRIME2 (lime_gl_get_renderbuffer_parameteri); DEFINE_PRIME3v (lime_gl_get_renderbuffer_parameteriv); DEFINE_PRIME2 (lime_gl_get_sampler_parameterf); DEFINE_PRIME3v (lime_gl_get_sampler_parameterfv); DEFINE_PRIME2 (lime_gl_get_sampler_parameteri); DEFINE_PRIME3v (lime_gl_get_sampler_parameteriv); DEFINE_PRIME1 (lime_gl_get_shader_info_log); DEFINE_PRIME2 (lime_gl_get_shaderi); DEFINE_PRIME3v (lime_gl_get_shaderiv); DEFINE_PRIME2 (lime_gl_get_shader_precision_format); DEFINE_PRIME1 (lime_gl_get_shader_source); DEFINE_PRIME1 (lime_gl_get_string); DEFINE_PRIME2 (lime_gl_get_stringi); DEFINE_PRIME2 (lime_gl_get_sync_parameteri); DEFINE_PRIME3v (lime_gl_get_sync_parameteriv); DEFINE_PRIME2 (lime_gl_get_tex_parameterf); DEFINE_PRIME3v (lime_gl_get_tex_parameterfv); DEFINE_PRIME2 (lime_gl_get_tex_parameteri); DEFINE_PRIME3v (lime_gl_get_tex_parameteriv); DEFINE_PRIME2 (lime_gl_get_transform_feedback_varying); DEFINE_PRIME2 (lime_gl_get_uniformf); DEFINE_PRIME3v (lime_gl_get_uniformfv); DEFINE_PRIME2 (lime_gl_get_uniformi); DEFINE_PRIME3v (lime_gl_get_uniformiv); DEFINE_PRIME2 (lime_gl_get_uniformui); DEFINE_PRIME3v (lime_gl_get_uniformuiv); DEFINE_PRIME2 (lime_gl_get_uniform_block_index); DEFINE_PRIME2 (lime_gl_get_uniform_location); DEFINE_PRIME2 (lime_gl_get_vertex_attribf); DEFINE_PRIME3v (lime_gl_get_vertex_attribfv); DEFINE_PRIME2 (lime_gl_get_vertex_attribi); DEFINE_PRIME3v (lime_gl_get_vertex_attribiv); DEFINE_PRIME2 (lime_gl_get_vertex_attribii); DEFINE_PRIME3v (lime_gl_get_vertex_attribiiv); DEFINE_PRIME2 (lime_gl_get_vertex_attribiui); DEFINE_PRIME3v (lime_gl_get_vertex_attribiuiv); DEFINE_PRIME2 (lime_gl_get_vertex_attrib_pointerv); DEFINE_PRIME2v (lime_gl_hint); DEFINE_PRIME2v (lime_gl_invalidate_framebuffer); DEFINE_PRIME6v (lime_gl_invalidate_sub_framebuffer); DEFINE_PRIME1 (lime_gl_is_buffer); DEFINE_PRIME1 (lime_gl_is_enabled); DEFINE_PRIME1 (lime_gl_is_framebuffer); DEFINE_PRIME1 (lime_gl_is_program); DEFINE_PRIME1 (lime_gl_is_query); DEFINE_PRIME1 (lime_gl_is_renderbuffer); DEFINE_PRIME1 (lime_gl_is_sampler); DEFINE_PRIME1 (lime_gl_is_shader); DEFINE_PRIME1 (lime_gl_is_sync); DEFINE_PRIME1 (lime_gl_is_texture); DEFINE_PRIME1 (lime_gl_is_transform_feedback); DEFINE_PRIME1 (lime_gl_is_vertex_array); DEFINE_PRIME1v (lime_gl_line_width); DEFINE_PRIME1v (lime_gl_link_program); DEFINE_PRIME4 (lime_gl_map_buffer_range); DEFINE_PRIME1v (lime_gl_object_deregister); DEFINE_PRIME2 (lime_gl_object_from_id); DEFINE_PRIME3 (lime_gl_object_register); DEFINE_PRIME0v (lime_gl_pause_transform_feedback); DEFINE_PRIME2v (lime_gl_pixel_storei); DEFINE_PRIME2v (lime_gl_polygon_offset); DEFINE_PRIME4v (lime_gl_program_binary); DEFINE_PRIME3v (lime_gl_program_parameteri); DEFINE_PRIME1v (lime_gl_read_buffer); DEFINE_PRIME7v (lime_gl_read_pixels); DEFINE_PRIME0v (lime_gl_release_shader_compiler); DEFINE_PRIME4v (lime_gl_renderbuffer_storage); DEFINE_PRIME5v (lime_gl_renderbuffer_storage_multisample); DEFINE_PRIME0v (lime_gl_resume_transform_feedback); DEFINE_PRIME2v (lime_gl_sample_coverage); DEFINE_PRIME3v (lime_gl_sampler_parameterf); DEFINE_PRIME3v (lime_gl_sampler_parameteri); DEFINE_PRIME4v (lime_gl_scissor); DEFINE_PRIME4v (lime_gl_shader_binary); DEFINE_PRIME2v (lime_gl_shader_source); DEFINE_PRIME3v (lime_gl_stencil_func); DEFINE_PRIME4v (lime_gl_stencil_func_separate); DEFINE_PRIME1v (lime_gl_stencil_mask); DEFINE_PRIME2v (lime_gl_stencil_mask_separate); DEFINE_PRIME3v (lime_gl_stencil_op); DEFINE_PRIME4v (lime_gl_stencil_op_separate); DEFINE_PRIME9v (lime_gl_tex_image_2d); DEFINE_PRIME10v (lime_gl_tex_image_3d); DEFINE_PRIME3v (lime_gl_tex_parameterf); DEFINE_PRIME3v (lime_gl_tex_parameteri); DEFINE_PRIME5v (lime_gl_tex_storage_2d); DEFINE_PRIME6v (lime_gl_tex_storage_3d); DEFINE_PRIME9v (lime_gl_tex_sub_image_2d); DEFINE_PRIME11v (lime_gl_tex_sub_image_3d); DEFINE_PRIME3v (lime_gl_transform_feedback_varyings); DEFINE_PRIME2v (lime_gl_uniform1f); DEFINE_PRIME3v (lime_gl_uniform1fv); DEFINE_PRIME2v (lime_gl_uniform1i); DEFINE_PRIME3v (lime_gl_uniform1iv); DEFINE_PRIME2v (lime_gl_uniform1ui); DEFINE_PRIME3v (lime_gl_uniform1uiv); DEFINE_PRIME3v (lime_gl_uniform2f); DEFINE_PRIME3v (lime_gl_uniform2fv); DEFINE_PRIME3v (lime_gl_uniform2i); DEFINE_PRIME3v (lime_gl_uniform2iv); DEFINE_PRIME3v (lime_gl_uniform2ui); DEFINE_PRIME3v (lime_gl_uniform2uiv); DEFINE_PRIME4v (lime_gl_uniform3f); DEFINE_PRIME3v (lime_gl_uniform3fv); DEFINE_PRIME4v (lime_gl_uniform3i); DEFINE_PRIME3v (lime_gl_uniform3iv); DEFINE_PRIME4v (lime_gl_uniform3ui); DEFINE_PRIME3v (lime_gl_uniform3uiv); DEFINE_PRIME5v (lime_gl_uniform4f); DEFINE_PRIME3v (lime_gl_uniform4fv); DEFINE_PRIME5v (lime_gl_uniform4i); DEFINE_PRIME3v (lime_gl_uniform4iv); DEFINE_PRIME5v (lime_gl_uniform4ui); DEFINE_PRIME3v (lime_gl_uniform4uiv); DEFINE_PRIME3v (lime_gl_uniform_block_binding); DEFINE_PRIME4v (lime_gl_uniform_matrix2fv); DEFINE_PRIME4v (lime_gl_uniform_matrix2x3fv); DEFINE_PRIME4v (lime_gl_uniform_matrix2x4fv); DEFINE_PRIME4v (lime_gl_uniform_matrix3fv); DEFINE_PRIME4v (lime_gl_uniform_matrix3x2fv); DEFINE_PRIME4v (lime_gl_uniform_matrix3x4fv); DEFINE_PRIME4v (lime_gl_uniform_matrix4fv); DEFINE_PRIME4v (lime_gl_uniform_matrix4x2fv); DEFINE_PRIME4v (lime_gl_uniform_matrix4x3fv); DEFINE_PRIME1 (lime_gl_unmap_buffer); DEFINE_PRIME1v (lime_gl_use_program); DEFINE_PRIME1v (lime_gl_validate_program); DEFINE_PRIME2v (lime_gl_vertex_attrib_divisor); DEFINE_PRIME5v (lime_gl_vertex_attrib_ipointer); DEFINE_PRIME6v (lime_gl_vertex_attrib_pointer); DEFINE_PRIME5v (lime_gl_vertex_attribi4i); DEFINE_PRIME2v (lime_gl_vertex_attribi4iv); DEFINE_PRIME5v (lime_gl_vertex_attribi4ui); DEFINE_PRIME2v (lime_gl_vertex_attribi4uiv); DEFINE_PRIME2v (lime_gl_vertex_attrib1f); DEFINE_PRIME2v (lime_gl_vertex_attrib1fv); DEFINE_PRIME3v (lime_gl_vertex_attrib2f); DEFINE_PRIME2v (lime_gl_vertex_attrib2fv); DEFINE_PRIME4v (lime_gl_vertex_attrib3f); DEFINE_PRIME2v (lime_gl_vertex_attrib3fv); DEFINE_PRIME5v (lime_gl_vertex_attrib4f); DEFINE_PRIME2v (lime_gl_vertex_attrib4fv); DEFINE_PRIME4v (lime_gl_viewport); DEFINE_PRIME4v (lime_gl_wait_sync); #define _TBYTES _OBJ (_I32 _BYTES) #define _TCFFIPOINTER _DYN #define _TGLOBJECT _OBJ (_I32 _TCFFIPOINTER _OBJ (_I32 _ARR)) DEFINE_HL_PRIM (_VOID, hl_gl_active_texture, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_attach_shader, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_begin_query, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_begin_transform_feedback, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_bind_attrib_location, _I32 _I32 _STRING); DEFINE_HL_PRIM (_VOID, hl_gl_bind_buffer, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_bind_buffer_base, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_bind_buffer_range, _I32 _I32 _I32 _F64 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_bind_framebuffer, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_bind_renderbuffer, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_bind_sampler, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_bind_texture, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_bind_transform_feedback, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_bind_vertex_array, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_blend_color, _F32 _F32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_blend_equation, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_blend_equation_separate, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_blend_func, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_blend_func_separate, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_blit_framebuffer, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_buffer_data, _I32 _I32 _F64 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_buffer_sub_data, _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_check_framebuffer_status, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_clear, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_clear_bufferfi, _I32 _I32 _F32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_clear_bufferfv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_clear_bufferiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_clear_bufferuiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_clear_color, _F32 _F32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_clear_depthf, _F32); DEFINE_HL_PRIM (_VOID, hl_gl_clear_stencil, _I32); DEFINE_HL_PRIM (_I32, hl_gl_client_wait_sync, _TCFFIPOINTER _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_color_mask, _BOOL _BOOL _BOOL _BOOL); DEFINE_HL_PRIM (_VOID, hl_gl_compile_shader, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_compressed_tex_image_2d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_compressed_tex_image_3d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_compressed_tex_sub_image_2d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_compressed_tex_sub_image_3d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_copy_buffer_sub_data, _I32 _I32 _F64 _F64 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_copy_tex_image_2d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_copy_tex_sub_image_2d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_copy_tex_sub_image_3d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_I32, hl_gl_create_buffer, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_gl_create_framebuffer, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_gl_create_program, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_gl_create_query, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_gl_create_renderbuffer, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_gl_create_sampler, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_gl_create_shader, _I32); DEFINE_HL_PRIM (_I32, hl_gl_create_texture, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_gl_create_transform_feedback, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_gl_create_vertex_array, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_gl_cull_face, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_buffer, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_framebuffer, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_program, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_query, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_renderbuffer, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_sampler, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_shader, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_sync, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_gl_delete_texture, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_transform_feedback, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_delete_vertex_array, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_depth_func, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_depth_mask, _BOOL); DEFINE_HL_PRIM (_VOID, hl_gl_depth_rangef, _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_detach_shader, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_disable, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_disable_vertex_attrib_array, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_draw_arrays, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_draw_arrays_instanced, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_draw_buffers, _ARR); DEFINE_HL_PRIM (_VOID, hl_gl_draw_elements, _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_draw_elements_instanced, _I32 _I32 _I32 _F64 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_draw_range_elements, _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_enable, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_enable_vertex_attrib_array, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_end_query, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_end_transform_feedback, _NO_ARG); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_gl_fence_sync, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_finish, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_gl_flush, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_gl_framebuffer_renderbuffer, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_framebuffer_texture_layer, _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_framebuffer_texture2D, _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_front_face, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_generate_mipmap, _I32); DEFINE_HL_PRIM (_DYN, hl_gl_get_active_attrib, _I32 _I32); DEFINE_HL_PRIM (_DYN, hl_gl_get_active_uniform, _I32 _I32); DEFINE_HL_PRIM (_I32, hl_gl_get_active_uniform_blocki, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_active_uniform_blockiv, _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_BYTES, hl_gl_get_active_uniform_block_name, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_active_uniformsiv, _I32 _ARR _I32 _F64); DEFINE_HL_PRIM (_ARR, hl_gl_get_attached_shaders, _I32); DEFINE_HL_PRIM (_I32, hl_gl_get_attrib_location, _I32 _STRING); DEFINE_HL_PRIM (_BOOL, hl_gl_get_boolean, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_booleanv, _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_buffer_parameteri, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_buffer_parameteriv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_get_buffer_parameteri64v, _I32 _I32 _F64); DEFINE_HL_PRIM (_F64, hl_gl_get_buffer_pointerv, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_buffer_sub_data, _I32 _F64 _I32 _F64); DEFINE_HL_PRIM (_DYN, hl_gl_get_context_attributes, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_gl_get_error, _NO_ARG); DEFINE_HL_PRIM (_DYN, hl_gl_get_extension, _STRING); DEFINE_HL_PRIM (_F32, hl_gl_get_float, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_floatv, _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_frag_data_location, _I32 _STRING); DEFINE_HL_PRIM (_I32, hl_gl_get_framebuffer_attachment_parameteri, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_framebuffer_attachment_parameteriv, _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_integer, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_integerv, _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_get_integer64v, _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_get_integer64i_v, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_get_integeri_v, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_get_internalformativ, _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_programi, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_programiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_get_program_binary, _I32 _I32 _TBYTES); DEFINE_HL_PRIM (_BYTES, hl_gl_get_program_info_log, _I32); DEFINE_HL_PRIM (_I32, hl_gl_get_queryi, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_queryiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_query_objectui, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_query_objectuiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_renderbuffer_parameteri, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_renderbuffer_parameteriv, _I32 _I32 _F64); DEFINE_HL_PRIM (_F32, hl_gl_get_sampler_parameterf, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_sampler_parameterfv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_sampler_parameteri, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_sampler_parameteriv, _I32 _I32 _F64); DEFINE_HL_PRIM (_BYTES, hl_gl_get_shader_info_log, _I32); DEFINE_HL_PRIM (_I32, hl_gl_get_shaderi, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_shaderiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_DYN, hl_gl_get_shader_precision_format, _I32 _I32); DEFINE_HL_PRIM (_BYTES, hl_gl_get_shader_source, _I32); DEFINE_HL_PRIM (_BYTES, hl_gl_get_string, _I32); DEFINE_HL_PRIM (_BYTES, hl_gl_get_stringi, _I32 _I32); DEFINE_HL_PRIM (_I32, hl_gl_get_sync_parameteri, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_sync_parameteriv, _TCFFIPOINTER _I32 _F64); DEFINE_HL_PRIM (_F32, hl_gl_get_tex_parameterf, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_tex_parameterfv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_tex_parameteri, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_tex_parameteriv, _I32 _I32 _F64); DEFINE_HL_PRIM (_DYN, hl_gl_get_transform_feedback_varying, _I32 _I32); DEFINE_HL_PRIM (_F32, hl_gl_get_uniformf, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_uniformfv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_uniformi, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_uniformiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_uniformui, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_uniformuiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_uniform_block_index, _I32 _STRING); DEFINE_HL_PRIM (_I32, hl_gl_get_uniform_location, _I32 _STRING); DEFINE_HL_PRIM (_F32, hl_gl_get_vertex_attribf, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_vertex_attribfv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_vertex_attribi, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_vertex_attribiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_vertex_attribii, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_vertex_attribiiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_I32, hl_gl_get_vertex_attribiui, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_get_vertex_attribiuiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_F64, hl_gl_get_vertex_attrib_pointerv, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_hint, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_invalidate_framebuffer, _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_gl_invalidate_sub_framebuffer, _I32 _ARR _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_buffer, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_enabled, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_framebuffer, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_program, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_query, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_renderbuffer, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_sampler, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_shader, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_sync, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_gl_is_texture, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_transform_feedback, _I32); DEFINE_HL_PRIM (_BOOL, hl_gl_is_vertex_array, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_line_width, _F32); DEFINE_HL_PRIM (_VOID, hl_gl_link_program, _I32); DEFINE_HL_PRIM (_F64, hl_gl_map_buffer_range, _I32 _F64 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_object_deregister, _TGLOBJECT); DEFINE_HL_PRIM (_TGLOBJECT, hl_gl_object_from_id, _I32 _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_gl_object_register, _I32 _I32 _TGLOBJECT); DEFINE_HL_PRIM (_VOID, hl_gl_pause_transform_feedback, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_gl_pixel_storei, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_polygon_offset, _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_program_binary, _I32 _I32 _F64 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_program_parameteri, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_read_buffer, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_read_pixels, _I32 _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_release_shader_compiler, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_gl_renderbuffer_storage, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_renderbuffer_storage_multisample, _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_resume_transform_feedback, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_gl_sample_coverage, _F32 _BOOL); DEFINE_HL_PRIM (_VOID, hl_gl_sampler_parameterf, _I32 _I32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_sampler_parameteri, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_scissor, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_shader_binary, _ARR _I32 _F64 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_shader_source, _I32 _STRING); DEFINE_HL_PRIM (_VOID, hl_gl_stencil_func, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_stencil_func_separate, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_stencil_mask, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_stencil_mask_separate, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_stencil_op, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_stencil_op_separate, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_tex_image_2d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_tex_image_3d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_tex_parameterf, _I32 _I32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_tex_parameteri, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_tex_storage_2d, _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_tex_storage_3d, _I32 _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_tex_sub_image_2d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_tex_sub_image_3d, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_transform_feedback_varyings, _I32 _ARR _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform1f, _I32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform1fv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform1i, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform1iv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform1ui, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform1uiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform2f, _I32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform2fv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform2i, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform2iv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform2ui, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform2uiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform3f, _I32 _F32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform3fv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform3i, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform3iv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform3ui, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform3uiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform4f, _I32 _F32 _F32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform4fv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform4i, _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform4iv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform4ui, _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform4uiv, _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_block_binding, _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_matrix2fv, _I32 _I32 _BOOL _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_matrix2x3fv, _I32 _I32 _BOOL _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_matrix2x4fv, _I32 _I32 _BOOL _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_matrix3fv, _I32 _I32 _BOOL _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_matrix3x2fv, _I32 _I32 _BOOL _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_matrix3x4fv, _I32 _I32 _BOOL _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_matrix4fv, _I32 _I32 _BOOL _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_matrix4x2fv, _I32 _I32 _BOOL _F64); DEFINE_HL_PRIM (_VOID, hl_gl_uniform_matrix4x3fv, _I32 _I32 _BOOL _F64); DEFINE_HL_PRIM (_BOOL, hl_gl_unmap_buffer, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_use_program, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_validate_program, _I32); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib_divisor, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib_ipointer, _I32 _I32 _I32 _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib_pointer, _I32 _I32 _I32 _BOOL _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attribi4i, _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attribi4iv, _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attribi4ui, _I32 _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attribi4uiv, _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib1f, _I32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib1fv, _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib2f, _I32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib2fv, _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib3f, _I32 _F32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib3fv, _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib4f, _I32 _F32 _F32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_gl_vertex_attrib4fv, _I32 _F64); DEFINE_HL_PRIM (_VOID, hl_gl_viewport, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gl_wait_sync, _TCFFIPOINTER _I32 _I32 _I32); } extern "C" int lime_opengl_register_prims () { return 0; } ================================================ FILE: project/src/graphics/opengl/OpenGLBindings.h ================================================ #ifndef LIME_GRAPHICS_OPENGL_OPENGL_BINDINGS_H #define LIME_GRAPHICS_OPENGL_OPENGL_BINDINGS_H namespace lime { class OpenGLBindings { public: static bool Init (); static int defaultFramebuffer; static int defaultRenderbuffer; static void* handle; #ifdef NATIVE_TOOLKIT_SDL_ANGLE static void* eglHandle; #endif private: static bool initialized; }; enum GLObjectType { TYPE_UNKNOWN, TYPE_PROGRAM, TYPE_SHADER, TYPE_BUFFER, TYPE_TEXTURE, TYPE_FRAMEBUFFER, TYPE_RENDERBUFFER, TYPE_VERTEX_ARRAY_OBJECT, TYPE_QUERY, TYPE_SAMPLER, TYPE_SYNC, TYPE_TRANSFORM_FEEDBACK }; } #endif ================================================ FILE: project/src/graphics/opengl/OpenGLExtensions.h ================================================ #ifndef GL_UNSIGNED_SHORT_4_4_4_4 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #endif #ifdef HX_WINDOWS #define CALLING_CONVENTION APIENTRY #else #define CALLING_CONVENTION APIENTRY #endif #include "OpenGLBindings.h" #ifdef LIME_SDL #include #ifdef NATIVE_TOOLKIT_SDL_ANGLE #include #endif #endif #ifdef DECLARE_EXTENSION //namespace lime { void *OpenGLBindings::handle = 0; } #define OGL_EXT(func,ret,args) \ namespace lime { extern ret (CALLING_CONVENTION *func)args; } #define EGL_EXT(func,ret,args) \ namespace lime { extern ret (CALLING_CONVENTION *func)args; } #elif defined(DEFINE_EXTENSION) #define OGL_EXT(func,ret,args) \ namespace lime { ret (CALLING_CONVENTION *func)args=0; } #define EGL_EXT(func, ret, args) \ namespace lime { ret (CALLING_CONVENTION *func)args=0; } #elif defined(GET_EXTENSION) #if defined (LIME_SDL) && defined (NATIVE_TOOLKIT_SDL_ANGLE) #define OGL_EXT(func,ret,args) \ {\ *(void **)&lime::func = (void *)SDL_GL_GetProcAddress(#func);\ } #define EGL_EXT(func,ret,args) \ {\ *(void **)&lime::func = (void *)GetProcAddress((HMODULE)lime::OpenGLBindings::eglHandle, #func);\ } #elif LIME_SDL #define OGL_EXT(func,ret,args) \ {\ *(void **)&lime::func = (void *)SDL_GL_GetProcAddress(#func);\ if (!func) \ *(void **)&lime::func = (void *)SDL_GL_GetProcAddress(#func "ARB");\ } #elif HX_WINDOWS #define OGL_EXT(func,ret,args) \ {\ *(void **)&lime::func = (void *)wglGetProcAddress(#func);\ if (!func) \ *(void **)&lime::func = (void *)wglGetProcAddress(#func "ARB");\ } #elif defined(HX_LINUX) #define OGL_EXT(func,ret,args) \ {\ *(void **)&lime::func = (void *)dlsym(lime::OpenGLBindings::handle,#func);\ if (!func) \ *(void **)&lime::func = (void *)dlsym(lime::OpenGLBindings::handle,#func "ARB");\ } #endif #endif OGL_EXT(glBindBuffer,void,(GLenum,GLuint)); OGL_EXT(glDeleteBuffers,void,(GLsizei,const GLuint *)); OGL_EXT(glGenBuffers,void,(GLsizei,GLuint*)); OGL_EXT(glBufferData,void,(GLenum,GLuint,const void *, GLenum)); OGL_EXT(glCreateShader,GLuint,(GLenum)); OGL_EXT(glGetUniformLocation,GLint,(GLuint,const char *)); OGL_EXT(glUniform4f,void,(GLint,float,float,float,float)); OGL_EXT(glUniformMatrix2fv,void,(GLint,GLsizei,GLboolean,const float *)); OGL_EXT(glUniformMatrix3fv,void,(GLint,GLsizei,GLboolean,const float *)); OGL_EXT(glUniformMatrix4fv,void,(GLint,GLsizei,GLboolean,const float *)); OGL_EXT(glDeleteShader,void,(GLint)); OGL_EXT(glDeleteProgram,void,(GLint)); OGL_EXT(glGetAttribLocation,GLint,(GLuint,const char *)); OGL_EXT(glShaderSource,void,(GLuint,GLsizei,const char **, const GLint *)); OGL_EXT(glDisableVertexAttribArray,void,(GLuint)); OGL_EXT(glEnableVertexAttribArray,void,(GLuint)); OGL_EXT(glAttachShader,void,(GLuint,GLuint)); OGL_EXT(glCreateProgram,GLuint,()); OGL_EXT(glCompileShader,void,(GLuint)); OGL_EXT(glLinkProgram,void,(GLuint)); OGL_EXT(glGetShaderiv,void,(GLuint,GLenum,GLint *)); OGL_EXT(glValidateProgram,void,(GLuint)); OGL_EXT(glGetShaderInfoLog,void,(GLuint,GLsizei,GLsizei *,char *)); OGL_EXT(glGetProgramiv,void,(GLuint,GLenum,GLint *)); OGL_EXT(glGetProgramInfoLog,void,(GLuint,GLsizei,GLsizei *,char *)); OGL_EXT(glUseProgram,void,(GLuint)); OGL_EXT(glUniform1i,void,(GLuint,GLint)); OGL_EXT(glVertexAttribPointer,void,(GLuint,GLint,GLenum,GLboolean,GLsizei,const void *)); OGL_EXT(glActiveTexture,void,(GLenum)); OGL_EXT(glIsBuffer,GLboolean,(GLuint)); OGL_EXT(glIsFramebuffer,GLboolean,(GLuint)); OGL_EXT(glIsRenderbuffer,GLboolean,(GLuint)); OGL_EXT(glBlendColor,void,(GLclampf, GLclampf, GLclampf, GLclampf)); OGL_EXT(glBlendEquation,void,(GLenum)); OGL_EXT(glBlendFuncSeparate,void,(GLenum, GLenum, GLenum, GLenum)); OGL_EXT(glBufferSubData,void,(GLenum, GLintptr, GLsizeiptr, const GLvoid *)); OGL_EXT(glGetBufferParameteriv,void,(GLenum, GLenum, GLint *)); OGL_EXT(glBindFramebuffer,void,(GLenum, GLuint)); OGL_EXT(glGenFramebuffers,void,(GLsizei, GLuint *)); OGL_EXT(glDeleteFramebuffers,void,(GLsizei, GLuint *)); OGL_EXT(glBindRenderbuffer,void,(GLenum, GLuint)); OGL_EXT(glFramebufferRenderbuffer,void,(GLenum, GLenum, GLenum, GLuint)); OGL_EXT(glFramebufferTexture2D,void,(GLenum, GLenum, GLenum, GLuint, GLint)); OGL_EXT(glRenderbufferStorage,void,(GLenum, GLenum, GLsizei, GLsizei)); OGL_EXT(glCheckFramebufferStatus,GLenum,(GLenum)); OGL_EXT(glSampleCoverage,void,(GLclampf, GLboolean)); OGL_EXT(glCompressedTexSubImage2D,void,(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *)); OGL_EXT(glCompressedTexImage2D,void,(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *)); OGL_EXT(glGenerateMipmap,void,(GLenum)); OGL_EXT(glGenRenderbuffers,void,(GLsizei, GLuint *)); OGL_EXT(glDeleteRenderbuffers,void,(GLsizei, GLuint *)); OGL_EXT(glGetFramebufferAttachmentParameteriv,void,(GLenum, GLenum, GLenum, GLint *)); OGL_EXT(glGetRenderbufferParameteriv,void,(GLenum, GLenum, GLint *)); OGL_EXT(glBlendEquationSeparate,void,(GLenum, GLenum)); OGL_EXT(glDrawBuffers,void,(GLsizei, const GLenum *)); OGL_EXT(glStencilOpSeparate,void,(GLenum, GLenum, GLenum, GLenum)); OGL_EXT(glStencilFuncSeparate,void,(GLenum, GLenum, GLint, GLuint)); OGL_EXT(glStencilMaskSeparate,void,(GLenum, GLuint)); OGL_EXT(glBindAttribLocation,void,(GLuint, GLuint, const GLchar *)); OGL_EXT(glDetachShader,void,(GLuint, GLuint)); OGL_EXT(glGetActiveAttrib,void,(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *)); OGL_EXT(glGetActiveUniform,void,(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *)); OGL_EXT(glGetAttachedShaders,void,(GLuint, GLsizei, GLsizei *, GLuint *)); OGL_EXT(glGetShaderSource,void,(GLuint, GLsizei, GLsizei *, GLchar *)); OGL_EXT(glGetUniformfv,void,(GLuint, GLint, GLfloat *)); OGL_EXT(glGetUniformiv,void,(GLuint, GLint, GLint *)); OGL_EXT(glGetVertexAttribfv,void,(GLuint, GLenum, GLfloat *)); OGL_EXT(glGetVertexAttribiv,void,(GLuint, GLenum, GLint *)); OGL_EXT(glGetVertexAttribPointerv,void,(GLuint, GLenum, GLvoid* *)); OGL_EXT(glIsProgram,GLboolean,(GLuint)); OGL_EXT(glIsShader,GLboolean,(GLuint)); OGL_EXT(glUniform1f,void,(GLint, GLfloat)); OGL_EXT(glUniform2f,void,(GLint, GLfloat, GLfloat)); OGL_EXT(glUniform3f,void,(GLint, GLfloat, GLfloat, GLfloat)); OGL_EXT(glUniform2i,void,(GLint, GLint, GLint)); OGL_EXT(glUniform3i,void,(GLint, GLint, GLint, GLint)); OGL_EXT(glUniform4i,void,(GLint, GLint, GLint, GLint, GLint)); OGL_EXT(glUniform1fv,void,(GLint, GLsizei, const GLfloat *)); OGL_EXT(glUniform2fv,void,(GLint, GLsizei, const GLfloat *)); OGL_EXT(glUniform3fv,void,(GLint, GLsizei, const GLfloat *)); OGL_EXT(glUniform4fv,void,(GLint, GLsizei, const GLfloat *)); OGL_EXT(glUniform1iv,void,(GLint, GLsizei, const GLint *)); OGL_EXT(glUniform2iv,void,(GLint, GLsizei, const GLint *)); OGL_EXT(glUniform3iv,void,(GLint, GLsizei, const GLint *)); OGL_EXT(glUniform4iv,void,(GLint, GLsizei, const GLint *)); OGL_EXT(glVertexAttrib1f,void,(GLuint, GLfloat)); OGL_EXT(glVertexAttrib1fv,void,(GLuint, const GLfloat *)); OGL_EXT(glVertexAttrib2f,void,(GLuint, GLfloat, GLfloat)); OGL_EXT(glVertexAttrib2fv,void,(GLuint, const GLfloat *)); OGL_EXT(glVertexAttrib3f,void,(GLuint, GLfloat, GLfloat, GLfloat)); OGL_EXT(glVertexAttrib3fv,void,(GLuint, const GLfloat *)); OGL_EXT(glVertexAttrib4f,void,(GLuint, GLfloat, GLfloat, GLfloat, GLfloat)); OGL_EXT(glVertexAttrib4fv,void,(GLuint, const GLfloat *)); OGL_EXT(glBeginQuery, void, (GLenum target, GLuint id)); OGL_EXT(glBeginTransformFeedback, void, (GLenum primitiveMode)); OGL_EXT(glEndTransformFeedback, void, (void)); OGL_EXT(glBindBufferBase, void, (GLenum target, GLuint index, GLuint buffer)); OGL_EXT(glBindBufferRange, void, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)); OGL_EXT(glBindVertexArray, void, (GLuint array)); OGL_EXT(glBlitFramebuffer, void, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)); OGL_EXT(glClearBufferiv, void, (GLenum buffer, GLint drawbuffer, const GLint * value)); OGL_EXT(glClearBufferuiv, void, (GLenum buffer, GLint drawbuffer, const GLuint * value)); OGL_EXT(glClearBufferfv, void, (GLenum buffer, GLint drawbuffer, const GLfloat * value)); OGL_EXT(glClearBufferfi, void, (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)); OGL_EXT(glClientWaitSync, GLenum, (GLsync sync, GLbitfield flags, GLuint64 timeout)); OGL_EXT(glCompressedTexImage3D, void, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data)); OGL_EXT(glCompressedTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data)); OGL_EXT(glCopyTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)); OGL_EXT(glGenQueries, void, (GLsizei n, GLuint * ids)); OGL_EXT(glGenSamplers, void, (GLsizei n, GLuint *samplers)); OGL_EXT(glGenTransformFeedbacks, void, (GLsizei n, GLuint *ids)); OGL_EXT(glGenVertexArrays, void, (GLsizei n, GLuint *arrays)); OGL_EXT(glDeleteTransformFeedbacks, void, (GLsizei n, const GLuint *ids)); OGL_EXT(glDrawArraysInstanced, void, (GLenum mode, GLint first, GLsizei count, GLsizei primcount)); OGL_EXT(glDrawRangeElements, void, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices)); OGL_EXT(glEndQuery, void, (GLenum target)); OGL_EXT(glGetActiveUniformBlockiv, void, (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)); OGL_EXT(glGetActiveUniformsiv, void, (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)); OGL_EXT(glGetBufferPointerv, void, (GLenum target, GLenum pname, GLvoid ** params)); #ifndef LIME_GLES OGL_EXT(glGetBufferSubData, void, (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid * data)); #endif OGL_EXT(glGetInteger64v, void, (GLenum pname, GLint64 * params)); OGL_EXT(glGetInteger64i_v, void, (GLenum pname, GLuint index, GLint64 * data)); OGL_EXT(glGetInternalformativ, void, (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)); OGL_EXT(glGetProgramBinary, void, (GLuint program, GLsizei bufsize, GLsizei *length, GLenum *binaryFormat, void *binary)); OGL_EXT(glGetQueryiv, void, (GLenum target, GLenum pname, GLint * params)); OGL_EXT(glGetQueryObjectiv, void, (GLuint id, GLenum pname, GLint * params)); OGL_EXT(glGetQueryObjectuiv, void, (GLuint id, GLenum pname, GLuint * params)); OGL_EXT(glGetSamplerParameterfv, void, (GLuint sampler, GLenum pname, GLfloat * params)); OGL_EXT(glGetSamplerParameteriv, void, (GLuint sampler, GLenum pname, GLint * params)); OGL_EXT(glGetTransformFeedbackVarying, void, (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, char *name)); OGL_EXT(glGetUniformuiv, void, (GLuint program, GLint location, GLuint *params)); OGL_EXT(glGetUniformBlockIndex, GLuint, (GLuint program, const GLchar *uniformBlockName)); OGL_EXT(glGetVertexAttribIiv, void, (GLuint index, GLenum pname, GLint *params)); OGL_EXT(glGetVertexAttribIuiv, void, (GLuint index, GLenum pname, GLuint *params)); OGL_EXT(glMapBufferRange, void*, (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)); OGL_EXT(glPauseTransformFeedback, void, ()); OGL_EXT(glProgramBinary, void, (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)); OGL_EXT(glProgramParameteri, void, (GLuint program, GLenum pname, GLint value)); OGL_EXT(glReadBuffer, void, (GLenum mode)); OGL_EXT(glReleaseShaderCompiler, void, (void)); OGL_EXT(glRenderbufferStorageMultisample, void, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)); OGL_EXT(glResumeTransformFeedback, void, (void)); OGL_EXT(glSamplerParameterf, void, (GLuint sampler, GLenum pname, GLfloat param)); OGL_EXT(glSamplerParameteri, void, (GLuint sampler, GLenum pname, GLint param)); OGL_EXT(glTexStorage2D, void, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)); OGL_EXT(glTexStorage3D, void, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)); OGL_EXT(glUniform1ui, void, (GLint location, GLuint v0)); OGL_EXT(glUniform2ui, void, (GLint location, GLuint v0, GLuint v1)); OGL_EXT(glUniform3ui, void, (GLint location, GLuint v0, GLuint v1, GLuint v2)); OGL_EXT(glUniform4ui, void, (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)); OGL_EXT(glUniform1uiv, void, (GLint location, GLsizei count, const GLuint *value)); OGL_EXT(glUniform2uiv, void, (GLint location, GLsizei count, const GLuint *value)); OGL_EXT(glUniform3uiv, void, (GLint location, GLsizei count, const GLuint *value)); OGL_EXT(glUniform4uiv, void, (GLint location, GLsizei count, const GLuint *value)); OGL_EXT(glUniformBlockBinding, void, (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)); OGL_EXT(glUniformMatrix2x3fv, void, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); OGL_EXT(glUniformMatrix3x2fv, void, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); OGL_EXT(glUniformMatrix2x4fv, void, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); OGL_EXT(glUniformMatrix4x2fv, void, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); OGL_EXT(glUniformMatrix3x4fv, void, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); OGL_EXT(glUniformMatrix4x3fv, void, (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)); OGL_EXT(glVertexAttribDivisor, void, (GLuint index, GLuint divisor)); OGL_EXT(glVertexAttribIPointer, void, (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)); OGL_EXT(glVertexAttribI4i, void, (GLuint index, GLint v0, GLint v1, GLint v2, GLint v3)); OGL_EXT(glVertexAttribI4iv, void, (GLuint index, const GLint *v)); OGL_EXT(glVertexAttribI4uiv, void, (GLuint index, const GLuint *v)); OGL_EXT(glWaitSync, void, (GLsync sync, GLbitfield flags, GLuint64 timeout)); OGL_EXT(glDeleteSync, void, (GLsync sync)); OGL_EXT(glDeleteQueries, void, (GLsizei n, const GLuint* ids)); OGL_EXT(glDeleteSamplers, void, (GLsizei n, const GLuint* ids)); OGL_EXT(glDeleteVertexArrays, void, (GLsizei n, const GLuint* ids)); OGL_EXT(glIsQuery, GLboolean, (GLuint id)); OGL_EXT(glIsSampler, GLboolean, (GLuint id)); OGL_EXT(glIsVertexArray, GLboolean, (GLuint id)); OGL_EXT(glBindSampler, void, (GLuint unit, GLuint sampler)); OGL_EXT(glBindTransformFeedback, void, (GLenum target, GLuint id)); OGL_EXT(glCopyBufferSubData, void, (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)); OGL_EXT(glDrawElementsInstanced, void, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount)); OGL_EXT(glFramebufferTextureLayer, void, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)); OGL_EXT(glGetActiveUniformBlockName, void, (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)); OGL_EXT(glGetBufferParameteri64v, void, (GLenum target, GLenum value, GLint64 * data)); OGL_EXT(glGetIntegeri_v, void, (GLenum target, GLuint index, GLint * data)); OGL_EXT(glIsTransformFeedback, GLboolean, (GLuint id)); OGL_EXT(glShaderBinary, void, (GLsizei n, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length)); OGL_EXT(glTexImage3D, void, (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * data)); OGL_EXT(glTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels)); OGL_EXT(glTransformFeedbackVaryings, void, (GLuint program, GLsizei count, const char **varyings, GLenum bufferMode)); OGL_EXT(glUnmapBuffer, GLboolean, (GLenum target)); OGL_EXT(glVertexAttribI4ui, void, (GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3)); OGL_EXT(glIsSync, GLboolean, (GLsync sync)); OGL_EXT(glGetStringi, const GLubyte *, (GLenum name, GLuint index)); OGL_EXT(glGetFragDataLocation, GLint, ( GLuint program, const char * name)); OGL_EXT(glFenceSync, GLsync, (GLenum condition, GLbitfield flags)); #ifdef DYNAMIC_OGL //OGL_EXT(glActiveTexture,void, (GLenum texture)); OGL_EXT(glAlphaFunc,void, (GLenum func, GLclampf ref)); //OGL_EXT(glAlphaFuncx,void, (GLenum func, GLclampx ref)); OGL_EXT(glBindTexture,void, (GLenum target, GLuint texture)); OGL_EXT(glBlendFunc,void, (GLenum sfactor, GLenum dfactor)); OGL_EXT(glClear,void, (GLbitfield mask)); OGL_EXT(glClearColor,void, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)); //OGL_EXT(glClearColorx,void, (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)); #if !defined(LIME_GLES) OGL_EXT(glClearDepth,void, (GLclampd depth)); #else OGL_EXT(glClearDepthf,void, (GLclampf depth)); #endif //OGL_EXT(glClearDepthx,void, (GLclampx depth)); OGL_EXT(glClearStencil,void, (GLint s)); OGL_EXT(glClientActiveTexture,void, (GLenum texture)); OGL_EXT(glColor4f,void, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)); //OGL_EXT(glColor4x,void, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)); OGL_EXT(glColorMask,void, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)); OGL_EXT(glColorPointer,void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)); //OGL_EXT(glCompressedTexImage2D,void, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)); //OGL_EXT(glCompressedTexSubImage2D,void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)); OGL_EXT(glCopyTexImage2D,void, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)); OGL_EXT(glCopyTexSubImage2D,void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)); OGL_EXT(glCullFace,void, (GLenum mode)); OGL_EXT(glDeleteTextures,void, (GLsizei n, const GLuint *textures)); OGL_EXT(glDepthFunc,void, (GLenum func)); OGL_EXT(glDepthMask,void, (GLboolean flag)); #if !defined(LIME_GLES) OGL_EXT(glDepthRange,void, (GLclampd zNear, GLclampd zFar)); #else OGL_EXT(glDepthRangef,void, (GLclampf nearVal,GLclampf farVal)); #endif //OGL_EXT(glDepthRangex,void, (GLclampx zNear, GLclampx zFar)); OGL_EXT(glDisable,void, (GLenum cap)); OGL_EXT(glDisableClientState,void, (GLenum array)); OGL_EXT(glDrawArrays,void, (GLenum mode, GLint first, GLsizei count)); OGL_EXT(glDrawElements,void, (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)); OGL_EXT(glEnable,void, (GLenum cap)); OGL_EXT(glEnableClientState,void, (GLenum array)); OGL_EXT(glFinish,void, (void)); OGL_EXT(glFlush,void, (void)); OGL_EXT(glFogf,void, (GLenum pname, GLfloat param)); OGL_EXT(glFogfv,void, (GLenum pname, const GLfloat *params)); //OGL_EXT(glFogx,void, (GLenum pname, GLfixed param)); //OGL_EXT(glFogxv,void, (GLenum pname, const GLfixed *params)); OGL_EXT(glFrontFace,void, (GLenum mode)); OGL_EXT(glFrustumf,void, (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)); //OGL_EXT(glFrustumx,void, (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)); OGL_EXT(glGenTextures,void, (GLsizei n, GLuint *textures)); OGL_EXT(glGetError,GLenum, (void)); OGL_EXT(glGetBooleanv,void, (GLenum pname, GLboolean* params)); OGL_EXT(glGetFloatv,void, (GLenum pname, GLfloat* params)); OGL_EXT(glGetIntegerv,void, (GLenum pname, GLint *params)); #ifdef LIME_GLES OGL_EXT(glGetShaderPrecisionFormat,void, (GLenum shaderType, GLenum precisionType, GLint *range, GLint *precision)); #endif OGL_EXT(glGetString, const GLubyte *,(GLenum name)); OGL_EXT(glHint,void, (GLenum target, GLenum mode)); OGL_EXT(glInvalidateFramebuffer,void, (GLenum target, GLsizei numAttachments, const GLenum *attachments)); OGL_EXT(glInvalidateSubFramebuffer,void, (GLenum target, GLsizei numAttachments, const GLenum *attachments, int x, int y, GLsizei width, GLsizei height)); OGL_EXT(glLightModelf,void, (GLenum pname, GLfloat param)); OGL_EXT(glLightModelfv,void, (GLenum pname, const GLfloat *params)); //OGL_EXT(glLightModelx,void, (GLenum pname, GLfixed param)); //OGL_EXT(glLightModelxv,void, (GLenum pname, const GLfixed *params)); OGL_EXT(glLightf,void, (GLenum light, GLenum pname, GLfloat param)); OGL_EXT(glLightfv,void, (GLenum light, GLenum pname, const GLfloat *params)); //OGL_EXT(glLightx,void, (GLenum light, GLenum pname, GLfixed param)); //OGL_EXT(glLightxv,void, (GLenum light, GLenum pname, const GLfixed *params)); OGL_EXT(glLineWidth,void, (GLfloat width)); //OGL_EXT(glLineWidthx,void, (GLfixed width)); OGL_EXT(glLoadIdentity,void, (void)); OGL_EXT(glLoadMatrixf,void, (const GLfloat *m)); //OGL_EXT(glLoadMatrixx,void, (const GLfixed *m)); OGL_EXT(glLogicOp,void, (GLenum opcode)); OGL_EXT(glMaterialf,void, (GLenum face, GLenum pname, GLfloat param)); OGL_EXT(glMaterialfv,void, (GLenum face, GLenum pname, const GLfloat *params)); //OGL_EXT(glMaterialx,void, (GLenum face, GLenum pname, GLfixed param)); //OGL_EXT(glMaterialxv,void, (GLenum face, GLenum pname, const GLfixed *params)); OGL_EXT(glMatrixMode,void, (GLenum mode)); OGL_EXT(glMultMatrixf,void, (const GLfloat *m)); //OGL_EXT(glMultMatrixx,void, (const GLfixed *m)); OGL_EXT(glMultiTexCoord4f,void, (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)); //OGL_EXT(glMultiTexCoord4x,void, (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)); OGL_EXT(glNormal3f,void, (GLfloat nx, GLfloat ny, GLfloat nz)); //OGL_EXT(glNormal3x,void, (GLfixed nx, GLfixed ny, GLfixed nz)); OGL_EXT(glNormalPointer,void, (GLenum type, GLsizei stride, const GLvoid *pointer)); OGL_EXT(glOrthof,void, (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)); //OGL_EXT(glOrthox,void, (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)); OGL_EXT(glPixelStorei,void, (GLenum pname, GLint param)); OGL_EXT(glPointSize,void, (GLfloat size)); //OGL_EXT(glPointSizex,void, (GLfixed size)); OGL_EXT(glPolygonOffset,void, (GLfloat factor, GLfloat units)); //OGL_EXT(glPolygonOffsetx,void, (GLfixed factor, GLfixed units)); OGL_EXT(glPopMatrix,void, (void)); OGL_EXT(glPushMatrix,void, (void)); OGL_EXT(glReadPixels,void, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)); OGL_EXT(glRotatef,void, (GLfloat angle, GLfloat x, GLfloat y, GLfloat z)); //OGL_EXT(glRotatex,void, (GLfixed angle, GLfixed x, GLfixed y, GLfixed z)); //OGL_EXT(glSampleCoverage,void, (GLclampf value, GLboolean invert)); //OGL_EXT(glSampleCoveragex,void, (GLclampx value, GLboolean invert)); OGL_EXT(glScalef,void, (GLfloat x, GLfloat y, GLfloat z)); //OGL_EXT(glScalex,void, (GLfixed x, GLfixed y, GLfixed z)); OGL_EXT(glScissor,void, (GLint x, GLint y, GLsizei width, GLsizei height)); OGL_EXT(glShadeModel,void, (GLenum mode)); OGL_EXT(glStencilFunc,void, (GLenum func, GLint ref, GLuint mask)); OGL_EXT(glStencilMask,void, (GLuint mask)); OGL_EXT(glStencilOp,void, (GLenum fail, GLenum zfail, GLenum zpass)); OGL_EXT(glTexCoordPointer,void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)); OGL_EXT(glTexEnvf,void, (GLenum target, GLenum pname, GLfloat param)); OGL_EXT(glTexEnvfv,void, (GLenum target, GLenum pname, const GLfloat *params)); //OGL_EXT(glTexEnvx,void, (GLenum target, GLenum pname, GLfixed param)); //OGL_EXT(glTexEnvxv,void, (GLenum target, GLenum pname, const GLfixed *params)); OGL_EXT(glTexImage2D,void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)); OGL_EXT(glTexParameterf,void, (GLenum target, GLenum pname, GLfloat param)); OGL_EXT(glTexParameteri,void, (GLenum target, GLenum pname, GLint param)); OGL_EXT(glTexSubImage2D,void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)); OGL_EXT(glTranslatef,void, (GLfloat x, GLfloat y, GLfloat z)); //OGL_EXT(glTranslatex,void, (GLfixed x, GLfixed y, GLfixed z)); OGL_EXT(glVertexPointer,void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)); OGL_EXT(glViewport,void, (GLint x, GLint y, GLsizei width, GLsizei height)); OGL_EXT(glGetTexParameterfv,void,(GLenum target, GLenum pname, GLfloat * params)); OGL_EXT(glGetTexParameteriv,void,(GLenum target, GLenum pname, GLint * params)); OGL_EXT(glIsTexture, GLboolean, ( GLuint texture) ); OGL_EXT(glIsEnabled, GLboolean, ( GLuint texture) ); #ifdef NATIVE_TOOLKIT_SDL_ANGLE EGL_EXT(eglBindTexImage, EGLBoolean, (EGLDisplay dpy, EGLSurface surface, EGLint buffer)); EGL_EXT(eglChooseConfig, EGLBoolean, (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)); EGL_EXT(eglCreatePbufferSurface, EGLSurface, (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)); EGL_EXT(eglDestroySurface, EGLBoolean, (EGLDisplay display, EGLSurface surface)); EGL_EXT(eglGetDisplay, EGLDisplay, (EGLNativeDisplayType display_id)); EGL_EXT(eglGetError, EGLint, (void)); EGL_EXT(eglGetConfigs, EGLBoolean, (EGLDisplay dpy, EGLConfig *configs,EGLint config_size, EGLint *num_config)); EGL_EXT(eglGetConfigAttrib, EGLBoolean, (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)); EGL_EXT(eglReleaseTexImage, EGLBoolean, (EGLDisplay display, EGLSurface surface, EGLint buffer)); EGL_EXT(eglQuerySurfacePointerANGLE, EGLBoolean, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value)); #endif #endif #undef OGL_EXT #undef EGL_EXT #undef CALLING_CONVENTION ================================================ FILE: project/src/graphics/utils/ImageDataUtil.cpp ================================================ #include #include #include #include namespace lime { unsigned char alphaTable[256]; unsigned char redTable[256]; unsigned char greenTable[256]; unsigned char blueTable[256]; void ImageDataUtil::ColorTransform (Image* image, Rectangle* rect, ColorMatrix* colorMatrix) { PixelFormat format = image->buffer->format; bool premultiplied = image->buffer->premultiplied; uint8_t* data = (uint8_t*)image->buffer->data->buffer->b; Rectangle* _rect = (Rectangle*)(image->type); ImageDataView dataView = ImageDataView (image, rect); colorMatrix->GetAlphaTable (alphaTable); colorMatrix->GetRedTable (redTable); colorMatrix->GetGreenTable (greenTable); colorMatrix->GetBlueTable (blueTable); int row, offset; RGBA pixel; for (int y = 0; y < dataView.height; y++) { row = dataView.Row (y); for (int x = 0; x < dataView.width; x++) { offset = row + (x * 4); pixel.ReadUInt8 (data, offset, format, premultiplied, LIME_BIG_ENDIAN); pixel.Set (redTable[pixel.r], greenTable[pixel.g], blueTable[pixel.b], alphaTable[pixel.a]); pixel.WriteUInt8 (data, offset, format, premultiplied); } } } void ImageDataUtil::CopyChannel (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int srcChannel, int destChannel) { uint8_t* srcData = (uint8_t*)sourceImage->buffer->data->buffer->b; uint8_t* destData = (uint8_t*)image->buffer->data->buffer->b; ImageDataView srcView = ImageDataView (sourceImage, sourceRect); Rectangle destRect = Rectangle (destPoint->x, destPoint->y, srcView.width, srcView.height); ImageDataView destView = ImageDataView (image, &destRect); PixelFormat srcFormat = sourceImage->buffer->format; PixelFormat destFormat = image->buffer->format; bool srcPremultiplied = sourceImage->buffer->premultiplied; bool destPremultiplied = image->buffer->premultiplied; int srcPosition, destPosition; RGBA srcPixel, destPixel; unsigned char value = 0; for (int y = 0; y < destView.height; y++) { srcPosition = srcView.Row (y); destPosition = destView.Row (y); for (int x = 0; x < destView.width; x++) { srcPixel.ReadUInt8 (srcData, srcPosition, srcFormat, srcPremultiplied, LIME_BIG_ENDIAN); destPixel.ReadUInt8 (destData, destPosition, destFormat, destPremultiplied, LIME_BIG_ENDIAN); switch (srcChannel) { case 0: value = srcPixel.r; break; case 1: value = srcPixel.g; break; case 2: value = srcPixel.b; break; case 3: value = srcPixel.a; break; } switch (destChannel) { case 0: destPixel.r = value; break; case 1: destPixel.g = value; break; case 2: destPixel.b = value; break; case 3: destPixel.a = value; break; } destPixel.WriteUInt8 (destData, destPosition, destFormat, destPremultiplied); srcPosition += 4; destPosition += 4; } } } void ImageDataUtil::CopyPixels (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, Image* alphaImage, Vector2* alphaPoint, bool mergeAlpha) { uint8_t* sourceData = (uint8_t*)sourceImage->buffer->data->buffer->b; uint8_t* destData = (uint8_t*)image->buffer->data->buffer->b; if (!sourceData || !destData) return; ImageDataView sourceView = ImageDataView (sourceImage, sourceRect); Rectangle destRect = Rectangle (destPoint->x, destPoint->y, sourceView.width, sourceView.height); ImageDataView destView = ImageDataView (image, &destRect); PixelFormat sourceFormat = sourceImage->buffer->format; PixelFormat destFormat = image->buffer->format; int sourcePosition, destPosition; float sourceAlpha, destAlpha, oneMinusSourceAlpha, blendAlpha; RGBA sourcePixel, destPixel; bool sourcePremultiplied = sourceImage->buffer->premultiplied; bool destPremultiplied = image->buffer->premultiplied; int sourceBytesPerPixel = sourceImage->buffer->bitsPerPixel / 8; int destBytesPerPixel = image->buffer->bitsPerPixel / 8; bool useAlphaImage = (alphaImage && alphaImage->buffer->transparent); bool blend = (mergeAlpha || (useAlphaImage && !image->buffer->transparent) || (!mergeAlpha && !image->buffer->transparent && sourceImage->buffer->transparent)); if (!useAlphaImage) { if (blend) { for (int y = 0; y < destView.height; y++) { sourcePosition = sourceView.Row (y); destPosition = destView.Row (y); for (int x = 0; x < destView.width; x++) { sourcePixel.ReadUInt8 (sourceData, sourcePosition, sourceFormat, sourcePremultiplied, LIME_BIG_ENDIAN); destPixel.ReadUInt8 (destData, destPosition, destFormat, destPremultiplied, LIME_BIG_ENDIAN); sourceAlpha = sourcePixel.a / 255.0; destAlpha = destPixel.a / 255.0; oneMinusSourceAlpha = 1 - sourceAlpha; blendAlpha = sourceAlpha + (destAlpha * oneMinusSourceAlpha); if (blendAlpha == 0) { destPixel.Set (0, 0, 0, 0); } else { destPixel.r = __clamp[int (0.5 + (sourcePixel.r * sourceAlpha + destPixel.r * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; destPixel.g = __clamp[int (0.5 + (sourcePixel.g * sourceAlpha + destPixel.g * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; destPixel.b = __clamp[int (0.5 + (sourcePixel.b * sourceAlpha + destPixel.b * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; destPixel.a = __clamp[int (0.5 + blendAlpha * 255.0)]; } destPixel.WriteUInt8 (destData, destPosition, destFormat, destPremultiplied); sourcePosition += 4; destPosition += 4; } } } else if (sourceFormat == destFormat && sourcePremultiplied == destPremultiplied && sourceBytesPerPixel == destBytesPerPixel) { for (int y = 0; y < destView.height; y++) { sourcePosition = sourceView.Row (y); destPosition = destView.Row (y); memcpy (&destData[destPosition], &sourceData[sourcePosition], destView.width * destBytesPerPixel); } } else { for (int y = 0; y < destView.height; y++) { sourcePosition = sourceView.Row (y); destPosition = destView.Row (y); for (int x = 0; x < destView.width; x++) { sourcePixel.ReadUInt8 (sourceData, sourcePosition, sourceFormat, sourcePremultiplied, LIME_BIG_ENDIAN); sourcePixel.WriteUInt8 (destData, destPosition, destFormat, destPremultiplied); sourcePosition += 4; destPosition += 4; } } } } else { uint8_t* alphaData = (uint8_t*)alphaImage->buffer->data->buffer->b; PixelFormat alphaFormat = alphaImage->buffer->format; bool alphaPremultiplied = alphaImage->buffer->premultiplied; int alphaPosition; RGBA alphaPixel; Rectangle alphaRect = Rectangle (sourceView.x + alphaPoint->x, sourceView.y + alphaPoint->y, sourceView.width, sourceView.height); ImageDataView alphaView = ImageDataView (alphaImage, &alphaRect); destView.Clip (destPoint->x, destPoint->y, alphaView.width, alphaView.height); if (blend) { for (int y = 0; y < destView.height; y++) { sourcePosition = sourceView.Row (y); destPosition = destView.Row (y); alphaPosition = alphaView.Row (y); for (int x = 0; x < destView.width; x++) { sourcePixel.ReadUInt8 (sourceData, sourcePosition, sourceFormat, sourcePremultiplied, LIME_BIG_ENDIAN); destPixel.ReadUInt8 (destData, destPosition, destFormat, destPremultiplied, LIME_BIG_ENDIAN); alphaPixel.ReadUInt8 (alphaData, alphaPosition, alphaFormat, false, LIME_BIG_ENDIAN); sourceAlpha = (alphaPixel.a / 255.0) * (sourcePixel.a / 255.0); if (sourceAlpha > 0) { destAlpha = destPixel.a / 255.0; oneMinusSourceAlpha = 1 - sourceAlpha; blendAlpha = sourceAlpha + (destAlpha * oneMinusSourceAlpha); destPixel.r = __clamp[int (0.5 + (sourcePixel.r * sourceAlpha + destPixel.r * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; destPixel.g = __clamp[int (0.5 + (sourcePixel.g * sourceAlpha + destPixel.g * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; destPixel.b = __clamp[int (0.5 + (sourcePixel.b * sourceAlpha + destPixel.b * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; destPixel.a = __clamp[int (0.5 + blendAlpha * 255.0)]; destPixel.WriteUInt8 (destData, destPosition, destFormat, destPremultiplied); } sourcePosition += 4; destPosition += 4; alphaPosition += 4; } } } else { for (int y = 0; y < destView.height; y++) { sourcePosition = sourceView.Row (y); destPosition = destView.Row (y); alphaPosition = alphaView.Row (y); for (int x = 0; x < destView.width; x++) { sourcePixel.ReadUInt8 (sourceData, sourcePosition, sourceFormat, sourcePremultiplied, LIME_BIG_ENDIAN); alphaPixel.ReadUInt8 (alphaData, alphaPosition, alphaFormat, false, LIME_BIG_ENDIAN); sourcePixel.a = int (0.5 + (sourcePixel.a * (alphaPixel.a / 255.0))); sourcePixel.WriteUInt8 (destData, destPosition, destFormat, destPremultiplied); sourcePosition += 4; destPosition += 4; alphaPosition += 4; } } } } } void ImageDataUtil::FillRect (Image* image, Rectangle* rect, int32_t color) { uint8_t* data = (uint8_t*)image->buffer->data->buffer->b; PixelFormat format = image->buffer->format; bool premultiplied = image->buffer->premultiplied; RGBA fillColor (color); if (rect->x == 0 && rect->y == 0 && rect->width == image->width && rect->height == image->height) { if (fillColor.a == fillColor.r && fillColor.r == fillColor.g && fillColor.g == fillColor.b) { memset (data, fillColor.a, image->buffer->data->byteLength); return; } } ImageDataView dataView = ImageDataView (image, rect); int row; if (premultiplied) fillColor.MultiplyAlpha (); for (int y = 0; y < dataView.height; y++) { row = dataView.Row (y); for (int x = 0; x < dataView.width; x++) { fillColor.WriteUInt8 (data, row + (x * 4), format, false); } } } void ImageDataUtil::FloodFill (Image* image, int x, int y, int32_t color) { uint8_t* data = (uint8_t*)image->buffer->data->buffer->b; PixelFormat format = image->buffer->format; bool premultiplied = image->buffer->premultiplied; RGBA fillColor (color); if (premultiplied) fillColor.MultiplyAlpha (); RGBA hitColor; hitColor.ReadUInt8 (data, ((y + image->offsetY) * (image->buffer->width * 4)) + ((x + image->offsetX) * 4), format, premultiplied, LIME_BIG_ENDIAN); if (!image->buffer->transparent) { fillColor.a = 0xFF; hitColor.a = 0xFF; } if (fillColor == hitColor) return; int dx[4] = { 0, -1, 1, 0 }; int dy[4] = { -1, 0, 0, 1 }; int minX = -image->offsetX; int minY = -image->offsetY; int maxX = minX + image->width; int maxY = minY + image->height; QuickVec queue = QuickVec (); queue.push_back (x); queue.push_back (y); int curPointX, curPointY, i, nextPointX, nextPointY, nextPointOffset; RGBA readColor; while (queue.size () > 0) { curPointY = queue.qpop (); curPointX = queue.qpop (); for (i = 0; i < 4; i++) { nextPointX = curPointX + dx[i]; nextPointY = curPointY + dy[i]; if (nextPointX < minX || nextPointY < minY || nextPointX >= maxX || nextPointY >= maxY) { continue; } nextPointOffset = (nextPointY * image->width + nextPointX) * 4; readColor.ReadUInt8 (data, nextPointOffset, format, premultiplied, LIME_BIG_ENDIAN); if (readColor == hitColor) { fillColor.WriteUInt8 (data, nextPointOffset, format, false); queue.push_back (nextPointX); queue.push_back (nextPointY); } } } } void ImageDataUtil::GetPixels (Image* image, Rectangle* rect, PixelFormat format, Bytes* pixels) { int length = int (rect->width * rect->height); pixels->Resize (length * 4); uint8_t* data = (uint8_t*)image->buffer->data->buffer->b; uint8_t* destData = (uint8_t*)pixels->b; PixelFormat sourceFormat = image->buffer->format; bool premultiplied = image->buffer->premultiplied; ImageDataView dataView = ImageDataView (image, rect); int position, destPosition = 0; RGBA pixel; for (int y = 0; y < dataView.height; y++) { position = dataView.Row (y); for (int x = 0; x < dataView.width; x++) { pixel.ReadUInt8 (data, position, sourceFormat, premultiplied, LIME_BIG_ENDIAN); pixel.WriteUInt8 (destData, destPosition, format, false); position += 4; destPosition += 4; } } } void ImageDataUtil::Merge (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int redMultiplier, int greenMultiplier, int blueMultiplier, int alphaMultiplier) { ImageDataView sourceView = ImageDataView (sourceImage, sourceRect); Rectangle destRect = Rectangle (destPoint->x, destPoint->y, sourceView.width, sourceView.height); ImageDataView destView = ImageDataView (image, &destRect); uint8_t* sourceData = (uint8_t*)sourceImage->buffer->data->buffer->b; uint8_t* destData = (uint8_t*)image->buffer->data->buffer->b; PixelFormat sourceFormat = sourceImage->buffer->format; PixelFormat destFormat = image->buffer->format; bool sourcePremultiplied = sourceImage->buffer->premultiplied; bool destPremultiplied = image->buffer->premultiplied; int sourcePosition, destPosition; RGBA sourcePixel, destPixel; for (int y = 0; y < destView.height; y++) { sourcePosition = sourceView.Row (y); destPosition = destView.Row (y); for (int x = 0; x < destView.width; x++) { sourcePixel.ReadUInt8 (sourceData, sourcePosition, sourceFormat, sourcePremultiplied, LIME_BIG_ENDIAN); destPixel.ReadUInt8 (destData, destPosition, destFormat, destPremultiplied, LIME_BIG_ENDIAN); destPixel.r = int (((sourcePixel.r * redMultiplier) + (destPixel.r * (256 - redMultiplier))) / 256); destPixel.g = int (((sourcePixel.g * greenMultiplier) + (destPixel.g * (256 - greenMultiplier))) / 256); destPixel.b = int (((sourcePixel.b * blueMultiplier) + (destPixel.b * (256 - blueMultiplier))) / 256); destPixel.a = int (((sourcePixel.a * alphaMultiplier) + (destPixel.a * (256 - alphaMultiplier))) / 256); destPixel.WriteUInt8 (destData, destPosition, destFormat, destPremultiplied); sourcePosition += 4; destPosition += 4; } } } void ImageDataUtil::MultiplyAlpha (Image* image) { PixelFormat format = image->buffer->format; uint8_t* data = (uint8_t*)image->buffer->data->buffer->b; int length = int (image->buffer->data->length / 4); RGBA pixel; for (int i = 0; i < length; i++) { pixel.ReadUInt8 (data, i * 4, format, false, LIME_BIG_ENDIAN); pixel.WriteUInt8 (data, i * 4, format, true); } } void ImageDataUtil::Resize (Image* image, ImageBuffer* buffer, int newWidth, int newHeight) { int imageWidth = image->width; int imageHeight = image->height; uint8_t* data = (uint8_t*)image->buffer->data->buffer->b; uint8_t* newData = (uint8_t*)buffer->data->buffer->b; int sourceIndex, sourceIndexX, sourceIndexY, sourceIndexXY, index; int sourceX, sourceY; float u, v, uRatio, vRatio, uOpposite, vOpposite; for (int y = 0; y < newHeight; y++) { for (int x = 0; x < newWidth; x++) { u = ((x + 0.5) / newWidth) * imageWidth - 0.5; v = ((y + 0.5) / newHeight) * imageHeight - 0.5; sourceX = int (u); sourceY = int (v); sourceIndex = (sourceY * imageWidth + sourceX) * 4; sourceIndexX = (sourceX < imageWidth - 1) ? sourceIndex + 4 : sourceIndex; sourceIndexY = (sourceY < imageHeight - 1) ? sourceIndex + (imageWidth * 4) : sourceIndex; sourceIndexXY = (sourceIndexX != sourceIndex) ? sourceIndexY + 4 : sourceIndexY; index = (y * newWidth + x) * 4; uRatio = u - sourceX; vRatio = v - sourceY; uOpposite = 1 - uRatio; vOpposite = 1 - vRatio; newData[index] = int ((data[sourceIndex] * uOpposite + data[sourceIndexX] * uRatio) * vOpposite + (data[sourceIndexY] * uOpposite + data[sourceIndexXY] * uRatio) * vRatio); newData[index + 1] = int ((data[sourceIndex + 1] * uOpposite + data[sourceIndexX + 1] * uRatio) * vOpposite + (data[sourceIndexY + 1] * uOpposite + data[sourceIndexXY + 1] * uRatio) * vRatio); newData[index + 2] = int ((data[sourceIndex + 2] * uOpposite + data[sourceIndexX + 2] * uRatio) * vOpposite + (data[sourceIndexY + 2] * uOpposite + data[sourceIndexXY + 2] * uRatio) * vRatio); // Maybe it would be better to not weigh colors with an alpha of zero, but the below should help prevent black fringes caused by transparent pixels made visible if (data[sourceIndexX + 3] == 0 || data[sourceIndexY + 3] == 0 || data[sourceIndexXY + 3] == 0) { newData[index + 3] = 0; } else { newData[index + 3] = data[sourceIndex + 3]; } } } } void ImageDataUtil::SetFormat (Image* image, PixelFormat format) { int index; int length = image->buffer->data->length / 4; int r1, g1, b1, a1, r2, g2, b2, a2; int r, g, b, a; switch (image->buffer->format) { case RGBA32: r1 = 0; g1 = 1; b1 = 2; a1 = 3; break; case ARGB32: r1 = 1; g1 = 2; b1 = 3; a1 = 0; break; case BGRA32: r1 = 2; g1 = 1; b1 = 0; a1 = 3; break; } switch (format) { case RGBA32: r2 = 0; g2 = 1; b2 = 2; a2 = 3; break; case ARGB32: r2 = 1; g2 = 2; b2 = 3; a2 = 0; break; case BGRA32: r2 = 2; g2 = 1; b2 = 0; a2 = 3; break; } unsigned char* data = image->buffer->data->buffer->b; for (int i = 0; i < length; i++) { index = i * 4; r = data[index + r1]; g = data[index + g1]; b = data[index + b1]; a = data[index + a1]; data[index + r2] = r; data[index + g2] = g; data[index + b2] = b; data[index + a2] = a; } } void ImageDataUtil::SetPixels (Image* image, Rectangle* rect, Bytes* bytes, int offset, PixelFormat format, Endian endian) { uint8_t* data = (uint8_t*)image->buffer->data->buffer->b; PixelFormat sourceFormat = image->buffer->format; bool premultiplied = image->buffer->premultiplied; ImageDataView dataView = ImageDataView (image, rect); int row; RGBA pixel; uint8_t* byteArray = (uint8_t*)bytes->b; int srcPosition = offset; bool transparent = image->buffer->transparent; for (int y = 0; y < dataView.height; y++) { row = dataView.Row (y); for (int x = 0; x < dataView.width; x++) { pixel.ReadUInt8 (byteArray, srcPosition, format, false, endian); if (!transparent) pixel.a = 0xFF; pixel.WriteUInt8 (data, row + (x * 4), sourceFormat, premultiplied); srcPosition += 4; } } } int __pixelCompare (int32_t n1, int32_t n2) { int tmp1; int tmp2; tmp1 = (n1 >> 24) & 0xFF; tmp2 = (n2 >> 24) & 0xFF; if (tmp1 != tmp2) { return (tmp1 > tmp2 ? 1 : -1); } else { tmp1 = (n1 >> 16) & 0xFF; tmp2 = (n2 >> 16) & 0xFF; if (tmp1 != tmp2) { return (tmp1 > tmp2 ? 1 : -1); } else { tmp1 = (n1 >> 8) & 0xFF; tmp2 = (n2 >> 8) & 0xFF; if (tmp1 != tmp2) { return (tmp1 > tmp2 ? 1 : -1); } else { tmp1 = n1 & 0xFF; tmp2 = n2 & 0xFF; if (tmp1 != tmp2) { return (tmp1 > tmp2 ? 1 : -1); } else { return 0; } } } } return 0; } int ImageDataUtil::Threshold (Image* image, Image* sourceImage, Rectangle* sourceRect, Vector2* destPoint, int operation, int32_t threshold, int32_t color, int32_t mask, bool copySource) { RGBA _color (color); int hits = 0; uint8_t* srcData = (uint8_t*)sourceImage->buffer->data->buffer->b; uint8_t* destData = (uint8_t*)image->buffer->data->buffer->b; ImageDataView srcView = ImageDataView (sourceImage, sourceRect); Rectangle destRect = Rectangle (destPoint->x, destPoint->y, srcView.width, srcView.height); ImageDataView destView = ImageDataView (image, &destRect); PixelFormat srcFormat = sourceImage->buffer->format; PixelFormat destFormat = image->buffer->format; bool srcPremultiplied = sourceImage->buffer->premultiplied; bool destPremultiplied = image->buffer->premultiplied; int srcPosition, destPosition, value; RGBA srcPixel, destPixel; int32_t pixelMask; bool test; for (int y = 0; y < destView.height; y++) { srcPosition = srcView.Row (y); destPosition = destView.Row (y); for (int x = 0; x < destView.width; x++) { srcPixel.ReadUInt8 (srcData, srcPosition, srcFormat, srcPremultiplied, LIME_BIG_ENDIAN); pixelMask = srcPixel.Get () & mask; value = __pixelCompare (pixelMask, threshold); switch (operation) { case 0: test = (value != 0); break; case 1: test = (value == 0); break; case 2: test = (value == -1); break; case 3: test = (value == 0 || value == -1); break; case 4: test = (value == 1); break; case 5: test = (value == 0 || value == 1); break; } if (test) { _color.WriteUInt8 (destData, destPosition, destFormat, destPremultiplied); hits++; } else if (copySource) { srcPixel.WriteUInt8 (destData, destPosition, destFormat, destPremultiplied); } srcPosition += 4; destPosition += 4; } } return hits; } void ImageDataUtil::UnmultiplyAlpha (Image* image) { PixelFormat format = image->buffer->format; uint8_t* data = (uint8_t*)image->buffer->data->buffer->b; int length = int (image->buffer->data->length / 4); RGBA pixel; for (int i = 0; i < length; i++) { pixel.ReadUInt8 (data, i * 4, format, true, LIME_BIG_ENDIAN); pixel.WriteUInt8 (data, i * 4, format, false); } } ImageDataView::ImageDataView (Image* image, Rectangle* rect) { this->image = image; this->rect = Rectangle(rect->x, rect->y, rect->width, rect->height); if (this->rect.x < 0) this->rect.x = 0; if (this->rect.y < 0) this->rect.y = 0; if (this->rect.x + this->rect.width > image->width) this->rect.width = image->width - this->rect.x; if (this->rect.y + this->rect.height > image->height) this->rect.height = image->height - this->rect.y; if (this->rect.width < 0) this->rect.width = 0; if (this->rect.height < 0) this->rect.height = 0; stride = image->buffer->Stride (); __Update (); } void ImageDataView::Clip (int x, int y, int width, int height) { rect.Contract (x, y, width, height); __Update (); } inline bool ImageDataView::HasRow (int y) { return (y >= 0 && y < height); } void ImageDataView::Offset (int x, int y) { if (x < 0) { rect.x += x; if (rect.x < 0) rect.x = 0; } else { rect.x += x; rect.width -= x; } if (y < 0) { rect.y += y; if (rect.y < 0) rect.y = 0; } else { rect.y += y; rect.height -= y; } __Update (); } inline int ImageDataView::Row (int y) { return byteOffset + stride * y; } inline void ImageDataView::__Update () { this->x = (int) ceil (rect.x); this->y = (int) ceil (rect.y); this->width = (int) floor (rect.width); this->height = (int) floor (rect.height); byteOffset = (stride * (this->y + image->offsetY)) + ((this->x + image->offsetX) * 4); } } ================================================ FILE: project/src/hashlink_main.c ================================================ #ifdef HX_WIN_MAIN extern int wmain(int argc, wchar_t *argv[]); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { return wmain(__argc, __argv); } #endif ================================================ FILE: project/src/hx/CFFIExt.cpp ================================================ #define IMPLEMENT_CFFI_EXT #include ================================================ FILE: project/src/math/ColorMatrix.cpp ================================================ #include #include namespace lime { static int id_buffer; static bool init = false; ColorMatrix::ColorMatrix () { for (int i = 0; i < 20; i++) { if (i % 6 == 0) { data[i] = 1; } else { data[i] = 0; } } } ColorMatrix::ColorMatrix (value colorMatrix) { if (!init) { id_buffer = val_id ("buffer"); init = true; } value buffer_value = val_field (colorMatrix, id_buffer); Bytes bytes; bytes.Set (buffer_value); float* src = (float*)bytes.b; for (int i = 0; i < 20; i++) { data[i] = src[i]; } } ColorMatrix::ColorMatrix (ArrayBufferView* colorMatrix) { float* src = (float*)colorMatrix->buffer->b; for (int i = 0; i < 20; i++) { data[i] = src[i]; } } ColorMatrix::~ColorMatrix () { } float inline ColorMatrix::GetAlphaMultiplier () { return data[18]; } float inline ColorMatrix::GetAlphaOffset () { return data[19] * 255; } void ColorMatrix::GetAlphaTable (unsigned char* table) { GetDataTable (table, GetAlphaMultiplier (), GetAlphaOffset ()); table[0] = 0; } float inline ColorMatrix::GetBlueMultiplier () { return data[12]; } float inline ColorMatrix::GetBlueOffset () { return data[14] * 255; } void ColorMatrix::GetBlueTable (unsigned char* table) { GetDataTable (table, GetBlueMultiplier (), GetBlueOffset ()); } int32_t inline ColorMatrix::GetColor () { return ((int (GetRedOffset ()) << 16) | (int (GetGreenOffset ()) << 8) | int (GetBlueOffset ())); } void inline ColorMatrix::GetDataTable (unsigned char* table, float multiplier, float offset) { int32_t value; for (int i = 0; i < 256; i++) { value = (int)(i * multiplier + offset); if (value > 0xFF) value = 0xFF; if (value < 0) value = 0; table[i] = value; } } float inline ColorMatrix::GetGreenMultiplier () { return data[6]; } float inline ColorMatrix::GetGreenOffset () { return data[9] * 255; } void ColorMatrix::GetGreenTable (unsigned char* table) { GetDataTable (table, GetGreenMultiplier (), GetGreenOffset ()); } float inline ColorMatrix::GetRedMultiplier () { return data[0]; } float inline ColorMatrix::GetRedOffset () { return data[4] * 255; } void ColorMatrix::GetRedTable (unsigned char* table) { GetDataTable (table, GetRedMultiplier (), GetRedOffset ()); } } ================================================ FILE: project/src/math/Matrix3.cpp ================================================ #include namespace lime { static int id_a; static int id_b; static int id_c; static int id_d; static int id_tx; static int id_ty; static bool init = false; Matrix3::Matrix3 (double a, double b, double c, double d, double tx, double ty) { t = 0; SetTo (a, b, c, d, tx, ty); } Matrix3::Matrix3 (value mat3) { if (!init) { id_a = val_id ("a"); id_b = val_id ("b"); id_c = val_id ("c"); id_d = val_id ("d"); id_tx = val_id ("tx"); id_ty = val_id ("ty"); init = true; } a = val_number (val_field (mat3, id_a)); b = val_number (val_field (mat3, id_b)); c = val_number (val_field (mat3, id_c)); d = val_number (val_field (mat3, id_d)); tx = val_number (val_field (mat3, id_tx)); ty = val_number (val_field (mat3, id_ty)); } void Matrix3::SetTo (double a, double b, double c, double d, double tx, double ty) { this->a = a; this->b = b; this->c = c; this->d = d; this->tx = tx; this->ty = ty; } value Matrix3::Value () { return Value (alloc_empty_object ()); } value Matrix3::Value (value matrix3) { if (!init) { id_a = val_id ("a"); id_b = val_id ("b"); id_c = val_id ("c"); id_d = val_id ("d"); id_tx = val_id ("tx"); id_ty = val_id ("ty"); init = true; } alloc_field (matrix3, id_a, alloc_float (a)); alloc_field (matrix3, id_b, alloc_float (b)); alloc_field (matrix3, id_c, alloc_float (c)); alloc_field (matrix3, id_d, alloc_float (d)); alloc_field (matrix3, id_tx, alloc_float (tx)); alloc_field (matrix3, id_ty, alloc_float (ty)); return matrix3; } } ================================================ FILE: project/src/math/Rectangle.cpp ================================================ #include namespace lime { static int id_height; static int id_width; static int id_x; static int id_y; static bool init = false; Rectangle::Rectangle () { t = 0; SetTo (0, 0, 0, 0); } Rectangle::Rectangle (double x, double y, double width, double height) { t = 0; SetTo (x, y, width, height); } Rectangle::Rectangle (value rect) { if (!init) { id_height = val_id ("height"); id_width = val_id ("width"); id_x = val_id ("x"); id_y = val_id ("y"); init = true; } width = val_number (val_field (rect, id_width)); height = val_number (val_field (rect, id_height)); x = val_number (val_field (rect, id_x)); y = val_number (val_field (rect, id_y)); } void Rectangle::Contract (double x, double y, double width, double height) { if (this->width == 0 && this->height == 0) { return; } //double cacheRight = this->x + this->width; //double cacheBottom = this->y + this->height; if (this->x < x) this->x = x; if (this->y < y) this->y = y; if (this->x + this->width > x + width) this->width = x + width - this->x; if (this->y + this->height > y + height) this->height = y + height - this->y; } void Rectangle::SetTo (double x, double y, double width, double height) { this->height = height; this->width = width; this->x = x; this->y = y; } value Rectangle::Value () { return Value (alloc_empty_object ()); } value Rectangle::Value (value rect) { if (!init) { id_height = val_id ("height"); id_width = val_id ("width"); id_x = val_id ("x"); id_y = val_id ("y"); init = true; } alloc_field (rect, id_height, alloc_float (height)); alloc_field (rect, id_width, alloc_float (width)); alloc_field (rect, id_x, alloc_float (x)); alloc_field (rect, id_y, alloc_float (y)); return rect; } } ================================================ FILE: project/src/math/Vector2.cpp ================================================ #include namespace lime { static int id_x; static int id_y; static bool init = false; Vector2::Vector2 (double x, double y) { t = 0; SetTo (x, y); } Vector2::Vector2 (value vec) { if (!init) { id_x = val_id ("x"); id_y = val_id ("y"); init = true; } if (!val_is_null (vec)) { x = val_number (val_field (vec, id_x)); y = val_number (val_field (vec, id_y)); } else { x = 0; y = 0; } } void Vector2::SetTo (double x, double y) { this->x = x; this->y = y; } value Vector2::Value () { return Value (alloc_empty_object ()); } value Vector2::Value (value vec) { if (!init) { id_x = val_id ("x"); id_y = val_id ("y"); init = true; } alloc_field (vec, id_x, alloc_float (x)); alloc_field (vec, id_y, alloc_float (y)); return vec; } } ================================================ FILE: project/src/media/AudioBuffer.cpp ================================================ #include namespace lime { static int id_bitsPerSample; static int id_channels; static int id_data; static int id_sampleRate; static bool init = false; AudioBuffer::AudioBuffer (value audioBuffer) { if (!init) { id_bitsPerSample = val_id ("bitsPerSample"); id_channels = val_id ("channels"); id_data = val_id ("data"); id_sampleRate = val_id ("sampleRate"); init = true; } if (!val_is_null (audioBuffer)) { bitsPerSample = val_int (val_field (audioBuffer, id_bitsPerSample)); channels = val_int (val_field (audioBuffer, id_channels)); data = new ArrayBufferView (val_field (audioBuffer, id_data)); sampleRate = val_int (val_field (audioBuffer, id_sampleRate)); } else { bitsPerSample = 0; channels = 0; // data = new ArrayBufferView (); sampleRate = 0; } // _value = audioBuffer; } AudioBuffer::~AudioBuffer () { if (data) { delete data; } } value AudioBuffer::Value () { return Value (alloc_empty_object ()); } value AudioBuffer::Value (value audioBuffer) { if (!init) { id_bitsPerSample = val_id ("bitsPerSample"); id_channels = val_id ("channels"); id_data = val_id ("data"); id_sampleRate = val_id ("sampleRate"); init = true; } alloc_field (audioBuffer, id_bitsPerSample, alloc_int (bitsPerSample)); alloc_field (audioBuffer, id_channels, alloc_int (channels)); alloc_field (audioBuffer, id_data, data ? data->Value (val_field (audioBuffer, id_data)) : alloc_null ()); alloc_field (audioBuffer, id_sampleRate, alloc_int (sampleRate)); return audioBuffer; } } ================================================ FILE: project/src/media/codecs/vorbis/VorbisBindings.cpp ================================================ #include #include #include #include namespace lime { static int id_bitrateUpper; static int id_bitrateNominal; static int id_bitrateLower; static int id_bitstream; static int id_channels; static int id_high; static int id_low; static int id_rate; static int id_returnValue; static int id_version; static value infoValue; static value int64Value; static value readValue; static vdynamic *hl_infoValue; static vdynamic *hl_int64Value; static vdynamic *hl_readValue; static bool init = false; inline void _initializeVorbis () { if (!init) { id_bitrateUpper = val_id ("bitrateUpper"); id_bitrateNominal = val_id ("bitrateNominal"); id_bitrateLower = val_id ("bitrateLower"); id_bitstream = val_id ("bitstream"); id_channels = val_id ("channels"); id_high = val_id ("high"); id_low = val_id ("low"); id_rate = val_id ("rate"); id_returnValue = val_id ("returnValue"); id_version = val_id ("version"); infoValue = alloc_empty_object (); int64Value = alloc_empty_object (); readValue = alloc_empty_object (); value* root = alloc_root (); *root = infoValue; value* root2 = alloc_root (); *root2 = int64Value; value* root3 = alloc_root (); *root3 = readValue; init = true; } } inline void _hl_initializeVorbis () { if (!init) { id_bitrateUpper = hl_hash_utf8 ("bitrateUpper"); id_bitrateNominal = hl_hash_utf8 ("bitrateNominal"); id_bitrateLower = hl_hash_utf8 ("bitrateLower"); id_bitstream = hl_hash_utf8 ("bitstream"); id_channels = hl_hash_utf8 ("channels"); id_high = hl_hash_utf8 ("high"); id_low = hl_hash_utf8 ("low"); id_rate = hl_hash_utf8 ("rate"); id_returnValue = hl_hash_utf8 ("returnValue"); id_version = hl_hash_utf8 ("version"); hl_infoValue = (vdynamic*)hl_alloc_dynobj(); hl_int64Value = (vdynamic*)hl_alloc_dynobj(); hl_readValue = (vdynamic*)hl_alloc_dynobj(); hl_add_root(&hl_infoValue); hl_add_root(&hl_int64Value); hl_add_root(&hl_readValue); init = true; } } value allocInt64 (ogg_int64_t val) { ogg_int32_t low = val; ogg_int32_t high = (val >> 32); _initializeVorbis (); alloc_field (int64Value, id_low, alloc_int (low)); alloc_field (int64Value, id_high, alloc_int (high)); return int64Value; } vdynamic* hl_allocInt64 (ogg_int64_t val) { ogg_int32_t low = val; ogg_int32_t high = (val >> 32); _hl_initializeVorbis (); hl_dyn_seti (hl_int64Value, id_low, &hlt_i32, low); hl_dyn_seti (hl_int64Value, id_high, &hlt_i32, high); return hl_int64Value; } void lime_vorbis_file_clear (value vorbisFile); HL_PRIM void HL_NAME(hl_vorbis_file_clear) (HL_CFFIPointer* vorbisFile); void gc_vorbis_file (value vorbisFile) { lime_vorbis_file_clear (vorbisFile); } void hl_gc_vorbis_file (HL_CFFIPointer* vorbisFile) { lime_hl_vorbis_file_clear (vorbisFile); } int lime_vorbis_file_bitrate (value vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_bitrate (file, bitstream); } HL_PRIM int HL_NAME(hl_vorbis_file_bitrate) (HL_CFFIPointer* vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_bitrate (file, bitstream); } int lime_vorbis_file_bitrate_instant (value vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_bitrate_instant (file); } HL_PRIM int HL_NAME(hl_vorbis_file_bitrate_instant) (HL_CFFIPointer* vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_bitrate_instant (file); } void lime_vorbis_file_clear (value vorbisFile) { if (!val_is_null (vorbisFile)) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); val_gc (vorbisFile, 0); ov_clear (file); } } HL_PRIM void HL_NAME(hl_vorbis_file_clear) (HL_CFFIPointer* vorbisFile) { if (vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; vorbisFile->finalizer = 0; ov_clear (file); } } value lime_vorbis_file_comment (value vorbisFile, int bitstream) { return alloc_null (); } HL_PRIM vdynamic* HL_NAME(hl_vorbis_file_comment) (HL_CFFIPointer* vorbisFile, int bitstream) { return NULL; } value lime_vorbis_file_crosslap (value vorbisFile, value otherVorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); OggVorbis_File* otherFile = (OggVorbis_File*)(uintptr_t)val_data (otherVorbisFile); return alloc_int (ov_crosslap (file, otherFile)); } HL_PRIM int HL_NAME(hl_vorbis_file_crosslap) (HL_CFFIPointer* vorbisFile, HL_CFFIPointer* otherVorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; OggVorbis_File* otherFile = (OggVorbis_File*)(uintptr_t)otherVorbisFile->ptr; return ov_crosslap (file, otherFile); } value lime_vorbis_file_info (value vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); vorbis_info *info = ov_info (file, bitstream); if (info) { _initializeVorbis (); alloc_field (infoValue, id_version, alloc_int (info->version)); alloc_field (infoValue, id_channels, alloc_int (info->channels)); alloc_field (infoValue, id_rate, alloc_int (info->rate)); alloc_field (infoValue, id_bitrateUpper, alloc_int (info->bitrate_upper)); alloc_field (infoValue, id_bitrateNominal, alloc_int (info->bitrate_nominal)); alloc_field (infoValue, id_bitrateLower, alloc_int (info->bitrate_lower)); return infoValue; } return alloc_null (); } HL_PRIM vdynamic* HL_NAME(hl_vorbis_file_info) (HL_CFFIPointer* vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; vorbis_info *info = ov_info (file, bitstream); if (info) { _hl_initializeVorbis (); hl_dyn_seti (hl_infoValue, id_version, &hlt_i32, info->version); hl_dyn_seti (hl_infoValue, id_channels, &hlt_i32, info->channels); hl_dyn_seti (hl_infoValue, id_rate, &hlt_i32, info->rate); hl_dyn_seti (hl_infoValue, id_bitrateUpper, &hlt_i32, info->bitrate_upper); hl_dyn_seti (hl_infoValue, id_bitrateNominal, &hlt_i32, info->bitrate_nominal); hl_dyn_seti (hl_infoValue, id_bitrateLower, &hlt_i32, info->bitrate_lower); return hl_infoValue; } return NULL; } value lime_vorbis_file_from_bytes (value data) { Bytes bytes; bytes.Set (data); OggVorbis_File* vorbisFile = VorbisFile::FromBytes (&bytes); if (vorbisFile) { return CFFIPointer ((void*)(uintptr_t)vorbisFile, gc_vorbis_file); } return alloc_null (); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_vorbis_file_from_bytes) (Bytes* data) { OggVorbis_File* vorbisFile = VorbisFile::FromBytes (data); if (vorbisFile) { return HLCFFIPointer ((void*)(uintptr_t)vorbisFile, (hl_finalizer)hl_gc_vorbis_file); } return NULL; } value lime_vorbis_file_from_file (HxString path) { OggVorbis_File* vorbisFile = VorbisFile::FromFile (path.c_str ()); if (vorbisFile) { return CFFIPointer ((void*)(uintptr_t)vorbisFile, gc_vorbis_file); } return alloc_null (); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_vorbis_file_from_file) (hl_vstring* path) { OggVorbis_File* vorbisFile = VorbisFile::FromFile (path ? hl_to_utf8 (path->bytes) : NULL); if (vorbisFile) { return HLCFFIPointer ((void*)(uintptr_t)vorbisFile, (hl_finalizer)hl_gc_vorbis_file); } return NULL; } int lime_vorbis_file_pcm_seek (value vorbisFile, value posLow, value posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); ogg_int64_t pos = ((ogg_int64_t)val_number (posHigh) << 32) | (ogg_int64_t)val_number (posLow); return ov_pcm_seek (file, pos); } HL_PRIM int HL_NAME(hl_vorbis_file_pcm_seek) (HL_CFFIPointer* vorbisFile, int posLow, int posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; ogg_int64_t pos = ((ogg_int64_t)posHigh << 32) | (ogg_int64_t)posLow; return ov_pcm_seek (file, pos); } int lime_vorbis_file_pcm_seek_lap (value vorbisFile, value posLow, value posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); ogg_int64_t pos = ((ogg_int64_t)val_number (posHigh) << 32) | (ogg_int64_t)val_number (posLow); return ov_pcm_seek_lap (file, pos); } HL_PRIM int HL_NAME(hl_vorbis_file_pcm_seek_lap) (HL_CFFIPointer* vorbisFile, int posLow, int posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; ogg_int64_t pos = ((ogg_int64_t)posHigh << 32) | (ogg_int64_t)posLow; return ov_pcm_seek_lap (file, pos); } int lime_vorbis_file_pcm_seek_page (value vorbisFile, value posLow, value posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); ogg_int64_t pos = ((ogg_int64_t)val_number (posHigh) << 32) | (ogg_int64_t)val_number (posLow); return ov_pcm_seek_page (file, pos); } HL_PRIM int HL_NAME(hl_vorbis_file_pcm_seek_page) (HL_CFFIPointer* vorbisFile, int posLow, int posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; ogg_int64_t pos = ((ogg_int64_t)posHigh << 32) | (ogg_int64_t)posLow; return ov_pcm_seek_page (file, pos); } int lime_vorbis_file_pcm_seek_page_lap (value vorbisFile, value posLow, value posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); ogg_int64_t pos = ((ogg_int64_t)val_number (posHigh) << 32) | (ogg_int64_t)val_number (posLow); return ov_pcm_seek_page_lap (file, pos); } HL_PRIM int HL_NAME(hl_vorbis_file_pcm_seek_page_lap) (HL_CFFIPointer* vorbisFile, int posLow, int posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; ogg_int64_t pos = ((ogg_int64_t)posHigh << 32) | (ogg_int64_t)posLow; return ov_pcm_seek_page_lap (file, pos); } value lime_vorbis_file_pcm_tell (value vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return allocInt64 (ov_pcm_tell (file)); } HL_PRIM vdynamic* HL_NAME(hl_vorbis_file_pcm_tell) (HL_CFFIPointer* vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return hl_allocInt64 (ov_pcm_tell (file)); } value lime_vorbis_file_pcm_total (value vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return allocInt64 (ov_pcm_total (file, bitstream)); } HL_PRIM vdynamic* HL_NAME(hl_vorbis_file_pcm_total) (HL_CFFIPointer* vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return hl_allocInt64 (ov_pcm_total (file, bitstream)); } int lime_vorbis_file_raw_seek (value vorbisFile, value posLow, value posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); ogg_int64_t pos = ((ogg_int64_t)val_number (posHigh) << 32) | (ogg_int64_t)val_number (posLow); return ov_raw_seek (file, pos); } HL_PRIM int HL_NAME(hl_vorbis_file_raw_seek) (HL_CFFIPointer* vorbisFile, int posLow, int posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; ogg_int64_t pos = ((ogg_int64_t)posHigh << 32) | (ogg_int64_t)posLow; return ov_raw_seek (file, pos); } int lime_vorbis_file_raw_seek_lap (value vorbisFile, value posLow, value posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); ogg_int64_t pos = ((ogg_int64_t)val_number (posHigh) << 32) | (ogg_int64_t)val_number (posLow); return ov_raw_seek_lap (file, pos); } HL_PRIM int HL_NAME(hl_vorbis_file_raw_seek_lap) (HL_CFFIPointer* vorbisFile, int posLow, int posHigh) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; ogg_int64_t pos = ((ogg_int64_t)posHigh << 32) | (ogg_int64_t)posLow; return ov_raw_seek_lap (file, pos); } value lime_vorbis_file_raw_tell (value vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return allocInt64 (ov_raw_tell (file)); } HL_PRIM vdynamic* HL_NAME(hl_vorbis_file_raw_tell) (HL_CFFIPointer* vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return hl_allocInt64 (ov_raw_tell (file)); } value lime_vorbis_file_raw_total (value vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return allocInt64 (ov_raw_total (file, bitstream)); } HL_PRIM vdynamic* HL_NAME(hl_vorbis_file_raw_total) (HL_CFFIPointer* vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return hl_allocInt64 (ov_raw_total (file, bitstream)); } value lime_vorbis_file_read (value vorbisFile, value buffer, int position, int length, bool bigendianp, int word, bool sgned) { if (val_is_null (buffer)) { return alloc_null (); } Bytes bytes; bytes.Set (buffer); int bitstream; OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); long result = ov_read (file, (char*)bytes.b + position, length, bigendianp, word, sgned, &bitstream); _initializeVorbis (); alloc_field (readValue, id_bitstream, alloc_int (bitstream)); alloc_field (readValue, id_returnValue, alloc_int (result)); return readValue; } HL_PRIM vdynamic* HL_NAME(hl_vorbis_file_read) (HL_CFFIPointer* vorbisFile, Bytes* buffer, int position, int length, bool bigendianp, int word, bool sgned) { if (!buffer) { return NULL; } int bitstream; OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; long result = ov_read (file, (char*)buffer->b + position, length, bigendianp, word, sgned, &bitstream); _hl_initializeVorbis (); hl_dyn_seti (hl_readValue, id_bitstream, &hlt_i32, bitstream); hl_dyn_seti (hl_readValue, id_returnValue, &hlt_i32, result); return hl_readValue; } value lime_vorbis_file_read_float (value vorbisFile, value pcmChannels, int samples) { //Bytes bytes; //bytes.Set (pcmChannels); // //int bitstream; // //OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); //long result = ov_read_float (file, (char*)bytes.Data (), samples, &bitstream); // //alloc_field (readValue, id_bitstream, alloc_int (bitstream)); //alloc_field (readValue, id_returnValue, alloc_int (result)); // //return readValue; return alloc_null (); } HL_PRIM vdynamic* HL_NAME(hl_vorbis_file_read_float) (HL_CFFIPointer* vorbisFile, Bytes* pcmChannels, int samples) { return NULL; } bool lime_vorbis_file_seekable (value vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_seekable (file); } HL_PRIM bool HL_NAME(hl_vorbis_file_seekable) (HL_CFFIPointer* vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_seekable (file); } int lime_vorbis_file_serial_number (value vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_serialnumber (file, bitstream); } HL_PRIM int HL_NAME(hl_vorbis_file_serial_number) (HL_CFFIPointer* vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_serialnumber (file, bitstream); } int lime_vorbis_file_streams (value vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_streams (file); } HL_PRIM int HL_NAME(hl_vorbis_file_streams) (HL_CFFIPointer* vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_streams (file); } int lime_vorbis_file_time_seek (value vorbisFile, double s) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_time_seek (file, s); } HL_PRIM int HL_NAME(hl_vorbis_file_time_seek) (HL_CFFIPointer* vorbisFile, double s) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_time_seek (file, s); } int lime_vorbis_file_time_seek_lap (value vorbisFile, double s) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_time_seek_lap (file, s); } HL_PRIM int HL_NAME(hl_vorbis_file_time_seek_lap) (HL_CFFIPointer* vorbisFile, double s) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_time_seek_lap (file, s); } int lime_vorbis_file_time_seek_page (value vorbisFile, double s) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_time_seek_page (file, s); } HL_PRIM int HL_NAME(hl_vorbis_file_time_seek_page) (HL_CFFIPointer* vorbisFile, double s) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_time_seek_page (file, s); } int lime_vorbis_file_time_seek_page_lap (value vorbisFile, double s) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_time_seek_page_lap (file, s); } HL_PRIM int HL_NAME(hl_vorbis_file_time_seek_page_lap) (HL_CFFIPointer* vorbisFile, double s) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_time_seek_page_lap (file, s); } double lime_vorbis_file_time_tell (value vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_time_tell (file); } HL_PRIM double HL_NAME(hl_vorbis_file_time_tell) (HL_CFFIPointer* vorbisFile) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_time_tell (file); } double lime_vorbis_file_time_total (value vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)val_data (vorbisFile); return ov_time_total (file, bitstream); } HL_PRIM double HL_NAME(hl_vorbis_file_time_total) (HL_CFFIPointer* vorbisFile, int bitstream) { OggVorbis_File* file = (OggVorbis_File*)(uintptr_t)vorbisFile->ptr; return ov_time_total (file, bitstream); } DEFINE_PRIME2 (lime_vorbis_file_bitrate); DEFINE_PRIME1 (lime_vorbis_file_bitrate_instant); DEFINE_PRIME1v (lime_vorbis_file_clear); DEFINE_PRIME2 (lime_vorbis_file_comment); DEFINE_PRIME2v (lime_vorbis_file_crosslap); DEFINE_PRIME1 (lime_vorbis_file_from_bytes); DEFINE_PRIME1 (lime_vorbis_file_from_file); DEFINE_PRIME2 (lime_vorbis_file_info); DEFINE_PRIME3 (lime_vorbis_file_pcm_seek); DEFINE_PRIME3 (lime_vorbis_file_pcm_seek_lap); DEFINE_PRIME3 (lime_vorbis_file_pcm_seek_page); DEFINE_PRIME3 (lime_vorbis_file_pcm_seek_page_lap); DEFINE_PRIME1 (lime_vorbis_file_pcm_tell); DEFINE_PRIME2 (lime_vorbis_file_pcm_total); DEFINE_PRIME3 (lime_vorbis_file_raw_seek); DEFINE_PRIME3 (lime_vorbis_file_raw_seek_lap); DEFINE_PRIME1 (lime_vorbis_file_raw_tell); DEFINE_PRIME2 (lime_vorbis_file_raw_total); DEFINE_PRIME7 (lime_vorbis_file_read); DEFINE_PRIME3 (lime_vorbis_file_read_float); DEFINE_PRIME1 (lime_vorbis_file_seekable); DEFINE_PRIME2 (lime_vorbis_file_serial_number); DEFINE_PRIME1 (lime_vorbis_file_streams); DEFINE_PRIME2 (lime_vorbis_file_time_seek); DEFINE_PRIME2 (lime_vorbis_file_time_seek_lap); DEFINE_PRIME2 (lime_vorbis_file_time_seek_page); DEFINE_PRIME2 (lime_vorbis_file_time_seek_page_lap); DEFINE_PRIME1 (lime_vorbis_file_time_tell); DEFINE_PRIME2 (lime_vorbis_file_time_total); #define _TBYTES _OBJ (_I32 _BYTES) #define _TCFFIPOINTER _DYN DEFINE_HL_PRIM (_I32, hl_vorbis_file_bitrate, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_I32, hl_vorbis_file_bitrate_instant, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_vorbis_file_clear, _TCFFIPOINTER); DEFINE_HL_PRIM (_DYN, hl_vorbis_file_comment, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_I32, hl_vorbis_file_crosslap, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_DYN, hl_vorbis_file_info, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_vorbis_file_from_bytes, _TBYTES); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_vorbis_file_from_file, _STRING); DEFINE_HL_PRIM (_I32, hl_vorbis_file_pcm_seek, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_I32, hl_vorbis_file_pcm_seek_lap, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_I32, hl_vorbis_file_pcm_seek_page, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_I32, hl_vorbis_file_pcm_seek_page_lap, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_DYN, hl_vorbis_file_pcm_tell, _TCFFIPOINTER); DEFINE_HL_PRIM (_DYN, hl_vorbis_file_pcm_total, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_I32, hl_vorbis_file_raw_seek, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_I32, hl_vorbis_file_raw_seek_lap, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_DYN, hl_vorbis_file_raw_tell, _TCFFIPOINTER); DEFINE_HL_PRIM (_DYN, hl_vorbis_file_raw_total, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_DYN, hl_vorbis_file_read, _TCFFIPOINTER _TBYTES _I32 _I32 _BOOL _I32 _BOOL); DEFINE_HL_PRIM (_DYN, hl_vorbis_file_read_float, _TCFFIPOINTER _TBYTES _I32); DEFINE_HL_PRIM (_BOOL, hl_vorbis_file_seekable, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_vorbis_file_serial_number, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_I32, hl_vorbis_file_streams, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_vorbis_file_time_seek, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_I32, hl_vorbis_file_time_seek_lap, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_I32, hl_vorbis_file_time_seek_page, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_I32, hl_vorbis_file_time_seek_page_lap, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_F64, hl_vorbis_file_time_tell, _TCFFIPOINTER); DEFINE_HL_PRIM (_F64, hl_vorbis_file_time_total, _TCFFIPOINTER _I32); } extern "C" int lime_vorbis_register_prims () { return 0; } ================================================ FILE: project/src/media/codecs/vorbis/VorbisFile.cpp ================================================ #include #include namespace lime { typedef struct { unsigned char* data; ogg_int64_t size; ogg_int64_t pos; } VorbisFile_Buffer; static size_t VorbisFile_BufferRead (void* dest, size_t eltSize, size_t nelts, VorbisFile_Buffer* src) { size_t len = eltSize * nelts; if ((src->pos + len) > src->size) { len = src->size - src->pos; } if (len > 0) { memcpy (dest, (src->data + src->pos), len); src->pos += len; } return len; } static int VorbisFile_BufferSeek (VorbisFile_Buffer* src, ogg_int64_t pos, int whence) { switch (whence) { case SEEK_CUR: src->pos += pos; break; case SEEK_END: src->pos = src->size - pos; break; case SEEK_SET: src->pos = pos; break; default: return -1; } if (src->pos < 0) { src->pos = 0; return -1; } if (src->pos > src->size) { return -1; } return 0; } static int VorbisFile_BufferClose (VorbisFile_Buffer* src) { delete src; return 0; } static long VorbisFile_BufferTell (VorbisFile_Buffer* src) { return src->pos; } static ov_callbacks VORBIS_FILE_BUFFER_CALLBACKS = { (size_t (*)(void *, size_t, size_t, void *)) VorbisFile_BufferRead, (int (*)(void *, ogg_int64_t, int)) VorbisFile_BufferSeek, (int (*)(void *)) VorbisFile_BufferClose, (long (*)(void *)) VorbisFile_BufferTell }; static size_t VorbisFile_FileRead (void* dest, size_t eltSize, size_t nelts, FILE_HANDLE* file) { return lime::fread (dest, eltSize, nelts, file); } static int VorbisFile_FileSeek (FILE_HANDLE* file, ogg_int64_t pos, int whence) { return lime::fseek (file, pos, whence); } static int VorbisFile_FileClose (FILE_HANDLE* file) { return lime::fclose (file); } static long VorbisFile_FileTell (FILE_HANDLE* file) { return lime::ftell (file); } static ov_callbacks VORBIS_FILE_FILE_CALLBACKS = { (size_t (*)(void *, size_t, size_t, void *)) VorbisFile_FileRead, (int (*)(void *, ogg_int64_t, int)) VorbisFile_FileSeek, (int (*)(void *)) VorbisFile_FileClose, (long (*)(void *)) VorbisFile_FileTell }; OggVorbis_File* VorbisFile::FromBytes (Bytes* bytes) { OggVorbis_File* vorbisFile = new OggVorbis_File; memset (vorbisFile, 0, sizeof (OggVorbis_File)); VorbisFile_Buffer* buffer = new VorbisFile_Buffer (); buffer->data = bytes->b; buffer->size = bytes->length; buffer->pos = 0; if (ov_open_callbacks (buffer, vorbisFile, NULL, 0, VORBIS_FILE_BUFFER_CALLBACKS) != 0) { delete buffer; delete vorbisFile; return 0; } return vorbisFile; } OggVorbis_File* VorbisFile::FromFile (const char* path) { if (path) { FILE_HANDLE *file = lime::fopen (path, "rb"); if (file) { OggVorbis_File* vorbisFile = new OggVorbis_File; memset (vorbisFile, 0, sizeof (OggVorbis_File)); if (ov_open_callbacks (file, vorbisFile, NULL, 0, VORBIS_FILE_FILE_CALLBACKS) != 0) { delete vorbisFile; lime::fclose (file); return 0; } return vorbisFile; } } return 0; } } ================================================ FILE: project/src/media/containers/OGG.cpp ================================================ #include #include namespace lime { bool OGG::Decode (Resource *resource, AudioBuffer *audioBuffer) { OggVorbis_File* oggFile; Bytes *data = NULL; if (resource->path) { oggFile = VorbisFile::FromFile (resource->path); } else { oggFile = VorbisFile::FromBytes (resource->data); } if (!oggFile) { return false; } // 0 for Little-Endian, 1 for Big-Endian #ifdef HXCPP_BIG_ENDIAN #define BUFFER_READ_TYPE 1 #else #define BUFFER_READ_TYPE 0 #endif int bitStream; long bytes = 1; int totalBytes = 0; #define BUFFER_SIZE 4096 vorbis_info *pInfo = ov_info (oggFile, -1); if (pInfo == NULL) { //LOG_SOUND("FAILED TO READ OGG SOUND INFO, IS THIS EVEN AN OGG FILE?\n"); ov_clear (oggFile); delete oggFile; return false; } audioBuffer->channels = pInfo->channels; audioBuffer->sampleRate = pInfo->rate; audioBuffer->bitsPerSample = 16; int dataLength = ov_pcm_total (oggFile, -1) * audioBuffer->channels * audioBuffer->bitsPerSample / 8; audioBuffer->data->Resize (dataLength); while (bytes > 0) { bytes = ov_read (oggFile, (char *)audioBuffer->data->buffer->b + totalBytes, BUFFER_SIZE, BUFFER_READ_TYPE, 2, 1, &bitStream); if (bytes > 0) { totalBytes += bytes; } } if (dataLength != totalBytes) { audioBuffer->data->Resize (totalBytes); } ov_clear (oggFile); delete oggFile; #undef BUFFER_READ_TYPE return true; } } ================================================ FILE: project/src/media/containers/WAV.cpp ================================================ #include #include namespace lime { template inline const char* readStruct (T& dest, const char*& ptr) { const char* ret; memcpy (&dest, ptr, sizeof (T)); ptr += sizeof (WAVE_Data); ret = ptr; ptr += dest.subChunkSize; return ret; } const char* find_chunk (const char* start, const char* end, const char* chunkID) { WAVE_Data chunk; const char* ptr = start; while (ptr < (end - sizeof(WAVE_Data))) { memcpy (&chunk, ptr, sizeof (WAVE_Data)); if (chunk.subChunkID[0] == chunkID[0] && chunk.subChunkID[1] == chunkID[1] && chunk.subChunkID[2] == chunkID[2] && chunk.subChunkID[3] == chunkID[3]) { return ptr; } ptr += sizeof (WAVE_Data) + chunk.subChunkSize; } return 0; } bool WAV::Decode (Resource *resource, AudioBuffer *audioBuffer) { WAVE_Format wave_format; RIFF_Header riff_header; WAVE_Data wave_data; unsigned char* data; FILE_HANDLE *file = NULL; if (resource->path) { file = lime::fopen (resource->path, "rb"); if (!file) { return false; } int result = lime::fread (&riff_header, sizeof (RIFF_Header), 1, file); if ((riff_header.chunkID[0] != 'R' || riff_header.chunkID[1] != 'I' || riff_header.chunkID[2] != 'F' || riff_header.chunkID[3] != 'F') || (riff_header.format[0] != 'W' || riff_header.format[1] != 'A' || riff_header.format[2] != 'V' || riff_header.format[3] != 'E')) { lime::fclose (file); return false; } long int currentHead = 0; bool foundFormat = false; while (!foundFormat) { currentHead = lime::ftell (file); result = lime::fread (&wave_format, sizeof (WAVE_Format), 1, file); if (result != 1) { LOG_SOUND ("Invalid Wave Format!\n"); lime::fclose (file); return false; } if (wave_format.subChunkID[0] != 'f' || wave_format.subChunkID[1] != 'm' || wave_format.subChunkID[2] != 't' || wave_format.subChunkID[3] != ' ') { lime::fseek (file, currentHead + sizeof (WAVE_Data) + wave_format.subChunkSize, SEEK_SET); } else { foundFormat = true; } } bool foundData = false; while (!foundData) { currentHead = lime::ftell (file); result = lime::fread (&wave_data, sizeof (WAVE_Data), 1, file); if (result != 1) { LOG_SOUND ("Invalid Wav Data Header!\n"); lime::fclose (file); return false; } if (wave_data.subChunkID[0] != 'd' || wave_data.subChunkID[1] != 'a' || wave_data.subChunkID[2] != 't' || wave_data.subChunkID[3] != 'a') { lime::fseek (file, currentHead + sizeof (WAVE_Data) + wave_data.subChunkSize, SEEK_SET); } else { foundData = true; } } audioBuffer->data->Resize (wave_data.subChunkSize); if (!lime::fread (audioBuffer->data->buffer->b, wave_data.subChunkSize, 1, file)) { LOG_SOUND ("error loading WAVE data into struct!\n"); lime::fclose (file); return false; } lime::fclose (file); } else { const char* start = (const char*)resource->data->b; const char* end = start + resource->data->length; const char* ptr = start; memcpy (&riff_header, ptr, sizeof (RIFF_Header)); ptr += sizeof (RIFF_Header); if ((riff_header.chunkID[0] != 'R' || riff_header.chunkID[1] != 'I' || riff_header.chunkID[2] != 'F' || riff_header.chunkID[3] != 'F') || (riff_header.format[0] != 'W' || riff_header.format[1] != 'A' || riff_header.format[2] != 'V' || riff_header.format[3] != 'E')) { return false; } ptr = find_chunk (ptr, end, "fmt "); if (!ptr) { return false; } readStruct (wave_format, ptr); if (wave_format.subChunkID[0] != 'f' || wave_format.subChunkID[1] != 'm' || wave_format.subChunkID[2] != 't' || wave_format.subChunkID[3] != ' ') { LOG_SOUND ("Invalid Wave Format!\n"); return false; } ptr = find_chunk (ptr, end, "data"); if (!ptr) { return false; } const char* base = readStruct (wave_data, ptr); if (wave_data.subChunkID[0] != 'd' || wave_data.subChunkID[1] != 'a' || wave_data.subChunkID[2] != 't' || wave_data.subChunkID[3] != 'a') { LOG_SOUND ("Invalid Wav Data Header!\n"); return false; } audioBuffer->data->Resize (wave_data.subChunkSize); size_t size = wave_data.subChunkSize; if (size > (end - base)) { return false; } unsigned char* bytes = audioBuffer->data->buffer->b; memcpy (bytes, base, size); } audioBuffer->sampleRate = (int)wave_format.sampleRate; audioBuffer->channels = wave_format.numChannels; audioBuffer->bitsPerSample = wave_format.bitsPerSample; return true; } } ================================================ FILE: project/src/media/openal/OpenALBindings.cpp ================================================ #if defined (IPHONE) || defined (TVOS) || (defined (HX_MACOS) && !defined (LIME_OPENALSOFT)) #include #include #define LIME_OPENAL_DELETION_DELAY 600 #include #else #include "AL/al.h" #include "AL/alc.h" #ifdef LIME_OPENALSOFT // TODO: Can we support EFX on macOS? #include "AL/alext.h" #endif #endif #include #include #include #include #include #include namespace lime { #ifdef LIME_OPENAL_DELETION_DELAY std::list alDeletedBuffer; std::list alDeletedBufferTime; std::list alDeletedSource; std::list alDeletedSourceTime; #endif std::map alObjects; std::map alcObjects; Mutex al_gc_mutex; #ifdef LIME_OPENALSOFT void lime_al_delete_auxiliary_effect_slot (value aux); HL_PRIM void HL_NAME(hl_al_delete_auxiliary_effect_slot) (HL_CFFIPointer* aux); #endif void lime_al_delete_buffer (value buffer); void lime_al_delete_source (value source); HL_PRIM void HL_NAME(hl_al_delete_buffer) (HL_CFFIPointer* buffer); HL_PRIM void HL_NAME(hl_al_delete_source) (HL_CFFIPointer* source); #ifdef LIME_OPENALSOFT void lime_al_delete_effect (value effect); void lime_al_delete_filter (value filter); HL_PRIM void HL_NAME(hl_al_delete_effect) (HL_CFFIPointer* effect); HL_PRIM void HL_NAME(hl_al_delete_filter) (HL_CFFIPointer* filter); #endif void gc_al_buffer (value buffer) { lime_al_delete_buffer (buffer); } void hl_gc_al_buffer (HL_CFFIPointer* buffer) { lime_hl_al_delete_buffer (buffer); } #ifdef LIME_OPENALSOFT void gc_al_auxiliary_effect_slot (value aux) { lime_al_delete_auxiliary_effect_slot (aux); } void hl_gc_al_auxiliary_effect_slot (HL_CFFIPointer* aux) { lime_hl_al_delete_auxiliary_effect_slot (aux); } #endif void gc_al_source (value source) { lime_al_delete_source (source); } void hl_gc_al_source (HL_CFFIPointer* source) { lime_hl_al_delete_source (source); } #ifdef LIME_OPENALSOFT void gc_al_effect (value effect) { lime_al_delete_effect (effect); } void hl_gc_al_effect (HL_CFFIPointer* effect) { lime_hl_al_delete_effect (effect); } void gc_al_filter (value filter) { lime_al_delete_filter (filter); } void hl_gc_al_filter (HL_CFFIPointer* filter) { lime_hl_al_delete_filter (filter); } #endif void gc_alc_object (value object) { al_gc_mutex.Lock (); alcObjects.erase (val_data (object)); al_gc_mutex.Unlock (); } void hl_gc_alc_object (HL_CFFIPointer* object) { al_gc_mutex.Lock (); alcObjects.erase (object->ptr); al_gc_mutex.Unlock (); } /*This has been removed after updating to openal 1.20.0+ since the cleanup functions involved * lead to deadlocking. See https://github.com/openfl/lime/issues/1803 for more info. * Developers should use lime.system.System.exit() instead of Sys.exit() to clean up any system * resources */ /* void lime_al_atexit () { ALCcontext* alcContext = alcGetCurrentContext (); if (alcContext) { ALCdevice* alcDevice = alcGetContextsDevice (alcContext); alcMakeContextCurrent (0); alcDestroyContext (alcContext); if (alcDevice) { alcCloseDevice (alcDevice); } } } */ void lime_al_auxf (value aux, int param, float value) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (aux); alAuxiliaryEffectSlotf (id, param, value); #endif } HL_PRIM void HL_NAME(hl_al_auxf) (HL_CFFIPointer* aux, int param, float value) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)aux->ptr; alAuxiliaryEffectSlotf (id, param, value); #endif } void lime_al_auxfv (value aux, int param, value values) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (aux); if (!val_is_null (values)) { int size = val_array_size (values); ALfloat *data = new ALfloat[size]; for (int i = 0; i < size; ++i) { data[i] = (ALfloat)val_float (val_array_i (values, i)); } alAuxiliaryEffectSlotfv (id, param, data); delete[] data; } #endif } HL_PRIM void HL_NAME(hl_al_auxfv) (HL_CFFIPointer* aux, int param, varray* values) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)aux->ptr; if (values) { int size = values->size; alAuxiliaryEffectSlotfv (id, param, hl_aptr (values, float)); } #endif } void lime_al_auxi (value aux, int param, value val) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (aux); ALuint data; if (param == AL_EFFECTSLOT_EFFECT) { data = (ALuint)(uintptr_t)val_data (val); } else { data = val_int (val); } alAuxiliaryEffectSloti (id, param, data); #endif } HL_PRIM void HL_NAME(hl_al_auxi) (HL_CFFIPointer* aux, int param, vdynamic* val) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)aux->ptr; ALuint data; if (param == AL_EFFECTSLOT_EFFECT) { data = (ALuint)(uintptr_t)((HL_CFFIPointer*)val)->ptr; } else { data = val->v.i; } alAuxiliaryEffectSloti (id, param, data); #endif } void lime_al_auxiv (value aux, int param, value values) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (aux); if (!val_is_null (values)) { int size = val_array_size (values); ALint* data = new ALint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALint)val_int (val_array_i (values, i)); } alAuxiliaryEffectSlotiv (id, param, data); delete[] data; } #endif } HL_PRIM void HL_NAME(hl_al_auxiv) (HL_CFFIPointer* aux, int param, varray* values) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)aux->ptr; if (values) { alAuxiliaryEffectSlotiv (id, param, hl_aptr (values, int)); } #endif } void lime_al_buffer_data (value buffer, int format, value data, int size, int freq) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); ArrayBufferView bufferView (data); alBufferData (id, format, bufferView.buffer->b, size, freq); } HL_PRIM void HL_NAME(hl_al_buffer_data) (HL_CFFIPointer* buffer, int format, ArrayBufferView* data, int size, int freq) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; alBufferData (id, format, data->buffer->b, size, freq); } void lime_al_buffer3f (value buffer, int param, float value1, float value2, float value3) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); alBuffer3f (id, param, value1, value2, value3); } HL_PRIM void HL_NAME(hl_al_buffer3f) (HL_CFFIPointer* buffer, int param, float value1, float value2, float value3) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; alBuffer3f (id, param, value1, value2, value3); } void lime_al_buffer3i (value buffer, int param, int value1, int value2, int value3) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); alBuffer3i (id, param, value1, value2, value3); } HL_PRIM void HL_NAME(hl_al_buffer3i) (HL_CFFIPointer* buffer, int param, int value1, int value2, int value3) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; alBuffer3i (id, param, value1, value2, value3); } void lime_al_bufferf (value buffer, int param, float value) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); alBufferf (id, param, value); } HL_PRIM void HL_NAME(hl_al_bufferf) (HL_CFFIPointer* buffer, int param, float value) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; alBufferf (id, param, value); } void lime_al_bufferfv (value buffer, int param, value values) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); if (!val_is_null (values)) { int size = val_array_size (values); ALfloat *data = new ALfloat[size]; for (int i = 0; i < size; ++i) { data[i] = (ALfloat)val_float (val_array_i (values, i)); } alBufferfv (id, param, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_bufferfv) (HL_CFFIPointer* buffer, int param, varray* values) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; if (values) { int size = values->size; alBufferfv (id, param, hl_aptr (values, float)); } } void lime_al_bufferi (value buffer, int param, int value) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); alBufferi (id, param, value); } HL_PRIM void HL_NAME(hl_al_bufferi) (HL_CFFIPointer* buffer, int param, int value) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; alBufferi (id, param, value); } void lime_al_bufferiv (value buffer, int param, value values) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); if (!val_is_null (values)) { int size = val_array_size (values); ALint* data = new ALint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALint)val_int (val_array_i (values, i)); } alBufferiv (id, param, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_bufferiv) (HL_CFFIPointer* buffer, int param, varray* values) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; if (values) { alBufferiv (id, param, hl_aptr (values, int)); } } void lime_al_cleanup () { #ifdef LIME_OPENAL_DELETION_DELAY time_t currentTime = time (0); ALuint deletedData; time_t deletedTime; std::list::const_iterator itSource = alDeletedSource.begin (); std::list::const_iterator itSourceTime = alDeletedSourceTime.begin (); while (itSource != alDeletedSource.end ()) { deletedTime = *itSourceTime; if (difftime (currentTime, deletedTime) * 1000 > LIME_OPENAL_DELETION_DELAY) { ALuint deletedData = *itSource; alDeleteSources (1, &deletedData); itSource = alDeletedSource.erase (itSource); itSourceTime = alDeletedSourceTime.erase (itSourceTime); } else { ++itSource; ++itSourceTime; } } std::list::iterator itBuffer = alDeletedBuffer.begin (); std::list::iterator itBufferTime = alDeletedBufferTime.begin (); while (itBuffer != alDeletedBuffer.end ()) { deletedTime = *itBufferTime; if (difftime (currentTime, deletedTime) * 1000 > LIME_OPENAL_DELETION_DELAY) { ALuint deletedData = *itBuffer; alDeleteBuffers (1, &deletedData); itBuffer = alDeletedBuffer.erase (itBuffer); itBufferTime = alDeletedBufferTime.erase (itBufferTime); } else { ++itBuffer; ++itBufferTime; } } #endif } HL_PRIM void HL_NAME(hl_al_cleanup) () { lime_al_cleanup (); } void lime_al_delete_auxiliary_effect_slot (value aux) { #ifdef LIME_OPENALSOFT if (!val_is_null (aux)) { al_gc_mutex.Lock (); ALuint data = (ALuint)(uintptr_t)val_data (aux); val_gc (aux, 0); alDeleteAuxiliaryEffectSlots ((ALuint)1, &data); alObjects.erase (data); al_gc_mutex.Unlock (); } #endif } HL_PRIM void HL_NAME(hl_al_delete_auxiliary_effect_slot) (HL_CFFIPointer* aux) { #ifdef LIME_OPENALSOFT if (aux) { al_gc_mutex.Lock (); ALuint data = (ALuint)(uintptr_t)aux->ptr; aux->finalizer = 0; alDeleteAuxiliaryEffectSlots ((ALuint)1, &data); alObjects.erase (data); al_gc_mutex.Unlock (); } #endif } void lime_al_delete_buffer (value buffer) { if (!val_is_null (buffer)) { al_gc_mutex.Lock (); ALuint data = (ALuint)(uintptr_t)val_data (buffer); val_gc (buffer, 0); #ifdef LIME_OPENAL_DELETION_DELAY alDeletedBuffer.push_back (data); alDeletedBufferTime.push_back (time (0)); #else alDeleteBuffers ((ALuint)1, &data); #endif alObjects.erase (data); al_gc_mutex.Unlock (); } } HL_PRIM void HL_NAME(hl_al_delete_buffer) (HL_CFFIPointer* buffer) { if (buffer) { al_gc_mutex.Lock (); ALuint data = (ALuint)(uintptr_t)buffer->ptr; buffer->finalizer = 0; #ifdef LIME_OPENAL_DELETION_DELAY alDeletedBuffer.push_back (data); alDeletedBufferTime.push_back (time (0)); #else alDeleteBuffers ((ALuint)1, &data); #endif alObjects.erase (data); al_gc_mutex.Unlock (); } } void lime_al_delete_buffers (int n, value buffers) { if (!val_is_null (buffers)) { int size = val_array_size (buffers); value buffer; al_gc_mutex.Lock (); #ifdef LIME_OPENAL_DELETION_DELAY ALuint data; for (int i = 0; i < size; ++i) { buffer = val_array_i (buffers, i); data = (ALuint)(uintptr_t)val_data (buffer); alDeletedBuffer.push_back (data); alDeletedBufferTime.push_back (time (0)); val_gc (buffer, 0); alObjects.erase (data); } #else ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { buffer = val_array_i (buffers, i); data[i] = (ALuint)(uintptr_t)val_data (buffer); val_gc (buffer, 0); alObjects.erase (data[i]); } alDeleteBuffers (n, data); delete[] data; #endif al_gc_mutex.Unlock (); } } HL_PRIM void HL_NAME(hl_al_delete_buffers) (int n, varray* buffers) { if (buffers) { int size = buffers->size; HL_CFFIPointer** bufferData = hl_aptr (buffers, HL_CFFIPointer*); HL_CFFIPointer* buffer; al_gc_mutex.Lock (); #ifdef LIME_OPENAL_DELETION_DELAY ALuint data; for (int i = 0; i < size; ++i) { buffer = *bufferData++; data = (ALuint)(uintptr_t)buffer->ptr; alDeletedBuffer.push_back (data); alDeletedBufferTime.push_back (time (0)); buffer->finalizer = 0; alObjects.erase (data); } #else ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { buffer = *bufferData++; data[i] = (ALuint)(uintptr_t)buffer->ptr; buffer->finalizer = 0; alObjects.erase (data[i]); } alDeleteBuffers (n, data); delete[] data; #endif al_gc_mutex.Unlock (); } } void lime_al_delete_effect (value effect) { #ifdef LIME_OPENALSOFT if (!val_is_null (effect)) { ALuint data = (ALuint)(uintptr_t)val_data (effect); alDeleteEffects (1, &data); val_gc (effect, 0); } #endif } HL_PRIM void HL_NAME(hl_al_delete_effect) (HL_CFFIPointer* effect) { #ifdef LIME_OPENALSOFT if (effect) { ALuint data = (ALuint)(uintptr_t)effect->ptr; alDeleteEffects (1, &data); effect->finalizer = 0; } #endif } void lime_al_delete_filter (value filter) { #ifdef LIME_OPENALSOFT if (!val_is_null (filter)) { ALuint data = (ALuint)(uintptr_t)val_data (filter); alDeleteFilters (1, &data); val_gc (filter, 0); } #endif } HL_PRIM void HL_NAME(hl_al_delete_filter) (HL_CFFIPointer* filter) { #ifdef LIME_OPENALSOFT if (filter) { ALuint data = (ALuint)(uintptr_t)filter->ptr; alDeleteFilters (1, &data); filter->finalizer = 0; } #endif } void lime_al_delete_source (value source) { if (!val_is_null (source)) { ALuint data = (ALuint)(uintptr_t)val_data (source); val_gc (source, 0); #ifdef LIME_OPENAL_DELETION_DELAY al_gc_mutex.Lock (); alSourcei (data, AL_BUFFER, 0); alDeletedSource.push_back (data); alDeletedSourceTime.push_back (time (0)); al_gc_mutex.Unlock (); #else alDeleteSources (1, &data); #endif } } HL_PRIM void HL_NAME(hl_al_delete_source) (HL_CFFIPointer* source) { if (source) { ALuint data = (ALuint)(uintptr_t)source->ptr; source->finalizer = 0; #ifdef LIME_OPENAL_DELETION_DELAY al_gc_mutex.Lock (); alSourcei (data, AL_BUFFER, 0); alDeletedSource.push_back (data); alDeletedSourceTime.push_back (time (0)); al_gc_mutex.Unlock (); #else alDeleteSources (1, &data); #endif } } void lime_al_delete_sources (int n, value sources) { if (!val_is_null (sources)) { int size = val_array_size (sources); value source; #ifdef LIME_OPENAL_DELETION_DELAY al_gc_mutex.Lock (); ALuint data; for (int i = 0; i < size; ++i) { source = val_array_i (sources, i); data = (ALuint)(uintptr_t)val_data (source); alSourcei (data, AL_BUFFER, 0); alDeletedSource.push_back (data); alDeletedSourceTime.push_back (time (0)); val_gc (source, 0); } al_gc_mutex.Unlock (); #else ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { source = val_array_i (sources, i); data[i] = (ALuint)(uintptr_t)val_data (source); val_gc (source, 0); } alDeleteSources (n, data); delete[] data; #endif } } HL_PRIM void HL_NAME(hl_al_delete_sources) (int n, varray* sources) { if (sources) { int size = sources->size; HL_CFFIPointer** sourceData = hl_aptr (sources, HL_CFFIPointer*); HL_CFFIPointer* source; #ifdef LIME_OPENAL_DELETION_DELAY al_gc_mutex.Lock (); ALuint data; for (int i = 0; i < size; ++i) { source = *sourceData++; data = (ALuint)(uintptr_t)source->ptr; alSourcei (data, AL_BUFFER, 0); alDeletedSource.push_back (data); alDeletedSourceTime.push_back (time (0)); source->finalizer = 0; } al_gc_mutex.Unlock (); #else ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { source = *sourceData++; data[i] = (ALuint)(uintptr_t)source->ptr; source->finalizer = 0; } alDeleteSources (n, data); delete[] data; #endif } } void lime_al_disable (int capability) { alDisable (capability); } HL_PRIM void HL_NAME(hl_al_disable) (int capability) { alDisable (capability); } void lime_al_distance_model (int distanceModel) { alDistanceModel (distanceModel); } HL_PRIM void HL_NAME(hl_al_distance_model) (int distanceModel) { alDistanceModel (distanceModel); } void lime_al_doppler_factor (float factor) { alDopplerFactor (factor); } HL_PRIM void HL_NAME(hl_al_doppler_factor) (float factor) { alDopplerFactor (factor); } void lime_al_doppler_velocity (float velocity) { alDopplerVelocity (velocity); } HL_PRIM void HL_NAME(hl_al_doppler_velocity) (float velocity) { alDopplerVelocity (velocity); } void lime_al_effectf (value effect, int param, float value) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (effect); alEffectf (id, param, value); #endif } HL_PRIM void HL_NAME(hl_al_effectf) (HL_CFFIPointer* effect, int param, float value) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)effect->ptr; alEffectf (id, param, value); #endif } void lime_al_effectfv (value effect, int param, value values) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (effect); if (!val_is_null (values)) { int size = val_array_size (values); ALfloat *data = new ALfloat[size]; for (int i = 0; i < size; ++i) { data[i] = (ALfloat)val_float (val_array_i (values, i)); } alEffectfv (id, param, data); delete[] data; } #endif } HL_PRIM void HL_NAME(hl_al_effectfv) (HL_CFFIPointer* effect, int param, varray* values) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)effect->ptr; if (values) { int size = values->size; alEffectfv (id, param, hl_aptr (values, float)); } #endif } void lime_al_effecti (value effect, int param, int value) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (effect); alEffecti (id, param, value); #endif } HL_PRIM void HL_NAME(hl_al_effecti) (HL_CFFIPointer* effect, int param, int value) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)effect->ptr; alEffecti (id, param, value); #endif } void lime_al_effectiv (value effect, int param, value values) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (effect); if (!val_is_null (values)) { int size = val_array_size (values); ALint* data = new ALint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALint)val_int (val_array_i (values, i)); } alEffectiv (id, param, data); delete[] data; } #endif } HL_PRIM void HL_NAME(hl_al_effectiv) (HL_CFFIPointer* effect, int param, varray* values) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)effect->ptr; if (values) { alEffectiv (id, param, hl_aptr (values, int)); } #endif } void lime_al_enable (int capability) { alEnable (capability); } HL_PRIM void HL_NAME(hl_al_enable) (int capability) { alEnable (capability); } void lime_al_filteri (value filter, int param, value val) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (filter); ALuint data; data = val_int (val); alFilteri (id, param, data); #endif } HL_PRIM void HL_NAME(hl_al_filteri) (HL_CFFIPointer* filter, int param, int val) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)filter->ptr; ALuint data; data = val; alFilteri (id, param, data); #endif } void lime_al_filterf (value filter, int param, float value) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (filter); alFilterf (id, param, value); #endif } HL_PRIM void HL_NAME(hl_al_filterf) (HL_CFFIPointer* filter, int param, float value) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)filter->ptr; alFilterf (id, param, value); #endif } value lime_al_gen_aux () { #ifdef LIME_OPENALSOFT ALuint aux; alGenAuxiliaryEffectSlots ((ALuint)1, &aux); return CFFIPointer ((void*)(uintptr_t)aux, gc_al_auxiliary_effect_slot); #else return alloc_null (); #endif } HL_PRIM HL_CFFIPointer* HL_NAME(hl_al_gen_aux) () { #ifdef LIME_OPENALSOFT ALuint aux; alGenAuxiliaryEffectSlots ((ALuint)1, &aux); return HLCFFIPointer ((void*)(uintptr_t)aux, (hl_finalizer)hl_gc_al_auxiliary_effect_slot); #else return 0; #endif } value lime_al_gen_buffer () { alGetError (); ALuint buffer = 0; alGenBuffers ((ALuint)1, &buffer); if (alGetError () == AL_NO_ERROR) { al_gc_mutex.Lock (); value ptr = CFFIPointer ((void*)(uintptr_t)buffer, gc_al_buffer); alObjects[buffer] = ptr; al_gc_mutex.Unlock (); return ptr; } else { return alloc_null (); } } HL_PRIM HL_CFFIPointer* HL_NAME(hl_al_gen_buffer) () { alGetError (); ALuint buffer = 0; alGenBuffers ((ALuint)1, &buffer); if (alGetError () == AL_NO_ERROR) { al_gc_mutex.Lock (); HL_CFFIPointer* ptr = HLCFFIPointer ((void*)(uintptr_t)buffer, (hl_finalizer)hl_gc_al_buffer); alObjects[buffer] = ptr; al_gc_mutex.Unlock (); return ptr; } else { return 0; } } value lime_al_gen_buffers (int n) { alGetError (); ALuint* buffers = new ALuint[n]; alGenBuffers (n, buffers); if (alGetError () == AL_NO_ERROR) { value result = alloc_array (n); ALuint buffer; value ptr; al_gc_mutex.Lock (); for (int i = 0; i < n; i++) { buffer = buffers[i]; ptr = CFFIPointer ((void*)(uintptr_t)buffer, gc_al_buffer); alObjects[buffer] = ptr; val_array_set_i (result, i, ptr); } al_gc_mutex.Unlock (); delete[] buffers; return result; } else { delete[] buffers; return alloc_null (); } } HL_PRIM varray* HL_NAME(hl_al_gen_buffers) (int n) { alGetError (); ALuint* buffers = new ALuint[n]; alGenBuffers (n, buffers); if (alGetError () == AL_NO_ERROR) { varray* result = hl_alloc_array (&hlt_dyn, n); HL_CFFIPointer** resultData = hl_aptr (result, HL_CFFIPointer*); ALuint buffer; HL_CFFIPointer* ptr; al_gc_mutex.Lock (); for (int i = 0; i < n; i++) { buffer = buffers[i]; ptr = HLCFFIPointer ((void*)(uintptr_t)buffer, (hl_finalizer)hl_gc_al_buffer); alObjects[buffer] = ptr; *resultData++ = ptr; } al_gc_mutex.Unlock (); delete[] buffers; return result; } else { delete[] buffers; return NULL; } } value lime_al_gen_effect () { alGetError (); #ifdef LIME_OPENALSOFT ALuint effect; alGenEffects ((ALuint)1, &effect); if (alGetError () == AL_NO_ERROR) { return CFFIPointer ((void*)(uintptr_t)effect, gc_al_effect); } #endif return alloc_null (); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_al_gen_effect) () { alGetError (); #ifdef LIME_OPENALSOFT ALuint effect; alGenEffects ((ALuint)1, &effect); if (alGetError () == AL_NO_ERROR) { return HLCFFIPointer ((void*)(uintptr_t)effect, (hl_finalizer)hl_gc_al_effect); } #endif return NULL; } value lime_al_gen_filter () { alGetError (); #ifdef LIME_OPENALSOFT ALuint filter; alGenFilters ((ALuint)1, &filter); if (alGetError () == AL_NO_ERROR) { return CFFIPointer ((void*)(uintptr_t)filter, gc_al_filter); } #endif return alloc_null (); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_al_gen_filter) () { alGetError (); #ifdef LIME_OPENALSOFT ALuint filter; alGenFilters ((ALuint)1, &filter); if (alGetError () == AL_NO_ERROR) { return HLCFFIPointer ((void*)(uintptr_t)filter, (hl_finalizer)hl_gc_al_filter); } #endif return NULL; } value lime_al_gen_source () { alGetError (); ALuint source; alGenSources ((ALuint)1, &source); if (alGetError () == AL_NO_ERROR) { return CFFIPointer ((void*)(uintptr_t)source, gc_al_source); } else { return alloc_null (); } } HL_PRIM HL_CFFIPointer* HL_NAME(hl_al_gen_source) () { alGetError (); ALuint source; alGenSources ((ALuint)1, &source); if (alGetError () == AL_NO_ERROR) { return HLCFFIPointer ((void*)(uintptr_t)source, (hl_finalizer)hl_gc_al_source); } else { return NULL; } } value lime_al_gen_sources (int n) { alGetError (); ALuint* sources = new ALuint[n]; alGenSources (n, sources); if (alGetError () == AL_NO_ERROR) { value result = alloc_array (n); for (int i = 0; i < n; i++) { val_array_set_i (result, i, CFFIPointer ((void*)(uintptr_t)sources[i], gc_al_source)); } delete[] sources; return result; } else { delete[] sources; return alloc_null (); } } HL_PRIM varray* HL_NAME(hl_al_gen_sources) (int n) { alGetError (); ALuint* sources = new ALuint[n]; alGenSources (n, sources); if (alGetError () == AL_NO_ERROR) { varray* result = hl_alloc_array (&hlt_dyn, n); HL_CFFIPointer** resultData = hl_aptr (result, HL_CFFIPointer*); for (int i = 0; i < n; i++) { *resultData++ = HLCFFIPointer ((void*)(uintptr_t)sources[i], (hl_finalizer)hl_gc_al_source); } delete[] sources; return result; } else { delete[] sources; return NULL; } } bool lime_al_get_boolean (int param) { return alGetBoolean (param); } HL_PRIM bool HL_NAME(hl_al_get_boolean) (int param) { return alGetBoolean (param); } value lime_al_get_booleanv (int param, int count) { ALboolean* values = new ALboolean[count]; alGetBooleanv (param, values); value result = alloc_array (count); for (int i = 0; i < count; i++) { val_array_set_i (result, i, alloc_bool (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_booleanv) (int param, int count) { varray* result = hl_alloc_array (&hlt_bool, count); alGetBooleanv (param, (ALboolean*)hl_aptr (result, bool)); return result; } value lime_al_get_buffer3f (value buffer, int param) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); ALfloat val1, val2, val3; alGetBuffer3f (id, param, &val1, &val2, &val3); value result = alloc_array (3); val_array_set_i (result, 0, alloc_float (val1)); val_array_set_i (result, 1, alloc_float (val2)); val_array_set_i (result, 2, alloc_float (val3)); return result; } HL_PRIM varray* HL_NAME(hl_al_get_buffer3f) (HL_CFFIPointer* buffer, int param) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; varray* result = hl_alloc_array (&hlt_f32, 3); alGetBuffer3f (id, param, &hl_aptr (result, float)[0], &hl_aptr (result, float)[1], &hl_aptr (result, float)[2]); return result; } value lime_al_get_buffer3i (value buffer, int param) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); ALint val1, val2, val3; alGetBuffer3i (id, param, &val1, &val2, &val3); value result = alloc_array (3); val_array_set_i (result, 0, alloc_int (val1)); val_array_set_i (result, 1, alloc_int (val2)); val_array_set_i (result, 2, alloc_int (val3)); return result; } HL_PRIM varray* HL_NAME(hl_al_get_buffer3i) (HL_CFFIPointer* buffer, int param) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; varray* result = hl_alloc_array (&hlt_i32, 3); alGetBuffer3i (id, param, &hl_aptr (result, int)[0], &hl_aptr (result, int)[2], &hl_aptr (result, int)[3]); return result; } float lime_al_get_bufferf (value buffer, int param) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); ALfloat data; alGetBufferf (id, param, &data); return data; } HL_PRIM float HL_NAME(hl_al_get_bufferf) (HL_CFFIPointer* buffer, int param) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; ALfloat data; alGetBufferf (id, param, &data); return data; } value lime_al_get_bufferfv (value buffer, int param, int count) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); ALfloat* values = new ALfloat[count]; alGetBufferfv (id, param, values); value result = alloc_array (count); for (int i = 0; i < count; ++i) { val_array_set_i (result, i, alloc_float (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_bufferfv) (HL_CFFIPointer* buffer, int param, int count) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; varray* result = hl_alloc_array (&hlt_f32, count); alGetBufferfv (id, param, hl_aptr (result, float)); return result; } int lime_al_get_bufferi (value buffer, int param) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); ALint data; alGetBufferi (id, param, &data); return data; } HL_PRIM int HL_NAME(hl_al_get_bufferi) (HL_CFFIPointer* buffer, int param) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; ALint data; alGetBufferi (id, param, &data); return data; } value lime_al_get_bufferiv (value buffer, int param, int count) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); ALint* values = new ALint[count]; alGetBufferiv (id, param, values); value result = alloc_array (count); for (int i = 0; i < count; i++) { val_array_set_i (result, i, alloc_int (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_bufferiv) (HL_CFFIPointer* buffer, int param, int count) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; varray* result = hl_alloc_array (&hlt_i32, count); alGetBufferiv (id, param, hl_aptr (result, int)); return result; } double lime_al_get_double (int param) { return alGetDouble (param); } HL_PRIM double HL_NAME(hl_al_get_double) (int param) { return alGetDouble (param); } value lime_al_get_doublev (int param, int count) { ALdouble* values = new ALdouble[count]; alGetDoublev (param, values); value result = alloc_array (count); for (int i = 0; i < count; i++) { val_array_set_i (result, i, alloc_float (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_doublev) (int param, int count) { varray* result = hl_alloc_array (&hlt_f64, count); alGetDoublev (param, hl_aptr (result, double)); return result; } int lime_al_get_enum_value (HxString ename) { return alGetEnumValue (ename.__s); } HL_PRIM int HL_NAME(hl_al_get_enum_value) (hl_vstring* ename) { return alGetEnumValue (ename ? hl_to_utf8 (ename->bytes) : NULL); } int lime_al_get_error () { return alGetError (); } HL_PRIM int HL_NAME(hl_al_get_error) () { return alGetError (); } int lime_al_get_filteri (value filter, int param) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (filter); ALint data; alGetFilteri (id, param, &data); return data; #else return 0; #endif } HL_PRIM int HL_NAME(hl_al_get_filteri) (HL_CFFIPointer* filter, int param) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)filter->ptr; ALint data; alGetFilteri (id, param, &data); return data; #else return 0; #endif } float lime_al_get_float (int param) { return alGetFloat (param); } HL_PRIM float HL_NAME(hl_al_get_float) (int param) { return alGetFloat (param); } value lime_al_get_floatv (int param, int count) { ALfloat* values = new ALfloat[count]; alGetFloatv (param, values); value result = alloc_array (count); for (int i = 0; i < count; i++) { val_array_set_i (result, i, alloc_float (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_floatv) (int param, int count) { varray* result = hl_alloc_array (&hlt_f32, count); alGetFloatv (param, hl_aptr (result, float)); return result; } int lime_al_get_integer (int param) { return alGetInteger (param); } HL_PRIM int HL_NAME(hl_al_get_integer) (int param) { return alGetInteger (param); } value lime_al_get_integerv (int param, int count) { ALint* values = new ALint[count]; alGetIntegerv (param, values); value result = alloc_array (count); for (int i = 0; i < count; i++) { val_array_set_i (result, i, alloc_int (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_integerv) (int param, int count) { varray* result = hl_alloc_array (&hlt_i32, count); alGetIntegerv (param, hl_aptr (result, int)); return result; } value lime_al_get_listener3f (int param) { ALfloat val1, val2, val3; alGetListener3f (param, &val1, &val2, &val3); value result = alloc_array (3); val_array_set_i (result, 0, alloc_float (val1)); val_array_set_i (result, 1, alloc_float (val2)); val_array_set_i (result, 2, alloc_float (val3)); return result; } HL_PRIM varray* HL_NAME(hl_al_get_listener3f) (int param) { varray* result = hl_alloc_array (&hlt_f32, 3); alGetListener3f (param, &hl_aptr (result, float)[0], &hl_aptr (result, float)[2], &hl_aptr (result, float)[3]); return result; } value lime_al_get_listener3i (int param) { ALint val1, val2, val3; alGetListener3i (param, &val1, &val2, &val3); value result = alloc_array (3); val_array_set_i (result, 0, alloc_int (val1)); val_array_set_i (result, 1, alloc_int (val2)); val_array_set_i (result, 2, alloc_int (val3)); return result; } HL_PRIM varray* HL_NAME(hl_al_get_listener3i) (int param) { varray* result = hl_alloc_array (&hlt_i32, 3); alGetListener3i (param, &hl_aptr (result, int)[0], &hl_aptr (result, int)[2], &hl_aptr (result, int)[3]); return result; } float lime_al_get_listenerf (int param) { ALfloat data; alGetListenerf (param, &data); return data; } HL_PRIM float HL_NAME(hl_al_get_listenerf) (int param) { ALfloat data; alGetListenerf (param, &data); return data; } value lime_al_get_listenerfv (int param, int count) { ALfloat* values = new ALfloat[count]; alGetListenerfv (param, values); value result = alloc_array (count); for (int i = 0; i < count; i++) { val_array_set_i (result, i, alloc_float (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_listenerfv) (int param, int count) { varray* result = hl_alloc_array (&hlt_f32, count); alGetListenerfv (param, hl_aptr (result, float)); return result; } int lime_al_get_listeneri (int param) { ALint data; alGetListeneri (param, &data); return data; } HL_PRIM int HL_NAME(hl_al_get_listeneri) (int param) { ALint data; alGetListeneri (param, &data); return data; } value lime_al_get_listeneriv (int param, int count) { ALint* values = new ALint[count]; alGetListeneriv (param, values); value result = alloc_array (count); for (int i = 0; i < count; i++) { val_array_set_i (result, i, alloc_int (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_listeneriv) (int param, int count) { varray* result = hl_alloc_array (&hlt_i32, count); alGetListeneriv (param, hl_aptr (result, int)); return result; } double lime_al_get_proc_address (HxString fname) { return (uintptr_t)alGetProcAddress (fname.__s); } HL_PRIM double HL_NAME(hl_al_get_proc_address) (hl_vstring* fname) { return (uintptr_t)alGetProcAddress (fname ? hl_to_utf8 (fname->bytes) : NULL); } value lime_al_get_source3f (value source, int param) { ALuint id = (ALuint)(uintptr_t)val_data (source); ALfloat val1, val2, val3; alGetSource3f (id, param, &val1, &val2, &val3); value result = alloc_array (3); val_array_set_i (result, 0, alloc_float (val1)); val_array_set_i (result, 1, alloc_float (val2)); val_array_set_i (result, 2, alloc_float (val3)); return result; } HL_PRIM varray* HL_NAME(hl_al_get_source3f) (HL_CFFIPointer* source, int param) { ALuint id = (ALuint)(uintptr_t)source->ptr; varray* result = hl_alloc_array (&hlt_f32, 3); alGetSource3f (id, param, &hl_aptr (result, float)[0], &hl_aptr (result, float)[2], &hl_aptr (result, float)[3]); return result; } value lime_al_get_source3i (value source, int param) { ALuint id = (ALuint)(uintptr_t)val_data (source); ALint val1, val2, val3; alGetSource3i (id, param, &val1, &val2, &val3); value result = alloc_array (3); val_array_set_i (result, 1, alloc_int (val1)); val_array_set_i (result, 2, alloc_int (val2)); val_array_set_i (result, 3, alloc_int (val3)); return result; } HL_PRIM varray* HL_NAME(hl_al_get_source3i) (HL_CFFIPointer* source, int param) { ALuint id = (ALuint)(uintptr_t)source->ptr; varray* result = hl_alloc_array (&hlt_i32, 3); alGetSource3i (id, param, &hl_aptr (result, int)[0], &hl_aptr (result, int)[2], &hl_aptr (result, int)[3]); return result; } float lime_al_get_sourcef (value source, int param) { ALuint id = (ALuint)(uintptr_t)val_data (source); ALfloat data; alGetSourcef (id, param, &data); return data; } HL_PRIM float HL_NAME(hl_al_get_sourcef) (HL_CFFIPointer* source, int param) { ALuint id = (ALuint)(uintptr_t)source->ptr; ALfloat data; alGetSourcef (id, param, &data); return data; } value lime_al_get_sourcefv (value source, int param, int count) { ALuint id = (ALuint)(uintptr_t)val_data (source); ALfloat* values = new ALfloat[count]; alGetSourcefv (id, param, values); value result = alloc_array (count); for (int i = 0; i < count; i++) { val_array_set_i (result, i, alloc_float (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_sourcefv) (HL_CFFIPointer* source, int param, int count) { ALuint id = (ALuint)(uintptr_t)source->ptr; varray* result = hl_alloc_array (&hlt_f32, count); alGetSourcefv (id, param, hl_aptr (result, float)); return result; } value lime_al_get_sourcei (value source, int param) { ALuint id = (ALuint)(uintptr_t)val_data (source); ALint data; alGetSourcei (id, param, &data); if (param == AL_BUFFER) { if (alObjects.count (data) > 0) { return (value)alObjects[data]; } else { al_gc_mutex.Lock (); value ptr = CFFIPointer ((void*)(uintptr_t)data, gc_al_buffer); alObjects[data] = ptr; al_gc_mutex.Unlock (); return ptr; } } else { return alloc_int (data); } } HL_PRIM vdynamic* HL_NAME(hl_al_get_sourcei) (HL_CFFIPointer* source, int param) { ALuint id = (ALuint)(uintptr_t)source->ptr; ALint data; alGetSourcei (id, param, &data); if (param == AL_BUFFER) { if (alObjects.count (data) > 0) { return (vdynamic*)alObjects[data]; } else { al_gc_mutex.Lock (); HL_CFFIPointer* ptr = HLCFFIPointer ((void*)(uintptr_t)data, (hl_finalizer)hl_gc_al_buffer); alObjects[data] = ptr; al_gc_mutex.Unlock (); return (vdynamic*)ptr; } } else { vdynamic* result = hl_alloc_dynamic (&hlt_i32); result->v.i = data; return result; } } value lime_al_get_sourceiv (value source, int param, int count) { ALuint id = (ALuint)(uintptr_t)val_data (source); ALint* values = new ALint[count]; alGetSourceiv (id, param, values); value result = alloc_array (count); for (int i = 0; i < count; i++) { val_array_set_i (result, i, alloc_int (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_al_get_sourceiv) (HL_CFFIPointer* source, int param, int count) { ALuint id = (ALuint)(uintptr_t)source->ptr; varray* result = hl_alloc_array (&hlt_i32, count); alGetSourceiv (id, param, hl_aptr (result, int)); return result; } value lime_al_get_string (int param) { const char* result = alGetString (param); return result ? alloc_string (result) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_al_get_string) (int param) { const char* result = alGetString (param); int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); return (vbyte*)_result; } bool lime_al_is_aux (value aux) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (aux); return alIsAuxiliaryEffectSlot (id); #else return false; #endif } HL_PRIM bool HL_NAME(hl_al_is_aux) (HL_CFFIPointer* aux) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)aux->ptr; return alIsAuxiliaryEffectSlot (id); #else return false; #endif } bool lime_al_is_buffer (value buffer) { ALuint id = (ALuint)(uintptr_t)val_data (buffer); return alIsBuffer (id); } HL_PRIM bool HL_NAME(hl_al_is_buffer) (HL_CFFIPointer* buffer) { ALuint id = (ALuint)(uintptr_t)buffer->ptr; return alIsBuffer (id); } bool lime_al_is_effect (value effect) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (effect); return alIsEffect (id); #else return false; #endif } HL_PRIM bool HL_NAME(hl_al_is_effect) (HL_CFFIPointer* effect) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)effect->ptr; return alIsEffect (id); #else return false; #endif } bool lime_al_is_enabled (int capability) { return alIsEnabled (capability); } HL_PRIM bool HL_NAME(hl_al_is_enabled) (int capability) { return alIsEnabled (capability); } bool lime_al_is_extension_present (HxString extname) { #ifdef LIME_OPENALSOFT return alIsExtensionPresent (extname.__s); #else return false; #endif } HL_PRIM bool HL_NAME(hl_al_is_extension_present) (hl_vstring* extname) { #ifdef LIME_OPENALSOFT return alIsExtensionPresent (extname ? hl_to_utf8 (extname->bytes) : NULL); #else return false; #endif } bool lime_al_is_filter (value filter) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (filter); return alIsSource (id); #else return false; #endif } HL_PRIM bool HL_NAME(hl_al_is_filter) (HL_CFFIPointer* filter) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)filter->ptr; return alIsSource (id); #else return false; #endif } bool lime_al_is_source (value source) { ALuint id = (ALuint)(uintptr_t)val_data (source); return alIsSource (id); } HL_PRIM bool HL_NAME(hl_al_is_source) (HL_CFFIPointer* source) { ALuint id = (ALuint)(uintptr_t)source->ptr; return alIsSource (id); } void lime_al_listener3f (int param, float value1, float value2, float value3) { alListener3f (param, value1, value2, value3); } HL_PRIM void HL_NAME(hl_al_listener3f) (int param, float value1, float value2, float value3) { alListener3f (param, value1, value2, value3); } void lime_al_listener3i (int param, int value1, int value2, int value3) { alListener3i (param, value1, value2, value3); } HL_PRIM void HL_NAME(hl_al_listener3i) (int param, int value1, int value2, int value3) { alListener3i (param, value1, value2, value3); } void lime_al_listenerf (int param, float value1) { alListenerf (param, value1); } HL_PRIM void HL_NAME(hl_al_listenerf) (int param, float value1) { alListenerf (param, value1); } void lime_al_listenerfv (int param, value values) { if (!val_is_null (values)) { int size = val_array_size (values); ALfloat *data = new ALfloat[size]; for (int i = 0; i < size; ++i) { data[i] = (ALfloat)val_float (val_array_i (values, i)); } alListenerfv (param, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_listenerfv) (int param, varray* values) { if (values) { int size = values->size; alListenerfv (param, hl_aptr (values, float)); } } void lime_al_listeneri (int param, int value1) { alListeneri (param, value1); } HL_PRIM void HL_NAME(hl_al_listeneri) (int param, int value1) { alListeneri (param, value1); } void lime_al_listeneriv (int param, value values) { if (!val_is_null (values)) { int size = val_array_size (values); ALint* data = new ALint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALint)val_int (val_array_i (values, i)); } alListeneriv (param, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_listeneriv) (int param, varray* values) { if (values) { int size = values->size; alListeneriv (param, hl_aptr (values, int)); } } void lime_al_remove_direct_filter (value source) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (source); alSourcei (id, AL_DIRECT_FILTER, AL_FILTER_NULL); #endif } HL_PRIM void HL_NAME(hl_al_remove_direct_filter) (HL_CFFIPointer* source) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)source->ptr; alSourcei (id, AL_DIRECT_FILTER, AL_FILTER_NULL); #endif } void lime_al_remove_send (value source, int index) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)val_data (source); alSource3i (id, AL_AUXILIARY_SEND_FILTER, AL_EFFECTSLOT_NULL, index, 0); #endif } HL_PRIM void HL_NAME(hl_al_remove_send) (HL_CFFIPointer* source, int index) { #ifdef LIME_OPENALSOFT ALuint id = (ALuint)(uintptr_t)source->ptr; alSource3i (id, AL_AUXILIARY_SEND_FILTER, AL_EFFECTSLOT_NULL, index, 0); #endif } void lime_al_source_pause (value source) { ALuint id = (ALuint)(uintptr_t)val_data (source); alSourcePause (id); } HL_PRIM void HL_NAME(hl_al_source_pause) (HL_CFFIPointer* source) { ALuint id = (ALuint)(uintptr_t)source->ptr; alSourcePause (id); } void lime_al_source_pausev (int n, value sources) { if (!val_is_null (sources)) { int size = val_array_size (sources); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)val_data (val_array_i (sources, i)); } alSourcePausev (n, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_source_pausev) (int n, varray* sources) { if (sources) { int size = sources->size; HL_CFFIPointer** sourcesData = hl_aptr (sources, HL_CFFIPointer*); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)(*sourcesData++)->ptr; } alSourcePausev (n, data); delete[] data; } } void lime_al_source_play (value source) { ALuint id = (ALuint)(uintptr_t)val_data (source); alSourcePlay (id); } HL_PRIM void HL_NAME(hl_al_source_play) (HL_CFFIPointer* source) { ALuint id = (ALuint)(uintptr_t)source->ptr; alSourcePlay (id); } void lime_al_source_playv (int n, value sources) { if (!val_is_null (sources)) { int size = val_array_size (sources); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)val_data (val_array_i (sources, i)); } alSourcePlayv (n, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_source_playv) (int n, varray* sources) { if (sources) { int size = sources->size; HL_CFFIPointer** sourcesData = hl_aptr (sources, HL_CFFIPointer*); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)(*sourcesData++)->ptr; } alSourcePlayv (n, data); delete[] data; } } void lime_al_source_queue_buffers (value source, int nb, value buffers) { ALuint id = (ALuint)(uintptr_t)val_data (source); if (!val_is_null (buffers)) { int size = val_array_size (buffers); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)val_data (val_array_i (buffers, i)); } alSourceQueueBuffers (id, nb, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_source_queue_buffers) (HL_CFFIPointer* source, int nb, varray* buffers) { ALuint id = (ALuint)(uintptr_t)source->ptr; if (buffers) { int size = buffers->size; HL_CFFIPointer** buffersData = hl_aptr (buffers, HL_CFFIPointer*); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)(*buffersData++)->ptr; } alSourceQueueBuffers (id, nb, data); delete[] data; } } void lime_al_source_rewind (value source) { ALuint id = (ALuint)(uintptr_t)val_data (source); alSourceRewind (id); } HL_PRIM void HL_NAME(hl_al_source_rewind) (HL_CFFIPointer* source) { ALuint id = (ALuint)(uintptr_t)source->ptr; alSourceRewind (id); } void lime_al_source_rewindv (int n, value sources) { if (!val_is_null (sources)) { int size = val_array_size (sources); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)val_data (val_array_i (sources, i)); } alSourceRewindv (n, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_source_rewindv) (int n, varray* sources) { if (sources) { int size = sources->size; HL_CFFIPointer** sourcesData = hl_aptr (sources, HL_CFFIPointer*); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)(*sourcesData++)->ptr; } alSourceRewindv (n, data); delete[] data; } } void lime_al_source_stop (value source) { ALuint id = (ALuint)(uintptr_t)val_data (source); alSourceStop (id); } HL_PRIM void HL_NAME(hl_al_source_stop) (HL_CFFIPointer* source) { ALuint id = (ALuint)(uintptr_t)source->ptr; alSourceStop (id); } void lime_al_source_stopv (int n, value sources) { if (!val_is_null (sources)) { int size = val_array_size (sources); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)val_data (val_array_i (sources, i)); } alSourceStopv (n, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_source_stopv) (int n, varray* sources) { if (sources) { int size = sources->size; HL_CFFIPointer** sourcesData = hl_aptr (sources, HL_CFFIPointer*); ALuint* data = new ALuint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALuint)(uintptr_t)(*sourcesData++)->ptr; } alSourceStopv (n, data); delete[] data; } } value lime_al_source_unqueue_buffers (value source, int nb) { ALuint id = (ALuint)(uintptr_t)val_data (source); ALuint* buffers = new ALuint[nb]; alSourceUnqueueBuffers (id, nb, buffers); value result = alloc_array (nb); ALuint buffer; value ptr; for (int i = 0; i < nb; i++) { buffer = buffers[i]; if (alObjects.count (buffer) > 0) { ptr = (value)alObjects[buffer]; } else { al_gc_mutex.Lock (); ptr = CFFIPointer ((void*)(uintptr_t)buffer, gc_al_buffer); alObjects[buffer] = ptr; al_gc_mutex.Unlock (); } val_array_set_i (result, i, ptr); } delete[] buffers; return result; } HL_PRIM varray* HL_NAME(hl_al_source_unqueue_buffers) (HL_CFFIPointer* source, int nb) { ALuint id = (ALuint)(uintptr_t)source->ptr; ALuint* buffers = new ALuint[nb]; alSourceUnqueueBuffers (id, nb, buffers); varray* result = hl_alloc_array (&hlt_dyn, nb); HL_CFFIPointer** resultData = hl_aptr (result, HL_CFFIPointer*); ALuint buffer; HL_CFFIPointer* ptr; for (int i = 0; i < nb; i++) { buffer = buffers[i]; if (alObjects.count (buffer) > 0) { ptr = (HL_CFFIPointer*)alObjects[buffer]; } else { al_gc_mutex.Lock (); ptr = HLCFFIPointer ((void*)(uintptr_t)buffer, (hl_finalizer)hl_gc_al_buffer); alObjects[buffer] = ptr; al_gc_mutex.Unlock (); } *resultData++ = ptr; } delete[] buffers; return result; } void lime_al_source3f (value source, int param, float value1, float value2, float value3) { ALuint id = (ALuint)(uintptr_t)val_data (source); alSource3f (id, param, value1, value2, value3); } HL_PRIM void HL_NAME(hl_al_source3f) (HL_CFFIPointer* source, int param, float value1, float value2, float value3) { ALuint id = (ALuint)(uintptr_t)source->ptr; alSource3f (id, param, value1, value2, value3); } void lime_al_source3i (value source, int param, value value1, int value2, int value3) { ALuint id = (ALuint)(uintptr_t)val_data (source); ALuint data1; #ifdef LIME_OPENALSOFT if (param == AL_AUXILIARY_SEND_FILTER) { data1 = (ALuint)(uintptr_t)val_data (value1); } else { data1 = val_int (value1); } #else data1 = val_int (value1); #endif alSource3i (id, param, data1, value2, value3); } HL_PRIM void HL_NAME(hl_al_source3i) (HL_CFFIPointer* source, int param, vdynamic* value1, int value2, int value3) { ALuint id = (ALuint)(uintptr_t)source->ptr; ALuint data1; #ifdef LIME_OPENALSOFT if (param == AL_AUXILIARY_SEND_FILTER) { data1 = (ALuint)(uintptr_t)((HL_CFFIPointer*)value1)->ptr; } else { data1 = value1->v.i; } #else data1 = value1->v.i; #endif alSource3i (id, param, data1, value2, value3); } void lime_al_sourcef (value source, int param, float value) { ALuint id = (ALuint)(uintptr_t)val_data (source); alSourcef (id, param, value); } HL_PRIM void HL_NAME(hl_al_sourcef) (HL_CFFIPointer* source, int param, float value) { ALuint id = (ALuint)(uintptr_t)source->ptr; alSourcef (id, param, value); } void lime_al_sourcefv (value source, int param, value values) { ALuint id = (ALuint)(uintptr_t)val_data (source); if (!val_is_null (values)) { int size = val_array_size (values); ALfloat *data = new ALfloat[size]; for (int i = 0; i < size; ++i) { data[i] = (ALfloat)val_float (val_array_i (values, i)); } alSourcefv (id, param, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_sourcefv) (HL_CFFIPointer* source, int param, varray* values) { ALuint id = (ALuint)(uintptr_t)source->ptr; if (values) { int size = values->size; alSourcefv (id, param, hl_aptr (values, float)); } } void lime_al_sourcei (value source, int param, value val) { ALuint id = (ALuint)(uintptr_t)val_data (source); ALuint data = 0; if (!val_is_null (val)) { #ifdef LIME_OPENALSOFT if (param == AL_BUFFER || param == AL_DIRECT_FILTER) { data = (ALuint)(uintptr_t)val_data (val); } else { data = val_int (val); } #else if (param == AL_BUFFER) { data = (ALuint)(uintptr_t)val_data (val); } else { data = val_int (val); } #endif } alSourcei (id, param, data); } HL_PRIM void HL_NAME(hl_al_sourcei) (HL_CFFIPointer* source, int param, vdynamic* val) { ALuint id = (ALuint)(uintptr_t)source->ptr; ALuint data = 0; if (val) { #ifdef LIME_OPENALSOFT if (param == AL_BUFFER || param == AL_DIRECT_FILTER) { data = (ALuint)(uintptr_t)((HL_CFFIPointer*)val)->ptr; } else { data = val->v.i; } #else if (param == AL_BUFFER) { data = (ALuint)(uintptr_t)((HL_CFFIPointer*)val)->ptr; } else { data = val->v.i; } #endif } alSourcei (id, param, data); } void lime_al_sourceiv (value source, int param, value values) { ALuint id = (ALuint)(uintptr_t)val_data (source); if (!val_is_null (values)) { int size = val_array_size (values); ALint* data = new ALint[size]; for (int i = 0; i < size; ++i) { data[i] = (ALint)val_int (val_array_i (values, i)); } alSourceiv (id, param, data); delete[] data; } } HL_PRIM void HL_NAME(hl_al_sourceiv) (HL_CFFIPointer* source, int param, varray* values) { ALuint id = (ALuint)(uintptr_t)source->ptr; if (values) { int size = values->size; alSourceiv (id, param, hl_aptr (values, int)); } } void lime_al_speed_of_sound (float speed) { alSpeedOfSound (speed); } HL_PRIM void HL_NAME(hl_al_speed_of_sound) (float speed) { alSpeedOfSound (speed); } bool lime_alc_close_device (value device) { al_gc_mutex.Lock (); ALCdevice* alcDevice = (ALCdevice*)val_data (device); alcObjects.erase (alcDevice); al_gc_mutex.Unlock (); return alcCloseDevice (alcDevice); } HL_PRIM bool HL_NAME(hl_alc_close_device) (HL_CFFIPointer* device) { al_gc_mutex.Lock (); ALCdevice* alcDevice = (ALCdevice*)device->ptr; alcObjects.erase (alcDevice); al_gc_mutex.Unlock (); return alcCloseDevice (alcDevice); } value lime_alc_create_context (value device, value attrlist) { ALCdevice* alcDevice = (ALCdevice*)val_data (device); ALCint* list = NULL; if (!val_is_null (attrlist)) { int size = val_array_size (attrlist); list = new ALCint[size]; for (int i = 0; i < size; ++i) { list[i] = (ALCint)val_int (val_array_i (attrlist, i)); } } ALCcontext* alcContext = alcCreateContext (alcDevice, list); if (list != NULL) { delete[] list; } al_gc_mutex.Lock (); value object = CFFIPointer (alcContext, gc_alc_object); alcObjects[alcContext] = object; al_gc_mutex.Unlock (); return object; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_alc_create_context) (HL_CFFIPointer* device, varray* attrlist) { ALCdevice* alcDevice = (ALCdevice*)device->ptr; ALCcontext* alcContext = alcCreateContext (alcDevice, attrlist ? hl_aptr (attrlist, int) : NULL); al_gc_mutex.Lock (); HL_CFFIPointer* object = HLCFFIPointer (alcContext, (hl_finalizer)hl_gc_alc_object); alcObjects[alcContext] = object; al_gc_mutex.Unlock (); return object; } void lime_alc_destroy_context (value context) { al_gc_mutex.Lock (); ALCcontext* alcContext = (ALCcontext*)val_data (context); if (alcObjects.find (alcContext) != alcObjects.end ()) { alcObjects.erase (alcContext); } if (alcContext == alcGetCurrentContext ()) { alcMakeContextCurrent (0); } alcDestroyContext (alcContext); al_gc_mutex.Unlock (); } HL_PRIM void HL_NAME(hl_alc_destroy_context) (HL_CFFIPointer* context) { al_gc_mutex.Lock (); ALCcontext* alcContext = (ALCcontext*)context->ptr; if (alcObjects.find (alcContext) != alcObjects.end ()) { alcObjects.erase (alcContext); } if (alcContext == alcGetCurrentContext ()) { alcMakeContextCurrent (0); } alcDestroyContext (alcContext); al_gc_mutex.Unlock (); } value lime_alc_get_contexts_device (value context) { ALCcontext* alcContext = (ALCcontext*)val_data (context); ALCdevice* alcDevice = alcGetContextsDevice (alcContext); value result; al_gc_mutex.Lock (); if (alcObjects.find (alcDevice) != alcObjects.end ()) { result = (value)alcObjects[alcDevice]; } else { value object = CFFIPointer (alcDevice, gc_alc_object); alcObjects[alcDevice] = object; result = object; } al_gc_mutex.Unlock (); return result; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_alc_get_contexts_device) (HL_CFFIPointer* context) { ALCcontext* alcContext = (ALCcontext*)context->ptr; ALCdevice* alcDevice = alcGetContextsDevice (alcContext); HL_CFFIPointer* result; al_gc_mutex.Lock (); if (alcObjects.find (alcDevice) != alcObjects.end ()) { result = (HL_CFFIPointer*)alcObjects[alcDevice]; } else { HL_CFFIPointer* object = HLCFFIPointer (alcDevice, (hl_finalizer)hl_gc_alc_object); alcObjects[alcDevice] = object; result = object; } al_gc_mutex.Unlock (); return result; } value lime_alc_get_current_context () { ALCcontext* alcContext = alcGetCurrentContext (); value result; al_gc_mutex.Lock (); if (alcObjects.find (alcContext) != alcObjects.end ()) { result = (value)alcObjects[alcContext]; } else { value object = CFFIPointer (alcContext, gc_alc_object); alcObjects[alcContext] = object; result = object; } al_gc_mutex.Unlock (); return result; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_alc_get_current_context) () { ALCcontext* alcContext = alcGetCurrentContext (); HL_CFFIPointer* result; al_gc_mutex.Lock (); if (alcObjects.find (alcContext) != alcObjects.end ()) { result = (HL_CFFIPointer*)alcObjects[alcContext]; } else { HL_CFFIPointer* object = HLCFFIPointer (alcContext, (hl_finalizer)hl_gc_alc_object); alcObjects[alcContext] = object; result = object; } al_gc_mutex.Unlock (); return result; } int lime_alc_get_error (value device) { ALCdevice* alcDevice = (ALCdevice*)val_data (device); return alcGetError (alcDevice); } HL_PRIM int HL_NAME(hl_alc_get_error) (HL_CFFIPointer* device) { ALCdevice* alcDevice = (ALCdevice*)device->ptr; return alcGetError (alcDevice); } value lime_alc_get_integerv (value device, int param, int size) { ALCdevice* alcDevice = (ALCdevice*)val_data (device); ALCint* values = new ALCint[size]; alcGetIntegerv (alcDevice, param, size, values); value result = alloc_array (size); for (int i = 0; i < size; i++) { val_array_set_i (result, i, alloc_int (values[i])); } delete[] values; return result; } HL_PRIM varray* HL_NAME(hl_alc_get_integerv) (HL_CFFIPointer* device, int param, int size) { ALCdevice* alcDevice = (ALCdevice*)device->ptr; varray* result = hl_alloc_array (&hlt_i32, size); alcGetIntegerv (alcDevice, param, size, hl_aptr (result, int)); return result; } value lime_alc_get_string (value device, int param) { ALCdevice* alcDevice = (ALCdevice*)val_data (device); const char* result = alcGetString (alcDevice, param); return result ? alloc_string (result) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_alc_get_string) (HL_CFFIPointer* device, int param) { ALCdevice* alcDevice = device ? (ALCdevice*)device->ptr : 0; const char* result = alcGetString (alcDevice, param); int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); return (vbyte*)_result; } bool lime_alc_make_context_current (value context) { ALCcontext* alcContext = (ALCcontext*)val_data (context); return alcMakeContextCurrent (alcContext); } HL_PRIM bool HL_NAME(hl_alc_make_context_current) (HL_CFFIPointer* context) { ALCcontext* alcContext = context ? (ALCcontext*)context->ptr : 0; return alcMakeContextCurrent (alcContext); } value lime_alc_open_device (HxString devicename) { ALCdevice* alcDevice = alcOpenDevice (devicename.__s); //TODO: Can we work out our own cleanup for openal? //atexit (lime_al_atexit); value ptr = CFFIPointer (alcDevice, gc_alc_object); alcObjects[alcDevice] = ptr; return ptr; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_alc_open_device) (hl_vstring* devicename) { ALCdevice* alcDevice = alcOpenDevice (devicename ? (char*)hl_to_utf8 ((const uchar*)devicename->bytes) : 0); //TODO: Can we work out our own cleanup for openal? //atexit (lime_al_atexit); HL_CFFIPointer* ptr = HLCFFIPointer (alcDevice, (hl_finalizer)hl_gc_alc_object); alcObjects[alcDevice] = ptr; return ptr; } void lime_alc_pause_device (value device) { #ifdef LIME_OPENALSOFT ALCdevice* alcDevice = (ALCdevice*)val_data (device); alcDevicePauseSOFT (alcDevice); #endif } HL_PRIM void HL_NAME(hl_alc_pause_device) (HL_CFFIPointer* device) { #ifdef LIME_OPENALSOFT ALCdevice* alcDevice = (ALCdevice*)device->ptr; alcDevicePauseSOFT (alcDevice); #endif } void lime_alc_process_context (value context) { ALCcontext* alcContext = (ALCcontext*)val_data (context); alcProcessContext (alcContext); } HL_PRIM void HL_NAME(hl_alc_process_context) (HL_CFFIPointer* context) { ALCcontext* alcContext = (ALCcontext*)context->ptr; alcProcessContext (alcContext); } void lime_alc_resume_device (value device) { #ifdef LIME_OPENALSOFT ALCdevice* alcDevice = (ALCdevice*)val_data (device); alcDeviceResumeSOFT (alcDevice); #endif } HL_PRIM void HL_NAME(hl_alc_resume_device) (HL_CFFIPointer* device) { #ifdef LIME_OPENALSOFT ALCdevice* alcDevice = device ? (ALCdevice*)device->ptr : NULL; alcDeviceResumeSOFT (alcDevice); #endif } void lime_alc_suspend_context (value context) { ALCcontext* alcContext = (ALCcontext*)val_data (context); alcSuspendContext (alcContext); } HL_PRIM void HL_NAME(hl_alc_suspend_context) (HL_CFFIPointer* context) { ALCcontext* alcContext = context ? (ALCcontext*)context->ptr : NULL; alcSuspendContext (alcContext); } DEFINE_PRIME3v (lime_al_auxf); DEFINE_PRIME3v (lime_al_auxfv); DEFINE_PRIME3v (lime_al_auxi); DEFINE_PRIME3v (lime_al_auxiv); DEFINE_PRIME5v (lime_al_buffer_data); DEFINE_PRIME5v (lime_al_buffer3f); DEFINE_PRIME5v (lime_al_buffer3i); DEFINE_PRIME3v (lime_al_bufferf); DEFINE_PRIME3v (lime_al_bufferfv); DEFINE_PRIME3v (lime_al_bufferi); DEFINE_PRIME3v (lime_al_bufferiv); DEFINE_PRIME0v (lime_al_cleanup); DEFINE_PRIME1v (lime_al_delete_auxiliary_effect_slot); DEFINE_PRIME1v (lime_al_delete_buffer); DEFINE_PRIME2v (lime_al_delete_buffers); DEFINE_PRIME1v (lime_al_delete_effect); DEFINE_PRIME1v (lime_al_delete_filter); DEFINE_PRIME1v (lime_al_delete_source); DEFINE_PRIME2v (lime_al_delete_sources); DEFINE_PRIME1v (lime_al_disable); DEFINE_PRIME1v (lime_al_distance_model); DEFINE_PRIME1v (lime_al_doppler_factor); DEFINE_PRIME1v (lime_al_doppler_velocity); DEFINE_PRIME3v (lime_al_effectf); DEFINE_PRIME3v (lime_al_effectfv); DEFINE_PRIME3v (lime_al_effecti); DEFINE_PRIME3v (lime_al_effectiv); DEFINE_PRIME1v (lime_al_enable); DEFINE_PRIME3v (lime_al_filteri); DEFINE_PRIME3v (lime_al_filterf); DEFINE_PRIME0 (lime_al_gen_aux); DEFINE_PRIME0 (lime_al_gen_buffer); DEFINE_PRIME1 (lime_al_gen_buffers); DEFINE_PRIME0 (lime_al_gen_effect); DEFINE_PRIME0 (lime_al_gen_filter); DEFINE_PRIME0 (lime_al_gen_source); DEFINE_PRIME1 (lime_al_gen_sources); DEFINE_PRIME1 (lime_al_get_boolean); DEFINE_PRIME2 (lime_al_get_booleanv); DEFINE_PRIME2 (lime_al_get_buffer3f); DEFINE_PRIME2 (lime_al_get_buffer3i); DEFINE_PRIME2 (lime_al_get_bufferf); DEFINE_PRIME3 (lime_al_get_bufferfv); DEFINE_PRIME2 (lime_al_get_bufferi); DEFINE_PRIME3 (lime_al_get_bufferiv); DEFINE_PRIME1 (lime_al_get_double); DEFINE_PRIME2 (lime_al_get_doublev); DEFINE_PRIME1 (lime_al_get_enum_value); DEFINE_PRIME0 (lime_al_get_error); DEFINE_PRIME2 (lime_al_get_filteri); DEFINE_PRIME1 (lime_al_get_float); DEFINE_PRIME2 (lime_al_get_floatv); DEFINE_PRIME1 (lime_al_get_integer); DEFINE_PRIME2 (lime_al_get_integerv); DEFINE_PRIME1 (lime_al_get_listener3f); DEFINE_PRIME1 (lime_al_get_listener3i); DEFINE_PRIME1 (lime_al_get_listenerf); DEFINE_PRIME2 (lime_al_get_listenerfv); DEFINE_PRIME1 (lime_al_get_listeneri); DEFINE_PRIME2 (lime_al_get_listeneriv); DEFINE_PRIME1 (lime_al_get_proc_address); DEFINE_PRIME2 (lime_al_get_source3f); DEFINE_PRIME2 (lime_al_get_source3i); DEFINE_PRIME2 (lime_al_get_sourcef); DEFINE_PRIME3 (lime_al_get_sourcefv); DEFINE_PRIME2 (lime_al_get_sourcei); DEFINE_PRIME3 (lime_al_get_sourceiv); DEFINE_PRIME1 (lime_al_get_string); DEFINE_PRIME1 (lime_al_is_aux); DEFINE_PRIME1 (lime_al_is_buffer); DEFINE_PRIME1 (lime_al_is_effect); DEFINE_PRIME1 (lime_al_is_enabled); DEFINE_PRIME1 (lime_al_is_extension_present); DEFINE_PRIME1 (lime_al_is_filter); DEFINE_PRIME1 (lime_al_is_source); DEFINE_PRIME4v (lime_al_listener3f); DEFINE_PRIME4v (lime_al_listener3i); DEFINE_PRIME2v (lime_al_listenerf); DEFINE_PRIME2v (lime_al_listenerfv); DEFINE_PRIME2v (lime_al_listeneri); DEFINE_PRIME2v (lime_al_listeneriv); DEFINE_PRIME1v (lime_al_remove_direct_filter); DEFINE_PRIME2v (lime_al_remove_send); DEFINE_PRIME1v (lime_al_source_pause); DEFINE_PRIME2v (lime_al_source_pausev); DEFINE_PRIME1v (lime_al_source_play); DEFINE_PRIME2v (lime_al_source_playv); DEFINE_PRIME3v (lime_al_source_queue_buffers); DEFINE_PRIME1v (lime_al_source_rewind); DEFINE_PRIME2v (lime_al_source_rewindv); DEFINE_PRIME1v (lime_al_source_stop); DEFINE_PRIME2v (lime_al_source_stopv); DEFINE_PRIME2 (lime_al_source_unqueue_buffers); DEFINE_PRIME5v (lime_al_source3f); DEFINE_PRIME5v (lime_al_source3i); DEFINE_PRIME3v (lime_al_sourcef); DEFINE_PRIME3v (lime_al_sourcefv); DEFINE_PRIME3v (lime_al_sourcei); DEFINE_PRIME3v (lime_al_sourceiv); DEFINE_PRIME1v (lime_al_speed_of_sound); DEFINE_PRIME2 (lime_alc_create_context); DEFINE_PRIME1 (lime_alc_close_device); DEFINE_PRIME1v (lime_alc_destroy_context); DEFINE_PRIME1 (lime_alc_get_contexts_device); DEFINE_PRIME0 (lime_alc_get_current_context); DEFINE_PRIME1 (lime_alc_get_error); DEFINE_PRIME3 (lime_alc_get_integerv); DEFINE_PRIME2 (lime_alc_get_string); DEFINE_PRIME1 (lime_alc_make_context_current); DEFINE_PRIME1 (lime_alc_open_device); DEFINE_PRIME1v (lime_alc_pause_device); DEFINE_PRIME1v (lime_alc_process_context); DEFINE_PRIME1v (lime_alc_resume_device); DEFINE_PRIME1v (lime_alc_suspend_context); #define _TBYTES _OBJ (_I32 _BYTES) #define _TCFFIPOINTER _DYN #define _TDEVICE _ABSTRACT (alc_device) #define _TCONTEXT _ABSTRACT (alc_context) #define _TARRAYBUFFER _TBYTES #define _TARRAYBUFFERVIEW _OBJ (_I32 _TARRAYBUFFER _I32 _I32 _I32 _I32) DEFINE_HL_PRIM (_VOID, hl_al_auxf, _TCFFIPOINTER _I32 _F32); DEFINE_HL_PRIM (_VOID, hl_al_auxfv, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_auxi, _TCFFIPOINTER _I32 _DYN); DEFINE_HL_PRIM (_VOID, hl_al_auxiv, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_buffer_data, _TCFFIPOINTER _I32 _TARRAYBUFFERVIEW _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_buffer3f, _TCFFIPOINTER _I32 _F32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_al_buffer3i, _TCFFIPOINTER _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_bufferf, _TCFFIPOINTER _I32 _F32); DEFINE_HL_PRIM (_VOID, hl_al_bufferfv, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_bufferi, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_bufferiv, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_cleanup, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_al_delete_auxiliary_effect_slot, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_delete_buffer, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_delete_buffers, _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_delete_effect, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_delete_filter, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_delete_source, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_delete_sources, _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_disable, _I32); DEFINE_HL_PRIM (_VOID, hl_al_distance_model, _I32); DEFINE_HL_PRIM (_VOID, hl_al_doppler_factor, _F32); DEFINE_HL_PRIM (_VOID, hl_al_doppler_velocity, _F32); DEFINE_HL_PRIM (_VOID, hl_al_effectf, _TCFFIPOINTER _I32 _F32); DEFINE_HL_PRIM (_VOID, hl_al_effectfv, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_effecti, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_effectiv, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_enable, _I32); DEFINE_HL_PRIM (_VOID, hl_al_filteri, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_filterf, _TCFFIPOINTER _I32 _F32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_al_gen_aux, _NO_ARG); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_al_gen_buffer, _NO_ARG); DEFINE_HL_PRIM (_ARR, hl_al_gen_buffers, _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_al_gen_effect, _NO_ARG); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_al_gen_filter, _NO_ARG); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_al_gen_source, _NO_ARG); DEFINE_HL_PRIM (_ARR, hl_al_gen_sources, _I32); DEFINE_HL_PRIM (_BOOL, hl_al_get_boolean, _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_booleanv, _I32 _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_buffer3f, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_buffer3i, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_F32, hl_al_get_bufferf, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_bufferfv, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_I32, hl_al_get_bufferi, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_bufferiv, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_F64, hl_al_get_double, _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_doublev, _I32 _I32); DEFINE_HL_PRIM (_I32, hl_al_get_enum_value, _STRING); DEFINE_HL_PRIM (_I32, hl_al_get_error, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_al_get_filteri, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_F32, hl_al_get_float, _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_floatv, _I32 _I32); DEFINE_HL_PRIM (_I32, hl_al_get_integer, _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_integerv, _I32 _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_listener3f, _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_listener3i, _I32); DEFINE_HL_PRIM (_F32, hl_al_get_listenerf, _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_listenerfv, _I32 _I32); DEFINE_HL_PRIM (_I32, hl_al_get_listeneri, _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_listeneriv, _I32 _I32); DEFINE_HL_PRIM (_F64, hl_al_get_proc_address, _STRING); DEFINE_HL_PRIM (_ARR, hl_al_get_source3f, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_source3i, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_F32, hl_al_get_sourcef, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_sourcefv, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_DYN, hl_al_get_sourcei, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_ARR, hl_al_get_sourceiv, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_BYTES, hl_al_get_string, _I32); DEFINE_HL_PRIM (_BOOL, hl_al_is_aux, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_al_is_buffer, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_al_is_effect, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_al_is_enabled, _I32); DEFINE_HL_PRIM (_BOOL, hl_al_is_extension_present, _STRING); DEFINE_HL_PRIM (_BOOL, hl_al_is_filter, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_al_is_source, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_listener3f, _I32 _F32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_al_listener3i, _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_listenerf, _I32 _F32); DEFINE_HL_PRIM (_VOID, hl_al_listenerfv, _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_listeneri, _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_listeneriv, _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_remove_direct_filter, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_remove_send, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_al_source_pause, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_source_pausev, _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_source_play, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_source_playv, _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_source_queue_buffers, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_source_rewind, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_source_rewindv, _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_source_stop, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_al_source_stopv, _I32 _ARR); DEFINE_HL_PRIM (_ARR, hl_al_source_unqueue_buffers, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_al_source3f, _TCFFIPOINTER _I32 _F32 _F32 _F32); DEFINE_HL_PRIM (_VOID, hl_al_source3i, _TCFFIPOINTER _I32 _DYN _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_al_sourcef, _TCFFIPOINTER _I32 _F32); DEFINE_HL_PRIM (_VOID, hl_al_sourcefv, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_sourcei, _TCFFIPOINTER _I32 _DYN); DEFINE_HL_PRIM (_VOID, hl_al_sourceiv, _TCFFIPOINTER _I32 _ARR); DEFINE_HL_PRIM (_VOID, hl_al_speed_of_sound, _F32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_alc_create_context, _TCFFIPOINTER _ARR); DEFINE_HL_PRIM (_BOOL, hl_alc_close_device, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_alc_destroy_context, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_alc_get_contexts_device, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_alc_get_current_context, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_alc_get_error, _TCFFIPOINTER); DEFINE_HL_PRIM (_ARR, hl_alc_get_integerv, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_BYTES, hl_alc_get_string, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_BOOL, hl_alc_make_context_current, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_alc_open_device, _STRING); DEFINE_HL_PRIM (_VOID, hl_alc_pause_device, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_alc_process_context, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_alc_resume_device, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_alc_suspend_context, _TCFFIPOINTER); } extern "C" int lime_openal_register_prims () { return 0; } ================================================ FILE: project/src/net/curl/CURLBindings.cpp ================================================ #include #include #include #include #include #include #include #include #include #include namespace lime { struct CURL_Progress { double dltotal; double dlnow; double ultotal; double ulnow; }; struct CURL_XferInfo { curl_off_t dltotal; curl_off_t dlnow; curl_off_t ultotal; curl_off_t ulnow; }; std::map* > curlMultiHandles; std::map curlMultiObjects; std::map curlMultiReferences; std::map curlMultiRunningHandles; std::map curlMultiValid; std::map curlObjects; std::map curlValid; std::map headerCallbacks; std::map headerSLists; std::map* > headerValues; std::map progressCallbacks; std::map progressValues; std::map readBytes; std::map readBytesPosition; std::map readBytesRoot; // TODO: Switch to structs std::map writeBuffers; std::map writeBufferPosition; std::map writeBufferSize; std::map writeBytes; std::map writeBytesRoot; std::map writeCallbacks; std::map xferInfoCallbacks; std::map xferInfoValues; Mutex curl_gc_mutex; void free_header_values (const std::vector* values) { if (values) { for (auto it = values->begin (); it != values->end (); ++it) { free (*it); } } } void gc_curl (value handle) { if (!val_is_null (handle)) { curl_gc_mutex.Lock (); if (curlMultiReferences.find (handle) != curlMultiReferences.end ()) { value multi_handle = (value)curlMultiReferences[handle]; curl_multi_remove_handle ((CURLM*)val_data (multi_handle), (CURL*)val_data (handle)); curlMultiReferences.erase (handle); std::vector* handles = curlMultiHandles[multi_handle]; if (handles->size () > 0) { for (std::vector::iterator it = handles->begin (); it != handles->end (); ++it) { if (*it == handle) { handles->erase (it); delete curlMultiObjects[handle]; curlMultiObjects.erase (handle); break; } } } } if (curlValid.find (handle) != curlValid.end ()) { CURL* curl = (CURL*)val_data (handle); curlValid.erase (handle); curlObjects.erase (curl); curl_easy_cleanup (curl); if (writeBuffers[handle]) { free (writeBuffers[handle]); } writeBuffers.erase (handle); writeBufferPosition.erase (handle); writeBufferSize.erase (handle); } ValuePointer* callback; Bytes* bytes; ValuePointer* bytesRoot; if (headerCallbacks.find (handle) != headerCallbacks.end ()) { callback = headerCallbacks[handle]; std::vector* values = headerValues[handle]; headerCallbacks.erase (handle); headerValues.erase (handle); free_header_values (values); delete callback; delete values; } if (headerSLists.find (handle) != headerSLists.end ()) { curl_slist* chunk = headerSLists[handle]; headerSLists.erase (handle); curl_slist_free_all (chunk); } if (progressCallbacks.find (handle) != progressCallbacks.end ()) { callback = progressCallbacks[handle]; CURL_Progress* progress = progressValues[handle]; progressCallbacks.erase (handle); progressValues.erase (progress); delete callback; delete progress; } if (readBytes.find (handle) != readBytes.end ()) { bytes = readBytes[handle]; bytesRoot = readBytesRoot[handle]; readBytes.erase (handle); readBytesPosition.erase (handle); readBytesRoot.erase (handle); delete bytes; delete bytesRoot; } if (writeCallbacks.find (handle) != writeCallbacks.end ()) { callback = writeCallbacks[handle]; bytes = writeBytes[handle]; bytesRoot = writeBytesRoot[handle]; writeCallbacks.erase (handle); writeBytes.erase (handle); writeBytesRoot.erase (handle); delete callback; delete bytes; delete bytesRoot; } if (xferInfoCallbacks.find (handle) != xferInfoCallbacks.end ()) { callback = xferInfoCallbacks[handle]; CURL_XferInfo* info = xferInfoValues[handle]; xferInfoCallbacks.erase (handle); xferInfoValues.erase (handle); delete callback; delete info; } val_gc (handle, 0); curl_gc_mutex.Unlock (); } } void hl_gc_curl (HL_CFFIPointer* handle) { if (handle) { curl_gc_mutex.Lock (); if (curlMultiReferences.find (handle) != curlMultiReferences.end ()) { HL_CFFIPointer* multi_handle = (HL_CFFIPointer*)curlMultiReferences[handle]; curl_multi_remove_handle ((CURLM*)multi_handle->ptr, (CURL*)handle->ptr); curlMultiReferences.erase (handle); std::vector* handles = curlMultiHandles[multi_handle]; if (handles->size () > 0) { for (std::vector::iterator it = handles->begin (); it != handles->end (); ++it) { if (*it == handle) { handles->erase (it); delete curlMultiObjects[handle]; curlMultiObjects.erase (handle); break; } } } } if (curlValid.find (handle) != curlValid.end ()) { CURL* curl = (CURL*)handle->ptr; curlValid.erase (handle); curlObjects.erase (curl); curl_easy_cleanup (curl); if (writeBuffers[handle]) { free (writeBuffers[handle]); } writeBuffers.erase (handle); writeBufferPosition.erase (handle); writeBufferSize.erase (handle); } ValuePointer* callback; Bytes* bytes; ValuePointer* bytesRoot; if (headerCallbacks.find (handle) != headerCallbacks.end ()) { callback = headerCallbacks[handle]; std::vector* values = headerValues[handle]; headerCallbacks.erase (handle); headerValues.erase (handle); free_header_values (values); delete callback; delete values; } if (headerSLists.find (handle) != headerSLists.end ()) { curl_slist* chunk = headerSLists[handle]; headerSLists.erase (handle); curl_slist_free_all (chunk); } if (progressCallbacks.find (handle) != progressCallbacks.end ()) { callback = progressCallbacks[handle]; CURL_Progress* progress = progressValues[handle]; progressCallbacks.erase (handle); progressValues.erase (progress); delete callback; delete progress; } if (readBytes.find (handle) != readBytes.end ()) { bytes = readBytes[handle]; bytesRoot = readBytesRoot[handle]; readBytes.erase (handle); readBytesPosition.erase (handle); readBytesRoot.erase (handle); delete bytesRoot; } if (writeCallbacks.find (handle) != writeCallbacks.end ()) { callback = writeCallbacks[handle]; bytes = writeBytes[handle]; bytesRoot = writeBytesRoot[handle]; writeCallbacks.erase (handle); writeBytes.erase (handle); writeBytesRoot.erase (handle); delete callback; delete bytesRoot; } if (xferInfoCallbacks.find (handle) != xferInfoCallbacks.end ()) { callback = xferInfoCallbacks[handle]; CURL_XferInfo* info = xferInfoValues[handle]; xferInfoCallbacks.erase (handle); xferInfoValues.erase (handle); delete callback; delete info; } handle->finalizer = NULL; curl_gc_mutex.Unlock (); } } void gc_curl_multi (value handle) { if (!val_is_null (handle)) { curl_gc_mutex.Lock (); if (curlMultiValid.find (handle) != curlMultiValid.end ()) { curlMultiValid.erase (handle); curl_multi_cleanup ((CURLM*)val_data(handle)); } std::vector* handles = curlMultiHandles[handle]; for (std::vector::iterator it = handles->begin (); it != handles->end (); ++it) { delete curlMultiObjects[*it]; curlMultiObjects.erase (*it); curl_gc_mutex.Unlock (); gc_curl ((value)*it); curl_gc_mutex.Lock (); } delete curlMultiHandles[handle]; curlMultiHandles.erase (handle); val_gc (handle, 0); //handle = alloc_null (); curl_gc_mutex.Unlock (); } } void hl_gc_curl_multi (HL_CFFIPointer* handle) { if (handle) { curl_gc_mutex.Lock (); if (curlMultiValid.find (handle) != curlMultiValid.end ()) { curlMultiValid.erase (handle); curl_multi_cleanup ((CURLM*)handle->ptr); } std::vector* handles = curlMultiHandles[handle]; for (std::vector::iterator it = handles->begin (); it != handles->end (); ++it) { delete curlMultiObjects[*it]; curlMultiObjects.erase (*it); curl_gc_mutex.Unlock (); hl_gc_curl ((HL_CFFIPointer*)*it); curl_gc_mutex.Lock (); } delete curlMultiHandles[handle]; curlMultiHandles.erase (handle); handle->finalizer = NULL; //handle = alloc_null (); curl_gc_mutex.Unlock (); } } void lime_curl_easy_cleanup (value handle) { gc_curl (handle); } HL_PRIM void HL_NAME(hl_curl_easy_cleanup) (HL_CFFIPointer* handle) { hl_gc_curl (handle); } value lime_curl_easy_duphandle (value handle) { curl_gc_mutex.Lock (); CURL* dup = curl_easy_duphandle ((CURL*)val_data(handle)); value duphandle = CFFIPointer (dup, gc_curl); curlValid[duphandle] = true; curlObjects[dup] = duphandle; value callbackValue; Bytes* bytes; value bytesValue; if (headerCallbacks.find (handle) != headerCallbacks.end ()) { callbackValue = (value)headerCallbacks[handle]->Get (); headerCallbacks[duphandle] = new ValuePointer (callbackValue); headerValues[duphandle] = new std::vector (); } if (progressCallbacks.find (handle) != progressCallbacks.end ()) { callbackValue = (value)progressCallbacks[handle]->Get (); progressCallbacks[duphandle] = new ValuePointer (callbackValue); progressValues[duphandle] = new CURL_Progress (); } if (readBytes.find (handle) != readBytes.end ()) { bytesValue = (value)readBytesRoot[handle]->Get (); bytes = new Bytes (bytesValue); readBytes[duphandle] = bytes; readBytesPosition[duphandle] = 0; readBytesRoot[duphandle] = new ValuePointer (bytesValue); } if (writeCallbacks.find (handle) != writeCallbacks.end ()) { callbackValue = (value)writeCallbacks[handle]->Get (); bytesValue = (value)writeBytesRoot[handle]->Get (); bytes = new Bytes (bytesValue); writeCallbacks[duphandle] = new ValuePointer (callbackValue); writeBuffers[duphandle] = NULL; writeBufferPosition[duphandle] = 0; writeBufferSize[duphandle] = 0; writeBytes[duphandle] = bytes; writeBytesRoot[duphandle] = new ValuePointer (bytesValue); } if (xferInfoCallbacks.find (handle) != xferInfoCallbacks.end ()) { callbackValue = (value)xferInfoCallbacks[handle]->Get (); xferInfoCallbacks[duphandle] = new ValuePointer (callbackValue); xferInfoValues[duphandle] = new CURL_XferInfo (); } curl_gc_mutex.Unlock (); return duphandle; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_curl_easy_duphandle) (HL_CFFIPointer* handle) { curl_gc_mutex.Lock (); CURL* dup = curl_easy_duphandle ((CURL*)handle->ptr); HL_CFFIPointer* duphandle = HLCFFIPointer (dup, (hl_finalizer)hl_gc_curl); curlValid[duphandle] = true; curlObjects[dup] = duphandle; vclosure* callbackValue; Bytes* bytes; if (headerCallbacks.find (handle) != headerCallbacks.end ()) { callbackValue = (vclosure*)headerCallbacks[handle]->Get (); headerCallbacks[duphandle] = new ValuePointer (callbackValue); headerValues[duphandle] = new std::vector (); } if (progressCallbacks.find (handle) != progressCallbacks.end ()) { callbackValue = (vclosure*)progressCallbacks[handle]->Get (); progressCallbacks[duphandle] = new ValuePointer (callbackValue); progressValues[duphandle] = new CURL_Progress (); } if (readBytes.find (handle) != readBytes.end ()) { readBytes[duphandle] = readBytes[handle]; readBytesPosition[duphandle] = 0; readBytesRoot[duphandle] = new ValuePointer ((vobj*)readBytes[handle]); } if (writeCallbacks.find (handle) != writeCallbacks.end ()) { callbackValue = (vclosure*)writeCallbacks[handle]->Get (); writeCallbacks[duphandle] = new ValuePointer (callbackValue); writeBuffers[duphandle] = NULL; writeBufferPosition[duphandle] = 0; writeBufferSize[duphandle] = 0; writeBytes[duphandle] = writeBytes[handle]; writeBytesRoot[duphandle] = new ValuePointer ((vobj*)writeBytes[handle]); } if (xferInfoCallbacks.find (handle) != xferInfoCallbacks.end ()) { callbackValue = (vclosure*)xferInfoCallbacks[handle]->Get (); xferInfoCallbacks[duphandle] = new ValuePointer (callbackValue); xferInfoValues[duphandle] = new CURL_XferInfo (); } curl_gc_mutex.Unlock (); return duphandle; } value lime_curl_easy_escape (value curl, HxString url, int length) { char* result = curl_easy_escape ((CURL*)val_data(curl), url.__s, length); return result ? alloc_string (result) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_curl_easy_escape) (HL_CFFIPointer* curl, hl_vstring* url, int length) { char* result = curl_easy_escape ((CURL*)curl->ptr, url ? hl_to_utf8 (url->bytes) : NULL, length); return (vbyte*)result; } void lime_curl_easy_flush (value easy_handle) { curl_gc_mutex.Lock (); int code; if (headerCallbacks.find (easy_handle) != headerCallbacks.end ()) { ValuePointer* headerCallback = headerCallbacks[easy_handle]; std::vector* values = headerValues[easy_handle]; if (values->size () > 0) { for (std::vector::iterator it = values->begin (); it != values->end (); ++it) { curl_gc_mutex.Unlock (); headerCallback->Call (alloc_string (*it)); curl_gc_mutex.Lock (); } free_header_values (values); values->clear (); } } if (writeBuffers.find (easy_handle) != writeBuffers.end ()) { char* buffer = writeBuffers[easy_handle]; int position = writeBufferPosition[easy_handle]; int length = writeBufferSize[easy_handle]; if (buffer && position > 0) { if (writeCallbacks.find (easy_handle) != writeCallbacks.end ()) { ValuePointer* writeCallback = writeCallbacks[easy_handle]; ValuePointer* bytesRoot = writeBytesRoot[easy_handle]; Bytes* bytes = writeBytes[easy_handle]; if (bytes->length < position) bytes->Resize (position); memcpy ((char*)bytes->b, buffer, position); // free (buffer); // writeBuffers[easy_handle] = NULL; // writeBufferSize[easy_handle] = 0; writeBufferPosition[easy_handle] = 0; value _bytes = bytes->Value ((value)bytesRoot->Get ()); curl_gc_mutex.Unlock (); length = val_int ((value)writeCallback->Call (_bytes, alloc_int (position))); curl_gc_mutex.Lock (); if (length == CURL_WRITEFUNC_PAUSE) { // TODO: Handle pause } } } } if (progressCallbacks.find (easy_handle) != progressCallbacks.end ()) { CURL_Progress* progress = progressValues[easy_handle]; ValuePointer* progressCallback = progressCallbacks[easy_handle]; curl_gc_mutex.Unlock (); code = val_int ((value)progressCallback->Call (alloc_float (progress->dltotal), alloc_float (progress->dlnow), alloc_float (progress->ultotal), alloc_float (progress->ulnow))); curl_gc_mutex.Lock (); if (code != 0) { // CURLE_OK // TODO: Abort } } if (xferInfoCallbacks.find (easy_handle) != xferInfoCallbacks.end ()) { CURL_XferInfo* xferInfo = xferInfoValues[easy_handle]; ValuePointer* xferInfoCallback = xferInfoCallbacks[easy_handle]; curl_gc_mutex.Unlock (); code = val_int ((value)xferInfoCallback->Call (alloc_int (xferInfo->dltotal), alloc_int (xferInfo->dlnow), alloc_int (xferInfo->ultotal), alloc_int (xferInfo->ulnow))); curl_gc_mutex.Lock (); if (code != 0) { // TODO: Abort } } curl_gc_mutex.Unlock (); } HL_PRIM void HL_NAME(hl_curl_easy_flush) (HL_CFFIPointer* easy_handle) { curl_gc_mutex.Lock (); int code; if (headerCallbacks.find (easy_handle) != headerCallbacks.end ()) { ValuePointer* headerCallback = headerCallbacks[easy_handle]; std::vector* values = headerValues[easy_handle]; if (values->size () > 0) { for (std::vector::iterator it = values->begin (); it != values->end (); ++it) { vdynamic* bytes = hl_alloc_dynamic (&hlt_bytes); bytes->v.bytes = (vbyte*)*it; curl_gc_mutex.Unlock (); headerCallback->Call (bytes); curl_gc_mutex.Lock (); } free_header_values (values); values->clear (); } } if (writeBuffers.find (easy_handle) != writeBuffers.end ()) { char* buffer = writeBuffers[easy_handle]; int position = writeBufferPosition[easy_handle]; int length = writeBufferSize[easy_handle]; if (buffer && position > 0) { if (writeCallbacks.find (easy_handle) != writeCallbacks.end ()) { ValuePointer* writeCallback = writeCallbacks[easy_handle]; Bytes* bytes = writeBytes[easy_handle]; if (bytes->length < position) bytes->Resize (position); memcpy ((char*)bytes->b, buffer, position); // free (buffer); // writeBuffers[easy_handle] = NULL; // writeBufferSize[easy_handle] = 0; writeBufferPosition[easy_handle] = 0; vdynamic* pos = hl_alloc_dynamic (&hlt_i32); pos->v.i = position; curl_gc_mutex.Unlock (); vdynamic* _length = (vdynamic*)writeCallback->Call (bytes, pos); length = (_length != NULL ? _length->v.i : 0); curl_gc_mutex.Lock (); if (length == CURL_WRITEFUNC_PAUSE) { // TODO: Handle pause } } } } if (progressCallbacks.find (easy_handle) != progressCallbacks.end ()) { CURL_Progress* progress = progressValues[easy_handle]; ValuePointer* progressCallback = progressCallbacks[easy_handle]; vdynamic* dltotal = hl_alloc_dynamic (&hlt_f64); vdynamic* dlnow = hl_alloc_dynamic (&hlt_f64); vdynamic* ultotal = hl_alloc_dynamic (&hlt_f64); vdynamic* ulnow = hl_alloc_dynamic (&hlt_f64); dltotal->v.d = progress->dltotal; dlnow->v.d = progress->dlnow; ultotal->v.d = progress->ultotal; ulnow->v.d = progress->ulnow; curl_gc_mutex.Unlock (); vdynamic* _code = (vdynamic*)progressCallback->Call (dltotal, dlnow, ultotal, ulnow); code = (_code != NULL ? _code->v.i : 0); curl_gc_mutex.Lock (); if (code != 0) { // CURLE_OK // TODO: Abort } } if (xferInfoCallbacks.find (easy_handle) != xferInfoCallbacks.end ()) { CURL_XferInfo* xferInfo = xferInfoValues[easy_handle]; ValuePointer* xferInfoCallback = xferInfoCallbacks[easy_handle]; vdynamic* dltotal = hl_alloc_dynamic (&hlt_i32); vdynamic* dlnow = hl_alloc_dynamic (&hlt_i32); vdynamic* ultotal = hl_alloc_dynamic (&hlt_i32); vdynamic* ulnow = hl_alloc_dynamic (&hlt_i32); dltotal->v.i = xferInfo->dltotal; dlnow->v.i = xferInfo->dlnow; ultotal->v.i = xferInfo->ultotal; ulnow->v.i = xferInfo->ulnow; curl_gc_mutex.Unlock (); vdynamic* _code = (vdynamic*)xferInfoCallback->Call (dltotal, dlnow, ultotal, ulnow); code = (_code != NULL ? _code->v.i : 0); curl_gc_mutex.Lock (); if (code != 0) { // TODO: Abort } } curl_gc_mutex.Unlock (); } value lime_curl_easy_getinfo (value curl, int info) { CURLcode code = CURLE_OK; CURL* handle = (CURL*)val_data(curl); CURLINFO type = (CURLINFO)info; switch (type) { case CURLINFO_EFFECTIVE_URL: case CURLINFO_REDIRECT_URL: case CURLINFO_CONTENT_TYPE: case CURLINFO_PRIVATE: case CURLINFO_PRIMARY_IP: case CURLINFO_LOCAL_IP: case CURLINFO_FTP_ENTRY_PATH: case CURLINFO_RTSP_SESSION_ID: case CURLINFO_SCHEME: char stringValue; code = curl_easy_getinfo (handle, type, &stringValue); return alloc_string (&stringValue); break; case CURLINFO_RESPONSE_CODE: case CURLINFO_HTTP_CONNECTCODE: case CURLINFO_FILETIME: case CURLINFO_REDIRECT_COUNT: case CURLINFO_HEADER_SIZE: case CURLINFO_REQUEST_SIZE: case CURLINFO_SSL_VERIFYRESULT: case CURLINFO_HTTPAUTH_AVAIL: case CURLINFO_PROXYAUTH_AVAIL: case CURLINFO_OS_ERRNO: case CURLINFO_NUM_CONNECTS: case CURLINFO_PRIMARY_PORT: case CURLINFO_LOCAL_PORT: case CURLINFO_LASTSOCKET: case CURLINFO_CONDITION_UNMET: case CURLINFO_RTSP_CLIENT_CSEQ: case CURLINFO_RTSP_SERVER_CSEQ: case CURLINFO_RTSP_CSEQ_RECV: case CURLINFO_HTTP_VERSION: case CURLINFO_PROXY_SSL_VERIFYRESULT: case CURLINFO_PROTOCOL: case CURLINFO_SIZE_UPLOAD_T: // TODO: These should be larger case CURLINFO_SIZE_DOWNLOAD_T: case CURLINFO_SPEED_DOWNLOAD_T: case CURLINFO_SPEED_UPLOAD_T: case CURLINFO_CONTENT_LENGTH_DOWNLOAD_T: case CURLINFO_CONTENT_LENGTH_UPLOAD_T: long intValue; code = curl_easy_getinfo (handle, type, &intValue); return alloc_int (intValue); break; case CURLINFO_TOTAL_TIME: case CURLINFO_NAMELOOKUP_TIME: case CURLINFO_CONNECT_TIME: case CURLINFO_APPCONNECT_TIME: case CURLINFO_PRETRANSFER_TIME: case CURLINFO_STARTTRANSFER_TIME: case CURLINFO_REDIRECT_TIME: case CURLINFO_SIZE_UPLOAD: case CURLINFO_SIZE_DOWNLOAD: case CURLINFO_SPEED_DOWNLOAD: case CURLINFO_SPEED_UPLOAD: case CURLINFO_CONTENT_LENGTH_DOWNLOAD: case CURLINFO_CONTENT_LENGTH_UPLOAD: double floatValue; code = curl_easy_getinfo (handle, type, &floatValue); return alloc_float (floatValue); break; case CURLINFO_COOKIELIST: { struct curl_slist *cookies; code = curl_easy_getinfo(handle, CURLINFO_COOKIELIST, &cookies); struct curl_slist *each = cookies; value result = alloc_array(0); while (each) { val_array_push(result, alloc_string(each->data)); each = each->next; } curl_slist_free_all(cookies); return result; break; } case CURLINFO_SSL_ENGINES: case CURLINFO_CERTINFO: case CURLINFO_TLS_SESSION: case CURLINFO_TLS_SSL_PTR: case CURLINFO_ACTIVESOCKET: // TODO break; case CURLINFO_NONE: case CURLINFO_LASTONE: // ignore break; } return alloc_null (); } HL_PRIM vdynamic* HL_NAME(hl_curl_easy_getinfo) (HL_CFFIPointer* curl, int info) { CURLcode code = CURLE_OK; CURL* handle = (CURL*)curl->ptr; CURLINFO type = (CURLINFO)info; int size; vdynamic* result = NULL; switch (type) { case CURLINFO_EFFECTIVE_URL: case CURLINFO_REDIRECT_URL: case CURLINFO_CONTENT_TYPE: case CURLINFO_PRIVATE: case CURLINFO_PRIMARY_IP: case CURLINFO_LOCAL_IP: case CURLINFO_FTP_ENTRY_PATH: case CURLINFO_RTSP_SESSION_ID: case CURLINFO_SCHEME: { char stringValue; code = curl_easy_getinfo (handle, type, &stringValue); int size = strlen (&stringValue) + 1; char* val = (char*)malloc (size); memcpy (val, &stringValue, size); result = hl_alloc_dynamic (&hlt_bytes); result->v.b = val; return result; break; } case CURLINFO_RESPONSE_CODE: case CURLINFO_HTTP_CONNECTCODE: case CURLINFO_FILETIME: case CURLINFO_REDIRECT_COUNT: case CURLINFO_HEADER_SIZE: case CURLINFO_REQUEST_SIZE: case CURLINFO_SSL_VERIFYRESULT: case CURLINFO_HTTPAUTH_AVAIL: case CURLINFO_PROXYAUTH_AVAIL: case CURLINFO_OS_ERRNO: case CURLINFO_NUM_CONNECTS: case CURLINFO_PRIMARY_PORT: case CURLINFO_LOCAL_PORT: case CURLINFO_LASTSOCKET: case CURLINFO_CONDITION_UNMET: case CURLINFO_RTSP_CLIENT_CSEQ: case CURLINFO_RTSP_SERVER_CSEQ: case CURLINFO_RTSP_CSEQ_RECV: case CURLINFO_HTTP_VERSION: case CURLINFO_PROXY_SSL_VERIFYRESULT: case CURLINFO_PROTOCOL: case CURLINFO_SIZE_UPLOAD_T: // TODO: These should be larger case CURLINFO_SIZE_DOWNLOAD_T: case CURLINFO_SPEED_DOWNLOAD_T: case CURLINFO_SPEED_UPLOAD_T: case CURLINFO_CONTENT_LENGTH_DOWNLOAD_T: case CURLINFO_CONTENT_LENGTH_UPLOAD_T: { long intValue; code = curl_easy_getinfo (handle, type, &intValue); result = hl_alloc_dynamic (&hlt_i32); result->v.i = intValue; return result; break; } case CURLINFO_TOTAL_TIME: case CURLINFO_NAMELOOKUP_TIME: case CURLINFO_CONNECT_TIME: case CURLINFO_APPCONNECT_TIME: case CURLINFO_PRETRANSFER_TIME: case CURLINFO_STARTTRANSFER_TIME: case CURLINFO_REDIRECT_TIME: case CURLINFO_SIZE_UPLOAD: case CURLINFO_SIZE_DOWNLOAD: case CURLINFO_SPEED_DOWNLOAD: case CURLINFO_SPEED_UPLOAD: case CURLINFO_CONTENT_LENGTH_DOWNLOAD: case CURLINFO_CONTENT_LENGTH_UPLOAD: { double floatValue; code = curl_easy_getinfo (handle, type, &floatValue); result = hl_alloc_dynamic (&hlt_f64); result->v.d = floatValue; return result; break; } case CURLINFO_SSL_ENGINES: case CURLINFO_COOKIELIST: case CURLINFO_CERTINFO: case CURLINFO_TLS_SESSION: case CURLINFO_TLS_SSL_PTR: case CURLINFO_ACTIVESOCKET: // TODO break; case CURLINFO_NONE: case CURLINFO_LASTONE: // ignore break; } return NULL; } value lime_curl_easy_init () { curl_gc_mutex.Lock (); CURL* curl = curl_easy_init (); value handle = CFFIPointer (curl, gc_curl); if (curlValid.find (handle) != curlValid.end ()) { printf ("Error: Duplicate cURL handle\n"); } if (headerCallbacks.find (handle) != headerCallbacks.end ()) { printf ("Error: cURL handle already has a header callback\n"); } if (progressCallbacks.find (handle) != progressCallbacks.end ()) { printf ("Error: cURL handle already has a progress callback\n"); } if (readBytes.find (handle) != readBytes.end ()) { printf ("Error: cURL handle already has a read data value\n"); } if (writeCallbacks.find (handle) != writeCallbacks.end ()) { printf ("Error: cURL handle already has a write callback\n"); } curlValid[handle] = true; curlObjects[curl] = handle; writeBuffers[handle] = NULL; writeBufferPosition[handle] = 0; writeBufferSize[handle] = 0; CURLcode setopt_result = curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, ""); if(setopt_result != CURLE_OK) { printf("Failed to set CURLOPT_ACCEPT_ENCODING: %s\n", curl_easy_strerror(setopt_result)); } curl_gc_mutex.Unlock (); return handle; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_curl_easy_init) () { curl_gc_mutex.Lock (); CURL* curl = curl_easy_init (); HL_CFFIPointer* handle = HLCFFIPointer (curl, (hl_finalizer)hl_gc_curl); if (curlValid.find (handle) != curlValid.end ()) { printf ("Error: Duplicate cURL handle\n"); } if (headerCallbacks.find (handle) != headerCallbacks.end ()) { printf ("Error: cURL handle already has a header callback\n"); } if (progressCallbacks.find (handle) != progressCallbacks.end ()) { printf ("Error: cURL handle already has a progress callback\n"); } if (readBytes.find (handle) != readBytes.end ()) { printf ("Error: cURL handle already has a read data value\n"); } if (writeCallbacks.find (handle) != writeCallbacks.end ()) { printf ("Error: cURL handle already has a write callback\n"); } curlValid[handle] = true; curlObjects[curl] = handle; writeBuffers[handle] = NULL; writeBufferPosition[handle] = 0; writeBufferSize[handle] = 0; CURLcode setopt_result = curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, ""); if(setopt_result != CURLE_OK) { printf("Failed to set CURLOPT_ACCEPT_ENCODING: %s\n", curl_easy_strerror(setopt_result)); } curl_gc_mutex.Unlock (); return handle; } int lime_curl_easy_pause (value handle, int bitmask) { return curl_easy_pause ((CURL*)val_data(handle), bitmask); } HL_PRIM int HL_NAME(hl_curl_easy_pause) (HL_CFFIPointer* handle, int bitmask) { return curl_easy_pause ((CURL*)handle->ptr, bitmask); } int lime_curl_easy_perform (value easy_handle) { int code; System::GCEnterBlocking (); code = curl_easy_perform ((CURL*)val_data(easy_handle)); System::GCExitBlocking (); lime_curl_easy_flush (easy_handle); return code; } HL_PRIM int HL_NAME(hl_curl_easy_perform) (HL_CFFIPointer* easy_handle) { int code; System::GCEnterBlocking (); code = curl_easy_perform ((CURL*)easy_handle->ptr); System::GCExitBlocking (); lime_hl_curl_easy_flush (easy_handle); return code; } int lime_curl_easy_recv (value curl, value buffer, int buflen, int n) { // TODO return 0; } HL_PRIM int HL_NAME(hl_curl_easy_recv) (HL_CFFIPointer* curl, double buffer, int buflen, int n) { // TODO return 0; } void lime_curl_easy_reset (value curl) { curl_easy_reset ((CURL*)val_data(curl)); } HL_PRIM void HL_NAME(hl_curl_easy_reset) (HL_CFFIPointer* curl) { curl_easy_reset ((CURL*)curl->ptr); } int lime_curl_easy_send (value curl, value buffer, int buflen, int n) { // TODO return 0; } HL_PRIM int HL_NAME(hl_curl_easy_send) (HL_CFFIPointer* curl, double buffer, int buflen, int n) { // TODO return 0; } static size_t header_callback (void *ptr, size_t size, size_t nmemb, void *userp) { std::vector* values = headerValues[userp]; if (size * nmemb > 0) { char* data = (char*)malloc (size * nmemb + 1); memcpy (data, ptr, size * nmemb); data[size * nmemb] = '\0'; values->push_back (data); } return size * nmemb; } static size_t write_callback (void *ptr, size_t size, size_t nmemb, void *userp) { if (size * nmemb < 1) { return 0; } char* buffer = writeBuffers[userp]; int writeSize = (size * nmemb); if (!buffer) { buffer = (char*)malloc (CURL_MAX_WRITE_SIZE); memcpy (buffer, ptr, writeSize); writeBuffers[userp] = buffer; writeBufferPosition[userp] = writeSize; writeBufferSize[userp] = CURL_MAX_WRITE_SIZE; } else { int position = writeBufferPosition[userp]; int currentSize = writeBufferSize[userp]; if (position + writeSize > currentSize) { int newSize = currentSize; while (newSize < position + writeSize) newSize += CURL_MAX_WRITE_SIZE; buffer = (char*)realloc (buffer, newSize); writeBufferSize[userp] = newSize; writeBuffers[userp] = buffer; } memcpy (buffer + position, ptr, writeSize); writeBufferPosition[userp] = position + writeSize; } return writeSize; } static int seek_callback (void *userp, curl_off_t offset, int origin) { if (origin == SEEK_SET) { readBytesPosition[userp] = offset; return CURL_SEEKFUNC_OK; } return CURL_SEEKFUNC_CANTSEEK; } static size_t read_callback (void *buffer, size_t size, size_t nmemb, void *userp) { Bytes* bytes = readBytes[userp]; int position = readBytesPosition[userp]; int length = size * nmemb; if (bytes->length < position + length) { length = bytes->length - position; } if (length <= 0) return 0; memcpy (buffer, bytes->b + position, length); readBytesPosition[userp] = position + length; return length; } static int progress_callback (void *userp, double dltotal, double dlnow, double ultotal, double ulnow) { CURL_Progress* progress = progressValues[userp]; progress->dltotal = dltotal; progress->dlnow = dlnow; progress->ultotal = ultotal; progress->ulnow = ulnow; return 0; } static int xferinfo_callback (void *userp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) { CURL_XferInfo* xferInfo = xferInfoValues[userp]; xferInfo->dltotal = dltotal; xferInfo->dlnow = dlnow; xferInfo->ultotal = ultotal; xferInfo->ulnow = ulnow; return 0; } int lime_curl_easy_setopt (value handle, int option, value parameter, value bytes) { CURLcode code = CURLE_OK; CURL* easy_handle = (CURL*)val_data(handle); CURLoption type = (CURLoption)option; switch (type) { case CURLOPT_VERBOSE: case CURLOPT_HEADER: case CURLOPT_NOPROGRESS: case CURLOPT_NOSIGNAL: case CURLOPT_WILDCARDMATCH: case CURLOPT_FAILONERROR: case CURLOPT_DNS_USE_GLOBAL_CACHE: case CURLOPT_TCP_NODELAY: case CURLOPT_TCP_KEEPALIVE: case CURLOPT_SASL_IR: case CURLOPT_AUTOREFERER: case CURLOPT_TRANSFER_ENCODING: case CURLOPT_FOLLOWLOCATION: case CURLOPT_UNRESTRICTED_AUTH: case CURLOPT_PUT: case CURLOPT_POST: case CURLOPT_COOKIESESSION: case CURLOPT_HTTPGET: case CURLOPT_IGNORE_CONTENT_LENGTH: case CURLOPT_HTTP_CONTENT_DECODING: case CURLOPT_HTTP_TRANSFER_DECODING: case CURLOPT_DIRLISTONLY: case CURLOPT_APPEND: case CURLOPT_FTP_USE_EPRT: case CURLOPT_FTP_USE_EPSV: case CURLOPT_FTP_USE_PRET: case CURLOPT_FTP_CREATE_MISSING_DIRS: case CURLOPT_FTP_SKIP_PASV_IP: case CURLOPT_TRANSFERTEXT: case CURLOPT_CRLF: case CURLOPT_NOBODY: case CURLOPT_UPLOAD: case CURLOPT_FRESH_CONNECT: case CURLOPT_FORBID_REUSE: case CURLOPT_CONNECT_ONLY: case CURLOPT_USE_SSL: //case CURLOPT_SSL_ENABLE_ALPN: //case CURLOPT_SSL_ENABLE_NPN: case CURLOPT_SSL_VERIFYPEER: case CURLOPT_SSL_SESSIONID_CACHE: case CURLOPT_TCP_FASTOPEN: case CURLOPT_KEEP_SENDING_ON_ERROR: case CURLOPT_PATH_AS_IS: case CURLOPT_SSL_VERIFYSTATUS: case CURLOPT_SSL_FALSESTART: case CURLOPT_PIPEWAIT: case CURLOPT_TFTP_NO_OPTIONS: case CURLOPT_SUPPRESS_CONNECT_HEADERS: case CURLOPT_SSH_COMPRESSION: code = curl_easy_setopt (easy_handle, type, val_bool (parameter)); break; case CURLOPT_SSL_VERIFYHOST: case CURLOPT_PROTOCOLS: case CURLOPT_REDIR_PROTOCOLS: case CURLOPT_PROXYPORT: case CURLOPT_PROXYTYPE: case CURLOPT_HTTPPROXYTUNNEL: case CURLOPT_SOCKS5_GSSAPI_NEC: case CURLOPT_LOCALPORT: case CURLOPT_LOCALPORTRANGE: case CURLOPT_DNS_CACHE_TIMEOUT: case CURLOPT_BUFFERSIZE: case CURLOPT_PORT: case CURLOPT_ADDRESS_SCOPE: case CURLOPT_TCP_KEEPIDLE: case CURLOPT_TCP_KEEPINTVL: case CURLOPT_NETRC: case CURLOPT_HTTPAUTH: case CURLOPT_PROXYAUTH: case CURLOPT_MAXREDIRS: case CURLOPT_POSTREDIR: case CURLOPT_POSTFIELDSIZE: //case CURLOPT_HEADEROPT: case CURLOPT_HTTP_VERSION: //case CURLOPT_EXPECT_100_TIMEOUT_MS: case CURLOPT_TFTP_BLKSIZE: case CURLOPT_FTP_RESPONSE_TIMEOUT: case CURLOPT_FTPSSLAUTH: case CURLOPT_FTP_SSL_CCC: case CURLOPT_FTP_FILEMETHOD: case CURLOPT_RTSP_REQUEST: case CURLOPT_RTSP_CLIENT_CSEQ: case CURLOPT_RTSP_SERVER_CSEQ: case CURLOPT_PROXY_TRANSFER_MODE: case CURLOPT_RESUME_FROM: case CURLOPT_FILETIME: case CURLOPT_INFILESIZE: case CURLOPT_MAXFILESIZE: case CURLOPT_TIMECONDITION: case CURLOPT_TIMEVALUE: case CURLOPT_TIMEOUT: case CURLOPT_TIMEOUT_MS: case CURLOPT_LOW_SPEED_LIMIT: case CURLOPT_LOW_SPEED_TIME: case CURLOPT_MAXCONNECTS: case CURLOPT_CONNECTTIMEOUT: case CURLOPT_CONNECTTIMEOUT_MS: case CURLOPT_IPRESOLVE: case CURLOPT_ACCEPTTIMEOUT_MS: case CURLOPT_SSLENGINE_DEFAULT: case CURLOPT_SSLVERSION: case CURLOPT_CERTINFO: case CURLOPT_SSL_OPTIONS: case CURLOPT_GSSAPI_DELEGATION: case CURLOPT_SSH_AUTH_TYPES: case CURLOPT_NEW_FILE_PERMS: case CURLOPT_NEW_DIRECTORY_PERMS: case CURLOPT_STREAM_WEIGHT: case CURLOPT_PROXY_SSL_VERIFYPEER: case CURLOPT_PROXY_SSL_VERIFYHOST: case CURLOPT_PROXY_SSLVERSION: case CURLOPT_PROXY_SSL_OPTIONS: case CURLOPT_SOCKS5_AUTH: code = curl_easy_setopt (easy_handle, type, val_int (parameter)); break; case CURLOPT_POSTFIELDSIZE_LARGE: case CURLOPT_RESUME_FROM_LARGE: case CURLOPT_INFILESIZE_LARGE: case CURLOPT_MAXFILESIZE_LARGE: case CURLOPT_MAX_SEND_SPEED_LARGE: case CURLOPT_MAX_RECV_SPEED_LARGE: code = curl_easy_setopt (easy_handle, type, val_float (parameter)); break; case CURLOPT_ERRORBUFFER: case CURLOPT_URL: case CURLOPT_PROXY: case CURLOPT_NOPROXY: case CURLOPT_SOCKS5_GSSAPI_SERVICE: case CURLOPT_INTERFACE: case CURLOPT_NETRC_FILE: case CURLOPT_USERPWD: case CURLOPT_PROXYUSERPWD: case CURLOPT_USERNAME: case CURLOPT_PASSWORD: case CURLOPT_LOGIN_OPTIONS: case CURLOPT_PROXYUSERNAME: case CURLOPT_PROXYPASSWORD: case CURLOPT_TLSAUTH_USERNAME: case CURLOPT_TLSAUTH_PASSWORD: case CURLOPT_XOAUTH2_BEARER: case CURLOPT_ACCEPT_ENCODING: case CURLOPT_POSTFIELDS: case CURLOPT_COPYPOSTFIELDS: case CURLOPT_REFERER: case CURLOPT_USERAGENT: case CURLOPT_COOKIE: case CURLOPT_COOKIEFILE: case CURLOPT_COOKIEJAR: case CURLOPT_COOKIELIST: case CURLOPT_MAIL_FROM: case CURLOPT_MAIL_AUTH: case CURLOPT_FTPPORT: case CURLOPT_FTP_ALTERNATIVE_TO_USER: case CURLOPT_FTP_ACCOUNT: case CURLOPT_RTSP_SESSION_ID: case CURLOPT_RTSP_STREAM_URI: case CURLOPT_RTSP_TRANSPORT: case CURLOPT_RANGE: case CURLOPT_CUSTOMREQUEST: case CURLOPT_DNS_INTERFACE: case CURLOPT_DNS_LOCAL_IP4: case CURLOPT_DNS_LOCAL_IP6: case CURLOPT_SSLCERT: case CURLOPT_SSLCERTTYPE: case CURLOPT_SSLKEY: case CURLOPT_SSLKEYTYPE: case CURLOPT_KEYPASSWD: case CURLOPT_SSLENGINE: case CURLOPT_CAINFO: case CURLOPT_ISSUERCERT: case CURLOPT_CAPATH: case CURLOPT_CRLFILE: case CURLOPT_RANDOM_FILE: case CURLOPT_EGDSOCKET: case CURLOPT_SSL_CIPHER_LIST: case CURLOPT_KRBLEVEL: case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5: case CURLOPT_SSH_PUBLIC_KEYFILE: case CURLOPT_SSH_PRIVATE_KEYFILE: case CURLOPT_SSH_KNOWNHOSTS: case CURLOPT_PINNEDPUBLICKEY: case CURLOPT_UNIX_SOCKET_PATH: case CURLOPT_PROXY_SERVICE_NAME: case CURLOPT_SERVICE_NAME: case CURLOPT_DEFAULT_PROTOCOL: case CURLOPT_PROXY_CAINFO: case CURLOPT_PROXY_CAPATH: case CURLOPT_PROXY_TLSAUTH_USERNAME: case CURLOPT_PROXY_TLSAUTH_PASSWORD: case CURLOPT_PROXY_TLSAUTH_TYPE: case CURLOPT_PROXY_SSLCERT: case CURLOPT_PROXY_SSLCERTTYPE: case CURLOPT_PROXY_SSLKEY: case CURLOPT_PROXY_SSLKEYTYPE: case CURLOPT_PROXY_KEYPASSWD: case CURLOPT_PROXY_SSL_CIPHER_LIST: case CURLOPT_PROXY_CRLFILE: case CURLOPT_PRE_PROXY: case CURLOPT_PROXY_PINNEDPUBLICKEY: case CURLOPT_ABSTRACT_UNIX_SOCKET: case CURLOPT_REQUEST_TARGET: code = curl_easy_setopt (easy_handle, type, val_string (parameter)); break; case CURLOPT_IOCTLFUNCTION: case CURLOPT_IOCTLDATA: case CURLOPT_SEEKFUNCTION: case CURLOPT_SEEKDATA: case CURLOPT_SOCKOPTFUNCTION: case CURLOPT_SOCKOPTDATA: case CURLOPT_OPENSOCKETFUNCTION: case CURLOPT_OPENSOCKETDATA: case CURLOPT_CLOSESOCKETFUNCTION: case CURLOPT_CLOSESOCKETDATA: case CURLOPT_DEBUGFUNCTION: case CURLOPT_DEBUGDATA: case CURLOPT_SSL_CTX_FUNCTION: case CURLOPT_SSL_CTX_DATA: case CURLOPT_CONV_TO_NETWORK_FUNCTION: case CURLOPT_CONV_FROM_NETWORK_FUNCTION: case CURLOPT_CONV_FROM_UTF8_FUNCTION: case CURLOPT_INTERLEAVEFUNCTION: case CURLOPT_INTERLEAVEDATA: case CURLOPT_CHUNK_BGN_FUNCTION: case CURLOPT_CHUNK_END_FUNCTION: case CURLOPT_CHUNK_DATA: case CURLOPT_FNMATCH_FUNCTION: case CURLOPT_FNMATCH_DATA: case CURLOPT_STDERR: case CURLOPT_HTTPPOST: //case CURLOPT_PROXYHEADER: case CURLOPT_HTTP200ALIASES: case CURLOPT_MAIL_RCPT: case CURLOPT_QUOTE: case CURLOPT_POSTQUOTE: case CURLOPT_PREQUOTE: case CURLOPT_RESOLVE: case CURLOPT_SSH_KEYFUNCTION: case CURLOPT_SSH_KEYDATA: case CURLOPT_PRIVATE: case CURLOPT_SHARE: case CURLOPT_TELNETOPTIONS: case CURLOPT_STREAM_DEPENDS: case CURLOPT_STREAM_DEPENDS_E: case CURLOPT_CONNECT_TO: case CURLOPT_MIMEPOST: //todo break; //case CURLOPT_READDATA: //case CURLOPT_WRITEDATA: //case CURLOPT_HEADERDATA: //case CURLOPT_PROGRESSDATA: case CURLOPT_READFUNCTION: { // curl_gc_mutex.Lock (); // ValuePointer* callback = new ValuePointer (parameter); // readCallbacks[handle] = callback; // code = curl_easy_setopt (easy_handle, type, read_callback); // curl_easy_setopt (easy_handle, CURLOPT_READDATA, handle); // curl_gc_mutex.Unlock (); break; } case CURLOPT_READDATA: { curl_gc_mutex.Lock (); if (readBytes.find (handle) == readBytes.end ()) { delete readBytes[handle]; delete readBytesRoot[handle]; } Bytes* _readBytes = new Bytes (bytes); readBytes[handle] = _readBytes; readBytesPosition[handle] = 0; readBytesRoot[handle] = new ValuePointer (bytes); // seek function is needed to support redirects curl_easy_setopt (easy_handle, CURLOPT_SEEKFUNCTION, seek_callback); curl_easy_setopt (easy_handle, CURLOPT_SEEKDATA, handle); code = curl_easy_setopt (easy_handle, CURLOPT_READFUNCTION, read_callback); curl_easy_setopt (easy_handle, CURLOPT_READDATA, handle); curl_gc_mutex.Unlock (); break; } case CURLOPT_WRITEFUNCTION: { curl_gc_mutex.Lock (); if (writeCallbacks.find (handle) == writeCallbacks.end ()) { delete writeCallbacks[handle]; delete writeBytes[handle]; delete writeBytesRoot[handle]; } ValuePointer* callback = new ValuePointer (parameter); writeCallbacks[handle] = callback; Bytes* _writeBytes = new Bytes (bytes); writeBytes[handle] = _writeBytes; writeBytesRoot[handle] = new ValuePointer (bytes); code = curl_easy_setopt (easy_handle, type, write_callback); curl_easy_setopt (easy_handle, CURLOPT_WRITEDATA, handle); curl_gc_mutex.Unlock (); break; } case CURLOPT_HEADERFUNCTION: { curl_gc_mutex.Lock (); if (headerCallbacks.find (handle) != headerCallbacks.end ()) { free_header_values (headerValues[handle]); delete headerCallbacks[handle]; delete headerValues[handle]; } ValuePointer* callback = new ValuePointer (parameter); headerCallbacks[handle] = callback; headerValues[handle] = new std::vector (); code = curl_easy_setopt (easy_handle, type, header_callback); curl_easy_setopt (easy_handle, CURLOPT_HEADERDATA, handle); curl_gc_mutex.Unlock (); break; } case CURLOPT_PROGRESSFUNCTION: { curl_gc_mutex.Lock (); if (progressCallbacks.find (handle) != progressCallbacks.end ()) { delete progressCallbacks[handle]; delete progressValues[handle]; } progressCallbacks[handle] = new ValuePointer (parameter); progressValues[handle] = new CURL_Progress (); code = curl_easy_setopt (easy_handle, type, progress_callback); curl_easy_setopt (easy_handle, CURLOPT_PROGRESSDATA, handle); curl_easy_setopt (easy_handle, CURLOPT_NOPROGRESS, false); curl_gc_mutex.Unlock (); break; } case CURLOPT_XFERINFOFUNCTION: { curl_gc_mutex.Lock (); if (xferInfoCallbacks.find (handle) != xferInfoCallbacks.end ()) { delete xferInfoCallbacks[handle]; delete xferInfoValues[handle]; } xferInfoCallbacks[handle] = new ValuePointer (parameter); xferInfoValues[handle] = new CURL_XferInfo (); code = curl_easy_setopt (easy_handle, type, xferinfo_callback); curl_easy_setopt (easy_handle, CURLOPT_XFERINFODATA, handle); curl_easy_setopt (easy_handle, CURLOPT_NOPROGRESS, false); curl_gc_mutex.Unlock (); break; } case CURLOPT_HTTPHEADER: { curl_gc_mutex.Lock (); if (headerSLists.find (handle) != headerSLists.end ()) { curl_slist_free_all (headerSLists[handle]); } struct curl_slist *chunk = NULL; int size = val_array_size (parameter); for (int i = 0; i < size; i++) { chunk = curl_slist_append (chunk, val_string (val_array_i (parameter, i))); } headerSLists[handle] = chunk; code = curl_easy_setopt (easy_handle, type, chunk); curl_gc_mutex.Unlock (); break; } default: break; } return code; } HL_PRIM int HL_NAME(hl_curl_easy_setopt) (HL_CFFIPointer* handle, int option, vdynamic* parameter, Bytes* bytes) { CURLcode code = CURLE_OK; CURL* easy_handle = (CURL*)handle->ptr; CURLoption type = (CURLoption)option; switch (type) { case CURLOPT_VERBOSE: case CURLOPT_HEADER: case CURLOPT_NOPROGRESS: case CURLOPT_NOSIGNAL: case CURLOPT_WILDCARDMATCH: case CURLOPT_FAILONERROR: case CURLOPT_DNS_USE_GLOBAL_CACHE: case CURLOPT_TCP_NODELAY: case CURLOPT_TCP_KEEPALIVE: case CURLOPT_SASL_IR: case CURLOPT_AUTOREFERER: case CURLOPT_TRANSFER_ENCODING: case CURLOPT_FOLLOWLOCATION: case CURLOPT_UNRESTRICTED_AUTH: case CURLOPT_PUT: case CURLOPT_POST: case CURLOPT_COOKIESESSION: case CURLOPT_HTTPGET: case CURLOPT_IGNORE_CONTENT_LENGTH: case CURLOPT_HTTP_CONTENT_DECODING: case CURLOPT_HTTP_TRANSFER_DECODING: case CURLOPT_DIRLISTONLY: case CURLOPT_APPEND: case CURLOPT_FTP_USE_EPRT: case CURLOPT_FTP_USE_EPSV: case CURLOPT_FTP_USE_PRET: case CURLOPT_FTP_CREATE_MISSING_DIRS: case CURLOPT_FTP_SKIP_PASV_IP: case CURLOPT_TRANSFERTEXT: case CURLOPT_CRLF: case CURLOPT_NOBODY: case CURLOPT_UPLOAD: case CURLOPT_FRESH_CONNECT: case CURLOPT_FORBID_REUSE: case CURLOPT_CONNECT_ONLY: case CURLOPT_USE_SSL: //case CURLOPT_SSL_ENABLE_ALPN: //case CURLOPT_SSL_ENABLE_NPN: case CURLOPT_SSL_VERIFYPEER: case CURLOPT_SSL_SESSIONID_CACHE: case CURLOPT_TCP_FASTOPEN: case CURLOPT_KEEP_SENDING_ON_ERROR: case CURLOPT_PATH_AS_IS: case CURLOPT_SSL_VERIFYSTATUS: case CURLOPT_SSL_FALSESTART: case CURLOPT_PIPEWAIT: case CURLOPT_TFTP_NO_OPTIONS: case CURLOPT_SUPPRESS_CONNECT_HEADERS: case CURLOPT_SSH_COMPRESSION: code = curl_easy_setopt (easy_handle, type, parameter->v.b); break; case CURLOPT_SSL_VERIFYHOST: case CURLOPT_PROTOCOLS: case CURLOPT_REDIR_PROTOCOLS: case CURLOPT_PROXYPORT: case CURLOPT_PROXYTYPE: case CURLOPT_HTTPPROXYTUNNEL: case CURLOPT_SOCKS5_GSSAPI_NEC: case CURLOPT_LOCALPORT: case CURLOPT_LOCALPORTRANGE: case CURLOPT_DNS_CACHE_TIMEOUT: case CURLOPT_BUFFERSIZE: case CURLOPT_PORT: case CURLOPT_ADDRESS_SCOPE: case CURLOPT_TCP_KEEPIDLE: case CURLOPT_TCP_KEEPINTVL: case CURLOPT_NETRC: case CURLOPT_HTTPAUTH: case CURLOPT_PROXYAUTH: case CURLOPT_MAXREDIRS: case CURLOPT_POSTREDIR: case CURLOPT_POSTFIELDSIZE: //case CURLOPT_HEADEROPT: case CURLOPT_HTTP_VERSION: //case CURLOPT_EXPECT_100_TIMEOUT_MS: case CURLOPT_TFTP_BLKSIZE: case CURLOPT_FTP_RESPONSE_TIMEOUT: case CURLOPT_FTPSSLAUTH: case CURLOPT_FTP_SSL_CCC: case CURLOPT_FTP_FILEMETHOD: case CURLOPT_RTSP_REQUEST: case CURLOPT_RTSP_CLIENT_CSEQ: case CURLOPT_RTSP_SERVER_CSEQ: case CURLOPT_PROXY_TRANSFER_MODE: case CURLOPT_RESUME_FROM: case CURLOPT_FILETIME: case CURLOPT_INFILESIZE: case CURLOPT_MAXFILESIZE: case CURLOPT_TIMECONDITION: case CURLOPT_TIMEVALUE: case CURLOPT_TIMEOUT: case CURLOPT_TIMEOUT_MS: case CURLOPT_LOW_SPEED_LIMIT: case CURLOPT_LOW_SPEED_TIME: case CURLOPT_MAXCONNECTS: case CURLOPT_CONNECTTIMEOUT: case CURLOPT_CONNECTTIMEOUT_MS: case CURLOPT_IPRESOLVE: case CURLOPT_ACCEPTTIMEOUT_MS: case CURLOPT_SSLENGINE_DEFAULT: case CURLOPT_SSLVERSION: case CURLOPT_CERTINFO: case CURLOPT_SSL_OPTIONS: case CURLOPT_GSSAPI_DELEGATION: case CURLOPT_SSH_AUTH_TYPES: case CURLOPT_NEW_FILE_PERMS: case CURLOPT_NEW_DIRECTORY_PERMS: case CURLOPT_STREAM_WEIGHT: case CURLOPT_PROXY_SSL_VERIFYPEER: case CURLOPT_PROXY_SSL_VERIFYHOST: case CURLOPT_PROXY_SSLVERSION: case CURLOPT_PROXY_SSL_OPTIONS: case CURLOPT_SOCKS5_AUTH: code = curl_easy_setopt (easy_handle, type, parameter->v.i); break; case CURLOPT_POSTFIELDSIZE_LARGE: case CURLOPT_RESUME_FROM_LARGE: case CURLOPT_INFILESIZE_LARGE: case CURLOPT_MAXFILESIZE_LARGE: case CURLOPT_MAX_SEND_SPEED_LARGE: case CURLOPT_MAX_RECV_SPEED_LARGE: code = curl_easy_setopt (easy_handle, type, parameter->v.f); break; case CURLOPT_ERRORBUFFER: case CURLOPT_URL: case CURLOPT_PROXY: case CURLOPT_NOPROXY: case CURLOPT_SOCKS5_GSSAPI_SERVICE: case CURLOPT_INTERFACE: case CURLOPT_NETRC_FILE: case CURLOPT_USERPWD: case CURLOPT_PROXYUSERPWD: case CURLOPT_USERNAME: case CURLOPT_PASSWORD: case CURLOPT_LOGIN_OPTIONS: case CURLOPT_PROXYUSERNAME: case CURLOPT_PROXYPASSWORD: case CURLOPT_TLSAUTH_USERNAME: case CURLOPT_TLSAUTH_PASSWORD: case CURLOPT_XOAUTH2_BEARER: case CURLOPT_ACCEPT_ENCODING: case CURLOPT_POSTFIELDS: case CURLOPT_COPYPOSTFIELDS: case CURLOPT_REFERER: case CURLOPT_USERAGENT: case CURLOPT_COOKIE: case CURLOPT_COOKIEFILE: case CURLOPT_COOKIEJAR: case CURLOPT_COOKIELIST: case CURLOPT_MAIL_FROM: case CURLOPT_MAIL_AUTH: case CURLOPT_FTPPORT: case CURLOPT_FTP_ALTERNATIVE_TO_USER: case CURLOPT_FTP_ACCOUNT: case CURLOPT_RTSP_SESSION_ID: case CURLOPT_RTSP_STREAM_URI: case CURLOPT_RTSP_TRANSPORT: case CURLOPT_RANGE: case CURLOPT_CUSTOMREQUEST: case CURLOPT_DNS_INTERFACE: case CURLOPT_DNS_LOCAL_IP4: case CURLOPT_DNS_LOCAL_IP6: case CURLOPT_SSLCERT: case CURLOPT_SSLCERTTYPE: case CURLOPT_SSLKEY: case CURLOPT_SSLKEYTYPE: case CURLOPT_KEYPASSWD: case CURLOPT_SSLENGINE: case CURLOPT_CAINFO: case CURLOPT_ISSUERCERT: case CURLOPT_CAPATH: case CURLOPT_CRLFILE: case CURLOPT_RANDOM_FILE: case CURLOPT_EGDSOCKET: case CURLOPT_SSL_CIPHER_LIST: case CURLOPT_KRBLEVEL: case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5: case CURLOPT_SSH_PUBLIC_KEYFILE: case CURLOPT_SSH_PRIVATE_KEYFILE: case CURLOPT_SSH_KNOWNHOSTS: case CURLOPT_PINNEDPUBLICKEY: case CURLOPT_UNIX_SOCKET_PATH: case CURLOPT_PROXY_SERVICE_NAME: case CURLOPT_SERVICE_NAME: case CURLOPT_DEFAULT_PROTOCOL: case CURLOPT_PROXY_CAINFO: case CURLOPT_PROXY_CAPATH: case CURLOPT_PROXY_TLSAUTH_USERNAME: case CURLOPT_PROXY_TLSAUTH_PASSWORD: case CURLOPT_PROXY_TLSAUTH_TYPE: case CURLOPT_PROXY_SSLCERT: case CURLOPT_PROXY_SSLCERTTYPE: case CURLOPT_PROXY_SSLKEY: case CURLOPT_PROXY_SSLKEYTYPE: case CURLOPT_PROXY_KEYPASSWD: case CURLOPT_PROXY_SSL_CIPHER_LIST: case CURLOPT_PROXY_CRLFILE: case CURLOPT_PRE_PROXY: case CURLOPT_PROXY_PINNEDPUBLICKEY: case CURLOPT_ABSTRACT_UNIX_SOCKET: case CURLOPT_REQUEST_TARGET: { hl_vstring* str = (hl_vstring*)parameter; code = curl_easy_setopt (easy_handle, type, str ? hl_to_utf8 (str->bytes) : NULL); break; } case CURLOPT_IOCTLFUNCTION: case CURLOPT_IOCTLDATA: case CURLOPT_SEEKFUNCTION: case CURLOPT_SEEKDATA: case CURLOPT_SOCKOPTFUNCTION: case CURLOPT_SOCKOPTDATA: case CURLOPT_OPENSOCKETFUNCTION: case CURLOPT_OPENSOCKETDATA: case CURLOPT_CLOSESOCKETFUNCTION: case CURLOPT_CLOSESOCKETDATA: case CURLOPT_DEBUGFUNCTION: case CURLOPT_DEBUGDATA: case CURLOPT_SSL_CTX_FUNCTION: case CURLOPT_SSL_CTX_DATA: case CURLOPT_CONV_TO_NETWORK_FUNCTION: case CURLOPT_CONV_FROM_NETWORK_FUNCTION: case CURLOPT_CONV_FROM_UTF8_FUNCTION: case CURLOPT_INTERLEAVEFUNCTION: case CURLOPT_INTERLEAVEDATA: case CURLOPT_CHUNK_BGN_FUNCTION: case CURLOPT_CHUNK_END_FUNCTION: case CURLOPT_CHUNK_DATA: case CURLOPT_FNMATCH_FUNCTION: case CURLOPT_FNMATCH_DATA: case CURLOPT_STDERR: case CURLOPT_HTTPPOST: //case CURLOPT_PROXYHEADER: case CURLOPT_HTTP200ALIASES: case CURLOPT_MAIL_RCPT: case CURLOPT_QUOTE: case CURLOPT_POSTQUOTE: case CURLOPT_PREQUOTE: case CURLOPT_RESOLVE: case CURLOPT_SSH_KEYFUNCTION: case CURLOPT_SSH_KEYDATA: case CURLOPT_PRIVATE: case CURLOPT_SHARE: case CURLOPT_TELNETOPTIONS: case CURLOPT_STREAM_DEPENDS: case CURLOPT_STREAM_DEPENDS_E: case CURLOPT_CONNECT_TO: case CURLOPT_MIMEPOST: //todo break; //case CURLOPT_READDATA: //case CURLOPT_WRITEDATA: //case CURLOPT_HEADERDATA: //case CURLOPT_PROGRESSDATA: case CURLOPT_READFUNCTION: { // curl_gc_mutex.Lock (); // ValuePointer* callback = new ValuePointer (parameter); // readCallbacks[handle] = callback; // code = curl_easy_setopt (easy_handle, type, read_callback); // curl_easy_setopt (easy_handle, CURLOPT_READDATA, handle); // curl_gc_mutex.Unlock (); break; } case CURLOPT_READDATA: { curl_gc_mutex.Lock (); if (readBytes.find (handle) == readBytes.end ()) { delete readBytesRoot[handle]; } readBytes[handle] = bytes; readBytesPosition[handle] = 0; readBytesRoot[handle] = new ValuePointer ((vobj*)bytes); curl_easy_setopt (easy_handle, CURLOPT_SEEKFUNCTION, seek_callback); curl_easy_setopt (easy_handle, CURLOPT_SEEKDATA, handle); code = curl_easy_setopt (easy_handle, CURLOPT_READFUNCTION, read_callback); curl_easy_setopt (easy_handle, CURLOPT_READDATA, handle); curl_gc_mutex.Unlock (); break; } case CURLOPT_WRITEFUNCTION: { curl_gc_mutex.Lock (); if (writeCallbacks.find (handle) == writeCallbacks.end ()) { delete writeCallbacks[handle]; delete writeBytesRoot[handle]; } ValuePointer* callback = new ValuePointer (parameter); writeCallbacks[handle] = callback; writeBytes[handle] = bytes; writeBytesRoot[handle] = new ValuePointer ((vobj*)bytes); code = curl_easy_setopt (easy_handle, type, write_callback); curl_easy_setopt (easy_handle, CURLOPT_WRITEDATA, handle); curl_gc_mutex.Unlock (); break; } case CURLOPT_HEADERFUNCTION: { curl_gc_mutex.Lock (); if (headerCallbacks.find (handle) != headerCallbacks.end ()) { free_header_values (headerValues[handle]); delete headerCallbacks[handle]; delete headerValues[handle]; } ValuePointer* callback = new ValuePointer (parameter); headerCallbacks[handle] = callback; headerValues[handle] = new std::vector (); code = curl_easy_setopt (easy_handle, type, header_callback); curl_easy_setopt (easy_handle, CURLOPT_HEADERDATA, handle); curl_gc_mutex.Unlock (); break; } case CURLOPT_PROGRESSFUNCTION: { curl_gc_mutex.Lock (); if (progressCallbacks.find (handle) != progressCallbacks.end ()) { delete progressCallbacks[handle]; delete progressValues[handle]; } progressCallbacks[handle] = new ValuePointer (parameter); progressValues[handle] = new CURL_Progress (); code = curl_easy_setopt (easy_handle, type, progress_callback); curl_easy_setopt (easy_handle, CURLOPT_PROGRESSDATA, handle); curl_easy_setopt (easy_handle, CURLOPT_NOPROGRESS, false); curl_gc_mutex.Unlock (); break; } case CURLOPT_XFERINFOFUNCTION: { curl_gc_mutex.Lock (); if (xferInfoCallbacks.find (handle) != xferInfoCallbacks.end ()) { delete xferInfoCallbacks[handle]; delete xferInfoValues[handle]; } xferInfoCallbacks[handle] = new ValuePointer (parameter); xferInfoValues[handle] = new CURL_XferInfo (); code = curl_easy_setopt (easy_handle, type, xferinfo_callback); curl_easy_setopt (easy_handle, CURLOPT_XFERINFODATA, handle); curl_easy_setopt (easy_handle, CURLOPT_NOPROGRESS, false); curl_gc_mutex.Unlock (); break; } case CURLOPT_HTTPHEADER: { curl_gc_mutex.Lock (); if (headerSLists.find (handle) != headerSLists.end ()) { curl_slist_free_all (headerSLists[handle]); } struct curl_slist *chunk = NULL; varray* stringList = (varray*)parameter; hl_vstring** stringListData = hl_aptr (stringList, hl_vstring*); int size = stringList->size; hl_vstring* data; for (int i = 0; i < size; i++) { data = *stringListData++; chunk = curl_slist_append (chunk, data ? hl_to_utf8 (data->bytes) : NULL); } headerSLists[handle] = chunk; code = curl_easy_setopt (easy_handle, type, chunk); curl_gc_mutex.Unlock (); break; } default: break; } return code; } value lime_curl_easy_strerror (int errornum) { const char* result = curl_easy_strerror ((CURLcode)errornum); return result ? alloc_string (result) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_curl_easy_strerror) (int errornum) { const char* result = curl_easy_strerror ((CURLcode)errornum); int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); return (vbyte*)_result; } value lime_curl_easy_unescape (value curl, HxString url, int inlength, int outlength) { char* result = curl_easy_unescape ((CURL*)val_data(curl), url.__s, inlength, &outlength); return result ? alloc_string (result) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_curl_easy_unescape) (HL_CFFIPointer* curl, hl_vstring* url, int inlength, int outlength) { char* result = curl_easy_unescape ((CURL*)curl->ptr, url ? hl_to_utf8 (url->bytes) : NULL, inlength, &outlength); int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); return (vbyte*)_result; } //lime_curl_formadd; //lime_curl_formfree; //lime_curl_formget; double lime_curl_getdate (HxString datestring, double now) { time_t time = (time_t)now; return curl_getdate (datestring.__s, &time); } HL_PRIM double HL_NAME(hl_curl_getdate) (hl_vstring* datestring, double now) { time_t time = (time_t)now; return curl_getdate (datestring ? hl_to_utf8 (datestring->bytes) : NULL, &time); } void lime_curl_global_cleanup () { curl_global_cleanup (); } HL_PRIM void HL_NAME(hl_curl_global_cleanup) () { curl_global_cleanup (); } int lime_curl_global_init (int flags) { return curl_global_init (flags); } HL_PRIM int HL_NAME(hl_curl_global_init) (int flags) { return curl_global_init (flags); } int lime_curl_multi_cleanup (value multi_handle) { // curl_gc_mutex.Lock (); // CURLMcode result = curl_multi_cleanup ((CURLM*)val_data (multi_handle)); gc_curl_multi (multi_handle); // curl_gc_mutex.Unlock (); return CURLM_OK; } HL_PRIM int HL_NAME(hl_curl_multi_cleanup) (HL_CFFIPointer* multi_handle) { // curl_gc_mutex.Lock (); // CURLMcode result = curl_multi_cleanup ((CURLM*)val_data (multi_handle)); hl_gc_curl_multi (multi_handle); // curl_gc_mutex.Unlock (); return CURLM_OK; } value lime_curl_multi_init () { curl_gc_mutex.Lock (); value handle = CFFIPointer (curl_multi_init (), gc_curl_multi); if (curlMultiValid.find (handle) != curlMultiValid.end ()) { printf ("Error: Duplicate cURL Multi handle\n"); } curlMultiValid[handle] = true; curlMultiRunningHandles[handle] = 0; curlMultiHandles[handle] = new std::vector (); curl_gc_mutex.Unlock (); return handle; } HL_PRIM HL_CFFIPointer* HL_NAME(hl_curl_multi_init) () { curl_gc_mutex.Lock (); HL_CFFIPointer* handle = HLCFFIPointer (curl_multi_init (), (hl_finalizer)hl_gc_curl_multi); if (curlMultiValid.find (handle) != curlMultiValid.end ()) { printf ("Error: Duplicate cURL Multi handle\n"); } curlMultiValid[handle] = true; curlMultiRunningHandles[handle] = 0; curlMultiHandles[handle] = new std::vector (); curl_gc_mutex.Unlock (); return handle; } int lime_curl_multi_add_handle (value multi_handle, value curl_object, value curl_handle) { curl_gc_mutex.Lock (); CURLMcode result = curl_multi_add_handle ((CURLM*)val_data (multi_handle), (CURL*)val_data (curl_handle)); if (result == CURLM_OK) { curlMultiReferences[curl_handle] = multi_handle; curlMultiHandles[multi_handle]->push_back (curl_handle); curlMultiObjects[curl_handle] = new ValuePointer (curl_object); } curl_gc_mutex.Unlock (); return result; } HL_PRIM int HL_NAME(hl_curl_multi_add_handle) (HL_CFFIPointer* multi_handle, vdynamic* curl_object, HL_CFFIPointer* curl_handle) { curl_gc_mutex.Lock (); CURLMcode result = curl_multi_add_handle ((CURLM*)multi_handle->ptr, (CURL*)curl_handle->ptr); if (result == CURLM_OK) { curlMultiReferences[curl_handle] = multi_handle; curlMultiHandles[multi_handle]->push_back (curl_handle); curlMultiObjects[curl_handle] = new ValuePointer (curl_object); } curl_gc_mutex.Unlock (); return result; } int lime_curl_multi_get_running_handles (value multi_handle) { return curlMultiRunningHandles[multi_handle]; } HL_PRIM int HL_NAME(hl_curl_multi_get_running_handles) (HL_CFFIPointer* multi_handle) { return curlMultiRunningHandles[multi_handle]; } value lime_curl_multi_info_read (value multi_handle) { int msgs_in_queue; CURLMsg* msg = curl_multi_info_read ((CURLM*)val_data (multi_handle), &msgs_in_queue); if (msg) { //const field val_id ("msg"); const field id_curl = val_id ("curl"); const field id_result = val_id ("result"); CURL* curl = msg->easy_handle; value result = alloc_empty_object (); if (curlObjects.find (curl) != curlObjects.end ()) { value handle = (value)curlObjects[curl]; alloc_field (result, id_curl, (value)curlMultiObjects[handle]->Get ()); } else { // TODO? alloc_field (result, id_curl, alloc_null ()); } alloc_field (result, id_result, alloc_int (msg->data.result)); return result; } else { return alloc_null (); } } HL_PRIM vdynamic* HL_NAME(hl_curl_multi_info_read) (HL_CFFIPointer* multi_handle, vdynamic* result) { int msgs_in_queue; CURLMsg* msg = curl_multi_info_read ((CURLM*)multi_handle->ptr, &msgs_in_queue); if (msg) { //const field val_id ("msg"); const int id_curl = hl_hash_utf8 ("curl"); const int id_result = hl_hash_utf8 ("result"); CURL* curl = msg->easy_handle; if (curlObjects.find (curl) != curlObjects.end ()) { HL_CFFIPointer* handle = (HL_CFFIPointer*)curlObjects[curl]; hl_dyn_setp (result, id_curl, &hlt_dyn, (vdynamic*)curlMultiObjects[handle]->Get ()); } else { // TODO? hl_dyn_setp (result, id_curl, &hlt_dyn, NULL); } hl_dyn_seti (result, id_result, &hlt_i32, msg->data.result); return result; } else { return NULL; } } int lime_curl_multi_perform (value multi_handle) { curl_gc_mutex.Lock (); int runningHandles = 0; CURLMcode result = curl_multi_perform ((CURLM*)val_data (multi_handle), &runningHandles); std::vector* handles = curlMultiHandles[multi_handle]; for (std::vector::iterator it = handles->begin (); it != handles->end (); ++it) { curl_gc_mutex.Unlock (); lime_curl_easy_flush ((value)*it); curl_gc_mutex.Lock (); } curlMultiRunningHandles[multi_handle] = runningHandles; curl_gc_mutex.Unlock (); return result; } HL_PRIM int HL_NAME(hl_curl_multi_perform) (HL_CFFIPointer* multi_handle) { curl_gc_mutex.Lock (); int runningHandles = 0; CURLMcode result = curl_multi_perform ((CURLM*)multi_handle->ptr, &runningHandles); std::vector* handles = curlMultiHandles[multi_handle]; for (std::vector::iterator it = handles->begin (); it != handles->end (); ++it) { curl_gc_mutex.Unlock (); lime_hl_curl_easy_flush ((HL_CFFIPointer*)*it); curl_gc_mutex.Lock (); } curlMultiRunningHandles[multi_handle] = runningHandles; curl_gc_mutex.Unlock (); return result; } int lime_curl_multi_remove_handle (value multi_handle, value curl_handle) { curl_gc_mutex.Lock (); CURLMcode result = curl_multi_remove_handle ((CURLM*)val_data (multi_handle), (CURL*)val_data (curl_handle)); if (/*result == CURLM_OK &&*/ curlMultiReferences.find (curl_handle) != curlMultiReferences.end ()) { curlMultiReferences.erase (curl_handle); } std::vector* handles = curlMultiHandles[multi_handle]; if (handles->size () > 0) { for (std::vector::iterator it = handles->begin (); it != handles->end (); ++it) { if (*it == curl_handle) { handles->erase (it); delete curlMultiObjects[curl_handle]; curlMultiObjects.erase (curl_handle); break; } } } curl_gc_mutex.Unlock (); return result; } HL_PRIM int HL_NAME(hl_curl_multi_remove_handle) (HL_CFFIPointer* multi_handle, HL_CFFIPointer* curl_handle) { curl_gc_mutex.Lock (); CURLMcode result = curl_multi_remove_handle ((CURLM*)multi_handle->ptr, (CURL*)curl_handle->ptr); if (/*result == CURLM_OK &&*/ curlMultiReferences.find (curl_handle) != curlMultiReferences.end ()) { curlMultiReferences.erase (curl_handle); } std::vector* handles = curlMultiHandles[multi_handle]; if (handles->size () > 0) { for (std::vector::iterator it = handles->begin (); it != handles->end (); ++it) { if (*it == curl_handle) { handles->erase (it); delete curlMultiObjects[curl_handle]; curlMultiObjects.erase (curl_handle); break; } } } curl_gc_mutex.Unlock (); return result; } int lime_curl_multi_setopt (value multi_handle, int option, value parameter) { CURLMcode code = CURLM_OK; CURLM* multi = (CURLM*)val_data (multi_handle); CURLMoption type = (CURLMoption)option; switch (type) { case CURLMOPT_PIPELINING: code = curl_multi_setopt (multi, type, val_bool (parameter)); break; case CURLMOPT_MAXCONNECTS: case CURLMOPT_MAX_HOST_CONNECTIONS: case CURLMOPT_MAX_PIPELINE_LENGTH: case CURLMOPT_MAX_TOTAL_CONNECTIONS: case CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE: case CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE: code = curl_multi_setopt (multi, type, val_int (parameter)); break; case CURLMOPT_SOCKETFUNCTION: case CURLMOPT_SOCKETDATA: case CURLMOPT_TIMERFUNCTION: case CURLMOPT_TIMERDATA: case CURLMOPT_PUSHFUNCTION: case CURLMOPT_PUSHDATA: // TODO? break; case CURLMOPT_PIPELINING_SITE_BL: case CURLMOPT_PIPELINING_SERVER_BL: // TODO, array to slist break; default: break; } return code; } HL_PRIM int HL_NAME(hl_curl_multi_setopt) (HL_CFFIPointer* multi_handle, int option, vdynamic* parameter) { CURLMcode code = CURLM_OK; CURLM* multi = (CURLM*)multi_handle->ptr; CURLMoption type = (CURLMoption)option; switch (type) { case CURLMOPT_PIPELINING: code = curl_multi_setopt (multi, type, parameter->v.b); break; case CURLMOPT_MAXCONNECTS: case CURLMOPT_MAX_HOST_CONNECTIONS: case CURLMOPT_MAX_PIPELINE_LENGTH: case CURLMOPT_MAX_TOTAL_CONNECTIONS: case CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE: case CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE: code = curl_multi_setopt (multi, type, parameter->v.i); break; case CURLMOPT_SOCKETFUNCTION: case CURLMOPT_SOCKETDATA: case CURLMOPT_TIMERFUNCTION: case CURLMOPT_TIMERDATA: case CURLMOPT_PUSHFUNCTION: case CURLMOPT_PUSHDATA: // TODO? break; case CURLMOPT_PIPELINING_SITE_BL: case CURLMOPT_PIPELINING_SERVER_BL: // TODO, array to slist break; default: break; } return code; } int lime_curl_multi_wait (value multi_handle, int timeout_ms) { System::GCEnterBlocking (); int retcode; CURLMcode result = curl_multi_wait ((CURLM*)val_data (multi_handle), 0, 0, timeout_ms, &retcode); System::GCExitBlocking (); return result; } HL_PRIM int HL_NAME(hl_curl_multi_wait) (HL_CFFIPointer* multi_handle, int timeout_ms) { System::GCEnterBlocking (); int retcode; CURLMcode result = curl_multi_wait ((CURLM*)multi_handle->ptr, 0, 0, timeout_ms, &retcode); System::GCExitBlocking (); return result; } //lime_curl_multi_add_handle //lime_curl_multi_assign //lime_curl_multi_cleanup //lime_curl_multi_fdset //lime_curl_multi_info_read //lime_curl_multi_init //lime_curl_multi_perform //lime_curl_multi_remove_handle //lime_curl_multi_setopt //lime_curl_multi_socket //lime_curl_multi_socket_action //lime_curl_multi_strerror //lime_curl_multi_timeout //lime_curl_share_cleanup //lime_curl_share_init //lime_curl_share_setopt //lime_curl_share_strerror //lime_curl_slist_append //lime_curl_slist_free_all value lime_curl_version () { char* result = curl_version (); return result ? alloc_string (result) : alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_curl_version) () { char* result = curl_version (); int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); return (vbyte*)_result; } value lime_curl_version_info (int type) { curl_version_info_data* data = curl_version_info ((CURLversion)type); // TODO return alloc_null (); } HL_PRIM vdynamic* HL_NAME(hl_curl_version_info) (int type) { curl_version_info_data* data = curl_version_info ((CURLversion)type); // TODO return NULL; } DEFINE_PRIME1v (lime_curl_easy_cleanup); DEFINE_PRIME1 (lime_curl_easy_duphandle); DEFINE_PRIME3 (lime_curl_easy_escape); DEFINE_PRIME2 (lime_curl_easy_getinfo); DEFINE_PRIME0 (lime_curl_easy_init); DEFINE_PRIME1v (lime_curl_easy_flush); DEFINE_PRIME2 (lime_curl_easy_pause); DEFINE_PRIME1 (lime_curl_easy_perform); DEFINE_PRIME4 (lime_curl_easy_recv); DEFINE_PRIME1v (lime_curl_easy_reset); DEFINE_PRIME4 (lime_curl_easy_send); DEFINE_PRIME4 (lime_curl_easy_setopt); DEFINE_PRIME1 (lime_curl_easy_strerror); DEFINE_PRIME4 (lime_curl_easy_unescape); DEFINE_PRIME2 (lime_curl_getdate); DEFINE_PRIME0v (lime_curl_global_cleanup); DEFINE_PRIME1 (lime_curl_global_init); DEFINE_PRIME1 (lime_curl_multi_cleanup); DEFINE_PRIME0 (lime_curl_multi_init); DEFINE_PRIME3 (lime_curl_multi_add_handle); DEFINE_PRIME1 (lime_curl_multi_get_running_handles); DEFINE_PRIME1 (lime_curl_multi_info_read); DEFINE_PRIME1 (lime_curl_multi_perform); DEFINE_PRIME2 (lime_curl_multi_remove_handle); DEFINE_PRIME3 (lime_curl_multi_setopt); DEFINE_PRIME2 (lime_curl_multi_wait); DEFINE_PRIME0 (lime_curl_version); DEFINE_PRIME1 (lime_curl_version_info); #define _TBYTES _OBJ (_I32 _BYTES) #define _TCFFIPOINTER _DYN DEFINE_HL_PRIM (_VOID, hl_curl_easy_cleanup, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_curl_easy_duphandle, _TCFFIPOINTER); DEFINE_HL_PRIM (_BYTES, hl_curl_easy_escape, _TCFFIPOINTER _STRING _I32); DEFINE_HL_PRIM (_DYN, hl_curl_easy_getinfo, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_curl_easy_init, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_curl_easy_flush, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_curl_easy_pause, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_I32, hl_curl_easy_perform, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_curl_easy_recv, _TCFFIPOINTER _F64 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_curl_easy_reset, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_curl_easy_send, _TCFFIPOINTER _F64 _I32 _I32); DEFINE_HL_PRIM (_I32, hl_curl_easy_setopt, _TCFFIPOINTER _I32 _DYN _TBYTES); DEFINE_HL_PRIM (_BYTES, hl_curl_easy_strerror, _I32); DEFINE_HL_PRIM (_BYTES, hl_curl_easy_unescape, _TCFFIPOINTER _STRING _I32 _I32); DEFINE_HL_PRIM (_F64, hl_curl_getdate, _STRING _F64); DEFINE_HL_PRIM (_VOID, hl_curl_global_cleanup, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_curl_global_init, _I32); DEFINE_HL_PRIM (_I32, hl_curl_multi_cleanup, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_curl_multi_init, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_curl_multi_add_handle, _TCFFIPOINTER _DYN _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_curl_multi_get_running_handles, _TCFFIPOINTER); DEFINE_HL_PRIM (_DYN, hl_curl_multi_info_read, _TCFFIPOINTER _DYN); DEFINE_HL_PRIM (_I32, hl_curl_multi_perform, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_curl_multi_remove_handle, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_curl_multi_setopt, _TCFFIPOINTER _I32 _DYN); DEFINE_HL_PRIM (_I32, hl_curl_multi_wait, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_BYTES, hl_curl_version, _NO_ARG); DEFINE_HL_PRIM (_DYN, hl_curl_version_info, _I32); } extern "C" int lime_curl_register_prims () { return 0; } ================================================ FILE: project/src/system/CFFI.cpp ================================================ #include #ifndef LIME_HASHLINK HL_API int hl_type_size( hl_type *t ) { return 0; } HL_API int hl_pad_struct( int size, hl_type *t ) { return 0; } HL_API hl_runtime_obj *hl_get_obj_rt( hl_type *ot ) { return NULL; } HL_API hl_runtime_obj *hl_get_obj_proto( hl_type *ot ) { return NULL; } HL_API void hl_flush_proto( hl_type *ot ) {} HL_API void hl_init_enum( hl_type *et, hl_module_context *m ) {} hl_type hlt_void = hl_type (); hl_type hlt_i32 = hl_type (); hl_type hlt_i64 = hl_type (); hl_type hlt_f64 = hl_type (); hl_type hlt_f32 = hl_type (); hl_type hlt_dyn = hl_type (); hl_type hlt_array = hl_type (); hl_type hlt_bytes = hl_type (); hl_type hlt_dynobj = hl_type (); hl_type hlt_bool = hl_type (); hl_type hlt_abstract = hl_type (); HL_API double hl_nan( void ) { return 0; } HL_API bool hl_is_dynamic( hl_type *t ) { return false; } HL_API bool hl_same_type( hl_type *a, hl_type *b ) { return false; } HL_API bool hl_safe_cast( hl_type *t, hl_type *to ) { return false; } HL_API varray *hl_alloc_array( hl_type *t, int size ) { return NULL; } HL_API vdynamic *hl_alloc_dynamic( hl_type *t ) { return NULL; } HL_API vdynamic *hl_alloc_dynbool( bool b ) { return NULL; } HL_API vdynamic *hl_alloc_obj( hl_type *t ) { return NULL; } HL_API venum *hl_alloc_enum( hl_type *t, int index ) { return NULL; } HL_API vvirtual *hl_alloc_virtual( hl_type *t ) { return NULL; } HL_API vdynobj *hl_alloc_dynobj( void ) { return 0; } HL_API vbyte *hl_alloc_bytes( int size ) { return NULL; } HL_API vbyte *hl_copy_bytes( const vbyte *byte, int size ) { return NULL; } HL_API int hl_utf8_length( const vbyte *s, int pos ) { return 0; } HL_API int hl_from_utf8( uchar *out, int outLen, const char *str ) { return 0; } HL_API char *hl_to_utf8( const uchar *bytes ) { return 0; } HL_API uchar *hl_to_utf16( const char *str ) { return NULL; } HL_API vdynamic *hl_virtual_make_value( vvirtual *v ) { return NULL; } HL_API hl_obj_field *hl_obj_field_fetch( hl_type *t, int fid ) { return NULL; } HL_API int hl_hash( vbyte *name ) { return 0; } HL_API int hl_hash_utf8 ( const char *str ) { return 0; } // no cache HL_API int hl_hash_gen( const uchar *name, bool cache_name ) { return 0; } HL_API vbyte *hl_field_name( int hash ) { return NULL; } HL_API void hl_error_msg( const uchar *msg, ... ) {} HL_API void hl_assert( void ) {} HL_API void hl_throw( vdynamic *v ) { throw ""; } HL_API void hl_rethrow( vdynamic *v ) { throw ""; } HL_API void hl_setup_longjump( void *j ) {} HL_API void hl_setup_exception( void *resolve_symbol, void *capture_stack ) {} HL_API void hl_dump_stack( void ) {} HL_API varray *hl_exception_stack( void ) { return NULL; } HL_API bool hl_detect_debugger( void ) { return false; } HL_API vvirtual *hl_to_virtual( hl_type *vt, vdynamic *obj ) { return NULL; } HL_API void hl_init_virtual( hl_type *vt, hl_module_context *ctx ) {} HL_API hl_field_lookup *hl_lookup_find( hl_field_lookup *l, int size, int hash ) { return NULL; } HL_API hl_field_lookup *hl_lookup_insert( hl_field_lookup *l, int size, int hash, hl_type *t, int index ) { return NULL; } HL_API int hl_dyn_geti( vdynamic *d, int hfield, hl_type *t ) { return 0; } HL_API void *hl_dyn_getp( vdynamic *d, int hfield, hl_type *t ) { return NULL; } HL_API float hl_dyn_getf( vdynamic *d, int hfield ) { return 0; } HL_API double hl_dyn_getd( vdynamic *d, int hfield ) { return 0; } HL_API int hl_dyn_casti( void *data, hl_type *t, hl_type *to ) { return 0; } HL_API void *hl_dyn_castp( void *data, hl_type *t, hl_type *to ) { return NULL; } HL_API float hl_dyn_castf( void *data, hl_type *t ) { return 0; } HL_API double hl_dyn_castd( void *data, hl_type *t ) { return 0; } HL_API int hl_dyn_compare( vdynamic *a, vdynamic *b ) { return 0; } HL_API vdynamic *hl_make_dyn( void *data, hl_type *t ) { return NULL; } HL_API void hl_write_dyn( void *data, hl_type *t, vdynamic *v, bool is_tmp ) {} HL_API void hl_dyn_seti( vdynamic *d, int hfield, hl_type *t, int value ) {} HL_API void hl_dyn_setp( vdynamic *d, int hfield, hl_type *t, void *ptr ) {} HL_API void hl_dyn_setf( vdynamic *d, int hfield, float f ) {} HL_API void hl_dyn_setd( vdynamic *d, int hfield, double v ) {} HL_API vdynamic *hl_dyn_op( int op, vdynamic *a, vdynamic *b ) { return NULL; } HL_API vclosure *hl_alloc_closure_void( hl_type *t, void *fvalue ) { return NULL; } HL_API vclosure *hl_alloc_closure_ptr( hl_type *fullt, void *fvalue, void *ptr ) { return NULL; } HL_API vclosure *hl_make_fun_wrapper( vclosure *c, hl_type *to ) { return NULL; } HL_API void *hl_wrapper_call( void *value, void **args, vdynamic *ret ) { return NULL; } HL_API void *hl_dyn_call_obj( vdynamic *obj, hl_type *ft, int hfield, void **args, vdynamic *ret ) { return NULL; } HL_API vdynamic *hl_dyn_call( vclosure *c, vdynamic **args, int nargs ) { return 0; } HL_API vdynamic *hl_dyn_call_safe( vclosure *c, vdynamic **args, int nargs, bool *isException ) { return NULL; } HL_API hl_thread *hl_thread_start( void *callback, void *param, bool withGC ) { return NULL; } HL_API hl_thread *hl_thread_current( void ) { return NULL; } HL_API void hl_thread_yield(void) {} HL_API void hl_register_thread( void *stack_top ) {} HL_API void hl_unregister_thread( void ) {} HL_API hl_mutex *hl_mutex_alloc( bool gc_thread ) { return NULL; } HL_API void hl_mutex_acquire( hl_mutex *l ) {} HL_API bool hl_mutex_try_acquire( hl_mutex *l ) { return false; } HL_API void hl_mutex_release( hl_mutex *l ) {} HL_API void hl_mutex_free( hl_mutex *l ) {} HL_API hl_tls *hl_tls_alloc( bool gc_value ) { return NULL; } HL_API void hl_tls_set( hl_tls *l, void *value ) {} HL_API void *hl_tls_get( hl_tls *l ); HL_API void hl_tls_free( hl_tls *l ) {} HL_API void *hl_gc_alloc_gen( hl_type *t, int size, int flags ) { return 0; } HL_API void hl_add_root( void *ptr ) {} HL_API void hl_remove_root( void *ptr ) {} HL_API void hl_gc_major( void ) {} HL_API bool hl_is_gc_ptr( void *ptr ) { return false; } HL_API void hl_blocking( bool b ) {} HL_API bool hl_is_blocking( void ) { return false; } HL_API void hl_gc_set_dump_types( hl_types_dump tdump ) {} HL_API void hl_alloc_init( hl_alloc *a ) {} HL_API void *hl_malloc( hl_alloc *a, int size ) { return NULL; } HL_API void *hl_zalloc( hl_alloc *a, int size ) { return NULL; } HL_API void hl_free( hl_alloc *a ) {} HL_API void hl_global_init( void ) {} HL_API void hl_global_free( void ) {} HL_API void *hl_alloc_executable_memory( int size ) { return NULL; } HL_API void hl_free_executable_memory( void *ptr, int size ) {} HL_API hl_buffer *hl_alloc_buffer( void ) { return NULL; } HL_API void hl_buffer_val( hl_buffer *b, vdynamic *v ) {} HL_API void hl_buffer_char( hl_buffer *b, uchar c ) {} HL_API void hl_buffer_str( hl_buffer *b, const uchar *str ) {} HL_API void hl_buffer_cstr( hl_buffer *b, const char *str ) {} HL_API void hl_buffer_str_sub( hl_buffer *b, const uchar *str, int len ) {} HL_API int hl_buffer_length( hl_buffer *b ) { return 0; } HL_API uchar *hl_buffer_content( hl_buffer *b, int *len ) { return NULL; } HL_API uchar *hl_to_string( vdynamic *v ) { return NULL; } HL_API const uchar *hl_type_str( hl_type *t ) { return NULL; } HL_API void *hl_fatal_error( const char *msg, const char *file, int line ) { return NULL; } HL_API void hl_fatal_fmt( const char *file, int line, const char *fmt, ...) {} HL_API void hl_sys_init(void **args, int nargs, void *hlfile) {} HL_API void hl_setup_callbacks(void *sc, void *gw) {} HL_API void hl_setup_reload_check( void *freload, void *param ) {} HL_API hl_thread_info *hl_get_thread() { return NULL; } #endif ================================================ FILE: project/src/system/CFFIPointer.cpp ================================================ #include namespace lime { value CFFIPointer (void* ptr, hx::finalizer finalizer) { if (ptr) { value handle = cffi::alloc_pointer (ptr); if (finalizer) { val_gc (handle, finalizer); } return handle; } else { return alloc_null (); } } value CFFIPointer (value handle, hx::finalizer finalizer) { if (!val_is_null (handle) && finalizer) { val_gc (handle, finalizer); } return handle; } HL_CFFIPointer* HLCFFIPointer (void* handle, hl_finalizer finalizer) { if (handle) { HL_CFFIPointer* pointer = (HL_CFFIPointer*)hl_gc_alloc_finalizer (sizeof (HL_CFFIPointer)); pointer->finalizer = finalizer ? (void*)finalizer : 0; pointer->ptr = handle; return pointer; } else { return 0; } } } ================================================ FILE: project/src/system/ClipboardEvent.cpp ================================================ #include #include namespace lime { ValuePointer* ClipboardEvent::callback = 0; ValuePointer* ClipboardEvent::eventObject = 0; static int id_type; static bool init = false; ClipboardEvent::ClipboardEvent () { type = CLIPBOARD_UPDATE; } void ClipboardEvent::Dispatch (ClipboardEvent* event) { if (ClipboardEvent::callback) { if (ClipboardEvent::eventObject->IsCFFIValue ()) { if (!init) { id_type = val_id ("type"); init = true; } value object = (value)ClipboardEvent::eventObject->Get (); alloc_field (object, id_type, alloc_int (event->type)); } else { ClipboardEvent* eventObject = (ClipboardEvent*)ClipboardEvent::eventObject->Get (); eventObject->type = event->type; } ClipboardEvent::callback->Call (); } } } ================================================ FILE: project/src/system/Display.cpp ================================================ #include #include namespace lime { void Display::GetSafeAreaInsets (int displayIndex, Rectangle * rect) { rect->SetTo(0.0, 0.0, 0.0, 0.0); } } ================================================ FILE: project/src/system/Display.mm ================================================ #ifdef HX_MACOS #import #else #import #endif #include #include namespace lime { void Display::GetSafeAreaInsets (int displayIndex, Rectangle * rect) { #ifdef HX_MACOS if (@available(macOS 12, *)) { NSScreen * screen = [[NSScreen screens] objectAtIndex: displayIndex]; NSEdgeInsets safeAreaInsets = [screen safeAreaInsets]; rect->SetTo(safeAreaInsets.left, safeAreaInsets.top, safeAreaInsets.right, safeAreaInsets.bottom); return; } #endif #ifdef IPHONE if (@available(iOS 11, *)) { UIWindow * window = [[UIApplication sharedApplication] keyWindow]; UIEdgeInsets safeAreaInsets = [window safeAreaInsets]; rect->SetTo(safeAreaInsets.left, safeAreaInsets.top, safeAreaInsets.right, safeAreaInsets.bottom); return; } #endif rect->SetTo(0.0, 0.0, 0.0, 0.0); } } ================================================ FILE: project/src/system/DisplayMode.cpp ================================================ #include namespace lime { static int id_height; static int id_pixelFormat; static int id_refreshRate; static int id_width; static bool init = false; DisplayMode::DisplayMode () { width = 0; height = 0; pixelFormat = RGBA32; refreshRate = 0; } DisplayMode::DisplayMode (value displayMode) { width = val_int (val_field (displayMode, id_width)); height = val_int (val_field (displayMode, id_height)); pixelFormat = (PixelFormat)val_int (val_field (displayMode, id_pixelFormat)); refreshRate = val_int (val_field (displayMode, id_refreshRate)); } DisplayMode::DisplayMode (int _width, int _height, PixelFormat _pixelFormat, int _refreshRate) { width = _width; height = _height; pixelFormat = _pixelFormat; refreshRate = _refreshRate; } void DisplayMode::CopyFrom (DisplayMode* other) { height = other->height; pixelFormat = other->pixelFormat; refreshRate = other->refreshRate; width = other->width; } void* DisplayMode::Value () { // if (_mode) { // _mode->height = height; // _mode->pixelFormat = pixelFormat; // _mode->refreshRate = refreshRate; // _mode->width = width; // return _mode; // } else { if (!init) { id_height = val_id ("height"); id_pixelFormat = val_id ("pixelFormat"); id_refreshRate = val_id ("refreshRate"); id_width = val_id ("width"); init = true; } value displayMode = alloc_empty_object (); alloc_field (displayMode, id_height, alloc_int (height)); alloc_field (displayMode, id_pixelFormat, alloc_int (pixelFormat)); alloc_field (displayMode, id_refreshRate, alloc_int (refreshRate)); alloc_field (displayMode, id_width, alloc_int (width)); return displayMode; // } } } ================================================ FILE: project/src/system/FileWatcher.cpp ================================================ // include order is important #include #include namespace lime { class UpdateListener : public efsw::FileWatchListener { public: UpdateListener (FileWatcher* _watcher) { watcher = _watcher; } void handleFileAction (efsw::WatchID watchid, const std::string& dir, const std::string& filename, efsw::Action action, std::string oldFilename = "") { FileWatcherEvent event = { watchid, std::string (dir.begin (), dir.end ()), std::string (filename.begin (), filename.end ()), action, oldFilename }; watcher->QueueEvent (event); } FileWatcher* watcher; }; FileWatcher::FileWatcher (value _callback) { callback = new AutoGCRoot (_callback); fileWatcher = new efsw::FileWatcher (); mutex = 0; } FileWatcher::~FileWatcher () { delete callback; delete (efsw::FileWatcher*)fileWatcher; if (mutex) { delete mutex; } std::map::iterator it; for (it = listeners.begin (); it != listeners.end (); it++) { delete (UpdateListener*)listeners[it->first]; } } long FileWatcher::AddDirectory (std::string directory, bool recursive) { UpdateListener* listener = new UpdateListener (this); efsw::WatchID watchID = ((efsw::FileWatcher*)fileWatcher)->addWatch (directory, listener, true); if (watchID >= 0) { listeners[watchID] = listener; if (!mutex) { mutex = new Mutex (); ((efsw::FileWatcher*)fileWatcher)->watch (); } } return watchID; } void FileWatcher::QueueEvent (FileWatcherEvent event) { mutex->Lock (); queue.push_back (event); mutex->Unlock (); } void FileWatcher::RemoveDirectory (long watchID) { ((efsw::FileWatcher*)fileWatcher)->removeWatch (watchID); if (listeners.find (watchID) != listeners.end ()) { delete (UpdateListener*)listeners[watchID]; listeners.erase (watchID); } } void FileWatcher::Update () { if (mutex) { mutex->Lock (); int size = queue.size (); if (size > 0) { FileWatcherEvent event; value _callback = callback->get (); for (int i = 0; i < size; i++) { event = queue[i]; value args[4] = { alloc_string (event.dir.c_str ()), alloc_string (event.file.c_str ()), alloc_int (event.action), alloc_string (event.oldFile.c_str ()) }; val_callN (_callback, args, 4); } queue.clear (); } mutex->Unlock (); } } } ================================================ FILE: project/src/system/JNI.cpp ================================================ #include #include #include #include #include #include #include #include #include #define ELOG(args...) __android_log_print (ANDROID_LOG_ERROR, "Lime", args) #ifdef __GNUC__ #define JAVA_EXPORT __attribute__ ((visibility("default"))) JNIEXPORT #else #define JAVA_EXPORT JNIEXPORT #endif namespace lime { vkind gObjectKind; inline void release_object (value inValue) { if (val_is_kind (inValue, gObjectKind)) { Object* obj = (Object*)val_to_kind (inValue, gObjectKind); if (obj) { obj->DecRef (); } } } inline value ObjectToAbstract (Object *inObject) { inObject->IncRef (); value result = alloc_abstract (gObjectKind, inObject); val_gc (result, release_object); return result; } template bool AbstractToObject (value inValue, OBJ *&outObj) { outObj = 0; if (!val_is_kind (inValue, gObjectKind)) { return false; } Object* obj = (Object*)val_to_kind (inValue, gObjectKind); outObj = dynamic_cast (obj); return outObj; } void CheckException (JNIEnv *env, bool inThrow = true) { jthrowable exc = env->ExceptionOccurred (); if (exc) { env->ExceptionDescribe (); env->ExceptionClear (); if (inThrow) { val_throw (alloc_string ("JNI Exception")); } } } std::map jClassCache; jclass FindClass (const char *className, bool inQuiet = false) { std::string cppClassName (className); jclass ret; if (jClassCache[cppClassName] != NULL) { ret = jClassCache[cppClassName]; } else { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); jclass tmp = env->FindClass (className); if (!tmp) { if (inQuiet) { jthrowable exc = env->ExceptionOccurred (); if (exc) { env->ExceptionClear (); } } else { CheckException (env); } return 0; } ret = (jclass)env->NewGlobalRef (tmp); jClassCache[cppClassName] = ret; env->DeleteLocalRef (tmp); } return ret; } struct AutoHaxe { int base; const char *message; AutoHaxe (const char *inMessage) { base = 0; message = inMessage; gc_set_top_of_stack (&base, true); //__android_log_print (ANDROID_LOG_VERBOSE, "Lime", "Enter %s %p", message, pthread_self ()); } ~AutoHaxe () { //__android_log_print (ANDROID_LOG_VERBOSE, "Lime", "Leave %s %p", message, pthread_self ()); gc_set_top_of_stack (0, true); } }; static bool sInit = false; jclass GameActivity; jclass ObjectClass; jmethodID postUICallback; jmethodID isArrayClass; jclass HaxeObject; jclass ValueObject; jmethodID HaxeObject_create; jfieldID __haxeHandle; enum JNIElement { jniUnknown, jniObjectString, jniObjectHaxe, jniValueObject, jniObject, jniPODStart, jniBoolean = jniPODStart, jniByte, jniChar, jniShort, jniInt, jniLong, jniFloat, jniDouble, jniVoid, jniELEMENTS }; std::string ClassNameOf (JNIEnv *inEnv, jclass inObject) { if (inObject == 0) { return "NULL"; } else { jclass classClass = FindClass ("java/lang/Class"); jmethodID mid_getName = inEnv->GetMethodID (classClass, "getName", "()Ljava/lang/String;"); jstring name = (jstring)inEnv->CallObjectMethod (inObject, mid_getName); jthrowable exc = inEnv->ExceptionOccurred (); if (exc) { inEnv->ExceptionClear (); } jboolean is_copy; const char *utf8 = inEnv->GetStringUTFChars (name, &is_copy); std::string result = utf8; inEnv->ReleaseStringUTFChars (name, utf8); inEnv->DeleteLocalRef (name); return result; } } std::string ClassOf (JNIEnv *inEnv, jobject inObject) { if (inObject == 0) { return "NULL"; } else { jclass cls = inEnv->GetObjectClass (inObject); return ClassNameOf (inEnv, cls); } } struct JNIType { typedef std::map ClassMap; JNIType () : element (jniUnknown), arrayDepth (0) { } JNIType (JNIElement inElem, int inDepth) : element (inElem), arrayDepth (inDepth) { } JNIType elemType () { return (arrayDepth > 0) ? JNIType (element, arrayDepth - 1) : JNIType (); } bool isUnknownType () const { return element == jniUnknown && arrayDepth == 0; } bool isUnknown () const { return element == jniUnknown; } bool isObject () const { return element < jniPODStart || arrayDepth > 0; } bool operator < (const JNIType &inRHS) const { if (arrayDepth!=inRHS.arrayDepth) { return arrayDepth 1 || (arrayDepth == 1 && element < jniPODStart)) { return ObjectClass; } ClassMap::iterator i = mClasses.find (*this); if (i != mClasses.end ()) { return i->second; } std::string name (arrayDepth ? "[" : ""); switch (element) { case jniObjectString: name += "java/lang/String"; break; case jniObjectHaxe: name += "org/haxe/lime/HaxeObject"; break; case jniValueObject: name += "org/haxe/lime/Value"; break; case jniUnknown: case jniObject: name += "java/lang/Object"; break; case jniBoolean: name += "Z"; break; case jniVoid: name += "V"; break; case jniByte: name += "B"; break; case jniChar: name += "C"; break; case jniShort: name += "S"; break; case jniInt: name += "I"; break; case jniLong: name += "J"; break; case jniFloat: name += "F"; break; case jniDouble: name += "D"; break; default: mClasses[*this] = 0; return 0; } jclass result = inEnv->FindClass (name.c_str ()); if (result) { mClasses[*this] = (jclass)inEnv->NewGlobalRef (result); inEnv->DeleteLocalRef (result); } return mClasses[*this]; } static void init (JNIEnv *inEnv) { for (int i = 0; i < jniELEMENTS; i++) { elementGetValue[i] = 0; } elementClass[jniBoolean] = FindClass ("java/lang/Boolean"); elementGetValue[jniBoolean] = inEnv->GetMethodID (elementClass[jniBoolean], "booleanValue", "()Z"); CheckException (inEnv, false); elementClass[jniByte] = FindClass ("java/lang/Byte"); elementGetValue[jniByte] = inEnv->GetMethodID (elementClass[jniByte], "doubleValue", "()D"); CheckException (inEnv, false); elementClass[jniChar] = FindClass ("java/lang/Character"); elementGetValue[jniChar] = inEnv->GetMethodID (elementClass[jniChar], "charValue", "()C"); CheckException (inEnv, false); elementClass[jniShort] = FindClass ("java/lang/Short"); elementGetValue[jniShort] = inEnv->GetMethodID (elementClass[jniShort], "doubleValue", "()D"); CheckException (inEnv, false); elementClass[jniInt] = FindClass ("java/lang/Integer"); elementGetValue[jniInt] = inEnv->GetMethodID (elementClass[jniInt], "doubleValue", "()D"); CheckException (inEnv, false); elementClass[jniLong] = FindClass ("java/lang/Long"); elementGetValue[jniLong] = inEnv->GetMethodID (elementClass[jniLong], "doubleValue", "()D"); CheckException (inEnv, false); elementClass[jniFloat] = FindClass ("java/lang/Float"); elementGetValue[jniFloat] = inEnv->GetMethodID (elementClass[jniFloat], "doubleValue", "()D"); CheckException (inEnv, false); elementClass[jniDouble] = FindClass ("java/lang/Double"); elementGetValue[jniDouble] = inEnv->GetMethodID (elementClass[jniDouble], "doubleValue", "()D"); CheckException (inEnv, false); elementClass[jniVoid] = 0; for (int i = 0; i < jniELEMENTS; i++) { JNIType type ((JNIElement)i, 1); if (i == jniVoid) { elementArrayClass[i] = 0; } else { elementArrayClass[i] = type.getClass (inEnv); } if (i < jniPODStart) { elementClass[i] = JNIType ((JNIElement)i, 0).getClass (inEnv); } else { //ELOG("POD type %d = %p", i, elementClass[i]); } CheckException (inEnv, false); } elementGetValue[jniValueObject] = inEnv->GetMethodID (elementClass[jniValueObject], "getDouble", "()D"); } JNIElement element; static jclass elementClass[jniELEMENTS]; static jclass elementArrayClass[jniELEMENTS]; static jmethodID elementGetValue[jniELEMENTS]; int arrayDepth; static ClassMap mClasses; }; JNIType::ClassMap JNIType::mClasses; //JNIType JNIType::elementClass[jniELEMENTS]; jclass JNIType::elementClass[jniELEMENTS]; jmethodID JNIType::elementGetValue[jniELEMENTS]; jclass JNIType::elementArrayClass[jniELEMENTS]; AutoGCRoot *gCallback = 0; void JNIInit (JNIEnv *env) { if (sInit) { return; } GameActivity = FindClass ("org/haxe/lime/GameActivity"); postUICallback = env->GetStaticMethodID (GameActivity, "postUICallback", "(J)V"); ObjectClass = FindClass ("java/lang/Object"); ValueObject = FindClass ("org/haxe/lime/Value"); HaxeObject = JNIType (jniObjectHaxe, 0).getClass (env); HaxeObject_create = env->GetStaticMethodID (HaxeObject, "create", "(J)Lorg/haxe/lime/HaxeObject;"); __haxeHandle = env->GetFieldID (HaxeObject, "__haxeHandle", "J"); jclass classClass = FindClass ("java/lang/Class"); isArrayClass = env->GetMethodID (classClass, "isArray", "()Z"); JNIType::init (env); sInit = true; } value lime_jni_init_callback (value inCallback) { if (!gCallback) { gCallback = new AutoGCRoot (inCallback); } return alloc_null (); } DEFINE_PRIME1 (lime_jni_init_callback); struct JavaHaxeReference { JavaHaxeReference (value inValue) : root (inValue) { refCount = 1; } int refCount; AutoGCRoot root; }; typedef std::map JavaHaxeReferenceMap; JavaHaxeReferenceMap gJavaObjects; bool gJavaObjectsMutexInit = false; pthread_mutex_t gJavaObjectsMutex; jobject CreateJavaHaxeObjectRef (JNIEnv *env, value inValue) { JNIInit (env); if (!gJavaObjectsMutexInit) { gJavaObjectsMutexInit = false; pthread_mutex_init (&gJavaObjectsMutex, 0); } pthread_mutex_lock (&gJavaObjectsMutex); JavaHaxeReferenceMap::iterator it = gJavaObjects.find (inValue); if (it != gJavaObjects.end ()) { it->second->refCount++; } else { gJavaObjects[inValue] = new JavaHaxeReference (inValue); } pthread_mutex_unlock (&gJavaObjectsMutex); jobject result = env->CallStaticObjectMethod (HaxeObject, HaxeObject_create, (jlong)inValue); jthrowable exc = env->ExceptionOccurred (); CheckException (env); return result; } void RemoveJavaHaxeObjectRef (value inValue) { pthread_mutex_lock (&gJavaObjectsMutex); JavaHaxeReferenceMap::iterator it = gJavaObjects.find (inValue); if (it != gJavaObjects.end ()) { it->second->refCount--; if (!it->second->refCount) { delete it->second; gJavaObjects.erase (it); } } else { ELOG ("Bad jni reference count"); } pthread_mutex_unlock (&gJavaObjectsMutex); } struct JNIObject : public lime::Object { JNIObject (jobject inObject) { mObject = inObject; if (mObject) { mObject = ((JNIEnv*)JNI::GetEnv ())->NewGlobalRef (mObject); } } ~JNIObject () { if (mObject) { ((JNIEnv*)JNI::GetEnv ())->DeleteGlobalRef (mObject); } } operator jobject () { return mObject; } jobject GetJObject () { return mObject; } jobject mObject; }; bool AbstractToJObject (value inValue, jobject &outObject) { JNIObject *jniobj = 0; if (AbstractToObject (inValue, jniobj)) { outObject = jniobj->GetJObject (); return true; } static int id__jobject = -1; if (id__jobject < 0) { id__jobject = val_id ("__jobject"); } value jobj = val_field (inValue, id__jobject); if (val_is_null (jobj)) { return false; } return AbstractToJObject (jobj, outObject); } value JStringToHaxe (JNIEnv *inEnv, jobject inObject) { jboolean is_copy; const char *str = inEnv->GetStringUTFChars ((jstring)inObject, &is_copy); value result = alloc_string (str); inEnv->ReleaseStringUTFChars ((jstring)inObject, str); return result; } value JObjectToHaxeObject (JNIEnv *env, jobject inObject) { if (inObject) { jlong val = env->GetLongField (inObject, __haxeHandle); return (value)val; } return alloc_null (); } #define ARRAY_SET(PRIM,JTYPE,CREATE) \ case jni##PRIM: \ { \ if (len > 0) {\ \ jboolean copy; \ JTYPE *data = inEnv->Get##PRIM##ArrayElements ((JTYPE##Array)inObject, ©); \ for (int i = 0; i < len; i++) { \ \ val_array_set_i (result, i, CREATE (data[i])); \ \ } \ \ inEnv->Release##PRIM##ArrayElements ((JTYPE##Array)inObject, data, JNI_ABORT); \ \ } \ \ }\ break; void DebugObject (JNIEnv *inEnv, const char *inMessage, jobject inObject) { if (inObject == 0) { ELOG ("%s : null", inMessage); } else { jclass cls = inEnv->GetObjectClass (inObject); jmethodID mid = inEnv->GetMethodID (cls, "toString", "()V"); jthrowable exc = inEnv->ExceptionOccurred (); if (exc) { inEnv->ExceptionClear (); } CheckException (inEnv, false); if (mid) { jstring str = (jstring)inEnv->CallObjectMethod (cls, mid); jboolean is_copy; const char *utf8 = inEnv->GetStringUTFChars (str, &is_copy); ELOG ("%s : '%s'", inMessage, utf8); inEnv->ReleaseStringUTFChars (str, utf8); inEnv->DeleteLocalRef (str); } else { ELOG ("%s : no toString in class '%s'", inMessage, ClassOf (inEnv, inObject).c_str ()); } } } value JObjectToHaxe (JNIEnv *inEnv, JNIType inType, jobject inObject) { if (inObject == 0) { return alloc_null (); } if (inType.isUnknownType ()) { jclass cls = inEnv->GetObjectClass (inObject); if (cls) { for (int i = 0; i < jniELEMENTS; i++) { if (JNIType::elementClass[i] == 0) continue; if (inEnv->IsSameObject (cls, JNIType::elementClass[i])) { inType = JNIType ((JNIElement)i, 0); break; } } if (inType.isUnknownType ()) { for (int i = 0; i < jniELEMENTS; i++) { if (JNIType::elementArrayClass[i] == 0) continue; if (inEnv->IsSameObject (cls, JNIType::elementArrayClass[i])) { inType = JNIType ((JNIElement)i, 1); break; } } } if (inType.isUnknownType ()) { if (inEnv->CallBooleanMethod (cls, isArrayClass)) { inType = JNIType (jniUnknown, 1); } } } if (inType.isUnknownType ()) { inType = JNIType (jniObject, 0); } } if (inType.arrayDepth > 1 || (inType.arrayDepth == 1 && inType.element < jniPODStart)) { int len = inEnv->GetArrayLength ((jarray)inObject); value result = alloc_array (len); JNIType child = inType.elemType (); for (int i = 0; i < len; i++) { val_array_set_i (result, i, JObjectToHaxe (inEnv, child, inEnv->GetObjectArrayElement ((jobjectArray)inObject, i))); } return result; } else if (inType.arrayDepth == 1) { int len = inEnv->GetArrayLength ((jarray)inObject); value result = alloc_array (len); switch (inType.element) { ARRAY_SET (Boolean, jboolean, alloc_bool) //ARRAY_SET (Byte, jbyte, alloc_int) ARRAY_SET (Char, jchar, alloc_int) ARRAY_SET (Short, jshort, alloc_int) ARRAY_SET (Int, jint, alloc_int) ARRAY_SET (Long, jlong, alloc_int) ARRAY_SET (Float, jfloat, alloc_float) ARRAY_SET (Double, jdouble, alloc_float) case jniByte: { if (len > 0) { jboolean copy; jbyte *data = inEnv->GetByteArrayElements ((jbyteArray)inObject, ©); for (int i = 0; i < len; i++) { val_array_set_i (result, i, alloc_int (data[i])); } inEnv->ReleaseByteArrayElements ((jbyteArray)inObject, data, JNI_ABORT); } } default: break; } return result; } else { switch (inType.element) { case jniObject: { JNIObject *obj = new JNIObject (inObject); return ObjectToAbstract (obj); } case jniObjectHaxe: return JObjectToHaxeObject (inEnv, inObject); case jniObjectString: return JStringToHaxe (inEnv, inObject); case jniVoid: return alloc_null (); case jniBoolean: return alloc_bool (inEnv->CallBooleanMethod (inObject, JNIType::elementGetValue[jniBoolean])); case jniChar: return alloc_int (inEnv->CallCharMethod (inObject, JNIType::elementGetValue[jniChar])); case jniShort: case jniByte: case jniInt: case jniLong: case jniFloat: case jniDouble: case jniValueObject: return alloc_float (inEnv->CallDoubleMethod (inObject, JNIType::elementGetValue[inType.element])); default: { jclass cls = inEnv->GetObjectClass (inObject); if (cls) { jmethodID mid = inEnv->GetMethodID (cls, "toString", "()V"); if (mid) { jstring str = (jstring)inEnv->CallObjectMethod (cls, mid); value result = JStringToHaxe (inEnv, str); inEnv->DeleteLocalRef (str); return result; } } } } } return alloc_null (); } const char *JNIParseType (const char *inStr, JNIType &outType, int inDepth = 0) { switch (*inStr++) { case 'B': outType = JNIType (jniByte, inDepth); return inStr; case 'C': outType = JNIType (jniChar, inDepth); return inStr; case 'D': outType = JNIType (jniDouble, inDepth); return inStr; case 'F': outType = JNIType (jniFloat, inDepth); return inStr; case 'I': outType = JNIType (jniInt, inDepth); return inStr; case 'J': outType = JNIType (jniLong, inDepth); return inStr; case 'S': outType = JNIType (jniShort, inDepth); return inStr; case 'V': outType = JNIType (jniVoid, inDepth); return inStr; case 'Z': outType = JNIType (jniBoolean, inDepth); return inStr; case '[': { return JNIParseType (inStr, outType, inDepth + 1); } case 'L': { const char *src = inStr; while (*inStr != '\0' && *inStr != ';' && *inStr != ')') { inStr++; } if (*inStr != ';') { break; } if (!strncmp (src, "java/lang/String;", 17) || !strncmp (src, "java/lang/CharSequence;", 23)) { outType = JNIType (jniObjectString, inDepth); } else if (!strncmp(src,"org/haxe/lime/HaxeObject;", 25)) { outType = JNIType (jniObjectHaxe, inDepth); } else { outType = JNIType (jniObject, inDepth); } return inStr + 1; } } outType = JNIType (); return inStr; } #define ARRAY_COPY(PRIM,JTYPE) \ case jni##PRIM: \ { \ JTYPE##Array arr = inEnv->New##PRIM##Array (len); \ \ if (len > 0) { \ \ jboolean copy; \ JTYPE *data = inEnv->Get##PRIM##ArrayElements (arr, ©); \ \ for (int i = 0; i < len; i++) { \ \ data[i] = (JTYPE)val_number (val_array_i (inValue, i)); \ \ } \ \ inEnv->Release##PRIM##ArrayElements (arr, data, 0); \ \ } \ \ out.l = arr; \ return true; \ \ } bool HaxeToJNI (JNIEnv *inEnv, value inValue, JNIType inType, jvalue &out) { if (inType.isUnknown ()) { return false; } else if (inType.arrayDepth > 1 || (inType.arrayDepth == 1 && inType.element < jniPODStart)) { int len = val_array_size (inValue); JNIType etype = inType.elemType (); jclass cls = etype.getClass (inEnv); if (!cls) { cls = JNIType (jniObject, inType.arrayDepth - 1).getClass (inEnv); } jobjectArray arr = (jobjectArray)inEnv->NewObjectArray (len, cls, 0); for (int i = 0; i < len; i++) { jvalue elem_i; HaxeToJNI (inEnv, val_array_i (inValue, i), etype, elem_i); inEnv->SetObjectArrayElement (arr, i, elem_i.l); } out.l = arr; return true; } else if (inType.arrayDepth == 1) { int len = val_array_size (inValue); switch (inType.element) { ARRAY_COPY (Boolean, jboolean) //ARRAY_COPY (Byte, jbyte) ARRAY_COPY (Char, jchar) ARRAY_COPY (Short, jshort) ARRAY_COPY (Int, jint) ARRAY_COPY (Long, jlong) ARRAY_COPY (Float, jfloat) ARRAY_COPY (Double, jdouble) case jniByte: { jbyteArray arr = inEnv->NewByteArray (len); if (len > 0) { jboolean copy; jbyte *data = inEnv->GetByteArrayElements (arr, ©); for (int i = 0; i < len; i++) { data[i] = (int)val_number (val_array_i (inValue, i)); } inEnv->ReleaseByteArrayElements (arr, data, 0); } out.l = arr; return true; } case jniVoid: out.l = 0; return true; default: {} } return false; } else { switch (inType.element) { case jniObjectString: { out.l = inEnv->NewStringUTF (val_string (inValue)); return true; } case jniObjectHaxe: out.l = CreateJavaHaxeObjectRef(inEnv,inValue); return true; case jniObject: { jobject obj = 0; if (!AbstractToJObject (inValue, obj)) { if (val_is_string (inValue)) { out.l = inEnv->NewStringUTF (val_string (inValue)); return true; } ELOG ("HaxeToJNI : jniObject not an object %p", inValue); return false; } out.l = obj; return true; } case jniBoolean: out.z = (bool)val_number (inValue); return true; case jniByte: out.b = (int)val_number (inValue); return true; case jniChar: out.c = (int)val_number (inValue); return true; case jniShort: out.s = (int)val_number (inValue); return true; case jniInt: out.i = (int)val_number (inValue); return true; case jniLong: out.j = (long)val_number (inValue); return true; case jniFloat: out.f = (float)val_number (inValue); return true; case jniDouble: out.d = val_number (inValue); return true; case jniVoid: out.l = 0; return true; default: {} } } return false; } struct JNIField : public lime::Object { JNIField (HxString inClass, HxString inField, HxString inSignature, bool inStatic) { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); JNIInit (env); mClass = 0; mField = 0; mFieldType = JNIType (jniVoid, 0); const char *field = inField.__s; mClass = FindClass (inClass.__s); const char *signature = inSignature.__s; if (mClass) { if (inStatic) { mField = env->GetStaticFieldID (mClass, field, signature); } else { mField = env->GetFieldID (mClass, field, signature); } } if (Ok ()) { bool ok = ParseSignature (signature); if (!ok) { ELOG ("Bad JNI signature: %s", signature); mField = 0; } } } ~JNIField () { } bool ParseSignature (const char *inSig) { JNIParseType (inSig, mFieldType); return (!mFieldType.isUnknown ()); } bool Ok () const { return mField != 0; } value GetStatic () { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); value result = 0; if (mFieldType.isObject ()) { result = JObjectToHaxe (env, mFieldType, env->GetStaticObjectField (mClass, mField)); } else { switch (mFieldType.element) { case jniBoolean: result = alloc_bool (env->GetStaticBooleanField (mClass, mField)); break; case jniByte: result = alloc_int (env->GetStaticByteField (mClass, mField)); break; case jniChar: result = alloc_int (env->GetStaticCharField (mClass, mField)); break; case jniShort: result = alloc_int (env->GetStaticShortField (mClass, mField)); break; case jniInt: result = alloc_int (env->GetStaticIntField (mClass, mField)); break; case jniLong: result = alloc_int (env->GetStaticLongField (mClass, mField)); break; case jniFloat: result = alloc_float (env->GetStaticFloatField (mClass, mField)); break; case jniDouble: result = alloc_float (env->GetStaticDoubleField (mClass, mField)); break; default: {} } } CheckException (env); return result; } void SetStatic (value inValue) { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); jvalue setValue; if (!HaxeToJNI (env, inValue, mFieldType, setValue)) { ELOG ("SetStatic - bad value"); return; } if (mFieldType.isObject ()) { env->SetStaticObjectField (mClass, mField, setValue.l); } else { switch (mFieldType.element) { case jniBoolean: env->SetStaticBooleanField (mClass, mField, setValue.z); break; case jniByte: env->SetStaticByteField (mClass, mField, setValue.b); break; case jniChar: env->SetStaticCharField (mClass, mField, setValue.c); break; case jniShort: env->SetStaticShortField (mClass, mField, setValue.s); break; case jniInt: env->SetStaticIntField (mClass, mField, setValue.i); break; case jniLong: env->SetStaticLongField (mClass, mField, setValue.j); break; case jniFloat: env->SetStaticFloatField (mClass, mField, setValue.f); break; case jniDouble: env->SetStaticDoubleField (mClass, mField, setValue.d); break; default: {} } } CheckException (env); } value GetMember (jobject inObject) { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); value result = 0; if (mFieldType.isObject ()) { result = JObjectToHaxe (env, mFieldType, env->GetObjectField (inObject, mField)); } else { switch (mFieldType.element) { case jniBoolean: result = alloc_bool(env->GetBooleanField (inObject, mField)); break; case jniByte: result = alloc_int(env->GetByteField (inObject, mField)); break; case jniChar: result = alloc_int(env->GetCharField (inObject, mField)); break; case jniShort: result = alloc_int(env->GetShortField (inObject, mField)); break; case jniInt: result = alloc_int(env->GetIntField (inObject, mField)); break; case jniLong: result = alloc_int(env->GetLongField (inObject, mField)); break; case jniFloat: result = alloc_float(env->GetFloatField (inObject, mField)); break; case jniDouble: result = alloc_float(env->GetDoubleField (inObject, mField)); break; default: {} } } CheckException (env); return result; } void SetMember (jobject inObject, value inValue) { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); jvalue setValue; if (!HaxeToJNI (env, inValue, mFieldType, setValue)) { ELOG ("SetMember - bad value"); return; } if (mFieldType.isObject ()) { env->SetObjectField (inObject, mField, setValue.l); } else { switch (mFieldType.element) { case jniBoolean: env->SetBooleanField (inObject, mField, setValue.z); break; case jniByte: env->SetByteField (inObject, mField, setValue.b); break; case jniChar: env->SetCharField (inObject, mField, setValue.c); break; case jniShort: env->SetShortField (inObject, mField, setValue.s); break; case jniInt: env->SetIntField (inObject, mField, setValue.i); break; case jniLong: env->SetLongField (inObject, mField, setValue.j); break; case jniFloat: env->SetFloatField (inObject, mField, setValue.f); break; case jniDouble: env->SetDoubleField (inObject, mField, setValue.d); break; default: {} } } CheckException (env); } jclass mClass; jfieldID mField; JNIType mFieldType; }; value lime_jni_create_field (HxString inClass, HxString inField, HxString inSig, bool inStatic) { JNIField *field = new JNIField (inClass, inField, inSig, inStatic); if (field->Ok ()) { return ObjectToAbstract (field); } ELOG ("lime_jni_create_field - failed"); delete field; return alloc_null (); } DEFINE_PRIME4 (lime_jni_create_field); value lime_jni_get_static (value inField) { JNIField *field; if (!AbstractToObject (inField, field)) { return alloc_null (); } value result = field->GetStatic (); return result; } DEFINE_PRIME1 (lime_jni_get_static); void lime_jni_set_static (value inField, value inValue) { JNIField *field; if (!AbstractToObject (inField, field)) { return; } field->SetStatic (inValue); } DEFINE_PRIME2v (lime_jni_set_static); value lime_jni_get_member (value inField, value inObject) { JNIField *field; jobject object; if (!AbstractToObject (inField, field)) { ELOG ("lime_jni_get_member - not a field"); return alloc_null (); } if (!AbstractToJObject (inObject, object)) { ELOG ("lime_jni_get_member - invalid this"); return alloc_null (); } return field->GetMember (object); } DEFINE_PRIME2 (lime_jni_get_member); void lime_jni_set_member (value inField, value inObject, value inValue) { JNIField *field; jobject object; if (!AbstractToObject (inField, field)) { ELOG ("lime_jni_set_member - not a field"); return; } if (!AbstractToJObject (inObject, object)) { ELOG ("lime_jni_set_member - invalid this"); return; } field->SetMember (object, inValue); } DEFINE_PRIME3v (lime_jni_set_member); struct JNIMethod : public lime::Object { enum { MAX = 20 }; JNIMethod (HxString inClass, HxString inMethod, HxString inSignature, bool inStatic, bool inQuiet) { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); JNIInit (env); mClass = 0; mMethod = 0; mReturn = JNIType (jniVoid, 0); mArgCount = 0; const char *method = inMethod.__s; mIsConstructor = !strncmp (method, "", 6); mClass = FindClass (inClass.__s, inQuiet); if (mClass) { const char *signature = inSignature.__s; if (inStatic && !mIsConstructor) { mMethod = env->GetStaticMethodID (mClass, method, signature); } else { mMethod = env->GetMethodID (mClass, method, signature); } if (inQuiet) { jthrowable exc = env->ExceptionOccurred (); if (exc) { env->ExceptionClear (); } } else { CheckException(env); } if (Ok ()) { bool ok = ParseSignature (signature); if (!ok) { ELOG ("Bad signature %s.", signature); mMethod = 0; } } } } ~JNIMethod () { } bool HaxeToJNIArgs (JNIEnv *inEnv, value inArray, jvalue *outValues) { if (val_array_size (inArray) != mArgCount) { ELOG ("Invalid array count: %d != %d", val_array_size (inArray), mArgCount); return false; } for (int i = 0; i < mArgCount; i++) { value arg_i = val_array_i (inArray, i); if (!HaxeToJNI (inEnv, arg_i, mArgType[i], outValues[i])) { ELOG ("HaxeToJNI could not convert param %d (%p) to %dx%d", i, arg_i, mArgType[i].element, mArgType[i].arrayDepth); return false; } } return true; } void CleanStringArgs () { } bool ParseSignature (const char *inSig) { if (*inSig++ != '(') { return false; } mArgCount = 0; while (*inSig != ')') { if (mArgCount == MAX) { return false; } JNIType type; inSig = JNIParseType (inSig, type); if (type.isUnknown ()) { return false; } mArgType[mArgCount++] = type; } inSig++; JNIParseType (inSig, mReturn); return !mReturn.isUnknown (); } bool Ok () const { return mMethod != 0; } value CallStatic (value inArgs) { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); env->PushLocalFrame(128); jvalue jargs[MAX]; if (!HaxeToJNIArgs (env, inArgs, jargs)) { CleanStringArgs (); ELOG ("CallStatic - bad argument list"); return alloc_null (); } value result = 0; if (mIsConstructor) { jobject obj = env->NewObjectA (mClass, mMethod, jargs); result = JObjectToHaxe (env, JNIType (jniObject, 0), obj); } else if (mReturn.isObject ()) { result = JObjectToHaxe (env, mReturn, env->CallStaticObjectMethodA (mClass, mMethod, jargs)); } else { switch (mReturn.element) { case jniVoid: result = alloc_null (); env->CallStaticVoidMethodA (mClass, mMethod, jargs); break; case jniBoolean: result = alloc_bool (env->CallStaticBooleanMethodA (mClass, mMethod, jargs)); break; case jniByte: result = alloc_int (env->CallStaticByteMethodA (mClass, mMethod, jargs)); break; case jniChar: result = alloc_int (env->CallStaticCharMethodA (mClass, mMethod, jargs)); break; case jniShort: result = alloc_int (env->CallStaticShortMethodA (mClass, mMethod, jargs)); break; case jniInt: result = alloc_int (env->CallStaticIntMethodA (mClass, mMethod, jargs)); break; case jniLong: result = alloc_int (env->CallStaticLongMethodA (mClass, mMethod, jargs)); break; case jniFloat: result = alloc_float (env->CallStaticFloatMethodA (mClass, mMethod, jargs)); break; case jniDouble: result = alloc_float (env->CallStaticDoubleMethodA (mClass, mMethod, jargs)); break; default: {} } } CleanStringArgs (); CheckException (env); env->PopLocalFrame(NULL); return result; } value CallMember (jobject inObject, value inArgs) { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); jvalue jargs[MAX]; if (!HaxeToJNIArgs (env, inArgs, jargs)) { CleanStringArgs (); ELOG ("CallMember - bad argument list"); return alloc_null (); } value result = 0; if (mReturn.isObject ()) { result = JObjectToHaxe (env, mReturn, env->CallObjectMethodA (inObject, mMethod, jargs)); } else { switch (mReturn.element) { case jniVoid: result = alloc_null (); env->CallVoidMethodA (inObject, mMethod, jargs); break; case jniBoolean: result = alloc_bool (env->CallBooleanMethodA (inObject, mMethod, jargs)); break; case jniByte: result = alloc_int (env->CallByteMethodA (inObject, mMethod, jargs)); break; case jniChar: result = alloc_int (env->CallCharMethodA (inObject, mMethod, jargs)); break; case jniShort: result = alloc_int (env->CallShortMethodA (inObject, mMethod, jargs)); break; case jniInt: result = alloc_int (env->CallIntMethodA (inObject, mMethod, jargs)); break; case jniLong: result = alloc_int (env->CallLongMethodA (inObject, mMethod, jargs)); break; case jniFloat: result = alloc_float (env->CallFloatMethodA (inObject, mMethod, jargs)); break; case jniDouble: result = alloc_float (env->CallDoubleMethodA (inObject, mMethod, jargs)); break; default: {} } } CleanStringArgs (); return result; } jclass mClass; jmethodID mMethod; JNIType mReturn; JNIType mArgType[MAX]; int mArgCount; bool mIsConstructor; }; value lime_jni_create_method (HxString inClass, HxString inMethod, HxString inSig, bool inStatic, bool quiet) { JNIMethod *method = new JNIMethod (inClass, inMethod, inSig, inStatic, quiet); if (method->Ok ()) { return ObjectToAbstract (method); } if (!quiet) { ELOG ("lime_jni_create_method - failed"); } delete method; return alloc_null (); } DEFINE_PRIME5 (lime_jni_create_method); value lime_jni_call_static (value inMethod, value inArgs) { JNIMethod *method; if (!AbstractToObject (inMethod, method)) { return alloc_null (); } value result = method->CallStatic (inArgs); return result; } DEFINE_PRIME2 (lime_jni_call_static); value lime_jni_call_member (value inMethod, value inObject, value inArgs) { JNIMethod *method; jobject object; if (!AbstractToObject (inMethod, method)) { ELOG ("lime_jni_call_member - not a method"); return alloc_null (); } if (!AbstractToJObject (inObject, object)) { ELOG ("lime_jni_call_member - invalid this"); return alloc_null (); } return method->CallMember (object, inArgs); } DEFINE_PRIME3 (lime_jni_call_member); double lime_jni_get_env () { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); return (uintptr_t)env; } DEFINE_PRIME0 (lime_jni_get_env); value lime_jni_get_jobject (value inValue) { jobject obj = 0; if (AbstractToJObject (inValue, obj)) { return alloc_float ((uintptr_t)obj); } return alloc_null (); } DEFINE_PRIME1 (lime_jni_get_jobject); void lime_jni_post_ui_callback (value inCallback) { JNIEnv *env = (JNIEnv*)JNI::GetEnv (); JNIInit (env); AutoGCRoot *root = new AutoGCRoot (inCallback); ELOG ("Lime set onCallback %p",root); env->CallStaticVoidMethod (GameActivity, postUICallback, (jlong)root); jthrowable exc = env->ExceptionOccurred (); if (exc) { env->ExceptionDescribe (); env->ExceptionClear (); delete root; val_throw (alloc_string ("JNI Exception")); } } DEFINE_PRIME1v (lime_jni_post_ui_callback); } extern "C" { JAVA_EXPORT void JNICALL Java_org_haxe_lime_Lime_onCallback (JNIEnv * env, jobject obj, jlong handle) { lime::AutoHaxe haxe ("onCallback"); ELOG ("Lime onCallback %p", (void *)handle); AutoGCRoot *root = (AutoGCRoot *)handle; val_call0 (root->get ()); delete root; } JAVA_EXPORT jobject JNICALL Java_org_haxe_lime_Lime_releaseReference (JNIEnv * env, jobject obj, jlong handle) { lime::AutoHaxe haxe ("releaseReference"); value val = (value)handle; lime::RemoveJavaHaxeObjectRef (val); return 0; } value CallHaxe (JNIEnv * env, jobject obj, jlong handle, jstring function, jobject inArgs) { //ELOG ("CallHaxe %p", gCallback); if (lime::gCallback) { value objValue = (value)handle; value funcName = lime::JStringToHaxe (env, function); value args = lime::JObjectToHaxe (env, lime::JNIType (lime::jniUnknown, 1), inArgs); //ELOG ("Using %d args", val_array_size (args)); return val_call3 (lime::gCallback->get (), objValue, funcName, args); } else { ELOG ("Lime CallHaxe - init not called."); return alloc_null (); } } JAVA_EXPORT jobject JNICALL Java_org_haxe_lime_Lime_callObjectFunction (JNIEnv * env, jobject obj, jlong handle, jstring function, jobject args) { lime::AutoHaxe haxe ("callObject"); value result = CallHaxe (env, obj, handle, function, args); jobject val = 0; // TODO - other cases if (val_is_string (result)) { const char *string = val_string (result); val = env->NewStringUTF (string); } else if (!val_is_null (result)) { ELOG ("only string return is supported"); } //jobject val = JAnonToHaxe(result); return val; } JAVA_EXPORT jdouble JNICALL Java_org_haxe_lime_Lime_callNumericFunction (JNIEnv * env, jobject obj, jlong handle, jstring function, jobject args) { lime::AutoHaxe haxe ("callNumeric"); value result = CallHaxe (env, obj, handle, function, args); double val = val_number (result); return val; } } ================================================ FILE: project/src/system/Locale.cpp ================================================ #include #if defined(HX_WINDOWS) #include #elif defined(HX_LINUX) #include #include #include #endif namespace lime { std::string* Locale::GetSystemLocale () { #if defined(HX_WINDOWS) char language[5] = {0}; char country[5] = {0}; GetLocaleInfoA (LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, language, sizeof (language) / sizeof (char)); GetLocaleInfoA (LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, country, sizeof (country) / sizeof (char)); std::string* locale = new std::string (std::string (language) + "_" + std::string (country)); return locale; #elif defined(HX_LINUX) const char* locale = getenv ("LANG"); if (!locale) { locale = setlocale (LC_ALL, ""); } if (locale) { std::string* result = new std::string (locale); return result; } return 0; #else return 0; #endif } } ================================================ FILE: project/src/system/Locale.mm ================================================ #ifdef HX_MACOS #import #else #import #endif #include namespace lime { std::string* Locale::GetSystemLocale () { #ifndef OBJC_ARC NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; #endif NSString* localeLanguage = [[NSLocale preferredLanguages] firstObject]; if (localeLanguage == nil) localeLanguage = @"en"; NSString* localeRegion = nil; NSLocale* currentLocale = [NSLocale autoupdatingCurrentLocale]; if (currentLocale == nil || ![currentLocale respondsToSelector:@selector(countryCode)]) { localeRegion = @""; } else { localeRegion = [currentLocale countryCode]; } NSString* locale = localeLanguage; if (localeRegion != nil) { locale = [[localeLanguage stringByAppendingString:@"_"] stringByAppendingString:localeRegion]; } std::string* result = 0; if (locale) { const char* ptr = [locale UTF8String]; result = new std::string (ptr); } #ifndef OBJC_ARC [pool drain]; #endif return result; } } ================================================ FILE: project/src/system/OrientationEvent.cpp ================================================ #include #include namespace lime { ValuePointer* OrientationEvent::callback = 0; ValuePointer* OrientationEvent::eventObject = 0; static int id_type; static int id_orientation; static int id_display; static bool init = false; OrientationEvent::OrientationEvent () { orientation = 0; // SDL_ORIENTATION_UNKNOWN display = 0; type = DISPLAY_ORIENTATION_CHANGE; } void OrientationEvent::Dispatch (OrientationEvent* event) { if (OrientationEvent::callback) { if (OrientationEvent::eventObject->IsCFFIValue ()) { if (!init) { id_orientation = val_id ("orientation"); id_display = val_id ("display"); id_type = val_id ("type"); init = true; } value object = (value)OrientationEvent::eventObject->Get (); alloc_field (object, id_orientation, alloc_int (event->orientation)); alloc_field (object, id_display, alloc_int (event->display)); alloc_field (object, id_type, alloc_int (event->type)); } else { OrientationEvent* eventObject = (OrientationEvent*)OrientationEvent::eventObject->Get (); eventObject->orientation = event->orientation; eventObject->display = event->display; eventObject->type = event->type; } OrientationEvent::callback->Call (); } } } ================================================ FILE: project/src/system/SensorEvent.cpp ================================================ #include #include namespace lime { ValuePointer* SensorEvent::callback = 0; ValuePointer* SensorEvent::eventObject = 0; static int id_id; static int id_type; static int id_x; static int id_y; static int id_z; static bool init = false; SensorEvent::SensorEvent () { type = SENSOR_ACCELEROMETER; id = 0; x = 0; y = 0; z = 0; } void SensorEvent::Dispatch (SensorEvent* event) { if (SensorEvent::callback) { if (SensorEvent::eventObject->IsCFFIValue ()) { if (!init) { id_id = val_id ("id"); id_type = val_id ("type"); id_x = val_id ("x"); id_y = val_id ("y"); id_z = val_id ("z"); init = true; } value object = (value)SensorEvent::eventObject->Get (); alloc_field (object, id_id, alloc_int (event->id)); alloc_field (object, id_type, alloc_int (event->type)); alloc_field (object, id_x, alloc_float (event->x)); alloc_field (object, id_y, alloc_float (event->y)); alloc_field (object, id_z, alloc_float (event->z)); } else { SensorEvent* eventObject = (SensorEvent*)SensorEvent::eventObject->Get (); eventObject->id = event->id; eventObject->type = event->type; eventObject->x = event->x; eventObject->y = event->y; eventObject->z = event->z; } SensorEvent::callback->Call (); } } } ================================================ FILE: project/src/system/System.cpp ================================================ #ifdef HX_WINDOWS #define _WIN32_DCOM #include #include #include #pragma comment(lib, "wbemuuid.lib") #include #endif #include namespace lime { #ifdef LIME_HASHLINK bool System::_isHL = (hl_nan () != 0); #else bool System::_isHL = false; #endif void System::GCEnterBlocking () { if (!_isHL) { gc_enter_blocking (); } } void System::GCExitBlocking () { if (!_isHL) { gc_exit_blocking (); } } void System::GCTryEnterBlocking () { if (!_isHL) { // TODO: Only supported in HXCPP 4.3 // gc_try_blocking (); } } void System::GCTryExitBlocking () { if (!_isHL) { // TODO: Only supported in HXCPP 4.3 //gc_try_unblocking (); } } #if defined (HX_WINDOWS) && !defined (HX_WINRT) std::wstring* GetWMIValue (BSTR query, BSTR field) { HRESULT hres = 0; IWbemLocator *pLoc = NULL; IWbemServices *pSvc = NULL; IEnumWbemClassObject* pEnumerator = NULL; IWbemClassObject *pclsObj = NULL; ULONG uReturn = 0; std::wstring* result = NULL; // hres = CoInitializeEx (0, COINIT_MULTITHREADED); // if (FAILED (hres)) { // return NULL; // } // hres = CoInitializeSecurity (NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); // if (FAILED (hres)) { // CoUninitialize (); // NULL; // } hres = CoCreateInstance (CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc); if (FAILED (hres)) { //CoUninitialize (); return NULL; } hres = pLoc->ConnectServer (_bstr_t (L"ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pSvc); if (FAILED (hres)) { pLoc->Release (); // CoUninitialize (); return NULL; } hres = CoSetProxyBlanket (pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE); if (FAILED (hres)) { pSvc->Release (); pLoc->Release (); // CoUninitialize (); return NULL; } hres = pSvc->ExecQuery (bstr_t (L"WQL"), query, WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); if (FAILED (hres)) { pSvc->Release (); pLoc->Release (); // CoUninitialize (); return NULL; } while (pEnumerator) { HRESULT hr = pEnumerator->Next (WBEM_INFINITE, 1, &pclsObj, &uReturn); if (uReturn == 0) break; VARIANT vtProp; hr = pclsObj->Get (field, 0, &vtProp, 0, 0); VariantClear (&vtProp); result = new std::wstring (vtProp.bstrVal, SysStringLen (vtProp.bstrVal)); pclsObj->Release (); } pSvc->Release (); pLoc->Release (); pEnumerator->Release (); // CoUninitialize (); return result; } #endif std::wstring* System::GetDeviceModel () { #if defined (HX_WINDOWS) && !defined (HX_WINRT) return GetWMIValue (bstr_t (L"SELECT * FROM Win32_ComputerSystemProduct"), bstr_t (L"Version")); #endif return NULL; } std::wstring* System::GetDeviceVendor () { #if defined (HX_WINDOWS) && !defined (HX_WINRT) return GetWMIValue (bstr_t (L"SELECT * FROM Win32_ComputerSystemProduct"), bstr_t (L"Vendor")); #endif return NULL; } std::wstring* System::GetPlatformLabel () { #if defined (HX_WINDOWS) && !defined (HX_WINRT) return GetWMIValue (bstr_t (L"SELECT * FROM Win32_OperatingSystem"), bstr_t (L"Caption")); #endif return NULL; } std::wstring* System::GetPlatformName () { return NULL; } std::wstring* System::GetPlatformVersion () { #if defined (HX_WINDOWS) && !defined (HX_WINRT) return GetWMIValue (bstr_t (L"SELECT * FROM Win32_OperatingSystem"), bstr_t (L"Version")); #endif return NULL; } #if defined (HX_WINDOWS) && !defined (HX_WINRT) int System::GetWindowsConsoleMode (int handleType) { HANDLE handle = GetStdHandle ((DWORD)handleType); DWORD mode = 0; if (handle) { bool result = GetConsoleMode (handle, &mode); } return mode; } #endif #if defined (HX_WINDOWS) && !defined (HX_WINRT) bool System::SetWindowsConsoleMode (int handleType, int mode) { HANDLE handle = GetStdHandle ((DWORD)handleType); if (handle) { return SetConsoleMode (handle, (DWORD)mode); } return false; } #endif int System::GetDeviceOrientation () { return 0; // SDL_ORIENTATION_UNKNOWN } void System::EnableDeviceOrientationChange (bool enable) { } } #ifdef HX_LINUX // Improve compatibility with old glibc #define __fdelt_chk __fdelt_chk_local #include #undef __fdelt_chk long int __fdelt_chk (long int d) { if (d >= FD_SETSIZE) { //printf("Select - bad fd.\n"); return 0; } return d / __NFDBITS; } #endif #if defined(ANDROID) && !defined(HXCPP_CLANG) #include #include #include /* * This code was written by Rich Felker in 2010; no copyright is claimed. * This code is in the public domain. Attribution is appreciated but * unnecessary. */ #define OOB(c,b) (((((b)>>3)-0x10)|(((b)>>3)+((int32_t)(c)>>26))) & ~7) #define R(a,b) ((uint32_t)((a==0x80 ? 0x40-b : -a) << 23)) #define C(x) ( x<2 ? -1 : ( R(0x80,0xc0) | x ) ) #define D(x) C((x+16)) #define E(x) ( ( x==0 ? R(0xa0,0xc0) : \ x==0xd ? R(0x80,0xa0) : \ R(0x80,0xc0) ) \ | ( R(0x80,0xc0) >> 6 ) \ | x ) #define F(x) ( ( x>=5 ? 0 : \ x==0 ? R(0x90,0xc0) : \ x==4 ? R(0x80,0xa0) : \ R(0x80,0xc0) ) \ | ( R(0x80,0xc0) >> 6 ) \ | ( R(0x80,0xc0) >> 12 ) \ | x ) #define SA 0xc2u #define SB 0xf4u const uint32_t bittab[] = { C(0x2),C(0x3),C(0x4),C(0x5),C(0x6),C(0x7), C(0x8),C(0x9),C(0xa),C(0xb),C(0xc),C(0xd),C(0xe),C(0xf), D(0x0),D(0x1),D(0x2),D(0x3),D(0x4),D(0x5),D(0x6),D(0x7), D(0x8),D(0x9),D(0xa),D(0xb),D(0xc),D(0xd),D(0xe),D(0xf), E(0x0),E(0x1),E(0x2),E(0x3),E(0x4),E(0x5),E(0x6),E(0x7), E(0x8),E(0x9),E(0xa),E(0xb),E(0xc),E(0xd),E(0xe),E(0xf), F(0x0),F(0x1),F(0x2),F(0x3),F(0x4) }; // Added minor C++ compile fixes size_t _mbsrtowcs(wchar_t * ws, const char **src, size_t wn, mbstate_t *st) { const unsigned char *s = (const unsigned char *)*src; size_t wn0 = wn; unsigned c = 0; if (st && (c = *(unsigned *)st)) { if (ws) { *(unsigned *)st = 0; goto resume; } else { goto resume0; } } if (!ws) for (;;) { if (*s-1u < 0x7f && (uintptr_t)s%4 == 0) { while (!(( *(uint32_t*)s | *(uint32_t*)s-0x01010101) & 0x80808080)) { s += 4; wn -= 4; } } if (*s-1u < 0x7f) { s++; wn--; continue; } if (*s-SA > SB-SA) break; c = bittab[*s++-SA]; resume0: if (OOB(c,*s)) { s--; break; } s++; if (c&(1U<<25)) { if (*s-0x80u >= 0x40) { s-=2; break; } s++; if (c&(1U<<19)) { if (*s-0x80u >= 0x40) { s-=3; break; } s++; } } wn--; c = 0; } else for (;;) { if (!wn) { *src = (const char *)s; return wn0; } if (*s-1u < 0x7f && (uintptr_t)s%4 == 0) { while (wn>=5 && !(( *(uint32_t*)s | *(uint32_t*)s-0x01010101) & 0x80808080)) { *ws++ = *s++; *ws++ = *s++; *ws++ = *s++; *ws++ = *s++; wn -= 4; } } if (*s-1u < 0x7f) { *ws++ = *s++; wn--; continue; } if (*s-SA > SB-SA) break; c = bittab[*s++-SA]; resume: if (OOB(c,*s)) { s--; break; } c = (c<<6) | *s++-0x80; if (c&(1U<<31)) { if (*s-0x80u >= 0x40) { s-=2; break; } c = (c<<6) | *s++-0x80; if (c&(1U<<31)) { if (*s-0x80u >= 0x40) { s-=3; break; } c = (c<<6) | *s++-0x80; } } *ws++ = c; wn--; c = 0; } if (!c && !*s) { if (ws) { *ws = 0; *src = 0; } return wn0-wn; } errno = EILSEQ; if (ws) *src = (const char *)s; return -1; } #endif ================================================ FILE: project/src/system/System.mm ================================================ #ifdef IPHONE #import #endif #import #include #include #ifdef IPHONE @interface OrientationObserver: NSObject - (id) init; - (void) dealloc; - (void) dispatchEventForDevice:(UIDevice *) device; - (void) orientationChanged:(NSNotification *) notification; @end @implementation OrientationObserver { } - (void) dealloc { UIDevice * device = [UIDevice currentDevice]; // [device endGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] removeObserver:self]; [super dealloc]; } - (id) init { self = [super init]; if (!self) { return nil; } UIDevice * device = [UIDevice currentDevice]; // [device beginGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:device]; return self; } - (void) dispatchEventForCurrentDevice { UIDevice * device = [UIDevice currentDevice]; [self dispatchEventForDevice:device]; } - (void) dispatchEventForDevice:(UIDevice *) device { int orientation = 0; // SDL_ORIENTATION_UNKNOWN switch (device.orientation) { case UIDeviceOrientationLandscapeLeft: orientation = 1; // SDL_ORIENTATION_LANDSCAPE break; case UIDeviceOrientationLandscapeRight: orientation = 2; // SDL_ORIENTATION_LANDSCAPE_FLIPPED break; case UIDeviceOrientationPortrait: orientation = 3; // SDL_ORIENTATION_PORTRAIT break; case UIDeviceOrientationPortraitUpsideDown: orientation = 4; // SDL_ORIENTATION_PORTRAIT_FLIPPED break; default: break; }; lime::OrientationEvent event; event.orientation = orientation; event.display = -1; event.type = lime::DEVICE_ORIENTATION_CHANGE; lime::OrientationEvent::Dispatch(&event); } - (void) orientationChanged:(NSNotification *) notification { UIDevice * device = notification.object; [self dispatchEventForDevice:device]; } @end #endif namespace lime { OrientationObserver* orientationObserver; void System::GCEnterBlocking () { // if (!_isHL) { gc_enter_blocking (); // } } void System::GCExitBlocking () { // if (!_isHL) { gc_exit_blocking (); // } } std::wstring* System::GetIOSDirectory (SystemDirectory type) { #ifndef OBJC_ARC NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; #endif NSSearchPathDirectory searchType = NSDocumentDirectory; switch (type) { case DESKTOP: searchType = NSDesktopDirectory; break; case USER: //searchType = NSUserDirectory; searchType = NSDocumentDirectory; break; default: break; } std::wstring* result = 0; NSArray* paths = NSSearchPathForDirectoriesInDomains (searchType, NSUserDomainMask, YES); if (paths && [paths count] > 0) { NSString* basePath = paths.firstObject; std::string path = std::string ([basePath UTF8String]); result = new std::wstring (path.begin (), path.end ()); } #ifndef OBJC_ARC [pool drain]; #endif return result; } bool System::GetIOSTablet () { return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? 1 : 0; } int System::GetDeviceOrientation () { UIDevice * device = [UIDevice currentDevice]; int orientation = 0; // SDL_ORIENTATION_UNKNOWN switch (device.orientation) { case UIDeviceOrientationLandscapeLeft: orientation = 1; // SDL_ORIENTATION_LANDSCAPE break; case UIDeviceOrientationLandscapeRight: orientation = 2; // SDL_ORIENTATION_LANDSCAPE_FLIPPED break; case UIDeviceOrientationPortrait: orientation = 3; // SDL_ORIENTATION_PORTRAIT break; case UIDeviceOrientationPortraitUpsideDown: orientation = 4; // SDL_ORIENTATION_PORTRAIT_FLIPPED break; default: break; }; return orientation; } std::wstring* System::GetDeviceModel () { #ifdef IPHONE struct utsname systemInfo; uname (&systemInfo); std::string model = std::string (systemInfo.machine); return new std::wstring (model.begin (), model.end ()); #else return NULL; #endif } std::wstring* System::GetDeviceVendor () { return NULL; } std::wstring* System::GetPlatformLabel () { return NULL; } std::wstring* System::GetPlatformName () { return NULL; } std::wstring* System::GetPlatformVersion () { #ifdef IPHONE NSString *versionString = [[UIDevice currentDevice] systemVersion]; std::string result = std::string ([versionString UTF8String]); return new std::wstring (result.begin (), result.end ()); #else return NULL; #endif } void System::EnableDeviceOrientationChange (bool enable) { #ifdef IPHONE if (enable && !orientationObserver) { orientationObserver = [[OrientationObserver alloc] init]; // SDL forces dispatch of a display orientation event immediately. // for consistency, we should dispatch one for device orientation. [orientationObserver dispatchEventForCurrentDevice]; } else if (!enable && orientationObserver) { orientationObserver = nil; } #endif } void System::OpenFile (const char* path) { OpenURL (path, NULL); } void System::OpenURL (const char* url, const char* target) { #ifndef OBJC_ARC NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; #endif UIApplication *application = [UIApplication sharedApplication]; NSString *str = [[NSString alloc] initWithUTF8String: url]; NSURL *_url = [NSURL URLWithString: str]; if ([[UIApplication sharedApplication] canOpenURL: _url]) { if ([application respondsToSelector: @selector (openURL:options:completionHandler:)]) { [application openURL: _url options: @{} completionHandler:^(BOOL success) { //NSLog(@"Open %@: %d", _url, success); } ]; } else { BOOL success = [application openURL: _url]; //NSLog(@"Open %@: %d",scheme,success); } } #ifndef OBJC_ARC [str release]; [pool drain]; #endif } } ================================================ FILE: project/src/system/ValuePointer.cpp ================================================ #include #include namespace lime { ValuePointer::ValuePointer (value handle) { cffiRoot = 0; cffiValue = alloc_root (); if (cffiValue) { *cffiValue = handle; } else { cffiRoot = create_root (handle); } hlValue = 0; } ValuePointer::ValuePointer (vobj* handle) { hlValue = handle; hl_add_root (&hlValue); cffiRoot = 0; cffiValue = 0; } ValuePointer::ValuePointer (vdynamic* handle) { hlValue = (vobj*)handle; hl_add_root (&hlValue); cffiRoot = 0; cffiValue = 0; } ValuePointer::ValuePointer (vclosure* callback) { hlValue = (vobj*)callback; hl_add_root (&hlValue); cffiRoot = 0; cffiValue = 0; } ValuePointer::~ValuePointer () { if (cffiValue) { free_root (cffiValue); } else if (cffiRoot) { destroy_root (cffiRoot); } else if (hlValue) { hl_remove_root (&hlValue); } } void* ValuePointer::Call () { if (!hlValue) { return val_call0 ((value)Get ()); } else { return hl_dyn_call ((vclosure*)hlValue, 0, 0); } } void* ValuePointer::Call (void* arg0) { if (!hlValue) { return val_call1 ((value)Get (), (value)arg0); } else { vdynamic* arg = (vdynamic*) arg0; return hl_dyn_call ((vclosure*)hlValue, &arg, 1); } } void* ValuePointer::Call (void* arg0, void* arg1) { if (!hlValue) { return val_call2 ((value)Get (), (value)arg0, (value)arg1); } else { vdynamic* args[] = { (vdynamic*)arg0, (vdynamic*)arg1, }; return hl_dyn_call ((vclosure*)hlValue, (vdynamic**)&args, 2); } } void* ValuePointer::Call (void* arg0, void* arg1, void* arg2) { if (!hlValue) { return val_call3 ((value)Get (), (value)arg0, (value)arg1, (value)arg2); } else { vdynamic* args[] = { (vdynamic*)arg0, (vdynamic*)arg1, (vdynamic*)arg2, }; return hl_dyn_call ((vclosure*)hlValue, (vdynamic**)&args, 3); } } void* ValuePointer::Call (void* arg0, void* arg1, void* arg2, void* arg3) { if (!hlValue) { value vals[] = { (value)arg0, (value)arg1, (value)arg2, (value)arg3, }; return val_callN ((value)Get (), vals, 4); } else { vdynamic* args[] = { (vdynamic*)arg0, (vdynamic*)arg1, (vdynamic*)arg2, (vdynamic*)arg3, }; return hl_dyn_call ((vclosure*)hlValue, (vdynamic**)&args, 4); } } void* ValuePointer::Call (void* arg0, void* arg1, void* arg2, void* arg3, void* arg4) { if (!hlValue) { value vals[] = { (value)arg0, (value)arg1, (value)arg2, (value)arg3, (value)arg4, }; return val_callN ((value)Get (), vals, 5); } else { vdynamic* args[] = { (vdynamic*)arg0, (vdynamic*)arg1, (vdynamic*)arg2, (vdynamic*)arg3, (vdynamic*)arg4, }; return hl_dyn_call ((vclosure*)hlValue, (vdynamic**)&args, 5); } } void* ValuePointer::Get () const { if (cffiValue) { return *cffiValue; } else if (cffiRoot) { return query_root (cffiRoot); } else if (hlValue) { return hlValue; } return 0; } bool ValuePointer::IsCFFIValue () { return hlValue == 0; } bool ValuePointer::IsHLValue () { return hlValue != 0; } void ValuePointer::Set (value handle) { if (cffiValue) { *cffiValue = handle; } else { if (cffiRoot) destroy_root (cffiRoot); cffiRoot = create_root (handle); } } void ValuePointer::Set (vobj* handle) { hlValue = handle; } } ================================================ FILE: project/src/text/Font.cpp ================================================ #include #include #include #include #include #include #ifdef LIME_FREETYPE #include #include FT_FREETYPE_H #include FT_BITMAP_H #include FT_SFNT_NAMES_H #include FT_TRUETYPE_IDS_H #include FT_TRUETYPE_TABLES_H #include FT_GLYPH_H #include FT_OUTLINE_H #endif #ifdef GetGlyphIndices #undef GetGlyphIndices #endif // from http://stackoverflow.com/questions/2948308/how-do-i-read-utf-8-characters-via-a-pointer #define IS_IN_RANGE(c, f, l) (((c) >= (f)) && ((c) <= (l))) unsigned long readNextChar (const char*& p) { // TODO: since UTF-8 is a variable-length // encoding, you should pass in the input // buffer's actual byte length so that you // can determine if a malformed UTF-8 // sequence would exceed the end of the buffer... const unsigned char* ptr = (const unsigned char*) p; unsigned char c1, c2; unsigned long uc = 0; int seqlen; c1 = ptr[0]; if ((c1 & 0x80) == 0) { uc = (unsigned long) (c1 & 0x7F); seqlen = 1; } else if ((c1 & 0xE0) == 0xC0) { uc = (unsigned long) (c1 & 0x1F); seqlen = 2; } else if ((c1 & 0xF0) == 0xE0) { uc = (unsigned long) (c1 & 0x0F); seqlen = 3; } else if ((c1 & 0xF8) == 0xF0) { uc = (unsigned long) (c1 & 0x07); seqlen = 4; } else { // malformed data, do something !!! return (unsigned long) -1; } for (int i = 1; i < seqlen; ++i) { c1 = ptr[i]; if ((c1 & 0xC0) != 0x80) { // malformed data, do something !!! return (unsigned long) -1; } } switch (seqlen) { case 2: c1 = ptr[0]; if (!IS_IN_RANGE(c1, 0xC2, 0xDF)) { // malformed data, do something !!! return (unsigned long) -1; } break; case 3: c1 = ptr[0]; c2 = ptr[1]; if (((c1 == 0xE0) && !IS_IN_RANGE(c2, 0xA0, 0xBF)) || ((c1 == 0xED) && !IS_IN_RANGE(c2, 0x80, 0x9F)) || (!IS_IN_RANGE(c1, 0xE1, 0xEC) && !IS_IN_RANGE(c1, 0xEE, 0xEF))) { // malformed data, do something !!! return (unsigned long) -1; } break; case 4: c1 = ptr[0]; c2 = ptr[1]; if (((c1 == 0xF0) && !IS_IN_RANGE(c2, 0x90, 0xBF)) || ((c1 == 0xF4) && !IS_IN_RANGE(c2, 0x80, 0x8F)) || !IS_IN_RANGE(c1, 0xF1, 0xF3)) { // malformed data, do something !!! return (unsigned long) -1; } break; } for (int i = 1; i < seqlen; ++i) { uc = ((uc << 6) | (unsigned long)(ptr[i] & 0x3F)); } p += seqlen; return uc; } namespace { enum { PT_MOVE = 1, PT_LINE = 2, PT_CURVE = 3, PT_CUBIC = 4 }; struct point { int x, y; unsigned char type; point () { } point (int x, int y, unsigned char type) : x (x), y (y), type (type) { } }; struct glyph { FT_ULong char_code; FT_Vector advance; FT_Glyph_Metrics metrics; int index, x, y; std::vector pts; glyph () : x (0), y (0) { } }; struct kerning { int l_glyph, r_glyph; int x, y; kerning () { } kerning (int l, int r, int x, int y) : l_glyph (l), r_glyph (r), x (x), y (y) { } }; struct glyph_sort_predicate { bool operator () (const glyph* g1, const glyph* g2) const { return g1->char_code < g2->char_code; } }; typedef const FT_Vector *FVecPtr; int outline_move_to (FVecPtr to, void *user) { glyph *g = static_cast (user); g->pts.push_back (PT_MOVE); g->pts.push_back (to->x); g->pts.push_back (to->y); g->x = to->x; g->y = to->y; return 0; } int outline_line_to (FVecPtr to, void *user) { glyph *g = static_cast (user); g->pts.push_back (PT_LINE); g->pts.push_back (to->x - g->x); g->pts.push_back (to->y - g->y); g->x = to->x; g->y = to->y; return 0; } int outline_conic_to (FVecPtr ctl, FVecPtr to, void *user) { glyph *g = static_cast (user); g->pts.push_back (PT_CURVE); g->pts.push_back (ctl->x - g->x); g->pts.push_back (ctl->y - g->y); g->pts.push_back (to->x - ctl->x); g->pts.push_back (to->y - ctl->y); g->x = to->x; g->y = to->y; return 0; } int outline_cubic_to (FVecPtr control1, FVecPtr control2, FVecPtr to, void *user) { glyph *g = static_cast (user); g->pts.push_back (PT_CUBIC); g->pts.push_back (control1->x - g->x); g->pts.push_back (control1->y - g->y); g->pts.push_back (control2->x - control1->x); g->pts.push_back (control2->y - control1->y); g->pts.push_back (to->x - control2->x); g->pts.push_back (to->y - control2->y); g->x = to->x; g->y = to->y; return 0; } } namespace lime { static int id_buffer; static int id_charCode; static int id_codepoint; static int id_height; static int id_index; static int id_horizontalAdvance; static int id_horizontalBearingX; static int id_horizontalBearingY; static int id_image; static int id_offset; static int id_offsetX; static int id_offsetY; static int id_size; static int id_verticalAdvance; static int id_verticalBearingX; static int id_verticalBearingY; static int id_width; static int id_x; static int id_y; static bool init = false; static void initialize () { if (!init) { id_width = val_id ("width"); id_height = val_id ("height"); id_x = val_id ("x"); id_y = val_id ("y"); id_offset = val_id ("offset"); id_size = val_id ("size"); id_codepoint = val_id ("codepoint"); id_buffer = val_id ("buffer"); id_charCode = val_id ("charCode"); id_horizontalAdvance = val_id ("horizontalAdvance"); id_horizontalBearingX = val_id ("horizontalBearingX"); id_horizontalBearingY = val_id ("horizontalBearingY"); id_image = val_id ("image"); id_index = val_id ("index"); id_offsetX = val_id ("offsetX"); id_offsetY = val_id ("offsetY"); id_verticalAdvance = val_id ("verticalAdvance"); id_verticalBearingX = val_id ("verticalBearingX"); id_verticalBearingY = val_id ("verticalBearingY"); init = true; } } Font::Font (Resource *resource, int faceIndex) { this->library = 0; this->face = 0; this->faceMemory = 0; if (resource) { int error; FT_Library library; error = FT_Init_FreeType (&library); if (error) { printf ("Could not initialize FreeType\n"); } else { FT_Face face; FILE_HANDLE *file = NULL; unsigned char *faceMemory = NULL; if (resource->path) { file = lime::fopen (resource->path, "rb"); if (!file) { FT_Done_FreeType (library); return; } if (file->isFile ()) { error = FT_New_Face (library, resource->path, faceIndex, &face); } else { Bytes data; data.ReadFile (resource->path); faceMemory = (unsigned char*)malloc (data.length); memcpy (faceMemory, data.b, data.length); lime::fclose (file); file = 0; error = FT_New_Memory_Face (library, faceMemory, data.length, faceIndex, &face); } } else { faceMemory = (unsigned char*)malloc (resource->data->length); memcpy (faceMemory, resource->data->b, resource->data->length); error = FT_New_Memory_Face (library, faceMemory, resource->data->length, faceIndex, &face); } if (file) { lime::fclose (file); file = 0; } if (!error) { this->library = library; this->face = face; this->faceMemory = faceMemory; /* Set charmap * * See http://www.microsoft.com/typography/otspec/name.htm for a list of * some possible platform-encoding pairs. We're interested in 0-3 aka 3-1 * - UCS-2. Otherwise, fail. If a font has some unicode map, but lacks * UCS-2 - it is a broken or irrelevant font. What exactly Freetype will * select on face load (it promises most wide unicode, and if that will be * slower that UCS-2 - left as an excercise to check. */ for (int i = 0; i < ((FT_Face)face)->num_charmaps; i++) { FT_UShort pid = ((FT_Face)face)->charmaps[i]->platform_id; FT_UShort eid = ((FT_Face)face)->charmaps[i]->encoding_id; if (((pid == 0) && (eid == 3)) || ((pid == 3) && (eid == 1))) { FT_Set_Charmap ((FT_Face)face, ((FT_Face)face)->charmaps[i]); } } } else { FT_Done_FreeType (library); free (faceMemory); } } } } Font::~Font () { if (library) { FT_Done_FreeType ((FT_Library)library); library = 0; face = 0; } free (faceMemory); faceMemory = 0; } void* Font::Decompose (bool useCFFIValue, int em) { int result, i, j; FT_Set_Char_Size ((FT_Face)face, em, em, 72, 72); FT_Set_Transform ((FT_Face)face, 0, NULL); std::vector glyphs; FT_Outline_Funcs ofn = { outline_move_to, outline_line_to, outline_conic_to, outline_cubic_to, 0, // shift 0 // delta }; // Import every character in face FT_ULong char_code; FT_UInt glyph_index; char_code = FT_Get_First_Char ((FT_Face)face, &glyph_index); while (glyph_index != 0) { if (FT_Load_Glyph ((FT_Face)face, glyph_index, FT_LOAD_NO_BITMAP | FT_LOAD_FORCE_AUTOHINT | FT_LOAD_DEFAULT) == 0) { glyph *g = new glyph; result = FT_Outline_Decompose (&((FT_Face)face)->glyph->outline, &ofn, g); if (result == 0) { g->index = glyph_index; g->char_code = char_code; g->metrics = ((FT_Face)face)->glyph->metrics; glyphs.push_back (g); } else { delete g; } } char_code = FT_Get_Next_Char ((FT_Face)face, char_code, &glyph_index); } // Ascending sort by character codes std::sort (glyphs.begin (), glyphs.end (), glyph_sort_predicate ()); std::vector kern; if (FT_HAS_KERNING (((FT_Face)face))) { int n = glyphs.size (); FT_Vector v; for (i = 0; i < n; i++) { int l_glyph = glyphs[i]->index; for (j = 0; j < n; j++) { int r_glyph = glyphs[j]->index; FT_Get_Kerning ((FT_Face)face, l_glyph, r_glyph, FT_KERNING_DEFAULT, &v); if (v.x != 0 || v.y != 0) { kern.push_back (kerning (i, j, v.x, v.y)); } } } } int num_glyphs = glyphs.size (); wchar_t* family_name = GetFamilyName (); #ifdef LIME_FREETYPE_SWF_METRICS // this should more closely match how [Embed] works in AS3 when // embedding a font in a SWF int calculatedAscender = 0; int calculatedDescender = 0; int calculatedHeight = 0; TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea); if (os2 && os2->version != 0xFFFFU) { calculatedAscender = (FT_Short)os2->usWinAscent; calculatedDescender = -(FT_Short)os2->usWinDescent; calculatedHeight = calculatedAscender - calculatedDescender; } else if (hhea) { calculatedAscender = hhea->Ascender; calculatedDescender = hhea->Descender; calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap; } else { // should never happen, but let's have a fallback to be safe calculatedAscender = ((FT_Face)face)->ascender; calculatedDescender = ((FT_Face)face)->descender; calculatedHeight = ((FT_Face)face)->height; } #elif defined(LIME_FREETYPE_LEGACY_METRICS) // this is FreeType's font metrics algorithm from 2.9.1 // it behaves more like SWF than the new algorithm TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea); int calculatedAscender = 0; int calculatedDescender = 0; int calculatedHeight = 0; if (hhea) { calculatedAscender = hhea->Ascender; calculatedDescender = hhea->Descender; calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap; } if (!( calculatedAscender || calculatedDescender )) { if (os2 && os2->version != 0xFFFFU) { if (os2->sTypoAscender || os2->sTypoDescender) { calculatedAscender = os2->sTypoAscender; calculatedDescender = os2->sTypoDescender; calculatedHeight = calculatedAscender - calculatedDescender + os2->sTypoLineGap; } else { calculatedAscender = (FT_Short)os2->usWinAscent; calculatedDescender = -(FT_Short)os2->usWinDescent; calculatedHeight = calculatedAscender - calculatedDescender; } } } if (!calculatedAscender || !calculatedDescender) { calculatedAscender = ((FT_Face)face)->ascender; calculatedDescender = ((FT_Face)face)->descender; calculatedHeight = ((FT_Face)face)->height; } #else int calculatedAscender = ((FT_Face)face)->ascender; int calculatedDescender = ((FT_Face)face)->descender; int calculatedHeight = ((FT_Face)face)->height; #endif if (useCFFIValue) { value ret = alloc_empty_object (); alloc_field (ret, val_id ("has_kerning"), alloc_bool (FT_HAS_KERNING (((FT_Face)face)))); alloc_field (ret, val_id ("is_fixed_width"), alloc_bool (FT_IS_FIXED_WIDTH (((FT_Face)face)))); alloc_field (ret, val_id ("has_glyph_names"), alloc_bool (FT_HAS_GLYPH_NAMES (((FT_Face)face)))); alloc_field (ret, val_id ("is_italic"), alloc_bool (((FT_Face)face)->style_flags & FT_STYLE_FLAG_ITALIC)); alloc_field (ret, val_id ("is_bold"), alloc_bool (((FT_Face)face)->style_flags & FT_STYLE_FLAG_BOLD)); alloc_field (ret, val_id ("num_glyphs"), alloc_int (num_glyphs)); alloc_field (ret, val_id ("family_name"), family_name == NULL ? alloc_string (((FT_Face)face)->family_name) : alloc_wstring (family_name)); alloc_field (ret, val_id ("style_name"), alloc_string (((FT_Face)face)->style_name)); alloc_field (ret, val_id ("em_size"), alloc_int (((FT_Face)face)->units_per_EM)); alloc_field (ret, val_id ("ascend"), alloc_int (calculatedAscender)); alloc_field (ret, val_id ("descend"), alloc_int (calculatedDescender)); alloc_field (ret, val_id ("height"), alloc_int (calculatedHeight)); delete family_name; // 'glyphs' field value neko_glyphs = alloc_array (num_glyphs); for (i = 0; i < glyphs.size (); i++) { glyph *g = glyphs[i]; int num_points = g->pts.size (); value points = alloc_array (num_points); for (j = 0; j < num_points; j++) { val_array_set_i (points, j, alloc_int (g->pts[j])); } value item = alloc_empty_object (); val_array_set_i (neko_glyphs, i, item); alloc_field (item, val_id ("char_code"), alloc_int (g->char_code)); alloc_field (item, val_id ("advance"), alloc_int (g->metrics.horiAdvance)); alloc_field (item, val_id ("min_x"), alloc_int (g->metrics.horiBearingX)); alloc_field (item, val_id ("max_x"), alloc_int (g->metrics.horiBearingX + g->metrics.width)); alloc_field (item, val_id ("min_y"), alloc_int (g->metrics.horiBearingY - g->metrics.height)); alloc_field (item, val_id ("max_y"), alloc_int (g->metrics.horiBearingY)); alloc_field (item, val_id ("points"), points); delete g; } alloc_field (ret, val_id ("glyphs"), neko_glyphs); // 'kerning' field if (FT_HAS_KERNING (((FT_Face)face))) { value neko_kerning = alloc_array (kern.size ()); for (i = 0; i < kern.size(); i++) { kerning *k = &kern[i]; value item = alloc_empty_object(); val_array_set_i (neko_kerning,i,item); alloc_field (item, val_id ("left_glyph"), alloc_int (k->l_glyph)); alloc_field (item, val_id ("right_glyph"), alloc_int (k->r_glyph)); alloc_field (item, val_id ("x"), alloc_int (k->x)); alloc_field (item, val_id ("y"), alloc_int (k->y)); } alloc_field (ret, val_id ("kerning"), neko_kerning); } else { alloc_field (ret, val_id ("kerning"), alloc_null ()); } return ret; } else { vdynamic* ret = (vdynamic*)hl_alloc_dynobj (); hl_dyn_seti (ret, hl_hash_utf8 ("has_kerning"), &hlt_bool, FT_HAS_KERNING (((FT_Face)face))); hl_dyn_seti (ret, hl_hash_utf8 ("is_fixed_width"), &hlt_bool, FT_IS_FIXED_WIDTH (((FT_Face)face))); hl_dyn_seti (ret, hl_hash_utf8 ("has_glyph_names"), &hlt_bool, FT_HAS_GLYPH_NAMES (((FT_Face)face))); hl_dyn_seti (ret, hl_hash_utf8 ("is_italic"), &hlt_bool, ((FT_Face)face)->style_flags & FT_STYLE_FLAG_ITALIC); hl_dyn_seti (ret, hl_hash_utf8 ("is_bold"), &hlt_bool, ((FT_Face)face)->style_flags & FT_STYLE_FLAG_BOLD); hl_dyn_seti (ret, hl_hash_utf8 ("num_glyphs"), &hlt_i32, num_glyphs); char* _family_name = NULL; if (family_name != NULL) { int length = std::wcslen (family_name); char* result = (char*)malloc (length + 1); std::wcstombs (result, family_name, length); result[length] = '\0'; delete family_name; } else { int length = strlen (((FT_Face)face)->family_name); _family_name = (char*)malloc (length + 1); strcpy (_family_name, ((FT_Face)face)->family_name); } char* style_name = (char*)malloc(strlen(((FT_Face)face)->style_name) + 1); strcpy(style_name, ((FT_Face)face)->style_name); hl_dyn_setp (ret, hl_hash_utf8 ("family_name"), &hlt_bytes, _family_name); hl_dyn_setp (ret, hl_hash_utf8 ("style_name"), &hlt_bytes, style_name); hl_dyn_seti (ret, hl_hash_utf8 ("em_size"), &hlt_i32, ((FT_Face)face)->units_per_EM); hl_dyn_seti (ret, hl_hash_utf8 ("ascend"), &hlt_i32, calculatedAscender); hl_dyn_seti (ret, hl_hash_utf8 ("descend"), &hlt_i32, calculatedDescender); hl_dyn_seti (ret, hl_hash_utf8 ("height"), &hlt_i32, calculatedHeight); // 'glyphs' field hl_varray* _glyphs = (hl_varray*)hl_alloc_array (&hlt_dynobj, num_glyphs); vdynamic** _glyphsData = hl_aptr (_glyphs, vdynamic*); for (i = 0; i < glyphs.size (); i++) { glyph *g = glyphs[i]; int num_points = g->pts.size (); hl_varray* points = (hl_varray*)hl_alloc_array (&hlt_i32, num_points); int* pointsData = hl_aptr (points, int); for (j = 0; j < num_points; j++) { *pointsData++ = g->pts[j]; } vdynamic* item = (vdynamic*)hl_alloc_dynobj (); *_glyphsData++ = item; hl_dyn_seti (item, hl_hash_utf8 ("char_code"), &hlt_i32, g->char_code); hl_dyn_seti (item, hl_hash_utf8 ("advance"), &hlt_i32, g->metrics.horiAdvance); hl_dyn_seti (item, hl_hash_utf8 ("min_x"), &hlt_i32, g->metrics.horiBearingX); hl_dyn_seti (item, hl_hash_utf8 ("max_x"), &hlt_i32, g->metrics.horiBearingX + g->metrics.width); hl_dyn_seti (item, hl_hash_utf8 ("min_y"), &hlt_i32, g->metrics.horiBearingY - g->metrics.height); hl_dyn_seti (item, hl_hash_utf8 ("max_y"), &hlt_i32, g->metrics.horiBearingY); hl_dyn_setp (item, hl_hash_utf8 ("points"), &hlt_array, points); delete g; } hl_dyn_setp (ret, hl_hash_utf8 ("glyphs"), &hlt_array, _glyphs); // 'kerning' field if (FT_HAS_KERNING (((FT_Face)face))) { hl_varray* _kerning = (hl_varray*)hl_alloc_array (&hlt_i32, kern.size ()); vdynamic** _kerningData = hl_aptr (_kerning, vdynamic*); for (i = 0; i < kern.size(); i++) { kerning *k = &kern[i]; vdynamic* item = (vdynamic*)hl_alloc_dynobj (); *_kerningData++ = item; hl_dyn_seti (item, hl_hash_utf8 ("left_glyph"), &hlt_i32, k->l_glyph); hl_dyn_seti (item, hl_hash_utf8 ("right_glyph"), &hlt_i32, k->r_glyph); hl_dyn_seti (item, hl_hash_utf8 ("x"), &hlt_i32, k->x); hl_dyn_seti (item, hl_hash_utf8 ("y"), &hlt_i32, k->y); } hl_dyn_setp (ret, hl_hash_utf8 ("kerning"), &hlt_array, _kerning); } else { hl_dyn_setp (ret, hl_hash_utf8 ("kerning"), &hlt_array, 0); } return ret; } } int Font::GetAscender () { #ifdef LIME_FREETYPE_SWF_METRICS // this should more closely match how [Embed] works in AS3 when // embedding a font in a SWF TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea); if (os2 && os2->version != 0xFFFFU) { return (FT_Short)os2->usWinAscent; } else if (hhea) { return hhea->Ascender; } // should never happen, but let's have a fallback to be safe return ((FT_Face)face)->ascender; #elif defined(LIME_FREETYPE_LEGACY_METRICS) // this is FreeType's font metrics algorithm from 2.9.1 // it behaves more like SWF than the new algorithm TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea); int calculatedAscender = 0; int calculatedDescender = 0; if (hhea) { calculatedAscender = hhea->Ascender; calculatedDescender = hhea->Descender; } if (!( calculatedAscender || calculatedDescender )) { if (os2 && os2->version != 0xFFFFU) { if (os2->sTypoAscender || os2->sTypoDescender) { calculatedAscender = os2->sTypoAscender; calculatedDescender = os2->sTypoDescender; } else { calculatedAscender = (FT_Short)os2->usWinAscent; calculatedDescender = -(FT_Short)os2->usWinDescent; } } } if (!calculatedAscender || !calculatedDescender) { calculatedAscender = ((FT_Face)face)->ascender; calculatedDescender = ((FT_Face)face)->descender; } return calculatedAscender; #else return ((FT_Face)face)->ascender; #endif } int Font::GetDescender () { #ifdef LIME_FREETYPE_SWF_METRICS // this should more closely match how [Embed] works in AS3 when // embedding a font in a SWF TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea); if (os2 && os2->version != 0xFFFFU) { return -(FT_Short)os2->usWinDescent; } else if (hhea) { return hhea->Descender; } // should never happen, but let's have a fallback to be safe return ((FT_Face)face)->descender; #elif defined(LIME_FREETYPE_LEGACY_METRICS) // this is FreeType's font metrics algorithm from 2.9.1 // it behaves more like SWF than the new algorithm TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea); int calculatedAscender = 0; int calculatedDescender = 0; if (hhea) { calculatedAscender = hhea->Ascender; calculatedDescender = hhea->Descender; } if (!( calculatedAscender || calculatedDescender )) { if (os2 && os2->version != 0xFFFFU) { if (os2->sTypoAscender || os2->sTypoDescender) { calculatedAscender = os2->sTypoAscender; calculatedDescender = os2->sTypoDescender; } else { calculatedAscender = (FT_Short)os2->usWinAscent; calculatedDescender = -(FT_Short)os2->usWinDescent; } } } if (!calculatedAscender || !calculatedDescender) { calculatedAscender = ((FT_Face)face)->ascender; calculatedDescender = ((FT_Face)face)->descender; } return calculatedDescender; #else return ((FT_Face)face)->descender; #endif } wchar_t *Font::GetFamilyName () { #ifdef LIME_FREETYPE wchar_t *family_name = NULL; FT_SfntName sfnt_name; FT_UInt num_sfnt_names, sfnt_name_index; int len, i; if (FT_IS_SFNT (((FT_Face)face))) { num_sfnt_names = FT_Get_Sfnt_Name_Count ((FT_Face)face); sfnt_name_index = 0; while (sfnt_name_index < num_sfnt_names) { if (!FT_Get_Sfnt_Name ((FT_Face)face, sfnt_name_index++, (FT_SfntName *)&sfnt_name) && sfnt_name.name_id == TT_NAME_ID_FULL_NAME) { if (sfnt_name.platform_id == TT_PLATFORM_MACINTOSH) { len = sfnt_name.string_len; family_name = new wchar_t[len + 1]; #if defined(ANDROID) && !defined(HXCPP_CLANG) // Fix some devices (Android 4.x or older) that have a bad stdc implementation _mbsrtowcs (family_name, (const char**)&sfnt_name.string, len, 0); #else mbstowcs (family_name, (const char*)sfnt_name.string, len); #endif family_name[len] = L'\0'; return family_name; } else if ((sfnt_name.platform_id == TT_PLATFORM_MICROSOFT) && (sfnt_name.encoding_id == TT_MS_ID_UNICODE_CS)) { len = sfnt_name.string_len / 2; family_name = (wchar_t*)malloc ((len + 1) * sizeof (wchar_t)); for (i = 0; i < len; i++) { family_name[i] = ((wchar_t)sfnt_name.string[i * 2 + 1]) | (((wchar_t)sfnt_name.string[i * 2]) << 8); } family_name[len] = L'\0'; return family_name; } } } } #endif return NULL; } int Font::GetGlyphIndex (const char* character) { long charCode = readNextChar (character); return FT_Get_Char_Index ((FT_Face)face, charCode); } void* Font::GetGlyphIndices (bool useCFFIValue, const char* characters) { if (useCFFIValue) { value indices = alloc_array (0); unsigned long character; int index; while (*characters != 0) { character = readNextChar (characters); if (character == -1) break; index = FT_Get_Char_Index ((FT_Face)face, character); val_array_push (indices, alloc_int (index)); } return indices; } else { unsigned long character; int index; int count = 0; const char* characters_start = characters; while (*characters != 0) { character = readNextChar (characters); if (character == -1) break; count++; } hl_varray* indices = (hl_varray*)hl_alloc_array (&hlt_i32, count); int* indicesData = hl_aptr (indices, int); characters = characters_start; while (*characters != 0) { character = readNextChar (characters); if (character == -1) break; *indicesData++ = FT_Get_Char_Index ((FT_Face)face, character); } return indices; } } void* Font::GetGlyphMetrics (bool useCFFIValue, int index) { if (useCFFIValue) { initialize (); if (FT_Load_Glyph ((FT_Face)face, index, FT_LOAD_NO_BITMAP | FT_LOAD_FORCE_AUTOHINT | FT_LOAD_DEFAULT) == 0) { value metrics = alloc_empty_object (); alloc_field (metrics, id_height, alloc_int (((FT_Face)face)->glyph->metrics.height)); alloc_field (metrics, id_horizontalBearingX, alloc_int (((FT_Face)face)->glyph->metrics.horiBearingX)); alloc_field (metrics, id_horizontalBearingY, alloc_int (((FT_Face)face)->glyph->metrics.horiBearingY)); alloc_field (metrics, id_horizontalAdvance, alloc_int (((FT_Face)face)->glyph->metrics.horiAdvance)); alloc_field (metrics, id_verticalBearingX, alloc_int (((FT_Face)face)->glyph->metrics.vertBearingX)); alloc_field (metrics, id_verticalBearingY, alloc_int (((FT_Face)face)->glyph->metrics.vertBearingY)); alloc_field (metrics, id_verticalAdvance, alloc_int (((FT_Face)face)->glyph->metrics.vertAdvance)); return metrics; } return alloc_null (); } else { if (FT_Load_Glyph ((FT_Face)face, index, FT_LOAD_NO_BITMAP | FT_LOAD_FORCE_AUTOHINT | FT_LOAD_DEFAULT) == 0) { const int id_height = hl_hash_utf8 ("height"); const int id_horizontalBearingX = hl_hash_utf8 ("horizontalBearingX"); const int id_horizontalBearingY = hl_hash_utf8 ("horizontalBearingY"); const int id_horizontalAdvance = hl_hash_utf8 ("horizontalAdvance"); const int id_verticalBearingX = hl_hash_utf8 ("verticalBearingX"); const int id_verticalBearingY = hl_hash_utf8 ("verticalBearingY"); const int id_verticalAdvance = hl_hash_utf8 ("verticalAdvance"); vdynamic* metrics = (vdynamic*)hl_alloc_dynobj (); hl_dyn_seti (metrics, id_height, &hlt_i32, ((FT_Face)face)->glyph->metrics.height); hl_dyn_seti (metrics, id_horizontalBearingX, &hlt_i32, ((FT_Face)face)->glyph->metrics.horiBearingX); hl_dyn_seti (metrics, id_horizontalBearingY, &hlt_i32, ((FT_Face)face)->glyph->metrics.horiBearingY); hl_dyn_seti (metrics, id_horizontalAdvance, &hlt_i32, ((FT_Face)face)->glyph->metrics.horiAdvance); hl_dyn_seti (metrics, id_verticalBearingX, &hlt_i32, ((FT_Face)face)->glyph->metrics.vertBearingX); hl_dyn_seti (metrics, id_verticalBearingY, &hlt_i32, ((FT_Face)face)->glyph->metrics.vertBearingY); hl_dyn_seti (metrics, id_verticalAdvance, &hlt_i32, ((FT_Face)face)->glyph->metrics.vertAdvance); return metrics; } return 0; } } int Font::GetHeight () { #ifdef LIME_FREETYPE_SWF_METRICS // this should more closely match how [Embed] works in AS3 when // embedding a font in a SWF TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea); if (os2 && os2->version != 0xFFFFU) { int calculatedAscender = (FT_Short)os2->usWinAscent; int calculatedDescender = -(FT_Short)os2->usWinDescent; return calculatedAscender - calculatedDescender; } else if (hhea) { int calculatedAscender = hhea->Ascender; int calculatedDescender = hhea->Descender; return calculatedAscender - calculatedDescender + hhea->Line_Gap; } // should never happen, but let's have a fallback to be safe return ((FT_Face)face)->height; #elif defined(LIME_FREETYPE_LEGACY_METRICS) // this is FreeType's font metrics algorithm from 2.9.1 // it behaves more like SWF than the new algorithm TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); TT_HoriHeader* hhea = (TT_HoriHeader*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_hhea); int calculatedAscender = 0; int calculatedDescender = 0; int calculatedHeight = 0; if (hhea) { calculatedAscender = hhea->Ascender; calculatedDescender = hhea->Descender; calculatedHeight = calculatedAscender - calculatedDescender + hhea->Line_Gap; } if (!( calculatedAscender || calculatedDescender )) { if (os2 && os2->version != 0xFFFFU) { if (os2->sTypoAscender || os2->sTypoDescender) { calculatedAscender = os2->sTypoAscender; calculatedDescender = os2->sTypoDescender; calculatedHeight = calculatedAscender - calculatedDescender + os2->sTypoLineGap; } else { calculatedAscender = (FT_Short)os2->usWinAscent; calculatedDescender = -(FT_Short)os2->usWinDescent; calculatedHeight = calculatedAscender - calculatedDescender; } } } if (!calculatedHeight) { calculatedHeight = ((FT_Face)face)->height; } return calculatedHeight; #else return ((FT_Face)face)->height; #endif } int Font::GetNumGlyphs () { return ((FT_Face)face)->num_glyphs; } int Font::GetUnderlinePosition () { return ((FT_Face)face)->underline_position; } int Font::GetUnderlineThickness () { return ((FT_Face)face)->underline_thickness; } int Font::GetStrikethroughPosition () { TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); if (os2 && os2->version != 0xFFFFU) { return os2->yStrikeoutPosition; } return 0; } int Font::GetStrikethroughThickness () { TT_OS2* os2 = (TT_OS2*)FT_Get_Sfnt_Table(((FT_Face)face), ft_sfnt_os2); if (os2 && os2->version != 0xFFFFU) { return os2->yStrikeoutSize; } return 0; } int Font::GetUnitsPerEM () { return ((FT_Face)face)->units_per_EM; } int Font::RenderGlyph(int index, Bytes *bytes, int offset) { if (FT_Load_Glyph((FT_Face)face, index, FT_LOAD_FORCE_AUTOHINT | FT_LOAD_DEFAULT) == 0) { if (FT_Render_Glyph(((FT_Face)face)->glyph, FT_RENDER_MODE_LCD) == 0) { FT_Bitmap bitmap = ((FT_Face)face)->glyph->bitmap; int height = bitmap.rows; int width = bitmap.width / 3; //Due to each pixel now has 3 components (R, G, B) int pitch = bitmap.pitch; if (width == 0 || height == 0) return 0; //We calculate the size needed for the glyph image, including metadata and 24-bit RGB color data uint32_t size = sizeof(GlyphImage) + (width * height * 4); if (bytes->length < size + offset) { bytes->Resize(size + offset); } GlyphImage *data = (GlyphImage *)(bytes->b + offset); //We should initialize the GlyphImage struct here with zero to avoid uninitialized values memset(data, 0, sizeof(GlyphImage)); data->index = index; data->width = width; data->height = height; data->x = ((FT_Face)face)->glyph->bitmap_left; data->y = ((FT_Face)face)->glyph->bitmap_top; unsigned char *position = &data->data; //Copy the bitmap data row by row, copying each RGB triplet and adding padding for 32-bit alignment for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { unsigned char r = bitmap.buffer[i * pitch + j * 3 + 0]; unsigned char g = bitmap.buffer[i * pitch + j * 3 + 1]; unsigned char b = bitmap.buffer[i * pitch + j * 3 + 2]; unsigned char a = (r + g + b) / 3; //Red position[(i * width + j) * 4 + 0] = r; //Green position[(i * width + j) * 4 + 1] = g; //Blue position[(i * width + j) * 4 + 2] = b; //Alpha position[(i * width + j) * 4 + 3] = a; } } return size; } } return 0; } int Font::RenderGlyphs (value indices, Bytes *bytes) { int offset = 0; int totalOffset = 4; uint32_t count = 0; int numIndices = val_array_size (indices); for (int i = 0; i < numIndices; i++) { offset = RenderGlyph (val_int (val_array_i (indices, i)), bytes, totalOffset); if (offset > 0) { totalOffset += offset; count++; } } if (count > 0) { *(uint32_t*)(bytes->b) = count; } return totalOffset; } void Font::SetSize(size_t size, size_t dpi) { //We changed the function signature to include a dpi argument which changes this from //the default value of 72 for dpi. Any public api that uses this should probably be changed //to allow setting the dpi in an appropriate future release. size_t hdpi = dpi; size_t vdpi = dpi; FT_Set_Char_Size( (FT_Face)face, //Handle to the target face object 0, //Char width in 1/64th of points (0 means same as height) static_cast(size * 64), //Char height in 1/64th of points hdpi, //Horizontal DPI vdpi //Vertical DPI ); mSize = size; } } ================================================ FILE: project/src/text/harfbuzz/HarfbuzzBindings.cpp ================================================ #include #include #include #include #include #include #include FT_FREETYPE_H #include #include #include namespace lime { struct HBGlyphInfo { int codepoint; int mask; int cluster; }; struct HBGlyphPosition { int xAdvance; int yAdvance; int xOffset; int yOffset; }; void gc_hb_blob (value handle) { hb_blob_destroy ((hb_blob_t*)val_data (handle)); val_gc (handle, 0); } void hl_gc_hb_blob (HL_CFFIPointer* handle) { hb_blob_destroy ((hb_blob_t*)handle->ptr); } void gc_hb_buffer (value handle) { hb_buffer_destroy ((hb_buffer_t*)val_data (handle)); val_gc (handle, 0); } void hl_gc_hb_buffer (HL_CFFIPointer* handle) { hb_buffer_destroy ((hb_buffer_t*)handle->ptr); } void gc_hb_face (value handle) { hb_face_destroy ((hb_face_t*)val_data (handle)); val_gc (handle, 0); } void hl_gc_hb_face (HL_CFFIPointer* handle) { hb_face_destroy ((hb_face_t*)handle->ptr); } void gc_hb_font (value handle) { hb_font_destroy ((hb_font_t*)val_data (handle)); val_gc (handle, 0); } void hl_gc_hb_font (HL_CFFIPointer* handle) { hb_font_destroy ((hb_font_t*)handle->ptr); } void gc_hb_set (value handle) { hb_set_destroy ((hb_set_t*)val_data (handle)); val_gc (handle, 0); } void hl_gc_hb_set (HL_CFFIPointer* handle) { hb_set_destroy ((hb_set_t*)handle->ptr); } value lime_hb_blob_create (double data, int length, int memoryMode) { hb_blob_t* blob = hb_blob_create ((const char*)(uintptr_t)data, length, (hb_memory_mode_t)memoryMode, 0, 0); return CFFIPointer (blob, gc_hb_blob); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_blob_create) (double data, int length, int memoryMode) { hb_blob_t* blob = hb_blob_create ((const char*)(uintptr_t)data, length, (hb_memory_mode_t)memoryMode, 0, 0); return HLCFFIPointer (blob, (hl_finalizer)hl_gc_hb_blob); } value lime_hb_blob_create_sub_blob (value parent, int offset, int length) { hb_blob_t* blob = hb_blob_create_sub_blob ((hb_blob_t*)val_data (parent), offset, length); return CFFIPointer (blob, gc_hb_blob); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_blob_create_sub_blob) (HL_CFFIPointer* parent, int offset, int length) { hb_blob_t* blob = hb_blob_create_sub_blob ((hb_blob_t*)parent->ptr, offset, length); return HLCFFIPointer (blob, (hl_finalizer)hl_gc_hb_blob); } double lime_hb_blob_get_data (value blob) { unsigned int length = 0; return (uintptr_t)hb_blob_get_data ((hb_blob_t*)val_data (blob), &length); } HL_PRIM double HL_NAME(hl_hb_blob_get_data) (HL_CFFIPointer* blob) { unsigned int length = 0; return (uintptr_t)hb_blob_get_data ((hb_blob_t*)blob->ptr, &length); } double lime_hb_blob_get_data_writable (value blob) { unsigned int length = 0; return (uintptr_t)hb_blob_get_data ((hb_blob_t*)val_data (blob), &length); } HL_PRIM double HL_NAME(hl_hb_blob_get_data_writable) (HL_CFFIPointer* blob) { unsigned int length = 0; return (uintptr_t)hb_blob_get_data ((hb_blob_t*)blob->ptr, &length); } value lime_hb_blob_get_empty () { hb_blob_t* blob = hb_blob_get_empty (); return CFFIPointer (blob, gc_hb_blob); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_blob_get_empty) () { hb_blob_t* blob = hb_blob_get_empty (); return HLCFFIPointer (blob, (hl_finalizer)hl_gc_hb_blob); } int lime_hb_blob_get_length (value blob) { return hb_blob_get_length ((hb_blob_t*)val_data (blob)); } HL_PRIM int HL_NAME(hl_hb_blob_get_length) (HL_CFFIPointer* blob) { return hb_blob_get_length ((hb_blob_t*)blob->ptr); } bool lime_hb_blob_is_immutable (value blob) { return hb_blob_is_immutable ((hb_blob_t*)val_data (blob)); } HL_PRIM bool HL_NAME(hl_hb_blob_is_immutable) (HL_CFFIPointer* blob) { return hb_blob_is_immutable ((hb_blob_t*)blob->ptr); } void lime_hb_blob_make_immutable (value blob) { hb_blob_make_immutable ((hb_blob_t*)val_data (blob)); } HL_PRIM void HL_NAME(hl_hb_blob_make_immutable) (HL_CFFIPointer* blob) { hb_blob_make_immutable ((hb_blob_t*)blob->ptr); } void lime_hb_buffer_add (value buffer, int codepoint, int cluster) { hb_buffer_add ((hb_buffer_t*)val_data (buffer), (hb_codepoint_t)codepoint, cluster); } HL_PRIM void HL_NAME(hl_hb_buffer_add) (HL_CFFIPointer* buffer, int codepoint, int cluster) { hb_buffer_add ((hb_buffer_t*)buffer->ptr, (hb_codepoint_t)codepoint, cluster); } void lime_hb_buffer_add_hxstring(value buffer, HxString text, int itemOffset, int itemLength) { if (hxs_encoding (text) == hx::StringUtf16) { hb_buffer_add_utf16 ((hb_buffer_t*)val_data(buffer), (const uint16_t*)text.c_str (), text.length, itemOffset, itemLength); } else { hb_buffer_add_utf8 ((hb_buffer_t*)val_data(buffer), text.c_str (), text.length, itemOffset, itemLength); } } HL_PRIM void HL_NAME(hl_hb_buffer_add_hxstring) (HL_CFFIPointer* buffer, hl_vstring* text, int itemOffset, int itemLength) { hb_buffer_add_utf16 ((hb_buffer_t*)buffer->ptr, text ? (const uint16_t*)text->bytes : NULL, text ? text->length : 0, itemOffset, itemLength); } void lime_hb_buffer_add_codepoints (value buffer, double text, int textLength, int itemOffset, int itemLength) { hb_buffer_add_codepoints ((hb_buffer_t*)val_data (buffer), (const hb_codepoint_t*)(uintptr_t)text, textLength, itemOffset, itemLength); } HL_PRIM void HL_NAME(hl_hb_buffer_add_codepoints) (HL_CFFIPointer* buffer, double text, int textLength, int itemOffset, int itemLength) { hb_buffer_add_codepoints ((hb_buffer_t*)buffer->ptr, (const hb_codepoint_t*)(uintptr_t)text, textLength, itemOffset, itemLength); } void lime_hb_buffer_add_utf8 (value buffer, HxString text, int itemOffset, int itemLength) { int textLength = text.length; if (hxs_encoding (text) == hx::StringUtf16) { // hxs_utf8 doesn't give us the length, so treat it as null terminated textLength = -1; } hb_buffer_add_utf8 ((hb_buffer_t*)val_data (buffer), hxs_utf8 (text, nullptr), textLength, itemOffset, itemLength); } HL_PRIM void HL_NAME(hl_hb_buffer_add_utf8) (HL_CFFIPointer* buffer, hl_vstring* text, int itemOffset, int itemLength) { hb_buffer_add_utf8 ((hb_buffer_t*)buffer->ptr, text ? hl_to_utf8 (text->bytes) : NULL, -1, itemOffset, itemLength); } void lime_hb_buffer_add_utf16 (value buffer, double text, int textLength, int itemOffset, int itemLength) { hb_buffer_add_utf16 ((hb_buffer_t*)val_data (buffer), (const uint16_t*)(uintptr_t)text, textLength, itemOffset, itemLength); } HL_PRIM void HL_NAME(hl_hb_buffer_add_utf16) (HL_CFFIPointer* buffer, double text, int textLength, int itemOffset, int itemLength) { hb_buffer_add_utf16 ((hb_buffer_t*)buffer->ptr, (const uint16_t*)(uintptr_t)text, textLength, itemOffset, itemLength); } void lime_hb_buffer_add_utf32 (value buffer, double text, int textLength, int itemOffset, int itemLength) { hb_buffer_add_utf32 ((hb_buffer_t*)val_data (buffer), (const uint32_t*)(uintptr_t)text, textLength, itemOffset, itemLength); } HL_PRIM void HL_NAME(hl_hb_buffer_add_utf32) (HL_CFFIPointer* buffer, double text, int textLength, int itemOffset, int itemLength) { hb_buffer_add_utf32 ((hb_buffer_t*)buffer->ptr, (const uint32_t*)(uintptr_t)text, textLength, itemOffset, itemLength); } bool lime_hb_buffer_allocation_successful (value buffer) { return hb_buffer_allocation_successful ((hb_buffer_t*)val_data (buffer)); } HL_PRIM bool HL_NAME(hl_hb_buffer_allocation_successful) (HL_CFFIPointer* buffer) { return hb_buffer_allocation_successful ((hb_buffer_t*)buffer->ptr); } void lime_hb_buffer_clear_contents (value buffer) { hb_buffer_clear_contents ((hb_buffer_t*)val_data (buffer)); } HL_PRIM void HL_NAME(hl_hb_buffer_clear_contents) (HL_CFFIPointer* buffer) { hb_buffer_clear_contents ((hb_buffer_t*)buffer->ptr); } value lime_hb_buffer_create () { hb_buffer_t* buffer = hb_buffer_create (); return CFFIPointer (buffer, gc_hb_buffer); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_buffer_create) () { hb_buffer_t* buffer = hb_buffer_create (); return HLCFFIPointer (buffer, (hl_finalizer)hl_gc_hb_buffer); } int lime_hb_buffer_get_cluster_level (value buffer) { return hb_buffer_get_cluster_level ((hb_buffer_t*)val_data (buffer)); } HL_PRIM int HL_NAME(hl_hb_buffer_get_cluster_level) (HL_CFFIPointer* buffer) { return hb_buffer_get_cluster_level ((hb_buffer_t*)buffer->ptr); } int lime_hb_buffer_get_content_type (value buffer) { return hb_buffer_get_content_type ((hb_buffer_t*)val_data (buffer)); } HL_PRIM int HL_NAME(hl_hb_buffer_get_content_type) (HL_CFFIPointer* buffer) { return hb_buffer_get_content_type ((hb_buffer_t*)buffer->ptr); } int lime_hb_buffer_get_direction (value buffer) { return hb_buffer_get_direction ((hb_buffer_t*)val_data (buffer)); } HL_PRIM int HL_NAME(hl_hb_buffer_get_direction) (HL_CFFIPointer* buffer) { return hb_buffer_get_direction ((hb_buffer_t*)buffer->ptr); } value lime_hb_buffer_get_empty () { hb_buffer_t* buffer = hb_buffer_get_empty (); return CFFIPointer (buffer, gc_hb_buffer); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_buffer_get_empty) () { hb_buffer_t* buffer = hb_buffer_get_empty (); return HLCFFIPointer (buffer, (hl_finalizer)hl_gc_hb_buffer); } int lime_hb_buffer_get_flags (value buffer) { return hb_buffer_get_flags ((hb_buffer_t*)val_data (buffer)); } HL_PRIM int HL_NAME(hl_hb_buffer_get_flags) (HL_CFFIPointer* buffer) { return hb_buffer_get_flags ((hb_buffer_t*)buffer->ptr); } value lime_hb_buffer_get_glyph_infos (value buffer, value bytes) { unsigned int length = 0; hb_glyph_info_t* info = hb_buffer_get_glyph_infos ((hb_buffer_t*)val_data (buffer), &length); if (length > 0) { Bytes _bytes = Bytes (bytes); _bytes.Resize (length * sizeof (HBGlyphInfo)); HBGlyphInfo* glyphInfo = (HBGlyphInfo*)_bytes.b; for (int i = 0; i < length; i++, info++, glyphInfo++) { glyphInfo->codepoint = info->codepoint; glyphInfo->mask = info->mask; glyphInfo->cluster = info->cluster; } return _bytes.Value (bytes); } else { return alloc_null (); } } HL_PRIM Bytes* HL_NAME(hl_hb_buffer_get_glyph_infos) (HL_CFFIPointer* buffer, Bytes* bytes) { unsigned int length = 0; hb_glyph_info_t* info = hb_buffer_get_glyph_infos ((hb_buffer_t*)buffer->ptr, &length); if (length > 0) { bytes->Resize (length * sizeof (HBGlyphInfo)); HBGlyphInfo* glyphInfo = (HBGlyphInfo*)bytes->b; for (int i = 0; i < length; i++, info++, glyphInfo++) { glyphInfo->codepoint = info->codepoint; glyphInfo->mask = info->mask; glyphInfo->cluster = info->cluster; } return bytes; } else { return NULL; } } value lime_hb_buffer_get_glyph_positions (value buffer, value bytes) { unsigned int length = 0; hb_glyph_position_t* positions = hb_buffer_get_glyph_positions ((hb_buffer_t*)val_data (buffer), &length); if (length > 0) { Bytes _bytes = Bytes (bytes); _bytes.Resize (length * sizeof (HBGlyphPosition)); HBGlyphPosition* glyphPosition = (HBGlyphPosition*)_bytes.b; for (int i = 0; i < length; i++, positions++, glyphPosition++) { glyphPosition->xAdvance = positions->x_advance; glyphPosition->yAdvance = positions->y_advance; glyphPosition->xOffset = positions->x_offset; glyphPosition->yOffset = positions->y_offset; } return _bytes.Value (bytes); } else { return alloc_null (); } } HL_PRIM Bytes* HL_NAME(hl_hb_buffer_get_glyph_positions) (HL_CFFIPointer* buffer, Bytes* bytes) { unsigned int length = 0; hb_glyph_position_t* positions = hb_buffer_get_glyph_positions ((hb_buffer_t*)buffer->ptr, &length); if (length > 0) { bytes->Resize (length * sizeof (HBGlyphPosition)); HBGlyphPosition* glyphPosition = (HBGlyphPosition*)bytes->b; for (int i = 0; i < length; i++, positions++, glyphPosition++) { glyphPosition->xAdvance = positions->x_advance; glyphPosition->yAdvance = positions->y_advance; glyphPosition->xOffset = positions->x_offset; glyphPosition->yOffset = positions->y_offset; } return bytes; } else { return NULL; } } value lime_hb_buffer_get_language (value buffer) { hb_language_t language = hb_buffer_get_language ((hb_buffer_t*)val_data (buffer)); return CFFIPointer ((void*)language); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_buffer_get_language) (HL_CFFIPointer* buffer) { hb_language_t language = hb_buffer_get_language ((hb_buffer_t*)buffer->ptr); return HLCFFIPointer ((void*)language); } int lime_hb_buffer_get_length (value buffer) { return hb_buffer_get_length ((hb_buffer_t*)val_data (buffer)); } HL_PRIM int HL_NAME(hl_hb_buffer_get_length) (HL_CFFIPointer* buffer) { return hb_buffer_get_length ((hb_buffer_t*)buffer->ptr); } int lime_hb_buffer_get_replacement_codepoint (value buffer) { return hb_buffer_get_replacement_codepoint ((hb_buffer_t*)val_data (buffer)); } HL_PRIM int HL_NAME(hl_hb_buffer_get_replacement_codepoint) (HL_CFFIPointer* buffer) { return hb_buffer_get_replacement_codepoint ((hb_buffer_t*)buffer->ptr); } int lime_hb_buffer_get_script (value buffer) { return hb_buffer_get_script ((hb_buffer_t*)val_data (buffer)); } HL_PRIM int HL_NAME(hl_hb_buffer_get_script) (HL_CFFIPointer* buffer) { return hb_buffer_get_script ((hb_buffer_t*)buffer->ptr); } void lime_hb_buffer_get_segment_properties (value buffer, value props) { hb_buffer_get_segment_properties ((hb_buffer_t*)val_data (buffer), (hb_segment_properties_t*)val_data (props)); } HL_PRIM void HL_NAME(hl_hb_buffer_get_segment_properties) (HL_CFFIPointer* buffer, HL_CFFIPointer* props) { hb_buffer_get_segment_properties ((hb_buffer_t*)buffer->ptr, (hb_segment_properties_t*)props->ptr); } void lime_hb_buffer_guess_segment_properties (value buffer) { hb_buffer_guess_segment_properties ((hb_buffer_t*)val_data (buffer)); } HL_PRIM void HL_NAME(hl_hb_buffer_guess_segment_properties) (HL_CFFIPointer* buffer) { hb_buffer_guess_segment_properties ((hb_buffer_t*)buffer->ptr); } void lime_hb_buffer_normalize_glyphs (value buffer) { hb_buffer_normalize_glyphs ((hb_buffer_t*)val_data (buffer)); } HL_PRIM void HL_NAME(hl_hb_buffer_normalize_glyphs) (HL_CFFIPointer* buffer) { hb_buffer_normalize_glyphs ((hb_buffer_t*)buffer->ptr); } bool lime_hb_buffer_preallocate (value buffer, int size) { return hb_buffer_pre_allocate ((hb_buffer_t*)val_data (buffer), size); } HL_PRIM bool HL_NAME(hl_hb_buffer_preallocate) (HL_CFFIPointer* buffer, int size) { return hb_buffer_pre_allocate ((hb_buffer_t*)buffer->ptr, size); } void lime_hb_buffer_reset (value buffer) { hb_buffer_reset ((hb_buffer_t*)val_data (buffer)); } HL_PRIM void HL_NAME(hl_hb_buffer_reset) (HL_CFFIPointer* buffer) { hb_buffer_reset ((hb_buffer_t*)buffer->ptr); } void lime_hb_buffer_reverse (value buffer) { hb_buffer_reverse ((hb_buffer_t*)val_data (buffer)); } HL_PRIM void HL_NAME(hl_hb_buffer_reverse) (HL_CFFIPointer* buffer) { hb_buffer_reverse ((hb_buffer_t*)buffer->ptr); } void lime_hb_buffer_reverse_clusters (value buffer) { hb_buffer_reverse_clusters ((hb_buffer_t*)val_data (buffer)); } HL_PRIM void HL_NAME(hl_hb_buffer_reverse_clusters) (HL_CFFIPointer* buffer) { hb_buffer_reverse_clusters ((hb_buffer_t*)buffer->ptr); } int lime_hb_buffer_serialize_format_from_string (HxString str) { return hb_buffer_serialize_format_from_string (str.c_str (), str.length); } HL_PRIM int HL_NAME(hl_hb_buffer_serialize_format_from_string) (hl_vstring* str) { return hb_buffer_serialize_format_from_string (str ? hl_to_utf8 (str->bytes) : NULL, str ? str->length : 0); } value lime_hb_buffer_serialize_format_to_string (int format) { const char* result = hb_buffer_serialize_format_to_string ((hb_buffer_serialize_format_t)format); if (result) return alloc_string (result); return alloc_null (); } HL_PRIM vbyte* HL_NAME(hl_hb_buffer_serialize_format_to_string) (int format) { const char* result = hb_buffer_serialize_format_to_string ((hb_buffer_serialize_format_t)format); if (result) { int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); return (vbyte*)_result; } return NULL; } value lime_hb_buffer_serialize_list_formats () { const char** formats = hb_buffer_serialize_list_formats (); if (formats) { int length = sizeof (formats) / sizeof (char); value result = alloc_array (length); for (int i = 0; i < length; i++) { val_array_set_i (result, i, alloc_string (formats[i])); } return result; } else { return alloc_array (0); } } HL_PRIM varray* HL_NAME(hl_hb_buffer_serialize_list_formats) () { const char** formats = hb_buffer_serialize_list_formats (); if (formats) { // varray* result = hl_alloc_array (&hlt_byte, ) // hl_aptr (result, const char*) = formats; // TODO return NULL; } else { return NULL; } } void lime_hb_buffer_set_cluster_level (value buffer, int clusterLevel) { hb_buffer_set_cluster_level ((hb_buffer_t*)val_data (buffer), (hb_buffer_cluster_level_t)clusterLevel); } HL_PRIM void HL_NAME(hl_hb_buffer_set_cluster_level) (HL_CFFIPointer* buffer, int clusterLevel) { hb_buffer_set_cluster_level ((hb_buffer_t*)buffer->ptr, (hb_buffer_cluster_level_t)clusterLevel); } void lime_hb_buffer_set_content_type (value buffer, int contentType) { hb_buffer_set_content_type ((hb_buffer_t*)val_data (buffer), (hb_buffer_content_type_t)contentType); } HL_PRIM void HL_NAME(hl_hb_buffer_set_content_type) (HL_CFFIPointer* buffer, int contentType) { hb_buffer_set_content_type ((hb_buffer_t*)buffer->ptr, (hb_buffer_content_type_t)contentType); } void lime_hb_buffer_set_direction (value buffer, int direction) { hb_buffer_set_direction ((hb_buffer_t*)val_data (buffer), (hb_direction_t)direction); } HL_PRIM void HL_NAME(hl_hb_buffer_set_direction) (HL_CFFIPointer* buffer, int direction) { hb_buffer_set_direction ((hb_buffer_t*)buffer->ptr, (hb_direction_t)direction); } void lime_hb_buffer_set_flags (value buffer, int flags) { hb_buffer_set_flags ((hb_buffer_t*)val_data (buffer), (hb_buffer_flags_t)flags); } HL_PRIM void HL_NAME(hl_hb_buffer_set_flags) (HL_CFFIPointer* buffer, int flags) { hb_buffer_set_flags ((hb_buffer_t*)buffer->ptr, (hb_buffer_flags_t)flags); } void lime_hb_buffer_set_language (value buffer, value language) { hb_buffer_set_language ((hb_buffer_t*)val_data (buffer), (hb_language_t)val_data (language)); } HL_PRIM void HL_NAME(hl_hb_buffer_set_language) (HL_CFFIPointer* buffer, HL_CFFIPointer* language) { hb_buffer_set_language ((hb_buffer_t*)buffer->ptr, (hb_language_t)language->ptr); } bool lime_hb_buffer_set_length (value buffer, int length) { return hb_buffer_set_length ((hb_buffer_t*)val_data (buffer), length); } HL_PRIM bool HL_NAME(hl_hb_buffer_set_length) (HL_CFFIPointer* buffer, int length) { return hb_buffer_set_length ((hb_buffer_t*)buffer->ptr, length); } void lime_hb_buffer_set_replacement_codepoint (value buffer, int replacement) { hb_buffer_set_replacement_codepoint ((hb_buffer_t*)val_data (buffer), (hb_codepoint_t)replacement); } HL_PRIM void HL_NAME(hl_hb_buffer_set_replacement_codepoint) (HL_CFFIPointer* buffer, int replacement) { hb_buffer_set_replacement_codepoint ((hb_buffer_t*)buffer->ptr, (hb_codepoint_t)replacement); } void lime_hb_buffer_set_script (value buffer, int script) { if (script == -1) script = HB_SCRIPT_COMMON; // Workaround for Neko // TODO: COMMON is an int32 and doesn't translate properly on Neko hb_buffer_set_script ((hb_buffer_t*)val_data (buffer), (hb_script_t)script); } HL_PRIM void HL_NAME(hl_hb_buffer_set_script) (HL_CFFIPointer* buffer, int script) { hb_buffer_set_script ((hb_buffer_t*)buffer->ptr, (hb_script_t)script); } void lime_hb_buffer_set_segment_properties (value buffer, value props) { hb_buffer_set_segment_properties ((hb_buffer_t*)val_data (buffer), (const hb_segment_properties_t*)val_data (props)); } HL_PRIM void HL_NAME(hl_hb_buffer_set_segment_properties) (HL_CFFIPointer* buffer, HL_CFFIPointer* props) { hb_buffer_set_segment_properties ((hb_buffer_t*)buffer->ptr, (const hb_segment_properties_t*)props->ptr); } value lime_hb_face_create (value blob, int index) { hb_face_t* face = hb_face_create ((hb_blob_t*)val_data (blob), index); return CFFIPointer (face, gc_hb_face); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_face_create) (HL_CFFIPointer* blob, int index) { hb_face_t* face = hb_face_create ((hb_blob_t*)blob->ptr, index); return HLCFFIPointer (face, (hl_finalizer)hl_gc_hb_face); } value lime_hb_face_get_empty () { hb_face_t* face = hb_face_get_empty (); return CFFIPointer (face, gc_hb_face); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_face_get_empty) () { hb_face_t* face = hb_face_get_empty (); return HLCFFIPointer (face, (hl_finalizer)hl_gc_hb_face); } int lime_hb_face_get_glyph_count (value face) { return hb_face_get_glyph_count ((hb_face_t*)val_data (face)); } HL_PRIM int HL_NAME(hl_hb_face_get_glyph_count) (HL_CFFIPointer* face) { return hb_face_get_glyph_count ((hb_face_t*)face->ptr); } int lime_hb_face_get_index (value face) { return hb_face_get_index ((hb_face_t*)val_data (face)); } HL_PRIM int HL_NAME(hl_hb_face_get_index) (HL_CFFIPointer* face) { return hb_face_get_index ((hb_face_t*)face->ptr); } int lime_hb_face_get_upem (value face) { return hb_face_get_upem ((hb_face_t*)val_data (face)); } HL_PRIM int HL_NAME(hl_hb_face_get_upem) (HL_CFFIPointer* face) { return hb_face_get_upem ((hb_face_t*)face->ptr); } bool lime_hb_face_is_immutable (value face) { return hb_face_is_immutable ((hb_face_t*)val_data (face)); } HL_PRIM bool HL_NAME(hl_hb_face_is_immutable) (HL_CFFIPointer* face) { return hb_face_is_immutable ((hb_face_t*)face->ptr); } void lime_hb_face_make_immutable (value face) { hb_face_make_immutable ((hb_face_t*)val_data (face)); } HL_PRIM void HL_NAME(hl_hb_face_make_immutable) (HL_CFFIPointer* face) { hb_face_make_immutable ((hb_face_t*)face->ptr); } value lime_hb_face_reference_blob (value face) { hb_blob_t* blob = hb_face_reference_blob ((hb_face_t*)val_data (face)); // TODO: Should this be managed differently? return CFFIPointer (blob, gc_hb_blob); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_face_reference_blob) (HL_CFFIPointer* face) { hb_blob_t* blob = hb_face_reference_blob ((hb_face_t*)face->ptr); // TODO: Should this be managed differently? return HLCFFIPointer (blob, (hl_finalizer)hl_gc_hb_blob); } value lime_hb_face_reference_table (value face, int tag) { hb_blob_t* blob = hb_face_reference_table ((hb_face_t*)val_data (face), (hb_tag_t)tag); return CFFIPointer (blob, gc_hb_blob); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_face_reference_table) (HL_CFFIPointer* face, int tag) { hb_blob_t* blob = hb_face_reference_table ((hb_face_t*)face->ptr, (hb_tag_t)tag); return HLCFFIPointer (blob, (hl_finalizer)hl_gc_hb_blob); } void lime_hb_face_set_glyph_count (value face, int glyphCount) { hb_face_set_glyph_count ((hb_face_t*)val_data (face), glyphCount); } HL_PRIM void HL_NAME(hl_hb_face_set_glyph_count) (HL_CFFIPointer* face, int glyphCount) { hb_face_set_glyph_count ((hb_face_t*)face->ptr, glyphCount); } void lime_hb_face_set_index (value face, int index) { hb_face_set_index ((hb_face_t*)val_data (face), index); } HL_PRIM void HL_NAME(hl_hb_face_set_index) (HL_CFFIPointer* face, int index) { hb_face_set_index ((hb_face_t*)face->ptr, index); } void lime_hb_face_set_upem (value face, int upem) { hb_face_set_upem ((hb_face_t*)val_data (face), upem); } HL_PRIM void HL_NAME(hl_hb_face_set_upem) (HL_CFFIPointer* face, int upem) { hb_face_set_upem ((hb_face_t*)face->ptr, upem); } value lime_hb_feature_from_string (HxString str) { hb_feature_t feature; if (hb_feature_from_string (str.c_str (), str.length, &feature)) { // TODO; return alloc_null (); //return CFFIPointer (feature); } else { return alloc_null (); } } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_feature_from_string) (hl_vstring* str) { hb_feature_t feature; if (hb_feature_from_string (str ? hl_to_utf8 (str->bytes) : NULL, str ? str->length : 0, &feature)) { // TODO; return NULL; //return CFFIPointer (feature); } else { return NULL; } } value lime_hb_feature_to_string (value feature) { char result[128]; hb_feature_to_string ((hb_feature_t*)val_data (feature), result, 128); return alloc_string (result); } HL_PRIM vbyte* HL_NAME(hl_hb_feature_to_string) (HL_CFFIPointer* feature) { char* result = (char*)malloc (128); hb_feature_to_string ((hb_feature_t*)feature->ptr, result, 128); int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); return (vbyte*)_result; } void lime_hb_font_add_glyph_origin_for_direction (value font, int glyph, int direction, int x, int y) { hb_font_add_glyph_origin_for_direction ((hb_font_t*)val_data (font), (hb_codepoint_t)glyph, (hb_direction_t)direction, &x, &y); } HL_PRIM void HL_NAME(hl_hb_font_add_glyph_origin_for_direction) (HL_CFFIPointer* font, int glyph, int direction, int x, int y) { hb_font_add_glyph_origin_for_direction ((hb_font_t*)font->ptr, (hb_codepoint_t)glyph, (hb_direction_t)direction, &x, &y); } value lime_hb_font_create (value face) { hb_font_t* font = hb_font_create ((hb_face_t*)val_data (face)); return CFFIPointer (font, gc_hb_font); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_font_create) (HL_CFFIPointer* face) { hb_font_t* font = hb_font_create ((hb_face_t*)face->ptr); return HLCFFIPointer (font, (hl_finalizer)hl_gc_hb_font); } value lime_hb_font_create_sub_font (value parent) { hb_font_t* font = hb_font_create_sub_font ((hb_font_t*)val_data (parent)); return CFFIPointer (font, gc_hb_font); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_font_create_sub_font) (HL_CFFIPointer* parent) { hb_font_t* font = hb_font_create_sub_font ((hb_font_t*)parent->ptr); return HLCFFIPointer (font, (hl_finalizer)hl_gc_hb_font); } value lime_hb_font_get_empty () { hb_font_t* font = hb_font_get_empty (); return CFFIPointer (font, gc_hb_font); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_font_get_empty) () { hb_font_t* font = hb_font_get_empty (); return HLCFFIPointer (font, (hl_finalizer)hl_gc_hb_font); } value lime_hb_font_get_face (value font) { hb_face_t* face = hb_font_get_face ((hb_font_t*)val_data (font)); return CFFIPointer (face, gc_hb_face); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_font_get_face) (HL_CFFIPointer* font) { // TODO: Manage memory differently here? hb_face_t* face = hb_font_get_face ((hb_font_t*)font->ptr); return HLCFFIPointer (face, (hl_finalizer)hl_gc_hb_face); } value lime_hb_font_get_glyph_advance_for_direction (value font, int glyph, int direction) { hb_position_t x; hb_position_t y; hb_font_get_glyph_advance_for_direction ((hb_font_t*)val_data (font), (hb_codepoint_t)glyph, (hb_direction_t)direction, &x, &y); Vector2 result = Vector2 (x, y); return result.Value (); } HL_PRIM Vector2* HL_NAME(hl_hb_font_get_glyph_advance_for_direction) (HL_CFFIPointer* font, int glyph, int direction, Vector2* out) { hb_position_t x; hb_position_t y; hb_font_get_glyph_advance_for_direction ((hb_font_t*)font->ptr, (hb_codepoint_t)glyph, (hb_direction_t)direction, &x, &y); out->x = x; out->y = y; return out; } value lime_hb_font_get_glyph_kerning_for_direction (value font, int firstGlyph, int secondGlyph, int direction) { hb_position_t x; hb_position_t y; hb_font_get_glyph_kerning_for_direction ((hb_font_t*)val_data (font), (hb_codepoint_t)firstGlyph, (hb_codepoint_t)secondGlyph, (hb_direction_t)direction, &x, &y); Vector2 result = Vector2 (x, y); return result.Value (); } HL_PRIM Vector2* HL_NAME(hl_hb_font_get_glyph_kerning_for_direction) (HL_CFFIPointer* font, int firstGlyph, int secondGlyph, int direction, Vector2* out) { hb_position_t x; hb_position_t y; hb_font_get_glyph_kerning_for_direction ((hb_font_t*)font->ptr, (hb_codepoint_t)firstGlyph, (hb_codepoint_t)secondGlyph, (hb_direction_t)direction, &x, &y); out->x = x; out->y = y; return out; } value lime_hb_font_get_glyph_origin_for_direction (value font, int glyph, int direction) { hb_position_t x; hb_position_t y; hb_font_get_glyph_origin_for_direction ((hb_font_t*)val_data (font), (hb_codepoint_t)glyph, (hb_direction_t)direction, &x, &y); Vector2 result = Vector2 (x, y); return result.Value (); } HL_PRIM Vector2* HL_NAME(hl_hb_font_get_glyph_origin_for_direction) (HL_CFFIPointer* font, int glyph, int direction, Vector2* out) { hb_position_t x; hb_position_t y; hb_font_get_glyph_origin_for_direction ((hb_font_t*)font->ptr, (hb_codepoint_t)glyph, (hb_direction_t)direction, &x, &y); out->x = x; out->y = y; return out; } value lime_hb_font_get_parent (value font) { hb_font_t* parent = hb_font_get_parent ((hb_font_t*)val_data (font)); return CFFIPointer (parent, gc_hb_font); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_font_get_parent) (HL_CFFIPointer* font) { // Manage memory differently here? hb_font_t* parent = hb_font_get_parent ((hb_font_t*)font->ptr); return HLCFFIPointer (parent, (hl_finalizer)hl_gc_hb_font); } value lime_hb_font_get_ppem (value font) { int xppem = 0; int yppem = 0; hb_font_get_scale ((hb_font_t*)val_data (font), &xppem, &yppem); Vector2 result = Vector2 (xppem, yppem); return result.Value (); } HL_PRIM Vector2* HL_NAME(hl_hb_font_get_ppem) (HL_CFFIPointer* font, Vector2* out) { int xppem = 0; int yppem = 0; hb_font_get_scale ((hb_font_t*)font->ptr, &xppem, &yppem); out->x = xppem; out->y = yppem; return out; } value lime_hb_font_get_scale (value font) { int xScale = 0; int yScale = 0; hb_font_get_scale ((hb_font_t*)val_data (font), &xScale, &yScale); Vector2 result = Vector2 (xScale, yScale); return result.Value (); } HL_PRIM Vector2* HL_NAME(hl_hb_font_get_scale) (HL_CFFIPointer* font, Vector2* out) { int xScale = 0; int yScale = 0; hb_font_get_scale ((hb_font_t*)font->ptr, &xScale, &yScale); out->x = xScale; out->y = yScale; return out; } int lime_hb_font_glyph_from_string (value font, HxString s) { hb_codepoint_t glyph = 0; if (hb_font_glyph_from_string ((hb_font_t*)val_data (font), s.c_str (), s.length, &glyph)) { return glyph; } else { return -1; } } HL_PRIM int HL_NAME(hl_hb_font_glyph_from_string) (HL_CFFIPointer* font, hl_vstring* s) { hb_codepoint_t glyph = 0; if (hb_font_glyph_from_string ((hb_font_t*)font->ptr, s ? hl_to_utf8 (s->bytes) : NULL, s ? s->length : 0, &glyph)) { return glyph; } else { return -1; } } value lime_hb_font_glyph_to_string (value font, int codepoint) { char result[1024]; hb_font_glyph_to_string ((hb_font_t*)val_data (font), (hb_codepoint_t)codepoint, result, 1024); return alloc_string (result); } HL_PRIM vbyte* HL_NAME(hl_hb_font_glyph_to_string) (HL_CFFIPointer* font, int codepoint) { char* result = (char*)malloc (1024); hb_font_glyph_to_string ((hb_font_t*)font->ptr, (hb_codepoint_t)codepoint, result, 1024); int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); return (vbyte*)_result; } bool lime_hb_font_is_immutable (value font) { return hb_font_is_immutable ((hb_font_t*)val_data (font)); } HL_PRIM bool HL_NAME(hl_hb_font_is_immutable) (HL_CFFIPointer* font) { return hb_font_is_immutable ((hb_font_t*)font->ptr); } void lime_hb_font_make_immutable (value font) { hb_font_make_immutable ((hb_font_t*)val_data (font)); } HL_PRIM void HL_NAME(hl_hb_font_make_immutable) (HL_CFFIPointer* font) { hb_font_make_immutable ((hb_font_t*)font->ptr); } void lime_hb_font_set_ppem (value font, int xppem, int yppem) { hb_font_set_ppem ((hb_font_t*)val_data (font), xppem, yppem); } HL_PRIM void HL_NAME(hl_hb_font_set_ppem) (HL_CFFIPointer* font, int xppem, int yppem) { hb_font_set_ppem ((hb_font_t*)font->ptr, xppem, yppem); } void lime_hb_font_set_scale (value font, int xScale, int yScale) { hb_font_set_scale ((hb_font_t*)val_data (font), xScale, yScale); } HL_PRIM void HL_NAME(hl_hb_font_set_scale) (HL_CFFIPointer* font, int xScale, int yScale) { hb_font_set_scale ((hb_font_t*)font->ptr, xScale, yScale); } void lime_hb_font_subtract_glyph_origin_for_direction (value font, int glyph, int direction, int x, int y) { hb_font_subtract_glyph_origin_for_direction ((hb_font_t*)val_data (font), (hb_codepoint_t)glyph, (hb_direction_t)direction, &x, &y); } HL_PRIM void HL_NAME(hl_hb_font_subtract_glyph_origin_for_direction) (HL_CFFIPointer* font, int glyph, int direction, int x, int y) { hb_font_subtract_glyph_origin_for_direction ((hb_font_t*)font->ptr, (hb_codepoint_t)glyph, (hb_direction_t)direction, &x, &y); } value lime_hb_ft_font_create (value font) { Font* _font = (Font*)val_data (font); hb_font_t* __font = hb_ft_font_create ((FT_Face)_font->face, NULL); return CFFIPointer (__font, gc_hb_font); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_ft_font_create) (HL_CFFIPointer* font) { Font* _font = (Font*)font->ptr; hb_font_t* __font = hb_ft_font_create ((FT_Face)_font->face, NULL); return HLCFFIPointer (__font, (hl_finalizer)hl_gc_hb_font); } value lime_hb_ft_font_create_referenced (value font) { Font* _font = (Font*)val_data (font); hb_font_t* __font = hb_ft_font_create_referenced ((FT_Face)_font->face); return CFFIPointer (__font, gc_hb_font); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_ft_font_create_referenced) (HL_CFFIPointer* font) { Font* _font = (Font*)font->ptr; hb_font_t* __font = hb_ft_font_create_referenced ((FT_Face)_font->face); return HLCFFIPointer (__font, (hl_finalizer)hl_gc_hb_font); } int lime_hb_ft_font_get_load_flags (value font) { return hb_ft_font_get_load_flags ((hb_font_t*)val_data (font)); } HL_PRIM int HL_NAME(hl_hb_ft_font_get_load_flags) (HL_CFFIPointer* font) { return hb_ft_font_get_load_flags ((hb_font_t*)font->ptr); } void lime_hb_ft_font_set_load_flags (value font, int loadFlags) { hb_ft_font_set_load_flags ((hb_font_t*)val_data (font), loadFlags); } HL_PRIM void HL_NAME(hl_hb_ft_font_set_load_flags) (HL_CFFIPointer* font, int loadFlags) { hb_ft_font_set_load_flags ((hb_font_t*)font->ptr, loadFlags); } value lime_hb_language_from_string (HxString str) { hb_language_t language = hb_language_from_string (str.c_str (), str.length); return CFFIPointer ((void*)language); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_language_from_string) (hl_vstring* str) { hb_language_t language = hb_language_from_string (str ? hl_to_utf8 (str->bytes) : NULL, str ? str->length : 0); return HLCFFIPointer ((void*)language); } value lime_hb_language_get_default () { hb_language_t language = hb_language_get_default (); return CFFIPointer ((void*)language); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_language_get_default) () { hb_language_t language = hb_language_get_default (); return HLCFFIPointer ((void*)language); } value lime_hb_language_to_string (value language) { hb_language_t _language = (hb_language_t)val_data (language); const char* result = hb_language_to_string (_language); return alloc_string (result); } HL_PRIM vbyte* HL_NAME(hl_hb_language_to_string) (HL_CFFIPointer* language) { hb_language_t _language = (hb_language_t)language->ptr; const char* result = hb_language_to_string (_language); int length = strlen (result); char* _result = (char*)malloc (length + 1); strcpy (_result, result); return (vbyte*)_result; } bool lime_hb_segment_properties_equal (value a, value b) { return hb_segment_properties_equal ((hb_segment_properties_t*)val_data (a), (hb_segment_properties_t*)val_data (b)); } HL_PRIM bool HL_NAME(hl_hb_segment_properties_equal) (HL_CFFIPointer* a, HL_CFFIPointer* b) { return hb_segment_properties_equal ((hb_segment_properties_t*)a->ptr, (hb_segment_properties_t*)b->ptr); } int lime_hb_segment_properties_hash (value p) { return hb_segment_properties_hash ((hb_segment_properties_t*)val_data (p)); } HL_PRIM int HL_NAME(hl_hb_segment_properties_hash) (HL_CFFIPointer* p) { return hb_segment_properties_hash ((hb_segment_properties_t*)p->ptr); } void lime_hb_set_add (value set, int codepoint) { hb_set_add ((hb_set_t*)val_data (set), (hb_codepoint_t)codepoint); } HL_PRIM void HL_NAME(hl_hb_set_add) (HL_CFFIPointer* set, int codepoint) { hb_set_add ((hb_set_t*)set->ptr, (hb_codepoint_t)codepoint); } void lime_hb_set_add_range (value set, int first, int last) { hb_set_add_range ((hb_set_t*)val_data (set), (hb_codepoint_t)first, (hb_codepoint_t)last); } HL_PRIM void HL_NAME(hl_hb_set_add_range) (HL_CFFIPointer* set, int first, int last) { hb_set_add_range ((hb_set_t*)set->ptr, (hb_codepoint_t)first, (hb_codepoint_t)last); } bool lime_hb_set_allocation_successful (value set) { return hb_set_allocation_successful ((hb_set_t*)val_data (set)); } HL_PRIM bool HL_NAME(hl_hb_set_allocation_successful) (HL_CFFIPointer* set) { return hb_set_allocation_successful ((hb_set_t*)set->ptr); } void lime_hb_set_clear (value set) { hb_set_clear ((hb_set_t*)val_data (set)); } HL_PRIM void HL_NAME(hl_hb_set_clear) (HL_CFFIPointer* set) { hb_set_clear ((hb_set_t*)set->ptr); } value lime_hb_set_create () { hb_set_t* set = hb_set_create (); return CFFIPointer (set, gc_hb_set); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_set_create) () { hb_set_t* set = hb_set_create (); return HLCFFIPointer (set, (hl_finalizer)hl_gc_hb_set); } void lime_hb_set_del (value set, int codepoint) { hb_set_del ((hb_set_t*)val_data (set), (hb_codepoint_t)codepoint); } HL_PRIM void HL_NAME(hl_hb_set_del) (HL_CFFIPointer* set, int codepoint) { hb_set_del ((hb_set_t*)set->ptr, (hb_codepoint_t)codepoint); } void lime_hb_set_del_range (value set, int first, int last) { hb_set_del_range ((hb_set_t*)val_data (set), (hb_codepoint_t)first, (hb_codepoint_t)last); } HL_PRIM void HL_NAME(hl_hb_set_del_range) (HL_CFFIPointer* set, int first, int last) { hb_set_del_range ((hb_set_t*)set->ptr, (hb_codepoint_t)first, (hb_codepoint_t)last); } value lime_hb_set_get_empty () { hb_set_t* set = hb_set_get_empty (); return CFFIPointer (set, gc_hb_set); } HL_PRIM HL_CFFIPointer* HL_NAME(hl_hb_set_get_empty) () { hb_set_t* set = hb_set_get_empty (); return HLCFFIPointer (set, (hl_finalizer)hl_gc_hb_set); } int lime_hb_set_get_max (value set) { return hb_set_get_max ((hb_set_t*)val_data (set)); } HL_PRIM int HL_NAME(hl_hb_set_get_max) (HL_CFFIPointer* set) { return hb_set_get_max ((hb_set_t*)set->ptr); } int lime_hb_set_get_min (value set) { return hb_set_get_min ((hb_set_t*)val_data (set)); } HL_PRIM int HL_NAME(hl_hb_set_get_min) (HL_CFFIPointer* set) { return hb_set_get_min ((hb_set_t*)set->ptr); } int lime_hb_set_get_population (value set) { return hb_set_get_population ((hb_set_t*)val_data (set)); } HL_PRIM int HL_NAME(hl_hb_set_get_population) (HL_CFFIPointer* set) { return hb_set_get_population ((hb_set_t*)set->ptr); } bool lime_hb_set_has (value set, int codepoint) { return hb_set_has ((hb_set_t*)val_data (set), (hb_codepoint_t)codepoint); } HL_PRIM bool HL_NAME(hl_hb_set_has) (HL_CFFIPointer* set, int codepoint) { return hb_set_has ((hb_set_t*)set->ptr, (hb_codepoint_t)codepoint); } void lime_hb_set_intersect (value set, value other) { return hb_set_intersect ((hb_set_t*)val_data (set), (hb_set_t*)val_data (other)); } HL_PRIM void HL_NAME(hl_hb_set_intersect) (HL_CFFIPointer* set, HL_CFFIPointer* other) { return hb_set_intersect ((hb_set_t*)set->ptr, (hb_set_t*)other->ptr); } void lime_hb_set_invert (value set) { hb_set_invert ((hb_set_t*)val_data (set)); } HL_PRIM void HL_NAME(hl_hb_set_invert) (HL_CFFIPointer* set) { hb_set_invert ((hb_set_t*)set->ptr); } bool lime_hb_set_is_empty (value set) { return hb_set_is_empty ((hb_set_t*)val_data (set)); } HL_PRIM bool HL_NAME(hl_hb_set_is_empty) (HL_CFFIPointer* set) { return hb_set_is_empty ((hb_set_t*)set->ptr); } bool lime_hb_set_is_equal (value set, value other) { return hb_set_is_equal ((hb_set_t*)val_data (set), (hb_set_t*)val_data (other)); } HL_PRIM bool HL_NAME(hl_hb_set_is_equal) (HL_CFFIPointer* set, HL_CFFIPointer* other) { return hb_set_is_equal ((hb_set_t*)set->ptr, (hb_set_t*)other->ptr); } int lime_hb_set_next (value set) { hb_codepoint_t codepoint = 0; if (hb_set_next ((hb_set_t*)val_data (set), &codepoint)) { return codepoint; } else { return -1; } } HL_PRIM int HL_NAME(hl_hb_set_next) (HL_CFFIPointer* set) { hb_codepoint_t codepoint = 0; if (hb_set_next ((hb_set_t*)set->ptr, &codepoint)) { return codepoint; } else { return -1; } } value lime_hb_set_next_range (value set) { hb_codepoint_t first = 0; hb_codepoint_t last = 0; if (hb_set_next_range ((hb_set_t*)val_data (set), &first, &last)) { Vector2 result = Vector2 (first, last); return result.Value (); } else { return alloc_null (); } } HL_PRIM Vector2* HL_NAME(hl_hb_set_next_range) (HL_CFFIPointer* set, Vector2* out) { hb_codepoint_t first = 0; hb_codepoint_t last = 0; if (hb_set_next_range ((hb_set_t*)set->ptr, &first, &last)) { out->x = first; out->y = last; return out; } else { return NULL; } } void lime_hb_set_set (value set, value other) { return hb_set_set ((hb_set_t*)val_data (set), (hb_set_t*)val_data (other)); } HL_PRIM void HL_NAME(hl_hb_set_set) (HL_CFFIPointer* set, HL_CFFIPointer* other) { return hb_set_set ((hb_set_t*)set->ptr, (hb_set_t*)other->ptr); } void lime_hb_set_subtract (value set, value other) { return hb_set_subtract ((hb_set_t*)val_data (set), (hb_set_t*)val_data (other)); } HL_PRIM void HL_NAME(hl_hb_set_subtract) (HL_CFFIPointer* set, HL_CFFIPointer* other) { return hb_set_subtract ((hb_set_t*)set->ptr, (hb_set_t*)other->ptr); } void lime_hb_set_symmetric_difference (value set, value other) { return hb_set_symmetric_difference ((hb_set_t*)val_data (set), (hb_set_t*)val_data (other)); } HL_PRIM void HL_NAME(hl_hb_set_symmetric_difference) (HL_CFFIPointer* set, HL_CFFIPointer* other) { return hb_set_symmetric_difference ((hb_set_t*)set->ptr, (hb_set_t*)other->ptr); } void lime_hb_set_union (value set, value other) { return hb_set_union ((hb_set_t*)val_data (set), (hb_set_t*)val_data (other)); } HL_PRIM void HL_NAME(hl_hb_set_union) (HL_CFFIPointer* set, HL_CFFIPointer* other) { return hb_set_union ((hb_set_t*)set->ptr, (hb_set_t*)other->ptr); } void lime_hb_shape (value font, value buffer, value features) { int length = !val_is_null (features) ? val_array_size (features) : 0; double* _features = !val_is_null (features) ? val_array_double (features) : NULL; hb_shape ((hb_font_t*)val_data (font), (hb_buffer_t*)val_data (buffer), (const hb_feature_t*)(uintptr_t*)_features, length); } HL_PRIM void HL_NAME(hl_hb_shape) (HL_CFFIPointer* font, HL_CFFIPointer* buffer, hl_varray* features) { int length = features ? features->size : 0; double* _features = features ? hl_aptr (features, double) : NULL; hb_shape ((hb_font_t*)font->ptr, (hb_buffer_t*)buffer->ptr, (const hb_feature_t*)(uintptr_t*)_features, length); } //hb_blob_destroy //hb_blob_get_user_data //hb_blob_reference //hb_blob_set_user_data //hb_buffer_deserialize_glyphs //hb_buffer_destroy //hb_buffer_get_unicode_funcs //hb_buffer_get_user_data //hb_buffer_reference //hb_buffer_serialize_glyphs //hb_buffer_set_unicode_funcs //hb_buffer_set_user_data //hb_face_create_for_tables //hb_face_destroy //hb_face_get_user_data //hb_face_reference //hb_face_set_user_data //hb_font_destroy //hb_font_get_glyph_contour_point_for_origin //hb_font_get_glyph_extents_for_origin //hb_font_get_user_data //hb_font_reference //hb_font_set_user_data //hb_ft_face_create //hb_ft_face_create_cached //hb_ft_face_create_referenced //hb_ft_font_create //hb_ft_font_get_face //hb_ft_font_set_funcs //hb_set_destroy //hb_set_get_user_data //hb_set_reference //hb_set_set_user_data //hb_shape_full DEFINE_PRIME3 (lime_hb_blob_create); DEFINE_PRIME3 (lime_hb_blob_create_sub_blob); DEFINE_PRIME1 (lime_hb_blob_get_data); DEFINE_PRIME1 (lime_hb_blob_get_data_writable); DEFINE_PRIME0 (lime_hb_blob_get_empty); DEFINE_PRIME1 (lime_hb_blob_get_length); DEFINE_PRIME1 (lime_hb_blob_is_immutable); DEFINE_PRIME1v (lime_hb_blob_make_immutable); DEFINE_PRIME3v (lime_hb_buffer_add); DEFINE_PRIME4v (lime_hb_buffer_add_hxstring); DEFINE_PRIME5v (lime_hb_buffer_add_codepoints); DEFINE_PRIME4v (lime_hb_buffer_add_utf8); DEFINE_PRIME5v (lime_hb_buffer_add_utf16); DEFINE_PRIME5v (lime_hb_buffer_add_utf32); DEFINE_PRIME1 (lime_hb_buffer_allocation_successful); DEFINE_PRIME1v (lime_hb_buffer_clear_contents); DEFINE_PRIME0 (lime_hb_buffer_create); DEFINE_PRIME1 (lime_hb_buffer_get_cluster_level); DEFINE_PRIME1 (lime_hb_buffer_get_content_type); DEFINE_PRIME1 (lime_hb_buffer_get_direction); DEFINE_PRIME0 (lime_hb_buffer_get_empty); DEFINE_PRIME1 (lime_hb_buffer_get_flags); DEFINE_PRIME2 (lime_hb_buffer_get_glyph_infos); DEFINE_PRIME2 (lime_hb_buffer_get_glyph_positions); DEFINE_PRIME1 (lime_hb_buffer_get_language); DEFINE_PRIME1 (lime_hb_buffer_get_length); DEFINE_PRIME1 (lime_hb_buffer_get_replacement_codepoint); DEFINE_PRIME1 (lime_hb_buffer_get_script); DEFINE_PRIME2v (lime_hb_buffer_get_segment_properties); DEFINE_PRIME1v (lime_hb_buffer_guess_segment_properties); DEFINE_PRIME1v (lime_hb_buffer_normalize_glyphs); DEFINE_PRIME2 (lime_hb_buffer_preallocate); DEFINE_PRIME1v (lime_hb_buffer_reset); DEFINE_PRIME1v (lime_hb_buffer_reverse); DEFINE_PRIME1v (lime_hb_buffer_reverse_clusters); DEFINE_PRIME1 (lime_hb_buffer_serialize_format_from_string); DEFINE_PRIME1 (lime_hb_buffer_serialize_format_to_string); DEFINE_PRIME0 (lime_hb_buffer_serialize_list_formats); DEFINE_PRIME2v (lime_hb_buffer_set_cluster_level); DEFINE_PRIME2v (lime_hb_buffer_set_content_type); DEFINE_PRIME2v (lime_hb_buffer_set_direction); DEFINE_PRIME2v (lime_hb_buffer_set_flags); DEFINE_PRIME2v (lime_hb_buffer_set_language); DEFINE_PRIME2 (lime_hb_buffer_set_length); DEFINE_PRIME2v (lime_hb_buffer_set_replacement_codepoint); DEFINE_PRIME2v (lime_hb_buffer_set_script); DEFINE_PRIME2v (lime_hb_buffer_set_segment_properties); DEFINE_PRIME2 (lime_hb_face_create); DEFINE_PRIME0 (lime_hb_face_get_empty); DEFINE_PRIME1 (lime_hb_face_get_glyph_count); DEFINE_PRIME1 (lime_hb_face_get_index); DEFINE_PRIME1 (lime_hb_face_get_upem); DEFINE_PRIME1 (lime_hb_face_is_immutable); DEFINE_PRIME1v (lime_hb_face_make_immutable); DEFINE_PRIME1 (lime_hb_face_reference_blob); DEFINE_PRIME2 (lime_hb_face_reference_table); DEFINE_PRIME2v (lime_hb_face_set_index); DEFINE_PRIME2v (lime_hb_face_set_glyph_count); DEFINE_PRIME2v (lime_hb_face_set_upem); DEFINE_PRIME1 (lime_hb_feature_from_string); DEFINE_PRIME1 (lime_hb_feature_to_string); DEFINE_PRIME5v (lime_hb_font_add_glyph_origin_for_direction); DEFINE_PRIME1 (lime_hb_font_create); DEFINE_PRIME1 (lime_hb_font_create_sub_font); DEFINE_PRIME0 (lime_hb_font_get_empty); DEFINE_PRIME1 (lime_hb_font_get_face); DEFINE_PRIME3 (lime_hb_font_get_glyph_advance_for_direction); DEFINE_PRIME4 (lime_hb_font_get_glyph_kerning_for_direction); DEFINE_PRIME3 (lime_hb_font_get_glyph_origin_for_direction); DEFINE_PRIME1 (lime_hb_font_get_parent); DEFINE_PRIME1 (lime_hb_font_get_ppem); DEFINE_PRIME1 (lime_hb_font_get_scale); DEFINE_PRIME2 (lime_hb_font_glyph_from_string); DEFINE_PRIME2 (lime_hb_font_glyph_to_string); DEFINE_PRIME1 (lime_hb_font_is_immutable); DEFINE_PRIME1v (lime_hb_font_make_immutable); DEFINE_PRIME3v (lime_hb_font_set_ppem); DEFINE_PRIME3v (lime_hb_font_set_scale); DEFINE_PRIME5v (lime_hb_font_subtract_glyph_origin_for_direction); DEFINE_PRIME1 (lime_hb_ft_font_create); DEFINE_PRIME1 (lime_hb_ft_font_create_referenced); DEFINE_PRIME1 (lime_hb_ft_font_get_load_flags); DEFINE_PRIME2v (lime_hb_ft_font_set_load_flags); DEFINE_PRIME1 (lime_hb_language_from_string); DEFINE_PRIME0 (lime_hb_language_get_default); DEFINE_PRIME1 (lime_hb_language_to_string); DEFINE_PRIME2 (lime_hb_segment_properties_equal); DEFINE_PRIME1 (lime_hb_segment_properties_hash); DEFINE_PRIME2v (lime_hb_set_add); DEFINE_PRIME3v (lime_hb_set_add_range); DEFINE_PRIME1 (lime_hb_set_allocation_successful); DEFINE_PRIME1v (lime_hb_set_clear); DEFINE_PRIME0 (lime_hb_set_create); DEFINE_PRIME2v (lime_hb_set_del); DEFINE_PRIME3v (lime_hb_set_del_range); DEFINE_PRIME0 (lime_hb_set_get_empty); DEFINE_PRIME1 (lime_hb_set_get_max); DEFINE_PRIME1 (lime_hb_set_get_min); DEFINE_PRIME1 (lime_hb_set_get_population); DEFINE_PRIME2 (lime_hb_set_has); DEFINE_PRIME2v (lime_hb_set_intersect); DEFINE_PRIME1v (lime_hb_set_invert); DEFINE_PRIME1 (lime_hb_set_is_empty); DEFINE_PRIME2 (lime_hb_set_is_equal); DEFINE_PRIME1 (lime_hb_set_next); DEFINE_PRIME1 (lime_hb_set_next_range); DEFINE_PRIME2v (lime_hb_set_set); DEFINE_PRIME2v (lime_hb_set_subtract); DEFINE_PRIME2v (lime_hb_set_symmetric_difference); DEFINE_PRIME2v (lime_hb_set_union); DEFINE_PRIME3v (lime_hb_shape); #define _TBYTES _OBJ (_I32 _BYTES) #define _TCFFIPOINTER _DYN #define _TVECTOR2 _OBJ (_F64 _F64) DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_blob_create, _F64 _I32 _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_blob_create_sub_blob, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_F64, hl_hb_blob_get_data, _TCFFIPOINTER); DEFINE_HL_PRIM (_F64, hl_hb_blob_get_data_writable, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_blob_get_empty, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_hb_blob_get_length, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_hb_blob_is_immutable, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_blob_make_immutable, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_add, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_add_hxstring, _TCFFIPOINTER _STRING _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_add_codepoints, _TCFFIPOINTER _F64 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_add_utf8, _TCFFIPOINTER _STRING _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_add_utf16, _TCFFIPOINTER _F64 _I32 _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_add_utf32, _TCFFIPOINTER _F64 _I32 _I32 _I32); DEFINE_HL_PRIM (_BOOL, hl_hb_buffer_allocation_successful, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_clear_contents, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_buffer_create, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_hb_buffer_get_cluster_level, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_buffer_get_content_type, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_buffer_get_direction, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_buffer_get_empty, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_hb_buffer_get_flags, _TCFFIPOINTER); DEFINE_HL_PRIM (_TBYTES, hl_hb_buffer_get_glyph_infos, _TCFFIPOINTER _TBYTES); DEFINE_HL_PRIM (_TBYTES, hl_hb_buffer_get_glyph_positions, _TCFFIPOINTER _TBYTES); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_buffer_get_language, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_buffer_get_length, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_buffer_get_replacement_codepoint, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_buffer_get_script, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_get_segment_properties, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_guess_segment_properties, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_normalize_glyphs, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_hb_buffer_preallocate, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_reset, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_reverse, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_reverse_clusters, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_buffer_serialize_format_from_string, _STRING); DEFINE_HL_PRIM (_BYTES, hl_hb_buffer_serialize_format_to_string, _I32); DEFINE_HL_PRIM (_ARR, hl_hb_buffer_serialize_list_formats, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_set_cluster_level, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_set_content_type, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_set_direction, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_set_flags, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_set_language, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_hb_buffer_set_length, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_set_replacement_codepoint, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_set_script, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_buffer_set_segment_properties, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_face_create, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_face_get_empty, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_hb_face_get_glyph_count, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_face_get_index, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_face_get_upem, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_hb_face_is_immutable, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_face_make_immutable, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_face_reference_blob, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_face_reference_table, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_face_set_glyph_count, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_face_set_index, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_face_set_upem, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_feature_from_string, _STRING); DEFINE_HL_PRIM (_BYTES, hl_hb_feature_to_string, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_font_add_glyph_origin_for_direction, _TCFFIPOINTER _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_font_create, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_font_create_sub_font, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_font_get_empty, _NO_ARG); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_font_get_face, _TCFFIPOINTER); DEFINE_HL_PRIM (_TVECTOR2, hl_hb_font_get_glyph_advance_for_direction, _TCFFIPOINTER _I32 _I32 _TVECTOR2); DEFINE_HL_PRIM (_TVECTOR2, hl_hb_font_get_glyph_kerning_for_direction, _TCFFIPOINTER _I32 _I32 _I32 _TVECTOR2); DEFINE_HL_PRIM (_TVECTOR2, hl_hb_font_get_glyph_origin_for_direction, _TCFFIPOINTER _I32 _I32 _TVECTOR2); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_font_get_parent, _TCFFIPOINTER); DEFINE_HL_PRIM (_TVECTOR2, hl_hb_font_get_ppem, _TCFFIPOINTER _TVECTOR2); DEFINE_HL_PRIM (_TVECTOR2, hl_hb_font_get_scale, _TCFFIPOINTER _TVECTOR2); DEFINE_HL_PRIM (_I32, hl_hb_font_glyph_from_string, _TCFFIPOINTER _STRING); DEFINE_HL_PRIM (_BYTES, hl_hb_font_glyph_to_string, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_BOOL, hl_hb_font_is_immutable, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_font_make_immutable, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_font_set_ppem, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_hb_font_set_scale, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_hb_font_subtract_glyph_origin_for_direction, _TCFFIPOINTER _I32 _I32 _I32 _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_ft_font_create, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_ft_font_create_referenced, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_ft_font_get_load_flags, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_ft_font_set_load_flags, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_language_from_string, _STRING); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_language_get_default, _NO_ARG); DEFINE_HL_PRIM (_BYTES, hl_hb_language_to_string, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_hb_segment_properties_equal, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_segment_properties_hash, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_set_add, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_set_add_range, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_BOOL, hl_hb_set_allocation_successful, _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_set_clear, _TCFFIPOINTER); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_set_create, _NO_ARG); DEFINE_HL_PRIM (_VOID, hl_hb_set_del, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_set_del_range, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_TCFFIPOINTER, hl_hb_set_get_empty, _NO_ARG); DEFINE_HL_PRIM (_I32, hl_hb_set_get_max, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_set_get_min, _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_set_get_population, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_hb_set_has, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_VOID, hl_hb_set_intersect, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_set_invert, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_hb_set_is_empty, _TCFFIPOINTER); DEFINE_HL_PRIM (_BOOL, hl_hb_set_is_equal, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_I32, hl_hb_set_next, _TCFFIPOINTER); DEFINE_HL_PRIM (_TVECTOR2, hl_hb_set_next_range, _TCFFIPOINTER _TVECTOR2); DEFINE_HL_PRIM (_VOID, hl_hb_set_set, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_set_subtract, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_set_symmetric_difference, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_set_union, _TCFFIPOINTER _TCFFIPOINTER); DEFINE_HL_PRIM (_VOID, hl_hb_shape, _TCFFIPOINTER _TCFFIPOINTER _ARR); } extern "C" int lime_harfbuzz_register_prims () { return 0; } ================================================ FILE: project/src/ui/DropEvent.cpp ================================================ #include #include namespace lime { ValuePointer* DropEvent::callback = 0; ValuePointer* DropEvent::eventObject = 0; static int id_file; static int id_type; static bool init = false; DropEvent::DropEvent () { file = 0; type = DROP_FILE; } void DropEvent::Dispatch (DropEvent* event) { if (DropEvent::callback) { if (DropEvent::eventObject->IsCFFIValue ()) { if (!init) { id_file = val_id ("file"); id_type = val_id ("type"); init = true; } value object = (value)DropEvent::eventObject->Get (); alloc_field (object, id_file, alloc_string ((const char*)event->file)); alloc_field (object, id_type, alloc_int (event->type)); } else { DropEvent* eventObject = (DropEvent*)DropEvent::eventObject->Get (); int length = strlen ((const char*)event->file); char* file = (char*)malloc (length + 1); strcpy (file, (const char*)event->file); eventObject->file = (vbyte*)file; eventObject->type = event->type; } DropEvent::callback->Call (); } } } ================================================ FILE: project/src/ui/FileDialog.cpp ================================================ #include #include #include #include #include #include namespace lime { std::string* wstring_to_string (std::wstring* source) { if (!source) return NULL; int size = std::wcslen (source->c_str ()); char* temp = (char*)malloc (size + 1); std::wcstombs (temp, source->c_str (), size); temp[size] = '\0'; std::string* data = new std::string (temp); free (temp); return data; } std::wstring* FileDialog::OpenDirectory (std::wstring* title, std::wstring* filter, std::wstring* defaultPath) { // TODO: Filter? #ifdef HX_WINDOWS const wchar_t* path = tinyfd_selectFolderDialogW (title ? title->c_str () : 0, defaultPath ? defaultPath->c_str () : 0); if (path && std::wcslen(path) > 0) { std::wstring* _path = new std::wstring (path); return _path; } #else std::string* _title = wstring_to_string (title); //std::string* _filter = wstring_to_string (filter); std::string* _defaultPath = wstring_to_string (defaultPath); const char* path = tinyfd_selectFolderDialog (_title ? _title->c_str () : NULL, _defaultPath ? _defaultPath->c_str () : NULL); if (_title) delete _title; //if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (path && std::strlen(path) > 0) { std::string _path = std::string (path); std::wstring* __path = new std::wstring (_path.begin (), _path.end ()); return __path; } #endif return 0; } std::wstring* FileDialog::OpenFile (std::wstring* title, std::wstring* filter, std::wstring* defaultPath) { #ifdef HX_WINDOWS std::vector filters_vec; if (filter) { std::wstring temp (L"*."); std::wstring line; std::wstringstream ss(*filter); while(std::getline(ss, line, L',')) { filters_vec.push_back(temp + line); } } const int numFilters = filter ? filters_vec.size() : 1; const wchar_t **filters = new const wchar_t*[numFilters]; if (filter && numFilters > 0) { for (int index = 0; index < numFilters; index++) { filters[index] = const_cast(filters_vec[index].c_str()); } } else { filters[0] = NULL; } const wchar_t* path = tinyfd_openFileDialogW (title ? title->c_str () : 0, defaultPath ? defaultPath->c_str () : 0, filter ? numFilters : 0, filter ? filters : NULL, NULL, 0); delete[] filters; if (path && std::wcslen(path) > 0) { std::wstring* _path = new std::wstring (path); return _path; } #else std::string* _title = wstring_to_string (title); std::string* _filter = wstring_to_string (filter); std::string* _defaultPath = wstring_to_string (defaultPath); std::vector filters_vec; if (_filter) { std::string line; std::stringstream ss(*_filter); while(std::getline(ss, line, ',')) { line.insert (0, "*."); filters_vec.push_back(line); } } const int numFilters = _filter ? filters_vec.size() : 1; const char **filters = new const char*[numFilters]; if (_filter && numFilters > 0) { for (int index = 0; index < numFilters; index++) { filters[index] = const_cast(filters_vec[index].c_str()); } } else { filters[0] = NULL; } const char* path = tinyfd_openFileDialog (_title ? _title->c_str () : NULL, _defaultPath ? _defaultPath->c_str () : NULL, _filter ? numFilters : 0, _filter ? filters : NULL, NULL, 0); delete[] filters; if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (path && std::strlen(path) > 0) { std::string _path = std::string (path); std::wstring* __path = new std::wstring (_path.begin (), _path.end ()); return __path; } #endif return 0; } void FileDialog::OpenFiles (std::vector* files, std::wstring* title, std::wstring* filter, std::wstring* defaultPath) { std::wstring* __paths = 0; #ifdef HX_WINDOWS std::vector filters_vec; if (filter) { std::wstring temp (L"*."); std::wstring line; std::wstringstream ss(*filter); while(std::getline(ss, line, L',')) { filters_vec.push_back(temp + line); } } const int numFilters = filter ? filters_vec.size() : 1; const wchar_t **filters = new const wchar_t*[numFilters]; if (filter && numFilters > 0) { for (int index = 0; index < numFilters; index++) { filters[index] = const_cast(filters_vec[index].c_str()); } } else { filters[0] = NULL; } const wchar_t* paths = tinyfd_openFileDialogW (title ? title->c_str () : 0, defaultPath ? defaultPath->c_str () : 0, filter ? numFilters : 0, filter ? filters : NULL, NULL, 1); delete[] filters; if (paths) { __paths = new std::wstring (paths); } #else std::string* _title = wstring_to_string (title); std::string* _filter = wstring_to_string (filter); std::string* _defaultPath = wstring_to_string (defaultPath); std::vector filters_vec; if (_filter) { std::string line; std::stringstream ss(*_filter); while(std::getline(ss, line, ',')) { line.insert (0, "*."); filters_vec.push_back(line); } } const int numFilters = _filter ? filters_vec.size() : 1; const char **filters = new const char*[numFilters]; if (_filter && numFilters > 0) { for (int index = 0; index < numFilters; index++) { filters[index] = const_cast(filters_vec[index].c_str()); } } else { filters[0] = NULL; } const char* paths = tinyfd_openFileDialog (_title ? _title->c_str () : NULL, _defaultPath ? _defaultPath->c_str () : NULL, _filter ? numFilters : 0, _filter ? filters : NULL, NULL, 1); delete[] filters; if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (paths) { std::string _paths = std::string (paths); __paths = new std::wstring (_paths.begin (), _paths.end ()); } #endif if (__paths) { std::wstring sep = L"|"; std::size_t start = 0, end = 0; while ((end = __paths->find (sep, start)) != std::wstring::npos) { files->push_back (new std::wstring (__paths->substr (start, end - start).c_str ())); start = end + 1; } files->push_back (new std::wstring (__paths->substr (start).c_str ())); } } std::wstring* FileDialog::SaveFile (std::wstring* title, std::wstring* filter, std::wstring* defaultPath) { #ifdef HX_WINDOWS std::wstring temp (L"*."); const wchar_t* filters[] = { filter ? (temp + *filter).c_str () : NULL }; const wchar_t* path = tinyfd_saveFileDialogW (title ? title->c_str () : 0, defaultPath ? defaultPath->c_str () : 0, filter ? 1 : 0, filter ? filters : NULL, NULL); if (path && std::wcslen(path) > 0) { std::wstring* _path = new std::wstring (path); return _path; } #else std::string* _title = wstring_to_string (title); std::string* _filter = wstring_to_string (filter); std::string* _defaultPath = wstring_to_string (defaultPath); const char* filters[] = { NULL }; if (_filter) { _filter->insert (0, "*."); filters[0] = _filter->c_str (); } const char* path = tinyfd_saveFileDialog (_title ? _title->c_str () : NULL, _defaultPath ? _defaultPath->c_str () : NULL, _filter ? 1 : 0, _filter ? filters : NULL, NULL); if (_title) delete _title; if (_filter) delete _filter; if (_defaultPath) delete _defaultPath; if (path && std::strlen(path) > 0) { std::string _path = std::string (path); std::wstring* __path = new std::wstring (_path.begin (), _path.end ()); return __path; } #endif return 0; } } ================================================ FILE: project/src/ui/GamepadEvent.cpp ================================================ #include #include namespace lime { ValuePointer* GamepadEvent::callback = 0; ValuePointer* GamepadEvent::eventObject = 0; static double id_axis; static int id_button; static int id_id; static int id_type; static int id_value; static bool init = false; GamepadEvent::GamepadEvent () { axis = 0; axisValue = 0; button = 0; id = 0; type = GAMEPAD_AXIS_MOVE; } void GamepadEvent::Dispatch (GamepadEvent* event) { if (GamepadEvent::callback) { if (GamepadEvent::eventObject->IsCFFIValue ()) { if (!init) { id_axis = val_id ("axis"); id_button = val_id ("button"); id_id = val_id ("id"); id_type = val_id ("type"); id_value = val_id ("axisValue"); init = true; } value object = (value)GamepadEvent::eventObject->Get (); alloc_field (object, id_axis, alloc_int (event->axis)); alloc_field (object, id_button, alloc_int (event->button)); alloc_field (object, id_id, alloc_int (event->id)); alloc_field (object, id_type, alloc_int (event->type)); alloc_field (object, id_value, alloc_float (event->axisValue)); } else { GamepadEvent* eventObject = (GamepadEvent*)GamepadEvent::eventObject->Get (); eventObject->axis = event->axis; eventObject->button = event->button; eventObject->id = event->id; eventObject->type = event->type; eventObject->axisValue = event->axisValue; } GamepadEvent::callback->Call (); } } } ================================================ FILE: project/src/ui/Haptic.mm ================================================ #include #import namespace lime { void Haptic::Vibrate (int period, int duration) { AudioServicesPlayAlertSound (kSystemSoundID_Vibrate); } } ================================================ FILE: project/src/ui/JoystickEvent.cpp ================================================ #include #include namespace lime { ValuePointer* JoystickEvent::callback = 0; ValuePointer* JoystickEvent::eventObject = 0; static int id_id; static int id_index; static int id_type; static int id_value; static int id_x; static int id_y; static bool init = false; JoystickEvent::JoystickEvent () { id = 0; index = 0; eventValue = 0; x = 0; y = 0; type = JOYSTICK_AXIS_MOVE; } void JoystickEvent::Dispatch (JoystickEvent* event) { if (JoystickEvent::callback) { if (JoystickEvent::eventObject->IsCFFIValue ()) { if (!init) { id_id = val_id ("id"); id_index = val_id ("index"); id_type = val_id ("type"); id_value = val_id ("eventValue"); id_x = val_id ("x"); id_y = val_id ("y"); init = true; } value object = (value)JoystickEvent::eventObject->Get (); alloc_field (object, id_id, alloc_int (event->id)); alloc_field (object, id_index, alloc_int (event->index)); alloc_field (object, id_type, alloc_int (event->type)); alloc_field (object, id_value, alloc_int (event->eventValue)); alloc_field (object, id_x, alloc_float (event->x)); alloc_field (object, id_y, alloc_float (event->y)); } else { JoystickEvent* eventObject = (JoystickEvent*)JoystickEvent::eventObject->Get (); eventObject->id = event->id; eventObject->index = event->index; eventObject->type = event->type; eventObject->eventValue = event->eventValue; eventObject->x = event->x; eventObject->y = event->y; } JoystickEvent::callback->Call (); } } } ================================================ FILE: project/src/ui/KeyEvent.cpp ================================================ #include #include namespace lime { ValuePointer* KeyEvent::callback = 0; ValuePointer* KeyEvent::eventObject = 0; static double id_keyCode; static int id_modifier; static int id_type; static int id_windowID; static bool init = false; KeyEvent::KeyEvent () { keyCode = 0; modifier = 0; type = KEY_DOWN; windowID = 0; } void KeyEvent::Dispatch (KeyEvent* event) { if (KeyEvent::callback) { if (KeyEvent::eventObject->IsCFFIValue ()) { if (!init) { id_keyCode = val_id ("keyCode"); id_modifier = val_id ("modifier"); id_type = val_id ("type"); id_windowID = val_id ("windowID"); init = true; } value object = (value)KeyEvent::eventObject->Get (); alloc_field (object, id_keyCode, alloc_float (event->keyCode)); alloc_field (object, id_modifier, alloc_int (event->modifier)); alloc_field (object, id_type, alloc_int (event->type)); alloc_field (object, id_windowID, alloc_int (event->windowID)); } else { KeyEvent* eventObject = (KeyEvent*)KeyEvent::eventObject->Get (); eventObject->keyCode = event->keyCode; eventObject->modifier = event->modifier; eventObject->type = event->type; eventObject->windowID = event->windowID; } KeyEvent::callback->Call (); } } } ================================================ FILE: project/src/ui/MouseEvent.cpp ================================================ #include #include namespace lime { ValuePointer* MouseEvent::callback = 0; ValuePointer* MouseEvent::eventObject = 0; static int id_button; static int id_movementX; static int id_movementY; static int id_type; static int id_windowID; static int id_x; static int id_y; static int id_clickCount; static bool init = false; MouseEvent::MouseEvent () { button = 0; type = MOUSE_DOWN; windowID = 0; x = 0.0; y = 0.0; movementX = 0.0; movementY = 0.0; clickCount = 0; } void MouseEvent::Dispatch (MouseEvent* event) { if (MouseEvent::callback) { if (MouseEvent::eventObject->IsCFFIValue ()) { if (!init) { id_button = val_id ("button"); id_movementX = val_id ("movementX"); id_movementY = val_id ("movementY"); id_type = val_id ("type"); id_windowID = val_id ("windowID"); id_x = val_id ("x"); id_y = val_id ("y"); id_clickCount = val_id ("clickCount"); init = true; } value object = (value)MouseEvent::eventObject->Get (); if (event->type != MOUSE_WHEEL) { alloc_field (object, id_button, alloc_int (event->button)); } if (event->type != MOUSE_WHEEL && event->type != MOUSE_MOVE) { alloc_field (object, id_clickCount, alloc_int (event->clickCount)); } alloc_field (object, id_movementX, alloc_float (event->movementX)); alloc_field (object, id_movementY, alloc_float (event->movementY)); alloc_field (object, id_type, alloc_int (event->type)); alloc_field (object, id_windowID, alloc_int (event->windowID)); alloc_field (object, id_x, alloc_float (event->x)); alloc_field (object, id_y, alloc_float (event->y)); } else { MouseEvent* eventObject = (MouseEvent*)MouseEvent::eventObject->Get (); eventObject->button = event->button; eventObject->movementX = event->movementX; eventObject->movementY = event->movementY; eventObject->type = event->type; eventObject->windowID = event->windowID; eventObject->x = event->x; eventObject->y = event->y; eventObject->clickCount = event->clickCount; } MouseEvent::callback->Call (); } } } ================================================ FILE: project/src/ui/TextEvent.cpp ================================================ #include #include namespace lime { ValuePointer* TextEvent::callback = 0; ValuePointer* TextEvent::eventObject = 0; static int id_length; static int id_start; static int id_text; static int id_type; static int id_windowID; static bool init = false; TextEvent::TextEvent () { length = 0; start = 0; text = 0; windowID = 0; } void TextEvent::Dispatch (TextEvent* event) { if (TextEvent::callback) { if (TextEvent::eventObject->IsCFFIValue ()) { if (!init) { id_length = val_id ("length"); id_start = val_id ("start"); id_text = val_id ("text"); id_type = val_id ("type"); id_windowID = val_id ("windowID"); init = true; } value object = (value)TextEvent::eventObject->Get (); if (event->type != TEXT_INPUT) { alloc_field (object, id_length, alloc_int (event->length)); alloc_field (object, id_start, alloc_int (event->start)); } alloc_field (object, id_text, alloc_string ((const char*)event->text)); alloc_field (object, id_type, alloc_int (event->type)); alloc_field (object, id_windowID, alloc_int (event->windowID)); } else { TextEvent* eventObject = (TextEvent*)TextEvent::eventObject->Get (); if (event->type != TEXT_INPUT) { eventObject->length = event->length; eventObject->start = event->start; } int length = strlen ((const char*)event->text); char* text = (char*)malloc (length + 1); strcpy (text, (const char*)event->text); eventObject->text = (vbyte*)text; eventObject->type = event->type; eventObject->windowID = event->windowID; } TextEvent::callback->Call (); } } } ================================================ FILE: project/src/ui/TouchEvent.cpp ================================================ #include #include namespace lime { ValuePointer* TouchEvent::callback = 0; ValuePointer* TouchEvent::eventObject = 0; static int id_device; static int id_dx; static int id_dy; static int id_id; static int id_pressure; static int id_type; static int id_x; static int id_y; static bool init = false; TouchEvent::TouchEvent () { type = TOUCH_START; x = 0; y = 0; id = 0; dx = 0; dy = 0; pressure = 0; device = 0; } void TouchEvent::Dispatch (TouchEvent* event) { if (TouchEvent::callback) { if (TouchEvent::eventObject->IsCFFIValue ()) { if (!init) { id_device = val_id ("device"); id_dx = val_id ("dx"); id_dy = val_id ("dy"); id_id = val_id ("id"); id_pressure = val_id ("pressure"); id_type = val_id ("type"); id_x = val_id ("x"); id_y = val_id ("y"); init = true; } value object = (value)TouchEvent::eventObject->Get (); alloc_field (object, id_device, alloc_int (event->device)); alloc_field (object, id_dx, alloc_float (event->dx)); alloc_field (object, id_dy, alloc_float (event->dy)); alloc_field (object, id_id, alloc_int (event->id)); alloc_field (object, id_pressure, alloc_float (event->pressure)); alloc_field (object, id_type, alloc_int (event->type)); alloc_field (object, id_x, alloc_float (event->x)); alloc_field (object, id_y, alloc_float (event->y)); } else { TouchEvent* eventObject = (TouchEvent*)TouchEvent::eventObject->Get (); eventObject->device = event->device; eventObject->dx = event->dx; eventObject->dy = event->dy; eventObject->id = event->id; eventObject->pressure = event->pressure; eventObject->type = event->type; eventObject->x = event->x; eventObject->y = event->y; } TouchEvent::callback->Call (); } } } ================================================ FILE: project/src/ui/WindowEvent.cpp ================================================ #include #include namespace lime { ValuePointer* WindowEvent::callback = 0; ValuePointer* WindowEvent::eventObject = 0; static int id_height; static int id_type; static int id_width; static int id_windowID; static int id_x; static int id_y; static bool init = false; WindowEvent::WindowEvent () { type = WINDOW_ACTIVATE; width = 0; height = 0; windowID = 0; x = 0; y = 0; } void WindowEvent::Dispatch (WindowEvent* event) { if (WindowEvent::callback) { if (WindowEvent::eventObject->IsCFFIValue ()) { if (!init) { id_height = val_id ("height"); id_type = val_id ("type"); id_width = val_id ("width"); id_windowID = val_id ("windowID"); id_x = val_id ("x"); id_y = val_id ("y"); init = true; } value object = (value)WindowEvent::eventObject->Get (); alloc_field (object, id_type, alloc_int (event->type)); alloc_field (object, id_windowID, alloc_int (event->windowID)); switch (event->type) { case WINDOW_MOVE: alloc_field (object, id_x, alloc_int (event->x)); alloc_field (object, id_y, alloc_int (event->y)); break; case WINDOW_RESIZE: alloc_field (object, id_width, alloc_int (event->width)); alloc_field (object, id_height, alloc_int (event->height)); break; default: break; } } else { WindowEvent* eventObject = (WindowEvent*)WindowEvent::eventObject->Get (); eventObject->type = event->type; eventObject->windowID = event->windowID; switch (event->type) { case WINDOW_MOVE: eventObject->x = event->x; eventObject->y = event->y; break; case WINDOW_RESIZE: eventObject->width = event->width; eventObject->height = event->height; break; default: break; } } WindowEvent::callback->Call (); } } } ================================================ FILE: project/src/utils/ArrayBufferView.cpp ================================================ #include namespace lime { static int id_buffer; static int id_byteLength; static int id_length; static bool init = false; ArrayBufferView::ArrayBufferView (value arrayBufferView) { if (!init) { id_buffer = val_id ("buffer"); id_byteLength = val_id ("byteLength"); id_length = val_id ("length"); init = true; } if (!val_is_null (arrayBufferView)) { buffer = new Bytes (val_field (arrayBufferView, id_buffer)); byteLength = val_int (val_field (arrayBufferView, id_byteLength)); length = val_int (val_field (arrayBufferView, id_length)); } else { buffer = new Bytes (); byteLength = 0; length = 0; } } ArrayBufferView::~ArrayBufferView () { if (buffer) { delete buffer; } } void ArrayBufferView::Resize (int size) { buffer->Resize (size); byteLength = size; length = size; } void ArrayBufferView::Set (value bytes) { buffer->Set (bytes); byteLength = buffer->length; length = byteLength; } void ArrayBufferView::Set (const QuickVec data) { buffer->Set (data); byteLength = buffer->length; length = byteLength; } value ArrayBufferView::Value () { return Value (alloc_empty_object ()); } value ArrayBufferView::Value (value arrayBufferView) { if (!init) { id_buffer = val_id ("buffer"); id_byteLength = val_id ("byteLength"); id_length = val_id ("length"); init = true; } alloc_field (arrayBufferView, id_buffer, buffer ? buffer->Value (val_field (arrayBufferView, id_buffer)) : alloc_null ()); alloc_field (arrayBufferView, id_byteLength, alloc_int (byteLength)); alloc_field (arrayBufferView, id_length, alloc_int (length)); return arrayBufferView; } } ================================================ FILE: project/src/utils/Bytes.cpp ================================================ #include #include #include #include namespace lime { static int id_b; static int id_length; static bool init = false; static bool useBuffer = false; static std::map hadValue; static std::map usingValue; static Mutex mutex; inline void _initializeBytes () { if (!init) { id_b = val_id ("b"); id_length = val_id ("length"); buffer _buffer = alloc_buffer_len (1); if (buffer_data (_buffer)) { useBuffer = true; } init = true; } } Bytes::Bytes () { _initializeBytes (); b = 0; length = 0; } Bytes::Bytes (value bytes) { _initializeBytes (); b = 0; length = 0; Set (bytes); } Bytes::~Bytes () { mutex.Lock (); if (hadValue.find (this) != hadValue.end ()) { hadValue.erase (this); if (usingValue.find (this) == usingValue.end () && b) { free (b); } } if (usingValue.find (this) != usingValue.end ()) { usingValue.erase (this); } mutex.Unlock (); } void Bytes::ReadFile (const char* path) { FILE_HANDLE *file = lime::fopen (path, "rb"); if (!file) { return; } lime::fseek (file, 0, SEEK_END); int size = lime::ftell (file); lime::fseek (file, 0, SEEK_SET); if (size > 0) { Resize (size); int status = lime::fread (b, 1, size, file); } lime::fclose (file); } void Bytes::Resize (int size) { if (size != length || (length > 0 && !b)) { mutex.Lock (); if (size <= 0) { if (b) { if (usingValue.find (this) != usingValue.end ()) { usingValue.erase (this); } else { free (b); } b = 0; length = 0; } } else { unsigned char* data = (unsigned char*)malloc (sizeof (char) * size); if (b) { if (length) { memcpy (data, b, length < size ? length : size); } if (usingValue.find (this) != usingValue.end ()) { usingValue.erase (this); } else { free (b); } } else if (usingValue.find (this) != usingValue.end ()) { usingValue.erase (this); } b = data; length = size; } mutex.Unlock (); } } void Bytes::Set(value bytes) { int newLength = 0; unsigned char* newB = 0; bool isNull = val_is_null(bytes); if (!isNull) { //here we can extract the values before calling our mutex to avoid potential deadlock or contention value lengthVal = val_field(bytes, id_length); value bVal = val_field(bytes, id_b); newLength = val_int(lengthVal); if (newLength > 0) { if (val_is_string(bVal)) { newB = (unsigned char*)val_string(bVal); } else { newB = (unsigned char*)buffer_data(val_to_buffer(bVal)); } } } //and now it should be save to lock mutex.Lock(); if (isNull) { usingValue.erase(this); length = 0; b = 0; } else { hadValue[this] = true; usingValue[this] = true; length = newLength; b = newB; } mutex.Unlock(); } void Bytes::Set (const QuickVec data) { int size = data.size (); if (size > 0) { Resize (size); memcpy (b, &data[0], length); } else { mutex.Lock (); if (usingValue.find (this) != usingValue.end ()) { usingValue.erase (this); } mutex.Unlock (); b = 0; length = 0; } } value Bytes::Value () { return alloc_null (); } value Bytes::Value (value bytes) { if (val_is_null (bytes) || !b) { return alloc_null (); } else { alloc_field (bytes, id_length, alloc_int (length)); if (useBuffer) { value _buffer = val_field (bytes, id_b); if (val_is_null (_buffer) || (char*)b != buffer_data (val_to_buffer (_buffer))) { buffer bufferValue = alloc_buffer_len (length); _buffer = buffer_val (bufferValue); memcpy ((unsigned char*)buffer_data (bufferValue), b, length); alloc_field (bytes, id_b, _buffer); } } else { value _string = val_field (bytes, id_b); if (val_is_null (_string) || (const char*)b != val_string (_string)) { value data = alloc_raw_string (length); memcpy ((void*)val_string (data), b, length); alloc_field (bytes, id_b, data); } } mutex.Lock (); hadValue[this] = true; mutex.Unlock (); return bytes; } } } ================================================ FILE: project/src/utils/compress/LZMA.cpp ================================================ #include #include "LzmaEnc.h" #include "LzmaDec.h" namespace lime { inline void WRITE_LE8 (unsigned char *ptr, char value) { *ptr = value; } inline void WRITE_LE16 (unsigned char *ptr, short value) { WRITE_LE8 ((ptr) + 0, ((value) >> 0)); WRITE_LE8 ((ptr) + 1, ((value) >> 8)); } inline void WRITE_LE32 (unsigned char *ptr, int value) { WRITE_LE16 ((ptr) + 0, ((value) >> 0)); WRITE_LE16 ((ptr) + 2, ((value) >> 16)); } inline void WRITE_LE64 (unsigned char *ptr, Int64 value) { WRITE_LE32 ((ptr) + 0, ((value) >> 0)); WRITE_LE32 ((ptr) + 4, ((value) >> 32)); } inline unsigned char READ_LE8 (unsigned char *ptr) { return *ptr; } inline unsigned short READ_LE16 (unsigned char *ptr) { return ((unsigned short)READ_LE8 (ptr + 0) << 0) | ((unsigned short)READ_LE8 (ptr + 1) << 8); } inline unsigned int READ_LE32 (unsigned char *ptr) { return ((unsigned int)READ_LE16 (ptr + 0) << 0) | ((unsigned int)READ_LE16 (ptr + 2) << 16); } inline UInt64 READ_LE64 (unsigned char *ptr) { return ((UInt64)READ_LE32 (ptr + 0) << 0) | ((UInt64)READ_LE32 (ptr + 4) << 32); } extern "C" { SRes LZMA_progress (void *p, UInt64 inSize, UInt64 outSize) { return SZ_OK; } void *LZMA_alloc (void *p, size_t size) { return malloc (size); } void LZMA_free (void *p, void *address) { if (address == NULL) return; free (address); } } void LZMA::Compress (Bytes* data, Bytes* result) { SizeT inputBufferSize = data->length; Byte* inputBufferData = data->b; SizeT outputBufferSize = inputBufferSize + inputBufferSize / 5 + (1 << 16); Byte* outputBufferData = (Byte *)malloc (outputBufferSize); SizeT propsSize = 100; Byte* propsData = (Byte *)malloc (propsSize); Int64 uncompressedLength = inputBufferSize; CLzmaEncProps props = { 0 }; LzmaEncProps_Init (&props); props.dictSize = (1 << 20); props.writeEndMark = 0; props.numThreads = 1; ICompressProgress progress = { LZMA_progress }; ISzAlloc allocSmall = { LZMA_alloc, LZMA_free }; ISzAlloc allocBig = { LZMA_alloc, LZMA_free }; LzmaEncode (outputBufferData, &outputBufferSize, inputBufferData, inputBufferSize, &props, propsData, &propsSize, props.writeEndMark, &progress, &allocSmall, &allocBig); result->Resize (outputBufferSize + propsSize + 8); Byte* resultData = result->b; memcpy (resultData, propsData, propsSize); WRITE_LE64 (resultData + propsSize, uncompressedLength); memcpy (resultData + propsSize + 8, outputBufferData, outputBufferSize); free (outputBufferData); free (propsData); } void LZMA::Decompress (Bytes* data, Bytes* result) { SizeT inputBufferSize = data->length; Byte* inputBufferData = data->b; Int64 uncompressedLength = -1; ELzmaStatus status = LZMA_STATUS_NOT_SPECIFIED; ISzAlloc alloc = { LZMA_alloc, LZMA_free }; CLzmaProps props = { 0 }; LzmaProps_Decode (&props, inputBufferData, LZMA_PROPS_SIZE); uncompressedLength = READ_LE64 (inputBufferData + LZMA_PROPS_SIZE); result->Resize ((int)uncompressedLength); SizeT outputBufferSize = result->length; Byte* outputBufferData = result->b; Byte* _inputBufferData = inputBufferData + LZMA_PROPS_SIZE + sizeof (uncompressedLength); SizeT _inputBufferSize = inputBufferSize - LZMA_PROPS_SIZE - sizeof (uncompressedLength); LzmaDecode (outputBufferData, &outputBufferSize, _inputBufferData, &_inputBufferSize, inputBufferData, LZMA_PROPS_SIZE, LZMA_FINISH_ANY, &status, &alloc); } } ================================================ FILE: project/src/utils/compress/Zlib.cpp ================================================ #include #include #ifdef STATIC_LINK extern "C" int zlib_register_prims() { static bool init = false; if (init) return 0; init = true; return 0; } #endif namespace lime { void Zlib::Compress (ZlibType type, Bytes* data, Bytes* result) { int windowBits = 15; switch (type) { case DEFLATE: windowBits = -15; break; case GZIP: windowBits = 31; break; default: break; } z_stream* stream = (z_stream*)malloc (sizeof (z_stream)); stream->zalloc = Z_NULL; stream->zfree = Z_NULL; stream->opaque = Z_NULL; int ret = 0; if ((ret = deflateInit2 (stream, Z_BEST_COMPRESSION, Z_DEFLATED, windowBits, 8, Z_DEFAULT_STRATEGY) != Z_OK)) { //val_throw (stream->msg); free (stream); return; } int bufferSize = deflateBound (stream, data->length); char* buffer = (char*)malloc (bufferSize); stream->next_in = (Bytef*)data->b; stream->next_out = (Bytef*)buffer; stream->avail_in = data->length; stream->avail_out = bufferSize; if ((ret = deflate (stream, Z_FINISH)) < 0) { //if (stream && stream->msg) printf ("%s\n", stream->msg); //val_throw (stream->msg); deflateEnd (stream); free (stream); free (buffer); return; } int size = bufferSize - stream->avail_out; result->Resize (size); memcpy (result->b, buffer, size); deflateEnd (stream); free (stream); free (buffer); return; } void Zlib::Decompress (ZlibType type, Bytes* data, Bytes* result) { int windowBits = 15; switch (type) { case DEFLATE: windowBits = -15; break; case GZIP: windowBits = 31; break; default: break; } z_stream* stream = (z_stream*)malloc (sizeof (z_stream)); stream->zalloc = Z_NULL; stream->zfree = Z_NULL; stream->opaque = Z_NULL; int ret = 0; if ((ret = inflateInit2 (stream, windowBits) != Z_OK)) { //val_throw (stream->msg); inflateEnd (stream); free (stream); return; } int chunkSize = 1 << 16; int readSize = 0; Bytef* sourcePosition = data->b; int destSize = 0; int readTotal = 0; Bytef* buffer = (Bytef*)malloc (chunkSize); stream->avail_in = data->length; stream->next_in = data->b; if (stream->avail_in > 0) { do { stream->avail_out = chunkSize; stream->next_out = buffer; ret = inflate (stream, Z_NO_FLUSH); if (ret == Z_STREAM_ERROR) { inflateEnd (stream); free (stream); free (buffer); return; } switch (ret) { case Z_NEED_DICT: ret = Z_DATA_ERROR; case Z_DATA_ERROR: case Z_MEM_ERROR: inflateEnd (stream); free (stream); free (buffer); return; } readSize = chunkSize - stream->avail_out; readTotal += readSize; result->Resize (readTotal); memcpy (result->b + readTotal - readSize, buffer, readSize); sourcePosition += readSize; } while (stream->avail_out == 0); } inflateEnd (stream); free (stream); free (buffer); return; } } ================================================ FILE: project/src/vm/NekoVM.cpp ================================================ #include #include #include extern "C" { void std_main (); } namespace lime { static void report( neko_vm *vm, value exc, int isexc ) { int i; buffer b = alloc_buffer(NULL); value st = neko_exc_stack(vm); for(i=0;i, reflectType:Class, functionType:Class, hxObjectype:Class):Void; static function Load(name:String, func:String, numArgs:Int):Dynamic; function CallMult(args:Dynamic):Dynamic; function Call0():Dynamic; function Call1(arg1:Dynamic):Dynamic; function Call2(arg1:Dynamic, arg2:Dynamic):Dynamic; function Call3(arg1:Dynamic, arg2:Dynamic, arg3:Dynamic):Dynamic; function Call4(arg1:Dynamic, arg2:Dynamic, arg3:Dynamic, arg4:Dynamic):Dynamic; function Call5(arg1:Dynamic, arg2:Dynamic, arg3:Dynamic, arg4:Dynamic, arg5:Dynamic):Dynamic; } ================================================ FILE: src/haxe/Timer.hx ================================================ package haxe; #if (!lime_cffi || macro) // Original haxe.Timer class /* * Copyright (C)2005-2018 Haxe Foundation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ /** The Timer class allows you to create asynchronous timers on platforms that support events. The intended usage is to create an instance of the Timer class with a given interval, set its run() method to a custom function to be invoked and eventually call stop() to stop the Timer. Note that a running Timer may or may not prevent the program to exit automatically when main() returns. It is also possible to extend this class and override its run() method in the child class. **/ class Timer { #if (flash || js) private var id:Null; #elseif java private var timer:java.util.Timer; private var task:java.util.TimerTask; #elseif (haxe_ver >= "3.4.0") private var event:MainLoop.MainEvent; #end /** Creates a new timer that will run every `time_ms` milliseconds. After creating the Timer instance, it calls `this.run` repeatedly, with delays of `time_ms` milliseconds, until `this.stop` is called. The first invocation occurs after `time_ms` milliseconds, not immediately. The accuracy of this may be platform-dependent. **/ public function new(time_ms:Int) { #if flash var me = this; id = untyped __global__["flash.utils.setInterval"](function() { me.run(); }, time_ms); #elseif js var me = this; id = untyped setInterval(function() me.run(), time_ms); #elseif java timer = new java.util.Timer(); timer.scheduleAtFixedRate(task = new TimerTask(this), haxe.Int64.ofInt(time_ms), haxe.Int64.ofInt(time_ms)); #elseif (haxe_ver >= "3.4.0") var dt = time_ms / 1000; event = MainLoop.add(function() { @:privateAccess event.nextRun += dt; run(); }); event.delay(dt); #end } /** Stops `this` Timer. After calling this method, no additional invocations of `this.run` will occur. It is not possible to restart `this` Timer once stopped. **/ public function stop() { #if (flash || js) if (id == null) return; #if flash untyped __global__["flash.utils.clearInterval"](id); #elseif js untyped clearInterval(id); #end id = null; #elseif java if (timer != null) { timer.cancel(); timer = null; } task = null; #elseif (haxe_ver >= "3.4.0") if (event != null) { event.stop(); event = null; } #end } /** This method is invoked repeatedly on `this` Timer. It can be overridden in a subclass, or rebound directly to a custom function: var timer = new haxe.Timer(1000); // 1000ms delay timer.run = function() { ... } Once bound, it can still be rebound to different functions until `this` Timer is stopped through a call to `this.stop`. **/ public dynamic function run() {} /** Invokes `f` after `time_ms` milliseconds. This is a convenience function for creating a new Timer instance with `time_ms` as argument, binding its run() method to `f` and then stopping `this` Timer upon the first invocation. If `f` is null, the result is unspecified. **/ public static function delay(f:Void->Void, time_ms:Int) { var t = new haxe.Timer(time_ms); t.run = function() { t.stop(); f(); }; return t; } /** Measures the time it takes to execute `f`, in seconds with fractions. This is a convenience function for calculating the difference between Timer.stamp() before and after the invocation of `f`. The difference is passed as argument to Log.trace(), with "s" appended to denote the unit. The optional `pos` argument is passed through. If `f` is null, the result is unspecified. **/ public static function measure(f:Void->T, ?pos:PosInfos):T { var t0 = stamp(); var r = f(); Log.trace((stamp() - t0) + "s", pos); return r; } /** Returns a timestamp, in seconds with fractions. The value itself might differ depending on platforms, only differences between two values make sense. **/ public static inline function stamp():Float { #if flash return flash.Lib.getTimer() / 1000; #elseif (neko || php) return Sys.time(); #elseif js return Date.now().getTime() / 1000; #elseif cpp return untyped __global__.__time_stamp(); #elseif python return Sys.cpuTime(); #elseif sys return Sys.time(); #else return 0; #end } } #if java @:nativeGen private class TimerTask extends java.util.TimerTask { var timer:Timer; public function new(timer:Timer):Void { super(); this.timer = timer; } @:overload override public function run():Void { timer.run(); } } #end #else import lime.system.System; class Timer { private static var sRunningTimers:Array = []; private var mTime:Float; private var mFireAt:Float; private var mRunning:Bool; public function new(time:Float) { mTime = time; sRunningTimers.push(this); mFireAt = getMS() + mTime; mRunning = true; } public static function delay(f:Void->Void, time:Int) { var t = new Timer(time); t.run = function() { t.stop(); f(); }; return t; } private static function getMS():Float { return System.getTimer(); } public static function measure(f:Void->T, ?pos:PosInfos):T { var t0 = stamp(); var r = f(); Log.trace((stamp() - t0) + "s", pos); return r; } dynamic public function run() {} public static inline function stamp():Float { var timer = System.getTimer(); return (timer > 0 ? timer / 1000 : 0); } public function stop():Void { mRunning = false; } @:noCompletion private function __check(inTime:Float) { if (inTime >= mFireAt) { mFireAt += mTime; run(); } } } #end ================================================ FILE: src/lime/_internal/backend/air/AIRApplication.hx ================================================ package lime._internal.backend.air; import flash.desktop.NativeApplication; import flash.desktop.SystemIdleMode; import flash.events.Event; import lime._internal.backend.flash.FlashApplication; import lime.app.Application; import lime.system.Orientation; import lime.system.System; class AIRApplication extends FlashApplication { public function new(parent:Application):Void { super(parent); NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE; NativeApplication.nativeApplication.addEventListener(Event.EXITING, handleExitEvent); } private function handleExitEvent(event:Event):Void { System.exit(0); if (Application.current != null && Application.current.onExit.canceled) { event.preventDefault(); event.stopImmediatePropagation(); } } public override function exit():Void { // TODO: Remove event handlers? } override public function getDeviceOrientation():Orientation { switch (parent.window.stage.deviceOrientation) { case DEFAULT: return PORTRAIT; case UPSIDE_DOWN: return PORTRAIT_FLIPPED; case ROTATED_LEFT: return LANDSCAPE; case ROTATED_RIGHT: return LANDSCAPE_FLIPPED; default: return UNKNOWN; } } } ================================================ FILE: src/lime/_internal/backend/air/AIRWindow.hx ================================================ package lime._internal.backend.air; import flash.desktop.NotificationType; import flash.display.NativeWindow; import flash.display.NativeWindowInitOptions; import flash.display.NativeWindowRenderMode; import flash.display.NativeWindowSystemChrome; import flash.geom.Point; import flash.events.Event; import flash.events.NativeWindowBoundsEvent; import flash.events.StageOrientationEvent; import flash.html.HTMLLoader; import flash.Lib; import lime._internal.backend.flash.FlashApplication; import lime._internal.backend.flash.FlashWindow; import lime.app.Application; import lime.system.Orientation; import lime.ui.Window; @:access(lime._internal.backend.flash.FlashApplication) @:access(lime.ui.Window) class AIRWindow extends FlashWindow { private var closing:Bool; private var nativeWindow:NativeWindow; public function new(parent:Window) { super(parent); } public override function alert(message:String, title:String):Void { if (nativeWindow != null) { nativeWindow.notifyUser(NotificationType.INFORMATIONAL); if (message != null) { var htmlLoader = new HTMLLoader(); htmlLoader.loadString("
    "); htmlLoader.window.alert(message); } } } public override function close():Void { if (!closing) { closing = true; parent.onClose.dispatch(); if (!parent.onClose.canceled) { nativeWindow.close(); } else { closing = false; } } } private override function create():Void { var title = (parent.__title != null && parent.__title != "") ? parent.__title : "Lime Application"; var attributes = parent.__attributes; var alwaysOnTop = false; var borderless = false; var fullscreen = false; var hardware = false; var hidden = false; var maximized = false; var minimized = false; var resizable = false; var frameRate = 60.0; var width = 0; var height = 0; if (Reflect.hasField(attributes, "alwaysOnTop") && attributes.alwaysOnTop) alwaysOnTop = true; if (Reflect.hasField(attributes, "borderless") && attributes.borderless) borderless = true; if (Reflect.hasField(attributes, "fullscreen") && attributes.fullscreen) fullscreen = true; if (Reflect.hasField(attributes, "context") && Reflect.hasField(attributes.context, "hardware") && attributes.context.hardware) hardware = true; if (Reflect.hasField(attributes, "hidden") && attributes.hidden) hidden = true; if (Reflect.hasField(attributes, "maximized") && attributes.maximized) maximized = true; if (Reflect.hasField(attributes, "minimized") && attributes.minimized) minimized = true; if (Reflect.hasField(attributes, "resizable") && attributes.resizable) resizable = true; if (Reflect.hasField(attributes, "frameRate")) frameRate = attributes.frameRate; if (Reflect.hasField(attributes, "width")) width = attributes.width; if (Reflect.hasField(attributes, "height")) height = attributes.height; if (FlashApplication.createFirstWindow) { nativeWindow = Lib.current.stage.nativeWindow; #if munit hidden = true; #end } else { var options = new NativeWindowInitOptions(); options.systemChrome = borderless ? NativeWindowSystemChrome.NONE : NativeWindowSystemChrome.STANDARD; options.renderMode = hardware ? NativeWindowRenderMode.DIRECT : NativeWindowRenderMode.CPU; options.transparent = false; options.maximizable = maximized; options.minimizable = minimized; options.resizable = resizable; nativeWindow = new NativeWindow(options); nativeWindow.stage.frameRate = frameRate; if (width > 0) nativeWindow.width = width; if (height > 0) nativeWindow.height = height; } if (nativeWindow != null) { parent.stage = nativeWindow.stage; nativeWindow.addEventListener(Event.CLOSING, handleNativeWindowEvent); nativeWindow.addEventListener(Event.CLOSE, handleNativeWindowEvent); // nativeWindow.addEventListener (Event.RESIZE, handleWindowEvent); nativeWindow.addEventListener(NativeWindowBoundsEvent.MOVE, handleNativeWindowEvent); if (hidden) { nativeWindow.visible = false; } // nativeWindow.activate (); nativeWindow.alwaysInFront = alwaysOnTop; nativeWindow.title = title; if (maximized) { nativeWindow.maximize(); } else if (minimized) { nativeWindow.minimize(); } } if (fullscreen) { setFullscreen(true); } if (nativeWindow != null) { parent.__width = Std.int(nativeWindow.width); parent.__height = Std.int(nativeWindow.height); parent.__x = Math.round(nativeWindow.x); parent.__y = Math.round(nativeWindow.y); parent.stage = nativeWindow.stage; } super.create(); if (hardware) { parent.context.attributes.hardware = true; parent.context.attributes.depth = true; parent.context.attributes.stencil = true; } parent.stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, handleStageOrientationChangeEvent); } public override function focus():Void { if (nativeWindow != null && nativeWindow.visible) { nativeWindow.activate(); } } private function handleStageOrientationChangeEvent(event:StageOrientationEvent):Void { if (parent.application.window == parent) { var newDeviceOrientation:Orientation = UNKNOWN; switch (parent.stage.deviceOrientation) { case DEFAULT: newDeviceOrientation = PORTRAIT; case UPSIDE_DOWN: newDeviceOrientation = PORTRAIT_FLIPPED; case ROTATED_LEFT: newDeviceOrientation = LANDSCAPE; case ROTATED_RIGHT: newDeviceOrientation = LANDSCAPE_FLIPPED; default: newDeviceOrientation = UNKNOWN; } parent.application.onDeviceOrientationChange.dispatch(newDeviceOrientation); } var newDisplayOrientation:Orientation = UNKNOWN; switch (event.afterOrientation) { case DEFAULT: newDisplayOrientation = PORTRAIT; case UPSIDE_DOWN: newDisplayOrientation = PORTRAIT_FLIPPED; case ROTATED_LEFT: newDisplayOrientation = LANDSCAPE_FLIPPED; case ROTATED_RIGHT: newDisplayOrientation = LANDSCAPE; default: newDisplayOrientation = UNKNOWN; } parent.application.onDisplayOrientationChange.dispatch(parent.display.id, newDisplayOrientation); } private function handleNativeWindowEvent(event:Event):Void { switch (event.type) { case Event.CLOSING: parent.close(); if (parent.onClose.canceled) { event.preventDefault(); event.stopImmediatePropagation(); } case Event.CLOSE: closing = true; parent.onClose.dispatch(); // case Event.RESIZE: // // TODO: Should this be the inner (stageWidth) or outer (nativeWindow width) size? // parent.__width = parent.stage.stageWidth; // parent.__height = parent.stage.stageHeight; // // parent.__width = nativeWindow.width; // // parent.__height = nativeWindow.height; // parent.onResize.dispatch (parent.__width, parent.__height); case NativeWindowBoundsEvent.MOVE: parent.onMove.dispatch(nativeWindow.x, nativeWindow.y); default: } } public override function move(x:Int, y:Int):Void { if (nativeWindow != null) { nativeWindow.x = x; nativeWindow.y = y; } } public override function resize(width:Int, height:Int):Void { if (nativeWindow != null) { nativeWindow.width = width; nativeWindow.height = height; } } public override function setMinSize(width:Int, height:Int):Void { if (nativeWindow != null) { nativeWindow.minSize = new Point(width, height); } } public override function setMaxSize(width:Int, height:Int):Void { if (nativeWindow != null) { nativeWindow.maxSize = new Point(width, height); } } public override function setMaximized(value:Bool):Bool { if (nativeWindow != null) { if (value) { nativeWindow.maximize(); } else { nativeWindow.restore(); } } return value; } public override function setMinimized(value:Bool):Bool { if (nativeWindow != null) { if (value) { nativeWindow.minimize(); } else { nativeWindow.restore(); } } return value; } public override function setTitle(value:String):String { if (nativeWindow != null) { nativeWindow.title = value; } return value; } } ================================================ FILE: src/lime/_internal/backend/flash/FlashApplication.hx ================================================ package lime._internal.backend.flash; import flash.ui.MultitouchInputMode; import flash.ui.Multitouch; import lime.app.Application; import lime.media.AudioManager; import lime.system.Orientation; import lime.ui.Window; @:access(lime.app.Application) class FlashApplication { private static var createFirstWindow:Bool; private var parent:Application; private var requestedWindow:Bool; public function new(parent:Application):Void { this.parent = parent; AudioManager.init(); createFirstWindow = true; // Initial window is already created parent.createWindow({}); createFirstWindow = false; } public function exec():Int { Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; return 0; } public function exit():Void {} public function getDeviceOrientation():Orientation { return UNKNOWN; } } ================================================ FILE: src/lime/_internal/backend/flash/FlashAudioSource.hx ================================================ package lime._internal.backend.flash; import flash.media.SoundChannel; import lime.math.Vector4; import lime.media.AudioSource; @:access(lime.media.AudioBuffer) class FlashAudioSource { private var channel:SoundChannel; private var completed:Bool; private var length:Null; private var loops:Int; private var parent:AudioSource; private var pauseTime:Int; private var playing:Bool; private var position:Vector4; public function new(parent:AudioSource) { this.parent = parent; position = new Vector4(); } public function dispose():Void {} public function init():Void {} public function play():Void { if (channel != null) channel.stop(); channel = parent.buffer.__srcSound.play(pauseTime / 1000 + parent.offset, loops + 1); } public function pause():Void { if (channel != null) { pauseTime = Std.int(channel.position * 1000); channel.stop(); } } public function stop():Void { pauseTime = 0; if (channel != null) { channel.stop(); } } // Get & Set Methods public function getCurrentTime():Int { if (channel != null) { return Std.int(channel.position) - parent.offset; } else { return 0; } } public function setCurrentTime(value:Int):Int { pauseTime = value; if (channel != null && value != getCurrentTime()) { pauseTime = value; channel.stop(); play(); } return value; } public function getGain():Float { return channel.soundTransform.volume; } public function setGain(value:Float):Float { var soundTransform = channel.soundTransform; soundTransform.volume = value; channel.soundTransform = soundTransform; return value; } public function getLength():Int { if (length != null) { return length; } return Std.int(parent.buffer.__srcSound.length) - parent.offset; } public function setLength(value:Int):Int { return length = value; } public function getLoops():Int { return loops; } public function setLoops(value:Int):Int { return loops = value; } public function getPitch():Float { lime.utils.Log.verbose("Pitch is not supported in Flash."); return 1; } public function setPitch(value:Float):Float { return getPitch(); } public function getPosition():Vector4 { position.x = channel.soundTransform.pan; return position; } public function setPosition(value:Vector4):Vector4 { position.x = value.x; position.y = value.y; position.z = value.z; position.w = value.w; var soundTransform = channel.soundTransform; soundTransform.pan = position.x; channel.soundTransform = soundTransform; return position; } } ================================================ FILE: src/lime/_internal/backend/flash/FlashHTTPRequest.hx ================================================ package lime._internal.backend.flash; import flash.events.Event; import flash.events.HTTPStatusEvent; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.events.SecurityErrorEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.net.URLRequestHeader; import flash.net.URLRequestMethod; import flash.utils.ByteArray; import haxe.io.Bytes; import lime.app.Future; import lime.app.Promise; import lime.net.HTTPRequest; class FlashHTTPRequest { private var parent:_IHTTPRequest; private var urlLoader:URLLoader; private var urlRequest:URLRequest; public function new() {} public function cancel():Void { if (urlLoader != null) { urlLoader.close(); } } private function construct(binary:Bool):Void { urlLoader = new URLLoader(); urlRequest = new URLRequest(); var query = ""; var uri = parent.uri; if (parent.data != null) { urlRequest.data = parent.data.getData(); } else { for (key in parent.formData.keys()) { if (query.length > 0) query += "&"; query += StringTools.urlEncode(key) + "=" + StringTools.urlEncode(Std.string(parent.formData.get(key))); } if (query != "" && parent.method == GET) { if (uri.indexOf("?") > -1) { uri += "&" + query; } else { uri += "?" + query; } query = ""; } } if (binary) { urlLoader.dataFormat = URLLoaderDataFormat.BINARY; } urlRequest.url = uri; urlRequest.contentType = parent.contentType; // urlRequest.userAgent = parent.userAgent; // urlRequest.followRedirects = parent.followRedirects; urlRequest.method = switch (parent.method) { case POST: URLRequestMethod.POST; default: URLRequestMethod.GET; } for (header in parent.headers) { urlRequest.requestHeaders.push(new URLRequestHeader(header.name, header.value)); } } public function init(parent:_IHTTPRequest):Void { this.parent = parent; } public function loadData(uri:String):Future { var promise = new Promise(); construct(true); urlLoader.addEventListener(ProgressEvent.PROGRESS, function(event) { promise.progress(Std.int(event.bytesLoaded), Std.int(event.bytesTotal)); }); urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, function(event) { parent.responseStatus = event.status; if (parent.enableResponseHeaders) { parent.responseHeaders = cast event.responseHeaders; } }); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, function(event) { var bytes = Bytes.ofData(cast(urlLoader.data, ByteArray)); promise.error(new _HTTPRequestErrorResponse(event.errorID, bytes)); }); urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(event) { promise.error(new _HTTPRequestErrorResponse(403, null)); }); urlLoader.addEventListener(Event.COMPLETE, function(event) { promise.complete(Bytes.ofData(cast(urlLoader.data, ByteArray))); }); urlLoader.load(urlRequest); return promise.future; } public function loadText(uri:String):Future { var promise = new Promise(); construct(false); urlLoader.addEventListener(ProgressEvent.PROGRESS, function(event) { promise.progress(Std.int(event.bytesLoaded), Std.int(event.bytesTotal)); }); urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, function(event) { parent.responseStatus = event.status; if (parent.enableResponseHeaders) { parent.responseHeaders = cast event.responseHeaders; } }); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, function(event) { var responseData = cast(urlLoader.data, String); promise.error(new _HTTPRequestErrorResponse(event.errorID, responseData)); }); urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(event) { promise.error(new _HTTPRequestErrorResponse(403, null)); }); urlLoader.addEventListener(Event.COMPLETE, function(event) { promise.complete(cast(urlLoader.data, String)); }); urlLoader.load(urlRequest); return promise.future; } } ================================================ FILE: src/lime/_internal/backend/flash/FlashWindow.hx ================================================ package lime._internal.backend.flash; import flash.display.BitmapData; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.FocusEvent; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.events.TouchEvent; import flash.geom.Matrix; import flash.system.Capabilities; import flash.ui.Mouse; import flash.ui.MouseCursor as FlashMouseCursor; import flash.Lib; import lime.app.Application; import lime.graphics.Image; import lime.graphics.RenderContext; import lime.graphics.RenderContextAttributes; import lime.math.Rectangle; import lime.ui.KeyCode; import lime.ui.KeyModifier; import lime.ui.MouseButton; import lime.ui.MouseCursor; import lime.ui.MouseWheelMode; import lime.ui.Touch; import lime.system.Display; import lime.system.DisplayMode; import lime.system.System; import lime.ui.Window; @:access(lime._internal.backend.flash.FlashApplication) @:access(lime.app.Application) @:access(lime.graphics.RenderContext) @:access(lime.ui.Window) class FlashWindow { private static var windowID = 0; private var cacheMouseX:Float; private var cacheMouseY:Float; private var cacheTime:Int; private var currentTouches = new Map(); private var cursor:MouseCursor; private var frameRate:Float; private var mouseLeft:Bool; private var parent:Window; private var textInputEnabled:Bool; private var textInputRect:Rectangle; private var unusedTouchesPool = new List(); public function new(parent:Window) { this.parent = parent; cacheMouseX = 0; cacheMouseY = 0; cursor = DEFAULT; create(); } public function alert(message:String, title:String):Void {} public function close():Void { parent.application.__removeWindow(parent); } private function convertKeyCode(keyCode:Int):KeyCode { if (keyCode >= 65 && keyCode <= 90) { return keyCode + 32; } switch (keyCode) { case 16: return KeyCode.LEFT_SHIFT; case 17: return KeyCode.LEFT_CTRL; case 18: return KeyCode.LEFT_ALT; case 20: return KeyCode.CAPS_LOCK; case 33: return KeyCode.PAGE_UP; case 34: return KeyCode.PAGE_DOWN; case 35: return KeyCode.END; case 36: return KeyCode.HOME; case 37: return KeyCode.LEFT; case 38: return KeyCode.UP; case 39: return KeyCode.RIGHT; case 40: return KeyCode.DOWN; case 45: return KeyCode.INSERT; case 46: return KeyCode.DELETE; case 96: return KeyCode.NUMPAD_0; case 97: return KeyCode.NUMPAD_1; case 98: return KeyCode.NUMPAD_2; case 99: return KeyCode.NUMPAD_3; case 100: return KeyCode.NUMPAD_4; case 101: return KeyCode.NUMPAD_5; case 102: return KeyCode.NUMPAD_6; case 103: return KeyCode.NUMPAD_7; case 104: return KeyCode.NUMPAD_8; case 105: return KeyCode.NUMPAD_9; case 106: return KeyCode.NUMPAD_MULTIPLY; case 107: return KeyCode.NUMPAD_PLUS; case 108: return KeyCode.NUMPAD_ENTER; case 109: return KeyCode.NUMPAD_MINUS; case 110: return KeyCode.NUMPAD_PERIOD; case 111: return KeyCode.NUMPAD_DIVIDE; case 112: return KeyCode.F1; case 113: return KeyCode.F2; case 114: return KeyCode.F3; case 115: return KeyCode.F4; case 116: return KeyCode.F5; case 117: return KeyCode.F6; case 118: return KeyCode.F7; case 119: return KeyCode.F8; case 120: return KeyCode.F9; case 121: return KeyCode.F10; case 122: return KeyCode.F11; case 123: return KeyCode.F12; case 124: return KeyCode.F13; case 125: return KeyCode.F14; case 126: return KeyCode.F15; case 144: return KeyCode.NUM_LOCK; case 186: return KeyCode.SEMICOLON; case 187: return KeyCode.EQUALS; case 188: return KeyCode.COMMA; case 189: return KeyCode.MINUS; case 190: return KeyCode.PERIOD; case 191: return KeyCode.SLASH; case 192: return KeyCode.GRAVE; case 219: return KeyCode.LEFT_BRACKET; case 220: return KeyCode.BACKSLASH; case 221: return KeyCode.RIGHT_BRACKET; case 222: return KeyCode.SINGLE_QUOTE; } return keyCode; } private function create():Void { if (#if air true #else FlashApplication.createFirstWindow #end) { var attributes = parent.__attributes; parent.id = windowID++; if (parent.stage == null) parent.stage = Lib.current.stage; var stage = parent.stage; parent.__width = stage.stageWidth; parent.__height = stage.stageHeight; stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyEvent); stage.addEventListener(KeyboardEvent.KEY_UP, handleKeyEvent); var events = [ "mouseDown", "mouseMove", "mouseUp", "mouseWheel", "middleMouseDown", "middleMouseMove", "middleMouseUp" #if ((!openfl && !disable_flash_right_click) || enable_flash_right_click), "rightMouseDown", "rightMouseMove", "rightMouseUp" #end ]; for (event in events) { stage.addEventListener(event, handleMouseEvent); } stage.addEventListener(TouchEvent.TOUCH_BEGIN, handleTouchEvent); stage.addEventListener(TouchEvent.TOUCH_MOVE, handleTouchEvent); stage.addEventListener(TouchEvent.TOUCH_END, handleTouchEvent); stage.addEventListener(Event.ACTIVATE, handleWindowEvent); stage.addEventListener(Event.DEACTIVATE, handleWindowEvent); stage.addEventListener(FocusEvent.FOCUS_IN, handleWindowEvent); stage.addEventListener(FocusEvent.FOCUS_OUT, handleWindowEvent); stage.addEventListener(Event.MOUSE_LEAVE, handleWindowEvent); // #if !air stage.addEventListener(Event.RESIZE, handleWindowEvent); // #end var context = new RenderContext(); context.flash = Lib.current; context.type = FLASH; context.version = Capabilities.version; context.window = parent; var contextAttributes:RenderContextAttributes = { antialiasing: 0, background: null, colorDepth: 32, depth: false, hardware: false, stencil: false, type: FLASH, version: Capabilities.version, vsync: false, }; if (Reflect.hasField(attributes, "context") && Reflect.hasField(attributes.context, "background") && attributes.context.background != null) { stage.color = attributes.context.background; contextAttributes.background = stage.color; } setFrameRate(Reflect.hasField(attributes, "frameRate") ? attributes.frameRate : 60); context.attributes = contextAttributes; parent.context = context; // TODO: Wait for application.exec? cacheTime = Lib.getTimer(); // handleApplicationEvent (null); stage.addEventListener(Event.ENTER_FRAME, handleApplicationEvent); } } public function focus():Void {} public function getCursor():MouseCursor { return cursor; } public function getDisplay():Display { return System.getDisplay(0); } public function getDisplayMode():DisplayMode { return System.getDisplay(0).currentMode; } private function handleApplicationEvent(event:Event):Void { var currentTime = Lib.getTimer(); var deltaTime = currentTime - cacheTime; cacheTime = currentTime; parent.application.onUpdate.dispatch(deltaTime); parent.onRender.dispatch(parent.context); } private function handleKeyEvent(event:KeyboardEvent):Void { var keyCode = convertKeyCode(event.keyCode); var modifier = (event.shiftKey ? (KeyModifier.SHIFT) : 0) | (event.ctrlKey ? (KeyModifier.CTRL) : 0) | (event.altKey ? (KeyModifier.ALT) : 0); if (event.type == KeyboardEvent.KEY_DOWN) { parent.onKeyDown.dispatch(keyCode, modifier); if (parent.textInputEnabled) { parent.onTextInput.dispatch(String.fromCharCode(event.charCode)); } } else { parent.onKeyUp.dispatch(keyCode, modifier); } } private function handleMouseEvent(event:MouseEvent):Void { var button:MouseButton = switch (event.type) { case "middleMouseDown", "middleMouseUp": MIDDLE; case "rightMouseDown", "rightMouseUp": RIGHT; default: LEFT; } switch (event.type) { case "mouseDown", "middleMouseDown", "rightMouseDown": parent.onMouseDown.dispatch(event.stageX, event.stageY, button); case "mouseMove": if (mouseLeft) { mouseLeft = false; parent.onEnter.dispatch(); } var mouseX = event.stageX; var mouseY = event.stageY; parent.onMouseMove.dispatch(mouseX, mouseY); parent.onMouseMoveRelative.dispatch(mouseX - cacheMouseX, mouseY - cacheMouseY); cacheMouseX = mouseX; cacheMouseY = mouseY; case "mouseUp", "middleMouseUp", "rightMouseUp": parent.onMouseUp.dispatch(event.stageX, event.stageY, button); case "mouseWheel": parent.onMouseWheel.dispatch(0, event.delta, MouseWheelMode.LINES); default: } } private function handleTouchEvent(event:TouchEvent):Void { var x = event.stageX; var y = event.stageY; switch (event.type) { case TouchEvent.TOUCH_BEGIN: var touch = unusedTouchesPool.pop(); if (touch == null) { touch = new Touch(x / parent.__width, y / parent.__height, event.touchPointID, 0, 0, event.pressure, parent.id); } else { touch.x = x / parent.__width; touch.y = y / parent.__height; touch.id = event.touchPointID; touch.dx = 0; touch.dy = 0; touch.pressure = event.pressure; touch.device = parent.id; } currentTouches.set(event.touchPointID, touch); Touch.onStart.dispatch(touch); if (event.isPrimaryTouchPoint) { parent.onMouseDown.dispatch(x, y, LEFT); } case TouchEvent.TOUCH_END: var touch = currentTouches.get(event.touchPointID); if (touch != null) { var cacheX = touch.x; var cacheY = touch.y; touch.x = x / parent.__width; touch.y = y / parent.__height; touch.dx = touch.x - cacheX; touch.dy = touch.y - cacheY; touch.pressure = event.pressure; Touch.onEnd.dispatch(touch); currentTouches.remove(event.touchPointID); unusedTouchesPool.add(touch); if (event.isPrimaryTouchPoint) { parent.onMouseUp.dispatch(x, y, 0); } } case TouchEvent.TOUCH_MOVE: var touch = currentTouches.get(event.touchPointID); if (touch != null) { var cacheX = touch.x; var cacheY = touch.y; touch.x = x / parent.__width; touch.y = y / parent.__height; touch.dx = touch.x - cacheX; touch.dy = touch.y - cacheY; touch.pressure = event.pressure; Touch.onMove.dispatch(touch); if (event.isPrimaryTouchPoint) { parent.onMouseMove.dispatch(x, y); } } } } private function handleWindowEvent(event:Event):Void { switch (event.type) { case Event.ACTIVATE: parent.onActivate.dispatch(); case Event.DEACTIVATE: parent.onDeactivate.dispatch(); case FocusEvent.FOCUS_IN: parent.onFocusIn.dispatch(); case FocusEvent.FOCUS_OUT: parent.onFocusOut.dispatch(); case Event.MOUSE_LEAVE: mouseLeft = true; parent.onLeave.dispatch(); case Event.RESIZE: parent.__width = parent.stage.stageWidth; parent.__height = parent.stage.stageHeight; parent.onResize.dispatch(parent.__width, parent.__height); default: } } public function readPixels(rect:Rectangle):Image { var stageRect = new Rectangle(0, 0, parent.stage.stageWidth, parent.stage.stageHeight); if (rect == null) { rect = stageRect; } else { var rect = rect.intersection(stageRect); } if (rect.width > 0 && rect.height > 0) { var bitmapData = new BitmapData(Std.int(rect.width), Std.int(rect.height)); var matrix = new Matrix(); matrix.tx = -rect.x; matrix.ty = -rect.y; bitmapData.draw(parent.stage, matrix); return Image.fromBitmapData(bitmapData); } else { return null; } } public function setCursor(value:MouseCursor):MouseCursor { if (cursor != value) { if (value == null) { Mouse.hide(); } else { if (cursor == null) { Mouse.show(); } Mouse.cursor = switch (value) { case ARROW: FlashMouseCursor.ARROW; case CROSSHAIR: FlashMouseCursor.ARROW; case MOVE: FlashMouseCursor.HAND; case POINTER: FlashMouseCursor.BUTTON; case RESIZE_NESW: FlashMouseCursor.HAND; case RESIZE_NS: FlashMouseCursor.HAND; case RESIZE_NWSE: FlashMouseCursor.HAND; case RESIZE_WE: FlashMouseCursor.HAND; case TEXT: FlashMouseCursor.IBEAM; case WAIT: FlashMouseCursor.ARROW; case WAIT_ARROW: FlashMouseCursor.ARROW; default: FlashMouseCursor.AUTO; } } cursor = value; } return cursor; } public function setDisplayMode(value:DisplayMode):DisplayMode { return value; } public function getFrameRate():Float { return frameRate; } public function getMouseLock():Bool { return false; } public function getOpacity():Float { return 1.0; } public function getTextInputEnabled():Bool { return textInputEnabled; } public function move(x:Int, y:Int):Void {} public function resize(width:Int, height:Int):Void {} public function setMinSize(width:Int, height:Int):Void {} public function setMaxSize(width:Int, height:Int):Void {} public function setBorderless(value:Bool):Bool { return value; } public function setFrameRate(value:Float):Float { frameRate = value; if (parent.stage != null) parent.stage.frameRate = value; return value; } public function setFullscreen(value:Bool):Bool { parent.stage.displayState = (value ? FULL_SCREEN_INTERACTIVE : NORMAL); return value; } public function setIcon(image:Image):Void {} public function setMaximized(value:Bool):Bool { return false; } public function setMinimized(value:Bool):Bool { return false; } public function setMouseLock(value:Bool):Void {} public function setOpacity(value:Float):Void {} public function setResizable(value:Bool):Bool { return value; } public function setTextInputEnabled(value:Bool):Bool { return textInputEnabled = value; } public function setTextInputRect(value:Rectangle):Rectangle { return textInputRect = value; } public function setTitle(value:String):String { return value; } public function setVisible(value:Bool):Bool { return value; } public function warpMouse(x:Int, y:Int):Void {} } ================================================ FILE: src/lime/_internal/backend/html5/HTML5Application.hx ================================================ package lime._internal.backend.html5; import js.html.DeviceMotionEvent; import js.html.KeyboardEvent; import js.Browser; import lime.app.Application; import lime.media.AudioManager; import lime.system.Orientation; import lime.system.Sensor; import lime.system.SensorType; import lime.ui.GamepadAxis; import lime.ui.KeyCode; import lime.ui.KeyModifier; import lime.ui.Gamepad; import lime.ui.GamepadButton; import lime.ui.Joystick; import lime.ui.Window; @:access(lime._internal.backend.html5.HTML5Window) @:access(lime.app.Application) @:access(lime.system.Sensor) @:access(lime.ui.Gamepad) @:access(lime.ui.Joystick) @:access(lime.ui.Window) class HTML5Application { private var accelerometer:Sensor; private var currentUpdate:Float; private var deltaTime:Float; private var framePeriod:Float; private var gameDeviceCache = new Map(); private var hidden:Bool; private var lastUpdate:Float; private var nextUpdate:Float; private var parent:Application; #if stats private var stats:Dynamic; #end public inline function new(parent:Application) { this.parent = parent; currentUpdate = 0; lastUpdate = 0; nextUpdate = 0; framePeriod = -1; AudioManager.init(); accelerometer = Sensor.registerSensor(SensorType.ACCELEROMETER, 0); } private function convertKeyCode(keyCode:Int):KeyCode { if (keyCode >= 65 && keyCode <= 90) { return keyCode + 32; } switch (keyCode) { case 12: return KeyCode.CLEAR; case 16: return KeyCode.LEFT_SHIFT; case 17: return KeyCode.LEFT_CTRL; case 18: return KeyCode.LEFT_ALT; case 19: return KeyCode.PAUSE; case 20: return KeyCode.CAPS_LOCK; case 33: return KeyCode.PAGE_UP; case 34: return KeyCode.PAGE_DOWN; case 35: return KeyCode.END; case 36: return KeyCode.HOME; case 37: return KeyCode.LEFT; case 38: return KeyCode.UP; case 39: return KeyCode.RIGHT; case 40: return KeyCode.DOWN; case 41: return KeyCode.SELECT; case 43: return KeyCode.EXECUTE; case 44: return KeyCode.PRINT_SCREEN; case 45: return KeyCode.INSERT; case 46: return KeyCode.DELETE; case 91: return KeyCode.LEFT_META; case 92: return KeyCode.RIGHT_META; case 93: return KeyCode.RIGHT_META; // this maybe should be APPLICATION if on Windows case 95: return KeyCode.SLEEP; case 96: return KeyCode.NUMPAD_0; case 97: return KeyCode.NUMPAD_1; case 98: return KeyCode.NUMPAD_2; case 99: return KeyCode.NUMPAD_3; case 100: return KeyCode.NUMPAD_4; case 101: return KeyCode.NUMPAD_5; case 102: return KeyCode.NUMPAD_6; case 103: return KeyCode.NUMPAD_7; case 104: return KeyCode.NUMPAD_8; case 105: return KeyCode.NUMPAD_9; case 106: return KeyCode.NUMPAD_MULTIPLY; case 107: return KeyCode.NUMPAD_PLUS; case 108: return KeyCode.NUMPAD_PERIOD; case 109: return KeyCode.NUMPAD_MINUS; case 110: return KeyCode.NUMPAD_PERIOD; case 111: return KeyCode.NUMPAD_DIVIDE; case 112: return KeyCode.F1; case 113: return KeyCode.F2; case 114: return KeyCode.F3; case 115: return KeyCode.F4; case 116: return KeyCode.F5; case 117: return KeyCode.F6; case 118: return KeyCode.F7; case 119: return KeyCode.F8; case 120: return KeyCode.F9; case 121: return KeyCode.F10; case 122: return KeyCode.F11; case 123: return KeyCode.F12; case 124: return KeyCode.F13; case 125: return KeyCode.F14; case 126: return KeyCode.F15; case 127: return KeyCode.F16; case 128: return KeyCode.F17; case 129: return KeyCode.F18; case 130: return KeyCode.F19; case 131: return KeyCode.F20; case 132: return KeyCode.F21; case 133: return KeyCode.F22; case 134: return KeyCode.F23; case 135: return KeyCode.F24; case 144: return KeyCode.NUM_LOCK; case 145: return KeyCode.SCROLL_LOCK; case 160: return KeyCode.CARET; case 161: return KeyCode.EXCLAMATION; case 163: return KeyCode.HASH; case 164: return KeyCode.DOLLAR; case 166: return KeyCode.APP_CONTROL_BACK; case 167: return KeyCode.APP_CONTROL_FORWARD; case 168: return KeyCode.APP_CONTROL_REFRESH; case 169: return KeyCode.RIGHT_PARENTHESIS; // is this correct? case 170: return KeyCode.ASTERISK; case 171: return KeyCode.GRAVE; case 172: return KeyCode.HOME; case 173: return KeyCode.MINUS; // or mute/unmute? case 174: return KeyCode.VOLUME_DOWN; case 175: return KeyCode.VOLUME_UP; case 176: return KeyCode.AUDIO_NEXT; case 177: return KeyCode.AUDIO_PREVIOUS; case 178: return KeyCode.AUDIO_STOP; case 179: return KeyCode.AUDIO_PLAY; case 180: return KeyCode.MAIL; case 181: return KeyCode.AUDIO_MUTE; case 182: return KeyCode.VOLUME_DOWN; case 183: return KeyCode.VOLUME_UP; case 186: return KeyCode.SEMICOLON; // or ñ? case 187: return KeyCode.EQUALS; case 188: return KeyCode.COMMA; case 189: return KeyCode.MINUS; case 190: return KeyCode.PERIOD; case 191: return KeyCode.SLASH; case 192: return KeyCode.GRAVE; case 193: return KeyCode.QUESTION; case 194: return KeyCode.NUMPAD_PERIOD; case 219: return KeyCode.LEFT_BRACKET; case 220: return KeyCode.BACKSLASH; case 221: return KeyCode.RIGHT_BRACKET; case 222: return KeyCode.SINGLE_QUOTE; case 223: return KeyCode.GRAVE; case 224: return KeyCode.LEFT_META; case 226: return KeyCode.BACKSLASH; } return keyCode; } public function exec():Int { Browser.window.addEventListener("keydown", handleKeyEvent, false); Browser.window.addEventListener("keyup", handleKeyEvent, false); Browser.window.addEventListener("focus", handleWindowEvent, false); Browser.window.addEventListener("blur", handleWindowEvent, false); Browser.window.addEventListener("resize", handleWindowEvent, false); Browser.window.addEventListener("beforeunload", handleWindowEvent, false); if (Reflect.hasField(Browser.window, "Accelerometer")) { Browser.window.addEventListener("devicemotion", handleSensorEvent, false); } #if stats stats = untyped #if haxe4 js.Syntax.code #else __js__ #end ("new Stats ()"); stats.domElement.style.position = "absolute"; stats.domElement.style.top = "0px"; Browser.document.body.appendChild(stats.domElement); #end untyped #if haxe4 js.Syntax.code #else __js__ #end (" if (!CanvasRenderingContext2D.prototype.isPointInStroke) { CanvasRenderingContext2D.prototype.isPointInStroke = function (path, x, y) { return false; }; } if (!CanvasRenderingContext2D.prototype.isPointInPath) { CanvasRenderingContext2D.prototype.isPointInPath = function (path, x, y) { return false; }; } if ('performance' in window == false) { window.performance = {}; } if ('now' in window.performance == false) { var offset = Date.now(); if (performance.timing && performance.timing.navigationStart) { offset = performance.timing.navigationStart } window.performance.now = function now() { return Date.now() - offset; } } var lastTime = 0; var vendors = ['ms', 'moz', 'webkit', 'o']; for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; } if (!window.requestAnimationFrame) window.requestAnimationFrame = function(callback, element) { var currTime = window.performance.now(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function(id) { clearTimeout(id); }; window.requestAnimFrame = window.requestAnimationFrame; "); lastUpdate = Browser.window.performance.now(); handleApplicationEvent(); return 0; } public function exit():Void {} public function getDeviceOrientation():Orientation { if (Browser.window.screen.orientation != null) { switch (Browser.window.screen.orientation.type) { case PORTRAIT_PRIMARY: return PORTRAIT; case PORTRAIT_SECONDARY: return PORTRAIT_FLIPPED; case LANDSCAPE_PRIMARY: return LANDSCAPE; case LANDSCAPE_SECONDARY: return LANDSCAPE_FLIPPED; default: // fall through to unknown } } return UNKNOWN; } private function handleApplicationEvent(?__):Void { // TODO: Support independent window frame rates for (window in parent.__windows) { window.__backend.updateSize(); } updateGameDevices(); currentUpdate = Browser.window.performance.now(); if (currentUpdate >= nextUpdate) { #if stats stats.begin(); #end deltaTime = currentUpdate - lastUpdate; for (window in parent.__windows) { parent.onUpdate.dispatch(Std.int(deltaTime)); if (window.context != null) window.onRender.dispatch(window.context); } #if stats stats.end(); #end if (framePeriod < 0) { nextUpdate = currentUpdate; } else { nextUpdate = currentUpdate - (currentUpdate % framePeriod) + framePeriod; } lastUpdate = currentUpdate; } Browser.window.requestAnimationFrame(cast handleApplicationEvent); } private function handleKeyEvent(event:KeyboardEvent):Void { if (parent.window != null) { // space and arrow keys // switch (event.keyCode) { // case 32, 37, 38, 39, 40: event.preventDefault (); // } // TODO: Use event.key instead where supported var keyCode = cast convertKeyCode(event.keyCode != null ? event.keyCode : event.which); var modifier = (event.shiftKey ? (KeyModifier.SHIFT) : 0) | (event.ctrlKey ? (KeyModifier.CTRL) : 0) | (event.altKey ? (KeyModifier.ALT) : 0) | (event.metaKey ? (KeyModifier.META) : 0); if (event.type == "keydown") { parent.window.onKeyDown.dispatch(keyCode, modifier); if (parent.window.onKeyDown.canceled && event.cancelable) { event.preventDefault(); } } else { parent.window.onKeyUp.dispatch(keyCode, modifier); if (parent.window.onKeyUp.canceled && event.cancelable) { event.preventDefault(); } } } } private function handleSensorEvent(event:DeviceMotionEvent):Void { accelerometer.onUpdate.dispatch(event.accelerationIncludingGravity.x, event.accelerationIncludingGravity.y, event.accelerationIncludingGravity.z); } private function handleWindowEvent(event:js.html.Event):Void { if (parent.window != null) { switch (event.type) { case "focus": if (hidden) { parent.window.onFocusIn.dispatch(); parent.window.onActivate.dispatch(); hidden = false; } case "blur": if (!hidden) { parent.window.onFocusOut.dispatch(); parent.window.onDeactivate.dispatch(); hidden = true; } case "visibilitychange": if (Browser.document.hidden) { if (!hidden) { parent.window.onFocusOut.dispatch(); parent.window.onDeactivate.dispatch(); hidden = true; } } else { if (hidden) { parent.window.onFocusIn.dispatch(); parent.window.onActivate.dispatch(); hidden = false; } } case "resize": parent.window.__backend.handleResizeEvent(event); case "beforeunload": // Mobile Chrome dispatches 'beforeunload' after device sleep, // but returns later without reloading the page. This triggers // a window.onClose(), without us creating the window again. // // For now, let focus in/out and activate/deactivate trigger // on blur and focus, and do not dispatch a closed window event // since it may actually never close. // if (!event.defaultPrevented) { // parent.window.onClose.dispatch (); // if (parent.window != null && parent.window.onClose.canceled && event.cancelable) { // event.preventDefault (); // } // } } } } private function updateGameDevices():Void { var devices = Joystick.__getDeviceData(); if (devices == null) return; var id, gamepad, joystick, data:Dynamic, cache; for (i in 0...devices.length) { id = i; data = devices[id]; if (data == null) continue; if (!gameDeviceCache.exists(id)) { cache = new GameDeviceData(); cache.id = id; cache.connected = data.connected; for (i in 0...data.buttons.length) { cache.buttons.push(data.buttons[i].value); } for (i in 0...data.axes.length) { cache.axes.push(data.axes[i]); } if (data.mapping == "standard") { cache.isGamepad = true; } gameDeviceCache.set(id, cache); if (data.connected) { Joystick.__connect(id); if (cache.isGamepad) { Gamepad.__connect(id); } } } cache = gameDeviceCache.get(id); joystick = Joystick.devices.get(id); gamepad = Gamepad.devices.get(id); if (data.connected) { var button:GamepadButton; var value:Float; for (i in 0...data.buttons.length) { value = data.buttons[i].value; if (value != cache.buttons[i]) { if (i == 6) { joystick.onAxisMove.dispatch(data.axes.length, value); if (gamepad != null) gamepad.onAxisMove.dispatch(GamepadAxis.TRIGGER_LEFT, value); } else if (i == 7) { joystick.onAxisMove.dispatch(data.axes.length + 1, value); if (gamepad != null) gamepad.onAxisMove.dispatch(GamepadAxis.TRIGGER_RIGHT, value); } else { if (value > 0) { joystick.onButtonDown.dispatch(i); } else { joystick.onButtonUp.dispatch(i); } if (gamepad != null) { button = switch (i) { case 0: GamepadButton.A; case 1: GamepadButton.B; case 2: GamepadButton.X; case 3: GamepadButton.Y; case 4: GamepadButton.LEFT_SHOULDER; case 5: GamepadButton.RIGHT_SHOULDER; case 8: GamepadButton.BACK; case 9: GamepadButton.START; case 10: GamepadButton.LEFT_STICK; case 11: GamepadButton.RIGHT_STICK; case 12: GamepadButton.DPAD_UP; case 13: GamepadButton.DPAD_DOWN; case 14: GamepadButton.DPAD_LEFT; case 15: GamepadButton.DPAD_RIGHT; case 16: GamepadButton.GUIDE; default: continue; } if (value > 0) { gamepad.onButtonDown.dispatch(button); } else { gamepad.onButtonUp.dispatch(button); } } } cache.buttons[i] = value; } } for (i in 0...data.axes.length) { if (data.axes[i] != cache.axes[i]) { joystick.onAxisMove.dispatch(i, data.axes[i]); if (gamepad != null) gamepad.onAxisMove.dispatch(i, data.axes[i]); cache.axes[i] = data.axes[i]; } } } else if (cache.connected) { cache.connected = false; Joystick.__disconnect(id); Gamepad.__disconnect(id); } } } } class GameDeviceData { public var connected:Bool; public var id:Int; public var isGamepad:Bool; public var buttons:Array; public var axes:Array; public function new() { connected = true; buttons = []; axes = []; } } ================================================ FILE: src/lime/_internal/backend/html5/HTML5AudioSource.hx ================================================ package lime._internal.backend.html5; import lime.math.Vector4; import lime.media.AudioSource; @:access(lime.media.AudioBuffer) class HTML5AudioSource { private var completed:Bool; private var gain:Float; private var id:Int; private var length:Int; private var loops:Int; private var parent:AudioSource; private var playing:Bool; private var position:Vector4; public function new(parent:AudioSource) { this.parent = parent; id = -1; gain = 1; position = new Vector4(); } public function dispose():Void {} public function init():Void { #if lime_howlerjs // Initialize the panner with default values parent.buffer.src.pannerAttr( { coneInnerAngle: 360, coneOuterAngle: 360, coneOuterGain: 0, distanceModel: "inverse", maxDistance: 10000, refDistance: 1, rolloffFactor: 1, panningModel: "equalpower" // Default to equalpower for better performance }); #end } public function play():Void { #if lime_howlerjs if (playing || parent.buffer == null || parent.buffer.__srcHowl == null) { return; } playing = true; var time = getCurrentTime(); completed = false; var cacheVolume = untyped parent.buffer.__srcHowl._volume; untyped parent.buffer.__srcHowl._volume = parent.gain; id = parent.buffer.__srcHowl.play(); untyped parent.buffer.__srcHowl._volume = cacheVolume; // setGain (parent.gain); setPosition(parent.position); parent.buffer.__srcHowl.on("end", howl_onEnd, id); // Calling setCurrentTime causes html5 audio to replay from this position on next frame #if force_html5_audio if (time == 0) setCurrentTime(time); #else setCurrentTime(time); #end #end } public function pause():Void { #if lime_howlerjs playing = false; if (parent.buffer != null && parent.buffer.__srcHowl != null) { parent.buffer.__srcHowl.pause(id); } #end } public function stop():Void { #if lime_howlerjs playing = false; if (parent.buffer != null && parent.buffer.__srcHowl != null) { parent.buffer.__srcHowl.stop(id); parent.buffer.__srcHowl.off("end", howl_onEnd, id); } #end } // Event Handlers private function howl_onEnd() { #if lime_howlerjs playing = false; if (loops > 0) { loops--; stop(); // currentTime = 0; play(); return; } else if (parent.buffer != null && parent.buffer.__srcHowl != null) { parent.buffer.__srcHowl.stop(id); parent.buffer.__srcHowl.off("end", howl_onEnd, id); } completed = true; parent.onComplete.dispatch(); #end } // Get & Set Methods public function getCurrentTime():Int { if (id == -1) { return 0; } #if lime_howlerjs if (completed) { return getLength(); } else if (parent.buffer != null && parent.buffer.__srcHowl != null) { var time = Std.int(parent.buffer.__srcHowl.seek(id) * 1000) - parent.offset; if (time < 0) return 0; return time; } #end return 0; } public function setCurrentTime(value:Int):Int { #if lime_howlerjs if (parent.buffer != null && parent.buffer.__srcHowl != null) { // if (playing) buffer.__srcHowl.play (id); var pos = (value + parent.offset) / 1000; if (pos < 0) pos = 0; parent.buffer.__srcHowl.seek(pos, id); } #end return value; } public function getGain():Float { return gain; } public function setGain(value:Float):Float { #if lime_howlerjs // set howler volume only if we have an active id. // Passing -1 might create issues in future play()'s. if (parent.buffer != null && parent.buffer.__srcHowl != null && id != -1) { parent.buffer.__srcHowl.volume(value, id); } #end return gain = value; } public function getLength():Int { if (length != 0) { return length; } #if lime_howlerjs if (parent.buffer != null && parent.buffer.__srcHowl != null) { return Std.int(parent.buffer.__srcHowl.duration() * 1000); } #end return 0; } public function setLength(value:Int):Int { return length = value; } public function getLoops():Int { return loops; } public function setLoops(value:Int):Int { return loops = value; } public function getPitch():Float { #if lime_howlerjs return parent.buffer.__srcHowl.rate(); #else return 1; #end } public function setPitch(value:Float):Float { #if lime_howlerjs parent.buffer.__srcHowl.rate(value); #end return getPitch(); } public function getPosition():Vector4 { #if lime_howlerjs // This should work, but it returns null (But checking the inside of the howl, the _pos is actually null... so ¯\_(ツ)_/¯) /* var arr = parent.buffer.__srcHowl.pos()) position.x = arr[0]; position.y = arr[1]; position.z = arr[2]; */ #end return position; } public function setPosition(value:Vector4):Vector4 { position.x = value.x; position.y = value.y; position.z = value.z; position.w = value.w; #if lime_howlerjs if (parent.buffer != null && parent.buffer.__srcHowl != null && parent.buffer.__srcHowl.pos != null) parent.buffer.__srcHowl.pos(position.x, position.y, position.z, id); // There are more settings to the position of the sound on the "pannerAttr()" function of howler. Maybe somebody who understands sound should look into it? #end return position; } } ================================================ FILE: src/lime/_internal/backend/html5/HTML5HTTPRequest.hx ================================================ package lime._internal.backend.html5; import haxe.io.Bytes; import js.html.AnchorElement; import js.html.Blob; import js.html.ErrorEvent; import js.html.Event; import js.html.Image as JSImage; import js.html.ProgressEvent; import js.html.URL; import js.html.XMLHttpRequest; import js.html.XMLHttpRequestResponseType; import js.Browser; import lime._internal.format.Base64; import lime.app.Future; import lime.app.Promise; import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.net.HTTPRequest; import lime.net.HTTPRequestHeader; import lime.utils.AssetType; @:access(lime.graphics.ImageBuffer) @:access(lime.graphics.Image) class HTML5HTTPRequest { private static inline var OPTION_REVOKE_URL:Int = 1 << 0; private static var activeRequests = 0; private static var originElement:AnchorElement; private static var originHostname:String; private static var originPort:String; private static var originProtocol:String; private static var requestLimit = 17; private static var requestQueue = new List(); private static var supportsImageProgress:Null; private var binary:Bool; private var parent:_IHTTPRequest; private var request:XMLHttpRequest; private var validStatus0:Bool; public function new() { validStatus0 = #if allow_status_0 true #else ~/Tizen/gi.match(Browser.window.navigator.userAgent) #end; } public function cancel():Void { if (request != null) { request.abort(); } } public function init(parent:_IHTTPRequest):Void { this.parent = parent; } private function load(uri:String, progress:Dynamic, readyStateChange:Dynamic):Void { request = new XMLHttpRequest(); if (parent.method == POST) { if(request.upload != null) request.upload.addEventListener("progress", progress, false); } else { request.addEventListener("progress", progress, false); } request.onreadystatechange = readyStateChange; var query = ""; if (parent.data == null) { for (key in parent.formData.keys()) { if (query.length > 0) query += "&"; var value:Dynamic = parent.formData.get(key); if (key.indexOf("[]") > -1 && (value is Array)) { var arrayValue:String = Lambda.map(value, function(v:String) { return StringTools.urlEncode(v); }).join('&${key}='); query += StringTools.urlEncode(key) + "=" + arrayValue; } else { query += StringTools.urlEncode(key) + "=" + StringTools.urlEncode(Std.string(value)); } } if (parent.method == GET && query != "") { if (uri.indexOf("?") > -1) { uri += "&" + query; } else { uri += "?" + query; } query = ""; } } request.open(Std.string(parent.method), uri, true); if (parent.timeout > 0) { request.timeout = parent.timeout; } if (binary) { request.responseType = ARRAYBUFFER; } var contentType = null; for (header in parent.headers) { if (header.name == "Content-Type") { contentType = header.value; } else { request.setRequestHeader(header.name, header.value); } } if (parent.contentType != null) { contentType = parent.contentType; } if (contentType == null) { if (parent.data != null) { contentType = "application/octet-stream"; } else if (query != "") { contentType = "application/x-www-form-urlencoded"; } } if (contentType != null) { request.setRequestHeader("Content-Type", contentType); } if (parent.withCredentials) { request.withCredentials = true; } if (parent.data != null) { request.send(parent.data.getData()); } else { request.send(query); } } public function loadData(uri:String):Future { var promise = new Promise(); if (activeRequests < requestLimit) { activeRequests++; __loadData(uri, promise); } else { requestQueue.add( { instance: this, uri: uri, promise: promise, type: AssetType.BINARY, options: 0 }); } return promise.future; } private static function loadImage(uri:String):Future { var promise = new Promise(); if (activeRequests < requestLimit) { activeRequests++; __loadImage(uri, promise, 0); } else { requestQueue.add( { instance: null, uri: uri, promise: promise, type: AssetType.IMAGE, options: 0 }); } return promise.future; } private static function loadImageFromBytes(bytes:Bytes, type:String):Future { var uri = __createBlobURIFromBytes(bytes, type); if (uri != null) { var promise = new Promise(); if (activeRequests < requestLimit) { activeRequests++; __loadImage(uri, promise, OPTION_REVOKE_URL); } else { requestQueue.add( { instance: null, uri: uri, promise: promise, type: AssetType.IMAGE, options: OPTION_REVOKE_URL }); } return promise.future; } else { return loadImage("data:" + type + ";base64," + Base64.encode(bytes)); } } public function loadText(uri:String):Future { var promise = new Promise(); if (activeRequests < requestLimit) { activeRequests++; __loadText(uri, promise); } else { requestQueue.add( { instance: this, uri: uri, promise: promise, type: AssetType.TEXT, options: 0 }); } return promise.future; } private static function processQueue():Void { if (activeRequests < requestLimit && requestQueue.length > 0) { activeRequests++; var queueItem = requestQueue.pop(); switch (queueItem.type) { case IMAGE: __loadImage(queueItem.uri, queueItem.promise, queueItem.options); case TEXT: queueItem.instance.__loadText(queueItem.uri, queueItem.promise); case BINARY: queueItem.instance.__loadData(queueItem.uri, queueItem.promise); default: activeRequests--; } } } private function processResponse():Void { if (parent.enableResponseHeaders) { parent.responseHeaders = []; var name:String; var value:String; for (line in request.getAllResponseHeaders().split("\n")) { name = StringTools.trim(line.substr(0, line.indexOf(":"))); value = StringTools.trim(line.substr(line.indexOf(":") + 1)); if (name != "") { parent.responseHeaders.push(new HTTPRequestHeader(name, value)); } } } parent.responseStatus = request.status; } private static inline function __createBlobURIFromBytes(bytes:Bytes, type:String):String { return URL.createObjectURL(new Blob([bytes.getData()], {type: type})); } private static function __fixHostname(hostname:String):String { return hostname == null ? "" : hostname; } private static function __fixPort(port:String, protocol:String):String { if (port == null || port == "") { return switch (protocol) { case "ftp:": "21"; case "gopher:": "70"; case "http:": "80"; case "https:": "443"; case "ws:": "80"; case "wss:": "443"; default: ""; } } return port; } private static function __fixProtocol(protocol:String):String { return (protocol == null || protocol == "") ? "http:" : protocol; } private static function __isInMemoryURI(uri:String):Bool { return StringTools.startsWith(uri, "data:") || StringTools.startsWith(uri, "blob:"); } private static function __isSameOrigin(path:String):Bool { if (path == null || path == "") return true; if (__isInMemoryURI(path)) return true; if (originElement == null) { originElement = Browser.document.createAnchorElement(); originHostname = __fixHostname(Browser.location.hostname); originProtocol = __fixProtocol(Browser.location.protocol); originPort = __fixPort(Browser.location.port, originProtocol); } var a = originElement; a.href = path; if (a.hostname == "") { // Workaround for IE, updates other properties a.href = a.href; } var hostname = __fixHostname(a.hostname); var protocol = __fixProtocol(a.protocol); var port = __fixPort(a.port, protocol); var sameHost = (hostname == "" || (hostname == originHostname)); var samePort = (port == "" || (port == originPort)); return (protocol != "file:" && sameHost && samePort); } public function __loadData(uri:String, promise:Promise):Void { var progress = function(event) { promise.progress(event.loaded, event.total); } var readyStateChange = function(event) { if (request.readyState != 4) return; var bytes = null; if (request.responseType == NONE) { if (request.responseText != null) { bytes = Bytes.ofString(request.responseText); } } else if (request.response != null) { bytes = Bytes.ofData(request.response); } if (request.status != null && ((request.status >= 200 && request.status < 400) || (validStatus0 && request.status == 0))) { processResponse(); promise.complete(bytes); } else { processResponse(); promise.error(new _HTTPRequestErrorResponse(request.status, bytes)); } request = null; activeRequests--; processQueue(); } binary = true; load(uri, progress, readyStateChange); } private static function __loadImage(uri:String, promise:Promise, options:Int):Void { var image:JSImage = untyped #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); if (!__isSameOrigin(uri)) { image.crossOrigin = "Anonymous"; } if (supportsImageProgress == null) { supportsImageProgress = untyped #if haxe4 js.Syntax.code #else __js__ #end ("'onprogress' in image"); } if (supportsImageProgress || __isInMemoryURI(uri)) { image.addEventListener("load", function(event) { __revokeBlobURI(uri, options); var buffer = new ImageBuffer(null, image.width, image.height); buffer.__srcImage = cast image; activeRequests--; processQueue(); promise.complete(new Image(buffer)); }, false); image.addEventListener("progress", function(event) { promise.progress(event.loaded, event.total); }, false); image.addEventListener("error", function(event) { __revokeBlobURI(uri, options); activeRequests--; processQueue(); promise.error(new _HTTPRequestErrorResponse(event.detail, null)); }, false); image.src = uri; } else { var request = new XMLHttpRequest(); request.onload = function(_) { activeRequests--; processQueue(); var img = new Image(); img.__fromBytes(Bytes.ofData(request.response), function(img) { promise.complete(img); }); } request.onerror = function(event:ErrorEvent) { promise.error(new _HTTPRequestErrorResponse(event.message, null)); } request.onprogress = function(event:ProgressEvent) { if (event.lengthComputable) { promise.progress(event.loaded, event.total); } } request.open("GET", uri, true); request.responseType = XMLHttpRequestResponseType.ARRAYBUFFER; request.overrideMimeType('text/plain; charset=x-user-defined'); request.send(null); } } private function __loadText(uri:String, promise:Promise):Void { var progress = function(event) { promise.progress(event.loaded, event.total); } var readyStateChange = function(event) { if (request.readyState != 4) return; if (request.status != null && ((request.status >= 200 && request.status < 400) || (validStatus0 && request.status == 0))) { processResponse(); promise.complete(request.responseText); } else { processResponse(); promise.error(new _HTTPRequestErrorResponse(request.status, request.responseText)); } request = null; activeRequests--; processQueue(); } binary = false; load(uri, progress, readyStateChange); } private static function __revokeBlobURI(uri:String, options:Int):Void { if ((options & OPTION_REVOKE_URL) != 0) { URL.revokeObjectURL(uri); } } } @:dox(hide) typedef QueueItem = { var instance:HTML5HTTPRequest; var type:AssetType; var promise:Dynamic; var uri:String; var options:Int; } ================================================ FILE: src/lime/_internal/backend/html5/HTML5Thread.hx ================================================ package lime._internal.backend.html5; import lime.app.Event; #if macro import haxe.macro.Context; import haxe.macro.Expr; import haxe.macro.Type; using haxe.macro.Context; using haxe.macro.TypeTools; using haxe.macro.TypedExprTools; #else // Not safe to import js package during macros. import js.Browser; import js.html.*; import js.Lib; #if haxe4 import js.lib.Function; import js.lib.Object; import js.lib.Promise; import js.Syntax; #else import js.Promise; #end // Same with classes that import lots of other things. import lime.app.Application; #end /** Emulates much of the `sys.thread.Thread` API using web workers. **/ class HTML5Thread { private static var __current:HTML5Thread = new HTML5Thread(Lib.global.location.href); private static var __isWorker:Bool #if !macro = #if !haxe4 untyped __js__ #else Syntax.code #end ('typeof window == "undefined"') #end; private static var __messages:List = new List(); private static var __resolveMethods:ListVoid> = new List(); private static var __workerCount:Int = 0; /** The entry point into a worker script. Lime's output JS file normally does not begin on its own. Instead it registers a `lime.embed()` callback for index.html to use. When this JS file is run as a web worker, it isn't running within index.html, so `embed()` never gets called. Instead, `__init__()` registers a message listener. **/ private static function __init__():Void { #if !macro if (#if !haxe4 untyped __js__ #else Syntax.code #end ('typeof window == "undefined"')) { Lib.global.onmessage = function(event:MessageEvent):Void { var job:WorkFunctionVoid> = event.data; try { Lib.global.onmessage = __current.dispatchMessage; job.dispatch(); } catch (e:Dynamic) { __current.destroy(); } }; } #end } public static inline function current():HTML5Thread { return __current; } public static function create(job:WorkFunctionVoid>):HTML5Thread { #if !macro // Find the URL of the primary JS file. var url:URL = new URL(__current.__href); url.pathname = url.pathname.substr(0, url.pathname.lastIndexOf("/") + 1) + Application.current.meta["file"] + ".js"; // Use the hash to distinguish workers. if (url.hash.length > 0) url.hash += "_"; url.hash += __workerCount; __workerCount++; // Prepare to send the job. job.makePortable(); // Create the worker. Because the worker's scope will not include a // `window`, `HTML5Thread.__init__()` will add a listener. var thread:HTML5Thread = new HTML5Thread(url.href, new Worker(url.href)); // Run `job` on the new thread. thread.sendMessage(#if !haxe4 cast #end job); return thread; #else return null; #end } #if !macro private static inline function zeroDelay():Promise { return new Promise(function(resolve, _):Void { js.Lib.global.setTimeout(resolve); }); } #end /** Reads a message from the thread queue. Returns `null` if no message is available. This may only be called inside an `async` function. @param block If true, waits for the next message before returning. @see `lime.system.WorkOutput.JSAsync.async()` **/ public static macro function readMessage(block:ExprOf):Dynamic { var jsCode:Expr = macro #if haxe4 js.Syntax.code #else untyped __js__ #end; // `onmessage` events are only received when the main function is // suspended, so we must insert `await` even if `block` is false. // TODO: find a more efficient way to read messages. var zeroDelayExpr:Expr = macro @:privateAccess $jsCode("await {0}", lime._internal.backend.html5.HTML5Thread.zeroDelay()) .then(function(_) return lime._internal.backend.html5.HTML5Thread.__messages.pop()); switch (block.expr) { case EConst(CIdent("false")): return zeroDelayExpr; default: return macro if ($block && @:privateAccess lime._internal.backend.html5.HTML5Thread.__messages.isEmpty()) { $jsCode("await {0}", new #if haxe4 js.lib.Promise #else js.Promise #end (function(resolve, _):Void { @:privateAccess lime._internal.backend.html5.HTML5Thread.__resolveMethods.add(resolve); } )); } else $zeroDelayExpr; } } /** Sends a message back to the thread that spawned this worker. Has no effect if called from the main thread. @param preserveClasses Whether to call `preserveClasses()` first. **/ public static function returnMessage(message:Message, transferList:Array = null, preserveClasses:Bool = true):Void { if (__isWorker) { if (preserveClasses) { message.preserveClasses(); } Lib.global.postMessage(message, transferList); } } @:op(A == B) private static inline function equals(a:HTML5Thread, b:HTML5Thread):Bool { return a.__href == b.__href; } /** Dispatches only messages coming from this `HTML5Thread`. Only available in the case of `HTML5Thread.create()`; never available via `current()`. **/ public var onMessage(default, null):NullVoid>>; private var __href:String; private var __worker:Null; private function new(href:String, worker:Worker = null) { #if !macro __href = href; if (worker != null) { __worker = worker; __worker.onmessage = dispatchMessage; onMessage = new EventVoid>(); } // If an `HTML5Thread` instance is passed to a different thread than // where it was created, all of its instance methods will behave // incorrectly. You can still check equality, but that's it. Therefore, // it's best to make `preserveClasses()` skip this class. Message.disablePreserveClasses(this); #end } /** Send a message to the thread queue. This message can be read using `readMessage()` or by listening for the `onMessage` event. @param preserveClasses Whether to call `preserveClasses()` first. **/ public function sendMessage(message:Message, transferList:Array = null, preserveClasses:Bool = true):Void { #if !macro if (__worker != null) { if (preserveClasses) { message.preserveClasses(); } __worker.postMessage(message, transferList); } else { // No need for `restoreClasses()` because it came from this thread. __messages.add(message); } #end } #if !macro private function dispatchMessage(event:MessageEvent):Void { var message:Message = event.data; message.restoreClasses(); if (onMessage != null) { onMessage.dispatch(message); } if (__resolveMethods.isEmpty()) { __messages.add(message); } else { __resolveMethods.pop()(message); } } #end /** Closes this thread unless it's the main thread. **/ public function destroy():Void { #if !macro if (__worker != null) { __worker.terminate(); } else if (__isWorker) { try { Lib.global.close(); } catch (e:Dynamic) {} } #end } public inline function isWorker():Bool { return __worker != null || __isWorker; } } abstract WorkFunction(WorkFunctionData) from WorkFunctionData { /** Whether this function is ready to copy across threads. If not, call `makePortable()` before sending it. **/ public var portable(get, never):Bool; #if macro /** Parses a chain of nested `EField` expressions. @return An array of all identifiers in the chain, as strings. If the chain began with something other than an identifier, it will be returned as the `initialExpr`. For instance, `array[i].foo.bar` will result in `chain == ["foo", "bar"]` and `initialExpr == array[i]`. **/ private static function parseFieldChain(chain:Expr):{ chain:Array, ?initialExpr:Expr } { switch(chain.expr) { case EConst(CIdent(ident)): return { chain: [ident] }; case EField(e, field): var out = parseFieldChain(e); out.chain.push(field); return out; default: return { chain: [], initialExpr: chain }; } } #end // `@:from` would cause errors during the macro phase. @:noCompletion @:dox(hide) #if !macro @:from #end public static #if !macro macro #end function fromFunction(func:ExprOf) { var defaultOutput:Expr = macro { func: $func }; if (!Context.defined("lime-threads")) { return defaultOutput; } else { // Haxe likes to pass `@:this this` instead of the actual // expression, so use a roundabout method to convert back. As a // happy side-effect, it fully qualifies the expression. var qualifiedFunc:String = func.typeExpr().toString(true); // Match the package, class name, and field name. var matcher:EReg = ~/^((?:_?\w+\.)*[A-Z]\w*)\.(_*[a-z]\w*)$/; if (!matcher.match(qualifiedFunc)) { if (Context.defined("lime-warn-portability")) { Context.warning("Value doesn't appear to be a static function.", func.pos); } return defaultOutput; } var classPath:String = matcher.matched(1); var functionName:String = matcher.matched(2); return macro { func: $func, classPath: $v{classPath}, functionName: $v{functionName} }; } } /** Executes this function on the current thread. **/ public macro function dispatch(self:ExprOf>, args:Array):Expr { return macro $self.toFunction()($a{args}); } #if haxe4 @:to #end public function toFunction():T { if (this.func != null) { return this.func; } else if (this.classPath != null && this.functionName != null) { #if !macro this.func = #if !haxe4 untyped __js__ #else Syntax.code #end ("$hxClasses[{0}][{1}]", this.classPath, this.functionName); #end return this.func; } else if (this.sourceCode != null) { #if !macro this.func = #if !haxe4 untyped __js__ #else Syntax.code #end ('new Function("return " + {0})()', this.sourceCode); #end return this.func; } throw 'Object is not a valid WorkFunction: $this'; } /** Attempts to make this function safe for passing across threads. @return Whether this function is now portable. If false, try a static function instead, and make sure you aren't using `bind()`. **/ public function makePortable(throwError:Bool = true):Bool { if (this.func != null) { // Make sure `classPath.functionName` points to the actual function. if (this.classPath != null || this.functionName != null) { #if !macro var func = #if !haxe4 untyped __js__ #else Syntax.code #end ("$hxClasses[{0}] && $hxClasses[{0}][{1}]", this.classPath, this.functionName); if (func != this.func) { throw 'Could not make ${this.functionName} portable. Either ${this.functionName} isn\'t static, or ${this.classPath} is something other than a class.'; } else { // All set. this.func = null; return true; } #end } else { #if !macro this.sourceCode = (cast this.func #if haxe4 :Function #end).toString(); if (this.sourceCode.indexOf("[native code]") < 0) { // All set. this.func = null; return true; } else { this.sourceCode = null; } #end // If you aren't sure why you got this message, make sure your // variables are of type `WorkFunction`. // This won't work: // var f = MyClass.staticFunction; // bgWorker.run(f); // ...but this will: // var f:WorkFunctionVoid> = MyClass.staticFunction; // bgWorker.run(f); throw "Only static class functions can be made portable. Set -Dlime-warn-portability to see which line caused this."; } } return portable; } // Getters & Setters private inline function get_portable():Bool { return this.func == null; } } /** Stores the class path and function name of a function, so that it can be found again in the background thread. **/ typedef WorkFunctionData = { @:optional var classPath:String; @:optional var functionName:String; @:optional var sourceCode:String; @:optional var func:T; }; @:forward @:allow(lime._internal.backend.html5.HTML5Thread) abstract Message(Dynamic) from Dynamic to Dynamic { private static inline var PROTOTYPE_FIELD:String = "__prototype__"; private static inline var SKIP_FIELD:String = "__skipPrototype__"; private static inline var RESTORE_FIELD:String = "__restoreFlag__"; #if !macro private static inline function skip(object:Dynamic):Bool { // Skip `null` for obvious reasons. return object == null // No need to preserve a primitive type. || !#if (haxe_ver >= 4.2) Std.isOfType #else Std.is #end (object, Object) // Objects with this field have been deliberately excluded. || Reflect.field(object, SKIP_FIELD) == true // A `Uint8Array` (the type used by `haxe.io.Bytes`) can have // thousands or millions of fields, which can take entire seconds to // enumerate. This also applies to `Int8Array`, `Float64Array`, etc. || object.byteLength != null && object.byteOffset != null && object.buffer != null && #if (haxe_ver >= 4.2) Std.isOfType #else Std.is #end (object.buffer, #if haxe4 js.lib.ArrayBuffer #else js.html.ArrayBuffer #end); } #end /** Prevents `preserveClasses()` from working on the given object. Note: if its class isn't preserved, `cast(object, Foo)` will fail with the unhelpful message "uncaught exception: Object" and no line number. **/ public static function disablePreserveClasses(object:Dynamic):Void { #if !macro if (skip(object)) { return; } Reflect.setField(object, Message.SKIP_FIELD, true); #end } /** Adds class information to this message and all children, so that it will survive being passed across threads. "Children" are the values returned by `Object.values()`. **/ public function preserveClasses():Void { #if !macro if (skip(this) || Reflect.hasField(this, PROTOTYPE_FIELD)) { return; } // Preserve this object's class. if (!#if (haxe_ver >= 4.2) Std.isOfType #else Std.is #end (this, Array)) { try { if (this.__class__ != null) { #if haxe4 Reflect.setField(this, PROTOTYPE_FIELD, this.__class__.__name__); #else Reflect.setField(this, PROTOTYPE_FIELD, this.__class__.__name__.join(".")); #end } else { Reflect.setField(this, PROTOTYPE_FIELD, null); } } catch (e:Dynamic) { // Probably a frozen object; no need to recurse. return; } // While usually it's the user's job not to include any functions, // enums come with a built-in `toString` function that needs to be // removed, and it isn't fair to ask the user to know that. if (#if haxe4 Syntax.code #else untyped __js__ #end ('typeof {0}.toString == "function"', this)) { Reflect.deleteField(this, "toString"); } } // Recurse. for (child in Object.values(this)) { (child:Message).preserveClasses(); } #end } /** Restores the class information preserved by `preserveClasses()`. @param flag Leave this `null`. **/ private function restoreClasses(flag:Int = null):Void { #if !macro // Attempt to choose a unique flag. if (flag == null) { // JavaScript's limit is 2^53; Haxe 3's limit is much lower. flag = Std.int(Math.random() * 0x7FFFFFFF); if (Reflect.field(this, RESTORE_FIELD) == flag) { flag++; } } if (skip(this) || Reflect.field(this, RESTORE_FIELD) == flag) { return; } try { Reflect.setField(this, RESTORE_FIELD, flag); } catch (e:Dynamic) { // Probably a frozen object; no need to continue. return; } // Restore this object's class. if (Reflect.field(this, PROTOTYPE_FIELD) != null) { try { Object.setPrototypeOf(this, #if haxe4 Syntax.code #else untyped __js__ #end ("$hxClasses[{0}].prototype", Reflect.field(this, PROTOTYPE_FIELD))); } catch (e:Dynamic) {} } // Recurse. for (child in Object.values(this)) { (child:Message).restoreClasses(flag); } #end } } #if macro typedef Worker = Dynamic; typedef URL = Dynamic; class Object {} class Browser { public static var window:Dynamic; } class Lib { public static var global:Dynamic = { location: {} }; } #end /** An object to transfer, rather than copy. Abstract types like `lime.utils.Int32Array` and `openfl.utils.ByteArray` can be automatically converted. However, extern classes like `js.lib.Int32Array` typically can't. @see https://developer.mozilla.org/en-US/docs/Glossary/Transferable_objects **/ // Mozilla uses "transferable" and "transferrable" interchangeably, but the HTML // specification only uses the former. @:forward abstract Transferable(Dynamic) #if macro from Dynamic #else from lime.utils.ArrayBuffer from js.html.MessagePort from js.html.ImageBitmap #end { } #if (!haxe4 && !macro) @:native("Object") extern class Object { static function setPrototypeOf(obj:T, prototype:Null<{}>):T; @:pure static function values(obj:{}):Array; static var prototype(default, never):Dynamic; } #end ================================================ FILE: src/lime/_internal/backend/html5/HTML5WebGL2RenderContext.hx ================================================ package lime._internal.backend.html5; import js.html.webgl.RenderingContext in WebGLRenderingContext; import lime.graphics.opengl.*; import lime.utils.ArrayBuffer; import lime.utils.ArrayBufferView; import lime.utils.DataPointer; import lime.utils.Float32Array; import lime.utils.Int32Array; import lime.utils.UInt32Array; @:native("WebGL2RenderingContext") extern class HTML5WebGL2RenderContext extends WebGLRenderingContext { public var DEPTH_BUFFER_BIT:Int; public var STENCIL_BUFFER_BIT:Int; public var COLOR_BUFFER_BIT:Int; public var POINTS:Int; public var LINES:Int; public var LINE_LOOP:Int; public var LINE_STRIP:Int; public var TRIANGLES:Int; public var TRIANGLE_STRIP:Int; public var TRIANGLE_FAN:Int; public var ZERO:Int; public var ONE:Int; public var SRC_COLOR:Int; public var ONE_MINUS_SRC_COLOR:Int; public var SRC_ALPHA:Int; public var ONE_MINUS_SRC_ALPHA:Int; public var DST_ALPHA:Int; public var ONE_MINUS_DST_ALPHA:Int; public var DST_COLOR:Int; public var ONE_MINUS_DST_COLOR:Int; public var SRC_ALPHA_SATURATE:Int; public var FUNC_ADD:Int; public var BLEND_EQUATION:Int; public var BLEND_EQUATION_RGB:Int; public var BLEND_EQUATION_ALPHA:Int; public var FUNC_SUBTRACT:Int; public var FUNC_REVERSE_SUBTRACT:Int; public var BLEND_DST_RGB:Int; public var BLEND_SRC_RGB:Int; public var BLEND_DST_ALPHA:Int; public var BLEND_SRC_ALPHA:Int; public var CONSTANT_COLOR:Int; public var ONE_MINUS_CONSTANT_COLOR:Int; public var CONSTANT_ALPHA:Int; public var ONE_MINUS_CONSTANT_ALPHA:Int; public var BLEND_COLOR:Int; public var ARRAY_BUFFER:Int; public var ELEMENT_ARRAY_BUFFER:Int; public var ARRAY_BUFFER_BINDING:Int; public var ELEMENT_ARRAY_BUFFER_BINDING:Int; public var STREAM_DRAW:Int; public var STATIC_DRAW:Int; public var DYNAMIC_DRAW:Int; public var BUFFER_SIZE:Int; public var BUFFER_USAGE:Int; public var CURRENT_VERTEX_ATTRIB:Int; public var FRONT:Int; public var BACK:Int; public var FRONT_AND_BACK:Int; public var CULL_FACE:Int; public var BLEND:Int; public var DITHER:Int; public var STENCIL_TEST:Int; public var DEPTH_TEST:Int; public var SCISSOR_TEST:Int; public var POLYGON_OFFSET_FILL:Int; public var SAMPLE_ALPHA_TO_COVERAGE:Int; public var SAMPLE_COVERAGE:Int; public var NO_ERROR:Int; public var INVALID_ENUM:Int; public var INVALID_VALUE:Int; public var INVALID_OPERATION:Int; public var OUT_OF_MEMORY:Int; public var CW:Int; public var CCW:Int; public var LINE_WIDTH:Int; public var ALIASED_POINT_SIZE_RANGE:Int; public var ALIASED_LINE_WIDTH_RANGE:Int; public var CULL_FACE_MODE:Int; public var FRONT_FACE:Int; public var DEPTH_RANGE:Int; public var DEPTH_WRITEMASK:Int; public var DEPTH_CLEAR_VALUE:Int; public var DEPTH_FUNC:Int; public var STENCIL_CLEAR_VALUE:Int; public var STENCIL_FUNC:Int; public var STENCIL_FAIL:Int; public var STENCIL_PASS_DEPTH_FAIL:Int; public var STENCIL_PASS_DEPTH_PASS:Int; public var STENCIL_REF:Int; public var STENCIL_VALUE_MASK:Int; public var STENCIL_WRITEMASK:Int; public var STENCIL_BACK_FUNC:Int; public var STENCIL_BACK_FAIL:Int; public var STENCIL_BACK_PASS_DEPTH_FAIL:Int; public var STENCIL_BACK_PASS_DEPTH_PASS:Int; public var STENCIL_BACK_REF:Int; public var STENCIL_BACK_VALUE_MASK:Int; public var STENCIL_BACK_WRITEMASK:Int; public var VIEWPORT:Int; public var SCISSOR_BOX:Int; public var COLOR_CLEAR_VALUE:Int; public var COLOR_WRITEMASK:Int; public var UNPACK_ALIGNMENT:Int; public var PACK_ALIGNMENT:Int; public var MAX_TEXTURE_SIZE:Int; public var MAX_VIEWPORT_DIMS:Int; public var SUBPIXEL_BITS:Int; public var RED_BITS:Int; public var GREEN_BITS:Int; public var BLUE_BITS:Int; public var ALPHA_BITS:Int; public var DEPTH_BITS:Int; public var STENCIL_BITS:Int; public var POLYGON_OFFSET_UNITS:Int; public var POLYGON_OFFSET_FACTOR:Int; public var TEXTURE_BINDING_2D:Int; public var SAMPLE_BUFFERS:Int; public var SAMPLES:Int; public var SAMPLE_COVERAGE_VALUE:Int; public var SAMPLE_COVERAGE_INVERT:Int; public var COMPRESSED_TEXTURE_FORMATS:Int; public var DONT_CARE:Int; public var FASTEST:Int; public var NICEST:Int; public var GENERATE_MIPMAP_HINT:Int; public var BYTE:Int; public var UNSIGNED_BYTE:Int; public var SHORT:Int; public var UNSIGNED_SHORT:Int; public var INT:Int; public var UNSIGNED_INT:Int; public var FLOAT:Int; public var DEPTH_COMPONENT:Int; public var ALPHA:Int; public var RGB:Int; public var RGBA:Int; public var LUMINANCE:Int; public var LUMINANCE_ALPHA:Int; public var UNSIGNED_SHORT_4_4_4_4:Int; public var UNSIGNED_SHORT_5_5_5_1:Int; public var UNSIGNED_SHORT_5_6_5:Int; public var FRAGMENT_SHADER:Int; public var VERTEX_SHADER:Int; public var MAX_VERTEX_ATTRIBS:Int; public var MAX_VERTEX_UNIFORM_VECTORS:Int; public var MAX_VARYING_VECTORS:Int; public var MAX_COMBINED_TEXTURE_IMAGE_UNITS:Int; public var MAX_VERTEX_TEXTURE_IMAGE_UNITS:Int; public var MAX_TEXTURE_IMAGE_UNITS:Int; public var MAX_FRAGMENT_UNIFORM_VECTORS:Int; public var SHADER_TYPE:Int; public var DELETE_STATUS:Int; public var LINK_STATUS:Int; public var VALIDATE_STATUS:Int; public var ATTACHED_SHADERS:Int; public var ACTIVE_UNIFORMS:Int; public var ACTIVE_ATTRIBUTES:Int; public var SHADING_LANGUAGE_VERSION:Int; public var CURRENT_PROGRAM:Int; public var NEVER:Int; public var LESS:Int; public var EQUAL:Int; public var LEQUAL:Int; public var GREATER:Int; public var NOTEQUAL:Int; public var GEQUAL:Int; public var ALWAYS:Int; public var KEEP:Int; public var REPLACE:Int; public var INCR:Int; public var DECR:Int; public var INVERT:Int; public var INCR_WRAP:Int; public var DECR_WRAP:Int; public var VENDOR:Int; public var RENDERER:Int; public var VERSION:Int; public var NEAREST:Int; public var LINEAR:Int; public var NEAREST_MIPMAP_NEAREST:Int; public var LINEAR_MIPMAP_NEAREST:Int; public var NEAREST_MIPMAP_LINEAR:Int; public var LINEAR_MIPMAP_LINEAR:Int; public var TEXTURE_MAG_FILTER:Int; public var TEXTURE_MIN_FILTER:Int; public var TEXTURE_WRAP_S:Int; public var TEXTURE_WRAP_T:Int; public var TEXTURE_2D:Int; public var TEXTURE:Int; public var TEXTURE_CUBE_MAP:Int; public var TEXTURE_BINDING_CUBE_MAP:Int; public var TEXTURE_CUBE_MAP_POSITIVE_X:Int; public var TEXTURE_CUBE_MAP_NEGATIVE_X:Int; public var TEXTURE_CUBE_MAP_POSITIVE_Y:Int; public var TEXTURE_CUBE_MAP_NEGATIVE_Y:Int; public var TEXTURE_CUBE_MAP_POSITIVE_Z:Int; public var TEXTURE_CUBE_MAP_NEGATIVE_Z:Int; public var MAX_CUBE_MAP_TEXTURE_SIZE:Int; public var TEXTURE0:Int; public var TEXTURE1:Int; public var TEXTURE2:Int; public var TEXTURE3:Int; public var TEXTURE4:Int; public var TEXTURE5:Int; public var TEXTURE6:Int; public var TEXTURE7:Int; public var TEXTURE8:Int; public var TEXTURE9:Int; public var TEXTURE10:Int; public var TEXTURE11:Int; public var TEXTURE12:Int; public var TEXTURE13:Int; public var TEXTURE14:Int; public var TEXTURE15:Int; public var TEXTURE16:Int; public var TEXTURE17:Int; public var TEXTURE18:Int; public var TEXTURE19:Int; public var TEXTURE20:Int; public var TEXTURE21:Int; public var TEXTURE22:Int; public var TEXTURE23:Int; public var TEXTURE24:Int; public var TEXTURE25:Int; public var TEXTURE26:Int; public var TEXTURE27:Int; public var TEXTURE28:Int; public var TEXTURE29:Int; public var TEXTURE30:Int; public var TEXTURE31:Int; public var ACTIVE_TEXTURE:Int; public var REPEAT:Int; public var CLAMP_TO_EDGE:Int; public var MIRRORED_REPEAT:Int; public var FLOAT_VEC2:Int; public var FLOAT_VEC3:Int; public var FLOAT_VEC4:Int; public var INT_VEC2:Int; public var INT_VEC3:Int; public var INT_VEC4:Int; public var BOOL:Int; public var BOOL_VEC2:Int; public var BOOL_VEC3:Int; public var BOOL_VEC4:Int; public var FLOAT_MAT2:Int; public var FLOAT_MAT3:Int; public var FLOAT_MAT4:Int; public var SAMPLER_2D:Int; public var SAMPLER_CUBE:Int; public var VERTEX_ATTRIB_ARRAY_ENABLED:Int; public var VERTEX_ATTRIB_ARRAY_SIZE:Int; public var VERTEX_ATTRIB_ARRAY_STRIDE:Int; public var VERTEX_ATTRIB_ARRAY_TYPE:Int; public var VERTEX_ATTRIB_ARRAY_NORMALIZED:Int; public var VERTEX_ATTRIB_ARRAY_POINTER:Int; public var VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:Int; public var COMPILE_STATUS:Int; public var LOW_FLOAT:Int; public var MEDIUM_FLOAT:Int; public var HIGH_FLOAT:Int; public var LOW_INT:Int; public var MEDIUM_INT:Int; public var HIGH_INT:Int; public var FRAMEBUFFER:Int; public var RENDERBUFFER:Int; public var RGBA4:Int; public var RGB5_A1:Int; public var RGB565:Int; public var DEPTH_COMPONENT16:Int; public var STENCIL_INDEX:Int; public var STENCIL_INDEX8:Int; public var DEPTH_STENCIL:Int; public var RENDERBUFFER_WIDTH:Int; public var RENDERBUFFER_HEIGHT:Int; public var RENDERBUFFER_INTERNAL_FORMAT:Int; public var RENDERBUFFER_RED_SIZE:Int; public var RENDERBUFFER_GREEN_SIZE:Int; public var RENDERBUFFER_BLUE_SIZE:Int; public var RENDERBUFFER_ALPHA_SIZE:Int; public var RENDERBUFFER_DEPTH_SIZE:Int; public var RENDERBUFFER_STENCIL_SIZE:Int; public var FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:Int; public var FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:Int; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:Int; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:Int; public var COLOR_ATTACHMENT0:Int; public var DEPTH_ATTACHMENT:Int; public var STENCIL_ATTACHMENT:Int; public var DEPTH_STENCIL_ATTACHMENT:Int; public var NONE:Int; public var FRAMEBUFFER_COMPLETE:Int; public var FRAMEBUFFER_INCOMPLETE_ATTACHMENT:Int; public var FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:Int; public var FRAMEBUFFER_INCOMPLETE_DIMENSIONS:Int; public var FRAMEBUFFER_UNSUPPORTED:Int; public var FRAMEBUFFER_BINDING:Int; public var RENDERBUFFER_BINDING:Int; public var MAX_RENDERBUFFER_SIZE:Int; public var INVALID_FRAMEBUFFER_OPERATION:Int; public var UNPACK_FLIP_Y_WEBGL:Int; public var UNPACK_PREMULTIPLY_ALPHA_WEBGL:Int; public var CONTEXT_LOST_WEBGL:Int; public var UNPACK_COLORSPACE_CONVERSION_WEBGL:Int; public var BROWSER_DEFAULT_WEBGL:Int; public var READ_BUFFER:Int; public var UNPACK_ROW_LENGTH:Int; public var UNPACK_SKIP_ROWS:Int; public var UNPACK_SKIP_PIXELS:Int; public var PACK_ROW_LENGTH:Int; public var PACK_SKIP_ROWS:Int; public var PACK_SKIP_PIXELS:Int; public var TEXTURE_BINDING_3D:Int; public var UNPACK_SKIP_IMAGES:Int; public var UNPACK_IMAGE_HEIGHT:Int; public var MAX_3D_TEXTURE_SIZE:Int; public var MAX_ELEMENTS_VERTICES:Int; public var MAX_ELEMENTS_INDICES:Int; public var MAX_TEXTURE_LOD_BIAS:Int; public var MAX_FRAGMENT_UNIFORM_COMPONENTS:Int; public var MAX_VERTEX_UNIFORM_COMPONENTS:Int; public var MAX_ARRAY_TEXTURE_LAYERS:Int; public var MIN_PROGRAM_TEXEL_OFFSET:Int; public var MAX_PROGRAM_TEXEL_OFFSET:Int; public var MAX_VARYING_COMPONENTS:Int; public var FRAGMENT_SHADER_DERIVATIVE_HINT:Int; public var RASTERIZER_DISCARD:Int; public var VERTEX_ARRAY_BINDING:Int; public var MAX_VERTEX_OUTPUT_COMPONENTS:Int; public var MAX_FRAGMENT_INPUT_COMPONENTS:Int; public var MAX_SERVER_WAIT_TIMEOUT:Int; public var MAX_ELEMENT_INDEX:Int; public var RED:Int; public var RGB8:Int; public var RGBA8:Int; public var RGB10_A2:Int; public var TEXTURE_3D:Int; public var TEXTURE_WRAP_R:Int; public var TEXTURE_MIN_LOD:Int; public var TEXTURE_MAX_LOD:Int; public var TEXTURE_BASE_LEVEL:Int; public var TEXTURE_MAX_LEVEL:Int; public var TEXTURE_COMPARE_MODE:Int; public var TEXTURE_COMPARE_FUNC:Int; public var SRGB:Int; public var SRGB8:Int; public var SRGB8_ALPHA8:Int; public var COMPARE_REF_TO_TEXTURE:Int; public var RGBA32F:Int; public var RGB32F:Int; public var RGBA16F:Int; public var RGB16F:Int; public var TEXTURE_2D_ARRAY:Int; public var TEXTURE_BINDING_2D_ARRAY:Int; public var R11F_G11F_B10F:Int; public var RGB9_E5:Int; public var RGBA32UI:Int; public var RGB32UI:Int; public var RGBA16UI:Int; public var RGB16UI:Int; public var RGBA8UI:Int; public var RGB8UI:Int; public var RGBA32I:Int; public var RGB32I:Int; public var RGBA16I:Int; public var RGB16I:Int; public var RGBA8I:Int; public var RGB8I:Int; public var RED_INTEGER:Int; public var RGB_INTEGER:Int; public var RGBA_INTEGER:Int; public var R8:Int; public var RG8:Int; public var R16F:Int; public var R32F:Int; public var RG16F:Int; public var RG32F:Int; public var R8I:Int; public var R8UI:Int; public var R16I:Int; public var R16UI:Int; public var R32I:Int; public var R32UI:Int; public var RG8I:Int; public var RG8UI:Int; public var RG16I:Int; public var RG16UI:Int; public var RG32I:Int; public var RG32UI:Int; public var R8_SNORM:Int; public var RG8_SNORM:Int; public var RGB8_SNORM:Int; public var RGBA8_SNORM:Int; public var RGB10_A2UI:Int; public var TEXTURE_IMMUTABLE_FORMAT:Int; public var TEXTURE_IMMUTABLE_LEVELS:Int; public var UNSIGNED_INT_2_10_10_10_REV:Int; public var UNSIGNED_INT_10F_11F_11F_REV:Int; public var UNSIGNED_INT_5_9_9_9_REV:Int; public var FLOAT_32_UNSIGNED_INT_24_8_REV:Int; public var UNSIGNED_INT_24_8:Int; public var HALF_FLOAT:Int; public var RG:Int; public var RG_INTEGER:Int; public var INT_2_10_10_10_REV:Int; public var CURRENT_QUERY:Int; public var QUERY_RESULT:Int; public var QUERY_RESULT_AVAILABLE:Int; public var ANY_SAMPLES_PASSED:Int; public var ANY_SAMPLES_PASSED_CONSERVATIVE:Int; public var MAX_DRAW_BUFFERS:Int; public var DRAW_BUFFER0:Int; public var DRAW_BUFFER1:Int; public var DRAW_BUFFER2:Int; public var DRAW_BUFFER3:Int; public var DRAW_BUFFER4:Int; public var DRAW_BUFFER5:Int; public var DRAW_BUFFER6:Int; public var DRAW_BUFFER7:Int; public var DRAW_BUFFER8:Int; public var DRAW_BUFFER9:Int; public var DRAW_BUFFER10:Int; public var DRAW_BUFFER11:Int; public var DRAW_BUFFER12:Int; public var DRAW_BUFFER13:Int; public var DRAW_BUFFER14:Int; public var DRAW_BUFFER15:Int; public var MAX_COLOR_ATTACHMENTS:Int; public var COLOR_ATTACHMENT1:Int; public var COLOR_ATTACHMENT2:Int; public var COLOR_ATTACHMENT3:Int; public var COLOR_ATTACHMENT4:Int; public var COLOR_ATTACHMENT5:Int; public var COLOR_ATTACHMENT6:Int; public var COLOR_ATTACHMENT7:Int; public var COLOR_ATTACHMENT8:Int; public var COLOR_ATTACHMENT9:Int; public var COLOR_ATTACHMENT10:Int; public var COLOR_ATTACHMENT11:Int; public var COLOR_ATTACHMENT12:Int; public var COLOR_ATTACHMENT13:Int; public var COLOR_ATTACHMENT14:Int; public var COLOR_ATTACHMENT15:Int; public var SAMPLER_3D:Int; public var SAMPLER_2D_SHADOW:Int; public var SAMPLER_2D_ARRAY:Int; public var SAMPLER_2D_ARRAY_SHADOW:Int; public var SAMPLER_CUBE_SHADOW:Int; public var INT_SAMPLER_2D:Int; public var INT_SAMPLER_3D:Int; public var INT_SAMPLER_CUBE:Int; public var INT_SAMPLER_2D_ARRAY:Int; public var UNSIGNED_INT_SAMPLER_2D:Int; public var UNSIGNED_INT_SAMPLER_3D:Int; public var UNSIGNED_INT_SAMPLER_CUBE:Int; public var UNSIGNED_INT_SAMPLER_2D_ARRAY:Int; public var MAX_SAMPLES:Int; public var SAMPLER_BINDING:Int; public var PIXEL_PACK_BUFFER:Int; public var PIXEL_UNPACK_BUFFER:Int; public var PIXEL_PACK_BUFFER_BINDING:Int; public var PIXEL_UNPACK_BUFFER_BINDING:Int; public var COPY_READ_BUFFER:Int; public var COPY_WRITE_BUFFER:Int; public var COPY_READ_BUFFER_BINDING:Int; public var COPY_WRITE_BUFFER_BINDING:Int; public var FLOAT_MAT2x3:Int; public var FLOAT_MAT2x4:Int; public var FLOAT_MAT3x2:Int; public var FLOAT_MAT3x4:Int; public var FLOAT_MAT4x2:Int; public var FLOAT_MAT4x3:Int; public var UNSIGNED_INT_VEC2:Int; public var UNSIGNED_INT_VEC3:Int; public var UNSIGNED_INT_VEC4:Int; public var UNSIGNED_NORMALIZED:Int; public var SIGNED_NORMALIZED:Int; public var VERTEX_ATTRIB_ARRAY_INTEGER:Int; public var VERTEX_ATTRIB_ARRAY_DIVISOR:Int; public var TRANSFORM_FEEDBACK_BUFFER_MODE:Int; public var MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:Int; public var TRANSFORM_FEEDBACK_VARYINGS:Int; public var TRANSFORM_FEEDBACK_BUFFER_START:Int; public var TRANSFORM_FEEDBACK_BUFFER_SIZE:Int; public var TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:Int; public var MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:Int; public var MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:Int; public var INTERLEAVED_ATTRIBS:Int; public var SEPARATE_ATTRIBS:Int; public var TRANSFORM_FEEDBACK_BUFFER:Int; public var TRANSFORM_FEEDBACK_BUFFER_BINDING:Int; public var TRANSFORM_FEEDBACK:Int; public var TRANSFORM_FEEDBACK_PAUSED:Int; public var TRANSFORM_FEEDBACK_ACTIVE:Int; public var TRANSFORM_FEEDBACK_BINDING:Int; public var FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:Int; public var FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:Int; public var FRAMEBUFFER_ATTACHMENT_RED_SIZE:Int; public var FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:Int; public var FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:Int; public var FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:Int; public var FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:Int; public var FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:Int; public var FRAMEBUFFER_DEFAULT:Int; public var DEPTH24_STENCIL8:Int; public var DRAW_FRAMEBUFFER_BINDING:Int; public var READ_FRAMEBUFFER:Int; public var DRAW_FRAMEBUFFER:Int; public var READ_FRAMEBUFFER_BINDING:Int; public var RENDERBUFFER_SAMPLES:Int; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:Int; public var FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:Int; public var UNIFORM_BUFFER:Int; public var UNIFORM_BUFFER_BINDING:Int; public var UNIFORM_BUFFER_START:Int; public var UNIFORM_BUFFER_SIZE:Int; public var MAX_VERTEX_UNIFORM_BLOCKS:Int; public var MAX_FRAGMENT_UNIFORM_BLOCKS:Int; public var MAX_COMBINED_UNIFORM_BLOCKS:Int; public var MAX_UNIFORM_BUFFER_BINDINGS:Int; public var MAX_UNIFORM_BLOCK_SIZE:Int; public var MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:Int; public var MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:Int; public var UNIFORM_BUFFER_OFFSET_ALIGNMENT:Int; public var ACTIVE_UNIFORM_BLOCKS:Int; public var UNIFORM_TYPE:Int; public var UNIFORM_SIZE:Int; public var UNIFORM_BLOCK_INDEX:Int; public var UNIFORM_OFFSET:Int; public var UNIFORM_ARRAY_STRIDE:Int; public var UNIFORM_MATRIX_STRIDE:Int; public var UNIFORM_IS_ROW_MAJOR:Int; public var UNIFORM_BLOCK_BINDING:Int; public var UNIFORM_BLOCK_DATA_SIZE:Int; public var UNIFORM_BLOCK_ACTIVE_UNIFORMS:Int; public var UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:Int; public var UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:Int; public var UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:Int; public var OBJECT_TYPE:Int; public var SYNC_CONDITION:Int; public var SYNC_STATUS:Int; public var SYNC_FLAGS:Int; public var SYNC_FENCE:Int; public var SYNC_GPU_COMMANDS_COMPLETE:Int; public var UNSIGNALED:Int; public var SIGNALED:Int; public var ALREADY_SIGNALED:Int; public var TIMEOUT_EXPIRED:Int; public var CONDITION_SATISFIED:Int; public var WAIT_FAILED:Int; public var SYNC_FLUSH_COMMANDS_BIT:Int; public var COLOR:Int; public var DEPTH:Int; public var STENCIL:Int; public var MIN:Int; public var MAX:Int; public var DEPTH_COMPONENT24:Int; public var STREAM_READ:Int; public var STREAM_COPY:Int; public var STATIC_READ:Int; public var STATIC_COPY:Int; public var DYNAMIC_READ:Int; public var DYNAMIC_COPY:Int; public var DEPTH_COMPONENT32F:Int; public var DEPTH32F_STENCIL8:Int; public var INVALID_INDEX:Int; public var TIMEOUT_IGNORED:Int; public var MAX_CLIENT_WAIT_TIMEOUT_WEBGL:Int; public function beginQuery(target:Int, query:GLQuery):Void; public function beginTransformFeedback(primitiveNode:Int):Void; public function bindBufferBase(target:Int, index:Int, buffer:GLBuffer):Void; public function bindBufferRange(target:Int, index:Int, buffer:GLBuffer, offset:DataPointer, size:DataPointer):Void; public function bindSampler(unit:Int, sampler:GLSampler):Void; public function bindTransformFeedback(target:Int, transformFeedback:GLTransformFeedback):Void; public function bindVertexArray(vertexArray:GLVertexArrayObject):Void; public function blitFramebuffer(srcX0:Int, srcY0:Int, srcX1:Int, srcY1:Int, dstX0:Int, dstY0:Int, dstX1:Int, dstY1:Int, mask:Int, filter:Int):Void; @:overload(function(target:Int, data:ArrayBufferView, usage:Int, srcOffset:Int, ?length:Int):Void {}) @:overload(function(target:Int, size:Int, usage:Int):Void {}) @:overload(function(target:Int, data:ArrayBufferView, usage:Int):Void {}) @:overload(function(target:Int, data:ArrayBuffer, usage:Int):Void {}) override function bufferData(target:Int, data:Dynamic /*MISSING SharedArrayBuffer*/, usage:Int):Void; @:overload(function(target:Int, dstByteOffset:Int, srcData:ArrayBufferView, srcOffset:Int, ?length:Int):Void {}) @:overload(function(target:Int, offset:Int, data:ArrayBufferView):Void {}) @:overload(function(target:Int, offset:Int, data:ArrayBuffer):Void {}) override function bufferSubData(target:Int, offset:Int, data:Dynamic /*MISSING SharedArrayBuffer*/):Void; public function clearBufferfi(buffer:Int, drawbuffer:Int, depth:Float, stencil:Int):Void; @:overload(function(buffer:Int, drawbuffer:Int, values:Float32Array, ?srcOffset:Int):Void {}) @:overload(function(buffer:Int, drawbuffer:Int, depth:Float, stencil:Int):Void {}) public function clearBufferfv(buffer:Int, drawbuffer:Int, values:Array, ?srcOffset:Int):Void; @:overload(function(buffer:Int, drawbuffer:Int, values:Int32Array, ?srcOffset:Int):Void {}) @:overload(function(buffer:Int, drawbuffer:Int, depth:Float, stencil:Int):Void {}) public function clearBufferiv(buffer:Int, drawbuffer:Int, values:Array, ?srcOffset:Int):Void; @:overload(function(buffer:Int, drawbuffer:Int, values:UInt32Array, ?srcOffset:Int):Void {}) @:overload(function(buffer:Int, drawbuffer:Int, depth:Float, stencil:Int):Void {}) public function clearBufferuiv(buffer:Int, drawbuffer:Int, values:Array, ?srcOffset:Int):Void; public function clientWaitSync(sync:GLSync, flags:Int, timeout:Dynamic /*Int64*/):Int; @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, offset:Int):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, srcData:ArrayBufferView, ?srcOffset:Int, ?srcLengthOverride:Int):Void {}) override function compressedTexImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, data:ArrayBufferView):Void; @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, offset:Int):Void {}) public function compressedTexImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, srcData:ArrayBufferView, ?srcOffset:Int, ?srcLengthOverride:Int):Void; @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, offset:Int):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, srcData:ArrayBufferView, ?srcOffset:Int, ?srcLengthOverride:Int):Void {}) override function compressedTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, data:ArrayBufferView):Void; @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, offset:Int):Void {}) public function compressedTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, srcData:ArrayBufferView, ?srcOffset:Int, ?srcLengthOverride:Int):Void; public function copySubBufferData(readTarget:Int, writeTarget:Int, readOffset:DataPointer, writeOffset:DataPointer, size:Int):Void; public function copyTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, x:Int, y:Int, width:Int, height:Int):Void; public function createQuery():GLQuery; public function createSampler():GLSampler; public function createTransformFeedback():GLTransformFeedback; public function createVertexArray():GLVertexArrayObject; public function deleteQuery(query:GLQuery):Void; public function deleteSampler(sampler:GLSampler):Void; public function deleteSync(sync:GLSync):Void; public function deleteTransformFeedback(transformFeedback:GLTransformFeedback):Void; public function deleteVertexArray(vertexArray:GLVertexArrayObject):Void; public function drawArraysInstanced(mode:Int, first:Int, count:Int, instanceCount:Int):Void; public function drawBuffers(buffers:Array):Void; public function drawElementsInstanced(mode:Int, count:Int, type:Int, offset:DataPointer, instanceCount:Int):Void; public function drawRangeElements(mode:Int, start:Int, end:Int, count:Int, type:Int, offset:DataPointer):Void; public function endQuery(target:Int):Void; public function endTransformFeedback():Void; public function fenceSync(condition:Int, flags:Int):GLSync; public function framebufferTextureLayer(target:Int, attachment:Int, texture:GLTexture, level:Int, layer:Int):Void; public function getActiveUniformBlockName(program:GLProgram, uniformBlockIndex:Int):String; public function getActiveUniformBlockParameter(program:GLProgram, uniformBlockIndex:Int, pname:Int):Dynamic; public function getActiveUniforms(program:GLProgram, uniformIndices:Array, pname:Int):Dynamic; @:overload(function(target:Int, srcByteOffset:DataPointer, dstData:ArrayBuffer, ?srcOffset:Int, ?length:Int):Void {}) public function getBufferSubData(target:Int, srcByteOffset:DataPointer, dstData:Dynamic /*SharedArrayBuffer*/, ?srcOffset:Int, ?length:Int):Void; public function getFragDataLocation(program:GLProgram, name:String):Int; public function getIndexedParameter(target:Int, index:Int):Dynamic; public function getInternalformatParameter(target:Int, internalformat:Int, pname:Int):Dynamic; public function getQuery(target:Int, pname:Int):GLQuery; public function getQueryParameter(query:GLQuery, pname:Int):Dynamic; public function getSamplerParameter(sampler:GLSampler, pname:Int):Dynamic; public function getSyncParameter(sync:GLSync, pname:Int):Dynamic; public function getTransformFeedbackVarying(program:GLProgram, index:Int):GLActiveInfo; public function getUniformBlockIndex(program:GLProgram, uniformBlockName:String):Int; @:overload(function(program:GLProgram, uniformNames:String):Array {}) public function getUniformIndices(program:GLProgram, uniformNames:Array):Array; public function invalidateFramebuffer(target:Int, attachments:Array):Void; public function invalidateSubFramebuffer(target:Int, attachments:Array, x:Int, y:Int, width:Int, height:Int):Void; public function isQuery(query:GLQuery):Bool; public function isSampler(sampler:GLSampler):Bool; public function isSync(sync:GLSync):Bool; public function isTransformFeedback(transformFeedback:GLTransformFeedback):Bool; public function isVertexArray(vertexArray:GLVertexArrayObject):Bool; public function pauseTransformFeedback():Void; public function readBuffer(src:Int):Void; @:overload(function(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView):Void {}) @:overload(function(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, offset:Int):Void {}) @:overload(function(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView, dstOffset:Int):Void {}) override function readPixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView):Void; public function renderbufferStorageMultisample(target:Int, samples:Int, internalFormat:Int, width:Int, height:Int):Void; public function resumeTransformFeedback():Void; public function samplerParameterf(sampler:GLSampler, pname:Int, param:Float):Void; public function samplerParameteri(sampler:GLSampler, pname:Int, param:Int):Void; @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, offset:DataPointer):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, srcData:ArrayBufferView, srcOffset:Int):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, source:Dynamic /*js.html.ImageBitmap*/):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, source:js.html.ImageData):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, source:js.html.ImageElement):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, source:js.html.CanvasElement):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, source:js.html.VideoElement):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, pixels:ArrayBufferView):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, format:Int, type:Int, pixels:js.html.ImageData):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, format:Int, type:Int, image:js.html.ImageElement):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, format:Int, type:Int, canvas:js.html.CanvasElement):Void {}) override function texImage2D(target:Int, level:Int, internalformat:Int, format:Int, type:Int, video:js.html.VideoElement):Void; @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, source:js.html.CanvasElement):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, source:js.html.ImageElement):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, source:js.html.VideoElement):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, source:Dynamic /*js.html.ImageBitmap*/):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, source:js.html.ImageData):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, source:ArrayBufferView):Void {}) @:overload(function(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, offset:DataPointer):Void {}) public function texImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, srcData:ArrayBufferView, ?srcOffset:Int):Void; public function texStorage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int):Void; public function texStorage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int):Void; @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, srcData:ArrayBufferView, srcOffset:Int):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, offset:DataPointer):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, source:js.html.ImageData):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, source:js.html.ImageElement):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, source:js.html.CanvasElement):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, source:js.html.VideoElement):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, source:Dynamic /*ImageBitmap*/):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, format:Int, type:Int, pixels:js.html.ImageData):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, format:Int, type:Int, image:js.html.ImageElement):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, format:Int, type:Int, canvas:js.html.CanvasElement):Void {}) override function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, format:Int, type:Int, video:js.html.VideoElement):Void; @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, offset:DataPointer):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, source:js.html.ImageData):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, source:js.html.ImageElement):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, source:js.html.CanvasElement):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, source:js.html.VideoElement):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, source:Dynamic /*ImageBitmap*/):Void {}) @:overload(function(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, pixels:ArrayBufferView, ?srcOffset:Int):Void {}) public function texSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, video:js.html.VideoElement):Void; public function transformFeedbackVaryings(program:GLProgram, varyings:Array, bufferMode:Int):Void; public function uniform1ui(location:GLUniformLocation, v0:Int):Void; public function uniform2ui(location:GLUniformLocation, v0:Int, v1:Int):Void; public function uniform3ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int):Void; public function uniform4ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int, v3:Int):Void; @:overload(function(location:GLUniformLocation, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniform1fv(location:GLUniformLocation, data:Array):Void; @:overload(function(location:GLUniformLocation, data:Int32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniform1iv(location:GLUniformLocation, data:Array):Void; public function uniform1uiv(location:GLUniformLocation, data:UInt32Array, ?srcOffset:Int, ?srcLength:Int):Void; @:overload(function(location:GLUniformLocation, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniform2fv(location:GLUniformLocation, data:Array):Void; @:overload(function(location:GLUniformLocation, data:Int32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniform2iv(location:GLUniformLocation, data:Array):Void; public function uniform2uiv(location:GLUniformLocation, data:UInt32Array, ?srcOffset:Int, ?srcLength:Int):Void; @:overload(function(location:GLUniformLocation, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniform3fv(location:GLUniformLocation, data:Array):Void; @:overload(function(location:GLUniformLocation, data:Int32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniform3iv(location:GLUniformLocation, data:Array):Void; public function uniform3uiv(location:GLUniformLocation, data:UInt32Array, ?srcOffset:Int, ?srcLength:Int):Void; @:overload(function(location:GLUniformLocation, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniform4fv(location:GLUniformLocation, data:Array):Void; @:overload(function(location:GLUniformLocation, data:Int32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniform4iv(location:GLUniformLocation, data:Array):Void; public function uniform4uiv(location:GLUniformLocation, data:UInt32Array, ?srcOffset:Int, ?srcLength:Int):Void; public function uniformBlockBinding(program:GLProgram, uniformBlockIndex:Int, uniformBlockBinding:Int):Void; @:overload(function(location:GLUniformLocation, transpose:Bool, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, transpose:Bool, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniformMatrix2fv(location:GLUniformLocation, transpose:Bool, data:Array):Void; public function uniformMatrix2x3fv(location:GLUniformLocation, transpose:Bool, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void; public function uniformMatrix2x4fv(location:GLUniformLocation, transpose:Bool, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void; @:overload(function(location:GLUniformLocation, transpose:Bool, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, transpose:Bool, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniformMatrix3fv(location:GLUniformLocation, transpose:Bool, data:Array):Void; public function uniformMatrix3x2fv(location:GLUniformLocation, transpose:Bool, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void; public function uniformMatrix3x4fv(location:GLUniformLocation, transpose:Bool, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void; @:overload(function(location:GLUniformLocation, transpose:Bool, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void {}) @:overload(function(location:GLUniformLocation, transpose:Bool, data:Array, ?srcOffset:Int, ?srcLength:Int):Void {}) override function uniformMatrix4fv(location:GLUniformLocation, transpose:Bool, data:Array):Void; public function uniformMatrix4x2fv(location:GLUniformLocation, transpose:Bool, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void; public function uniformMatrix4x3fv(location:GLUniformLocation, transpose:Bool, data:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void; public function vertexAttribDivisor(index:Int, divisor:Int):Void; public function vertexAttribI4i(index:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void; public function vertexAttribI4ui(index:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void; @:overload(function(index:Int, value:Int32Array):Void {}) public function vertexAttribI4iv(index:Int, value:Array):Void; @:overload(function(index:Int, value:UInt32Array):Void {}) public function vertexAttribI4uiv(index:Int, value:Array):Void; public function vertexAttribIPointer(index:Int, size:Int, type:Int, stride:Int, offset:DataPointer):Void; public function waitSync(sync:GLSync, flags:Int, timeout:Dynamic /*int64*/):Void; } ================================================ FILE: src/lime/_internal/backend/html5/HTML5Window.hx ================================================ package lime._internal.backend.html5; import haxe.Timer; import js.html.webgl.RenderingContext; import js.html.CanvasElement; import js.html.DivElement; import js.html.DragEvent; import js.html.Element; import js.html.FocusEvent; import js.html.InputElement; import js.html.InputEvent; import js.html.LinkElement; import js.html.MouseEvent; import js.html.Node; import js.html.TextAreaElement; import js.html.TouchEvent; import js.html.ClipboardEvent; import js.Browser; import lime._internal.graphics.ImageCanvasUtil; import lime.app.Application; import lime.graphics.opengl.GL; import lime.graphics.Image; import lime.graphics.OpenGLRenderContext; import lime.graphics.RenderContext; import lime.graphics.RenderContextType; import lime.math.Rectangle; import lime.system.Display; import lime.system.DisplayMode; import lime.system.System; import lime.system.Clipboard; import lime.ui.Gamepad; import lime.ui.Joystick; import lime.ui.MouseCursor; import lime.ui.MouseWheelMode; import lime.ui.Touch; import lime.ui.Window; @:access(lime._internal.backend.html5.HTML5Application) @:access(lime._internal.backend.html5.HTML5WebGL2RenderContext) @:access(lime.app.Application) @:access(lime.graphics.opengl.GL) @:access(lime.graphics.OpenGLRenderContext) @:access(lime.graphics.RenderContext) @:access(lime.ui.Gamepad) @:access(lime.ui.Joystick) @:access(lime.ui.Window) class HTML5Window { private static var dummyCharacter = String.fromCharCode(127); private static var textArea:TextAreaElement; private static var textInput:InputElement; private static var windowID:Int = 0; public var canvas:CanvasElement; public var div:DivElement; #if stats public var stats:Dynamic; #end private var cacheElementHeight:Float; private var cacheElementWidth:Float; private var cacheMouseX:Float; private var cacheMouseY:Float; private var cursor:MouseCursor; private var currentTouches = new Map(); private var isFullscreen:Bool; private var parent:Window; private var primaryTouch:Touch; private var renderType:RenderContextType; private var requestedFullscreen:Bool; private var resizeElement:Bool; private var scale = 1.0; private var setHeight:Int; private var setWidth:Int; private var textInputEnabled:Bool; private var textInputRect:Rectangle; private var unusedTouchesPool = new List(); private var __focusPending:Bool; private var __stopMousePropagation = false; public function new(parent:Window) { this.parent = parent; cursor = DEFAULT; cacheMouseX = 0; cacheMouseY = 0; var attributes = parent.__attributes; if (!Reflect.hasField(attributes, "context")) attributes.context = {}; #if dom attributes.context.type = DOM; attributes.context.version = ""; #end renderType = attributes.context.type; if (Reflect.hasField(attributes, "element")) { parent.element = attributes.element; } var element = parent.element; if (Reflect.hasField(attributes, "allowHighDPI") && attributes.allowHighDPI && renderType != DOM) { scale = Browser.window.devicePixelRatio; } parent.__scale = scale; setWidth = Reflect.hasField(attributes, "width") ? attributes.width : 0; setHeight = Reflect.hasField(attributes, "height") ? attributes.height : 0; parent.__width = setWidth; parent.__height = setHeight; parent.id = windowID++; if ((element is CanvasElement)) { canvas = cast element; } else { if (renderType == DOM) { div = cast Browser.document.createElement("div"); } else { canvas = cast Browser.document.createElement("canvas"); } } if (canvas != null) { var style = canvas.style; style.setProperty("-webkit-transform", "translateZ(0)", null); style.setProperty("transform", "translateZ(0)", null); } else if (div != null) { var style = div.style; style.setProperty("-webkit-transform", "translate3D(0,0,0)", null); style.setProperty("transform", "translate3D(0,0,0)", null); // style.setProperty ("-webkit-transform-style", "preserve-3d", null); // style.setProperty ("transform-style", "preserve-3d", null); style.position = "relative"; style.overflow = "hidden"; style.setProperty("-webkit-user-select", "none", null); style.setProperty("-moz-user-select", "none", null); style.setProperty("-ms-user-select", "none", null); style.setProperty("-o-user-select", "none", null); } if (parent.__width == 0 && parent.__height == 0) { if (element != null) { parent.__width = element.clientWidth; parent.__height = element.clientHeight; } else { parent.__width = Browser.window.innerWidth; parent.__height = Browser.window.innerHeight; } cacheElementWidth = parent.__width; cacheElementHeight = parent.__height; resizeElement = true; } if (canvas != null) { canvas.width = Math.round(parent.__width * scale); canvas.height = Math.round(parent.__height * scale); canvas.style.width = parent.__width + "px"; canvas.style.height = parent.__height + "px"; } else { div.style.width = parent.__width + "px"; div.style.height = parent.__height + "px"; } if ((Reflect.hasField(attributes, "resizable") && attributes.resizable) || (!Reflect.hasField(attributes, "width") && setWidth == 0 && setHeight == 0)) { parent.__resizable = true; } updateSize(); if (element != null) { if (canvas != null) { if (element != cast canvas) { element.appendChild(canvas); } } else { element.appendChild(div); } var events = ["mousedown", "mouseenter", "mouseleave", "mousemove", "mouseup", "wheel"]; for (event in events) { element.addEventListener(event, handleMouseEvent, true); } element.addEventListener("contextmenu", handleContextMenuEvent, true); element.addEventListener("dragstart", handleDragEvent, true); element.addEventListener("dragover", handleDragEvent, true); element.addEventListener("drop", handleDragEvent, true); element.addEventListener("touchstart", handleTouchEvent, true); element.addEventListener("touchmove", handleTouchEvent, true); element.addEventListener("touchend", handleTouchEvent, true); element.addEventListener("touchcancel", handleTouchEvent, true); element.addEventListener("gamepadconnected", handleGamepadEvent, true); element.addEventListener("gamepaddisconnected", handleGamepadEvent, true); } createContext(); if (parent.context.type == WEBGL) { canvas.addEventListener("webglcontextlost", handleContextEvent, false); canvas.addEventListener("webglcontextrestored", handleContextEvent, false); } } public function alert(message:String, title:String):Void { if (message != null) { Browser.alert(message); } } public function close():Void { var element = parent.element; if (element != null) { if (canvas != null) { if (element != cast canvas) { element.removeChild(canvas); } canvas = null; } else if (div != null) { element.removeChild(div); div = null; } var events = ["mousedown", "mouseenter", "mouseleave", "mousemove", "mouseup", "wheel"]; for (event in events) { element.removeEventListener(event, handleMouseEvent, true); } element.removeEventListener("contextmenu", handleContextMenuEvent, true); element.removeEventListener("dragstart", handleDragEvent, true); element.removeEventListener("dragover", handleDragEvent, true); element.removeEventListener("drop", handleDragEvent, true); element.removeEventListener("touchstart", handleTouchEvent, true); element.removeEventListener("touchmove", handleTouchEvent, true); element.removeEventListener("touchend", handleTouchEvent, true); element.removeEventListener("touchcancel", handleTouchEvent, true); element.removeEventListener("gamepadconnected", handleGamepadEvent, true); element.removeEventListener("gamepaddisconnected", handleGamepadEvent, true); } parent.application.__removeWindow(parent); } private function createContext():Void { var context = new RenderContext(); var contextAttributes = parent.__attributes.context; context.window = parent; context.attributes = contextAttributes; if (div != null) { context.dom = cast div; context.type = DOM; context.version = ""; } else if (canvas != null) { var webgl:#if !doc_gen HTML5WebGL2RenderContext #else Dynamic #end = null; var forceCanvas = #if (canvas || munit) true #else (renderType == CANVAS) #end; var forceWebGL = #if webgl true #else (renderType == OPENGL || renderType == OPENGLES || renderType == WEBGL) #end; var allowWebGL2 = #if webgl1 false #else (!Reflect.hasField(contextAttributes, "version") || contextAttributes.version != "1") #end; var isWebGL2 = false; if (forceWebGL || (!forceCanvas && (!Reflect.hasField(contextAttributes, "hardware") || contextAttributes.hardware))) { var transparentBackground = Reflect.hasField(contextAttributes, "background") && contextAttributes.background == null; var colorDepth = Reflect.hasField(contextAttributes, "colorDepth") ? contextAttributes.colorDepth : 16; var options = { alpha: (transparentBackground || colorDepth > 16) ? true : false, antialias: Reflect.hasField(contextAttributes, "antialiasing") ? contextAttributes.antialiasing > 0 : false, depth: Reflect.hasField(contextAttributes, "depth") ? contextAttributes.depth : true, premultipliedAlpha: true, stencil: Reflect.hasField(contextAttributes, "stencil") ? contextAttributes.stencil : false, preserveDrawingBuffer: Reflect.hasField(contextAttributes, "preserveDrawingBuffer") ? contextAttributes.preserveDrawingBuffer : false, failIfMajorPerformanceCaveat: false }; var glContextType = ["webgl", "experimental-webgl"]; if (allowWebGL2) { glContextType.unshift("webgl2"); } for (name in glContextType) { webgl = cast canvas.getContext(name, options); if (webgl != null && name == "webgl2") isWebGL2 = true; if (webgl != null) break; } } if (webgl == null) { context.canvas2D = cast canvas.getContext("2d"); context.type = CANVAS; context.version = ""; context.attributes.hardware = false; } else { #if webgl_debug webgl = untyped WebGLDebugUtils.makeDebugContext(webgl); #end #if (js && html5) context.webgl = webgl; if (isWebGL2) context.webgl2 = webgl; if (GL.context == null) { GL.context = cast webgl; GL.type = WEBGL; GL.version = isWebGL2 ? 2 : 1; } #end context.type = WEBGL; context.version = isWebGL2 ? "2" : "1"; context.attributes.hardware = true; } } parent.context = context; } public function focus():Void {} private function focusTextInput():Void { // Avoid changing focus multiple times per frame. if (__focusPending) return; __focusPending = true; Timer.delay(function() { __focusPending = false; if (textInputEnabled) textInput.focus(); }, 20); } public function getCursor():MouseCursor { return cursor; } public function getDisplay():Display { return System.getDisplay(0); } public function getDisplayMode():DisplayMode { return System.getDisplay(0).currentMode; } public function getFrameRate():Float { if (parent.application == null) return 0; if (parent.application.__backend.framePeriod < 0) { return 60; } else if (parent.application.__backend.framePeriod == 1000) { return 0; } else { return 1000 / parent.application.__backend.framePeriod; } } public function getMouseLock():Bool { return false; } public function getOpacity():Float { return 1.0; } public function getTextInputEnabled():Bool { return textInputEnabled; } private function handleContextEvent(event:js.html.Event):Void { switch (event.type) { case "webglcontextlost": if (event.cancelable) event.preventDefault(); // #if !display if (GL.context != null) { // GL.context.__contextLost = true; } // #end parent.context = null; parent.onRenderContextLost.dispatch(); case "webglcontextrestored": createContext(); parent.onRenderContextRestored.dispatch(parent.context); default: } } private function handleContextMenuEvent(event:MouseEvent):Void { if ((parent.onMouseUp.canceled || parent.onMouseDown.canceled) && event.cancelable) { event.preventDefault(); } } private function handleCutOrCopyEvent(event:ClipboardEvent):Void { var text = Clipboard.text; if (text == null) { text = ""; } event.clipboardData.setData("text/plain", text); if (event.cancelable) event.preventDefault(); } private function handleDragEvent(event:DragEvent):Bool { switch (event.type) { case "dragstart": if (cast(event.target, Element).nodeName.toLowerCase() == "img" && event.cancelable) { event.preventDefault(); return false; } case "dragover": event.preventDefault(); return false; case "drop": // TODO: Create a formal API that supports HTML5 file objects if (event.dataTransfer != null && event.dataTransfer.files.length > 0) { parent.onDropFile.dispatch(cast event.dataTransfer.files); event.preventDefault(); return false; } } return true; } private function handleFocusEvent(event:FocusEvent):Void { if (textInputEnabled) { if (event.relatedTarget == null || isDescendent(cast event.relatedTarget)) { focusTextInput(); } } } private function handleFullscreenEvent(event:Dynamic):Void { var fullscreenElement = untyped (document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement); if (fullscreenElement != null) { isFullscreen = true; parent.__fullscreen = true; if (requestedFullscreen) { requestedFullscreen = false; parent.onFullscreen.dispatch(); } } else { isFullscreen = false; parent.__fullscreen = false; // TODO: Handle a different way? parent.onRestore.dispatch(); // parent.onResize.dispatch (parent.__width, parent.__height); var changeEvents = [ "fullscreenchange", "mozfullscreenchange", "webkitfullscreenchange", "MSFullscreenChange" ]; var errorEvents = [ "fullscreenerror", "mozfullscreenerror", "webkitfullscreenerror", "MSFullscreenError" ]; for (i in 0...changeEvents.length) { Browser.document.removeEventListener(changeEvents[i], handleFullscreenEvent, false); Browser.document.removeEventListener(errorEvents[i], handleFullscreenEvent, false); } } } private function handleGamepadEvent(event:Dynamic):Void { switch (event.type) { case "gamepadconnected": Joystick.__connect(event.gamepad.index); if (event.gamepad.mapping == "standard") { Gamepad.__connect(event.gamepad.index); } case "gamepaddisconnected": Joystick.__disconnect(event.gamepad.index); Gamepad.__disconnect(event.gamepad.index); default: } } private function handleInputEvent(event:InputEvent):Void { if (imeCompositionActive) { return; } // In order to ensure that the browser will fire clipboard events, we always need to have something selected. // Therefore, `value` cannot be "". if (textInput.value != dummyCharacter) { var value = StringTools.replace(textInput.value, dummyCharacter, ""); if (value.length > 0) { parent.onTextInput.dispatch(value); } textInput.value = dummyCharacter; } } private function handleMouseEvent(event:MouseEvent):Void { var x = 0.0; var y = 0.0; if (event.type != "wheel") { if (parent.element != null) { if (canvas != null) { var rect = canvas.getBoundingClientRect(); x = (event.clientX - rect.left) * (parent.__width / rect.width); y = (event.clientY - rect.top) * (parent.__height / rect.height); } else if (div != null) { var rect = div.getBoundingClientRect(); // x = (event.clientX - rect.left) * (window.__backend.div.style.width / rect.width); x = (event.clientX - rect.left); // y = (event.clientY - rect.top) * (window.__backend.div.style.height / rect.height); y = (event.clientY - rect.top); } else { var rect = parent.element.getBoundingClientRect(); x = (event.clientX - rect.left) * (parent.__width / rect.width); y = (event.clientY - rect.top) * (parent.__height / rect.height); } } else { x = event.clientX; y = event.clientY; } switch (event.type) { case "mousedown": if (event.currentTarget == parent.element) { // while the mouse button is down, and the mouse has // moved outside the bounds of the parent element, we // want both onMouseMove and onMouseUp to continue to be // dispatched. otherwise, dragging objects around with // the mouse will appear broken. // however, if the mouse button isn't down, and the // mouse is outside the bounds of the parent element, // then onMouseMove and onMouseUp don't need to be // dispatched. // Flash embedded in HTML worked similarly. Browser.window.addEventListener("mouseup", handleMouseEvent); Browser.window.addEventListener("mousemove", handleMouseEvent); } // just to be safe, clear the flag on every mouse down __stopMousePropagation = false; parent.clickCount = event.detail; parent.onMouseDown.dispatch(x, y, event.button); parent.clickCount = 0; if (parent.onMouseDown.canceled && event.cancelable) { event.preventDefault(); } case "mouseenter": if (event.target == parent.element) { parent.onEnter.dispatch(); if (parent.onEnter.canceled && event.cancelable) { event.preventDefault(); } } case "mouseleave": if (event.target == parent.element) { parent.onLeave.dispatch(); if (parent.onLeave.canceled && event.cancelable) { event.preventDefault(); } } case "mouseup": // see comment below for mousemove for an explanation of // what the __stopMousePropagation flag is used for. if (__stopMousePropagation && event.currentTarget != parent.element) { __stopMousePropagation = false; return; } Browser.window.removeEventListener("mouseup", handleMouseEvent); Browser.window.removeEventListener("mousemove", handleMouseEvent); __stopMousePropagation = event.currentTarget == parent.element; parent.clickCount = event.detail; parent.onMouseUp.dispatch(x, y, event.button); parent.clickCount = 0; if (parent.onMouseUp.canceled && event.cancelable) { event.preventDefault(); } case "mousemove": // this same listener is added to the parent element and to // the browser window for both the mousemove and the mouseup // event types, if mousedown happens first. this allows both // onMouseMove and onMouseUp to be dispatched if the mouse // moves outside the bounds of the parent element. // since browser mouse events bubble, this listener will be // called for the parent element first, as long as the mouse // is still over the parent element. in that case, when the // listener is called for the browser window, it should // return early so that onMouseMove or onMouseUp isn't // dispatched twice. this is done by checking the // __stopMousePropagation flag when the current target isn't // the parent element. // however, if the mouse isn't over the parent element, the // listener will be called only for the browser window, and // not the parent element. in that case, it can proceed to // dispatch either onMouseMove or onMouseUp, since this // listener was called only once. // again, this applies only if the mouse button is down. if // the mouse button isn't down, then the listener won't be // added to the browser window, and event won't be // dispatched outside the bounds of the parent element. if (__stopMousePropagation && event.currentTarget != parent.element) { // why not call event.stopPropagation() here? well, // other JS code in the page may still be interested in // the event. listening for the same events on both the // parent element and on the browser window is just an // implementation detail and shouldn't affect other // listeners. __stopMousePropagation = false; return; } __stopMousePropagation = event.currentTarget == parent.element; if (x != cacheMouseX || y != cacheMouseY) { parent.onMouseMove.dispatch(x, y); parent.onMouseMoveRelative.dispatch(x - cacheMouseX, y - cacheMouseY); if ((parent.onMouseMove.canceled || parent.onMouseMoveRelative.canceled) && event.cancelable) { event.preventDefault(); } } default: } cacheMouseX = x; cacheMouseY = y; } else { var deltaMode:MouseWheelMode = switch (untyped event.deltaMode) { case 0: PIXELS; case 1: LINES; case 2: PAGES; default: UNKNOWN; } parent.onMouseWheel.dispatch(untyped event.deltaX, -untyped event.deltaY, deltaMode); if (parent.onMouseWheel.canceled && event.cancelable) { event.preventDefault(); } } } private function handlePasteEvent(event:ClipboardEvent):Void { if (untyped event.clipboardData.types.indexOf("text/plain") > -1) { var text = event.clipboardData.getData("text/plain"); Clipboard.text = text; if (textInputEnabled) { parent.onTextInput.dispatch(text); } if (event.cancelable) event.preventDefault(); } } private function handleResizeEvent(event:js.html.Event):Void { primaryTouch = null; updateSize(); } private function handleTouchEvent(event:TouchEvent):Void { if (event.cancelable) event.preventDefault(); var rect = null; if (parent.element != null) { if (canvas != null) { rect = canvas.getBoundingClientRect(); } else if (div != null) { rect = div.getBoundingClientRect(); } else { rect = parent.element.getBoundingClientRect(); } } var windowWidth:Float = setWidth; var windowHeight:Float = setHeight; if (windowWidth == 0 || windowHeight == 0) { if (rect != null) { windowWidth = rect.width; windowHeight = rect.height; } else { windowWidth = 1; windowHeight = 1; } } var touch:Touch; var x:Float; var y:Float; var cacheX:Float; var cacheY:Float; for (data in event.changedTouches) { x = 0.0; y = 0.0; if (rect != null) { x = (data.clientX - rect.left) * (windowWidth / rect.width); y = (data.clientY - rect.top) * (windowHeight / rect.height); } else { x = data.clientX; y = data.clientY; } if (event.type == "touchstart") { touch = unusedTouchesPool.pop(); if (touch == null) { touch = new Touch(x / windowWidth, y / windowHeight, data.identifier, 0, 0, data.force, parent.id); } else { touch.x = x / windowWidth; touch.y = y / windowHeight; touch.id = data.identifier; touch.dx = 0; touch.dy = 0; touch.pressure = data.force; touch.device = parent.id; } currentTouches.set(data.identifier, touch); Touch.onStart.dispatch(touch); if (primaryTouch == null) { primaryTouch = touch; } if (touch == primaryTouch) { parent.onMouseDown.dispatch(x, y, 0); } } else { touch = currentTouches.get(data.identifier); if (touch != null) { cacheX = touch.x; cacheY = touch.y; touch.x = x / windowWidth; touch.y = y / windowHeight; touch.dx = touch.x - cacheX; touch.dy = touch.y - cacheY; touch.pressure = data.force; switch (event.type) { case "touchmove": Touch.onMove.dispatch(touch); if (touch == primaryTouch) { parent.onMouseMove.dispatch(x, y); } case "touchend": Touch.onEnd.dispatch(touch); currentTouches.remove(data.identifier); unusedTouchesPool.add(touch); if (touch == primaryTouch) { parent.onMouseUp.dispatch(x, y, 0); primaryTouch = null; } case "touchcancel": Touch.onCancel.dispatch(touch); currentTouches.remove(data.identifier); unusedTouchesPool.add(touch); if (touch == primaryTouch) { // parent.onMouseUp.dispatch (x, y, 0); primaryTouch = null; } default: } } } } } private function isDescendent(node:Node):Bool { if (node == parent.element) return true; while (node != null) { if (node.parentNode == parent.element) { return true; } node = node.parentNode; } return false; } public function move(x:Int, y:Int):Void {} public function readPixels(rect:Rectangle):Image { // TODO: Handle DIV, improve 3D canvas support if (canvas != null) { var stageRect = new Rectangle(0, 0, canvas.width, canvas.height); if (rect == null) { rect = stageRect; } else { rect.intersection(stageRect, rect); } if (rect.width > 0 && rect.height > 0) { var canvas2:CanvasElement = cast Browser.document.createElement("canvas"); canvas2.width = Std.int(rect.width); canvas2.height = Std.int(rect.height); var context = canvas2.getContext("2d"); context.drawImage(canvas, -rect.x, -rect.y); return Image.fromCanvas(canvas2); } } return null; } public function resize(width:Int, height:Int):Void {} public function setMinSize(width:Int, height:Int):Void {} public function setMaxSize(width:Int, height:Int):Void {} public function setBorderless(value:Bool):Bool { return value; } public function setClipboard(value:String):Void { if (textArea == null) { textArea = cast Browser.document.createElement("textarea"); textArea.style.height = "0px"; textArea.style.left = "-100px"; textArea.style.opacity = "0"; textArea.style.position = "fixed"; textArea.style.top = "-100px"; textArea.style.width = "0px"; Browser.document.body.appendChild(textArea); } textArea.value = value; textArea.focus(); textArea.select(); if (Browser.document.queryCommandEnabled("copy")) { Browser.document.execCommand("copy"); } if (textInputEnabled) { focusTextInput(); } } public function setCursor(value:MouseCursor):MouseCursor { if (cursor != value) { if (value == null) { parent.element.style.cursor = "none"; } else { parent.element.style.cursor = switch (value) { case ARROW: "default"; case CROSSHAIR: "crosshair"; case MOVE: "move"; case POINTER: "pointer"; case RESIZE_NESW: "nesw-resize"; case RESIZE_NS: "ns-resize"; case RESIZE_NWSE: "nwse-resize"; case RESIZE_WE: "ew-resize"; case TEXT: "text"; case WAIT: "wait"; case WAIT_ARROW: "wait"; default: "auto"; } } cursor = value; } return cursor; } public function setDisplayMode(value:DisplayMode):DisplayMode { return value; } public function setFrameRate(value:Float):Float { if (parent.application != null) { if (value >= 60) { if (parent == parent.application.window) parent.application.__backend.framePeriod = -1; } else if (value > 0) { if (parent == parent.application.window) parent.application.__backend.framePeriod = 1000 / value; } else { if (parent == parent.application.window) parent.application.__backend.framePeriod = 1000; } } return value; } public function setFullscreen(value:Bool):Bool { if (value) { if (!requestedFullscreen && !isFullscreen) { requestedFullscreen = true; untyped { if (parent.element.requestFullscreen) { document.addEventListener("fullscreenchange", handleFullscreenEvent, false); document.addEventListener("fullscreenerror", handleFullscreenEvent, false); parent.element.requestFullscreen(); } else if (parent.element.mozRequestFullScreen) { document.addEventListener("mozfullscreenchange", handleFullscreenEvent, false); document.addEventListener("mozfullscreenerror", handleFullscreenEvent, false); parent.element.mozRequestFullScreen(); } else if (parent.element.webkitRequestFullscreen) { document.addEventListener("webkitfullscreenchange", handleFullscreenEvent, false); document.addEventListener("webkitfullscreenerror", handleFullscreenEvent, false); parent.element.webkitRequestFullscreen(); } else if (parent.element.msRequestFullscreen) { document.addEventListener("MSFullscreenChange", handleFullscreenEvent, false); document.addEventListener("MSFullscreenError", handleFullscreenEvent, false); parent.element.msRequestFullscreen(); } } } } else if (isFullscreen) { requestedFullscreen = false; untyped { if (document.exitFullscreen) document.exitFullscreen(); else if (document.mozCancelFullScreen) document.mozCancelFullScreen(); else if (document.webkitExitFullscreen) document.webkitExitFullscreen(); else if (document.msExitFullscreen) document.msExitFullscreen(); } } return value; } public function setIcon(image:Image):Void { // var iconWidth = 16; // var iconHeight = 16; // image = image.clone (); // if (image.width != iconWidth || image.height != iconHeight) { // // image.resize (iconWidth, iconHeight); // // } ImageCanvasUtil.convertToCanvas(image); var link:LinkElement = cast Browser.document.querySelector("link[rel*='icon']"); if (link == null) { link = cast Browser.document.createElement("link"); } link.type = "image/x-icon"; link.rel = "shortcut icon"; link.href = image.buffer.src.toDataURL("image/x-icon"); Browser.document.getElementsByTagName("head")[0].appendChild(link); } public function setMaximized(value:Bool):Bool { return false; } public function setMinimized(value:Bool):Bool { return false; } public function setMouseLock(value:Bool):Void {} public function setOpacity(value:Float):Void {} public function setResizable(value:Bool):Bool { return value; } public function setTextInputEnabled(value:Bool):Bool { if (value) { if (textInput == null) { textInput = cast Browser.document.createElement('input'); #if lime_enable_html5_ime textInput.type = 'text'; #else // use password instead of text to avoid IME issues on Android textInput.type = Browser.navigator.userAgent.indexOf("Android") >= 0 ? 'password' : 'text'; #end textInput.style.position = 'absolute'; textInput.style.opacity = "0"; textInput.style.color = "transparent"; textInput.value = dummyCharacter; // See: handleInputEvent() untyped textInput.autocapitalize = "off"; untyped textInput.autocorrect = "off"; textInput.autocomplete = "off"; // TODO: Position for mobile browsers better textInput.style.left = "0px"; textInput.style.top = "50%"; if (~/(iPad|iPhone|iPod).*OS 8_/gi.match(Browser.window.navigator.userAgent)) { textInput.style.fontSize = "0px"; textInput.style.width = '0px'; textInput.style.height = '0px'; } else { textInput.style.width = '1px'; textInput.style.height = '1px'; } untyped (textInput.style).pointerEvents = 'none'; textInput.style.zIndex = "-10000000"; } if (textInput.parentNode == null) { parent.element.appendChild(textInput); } if (!textInputEnabled) { textInput.addEventListener('input', handleInputEvent, true); textInput.addEventListener('blur', handleFocusEvent, true); textInput.addEventListener('cut', handleCutOrCopyEvent, true); textInput.addEventListener('copy', handleCutOrCopyEvent, true); textInput.addEventListener('paste', handlePasteEvent, true); textInput.addEventListener('compositionstart', handleCompositionstartEvent, true); textInput.addEventListener('compositionend', handleCompositionendEvent, true); } textInput.focus(); textInput.select(); } else { if (textInput != null) { // call blur() before removing the compositionend listener // to ensure that incomplete IME input is committed textInput.blur(); textInput.removeEventListener('input', handleInputEvent, true); textInput.removeEventListener('blur', handleFocusEvent, true); textInput.removeEventListener('cut', handleCutOrCopyEvent, true); textInput.removeEventListener('copy', handleCutOrCopyEvent, true); textInput.removeEventListener('paste', handlePasteEvent, true); textInput.removeEventListener('compositionstart', handleCompositionstartEvent, true); textInput.removeEventListener('compositionend', handleCompositionendEvent, true); } } return textInputEnabled = value; } public function setTextInputRect(value:Rectangle):Rectangle { return textInputRect = value; } private var imeCompositionActive = false; public function handleCompositionstartEvent(e):Void { imeCompositionActive = true; } public function handleCompositionendEvent(e):Void { imeCompositionActive = false; handleInputEvent(e); } public function setTitle(value:String):String { if (value != null) { Browser.document.title = value; } return value; } public function setVisible(value:Bool):Bool { return value; } private function updateSize():Void { if (!parent.__resizable) return; var elementWidth:Float; var elementHeight:Float; if (parent.element != null) { elementWidth = parent.element.clientWidth; elementHeight = parent.element.clientHeight; } else { elementWidth = Browser.window.innerWidth; elementHeight = Browser.window.innerHeight; } if (elementWidth != cacheElementWidth || elementHeight != cacheElementHeight) { cacheElementWidth = elementWidth; cacheElementHeight = elementHeight; var stretch = resizeElement || (setWidth == 0 && setHeight == 0); if (parent.element != null && (div == null || (div != null && stretch))) { if (stretch) { if (parent.__width != elementWidth || parent.__height != elementHeight) { parent.__width = Std.int(elementWidth); parent.__height = Std.int(elementHeight); if (canvas != null) { if (parent.element != cast canvas) { canvas.width = Math.round(elementWidth * scale); canvas.height = Math.round(elementHeight * scale); canvas.style.width = elementWidth + "px"; canvas.style.height = elementHeight + "px"; } } else { div.style.width = elementWidth + "px"; div.style.height = elementHeight + "px"; } parent.onResize.dispatch(Std.int(elementWidth), Std.int(elementHeight)); } } else { var scaleX = (setWidth != 0) ? (elementWidth / setWidth) : 1; var scaleY = (setHeight != 0) ? (elementHeight / setHeight) : 1; var targetWidth = elementWidth; var targetHeight = elementHeight; var marginLeft = 0; var marginTop = 0; if (scaleX < scaleY) { targetHeight = Math.floor(setHeight * scaleX); marginTop = Math.floor((elementHeight - targetHeight) / 2); } else { targetWidth = Math.floor(setWidth * scaleY); marginLeft = Math.floor((elementWidth - targetWidth) / 2); } if (canvas != null) { if (parent.element != cast canvas) { canvas.style.width = targetWidth + "px"; canvas.style.height = targetHeight + "px"; canvas.style.marginLeft = marginLeft + "px"; canvas.style.marginTop = marginTop + "px"; } } else { div.style.width = targetWidth + "px"; div.style.height = targetHeight + "px"; div.style.marginLeft = marginLeft + "px"; div.style.marginTop = marginTop + "px"; } } } } } public function warpMouse(x:Int, y:Int):Void {} } ================================================ FILE: src/lime/_internal/backend/native/NativeApplication.hx ================================================ package lime._internal.backend.native; import haxe.Timer; import lime._internal.backend.native.NativeCFFI; import lime.app.Application; import lime.graphics.opengl.GL; import lime.graphics.OpenGLRenderContext; import lime.graphics.RenderContext; import lime.math.Rectangle; import lime.media.AudioManager; import lime.system.CFFI; import lime.system.Clipboard; import lime.system.Display; import lime.system.DisplayMode; import lime.system.JNI; import lime.system.Orientation; import lime.system.Sensor; import lime.system.SensorType; import lime.system.System; import lime.ui.Gamepad; import lime.ui.Joystick; import lime.ui.JoystickHatPosition; import lime.ui.KeyCode; import lime.ui.KeyModifier; import lime.ui.Touch; import lime.ui.Window; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(haxe.Timer) @:access(lime._internal.backend.native.NativeCFFI) @:access(lime._internal.backend.native.NativeOpenGLRenderContext) @:access(lime._internal.backend.native.NativeWindow) @:access(lime.app.Application) @:access(lime.graphics.opengl.GL) @:access(lime.graphics.OpenGLRenderContext) @:access(lime.graphics.Renderer) @:access(lime.system.Clipboard) @:access(lime.system.Sensor) @:access(lime.ui.Gamepad) @:access(lime.ui.Joystick) @:access(lime.ui.Window) class NativeApplication { private var applicationEventInfo = new ApplicationEventInfo(UPDATE); private var clipboardEventInfo = new ClipboardEventInfo(); private var currentTouches = new Map(); private var dropEventInfo = new DropEventInfo(); private var gamepadEventInfo = new GamepadEventInfo(); private var joystickEventInfo = new JoystickEventInfo(); private var keyEventInfo = new KeyEventInfo(); private var orientationEventInfo = new OrientationEventInfo(); private var mouseEventInfo = new MouseEventInfo(); private var renderEventInfo = new RenderEventInfo(RENDER); private var sensorEventInfo = new SensorEventInfo(); private var textEventInfo = new TextEventInfo(); private var touchEventInfo = new TouchEventInfo(); private var unusedTouchesPool = new List(); private var windowEventInfo = new WindowEventInfo(); public var handle:Dynamic; #if android private var deviceOrientationListener:OrientationChangeListener; #end private var pauseTimer:Int; private var parent:Application; private var toggleFullscreen:Bool; private static function __init__() { #if (lime_cffi && !macro) var init = NativeCFFI; #end } public function new(parent:Application):Void { this.parent = parent; pauseTimer = -1; toggleFullscreen = true; AudioManager.init(); #if (ios || android || tvos) Sensor.registerSensor(SensorType.ACCELEROMETER, 0); #end #if android var setDeviceOrientationListener = JNI.createStaticMethod("org/haxe/lime/GameActivity", "setDeviceOrientationListener", "(Lorg/haxe/lime/HaxeObject;)V"); deviceOrientationListener = new OrientationChangeListener(handleJNIOrientationEvent); setDeviceOrientationListener(deviceOrientationListener); #end #if (!macro && lime_cffi) handle = NativeCFFI.lime_application_create(); #end } private function advanceTimer():Void { #if (lime_cffi && !macro) if (pauseTimer > -1) { var offset = System.getTimer() - pauseTimer; for (timer in Timer.sRunningTimers) { if (timer.mRunning) timer.mFireAt += offset; } pauseTimer = -1; } #end } public function exec():Int { #if !macro #if lime_cffi NativeCFFI.lime_application_event_manager_register(handleApplicationEvent, applicationEventInfo); NativeCFFI.lime_clipboard_event_manager_register(handleClipboardEvent, clipboardEventInfo); NativeCFFI.lime_drop_event_manager_register(handleDropEvent, dropEventInfo); NativeCFFI.lime_gamepad_event_manager_register(handleGamepadEvent, gamepadEventInfo); NativeCFFI.lime_joystick_event_manager_register(handleJoystickEvent, joystickEventInfo); NativeCFFI.lime_key_event_manager_register(handleKeyEvent, keyEventInfo); NativeCFFI.lime_mouse_event_manager_register(handleMouseEvent, mouseEventInfo); NativeCFFI.lime_render_event_manager_register(handleRenderEvent, renderEventInfo); NativeCFFI.lime_text_event_manager_register(handleTextEvent, textEventInfo); NativeCFFI.lime_touch_event_manager_register(handleTouchEvent, touchEventInfo); NativeCFFI.lime_window_event_manager_register(handleWindowEvent, windowEventInfo); #if (ios || android) NativeCFFI.lime_orientation_event_manager_register(handleOrientationEvent, orientationEventInfo); #end #if (ios || android || tvos) NativeCFFI.lime_sensor_event_manager_register(handleSensorEvent, sensorEventInfo); #end #end #if (nodejs && lime_cffi) NativeCFFI.lime_application_init(handle); var eventLoop = function() { var active = NativeCFFI.lime_application_update(handle); if (!active) { untyped process.exitCode = NativeCFFI.lime_application_quit(handle); parent.onExit.dispatch(untyped process.exitCode); } else { untyped setImmediate(eventLoop); } } untyped setImmediate(eventLoop); return 0; #elseif lime_cffi var result = NativeCFFI.lime_application_exec(handle); #if (!webassembly && !ios && !nodejs) parent.onExit.dispatch(result); #end return result; #end #end return 0; } public function exit():Void { AudioManager.shutdown(); #if (!macro && lime_cffi) NativeCFFI.lime_application_quit(handle); #end } public function getDeviceOrientation():Orientation { #if (!macro && lime_cffi) return cast NativeCFFI.lime_system_get_device_orientation(); #else return UNKNOWN; #end } private function handleApplicationEvent():Void { switch (applicationEventInfo.type) { case UPDATE: updateTimer(); parent.onUpdate.dispatch(applicationEventInfo.deltaTime); default: } } private function handleClipboardEvent():Void { Clipboard.__update(); } private function handleDropEvent():Void { for (window in parent.windows) { window.onDropFile.dispatch(CFFI.stringValue(dropEventInfo.file)); } } private function handleGamepadEvent():Void { switch (gamepadEventInfo.type) { case AXIS_MOVE: var gamepad = Gamepad.devices.get(gamepadEventInfo.id); if (gamepad != null) gamepad.onAxisMove.dispatch(gamepadEventInfo.axis, gamepadEventInfo.axisValue); case BUTTON_DOWN: var gamepad = Gamepad.devices.get(gamepadEventInfo.id); if (gamepad != null) gamepad.onButtonDown.dispatch(gamepadEventInfo.button); case BUTTON_UP: var gamepad = Gamepad.devices.get(gamepadEventInfo.id); if (gamepad != null) gamepad.onButtonUp.dispatch(gamepadEventInfo.button); case CONNECT: Gamepad.__connect(gamepadEventInfo.id); case DISCONNECT: Gamepad.__disconnect(gamepadEventInfo.id); } } private function handleJoystickEvent():Void { switch (joystickEventInfo.type) { case AXIS_MOVE: var joystick = Joystick.devices.get(joystickEventInfo.id); if (joystick != null) joystick.onAxisMove.dispatch(joystickEventInfo.index, joystickEventInfo.x); case HAT_MOVE: var joystick = Joystick.devices.get(joystickEventInfo.id); if (joystick != null) joystick.onHatMove.dispatch(joystickEventInfo.index, joystickEventInfo.eventValue); case BUTTON_DOWN: var joystick = Joystick.devices.get(joystickEventInfo.id); if (joystick != null) joystick.onButtonDown.dispatch(joystickEventInfo.index); case BUTTON_UP: var joystick = Joystick.devices.get(joystickEventInfo.id); if (joystick != null) joystick.onButtonUp.dispatch(joystickEventInfo.index); case CONNECT: Joystick.__connect(joystickEventInfo.id); case DISCONNECT: Joystick.__disconnect(joystickEventInfo.id); } } private function handleKeyEvent():Void { var window = parent.__windowByID.get(keyEventInfo.windowID); if (window != null) { var type:KeyEventType = keyEventInfo.type; var int32:Float = keyEventInfo.keyCode; var keyCode:KeyCode = Std.int(int32); var modifier:KeyModifier = keyEventInfo.modifier; switch (type) { case KEY_DOWN: window.onKeyDown.dispatch(keyCode, modifier); case KEY_UP: window.onKeyUp.dispatch(keyCode, modifier); } #if (windows || linux) if (keyCode == RETURN) { if (type == KEY_DOWN) { if (toggleFullscreen && modifier.altKey && (!modifier.ctrlKey && !modifier.shiftKey && !modifier.metaKey)) { toggleFullscreen = false; if (!window.onKeyDown.canceled) { window.fullscreen = !window.fullscreen; } } } else { toggleFullscreen = true; } } #if rpi if (keyCode == ESCAPE && modifier.ctrlKey && type == KEY_DOWN) { System.exit(0); } #end #elseif mac if (keyCode == F) { if (type == KEY_DOWN) { if (toggleFullscreen && (modifier.ctrlKey && modifier.metaKey) && (!modifier.altKey && !modifier.shiftKey)) { toggleFullscreen = false; if (!window.onKeyDown.canceled) { window.fullscreen = !window.fullscreen; } } } else { toggleFullscreen = true; } } #elseif android if (keyCode == APP_CONTROL_BACK && modifier == KeyModifier.NONE && type == KEY_UP && !window.onKeyUp.canceled) { var mainActivity = JNI.createStaticField("org/haxe/extension/Extension", "mainActivity", "Landroid/app/Activity;"); var moveTaskToBack = JNI.createMemberMethod("android/app/Activity", "moveTaskToBack", "(Z)Z"); moveTaskToBack(mainActivity.get(), true); } #end } } private function handleMouseEvent():Void { var window = parent.__windowByID.get(mouseEventInfo.windowID); if (window != null) { switch (mouseEventInfo.type) { case MOUSE_DOWN: window.clickCount = mouseEventInfo.clickCount; window.onMouseDown.dispatch(mouseEventInfo.x, mouseEventInfo.y, mouseEventInfo.button); window.clickCount = 0; case MOUSE_UP: window.clickCount = mouseEventInfo.clickCount; window.onMouseUp.dispatch(mouseEventInfo.x, mouseEventInfo.y, mouseEventInfo.button); window.clickCount = 0; case MOUSE_MOVE: window.onMouseMove.dispatch(mouseEventInfo.x, mouseEventInfo.y); window.onMouseMoveRelative.dispatch(mouseEventInfo.movementX, mouseEventInfo.movementY); case MOUSE_WHEEL: window.onMouseWheel.dispatch(mouseEventInfo.x, mouseEventInfo.y, UNKNOWN); default: } } } private function handleOrientationEvent():Void { var orientation:Orientation = cast orientationEventInfo.orientation; var display = orientationEventInfo.display; switch (orientationEventInfo.type) { case DISPLAY_ORIENTATION_CHANGE: parent.onDisplayOrientationChange.dispatch(display, orientation); case DEVICE_ORIENTATION_CHANGE: parent.onDeviceOrientationChange.dispatch(orientation); } } #if android private function handleJNIOrientationEvent(newOrientation:Int):Void { var orientation:Orientation = cast newOrientation; parent.onDeviceOrientationChange.dispatch(orientation); } #end private function handleRenderEvent():Void { // TODO: Allow windows to render independently for (window in parent.__windows) { if (window == null) continue; // parent.renderer = renderer; switch (renderEventInfo.type) { case RENDER: if (window.context != null) { window.__backend.render(); window.onRender.dispatch(window.context); if (!window.onRender.canceled) { window.__backend.contextFlip(); } } case RENDER_CONTEXT_LOST: if (window.__backend.useHardware && window.context != null) { switch (window.context.type) { case OPENGL, OPENGLES, WEBGL: #if (lime_cffi && (lime_opengl || lime_opengles) && !display) var gl = window.context.gl; (gl : NativeOpenGLRenderContext).__contextLost(); if (GL.context == gl) GL.context = null; #end default: } window.context = null; window.onRenderContextLost.dispatch(); } case RENDER_CONTEXT_RESTORED: if (window.__backend.useHardware) { // GL.context = new OpenGLRenderContext (); // window.context.gl = GL.context; window.onRenderContextRestored.dispatch(window.context); } } } } private function handleSensorEvent():Void { var sensor = Sensor.sensorByID.get(sensorEventInfo.id); if (sensor != null) { sensor.onUpdate.dispatch(sensorEventInfo.x, sensorEventInfo.y, sensorEventInfo.z); } } private function handleTextEvent():Void { var window = parent.__windowByID.get(textEventInfo.windowID); if (window != null) { switch (textEventInfo.type) { case TEXT_INPUT: window.onTextInput.dispatch(CFFI.stringValue(textEventInfo.text)); case TEXT_EDIT: window.onTextEdit.dispatch(CFFI.stringValue(textEventInfo.text), textEventInfo.start, textEventInfo.length); default: } } } private function handleTouchEvent():Void { switch (touchEventInfo.type) { case TOUCH_START: var touch = unusedTouchesPool.pop(); if (touch == null) { touch = new Touch(touchEventInfo.x, touchEventInfo.y, touchEventInfo.id, touchEventInfo.dx, touchEventInfo.dy, touchEventInfo.pressure, touchEventInfo.device); } else { touch.x = touchEventInfo.x; touch.y = touchEventInfo.y; touch.id = touchEventInfo.id; touch.dx = touchEventInfo.dx; touch.dy = touchEventInfo.dy; touch.pressure = touchEventInfo.pressure; touch.device = touchEventInfo.device; } currentTouches.set(touch.id, touch); Touch.onStart.dispatch(touch); case TOUCH_END: var touch = currentTouches.get(touchEventInfo.id); if (touch != null) { touch.x = touchEventInfo.x; touch.y = touchEventInfo.y; touch.dx = touchEventInfo.dx; touch.dy = touchEventInfo.dy; touch.pressure = touchEventInfo.pressure; Touch.onEnd.dispatch(touch); currentTouches.remove(touchEventInfo.id); unusedTouchesPool.add(touch); } case TOUCH_MOVE: var touch = currentTouches.get(touchEventInfo.id); if (touch != null) { touch.x = touchEventInfo.x; touch.y = touchEventInfo.y; touch.dx = touchEventInfo.dx; touch.dy = touchEventInfo.dy; touch.pressure = touchEventInfo.pressure; Touch.onMove.dispatch(touch); } default: } } private function handleWindowEvent():Void { var window = parent.__windowByID.get(windowEventInfo.windowID); if (window != null) { switch (windowEventInfo.type) { case WINDOW_ACTIVATE: advanceTimer(); window.onActivate.dispatch(); AudioManager.resume(); case WINDOW_CLOSE: window.close(); case WINDOW_DEACTIVATE: window.onDeactivate.dispatch(); AudioManager.suspend(); pauseTimer = System.getTimer(); case WINDOW_ENTER: window.onEnter.dispatch(); case WINDOW_EXPOSE: window.onExpose.dispatch(); case WINDOW_FOCUS_IN: window.onFocusIn.dispatch(); case WINDOW_FOCUS_OUT: window.onFocusOut.dispatch(); case WINDOW_LEAVE: window.onLeave.dispatch(); case WINDOW_MAXIMIZE: window.__maximized = true; window.__fullscreen = false; window.__minimized = false; window.onMaximize.dispatch(); case WINDOW_MINIMIZE: window.__minimized = true; window.__maximized = false; window.__fullscreen = false; window.onMinimize.dispatch(); case WINDOW_MOVE: window.__x = windowEventInfo.x; window.__y = windowEventInfo.y; window.onMove.dispatch(windowEventInfo.x, windowEventInfo.y); case WINDOW_RESIZE: window.__width = windowEventInfo.width; window.__height = windowEventInfo.height; window.onResize.dispatch(windowEventInfo.width, windowEventInfo.height); case WINDOW_RESTORE: window.__fullscreen = false; window.__minimized = false; window.onRestore.dispatch(); case WINDOW_SHOW: window.onShow.dispatch(); case WINDOW_HIDE: window.onHide.dispatch(); } } } private function updateTimer():Void { #if (lime_cffi && !macro) if (Timer.sRunningTimers.length > 0) { var currentTime = System.getTimer(); var foundStopped = false; for (timer in Timer.sRunningTimers) { if (timer.mRunning) { if (currentTime >= timer.mFireAt) { timer.mFireAt += timer.mTime; timer.run(); } } else { foundStopped = true; } } if (foundStopped) { Timer.sRunningTimers = Timer.sRunningTimers.filter(function(val) { return val.mRunning; }); } } #if (haxe_ver >= 4.2) #if target.threaded sys.thread.Thread.current().events.progress(); #else // Duplicate code required because Haxe 3 can't handle // #if (haxe_ver >= 4.2 && target.threaded) @:privateAccess haxe.EntryPoint.processEvents(); #end #else @:privateAccess haxe.EntryPoint.processEvents(); #end #end } } @:keep /*private*/ class ApplicationEventInfo { public var deltaTime:Int; public var type:ApplicationEventType; public function new(type:ApplicationEventType = null, deltaTime:Int = 0) { this.type = type; this.deltaTime = deltaTime; } public function clone():ApplicationEventInfo { return new ApplicationEventInfo(type, deltaTime); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract ApplicationEventType(Int) { var UPDATE = 0; var EXIT = 1; } @:keep /*private*/ class ClipboardEventInfo { public var type:ClipboardEventType; public function new(type:ClipboardEventType = null) { this.type = type; } public function clone():ClipboardEventInfo { return new ClipboardEventInfo(type); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract ClipboardEventType(Int) { var UPDATE = 0; } @:keep /*private*/ class DropEventInfo { public var file:#if hl hl.Bytes #else String #end; public var type:DropEventType; public function new(type:DropEventType = null, file = null) { this.type = type; this.file = file; } public function clone():DropEventInfo { return new DropEventInfo(type, file); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract DropEventType(Int) { var DROP_FILE = 0; } @:keep /*private*/ class GamepadEventInfo { public var axis:Int; public var button:Int; public var id:Int; public var type:GamepadEventType; public var axisValue:Float; public function new(type:GamepadEventType = null, id:Int = 0, button:Int = 0, axis:Int = 0, value:Float = 0) { this.type = type; this.id = id; this.button = button; this.axis = axis; this.axisValue = value; } public function clone():GamepadEventInfo { return new GamepadEventInfo(type, id, button, axis, axisValue); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract GamepadEventType(Int) { var AXIS_MOVE = 0; var BUTTON_DOWN = 1; var BUTTON_UP = 2; var CONNECT = 3; var DISCONNECT = 4; } @:keep /*private*/ class JoystickEventInfo { public var id:Int; public var index:Int; public var type:JoystickEventType; public var eventValue:Int; public var x:Float; public var y:Float; public function new(type:JoystickEventType = null, id:Int = 0, index:Int = 0, value:Int = 0, x:Float = 0, y:Float = 0) { this.type = type; this.id = id; this.index = index; this.eventValue = value; this.x = x; this.y = y; } public function clone():JoystickEventInfo { return new JoystickEventInfo(type, id, index, eventValue, x, y); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract JoystickEventType(Int) { var AXIS_MOVE = 0; var HAT_MOVE = 1; var BUTTON_DOWN = 3; var BUTTON_UP = 4; var CONNECT = 5; var DISCONNECT = 6; } @:keep /*private*/ class KeyEventInfo { public var keyCode:Float; public var modifier:Int; public var type:KeyEventType; public var windowID:Int; public function new(type:KeyEventType = null, windowID:Int = 0, keyCode:Float = 0, modifier:Int = 0) { this.type = type; this.windowID = windowID; this.keyCode = keyCode; this.modifier = modifier; } public function clone():KeyEventInfo { return new KeyEventInfo(type, windowID, keyCode, modifier); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract KeyEventType(Int) { var KEY_DOWN = 0; var KEY_UP = 1; } @:keep /*private*/ class MouseEventInfo { public var button:Int; public var movementX:Float; public var movementY:Float; public var type:MouseEventType; public var windowID:Int; public var x:Float; public var y:Float; public var clickCount:Int; public function new(type:MouseEventType = null, windowID:Int = 0, x:Float = 0, y:Float = 0, button:Int = 0, movementX:Float = 0, movementY:Float = 0, clickCount:Int = 0) { this.type = type; this.windowID = 0; this.x = x; this.y = y; this.button = button; this.movementX = movementX; this.movementY = movementY; this.clickCount = clickCount; } public function clone():MouseEventInfo { return new MouseEventInfo(type, windowID, x, y, button, movementX, movementY, clickCount); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract MouseEventType(Int) { var MOUSE_DOWN = 0; var MOUSE_UP = 1; var MOUSE_MOVE = 2; var MOUSE_WHEEL = 3; } @:keep /*private*/ class RenderEventInfo { public var type:RenderEventType; public function new(type:RenderEventType = null) { this.type = type; } public function clone():RenderEventInfo { return new RenderEventInfo(type); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract RenderEventType(Int) { var RENDER = 0; var RENDER_CONTEXT_LOST = 1; var RENDER_CONTEXT_RESTORED = 2; } @:keep /*private*/ class SensorEventInfo { public var id:Int; public var x:Float; public var y:Float; public var z:Float; public var type:SensorEventType; public function new(type:SensorEventType = null, id:Int = 0, x:Float = 0, y:Float = 0, z:Float = 0) { this.type = type; this.id = id; this.x = x; this.y = y; this.z = z; } public function clone():SensorEventInfo { return new SensorEventInfo(type, id, x, y, z); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract SensorEventType(Int) { var ACCELEROMETER = 0; } @:keep /*private*/ class TextEventInfo { public var id:Int; public var length:Int; public var start:Int; public var text:#if hl hl.Bytes #else String #end; public var type:TextEventType; public var windowID:Int; public function new(type:TextEventType = null, windowID:Int = 0, text = null, start:Int = 0, length:Int = 0) { this.type = type; this.windowID = windowID; this.text = text; this.start = start; this.length = length; } public function clone():TextEventInfo { return new TextEventInfo(type, windowID, text, start, length); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract TextEventType(Int) { var TEXT_INPUT = 0; var TEXT_EDIT = 1; } @:keep /*private*/ class TouchEventInfo { public var device:Int; public var dx:Float; public var dy:Float; public var id:Int; public var pressure:Float; public var type:TouchEventType; public var x:Float; public var y:Float; public function new(type:TouchEventType = null, x:Float = 0, y:Float = 0, id:Int = 0, dx:Float = 0, dy:Float = 0, pressure:Float = 0, device:Int = 0) { this.type = type; this.x = x; this.y = y; this.id = id; this.dx = dx; this.dy = dy; this.pressure = pressure; this.device = device; } public function clone():TouchEventInfo { return new TouchEventInfo(type, x, y, id, dx, dy, pressure, device); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract TouchEventType(Int) { var TOUCH_START = 0; var TOUCH_END = 1; var TOUCH_MOVE = 2; } @:keep /*private*/ class WindowEventInfo { public var height:Int; public var type:WindowEventType; public var width:Int; public var windowID:Int; public var x:Int; public var y:Int; public function new(type:WindowEventType = null, windowID:Int = 0, width:Int = 0, height:Int = 0, x:Int = 0, y:Int = 0) { this.type = type; this.windowID = windowID; this.width = width; this.height = height; this.x = x; this.y = y; } public function clone():WindowEventInfo { return new WindowEventInfo(type, windowID, width, height, x, y); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract WindowEventType(Int) { var WINDOW_ACTIVATE = 0; var WINDOW_CLOSE = 1; var WINDOW_DEACTIVATE = 2; var WINDOW_ENTER = 3; var WINDOW_EXPOSE = 4; var WINDOW_FOCUS_IN = 5; var WINDOW_FOCUS_OUT = 6; var WINDOW_LEAVE = 7; var WINDOW_MAXIMIZE = 8; var WINDOW_MINIMIZE = 9; var WINDOW_MOVE = 10; var WINDOW_RESIZE = 11; var WINDOW_RESTORE = 12; var WINDOW_SHOW = 13; var WINDOW_HIDE = 14; } @:keep /*private*/ class OrientationEventInfo { public var orientation:Int; public var display:Int; public var type:OrientationEventType; public function new(type:OrientationEventType = null, orientation:Int = 0, display:Int = -1) { this.type = type; this.orientation = orientation; this.display = display; } public function clone():OrientationEventInfo { return new OrientationEventInfo(type, orientation, display); } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract OrientationEventType(Int) { var DISPLAY_ORIENTATION_CHANGE = 0; var DEVICE_ORIENTATION_CHANGE = 1; } #if android @:keep private class OrientationChangeListener implements JNISafety { private var callback:Int->Void; public function new(callback:Int->Void) { this.callback = callback; } @:runOnMainThread public function onOrientationChanged(orientation:Int):Void { callback(orientation); } } #end ================================================ FILE: src/lime/_internal/backend/native/NativeAudioSource.hx ================================================ package lime._internal.backend.native; import haxe.Int64; import haxe.Timer; import lime.math.Vector4; import lime.media.openal.AL; import lime.media.openal.ALBuffer; import lime.media.openal.ALSource; import lime.media.vorbis.VorbisFile; import lime.media.AudioManager; import lime.media.AudioSource; import lime.utils.UInt8Array; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime.media.AudioBuffer) class NativeAudioSource { private static var STREAM_BUFFER_SIZE = 48000; #if (native_audio_buffers && !macro) private static var STREAM_NUM_BUFFERS = Std.parseInt(haxe.macro.Compiler.getDefine("native_audio_buffers")); #else private static var STREAM_NUM_BUFFERS = 3; #end private static var STREAM_TIMER_FREQUENCY = 100; private var buffers:Array; private var bufferTimeBlocks:Array; private var completed:Bool; private var dataLength:Int; private var format:Int; private var handle:ALSource; private var length:Null; private var loops:Int; private var parent:AudioSource; private var playing:Bool; private var position:Vector4; private var samples:Int; private var stream:Bool; private var streamTimer:Timer; private var timer:Timer; public function new(parent:AudioSource) { this.parent = parent; position = new Vector4(); } public function dispose():Void { if (handle != null) { stop(); AL.sourcei(handle, AL.BUFFER, null); AL.deleteSource(handle); if (buffers != null) { for (buffer in buffers) { AL.deleteBuffer(buffer); } buffers = null; } handle = null; } } public function init():Void { dataLength = 0; format = 0; if (parent.buffer.channels == 1) { if (parent.buffer.bitsPerSample == 8) { format = AL.FORMAT_MONO8; } else if (parent.buffer.bitsPerSample == 16) { format = AL.FORMAT_MONO16; } } else if (parent.buffer.channels == 2) { if (parent.buffer.bitsPerSample == 8) { format = AL.FORMAT_STEREO8; } else if (parent.buffer.bitsPerSample == 16) { format = AL.FORMAT_STEREO16; } } if (parent.buffer.__srcVorbisFile != null) { stream = true; var vorbisFile = parent.buffer.__srcVorbisFile; dataLength = Std.int(Int64.toInt(vorbisFile.pcmTotal()) * parent.buffer.channels * (parent.buffer.bitsPerSample / 8)); buffers = new Array(); bufferTimeBlocks = new Array(); for (i in 0...STREAM_NUM_BUFFERS) { buffers.push(AL.createBuffer()); bufferTimeBlocks.push(0); } handle = AL.createSource(); } else { if (parent.buffer.__srcBuffer == null) { parent.buffer.__srcBuffer = AL.createBuffer(); if (parent.buffer.__srcBuffer != null) { AL.bufferData(parent.buffer.__srcBuffer, format, parent.buffer.data, parent.buffer.data.length, parent.buffer.sampleRate); } } dataLength = parent.buffer.data.length; handle = AL.createSource(); if (handle != null) { AL.sourcei(handle, AL.BUFFER, parent.buffer.__srcBuffer); } } samples = Std.int((dataLength * 8.0) / (parent.buffer.channels * parent.buffer.bitsPerSample)); } public function play():Void { /*var pitch:Float = AL.getSourcef (handle, AL.PITCH); trace(pitch); AL.sourcef (handle, AL.PITCH, pitch*0.9); pitch = AL.getSourcef (handle, AL.PITCH); trace(pitch); */ /*var pos = getPosition(); trace(AL.DISTANCE_MODEL); AL.distanceModel(AL.INVERSE_DISTANCE); trace(AL.DISTANCE_MODEL); AL.sourcef(handle, AL.ROLLOFF_FACTOR, 5); setPosition(new Vector4(10, 10, -100)); pos = getPosition(); trace(pos); */ /*var filter = AL.createFilter(); trace(AL.getErrorString()); AL.filteri(filter, AL.FILTER_TYPE, AL.FILTER_LOWPASS); trace(AL.getErrorString()); AL.filterf(filter, AL.LOWPASS_GAIN, 0.5); trace(AL.getErrorString()); AL.filterf(filter, AL.LOWPASS_GAINHF, 0.5); trace(AL.getErrorString()); AL.sourcei(handle, AL.DIRECT_FILTER, filter); trace(AL.getErrorString()); */ if (playing || handle == null) { return; } playing = true; if (stream) { setCurrentTime(getCurrentTime()); streamTimer = new Timer(STREAM_TIMER_FREQUENCY); streamTimer.run = streamTimer_onRun; } else { var time = completed ? 0 : getCurrentTime(); setCurrentTime(time); } } public function pause():Void { playing = false; if (handle == null) return; AL.sourcePause(handle); if (streamTimer != null) { streamTimer.stop(); } if (timer != null) { timer.stop(); } } private function readVorbisFileBuffer(vorbisFile:VorbisFile, length:Int):UInt8Array { #if lime_vorbis var buffer = new UInt8Array(length); var read = 0, total = 0, readMax; for (i in 0...STREAM_NUM_BUFFERS-1) { bufferTimeBlocks[i] = bufferTimeBlocks[i + 1]; } bufferTimeBlocks[STREAM_NUM_BUFFERS-1] = vorbisFile.timeTell(); while (total < length) { readMax = 4096; if (readMax > length - total) { readMax = length - total; } read = vorbisFile.read(buffer.buffer, total, readMax); if (read > 0) { total += read; } else { break; } } return buffer; #else return null; #end } private function refillBuffers(buffers:Array = null):Void { #if lime_vorbis var vorbisFile = null; var position = 0; if (buffers == null) { var buffersProcessed:Int = AL.getSourcei(handle, AL.BUFFERS_PROCESSED); if (buffersProcessed > 0) { vorbisFile = parent.buffer.__srcVorbisFile; position = Int64.toInt(vorbisFile.pcmTell()); if (position < dataLength) { buffers = AL.sourceUnqueueBuffers(handle, buffersProcessed); } } } if (buffers != null) { if (vorbisFile == null) { vorbisFile = parent.buffer.__srcVorbisFile; position = Int64.toInt(vorbisFile.pcmTell()); } var numBuffers = 0; var data; for (buffer in buffers) { if (dataLength - position >= STREAM_BUFFER_SIZE) { data = readVorbisFileBuffer(vorbisFile, STREAM_BUFFER_SIZE); AL.bufferData(buffer, format, data, data.length, parent.buffer.sampleRate); position += STREAM_BUFFER_SIZE; numBuffers++; } else if (position < dataLength) { data = readVorbisFileBuffer(vorbisFile, dataLength - position); AL.bufferData(buffer, format, data, data.length, parent.buffer.sampleRate); numBuffers++; break; } } AL.sourceQueueBuffers(handle, numBuffers, buffers); // OpenAL can unexpectedly stop playback if the buffers run out // of data, which typically happens if an operation (such as // resizing a window) freezes the main thread. // If AL is supposed to be playing but isn't, restart it here. if (playing && handle != null && AL.getSourcei(handle, AL.SOURCE_STATE) == AL.STOPPED) { AL.sourcePlay(handle); } } #end } public function stop():Void { if (playing && handle != null && AL.getSourcei(handle, AL.SOURCE_STATE) == AL.PLAYING) { AL.sourceStop(handle); } playing = false; if (streamTimer != null) { streamTimer.stop(); } if (timer != null) { timer.stop(); } setCurrentTime(0); } // Event Handlers private function streamTimer_onRun():Void { refillBuffers(); } private function timer_onRun():Void { if (loops > 0) { playing = false; loops--; setCurrentTime(0); play(); return; } else { stop(); } completed = true; parent.onComplete.dispatch(); } // Get & Set Methods public function getCurrentTime():Int { if (completed) { return getLength(); } else if (handle != null) { if (stream) { var time = (Std.int(bufferTimeBlocks[0] * 1000) + Std.int(AL.getSourcef(handle, AL.SEC_OFFSET) * 1000)) - parent.offset; if (time < 0) return 0; return time; } else { var offset = AL.getSourcei(handle, AL.BYTE_OFFSET); var ratio = (offset / dataLength); var totalSeconds = samples / parent.buffer.sampleRate; var time = Std.int(totalSeconds * ratio * 1000) - parent.offset; // var time = Std.int (AL.getSourcef (handle, AL.SEC_OFFSET) * 1000) - parent.offset; if (time < 0) return 0; return time; } } return 0; } public function setCurrentTime(value:Int):Int { // `setCurrentTime()` has side effects and is never safe to skip. /* if (value == getCurrentTime()) { return value; } */ if (handle != null) { if (stream) { AL.sourceStop(handle); parent.buffer.__srcVorbisFile.timeSeek((value + parent.offset) / 1000); AL.sourceUnqueueBuffers(handle, STREAM_NUM_BUFFERS); refillBuffers(buffers); if (playing) AL.sourcePlay(handle); } else if (parent.buffer != null) { AL.sourceRewind(handle); // AL.sourcef (handle, AL.SEC_OFFSET, (value + parent.offset) / 1000); var secondOffset = (value + parent.offset) / 1000; var totalSeconds = samples / parent.buffer.sampleRate; if (secondOffset < 0) secondOffset = 0; if (secondOffset > totalSeconds) secondOffset = totalSeconds; var ratio = (secondOffset / totalSeconds); var totalOffset = Std.int(dataLength * ratio); AL.sourcei(handle, AL.BYTE_OFFSET, totalOffset); if (playing) AL.sourcePlay(handle); } } if (playing) { if (timer != null) { timer.stop(); } var timeRemaining = Std.int((getLength() - value) / getPitch()); if (timeRemaining > 0) { completed = false; timer = new Timer(timeRemaining); timer.run = timer_onRun; } else { playing = false; completed = true; } } return value; } public function getGain():Float { if (handle != null) { return AL.getSourcef(handle, AL.GAIN); } else { return 1; } } public function setGain(value:Float):Float { if (handle != null) { AL.sourcef(handle, AL.GAIN, value); } return value; } public function getLength():Int { if (length != null) { return length; } return Std.int(samples / parent.buffer.sampleRate * 1000) - parent.offset; } public function setLength(value:Int):Int { if (playing && length != value) { if (timer != null) { timer.stop(); } var timeRemaining = Std.int((value - getCurrentTime()) / getPitch()); if (timeRemaining > 0) { timer = new Timer(timeRemaining); timer.run = timer_onRun; } } return length = value; } public function getLoops():Int { return loops; } public function setLoops(value:Int):Int { return loops = value; } public function getPitch():Float { if (handle != null) { return AL.getSourcef(handle, AL.PITCH); } else { return 1; } } public function setPitch(value:Float):Float { if (playing && value != getPitch()) { if (timer != null) { timer.stop(); } var timeRemaining = Std.int((getLength() - getCurrentTime()) / value); if (timeRemaining > 0) { timer = new Timer(timeRemaining); timer.run = timer_onRun; } } if (handle != null) { AL.sourcef(handle, AL.PITCH, value); } return value; } public function getPosition():Vector4 { if (handle != null) { #if !webassembly var value = AL.getSource3f(handle, AL.POSITION); position.x = value[0]; position.y = value[1]; position.z = value[2]; #end } return position; } public function setPosition(value:Vector4):Vector4 { position.x = value.x; position.y = value.y; position.z = value.z; position.w = value.w; if (handle != null) { AL.distanceModel(AL.NONE); AL.source3f(handle, AL.POSITION, position.x, position.y, position.z); } return position; } } ================================================ FILE: src/lime/_internal/backend/native/NativeCFFI.hx ================================================ package lime._internal.backend.native; import haxe.io.Bytes; import lime.graphics.opengl.GLBuffer; import lime.graphics.opengl.GLFramebuffer; import lime.graphics.opengl.GLProgram; import lime.graphics.opengl.GLRenderbuffer; import lime.graphics.opengl.GLShader; import lime.graphics.opengl.GLTexture; import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.math.Rectangle; import lime.media.openal.ALAuxiliaryEffectSlot; import lime.utils.DataPointer; #if hl import lime._internal.backend.native.NativeApplication; import lime.graphics.cairo.CairoGlyph; import lime.graphics.opengl.GL; import lime.math.Matrix3; import lime.math.Vector2; import lime.media.openal.ALContext; import lime.media.openal.ALDevice; import lime.media.AudioBuffer; import lime.system.DisplayMode; import lime.utils.ArrayBufferView; #end #if (!lime_doc_gen || lime_cffi) import lime.system.CFFI; import lime.system.CFFIPointer; #end #if (cpp && !cppia) import cpp.Float32; #else typedef Float32 = Float; #end #if (lime_doc_gen && !lime_cffi) typedef CFFI = Dynamic; typedef CFFIPointer = Dynamic; #end // #if hl // typedef TNative_Application = hl.Abstract<"Application">; // #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end #if (!macro && !lime_doc_gen) #if (disable_cffi || haxe_ver < "3.4.0") @:build(lime.system.CFFI.build()) #end #end class NativeCFFI { #if (lime_cffi && !macro) #if (cpp && !cppia) #if (disable_cffi || haxe_ver < "3.4.0") @:cffi private static function lime_application_create():Dynamic; @:cffi private static function lime_application_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_application_exec(handle:Dynamic):Int; @:cffi private static function lime_application_init(handle:Dynamic):Void; @:cffi private static function lime_application_quit(handle:Dynamic):Int; @:cffi private static function lime_application_set_frame_rate(handle:Dynamic, value:Float):Void; @:cffi private static function lime_application_update(handle:Dynamic):Bool; @:cffi private static function lime_audio_load(data:Dynamic, buffer:Dynamic):Dynamic; @:cffi private static function lime_audio_load_bytes(data:Dynamic, buffer:Dynamic):Dynamic; @:cffi private static function lime_audio_load_file(path:Dynamic, buffer:Dynamic):Dynamic; @:cffi private static function lime_bytes_from_data_pointer(data:Float, length:Int, bytes:Dynamic):Dynamic; @:cffi private static function lime_bytes_get_data_pointer(data:Dynamic):Float; @:cffi private static function lime_bytes_get_data_pointer_offset(data:Dynamic, offset:Int):Float; @:cffi private static function lime_bytes_read_file(path:String, bytes:Dynamic):Dynamic; @:cffi private static function lime_cffi_get_native_pointer(ptr:Dynamic):Float; @:cffi private static function lime_clipboard_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_clipboard_get_text():Dynamic; @:cffi private static function lime_clipboard_set_text(text:String):Void; @:cffi private static function lime_data_pointer_offset(dataPointer:DataPointer, offset:Int):Float; @:cffi private static function lime_deflate_compress(data:Dynamic, bytes:Dynamic):Dynamic; @:cffi private static function lime_deflate_decompress(data:Dynamic, bytes:Dynamic):Dynamic; @:cffi private static function lime_drop_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_file_dialog_open_directory(title:String, filter:String, defaultPath:String):Dynamic; @:cffi private static function lime_file_dialog_open_file(title:String, filter:String, defaultPath:String):Dynamic; @:cffi private static function lime_file_dialog_open_files(title:String, filter:String, defaultPath:String):Dynamic; @:cffi private static function lime_file_dialog_save_file(title:String, filter:String, defaultPath:String):Dynamic; @:cffi private static function lime_file_watcher_create(callback:Dynamic):CFFIPointer; @:cffi private static function lime_file_watcher_add_directory(handle:CFFIPointer, path:Dynamic, recursive:Bool):Dynamic; @:cffi private static function lime_file_watcher_remove_directory(handle:CFFIPointer, watchID:Dynamic):Void; @:cffi private static function lime_file_watcher_update(handle:CFFIPointer):Void; @:cffi private static function lime_font_get_ascender(handle:Dynamic):Int; @:cffi private static function lime_font_get_descender(handle:Dynamic):Int; @:cffi private static function lime_font_get_family_name(handle:Dynamic):Dynamic; @:cffi private static function lime_font_get_glyph_index(handle:Dynamic, character:String):Int; @:cffi private static function lime_font_get_glyph_indices(handle:Dynamic, characters:String):Dynamic; @:cffi private static function lime_font_get_glyph_metrics(handle:Dynamic, index:Int):Dynamic; @:cffi private static function lime_font_get_height(handle:Dynamic):Int; @:cffi private static function lime_font_get_num_glyphs(handle:Dynamic):Int; @:cffi private static function lime_font_get_underline_position(handle:Dynamic):Int; @:cffi private static function lime_font_get_underline_thickness(handle:Dynamic):Int; @:cffi private static function lime_font_get_strikethrough_position(handle:Dynamic):Int; @:cffi private static function lime_font_get_strikethrough_thickness(handle:Dynamic):Int; @:cffi private static function lime_font_get_units_per_em(handle:Dynamic):Int; @:cffi private static function lime_font_load(data:Dynamic):Dynamic; @:cffi private static function lime_font_load_bytes(data:Dynamic):Dynamic; @:cffi private static function lime_font_load_file(path:Dynamic):Dynamic; @:cffi private static function lime_font_outline_decompose(handle:Dynamic, size:Int):Dynamic; @:cffi private static function lime_font_render_glyph(handle:Dynamic, index:Int, data:Dynamic):Dynamic; @:cffi private static function lime_font_render_glyphs(handle:Dynamic, indices:Dynamic, data:Dynamic):Dynamic; @:cffi private static function lime_font_set_size(handle:Dynamic, size:Int, dpi:Int):Void; @:cffi private static function lime_gamepad_add_mappings(mappings:Dynamic):Void; @:cffi private static function lime_gamepad_get_device_guid(id:Int):Dynamic; @:cffi private static function lime_gamepad_get_device_name(id:Int):Dynamic; @:cffi private static function lime_gamepad_rumble(id:Int, lowFrequencyRumble:Float, highFrequencyRumble:Float, duration:Int):Void; @:cffi private static function lime_gamepad_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_gzip_compress(data:Dynamic, bytes:Dynamic):Dynamic; @:cffi private static function lime_gzip_decompress(data:Dynamic, bytes:Dynamic):Dynamic; @:cffi private static function lime_haptic_vibrate(period:Int, duration:Int):Void; @:cffi private static function lime_image_encode(data:Dynamic, type:Int, quality:Int, bytes:Dynamic):Dynamic; @:cffi private static function lime_image_load(data:Dynamic, buffer:Dynamic):Dynamic; @:cffi private static function lime_image_load_bytes(data:Dynamic, buffer:Dynamic):Dynamic; @:cffi private static function lime_image_load_file(path:Dynamic, buffer:Dynamic):Dynamic; @:cffi private static function lime_image_data_util_color_transform(image:Dynamic, rect:Dynamic, colorMatrix:Dynamic):Void; @:cffi private static function lime_image_data_util_copy_channel(image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, srcChannel:Int, destChannel:Int):Void; @:cffi private static function lime_image_data_util_copy_pixels(image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, alphaImage:Dynamic, alphaPoint:Dynamic, mergeAlpha:Bool):Void; @:cffi private static function lime_image_data_util_fill_rect(image:Dynamic, rect:Dynamic, rg:Int, ba:Int):Void; @:cffi private static function lime_image_data_util_flood_fill(image:Dynamic, x:Int, y:Int, rg:Int, ba:Int):Void; @:cffi private static function lime_image_data_util_get_pixels(image:Dynamic, rect:Dynamic, format:Int, bytes:Dynamic):Void; @:cffi private static function lime_image_data_util_merge(image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, redMultiplier:Int, greenMultiplier:Int, blueMultiplier:Int, alphaMultiplier:Int):Void; @:cffi private static function lime_image_data_util_multiply_alpha(image:Dynamic):Void; @:cffi private static function lime_image_data_util_resize(image:Dynamic, buffer:Dynamic, width:Int, height:Int):Void; @:cffi private static function lime_image_data_util_set_format(image:Dynamic, format:Int):Void; @:cffi private static function lime_image_data_util_set_pixels(image:Dynamic, rect:Dynamic, bytes:Dynamic, offset:Int, format:Int, endian:Int):Void; @:cffi private static function lime_image_data_util_threshold(image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, operation:Int, thresholdRG:Int, thresholdBA:Int, colorRG:Int, colorBA:Int, maskRG:Int, maskBA:Int, copySource:Bool):Int; @:cffi private static function lime_image_data_util_unmultiply_alpha(image:Dynamic):Void; @:cffi private static function lime_joystick_get_device_guid(id:Int):Dynamic; @:cffi private static function lime_joystick_get_device_name(id:Int):Dynamic; @:cffi private static function lime_joystick_get_num_axes(id:Int):Int; @:cffi private static function lime_joystick_get_num_buttons(id:Int):Int; @:cffi private static function lime_joystick_get_num_hats(id:Int):Int; @:cffi private static function lime_joystick_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_jpeg_decode_bytes(data:Dynamic, decodeData:Bool, buffer:Dynamic):Dynamic; @:cffi private static function lime_jpeg_decode_file(path:String, decodeData:Bool, buffer:Dynamic):Dynamic; @:cffi private static function lime_key_code_from_scan_code(scanCode:Int):Int; @:cffi private static function lime_key_code_to_scan_code(keyCode:Int):Int; @:cffi private static function lime_key_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_lzma_compress(data:Dynamic, bytes:Dynamic):Dynamic; @:cffi private static function lime_lzma_decompress(data:Dynamic, bytes:Dynamic):Dynamic; @:cffi private static function lime_mouse_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_neko_execute(module:String):Void; @:cffi private static function lime_orientation_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_png_decode_bytes(data:Dynamic, decodeData:Bool, buffer:Dynamic):Dynamic; @:cffi private static function lime_png_decode_file(path:String, decodeData:Bool, buffer:Dynamic):Dynamic; @:cffi private static function lime_render_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_sensor_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_system_get_allow_screen_timeout():Bool; @:cffi private static function lime_system_set_allow_screen_timeout(value:Bool):Bool; @:cffi private static function lime_system_get_device_model():Dynamic; @:cffi private static function lime_system_get_device_vendor():Dynamic; @:cffi private static function lime_system_get_directory(type:Int, company:String, title:String):Dynamic; @:cffi private static function lime_system_get_display(index:Int):Dynamic; @:cffi private static function lime_system_get_ios_tablet():Bool; @:cffi private static function lime_system_get_num_displays():Int; @:cffi private static function lime_system_get_device_orientation():Int; @:cffi private static function lime_system_get_platform_label():Dynamic; @:cffi private static function lime_system_get_platform_name():Dynamic; @:cffi private static function lime_system_get_platform_version():Dynamic; @:cffi private static function lime_system_get_timer():Float; @:cffi private static function lime_system_open_file(path:String):Void; @:cffi private static function lime_system_open_url(url:String, target:String):Void; @:cffi private static function lime_text_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_touch_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_window_alert(handle:Dynamic, message:String, title:String):Void; @:cffi private static function lime_window_close(handle:Dynamic):Void; @:cffi private static function lime_window_context_flip(handle:Dynamic):Void; @:cffi private static function lime_window_context_lock(handle:Dynamic):Dynamic; @:cffi private static function lime_window_context_make_current(handle:Dynamic):Void; @:cffi private static function lime_window_context_unlock(handle:Dynamic):Void; @:cffi private static function lime_window_create(application:Dynamic, width:Int, height:Int, flags:Int, title:String):Dynamic; @:cffi private static function lime_window_focus(handle:Dynamic):Void; @:cffi private static function lime_window_get_context(handle:Dynamic):Float; @:cffi private static function lime_window_get_context_type(handle:Dynamic):Dynamic; @:cffi private static function lime_window_get_display(handle:Dynamic):Int; @:cffi private static function lime_window_get_display_mode(handle:Dynamic):Dynamic; @:cffi private static function lime_window_get_height(handle:Dynamic):Int; @:cffi private static function lime_window_get_id(handle:Dynamic):Int; @:cffi private static function lime_window_get_mouse_lock(handle:Dynamic):Bool; @:cffi private static function lime_window_get_opacity(handle:Dynamic):Float; @:cffi private static function lime_window_get_scale(handle:Dynamic):Float; @:cffi private static function lime_window_get_text_input_enabled(handle:Dynamic):Bool; @:cffi private static function lime_window_get_width(handle:Dynamic):Int; @:cffi private static function lime_window_get_x(handle:Dynamic):Int; @:cffi private static function lime_window_get_y(handle:Dynamic):Int; @:cffi private static function lime_window_move(handle:Dynamic, x:Int, y:Int):Void; @:cffi private static function lime_window_read_pixels(handle:Dynamic, rect:Dynamic, imageBuffer:Dynamic):Dynamic; @:cffi private static function lime_window_resize(handle:Dynamic, width:Int, height:Int):Void; @:cffi private static function lime_window_set_minimum_size(handle:Dynamic, width:Int, height:Int):Void; @:cffi private static function lime_window_set_maximum_size(handle:Dynamic, width:Int, height:Int):Void; @:cffi private static function lime_window_set_borderless(handle:Dynamic, borderless:Bool):Bool; @:cffi private static function lime_window_set_cursor(handle:Dynamic, cursor:Int):Void; @:cffi private static function lime_window_set_display_mode(handle:Dynamic, displayMode:Dynamic):Dynamic; @:cffi private static function lime_window_set_fullscreen(handle:Dynamic, fullscreen:Bool):Bool; @:cffi private static function lime_window_set_icon(handle:Dynamic, buffer:Dynamic):Void; @:cffi private static function lime_window_set_maximized(handle:Dynamic, maximized:Bool):Bool; @:cffi private static function lime_window_set_minimized(handle:Dynamic, minimized:Bool):Bool; @:cffi private static function lime_window_set_mouse_lock(handle:Dynamic, mouseLock:Bool):Void; @:cffi private static function lime_window_set_opacity(handle:Dynamic, value:Float):Void; @:cffi private static function lime_window_set_resizable(handle:Dynamic, resizable:Bool):Bool; @:cffi private static function lime_window_set_text_input_enabled(handle:Dynamic, enabled:Bool):Void; @:cffi private static function lime_window_set_text_input_rect(handle:Dynamic, rect:Dynamic):Void; @:cffi private static function lime_window_set_title(handle:Dynamic, title:String):Dynamic; @:cffi private static function lime_window_set_visible(handle:Dynamic, visible:Bool):Bool; @:cffi private static function lime_window_warp_mouse(handle:Dynamic, x:Int, y:Int):Void; @:cffi private static function lime_window_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_zlib_compress(data:Dynamic, bytes:Dynamic):Dynamic; @:cffi private static function lime_zlib_decompress(data:Dynamic, bytes:Dynamic):Dynamic; #else private static var lime_application_create = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_application_create", "o", false)); private static var lime_application_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_application_event_manager_register", "oov", false)); private static var lime_application_exec = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_application_exec", "oi", false)); private static var lime_application_init = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_application_init", "ov", false)); private static var lime_application_quit = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_application_quit", "oi", false)); private static var lime_application_set_frame_rate = new cpp.CallableFloat->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_application_set_frame_rate", "odv", false)); private static var lime_application_update = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_application_update", "ob", false)); private static var lime_audio_load = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_audio_load", "ooo", false)); private static var lime_audio_load_bytes = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_audio_load_bytes", "ooo", false)); private static var lime_audio_load_file = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_audio_load_file", "ooo", false)); private static var lime_bytes_from_data_pointer = new cpp.CallableInt->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_bytes_from_data_pointer", "dioo", false)); private static var lime_bytes_get_data_pointer = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_bytes_get_data_pointer", "od", false)); private static var lime_bytes_get_data_pointer_offset = new cpp.CallableInt->Float>(cpp.Prime._loadPrime("lime", "lime_bytes_get_data_pointer_offset", "oid", false)); private static var lime_bytes_read_file = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_bytes_read_file", "soo", false)); private static var lime_cffi_get_native_pointer = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_cffi_get_native_pointer", "od", false)); private static var lime_clipboard_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_clipboard_event_manager_register", "oov", false)); private static var lime_clipboard_get_text = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_clipboard_get_text", "o", false)); private static var lime_clipboard_set_text = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_clipboard_set_text", "sv", false)); private static var lime_data_pointer_offset = new cpp.CallableInt->Float>(cpp.Prime._loadPrime("lime", "lime_data_pointer_offset", "did", false)); private static var lime_deflate_compress = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_deflate_compress", "ooo", false)); private static var lime_deflate_decompress = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_deflate_decompress", "ooo", false)); private static var lime_drop_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_drop_event_manager_register", "oov", false)); private static var lime_file_dialog_open_directory = new cpp.CallableString->String->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_file_dialog_open_directory", "ssso", false)); private static var lime_file_dialog_open_file = new cpp.CallableString->String->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_file_dialog_open_file", "ssso", false)); private static var lime_file_dialog_open_files = new cpp.CallableString->String->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_file_dialog_open_files", "ssso", false)); private static var lime_file_dialog_save_file = new cpp.CallableString->String->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_file_dialog_save_file", "ssso", false)); private static var lime_file_watcher_create = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_file_watcher_create", "oo", false)); private static var lime_file_watcher_add_directory = new cpp.Callablecpp.Object->Bool->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_file_watcher_add_directory", "oobo", false)); private static var lime_file_watcher_remove_directory = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_file_watcher_remove_directory", "oov", false)); private static var lime_file_watcher_update = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_file_watcher_update", "ov", false)); private static var lime_font_get_ascender = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_font_get_ascender", "oi", false)); private static var lime_font_get_descender = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_font_get_descender", "oi", false)); private static var lime_font_get_family_name = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_get_family_name", "oo", false)); private static var lime_font_get_glyph_index = new cpp.CallableString->Int>(cpp.Prime._loadPrime("lime", "lime_font_get_glyph_index", "osi", false)); private static var lime_font_get_glyph_indices = new cpp.CallableString->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_get_glyph_indices", "oso", false)); private static var lime_font_get_glyph_metrics = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_get_glyph_metrics", "oio", false)); private static var lime_font_get_height = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_font_get_height", "oi", false)); private static var lime_font_get_num_glyphs = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_font_get_num_glyphs", "oi", false)); private static var lime_font_get_underline_position = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_font_get_underline_position", "oi", false)); private static var lime_font_get_underline_thickness = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_font_get_underline_thickness", "oi", false)); private static var lime_font_get_strikethrough_position = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_font_get_strikethrough_position", "oi", false)); private static var lime_font_get_strikethrough_thickness = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_font_get_strikethrough_thickness", "oi", false)); private static var lime_font_get_units_per_em = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_font_get_units_per_em", "oi", false)); private static var lime_font_load = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_load", "oo", false)); private static var lime_font_load_bytes = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_load_bytes", "oo", false)); private static var lime_font_load_file = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_load_file", "oo", false)); private static var lime_font_outline_decompose = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_outline_decompose", "oio", false)); private static var lime_font_render_glyph = new cpp.CallableInt->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_render_glyph", "oioo", false)); private static var lime_font_render_glyphs = new cpp.Callablecpp.Object->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_render_glyphs", "oooo", false)); private static var lime_font_set_size = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_font_set_size", "oiiv", false)); private static var lime_gamepad_add_mappings = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gamepad_add_mappings", "ov", false)); private static var lime_gamepad_get_device_guid = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gamepad_get_device_guid", "io", false)); private static var lime_gamepad_get_device_name = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gamepad_get_device_name", "io", false)); private static var lime_gamepad_rumble = new cpp.CallableFloat->Float->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gamepad_rumble", "iddiv", false)); private static var lime_gamepad_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gamepad_event_manager_register", "oov", false)); private static var lime_gzip_compress = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gzip_compress", "ooo", false)); private static var lime_gzip_decompress = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gzip_decompress", "ooo", false)); private static var lime_haptic_vibrate = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_haptic_vibrate", "iiv", false)); private static var lime_image_encode = new cpp.CallableInt->Int->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_image_encode", "oiioo", false)); private static var lime_image_load = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_image_load", "ooo", false)); private static var lime_image_load_bytes = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_image_load_bytes", "ooo", false)); private static var lime_image_load_file = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_image_load_file", "ooo", false)); private static var lime_image_data_util_color_transform = new cpp.Callablecpp.Object->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_color_transform", "ooov", false)); private static var lime_image_data_util_copy_channel = new cpp.Callablecpp.Object->cpp.Object->cpp.Object->Int->Int-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_copy_channel", "ooooiiv", false)); private static var lime_image_data_util_copy_pixels = new cpp.Callablecpp.Object->cpp.Object->cpp.Object->cpp.Object->cpp.Object->Bool-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_copy_pixels", "oooooobv", false)); private static var lime_image_data_util_fill_rect = new cpp.Callablecpp.Object->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_fill_rect", "ooiiv", false)); private static var lime_image_data_util_flood_fill = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_flood_fill", "oiiiiv", false)); private static var lime_image_data_util_get_pixels = new cpp.Callablecpp.Object->Int->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_get_pixels", "ooiov", false)); private static var lime_image_data_util_merge = new cpp.Callablecpp.Object->cpp.Object->cpp.Object->Int->Int->Int->Int-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_merge", "ooooiiiiv", false)); private static var lime_image_data_util_multiply_alpha = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_multiply_alpha", "ov", false)); private static var lime_image_data_util_resize = new cpp.Callablecpp.Object->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_resize", "ooiiv", false)); private static var lime_image_data_util_set_format = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_set_format", "oiv", false)); private static var lime_image_data_util_set_pixels = new cpp.Callablecpp.Object->cpp.Object->Int->Int->Int-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_set_pixels", "oooiiiv", false)); private static var lime_image_data_util_threshold = new cpp.Callablecpp.Object->cpp.Object->cpp.Object->Int->Int->Int->Int->Int->Int->Int-> Bool->Int>(cpp.Prime._loadPrime("lime", "lime_image_data_util_threshold", "ooooiiiiiiibi", false)); private static var lime_image_data_util_unmultiply_alpha = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_image_data_util_unmultiply_alpha", "ov", false)); private static var lime_joystick_get_device_guid = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_joystick_get_device_guid", "io", false)); private static var lime_joystick_get_device_name = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_joystick_get_device_name", "io", false)); private static var lime_joystick_get_num_axes = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_joystick_get_num_axes", "ii", false)); private static var lime_joystick_get_num_buttons = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_joystick_get_num_buttons", "ii", false)); private static var lime_joystick_get_num_hats = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_joystick_get_num_hats", "ii", false)); private static var lime_joystick_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_joystick_event_manager_register", "oov", false)); private static var lime_jpeg_decode_bytes = new cpp.CallableBool->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_jpeg_decode_bytes", "oboo", false)); private static var lime_jpeg_decode_file = new cpp.CallableBool->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_jpeg_decode_file", "sboo", false)); private static var lime_key_code_from_scan_code = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_key_code_from_scan_code", "ii", false)); private static var lime_key_code_to_scan_code = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_key_code_to_scan_code", "ii", false)); private static var lime_key_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_key_event_manager_register", "oov", false)); private static var lime_lzma_compress = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_lzma_compress", "ooo", false)); private static var lime_lzma_decompress = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_lzma_decompress", "ooo", false)); private static var lime_mouse_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_mouse_event_manager_register", "oov", false)); private static var lime_neko_execute = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_neko_execute", "sv", false)); private static var lime_orientation_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_orientation_event_manager_register", "oov", false)); private static var lime_png_decode_bytes = new cpp.CallableBool->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_png_decode_bytes", "oboo", false)); private static var lime_png_decode_file = new cpp.CallableBool->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_png_decode_file", "sboo", false)); private static var lime_render_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_render_event_manager_register", "oov", false)); private static var lime_sensor_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_sensor_event_manager_register", "oov", false)); private static var lime_system_get_allow_screen_timeout = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_system_get_allow_screen_timeout", "b", false)); private static var lime_system_set_allow_screen_timeout = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_system_set_allow_screen_timeout", "bb", false)); private static var lime_system_get_device_model = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_system_get_device_model", "o", false)); private static var lime_system_get_device_vendor = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_system_get_device_vendor", "o", false)); private static var lime_system_get_directory = new cpp.CallableString->String->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_system_get_directory", "isso", false)); private static var lime_system_get_display = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_system_get_display", "io", false)); private static var lime_system_get_ios_tablet = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_system_get_ios_tablet", "b", false)); private static var lime_system_get_num_displays = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_system_get_num_displays", "i", false)); private static var lime_system_get_device_orientation = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_system_get_device_orientation", "i", false)); private static var lime_system_get_platform_label = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_system_get_platform_label", "o", false)); private static var lime_system_get_platform_name = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_system_get_platform_name", "o", false)); private static var lime_system_get_platform_version = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_system_get_platform_version", "o", false)); private static var lime_system_get_timer = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_system_get_timer", "d", false)); private static var lime_system_open_file = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_system_open_file", "sv", false)); private static var lime_system_open_url = new cpp.CallableString->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_system_open_url", "ssv", false)); private static var lime_text_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_text_event_manager_register", "oov", false)); private static var lime_touch_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_touch_event_manager_register", "oov", false)); private static var lime_window_alert = new cpp.CallableString->String->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_alert", "ossv", false)); private static var lime_window_close = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_close", "ov", false)); private static var lime_window_context_flip = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_context_flip", "ov", false)); private static var lime_window_context_lock = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_context_lock", "oo", false)); private static var lime_window_context_make_current = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_context_make_current", "ov", false)); private static var lime_window_context_unlock = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_context_unlock", "ov", false)); private static var lime_window_create = new cpp.CallableInt->Int->Int->String->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_create", "oiiiso", false)); private static var lime_window_focus = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_focus", "ov", false)); private static var lime_window_get_context = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_window_get_context", "od", false)); private static var lime_window_get_context_type = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_get_context_type", "oo", false)); private static var lime_window_get_display = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_window_get_display", "oi", false)); private static var lime_window_get_display_mode = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_get_display_mode", "oo", false)); private static var lime_window_get_height = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_window_get_height", "oi", false)); private static var lime_window_get_id = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_window_get_id", "oi", false)); private static var lime_window_get_mouse_lock = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_window_get_mouse_lock", "ob", false)); private static var lime_window_get_opacity = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_window_get_opacity", "od", false)); private static var lime_window_get_scale = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_window_get_scale", "od", false)); private static var lime_window_get_text_input_enabled = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_window_get_text_input_enabled", "ob", false)); private static var lime_window_get_width = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_window_get_width", "oi", false)); private static var lime_window_get_x = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_window_get_x", "oi", false)); private static var lime_window_get_y = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_window_get_y", "oi", false)); private static var lime_window_move = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_move", "oiiv", false)); private static var lime_window_read_pixels = new cpp.Callablecpp.Object->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_read_pixels", "oooo", false)); private static var lime_window_resize = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_resize", "oiiv", false)); private static var lime_window_set_minimum_size = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_minimum_size", "oiiv", false)); private static var lime_window_set_maximum_size = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_maximum_size", "oiiv", false)); private static var lime_window_set_borderless = new cpp.CallableBool->Bool>(cpp.Prime._loadPrime("lime", "lime_window_set_borderless", "obb", false)); private static var lime_window_set_cursor = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_cursor", "oiv", false)); private static var lime_window_set_display_mode = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_set_display_mode", "ooo", false)); private static var lime_window_set_fullscreen = new cpp.CallableBool->Bool>(cpp.Prime._loadPrime("lime", "lime_window_set_fullscreen", "obb", false)); private static var lime_window_set_icon = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_icon", "oov", false)); private static var lime_window_set_maximized = new cpp.CallableBool->Bool>(cpp.Prime._loadPrime("lime", "lime_window_set_maximized", "obb", false)); private static var lime_window_set_minimized = new cpp.CallableBool->Bool>(cpp.Prime._loadPrime("lime", "lime_window_set_minimized", "obb", false)); private static var lime_window_set_mouse_lock = new cpp.CallableBool->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_mouse_lock", "obv", false)); private static var lime_window_set_opacity = new cpp.CallableFloat->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_opacity", "odv", false)); private static var lime_window_set_resizable = new cpp.CallableBool->Bool>(cpp.Prime._loadPrime("lime", "lime_window_set_resizable", "obb", false)); private static var lime_window_set_text_input_enabled = new cpp.CallableBool->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_text_input_enabled", "obv", false)); private static var lime_window_set_text_input_rect = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_text_input_rect", "oov", false)); private static var lime_window_set_title = new cpp.CallableString->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_set_title", "oso", false)); private static var lime_window_set_visible = new cpp.CallableBool->Bool>(cpp.Prime._loadPrime("lime", "lime_window_set_visible", "obb", false)); private static var lime_window_warp_mouse = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_warp_mouse", "oiiv", false)); private static var lime_window_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_event_manager_register", "oov", false)); private static var lime_zlib_compress = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_zlib_compress", "ooo", false)); private static var lime_zlib_decompress = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_zlib_decompress", "ooo", false)); #end #end #if (neko || cppia) private static var lime_application_create = CFFI.load("lime", "lime_application_create", 0); private static var lime_application_event_manager_register = CFFI.load("lime", "lime_application_event_manager_register", 2); private static var lime_application_exec = CFFI.load("lime", "lime_application_exec", 1); private static var lime_application_init = CFFI.load("lime", "lime_application_init", 1); private static var lime_application_quit = CFFI.load("lime", "lime_application_quit", 1); private static var lime_application_set_frame_rate = CFFI.load("lime", "lime_application_set_frame_rate", 2); private static var lime_application_update = CFFI.load("lime", "lime_application_update", 1); private static var lime_audio_load = CFFI.load("lime", "lime_audio_load", 2); private static var lime_audio_load_bytes = CFFI.load("lime", "lime_audio_load_bytes", 2); private static var lime_audio_load_file = CFFI.load("lime", "lime_audio_load_file", 2); private static var lime_bytes_from_data_pointer = CFFI.load("lime", "lime_bytes_from_data_pointer", 3); private static var lime_bytes_get_data_pointer = CFFI.load("lime", "lime_bytes_get_data_pointer", 1); private static var lime_bytes_get_data_pointer_offset = CFFI.load("lime", "lime_bytes_get_data_pointer_offset", 2); private static var lime_bytes_read_file = CFFI.load("lime", "lime_bytes_read_file", 2); private static var lime_cffi_get_native_pointer = CFFI.load("lime", "lime_cffi_get_native_pointer", 1); private static var lime_clipboard_event_manager_register = CFFI.load("lime", "lime_clipboard_event_manager_register", 2); private static var lime_clipboard_get_text = CFFI.load("lime", "lime_clipboard_get_text", 0); private static var lime_clipboard_set_text = CFFI.load("lime", "lime_clipboard_set_text", 1); private static var lime_data_pointer_offset = CFFI.load("lime", "lime_data_pointer_offset", 2); private static var lime_deflate_compress = CFFI.load("lime", "lime_deflate_compress", 2); private static var lime_deflate_decompress = CFFI.load("lime", "lime_deflate_decompress", 2); private static var lime_drop_event_manager_register = CFFI.load("lime", "lime_drop_event_manager_register", 2); private static var lime_file_dialog_open_directory = CFFI.load("lime", "lime_file_dialog_open_directory", 3); private static var lime_file_dialog_open_file = CFFI.load("lime", "lime_file_dialog_open_file", 3); private static var lime_file_dialog_open_files = CFFI.load("lime", "lime_file_dialog_open_files", 3); private static var lime_file_dialog_save_file = CFFI.load("lime", "lime_file_dialog_save_file", 3); private static var lime_file_watcher_create = CFFI.load("lime", "lime_file_watcher_create", 1); private static var lime_file_watcher_add_directory = CFFI.load("lime", "lime_file_watcher_add_directory", 3); private static var lime_file_watcher_remove_directory = CFFI.load("lime", "lime_file_watcher_remove_directory", 2); private static var lime_file_watcher_update = CFFI.load("lime", "lime_file_watcher_update", 1); private static var lime_font_get_ascender = CFFI.load("lime", "lime_font_get_ascender", 1); private static var lime_font_get_descender = CFFI.load("lime", "lime_font_get_descender", 1); private static var lime_font_get_family_name = CFFI.load("lime", "lime_font_get_family_name", 1); private static var lime_font_get_glyph_index = CFFI.load("lime", "lime_font_get_glyph_index", 2); private static var lime_font_get_glyph_indices = CFFI.load("lime", "lime_font_get_glyph_indices", 2); private static var lime_font_get_glyph_metrics = CFFI.load("lime", "lime_font_get_glyph_metrics", 2); private static var lime_font_get_height = CFFI.load("lime", "lime_font_get_height", 1); private static var lime_font_get_num_glyphs = CFFI.load("lime", "lime_font_get_num_glyphs", 1); private static var lime_font_get_underline_position = CFFI.load("lime", "lime_font_get_underline_position", 1); private static var lime_font_get_underline_thickness = CFFI.load("lime", "lime_font_get_underline_thickness", 1); private static var lime_font_get_strikethrough_position = CFFI.load("lime", "lime_font_get_strikethrough_position", 1); private static var lime_font_get_strikethrough_thickness = CFFI.load("lime", "lime_font_get_strikethrough_thickness", 1); private static var lime_font_get_units_per_em = CFFI.load("lime", "lime_font_get_units_per_em", 1); private static var lime_font_load = CFFI.load("lime", "lime_font_load", 1); private static var lime_font_load_bytes = CFFI.load("lime", "lime_font_load_bytes", 1); private static var lime_font_load_file = CFFI.load("lime", "lime_font_load_file", 1); private static var lime_font_outline_decompose = CFFI.load("lime", "lime_font_outline_decompose", 2); private static var lime_font_render_glyph = CFFI.load("lime", "lime_font_render_glyph", 3); private static var lime_font_render_glyphs = CFFI.load("lime", "lime_font_render_glyphs", 3); private static var lime_font_set_size = CFFI.load("lime", "lime_font_set_size", 3); private static var lime_gamepad_add_mappings = CFFI.load("lime", "lime_gamepad_add_mappings", 1); private static var lime_gamepad_get_device_guid = CFFI.load("lime", "lime_gamepad_get_device_guid", 1); private static var lime_gamepad_get_device_name = CFFI.load("lime", "lime_gamepad_get_device_name", 1); private static var lime_gamepad_rumble = CFFI.load("lime", "lime_gamepad_rumble", 4); private static var lime_gamepad_event_manager_register = CFFI.load("lime", "lime_gamepad_event_manager_register", 2); private static var lime_gzip_compress = CFFI.load("lime", "lime_gzip_compress", 2); private static var lime_gzip_decompress = CFFI.load("lime", "lime_gzip_decompress", 2); private static var lime_haptic_vibrate = CFFI.load("lime", "lime_haptic_vibrate", 2); private static var lime_image_encode = CFFI.load("lime", "lime_image_encode", 4); private static var lime_image_load = CFFI.load("lime", "lime_image_load", 2); private static var lime_image_load_bytes = CFFI.load("lime", "lime_image_load_bytes", 2); private static var lime_image_load_file = CFFI.load("lime", "lime_image_load_file", 2); private static var lime_image_data_util_color_transform = CFFI.load("lime", "lime_image_data_util_color_transform", 3); private static var lime_image_data_util_copy_channel = CFFI.load("lime", "lime_image_data_util_copy_channel", -1); private static var lime_image_data_util_copy_pixels = CFFI.load("lime", "lime_image_data_util_copy_pixels", -1); private static var lime_image_data_util_fill_rect = CFFI.load("lime", "lime_image_data_util_fill_rect", 4); private static var lime_image_data_util_flood_fill = CFFI.load("lime", "lime_image_data_util_flood_fill", 5); private static var lime_image_data_util_get_pixels = CFFI.load("lime", "lime_image_data_util_get_pixels", 4); private static var lime_image_data_util_merge = CFFI.load("lime", "lime_image_data_util_merge", -1); private static var lime_image_data_util_multiply_alpha = CFFI.load("lime", "lime_image_data_util_multiply_alpha", 1); private static var lime_image_data_util_resize = CFFI.load("lime", "lime_image_data_util_resize", 4); private static var lime_image_data_util_set_format = CFFI.load("lime", "lime_image_data_util_set_format", 2); private static var lime_image_data_util_set_pixels = CFFI.load("lime", "lime_image_data_util_set_pixels", -1); private static var lime_image_data_util_threshold = CFFI.load("lime", "lime_image_data_util_threshold", -1); private static var lime_image_data_util_unmultiply_alpha = CFFI.load("lime", "lime_image_data_util_unmultiply_alpha", 1); private static var lime_joystick_get_device_guid = CFFI.load("lime", "lime_joystick_get_device_guid", 1); private static var lime_joystick_get_device_name = CFFI.load("lime", "lime_joystick_get_device_name", 1); private static var lime_joystick_get_num_axes = CFFI.load("lime", "lime_joystick_get_num_axes", 1); private static var lime_joystick_get_num_buttons = CFFI.load("lime", "lime_joystick_get_num_buttons", 1); private static var lime_joystick_get_num_hats = CFFI.load("lime", "lime_joystick_get_num_hats", 1); private static var lime_joystick_event_manager_register = CFFI.load("lime", "lime_joystick_event_manager_register", 2); private static var lime_jpeg_decode_bytes = CFFI.load("lime", "lime_jpeg_decode_bytes", 3); private static var lime_jpeg_decode_file = CFFI.load("lime", "lime_jpeg_decode_file", 3); private static var lime_key_code_from_scan_code = CFFI.load("lime", "lime_key_code_from_scan_code", 1); private static var lime_key_code_to_scan_code = CFFI.load("lime", "lime_key_code_to_scan_code", 1); private static var lime_key_event_manager_register = CFFI.load("lime", "lime_key_event_manager_register", 2); private static var lime_lzma_compress = CFFI.load("lime", "lime_lzma_compress", 2); private static var lime_lzma_decompress = CFFI.load("lime", "lime_lzma_decompress", 2); private static var lime_mouse_event_manager_register = CFFI.load("lime", "lime_mouse_event_manager_register", 2); private static var lime_neko_execute = CFFI.load("lime", "lime_neko_execute", 1); private static var lime_orientation_event_manager_register = CFFI.load("lime", "lime_orientation_event_manager_register", 2); private static var lime_png_decode_bytes = CFFI.load("lime", "lime_png_decode_bytes", 3); private static var lime_png_decode_file = CFFI.load("lime", "lime_png_decode_file", 3); private static var lime_render_event_manager_register = CFFI.load("lime", "lime_render_event_manager_register", 2); private static var lime_sensor_event_manager_register = CFFI.load("lime", "lime_sensor_event_manager_register", 2); private static var lime_system_get_allow_screen_timeout = CFFI.load("lime", "lime_system_get_allow_screen_timeout", 0); private static var lime_system_set_allow_screen_timeout = CFFI.load("lime", "lime_system_set_allow_screen_timeout", 1); private static var lime_system_get_device_model = CFFI.load("lime", "lime_system_get_device_model", 0); private static var lime_system_get_device_vendor = CFFI.load("lime", "lime_system_get_device_vendor", 0); private static var lime_system_get_directory = CFFI.load("lime", "lime_system_get_directory", 3); private static var lime_system_get_display = CFFI.load("lime", "lime_system_get_display", 1); private static var lime_system_get_ios_tablet = CFFI.load("lime", "lime_system_get_ios_tablet", 0); private static var lime_system_get_num_displays = CFFI.load("lime", "lime_system_get_num_displays", 0); private static var lime_system_get_device_orientation = CFFI.load("lime", "lime_system_get_device_orientation", 0); private static var lime_system_get_platform_label = CFFI.load("lime", "lime_system_get_platform_label", 0); private static var lime_system_get_platform_name = CFFI.load("lime", "lime_system_get_platform_name", 0); private static var lime_system_get_platform_version = CFFI.load("lime", "lime_system_get_platform_version", 0); private static var lime_system_get_timer = CFFI.load("lime", "lime_system_get_timer", 0); private static var lime_system_open_file = CFFI.load("lime", "lime_system_open_file", 1); private static var lime_system_open_url = CFFI.load("lime", "lime_system_open_url", 2); private static var lime_text_event_manager_register = CFFI.load("lime", "lime_text_event_manager_register", 2); private static var lime_touch_event_manager_register = CFFI.load("lime", "lime_touch_event_manager_register", 2); private static var lime_window_alert = CFFI.load("lime", "lime_window_alert", 3); private static var lime_window_close = CFFI.load("lime", "lime_window_close", 1); private static var lime_window_context_flip = CFFI.load("lime", "lime_window_context_flip", 1); private static var lime_window_context_lock = CFFI.load("lime", "lime_window_context_lock", 1); private static var lime_window_context_make_current = CFFI.load("lime", "lime_window_context_make_current", 1); private static var lime_window_context_unlock = CFFI.load("lime", "lime_window_context_unlock", 1); private static var lime_window_create = CFFI.load("lime", "lime_window_create", 5); private static var lime_window_focus = CFFI.load("lime", "lime_window_focus", 1); private static var lime_window_get_context = CFFI.load("lime", "lime_window_get_context", 1); private static var lime_window_get_context_type = CFFI.load("lime", "lime_window_get_context_type", 1); private static var lime_window_get_display = CFFI.load("lime", "lime_window_get_display", 1); private static var lime_window_get_display_mode = CFFI.load("lime", "lime_window_get_display_mode", 1); private static var lime_window_get_height = CFFI.load("lime", "lime_window_get_height", 1); private static var lime_window_get_id = CFFI.load("lime", "lime_window_get_id", 1); private static var lime_window_get_mouse_lock = CFFI.load("lime", "lime_window_get_mouse_lock", 1); private static var lime_window_get_opacity = CFFI.load("lime", "lime_window_get_opacity", 1); private static var lime_window_get_scale = CFFI.load("lime", "lime_window_get_scale", 1); private static var lime_window_get_text_input_enabled = CFFI.load("lime", "lime_window_get_text_input_enabled", 1); private static var lime_window_get_width = CFFI.load("lime", "lime_window_get_width", 1); private static var lime_window_get_x = CFFI.load("lime", "lime_window_get_x", 1); private static var lime_window_get_y = CFFI.load("lime", "lime_window_get_y", 1); private static var lime_window_move = CFFI.load("lime", "lime_window_move", 3); private static var lime_window_read_pixels = CFFI.load("lime", "lime_window_read_pixels", 3); private static var lime_window_resize = CFFI.load("lime", "lime_window_resize", 3); private static var lime_window_set_minimum_size = CFFI.load("lime", "lime_window_set_minimum_size", 3); private static var lime_window_set_maximum_size = CFFI.load("lime", "lime_window_set_maximum_size", 3); private static var lime_window_set_borderless = CFFI.load("lime", "lime_window_set_borderless", 2); private static var lime_window_set_cursor = CFFI.load("lime", "lime_window_set_cursor", 2); private static var lime_window_set_display_mode = CFFI.load("lime", "lime_window_set_display_mode", 2); private static var lime_window_set_fullscreen = CFFI.load("lime", "lime_window_set_fullscreen", 2); private static var lime_window_set_icon = CFFI.load("lime", "lime_window_set_icon", 2); private static var lime_window_set_maximized = CFFI.load("lime", "lime_window_set_maximized", 2); private static var lime_window_set_minimized = CFFI.load("lime", "lime_window_set_minimized", 2); private static var lime_window_set_mouse_lock = CFFI.load("lime", "lime_window_set_mouse_lock", 2); private static var lime_window_set_opacity = CFFI.load("lime", "lime_window_set_opacity", 2); private static var lime_window_set_resizable = CFFI.load("lime", "lime_window_set_resizable", 2); private static var lime_window_set_text_input_enabled = CFFI.load("lime", "lime_window_set_text_input_enabled", 2); private static var lime_window_set_text_input_rect = CFFI.load("lime", "lime_window_set_text_input_rect", 2); private static var lime_window_set_title = CFFI.load("lime", "lime_window_set_title", 2); private static var lime_window_set_visible = CFFI.load("lime", "lime_window_set_visible", 2); private static var lime_window_warp_mouse = CFFI.load("lime", "lime_window_warp_mouse", 3); private static var lime_window_event_manager_register = CFFI.load("lime", "lime_window_event_manager_register", 2); private static var lime_zlib_compress = CFFI.load("lime", "lime_zlib_compress", 2); private static var lime_zlib_decompress = CFFI.load("lime", "lime_zlib_decompress", 2); #end #if hl @:hlNative("lime", "hl_application_create") private static function lime_application_create():CFFIPointer { return null; } @:hlNative("lime", "hl_application_event_manager_register") private static function lime_application_event_manager_register(callback:Void->Void, eventObject:ApplicationEventInfo):Void {} @:hlNative("lime", "hl_application_exec") private static function lime_application_exec(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_application_init") private static function lime_application_init(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_application_quit") private static function lime_application_quit(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_application_set_frame_rate") private static function lime_application_set_frame_rate(handle:CFFIPointer, value:Float):Void {} @:hlNative("lime", "hl_application_update") private static function lime_application_update(handle:CFFIPointer):Bool { return false; } // @:cffi private static function lime_audio_load (data:Dynamic, buffer:Dynamic):Dynamic; @:hlNative("lime", "hl_audio_load_bytes") private static function lime_audio_load_bytes(data:Bytes, buffer:AudioBuffer):AudioBuffer { return null; } @:hlNative("lime", "hl_audio_load_file") private static function lime_audio_load_file(path:String, buffer:AudioBuffer):AudioBuffer { return null; } @:hlNative("lime", "hl_bytes_from_data_pointer") private static function lime_bytes_from_data_pointer(data:Float, length:Int, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_bytes_get_data_pointer") private static function lime_bytes_get_data_pointer(data:Bytes):Float { return 0; } @:hlNative("lime", "hl_bytes_get_data_pointer_offset") private static function lime_bytes_get_data_pointer_offset(data:Bytes, offset:Int):Float { return 0; } @:hlNative("lime", "hl_bytes_read_file") private static function lime_bytes_read_file(path:String, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_cffi_get_native_pointer") private static function lime_cffi_get_native_pointer(ptr:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_clipboard_event_manager_register") private static function lime_clipboard_event_manager_register(callback:Void->Void, eventObject:ClipboardEventInfo):Void {} @:hlNative("lime", "hl_clipboard_get_text") private static function lime_clipboard_get_text():hl.Bytes { return null; } @:hlNative("lime", "hl_clipboard_set_text") private static function lime_clipboard_set_text(text:String):Void {} @:hlNative("lime", "hl_data_pointer_offset") private static function lime_data_pointer_offset(dataPointer:DataPointer, offset:Int):Float { return 0; } @:hlNative("lime", "hl_deflate_compress") private static function lime_deflate_compress(data:Bytes, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_deflate_decompress") private static function lime_deflate_decompress(data:Bytes, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_drop_event_manager_register") private static function lime_drop_event_manager_register(callback:Void->Void, eventObject:DropEventInfo):Void {} @:hlNative("lime", "hl_file_dialog_open_directory") private static function lime_file_dialog_open_directory(title:String, filter:String, defaultPath:String):hl.Bytes { return null; } @:hlNative("lime", "hl_file_dialog_open_file") private static function lime_file_dialog_open_file(title:String, filter:String, defaultPath:String):hl.Bytes { return null; } @:hlNative("lime", "hl_file_dialog_open_files") private static function lime_file_dialog_open_files(title:String, filter:String, defaultPath:String):hl.NativeArray { return null; } @:hlNative("lime", "hl_file_dialog_save_file") private static function lime_file_dialog_save_file(title:String, filter:String, defaultPath:String):hl.Bytes { return null; } @:hlNative("lime", "hl_file_watcher_create") private static function lime_file_watcher_create(callback:Dynamic):CFFIPointer { return null; } @:hlNative("lime", "hl_file_watcher_add_directory") private static function lime_file_watcher_add_directory(handle:CFFIPointer, path:String, recursive:Bool):Int { return 0; } @:hlNative("lime", "hl_file_watcher_remove_directory") private static function lime_file_watcher_remove_directory(handle:CFFIPointer, watchID:Int):Void {} @:hlNative("lime", "hl_file_watcher_update") private static function lime_file_watcher_update(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_font_get_ascender") private static function lime_font_get_ascender(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_font_get_descender") private static function lime_font_get_descender(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_font_get_family_name") private static function lime_font_get_family_name(handle:CFFIPointer):hl.Bytes { return null; } @:hlNative("lime", "hl_font_get_glyph_index") private static function lime_font_get_glyph_index(handle:CFFIPointer, character:String):Int { return 0; } @:hlNative("lime", "hl_font_get_glyph_indices") private static function lime_font_get_glyph_indices(handle:CFFIPointer, characters:String):hl.NativeArray { return null; } @:hlNative("lime", "hl_font_get_glyph_metrics") private static function lime_font_get_glyph_metrics(handle:CFFIPointer, index:Int):Dynamic { return null; } @:hlNative("lime", "hl_font_get_height") private static function lime_font_get_height(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_font_get_num_glyphs") private static function lime_font_get_num_glyphs(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_font_get_underline_position") private static function lime_font_get_underline_position(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_font_get_underline_thickness") private static function lime_font_get_underline_thickness(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_font_get_strikethrough_position") private static function lime_font_get_strikethrough_position(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_font_get_strikethrough_thickness") private static function lime_font_get_strikethrough_thickness(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_font_get_units_per_em") private static function lime_font_get_units_per_em(handle:CFFIPointer):Int { return 0; } // @:hlNative("lime", "") private static function lime_font_load (data:Dynamic):Dynamic { return null; } @:hlNative("lime", "hl_font_load_bytes") private static function lime_font_load_bytes(data:Bytes):CFFIPointer { return null; } @:hlNative("lime", "hl_font_load_file") private static function lime_font_load_file(path:String):CFFIPointer { return null; } @:hlNative("lime", "hl_font_outline_decompose") private static function lime_font_outline_decompose(handle:CFFIPointer, size:Int):Dynamic { return null; } @:hlNative("lime", "hl_font_render_glyph") private static function lime_font_render_glyph(handle:CFFIPointer, index:Int, data:Bytes):Bytes { return null; } @:hlNative("lime", "hl_font_render_glyphs") private static function lime_font_render_glyphs(handle:CFFIPointer, indices:hl.NativeArray, data:Bytes):Bytes { return null; } @:hlNative("lime", "hl_font_set_size") private static function lime_font_set_size(handle:CFFIPointer, size:Int, dpi:Int):Void {} @:hlNative("lime", "hl_gamepad_add_mappings") private static function lime_gamepad_add_mappings(mappings:hl.NativeArray):Void {} @:hlNative("lime", "hl_gamepad_get_device_guid") private static function lime_gamepad_get_device_guid(id:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_gamepad_get_device_name") private static function lime_gamepad_get_device_name(id:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_gamepad_rumble") private static function lime_gamepad_rumble(id:Int, lowFrequencyRumble:Float, highFrequencyRumble:Float, duration:Int):Void {} @:hlNative("lime", "hl_gamepad_event_manager_register") private static function lime_gamepad_event_manager_register(callback:Void->Void, eventObject:GamepadEventInfo):Void {} @:hlNative("lime", "hl_gzip_compress") private static function lime_gzip_compress(data:Bytes, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_gzip_decompress") private static function lime_gzip_decompress(data:Bytes, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_haptic_vibrate") private static function lime_haptic_vibrate(period:Int, duration:Int):Void {} @:hlNative("lime", "hl_image_encode") private static function lime_image_encode(data:ImageBuffer, type:Int, quality:Int, bytes:Bytes):Bytes { return null; } // @:cffi private static function lime_image_load (data:Dynamic, buffer:Dynamic):Dynamic; @:hlNative("lime", "hl_image_load_bytes") private static function lime_image_load_bytes(data:Bytes, buffer:ImageBuffer):ImageBuffer { return null; } @:hlNative("lime", "hl_image_load_file") private static function lime_image_load_file(path:String, buffer:ImageBuffer):ImageBuffer { return null; } @:hlNative("lime", "hl_image_data_util_color_transform") private static function lime_image_data_util_color_transform(image:Image, rect:Rectangle, colorMatrix:ArrayBufferView):Void {} // @:cffi private static function lime_image_data_util_copy_channel (image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, srcChannel:Int, destChannel:Int):Void; @:hlNative("lime", "hl_image_data_util_copy_channel") private static function lime_image_data_util_copy_channel(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, srcChannel:Int, destChannel:Int):Void {} // @:cffi private static function lime_image_data_util_copy_pixels (image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, alphaImage:Dynamic, alphaPoint:Dynamic, mergeAlpha:Bool):Void; @:hlNative("lime", "hl_image_data_util_copy_pixels") private static function lime_image_data_util_copy_pixels(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, alphaImage:Image, alphaPoint:Vector2, mergeAlpha:Bool):Void {} @:hlNative("lime", "hl_image_data_util_fill_rect") private static function lime_image_data_util_fill_rect(image:Image, rect:Rectangle, rg:Int, ba:Int):Void {} @:hlNative("lime", "hl_image_data_util_flood_fill") private static function lime_image_data_util_flood_fill(image:Image, x:Int, y:Int, rg:Int, ba:Int):Void {} @:hlNative("lime", "hl_image_data_util_get_pixels") private static function lime_image_data_util_get_pixels(image:Image, rect:Rectangle, format:Int, bytes:Bytes):Void {} // @:cffi private static function lime_image_data_util_merge (image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, redMultiplier:Int, greenMultiplier:Int, blueMultiplier:Int, alphaMultiplier:Int):Void; @:hlNative("lime", "hl_image_data_util_merge") private static function lime_image_data_util_merge(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, redMultiplier:Int, greenMultiplier:Int, blueMultiplier:Int, alphaMultiplier:Int):Void {} @:hlNative("lime", "hl_image_data_util_multiply_alpha") private static function lime_image_data_util_multiply_alpha(image:Image):Void {} @:hlNative("lime", "hl_image_data_util_resize") private static function lime_image_data_util_resize(image:Image, buffer:ImageBuffer, width:Int, height:Int):Void {} @:hlNative("lime", "hl_image_data_util_set_format") private static function lime_image_data_util_set_format(image:Image, format:Int):Void {} // @:cffi private static function lime_image_data_util_set_pixels (image:Dynamic, rect:Dynamic, bytes:Dynamic, offset:Int, format:Int, endian:Int):Void; @:hlNative("lime", "hl_image_data_util_set_pixels") private static function lime_image_data_util_set_pixels(image:Image, rect:Rectangle, bytes:Bytes, offset:Int, format:Int, endian:Int):Void {} // @:cffi private static function lime_image_data_util_threshold (image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, operation:Int, thresholdRG:Int, thresholdBA:Int, colorRG:Int, colorBA:Int, maskRG:Int, maskBA:Int, copySource:Bool):Int; @:hlNative("lime", "hl_image_data_util_threshold") private static function lime_image_data_util_threshold(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, operation:Int, thresholdRG:Int, thresholdBA:Int, colorRG:Int, colorBA:Int, maskRG:Int, maskBA:Int, copySource:Bool):Int { return 0; } @:hlNative("lime", "hl_image_data_util_unmultiply_alpha") private static function lime_image_data_util_unmultiply_alpha(image:Image):Void {} @:hlNative("lime", "hl_joystick_get_device_guid") private static function lime_joystick_get_device_guid(id:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_joystick_get_device_name") private static function lime_joystick_get_device_name(id:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_joystick_get_num_axes") private static function lime_joystick_get_num_axes(id:Int):Int { return 0; } @:hlNative("lime", "hl_joystick_get_num_buttons") private static function lime_joystick_get_num_buttons(id:Int):Int { return 0; } @:hlNative("lime", "hl_joystick_get_num_hats") private static function lime_joystick_get_num_hats(id:Int):Int { return 0; } @:hlNative("lime", "hl_joystick_event_manager_register") private static function lime_joystick_event_manager_register(callback:Void->Void, eventObject:JoystickEventInfo):Void {} @:hlNative("lime", "hl_jpeg_decode_bytes") private static function lime_jpeg_decode_bytes(data:Bytes, decodeData:Bool, buffer:ImageBuffer):ImageBuffer { return null; } @:hlNative("lime", "hl_jpeg_decode_file") private static function lime_jpeg_decode_file(path:String, decodeData:Bool, buffer:ImageBuffer):ImageBuffer { return null; } @:hlNative("lime", "hl_key_code_from_scan_code") private static function lime_key_code_from_scan_code(scanCode:Int):Int { return 0; } @:hlNative("lime", "hl_key_code_to_scan_code") private static function lime_key_code_to_scan_code(keyCode:Int):Int { return 0; } @:hlNative("lime", "hl_key_event_manager_register") private static function lime_key_event_manager_register(callback:Void->Void, eventObject:KeyEventInfo):Void {} @:hlNative("lime", "hl_lzma_compress") private static function lime_lzma_compress(data:Bytes, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_lzma_decompress") private static function lime_lzma_decompress(data:Bytes, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_mouse_event_manager_register") private static function lime_mouse_event_manager_register(callback:Void->Void, eventObject:MouseEventInfo):Void {} // @:cffi private static function lime_neko_execute (module:String):Void; @:hlNative("lime", "hl_orientation_event_manager_register") private static function lime_orientation_event_manager_register(callback:Void->Void, eventObject:OrientationEventInfo):Void {} @:hlNative("lime", "hl_png_decode_bytes") private static function lime_png_decode_bytes(data:Bytes, decodeData:Bool, buffer:ImageBuffer):ImageBuffer { return null; } @:hlNative("lime", "hl_png_decode_file") private static function lime_png_decode_file(path:String, decodeData:Bool, buffer:ImageBuffer):ImageBuffer { return null; } @:hlNative("lime", "hl_render_event_manager_register") private static function lime_render_event_manager_register(callback:Void->Void, eventObject:RenderEventInfo):Void {} @:hlNative("lime", "hl_sensor_event_manager_register") private static function lime_sensor_event_manager_register(callback:Void->Void, eventObject:SensorEventInfo):Void {} @:hlNative("lime", "hl_system_get_allow_screen_timeout") private static function lime_system_get_allow_screen_timeout():Bool { return false; } @:hlNative("lime", "hl_system_set_allow_screen_timeout") private static function lime_system_set_allow_screen_timeout(value:Bool):Bool { return false; } @:hlNative("lime", "hl_system_get_device_model") private static function lime_system_get_device_model():hl.Bytes { return null; } @:hlNative("lime", "hl_system_get_device_vendor") private static function lime_system_get_device_vendor():hl.Bytes { return null; } @:hlNative("lime", "hl_system_get_directory") private static function lime_system_get_directory(type:Int, company:String, title:String):hl.Bytes { return null; } @:hlNative("lime", "hl_system_get_display") private static function lime_system_get_display(index:Int):Dynamic { return null; } @:hlNative("lime", "hl_system_get_ios_tablet") private static function lime_system_get_ios_tablet():Bool { return false; } @:hlNative("lime", "hl_system_get_num_displays") private static function lime_system_get_num_displays():Int { return 0; } @:hlNative("lime", "hl_system_get_device_orientation") private static function lime_system_get_device_orientation():Int { return 0; } @:hlNative("lime", "hl_system_get_platform_label") private static function lime_system_get_platform_label():hl.Bytes { return null; } @:hlNative("lime", "hl_system_get_platform_name") private static function lime_system_get_platform_name():hl.Bytes { return null; } @:hlNative("lime", "hl_system_get_platform_version") private static function lime_system_get_platform_version():hl.Bytes { return null; } @:hlNative("lime", "hl_system_get_timer") private static function lime_system_get_timer():Float { return 0; } @:hlNative("lime", "hl_system_open_file") private static function lime_system_open_file(path:String):Void {} @:hlNative("lime", "hl_system_open_url") private static function lime_system_open_url(url:String, target:String):Void {} @:hlNative("lime", "hl_text_event_manager_register") private static function lime_text_event_manager_register(callback:Void->Void, eventObject:TextEventInfo):Void {} @:hlNative("lime", "hl_touch_event_manager_register") private static function lime_touch_event_manager_register(callback:Void->Void, eventObject:TouchEventInfo):Void {} @:hlNative("lime", "hl_window_alert") private static function lime_window_alert(handle:CFFIPointer, message:String, title:String):Void {} @:hlNative("lime", "hl_window_close") private static function lime_window_close(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_window_context_flip") private static function lime_window_context_flip(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_window_context_lock") private static function lime_window_context_lock(handle:CFFIPointer):Dynamic { return null; } @:hlNative("lime", "hl_window_context_make_current") private static function lime_window_context_make_current(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_window_context_unlock") private static function lime_window_context_unlock(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_window_create") private static function lime_window_create(application:CFFIPointer, width:Int, height:Int, flags:Int, title:String):CFFIPointer { return null; } @:hlNative("lime", "hl_window_focus") private static function lime_window_focus(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_window_get_context") private static function lime_window_get_context(handle:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_window_get_context_type") private static function lime_window_get_context_type(handle:CFFIPointer):hl.Bytes { return null; } @:hlNative("lime", "hl_window_get_display") private static function lime_window_get_display(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_window_get_display_mode") private static function lime_window_get_display_mode(handle:CFFIPointer, result:DisplayMode):Void {} @:hlNative("lime", "hl_window_get_height") private static function lime_window_get_height(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_window_get_id") private static function lime_window_get_id(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_window_get_mouse_lock") private static function lime_window_get_mouse_lock(handle:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_window_get_scale") private static function lime_window_get_scale(handle:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_window_get_text_input_enabled") private static function lime_window_get_text_input_enabled(handle:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_window_get_width") private static function lime_window_get_width(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_window_get_x") private static function lime_window_get_x(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_window_get_y") private static function lime_window_get_y(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_window_move") private static function lime_window_move(handle:CFFIPointer, x:Int, y:Int):Void {} @:hlNative("lime", "hl_window_read_pixels") private static function lime_window_read_pixels(handle:CFFIPointer, rect:Rectangle, imageBuffer:ImageBuffer):Dynamic { return null; } @:hlNative("lime", "hl_window_resize") private static function lime_window_resize(handle:CFFIPointer, width:Int, height:Int):Void {} @:hlNative("lime", "hl_window_set_minimum_size") private static function lime_window_set_minimum_size(handle:CFFIPointer, width:Int, height:Int):Void {} @:hlNative("lime", "hl_window_set_maximum_size") private static function lime_window_set_maximum_size(handle:CFFIPointer, width:Int, height:Int):Void {} @:hlNative("lime", "hl_window_set_borderless") private static function lime_window_set_borderless(handle:CFFIPointer, borderless:Bool):Bool { return false; } @:hlNative("lime", "hl_window_set_cursor") private static function lime_window_set_cursor(handle:CFFIPointer, cursor:Int):Void {} @:hlNative("lime", "hl_window_set_display_mode") private static function lime_window_set_display_mode(handle:CFFIPointer, displayMode:DisplayMode, result:DisplayMode):Void {} @:hlNative("lime", "hl_window_set_fullscreen") private static function lime_window_set_fullscreen(handle:CFFIPointer, fullscreen:Bool):Bool { return false; } @:hlNative("lime", "hl_window_set_icon") private static function lime_window_set_icon(handle:CFFIPointer, buffer:ImageBuffer):Void {} @:hlNative("lime", "hl_window_set_maximized") private static function lime_window_set_maximized(handle:CFFIPointer, maximized:Bool):Bool { return false; } @:hlNative("lime", "hl_window_set_minimized") private static function lime_window_set_minimized(handle:CFFIPointer, minimized:Bool):Bool { return false; } @:hlNative("lime", "hl_window_set_mouse_lock") private static function lime_window_set_mouse_lock(handle:CFFIPointer, mouseLock:Bool):Void {} @:hlNative("lime", "hl_window_set_resizable") private static function lime_window_set_resizable(handle:CFFIPointer, resizable:Bool):Bool { return false; } @:hlNative("lime", "hl_window_set_text_input_enabled") private static function lime_window_set_text_input_enabled(handle:CFFIPointer, enabled:Bool):Void {} @:hlNative("lime", "hl_window_set_text_input_rect") private static function lime_window_set_text_input_rect(handle:CFFIPointer, rect:Rectangle):Void {} @:hlNative("lime", "hl_window_set_title") private static function lime_window_set_title(handle:CFFIPointer, title:String):String { return null; } @:hlNative("lime", "hl_window_set_visible") private static function lime_window_set_visible(handle:CFFIPointer, visible:Bool):Bool { return false; } @:hlNative("lime", "hl_window_warp_mouse") private static function lime_window_warp_mouse(handle:CFFIPointer, x:Int, y:Int):Void {} @:hlNative("lime", "hl_window_get_opacity") private static function lime_window_get_opacity(handle:CFFIPointer):Float { return 0.0; } @:hlNative("lime", "hl_window_set_opacity") private static function lime_window_set_opacity(handle:CFFIPointer, value:Float):Void {} @:hlNative("lime", "hl_window_event_manager_register") private static function lime_window_event_manager_register(callback:Void->Void, eventObject:WindowEventInfo):Void {} @:hlNative("lime", "hl_zlib_compress") private static function lime_zlib_compress(data:Bytes, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_zlib_decompress") private static function lime_zlib_decompress(data:Bytes, bytes:Bytes):Bytes { return null; } #end #end #if (lime_cffi && !macro && android) #if (cpp && !cppia) #if (disable_cffi || haxe_ver < "3.4.0") @:cffi private static function lime_jni_call_member(jniMethod:Dynamic, jniObject:Dynamic, args:Dynamic):Dynamic; @:cffi private static function lime_jni_call_static(jniMethod:Dynamic, args:Dynamic):Dynamic; @:cffi private static function lime_jni_create_field(className:String, field:String, signature:String, isStatic:Bool):Dynamic; @:cffi private static function lime_jni_create_method(className:String, method:String, signature:String, isStatic:Bool, quiet:Bool):Dynamic; @:cffi private static function lime_jni_get_env():Float; @:cffi private static function lime_jni_get_member(jniField:Dynamic, jniObject:Dynamic):Dynamic; @:cffi private static function lime_jni_get_static(jniField:Dynamic):Dynamic; @:cffi private static function lime_jni_post_ui_callback(callback:Dynamic):Void; @:cffi private static function lime_jni_set_member(jniField:Dynamic, jniObject:Dynamic, value:Dynamic):Void; @:cffi private static function lime_jni_set_static(jniField:Dynamic, value:Dynamic):Void; #else private static var lime_jni_call_member = new cpp.Callablecpp.Object->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_jni_call_member", "oooo", false)); private static var lime_jni_call_static = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_jni_call_static", "ooo", false)); private static var lime_jni_create_field = new cpp.CallableString->String->Bool->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_jni_create_field", "sssbo", false)); private static var lime_jni_create_method = new cpp.CallableString->String->Bool->Bool->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_jni_create_method", "sssbbo", false)); private static var lime_jni_get_env = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_jni_get_env", "d", false)); private static var lime_jni_get_member = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_jni_get_member", "ooo", false)); private static var lime_jni_get_static = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_jni_get_static", "oo", false)); private static var lime_jni_post_ui_callback = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_jni_post_ui_callback", "ov", false)); private static var lime_jni_set_member = new cpp.Callablecpp.Object->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_jni_set_member", "ooov", false)); private static var lime_jni_set_static = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_jni_set_static", "oov", false)); #end #end #if !cpp @:cffi private static function lime_jni_call_member(jniMethod:Dynamic, jniObject:Dynamic, args:Dynamic):Dynamic; @:cffi private static function lime_jni_call_static(jniMethod:Dynamic, args:Dynamic):Dynamic; @:cffi private static function lime_jni_create_field(className:String, field:String, signature:String, isStatic:Bool):Dynamic; @:cffi private static function lime_jni_create_method(className:String, method:String, signature:String, isStatic:Bool, quiet:Bool):Dynamic; @:cffi private static function lime_jni_get_env():Float; @:cffi private static function lime_jni_get_member(jniField:Dynamic, jniObject:Dynamic):Dynamic; @:cffi private static function lime_jni_get_static(jniField:Dynamic):Dynamic; @:cffi private static function lime_jni_post_ui_callback(callback:Dynamic):Void; @:cffi private static function lime_jni_set_member(jniField:Dynamic, jniObject:Dynamic, value:Dynamic):Void; @:cffi private static function lime_jni_set_static(jniField:Dynamic, value:Dynamic):Void; #end #end #if (lime_cffi && !macro && lime_openal) #if (cpp && !cppia) #if (disable_cffi || haxe_ver < "3.4.0") @:cffi private static function lime_al_buffer_data(buffer:CFFIPointer, format:Int, data:Dynamic, size:Int, freq:Int):Void; @:cffi private static function lime_al_buffer3f(buffer:CFFIPointer, param:Int, value1:Float32, value2:Float32, value3:Float32):Void; @:cffi private static function lime_al_buffer3i(buffer:CFFIPointer, param:Int, value1:Int, value2:Int, value3:Int):Void; @:cffi private static function lime_al_bufferf(buffer:CFFIPointer, param:Int, value:Float32):Void; @:cffi private static function lime_al_bufferfv(buffer:CFFIPointer, param:Int, values:Dynamic):Void; @:cffi private static function lime_al_bufferi(buffer:CFFIPointer, param:Int, value:Int):Void; @:cffi private static function lime_al_bufferiv(buffer:CFFIPointer, param:Int, values:Dynamic):Void; @:cffi private static function lime_al_cleanup():Void; @:cffi private static function lime_al_delete_buffer(buffer:CFFIPointer):Void; @:cffi private static function lime_al_delete_buffers(n:Int, buffers:Dynamic):Void; @:cffi private static function lime_al_delete_source(source:CFFIPointer):Void; @:cffi private static function lime_al_delete_sources(n:Int, sources:Dynamic):Void; @:cffi private static function lime_al_disable(capability:Int):Void; @:cffi private static function lime_al_distance_model(distanceModel:Int):Void; @:cffi private static function lime_al_doppler_factor(value:Float32):Void; @:cffi private static function lime_al_doppler_velocity(value:Float32):Void; @:cffi private static function lime_al_enable(capability:Int):Void; @:cffi private static function lime_al_gen_source():CFFIPointer; @:cffi private static function lime_al_gen_sources(n:Int):Array; @:cffi private static function lime_al_get_boolean(param:Int):Bool; @:cffi private static function lime_al_get_booleanv(param:Int, count:Int):Array; @:cffi private static function lime_al_gen_buffer():CFFIPointer; @:cffi private static function lime_al_gen_buffers(n:Int):Array; @:cffi private static function lime_al_get_buffer3f(buffer:CFFIPointer, param:Int):Array; @:cffi private static function lime_al_get_buffer3i(buffer:CFFIPointer, param:Int):Array; @:cffi private static function lime_al_get_bufferf(buffer:CFFIPointer, param:Int):Float32; @:cffi private static function lime_al_get_bufferfv(buffer:CFFIPointer, param:Int, count:Int):Array; @:cffi private static function lime_al_get_bufferi(buffer:CFFIPointer, param:Int):Int; @:cffi private static function lime_al_get_bufferiv(buffer:CFFIPointer, param:Int, count:Int):Array; @:cffi private static function lime_al_get_double(param:Int):Float; @:cffi private static function lime_al_get_doublev(param:Int, count:Int):Array; @:cffi private static function lime_al_get_enum_value(ename:String):Int; @:cffi private static function lime_al_get_error():Int; @:cffi private static function lime_al_get_float(param:Int):Float32; @:cffi private static function lime_al_get_floatv(param:Int, count:Int):Array; @:cffi private static function lime_al_get_integer(param:Int):Int; @:cffi private static function lime_al_get_integerv(param:Int, count:Int):Array; @:cffi private static function lime_al_get_listener3f(param:Int):Array; @:cffi private static function lime_al_get_listener3i(param:Int):Array; @:cffi private static function lime_al_get_listenerf(param:Int):Float32; @:cffi private static function lime_al_get_listenerfv(param:Int, count:Int):Array; @:cffi private static function lime_al_get_listeneri(param:Int):Int; @:cffi private static function lime_al_get_listeneriv(param:Int, count:Int):Array; @:cffi private static function lime_al_get_proc_address(fname:String):Float; @:cffi private static function lime_al_get_source3f(source:CFFIPointer, param:Int):Array; @:cffi private static function lime_al_get_source3i(source:CFFIPointer, param:Int):Array; @:cffi private static function lime_al_get_sourcef(source:CFFIPointer, param:Int):Float32; @:cffi private static function lime_al_get_sourcefv(source:CFFIPointer, param:Int, count:Int):Array; @:cffi private static function lime_al_get_sourcei(source:CFFIPointer, param:Int):Dynamic; @:cffi private static function lime_al_get_sourceiv(source:CFFIPointer, param:Int, count:Int):Array; @:cffi private static function lime_al_get_string(param:Int):Dynamic; @:cffi private static function lime_al_is_buffer(buffer:CFFIPointer):Bool; @:cffi private static function lime_al_is_enabled(capability:Int):Bool; @:cffi private static function lime_al_is_extension_present(extname:String):Bool; @:cffi private static function lime_al_is_source(source:CFFIPointer):Bool; @:cffi private static function lime_al_listener3f(param:Int, value1:Float32, value2:Float32, value3:Float32):Void; @:cffi private static function lime_al_listener3i(param:Int, value1:Int, value2:Int, value3:Int):Void; @:cffi private static function lime_al_listenerf(param:Int, value1:Float32):Void; @:cffi private static function lime_al_listenerfv(param:Int, values:Dynamic):Void; @:cffi private static function lime_al_listeneri(param:Int, value1:Int):Void; @:cffi private static function lime_al_listeneriv(param:Int, values:Dynamic):Void; @:cffi private static function lime_al_source_pause(source:CFFIPointer):Void; @:cffi private static function lime_al_source_pausev(n:Int, sources:Dynamic):Void; @:cffi private static function lime_al_source_play(source:CFFIPointer):Void; @:cffi private static function lime_al_source_playv(n:Int, sources:Dynamic):Void; @:cffi private static function lime_al_source_queue_buffers(source:CFFIPointer, nb:Int, buffers:Dynamic):Void; @:cffi private static function lime_al_source_rewind(source:CFFIPointer):Void; @:cffi private static function lime_al_source_rewindv(n:Int, sources:Dynamic):Void; @:cffi private static function lime_al_source_stop(source:CFFIPointer):Void; @:cffi private static function lime_al_source_stopv(n:Int, sources:Dynamic):Void; @:cffi private static function lime_al_source_unqueue_buffers(source:CFFIPointer, nb:Int):Dynamic; @:cffi private static function lime_al_source3f(source:CFFIPointer, param:Int, value1:Float32, value2:Float32, value3:Float32):Void; @:cffi private static function lime_al_source3i(source:CFFIPointer, param:Int, value1:Dynamic, value2:Int, value3:Int):Void; @:cffi private static function lime_al_sourcef(source:CFFIPointer, param:Int, value:Float32):Void; @:cffi private static function lime_al_sourcefv(source:CFFIPointer, param:Int, values:Dynamic):Void; @:cffi private static function lime_al_sourcei(source:CFFIPointer, param:Int, value:Dynamic):Void; @:cffi private static function lime_al_sourceiv(source:CFFIPointer, param:Int, values:Dynamic):Void; @:cffi private static function lime_al_speed_of_sound(speed:Float32):Void; @:cffi private static function lime_alc_close_device(device:CFFIPointer):Bool; @:cffi private static function lime_alc_create_context(device:CFFIPointer, attrlist:Dynamic):CFFIPointer; @:cffi private static function lime_alc_destroy_context(context:CFFIPointer):Void; @:cffi private static function lime_alc_get_contexts_device(context:CFFIPointer):CFFIPointer; @:cffi private static function lime_alc_get_current_context():CFFIPointer; @:cffi private static function lime_alc_get_error(device:CFFIPointer):Int; @:cffi private static function lime_alc_get_integerv(device:CFFIPointer, param:Int, size:Int):Dynamic; @:cffi private static function lime_alc_get_string(device:CFFIPointer, param:Int):Dynamic; @:cffi private static function lime_alc_make_context_current(context:CFFIPointer):Bool; @:cffi private static function lime_alc_open_device(devicename:String):CFFIPointer; @:cffi private static function lime_alc_pause_device(device:CFFIPointer):Void; @:cffi private static function lime_alc_process_context(context:CFFIPointer):Void; @:cffi private static function lime_alc_resume_device(device:CFFIPointer):Void; @:cffi private static function lime_alc_suspend_context(context:CFFIPointer):Void; @:cffi private static function lime_al_gen_filter():CFFIPointer; @:cffi private static function lime_al_filteri(filter:CFFIPointer, param:Int, value:Dynamic):Void; @:cffi private static function lime_al_filterf(filter:CFFIPointer, param:Int, value:Float32):Void; @:cffi private static function lime_al_remove_direct_filter(source:CFFIPointer):Void; @:cffi private static function lime_al_is_filter(filter:CFFIPointer):Bool; @:cffi private static function lime_al_get_filteri(filter:CFFIPointer, param:Int):Int; @:cffi private static function lime_al_gen_effect():CFFIPointer; @:cffi private static function lime_al_effectf(effect:CFFIPointer, param:Int, value:Float32):Void; @:cffi private static function lime_al_effectfv(effect:CFFIPointer, param:Int, values:Array):Void; @:cffi private static function lime_al_effecti(effect:CFFIPointer, param:Int, value:Int):Void; @:cffi private static function lime_al_effectiv(effect:CFFIPointer, param:Int, values:Array):Void; @:cffi private static function lime_al_is_effect(effect:CFFIPointer):Bool; @:cffi private static function lime_al_gen_aux():CFFIPointer; @:cffi private static function lime_al_auxf(aux:CFFIPointer, param:Int, value:Float32):Void; @:cffi private static function lime_al_auxfv(aux:CFFIPointer, param:Int, values:Array):Void; @:cffi private static function lime_al_auxi(aux:CFFIPointer, param:Int, value:Dynamic):Void; @:cffi private static function lime_al_auxiv(aux:CFFIPointer, param:Int, values:Array):Void; @:cffi private static function lime_al_is_aux(aux:CFFIPointer):Bool; @:cffi private static function lime_al_remove_send(source:CFFIPointer, index:Int):Void; #else private static var lime_al_buffer_data = new cpp.CallableInt->cpp.Object->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_buffer_data", "oioiiv", false)); private static var lime_al_buffer3f = new cpp.CallableInt->cpp.Float32->cpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_buffer3f", "oifffv", false)); private static var lime_al_buffer3i = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_buffer3i", "oiiiiv", false)); private static var lime_al_bufferf = new cpp.CallableInt->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_bufferf", "oifv", false)); private static var lime_al_bufferfv = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_bufferfv", "oiov", false)); private static var lime_al_bufferi = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_bufferi", "oiiv", false)); private static var lime_al_bufferiv = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_bufferiv", "oiov", false)); private static var lime_al_cleanup = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_cleanup", "v", false)); private static var lime_al_delete_buffer = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_delete_buffer", "ov", false)); private static var lime_al_delete_buffers = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_delete_buffers", "iov", false)); private static var lime_al_delete_source = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_delete_source", "ov", false)); private static var lime_al_delete_sources = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_delete_sources", "iov", false)); private static var lime_al_disable = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_disable", "iv", false)); private static var lime_al_distance_model = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_distance_model", "iv", false)); private static var lime_al_doppler_factor = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_doppler_factor", "fv", false)); private static var lime_al_doppler_velocity = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_doppler_velocity", "fv", false)); private static var lime_al_enable = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_enable", "iv", false)); private static var lime_al_gen_source = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_gen_source", "o", false)); private static var lime_al_gen_sources = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_gen_sources", "io", false)); private static var lime_al_get_boolean = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_al_get_boolean", "ib", false)); private static var lime_al_get_booleanv = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_booleanv", "iio", false)); private static var lime_al_gen_buffer = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_gen_buffer", "o", false)); private static var lime_al_gen_buffers = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_gen_buffers", "io", false)); private static var lime_al_get_buffer3f = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_buffer3f", "oio", false)); private static var lime_al_get_buffer3i = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_buffer3i", "oio", false)); private static var lime_al_get_bufferf = new cpp.CallableInt->cpp.Float32>(cpp.Prime._loadPrime("lime", "lime_al_get_bufferf", "oif", false)); private static var lime_al_get_bufferfv = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_bufferfv", "oiio", false)); private static var lime_al_get_bufferi = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_al_get_bufferi", "oii", false)); private static var lime_al_get_bufferiv = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_bufferiv", "oiio", false)); private static var lime_al_get_double = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_al_get_double", "id", false)); private static var lime_al_get_doublev = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_doublev", "iio", false)); private static var lime_al_get_enum_value = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_al_get_enum_value", "si", false)); private static var lime_al_get_error = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_al_get_error", "i", false)); private static var lime_al_get_float = new cpp.Callablecpp.Float32>(cpp.Prime._loadPrime("lime", "lime_al_get_float", "if", false)); private static var lime_al_get_floatv = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_floatv", "iio", false)); private static var lime_al_get_integer = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_al_get_integer", "ii", false)); private static var lime_al_get_integerv = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_integerv", "iio", false)); private static var lime_al_get_listener3f = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_listener3f", "io", false)); private static var lime_al_get_listener3i = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_listener3i", "io", false)); private static var lime_al_get_listenerf = new cpp.Callablecpp.Float32>(cpp.Prime._loadPrime("lime", "lime_al_get_listenerf", "if", false)); private static var lime_al_get_listenerfv = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_listenerfv", "iio", false)); private static var lime_al_get_listeneri = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_al_get_listeneri", "ii", false)); private static var lime_al_get_listeneriv = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_listeneriv", "iio", false)); private static var lime_al_get_proc_address = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_al_get_proc_address", "sd", false)); private static var lime_al_get_source3f = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_source3f", "oio", false)); private static var lime_al_get_source3i = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_source3i", "oio", false)); private static var lime_al_get_sourcef = new cpp.CallableInt->cpp.Float32>(cpp.Prime._loadPrime("lime", "lime_al_get_sourcef", "oif", false)); private static var lime_al_get_sourcefv = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_sourcefv", "oiio", false)); private static var lime_al_get_sourcei = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_sourcei", "oio", false)); private static var lime_al_get_sourceiv = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_sourceiv", "oiio", false)); private static var lime_al_get_string = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_get_string", "io", false)); private static var lime_al_is_buffer = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_al_is_buffer", "ob", false)); private static var lime_al_is_enabled = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_al_is_enabled", "ib", false)); private static var lime_al_is_extension_present = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_al_is_extension_present", "sb", false)); private static var lime_al_is_source = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_al_is_source", "ob", false)); private static var lime_al_listener3f = new cpp.Callablecpp.Float32->cpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_listener3f", "ifffv", false)); private static var lime_al_listener3i = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_listener3i", "iiiiv", false)); private static var lime_al_listenerf = new cpp.Callablecpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_listenerf", "ifv", false)); private static var lime_al_listenerfv = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_listenerfv", "iov", false)); private static var lime_al_listeneri = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_listeneri", "iiv", false)); private static var lime_al_listeneriv = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_listeneriv", "iov", false)); private static var lime_al_source_pause = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source_pause", "ov", false)); private static var lime_al_source_pausev = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source_pausev", "iov", false)); private static var lime_al_source_play = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source_play", "ov", false)); private static var lime_al_source_playv = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source_playv", "iov", false)); private static var lime_al_source_queue_buffers = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source_queue_buffers", "oiov", false)); private static var lime_al_source_rewind = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source_rewind", "ov", false)); private static var lime_al_source_rewindv = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source_rewindv", "iov", false)); private static var lime_al_source_stop = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source_stop", "ov", false)); private static var lime_al_source_stopv = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source_stopv", "iov", false)); private static var lime_al_source_unqueue_buffers = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_source_unqueue_buffers", "oio", false)); private static var lime_al_source3f = new cpp.CallableInt->cpp.Float32->cpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source3f", "oifffv", false)); private static var lime_al_source3i = new cpp.CallableInt->cpp.Object->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_source3i", "oioiiv", false)); private static var lime_al_sourcef = new cpp.CallableInt->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_sourcef", "oifv", false)); private static var lime_al_sourcefv = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_sourcefv", "oiov", false)); private static var lime_al_sourcei = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_sourcei", "oiov", false)); private static var lime_al_sourceiv = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_sourceiv", "oiov", false)); private static var lime_al_speed_of_sound = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_speed_of_sound", "fv", false)); private static var lime_alc_close_device = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_alc_close_device", "ob", false)); private static var lime_alc_create_context = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_create_context", "ooo", false)); private static var lime_alc_destroy_context = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_alc_destroy_context", "ov", false)); private static var lime_alc_get_contexts_device = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_get_contexts_device", "oo", false)); private static var lime_alc_get_current_context = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_get_current_context", "o", false)); private static var lime_alc_get_error = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_alc_get_error", "oi", false)); private static var lime_alc_get_integerv = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_get_integerv", "oiio", false)); private static var lime_alc_get_string = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_get_string", "oio", false)); private static var lime_alc_make_context_current = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_alc_make_context_current", "ob", false)); private static var lime_alc_open_device = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_alc_open_device", "so", false)); private static var lime_alc_pause_device = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_alc_pause_device", "ov", false)); private static var lime_alc_process_context = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_alc_process_context", "ov", false)); private static var lime_alc_resume_device = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_alc_resume_device", "ov", false)); private static var lime_alc_suspend_context = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_alc_suspend_context", "ov", false)); private static var lime_al_gen_filter = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_gen_filter", "o", false)); private static var lime_al_filteri = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_filteri", "oiov", false)); private static var lime_al_filterf = new cpp.CallableInt->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_filterf", "oifv", false)); private static var lime_al_remove_direct_filter = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_remove_direct_filter", "ov", false)); private static var lime_al_is_filter = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_al_is_filter", "ob", false)); private static var lime_al_get_filteri = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_al_get_filteri", "oii", false)); private static var lime_al_gen_effect = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_gen_effect", "o", false)); private static var lime_al_effectf = new cpp.CallableInt->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_effectf", "oifv", false)); private static var lime_al_effectfv = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_effectfv", "oiov", false)); private static var lime_al_effecti = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_effecti", "oiiv", false)); private static var lime_al_effectiv = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_effectiv", "oiov", false)); private static var lime_al_is_effect = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_al_is_effect", "ob", false)); private static var lime_al_gen_aux = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_al_gen_aux", "o", false)); private static var lime_al_auxf = new cpp.CallableInt->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_auxf", "oifv", false)); private static var lime_al_auxfv = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_auxfv", "oiov", false)); private static var lime_al_auxi = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_auxi", "oiov", false)); private static var lime_al_auxiv = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_auxiv", "oiov", false)); private static var lime_al_is_aux = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_al_is_aux", "ob", false)); private static var lime_al_remove_send = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_al_remove_send", "oiv", false)); #end #end #if (neko || cppia) private static var lime_al_buffer_data = CFFI.load("lime", "lime_al_buffer_data", 5); private static var lime_al_buffer3f = CFFI.load("lime", "lime_al_buffer3f", 5); private static var lime_al_buffer3i = CFFI.load("lime", "lime_al_buffer3i", 5); private static var lime_al_bufferf = CFFI.load("lime", "lime_al_bufferf", 3); private static var lime_al_bufferfv = CFFI.load("lime", "lime_al_bufferfv", 3); private static var lime_al_bufferi = CFFI.load("lime", "lime_al_bufferi", 3); private static var lime_al_bufferiv = CFFI.load("lime", "lime_al_bufferiv", 3); private static var lime_al_cleanup = CFFI.load("lime", "lime_al_cleanup", 0); private static var lime_al_delete_buffer = CFFI.load("lime", "lime_al_delete_buffer", 1); private static var lime_al_delete_buffers = CFFI.load("lime", "lime_al_delete_buffers", 2); private static var lime_al_delete_source = CFFI.load("lime", "lime_al_delete_source", 1); private static var lime_al_delete_sources = CFFI.load("lime", "lime_al_delete_sources", 2); private static var lime_al_disable = CFFI.load("lime", "lime_al_disable", 1); private static var lime_al_distance_model = CFFI.load("lime", "lime_al_distance_model", 1); private static var lime_al_doppler_factor = CFFI.load("lime", "lime_al_doppler_factor", 1); private static var lime_al_doppler_velocity = CFFI.load("lime", "lime_al_doppler_velocity", 1); private static var lime_al_enable = CFFI.load("lime", "lime_al_enable", 1); private static var lime_al_gen_source = CFFI.load("lime", "lime_al_gen_source", 0); private static var lime_al_gen_sources = CFFI.load("lime", "lime_al_gen_sources", 1); private static var lime_al_get_boolean = CFFI.load("lime", "lime_al_get_boolean", 1); private static var lime_al_get_booleanv = CFFI.load("lime", "lime_al_get_booleanv", 2); private static var lime_al_gen_buffer = CFFI.load("lime", "lime_al_gen_buffer", 0); private static var lime_al_gen_buffers = CFFI.load("lime", "lime_al_gen_buffers", 1); private static var lime_al_get_buffer3f = CFFI.load("lime", "lime_al_get_buffer3f", 2); private static var lime_al_get_buffer3i = CFFI.load("lime", "lime_al_get_buffer3i", 2); private static var lime_al_get_bufferf = CFFI.load("lime", "lime_al_get_bufferf", 2); private static var lime_al_get_bufferfv = CFFI.load("lime", "lime_al_get_bufferfv", 3); private static var lime_al_get_bufferi = CFFI.load("lime", "lime_al_get_bufferi", 2); private static var lime_al_get_bufferiv = CFFI.load("lime", "lime_al_get_bufferiv", 3); private static var lime_al_get_double = CFFI.load("lime", "lime_al_get_double", 1); private static var lime_al_get_doublev = CFFI.load("lime", "lime_al_get_doublev", 2); private static var lime_al_get_enum_value = CFFI.load("lime", "lime_al_get_enum_value", 1); private static var lime_al_get_error = CFFI.load("lime", "lime_al_get_error", 0); private static var lime_al_get_float = CFFI.load("lime", "lime_al_get_float", 1); private static var lime_al_get_floatv = CFFI.load("lime", "lime_al_get_floatv", 2); private static var lime_al_get_integer = CFFI.load("lime", "lime_al_get_integer", 1); private static var lime_al_get_integerv = CFFI.load("lime", "lime_al_get_integerv", 2); private static var lime_al_get_listener3f = CFFI.load("lime", "lime_al_get_listener3f", 1); private static var lime_al_get_listener3i = CFFI.load("lime", "lime_al_get_listener3i", 1); private static var lime_al_get_listenerf = CFFI.load("lime", "lime_al_get_listenerf", 1); private static var lime_al_get_listenerfv = CFFI.load("lime", "lime_al_get_listenerfv", 2); private static var lime_al_get_listeneri = CFFI.load("lime", "lime_al_get_listeneri", 1); private static var lime_al_get_listeneriv = CFFI.load("lime", "lime_al_get_listeneriv", 2); private static var lime_al_get_proc_address = CFFI.load("lime", "lime_al_get_proc_address", 1); private static var lime_al_get_source3f = CFFI.load("lime", "lime_al_get_source3f", 2); private static var lime_al_get_source3i = CFFI.load("lime", "lime_al_get_source3i", 2); private static var lime_al_get_sourcef = CFFI.load("lime", "lime_al_get_sourcef", 2); private static var lime_al_get_sourcefv = CFFI.load("lime", "lime_al_get_sourcefv", 3); private static var lime_al_get_sourcei = CFFI.load("lime", "lime_al_get_sourcei", 2); private static var lime_al_get_sourceiv = CFFI.load("lime", "lime_al_get_sourceiv", 3); private static var lime_al_get_string = CFFI.load("lime", "lime_al_get_string", 1); private static var lime_al_is_buffer = CFFI.load("lime", "lime_al_is_buffer", 1); private static var lime_al_is_enabled = CFFI.load("lime", "lime_al_is_enabled", 1); private static var lime_al_is_extension_present = CFFI.load("lime", "lime_al_is_extension_present", 1); private static var lime_al_is_source = CFFI.load("lime", "lime_al_is_source", 1); private static var lime_al_listener3f = CFFI.load("lime", "lime_al_listener3f", 4); private static var lime_al_listener3i = CFFI.load("lime", "lime_al_listener3i", 4); private static var lime_al_listenerf = CFFI.load("lime", "lime_al_listenerf", 2); private static var lime_al_listenerfv = CFFI.load("lime", "lime_al_listenerfv", 2); private static var lime_al_listeneri = CFFI.load("lime", "lime_al_listeneri", 2); private static var lime_al_listeneriv = CFFI.load("lime", "lime_al_listeneriv", 2); private static var lime_al_source_pause = CFFI.load("lime", "lime_al_source_pause", 1); private static var lime_al_source_pausev = CFFI.load("lime", "lime_al_source_pausev", 2); private static var lime_al_source_play = CFFI.load("lime", "lime_al_source_play", 1); private static var lime_al_source_playv = CFFI.load("lime", "lime_al_source_playv", 2); private static var lime_al_source_queue_buffers = CFFI.load("lime", "lime_al_source_queue_buffers", 3); private static var lime_al_source_rewind = CFFI.load("lime", "lime_al_source_rewind", 1); private static var lime_al_source_rewindv = CFFI.load("lime", "lime_al_source_rewindv", 2); private static var lime_al_source_stop = CFFI.load("lime", "lime_al_source_stop", 1); private static var lime_al_source_stopv = CFFI.load("lime", "lime_al_source_stopv", 2); private static var lime_al_source_unqueue_buffers = CFFI.load("lime", "lime_al_source_unqueue_buffers", 2); private static var lime_al_source3f = CFFI.load("lime", "lime_al_source3f", 5); private static var lime_al_source3i = CFFI.load("lime", "lime_al_source3i", 5); private static var lime_al_sourcef = CFFI.load("lime", "lime_al_sourcef", 3); private static var lime_al_sourcefv = CFFI.load("lime", "lime_al_sourcefv", 3); private static var lime_al_sourcei = CFFI.load("lime", "lime_al_sourcei", 3); private static var lime_al_sourceiv = CFFI.load("lime", "lime_al_sourceiv", 3); private static var lime_al_speed_of_sound = CFFI.load("lime", "lime_al_speed_of_sound", 1); private static var lime_alc_close_device = CFFI.load("lime", "lime_alc_close_device", 1); private static var lime_alc_create_context = CFFI.load("lime", "lime_alc_create_context", 2); private static var lime_alc_destroy_context = CFFI.load("lime", "lime_alc_destroy_context", 1); private static var lime_alc_get_contexts_device = CFFI.load("lime", "lime_alc_get_contexts_device", 1); private static var lime_alc_get_current_context = CFFI.load("lime", "lime_alc_get_current_context", 0); private static var lime_alc_get_error = CFFI.load("lime", "lime_alc_get_error", 1); private static var lime_alc_get_integerv = CFFI.load("lime", "lime_alc_get_integerv", 3); private static var lime_alc_get_string = CFFI.load("lime", "lime_alc_get_string", 2); private static var lime_alc_make_context_current = CFFI.load("lime", "lime_alc_make_context_current", 1); private static var lime_alc_open_device = CFFI.load("lime", "lime_alc_open_device", 1); private static var lime_alc_pause_device = CFFI.load("lime", "lime_alc_pause_device", 1); private static var lime_alc_process_context = CFFI.load("lime", "lime_alc_process_context", 1); private static var lime_alc_resume_device = CFFI.load("lime", "lime_alc_resume_device", 1); private static var lime_alc_suspend_context = CFFI.load("lime", "lime_alc_suspend_context", 1); private static var lime_al_gen_filter = CFFI.load("lime", "lime_al_gen_filter", 0); private static var lime_al_filteri = CFFI.load("lime", "lime_al_filteri", 3); private static var lime_al_filterf = CFFI.load("lime", "lime_al_filterf", 3); private static var lime_al_remove_direct_filter = CFFI.load("lime", "lime_al_remove_direct_filter", 1); private static var lime_al_is_filter = CFFI.load("lime", "lime_al_is_filter", 1); private static var lime_al_get_filteri = CFFI.load("lime", "lime_al_get_filteri", 2); private static var lime_al_gen_effect = CFFI.load("lime", "lime_al_gen_effect", 0); private static var lime_al_effectf = CFFI.load("lime", "lime_al_effectf", 3); private static var lime_al_effectfv = CFFI.load("lime", "lime_al_effectfv", 3); private static var lime_al_effecti = CFFI.load("lime", "lime_al_effecti", 3); private static var lime_al_effectiv = CFFI.load("lime", "lime_al_effectiv", 3); private static var lime_al_is_effect = CFFI.load("lime", "lime_al_is_effect", 1); private static var lime_al_gen_aux = CFFI.load("lime", "lime_al_gen_aux", 0); private static var lime_al_auxf = CFFI.load("lime", "lime_al_auxf", 3); private static var lime_al_auxfv = CFFI.load("lime", "lime_al_auxfv", 3); private static var lime_al_auxi = CFFI.load("lime", "lime_al_auxi", 3); private static var lime_al_auxiv = CFFI.load("lime", "lime_al_auxiv", 3); private static var lime_al_is_aux = CFFI.load("lime", "lime_al_is_aux", 1); private static var lime_al_remove_send = CFFI.load("lime", "lime_al_remove_send", 2); #end #if hl @:hlNative("lime", "hl_al_buffer_data") private static function lime_al_buffer_data(buffer:CFFIPointer, format:Int, data:ArrayBufferView, size:Int, freq:Int):Void {} @:hlNative("lime", "hl_al_buffer3f") private static function lime_al_buffer3f(buffer:CFFIPointer, param:Int, value1:hl.F32, value2:hl.F32, value3:hl.F32):Void {} @:hlNative("lime", "hl_al_buffer3i") private static function lime_al_buffer3i(buffer:CFFIPointer, param:Int, value1:Int, value2:Int, value3:Int):Void {} @:hlNative("lime", "hl_al_bufferf") private static function lime_al_bufferf(buffer:CFFIPointer, param:Int, value:hl.F32):Void {} @:hlNative("lime", "hl_al_bufferfv") private static function lime_al_bufferfv(buffer:CFFIPointer, param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_bufferi") private static function lime_al_bufferi(buffer:CFFIPointer, param:Int, value:Int):Void {} @:hlNative("lime", "hl_al_bufferiv") private static function lime_al_bufferiv(buffer:CFFIPointer, param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_cleanup") private static function lime_al_cleanup():Void {} @:hlNative("lime", "hl_al_delete_buffer") private static function lime_al_delete_buffer(buffer:CFFIPointer):Void {} @:hlNative("lime", "hl_al_delete_buffers") private static function lime_al_delete_buffers(n:Int, buffers:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_delete_source") private static function lime_al_delete_source(source:CFFIPointer):Void {} @:hlNative("lime", "hl_al_delete_sources") private static function lime_al_delete_sources(n:Int, sources:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_disable") private static function lime_al_disable(capability:Int):Void {} @:hlNative("lime", "hl_al_distance_model") private static function lime_al_distance_model(distanceModel:Int):Void {} @:hlNative("lime", "hl_al_doppler_factor") private static function lime_al_doppler_factor(value:hl.F32):Void {} @:hlNative("lime", "hl_al_doppler_velocity") private static function lime_al_doppler_velocity(value:hl.F32):Void {} @:hlNative("lime", "hl_al_enable") private static function lime_al_enable(capability:Int):Void {} @:hlNative("lime", "hl_al_gen_source") private static function lime_al_gen_source():CFFIPointer { return null; } @:hlNative("lime", "hl_al_gen_sources") private static function lime_al_gen_sources(n:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_boolean") private static function lime_al_get_boolean(param:Int):Bool { return false; } @:hlNative("lime", "hl_al_get_booleanv") private static function lime_al_get_booleanv(param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_gen_buffer") private static function lime_al_gen_buffer():CFFIPointer { return null; } @:hlNative("lime", "hl_al_gen_buffers") private static function lime_al_gen_buffers(n:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_buffer3f") private static function lime_al_get_buffer3f(buffer:CFFIPointer, param:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_buffer3i") private static function lime_al_get_buffer3i(buffer:CFFIPointer, param:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_bufferf") private static function lime_al_get_bufferf(buffer:CFFIPointer, param:Int):hl.F32 { return 0; } @:hlNative("lime", "hl_al_get_bufferfv") private static function lime_al_get_bufferfv(buffer:CFFIPointer, param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_bufferi") private static function lime_al_get_bufferi(buffer:CFFIPointer, param:Int):Int { return 0; } @:hlNative("lime", "hl_al_get_bufferiv") private static function lime_al_get_bufferiv(buffer:CFFIPointer, param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_double") private static function lime_al_get_double(param:Int):Float { return 0; } @:hlNative("lime", "hl_al_get_doublev") private static function lime_al_get_doublev(param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_enum_value") private static function lime_al_get_enum_value(ename:String):Int { return 0; } @:hlNative("lime", "hl_al_get_error") private static function lime_al_get_error():Int { return 0; } @:hlNative("lime", "hl_al_get_float") private static function lime_al_get_float(param:Int):hl.F32 { return 0; } @:hlNative("lime", "hl_al_get_floatv") private static function lime_al_get_floatv(param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_integer") private static function lime_al_get_integer(param:Int):Int { return 0; } @:hlNative("lime", "hl_al_get_integerv") private static function lime_al_get_integerv(param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_listener3f") private static function lime_al_get_listener3f(param:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_listener3i") private static function lime_al_get_listener3i(param:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_listenerf") private static function lime_al_get_listenerf(param:Int):hl.F32 { return 0; } @:hlNative("lime", "hl_al_get_listenerfv") private static function lime_al_get_listenerfv(param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_listeneri") private static function lime_al_get_listeneri(param:Int):Int { return 0; } @:hlNative("lime", "hl_al_get_listeneriv") private static function lime_al_get_listeneriv(param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_proc_address") private static function lime_al_get_proc_address(fname:String):Float { return 0; } @:hlNative("lime", "hl_al_get_source3f") private static function lime_al_get_source3f(source:CFFIPointer, param:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_source3i") private static function lime_al_get_source3i(source:CFFIPointer, param:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_sourcef") private static function lime_al_get_sourcef(source:CFFIPointer, param:Int):hl.F32 { return 0; } @:hlNative("lime", "hl_al_get_sourcefv") private static function lime_al_get_sourcefv(source:CFFIPointer, param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_sourcei") private static function lime_al_get_sourcei(source:CFFIPointer, param:Int):Dynamic { return null; } @:hlNative("lime", "hl_al_get_sourceiv") private static function lime_al_get_sourceiv(source:CFFIPointer, param:Int, count:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_get_string") private static function lime_al_get_string(param:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_al_is_buffer") private static function lime_al_is_buffer(buffer:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_al_is_enabled") private static function lime_al_is_enabled(capability:Int):Bool { return false; } @:hlNative("lime", "hl_al_is_extension_present") private static function lime_al_is_extension_present(extname:String):Bool { return false; } @:hlNative("lime", "hl_al_is_source") private static function lime_al_is_source(source:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_al_listener3f") private static function lime_al_listener3f(param:Int, value1:hl.F32, value2:hl.F32, value3:hl.F32):Void {} @:hlNative("lime", "hl_al_listener3i") private static function lime_al_listener3i(param:Int, value1:Int, value2:Int, value3:Int):Void {} @:hlNative("lime", "hl_al_listenerf") private static function lime_al_listenerf(param:Int, value1:hl.F32):Void {} @:hlNative("lime", "hl_al_listenerfv") private static function lime_al_listenerfv(param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_listeneri") private static function lime_al_listeneri(param:Int, value1:Int):Void {} @:hlNative("lime", "hl_al_listeneriv") private static function lime_al_listeneriv(param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_source_pause") private static function lime_al_source_pause(source:CFFIPointer):Void {} @:hlNative("lime", "hl_al_source_pausev") private static function lime_al_source_pausev(n:Int, sources:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_source_play") private static function lime_al_source_play(source:CFFIPointer):Void {} @:hlNative("lime", "hl_al_source_playv") private static function lime_al_source_playv(n:Int, sources:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_source_queue_buffers") private static function lime_al_source_queue_buffers(source:CFFIPointer, nb:Int, buffers:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_source_rewind") private static function lime_al_source_rewind(source:CFFIPointer):Void {} @:hlNative("lime", "hl_al_source_rewindv") private static function lime_al_source_rewindv(n:Int, sources:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_source_stop") private static function lime_al_source_stop(source:CFFIPointer):Void {} @:hlNative("lime", "hl_al_source_stopv") private static function lime_al_source_stopv(n:Int, sources:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_source_unqueue_buffers") private static function lime_al_source_unqueue_buffers(source:CFFIPointer, nb:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_al_source3f") private static function lime_al_source3f(source:CFFIPointer, param:Int, value1:hl.F32, value2:hl.F32, value3:hl.F32):Void {} @:hlNative("lime", "hl_al_source3i") private static function lime_al_source3i(source:CFFIPointer, param:Int, value1:Dynamic, value2:Int, value3:Int):Void {} @:hlNative("lime", "hl_al_sourcef") private static function lime_al_sourcef(source:CFFIPointer, param:Int, value:hl.F32):Void {} @:hlNative("lime", "hl_al_sourcefv") private static function lime_al_sourcefv(source:CFFIPointer, param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_sourcei") private static function lime_al_sourcei(source:CFFIPointer, param:Int, value:Dynamic):Void {} @:hlNative("lime", "hl_al_sourceiv") private static function lime_al_sourceiv(source:CFFIPointer, param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_speed_of_sound") private static function lime_al_speed_of_sound(speed:hl.F32):Void {} @:hlNative("lime", "hl_alc_close_device") private static function lime_alc_close_device(device:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_alc_create_context") private static function lime_alc_create_context(device:CFFIPointer, attrlist:hl.NativeArray):CFFIPointer { return null; } @:hlNative("lime", "hl_alc_destroy_context") private static function lime_alc_destroy_context(context:CFFIPointer):Void {} @:hlNative("lime", "hl_alc_get_contexts_device") private static function lime_alc_get_contexts_device(context:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_alc_get_current_context") private static function lime_alc_get_current_context():CFFIPointer { return null; } @:hlNative("lime", "hl_alc_get_error") private static function lime_alc_get_error(device:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_alc_get_integerv") private static function lime_alc_get_integerv(device:CFFIPointer, param:Int, size:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_alc_get_string") private static function lime_alc_get_string(device:CFFIPointer, param:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_alc_make_context_current") private static function lime_alc_make_context_current(context:ALContext):Bool { return false; } @:hlNative("lime", "hl_alc_open_device") private static function lime_alc_open_device(devicename:String):CFFIPointer { return null; }; @:hlNative("lime", "hl_alc_pause_device") private static function lime_alc_pause_device(device:ALDevice):Void {} @:hlNative("lime", "hl_alc_process_context") private static function lime_alc_process_context(context:ALContext):Void {} @:hlNative("lime", "hl_alc_resume_device") private static function lime_alc_resume_device(device:ALDevice):Void {} @:hlNative("lime", "hl_alc_suspend_context") private static function lime_alc_suspend_context(context:ALContext):Void {} @:hlNative("lime", "hl_al_gen_filter") private static function lime_al_gen_filter():CFFIPointer { return null; } @:hlNative("lime", "hl_al_filteri") private static function lime_al_filteri(filter:CFFIPointer, param:Int, value:Int):Void {} @:hlNative("lime", "hl_al_filterf") private static function lime_al_filterf(filter:CFFIPointer, param:Int, value:hl.F32):Void {} @:hlNative("lime", "hl_al_remove_direct_filter") private static function lime_al_remove_direct_filter(source:CFFIPointer):Void {} @:hlNative("lime", "hl_al_is_filter") private static function lime_al_is_filter(filter:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_al_get_filteri") private static function lime_al_get_filteri(filter:CFFIPointer, param:Int):Int { return 0; } @:hlNative("lime", "hl_al_gen_effect") private static function lime_al_gen_effect():CFFIPointer { return null; } @:hlNative("lime", "hl_al_effectf") private static function lime_al_effectf(effect:CFFIPointer, param:Int, value:hl.F32):Void {} @:hlNative("lime", "hl_al_effectfv") private static function lime_al_effectfv(effect:CFFIPointer, param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_effecti") private static function lime_al_effecti(effect:CFFIPointer, param:Int, value:Int):Void {} @:hlNative("lime", "hl_al_effectiv") private static function lime_al_effectiv(effect:CFFIPointer, param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_is_effect") private static function lime_al_is_effect(effect:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_al_gen_aux") private static function lime_al_gen_aux():CFFIPointer { return null; } @:hlNative("lime", "hl_al_auxf") private static function lime_al_auxf(aux:CFFIPointer, param:Int, value:hl.F32):Void {} @:hlNative("lime", "hl_al_auxfv") private static function lime_al_auxfv(aux:CFFIPointer, param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_auxi") private static function lime_al_auxi(aux:CFFIPointer, param:Int, value:Dynamic):Void {} @:hlNative("lime", "hl_al_auxiv") private static function lime_al_auxiv(aux:CFFIPointer, param:Int, values:hl.NativeArray):Void {} @:hlNative("lime", "hl_al_is_aux") private static function lime_al_is_aux(aux:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_al_remove_send") private static function lime_al_remove_send(source:CFFIPointer, index:Int):Void {} #end #end #if (lime_cffi && !macro && lime_cairo) #if (cpp && !cppia) #if (disable_cffi || haxe_ver < "3.4.0") @:cffi private static function lime_cairo_arc(handle:CFFIPointer, xc:Float, yc:Float, radius:Float, angle1:Float, angle2:Float):Void; @:cffi private static function lime_cairo_arc_negative(handle:CFFIPointer, xc:Float, yc:Float, radius:Float, angle1:Float, angle2:Float):Void; @:cffi private static function lime_cairo_clip(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_clip_preserve(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_clip_extents(handle:CFFIPointer, x1:Float, y1:Float, x2:Float, y2:Float):Void; @:cffi private static function lime_cairo_close_path(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_copy_page(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_create(handle:CFFIPointer):CFFIPointer; @:cffi private static function lime_cairo_curve_to(handle:CFFIPointer, x1:Float, y1:Float, x2:Float, y2:Float, x3:Float, y3:Float):Void; @:cffi private static function lime_cairo_fill(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_fill_extents(handle:CFFIPointer, x1:Float, y1:Float, x2:Float, y2:Float):Void; @:cffi private static function lime_cairo_fill_preserve(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_get_antialias(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_get_current_point(handle:CFFIPointer):Dynamic; @:cffi private static function lime_cairo_get_dash(handle:CFFIPointer):Dynamic; @:cffi private static function lime_cairo_get_dash_count(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_get_fill_rule(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_get_font_face(handle:CFFIPointer):CFFIPointer; @:cffi private static function lime_cairo_get_font_options(handle:CFFIPointer):CFFIPointer; @:cffi private static function lime_cairo_get_group_target(handle:CFFIPointer):CFFIPointer; @:cffi private static function lime_cairo_get_line_cap(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_get_line_join(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_get_line_width(handle:CFFIPointer):Float; @:cffi private static function lime_cairo_get_matrix(handle:CFFIPointer):Dynamic; @:cffi private static function lime_cairo_get_miter_limit(handle:CFFIPointer):Float; @:cffi private static function lime_cairo_get_operator(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_get_source(handle:CFFIPointer):CFFIPointer; @:cffi private static function lime_cairo_get_target(handle:CFFIPointer):CFFIPointer; @:cffi private static function lime_cairo_get_tolerance(handle:CFFIPointer):Float; @:cffi private static function lime_cairo_has_current_point(handle:CFFIPointer):Bool; @:cffi private static function lime_cairo_identity_matrix(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_in_clip(handle:CFFIPointer, x:Float, y:Float):Bool; @:cffi private static function lime_cairo_in_fill(handle:CFFIPointer, x:Float, y:Float):Bool; @:cffi private static function lime_cairo_in_stroke(handle:CFFIPointer, x:Float, y:Float):Bool; @:cffi private static function lime_cairo_line_to(handle:CFFIPointer, x:Float, y:Float):Void; @:cffi private static function lime_cairo_mask(handle:CFFIPointer, pattern:CFFIPointer):Void; @:cffi private static function lime_cairo_mask_surface(handle:CFFIPointer, surface:CFFIPointer, x:Float, y:Float):Void; @:cffi private static function lime_cairo_move_to(handle:CFFIPointer, x:Float, y:Float):Void; @:cffi private static function lime_cairo_new_path(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_paint(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_paint_with_alpha(handle:CFFIPointer, alpha:Float):Void; @:cffi private static function lime_cairo_pop_group(handle:CFFIPointer):CFFIPointer; @:cffi private static function lime_cairo_pop_group_to_source(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_push_group(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_push_group_with_content(handle:CFFIPointer, content:Int):Void; @:cffi private static function lime_cairo_rectangle(handle:CFFIPointer, x:Float, y:Float, width:Float, height:Float):Void; @:cffi private static function lime_cairo_rel_curve_to(handle:CFFIPointer, dx1:Float, dy1:Float, dx2:Float, dy2:Float, dx3:Float, dy3:Float):Void; @:cffi private static function lime_cairo_rel_line_to(handle:CFFIPointer, dx:Float, dy:Float):Void; @:cffi private static function lime_cairo_rel_move_to(handle:CFFIPointer, dx:Float, dy:Float):Void; @:cffi private static function lime_cairo_reset_clip(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_restore(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_rotate(handle:CFFIPointer, amount:Float):Void; @:cffi private static function lime_cairo_save(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_scale(handle:CFFIPointer, x:Float, y:Float):Void; @:cffi private static function lime_cairo_set_antialias(handle:CFFIPointer, cap:Int):Void; @:cffi private static function lime_cairo_set_dash(handle:CFFIPointer, dash:Dynamic):Void; @:cffi private static function lime_cairo_set_fill_rule(handle:CFFIPointer, cap:Int):Void; @:cffi private static function lime_cairo_set_font_face(handle:CFFIPointer, face:CFFIPointer):Void; @:cffi private static function lime_cairo_set_font_options(handle:CFFIPointer, options:CFFIPointer):Void; @:cffi private static function lime_cairo_set_font_size(handle:CFFIPointer, size:Float):Void; @:cffi private static function lime_cairo_set_line_cap(handle:CFFIPointer, cap:Int):Void; @:cffi private static function lime_cairo_set_line_join(handle:CFFIPointer, join:Int):Void; @:cffi private static function lime_cairo_set_line_width(handle:CFFIPointer, width:Float):Void; @:cffi private static function lime_cairo_set_matrix(handle:CFFIPointer, a:Float, b:Float, c:Float, d:Float, tx:Float, ty:Float):Void; // @:cffi private static function lime_cairo_set_matrix (handle:CFFIPointer, matrix:Dynamic):Void; @:cffi private static function lime_cairo_set_miter_limit(handle:CFFIPointer, miterLimit:Float):Void; @:cffi private static function lime_cairo_set_operator(handle:CFFIPointer, op:Int):Void; @:cffi private static function lime_cairo_set_source(handle:CFFIPointer, pattern:CFFIPointer):Void; @:cffi private static function lime_cairo_set_source_rgb(handle:CFFIPointer, r:Float, g:Float, b:Float):Void; @:cffi private static function lime_cairo_set_source_rgba(handle:CFFIPointer, r:Float, g:Float, b:Float, a:Float):Void; @:cffi private static function lime_cairo_set_source_surface(handle:CFFIPointer, surface:CFFIPointer, x:Float, y:Float):Void; @:cffi private static function lime_cairo_set_tolerance(handle:CFFIPointer, tolerance:Float):Void; @:cffi private static function lime_cairo_show_glyphs(handle:CFFIPointer, glyphs:Dynamic):Void; @:cffi private static function lime_cairo_show_page(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_show_text(handle:CFFIPointer, text:String):Void; @:cffi private static function lime_cairo_status(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_stroke(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_stroke_extents(handle:CFFIPointer, x1:Float, y1:Float, x2:Float, y2:Float):Void; @:cffi private static function lime_cairo_stroke_preserve(handle:CFFIPointer):Void; @:cffi private static function lime_cairo_text_path(handle:CFFIPointer, text:String):Void; @:cffi private static function lime_cairo_transform(handle:CFFIPointer, matrix:Dynamic):Void; @:cffi private static function lime_cairo_translate(handle:CFFIPointer, x:Float, y:Float):Void; @:cffi private static function lime_cairo_version():Int; @:cffi private static function lime_cairo_version_string():String; @:cffi private static function lime_cairo_font_face_status(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_font_options_create():CFFIPointer; @:cffi private static function lime_cairo_font_options_get_antialias(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_font_options_get_hint_metrics(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_font_options_get_hint_style(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_font_options_get_subpixel_order(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_font_options_set_antialias(handle:CFFIPointer, v:Int):Void; @:cffi private static function lime_cairo_font_options_set_hint_metrics(handle:CFFIPointer, v:Int):Void; @:cffi private static function lime_cairo_font_options_set_hint_style(handle:CFFIPointer, v:Int):Void; @:cffi private static function lime_cairo_font_options_set_subpixel_order(handle:CFFIPointer, v:Int):Void; @:cffi private static function lime_cairo_ft_font_face_create(face:CFFIPointer, flags:Int):CFFIPointer; @:cffi private static function lime_cairo_image_surface_create(format:Int, width:Int, height:Int):CFFIPointer; @:cffi private static function lime_cairo_image_surface_create_for_data(data:DataPointer, format:Int, width:Int, height:Int, stride:Int):CFFIPointer; @:cffi private static function lime_cairo_image_surface_get_data(handle:CFFIPointer):DataPointer; @:cffi private static function lime_cairo_image_surface_get_format(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_image_surface_get_height(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_image_surface_get_stride(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_image_surface_get_width(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_pattern_add_color_stop_rgb(handle:CFFIPointer, offset:Float, red:Float, green:Float, blue:Float):Void; @:cffi private static function lime_cairo_pattern_add_color_stop_rgba(handle:CFFIPointer, offset:Float, red:Float, green:Float, blue:Float, alpha:Float):Void; @:cffi private static function lime_cairo_pattern_create_for_surface(surface:CFFIPointer):CFFIPointer; @:cffi private static function lime_cairo_pattern_create_linear(x0:Float, y0:Float, x1:Float, y1:Float):CFFIPointer; @:cffi private static function lime_cairo_pattern_create_radial(cx0:Float, cy0:Float, radius0:Float, cx1:Float, cy1:Float, radius1:Float):CFFIPointer; @:cffi private static function lime_cairo_pattern_create_rgb(r:Float, g:Float, b:Float):CFFIPointer; @:cffi private static function lime_cairo_pattern_create_rgba(r:Float, g:Float, b:Float, a:Float):CFFIPointer; @:cffi private static function lime_cairo_pattern_get_color_stop_count(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_pattern_get_extend(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_pattern_get_filter(handle:CFFIPointer):Int; @:cffi private static function lime_cairo_pattern_get_matrix(handle:CFFIPointer):Dynamic; @:cffi private static function lime_cairo_pattern_set_extend(handle:CFFIPointer, extend:Int):Void; @:cffi private static function lime_cairo_pattern_set_filter(handle:CFFIPointer, filter:Int):Void; @:cffi private static function lime_cairo_pattern_set_matrix(handle:CFFIPointer, matrix:Dynamic):Void; @:cffi private static function lime_cairo_surface_flush(surface:CFFIPointer):Void; #else private static var lime_cairo_arc = new cpp.CallableFloat->Float->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_arc", "odddddv", false)); private static var lime_cairo_arc_negative = new cpp.CallableFloat->Float->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_arc_negative", "odddddv", false)); private static var lime_cairo_clip = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_clip", "ov", false)); private static var lime_cairo_clip_preserve = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_clip_preserve", "ov", false)); private static var lime_cairo_clip_extents = new cpp.CallableFloat->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_clip_extents", "oddddv", false)); private static var lime_cairo_close_path = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_close_path", "ov", false)); private static var lime_cairo_copy_page = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_copy_page", "ov", false)); private static var lime_cairo_create = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_create", "oo", false)); private static var lime_cairo_curve_to = new cpp.CallableFloat->Float->Float->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_curve_to", "oddddddv", false)); private static var lime_cairo_fill = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_fill", "ov", false)); private static var lime_cairo_fill_extents = new cpp.CallableFloat->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_fill_extents", "oddddv", false)); private static var lime_cairo_fill_preserve = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_fill_preserve", "ov", false)); private static var lime_cairo_get_antialias = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_get_antialias", "oi", false)); private static var lime_cairo_get_current_point = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_get_current_point", "oo", false)); private static var lime_cairo_get_dash = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_get_dash", "oo", false)); private static var lime_cairo_get_dash_count = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_get_dash_count", "oi", false)); private static var lime_cairo_get_fill_rule = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_get_fill_rule", "oi", false)); private static var lime_cairo_get_font_face = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_get_font_face", "oo", false)); private static var lime_cairo_get_font_options = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_get_font_options", "oo", false)); private static var lime_cairo_get_group_target = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_get_group_target", "oo", false)); private static var lime_cairo_get_line_cap = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_get_line_cap", "oi", false)); private static var lime_cairo_get_line_join = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_get_line_join", "oi", false)); private static var lime_cairo_get_line_width = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_cairo_get_line_width", "od", false)); private static var lime_cairo_get_matrix = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_get_matrix", "oo", false)); private static var lime_cairo_get_miter_limit = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_cairo_get_miter_limit", "od", false)); private static var lime_cairo_get_operator = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_get_operator", "oi", false)); private static var lime_cairo_get_source = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_get_source", "oo", false)); private static var lime_cairo_get_target = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_get_target", "oo", false)); private static var lime_cairo_get_tolerance = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_cairo_get_tolerance", "od", false)); private static var lime_cairo_has_current_point = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_cairo_has_current_point", "ob", false)); private static var lime_cairo_identity_matrix = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_identity_matrix", "ov", false)); private static var lime_cairo_in_clip = new cpp.CallableFloat->Float->Bool>(cpp.Prime._loadPrime("lime", "lime_cairo_in_clip", "oddb", false)); private static var lime_cairo_in_fill = new cpp.CallableFloat->Float->Bool>(cpp.Prime._loadPrime("lime", "lime_cairo_in_fill", "oddb", false)); private static var lime_cairo_in_stroke = new cpp.CallableFloat->Float->Bool>(cpp.Prime._loadPrime("lime", "lime_cairo_in_stroke", "oddb", false)); private static var lime_cairo_line_to = new cpp.CallableFloat->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_line_to", "oddv", false)); private static var lime_cairo_mask = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_mask", "oov", false)); private static var lime_cairo_mask_surface = new cpp.Callablecpp.Object->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_mask_surface", "ooddv", false)); private static var lime_cairo_move_to = new cpp.CallableFloat->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_move_to", "oddv", false)); private static var lime_cairo_new_path = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_new_path", "ov", false)); private static var lime_cairo_paint = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_paint", "ov", false)); private static var lime_cairo_paint_with_alpha = new cpp.CallableFloat->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_paint_with_alpha", "odv", false)); private static var lime_cairo_pop_group = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_pop_group", "oo", false)); private static var lime_cairo_pop_group_to_source = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_pop_group_to_source", "ov", false)); private static var lime_cairo_push_group = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_push_group", "ov", false)); private static var lime_cairo_push_group_with_content = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_push_group_with_content", "oiv", false)); private static var lime_cairo_rectangle = new cpp.CallableFloat->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_rectangle", "oddddv", false)); private static var lime_cairo_rel_curve_to = new cpp.CallableFloat->Float->Float->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_rel_curve_to", "oddddddv", false)); private static var lime_cairo_rel_line_to = new cpp.CallableFloat->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_rel_line_to", "oddv", false)); private static var lime_cairo_rel_move_to = new cpp.CallableFloat->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_rel_move_to", "oddv", false)); private static var lime_cairo_reset_clip = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_reset_clip", "ov", false)); private static var lime_cairo_restore = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_restore", "ov", false)); private static var lime_cairo_rotate = new cpp.CallableFloat->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_rotate", "odv", false)); private static var lime_cairo_save = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_save", "ov", false)); private static var lime_cairo_scale = new cpp.CallableFloat->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_scale", "oddv", false)); private static var lime_cairo_set_antialias = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_antialias", "oiv", false)); private static var lime_cairo_set_dash = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_dash", "oov", false)); private static var lime_cairo_set_fill_rule = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_fill_rule", "oiv", false)); private static var lime_cairo_set_font_face = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_font_face", "oov", false)); private static var lime_cairo_set_font_options = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_font_options", "oov", false)); private static var lime_cairo_set_font_size = new cpp.CallableFloat->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_font_size", "odv", false)); private static var lime_cairo_set_line_cap = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_line_cap", "oiv", false)); private static var lime_cairo_set_line_join = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_line_join", "oiv", false)); private static var lime_cairo_set_line_width = new cpp.CallableFloat->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_line_width", "odv", false)); private static var lime_cairo_set_matrix = new cpp.CallableFloat->Float->Float->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_matrix", "oddddddv", false)); private static var lime_cairo_set_miter_limit = new cpp.CallableFloat->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_miter_limit", "odv", false)); private static var lime_cairo_set_operator = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_operator", "oiv", false)); private static var lime_cairo_set_source = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_source", "oov", false)); private static var lime_cairo_set_source_rgb = new cpp.CallableFloat->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_source_rgb", "odddv", false)); private static var lime_cairo_set_source_rgba = new cpp.CallableFloat->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_source_rgba", "oddddv", false)); private static var lime_cairo_set_source_surface = new cpp.Callablecpp.Object->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_source_surface", "ooddv", false)); private static var lime_cairo_set_tolerance = new cpp.CallableFloat->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_set_tolerance", "odv", false)); private static var lime_cairo_show_glyphs = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_show_glyphs", "oov", false)); private static var lime_cairo_show_page = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_show_page", "ov", false)); private static var lime_cairo_show_text = new cpp.CallableString->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_show_text", "osv", false)); private static var lime_cairo_status = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_status", "oi", false)); private static var lime_cairo_stroke = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_stroke", "ov", false)); private static var lime_cairo_stroke_extents = new cpp.CallableFloat->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_stroke_extents", "oddddv", false)); private static var lime_cairo_stroke_preserve = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_stroke_preserve", "ov", false)); private static var lime_cairo_text_path = new cpp.CallableString->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_text_path", "osv", false)); private static var lime_cairo_transform = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_transform", "oov", false)); private static var lime_cairo_translate = new cpp.CallableFloat->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_translate", "oddv", false)); private static var lime_cairo_version = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_version", "i", false)); private static var lime_cairo_version_string = new cpp.CallableString>(cpp.Prime._loadPrime("lime", "lime_cairo_version_string", "s", false)); private static var lime_cairo_font_face_status = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_font_face_status", "oi", false)); private static var lime_cairo_font_options_create = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_font_options_create", "o", false)); private static var lime_cairo_font_options_get_antialias = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_font_options_get_antialias", "oi", false)); private static var lime_cairo_font_options_get_hint_metrics = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_font_options_get_hint_metrics", "oi", false)); private static var lime_cairo_font_options_get_hint_style = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_font_options_get_hint_style", "oi", false)); private static var lime_cairo_font_options_get_subpixel_order = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_font_options_get_subpixel_order", "oi", false)); private static var lime_cairo_font_options_set_antialias = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_font_options_set_antialias", "oiv", false)); private static var lime_cairo_font_options_set_hint_metrics = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_font_options_set_hint_metrics", "oiv", false)); private static var lime_cairo_font_options_set_hint_style = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_font_options_set_hint_style", "oiv", false)); private static var lime_cairo_font_options_set_subpixel_order = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_font_options_set_subpixel_order", "oiv", false)); private static var lime_cairo_ft_font_face_create = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_ft_font_face_create", "oio", false)); private static var lime_cairo_image_surface_create = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_image_surface_create", "iiio", false)); private static var lime_cairo_image_surface_create_for_data = new cpp.CallableInt->Int->Int->Int-> cpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_image_surface_create_for_data", "diiiio", false)); private static var lime_cairo_image_surface_get_data = new cpp.Callablelime.utils.DataPointer>(cpp.Prime._loadPrime("lime", "lime_cairo_image_surface_get_data", "od", false)); private static var lime_cairo_image_surface_get_format = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_image_surface_get_format", "oi", false)); private static var lime_cairo_image_surface_get_height = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_image_surface_get_height", "oi", false)); private static var lime_cairo_image_surface_get_stride = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_image_surface_get_stride", "oi", false)); private static var lime_cairo_image_surface_get_width = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_image_surface_get_width", "oi", false)); private static var lime_cairo_pattern_add_color_stop_rgb = new cpp.CallableFloat->Float->Float->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_add_color_stop_rgb", "oddddv", false)); private static var lime_cairo_pattern_add_color_stop_rgba = new cpp.CallableFloat->Float->Float->Float->Float-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_add_color_stop_rgba", "odddddv", false)); private static var lime_cairo_pattern_create_for_surface = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_create_for_surface", "oo", false)); private static var lime_cairo_pattern_create_linear = new cpp.CallableFloat->Float->Float->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_create_linear", "ddddo", false)); private static var lime_cairo_pattern_create_radial = new cpp.CallableFloat->Float->Float->Float->Float->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_create_radial", "ddddddo", false)); private static var lime_cairo_pattern_create_rgb = new cpp.CallableFloat->Float->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_create_rgb", "dddo", false)); private static var lime_cairo_pattern_create_rgba = new cpp.CallableFloat->Float->Float->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_create_rgba", "ddddo", false)); private static var lime_cairo_pattern_get_color_stop_count = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_get_color_stop_count", "oi", false)); private static var lime_cairo_pattern_get_extend = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_get_extend", "oi", false)); private static var lime_cairo_pattern_get_filter = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_get_filter", "oi", false)); private static var lime_cairo_pattern_get_matrix = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_get_matrix", "oo", false)); private static var lime_cairo_pattern_set_extend = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_set_extend", "oiv", false)); private static var lime_cairo_pattern_set_filter = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_set_filter", "oiv", false)); private static var lime_cairo_pattern_set_matrix = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_pattern_set_matrix", "oov", false)); private static var lime_cairo_surface_flush = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_cairo_surface_flush", "ov", false)); #end #end #if (neko || cppia) private static var lime_cairo_arc = CFFI.load("lime", "lime_cairo_arc", -1); private static var lime_cairo_arc_negative = CFFI.load("lime", "lime_cairo_arc_negative", -1); private static var lime_cairo_clip = CFFI.load("lime", "lime_cairo_clip", 1); private static var lime_cairo_clip_preserve = CFFI.load("lime", "lime_cairo_clip_preserve", 1); private static var lime_cairo_clip_extents = CFFI.load("lime", "lime_cairo_clip_extents", 5); private static var lime_cairo_close_path = CFFI.load("lime", "lime_cairo_close_path", 1); private static var lime_cairo_copy_page = CFFI.load("lime", "lime_cairo_copy_page", 1); private static var lime_cairo_create = CFFI.load("lime", "lime_cairo_create", 1); private static var lime_cairo_curve_to = CFFI.load("lime", "lime_cairo_curve_to", -1); private static var lime_cairo_fill = CFFI.load("lime", "lime_cairo_fill", 1); private static var lime_cairo_fill_extents = CFFI.load("lime", "lime_cairo_fill_extents", 5); private static var lime_cairo_fill_preserve = CFFI.load("lime", "lime_cairo_fill_preserve", 1); private static var lime_cairo_get_antialias = CFFI.load("lime", "lime_cairo_get_antialias", 1); private static var lime_cairo_get_current_point = CFFI.load("lime", "lime_cairo_get_current_point", 1); private static var lime_cairo_get_dash = CFFI.load("lime", "lime_cairo_get_dash", 1); private static var lime_cairo_get_dash_count = CFFI.load("lime", "lime_cairo_get_dash_count", 1); private static var lime_cairo_get_fill_rule = CFFI.load("lime", "lime_cairo_get_fill_rule", 1); private static var lime_cairo_get_font_face = CFFI.load("lime", "lime_cairo_get_font_face", 1); private static var lime_cairo_get_font_options = CFFI.load("lime", "lime_cairo_get_font_options", 1); private static var lime_cairo_get_group_target = CFFI.load("lime", "lime_cairo_get_group_target", 1); private static var lime_cairo_get_line_cap = CFFI.load("lime", "lime_cairo_get_line_cap", 1); private static var lime_cairo_get_line_join = CFFI.load("lime", "lime_cairo_get_line_join", 1); private static var lime_cairo_get_line_width = CFFI.load("lime", "lime_cairo_get_line_width", 1); private static var lime_cairo_get_matrix = CFFI.load("lime", "lime_cairo_get_matrix", 1); private static var lime_cairo_get_miter_limit = CFFI.load("lime", "lime_cairo_get_miter_limit", 1); private static var lime_cairo_get_operator = CFFI.load("lime", "lime_cairo_get_operator", 1); private static var lime_cairo_get_source = CFFI.load("lime", "lime_cairo_get_source", 1); private static var lime_cairo_get_target = CFFI.load("lime", "lime_cairo_get_target", 1); private static var lime_cairo_get_tolerance = CFFI.load("lime", "lime_cairo_get_tolerance", 1); private static var lime_cairo_has_current_point = CFFI.load("lime", "lime_cairo_has_current_point", 1); private static var lime_cairo_identity_matrix = CFFI.load("lime", "lime_cairo_identity_matrix", 1); private static var lime_cairo_in_clip = CFFI.load("lime", "lime_cairo_in_clip", 3); private static var lime_cairo_in_fill = CFFI.load("lime", "lime_cairo_in_fill", 3); private static var lime_cairo_in_stroke = CFFI.load("lime", "lime_cairo_in_stroke", 3); private static var lime_cairo_line_to = CFFI.load("lime", "lime_cairo_line_to", 3); private static var lime_cairo_mask = CFFI.load("lime", "lime_cairo_mask", 2); private static var lime_cairo_mask_surface = CFFI.load("lime", "lime_cairo_mask_surface", 4); private static var lime_cairo_move_to = CFFI.load("lime", "lime_cairo_move_to", 3); private static var lime_cairo_new_path = CFFI.load("lime", "lime_cairo_new_path", 1); private static var lime_cairo_paint = CFFI.load("lime", "lime_cairo_paint", 1); private static var lime_cairo_paint_with_alpha = CFFI.load("lime", "lime_cairo_paint_with_alpha", 2); private static var lime_cairo_pop_group = CFFI.load("lime", "lime_cairo_pop_group", 1); private static var lime_cairo_pop_group_to_source = CFFI.load("lime", "lime_cairo_pop_group_to_source", 1); private static var lime_cairo_push_group = CFFI.load("lime", "lime_cairo_push_group", 1); private static var lime_cairo_push_group_with_content = CFFI.load("lime", "lime_cairo_push_group_with_content", 2); private static var lime_cairo_rectangle = CFFI.load("lime", "lime_cairo_rectangle", 5); private static var lime_cairo_rel_curve_to = CFFI.load("lime", "lime_cairo_rel_curve_to", -1); private static var lime_cairo_rel_line_to = CFFI.load("lime", "lime_cairo_rel_line_to", 3); private static var lime_cairo_rel_move_to = CFFI.load("lime", "lime_cairo_rel_move_to", 3); private static var lime_cairo_reset_clip = CFFI.load("lime", "lime_cairo_reset_clip", 1); private static var lime_cairo_restore = CFFI.load("lime", "lime_cairo_restore", 1); private static var lime_cairo_rotate = CFFI.load("lime", "lime_cairo_rotate", 2); private static var lime_cairo_save = CFFI.load("lime", "lime_cairo_save", 1); private static var lime_cairo_scale = CFFI.load("lime", "lime_cairo_scale", 3); private static var lime_cairo_set_antialias = CFFI.load("lime", "lime_cairo_set_antialias", 2); private static var lime_cairo_set_dash = CFFI.load("lime", "lime_cairo_set_dash", 2); private static var lime_cairo_set_fill_rule = CFFI.load("lime", "lime_cairo_set_fill_rule", 2); private static var lime_cairo_set_font_face = CFFI.load("lime", "lime_cairo_set_font_face", 2); private static var lime_cairo_set_font_options = CFFI.load("lime", "lime_cairo_set_font_options", 2); private static var lime_cairo_set_font_size = CFFI.load("lime", "lime_cairo_set_font_size", 2); private static var lime_cairo_set_line_cap = CFFI.load("lime", "lime_cairo_set_line_cap", 2); private static var lime_cairo_set_line_join = CFFI.load("lime", "lime_cairo_set_line_join", 2); private static var lime_cairo_set_line_width = CFFI.load("lime", "lime_cairo_set_line_width", 2); private static var lime_cairo_set_matrix = CFFI.load("lime", "lime_cairo_set_matrix", -1); private static var lime_cairo_set_miter_limit = CFFI.load("lime", "lime_cairo_set_miter_limit", 2); private static var lime_cairo_set_operator = CFFI.load("lime", "lime_cairo_set_operator", 2); private static var lime_cairo_set_source = CFFI.load("lime", "lime_cairo_set_source", 2); private static var lime_cairo_set_source_rgb = CFFI.load("lime", "lime_cairo_set_source_rgb", 4); private static var lime_cairo_set_source_rgba = CFFI.load("lime", "lime_cairo_set_source_rgba", 5); private static var lime_cairo_set_source_surface = CFFI.load("lime", "lime_cairo_set_source_surface", 4); private static var lime_cairo_set_tolerance = CFFI.load("lime", "lime_cairo_set_tolerance", 2); private static var lime_cairo_show_glyphs = CFFI.load("lime", "lime_cairo_show_glyphs", 2); private static var lime_cairo_show_page = CFFI.load("lime", "lime_cairo_show_page", 1); private static var lime_cairo_show_text = CFFI.load("lime", "lime_cairo_show_text", 2); private static var lime_cairo_status = CFFI.load("lime", "lime_cairo_status", 1); private static var lime_cairo_stroke = CFFI.load("lime", "lime_cairo_stroke", 1); private static var lime_cairo_stroke_extents = CFFI.load("lime", "lime_cairo_stroke_extents", 5); private static var lime_cairo_stroke_preserve = CFFI.load("lime", "lime_cairo_stroke_preserve", 1); private static var lime_cairo_text_path = CFFI.load("lime", "lime_cairo_text_path", 2); private static var lime_cairo_transform = CFFI.load("lime", "lime_cairo_transform", 2); private static var lime_cairo_translate = CFFI.load("lime", "lime_cairo_translate", 3); private static var lime_cairo_version = CFFI.load("lime", "lime_cairo_version", 0); private static var lime_cairo_version_string = CFFI.load("lime", "lime_cairo_version_string", 0); private static var lime_cairo_font_face_status = CFFI.load("lime", "lime_cairo_font_face_status", 1); private static var lime_cairo_font_options_create = CFFI.load("lime", "lime_cairo_font_options_create", 0); private static var lime_cairo_font_options_get_antialias = CFFI.load("lime", "lime_cairo_font_options_get_antialias", 1); private static var lime_cairo_font_options_get_hint_metrics = CFFI.load("lime", "lime_cairo_font_options_get_hint_metrics", 1); private static var lime_cairo_font_options_get_hint_style = CFFI.load("lime", "lime_cairo_font_options_get_hint_style", 1); private static var lime_cairo_font_options_get_subpixel_order = CFFI.load("lime", "lime_cairo_font_options_get_subpixel_order", 1); private static var lime_cairo_font_options_set_antialias = CFFI.load("lime", "lime_cairo_font_options_set_antialias", 2); private static var lime_cairo_font_options_set_hint_metrics = CFFI.load("lime", "lime_cairo_font_options_set_hint_metrics", 2); private static var lime_cairo_font_options_set_hint_style = CFFI.load("lime", "lime_cairo_font_options_set_hint_style", 2); private static var lime_cairo_font_options_set_subpixel_order = CFFI.load("lime", "lime_cairo_font_options_set_subpixel_order", 2); private static var lime_cairo_ft_font_face_create = CFFI.load("lime", "lime_cairo_ft_font_face_create", 2); private static var lime_cairo_image_surface_create = CFFI.load("lime", "lime_cairo_image_surface_create", 3); private static var lime_cairo_image_surface_create_for_data = CFFI.load("lime", "lime_cairo_image_surface_create_for_data", 5); private static var lime_cairo_image_surface_get_data = CFFI.load("lime", "lime_cairo_image_surface_get_data", 1); private static var lime_cairo_image_surface_get_format = CFFI.load("lime", "lime_cairo_image_surface_get_format", 1); private static var lime_cairo_image_surface_get_height = CFFI.load("lime", "lime_cairo_image_surface_get_height", 1); private static var lime_cairo_image_surface_get_stride = CFFI.load("lime", "lime_cairo_image_surface_get_stride", 1); private static var lime_cairo_image_surface_get_width = CFFI.load("lime", "lime_cairo_image_surface_get_width", 1); private static var lime_cairo_pattern_add_color_stop_rgb = CFFI.load("lime", "lime_cairo_pattern_add_color_stop_rgb", 5); private static var lime_cairo_pattern_add_color_stop_rgba = CFFI.load("lime", "lime_cairo_pattern_add_color_stop_rgba", -1); private static var lime_cairo_pattern_create_for_surface = CFFI.load("lime", "lime_cairo_pattern_create_for_surface", 1); private static var lime_cairo_pattern_create_linear = CFFI.load("lime", "lime_cairo_pattern_create_linear", 4); private static var lime_cairo_pattern_create_radial = CFFI.load("lime", "lime_cairo_pattern_create_radial", -1); private static var lime_cairo_pattern_create_rgb = CFFI.load("lime", "lime_cairo_pattern_create_rgb", 3); private static var lime_cairo_pattern_create_rgba = CFFI.load("lime", "lime_cairo_pattern_create_rgba", 4); private static var lime_cairo_pattern_get_color_stop_count = CFFI.load("lime", "lime_cairo_pattern_get_color_stop_count", 1); private static var lime_cairo_pattern_get_extend = CFFI.load("lime", "lime_cairo_pattern_get_extend", 1); private static var lime_cairo_pattern_get_filter = CFFI.load("lime", "lime_cairo_pattern_get_filter", 1); private static var lime_cairo_pattern_get_matrix = CFFI.load("lime", "lime_cairo_pattern_get_matrix", 1); private static var lime_cairo_pattern_set_extend = CFFI.load("lime", "lime_cairo_pattern_set_extend", 2); private static var lime_cairo_pattern_set_filter = CFFI.load("lime", "lime_cairo_pattern_set_filter", 2); private static var lime_cairo_pattern_set_matrix = CFFI.load("lime", "lime_cairo_pattern_set_matrix", 2); private static var lime_cairo_surface_flush = CFFI.load("lime", "lime_cairo_surface_flush", 1); #end #if hl @:hlNative("lime", "hl_cairo_arc") private static function lime_cairo_arc(handle:CFFIPointer, xc:Float, yc:Float, radius:Float, angle1:Float, angle2:Float):Void {} @:hlNative("lime", "hl_cairo_arc_negative") private static function lime_cairo_arc_negative(handle:CFFIPointer, xc:Float, yc:Float, radius:Float, angle1:Float, angle2:Float):Void {} @:hlNative("lime", "hl_cairo_clip") private static function lime_cairo_clip(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_clip_preserve") private static function lime_cairo_clip_preserve(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_clip_extents") private static function lime_cairo_clip_extents(handle:CFFIPointer, x1:Float, y1:Float, x2:Float, y2:Float):Void {} @:hlNative("lime", "hl_cairo_close_path") private static function lime_cairo_close_path(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_copy_page") private static function lime_cairo_copy_page(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_create") private static function lime_cairo_create(handle:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_curve_to") private static function lime_cairo_curve_to(handle:CFFIPointer, x1:Float, y1:Float, x2:Float, y2:Float, x3:Float, y3:Float):Void {} @:hlNative("lime", "hl_cairo_fill") private static function lime_cairo_fill(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_fill_extents") private static function lime_cairo_fill_extents(handle:CFFIPointer, x1:Float, y1:Float, x2:Float, y2:Float):Void {} @:hlNative("lime", "hl_cairo_fill_preserve") private static function lime_cairo_fill_preserve(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_get_antialias") private static function lime_cairo_get_antialias(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_get_current_point") private static function lime_cairo_get_current_point(handle:CFFIPointer, out:Vector2):Vector2 { return null; } @:hlNative("lime", "hl_cairo_get_dash") private static function lime_cairo_get_dash(handle:CFFIPointer):hl.NativeArray { return null; } @:hlNative("lime", "hl_cairo_get_dash_count") private static function lime_cairo_get_dash_count(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_get_fill_rule") private static function lime_cairo_get_fill_rule(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_get_font_face") private static function lime_cairo_get_font_face(handle:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_get_font_options") private static function lime_cairo_get_font_options(handle:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_get_group_target") private static function lime_cairo_get_group_target(handle:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_get_line_cap") private static function lime_cairo_get_line_cap(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_get_line_join") private static function lime_cairo_get_line_join(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_get_line_width") private static function lime_cairo_get_line_width(handle:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_cairo_get_matrix") private static function lime_cairo_get_matrix(handle:CFFIPointer, out:CairoMatrix3):CairoMatrix3 { return null; } @:hlNative("lime", "hl_cairo_get_miter_limit") private static function lime_cairo_get_miter_limit(handle:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_cairo_get_operator") private static function lime_cairo_get_operator(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_get_source") private static function lime_cairo_get_source(handle:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_get_target") private static function lime_cairo_get_target(handle:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_get_tolerance") private static function lime_cairo_get_tolerance(handle:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_cairo_has_current_point") private static function lime_cairo_has_current_point(handle:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_cairo_identity_matrix") private static function lime_cairo_identity_matrix(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_in_clip") private static function lime_cairo_in_clip(handle:CFFIPointer, x:Float, y:Float):Bool { return false; } @:hlNative("lime", "hl_cairo_in_fill") private static function lime_cairo_in_fill(handle:CFFIPointer, x:Float, y:Float):Bool { return false; } @:hlNative("lime", "hl_cairo_in_stroke") private static function lime_cairo_in_stroke(handle:CFFIPointer, x:Float, y:Float):Bool { return false; } @:hlNative("lime", "hl_cairo_line_to") private static function lime_cairo_line_to(handle:CFFIPointer, x:Float, y:Float):Void {} @:hlNative("lime", "hl_cairo_mask") private static function lime_cairo_mask(handle:CFFIPointer, pattern:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_mask_surface") private static function lime_cairo_mask_surface(handle:CFFIPointer, surface:CFFIPointer, x:Float, y:Float):Void {} @:hlNative("lime", "hl_cairo_move_to") private static function lime_cairo_move_to(handle:CFFIPointer, x:Float, y:Float):Void {} @:hlNative("lime", "hl_cairo_new_path") private static function lime_cairo_new_path(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_paint") private static function lime_cairo_paint(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_paint_with_alpha") private static function lime_cairo_paint_with_alpha(handle:CFFIPointer, alpha:Float):Void {} @:hlNative("lime", "hl_cairo_pop_group") private static function lime_cairo_pop_group(handle:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_pop_group_to_source") private static function lime_cairo_pop_group_to_source(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_push_group") private static function lime_cairo_push_group(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_push_group_with_content") private static function lime_cairo_push_group_with_content(handle:CFFIPointer, content:Int):Void {} @:hlNative("lime", "hl_cairo_rectangle") private static function lime_cairo_rectangle(handle:CFFIPointer, x:Float, y:Float, width:Float, height:Float):Void {} @:hlNative("lime", "hl_cairo_rel_curve_to") private static function lime_cairo_rel_curve_to(handle:CFFIPointer, dx1:Float, dy1:Float, dx2:Float, dy2:Float, dx3:Float, dy3:Float):Void {} @:hlNative("lime", "hl_cairo_rel_line_to") private static function lime_cairo_rel_line_to(handle:CFFIPointer, dx:Float, dy:Float):Void {} @:hlNative("lime", "hl_cairo_rel_move_to") private static function lime_cairo_rel_move_to(handle:CFFIPointer, dx:Float, dy:Float):Void {} @:hlNative("lime", "hl_cairo_reset_clip") private static function lime_cairo_reset_clip(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_restore") private static function lime_cairo_restore(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_rotate") private static function lime_cairo_rotate(handle:CFFIPointer, amount:Float):Void {} @:hlNative("lime", "hl_cairo_save") private static function lime_cairo_save(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_scale") private static function lime_cairo_scale(handle:CFFIPointer, x:Float, y:Float):Void {} @:hlNative("lime", "hl_cairo_set_antialias") private static function lime_cairo_set_antialias(handle:CFFIPointer, cap:Int):Void {} @:hlNative("lime", "hl_cairo_set_dash") private static function lime_cairo_set_dash(handle:CFFIPointer, dash:hl.NativeArray):Void {} @:hlNative("lime", "hl_cairo_set_fill_rule") private static function lime_cairo_set_fill_rule(handle:CFFIPointer, cap:Int):Void {} @:hlNative("lime", "hl_cairo_set_font_face") private static function lime_cairo_set_font_face(handle:CFFIPointer, face:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_set_font_options") private static function lime_cairo_set_font_options(handle:CFFIPointer, options:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_set_font_size") private static function lime_cairo_set_font_size(handle:CFFIPointer, size:Float):Void {} @:hlNative("lime", "hl_cairo_set_line_cap") private static function lime_cairo_set_line_cap(handle:CFFIPointer, cap:Int):Void {} @:hlNative("lime", "hl_cairo_set_line_join") private static function lime_cairo_set_line_join(handle:CFFIPointer, join:Int):Void {} @:hlNative("lime", "hl_cairo_set_line_width") private static function lime_cairo_set_line_width(handle:CFFIPointer, width:Float):Void {} @:hlNative("lime", "hl_cairo_set_matrix") private static function lime_cairo_set_matrix(handle:CFFIPointer, matrix:CairoMatrix3):Void {} @:hlNative("lime", "hl_cairo_set_miter_limit") private static function lime_cairo_set_miter_limit(handle:CFFIPointer, miterLimit:Float):Void {} @:hlNative("lime", "hl_cairo_set_operator") private static function lime_cairo_set_operator(handle:CFFIPointer, op:Int):Void {} @:hlNative("lime", "hl_cairo_set_source") private static function lime_cairo_set_source(handle:CFFIPointer, pattern:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_set_source_rgb") private static function lime_cairo_set_source_rgb(handle:CFFIPointer, r:Float, g:Float, b:Float):Void {} @:hlNative("lime", "hl_cairo_set_source_rgba") private static function lime_cairo_set_source_rgba(handle:CFFIPointer, r:Float, g:Float, b:Float, a:Float):Void {} @:hlNative("lime", "hl_cairo_set_source_surface") private static function lime_cairo_set_source_surface(handle:CFFIPointer, surface:CFFIPointer, x:Float, y:Float):Void {} @:hlNative("lime", "hl_cairo_set_tolerance") private static function lime_cairo_set_tolerance(handle:CFFIPointer, tolerance:Float):Void {} @:hlNative("lime", "hl_cairo_show_glyphs") private static function lime_cairo_show_glyphs(handle:CFFIPointer, glyphs:hl.NativeArray):Void {} @:hlNative("lime", "hl_cairo_show_page") private static function lime_cairo_show_page(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_show_text") private static function lime_cairo_show_text(handle:CFFIPointer, text:String):Void {} @:hlNative("lime", "hl_cairo_status") private static function lime_cairo_status(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_stroke") private static function lime_cairo_stroke(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_stroke_extents") private static function lime_cairo_stroke_extents(handle:CFFIPointer, x1:Float, y1:Float, x2:Float, y2:Float):Void {} @:hlNative("lime", "hl_cairo_stroke_preserve") private static function lime_cairo_stroke_preserve(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_cairo_text_path") private static function lime_cairo_text_path(handle:CFFIPointer, text:String):Void {} @:hlNative("lime", "hl_cairo_transform") private static function lime_cairo_transform(handle:CFFIPointer, matrix:CairoMatrix3):Void {} @:hlNative("lime", "hl_cairo_translate") private static function lime_cairo_translate(handle:CFFIPointer, x:Float, y:Float):Void {} @:hlNative("lime", "hl_cairo_version") private static function lime_cairo_version():Int { return 0; } @:hlNative("lime", "hl_cairo_version_string") private static function lime_cairo_version_string():hl.Bytes { return null; } @:hlNative("lime", "hl_cairo_font_face_status") private static function lime_cairo_font_face_status(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_font_options_create") private static function lime_cairo_font_options_create():CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_font_options_get_antialias") private static function lime_cairo_font_options_get_antialias(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_font_options_get_hint_metrics") private static function lime_cairo_font_options_get_hint_metrics(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_font_options_get_hint_style") private static function lime_cairo_font_options_get_hint_style(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_font_options_get_subpixel_order") private static function lime_cairo_font_options_get_subpixel_order(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_font_options_set_antialias") private static function lime_cairo_font_options_set_antialias(handle:CFFIPointer, v:Int):Void {} @:hlNative("lime", "hl_cairo_font_options_set_hint_metrics") private static function lime_cairo_font_options_set_hint_metrics(handle:CFFIPointer, v:Int):Void {} @:hlNative("lime", "hl_cairo_font_options_set_hint_style") private static function lime_cairo_font_options_set_hint_style(handle:CFFIPointer, v:Int):Void {} @:hlNative("lime", "hl_cairo_font_options_set_subpixel_order") private static function lime_cairo_font_options_set_subpixel_order(handle:CFFIPointer, v:Int):Void {} @:hlNative("lime", "hl_cairo_ft_font_face_create") private static function lime_cairo_ft_font_face_create(face:CFFIPointer, flags:Int):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_image_surface_create") private static function lime_cairo_image_surface_create(format:Int, width:Int, height:Int):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_image_surface_create_for_data") private static function lime_cairo_image_surface_create_for_data(data:Float, format:Int, width:Int, height:Int, stride:Int):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_image_surface_get_data") private static function lime_cairo_image_surface_get_data(handle:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_cairo_image_surface_get_format") private static function lime_cairo_image_surface_get_format(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_image_surface_get_height") private static function lime_cairo_image_surface_get_height(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_image_surface_get_stride") private static function lime_cairo_image_surface_get_stride(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_image_surface_get_width") private static function lime_cairo_image_surface_get_width(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_pattern_add_color_stop_rgb") private static function lime_cairo_pattern_add_color_stop_rgb(handle:CFFIPointer, offset:Float, red:Float, green:Float, blue:Float):Void {} @:hlNative("lime", "hl_cairo_pattern_add_color_stop_rgba") private static function lime_cairo_pattern_add_color_stop_rgba(handle:CFFIPointer, offset:Float, red:Float, green:Float, blue:Float, alpha:Float):Void {} @:hlNative("lime", "hl_cairo_pattern_create_for_surface") private static function lime_cairo_pattern_create_for_surface(surface:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_pattern_create_linear") private static function lime_cairo_pattern_create_linear(x0:Float, y0:Float, x1:Float, y1:Float):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_pattern_create_radial") private static function lime_cairo_pattern_create_radial(cx0:Float, cy0:Float, radius0:Float, cx1:Float, cy1:Float, radius1:Float):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_pattern_create_rgb") private static function lime_cairo_pattern_create_rgb(r:Float, g:Float, b:Float):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_pattern_create_rgba") private static function lime_cairo_pattern_create_rgba(r:Float, g:Float, b:Float, a:Float):CFFIPointer { return null; } @:hlNative("lime", "hl_cairo_pattern_get_color_stop_count") private static function lime_cairo_pattern_get_color_stop_count(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_pattern_get_extend") private static function lime_cairo_pattern_get_extend(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_pattern_get_filter") private static function lime_cairo_pattern_get_filter(handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_cairo_pattern_get_matrix") private static function lime_cairo_pattern_get_matrix(handle:CFFIPointer, out:CairoMatrix3):CairoMatrix3 { return null; } @:hlNative("lime", "hl_cairo_pattern_set_extend") private static function lime_cairo_pattern_set_extend(handle:CFFIPointer, extend:Int):Void {} @:hlNative("lime", "hl_cairo_pattern_set_filter") private static function lime_cairo_pattern_set_filter(handle:CFFIPointer, filter:Int):Void {} @:hlNative("lime", "hl_cairo_pattern_set_matrix") private static function lime_cairo_pattern_set_matrix(handle:CFFIPointer, matrix:CairoMatrix3):Void {} @:hlNative("lime", "hl_cairo_surface_flush") private static function lime_cairo_surface_flush(surface:CFFIPointer):Void {} #end #end #if (lime_cffi && !macro && lime_curl) #if (cpp && !cppia) #if (disable_cffi || haxe_ver < "3.4.0") @:cffi private static function lime_curl_getdate(date:String, now:Float):Float; @:cffi private static function lime_curl_global_cleanup():Void; @:cffi private static function lime_curl_global_init(flags:Int):Int; @:cffi private static function lime_curl_version():Dynamic; @:cffi private static function lime_curl_version_info(type:Int):Dynamic; @:cffi private static function lime_curl_easy_cleanup(handle:CFFIPointer):Void; @:cffi private static function lime_curl_easy_duphandle(handle:CFFIPointer):CFFIPointer; @:cffi private static function lime_curl_easy_escape(curl:CFFIPointer, url:String, length:Int):Dynamic; @:cffi private static function lime_curl_easy_flush(curl:CFFIPointer):Void; @:cffi private static function lime_curl_easy_getinfo(curl:CFFIPointer, info:Int):Dynamic; @:cffi private static function lime_curl_easy_init():CFFIPointer; @:cffi private static function lime_curl_easy_pause(handle:CFFIPointer, bitmask:Int):Int; @:cffi private static function lime_curl_easy_perform(easy_handle:CFFIPointer):Int; @:cffi private static function lime_curl_easy_recv(curl:CFFIPointer, buffer:Dynamic, buflen:Int, n:Int):Int; @:cffi private static function lime_curl_easy_reset(curl:CFFIPointer):Void; @:cffi private static function lime_curl_easy_send(curl:CFFIPointer, buffer:Dynamic, buflen:Int, n:Int):Int; @:cffi private static function lime_curl_easy_setopt(handle:CFFIPointer, option:Int, parameter:Dynamic, writeBytes:Dynamic):Int; @:cffi private static function lime_curl_easy_strerror(errornum:Int):Dynamic; @:cffi private static function lime_curl_easy_unescape(curl:CFFIPointer, url:String, inlength:Int, outlength:Int):Dynamic; @:cffi private static function lime_curl_multi_init():CFFIPointer; @:cffi private static function lime_curl_multi_add_handle(multi_handle:CFFIPointer, curl_object:Dynamic, curl_handle:CFFIPointer):Int; @:cffi private static function lime_curl_multi_get_running_handles(multi_handle:CFFIPointer):Int; @:cffi private static function lime_curl_multi_info_read(multi_handle:CFFIPointer):Dynamic; @:cffi private static function lime_curl_multi_perform(multi_handle:CFFIPointer):Int; @:cffi private static function lime_curl_multi_remove_handle(multi_handle:CFFIPointer, curl_handle:CFFIPointer):Int; @:cffi private static function lime_curl_multi_setopt(multi_handle:CFFIPointer, option:Int, parameter:Dynamic):Int; @:cffi private static function lime_curl_multi_wait(multi_handle:CFFIPointer, timeout_ms:Int):Int; #else private static var lime_curl_getdate = new cpp.CallableFloat->Float>(cpp.Prime._loadPrime("lime", "lime_curl_getdate", "sdd", false)); private static var lime_curl_global_cleanup = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_curl_global_cleanup", "v", false)); private static var lime_curl_global_init = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_curl_global_init", "ii", false)); private static var lime_curl_version = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_version", "o", false)); private static var lime_curl_version_info = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_version_info", "io", false)); private static var lime_curl_easy_cleanup = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_curl_easy_cleanup", "ov", false)); private static var lime_curl_easy_duphandle = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_easy_duphandle", "oo", false)); private static var lime_curl_easy_escape = new cpp.CallableString->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_easy_escape", "osio", false)); private static var lime_curl_easy_flush = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_curl_easy_flush", "ov", false)); private static var lime_curl_easy_getinfo = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_easy_getinfo", "oio", false)); private static var lime_curl_easy_init = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_easy_init", "o", false)); private static var lime_curl_easy_pause = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_curl_easy_pause", "oii", false)); private static var lime_curl_easy_perform = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_curl_easy_perform", "oi", false)); private static var lime_curl_easy_recv = new cpp.Callablecpp.Object->Int->Int->Int>(cpp.Prime._loadPrime("lime", "lime_curl_easy_recv", "ooiii", false)); private static var lime_curl_easy_reset = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_curl_easy_reset", "ov", false)); private static var lime_curl_easy_send = new cpp.Callablecpp.Object->Int->Int->Int>(cpp.Prime._loadPrime("lime", "lime_curl_easy_send", "ooiii", false)); private static var lime_curl_easy_setopt = new cpp.CallableInt->cpp.Object->cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_curl_easy_setopt", "oiooi", false)); private static var lime_curl_easy_strerror = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_easy_strerror", "io", false)); private static var lime_curl_easy_unescape = new cpp.CallableString->Int->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_easy_unescape", "osiio", false)); private static var lime_curl_multi_init = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_multi_init", "o", false)); private static var lime_curl_multi_add_handle = new cpp.Callablecpp.Object->cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_curl_multi_add_handle", "oooi", false)); private static var lime_curl_multi_get_running_handles = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_curl_multi_get_running_handles", "oi", false)); private static var lime_curl_multi_info_read = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_curl_multi_info_read", "oo", false)); private static var lime_curl_multi_perform = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_curl_multi_perform", "oi", false)); private static var lime_curl_multi_remove_handle = new cpp.Callablecpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_curl_multi_remove_handle", "ooi", false)); private static var lime_curl_multi_setopt = new cpp.CallableInt->cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_curl_multi_setopt", "oioi", false)); private static var lime_curl_multi_wait = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_curl_multi_wait", "oii", false)); #end #end #if (neko || cppia) private static var lime_curl_getdate = CFFI.load("lime", "lime_curl_getdate", 2); private static var lime_curl_global_cleanup = CFFI.load("lime", "lime_curl_global_cleanup", 0); private static var lime_curl_global_init = CFFI.load("lime", "lime_curl_global_init", 1); private static var lime_curl_version = CFFI.load("lime", "lime_curl_version", 0); private static var lime_curl_version_info = CFFI.load("lime", "lime_curl_version_info", 1); private static var lime_curl_easy_cleanup = CFFI.load("lime", "lime_curl_easy_cleanup", 1); private static var lime_curl_easy_duphandle = CFFI.load("lime", "lime_curl_easy_duphandle", 1); private static var lime_curl_easy_escape = CFFI.load("lime", "lime_curl_easy_escape", 3); private static var lime_curl_easy_flush = CFFI.load("lime", "lime_curl_easy_flush", 1); private static var lime_curl_easy_getinfo = CFFI.load("lime", "lime_curl_easy_getinfo", 2); private static var lime_curl_easy_init = CFFI.load("lime", "lime_curl_easy_init", 0); private static var lime_curl_easy_pause = CFFI.load("lime", "lime_curl_easy_pause", 2); private static var lime_curl_easy_perform = CFFI.load("lime", "lime_curl_easy_perform", 1); private static var lime_curl_easy_recv = CFFI.load("lime", "lime_curl_easy_recv", 4); private static var lime_curl_easy_reset = CFFI.load("lime", "lime_curl_easy_reset", 1); private static var lime_curl_easy_send = CFFI.load("lime", "lime_curl_easy_send", 4); private static var lime_curl_easy_setopt = CFFI.load("lime", "lime_curl_easy_setopt", 4); private static var lime_curl_easy_strerror = CFFI.load("lime", "lime_curl_easy_strerror", 1); private static var lime_curl_easy_unescape = CFFI.load("lime", "lime_curl_easy_unescape", 4); private static var lime_curl_multi_init = CFFI.load("lime", "lime_curl_multi_init", 0); private static var lime_curl_multi_add_handle = CFFI.load("lime", "lime_curl_multi_add_handle", 3); private static var lime_curl_multi_get_running_handles = CFFI.load("lime", "lime_curl_multi_get_running_handles", 1); private static var lime_curl_multi_info_read = CFFI.load("lime", "lime_curl_multi_info_read", 1); private static var lime_curl_multi_perform = CFFI.load("lime", "lime_curl_multi_perform", 1); private static var lime_curl_multi_remove_handle = CFFI.load("lime", "lime_curl_multi_remove_handle", 2); private static var lime_curl_multi_setopt = CFFI.load("lime", "lime_curl_multi_setopt", 3); private static var lime_curl_multi_wait = CFFI.load("lime", "lime_curl_multi_wait", 2); #end #if hl @:hlNative("lime", "hl_curl_getdate") private static function lime_curl_getdate(date:String, now:Float):Float { return 0; } @:hlNative("lime", "hl_curl_global_cleanup") private static function lime_curl_global_cleanup():Void {} @:hlNative("lime", "hl_curl_global_init") private static function lime_curl_global_init(flags:Int):Int { return 0; } @:hlNative("lime", "hl_curl_version") private static function lime_curl_version():hl.Bytes { return null; } @:hlNative("lime", "hl_curl_version_info") private static function lime_curl_version_info(type:Int):Dynamic { return null; } @:hlNative("lime", "hl_curl_easy_cleanup") private static function lime_curl_easy_cleanup(handle:CFFIPointer):Void {} @:hlNative("lime", "hl_curl_easy_duphandle") private static function lime_curl_easy_duphandle(handle:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_curl_easy_escape") private static function lime_curl_easy_escape(curl:CFFIPointer, url:String, length:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_curl_easy_flush") private static function lime_curl_easy_flush(curl:CFFIPointer):Void {} @:hlNative("lime", "hl_curl_easy_getinfo") private static function lime_curl_easy_getinfo(curl:CFFIPointer, info:Int):Dynamic { return null; } @:hlNative("lime", "hl_curl_easy_init") private static function lime_curl_easy_init():CFFIPointer { return null; } @:hlNative("lime", "hl_curl_easy_pause") private static function lime_curl_easy_pause(handle:CFFIPointer, bitmask:Int):Int { return 0; } @:hlNative("lime", "hl_curl_easy_perform") private static function lime_curl_easy_perform(easy_handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_curl_easy_recv") private static function lime_curl_easy_recv(curl:CFFIPointer, buffer:Float, buflen:Int, n:Int):Int { return 0; }; @:hlNative("lime", "hl_curl_easy_reset") private static function lime_curl_easy_reset(curl:CFFIPointer):Void {} @:hlNative("lime", "hl_curl_easy_send") private static function lime_curl_easy_send(curl:CFFIPointer, buffer:Float, buflen:Int, n:Int):Int { return 0; } @:hlNative("lime", "hl_curl_easy_setopt") private static function lime_curl_easy_setopt(handle:CFFIPointer, option:Int, parameter:Dynamic, writeBytes:Bytes):Int { return 0; } @:hlNative("lime", "hl_curl_easy_strerror") private static function lime_curl_easy_strerror(errornum:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_curl_easy_unescape") private static function lime_curl_easy_unescape(curl:CFFIPointer, url:String, inlength:Int, outlength:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_curl_multi_init") private static function lime_curl_multi_init():CFFIPointer { return null; } @:hlNative("lime", "hl_curl_multi_add_handle") private static function lime_curl_multi_add_handle(multi_handle:CFFIPointer, curl_object:Dynamic, curl_handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_curl_multi_get_running_handles") private static function lime_curl_multi_get_running_handles(multi_handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_curl_multi_info_read") private static function lime_curl_multi_info_read(multi_handle:CFFIPointer, object:Dynamic):Dynamic { return null; } @:hlNative("lime", "hl_curl_multi_perform") private static function lime_curl_multi_perform(multi_handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_curl_multi_remove_handle") private static function lime_curl_multi_remove_handle(multi_handle:CFFIPointer, curl_handle:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_curl_multi_setopt") private static function lime_curl_multi_setopt(multi_handle:CFFIPointer, option:Int, parameter:Dynamic):Int { return 0; } @:hlNative("lime", "hl_curl_multi_wait") private static function lime_curl_multi_wait(multi_handle:CFFIPointer, timeout_ms:Int):Int { return 0; } #end #end #if (lime_cffi && !macro && (lime_opengl || lime_opengles)) #if (cpp && !cppia) #if (disable_cffi || haxe_ver < "3.4.0") @:cffi private static function lime_gl_active_texture(texture:Int):Void; @:cffi private static function lime_gl_attach_shader(program:Int, shader:Int):Void; @:cffi private static function lime_gl_begin_query(target:Int, query:Int):Void; @:cffi private static function lime_gl_begin_transform_feedback(primitiveNode:Int):Void; @:cffi private static function lime_gl_bind_attrib_location(program:Int, index:Int, name:String):Void; @:cffi private static function lime_gl_bind_buffer(target:Int, buffer:Int):Void; @:cffi private static function lime_gl_bind_buffer_base(target:Int, index:Int, buffer:Int):Void; @:cffi private static function lime_gl_bind_buffer_range(target:Int, index:Int, buffer:Int, offset:DataPointer, size:Int):Void; @:cffi private static function lime_gl_bind_framebuffer(target:Int, framebuffer:Int):Void; @:cffi private static function lime_gl_bind_renderbuffer(target:Int, renderbuffer:Int):Void; @:cffi private static function lime_gl_bind_sampler(target:Int, sampler:Int):Void; @:cffi private static function lime_gl_bind_texture(target:Int, texture:Int):Void; @:cffi private static function lime_gl_bind_transform_feedback(target:Int, transformFeedback:Int):Void; @:cffi private static function lime_gl_bind_vertex_array(vertexArray:Int):Void; @:cffi private static function lime_gl_blend_color(red:Float32, green:Float32, blue:Float32, alpha:Float32):Void; @:cffi private static function lime_gl_blend_equation(mode:Int):Void; @:cffi private static function lime_gl_blend_equation_separate(modeRGB:Int, modeAlpha:Int):Void; @:cffi private static function lime_gl_blend_func(sfactor:Int, dfactor:Int):Void; @:cffi private static function lime_gl_blend_func_separate(srcRGB:Int, dstRGB:Int, srcAlpha:Int, dstAlpha:Int):Void; @:cffi private static function lime_gl_blit_framebuffer(srcX0:Int, srcY0:Int, srcX1:Int, srcY1:Int, dstX0:Int, dstY0:Int, dstX1:Int, dstY1:Int, mask:Int, filter:Int):Void; @:cffi private static function lime_gl_buffer_data(target:Int, size:Int, srcData:DataPointer, usage:Int):Void; @:cffi private static function lime_gl_buffer_sub_data(target:Int, offset:Int, size:Int, srcData:DataPointer):Void; @:cffi private static function lime_gl_check_framebuffer_status(target:Int):Int; @:cffi private static function lime_gl_clear(mask:Int):Void; @:cffi private static function lime_gl_clear_bufferfi(buffer:Int, drawBuffer:Int, depth:Float32, stencil:Int):Void; @:cffi private static function lime_gl_clear_bufferfv(buffer:Int, drawBuffer:Int, data:DataPointer):Void; @:cffi private static function lime_gl_clear_bufferiv(buffer:Int, drawBuffer:Int, data:DataPointer):Void; @:cffi private static function lime_gl_clear_bufferuiv(buffer:Int, drawBuffer:Int, data:DataPointer):Void; @:cffi private static function lime_gl_client_wait_sync(sync:CFFIPointer, flags:Int, timeoutA:Int, timeoutB:Int):Int; @:cffi private static function lime_gl_clear_color(red:Float32, green:Float32, blue:Float32, alpha:Float32):Void; @:cffi private static function lime_gl_clear_depthf(depth:Float32):Void; @:cffi private static function lime_gl_clear_stencil(s:Int):Void; @:cffi private static function lime_gl_color_mask(red:Bool, green:Bool, blue:Bool, alpha:Bool):Void; @:cffi private static function lime_gl_compile_shader(shader:Int):Void; @:cffi private static function lime_gl_compressed_tex_image_2d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, imageSize:Int, data:DataPointer):Void; @:cffi private static function lime_gl_compressed_tex_image_3d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, imageSize:Int, data:DataPointer):Void; @:cffi private static function lime_gl_compressed_tex_sub_image_2d(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, imageSize:Int, data:DataPointer):Void; @:cffi private static function lime_gl_compressed_tex_sub_image_3d(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, imageSize:Int, data:DataPointer):Void; @:cffi private static function lime_gl_copy_buffer_sub_data(readTarget:Int, writeTarget:Int, readOffset:DataPointer, writeOffset:DataPointer, size:Int):Void; @:cffi private static function lime_gl_copy_tex_image_2d(target:Int, level:Int, internalformat:Int, x:Int, y:Int, width:Int, height:Int, border:Int):Void; @:cffi private static function lime_gl_copy_tex_sub_image_2d(target:Int, level:Int, xoffset:Int, yoffset:Int, x:Int, y:Int, width:Int, height:Int):Void; @:cffi private static function lime_gl_copy_tex_sub_image_3d(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, x:Int, y:Int, width:Int, height:Int):Void; @:cffi private static function lime_gl_create_buffer():Int; @:cffi private static function lime_gl_create_framebuffer():Int; @:cffi private static function lime_gl_create_program():Int; @:cffi private static function lime_gl_create_query():Int; @:cffi private static function lime_gl_create_renderbuffer():Int; @:cffi private static function lime_gl_create_sampler():Int; @:cffi private static function lime_gl_create_shader(type:Int):Int; @:cffi private static function lime_gl_create_texture():Int; @:cffi private static function lime_gl_create_transform_feedback():Int; @:cffi private static function lime_gl_create_vertex_array():Int; @:cffi private static function lime_gl_cull_face(mode:Int):Void; @:cffi private static function lime_gl_delete_buffer(buffer:Int):Void; @:cffi private static function lime_gl_delete_framebuffer(framebuffer:Int):Void; @:cffi private static function lime_gl_delete_program(program:Int):Void; @:cffi private static function lime_gl_delete_query(query:Int):Void; @:cffi private static function lime_gl_delete_renderbuffer(renderbuffer:Int):Void; @:cffi private static function lime_gl_delete_sampler(sampler:Int):Void; @:cffi private static function lime_gl_delete_shader(shader:Int):Void; @:cffi private static function lime_gl_delete_sync(sync:CFFIPointer):Void; @:cffi private static function lime_gl_delete_texture(texture:Int):Void; @:cffi private static function lime_gl_delete_transform_feedback(transformFeedback:Int):Void; @:cffi private static function lime_gl_delete_vertex_array(vertexArray:Int):Void; @:cffi private static function lime_gl_depth_func(func:Int):Void; @:cffi private static function lime_gl_depth_mask(flag:Bool):Void; @:cffi private static function lime_gl_depth_rangef(zNear:Float32, zFar:Float32):Void; @:cffi private static function lime_gl_detach_shader(program:Int, shader:Int):Void; @:cffi private static function lime_gl_disable(cap:Int):Void; @:cffi private static function lime_gl_disable_vertex_attrib_array(index:Int):Void; @:cffi private static function lime_gl_draw_arrays(mode:Int, first:Int, count:Int):Void; @:cffi private static function lime_gl_draw_arrays_instanced(mode:Int, first:Int, count:Int, instanceCount:Int):Void; @:cffi private static function lime_gl_draw_buffers(buffers:Dynamic):Void; @:cffi private static function lime_gl_draw_elements(mode:Int, count:Int, type:Int, offset:DataPointer):Void; @:cffi private static function lime_gl_draw_elements_instanced(mode:Int, count:Int, type:Int, offset:DataPointer, instanceCount:Int):Void; @:cffi private static function lime_gl_draw_range_elements(mode:Int, start:Int, end:Int, count:Int, type:Int, offset:DataPointer):Void; @:cffi private static function lime_gl_enable(cap:Int):Void; @:cffi private static function lime_gl_enable_vertex_attrib_array(index:Int):Void; @:cffi private static function lime_gl_end_query(target:Int):Void; @:cffi private static function lime_gl_end_transform_feedback():Void; @:cffi private static function lime_gl_fence_sync(condition:Int, flags:Int):CFFIPointer; @:cffi private static function lime_gl_finish():Void; @:cffi private static function lime_gl_flush():Void; @:cffi private static function lime_gl_framebuffer_renderbuffer(target:Int, attachment:Int, renderbuffertarget:Int, renderbuffer:Int):Void; @:cffi private static function lime_gl_framebuffer_texture2D(target:Int, attachment:Int, textarget:Int, texture:Int, level:Int):Void; @:cffi private static function lime_gl_framebuffer_texture_layer(target:Int, attachment:Int, texture:Int, level:Int, layer:Int):Void; @:cffi private static function lime_gl_front_face(mode:Int):Void; @:cffi private static function lime_gl_generate_mipmap(target:Int):Void; @:cffi private static function lime_gl_get_active_attrib(program:Int, index:Int):Dynamic; @:cffi private static function lime_gl_get_active_uniform(program:Int, index:Int):Dynamic; @:cffi private static function lime_gl_get_active_uniform_blocki(program:Int, uniformBlockIndex:Int, pname:Int):Int; @:cffi private static function lime_gl_get_active_uniform_blockiv(program:Int, uniformBlockIndex:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_active_uniform_block_name(program:Int, uniformBlockIndex:Int):Dynamic; @:cffi private static function lime_gl_get_active_uniformsiv(program:Int, uniformIndices:Dynamic, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_attached_shaders(program:Int):Dynamic; @:cffi private static function lime_gl_get_attrib_location(program:Int, name:String):Int; @:cffi private static function lime_gl_get_boolean(pname:Int):Bool; @:cffi private static function lime_gl_get_booleanv(pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_buffer_parameteri(target:Int, pname:Int):Int; @:cffi private static function lime_gl_get_buffer_parameteri64v(target:Int, index:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_buffer_parameteriv(target:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_buffer_pointerv(target:Int, pname:Int):DataPointer; @:cffi private static function lime_gl_get_buffer_sub_data(target:Int, offset:DataPointer, size:Int, data:DataPointer):Void; @:cffi private static function lime_gl_get_context_attributes():Dynamic; @:cffi private static function lime_gl_get_error():Int; @:cffi private static function lime_gl_get_extension(name:String):Dynamic; @:cffi private static function lime_gl_get_float(pname:Int):Float32; @:cffi private static function lime_gl_get_floatv(pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_frag_data_location(program:Int, name:String):Int; @:cffi private static function lime_gl_get_framebuffer_attachment_parameteri(target:Int, attachment:Int, pname:Int):Int; @:cffi private static function lime_gl_get_framebuffer_attachment_parameteriv(target:Int, attachment:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_integer(pname:Int):Int; @:cffi private static function lime_gl_get_integer64v(pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_integer64i_v(pname:Int, index:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_integerv(pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_integeri_v(pname:Int, index:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_internalformativ(target:Int, internalformat:Int, pname:Int, bufSize:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_program_binary(program:Int, binaryFormat:Int, bytes:Dynamic):Void; @:cffi private static function lime_gl_get_program_info_log(program:Int):Dynamic; @:cffi private static function lime_gl_get_programi(program:Int, pname:Int):Int; @:cffi private static function lime_gl_get_programiv(program:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_queryi(target:Int, pname:Int):Int; @:cffi private static function lime_gl_get_queryiv(target:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_query_objectui(target:Int, pname:Int):Int; @:cffi private static function lime_gl_get_query_objectuiv(target:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_renderbuffer_parameteri(target:Int, pname:Int):Int; @:cffi private static function lime_gl_get_renderbuffer_parameteriv(target:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_sampler_parameterf(target:Int, pname:Int):Float32; @:cffi private static function lime_gl_get_sampler_parameterfv(target:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_sampler_parameteri(target:Int, pname:Int):Int; @:cffi private static function lime_gl_get_sampler_parameteriv(target:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_shader_info_log(shader:Int):Dynamic; @:cffi private static function lime_gl_get_shaderi(shader:Int, pname:Int):Int; @:cffi private static function lime_gl_get_shaderiv(shader:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_shader_precision_format(shadertype:Int, precisiontype:Int):Dynamic; @:cffi private static function lime_gl_get_shader_source(shader:Int):Dynamic; @:cffi private static function lime_gl_get_string(pname:Int):Dynamic; @:cffi private static function lime_gl_get_stringi(pname:Int, index:Int):Dynamic; @:cffi private static function lime_gl_get_sync_parameteri(sync:CFFIPointer, pname:Int):Int; @:cffi private static function lime_gl_get_sync_parameteriv(sync:CFFIPointer, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_tex_parameterf(target:Int, pname:Int):Float32; @:cffi private static function lime_gl_get_tex_parameterfv(target:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_tex_parameteri(target:Int, pname:Int):Int; @:cffi private static function lime_gl_get_tex_parameteriv(target:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_transform_feedback_varying(program:Int, index:Int):Dynamic; @:cffi private static function lime_gl_get_uniformf(program:Int, location:Int):Float32; @:cffi private static function lime_gl_get_uniformfv(program:Int, location:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_uniformi(program:Int, location:Int):Int; @:cffi private static function lime_gl_get_uniformiv(program:Int, location:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_uniformui(program:Int, location:Int):Int; @:cffi private static function lime_gl_get_uniformuiv(program:Int, location:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_uniform_block_index(program:Int, uniformBlockName:String):Int; @:cffi private static function lime_gl_get_uniform_location(program:Int, name:String):Int; @:cffi private static function lime_gl_get_vertex_attribf(index:Int, pname:Int):Float32; @:cffi private static function lime_gl_get_vertex_attribfv(index:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_vertex_attribi(index:Int, pname:Int):Int; @:cffi private static function lime_gl_get_vertex_attribiv(index:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_vertex_attribii(index:Int, pname:Int):Int; @:cffi private static function lime_gl_get_vertex_attribiiv(index:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_vertex_attribiui(index:Int, pname:Int):Int; @:cffi private static function lime_gl_get_vertex_attribiuiv(index:Int, pname:Int, params:DataPointer):Void; @:cffi private static function lime_gl_get_vertex_attrib_pointerv(index:Int, pname:Int):DataPointer; @:cffi private static function lime_gl_hint(target:Int, mode:Int):Void; @:cffi private static function lime_gl_invalidate_framebuffer(target:Int, attachments:Dynamic):Void; @:cffi private static function lime_gl_invalidate_sub_framebuffer(target:Int, attachments:Dynamic, x:Int, y:Int, width:Int, height:Int):Void; @:cffi private static function lime_gl_is_buffer(buffer:Int):Bool; @:cffi private static function lime_gl_is_enabled(cap:Int):Bool; @:cffi private static function lime_gl_is_framebuffer(framebuffer:Int):Bool; @:cffi private static function lime_gl_is_program(program:Int):Bool; @:cffi private static function lime_gl_is_query(query:Int):Bool; @:cffi private static function lime_gl_is_renderbuffer(renderbuffer:Int):Bool; @:cffi private static function lime_gl_is_sampler(sampler:Int):Bool; @:cffi private static function lime_gl_is_shader(shader:Int):Bool; @:cffi private static function lime_gl_is_sync(sync:CFFIPointer):Bool; @:cffi private static function lime_gl_is_texture(texture:Int):Bool; @:cffi private static function lime_gl_is_transform_feedback(transformFeedback:Int):Bool; @:cffi private static function lime_gl_is_vertex_array(vertexArray:Int):Bool; @:cffi private static function lime_gl_line_width(width:Float32):Void; @:cffi private static function lime_gl_link_program(program:Int):Void; @:cffi private static function lime_gl_map_buffer_range(target:Int, offset:DataPointer, length:Int, access:Int):DataPointer; @:cffi private static function lime_gl_object_deregister(object:Dynamic):Void; @:cffi private static function lime_gl_object_from_id(id:Int, type:Int):Dynamic; @:cffi private static function lime_gl_object_register(id:Int, type:Int, object:Dynamic):Dynamic; @:cffi private static function lime_gl_pause_transform_feedback():Void; @:cffi private static function lime_gl_pixel_storei(pname:Int, param:Int):Void; @:cffi private static function lime_gl_polygon_offset(factor:Float32, units:Float32):Void; @:cffi private static function lime_gl_program_binary(program:Int, binaryFormat:Int, binary:DataPointer, length:Int):Void; @:cffi private static function lime_gl_program_parameteri(program:Int, pname:Int, value:Int):Void; @:cffi private static function lime_gl_read_buffer(src:Int):Void; @:cffi private static function lime_gl_read_pixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:DataPointer):Void; @:cffi private static function lime_gl_release_shader_compiler():Void; @:cffi private static function lime_gl_renderbuffer_storage(target:Int, internalformat:Int, width:Int, height:Int):Void; @:cffi private static function lime_gl_renderbuffer_storage_multisample(target:Int, samples:Int, internalformat:Int, width:Int, height:Int):Void; @:cffi private static function lime_gl_resume_transform_feedback():Void; @:cffi private static function lime_gl_sample_coverage(value:Float32, invert:Bool):Void; @:cffi private static function lime_gl_sampler_parameterf(sampler:Int, pname:Int, param:Float32):Void; @:cffi private static function lime_gl_sampler_parameteri(sampler:Int, pname:Int, param:Int):Void; @:cffi private static function lime_gl_scissor(x:Int, y:Int, width:Int, height:Int):Void; @:cffi private static function lime_gl_shader_binary(shaders:Dynamic, binaryformat:Int, binary:DataPointer, length:Int):Void; @:cffi private static function lime_gl_shader_source(shader:Int, source:String):Void; @:cffi private static function lime_gl_stencil_func(func:Int, ref:Int, mask:Int):Void; @:cffi private static function lime_gl_stencil_func_separate(face:Int, func:Int, ref:Int, mask:Int):Void; @:cffi private static function lime_gl_stencil_mask(mask:Int):Void; @:cffi private static function lime_gl_stencil_mask_separate(face:Int, mask:Int):Void; @:cffi private static function lime_gl_stencil_op(fail:Int, zfail:Int, zpass:Int):Void; @:cffi private static function lime_gl_stencil_op_separate(face:Int, fail:Int, zfail:Int, zpass:Int):Void; @:cffi private static function lime_gl_tex_image_2d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, data:DataPointer):Void; @:cffi private static function lime_gl_tex_image_3d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, data:DataPointer):Void; @:cffi private static function lime_gl_tex_parameterf(target:Int, pname:Int, param:Float32):Void; @:cffi private static function lime_gl_tex_parameteri(target:Int, pname:Int, param:Int):Void; @:cffi private static function lime_gl_tex_storage_2d(target:Int, level:Int, internalformat:Int, width:Int, height:Int):Void; @:cffi private static function lime_gl_tex_storage_3d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int):Void; @:cffi private static function lime_gl_tex_sub_image_2d(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, data:DataPointer):Void; @:cffi private static function lime_gl_tex_sub_image_3d(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, data:DataPointer):Void; @:cffi private static function lime_gl_transform_feedback_varyings(program:Int, varyings:Dynamic, bufferMode:Int):Void; @:cffi private static function lime_gl_uniform1f(location:Int, v0:Float32):Void; @:cffi private static function lime_gl_uniform1fv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform1i(location:Int, v0:Int):Void; @:cffi private static function lime_gl_uniform1iv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform1ui(location:Int, v0:Int):Void; @:cffi private static function lime_gl_uniform1uiv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform2f(location:Int, v0:Float32, v1:Float32):Void; @:cffi private static function lime_gl_uniform2fv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform2i(location:Int, v0:Int, v1:Int):Void; @:cffi private static function lime_gl_uniform2iv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform2ui(location:Int, v0:Int, v1:Int):Void; @:cffi private static function lime_gl_uniform2uiv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform3f(location:Int, v0:Float32, v1:Float32, v2:Float32):Void; @:cffi private static function lime_gl_uniform3fv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform3i(location:Int, v0:Int, v1:Int, v2:Int):Void; @:cffi private static function lime_gl_uniform3iv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform3ui(location:Int, v0:Int, v1:Int, v2:Int):Void; @:cffi private static function lime_gl_uniform3uiv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform4f(location:Int, v0:Float32, v1:Float32, v2:Float32, v3:Float32):Void; @:cffi private static function lime_gl_uniform4fv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform4i(location:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void; @:cffi private static function lime_gl_uniform4iv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform4ui(location:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void; @:cffi private static function lime_gl_uniform4uiv(location:Int, count:Int, v:DataPointer):Void; @:cffi private static function lime_gl_uniform_block_binding(program:Int, uniformBlockIndex:Int, uniformBlockBinding:Int):Void; @:cffi private static function lime_gl_uniform_matrix2fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void; @:cffi private static function lime_gl_uniform_matrix2x3fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void; @:cffi private static function lime_gl_uniform_matrix2x4fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void; @:cffi private static function lime_gl_uniform_matrix3fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void; @:cffi private static function lime_gl_uniform_matrix3x2fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void; @:cffi private static function lime_gl_uniform_matrix3x4fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void; @:cffi private static function lime_gl_uniform_matrix4fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void; @:cffi private static function lime_gl_uniform_matrix4x2fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void; @:cffi private static function lime_gl_uniform_matrix4x3fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void; @:cffi private static function lime_gl_unmap_buffer(target:Int):Bool; @:cffi private static function lime_gl_use_program(program:Int):Void; @:cffi private static function lime_gl_validate_program(program:Int):Void; @:cffi private static function lime_gl_vertex_attrib1f(indx:Int, v0:Float32):Void; @:cffi private static function lime_gl_vertex_attrib1fv(indx:Int, values:DataPointer):Void; @:cffi private static function lime_gl_vertex_attrib2f(indx:Int, v0:Float32, v1:Float32):Void; @:cffi private static function lime_gl_vertex_attrib2fv(indx:Int, values:DataPointer):Void; @:cffi private static function lime_gl_vertex_attrib3f(indx:Int, v0:Float32, v1:Float32, v2:Float32):Void; @:cffi private static function lime_gl_vertex_attrib3fv(indx:Int, values:DataPointer):Void; @:cffi private static function lime_gl_vertex_attrib4f(indx:Int, v0:Float32, v1:Float32, v2:Float32, v3:Float32):Void; @:cffi private static function lime_gl_vertex_attrib4fv(indx:Int, values:DataPointer):Void; @:cffi private static function lime_gl_vertex_attribi4i(indx:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void; @:cffi private static function lime_gl_vertex_attribi4iv(indx:Int, values:DataPointer):Void; @:cffi private static function lime_gl_vertex_attribi4ui(indx:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void; @:cffi private static function lime_gl_vertex_attribi4uiv(indx:Int, values:DataPointer):Void; @:cffi private static function lime_gl_vertex_attrib_divisor(indx:Int, divisor:Int):Void; @:cffi private static function lime_gl_vertex_attrib_ipointer(indx:Int, size:Int, type:Int, stride:Int, offset:DataPointer):Void; @:cffi private static function lime_gl_vertex_attrib_pointer(indx:Int, size:Int, type:Int, normalized:Bool, stride:Int, offset:DataPointer):Void; @:cffi private static function lime_gl_viewport(x:Int, y:Int, width:Int, height:Int):Void; @:cffi private static function lime_gl_wait_sync(sync:CFFIPointer, flags:Int, timeoutA:Int, timeoutB:Int):Void; #else private static var lime_gl_active_texture = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_active_texture", "iv", false)); private static var lime_gl_attach_shader = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_attach_shader", "iiv", false)); private static var lime_gl_begin_query = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_begin_query", "iiv", false)); private static var lime_gl_begin_transform_feedback = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_begin_transform_feedback", "iv", false)); private static var lime_gl_bind_attrib_location = new cpp.CallableInt->String->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_attrib_location", "iisv", false)); private static var lime_gl_bind_buffer = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_buffer", "iiv", false)); private static var lime_gl_bind_buffer_base = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_buffer_base", "iiiv", false)); private static var lime_gl_bind_buffer_range = new cpp.CallableInt->Int->lime.utils.DataPointer->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_buffer_range", "iiidiv", false)); private static var lime_gl_bind_framebuffer = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_framebuffer", "iiv", false)); private static var lime_gl_bind_renderbuffer = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_renderbuffer", "iiv", false)); private static var lime_gl_bind_sampler = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_sampler", "iiv", false)); private static var lime_gl_bind_texture = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_texture", "iiv", false)); private static var lime_gl_bind_transform_feedback = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_transform_feedback", "iiv", false)); private static var lime_gl_bind_vertex_array = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_bind_vertex_array", "iv", false)); private static var lime_gl_blend_color = new cpp.Callablecpp.Float32->cpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_blend_color", "ffffv", false)); private static var lime_gl_blend_equation = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_blend_equation", "iv", false)); private static var lime_gl_blend_equation_separate = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_blend_equation_separate", "iiv", false)); private static var lime_gl_blend_func = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_blend_func", "iiv", false)); private static var lime_gl_blend_func_separate = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_blend_func_separate", "iiiiv", false)); private static var lime_gl_blit_framebuffer = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_blit_framebuffer", "iiiiiiiiiiv", false)); private static var lime_gl_buffer_data = new cpp.CallableInt->lime.utils.DataPointer->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_buffer_data", "iidiv", false)); private static var lime_gl_buffer_sub_data = new cpp.CallableInt->Int->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_buffer_sub_data", "iiidv", false)); private static var lime_gl_check_framebuffer_status = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_check_framebuffer_status", "ii", false)); private static var lime_gl_clear = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_clear", "iv", false)); private static var lime_gl_clear_bufferfi = new cpp.CallableInt->cpp.Float32->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_clear_bufferfi", "iifiv", false)); private static var lime_gl_clear_bufferfv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_clear_bufferfv", "iidv", false)); private static var lime_gl_clear_bufferiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_clear_bufferiv", "iidv", false)); private static var lime_gl_clear_bufferuiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_clear_bufferuiv", "iidv", false)); private static var lime_gl_client_wait_sync = new cpp.CallableInt->Int->Int->Int>(cpp.Prime._loadPrime("lime", "lime_gl_client_wait_sync", "oiiii", false)); private static var lime_gl_clear_color = new cpp.Callablecpp.Float32->cpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_clear_color", "ffffv", false)); private static var lime_gl_clear_depthf = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_clear_depthf", "fv", false)); private static var lime_gl_clear_stencil = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_clear_stencil", "iv", false)); private static var lime_gl_color_mask = new cpp.CallableBool->Bool->Bool->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_color_mask", "bbbbv", false)); private static var lime_gl_compile_shader = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_compile_shader", "iv", false)); private static var lime_gl_compressed_tex_image_2d = new cpp.CallableInt->Int->Int->Int->Int->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_compressed_tex_image_2d", "iiiiiiidv", false)); private static var lime_gl_compressed_tex_image_3d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_compressed_tex_image_3d", "iiiiiiiidv", false)); private static var lime_gl_compressed_tex_sub_image_2d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_compressed_tex_sub_image_2d", "iiiiiiiidv", false)); private static var lime_gl_compressed_tex_sub_image_3d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->Int->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_compressed_tex_sub_image_3d", "iiiiiiiiiidv", false)); private static var lime_gl_copy_buffer_sub_data = new cpp.CallableInt->lime.utils.DataPointer->lime.utils.DataPointer->Int-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_copy_buffer_sub_data", "iiddiv", false)); private static var lime_gl_copy_tex_image_2d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_copy_tex_image_2d", "iiiiiiiiv", false)); private static var lime_gl_copy_tex_sub_image_2d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_copy_tex_sub_image_2d", "iiiiiiiiv", false)); private static var lime_gl_copy_tex_sub_image_3d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_copy_tex_sub_image_3d", "iiiiiiiiiv", false)); private static var lime_gl_create_buffer = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_buffer", "i", false)); private static var lime_gl_create_framebuffer = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_framebuffer", "i", false)); private static var lime_gl_create_program = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_program", "i", false)); private static var lime_gl_create_query = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_query", "i", false)); private static var lime_gl_create_renderbuffer = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_renderbuffer", "i", false)); private static var lime_gl_create_sampler = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_sampler", "i", false)); private static var lime_gl_create_shader = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_shader", "ii", false)); private static var lime_gl_create_texture = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_texture", "i", false)); private static var lime_gl_create_transform_feedback = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_transform_feedback", "i", false)); private static var lime_gl_create_vertex_array = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_create_vertex_array", "i", false)); private static var lime_gl_cull_face = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_cull_face", "iv", false)); private static var lime_gl_delete_buffer = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_buffer", "iv", false)); private static var lime_gl_delete_framebuffer = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_framebuffer", "iv", false)); private static var lime_gl_delete_program = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_program", "iv", false)); private static var lime_gl_delete_query = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_query", "iv", false)); private static var lime_gl_delete_renderbuffer = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_renderbuffer", "iv", false)); private static var lime_gl_delete_sampler = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_sampler", "iv", false)); private static var lime_gl_delete_shader = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_shader", "iv", false)); private static var lime_gl_delete_sync = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_sync", "ov", false)); private static var lime_gl_delete_texture = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_texture", "iv", false)); private static var lime_gl_delete_transform_feedback = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_transform_feedback", "iv", false)); private static var lime_gl_delete_vertex_array = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_delete_vertex_array", "iv", false)); private static var lime_gl_depth_func = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_depth_func", "iv", false)); private static var lime_gl_depth_mask = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_depth_mask", "bv", false)); private static var lime_gl_depth_rangef = new cpp.Callablecpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_depth_rangef", "ffv", false)); private static var lime_gl_detach_shader = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_detach_shader", "iiv", false)); private static var lime_gl_disable = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_disable", "iv", false)); private static var lime_gl_disable_vertex_attrib_array = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_disable_vertex_attrib_array", "iv", false)); private static var lime_gl_draw_arrays = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_draw_arrays", "iiiv", false)); private static var lime_gl_draw_arrays_instanced = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_draw_arrays_instanced", "iiiiv", false)); private static var lime_gl_draw_buffers = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_draw_buffers", "ov", false)); private static var lime_gl_draw_elements = new cpp.CallableInt->Int->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_draw_elements", "iiidv", false)); private static var lime_gl_draw_elements_instanced = new cpp.CallableInt->Int->lime.utils.DataPointer->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_draw_elements_instanced", "iiidiv", false)); private static var lime_gl_draw_range_elements = new cpp.CallableInt->Int->Int->Int->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_draw_range_elements", "iiiiidv", false)); private static var lime_gl_enable = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_enable", "iv", false)); private static var lime_gl_enable_vertex_attrib_array = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_enable_vertex_attrib_array", "iv", false)); private static var lime_gl_end_query = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_end_query", "iv", false)); private static var lime_gl_end_transform_feedback = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_end_transform_feedback", "v", false)); private static var lime_gl_fence_sync = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_fence_sync", "iio", false)); private static var lime_gl_finish = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_finish", "v", false)); private static var lime_gl_flush = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_flush", "v", false)); private static var lime_gl_framebuffer_renderbuffer = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_framebuffer_renderbuffer", "iiiiv", false)); private static var lime_gl_framebuffer_texture2D = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_framebuffer_texture2D", "iiiiiv", false)); private static var lime_gl_framebuffer_texture_layer = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_framebuffer_texture_layer", "iiiiiv", false)); private static var lime_gl_front_face = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_front_face", "iv", false)); private static var lime_gl_generate_mipmap = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_generate_mipmap", "iv", false)); private static var lime_gl_get_active_attrib = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_active_attrib", "iio", false)); private static var lime_gl_get_active_uniform = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_active_uniform", "iio", false)); private static var lime_gl_get_active_uniform_blocki = new cpp.CallableInt->Int->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_active_uniform_blocki", "iiii", false)); private static var lime_gl_get_active_uniform_blockiv = new cpp.CallableInt->Int->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_active_uniform_blockiv", "iiidv", false)); private static var lime_gl_get_active_uniform_block_name = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_active_uniform_block_name", "iio", false)); private static var lime_gl_get_active_uniformsiv = new cpp.Callablecpp.Object->Int->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_active_uniformsiv", "ioidv", false)); private static var lime_gl_get_attached_shaders = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_attached_shaders", "io", false)); private static var lime_gl_get_attrib_location = new cpp.CallableString->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_attrib_location", "isi", false)); private static var lime_gl_get_boolean = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_get_boolean", "ib", false)); private static var lime_gl_get_booleanv = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_booleanv", "idv", false)); private static var lime_gl_get_buffer_parameteri = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_buffer_parameteri", "iii", false)); private static var lime_gl_get_buffer_parameteri64v = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_buffer_parameteri64v", "iidv", false)); private static var lime_gl_get_buffer_parameteriv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_buffer_parameteriv", "iidv", false)); private static var lime_gl_get_buffer_pointerv = new cpp.CallableInt->lime.utils.DataPointer>(cpp.Prime._loadPrime("lime", "lime_gl_get_buffer_pointerv", "iid", false)); private static var lime_gl_get_buffer_sub_data = new cpp.Callablelime.utils.DataPointer->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_buffer_sub_data", "ididv", false)); private static var lime_gl_get_context_attributes = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_context_attributes", "o", false)); private static var lime_gl_get_error = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_get_error", "i", false)); private static var lime_gl_get_extension = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_extension", "so", false)); private static var lime_gl_get_float = new cpp.Callablecpp.Float32>(cpp.Prime._loadPrime("lime", "lime_gl_get_float", "if", false)); private static var lime_gl_get_floatv = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_floatv", "idv", false)); private static var lime_gl_get_frag_data_location = new cpp.CallableString->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_frag_data_location", "isi", false)); private static var lime_gl_get_framebuffer_attachment_parameteri = new cpp.CallableInt->Int->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_framebuffer_attachment_parameteri", "iiii", false)); private static var lime_gl_get_framebuffer_attachment_parameteriv = new cpp.CallableInt->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_framebuffer_attachment_parameteriv", "iiidv", false)); private static var lime_gl_get_integer = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_gl_get_integer", "ii", false)); private static var lime_gl_get_integer64v = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_integer64v", "idv", false)); private static var lime_gl_get_integer64i_v = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_integer64i_v", "iidv", false)); private static var lime_gl_get_integerv = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_integerv", "idv", false)); private static var lime_gl_get_integeri_v = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_integeri_v", "iidv", false)); private static var lime_gl_get_internalformativ = new cpp.CallableInt->Int->Int->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_internalformativ", "iiiidv", false)); private static var lime_gl_get_program_binary = new cpp.CallableInt->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_program_binary", "iiov", false)); private static var lime_gl_get_program_info_log = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_program_info_log", "io", false)); private static var lime_gl_get_programi = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_programi", "iii", false)); private static var lime_gl_get_programiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_programiv", "iidv", false)); private static var lime_gl_get_queryi = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_queryi", "iii", false)); private static var lime_gl_get_queryiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_queryiv", "iidv", false)); private static var lime_gl_get_query_objectui = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_query_objectui", "iii", false)); private static var lime_gl_get_query_objectuiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_query_objectuiv", "iidv", false)); private static var lime_gl_get_renderbuffer_parameteri = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_renderbuffer_parameteri", "iii", false)); private static var lime_gl_get_renderbuffer_parameteriv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_renderbuffer_parameteriv", "iidv", false)); private static var lime_gl_get_sampler_parameterf = new cpp.CallableInt->cpp.Float32>(cpp.Prime._loadPrime("lime", "lime_gl_get_sampler_parameterf", "iif", false)); private static var lime_gl_get_sampler_parameterfv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_sampler_parameterfv", "iidv", false)); private static var lime_gl_get_sampler_parameteri = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_sampler_parameteri", "iii", false)); private static var lime_gl_get_sampler_parameteriv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_sampler_parameteriv", "iidv", false)); private static var lime_gl_get_shader_info_log = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_shader_info_log", "io", false)); private static var lime_gl_get_shaderi = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_shaderi", "iii", false)); private static var lime_gl_get_shaderiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_shaderiv", "iidv", false)); private static var lime_gl_get_shader_precision_format = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_shader_precision_format", "iio", false)); private static var lime_gl_get_shader_source = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_shader_source", "io", false)); private static var lime_gl_get_string = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_string", "io", false)); private static var lime_gl_get_stringi = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_stringi", "iio", false)); private static var lime_gl_get_sync_parameteri = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_sync_parameteri", "oii", false)); private static var lime_gl_get_sync_parameteriv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_sync_parameteriv", "oidv", false)); private static var lime_gl_get_tex_parameterf = new cpp.CallableInt->cpp.Float32>(cpp.Prime._loadPrime("lime", "lime_gl_get_tex_parameterf", "iif", false)); private static var lime_gl_get_tex_parameterfv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_tex_parameterfv", "iidv", false)); private static var lime_gl_get_tex_parameteri = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_tex_parameteri", "iii", false)); private static var lime_gl_get_tex_parameteriv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_tex_parameteriv", "iidv", false)); private static var lime_gl_get_transform_feedback_varying = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_get_transform_feedback_varying", "iio", false)); private static var lime_gl_get_uniformf = new cpp.CallableInt->cpp.Float32>(cpp.Prime._loadPrime("lime", "lime_gl_get_uniformf", "iif", false)); private static var lime_gl_get_uniformfv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_uniformfv", "iidv", false)); private static var lime_gl_get_uniformi = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_uniformi", "iii", false)); private static var lime_gl_get_uniformiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_uniformiv", "iidv", false)); private static var lime_gl_get_uniformui = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_uniformui", "iii", false)); private static var lime_gl_get_uniformuiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_uniformuiv", "iidv", false)); private static var lime_gl_get_uniform_block_index = new cpp.CallableString->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_uniform_block_index", "isi", false)); private static var lime_gl_get_uniform_location = new cpp.CallableString->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_uniform_location", "isi", false)); private static var lime_gl_get_vertex_attribf = new cpp.CallableInt->cpp.Float32>(cpp.Prime._loadPrime("lime", "lime_gl_get_vertex_attribf", "iif", false)); private static var lime_gl_get_vertex_attribfv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_vertex_attribfv", "iidv", false)); private static var lime_gl_get_vertex_attribi = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_vertex_attribi", "iii", false)); private static var lime_gl_get_vertex_attribiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_vertex_attribiv", "iidv", false)); private static var lime_gl_get_vertex_attribii = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_vertex_attribii", "iii", false)); private static var lime_gl_get_vertex_attribiiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_vertex_attribiiv", "iidv", false)); private static var lime_gl_get_vertex_attribiui = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_gl_get_vertex_attribiui", "iii", false)); private static var lime_gl_get_vertex_attribiuiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_get_vertex_attribiuiv", "iidv", false)); private static var lime_gl_get_vertex_attrib_pointerv = new cpp.CallableInt->lime.utils.DataPointer>(cpp.Prime._loadPrime("lime", "lime_gl_get_vertex_attrib_pointerv", "iid", false)); private static var lime_gl_hint = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_hint", "iiv", false)); private static var lime_gl_invalidate_framebuffer = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_invalidate_framebuffer", "iov", false)); private static var lime_gl_invalidate_sub_framebuffer = new cpp.Callablecpp.Object->Int->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_invalidate_sub_framebuffer", "ioiiiiv", false)); private static var lime_gl_is_buffer = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_buffer", "ib", false)); private static var lime_gl_is_enabled = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_enabled", "ib", false)); private static var lime_gl_is_framebuffer = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_framebuffer", "ib", false)); private static var lime_gl_is_program = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_program", "ib", false)); private static var lime_gl_is_query = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_query", "ib", false)); private static var lime_gl_is_renderbuffer = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_renderbuffer", "ib", false)); private static var lime_gl_is_sampler = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_sampler", "ib", false)); private static var lime_gl_is_shader = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_shader", "ib", false)); private static var lime_gl_is_sync = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_sync", "ob", false)); private static var lime_gl_is_texture = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_texture", "ib", false)); private static var lime_gl_is_transform_feedback = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_transform_feedback", "ib", false)); private static var lime_gl_is_vertex_array = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_is_vertex_array", "ib", false)); private static var lime_gl_line_width = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_line_width", "fv", false)); private static var lime_gl_link_program = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_link_program", "iv", false)); private static var lime_gl_map_buffer_range = new cpp.Callablelime.utils.DataPointer->Int->Int->lime.utils.DataPointer>(cpp.Prime._loadPrime("lime", "lime_gl_map_buffer_range", "idiid", false)); private static var lime_gl_object_deregister = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_object_deregister", "ov", false)); private static var lime_gl_object_from_id = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_object_from_id", "iio", false)); private static var lime_gl_object_register = new cpp.CallableInt->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_gl_object_register", "iioo", false)); private static var lime_gl_pause_transform_feedback = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_pause_transform_feedback", "v", false)); private static var lime_gl_pixel_storei = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_pixel_storei", "iiv", false)); private static var lime_gl_polygon_offset = new cpp.Callablecpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_polygon_offset", "ffv", false)); private static var lime_gl_program_binary = new cpp.CallableInt->lime.utils.DataPointer->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_program_binary", "iidiv", false)); private static var lime_gl_program_parameteri = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_program_parameteri", "iiiv", false)); private static var lime_gl_read_buffer = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_read_buffer", "iv", false)); private static var lime_gl_read_pixels = new cpp.CallableInt->Int->Int->Int->Int->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_read_pixels", "iiiiiidv", false)); private static var lime_gl_release_shader_compiler = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_release_shader_compiler", "v", false)); private static var lime_gl_renderbuffer_storage = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_renderbuffer_storage", "iiiiv", false)); private static var lime_gl_renderbuffer_storage_multisample = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_renderbuffer_storage_multisample", "iiiiiv", false)); private static var lime_gl_resume_transform_feedback = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_resume_transform_feedback", "v", false)); private static var lime_gl_sample_coverage = new cpp.CallableBool->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_sample_coverage", "fbv", false)); private static var lime_gl_sampler_parameterf = new cpp.CallableInt->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_sampler_parameterf", "iifv", false)); private static var lime_gl_sampler_parameteri = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_sampler_parameteri", "iiiv", false)); private static var lime_gl_scissor = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_scissor", "iiiiv", false)); private static var lime_gl_shader_binary = new cpp.CallableInt->lime.utils.DataPointer->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_shader_binary", "oidiv", false)); private static var lime_gl_shader_source = new cpp.CallableString->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_shader_source", "isv", false)); private static var lime_gl_stencil_func = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_stencil_func", "iiiv", false)); private static var lime_gl_stencil_func_separate = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_stencil_func_separate", "iiiiv", false)); private static var lime_gl_stencil_mask = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_stencil_mask", "iv", false)); private static var lime_gl_stencil_mask_separate = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_stencil_mask_separate", "iiv", false)); private static var lime_gl_stencil_op = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_stencil_op", "iiiv", false)); private static var lime_gl_stencil_op_separate = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_stencil_op_separate", "iiiiv", false)); private static var lime_gl_tex_image_2d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_tex_image_2d", "iiiiiiiidv", false)); private static var lime_gl_tex_image_3d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_tex_image_3d", "iiiiiiiiidv", false)); private static var lime_gl_tex_parameterf = new cpp.CallableInt->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_tex_parameterf", "iifv", false)); private static var lime_gl_tex_parameteri = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_tex_parameteri", "iiiv", false)); private static var lime_gl_tex_storage_2d = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_tex_storage_2d", "iiiiiv", false)); private static var lime_gl_tex_storage_3d = new cpp.CallableInt->Int->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_tex_storage_3d", "iiiiiiv", false)); private static var lime_gl_tex_sub_image_2d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_tex_sub_image_2d", "iiiiiiiidv", false)); private static var lime_gl_tex_sub_image_3d = new cpp.CallableInt->Int->Int->Int->Int->Int->Int->Int->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_tex_sub_image_3d", "iiiiiiiiiidv", false)); private static var lime_gl_transform_feedback_varyings = new cpp.Callablecpp.Object->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_transform_feedback_varyings", "ioiv", false)); private static var lime_gl_uniform1f = new cpp.Callablecpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform1f", "ifv", false)); private static var lime_gl_uniform1fv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform1fv", "iidv", false)); private static var lime_gl_uniform1i = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform1i", "iiv", false)); private static var lime_gl_uniform1iv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform1iv", "iidv", false)); private static var lime_gl_uniform1ui = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform1ui", "iiv", false)); private static var lime_gl_uniform1uiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform1uiv", "iidv", false)); private static var lime_gl_uniform2f = new cpp.Callablecpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform2f", "iffv", false)); private static var lime_gl_uniform2fv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform2fv", "iidv", false)); private static var lime_gl_uniform2i = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform2i", "iiiv", false)); private static var lime_gl_uniform2iv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform2iv", "iidv", false)); private static var lime_gl_uniform2ui = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform2ui", "iiiv", false)); private static var lime_gl_uniform2uiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform2uiv", "iidv", false)); private static var lime_gl_uniform3f = new cpp.Callablecpp.Float32->cpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform3f", "ifffv", false)); private static var lime_gl_uniform3fv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform3fv", "iidv", false)); private static var lime_gl_uniform3i = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform3i", "iiiiv", false)); private static var lime_gl_uniform3iv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform3iv", "iidv", false)); private static var lime_gl_uniform3ui = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform3ui", "iiiiv", false)); private static var lime_gl_uniform3uiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform3uiv", "iidv", false)); private static var lime_gl_uniform4f = new cpp.Callablecpp.Float32->cpp.Float32->cpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform4f", "iffffv", false)); private static var lime_gl_uniform4fv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform4fv", "iidv", false)); private static var lime_gl_uniform4i = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform4i", "iiiiiv", false)); private static var lime_gl_uniform4iv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform4iv", "iidv", false)); private static var lime_gl_uniform4ui = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform4ui", "iiiiiv", false)); private static var lime_gl_uniform4uiv = new cpp.CallableInt->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform4uiv", "iidv", false)); private static var lime_gl_uniform_block_binding = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_block_binding", "iiiv", false)); private static var lime_gl_uniform_matrix2fv = new cpp.CallableInt->Bool->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_matrix2fv", "iibdv", false)); private static var lime_gl_uniform_matrix2x3fv = new cpp.CallableInt->Bool->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_matrix2x3fv", "iibdv", false)); private static var lime_gl_uniform_matrix2x4fv = new cpp.CallableInt->Bool->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_matrix2x4fv", "iibdv", false)); private static var lime_gl_uniform_matrix3fv = new cpp.CallableInt->Bool->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_matrix3fv", "iibdv", false)); private static var lime_gl_uniform_matrix3x2fv = new cpp.CallableInt->Bool->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_matrix3x2fv", "iibdv", false)); private static var lime_gl_uniform_matrix3x4fv = new cpp.CallableInt->Bool->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_matrix3x4fv", "iibdv", false)); private static var lime_gl_uniform_matrix4fv = new cpp.CallableInt->Bool->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_matrix4fv", "iibdv", false)); private static var lime_gl_uniform_matrix4x2fv = new cpp.CallableInt->Bool->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_matrix4x2fv", "iibdv", false)); private static var lime_gl_uniform_matrix4x3fv = new cpp.CallableInt->Bool->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_uniform_matrix4x3fv", "iibdv", false)); private static var lime_gl_unmap_buffer = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_gl_unmap_buffer", "ib", false)); private static var lime_gl_use_program = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_use_program", "iv", false)); private static var lime_gl_validate_program = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_validate_program", "iv", false)); private static var lime_gl_vertex_attrib1f = new cpp.Callablecpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib1f", "ifv", false)); private static var lime_gl_vertex_attrib1fv = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib1fv", "idv", false)); private static var lime_gl_vertex_attrib2f = new cpp.Callablecpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib2f", "iffv", false)); private static var lime_gl_vertex_attrib2fv = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib2fv", "idv", false)); private static var lime_gl_vertex_attrib3f = new cpp.Callablecpp.Float32->cpp.Float32->cpp.Float32->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib3f", "ifffv", false)); private static var lime_gl_vertex_attrib3fv = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib3fv", "idv", false)); private static var lime_gl_vertex_attrib4f = new cpp.Callablecpp.Float32->cpp.Float32->cpp.Float32->cpp.Float32-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib4f", "iffffv", false)); private static var lime_gl_vertex_attrib4fv = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib4fv", "idv", false)); private static var lime_gl_vertex_attribi4i = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attribi4i", "iiiiiv", false)); private static var lime_gl_vertex_attribi4iv = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attribi4iv", "idv", false)); private static var lime_gl_vertex_attribi4ui = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attribi4ui", "iiiiiv", false)); private static var lime_gl_vertex_attribi4uiv = new cpp.Callablelime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attribi4uiv", "idv", false)); private static var lime_gl_vertex_attrib_divisor = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib_divisor", "iiv", false)); private static var lime_gl_vertex_attrib_ipointer = new cpp.CallableInt->Int->Int->lime.utils.DataPointer->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib_ipointer", "iiiidv", false)); private static var lime_gl_vertex_attrib_pointer = new cpp.CallableInt->Int->Bool->Int->lime.utils.DataPointer-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_vertex_attrib_pointer", "iiibidv", false)); private static var lime_gl_viewport = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_viewport", "iiiiv", false)); private static var lime_gl_wait_sync = new cpp.CallableInt->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_gl_wait_sync", "oiiiv", false)); #end #end #if (neko || cppia) private static var lime_gl_active_texture = CFFI.load("lime", "lime_gl_active_texture", 1); private static var lime_gl_attach_shader = CFFI.load("lime", "lime_gl_attach_shader", 2); private static var lime_gl_begin_query = CFFI.load("lime", "lime_gl_begin_query", 2); private static var lime_gl_begin_transform_feedback = CFFI.load("lime", "lime_gl_begin_transform_feedback", 1); private static var lime_gl_bind_attrib_location = CFFI.load("lime", "lime_gl_bind_attrib_location", 3); private static var lime_gl_bind_buffer = CFFI.load("lime", "lime_gl_bind_buffer", 2); private static var lime_gl_bind_buffer_base = CFFI.load("lime", "lime_gl_bind_buffer_base", 3); private static var lime_gl_bind_buffer_range = CFFI.load("lime", "lime_gl_bind_buffer_range", 5); private static var lime_gl_bind_framebuffer = CFFI.load("lime", "lime_gl_bind_framebuffer", 2); private static var lime_gl_bind_renderbuffer = CFFI.load("lime", "lime_gl_bind_renderbuffer", 2); private static var lime_gl_bind_sampler = CFFI.load("lime", "lime_gl_bind_sampler", 2); private static var lime_gl_bind_texture = CFFI.load("lime", "lime_gl_bind_texture", 2); private static var lime_gl_bind_transform_feedback = CFFI.load("lime", "lime_gl_bind_transform_feedback", 2); private static var lime_gl_bind_vertex_array = CFFI.load("lime", "lime_gl_bind_vertex_array", 1); private static var lime_gl_blend_color = CFFI.load("lime", "lime_gl_blend_color", 4); private static var lime_gl_blend_equation = CFFI.load("lime", "lime_gl_blend_equation", 1); private static var lime_gl_blend_equation_separate = CFFI.load("lime", "lime_gl_blend_equation_separate", 2); private static var lime_gl_blend_func = CFFI.load("lime", "lime_gl_blend_func", 2); private static var lime_gl_blend_func_separate = CFFI.load("lime", "lime_gl_blend_func_separate", 4); private static var lime_gl_blit_framebuffer = CFFI.load("lime", "lime_gl_blit_framebuffer", -1); private static var lime_gl_buffer_data = CFFI.load("lime", "lime_gl_buffer_data", 4); private static var lime_gl_buffer_sub_data = CFFI.load("lime", "lime_gl_buffer_sub_data", 4); private static var lime_gl_check_framebuffer_status = CFFI.load("lime", "lime_gl_check_framebuffer_status", 1); private static var lime_gl_clear = CFFI.load("lime", "lime_gl_clear", 1); private static var lime_gl_clear_bufferfi = CFFI.load("lime", "lime_gl_clear_bufferfi", 4); private static var lime_gl_clear_bufferfv = CFFI.load("lime", "lime_gl_clear_bufferfv", 3); private static var lime_gl_clear_bufferiv = CFFI.load("lime", "lime_gl_clear_bufferiv", 3); private static var lime_gl_clear_bufferuiv = CFFI.load("lime", "lime_gl_clear_bufferuiv", 3); private static var lime_gl_client_wait_sync = CFFI.load("lime", "lime_gl_client_wait_sync", 4); private static var lime_gl_clear_color = CFFI.load("lime", "lime_gl_clear_color", 4); private static var lime_gl_clear_depthf = CFFI.load("lime", "lime_gl_clear_depthf", 1); private static var lime_gl_clear_stencil = CFFI.load("lime", "lime_gl_clear_stencil", 1); private static var lime_gl_color_mask = CFFI.load("lime", "lime_gl_color_mask", 4); private static var lime_gl_compile_shader = CFFI.load("lime", "lime_gl_compile_shader", 1); private static var lime_gl_compressed_tex_image_2d = CFFI.load("lime", "lime_gl_compressed_tex_image_2d", -1); private static var lime_gl_compressed_tex_image_3d = CFFI.load("lime", "lime_gl_compressed_tex_image_3d", -1); private static var lime_gl_compressed_tex_sub_image_2d = CFFI.load("lime", "lime_gl_compressed_tex_sub_image_2d", -1); private static var lime_gl_compressed_tex_sub_image_3d = CFFI.load("lime", "lime_gl_compressed_tex_sub_image_3d", -1); private static var lime_gl_copy_buffer_sub_data = CFFI.load("lime", "lime_gl_copy_buffer_sub_data", 5); private static var lime_gl_copy_tex_image_2d = CFFI.load("lime", "lime_gl_copy_tex_image_2d", -1); private static var lime_gl_copy_tex_sub_image_2d = CFFI.load("lime", "lime_gl_copy_tex_sub_image_2d", -1); private static var lime_gl_copy_tex_sub_image_3d = CFFI.load("lime", "lime_gl_copy_tex_sub_image_3d", -1); private static var lime_gl_create_buffer = CFFI.load("lime", "lime_gl_create_buffer", 0); private static var lime_gl_create_framebuffer = CFFI.load("lime", "lime_gl_create_framebuffer", 0); private static var lime_gl_create_program = CFFI.load("lime", "lime_gl_create_program", 0); private static var lime_gl_create_query = CFFI.load("lime", "lime_gl_create_query", 0); private static var lime_gl_create_renderbuffer = CFFI.load("lime", "lime_gl_create_renderbuffer", 0); private static var lime_gl_create_sampler = CFFI.load("lime", "lime_gl_create_sampler", 0); private static var lime_gl_create_shader = CFFI.load("lime", "lime_gl_create_shader", 1); private static var lime_gl_create_texture = CFFI.load("lime", "lime_gl_create_texture", 0); private static var lime_gl_create_transform_feedback = CFFI.load("lime", "lime_gl_create_transform_feedback", 0); private static var lime_gl_create_vertex_array = CFFI.load("lime", "lime_gl_create_vertex_array", 0); private static var lime_gl_cull_face = CFFI.load("lime", "lime_gl_cull_face", 1); private static var lime_gl_delete_buffer = CFFI.load("lime", "lime_gl_delete_buffer", 1); private static var lime_gl_delete_framebuffer = CFFI.load("lime", "lime_gl_delete_framebuffer", 1); private static var lime_gl_delete_program = CFFI.load("lime", "lime_gl_delete_program", 1); private static var lime_gl_delete_query = CFFI.load("lime", "lime_gl_delete_query", 1); private static var lime_gl_delete_renderbuffer = CFFI.load("lime", "lime_gl_delete_renderbuffer", 1); private static var lime_gl_delete_sampler = CFFI.load("lime", "lime_gl_delete_sampler", 1); private static var lime_gl_delete_shader = CFFI.load("lime", "lime_gl_delete_shader", 1); private static var lime_gl_delete_sync = CFFI.load("lime", "lime_gl_delete_sync", 1); private static var lime_gl_delete_texture = CFFI.load("lime", "lime_gl_delete_texture", 1); private static var lime_gl_delete_transform_feedback = CFFI.load("lime", "lime_gl_delete_transform_feedback", 1); private static var lime_gl_delete_vertex_array = CFFI.load("lime", "lime_gl_delete_vertex_array", 1); private static var lime_gl_depth_func = CFFI.load("lime", "lime_gl_depth_func", 1); private static var lime_gl_depth_mask = CFFI.load("lime", "lime_gl_depth_mask", 1); private static var lime_gl_depth_rangef = CFFI.load("lime", "lime_gl_depth_rangef", 2); private static var lime_gl_detach_shader = CFFI.load("lime", "lime_gl_detach_shader", 2); private static var lime_gl_disable = CFFI.load("lime", "lime_gl_disable", 1); private static var lime_gl_disable_vertex_attrib_array = CFFI.load("lime", "lime_gl_disable_vertex_attrib_array", 1); private static var lime_gl_draw_arrays = CFFI.load("lime", "lime_gl_draw_arrays", 3); private static var lime_gl_draw_arrays_instanced = CFFI.load("lime", "lime_gl_draw_arrays_instanced", 4); private static var lime_gl_draw_buffers = CFFI.load("lime", "lime_gl_draw_buffers", 1); private static var lime_gl_draw_elements = CFFI.load("lime", "lime_gl_draw_elements", 4); private static var lime_gl_draw_elements_instanced = CFFI.load("lime", "lime_gl_draw_elements_instanced", 5); private static var lime_gl_draw_range_elements = CFFI.load("lime", "lime_gl_draw_range_elements", -1); private static var lime_gl_enable = CFFI.load("lime", "lime_gl_enable", 1); private static var lime_gl_enable_vertex_attrib_array = CFFI.load("lime", "lime_gl_enable_vertex_attrib_array", 1); private static var lime_gl_end_query = CFFI.load("lime", "lime_gl_end_query", 1); private static var lime_gl_end_transform_feedback = CFFI.load("lime", "lime_gl_end_transform_feedback", 0); private static var lime_gl_fence_sync = CFFI.load("lime", "lime_gl_fence_sync", 2); private static var lime_gl_finish = CFFI.load("lime", "lime_gl_finish", 0); private static var lime_gl_flush = CFFI.load("lime", "lime_gl_flush", 0); private static var lime_gl_framebuffer_renderbuffer = CFFI.load("lime", "lime_gl_framebuffer_renderbuffer", 4); private static var lime_gl_framebuffer_texture2D = CFFI.load("lime", "lime_gl_framebuffer_texture2D", 5); private static var lime_gl_framebuffer_texture_layer = CFFI.load("lime", "lime_gl_framebuffer_texture_layer", 5); private static var lime_gl_front_face = CFFI.load("lime", "lime_gl_front_face", 1); private static var lime_gl_generate_mipmap = CFFI.load("lime", "lime_gl_generate_mipmap", 1); private static var lime_gl_get_active_attrib = CFFI.load("lime", "lime_gl_get_active_attrib", 2); private static var lime_gl_get_active_uniform = CFFI.load("lime", "lime_gl_get_active_uniform", 2); private static var lime_gl_get_active_uniform_blocki = CFFI.load("lime", "lime_gl_get_active_uniform_blocki", 3); private static var lime_gl_get_active_uniform_blockiv = CFFI.load("lime", "lime_gl_get_active_uniform_blockiv", 4); private static var lime_gl_get_active_uniform_block_name = CFFI.load("lime", "lime_gl_get_active_uniform_block_name", 2); private static var lime_gl_get_active_uniformsiv = CFFI.load("lime", "lime_gl_get_active_uniformsiv", 4); private static var lime_gl_get_attached_shaders = CFFI.load("lime", "lime_gl_get_attached_shaders", 1); private static var lime_gl_get_attrib_location = CFFI.load("lime", "lime_gl_get_attrib_location", 2); private static var lime_gl_get_boolean = CFFI.load("lime", "lime_gl_get_boolean", 1); private static var lime_gl_get_booleanv = CFFI.load("lime", "lime_gl_get_booleanv", 2); private static var lime_gl_get_buffer_parameteri = CFFI.load("lime", "lime_gl_get_buffer_parameteri", 2); private static var lime_gl_get_buffer_parameteri64v = CFFI.load("lime", "lime_gl_get_buffer_parameteri64v", 3); private static var lime_gl_get_buffer_parameteriv = CFFI.load("lime", "lime_gl_get_buffer_parameteriv", 3); private static var lime_gl_get_buffer_pointerv = CFFI.load("lime", "lime_gl_get_buffer_pointerv", 2); private static var lime_gl_get_buffer_sub_data = CFFI.load("lime", "lime_gl_get_buffer_sub_data", 4); private static var lime_gl_get_context_attributes = CFFI.load("lime", "lime_gl_get_context_attributes", 0); private static var lime_gl_get_error = CFFI.load("lime", "lime_gl_get_error", 0); private static var lime_gl_get_extension = CFFI.load("lime", "lime_gl_get_extension", 1); private static var lime_gl_get_float = CFFI.load("lime", "lime_gl_get_float", 1); private static var lime_gl_get_floatv = CFFI.load("lime", "lime_gl_get_floatv", 2); private static var lime_gl_get_frag_data_location = CFFI.load("lime", "lime_gl_get_frag_data_location", 2); private static var lime_gl_get_framebuffer_attachment_parameteri = CFFI.load("lime", "lime_gl_get_framebuffer_attachment_parameteri", 3); private static var lime_gl_get_framebuffer_attachment_parameteriv = CFFI.load("lime", "lime_gl_get_framebuffer_attachment_parameteriv", 4); private static var lime_gl_get_integer = CFFI.load("lime", "lime_gl_get_integer", 1); private static var lime_gl_get_integer64v = CFFI.load("lime", "lime_gl_get_integer64v", 2); private static var lime_gl_get_integer64i_v = CFFI.load("lime", "lime_gl_get_integer64i_v", 3); private static var lime_gl_get_integerv = CFFI.load("lime", "lime_gl_get_integerv", 2); private static var lime_gl_get_integeri_v = CFFI.load("lime", "lime_gl_get_integeri_v", 3); private static var lime_gl_get_internalformativ = CFFI.load("lime", "lime_gl_get_internalformativ", 5); private static var lime_gl_get_program_binary = CFFI.load("lime", "lime_gl_get_program_binary", 3); private static var lime_gl_get_program_info_log = CFFI.load("lime", "lime_gl_get_program_info_log", 1); private static var lime_gl_get_programi = CFFI.load("lime", "lime_gl_get_programi", 2); private static var lime_gl_get_programiv = CFFI.load("lime", "lime_gl_get_programiv", 3); private static var lime_gl_get_queryi = CFFI.load("lime", "lime_gl_get_queryi", 2); private static var lime_gl_get_queryiv = CFFI.load("lime", "lime_gl_get_queryiv", 3); private static var lime_gl_get_query_objectui = CFFI.load("lime", "lime_gl_get_query_objectui", 2); private static var lime_gl_get_query_objectuiv = CFFI.load("lime", "lime_gl_get_query_objectuiv", 3); private static var lime_gl_get_renderbuffer_parameteri = CFFI.load("lime", "lime_gl_get_renderbuffer_parameteri", 2); private static var lime_gl_get_renderbuffer_parameteriv = CFFI.load("lime", "lime_gl_get_renderbuffer_parameteriv", 3); private static var lime_gl_get_sampler_parameterf = CFFI.load("lime", "lime_gl_get_sampler_parameterf", 2); private static var lime_gl_get_sampler_parameterfv = CFFI.load("lime", "lime_gl_get_sampler_parameterfv", 3); private static var lime_gl_get_sampler_parameteri = CFFI.load("lime", "lime_gl_get_sampler_parameteri", 2); private static var lime_gl_get_sampler_parameteriv = CFFI.load("lime", "lime_gl_get_sampler_parameteriv", 3); private static var lime_gl_get_shader_info_log = CFFI.load("lime", "lime_gl_get_shader_info_log", 1); private static var lime_gl_get_shaderi = CFFI.load("lime", "lime_gl_get_shaderi", 2); private static var lime_gl_get_shaderiv = CFFI.load("lime", "lime_gl_get_shaderiv", 3); private static var lime_gl_get_shader_precision_format = CFFI.load("lime", "lime_gl_get_shader_precision_format", 2); private static var lime_gl_get_shader_source = CFFI.load("lime", "lime_gl_get_shader_source", 1); private static var lime_gl_get_string = CFFI.load("lime", "lime_gl_get_string", 1); private static var lime_gl_get_stringi = CFFI.load("lime", "lime_gl_get_stringi", 2); private static var lime_gl_get_sync_parameteri = CFFI.load("lime", "lime_gl_get_sync_parameteri", 2); private static var lime_gl_get_sync_parameteriv = CFFI.load("lime", "lime_gl_get_sync_parameteriv", 3); private static var lime_gl_get_tex_parameterf = CFFI.load("lime", "lime_gl_get_tex_parameterf", 2); private static var lime_gl_get_tex_parameterfv = CFFI.load("lime", "lime_gl_get_tex_parameterfv", 3); private static var lime_gl_get_tex_parameteri = CFFI.load("lime", "lime_gl_get_tex_parameteri", 2); private static var lime_gl_get_tex_parameteriv = CFFI.load("lime", "lime_gl_get_tex_parameteriv", 3); private static var lime_gl_get_transform_feedback_varying = CFFI.load("lime", "lime_gl_get_transform_feedback_varying", 2); private static var lime_gl_get_uniformf = CFFI.load("lime", "lime_gl_get_uniformf", 2); private static var lime_gl_get_uniformfv = CFFI.load("lime", "lime_gl_get_uniformfv", 3); private static var lime_gl_get_uniformi = CFFI.load("lime", "lime_gl_get_uniformi", 2); private static var lime_gl_get_uniformiv = CFFI.load("lime", "lime_gl_get_uniformiv", 3); private static var lime_gl_get_uniformui = CFFI.load("lime", "lime_gl_get_uniformui", 2); private static var lime_gl_get_uniformuiv = CFFI.load("lime", "lime_gl_get_uniformuiv", 3); private static var lime_gl_get_uniform_block_index = CFFI.load("lime", "lime_gl_get_uniform_block_index", 2); private static var lime_gl_get_uniform_location = CFFI.load("lime", "lime_gl_get_uniform_location", 2); private static var lime_gl_get_vertex_attribf = CFFI.load("lime", "lime_gl_get_vertex_attribf", 2); private static var lime_gl_get_vertex_attribfv = CFFI.load("lime", "lime_gl_get_vertex_attribfv", 3); private static var lime_gl_get_vertex_attribi = CFFI.load("lime", "lime_gl_get_vertex_attribi", 2); private static var lime_gl_get_vertex_attribiv = CFFI.load("lime", "lime_gl_get_vertex_attribiv", 3); private static var lime_gl_get_vertex_attribii = CFFI.load("lime", "lime_gl_get_vertex_attribii", 2); private static var lime_gl_get_vertex_attribiiv = CFFI.load("lime", "lime_gl_get_vertex_attribiiv", 3); private static var lime_gl_get_vertex_attribiui = CFFI.load("lime", "lime_gl_get_vertex_attribiui", 2); private static var lime_gl_get_vertex_attribiuiv = CFFI.load("lime", "lime_gl_get_vertex_attribiuiv", 3); private static var lime_gl_get_vertex_attrib_pointerv = CFFI.load("lime", "lime_gl_get_vertex_attrib_pointerv", 2); private static var lime_gl_hint = CFFI.load("lime", "lime_gl_hint", 2); private static var lime_gl_invalidate_framebuffer = CFFI.load("lime", "lime_gl_invalidate_framebuffer", 2); private static var lime_gl_invalidate_sub_framebuffer = CFFI.load("lime", "lime_gl_invalidate_sub_framebuffer", -1); private static var lime_gl_is_buffer = CFFI.load("lime", "lime_gl_is_buffer", 1); private static var lime_gl_is_enabled = CFFI.load("lime", "lime_gl_is_enabled", 1); private static var lime_gl_is_framebuffer = CFFI.load("lime", "lime_gl_is_framebuffer", 1); private static var lime_gl_is_program = CFFI.load("lime", "lime_gl_is_program", 1); private static var lime_gl_is_query = CFFI.load("lime", "lime_gl_is_query", 1); private static var lime_gl_is_renderbuffer = CFFI.load("lime", "lime_gl_is_renderbuffer", 1); private static var lime_gl_is_sampler = CFFI.load("lime", "lime_gl_is_sampler", 1); private static var lime_gl_is_shader = CFFI.load("lime", "lime_gl_is_shader", 1); private static var lime_gl_is_sync = CFFI.load("lime", "lime_gl_is_sync", 1); private static var lime_gl_is_texture = CFFI.load("lime", "lime_gl_is_texture", 1); private static var lime_gl_is_transform_feedback = CFFI.load("lime", "lime_gl_is_transform_feedback", 1); private static var lime_gl_is_vertex_array = CFFI.load("lime", "lime_gl_is_vertex_array", 1); private static var lime_gl_line_width = CFFI.load("lime", "lime_gl_line_width", 1); private static var lime_gl_link_program = CFFI.load("lime", "lime_gl_link_program", 1); private static var lime_gl_map_buffer_range = CFFI.load("lime", "lime_gl_map_buffer_range", 4); private static var lime_gl_object_deregister:Dynamic->Void = CFFI.load("lime", "lime_gl_object_deregister", 1); private static var lime_gl_object_from_id = CFFI.load("lime", "lime_gl_object_from_id", 2); private static var lime_gl_object_register = CFFI.load("lime", "lime_gl_object_register", 3); private static var lime_gl_pause_transform_feedback = CFFI.load("lime", "lime_gl_pause_transform_feedback", 0); private static var lime_gl_pixel_storei = CFFI.load("lime", "lime_gl_pixel_storei", 2); private static var lime_gl_polygon_offset = CFFI.load("lime", "lime_gl_polygon_offset", 2); private static var lime_gl_program_binary = CFFI.load("lime", "lime_gl_program_binary", 4); private static var lime_gl_program_parameteri = CFFI.load("lime", "lime_gl_program_parameteri", 3); private static var lime_gl_read_buffer = CFFI.load("lime", "lime_gl_read_buffer", 1); private static var lime_gl_read_pixels = CFFI.load("lime", "lime_gl_read_pixels", -1); private static var lime_gl_release_shader_compiler = CFFI.load("lime", "lime_gl_release_shader_compiler", 0); private static var lime_gl_renderbuffer_storage = CFFI.load("lime", "lime_gl_renderbuffer_storage", 4); private static var lime_gl_renderbuffer_storage_multisample = CFFI.load("lime", "lime_gl_renderbuffer_storage_multisample", 5); private static var lime_gl_resume_transform_feedback = CFFI.load("lime", "lime_gl_resume_transform_feedback", 0); private static var lime_gl_sample_coverage = CFFI.load("lime", "lime_gl_sample_coverage", 2); private static var lime_gl_sampler_parameterf = CFFI.load("lime", "lime_gl_sampler_parameterf", 3); private static var lime_gl_sampler_parameteri = CFFI.load("lime", "lime_gl_sampler_parameteri", 3); private static var lime_gl_scissor = CFFI.load("lime", "lime_gl_scissor", 4); private static var lime_gl_shader_binary = CFFI.load("lime", "lime_gl_shader_binary", 4); private static var lime_gl_shader_source = CFFI.load("lime", "lime_gl_shader_source", 2); private static var lime_gl_stencil_func = CFFI.load("lime", "lime_gl_stencil_func", 3); private static var lime_gl_stencil_func_separate = CFFI.load("lime", "lime_gl_stencil_func_separate", 4); private static var lime_gl_stencil_mask = CFFI.load("lime", "lime_gl_stencil_mask", 1); private static var lime_gl_stencil_mask_separate = CFFI.load("lime", "lime_gl_stencil_mask_separate", 2); private static var lime_gl_stencil_op = CFFI.load("lime", "lime_gl_stencil_op", 3); private static var lime_gl_stencil_op_separate = CFFI.load("lime", "lime_gl_stencil_op_separate", 4); private static var lime_gl_tex_image_2d = CFFI.load("lime", "lime_gl_tex_image_2d", -1); private static var lime_gl_tex_image_3d = CFFI.load("lime", "lime_gl_tex_image_3d", -1); private static var lime_gl_tex_parameterf = CFFI.load("lime", "lime_gl_tex_parameterf", 3); private static var lime_gl_tex_parameteri = CFFI.load("lime", "lime_gl_tex_parameteri", 3); private static var lime_gl_tex_storage_2d = CFFI.load("lime", "lime_gl_tex_storage_2d", 5); private static var lime_gl_tex_storage_3d = CFFI.load("lime", "lime_gl_tex_storage_3d", -1); private static var lime_gl_tex_sub_image_2d = CFFI.load("lime", "lime_gl_tex_sub_image_2d", -1); private static var lime_gl_tex_sub_image_3d = CFFI.load("lime", "lime_gl_tex_sub_image_3d", -1); private static var lime_gl_transform_feedback_varyings = CFFI.load("lime", "lime_gl_transform_feedback_varyings", 3); private static var lime_gl_uniform1f = CFFI.load("lime", "lime_gl_uniform1f", 2); private static var lime_gl_uniform1fv = CFFI.load("lime", "lime_gl_uniform1fv", 3); private static var lime_gl_uniform1i = CFFI.load("lime", "lime_gl_uniform1i", 2); private static var lime_gl_uniform1iv = CFFI.load("lime", "lime_gl_uniform1iv", 3); private static var lime_gl_uniform1ui = CFFI.load("lime", "lime_gl_uniform1ui", 2); private static var lime_gl_uniform1uiv = CFFI.load("lime", "lime_gl_uniform1uiv", 3); private static var lime_gl_uniform2f = CFFI.load("lime", "lime_gl_uniform2f", 3); private static var lime_gl_uniform2fv = CFFI.load("lime", "lime_gl_uniform2fv", 3); private static var lime_gl_uniform2i = CFFI.load("lime", "lime_gl_uniform2i", 3); private static var lime_gl_uniform2iv = CFFI.load("lime", "lime_gl_uniform2iv", 3); private static var lime_gl_uniform2ui = CFFI.load("lime", "lime_gl_uniform2ui", 3); private static var lime_gl_uniform2uiv = CFFI.load("lime", "lime_gl_uniform2uiv", 3); private static var lime_gl_uniform3f = CFFI.load("lime", "lime_gl_uniform3f", 4); private static var lime_gl_uniform3fv = CFFI.load("lime", "lime_gl_uniform3fv", 3); private static var lime_gl_uniform3i = CFFI.load("lime", "lime_gl_uniform3i", 4); private static var lime_gl_uniform3iv = CFFI.load("lime", "lime_gl_uniform3iv", 3); private static var lime_gl_uniform3ui = CFFI.load("lime", "lime_gl_uniform3ui", 4); private static var lime_gl_uniform3uiv = CFFI.load("lime", "lime_gl_uniform3uiv", 3); private static var lime_gl_uniform4f = CFFI.load("lime", "lime_gl_uniform4f", 5); private static var lime_gl_uniform4fv = CFFI.load("lime", "lime_gl_uniform4fv", 3); private static var lime_gl_uniform4i = CFFI.load("lime", "lime_gl_uniform4i", 5); private static var lime_gl_uniform4iv = CFFI.load("lime", "lime_gl_uniform4iv", 3); private static var lime_gl_uniform4ui = CFFI.load("lime", "lime_gl_uniform4ui", 5); private static var lime_gl_uniform4uiv = CFFI.load("lime", "lime_gl_uniform4uiv", 3); private static var lime_gl_uniform_block_binding = CFFI.load("lime", "lime_gl_uniform_block_binding", 3); private static var lime_gl_uniform_matrix2fv = CFFI.load("lime", "lime_gl_uniform_matrix2fv", 4); private static var lime_gl_uniform_matrix2x3fv = CFFI.load("lime", "lime_gl_uniform_matrix2x3fv", 4); private static var lime_gl_uniform_matrix2x4fv = CFFI.load("lime", "lime_gl_uniform_matrix2x4fv", 4); private static var lime_gl_uniform_matrix3fv = CFFI.load("lime", "lime_gl_uniform_matrix3fv", 4); private static var lime_gl_uniform_matrix3x2fv = CFFI.load("lime", "lime_gl_uniform_matrix3x2fv", 4); private static var lime_gl_uniform_matrix3x4fv = CFFI.load("lime", "lime_gl_uniform_matrix3x4fv", 4); private static var lime_gl_uniform_matrix4fv = CFFI.load("lime", "lime_gl_uniform_matrix4fv", 4); private static var lime_gl_uniform_matrix4x2fv = CFFI.load("lime", "lime_gl_uniform_matrix4x2fv", 4); private static var lime_gl_uniform_matrix4x3fv = CFFI.load("lime", "lime_gl_uniform_matrix4x3fv", 4); private static var lime_gl_unmap_buffer = CFFI.load("lime", "lime_gl_unmap_buffer", 1); private static var lime_gl_use_program = CFFI.load("lime", "lime_gl_use_program", 1); private static var lime_gl_validate_program = CFFI.load("lime", "lime_gl_validate_program", 1); private static var lime_gl_vertex_attrib1f = CFFI.load("lime", "lime_gl_vertex_attrib1f", 2); private static var lime_gl_vertex_attrib1fv = CFFI.load("lime", "lime_gl_vertex_attrib1fv", 2); private static var lime_gl_vertex_attrib2f = CFFI.load("lime", "lime_gl_vertex_attrib2f", 3); private static var lime_gl_vertex_attrib2fv = CFFI.load("lime", "lime_gl_vertex_attrib2fv", 2); private static var lime_gl_vertex_attrib3f = CFFI.load("lime", "lime_gl_vertex_attrib3f", 4); private static var lime_gl_vertex_attrib3fv = CFFI.load("lime", "lime_gl_vertex_attrib3fv", 2); private static var lime_gl_vertex_attrib4f = CFFI.load("lime", "lime_gl_vertex_attrib4f", 5); private static var lime_gl_vertex_attrib4fv = CFFI.load("lime", "lime_gl_vertex_attrib4fv", 2); private static var lime_gl_vertex_attribi4i = CFFI.load("lime", "lime_gl_vertex_attribi4i", 5); private static var lime_gl_vertex_attribi4iv = CFFI.load("lime", "lime_gl_vertex_attribi4iv", 2); private static var lime_gl_vertex_attribi4ui = CFFI.load("lime", "lime_gl_vertex_attribi4ui", 5); private static var lime_gl_vertex_attribi4uiv = CFFI.load("lime", "lime_gl_vertex_attribi4uiv", 2); private static var lime_gl_vertex_attrib_divisor = CFFI.load("lime", "lime_gl_vertex_attrib_divisor", 2); private static var lime_gl_vertex_attrib_ipointer = CFFI.load("lime", "lime_gl_vertex_attrib_ipointer", 5); private static var lime_gl_vertex_attrib_pointer = CFFI.load("lime", "lime_gl_vertex_attrib_pointer", -1); private static var lime_gl_viewport = CFFI.load("lime", "lime_gl_viewport", 4); private static var lime_gl_wait_sync = CFFI.load("lime", "lime_gl_wait_sync", 4); #end #if hl @:hlNative("lime", "hl_gl_active_texture") private static function lime_gl_active_texture(texture:Int):Void {} @:hlNative("lime", "hl_gl_attach_shader") private static function lime_gl_attach_shader(program:Int, shader:Int):Void {} @:hlNative("lime", "hl_gl_begin_query") private static function lime_gl_begin_query(target:Int, query:Int):Void {} @:hlNative("lime", "hl_gl_begin_transform_feedback") private static function lime_gl_begin_transform_feedback(primitiveNode:Int):Void {} @:hlNative("lime", "hl_gl_bind_attrib_location") private static function lime_gl_bind_attrib_location(program:Int, index:Int, name:String):Void {} @:hlNative("lime", "hl_gl_bind_buffer") private static function lime_gl_bind_buffer(target:Int, buffer:Int):Void {} @:hlNative("lime", "hl_gl_bind_buffer_base") private static function lime_gl_bind_buffer_base(target:Int, index:Int, buffer:Int):Void {} @:hlNative("lime", "hl_gl_bind_buffer_range") private static function lime_gl_bind_buffer_range(target:Int, index:Int, buffer:Int, offset:DataPointer, size:Int):Void {} @:hlNative("lime", "hl_gl_bind_framebuffer") private static function lime_gl_bind_framebuffer(target:Int, framebuffer:Int):Void {} @:hlNative("lime", "hl_gl_bind_renderbuffer") private static function lime_gl_bind_renderbuffer(target:Int, renderbuffer:Int):Void {} @:hlNative("lime", "hl_gl_bind_sampler") private static function lime_gl_bind_sampler(target:Int, sampler:Int):Void {} @:hlNative("lime", "hl_gl_bind_texture") private static function lime_gl_bind_texture(target:Int, texture:Int):Void {} @:hlNative("lime", "hl_gl_bind_transform_feedback") private static function lime_gl_bind_transform_feedback(target:Int, transformFeedback:Int):Void {} @:hlNative("lime", "hl_gl_bind_vertex_array") private static function lime_gl_bind_vertex_array(vertexArray:Int):Void {} @:hlNative("lime", "hl_gl_blend_color") private static function lime_gl_blend_color(red:hl.F32, green:hl.F32, blue:hl.F32, alpha:hl.F32):Void {} @:hlNative("lime", "hl_gl_blend_equation") private static function lime_gl_blend_equation(mode:Int):Void {} @:hlNative("lime", "hl_gl_blend_equation_separate") private static function lime_gl_blend_equation_separate(modeRGB:Int, modeAlpha:Int):Void {} @:hlNative("lime", "hl_gl_blend_func") private static function lime_gl_blend_func(sfactor:Int, dfactor:Int):Void {} @:hlNative("lime", "hl_gl_blend_func_separate") private static function lime_gl_blend_func_separate(srcRGB:Int, dstRGB:Int, srcAlpha:Int, dstAlpha:Int):Void {} @:hlNative("lime", "hl_gl_blit_framebuffer") private static function lime_gl_blit_framebuffer(srcX0:Int, srcY0:Int, srcX1:Int, srcY1:Int, dstX0:Int, dstY0:Int, dstX1:Int, dstY1:Int, mask:Int, filter:Int):Void {} @:hlNative("lime", "hl_gl_buffer_data") private static function lime_gl_buffer_data(target:Int, size:Int, srcData:DataPointer, usage:Int):Void {} @:hlNative("lime", "hl_gl_buffer_sub_data") private static function lime_gl_buffer_sub_data(target:Int, offset:Int, size:Int, srcData:DataPointer):Void {} @:hlNative("lime", "hl_gl_check_framebuffer_status") private static function lime_gl_check_framebuffer_status(target:Int):Int { return 0; } @:hlNative("lime", "hl_gl_clear") private static function lime_gl_clear(mask:Int):Void {} @:hlNative("lime", "hl_gl_clear_bufferfi") private static function lime_gl_clear_bufferfi(buffer:Int, drawBuffer:Int, depth:hl.F32, stencil:Int):Void {} @:hlNative("lime", "hl_gl_clear_bufferfv") private static function lime_gl_clear_bufferfv(buffer:Int, drawBuffer:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_clear_bufferiv") private static function lime_gl_clear_bufferiv(buffer:Int, drawBuffer:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_clear_bufferuiv") private static function lime_gl_clear_bufferuiv(buffer:Int, drawBuffer:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_client_wait_sync") private static function lime_gl_client_wait_sync(sync:CFFIPointer, flags:Int, timeoutA:Int, timeoutB:Int):Int { return 0; } @:hlNative("lime", "hl_gl_clear_color") private static function lime_gl_clear_color(red:hl.F32, green:hl.F32, blue:hl.F32, alpha:hl.F32):Void {} @:hlNative("lime", "hl_gl_clear_depthf") private static function lime_gl_clear_depthf(depth:hl.F32):Void {} @:hlNative("lime", "hl_gl_clear_stencil") private static function lime_gl_clear_stencil(s:Int):Void {} @:hlNative("lime", "hl_gl_color_mask") private static function lime_gl_color_mask(red:Bool, green:Bool, blue:Bool, alpha:Bool):Void {} @:hlNative("lime", "hl_gl_compile_shader") private static function lime_gl_compile_shader(shader:Int):Void {} @:hlNative("lime", "hl_gl_compressed_tex_image_2d") private static function lime_gl_compressed_tex_image_2d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, imageSize:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_compressed_tex_image_3d") private static function lime_gl_compressed_tex_image_3d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, imageSize:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_compressed_tex_sub_image_2d") private static function lime_gl_compressed_tex_sub_image_2d(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, imageSize:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_compressed_tex_sub_image_3d") private static function lime_gl_compressed_tex_sub_image_3d(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, imageSize:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_copy_buffer_sub_data") private static function lime_gl_copy_buffer_sub_data(readTarget:Int, writeTarget:Int, readOffset:DataPointer, writeOffset:DataPointer, size:Int):Void {} @:hlNative("lime", "hl_gl_copy_tex_image_2d") private static function lime_gl_copy_tex_image_2d(target:Int, level:Int, internalformat:Int, x:Int, y:Int, width:Int, height:Int, border:Int):Void {} @:hlNative("lime", "hl_gl_copy_tex_sub_image_2d") private static function lime_gl_copy_tex_sub_image_2d(target:Int, level:Int, xoffset:Int, yoffset:Int, x:Int, y:Int, width:Int, height:Int):Void {} @:hlNative("lime", "hl_gl_copy_tex_sub_image_3d") private static function lime_gl_copy_tex_sub_image_3d(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, x:Int, y:Int, width:Int, height:Int):Void {} @:hlNative("lime", "hl_gl_create_buffer") private static function lime_gl_create_buffer():Int { return 0; } @:hlNative("lime", "hl_gl_create_framebuffer") private static function lime_gl_create_framebuffer():Int { return 0; } @:hlNative("lime", "hl_gl_create_program") private static function lime_gl_create_program():Int { return 0; } @:hlNative("lime", "hl_gl_create_query") private static function lime_gl_create_query():Int { return 0; } @:hlNative("lime", "hl_gl_create_renderbuffer") private static function lime_gl_create_renderbuffer():Int { return 0; } @:hlNative("lime", "hl_gl_create_sampler") private static function lime_gl_create_sampler():Int { return 0; } @:hlNative("lime", "hl_gl_create_shader") private static function lime_gl_create_shader(type:Int):Int { return 0; } @:hlNative("lime", "hl_gl_create_texture") private static function lime_gl_create_texture():Int { return 0; } @:hlNative("lime", "hl_gl_create_transform_feedback") private static function lime_gl_create_transform_feedback():Int { return 0; } @:hlNative("lime", "hl_gl_create_vertex_array") private static function lime_gl_create_vertex_array():Int { return 0; } @:hlNative("lime", "hl_gl_cull_face") private static function lime_gl_cull_face(mode:Int):Void {} @:hlNative("lime", "hl_gl_delete_buffer") private static function lime_gl_delete_buffer(buffer:Int):Void {} @:hlNative("lime", "hl_gl_delete_framebuffer") private static function lime_gl_delete_framebuffer(framebuffer:Int):Void {} @:hlNative("lime", "hl_gl_delete_program") private static function lime_gl_delete_program(program:Int):Void {} @:hlNative("lime", "hl_gl_delete_query") private static function lime_gl_delete_query(query:Int):Void {} @:hlNative("lime", "hl_gl_delete_renderbuffer") private static function lime_gl_delete_renderbuffer(renderbuffer:Int):Void {} @:hlNative("lime", "hl_gl_delete_sampler") private static function lime_gl_delete_sampler(sampler:Int):Void {} @:hlNative("lime", "hl_gl_delete_shader") private static function lime_gl_delete_shader(shader:Int):Void {} @:hlNative("lime", "hl_gl_delete_sync") private static function lime_gl_delete_sync(sync:CFFIPointer):Void {} @:hlNative("lime", "hl_gl_delete_texture") private static function lime_gl_delete_texture(texture:Int):Void {} @:hlNative("lime", "hl_gl_delete_transform_feedback") private static function lime_gl_delete_transform_feedback(transformFeedback:Int):Void {} @:hlNative("lime", "hl_gl_delete_vertex_array") private static function lime_gl_delete_vertex_array(vertexArray:Int):Void {} @:hlNative("lime", "hl_gl_depth_func") private static function lime_gl_depth_func(func:Int):Void {} @:hlNative("lime", "hl_gl_depth_mask") private static function lime_gl_depth_mask(flag:Bool):Void {} @:hlNative("lime", "hl_gl_depth_rangef") private static function lime_gl_depth_rangef(zNear:hl.F32, zFar:hl.F32):Void {} @:hlNative("lime", "hl_gl_detach_shader") private static function lime_gl_detach_shader(program:Int, shader:Int):Void {} @:hlNative("lime", "hl_gl_disable") private static function lime_gl_disable(cap:Int):Void {} @:hlNative("lime", "hl_gl_disable_vertex_attrib_array") private static function lime_gl_disable_vertex_attrib_array(index:Int):Void {} @:hlNative("lime", "hl_gl_draw_arrays") private static function lime_gl_draw_arrays(mode:Int, first:Int, count:Int):Void {} @:hlNative("lime", "hl_gl_draw_arrays_instanced") private static function lime_gl_draw_arrays_instanced(mode:Int, first:Int, count:Int, instanceCount:Int):Void {} @:hlNative("lime", "hl_gl_draw_buffers") private static function lime_gl_draw_buffers(buffers:hl.NativeArray):Void {} @:hlNative("lime", "hl_gl_draw_elements") private static function lime_gl_draw_elements(mode:Int, count:Int, type:Int, offset:DataPointer):Void {} @:hlNative("lime", "hl_gl_draw_elements_instanced") private static function lime_gl_draw_elements_instanced(mode:Int, count:Int, type:Int, offset:DataPointer, instanceCount:Int):Void {} @:hlNative("lime", "hl_gl_draw_range_elements") private static function lime_gl_draw_range_elements(mode:Int, start:Int, end:Int, count:Int, type:Int, offset:DataPointer):Void {} @:hlNative("lime", "hl_gl_enable") private static function lime_gl_enable(cap:Int):Void {} @:hlNative("lime", "hl_gl_enable_vertex_attrib_array") private static function lime_gl_enable_vertex_attrib_array(index:Int):Void {} @:hlNative("lime", "hl_gl_end_query") private static function lime_gl_end_query(target:Int):Void {} @:hlNative("lime", "hl_gl_end_transform_feedback") private static function lime_gl_end_transform_feedback():Void {} @:hlNative("lime", "hl_gl_fence_sync") private static function lime_gl_fence_sync(condition:Int, flags:Int):CFFIPointer { return null; } @:hlNative("lime", "hl_gl_finish") private static function lime_gl_finish():Void {} @:hlNative("lime", "hl_gl_flush") private static function lime_gl_flush():Void {} @:hlNative("lime", "hl_gl_framebuffer_renderbuffer") private static function lime_gl_framebuffer_renderbuffer(target:Int, attachment:Int, renderbuffertarget:Int, renderbuffer:Int):Void {} @:hlNative("lime", "hl_gl_framebuffer_texture2D") private static function lime_gl_framebuffer_texture2D(target:Int, attachment:Int, textarget:Int, texture:Int, level:Int):Void {} @:hlNative("lime", "hl_gl_framebuffer_texture_layer") private static function lime_gl_framebuffer_texture_layer(target:Int, attachment:Int, texture:Int, level:Int, layer:Int):Void {} @:hlNative("lime", "hl_gl_front_face") private static function lime_gl_front_face(mode:Int):Void {} @:hlNative("lime", "hl_gl_generate_mipmap") private static function lime_gl_generate_mipmap(target:Int):Void {} @:hlNative("lime", "hl_gl_get_active_attrib") private static function lime_gl_get_active_attrib(program:Int, index:Int):Dynamic { return null; } @:hlNative("lime", "hl_gl_get_active_uniform") private static function lime_gl_get_active_uniform(program:Int, index:Int):Dynamic { return null; } @:hlNative("lime", "hl_gl_get_active_uniform_blocki") private static function lime_gl_get_active_uniform_blocki(program:Int, uniformBlockIndex:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_active_uniform_blockiv") private static function lime_gl_get_active_uniform_blockiv(program:Int, uniformBlockIndex:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_active_uniform_block_name") private static function lime_gl_get_active_uniform_block_name(program:Int, uniformBlockIndex:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_gl_get_active_uniformsiv") private static function lime_gl_get_active_uniformsiv(program:Int, uniformIndices:hl.NativeArray, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_attached_shaders") private static function lime_gl_get_attached_shaders(program:Int):hl.NativeArray { return null; } @:hlNative("lime", "hl_gl_get_attrib_location") private static function lime_gl_get_attrib_location(program:Int, name:String):Int { return 0; } @:hlNative("lime", "hl_gl_get_boolean") private static function lime_gl_get_boolean(pname:Int):Bool { return false; } @:hlNative("lime", "hl_gl_get_booleanv") private static function lime_gl_get_booleanv(pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_buffer_parameteri") private static function lime_gl_get_buffer_parameteri(target:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_buffer_parameteri64v") private static function lime_gl_get_buffer_parameteri64v(target:Int, index:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_buffer_parameteriv") private static function lime_gl_get_buffer_parameteriv(target:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_buffer_pointerv") private static function lime_gl_get_buffer_pointerv(target:Int, pname:Int):DataPointer { return 0; } @:hlNative("lime", "hl_gl_get_buffer_sub_data") private static function lime_gl_get_buffer_sub_data(target:Int, offset:DataPointer, size:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_context_attributes") private static function lime_gl_get_context_attributes():Dynamic { return null; } @:hlNative("lime", "hl_gl_get_error") private static function lime_gl_get_error():Int { return 0; } @:hlNative("lime", "hl_gl_get_extension") private static function lime_gl_get_extension(name:String):CFFIPointer { return null; } @:hlNative("lime", "hl_gl_get_float") private static function lime_gl_get_float(pname:Int):hl.F32 { return 0; } @:hlNative("lime", "hl_gl_get_floatv") private static function lime_gl_get_floatv(pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_frag_data_location") private static function lime_gl_get_frag_data_location(program:Int, name:String):Int { return 0; } @:hlNative("lime", "hl_gl_get_framebuffer_attachment_parameteri") private static function lime_gl_get_framebuffer_attachment_parameteri(target:Int, attachment:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_framebuffer_attachment_parameteriv") private static function lime_gl_get_framebuffer_attachment_parameteriv(target:Int, attachment:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_integer") private static function lime_gl_get_integer(pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_integer64v") private static function lime_gl_get_integer64v(pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_integer64i_v") private static function lime_gl_get_integer64i_v(pname:Int, index:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_integerv") private static function lime_gl_get_integerv(pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_integeri_v") private static function lime_gl_get_integeri_v(pname:Int, index:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_internalformativ") private static function lime_gl_get_internalformativ(target:Int, internalformat:Int, pname:Int, bufSize:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_program_binary") private static function lime_gl_get_program_binary(program:Int, binaryFormat:Int, bytes:Bytes):Void {} @:hlNative("lime", "hl_gl_get_program_info_log") private static function lime_gl_get_program_info_log(program:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_gl_get_programi") private static function lime_gl_get_programi(program:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_programiv") private static function lime_gl_get_programiv(program:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_queryi") private static function lime_gl_get_queryi(target:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_queryiv") private static function lime_gl_get_queryiv(target:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_query_objectui") private static function lime_gl_get_query_objectui(target:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_query_objectuiv") private static function lime_gl_get_query_objectuiv(target:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_renderbuffer_parameteri") private static function lime_gl_get_renderbuffer_parameteri(target:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_renderbuffer_parameteriv") private static function lime_gl_get_renderbuffer_parameteriv(target:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_sampler_parameterf") private static function lime_gl_get_sampler_parameterf(target:Int, pname:Int):hl.F32 { return 0; } @:hlNative("lime", "hl_gl_get_sampler_parameterfv") private static function lime_gl_get_sampler_parameterfv(target:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_sampler_parameteri") private static function lime_gl_get_sampler_parameteri(target:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_sampler_parameteriv") private static function lime_gl_get_sampler_parameteriv(target:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_shader_info_log") private static function lime_gl_get_shader_info_log(shader:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_gl_get_shaderi") private static function lime_gl_get_shaderi(shader:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_shaderiv") private static function lime_gl_get_shaderiv(shader:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_shader_precision_format") private static function lime_gl_get_shader_precision_format(shadertype:Int, precisiontype:Int):Dynamic { return null; } @:hlNative("lime", "hl_gl_get_shader_source") private static function lime_gl_get_shader_source(shader:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_gl_get_string") private static function lime_gl_get_string(pname:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_gl_get_stringi") private static function lime_gl_get_stringi(pname:Int, index:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_gl_get_sync_parameteri") private static function lime_gl_get_sync_parameteri(sync:CFFIPointer, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_sync_parameteriv") private static function lime_gl_get_sync_parameteriv(sync:CFFIPointer, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_tex_parameterf") private static function lime_gl_get_tex_parameterf(target:Int, pname:Int):hl.F32 { return 0; } @:hlNative("lime", "hl_gl_get_tex_parameterfv") private static function lime_gl_get_tex_parameterfv(target:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_tex_parameteri") private static function lime_gl_get_tex_parameteri(target:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_tex_parameteriv") private static function lime_gl_get_tex_parameteriv(target:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_transform_feedback_varying") private static function lime_gl_get_transform_feedback_varying(program:Int, index:Int):Dynamic { return null; } @:hlNative("lime", "hl_gl_get_uniformf") private static function lime_gl_get_uniformf(program:Int, location:Int):hl.F32 { return 0; } @:hlNative("lime", "hl_gl_get_uniformfv") private static function lime_gl_get_uniformfv(program:Int, location:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_uniformi") private static function lime_gl_get_uniformi(program:Int, location:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_uniformiv") private static function lime_gl_get_uniformiv(program:Int, location:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_uniformui") private static function lime_gl_get_uniformui(program:Int, location:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_uniformuiv") private static function lime_gl_get_uniformuiv(program:Int, location:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_uniform_block_index") private static function lime_gl_get_uniform_block_index(program:Int, uniformBlockName:String):Int { return 0; } @:hlNative("lime", "hl_gl_get_uniform_location") private static function lime_gl_get_uniform_location(program:Int, name:String):Int { return 0; } @:hlNative("lime", "hl_gl_get_vertex_attribf") private static function lime_gl_get_vertex_attribf(index:Int, pname:Int):hl.F32 { return 0; } @:hlNative("lime", "hl_gl_get_vertex_attribfv") private static function lime_gl_get_vertex_attribfv(index:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_vertex_attribi") private static function lime_gl_get_vertex_attribi(index:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_vertex_attribiv") private static function lime_gl_get_vertex_attribiv(index:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_vertex_attribii") private static function lime_gl_get_vertex_attribii(index:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_vertex_attribiiv") private static function lime_gl_get_vertex_attribiiv(index:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_vertex_attribiui") private static function lime_gl_get_vertex_attribiui(index:Int, pname:Int):Int { return 0; } @:hlNative("lime", "hl_gl_get_vertex_attribiuiv") private static function lime_gl_get_vertex_attribiuiv(index:Int, pname:Int, params:DataPointer):Void {} @:hlNative("lime", "hl_gl_get_vertex_attrib_pointerv") private static function lime_gl_get_vertex_attrib_pointerv(index:Int, pname:Int):DataPointer { return 0; } @:hlNative("lime", "hl_gl_hint") private static function lime_gl_hint(target:Int, mode:Int):Void {} @:hlNative("lime", "hl_gl_invalidate_framebuffer") private static function lime_gl_invalidate_framebuffer(target:Int, attachments:hl.NativeArray):Void {} @:hlNative("lime", "hl_gl_invalidate_sub_framebuffer") private static function lime_gl_invalidate_sub_framebuffer(target:Int, attachments:hl.NativeArray, x:Int, y:Int, width:Int, height:Int):Void {} @:hlNative("lime", "hl_gl_is_buffer") private static function lime_gl_is_buffer(buffer:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_enabled") private static function lime_gl_is_enabled(cap:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_framebuffer") private static function lime_gl_is_framebuffer(framebuffer:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_program") private static function lime_gl_is_program(program:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_query") private static function lime_gl_is_query(query:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_renderbuffer") private static function lime_gl_is_renderbuffer(renderbuffer:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_sampler") private static function lime_gl_is_sampler(sampler:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_shader") private static function lime_gl_is_shader(shader:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_sync") private static function lime_gl_is_sync(sync:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_gl_is_texture") private static function lime_gl_is_texture(texture:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_transform_feedback") private static function lime_gl_is_transform_feedback(transformFeedback:Int):Bool { return false; } @:hlNative("lime", "hl_gl_is_vertex_array") private static function lime_gl_is_vertex_array(vertexArray:Int):Bool { return false; } @:hlNative("lime", "hl_gl_line_width") private static function lime_gl_line_width(width:hl.F32):Void {} @:hlNative("lime", "hl_gl_link_program") private static function lime_gl_link_program(program:Int):Void {} @:hlNative("lime", "hl_gl_map_buffer_range") private static function lime_gl_map_buffer_range(target:Int, offset:DataPointer, length:Int, access:Int):DataPointer { return 0; } @:hlNative("lime", "hl_gl_object_deregister") private static function lime_gl_object_deregister(object:GLObject):Void {} @:hlNative("lime", "hl_gl_object_from_id") private static function lime_gl_object_from_id(id:Int, type:Int):GLObject { return null; } @:hlNative("lime", "hl_gl_object_register") private static function lime_gl_object_register(id:Int, type:Int, object:GLObject):CFFIPointer { return null; } @:hlNative("lime", "hl_gl_pause_transform_feedback") private static function lime_gl_pause_transform_feedback():Void {} @:hlNative("lime", "hl_gl_pixel_storei") private static function lime_gl_pixel_storei(pname:Int, param:Int):Void {} @:hlNative("lime", "hl_gl_polygon_offset") private static function lime_gl_polygon_offset(factor:hl.F32, units:hl.F32):Void {} @:hlNative("lime", "hl_gl_program_binary") private static function lime_gl_program_binary(program:Int, binaryFormat:Int, binary:DataPointer, length:Int):Void {} @:hlNative("lime", "hl_gl_program_parameteri") private static function lime_gl_program_parameteri(program:Int, pname:Int, value:Int):Void {} @:hlNative("lime", "hl_gl_read_buffer") private static function lime_gl_read_buffer(src:Int):Void {} @:hlNative("lime", "hl_gl_read_pixels") private static function lime_gl_read_pixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:DataPointer):Void {} @:hlNative("lime", "hl_gl_release_shader_compiler") private static function lime_gl_release_shader_compiler():Void {} @:hlNative("lime", "hl_gl_renderbuffer_storage") private static function lime_gl_renderbuffer_storage(target:Int, internalformat:Int, width:Int, height:Int):Void {} @:hlNative("lime", "hl_gl_renderbuffer_storage_multisample") private static function lime_gl_renderbuffer_storage_multisample(target:Int, samples:Int, internalformat:Int, width:Int, height:Int):Void {} @:hlNative("lime", "hl_gl_resume_transform_feedback") private static function lime_gl_resume_transform_feedback():Void {} @:hlNative("lime", "hl_gl_sample_coverage") private static function lime_gl_sample_coverage(value:hl.F32, invert:Bool):Void {} @:hlNative("lime", "hl_gl_sampler_parameterf") private static function lime_gl_sampler_parameterf(sampler:Int, pname:Int, param:hl.F32):Void {} @:hlNative("lime", "hl_gl_sampler_parameteri") private static function lime_gl_sampler_parameteri(sampler:Int, pname:Int, param:Int):Void {} @:hlNative("lime", "hl_gl_scissor") private static function lime_gl_scissor(x:Int, y:Int, width:Int, height:Int):Void {} @:hlNative("lime", "hl_gl_shader_binary") private static function lime_gl_shader_binary(shaders:hl.NativeArray, binaryformat:Int, binary:DataPointer, length:Int):Void {} @:hlNative("lime", "hl_gl_shader_source") private static function lime_gl_shader_source(shader:Int, source:String):Void {} @:hlNative("lime", "hl_gl_stencil_func") private static function lime_gl_stencil_func(func:Int, ref:Int, mask:Int):Void {} @:hlNative("lime", "hl_gl_stencil_func_separate") private static function lime_gl_stencil_func_separate(face:Int, func:Int, ref:Int, mask:Int):Void {} @:hlNative("lime", "hl_gl_stencil_mask") private static function lime_gl_stencil_mask(mask:Int):Void {} @:hlNative("lime", "hl_gl_stencil_mask_separate") private static function lime_gl_stencil_mask_separate(face:Int, mask:Int):Void {} @:hlNative("lime", "hl_gl_stencil_op") private static function lime_gl_stencil_op(fail:Int, zfail:Int, zpass:Int):Void {} @:hlNative("lime", "hl_gl_stencil_op_separate") private static function lime_gl_stencil_op_separate(face:Int, fail:Int, zfail:Int, zpass:Int):Void {} @:hlNative("lime", "hl_gl_tex_image_2d") private static function lime_gl_tex_image_2d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_tex_image_3d") private static function lime_gl_tex_image_3d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_tex_parameterf") private static function lime_gl_tex_parameterf(target:Int, pname:Int, param:hl.F32):Void {} @:hlNative("lime", "hl_gl_tex_parameteri") private static function lime_gl_tex_parameteri(target:Int, pname:Int, param:Int):Void {} @:hlNative("lime", "hl_gl_tex_storage_2d") private static function lime_gl_tex_storage_2d(target:Int, level:Int, internalformat:Int, width:Int, height:Int):Void {} @:hlNative("lime", "hl_gl_tex_storage_3d") private static function lime_gl_tex_storage_3d(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int):Void {} @:hlNative("lime", "hl_gl_tex_sub_image_2d") private static function lime_gl_tex_sub_image_2d(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_tex_sub_image_3d") private static function lime_gl_tex_sub_image_3d(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, data:DataPointer):Void {} @:hlNative("lime", "hl_gl_transform_feedback_varyings") private static function lime_gl_transform_feedback_varyings(program:Int, varyings:hl.NativeArray, bufferMode:Int):Void {} @:hlNative("lime", "hl_gl_uniform1f") private static function lime_gl_uniform1f(location:Int, v0:hl.F32):Void {} @:hlNative("lime", "hl_gl_uniform1fv") private static function lime_gl_uniform1fv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform1i") private static function lime_gl_uniform1i(location:Int, v0:Int):Void {} @:hlNative("lime", "hl_gl_uniform1iv") private static function lime_gl_uniform1iv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform1ui") private static function lime_gl_uniform1ui(location:Int, v0:Int):Void {} @:hlNative("lime", "hl_gl_uniform1uiv") private static function lime_gl_uniform1uiv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform2f") private static function lime_gl_uniform2f(location:Int, v0:hl.F32, v1:hl.F32):Void {} @:hlNative("lime", "hl_gl_uniform2fv") private static function lime_gl_uniform2fv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform2i") private static function lime_gl_uniform2i(location:Int, v0:Int, v1:Int):Void {} @:hlNative("lime", "hl_gl_uniform2iv") private static function lime_gl_uniform2iv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform2ui") private static function lime_gl_uniform2ui(location:Int, v0:Int, v1:Int):Void {} @:hlNative("lime", "hl_gl_uniform2uiv") private static function lime_gl_uniform2uiv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform3f") private static function lime_gl_uniform3f(location:Int, v0:hl.F32, v1:hl.F32, v2:hl.F32):Void {} @:hlNative("lime", "hl_gl_uniform3fv") private static function lime_gl_uniform3fv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform3i") private static function lime_gl_uniform3i(location:Int, v0:Int, v1:Int, v2:Int):Void {} @:hlNative("lime", "hl_gl_uniform3iv") private static function lime_gl_uniform3iv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform3ui") private static function lime_gl_uniform3ui(location:Int, v0:Int, v1:Int, v2:Int):Void {} @:hlNative("lime", "hl_gl_uniform3uiv") private static function lime_gl_uniform3uiv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform4f") private static function lime_gl_uniform4f(location:Int, v0:hl.F32, v1:hl.F32, v2:hl.F32, v3:hl.F32):Void {} @:hlNative("lime", "hl_gl_uniform4fv") private static function lime_gl_uniform4fv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform4i") private static function lime_gl_uniform4i(location:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void {} @:hlNative("lime", "hl_gl_uniform4iv") private static function lime_gl_uniform4iv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform4ui") private static function lime_gl_uniform4ui(location:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void {} @:hlNative("lime", "hl_gl_uniform4uiv") private static function lime_gl_uniform4uiv(location:Int, count:Int, v:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform_block_binding") private static function lime_gl_uniform_block_binding(program:Int, uniformBlockIndex:Int, uniformBlockBinding:Int):Void {} @:hlNative("lime", "hl_gl_uniform_matrix2fv") private static function lime_gl_uniform_matrix2fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform_matrix2x3fv") private static function lime_gl_uniform_matrix2x3fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform_matrix2x4fv") private static function lime_gl_uniform_matrix2x4fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform_matrix3fv") private static function lime_gl_uniform_matrix3fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform_matrix3x2fv") private static function lime_gl_uniform_matrix3x2fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform_matrix3x4fv") private static function lime_gl_uniform_matrix3x4fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform_matrix4fv") private static function lime_gl_uniform_matrix4fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform_matrix4x2fv") private static function lime_gl_uniform_matrix4x2fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void {} @:hlNative("lime", "hl_gl_uniform_matrix4x3fv") private static function lime_gl_uniform_matrix4x3fv(location:Int, count:Int, transpose:Bool, value:DataPointer):Void {} @:hlNative("lime", "hl_gl_unmap_buffer") private static function lime_gl_unmap_buffer(target:Int):Bool { return false; } @:hlNative("lime", "hl_gl_use_program") private static function lime_gl_use_program(program:Int):Void {} @:hlNative("lime", "hl_gl_validate_program") private static function lime_gl_validate_program(program:Int):Void {} @:hlNative("lime", "hl_gl_vertex_attrib1f") private static function lime_gl_vertex_attrib1f(indx:Int, v0:hl.F32):Void {} @:hlNative("lime", "hl_gl_vertex_attrib1fv") private static function lime_gl_vertex_attrib1fv(indx:Int, values:DataPointer):Void {} @:hlNative("lime", "hl_gl_vertex_attrib2f") private static function lime_gl_vertex_attrib2f(indx:Int, v0:hl.F32, v1:hl.F32):Void {} @:hlNative("lime", "hl_gl_vertex_attrib2fv") private static function lime_gl_vertex_attrib2fv(indx:Int, values:DataPointer):Void {} @:hlNative("lime", "hl_gl_vertex_attrib3f") private static function lime_gl_vertex_attrib3f(indx:Int, v0:hl.F32, v1:hl.F32, v2:hl.F32):Void {} @:hlNative("lime", "hl_gl_vertex_attrib3fv") private static function lime_gl_vertex_attrib3fv(indx:Int, values:DataPointer):Void {} @:hlNative("lime", "hl_gl_vertex_attrib4f") private static function lime_gl_vertex_attrib4f(indx:Int, v0:hl.F32, v1:hl.F32, v2:hl.F32, v3:hl.F32):Void {} @:hlNative("lime", "hl_gl_vertex_attrib4fv") private static function lime_gl_vertex_attrib4fv(indx:Int, values:DataPointer):Void {} @:hlNative("lime", "hl_gl_vertex_attribi4i") private static function lime_gl_vertex_attribi4i(indx:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void {} @:hlNative("lime", "hl_gl_vertex_attribi4iv") private static function lime_gl_vertex_attribi4iv(indx:Int, values:DataPointer):Void {} @:hlNative("lime", "hl_gl_vertex_attribi4ui") private static function lime_gl_vertex_attribi4ui(indx:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void {} @:hlNative("lime", "hl_gl_vertex_attribi4uiv") private static function lime_gl_vertex_attribi4uiv(indx:Int, values:DataPointer):Void {} @:hlNative("lime", "hl_gl_vertex_attrib_divisor") private static function lime_gl_vertex_attrib_divisor(indx:Int, divisor:Int):Void {} @:hlNative("lime", "hl_gl_vertex_attrib_ipointer") private static function lime_gl_vertex_attrib_ipointer(indx:Int, size:Int, type:Int, stride:Int, offset:DataPointer):Void {} @:hlNative("lime", "hl_gl_vertex_attrib_pointer") private static function lime_gl_vertex_attrib_pointer(indx:Int, size:Int, type:Int, normalized:Bool, stride:Int, offset:DataPointer):Void {} @:hlNative("lime", "hl_gl_viewport") private static function lime_gl_viewport(x:Int, y:Int, width:Int, height:Int):Void {} @:hlNative("lime", "hl_gl_wait_sync") private static function lime_gl_wait_sync(sync:CFFIPointer, flags:Int, timeoutA:Int, timeoutB:Int):Void {} #end #end #if (lime_cffi && !macro && lime_harfbuzz) #if (cpp && !cppia) #if (disable_cffi || haxe_ver < "3.4.0") @:cffi private static function lime_hb_blob_create(data:DataPointer, length:Int, memoryMode:Int):CFFIPointer; @:cffi private static function lime_hb_blob_create_sub_blob(parent:CFFIPointer, offset:Int, length:Int):CFFIPointer; @:cffi private static function lime_hb_blob_get_data(blob:CFFIPointer):Float; @:cffi private static function lime_hb_blob_get_data_writable(blob:CFFIPointer):Float; @:cffi private static function lime_hb_blob_get_empty():CFFIPointer; @:cffi private static function lime_hb_blob_get_length(blob:CFFIPointer):Int; @:cffi private static function lime_hb_blob_is_immutable(blob:CFFIPointer):Bool; @:cffi private static function lime_hb_blob_make_immutable(blob:CFFIPointer):Void; @:cffi private static function lime_hb_buffer_add(buffer:CFFIPointer, codepoint:Int, cluster:Int):Void; @:cffi private static function lime_hb_buffer_add_hxstring(buffer:CFFIPointer, text:String, itemOffset:Int, itemLength:Int):Void; @:cffi private static function lime_hb_buffer_add_codepoints(buffer:CFFIPointer, text:DataPointer, textLength:Int, itemOffset:Int, itemLength:Int):Void; @:cffi private static function lime_hb_buffer_add_utf8(buffer:CFFIPointer, text:String, itemOffset:Int, itemLength:Int):Void; @:cffi private static function lime_hb_buffer_add_utf16(buffer:CFFIPointer, text:DataPointer, textLength:Int, itemOffset:Int, itemLength:Int):Void; @:cffi private static function lime_hb_buffer_add_utf32(buffer:CFFIPointer, text:DataPointer, textLength:Int, itemOffset:Int, itemLength:Int):Void; @:cffi private static function lime_hb_buffer_allocation_successful(buffer:CFFIPointer):Bool; @:cffi private static function lime_hb_buffer_clear_contents(buffer:CFFIPointer):Void; @:cffi private static function lime_hb_buffer_create():CFFIPointer; @:cffi private static function lime_hb_buffer_get_cluster_level(buffer:CFFIPointer):Int; @:cffi private static function lime_hb_buffer_get_content_type(buffer:CFFIPointer):Int; @:cffi private static function lime_hb_buffer_get_direction(buffer:CFFIPointer):Int; @:cffi private static function lime_hb_buffer_get_empty():CFFIPointer; @:cffi private static function lime_hb_buffer_get_flags(buffer:CFFIPointer):Int; @:cffi private static function lime_hb_buffer_get_glyph_infos(buffer:CFFIPointer, bytes:Bytes):Bytes; @:cffi private static function lime_hb_buffer_get_glyph_positions(buffer:CFFIPointer, bytes:Bytes):Bytes; @:cffi private static function lime_hb_buffer_get_language(buffer:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_buffer_get_length(buffer:CFFIPointer):Int; @:cffi private static function lime_hb_buffer_get_replacement_codepoint(buffer:CFFIPointer):Int; @:cffi private static function lime_hb_buffer_get_script(buffer:CFFIPointer):Int; @:cffi private static function lime_hb_buffer_get_segment_properties(buffer:CFFIPointer, props:CFFIPointer):Void; @:cffi private static function lime_hb_buffer_guess_segment_properties(buffer:CFFIPointer):Void; @:cffi private static function lime_hb_buffer_normalize_glyphs(buffer:CFFIPointer):Void; @:cffi private static function lime_hb_buffer_preallocate(buffer:CFFIPointer, size:Int):Bool; @:cffi private static function lime_hb_buffer_reset(buffer:CFFIPointer):Void; @:cffi private static function lime_hb_buffer_reverse(buffer:CFFIPointer):Void; @:cffi private static function lime_hb_buffer_reverse_clusters(buffer:CFFIPointer):Void; @:cffi private static function lime_hb_buffer_serialize_format_from_string(str:String):Int; @:cffi private static function lime_hb_buffer_serialize_format_to_string(format:Int):CFFIPointer; @:cffi private static function lime_hb_buffer_serialize_list_formats():CFFIPointer; @:cffi private static function lime_hb_buffer_set_cluster_level(buffer:CFFIPointer, clusterLevel:Int):Void; @:cffi private static function lime_hb_buffer_set_content_type(buffer:CFFIPointer, contentType:Int):Void; @:cffi private static function lime_hb_buffer_set_direction(buffer:CFFIPointer, direction:Int):Void; @:cffi private static function lime_hb_buffer_set_flags(buffer:CFFIPointer, flags:Int):Void; @:cffi private static function lime_hb_buffer_set_language(buffer:CFFIPointer, language:CFFIPointer):Void; @:cffi private static function lime_hb_buffer_set_length(buffer:CFFIPointer, length:Int):Bool; @:cffi private static function lime_hb_buffer_set_replacement_codepoint(buffer:CFFIPointer, replacement:Int):Void; @:cffi private static function lime_hb_buffer_set_script(buffer:CFFIPointer, script:Int):Void; @:cffi private static function lime_hb_buffer_set_segment_properties(buffer:CFFIPointer, props:CFFIPointer):Void; @:cffi private static function lime_hb_face_create(blob:CFFIPointer, index:Int):CFFIPointer; @:cffi private static function lime_hb_face_get_empty():CFFIPointer; @:cffi private static function lime_hb_face_get_glyph_count(face:CFFIPointer):Int; @:cffi private static function lime_hb_face_get_index(face:CFFIPointer):Int; @:cffi private static function lime_hb_face_get_upem(face:CFFIPointer):Int; @:cffi private static function lime_hb_face_is_immutable(face:CFFIPointer):Bool; @:cffi private static function lime_hb_face_make_immutable(face:CFFIPointer):Void; @:cffi private static function lime_hb_face_reference_blob(face:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_face_reference_table(face:CFFIPointer, tag:Int):CFFIPointer; @:cffi private static function lime_hb_face_set_glyph_count(face:CFFIPointer, glyphCount:Int):Void; @:cffi private static function lime_hb_face_set_index(face:CFFIPointer, index:Int):Void; @:cffi private static function lime_hb_face_set_upem(face:CFFIPointer, upem:Int):Void; @:cffi private static function lime_hb_feature_from_string(str:String):CFFIPointer; @:cffi private static function lime_hb_feature_to_string(feature:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_font_add_glyph_origin_for_direction(font:CFFIPointer, glyph:Int, direction:Int, x:Int, y:Int):Void; @:cffi private static function lime_hb_font_create(face:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_font_create_sub_font(parent:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_font_get_empty():CFFIPointer; @:cffi private static function lime_hb_font_get_face(font:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_font_get_glyph_advance_for_direction(font:CFFIPointer, glyph:Int, direction:Int):Dynamic; @:cffi private static function lime_hb_font_get_glyph_kerning_for_direction(font:CFFIPointer, firstGlyph:Int, secondGlyph:Int, direction:Int):Dynamic; @:cffi private static function lime_hb_font_get_glyph_origin_for_direction(font:CFFIPointer, glyph:Int, direction:Int):Dynamic; @:cffi private static function lime_hb_font_get_parent(font:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_font_get_ppem(font:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_font_get_scale(font:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_font_glyph_from_string(font:CFFIPointer, s:String):Int; @:cffi private static function lime_hb_font_glyph_to_string(font:CFFIPointer, codepoint:Int):CFFIPointer; @:cffi private static function lime_hb_font_is_immutable(font:CFFIPointer):Bool; @:cffi private static function lime_hb_font_make_immutable(font:CFFIPointer):Void; @:cffi private static function lime_hb_font_set_ppem(font:CFFIPointer, xppem:Int, yppem:Int):Void; @:cffi private static function lime_hb_font_set_scale(font:CFFIPointer, xScale:Int, yScale:Int):Void; @:cffi private static function lime_hb_font_subtract_glyph_origin_for_direction(font:CFFIPointer, glyph:Int, direction:Int, x:Int, y:Int):Void; @:cffi private static function lime_hb_ft_font_create(font:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_ft_font_create_referenced(font:CFFIPointer):CFFIPointer; @:cffi private static function lime_hb_ft_font_get_load_flags(font:CFFIPointer):Int; @:cffi private static function lime_hb_ft_font_set_load_flags(font:CFFIPointer, loadFlags:Int):Void; @:cffi private static function lime_hb_language_from_string(str:String):CFFIPointer; @:cffi private static function lime_hb_language_get_default():CFFIPointer; @:cffi private static function lime_hb_language_to_string(language:CFFIPointer):Dynamic; @:cffi private static function lime_hb_segment_properties_equal(a:CFFIPointer, b:CFFIPointer):Bool; @:cffi private static function lime_hb_segment_properties_hash(p:CFFIPointer):Int; @:cffi private static function lime_hb_set_add(set:CFFIPointer, codepoint:Int):Void; @:cffi private static function lime_hb_set_add_range(set:CFFIPointer, first:Int, last:Int):Void; @:cffi private static function lime_hb_set_allocation_successful(set:CFFIPointer):Bool; @:cffi private static function lime_hb_set_clear(set:CFFIPointer):Void; @:cffi private static function lime_hb_set_create():CFFIPointer; @:cffi private static function lime_hb_set_del(set:CFFIPointer, codepoint:Int):Void; @:cffi private static function lime_hb_set_del_range(set:CFFIPointer, first:Int, last:Int):Void; @:cffi private static function lime_hb_set_get_empty():CFFIPointer; @:cffi private static function lime_hb_set_get_max(set:CFFIPointer):Int; @:cffi private static function lime_hb_set_get_min(set:CFFIPointer):Int; @:cffi private static function lime_hb_set_get_population(set:CFFIPointer):Int; @:cffi private static function lime_hb_set_has(set:CFFIPointer, codepoint:Int):Bool; @:cffi private static function lime_hb_set_intersect(set:CFFIPointer, other:CFFIPointer):Void; @:cffi private static function lime_hb_set_invert(set:CFFIPointer):Void; @:cffi private static function lime_hb_set_is_empty(set:CFFIPointer):Bool; @:cffi private static function lime_hb_set_is_equal(set:CFFIPointer, other:CFFIPointer):Bool; @:cffi private static function lime_hb_set_next(set:CFFIPointer):Int; @:cffi private static function lime_hb_set_next_range(set:CFFIPointer):Dynamic; @:cffi private static function lime_hb_set_set(set:CFFIPointer, other:CFFIPointer):Void; @:cffi private static function lime_hb_set_subtract(set:CFFIPointer, other:CFFIPointer):Void; @:cffi private static function lime_hb_set_symmetric_difference(set:CFFIPointer, other:CFFIPointer):Void; @:cffi private static function lime_hb_set_union(set:CFFIPointer, other:CFFIPointer):Void; @:cffi private static function lime_hb_shape(font:CFFIPointer, buffer:CFFIPointer, features:Dynamic):Void; #else private static var lime_hb_blob_create = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_blob_create", "diio", false)); private static var lime_hb_blob_create_sub_blob = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_blob_create_sub_blob", "oiio", false)); private static var lime_hb_blob_get_data = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_hb_blob_get_data", "od", false)); private static var lime_hb_blob_get_data_writable = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_hb_blob_get_data_writable", "od", false)); private static var lime_hb_blob_get_empty = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_blob_get_empty", "o", false)); private static var lime_hb_blob_get_length = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_blob_get_length", "oi", false)); private static var lime_hb_blob_is_immutable = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_hb_blob_is_immutable", "ob", false)); private static var lime_hb_blob_make_immutable = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_blob_make_immutable", "ov", false)); private static var lime_hb_buffer_add = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_add", "oiiv", false)); private static var lime_hb_buffer_add_hxstring = new cpp.CallableString->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_add_hxstring", "osiiv", false)); private static var lime_hb_buffer_add_codepoints = new cpp.Callablelime.utils.DataPointer->Int->Int->Int-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_add_codepoints", "odiiiv", false)); private static var lime_hb_buffer_add_utf8 = new cpp.CallableString->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_add_utf8", "osiiv", false)); private static var lime_hb_buffer_add_utf16 = new cpp.Callablelime.utils.DataPointer->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_add_utf16", "odiiiv", false)); private static var lime_hb_buffer_add_utf32 = new cpp.Callablelime.utils.DataPointer->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_add_utf32", "odiiiv", false)); private static var lime_hb_buffer_allocation_successful = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_allocation_successful", "ob", false)); private static var lime_hb_buffer_clear_contents = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_clear_contents", "ov", false)); private static var lime_hb_buffer_create = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_create", "o", false)); private static var lime_hb_buffer_get_cluster_level = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_cluster_level", "oi", false)); private static var lime_hb_buffer_get_content_type = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_content_type", "oi", false)); private static var lime_hb_buffer_get_direction = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_direction", "oi", false)); private static var lime_hb_buffer_get_empty = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_empty", "o", false)); private static var lime_hb_buffer_get_flags = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_flags", "oi", false)); private static var lime_hb_buffer_get_glyph_infos = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_glyph_infos", "ooo", false)); private static var lime_hb_buffer_get_glyph_positions = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_glyph_positions", "ooo", false)); private static var lime_hb_buffer_get_language = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_language", "oo", false)); private static var lime_hb_buffer_get_length = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_length", "oi", false)); private static var lime_hb_buffer_get_replacement_codepoint = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_replacement_codepoint", "oi", false)); private static var lime_hb_buffer_get_script = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_script", "oi", false)); private static var lime_hb_buffer_get_segment_properties = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_get_segment_properties", "oov", false)); private static var lime_hb_buffer_guess_segment_properties = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_guess_segment_properties", "ov", false)); private static var lime_hb_buffer_normalize_glyphs = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_normalize_glyphs", "ov", false)); private static var lime_hb_buffer_preallocate = new cpp.CallableInt->Bool>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_preallocate", "oib", false)); private static var lime_hb_buffer_reset = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_reset", "ov", false)); private static var lime_hb_buffer_reverse = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_reverse", "ov", false)); private static var lime_hb_buffer_reverse_clusters = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_reverse_clusters", "ov", false)); private static var lime_hb_buffer_serialize_format_from_string = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_serialize_format_from_string", "si", false)); private static var lime_hb_buffer_serialize_format_to_string = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_serialize_format_to_string", "io", false)); private static var lime_hb_buffer_serialize_list_formats = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_serialize_list_formats", "o", false)); private static var lime_hb_buffer_set_cluster_level = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_set_cluster_level", "oiv", false)); private static var lime_hb_buffer_set_content_type = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_set_content_type", "oiv", false)); private static var lime_hb_buffer_set_direction = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_set_direction", "oiv", false)); private static var lime_hb_buffer_set_flags = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_set_flags", "oiv", false)); private static var lime_hb_buffer_set_language = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_set_language", "oov", false)); private static var lime_hb_buffer_set_length = new cpp.CallableInt->Bool>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_set_length", "oib", false)); private static var lime_hb_buffer_set_replacement_codepoint = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_set_replacement_codepoint", "oiv", false)); private static var lime_hb_buffer_set_script = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_set_script", "oiv", false)); private static var lime_hb_buffer_set_segment_properties = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_buffer_set_segment_properties", "oov", false)); private static var lime_hb_face_create = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_face_create", "oio", false)); private static var lime_hb_face_get_empty = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_face_get_empty", "o", false)); private static var lime_hb_face_get_glyph_count = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_face_get_glyph_count", "oi", false)); private static var lime_hb_face_get_index = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_face_get_index", "oi", false)); private static var lime_hb_face_get_upem = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_face_get_upem", "oi", false)); private static var lime_hb_face_is_immutable = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_hb_face_is_immutable", "ob", false)); private static var lime_hb_face_make_immutable = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_face_make_immutable", "ov", false)); private static var lime_hb_face_reference_blob = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_face_reference_blob", "oo", false)); private static var lime_hb_face_reference_table = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_face_reference_table", "oio", false)); private static var lime_hb_face_set_glyph_count = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_face_set_glyph_count", "oiv", false)); private static var lime_hb_face_set_index = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_face_set_index", "oiv", false)); private static var lime_hb_face_set_upem = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_face_set_upem", "oiv", false)); private static var lime_hb_feature_from_string = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_feature_from_string", "so", false)); private static var lime_hb_feature_to_string = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_feature_to_string", "oo", false)); private static var lime_hb_font_add_glyph_origin_for_direction = new cpp.CallableInt->Int->Int->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_font_add_glyph_origin_for_direction", "oiiiiv", false)); private static var lime_hb_font_create = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_create", "oo", false)); private static var lime_hb_font_create_sub_font = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_create_sub_font", "oo", false)); private static var lime_hb_font_get_empty = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_get_empty", "o", false)); private static var lime_hb_font_get_face = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_get_face", "oo", false)); private static var lime_hb_font_get_glyph_advance_for_direction = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_get_glyph_advance_for_direction", "oiio", false)); private static var lime_hb_font_get_glyph_kerning_for_direction = new cpp.CallableInt->Int->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_get_glyph_kerning_for_direction", "oiiio", false)); private static var lime_hb_font_get_glyph_origin_for_direction = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_get_glyph_origin_for_direction", "oiio", false)); private static var lime_hb_font_get_parent = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_get_parent", "oo", false)); private static var lime_hb_font_get_ppem = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_get_ppem", "oo", false)); private static var lime_hb_font_get_scale = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_get_scale", "oo", false)); private static var lime_hb_font_glyph_from_string = new cpp.CallableString->Int>(cpp.Prime._loadPrime("lime", "lime_hb_font_glyph_from_string", "osi", false)); private static var lime_hb_font_glyph_to_string = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_font_glyph_to_string", "oio", false)); private static var lime_hb_font_is_immutable = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_hb_font_is_immutable", "ob", false)); private static var lime_hb_font_make_immutable = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_font_make_immutable", "ov", false)); private static var lime_hb_font_set_ppem = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_font_set_ppem", "oiiv", false)); private static var lime_hb_font_set_scale = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_font_set_scale", "oiiv", false)); private static var lime_hb_font_subtract_glyph_origin_for_direction = new cpp.CallableInt->Int->Int->Int-> cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_font_subtract_glyph_origin_for_direction", "oiiiiv", false)); private static var lime_hb_ft_font_create = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_ft_font_create", "oo", false)); private static var lime_hb_ft_font_create_referenced = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_ft_font_create_referenced", "oo", false)); private static var lime_hb_ft_font_get_load_flags = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_ft_font_get_load_flags", "oi", false)); private static var lime_hb_ft_font_set_load_flags = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_ft_font_set_load_flags", "oiv", false)); private static var lime_hb_language_from_string = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_language_from_string", "so", false)); private static var lime_hb_language_get_default = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_language_get_default", "o", false)); private static var lime_hb_language_to_string = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_language_to_string", "oo", false)); private static var lime_hb_segment_properties_equal = new cpp.Callablecpp.Object->Bool>(cpp.Prime._loadPrime("lime", "lime_hb_segment_properties_equal", "oob", false)); private static var lime_hb_segment_properties_hash = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_segment_properties_hash", "oi", false)); private static var lime_hb_set_add = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_add", "oiv", false)); private static var lime_hb_set_add_range = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_add_range", "oiiv", false)); private static var lime_hb_set_allocation_successful = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_hb_set_allocation_successful", "ob", false)); private static var lime_hb_set_clear = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_clear", "ov", false)); private static var lime_hb_set_create = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_set_create", "o", false)); private static var lime_hb_set_del = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_del", "oiv", false)); private static var lime_hb_set_del_range = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_del_range", "oiiv", false)); private static var lime_hb_set_get_empty = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_set_get_empty", "o", false)); private static var lime_hb_set_get_max = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_set_get_max", "oi", false)); private static var lime_hb_set_get_min = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_set_get_min", "oi", false)); private static var lime_hb_set_get_population = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_set_get_population", "oi", false)); private static var lime_hb_set_has = new cpp.CallableInt->Bool>(cpp.Prime._loadPrime("lime", "lime_hb_set_has", "oib", false)); private static var lime_hb_set_intersect = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_intersect", "oov", false)); private static var lime_hb_set_invert = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_invert", "ov", false)); private static var lime_hb_set_is_empty = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_hb_set_is_empty", "ob", false)); private static var lime_hb_set_is_equal = new cpp.Callablecpp.Object->Bool>(cpp.Prime._loadPrime("lime", "lime_hb_set_is_equal", "oob", false)); private static var lime_hb_set_next = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_hb_set_next", "oi", false)); private static var lime_hb_set_next_range = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_hb_set_next_range", "oo", false)); private static var lime_hb_set_set = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_set", "oov", false)); private static var lime_hb_set_subtract = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_subtract", "oov", false)); private static var lime_hb_set_symmetric_difference = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_symmetric_difference", "oov", false)); private static var lime_hb_set_union = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_set_union", "oov", false)); private static var lime_hb_shape = new cpp.Callablecpp.Object->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_hb_shape", "ooov", false)); #end #end #if (neko || cppia) private static var lime_hb_blob_create:lime.utils.DataPointer->Int->Int->Dynamic = CFFI.load("lime", "lime_hb_blob_create", 3); private static var lime_hb_blob_create_sub_blob:Dynamic->Int->Int->Dynamic = CFFI.load("lime", "lime_hb_blob_create_sub_blob", 3); private static var lime_hb_blob_get_data:Dynamic->Float = CFFI.load("lime", "lime_hb_blob_get_data", 1); private static var lime_hb_blob_get_data_writable:Dynamic->Float = CFFI.load("lime", "lime_hb_blob_get_data_writable", 1); private static var lime_hb_blob_get_empty:Void->Dynamic = CFFI.load("lime", "lime_hb_blob_get_empty", 0); private static var lime_hb_blob_get_length:Dynamic->Int = CFFI.load("lime", "lime_hb_blob_get_length", 1); private static var lime_hb_blob_is_immutable:Dynamic->Bool = CFFI.load("lime", "lime_hb_blob_is_immutable", 1); private static var lime_hb_blob_make_immutable:Dynamic->Void = CFFI.load("lime", "lime_hb_blob_make_immutable", 1); private static var lime_hb_buffer_add:Dynamic->Int->Int->Void = CFFI.load("lime", "lime_hb_buffer_add", 3); private static var lime_hb_buffer_add_hxstring:Dynamic->String->Int->Int->Void = CFFI.load("lime", "lime_hb_buffer_add_hxstring", 4); private static var lime_hb_buffer_add_codepoints:Dynamic->lime.utils.DataPointer->Int->Int->Int->Void = CFFI.load("lime", "lime_hb_buffer_add_codepoints", 5); private static var lime_hb_buffer_add_utf8:Dynamic->String->Int->Int->Void = CFFI.load("lime", "lime_hb_buffer_add_utf8", 4); private static var lime_hb_buffer_add_utf16:Dynamic->lime.utils.DataPointer->Int->Int->Int->Void = CFFI.load("lime", "lime_hb_buffer_add_utf16", 5); private static var lime_hb_buffer_add_utf32:Dynamic->lime.utils.DataPointer->Int->Int->Int->Void = CFFI.load("lime", "lime_hb_buffer_add_utf32", 5); private static var lime_hb_buffer_allocation_successful:Dynamic->Bool = CFFI.load("lime", "lime_hb_buffer_allocation_successful", 1); private static var lime_hb_buffer_clear_contents:Dynamic->Void = CFFI.load("lime", "lime_hb_buffer_clear_contents", 1); private static var lime_hb_buffer_create:Void->Dynamic = CFFI.load("lime", "lime_hb_buffer_create", 0); private static var lime_hb_buffer_get_cluster_level:Dynamic->Int = CFFI.load("lime", "lime_hb_buffer_get_cluster_level", 1); private static var lime_hb_buffer_get_content_type:Dynamic->Int = CFFI.load("lime", "lime_hb_buffer_get_content_type", 1); private static var lime_hb_buffer_get_direction:Dynamic->Int = CFFI.load("lime", "lime_hb_buffer_get_direction", 1); private static var lime_hb_buffer_get_empty:Void->Dynamic = CFFI.load("lime", "lime_hb_buffer_get_empty", 0); private static var lime_hb_buffer_get_flags:Dynamic->Int = CFFI.load("lime", "lime_hb_buffer_get_flags", 1); private static var lime_hb_buffer_get_glyph_infos:Dynamic->Dynamic->Dynamic = CFFI.load("lime", "lime_hb_buffer_get_glyph_infos", 2); private static var lime_hb_buffer_get_glyph_positions:Dynamic->Dynamic->Dynamic = CFFI.load("lime", "lime_hb_buffer_get_glyph_positions", 2); private static var lime_hb_buffer_get_language:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_buffer_get_language", 1); private static var lime_hb_buffer_get_length:Dynamic->Int = CFFI.load("lime", "lime_hb_buffer_get_length", 1); private static var lime_hb_buffer_get_replacement_codepoint:Dynamic->Int = CFFI.load("lime", "lime_hb_buffer_get_replacement_codepoint", 1); private static var lime_hb_buffer_get_script:Dynamic->Int = CFFI.load("lime", "lime_hb_buffer_get_script", 1); private static var lime_hb_buffer_get_segment_properties:Dynamic->Dynamic->Void = CFFI.load("lime", "lime_hb_buffer_get_segment_properties", 2); private static var lime_hb_buffer_guess_segment_properties:Dynamic->Void = CFFI.load("lime", "lime_hb_buffer_guess_segment_properties", 1); private static var lime_hb_buffer_normalize_glyphs:Dynamic->Void = CFFI.load("lime", "lime_hb_buffer_normalize_glyphs", 1); private static var lime_hb_buffer_preallocate:Dynamic->Int->Bool = CFFI.load("lime", "lime_hb_buffer_preallocate", 2); private static var lime_hb_buffer_reset:Dynamic->Void = CFFI.load("lime", "lime_hb_buffer_reset", 1); private static var lime_hb_buffer_reverse:Dynamic->Void = CFFI.load("lime", "lime_hb_buffer_reverse", 1); private static var lime_hb_buffer_reverse_clusters:Dynamic->Void = CFFI.load("lime", "lime_hb_buffer_reverse_clusters", 1); private static var lime_hb_buffer_serialize_format_from_string:String->Int = CFFI.load("lime", "lime_hb_buffer_serialize_format_from_string", 1); private static var lime_hb_buffer_serialize_format_to_string:Int->Dynamic = CFFI.load("lime", "lime_hb_buffer_serialize_format_to_string", 1); private static var lime_hb_buffer_serialize_list_formats:Void->Dynamic = CFFI.load("lime", "lime_hb_buffer_serialize_list_formats", 0); private static var lime_hb_buffer_set_cluster_level:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_buffer_set_cluster_level", 2); private static var lime_hb_buffer_set_content_type:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_buffer_set_content_type", 2); private static var lime_hb_buffer_set_direction:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_buffer_set_direction", 2); private static var lime_hb_buffer_set_flags:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_buffer_set_flags", 2); private static var lime_hb_buffer_set_language:Dynamic->Dynamic->Void = CFFI.load("lime", "lime_hb_buffer_set_language", 2); private static var lime_hb_buffer_set_length:Dynamic->Int->Bool = CFFI.load("lime", "lime_hb_buffer_set_length", 2); private static var lime_hb_buffer_set_replacement_codepoint:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_buffer_set_replacement_codepoint", 2); private static var lime_hb_buffer_set_script:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_buffer_set_script", 2); private static var lime_hb_buffer_set_segment_properties:Dynamic->Dynamic->Void = CFFI.load("lime", "lime_hb_buffer_set_segment_properties", 2); private static var lime_hb_face_create:Dynamic->Int->Dynamic = CFFI.load("lime", "lime_hb_face_create", 2); private static var lime_hb_face_get_empty:Void->Dynamic = CFFI.load("lime", "lime_hb_face_get_empty", 0); private static var lime_hb_face_get_glyph_count:Dynamic->Int = CFFI.load("lime", "lime_hb_face_get_glyph_count", 1); private static var lime_hb_face_get_index:Dynamic->Int = CFFI.load("lime", "lime_hb_face_get_index", 1); private static var lime_hb_face_get_upem:Dynamic->Int = CFFI.load("lime", "lime_hb_face_get_upem", 1); private static var lime_hb_face_is_immutable:Dynamic->Bool = CFFI.load("lime", "lime_hb_face_is_immutable", 1); private static var lime_hb_face_make_immutable:Dynamic->Void = CFFI.load("lime", "lime_hb_face_make_immutable", 1); private static var lime_hb_face_reference_blob:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_face_reference_blob", 1); private static var lime_hb_face_reference_table:Dynamic->Int->Dynamic = CFFI.load("lime", "lime_hb_face_reference_table", 2); private static var lime_hb_face_set_glyph_count:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_face_set_glyph_count", 2); private static var lime_hb_face_set_index:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_face_set_index", 2); private static var lime_hb_face_set_upem:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_face_set_upem", 2); private static var lime_hb_feature_from_string:String->Dynamic = CFFI.load("lime", "lime_hb_feature_from_string", 1); private static var lime_hb_feature_to_string:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_feature_to_string", 1); private static var lime_hb_font_add_glyph_origin_for_direction:Dynamic->Int->Int->Int->Int->Void = CFFI.load("lime", "lime_hb_font_add_glyph_origin_for_direction", 5); private static var lime_hb_font_create:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_font_create", 1); private static var lime_hb_font_create_sub_font:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_font_create_sub_font", 1); private static var lime_hb_font_get_empty:Void->Dynamic = CFFI.load("lime", "lime_hb_font_get_empty", 0); private static var lime_hb_font_get_face:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_font_get_face", 1); private static var lime_hb_font_get_glyph_advance_for_direction:Dynamic->Int->Int->Dynamic = CFFI.load("lime", "lime_hb_font_get_glyph_advance_for_direction", 3); private static var lime_hb_font_get_glyph_kerning_for_direction:Dynamic->Int->Int->Int->Dynamic = CFFI.load("lime", "lime_hb_font_get_glyph_kerning_for_direction", 4); private static var lime_hb_font_get_glyph_origin_for_direction:Dynamic->Int->Int->Dynamic = CFFI.load("lime", "lime_hb_font_get_glyph_origin_for_direction", 3); private static var lime_hb_font_get_parent:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_font_get_parent", 1); private static var lime_hb_font_get_ppem:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_font_get_ppem", 1); private static var lime_hb_font_get_scale:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_font_get_scale", 1); private static var lime_hb_font_glyph_from_string:Dynamic->String->Int = CFFI.load("lime", "lime_hb_font_glyph_from_string", 2); private static var lime_hb_font_glyph_to_string:Dynamic->Int->Dynamic = CFFI.load("lime", "lime_hb_font_glyph_to_string", 2); private static var lime_hb_font_is_immutable:Dynamic->Bool = CFFI.load("lime", "lime_hb_font_is_immutable", 1); private static var lime_hb_font_make_immutable:Dynamic->Void = CFFI.load("lime", "lime_hb_font_make_immutable", 1); private static var lime_hb_font_set_ppem:Dynamic->Int->Int->Void = CFFI.load("lime", "lime_hb_font_set_ppem", 3); private static var lime_hb_font_set_scale:Dynamic->Int->Int->Void = CFFI.load("lime", "lime_hb_font_set_scale", 3); private static var lime_hb_font_subtract_glyph_origin_for_direction:Dynamic->Int->Int->Int->Int->Void = CFFI.load("lime", "lime_hb_font_subtract_glyph_origin_for_direction", 5); private static var lime_hb_ft_font_create:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_ft_font_create", 1); private static var lime_hb_ft_font_create_referenced:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_ft_font_create_referenced", 1); private static var lime_hb_ft_font_get_load_flags:Dynamic->Int = CFFI.load("lime", "lime_hb_ft_font_get_load_flags", 1); private static var lime_hb_ft_font_set_load_flags:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_ft_font_set_load_flags", 2); private static var lime_hb_language_from_string:String->Dynamic = CFFI.load("lime", "lime_hb_language_from_string", 1); private static var lime_hb_language_get_default:Void->Dynamic = CFFI.load("lime", "lime_hb_language_get_default", 0); private static var lime_hb_language_to_string:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_language_to_string", 1); private static var lime_hb_segment_properties_equal:Dynamic->Dynamic->Bool = CFFI.load("lime", "lime_hb_segment_properties_equal", 2); private static var lime_hb_segment_properties_hash:Dynamic->Int = CFFI.load("lime", "lime_hb_segment_properties_hash", 1); private static var lime_hb_set_add:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_set_add", 2); private static var lime_hb_set_add_range:Dynamic->Int->Int->Void = CFFI.load("lime", "lime_hb_set_add_range", 3); private static var lime_hb_set_allocation_successful:Dynamic->Bool = CFFI.load("lime", "lime_hb_set_allocation_successful", 1); private static var lime_hb_set_clear:Dynamic->Void = CFFI.load("lime", "lime_hb_set_clear", 1); private static var lime_hb_set_create:Void->Dynamic = CFFI.load("lime", "lime_hb_set_create", 0); private static var lime_hb_set_del:Dynamic->Int->Void = CFFI.load("lime", "lime_hb_set_del", 2); private static var lime_hb_set_del_range:Dynamic->Int->Int->Void = CFFI.load("lime", "lime_hb_set_del_range", 3); private static var lime_hb_set_get_empty:Void->Dynamic = CFFI.load("lime", "lime_hb_set_get_empty", 0); private static var lime_hb_set_get_max:Dynamic->Int = CFFI.load("lime", "lime_hb_set_get_max", 1); private static var lime_hb_set_get_min:Dynamic->Int = CFFI.load("lime", "lime_hb_set_get_min", 1); private static var lime_hb_set_get_population:Dynamic->Int = CFFI.load("lime", "lime_hb_set_get_population", 1); private static var lime_hb_set_has:Dynamic->Int->Bool = CFFI.load("lime", "lime_hb_set_has", 2); private static var lime_hb_set_intersect:Dynamic->Dynamic->Void = CFFI.load("lime", "lime_hb_set_intersect", 2); private static var lime_hb_set_invert:Dynamic->Void = CFFI.load("lime", "lime_hb_set_invert", 1); private static var lime_hb_set_is_empty:Dynamic->Bool = CFFI.load("lime", "lime_hb_set_is_empty", 1); private static var lime_hb_set_is_equal:Dynamic->Dynamic->Bool = CFFI.load("lime", "lime_hb_set_is_equal", 2); private static var lime_hb_set_next:Dynamic->Int = CFFI.load("lime", "lime_hb_set_next", 1); private static var lime_hb_set_next_range:Dynamic->Dynamic = CFFI.load("lime", "lime_hb_set_next_range", 1); private static var lime_hb_set_set:Dynamic->Dynamic->Void = CFFI.load("lime", "lime_hb_set_set", 2); private static var lime_hb_set_subtract:Dynamic->Dynamic->Void = CFFI.load("lime", "lime_hb_set_subtract", 2); private static var lime_hb_set_symmetric_difference:Dynamic->Dynamic->Void = CFFI.load("lime", "lime_hb_set_symmetric_difference", 2); private static var lime_hb_set_union:Dynamic->Dynamic->Void = CFFI.load("lime", "lime_hb_set_union", 2); private static var lime_hb_shape:Dynamic->Dynamic->Dynamic->Void = CFFI.load("lime", "lime_hb_shape", 3); #end #if hl @:hlNative("lime", "hl_hb_blob_create") private static function lime_hb_blob_create(data:DataPointer, length:Int, memoryMode:Int):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_blob_create_sub_blob") private static function lime_hb_blob_create_sub_blob(parent:CFFIPointer, offset:Int, length:Int):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_blob_get_data") private static function lime_hb_blob_get_data(blob:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_hb_blob_get_data_writable") private static function lime_hb_blob_get_data_writable(blob:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_hb_blob_get_empty") private static function lime_hb_blob_get_empty():CFFIPointer { return null; } @:hlNative("lime", "hl_hb_blob_get_length") private static function lime_hb_blob_get_length(blob:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_blob_is_immutable") private static function lime_hb_blob_is_immutable(blob:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_hb_blob_make_immutable") private static function lime_hb_blob_make_immutable(blob:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_buffer_add") private static function lime_hb_buffer_add(buffer:CFFIPointer, codepoint:Int, cluster:Int):Void {} @:hlNative("lime", "hl_hb_buffer_add_hxstring") private static function lime_hb_buffer_add_hxstring(buffer:CFFIPointer, text:String, itemOffset:Int, itemLength:Int):Void {} @:hlNative("lime", "hl_hb_buffer_add_codepoints") private static function lime_hb_buffer_add_codepoints(buffer:CFFIPointer, text:DataPointer, textLength:Int, itemOffset:Int, itemLength:Int):Void {} @:hlNative("lime", "hl_hb_buffer_add_utf8") private static function lime_hb_buffer_add_utf8(buffer:CFFIPointer, text:String, itemOffset:Int, itemLength:Int):Void {} @:hlNative("lime", "hl_hb_buffer_add_utf16") private static function lime_hb_buffer_add_utf16(buffer:CFFIPointer, text:DataPointer, textLength:Int, itemOffset:Int, itemLength:Int):Void {} @:hlNative("lime", "hl_hb_buffer_add_utf32") private static function lime_hb_buffer_add_utf32(buffer:CFFIPointer, text:DataPointer, textLength:Int, itemOffset:Int, itemLength:Int):Void {} @:hlNative("lime", "hl_hb_buffer_allocation_successful") private static function lime_hb_buffer_allocation_successful(buffer:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_hb_buffer_clear_contents") private static function lime_hb_buffer_clear_contents(buffer:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_buffer_create") private static function lime_hb_buffer_create():CFFIPointer { return null; } @:hlNative("lime", "hl_hb_buffer_get_cluster_level") private static function lime_hb_buffer_get_cluster_level(buffer:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_buffer_get_content_type") private static function lime_hb_buffer_get_content_type(buffer:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_buffer_get_direction") private static function lime_hb_buffer_get_direction(buffer:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_buffer_get_empty") private static function lime_hb_buffer_get_empty():CFFIPointer { return null; } @:hlNative("lime", "hl_hb_buffer_get_flags") private static function lime_hb_buffer_get_flags(buffer:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_buffer_get_glyph_infos") private static function lime_hb_buffer_get_glyph_infos(buffer:CFFIPointer, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_hb_buffer_get_glyph_positions") private static function lime_hb_buffer_get_glyph_positions(buffer:CFFIPointer, bytes:Bytes):Bytes { return null; } @:hlNative("lime", "hl_hb_buffer_get_language") private static function lime_hb_buffer_get_language(buffer:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_buffer_get_length") private static function lime_hb_buffer_get_length(buffer:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_buffer_get_replacement_codepoint") private static function lime_hb_buffer_get_replacement_codepoint(buffer:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_buffer_get_script") private static function lime_hb_buffer_get_script(buffer:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_buffer_get_segment_properties") private static function lime_hb_buffer_get_segment_properties(buffer:CFFIPointer, props:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_buffer_guess_segment_properties") private static function lime_hb_buffer_guess_segment_properties(buffer:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_buffer_normalize_glyphs") private static function lime_hb_buffer_normalize_glyphs(buffer:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_buffer_preallocate") private static function lime_hb_buffer_preallocate(buffer:CFFIPointer, size:Int):Bool { return false; } @:hlNative("lime", "hl_hb_buffer_reset") private static function lime_hb_buffer_reset(buffer:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_buffer_reverse") private static function lime_hb_buffer_reverse(buffer:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_buffer_reverse_clusters") private static function lime_hb_buffer_reverse_clusters(buffer:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_buffer_serialize_format_from_string") private static function lime_hb_buffer_serialize_format_from_string(str:String):Int { return 0; } @:hlNative("lime", "hl_hb_buffer_serialize_format_to_string") private static function lime_hb_buffer_serialize_format_to_string(format:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_hb_buffer_serialize_list_formats") private static function lime_hb_buffer_serialize_list_formats():hl.NativeArray { return null; } @:hlNative("lime", "hl_hb_buffer_set_cluster_level") private static function lime_hb_buffer_set_cluster_level(buffer:CFFIPointer, clusterLevel:Int):Void {} @:hlNative("lime", "hl_hb_buffer_set_content_type") private static function lime_hb_buffer_set_content_type(buffer:CFFIPointer, contentType:Int):Void {} @:hlNative("lime", "hl_hb_buffer_set_direction") private static function lime_hb_buffer_set_direction(buffer:CFFIPointer, direction:Int):Void {} @:hlNative("lime", "hl_hb_buffer_set_flags") private static function lime_hb_buffer_set_flags(buffer:CFFIPointer, flags:Int):Void {} @:hlNative("lime", "hl_hb_buffer_set_language") private static function lime_hb_buffer_set_language(buffer:CFFIPointer, language:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_buffer_set_length") private static function lime_hb_buffer_set_length(buffer:CFFIPointer, length:Int):Bool { return false; } @:hlNative("lime", "hl_hb_buffer_set_replacement_codepoint") private static function lime_hb_buffer_set_replacement_codepoint(buffer:CFFIPointer, replacement:Int):Void {} @:hlNative("lime", "hl_hb_buffer_set_script") private static function lime_hb_buffer_set_script(buffer:CFFIPointer, script:Int):Void {} @:hlNative("lime", "hl_hb_buffer_set_segment_properties") private static function lime_hb_buffer_set_segment_properties(buffer:CFFIPointer, props:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_face_create") private static function lime_hb_face_create(blob:CFFIPointer, index:Int):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_face_get_empty") private static function lime_hb_face_get_empty():CFFIPointer { return null; } @:hlNative("lime", "hl_hb_face_get_glyph_count") private static function lime_hb_face_get_glyph_count(face:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_face_get_index") private static function lime_hb_face_get_index(face:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_face_get_upem") private static function lime_hb_face_get_upem(face:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_face_is_immutable") private static function lime_hb_face_is_immutable(face:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_hb_face_make_immutable") private static function lime_hb_face_make_immutable(face:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_face_reference_blob") private static function lime_hb_face_reference_blob(face:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_face_reference_table") private static function lime_hb_face_reference_table(face:CFFIPointer, tag:Int):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_face_set_glyph_count") private static function lime_hb_face_set_glyph_count(face:CFFIPointer, glyphCount:Int):Void {} @:hlNative("lime", "hl_hb_face_set_index") private static function lime_hb_face_set_index(face:CFFIPointer, index:Int):Void {} @:hlNative("lime", "hl_hb_face_set_upem") private static function lime_hb_face_set_upem(face:CFFIPointer, upem:Int):Void {} @:hlNative("lime", "hl_hb_feature_from_string") private static function lime_hb_feature_from_string(str:String):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_feature_to_string") private static function lime_hb_feature_to_string(feature:CFFIPointer):hl.Bytes { return null; } @:hlNative("lime", "hl_hb_font_add_glyph_origin_for_direction") private static function lime_hb_font_add_glyph_origin_for_direction(font:CFFIPointer, glyph:Int, direction:Int, x:Int, y:Int):Void {} @:hlNative("lime", "hl_hb_font_create") private static function lime_hb_font_create(face:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_font_create_sub_font") private static function lime_hb_font_create_sub_font(parent:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_font_get_empty") private static function lime_hb_font_get_empty():CFFIPointer { return null; } @:hlNative("lime", "hl_hb_font_get_face") private static function lime_hb_font_get_face(font:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_font_get_glyph_advance_for_direction") private static function lime_hb_font_get_glyph_advance_for_direction(font:CFFIPointer, glyph:Int, direction:Int, out:Vector2):Vector2 { return null; } @:hlNative("lime", "hl_hb_font_get_glyph_kerning_for_direction") private static function lime_hb_font_get_glyph_kerning_for_direction(font:CFFIPointer, firstGlyph:Int, secondGlyph:Int, direction:Int, out:Vector2):Vector2 { return null; } @:hlNative("lime", "hl_hb_font_get_glyph_origin_for_direction") private static function lime_hb_font_get_glyph_origin_for_direction(font:CFFIPointer, glyph:Int, direction:Int, out:Vector2):Vector2 { return null; } @:hlNative("lime", "hl_hb_font_get_parent") private static function lime_hb_font_get_parent(font:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_font_get_ppem") private static function lime_hb_font_get_ppem(font:CFFIPointer, out:Vector2):Vector2 { return null; } @:hlNative("lime", "hl_hb_font_get_scale") private static function lime_hb_font_get_scale(font:CFFIPointer, out:Vector2):Vector2 { return null; } @:hlNative("lime", "hl_hb_font_glyph_from_string") private static function lime_hb_font_glyph_from_string(font:CFFIPointer, s:String):Int { return 0; } @:hlNative("lime", "hl_hb_font_glyph_to_string") private static function lime_hb_font_glyph_to_string(font:CFFIPointer, codepoint:Int):hl.Bytes { return null; } @:hlNative("lime", "hl_hb_font_is_immutable") private static function lime_hb_font_is_immutable(font:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_hb_font_make_immutable") private static function lime_hb_font_make_immutable(font:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_font_set_ppem") private static function lime_hb_font_set_ppem(font:CFFIPointer, xppem:Int, yppem:Int):Void {} @:hlNative("lime", "hl_hb_font_set_scale") private static function lime_hb_font_set_scale(font:CFFIPointer, xScale:Int, yScale:Int):Void {} @:hlNative("lime", "hl_hb_font_subtract_glyph_origin_for_direction") private static function lime_hb_font_subtract_glyph_origin_for_direction(font:CFFIPointer, glyph:Int, direction:Int, x:Int, y:Int):Void {} @:hlNative("lime", "hl_hb_ft_font_create") private static function lime_hb_ft_font_create(font:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_ft_font_create_referenced") private static function lime_hb_ft_font_create_referenced(font:CFFIPointer):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_ft_font_get_load_flags") private static function lime_hb_ft_font_get_load_flags(font:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_ft_font_set_load_flags") private static function lime_hb_ft_font_set_load_flags(font:CFFIPointer, loadFlags:Int):Void {} @:hlNative("lime", "hl_hb_language_from_string") private static function lime_hb_language_from_string(str:String):CFFIPointer { return null; } @:hlNative("lime", "hl_hb_language_get_default") private static function lime_hb_language_get_default():CFFIPointer { return null; } @:hlNative("lime", "hl_hb_language_to_string") private static function lime_hb_language_to_string(language:CFFIPointer):hl.Bytes { return null; } @:hlNative("lime", "hl_hb_segment_properties_equal") private static function lime_hb_segment_properties_equal(a:CFFIPointer, b:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_hb_segment_properties_hash") private static function lime_hb_segment_properties_hash(p:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_set_add") private static function lime_hb_set_add(set:CFFIPointer, codepoint:Int):Void {} @:hlNative("lime", "hl_hb_set_add_range") private static function lime_hb_set_add_range(set:CFFIPointer, first:Int, last:Int):Void {} @:hlNative("lime", "hl_hb_set_allocation_successful") private static function lime_hb_set_allocation_successful(set:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_hb_set_clear") private static function lime_hb_set_clear(set:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_set_create") private static function lime_hb_set_create():CFFIPointer { return null; } @:hlNative("lime", "hl_hb_set_del") private static function lime_hb_set_del(set:CFFIPointer, codepoint:Int):Void {} @:hlNative("lime", "hl_hb_set_del_range") private static function lime_hb_set_del_range(set:CFFIPointer, first:Int, last:Int):Void {} @:hlNative("lime", "hl_hb_set_get_empty") private static function lime_hb_set_get_empty():CFFIPointer { return null; } @:hlNative("lime", "hl_hb_set_get_max") private static function lime_hb_set_get_max(set:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_set_get_min") private static function lime_hb_set_get_min(set:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_set_get_population") private static function lime_hb_set_get_population(set:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_set_has") private static function lime_hb_set_has(set:CFFIPointer, codepoint:Int):Bool { return false; } @:hlNative("lime", "hl_hb_set_intersect") private static function lime_hb_set_intersect(set:CFFIPointer, other:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_set_invert") private static function lime_hb_set_invert(set:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_set_is_empty") private static function lime_hb_set_is_empty(set:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_hb_set_is_equal") private static function lime_hb_set_is_equal(set:CFFIPointer, other:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_hb_set_next") private static function lime_hb_set_next(set:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_hb_set_next_range") private static function lime_hb_set_next_range(set:CFFIPointer, out:Vector2):Vector2 { return null; } @:hlNative("lime", "hl_hb_set_set") private static function lime_hb_set_set(set:CFFIPointer, other:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_set_subtract") private static function lime_hb_set_subtract(set:CFFIPointer, other:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_set_symmetric_difference") private static function lime_hb_set_symmetric_difference(set:CFFIPointer, other:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_set_union") private static function lime_hb_set_union(set:CFFIPointer, other:CFFIPointer):Void {} @:hlNative("lime", "hl_hb_shape") private static function lime_hb_shape(font:CFFIPointer, buffer:CFFIPointer, features:hl.NativeArray):Void {} #end #end #if (lime_cffi && !macro && lime_vorbis) #if (cpp && !cppia) #if (disable_cffi || haxe_ver < "3.4.0") @:cffi private static function lime_vorbis_file_bitrate(vorbisFile:Dynamic, bitstream:Int):Int; @:cffi private static function lime_vorbis_file_bitrate_instant(vorbisFile:Dynamic):Int; @:cffi private static function lime_vorbis_file_clear(vorbisFile:Dynamic):Void; @:cffi private static function lime_vorbis_file_comment(vorbisFile:Dynamic, bitstream:Int):Dynamic; @:cffi private static function lime_vorbis_file_crosslap(vorbisFile:Dynamic, otherVorbisFile:Dynamic):Dynamic; @:cffi private static function lime_vorbis_file_from_bytes(bytes:Dynamic):Dynamic; @:cffi private static function lime_vorbis_file_from_file(path:String):Dynamic; @:cffi private static function lime_vorbis_file_info(vorbisFile:Dynamic, bitstream:Int):Dynamic; @:cffi private static function lime_vorbis_file_pcm_seek(vorbisFile:Dynamic, posLow:Dynamic, posHigh:Dynamic):Int; @:cffi private static function lime_vorbis_file_pcm_seek_lap(vorbisFile:Dynamic, posLow:Dynamic, posHigh:Dynamic):Int; @:cffi private static function lime_vorbis_file_pcm_seek_page(vorbisFile:Dynamic, posLow:Dynamic, posHigh:Dynamic):Int; @:cffi private static function lime_vorbis_file_pcm_seek_page_lap(vorbisFile:Dynamic, posLow:Dynamic, posHigh:Dynamic):Int; @:cffi private static function lime_vorbis_file_raw_seek(vorbisFile:Dynamic, posLow:Dynamic, posHigh:Dynamic):Int; @:cffi private static function lime_vorbis_file_raw_seek_lap(vorbisFile:Dynamic, posLow:Dynamic, posHigh:Dynamic):Int; @:cffi private static function lime_vorbis_file_pcm_tell(vorbisFile:Dynamic):Dynamic; @:cffi private static function lime_vorbis_file_pcm_total(vorbisFile:Dynamic, bitstream:Int):Dynamic; @:cffi private static function lime_vorbis_file_raw_tell(vorbisFile:Dynamic):Dynamic; @:cffi private static function lime_vorbis_file_raw_total(vorbisFile:Dynamic, bitstream:Int):Dynamic; @:cffi private static function lime_vorbis_file_read(vorbisFile:Dynamic, buffer:Dynamic, position:Int, length:Int, bigendianp:Bool, word:Int, signed:Bool):Dynamic; @:cffi private static function lime_vorbis_file_read_float(vorbisFile:Dynamic, pcmChannels:Dynamic, samples:Int):Dynamic; @:cffi private static function lime_vorbis_file_seekable(vorbisFile:Dynamic):Bool; @:cffi private static function lime_vorbis_file_serial_number(vorbisFile:Dynamic, bitstream:Int):Int; @:cffi private static function lime_vorbis_file_streams(vorbisFile:Dynamic):Int; @:cffi private static function lime_vorbis_file_time_seek(vorbisFile:Dynamic, s:Float):Int; @:cffi private static function lime_vorbis_file_time_seek_lap(vorbisFile:Dynamic, s:Float):Int; @:cffi private static function lime_vorbis_file_time_seek_page(vorbisFile:Dynamic, s:Float):Int; @:cffi private static function lime_vorbis_file_time_seek_page_lap(vorbisFile:Dynamic, s:Float):Int; @:cffi private static function lime_vorbis_file_time_tell(vorbisFile:Dynamic):Float; @:cffi private static function lime_vorbis_file_time_total(vorbisFile:Dynamic, bitstream:Int):Float; #else private static var lime_vorbis_file_bitrate = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_bitrate", "oii", false)); private static var lime_vorbis_file_bitrate_instant = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_bitrate_instant", "oi", false)); private static var lime_vorbis_file_clear = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_clear", "ov", false)); private static var lime_vorbis_file_comment = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_comment", "oio", false)); private static var lime_vorbis_file_crosslap = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_crosslap", "ooo", false)); private static var lime_vorbis_file_from_bytes = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_from_bytes", "oo", false)); private static var lime_vorbis_file_from_file = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_from_file", "so", false)); private static var lime_vorbis_file_info = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_info", "oio", false)); private static var lime_vorbis_file_pcm_seek = new cpp.Callablecpp.Object->cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_pcm_seek", "oooi", false)); private static var lime_vorbis_file_pcm_seek_lap = new cpp.Callablecpp.Object->cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_pcm_seek_lap", "oooi", false)); private static var lime_vorbis_file_pcm_seek_page = new cpp.Callablecpp.Object->cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_pcm_seek_page", "oooi", false)); private static var lime_vorbis_file_pcm_seek_page_lap = new cpp.Callablecpp.Object->cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_pcm_seek_page_lap", "oooi", false)); private static var lime_vorbis_file_raw_seek = new cpp.Callablecpp.Object->cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_raw_seek", "oooi", false)); private static var lime_vorbis_file_raw_seek_lap = new cpp.Callablecpp.Object->cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_raw_seek_lap", "oooi", false)); private static var lime_vorbis_file_pcm_tell = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_pcm_tell", "oo", false)); private static var lime_vorbis_file_pcm_total = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_pcm_total", "oio", false)); private static var lime_vorbis_file_raw_tell = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_raw_tell", "oo", false)); private static var lime_vorbis_file_raw_total = new cpp.CallableInt->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_raw_total", "oio", false)); private static var lime_vorbis_file_read = new cpp.Callablecpp.Object->Int->Int->Bool->Int->Bool->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_read", "ooiibibo", false)); private static var lime_vorbis_file_read_float = new cpp.Callablecpp.Object->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_read_float", "ooio", false)); private static var lime_vorbis_file_seekable = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_seekable", "ob", false)); private static var lime_vorbis_file_serial_number = new cpp.CallableInt->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_serial_number", "oii", false)); private static var lime_vorbis_file_streams = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_streams", "oi", false)); private static var lime_vorbis_file_time_seek = new cpp.CallableFloat->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_time_seek", "odi", false)); private static var lime_vorbis_file_time_seek_lap = new cpp.CallableFloat->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_time_seek_lap", "odi", false)); private static var lime_vorbis_file_time_seek_page = new cpp.CallableFloat->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_time_seek_page", "odi", false)); private static var lime_vorbis_file_time_seek_page_lap = new cpp.CallableFloat->Int>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_time_seek_page_lap", "odi", false)); private static var lime_vorbis_file_time_tell = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_time_tell", "od", false)); private static var lime_vorbis_file_time_total = new cpp.CallableInt->Float>(cpp.Prime._loadPrime("lime", "lime_vorbis_file_time_total", "oid", false)); #end #end #if (neko || cppia) private static var lime_vorbis_file_bitrate = CFFI.load("lime", "lime_vorbis_file_bitrate", 2); private static var lime_vorbis_file_bitrate_instant = CFFI.load("lime", "lime_vorbis_file_bitrate_instant", 1); private static var lime_vorbis_file_clear = CFFI.load("lime", "lime_vorbis_file_clear", 1); private static var lime_vorbis_file_comment = CFFI.load("lime", "lime_vorbis_file_comment", 2); private static var lime_vorbis_file_crosslap = CFFI.load("lime", "lime_vorbis_file_crosslap", 2); private static var lime_vorbis_file_from_bytes = CFFI.load("lime", "lime_vorbis_file_from_bytes", 1); private static var lime_vorbis_file_from_file = CFFI.load("lime", "lime_vorbis_file_from_file", 1); private static var lime_vorbis_file_info = CFFI.load("lime", "lime_vorbis_file_info", 2); private static var lime_vorbis_file_pcm_seek = CFFI.load("lime", "lime_vorbis_file_pcm_seek", 3); private static var lime_vorbis_file_pcm_seek_lap = CFFI.load("lime", "lime_vorbis_file_pcm_seek_lap", 3); private static var lime_vorbis_file_pcm_seek_page = CFFI.load("lime", "lime_vorbis_file_pcm_seek_page", 3); private static var lime_vorbis_file_pcm_seek_page_lap = CFFI.load("lime", "lime_vorbis_file_pcm_seek_page_lap", 3); private static var lime_vorbis_file_raw_seek = CFFI.load("lime", "lime_vorbis_file_raw_seek", 3); private static var lime_vorbis_file_raw_seek_lap = CFFI.load("lime", "lime_vorbis_file_raw_seek_lap", 3); private static var lime_vorbis_file_pcm_tell = CFFI.load("lime", "lime_vorbis_file_pcm_tell", 1); private static var lime_vorbis_file_pcm_total = CFFI.load("lime", "lime_vorbis_file_pcm_total", 2); private static var lime_vorbis_file_raw_tell = CFFI.load("lime", "lime_vorbis_file_raw_tell", 1); private static var lime_vorbis_file_raw_total = CFFI.load("lime", "lime_vorbis_file_raw_total", 2); private static var lime_vorbis_file_read = CFFI.load("lime", "lime_vorbis_file_read", -1); private static var lime_vorbis_file_read_float = CFFI.load("lime", "lime_vorbis_file_read_float", 3); private static var lime_vorbis_file_seekable = CFFI.load("lime", "lime_vorbis_file_seekable", 1); private static var lime_vorbis_file_serial_number = CFFI.load("lime", "lime_vorbis_file_serial_number", 2); private static var lime_vorbis_file_streams = CFFI.load("lime", "lime_vorbis_file_streams", 1); private static var lime_vorbis_file_time_seek = CFFI.load("lime", "lime_vorbis_file_time_seek", 2); private static var lime_vorbis_file_time_seek_lap = CFFI.load("lime", "lime_vorbis_file_time_seek_lap", 2); private static var lime_vorbis_file_time_seek_page = CFFI.load("lime", "lime_vorbis_file_time_seek_page", 2); private static var lime_vorbis_file_time_seek_page_lap = CFFI.load("lime", "lime_vorbis_file_time_seek_page_lap", 2); private static var lime_vorbis_file_time_tell = CFFI.load("lime", "lime_vorbis_file_time_tell", 1); private static var lime_vorbis_file_time_total = CFFI.load("lime", "lime_vorbis_file_time_total", 2); #end #if hl @:hlNative("lime", "hl_vorbis_file_bitrate") private static function lime_vorbis_file_bitrate(vorbisFile:CFFIPointer, bitstream:Int):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_bitrate_instant") private static function lime_vorbis_file_bitrate_instant(vorbisFile:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_clear") private static function lime_vorbis_file_clear(vorbisFile:CFFIPointer):Void {} @:hlNative("lime", "hl_vorbis_file_comment") private static function lime_vorbis_file_comment(vorbisFile:CFFIPointer, bitstream:Int):Dynamic { return null; } @:hlNative("lime", "hl_vorbis_file_crosslap") private static function lime_vorbis_file_crosslap(vorbisFile:CFFIPointer, otherVorbisFile:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_from_bytes") private static function lime_vorbis_file_from_bytes(bytes:Bytes):CFFIPointer { return null; } @:hlNative("lime", "hl_vorbis_file_from_file") private static function lime_vorbis_file_from_file(path:String):CFFIPointer { return null; } @:hlNative("lime", "hl_vorbis_file_info") private static function lime_vorbis_file_info(vorbisFile:CFFIPointer, bitstream:Int):Dynamic { return null; } @:hlNative("lime", "hl_vorbis_file_pcm_seek") private static function lime_vorbis_file_pcm_seek(vorbisFile:CFFIPointer, posLow:Int, posHigh:Int):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_pcm_seek_lap") private static function lime_vorbis_file_pcm_seek_lap(vorbisFile:CFFIPointer, posLow:Int, posHigh:Int):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_pcm_seek_page") private static function lime_vorbis_file_pcm_seek_page(vorbisFile:CFFIPointer, posLow:Int, posHigh:Int):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_pcm_seek_page_lap") private static function lime_vorbis_file_pcm_seek_page_lap(vorbisFile:CFFIPointer, posLow:Int, posHigh:Int):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_raw_seek") private static function lime_vorbis_file_raw_seek(vorbisFile:CFFIPointer, posLow:Int, posHigh:Int):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_raw_seek_lap") private static function lime_vorbis_file_raw_seek_lap(vorbisFile:CFFIPointer, posLow:Int, posHigh:Int):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_pcm_tell") private static function lime_vorbis_file_pcm_tell(vorbisFile:CFFIPointer):Dynamic { return null; } @:hlNative("lime", "hl_vorbis_file_pcm_total") private static function lime_vorbis_file_pcm_total(vorbisFile:CFFIPointer, bitstream:Int):Dynamic { return null; } @:hlNative("lime", "hl_vorbis_file_raw_tell") private static function lime_vorbis_file_raw_tell(vorbisFile:CFFIPointer):Dynamic { return null; } @:hlNative("lime", "hl_vorbis_file_raw_total") private static function lime_vorbis_file_raw_total(vorbisFile:CFFIPointer, bitstream:Int):Dynamic { return null; } @:hlNative("lime", "hl_vorbis_file_read") private static function lime_vorbis_file_read(vorbisFile:CFFIPointer, buffer:Bytes, position:Int, length:Int, bigendianp:Bool, word:Int, signed:Bool):Dynamic { return null; } @:hlNative("lime", "hl_vorbis_file_read_float") private static function lime_vorbis_file_read_float(vorbisFile:CFFIPointer, pcmChannels:Bytes, samples:Int):Dynamic { return null; } @:hlNative("lime", "hl_vorbis_file_seekable") private static function lime_vorbis_file_seekable(vorbisFile:CFFIPointer):Bool { return false; } @:hlNative("lime", "hl_vorbis_file_serial_number") private static function lime_vorbis_file_serial_number(vorbisFile:CFFIPointer, bitstream:Int):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_streams") private static function lime_vorbis_file_streams(vorbisFile:CFFIPointer):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_time_seek") private static function lime_vorbis_file_time_seek(vorbisFile:CFFIPointer, s:Float):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_time_seek_lap") private static function lime_vorbis_file_time_seek_lap(vorbisFile:CFFIPointer, s:Float):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_time_seek_page") private static function lime_vorbis_file_time_seek_page(vorbisFile:CFFIPointer, s:Float):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_time_seek_page_lap") private static function lime_vorbis_file_time_seek_page_lap(vorbisFile:CFFIPointer, s:Float):Int { return 0; } @:hlNative("lime", "hl_vorbis_file_time_tell") private static function lime_vorbis_file_time_tell(vorbisFile:CFFIPointer):Float { return 0; } @:hlNative("lime", "hl_vorbis_file_time_total") private static function lime_vorbis_file_time_total(vorbisFile:CFFIPointer, bitstream:Int):Float { return 0; } #end #end } ================================================ FILE: src/lime/_internal/backend/native/NativeHTTPRequest.hx ================================================ package lime._internal.backend.native; import haxe.io.Bytes; import haxe.io.BytesBuffer; import haxe.Timer; import lime.app.Future; import lime.app.Promise; import lime.net.curl.CURL; import lime.net.curl.CURLCode; import lime.net.curl.CURLMulti; import lime.net.curl.CURLMultiCode; import lime.net.curl.CURLMultiMessage; import lime.net.HTTPRequest; import lime.net.HTTPRequestHeader; import lime.net.HTTPRequestMethod; import lime.system.ThreadPool; import lime.system.WorkOutput; #if sys #if haxe4 import sys.thread.Deque; #elseif cpp import cpp.vm.Deque; #elseif neko import neko.vm.Deque; #end import sys.FileSystem; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class NativeHTTPRequest { private static var activeInstances:Array; private static var localThreadPool:ThreadPool; private static var multi:CURLMulti; private static var multiInstances:Map; private static var multiProgressTimer:Timer; private static var multiThreadPool:ThreadPool; private static var multiThreadPoolRunning:Bool; #if (cpp || neko || hl) private static var multiAddHandle:Deque; #end private static var cookieList:Array; private var buffer:BytesBuffer = new BytesBuffer(); private var bytes:Bytes; private var bytesLoaded:Int; private var bytesTotal:Int; private var canceled:Bool; private var curl:CURL; private var parent:_IHTTPRequest; private var promise:Promise; private var writeBytesLoaded:Int; private var writeBytesTotal:Int; private var timeout:Timer; public function new() { curl = null; timeout = null; } public function cancel():Void { canceled = true; if (curl != null) { // This is probably run from a different thread if cURL is running // TODO // CURLEasy.cleanup (curl); // CURLEasy.reset (curl); // CURLEasy.perform (curl); } if (timeout != null) { timeout.stop(); timeout = null; } } public function init(parent:_IHTTPRequest):Void { this.parent = parent; } private function initRequest(uri:String, binary:Bool):Void { bytes = Bytes.alloc(0); bytesLoaded = 0; bytesTotal = 0; writeBytesLoaded = 0; writeBytesTotal = 0; if (curl == null) { curl = new CURL(); } else { curl.reset(); } var data = parent.data; var query = ""; if (data == null) { for (key in parent.formData.keys()) { if (query.length > 0) query += "&"; query += StringTools.urlEncode(key) + "=" + StringTools.urlEncode(Std.string(parent.formData.get(key))); } if (query != "") { if (parent.method == GET) { if (uri.indexOf("?") > -1) { uri += "&" + query; } else { uri += "?" + query; } query = ""; } else { data = Bytes.ofString(query); } } if (data != null && data.length == 0) data = null; } curl.setOption(URL, uri); switch (parent.method) { case HEAD: curl.setOption(NOBODY, true); case GET: curl.setOption(HTTPGET, true); case POST: curl.setOption(POST, true); if (data != null) { curl.setOption(INFILE, data); curl.setOption(INFILESIZE, data.length); curl.setOption(POSTFIELDSIZE, data.length); } else { curl.setOption(POSTFIELDSIZE, 0); } case PUT: curl.setOption(UPLOAD, true); if (data != null) { curl.setOption(INFILE, data); curl.setOption(INFILESIZE, data.length); } case _: curl.setOption(CUSTOMREQUEST, Std.string(parent.method)); if (data != null) { curl.setOption(INFILE, data); curl.setOption(INFILESIZE, data.length); } } curl.setOption(FOLLOWLOCATION, parent.followRedirects); curl.setOption(AUTOREFERER, true); var headers = []; headers.push("Expect: "); var contentType = null; for (header in cast(parent.headers, Array)) { if (header.name == "Content-Type") { contentType = header.value; } else { headers.push('${header.name}: ${header.value}'); } } if (parent.contentType != null) { contentType = parent.contentType; } if (contentType == null) { if (parent.data != null) { contentType = "application/octet-stream"; } else if (query != "") { contentType = "application/x-www-form-urlencoded"; } } if (contentType != null) { headers.push("Content-Type: " + contentType); } curl.setOption(HTTPHEADER, headers); curl.setOption(PROGRESSFUNCTION, curl_onProgress); curl.setOption(WRITEFUNCTION, curl_onWrite); if (parent.enableResponseHeaders) { parent.responseHeaders = []; curl.setOption(HEADERFUNCTION, curl_onHeader); } if (parent.manageCookies) { // an empty string means store cookies in memory // cookies are stored only for the current session curl.setOption(COOKIEFILE, ""); if (cookieList != null) { for (cookie in cookieList) { // pass in each stored cookie individually curl.setOption(COOKIELIST, cookie); } } } curl.setOption(SSL_VERIFYPEER, false); curl.setOption(SSL_VERIFYHOST, 0); curl.setOption(USERAGENT, parent.userAgent == null ? "libcurl-agent/1.0" : parent.userAgent); // curl.setOption (CONNECTTIMEOUT, 30); curl.setOption(NOSIGNAL, true); curl.setOption(TRANSFERTEXT, !binary); #if curl_verbose curl.setOption(VERBOSE, true); #end } public function loadData(uri:String, binary:Bool = true):Future { if (uri == null) { return cast Future.withError("The URI must not be null"); } var promise = new Promise(); this.promise = promise; canceled = false; if (uri.indexOf("http://") == -1 && uri.indexOf("https://") == -1) { if (localThreadPool == null) { localThreadPool = new ThreadPool(0, 1); localThreadPool.onProgress.add(localThreadPool_onProgress); localThreadPool.onComplete.add(localThreadPool_onComplete); localThreadPool.onError.add(localThreadPool_onError); } localThreadPool.run(localThreadPool_doWork, {instance: this, uri: uri}); } else { if (multi == null) { CURL.globalInit(CURL.GLOBAL_ALL); multi = new CURLMulti(); activeInstances = new Array(); multiInstances = new Map(); } initRequest(uri, binary); if (curl != null) { activeInstances.push(this); multiInstances.set(curl, this); #if (cpp || neko || hl) if (multiAddHandle == null) multiAddHandle = new Deque(); multiAddHandle.add(curl); #end if (multiThreadPool == null) { multiThreadPool = new ThreadPool(0, 1); multiThreadPool.onProgress.add(multiThreadPool_onProgress); multiThreadPool.onComplete.add(multiThreadPool_onComplete); } if (!multiThreadPoolRunning) { multiThreadPoolRunning = true; multiThreadPool.run(multiThreadPool_doWork, multi); } if (multiProgressTimer == null) { multiProgressTimer = new Timer(8); multiProgressTimer.run = multiProgressTimer_onRun; multiProgressTimer_onRun(); } } } return promise.future; } public function loadText(uri:String):Future { var promise = new Promise(); var future = loadData(uri, false); future.onProgress(promise.progress); future.onError(promise.error); future.onComplete(function(bytes) { if (bytes == null) { promise.complete(null); } else { promise.complete(bytes.getString(0, bytes.length)); } }); return promise.future; } private function buildBuffer() { bytes = buffer.getBytes(); return bytes; } // Event Handlers private function curl_onHeader(curl:CURL, header:String):Void { var parts = header.split(': '); if (parts.length == 2) { parent.responseHeaders.push(new HTTPRequestHeader(StringTools.trim(parts[0]), StringTools.trim(parts[1]))); } } private function curl_onProgress(curl:CURL, dltotal:Float, dlnow:Float, uptotal:Float, upnow:Float):Int { if (upnow > writeBytesLoaded || dlnow > writeBytesLoaded || uptotal > writeBytesTotal || dltotal > writeBytesTotal) { if (upnow > writeBytesLoaded) writeBytesLoaded = Std.int(upnow); if (dlnow > writeBytesLoaded) writeBytesLoaded = Std.int(dlnow); if (uptotal > writeBytesTotal) writeBytesTotal = Std.int(uptotal); if (dltotal > writeBytesTotal) writeBytesTotal = Std.int(dltotal); // Wrong thread // promise.progress (bytesLoaded, bytesTotal); } return 0; } private function curl_onWrite(curl:CURL, output:Bytes):Int { buffer.addBytes(output, 0, output.length); return output.length; } private static function localThreadPool_doWork(state:Dynamic, output:WorkOutput):Void { var instance:NativeHTTPRequest = state.instance; var path:String = state.uri; var index = path.indexOf("?"); if (index > -1) { path = path.substring(0, index); } #if (sys && !windows) if (StringTools.startsWith(path, "~/")) { path = Sys.getEnv("HOME") + "/" + path.substr(2); } #end if (path == null #if (sys && !android) || !FileSystem.exists(path) #end) { output.sendError({instance: instance, promise: instance.promise, error: "Cannot load file: " + path}); } else { instance.bytes = lime.utils.Bytes.fromFile(path); if (instance.bytes != null) { output.sendProgress( { instance: instance, promise: instance.promise, bytesLoaded: instance.bytes.length, bytesTotal: instance.bytes.length }); output.sendComplete({instance: instance, promise: instance.promise, result: instance.bytes}); } else { output.sendError({instance: instance, promise: instance.promise, error: "Cannot load file: " + path}); } } } private static function localThreadPool_onComplete(state:{instance:NativeHTTPRequest, promise:Promise, result:Bytes}):Void { var promise:Promise = state.promise; if (promise.isError) return; promise.complete(state.result); var instance = state.instance; if (instance.timeout != null) { instance.timeout.stop(); instance.timeout = null; } instance.bytes = null; instance.promise = null; } private static function localThreadPool_onError(state:{instance:NativeHTTPRequest, promise:Promise, error:String}):Void { var promise:Promise = state.promise; promise.error(new _HTTPRequestErrorResponse(state.error, null)); var instance = state.instance; if (instance.timeout != null) { instance.timeout.stop(); instance.timeout = null; } instance.bytes = null; instance.promise = null; } private static function localThreadPool_onProgress(state: { instance:NativeHTTPRequest, promise:Promise, bytesLoaded:Int, bytesTotal:Int }):Void { var promise:Promise = state.promise; if (promise.isComplete || promise.isError) return; promise.progress(state.bytesLoaded, state.bytesTotal); } private static function multiThreadPool_doWork(multi:CURLMulti, output:WorkOutput):Void { while (true) { #if (cpp || neko || hl) var curl = multiAddHandle.pop(false); if (curl != null) multi.addHandle(curl); #end var code = multi.wait(1000); if (code == CURLMultiCode.OK) { multi.perform(); var message = multi.infoRead(); if (message == null && multi.runningHandles == 0) { output.sendComplete(); break; } while (message != null) { var curl = message.curl; var status = curl.getInfo(RESPONSE_CODE); // returns an array of cookie values cookieList = curl.getInfo(COOKIELIST); multi.removeHandle(curl); curl.cleanup(); output.sendProgress({curl: curl, result: message.result, status: status}); message = multi.infoRead(); } } } } private static function multiThreadPool_onComplete(_):Void { #if (cpp || neko || hl) var curl = multiAddHandle.pop(false); if (curl != null) { multiAddHandle.push(curl); multiThreadPool.run(multiThreadPool_doWork, multi); } else { if (multiProgressTimer != null) { multiProgressTimer.stop(); multiProgressTimer = null; } multiThreadPoolRunning = false; } #end } private static function multiThreadPool_onProgress(state:{curl:CURL, result:Int, status:Int}):Void { if (multiInstances.exists(state.curl)) { var instance = multiInstances.get(state.curl); activeInstances.remove(instance); multiInstances.remove(state.curl); instance.parent.responseStatus = state.status; if (state.result == CURLCode.OK) { if ((state.status >= 200 && state.status < 400) || state.status == 0) { if (!instance.promise.isError) { instance.promise.complete(instance.buildBuffer()); } } else if (instance.bytes != null) { var error = instance.bytes.getString(0, instance.bytes.length); var responseData = instance.buildBuffer(); instance.promise.error(new _HTTPRequestErrorResponse(error, responseData)); } else { var error = 'Status ${state.status}'; var responseData = instance.buildBuffer(); instance.promise.error(new _HTTPRequestErrorResponse(error, responseData)); } } else { var error = CURL.strerror(state.result); instance.promise.error(new _HTTPRequestErrorResponse(error, null)); } if (instance.timeout != null) { instance.timeout.stop(); instance.timeout = null; } instance.bytes = null; instance.promise = null; } state.curl = null; } private static function multiProgressTimer_onRun():Void { for (instance in activeInstances) { if (instance.bytesLoaded != instance.writeBytesLoaded || instance.bytesTotal != instance.writeBytesTotal) { instance.bytesLoaded = instance.writeBytesLoaded; instance.bytesTotal = instance.writeBytesTotal; instance.promise.progress(instance.bytesLoaded, instance.bytesTotal); } } } } ================================================ FILE: src/lime/_internal/backend/native/NativeOpenGLRenderContext.hx ================================================ package lime._internal.backend.native; import haxe.io.Bytes; import haxe.Int64; import lime.graphics.opengl.ext.*; import lime.graphics.opengl.GLQuery; import lime.graphics.opengl.GLSampler; import lime.graphics.opengl.GLSync; import lime.graphics.opengl.GLTransformFeedback; import lime.graphics.opengl.GLVertexArrayObject; import lime.graphics.opengl.GLActiveInfo; import lime.graphics.opengl.GLBuffer; import lime.graphics.opengl.GLContextAttributes; import lime.graphics.opengl.GLFramebuffer; import lime.graphics.opengl.GLProgram; import lime.graphics.opengl.GLRenderbuffer; import lime.graphics.opengl.GLShader; import lime.graphics.opengl.GLShaderPrecisionFormat; import lime.graphics.opengl.GLTexture; import lime.graphics.opengl.GLUniformLocation; import lime.graphics.opengl.GL; import lime.graphics.RenderContextType; import lime.system.CFFI; import lime.utils.DataPointer; import lime.utils.Float32Array; import lime.utils.Int32Array; import lime.utils.UInt32Array; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:dox(hide) @:allow(lime.ui.Window) @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.graphics.opengl) class NativeOpenGLRenderContext { private static var __extensionObjects:Map; private static var __extensionObjectConstructors = new MapDynamic>(); private static var __lastContextID = 0; private static var __supportedExtensions:Array; public var DEPTH_BUFFER_BIT = 0x00000100; public var STENCIL_BUFFER_BIT = 0x00000400; public var COLOR_BUFFER_BIT = 0x00004000; public var POINTS = 0x0000; public var LINES = 0x0001; public var LINE_LOOP = 0x0002; public var LINE_STRIP = 0x0003; public var TRIANGLES = 0x0004; public var TRIANGLE_STRIP = 0x0005; public var TRIANGLE_FAN = 0x0006; public var ZERO = 0; public var ONE = 1; public var SRC_COLOR = 0x0300; public var ONE_MINUS_SRC_COLOR = 0x0301; public var SRC_ALPHA = 0x0302; public var ONE_MINUS_SRC_ALPHA = 0x0303; public var DST_ALPHA = 0x0304; public var ONE_MINUS_DST_ALPHA = 0x0305; public var DST_COLOR = 0x0306; public var ONE_MINUS_DST_COLOR = 0x0307; public var SRC_ALPHA_SATURATE = 0x0308; public var FUNC_ADD = 0x8006; public var BLEND_EQUATION = 0x8009; public var BLEND_EQUATION_RGB = 0x8009; public var BLEND_EQUATION_ALPHA = 0x883D; public var FUNC_SUBTRACT = 0x800A; public var FUNC_REVERSE_SUBTRACT = 0x800B; public var BLEND_DST_RGB = 0x80C8; public var BLEND_SRC_RGB = 0x80C9; public var BLEND_DST_ALPHA = 0x80CA; public var BLEND_SRC_ALPHA = 0x80CB; public var CONSTANT_COLOR = 0x8001; public var ONE_MINUS_CONSTANT_COLOR = 0x8002; public var CONSTANT_ALPHA = 0x8003; public var ONE_MINUS_CONSTANT_ALPHA = 0x8004; public var BLEND_COLOR = 0x8005; public var ARRAY_BUFFER = 0x8892; public var ELEMENT_ARRAY_BUFFER = 0x8893; public var ARRAY_BUFFER_BINDING = 0x8894; public var ELEMENT_ARRAY_BUFFER_BINDING = 0x8895; public var STREAM_DRAW = 0x88E0; public var STATIC_DRAW = 0x88E4; public var DYNAMIC_DRAW = 0x88E8; public var BUFFER_SIZE = 0x8764; public var BUFFER_USAGE = 0x8765; public var CURRENT_VERTEX_ATTRIB = 0x8626; public var FRONT = 0x0404; public var BACK = 0x0405; public var FRONT_AND_BACK = 0x0408; public var TEXTURE_2D = 0x0DE1; public var CULL_FACE = 0x0B44; public var BLEND = 0x0BE2; public var DITHER = 0x0BD0; public var STENCIL_TEST = 0x0B90; public var DEPTH_TEST = 0x0B71; public var SCISSOR_TEST = 0x0C11; public var POLYGON_OFFSET_FILL = 0x8037; public var SAMPLE_ALPHA_TO_COVERAGE = 0x809E; public var SAMPLE_COVERAGE = 0x80A0; public var NO_ERROR = 0; public var INVALID_ENUM = 0x0500; public var INVALID_VALUE = 0x0501; public var INVALID_OPERATION = 0x0502; public var OUT_OF_MEMORY = 0x0505; public var CW = 0x0900; public var CCW = 0x0901; public var LINE_WIDTH = 0x0B21; public var ALIASED_POINT_SIZE_RANGE = 0x846D; public var ALIASED_LINE_WIDTH_RANGE = 0x846E; public var CULL_FACE_MODE = 0x0B45; public var FRONT_FACE = 0x0B46; public var DEPTH_RANGE = 0x0B70; public var DEPTH_WRITEMASK = 0x0B72; public var DEPTH_CLEAR_VALUE = 0x0B73; public var DEPTH_FUNC = 0x0B74; public var STENCIL_CLEAR_VALUE = 0x0B91; public var STENCIL_FUNC = 0x0B92; public var STENCIL_FAIL = 0x0B94; public var STENCIL_PASS_DEPTH_FAIL = 0x0B95; public var STENCIL_PASS_DEPTH_PASS = 0x0B96; public var STENCIL_REF = 0x0B97; public var STENCIL_VALUE_MASK = 0x0B93; public var STENCIL_WRITEMASK = 0x0B98; public var STENCIL_BACK_FUNC = 0x8800; public var STENCIL_BACK_FAIL = 0x8801; public var STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; public var STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; public var STENCIL_BACK_REF = 0x8CA3; public var STENCIL_BACK_VALUE_MASK = 0x8CA4; public var STENCIL_BACK_WRITEMASK = 0x8CA5; public var VIEWPORT = 0x0BA2; public var SCISSOR_BOX = 0x0C10; public var COLOR_CLEAR_VALUE = 0x0C22; public var COLOR_WRITEMASK = 0x0C23; public var UNPACK_ALIGNMENT = 0x0CF5; public var PACK_ALIGNMENT = 0x0D05; public var MAX_TEXTURE_SIZE = 0x0D33; public var MAX_VIEWPORT_DIMS = 0x0D3A; public var SUBPIXEL_BITS = 0x0D50; public var RED_BITS = 0x0D52; public var GREEN_BITS = 0x0D53; public var BLUE_BITS = 0x0D54; public var ALPHA_BITS = 0x0D55; public var DEPTH_BITS = 0x0D56; public var STENCIL_BITS = 0x0D57; public var POLYGON_OFFSET_UNITS = 0x2A00; public var POLYGON_OFFSET_FACTOR = 0x8038; public var TEXTURE_BINDING_2D = 0x8069; public var SAMPLE_BUFFERS = 0x80A8; public var SAMPLES = 0x80A9; public var SAMPLE_COVERAGE_VALUE = 0x80AA; public var SAMPLE_COVERAGE_INVERT = 0x80AB; public var NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2; public var COMPRESSED_TEXTURE_FORMATS = 0x86A3; public var DONT_CARE = 0x1100; public var FASTEST = 0x1101; public var NICEST = 0x1102; public var GENERATE_MIPMAP_HINT = 0x8192; public var BYTE = 0x1400; public var UNSIGNED_BYTE = 0x1401; public var SHORT = 0x1402; public var UNSIGNED_SHORT = 0x1403; public var INT = 0x1404; public var UNSIGNED_INT = 0x1405; public var FLOAT = 0x1406; public var FIXED = 0x0140C; public var DEPTH_COMPONENT = 0x1902; public var ALPHA = 0x1906; public var RGB = 0x1907; public var RGBA = 0x1908; public var LUMINANCE = 0x1909; public var LUMINANCE_ALPHA = 0x190A; public var UNSIGNED_SHORT_4_4_4_4 = 0x8033; public var UNSIGNED_SHORT_5_5_5_1 = 0x8034; public var UNSIGNED_SHORT_5_6_5 = 0x8363; public var FRAGMENT_SHADER = 0x8B30; public var VERTEX_SHADER = 0x8B31; public var MAX_VERTEX_ATTRIBS = 0x8869; public var MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; public var MAX_VARYING_VECTORS = 0x8DFC; public var MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; public var MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; public var MAX_TEXTURE_IMAGE_UNITS = 0x8872; public var MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; public var SHADER_TYPE = 0x8B4F; public var DELETE_STATUS = 0x8B80; public var LINK_STATUS = 0x8B82; public var VALIDATE_STATUS = 0x8B83; public var ATTACHED_SHADERS = 0x8B85; public var ACTIVE_UNIFORMS = 0x8B86; public var ACTIVE_UNIFORMS_MAX_LENGTH = 0x8B87; public var ACTIVE_ATTRIBUTES = 0x8B89; public var ACTIVE_ATTRIBUTES_MAX_LENGTH = 0x8B8A; public var SHADING_LANGUAGE_VERSION = 0x8B8C; public var CURRENT_PROGRAM = 0x8B8D; public var NEVER = 0x0200; public var LESS = 0x0201; public var EQUAL = 0x0202; public var LEQUAL = 0x0203; public var GREATER = 0x0204; public var NOTEQUAL = 0x0205; public var GEQUAL = 0x0206; public var ALWAYS = 0x0207; public var KEEP = 0x1E00; public var REPLACE = 0x1E01; public var INCR = 0x1E02; public var DECR = 0x1E03; public var INVERT = 0x150A; public var INCR_WRAP = 0x8507; public var DECR_WRAP = 0x8508; public var VENDOR = 0x1F00; public var RENDERER = 0x1F01; public var VERSION = 0x1F02; public var EXTENSIONS = 0x1F03; public var NEAREST = 0x2600; public var LINEAR = 0x2601; public var NEAREST_MIPMAP_NEAREST = 0x2700; public var LINEAR_MIPMAP_NEAREST = 0x2701; public var NEAREST_MIPMAP_LINEAR = 0x2702; public var LINEAR_MIPMAP_LINEAR = 0x2703; public var TEXTURE_MAG_FILTER = 0x2800; public var TEXTURE_MIN_FILTER = 0x2801; public var TEXTURE_WRAP_S = 0x2802; public var TEXTURE_WRAP_T = 0x2803; public var TEXTURE = 0x1702; public var TEXTURE_CUBE_MAP = 0x8513; public var TEXTURE_BINDING_CUBE_MAP = 0x8514; public var TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; public var TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; public var TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; public var TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; public var TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; public var TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; public var MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; public var TEXTURE0 = 0x84C0; public var TEXTURE1 = 0x84C1; public var TEXTURE2 = 0x84C2; public var TEXTURE3 = 0x84C3; public var TEXTURE4 = 0x84C4; public var TEXTURE5 = 0x84C5; public var TEXTURE6 = 0x84C6; public var TEXTURE7 = 0x84C7; public var TEXTURE8 = 0x84C8; public var TEXTURE9 = 0x84C9; public var TEXTURE10 = 0x84CA; public var TEXTURE11 = 0x84CB; public var TEXTURE12 = 0x84CC; public var TEXTURE13 = 0x84CD; public var TEXTURE14 = 0x84CE; public var TEXTURE15 = 0x84CF; public var TEXTURE16 = 0x84D0; public var TEXTURE17 = 0x84D1; public var TEXTURE18 = 0x84D2; public var TEXTURE19 = 0x84D3; public var TEXTURE20 = 0x84D4; public var TEXTURE21 = 0x84D5; public var TEXTURE22 = 0x84D6; public var TEXTURE23 = 0x84D7; public var TEXTURE24 = 0x84D8; public var TEXTURE25 = 0x84D9; public var TEXTURE26 = 0x84DA; public var TEXTURE27 = 0x84DB; public var TEXTURE28 = 0x84DC; public var TEXTURE29 = 0x84DD; public var TEXTURE30 = 0x84DE; public var TEXTURE31 = 0x84DF; public var ACTIVE_TEXTURE = 0x84E0; public var REPEAT = 0x2901; public var CLAMP_TO_EDGE = 0x812F; public var MIRRORED_REPEAT = 0x8370; public var FLOAT_VEC2 = 0x8B50; public var FLOAT_VEC3 = 0x8B51; public var FLOAT_VEC4 = 0x8B52; public var INT_VEC2 = 0x8B53; public var INT_VEC3 = 0x8B54; public var INT_VEC4 = 0x8B55; public var BOOL = 0x8B56; public var BOOL_VEC2 = 0x8B57; public var BOOL_VEC3 = 0x8B58; public var BOOL_VEC4 = 0x8B59; public var FLOAT_MAT2 = 0x8B5A; public var FLOAT_MAT3 = 0x8B5B; public var FLOAT_MAT4 = 0x8B5C; public var SAMPLER_2D = 0x8B5E; public var SAMPLER_CUBE = 0x8B60; public var VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; public var VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; public var VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; public var VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; public var VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; public var VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; public var VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; public var IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A; public var IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; public var VERTEX_PROGRAM_POINT_SIZE = 0x8642; public var POINT_SPRITE = 0x8861; public var COMPILE_STATUS = 0x8B81; public var INFO_LOG_LENGTH = 0x8B84; public var SHADER_SOURCE_LENGTH = 0x8B88; public var SHADER_COMPILER = 0x8DFA; public var SHADER_BINARY_FORMATS = 0x8DF8; public var NUM_SHADER_BINARY_FORMATS = 0x8DF9; public var LOW_FLOAT = 0x8DF0; public var MEDIUM_FLOAT = 0x8DF1; public var HIGH_FLOAT = 0x8DF2; public var LOW_INT = 0x8DF3; public var MEDIUM_INT = 0x8DF4; public var HIGH_INT = 0x8DF5; public var FRAMEBUFFER = 0x8D40; public var RENDERBUFFER = 0x8D41; public var RGBA4 = 0x8056; public var RGB5_A1 = 0x8057; public var RGB565 = 0x8D62; public var DEPTH_COMPONENT16 = 0x81A5; public var STENCIL_INDEX = 0x1901; public var STENCIL_INDEX8 = 0x8D48; public var DEPTH_STENCIL = 0x84F9; public var RENDERBUFFER_WIDTH = 0x8D42; public var RENDERBUFFER_HEIGHT = 0x8D43; public var RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; public var RENDERBUFFER_RED_SIZE = 0x8D50; public var RENDERBUFFER_GREEN_SIZE = 0x8D51; public var RENDERBUFFER_BLUE_SIZE = 0x8D52; public var RENDERBUFFER_ALPHA_SIZE = 0x8D53; public var RENDERBUFFER_DEPTH_SIZE = 0x8D54; public var RENDERBUFFER_STENCIL_SIZE = 0x8D55; public var FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; public var FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; public var COLOR_ATTACHMENT0 = 0x8CE0; public var DEPTH_ATTACHMENT = 0x8D00; public var STENCIL_ATTACHMENT = 0x8D20; public var DEPTH_STENCIL_ATTACHMENT = 0x821A; public var NONE = 0; public var FRAMEBUFFER_COMPLETE = 0x8CD5; public var FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; public var FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; public var FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9; public var FRAMEBUFFER_UNSUPPORTED = 0x8CDD; public var FRAMEBUFFER_BINDING = 0x8CA6; public var RENDERBUFFER_BINDING = 0x8CA7; public var MAX_RENDERBUFFER_SIZE = 0x84E8; public var INVALID_FRAMEBUFFER_OPERATION = 0x0506; public var UNPACK_FLIP_Y_WEBGL = 0x9240; public var UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241; public var CONTEXT_LOST_WEBGL = 0x9242; public var UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243; public var BROWSER_DEFAULT_WEBGL = 0x9244; public var READ_BUFFER = 0x0C02; public var UNPACK_ROW_LENGTH = 0x0CF2; public var UNPACK_SKIP_ROWS = 0x0CF3; public var UNPACK_SKIP_PIXELS = 0x0CF4; public var PACK_ROW_LENGTH = 0x0D02; public var PACK_SKIP_ROWS = 0x0D03; public var PACK_SKIP_PIXELS = 0x0D04; public var TEXTURE_BINDING_3D = 0x806A; public var UNPACK_SKIP_IMAGES = 0x806D; public var UNPACK_IMAGE_HEIGHT = 0x806E; public var MAX_3D_TEXTURE_SIZE = 0x8073; public var MAX_ELEMENTS_VERTICES = 0x80E8; public var MAX_ELEMENTS_INDICES = 0x80E9; public var MAX_TEXTURE_LOD_BIAS = 0x84FD; public var MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49; public var MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A; public var MAX_ARRAY_TEXTURE_LAYERS = 0x88FF; public var MIN_PROGRAM_TEXEL_OFFSET = 0x8904; public var MAX_PROGRAM_TEXEL_OFFSET = 0x8905; public var MAX_VARYING_COMPONENTS = 0x8B4B; public var FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B; public var RASTERIZER_DISCARD = 0x8C89; public var VERTEX_ARRAY_BINDING = 0x85B5; public var MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122; public var MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125; public var MAX_SERVER_WAIT_TIMEOUT = 0x9111; public var MAX_ELEMENT_INDEX = 0x8D6B; public var RED = 0x1903; public var RGB8 = 0x8051; public var RGBA8 = 0x8058; public var RGB10_A2 = 0x8059; public var TEXTURE_3D = 0x806F; public var TEXTURE_WRAP_R = 0x8072; public var TEXTURE_MIN_LOD = 0x813A; public var TEXTURE_MAX_LOD = 0x813B; public var TEXTURE_BASE_LEVEL = 0x813C; public var TEXTURE_MAX_LEVEL = 0x813D; public var TEXTURE_COMPARE_MODE = 0x884C; public var TEXTURE_COMPARE_FUNC = 0x884D; public var SRGB = 0x8C40; public var SRGB8 = 0x8C41; public var SRGB8_ALPHA8 = 0x8C43; public var COMPARE_REF_TO_TEXTURE = 0x884E; public var RGBA32F = 0x8814; public var RGB32F = 0x8815; public var RGBA16F = 0x881A; public var RGB16F = 0x881B; public var TEXTURE_2D_ARRAY = 0x8C1A; public var TEXTURE_BINDING_2D_ARRAY = 0x8C1D; public var R11F_G11F_B10F = 0x8C3A; public var RGB9_E5 = 0x8C3D; public var RGBA32UI = 0x8D70; public var RGB32UI = 0x8D71; public var RGBA16UI = 0x8D76; public var RGB16UI = 0x8D77; public var RGBA8UI = 0x8D7C; public var RGB8UI = 0x8D7D; public var RGBA32I = 0x8D82; public var RGB32I = 0x8D83; public var RGBA16I = 0x8D88; public var RGB16I = 0x8D89; public var RGBA8I = 0x8D8E; public var RGB8I = 0x8D8F; public var RED_INTEGER = 0x8D94; public var RGB_INTEGER = 0x8D98; public var RGBA_INTEGER = 0x8D99; public var R8 = 0x8229; public var RG8 = 0x822B; public var R16F = 0x822D; public var R32F = 0x822E; public var RG16F = 0x822F; public var RG32F = 0x8230; public var R8I = 0x8231; public var R8UI = 0x8232; public var R16I = 0x8233; public var R16UI = 0x8234; public var R32I = 0x8235; public var R32UI = 0x8236; public var RG8I = 0x8237; public var RG8UI = 0x8238; public var RG16I = 0x8239; public var RG16UI = 0x823A; public var RG32I = 0x823B; public var RG32UI = 0x823C; public var R8_SNORM = 0x8F94; public var RG8_SNORM = 0x8F95; public var RGB8_SNORM = 0x8F96; public var RGBA8_SNORM = 0x8F97; public var RGB10_A2UI = 0x906F; public var TEXTURE_IMMUTABLE_FORMAT = 0x912F; public var TEXTURE_IMMUTABLE_LEVELS = 0x82DF; public var UNSIGNED_INT_2_10_10_10_REV = 0x8368; public var UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B; public var UNSIGNED_INT_5_9_9_9_REV = 0x8C3E; public var FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD; public var UNSIGNED_INT_24_8 = 0x84FA; public var HALF_FLOAT = 0x140B; public var RG = 0x8227; public var RG_INTEGER = 0x8228; public var INT_2_10_10_10_REV = 0x8D9F; public var CURRENT_QUERY = 0x8865; public var QUERY_RESULT = 0x8866; public var QUERY_RESULT_AVAILABLE = 0x8867; public var ANY_SAMPLES_PASSED = 0x8C2F; public var ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A; public var MAX_DRAW_BUFFERS = 0x8824; public var DRAW_BUFFER0 = 0x8825; public var DRAW_BUFFER1 = 0x8826; public var DRAW_BUFFER2 = 0x8827; public var DRAW_BUFFER3 = 0x8828; public var DRAW_BUFFER4 = 0x8829; public var DRAW_BUFFER5 = 0x882A; public var DRAW_BUFFER6 = 0x882B; public var DRAW_BUFFER7 = 0x882C; public var DRAW_BUFFER8 = 0x882D; public var DRAW_BUFFER9 = 0x882E; public var DRAW_BUFFER10 = 0x882F; public var DRAW_BUFFER11 = 0x8830; public var DRAW_BUFFER12 = 0x8831; public var DRAW_BUFFER13 = 0x8832; public var DRAW_BUFFER14 = 0x8833; public var DRAW_BUFFER15 = 0x8834; public var MAX_COLOR_ATTACHMENTS = 0x8CDF; public var COLOR_ATTACHMENT1 = 0x8CE1; public var COLOR_ATTACHMENT2 = 0x8CE2; public var COLOR_ATTACHMENT3 = 0x8CE3; public var COLOR_ATTACHMENT4 = 0x8CE4; public var COLOR_ATTACHMENT5 = 0x8CE5; public var COLOR_ATTACHMENT6 = 0x8CE6; public var COLOR_ATTACHMENT7 = 0x8CE7; public var COLOR_ATTACHMENT8 = 0x8CE8; public var COLOR_ATTACHMENT9 = 0x8CE9; public var COLOR_ATTACHMENT10 = 0x8CEA; public var COLOR_ATTACHMENT11 = 0x8CEB; public var COLOR_ATTACHMENT12 = 0x8CEC; public var COLOR_ATTACHMENT13 = 0x8CED; public var COLOR_ATTACHMENT14 = 0x8CEE; public var COLOR_ATTACHMENT15 = 0x8CEF; public var SAMPLER_3D = 0x8B5F; public var SAMPLER_2D_SHADOW = 0x8B62; public var SAMPLER_2D_ARRAY = 0x8DC1; public var SAMPLER_2D_ARRAY_SHADOW = 0x8DC4; public var SAMPLER_CUBE_SHADOW = 0x8DC5; public var INT_SAMPLER_2D = 0x8DCA; public var INT_SAMPLER_3D = 0x8DCB; public var INT_SAMPLER_CUBE = 0x8DCC; public var INT_SAMPLER_2D_ARRAY = 0x8DCF; public var UNSIGNED_INT_SAMPLER_2D = 0x8DD2; public var UNSIGNED_INT_SAMPLER_3D = 0x8DD3; public var UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4; public var UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7; public var MAX_SAMPLES = 0x8D57; public var SAMPLER_BINDING = 0x8919; public var PIXEL_PACK_BUFFER = 0x88EB; public var PIXEL_UNPACK_BUFFER = 0x88EC; public var PIXEL_PACK_BUFFER_BINDING = 0x88ED; public var PIXEL_UNPACK_BUFFER_BINDING = 0x88EF; public var COPY_READ_BUFFER = 0x8F36; public var COPY_WRITE_BUFFER = 0x8F37; public var COPY_READ_BUFFER_BINDING = 0x8F36; public var COPY_WRITE_BUFFER_BINDING = 0x8F37; public var FLOAT_MAT2x3 = 0x8B65; public var FLOAT_MAT2x4 = 0x8B66; public var FLOAT_MAT3x2 = 0x8B67; public var FLOAT_MAT3x4 = 0x8B68; public var FLOAT_MAT4x2 = 0x8B69; public var FLOAT_MAT4x3 = 0x8B6A; public var UNSIGNED_INT_VEC2 = 0x8DC6; public var UNSIGNED_INT_VEC3 = 0x8DC7; public var UNSIGNED_INT_VEC4 = 0x8DC8; public var UNSIGNED_NORMALIZED = 0x8C17; public var SIGNED_NORMALIZED = 0x8F9C; public var VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD; public var VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE; public var TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F; public var MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80; public var TRANSFORM_FEEDBACK_VARYINGS = 0x8C83; public var TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84; public var TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85; public var TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88; public var MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A; public var MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B; public var INTERLEAVED_ATTRIBS = 0x8C8C; public var SEPARATE_ATTRIBS = 0x8C8D; public var TRANSFORM_FEEDBACK_BUFFER = 0x8C8E; public var TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F; public var TRANSFORM_FEEDBACK = 0x8E22; public var TRANSFORM_FEEDBACK_PAUSED = 0x8E23; public var TRANSFORM_FEEDBACK_ACTIVE = 0x8E24; public var TRANSFORM_FEEDBACK_BINDING = 0x8E25; public var FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210; public var FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211; public var FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212; public var FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213; public var FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214; public var FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215; public var FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216; public var FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217; public var FRAMEBUFFER_DEFAULT = 0x8218; public var DEPTH24_STENCIL8 = 0x88F0; public var DRAW_FRAMEBUFFER_BINDING = 0x8CA6; public var READ_FRAMEBUFFER = 0x8CA8; public var DRAW_FRAMEBUFFER = 0x8CA9; public var READ_FRAMEBUFFER_BINDING = 0x8CAA; public var RENDERBUFFER_SAMPLES = 0x8CAB; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4; public var FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56; public var UNIFORM_BUFFER = 0x8A11; public var UNIFORM_BUFFER_BINDING = 0x8A28; public var UNIFORM_BUFFER_START = 0x8A29; public var UNIFORM_BUFFER_SIZE = 0x8A2A; public var MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B; public var MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D; public var MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E; public var MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F; public var MAX_UNIFORM_BLOCK_SIZE = 0x8A30; public var MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31; public var MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33; public var UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34; public var ACTIVE_UNIFORM_BLOCKS = 0x8A36; public var UNIFORM_TYPE = 0x8A37; public var UNIFORM_SIZE = 0x8A38; public var UNIFORM_BLOCK_INDEX = 0x8A3A; public var UNIFORM_OFFSET = 0x8A3B; public var UNIFORM_ARRAY_STRIDE = 0x8A3C; public var UNIFORM_MATRIX_STRIDE = 0x8A3D; public var UNIFORM_IS_ROW_MAJOR = 0x8A3E; public var UNIFORM_BLOCK_BINDING = 0x8A3F; public var UNIFORM_BLOCK_DATA_SIZE = 0x8A40; public var UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42; public var UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43; public var UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44; public var UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46; public var OBJECT_TYPE = 0x9112; public var SYNC_CONDITION = 0x9113; public var SYNC_STATUS = 0x9114; public var SYNC_FLAGS = 0x9115; public var SYNC_FENCE = 0x9116; public var SYNC_GPU_COMMANDS_COMPLETE = 0x9117; public var UNSIGNALED = 0x9118; public var SIGNALED = 0x9119; public var ALREADY_SIGNALED = 0x911A; public var TIMEOUT_EXPIRED = 0x911B; public var CONDITION_SATISFIED = 0x911C; public var WAIT_FAILED = 0x911D; public var SYNC_FLUSH_COMMANDS_BIT = 0x00000001; public var COLOR = 0x1800; public var DEPTH = 0x1801; public var STENCIL = 0x1802; public var MIN = 0x8007; public var MAX = 0x8008; public var DEPTH_COMPONENT24 = 0x81A6; public var STREAM_READ = 0x88E1; public var STREAM_COPY = 0x88E2; public var STATIC_READ = 0x88E5; public var STATIC_COPY = 0x88E6; public var DYNAMIC_READ = 0x88E9; public var DYNAMIC_COPY = 0x88EA; public var DEPTH_COMPONENT32F = 0x8CAC; public var DEPTH32F_STENCIL8 = 0x8CAD; public var INVALID_INDEX = 0xFFFFFFFF; public var TIMEOUT_IGNORED = -1; public var MAX_CLIENT_WAIT_TIMEOUT_WEBGL = 0x9247; public var type(default, null):RenderContextType; public var version(default, null):Float; private var __arrayBufferBinding:GLBuffer; private var __elementBufferBinding:GLBuffer; private var __contextID:Int; private var __currentProgram:GLProgram; private var __framebufferBinding:GLFramebuffer; private var __initialized:Bool; private var __isContextLost:Bool; private var __renderbufferBinding:GLRenderbuffer; private var __texture2DBinding:GLTexture; private var __textureCubeMapBinding:GLTexture; private function new() { __contextID = __lastContextID++; __initialize(); #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var versionString:String = getParameter(VERSION); if (versionString.indexOf("OpenGL ES") > -1) { type = OPENGLES; } else { type = OPENGL; } var ereg = ~/[0-9]+[.]?[0-9]?/i; if (ereg.match(versionString)) { version = Std.parseFloat(ereg.matched(0)); } else { version = 2; } #else type = OPENGL; version = 2; #end } public function activeTexture(texture:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_active_texture(texture); #end } public function attachShader(program:GLProgram, shader:GLShader):Void { if (program != null && shader != null) { if (program.refs == null) { program.refs = [shader]; } else if (program.refs.indexOf(shader) == -1) { program.refs.push(shader); } } #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_attach_shader(__getObjectID(program), __getObjectID(shader)); #end } public function beginQuery(target:Int, query:GLQuery):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_begin_query(target, __getObjectID(query)); #end } public function beginTransformFeedback(primitiveNode:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_begin_transform_feedback(primitiveNode); #end } public function bindAttribLocation(program:GLProgram, index:Int, name:String):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_attrib_location(__getObjectID(program), index, name); #end } public function bindBuffer(target:Int, buffer:GLBuffer):Void { if (target == ARRAY_BUFFER) __arrayBufferBinding = buffer; if (target == ELEMENT_ARRAY_BUFFER) __elementBufferBinding = buffer; #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_buffer(target, __getObjectID(buffer)); #end } public function bindBufferBase(target:Int, index:Int, buffer:GLBuffer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_buffer_base(target, index, __getObjectID(buffer)); #end } public function bindBufferRange(target:Int, index:Int, buffer:GLBuffer, offset:DataPointer, size:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_buffer_range(target, index, __getObjectID(buffer), offset, size); #end } public function bindFramebuffer(target:Int, framebuffer:GLFramebuffer):Void { __framebufferBinding = framebuffer; #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_framebuffer(target, __getObjectID(framebuffer)); #end } public function bindRenderbuffer(target:Int, renderbuffer:GLRenderbuffer):Void { __renderbufferBinding = renderbuffer; #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_renderbuffer(target, __getObjectID(renderbuffer)); #end } public function bindSampler(unit:Int, sampler:GLSampler):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_sampler(unit, __getObjectID(sampler)); #end } public function bindTexture(target:Int, texture:GLTexture):Void { if (target == TEXTURE_2D) __texture2DBinding = texture; if (target == TEXTURE_CUBE_MAP) __textureCubeMapBinding = texture; #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_texture(target, __getObjectID(texture)); #end } public function bindTransformFeedback(target:Int, transformFeedback:GLTransformFeedback):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_transform_feedback(target, __getObjectID(transformFeedback)); #end } public function bindVertexArray(vertexArray:GLVertexArrayObject):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_bind_vertex_array(__getObjectID(vertexArray)); #end } public function blendColor(red:Float, green:Float, blue:Float, alpha:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_blend_color(red, green, blue, alpha); #end } public function blendEquation(mode:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_blend_equation(mode); #end } public function blendEquationSeparate(modeRGB:Int, modeAlpha:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_blend_equation_separate(modeRGB, modeAlpha); #end } public function blendFunc(sfactor:Int, dfactor:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_blend_func(sfactor, dfactor); #end } public function blendFuncSeparate(srcRGB:Int, dstRGB:Int, srcAlpha:Int, dstAlpha:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_blend_func_separate(srcRGB, dstRGB, srcAlpha, dstAlpha); #end } public function blitFramebuffer(srcX0:Int, srcY0:Int, srcX1:Int, srcY1:Int, dstX0:Int, dstY0:Int, dstX1:Int, dstY1:Int, mask:Int, filter:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_blit_framebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); #end } public function bufferData(target:Int, size:Int, srcData:DataPointer, usage:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_buffer_data(target, size, srcData, usage); #end } public function bufferSubData(target:Int, dstByteOffset:Int, size:Int, srcData:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_buffer_sub_data(target, dstByteOffset, size, srcData); #end } public function checkFramebufferStatus(target:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_check_framebuffer_status(target); #else return 0; #end } public function clear(mask:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_clear(mask); #end } public function clearBufferfi(buffer:Int, drawbuffer:Int, depth:Float, stencil:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_clear_bufferfi(buffer, drawbuffer, depth, stencil); #end } public function clearBufferfv(buffer:Int, drawbuffer:Int, value:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_clear_bufferfv(buffer, drawbuffer, value); #end } public function clearBufferiv(buffer:Int, drawbuffer:Int, value:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_clear_bufferiv(buffer, drawbuffer, value); #end } public function clearBufferuiv(buffer:Int, drawbuffer:Int, value:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_clear_bufferuiv(buffer, drawbuffer, value); #end } public function clearColor(red:Float, green:Float, blue:Float, alpha:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_clear_color(red, green, blue, alpha); #end } public function clearDepthf(depth:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_clear_depthf(depth); #end } public function clearStencil(s:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_clear_stencil(s); #end } public function clientWaitSync(sync:GLSync, flags:Int, timeout:Int64):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_client_wait_sync(sync, flags, timeout.high, timeout.low); #else return 0; #end } public function colorMask(red:Bool, green:Bool, blue:Bool, alpha:Bool):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_color_mask(red, green, blue, alpha); #end } public function compileShader(shader:GLShader):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_compile_shader(__getObjectID(shader)); #end } public function compressedTexImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, imageSize:Int, data:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_compressed_tex_image_2d(target, level, internalformat, width, height, border, imageSize, data); #end } public function compressedTexImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, imageSize:Int, data:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_compressed_tex_image_3d(target, level, internalformat, width, height, depth, border, imageSize, data); #end } public function compressedTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, imageSize:Int, data:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_compressed_tex_sub_image_2d(target, level, xoffset, yoffset, width, height, format, imageSize, data); #end } public function compressedTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, imageSize:Int, data:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_compressed_tex_sub_image_3d(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); #end } public function copyBufferSubData(readTarget:Int, writeTarget:Int, readOffset:DataPointer, writeOffset:DataPointer, size:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_copy_buffer_sub_data(readTarget, writeTarget, readOffset, writeOffset, size); #end } public function copyTexImage2D(target:Int, level:Int, internalformat:Int, x:Int, y:Int, width:Int, height:Int, border:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_copy_tex_image_2d(target, level, internalformat, x, y, width, height, border); #end } public function copyTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, x:Int, y:Int, width:Int, height:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_copy_tex_sub_image_2d(target, level, xoffset, yoffset, x, y, width, height); #end } public function copyTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, x:Int, y:Int, width:Int, height:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_copy_tex_sub_image_3d(target, level, xoffset, yoffset, zoffset, x, y, width, height); #end } public function createBuffer():GLBuffer { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_buffer(); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.BUFFER, object); return object; #else return null; #end } public function createFramebuffer():GLFramebuffer { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_framebuffer(); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.FRAMEBUFFER, object); return object; #else return null; #end } public function createProgram():GLProgram { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_program(); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.PROGRAM, object); return object; #else return null; #end } public function createQuery():GLQuery { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_query(); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.QUERY, object); return object; #else return null; #end } public function createRenderbuffer():GLRenderbuffer { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_renderbuffer(); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.RENDERBUFFER, object); return object; #else return null; #end } public function createSampler():GLSampler { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_sampler(); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.SAMPLER, object); return object; #else return null; #end } public function createShader(type:Int):GLShader { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_shader(type); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.SHADER, object); return object; #else return null; #end } public function createTexture():GLTexture { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_texture(); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.TEXTURE, object); return object; #else return null; #end } public function createTransformFeedback():GLTransformFeedback { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_transform_feedback(); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.TRANSFORM_FEEDBACK, object); return object; #else return null; #end } public function createVertexArray():GLVertexArrayObject { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var id = NativeCFFI.lime_gl_create_vertex_array(); if (id == 0) return null; var object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, GLObjectType.VERTEX_ARRAY_OBJECT, object); return object; #else return null; #end } public function cullFace(mode:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_cull_face(mode); #end } public function deleteBuffer(buffer:GLBuffer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (buffer != null) NativeCFFI.lime_gl_object_deregister(buffer); NativeCFFI.lime_gl_delete_buffer(__getObjectID(buffer)); #end } public function deleteFramebuffer(framebuffer:GLFramebuffer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (framebuffer != null) NativeCFFI.lime_gl_object_deregister(framebuffer); NativeCFFI.lime_gl_delete_framebuffer(__getObjectID(framebuffer)); #end } public function deleteProgram(program:GLProgram):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (program != null) NativeCFFI.lime_gl_object_deregister(program); NativeCFFI.lime_gl_delete_program(__getObjectID(program)); #end } public function deleteQuery(query:GLQuery):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (query != null) NativeCFFI.lime_gl_object_deregister(query); NativeCFFI.lime_gl_delete_query(__getObjectID(query)); #end } public function deleteRenderbuffer(renderbuffer:GLRenderbuffer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (renderbuffer != null) NativeCFFI.lime_gl_object_deregister(renderbuffer); NativeCFFI.lime_gl_delete_renderbuffer(__getObjectID(renderbuffer)); #end } public function deleteSampler(sampler:GLSampler):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (sampler != null) NativeCFFI.lime_gl_object_deregister(sampler); NativeCFFI.lime_gl_delete_sampler(__getObjectID(sampler)); #end } public function deleteShader(shader:GLShader):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (shader != null) NativeCFFI.lime_gl_object_deregister(shader); NativeCFFI.lime_gl_delete_shader(__getObjectID(shader)); #end } public function deleteSync(sync:GLSync):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_delete_sync(sync); #end } public function deleteTexture(texture:GLTexture):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (texture != null) NativeCFFI.lime_gl_object_deregister(texture); NativeCFFI.lime_gl_delete_texture(__getObjectID(texture)); #end } public function deleteTransformFeedback(transformFeedback:GLTransformFeedback):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (transformFeedback != null) NativeCFFI.lime_gl_object_deregister(transformFeedback); NativeCFFI.lime_gl_delete_transform_feedback(__getObjectID(transformFeedback)); #end } public function deleteVertexArray(vertexArray:GLVertexArrayObject):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) if (vertexArray != null) NativeCFFI.lime_gl_object_deregister(vertexArray); NativeCFFI.lime_gl_delete_vertex_array(__getObjectID(vertexArray)); #end } public function depthFunc(func:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_depth_func(func); #end } public function depthMask(flag:Bool):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_depth_mask(flag); #end } public function depthRangef(zNear:Float, zFar:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_depth_rangef(zNear, zFar); #end } public function detachShader(program:GLProgram, shader:GLShader):Void { if (program != null && program.refs != null) { program.refs.remove(shader); } #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_detach_shader(__getObjectID(program), __getObjectID(shader)); #end } public function disable(cap:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_disable(cap); #end } public function disableVertexAttribArray(index:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_disable_vertex_attrib_array(index); #end } public function drawArrays(mode:Int, first:Int, count:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_draw_arrays(mode, first, count); #end } public function drawArraysInstanced(mode:Int, first:Int, count:Int, instanceCount:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_draw_arrays_instanced(mode, first, count, instanceCount); #end } public function drawBuffers(buffers:Array):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) #if hl var _buffers = new hl.NativeArray(buffers.length); for (i in 0...buffers.length) _buffers[i] = buffers[i]; var buffers = _buffers; #end NativeCFFI.lime_gl_draw_buffers(buffers); #end } public function drawElements(mode:Int, count:Int, type:Int, offset:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_draw_elements(mode, count, type, offset); #end } public function drawElementsInstanced(mode:Int, count:Int, type:Int, offset:DataPointer, instanceCount:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_draw_elements_instanced(mode, count, type, offset, instanceCount); #end } public function drawRangeElements(mode:Int, start:Int, end:Int, count:Int, type:Int, offset:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_draw_range_elements(mode, start, end, count, type, offset); #end } public function enable(cap:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_enable(cap); #end } public function enableVertexAttribArray(index:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_enable_vertex_attrib_array(index); #end } public function endQuery(target:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_end_query(target); #end } public function endTransformFeedback():Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_end_transform_feedback(); #end } public function fenceSync(condition:Int, flags:Int):GLSync { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_fence_sync(condition, flags); #else return null; #end } public function finish():Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_finish(); #end } public function flush():Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_flush(); #end } public function framebufferRenderbuffer(target:Int, attachment:Int, renderbuffertarget:Int, renderbuffer:GLRenderbuffer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_framebuffer_renderbuffer(target, attachment, renderbuffertarget, __getObjectID(renderbuffer)); #end } public function framebufferTexture2D(target:Int, attachment:Int, textarget:Int, texture:GLTexture, level:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_framebuffer_texture2D(target, attachment, textarget, __getObjectID(texture), level); #end } public function framebufferTextureLayer(target:Int, attachment:Int, texture:GLTexture, level:Int, layer:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_framebuffer_texture_layer(target, attachment, __getObjectID(texture), level, layer); #end } public function frontFace(mode:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_front_face(mode); #end } public function generateMipmap(target:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_generate_mipmap(target); #end } public function getActiveAttrib(program:GLProgram, index:Int):GLActiveInfo { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) #if hl var result = NativeCFFI.lime_gl_get_active_attrib(__getObjectID(program), index); if (result != null) { return { size: result.size, type: result.type, name: CFFI.stringValue(result.name) }; } else { return null; } #else return NativeCFFI.lime_gl_get_active_attrib(__getObjectID(program), index); #end #else return null; #end } public function getActiveUniform(program:GLProgram, index:Int):GLActiveInfo { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) #if hl var result = NativeCFFI.lime_gl_get_active_uniform(__getObjectID(program), index); if (result != null) { return { size: result.size, type: result.type, name: CFFI.stringValue(result.name) }; } else { return null; } #else return NativeCFFI.lime_gl_get_active_uniform(__getObjectID(program), index); #end #else return null; #end } public function getActiveUniformBlocki(program:GLProgram, uniformBlockIndex:Int, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_active_uniform_blocki(__getObjectID(program), uniformBlockIndex, pname); #else return 0; #end } public function getActiveUniformBlockiv(program:GLProgram, uniformBlockIndex:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_active_uniform_blockiv(__getObjectID(program), uniformBlockIndex, pname, params); #end } public function getActiveUniformBlockName(program:GLProgram, uniformBlockIndex:Int):String { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var result = NativeCFFI.lime_gl_get_active_uniform_block_name(__getObjectID(program), uniformBlockIndex); return CFFI.stringValue(result); #else return null; #end } public function getActiveUniformBlockParameter(program:GLProgram, uniformBlockIndex:Int, pname:Int):Dynamic { // TODO return null; } public function getActiveUniforms(program:GLProgram, uniformIndices:Array, pname:Int):Dynamic { // TODO return null; } public function getActiveUniformsiv(program:GLProgram, uniformIndices:Array, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) #if hl var _uniformIndices = new hl.NativeArray(uniformIndices.length); for (i in 0...uniformIndices.length) _uniformIndices[i] = uniformIndices[i]; var uniformIndices = _uniformIndices; #end NativeCFFI.lime_gl_get_active_uniformsiv(__getObjectID(program), uniformIndices, pname, params); #end } public function getAttachedShaders(program:GLProgram):Array { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var result = NativeCFFI.lime_gl_get_attached_shaders(__getObjectID(program)); #if hl var _result = new Array(); for (i in 0...result.length) { _result.push(GLShader.fromInt(result[i])); } var result = _result; #end return result; #else return null; #end } public function getAttribLocation(program:GLProgram, name:String):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_attrib_location(__getObjectID(program), name); #else return 0; #end } public function getBoolean(pname:Int):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_boolean(pname); #else return false; #end } public function getBooleanv(pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_booleanv(pname, params); #end } public function getBufferParameter(target:Int, pname:Int):Dynamic { return getBufferParameteri(target, pname); } public function getBufferParameteri(target:Int, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_buffer_parameteri(target, pname); #else return 0; #end } public function getBufferParameteri64v(target:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_buffer_parameteri64v(target, pname, params); #end } public function getBufferParameteriv(target:Int, pname:Int, data:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_buffer_parameteriv(target, pname, data); #end } public function getBufferPointerv(target:Int, pname:Int):DataPointer { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_buffer_pointerv(target, pname); #else return 0; #end } public function getBufferSubData(target:Int, offset:DataPointer, size:Int, data:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_buffer_sub_data(target, offset, size, data); #end } public function getContextAttributes():GLContextAttributes { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var base:Dynamic = NativeCFFI.lime_gl_get_context_attributes(); base.premultipliedAlpha = false; base.preserveDrawingBuffer = false; return base; #else return null; #end } public function getError():Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_error(); #else return 0; #end } public function getExtension(name:String):Dynamic { if (__extensionObjects == null) { __extensionObjects = new Map(); var supportedExtensions = getSupportedExtensions(); for (extension in supportedExtensions) { if (__extensionObjectConstructors.exists(extension)) { __extensionObjects.set(extension, null); } } } if (__extensionObjects.exists(name)) { var object = __extensionObjects.get(name); if (object == null) { object = __extensionObjectConstructors.get(name)(); __extensionObjects.set(name, object); #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_extension(name); #end } return object; } else { return null; } } public function getFloat(pname:Int):Float { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_float(pname); #else return 0; #end } public function getFloatv(pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_floatv(pname, params); #end } public function getFragDataLocation(program:GLProgram, name:String):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_frag_data_location(__getObjectID(program), name); #else return 0; #end } public function getFramebufferAttachmentParameter(target:Int, attachment:Int, pname:Int):Dynamic { var value = getFramebufferAttachmentParameteri(target, attachment, pname); if (pname == FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) { var texture:GLTexture = value; if (texture != null) return texture; var renderbuffer:GLRenderbuffer = value; if (renderbuffer != null) return renderbuffer; } return value; } public function getFramebufferAttachmentParameteri(target:Int, attachment:Int, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_framebuffer_attachment_parameteri(target, attachment, pname); #else return 0; #end } public function getFramebufferAttachmentParameteriv(target:Int, attachment:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_framebuffer_attachment_parameteriv(target, attachment, pname, params); #end } public function getIndexedParameter(target:Int, index:Int):Dynamic { // TODO return null; } public function getInteger(pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_integer(pname); #else return 0; #end } public function getInteger64(pname:Int):Int64 { // TODO // #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) // return NativeCFFI.lime_gl_get_integer64 (pname); // #else return Int64.ofInt(0); // #end } public function getInteger64i(pname:Int):Int64 { // TODO // #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) // return NativeCFFI.lime_gl_get_integer64i (pname); // #else return Int64.ofInt(0); // #end } public function getInteger64i_v(pname:Int, index:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_integer64i_v(pname, index, params); #end } public function getInteger64v(pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_integer64v(pname, params); #end } public function getIntegeri_v(pname:Int, index:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_integeri_v(pname, index, params); #end } public function getIntegerv(pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_integerv(pname, params); #end } public function getInternalformati(target:Int, internalformat:Int, pname:Int):Int { // TODO // #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) // return NativeCFFI.lime_gl_get_internalformati (target, internalformat, pname); // #else return 0; // #end } public function getInternalformativ(target:Int, internalformat:Int, pname:Int, bufSize:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_internalformativ(target, internalformat, pname, bufSize, params); #end } public function getInternalformatParameter(target:Int, internalformat:Int, pname:Int):Dynamic { // TODO return null; } public function getParameter(pname:Int):Dynamic { switch (pname) { case GL.BLEND, GL.CULL_FACE, GL.DEPTH_TEST, GL.DEPTH_WRITEMASK, GL.DITHER, GL.POLYGON_OFFSET_FILL, GL.SAMPLE_COVERAGE_INVERT, GL.SCISSOR_TEST, GL.STENCIL_TEST, GL.UNPACK_FLIP_Y_WEBGL, GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL: return getBoolean(pname); case GL.COLOR_WRITEMASK: var params = Bytes.alloc(4); getBooleanv(pname, params); var data = new Array(); for (i in 0...4) data[i] = params.get(i) != 0; return data; case GL.DEPTH_CLEAR_VALUE, GL.LINE_WIDTH, GL.POLYGON_OFFSET_FACTOR, GL.POLYGON_OFFSET_UNITS, GL.SAMPLE_COVERAGE_VALUE: return getFloat(pname); case GL.ALIASED_LINE_WIDTH_RANGE, GL.ALIASED_POINT_SIZE_RANGE, GL.DEPTH_RANGE: var params = new Float32Array(2); getFloatv(pname, params); return params; case GL.BLEND_COLOR, GL.COLOR_CLEAR_VALUE: var params = new Float32Array(4); getFloatv(pname, params); return params; case GL.ACTIVE_TEXTURE, GL.ALPHA_BITS, GL.BLEND_DST_ALPHA, GL.BLEND_DST_RGB, GL.BLEND_EQUATION, GL.BLEND_EQUATION_ALPHA, /*GL.BLEND_EQUATION_RGB,*/ GL.BLEND_SRC_ALPHA, GL.BLEND_SRC_RGB, GL.BLUE_BITS, GL.CULL_FACE_MODE, GL.DEPTH_BITS, GL.DEPTH_FUNC, GL.FRONT_FACE, GL.GENERATE_MIPMAP_HINT, GL.GREEN_BITS, GL.IMPLEMENTATION_COLOR_READ_FORMAT, GL.IMPLEMENTATION_COLOR_READ_TYPE, GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS, GL.MAX_CUBE_MAP_TEXTURE_SIZE, GL.MAX_FRAGMENT_UNIFORM_VECTORS, GL.MAX_RENDERBUFFER_SIZE, GL.MAX_TEXTURE_IMAGE_UNITS, GL.MAX_TEXTURE_SIZE, GL.MAX_VARYING_VECTORS, GL.MAX_VERTEX_ATTRIBS, GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS, GL.MAX_VERTEX_UNIFORM_VECTORS, GL.PACK_ALIGNMENT, GL.RED_BITS, GL.SAMPLE_BUFFERS, GL.SAMPLES, GL.STENCIL_BACK_FAIL, GL.STENCIL_BACK_FUNC, GL.STENCIL_BACK_PASS_DEPTH_FAIL, GL.STENCIL_BACK_PASS_DEPTH_PASS, GL.STENCIL_BACK_REF, GL.STENCIL_BACK_VALUE_MASK, GL.STENCIL_BACK_WRITEMASK, GL.STENCIL_BITS, GL.STENCIL_CLEAR_VALUE, GL.STENCIL_FAIL, GL.STENCIL_FUNC, GL.STENCIL_PASS_DEPTH_FAIL, GL.STENCIL_PASS_DEPTH_PASS, GL.STENCIL_REF, GL.STENCIL_VALUE_MASK, GL.STENCIL_WRITEMASK, GL.SUBPIXEL_BITS, GL.UNPACK_ALIGNMENT, GL.UNPACK_COLORSPACE_CONVERSION_WEBGL: return getInteger(pname); case GL.COMPRESSED_TEXTURE_FORMATS: var params = new UInt32Array(getInteger(GL.NUM_COMPRESSED_TEXTURE_FORMATS)); getIntegerv(pname, params); return params; case GL.MAX_VIEWPORT_DIMS: var params = new Int32Array(2); getIntegerv(pname, params); return params; case GL.SCISSOR_BOX, GL.VIEWPORT: var params = new Int32Array(4); getIntegerv(pname, params); return params; case GL.RENDERER, GL.SHADING_LANGUAGE_VERSION, GL.VENDOR, GL.VERSION: return getString(pname); case GL.ARRAY_BUFFER_BINDING, GL.ELEMENT_ARRAY_BUFFER_BINDING: var data:GLBuffer = getInteger(pname); return data; case GL.CURRENT_PROGRAM: var data:GLProgram = getInteger(pname); return data; case GL.FRAMEBUFFER_BINDING: var data:GLFramebuffer = getInteger(pname); return data; case GL.RENDERBUFFER_BINDING: var data:GLRenderbuffer = getInteger(pname); return data; case GL.TEXTURE_BINDING_2D, GL.TEXTURE_BINDING_CUBE_MAP: var data:GLTexture = getInteger(pname); return data; default: return getInteger(pname); // return null; } } public function getProgrami(program:GLProgram, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_programi(__getObjectID(program), pname); #else return 0; #end } public function getProgramiv(program:GLProgram, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_programiv(__getObjectID(program), pname, params); #end } public function getProgramBinary(program:GLProgram, binaryFormat:Int):Bytes { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var bytes = Bytes.alloc(0); NativeCFFI.lime_gl_get_program_binary(__getObjectID(program), binaryFormat, bytes); return bytes; #else return null; #end } public function getProgramInfoLog(program:GLProgram):String { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var result = NativeCFFI.lime_gl_get_program_info_log(__getObjectID(program)); return CFFI.stringValue(result); #else return null; #end } public function getProgramParameter(program:GLProgram, pname:Int):Dynamic { return getProgrami(program, pname); } public function getQuery(target:Int, pname:Int):GLQuery { return getQueryi(target, pname); } public function getQueryi(target:Int, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_queryi(target, pname); #else return 0; #end } public function getQueryiv(target:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_queryiv(target, pname, params); #end } public function getQueryObjectui(query:GLQuery, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_query_objectui(__getObjectID(query), pname); #else return 0; #end } public function getQueryObjectuiv(query:GLQuery, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_query_objectuiv(__getObjectID(query), pname, params); #end } public function getQueryParameter(query:GLQuery, pname:Int):Dynamic { // TODO return null; } public function getRenderbufferParameter(target:Int, pname:Int):Dynamic { return getRenderbufferParameteri(target, pname); } public function getRenderbufferParameteri(target:Int, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_renderbuffer_parameteri(target, pname); #else return 0; #end } public function getRenderbufferParameteriv(target:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_renderbuffer_parameteriv(target, pname, params); #end } public function getSamplerParameter(sampler:GLSampler, pname:Int):Dynamic { // TODO return null; } public function getSamplerParameterf(sampler:GLSampler, pname:Int):Float { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_sampler_parameterf(__getObjectID(sampler), pname); #else return 0; #end } public function getSamplerParameterfv(sampler:GLSampler, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_sampler_parameterfv(__getObjectID(sampler), pname, params); #end } public function getSamplerParameteri(sampler:GLSampler, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_sampler_parameteri(__getObjectID(sampler), pname); #else return 0; #end } public function getSamplerParameteriv(sampler:GLSampler, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_sampler_parameteriv(__getObjectID(sampler), pname, params); #end } public function getShaderi(shader:GLShader, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_shaderi(__getObjectID(shader), pname); #else return 0; #end } public function getShaderiv(shader:GLShader, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_shaderiv(__getObjectID(shader), pname, params); #end } public function getShaderInfoLog(shader:GLShader):String { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var result = NativeCFFI.lime_gl_get_shader_info_log(__getObjectID(shader)); return CFFI.stringValue(result); #else return null; #end } public function getShaderParameter(shader:GLShader, pname:Int):Dynamic { return getShaderi(shader, pname); } public function getShaderPrecisionFormat(shadertype:Int, precisiontype:Int):GLShaderPrecisionFormat { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_shader_precision_format(shadertype, precisiontype); #else return null; #end } public function getShaderSource(shader:GLShader):String { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var result = NativeCFFI.lime_gl_get_shader_source(__getObjectID(shader)); return CFFI.stringValue(result); #else return null; #end } public function getString(name:Int):String { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var result = NativeCFFI.lime_gl_get_string(name); return CFFI.stringValue(result); #else return null; #end } public function getStringi(name:Int, index:Int):String { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var result = NativeCFFI.lime_gl_get_stringi(name, index); return CFFI.stringValue(result); #else return null; #end } public function getSupportedExtensions():Array { if (__supportedExtensions == null) { // TODO: getStringi for newer GL versions __supportedExtensions = new Array(); var extensions = getString(GL.EXTENSIONS); if (extensions != null) { var extensionList = extensions.split(" "); for (extension in extensionList) { if (StringTools.startsWith(extension, "GL_")) { __supportedExtensions.push(extension.substr(3)); } else { __supportedExtensions.push(extension); } } } } return __supportedExtensions; } public function getSyncParameter(sync:GLSync, pname:Int):Dynamic { // TODO return null; } public function getSyncParameteri(sync:GLSync, pname:Int):Int { // TODO return 0; } public function getSyncParameteriv(sync:GLSync, pname:Int, params:DataPointer):Void { // TODO } public function getTexParameter(target:Int, pname:Int):Dynamic { switch (pname) { case GL.TEXTURE_MAX_LOD, GL.TEXTURE_MIN_LOD: return getTexParameterf(target, pname); case GL.TEXTURE_IMMUTABLE_FORMAT: return getTexParameterf(target, pname) != 0; default: return getTexParameteri(target, pname); } } public function getTexParameterf(target:Int, pname:Int):Float { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_tex_parameterf(target, pname); #else return 0; #end } public function getTexParameterfv(target:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_tex_parameterfv(target, pname, params); #end } public function getTexParameteri(target:Int, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_tex_parameteri(target, pname); #else return 0; #end } public function getTexParameteriv(target:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_tex_parameteriv(target, pname, params); #end } public function getTransformFeedbackVarying(program:GLProgram, index:Int):GLActiveInfo { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) #if hl var result = NativeCFFI.lime_gl_get_transform_feedback_varying(__getObjectID(program), index); if (result != null) { return { size: result.size, type: result.type, name: CFFI.stringValue(result.name) }; } else { return null; } #else var result:Dynamic = NativeCFFI.lime_gl_get_transform_feedback_varying(__getObjectID(program), index); return result; #end #else return null; #end } public function getUniform(program:GLProgram, location:GLUniformLocation):Dynamic { var info = getActiveUniform(program, location); var bools = 0; var ints = 0; var floats = 0; switch (info.type) { case GL.BOOL: bools = 1; case GL.INT: ints = 1; case GL.FLOAT: floats = 1; case GL.FLOAT_VEC2: floats = 2; case GL.INT_VEC2: ints = 2; case GL.BOOL_VEC2: bools = 2; case GL.FLOAT_VEC3: floats = 3; case GL.INT_VEC3: ints = 3; case GL.BOOL_VEC3: bools = 3; case GL.FLOAT_VEC4: floats = 4; case GL.INT_VEC4: ints = 4; case GL.BOOL_VEC4: bools = 4; case GL.FLOAT_MAT2: floats = 4; case GL.FLOAT_MAT2x3: floats = 12; case GL.FLOAT_MAT2x4: floats = 16; case GL.FLOAT_MAT3: floats = 9; case GL.FLOAT_MAT3x2: floats = 18; case GL.FLOAT_MAT3x4: floats = 36; case GL.FLOAT_MAT4: floats = 16; case GL.FLOAT_MAT4x2: floats = 32; case GL.FLOAT_MAT4x3: floats = 48; case GL.SAMPLER_2D, GL.SAMPLER_3D, GL.SAMPLER_CUBE, GL.SAMPLER_2D_SHADOW: ints = 1; default: return null; } if (bools == 1) { return getUniformi(program, location) != 0; } else if (ints == 1) { return getUniformi(program, location); } else if (floats == 1) { return getUniformf(program, location); } else if (bools > 0) { var params = Bytes.alloc(bools); getUniformiv(program, location, params); var data = new Array(); for (i in 0...bools) { data[i] = params.get(i) != 0; } return data; } else if (ints > 0) { var params = new Int32Array(ints); getUniformiv(program, location, params); return params; } else if (floats > 0) { var params = new Float32Array(floats); getUniformfv(program, location, params); return params; } else { return null; } } public function getUniformf(program:GLProgram, location:GLUniformLocation):Float { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_uniformf(__getObjectID(program), location); #else return 0; #end } public function getUniformfv(program:GLProgram, location:GLUniformLocation, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_uniformfv(__getObjectID(program), location, params); #end } public function getUniformi(program:GLProgram, location:GLUniformLocation):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_uniformi(__getObjectID(program), location); #else return 0; #end } public function getUniformiv(program:GLProgram, location:GLUniformLocation, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_uniformiv(__getObjectID(program), location, params); #end } public function getUniformui(program:GLProgram, location:GLUniformLocation):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_uniformui(__getObjectID(program), location); #else return 0; #end } public function getUniformuiv(program:GLProgram, location:GLUniformLocation, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_uniformuiv(__getObjectID(program), location, params); #end } public function getUniformBlockIndex(program:GLProgram, uniformBlockName:String):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_uniform_block_index(__getObjectID(program), uniformBlockName); #else return 0; #end } public function getUniformIndices(program:GLProgram, uniformNames:Array):Array { // TODO return null; } public function getUniformLocation(program:GLProgram, name:String):GLUniformLocation { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_uniform_location(__getObjectID(program), name); #else return 0; #end } public function getVertexAttrib(index:Int, pname:Int):Dynamic { return getVertexAttribi(index, pname); } public function getVertexAttribf(index:Int, pname:Int):Float { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_vertex_attribf(index, pname); #else return 0; #end } public function getVertexAttribfv(index:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_vertex_attribfv(index, pname, params); #end } public function getVertexAttribi(index:Int, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_vertex_attribi(index, pname); #else return 0; #end } public function getVertexAttribIi(index:Int, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_vertex_attribii(index, pname); #else return 0; #end } public function getVertexAttribIiv(index:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_vertex_attribiiv(index, pname, params); #end } public function getVertexAttribIui(index:Int, pname:Int):Int { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_vertex_attribiui(index, pname); #else return 0; #end } public function getVertexAttribIuiv(index:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_vertex_attribiuiv(index, pname, params); #end } public function getVertexAttribiv(index:Int, pname:Int, params:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_get_vertex_attribiv(index, pname, params); #end } public function getVertexAttribPointerv(index:Int, pname:Int):DataPointer { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_get_vertex_attrib_pointerv(index, pname); #else return 0; #end } public function hint(target:Int, mode:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_hint(target, mode); #end } public function invalidateFramebuffer(target:Int, attachments:Array):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) #if hl var _attachments = new hl.NativeArray(attachments.length); for (i in 0...attachments.length) _attachments[i] = attachments[i]; var attachments = _attachments; #end NativeCFFI.lime_gl_invalidate_framebuffer(target, attachments); #end } public function invalidateSubFramebuffer(target:Int, attachments:Array, x:Int, y:Int, width:Int, height:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) #if hl var _attachments = new hl.NativeArray(attachments.length); for (i in 0...attachments.length) _attachments[i] = attachments[i]; var attachments = _attachments; #end NativeCFFI.lime_gl_invalidate_sub_framebuffer(target, attachments, x, y, width, height); #end } public function isBuffer(buffer:GLBuffer):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_buffer(__getObjectID(buffer)); #else return false; #end } public function isContextLost():Bool { return __isContextLost; } public function isEnabled(cap:Int):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_enabled(cap); #else return false; #end } public function isFramebuffer(framebuffer:GLFramebuffer):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_framebuffer(__getObjectID(framebuffer)); #else return false; #end } public function isProgram(program:GLProgram):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_program(__getObjectID(program)); #else return false; #end } public function isQuery(query:GLQuery):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_query(__getObjectID(query)); #else return false; #end } public function isRenderbuffer(renderbuffer:GLRenderbuffer):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_renderbuffer(__getObjectID(renderbuffer)); #else return false; #end } public function isSampler(sampler:GLSampler):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_sampler(__getObjectID(sampler)); #else return false; #end } public function isShader(shader:GLShader):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_shader(__getObjectID(shader)); #else return false; #end } public function isSync(sync:GLSync):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_sync(sync); #else return false; #end } public function isTexture(texture:GLTexture):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_texture(__getObjectID(texture)); #else return false; #end } public function isTransformFeedback(transformFeedback:GLTransformFeedback):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_transform_feedback(__getObjectID(transformFeedback)); #else return false; #end } public function isVertexArray(vertexArray:GLVertexArrayObject):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_is_vertex_array(__getObjectID(vertexArray)); #else return false; #end } public function lineWidth(width:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_line_width(width); #end } public function linkProgram(program:GLProgram):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_link_program(__getObjectID(program)); #end } public function mapBufferRange(target:Int, offset:DataPointer, length:Int, access:Int):DataPointer { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_map_buffer_range(target, offset, length, access); #else return 0; #end } public function pauseTransformFeedback():Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_pause_transform_feedback(); #end } public function pixelStorei(pname:Int, param:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_pixel_storei(pname, param); #end } public function polygonOffset(factor:Float, units:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_polygon_offset(factor, units); #end } public function programBinary(program:GLProgram, binaryFormat:Int, binary:DataPointer, length:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_program_binary(__getObjectID(program), binaryFormat, binary, length); #end } public function programParameteri(program:GLProgram, pname:Int, value:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_program_parameteri(__getObjectID(program), pname, value); #end } public function readBuffer(src:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_read_buffer(src); #end } public function readPixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_read_pixels(x, y, width, height, format, type, pixels); #end } public function releaseShaderCompiler():Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_release_shader_compiler(); #end } public function renderbufferStorage(target:Int, internalformat:Int, width:Int, height:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_renderbuffer_storage(target, internalformat, width, height); #end } public function renderbufferStorageMultisample(target:Int, samples:Int, internalformat:Int, width:Int, height:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_renderbuffer_storage_multisample(target, samples, internalformat, width, height); #end } public function resumeTransformFeedback():Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_resume_transform_feedback(); #end } public function sampleCoverage(value:Float, invert:Bool):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_sample_coverage(value, invert); #end } public function samplerParameterf(sampler:GLSampler, pname:Int, param:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_sampler_parameterf(__getObjectID(sampler), pname, param); #end } public function samplerParameteri(sampler:GLSampler, pname:Int, param:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_sampler_parameteri(__getObjectID(sampler), pname, param); #end } public function scissor(x:Int, y:Int, width:Int, height:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_scissor(x, y, width, height); #end } public function shaderBinary(shaders:Array, binaryformat:Int, binary:DataPointer, length:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) #if hl var _shaders = new hl.NativeArray(shaders.length); for (i in 0...shaders.length) _shaders[i] = shaders[i].id; var shaders = _shaders; #end NativeCFFI.lime_gl_shader_binary(shaders, binaryformat, binary, length); #end } public function shaderSource(shader:GLShader, source:String):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_shader_source(__getObjectID(shader), source); #end } public function stencilFunc(func:Int, ref:Int, mask:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_stencil_func(func, ref, mask); #end } public function stencilFuncSeparate(face:Int, func:Int, ref:Int, mask:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_stencil_func_separate(face, func, ref, mask); #end } public function stencilMask(mask:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_stencil_mask(mask); #end } public function stencilMaskSeparate(face:Int, mask:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_stencil_mask_separate(face, mask); #end } public function stencilOp(fail:Int, zfail:Int, zpass:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_stencil_op(fail, zfail, zpass); #end } public function stencilOpSeparate(face:Int, fail:Int, zfail:Int, zpass:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_stencil_op_separate(face, fail, zfail, zpass); #end } public function texImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, data:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_tex_image_2d(target, level, internalformat, width, height, border, format, type, data); #end } public function texImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, data:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_tex_image_3d(target, level, internalformat, width, height, depth, border, format, type, data); #end } public function texStorage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_tex_storage_2d(target, level, internalformat, width, height); #end } public function texStorage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_tex_storage_3d(target, level, internalformat, width, height, depth); #end } public function texParameterf(target:Int, pname:Int, param:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_tex_parameterf(target, pname, param); #end } public function texParameteri(target:Int, pname:Int, param:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_tex_parameteri(target, pname, param); #end } public function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, pixels:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_tex_sub_image_2d(target, level, xoffset, yoffset, width, height, format, type, pixels); #end } public function texSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, data:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_tex_sub_image_3d(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); #end } @:noCompletion @:dox(hide) public function toString():String { return "NativeOpenGLRenderContext"; } public function transformFeedbackVaryings(program:GLProgram, varyings:Array, bufferMode:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) #if hl var _varyings = new hl.NativeArray(varyings.length); for (i in 0...varyings.length) _varyings[i] = varyings[i].charCodeAt(0); var varyings = _varyings; #end NativeCFFI.lime_gl_transform_feedback_varyings(__getObjectID(program), varyings, bufferMode); #end } public function uniform1f(location:GLUniformLocation, v0:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform1f(location, v0); #end } public function uniform1fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform1fv(location, count, v); #end } public function uniform1i(location:GLUniformLocation, v0:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform1i(location, v0); #end } public function uniform1iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform1iv(location, count, v); #end } public function uniform1ui(location:GLUniformLocation, v0:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform1ui(location, v0); #end } public function uniform1uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform1uiv(location, count, v); #end } public function uniform2f(location:GLUniformLocation, v0:Float, v1:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform2f(location, v0, v1); #end } public function uniform2fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform2fv(location, count, v); #end } public function uniform2i(location:GLUniformLocation, v0:Int, v1:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform2i(location, v0, v1); #end } public function uniform2iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform2iv(location, count, v); #end } public function uniform2ui(location:GLUniformLocation, v0:Int, v1:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform2ui(location, v0, v1); #end } public function uniform2uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform2uiv(location, count, v); #end } public function uniform3f(location:GLUniformLocation, v0:Float, v1:Float, v2:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform3f(location, v0, v1, v2); #end } public function uniform3fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform3fv(location, count, v); #end } public function uniform3i(location:GLUniformLocation, v0:Int, v1:Int, v2:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform3i(location, v0, v1, v2); #end } public function uniform3iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform3iv(location, count, v); #end } public function uniform3ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform3ui(location, v0, v1, v2); #end } public function uniform3uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform3uiv(location, count, v); #end } public function uniform4f(location:GLUniformLocation, v0:Float, v1:Float, v2:Float, v3:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform4f(location, v0, v1, v2, v3); #end } public function uniform4fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform4fv(location, count, v); #end } public function uniform4i(location:GLUniformLocation, v0:Int, v1:Int, v2:Int, v3:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform4i(location, v0, v1, v2, v3); #end } public function uniform4iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform4iv(location, count, v); #end } public function uniform4ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int, v3:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform4ui(location, v0, v1, v2, v3); #end } public function uniform4uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform4uiv(location, count, v); #end } public function uniformBlockBinding(program:GLProgram, uniformBlockIndex:Int, uniformBlockBinding:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_block_binding(__getObjectID(program), uniformBlockIndex, uniformBlockBinding); #end } public function uniformMatrix2fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_matrix2fv(location, count, transpose, v); #end } public function uniformMatrix2x3fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_matrix2x3fv(location, count, transpose, v); #end } public function uniformMatrix2x4fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_matrix2x4fv(location, count, transpose, v); #end } public function uniformMatrix3fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_matrix3fv(location, count, transpose, v); #end } public function uniformMatrix3x2fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_matrix3x2fv(location, count, transpose, v); #end } public function uniformMatrix3x4fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_matrix3x4fv(location, count, transpose, v); #end } public function uniformMatrix4fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_matrix4fv(location, count, transpose, v); #end } public function uniformMatrix4x2fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_matrix4x2fv(location, count, transpose, v); #end } public function uniformMatrix4x3fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_uniform_matrix4x3fv(location, count, transpose, v); #end } public function unmapBuffer(target:Int):Bool { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) return NativeCFFI.lime_gl_unmap_buffer(target); #else return false; #end } public function useProgram(program:GLProgram):Void { __currentProgram = program; #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_use_program(__getObjectID(program)); #end } public function validateProgram(program:GLProgram):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_validate_program(__getObjectID(program)); #end } public function vertexAttrib1f(index:Int, v0:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib1f(index, v0); #end } public function vertexAttrib1fv(index:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib1fv(index, v); #end } public function vertexAttrib2f(index:Int, v0:Float, y:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib2f(index, v0, y); #end } public function vertexAttrib2fv(index:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib2fv(index, v); #end } public function vertexAttrib3f(index:Int, v0:Float, v1:Float, v2:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib3f(index, v0, v1, v2); #end } public function vertexAttrib3fv(index:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib3fv(index, v); #end } public function vertexAttrib4f(index:Int, v0:Float, v1:Float, v2:Float, v3:Float):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib4f(index, v0, v1, v2, v3); #end } public function vertexAttrib4fv(index:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib4fv(index, v); #end } public function vertexAttribDivisor(index:Int, divisor:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib_divisor(index, divisor); #end } public function vertexAttribI4i(index:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attribi4i(index, v0, v1, v2, v3); #end } // public function vertexAttribI4iv (index:Int, value:js.html.Int32Array) { // public function vertexAttribI4iv (index:Int, value:Array) { public function vertexAttribI4iv(index:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attribi4iv(index, v); #end } public function vertexAttribI4ui(index:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attribi4ui(index, v0, v1, v2, v3); #end } // public function vertexAttribI4iv (index:Int, value:js.html.Int32Array) { // public function vertexAttribI4iv (index:Int, value:Array) { public function vertexAttribI4uiv(index:Int, v:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attribi4uiv(index, v); #end } public function vertexAttribIPointer(index:Int, size:Int, type:Int, stride:Int, offset:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib_ipointer(index, size, type, stride, offset); #end } public function vertexAttribPointer(index:Int, size:Int, type:Int, normalized:Bool, stride:Int, offset:DataPointer):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_vertex_attrib_pointer(index, size, type, normalized, stride, offset); #end } public function viewport(x:Int, y:Int, width:Int, height:Int):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_viewport(x, y, width, height); #end } public function waitSync(sync:GLSync, flags:Int, timeout:Int64):Void { #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) NativeCFFI.lime_gl_wait_sync(sync, flags, timeout.high, timeout.low); #end } private function __contextLost():Void { __isContextLost = true; __arrayBufferBinding = null; __elementBufferBinding = null; __currentProgram = null; __framebufferBinding = null; __renderbufferBinding = null; __texture2DBinding = null; __textureCubeMapBinding = null; } #if (!js || !html5 || doc_gen) private function __createObject(id:Int):GLObject { return new GLObject(id); } private function __getObjectID(object:GLObject):Int { return (object == null) ? 0 : object.id; } #end private function __initialize():Void { if (!__initialized) { __extensionObjectConstructors["AMD_compressed_3DC_texture"] = AMD_compressed_3DC_texture.new; __extensionObjectConstructors["AMD_compressed_ATC_texture"] = AMD_compressed_ATC_texture.new; __extensionObjectConstructors["AMD_performance_monitor"] = AMD_performance_monitor.new; __extensionObjectConstructors["AMD_program_binary_Z400"] = AMD_program_binary_Z400.new; __extensionObjectConstructors["ANGLE_framebuffer_blit"] = ANGLE_framebuffer_blit.new; __extensionObjectConstructors["ANGLE_framebuffer_multisample"] = ANGLE_framebuffer_multisample.new; __extensionObjectConstructors["ANGLE_instanced_arrays"] = ANGLE_instanced_arrays.new; __extensionObjectConstructors["ANGLE_pack_reverse_row_order"] = ANGLE_pack_reverse_row_order.new; __extensionObjectConstructors["ANGLE_texture_compression_dxt3"] = ANGLE_texture_compression_dxt3.new; __extensionObjectConstructors["ANGLE_texture_compression_dxt5"] = ANGLE_texture_compression_dxt5.new; __extensionObjectConstructors["ANGLE_texture_usage"] = ANGLE_texture_usage.new; __extensionObjectConstructors["ANGLE_translated_shader_source"] = ANGLE_translated_shader_source.new; __extensionObjectConstructors["APPLE_copy_texture_levels"] = APPLE_copy_texture_levels.new; __extensionObjectConstructors["APPLE_framebuffer_multisample"] = APPLE_framebuffer_multisample.new; __extensionObjectConstructors["APPLE_rgb_422"] = APPLE_rgb_422.new; __extensionObjectConstructors["APPLE_sync"] = APPLE_sync.new; __extensionObjectConstructors["APPLE_texture_format_BGRA8888"] = APPLE_texture_format_BGRA8888.new; __extensionObjectConstructors["APPLE_texture_max_level"] = APPLE_texture_max_level.new; __extensionObjectConstructors["ARM_mali_program_binary"] = ARM_mali_program_binary.new; __extensionObjectConstructors["ARM_mali_shader_binary"] = ARM_mali_shader_binary.new; __extensionObjectConstructors["ARM_rgba8"] = ARM_rgba8.new; __extensionObjectConstructors["DMP_shader_binary"] = DMP_shader_binary.new; __extensionObjectConstructors["EXT_bgra"] = EXT_bgra.new; __extensionObjectConstructors["EXT_blend_minmax"] = EXT_blend_minmax.new; __extensionObjectConstructors["EXT_color_buffer_float"] = EXT_color_buffer_float.new; __extensionObjectConstructors["EXT_color_buffer_half_float"] = EXT_color_buffer_half_float.new; __extensionObjectConstructors["EXT_debug_label"] = EXT_debug_label.new; __extensionObjectConstructors["EXT_debug_marker"] = EXT_debug_marker.new; __extensionObjectConstructors["EXT_discard_framebuffer"] = EXT_discard_framebuffer.new; __extensionObjectConstructors["EXT_map_buffer_range"] = EXT_map_buffer_range.new; __extensionObjectConstructors["EXT_multi_draw_arrays"] = EXT_multi_draw_arrays.new; __extensionObjectConstructors["EXT_multisampled_render_to_texture"] = EXT_multisampled_render_to_texture.new; __extensionObjectConstructors["EXT_multiview_draw_buffers"] = EXT_multiview_draw_buffers.new; __extensionObjectConstructors["EXT_occlusion_query_boolean"] = EXT_occlusion_query_boolean.new; __extensionObjectConstructors["EXT_packed_depth_stencil"] = EXT_packed_depth_stencil.new; __extensionObjectConstructors["EXT_read_format_bgra"] = EXT_read_format_bgra.new; __extensionObjectConstructors["EXT_robustness"] = EXT_robustness.new; __extensionObjectConstructors["EXT_sRGB"] = EXT_sRGB.new; __extensionObjectConstructors["EXT_separate_shader_objects"] = EXT_separate_shader_objects.new; __extensionObjectConstructors["EXT_shader_framebuffer_fetch"] = EXT_shader_framebuffer_fetch.new; __extensionObjectConstructors["EXT_shader_texture_lod"] = EXT_shader_texture_lod.new; __extensionObjectConstructors["EXT_shadow_samplers"] = EXT_shadow_samplers.new; __extensionObjectConstructors["EXT_texture_compression_dxt1"] = EXT_texture_compression_dxt1.new; __extensionObjectConstructors["EXT_texture_compression_s3tc"] = EXT_texture_compression_s3tc.new; __extensionObjectConstructors["EXT_texture_filter_anisotropic"] = EXT_texture_filter_anisotropic.new; __extensionObjectConstructors["EXT_texture_format_BGRA8888"] = EXT_texture_format_BGRA8888.new; __extensionObjectConstructors["EXT_texture_rg"] = EXT_texture_rg.new; __extensionObjectConstructors["EXT_texture_storage"] = EXT_texture_storage.new; __extensionObjectConstructors["EXT_texture_type_2_10_10_10_REV"] = EXT_texture_type_2_10_10_10_REV.new; __extensionObjectConstructors["EXT_unpack_subimage"] = EXT_unpack_subimage.new; __extensionObjectConstructors["FJ_shader_binary_GCCSO"] = FJ_shader_binary_GCCSO.new; __extensionObjectConstructors["IMG_multisampled_render_to_texture"] = IMG_multisampled_render_to_texture.new; __extensionObjectConstructors["IMG_program_binary"] = IMG_program_binary.new; __extensionObjectConstructors["IMG_read_format"] = IMG_read_format.new; __extensionObjectConstructors["IMG_shader_binary"] = IMG_shader_binary.new; __extensionObjectConstructors["IMG_texture_compression_pvrtc"] = IMG_texture_compression_pvrtc.new; __extensionObjectConstructors["KHR_debug"] = KHR_debug.new; __extensionObjectConstructors["KHR_texture_compression_astc_ldr"] = KHR_texture_compression_astc_ldr.new; __extensionObjectConstructors["NV_coverage_sample"] = NV_coverage_sample.new; __extensionObjectConstructors["NV_depth_nonlinear"] = NV_depth_nonlinear.new; __extensionObjectConstructors["NV_draw_buffers"] = NV_draw_buffers.new; __extensionObjectConstructors["NV_fbo_color_attachments"] = NV_fbo_color_attachments.new; __extensionObjectConstructors["NV_fence"] = NV_fence.new; __extensionObjectConstructors["NV_read_buffer"] = NV_read_buffer.new; __extensionObjectConstructors["NV_read_buffer_front"] = NV_read_buffer_front.new; __extensionObjectConstructors["NV_read_depth"] = NV_read_depth.new; __extensionObjectConstructors["NV_read_depth_stencil"] = NV_read_depth_stencil.new; __extensionObjectConstructors["NV_read_stencil"] = NV_read_stencil.new; __extensionObjectConstructors["NV_texture_compression_s3tc_update"] = NV_texture_compression_s3tc_update.new; __extensionObjectConstructors["NV_texture_npot_2D_mipmap"] = NV_texture_npot_2D_mipmap.new; __extensionObjectConstructors["NVX_gpu_memory_info"] = NVX_gpu_memory_info.new; __extensionObjectConstructors["OES_EGL_image"] = OES_EGL_image.new; __extensionObjectConstructors["OES_EGL_image_external"] = OES_EGL_image_external.new; __extensionObjectConstructors["OES_compressed_ETC1_RGB8_texture"] = OES_compressed_ETC1_RGB8_texture.new; __extensionObjectConstructors["OES_compressed_paletted_texture"] = OES_compressed_paletted_texture.new; __extensionObjectConstructors["OES_depth24"] = OES_depth24.new; __extensionObjectConstructors["OES_depth32"] = OES_depth32.new; __extensionObjectConstructors["OES_depth_texture"] = OES_depth_texture.new; __extensionObjectConstructors["OES_element_index_uint"] = OES_element_index_uint.new; __extensionObjectConstructors["OES_get_program_binary"] = OES_get_program_binary.new; __extensionObjectConstructors["OES_mapbuffer"] = OES_mapbuffer.new; __extensionObjectConstructors["OES_packed_depth_stencil"] = OES_packed_depth_stencil.new; __extensionObjectConstructors["OES_required_internalformat"] = OES_required_internalformat.new; __extensionObjectConstructors["OES_rgb8_rgba8"] = OES_rgb8_rgba8.new; __extensionObjectConstructors["OES_standard_derivatives"] = OES_standard_derivatives.new; __extensionObjectConstructors["OES_stencil1"] = OES_stencil1.new; __extensionObjectConstructors["OES_stencil4"] = OES_stencil4.new; __extensionObjectConstructors["OES_surfaceless_context"] = OES_surfaceless_context.new; __extensionObjectConstructors["OES_texture_3D"] = OES_texture_3D.new; __extensionObjectConstructors["OES_texture_float"] = OES_texture_float.new; __extensionObjectConstructors["OES_texture_float_linear"] = OES_texture_float_linear.new; __extensionObjectConstructors["OES_texture_half_float"] = OES_texture_half_float.new; __extensionObjectConstructors["OES_texture_half_float_linear"] = OES_texture_half_float_linear.new; __extensionObjectConstructors["OES_texture_npot"] = OES_texture_npot.new; __extensionObjectConstructors["OES_vertex_array_object"] = OES_vertex_array_object.new; __extensionObjectConstructors["OES_vertex_half_float"] = OES_vertex_half_float.new; __extensionObjectConstructors["OES_vertex_type_10_10_10_2"] = OES_vertex_type_10_10_10_2.new; __extensionObjectConstructors["QCOM_alpha_test"] = QCOM_alpha_test.new; __extensionObjectConstructors["QCOM_binning_control"] = QCOM_binning_control.new; __extensionObjectConstructors["QCOM_driver_control"] = QCOM_driver_control.new; __extensionObjectConstructors["QCOM_extended_get"] = QCOM_extended_get.new; __extensionObjectConstructors["QCOM_extended_get2"] = QCOM_extended_get2.new; __extensionObjectConstructors["QCOM_perfmon_global_mode"] = QCOM_perfmon_global_mode.new; __extensionObjectConstructors["QCOM_tiled_rendering"] = QCOM_tiled_rendering.new; __extensionObjectConstructors["QCOM_writeonly_rendering"] = QCOM_writeonly_rendering.new; __extensionObjectConstructors["VIV_shader_binary"] = VIV_shader_binary.new; } __initialized = true; } } ================================================ FILE: src/lime/_internal/backend/native/NativeWindow.hx ================================================ package lime._internal.backend.native; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; import lime.app.Application; import lime.graphics.cairo.Cairo; import lime.graphics.cairo.CairoFormat; import lime.graphics.cairo.CairoImageSurface; import lime.graphics.cairo.CairoSurface; import lime.graphics.opengl.GL; import lime.graphics.CairoRenderContext; import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.graphics.OpenGLRenderContext; import lime.graphics.RenderContext; import lime.math.Rectangle; import lime.math.Vector2; import lime.system.CFFI; import lime.system.Display; import lime.system.DisplayMode; import lime.system.JNI; import lime.system.System; import lime.ui.MouseCursor; import lime.ui.Window; import lime.utils.UInt8Array; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime._internal.backend.native.NativeOpenGLRenderContext) @:access(lime.app.Application) @:access(lime.graphics.cairo.Cairo) @:access(lime.graphics.opengl.GL) @:access(lime.graphics.OpenGLRenderContext) @:access(lime.graphics.RenderContext) @:access(lime.system.DisplayMode) @:access(lime.ui.Window) class NativeWindow { public var handle:Dynamic; private var closing:Bool; private var cursor:MouseCursor; private var displayMode:DisplayMode; private var frameRate:Float; private var mouseLock:Bool; private var parent:Window; private var useHardware:Bool; #if lime_cairo private var cacheLock:Dynamic; private var cairo:Cairo; private var primarySurface:CairoSurface; #end public function new(parent:Window) { this.parent = parent; cursor = DEFAULT; displayMode = new DisplayMode(0, 0, 0, 0); var attributes = parent.__attributes; var contextAttributes = Reflect.hasField(attributes, "context") ? attributes.context : {}; var title = Reflect.hasField(attributes, "title") ? attributes.title : "Lime Application"; var flags = 0; if (!Reflect.hasField(contextAttributes, "antialiasing")) contextAttributes.antialiasing = 0; if (!Reflect.hasField(contextAttributes, "background")) contextAttributes.background = 0; if (!Reflect.hasField(contextAttributes, "colorDepth")) contextAttributes.colorDepth = 24; if (!Reflect.hasField(contextAttributes, "depth")) contextAttributes.depth = true; if (!Reflect.hasField(contextAttributes, "hardware")) contextAttributes.hardware = true; if (!Reflect.hasField(contextAttributes, "stencil")) contextAttributes.stencil = true; if (!Reflect.hasField(contextAttributes, "vsync")) contextAttributes.vsync = false; #if (cairo || (!lime_opengl && !lime_opengles)) contextAttributes.type = CAIRO; #end if (Reflect.hasField(contextAttributes, "type") && contextAttributes.type == CAIRO) contextAttributes.hardware = false; if (Reflect.hasField(attributes, "allowHighDPI") && attributes.allowHighDPI) flags |= cast WindowFlags.WINDOW_FLAG_ALLOW_HIGHDPI; if (Reflect.hasField(attributes, "alwaysOnTop") && attributes.alwaysOnTop) flags |= cast WindowFlags.WINDOW_FLAG_ALWAYS_ON_TOP; if (Reflect.hasField(attributes, "borderless") && attributes.borderless) flags |= cast WindowFlags.WINDOW_FLAG_BORDERLESS; if (Reflect.hasField(attributes, "fullscreen") && attributes.fullscreen) flags |= cast WindowFlags.WINDOW_FLAG_FULLSCREEN; if (Reflect.hasField(attributes, "hidden") && attributes.hidden) flags |= cast WindowFlags.WINDOW_FLAG_HIDDEN; if (Reflect.hasField(attributes, "maximized") && attributes.maximized) flags |= cast WindowFlags.WINDOW_FLAG_MAXIMIZED; if (Reflect.hasField(attributes, "minimized") && attributes.minimized) flags |= cast WindowFlags.WINDOW_FLAG_MINIMIZED; if (Reflect.hasField(attributes, "resizable") && attributes.resizable) flags |= cast WindowFlags.WINDOW_FLAG_RESIZABLE; if (contextAttributes.antialiasing >= 4) { flags |= cast WindowFlags.WINDOW_FLAG_HW_AA_HIRES; } else if (contextAttributes.antialiasing >= 2) { flags |= cast WindowFlags.WINDOW_FLAG_HW_AA; } if (contextAttributes.colorDepth == 32) flags |= cast WindowFlags.WINDOW_FLAG_COLOR_DEPTH_32_BIT; if (contextAttributes.depth) flags |= cast WindowFlags.WINDOW_FLAG_DEPTH_BUFFER; if (contextAttributes.hardware) flags |= cast WindowFlags.WINDOW_FLAG_HARDWARE; if (contextAttributes.stencil) flags |= cast WindowFlags.WINDOW_FLAG_STENCIL_BUFFER; if (contextAttributes.vsync) flags |= cast WindowFlags.WINDOW_FLAG_VSYNC; var width = Reflect.hasField(attributes, "width") ? attributes.width : #if desktop 800 #else 0 #end; var height = Reflect.hasField(attributes, "height") ? attributes.height : #if desktop 600 #else 0 #end; #if (!macro && lime_cffi) handle = NativeCFFI.lime_window_create(parent.application.__backend.handle, width, height, flags, title); if (handle != null) { parent.__width = NativeCFFI.lime_window_get_width(handle); parent.__height = NativeCFFI.lime_window_get_height(handle); parent.__x = NativeCFFI.lime_window_get_x(handle); parent.__y = NativeCFFI.lime_window_get_y(handle); parent.__hidden = (Reflect.hasField(attributes, "hidden") && attributes.hidden); parent.id = NativeCFFI.lime_window_get_id(handle); } parent.__scale = NativeCFFI.lime_window_get_scale(handle); var context = new RenderContext(); context.window = parent; var contextType:String = CFFI.stringValue(NativeCFFI.lime_window_get_context_type(handle)); switch (contextType) { case "opengl": var gl = new NativeOpenGLRenderContext(); useHardware = true; contextAttributes.hardware = true; #if lime_opengl context.gl = gl; #end context.gles2 = gl; context.webgl = gl; context.type = gl.type; context.version = Std.string(gl.version); if (gl.type == OPENGLES && gl.version >= 3) { context.gles3 = gl; context.webgl2 = gl; } if (GL.context == null) { GL.context = gl; } default: useHardware = false; contextAttributes.hardware = false; #if lime_cairo context.cairo = cairo; context.type = CAIRO; context.version = ""; parent.context = context; render(); #end context.type = CAIRO; } contextAttributes.type = context.type; context.attributes = contextAttributes; parent.context = context; setFrameRate(Reflect.hasField(attributes, "frameRate") ? attributes.frameRate : 60); #end // SDL 2 enables text input events by default, but we want them only // when requested. otherwise, we might get weird behavior like IME // candidate windows appearing unexpectedly when holding down a key. // See, for example: openfl/openfl#2697 // it appears that SDL 3 may behave differently, if we ever upgrade. setTextInputEnabled(false); } public function alert(message:String, title:String):Void { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_alert(handle, message, title); #end } } public function close():Void { if (!closing) { closing = true; parent.onClose.dispatch(); if (!parent.onClose.canceled) { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_close(handle); #end handle = null; } } else { closing = false; } } } public function contextFlip():Void { #if (!macro && lime_cffi) if (!useHardware) { #if lime_cairo if (cairo != null) { primarySurface.flush(); } #end NativeCFFI.lime_window_context_unlock(handle); } NativeCFFI.lime_window_context_flip(handle); #end } public function focus():Void { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_focus(handle); #end } } public function getCursor():MouseCursor { return cursor; } public function getDisplay():Display { if (handle != null) { #if (!macro && lime_cffi) var index = NativeCFFI.lime_window_get_display(handle); if (index > -1) { return System.getDisplay(index); } #end } return null; } public function getDisplayMode():DisplayMode { if (handle != null) { #if (!macro && lime_cffi) #if hl NativeCFFI.lime_window_get_display_mode(handle, displayMode); #else var data:Dynamic = NativeCFFI.lime_window_get_display_mode(handle); displayMode.width = data.width; displayMode.height = data.height; displayMode.pixelFormat = data.pixelFormat; displayMode.refreshRate = data.refreshRate; #end #end } return displayMode; } public function getFrameRate():Float { return frameRate; } public function getMouseLock():Bool { if (handle != null) { #if (!macro && lime_cffi) mouseLock = NativeCFFI.lime_window_get_mouse_lock(handle); #end } return mouseLock; } public function getOpacity():Float { if (handle != null) { #if (!macro && lime_cffi) return NativeCFFI.lime_window_get_opacity(handle); #end } return 1.0; } public function getTextInputEnabled():Bool { if (handle != null) { #if (!macro && lime_cffi) return NativeCFFI.lime_window_get_text_input_enabled(handle); #end } return false; } public function move(x:Int, y:Int):Void { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_move(handle, x, y); #end } } public function readPixels(rect:Rectangle):Image { var imageBuffer:ImageBuffer = null; switch (parent.context.type) { case OPENGL, OPENGLES, WEBGL: var gl = parent.context.webgl; var windowWidth = Std.int(parent.__width * parent.__scale); var windowHeight = Std.int(parent.__height * parent.__scale); var x:Int; var y:Int; var width:Int; var height:Int; if (rect != null) { x = Std.int(rect.x); y = Std.int((windowHeight - rect.y) - rect.height); width = Std.int(rect.width); height = Std.int(rect.height); } else { x = 0; y = 0; width = windowWidth; height = windowHeight; } var data = new UInt8Array(width * height * 4); gl.readPixels(x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data); #if !js // TODO var rowLength = width * 4; var srcPosition = (height - 1) * rowLength; var destPosition = 0; var temp = Bytes.alloc(rowLength); var buffer = data.buffer; var rows = Std.int(height / 2); while (rows-- > 0) { temp.blit(0, buffer, destPosition, rowLength); buffer.blit(destPosition, buffer, srcPosition, rowLength); buffer.blit(srcPosition, temp, 0, rowLength); destPosition += rowLength; srcPosition -= rowLength; } #end imageBuffer = new ImageBuffer(data, width, height, 32, RGBA32); default: #if (!macro && lime_cffi) #if !cs imageBuffer = NativeCFFI.lime_window_read_pixels(handle, rect, new ImageBuffer(new UInt8Array(Bytes.alloc(0)))); #else var data:Dynamic = NativeCFFI.lime_window_read_pixels(handle, rect, null); if (data != null) { imageBuffer = new ImageBuffer(new UInt8Array(@:privateAccess new Bytes(data.data.length, data.data.b)), data.width, data.height, data.bitsPerPixel); } #end #end if (imageBuffer != null) { imageBuffer.format = RGBA32; } } if (imageBuffer != null) { return new Image(imageBuffer); } return null; } public function render():Void { #if (!macro && lime_cffi) NativeCFFI.lime_window_context_make_current(handle); if (!useHardware) { #if lime_cairo var lock:Dynamic = NativeCFFI.lime_window_context_lock(handle); if (lock != null && (cacheLock == null || cacheLock.pixels != lock.pixels || cacheLock.width != lock.width || cacheLock.height != lock.height)) { primarySurface = CairoImageSurface.create(lock.pixels, CairoFormat.ARGB32, lock.width, lock.height, lock.pitch); if (cairo != null) { cairo.recreate(primarySurface); } else { cairo = new Cairo(primarySurface); } parent.context.cairo = cairo; } cacheLock = lock; #else parent.context = null; #end } #end } public function resize(width:Int, height:Int):Void { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_resize(handle, width, height); #end } } public function setMinSize(width:Int, height:Int):Void { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_minimum_size(handle, width, height); #end } } public function setMaxSize(width:Int, height:Int):Void { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_maximum_size(handle, width, height); #end } } public function setBorderless(value:Bool):Bool { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_borderless(handle, value); #end } return value; } public function setCursor(value:MouseCursor):MouseCursor { if (cursor != value) { if (value == null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_cursor(handle, 0); #end } else { var type:MouseCursorType = switch (value) { case ARROW: ARROW; case CROSSHAIR: CROSSHAIR; case MOVE: MOVE; case POINTER: POINTER; case RESIZE_NESW: RESIZE_NESW; case RESIZE_NS: RESIZE_NS; case RESIZE_NWSE: RESIZE_NWSE; case RESIZE_WE: RESIZE_WE; case TEXT: TEXT; case WAIT: WAIT; case WAIT_ARROW: WAIT_ARROW; default: DEFAULT; } #if (!macro && lime_cffi) NativeCFFI.lime_window_set_cursor(handle, type); #end } cursor = value; } return cursor; } public function setDisplayMode(value:DisplayMode):DisplayMode { if (handle != null) { #if (!macro && lime_cffi) #if hl NativeCFFI.lime_window_set_display_mode(handle, value, displayMode); #else var data:Dynamic = NativeCFFI.lime_window_set_display_mode(handle, value); displayMode.width = data.width; displayMode.height = data.height; displayMode.pixelFormat = data.pixelFormat; displayMode.refreshRate = data.refreshRate; #end #end } return displayMode; } public function setMouseLock(value:Bool):Bool { if (mouseLock != value) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_mouse_lock(handle, value); #end mouseLock = value; } return mouseLock; } public function setTextInputEnabled(value:Bool):Bool { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_text_input_enabled(handle, value); #end } return value; } public function setTextInputRect(value:Rectangle):Rectangle { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_text_input_rect(handle, value); #end } return value; } public function setFrameRate(value:Float):Float { // TODO: Support multiple independent frame rates per window if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_application_set_frame_rate(parent.application.__backend.handle, value); #end } return frameRate = value; } public function setFullscreen(value:Bool):Bool { if (handle != null) { #if (!macro && lime_cffi) value = NativeCFFI.lime_window_set_fullscreen(handle, value); parent.__width = NativeCFFI.lime_window_get_width(handle); parent.__height = NativeCFFI.lime_window_get_height(handle); parent.__x = NativeCFFI.lime_window_get_x(handle); parent.__y = NativeCFFI.lime_window_get_y(handle); #end if (value) { parent.onFullscreen.dispatch(); } } return value; } public function setIcon(image:Image):Void { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_icon(handle, image.buffer); #end } } public function setMaximized(value:Bool):Bool { if (handle != null) { #if (!macro && lime_cffi) return NativeCFFI.lime_window_set_maximized(handle, value); #end } return value; } public function setMinimized(value:Bool):Bool { if (handle != null) { #if (!macro && lime_cffi) return NativeCFFI.lime_window_set_minimized(handle, value); #end } return value; } public function setOpacity(value:Float):Void { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_opacity(handle, value); #end } } public function setResizable(value:Bool):Bool { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_resizable(handle, value); // TODO: remove need for workaround NativeCFFI.lime_window_set_borderless(handle, !parent.__borderless); NativeCFFI.lime_window_set_borderless(handle, parent.__borderless); #end } return value; } public function setTitle(value:String):String { if (handle != null) { #if (!macro && lime_cffi) return NativeCFFI.lime_window_set_title(handle, value); #end } return value; } public function setVisible(value:Bool):Bool { if (handle != null) { #if (!macro && lime_cffi) NativeCFFI.lime_window_set_visible(handle, value); #end } return value; } public function warpMouse(x:Int, y:Int):Void { #if (!macro && lime_cffi) NativeCFFI.lime_window_warp_mouse(handle, x, y); #end } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract MouseCursorType(Int) from Int to Int { var HIDDEN = 0; var ARROW = 1; var CROSSHAIR = 2; var DEFAULT = 3; var MOVE = 4; var POINTER = 5; var RESIZE_NESW = 6; var RESIZE_NS = 7; var RESIZE_NWSE = 8; var RESIZE_WE = 9; var TEXT = 10; var WAIT = 11; var WAIT_ARROW = 12; } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract WindowFlags(Int) { var WINDOW_FLAG_FULLSCREEN = 0x00000001; var WINDOW_FLAG_BORDERLESS = 0x00000002; var WINDOW_FLAG_RESIZABLE = 0x00000004; var WINDOW_FLAG_HARDWARE = 0x00000008; var WINDOW_FLAG_VSYNC = 0x00000010; var WINDOW_FLAG_HW_AA = 0x00000020; var WINDOW_FLAG_HW_AA_HIRES = 0x00000060; var WINDOW_FLAG_ALLOW_SHADERS = 0x00000080; var WINDOW_FLAG_REQUIRE_SHADERS = 0x00000100; var WINDOW_FLAG_DEPTH_BUFFER = 0x00000200; var WINDOW_FLAG_STENCIL_BUFFER = 0x00000400; var WINDOW_FLAG_ALLOW_HIGHDPI = 0x00000800; var WINDOW_FLAG_HIDDEN = 0x00001000; var WINDOW_FLAG_MINIMIZED = 0x00002000; var WINDOW_FLAG_MAXIMIZED = 0x00004000; var WINDOW_FLAG_ALWAYS_ON_TOP = 0x00008000; var WINDOW_FLAG_COLOR_DEPTH_32_BIT = 0x00010000; } ================================================ FILE: src/lime/_internal/format/BMP.hx ================================================ package lime._internal.format; import haxe.io.Bytes; import lime.graphics.Image; import lime.math.Rectangle; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class BMP { public static function encode(image:Image, type:BMPType = null):Bytes { if (image.premultiplied || image.format != RGBA32) { // TODO: Handle encode from different formats image = image.clone(); image.premultiplied = false; image.format = RGBA32; } if (type == null) { type = RGB; } var fileHeaderLength = 14; var infoHeaderLength = 40; var pixelValuesLength = (image.width * image.height * 4); switch (type) { case BITFIELD: infoHeaderLength = 108; case ICO: fileHeaderLength = 0; pixelValuesLength += image.width * image.height; case RGB: pixelValuesLength = ((image.width * 3) + ((image.width * 3) % 4)) * image.height; default: } var data = Bytes.alloc(fileHeaderLength + infoHeaderLength + pixelValuesLength); var position = 0; if (fileHeaderLength > 0) { data.set(position++, 0x42); data.set(position++, 0x4D); data.setInt32(position, data.length); position += 4; data.setUInt16(position, 0); position += 2; data.setUInt16(position, 0); position += 2; data.setInt32(position, fileHeaderLength + infoHeaderLength); position += 4; } data.setInt32(position, infoHeaderLength); position += 4; data.setInt32(position, image.width); position += 4; data.setInt32(position, type == ICO ? image.height * 2 : image.height); position += 4; data.setUInt16(position, 1); position += 2; data.setUInt16(position, type == RGB ? 24 : 32); position += 2; data.setInt32(position, type == BITFIELD ? 3 : 0); position += 4; data.setInt32(position, pixelValuesLength); position += 4; data.setInt32(position, 0x2e30); position += 4; data.setInt32(position, 0x2e30); position += 4; data.setInt32(position, 0); position += 4; data.setInt32(position, 0); position += 4; if (type == BITFIELD) { data.setInt32(position, 0x00FF0000); position += 4; data.setInt32(position, 0x0000FF00); position += 4; data.setInt32(position, 0x000000FF); position += 4; data.setInt32(position, 0xFF000000); position += 4; data.set(position++, 0x20); data.set(position++, 0x6E); data.set(position++, 0x69); data.set(position++, 0x57); for (i in 0...48) { data.set(position++, 0); } } var pixels = image.getPixels(new Rectangle(0, 0, image.width, image.height), ARGB32); var readPosition = 0; var a:Int; var r:Int; var g:Int; var b:Int; switch (type) { case BITFIELD: for (y in 0...image.height) { readPosition = (image.height - 1 - y) * 4 * image.width; for (x in 0...image.width) { a = pixels.get(readPosition++); r = pixels.get(readPosition++); g = pixels.get(readPosition++); b = pixels.get(readPosition++); data.set(position++, b); data.set(position++, g); data.set(position++, r); data.set(position++, a); } } case ICO: var andMask = Bytes.alloc(image.width * image.height); var maskPosition = 0; for (y in 0...image.height) { readPosition = (image.height - 1 - y) * 4 * image.width; for (x in 0...image.width) { a = pixels.get(readPosition++); r = pixels.get(readPosition++); g = pixels.get(readPosition++); b = pixels.get(readPosition++); data.set(position++, b); data.set(position++, g); data.set(position++, r); data.set(position++, a); // if (a < 128) { // andMask.writeByte (1); // } else { andMask.set(maskPosition++, 0); // } } } data.blit(position, andMask, 0, image.width * image.height); case RGB: for (y in 0...image.height) { readPosition = (image.height - 1 - y) * 4 * image.width; for (x in 0...image.width) { a = pixels.get(readPosition++); r = pixels.get(readPosition++); g = pixels.get(readPosition++); b = pixels.get(readPosition++); data.set(position++, b); data.set(position++, g); data.set(position++, r); } for (i in 0...((image.width * 3) % 4)) { data.set(position++, 0); } } default: } return data; } } enum BMPType { RGB; BITFIELD; ICO; } ================================================ FILE: src/lime/_internal/format/Base64.hx ================================================ package lime._internal.format; import haxe.crypto.Base64 as HaxeBase64; import haxe.io.Bytes; class Base64 { private static var DICTIONARY:Array = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); private static var EXTENDED_DICTIONARY:Array = { var result = new Array(); for (a in DICTIONARY) { for (b in DICTIONARY) { result.push(a + b); } } result; }; public static function decode(source:String):Bytes { return HaxeBase64.decode(source); } public static function encode(source:Bytes):String { var result = new Array(); var dictionary = DICTIONARY; var extendedDictionary = EXTENDED_DICTIONARY; var numBytes = source.length; var numInputTriplets = Math.floor(numBytes / 3); var numChunksToWrite = numInputTriplets * 2; #if cpp cpp.NativeArray.setSize(result, Math.ceil(numBytes / 3) * 2); #elseif js untyped (result).length = Math.ceil(numBytes / 3) * 2; #end var numBytesRead = 0; var numChunksWritten = 0; var inputTriplet; while (numChunksWritten < numChunksToWrite) { inputTriplet = (source.get(numBytesRead) << 16) | (source.get(numBytesRead + 1) << 8) | source.get(numBytesRead + 2); result[numChunksWritten] = extendedDictionary[(inputTriplet >> 12) & 0xfff]; result[numChunksWritten + 1] = extendedDictionary[(inputTriplet) & 0xfff]; numBytesRead += 3; numChunksWritten += 2; } switch (numBytes - numInputTriplets * 3) { case 1: inputTriplet = (source.get(numBytesRead) << 16); result[numChunksWritten] = extendedDictionary[(inputTriplet >> 12) & 0xfff]; result[numChunksWritten + 1] = "=="; case 2: inputTriplet = (source.get(numBytesRead) << 16) | (source.get(numBytesRead + 1) << 8); result[numChunksWritten] = extendedDictionary[(inputTriplet >> 12) & 0xfff]; result[numChunksWritten + 1] = dictionary[(inputTriplet >> 6) & 0x3f] + "="; case _: } return result.join(""); } } ================================================ FILE: src/lime/_internal/format/Deflate.hx ================================================ package lime._internal.format; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; #if flash import flash.utils.ByteArray; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class Deflate { public static function compress(bytes:Bytes):Bytes { #if (lime_cffi && !macro) #if !cs return NativeCFFI.lime_deflate_compress(bytes, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_deflate_compress(bytes, null); if (data == null) return null; return @:privateAccess new Bytes(data.length, data.b); #end #elseif js #if commonjs var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("require (\"pako\").deflateRaw")(bytes.getData()); #else var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("pako.deflateRaw")(bytes.getData()); #end return Bytes.ofData(data); #elseif flash var byteArray:ByteArray = cast bytes.getData(); var data = new ByteArray(); data.writeBytes(byteArray); data.deflate(); return Bytes.ofData(data); #else return null; #end } public static function decompress(bytes:Bytes):Bytes { #if (lime_cffi && !macro) #if !cs return NativeCFFI.lime_deflate_decompress(bytes, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_deflate_decompress(bytes, null); if (data == null) return null; return @:privateAccess new Bytes(data.length, data.b); #end #elseif js #if commonjs var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("require (\"pako\").inflateRaw")(bytes.getData()); #else var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("pako.inflateRaw")(bytes.getData()); #end return Bytes.ofData(data); #elseif flash var byteArray:ByteArray = cast bytes.getData(); var data = new ByteArray(); data.writeBytes(byteArray); data.inflate(); return Bytes.ofData(data); #else return null; #end } } ================================================ FILE: src/lime/_internal/format/GZip.hx ================================================ package lime._internal.format; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class GZip { public static function compress(bytes:Bytes):Bytes { #if (lime_cffi && !macro) #if !cs return NativeCFFI.lime_gzip_compress(bytes, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_gzip_compress(bytes, null); if (data == null) return null; return @:privateAccess new Bytes(data.length, data.b); #end #elseif js #if commonjs var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("require (\"pako\").gzip")(bytes.getData()); #else var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("pako.gzip")(bytes.getData()); #end return Bytes.ofData(data); #else return null; #end } public static function decompress(bytes:Bytes):Bytes { #if (lime_cffi && !macro) #if !cs return NativeCFFI.lime_gzip_decompress(bytes, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_gzip_decompress(bytes, null); if (data == null) return null; return @:privateAccess new Bytes(data.length, data.b); #end #elseif js #if commonjs var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("require (\"pako\").ungzip")(bytes.getData()); #else var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("pako.ungzip")(bytes.getData()); #end return Bytes.ofData(data); #else return null; #end } } ================================================ FILE: src/lime/_internal/format/JPEG.hx ================================================ package lime._internal.format; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; import lime._internal.graphics.ImageCanvasUtil; import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.system.CFFI; import lime.utils.UInt8Array; #if (js && html5) import js.Browser; #end #if format import format.jpg.Data; import format.jpg.Writer; import format.tools.Deflate; import haxe.io.Bytes; import haxe.io.BytesOutput; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.graphics.ImageBuffer) class JPEG { public static function decodeBytes(bytes:Bytes, decodeData:Bool = true):Image { #if (lime_cffi && !macro) #if !cs var buffer = NativeCFFI.lime_jpeg_decode_bytes(bytes, decodeData, new ImageBuffer(new UInt8Array(Bytes.alloc(0)))); if (buffer != null) { return new Image(buffer); } #else var bufferData:Dynamic = NativeCFFI.lime_jpeg_decode_bytes(bytes, decodeData, null); if (bufferData != null) { var buffer = new ImageBuffer(bufferData.data, bufferData.width, bufferData.height, bufferData.bpp, bufferData.format); buffer.transparent = bufferData.transparent; return new Image(buffer); } #end #end return null; } public static function decodeFile(path:String, decodeData:Bool = true):Image { #if (lime_cffi && !macro) #if !cs var buffer = NativeCFFI.lime_jpeg_decode_file(path, decodeData, new ImageBuffer(new UInt8Array(Bytes.alloc(0)))); if (buffer != null) { return new Image(buffer); } #else var bufferData:Dynamic = NativeCFFI.lime_jpeg_decode_file(path, decodeData, null); if (bufferData != null) { var buffer = new ImageBuffer(bufferData.data, bufferData.width, bufferData.height, bufferData.bpp, bufferData.format); buffer.transparent = bufferData.transparent; return new Image(buffer); } #end #end return null; } public static function encode(image:Image, quality:Int):Bytes { if (image.premultiplied || image.format != RGBA32) { // TODO: Handle encode from different formats image = image.clone(); image.premultiplied = false; image.format = RGBA32; } #if java #elseif (sys && lime_cffi && (!disable_cffi || !format) && !macro) if (CFFI.enabled) { #if !cs return NativeCFFI.lime_image_encode(image.buffer, 1, quality, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_image_encode(image.buffer, 1, quality, null); return @:privateAccess new Bytes(data.length, data.b); #end } #end #if ((!js || !html5) && format) #if (sys && (!disable_cffi || !format) && !macro) else #end { try { var buffer = image.buffer.data.buffer; var data:Data = { width: image.width, height: image.height, quality: quality, pixels: #if js Bytes.ofData(buffer) #else buffer #end }; var output = new BytesOutput(); var jpeg = new Writer(output); jpeg.write(data); return output.getBytes(); } catch (e:Dynamic) {} } #elseif js ImageCanvasUtil.convertToCanvas(image, false); if (image.buffer.__srcCanvas != null) { var data = image.buffer.__srcCanvas.toDataURL("image/jpeg", quality / 100); #if nodejs var buffer = new js.node.Buffer((data.split(";base64,")[1] : String), "base64").toString("binary"); #else var buffer = Browser.window.atob(data.split(";base64,")[1]); #end var bytes = Bytes.alloc(buffer.length); for (i in 0...buffer.length) { bytes.set(i, buffer.charCodeAt(i)); } return bytes; } #end return null; } } ================================================ FILE: src/lime/_internal/format/LZMA.hx ================================================ package lime._internal.format; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; import lime.utils.UInt8Array; #if flash import flash.utils.CompressionAlgorithm; import flash.utils.ByteArray; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class LZMA { public static function compress(bytes:Bytes):Bytes { #if (lime_cffi && !macro) #if !cs return NativeCFFI.lime_lzma_compress(bytes, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_lzma_compress(bytes, null); if (data == null) return null; return @:privateAccess new Bytes(data.length, data.b); #end #elseif js var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("LZMA.compress")(new UInt8Array(bytes.getData()), 5); if ((data is String)) { return Bytes.ofString(data); } else { return Bytes.ofData(cast data); } #elseif flash var byteArray:ByteArray = cast bytes.getData(); var data = new ByteArray(); data.writeBytes(byteArray); data.compress(CompressionAlgorithm.LZMA); return Bytes.ofData(data); #else return null; #end } public static function decompress(bytes:Bytes):Bytes { #if (lime_cffi && !macro) #if !cs return NativeCFFI.lime_lzma_decompress(bytes, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_lzma_decompress(bytes, null); if (data == null) return null; return @:privateAccess new Bytes(data.length, data.b); #end #elseif js var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("LZMA.decompress")(new UInt8Array(bytes.getData())); if ((data is String)) { return Bytes.ofString(data); } else { return Bytes.ofData(cast data); } #elseif flash var byteArray:ByteArray = cast bytes.getData(); var data = new ByteArray(); data.writeBytes(byteArray); data.uncompress(CompressionAlgorithm.LZMA); return Bytes.ofData(data); #else return null; #end } } ================================================ FILE: src/lime/_internal/format/PNG.hx ================================================ package lime._internal.format; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; import lime._internal.graphics.ImageCanvasUtil; import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.system.CFFI; import lime.utils.UInt8Array; #if (js && html5) import js.Browser; #end #if format import format.png.Data; import format.png.Writer; // import format.tools.Deflate; import haxe.io.Bytes; import haxe.io.BytesOutput; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.graphics.ImageBuffer) class PNG { public static function decodeBytes(bytes:Bytes, decodeData:Bool = true):Image { #if (lime_cffi && !macro) #if !cs var buffer = NativeCFFI.lime_png_decode_bytes(bytes, decodeData, new ImageBuffer(new UInt8Array(Bytes.alloc(0)))); if (buffer != null) { return new Image(buffer); } #else var bufferData:Dynamic = NativeCFFI.lime_png_decode_bytes(bytes, decodeData, null); if (bufferData != null) { var buffer = new ImageBuffer(bufferData.data, bufferData.width, bufferData.height, bufferData.bpp, bufferData.format); buffer.transparent = bufferData.transparent; return new Image(buffer); } #end #end return null; } public static function decodeFile(path:String, decodeData:Bool = true):Image { #if (lime_cffi && !macro) #if !cs var buffer = NativeCFFI.lime_png_decode_file(path, decodeData, new ImageBuffer(new UInt8Array(Bytes.alloc(0)))); if (buffer != null) { return new Image(buffer); } #else var bufferData:Dynamic = NativeCFFI.lime_png_decode_file(path, decodeData, null); if (bufferData != null) { var buffer = new ImageBuffer(bufferData.data, bufferData.width, bufferData.height, bufferData.bpp, bufferData.format); buffer.transparent = bufferData.transparent; return new Image(buffer); } #end #end return null; } public static function encode(image:Image):Bytes { if (image.premultiplied || image.format != RGBA32) { // TODO: Handle encode from different formats image = image.clone(); image.premultiplied = false; image.format = RGBA32; } #if java #elseif (sys && lime_cffi && (!disable_cffi || !format) && !macro) if (CFFI.enabled) { #if !cs return NativeCFFI.lime_image_encode(image.buffer, 0, 0, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_image_encode(image.buffer, 0, 0, null); return @:privateAccess new Bytes(data.length, data.b); #end } #end #if ((!js || !html5) && format) #if (sys && (!disable_cffi || !format) && !macro) else #end { try { var bytes = Bytes.alloc(image.width * image.height * 4 + image.height); var sourceBytes = image.buffer.data.toBytes(); var sourceIndex:Int, index:Int; for (y in 0...image.height) { sourceIndex = y * image.width * 4; index = y * image.width * 4 + y; bytes.set(index, 0); bytes.blit(index + 1, sourceBytes, sourceIndex, image.width * 4); } var data = new List(); data.add(CHeader( { width: image.width, height: image.height, colbits: 8, color: ColTrue(true), interlaced: false })); data.add(CData(Zlib.compress(bytes))); data.add(CEnd); var output = new BytesOutput(); var png = new Writer(output); png.write(data); return output.getBytes(); } catch (e:Dynamic) {} } #elseif js ImageCanvasUtil.convertToCanvas(image, false); if (image.buffer.__srcCanvas != null) { var data = image.buffer.__srcCanvas.toDataURL("image/png"); #if nodejs var buffer = new js.node.Buffer((data.split(";base64,")[1] : String), "base64").toString("binary"); #else var buffer = Browser.window.atob(data.split(";base64,")[1]); #end var bytes = Bytes.alloc(buffer.length); for (i in 0...buffer.length) { bytes.set(i, buffer.charCodeAt(i)); } return bytes; } #end return null; } } ================================================ FILE: src/lime/_internal/format/Zlib.hx ================================================ package lime._internal.format; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; #if flash import flash.utils.ByteArray; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class Zlib { public static function compress(bytes:Bytes):Bytes { #if (lime_cffi && !macro) #if !cs return NativeCFFI.lime_zlib_compress(bytes, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_zlib_compress(bytes, null); if (data == null) return null; return @:privateAccess new Bytes(data.length, data.b); #end #elseif js #if commonjs var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("require (\"pako\").deflate")(bytes.getData()); #else var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("pako.deflate")(bytes.getData()); #end return Bytes.ofData(data); #elseif flash var byteArray:ByteArray = cast bytes.getData(); var data = new ByteArray(); data.writeBytes(byteArray); data.compress(); return Bytes.ofData(data); #else return null; #end } public static function decompress(bytes:Bytes):Bytes { #if (lime_cffi && !macro) #if !cs return NativeCFFI.lime_zlib_decompress(bytes, Bytes.alloc(0)); #else var data:Dynamic = NativeCFFI.lime_zlib_decompress(bytes, null); if (data == null) return null; return @:privateAccess new Bytes(data.length, data.b); #end #elseif js #if commonjs var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("require (\"pako\").inflate")(bytes.getData()); #else var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("pako.inflate")(bytes.getData()); #end return Bytes.ofData(data); #elseif flash var byteArray:ByteArray = cast bytes.getData(); var data = new ByteArray(); data.writeBytes(byteArray); data.uncompress(); return Bytes.ofData(data); #else return null; #end } } ================================================ FILE: src/lime/_internal/graphics/ImageCanvasUtil.hx ================================================ package lime._internal.graphics; import haxe.format.JsonParser; import haxe.io.Bytes; import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.graphics.ImageChannel; import lime.graphics.PixelFormat; import lime.math.ColorMatrix; import lime.math.Rectangle; import lime.math.Vector2; import lime.system.Endian; import lime.utils.BytePointer; import lime.utils.UInt8Array; #if (js && html5) import js.Browser; #end @:access(lime.graphics.ImageBuffer) class ImageCanvasUtil { public static function colorTransform(image:Image, rect:Rectangle, colorMatrix:ColorMatrix):Void { convertToData(image); ImageDataUtil.colorTransform(image, rect, colorMatrix); } public static function convertToCanvas(image:Image, clear:Bool = false):Void { #if (js && html5) var buffer = image.buffer; if (buffer.__srcImage != null) { if (buffer.__srcCanvas == null) { createCanvas(image, buffer.__srcImage.width, buffer.__srcImage.height); buffer.__srcContext.drawImage(buffer.__srcImage, 0, 0); } buffer.__srcImage = null; } else if (buffer.__srcCanvas == null && buffer.data != null) { image.transparent = true; createCanvas(image, buffer.width, buffer.height); createImageData(image); buffer.__srcContext.putImageData(buffer.__srcImageData, 0, 0); } else { if (image.type == DATA && buffer.__srcImageData != null && image.dirty) { buffer.__srcContext.putImageData(buffer.__srcImageData, 0, 0); image.dirty = false; } } if (clear) { buffer.data = null; buffer.__srcImageData = null; } else { if (buffer.data == null && buffer.__srcImageData != null) { buffer.data = cast buffer.__srcImageData.data; } } #end image.type = CANVAS; } public static function convertToData(image:Image, clear:Bool = false):Void { var buffer = image.buffer; #if (js && html5) if (buffer.__srcImage != null) { convertToCanvas(image); } if (buffer.__srcCanvas != null && buffer.data == null) { createImageData(image); if (image.type == CANVAS) image.dirty = false; } else if (image.type == CANVAS && buffer.__srcCanvas != null && image.dirty) { if (buffer.__srcImageData == null) { createImageData(image); } else { buffer.__srcImageData = buffer.__srcContext.getImageData(0, 0, buffer.width, buffer.height); buffer.data = new UInt8Array(cast buffer.__srcImageData.data.buffer); } image.dirty = false; } if (clear) { image.buffer.__srcCanvas = null; image.buffer.__srcContext = null; } #end image.type = DATA; } public static function copyChannel(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, sourceChannel:ImageChannel, destChannel:ImageChannel):Void { convertToData(sourceImage); convertToData(image); ImageDataUtil.copyChannel(image, sourceImage, sourceRect, destPoint, sourceChannel, destChannel); } public static function copyPixels(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, alphaImage:Image = null, alphaPoint:Vector2 = null, mergeAlpha:Bool = false):Void { if (destPoint == null || destPoint.x >= image.width || destPoint.y >= image.height || sourceRect == null || sourceRect.width < 1 || sourceRect.height < 1) { return; } if (alphaImage != null && alphaImage.transparent) { if (alphaPoint == null) alphaPoint = new Vector2(); // TODO: use faster method var tempData = sourceImage.clone(); tempData.copyChannel(alphaImage, new Rectangle(sourceRect.x + alphaPoint.x, sourceRect.y + alphaPoint.y, sourceRect.width, sourceRect.height), new Vector2(sourceRect.x, sourceRect.y), ImageChannel.ALPHA, ImageChannel.ALPHA); sourceImage = tempData; } convertToCanvas(image, true); if (!mergeAlpha) { if (image.transparent && sourceImage.transparent) { image.buffer.__srcContext.clearRect(destPoint.x + image.offsetX, destPoint.y + image.offsetY, sourceRect.width + image.offsetX, sourceRect.height + image.offsetY); } } convertToCanvas(sourceImage); if (sourceImage.buffer.src != null) { // Set default composition (just in case it is different) image.buffer.__srcContext.globalCompositeOperation = "source-over"; image.buffer.__srcContext.drawImage(sourceImage.buffer.src, Std.int(sourceRect.x + sourceImage.offsetX), Std.int(sourceRect.y + sourceImage.offsetY), Std.int(sourceRect.width), Std.int(sourceRect.height), Std.int(destPoint.x + image.offsetX), Std.int(destPoint.y + image.offsetY), Std.int(sourceRect.width), Std.int(sourceRect.height)); } image.dirty = true; image.version++; } public static function createCanvas(image:Image, width:Int, height:Int):Void { #if (js && html5) var buffer = image.buffer; if (buffer.__srcCanvas == null) { buffer.__srcCanvas = cast Browser.document.createElement("canvas"); buffer.__srcCanvas.width = width; buffer.__srcCanvas.height = height; if (!image.transparent) { buffer.__srcCanvas.setAttribute("moz-opaque", "true"); } buffer.__srcContext = buffer.__srcCanvas.getContext("2d", {alpha: image.transparent}); } #end } public static function createImageData(image:Image):Void { #if (js && html5) var buffer = image.buffer; if (buffer.__srcImageData == null) { if (buffer.data == null) { buffer.__srcImageData = buffer.__srcContext.getImageData(0, 0, buffer.width, buffer.height); } else { buffer.__srcImageData = buffer.__srcContext.createImageData(buffer.width, buffer.height); buffer.__srcImageData.data.set(cast buffer.data); } buffer.data = new UInt8Array(cast buffer.__srcImageData.data.buffer); } #end } public static function fillRect(image:Image, rect:Rectangle, color:Int, format:PixelFormat):Void { convertToCanvas(image); var r:Int; var g:Int; var b:Int; var a:Int; if (format == ARGB32) { r = (color >> 16) & 0xFF; g = (color >> 8) & 0xFF; b = color & 0xFF; a = (image.transparent) ? (color >> 24) & 0xFF : 0xFF; } else { r = (color >> 24) & 0xFF; g = (color >> 16) & 0xFF; b = (color >> 8) & 0xFF; a = (image.transparent) ? color & 0xFF : 0xFF; } if (rect.x == 0 && rect.y == 0 && rect.width == image.width && rect.height == image.height) { if (image.transparent && a == 0) { image.buffer.__srcCanvas.width = image.buffer.width; return; } } if (a < 255) { image.buffer.__srcContext.clearRect(rect.x + image.offsetX, rect.y + image.offsetY, rect.width + image.offsetX, rect.height + image.offsetY); } if (a > 0) { image.buffer.__srcContext.fillStyle = 'rgba(' + r + ', ' + g + ', ' + b + ', ' + (a / 255) + ')'; image.buffer.__srcContext.fillRect(rect.x + image.offsetX, rect.y + image.offsetY, rect.width + image.offsetX, rect.height + image.offsetY); } image.dirty = true; image.version++; } public static function floodFill(image:Image, x:Int, y:Int, color:Int, format:PixelFormat):Void { convertToData(image); ImageDataUtil.floodFill(image, x, y, color, format); } public static function getPixel(image:Image, x:Int, y:Int, format:PixelFormat):Int { convertToData(image); return ImageDataUtil.getPixel(image, x, y, format); } public static function getPixel32(image:Image, x:Int, y:Int, format:PixelFormat):Int { convertToData(image); return ImageDataUtil.getPixel32(image, x, y, format); } public static function getPixels(image:Image, rect:Rectangle, format:PixelFormat):Bytes { convertToData(image); return ImageDataUtil.getPixels(image, rect, format); } public static function merge(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, redMultiplier:Int, greenMultiplier:Int, blueMultiplier:Int, alphaMultiplier:Int):Void { convertToData(sourceImage); convertToData(image); ImageDataUtil.merge(image, sourceImage, sourceRect, destPoint, redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier); } public static function resize(image:Image, newWidth:Int, newHeight:Int):Void { var buffer = image.buffer; if (buffer.__srcCanvas == null) { createCanvas(image, newWidth, newHeight); buffer.__srcContext.drawImage(buffer.src, 0, 0, newWidth, newHeight); } else { convertToCanvas(image, true); var sourceCanvas = buffer.__srcCanvas; buffer.__srcCanvas = null; createCanvas(image, newWidth, newHeight); buffer.__srcContext.drawImage(sourceCanvas, 0, 0, newWidth, newHeight); } buffer.__srcImageData = null; buffer.data = null; image.dirty = true; image.version++; } public static function scroll(image:Image, x:Int, y:Int):Void { if ((x % image.width == 0) && (y % image.height == 0)) return; var copy = image.clone(); convertToCanvas(image, true); image.buffer.__srcContext.clearRect(x, y, image.width, image.height); image.buffer.__srcContext.drawImage(copy.src, x, y); image.dirty = true; image.version++; } public static function setPixel(image:Image, x:Int, y:Int, color:Int, format:PixelFormat):Void { convertToData(image); ImageDataUtil.setPixel(image, x, y, color, format); } public static function setPixel32(image:Image, x:Int, y:Int, color:Int, format:PixelFormat):Void { convertToData(image); ImageDataUtil.setPixel32(image, x, y, color, format); } public static function setPixels(image:Image, rect:Rectangle, bytePointer:BytePointer, format:PixelFormat, endian:Endian):Void { convertToData(image); ImageDataUtil.setPixels(image, rect, bytePointer, format, endian); } public static function sync(image:Image, clear:Bool):Void { if (image == null) return; #if (js && html5) if (image.type == CANVAS && (image.buffer.__srcCanvas != null || image.buffer.data != null)) { convertToCanvas(image, clear); } else if (image.type == DATA) { convertToData(image, clear); } #end } } ================================================ FILE: src/lime/_internal/graphics/ImageDataUtil.hx ================================================ package lime._internal.graphics; import haxe.ds.Vector; import haxe.Int32; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.graphics.ImageChannel; import lime.graphics.PixelFormat; import lime.math.ARGB; import lime.math.BGRA; import lime.math.RGBA; import lime.math.ColorMatrix; import lime.math.Rectangle; import lime.math.Vector2; import lime.math.Vector4; import lime.system.CFFI; import lime.system.Endian; import lime.utils.BytePointer; import lime.utils.UInt8Array; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.graphics.ImageBuffer) @:access(lime.math.RGBA) class ImageDataUtil { public static function displaceMap(target:Image, source:Image, map:Image, mapPoint:Vector2, componentX:Vector4, componentY:Vector4, smooth:Bool):Void { var targetData:UInt8Array = target.buffer.data; var sourceData:UInt8Array = source.buffer.data; var mapData:UInt8Array = map.buffer.data; var targetFormat:PixelFormat = target.buffer.format; var sourceFormat:PixelFormat = source.buffer.format; var mapFormat:PixelFormat = map.buffer.format; var targetPremultiplied:Bool = target.premultiplied; var sourcePremultiplied:Bool = source.premultiplied; var mapPremultiplied:Bool = map.premultiplied; var sourceView:ImageDataView = new ImageDataView(source); var mapView:ImageDataView = new ImageDataView(map); var row:Int; var sourceOffset:Int; var sourcePixel:RGBA = 0; var mapPixel:RGBA = 0; var targetPixel:RGBA = 0; var mapPixelX:Float; var mapPixelY:Float; var mapPixelA:Float; // for bilinear smoothing var s1:RGBA = 0; var s2:RGBA = 0; var s3:RGBA = 0; var s4:RGBA = 0; var mPointXFloor:Int; var mPointYFloor:Int; var disOffsetXFloor:Int; var disOffsetYFloor:Int; var disX:Float; var disY:Float; for (y in 0...sourceView.height) { row = sourceView.row(y); for (x in 0...sourceView.width) { sourceOffset = row + (x * 4); mPointXFloor = Std.int(mapPoint.x); mPointYFloor = Std.int(mapPoint.y); if (smooth) { s1.readUInt8(mapData, sourceView.row(y - mPointYFloor + 1) + (x - mPointXFloor) * 4, mapFormat, mapPremultiplied); s2.readUInt8(mapData, sourceView.row(y - mPointYFloor) + (x - mPointXFloor + 1) * 4, mapFormat, mapPremultiplied); s3.readUInt8(mapData, sourceView.row(y - mPointYFloor + 1) + (x - mPointXFloor + 1) * 4, mapFormat, mapPremultiplied); s4.readUInt8(mapData, sourceView.row(y - mPointYFloor) + (x - mPointXFloor) * 4, mapFormat, mapPremultiplied); mapPixel = bilinear(s1, s2, s3, s4, mapPoint.x - mPointXFloor, mapPoint.y - mPointYFloor); } else { mapPixel.readUInt8(mapData, mapView.row(y - mPointYFloor) + (x - mPointXFloor) * 4, mapFormat, mapPremultiplied); } mapPixelA = mapPixel.a / 255.0; mapPixelX = (((mapPixel.r - 128) / 255.0)) * mapPixelA; mapPixelY = (((mapPixel.g - 128) / 255.0)) * mapPixelA; disX = mapPixelX * componentX.x + mapPixelY * componentY.x; disY = mapPixelX * componentX.y + mapPixelY * componentY.y; disOffsetXFloor = Math.floor(disX * sourceView.width); disOffsetYFloor = Math.floor(disY * sourceView.height); if (smooth) { s1.readUInt8(sourceData, sourceView.row(y + disOffsetYFloor + 1) + (x + disOffsetXFloor) * 4, sourceFormat, sourcePremultiplied); s2.readUInt8(sourceData, sourceView.row(y + disOffsetYFloor) + (x + disOffsetXFloor + 1) * 4, sourceFormat, sourcePremultiplied); s3.readUInt8(sourceData, sourceView.row(y + disOffsetYFloor + 1) + (x + disOffsetXFloor + 1) * 4, sourceFormat, sourcePremultiplied); s4.readUInt8(sourceData, sourceView.row(y + disOffsetYFloor) + (x + disOffsetXFloor) * 4, sourceFormat, sourcePremultiplied); sourcePixel = bilinear(s1, s2, s3, s4, disX * sourceView.width - disOffsetXFloor, disY * sourceView.height - disOffsetYFloor); } else { sourcePixel.readUInt8(sourceData, sourceView.row(y + disOffsetYFloor) + (x + disOffsetXFloor) * 4, sourceFormat, sourcePremultiplied); } sourcePixel.writeUInt8(targetData, sourceOffset, targetFormat, targetPremultiplied); } } target.dirty = true; target.version++; } // s1 = (x, y+1) // s2 = (x + 1, y); // s3 = (x + 1, y + 1); // s4 = (x, y) private static function bilinear(s1:RGBA, s2:RGBA, s3:RGBA, s4:RGBA, su:Float, sv:Float):RGBA { return lerpRGBA(lerpRGBA(s4, s2, su), lerpRGBA(s1, s3, su), sv); } private static function lerpRGBA(v0:RGBA, v1:RGBA, x:Float):RGBA { var result:RGBA = 0; result.r = Math.floor(lerp(v0.r, v1.r, x)); result.g = Math.floor(lerp(v0.g, v1.g, x)); result.b = Math.floor(lerp(v0.b, v1.b, x)); result.a = Math.floor(lerp(v0.a, v1.a, x)); return result; } private static function lerp4f(v0:Vector4, v1:Vector4, x:Float):Vector4 { return new Vector4(lerp(v0.x, v1.x, x), lerp(v0.y, v1.y, x), lerp(v0.z, v1.z, x), lerp(v0.w, v1.w, x)); } private static function lerp(v0:Float, v1:Float, x:Float):Float { return (1.0 - x) * v0 + x * v1; } public static function colorTransform(image:Image, rect:Rectangle, colorMatrix:ColorMatrix):Void { var data = image.buffer.data; if (data == null) return; #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_color_transform(image, rect, colorMatrix); else #end { var format = image.buffer.format; var premultiplied = image.buffer.premultiplied; var dataView = new ImageDataView(image, rect); var alphaTable = colorMatrix.getAlphaTable(); var redTable = colorMatrix.getRedTable(); var greenTable = colorMatrix.getGreenTable(); var blueTable = colorMatrix.getBlueTable(); var row, offset, pixel:RGBA = 0; for (y in 0...dataView.height) { row = dataView.row(y); for (x in 0...dataView.width) { offset = row + (x * 4); pixel.readUInt8(data, offset, format, premultiplied); pixel.set(redTable[pixel.r], greenTable[pixel.g], blueTable[pixel.b], alphaTable[pixel.a]); pixel.writeUInt8(data, offset, format, premultiplied); } } } image.dirty = true; image.version++; } public static function copyChannel(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, sourceChannel:ImageChannel, destChannel:ImageChannel):Void { var destIdx = switch (destChannel) { case RED: 0; case GREEN: 1; case BLUE: 2; case ALPHA: 3; } var srcIdx = switch (sourceChannel) { case RED: 0; case GREEN: 1; case BLUE: 2; case ALPHA: 3; } var srcData = sourceImage.buffer.data; var destData = image.buffer.data; if (srcData == null || destData == null) return; #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_copy_channel(image, sourceImage, sourceRect, destPoint, srcIdx, destIdx); else #end { var srcView = new ImageDataView(sourceImage, sourceRect); var destView = new ImageDataView(image, new Rectangle(destPoint.x, destPoint.y, srcView.width, srcView.height)); var srcFormat = sourceImage.buffer.format; var destFormat = image.buffer.format; var srcPremultiplied = sourceImage.buffer.premultiplied; var destPremultiplied = image.buffer.premultiplied; var srcPosition, destPosition, srcPixel:RGBA = 0, destPixel:RGBA = 0, value = 0; for (y in 0...destView.height) { srcPosition = srcView.row(y); destPosition = destView.row(y); for (x in 0...destView.width) { srcPixel.readUInt8(srcData, srcPosition, srcFormat, srcPremultiplied); destPixel.readUInt8(destData, destPosition, destFormat, destPremultiplied); switch (srcIdx) { case 0: value = srcPixel.r; case 1: value = srcPixel.g; case 2: value = srcPixel.b; case 3: value = srcPixel.a; } switch (destIdx) { case 0: destPixel.r = value; case 1: destPixel.g = value; case 2: destPixel.b = value; case 3: destPixel.a = value; } destPixel.writeUInt8(destData, destPosition, destFormat, destPremultiplied); srcPosition += 4; destPosition += 4; } } } image.dirty = true; image.version++; } public static function copyPixels(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, alphaImage:Image = null, alphaPoint:Vector2 = null, mergeAlpha:Bool = false):Void { if (image.width == sourceImage.width && image.height == sourceImage.height && sourceRect.width == sourceImage.width && sourceRect.height == sourceImage.height && sourceRect.x == 0 && sourceRect.y == 0 && destPoint.x == 0 && destPoint.y == 0 && alphaImage == null && alphaPoint == null && mergeAlpha == false && image.format == sourceImage.format) { image.buffer.data.set(sourceImage.buffer.data); } else { #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_copy_pixels(image, sourceImage, sourceRect, destPoint, alphaImage, alphaPoint, mergeAlpha); else #end { var sourceData = sourceImage.buffer.data; var destData = image.buffer.data; if (sourceData == null || destData == null) return; var sourceView = new ImageDataView(sourceImage, sourceRect); var destRect = new Rectangle(destPoint.x, destPoint.y, sourceView.width, sourceView.height); var destView = new ImageDataView(image, destRect); var sourceFormat = sourceImage.buffer.format; var destFormat = image.buffer.format; var sourcePosition:Int; var destPosition:Int; var sourceAlpha:Float; var destAlpha:Float; var oneMinusSourceAlpha:Float; var blendAlpha:Float; var sourcePixel:RGBA = 0; var destPixel:RGBA = 0; var sourcePremultiplied = sourceImage.buffer.premultiplied; var destPremultiplied = image.buffer.premultiplied; var sourceBytesPerPixel = Std.int(sourceImage.buffer.bitsPerPixel / 8); var destBytesPerPixel = Std.int(image.buffer.bitsPerPixel / 8); var useAlphaImage = (alphaImage != null && alphaImage.transparent); var blend = (mergeAlpha || (useAlphaImage && !image.transparent)) || (!mergeAlpha && !image.transparent && sourceImage.transparent); if (!useAlphaImage) { if (blend) { for (y in 0...destView.height) { sourcePosition = sourceView.row(y); destPosition = destView.row(y); for (x in 0...destView.width) { sourcePixel.readUInt8(sourceData, sourcePosition, sourceFormat, sourcePremultiplied); destPixel.readUInt8(destData, destPosition, destFormat, destPremultiplied); sourceAlpha = sourcePixel.a / 255.0; destAlpha = destPixel.a / 255.0; oneMinusSourceAlpha = 1 - sourceAlpha; blendAlpha = sourceAlpha + (destAlpha * oneMinusSourceAlpha); if (blendAlpha == 0) { destPixel = 0; } else { destPixel.r = RGBA.__clamp[ Math.round((sourcePixel.r * sourceAlpha + destPixel.r * destAlpha * oneMinusSourceAlpha) / blendAlpha) ]; destPixel.g = RGBA.__clamp[ Math.round((sourcePixel.g * sourceAlpha + destPixel.g * destAlpha * oneMinusSourceAlpha) / blendAlpha) ]; destPixel.b = RGBA.__clamp[ Math.round((sourcePixel.b * sourceAlpha + destPixel.b * destAlpha * oneMinusSourceAlpha) / blendAlpha) ]; destPixel.a = RGBA.__clamp[Math.round(blendAlpha * 255.0)]; } destPixel.writeUInt8(destData, destPosition, destFormat, destPremultiplied); sourcePosition += 4; destPosition += 4; } } } else if (sourceFormat == destFormat && sourcePremultiplied == destPremultiplied && sourceBytesPerPixel == destBytesPerPixel) { for (y in 0...destView.height) { sourcePosition = sourceView.row(y); destPosition = destView.row(y); #if js // TODO: Is this faster on HTML5 than the normal copy method? destData.set(sourceData.subarray(sourcePosition, sourcePosition + destView.width * destBytesPerPixel), destPosition); #else destData.buffer.blit(destPosition, sourceData.buffer, sourcePosition, destView.width * destBytesPerPixel); #end } } else { for (y in 0...destView.height) { sourcePosition = sourceView.row(y); destPosition = destView.row(y); for (x in 0...destView.width) { sourcePixel.readUInt8(sourceData, sourcePosition, sourceFormat, sourcePremultiplied); sourcePixel.writeUInt8(destData, destPosition, destFormat, destPremultiplied); sourcePosition += 4; destPosition += 4; } } } } else { var alphaData = alphaImage.buffer.data; var alphaFormat = alphaImage.buffer.format; var alphaPosition, alphaPixel:RGBA = 0; var alphaView = new ImageDataView(alphaImage, new Rectangle(sourceView.x + (alphaPoint == null ? 0 : alphaPoint.x), sourceView.y + (alphaPoint == null ? 0 : alphaPoint.y), sourceView.width, sourceView.height)); destView.clip(Std.int(destPoint.x), Std.int(destPoint.y), alphaView.width, alphaView.height); if (blend) { for (y in 0...destView.height) { sourcePosition = sourceView.row(y); destPosition = destView.row(y); alphaPosition = alphaView.row(y); for (x in 0...destView.width) { sourcePixel.readUInt8(sourceData, sourcePosition, sourceFormat, sourcePremultiplied); destPixel.readUInt8(destData, destPosition, destFormat, destPremultiplied); alphaPixel.readUInt8(alphaData, alphaPosition, alphaFormat, false); sourceAlpha = (alphaPixel.a / 255.0) * (sourcePixel.a / 255.0); if (sourceAlpha > 0) { destAlpha = destPixel.a / 255.0; oneMinusSourceAlpha = 1 - sourceAlpha; blendAlpha = sourceAlpha + (destAlpha * oneMinusSourceAlpha); destPixel.r = RGBA.__clamp[ Math.round((sourcePixel.r * sourceAlpha + destPixel.r * destAlpha * oneMinusSourceAlpha) / blendAlpha) ]; destPixel.g = RGBA.__clamp[ Math.round((sourcePixel.g * sourceAlpha + destPixel.g * destAlpha * oneMinusSourceAlpha) / blendAlpha) ]; destPixel.b = RGBA.__clamp[ Math.round((sourcePixel.b * sourceAlpha + destPixel.b * destAlpha * oneMinusSourceAlpha) / blendAlpha) ]; destPixel.a = RGBA.__clamp[Math.round(blendAlpha * 255.0)]; destPixel.writeUInt8(destData, destPosition, destFormat, destPremultiplied); } sourcePosition += 4; destPosition += 4; alphaPosition += 4; } } } else { for (y in 0...destView.height) { sourcePosition = sourceView.row(y); destPosition = destView.row(y); alphaPosition = alphaView.row(y); for (x in 0...destView.width) { sourcePixel.readUInt8(sourceData, sourcePosition, sourceFormat, sourcePremultiplied); alphaPixel.readUInt8(alphaData, alphaPosition, alphaFormat, false); sourcePixel.a = Math.round(sourcePixel.a * (alphaPixel.a / 0xFF)); sourcePixel.writeUInt8(destData, destPosition, destFormat, destPremultiplied); sourcePosition += 4; destPosition += 4; alphaPosition += 4; } } } } } } image.dirty = true; image.version++; } public static function fillRect(image:Image, rect:Rectangle, color:Int, format:PixelFormat):Void { var fillColor:RGBA; switch (format) { case ARGB32: fillColor = (color : ARGB); case BGRA32: fillColor = (color : BGRA); default: fillColor = color; } if (!image.transparent) { fillColor.a = 0xFF; } var data = image.buffer.data; if (data == null) return; #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_fill_rect(image, rect, (fillColor >> 16) & 0xFFFF, (fillColor) & 0xFFFF); else // TODO: Better Int32 solution #end { var format = image.buffer.format; var premultiplied = image.buffer.premultiplied; if (premultiplied) fillColor.multiplyAlpha(); var dataView = new ImageDataView(image, rect); var row; for (y in 0...dataView.height) { row = dataView.row(y); for (x in 0...dataView.width) { fillColor.writeUInt8(data, row + (x * 4), format, false); } } } image.dirty = true; image.version++; } public static function floodFill(image:Image, x:Int, y:Int, color:Int, format:PixelFormat):Void { var data = image.buffer.data; if (data == null) return; if (format == ARGB32) color = ((color & 0xFFFFFF) << 8) | ((color >> 24) & 0xFF); #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_flood_fill(image, x, y, (color >> 16) & 0xFFFF, (color) & 0xFFFF); else // TODO: Better Int32 solution #end { var format = image.buffer.format; var premultiplied = image.buffer.premultiplied; var fillColor:RGBA = color; var hitColor:RGBA = 0; hitColor.readUInt8(data, ((y + image.offsetY) * (image.buffer.width * 4)) + ((x + image.offsetX) * 4), format, premultiplied); if (!image.transparent) { fillColor.a = 0xFF; hitColor.a = 0xFF; } if (fillColor == hitColor) return; if (premultiplied) fillColor.multiplyAlpha(); var dx = [0, -1, 1, 0]; var dy = [-1, 0, 0, 1]; var minX = -image.offsetX; var minY = -image.offsetY; var maxX = minX + image.width; var maxY = minY + image.height; var queue = new Array(); queue.push(x); queue.push(y); var curPointX, curPointY, nextPointX, nextPointY, nextPointOffset, readColor:RGBA = 0; while (queue.length > 0) { curPointY = queue.pop(); curPointX = queue.pop(); for (i in 0...4) { nextPointX = curPointX + dx[i]; nextPointY = curPointY + dy[i]; if (nextPointX < minX || nextPointY < minY || nextPointX >= maxX || nextPointY >= maxY) { continue; } nextPointOffset = (nextPointY * image.width + nextPointX) * 4; readColor.readUInt8(data, nextPointOffset, format, premultiplied); if (readColor == hitColor) { fillColor.writeUInt8(data, nextPointOffset, format, false); queue.push(nextPointX); queue.push(nextPointY); } } } } image.dirty = true; image.version++; } public static function gaussianBlur(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, blurX:Float = 4, blurY:Float = 4, quality:Int = 1, strength:Float = 1, color:Null = null):Image { // TODO: Support sourceRect better, do not modify sourceImage, create C++ implementation for native // TODO: Faster approach var imagePremultiplied = image.premultiplied; if (imagePremultiplied) image.premultiplied = false; // TODO: Use ImageDataView // if (image.buffer.premultiplied || sourceImage.buffer.premultiplied) { // // TODO: Better handling of premultiplied alpha // throw "Pre-multiplied bitmaps are not supported"; // } StackBlur.blur(image, sourceImage, sourceRect, destPoint, blurX, blurY, quality); image.dirty = true; image.version++; if (imagePremultiplied) image.premultiplied = true; return image; } public static function getColorBoundsRect(image:Image, mask:Int, color:Int, findColor:Bool, format:PixelFormat):Rectangle { var left = image.width + 1; var right = 0; var top = image.height + 1; var bottom = 0; var _color:RGBA, _mask:RGBA; switch (format) { case ARGB32: _color = (color : ARGB); _mask = (mask : ARGB); case BGRA32: _color = (color : BGRA); _mask = (mask : BGRA); default: _color = color; _mask = mask; } if (!image.transparent) { _color.a = 0xFF; _mask.a = 0xFF; } var pixel:Int; var hit:Bool; for (x in 0...image.width) { hit = false; for (y in 0...image.height) { pixel = image.getPixel32(x, y, RGBA32); hit = findColor ? (pixel & _mask) == _color : (pixel & _mask) != _color; if (hit) { if (x < left) left = x; break; } } if (hit) { break; } } var ix; for (x in 0...image.width) { ix = (image.width - 1) - x; hit = false; for (y in 0...image.height) { pixel = image.getPixel32(ix, y, RGBA32); hit = findColor ? (pixel & _mask) == _color : (pixel & _mask) != _color; if (hit) { if (ix > right) right = ix; break; } } if (hit) { break; } } for (y in 0...image.height) { hit = false; for (x in 0...image.width) { pixel = image.getPixel32(x, y, RGBA32); hit = findColor ? (pixel & _mask) == _color : (pixel & _mask) != _color; if (hit) { if (y < top) top = y; break; } } if (hit) { break; } } var iy; for (y in 0...image.height) { iy = (image.height - 1) - y; hit = false; for (x in 0...image.width) { pixel = image.getPixel32(x, iy, RGBA32); hit = findColor ? (pixel & _mask) == _color : (pixel & _mask) != _color; if (hit) { if (iy > bottom) bottom = iy; break; } } if (hit) { break; } } var w = right - left; var h = bottom - top; if (w > 0) w++; if (h > 0) h++; if (w < 0) w = 0; if (h < 0) h = 0; if (left == right) w = 1; if (top == bottom) h = 1; if (left > image.width) left = 0; if (top > image.height) top = 0; return new Rectangle(left, top, w, h); } public static function getPixel(image:Image, x:Int, y:Int, format:PixelFormat):Int { var pixel:RGBA = 0; pixel.readUInt8(image.buffer.data, (4 * (y + image.offsetY) * image.buffer.width + (x + image.offsetX) * 4), image.buffer.format, image.buffer.premultiplied); pixel.a = 0; switch (format) { case ARGB32: return (pixel : ARGB); case BGRA32: return (pixel : BGRA); default: return pixel; } } public static function getPixel32(image:Image, x:Int, y:Int, format:PixelFormat):Int { var pixel:RGBA = 0; pixel.readUInt8(image.buffer.data, (4 * (y + image.offsetY) * image.buffer.width + (x + image.offsetX) * 4), image.buffer.format, image.buffer.premultiplied); switch (format) { case ARGB32: return (pixel : ARGB); case BGRA32: return (pixel : BGRA); default: return pixel; } } public static function getPixels(image:Image, rect:Rectangle, format:PixelFormat):Bytes { if (image.buffer.data == null) return null; var length = Std.int(rect.width * rect.height); var bytes = Bytes.alloc(length * 4); #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_get_pixels(image, rect, format, bytes); else #end { var data = image.buffer.data; var sourceFormat = image.buffer.format; var premultiplied = image.buffer.premultiplied; var dataView = new ImageDataView(image, rect); var position; var argb:ARGB = 0; var bgra:BGRA = 0; var pixel:RGBA = 0; var destPosition = 0; for (y in 0...dataView.height) { position = dataView.row(y); for (x in 0...dataView.width) { pixel.readUInt8(data, position, sourceFormat, premultiplied); switch (format) { case ARGB32: argb = pixel; pixel = cast argb; case BGRA32: bgra = pixel; pixel = cast bgra; default: } bytes.set(destPosition++, pixel.r); bytes.set(destPosition++, pixel.g); bytes.set(destPosition++, pixel.b); bytes.set(destPosition++, pixel.a); position += 4; } } } return bytes; } public static function merge(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, redMultiplier:Int, greenMultiplier:Int, blueMultiplier:Int, alphaMultiplier:Int):Void { if (image.buffer.data == null || sourceImage.buffer.data == null) return; #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_merge(image, sourceImage, sourceRect, destPoint, redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier); else #end { var sourceView = new ImageDataView(sourceImage, sourceRect); var destView = new ImageDataView(image, new Rectangle(destPoint.x, destPoint.y, sourceView.width, sourceView.height)); var sourceData = sourceImage.buffer.data; var destData = image.buffer.data; var sourceFormat = sourceImage.buffer.format; var destFormat = image.buffer.format; var sourcePremultiplied = sourceImage.buffer.premultiplied; var destPremultiplied = image.buffer.premultiplied; var sourcePosition:Int; var destPosition:Int; var sourcePixel:RGBA = 0; var destPixel:RGBA = 0; for (y in 0...destView.height) { sourcePosition = sourceView.row(y); destPosition = destView.row(y); for (x in 0...destView.width) { sourcePixel.readUInt8(sourceData, sourcePosition, sourceFormat, sourcePremultiplied); destPixel.readUInt8(destData, destPosition, destFormat, destPremultiplied); destPixel.r = Std.int(((sourcePixel.r * redMultiplier) + (destPixel.r * (256 - redMultiplier))) / 256); destPixel.g = Std.int(((sourcePixel.g * greenMultiplier) + (destPixel.g * (256 - greenMultiplier))) / 256); destPixel.b = Std.int(((sourcePixel.b * blueMultiplier) + (destPixel.b * (256 - blueMultiplier))) / 256); destPixel.a = Std.int(((sourcePixel.a * alphaMultiplier) + (destPixel.a * (256 - alphaMultiplier))) / 256); destPixel.writeUInt8(destData, destPosition, destFormat, destPremultiplied); sourcePosition += 4; destPosition += 4; } } } image.dirty = true; image.version++; } public static function multiplyAlpha(image:Image):Void { var data = image.buffer.data; if (data == null || !image.buffer.transparent) return; #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_multiply_alpha(image); else #end { var format = image.buffer.format; var length = Std.int(data.length / 4); var pixel:RGBA = 0; for (i in 0...length) { pixel.readUInt8(data, i * 4, format, false); pixel.writeUInt8(data, i * 4, format, true); } } image.buffer.premultiplied = true; image.dirty = true; image.version++; } public static function resize(image:Image, newWidth:Int, newHeight:Int):Void { var buffer = image.buffer; if (buffer.width == newWidth && buffer.height == newHeight) return; var newBuffer = new ImageBuffer(new UInt8Array(newWidth * newHeight * 4), newWidth, newHeight); #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_resize(image, newBuffer, newWidth, newHeight); else #end { var imageWidth = image.width; var imageHeight = image.height; var data = image.data; var newData = newBuffer.data; var sourceIndex:Int, sourceIndexX:Int, sourceIndexY:Int, sourceIndexXY:Int, index:Int; var sourceX:Int, sourceY:Int; var u:Float, v:Float, uRatio:Float, vRatio:Float, uOpposite:Float, vOpposite:Float; for (y in 0...newHeight) { for (x in 0...newWidth) { // TODO: Handle more color formats u = ((x + 0.5) / newWidth) * imageWidth - 0.5; v = ((y + 0.5) / newHeight) * imageHeight - 0.5; sourceX = Std.int(u); sourceY = Std.int(v); sourceIndex = (sourceY * imageWidth + sourceX) * 4; sourceIndexX = (sourceX < imageWidth - 1) ? sourceIndex + 4 : sourceIndex; sourceIndexY = (sourceY < imageHeight - 1) ? sourceIndex + (imageWidth * 4) : sourceIndex; sourceIndexXY = (sourceIndexX != sourceIndex) ? sourceIndexY + 4 : sourceIndexY; index = (y * newWidth + x) * 4; uRatio = u - sourceX; vRatio = v - sourceY; uOpposite = 1 - uRatio; vOpposite = 1 - vRatio; newData[index] = Std.int((data[sourceIndex] * uOpposite + data[sourceIndexX] * uRatio) * vOpposite + (data[sourceIndexY] * uOpposite + data[sourceIndexXY] * uRatio) * vRatio); newData[index + 1] = Std.int((data[sourceIndex + 1] * uOpposite + data[sourceIndexX + 1] * uRatio) * vOpposite + (data[sourceIndexY + 1] * uOpposite + data[sourceIndexXY + 1] * uRatio) * vRatio); newData[index + 2] = Std.int((data[sourceIndex + 2] * uOpposite + data[sourceIndexX + 2] * uRatio) * vOpposite + (data[sourceIndexY + 2] * uOpposite + data[sourceIndexXY + 2] * uRatio) * vRatio); // Maybe it would be better to not weigh colors with an alpha of zero, but the below should help prevent black fringes caused by transparent pixels made visible if (data[sourceIndexX + 3] == 0 || data[sourceIndexY + 3] == 0 || data[sourceIndexXY + 3] == 0) { newData[index + 3] = 0; } else { newData[index + 3] = data[sourceIndex + 3]; } } } } buffer.data = newBuffer.data; buffer.width = newWidth; buffer.height = newHeight; #if (js && html5) buffer.__srcImage = null; buffer.__srcImageData = null; buffer.__srcCanvas = null; buffer.__srcContext = null; #end image.dirty = true; image.version++; } public static function resizeBuffer(image:Image, newWidth:Int, newHeight:Int):Void { var buffer = image.buffer; var data = image.data; var newData = new UInt8Array(newWidth * newHeight * 4); var sourceIndex:Int, index:Int; for (y in 0...buffer.height) { for (x in 0...buffer.width) { sourceIndex = (y * buffer.width + x) * 4; index = (y * newWidth + x) * 4; newData[index] = data[sourceIndex]; newData[index + 1] = data[sourceIndex + 1]; newData[index + 2] = data[sourceIndex + 2]; newData[index + 3] = data[sourceIndex + 3]; } } buffer.data = newData; buffer.width = newWidth; buffer.height = newHeight; #if (js && html5) buffer.__srcImage = null; buffer.__srcImageData = null; buffer.__srcCanvas = null; buffer.__srcContext = null; #end image.dirty = true; image.version++; } public static function setFormat(image:Image, format:PixelFormat):Void { var data = image.buffer.data; if (data == null) return; #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_set_format(image, format); else #end { var index:Int; var length = Std.int(data.length / 4); var r1:Int; var g1:Int; var b1:Int; var a1:Int; var r2:Int; var g2:Int; var b2:Int; var a2:Int; var r:Int; var g:Int; var b:Int; var a:Int; switch (image.format) { case RGBA32: r1 = 0; g1 = 1; b1 = 2; a1 = 3; case ARGB32: r1 = 1; g1 = 2; b1 = 3; a1 = 0; case BGRA32: r1 = 2; g1 = 1; b1 = 0; a1 = 3; } switch (format) { case RGBA32: r2 = 0; g2 = 1; b2 = 2; a2 = 3; case ARGB32: r2 = 1; g2 = 2; b2 = 3; a2 = 0; case BGRA32: r2 = 2; g2 = 1; b2 = 0; a2 = 3; } for (i in 0...length) { index = i * 4; r = data[index + r1]; g = data[index + g1]; b = data[index + b1]; a = data[index + a1]; data[index + r2] = r; data[index + g2] = g; data[index + b2] = b; data[index + a2] = a; } } image.buffer.format = format; image.dirty = true; image.version++; } public static function setPixel(image:Image, x:Int, y:Int, color:Int, format:PixelFormat):Void { var pixel:RGBA; switch (format) { case ARGB32: pixel = (color : ARGB); case BGRA32: pixel = (color : BGRA); default: pixel = color; } // TODO: Write only RGB instead? var source = new RGBA(); source.readUInt8(image.buffer.data, (4 * (y + image.offsetY) * image.buffer.width + (x + image.offsetX) * 4), image.buffer.format, image.buffer.premultiplied); pixel.a = source.a; pixel.writeUInt8(image.buffer.data, (4 * (y + image.offsetY) * image.buffer.width + (x + image.offsetX) * 4), image.buffer.format, image.buffer.premultiplied); image.dirty = true; image.version++; } public static function setPixel32(image:Image, x:Int, y:Int, color:Int, format:PixelFormat):Void { var pixel:RGBA; switch (format) { case ARGB32: pixel = (color : ARGB); case BGRA32: pixel = (color : BGRA); default: pixel = color; } if (!image.transparent) pixel.a = 0xFF; pixel.writeUInt8(image.buffer.data, (4 * (y + image.offsetY) * image.buffer.width + (x + image.offsetX) * 4), image.buffer.format, image.buffer.premultiplied); image.dirty = true; image.version++; } public static function setPixels(image:Image, rect:Rectangle, bytePointer:BytePointer, format:PixelFormat, endian:Endian):Void { if (image.buffer.data == null) return; #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_set_pixels(image, rect, bytePointer.bytes, bytePointer.offset, format, endian == BIG_ENDIAN ? 1 : 0); else #end { var data = image.buffer.data; var sourceFormat = image.buffer.format; var premultiplied = image.buffer.premultiplied; var dataView = new ImageDataView(image, rect); var row, color, pixel:RGBA; var transparent = image.transparent; var bytes = bytePointer.bytes; var dataPosition = bytePointer.offset; var littleEndian = (endian != BIG_ENDIAN); for (y in 0...dataView.height) { row = dataView.row(y); for (x in 0...dataView.width) { if (littleEndian) { color = bytes.getInt32(dataPosition); // can this be trusted on big endian systems? } else { color = bytes.get(dataPosition + 3) | (bytes.get(dataPosition + 2) << 8) | (bytes.get(dataPosition + 1) << 16) | (bytes.get(dataPosition) << 24); } dataPosition += 4; switch (format) { case ARGB32: pixel = (color : ARGB); case BGRA32: pixel = (color : BGRA); default: pixel = color; } if (!transparent) pixel.a = 0xFF; pixel.writeUInt8(data, row + (x * 4), sourceFormat, premultiplied); } } } image.dirty = true; image.version++; } public static function threshold(image:Image, sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, operation:String, threshold:Int, color:Int, mask:Int, copySource:Bool, format:PixelFormat):Int { var _color:RGBA, _mask:RGBA, _threshold:RGBA; switch (format) { case ARGB32: _color = (color : ARGB); _mask = (mask : ARGB); _threshold = (threshold : ARGB); case BGRA32: _color = (color : BGRA); _mask = (mask : BGRA); _threshold = (threshold : BGRA); default: _color = color; _mask = mask; _threshold = threshold; } var _operation = switch (operation) { case "!=": NOT_EQUALS; case "==": EQUALS; case "<": LESS_THAN; case "<=": LESS_THAN_OR_EQUAL_TO; case ">": GREATER_THAN; case ">=": GREATER_THAN_OR_EQUAL_TO; default: -1; } if (_operation == -1) return 0; var srcData = sourceImage.buffer.data; var destData = image.buffer.data; if (srcData == null || destData == null) return 0; var hits = 0; #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) hits = NativeCFFI.lime_image_data_util_threshold(image, sourceImage, sourceRect, destPoint, _operation, (_threshold >> 16) & 0xFFFF, (_threshold) & 0xFFFF, (_color >> 16) & 0xFFFF, (_color) & 0xFFFF, (_mask >> 16) & 0xFFFF, (_mask) & 0xFFFF, copySource); else #end { var srcView = new ImageDataView(sourceImage, sourceRect); var destView = new ImageDataView(image, new Rectangle(destPoint.x, destPoint.y, srcView.width, srcView.height)); var srcFormat = sourceImage.buffer.format; var destFormat = image.buffer.format; var srcPremultiplied = sourceImage.buffer.premultiplied; var destPremultiplied = image.buffer.premultiplied; var srcPosition, destPosition, srcPixel:RGBA = 0, destPixel:RGBA = 0, pixelMask:UInt, test:Bool, value:Int; for (y in 0...destView.height) { srcPosition = srcView.row(y); destPosition = destView.row(y); for (x in 0...destView.width) { srcPixel.readUInt8(srcData, srcPosition, srcFormat, srcPremultiplied); pixelMask = srcPixel & _mask; value = __pixelCompare(pixelMask, _threshold); test = switch (_operation) { case NOT_EQUALS: (value != 0); case EQUALS: (value == 0); case LESS_THAN: (value == -1); case LESS_THAN_OR_EQUAL_TO: (value == 0 || value == -1); case GREATER_THAN: (value == 1); case GREATER_THAN_OR_EQUAL_TO: (value == 0 || value == 1); default: false; } if (test) { _color.writeUInt8(destData, destPosition, destFormat, destPremultiplied); hits++; } else if (copySource) { srcPixel.writeUInt8(destData, destPosition, destFormat, destPremultiplied); } srcPosition += 4; destPosition += 4; } } } if (hits > 0) { image.dirty = true; image.version++; } return hits; } public static function unmultiplyAlpha(image:Image):Void { var data = image.buffer.data; if (data == null) return; #if (lime_cffi && !disable_cffi && !macro) if (CFFI.enabled) NativeCFFI.lime_image_data_util_unmultiply_alpha(image); else #end { var format = image.buffer.format; var length = Std.int(data.length / 4); var pixel:RGBA = 0; for (i in 0...length) { pixel.readUInt8(data, i * 4, format, true); pixel.writeUInt8(data, i * 4, format, false); } } image.buffer.premultiplied = false; image.dirty = true; image.version++; } private static function __boxBlur(imgA:UInt8Array, imgB:UInt8Array, w:Int, h:Int, bx:Float, by:Float):Void { // for(i in 0...imgA.length) // imgB[i] = imgA[i]; imgB.set(imgA); var bx = Std.int(bx); var by = Std.int(by); __boxBlurH(imgB, imgA, w, h, bx, 0); __boxBlurH(imgB, imgA, w, h, bx, 1); __boxBlurH(imgB, imgA, w, h, bx, 2); __boxBlurH(imgB, imgA, w, h, bx, 3); __boxBlurT(imgA, imgB, w, h, by, 0); __boxBlurT(imgA, imgB, w, h, by, 1); __boxBlurT(imgA, imgB, w, h, by, 2); __boxBlurT(imgA, imgB, w, h, by, 3); } private static #if cpp inline #end function __boxBlurH(imgA:UInt8Array, imgB:UInt8Array, w:Int, h:Int, r:Int, off:Int):Void { var iarr = 1 / (r + r + 1); var ti:Int; var li:Int; var ri:Int; var fv:Int; var lv:Int; var val:Int; for (i in 0...h) { ti = i * w; li = ti; ri = ti + r; fv = imgA[ti * 4 + off]; lv = imgA[(ti + w - 1) * 4 + off]; val = (r + 1) * fv; for (j in 0...r) { val += imgA[(ti + j) * 4 + off]; } for (j in 0...(r + 1)) { val += imgA[ri * 4 + off] - fv; imgB[ti * 4 + off] = Math.round(val * iarr); ri++; ti++; } for (j in (r + 1)...(w - r)) { val += imgA[ri * 4 + off] - imgA[li * 4 + off]; imgB[ti * 4 + off] = Math.round(val * iarr); ri++; li++; ti++; } for (j in (w - r)...w) { val += lv - imgA[li * 4 + off]; imgB[ti * 4 + off] = Math.round(val * iarr); li++; ti++; } } } private static inline function __boxBlurT(imgA:UInt8Array, imgB:UInt8Array, w:Int, h:Int, r:Int, off:Int):Void { var iarr = 1 / (r + r + 1); var ws = w * 4; var ti:Int; var li:Int; var ri:Int; var fv:Int; var lv:Int; var val:Int; for (i in 0...w) { ti = i * 4 + off; li = ti; ri = ti + (r * ws); fv = imgA[ti]; lv = imgA[ti + (ws * (h - 1))]; val = (r + 1) * fv; for (j in 0...r) { val += imgA[ti + (j * ws)]; } for (j in 0...(r + 1)) { val += imgA[ri] - fv; imgB[ti] = Math.round(val * iarr); ri += ws; ti += ws; } for (j in (r + 1)...(h - r)) { val += imgA[ri] - imgA[li]; imgB[ti] = Math.round(val * iarr); li += ws; ri += ws; ti += ws; } for (j in (h - r)...h) { val += lv - imgA[li]; imgB[ti] = Math.round(val * iarr); li += ws; ti += ws; } } } /** * Returns: the offset for translated coordinate in the source image or -1 if the source the coordinate out of the source or destination bounds * Note: destX and destY should be valid coordinates **/ private static #if cpp inline #end function __calculateSourceOffset(sourceRect:Rectangle, destPoint:Vector2, destX:Int, destY:Int):Int { var sourceX:Int = destX - Std.int(destPoint.x); var sourceY:Int = destY - Std.int(destPoint.y); var offset = 0; if (sourceX < 0 || sourceY < 0 || sourceX >= sourceRect.width || sourceY >= sourceRect.height) { offset = -1; } else { offset = 4 * (sourceY * Std.int(sourceRect.width) + sourceX); } return offset; } private static function __getBoxesForGaussianBlur(sigma:Float, n:Int):Array { var wIdeal = Math.sqrt((12 * sigma * sigma / n) + 1); // Ideal averaging filter width var wl = Math.floor(wIdeal); if (wl % 2 == 0) wl--; var wu = wl + 2; var mIdeal = ((12 * sigma * sigma) - (n * wl * wl) - (4 * n * wl) - (3 * n)) / ((-4 * wl) - 4); var m = Math.round(mIdeal); var sizes:Array = []; for (i in 0...n) { sizes.push(i < m ? wl : wu); } return sizes; } private static inline function __pixelCompare(n1:UInt, n2:UInt):Int { var tmp1:UInt; var tmp2:UInt; tmp1 = (n1 >> 24) & 0xFF; tmp2 = (n2 >> 24) & 0xFF; if (tmp1 != tmp2) { return (tmp1 > tmp2 ? 1 : -1); } else { tmp1 = (n1 >> 16) & 0xFF; tmp2 = (n2 >> 16) & 0xFF; if (tmp1 != tmp2) { return (tmp1 > tmp2 ? 1 : -1); } else { tmp1 = (n1 >> 8) & 0xFF; tmp2 = (n2 >> 8) & 0xFF; if (tmp1 != tmp2) { return (tmp1 > tmp2 ? 1 : -1); } else { tmp1 = n1 & 0xFF; tmp2 = n2 & 0xFF; if (tmp1 != tmp2) { return (tmp1 > tmp2 ? 1 : -1); } else { return 0; } } } } } private static #if cpp inline #end function __translatePixel(imgB:UInt8Array, sourceRect:Rectangle, destRect:Rectangle, destPoint:Vector2, destX:Int, destY:Int, strength:Float):Void { var d = 4 * (destY * Std.int(destRect.width) + destX); var s = __calculateSourceOffset(sourceRect, destPoint, destX, destY); if (s < 0) { imgB[d] = imgB[d + 1] = imgB[d + 2] = imgB[d + 3] = 0; } else { imgB[d] = imgB[s]; imgB[d + 1] = imgB[s + 1]; imgB[d + 2] = imgB[s + 2]; var a = Std.int(imgB[s + 3] * strength); imgB[d + 3] = a < 0 ? 0 : (a > 255 ? 255 : a); } } } private class ImageDataView { public var x(default, null):Int; public var y(default, null):Int; public var height(default, null):Int; public var width(default, null):Int; private var byteOffset:Int; private var image:Image; private var rect:Rectangle; private var stride:Int; private var tempRect:Rectangle; public function new(image:Image, rect:Rectangle = null) { this.image = image; if (rect == null) { this.rect = image.rect; } else { if (rect.x < 0) rect.x = 0; if (rect.y < 0) rect.y = 0; if (rect.x + rect.width > image.width) rect.width = image.width - rect.x; if (rect.y + rect.height > image.height) rect.height = image.height - rect.y; if (rect.width < 0) rect.width = 0; if (rect.height < 0) rect.height = 0; this.rect = rect; } stride = image.buffer.stride; __update(); } public function clip(x:Int, y:Int, width:Int, height:Int):Void { if (tempRect == null) tempRect = new Rectangle(); tempRect.setTo(x, y, width, height); rect.intersection(tempRect, rect); __update(); } public inline function hasRow(y:Int):Bool { return (y >= 0 && y < height); } public function offset(x:Int, y:Int):Void { if (x < 0) { rect.x += x; if (rect.x < 0) rect.x = 0; } else { rect.x += x; rect.width -= x; } if (y < 0) { rect.y += y; if (rect.y < 0) rect.y = 0; } else { rect.y += y; rect.height -= y; } __update(); } public inline function row(y:Int):Int { return byteOffset + stride * y; } private function __update():Void { this.x = Math.ceil(rect.x); this.y = Math.ceil(rect.y); this.width = Math.floor(rect.width); this.height = Math.floor(rect.height); byteOffset = (stride * (this.y + image.offsetY)) + ((this.x + image.offsetX) * 4); } } @:noCompletion @:dox(hide) #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract ThresholdOperation(Int) from Int to Int { var NOT_EQUALS = 0; var EQUALS = 1; var LESS_THAN = 2; var LESS_THAN_OR_EQUAL_TO = 3; var GREATER_THAN = 4; var GREATER_THAN_OR_EQUAL_TO = 5; } ================================================ FILE: src/lime/_internal/graphics/StackBlur.hx ================================================ package lime._internal.graphics; import lime.graphics.Image; import lime.math.Rectangle; import lime.math.Vector2; // Ported from https://github.com/CreateJS/EaselJS/blob/master/src/easeljs/filters/BlurFilter.js class StackBlur { private static var MUL_TABLE:Array = [ 1, 171, 205, 293, 57, 373, 79, 137, 241, 27, 391, 357, 41, 19, 283, 265, 497, 469, 443, 421, 25, 191, 365, 349, 335, 161, 155, 149, 9, 278, 269, 261, 505, 245, 475, 231, 449, 437, 213, 415, 405, 395, 193, 377, 369, 361, 353, 345, 169, 331, 325, 319, 313, 307, 301, 37, 145, 285, 281, 69, 271, 267, 263, 259, 509, 501, 493, 243, 479, 118, 465, 459, 113, 446, 55, 435, 429, 423, 209, 413, 51, 403, 199, 393, 97, 3, 379, 375, 371, 367, 363, 359, 355, 351, 347, 43, 85, 337, 333, 165, 327, 323, 5, 317, 157, 311, 77, 305, 303, 75, 297, 294, 73, 289, 287, 71, 141, 279, 277, 275, 68, 135, 67, 133, 33, 262, 260, 129, 511, 507, 503, 499, 495, 491, 61, 121, 481, 477, 237, 235, 467, 232, 115, 457, 227, 451, 7, 445, 221, 439, 218, 433, 215, 427, 425, 211, 419, 417, 207, 411, 409, 203, 202, 401, 399, 396, 197, 49, 389, 387, 385, 383, 95, 189, 47, 187, 93, 185, 23, 183, 91, 181, 45, 179, 89, 177, 11, 175, 87, 173, 345, 343, 341, 339, 337, 21, 167, 83, 331, 329, 327, 163, 81, 323, 321, 319, 159, 79, 315, 313, 39, 155, 309, 307, 153, 305, 303, 151, 75, 299, 149, 37, 295, 147, 73, 291, 145, 289, 287, 143, 285, 71, 141, 281, 35, 279, 139, 69, 275, 137, 273, 17, 271, 135, 269, 267, 133, 265, 33, 263, 131, 261, 130, 259, 129, 257, 1 ]; private static var SHG_TABLE:Array = [ 0, 9, 10, 11, 9, 12, 10, 11, 12, 9, 13, 13, 10, 9, 13, 13, 14, 14, 14, 14, 10, 13, 14, 14, 14, 13, 13, 13, 9, 14, 14, 14, 15, 14, 15, 14, 15, 15, 14, 15, 15, 15, 14, 15, 15, 15, 15, 15, 14, 15, 15, 15, 15, 15, 15, 12, 14, 15, 15, 13, 15, 15, 15, 15, 16, 16, 16, 15, 16, 14, 16, 16, 14, 16, 13, 16, 16, 16, 15, 16, 13, 16, 15, 16, 14, 9, 16, 16, 16, 16, 16, 16, 16, 16, 16, 13, 14, 16, 16, 15, 16, 16, 10, 16, 15, 16, 14, 16, 16, 14, 16, 16, 14, 16, 16, 14, 15, 16, 16, 16, 14, 15, 14, 15, 13, 16, 16, 15, 17, 17, 17, 17, 17, 17, 14, 15, 17, 17, 16, 16, 17, 16, 15, 17, 16, 17, 11, 17, 16, 17, 16, 17, 16, 17, 17, 16, 17, 17, 16, 17, 17, 16, 16, 17, 17, 17, 16, 14, 17, 17, 17, 17, 15, 16, 14, 16, 15, 16, 13, 16, 15, 16, 14, 16, 15, 16, 12, 16, 15, 16, 17, 17, 17, 17, 17, 13, 16, 15, 17, 17, 17, 16, 15, 17, 17, 17, 16, 15, 17, 17, 14, 16, 17, 17, 16, 17, 17, 16, 15, 17, 16, 14, 17, 16, 15, 17, 16, 17, 17, 16, 17, 15, 16, 17, 14, 17, 16, 15, 17, 16, 17, 13, 17, 16, 17, 17, 16, 17, 14, 17, 16, 17, 16, 17, 16, 17, 9 ]; public static function blur(dest:Image, source:Image, sourceRect:Rectangle, destPoint:Vector2, blurX:Float, blurY:Float, quality:Int) { dest.copyPixels(source, sourceRect, destPoint); __stackBlurCanvasRGBA(dest, Std.int(sourceRect.width), Std.int(sourceRect.height), blurX, blurY, quality); } private static function __stackBlurCanvasRGBA(image:Image, width:Int, height:Int, blurX:Float, blurY:Float, quality:Int) { // TODO: Handle pixel order // TODO: Support blur without unmultiplying alpha var radiusX = Math.round(blurX) >> 1; var radiusY = Math.round(blurY) >> 1; if (MUL_TABLE == null) return; // can be null due to static initialization order if (radiusX >= MUL_TABLE.length) radiusX = MUL_TABLE.length - 1; if (radiusY >= MUL_TABLE.length) radiusY = MUL_TABLE.length - 1; if (radiusX < 0 || radiusY < 0) return; var iterations = quality; if (iterations < 1) iterations = 1; if (iterations > 3) iterations = 3; var px = image.data; var x:Int, y:Int, i:Int, p:Int, yp:Int, yi:Int, yw:Int; var r:Int, g:Int, b:Int, a:Int, pr:Int, pg:Int, pb:Int, pa:Int; var f:Float; var divx = (radiusX + radiusX + 1); var divy = (radiusY + radiusY + 1); var w = width; var h = height; var w1 = w - 1; var h1 = h - 1; var rxp1 = radiusX + 1; var ryp1 = radiusY + 1; var ssx = new BlurStack(); var sx = ssx; for (i in 1...divx) { sx = sx.n = new BlurStack(); } sx.n = ssx; var ssy = new BlurStack(); var sy = ssy; for (i in 1...divy) { sy = sy.n = new BlurStack(); } sy.n = ssy; var si = null; var mtx = MUL_TABLE[radiusX]; var stx = SHG_TABLE[radiusX]; var mty = MUL_TABLE[radiusY]; var sty = SHG_TABLE[radiusY]; while (iterations > 0) { iterations--; yw = yi = 0; var ms = mtx; var ss = stx; y = h; do { r = rxp1 * (pr = px[yi]); g = rxp1 * (pg = px[yi + 1]); b = rxp1 * (pb = px[yi + 2]); a = rxp1 * (pa = px[yi + 3]); sx = ssx; i = rxp1; do { sx.r = pr; sx.g = pg; sx.b = pb; sx.a = pa; sx = sx.n; } while (--i > -1); for (i in 1...rxp1) { p = yi + ((w1 < i ? w1 : i) << 2); r += (sx.r = px[p]); g += (sx.g = px[p + 1]); b += (sx.b = px[p + 2]); a += (sx.a = px[p + 3]); sx = sx.n; } si = ssx; for (x in 0...w) { px[yi++] = (r * ms) >>> ss; px[yi++] = (g * ms) >>> ss; px[yi++] = (b * ms) >>> ss; px[yi++] = (a * ms) >>> ss; p = (yw + ((p = x + radiusX + 1) < w1 ? p : w1)) << 2; r -= si.r - (si.r = px[p]); g -= si.g - (si.g = px[p + 1]); b -= si.b - (si.b = px[p + 2]); a -= si.a - (si.a = px[p + 3]); si = si.n; } yw += w; } while (--y > 0); ms = mty; ss = sty; for (x in 0...w) { yi = x << 2; r = ryp1 * (pr = px[yi]); g = ryp1 * (pg = px[yi + 1]); b = ryp1 * (pb = px[yi + 2]); a = ryp1 * (pa = px[yi + 3]); sy = ssy; for (i in 0...ryp1) { sy.r = pr; sy.g = pg; sy.b = pb; sy.a = pa; sy = sy.n; } yp = w; for (i in 1...(radiusY + 1)) { yi = (yp + x) << 2; r += (sy.r = px[yi]); g += (sy.g = px[yi + 1]); b += (sy.b = px[yi + 2]); a += (sy.a = px[yi + 3]); sy = sy.n; if (i < h1) { yp += w; } } yi = x; si = ssy; if (iterations > 0) { for (y in 0...h) { p = yi << 2; px[p + 3] = pa = (a * ms) >>> ss; if (pa > 0) { px[p] = ((r * ms) >>> ss); px[p + 1] = ((g * ms) >>> ss); px[p + 2] = ((b * ms) >>> ss); } else { px[p] = px[p + 1] = px[p + 2] = 0; } p = (x + (((p = y + ryp1) < h1 ? p : h1) * w)) << 2; r -= si.r - (si.r = px[p]); g -= si.g - (si.g = px[p + 1]); b -= si.b - (si.b = px[p + 2]); a -= si.a - (si.a = px[p + 3]); si = si.n; yi += w; } } else { for (y in 0...h) { p = yi << 2; px[p + 3] = pa = (a * ms) >>> ss; if (pa > 0) { f = 255 / pa; pr = Std.int(((r * ms) >>> ss) * f); pg = Std.int(((g * ms) >>> ss) * f); pb = Std.int(((b * ms) >>> ss) * f); px[p] = pr > 255 ? 255 : pr; px[p + 1] = pg > 255 ? 255 : pg; px[p + 2] = pb > 255 ? 255 : pb; } else { px[p] = px[p + 1] = px[p + 2] = 0; } p = (x + (((p = y + ryp1) < h1 ? p : h1) * w)) << 2; r -= si.r - (si.r = px[p]); g -= si.g - (si.g = px[p + 1]); b -= si.b - (si.b = px[p + 2]); a -= si.a - (si.a = px[p + 3]); si = si.n; yi += w; } } } } } } class BlurStack { public var r:Int; public var g:Int; public var b:Int; public var a:Int; public var n:BlurStack; public function new() { this.r = 0; this.g = 0; this.b = 0; this.a = 0; this.n = null; } } ================================================ FILE: src/lime/_internal/macros/AssetsMacro.hx ================================================ package lime._internal.macros; #if macro import haxe.crypto.BaseCode; import haxe.io.Bytes; import haxe.macro.Context; import haxe.macro.Expr; import haxe.macro.Type; #end #if (macro && !display) import lime._internal.format.Base64; import sys.io.File; import sys.FileSystem; #end class AssetsMacro { #if (!macro || display) macro public static function cacheVersion() { return macro 0; } #else macro public static function cacheVersion() { return macro $v{Std.int(Math.random() * 1000000)}; } macro public static function embedBytes():Array { var fields = embedData(":file"); if (fields == null) return null; for (autoBuild in Context.getLocalClass().get().meta.extract(":autoBuild")) { switch (autoBuild.params[0]) { case macro lime._internal.macros.AssetsMacro.embedByteArray(): return null; default: } } var superCall = Context.defined("html5") ? macro super(bytes.b.buffer) : Context.defined("hl") ? macro super(bytes.b, bytes.length) : macro super(bytes.length, bytes.b); var definition = macro class Temp { public function new(?length:Int, ?bytesData:haxe.io.BytesData) { var bytes = haxe.Resource.getBytes(resourceName); $superCall; } }; fields.push(definition.fields[0]); return fields; } macro public static function embedByteArray():Array { var fields = embedData(":file"); if (fields == null) return null; var definition = macro class Temp { public function new(?length:Int = 0) { super(); var bytes = haxe.Resource.getBytes(resourceName); __fromBytes(bytes); } }; fields.push(definition.fields[0]); return fields; } private static function embedData(metaName:String, encode:Bool = false):Array { if (Context.defined("display")) return null; var classType = Context.getLocalClass().get(); var metaData = classType.meta; var position = Context.currentPos(); var fields = Context.getBuildFields(); for (meta in metaData.extract(metaName)) { if (meta.params.length == 0) continue; switch (meta.params[0].expr) { case EConst(CString("" | null)): return null; case EConst(CString(filePath)): var path = filePath; if (!FileSystem.exists(filePath)) { path = Context.resolvePath(filePath); } if (!FileSystem.exists(path) || FileSystem.isDirectory(path)) { return null; } var bytes = File.getBytes(path); var resourceName = "__ASSET__" + metaName + "_" + (classType.pack.length > 0 ? classType.pack.join("_") + "_" : "") + classType.name; if (Context.getResources().exists(resourceName)) { return null; } if (encode) { var resourceType = "image/png"; if (bytes.get(0) == 0xFF && bytes.get(1) == 0xD8) { resourceType = "image/jpg"; } else if (bytes.get(0) == 0x47 && bytes.get(1) == 0x49 && bytes.get(2) == 0x46) { resourceType = "image/gif"; } var definition = macro class Temp { private static inline var resourceType:String = $v{ resourceType }; }; fields.push(definition.fields[0]); var base64 = Base64.encode(bytes); Context.addResource(resourceName, Bytes.ofString(base64)); } else { Context.addResource(resourceName, bytes); } var definition = macro class Temp { private static inline var resourceName:String = $v{ resourceName }; }; fields.push(definition.fields[0]); return fields; default: } } return null; } macro public static function embedFont():Array { if (Context.defined("display")) return Context.getBuildFields(); var fields = null; var classType = Context.getLocalClass().get(); var metaData = classType.meta.get(); var position = Context.currentPos(); var fields = Context.getBuildFields(); var path = ""; var glyphs = "32-255"; for (meta in metaData) { if (meta.name == ":font") { if (meta.params.length > 0) { switch (meta.params[0].expr) { case EConst(CString(filePath)): path = filePath; if (!sys.FileSystem.exists(filePath)) { path = Context.resolvePath(filePath); } default: } } } } if (path != null && path != "") { if (Context.defined("html5")) { Sys.command("haxelib", ["run", "lime", "generate", "-font-hash", sys.FileSystem.fullPath(path)]); path += ".hash"; } var bytes = File.getBytes(path); var resourceName = "LIME_font_" + (classType.pack.length > 0 ? classType.pack.join("_") + "_" : "") + classType.name; Context.addResource(resourceName, bytes); for (field in fields) { if (field.name == "new") { fields.remove(field); break; } } var definition = macro class Temp { private static var resourceName:String = $v{ resourceName }; public function new() { super(); __fromBytes(haxe.Resource.getBytes(resourceName)); } }; fields.push(definition.fields[0]); fields.push(definition.fields[1]); return fields; } return fields; } macro public static function embedImage():Array { var fields = embedData(":image", Context.defined("html5")); if (fields == null) return null; var definition:TypeDefinition; if (Context.defined("html5")) { definition = macro class Temp { public static var preload:js.html.Image; public function new(?buffer:lime.graphics.ImageBuffer, ?offsetX:Int, ?offsetY:Int, ?width:Int, ?height:Int, ?color:Null, ?type:lime.graphics.ImageType, ?onload:Dynamic = true) { super(); if (preload != null) { var buffer = new lime.graphics.ImageBuffer(); buffer.__srcImage = preload; buffer.width = preload.width; buffer.width = preload.height; __fromImageBuffer(buffer); } else { __fromBase64(haxe.Resource.getString(resourceName), resourceType, function(image) { if (preload == null) { preload = image.buffer.__srcImage; } if (onload != null) { onload(image); } }); } } }; } else { definition = macro class Temp { public function new(?buffer:lime.graphics.ImageBuffer, ?offsetX:Int, ?offsetY:Int, ?width:Int, ?height:Int, ?color:Null, ?type:lime.graphics.ImageType) { super(); __fromBytes(haxe.Resource.getBytes(resourceName), null); } }; } for (field in definition.fields) { fields.push(field); } return fields; } macro public static function embedSound():Array { var fields = embedData(":sound"); // CFFILoader.h(248) : NOT Implemented:api_buffer_data if (fields == null || Context.defined("html5") || !Context.defined("openfl")) return null; var definition = macro class Temp { public function new(?stream:openfl.net.URLRequest, ?context:openfl.media.SoundLoaderContext, ?forcePlayAsMusic:Bool = false) { super(); var byteArray = openfl.utils.ByteArray.fromBytes(haxe.Resource.getBytes(resourceName)); loadCompressedDataFromByteArray(byteArray, byteArray.length, forcePlayAsMusic); } }; fields.push(definition.fields[0]); return fields; } #end } ================================================ FILE: src/lime/_internal/macros/CFFIMacro.hx ================================================ package lime._internal.macros; #if macro import haxe.macro.Context; import haxe.macro.Expr; import haxe.macro.Type; using haxe.macro.ComplexTypeTools; using haxe.macro.ExprTools; using haxe.macro.TypeTools; class CFFIMacro { public static function build(defaultLibrary:String = "lime"):Array { var pos = Context.currentPos(); var fields = Context.getBuildFields(); var newFields:Array = []; for (field in fields) { switch (field) { case _ => {kind: FFun(fun), meta: meta}: for (m in meta) { if (m.name == ":cffi") { var library = null; var method = null; var lazy = false; if (Reflect.hasField(m, "params")) { if (m.params.length > 0) library = m.params[0].getValue(); if (m.params.length > 1) method = m.params[1].getValue(); if (m.params.length > 2) lazy = m.params[2].getValue(); } if (library == null || library == "") { library = defaultLibrary; } if (method == null || method == "") { method = field.name; } var typeArgs = []; for (arg in fun.args) { typeArgs.push({name: arg.name, opt: false, t: arg.type.toType()}); } var type = __getFunctionType(typeArgs, fun.ret.toType()); var typeString = type.string; var typeSignature = type.signature; var expr = ""; if (Context.defined("display") || Context.defined("disable_cffi")) { switch (type.result.toString()) { case "Int", "Float", "cpp.Float32", "cpp.Int16", "cpp.Int32", "cpp.Float64": expr += "return 0"; case "Bool": expr += "return false"; case "Void": expr += "return"; default: expr += "return null"; } } else { var cffiName = "cffi_" + field.name; var cffiExpr, cffiType; if (Context.defined("cpp")) { cffiExpr = 'new cpp.Callable<$typeString> (cpp.Prime._loadPrime ("$library", "$method", "$typeSignature", $lazy))'; // Sys.println ("private static var " + field.name + ':$typeString = CFFI.loadPrime ("$library", "$method", "$typeSignature");'); // Sys.println ("private static var " + field.name + ' = new cpp.Callable<$typeString> (cpp.Prime._loadPrime ("$library", "$method", "$typeSignature", $lazy));'); } else { var args = typeSignature.length - 1; if (args > 5) { args = -1; } cffiExpr = 'new cpp.Callable<$typeString> (lime.system.CFFI.load ("$library", "$method", $args, $lazy))'; // Sys.println ("private static var " + field.name + ':$typeString = CFFI.load ("$library", "$method", $args);'); } cffiType = TPath({pack: ["cpp"], name: "Callable", params: [TPType(TFun(type.args, type.result).toComplexType())]}); newFields.push( { name: cffiName, access: [APrivate, AStatic], kind: FieldType.FVar(cffiType, Context.parse(cffiExpr, field.pos)), pos: field.pos }); if (type.result.toString() != "Void" && type.result.toString() != "cpp.Void") { expr += "return "; } expr += '$cffiName.call ('; for (i in 0...type.args.length) { if (i > 0) expr += ", "; expr += type.args[i].name; } expr += ")"; // if (Context.defined ("cpp")) { // Sys.println ('private static var $cffiName = new cpp.Callable<$typeString> (cpp.Prime._loadPrime ("$library", "$method", "$typeSignature", $lazy));'); // var _args = ""; // for (i in 0...typeArgs.length) { // if (i > 0) _args += ", "; // _args += typeArgs[i].name + ":" + typeArgs[i].t.toString (); // } // Sys.println ('private static function ${field.name} ($_args) { $expr; }'); // } } field.access.push(AInline); fun.expr = Context.parse(expr, field.pos); } } default: } } fields = fields.concat(newFields); return fields; } private static function __getFunctionType(args:Array<{name:String, opt:Bool, t:Type}>, result:Type) { #if (!disable_cffi && !display) var useCPPTypes = Context.defined("cpp"); #else var useCPPTypes = false; #end var typeArgs = []; var typeResult = null; var typeSignature = ""; for (arg in args) { switch (arg.t.toString()) { case "Int", "cpp.Int16", "cpp.Int32": typeArgs.push(arg); typeSignature += "i"; case "Bool": typeArgs.push(arg); typeSignature += "b"; case "cpp.Float32": if (useCPPTypes) { typeArgs.push({name: arg.name, opt: false, t: (macro:cpp.Float32).toType()}); } else { typeArgs.push(arg); } typeSignature += "f"; case "Float", "cpp.Float64", "lime.utils.DataPointer": typeArgs.push(arg); typeSignature += "d"; case "String": typeArgs.push(arg); typeSignature += "s"; case "cpp.ConstCharStar": typeArgs.push(arg); typeSignature += "c"; case "Void", "cpp.Void": if (useCPPTypes) { typeArgs.push({name: arg.name, opt: false, t: (macro:cpp.Void).toType()}); } else { typeArgs.push(arg); } typeSignature += "v"; default: if (useCPPTypes) { typeArgs.push({name: arg.name, opt: false, t: (macro:cpp.Object).toType()}); } else { typeArgs.push({name: arg.name, opt: false, t: (macro:Dynamic).toType()}); } typeSignature += "o"; } } switch (result.toString()) { case "Int", "cpp.Int16", "cpp.Int32": typeResult = result; typeSignature += "i"; case "Bool": typeResult = result; typeSignature += "b"; case "cpp.Float32": if (useCPPTypes) { typeResult = (macro:cpp.Float32).toType(); } else { typeResult = result; } typeSignature += "f"; case "Float", "cpp.Float64", "lime.utils.DataPointer": typeResult = result; typeSignature += "d"; case "String": typeResult = result; typeSignature += "s"; case "cpp.ConstCharStar": typeResult = result; typeSignature += "c"; case "Void", "cpp.Void": if (useCPPTypes) { typeResult = (macro:cpp.Void).toType(); } else { typeResult = result; } typeSignature += "v"; default: if (useCPPTypes) { typeResult = (macro:cpp.Object).toType(); } else { typeResult = (macro:Dynamic).toType(); } typeSignature += "o"; } var typeString = ""; if (typeArgs.length == 0) { typeString = "Void->"; } else { for (arg in typeArgs) { typeString += arg.t.toString() + "->"; } } typeString += typeResult.toString(); return { args: typeArgs, result: typeResult, string: typeString, signature: typeSignature }; } } #end ================================================ FILE: src/lime/_internal/macros/DefineMacro.hx ================================================ package lime._internal.macros; #if macro import haxe.macro.Compiler; import haxe.macro.Context; class DefineMacro { public static function run():Void { if (!Context.defined("tools")) { if (Context.defined("flash")) { if (Context.defined("air")) { var childPath = Context.resolvePath("lime/_internal"); var parts = StringTools.replace(childPath, "\\", "/").split("/"); parts.pop(); // lime parts.pop(); // src parts.pop(); // root directory var externPath = parts.join("/") + "/externs/air"; Compiler.addClassPath(externPath); } } else if (Context.defined("js")) { if (!Context.defined("nodejs")) { Compiler.define("html5"); Compiler.define("web"); Compiler.define("lime-canvas"); Compiler.define("lime-dom"); Compiler.define("lime-howlerjs"); Compiler.define("lime-webgl"); } } else { Compiler.define("native"); var cffi = (!Context.defined("nocffi") && !Context.defined("eval")); if (Context.defined("ios") || Context.defined("android") || Context.defined("tizen")) { Compiler.define("mobile"); if (cffi) Compiler.define("lime-opengles"); } else if (Context.defined("webassembly") || Context.defined("wasm") || Context.defined("emscripten")) { Compiler.define("webassembly"); Compiler.define("wasm"); Compiler.define("emscripten"); Compiler.define("web"); if (cffi) Compiler.define("lime-opengles"); } else { Compiler.define("desktop"); if (cffi) Compiler.define("lime-opengl"); } if (cffi) { Compiler.define("lime-cffi"); Compiler.define("lime-openal"); Compiler.define("lime-cairo"); Compiler.define("lime-curl"); Compiler.define("lime-harfbuzz"); Compiler.define("lime-vorbis"); } else { Compiler.define("disable-cffi"); } } } } } #end ================================================ FILE: src/lime/_internal/macros/EventMacro.hx ================================================ package lime._internal.macros; #if macro import haxe.macro.Context; import haxe.macro.Expr; import haxe.macro.Type; using haxe.macro.Tools; class EventMacro { public static function build() { var typeArgs; var typeResult; switch (Context.follow(Context.getLocalType())) { case TInst(_, [Context.follow(_) => TFun(args, result)]): typeArgs = args; typeResult = result; case TInst(localType, _): Context.fatalError("Invalid number of type parameters for " + localType.toString(), Context.currentPos()); return null; default: throw false; } var typeParam = TFun(typeArgs, typeResult); var typeString = ""; if (typeArgs.length == 0) { typeString = "Void->"; } else { for (arg in typeArgs) { typeString += arg.t.toString() + "->"; } } typeString += typeResult.toString(); typeString = StringTools.replace(typeString, "->", "_"); typeString = StringTools.replace(typeString, ".", "_"); typeString = StringTools.replace(typeString, "<", "_"); typeString = StringTools.replace(typeString, ">", "_"); var name = "_Event_" + typeString; try { Context.getType("lime.app." + name); } catch (e:Dynamic) { var pos = Context.currentPos(); var fields = Context.getBuildFields(); var args:Array = []; var argName, argNames = []; for (i in 0...typeArgs.length) { if (i == 0) { argName = "a"; } else { argName = "a" + i; } argNames.push(Context.parse(argName, pos)); args.push({name: argName, type: typeArgs[i].t.toComplexType()}); } var dispatch = macro { canceled = false; var listeners = __listeners; var repeat = __repeat; var i = 0; while (i < listeners.length) { listeners[i]($a{argNames}); if (!repeat[i]) { this.remove(cast listeners[i]); } else { i++; } if (canceled) { break; } } } var i = 0; var field; while (i < fields.length) { field = fields[i]; if (field.name == "__listeners" || field.name == "dispatch") { fields.remove(field); } else { i++; } } fields.push( { name: "__listeners", access: [APublic], kind: FVar(TPath({pack: [], name: "Array", params: [TPType(typeParam.toComplexType())]})), pos: pos }); fields.push( { name: "dispatch", access: [APublic], kind: FFun( { args: args, expr: dispatch, params: [], ret: macro:Void }), pos: pos }); var meta:Array = [ {name: ":dox", params: [macro hide], pos: pos}, {name: ":noCompletion", pos: pos} ]; #if !lime_debug meta.push({name: ":fileXml", params: [macro 'tags="haxe,release"'], pos: pos}); meta.push({name: ":noDebug", pos: pos}); #end Context.defineType( { pos: pos, pack: ["lime", "app"], name: name, kind: TDClass(), fields: fields, params: [ {name: "T"}], meta: meta }); } return TPath({pack: ["lime", "app"], name: name, params: [TPType(typeParam.toComplexType())]}).toType(); } } #end ================================================ FILE: src/lime/_internal/macros/HTTPRequestMacro.hx ================================================ package lime._internal.macros; #if macro import haxe.macro.Context; import haxe.macro.Expr; import haxe.macro.Type; using haxe.macro.Tools; class HTTPRequestMacro { private static function build() { var paramType; var type:BaseType, typeArgs; var stringAbstract = false; var bytesAbstract = false; switch (Context.follow(Context.getLocalType())) { case TInst(localType, [t]): paramType = t; switch (t) { case TInst(t, args): type = t.get(); typeArgs = args; case TAbstract(t, args): type = t.get(); typeArgs = args; stringAbstract = isStringAbstract(t.get()); if (!stringAbstract) bytesAbstract = isBytesAbstract(t.get()); case TType(t, args): type = t.get(); typeArgs = args; case TMono(_): Context.fatalError("Invalid number of type parameters for " + localType.toString(), Context.currentPos()); return null; case TDynamic(_): switch (Context.getType("haxe.io.Bytes")) { case TInst(t, args): type = t.get(); typeArgs = args; default: throw false; } default: throw false; } default: throw false; } var typeString = type.module; if (type.name != type.module && !StringTools.endsWith(type.module, "." + type.name)) { typeString += "." + type.name; } if (typeString == "String" || stringAbstract) { return TPath( { pack: ["lime", "net"], name: "HTTPRequest", sub: "_HTTPRequest_String", params: [TPType(paramType.toComplexType())] }).toType(); } else if (typeString == "haxe.io.Bytes" || bytesAbstract) { return TPath( { pack: ["lime", "net"], name: "HTTPRequest", sub: "_HTTPRequest_Bytes", params: [TPType(paramType.toComplexType())] }).toType(); } else { var typeParamString = typeString; if (typeArgs.length > 0) { typeParamString += "<"; for (i in 0...typeArgs.length) { if (i > 0) typeParamString += ","; typeParamString += typeArgs[i].toString(); } typeParamString += ">"; } var flattenedTypeString = typeParamString; flattenedTypeString = StringTools.replace(flattenedTypeString, "->", "_"); flattenedTypeString = StringTools.replace(flattenedTypeString, ".", "_"); flattenedTypeString = StringTools.replace(flattenedTypeString, "<", "_"); flattenedTypeString = StringTools.replace(flattenedTypeString, ">", "_"); var name = "_HTTPRequest_" + flattenedTypeString; try { Context.getType("lime.net." + name); } catch (e:Dynamic) { var pos = Context.currentPos(); var fields = [ { name: "new", access: [APublic], kind: FFun( { args: [ {name: "uri", type: macro:String, opt: true}], expr: macro {super(uri);}, params: [], ret: macro:Void }), pos: Context.currentPos() }, { name: "fromBytes", access: [APrivate, AOverride], kind: FFun( { args: [ {name: "bytes", type: macro:haxe.io.Bytes}], expr: Context.parse("return " + typeString + ".fromBytes (bytes)", pos), params: [], ret: paramType.toComplexType() }), pos: pos } ]; var meta:Array = []; #if !lime_debug meta.push({name: ":fileXml", params: [macro 'tags="haxe,release"'], pos: pos}); meta.push({name: ":noDebug", pos: pos}); #end Context.defineType( { name: name, pack: ["lime", "net"], kind: TDClass( { pack: ["lime", "net"], name: "HTTPRequest", sub: "_HTTPRequest_Bytes", params: [TPType(paramType.toComplexType())] }, null, false), fields: fields, pos: pos, meta: meta }); } return TPath({pack: ["lime", "net"], name: name, params: []}).toType(); } } private static function isBytesAbstract(type:AbstractType):Bool { while (type != null) { switch (type.type) { case TInst(t, _): return t.get().module == "haxe.io.Bytes"; case TAbstract(t, _): type = t.get(); default: return false; } } return false; } private static function isStringAbstract(type:AbstractType):Bool { while (type != null) { switch (type.type) { case TInst(t, _): return t.get().module == "String"; case TAbstract(t, _): type = t.get(); default: return false; } } return false; } } #end ================================================ FILE: src/lime/_internal/unifill/CodePoint.hx ================================================ package lime._internal.unifill; abstract CodePoint(Int) { @:from public static inline function fromInt(code:Int):CodePoint { if (!Unicode.isScalar(code)) { throw new Exception.InvalidCodePoint(code); } return new CodePoint(code); } @:op(A + B) public static inline function cons(a:CodePoint, b:String):String return a.toString() + b; @:op(A + B) public static inline function snoc(a:String, b:CodePoint):String return a + b.toString(); @:op(A + B) public static inline function addInt(a:CodePoint, b:Int):CodePoint return CodePoint.fromInt(a.toInt() + b); @:op(A - B) public static inline function sub(a:CodePoint, b:CodePoint):Int return (a.toInt()) - (b.toInt()); @:op(A - B) public static inline function subInt(a:CodePoint, b:Int):CodePoint return CodePoint.fromInt(a.toInt() - b); @:op(A == B) public static function eq(a:CodePoint, b:CodePoint):Bool; @:op(A != B) public static function ne(a:CodePoint, b:CodePoint):Bool; @:op(A < B) public static function lt(a:CodePoint, b:CodePoint):Bool; @:op(A <= B) public static function lte(a:CodePoint, b:CodePoint):Bool; @:op(A > B) public static function gt(a:CodePoint, b:CodePoint):Bool; @:op(A >= B) public static function gte(a:CodePoint, b:CodePoint):Bool; inline function new(code:Int):Void { this = code; } @:to public inline function toString():String return InternalEncoding.fromCodePoint(this); @:to public inline function toInt():Int return this; } ================================================ FILE: src/lime/_internal/unifill/CodePointIter.hx ================================================ package lime._internal.unifill; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class CodePointIter { var string:String; var index:Int; var endIndex:Int; public inline function new(s:String) { string = s; index = 0; endIndex = s.length; } public inline function hasNext():Bool { return index < endIndex; } var i = 0; // FIXME: blocked by HaxeFoundation/haxe#4353 public inline function next():CodePoint { i = index; index += InternalEncoding.codePointWidthAt(string, index); return cast InternalEncoding.codePointAt(string, i); } } ================================================ FILE: src/lime/_internal/unifill/Exception.hx ================================================ package lime._internal.unifill; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Exception { function new() {} public function toString():String { throw null; } } #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class InvalidCodePoint extends Exception { public var code(default, null):Int; public function new(code:Int) { super(); this.code = code; } override public function toString():String { return 'InvalidCodePoint(code: $code)'; } } #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class InvalidCodeUnitSequence extends Exception { public var index(default, null):Int; public function new(index:Int) { super(); this.index = index; } override public function toString():String { return 'InvalidCodeUnitSequence(index: $index)'; } } ================================================ FILE: src/lime/_internal/unifill/InternalEncoding.hx ================================================ package lime._internal.unifill; #if (neko || php || cpp || lua || macro) private typedef UtfX = Utf8; #elseif python private typedef UtfX = Utf32; #else private typedef UtfX = Utf16; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end /** InternalEncoding provides primitive API to deal with strings across all platforms. You should consider adopting Unifill before this. **/ class InternalEncoding { /** Returns Encoding strings on the platform are encoded in. **/ public static var internalEncoding(get, never):String; static inline function get_internalEncoding():String #if (neko || php || cpp || lua || macro) return "UTF-8"; #elseif python return "UTF-32"; #else return "UTF-16"; #end /** Returns the UTF-8/16/32 code unit at position `index` of String `s`. **/ public static inline function codeUnitAt(s:String, index:Int):Int { return UtfX.fromString(s).codeUnitAt(index); } /** Returns the Unicode code point at position `index` of String `s`. **/ public static inline function codePointAt(s:String, index:Int):Int { return UtfX.fromString(s).codePointAt(index); } /** Returns the character as a String at position `index` of String `s`. **/ public static inline function charAt(s:String, index:Int):String { return UtfX.fromString(s).charAt(index).toString(); } /** Returns the number of Unicode code points from `beginIndex` to `endIndex` in String `s`. **/ public static inline function codePointCount(s:String, beginIndex:Int, endIndex:Int):Int { return UtfX.fromString(s).codePointCount(beginIndex, endIndex); } /** Returns the number of units of the code point at position `index` of String `s`. **/ public static inline function codePointWidthAt(s:String, index:Int):Int { return UtfX.fromString(s).codePointWidthAt(index); } /** Returns the number of units of the code point before position `index` of String `s`. **/ public static inline function codePointWidthBefore(s:String, index:Int):Int { return UtfX.fromString(s).codePointWidthBefore(index); } /** Returns the index within String `s` that is offset from position `index` by `codePointOffset` code points. **/ public static inline function offsetByCodePoints(s:String, index:Int, codePointOffset:Int):Int { return UtfX.fromString(s).offsetByCodePoints(index, codePointOffset); } /** Returns the index within String `s` that is offset from position `index` by `codePointOffset` code points counting backward. **/ public static inline function backwardOffsetByCodePoints(s:String, index:Int, codePointOffset:Int):Int { return UtfX.fromString(s).offsetByCodePoints(index, -codePointOffset); } /** Converts the code point `code` to a character as String. **/ public static inline function fromCodePoint(codePoint:Int):String { return UtfX.fromCodePoint(codePoint).toString(); } /** Converts `codePoints` to a String. **/ public static inline function fromCodePoints(codePoints:Iterable):String { return UtfX.fromCodePoints(codePoints).toString(); } /** Validates String `s`. If the code unit sequence of `s` is invalid, `Exception.InvalidCodeUnitSequence` is throwed. **/ public static inline function validate(s:String):Void { UtfX.fromString(s).validate(); } /** Returns if String `s` is valid. **/ public static function isValidString(s:String):Bool { try { validate(s); return true; } catch (e:Exception.InvalidCodeUnitSequence) { return false; } } public static inline function encodeWith(f:Int->Void, c:Int):Void { UtfX.encodeWith(f, c); } } ================================================ FILE: src/lime/_internal/unifill/InternalEncodingBackwardIter.hx ================================================ package lime._internal.unifill; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class InternalEncodingBackwardIter { public var string:String; public var beginIndex:Int; public var index:Int; public inline function new(s:String, beginIndex:Int, endIndex:Int) { string = s; this.beginIndex = beginIndex; this.index = endIndex; } public inline function hasNext():Bool { return beginIndex < index; } public inline function next():Int { index -= InternalEncoding.codePointWidthBefore(string, index); return index; } } ================================================ FILE: src/lime/_internal/unifill/InternalEncodingIter.hx ================================================ package lime._internal.unifill; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class InternalEncodingIter { public var string:String; public var index:Int; public var endIndex:Int; public inline function new(s:String, beginIndex:Int, endIndex:Int) { string = s; this.index = beginIndex; this.endIndex = endIndex; } public inline function hasNext():Bool { return index < endIndex; } var i = 0; // FIXME: blocked by HaxeFoundation/haxe#4353 public inline function next():Int { i = index; index += InternalEncoding.codePointWidthAt(string, index); return i; } } ================================================ FILE: src/lime/_internal/unifill/Unicode.hx ================================================ package lime._internal.unifill; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Unicode { public static inline var minCodePoint:Int = 0x0000; public static inline var maxCodePoint:Int = 0x10FFFF; public static inline var minHighSurrogate:Int = 0xD800; public static inline var maxHighSurrogate:Int = 0xDBFF; public static inline var minLowSurrogate:Int = 0xDC00; public static inline var maxLowSurrogate:Int = 0xDFFF; public static inline function decodeSurrogate(hi:Int, lo:Int):Int return (hi - 0xD7C0 << 10) | (lo & 0x3FF); public static inline function encodeHighSurrogate(c:Int):Int return (c >> 10) + 0xD7C0; public static inline function encodeLowSurrogate(c:Int):Int return (c & 0x3FF) | 0xDC00; public static inline function isScalar(code:Int):Bool { return minCodePoint <= code && code <= maxCodePoint && !isHighSurrogate(code) && !isLowSurrogate(code); } public static inline function isHighSurrogate(code:Int):Bool { return minHighSurrogate <= code && code <= maxHighSurrogate; } public static inline function isLowSurrogate(code:Int):Bool { return minLowSurrogate <= code && code <= maxLowSurrogate; } } ================================================ FILE: src/lime/_internal/unifill/Unifill.hx ================================================ package lime._internal.unifill; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end /** Unifill provides Unicode-code-point-wise methods on Strings. It is ideally used with 'using Unifill' and then acts as an extension to the String class. **/ class Unifill { /** Returns the number of Unicode code points of String `s`. **/ public static inline function uLength(s:String):Int return InternalEncoding.codePointCount(s, 0, s.length); /** Returns the character at position `index` by code points of String `s`. **/ public static inline function uCharAt(s:String, index:Int):String { #if (neko || php || cpp) return InternalEncoding.fromCodePoint(haxe.Utf8.charCodeAt(s, index)); #else var i = InternalEncoding.offsetByCodePoints(s, 0, index); return InternalEncoding.charAt(s, i); #end } /** Returns the code point as Int at position `index` by code points of String `s`. **/ public static inline function uCharCodeAt(s:String, index:Int):Int { #if (neko || php || cpp || lua || macro) return cast haxe.Utf8.charCodeAt(s, index); #else var i = InternalEncoding.offsetByCodePoints(s, 0, index); return InternalEncoding.codePointAt(s, i); #end } /** Returns the code point at position `index` by code points of String `s`. **/ public static inline function uCodePointAt(s:String, index:Int):CodePoint { return cast uCharCodeAt(s, index); } /** Returns the position of the leftmost occurence of the str within String `s`. `startIndex` is counted by code points. **/ public static inline function uIndexOf(s:String, value:String, startIndex:Int = 0):Int { var index = s.indexOf(value, InternalEncoding.offsetByCodePoints(s, 0, startIndex)); return if (index >= 0) InternalEncoding.codePointCount(s, 0, index) else -1; } /** Returns the position of the rightmost occurence of the str within String `s`. `startIndex` is counted by code points. **/ public static inline function uLastIndexOf(s:String, value:String, ?startIndex):Int { if (startIndex == null) startIndex = s.length - 1; var index = s.lastIndexOf(value, InternalEncoding.offsetByCodePoints(s, 0, startIndex)); return if (index >= 0) InternalEncoding.codePointCount(s, 0, index) else -1; } /** Splits String `s` at each occurence of `delimiter`. **/ public static inline function uSplit(s:String, delimiter:String):Array { return if (delimiter.length == 0) { [ for (i in new InternalEncodingIter(s, 0, s.length)) InternalEncoding.charAt(s, i) ]; } else { s.split(delimiter); } } /** Returns `length` characters of String `s`, starting at position `startIndex`. `startIndex` and `length` are counted by code points. **/ public static inline function uSubstr(s:String, startIndex:Int, ?length:Int):String { var si = InternalEncoding.offsetByCodePoints(s, if (startIndex >= 0) 0 else s.length, startIndex); var ei = if (length == null) s.length else if (length < 0) si else InternalEncoding.offsetByCodePoints(s, si, length); return s.substring(si, ei); } /** Returns the part of String `s` from `startIndex` to `endIndex`. `startIndex` and `endIndex` are counted by code points. **/ public static inline function uSubstring(s:String, startIndex:Int, ?endIndex:Int):String { var si = if (startIndex < 0) 0 else InternalEncoding.offsetByCodePoints(s, 0, startIndex); var ei = if (endIndex == null) s.length else if (endIndex < 0) 0 else InternalEncoding.offsetByCodePoints(s, 0, endIndex); return s.substring(si, ei); } /** Returns an iterator of the code points of String `s`. **/ public static inline function uIterator(s:String):CodePointIter { return new CodePointIter(s); } /** Compares String `a` and `b`. **/ public static function uCompare(a:String, b:String):Int { var aiter = new InternalEncodingIter(a, 0, a.length); var biter = new InternalEncodingIter(b, 0, b.length); while (aiter.hasNext() && biter.hasNext()) { var acode = InternalEncoding.codePointAt(a, aiter.next()); var bcode = InternalEncoding.codePointAt(b, biter.next()); if (acode < bcode) return -1; if (acode > bcode) return 1; } if (biter.hasNext()) return -1; if (aiter.hasNext()) return 1; return 0; } /** Converts `codePoints` to string. **/ public static inline function uToString(codePoints:Iterable):String return InternalEncoding.fromCodePoints(cast codePoints); /** Appends the character `c` to StringBuf `sb`. **/ public static inline function uAddChar(sb:StringBuf, c:CodePoint):Void { #if (neko || php || cpp || lua || macro) Utf8.encodeWith(function(c) sb.addChar(c), c.toInt()); #elseif python // Utf32.encodeWith(function(c) sb.addChar(c), c.toInt()); sb.addChar(c); #else Utf16.encodeWith(function(c) sb.addChar(c), c.toInt()); #end } } ================================================ FILE: src/lime/_internal/unifill/Utf16.hx ================================================ package lime._internal.unifill; abstract Utf16(StringU16) { /** Converts the code point `code` to a character as a Utf16 string. **/ public static inline function fromCodePoint(codePoint:Int):Utf16 { if (codePoint <= 0xFFFF) { return new Utf16(StringU16.fromCodeUnit(codePoint)); } else { return new Utf16(StringU16.fromTwoCodeUnits(Unicode.encodeHighSurrogate(codePoint), Unicode.encodeLowSurrogate(codePoint))); } } /** Converts `codePoints` to a Utf16 string. **/ public static inline function fromCodePoints(codePoints:Iterable):Utf16 { var buf = new StringU16Buffer(); for (c in codePoints) { Utf16Impl.encode_code_point(function(x) buf.addUnit(x), c); } return new Utf16(buf.getStringU16()); } public static inline function fromString(s:String):Utf16 { return new Utf16(StringU16.fromString(s)); } public static inline function fromArray(a:Array):Utf16 { return new Utf16(StringU16.fromArray(a)); } public static inline function encodeWith(f:Int->Void, c:Int):Void { Utf16Impl.encode_code_point(f, c); } public var length(get, never):Int; /** Returns the UTF-16 code unit at position `index` of `this`. **/ public inline function codeUnitAt(index:Int):Int { return this.codeUnitAt(index); } /** Returns the Unicode code point at position `index` of `this`. **/ public function codePointAt(index:Int):Int { return Utf16Impl.decode_code_point(length, function(i) return codeUnitAt(i), index); } /** Returns the character as a String at position `index` of `this`. **/ public inline function charAt(index:Int):Utf16 { return new Utf16(this.substr(index, codePointWidthAt(index))); } /** Returns the number of Unicode code points from `beginIndex` to `endIndex` in `this`. **/ public function codePointCount(beginIndex:Int, endIndex:Int):Int { var index = beginIndex; var i = 0; while (index < endIndex) { index += codePointWidthAt(index); ++i; } return i; } /** Returns the number of units of the code point at position `index` of `this`. **/ public inline function codePointWidthAt(index:Int):Int { var c = codeUnitAt(index); return Utf16Impl.code_point_width(c); } /** Returns the number of units of the code point before position `index` of `this`. **/ public inline function codePointWidthBefore(index:Int):Int { return Utf16Impl.find_prev_code_point(function(i) return codeUnitAt(i), index); } /** Returns the index within `this` that is offset from position `index` by `codePointOffset` code points. **/ public inline function offsetByCodePoints(index:Int, codePointOffset:Int):Int { return if (codePointOffset >= 0) { forward_offset_by_code_points(index, codePointOffset); } else { backward_offset_by_code_points(index, -codePointOffset); } } /** Returns `len` code units of `this`, starting at position pos. **/ public inline function substr(index:Int, ?len:Int):Utf16 { return new Utf16(this.substr(index, len)); } /** Validates `this` Utf16 string. If the code unit sequence of `this` is invalid, `Exception.InvalidCodeUnitSequence` is throwed. **/ public function validate():Void { var len = this.length; var accessor = function(i) return codeUnitAt(i); var i = 0; while (i < len) { Utf16Impl.decode_code_point(len, accessor, i); i += codePointWidthAt(i); } } public inline function toString():String { return this.toString(); } public inline function toArray():Array { return this.toArray(); } inline function new(s:StringU16) { this = s; } inline function get_length():Int { return this.length; } inline function forward_offset_by_code_points(index:Int, codePointOffset:Int):Int { var len = this.length; var i = 0; while (i < codePointOffset && index < len) { index += codePointWidthAt(index); ++i; } return index; } inline function backward_offset_by_code_points(index:Int, codePointOffset:Int):Int { var count = 0; while (count < codePointOffset && 0 < index) { index -= codePointWidthBefore(index); ++count; } return index; } } private class Utf16Impl { public static inline function code_point_width(c:Int):Int { return (!Unicode.isHighSurrogate(c)) ? 1 : 2; } public static inline function find_prev_code_point(accessor:Int->Int, index:Int):Int { var c = accessor(index - 1); return (!Unicode.isLowSurrogate(c)) ? 1 : 2; } public static inline function encode_code_point(addUnit:Int->Void, codePoint:Int):Void { if (codePoint <= 0xFFFF) { addUnit(codePoint); } else { addUnit(Unicode.encodeHighSurrogate(codePoint)); addUnit(Unicode.encodeLowSurrogate(codePoint)); } } public static function decode_code_point(len:Int, accessor:Int->Int, index:Int):Int { if (index < 0 || len <= index) throw new Exception.InvalidCodeUnitSequence(index); var hi = accessor(index); if (Unicode.isHighSurrogate(hi)) { if (index + 1 < 0 || len <= index + 1) { throw new Exception.InvalidCodeUnitSequence(index); } var lo = accessor(index + 1); if (Unicode.isLowSurrogate(lo)) { return Unicode.decodeSurrogate(hi, lo); } else { throw new Exception.InvalidCodeUnitSequence(index); } } else if (Unicode.isLowSurrogate(hi)) { throw new Exception.InvalidCodeUnitSequence(index); } else { return hi; } } } #if !(neko || php || cpp || lua || macro || python) private abstract StringU16Buffer(StringBuf) { public inline function new() { this = new StringBuf(); } public inline function addUnit(unit:Int):Void { this.addChar(unit); } public inline function getStringU16():StringU16 { return StringU16.fromString(this.toString()); } } private abstract StringU16(String) { public static inline function fromString(s:String):StringU16 { return new StringU16(s); } public static inline function fromCodeUnit(u:Int):StringU16 { return new StringU16(String.fromCharCode(u)); } public static inline function fromTwoCodeUnits(u0:Int, u1:Int):StringU16 { return new StringU16(String.fromCharCode(u0) + String.fromCharCode(u1)); } public static inline function ofArray(a:Array):StringU16 { return fromArray(a); } public static inline function fromArray(a:Array):StringU16 { var buf = new StringBuf(); for (x in a) { buf.addChar(x); } return new StringU16(buf.toString()); } public var length(get, never):Int; public #if !flash inline #end function codeUnitAt(index:Int):Int { return StringTools.fastCodeAt(this, index); } public inline function substr(index:Int, ?len:Int):StringU16 { return new StringU16(this.substr(index, len)); } public inline function toString():String { return this; } public inline function toArray():Array { var i = 0; var len = this.length; return [while (i < len) StringTools.fastCodeAt(this, i++)]; } inline function new(s:String) { this = s; } inline function get_length():Int { return this.length; } } #else private abstract StringU16Buffer(Array) { public inline function new() { this = []; } public inline function addUnit(unit:Int):Void { this.push(unit); } public inline function getStringU16():StringU16 { return StringU16.ofArray(this); } } private abstract StringU16(Array) { public static function fromString(s:String):StringU16 { var buf = new StringU16Buffer(); var addUnit = function(x) buf.addUnit(x); for (i in new InternalEncodingIter(s, 0, s.length)) { var c = InternalEncoding.codePointAt(s, i); Utf16Impl.encode_code_point(addUnit, c); } return buf.getStringU16(); } public static inline function fromCodeUnit(u:Int):StringU16 { return new StringU16([u]); } public static inline function fromTwoCodeUnits(u0:Int, u1:Int):StringU16 { return new StringU16([u0, u1]); } public static inline function ofArray(a:Array):StringU16 { return new StringU16(a); } public static inline function fromArray(a:Array):StringU16 { return new StringU16(a.copy()); } public var length(get, never):Int; public inline function codeUnitAt(index:Int):Int { return this[index]; } public inline function substr(index:Int, ?len:Int):StringU16 { if (index < 0) { index += this.length; if (index < 0) index = 0; } var j = (len != null) ? index + len : this.length; var a = this.slice(index, j); return new StringU16(a); } public function toString():String { var buf = new StringBuf(); var i = 0; var len = this.length; var cua = function(i) return this[i]; while (i < len) { var u = Utf16Impl.decode_code_point(len, cua, i); buf.add(InternalEncoding.fromCodePoint(u)); i += Utf16Impl.code_point_width(codeUnitAt(i)); } return buf.toString(); } public inline function toArray():Array { return this.copy(); } inline function new(a:Array) { this = a; } inline function get_length():Int { return this.length; } } #end ================================================ FILE: src/lime/_internal/unifill/Utf32.hx ================================================ package lime._internal.unifill; #if python import python.Syntax; import python.lib.Builtins; /** Utf32 provides a UTF-32-encoded string. **/ abstract Utf32(String) { public static inline function fromCodePoint(codePoint:Int):Utf32 { return new Utf32(String.fromCharCode(codePoint)); } public static inline function fromCodePoints(codePoints:Iterable):Utf32 { return fromArray([for (c in codePoints) c]); } public static inline function fromString(string:String):Utf32 { return new Utf32(string); } public static inline function fromArray(a:Array):Utf32 { var s:String = Syntax.callField('', "join", Syntax.callField(Builtins, "map", Builtins.chr, a)); return new Utf32(s); } public static inline function encodeWith(f:Int->Void, c:Int):Void { f(c); } public var length(get, never):Int; public inline function charAt(index:Int):Utf32 { return new Utf32(this.charAt(index)); } public inline function codeUnitAt(index:Int):Int { return this.charCodeAt(index); } public inline function codePointAt(index:Int):Int { return this.charCodeAt(index); } public inline function codePointWidthAt(index:Int):Int { return 1; } public inline function codePointWidthBefore(index:Int):Int { return 1; } public function codePointCount(beginIndex:Int, endIndex:Int):Int { return if (endIndex < beginIndex) { 0; } else { endIndex - beginIndex; } } public inline function offsetByCodePoints(index:Int, codePointOffset:Int):Int { var p = index + codePointOffset; return if (p < 0) { 0; } else if (p > this.length) { this.length; } else { p; } } public inline function toString():String { return this; } public inline function toArray():Array { return [for (i in 0...this.length) this.charCodeAt(i)]; } public function validate():Void { var i = 0; var len = this.length; for (i in 0...len) { if (!Unicode.isScalar(this.charCodeAt(i))) { throw new Exception.InvalidCodeUnitSequence(i); } } } @:op(A + B) static inline function concat(a:Utf32, b:Utf32):Utf32 { return new Utf32(a.toString() + b.toString()); } @:op(A == B) static inline function eq(a:Utf32, b:Utf32):Bool { return a.toString() == b.toString(); } @:op(A != B) static inline function ne(a:Utf32, b:Utf32):Bool { return !eq(a, b); } @:op(A + B) static inline function cons(a:CodePoint, b:Utf32):Utf32 { return new Utf32(a.toString() + b.toString()); } @:op(A + B) static inline function snoc(a:Utf32, b:CodePoint):Utf32 { return new Utf32(a.toString() + b.toString()); } inline function get_length():Int { return this.length; } inline function new(s:String) { this = s; } } #else /** Utf32 provides a UTF-32-encoded string. **/ abstract Utf32(Array) { public static inline function fromCodePoint(codePoint:Int):Utf32 { return new Utf32([codePoint]); } public static inline function fromCodePoints(codePoints:Iterable):Utf32 { return fromArray([for (c in codePoints) c]); } public static inline function fromString(string:String):Utf32 { var u = [ for (c in new InternalEncodingIter(string, 0, string.length)) InternalEncoding.codePointAt(string, c) ]; return new Utf32(u); } public static inline function fromArray(a:Array):Utf32 { return new Utf32(a.copy()); } public static inline function encodeWith(f:Int->Void, c:Int):Void { f(c); } public var length(get, never):Int; public inline function charAt(index:Int):Utf32 { if (0 <= index && index < this.length) { return new Utf32([this[index]]); } else { return new Utf32([]); } } public inline function codeUnitAt(index:Int):Int { return this[index]; } public inline function codePointAt(index:Int):Int { return this[index]; } public inline function codePointWidthAt(index:Int):Int { return 1; } public inline function codePointWidthBefore(index:Int):Int { return 1; } public inline function toString():String { return InternalEncoding.fromCodePoints(this); } public inline function toArray():Array { return this.copy(); } public function validate():Void { var i = 0; var len = this.length; while (i < len) { if (!Unicode.isScalar(this[i++])) { throw new Exception.InvalidCodeUnitSequence(i); } } } @:op(A + B) static inline function concat(a:Utf32, b:Utf32):Utf32 { var s:Array = a.toArray(); return new Utf32(s.concat(cast b)); } static function eq_array(a:Array, b:Array):Bool { // assert(a.length == b.length); for (i in 0...a.length) { if (a[i] != b[i]) return false; } return true; } @:op(A == B) static inline function eq(a:Utf32, b:Utf32):Bool { return if (a.length != b.length) false; else eq_array(cast a, cast b); } @:op(A != B) static inline function ne(a:Utf32, b:Utf32):Bool { return !eq(a, b); } @:op(A + B) static inline function cons(a:CodePoint, b:Utf32):Utf32 { var c:Array = b.toArray(); c.unshift(a.toInt()); return new Utf32(c); } @:op(A + B) static inline function snoc(a:Utf32, b:CodePoint):Utf32 { var c:Array = a.toArray(); c.push(b.toInt()); return new Utf32(c); } inline function get_length():Int { return this.length; } inline function new(a:Array) { this = a; } } #end ================================================ FILE: src/lime/_internal/unifill/Utf8.hx ================================================ package lime._internal.unifill; import haxe.io.Bytes; import haxe.io.BytesBuffer; abstract Utf8(StringU8) { /** Converts the code point `code` to a character as a Utf8 string. **/ public static inline function fromCodePoint(codePoint:Int):Utf8 { var buf = new BytesBuffer(); Utf8Impl.encode_code_point(function(c) buf.addByte(c), codePoint); return new Utf8(StringU8.ofBytes(buf.getBytes())); } /** Converts `codePoints` to a Utf8 string. **/ public static inline function fromCodePoints(codePoints:Iterable):Utf8 { var buf = new BytesBuffer(); for (c in codePoints) { Utf8Impl.encode_code_point(function(c) buf.addByte(c), c); } return new Utf8(StringU8.ofBytes(buf.getBytes())); } public static inline function fromString(s:String):Utf8 { return new Utf8(StringU8.fromString(s)); } public static inline function fromBytes(b:Bytes):Utf8 { return new Utf8(StringU8.fromBytes(b)); } public static inline function encodeWith(f:Int->Void, c:Int):Void { Utf8Impl.encode_code_point(f, c); } public var length(get, never):Int; /** Returns the UTF-8 code unit at position `index` of `this`. **/ public inline function codeUnitAt(index:Int):Int { return this.codeUnitAt(index); } /** Returns the Unicode code point at position `index` of `this`. **/ public function codePointAt(index:Int):Int { return Utf8Impl.decode_code_point(length, function(i) return codeUnitAt(i), index); } /** Returns the character as a String at position `index` of `this`. **/ public inline function charAt(index:Int):Utf8 { return new Utf8(this.substr(index, codePointWidthAt(index))); } /** Returns the number of Unicode code points from `beginIndex` to `endIndex` in `this`. **/ public function codePointCount(beginIndex:Int, endIndex:Int):Int { var index = beginIndex; var i = 0; while (index < endIndex) { index += codePointWidthAt(index); ++i; } return i; } /** Returns the number of units of the code point at position `index` of `this`. **/ public inline function codePointWidthAt(index:Int):Int { var c = codeUnitAt(index); return Utf8Impl.code_point_width(c); } /** Returns the number of units of the code point before position `index` of `this`. **/ public inline function codePointWidthBefore(index:Int):Int { return Utf8Impl.find_prev_code_point(function(i) return codeUnitAt(i), index); } /** Returns the index within `this` that is offset from position `index` by `codePointOffset` code points. **/ public inline function offsetByCodePoints(index:Int, codePointOffset:Int):Int { return if (codePointOffset >= 0) { forward_offset_by_code_points(index, codePointOffset); } else { backward_offset_by_code_points(index, -codePointOffset); } } /** Returns `len` code units of `this`, starting at position pos. **/ public inline function substr(index:Int, ?len:Int):Utf8 { return new Utf8(this.substr(index, len)); } /** Validates `this` Utf8 string. If the code unit sequence of `this` is invalid, `Exception.InvalidCodeUnitSequence` is throwed. **/ public function validate():Void { var len = this.length; var accessor = function(i) return codeUnitAt(i); var i = 0; while (i < len) { Utf8Impl.decode_code_point(len, accessor, i); i += codePointWidthAt(i); } } public inline function toString():String { return this.toString(); } public inline function toBytes():Bytes { return this.toBytes(); } inline function new(s:StringU8) { this = s; } inline function get_length():Int { return this.length; } inline function forward_offset_by_code_points(index:Int, codePointOffset:Int):Int { var len = this.length; var i = 0; while (i < codePointOffset && index < len) { index += codePointWidthAt(index); ++i; } return index; } inline function backward_offset_by_code_points(index:Int, codePointOffset:Int):Int { var count = 0; while (count < codePointOffset && 0 < index) { index -= codePointWidthBefore(index); ++count; } return index; } } private class Utf8Impl { public static inline function code_point_width(c:Int):Int { return (c < 0xC0) ? 1 : (c < 0xE0) ? 2 : (c < 0xF0) ? 3 : (c < 0xF8) ? 4 : 1; } public static inline function find_prev_code_point(accessor:Int->Int, index:Int):Int { var c1 = accessor(index - 1); return (c1 < 0x80 || c1 >= 0xC0) ? 1 : (accessor(index - 2) & 0xE0 == 0xC0) ? 2 : (accessor(index - 3) & 0xF0 == 0xE0) ? 3 : (accessor(index - 4) & 0xF8 == 0xF0) ? 4 : 1; } public static inline function encode_code_point(addUnit:Int->Void, codePoint:Int):Void { if (codePoint <= 0x7F) { addUnit(codePoint); } else if (codePoint <= 0x7FF) { addUnit(0xC0 | (codePoint >> 6)); addUnit(0x80 | (codePoint & 0x3F)); } else if (codePoint <= 0xFFFF) { addUnit(0xE0 | (codePoint >> 12)); addUnit(0x80 | ((codePoint >> 6) & 0x3F)); addUnit(0x80 | (codePoint & 0x3F)); } else if (codePoint <= 0x10FFFF) { addUnit(0xF0 | (codePoint >> 18)); addUnit(0x80 | ((codePoint >> 12) & 0x3F)); addUnit(0x80 | ((codePoint >> 6) & 0x3F)); addUnit(0x80 | (codePoint & 0x3F)); } else { throw new Exception.InvalidCodePoint(codePoint); } } public static function decode_code_point(len:Int, accessor:Int->Int, index:Int):Int { var i = index; if (i < 0 || len <= i) throw new Exception.InvalidCodeUnitSequence(index); var c1 = accessor(i); if (c1 < 0x80) { return c1; } if (c1 < 0xC0) { throw new Exception.InvalidCodeUnitSequence(index); } ++i; if (i < 0 || len <= i) throw new Exception.InvalidCodeUnitSequence(index); var c2 = accessor(i); if (c1 < 0xE0) { if ((c1 & 0x1E != 0) && (c2 & 0xC0 == 0x80)) return ((c1 & 0x3F) << 6) | (c2 & 0x7F); else throw new Exception.InvalidCodeUnitSequence(index); } ++i; if (i < 0 || len <= i) throw new Exception.InvalidCodeUnitSequence(index); var c3 = accessor(i); if (c1 < 0xF0) { if (((c1 & 0x0F != 0) || (c2 & 0x20 != 0)) && (c2 & 0xC0 == 0x80) && (c3 & 0xC0 == 0x80) && !(c1 == 0xED && 0xA0 <= c2 && c2 <= 0xBF)) return ((c1 & 0x1F) << 12) | ((c2 & 0x7F) << 6) | (c3 & 0x7F); else throw new Exception.InvalidCodeUnitSequence(index); } ++i; if (i < 0 || len <= i) throw new Exception.InvalidCodeUnitSequence(index); var c4 = accessor(i); if (c1 < 0xF8) { if (((c1 & 0x07 != 0) || (c2 & 0x30 != 0)) && (c2 & 0xC0 == 0x80) && (c3 & 0xC0 == 0x80) && (c4 & 0xC0 == 0x80) && !((c1 == 0xF4 && c2 > 0x8F) || c1 > 0xF4)) return ((c1 & 0x0F) << 18) | ((c2 & 0x7F) << 12) | ((c3 & 0x7F) << 6) | (c4 & 0x7F); else throw new Exception.InvalidCodeUnitSequence(index); } throw new Exception.InvalidCodeUnitSequence(index); } } #if (neko || php || cpp || lua || macro) private abstract StringU8(String) { public static inline function fromString(s:String):StringU8 { return new StringU8(s); } public static inline function ofBytes(b:Bytes):StringU8 { return new StringU8(b.toString()); } public static inline function fromBytes(b:Bytes):StringU8 { return new StringU8(b.toString()); } public var length(get, never):Int; public inline function codeUnitAt(index:Int):Int { return StringTools.fastCodeAt(this, index); } public inline function substr(index:Int, ?len:Int):StringU8 { return new StringU8(this.substr(index, len)); } public inline function toString():String { return this; } public inline function toBytes():Bytes { return Bytes.ofString(this); } inline function new(s:String) { this = s; } inline function get_length():Int { return this.length; } } #else private abstract StringU8(Bytes) { public static function fromString(s:String):StringU8 { var buf = new BytesBuffer(); var addUnit = buf.addByte; for (i in new InternalEncodingIter(s, 0, s.length)) { var c = InternalEncoding.codePointAt(s, i); Utf8Impl.encode_code_point(addUnit, c); } return new StringU8(buf.getBytes()); } public static inline function ofBytes(b:Bytes):StringU8 { return new StringU8(b); } public static inline function fromBytes(b:Bytes):StringU8 { var nb = clone_bytes(b); return new StringU8(nb); } public var length(get, never):Int; public inline function codeUnitAt(index:Int):Int { return this.get(index); } public inline function substr(index:Int, ?len:Int):StringU8 { if (index < 0) { index += this.length; if (index < 0) index = 0; } if (len == null) len = this.length - index; var b = this.sub(index, len); return new StringU8(b); } public function toString():String { var buf = new StringBuf(); var i = 0; var len = this.length; var cua = function(i) return this.get(i); while (i < len) { var u = Utf8Impl.decode_code_point(len, cua, i); buf.add(InternalEncoding.fromCodePoint(u)); i += Utf8Impl.code_point_width(codeUnitAt(i)); } return buf.toString(); } public inline function toBytes():Bytes { return clone_bytes(this); } static inline function clone_bytes(b:Bytes):Bytes { var nb = Bytes.alloc(b.length); nb.blit(0, b, 0, b.length); return nb; } inline function new(b:Bytes) { this = b; } inline function get_length():Int { return this.length; } } #end ================================================ FILE: src/lime/app/Application.hx ================================================ package lime.app; import lime.graphics.RenderContext; import lime.system.System; import lime.system.Orientation; import lime.ui.Gamepad; import lime.ui.GamepadAxis; import lime.ui.GamepadButton; import lime.ui.Joystick; import lime.ui.JoystickHatPosition; import lime.ui.KeyCode; import lime.ui.KeyModifier; import lime.ui.MouseButton; import lime.ui.MouseWheelMode; import lime.ui.Touch; import lime.ui.Window; import lime.ui.WindowAttributes; import lime.utils.Preloader; /** The Application class forms the foundation for most Lime projects. It is common to extend this class in a main class. It is then possible to override "on" functions in the class in order to handle standard events that are relevant. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime.ui.Window) class Application extends Module { /** The current Application instance that is executing **/ public static var current(default, null):Application; /** The device's orientation. **/ public var deviceOrientation(get, never):Orientation; /** Meta-data values for the application, such as a version or a package name **/ public var meta:Map; /** A list of currently attached Module instances **/ public var modules(default, null):Array; /** Update events are dispatched each frame (usually just before rendering) **/ public var onUpdate = new EventVoid>(); /** Dispatched when a new window has been created by this application **/ public var onCreateWindow = new EventVoid>(); /** Dispatched when the orientation of the display has changed. **/ public var onDisplayOrientationChange = new EventOrientation->Void>(); /** Dispatched when the orientation of the device has changed. Typically, the display and device orientation values are the same. However, if the display orientation is locked to portrait or landscape, the display and device orientations may be different. **/ public var onDeviceOrientationChange = new EventVoid>(); /** The Preloader for the current Application **/ public var preloader(get, null):Preloader; /** The Window associated with this Application, or the first Window if there are multiple Windows active **/ public var window(get, null):Window; /** A list of active Window instances associated with this Application **/ public var windows(get, null):Array; @:noCompletion private var __backend:ApplicationBackend; @:noCompletion private var __preloader:Preloader; @:noCompletion private var __window:Window; @:noCompletion private var __windowByID:Map; @:noCompletion private var __windows:Array; private static function __init__() { var _init = ApplicationBackend; #if commonjs var p = untyped Application.prototype; untyped Object.defineProperties(p, { "preloader": {get: p.get_preloader}, "window": {get: p.get_window}, "windows": {get: p.get_windows} }); #end } /** Creates a new Application instance **/ public function new() { super(); if (Application.current == null) { Application.current = this; } meta = new Map(); modules = new Array(); __windowByID = new Map(); __windows = new Array(); __backend = new ApplicationBackend(this); __registerLimeModule(this); __preloader = new Preloader(); __preloader.onProgress.add(onPreloadProgress); __preloader.onComplete.add(onPreloadComplete); } /** Adds a new module to the Application @param module A module to add **/ public function addModule(module:IModule):Void { module.__registerLimeModule(this); modules.push(module); } /** Creates a new Window and adds it to the Application @param attributes A set of parameters to initialize the window **/ public function createWindow(attributes:WindowAttributes):Window { var window = __createWindow(attributes); __addWindow(window); return window; } /** Execute the Application. On native platforms, this method blocks until the application is finished running. On other platforms, it will return immediately @return An exit code, 0 if there was no error **/ public function exec():Int { Application.current = this; return __backend.exec(); } /** Called when a gamepad axis move event is fired @param gamepad The current gamepad @param axis The axis that was moved @param value The axis value (between 0 and 1) **/ public function onGamepadAxisMove(gamepad:Gamepad, axis:GamepadAxis, value:Float):Void {} /** Called when a gamepad button down event is fired @param gamepad The current gamepad @param button The button that was pressed **/ public function onGamepadButtonDown(gamepad:Gamepad, button:GamepadButton):Void {} /** Called when a gamepad button up event is fired @param gamepad The current gamepad @param button The button that was released **/ public function onGamepadButtonUp(gamepad:Gamepad, button:GamepadButton):Void {} /** Called when a gamepad is connected @param gamepad The gamepad that was connected **/ public function onGamepadConnect(gamepad:Gamepad):Void {} /** Called when a gamepad is disconnected @param gamepad The gamepad that was disconnected **/ public function onGamepadDisconnect(gamepad:Gamepad):Void {} /** Called when a joystick axis move event is fired @param joystick The current joystick @param axis The axis that was moved @param value The axis value (between 0 and 1) **/ public function onJoystickAxisMove(joystick:Joystick, axis:Int, value:Float):Void {} /** Called when a joystick button down event is fired @param joystick The current joystick @param button The button that was pressed **/ public function onJoystickButtonDown(joystick:Joystick, button:Int):Void {} /** Called when a joystick button up event is fired @param joystick The current joystick @param button The button that was released **/ public function onJoystickButtonUp(joystick:Joystick, button:Int):Void {} /** Called when a joystick is connected @param joystick The joystick that was connected **/ public function onJoystickConnect(joystick:Joystick):Void {} /** Called when a joystick is disconnected @param joystick The joystick that was disconnected **/ public function onJoystickDisconnect(joystick:Joystick):Void {} /** Called when a joystick hat move event is fired @param joystick The current joystick @param hat The hat that was moved @param position The current hat position **/ public function onJoystickHatMove(joystick:Joystick, hat:Int, position:JoystickHatPosition):Void {} /** Called when a key down event is fired on the primary window @param keyCode The code of the key that was pressed @param modifier The modifier of the key that was pressed **/ public function onKeyDown(keyCode:KeyCode, modifier:KeyModifier):Void {} /** Called when a key up event is fired on the primary window @param keyCode The code of the key that was released @param modifier The modifier of the key that was released **/ public function onKeyUp(keyCode:KeyCode, modifier:KeyModifier):Void {} /** Called when the module is exiting **/ public function onModuleExit(code:Int):Void {} /** Called when a mouse down event is fired on the primary window @param x The current x coordinate of the mouse @param y The current y coordinate of the mouse @param button The ID of the mouse button that was pressed **/ public function onMouseDown(x:Float, y:Float, button:MouseButton):Void {} /** Called when a mouse move event is fired on the primary window @param x The current x coordinate of the mouse @param y The current y coordinate of the mouse **/ public function onMouseMove(x:Float, y:Float):Void {} /** Called when a mouse move relative event is fired on the primary window @param x The x movement of the mouse @param y The y movement of the mouse **/ public function onMouseMoveRelative(x:Float, y:Float):Void {} /** Called when a mouse up event is fired on the primary window @param x The current x coordinate of the mouse @param y The current y coordinate of the mouse @param button The ID of the button that was released **/ public function onMouseUp(x:Float, y:Float, button:MouseButton):Void {} /** Called when a mouse wheel event is fired on the primary window @param deltaX The amount of horizontal scrolling (if applicable) @param deltaY The amount of vertical scrolling (if applicable) @param deltaMode The units of measurement used **/ public function onMouseWheel(deltaX:Float, deltaY:Float, deltaMode:MouseWheelMode):Void {} /** Called when a preload complete event is fired **/ public function onPreloadComplete():Void {} /** Called when a preload progress event is fired @param loaded The number of items that are loaded @param total The total number of items will be loaded **/ public function onPreloadProgress(loaded:Int, total:Int):Void {} /** Called when a render context is lost on the primary window **/ public function onRenderContextLost():Void {} /** Called when a render context is restored on the primary window @param context The render context relevant to the event **/ public function onRenderContextRestored(context:RenderContext):Void {} /** Called when a text edit event is fired on the primary window @param text The current replacement text @param start The starting index for the edit @param length The length of the edit **/ public function onTextEdit(text:String, start:Int, length:Int):Void {} /** Called when a text input event is fired on the primary window @param text The current input text **/ public function onTextInput(text:String):Void {} /** Called when a touch cancel event is fired @param touch The current touch object **/ public function onTouchCancel(touch:Touch):Void {} /** Called when a touch end event is fired @param touch The current touch object **/ public function onTouchEnd(touch:Touch):Void {} /** Called when a touch move event is fired @param touch The current touch object **/ public function onTouchMove(touch:Touch):Void {} /** Called when a touch start event is fired @param touch The current touch object **/ public function onTouchStart(touch:Touch):Void {} /** Called when a window activate event is fired on the primary window **/ public function onWindowActivate():Void {} /** Called when a window close event is fired on the primary window **/ public function onWindowClose():Void {} /** Called when the primary window is created **/ public function onWindowCreate():Void {} /** Called when a window deactivate event is fired on the primary window **/ public function onWindowDeactivate():Void {} /** Called when a window drop file event is fired on the primary window **/ public function onWindowDropFile(file:String):Void {} /** Called when a window enter event is fired on the primary window **/ public function onWindowEnter():Void {} /** Called when a window expose event is fired on the primary window **/ public function onWindowExpose():Void {} /** Called when a window focus in event is fired on the primary window **/ public function onWindowFocusIn():Void {} /** Called when a window focus out event is fired on the primary window **/ public function onWindowFocusOut():Void {} /** Called when the primary window enters fullscreen **/ public function onWindowFullscreen():Void {} /** Called when a window leave event is fired on the primary window **/ public function onWindowLeave():Void {} /** Called when a window move event is fired on the primary window @param x The x position of the window in desktop coordinates @param y The y position of the window in desktop coordinates **/ public function onWindowMove(x:Float, y:Float):Void {} /** Called when the primary window is minimized **/ public function onWindowMinimize():Void {} /** Called when a window resize event is fired on the primary window @param width The width of the window @param height The height of the window **/ public function onWindowResize(width:Int, height:Int):Void {} /** Called when the primary window is restored from being minimized or fullscreen **/ public function onWindowRestore():Void {} /** Removes a module from the Application @param module A module to remove **/ public function removeModule(module:IModule):Void { if (module != null) { module.__unregisterLimeModule(this); modules.remove(module); } } /** Called when a render event is fired on the primary window @param context The render context ready to be rendered **/ public function render(context:RenderContext):Void {} /** Called when an update event is fired on the primary window @param deltaTime The amount of time in milliseconds that has elapsed since the last update **/ public function update(deltaTime:Int):Void {} @:noCompletion private function __addWindow(window:Window):Void { if (window != null) { __windows.push(window); __windowByID.set(window.id, window); window.onClose.add(__onWindowClose.bind(window), false, -10000); if (__window == null) { __window = window; window.onActivate.add(onWindowActivate); window.onRenderContextLost.add(onRenderContextLost); window.onRenderContextRestored.add(onRenderContextRestored); window.onDeactivate.add(onWindowDeactivate); window.onDropFile.add(onWindowDropFile); window.onEnter.add(onWindowEnter); window.onExpose.add(onWindowExpose); window.onFocusIn.add(onWindowFocusIn); window.onFocusOut.add(onWindowFocusOut); window.onFullscreen.add(onWindowFullscreen); window.onKeyDown.add(onKeyDown); window.onKeyUp.add(onKeyUp); window.onLeave.add(onWindowLeave); window.onMinimize.add(onWindowMinimize); window.onMouseDown.add(onMouseDown); window.onMouseMove.add(onMouseMove); window.onMouseMoveRelative.add(onMouseMoveRelative); window.onMouseUp.add(onMouseUp); window.onMouseWheel.add(onMouseWheel); window.onMove.add(onWindowMove); window.onRender.add(render); window.onResize.add(onWindowResize); window.onRestore.add(onWindowRestore); window.onTextEdit.add(onTextEdit); window.onTextInput.add(onTextInput); onWindowCreate(); } onCreateWindow.dispatch(window); } } @:noCompletion private function __createWindow(attributes:WindowAttributes):Window { var window = new Window(this, attributes); if (window.id == -1) return null; return window; } @:noCompletion private override function __registerLimeModule(application:Application):Void { application.onUpdate.add(update); application.onExit.add(onModuleExit, false, 0); application.onExit.add(__onModuleExit, false, -1000); for (gamepad in Gamepad.devices) { __onGamepadConnect(gamepad); } Gamepad.onConnect.add(__onGamepadConnect); for (joystick in Joystick.devices) { __onJoystickConnect(joystick); } Joystick.onConnect.add(__onJoystickConnect); Touch.onCancel.add(onTouchCancel); Touch.onStart.add(onTouchStart); Touch.onMove.add(onTouchMove); Touch.onEnd.add(onTouchEnd); } @:noCompletion private function __removeWindow(window:Window):Void { if (window != null && __windowByID.exists(window.id)) { if (__window == window) { __window = null; } __windows.remove(window); __windowByID.remove(window.id); window.close(); __checkForAllWindowsClosed(); } } @:noCompletion private function __checkForAllWindowsClosed():Void { // air handles this automatically with NativeApplication.autoExit #if !air if (__windows.length == 0) { #if !lime_doc_gen System.exit(0); #end } #end } @:noCompletion private function __onGamepadConnect(gamepad:Gamepad):Void { onGamepadConnect(gamepad); gamepad.onAxisMove.add(onGamepadAxisMove.bind(gamepad)); gamepad.onButtonDown.add(onGamepadButtonDown.bind(gamepad)); gamepad.onButtonUp.add(onGamepadButtonUp.bind(gamepad)); gamepad.onDisconnect.add(onGamepadDisconnect.bind(gamepad)); } @:noCompletion private function __onJoystickConnect(joystick:Joystick):Void { onJoystickConnect(joystick); joystick.onAxisMove.add(onJoystickAxisMove.bind(joystick)); joystick.onButtonDown.add(onJoystickButtonDown.bind(joystick)); joystick.onButtonUp.add(onJoystickButtonUp.bind(joystick)); joystick.onDisconnect.add(onJoystickDisconnect.bind(joystick)); joystick.onHatMove.add(onJoystickHatMove.bind(joystick)); } @:noCompletion private function __onModuleExit(code:Int):Void { if (onExit.canceled) { return; } __unregisterLimeModule(this); __backend.exit(); if (Application.current == this) { Application.current = null; } } @:noCompletion private function __onWindowClose(window:Window):Void { if (this.window == window) { onWindowClose(); } __removeWindow(window); } @:noCompletion private override function __unregisterLimeModule(application:Application):Void { application.onUpdate.remove(update); application.onExit.remove(__onModuleExit); application.onExit.remove(onModuleExit); Gamepad.onConnect.remove(__onGamepadConnect); Joystick.onConnect.remove(__onJoystickConnect); Touch.onCancel.remove(onTouchCancel); Touch.onStart.remove(onTouchStart); Touch.onMove.remove(onTouchMove); Touch.onEnd.remove(onTouchEnd); } // Get & Set Methods @:noCompletion private inline function get_preloader():Preloader { return __preloader; } @:noCompletion private inline function get_window():Window { return __window; } @:noCompletion private inline function get_windows():Array { return __windows; } @:noCompletion private function get_deviceOrientation():Orientation { return __backend.getDeviceOrientation(); } } #if air @:noCompletion private typedef ApplicationBackend = lime._internal.backend.air.AIRApplication; #elseif flash @:noCompletion private typedef ApplicationBackend = lime._internal.backend.flash.FlashApplication; #elseif (js && html5) @:noCompletion private typedef ApplicationBackend = lime._internal.backend.html5.HTML5Application; #else @:noCompletion private typedef ApplicationBackend = lime._internal.backend.native.NativeApplication; #end ================================================ FILE: src/lime/app/Event.hx ================================================ package lime.app; /** Event is a strictly-typed signals and slots implementation, used for core event dispatching. For example: ```haxe var event = new EventVoid> (); event.add (function (value:Int):Void { trace (value); }); event.dispatch (100); var event = new EventVoid> (); event.add (function () { trace ("callback"); }); event.dispatch (); ``` **/ #if !macro @:genericBuild(lime._internal.macros.EventMacro.build()) #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Event { /** Whether the event was canceled during the previous dispatch **/ public var canceled(default, null):Bool; @:noCompletion @:dox(hide) public var __listeners:Array; @:noCompletion @:dox(hide) public var __repeat:Array; @:noCompletion private var __priorities:Array; /** Creates a new Event instance **/ public function new() { #if !macro canceled = false; __listeners = new Array(); __priorities = new Array(); __repeat = new Array(); #end } /** Adds a new event listener @param listener A callback that matches the signature of the event @param once Whether to receive an event dispatch only once, or each time it is fired @param priority The priority for this listener, a higher priority will be dispatched sooner **/ public function add(listener:T, once:Bool = false, priority:Int = 0):Void { #if !macro for (i in 0...__priorities.length) { if (priority > __priorities[i]) { __listeners.insert(i, cast listener); __priorities.insert(i, priority); __repeat.insert(i, !once); return; } } __listeners.push(cast listener); __priorities.push(priority); __repeat.push(!once); #end } /** Marks the event as canceled, and stops the current event dispatch **/ public function cancel():Void { canceled = true; } /** Dispatches a new event callback to all listeners. The signature for the `dispatch` method depends upon the type of the `Event`. For example, an `Event` of type `Int->Int->Void` will create a `dispatch` method that takes two `Int` arguments, like `dispatch (1, 2);` **/ public var dispatch:Dynamic; // macro public function dispatch (ethis:Expr, args:Array):Void { // // return macro { // // var listeners = $ethis.listeners; // var repeat = $ethis.repeat; // var i = 0; // // while (i < listeners.length) { // // listeners[i] ($a{args}); // // if (!repeat[i]) { // // $ethis.remove (listeners[i]); // // } else { // // i++; // // } // // } // // } // // } /** Checks whether a callback is a listener to this event @param listener A callback that matches the signature of the event @return Whether the callback is a listener **/ public function has(listener:T):Bool { #if !macro for (l in __listeners) { if (Reflect.compareMethods(l, listener)) return true; } #end return false; } /** Removes an event listener @param listener A callback that matches the signature of the event **/ public function remove(listener:T):Void { #if !macro var i = __listeners.length; while (--i >= 0) { if (Reflect.compareMethods(__listeners[i], listener)) { __listeners.splice(i, 1); __priorities.splice(i, 1); __repeat.splice(i, 1); } } #end } /** Removes all event listeners **/ public function removeAll():Void { #if !macro var len = __listeners.length; __listeners.splice(0, len); __priorities.splice(0, len); __repeat.splice(0, len); #end } } ================================================ FILE: src/lime/app/Future.hx ================================================ package lime.app; import lime.system.System; import lime.system.ThreadPool; import lime.system.WorkOutput; import lime.utils.Log; /** `Future` is an implementation of Futures and Promises, with the exception that in addition to "success" and "failure" states (represented as "complete" and "error"), Lime `Future` introduces "progress" feedback as well to increase the value of `Future` values. ```haxe var future = Image.loadFromFile ("image.png"); future.onComplete (function (image) { trace ("Image loaded"); }); future.onProgress (function (loaded, total) { trace ("Loading: " + loaded + ", " + total); }); future.onError (function (error) { trace (error); }); Image.loadFromFile ("image.png").then (function (image) { return Future.withValue (image.width); }).onComplete (function (width) { trace (width); }) ``` `Future` values can be chained together for asynchronous processing of values. If an error occurs earlier in the chain, the error is propagated to all `onError` callbacks. `Future` will call `onComplete` callbacks, even if completion occurred before registering the callback. This resolves race conditions, so even functions that return immediately can return values using `Future`. `Future` values are meant to be immutable, if you wish to update a `Future`, you should create one using a `Promise`, and use the `Promise` interface to influence the error, complete or progress state of a `Future`. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:allow(lime.app.Promise) /*@:generic*/ class Future { /** If the `Future` has finished with an error state, the `error` value **/ public var error(default, null):Dynamic; /** Whether the `Future` finished with a completion state **/ public var isComplete(default, null):Bool; /** Whether the `Future` finished with an error state **/ public var isError(default, null):Bool; /** If the `Future` has finished with a completion state, the completion `value` **/ public var value(default, null):T; @:noCompletion private var __completeListeners:ArrayVoid>; @:noCompletion private var __errorListeners:ArrayVoid>; @:noCompletion private var __progressListeners:ArrayInt->Void>; /** @param work Optional: a function to compute this future's value. @param useThreads Whether to run `work` on a background thread, where supported. If false or if this isn't a system target, it will run immediately on the main thread. **/ public function new(work:Void->T = null, useThreads:Bool = false) { if (work != null) { #if (lime_threads && !html5) if (useThreads) { var promise = new Promise(); promise.future = this; FutureWork.run(work, promise); } else #end { try { value = work(); isComplete = true; } catch (e:Dynamic) { error = e; isError = true; } } } } /** Create a new `Future` instance based on complete and (optionally) error and/or progress `Event` instances **/ public static function ofEvents(onComplete:EventVoid>, onError:EventVoid> = null, onProgress:EventInt->Void> = null):Future { var promise = new Promise(); onComplete.add(promise.complete, true); if (onError != null) onError.add(promise.error, true); if (onProgress != null) onProgress.add(promise.progress, true); return promise.future; } /** Register a listener for when the `Future` completes. If the `Future` has already completed, this is called immediately with the result @param listener A callback method to receive the result value @return The current `Future` **/ public function onComplete(listener:T->Void):Future { if (listener != null) { if (isComplete) { listener(value); } else if (!isError) { if (__completeListeners == null) { __completeListeners = new Array(); } __completeListeners.push(listener); } } return this; } /** Register a listener for when the `Future` ends with an error state. If the `Future` has already ended with an error, this is called immediately with the error value @param listener A callback method to receive the error value @return The current `Future` **/ public function onError(listener:Dynamic->Void):Future { if (listener != null) { if (isError) { listener(error); } else if (!isComplete) { if (__errorListeners == null) { __errorListeners = new Array(); } __errorListeners.push(listener); } } return this; } /** Register a listener for when the `Future` updates progress. If the `Future` is already completed, this will not be called. @param listener A callback method to receive the progress value @return The current `Future` **/ public function onProgress(listener:Int->Int->Void):Future { if (listener != null) { if (__progressListeners == null) { __progressListeners = new Array(); } __progressListeners.push(listener); } return this; } /** Attempts to block on an asynchronous `Future`, returning when it is completed. @param waitTime (Optional) A timeout before this call will stop blocking @return This current `Future` **/ public function ready(waitTime:Int = -1):Future { #if (lime_threads && !html5) if (isComplete || isError) { return this; } else { var time = System.getTimer(); var end = time + waitTime; while (!isComplete && !isError && time <= end && FutureWork.activeJobs > 0) { #if sys Sys.sleep(0.01); #end time = System.getTimer(); } return this; } #else return this; #end } /** Attempts to block on an asynchronous `Future`, returning the completion value when it is finished. @param waitTime (Optional) A timeout before this call will stop blocking @return The completion value, or `null` if the request timed out or blocking is not possible **/ public function result(waitTime:Int = -1):Null { ready(waitTime); if (isComplete) { return value; } else { return null; } } /** Chains two `Future` instances together, passing the result from the first as input for creating/returning a new `Future` instance of a new or the same type **/ public function then(next:T->Future):Future { if (isComplete) { return next(value); } else if (isError) { var future = new Future(); future.isError = true; future.error = error; return future; } else { var promise = new Promise(); onError(promise.error); onProgress(promise.progress); onComplete(function(val) { var future = next(val); future.onError(promise.error); future.onComplete(promise.complete); }); return promise.future; } } /** Creates a `Future` instance which has finished with an error value @param error The error value to set @return A new `Future` instance **/ public static function withError(error:Dynamic):Future { var future = new Future(); future.isError = true; future.error = error; return future; } /** Creates a `Future` instance which has finished with a completion value @param value The completion value to set @return A new `Future` instance **/ public static function withValue(value:T):Future { var future = new Future(); future.isComplete = true; future.value = value; return future; } } #if (lime_threads && !html5) /** The class that handles asynchronous `work` functions passed to `new Future()`. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:dox(hide) class FutureWork { private static var threadPool:ThreadPool; private static var promises:MapDynamic, error:Dynamic->Dynamic}>; public static var minThreads(default, set):Int = 0; public static var maxThreads(default, set):Int = 1; public static var activeJobs(get, never):Int; @:allow(lime.app.Future) private static function run(work:Void->T, promise:Promise):Void { if (threadPool == null) { threadPool = new ThreadPool(minThreads, maxThreads, MULTI_THREADED); threadPool.onComplete.add(threadPool_onComplete); threadPool.onError.add(threadPool_onError); promises = new Map(); } var jobID:Int = threadPool.run(threadPool_doWork, work); promises[jobID] = {complete: promise.complete, error: promise.error}; } // Event Handlers private static function threadPool_doWork(work:Void->Dynamic, output:WorkOutput):Void { try { output.sendComplete(work()); } catch (e:Dynamic) { output.sendError(e); } } private static function threadPool_onComplete(result:Dynamic):Void { var promise = promises[threadPool.activeJob.id]; promises.remove(threadPool.activeJob.id); promise.complete(result); } private static function threadPool_onError(error:Dynamic):Void { var promise = promises[threadPool.activeJob.id]; promises.remove(threadPool.activeJob.id); promise.error(error); } // Getters & Setters @:noCompletion private static inline function set_minThreads(value:Int):Int { if (threadPool != null) { threadPool.minThreads = value; } return minThreads = value; } @:noCompletion private static inline function set_maxThreads(value:Int):Int { if (threadPool != null) { threadPool.maxThreads = value; } return maxThreads = value; } @:noCompletion private static inline function get_activeJobs():Int { return threadPool != null ? threadPool.activeJobs : 0; } } #end ================================================ FILE: src/lime/app/IModule.hx ================================================ package lime.app; interface IModule { @:dox(show) @:noCompletion private function __registerLimeModule(application:Application):Void; @:dox(show) @:noCompletion private function __unregisterLimeModule(application:Application):Void; } ================================================ FILE: src/lime/app/Module.hx ================================================ package lime.app; import lime.ui.Window; import lime.utils.Preloader; /** `Module` instances can be added to a running `Application`, simplifying support for adding new components, such as a renderer, input handler or higher-level framework. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Module implements IModule { /** Exit events are dispatched when the application is exiting **/ public var onExit = new EventVoid>(); /** Creates a new `Module` instance **/ public function new() {} @:noCompletion private function __registerLimeModule(application:Application):Void {} @:noCompletion private function __unregisterLimeModule(application:Application):Void {} } ================================================ FILE: src/lime/app/Promise.hx ================================================ package lime.app; /** `Promise` is an implementation of Futures and Promises, with the exception that in addition to "success" and "failure" states (represented as "complete" and "error"), Lime `Future` introduces "progress" feedback as well to increase the value of `Future` values. While `Future` is meant to be read-only, `Promise` can be used to set the state of a future for recipients of it's `Future` object. For example: ```haxe function examplePromise ():Future { var promise = new Promise (); var progress = 0, total = 10; var timer = new Timer (100); timer.run = function () { promise.progress (progress, total); progress++; if (progress == total) { promise.complete ("Done!"); timer.stop (); } }; return promise.future; } var future = examplePromise (); future.onComplete (function (message) { trace (message); }); future.onProgress (function (loaded, total) { trace ("Progress: " + loaded + ", " + total); }); ``` **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:allow(lime.app.Future) #if (!hl && !js && !macro) @:generic #end class Promise { /** The `Future` associated with this `Promise`. All subsequent calls to set an error, completion or progress state will update the status and notify listeners to this `Future` **/ public var future(default, null):Future; /** Whether the `Promise` (and related `Future`) has finished with a completion state. This will be `false` if the `Promise` has not been resolved with a completion or error state. **/ public var isComplete(get, never):Bool; /** Whether the `Promise` (and related `Future`) has finished with an error state. This will be `false` if the `Promise` has not been resolved with a completion or error state. **/ public var isError(get, never):Bool; #if commonjs private static function __init__() { var p = untyped Promise.prototype; untyped Object.defineProperties(p, { "isComplete": {get: p.get_isComplete}, "isError": {get: p.get_isError} }); } #end /** Create a new `Promise` instance **/ public function new() { future = new Future(); } /** Resolves this `Promise` with a completion state @param data The completion value @return The current `Promise` **/ public function complete(data:T):Promise { if (!future.isError) { future.isComplete = true; future.value = data; if (future.__completeListeners != null) { for (listener in future.__completeListeners) { listener(data); } future.__completeListeners = null; } } return this; } /** Resolves this `Promise` with the complete, error and/or progress state of another `Future` @param future The `Future` to use to resolve this `Promise` @return The current `Promise` **/ public function completeWith(future:Future):Promise { future.onComplete(complete); future.onError(error); future.onProgress(progress); return this; } /** Resolves this `Promise` with an error state @param msg The error value @return The current `Promise` **/ public function error(msg:Dynamic):Promise { if (!future.isComplete) { future.isError = true; future.error = msg; if (future.__errorListeners != null) { for (listener in future.__errorListeners) { listener(msg); } future.__errorListeners = null; } } return this; } /** Sends progress updates to the related `Future` @param progress A progress value @param total A total value. This should be equal or greater to the `progress` value @return The current `Promise` **/ public function progress(progress:Int, total:Int):Promise { if (!future.isError && !future.isComplete) { if (future.__progressListeners != null) { for (listener in future.__progressListeners) { listener(progress, total); } } } return this; } // Get & Set Methods @:noCompletion private inline function get_isComplete():Bool { return future.isComplete; } @:noCompletion private inline function get_isError():Bool { return future.isError; } } ================================================ FILE: src/lime/graphics/CairoRenderContext.hx ================================================ package lime.graphics; #if (!lime_doc_gen || lime_cairo) import lime.graphics.cairo.Cairo; /** The `CairoRenderContext` represents the primary `lime.graphics.Cairo` instance when Cairo is the render context type of the `Window`. You can convert from `lime.graphics.RenderContext` to `CairoRenderContext` directly if desired: ```haxe var cairo:CairoRenderContext = window.context; ``` **/ @:access(lime.graphics.RenderContext) @:forward @:transitive abstract CairoRenderContext(Cairo) from Cairo to Cairo { @:from private static function fromRenderContext(context:RenderContext):CairoRenderContext { return context.cairo; } } #end ================================================ FILE: src/lime/graphics/Canvas2DRenderContext.hx ================================================ package lime.graphics; #if (!lime_doc_gen || lime_canvas) #if (lime_canvas && (lime_doc_gen || !doc_gen)) import js.html.CanvasRenderingContext2D; /** The `Canvas2DRenderContext` represents the primary `js.html.CanvasRenderingContext2D` instance when Canvas is the render context type of the `Window`. You can convert from `lime.graphics.RenderContext` to `Canvas2DRenderContext` directly if desired: ```haxe var ctx:CanvasRenderingContext2D = window.context; ``` **/ @:access(lime.graphics.RenderContext) @:forward() abstract Canvas2DRenderContext(CanvasRenderingContext2D) from CanvasRenderingContext2D to CanvasRenderingContext2D { @:from private static function fromRenderContext(context:RenderContext):Canvas2DRenderContext { return context.canvas2D; } } #else @:forward() @:transitive abstract Canvas2DRenderContext(Dynamic) from Dynamic to Dynamic { @:from private static function fromRenderContext(context:RenderContext):Canvas2DRenderContext { return null; } } #end #end ================================================ FILE: src/lime/graphics/DOMRenderContext.hx ================================================ package lime.graphics; #if (!lime_doc_gen || lime_dom) #if (lime_dom && (lime_doc_gen || !doc_gen)) import js.html.Element; /** The `DOMRenderContext` represents the primary `js.html.Element` instance when DOM is the render context type of the `Window`. You can convert from `lime.graphics.RenderContext` to `DOMRenderContext` directly if desired: ```haxe var dom:DOMRenderContext = window.context; ``` **/ @:access(lime.graphics.RenderContext) @:forward abstract DOMRenderContext(Element) from Element to Element { @:from private static function fromRenderContext(context:RenderContext):DOMRenderContext { return context.dom; } } #else @:forward @:transitive abstract DOMRenderContext(Dynamic) from Dynamic to Dynamic { @:from private static function fromRenderContext(context:RenderContext):DOMRenderContext { return null; } } #end #end ================================================ FILE: src/lime/graphics/FlashRenderContext.hx ================================================ package lime.graphics; #if (!lime_doc_gen || flash) #if (flash && (lime_doc_gen || !doc_gen)) import flash.display.Sprite; /** The `FlashRenderContext` represents the primary `flash.display.Sprite` instance when targeting Flash Player. You can convert from `lime.graphics.RenderContext` to `FlashRenderContext` directly if desired: ```haxe var sprite:FlashRenderContext = window.context; ``` **/ @:access(lime.graphics.RenderContext) @:forward abstract FlashRenderContext(Sprite) from Sprite to Sprite { @:from private static function fromRenderContext(context:RenderContext):FlashRenderContext { return context.flash; } } #else @:forward @:transitive abstract FlashRenderContext(Dynamic) from Dynamic to Dynamic { @:from private static function fromRenderContext(context:RenderContext):FlashRenderContext { return null; } } #end #end ================================================ FILE: src/lime/graphics/Image.hx ================================================ package lime.graphics; import haxe.io.Bytes; import haxe.io.BytesData; import haxe.io.BytesInput; import haxe.io.BytesOutput; import lime._internal.backend.native.NativeCFFI; import lime._internal.format.Base64; import lime._internal.format.BMP; import lime._internal.format.JPEG; import lime._internal.format.PNG; import lime._internal.graphics.ImageCanvasUtil; import lime._internal.graphics.ImageDataUtil; import lime.app.Application; import lime.app.Future; import lime.app.Promise; import lime.math.ARGB; import lime.math.BGRA; import lime.math.ColorMatrix; import lime.math.Rectangle; import lime.math.RGBA; import lime.math.Vector2; import lime.net.HTTPRequest; import lime.system.CFFI; import lime.system.Endian; import lime.system.System; import lime.utils.ArrayBuffer; import lime.utils.BytePointer; import lime.utils.Log; import lime.utils.UInt8Array; #if (js && html5) #if !display import lime._internal.backend.html5.HTML5HTTPRequest; #end import js.Browser; import js.html.CanvasElement; import js.html.Image as JSImage; import js.html.ImageElement; import lime._internal.backend.html5.HTML5Thread; #elseif flash import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.geom.Matrix; import flash.net.URLRequest; import flash.system.LoaderContext; import flash.utils.ByteArray; #end #if format import format.png.Data; import format.png.Reader; import format.png.Tools; import format.png.Writer; import format.tools.Deflate; #if sys import sys.io.File; #end #end /** `Image` is a convenience class for working with bitmap images in Lime. Although `ImageBuffer` holds the actual bitmap data, `Image` includes convenience methods for loading from files, loading from bytes, and performing many pixel operations over an `ImageBuffer` instance. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:autoBuild(lime._internal.macros.AssetsMacro.embedImage()) @:access(lime._internal.backend.native.NativeCFFI) @:allow(lime._internal.graphics.ImageCanvasUtil) @:allow(lime._internal.graphics.ImageDataUtil) @:access(lime.app.Application) @:access(lime.math.ColorMatrix) @:access(lime.math.Rectangle) @:access(lime.math.Vector2) #if hl @:keep #end #if (js && html5 && !display) @:access(lime._internal.backend.html5.HTML5HTTPRequest) #end class Image { /** The `ImageBuffer` store that backs the `Image` **/ public var buffer:ImageBuffer; /** Retrieves `UInt8Array` data from the `ImageBuffer`. If the `ImageBuffer` is not in a data format, it will be converted. **/ public var data(get, set):UInt8Array; /** Whether the `Image` is dirty. This is set to `true` when pixel operations have been performed on the underlying `buffer`, and can be set to `false` again by your own renderer. **/ public var dirty:Bool; /** Get or set the `PixelFormat` for the underlying `ImageBuffer`. This can be used to convert the `ImageBuffer` to a new format. **/ public var format(get, set):PixelFormat; /** The logical height of the `Image`. This can be smaller than the `height` of the underlying `buffer`. **/ public var height:Int; /** The offset X position of the `Image`, from the source `buffer`, when the `Image` is smaller than the full size of the source `buffer` **/ public var offsetX:Int; /** The offset Y position of the `Image`, from the source `buffer`, when the `Image` is smaller than the full size of the source `buffer` **/ public var offsetY:Int; /** Get or set whether the `ImageBuffer` dimensions are both a power-of-two (such as 2, 4, 8, 16, so on). Setting this value may resize the underlying `buffer` **/ public var powerOfTwo(get, set):Bool; /** Get or set whether this `Image` has premultiplied alpha. Setting this value may multiply or unmultiply data if the underlying `ImageBuffer` uses a different format. **/ public var premultiplied(get, set):Bool; /** The offset, width and height of this image as a `Rectangle` **/ public var rect(get, null):Rectangle; /** A higher-level representation of the source `ImageBuffer`. This might be an HTML5 Image, CanvasElement or a Flash BitmapData instance. **/ public var src(get, set):Dynamic; /** Get or set whether the underlying `ImageBuffer` is transparent. **/ public var transparent(get, set):Bool; /** The current `ImageType`, representing what is being used to store the `Image`'s graphics **/ public var type:ImageType; /** The `version` of the `Image` increases each time it is modified, helpful to determining whether a cache is out-of-date. **/ public var version:Int; /** The logical width of the `Image`. This can be smaller than the `width` of the underlying `buffer`. **/ public var width:Int; /** A convenience property, unused internally, which may be helpful for different renderer implementations **/ public var x:Float; /** A convenience property, unused internally, which may be helpful for different renderer implementations **/ public var y:Float; #if commonjs private static function __init__() { var p = untyped Image.prototype; untyped Object.defineProperties(p, { "data": {get: p.get_data, set: p.set_data}, "format": {get: p.get_format, set: p.set_format}, "powerOfTwo": {get: p.get_powerOfTwo, set: p.set_powerOfTwo}, "premultiplied": {get: p.get_premultiplied, set: p.set_premultiplied}, "rect": {get: p.get_rect}, "src": {get: p.get_src, set: p.set_src}, "transparent": {get: p.get_transparent, set: p.set_transparent} }); } #end /** Creates a new `Image` instance. If `buffer` is null, but `width` and `height` are set, a new `ImageBuffer` is allocated matching the `color` requested. @param buffer (Optional) The `ImageBuffer` this `Image` represents @param offsetX (Optional) A logical offset value within the `ImageBuffer` dimensions @param offsetY (Optional) A logical offset value within the `ImageBuffer` dimensions @param width (Optional) A logical width value within the `ImageBuffer` dimensions @param height (Optional) A logical height value within the `ImageBuffer` dimensions @param color (Optional) A fill color to use if the `buffer` property is `null` @param type (Optional) An `ImageType` to use for this `Image` **/ public function new(buffer:ImageBuffer = null, offsetX:Int = 0, offsetY:Int = 0, width:Int = -1, height:Int = -1, color:Null = null, type:ImageType = null) { this.offsetX = offsetX; this.offsetY = offsetY; this.width = width; this.height = height; version = 0; if (type == null) { #if (js && html5) type = CANVAS; #if lime_threads if (HTML5Thread.current().isWorker()) { type = DATA; } #end #elseif flash type = FLASH; #else type = DATA; #end } this.type = type; if (buffer == null) { if (width > 0 && height > 0) { switch (this.type) { case CANVAS: this.buffer = new ImageBuffer(null, width, height); ImageCanvasUtil.createCanvas(this, width, height); if (color != null && color != 0) { fillRect(new Rectangle(0, 0, width, height), color); } case DATA: this.buffer = new ImageBuffer(new UInt8Array(width * height * 4), width, height); if (color != null && color != 0) { fillRect(new Rectangle(0, 0, width, height), color); } case FLASH: #if flash this.buffer = new ImageBuffer(null, width, height); this.buffer.src = new BitmapData(width, height, true, ((color & 0xFF) << 24) | (color >> 8)); #end default: } } } else { __fromImageBuffer(buffer); } } /** Creates a duplicate copy of this `Image` and `ImageBuffer` @return A new `Image` instance **/ public function clone():Image { if (buffer != null) { #if (js && html5) if (type == CANVAS) { ImageCanvasUtil.convertToCanvas(this); } else { ImageCanvasUtil.convertToData(this); } #end var image = new Image(buffer.clone(), offsetX, offsetY, width, height, null, type); image.version = version; return image; } else { return new Image(null, offsetX, offsetY, width, height, null, type); } } /** Applies a color transform to the underlying `ImageBuffer` data @param rect The target rectangle to transform @param colorMatrix A `ColorMatrix` for color offset and/or multiplication **/ public function colorTransform(rect:Rectangle, colorMatrix:ColorMatrix):Void { rect = __clipRect(rect); if (buffer == null || rect == null) return; switch (type) { case CANVAS: ImageCanvasUtil.colorTransform(this, rect, colorMatrix); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end ImageDataUtil.colorTransform(this, rect, colorMatrix); case FLASH: rect.offset(offsetX, offsetY); buffer.__srcBitmapData.colorTransform(rect.__toFlashRectangle(), colorMatrix.__toFlashColorTransform()); default: } } /** Copy a color channel from one `Image` to another. This can also be within the same `Image` instance. @param sourceImage The `Image` to copy from @param sourceRect The source rectangle to copy from in the `sourceImage` @param destPoint The destination point to apply the channel in the current `Image` @param sourceChannel The source color channel to copy the data from @param destChannel The destination color channel to apply the data into **/ public function copyChannel(sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, sourceChannel:ImageChannel, destChannel:ImageChannel):Void { sourceRect = __clipRect(sourceRect); if (buffer == null || sourceRect == null) return; if (destChannel == ALPHA && !transparent) return; if (sourceRect.width <= 0 || sourceRect.height <= 0) return; if (sourceRect.x + sourceRect.width > sourceImage.width) sourceRect.width = sourceImage.width - sourceRect.x; if (sourceRect.y + sourceRect.height > sourceImage.height) sourceRect.height = sourceImage.height - sourceRect.y; switch (type) { case CANVAS: ImageCanvasUtil.copyChannel(this, sourceImage, sourceRect, destPoint, sourceChannel, destChannel); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); ImageCanvasUtil.convertToData(sourceImage); #end ImageDataUtil.copyChannel(this, sourceImage, sourceRect, destPoint, sourceChannel, destChannel); case FLASH: var srcChannel = switch (sourceChannel) { case RED: 1; case GREEN: 2; case BLUE: 4; case ALPHA: 8; } var dstChannel = switch (destChannel) { case RED: 1; case GREEN: 2; case BLUE: 4; case ALPHA: 8; } sourceRect.offset(sourceImage.offsetX, sourceImage.offsetY); destPoint.offset(offsetX, offsetY); buffer.__srcBitmapData.copyChannel(sourceImage.buffer.src, sourceRect.__toFlashRectangle(), destPoint.__toFlashPoint(), srcChannel, dstChannel); default: } } /** Copies pixels from one `Image` to another. The source `Image` can also be this `Image` @param sourceImage The source `Image` to copy from @param sourceRect The source rectangle to use when copying @param destPoint The destination point to use when copying @param alphaImage (Optional) A different `Image` to use as the alpha channel while copying @param alphaPoint (Optional) A point in the alpha image to use when copying @param mergeAlpha (Optional) Whether to blend the source and destination alpha (`true`), or to replace the destination alpha (`false`) **/ public function copyPixels(sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, alphaImage:Image = null, alphaPoint:Vector2 = null, mergeAlpha:Bool = false):Void { if (buffer == null || sourceImage == null) return; if (sourceRect.width <= 0 || sourceRect.height <= 0) return; if (width <= 0 || height <= 0) return; if (sourceRect.x + sourceRect.width > sourceImage.width) sourceRect.width = sourceImage.width - sourceRect.x; if (sourceRect.y + sourceRect.height > sourceImage.height) sourceRect.height = sourceImage.height - sourceRect.y; if (sourceRect.x < 0) { sourceRect.width += sourceRect.x; sourceRect.x = 0; } if (sourceRect.y < 0) { sourceRect.height += sourceRect.y; sourceRect.y = 0; } if (destPoint.x + sourceRect.width > width) sourceRect.width = width - destPoint.x; if (destPoint.y + sourceRect.height > height) sourceRect.height = height - destPoint.y; if (destPoint.x < 0) { sourceRect.width += destPoint.x; sourceRect.x -= destPoint.x; destPoint.x = 0; } if (destPoint.y < 0) { sourceRect.height += destPoint.y; sourceRect.y -= destPoint.y; destPoint.y = 0; } if (sourceImage == this && destPoint.x < sourceRect.right && destPoint.y < sourceRect.bottom) { // TODO: Optimize further? sourceImage = clone(); } if (alphaImage == sourceImage && (alphaPoint == null || (alphaPoint.x == 0 && alphaPoint.y == 0))) { alphaImage = null; alphaPoint = null; } switch (type) { case CANVAS: if (alphaImage != null) { ImageCanvasUtil.convertToData(this); ImageCanvasUtil.convertToData(sourceImage); if (alphaImage != null) ImageCanvasUtil.convertToData(alphaImage); ImageDataUtil.copyPixels(this, sourceImage, sourceRect, destPoint, alphaImage, alphaPoint, mergeAlpha); } else { ImageCanvasUtil.convertToCanvas(this); ImageCanvasUtil.convertToCanvas(sourceImage); ImageCanvasUtil.copyPixels(this, sourceImage, sourceRect, destPoint, alphaImage, alphaPoint, mergeAlpha); } case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); ImageCanvasUtil.convertToData(sourceImage); if (alphaImage != null) ImageCanvasUtil.convertToData(alphaImage); #end ImageDataUtil.copyPixels(this, sourceImage, sourceRect, destPoint, alphaImage, alphaPoint, mergeAlpha); case FLASH: sourceRect.offset(sourceImage.offsetX, sourceImage.offsetY); destPoint.offset(offsetX, offsetY); if (alphaImage != null && alphaPoint != null) { alphaPoint.offset(alphaImage.offsetX, alphaImage.offsetY); } buffer.__srcBitmapData.copyPixels(sourceImage.buffer.__srcBitmapData, sourceRect.__toFlashRectangle(), destPoint.__toFlashPoint(), alphaImage != null ? alphaImage.buffer.src : null, alphaPoint != null ? alphaPoint.__toFlashPoint() : null, mergeAlpha); default: } } /** Encodes this `Image` into an image file format, such as PNG or JPEG. @param format (Optional) An `ImageFileFormat` to encode into (default is `PNG`) @param quality (Optional) A quality value to use when encoding as JPEG (from 0 to 100) @return `Bytes` for the encoded `Image`, or `null` if encoding was not successful **/ public function encode(format:ImageFileFormat = null, quality:Int = 90):Bytes { switch (format) { case null, ImageFileFormat.PNG: return PNG.encode(this); case ImageFileFormat.JPEG: return JPEG.encode(this, quality); case ImageFileFormat.BMP: return BMP.encode(this); default: } return null; } /** Fill a rectangle in the `Image` with a solid color @param rect A destination rectangle in this `Image` to fill @param color The color to use when filling this `Image` @param format (Optional) The `PixelFormat` that `color` is encoded in (default is `RGBA`) **/ public function fillRect(rect:Rectangle, color:Int, format:PixelFormat = null):Void { rect = __clipRect(rect); if (buffer == null || rect == null) return; switch (type) { case CANVAS: ImageCanvasUtil.fillRect(this, rect, color, format); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end if (buffer.data.length == 0) return; ImageDataUtil.fillRect(this, rect, color, format); case FLASH: rect.offset(offsetX, offsetY); var argb:ARGB = switch (format) { case ARGB32: color; case BGRA32: (color : BGRA); default: (color : RGBA); } buffer.__srcBitmapData.fillRect(rect.__toFlashRectangle(), argb); default: } } /** Applies a flood fill to this `Image`, starting with the point specified. A flood fill behaves similarly to the "paint can" tool in many image editors, the fill will apply the chosen color to neighboring pixels of the same color. @param x The target x coordinate within the `Image` to use with the fill @param y The target y coordinate within the `Image` to use with the fill @param color The color to use when performing the fill @param format (Optional) The `PixelFormat` that `color` is encoded in (default is `RGBA`) **/ public function floodFill(x:Int, y:Int, color:Int, format:PixelFormat = null):Void { if (buffer == null) return; switch (type) { case CANVAS: ImageCanvasUtil.floodFill(this, x, y, color, format); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end ImageDataUtil.floodFill(this, x, y, color, format); case FLASH: var argb:ARGB = switch (format) { case ARGB32: color; case BGRA32: (color : BGRA); default: (color : RGBA); } buffer.__srcBitmapData.floodFill(x + offsetX, y + offsetY, argb); default: } } /** Converts a Base64-encoded `String` into an `Image`, or returns `null` if this is not possible @param base64 A Base64-encoded `String` @param type A mime-type to describe the image data (such as "image/png") @return A new `Image`, or `null` if conversion was not possible **/ public static function fromBase64(base64:String, type:String):Image { if (base64 == null) return null; var image = new Image(); image.__fromBase64(base64, type); return image; } #if (!lime_doc_gen || flash) /** Creates a new `Image` from a Flash `BitmapData` instance @param bitmapData A source `bitmapData` to use @return A new `Image` instance **/ public static function fromBitmapData(bitmapData:#if flash BitmapData #else Dynamic #end):Image { if (bitmapData == null) return null; #if flash var buffer = new ImageBuffer(null, bitmapData.width, bitmapData.height); buffer.__srcBitmapData = bitmapData; buffer.transparent = bitmapData.transparent; return new Image(buffer); #else return bitmapData.image; #end } #end /** Converts a `Bytes` object to an `Image` instance Some platforms (such as Flash and HTML5) cannot convert `Bytes` to an `Image` synchronously, and may not work properly. `Image.loadFromBytes` works asynchronously, and should work consistently on all platforms. @param bytes A `Bytes` holding encoded image data @return A new `Image` instance **/ public static function fromBytes(bytes:Bytes):Image { if (bytes == null) return null; var image = new Image(); if (image.__fromBytes(bytes)) { return image; } else { return null; } } #if (!lime_doc_gen || lime_canvas) /** Converts an `js.html.CanvasElement` instance to an `Image` @param canvas A `CanvasElement` @return A new `Image` instance **/ public static function fromCanvas(canvas:#if (js && html5) CanvasElement #else Dynamic #end):Image { if (canvas == null) return null; var buffer = new ImageBuffer(null, canvas.width, canvas.height); buffer.src = canvas; var image = new Image(buffer); image.type = CANVAS; return image; } #end /** Loads an `Image` from a path synchronously. Some platforms, such as Flash and HTML5, cannot load images synchronously. `Image.loadFromFile` works asynchronously, and should behave consistently on all platforms. @param path The source file path or URL of an encoded image file @return A new `Image` instance **/ public static function fromFile(path:String):Image { if (path == null) return null; var image = new Image(); if (image.__fromFile(path)) { return image; } else { return null; } } #if (!lime_doc_gen || (js && html5)) /** Converts a `js.html.Image` instance to an `Image` @param image An `ImageElement` instance @return A new `Image` instance **/ public static function fromImageElement(image:#if (js && html5) ImageElement #else Dynamic #end):Image { if (image == null) return null; var buffer = new ImageBuffer(null, image.width, image.height); buffer.src = image; var _image = new Image(buffer); _image.type = CANVAS; return _image; } #end /** Finds a region in the `Image` that includes pixels all of a certain color (when `findColor` is `true`) or excludes a certain color (`findColor` is `false`) @param mask A hexadecimal mask to use when comparing colors. You can use this to compare all of a color, or only certain color channels @param color The color value to use in comparisons @param findColor (Optional) Whether to find a region that does match the color (`true`) or excludes it (`false`) @param format (Optional) The `PixelFormat` that the `color` and `mask` are encoded in (default is `RGBA`) @return The matching bounds `Rectangle`, or `null` if no matching region is found **/ public function getColorBoundsRect(mask:Int, color:Int, findColor:Bool = true, format:PixelFormat = null):Rectangle { if (buffer == null) return null; switch (type) { case CANVAS: #if (js && html5) ImageCanvasUtil.convertToData(this); #end return ImageDataUtil.getColorBoundsRect(this, mask, color, findColor, format); case DATA: return ImageDataUtil.getColorBoundsRect(this, mask, color, findColor, format); case FLASH: var rect = buffer.__srcBitmapData.getColorBoundsRect(mask, color, findColor); return new Rectangle(rect.x, rect.y, rect.width, rect.height); default: return null; } } /** Gets a 24-bit pixel from the `Image` (red, green and blue, but no alpha) @param x The `x` location to fetch @param y The `y` location to fetch @param format (Optional) The `PixelFormat` to encode the return value in (default is `RGBA`) @return The specified pixel, or `0` if it is out-of-bounds **/ public function getPixel(x:Int, y:Int, format:PixelFormat = null):Int { if (buffer == null || x < 0 || y < 0 || x >= width || y >= height) return 0; switch (type) { case CANVAS: return ImageCanvasUtil.getPixel(this, x, y, format); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end return ImageDataUtil.getPixel(this, x, y, format); case FLASH: var color:ARGB = buffer.__srcBitmapData.getPixel(x + offsetX, y + offsetY); switch (format) { case ARGB32: return color; case BGRA32: var bgra:BGRA = color; return bgra; default: var rgba:RGBA = color; return rgba; } default: return 0; } } /** Gets a 32-bit pixel from the `Image`, including alpha @param x The `x` location to fetch @param y The `y` location to fetch @param format (Optional) The `PixelFormat` to encode the return value in (default is `RGBA`) @return The specified pixel, or `0` if it is out-of-bounds **/ public function getPixel32(x:Int, y:Int, format:PixelFormat = null):Int { if (buffer == null || x < 0 || y < 0 || x >= width || y >= height) return 0; switch (type) { case CANVAS: return ImageCanvasUtil.getPixel32(this, x, y, format); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end return ImageDataUtil.getPixel32(this, x, y, format); case FLASH: var color:ARGB = buffer.__srcBitmapData.getPixel32(x + offsetX, y + offsetY); switch (format) { case ARGB32: return color; case BGRA32: var bgra:BGRA = color; return bgra; default: var rgba:RGBA = color; return rgba; } default: return 0; } } /** Gets a region of pixels from the `Image`, as `Bytes` @param rect The source `Rectangle` to read from @param format (Optional) The `PixelFormat` to use when writing to the `Bytes` object (default is `RGBA`) @return A `Bytes` object representing the region, or `null` if it is not possible to read **/ public function getPixels(rect:Rectangle, format:PixelFormat = null):Bytes { if (buffer == null) return null; switch (type) { case CANVAS: return ImageCanvasUtil.getPixels(this, rect, format); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end return ImageDataUtil.getPixels(this, rect, format); case FLASH: #if flash rect.offset(offsetX, offsetY); var byteArray:ByteArray = buffer.__srcBitmapData.getPixels(rect.__toFlashRectangle()); switch (format) { case ARGB32: // do nothing case BGRA32: var color:BGRA; var length = Std.int(byteArray.length / 4); for (i in 0...length) { color = (byteArray.readUnsignedInt() : ARGB); byteArray.position -= 4; byteArray.writeUnsignedInt(color); } byteArray.position = 0; default: var color:RGBA; var length = Std.int(byteArray.length / 4); for (i in 0...length) { color = (byteArray.readUnsignedInt() : ARGB); byteArray.position -= 4; byteArray.writeUnsignedInt(color); } byteArray.position = 0; } return Bytes.ofData(byteArray); #else return null; #end default: return null; } } /** Creates a new `Image` instance from a Base64-encoded `String`, asynchronously @param base64 A Base64-encoded string representing encoded image data @param type The mime type of the encoded data (such as "image/png") @return A `Future` to return a new `Image` instance **/ public static function loadFromBase64(base64:String, type:String):Future { if (base64 == null || type == null) return Future.withValue(null); #if (js && html5 && !display) return HTML5HTTPRequest.loadImage("data:" + type + ";base64," + base64); #else if (base64 != null) { return loadFromBytes(Base64.decode(base64)); } else { return cast Future.withError(""); } #end } /** Creates a new `Image` instance from image-encoded `Bytes`, loaded asynchronously @param bytes A `Bytes` instance @return A `Future` to return a new `Image` instance **/ public static function loadFromBytes(bytes:Bytes):Future { if (bytes == null) return Future.withValue(null); #if (js && html5) var type = ""; if (__isPNG(bytes)) { type = "image/png"; } else if (__isJPG(bytes)) { type = "image/jpeg"; } else if (__isGIF(bytes)) { type = "image/gif"; } else if (__isWebP(bytes)) { type = "image/webp"; } else { // throw "Image tried to read PNG/JPG Bytes, but found an invalid header."; return Future.withValue(null); } #if !display return HTML5HTTPRequest.loadImageFromBytes(bytes, type); #else return loadFromBase64(Base64.encode(bytes), type); #end #elseif flash var promise = new Promise(); var loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(event) { promise.complete(Image.fromBitmapData(cast(loader.content, Bitmap).bitmapData)); }); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, function(event) { promise.progress(Std.int(event.bytesLoaded), Std.int(event.bytesTotal)); }); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function(event) { promise.error(event.errorID); }); loader.loadBytes(bytes.getData()); return promise.future; #else return new Future(fromBytes.bind(bytes), true); #end } /** Creates a new `Image` instance from a file path or URL, loaded asynchronously @param path A file path or URL containing an encoded image @return A `Future` to return a new `Image` instance **/ public static function loadFromFile(path:String):Future { if (path == null) return Future.withValue(null); #if (js && html5 && !display) return HTML5HTTPRequest.loadImage(path); #elseif flash var promise = new Promise(); var loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(event) { promise.complete(Image.fromBitmapData(cast(loader.content, Bitmap).bitmapData)); }); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, function(event) { promise.progress(Std.int(event.bytesLoaded), Std.int(event.bytesTotal)); }); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function(event) { promise.error(event.errorID); }); loader.load(new URLRequest(path), new LoaderContext(true)); return promise.future; #else var request = new HTTPRequest(); return request.load(path).then(function(image) { if (image != null) { return Future.withValue(image); } else { return cast Future.withError(""); } }); #end } /** Blits a second `Image` onto this one, using optional color multipliers @param sourceImage An `Image` instance to copy from @param sourceRect The source rectangle to use when copying @param destPoint The destination point in this `Image` to copy into @param redMultiplier A red multiplier to use when blitting @param greenMultiplier A green multiplier to use when blitting @param blueMultiplier A blue multiplier to use when blitting @param alphaMultiplier An alpha multiplier to use when blitting **/ public function merge(sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, redMultiplier:Int, greenMultiplier:Int, blueMultiplier:Int, alphaMultiplier:Int):Void { if (buffer == null || sourceImage == null) return; switch (type) { case CANVAS: ImageCanvasUtil.convertToCanvas(this); ImageCanvasUtil.merge(this, sourceImage, sourceRect, destPoint, redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); ImageCanvasUtil.convertToData(sourceImage); #end ImageDataUtil.merge(this, sourceImage, sourceRect, destPoint, redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier); case FLASH: sourceRect.offset(offsetX, offsetY); buffer.__srcBitmapData.merge(sourceImage.buffer.__srcBitmapData, sourceRect.__toFlashRectangle(), destPoint.__toFlashPoint(), redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier); default: return; } } /** Resizes the current `Image`, reallocating the `ImageBuffer` to a new size. The resize algorithm for most platforms is bilinear. @param newWidth A new width for the `Image` @param newHeight A new height for the `Image` **/ public function resize(newWidth:Int, newHeight:Int):Void { switch (type) { case CANVAS: ImageCanvasUtil.resize(this, newWidth, newHeight); case DATA: ImageDataUtil.resize(this, newWidth, newHeight); case FLASH: #if flash var matrix = new Matrix(); matrix.scale(newWidth / buffer.__srcBitmapData.width, newHeight / buffer.__srcBitmapData.height); var data = new BitmapData(newWidth, newHeight, true, 0x00FFFFFF); data.draw(buffer.__srcBitmapData, matrix, null, null, null, true); buffer.__srcBitmapData = data; #end default: } buffer.width = newWidth; buffer.height = newHeight; offsetX = 0; offsetY = 0; width = newWidth; height = newHeight; } /** Scrolls the content of this `Image`. Pixels on the edges of the scroll will remain repeated, while others within the scroll area will be shifted @param x The amount of horizontal scroll to apply @param y The amount of vertical scroll to apply **/ public function scroll(x:Int, y:Int):Void { if (buffer == null) return; switch (type) { case CANVAS: ImageCanvasUtil.scroll(this, x, y); case DATA: copyPixels(this, rect, new Vector2(x, y)); case FLASH: buffer.__srcBitmapData.scroll(x + offsetX, y + offsetX); default: } } /** Sets a pixel in the current `Image` in 24-bit color format (red, green, blue, no alpha) @param x The x coordinate of the pixel @param y The y coordinate of the pixel @param color The color to use @param format (Optional) The `PixelFormat` that `color` is encoded in (default is `RGBA`) **/ public function setPixel(x:Int, y:Int, color:Int, format:PixelFormat = null):Void { if (buffer == null || x < 0 || y < 0 || x >= width || y >= height) return; switch (type) { case CANVAS: ImageCanvasUtil.setPixel(this, x, y, color, format); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end ImageDataUtil.setPixel(this, x, y, color, format); case FLASH: var argb:ARGB = switch (format) { case ARGB32: color; case BGRA32: (color : BGRA); default: (color : RGBA); } buffer.__srcBitmapData.setPixel(x + offsetX, y + offsetX, argb); default: } } /** Sets a pixel in the current `Image` in 32-bit color format (includes alpha) @param x The x coordinate of the pixel @param y The y coordinate of the pixel @param color The color to use @param format (Optional) The `PixelFormat` that `color` is encoded in (default is `RGBA`) **/ public function setPixel32(x:Int, y:Int, color:Int, format:PixelFormat = null):Void { if (buffer == null || x < 0 || y < 0 || x >= width || y >= height) return; switch (type) { case CANVAS: ImageCanvasUtil.setPixel32(this, x, y, color, format); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end ImageDataUtil.setPixel32(this, x, y, color, format); case FLASH: var argb:ARGB = switch (format) { case ARGB32: color; case BGRA32: (color : BGRA); default: (color : RGBA); } buffer.__srcBitmapData.setPixel32(x + offsetX, y + offsetY, argb); default: } } /** Sets a region of pixels at once using a `BytePointer` @param rect The region of pixels in this `Image` to replace with the incoming bytes @param bytePointer A `BytePointer` object referencing the `Bytes` and position to read from @param format (Optional) The `PixelFormat` that the pixels are encoded in (default is `RGBA`) @param endian (Optional) The endianness of the incoming bytes (default is the system endianness) **/ public function setPixels(rect:Rectangle, bytePointer:BytePointer, format:PixelFormat = null, endian:Endian = null):Void { rect = __clipRect(rect); if (buffer == null || rect == null) return; if (endian == null) endian = BIG_ENDIAN; switch (type) { case CANVAS: ImageCanvasUtil.setPixels(this, rect, bytePointer, format, endian); case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end ImageDataUtil.setPixels(this, rect, bytePointer, format, endian); case FLASH: #if flash rect.offset(offsetX, offsetY); var byteArray = new ByteArray(); switch (format) { case ARGB32: // do nothing case BGRA32: var srcData:ByteArray = bytePointer.bytes.getData(); byteArray = new ByteArray(); byteArray.position = bytePointer.offset; #if flash byteArray.length = srcData.length; #end var color:BGRA; var length = Std.int(byteArray.length / 4); for (i in 0...length) { color = srcData.readUnsignedInt(); byteArray.writeUnsignedInt(cast(color, ARGB)); } srcData.position = 0; byteArray.position = 0; default: var srcData = bytePointer.bytes.getData(); byteArray = new ByteArray(); byteArray.position = bytePointer.offset; #if flash byteArray.length = srcData.length; #end var color:RGBA; var length = Std.int(byteArray.length / 4); for (i in 0...length) { color = srcData.readUnsignedInt(); byteArray.writeUnsignedInt(cast(color, ARGB)); } srcData.position = 0; byteArray.position = 0; } buffer.__srcBitmapData.setPixels(rect.__toFlashRectangle(), byteArray); #end default: } } /** Tests pixel values in an image against a specified threshold and sets pixels that pass the test to new color values. Using the `threshold()` method, you can isolate and replace color ranges in an image and perform other logical operations on image pixels. The `threshold()` method's test logic is as follows: 1. If `((pixelValue & mask) operation(threshold & mask))`, then set the pixel to `color`; 2. Otherwise, if `copySource == true`, then set the pixel to corresponding pixel value from `sourceBitmap`. The `operation` parameter specifies the comparison operator to use for the threshold test. For example, by using "==" as the `operation` parameter, you can isolate a specific color value in an image. Or by using `{operation: "<", mask: 0xFF000000, threshold: 0x7F000000, color: 0x00000000}`, you can set all destination pixels to be fully transparent when the source image pixel's alpha is less than 0x7F. You can use this technique for animated transitions and other effects. @param sourceImage The input bitmap image to use. The source image can be a different `Image` object or it can refer to the current `Image` instance. @param sourceRect A rectangle that defines the area of the source image to use as input. @param destPoint The point within the destination image (the current `Image` instance) that corresponds to the upper-left corner of the source rectangle. @param operation One of the following comparison operators, passed as a `String`: "<", "<=", ">", ">=", "==", "!=" @param threshold The value that each pixel is tested against to see if it meets or exceeds the threshhold. @param color The color value that a pixel is set to if the threshold test succeeds. The default value is 0x00000000. @param mask The mask to use to isolate a color component. @param copySource If the value is `true`, pixel values from the source image are copied to the destination when the threshold test fails. If the value is `false`, the source image is not copied when the threshold test fails. @return The number of pixels that were changed. **/ public function threshold(sourceImage:Image, sourceRect:Rectangle, destPoint:Vector2, operation:String, threshold:Int, color:Int = 0x00000000, mask:Int = 0xFFFFFFFF, copySource:Bool = false, format:PixelFormat = null):Int { if (buffer == null || sourceImage == null || sourceRect == null) return 0; switch (type) { case CANVAS, DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); ImageCanvasUtil.convertToData(sourceImage); #end return ImageDataUtil.threshold(this, sourceImage, sourceRect, destPoint, operation, threshold, color, mask, copySource, format); case FLASH: var _color:ARGB = switch (format) { case ARGB32: color; case BGRA32: (color : BGRA); default: (color : RGBA); } var _mask:ARGB = switch (format) { case ARGB32: mask; case BGRA32: (mask : BGRA); default: (mask : RGBA); } sourceRect.offset(sourceImage.offsetX, sourceImage.offsetY); destPoint.offset(offsetX, offsetY); return buffer.__srcBitmapData.threshold(sourceImage.buffer.src, sourceRect.__toFlashRectangle(), destPoint.__toFlashPoint(), operation, threshold, _color, _mask, copySource); default: } return 0; } @:noCompletion private function __clipRect(r:Rectangle):Rectangle { if (r == null) return null; if (r.x < 0) { r.width -= -r.x; r.x = 0; if (r.x + r.width <= 0) return null; } if (r.y < 0) { r.height -= -r.y; r.y = 0; if (r.y + r.height <= 0) return null; } if (r.x + r.width >= width) { r.width -= r.x + r.width - width; if (r.width <= 0) return null; } if (r.y + r.height >= height) { r.height -= r.y + r.height - height; if (r.height <= 0) return null; } return r; } @:noCompletion private function __fromBase64(base64:String, type:String, onload:Image->Void = null):Void { #if (js && html5) var image:JSImage = untyped #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); var image_onLoaded = function(event) { buffer = new ImageBuffer(null, image.width, image.height); buffer.__srcImage = cast image; offsetX = 0; offsetY = 0; width = buffer.width; height = buffer.height; if (onload != null) { onload(this); } } image.addEventListener("load", image_onLoaded, false); image.src = "data:" + type + ";base64," + base64; #else if (base64 != null) { __fromBytes(Base64.decode(base64)); } #end } @:noCompletion private function __fromBytes(bytes:Bytes, onload:Image->Void = null):Bool { #if (js && html5) var type = ""; if (__isPNG(bytes)) { type = "image/png"; } else if (__isJPG(bytes)) { type = "image/jpeg"; } else if (__isGIF(bytes)) { type = "image/gif"; } else { // throw "Image tried to read PNG/JPG Bytes, but found an invalid header."; return false; } __fromBase64(Base64.encode(bytes), type, onload); return true; #elseif (lime_cffi && !macro) if (bytes == null || bytes.length == 0) { return false; } var imageBuffer:ImageBuffer = null; #if !cs imageBuffer = NativeCFFI.lime_image_load_bytes(bytes, new ImageBuffer(new UInt8Array(Bytes.alloc(0)))); #else var data = NativeCFFI.lime_image_load_bytes(bytes, null); if (data != null) { imageBuffer = new ImageBuffer(new UInt8Array(@:privateAccess new Bytes(data.data.buffer.length, data.data.buffer.b)), data.width, data.height, data.bitsPerPixel); } #end if (imageBuffer != null) { __fromImageBuffer(imageBuffer); if (onload != null) { onload(this); } return true; } #else Log.warn("Image.fromBytes not supported on this target"); #end return false; } @:noCompletion private function __fromFile(path:String, onload:Image->Void = null, onerror:Void->Void = null):Bool { #if (js && html5) var image:JSImage = untyped #if haxe4 js.Syntax.code #else __js__ #end ('new window.Image ()'); #if !display if (!HTML5HTTPRequest.__isSameOrigin(path)) { image.crossOrigin = "Anonymous"; } #end image.onload = function(_) { buffer = new ImageBuffer(null, image.width, image.height); buffer.__srcImage = cast image; width = image.width; height = image.height; if (onload != null) { onload(this); } } image.onerror = function(_) { if (onerror != null) { onerror(); } } image.src = path; // Another IE9 bug: loading 20+ images fails unless this line is added. // (issue #1019768) if (image.complete) {} return true; #elseif (lime_cffi || java) var buffer:ImageBuffer = null; #if (!sys || disable_cffi || java || macro) if (false) {} #else if (CFFI.enabled) { #if !cs buffer = NativeCFFI.lime_image_load_file(path, new ImageBuffer(new UInt8Array(Bytes.alloc(0)))); #else var data = NativeCFFI.lime_image_load_file(path, null); if (data != null) { buffer = new ImageBuffer(new UInt8Array(@:privateAccess new Bytes(data.data.buffer.length, data.data.buffer.b)), data.width, data.height, data.bitsPerPixel); } #end } #end #if (sys && format) else { try { var bytes = File.getBytes(path); var input = new BytesInput(bytes, 0, bytes.length); var png = new Reader(input).read(); var data = Tools.extract32(png); var header = Tools.getHeader(png); var data = new UInt8Array(Bytes.ofData(data.getData())); var length = header.width * header.height; for (i in 0...length) { var b = data[i * 4]; var g = data[i * 4 + 1]; var r = data[i * 4 + 2]; var a = data[i * 4 + 3]; data[i * 4] = r; data[i * 4 + 1] = g; data[i * 4 + 2] = b; data[i * 4 + 3] = a; } buffer = new ImageBuffer(data, header.width, header.height); } catch (e:Dynamic) {} } #end if (buffer != null) { __fromImageBuffer(buffer); if (onload != null) { onload(this); } return true; } #else Log.warn("Image.fromFile not supported on this target"); #end return false; } @:noCompletion private function __fromImageBuffer(buffer:ImageBuffer):Void { this.buffer = buffer; if (buffer != null) { if (width == -1) { this.width = buffer.width; } if (height == -1) { this.height = buffer.height; } } } private static function __isGIF(bytes:Bytes):Bool { if (bytes == null || bytes.length < 6) return false; var header = bytes.getString(0, 6); return (header == "GIF87a" || header == "GIF89a"); } private static function __isJPG(bytes:Bytes):Bool { if (bytes == null || bytes.length < 4) return false; return bytes.get(0) == 0xFF && bytes.get(1) == 0xD8 && bytes.get(bytes.length - 2) == 0xFF && bytes.get(bytes.length - 1) == 0xD9; } private static function __isPNG(bytes:Bytes):Bool { if (bytes == null || bytes.length < 8) return false; return (bytes.get(0) == 0x89 && bytes.get(1) == "P".code && bytes.get(2) == "N".code && bytes.get(3) == "G".code && bytes.get(4) == "\r".code && bytes.get(5) == "\n".code && bytes.get(6) == 0x1A && bytes.get(7) == "\n".code); } private static function __isWebP(bytes:Bytes):Bool { if (bytes == null || bytes.length < 16) return false; return (bytes.getString(0, 4) == "RIFF" && bytes.getString(8, 4) == "WEBP"); } // Get & Set Methods @:noCompletion private function get_data():UInt8Array { if (buffer.data == null && buffer.width > 0 && buffer.height > 0) { #if (js && html5) ImageCanvasUtil.convertToData(this); #elseif flash var pixels = buffer.__srcBitmapData.getPixels(buffer.__srcBitmapData.rect); buffer.data = new UInt8Array(Bytes.ofData(pixels)); #end } return buffer.data; } @:noCompletion private function set_data(value:UInt8Array):UInt8Array { return buffer.data = value; } @:noCompletion private function get_format():PixelFormat { return buffer.format; } @:noCompletion private function set_format(value:PixelFormat):PixelFormat { if (buffer.format != value) { switch (type) { case DATA: ImageDataUtil.setFormat(this, value); default: } } return buffer.format = value; } @:noCompletion private function get_powerOfTwo():Bool { return ((buffer.width != 0) && ((buffer.width & (~buffer.width + 1)) == buffer.width)) && ((buffer.height != 0) && ((buffer.height & (~buffer.height + 1)) == buffer.height)); } @:noCompletion private function set_powerOfTwo(value:Bool):Bool { if (value != powerOfTwo) { var newWidth = 1; var newHeight = 1; while (newWidth < buffer.width) { newWidth <<= 1; } while (newHeight < buffer.height) { newHeight <<= 1; } if (newWidth == buffer.width && newHeight == buffer.height) { return value; } switch (type) { case CANVAS: #if (js && html5) ImageCanvasUtil.convertToData(this); #end ImageDataUtil.resizeBuffer(this, newWidth, newHeight); case DATA: ImageDataUtil.resizeBuffer(this, newWidth, newHeight); case FLASH: #if flash var bitmapData = new BitmapData(newWidth, newHeight, true, 0x000000); bitmapData.draw(buffer.src, null, null, null, true); buffer.src = bitmapData; buffer.width = newWidth; buffer.height = newHeight; #end default: } } return value; } @:noCompletion private function get_premultiplied():Bool { return buffer.premultiplied; } @:noCompletion private function set_premultiplied(value:Bool):Bool { if (value && !buffer.premultiplied) { switch (type) { case CANVAS, DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end ImageDataUtil.multiplyAlpha(this); default: // TODO } } else if (!value && buffer.premultiplied) { switch (type) { case DATA: #if (js && html5) ImageCanvasUtil.convertToData(this); #end ImageDataUtil.unmultiplyAlpha(this); default: // TODO } } return value; } @:noCompletion private function get_rect():Rectangle { return new Rectangle(0, 0, width, height); } @:noCompletion private function get_src():Dynamic { #if (js && html5) if (buffer.__srcCanvas == null && (buffer.data != null || type == DATA)) { ImageCanvasUtil.convertToCanvas(this); } #end return buffer.src; } @:noCompletion private function set_src(value:Dynamic):Dynamic { return buffer.src = value; } @:noCompletion private function get_transparent():Bool { if (buffer == null) return false; return buffer.transparent; } @:noCompletion private function set_transparent(value:Bool):Bool { // TODO, modify data to set transparency if (buffer == null) return false; return buffer.transparent = value; } } ================================================ FILE: src/lime/graphics/ImageBuffer.hx ================================================ package lime.graphics; import haxe.io.Bytes; import lime.graphics.cairo.CairoSurface; import lime.utils.UInt8Array; #if (js && html5) import lime._internal.graphics.ImageCanvasUtil; import js.html.CanvasElement; import js.html.CanvasRenderingContext2D; import js.html.Image as HTMLImage; import js.html.ImageData; import js.Browser; #if haxe4 import js.lib.Uint8ClampedArray; #else import js.html.Uint8ClampedArray; #end #elseif flash import flash.display.BitmapData; #end /** `ImageBuffer` is a simple object for storing image data. For higher-level operations, use the `Image` class. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end #if hl @:keep #end @:allow(lime.graphics.Image) class ImageBuffer { /** The number of bits per pixel in this image data **/ public var bitsPerPixel:Int; /** The data for this image, represented as a `UInt8Array` **/ public var data:UInt8Array; /** The `PixelFormat` for this image data **/ public var format:PixelFormat; /** The height of this image data **/ public var height:Int; /** Whether the image data has premultiplied alpha **/ public var premultiplied:Bool; /** The data for this image, represented as a `js.html.CanvasElement`, `js.html.Image` or `flash.display.BitmapData` **/ public var src(get, set):Dynamic; /** The stride, or number of data values (in bytes) per row in the image data **/ public var stride(get, never):Int; /** Whether this image data is transparent **/ public var transparent:Bool; /** The width of this image data **/ public var width:Int; @:noCompletion private var __srcBitmapData:#if flash BitmapData #else Dynamic #end; @:noCompletion private var __srcCanvas:#if (js && html5) CanvasElement #else Dynamic #end; @:noCompletion private var __srcContext:#if (js && html5) CanvasRenderingContext2D #else Dynamic #end; @:noCompletion private var __srcCustom:Dynamic; @:noCompletion private var __srcImage:#if (js && html5) HTMLImage #else Dynamic #end; @:noCompletion private var __srcImageData:#if (js && html5) ImageData #else Dynamic #end; #if commonjs private static function __init__() { var p = untyped ImageBuffer.prototype; untyped Object.defineProperties(p, { "src": {get: p.get_src, set: p.set_src}, "stride": {get: p.get_stride} }); } #end /** Creates a new `ImageBuffer` instance @param data (Optional) Initial `UInt8Array` data @param width (Optional) An initial `width` value @param height (Optional) An initial `height` value @param bitsPerPixel (Optional) The `bitsPerPixel` of the data (default is 32) @param format (Optional) The `PixelFormat` of this image buffer **/ public function new(data:UInt8Array = null, width:Int = 0, height:Int = 0, bitsPerPixel:Int = 32, format:PixelFormat = null) { this.data = data; this.width = width; this.height = height; this.bitsPerPixel = bitsPerPixel; this.format = (format == null ? RGBA32 : format); premultiplied = false; transparent = true; } /** Creates a duplicate of this `ImageBuffer` If the current `ImageBuffer` has `data` or `src` information, this will be cloned as well. @return A new `ImageBuffer` with duplicate values **/ public function clone():ImageBuffer { var buffer = new ImageBuffer(data, width, height, bitsPerPixel); #if flash if (__srcBitmapData != null) buffer.__srcBitmapData = __srcBitmapData.clone(); #elseif (js && html5) if (data != null) { buffer.data = new UInt8Array(data.byteLength); var copy = new UInt8Array(data); buffer.data.set(copy); } else if (__srcImageData != null) { buffer.__srcCanvas = cast Browser.document.createElement("canvas"); buffer.__srcContext = cast buffer.__srcCanvas.getContext("2d"); buffer.__srcCanvas.width = __srcImageData.width; buffer.__srcCanvas.height = __srcImageData.height; buffer.__srcImageData = buffer.__srcContext.createImageData(__srcImageData.width, __srcImageData.height); var copy = new Uint8ClampedArray(__srcImageData.data); buffer.__srcImageData.data.set(copy); } else if (__srcCanvas != null) { buffer.__srcCanvas = cast Browser.document.createElement("canvas"); buffer.__srcContext = cast buffer.__srcCanvas.getContext("2d"); buffer.__srcCanvas.width = __srcCanvas.width; buffer.__srcCanvas.height = __srcCanvas.height; buffer.__srcContext.drawImage(__srcCanvas, 0, 0); } else { buffer.__srcImage = __srcImage; } #elseif nodejs if (data != null) { buffer.data = new UInt8Array(data.byteLength); var copy = new UInt8Array(data); buffer.data.set(copy); } buffer.__srcCustom = __srcCustom; #else if (data != null) { var bytes = Bytes.alloc(data.byteLength); bytes.blit(0, buffer.data.buffer, 0, data.byteLength); buffer.data = new UInt8Array(bytes); } #end buffer.bitsPerPixel = bitsPerPixel; buffer.format = format; buffer.premultiplied = premultiplied; buffer.transparent = transparent; return buffer; } // Get & Set Methods @:noCompletion private function get_src():Dynamic { #if (js && html5) if (__srcImage != null) return __srcImage; return __srcCanvas; #elseif flash return __srcBitmapData; #else return __srcCustom; #end } @:noCompletion private function set_src(value:Dynamic):Dynamic { #if (js && html5) if ((value is HTMLImage)) { __srcImage = cast value; } else if ((value is CanvasElement)) { __srcCanvas = cast value; __srcContext = cast __srcCanvas.getContext("2d"); } #elseif flash __srcBitmapData = cast value; #else __srcCustom = value; #end return value; } @:noCompletion private function get_stride():Int { return width * Std.int(bitsPerPixel / 8); } } ================================================ FILE: src/lime/graphics/ImageChannel.hx ================================================ package lime.graphics; /** An enum with values for standard image color channels **/ enum ImageChannel { /** The red color channel **/ RED; /** The green color channel **/ GREEN; /** The blue color channel **/ BLUE; /** The alpha color channel **/ ALPHA; } ================================================ FILE: src/lime/graphics/ImageFileFormat.hx ================================================ package lime.graphics; /** An enum with values for image encoding formats **/ enum ImageFileFormat { /** An image file encoded in the BMP file format **/ BMP; /** An image file encoded in the JPEG file format **/ JPEG; /** An image file encoded in the PNG file format **/ PNG; } ================================================ FILE: src/lime/graphics/ImageType.hx ================================================ package lime.graphics; /** An enum containing values for the underlying image type represented by an `ImageBuffer` **/ enum ImageType { /** The source image data is stored in a `js.html.Image` or `js.html.CanvasElement` **/ CANVAS; /** The source image data is stored in a `UInt8Array` **/ DATA; /** The source image data is stored in a `flash.display.BitmapData` **/ FLASH; /** The source image data is stored in a custom format **/ CUSTOM; } ================================================ FILE: src/lime/graphics/OpenGLES2RenderContext.hx ================================================ package lime.graphics; #if (!lime_doc_gen || lime_opengl || lime_opengles) #if (doc_gen || (sys && lime_cffi)) import lime.graphics.opengl.*; /** The `OpenGLES2RenderContext` allows access to OpenGL ES 2.0 features when OpenGL or OpenGL ES is the render context type of the `Window`. Using an OpenGL ES context on a desktop platform enables support for cross-platform code that should run on the majority of desktop and mobile platforms (when using hardware acceleration). Platforms supporting an OpenGL ES context are compatible with the Lime `WebGLRenderContext` if you would prefer to write WebGL-style code, or support web browsers with the same code. You can convert from `lime.graphics.RenderContext`, `lime.graphics.OpenGLRenderContext`, `lime.graphics.OpenGLES3RenderContext`, `lime.graphics.opengl.GL`, and can convert to `lime.graphics.WebGLRenderContext` directly if desired: ```haxe var gles2:OpenGLES2RenderContext = window.context; var gles2:OpenGLES2RenderContext = gl; var gles2:OpenGLES2RenderContext = gles3; var gles2:OpenGLES2RenderContext = GL; var webgl:WebGLRenderContext = gles2; ``` **/ @:forward(ACTIVE_ATTRIBUTES, ACTIVE_TEXTURE, ACTIVE_UNIFORMS, ALIASED_LINE_WIDTH_RANGE, ALIASED_POINT_SIZE_RANGE, ALPHA, ALPHA_BITS, ALWAYS, ARRAY_BUFFER, ARRAY_BUFFER_BINDING, ATTACHED_SHADERS, BACK, BLEND, BLEND_COLOR, BLEND_DST_ALPHA, BLEND_DST_RGB, BLEND_EQUATION, BLEND_EQUATION_ALPHA, BLEND_EQUATION_RGB, BLEND_SRC_ALPHA, BLEND_SRC_RGB, BLUE_BITS, BOOL, BOOL_VEC2, BOOL_VEC3, BOOL_VEC4, BROWSER_DEFAULT_WEBGL, BUFFER_SIZE, BUFFER_USAGE, BYTE, CCW, CLAMP_TO_EDGE, COLOR_ATTACHMENT0, COLOR_BUFFER_BIT, COLOR_CLEAR_VALUE, COLOR_WRITEMASK, COMPILE_STATUS, COMPRESSED_TEXTURE_FORMATS, CONSTANT_ALPHA, CONSTANT_COLOR, CULL_FACE, CULL_FACE_MODE, CURRENT_PROGRAM, CURRENT_VERTEX_ATTRIB, CW, DECR, DECR_WRAP, DELETE_STATUS, DEPTH_ATTACHMENT, DEPTH_BITS, DEPTH_BUFFER_BIT, DEPTH_CLEAR_VALUE, DEPTH_COMPONENT, DEPTH_COMPONENT16, DEPTH_FUNC, DEPTH_RANGE, DEPTH_STENCIL, DEPTH_STENCIL_ATTACHMENT, DEPTH_TEST, DEPTH_WRITEMASK, DITHER, DONT_CARE, DST_ALPHA, DST_COLOR, DYNAMIC_DRAW, ELEMENT_ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER_BINDING, EQUAL, FASTEST, FLOAT, FLOAT_MAT2, FLOAT_MAT3, FLOAT_MAT4, FLOAT_VEC2, FLOAT_VEC3, FLOAT_VEC4, FRAGMENT_SHADER, FRAMEBUFFER, FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, FRAMEBUFFER_BINDING, FRAMEBUFFER_COMPLETE, FRAMEBUFFER_INCOMPLETE_ATTACHMENT, FRAMEBUFFER_INCOMPLETE_DIMENSIONS, FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT, FRAMEBUFFER_UNSUPPORTED, FRONT, FRONT_AND_BACK, FRONT_FACE, FUNC_ADD, FUNC_REVERSE_SUBTRACT, FUNC_SUBTRACT, GENERATE_MIPMAP_HINT, GEQUAL, GREATER, GREEN_BITS, HIGH_FLOAT, HIGH_INT, INCR, INCR_WRAP, INT, INT_VEC2, INT_VEC3, INT_VEC4, INVALID_ENUM, INVALID_FRAMEBUFFER_OPERATION, INVALID_OPERATION, INVALID_VALUE, INVERT, KEEP, LEQUAL, LESS, LINEAR, LINEAR_MIPMAP_LINEAR, LINEAR_MIPMAP_NEAREST, LINES, LINE_LOOP, LINE_STRIP, LINE_WIDTH, LINK_STATUS, LOW_FLOAT, LOW_INT, LUMINANCE, LUMINANCE_ALPHA, MAX_COMBINED_TEXTURE_IMAGE_UNITS, MAX_CUBE_MAP_TEXTURE_SIZE, MAX_FRAGMENT_UNIFORM_VECTORS, MAX_RENDERBUFFER_SIZE, MAX_TEXTURE_IMAGE_UNITS, MAX_TEXTURE_SIZE, MAX_VARYING_VECTORS, MAX_VERTEX_ATTRIBS, MAX_VERTEX_TEXTURE_IMAGE_UNITS, MAX_VERTEX_UNIFORM_VECTORS, MAX_VIEWPORT_DIMS, MEDIUM_FLOAT, MEDIUM_INT, MIRRORED_REPEAT, NEAREST, NEAREST_MIPMAP_LINEAR, NEAREST_MIPMAP_NEAREST, NEVER, NICEST, NONE, NOTEQUAL, NO_ERROR, ONE, ONE_MINUS_CONSTANT_ALPHA, ONE_MINUS_CONSTANT_COLOR, ONE_MINUS_DST_ALPHA, ONE_MINUS_DST_COLOR, ONE_MINUS_SRC_ALPHA, ONE_MINUS_SRC_COLOR, OUT_OF_MEMORY, PACK_ALIGNMENT, POINTS, POLYGON_OFFSET_FACTOR, POLYGON_OFFSET_FILL, POLYGON_OFFSET_UNITS, RED_BITS, RENDERBUFFER, RENDERBUFFER_ALPHA_SIZE, RENDERBUFFER_BINDING, RENDERBUFFER_BLUE_SIZE, RENDERBUFFER_DEPTH_SIZE, RENDERBUFFER_GREEN_SIZE, RENDERBUFFER_HEIGHT, RENDERBUFFER_INTERNAL_FORMAT, RENDERBUFFER_RED_SIZE, RENDERBUFFER_STENCIL_SIZE, RENDERBUFFER_WIDTH, RENDERER, REPEAT, REPLACE, RGB, RGB565, RGB5_A1, RGBA, RGBA4, SAMPLER_2D, SAMPLER_CUBE, SAMPLES, SAMPLE_ALPHA_TO_COVERAGE, SAMPLE_BUFFERS, SAMPLE_COVERAGE, SAMPLE_COVERAGE_INVERT, SAMPLE_COVERAGE_VALUE, SCISSOR_BOX, SCISSOR_TEST, SHADER_TYPE, SHADING_LANGUAGE_VERSION, SHORT, SRC_ALPHA, SRC_ALPHA_SATURATE, SRC_COLOR, STATIC_DRAW, STENCIL_ATTACHMENT, STENCIL_BACK_FAIL, STENCIL_BACK_FUNC, STENCIL_BACK_PASS_DEPTH_FAIL, STENCIL_BACK_PASS_DEPTH_PASS, STENCIL_BACK_REF, STENCIL_BACK_VALUE_MASK, STENCIL_BACK_WRITEMASK, STENCIL_BITS, STENCIL_BUFFER_BIT, STENCIL_CLEAR_VALUE, STENCIL_FAIL, STENCIL_FUNC, STENCIL_INDEX, STENCIL_INDEX8, STENCIL_PASS_DEPTH_FAIL, STENCIL_PASS_DEPTH_PASS, STENCIL_REF, STENCIL_TEST, STENCIL_VALUE_MASK, STENCIL_WRITEMASK, STREAM_DRAW, SUBPIXEL_BITS, TEXTURE, TEXTURE0, TEXTURE1, TEXTURE10, TEXTURE11, TEXTURE12, TEXTURE13, TEXTURE14, TEXTURE15, TEXTURE16, TEXTURE17, TEXTURE18, TEXTURE19, TEXTURE2, TEXTURE20, TEXTURE21, TEXTURE22, TEXTURE23, TEXTURE24, TEXTURE25, TEXTURE26, TEXTURE27, TEXTURE28, TEXTURE29, TEXTURE3, TEXTURE30, TEXTURE31, TEXTURE4, TEXTURE5, TEXTURE6, TEXTURE7, TEXTURE8, TEXTURE9, TEXTURE_2D, TEXTURE_BINDING_2D, TEXTURE_BINDING_CUBE_MAP, TEXTURE_CUBE_MAP, TEXTURE_CUBE_MAP_NEGATIVE_X, TEXTURE_CUBE_MAP_NEGATIVE_Y, TEXTURE_CUBE_MAP_NEGATIVE_Z, TEXTURE_CUBE_MAP_POSITIVE_X, TEXTURE_CUBE_MAP_POSITIVE_Y, TEXTURE_CUBE_MAP_POSITIVE_Z, TEXTURE_MAG_FILTER, TEXTURE_MIN_FILTER, TEXTURE_WRAP_S, TEXTURE_WRAP_T, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, UNPACK_ALIGNMENT, UNSIGNED_BYTE, UNSIGNED_INT, UNSIGNED_SHORT, UNSIGNED_SHORT_4_4_4_4, UNSIGNED_SHORT_5_5_5_1, UNSIGNED_SHORT_5_6_5, VALIDATE_STATUS, VENDOR, VERSION, VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, VERTEX_ATTRIB_ARRAY_ENABLED, VERTEX_ATTRIB_ARRAY_NORMALIZED, VERTEX_ATTRIB_ARRAY_POINTER, VERTEX_ATTRIB_ARRAY_SIZE, VERTEX_ATTRIB_ARRAY_STRIDE, VERTEX_ATTRIB_ARRAY_TYPE, VERTEX_SHADER, VIEWPORT, ZERO, activeTexture, attachShader, bindAttribLocation, bindBuffer, bindFramebuffer, bindTexture, blendColor, blendEquation, blendEquationSeparate, blendFunc, blendFuncSeparate, bufferData, bufferSubData, checkFramebufferStatus, clear, clearColor, clearDepthf, clearStencil, colorMask, compileShader, compressedTexImage2D, compressedTexSubImage2D, copyTexImage2D, copyTexSubImage2D, createBuffer, createFramebuffer, createProgram, createRenderbuffer, createShader, createTexture, cullFace, deleteBuffer, deleteFramebuffer, deleteProgram, deleteRenderbuffer, deleteShader, deleteTexture, depthFunc, depthMask, depthRangef, detachShader, disable, disableVertexAttribArray, drawArrays, drawElements, enable, enableVertexAttribArray, finish, flush, framebufferRenderbuffer, framebufferTexture2D, frontFace, genBuffers, generateMipmap, genFramebuffers, genRenderbuffers, genTextures, getActiveAttrib, getActiveUniform, getAttachedShaders, getAttribLocation, getBoolean, getBooleanv, getBufferParameteri, getBufferParameteriv, getError, getFloat, getFloatv, getFramebufferAttachmentParameteri, getFramebufferAttachmentParameteriv, getInteger, getIntegerv, getProgramInfoLog, getProgrami, getProgramiv, getRenderbufferParameteri, getRenderbufferParameteriv, getShaderi, getShaderInfoLog, getShaderiv, getShaderPrecisionFormat, getShaderSource, getString, getTexParameterf, getTexParameterfv, getTexParameteri, getTexParameteriv, getUniform, getUniformLocation, getVertexAttribf, getVertexAttribfv, getVertexAttribi, getVertexAttribiv, getVertexAttribPointerv, hint, isBuffer, isEnabled, isFramebuffer, isProgram, isRenderbuffer, isShader, isTexture, lineWidth, linkProgram, pixelStorei, polygonOffset, readPixels, releaseShaderCompiler, renderbufferStorage, sampleCoverage, scissor, shaderBinary, shaderSource, stencilFunc, stencilFuncSeparate, stencilMask, stencilMaskSeparate, stencilOp, stencilOpSeparate, texImage2D, texParameterf, texParameteri, texSubImage2D, uniform1f, uniform1fv, uniform1i, uniform1iv, uniform2f, uniform2fv, uniform2i, uniform2iv, uniform3f, uniform3fv, uniform3i, uniform3iv, uniform4f, uniform4fv, uniform4i, uniform4iv, uniformMatrix2fv, uniformMatrix3fv, uniformMatrix4fv, useProgram, validateProgram, vertexAttrib1f, vertexAttrib1fv, vertexAttrib2f, vertexAttrib2fv, vertexAttrib3f, vertexAttrib3fv, vertexAttrib4f, vertexAttrib4fv, vertexAttribPointer, viewport, EXTENSIONS, type, version) @:transitive abstract OpenGLES2RenderContext(OpenGLES3RenderContext) from OpenGLES3RenderContext #if (!doc_gen && lime_opengl) from OpenGLRenderContext #end { @:from private static function fromGL(gl:Class):OpenGLES2RenderContext { return cast GL.context; } @:from private static function fromRenderContext(context:RenderContext):OpenGLES2RenderContext { return context.gles2; } } #else import lime.graphics.opengl.GL; @:forward() @:transitive abstract OpenGLES2RenderContext(Dynamic) from Dynamic to Dynamic { @:from private static function fromGL(gl:Class):OpenGLES2RenderContext { return null; } @:from private static function fromOpenGLES3RenderContext(gl:OpenGLES3RenderContext):OpenGLES2RenderContext { return null; } #if (!doc_gen && lime_opengl) @:from private static function fromOpenGLRenderContext(gl:OpenGLRenderContext):OpenGLES2RenderContext { return null; } #end @:from private static function fromRenderContext(context:RenderContext):OpenGLES2RenderContext { return null; } @:from private static function fromWebGLRenderContext(gl:WebGLRenderContext):OpenGLES2RenderContext { return null; } } #end #end ================================================ FILE: src/lime/graphics/OpenGLES3RenderContext.hx ================================================ package lime.graphics; #if (!lime_doc_gen || lime_opengl || lime_opengles) #if (lime_doc_gen || (sys && lime_cffi && !doc_gen)) import haxe.Int64; import haxe.io.Bytes; import lime._internal.backend.native.NativeOpenGLRenderContext; import lime.graphics.opengl.*; import lime.utils.DataPointer; import lime.utils.Float32Array; import lime.utils.Int32Array; /** The `OpenGLES3RenderContext` allows access to OpenGL ES 3.0 features when OpenGL or OpenGL ES is the render context type of the `Window`, and the current context supports GLES3 features. Using an OpenGL ES context on a desktop platform enables support for cross-platform code that should run on both desktop and mobile platforms (when using hardware acceleration), though support for OpenGL ES 3.0 features are more limited than GLES2. Platforms supporting an OpenGL ES 3.0 context are compatible with the Lime `WebGLRenderContext` as well as the `WebGL2RenderContext` if you would prefer to write WebGL-style code, or support web browsers with the same code. Be aware that not all browsers support WebGL 2, so only plain WebGL might be available. You can convert from `lime.graphics.RenderContext`, `lime.graphics.OpenGLRenderContext`, `lime.graphics.opengl.GL`, and can convert to `lime.graphics.OpenGLES2RenderContext`, `lime.graphics.WebGL2RenderContext` or `lime.graphics.WebGLRenderContext` directly if desired: ```haxe var gles3:OpenGLES3RenderContext = window.context; var gles3:OpenGLES3RenderContext = gl; var gles3:OpenGLES3RenderContext = GL; var gles2:OpenGLES2RenderContext = gles3; var webgl2:WebGL2RenderContext = gles3; var webgl:WebGLRenderContext = gles3; ``` **/ @:forward @:transitive #if (lime_doc_gen) abstract OpenGLES3RenderContext(NativeOpenGLRenderContext) from NativeOpenGLRenderContext { #else @:transitive abstract OpenGLES3RenderContext(OpenGLRenderContext) from OpenGLRenderContext { #end private static var __extensions:String; public var EXTENSIONS(get, never):Int; public var DEPTH_BUFFER_BIT(get, never):Int; public var STENCIL_BUFFER_BIT(get, never):Int; public var COLOR_BUFFER_BIT(get, never):Int; public var POINTS(get, never):Int; public var LINES(get, never):Int; public var LINE_LOOP(get, never):Int; public var LINE_STRIP(get, never):Int; public var TRIANGLES(get, never):Int; public var TRIANGLE_STRIP(get, never):Int; public var TRIANGLE_FAN(get, never):Int; public var ZERO(get, never):Int; public var ONE(get, never):Int; public var SRC_COLOR(get, never):Int; public var ONE_MINUS_SRC_COLOR(get, never):Int; public var SRC_ALPHA(get, never):Int; public var ONE_MINUS_SRC_ALPHA(get, never):Int; public var DST_ALPHA(get, never):Int; public var ONE_MINUS_DST_ALPHA(get, never):Int; public var DST_COLOR(get, never):Int; public var ONE_MINUS_DST_COLOR(get, never):Int; public var SRC_ALPHA_SATURATE(get, never):Int; public var FUNC_ADD(get, never):Int; public var BLEND_EQUATION(get, never):Int; public var BLEND_EQUATION_RGB(get, never):Int; public var BLEND_EQUATION_ALPHA(get, never):Int; public var FUNC_SUBTRACT(get, never):Int; public var FUNC_REVERSE_SUBTRACT(get, never):Int; public var BLEND_DST_RGB(get, never):Int; public var BLEND_SRC_RGB(get, never):Int; public var BLEND_DST_ALPHA(get, never):Int; public var BLEND_SRC_ALPHA(get, never):Int; public var CONSTANT_COLOR(get, never):Int; public var ONE_MINUS_CONSTANT_COLOR(get, never):Int; public var CONSTANT_ALPHA(get, never):Int; public var ONE_MINUS_CONSTANT_ALPHA(get, never):Int; public var BLEND_COLOR(get, never):Int; public var ARRAY_BUFFER(get, never):Int; public var ELEMENT_ARRAY_BUFFER(get, never):Int; public var ARRAY_BUFFER_BINDING(get, never):Int; public var ELEMENT_ARRAY_BUFFER_BINDING(get, never):Int; public var STREAM_DRAW(get, never):Int; public var STATIC_DRAW(get, never):Int; public var DYNAMIC_DRAW(get, never):Int; public var BUFFER_SIZE(get, never):Int; public var BUFFER_USAGE(get, never):Int; public var CURRENT_VERTEX_ATTRIB(get, never):Int; public var FRONT(get, never):Int; public var BACK(get, never):Int; public var FRONT_AND_BACK(get, never):Int; public var CULL_FACE(get, never):Int; public var BLEND(get, never):Int; public var DITHER(get, never):Int; public var STENCIL_TEST(get, never):Int; public var DEPTH_TEST(get, never):Int; public var SCISSOR_TEST(get, never):Int; public var POLYGON_OFFSET_FILL(get, never):Int; public var SAMPLE_ALPHA_TO_COVERAGE(get, never):Int; public var SAMPLE_COVERAGE(get, never):Int; public var NO_ERROR(get, never):Int; public var INVALID_ENUM(get, never):Int; public var INVALID_VALUE(get, never):Int; public var INVALID_OPERATION(get, never):Int; public var OUT_OF_MEMORY(get, never):Int; public var CW(get, never):Int; public var CCW(get, never):Int; public var LINE_WIDTH(get, never):Int; public var ALIASED_POINT_SIZE_RANGE(get, never):Int; public var ALIASED_LINE_WIDTH_RANGE(get, never):Int; public var CULL_FACE_MODE(get, never):Int; public var FRONT_FACE(get, never):Int; public var DEPTH_RANGE(get, never):Int; public var DEPTH_WRITEMASK(get, never):Int; public var DEPTH_CLEAR_VALUE(get, never):Int; public var DEPTH_FUNC(get, never):Int; public var STENCIL_CLEAR_VALUE(get, never):Int; public var STENCIL_FUNC(get, never):Int; public var STENCIL_FAIL(get, never):Int; public var STENCIL_PASS_DEPTH_FAIL(get, never):Int; public var STENCIL_PASS_DEPTH_PASS(get, never):Int; public var STENCIL_REF(get, never):Int; public var STENCIL_VALUE_MASK(get, never):Int; public var STENCIL_WRITEMASK(get, never):Int; public var STENCIL_BACK_FUNC(get, never):Int; public var STENCIL_BACK_FAIL(get, never):Int; public var STENCIL_BACK_PASS_DEPTH_FAIL(get, never):Int; public var STENCIL_BACK_PASS_DEPTH_PASS(get, never):Int; public var STENCIL_BACK_REF(get, never):Int; public var STENCIL_BACK_VALUE_MASK(get, never):Int; public var STENCIL_BACK_WRITEMASK(get, never):Int; public var VIEWPORT(get, never):Int; public var SCISSOR_BOX(get, never):Int; public var COLOR_CLEAR_VALUE(get, never):Int; public var COLOR_WRITEMASK(get, never):Int; public var UNPACK_ALIGNMENT(get, never):Int; public var PACK_ALIGNMENT(get, never):Int; public var MAX_TEXTURE_SIZE(get, never):Int; public var MAX_VIEWPORT_DIMS(get, never):Int; public var SUBPIXEL_BITS(get, never):Int; public var RED_BITS(get, never):Int; public var GREEN_BITS(get, never):Int; public var BLUE_BITS(get, never):Int; public var ALPHA_BITS(get, never):Int; public var DEPTH_BITS(get, never):Int; public var STENCIL_BITS(get, never):Int; public var POLYGON_OFFSET_UNITS(get, never):Int; public var POLYGON_OFFSET_FACTOR(get, never):Int; public var TEXTURE_BINDING_2D(get, never):Int; public var SAMPLE_BUFFERS(get, never):Int; public var SAMPLES(get, never):Int; public var SAMPLE_COVERAGE_VALUE(get, never):Int; public var SAMPLE_COVERAGE_INVERT(get, never):Int; public var COMPRESSED_TEXTURE_FORMATS(get, never):Int; public var DONT_CARE(get, never):Int; public var FASTEST(get, never):Int; public var NICEST(get, never):Int; public var GENERATE_MIPMAP_HINT(get, never):Int; public var BYTE(get, never):Int; public var UNSIGNED_BYTE(get, never):Int; public var SHORT(get, never):Int; public var UNSIGNED_SHORT(get, never):Int; public var INT(get, never):Int; public var UNSIGNED_INT(get, never):Int; public var FLOAT(get, never):Int; public var DEPTH_COMPONENT(get, never):Int; public var ALPHA(get, never):Int; public var RGB(get, never):Int; public var RGBA(get, never):Int; public var LUMINANCE(get, never):Int; public var LUMINANCE_ALPHA(get, never):Int; public var UNSIGNED_SHORT_4_4_4_4(get, never):Int; public var UNSIGNED_SHORT_5_5_5_1(get, never):Int; public var UNSIGNED_SHORT_5_6_5(get, never):Int; public var FRAGMENT_SHADER(get, never):Int; public var VERTEX_SHADER(get, never):Int; public var MAX_VERTEX_ATTRIBS(get, never):Int; public var MAX_VERTEX_UNIFORM_VECTORS(get, never):Int; public var MAX_VARYING_VECTORS(get, never):Int; public var MAX_COMBINED_TEXTURE_IMAGE_UNITS(get, never):Int; public var MAX_VERTEX_TEXTURE_IMAGE_UNITS(get, never):Int; public var MAX_TEXTURE_IMAGE_UNITS(get, never):Int; public var MAX_FRAGMENT_UNIFORM_VECTORS(get, never):Int; public var SHADER_TYPE(get, never):Int; public var DELETE_STATUS(get, never):Int; public var LINK_STATUS(get, never):Int; public var VALIDATE_STATUS(get, never):Int; public var ATTACHED_SHADERS(get, never):Int; public var ACTIVE_UNIFORMS(get, never):Int; public var ACTIVE_ATTRIBUTES(get, never):Int; public var SHADING_LANGUAGE_VERSION(get, never):Int; public var CURRENT_PROGRAM(get, never):Int; public var NEVER(get, never):Int; public var LESS(get, never):Int; public var EQUAL(get, never):Int; public var LEQUAL(get, never):Int; public var GREATER(get, never):Int; public var NOTEQUAL(get, never):Int; public var GEQUAL(get, never):Int; public var ALWAYS(get, never):Int; public var KEEP(get, never):Int; public var REPLACE(get, never):Int; public var INCR(get, never):Int; public var DECR(get, never):Int; public var INVERT(get, never):Int; public var INCR_WRAP(get, never):Int; public var DECR_WRAP(get, never):Int; public var VENDOR(get, never):Int; public var RENDERER(get, never):Int; public var VERSION(get, never):Int; public var NEAREST(get, never):Int; public var LINEAR(get, never):Int; public var NEAREST_MIPMAP_NEAREST(get, never):Int; public var LINEAR_MIPMAP_NEAREST(get, never):Int; public var NEAREST_MIPMAP_LINEAR(get, never):Int; public var LINEAR_MIPMAP_LINEAR(get, never):Int; public var TEXTURE_MAG_FILTER(get, never):Int; public var TEXTURE_MIN_FILTER(get, never):Int; public var TEXTURE_WRAP_S(get, never):Int; public var TEXTURE_WRAP_T(get, never):Int; public var TEXTURE_2D(get, never):Int; public var TEXTURE(get, never):Int; public var TEXTURE_CUBE_MAP(get, never):Int; public var TEXTURE_BINDING_CUBE_MAP(get, never):Int; public var TEXTURE_CUBE_MAP_POSITIVE_X(get, never):Int; public var TEXTURE_CUBE_MAP_NEGATIVE_X(get, never):Int; public var TEXTURE_CUBE_MAP_POSITIVE_Y(get, never):Int; public var TEXTURE_CUBE_MAP_NEGATIVE_Y(get, never):Int; public var TEXTURE_CUBE_MAP_POSITIVE_Z(get, never):Int; public var TEXTURE_CUBE_MAP_NEGATIVE_Z(get, never):Int; public var MAX_CUBE_MAP_TEXTURE_SIZE(get, never):Int; public var TEXTURE0(get, never):Int; public var TEXTURE1(get, never):Int; public var TEXTURE2(get, never):Int; public var TEXTURE3(get, never):Int; public var TEXTURE4(get, never):Int; public var TEXTURE5(get, never):Int; public var TEXTURE6(get, never):Int; public var TEXTURE7(get, never):Int; public var TEXTURE8(get, never):Int; public var TEXTURE9(get, never):Int; public var TEXTURE10(get, never):Int; public var TEXTURE11(get, never):Int; public var TEXTURE12(get, never):Int; public var TEXTURE13(get, never):Int; public var TEXTURE14(get, never):Int; public var TEXTURE15(get, never):Int; public var TEXTURE16(get, never):Int; public var TEXTURE17(get, never):Int; public var TEXTURE18(get, never):Int; public var TEXTURE19(get, never):Int; public var TEXTURE20(get, never):Int; public var TEXTURE21(get, never):Int; public var TEXTURE22(get, never):Int; public var TEXTURE23(get, never):Int; public var TEXTURE24(get, never):Int; public var TEXTURE25(get, never):Int; public var TEXTURE26(get, never):Int; public var TEXTURE27(get, never):Int; public var TEXTURE28(get, never):Int; public var TEXTURE29(get, never):Int; public var TEXTURE30(get, never):Int; public var TEXTURE31(get, never):Int; public var ACTIVE_TEXTURE(get, never):Int; public var REPEAT(get, never):Int; public var CLAMP_TO_EDGE(get, never):Int; public var MIRRORED_REPEAT(get, never):Int; public var FLOAT_VEC2(get, never):Int; public var FLOAT_VEC3(get, never):Int; public var FLOAT_VEC4(get, never):Int; public var INT_VEC2(get, never):Int; public var INT_VEC3(get, never):Int; public var INT_VEC4(get, never):Int; public var BOOL(get, never):Int; public var BOOL_VEC2(get, never):Int; public var BOOL_VEC3(get, never):Int; public var BOOL_VEC4(get, never):Int; public var FLOAT_MAT2(get, never):Int; public var FLOAT_MAT3(get, never):Int; public var FLOAT_MAT4(get, never):Int; public var SAMPLER_2D(get, never):Int; public var SAMPLER_CUBE(get, never):Int; public var VERTEX_ATTRIB_ARRAY_ENABLED(get, never):Int; public var VERTEX_ATTRIB_ARRAY_SIZE(get, never):Int; public var VERTEX_ATTRIB_ARRAY_STRIDE(get, never):Int; public var VERTEX_ATTRIB_ARRAY_TYPE(get, never):Int; public var VERTEX_ATTRIB_ARRAY_NORMALIZED(get, never):Int; public var VERTEX_ATTRIB_ARRAY_POINTER(get, never):Int; public var VERTEX_ATTRIB_ARRAY_BUFFER_BINDING(get, never):Int; public var VERTEX_PROGRAM_POINT_SIZE(get, never):Int; public var POINT_SPRITE(get, never):Int; public var COMPILE_STATUS(get, never):Int; public var LOW_FLOAT(get, never):Int; public var MEDIUM_FLOAT(get, never):Int; public var HIGH_FLOAT(get, never):Int; public var LOW_INT(get, never):Int; public var MEDIUM_INT(get, never):Int; public var HIGH_INT(get, never):Int; public var FRAMEBUFFER(get, never):Int; public var RENDERBUFFER(get, never):Int; public var RGBA4(get, never):Int; public var RGB5_A1(get, never):Int; public var RGB565(get, never):Int; public var DEPTH_COMPONENT16(get, never):Int; public var STENCIL_INDEX(get, never):Int; public var STENCIL_INDEX8(get, never):Int; public var DEPTH_STENCIL(get, never):Int; public var RENDERBUFFER_WIDTH(get, never):Int; public var RENDERBUFFER_HEIGHT(get, never):Int; public var RENDERBUFFER_INTERNAL_FORMAT(get, never):Int; public var RENDERBUFFER_RED_SIZE(get, never):Int; public var RENDERBUFFER_GREEN_SIZE(get, never):Int; public var RENDERBUFFER_BLUE_SIZE(get, never):Int; public var RENDERBUFFER_ALPHA_SIZE(get, never):Int; public var RENDERBUFFER_DEPTH_SIZE(get, never):Int; public var RENDERBUFFER_STENCIL_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_OBJECT_NAME(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE(get, never):Int; public var COLOR_ATTACHMENT0(get, never):Int; public var DEPTH_ATTACHMENT(get, never):Int; public var STENCIL_ATTACHMENT(get, never):Int; public var DEPTH_STENCIL_ATTACHMENT(get, never):Int; public var NONE(get, never):Int; public var FRAMEBUFFER_COMPLETE(get, never):Int; public var FRAMEBUFFER_INCOMPLETE_ATTACHMENT(get, never):Int; public var FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT(get, never):Int; public var FRAMEBUFFER_INCOMPLETE_DIMENSIONS(get, never):Int; public var FRAMEBUFFER_UNSUPPORTED(get, never):Int; public var FRAMEBUFFER_BINDING(get, never):Int; public var RENDERBUFFER_BINDING(get, never):Int; public var MAX_RENDERBUFFER_SIZE(get, never):Int; public var INVALID_FRAMEBUFFER_OPERATION(get, never):Int; public var UNPACK_FLIP_Y_WEBGL(get, never):Int; public var UNPACK_PREMULTIPLY_ALPHA_WEBGL(get, never):Int; public var CONTEXT_LOST_WEBGL(get, never):Int; public var UNPACK_COLORSPACE_CONVERSION_WEBGL(get, never):Int; public var BROWSER_DEFAULT_WEBGL(get, never):Int; public var READ_BUFFER(get, never):Int; public var UNPACK_ROW_LENGTH(get, never):Int; public var UNPACK_SKIP_ROWS(get, never):Int; public var UNPACK_SKIP_PIXELS(get, never):Int; public var PACK_ROW_LENGTH(get, never):Int; public var PACK_SKIP_ROWS(get, never):Int; public var PACK_SKIP_PIXELS(get, never):Int; public var TEXTURE_BINDING_3D(get, never):Int; public var UNPACK_SKIP_IMAGES(get, never):Int; public var UNPACK_IMAGE_HEIGHT(get, never):Int; public var MAX_3D_TEXTURE_SIZE(get, never):Int; public var MAX_ELEMENTS_VERTICES(get, never):Int; public var MAX_ELEMENTS_INDICES(get, never):Int; public var MAX_TEXTURE_LOD_BIAS(get, never):Int; public var MAX_FRAGMENT_UNIFORM_COMPONENTS(get, never):Int; public var MAX_VERTEX_UNIFORM_COMPONENTS(get, never):Int; public var MAX_ARRAY_TEXTURE_LAYERS(get, never):Int; public var MIN_PROGRAM_TEXEL_OFFSET(get, never):Int; public var MAX_PROGRAM_TEXEL_OFFSET(get, never):Int; public var MAX_VARYING_COMPONENTS(get, never):Int; public var FRAGMENT_SHADER_DERIVATIVE_HINT(get, never):Int; public var RASTERIZER_DISCARD(get, never):Int; public var VERTEX_ARRAY_BINDING(get, never):Int; public var MAX_VERTEX_OUTPUT_COMPONENTS(get, never):Int; public var MAX_FRAGMENT_INPUT_COMPONENTS(get, never):Int; public var MAX_SERVER_WAIT_TIMEOUT(get, never):Int; public var MAX_ELEMENT_INDEX(get, never):Int; public var RED(get, never):Int; public var RGB8(get, never):Int; public var RGBA8(get, never):Int; public var RGB10_A2(get, never):Int; public var TEXTURE_3D(get, never):Int; public var TEXTURE_WRAP_R(get, never):Int; public var TEXTURE_MIN_LOD(get, never):Int; public var TEXTURE_MAX_LOD(get, never):Int; public var TEXTURE_BASE_LEVEL(get, never):Int; public var TEXTURE_MAX_LEVEL(get, never):Int; public var TEXTURE_COMPARE_MODE(get, never):Int; public var TEXTURE_COMPARE_FUNC(get, never):Int; public var SRGB(get, never):Int; public var SRGB8(get, never):Int; public var SRGB8_ALPHA8(get, never):Int; public var COMPARE_REF_TO_TEXTURE(get, never):Int; public var RGBA32F(get, never):Int; public var RGB32F(get, never):Int; public var RGBA16F(get, never):Int; public var RGB16F(get, never):Int; public var TEXTURE_2D_ARRAY(get, never):Int; public var TEXTURE_BINDING_2D_ARRAY(get, never):Int; public var R11F_G11F_B10F(get, never):Int; public var RGB9_E5(get, never):Int; public var RGBA32UI(get, never):Int; public var RGB32UI(get, never):Int; public var RGBA16UI(get, never):Int; public var RGB16UI(get, never):Int; public var RGBA8UI(get, never):Int; public var RGB8UI(get, never):Int; public var RGBA32I(get, never):Int; public var RGB32I(get, never):Int; public var RGBA16I(get, never):Int; public var RGB16I(get, never):Int; public var RGBA8I(get, never):Int; public var RGB8I(get, never):Int; public var RED_INTEGER(get, never):Int; public var RGB_INTEGER(get, never):Int; public var RGBA_INTEGER(get, never):Int; public var R8(get, never):Int; public var RG8(get, never):Int; public var R16F(get, never):Int; public var R32F(get, never):Int; public var RG16F(get, never):Int; public var RG32F(get, never):Int; public var R8I(get, never):Int; public var R8UI(get, never):Int; public var R16I(get, never):Int; public var R16UI(get, never):Int; public var R32I(get, never):Int; public var R32UI(get, never):Int; public var RG8I(get, never):Int; public var RG8UI(get, never):Int; public var RG16I(get, never):Int; public var RG16UI(get, never):Int; public var RG32I(get, never):Int; public var RG32UI(get, never):Int; public var R8_SNORM(get, never):Int; public var RG8_SNORM(get, never):Int; public var RGB8_SNORM(get, never):Int; public var RGBA8_SNORM(get, never):Int; public var RGB10_A2UI(get, never):Int; public var TEXTURE_IMMUTABLE_FORMAT(get, never):Int; public var TEXTURE_IMMUTABLE_LEVELS(get, never):Int; public var UNSIGNED_INT_2_10_10_10_REV(get, never):Int; public var UNSIGNED_INT_10F_11F_11F_REV(get, never):Int; public var UNSIGNED_INT_5_9_9_9_REV(get, never):Int; public var FLOAT_32_UNSIGNED_INT_24_8_REV(get, never):Int; public var UNSIGNED_INT_24_8(get, never):Int; public var HALF_FLOAT(get, never):Int; public var RG(get, never):Int; public var RG_INTEGER(get, never):Int; public var INT_2_10_10_10_REV(get, never):Int; public var CURRENT_QUERY(get, never):Int; public var QUERY_RESULT(get, never):Int; public var QUERY_RESULT_AVAILABLE(get, never):Int; public var ANY_SAMPLES_PASSED(get, never):Int; public var ANY_SAMPLES_PASSED_CONSERVATIVE(get, never):Int; public var MAX_DRAW_BUFFERS(get, never):Int; public var DRAW_BUFFER0(get, never):Int; public var DRAW_BUFFER1(get, never):Int; public var DRAW_BUFFER2(get, never):Int; public var DRAW_BUFFER3(get, never):Int; public var DRAW_BUFFER4(get, never):Int; public var DRAW_BUFFER5(get, never):Int; public var DRAW_BUFFER6(get, never):Int; public var DRAW_BUFFER7(get, never):Int; public var DRAW_BUFFER8(get, never):Int; public var DRAW_BUFFER9(get, never):Int; public var DRAW_BUFFER10(get, never):Int; public var DRAW_BUFFER11(get, never):Int; public var DRAW_BUFFER12(get, never):Int; public var DRAW_BUFFER13(get, never):Int; public var DRAW_BUFFER14(get, never):Int; public var DRAW_BUFFER15(get, never):Int; public var MAX_COLOR_ATTACHMENTS(get, never):Int; public var COLOR_ATTACHMENT1(get, never):Int; public var COLOR_ATTACHMENT2(get, never):Int; public var COLOR_ATTACHMENT3(get, never):Int; public var COLOR_ATTACHMENT4(get, never):Int; public var COLOR_ATTACHMENT5(get, never):Int; public var COLOR_ATTACHMENT6(get, never):Int; public var COLOR_ATTACHMENT7(get, never):Int; public var COLOR_ATTACHMENT8(get, never):Int; public var COLOR_ATTACHMENT9(get, never):Int; public var COLOR_ATTACHMENT10(get, never):Int; public var COLOR_ATTACHMENT11(get, never):Int; public var COLOR_ATTACHMENT12(get, never):Int; public var COLOR_ATTACHMENT13(get, never):Int; public var COLOR_ATTACHMENT14(get, never):Int; public var COLOR_ATTACHMENT15(get, never):Int; public var SAMPLER_3D(get, never):Int; public var SAMPLER_2D_SHADOW(get, never):Int; public var SAMPLER_2D_ARRAY(get, never):Int; public var SAMPLER_2D_ARRAY_SHADOW(get, never):Int; public var SAMPLER_CUBE_SHADOW(get, never):Int; public var INT_SAMPLER_2D(get, never):Int; public var INT_SAMPLER_3D(get, never):Int; public var INT_SAMPLER_CUBE(get, never):Int; public var INT_SAMPLER_2D_ARRAY(get, never):Int; public var UNSIGNED_INT_SAMPLER_2D(get, never):Int; public var UNSIGNED_INT_SAMPLER_3D(get, never):Int; public var UNSIGNED_INT_SAMPLER_CUBE(get, never):Int; public var UNSIGNED_INT_SAMPLER_2D_ARRAY(get, never):Int; public var MAX_SAMPLES(get, never):Int; public var SAMPLER_BINDING(get, never):Int; public var PIXEL_PACK_BUFFER(get, never):Int; public var PIXEL_UNPACK_BUFFER(get, never):Int; public var PIXEL_PACK_BUFFER_BINDING(get, never):Int; public var PIXEL_UNPACK_BUFFER_BINDING(get, never):Int; public var COPY_READ_BUFFER(get, never):Int; public var COPY_WRITE_BUFFER(get, never):Int; public var COPY_READ_BUFFER_BINDING(get, never):Int; public var COPY_WRITE_BUFFER_BINDING(get, never):Int; public var FLOAT_MAT2x3(get, never):Int; public var FLOAT_MAT2x4(get, never):Int; public var FLOAT_MAT3x2(get, never):Int; public var FLOAT_MAT3x4(get, never):Int; public var FLOAT_MAT4x2(get, never):Int; public var FLOAT_MAT4x3(get, never):Int; public var UNSIGNED_INT_VEC2(get, never):Int; public var UNSIGNED_INT_VEC3(get, never):Int; public var UNSIGNED_INT_VEC4(get, never):Int; public var UNSIGNED_NORMALIZED(get, never):Int; public var SIGNED_NORMALIZED(get, never):Int; public var VERTEX_ATTRIB_ARRAY_INTEGER(get, never):Int; public var VERTEX_ATTRIB_ARRAY_DIVISOR(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER_MODE(get, never):Int; public var MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS(get, never):Int; public var TRANSFORM_FEEDBACK_VARYINGS(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER_START(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER_SIZE(get, never):Int; public var TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN(get, never):Int; public var MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS(get, never):Int; public var MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS(get, never):Int; public var INTERLEAVED_ATTRIBS(get, never):Int; public var SEPARATE_ATTRIBS(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER_BINDING(get, never):Int; public var TRANSFORM_FEEDBACK(get, never):Int; public var TRANSFORM_FEEDBACK_PAUSED(get, never):Int; public var TRANSFORM_FEEDBACK_ACTIVE(get, never):Int; public var TRANSFORM_FEEDBACK_BINDING(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_RED_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_GREEN_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_BLUE_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE(get, never):Int; public var FRAMEBUFFER_DEFAULT(get, never):Int; public var DEPTH24_STENCIL8(get, never):Int; public var DRAW_FRAMEBUFFER_BINDING(get, never):Int; public var READ_FRAMEBUFFER(get, never):Int; public var DRAW_FRAMEBUFFER(get, never):Int; public var READ_FRAMEBUFFER_BINDING(get, never):Int; public var RENDERBUFFER_SAMPLES(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER(get, never):Int; public var FRAMEBUFFER_INCOMPLETE_MULTISAMPLE(get, never):Int; public var UNIFORM_BUFFER(get, never):Int; public var UNIFORM_BUFFER_BINDING(get, never):Int; public var UNIFORM_BUFFER_START(get, never):Int; public var UNIFORM_BUFFER_SIZE(get, never):Int; public var MAX_VERTEX_UNIFORM_BLOCKS(get, never):Int; public var MAX_FRAGMENT_UNIFORM_BLOCKS(get, never):Int; public var MAX_COMBINED_UNIFORM_BLOCKS(get, never):Int; public var MAX_UNIFORM_BUFFER_BINDINGS(get, never):Int; public var MAX_UNIFORM_BLOCK_SIZE(get, never):Int; public var MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS(get, never):Int; public var MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS(get, never):Int; public var UNIFORM_BUFFER_OFFSET_ALIGNMENT(get, never):Int; public var ACTIVE_UNIFORM_BLOCKS(get, never):Int; public var UNIFORM_TYPE(get, never):Int; public var UNIFORM_SIZE(get, never):Int; public var UNIFORM_BLOCK_INDEX(get, never):Int; public var UNIFORM_OFFSET(get, never):Int; public var UNIFORM_ARRAY_STRIDE(get, never):Int; public var UNIFORM_MATRIX_STRIDE(get, never):Int; public var UNIFORM_IS_ROW_MAJOR(get, never):Int; public var UNIFORM_BLOCK_BINDING(get, never):Int; public var UNIFORM_BLOCK_DATA_SIZE(get, never):Int; public var UNIFORM_BLOCK_ACTIVE_UNIFORMS(get, never):Int; public var UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES(get, never):Int; public var UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER(get, never):Int; public var UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER(get, never):Int; public var OBJECT_TYPE(get, never):Int; public var SYNC_CONDITION(get, never):Int; public var SYNC_STATUS(get, never):Int; public var SYNC_FLAGS(get, never):Int; public var SYNC_FENCE(get, never):Int; public var SYNC_GPU_COMMANDS_COMPLETE(get, never):Int; public var UNSIGNALED(get, never):Int; public var SIGNALED(get, never):Int; public var ALREADY_SIGNALED(get, never):Int; public var TIMEOUT_EXPIRED(get, never):Int; public var CONDITION_SATISFIED(get, never):Int; public var WAIT_FAILED(get, never):Int; public var SYNC_FLUSH_COMMANDS_BIT(get, never):Int; public var COLOR(get, never):Int; public var DEPTH(get, never):Int; public var STENCIL(get, never):Int; public var MIN(get, never):Int; public var MAX(get, never):Int; public var DEPTH_COMPONENT24(get, never):Int; public var STREAM_READ(get, never):Int; public var STREAM_COPY(get, never):Int; public var STATIC_READ(get, never):Int; public var STATIC_COPY(get, never):Int; public var DYNAMIC_READ(get, never):Int; public var DYNAMIC_COPY(get, never):Int; public var DEPTH_COMPONENT32F(get, never):Int; public var DEPTH32F_STENCIL8(get, never):Int; public var INVALID_INDEX(get, never):Int; public var TIMEOUT_IGNORED(get, never):Int; public var MAX_CLIENT_WAIT_TIMEOUT_WEBGL(get, never):Int; public var type(get, never):RenderContextType; public var version(get, never):Float; @:noCompletion private inline function get_EXTENSIONS():Int { return 0x1F03; } @:noCompletion private inline function get_DEPTH_BUFFER_BIT():Int { return this.DEPTH_BUFFER_BIT; } @:noCompletion private inline function get_STENCIL_BUFFER_BIT():Int { return this.STENCIL_BUFFER_BIT; } @:noCompletion private inline function get_COLOR_BUFFER_BIT():Int { return this.COLOR_BUFFER_BIT; } @:noCompletion private inline function get_POINTS():Int { return this.POINTS; } @:noCompletion private inline function get_LINES():Int { return this.LINES; } @:noCompletion private inline function get_LINE_LOOP():Int { return this.LINE_LOOP; } @:noCompletion private inline function get_LINE_STRIP():Int { return this.LINE_STRIP; } @:noCompletion private inline function get_TRIANGLES():Int { return this.TRIANGLES; } @:noCompletion private inline function get_TRIANGLE_STRIP():Int { return this.TRIANGLE_STRIP; } @:noCompletion private inline function get_TRIANGLE_FAN():Int { return this.TRIANGLE_FAN; } @:noCompletion private inline function get_ZERO():Int { return this.ZERO; } @:noCompletion private inline function get_ONE():Int { return this.ONE; } @:noCompletion private inline function get_SRC_COLOR():Int { return this.SRC_COLOR; } @:noCompletion private inline function get_ONE_MINUS_SRC_COLOR():Int { return this.ONE_MINUS_SRC_COLOR; } @:noCompletion private inline function get_SRC_ALPHA():Int { return this.SRC_ALPHA; } @:noCompletion private inline function get_ONE_MINUS_SRC_ALPHA():Int { return this.ONE_MINUS_SRC_ALPHA; } @:noCompletion private inline function get_DST_ALPHA():Int { return this.DST_ALPHA; } @:noCompletion private inline function get_ONE_MINUS_DST_ALPHA():Int { return this.ONE_MINUS_DST_ALPHA; } @:noCompletion private inline function get_DST_COLOR():Int { return this.DST_COLOR; } @:noCompletion private inline function get_ONE_MINUS_DST_COLOR():Int { return this.ONE_MINUS_DST_COLOR; } @:noCompletion private inline function get_SRC_ALPHA_SATURATE():Int { return this.SRC_ALPHA_SATURATE; } @:noCompletion private inline function get_FUNC_ADD():Int { return this.FUNC_ADD; } @:noCompletion private inline function get_BLEND_EQUATION():Int { return this.BLEND_EQUATION; } @:noCompletion private inline function get_BLEND_EQUATION_RGB():Int { return this.BLEND_EQUATION_RGB; } @:noCompletion private inline function get_BLEND_EQUATION_ALPHA():Int { return this.BLEND_EQUATION_ALPHA; } @:noCompletion private inline function get_FUNC_SUBTRACT():Int { return this.FUNC_SUBTRACT; } @:noCompletion private inline function get_FUNC_REVERSE_SUBTRACT():Int { return this.FUNC_REVERSE_SUBTRACT; } @:noCompletion private inline function get_BLEND_DST_RGB():Int { return this.BLEND_DST_RGB; } @:noCompletion private inline function get_BLEND_SRC_RGB():Int { return this.BLEND_SRC_RGB; } @:noCompletion private inline function get_BLEND_DST_ALPHA():Int { return this.BLEND_DST_ALPHA; } @:noCompletion private inline function get_BLEND_SRC_ALPHA():Int { return this.BLEND_SRC_ALPHA; } @:noCompletion private inline function get_CONSTANT_COLOR():Int { return this.CONSTANT_COLOR; } @:noCompletion private inline function get_ONE_MINUS_CONSTANT_COLOR():Int { return this.ONE_MINUS_CONSTANT_COLOR; } @:noCompletion private inline function get_CONSTANT_ALPHA():Int { return this.CONSTANT_ALPHA; } @:noCompletion private inline function get_ONE_MINUS_CONSTANT_ALPHA():Int { return this.ONE_MINUS_CONSTANT_ALPHA; } @:noCompletion private inline function get_BLEND_COLOR():Int { return this.BLEND_COLOR; } @:noCompletion private inline function get_ARRAY_BUFFER():Int { return this.ARRAY_BUFFER; } @:noCompletion private inline function get_ELEMENT_ARRAY_BUFFER():Int { return this.ELEMENT_ARRAY_BUFFER; } @:noCompletion private inline function get_ARRAY_BUFFER_BINDING():Int { return this.ARRAY_BUFFER_BINDING; } @:noCompletion private inline function get_ELEMENT_ARRAY_BUFFER_BINDING():Int { return this.ELEMENT_ARRAY_BUFFER_BINDING; } @:noCompletion private inline function get_STREAM_DRAW():Int { return this.STREAM_DRAW; } @:noCompletion private inline function get_STATIC_DRAW():Int { return this.STATIC_DRAW; } @:noCompletion private inline function get_DYNAMIC_DRAW():Int { return this.DYNAMIC_DRAW; } @:noCompletion private inline function get_BUFFER_SIZE():Int { return this.BUFFER_SIZE; } @:noCompletion private inline function get_BUFFER_USAGE():Int { return this.BUFFER_USAGE; } @:noCompletion private inline function get_CURRENT_VERTEX_ATTRIB():Int { return this.CURRENT_VERTEX_ATTRIB; } @:noCompletion private inline function get_FRONT():Int { return this.FRONT; } @:noCompletion private inline function get_BACK():Int { return this.BACK; } @:noCompletion private inline function get_FRONT_AND_BACK():Int { return this.FRONT_AND_BACK; } @:noCompletion private inline function get_CULL_FACE():Int { return this.CULL_FACE; } @:noCompletion private inline function get_BLEND():Int { return this.BLEND; } @:noCompletion private inline function get_DITHER():Int { return this.DITHER; } @:noCompletion private inline function get_STENCIL_TEST():Int { return this.STENCIL_TEST; } @:noCompletion private inline function get_DEPTH_TEST():Int { return this.DEPTH_TEST; } @:noCompletion private inline function get_SCISSOR_TEST():Int { return this.SCISSOR_TEST; } @:noCompletion private inline function get_POLYGON_OFFSET_FILL():Int { return this.POLYGON_OFFSET_FILL; } @:noCompletion private inline function get_SAMPLE_ALPHA_TO_COVERAGE():Int { return this.SAMPLE_ALPHA_TO_COVERAGE; } @:noCompletion private inline function get_SAMPLE_COVERAGE():Int { return this.SAMPLE_COVERAGE; } @:noCompletion private inline function get_NO_ERROR():Int { return this.NO_ERROR; } @:noCompletion private inline function get_INVALID_ENUM():Int { return this.INVALID_ENUM; } @:noCompletion private inline function get_INVALID_VALUE():Int { return this.INVALID_VALUE; } @:noCompletion private inline function get_INVALID_OPERATION():Int { return this.INVALID_OPERATION; } @:noCompletion private inline function get_OUT_OF_MEMORY():Int { return this.OUT_OF_MEMORY; } @:noCompletion private inline function get_CW():Int { return this.CW; } @:noCompletion private inline function get_CCW():Int { return this.CCW; } @:noCompletion private inline function get_LINE_WIDTH():Int { return this.LINE_WIDTH; } @:noCompletion private inline function get_ALIASED_POINT_SIZE_RANGE():Int { return this.ALIASED_POINT_SIZE_RANGE; } @:noCompletion private inline function get_ALIASED_LINE_WIDTH_RANGE():Int { return this.ALIASED_LINE_WIDTH_RANGE; } @:noCompletion private inline function get_CULL_FACE_MODE():Int { return this.CULL_FACE_MODE; } @:noCompletion private inline function get_FRONT_FACE():Int { return this.FRONT_FACE; } @:noCompletion private inline function get_DEPTH_RANGE():Int { return this.DEPTH_RANGE; } @:noCompletion private inline function get_DEPTH_WRITEMASK():Int { return this.DEPTH_WRITEMASK; } @:noCompletion private inline function get_DEPTH_CLEAR_VALUE():Int { return this.DEPTH_CLEAR_VALUE; } @:noCompletion private inline function get_DEPTH_FUNC():Int { return this.DEPTH_FUNC; } @:noCompletion private inline function get_STENCIL_CLEAR_VALUE():Int { return this.STENCIL_CLEAR_VALUE; } @:noCompletion private inline function get_STENCIL_FUNC():Int { return this.STENCIL_FUNC; } @:noCompletion private inline function get_STENCIL_FAIL():Int { return this.STENCIL_FAIL; } @:noCompletion private inline function get_STENCIL_PASS_DEPTH_FAIL():Int { return this.STENCIL_PASS_DEPTH_FAIL; } @:noCompletion private inline function get_STENCIL_PASS_DEPTH_PASS():Int { return this.STENCIL_PASS_DEPTH_PASS; } @:noCompletion private inline function get_STENCIL_REF():Int { return this.STENCIL_REF; } @:noCompletion private inline function get_STENCIL_VALUE_MASK():Int { return this.STENCIL_VALUE_MASK; } @:noCompletion private inline function get_STENCIL_WRITEMASK():Int { return this.STENCIL_WRITEMASK; } @:noCompletion private inline function get_STENCIL_BACK_FUNC():Int { return this.STENCIL_BACK_FUNC; } @:noCompletion private inline function get_STENCIL_BACK_FAIL():Int { return this.STENCIL_BACK_FAIL; } @:noCompletion private inline function get_STENCIL_BACK_PASS_DEPTH_FAIL():Int { return this.STENCIL_BACK_PASS_DEPTH_FAIL; } @:noCompletion private inline function get_STENCIL_BACK_PASS_DEPTH_PASS():Int { return this.STENCIL_BACK_PASS_DEPTH_PASS; } @:noCompletion private inline function get_STENCIL_BACK_REF():Int { return this.STENCIL_BACK_REF; } @:noCompletion private inline function get_STENCIL_BACK_VALUE_MASK():Int { return this.STENCIL_BACK_VALUE_MASK; } @:noCompletion private inline function get_STENCIL_BACK_WRITEMASK():Int { return this.STENCIL_BACK_WRITEMASK; } @:noCompletion private inline function get_VIEWPORT():Int { return this.VIEWPORT; } @:noCompletion private inline function get_SCISSOR_BOX():Int { return this.SCISSOR_BOX; } @:noCompletion private inline function get_COLOR_CLEAR_VALUE():Int { return this.COLOR_CLEAR_VALUE; } @:noCompletion private inline function get_COLOR_WRITEMASK():Int { return this.COLOR_WRITEMASK; } @:noCompletion private inline function get_UNPACK_ALIGNMENT():Int { return this.UNPACK_ALIGNMENT; } @:noCompletion private inline function get_PACK_ALIGNMENT():Int { return this.PACK_ALIGNMENT; } @:noCompletion private inline function get_MAX_TEXTURE_SIZE():Int { return this.MAX_TEXTURE_SIZE; } @:noCompletion private inline function get_MAX_VIEWPORT_DIMS():Int { return this.MAX_VIEWPORT_DIMS; } @:noCompletion private inline function get_SUBPIXEL_BITS():Int { return this.SUBPIXEL_BITS; } @:noCompletion private inline function get_RED_BITS():Int { return this.RED_BITS; } @:noCompletion private inline function get_GREEN_BITS():Int { return this.GREEN_BITS; } @:noCompletion private inline function get_BLUE_BITS():Int { return this.BLUE_BITS; } @:noCompletion private inline function get_ALPHA_BITS():Int { return this.ALPHA_BITS; } @:noCompletion private inline function get_DEPTH_BITS():Int { return this.DEPTH_BITS; } @:noCompletion private inline function get_STENCIL_BITS():Int { return this.STENCIL_BITS; } @:noCompletion private inline function get_POLYGON_OFFSET_UNITS():Int { return this.POLYGON_OFFSET_UNITS; } @:noCompletion private inline function get_POLYGON_OFFSET_FACTOR():Int { return this.POLYGON_OFFSET_FACTOR; } @:noCompletion private inline function get_TEXTURE_BINDING_2D():Int { return this.TEXTURE_BINDING_2D; } @:noCompletion private inline function get_SAMPLE_BUFFERS():Int { return this.SAMPLE_BUFFERS; } @:noCompletion private inline function get_SAMPLES():Int { return this.SAMPLES; } @:noCompletion private inline function get_SAMPLE_COVERAGE_VALUE():Int { return this.SAMPLE_COVERAGE_VALUE; } @:noCompletion private inline function get_SAMPLE_COVERAGE_INVERT():Int { return this.SAMPLE_COVERAGE_INVERT; } @:noCompletion private inline function get_COMPRESSED_TEXTURE_FORMATS():Int { return this.COMPRESSED_TEXTURE_FORMATS; } @:noCompletion private inline function get_DONT_CARE():Int { return this.DONT_CARE; } @:noCompletion private inline function get_FASTEST():Int { return this.FASTEST; } @:noCompletion private inline function get_NICEST():Int { return this.NICEST; } @:noCompletion private inline function get_GENERATE_MIPMAP_HINT():Int { return this.GENERATE_MIPMAP_HINT; } @:noCompletion private inline function get_BYTE():Int { return this.BYTE; } @:noCompletion private inline function get_UNSIGNED_BYTE():Int { return this.UNSIGNED_BYTE; } @:noCompletion private inline function get_SHORT():Int { return this.SHORT; } @:noCompletion private inline function get_UNSIGNED_SHORT():Int { return this.UNSIGNED_SHORT; } @:noCompletion private inline function get_INT():Int { return this.INT; } @:noCompletion private inline function get_UNSIGNED_INT():Int { return this.UNSIGNED_INT; } @:noCompletion private inline function get_FLOAT():Int { return this.FLOAT; } @:noCompletion private inline function get_DEPTH_COMPONENT():Int { return this.DEPTH_COMPONENT; } @:noCompletion private inline function get_ALPHA():Int { return this.ALPHA; } @:noCompletion private inline function get_RGB():Int { return this.RGB; } @:noCompletion private inline function get_RGBA():Int { return this.RGBA; } @:noCompletion private inline function get_LUMINANCE():Int { return this.LUMINANCE; } @:noCompletion private inline function get_LUMINANCE_ALPHA():Int { return this.LUMINANCE_ALPHA; } @:noCompletion private inline function get_UNSIGNED_SHORT_4_4_4_4():Int { return this.UNSIGNED_SHORT_4_4_4_4; } @:noCompletion private inline function get_UNSIGNED_SHORT_5_5_5_1():Int { return this.UNSIGNED_SHORT_5_5_5_1; } @:noCompletion private inline function get_UNSIGNED_SHORT_5_6_5():Int { return this.UNSIGNED_SHORT_5_6_5; } @:noCompletion private inline function get_FRAGMENT_SHADER():Int { return this.FRAGMENT_SHADER; } @:noCompletion private inline function get_VERTEX_SHADER():Int { return this.VERTEX_SHADER; } @:noCompletion private inline function get_MAX_VERTEX_ATTRIBS():Int { return this.MAX_VERTEX_ATTRIBS; } @:noCompletion private inline function get_MAX_VERTEX_UNIFORM_VECTORS():Int { return this.MAX_VERTEX_UNIFORM_VECTORS; } @:noCompletion private inline function get_MAX_VARYING_VECTORS():Int { return this.MAX_VARYING_VECTORS; } @:noCompletion private inline function get_MAX_COMBINED_TEXTURE_IMAGE_UNITS():Int { return this.MAX_COMBINED_TEXTURE_IMAGE_UNITS; } @:noCompletion private inline function get_MAX_VERTEX_TEXTURE_IMAGE_UNITS():Int { return this.MAX_VERTEX_TEXTURE_IMAGE_UNITS; } @:noCompletion private inline function get_MAX_TEXTURE_IMAGE_UNITS():Int { return this.MAX_TEXTURE_IMAGE_UNITS; } @:noCompletion private inline function get_MAX_FRAGMENT_UNIFORM_VECTORS():Int { return this.MAX_FRAGMENT_UNIFORM_VECTORS; } @:noCompletion private inline function get_SHADER_TYPE():Int { return this.SHADER_TYPE; } @:noCompletion private inline function get_DELETE_STATUS():Int { return this.DELETE_STATUS; } @:noCompletion private inline function get_LINK_STATUS():Int { return this.LINK_STATUS; } @:noCompletion private inline function get_VALIDATE_STATUS():Int { return this.VALIDATE_STATUS; } @:noCompletion private inline function get_ATTACHED_SHADERS():Int { return this.ATTACHED_SHADERS; } @:noCompletion private inline function get_ACTIVE_UNIFORMS():Int { return this.ACTIVE_UNIFORMS; } @:noCompletion private inline function get_ACTIVE_ATTRIBUTES():Int { return this.ACTIVE_ATTRIBUTES; } @:noCompletion private inline function get_SHADING_LANGUAGE_VERSION():Int { return this.SHADING_LANGUAGE_VERSION; } @:noCompletion private inline function get_CURRENT_PROGRAM():Int { return this.CURRENT_PROGRAM; } @:noCompletion private inline function get_NEVER():Int { return this.NEVER; } @:noCompletion private inline function get_LESS():Int { return this.LESS; } @:noCompletion private inline function get_EQUAL():Int { return this.EQUAL; } @:noCompletion private inline function get_LEQUAL():Int { return this.LEQUAL; } @:noCompletion private inline function get_GREATER():Int { return this.GREATER; } @:noCompletion private inline function get_NOTEQUAL():Int { return this.NOTEQUAL; } @:noCompletion private inline function get_GEQUAL():Int { return this.GEQUAL; } @:noCompletion private inline function get_ALWAYS():Int { return this.ALWAYS; } @:noCompletion private inline function get_KEEP():Int { return this.KEEP; } @:noCompletion private inline function get_REPLACE():Int { return this.REPLACE; } @:noCompletion private inline function get_INCR():Int { return this.INCR; } @:noCompletion private inline function get_DECR():Int { return this.DECR; } @:noCompletion private inline function get_INVERT():Int { return this.INVERT; } @:noCompletion private inline function get_INCR_WRAP():Int { return this.INCR_WRAP; } @:noCompletion private inline function get_DECR_WRAP():Int { return this.DECR_WRAP; } @:noCompletion private inline function get_VENDOR():Int { return this.VENDOR; } @:noCompletion private inline function get_RENDERER():Int { return this.RENDERER; } @:noCompletion private inline function get_VERSION():Int { return this.VERSION; } @:noCompletion private inline function get_NEAREST():Int { return this.NEAREST; } @:noCompletion private inline function get_LINEAR():Int { return this.LINEAR; } @:noCompletion private inline function get_NEAREST_MIPMAP_NEAREST():Int { return this.NEAREST_MIPMAP_NEAREST; } @:noCompletion private inline function get_LINEAR_MIPMAP_NEAREST():Int { return this.LINEAR_MIPMAP_NEAREST; } @:noCompletion private inline function get_NEAREST_MIPMAP_LINEAR():Int { return this.NEAREST_MIPMAP_LINEAR; } @:noCompletion private inline function get_LINEAR_MIPMAP_LINEAR():Int { return this.LINEAR_MIPMAP_LINEAR; } @:noCompletion private inline function get_TEXTURE_MAG_FILTER():Int { return this.TEXTURE_MAG_FILTER; } @:noCompletion private inline function get_TEXTURE_MIN_FILTER():Int { return this.TEXTURE_MIN_FILTER; } @:noCompletion private inline function get_TEXTURE_WRAP_S():Int { return this.TEXTURE_WRAP_S; } @:noCompletion private inline function get_TEXTURE_WRAP_T():Int { return this.TEXTURE_WRAP_T; } @:noCompletion private inline function get_TEXTURE_2D():Int { return this.TEXTURE_2D; } @:noCompletion private inline function get_TEXTURE():Int { return this.TEXTURE; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP():Int { return this.TEXTURE_CUBE_MAP; } @:noCompletion private inline function get_TEXTURE_BINDING_CUBE_MAP():Int { return this.TEXTURE_BINDING_CUBE_MAP; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_POSITIVE_X():Int { return this.TEXTURE_CUBE_MAP_POSITIVE_X; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_NEGATIVE_X():Int { return this.TEXTURE_CUBE_MAP_NEGATIVE_X; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_POSITIVE_Y():Int { return this.TEXTURE_CUBE_MAP_POSITIVE_Y; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_NEGATIVE_Y():Int { return this.TEXTURE_CUBE_MAP_NEGATIVE_Y; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_POSITIVE_Z():Int { return this.TEXTURE_CUBE_MAP_POSITIVE_Z; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_NEGATIVE_Z():Int { return this.TEXTURE_CUBE_MAP_NEGATIVE_Z; } @:noCompletion private inline function get_MAX_CUBE_MAP_TEXTURE_SIZE():Int { return this.MAX_CUBE_MAP_TEXTURE_SIZE; } @:noCompletion private inline function get_TEXTURE0():Int { return this.TEXTURE0; } @:noCompletion private inline function get_TEXTURE1():Int { return this.TEXTURE1; } @:noCompletion private inline function get_TEXTURE2():Int { return this.TEXTURE2; } @:noCompletion private inline function get_TEXTURE3():Int { return this.TEXTURE3; } @:noCompletion private inline function get_TEXTURE4():Int { return this.TEXTURE4; } @:noCompletion private inline function get_TEXTURE5():Int { return this.TEXTURE5; } @:noCompletion private inline function get_TEXTURE6():Int { return this.TEXTURE6; } @:noCompletion private inline function get_TEXTURE7():Int { return this.TEXTURE7; } @:noCompletion private inline function get_TEXTURE8():Int { return this.TEXTURE8; } @:noCompletion private inline function get_TEXTURE9():Int { return this.TEXTURE9; } @:noCompletion private inline function get_TEXTURE10():Int { return this.TEXTURE10; } @:noCompletion private inline function get_TEXTURE11():Int { return this.TEXTURE11; } @:noCompletion private inline function get_TEXTURE12():Int { return this.TEXTURE12; } @:noCompletion private inline function get_TEXTURE13():Int { return this.TEXTURE13; } @:noCompletion private inline function get_TEXTURE14():Int { return this.TEXTURE14; } @:noCompletion private inline function get_TEXTURE15():Int { return this.TEXTURE15; } @:noCompletion private inline function get_TEXTURE16():Int { return this.TEXTURE16; } @:noCompletion private inline function get_TEXTURE17():Int { return this.TEXTURE17; } @:noCompletion private inline function get_TEXTURE18():Int { return this.TEXTURE18; } @:noCompletion private inline function get_TEXTURE19():Int { return this.TEXTURE19; } @:noCompletion private inline function get_TEXTURE20():Int { return this.TEXTURE20; } @:noCompletion private inline function get_TEXTURE21():Int { return this.TEXTURE21; } @:noCompletion private inline function get_TEXTURE22():Int { return this.TEXTURE22; } @:noCompletion private inline function get_TEXTURE23():Int { return this.TEXTURE23; } @:noCompletion private inline function get_TEXTURE24():Int { return this.TEXTURE24; } @:noCompletion private inline function get_TEXTURE25():Int { return this.TEXTURE25; } @:noCompletion private inline function get_TEXTURE26():Int { return this.TEXTURE26; } @:noCompletion private inline function get_TEXTURE27():Int { return this.TEXTURE27; } @:noCompletion private inline function get_TEXTURE28():Int { return this.TEXTURE28; } @:noCompletion private inline function get_TEXTURE29():Int { return this.TEXTURE29; } @:noCompletion private inline function get_TEXTURE30():Int { return this.TEXTURE30; } @:noCompletion private inline function get_TEXTURE31():Int { return this.TEXTURE31; } @:noCompletion private inline function get_ACTIVE_TEXTURE():Int { return this.ACTIVE_TEXTURE; } @:noCompletion private inline function get_REPEAT():Int { return this.REPEAT; } @:noCompletion private inline function get_CLAMP_TO_EDGE():Int { return this.CLAMP_TO_EDGE; } @:noCompletion private inline function get_MIRRORED_REPEAT():Int { return this.MIRRORED_REPEAT; } @:noCompletion private inline function get_FLOAT_VEC2():Int { return this.FLOAT_VEC2; } @:noCompletion private inline function get_FLOAT_VEC3():Int { return this.FLOAT_VEC3; } @:noCompletion private inline function get_FLOAT_VEC4():Int { return this.FLOAT_VEC4; } @:noCompletion private inline function get_INT_VEC2():Int { return this.INT_VEC2; } @:noCompletion private inline function get_INT_VEC3():Int { return this.INT_VEC3; } @:noCompletion private inline function get_INT_VEC4():Int { return this.INT_VEC4; } @:noCompletion private inline function get_BOOL():Int { return this.BOOL; } @:noCompletion private inline function get_BOOL_VEC2():Int { return this.BOOL_VEC2; } @:noCompletion private inline function get_BOOL_VEC3():Int { return this.BOOL_VEC3; } @:noCompletion private inline function get_BOOL_VEC4():Int { return this.BOOL_VEC4; } @:noCompletion private inline function get_FLOAT_MAT2():Int { return this.FLOAT_MAT2; } @:noCompletion private inline function get_FLOAT_MAT3():Int { return this.FLOAT_MAT3; } @:noCompletion private inline function get_FLOAT_MAT4():Int { return this.FLOAT_MAT4; } @:noCompletion private inline function get_SAMPLER_2D():Int { return this.SAMPLER_2D; } @:noCompletion private inline function get_SAMPLER_CUBE():Int { return this.SAMPLER_CUBE; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_ENABLED():Int { return this.VERTEX_ATTRIB_ARRAY_ENABLED; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_SIZE():Int { return this.VERTEX_ATTRIB_ARRAY_SIZE; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_STRIDE():Int { return this.VERTEX_ATTRIB_ARRAY_STRIDE; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_TYPE():Int { return this.VERTEX_ATTRIB_ARRAY_TYPE; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_NORMALIZED():Int { return this.VERTEX_ATTRIB_ARRAY_NORMALIZED; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_POINTER():Int { return this.VERTEX_ATTRIB_ARRAY_POINTER; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING():Int { return this.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING; } @:noCompletion private inline function get_VERTEX_PROGRAM_POINT_SIZE():Int {#if (js && html5) return 0; #else return this.VERTEX_PROGRAM_POINT_SIZE; #end } // TODO @:noCompletion private inline function get_POINT_SPRITE():Int {#if (js && html5) return 0; #else return this.POINT_SPRITE; #end } // TODO @:noCompletion private inline function get_COMPILE_STATUS():Int { return this.COMPILE_STATUS; } @:noCompletion private inline function get_LOW_FLOAT():Int { return this.LOW_FLOAT; } @:noCompletion private inline function get_MEDIUM_FLOAT():Int { return this.MEDIUM_FLOAT; } @:noCompletion private inline function get_HIGH_FLOAT():Int { return this.HIGH_FLOAT; } @:noCompletion private inline function get_LOW_INT():Int { return this.LOW_INT; } @:noCompletion private inline function get_MEDIUM_INT():Int { return this.MEDIUM_INT; } @:noCompletion private inline function get_HIGH_INT():Int { return this.HIGH_INT; } @:noCompletion private inline function get_FRAMEBUFFER():Int { return this.FRAMEBUFFER; } @:noCompletion private inline function get_RENDERBUFFER():Int { return this.RENDERBUFFER; } @:noCompletion private inline function get_RGBA4():Int { return this.RGBA4; } @:noCompletion private inline function get_RGB5_A1():Int { return this.RGB5_A1; } @:noCompletion private inline function get_RGB565():Int { return this.RGB565; } @:noCompletion private inline function get_DEPTH_COMPONENT16():Int { return this.DEPTH_COMPONENT16; } @:noCompletion private inline function get_STENCIL_INDEX():Int { return this.STENCIL_INDEX; } @:noCompletion private inline function get_STENCIL_INDEX8():Int { return this.STENCIL_INDEX8; } @:noCompletion private inline function get_DEPTH_STENCIL():Int { return this.DEPTH_STENCIL; } @:noCompletion private inline function get_RENDERBUFFER_WIDTH():Int { return this.RENDERBUFFER_WIDTH; } @:noCompletion private inline function get_RENDERBUFFER_HEIGHT():Int { return this.RENDERBUFFER_HEIGHT; } @:noCompletion private inline function get_RENDERBUFFER_INTERNAL_FORMAT():Int { return this.RENDERBUFFER_INTERNAL_FORMAT; } @:noCompletion private inline function get_RENDERBUFFER_RED_SIZE():Int { return this.RENDERBUFFER_RED_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_GREEN_SIZE():Int { return this.RENDERBUFFER_GREEN_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_BLUE_SIZE():Int { return this.RENDERBUFFER_BLUE_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_ALPHA_SIZE():Int { return this.RENDERBUFFER_ALPHA_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_DEPTH_SIZE():Int { return this.RENDERBUFFER_DEPTH_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_STENCIL_SIZE():Int { return this.RENDERBUFFER_STENCIL_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE():Int { return this.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME():Int { return this.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL():Int { return this.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE():Int { return this.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE; } @:noCompletion private inline function get_COLOR_ATTACHMENT0():Int { return this.COLOR_ATTACHMENT0; } @:noCompletion private inline function get_DEPTH_ATTACHMENT():Int { return this.DEPTH_ATTACHMENT; } @:noCompletion private inline function get_STENCIL_ATTACHMENT():Int { return this.STENCIL_ATTACHMENT; } @:noCompletion private inline function get_DEPTH_STENCIL_ATTACHMENT():Int { return this.DEPTH_STENCIL_ATTACHMENT; } @:noCompletion private inline function get_NONE():Int { return this.NONE; } @:noCompletion private inline function get_FRAMEBUFFER_COMPLETE():Int { return this.FRAMEBUFFER_COMPLETE; } @:noCompletion private inline function get_FRAMEBUFFER_INCOMPLETE_ATTACHMENT():Int { return this.FRAMEBUFFER_INCOMPLETE_ATTACHMENT; } @:noCompletion private inline function get_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT():Int { return this.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; } @:noCompletion private inline function get_FRAMEBUFFER_INCOMPLETE_DIMENSIONS():Int { return this.FRAMEBUFFER_INCOMPLETE_DIMENSIONS; } @:noCompletion private inline function get_FRAMEBUFFER_UNSUPPORTED():Int { return this.FRAMEBUFFER_UNSUPPORTED; } @:noCompletion private inline function get_FRAMEBUFFER_BINDING():Int { return this.FRAMEBUFFER_BINDING; } @:noCompletion private inline function get_RENDERBUFFER_BINDING():Int { return this.RENDERBUFFER_BINDING; } @:noCompletion private inline function get_MAX_RENDERBUFFER_SIZE():Int { return this.MAX_RENDERBUFFER_SIZE; } @:noCompletion private inline function get_INVALID_FRAMEBUFFER_OPERATION():Int { return this.INVALID_FRAMEBUFFER_OPERATION; } @:noCompletion private inline function get_UNPACK_FLIP_Y_WEBGL():Int { return this.UNPACK_FLIP_Y_WEBGL; } @:noCompletion private inline function get_UNPACK_PREMULTIPLY_ALPHA_WEBGL():Int { return this.UNPACK_PREMULTIPLY_ALPHA_WEBGL; } @:noCompletion private inline function get_CONTEXT_LOST_WEBGL():Int { return this.CONTEXT_LOST_WEBGL; } @:noCompletion private inline function get_UNPACK_COLORSPACE_CONVERSION_WEBGL():Int { return this.UNPACK_COLORSPACE_CONVERSION_WEBGL; } @:noCompletion private inline function get_BROWSER_DEFAULT_WEBGL():Int { return this.BROWSER_DEFAULT_WEBGL; } @:noCompletion private inline function get_type():RenderContextType { return this.type; } @:noCompletion private inline function get_version():Float { return this.version; } @:noCompletion private inline function get_READ_BUFFER():Int { return this.READ_BUFFER; } @:noCompletion private inline function get_UNPACK_ROW_LENGTH():Int { return this.UNPACK_ROW_LENGTH; } @:noCompletion private inline function get_UNPACK_SKIP_ROWS():Int { return this.UNPACK_SKIP_ROWS; } @:noCompletion private inline function get_UNPACK_SKIP_PIXELS():Int { return this.UNPACK_SKIP_PIXELS; } @:noCompletion private inline function get_PACK_ROW_LENGTH():Int { return this.PACK_ROW_LENGTH; } @:noCompletion private inline function get_PACK_SKIP_ROWS():Int { return this.PACK_SKIP_ROWS; } @:noCompletion private inline function get_PACK_SKIP_PIXELS():Int { return this.PACK_SKIP_PIXELS; } @:noCompletion private inline function get_TEXTURE_BINDING_3D():Int { return this.TEXTURE_BINDING_3D; } @:noCompletion private inline function get_UNPACK_SKIP_IMAGES():Int { return this.UNPACK_SKIP_IMAGES; } @:noCompletion private inline function get_UNPACK_IMAGE_HEIGHT():Int { return this.UNPACK_IMAGE_HEIGHT; } @:noCompletion private inline function get_MAX_3D_TEXTURE_SIZE():Int { return this.MAX_3D_TEXTURE_SIZE; } @:noCompletion private inline function get_MAX_ELEMENTS_VERTICES():Int { return this.MAX_ELEMENTS_VERTICES; } @:noCompletion private inline function get_MAX_ELEMENTS_INDICES():Int { return this.MAX_ELEMENTS_INDICES; } @:noCompletion private inline function get_MAX_TEXTURE_LOD_BIAS():Int { return this.MAX_TEXTURE_LOD_BIAS; } @:noCompletion private inline function get_MAX_FRAGMENT_UNIFORM_COMPONENTS():Int { return this.MAX_FRAGMENT_UNIFORM_COMPONENTS; } @:noCompletion private inline function get_MAX_VERTEX_UNIFORM_COMPONENTS():Int { return this.MAX_VERTEX_UNIFORM_COMPONENTS; } @:noCompletion private inline function get_MAX_ARRAY_TEXTURE_LAYERS():Int { return this.MAX_ARRAY_TEXTURE_LAYERS; } @:noCompletion private inline function get_MIN_PROGRAM_TEXEL_OFFSET():Int { return this.MIN_PROGRAM_TEXEL_OFFSET; } @:noCompletion private inline function get_MAX_PROGRAM_TEXEL_OFFSET():Int { return this.MAX_PROGRAM_TEXEL_OFFSET; } @:noCompletion private inline function get_MAX_VARYING_COMPONENTS():Int { return this.MAX_VARYING_COMPONENTS; } @:noCompletion private inline function get_FRAGMENT_SHADER_DERIVATIVE_HINT():Int { return this.FRAGMENT_SHADER_DERIVATIVE_HINT; } @:noCompletion private inline function get_RASTERIZER_DISCARD():Int { return this.RASTERIZER_DISCARD; } @:noCompletion private inline function get_VERTEX_ARRAY_BINDING():Int { return this.VERTEX_ARRAY_BINDING; } @:noCompletion private inline function get_MAX_VERTEX_OUTPUT_COMPONENTS():Int { return this.MAX_VERTEX_OUTPUT_COMPONENTS; } @:noCompletion private inline function get_MAX_FRAGMENT_INPUT_COMPONENTS():Int { return this.MAX_FRAGMENT_INPUT_COMPONENTS; } @:noCompletion private inline function get_MAX_SERVER_WAIT_TIMEOUT():Int { return this.MAX_SERVER_WAIT_TIMEOUT; } @:noCompletion private inline function get_MAX_ELEMENT_INDEX():Int { return this.MAX_ELEMENT_INDEX; } @:noCompletion private inline function get_RED():Int { return this.RED; } @:noCompletion private inline function get_RGB8():Int { return this.RGB8; } @:noCompletion private inline function get_RGBA8():Int { return this.RGBA8; } @:noCompletion private inline function get_RGB10_A2():Int { return this.RGB10_A2; } @:noCompletion private inline function get_TEXTURE_3D():Int { return this.TEXTURE_3D; } @:noCompletion private inline function get_TEXTURE_WRAP_R():Int { return this.TEXTURE_WRAP_R; } @:noCompletion private inline function get_TEXTURE_MIN_LOD():Int { return this.TEXTURE_MIN_LOD; } @:noCompletion private inline function get_TEXTURE_MAX_LOD():Int { return this.TEXTURE_MAX_LOD; } @:noCompletion private inline function get_TEXTURE_BASE_LEVEL():Int { return this.TEXTURE_BASE_LEVEL; } @:noCompletion private inline function get_TEXTURE_MAX_LEVEL():Int { return this.TEXTURE_MAX_LEVEL; } @:noCompletion private inline function get_TEXTURE_COMPARE_MODE():Int { return this.TEXTURE_COMPARE_MODE; } @:noCompletion private inline function get_TEXTURE_COMPARE_FUNC():Int { return this.TEXTURE_COMPARE_FUNC; } @:noCompletion private inline function get_SRGB():Int { return this.SRGB; } @:noCompletion private inline function get_SRGB8():Int { return this.SRGB8; } @:noCompletion private inline function get_SRGB8_ALPHA8():Int { return this.SRGB8_ALPHA8; } @:noCompletion private inline function get_COMPARE_REF_TO_TEXTURE():Int { return this.COMPARE_REF_TO_TEXTURE; } @:noCompletion private inline function get_RGBA32F():Int { return this.RGBA32F; } @:noCompletion private inline function get_RGB32F():Int { return this.RGB32F; } @:noCompletion private inline function get_RGBA16F():Int { return this.RGBA16F; } @:noCompletion private inline function get_RGB16F():Int { return this.RGB16F; } @:noCompletion private inline function get_TEXTURE_2D_ARRAY():Int { return this.TEXTURE_2D_ARRAY; } @:noCompletion private inline function get_TEXTURE_BINDING_2D_ARRAY():Int { return this.TEXTURE_BINDING_2D_ARRAY; } @:noCompletion private inline function get_R11F_G11F_B10F():Int { return this.R11F_G11F_B10F; } @:noCompletion private inline function get_RGB9_E5():Int { return this.RGB9_E5; } @:noCompletion private inline function get_RGBA32UI():Int { return this.RGBA32UI; } @:noCompletion private inline function get_RGB32UI():Int { return this.RGB32UI; } @:noCompletion private inline function get_RGBA16UI():Int { return this.RGBA16UI; } @:noCompletion private inline function get_RGB16UI():Int { return this.RGB16UI; } @:noCompletion private inline function get_RGBA8UI():Int { return this.RGBA8UI; } @:noCompletion private inline function get_RGB8UI():Int { return this.RGB8UI; } @:noCompletion private inline function get_RGBA32I():Int { return this.RGBA32I; } @:noCompletion private inline function get_RGB32I():Int { return this.RGB32I; } @:noCompletion private inline function get_RGBA16I():Int { return this.RGBA16I; } @:noCompletion private inline function get_RGB16I():Int { return this.RGB16I; } @:noCompletion private inline function get_RGBA8I():Int { return this.RGBA8I; } @:noCompletion private inline function get_RGB8I():Int { return this.RGB8I; } @:noCompletion private inline function get_RED_INTEGER():Int { return this.RED_INTEGER; } @:noCompletion private inline function get_RGB_INTEGER():Int { return this.RGB_INTEGER; } @:noCompletion private inline function get_RGBA_INTEGER():Int { return this.RGBA_INTEGER; } @:noCompletion private inline function get_R8():Int { return this.R8; } @:noCompletion private inline function get_RG8():Int { return this.RG8; } @:noCompletion private inline function get_R16F():Int { return this.R16F; } @:noCompletion private inline function get_R32F():Int { return this.R32F; } @:noCompletion private inline function get_RG16F():Int { return this.RG16F; } @:noCompletion private inline function get_RG32F():Int { return this.RG32F; } @:noCompletion private inline function get_R8I():Int { return this.R8I; } @:noCompletion private inline function get_R8UI():Int { return this.R8UI; } @:noCompletion private inline function get_R16I():Int { return this.R16I; } @:noCompletion private inline function get_R16UI():Int { return this.R16UI; } @:noCompletion private inline function get_R32I():Int { return this.R32I; } @:noCompletion private inline function get_R32UI():Int { return this.R32UI; } @:noCompletion private inline function get_RG8I():Int { return this.RG8I; } @:noCompletion private inline function get_RG8UI():Int { return this.RG8UI; } @:noCompletion private inline function get_RG16I():Int { return this.RG16I; } @:noCompletion private inline function get_RG16UI():Int { return this.RG16UI; } @:noCompletion private inline function get_RG32I():Int { return this.RG32I; } @:noCompletion private inline function get_RG32UI():Int { return this.RG32UI; } @:noCompletion private inline function get_R8_SNORM():Int { return this.R8_SNORM; } @:noCompletion private inline function get_RG8_SNORM():Int { return this.RG8_SNORM; } @:noCompletion private inline function get_RGB8_SNORM():Int { return this.RGB8_SNORM; } @:noCompletion private inline function get_RGBA8_SNORM():Int { return this.RGBA8_SNORM; } @:noCompletion private inline function get_RGB10_A2UI():Int { return this.RGB10_A2UI; } @:noCompletion private inline function get_TEXTURE_IMMUTABLE_FORMAT():Int { return this.TEXTURE_IMMUTABLE_FORMAT; } @:noCompletion private inline function get_TEXTURE_IMMUTABLE_LEVELS():Int { return this.TEXTURE_IMMUTABLE_LEVELS; } @:noCompletion private inline function get_UNSIGNED_INT_2_10_10_10_REV():Int { return this.UNSIGNED_INT_2_10_10_10_REV; } @:noCompletion private inline function get_UNSIGNED_INT_10F_11F_11F_REV():Int { return this.UNSIGNED_INT_10F_11F_11F_REV; } @:noCompletion private inline function get_UNSIGNED_INT_5_9_9_9_REV():Int { return this.UNSIGNED_INT_5_9_9_9_REV; } @:noCompletion private inline function get_FLOAT_32_UNSIGNED_INT_24_8_REV():Int { return this.FLOAT_32_UNSIGNED_INT_24_8_REV; } @:noCompletion private inline function get_UNSIGNED_INT_24_8():Int { return this.UNSIGNED_INT_24_8; } @:noCompletion private inline function get_HALF_FLOAT():Int { return this.HALF_FLOAT; } @:noCompletion private inline function get_RG():Int { return this.RG; } @:noCompletion private inline function get_RG_INTEGER():Int { return this.RG_INTEGER; } @:noCompletion private inline function get_INT_2_10_10_10_REV():Int { return this.INT_2_10_10_10_REV; } @:noCompletion private inline function get_CURRENT_QUERY():Int { return this.CURRENT_QUERY; } @:noCompletion private inline function get_QUERY_RESULT():Int { return this.QUERY_RESULT; } @:noCompletion private inline function get_QUERY_RESULT_AVAILABLE():Int { return this.QUERY_RESULT_AVAILABLE; } @:noCompletion private inline function get_ANY_SAMPLES_PASSED():Int { return this.ANY_SAMPLES_PASSED; } @:noCompletion private inline function get_ANY_SAMPLES_PASSED_CONSERVATIVE():Int { return this.ANY_SAMPLES_PASSED_CONSERVATIVE; } @:noCompletion private inline function get_MAX_DRAW_BUFFERS():Int { return this.MAX_DRAW_BUFFERS; } @:noCompletion private inline function get_DRAW_BUFFER0():Int { return this.DRAW_BUFFER0; } @:noCompletion private inline function get_DRAW_BUFFER1():Int { return this.DRAW_BUFFER1; } @:noCompletion private inline function get_DRAW_BUFFER2():Int { return this.DRAW_BUFFER2; } @:noCompletion private inline function get_DRAW_BUFFER3():Int { return this.DRAW_BUFFER3; } @:noCompletion private inline function get_DRAW_BUFFER4():Int { return this.DRAW_BUFFER4; } @:noCompletion private inline function get_DRAW_BUFFER5():Int { return this.DRAW_BUFFER5; } @:noCompletion private inline function get_DRAW_BUFFER6():Int { return this.DRAW_BUFFER6; } @:noCompletion private inline function get_DRAW_BUFFER7():Int { return this.DRAW_BUFFER7; } @:noCompletion private inline function get_DRAW_BUFFER8():Int { return this.DRAW_BUFFER8; } @:noCompletion private inline function get_DRAW_BUFFER9():Int { return this.DRAW_BUFFER9; } @:noCompletion private inline function get_DRAW_BUFFER10():Int { return this.DRAW_BUFFER10; } @:noCompletion private inline function get_DRAW_BUFFER11():Int { return this.DRAW_BUFFER11; } @:noCompletion private inline function get_DRAW_BUFFER12():Int { return this.DRAW_BUFFER12; } @:noCompletion private inline function get_DRAW_BUFFER13():Int { return this.DRAW_BUFFER13; } @:noCompletion private inline function get_DRAW_BUFFER14():Int { return this.DRAW_BUFFER14; } @:noCompletion private inline function get_DRAW_BUFFER15():Int { return this.DRAW_BUFFER15; } @:noCompletion private inline function get_MAX_COLOR_ATTACHMENTS():Int { return this.MAX_COLOR_ATTACHMENTS; } @:noCompletion private inline function get_COLOR_ATTACHMENT1():Int { return this.COLOR_ATTACHMENT1; } @:noCompletion private inline function get_COLOR_ATTACHMENT2():Int { return this.COLOR_ATTACHMENT2; } @:noCompletion private inline function get_COLOR_ATTACHMENT3():Int { return this.COLOR_ATTACHMENT3; } @:noCompletion private inline function get_COLOR_ATTACHMENT4():Int { return this.COLOR_ATTACHMENT4; } @:noCompletion private inline function get_COLOR_ATTACHMENT5():Int { return this.COLOR_ATTACHMENT5; } @:noCompletion private inline function get_COLOR_ATTACHMENT6():Int { return this.COLOR_ATTACHMENT6; } @:noCompletion private inline function get_COLOR_ATTACHMENT7():Int { return this.COLOR_ATTACHMENT7; } @:noCompletion private inline function get_COLOR_ATTACHMENT8():Int { return this.COLOR_ATTACHMENT8; } @:noCompletion private inline function get_COLOR_ATTACHMENT9():Int { return this.COLOR_ATTACHMENT9; } @:noCompletion private inline function get_COLOR_ATTACHMENT10():Int { return this.COLOR_ATTACHMENT10; } @:noCompletion private inline function get_COLOR_ATTACHMENT11():Int { return this.COLOR_ATTACHMENT11; } @:noCompletion private inline function get_COLOR_ATTACHMENT12():Int { return this.COLOR_ATTACHMENT12; } @:noCompletion private inline function get_COLOR_ATTACHMENT13():Int { return this.COLOR_ATTACHMENT13; } @:noCompletion private inline function get_COLOR_ATTACHMENT14():Int { return this.COLOR_ATTACHMENT14; } @:noCompletion private inline function get_COLOR_ATTACHMENT15():Int { return this.COLOR_ATTACHMENT15; } @:noCompletion private inline function get_SAMPLER_3D():Int { return this.SAMPLER_3D; } @:noCompletion private inline function get_SAMPLER_2D_SHADOW():Int { return this.SAMPLER_2D_SHADOW; } @:noCompletion private inline function get_SAMPLER_2D_ARRAY():Int { return this.SAMPLER_2D_ARRAY; } @:noCompletion private inline function get_SAMPLER_2D_ARRAY_SHADOW():Int { return this.SAMPLER_2D_ARRAY_SHADOW; } @:noCompletion private inline function get_SAMPLER_CUBE_SHADOW():Int { return this.SAMPLER_CUBE_SHADOW; } @:noCompletion private inline function get_INT_SAMPLER_2D():Int { return this.INT_SAMPLER_2D; } @:noCompletion private inline function get_INT_SAMPLER_3D():Int { return this.INT_SAMPLER_3D; } @:noCompletion private inline function get_INT_SAMPLER_CUBE():Int { return this.INT_SAMPLER_CUBE; } @:noCompletion private inline function get_INT_SAMPLER_2D_ARRAY():Int { return this.INT_SAMPLER_2D_ARRAY; } @:noCompletion private inline function get_UNSIGNED_INT_SAMPLER_2D():Int { return this.UNSIGNED_INT_SAMPLER_2D; } @:noCompletion private inline function get_UNSIGNED_INT_SAMPLER_3D():Int { return this.UNSIGNED_INT_SAMPLER_3D; } @:noCompletion private inline function get_UNSIGNED_INT_SAMPLER_CUBE():Int { return this.UNSIGNED_INT_SAMPLER_CUBE; } @:noCompletion private inline function get_UNSIGNED_INT_SAMPLER_2D_ARRAY():Int { return this.UNSIGNED_INT_SAMPLER_2D_ARRAY; } @:noCompletion private inline function get_MAX_SAMPLES():Int { return this.MAX_SAMPLES; } @:noCompletion private inline function get_SAMPLER_BINDING():Int { return this.SAMPLER_BINDING; } @:noCompletion private inline function get_PIXEL_PACK_BUFFER():Int { return this.PIXEL_PACK_BUFFER; } @:noCompletion private inline function get_PIXEL_UNPACK_BUFFER():Int { return this.PIXEL_UNPACK_BUFFER; } @:noCompletion private inline function get_PIXEL_PACK_BUFFER_BINDING():Int { return this.PIXEL_PACK_BUFFER_BINDING; } @:noCompletion private inline function get_PIXEL_UNPACK_BUFFER_BINDING():Int { return this.PIXEL_UNPACK_BUFFER_BINDING; } @:noCompletion private inline function get_COPY_READ_BUFFER():Int { return this.COPY_READ_BUFFER; } @:noCompletion private inline function get_COPY_WRITE_BUFFER():Int { return this.COPY_WRITE_BUFFER; } @:noCompletion private inline function get_COPY_READ_BUFFER_BINDING():Int { return this.COPY_READ_BUFFER_BINDING; } @:noCompletion private inline function get_COPY_WRITE_BUFFER_BINDING():Int { return this.COPY_WRITE_BUFFER_BINDING; } @:noCompletion private inline function get_FLOAT_MAT2x3():Int { return this.FLOAT_MAT2x3; } @:noCompletion private inline function get_FLOAT_MAT2x4():Int { return this.FLOAT_MAT2x4; } @:noCompletion private inline function get_FLOAT_MAT3x2():Int { return this.FLOAT_MAT3x2; } @:noCompletion private inline function get_FLOAT_MAT3x4():Int { return this.FLOAT_MAT3x4; } @:noCompletion private inline function get_FLOAT_MAT4x2():Int { return this.FLOAT_MAT4x2; } @:noCompletion private inline function get_FLOAT_MAT4x3():Int { return this.FLOAT_MAT4x3; } @:noCompletion private inline function get_UNSIGNED_INT_VEC2():Int { return this.UNSIGNED_INT_VEC2; } @:noCompletion private inline function get_UNSIGNED_INT_VEC3():Int { return this.UNSIGNED_INT_VEC3; } @:noCompletion private inline function get_UNSIGNED_INT_VEC4():Int { return this.UNSIGNED_INT_VEC4; } @:noCompletion private inline function get_UNSIGNED_NORMALIZED():Int { return this.UNSIGNED_NORMALIZED; } @:noCompletion private inline function get_SIGNED_NORMALIZED():Int { return this.SIGNED_NORMALIZED; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_INTEGER():Int { return this.VERTEX_ATTRIB_ARRAY_INTEGER; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_DIVISOR():Int { return this.VERTEX_ATTRIB_ARRAY_DIVISOR; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER_MODE():Int { return this.TRANSFORM_FEEDBACK_BUFFER_MODE; } @:noCompletion private inline function get_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS():Int { return this.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_VARYINGS():Int { return this.TRANSFORM_FEEDBACK_VARYINGS; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER_START():Int { return this.TRANSFORM_FEEDBACK_BUFFER_START; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER_SIZE():Int { return this.TRANSFORM_FEEDBACK_BUFFER_SIZE; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN():Int { return this.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN; } @:noCompletion private inline function get_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS():Int { return this.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS; } @:noCompletion private inline function get_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS():Int { return this.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; } @:noCompletion private inline function get_INTERLEAVED_ATTRIBS():Int { return this.INTERLEAVED_ATTRIBS; } @:noCompletion private inline function get_SEPARATE_ATTRIBS():Int { return this.SEPARATE_ATTRIBS; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER():Int { return this.TRANSFORM_FEEDBACK_BUFFER; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER_BINDING():Int { return this.TRANSFORM_FEEDBACK_BUFFER_BINDING; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK():Int { return this.TRANSFORM_FEEDBACK; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_PAUSED():Int { return this.TRANSFORM_FEEDBACK_PAUSED; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_ACTIVE():Int { return this.TRANSFORM_FEEDBACK_ACTIVE; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BINDING():Int { return this.TRANSFORM_FEEDBACK_BINDING; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING():Int { return this.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE():Int { return this.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_RED_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_RED_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_DEFAULT():Int { return this.FRAMEBUFFER_DEFAULT; } @:noCompletion private inline function get_DEPTH24_STENCIL8():Int { return this.DEPTH24_STENCIL8; } @:noCompletion private inline function get_DRAW_FRAMEBUFFER_BINDING():Int { return this.DRAW_FRAMEBUFFER_BINDING; } @:noCompletion private inline function get_READ_FRAMEBUFFER():Int { return this.READ_FRAMEBUFFER; } @:noCompletion private inline function get_DRAW_FRAMEBUFFER():Int { return this.DRAW_FRAMEBUFFER; } @:noCompletion private inline function get_READ_FRAMEBUFFER_BINDING():Int { return this.READ_FRAMEBUFFER_BINDING; } @:noCompletion private inline function get_RENDERBUFFER_SAMPLES():Int { return this.RENDERBUFFER_SAMPLES; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER():Int { return this.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER; } @:noCompletion private inline function get_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE():Int { return this.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE; } @:noCompletion private inline function get_UNIFORM_BUFFER():Int { return this.UNIFORM_BUFFER; } @:noCompletion private inline function get_UNIFORM_BUFFER_BINDING():Int { return this.UNIFORM_BUFFER_BINDING; } @:noCompletion private inline function get_UNIFORM_BUFFER_START():Int { return this.UNIFORM_BUFFER_START; } @:noCompletion private inline function get_UNIFORM_BUFFER_SIZE():Int { return this.UNIFORM_BUFFER_SIZE; } @:noCompletion private inline function get_MAX_VERTEX_UNIFORM_BLOCKS():Int { return this.MAX_VERTEX_UNIFORM_BLOCKS; } @:noCompletion private inline function get_MAX_FRAGMENT_UNIFORM_BLOCKS():Int { return this.MAX_FRAGMENT_UNIFORM_BLOCKS; } @:noCompletion private inline function get_MAX_COMBINED_UNIFORM_BLOCKS():Int { return this.MAX_COMBINED_UNIFORM_BLOCKS; } @:noCompletion private inline function get_MAX_UNIFORM_BUFFER_BINDINGS():Int { return this.MAX_UNIFORM_BUFFER_BINDINGS; } @:noCompletion private inline function get_MAX_UNIFORM_BLOCK_SIZE():Int { return this.MAX_UNIFORM_BLOCK_SIZE; } @:noCompletion private inline function get_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS():Int { return this.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS; } @:noCompletion private inline function get_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS():Int { return this.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS; } @:noCompletion private inline function get_UNIFORM_BUFFER_OFFSET_ALIGNMENT():Int { return this.UNIFORM_BUFFER_OFFSET_ALIGNMENT; } @:noCompletion private inline function get_ACTIVE_UNIFORM_BLOCKS():Int { return this.ACTIVE_UNIFORM_BLOCKS; } @:noCompletion private inline function get_UNIFORM_TYPE():Int { return this.UNIFORM_TYPE; } @:noCompletion private inline function get_UNIFORM_SIZE():Int { return this.UNIFORM_SIZE; } @:noCompletion private inline function get_UNIFORM_BLOCK_INDEX():Int { return this.UNIFORM_BLOCK_INDEX; } @:noCompletion private inline function get_UNIFORM_OFFSET():Int { return this.UNIFORM_OFFSET; } @:noCompletion private inline function get_UNIFORM_ARRAY_STRIDE():Int { return this.UNIFORM_ARRAY_STRIDE; } @:noCompletion private inline function get_UNIFORM_MATRIX_STRIDE():Int { return this.UNIFORM_MATRIX_STRIDE; } @:noCompletion private inline function get_UNIFORM_IS_ROW_MAJOR():Int { return this.UNIFORM_IS_ROW_MAJOR; } @:noCompletion private inline function get_UNIFORM_BLOCK_BINDING():Int { return this.UNIFORM_BLOCK_BINDING; } @:noCompletion private inline function get_UNIFORM_BLOCK_DATA_SIZE():Int { return this.UNIFORM_BLOCK_DATA_SIZE; } @:noCompletion private inline function get_UNIFORM_BLOCK_ACTIVE_UNIFORMS():Int { return this.UNIFORM_BLOCK_ACTIVE_UNIFORMS; } @:noCompletion private inline function get_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES():Int { return this.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES; } @:noCompletion private inline function get_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER():Int { return this.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER; } @:noCompletion private inline function get_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER():Int { return this.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER; } @:noCompletion private inline function get_OBJECT_TYPE():Int { return this.OBJECT_TYPE; } @:noCompletion private inline function get_SYNC_CONDITION():Int { return this.SYNC_CONDITION; } @:noCompletion private inline function get_SYNC_STATUS():Int { return this.SYNC_STATUS; } @:noCompletion private inline function get_SYNC_FLAGS():Int { return this.SYNC_FLAGS; } @:noCompletion private inline function get_SYNC_FENCE():Int { return this.SYNC_FENCE; } @:noCompletion private inline function get_SYNC_GPU_COMMANDS_COMPLETE():Int { return this.SYNC_GPU_COMMANDS_COMPLETE; } @:noCompletion private inline function get_UNSIGNALED():Int { return this.UNSIGNALED; } @:noCompletion private inline function get_SIGNALED():Int { return this.SIGNALED; } @:noCompletion private inline function get_ALREADY_SIGNALED():Int { return this.ALREADY_SIGNALED; } @:noCompletion private inline function get_TIMEOUT_EXPIRED():Int { return this.TIMEOUT_EXPIRED; } @:noCompletion private inline function get_CONDITION_SATISFIED():Int { return this.CONDITION_SATISFIED; } @:noCompletion private inline function get_WAIT_FAILED():Int { return this.WAIT_FAILED; } @:noCompletion private inline function get_SYNC_FLUSH_COMMANDS_BIT():Int { return this.SYNC_FLUSH_COMMANDS_BIT; } @:noCompletion private inline function get_COLOR():Int { return this.COLOR; } @:noCompletion private inline function get_DEPTH():Int { return this.DEPTH; } @:noCompletion private inline function get_STENCIL():Int { return this.STENCIL; } @:noCompletion private inline function get_MIN():Int { return this.MIN; } @:noCompletion private inline function get_MAX():Int { return this.MAX; } @:noCompletion private inline function get_DEPTH_COMPONENT24():Int { return this.DEPTH_COMPONENT24; } @:noCompletion private inline function get_STREAM_READ():Int { return this.STREAM_READ; } @:noCompletion private inline function get_STREAM_COPY():Int { return this.STREAM_COPY; } @:noCompletion private inline function get_STATIC_READ():Int { return this.STATIC_READ; } @:noCompletion private inline function get_STATIC_COPY():Int { return this.STATIC_COPY; } @:noCompletion private inline function get_DYNAMIC_READ():Int { return this.DYNAMIC_READ; } @:noCompletion private inline function get_DYNAMIC_COPY():Int { return this.DYNAMIC_COPY; } @:noCompletion private inline function get_DEPTH_COMPONENT32F():Int { return this.DEPTH_COMPONENT32F; } @:noCompletion private inline function get_DEPTH32F_STENCIL8():Int { return this.DEPTH32F_STENCIL8; } @:noCompletion private inline function get_INVALID_INDEX():Int { return this.INVALID_INDEX; } @:noCompletion private inline function get_TIMEOUT_IGNORED():Int { return this.TIMEOUT_IGNORED; } @:noCompletion private inline function get_MAX_CLIENT_WAIT_TIMEOUT_WEBGL():Int { return this.MAX_CLIENT_WAIT_TIMEOUT_WEBGL; } public inline function activeTexture(texture:Int):Void { this.activeTexture(texture); } public inline function attachShader(program:GLProgram, shader:GLShader):Void { this.attachShader(program, shader); } public inline function beginQuery(target:Int, query:GLQuery):Void { this.beginQuery(target, query); } public inline function beginTransformFeedback(primitiveNode:Int):Void { this.beginTransformFeedback(primitiveNode); } public inline function bindAttribLocation(program:GLProgram, index:Int, name:String):Void { this.bindAttribLocation(program, index, name); } public inline function bindBuffer(target:Int, buffer:GLBuffer):Void { this.bindBuffer(target, buffer); } public inline function bindBufferBase(target:Int, index:Int, buffer:GLBuffer):Void { this.bindBufferBase(target, index, buffer); } public inline function bindBufferRange(target:Int, index:Int, buffer:GLBuffer, offset:DataPointer, size:Int):Void { this.bindBufferRange(target, index, buffer, offset, size); } public inline function bindFramebuffer(target:Int, framebuffer:GLFramebuffer):Void { this.bindFramebuffer(target, framebuffer); } public inline function bindRenderbuffer(target:Int, renderbuffer:GLRenderbuffer):Void { this.bindRenderbuffer(target, renderbuffer); } public inline function bindSampler(unit:Int, sampler:GLSampler):Void { this.bindSampler(unit, sampler); } public inline function bindTexture(target:Int, texture:GLTexture):Void { this.bindTexture(target, texture); } public inline function bindTransformFeedback(target:Int, transformFeedback:GLTransformFeedback):Void { this.bindTransformFeedback(target, transformFeedback); } public inline function bindVertexArray(vertexArray:GLVertexArrayObject):Void { this.bindVertexArray(vertexArray); } public inline function blendColor(red:Float, green:Float, blue:Float, alpha:Float):Void { this.blendColor(red, green, blue, alpha); } public inline function blendEquation(mode:Int):Void { this.blendEquation(mode); } public inline function blendEquationSeparate(modeRGB:Int, modeAlpha:Int):Void { this.blendEquationSeparate(modeRGB, modeAlpha); } public inline function blendFunc(sfactor:Int, dfactor:Int):Void { this.blendFunc(sfactor, dfactor); } public inline function blendFuncSeparate(srcRGB:Int, dstRGB:Int, srcAlpha:Int, dstAlpha:Int):Void { this.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); } public inline function blitFramebuffer(srcX0:Int, srcY0:Int, srcX1:Int, srcY1:Int, dstX0:Int, dstY0:Int, dstX1:Int, dstY1:Int, mask:Int, filter:Int):Void { this.blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } public inline function bufferData(target:Int, size:Int, data:DataPointer, usage:Int):Void { this.bufferData(target, size, data, usage); } public inline function bufferSubData(target:Int, offset:Int, size:Int, data:DataPointer):Void { this.bufferSubData(target, offset, size, data); } public inline function checkFramebufferStatus(target:Int):Int { return this.checkFramebufferStatus(target); } public inline function clear(mask:Int):Void { this.clear(mask); } public inline function clearBufferfi(buffer:Int, drawbuffer:Int, depth:Float, stencil:Int):Void { this.clearBufferfi(buffer, drawbuffer, depth, stencil); } public inline function clearBufferfv(buffer:Int, drawbuffer:Int, value:DataPointer):Void { this.clearBufferfv(buffer, drawbuffer, value); } public inline function clearBufferiv(buffer:Int, drawbuffer:Int, value:DataPointer):Void { this.clearBufferiv(buffer, drawbuffer, value); } public inline function clearBufferuiv(buffer:Int, drawbuffer:Int, value:DataPointer):Void { this.clearBufferuiv(buffer, drawbuffer, value); } public inline function clearColor(red:Float, green:Float, blue:Float, alpha:Float):Void { this.clearColor(red, green, blue, alpha); } public inline function clearDepthf(depth:Float):Void { this.clearDepthf(depth); } public inline function clearStencil(s:Int):Void { this.clearStencil(s); } public inline function clientWaitSync(sync:GLSync, flags:Int, timeout:Int64):Int { return this.clientWaitSync(sync, flags, timeout); } public inline function colorMask(red:Bool, green:Bool, blue:Bool, alpha:Bool):Void { this.colorMask(red, green, blue, alpha); } public inline function compileShader(shader:GLShader):Void { this.compileShader(shader); } public inline function compressedTexImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, imageSize:Int, data:DataPointer):Void { this.compressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); } public inline function compressedTexImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, imageSize:Int, data:DataPointer):Void { this.compressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data); } public inline function compressedTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, imageSize:Int, data:DataPointer):Void { this.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); } public inline function compressedTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, imageSize:Int, data:DataPointer):Void { this.compressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); } public inline function copyBufferSubData(readTarget:Int, writeTarget:Int, readOffset:DataPointer, writeOffset:DataPointer, size:Int):Void { this.copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); } public inline function copyTexImage2D(target:Int, level:Int, internalformat:Int, x:Int, y:Int, width:Int, height:Int, border:Int):Void { this.copyTexImage2D(target, level, internalformat, x, y, width, height, border); } public inline function copyTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, x:Int, y:Int, width:Int, height:Int):Void { this.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); } public inline function copyTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, x:Int, y:Int, width:Int, height:Int):Void { this.copyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); } public inline function createBuffer():GLBuffer { return this.createBuffer(); } public inline function createFramebuffer():GLFramebuffer { return this.createFramebuffer(); } public inline function createProgram():GLProgram { return this.createProgram(); } public inline function createQuery():GLQuery { return this.createQuery(); } public inline function createRenderbuffer():GLRenderbuffer { return this.createRenderbuffer(); } public inline function createSampler():GLSampler { return this.createSampler(); } public inline function createShader(type:Int):GLShader { return this.createShader(type); } public inline function createTexture():GLTexture { return this.createTexture(); } public inline function createTransformFeedback():GLTransformFeedback { return this.createTransformFeedback(); } public inline function createVertexArray():GLVertexArrayObject { return this.createVertexArray(); } public inline function cullFace(mode:Int):Void { this.cullFace(mode); } public inline function deleteBuffer(buffer:GLBuffer):Void { this.deleteBuffer(buffer); } public inline function deleteFramebuffer(framebuffer:GLFramebuffer):Void { this.deleteFramebuffer(framebuffer); } public inline function deleteProgram(program:GLProgram):Void { this.deleteProgram(program); } public inline function deleteQuery(query:GLQuery):Void { this.deleteQuery(query); } public inline function deleteRenderbuffer(renderbuffer:GLRenderbuffer):Void { this.deleteRenderbuffer(renderbuffer); } public inline function deleteSampler(sampler:GLSampler):Void { this.deleteSampler(sampler); } public inline function deleteShader(shader:GLShader):Void { this.deleteShader(shader); } public inline function deleteSync(sync:GLSync):Void { this.deleteSync(sync); } public inline function deleteTexture(texture:GLTexture):Void { this.deleteTexture(texture); } public inline function deleteTransformFeedback(transformFeedback:GLTransformFeedback):Void { this.deleteTransformFeedback(transformFeedback); } public inline function deleteVertexArray(vertexArray:GLVertexArrayObject):Void { this.deleteVertexArray(vertexArray); } public inline function depthFunc(func:Int):Void { this.depthFunc(func); } public inline function depthMask(flag:Bool):Void { this.depthMask(flag); } public inline function depthRangef(zNear:Float, zFar:Float):Void { this.depthRangef(zNear, zFar); } public inline function detachShader(program:GLProgram, shader:GLShader):Void { this.detachShader(program, shader); } public inline function disable(cap:Int):Void { this.disable(cap); } public inline function disableVertexAttribArray(index:Int):Void { this.disableVertexAttribArray(index); } public inline function drawArrays(mode:Int, first:Int, count:Int):Void { this.drawArrays(mode, first, count); } public inline function drawArraysInstanced(mode:Int, first:Int, count:Int, instanceCount:Int):Void { this.drawArraysInstanced(mode, first, count, instanceCount); } public inline function drawBuffers(buffers:Array):Void { this.drawBuffers(buffers); } public inline function drawElements(mode:Int, count:Int, type:Int, offset:DataPointer):Void { this.drawElements(mode, count, type, offset); } public inline function drawElementsInstanced(mode:Int, count:Int, type:Int, offset:DataPointer, instanceCount:Int):Void { this.drawElementsInstanced(mode, count, type, offset, instanceCount); } public inline function drawRangeElements(mode:Int, start:Int, end:Int, count:Int, type:Int, offset:DataPointer):Void { this.drawRangeElements(mode, start, end, count, type, offset); } public inline function enable(cap:Int):Void { this.enable(cap); } public inline function enableVertexAttribArray(index:Int):Void { this.enableVertexAttribArray(index); } public inline function endQuery(target:Int):Void { this.endQuery(target); } public inline function endTransformFeedback():Void { this.endTransformFeedback(); } public inline function fenceSync(condition:Int, flags:Int):GLSync { return this.fenceSync(condition, flags); } public inline function finish():Void { this.finish(); } public inline function flush():Void { this.flush(); } public inline function framebufferRenderbuffer(target:Int, attachment:Int, renderbuffertarget:Int, renderbuffer:GLRenderbuffer):Void { this.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); } public inline function framebufferTexture2D(target:Int, attachment:Int, textarget:Int, texture:GLTexture, level:Int):Void { this.framebufferTexture2D(target, attachment, textarget, texture, level); } public inline function framebufferTextureLayer(target:Int, attachment:Int, texture:GLTexture, level:Int, layer:Int):Void { this.framebufferTextureLayer(target, attachment, texture, level, layer); } public inline function frontFace(mode:Int):Void { this.frontFace(mode); } public function genBuffers(n:Int, buffers:Array = null):Array { if (buffers == null) buffers = []; for (i in 0...n) { buffers[i] = createBuffer(); } return buffers; } public inline function generateMipmap(target:Int):Void { this.generateMipmap(target); } public function genFramebuffers(n:Int, framebuffers:Array = null):Array { if (framebuffers == null) framebuffers = []; for (i in 0...n) { framebuffers[i] = createFramebuffer(); } return framebuffers; } public function genQueries(n:Int, queries:Array = null):Array { if (queries == null) queries = []; for (i in 0...n) { queries[i] = createQuery(); } return queries; } public function genRenderbuffers(n:Int, renderbuffers:Array = null):Array { if (renderbuffers == null) renderbuffers = []; for (i in 0...n) { renderbuffers[i] = createRenderbuffer(); } return renderbuffers; } public function genSamplers(n:Int, samplers:Array = null):Array { if (samplers == null) samplers = []; for (i in 0...n) { samplers[i] = createSampler(); } return samplers; } public function genTextures(n:Int, textures:Array = null):Array { if (textures == null) textures = []; for (i in 0...n) { textures[i] = createTexture(); } return textures; } public function genTransformFeedbacks(n:Int, transformFeedbacks:Array = null):Array { if (transformFeedbacks == null) transformFeedbacks = []; for (i in 0...n) { transformFeedbacks[i] = createTransformFeedback(); } return transformFeedbacks; } public inline function getActiveAttrib(program:GLProgram, index:Int):GLActiveInfo { return this.getActiveAttrib(program, index); } public inline function getActiveUniform(program:GLProgram, index:Int):GLActiveInfo { return this.getActiveUniform(program, index); } public inline function getActiveUniformBlocki(program:GLProgram, uniformBlockIndex:Int, pname:Int):Int { return this.getActiveUniformBlocki(program, uniformBlockIndex, pname); } public inline function getActiveUniformBlockiv(program:GLProgram, uniformBlockIndex:Int, pname:Int, params:DataPointer):Void { this.getActiveUniformBlockiv(program, uniformBlockIndex, pname, params); } public inline function getActiveUniformBlockName(program:GLProgram, uniformBlockIndex:Int):String { return this.getActiveUniformBlockName(program, uniformBlockIndex); } public inline function getActiveUniformsiv(program:GLProgram, uniformIndices:Array, pname:Int, params:DataPointer):Void { this.getActiveUniformsiv(program, uniformIndices, pname, params); } public inline function getAttachedShaders(program:GLProgram):Array { return this.getAttachedShaders(program); } public inline function getAttribLocation(program:GLProgram, name:String):Int { return this.getAttribLocation(program, name); } public inline function getBoolean(pname:Int):Bool { return this.getBoolean(pname); } public inline function getBooleanv(pname:Int, params:DataPointer):Void { this.getBooleanv(pname, params); } public inline function getBufferParameteri(target:Int, pname:Int):Int { return this.getBufferParameteri(target, pname); } public inline function getBufferParameteri64v(target:Int, pname:Int, params:DataPointer):Void { this.getBufferParameteri64v(target, pname, params); } public inline function getBufferParameteriv(target:Int, pname:Int, params:DataPointer):Void { this.getBufferParameteriv(target, pname, params); } public inline function getBufferPointerv(target:Int, pname:Int):DataPointer { return this.getBufferPointerv(target, pname); } public inline function getError():Int { return this.getError(); } public inline function getFloat(pname:Int):Float { return this.getFloat(pname); } public inline function getFloatv(pname:Int, params:DataPointer):Void { this.getFloatv(pname, params); } public inline function getExtension(name:String):Dynamic { return this.getExtension(name); } public inline function getFragDataLocation(program:GLProgram, name:String):Int { return this.getFragDataLocation(program, name); } public inline function getFramebufferAttachmentParameteri(target:Int, attachment:Int, pname:Int):Int { return this.getFramebufferAttachmentParameteri(target, attachment, pname); } public inline function getFramebufferAttachmentParameteriv(target:Int, attachment:Int, pname:Int, params:DataPointer):Void { this.getFramebufferAttachmentParameteriv(target, attachment, pname, params); } public inline function getInteger(pname:Int):Int { return this.getInteger(pname); } public inline function getInteger64(pname:Int):Int64 { return this.getInteger64(pname); } public inline function getInteger64i(pname:Int):Int64 { return this.getInteger64(pname); } public inline function getInteger64i_v(pname:Int, index:Int, params:DataPointer):Void { this.getInteger64i_v(pname, index, params); } public inline function getInteger64v(pname:Int, params:DataPointer):Void { this.getInteger64v(pname, params); } public inline function getIntegeri_v(pname:Int, index:Int, params:DataPointer):Void { this.getIntegeri_v(pname, index, params); } public inline function getIntegerv(pname:Int, params:DataPointer):Void { this.getIntegerv(pname, params); } public inline function getInternalformati(target:Int, internalformat:Int, pname:Int):Int { return this.getInternalformatParameter(target, internalformat, pname); } public inline function getInternalformativ(target:Int, internalformat:Int, pname:Int, bufSize, params:DataPointer):Void { return this.getInternalformativ(target, internalformat, pname, bufSize, params); } public inline function getProgramBinary(program:GLProgram, binaryFormat:Int):Bytes { return this.getProgramBinary(program, binaryFormat); } public inline function getProgrami(program:GLProgram, pname:Int):Int { return this.getProgrami(program, pname); } public inline function getProgramInfoLog(program:GLProgram):String { return this.getProgramInfoLog(program); } public inline function getProgramiv(program:GLProgram, pname:Int, params:DataPointer):Void { this.getProgramiv(program, pname, params); } public inline function getQueryi(target:Int, pname:Int):Int { return this.getQueryi(target, pname); } public inline function getQueryiv(target:Int, pname:Int, params:DataPointer):Void { this.getQueryiv(target, pname, params); } public inline function getQueryObjectui(query:GLQuery, pname:Int):Int { return this.getQueryObjectui(query, pname); } public inline function getQueryObjectuiv(query:GLQuery, pname:Int, params:DataPointer):Void { this.getQueryObjectuiv(query, pname, params); } public inline function getRenderbufferParameteri(target:Int, pname:Int):Int { return this.getRenderbufferParameteri(target, pname); } public inline function getRenderbufferParameteriv(target:Int, pname:Int, params:DataPointer):Void { this.getRenderbufferParameteriv(target, pname, params); } public inline function getSamplerParameteri(sampler:GLSampler, pname:Int):Int { return this.getSamplerParameteri(sampler, pname); } public inline function getSamplerParameteriv(sampler:GLSampler, pname:Int, params:DataPointer):Void { this.getSamplerParameteriv(sampler, pname, params); } public inline function getSamplerParameterf(sampler:GLSampler, pname:Int):Float { return this.getSamplerParameterf(sampler, pname); } public inline function getSamplerParameterfv(sampler:GLSampler, pname:Int, params:DataPointer):Void { this.getSamplerParameterfv(sampler, pname, params); } public inline function getShaderInfoLog(shader:GLShader):String { return this.getShaderInfoLog(shader); } public inline function getShaderi(shader:GLShader, pname:Int):Int { return this.getShaderi(shader, pname); } public inline function getShaderiv(shader:GLShader, pname:Int, params:DataPointer):Void { this.getShaderiv(shader, pname, params); } public inline function getShaderPrecisionFormat(shadertype:Int, precisiontype:Int):GLShaderPrecisionFormat { return this.getShaderPrecisionFormat(shadertype, precisiontype); } public inline function getShaderSource(shader:GLShader):String { return this.getShaderSource(shader); } public inline function getString(name:Int):String { return this.getString(name); } public inline function getStringi(name:Int, index:Int):String { return this.getStringi(name, index); } public inline function getSyncParameteri(sync:GLSync, pname:Int):Int { return this.getSyncParameteri(sync, pname); } public inline function getSyncParameteriv(sync:GLSync, pname:Int, params:DataPointer):Void { this.getSyncParameteriv(sync, pname, params); } public inline function getTexParameterf(target:Int, pname:Int):Float { return this.getTexParameterf(target, pname); } public inline function getTexParameterfv(target:Int, pname:Int, params:DataPointer):Void { this.getTexParameterfv(target, pname, params); } public inline function getTexParameteri(target:Int, pname:Int):Int { return this.getTexParameteri(target, pname); } public inline function getTexParameteriv(target:Int, pname:Int, params:DataPointer):Void { this.getTexParameteriv(target, pname, params); } public inline function getTransformFeedbackVarying(program:GLProgram, index:Int):GLActiveInfo { return this.getTransformFeedbackVarying(program, index); } public inline function getUniformf(program:GLProgram, location:GLUniformLocation):Float { return this.getUniformf(program, location); } public inline function getUniformfv(program:GLProgram, location:GLUniformLocation, params:DataPointer):Void { this.getUniformfv(program, location, params); } public inline function getUniformi(program:GLProgram, location:GLUniformLocation):Int { return this.getUniformi(program, location); } public inline function getUniformiv(program:GLProgram, location:GLUniformLocation, params:DataPointer):Void { this.getUniformiv(program, location, params); } public inline function getUniformui(program:GLProgram, location:GLUniformLocation):Int { return this.getUniformui(program, location); } public inline function getUniformuiv(program:GLProgram, location:GLUniformLocation, params:DataPointer):Void { return this.getUniformuiv(program, location, params); } public inline function getUniformBlockIndex(program:GLProgram, uniformBlockName:String):Int { return this.getUniformBlockIndex(program, uniformBlockName); } public inline function getUniformIndices(program:GLProgram, uniformNames:Array):Array { return this.getUniformIndices(program, uniformNames); } public inline function getUniformLocation(program:GLProgram, name:String):GLUniformLocation { return this.getUniformLocation(program, name); } public inline function getVertexAttribf(index:Int, pname:Int):Float { return this.getVertexAttribf(index, pname); } public inline function getVertexAttribfv(index:Int, pname:Int, params:DataPointer):Void { this.getVertexAttribfv(index, pname, params); } public inline function getVertexAttribi(index:Int, pname:Int):Int { return this.getVertexAttrib(index, pname); } public inline function getVertexAttribIi(index:Int, pname:Int):Int { return this.getVertexAttribIi(index, pname); } public inline function getVertexAttribIiv(index:Int, pname:Int, params:DataPointer):Void { return this.getVertexAttribIiv(index, pname, params); } public inline function getVertexAttribIui(index:Int, pname:Int):Int { return this.getVertexAttribIui(index, pname); } public inline function getVertexAttribIuiv(index:Int, pname:Int, params:DataPointer):Void { return this.getVertexAttribIuiv(index, pname, params); } public inline function getVertexAttribiv(index:Int, pname:Int, params:DataPointer):Void { this.getVertexAttribiv(index, pname, params); } public inline function getVertexAttribPointerv(index:Int, pname:Int):DataPointer { return this.getVertexAttribPointerv(index, pname); } public inline function hint(target:Int, mode:Int):Void { this.hint(target, mode); } public inline function invalidateFramebuffer(target:Int, attachments:Array):Void { this.invalidateFramebuffer(target, attachments); } public inline function invalidateSubFramebuffer(target:Int, attachments:Array, x:Int, y:Int, width:Int, height:Int):Void { this.invalidateSubFramebuffer(target, attachments, x, y, width, height); } public inline function isBuffer(buffer:GLBuffer):Bool { return this.isBuffer(buffer); } public inline function isEnabled(cap:Int):Bool { return this.isEnabled(cap); } public inline function isFramebuffer(framebuffer:GLFramebuffer):Bool { return this.isFramebuffer(framebuffer); } public inline function isProgram(program:GLProgram):Bool { return this.isProgram(program); } public inline function isQuery(query:GLQuery):Bool { return this.isQuery(query); } public inline function isRenderbuffer(renderbuffer:GLRenderbuffer):Bool { return this.isRenderbuffer(renderbuffer); } public inline function isSampler(sampler:GLSampler):Bool { return this.isSampler(sampler); } public inline function isShader(shader:GLShader):Bool { return this.isShader(shader); } public inline function isTexture(texture:GLTexture):Bool { return this.isTexture(texture); } public inline function isTransformFeedback(transformFeedback:GLTransformFeedback):Bool { return this.isTransformFeedback(transformFeedback); } public inline function isVertexArray(vertexArray:GLVertexArrayObject):Bool { return this.isVertexArray(vertexArray); } public inline function lineWidth(width:Float):Void { this.lineWidth(width); } public inline function linkProgram(program:GLProgram):Void { this.linkProgram(program); } public inline function mapBufferRange(target:Int, offset:DataPointer, length:Int, access:Int):DataPointer { return this.mapBufferRange(target, offset, length, access); } public inline function pauseTransformFeedback():Void { this.pauseTransformFeedback(); } public inline function pixelStorei(pname:Int, param:Int):Void { this.pixelStorei(pname, param); } public inline function polygonOffset(factor:Float, units:Float):Void { this.polygonOffset(factor, units); } public inline function programBinary(program:GLProgram, binaryFormat:Int, binary:DataPointer, length:Int):Void { this.programBinary(program, binaryFormat, binary, length); } public inline function programParameteri(program:GLProgram, pname:Int, value:Int):Void { this.programParameteri(program, pname, value); } public inline function readBuffer(src:Int):Void { this.readBuffer(src); } public inline function readPixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, data:DataPointer):Void { this.readPixels(x, y, width, height, format, type, data); } public inline function releaseShaderCompiler():Void { this.releaseShaderCompiler(); } public inline function renderbufferStorage(target:Int, internalformat:Int, width:Int, height:Int):Void { this.renderbufferStorage(target, internalformat, width, height); } public inline function renderbufferStorageMultisample(target:Int, samples:Int, internalformat:Int, width:Int, height:Int):Void { this.renderbufferStorageMultisample(target, samples, internalformat, width, height); } public inline function resumeTransformFeedback():Void { this.resumeTransformFeedback(); } public inline function sampleCoverage(value:Float, invert:Bool):Void { this.sampleCoverage(value, invert); } public inline function samplerParameterf(sampler:GLSampler, pname:Int, param:Float):Void { this.samplerParameterf(sampler, pname, param); } public inline function samplerParameteri(sampler:GLSampler, pname:Int, param:Int):Void { this.samplerParameteri(sampler, pname, param); } public inline function scissor(x:Int, y:Int, width:Int, height:Int):Void { this.scissor(x, y, width, height); } public inline function shaderBinary(shaders:Array, binaryformat:Int, binary:DataPointer, length:Int):Void { this.shaderBinary(shaders, binaryformat, binary, length); } public inline function shaderSource(shader:GLShader, source:String):Void { this.shaderSource(shader, source); } public inline function stencilFunc(func:Int, ref:Int, mask:Int):Void { this.stencilFunc(func, ref, mask); } public inline function stencilFuncSeparate(face:Int, func:Int, ref:Int, mask:Int):Void { this.stencilFuncSeparate(face, func, ref, mask); } public inline function stencilMask(mask:Int):Void { this.stencilMask(mask); } public inline function stencilMaskSeparate(face:Int, mask:Int):Void { this.stencilMaskSeparate(face, mask); } public inline function stencilOp(fail:Int, zfail:Int, zpass:Int):Void { this.stencilOp(fail, zfail, zpass); } public inline function stencilOpSeparate(face:Int, fail:Int, zfail:Int, zpass:Int):Void { this.stencilOpSeparate(face, fail, zfail, zpass); } public inline function texImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, data:DataPointer):Void { this.texImage2D(target, level, internalformat, width, height, border, format, type, data); } public inline function texImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, data:DataPointer):Void { this.texImage3D(target, level, internalformat, width, height, depth, border, format, type, data); } public inline function texStorage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int):Void { this.texStorage2D(target, level, internalformat, width, height); } public inline function texStorage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int):Void { this.texStorage3D(target, level, internalformat, width, height, depth); } public inline function texParameterf(target:Int, pname:Int, param:Float):Void { this.texParameterf(target, pname, param); } public inline function texParameteri(target:Int, pname:Int, param:Int):Void { this.texParameteri(target, pname, param); } public inline function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, data:DataPointer):Void { this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, data); } public inline function texSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, data:DataPointer):Void { this.texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); } public inline function transformFeedbackVaryings(program:GLProgram, varyings:Array, bufferMode:Int):Void { this.transformFeedbackVaryings(program, varyings, bufferMode); } public inline function uniform1f(location:GLUniformLocation, v0:Float):Void { this.uniform1f(location, v0); } public inline function uniform1fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform1fv(location, count, v); } public inline function uniform1i(location:GLUniformLocation, v0:Int):Void { this.uniform1i(location, v0); } public inline function uniform1iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform1iv(location, count, v); } public inline function uniform1ui(location:GLUniformLocation, v0:Int):Void { this.uniform1ui(location, v0); } public inline function uniform1uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform1uiv(location, count, v); } public inline function uniform2f(location:GLUniformLocation, v0:Float, v1:Float):Void { this.uniform2f(location, v0, v1); } public inline function uniform2fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform2fv(location, count, v); } public inline function uniform2i(location:GLUniformLocation, v0:Int, v1:Int):Void { this.uniform2i(location, v0, v1); } public inline function uniform2iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform2iv(location, count, v); } public inline function uniform2ui(location:GLUniformLocation, v0:Int, v1:Int):Void { this.uniform2ui(location, v0, v1); } public inline function uniform2uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform2uiv(location, count, v); } public inline function uniform3f(location:GLUniformLocation, v0:Float, v1:Float, v2:Float):Void { this.uniform3f(location, v0, v1, v2); } public inline function uniform3fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform3fv(location, count, v); } public inline function uniform3i(location:GLUniformLocation, v0:Int, v1:Int, v2:Int):Void { this.uniform3i(location, v0, v1, v2); } public inline function uniform3iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform3iv(location, count, v); } public inline function uniform3ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int):Void { this.uniform3ui(location, v0, v1, v2); } public inline function uniform3uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform3uiv(location, count, v); } public inline function uniform4f(location:GLUniformLocation, v0:Float, v1:Float, v2:Float, v3:Float):Void { this.uniform4f(location, v0, v1, v2, v3); } public inline function uniform4fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform4fv(location, count, v); } public inline function uniform4i(location:GLUniformLocation, v0:Int, v1:Int, v2:Int, v3:Int):Void { this.uniform4i(location, v0, v1, v2, v3); } public inline function uniform4iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform4iv(location, count, v); } public inline function uniform4ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int, v3:Int):Void { this.uniform4ui(location, v0, v1, v2, v3); } public inline function uniform4uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { this.uniform4uiv(location, count, v); } public inline function uniformBlockBinding(program:GLProgram, uniformBlockIndex:Int, uniformBlockBinding:Int):Void { this.uniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding); } public inline function uniformMatrix2fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { this.uniformMatrix2fv(location, count, transpose, v); } public inline function uniformMatrix2x3fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { this.uniformMatrix2x3fv(location, count, transpose, v); } public inline function uniformMatrix2x4fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { this.uniformMatrix2x4fv(location, count, transpose, v); } public inline function uniformMatrix3fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { this.uniformMatrix3fv(location, count, transpose, v); } public inline function uniformMatrix3x2fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { this.uniformMatrix3x2fv(location, count, transpose, v); } public inline function uniformMatrix3x4fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { this.uniformMatrix3x4fv(location, count, transpose, v); } public inline function uniformMatrix4fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { this.uniformMatrix4fv(location, count, transpose, v); } public inline function uniformMatrix4x2fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { this.uniformMatrix4x2fv(location, count, transpose, v); } public inline function uniformMatrix4x3fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { this.uniformMatrix4x3fv(location, count, transpose, v); } public inline function unmapBuffer(target:Int):Bool { return this.unmapBuffer(target); } public inline function useProgram(program:GLProgram):Void { this.useProgram(program); } public inline function validateProgram(program:GLProgram):Void { this.validateProgram(program); } public inline function vertexAttrib1f(indx:Int, x:Float):Void { this.vertexAttrib1f(indx, x); } public inline function vertexAttrib1fv(indx:Int, values:DataPointer):Void { this.vertexAttrib1fv(indx, values); } public inline function vertexAttrib2f(indx:Int, x:Float, y:Float):Void { this.vertexAttrib2f(indx, x, y); } public inline function vertexAttrib2fv(indx:Int, values:DataPointer):Void { this.vertexAttrib2fv(indx, values); } public inline function vertexAttrib3f(indx:Int, x:Float, y:Float, z:Float):Void { this.vertexAttrib3f(indx, x, y, z); } public inline function vertexAttrib3fv(indx:Int, values:DataPointer):Void { this.vertexAttrib3fv(indx, values); } public inline function vertexAttrib4f(indx:Int, x:Float, y:Float, z:Float, w:Float):Void { this.vertexAttrib4f(indx, x, y, z, w); } public inline function vertexAttrib4fv(indx:Int, values:DataPointer):Void { this.vertexAttrib4fv(indx, values); } public inline function vertexAttribDivisor(index:Int, divisor:Int):Void { this.vertexAttribDivisor(index, divisor); } public inline function vertexAttribI4i(indx:Int, x:Int, y:Int, z:Int, w:Int):Void { this.vertexAttribI4i(indx, x, y, z, w); } public inline function vertexAttribI4iv(indx:Int, values:DataPointer):Void { this.vertexAttribI4iv(indx, values); } public inline function vertexAttribI4ui(indx:Int, x:Int, y:Int, z:Int, w:Int):Void { this.vertexAttribI4ui(indx, x, y, z, w); } public inline function vertexAttribI4uiv(indx:Int, values:DataPointer):Void { this.vertexAttribI4uiv(indx, values); } public inline function vertexAttribIPointer(indx:Int, size:Int, type:Int, stride:Int, pointer:DataPointer):Void { this.vertexAttribIPointer(indx, size, type, stride, pointer); } public inline function vertexAttribPointer(indx:Int, size:Int, type:Int, normalized:Bool, stride:Int, pointer:DataPointer):Void { this.vertexAttribPointer(indx, size, type, normalized, stride, pointer); } public inline function viewport(x:Int, y:Int, width:Int, height:Int):Void { this.viewport(x, y, width, height); } public inline function waitSync(sync:GLSync, flags:Int, timeout:Int64):Void { this.waitSync(sync, flags, timeout); } @:from private static function fromGL(gl:Class):OpenGLES3RenderContext { return cast GL.context; } @:from private static function fromRenderContext(context:RenderContext):OpenGLES3RenderContext { return context.gles3; } } #else import lime.graphics.opengl.GL; @:forward() @:transitive abstract OpenGLES3RenderContext(Dynamic) from Dynamic to Dynamic { @:from private static function fromRenderContext(context:RenderContext):OpenGLES3RenderContext { return null; } @:from private static function fromGL(gl:Class):OpenGLES3RenderContext { return null; } @:from private static function fromOpenGLES2RenderContext(context:OpenGLES2RenderContext):OpenGLES3RenderContext { return null; } @:from private static function fromWebGLRenderContext(context:WebGLRenderContext):OpenGLES3RenderContext { return null; } @:from private static function fromWebGL2RenderContext(context:WebGL2RenderContext):OpenGLES3RenderContext { return null; } } #end #end ================================================ FILE: src/lime/graphics/OpenGLRenderContext.hx ================================================ package lime.graphics; #if (!lime_doc_gen || lime_opengl) #if (lime_doc_gen || (sys && lime_cffi && !doc_gen)) import lime._internal.backend.native.NativeOpenGLRenderContext; /** The `OpenGLRenderContext` allows access to OpenGL features when OpenGL is the render context type of the `Window`. Historically, Lime was designed for WebGL render support on all platforms, and support has expanded to provide additional OpenGL ES native APIs. Support for desktop OpenGL-specific features is currently sparse, but the `OpenGLRenderContext` provides the platform for us to add additional desktop specific features. The `OpenGLRenderContext` is not compatible with mobile or web targets, but it can be converted to an OpenGL ES or a WebGL-style context for cross-platform development. You can convert from `lime.graphics.RenderContext` or `lime.graphics.opengl.GL`, and can convert to `lime.graphics.OpenGLES3RenderContext`, `lime.graphics.OpenGLES2RenderContext`, `lime.graphics.WebGL2RenderContext`, or `lime.graphics.WebGLRenderContext` directly if desired: ```haxe var gl:OpenGLRenderContext = window.context; var gl:OpenGLRenderContext = GL; var gles3:OpenGLES3RenderContext = gl; var gles2:OpenGLES2RenderContext = gl; var webgl2:WebGL2RenderContext = gl; var webgl:WebGLRenderContext = gl; ``` **/ @:access(lime.graphics.RenderContext) @:forward() @:transitive abstract OpenGLRenderContext(NativeOpenGLRenderContext) from NativeOpenGLRenderContext to NativeOpenGLRenderContext { @:from private static function fromRenderContext(context:RenderContext):OpenGLRenderContext { return context.gl; } } #else @:forward() @:transitive abstract OpenGLRenderContext(Dynamic) from Dynamic to Dynamic { @:from private static function fromRenderContext(context:RenderContext):OpenGLRenderContext { return null; } } #end #end ================================================ FILE: src/lime/graphics/PixelFormat.hx ================================================ package lime.graphics; /** An enum containing different pixel encoding formats for image data **/ #if (haxe_ver >= 4.0) enum #else @:enum #end abstract PixelFormat(Int) from Int to Int from UInt to UInt { /** An image encoded in 32-bit RGBA color order **/ public var RGBA32 = 0; /** An image encoded in 32-bit ARGB color order **/ public var ARGB32 = 1; /** An image encoded in 32-bit BGRA color order **/ public var BGRA32 = 2; } ================================================ FILE: src/lime/graphics/RenderContext.hx ================================================ package lime.graphics; import lime.app.Event; import lime.ui.Window; /** The `RenderContext` provides access to rendering for a Lime `Window`. Only one render context type is used at once, but when `OPENGL` or `OPENGLES` is the context type, compatibility contexts for other forms of GL (such as WebGL) may be available also. **/ class RenderContext { /** Additional information about the current context **/ public var attributes(default, null):RenderContextAttributes; /** Access to the current Cairo render context, if available **/ #if (!lime_doc_gen || native) public var cairo(default, null):CairoRenderContext; #end /** Access to the current HTML5 canvas render context, if available **/ #if (!lime_doc_gen || (js && html5)) public var canvas2D(default, null):Canvas2DRenderContext; #end /** Access to the current HTML5 DOM render context, if available **/ #if (!lime_doc_gen || (js && html5)) public var dom(default, null):DOMRenderContext; #end /** Access to the current Flash render context, if available **/ #if (!lime_doc_gen || flash) public var flash(default, null):FlashRenderContext; #end /** Access to the current OpenGL render API, if available **/ #if (!lime_doc_gen || (native && desktop)) public var gl(default, null):OpenGLRenderContext; #end /** Access to the current OpenGL ES 2.0 render API, if available **/ #if (!lime_doc_gen || native) public var gles2(default, null):OpenGLES2RenderContext; #end /** Access to the current OpenGL ES 3.0 render API, if available **/ #if (!lime_doc_gen || native) public var gles3(default, null):OpenGLES3RenderContext; #end /** The type of the current `RenderContext` **/ public var type(default, null):RenderContextType; public var version(default, null):String; /** Access to the current WebGL render API, if available **/ #if (!lime_doc_gen || native || (js && html5)) public var webgl(default, null):WebGLRenderContext; #end /** Access to the current WebGL 2 render API, if available **/ #if (!lime_doc_gen || native || (js && html5)) public var webgl2(default, null):WebGL2RenderContext; #end public var window(default, null):Window; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/RenderContextAttributes.hx ================================================ package lime.graphics; /** Additional options possible for a render context **/ typedef RenderContextAttributes = { /** Whether to enable anti-aliasing, `0` is disabled, `2` enables 2x2 anti-aliasing or `4` enables 4x4 anti-aliasing. **/ @:optional var antialiasing:Int; /** An optional `background` property to be provided to rendering, a value of `null` means no background color. **/ @:optional var background:Null; /** The color depth of the rendering context in bits **/ @:optional var colorDepth:Int; /** Whether a depth buffer is enabled **/ @:optional var depth:Bool; /** Whether hardware acceleration is allowed **/ @:optional var hardware:Bool; #if html5 /** Whether to preserve the `HTMLCanvas`'s image data after rendering **/ @:optional var preserveDrawingBuffer:Bool; #end /** Whether a stencil buffer is enabled **/ @:optional var stencil:Bool; /** The type of render context requested **/ @:optional var type:RenderContextType; @:optional var version:String; /** Whether vertical-sync (VSync) is enabled **/ @:optional var vsync:Bool; } ================================================ FILE: src/lime/graphics/RenderContextType.hx ================================================ package lime.graphics; /** An enum for possible render context types **/ #if (haxe_ver >= 4.0) enum #else @:enum #end abstract RenderContextType(String) from String to String { /** Describes a Cairo render context **/ var CAIRO = "cairo"; /** Describes an HTML5 canvas render context **/ var CANVAS = "canvas"; /** Describes an HTML5 DOM render context **/ var DOM = "dom"; /** Describes a Flash render context **/ var FLASH = "flash"; /** Describes an OpenGL render context **/ var OPENGL = "opengl"; /** Describes an OpenGL ES render context **/ var OPENGLES = "opengles"; /** Describes a WebGL render context **/ var WEBGL = "webgl"; /** Describes a custom render context **/ var CUSTOM = "custom"; } ================================================ FILE: src/lime/graphics/WebGL2RenderContext.hx ================================================ package lime.graphics; #if (lime_webgl && !doc_gen) import lime._internal.backend.html5.HTML5WebGL2RenderContext; import lime.graphics.opengl.*; import lime.utils.DataPointer; @:access(lime.graphics.RenderContext) @:forward() @:transitive abstract WebGL2RenderContext(HTML5WebGL2RenderContext) from HTML5WebGL2RenderContext to HTML5WebGL2RenderContext { public inline function bufferData(target:Int, srcData:Dynamic, usage:Int, ?srcOffset:Int, ?length:Int):Void { if (srcOffset != null) { this.bufferData(target, srcData, usage, srcOffset, length); } else { this.bufferData(target, srcData, usage); } } public inline function bufferSubData(target:Int, dstByteOffset:Int, srcData:Dynamic, ?srcOffset:Int, ?length:Int):Void { if (srcOffset != null) { this.bufferSubData(target, dstByteOffset, srcData, srcOffset, length); } else { this.bufferSubData(target, dstByteOffset, srcData); } } public inline function compressedTexImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, srcData:Dynamic, ?srcOffset:Int, ?srcLengthOverride:Int):Void { if (srcOffset != null) { this.compressedTexImage2D(target, level, internalformat, width, height, border, srcData, srcOffset, srcLengthOverride); } else { this.compressedTexImage2D(target, level, internalformat, width, height, border, srcData); } } public inline function compressedTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, srcData:Dynamic, ?srcOffset:Int, ?srcLengthOverride:Int):Void { if (srcOffset != null) { this.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, srcData, srcOffset, srcLengthOverride); } else { this.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, srcData); } } public inline function getBufferSubData(target:Int, srcByteOffset:DataPointer, dstData:Dynamic, ?srcOffset:Dynamic, ?length:Int):Void { if (srcOffset != null) { this.getBufferSubData(target, srcByteOffset, dstData, srcOffset, length); } else { this.getBufferSubData(target, srcByteOffset, dstData); } } public inline function readPixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:Dynamic, ?dstOffset:Int):Void { if (dstOffset != null) { this.readPixels(x, y, width, height, format, type, pixels, dstOffset); } else { this.readPixels(x, y, width, height, format, type, pixels); } } public inline function texImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Dynamic, ?format:Int, ?type:Int, ?srcData:Dynamic, ?srcOffset:Int):Void { if (srcOffset != null) { this.texImage2D(target, level, internalformat, width, height, border, format, type, srcData, srcOffset); } else if (format != null) { this.texImage2D(target, level, internalformat, width, height, border, format, type, srcData); } else { this.texImage2D(target, level, internalformat, width, height, border); // target, level, internalformat, format, type, pixels } } public inline function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Dynamic, ?type:Int, ?srcData:Dynamic, ?srcOffset:Int):Void { if (srcOffset != null) { this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, srcData, srcOffset); } else if (type != null) { this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, srcData); } else { this.texSubImage2D(target, level, xoffset, yoffset, width, height, format); // target, level, xoffset, yoffset, format, type, pixels } } public inline function uniform1fv(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniform1fv(location, data, srcOffset, srcLength); } else { this.uniform1fv(location, data); } } public inline function uniform1iv(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniform1iv(location, data, srcOffset, srcLength); } else { this.uniform1iv(location, data); } } public function uniform2fv(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniform2fv(location, data, srcOffset, srcLength); } else { this.uniform2fv(location, data); } } public inline function uniform2iv(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniform2iv(location, data, srcOffset, srcLength); } else { this.uniform2iv(location, data); } } public inline function uniform3fv(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniform3fv(location, data, srcOffset, srcLength); } else { this.uniform3fv(location, data); } } public inline function uniform3iv(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniform3iv(location, data, srcOffset, srcLength); } else { this.uniform3iv(location, data); } } public inline function uniform4fv(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniform4fv(location, data, srcOffset, srcLength); } else { this.uniform4fv(location, data); } } public inline function uniform4iv(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniform4iv(location, data, srcOffset, srcLength); } else { this.uniform4iv(location, data); } } public inline function uniformMatrix2fv(location:GLUniformLocation, transpose:Bool, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniformMatrix2fv(location, transpose, data, srcOffset, srcLength); } else { this.uniformMatrix2fv(location, transpose, data); } } public inline function uniformMatrix3fv(location:GLUniformLocation, transpose:Bool, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniformMatrix3fv(location, transpose, data, srcOffset, srcLength); } else { this.uniformMatrix3fv(location, transpose, data); } } public inline function uniformMatrix4fv(location:GLUniformLocation, transpose:Bool, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { if (srcOffset != null) { this.uniformMatrix4fv(location, transpose, data, srcOffset, srcLength); } else { this.uniformMatrix4fv(location, transpose, data); } } @:from private static function fromGL(gl:Class):WebGL2RenderContext { return null; } @:from private static function fromRenderContext(context:RenderContext):WebGL2RenderContext { return context.webgl2; } @:from private static function toWebGLRenderContext(gl:WebGLRenderContext):WebGL2RenderContext { return cast gl; } } #elseif (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) import haxe.Int64; import lime.graphics.opengl.*; import lime.graphics.OpenGLRenderContext; import lime.utils.ArrayBuffer; import lime.utils.ArrayBufferView; import lime.utils.BytePointer; import lime.utils.DataPointer; import lime.utils.Float32Array; import lime.utils.Int32Array; import lime.utils.UInt32Array; /** The `WebGL2RenderContext` allows access to WebGL 2 features when OpenGL, OpenGL ES or WebGL is the render context type of the `Window`, and the current context supports WebGL 2 features. Using a WebGL context on a desktop platform enables support for cross-platform code that should run on all platforms (when using hardware acceleration), though support for WebGL 2 features are more limited than WebGL, and require an OpenGL ES 3.0 compatible desktop or mobile context. You can convert from `lime.graphics.RenderContext`, `lime.graphics.OpenGLRenderContext`, `lime.graphics.OpenGLES3RenderContext` or `lime.graphics.opengl.GL`, and can convert to `lime.graphics.WebGLRenderContext` directly if desired: ```haxe var webgl2:WebGL2RenderContext = window.context; var webgl2:WebGL2RenderContext = gl; var webgl2:WebGL2RenderContext = gles3; var webgl2:WebGL2RenderContext = GL; var webgl:WebGLRenderContext = webgl2; ``` **/ @:access(lime.graphics.RenderContext) #if !doc_gen @:transitive abstract WebGL2RenderContext(OpenGLRenderContext) from OpenGLRenderContext to OpenGLRenderContext { #else abstract WebGL2RenderContext(Dynamic) from Dynamic to Dynamic { #end private static var __tempPointer = new BytePointer(); public var DEPTH_BUFFER_BIT(get, never):Int; public var STENCIL_BUFFER_BIT(get, never):Int; public var COLOR_BUFFER_BIT(get, never):Int; public var POINTS(get, never):Int; public var LINES(get, never):Int; public var LINE_LOOP(get, never):Int; public var LINE_STRIP(get, never):Int; public var TRIANGLES(get, never):Int; public var TRIANGLE_STRIP(get, never):Int; public var TRIANGLE_FAN(get, never):Int; public var ZERO(get, never):Int; public var ONE(get, never):Int; public var SRC_COLOR(get, never):Int; public var ONE_MINUS_SRC_COLOR(get, never):Int; public var SRC_ALPHA(get, never):Int; public var ONE_MINUS_SRC_ALPHA(get, never):Int; public var DST_ALPHA(get, never):Int; public var ONE_MINUS_DST_ALPHA(get, never):Int; public var DST_COLOR(get, never):Int; public var ONE_MINUS_DST_COLOR(get, never):Int; public var SRC_ALPHA_SATURATE(get, never):Int; public var FUNC_ADD(get, never):Int; public var BLEND_EQUATION(get, never):Int; public var BLEND_EQUATION_RGB(get, never):Int; public var BLEND_EQUATION_ALPHA(get, never):Int; public var FUNC_SUBTRACT(get, never):Int; public var FUNC_REVERSE_SUBTRACT(get, never):Int; public var BLEND_DST_RGB(get, never):Int; public var BLEND_SRC_RGB(get, never):Int; public var BLEND_DST_ALPHA(get, never):Int; public var BLEND_SRC_ALPHA(get, never):Int; public var CONSTANT_COLOR(get, never):Int; public var ONE_MINUS_CONSTANT_COLOR(get, never):Int; public var CONSTANT_ALPHA(get, never):Int; public var ONE_MINUS_CONSTANT_ALPHA(get, never):Int; public var BLEND_COLOR(get, never):Int; public var ARRAY_BUFFER(get, never):Int; public var ELEMENT_ARRAY_BUFFER(get, never):Int; public var ARRAY_BUFFER_BINDING(get, never):Int; public var ELEMENT_ARRAY_BUFFER_BINDING(get, never):Int; public var STREAM_DRAW(get, never):Int; public var STATIC_DRAW(get, never):Int; public var DYNAMIC_DRAW(get, never):Int; public var BUFFER_SIZE(get, never):Int; public var BUFFER_USAGE(get, never):Int; public var CURRENT_VERTEX_ATTRIB(get, never):Int; public var FRONT(get, never):Int; public var BACK(get, never):Int; public var FRONT_AND_BACK(get, never):Int; public var CULL_FACE(get, never):Int; public var BLEND(get, never):Int; public var DITHER(get, never):Int; public var STENCIL_TEST(get, never):Int; public var DEPTH_TEST(get, never):Int; public var SCISSOR_TEST(get, never):Int; public var POLYGON_OFFSET_FILL(get, never):Int; public var SAMPLE_ALPHA_TO_COVERAGE(get, never):Int; public var SAMPLE_COVERAGE(get, never):Int; public var NO_ERROR(get, never):Int; public var INVALID_ENUM(get, never):Int; public var INVALID_VALUE(get, never):Int; public var INVALID_OPERATION(get, never):Int; public var OUT_OF_MEMORY(get, never):Int; public var CW(get, never):Int; public var CCW(get, never):Int; public var LINE_WIDTH(get, never):Int; public var ALIASED_POINT_SIZE_RANGE(get, never):Int; public var ALIASED_LINE_WIDTH_RANGE(get, never):Int; public var CULL_FACE_MODE(get, never):Int; public var FRONT_FACE(get, never):Int; public var DEPTH_RANGE(get, never):Int; public var DEPTH_WRITEMASK(get, never):Int; public var DEPTH_CLEAR_VALUE(get, never):Int; public var DEPTH_FUNC(get, never):Int; public var STENCIL_CLEAR_VALUE(get, never):Int; public var STENCIL_FUNC(get, never):Int; public var STENCIL_FAIL(get, never):Int; public var STENCIL_PASS_DEPTH_FAIL(get, never):Int; public var STENCIL_PASS_DEPTH_PASS(get, never):Int; public var STENCIL_REF(get, never):Int; public var STENCIL_VALUE_MASK(get, never):Int; public var STENCIL_WRITEMASK(get, never):Int; public var STENCIL_BACK_FUNC(get, never):Int; public var STENCIL_BACK_FAIL(get, never):Int; public var STENCIL_BACK_PASS_DEPTH_FAIL(get, never):Int; public var STENCIL_BACK_PASS_DEPTH_PASS(get, never):Int; public var STENCIL_BACK_REF(get, never):Int; public var STENCIL_BACK_VALUE_MASK(get, never):Int; public var STENCIL_BACK_WRITEMASK(get, never):Int; public var VIEWPORT(get, never):Int; public var SCISSOR_BOX(get, never):Int; public var COLOR_CLEAR_VALUE(get, never):Int; public var COLOR_WRITEMASK(get, never):Int; public var UNPACK_ALIGNMENT(get, never):Int; public var PACK_ALIGNMENT(get, never):Int; public var MAX_TEXTURE_SIZE(get, never):Int; public var MAX_VIEWPORT_DIMS(get, never):Int; public var SUBPIXEL_BITS(get, never):Int; public var RED_BITS(get, never):Int; public var GREEN_BITS(get, never):Int; public var BLUE_BITS(get, never):Int; public var ALPHA_BITS(get, never):Int; public var DEPTH_BITS(get, never):Int; public var STENCIL_BITS(get, never):Int; public var POLYGON_OFFSET_UNITS(get, never):Int; public var POLYGON_OFFSET_FACTOR(get, never):Int; public var TEXTURE_BINDING_2D(get, never):Int; public var SAMPLE_BUFFERS(get, never):Int; public var SAMPLES(get, never):Int; public var SAMPLE_COVERAGE_VALUE(get, never):Int; public var SAMPLE_COVERAGE_INVERT(get, never):Int; public var COMPRESSED_TEXTURE_FORMATS(get, never):Int; public var DONT_CARE(get, never):Int; public var FASTEST(get, never):Int; public var NICEST(get, never):Int; public var GENERATE_MIPMAP_HINT(get, never):Int; public var BYTE(get, never):Int; public var UNSIGNED_BYTE(get, never):Int; public var SHORT(get, never):Int; public var UNSIGNED_SHORT(get, never):Int; public var INT(get, never):Int; public var UNSIGNED_INT(get, never):Int; public var FLOAT(get, never):Int; public var DEPTH_COMPONENT(get, never):Int; public var ALPHA(get, never):Int; public var RGB(get, never):Int; public var RGBA(get, never):Int; public var LUMINANCE(get, never):Int; public var LUMINANCE_ALPHA(get, never):Int; public var UNSIGNED_SHORT_4_4_4_4(get, never):Int; public var UNSIGNED_SHORT_5_5_5_1(get, never):Int; public var UNSIGNED_SHORT_5_6_5(get, never):Int; public var FRAGMENT_SHADER(get, never):Int; public var VERTEX_SHADER(get, never):Int; public var MAX_VERTEX_ATTRIBS(get, never):Int; public var MAX_VERTEX_UNIFORM_VECTORS(get, never):Int; public var MAX_VARYING_VECTORS(get, never):Int; public var MAX_COMBINED_TEXTURE_IMAGE_UNITS(get, never):Int; public var MAX_VERTEX_TEXTURE_IMAGE_UNITS(get, never):Int; public var MAX_TEXTURE_IMAGE_UNITS(get, never):Int; public var MAX_FRAGMENT_UNIFORM_VECTORS(get, never):Int; public var SHADER_TYPE(get, never):Int; public var DELETE_STATUS(get, never):Int; public var LINK_STATUS(get, never):Int; public var VALIDATE_STATUS(get, never):Int; public var ATTACHED_SHADERS(get, never):Int; public var ACTIVE_UNIFORMS(get, never):Int; public var ACTIVE_ATTRIBUTES(get, never):Int; public var SHADING_LANGUAGE_VERSION(get, never):Int; public var CURRENT_PROGRAM(get, never):Int; public var NEVER(get, never):Int; public var LESS(get, never):Int; public var EQUAL(get, never):Int; public var LEQUAL(get, never):Int; public var GREATER(get, never):Int; public var NOTEQUAL(get, never):Int; public var GEQUAL(get, never):Int; public var ALWAYS(get, never):Int; public var KEEP(get, never):Int; public var REPLACE(get, never):Int; public var INCR(get, never):Int; public var DECR(get, never):Int; public var INVERT(get, never):Int; public var INCR_WRAP(get, never):Int; public var DECR_WRAP(get, never):Int; public var VENDOR(get, never):Int; public var RENDERER(get, never):Int; public var VERSION(get, never):Int; public var NEAREST(get, never):Int; public var LINEAR(get, never):Int; public var NEAREST_MIPMAP_NEAREST(get, never):Int; public var LINEAR_MIPMAP_NEAREST(get, never):Int; public var NEAREST_MIPMAP_LINEAR(get, never):Int; public var LINEAR_MIPMAP_LINEAR(get, never):Int; public var TEXTURE_MAG_FILTER(get, never):Int; public var TEXTURE_MIN_FILTER(get, never):Int; public var TEXTURE_WRAP_S(get, never):Int; public var TEXTURE_WRAP_T(get, never):Int; public var TEXTURE_2D(get, never):Int; public var TEXTURE(get, never):Int; public var TEXTURE_CUBE_MAP(get, never):Int; public var TEXTURE_BINDING_CUBE_MAP(get, never):Int; public var TEXTURE_CUBE_MAP_POSITIVE_X(get, never):Int; public var TEXTURE_CUBE_MAP_NEGATIVE_X(get, never):Int; public var TEXTURE_CUBE_MAP_POSITIVE_Y(get, never):Int; public var TEXTURE_CUBE_MAP_NEGATIVE_Y(get, never):Int; public var TEXTURE_CUBE_MAP_POSITIVE_Z(get, never):Int; public var TEXTURE_CUBE_MAP_NEGATIVE_Z(get, never):Int; public var MAX_CUBE_MAP_TEXTURE_SIZE(get, never):Int; public var TEXTURE0(get, never):Int; public var TEXTURE1(get, never):Int; public var TEXTURE2(get, never):Int; public var TEXTURE3(get, never):Int; public var TEXTURE4(get, never):Int; public var TEXTURE5(get, never):Int; public var TEXTURE6(get, never):Int; public var TEXTURE7(get, never):Int; public var TEXTURE8(get, never):Int; public var TEXTURE9(get, never):Int; public var TEXTURE10(get, never):Int; public var TEXTURE11(get, never):Int; public var TEXTURE12(get, never):Int; public var TEXTURE13(get, never):Int; public var TEXTURE14(get, never):Int; public var TEXTURE15(get, never):Int; public var TEXTURE16(get, never):Int; public var TEXTURE17(get, never):Int; public var TEXTURE18(get, never):Int; public var TEXTURE19(get, never):Int; public var TEXTURE20(get, never):Int; public var TEXTURE21(get, never):Int; public var TEXTURE22(get, never):Int; public var TEXTURE23(get, never):Int; public var TEXTURE24(get, never):Int; public var TEXTURE25(get, never):Int; public var TEXTURE26(get, never):Int; public var TEXTURE27(get, never):Int; public var TEXTURE28(get, never):Int; public var TEXTURE29(get, never):Int; public var TEXTURE30(get, never):Int; public var TEXTURE31(get, never):Int; public var ACTIVE_TEXTURE(get, never):Int; public var REPEAT(get, never):Int; public var CLAMP_TO_EDGE(get, never):Int; public var MIRRORED_REPEAT(get, never):Int; public var FLOAT_VEC2(get, never):Int; public var FLOAT_VEC3(get, never):Int; public var FLOAT_VEC4(get, never):Int; public var INT_VEC2(get, never):Int; public var INT_VEC3(get, never):Int; public var INT_VEC4(get, never):Int; public var BOOL(get, never):Int; public var BOOL_VEC2(get, never):Int; public var BOOL_VEC3(get, never):Int; public var BOOL_VEC4(get, never):Int; public var FLOAT_MAT2(get, never):Int; public var FLOAT_MAT3(get, never):Int; public var FLOAT_MAT4(get, never):Int; public var SAMPLER_2D(get, never):Int; public var SAMPLER_CUBE(get, never):Int; public var VERTEX_ATTRIB_ARRAY_ENABLED(get, never):Int; public var VERTEX_ATTRIB_ARRAY_SIZE(get, never):Int; public var VERTEX_ATTRIB_ARRAY_STRIDE(get, never):Int; public var VERTEX_ATTRIB_ARRAY_TYPE(get, never):Int; public var VERTEX_ATTRIB_ARRAY_NORMALIZED(get, never):Int; public var VERTEX_ATTRIB_ARRAY_POINTER(get, never):Int; public var VERTEX_ATTRIB_ARRAY_BUFFER_BINDING(get, never):Int; public var COMPILE_STATUS(get, never):Int; public var LOW_FLOAT(get, never):Int; public var MEDIUM_FLOAT(get, never):Int; public var HIGH_FLOAT(get, never):Int; public var LOW_INT(get, never):Int; public var MEDIUM_INT(get, never):Int; public var HIGH_INT(get, never):Int; public var FRAMEBUFFER(get, never):Int; public var RENDERBUFFER(get, never):Int; public var RGBA4(get, never):Int; public var RGB5_A1(get, never):Int; public var RGB565(get, never):Int; public var DEPTH_COMPONENT16(get, never):Int; public var STENCIL_INDEX(get, never):Int; public var STENCIL_INDEX8(get, never):Int; public var DEPTH_STENCIL(get, never):Int; public var RENDERBUFFER_WIDTH(get, never):Int; public var RENDERBUFFER_HEIGHT(get, never):Int; public var RENDERBUFFER_INTERNAL_FORMAT(get, never):Int; public var RENDERBUFFER_RED_SIZE(get, never):Int; public var RENDERBUFFER_GREEN_SIZE(get, never):Int; public var RENDERBUFFER_BLUE_SIZE(get, never):Int; public var RENDERBUFFER_ALPHA_SIZE(get, never):Int; public var RENDERBUFFER_DEPTH_SIZE(get, never):Int; public var RENDERBUFFER_STENCIL_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_OBJECT_NAME(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE(get, never):Int; public var COLOR_ATTACHMENT0(get, never):Int; public var DEPTH_ATTACHMENT(get, never):Int; public var STENCIL_ATTACHMENT(get, never):Int; public var DEPTH_STENCIL_ATTACHMENT(get, never):Int; public var NONE(get, never):Int; public var FRAMEBUFFER_COMPLETE(get, never):Int; public var FRAMEBUFFER_INCOMPLETE_ATTACHMENT(get, never):Int; public var FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT(get, never):Int; public var FRAMEBUFFER_INCOMPLETE_DIMENSIONS(get, never):Int; public var FRAMEBUFFER_UNSUPPORTED(get, never):Int; public var FRAMEBUFFER_BINDING(get, never):Int; public var RENDERBUFFER_BINDING(get, never):Int; public var MAX_RENDERBUFFER_SIZE(get, never):Int; public var INVALID_FRAMEBUFFER_OPERATION(get, never):Int; public var UNPACK_FLIP_Y_WEBGL(get, never):Int; public var UNPACK_PREMULTIPLY_ALPHA_WEBGL(get, never):Int; public var CONTEXT_LOST_WEBGL(get, never):Int; public var UNPACK_COLORSPACE_CONVERSION_WEBGL(get, never):Int; public var BROWSER_DEFAULT_WEBGL(get, never):Int; public var READ_BUFFER(get, never):Int; public var UNPACK_ROW_LENGTH(get, never):Int; public var UNPACK_SKIP_ROWS(get, never):Int; public var UNPACK_SKIP_PIXELS(get, never):Int; public var PACK_ROW_LENGTH(get, never):Int; public var PACK_SKIP_ROWS(get, never):Int; public var PACK_SKIP_PIXELS(get, never):Int; public var TEXTURE_BINDING_3D(get, never):Int; public var UNPACK_SKIP_IMAGES(get, never):Int; public var UNPACK_IMAGE_HEIGHT(get, never):Int; public var MAX_3D_TEXTURE_SIZE(get, never):Int; public var MAX_ELEMENTS_VERTICES(get, never):Int; public var MAX_ELEMENTS_INDICES(get, never):Int; public var MAX_TEXTURE_LOD_BIAS(get, never):Int; public var MAX_FRAGMENT_UNIFORM_COMPONENTS(get, never):Int; public var MAX_VERTEX_UNIFORM_COMPONENTS(get, never):Int; public var MAX_ARRAY_TEXTURE_LAYERS(get, never):Int; public var MIN_PROGRAM_TEXEL_OFFSET(get, never):Int; public var MAX_PROGRAM_TEXEL_OFFSET(get, never):Int; public var MAX_VARYING_COMPONENTS(get, never):Int; public var FRAGMENT_SHADER_DERIVATIVE_HINT(get, never):Int; public var RASTERIZER_DISCARD(get, never):Int; public var VERTEX_ARRAY_BINDING(get, never):Int; public var MAX_VERTEX_OUTPUT_COMPONENTS(get, never):Int; public var MAX_FRAGMENT_INPUT_COMPONENTS(get, never):Int; public var MAX_SERVER_WAIT_TIMEOUT(get, never):Int; public var MAX_ELEMENT_INDEX(get, never):Int; public var RED(get, never):Int; public var RGB8(get, never):Int; public var RGBA8(get, never):Int; public var RGB10_A2(get, never):Int; public var TEXTURE_3D(get, never):Int; public var TEXTURE_WRAP_R(get, never):Int; public var TEXTURE_MIN_LOD(get, never):Int; public var TEXTURE_MAX_LOD(get, never):Int; public var TEXTURE_BASE_LEVEL(get, never):Int; public var TEXTURE_MAX_LEVEL(get, never):Int; public var TEXTURE_COMPARE_MODE(get, never):Int; public var TEXTURE_COMPARE_FUNC(get, never):Int; public var SRGB(get, never):Int; public var SRGB8(get, never):Int; public var SRGB8_ALPHA8(get, never):Int; public var COMPARE_REF_TO_TEXTURE(get, never):Int; public var RGBA32F(get, never):Int; public var RGB32F(get, never):Int; public var RGBA16F(get, never):Int; public var RGB16F(get, never):Int; public var TEXTURE_2D_ARRAY(get, never):Int; public var TEXTURE_BINDING_2D_ARRAY(get, never):Int; public var R11F_G11F_B10F(get, never):Int; public var RGB9_E5(get, never):Int; public var RGBA32UI(get, never):Int; public var RGB32UI(get, never):Int; public var RGBA16UI(get, never):Int; public var RGB16UI(get, never):Int; public var RGBA8UI(get, never):Int; public var RGB8UI(get, never):Int; public var RGBA32I(get, never):Int; public var RGB32I(get, never):Int; public var RGBA16I(get, never):Int; public var RGB16I(get, never):Int; public var RGBA8I(get, never):Int; public var RGB8I(get, never):Int; public var RED_INTEGER(get, never):Int; public var RGB_INTEGER(get, never):Int; public var RGBA_INTEGER(get, never):Int; public var R8(get, never):Int; public var RG8(get, never):Int; public var R16F(get, never):Int; public var R32F(get, never):Int; public var RG16F(get, never):Int; public var RG32F(get, never):Int; public var R8I(get, never):Int; public var R8UI(get, never):Int; public var R16I(get, never):Int; public var R16UI(get, never):Int; public var R32I(get, never):Int; public var R32UI(get, never):Int; public var RG8I(get, never):Int; public var RG8UI(get, never):Int; public var RG16I(get, never):Int; public var RG16UI(get, never):Int; public var RG32I(get, never):Int; public var RG32UI(get, never):Int; public var R8_SNORM(get, never):Int; public var RG8_SNORM(get, never):Int; public var RGB8_SNORM(get, never):Int; public var RGBA8_SNORM(get, never):Int; public var RGB10_A2UI(get, never):Int; public var TEXTURE_IMMUTABLE_FORMAT(get, never):Int; public var TEXTURE_IMMUTABLE_LEVELS(get, never):Int; public var UNSIGNED_INT_2_10_10_10_REV(get, never):Int; public var UNSIGNED_INT_10F_11F_11F_REV(get, never):Int; public var UNSIGNED_INT_5_9_9_9_REV(get, never):Int; public var FLOAT_32_UNSIGNED_INT_24_8_REV(get, never):Int; public var UNSIGNED_INT_24_8(get, never):Int; public var HALF_FLOAT(get, never):Int; public var RG(get, never):Int; public var RG_INTEGER(get, never):Int; public var INT_2_10_10_10_REV(get, never):Int; public var CURRENT_QUERY(get, never):Int; public var QUERY_RESULT(get, never):Int; public var QUERY_RESULT_AVAILABLE(get, never):Int; public var ANY_SAMPLES_PASSED(get, never):Int; public var ANY_SAMPLES_PASSED_CONSERVATIVE(get, never):Int; public var MAX_DRAW_BUFFERS(get, never):Int; public var DRAW_BUFFER0(get, never):Int; public var DRAW_BUFFER1(get, never):Int; public var DRAW_BUFFER2(get, never):Int; public var DRAW_BUFFER3(get, never):Int; public var DRAW_BUFFER4(get, never):Int; public var DRAW_BUFFER5(get, never):Int; public var DRAW_BUFFER6(get, never):Int; public var DRAW_BUFFER7(get, never):Int; public var DRAW_BUFFER8(get, never):Int; public var DRAW_BUFFER9(get, never):Int; public var DRAW_BUFFER10(get, never):Int; public var DRAW_BUFFER11(get, never):Int; public var DRAW_BUFFER12(get, never):Int; public var DRAW_BUFFER13(get, never):Int; public var DRAW_BUFFER14(get, never):Int; public var DRAW_BUFFER15(get, never):Int; public var MAX_COLOR_ATTACHMENTS(get, never):Int; public var COLOR_ATTACHMENT1(get, never):Int; public var COLOR_ATTACHMENT2(get, never):Int; public var COLOR_ATTACHMENT3(get, never):Int; public var COLOR_ATTACHMENT4(get, never):Int; public var COLOR_ATTACHMENT5(get, never):Int; public var COLOR_ATTACHMENT6(get, never):Int; public var COLOR_ATTACHMENT7(get, never):Int; public var COLOR_ATTACHMENT8(get, never):Int; public var COLOR_ATTACHMENT9(get, never):Int; public var COLOR_ATTACHMENT10(get, never):Int; public var COLOR_ATTACHMENT11(get, never):Int; public var COLOR_ATTACHMENT12(get, never):Int; public var COLOR_ATTACHMENT13(get, never):Int; public var COLOR_ATTACHMENT14(get, never):Int; public var COLOR_ATTACHMENT15(get, never):Int; public var SAMPLER_3D(get, never):Int; public var SAMPLER_2D_SHADOW(get, never):Int; public var SAMPLER_2D_ARRAY(get, never):Int; public var SAMPLER_2D_ARRAY_SHADOW(get, never):Int; public var SAMPLER_CUBE_SHADOW(get, never):Int; public var INT_SAMPLER_2D(get, never):Int; public var INT_SAMPLER_3D(get, never):Int; public var INT_SAMPLER_CUBE(get, never):Int; public var INT_SAMPLER_2D_ARRAY(get, never):Int; public var UNSIGNED_INT_SAMPLER_2D(get, never):Int; public var UNSIGNED_INT_SAMPLER_3D(get, never):Int; public var UNSIGNED_INT_SAMPLER_CUBE(get, never):Int; public var UNSIGNED_INT_SAMPLER_2D_ARRAY(get, never):Int; public var MAX_SAMPLES(get, never):Int; public var SAMPLER_BINDING(get, never):Int; public var PIXEL_PACK_BUFFER(get, never):Int; public var PIXEL_UNPACK_BUFFER(get, never):Int; public var PIXEL_PACK_BUFFER_BINDING(get, never):Int; public var PIXEL_UNPACK_BUFFER_BINDING(get, never):Int; public var COPY_READ_BUFFER(get, never):Int; public var COPY_WRITE_BUFFER(get, never):Int; public var COPY_READ_BUFFER_BINDING(get, never):Int; public var COPY_WRITE_BUFFER_BINDING(get, never):Int; public var FLOAT_MAT2x3(get, never):Int; public var FLOAT_MAT2x4(get, never):Int; public var FLOAT_MAT3x2(get, never):Int; public var FLOAT_MAT3x4(get, never):Int; public var FLOAT_MAT4x2(get, never):Int; public var FLOAT_MAT4x3(get, never):Int; public var UNSIGNED_INT_VEC2(get, never):Int; public var UNSIGNED_INT_VEC3(get, never):Int; public var UNSIGNED_INT_VEC4(get, never):Int; public var UNSIGNED_NORMALIZED(get, never):Int; public var SIGNED_NORMALIZED(get, never):Int; public var VERTEX_ATTRIB_ARRAY_INTEGER(get, never):Int; public var VERTEX_ATTRIB_ARRAY_DIVISOR(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER_MODE(get, never):Int; public var MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS(get, never):Int; public var TRANSFORM_FEEDBACK_VARYINGS(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER_START(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER_SIZE(get, never):Int; public var TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN(get, never):Int; public var MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS(get, never):Int; public var MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS(get, never):Int; public var INTERLEAVED_ATTRIBS(get, never):Int; public var SEPARATE_ATTRIBS(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER(get, never):Int; public var TRANSFORM_FEEDBACK_BUFFER_BINDING(get, never):Int; public var TRANSFORM_FEEDBACK(get, never):Int; public var TRANSFORM_FEEDBACK_PAUSED(get, never):Int; public var TRANSFORM_FEEDBACK_ACTIVE(get, never):Int; public var TRANSFORM_FEEDBACK_BINDING(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_RED_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_GREEN_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_BLUE_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE(get, never):Int; public var FRAMEBUFFER_DEFAULT(get, never):Int; public var DEPTH24_STENCIL8(get, never):Int; public var DRAW_FRAMEBUFFER_BINDING(get, never):Int; public var READ_FRAMEBUFFER(get, never):Int; public var DRAW_FRAMEBUFFER(get, never):Int; public var READ_FRAMEBUFFER_BINDING(get, never):Int; public var RENDERBUFFER_SAMPLES(get, never):Int; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER(get, never):Int; public var FRAMEBUFFER_INCOMPLETE_MULTISAMPLE(get, never):Int; public var UNIFORM_BUFFER(get, never):Int; public var UNIFORM_BUFFER_BINDING(get, never):Int; public var UNIFORM_BUFFER_START(get, never):Int; public var UNIFORM_BUFFER_SIZE(get, never):Int; public var MAX_VERTEX_UNIFORM_BLOCKS(get, never):Int; public var MAX_FRAGMENT_UNIFORM_BLOCKS(get, never):Int; public var MAX_COMBINED_UNIFORM_BLOCKS(get, never):Int; public var MAX_UNIFORM_BUFFER_BINDINGS(get, never):Int; public var MAX_UNIFORM_BLOCK_SIZE(get, never):Int; public var MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS(get, never):Int; public var MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS(get, never):Int; public var UNIFORM_BUFFER_OFFSET_ALIGNMENT(get, never):Int; public var ACTIVE_UNIFORM_BLOCKS(get, never):Int; public var UNIFORM_TYPE(get, never):Int; public var UNIFORM_SIZE(get, never):Int; public var UNIFORM_BLOCK_INDEX(get, never):Int; public var UNIFORM_OFFSET(get, never):Int; public var UNIFORM_ARRAY_STRIDE(get, never):Int; public var UNIFORM_MATRIX_STRIDE(get, never):Int; public var UNIFORM_IS_ROW_MAJOR(get, never):Int; public var UNIFORM_BLOCK_BINDING(get, never):Int; public var UNIFORM_BLOCK_DATA_SIZE(get, never):Int; public var UNIFORM_BLOCK_ACTIVE_UNIFORMS(get, never):Int; public var UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES(get, never):Int; public var UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER(get, never):Int; public var UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER(get, never):Int; public var OBJECT_TYPE(get, never):Int; public var SYNC_CONDITION(get, never):Int; public var SYNC_STATUS(get, never):Int; public var SYNC_FLAGS(get, never):Int; public var SYNC_FENCE(get, never):Int; public var SYNC_GPU_COMMANDS_COMPLETE(get, never):Int; public var UNSIGNALED(get, never):Int; public var SIGNALED(get, never):Int; public var ALREADY_SIGNALED(get, never):Int; public var TIMEOUT_EXPIRED(get, never):Int; public var CONDITION_SATISFIED(get, never):Int; public var WAIT_FAILED(get, never):Int; public var SYNC_FLUSH_COMMANDS_BIT(get, never):Int; public var COLOR(get, never):Int; public var DEPTH(get, never):Int; public var STENCIL(get, never):Int; public var MIN(get, never):Int; public var MAX(get, never):Int; public var DEPTH_COMPONENT24(get, never):Int; public var STREAM_READ(get, never):Int; public var STREAM_COPY(get, never):Int; public var STATIC_READ(get, never):Int; public var STATIC_COPY(get, never):Int; public var DYNAMIC_READ(get, never):Int; public var DYNAMIC_COPY(get, never):Int; public var DEPTH_COMPONENT32F(get, never):Int; public var DEPTH32F_STENCIL8(get, never):Int; public var INVALID_INDEX(get, never):Int; public var TIMEOUT_IGNORED(get, never):Int; public var MAX_CLIENT_WAIT_TIMEOUT_WEBGL(get, never):Int; @:noCompletion private inline function get_DEPTH_BUFFER_BIT():Int { return this.DEPTH_BUFFER_BIT; } @:noCompletion private inline function get_STENCIL_BUFFER_BIT():Int { return this.STENCIL_BUFFER_BIT; } @:noCompletion private inline function get_COLOR_BUFFER_BIT():Int { return this.COLOR_BUFFER_BIT; } @:noCompletion private inline function get_POINTS():Int { return this.POINTS; } @:noCompletion private inline function get_LINES():Int { return this.LINES; } @:noCompletion private inline function get_LINE_LOOP():Int { return this.LINE_LOOP; } @:noCompletion private inline function get_LINE_STRIP():Int { return this.LINE_STRIP; } @:noCompletion private inline function get_TRIANGLES():Int { return this.TRIANGLES; } @:noCompletion private inline function get_TRIANGLE_STRIP():Int { return this.TRIANGLE_STRIP; } @:noCompletion private inline function get_TRIANGLE_FAN():Int { return this.TRIANGLE_FAN; } @:noCompletion private inline function get_ZERO():Int { return this.ZERO; } @:noCompletion private inline function get_ONE():Int { return this.ONE; } @:noCompletion private inline function get_SRC_COLOR():Int { return this.SRC_COLOR; } @:noCompletion private inline function get_ONE_MINUS_SRC_COLOR():Int { return this.ONE_MINUS_SRC_COLOR; } @:noCompletion private inline function get_SRC_ALPHA():Int { return this.SRC_ALPHA; } @:noCompletion private inline function get_ONE_MINUS_SRC_ALPHA():Int { return this.ONE_MINUS_SRC_ALPHA; } @:noCompletion private inline function get_DST_ALPHA():Int { return this.DST_ALPHA; } @:noCompletion private inline function get_ONE_MINUS_DST_ALPHA():Int { return this.ONE_MINUS_DST_ALPHA; } @:noCompletion private inline function get_DST_COLOR():Int { return this.DST_COLOR; } @:noCompletion private inline function get_ONE_MINUS_DST_COLOR():Int { return this.ONE_MINUS_DST_COLOR; } @:noCompletion private inline function get_SRC_ALPHA_SATURATE():Int { return this.SRC_ALPHA_SATURATE; } @:noCompletion private inline function get_FUNC_ADD():Int { return this.FUNC_ADD; } @:noCompletion private inline function get_BLEND_EQUATION():Int { return this.BLEND_EQUATION; } @:noCompletion private inline function get_BLEND_EQUATION_RGB():Int { return this.BLEND_EQUATION_RGB; } @:noCompletion private inline function get_BLEND_EQUATION_ALPHA():Int { return this.BLEND_EQUATION_ALPHA; } @:noCompletion private inline function get_FUNC_SUBTRACT():Int { return this.FUNC_SUBTRACT; } @:noCompletion private inline function get_FUNC_REVERSE_SUBTRACT():Int { return this.FUNC_REVERSE_SUBTRACT; } @:noCompletion private inline function get_BLEND_DST_RGB():Int { return this.BLEND_DST_RGB; } @:noCompletion private inline function get_BLEND_SRC_RGB():Int { return this.BLEND_SRC_RGB; } @:noCompletion private inline function get_BLEND_DST_ALPHA():Int { return this.BLEND_DST_ALPHA; } @:noCompletion private inline function get_BLEND_SRC_ALPHA():Int { return this.BLEND_SRC_ALPHA; } @:noCompletion private inline function get_CONSTANT_COLOR():Int { return this.CONSTANT_COLOR; } @:noCompletion private inline function get_ONE_MINUS_CONSTANT_COLOR():Int { return this.ONE_MINUS_CONSTANT_COLOR; } @:noCompletion private inline function get_CONSTANT_ALPHA():Int { return this.CONSTANT_ALPHA; } @:noCompletion private inline function get_ONE_MINUS_CONSTANT_ALPHA():Int { return this.ONE_MINUS_CONSTANT_ALPHA; } @:noCompletion private inline function get_BLEND_COLOR():Int { return this.BLEND_COLOR; } @:noCompletion private inline function get_ARRAY_BUFFER():Int { return this.ARRAY_BUFFER; } @:noCompletion private inline function get_ELEMENT_ARRAY_BUFFER():Int { return this.ELEMENT_ARRAY_BUFFER; } @:noCompletion private inline function get_ARRAY_BUFFER_BINDING():Int { return this.ARRAY_BUFFER_BINDING; } @:noCompletion private inline function get_ELEMENT_ARRAY_BUFFER_BINDING():Int { return this.ELEMENT_ARRAY_BUFFER_BINDING; } @:noCompletion private inline function get_STREAM_DRAW():Int { return this.STREAM_DRAW; } @:noCompletion private inline function get_STATIC_DRAW():Int { return this.STATIC_DRAW; } @:noCompletion private inline function get_DYNAMIC_DRAW():Int { return this.DYNAMIC_DRAW; } @:noCompletion private inline function get_BUFFER_SIZE():Int { return this.BUFFER_SIZE; } @:noCompletion private inline function get_BUFFER_USAGE():Int { return this.BUFFER_USAGE; } @:noCompletion private inline function get_CURRENT_VERTEX_ATTRIB():Int { return this.CURRENT_VERTEX_ATTRIB; } @:noCompletion private inline function get_FRONT():Int { return this.FRONT; } @:noCompletion private inline function get_BACK():Int { return this.BACK; } @:noCompletion private inline function get_FRONT_AND_BACK():Int { return this.FRONT_AND_BACK; } @:noCompletion private inline function get_CULL_FACE():Int { return this.CULL_FACE; } @:noCompletion private inline function get_BLEND():Int { return this.BLEND; } @:noCompletion private inline function get_DITHER():Int { return this.DITHER; } @:noCompletion private inline function get_STENCIL_TEST():Int { return this.STENCIL_TEST; } @:noCompletion private inline function get_DEPTH_TEST():Int { return this.DEPTH_TEST; } @:noCompletion private inline function get_SCISSOR_TEST():Int { return this.SCISSOR_TEST; } @:noCompletion private inline function get_POLYGON_OFFSET_FILL():Int { return this.POLYGON_OFFSET_FILL; } @:noCompletion private inline function get_SAMPLE_ALPHA_TO_COVERAGE():Int { return this.SAMPLE_ALPHA_TO_COVERAGE; } @:noCompletion private inline function get_SAMPLE_COVERAGE():Int { return this.SAMPLE_COVERAGE; } @:noCompletion private inline function get_NO_ERROR():Int { return this.NO_ERROR; } @:noCompletion private inline function get_INVALID_ENUM():Int { return this.INVALID_ENUM; } @:noCompletion private inline function get_INVALID_VALUE():Int { return this.INVALID_VALUE; } @:noCompletion private inline function get_INVALID_OPERATION():Int { return this.INVALID_OPERATION; } @:noCompletion private inline function get_OUT_OF_MEMORY():Int { return this.OUT_OF_MEMORY; } @:noCompletion private inline function get_CW():Int { return this.CW; } @:noCompletion private inline function get_CCW():Int { return this.CCW; } @:noCompletion private inline function get_LINE_WIDTH():Int { return this.LINE_WIDTH; } @:noCompletion private inline function get_ALIASED_POINT_SIZE_RANGE():Int { return this.ALIASED_POINT_SIZE_RANGE; } @:noCompletion private inline function get_ALIASED_LINE_WIDTH_RANGE():Int { return this.ALIASED_LINE_WIDTH_RANGE; } @:noCompletion private inline function get_CULL_FACE_MODE():Int { return this.CULL_FACE_MODE; } @:noCompletion private inline function get_FRONT_FACE():Int { return this.FRONT_FACE; } @:noCompletion private inline function get_DEPTH_RANGE():Int { return this.DEPTH_RANGE; } @:noCompletion private inline function get_DEPTH_WRITEMASK():Int { return this.DEPTH_WRITEMASK; } @:noCompletion private inline function get_DEPTH_CLEAR_VALUE():Int { return this.DEPTH_CLEAR_VALUE; } @:noCompletion private inline function get_DEPTH_FUNC():Int { return this.DEPTH_FUNC; } @:noCompletion private inline function get_STENCIL_CLEAR_VALUE():Int { return this.STENCIL_CLEAR_VALUE; } @:noCompletion private inline function get_STENCIL_FUNC():Int { return this.STENCIL_FUNC; } @:noCompletion private inline function get_STENCIL_FAIL():Int { return this.STENCIL_FAIL; } @:noCompletion private inline function get_STENCIL_PASS_DEPTH_FAIL():Int { return this.STENCIL_PASS_DEPTH_FAIL; } @:noCompletion private inline function get_STENCIL_PASS_DEPTH_PASS():Int { return this.STENCIL_PASS_DEPTH_PASS; } @:noCompletion private inline function get_STENCIL_REF():Int { return this.STENCIL_REF; } @:noCompletion private inline function get_STENCIL_VALUE_MASK():Int { return this.STENCIL_VALUE_MASK; } @:noCompletion private inline function get_STENCIL_WRITEMASK():Int { return this.STENCIL_WRITEMASK; } @:noCompletion private inline function get_STENCIL_BACK_FUNC():Int { return this.STENCIL_BACK_FUNC; } @:noCompletion private inline function get_STENCIL_BACK_FAIL():Int { return this.STENCIL_BACK_FAIL; } @:noCompletion private inline function get_STENCIL_BACK_PASS_DEPTH_FAIL():Int { return this.STENCIL_BACK_PASS_DEPTH_FAIL; } @:noCompletion private inline function get_STENCIL_BACK_PASS_DEPTH_PASS():Int { return this.STENCIL_BACK_PASS_DEPTH_PASS; } @:noCompletion private inline function get_STENCIL_BACK_REF():Int { return this.STENCIL_BACK_REF; } @:noCompletion private inline function get_STENCIL_BACK_VALUE_MASK():Int { return this.STENCIL_BACK_VALUE_MASK; } @:noCompletion private inline function get_STENCIL_BACK_WRITEMASK():Int { return this.STENCIL_BACK_WRITEMASK; } @:noCompletion private inline function get_VIEWPORT():Int { return this.VIEWPORT; } @:noCompletion private inline function get_SCISSOR_BOX():Int { return this.SCISSOR_BOX; } @:noCompletion private inline function get_COLOR_CLEAR_VALUE():Int { return this.COLOR_CLEAR_VALUE; } @:noCompletion private inline function get_COLOR_WRITEMASK():Int { return this.COLOR_WRITEMASK; } @:noCompletion private inline function get_UNPACK_ALIGNMENT():Int { return this.UNPACK_ALIGNMENT; } @:noCompletion private inline function get_PACK_ALIGNMENT():Int { return this.PACK_ALIGNMENT; } @:noCompletion private inline function get_MAX_TEXTURE_SIZE():Int { return this.MAX_TEXTURE_SIZE; } @:noCompletion private inline function get_MAX_VIEWPORT_DIMS():Int { return this.MAX_VIEWPORT_DIMS; } @:noCompletion private inline function get_SUBPIXEL_BITS():Int { return this.SUBPIXEL_BITS; } @:noCompletion private inline function get_RED_BITS():Int { return this.RED_BITS; } @:noCompletion private inline function get_GREEN_BITS():Int { return this.GREEN_BITS; } @:noCompletion private inline function get_BLUE_BITS():Int { return this.BLUE_BITS; } @:noCompletion private inline function get_ALPHA_BITS():Int { return this.ALPHA_BITS; } @:noCompletion private inline function get_DEPTH_BITS():Int { return this.DEPTH_BITS; } @:noCompletion private inline function get_STENCIL_BITS():Int { return this.STENCIL_BITS; } @:noCompletion private inline function get_POLYGON_OFFSET_UNITS():Int { return this.POLYGON_OFFSET_UNITS; } @:noCompletion private inline function get_POLYGON_OFFSET_FACTOR():Int { return this.POLYGON_OFFSET_FACTOR; } @:noCompletion private inline function get_TEXTURE_BINDING_2D():Int { return this.TEXTURE_BINDING_2D; } @:noCompletion private inline function get_SAMPLE_BUFFERS():Int { return this.SAMPLE_BUFFERS; } @:noCompletion private inline function get_SAMPLES():Int { return this.SAMPLES; } @:noCompletion private inline function get_SAMPLE_COVERAGE_VALUE():Int { return this.SAMPLE_COVERAGE_VALUE; } @:noCompletion private inline function get_SAMPLE_COVERAGE_INVERT():Int { return this.SAMPLE_COVERAGE_INVERT; } @:noCompletion private inline function get_COMPRESSED_TEXTURE_FORMATS():Int { return this.COMPRESSED_TEXTURE_FORMATS; } @:noCompletion private inline function get_DONT_CARE():Int { return this.DONT_CARE; } @:noCompletion private inline function get_FASTEST():Int { return this.FASTEST; } @:noCompletion private inline function get_NICEST():Int { return this.NICEST; } @:noCompletion private inline function get_GENERATE_MIPMAP_HINT():Int { return this.GENERATE_MIPMAP_HINT; } @:noCompletion private inline function get_BYTE():Int { return this.BYTE; } @:noCompletion private inline function get_UNSIGNED_BYTE():Int { return this.UNSIGNED_BYTE; } @:noCompletion private inline function get_SHORT():Int { return this.SHORT; } @:noCompletion private inline function get_UNSIGNED_SHORT():Int { return this.UNSIGNED_SHORT; } @:noCompletion private inline function get_INT():Int { return this.INT; } @:noCompletion private inline function get_UNSIGNED_INT():Int { return this.UNSIGNED_INT; } @:noCompletion private inline function get_FLOAT():Int { return this.FLOAT; } @:noCompletion private inline function get_DEPTH_COMPONENT():Int { return this.DEPTH_COMPONENT; } @:noCompletion private inline function get_ALPHA():Int { return this.ALPHA; } @:noCompletion private inline function get_RGB():Int { return this.RGB; } @:noCompletion private inline function get_RGBA():Int { return this.RGBA; } @:noCompletion private inline function get_LUMINANCE():Int { return this.LUMINANCE; } @:noCompletion private inline function get_LUMINANCE_ALPHA():Int { return this.LUMINANCE_ALPHA; } @:noCompletion private inline function get_UNSIGNED_SHORT_4_4_4_4():Int { return this.UNSIGNED_SHORT_4_4_4_4; } @:noCompletion private inline function get_UNSIGNED_SHORT_5_5_5_1():Int { return this.UNSIGNED_SHORT_5_5_5_1; } @:noCompletion private inline function get_UNSIGNED_SHORT_5_6_5():Int { return this.UNSIGNED_SHORT_5_6_5; } @:noCompletion private inline function get_FRAGMENT_SHADER():Int { return this.FRAGMENT_SHADER; } @:noCompletion private inline function get_VERTEX_SHADER():Int { return this.VERTEX_SHADER; } @:noCompletion private inline function get_MAX_VERTEX_ATTRIBS():Int { return this.MAX_VERTEX_ATTRIBS; } @:noCompletion private inline function get_MAX_VERTEX_UNIFORM_VECTORS():Int { return this.MAX_VERTEX_UNIFORM_VECTORS; } @:noCompletion private inline function get_MAX_VARYING_VECTORS():Int { return this.MAX_VARYING_VECTORS; } @:noCompletion private inline function get_MAX_COMBINED_TEXTURE_IMAGE_UNITS():Int { return this.MAX_COMBINED_TEXTURE_IMAGE_UNITS; } @:noCompletion private inline function get_MAX_VERTEX_TEXTURE_IMAGE_UNITS():Int { return this.MAX_VERTEX_TEXTURE_IMAGE_UNITS; } @:noCompletion private inline function get_MAX_TEXTURE_IMAGE_UNITS():Int { return this.MAX_TEXTURE_IMAGE_UNITS; } @:noCompletion private inline function get_MAX_FRAGMENT_UNIFORM_VECTORS():Int { return this.MAX_FRAGMENT_UNIFORM_VECTORS; } @:noCompletion private inline function get_SHADER_TYPE():Int { return this.SHADER_TYPE; } @:noCompletion private inline function get_DELETE_STATUS():Int { return this.DELETE_STATUS; } @:noCompletion private inline function get_LINK_STATUS():Int { return this.LINK_STATUS; } @:noCompletion private inline function get_VALIDATE_STATUS():Int { return this.VALIDATE_STATUS; } @:noCompletion private inline function get_ATTACHED_SHADERS():Int { return this.ATTACHED_SHADERS; } @:noCompletion private inline function get_ACTIVE_UNIFORMS():Int { return this.ACTIVE_UNIFORMS; } @:noCompletion private inline function get_ACTIVE_ATTRIBUTES():Int { return this.ACTIVE_ATTRIBUTES; } @:noCompletion private inline function get_SHADING_LANGUAGE_VERSION():Int { return this.SHADING_LANGUAGE_VERSION; } @:noCompletion private inline function get_CURRENT_PROGRAM():Int { return this.CURRENT_PROGRAM; } @:noCompletion private inline function get_NEVER():Int { return this.NEVER; } @:noCompletion private inline function get_LESS():Int { return this.LESS; } @:noCompletion private inline function get_EQUAL():Int { return this.EQUAL; } @:noCompletion private inline function get_LEQUAL():Int { return this.LEQUAL; } @:noCompletion private inline function get_GREATER():Int { return this.GREATER; } @:noCompletion private inline function get_NOTEQUAL():Int { return this.NOTEQUAL; } @:noCompletion private inline function get_GEQUAL():Int { return this.GEQUAL; } @:noCompletion private inline function get_ALWAYS():Int { return this.ALWAYS; } @:noCompletion private inline function get_KEEP():Int { return this.KEEP; } @:noCompletion private inline function get_REPLACE():Int { return this.REPLACE; } @:noCompletion private inline function get_INCR():Int { return this.INCR; } @:noCompletion private inline function get_DECR():Int { return this.DECR; } @:noCompletion private inline function get_INVERT():Int { return this.INVERT; } @:noCompletion private inline function get_INCR_WRAP():Int { return this.INCR_WRAP; } @:noCompletion private inline function get_DECR_WRAP():Int { return this.DECR_WRAP; } @:noCompletion private inline function get_VENDOR():Int { return this.VENDOR; } @:noCompletion private inline function get_RENDERER():Int { return this.RENDERER; } @:noCompletion private inline function get_VERSION():Int { return this.VERSION; } @:noCompletion private inline function get_NEAREST():Int { return this.NEAREST; } @:noCompletion private inline function get_LINEAR():Int { return this.LINEAR; } @:noCompletion private inline function get_NEAREST_MIPMAP_NEAREST():Int { return this.NEAREST_MIPMAP_NEAREST; } @:noCompletion private inline function get_LINEAR_MIPMAP_NEAREST():Int { return this.LINEAR_MIPMAP_NEAREST; } @:noCompletion private inline function get_NEAREST_MIPMAP_LINEAR():Int { return this.NEAREST_MIPMAP_LINEAR; } @:noCompletion private inline function get_LINEAR_MIPMAP_LINEAR():Int { return this.LINEAR_MIPMAP_LINEAR; } @:noCompletion private inline function get_TEXTURE_MAG_FILTER():Int { return this.TEXTURE_MAG_FILTER; } @:noCompletion private inline function get_TEXTURE_MIN_FILTER():Int { return this.TEXTURE_MIN_FILTER; } @:noCompletion private inline function get_TEXTURE_WRAP_S():Int { return this.TEXTURE_WRAP_S; } @:noCompletion private inline function get_TEXTURE_WRAP_T():Int { return this.TEXTURE_WRAP_T; } @:noCompletion private inline function get_TEXTURE_2D():Int { return this.TEXTURE_2D; } @:noCompletion private inline function get_TEXTURE():Int { return this.TEXTURE; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP():Int { return this.TEXTURE_CUBE_MAP; } @:noCompletion private inline function get_TEXTURE_BINDING_CUBE_MAP():Int { return this.TEXTURE_BINDING_CUBE_MAP; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_POSITIVE_X():Int { return this.TEXTURE_CUBE_MAP_POSITIVE_X; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_NEGATIVE_X():Int { return this.TEXTURE_CUBE_MAP_NEGATIVE_X; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_POSITIVE_Y():Int { return this.TEXTURE_CUBE_MAP_POSITIVE_Y; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_NEGATIVE_Y():Int { return this.TEXTURE_CUBE_MAP_NEGATIVE_Y; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_POSITIVE_Z():Int { return this.TEXTURE_CUBE_MAP_POSITIVE_Z; } @:noCompletion private inline function get_TEXTURE_CUBE_MAP_NEGATIVE_Z():Int { return this.TEXTURE_CUBE_MAP_NEGATIVE_Z; } @:noCompletion private inline function get_MAX_CUBE_MAP_TEXTURE_SIZE():Int { return this.MAX_CUBE_MAP_TEXTURE_SIZE; } @:noCompletion private inline function get_TEXTURE0():Int { return this.TEXTURE0; } @:noCompletion private inline function get_TEXTURE1():Int { return this.TEXTURE1; } @:noCompletion private inline function get_TEXTURE2():Int { return this.TEXTURE2; } @:noCompletion private inline function get_TEXTURE3():Int { return this.TEXTURE3; } @:noCompletion private inline function get_TEXTURE4():Int { return this.TEXTURE4; } @:noCompletion private inline function get_TEXTURE5():Int { return this.TEXTURE5; } @:noCompletion private inline function get_TEXTURE6():Int { return this.TEXTURE6; } @:noCompletion private inline function get_TEXTURE7():Int { return this.TEXTURE7; } @:noCompletion private inline function get_TEXTURE8():Int { return this.TEXTURE8; } @:noCompletion private inline function get_TEXTURE9():Int { return this.TEXTURE9; } @:noCompletion private inline function get_TEXTURE10():Int { return this.TEXTURE10; } @:noCompletion private inline function get_TEXTURE11():Int { return this.TEXTURE11; } @:noCompletion private inline function get_TEXTURE12():Int { return this.TEXTURE12; } @:noCompletion private inline function get_TEXTURE13():Int { return this.TEXTURE13; } @:noCompletion private inline function get_TEXTURE14():Int { return this.TEXTURE14; } @:noCompletion private inline function get_TEXTURE15():Int { return this.TEXTURE15; } @:noCompletion private inline function get_TEXTURE16():Int { return this.TEXTURE16; } @:noCompletion private inline function get_TEXTURE17():Int { return this.TEXTURE17; } @:noCompletion private inline function get_TEXTURE18():Int { return this.TEXTURE18; } @:noCompletion private inline function get_TEXTURE19():Int { return this.TEXTURE19; } @:noCompletion private inline function get_TEXTURE20():Int { return this.TEXTURE20; } @:noCompletion private inline function get_TEXTURE21():Int { return this.TEXTURE21; } @:noCompletion private inline function get_TEXTURE22():Int { return this.TEXTURE22; } @:noCompletion private inline function get_TEXTURE23():Int { return this.TEXTURE23; } @:noCompletion private inline function get_TEXTURE24():Int { return this.TEXTURE24; } @:noCompletion private inline function get_TEXTURE25():Int { return this.TEXTURE25; } @:noCompletion private inline function get_TEXTURE26():Int { return this.TEXTURE26; } @:noCompletion private inline function get_TEXTURE27():Int { return this.TEXTURE27; } @:noCompletion private inline function get_TEXTURE28():Int { return this.TEXTURE28; } @:noCompletion private inline function get_TEXTURE29():Int { return this.TEXTURE29; } @:noCompletion private inline function get_TEXTURE30():Int { return this.TEXTURE30; } @:noCompletion private inline function get_TEXTURE31():Int { return this.TEXTURE31; } @:noCompletion private inline function get_ACTIVE_TEXTURE():Int { return this.ACTIVE_TEXTURE; } @:noCompletion private inline function get_REPEAT():Int { return this.REPEAT; } @:noCompletion private inline function get_CLAMP_TO_EDGE():Int { return this.CLAMP_TO_EDGE; } @:noCompletion private inline function get_MIRRORED_REPEAT():Int { return this.MIRRORED_REPEAT; } @:noCompletion private inline function get_FLOAT_VEC2():Int { return this.FLOAT_VEC2; } @:noCompletion private inline function get_FLOAT_VEC3():Int { return this.FLOAT_VEC3; } @:noCompletion private inline function get_FLOAT_VEC4():Int { return this.FLOAT_VEC4; } @:noCompletion private inline function get_INT_VEC2():Int { return this.INT_VEC2; } @:noCompletion private inline function get_INT_VEC3():Int { return this.INT_VEC3; } @:noCompletion private inline function get_INT_VEC4():Int { return this.INT_VEC4; } @:noCompletion private inline function get_BOOL():Int { return this.BOOL; } @:noCompletion private inline function get_BOOL_VEC2():Int { return this.BOOL_VEC2; } @:noCompletion private inline function get_BOOL_VEC3():Int { return this.BOOL_VEC3; } @:noCompletion private inline function get_BOOL_VEC4():Int { return this.BOOL_VEC4; } @:noCompletion private inline function get_FLOAT_MAT2():Int { return this.FLOAT_MAT2; } @:noCompletion private inline function get_FLOAT_MAT3():Int { return this.FLOAT_MAT3; } @:noCompletion private inline function get_FLOAT_MAT4():Int { return this.FLOAT_MAT4; } @:noCompletion private inline function get_SAMPLER_2D():Int { return this.SAMPLER_2D; } @:noCompletion private inline function get_SAMPLER_CUBE():Int { return this.SAMPLER_CUBE; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_ENABLED():Int { return this.VERTEX_ATTRIB_ARRAY_ENABLED; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_SIZE():Int { return this.VERTEX_ATTRIB_ARRAY_SIZE; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_STRIDE():Int { return this.VERTEX_ATTRIB_ARRAY_STRIDE; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_TYPE():Int { return this.VERTEX_ATTRIB_ARRAY_TYPE; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_NORMALIZED():Int { return this.VERTEX_ATTRIB_ARRAY_NORMALIZED; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_POINTER():Int { return this.VERTEX_ATTRIB_ARRAY_POINTER; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING():Int { return this.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING; } @:noCompletion private inline function get_COMPILE_STATUS():Int { return this.COMPILE_STATUS; } @:noCompletion private inline function get_LOW_FLOAT():Int { return this.LOW_FLOAT; } @:noCompletion private inline function get_MEDIUM_FLOAT():Int { return this.MEDIUM_FLOAT; } @:noCompletion private inline function get_HIGH_FLOAT():Int { return this.HIGH_FLOAT; } @:noCompletion private inline function get_LOW_INT():Int { return this.LOW_INT; } @:noCompletion private inline function get_MEDIUM_INT():Int { return this.MEDIUM_INT; } @:noCompletion private inline function get_HIGH_INT():Int { return this.HIGH_INT; } @:noCompletion private inline function get_FRAMEBUFFER():Int { return this.FRAMEBUFFER; } @:noCompletion private inline function get_RENDERBUFFER():Int { return this.RENDERBUFFER; } @:noCompletion private inline function get_RGBA4():Int { return this.RGBA4; } @:noCompletion private inline function get_RGB5_A1():Int { return this.RGB5_A1; } @:noCompletion private inline function get_RGB565():Int { return this.RGB565; } @:noCompletion private inline function get_DEPTH_COMPONENT16():Int { return this.DEPTH_COMPONENT16; } @:noCompletion private inline function get_STENCIL_INDEX():Int { return this.STENCIL_INDEX; } @:noCompletion private inline function get_STENCIL_INDEX8():Int { return this.STENCIL_INDEX8; } @:noCompletion private inline function get_DEPTH_STENCIL():Int { return this.DEPTH_STENCIL; } @:noCompletion private inline function get_RENDERBUFFER_WIDTH():Int { return this.RENDERBUFFER_WIDTH; } @:noCompletion private inline function get_RENDERBUFFER_HEIGHT():Int { return this.RENDERBUFFER_HEIGHT; } @:noCompletion private inline function get_RENDERBUFFER_INTERNAL_FORMAT():Int { return this.RENDERBUFFER_INTERNAL_FORMAT; } @:noCompletion private inline function get_RENDERBUFFER_RED_SIZE():Int { return this.RENDERBUFFER_RED_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_GREEN_SIZE():Int { return this.RENDERBUFFER_GREEN_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_BLUE_SIZE():Int { return this.RENDERBUFFER_BLUE_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_ALPHA_SIZE():Int { return this.RENDERBUFFER_ALPHA_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_DEPTH_SIZE():Int { return this.RENDERBUFFER_DEPTH_SIZE; } @:noCompletion private inline function get_RENDERBUFFER_STENCIL_SIZE():Int { return this.RENDERBUFFER_STENCIL_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE():Int { return this.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME():Int { return this.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL():Int { return this.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE():Int { return this.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE; } @:noCompletion private inline function get_COLOR_ATTACHMENT0():Int { return this.COLOR_ATTACHMENT0; } @:noCompletion private inline function get_DEPTH_ATTACHMENT():Int { return this.DEPTH_ATTACHMENT; } @:noCompletion private inline function get_STENCIL_ATTACHMENT():Int { return this.STENCIL_ATTACHMENT; } @:noCompletion private inline function get_DEPTH_STENCIL_ATTACHMENT():Int { return this.DEPTH_STENCIL_ATTACHMENT; } @:noCompletion private inline function get_NONE():Int { return this.NONE; } @:noCompletion private inline function get_FRAMEBUFFER_COMPLETE():Int { return this.FRAMEBUFFER_COMPLETE; } @:noCompletion private inline function get_FRAMEBUFFER_INCOMPLETE_ATTACHMENT():Int { return this.FRAMEBUFFER_INCOMPLETE_ATTACHMENT; } @:noCompletion private inline function get_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT():Int { return this.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; } @:noCompletion private inline function get_FRAMEBUFFER_INCOMPLETE_DIMENSIONS():Int { return this.FRAMEBUFFER_INCOMPLETE_DIMENSIONS; } @:noCompletion private inline function get_FRAMEBUFFER_UNSUPPORTED():Int { return this.FRAMEBUFFER_UNSUPPORTED; } @:noCompletion private inline function get_FRAMEBUFFER_BINDING():Int { return this.FRAMEBUFFER_BINDING; } @:noCompletion private inline function get_RENDERBUFFER_BINDING():Int { return this.RENDERBUFFER_BINDING; } @:noCompletion private inline function get_MAX_RENDERBUFFER_SIZE():Int { return this.MAX_RENDERBUFFER_SIZE; } @:noCompletion private inline function get_INVALID_FRAMEBUFFER_OPERATION():Int { return this.INVALID_FRAMEBUFFER_OPERATION; } @:noCompletion private inline function get_UNPACK_FLIP_Y_WEBGL():Int { return this.UNPACK_FLIP_Y_WEBGL; } @:noCompletion private inline function get_UNPACK_PREMULTIPLY_ALPHA_WEBGL():Int { return this.UNPACK_PREMULTIPLY_ALPHA_WEBGL; } @:noCompletion private inline function get_CONTEXT_LOST_WEBGL():Int { return this.CONTEXT_LOST_WEBGL; } @:noCompletion private inline function get_UNPACK_COLORSPACE_CONVERSION_WEBGL():Int { return this.UNPACK_COLORSPACE_CONVERSION_WEBGL; } @:noCompletion private inline function get_BROWSER_DEFAULT_WEBGL():Int { return this.BROWSER_DEFAULT_WEBGL; } @:noCompletion private inline function get_READ_BUFFER():Int { return this.READ_BUFFER; } @:noCompletion private inline function get_UNPACK_ROW_LENGTH():Int { return this.UNPACK_ROW_LENGTH; } @:noCompletion private inline function get_UNPACK_SKIP_ROWS():Int { return this.UNPACK_SKIP_ROWS; } @:noCompletion private inline function get_UNPACK_SKIP_PIXELS():Int { return this.UNPACK_SKIP_PIXELS; } @:noCompletion private inline function get_PACK_ROW_LENGTH():Int { return this.PACK_ROW_LENGTH; } @:noCompletion private inline function get_PACK_SKIP_ROWS():Int { return this.PACK_SKIP_ROWS; } @:noCompletion private inline function get_PACK_SKIP_PIXELS():Int { return this.PACK_SKIP_PIXELS; } @:noCompletion private inline function get_TEXTURE_BINDING_3D():Int { return this.TEXTURE_BINDING_3D; } @:noCompletion private inline function get_UNPACK_SKIP_IMAGES():Int { return this.UNPACK_SKIP_IMAGES; } @:noCompletion private inline function get_UNPACK_IMAGE_HEIGHT():Int { return this.UNPACK_IMAGE_HEIGHT; } @:noCompletion private inline function get_MAX_3D_TEXTURE_SIZE():Int { return this.MAX_3D_TEXTURE_SIZE; } @:noCompletion private inline function get_MAX_ELEMENTS_VERTICES():Int { return this.MAX_ELEMENTS_VERTICES; } @:noCompletion private inline function get_MAX_ELEMENTS_INDICES():Int { return this.MAX_ELEMENTS_INDICES; } @:noCompletion private inline function get_MAX_TEXTURE_LOD_BIAS():Int { return this.MAX_TEXTURE_LOD_BIAS; } @:noCompletion private inline function get_MAX_FRAGMENT_UNIFORM_COMPONENTS():Int { return this.MAX_FRAGMENT_UNIFORM_COMPONENTS; } @:noCompletion private inline function get_MAX_VERTEX_UNIFORM_COMPONENTS():Int { return this.MAX_VERTEX_UNIFORM_COMPONENTS; } @:noCompletion private inline function get_MAX_ARRAY_TEXTURE_LAYERS():Int { return this.MAX_ARRAY_TEXTURE_LAYERS; } @:noCompletion private inline function get_MIN_PROGRAM_TEXEL_OFFSET():Int { return this.MIN_PROGRAM_TEXEL_OFFSET; } @:noCompletion private inline function get_MAX_PROGRAM_TEXEL_OFFSET():Int { return this.MAX_PROGRAM_TEXEL_OFFSET; } @:noCompletion private inline function get_MAX_VARYING_COMPONENTS():Int { return this.MAX_VARYING_COMPONENTS; } @:noCompletion private inline function get_FRAGMENT_SHADER_DERIVATIVE_HINT():Int { return this.FRAGMENT_SHADER_DERIVATIVE_HINT; } @:noCompletion private inline function get_RASTERIZER_DISCARD():Int { return this.RASTERIZER_DISCARD; } @:noCompletion private inline function get_VERTEX_ARRAY_BINDING():Int { return this.VERTEX_ARRAY_BINDING; } @:noCompletion private inline function get_MAX_VERTEX_OUTPUT_COMPONENTS():Int { return this.MAX_VERTEX_OUTPUT_COMPONENTS; } @:noCompletion private inline function get_MAX_FRAGMENT_INPUT_COMPONENTS():Int { return this.MAX_FRAGMENT_INPUT_COMPONENTS; } @:noCompletion private inline function get_MAX_SERVER_WAIT_TIMEOUT():Int { return this.MAX_SERVER_WAIT_TIMEOUT; } @:noCompletion private inline function get_MAX_ELEMENT_INDEX():Int { return this.MAX_ELEMENT_INDEX; } @:noCompletion private inline function get_RED():Int { return this.RED; } @:noCompletion private inline function get_RGB8():Int { return this.RGB8; } @:noCompletion private inline function get_RGBA8():Int { return this.RGBA8; } @:noCompletion private inline function get_RGB10_A2():Int { return this.RGB10_A2; } @:noCompletion private inline function get_TEXTURE_3D():Int { return this.TEXTURE_3D; } @:noCompletion private inline function get_TEXTURE_WRAP_R():Int { return this.TEXTURE_WRAP_R; } @:noCompletion private inline function get_TEXTURE_MIN_LOD():Int { return this.TEXTURE_MIN_LOD; } @:noCompletion private inline function get_TEXTURE_MAX_LOD():Int { return this.TEXTURE_MAX_LOD; } @:noCompletion private inline function get_TEXTURE_BASE_LEVEL():Int { return this.TEXTURE_BASE_LEVEL; } @:noCompletion private inline function get_TEXTURE_MAX_LEVEL():Int { return this.TEXTURE_MAX_LEVEL; } @:noCompletion private inline function get_TEXTURE_COMPARE_MODE():Int { return this.TEXTURE_COMPARE_MODE; } @:noCompletion private inline function get_TEXTURE_COMPARE_FUNC():Int { return this.TEXTURE_COMPARE_FUNC; } @:noCompletion private inline function get_SRGB():Int { return this.SRGB; } @:noCompletion private inline function get_SRGB8():Int { return this.SRGB8; } @:noCompletion private inline function get_SRGB8_ALPHA8():Int { return this.SRGB8_ALPHA8; } @:noCompletion private inline function get_COMPARE_REF_TO_TEXTURE():Int { return this.COMPARE_REF_TO_TEXTURE; } @:noCompletion private inline function get_RGBA32F():Int { return this.RGBA32F; } @:noCompletion private inline function get_RGB32F():Int { return this.RGB32F; } @:noCompletion private inline function get_RGBA16F():Int { return this.RGBA16F; } @:noCompletion private inline function get_RGB16F():Int { return this.RGB16F; } @:noCompletion private inline function get_TEXTURE_2D_ARRAY():Int { return this.TEXTURE_2D_ARRAY; } @:noCompletion private inline function get_TEXTURE_BINDING_2D_ARRAY():Int { return this.TEXTURE_BINDING_2D_ARRAY; } @:noCompletion private inline function get_R11F_G11F_B10F():Int { return this.R11F_G11F_B10F; } @:noCompletion private inline function get_RGB9_E5():Int { return this.RGB9_E5; } @:noCompletion private inline function get_RGBA32UI():Int { return this.RGBA32UI; } @:noCompletion private inline function get_RGB32UI():Int { return this.RGB32UI; } @:noCompletion private inline function get_RGBA16UI():Int { return this.RGBA16UI; } @:noCompletion private inline function get_RGB16UI():Int { return this.RGB16UI; } @:noCompletion private inline function get_RGBA8UI():Int { return this.RGBA8UI; } @:noCompletion private inline function get_RGB8UI():Int { return this.RGB8UI; } @:noCompletion private inline function get_RGBA32I():Int { return this.RGBA32I; } @:noCompletion private inline function get_RGB32I():Int { return this.RGB32I; } @:noCompletion private inline function get_RGBA16I():Int { return this.RGBA16I; } @:noCompletion private inline function get_RGB16I():Int { return this.RGB16I; } @:noCompletion private inline function get_RGBA8I():Int { return this.RGBA8I; } @:noCompletion private inline function get_RGB8I():Int { return this.RGB8I; } @:noCompletion private inline function get_RED_INTEGER():Int { return this.RED_INTEGER; } @:noCompletion private inline function get_RGB_INTEGER():Int { return this.RGB_INTEGER; } @:noCompletion private inline function get_RGBA_INTEGER():Int { return this.RGBA_INTEGER; } @:noCompletion private inline function get_R8():Int { return this.R8; } @:noCompletion private inline function get_RG8():Int { return this.RG8; } @:noCompletion private inline function get_R16F():Int { return this.R16F; } @:noCompletion private inline function get_R32F():Int { return this.R32F; } @:noCompletion private inline function get_RG16F():Int { return this.RG16F; } @:noCompletion private inline function get_RG32F():Int { return this.RG32F; } @:noCompletion private inline function get_R8I():Int { return this.R8I; } @:noCompletion private inline function get_R8UI():Int { return this.R8UI; } @:noCompletion private inline function get_R16I():Int { return this.R16I; } @:noCompletion private inline function get_R16UI():Int { return this.R16UI; } @:noCompletion private inline function get_R32I():Int { return this.R32I; } @:noCompletion private inline function get_R32UI():Int { return this.R32UI; } @:noCompletion private inline function get_RG8I():Int { return this.RG8I; } @:noCompletion private inline function get_RG8UI():Int { return this.RG8UI; } @:noCompletion private inline function get_RG16I():Int { return this.RG16I; } @:noCompletion private inline function get_RG16UI():Int { return this.RG16UI; } @:noCompletion private inline function get_RG32I():Int { return this.RG32I; } @:noCompletion private inline function get_RG32UI():Int { return this.RG32UI; } @:noCompletion private inline function get_R8_SNORM():Int { return this.R8_SNORM; } @:noCompletion private inline function get_RG8_SNORM():Int { return this.RG8_SNORM; } @:noCompletion private inline function get_RGB8_SNORM():Int { return this.RGB8_SNORM; } @:noCompletion private inline function get_RGBA8_SNORM():Int { return this.RGBA8_SNORM; } @:noCompletion private inline function get_RGB10_A2UI():Int { return this.RGB10_A2UI; } @:noCompletion private inline function get_TEXTURE_IMMUTABLE_FORMAT():Int { return this.TEXTURE_IMMUTABLE_FORMAT; } @:noCompletion private inline function get_TEXTURE_IMMUTABLE_LEVELS():Int { return this.TEXTURE_IMMUTABLE_LEVELS; } @:noCompletion private inline function get_UNSIGNED_INT_2_10_10_10_REV():Int { return this.UNSIGNED_INT_2_10_10_10_REV; } @:noCompletion private inline function get_UNSIGNED_INT_10F_11F_11F_REV():Int { return this.UNSIGNED_INT_10F_11F_11F_REV; } @:noCompletion private inline function get_UNSIGNED_INT_5_9_9_9_REV():Int { return this.UNSIGNED_INT_5_9_9_9_REV; } @:noCompletion private inline function get_FLOAT_32_UNSIGNED_INT_24_8_REV():Int { return this.FLOAT_32_UNSIGNED_INT_24_8_REV; } @:noCompletion private inline function get_UNSIGNED_INT_24_8():Int { return this.UNSIGNED_INT_24_8; } @:noCompletion private inline function get_HALF_FLOAT():Int { return this.HALF_FLOAT; } @:noCompletion private inline function get_RG():Int { return this.RG; } @:noCompletion private inline function get_RG_INTEGER():Int { return this.RG_INTEGER; } @:noCompletion private inline function get_INT_2_10_10_10_REV():Int { return this.INT_2_10_10_10_REV; } @:noCompletion private inline function get_CURRENT_QUERY():Int { return this.CURRENT_QUERY; } @:noCompletion private inline function get_QUERY_RESULT():Int { return this.QUERY_RESULT; } @:noCompletion private inline function get_QUERY_RESULT_AVAILABLE():Int { return this.QUERY_RESULT_AVAILABLE; } @:noCompletion private inline function get_ANY_SAMPLES_PASSED():Int { return this.ANY_SAMPLES_PASSED; } @:noCompletion private inline function get_ANY_SAMPLES_PASSED_CONSERVATIVE():Int { return this.ANY_SAMPLES_PASSED_CONSERVATIVE; } @:noCompletion private inline function get_MAX_DRAW_BUFFERS():Int { return this.MAX_DRAW_BUFFERS; } @:noCompletion private inline function get_DRAW_BUFFER0():Int { return this.DRAW_BUFFER0; } @:noCompletion private inline function get_DRAW_BUFFER1():Int { return this.DRAW_BUFFER1; } @:noCompletion private inline function get_DRAW_BUFFER2():Int { return this.DRAW_BUFFER2; } @:noCompletion private inline function get_DRAW_BUFFER3():Int { return this.DRAW_BUFFER3; } @:noCompletion private inline function get_DRAW_BUFFER4():Int { return this.DRAW_BUFFER4; } @:noCompletion private inline function get_DRAW_BUFFER5():Int { return this.DRAW_BUFFER5; } @:noCompletion private inline function get_DRAW_BUFFER6():Int { return this.DRAW_BUFFER6; } @:noCompletion private inline function get_DRAW_BUFFER7():Int { return this.DRAW_BUFFER7; } @:noCompletion private inline function get_DRAW_BUFFER8():Int { return this.DRAW_BUFFER8; } @:noCompletion private inline function get_DRAW_BUFFER9():Int { return this.DRAW_BUFFER9; } @:noCompletion private inline function get_DRAW_BUFFER10():Int { return this.DRAW_BUFFER10; } @:noCompletion private inline function get_DRAW_BUFFER11():Int { return this.DRAW_BUFFER11; } @:noCompletion private inline function get_DRAW_BUFFER12():Int { return this.DRAW_BUFFER12; } @:noCompletion private inline function get_DRAW_BUFFER13():Int { return this.DRAW_BUFFER13; } @:noCompletion private inline function get_DRAW_BUFFER14():Int { return this.DRAW_BUFFER14; } @:noCompletion private inline function get_DRAW_BUFFER15():Int { return this.DRAW_BUFFER15; } @:noCompletion private inline function get_MAX_COLOR_ATTACHMENTS():Int { return this.MAX_COLOR_ATTACHMENTS; } @:noCompletion private inline function get_COLOR_ATTACHMENT1():Int { return this.COLOR_ATTACHMENT1; } @:noCompletion private inline function get_COLOR_ATTACHMENT2():Int { return this.COLOR_ATTACHMENT2; } @:noCompletion private inline function get_COLOR_ATTACHMENT3():Int { return this.COLOR_ATTACHMENT3; } @:noCompletion private inline function get_COLOR_ATTACHMENT4():Int { return this.COLOR_ATTACHMENT4; } @:noCompletion private inline function get_COLOR_ATTACHMENT5():Int { return this.COLOR_ATTACHMENT5; } @:noCompletion private inline function get_COLOR_ATTACHMENT6():Int { return this.COLOR_ATTACHMENT6; } @:noCompletion private inline function get_COLOR_ATTACHMENT7():Int { return this.COLOR_ATTACHMENT7; } @:noCompletion private inline function get_COLOR_ATTACHMENT8():Int { return this.COLOR_ATTACHMENT8; } @:noCompletion private inline function get_COLOR_ATTACHMENT9():Int { return this.COLOR_ATTACHMENT9; } @:noCompletion private inline function get_COLOR_ATTACHMENT10():Int { return this.COLOR_ATTACHMENT10; } @:noCompletion private inline function get_COLOR_ATTACHMENT11():Int { return this.COLOR_ATTACHMENT11; } @:noCompletion private inline function get_COLOR_ATTACHMENT12():Int { return this.COLOR_ATTACHMENT12; } @:noCompletion private inline function get_COLOR_ATTACHMENT13():Int { return this.COLOR_ATTACHMENT13; } @:noCompletion private inline function get_COLOR_ATTACHMENT14():Int { return this.COLOR_ATTACHMENT14; } @:noCompletion private inline function get_COLOR_ATTACHMENT15():Int { return this.COLOR_ATTACHMENT15; } @:noCompletion private inline function get_SAMPLER_3D():Int { return this.SAMPLER_3D; } @:noCompletion private inline function get_SAMPLER_2D_SHADOW():Int { return this.SAMPLER_2D_SHADOW; } @:noCompletion private inline function get_SAMPLER_2D_ARRAY():Int { return this.SAMPLER_2D_ARRAY; } @:noCompletion private inline function get_SAMPLER_2D_ARRAY_SHADOW():Int { return this.SAMPLER_2D_ARRAY_SHADOW; } @:noCompletion private inline function get_SAMPLER_CUBE_SHADOW():Int { return this.SAMPLER_CUBE_SHADOW; } @:noCompletion private inline function get_INT_SAMPLER_2D():Int { return this.INT_SAMPLER_2D; } @:noCompletion private inline function get_INT_SAMPLER_3D():Int { return this.INT_SAMPLER_3D; } @:noCompletion private inline function get_INT_SAMPLER_CUBE():Int { return this.INT_SAMPLER_CUBE; } @:noCompletion private inline function get_INT_SAMPLER_2D_ARRAY():Int { return this.INT_SAMPLER_2D_ARRAY; } @:noCompletion private inline function get_UNSIGNED_INT_SAMPLER_2D():Int { return this.UNSIGNED_INT_SAMPLER_2D; } @:noCompletion private inline function get_UNSIGNED_INT_SAMPLER_3D():Int { return this.UNSIGNED_INT_SAMPLER_3D; } @:noCompletion private inline function get_UNSIGNED_INT_SAMPLER_CUBE():Int { return this.UNSIGNED_INT_SAMPLER_CUBE; } @:noCompletion private inline function get_UNSIGNED_INT_SAMPLER_2D_ARRAY():Int { return this.UNSIGNED_INT_SAMPLER_2D_ARRAY; } @:noCompletion private inline function get_MAX_SAMPLES():Int { return this.MAX_SAMPLES; } @:noCompletion private inline function get_SAMPLER_BINDING():Int { return this.SAMPLER_BINDING; } @:noCompletion private inline function get_PIXEL_PACK_BUFFER():Int { return this.PIXEL_PACK_BUFFER; } @:noCompletion private inline function get_PIXEL_UNPACK_BUFFER():Int { return this.PIXEL_UNPACK_BUFFER; } @:noCompletion private inline function get_PIXEL_PACK_BUFFER_BINDING():Int { return this.PIXEL_PACK_BUFFER_BINDING; } @:noCompletion private inline function get_PIXEL_UNPACK_BUFFER_BINDING():Int { return this.PIXEL_UNPACK_BUFFER_BINDING; } @:noCompletion private inline function get_COPY_READ_BUFFER():Int { return this.COPY_READ_BUFFER; } @:noCompletion private inline function get_COPY_WRITE_BUFFER():Int { return this.COPY_WRITE_BUFFER; } @:noCompletion private inline function get_COPY_READ_BUFFER_BINDING():Int { return this.COPY_READ_BUFFER_BINDING; } @:noCompletion private inline function get_COPY_WRITE_BUFFER_BINDING():Int { return this.COPY_WRITE_BUFFER_BINDING; } @:noCompletion private inline function get_FLOAT_MAT2x3():Int { return this.FLOAT_MAT2x3; } @:noCompletion private inline function get_FLOAT_MAT2x4():Int { return this.FLOAT_MAT2x4; } @:noCompletion private inline function get_FLOAT_MAT3x2():Int { return this.FLOAT_MAT3x2; } @:noCompletion private inline function get_FLOAT_MAT3x4():Int { return this.FLOAT_MAT3x4; } @:noCompletion private inline function get_FLOAT_MAT4x2():Int { return this.FLOAT_MAT4x2; } @:noCompletion private inline function get_FLOAT_MAT4x3():Int { return this.FLOAT_MAT4x3; } @:noCompletion private inline function get_UNSIGNED_INT_VEC2():Int { return this.UNSIGNED_INT_VEC2; } @:noCompletion private inline function get_UNSIGNED_INT_VEC3():Int { return this.UNSIGNED_INT_VEC3; } @:noCompletion private inline function get_UNSIGNED_INT_VEC4():Int { return this.UNSIGNED_INT_VEC4; } @:noCompletion private inline function get_UNSIGNED_NORMALIZED():Int { return this.UNSIGNED_NORMALIZED; } @:noCompletion private inline function get_SIGNED_NORMALIZED():Int { return this.SIGNED_NORMALIZED; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_INTEGER():Int { return this.VERTEX_ATTRIB_ARRAY_INTEGER; } @:noCompletion private inline function get_VERTEX_ATTRIB_ARRAY_DIVISOR():Int { return this.VERTEX_ATTRIB_ARRAY_DIVISOR; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER_MODE():Int { return this.TRANSFORM_FEEDBACK_BUFFER_MODE; } @:noCompletion private inline function get_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS():Int { return this.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_VARYINGS():Int { return this.TRANSFORM_FEEDBACK_VARYINGS; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER_START():Int { return this.TRANSFORM_FEEDBACK_BUFFER_START; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER_SIZE():Int { return this.TRANSFORM_FEEDBACK_BUFFER_SIZE; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN():Int { return this.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN; } @:noCompletion private inline function get_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS():Int { return this.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS; } @:noCompletion private inline function get_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS():Int { return this.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; } @:noCompletion private inline function get_INTERLEAVED_ATTRIBS():Int { return this.INTERLEAVED_ATTRIBS; } @:noCompletion private inline function get_SEPARATE_ATTRIBS():Int { return this.SEPARATE_ATTRIBS; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER():Int { return this.TRANSFORM_FEEDBACK_BUFFER; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BUFFER_BINDING():Int { return this.TRANSFORM_FEEDBACK_BUFFER_BINDING; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK():Int { return this.TRANSFORM_FEEDBACK; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_PAUSED():Int { return this.TRANSFORM_FEEDBACK_PAUSED; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_ACTIVE():Int { return this.TRANSFORM_FEEDBACK_ACTIVE; } @:noCompletion private inline function get_TRANSFORM_FEEDBACK_BINDING():Int { return this.TRANSFORM_FEEDBACK_BINDING; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING():Int { return this.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE():Int { return this.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_RED_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_RED_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE():Int { return this.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE; } @:noCompletion private inline function get_FRAMEBUFFER_DEFAULT():Int { return this.FRAMEBUFFER_DEFAULT; } @:noCompletion private inline function get_DEPTH24_STENCIL8():Int { return this.DEPTH24_STENCIL8; } @:noCompletion private inline function get_DRAW_FRAMEBUFFER_BINDING():Int { return this.DRAW_FRAMEBUFFER_BINDING; } @:noCompletion private inline function get_READ_FRAMEBUFFER():Int { return this.READ_FRAMEBUFFER; } @:noCompletion private inline function get_DRAW_FRAMEBUFFER():Int { return this.DRAW_FRAMEBUFFER; } @:noCompletion private inline function get_READ_FRAMEBUFFER_BINDING():Int { return this.READ_FRAMEBUFFER_BINDING; } @:noCompletion private inline function get_RENDERBUFFER_SAMPLES():Int { return this.RENDERBUFFER_SAMPLES; } @:noCompletion private inline function get_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER():Int { return this.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER; } @:noCompletion private inline function get_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE():Int { return this.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE; } @:noCompletion private inline function get_UNIFORM_BUFFER():Int { return this.UNIFORM_BUFFER; } @:noCompletion private inline function get_UNIFORM_BUFFER_BINDING():Int { return this.UNIFORM_BUFFER_BINDING; } @:noCompletion private inline function get_UNIFORM_BUFFER_START():Int { return this.UNIFORM_BUFFER_START; } @:noCompletion private inline function get_UNIFORM_BUFFER_SIZE():Int { return this.UNIFORM_BUFFER_SIZE; } @:noCompletion private inline function get_MAX_VERTEX_UNIFORM_BLOCKS():Int { return this.MAX_VERTEX_UNIFORM_BLOCKS; } @:noCompletion private inline function get_MAX_FRAGMENT_UNIFORM_BLOCKS():Int { return this.MAX_FRAGMENT_UNIFORM_BLOCKS; } @:noCompletion private inline function get_MAX_COMBINED_UNIFORM_BLOCKS():Int { return this.MAX_COMBINED_UNIFORM_BLOCKS; } @:noCompletion private inline function get_MAX_UNIFORM_BUFFER_BINDINGS():Int { return this.MAX_UNIFORM_BUFFER_BINDINGS; } @:noCompletion private inline function get_MAX_UNIFORM_BLOCK_SIZE():Int { return this.MAX_UNIFORM_BLOCK_SIZE; } @:noCompletion private inline function get_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS():Int { return this.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS; } @:noCompletion private inline function get_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS():Int { return this.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS; } @:noCompletion private inline function get_UNIFORM_BUFFER_OFFSET_ALIGNMENT():Int { return this.UNIFORM_BUFFER_OFFSET_ALIGNMENT; } @:noCompletion private inline function get_ACTIVE_UNIFORM_BLOCKS():Int { return this.ACTIVE_UNIFORM_BLOCKS; } @:noCompletion private inline function get_UNIFORM_TYPE():Int { return this.UNIFORM_TYPE; } @:noCompletion private inline function get_UNIFORM_SIZE():Int { return this.UNIFORM_SIZE; } @:noCompletion private inline function get_UNIFORM_BLOCK_INDEX():Int { return this.UNIFORM_BLOCK_INDEX; } @:noCompletion private inline function get_UNIFORM_OFFSET():Int { return this.UNIFORM_OFFSET; } @:noCompletion private inline function get_UNIFORM_ARRAY_STRIDE():Int { return this.UNIFORM_ARRAY_STRIDE; } @:noCompletion private inline function get_UNIFORM_MATRIX_STRIDE():Int { return this.UNIFORM_MATRIX_STRIDE; } @:noCompletion private inline function get_UNIFORM_IS_ROW_MAJOR():Int { return this.UNIFORM_IS_ROW_MAJOR; } @:noCompletion private inline function get_UNIFORM_BLOCK_BINDING():Int { return this.UNIFORM_BLOCK_BINDING; } @:noCompletion private inline function get_UNIFORM_BLOCK_DATA_SIZE():Int { return this.UNIFORM_BLOCK_DATA_SIZE; } @:noCompletion private inline function get_UNIFORM_BLOCK_ACTIVE_UNIFORMS():Int { return this.UNIFORM_BLOCK_ACTIVE_UNIFORMS; } @:noCompletion private inline function get_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES():Int { return this.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES; } @:noCompletion private inline function get_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER():Int { return this.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER; } @:noCompletion private inline function get_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER():Int { return this.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER; } @:noCompletion private inline function get_OBJECT_TYPE():Int { return this.OBJECT_TYPE; } @:noCompletion private inline function get_SYNC_CONDITION():Int { return this.SYNC_CONDITION; } @:noCompletion private inline function get_SYNC_STATUS():Int { return this.SYNC_STATUS; } @:noCompletion private inline function get_SYNC_FLAGS():Int { return this.SYNC_FLAGS; } @:noCompletion private inline function get_SYNC_FENCE():Int { return this.SYNC_FENCE; } @:noCompletion private inline function get_SYNC_GPU_COMMANDS_COMPLETE():Int { return this.SYNC_GPU_COMMANDS_COMPLETE; } @:noCompletion private inline function get_UNSIGNALED():Int { return this.UNSIGNALED; } @:noCompletion private inline function get_SIGNALED():Int { return this.SIGNALED; } @:noCompletion private inline function get_ALREADY_SIGNALED():Int { return this.ALREADY_SIGNALED; } @:noCompletion private inline function get_TIMEOUT_EXPIRED():Int { return this.TIMEOUT_EXPIRED; } @:noCompletion private inline function get_CONDITION_SATISFIED():Int { return this.CONDITION_SATISFIED; } @:noCompletion private inline function get_WAIT_FAILED():Int { return this.WAIT_FAILED; } @:noCompletion private inline function get_SYNC_FLUSH_COMMANDS_BIT():Int { return this.SYNC_FLUSH_COMMANDS_BIT; } @:noCompletion private inline function get_COLOR():Int { return this.COLOR; } @:noCompletion private inline function get_DEPTH():Int { return this.DEPTH; } @:noCompletion private inline function get_STENCIL():Int { return this.STENCIL; } @:noCompletion private inline function get_MIN():Int { return this.MIN; } @:noCompletion private inline function get_MAX():Int { return this.MAX; } @:noCompletion private inline function get_DEPTH_COMPONENT24():Int { return this.DEPTH_COMPONENT24; } @:noCompletion private inline function get_STREAM_READ():Int { return this.STREAM_READ; } @:noCompletion private inline function get_STREAM_COPY():Int { return this.STREAM_COPY; } @:noCompletion private inline function get_STATIC_READ():Int { return this.STATIC_READ; } @:noCompletion private inline function get_STATIC_COPY():Int { return this.STATIC_COPY; } @:noCompletion private inline function get_DYNAMIC_READ():Int { return this.DYNAMIC_READ; } @:noCompletion private inline function get_DYNAMIC_COPY():Int { return this.DYNAMIC_COPY; } @:noCompletion private inline function get_DEPTH_COMPONENT32F():Int { return this.DEPTH_COMPONENT32F; } @:noCompletion private inline function get_DEPTH32F_STENCIL8():Int { return this.DEPTH32F_STENCIL8; } @:noCompletion private inline function get_INVALID_INDEX():Int { return this.INVALID_INDEX; } @:noCompletion private inline function get_TIMEOUT_IGNORED():Int { return this.TIMEOUT_IGNORED; } @:noCompletion private inline function get_MAX_CLIENT_WAIT_TIMEOUT_WEBGL():Int { return this.MAX_CLIENT_WAIT_TIMEOUT_WEBGL; } public inline function activeTexture(texture:Int):Void { this.activeTexture(texture); } public inline function attachShader(program:GLProgram, shader:GLShader):Void { this.attachShader(program, shader); } public inline function beginQuery(target:Int, query:GLQuery):Void { this.beginQuery(target, query); } public inline function beginTransformFeedback(primitiveNode:Int):Void { this.beginTransformFeedback(primitiveNode); } public inline function bindAttribLocation(program:GLProgram, index:Int, name:String):Void { this.bindAttribLocation(program, index, name); } public inline function bindBuffer(target:Int, buffer:GLBuffer):Void { this.bindBuffer(target, buffer); } public inline function bindBufferBase(target:Int, index:Int, buffer:GLBuffer):Void { this.bindBufferBase(target, index, buffer); } public inline function bindBufferRange(target:Int, index:Int, buffer:GLBuffer, offset:DataPointer, size:Int):Void { this.bindBufferRange(target, index, buffer, offset, size); } public inline function bindFramebuffer(target:Int, framebuffer:GLFramebuffer):Void { this.bindFramebuffer(target, framebuffer); } public inline function bindRenderbuffer(target:Int, renderbuffer:GLRenderbuffer):Void { this.bindRenderbuffer(target, renderbuffer); } public inline function bindSampler(unit:Int, sampler:GLSampler):Void { this.bindSampler(unit, sampler); } public inline function bindTexture(target:Int, texture:GLTexture):Void { this.bindTexture(target, texture); } public inline function bindTransformFeedback(target:Int, transformFeedback:GLTransformFeedback):Void { this.bindTransformFeedback(target, transformFeedback); } public inline function bindVertexArray(vertexArray:GLVertexArrayObject):Void { this.bindVertexArray(vertexArray); } public inline function blendColor(red:Float, green:Float, blue:Float, alpha:Float):Void { this.blendColor(red, green, blue, alpha); } public inline function blendEquation(mode:Int):Void { this.blendEquation(mode); } public inline function blendEquationSeparate(modeRGB:Int, modeAlpha:Int):Void { this.blendEquationSeparate(modeRGB, modeAlpha); } public inline function blendFunc(sfactor:Int, dfactor:Int):Void { this.blendFunc(sfactor, dfactor); } public inline function blendFuncSeparate(srcRGB:Int, dstRGB:Int, srcAlpha:Int, dstAlpha:Int):Void { this.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); } public inline function blitFramebuffer(srcX0:Int, srcY0:Int, srcX1:Int, srcY1:Int, dstX0:Int, dstY0:Int, dstX1:Int, dstY1:Int, mask:Int, filter:Int):Void { this.blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } #if !lime_webgl public function bufferData(target:Int, srcData:ArrayBufferView, usage:Int, srcOffset:Int = 0, length:Int = 0):Void #else public inline function bufferData(target:Int, srcData:Dynamic, usage:Int, ?srcOffset:Int, ?length:Int):Void #end { var size = (srcData != null) ? srcData.byteLength : 0; __tempPointer.set(srcData, srcOffset); this.bufferData(target, size, __tempPointer, usage); } #if !lime_webgl public inline function bufferSubData(target:Int, offset:Int, srcData:ArrayBufferView, srcOffset:Int = 0, ?length:Int):Void #else public inline function bufferSubData(target:Int, offset:Int, srcData:Dynamic, ?srcOffset:Int, ?length:Int):Void #end { var size = (length != null) ? length : (srcData != null) ? srcData.byteLength : 0; __tempPointer.set(srcData, srcOffset); this.bufferSubData(target, offset, size, __tempPointer); } public inline function checkFramebufferStatus(target:Int):Int { return this.checkFramebufferStatus(target); } public inline function clear(mask:Int):Void { this.clear(mask); } public inline function clearBufferfi(buffer:Int, drawbuffer:Int, depth:Float, stencil:Int):Void { this.clearBufferfi(buffer, drawbuffer, depth, stencil); } public function clearBufferfv(buffer:Int, drawbuffer:Int, values:ArrayBufferView, srcOffset:Int = 0):Void { __tempPointer.set(values, srcOffset); this.clearBufferfv(buffer, drawbuffer, __tempPointer); } public function clearBufferiv(buffer:Int, drawbuffer:Int, values:ArrayBufferView, ?srcOffset:Int):Void { __tempPointer.set(values, srcOffset); this.clearBufferiv(buffer, drawbuffer, __tempPointer); } public function clearBufferuiv(buffer:Int, drawbuffer:Int, values:ArrayBufferView, ?srcOffset:Int):Void { __tempPointer.set(values, srcOffset); this.clearBufferuiv(buffer, drawbuffer, __tempPointer); } public inline function clearColor(red:Float, green:Float, blue:Float, alpha:Float):Void { this.clearColor(red, green, blue, alpha); } public inline function clearDepth(depth:Float):Void { this.clearDepthf(depth); } public inline function clearStencil(s:Int):Void { this.clearStencil(s); } public inline function clientWaitSync(sync:GLSync, flags:Int, timeout:Int64):Int { return this.clientWaitSync(sync, flags, timeout); } public inline function colorMask(red:Bool, green:Bool, blue:Bool, alpha:Bool):Void { this.colorMask(red, green, blue, alpha); } public inline function compileShader(shader:GLShader):Void { this.compileShader(shader); } #if !lime_webgl public function compressedTexImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, srcData:ArrayBufferView, srcOffset:Int = 0, ?srcLengthOverride:Int):Void #else public inline function compressedTexImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, srcData:Dynamic, ?srcOffset:Int, ?srcLengthOverride:Int):Void #end { var imageSize = (srcLengthOverride != null) ? srcLengthOverride : (srcData != null) ? srcData.byteLength : 0; __tempPointer.set(srcData, srcOffset); this.compressedTexImage2D(target, level, internalformat, width, height, border, imageSize, __tempPointer); } public function compressedTexImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, srcData:ArrayBufferView, srcOffset:Int = 0, ?srcLengthOverride:Int):Void { var imageSize = (srcLengthOverride != null) ? srcLengthOverride : (srcData != null) ? srcData.byteLength : 0; __tempPointer.set(srcData, srcOffset); this.compressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, __tempPointer); } #if !lime_webgl public inline function compressedTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, srcData:ArrayBufferView, srcOffset:Int = 0, ?srcLengthOverride:Int):Void #else public inline function compressedTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, srcData:Dynamic, ?srcOffset:Int, ?srcLengthOverride:Int):Void #end { var imageSize = (srcLengthOverride != null) ? srcLengthOverride : (srcData != null) ? srcData.byteLength : 0; __tempPointer.set(srcData, srcOffset); this.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, __tempPointer); } public inline function compressedTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, srcData:ArrayBufferView, srcOffset:Int = 0, ?srcLengthOverride:Int):Void { var imageSize = (srcLengthOverride != null) ? srcLengthOverride : (srcData != null) ? srcData.byteLength : 0; __tempPointer.set(srcData, srcOffset); this.compressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, __tempPointer); } public inline function copyBufferSubData(readTarget:Int, writeTarget:Int, readOffset:DataPointer, writeOffset:DataPointer, size:Int):Void { this.copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); } public inline function copyTexImage2D(target:Int, level:Int, internalformat:Int, x:Int, y:Int, width:Int, height:Int, border:Int):Void { this.copyTexImage2D(target, level, internalformat, x, y, width, height, border); } public inline function copyTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, x:Int, y:Int, width:Int, height:Int):Void { this.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); } public inline function copyTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, x:Int, y:Int, width:Int, height:Int):Void { this.copyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); } public inline function createBuffer():GLBuffer { return this.createBuffer(); } public inline function createFramebuffer():GLFramebuffer { return this.createFramebuffer(); } public inline function createProgram():GLProgram { return this.createProgram(); } public inline function createQuery():GLQuery { return this.createQuery(); } public inline function createRenderbuffer():GLRenderbuffer { return this.createRenderbuffer(); } public inline function createSampler():GLSampler { return this.createSampler(); } public inline function createShader(type:Int):GLShader { return this.createShader(type); } public inline function createTexture():GLTexture { return this.createTexture(); } public inline function createTransformFeedback():GLTransformFeedback { return this.createTransformFeedback(); } public inline function createVertexArray():GLVertexArrayObject { return this.createVertexArray(); } public inline function cullFace(mode:Int):Void { this.cullFace(mode); } public inline function deleteBuffer(buffer:GLBuffer):Void { this.deleteBuffer(buffer); } public inline function deleteFramebuffer(framebuffer:GLFramebuffer):Void { this.deleteFramebuffer(framebuffer); } public inline function deleteProgram(program:GLProgram):Void { this.deleteProgram(program); } public inline function deleteQuery(query:GLQuery):Void { this.deleteQuery(query); } public inline function deleteRenderbuffer(renderbuffer:GLRenderbuffer):Void { this.deleteRenderbuffer(renderbuffer); } public inline function deleteSampler(sampler:GLSampler):Void { this.deleteSampler(sampler); } public inline function deleteShader(shader:GLShader):Void { this.deleteShader(shader); } public inline function deleteSync(sync:GLSync):Void { this.deleteSync(sync); } public inline function deleteTexture(texture:GLTexture):Void { this.deleteTexture(texture); } public inline function deleteTransformFeedback(transformFeedback:GLTransformFeedback):Void { this.deleteTransformFeedback(transformFeedback); } public inline function deleteVertexArray(vertexArray:GLVertexArrayObject):Void { this.deleteVertexArray(vertexArray); } public inline function depthFunc(func:Int):Void { this.depthFunc(func); } public inline function depthMask(flag:Bool):Void { this.depthMask(flag); } public inline function depthRange(zNear:Float, zFar:Float):Void { this.depthRangef(zNear, zFar); } public inline function detachShader(program:GLProgram, shader:GLShader):Void { this.detachShader(program, shader); } public inline function disable(cap:Int):Void { this.disable(cap); } public inline function disableVertexAttribArray(index:Int):Void { this.disableVertexAttribArray(index); } public inline function drawArrays(mode:Int, first:Int, count:Int):Void { this.drawArrays(mode, first, count); } public inline function drawArraysInstanced(mode:Int, first:Int, count:Int, instanceCount:Int):Void { this.drawArraysInstanced(mode, first, count, instanceCount); } public inline function drawBuffers(buffers:Array):Void { this.drawBuffers(buffers); } public inline function drawElements(mode:Int, count:Int, type:Int, offset:DataPointer):Void { this.drawElements(mode, count, type, offset); } public inline function drawElementsInstanced(mode:Int, count:Int, type:Int, offset:DataPointer, instanceCount:Int):Void { this.drawElementsInstanced(mode, count, type, offset, instanceCount); } public inline function drawRangeElements(mode:Int, start:Int, end:Int, count:Int, type:Int, offset:DataPointer):Void { this.drawRangeElements(mode, start, end, count, type, offset); } public inline function enable(cap:Int):Void { this.enable(cap); } public inline function enableVertexAttribArray(index:Int):Void { this.enableVertexAttribArray(index); } public inline function endQuery(target:Int):Void { this.endQuery(target); } public inline function endTransformFeedback():Void { this.endTransformFeedback(); } public inline function fenceSync(condition:Int, flags:Int):GLSync { return this.fenceSync(condition, flags); } public inline function finish():Void { this.finish(); } public inline function flush():Void { this.flush(); } public inline function framebufferRenderbuffer(target:Int, attachment:Int, renderbuffertarget:Int, renderbuffer:GLRenderbuffer):Void { this.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); } public inline function framebufferTexture2D(target:Int, attachment:Int, textarget:Int, texture:GLTexture, level:Int):Void { this.framebufferTexture2D(target, attachment, textarget, texture, level); } public inline function framebufferTextureLayer(target:Int, attachment:Int, texture:GLTexture, level:Int, layer:Int):Void { this.framebufferTextureLayer(target, attachment, texture, level, layer); } public inline function frontFace(mode:Int):Void { this.frontFace(mode); } public inline function generateMipmap(target:Int):Void { this.generateMipmap(target); } public inline function getActiveAttrib(program:GLProgram, index:Int):GLActiveInfo { return this.getActiveAttrib(program, index); } public inline function getActiveUniform(program:GLProgram, index:Int):GLActiveInfo { return this.getActiveUniform(program, index); } public inline function getActiveUniformBlockName(program:GLProgram, uniformBlockIndex:Int):String { return this.getActiveUniformBlockName(program, uniformBlockIndex); } public inline function getActiveUniformBlockParameter(program:GLProgram, uniformBlockIndex:Int, pname:Int):Dynamic { return this.getActiveUniformBlockParameter(program, uniformBlockIndex, pname); } public inline function getActiveUniforms(program:GLProgram, uniformIndices:Array, pname:Int):Dynamic { return this.getActiveUniforms(program, uniformIndices, pname); } public inline function getAttachedShaders(program:GLProgram):Array { return this.getAttachedShaders(program); } public inline function getAttribLocation(program:GLProgram, name:String):Int { return this.getAttribLocation(program, name); } public inline function getBufferParameter(target:Int, pname:Int):Dynamic { return this.getBufferParameter(target, pname); } #if !lime_webgl public inline function getBufferSubData(target:Int, srcByteOffset:DataPointer, dstData:ArrayBuffer, srcOffset:Int = 0, ?length:Int):Void #else public inline function getBufferSubData(target:Int, srcByteOffset:DataPointer, dstData:Dynamic, ?srcOffset:Dynamic, ?length:Int):Void #end { #if !js var size = (length != null) ? length : (dstData != null) ? dstData.length : 0; this.getBufferSubData(target, srcByteOffset + srcOffset, size, dstData); #end } public inline function getContextAttributes():GLContextAttributes { return this.getContextAttributes(); } public inline function getError():Int { return this.getError(); } public inline function getExtension(name:String):Dynamic { return this.getExtension(name); } public inline function getFragDataLocation(program:GLProgram, name:String):Int { return this.getFragDataLocation(program, name); } public inline function getFramebufferAttachmentParameter(target:Int, attachment:Int, pname:Int):Dynamic { return this.getFramebufferAttachmentParameter(target, attachment, pname); } public inline function getIndexedParameter(target:Int, index:Int):Dynamic { return this.getIndexedParameter(target, index); } public inline function getInternalformatParameter(target:Int, internalformat:Int, pname:Int):Dynamic { return this.getInternalformatParameter(target, internalformat, pname); } public inline function getParameter(pname:Int):Dynamic { return this.getParameter(pname); } public inline function getProgramInfoLog(program:GLProgram):String { return this.getProgramInfoLog(program); } public inline function getProgramParameter(program:GLProgram, pname:Int):Dynamic { return this.getProgramParameter(program, pname); } public inline function getQuery(target:Int, pname:Int):GLQuery { return this.getQuery(target, pname); } public inline function getQueryParameter(query:GLQuery, pname:Int):Dynamic { return this.getQueryParameter(query, pname); } public inline function getRenderbufferParameter(target:Int, pname:Int):Dynamic { return this.getRenderbufferParameter(target, pname); } public inline function getSamplerParameter(sampler:GLSampler, pname:Int):Dynamic { return this.getSamplerParameter(sampler, pname); } public inline function getShaderInfoLog(shader:GLShader):String { return this.getShaderInfoLog(shader); } public inline function getShaderParameter(shader:GLShader, pname:Int):Dynamic { return this.getShaderParameter(shader, pname); } public inline function getShaderPrecisionFormat(shadertype:Int, precisiontype:Int):GLShaderPrecisionFormat { return this.getShaderPrecisionFormat(shadertype, precisiontype); } public inline function getShaderSource(shader:GLShader):String { return this.getShaderSource(shader); } public inline function getSupportedExtensions():Array { return this.getSupportedExtensions(); } public inline function getSyncParameter(sync:GLSync, pname:Int):Dynamic { return this.getSyncParameter(sync, pname); } public inline function getTexParameter(target:Int, pname:Int):Dynamic { return this.getTexParameter(target, pname); } public inline function getTransformFeedbackVarying(program:GLProgram, index:Int):GLActiveInfo { return this.getTransformFeedbackVarying(program, index); } public inline function getUniform(program:GLProgram, location:GLUniformLocation):Dynamic { return this.getUniform(program, location); } public inline function getUniformBlockIndex(program:GLProgram, uniformBlockName:String):Int { return this.getUniformBlockIndex(program, uniformBlockName); } public inline function getUniformIndices(program:GLProgram, uniformNames:Array):Array { return this.getUniformIndices(program, uniformNames); } public inline function getUniformLocation(program:GLProgram, name:String):GLUniformLocation { return this.getUniformLocation(program, name); } public inline function getVertexAttrib(index:Int, pname:Int):Dynamic { return this.getVertexAttrib(index, pname); } public inline function getVertexAttribOffset(index:Int, pname:Int):DataPointer { return this.getVertexAttribPointerv(index, pname); } public inline function hint(target:Int, mode:Int):Void { this.hint(target, mode); } public inline function invalidateFramebuffer(target:Int, attachments:Array):Void { this.invalidateFramebuffer(target, attachments); } public inline function invalidateSubFramebuffer(target:Int, attachments:Array, x:Int, y:Int, width:Int, height:Int):Void { this.invalidateSubFramebuffer(target, attachments, x, y, width, height); } public inline function isBuffer(buffer:GLBuffer):Bool { return this.isBuffer(buffer); } public inline function isContextLost():Bool { return this.isContextLost(); } public inline function isEnabled(cap:Int):Bool { return this.isEnabled(cap); } public inline function isFramebuffer(framebuffer:GLFramebuffer):Bool { return this.isFramebuffer(framebuffer); } public inline function isProgram(program:GLProgram):Bool { return this.isProgram(program); } public inline function isQuery(query:GLQuery):Bool { return this.isQuery(query); } public inline function isRenderbuffer(renderbuffer:GLRenderbuffer):Bool { return this.isRenderbuffer(renderbuffer); } public inline function isSampler(sampler:GLSampler):Bool { return this.isSampler(sampler); } public inline function isShader(shader:GLShader):Bool { return this.isShader(shader); } public inline function isSync(sync:GLSync):Bool { return this.isSync(sync); } public inline function isTexture(texture:GLTexture):Bool { return this.isTexture(texture); } public inline function isTransformFeedback(transformFeedback:GLTransformFeedback):Bool { return this.isTransformFeedback(transformFeedback); } public inline function isVertexArray(vertexArray:GLVertexArrayObject):Bool { return this.isVertexArray(vertexArray); } public inline function lineWidth(width:Float):Void { this.lineWidth(width); } public inline function linkProgram(program:GLProgram):Void { this.linkProgram(program); } public inline function pauseTransformFeedback():Void { this.pauseTransformFeedback(); } public inline function pixelStorei(pname:Int, param:Int):Void { this.pixelStorei(pname, param); } public inline function polygonOffset(factor:Float, units:Float):Void { this.polygonOffset(factor, units); } public inline function readBuffer(src:Int):Void { this.readBuffer(src); } #if !lime_webgl public inline function readPixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView, dstOffset:Int = 0):Void #else public inline function readPixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:Dynamic, ?dstOffset:Int):Void #end { __tempPointer.set(pixels, dstOffset); this.readPixels(x, y, width, height, format, type, __tempPointer); } public inline function renderbufferStorage(target:Int, internalformat:Int, width:Int, height:Int):Void { this.renderbufferStorage(target, internalformat, width, height); } public inline function renderbufferStorageMultisample(target:Int, samples:Int, internalformat:Int, width:Int, height:Int):Void { this.renderbufferStorageMultisample(target, samples, internalformat, width, height); } public inline function resumeTransformFeedback():Void { this.resumeTransformFeedback(); } public inline function sampleCoverage(value:Float, invert:Bool):Void { this.sampleCoverage(value, invert); } public inline function samplerParameterf(sampler:GLSampler, pname:Int, param:Float):Void { this.samplerParameterf(sampler, pname, param); } public inline function samplerParameteri(sampler:GLSampler, pname:Int, param:Int):Void { this.samplerParameteri(sampler, pname, param); } public inline function scissor(x:Int, y:Int, width:Int, height:Int):Void { this.scissor(x, y, width, height); } public inline function shaderSource(shader:GLShader, source:String):Void { this.shaderSource(shader, source); } public inline function stencilFunc(func:Int, ref:Int, mask:Int):Void { this.stencilFunc(func, ref, mask); } public inline function stencilFuncSeparate(face:Int, func:Int, ref:Int, mask:Int):Void { this.stencilFuncSeparate(face, func, ref, mask); } public inline function stencilMask(mask:Int):Void { this.stencilMask(mask); } public inline function stencilMaskSeparate(face:Int, mask:Int):Void { this.stencilMaskSeparate(face, mask); } public inline function stencilOp(fail:Int, zfail:Int, zpass:Int):Void { this.stencilOp(fail, zfail, zpass); } public inline function stencilOpSeparate(face:Int, fail:Int, zfail:Int, zpass:Int):Void { this.stencilOpSeparate(face, fail, zfail, zpass); } #if !lime_webgl public inline function texImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, srcData:ArrayBufferView, srcOffset:Int = 0):Void #else public inline function texImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Dynamic, ?format:Int, ?type:Int, ?srcData:Dynamic, ?srcOffset:Int):Void #end { #if !lime_webgl __tempPointer.set(srcData, srcOffset); this.texImage2D(target, level, internalformat, width, height, border, format, type, __tempPointer); #end } public inline function texImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, srcData:ArrayBufferView, srcOffset:Int = 0):Void { __tempPointer.set(srcData, srcOffset); this.texImage3D(target, level, internalformat, width, height, depth, border, format, type, __tempPointer); } public inline function texStorage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int):Void { this.texStorage2D(target, level, internalformat, width, height); } public inline function texStorage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int):Void { this.texStorage3D(target, level, internalformat, width, height, depth); } public inline function texParameterf(target:Int, pname:Int, param:Float):Void { this.texParameterf(target, pname, param); } public inline function texParameteri(target:Int, pname:Int, param:Int):Void { this.texParameteri(target, pname, param); } #if !lime_webgl public inline function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, srcData:ArrayBufferView, srcOffset:Int = 0):Void #else public inline function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Dynamic, ?type:Int, ?srcData:Dynamic, ?srcOffset:Int):Void #end { __tempPointer.set(srcData, srcOffset); this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, __tempPointer); } public inline function texSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, srcData:ArrayBufferView, srcOffset:Int = 0):Void { __tempPointer.set(srcData, srcOffset); this.texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, __tempPointer); } public inline function transformFeedbackVaryings(program:GLProgram, varyings:Array, bufferMode:Int):Void { this.transformFeedbackVaryings(program, varyings, bufferMode); } public inline function uniform1f(location:GLUniformLocation, v0:Float):Void { this.uniform1f(location, v0); } #if !lime_webgl public inline function uniform1fv(location:GLUniformLocation, v:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void #else public inline function uniform1fv(location:GLUniformLocation, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { this.uniform1fv(location, v != null ? v.length : 0, v); } public inline function uniform1i(location:GLUniformLocation, v0:Int):Void { this.uniform1i(location, v0); } #if !lime_webgl public inline function uniform1iv(location:GLUniformLocation, v:Int32Array, ?srcOffset:Int, ?srcLength:Int):Void #else public inline function uniform1iv(location:GLUniformLocation, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { this.uniform1iv(location, v != null ? v.length : 0, v); } public inline function uniform1ui(location:GLUniformLocation, v0:Int):Void { this.uniform1ui(location, v0); } public inline function uniform1uiv(location:GLUniformLocation, v:UInt32Array, ?srcOffset:Int, ?srcLength:Int):Void { this.uniform1uiv(location, v != null ? v.length : 0, v); } public inline function uniform2f(location:GLUniformLocation, v0:Float, v1:Float):Void { this.uniform2f(location, v0, v1); } #if !lime_webgl public inline function uniform2fv(location:GLUniformLocation, v:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void #else public function uniform2fv(location:GLUniformLocation, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { this.uniform2fv(location, v != null ? v.length >> 1 : 0, v); } public inline function uniform2i(location:GLUniformLocation, v0:Int, v1:Int):Void { this.uniform2i(location, v0, v1); } #if !lime_webgl public inline function uniform2iv(location:GLUniformLocation, v:Int32Array, ?srcOffset:Int, ?srcLength:Int):Void #else public inline function uniform2iv(location:GLUniformLocation, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { this.uniform2iv(location, v != null ? v.length >> 1 : 0, v); } public inline function uniform2ui(location:GLUniformLocation, v0:Int, v1:Int):Void { this.uniform2ui(location, v0, v1); } public inline function uniform2uiv(location:GLUniformLocation, v:UInt32Array, ?srcOffset:Int, ?srcLength:Int):Void { this.uniform2uiv(location, v != null ? v.length >> 1 : 0, v); } public inline function uniform3f(location:GLUniformLocation, v0:Float, v1:Float, v2:Float):Void { this.uniform3f(location, v0, v1, v2); } #if !lime_webgl public inline function uniform3fv(location:GLUniformLocation, v:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void #else public inline function uniform3fv(location:GLUniformLocation, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { this.uniform3fv(location, v != null ? Std.int(v.length / 3) : 0, v); } public inline function uniform3i(location:GLUniformLocation, v0:Int, v1:Int, v2:Int):Void { this.uniform3i(location, v0, v1, v2); } #if !lime_webgl public inline function uniform3iv(location:GLUniformLocation, v:Int32Array, ?srcOffset:Int, ?srcLength:Int):Void #else public inline function uniform3iv(location:GLUniformLocation, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { this.uniform3iv(location, v != null ? Std.int(v.length / 3) : 0, v); } public inline function uniform3ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int):Void { this.uniform3ui(location, v0, v1, v2); } public inline function uniform3uiv(location:GLUniformLocation, v:UInt32Array, ?srcOffset:Int, ?srcLength:Int):Void { this.uniform3uiv(location, v != null ? Std.int(v.length / 3) : 0, v); } public inline function uniform4f(location:GLUniformLocation, v0:Float, v1:Float, v2:Float, v3:Float):Void { this.uniform4f(location, v0, v1, v2, v3); } #if !lime_webgl public inline function uniform4fv(location:GLUniformLocation, v:Float32Array, ?srcOffset:Int, ?srcLength:Int):Void #else public inline function uniform4fv(location:GLUniformLocation, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { this.uniform4fv(location, v != null ? v.length >> 2 : 0, v); } public inline function uniform4i(location:GLUniformLocation, v0:Int, v1:Int, v2:Int, v3:Int):Void { this.uniform4i(location, v0, v1, v2, v3); } #if !lime_webgl public inline function uniform4iv(location:GLUniformLocation, v:Int32Array, ?srcOffset:Int, ?srcLength:Int):Void #else public inline function uniform4iv(location:GLUniformLocation, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { this.uniform4iv(location, v != null ? v.length >> 2 : 0, v); } public inline function uniform4ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int, v3:Int):Void { this.uniform4ui(location, v0, v1, v2, v3); } public inline function uniform4uiv(location:GLUniformLocation, v:UInt32Array, ?srcOffset:Int, ?srcLength:Int):Void { this.uniform4uiv(location, v != null ? v.length >> 2 : 0, v); } public inline function uniformBlockBinding(program:GLProgram, uniformBlockIndex:Int, uniformBlockBinding:Int):Void { this.uniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding); } #if !lime_webgl public function uniformMatrix2fv(location:GLUniformLocation, transpose:Bool, v:Float32Array, srcOffset:Int = 0, ?srcLength:Int):Void #else public inline function uniformMatrix2fv(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { var count = 0; if (srcLength != null) count = srcLength; else if (v != null) count = v.length >> 2; __tempPointer.set(v, srcOffset); this.uniformMatrix2fv(location, count, transpose, __tempPointer); } public function uniformMatrix2x3fv(location:GLUniformLocation, transpose:Bool, v:Float32Array, srcOffset:Int = 0, ?srcLength:Int):Void { var count = 0; if (srcLength != null) count = srcLength; else if (v != null) count = Std.int(v.length / 6); __tempPointer.set(v, srcOffset); this.uniformMatrix2x3fv(location, count, transpose, __tempPointer); } public function uniformMatrix2x4fv(location:GLUniformLocation, transpose:Bool, v:Float32Array, srcOffset:Int = 0, ?srcLength:Int):Void { var count = 0; if (srcLength != null) count = srcLength; else if (v != null) count = Std.int(v.length / 8); __tempPointer.set(v, srcOffset); this.uniformMatrix2x4fv(location, count, transpose, __tempPointer); } #if !lime_webgl public function uniformMatrix3fv(location:GLUniformLocation, transpose:Bool, v:Float32Array, srcOffset:Int = 0, ?srcLength:Int):Void #else public inline function uniformMatrix3fv(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { var count = 0; if (srcLength != null) count = srcLength; else if (v != null) count = Std.int(v.length / 9); __tempPointer.set(v, srcOffset); this.uniformMatrix3fv(location, count, transpose, __tempPointer); } public function uniformMatrix3x2fv(location:GLUniformLocation, transpose:Bool, v:Float32Array, srcOffset:Int = 0, ?srcLength:Int):Void { var count = 0; if (srcLength != null) count = srcLength; else if (v != null) count = Std.int(v.length / 6); __tempPointer.set(v, srcOffset); this.uniformMatrix3x2fv(location, count, transpose, __tempPointer); } public function uniformMatrix3x4fv(location:GLUniformLocation, transpose:Bool, v:Float32Array, srcOffset:Int = 0, ?srcLength:Int):Void { var count = 0; if (srcLength != null) count = srcLength; else if (v != null) count = Std.int(v.length / 12); __tempPointer.set(v, srcOffset); this.uniformMatrix3x4fv(location, count, transpose, __tempPointer); } #if !lime_webgl public function uniformMatrix4fv(location:GLUniformLocation, transpose:Bool, v:Float32Array, srcOffset:Int = 0, ?srcLength:Int):Void #else public inline function uniformMatrix4fv(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void #end { var count = 0; if (srcLength != null) count = srcLength; else if (v != null) count = v.length >> 4; __tempPointer.set(v, srcOffset); this.uniformMatrix4fv(location, count, transpose, __tempPointer); } public function uniformMatrix4x2fv(location:GLUniformLocation, transpose:Bool, v:Float32Array, srcOffset:Int = 0, ?srcLength:Int):Void { var count = 0; if (srcLength != null) count = srcLength; else if (v != null) count = Std.int(v.length / 8); __tempPointer.set(v, srcOffset); this.uniformMatrix4x2fv(location, count, transpose, __tempPointer); } public function uniformMatrix4x3fv(location:GLUniformLocation, transpose:Bool, v:Float32Array, srcOffset:Int = 0, ?srcLength:Int):Void { var count = 0; if (srcLength != null) count = srcLength; else if (v != null) count = Std.int(v.length / 12); __tempPointer.set(v, srcOffset); this.uniformMatrix4x3fv(location, count, transpose, __tempPointer); } public inline function useProgram(program:GLProgram):Void { this.useProgram(program); } public inline function validateProgram(program:GLProgram):Void { this.validateProgram(program); } public inline function vertexAttrib1f(indx:Int, x:Float):Void { this.vertexAttrib1f(indx, x); } public inline function vertexAttrib1fv(indx:Int, values:#if (!lime_webgl && !doc_gen) DataPointer #else Float32Array #end):Void { this.vertexAttrib1fv(indx, values); } public inline function vertexAttrib2f(indx:Int, x:Float, y:Float):Void { this.vertexAttrib2f(indx, x, y); } public inline function vertexAttrib2fv(indx:Int, values:#if (!lime_webgl && !doc_gen) DataPointer #else Float32Array #end):Void { this.vertexAttrib2fv(indx, values); } public inline function vertexAttrib3f(indx:Int, x:Float, y:Float, z:Float):Void { this.vertexAttrib3f(indx, x, y, z); } public inline function vertexAttrib3fv(indx:Int, values:#if (!lime_webgl && !doc_gen) DataPointer #else Float32Array #end):Void { this.vertexAttrib3fv(indx, values); } public inline function vertexAttrib4f(indx:Int, x:Float, y:Float, z:Float, w:Float):Void { this.vertexAttrib4f(indx, x, y, z, w); } public inline function vertexAttrib4fv(indx:Int, values:#if (!lime_webgl && !doc_gen) DataPointer #else Float32Array #end):Void { this.vertexAttrib4fv(indx, values); } public inline function vertexAttribDivisor(index:Int, divisor:Int):Void { this.vertexAttribDivisor(index, divisor); } public inline function vertexAttribI4i(indx:Int, x:Int, y:Int, z:Int, w:Int):Void { this.vertexAttribI4i(indx, x, y, z, w); } public inline function vertexAttribI4iv(indx:Int, values:#if (!lime_webgl && !doc_gen) DataPointer #else Float32Array #end):Void { this.vertexAttribI4iv(indx, values); } public inline function vertexAttribI4ui(indx:Int, x:Int, y:Int, z:Int, w:Int):Void { this.vertexAttribI4ui(indx, x, y, z, w); } public inline function vertexAttribI4uiv(indx:Int, values:#if (!lime_webgl && !doc_gen) DataPointer #else Float32Array #end):Void { this.vertexAttribI4uiv(indx, values); } public inline function vertexAttribIPointer(index:Int, size:Int, type:Int, stride:Int, offset:DataPointer):Void { this.vertexAttribIPointer(index, size, type, stride, offset); } public inline function vertexAttribPointer(indx:Int, size:Int, type:Int, normalized:Bool, stride:Int, offset:DataPointer):Void { this.vertexAttribPointer(indx, size, type, normalized, stride, offset); } public inline function viewport(x:Int, y:Int, width:Int, height:Int):Void { this.viewport(x, y, width, height); } public inline function waitSync(sync:GLSync, flags:Int, timeout:Int64):Void { this.waitSync(sync, flags, timeout); } @:from private static function fromRenderContext(context:RenderContext):WebGL2RenderContext { return context.webgl2; } #if (!doc_gen && (lime_opengl || lime_opengles)) @:from private static function fromOpenGLES3RenderContext(gl:OpenGLES3RenderContext):WebGL2RenderContext { return cast gl; } #end @:from private static function fromGL(gl:Class):WebGL2RenderContext { return cast GL.context; } } #end ================================================ FILE: src/lime/graphics/WebGLRenderContext.hx ================================================ package lime.graphics; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) import lime.graphics.opengl.*; import lime.utils.ArrayBufferView; import lime.utils.Float32Array; /** The `WebGLRenderContext` allows access to WebGL features when OpenGL, OpenGL ES or WebGL is the render context type of the `Window`. Using a WebGL context on a desktop or mobile platform enables support for cross-platform code that should run all platforms (when hardware acceleration is supported). You can convert from `lime.graphics.RenderContext`, `lime.graphics.OpenGLRenderContext`, `lime.graphics.OpenGLES3RenderContext`, `lime.graphics.OpenGLES2RenderContext`, `lime.graphics.WebGL2RenderContext` or `lime.graphics.opengl.GL` directly if desired: ```haxe var webgl:WebGLRenderContext = window.context; var webgl:WebGLRenderContext = gl; var webgl:WebGLRenderContext = gles3; var webgl:WebGLRenderContext = gles2; var webgl:WebGLRenderContext = webgl2; var webgl:WebGLRenderContext = GL; ``` **/ @:forward(DEPTH_BUFFER_BIT, STENCIL_BUFFER_BIT, COLOR_BUFFER_BIT, POINTS, LINES, LINE_LOOP, LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, DST_COLOR, ONE_MINUS_DST_COLOR, SRC_ALPHA_SATURATE, FUNC_ADD, BLEND_EQUATION, BLEND_EQUATION_RGB, BLEND_EQUATION_ALPHA, FUNC_SUBTRACT, FUNC_REVERSE_SUBTRACT, BLEND_DST_RGB, BLEND_SRC_RGB, BLEND_DST_ALPHA, BLEND_SRC_ALPHA, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR, CONSTANT_ALPHA, ONE_MINUS_CONSTANT_ALPHA, BLEND_COLOR, ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER, ARRAY_BUFFER_BINDING, ELEMENT_ARRAY_BUFFER_BINDING, STREAM_DRAW, STATIC_DRAW, DYNAMIC_DRAW, BUFFER_SIZE, BUFFER_USAGE, CURRENT_VERTEX_ATTRIB, FRONT, BACK, FRONT_AND_BACK, CULL_FACE, BLEND, DITHER, STENCIL_TEST, DEPTH_TEST, SCISSOR_TEST, POLYGON_OFFSET_FILL, SAMPLE_ALPHA_TO_COVERAGE, SAMPLE_COVERAGE, NO_ERROR, INVALID_ENUM, INVALID_VALUE, INVALID_OPERATION, OUT_OF_MEMORY, CW, CCW, LINE_WIDTH, ALIASED_POINT_SIZE_RANGE, ALIASED_LINE_WIDTH_RANGE, CULL_FACE_MODE, FRONT_FACE, DEPTH_RANGE, DEPTH_WRITEMASK, DEPTH_CLEAR_VALUE, DEPTH_FUNC, STENCIL_CLEAR_VALUE, STENCIL_FUNC, STENCIL_FAIL, STENCIL_PASS_DEPTH_FAIL, STENCIL_PASS_DEPTH_PASS, STENCIL_REF, STENCIL_VALUE_MASK, STENCIL_WRITEMASK, STENCIL_BACK_FUNC, STENCIL_BACK_FAIL, STENCIL_BACK_PASS_DEPTH_FAIL, STENCIL_BACK_PASS_DEPTH_PASS, STENCIL_BACK_REF, STENCIL_BACK_VALUE_MASK, STENCIL_BACK_WRITEMASK, VIEWPORT, SCISSOR_BOX, COLOR_CLEAR_VALUE, COLOR_WRITEMASK, UNPACK_ALIGNMENT, PACK_ALIGNMENT, MAX_TEXTURE_SIZE, MAX_VIEWPORT_DIMS, SUBPIXEL_BITS, RED_BITS, GREEN_BITS, BLUE_BITS, ALPHA_BITS, DEPTH_BITS, STENCIL_BITS, POLYGON_OFFSET_UNITS, POLYGON_OFFSET_FACTOR, TEXTURE_BINDING_2D, SAMPLE_BUFFERS, SAMPLES, SAMPLE_COVERAGE_VALUE, SAMPLE_COVERAGE_INVERT, COMPRESSED_TEXTURE_FORMATS, DONT_CARE, FASTEST, NICEST, GENERATE_MIPMAP_HINT, BYTE, UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT, INT, UNSIGNED_INT, FLOAT, DEPTH_COMPONENT, ALPHA, RGB, RGBA, LUMINANCE, LUMINANCE_ALPHA, UNSIGNED_SHORT_4_4_4_4, UNSIGNED_SHORT_5_5_5_1, UNSIGNED_SHORT_5_6_5, FRAGMENT_SHADER, VERTEX_SHADER, MAX_VERTEX_ATTRIBS, MAX_VERTEX_UNIFORM_VECTORS, MAX_VARYING_VECTORS, MAX_COMBINED_TEXTURE_IMAGE_UNITS, MAX_VERTEX_TEXTURE_IMAGE_UNITS, MAX_TEXTURE_IMAGE_UNITS, MAX_FRAGMENT_UNIFORM_VECTORS, SHADER_TYPE, DELETE_STATUS, LINK_STATUS, VALIDATE_STATUS, ATTACHED_SHADERS, ACTIVE_UNIFORMS, ACTIVE_ATTRIBUTES, SHADING_LANGUAGE_VERSION, CURRENT_PROGRAM, NEVER, LESS, EQUAL, LEQUAL, GREATER, NOTEQUAL, GEQUAL, ALWAYS, KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, DECR_WRAP, VENDOR, RENDERER, VERSION, NEAREST, LINEAR, NEAREST_MIPMAP_NEAREST, LINEAR_MIPMAP_NEAREST, NEAREST_MIPMAP_LINEAR, LINEAR_MIPMAP_LINEAR, TEXTURE_MAG_FILTER, TEXTURE_MIN_FILTER, TEXTURE_WRAP_S, TEXTURE_WRAP_T, TEXTURE_2D, TEXTURE, TEXTURE_CUBE_MAP, TEXTURE_BINDING_CUBE_MAP, TEXTURE_CUBE_MAP_POSITIVE_X, TEXTURE_CUBE_MAP_NEGATIVE_X, TEXTURE_CUBE_MAP_POSITIVE_Y, TEXTURE_CUBE_MAP_NEGATIVE_Y, TEXTURE_CUBE_MAP_POSITIVE_Z, TEXTURE_CUBE_MAP_NEGATIVE_Z, MAX_CUBE_MAP_TEXTURE_SIZE, TEXTURE0, TEXTURE1, TEXTURE2, TEXTURE3, TEXTURE4, TEXTURE5, TEXTURE6, TEXTURE7, TEXTURE8, TEXTURE9, TEXTURE10, TEXTURE11, TEXTURE12, TEXTURE13, TEXTURE14, TEXTURE15, TEXTURE16, TEXTURE17, TEXTURE18, TEXTURE19, TEXTURE20, TEXTURE21, TEXTURE22, TEXTURE23, TEXTURE24, TEXTURE25, TEXTURE26, TEXTURE27, TEXTURE28, TEXTURE29, TEXTURE30, TEXTURE31, ACTIVE_TEXTURE, REPEAT, CLAMP_TO_EDGE, MIRRORED_REPEAT, FLOAT_VEC2, FLOAT_VEC3, FLOAT_VEC4, INT_VEC2, INT_VEC3, INT_VEC4, BOOL, BOOL_VEC2, BOOL_VEC3, BOOL_VEC4, FLOAT_MAT2, FLOAT_MAT3, FLOAT_MAT4, SAMPLER_2D, SAMPLER_CUBE, VERTEX_ATTRIB_ARRAY_ENABLED, VERTEX_ATTRIB_ARRAY_SIZE, VERTEX_ATTRIB_ARRAY_STRIDE, VERTEX_ATTRIB_ARRAY_TYPE, VERTEX_ATTRIB_ARRAY_NORMALIZED, VERTEX_ATTRIB_ARRAY_POINTER, VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, COMPILE_STATUS, LOW_FLOAT, MEDIUM_FLOAT, HIGH_FLOAT, LOW_INT, MEDIUM_INT, HIGH_INT, FRAMEBUFFER, RENDERBUFFER, RGBA4, RGB5_A1, RGB565, DEPTH_COMPONENT16, STENCIL_INDEX, STENCIL_INDEX8, DEPTH_STENCIL, RENDERBUFFER_WIDTH, RENDERBUFFER_HEIGHT, RENDERBUFFER_INTERNAL_FORMAT, RENDERBUFFER_RED_SIZE, RENDERBUFFER_GREEN_SIZE, RENDERBUFFER_BLUE_SIZE, RENDERBUFFER_ALPHA_SIZE, RENDERBUFFER_DEPTH_SIZE, RENDERBUFFER_STENCIL_SIZE, FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, COLOR_ATTACHMENT0, DEPTH_ATTACHMENT, STENCIL_ATTACHMENT, DEPTH_STENCIL_ATTACHMENT, NONE, FRAMEBUFFER_COMPLETE, FRAMEBUFFER_INCOMPLETE_ATTACHMENT, FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT, FRAMEBUFFER_INCOMPLETE_DIMENSIONS, FRAMEBUFFER_UNSUPPORTED, FRAMEBUFFER_BINDING, RENDERBUFFER_BINDING, MAX_RENDERBUFFER_SIZE, INVALID_FRAMEBUFFER_OPERATION, UNPACK_FLIP_Y_WEBGL, UNPACK_PREMULTIPLY_ALPHA_WEBGL, CONTEXT_LOST_WEBGL, UNPACK_COLORSPACE_CONVERSION_WEBGL, BROWSER_DEFAULT_WEBGL, type, version, activeTexture, attachShader, bindAttribLocation, bindBuffer, bindFramebuffer, bindRenderbuffer, bindTexture, blendColor, blendEquation, blendEquationSeparate, blendFunc, blendFuncSeparate, checkFramebufferStatus, clear, clearColor, clearDepth, clearStencil, colorMask, compileShader, copyTexImage2D, copyTexSubImage2D, createBuffer, createFramebuffer, createProgram, createRenderbuffer, createShader, createTexture, cullFace, cullFace, deleteBuffer, deleteFramebuffer, deleteProgram, deleteRenderbuffer, deleteShader, deleteTexture, depthFunc, depthMask, depthRange, detachShader, disable, disableVertexAttribArray, drawArrays, drawElements, enable, enableVertexAttribArray, finish, flush, framebufferRenderbuffer, framebufferTexture2D, frontFace, generateMipmap, getActiveAttrib, getActiveUniform, getAttachedShaders, getAttribLocation, getBufferParameter, getContextAttributes, getError, getExtension, getFramebufferAttachmentParameter, getParameter, getProgramInfoLog, getProgramParameter, getRenderbufferParameter, getShaderInfoLog, getShaderParameter, getShaderPrecisionFormat, getShaderSource, getSupportedExtensions, getTexParameter, getUniform, getUniformLocation, getVertexAttrib, getVertexAttribOffset, hint, isBuffer, isContextLost, isEnabled, isFramebuffer, isProgram, isRenderbuffer, isShader, isTexture, lineWidth, linkProgram, pixelStorei, polygonOffset, renderbufferStorage, sampleCoverage, scissor, shaderSource, stencilFunc, stencilFuncSeparate, stencilMask, stencilMaskSeparate, stencilOp, stencilOpSeparate, texParameterf, texParameteri, uniform1f, uniform1fv, uniform1i, uniform1iv, uniform2f, uniform2fv, uniform2i, uniform2iv, uniform3f, uniform3fv, uniform3i, uniform3iv, uniform4f, uniform4fv, uniform4i, uniform4iv, useProgram, validateProgram, vertexAttrib1f, vertexAttrib1fv, vertexAttrib2f, vertexAttrib2fv, vertexAttrib3f, vertexAttrib3fv, vertexAttrib4f, vertexAttrib4fv, vertexAttribPointer, viewport) @:transitive abstract WebGLRenderContext(WebGL2RenderContext) { public function bufferData(target:Int, srcData:#if (!js || !html5 || display) ArrayBufferView #else Dynamic #end, usage:Int):Void { this.bufferData(target, srcData, usage); } public inline function bufferSubData(target:Int, offset:Int, srcData:#if (!js || !html5 || display) ArrayBufferView #else Dynamic #end):Void { this.bufferSubData(target, offset, srcData); } public function compressedTexImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, srcData:#if (!js || !html5 || display) ArrayBufferView #else Dynamic #end):Void { this.compressedTexImage2D(target, level, internalformat, width, height, border, srcData); } public inline function compressedTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, srcData:#if (!js || !html5 || display) ArrayBufferView #else Dynamic #end):Void { this.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, srcData); } public inline function readPixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:#if (!js || !html5 || display) ArrayBufferView #else Dynamic #end):Void { this.readPixels(x, y, width, height, format, type, pixels); } #if (!js || !html5 || lime_doc_gen) public inline function texImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, srcData:ArrayBufferView):Void { this.texImage2D(target, level, internalformat, width, height, border, format, type, srcData); } #else // public function texImage2D (target:Int, level:Int, internalformat:Int, format:Int, type:Int, pixels:Dynamic /*ImageBitmap*/):Void { // public function texImage2D (target:Int, level:Int, internalformat:Int, format:Int, type:Int, pixels:#if (js && html5) CanvasElement #else Dynamic #end):Void { // public function texImage2D (target:Int, level:Int, internalformat:Int, format:Int, type:Int, pixels:#if (js && html5) ImageData #else Dynamic #end):Void { // public function texImage2D (target:Int, level:Int, internalformat:Int, format:Int, type:Int, pixels:#if (js && html5) ImageElement #else Dynamic #end):Void { // public function texImage2D (target:Int, level:Int, internalformat:Int, format:Int, type:Int, pixels:#if (js && html5) VideoElement #else Dynamic #end):Void { // public function texImage2D (target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, srcData:ArrayBufferView):Void { public function texImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Dynamic, ?format:Int, ?type:Int, ?srcData:Dynamic):Void { this.texImage2D(target, level, internalformat, width, height, border, format, type, srcData); } #end #if (!js || !html5 || lime_doc_gen) public inline function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, srcData:ArrayBufferView, srcOffset:Int = 0):Void { this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, srcData, srcOffset); } #else // public function texSubImage2D (target:Int, level:Int, xoffset:Int, yoffset:Int, format:Int, type:Int, pixels:#if (js && html5) CanvasElement #else Dynamic #end):Void { // public function texSubImage2D (target:Int, level:Int, xoffset:Int, yoffset:Int, format:Int, type:Int, pixels:Dynamic /*ImageBitmap*/):Void { // public function texSubImage2D (target:Int, level:Int, xoffset:Int, yoffset:Int, format:Int, type:Int, pixels:#if (js && html5) ImageData #else Dynamic #end):Void { // public function texSubImage2D (target:Int, level:Int, xoffset:Int, yoffset:Int, format:Int, type:Int, pixels:#if (js && html5) ImageElement #else Dynamic #end):Void { // public function texSubImage2D (target:Int, level:Int, xoffset:Int, yoffset:Int, format:Int, type:Int, pixels:#if (js && html5) VideoElement #else Dynamic #end):Void { // public function texSubImage2D (target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, srcData:ArrayBufferView):Void { public function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Dynamic, ?type:Int, ?srcData:Dynamic):Void { this.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, srcData); } #end public function uniformMatrix2fv(location:GLUniformLocation, transpose:Bool, v:Float32Array):Void { this.uniformMatrix2fv(location, transpose, v); } public function uniformMatrix3fv(location:GLUniformLocation, transpose:Bool, v:Float32Array):Void { this.uniformMatrix3fv(location, transpose, v); } public function uniformMatrix4fv(location:GLUniformLocation, transpose:Bool, v:Float32Array):Void { this.uniformMatrix4fv(location, transpose, v); } @:from private static function fromWebGL2RenderContext(gl:WebGL2RenderContext):WebGLRenderContext { return cast gl; } @:from private static function fromRenderContext(context:RenderContext):WebGLRenderContext { return context.webgl; } @:from private static function fromGL(gl:Class):WebGLRenderContext { return cast GL.context; } #if (!doc_gen && lime_opengl) @:from private static function fromOpenGLContext(gl:OpenGLRenderContext):WebGLRenderContext { #if (sys && lime_cffi && lime_opengl) return cast gl; #else return null; #end } #end #if (!doc_gen && (lime_opengl || lime_opengles)) @:from private static function fromOpenGLES2Context(gl:OpenGLES2RenderContext):WebGLRenderContext { #if (sys && lime_cffi && lime_opengl) return cast gl; #else return null; #end } #end #if (!doc_gen && (lime_opengl || lime_opengles)) @:from private static function fromOpenGLES3Context(gl:OpenGLES3RenderContext):WebGLRenderContext { #if (sys && lime_cffi && lime_opengl) return cast gl; #else return null; #end } #end } #end ================================================ FILE: src/lime/graphics/cairo/Cairo.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) import lime._internal.backend.native.NativeCFFI; import lime.math.Matrix3; import lime.math.Vector2; import lime.system.CFFI; import lime.system.CFFIPointer; import lime.text.Glyph; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class Cairo { public static var version(get, null):Int; public static var versionString(get, null):String; public var antialias(get, set):CairoAntialias; public var currentPoint(get, never):Vector2; public var dash(get, set):Array; public var dashCount(get, never):Int; public var fillRule(get, set):CairoFillRule; public var fontFace(get, set):CairoFontFace; public var fontOptions(get, set):CairoFontOptions; public var groupTarget(get, never):CairoSurface; public var hasCurrentPoint(get, never):Bool; public var lineCap(get, set):CairoLineCap; public var lineJoin(get, set):CairoLineJoin; public var lineWidth(get, set):Float; public var matrix(get, set):Matrix3; public var miterLimit(get, set):Float; #if (haxe_ver < "4.0.0") public var operator(get, set):CairoOperator; #end public var source(get, set):CairoPattern; public var target(get, null):CairoSurface; public var tolerance(get, set):Float; public var userData:Dynamic; @:noCompletion private var handle:CFFIPointer; public function new(surface:CairoSurface = null):Void { if (surface != null) { #if (lime_cffi && lime_cairo && !macro) handle = NativeCFFI.lime_cairo_create(surface); #end } } public function arc(xc:Float, yc:Float, radius:Float, angle1:Float, angle2:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_arc(handle, xc, yc, radius, angle1, angle2); #end } public function arcNegative(xc:Float, yc:Float, radius:Float, angle1:Float, angle2:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_arc_negative(handle, xc, yc, radius, angle1, angle2); #end } public function clip():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_clip(handle); #end } public function clipExtents(x1:Float, y1:Float, x2:Float, y2:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_clip_extents(handle, x1, y1, x2, y2); #end } public function clipPreserve():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_clip_preserve(handle); #end } public function closePath():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_close_path(handle); #end } public function copyPage():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_copy_page(handle); #end } public function curveTo(x1:Float, y1:Float, x2:Float, y2:Float, x3:Float, y3:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_curve_to(handle, x1, y1, x2, y2, x3, y3); #end } public function fill():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_fill(handle); #end } public function fillExtents(x1:Float, y1:Float, x2:Float, y2:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_fill_extents(handle, x1, y1, x2, y2); #end } public function fillPreserve():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_fill_preserve(handle); #end } public function getOperator():CairoOperator { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_operator(handle); #end return cast 0; } public function identityMatrix():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_identity_matrix(handle); #end } public function inClip(x:Float, y:Float):Bool { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_in_clip(handle, x, y); #else return false; #end } public function inFill(x:Float, y:Float):Bool { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_in_fill(handle, x, y); #else return false; #end } public function inStroke(x:Float, y:Float):Bool { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_in_stroke(handle, x, y); #else return false; #end } public function lineTo(x:Float, y:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_line_to(handle, x, y); #end } public function mask(pattern:CairoPattern):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_mask(handle, pattern); #end } public function maskSurface(surface:CairoSurface, x:Float, y:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_mask_surface(handle, surface, x, y); #end } public function moveTo(x:Float, y:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_move_to(handle, x, y); #end } public function newPath():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_new_path(handle); #end } public function paint():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_paint(handle); #end } public function paintWithAlpha(alpha:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_paint_with_alpha(handle, alpha); #end } public function popGroup():CairoPattern { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_pop_group(handle); #else return null; #end } public function popGroupToSource():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_pop_group_to_source(handle); #end } public function pushGroup():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_push_group(handle); #end } public function pushGroupWithContent(content:CairoContent):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_push_group_with_content(handle, content); #end } @:noCompletion private function recreate(surface:CairoSurface):Void { #if (lime_cffi && lime_cairo && !macro) handle = NativeCFFI.lime_cairo_create(surface); #end } public function rectangle(x:Float, y:Float, width:Float, height:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_rectangle(handle, x, y, width, height); #end } public function relCurveTo(dx1:Float, dy1:Float, dx2:Float, dy2:Float, dx3:Float, dy3:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_rel_curve_to(handle, dx1, dy1, dx2, dy2, dx3, dy3); #end } public function relLineTo(dx:Float, dy:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_rel_line_to(handle, dx, dy); #end } public function relMoveTo(dx:Float, dy:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_rel_move_to(handle, dx, dy); #end } public function resetClip():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_reset_clip(handle); #end } public function restore():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_restore(handle); #end } public function rotate(amount:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_rotate(handle, amount); #end } public function save():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_save(handle); #end } public function scale(x:Float, y:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_scale(handle, x, y); #end } public function setFontSize(size:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_font_size(handle, size); #end } public function setOperator(value:CairoOperator):CairoOperator { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_operator(handle, value); #end return value; } public function setSourceRGB(r:Float, g:Float, b:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_source_rgb(handle, r, g, b); #end } public function setSourceRGBA(r:Float, g:Float, b:Float, a:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_source_rgba(handle, r, g, b, a); #end } public function setSourceSurface(surface:CairoSurface, x:Float, y:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_source_surface(handle, surface, x, y); #end } public function showGlyphs(glyphs:Array):Void { #if (lime_cffi && lime_cairo && !macro) #if hl var _glyphs = new hl.NativeArray(glyphs.length); for (i in 0...glyphs.length) _glyphs[i] = glyphs[i]; var glyphs = _glyphs; #end NativeCFFI.lime_cairo_show_glyphs(handle, glyphs); #end } public function showPage():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_show_page(handle); #end } public function showText(utf8:String):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_show_text(handle, utf8); #end } public function status():CairoStatus { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_status(handle); #else return cast 0; #end } public function stroke():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_stroke(handle); #end } public function strokeExtents(x1:Float, y1:Float, x2:Float, y2:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_stroke_extents(handle, x1, y1, x2, y2); #end } public function strokePreserve():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_stroke_preserve(handle); #end } public function textPath(utf8:String):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_text_path(handle, utf8); #end } public function transform(matrix:Matrix3):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_transform(handle, matrix.toCairoMatrix3()); #end } public function translate(x:Float, y:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_translate(handle, x, y); #end } // Get & Set Methods @:noCompletion private function get_antialias():CairoAntialias { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_antialias(handle); #end return cast 0; } @:noCompletion private function set_antialias(value:CairoAntialias):CairoAntialias { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_antialias(handle, value); #end return value; } @:noCompletion private function get_currentPoint():Vector2 { #if (lime_cffi && lime_cairo && !macro) #if hl return NativeCFFI.lime_cairo_get_current_point(handle, new Vector2()); #else var vec:Dynamic = NativeCFFI.lime_cairo_get_current_point(handle); return new Vector2(vec.x, vec.y); #end #end return null; } @:noCompletion private function get_dash():Array { #if (lime_cffi && lime_cairo && !macro) #if hl var result:hl.NativeArray = NativeCFFI.lime_cairo_get_dash(handle); if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else var result:Dynamic = NativeCFFI.lime_cairo_get_dash(handle); return result; #end #end return []; } @:noCompletion private function set_dash(value:Array):Array { #if (lime_cffi && lime_cairo && !macro) #if hl var _value = new hl.NativeArray(value.length); for (i in 0...value.length) _value[i] = value[i]; NativeCFFI.lime_cairo_set_dash(handle, _value); #else NativeCFFI.lime_cairo_set_dash(handle, value); #end #end return value; } @:noCompletion private function get_dashCount():Int { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_dash_count(handle); #end return 0; } @:noCompletion private function get_fillRule():CairoFillRule { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_fill_rule(handle); #end return cast 0; } @:noCompletion private function set_fillRule(value:CairoFillRule):CairoFillRule { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_fill_rule(handle, value); #end return value; } @:noCompletion private function get_fontFace():CairoFontFace { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_font_face(handle); #end return cast 0; } @:noCompletion private function set_fontFace(value:CairoFontFace):CairoFontFace { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_font_face(handle, value); #end return value; } @:noCompletion private function get_fontOptions():CairoFontOptions { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_font_options(handle); #else return null; #end } @:noCompletion private function set_fontOptions(value:CairoFontOptions):CairoFontOptions { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_font_options(handle, value); #end return value; } @:noCompletion private function get_groupTarget():CairoSurface { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_group_target(handle); #else return cast 0; #end } @:noCompletion private function get_hasCurrentPoint():Bool { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_has_current_point(handle); #end return false; } @:noCompletion private function get_lineCap():CairoLineCap { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_line_cap(handle); #end return 0; } @:noCompletion private function set_lineCap(value:CairoLineCap):CairoLineCap { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_line_cap(handle, value); #end return value; } @:noCompletion private function get_lineJoin():CairoLineJoin { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_line_join(handle); #end return 0; } @:noCompletion private function set_lineJoin(value:CairoLineJoin):CairoLineJoin { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_line_join(handle, value); #end return value; } @:noCompletion private function get_lineWidth():Float { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_line_width(handle); #end return 0; } @:noCompletion private function set_lineWidth(value:Float):Float { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_line_width(handle, value); #end return value; } @:noCompletion private function get_matrix():Matrix3 { #if (lime_cffi && lime_cairo && !macro) #if hl return NativeCFFI.lime_cairo_get_matrix(handle, new CairoMatrix3()); #else var m:Dynamic = NativeCFFI.lime_cairo_get_matrix(handle); return new Matrix3(m.a, m.b, m.c, m.d, m.tx, m.ty); #end #end return null; } @:noCompletion private function set_matrix(value:Matrix3):Matrix3 { #if (lime_cffi && lime_cairo && !macro) #if hl NativeCFFI.lime_cairo_set_matrix(handle, value.toCairoMatrix3()); #else NativeCFFI.lime_cairo_set_matrix(handle, value.a, value.b, value.c, value.d, value.tx, value.ty); // NativeCFFI.lime_cairo_set_matrix (handle, value); #end #end return value; } @:noCompletion private function get_miterLimit():Float { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_miter_limit(handle); #end return 0; } @:noCompletion private function set_miterLimit(value:Float):Float { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_miter_limit(handle, value); #end return value; } #if (haxe_ver < "4.0.0") @:noCompletion private function get_operator():CairoOperator { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_operator(handle); #end return cast 0; } @:noCompletion private function set_operator(value:CairoOperator):CairoOperator { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_operator(handle, value); #end return value; } #end @:noCompletion private function get_source():CairoPattern { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_source(handle); #end return cast 0; } @:noCompletion private function set_source(value:CairoPattern):CairoPattern { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_source(handle, value); #end return value; } @:noCompletion private function get_target():CairoSurface { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_target(handle); #else return cast 0; #end } @:noCompletion private function get_tolerance():Float { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_get_tolerance(handle); #else return 0; #end } @:noCompletion private function set_tolerance(value:Float):Float { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_set_tolerance(handle, value); #end return value; } private static function get_version():Int { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_version(); #else return 0; #end } private static function get_versionString():String { #if (lime_cffi && lime_cairo && !macro) return CFFI.stringValue(NativeCFFI.lime_cairo_version_string()); #else return ""; #end } } #end ================================================ FILE: src/lime/graphics/cairo/CairoAntialias.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoAntialias(Int) from Int to Int from UInt to UInt { public var DEFAULT = 0; public var NONE = 1; public var GRAY = 2; public var SUBPIXEL = 3; public var FAST = 4; public var GOOD = 5; public var BEST = 6; } #end ================================================ FILE: src/lime/graphics/cairo/CairoContent.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoContent(Int) from Int to Int from UInt to UInt { public var COLOR = 0x1000; public var ALPHA = 0x2000; public var COLOR_ALPHA = 0x3000; } #end ================================================ FILE: src/lime/graphics/cairo/CairoExtend.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoExtend(Int) from Int to Int from UInt to UInt { public var NONE = 0; public var REPEAT = 1; public var REFLECT = 2; public var PAD = 3; } #end ================================================ FILE: src/lime/graphics/cairo/CairoFTFontFace.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; import lime.text.Font; @:access(lime._internal.backend.native.NativeCFFI) abstract CairoFTFontFace(CairoFontFace) from CairoFontFace to CairoFontFace from CFFIPointer to CFFIPointer { public static inline var FT_LOAD_FORCE_AUTOHINT = (1 << 5); @:noCompletion private function new() { this = cast 0; } public static function create(face:Font, loadFlags:Int):CairoFTFontFace { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_ft_font_face_create(face.src, loadFlags); #else return cast 0; #end } } #end ================================================ FILE: src/lime/graphics/cairo/CairoFillRule.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoFillRule(Int) from Int to Int from UInt to UInt { public var WINDING = 0; public var EVEN_ODD = 1; } #end ================================================ FILE: src/lime/graphics/cairo/CairoFilter.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoFilter(Int) from Int to Int from UInt to UInt { public var FAST = 0; public var GOOD = 1; public var BEST = 2; public var NEAREST = 3; public var BILINEAR = 4; public var GAUSSIAN = 5; } #end ================================================ FILE: src/lime/graphics/cairo/CairoFontFace.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract CairoFontFace(CFFIPointer) from CFFIPointer to CFFIPointer { @:noCompletion private function new() { this = null; } public function status():CairoStatus { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_font_face_status(this); #else return 0; #end } } #end ================================================ FILE: src/lime/graphics/cairo/CairoFontOptions.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || native) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; import lime.text.Font; @:access(lime._internal.backend.native.NativeCFFI) abstract CairoFontOptions(CFFIPointer) from CFFIPointer to CFFIPointer { public var antialias(get, set):CairoAntialias; public var hintMetrics(get, set):CairoHintMetrics; public var hintStyle(get, set):CairoHintStyle; public var subpixelOrder(get, set):CairoSubpixelOrder; public function new() { #if (lime_cffi && lime_cairo && !macro) this = NativeCFFI.lime_cairo_font_options_create(); #else this = null; #end } // Get & Set Methods @:noCompletion private function get_antialias():CairoAntialias { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_font_options_get_antialias(this); #end return cast 0; } @:noCompletion private function set_antialias(value:CairoAntialias):CairoAntialias { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_font_options_set_antialias(this, value); #end return value; } @:noCompletion private function get_hintMetrics():CairoHintMetrics { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_font_options_get_hint_metrics(this); #end return cast 0; } @:noCompletion private function set_hintMetrics(value:CairoHintMetrics):CairoHintMetrics { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_font_options_set_hint_metrics(this, value); #end return value; } @:noCompletion private function get_hintStyle():CairoHintStyle { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_font_options_get_hint_style(this); #end return cast 0; } @:noCompletion private function set_hintStyle(value:CairoHintStyle):CairoHintStyle { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_font_options_set_hint_style(this, value); #end return value; } @:noCompletion private function get_subpixelOrder():CairoSubpixelOrder { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_font_options_get_subpixel_order(this); #end return cast 0; } @:noCompletion private function set_subpixelOrder(value:CairoSubpixelOrder):CairoSubpixelOrder { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_font_options_set_subpixel_order(this, value); #end return value; } } #end ================================================ FILE: src/lime/graphics/cairo/CairoFormat.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoFormat(Int) from Int to Int from UInt to UInt { public var INVALID = -1; public var ARGB32 = 0; public var RGB24 = 1; public var A8 = 2; public var A1 = 3; public var RGB16_565 = 4; public var RGB30 = 5; } #end ================================================ FILE: src/lime/graphics/cairo/CairoGlyph.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class CairoGlyph { public var index:Int; public var x:Float; public var y:Float; public function new(index:Int, x:Float = 0, y:Float = 0) { this.index = index; this.x = x; this.y = y; } } #end ================================================ FILE: src/lime/graphics/cairo/CairoHintMetrics.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoHintMetrics(Int) from Int to Int from UInt to UInt { public var DEFAULT = 0; public var OFF = 1; public var ON = 2; } #end ================================================ FILE: src/lime/graphics/cairo/CairoHintStyle.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoHintStyle(Int) from Int to Int from UInt to UInt { public var DEFAULT = 0; public var NONE = 1; public var SLIGHT = 2; public var MEDIUM = 3; public var FULL = 4; } #end ================================================ FILE: src/lime/graphics/cairo/CairoImageSurface.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; import lime.utils.DataPointer; @:access(lime._internal.backend.native.NativeCFFI) @:forward abstract CairoImageSurface(CairoSurface) from CairoSurface to CairoSurface from CFFIPointer to CFFIPointer { public var data(get, never):DataPointer; public var format(get, never):CairoFormat; public var height(get, never):Int; public var stride(get, never):Int; public var width(get, never):Int; public function new(format:CairoFormat, width:Int, height:Int):CairoSurface { #if (lime_cffi && lime_cairo && !macro) this = NativeCFFI.lime_cairo_image_surface_create(format, width, height); #else this = cast 0; #end } public static function create(data:DataPointer, format:CairoFormat, width:Int, height:Int, stride:Int):CairoSurface { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_image_surface_create_for_data(data, format, width, height, stride); #else return cast 0; #end } public static function fromImage(image:Image):CairoSurface { #if (lime_cffi && lime_cairo && !macro) return create(#if nodejs image.data #else image.data.buffer #end, CairoFormat.ARGB32, image.width, image.height, image.buffer.stride); #else return null; #end } // Get & Set Methods @:noCompletion private function get_data():DataPointer { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_image_surface_get_data(this); #else return 0; #end } @:noCompletion private function get_format():CairoFormat { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_image_surface_get_format(this); #else return 0; #end } @:noCompletion private function get_height():Int { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_image_surface_get_height(this); #else return 0; #end } @:noCompletion private function get_stride():Int { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_image_surface_get_stride(this); #else return 0; #end } @:noCompletion private function get_width():Int { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_image_surface_get_width(this); #else return 0; #end } } #end ================================================ FILE: src/lime/graphics/cairo/CairoLineCap.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoLineCap(Int) from Int to Int from UInt to UInt { public var BUTT = 0; public var ROUND = 1; public var SQUARE = 2; } #end ================================================ FILE: src/lime/graphics/cairo/CairoLineJoin.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoLineJoin(Int) from Int to Int from UInt to UInt { public var MITER = 0; public var ROUND = 1; public var BEVEL = 2; } #end ================================================ FILE: src/lime/graphics/cairo/CairoOperator.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoOperator(Int) from Int to Int from UInt to UInt { public var CLEAR = 0; public var SOURCE = 1; public var OVER = 2; public var IN = 3; public var OUT = 4; public var ATOP = 5; public var DEST = 6; public var DEST_OVER = 7; public var DEST_IN = 8; public var DEST_OUT = 9; public var DEST_ATOP = 10; public var XOR = 11; public var ADD = 12; public var SATURATE = 13; public var MULTIPLY = 14; public var SCREEN = 15; public var OVERLAY = 16; public var DARKEN = 17; public var LIGHTEN = 18; public var COLOR_DODGE = 19; public var COLOR_BURN = 20; public var HARD_LIGHT = 21; public var SOFT_LIGHT = 22; public var DIFFERENCE = 23; public var EXCLUSION = 24; public var HSL_HUE = 25; public var HSL_SATURATION = 26; public var HSL_COLOR = 27; public var HSL_LUMINOSITY = 28; } #end ================================================ FILE: src/lime/graphics/cairo/CairoPattern.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) import lime._internal.backend.native.NativeCFFI; import lime.math.Matrix3; import lime.system.CFFIPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract CairoPattern(CFFIPointer) from CFFIPointer to CFFIPointer { public var colorStopCount(get, never):Int; public var extend(get, set):CairoExtend; public var filter(get, set):CairoFilter; public var matrix(get, set):Matrix3; public function new(handle) { this = handle; } public function addColorStopRGB(offset:Float, r:Float, g:Float, b:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_pattern_add_color_stop_rgb(this, offset, r, g, b); #end } public function addColorStopRGBA(offset:Float, r:Float, g:Float, b:Float, a:Float):Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_pattern_add_color_stop_rgba(this, offset, r, g, b, a); #end } public static function createForSurface(surface:CairoSurface):CairoPattern { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_pattern_create_for_surface(surface); #else return cast 0; #end } public static function createLinear(x0:Float, y0:Float, x1:Float, y1:Float):CairoPattern { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_pattern_create_linear(x0, y0, x1, y1); #else return cast 0; #end } public static function createRadial(cx0:Float, cy0:Float, radius0:Float, cx1:Float, cy1:Float, radius1:Float):CairoPattern { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_pattern_create_radial(cx0, cy0, radius0, cx1, cy1, radius1); #else return cast 0; #end } public static function createRGB(r:Float, g:Float, b:Float):CairoPattern { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_pattern_create_rgb(r, g, b); #else return cast 0; #end } public static function createRGBA(r:Float, g:Float, b:Float, a:Float):CairoPattern { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_pattern_create_rgba(r, g, b, a); #else return cast 0; #end } // Get & Set Methods @:noCompletion private function get_colorStopCount():Int { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_pattern_get_color_stop_count(this); #else return 0; #end } @:noCompletion private function get_extend():CairoExtend { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_pattern_get_extend(this); #else return 0; #end } @:noCompletion private function set_extend(value:CairoExtend):CairoExtend { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_pattern_set_extend(this, value); #end return value; } @:noCompletion private function get_filter():CairoFilter { #if (lime_cffi && lime_cairo && !macro) return NativeCFFI.lime_cairo_pattern_get_filter(this); #else return 0; #end } @:noCompletion private function set_filter(value:CairoFilter):CairoFilter { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_pattern_set_filter(this, value); #end return value; } @:noCompletion private function get_matrix():Matrix3 { #if (lime_cffi && lime_cairo && !macro) #if hl return NativeCFFI.lime_cairo_pattern_get_matrix(this, new CairoMatrix3()); #else var m:Dynamic = NativeCFFI.lime_cairo_pattern_get_matrix(this); return new Matrix3(m.a, m.b, m.c, m.d, m.tx, m.ty); #end #else return null; #end } @:noCompletion private function set_matrix(value:Matrix3):Matrix3 { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_pattern_set_matrix(this, value.toCairoMatrix3()); #end return value; } } #end ================================================ FILE: src/lime/graphics/cairo/CairoStatus.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoStatus(Int) from Int to Int from UInt to UInt { public var SUCCESS = 0; public var NO_MEMORY = 1; public var INVALID_RESTORE = 2; public var INVALID_POP_GROUP = 3; public var NO_CURRENT_POINT = 4; public var INVALID_MATRIX = 5; public var INVALID_STATUS = 6; public var NULL_POINTER = 7; public var INVALID_STRING = 8; public var INVALID_PATH_DATA = 9; public var READ_ERROR = 10; public var WRITE_ERROR = 11; public var SURFACE_FINISHED = 12; public var SURFACE_TYPE_MISMATCH = 13; public var PATTERN_TYPE_MISMATCH = 14; public var INVALID_CONTENT = 15; public var INVALID_FORMAT = 16; public var INVALID_VISUAL = 17; public var FILE_NOT_FOUND = 18; public var INVALID_DASH = 19; public var INVALID_DSC_COMMENT = 20; public var INVALID_INDEX = 21; public var CLIP_NOT_REPRESENTABLE = 22; public var TEMP_FILE_ERROR = 23; public var INVALID_STRIDE = 24; public var FONT_TYPE_MISMATCH = 25; public var USER_FONT_IMMUTABLE = 26; public var USER_FONT_ERROR = 27; public var NEGATIVE_COUNT = 28; public var INVALID_CLUSTERS = 29; public var INVALID_SLANT = 30; public var INVALID_WEIGHT = 31; public var INVALID_SIZE = 32; public var USER_FONT_NOT_IMPLEMENTED = 33; public var DEVICE_TYPE_MISMATCH = 34; public var DEVICE_ERROR = 35; public var INVALID_MESH_CONSTRUCTION = 36; public var DEVICE_FINISHED = 37; public var JBIG2_GLOBAL_MISSING = 38; } #end ================================================ FILE: src/lime/graphics/cairo/CairoSubpixelOrder.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CairoSubpixelOrder(Int) from Int to Int from UInt to UInt { public var DEFAULT = 0; public var RGB = 1; public var BGR = 2; public var VRGB = 3; public var VBGR = 4; } #end ================================================ FILE: src/lime/graphics/cairo/CairoSurface.hx ================================================ package lime.graphics.cairo; #if (!lime_doc_gen || lime_cairo) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract CairoSurface(CFFIPointer) from CFFIPointer to CFFIPointer { public function flush():Void { #if (lime_cffi && lime_cairo && !macro) NativeCFFI.lime_cairo_surface_flush(this); #end } } #end ================================================ FILE: src/lime/graphics/opengl/GL.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) import haxe.io.Bytes; import haxe.Int64; import lime.utils.ArrayBufferView; import lime.utils.ArrayBuffer; import lime.utils.BytePointer; import lime.utils.DataPointer; import lime.utils.Float32Array; import lime.utils.Int32Array; #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; #end @:allow(lime.ui.Window) class GL { public static inline var DEPTH_BUFFER_BIT = 0x00000100; public static inline var STENCIL_BUFFER_BIT = 0x00000400; public static inline var COLOR_BUFFER_BIT = 0x00004000; public static inline var POINTS = 0x0000; public static inline var LINES = 0x0001; public static inline var LINE_LOOP = 0x0002; public static inline var LINE_STRIP = 0x0003; public static inline var TRIANGLES = 0x0004; public static inline var TRIANGLE_STRIP = 0x0005; public static inline var TRIANGLE_FAN = 0x0006; public static inline var ZERO = 0; public static inline var ONE = 1; public static inline var SRC_COLOR = 0x0300; public static inline var ONE_MINUS_SRC_COLOR = 0x0301; public static inline var SRC_ALPHA = 0x0302; public static inline var ONE_MINUS_SRC_ALPHA = 0x0303; public static inline var DST_ALPHA = 0x0304; public static inline var ONE_MINUS_DST_ALPHA = 0x0305; public static inline var DST_COLOR = 0x0306; public static inline var ONE_MINUS_DST_COLOR = 0x0307; public static inline var SRC_ALPHA_SATURATE = 0x0308; public static inline var FUNC_ADD = 0x8006; public static inline var BLEND_EQUATION = 0x8009; public static inline var BLEND_EQUATION_RGB = 0x8009; public static inline var BLEND_EQUATION_ALPHA = 0x883D; public static inline var FUNC_SUBTRACT = 0x800A; public static inline var FUNC_REVERSE_SUBTRACT = 0x800B; public static inline var BLEND_DST_RGB = 0x80C8; public static inline var BLEND_SRC_RGB = 0x80C9; public static inline var BLEND_DST_ALPHA = 0x80CA; public static inline var BLEND_SRC_ALPHA = 0x80CB; public static inline var CONSTANT_COLOR = 0x8001; public static inline var ONE_MINUS_CONSTANT_COLOR = 0x8002; public static inline var CONSTANT_ALPHA = 0x8003; public static inline var ONE_MINUS_CONSTANT_ALPHA = 0x8004; public static inline var BLEND_COLOR = 0x8005; public static inline var ARRAY_BUFFER = 0x8892; public static inline var ELEMENT_ARRAY_BUFFER = 0x8893; public static inline var ARRAY_BUFFER_BINDING = 0x8894; public static inline var ELEMENT_ARRAY_BUFFER_BINDING = 0x8895; public static inline var STREAM_DRAW = 0x88E0; public static inline var STATIC_DRAW = 0x88E4; public static inline var DYNAMIC_DRAW = 0x88E8; public static inline var BUFFER_SIZE = 0x8764; public static inline var BUFFER_USAGE = 0x8765; public static inline var CURRENT_VERTEX_ATTRIB = 0x8626; public static inline var FRONT = 0x0404; public static inline var BACK = 0x0405; public static inline var FRONT_AND_BACK = 0x0408; public static inline var CULL_FACE = 0x0B44; public static inline var BLEND = 0x0BE2; public static inline var DITHER = 0x0BD0; public static inline var STENCIL_TEST = 0x0B90; public static inline var DEPTH_TEST = 0x0B71; public static inline var SCISSOR_TEST = 0x0C11; public static inline var POLYGON_OFFSET_FILL = 0x8037; public static inline var SAMPLE_ALPHA_TO_COVERAGE = 0x809E; public static inline var SAMPLE_COVERAGE = 0x80A0; public static inline var NO_ERROR = 0; public static inline var INVALID_ENUM = 0x0500; public static inline var INVALID_VALUE = 0x0501; public static inline var INVALID_OPERATION = 0x0502; public static inline var OUT_OF_MEMORY = 0x0505; public static inline var CW = 0x0900; public static inline var CCW = 0x0901; public static inline var LINE_WIDTH = 0x0B21; public static inline var ALIASED_POINT_SIZE_RANGE = 0x846D; public static inline var ALIASED_LINE_WIDTH_RANGE = 0x846E; public static inline var CULL_FACE_MODE = 0x0B45; public static inline var FRONT_FACE = 0x0B46; public static inline var DEPTH_RANGE = 0x0B70; public static inline var DEPTH_WRITEMASK = 0x0B72; public static inline var DEPTH_CLEAR_VALUE = 0x0B73; public static inline var DEPTH_FUNC = 0x0B74; public static inline var STENCIL_CLEAR_VALUE = 0x0B91; public static inline var STENCIL_FUNC = 0x0B92; public static inline var STENCIL_FAIL = 0x0B94; public static inline var STENCIL_PASS_DEPTH_FAIL = 0x0B95; public static inline var STENCIL_PASS_DEPTH_PASS = 0x0B96; public static inline var STENCIL_REF = 0x0B97; public static inline var STENCIL_VALUE_MASK = 0x0B93; public static inline var STENCIL_WRITEMASK = 0x0B98; public static inline var STENCIL_BACK_FUNC = 0x8800; public static inline var STENCIL_BACK_FAIL = 0x8801; public static inline var STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; public static inline var STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; public static inline var STENCIL_BACK_REF = 0x8CA3; public static inline var STENCIL_BACK_VALUE_MASK = 0x8CA4; public static inline var STENCIL_BACK_WRITEMASK = 0x8CA5; public static inline var VIEWPORT = 0x0BA2; public static inline var SCISSOR_BOX = 0x0C10; public static inline var COLOR_CLEAR_VALUE = 0x0C22; public static inline var COLOR_WRITEMASK = 0x0C23; public static inline var UNPACK_ALIGNMENT = 0x0CF5; public static inline var PACK_ALIGNMENT = 0x0D05; public static inline var MAX_TEXTURE_SIZE = 0x0D33; public static inline var MAX_VIEWPORT_DIMS = 0x0D3A; public static inline var SUBPIXEL_BITS = 0x0D50; public static inline var RED_BITS = 0x0D52; public static inline var GREEN_BITS = 0x0D53; public static inline var BLUE_BITS = 0x0D54; public static inline var ALPHA_BITS = 0x0D55; public static inline var DEPTH_BITS = 0x0D56; public static inline var STENCIL_BITS = 0x0D57; public static inline var POLYGON_OFFSET_UNITS = 0x2A00; public static inline var POLYGON_OFFSET_FACTOR = 0x8038; public static inline var TEXTURE_BINDING_2D = 0x8069; public static inline var SAMPLE_BUFFERS = 0x80A8; public static inline var SAMPLES = 0x80A9; public static inline var SAMPLE_COVERAGE_VALUE = 0x80AA; public static inline var SAMPLE_COVERAGE_INVERT = 0x80AB; public static inline var NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2; public static inline var COMPRESSED_TEXTURE_FORMATS = 0x86A3; public static inline var DONT_CARE = 0x1100; public static inline var FASTEST = 0x1101; public static inline var NICEST = 0x1102; public static inline var GENERATE_MIPMAP_HINT = 0x8192; public static inline var BYTE = 0x1400; public static inline var UNSIGNED_BYTE = 0x1401; public static inline var SHORT = 0x1402; public static inline var UNSIGNED_SHORT = 0x1403; public static inline var INT = 0x1404; public static inline var UNSIGNED_INT = 0x1405; public static inline var FLOAT = 0x1406; public static inline var DEPTH_COMPONENT = 0x1902; public static inline var ALPHA = 0x1906; public static inline var RGB = 0x1907; public static inline var RGBA = 0x1908; public static inline var LUMINANCE = 0x1909; public static inline var LUMINANCE_ALPHA = 0x190A; public static inline var UNSIGNED_SHORT_4_4_4_4 = 0x8033; public static inline var UNSIGNED_SHORT_5_5_5_1 = 0x8034; public static inline var UNSIGNED_SHORT_5_6_5 = 0x8363; public static inline var FRAGMENT_SHADER = 0x8B30; public static inline var VERTEX_SHADER = 0x8B31; public static inline var MAX_VERTEX_ATTRIBS = 0x8869; public static inline var MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; public static inline var MAX_VARYING_VECTORS = 0x8DFC; public static inline var MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; public static inline var MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; public static inline var MAX_TEXTURE_IMAGE_UNITS = 0x8872; public static inline var MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; public static inline var SHADER_TYPE = 0x8B4F; public static inline var DELETE_STATUS = 0x8B80; public static inline var LINK_STATUS = 0x8B82; public static inline var VALIDATE_STATUS = 0x8B83; public static inline var ATTACHED_SHADERS = 0x8B85; public static inline var ACTIVE_UNIFORMS = 0x8B86; public static inline var ACTIVE_ATTRIBUTES = 0x8B89; public static inline var SHADING_LANGUAGE_VERSION = 0x8B8C; public static inline var CURRENT_PROGRAM = 0x8B8D; public static inline var NEVER = 0x0200; public static inline var LESS = 0x0201; public static inline var EQUAL = 0x0202; public static inline var LEQUAL = 0x0203; public static inline var GREATER = 0x0204; public static inline var NOTEQUAL = 0x0205; public static inline var GEQUAL = 0x0206; public static inline var ALWAYS = 0x0207; public static inline var KEEP = 0x1E00; public static inline var REPLACE = 0x1E01; public static inline var INCR = 0x1E02; public static inline var DECR = 0x1E03; public static inline var INVERT = 0x150A; public static inline var INCR_WRAP = 0x8507; public static inline var DECR_WRAP = 0x8508; public static inline var VENDOR = 0x1F00; public static inline var RENDERER = 0x1F01; public static inline var VERSION = 0x1F02; public static inline var EXTENSIONS = 0x1F03; public static inline var NEAREST = 0x2600; public static inline var LINEAR = 0x2601; public static inline var NEAREST_MIPMAP_NEAREST = 0x2700; public static inline var LINEAR_MIPMAP_NEAREST = 0x2701; public static inline var NEAREST_MIPMAP_LINEAR = 0x2702; public static inline var LINEAR_MIPMAP_LINEAR = 0x2703; public static inline var TEXTURE_MAG_FILTER = 0x2800; public static inline var TEXTURE_MIN_FILTER = 0x2801; public static inline var TEXTURE_WRAP_S = 0x2802; public static inline var TEXTURE_WRAP_T = 0x2803; public static inline var TEXTURE_2D = 0x0DE1; public static inline var TEXTURE = 0x1702; public static inline var TEXTURE_CUBE_MAP = 0x8513; public static inline var TEXTURE_BINDING_CUBE_MAP = 0x8514; public static inline var TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; public static inline var TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; public static inline var TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; public static inline var TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; public static inline var TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; public static inline var TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; public static inline var MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; public static inline var TEXTURE0 = 0x84C0; public static inline var TEXTURE1 = 0x84C1; public static inline var TEXTURE2 = 0x84C2; public static inline var TEXTURE3 = 0x84C3; public static inline var TEXTURE4 = 0x84C4; public static inline var TEXTURE5 = 0x84C5; public static inline var TEXTURE6 = 0x84C6; public static inline var TEXTURE7 = 0x84C7; public static inline var TEXTURE8 = 0x84C8; public static inline var TEXTURE9 = 0x84C9; public static inline var TEXTURE10 = 0x84CA; public static inline var TEXTURE11 = 0x84CB; public static inline var TEXTURE12 = 0x84CC; public static inline var TEXTURE13 = 0x84CD; public static inline var TEXTURE14 = 0x84CE; public static inline var TEXTURE15 = 0x84CF; public static inline var TEXTURE16 = 0x84D0; public static inline var TEXTURE17 = 0x84D1; public static inline var TEXTURE18 = 0x84D2; public static inline var TEXTURE19 = 0x84D3; public static inline var TEXTURE20 = 0x84D4; public static inline var TEXTURE21 = 0x84D5; public static inline var TEXTURE22 = 0x84D6; public static inline var TEXTURE23 = 0x84D7; public static inline var TEXTURE24 = 0x84D8; public static inline var TEXTURE25 = 0x84D9; public static inline var TEXTURE26 = 0x84DA; public static inline var TEXTURE27 = 0x84DB; public static inline var TEXTURE28 = 0x84DC; public static inline var TEXTURE29 = 0x84DD; public static inline var TEXTURE30 = 0x84DE; public static inline var TEXTURE31 = 0x84DF; public static inline var ACTIVE_TEXTURE = 0x84E0; public static inline var REPEAT = 0x2901; public static inline var CLAMP_TO_EDGE = 0x812F; public static inline var MIRRORED_REPEAT = 0x8370; public static inline var FLOAT_VEC2 = 0x8B50; public static inline var FLOAT_VEC3 = 0x8B51; public static inline var FLOAT_VEC4 = 0x8B52; public static inline var INT_VEC2 = 0x8B53; public static inline var INT_VEC3 = 0x8B54; public static inline var INT_VEC4 = 0x8B55; public static inline var BOOL = 0x8B56; public static inline var BOOL_VEC2 = 0x8B57; public static inline var BOOL_VEC3 = 0x8B58; public static inline var BOOL_VEC4 = 0x8B59; public static inline var FLOAT_MAT2 = 0x8B5A; public static inline var FLOAT_MAT3 = 0x8B5B; public static inline var FLOAT_MAT4 = 0x8B5C; public static inline var SAMPLER_2D = 0x8B5E; public static inline var SAMPLER_CUBE = 0x8B60; public static inline var VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; public static inline var VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; public static inline var VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; public static inline var VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; public static inline var VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; public static inline var VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; public static inline var VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; public static inline var IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A; public static inline var IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; public static inline var VERTEX_PROGRAM_POINT_SIZE = 0x8642; public static inline var POINT_SPRITE = 0x8861; public static inline var COMPILE_STATUS = 0x8B81; public static inline var LOW_FLOAT = 0x8DF0; public static inline var MEDIUM_FLOAT = 0x8DF1; public static inline var HIGH_FLOAT = 0x8DF2; public static inline var LOW_INT = 0x8DF3; public static inline var MEDIUM_INT = 0x8DF4; public static inline var HIGH_INT = 0x8DF5; public static inline var FRAMEBUFFER = 0x8D40; public static inline var RENDERBUFFER = 0x8D41; public static inline var RGBA4 = 0x8056; public static inline var RGB5_A1 = 0x8057; public static inline var RGB565 = 0x8D62; public static inline var DEPTH_COMPONENT16 = 0x81A5; public static inline var STENCIL_INDEX = 0x1901; public static inline var STENCIL_INDEX8 = 0x8D48; public static inline var DEPTH_STENCIL = 0x84F9; public static inline var RENDERBUFFER_WIDTH = 0x8D42; public static inline var RENDERBUFFER_HEIGHT = 0x8D43; public static inline var RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; public static inline var RENDERBUFFER_RED_SIZE = 0x8D50; public static inline var RENDERBUFFER_GREEN_SIZE = 0x8D51; public static inline var RENDERBUFFER_BLUE_SIZE = 0x8D52; public static inline var RENDERBUFFER_ALPHA_SIZE = 0x8D53; public static inline var RENDERBUFFER_DEPTH_SIZE = 0x8D54; public static inline var RENDERBUFFER_STENCIL_SIZE = 0x8D55; public static inline var FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; public static inline var FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; public static inline var FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; public static inline var FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; public static inline var COLOR_ATTACHMENT0 = 0x8CE0; public static inline var DEPTH_ATTACHMENT = 0x8D00; public static inline var STENCIL_ATTACHMENT = 0x8D20; public static inline var DEPTH_STENCIL_ATTACHMENT = 0x821A; public static inline var NONE = 0; public static inline var FRAMEBUFFER_COMPLETE = 0x8CD5; public static inline var FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; public static inline var FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; public static inline var FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9; public static inline var FRAMEBUFFER_UNSUPPORTED = 0x8CDD; public static inline var FRAMEBUFFER_BINDING = 0x8CA6; public static inline var RENDERBUFFER_BINDING = 0x8CA7; public static inline var MAX_RENDERBUFFER_SIZE = 0x84E8; public static inline var INVALID_FRAMEBUFFER_OPERATION = 0x0506; public static inline var UNPACK_FLIP_Y_WEBGL = 0x9240; public static inline var UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241; public static inline var CONTEXT_LOST_WEBGL = 0x9242; public static inline var UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243; public static inline var BROWSER_DEFAULT_WEBGL = 0x9244; public static inline var READ_BUFFER = 0x0C02; public static inline var UNPACK_ROW_LENGTH = 0x0CF2; public static inline var UNPACK_SKIP_ROWS = 0x0CF3; public static inline var UNPACK_SKIP_PIXELS = 0x0CF4; public static inline var PACK_ROW_LENGTH = 0x0D02; public static inline var PACK_SKIP_ROWS = 0x0D03; public static inline var PACK_SKIP_PIXELS = 0x0D04; public static inline var TEXTURE_BINDING_3D = 0x806A; public static inline var UNPACK_SKIP_IMAGES = 0x806D; public static inline var UNPACK_IMAGE_HEIGHT = 0x806E; public static inline var MAX_3D_TEXTURE_SIZE = 0x8073; public static inline var MAX_ELEMENTS_VERTICES = 0x80E8; public static inline var MAX_ELEMENTS_INDICES = 0x80E9; public static inline var MAX_TEXTURE_LOD_BIAS = 0x84FD; public static inline var MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49; public static inline var MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A; public static inline var MAX_ARRAY_TEXTURE_LAYERS = 0x88FF; public static inline var MIN_PROGRAM_TEXEL_OFFSET = 0x8904; public static inline var MAX_PROGRAM_TEXEL_OFFSET = 0x8905; public static inline var MAX_VARYING_COMPONENTS = 0x8B4B; public static inline var FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B; public static inline var RASTERIZER_DISCARD = 0x8C89; public static inline var VERTEX_ARRAY_BINDING = 0x85B5; public static inline var MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122; public static inline var MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125; public static inline var MAX_SERVER_WAIT_TIMEOUT = 0x9111; public static inline var MAX_ELEMENT_INDEX = 0x8D6B; public static inline var RED = 0x1903; public static inline var RGB8 = 0x8051; public static inline var RGBA8 = 0x8058; public static inline var RGB10_A2 = 0x8059; public static inline var TEXTURE_3D = 0x806F; public static inline var TEXTURE_WRAP_R = 0x8072; public static inline var TEXTURE_MIN_LOD = 0x813A; public static inline var TEXTURE_MAX_LOD = 0x813B; public static inline var TEXTURE_BASE_LEVEL = 0x813C; public static inline var TEXTURE_MAX_LEVEL = 0x813D; public static inline var TEXTURE_COMPARE_MODE = 0x884C; public static inline var TEXTURE_COMPARE_FUNC = 0x884D; public static inline var SRGB = 0x8C40; public static inline var SRGB8 = 0x8C41; public static inline var SRGB8_ALPHA8 = 0x8C43; public static inline var COMPARE_REF_TO_TEXTURE = 0x884E; public static inline var RGBA32F = 0x8814; public static inline var RGB32F = 0x8815; public static inline var RGBA16F = 0x881A; public static inline var RGB16F = 0x881B; public static inline var TEXTURE_2D_ARRAY = 0x8C1A; public static inline var TEXTURE_BINDING_2D_ARRAY = 0x8C1D; public static inline var R11F_G11F_B10F = 0x8C3A; public static inline var RGB9_E5 = 0x8C3D; public static inline var RGBA32UI = 0x8D70; public static inline var RGB32UI = 0x8D71; public static inline var RGBA16UI = 0x8D76; public static inline var RGB16UI = 0x8D77; public static inline var RGBA8UI = 0x8D7C; public static inline var RGB8UI = 0x8D7D; public static inline var RGBA32I = 0x8D82; public static inline var RGB32I = 0x8D83; public static inline var RGBA16I = 0x8D88; public static inline var RGB16I = 0x8D89; public static inline var RGBA8I = 0x8D8E; public static inline var RGB8I = 0x8D8F; public static inline var RED_INTEGER = 0x8D94; public static inline var RGB_INTEGER = 0x8D98; public static inline var RGBA_INTEGER = 0x8D99; public static inline var R8 = 0x8229; public static inline var RG8 = 0x822B; public static inline var R16F = 0x822D; public static inline var R32F = 0x822E; public static inline var RG16F = 0x822F; public static inline var RG32F = 0x8230; public static inline var R8I = 0x8231; public static inline var R8UI = 0x8232; public static inline var R16I = 0x8233; public static inline var R16UI = 0x8234; public static inline var R32I = 0x8235; public static inline var R32UI = 0x8236; public static inline var RG8I = 0x8237; public static inline var RG8UI = 0x8238; public static inline var RG16I = 0x8239; public static inline var RG16UI = 0x823A; public static inline var RG32I = 0x823B; public static inline var RG32UI = 0x823C; public static inline var R8_SNORM = 0x8F94; public static inline var RG8_SNORM = 0x8F95; public static inline var RGB8_SNORM = 0x8F96; public static inline var RGBA8_SNORM = 0x8F97; public static inline var RGB10_A2UI = 0x906F; public static inline var TEXTURE_IMMUTABLE_FORMAT = 0x912F; public static inline var TEXTURE_IMMUTABLE_LEVELS = 0x82DF; public static inline var UNSIGNED_INT_2_10_10_10_REV = 0x8368; public static inline var UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B; public static inline var UNSIGNED_INT_5_9_9_9_REV = 0x8C3E; public static inline var FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD; public static inline var UNSIGNED_INT_24_8 = 0x84FA; public static inline var HALF_FLOAT = 0x140B; public static inline var RG = 0x8227; public static inline var RG_INTEGER = 0x8228; public static inline var INT_2_10_10_10_REV = 0x8D9F; public static inline var CURRENT_QUERY = 0x8865; public static inline var QUERY_RESULT = 0x8866; public static inline var QUERY_RESULT_AVAILABLE = 0x8867; public static inline var ANY_SAMPLES_PASSED = 0x8C2F; public static inline var ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A; public static inline var MAX_DRAW_BUFFERS = 0x8824; public static inline var DRAW_BUFFER0 = 0x8825; public static inline var DRAW_BUFFER1 = 0x8826; public static inline var DRAW_BUFFER2 = 0x8827; public static inline var DRAW_BUFFER3 = 0x8828; public static inline var DRAW_BUFFER4 = 0x8829; public static inline var DRAW_BUFFER5 = 0x882A; public static inline var DRAW_BUFFER6 = 0x882B; public static inline var DRAW_BUFFER7 = 0x882C; public static inline var DRAW_BUFFER8 = 0x882D; public static inline var DRAW_BUFFER9 = 0x882E; public static inline var DRAW_BUFFER10 = 0x882F; public static inline var DRAW_BUFFER11 = 0x8830; public static inline var DRAW_BUFFER12 = 0x8831; public static inline var DRAW_BUFFER13 = 0x8832; public static inline var DRAW_BUFFER14 = 0x8833; public static inline var DRAW_BUFFER15 = 0x8834; public static inline var MAX_COLOR_ATTACHMENTS = 0x8CDF; public static inline var COLOR_ATTACHMENT1 = 0x8CE1; public static inline var COLOR_ATTACHMENT2 = 0x8CE2; public static inline var COLOR_ATTACHMENT3 = 0x8CE3; public static inline var COLOR_ATTACHMENT4 = 0x8CE4; public static inline var COLOR_ATTACHMENT5 = 0x8CE5; public static inline var COLOR_ATTACHMENT6 = 0x8CE6; public static inline var COLOR_ATTACHMENT7 = 0x8CE7; public static inline var COLOR_ATTACHMENT8 = 0x8CE8; public static inline var COLOR_ATTACHMENT9 = 0x8CE9; public static inline var COLOR_ATTACHMENT10 = 0x8CEA; public static inline var COLOR_ATTACHMENT11 = 0x8CEB; public static inline var COLOR_ATTACHMENT12 = 0x8CEC; public static inline var COLOR_ATTACHMENT13 = 0x8CED; public static inline var COLOR_ATTACHMENT14 = 0x8CEE; public static inline var COLOR_ATTACHMENT15 = 0x8CEF; public static inline var SAMPLER_3D = 0x8B5F; public static inline var SAMPLER_2D_SHADOW = 0x8B62; public static inline var SAMPLER_2D_ARRAY = 0x8DC1; public static inline var SAMPLER_2D_ARRAY_SHADOW = 0x8DC4; public static inline var SAMPLER_CUBE_SHADOW = 0x8DC5; public static inline var INT_SAMPLER_2D = 0x8DCA; public static inline var INT_SAMPLER_3D = 0x8DCB; public static inline var INT_SAMPLER_CUBE = 0x8DCC; public static inline var INT_SAMPLER_2D_ARRAY = 0x8DCF; public static inline var UNSIGNED_INT_SAMPLER_2D = 0x8DD2; public static inline var UNSIGNED_INT_SAMPLER_3D = 0x8DD3; public static inline var UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4; public static inline var UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7; public static inline var MAX_SAMPLES = 0x8D57; public static inline var SAMPLER_BINDING = 0x8919; public static inline var PIXEL_PACK_BUFFER = 0x88EB; public static inline var PIXEL_UNPACK_BUFFER = 0x88EC; public static inline var PIXEL_PACK_BUFFER_BINDING = 0x88ED; public static inline var PIXEL_UNPACK_BUFFER_BINDING = 0x88EF; public static inline var COPY_READ_BUFFER = 0x8F36; public static inline var COPY_WRITE_BUFFER = 0x8F37; public static inline var COPY_READ_BUFFER_BINDING = 0x8F36; public static inline var COPY_WRITE_BUFFER_BINDING = 0x8F37; public static inline var FLOAT_MAT2x3 = 0x8B65; public static inline var FLOAT_MAT2x4 = 0x8B66; public static inline var FLOAT_MAT3x2 = 0x8B67; public static inline var FLOAT_MAT3x4 = 0x8B68; public static inline var FLOAT_MAT4x2 = 0x8B69; public static inline var FLOAT_MAT4x3 = 0x8B6A; public static inline var UNSIGNED_INT_VEC2 = 0x8DC6; public static inline var UNSIGNED_INT_VEC3 = 0x8DC7; public static inline var UNSIGNED_INT_VEC4 = 0x8DC8; public static inline var UNSIGNED_NORMALIZED = 0x8C17; public static inline var SIGNED_NORMALIZED = 0x8F9C; public static inline var VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD; public static inline var VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE; public static inline var TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F; public static inline var MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80; public static inline var TRANSFORM_FEEDBACK_VARYINGS = 0x8C83; public static inline var TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84; public static inline var TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85; public static inline var TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88; public static inline var MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A; public static inline var MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B; public static inline var INTERLEAVED_ATTRIBS = 0x8C8C; public static inline var SEPARATE_ATTRIBS = 0x8C8D; public static inline var TRANSFORM_FEEDBACK_BUFFER = 0x8C8E; public static inline var TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F; public static inline var TRANSFORM_FEEDBACK = 0x8E22; public static inline var TRANSFORM_FEEDBACK_PAUSED = 0x8E23; public static inline var TRANSFORM_FEEDBACK_ACTIVE = 0x8E24; public static inline var TRANSFORM_FEEDBACK_BINDING = 0x8E25; public static inline var FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210; public static inline var FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211; public static inline var FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212; public static inline var FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213; public static inline var FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214; public static inline var FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215; public static inline var FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216; public static inline var FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217; public static inline var FRAMEBUFFER_DEFAULT = 0x8218; public static inline var DEPTH24_STENCIL8 = 0x88F0; public static inline var DRAW_FRAMEBUFFER_BINDING = 0x8CA6; public static inline var READ_FRAMEBUFFER = 0x8CA8; public static inline var DRAW_FRAMEBUFFER = 0x8CA9; public static inline var READ_FRAMEBUFFER_BINDING = 0x8CAA; public static inline var RENDERBUFFER_SAMPLES = 0x8CAB; public static inline var FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4; public static inline var FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56; public static inline var UNIFORM_BUFFER = 0x8A11; public static inline var UNIFORM_BUFFER_BINDING = 0x8A28; public static inline var UNIFORM_BUFFER_START = 0x8A29; public static inline var UNIFORM_BUFFER_SIZE = 0x8A2A; public static inline var MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B; public static inline var MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D; public static inline var MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E; public static inline var MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F; public static inline var MAX_UNIFORM_BLOCK_SIZE = 0x8A30; public static inline var MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31; public static inline var MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33; public static inline var UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34; public static inline var ACTIVE_UNIFORM_BLOCKS = 0x8A36; public static inline var UNIFORM_TYPE = 0x8A37; public static inline var UNIFORM_SIZE = 0x8A38; public static inline var UNIFORM_BLOCK_INDEX = 0x8A3A; public static inline var UNIFORM_OFFSET = 0x8A3B; public static inline var UNIFORM_ARRAY_STRIDE = 0x8A3C; public static inline var UNIFORM_MATRIX_STRIDE = 0x8A3D; public static inline var UNIFORM_IS_ROW_MAJOR = 0x8A3E; public static inline var UNIFORM_BLOCK_BINDING = 0x8A3F; public static inline var UNIFORM_BLOCK_DATA_SIZE = 0x8A40; public static inline var UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42; public static inline var UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43; public static inline var UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44; public static inline var UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46; public static inline var OBJECT_TYPE = 0x9112; public static inline var SYNC_CONDITION = 0x9113; public static inline var SYNC_STATUS = 0x9114; public static inline var SYNC_FLAGS = 0x9115; public static inline var SYNC_FENCE = 0x9116; public static inline var SYNC_GPU_COMMANDS_COMPLETE = 0x9117; public static inline var UNSIGNALED = 0x9118; public static inline var SIGNALED = 0x9119; public static inline var ALREADY_SIGNALED = 0x911A; public static inline var TIMEOUT_EXPIRED = 0x911B; public static inline var CONDITION_SATISFIED = 0x911C; public static inline var WAIT_FAILED = 0x911D; public static inline var SYNC_FLUSH_COMMANDS_BIT = 0x00000001; public static inline var COLOR = 0x1800; public static inline var DEPTH = 0x1801; public static inline var STENCIL = 0x1802; public static inline var MIN = 0x8007; public static inline var MAX = 0x8008; public static inline var DEPTH_COMPONENT24 = 0x81A6; public static inline var STREAM_READ = 0x88E1; public static inline var STREAM_COPY = 0x88E2; public static inline var STATIC_READ = 0x88E5; public static inline var STATIC_COPY = 0x88E6; public static inline var DYNAMIC_READ = 0x88E9; public static inline var DYNAMIC_COPY = 0x88EA; public static inline var DEPTH_COMPONENT32F = 0x8CAC; public static inline var DEPTH32F_STENCIL8 = 0x8CAD; public static inline var INVALID_INDEX = 0xFFFFFFFF; public static inline var TIMEOUT_IGNORED = -1; public static inline var MAX_CLIENT_WAIT_TIMEOUT_WEBGL = 0x9247; #if lime_opengl public static var context(default, null):OpenGLRenderContext; #elseif lime_opengles public static var context(default, null):OpenGLES3RenderContext; #elseif lime_webgl public static var context(default, null):WebGL2RenderContext; #else public static var context(default, null):Dynamic; #end public static var type(default, null):RenderContextType; public static var version(default, null):Float; public static inline function activeTexture(texture:Int):Void { context.activeTexture(texture); } public static inline function attachShader(program:GLProgram, shader:GLShader):Void { context.attachShader(program, shader); } public static inline function beginQuery(target:Int, query:GLQuery):Void { context.beginQuery(target, query); } public static inline function beginTransformFeedback(primitiveNode:Int):Void { context.beginTransformFeedback(primitiveNode); } public static inline function bindAttribLocation(program:GLProgram, index:Int, name:String):Void { context.bindAttribLocation(program, index, name); } public static inline function bindBuffer(target:Int, buffer:GLBuffer):Void { context.bindBuffer(target, buffer); } public static inline function bindBufferBase(target:Int, index:Int, buffer:GLBuffer):Void { context.bindBufferBase(target, index, buffer); } public static inline function bindBufferRange(target:Int, index:Int, buffer:GLBuffer, offset:DataPointer, size:Int):Void { context.bindBufferRange(target, index, buffer, offset, size); } public static inline function bindFramebuffer(target:Int, framebuffer:GLFramebuffer):Void { context.bindFramebuffer(target, framebuffer); } public static inline function bindRenderbuffer(target:Int, renderbuffer:GLRenderbuffer):Void { context.bindRenderbuffer(target, renderbuffer); } public static inline function bindSampler(unit:Int, sampler:GLSampler):Void { context.bindSampler(unit, sampler); } public static inline function bindTexture(target:Int, texture:GLTexture):Void { context.bindTexture(target, texture); } public static inline function bindTransformFeedback(target:Int, transformFeedback:GLTransformFeedback):Void { context.bindTransformFeedback(target, transformFeedback); } public static inline function bindVertexArray(vertexArray:GLVertexArrayObject):Void { context.bindVertexArray(vertexArray); } public static inline function blitFramebuffer(srcX0:Int, srcY0:Int, srcX1:Int, srcY1:Int, dstX0:Int, dstY0:Int, dstX1:Int, dstY1:Int, mask:Int, filter:Int):Void { context.blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } public static inline function blendColor(red:Float, green:Float, blue:Float, alpha:Float):Void { context.blendColor(red, green, blue, alpha); } public static inline function blendEquation(mode:Int):Void { context.blendEquation(mode); } public static inline function blendEquationSeparate(modeRGB:Int, modeAlpha:Int):Void { context.blendEquationSeparate(modeRGB, modeAlpha); } public static inline function blendFunc(sfactor:Int, dfactor:Int):Void { context.blendFunc(sfactor, dfactor); } public static inline function blendFuncSeparate(srcRGB:Int, dstRGB:Int, srcAlpha:Int, dstAlpha:Int):Void { context.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); } #if (lime_opengl || lime_opengles) public static inline function bufferData(target:Int, size:Int, srcData:DataPointer, usage:Int):Void { context.bufferData(target, size, srcData, usage); } #end #if lime_webgl public static inline function bufferDataWEBGL(target:Int, srcData:Dynamic, usage:Int, ?srcOffset:Int, ?length:Int):Void { context.bufferData(target, srcData, usage, srcOffset, length); } #end #if (lime_opengl || lime_opengles) public static inline function bufferSubData(target:Int, dstByteOffset:Int, size:Int, srcData:DataPointer):Void { context.bufferSubData(target, dstByteOffset, size, srcData); } #end #if lime_webgl public static inline function bufferSubDataWEBGL(target:Int, dstByteOffset:Int, srcData:Dynamic, ?srcOffset:Int, ?length:Int):Void { context.bufferSubData(target, dstByteOffset, srcData, srcOffset, length); } #end public static inline function checkFramebufferStatus(target:Int):Int { return context.checkFramebufferStatus(target); } public static inline function clear(mask:Int):Void { context.clear(mask); } public static inline function clearBufferfi(buffer:Int, drawbuffer:Int, depth:Float, stencil:Int):Void { context.clearBufferfi(buffer, drawbuffer, depth, stencil); } #if (lime_opengl || lime_opengles) public static inline function clearBufferfv(buffer:Int, drawbuffer:Int, value:DataPointer):Void { context.clearBufferfv(buffer, drawbuffer, value); } #end #if lime_webgl public static inline function clearBufferfvWEBGL(buffer:Int, drawbuffer:Int, values:Dynamic, ?srcOffset:Int):Void { context.clearBufferfv(buffer, drawbuffer, values, srcOffset); } #end #if (lime_opengl || lime_opengles) public static inline function clearBufferiv(buffer:Int, drawbuffer:Int, value:DataPointer):Void { context.clearBufferiv(buffer, drawbuffer, value); } #end #if lime_webgl public static inline function clearBufferivWEBGL(buffer:Int, drawbuffer:Int, values:Dynamic, ?srcOffset:Int):Void { context.clearBufferiv(buffer, drawbuffer, values, srcOffset); } #end #if (lime_opengl || lime_opengles) public static inline function clearBufferuiv(buffer:Int, drawbuffer:Int, value:DataPointer):Void { context.clearBufferuiv(buffer, drawbuffer, value); } #end #if lime_webgl public static inline function clearBufferuivWEBGL(buffer:Int, drawbuffer:Int, values:Dynamic, ?srcOffset:Int):Void { context.clearBufferuiv(buffer, drawbuffer, values, srcOffset); } #end public static inline function clearColor(red:Float, green:Float, blue:Float, alpha:Float):Void { context.clearColor(red, green, blue, alpha); } #if lime_webgl public static inline function clearDepth(depth:Float):Void { context.clearDepth(depth); } #end #if (lime_opengl || lime_opengles) public static inline function clearDepthf(depth:Float):Void { context.clearDepthf(depth); } #end public static inline function clearStencil(s:Int):Void { context.clearStencil(s); } public static inline function clientWaitSync(sync:GLSync, flags:Int, timeout:#if (!js || !html5 || doc_gen) Int64 #else Dynamic #end):Int { return context.clientWaitSync(sync, flags, timeout); } public static inline function colorMask(red:Bool, green:Bool, blue:Bool, alpha:Bool):Void { context.colorMask(red, green, blue, alpha); } public static inline function compileShader(shader:GLShader):Void { context.compileShader(shader); } #if (lime_opengl || lime_opengles) public static inline function compressedTexImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, imageSize:Int, data:DataPointer):Void { context.compressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); } #end #if lime_webgl public static inline function compressedTexImage2DWEBGL(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, srcData:Dynamic, ?srcOffset:Int, ?srcLengthOverride:Int):Void { context.compressedTexImage2D(target, level, internalformat, width, height, border, srcData, srcOffset, srcLengthOverride); } #end #if (lime_opengl || lime_opengles) public static inline function compressedTexImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, imageSize:Int, data:DataPointer):Void { context.compressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data); } #end #if lime_webgl public static inline function compressedTexImage3DWEBGL(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, srcData:Dynamic, ?srcOffset:Int, ?srcLengthOverride:Int):Void { context.compressedTexImage3D(target, level, internalformat, width, height, depth, border, srcData, srcOffset, srcLengthOverride); } #end #if (lime_opengl || lime_opengles) public static inline function compressedTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, imageSize:Int, data:DataPointer):Void { context.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); } #end #if lime_webgl public static inline function compressedTexSubImage2DWEBGL(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, srcData:Dynamic, ?srcOffset:Int, ?srcLengthOverride:Int):Void { context.compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, srcData, srcOffset, srcLengthOverride); } #end #if (lime_opengl || lime_opengles) public static inline function compressedTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, imageSize:Int, data:DataPointer):Void { context.compressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); } #end #if lime_webgl public static inline function compressedTexSubImage3DWEBGL(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, srcData:Dynamic, ?srcOffset:Int, ?srcLengthOverride:Int):Void { context.compressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, srcData, srcOffset, srcLengthOverride); } #end #if (lime_opengl || lime_opengles) public static inline function copyBufferSubData(readTarget:Int, writeTarget:Int, readOffset:DataPointer, writeOffset:DataPointer, size:Int):Void { context.copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); } #end public static inline function copyTexImage2D(target:Int, level:Int, internalformat:Int, x:Int, y:Int, width:Int, height:Int, border:Int):Void { context.copyTexImage2D(target, level, internalformat, x, y, width, height, border); } public static inline function copyTexSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, x:Int, y:Int, width:Int, height:Int):Void { context.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); } public static inline function copyTexSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, x:Int, y:Int, width:Int, height:Int):Void { context.copyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); } public static inline function createBuffer():GLBuffer { return context.createBuffer(); } public static inline function createFramebuffer():GLFramebuffer { return context.createFramebuffer(); } public static inline function createProgram():GLProgram { return context.createProgram(); } public static inline function createQuery():GLQuery { return context.createQuery(); } public static inline function createRenderbuffer():GLRenderbuffer { return context.createRenderbuffer(); } public static inline function createSampler():GLSampler { return context.createSampler(); } public static inline function createShader(type:Int):GLShader { return context.createShader(type); } public static inline function createTexture():GLTexture { return context.createTexture(); } public static inline function createTransformFeedback():GLTransformFeedback { return context.createTransformFeedback(); } public static inline function createVertexArray():GLVertexArrayObject { return context.createVertexArray(); } public static inline function cullFace(mode:Int):Void { context.cullFace(mode); } public static inline function deleteBuffer(buffer:GLBuffer):Void { context.deleteBuffer(buffer); } public static inline function deleteFramebuffer(framebuffer:GLFramebuffer):Void { context.deleteFramebuffer(framebuffer); } public static inline function deleteProgram(program:GLProgram):Void { context.deleteProgram(program); } public static inline function deleteQuery(query:GLQuery):Void { context.deleteQuery(query); } public static inline function deleteRenderbuffer(renderbuffer:GLRenderbuffer):Void { context.deleteRenderbuffer(renderbuffer); } public static inline function deleteSampler(sampler:GLSampler):Void { context.deleteSampler(sampler); } public static inline function deleteShader(shader:GLShader):Void { context.deleteShader(shader); } public static inline function deleteSync(sync:GLSync):Void { context.deleteSync(sync); } public static inline function deleteTexture(texture:GLTexture):Void { context.deleteTexture(texture); } public static inline function deleteTransformFeedback(transformFeedback:GLTransformFeedback):Void { context.deleteTransformFeedback(transformFeedback); } public static inline function deleteVertexArray(vertexArray:GLVertexArrayObject):Void { context.deleteVertexArray(vertexArray); } public static inline function depthFunc(func:Int):Void { context.depthFunc(func); } public static inline function depthMask(flag:Bool):Void { context.depthMask(flag); } #if lime_webgl public static inline function depthRange(zNear:Float, zFar:Float):Void { context.depthRange(zNear, zFar); } #end #if (lime_opengl || lime_opengles) public static inline function depthRangef(zNear:Float, zFar:Float):Void { context.depthRangef(zNear, zFar); } #end public static inline function detachShader(program:GLProgram, shader:GLShader):Void { context.detachShader(program, shader); } public static inline function disable(cap:Int):Void { context.disable(cap); } public static inline function disableVertexAttribArray(index:Int):Void { context.disableVertexAttribArray(index); } public static inline function drawArrays(mode:Int, first:Int, count:Int):Void { context.drawArrays(mode, first, count); } public static inline function drawArraysInstanced(mode:Int, first:Int, count:Int, instanceCount:Int):Void { context.drawArraysInstanced(mode, first, count, instanceCount); } public static inline function drawBuffers(buffers:Array):Void { context.drawBuffers(buffers); } public static inline function drawElements(mode:Int, count:Int, type:Int, offset:Int):Void { context.drawElements(mode, count, type, offset); } public static inline function drawElementsInstanced(mode:Int, count:Int, type:Int, offset:DataPointer, instanceCount:Int):Void { context.drawElementsInstanced(mode, count, type, offset, instanceCount); } public static inline function drawRangeElements(mode:Int, start:Int, end:Int, count:Int, type:Int, offset:DataPointer):Void { context.drawRangeElements(mode, start, end, count, type, offset); } public static inline function enable(cap:Int):Void { context.enable(cap); } public static inline function enableVertexAttribArray(index:Int):Void { context.enableVertexAttribArray(index); } public static inline function endQuery(target:Int):Void { context.endQuery(target); } public static inline function endTransformFeedback():Void { context.endTransformFeedback(); } public static inline function fenceSync(condition:Int, flags:Int):GLSync { return context.fenceSync(condition, flags); } public static inline function finish():Void { context.finish(); } public static inline function flush():Void { context.flush(); } public static inline function framebufferRenderbuffer(target:Int, attachment:Int, renderbuffertarget:Int, renderbuffer:GLRenderbuffer):Void { context.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); } public static inline function framebufferTexture2D(target:Int, attachment:Int, textarget:Int, texture:GLTexture, level:Int):Void { context.framebufferTexture2D(target, attachment, textarget, texture, level); } public static inline function framebufferTextureLayer(target:Int, attachment:Int, texture:GLTexture, level:Int, layer:Int):Void { context.framebufferTextureLayer(target, attachment, texture, level, layer); } public static inline function frontFace(mode:Int):Void { context.frontFace(mode); } public static inline function generateMipmap(target:Int):Void { context.generateMipmap(target); } public static inline function getActiveAttrib(program:GLProgram, index:Int):GLActiveInfo { return context.getActiveAttrib(program, index); } public static inline function getActiveUniform(program:GLProgram, index:Int):GLActiveInfo { return context.getActiveUniform(program, index); } #if (lime_opengl || lime_opengles) public static inline function getActiveUniformBlocki(program:GLProgram, uniformBlockIndex:Int, pname:Int):Int { return context.getActiveUniformBlocki(program, uniformBlockIndex, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getActiveUniformBlockiv(program:GLProgram, uniformBlockIndex:Int, pname:Int, params:DataPointer):Void { context.getActiveUniformBlockiv(program, uniformBlockIndex, pname, params); } #end public static inline function getActiveUniformBlockName(program:GLProgram, uniformBlockIndex:Int):String { return context.getActiveUniformBlockName(program, uniformBlockIndex); } public static inline function getActiveUniformBlockParameter(program:GLProgram, uniformBlockIndex:Int, pname:Int):Dynamic { return context.getActiveUniformBlockParameter(program, uniformBlockIndex, pname); } public static inline function getActiveUniforms(program:GLProgram, uniformIndices:Array, pname:Int):Dynamic { return context.getActiveUniforms(program, uniformIndices, pname); } #if (lime_opengl || lime_opengles) public static inline function getActiveUniformsiv(program:GLProgram, uniformIndices:Array, pname:Int, params:DataPointer):Void { context.getActiveUniformsiv(program, uniformIndices, pname, params); } #end public static inline function getAttachedShaders(program:GLProgram):Array { return context.getAttachedShaders(program); } public static inline function getAttribLocation(program:GLProgram, name:String):Int { return context.getAttribLocation(program, name); } #if (lime_opengl || lime_opengles) public static inline function getBoolean(pname:Int):Bool { return context.getBoolean(pname); } #end #if (lime_opengl || lime_opengles) public static inline function getBooleanv(pname:Int, params:DataPointer):Void { context.getBooleanv(pname, params); } #end public static inline function getBufferParameter(target:Int, pname:Int):Dynamic { return context.getBufferParameter(target, pname); } #if (lime_opengl || lime_opengles) public static inline function getBufferParameteri(target:Int, pname:Int):Int { return context.getBufferParameteri(target, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getBufferParameteri64v(target:Int, pname:Int, params:DataPointer):Void { context.getBufferParameteri64v(target, pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getBufferParameteriv(target:Int, pname:Int, data:DataPointer):Void { context.getBufferParameteriv(target, pname, data); } #end #if (lime_opengl || lime_opengles) public static inline function getBufferPointerv(target:Int, pname:Int):DataPointer { return context.getBufferPointerv(target, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getBufferSubData(target:Int, offset:DataPointer, size:Int, data:DataPointer):Void { context.getBufferSubData(target, offset, size, data); } #end #if lime_webgl public static inline function getBufferSubDataWEBGL(target:Int, srcByteOffset:DataPointer, dstData:Dynamic, ?srcOffset:Dynamic, ?length:Int):Void { context.getBufferSubData(target, srcByteOffset, dstData, srcOffset, length); } #end public static inline function getContextAttributes():GLContextAttributes { return context.getContextAttributes(); } public static inline function getError():Int { return context.getError(); } public static inline function getExtension(name:String):Dynamic { return context.getExtension(name); } #if (lime_opengl || lime_opengles) public static inline function getFloat(pname:Int):Float { return context.getFloat(pname); } #end #if (lime_opengl || lime_opengles) public static inline function getFloatv(pname:Int, params:DataPointer):Void { context.getFloatv(pname, params); } #end public static inline function getFragDataLocation(program:GLProgram, name:String):Int { return context.getFragDataLocation(program, name); } public static inline function getFramebufferAttachmentParameter(target:Int, attachment:Int, pname:Int):Dynamic { return context.getFramebufferAttachmentParameter(target, attachment, pname); } #if (lime_opengl || lime_opengles) public static inline function getFramebufferAttachmentParameteri(target:Int, attachment:Int, pname:Int):Int { return context.getFramebufferAttachmentParameteri(target, attachment, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getFramebufferAttachmentParameteriv(target:Int, attachment:Int, pname:Int, params:DataPointer):Void { context.getFramebufferAttachmentParameteriv(target, attachment, pname, params); } #end public static inline function getIndexedParameter(target:Int, index:Int):Dynamic { return context.getIndexedParameter(target, index); } #if (lime_opengl || lime_opengles) public static inline function getInteger(pname:Int):Int { return context.getInteger(pname); } #end #if (lime_opengl || lime_opengles) public static inline function getInteger64(pname:Int):Int64 { return context.getInteger64(pname); } #end #if (lime_opengl || lime_opengles) public static inline function getInteger64i(pname:Int):Int64 { return context.getInteger64i(pname); } #end #if (lime_opengl || lime_opengles) public static inline function getInteger64i_v(pname:Int, index:Int, params:DataPointer):Void { context.getInteger64i_v(pname, index, params); } #end #if (lime_opengl || lime_opengles) public static inline function getInteger64v(pname:Int, params:DataPointer):Void { context.getInteger64v(pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getIntegeri_v(pname:Int, index:Int, params:DataPointer):Void { context.getIntegeri_v(pname, index, params); } #end #if (lime_opengl || lime_opengles) public static inline function getIntegerv(pname:Int, params:DataPointer):Void { context.getIntegerv(pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getInternalformati(target:Int, internalformat:Int, pname:Int):Int { return context.getInternalformati(target, internalformat, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getInternalformativ(target:Int, internalformat:Int, pname:Int, bufSize:Int, params:DataPointer):Void { context.getInternalformativ(target, internalformat, pname, bufSize, params); } #end public static inline function getInternalformatParameter(target:Int, internalformat:Int, pname:Int):Dynamic { return context.getInternalformatParameter(target, internalformat, pname); } public static inline function getParameter(pname:Int):Dynamic { return context.getParameter(pname); } #if (lime_opengl || lime_opengles) public static inline function getProgrami(program:GLProgram, pname:Int):Int { return context.getProgrami(program, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getProgramiv(program:GLProgram, pname:Int, params:DataPointer):Void { context.getProgramiv(program, pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getProgramBinary(program:GLProgram, binaryFormat:Int):Bytes { return context.getProgramBinary(program, binaryFormat); } #end public static inline function getProgramInfoLog(program:GLProgram):String { return context.getProgramInfoLog(program); } public static inline function getProgramParameter(program:GLProgram, pname:Int):Dynamic { return context.getProgramParameter(program, pname); } public static inline function getQuery(target:Int, pname:Int):GLQuery { return context.getQuery(target, pname); } #if (lime_opengl || lime_opengles) public static inline function getQueryi(target:Int, pname:Int):Int { return context.getQueryi(target, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getQueryiv(target:Int, pname:Int, params:DataPointer):Void { context.getQueryiv(target, pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getQueryObjectui(query:GLQuery, pname:Int):Int { return context.getQueryObjectui(query, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getQueryObjectuiv(query:GLQuery, pname:Int, params:DataPointer):Void { context.getQueryObjectuiv(query, pname, params); } #end public static inline function getQueryParameter(query:GLQuery, pname:Int):Dynamic { return context.getQueryParameter(query, pname); } public static inline function getRenderbufferParameter(target:Int, pname:Int):Dynamic { return context.getRenderbufferParameter(target, pname); } #if (lime_opengl || lime_opengles) public static inline function getRenderbufferParameteri(target:Int, pname:Int):Int { return context.getRenderbufferParameteri(target, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getRenderbufferParameteriv(target:Int, pname:Int, params:DataPointer):Void { context.getRenderbufferParameteriv(target, pname, params); } #end public static inline function getSamplerParameter(sampler:GLSampler, pname:Int):Dynamic { return context.getSamplerParameter(sampler, pname); } #if (lime_opengl || lime_opengles) public static inline function getSamplerParameterf(sampler:GLSampler, pname:Int):Float { return context.getSamplerParameterf(sampler, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getSamplerParameterfv(sampler:GLSampler, pname:Int, params:DataPointer):Void { context.getSamplerParameterfv(sampler, pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getSamplerParameteri(sampler:GLSampler, pname:Int):Int { return context.getSamplerParameteri(sampler, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getSamplerParameteriv(sampler:GLSampler, pname:Int, params:DataPointer):Void { context.getSamplerParameteriv(sampler, pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getShaderi(shader:GLShader, pname:Int):Int { return context.getShaderi(shader, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getShaderiv(shader:GLShader, pname:Int, params:DataPointer):Void { context.getShaderiv(shader, pname, params); } #end public static inline function getShaderInfoLog(shader:GLShader):String { return context.getShaderInfoLog(shader); } public static inline function getShaderParameter(shader:GLShader, pname:Int):Dynamic { return context.getShaderParameter(shader, pname); } public static inline function getShaderPrecisionFormat(shadertype:Int, precisiontype:Int):GLShaderPrecisionFormat { return context.getShaderPrecisionFormat(shadertype, precisiontype); } public static inline function getShaderSource(shader:GLShader):String { return context.getShaderSource(shader); } #if (lime_opengl || lime_opengles) public static inline function getString(name:Int):String { return context.getString(name); } #end #if (lime_opengl || lime_opengles) public static inline function getStringi(name:Int, index:Int):String { return context.getStringi(name, index); } #end public static inline function getSupportedExtensions():Array { return context.getSupportedExtensions(); } public static inline function getSyncParameter(sync:GLSync, pname:Int):Dynamic { return context.getSyncParameter(sync, pname); } #if (lime_opengl || lime_opengles) public static inline function getSyncParameteri(sync:GLSync, pname:Int):Int { return context.getSyncParameteri(sync, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getSyncParameteriv(sync:GLSync, pname:Int, params:DataPointer):Void { context.getSyncParameteriv(sync, pname, params); } #end public static inline function getTexParameter(target:Int, pname:Int):Dynamic { return context.getTexParameter(target, pname); } #if (lime_opengl || lime_opengles) public static inline function getTexParameterf(target:Int, pname:Int):Float { return context.getTexParameterf(target, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getTexParameterfv(target:Int, pname:Int, params:DataPointer):Void { context.getTexParameterfv(target, pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getTexParameteri(target:Int, pname:Int):Int { return context.getTexParameteri(target, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getTexParameteriv(target:Int, pname:Int, params:DataPointer):Void { context.getTexParameteriv(target, pname, params); } #end public static inline function getTransformFeedbackVarying(program:GLProgram, index:Int):GLActiveInfo { return context.getTransformFeedbackVarying(program, index); } public static inline function getUniform(program:GLProgram, location:GLUniformLocation):Dynamic { return context.getUniform(program, location); } #if (lime_opengl || lime_opengles) public static inline function getUniformf(program:GLProgram, location:GLUniformLocation):Float { return context.getUniformf(program, location); } #end #if (lime_opengl || lime_opengles) public static inline function getUniformfv(program:GLProgram, location:GLUniformLocation, params:DataPointer):Void { context.getUniformfv(program, location, params); } #end #if (lime_opengl || lime_opengles) public static inline function getUniformi(program:GLProgram, location:GLUniformLocation):Int { return context.getUniformi(program, location); } #end #if (lime_opengl || lime_opengles) public static inline function getUniformiv(program:GLProgram, location:GLUniformLocation, params:DataPointer):Void { context.getUniformiv(program, location, params); } #end #if (lime_opengl || lime_opengles) public static inline function getUniformui(program:GLProgram, location:GLUniformLocation):Int { return context.getUniformui(program, location); } #end #if (lime_opengl || lime_opengles) public static inline function getUniformuiv(program:GLProgram, location:GLUniformLocation, params:DataPointer):Void { context.getUniformuiv(program, location, params); } #end public static inline function getUniformBlockIndex(program:GLProgram, uniformBlockName:String):Int { return context.getUniformBlockIndex(program, uniformBlockName); } public static inline function getUniformIndices(program:GLProgram, uniformNames:Array):Array { return context.getUniformIndices(program, uniformNames); } public static inline function getUniformLocation(program:GLProgram, name:String):GLUniformLocation { return context.getUniformLocation(program, name); } public static inline function getVertexAttrib(index:Int, pname:Int):Dynamic { return context.getVertexAttrib(index, pname); } #if (lime_opengl || lime_opengles) public static inline function getVertexAttribf(index:Int, pname:Int):Float { return context.getVertexAttribf(index, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getVertexAttribfv(index:Int, pname:Int, params:DataPointer):Void { context.getVertexAttribfv(index, pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getVertexAttribi(index:Int, pname:Int):Int { return context.getVertexAttribi(index, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getVertexAttribIi(index:Int, pname:Int):Int { return context.getVertexAttribIi(index, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getVertexAttribIiv(index:Int, pname:Int, params:DataPointer):Void { context.getVertexAttribIiv(index, pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getVertexAttribIui(index:Int, pname:Int):Int { return context.getVertexAttribIui(index, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getVertexAttribIuiv(index:Int, pname:Int, params:DataPointer):Void { context.getVertexAttribIuiv(index, pname, params); } #end #if (lime_opengl || lime_opengles) public static inline function getVertexAttribiv(index:Int, pname:Int, params:DataPointer):Void { context.getVertexAttribiv(index, pname, params); } #end #if lime_webgl public static inline function getVertexAttribOffset(index:Int, pname:Int):DataPointer { return context.getVertexAttribOffset(index, pname); } #end #if (lime_opengl || lime_opengles) public static inline function getVertexAttribPointerv(index:Int, pname:Int):DataPointer { return context.getVertexAttribPointerv(index, pname); } #end public static inline function hint(target:Int, mode:Int):Void { context.hint(target, mode); } public static inline function invalidateFramebuffer(target:Int, attachments:Array):Void { context.invalidateFramebuffer(target, attachments); } public static inline function invalidateSubFramebuffer(target:Int, attachments:Array, x:Int, y:Int, width:Int, height:Int):Void { context.invalidateSubFramebuffer(target, attachments, x, y, width, height); } public static inline function isBuffer(buffer:GLBuffer):Bool { return context.isBuffer(buffer); } public static inline function isContextLost():Bool { return context.isContextLost(); } public static inline function isEnabled(cap:Int):Bool { return context.isEnabled(cap); } public static inline function isFramebuffer(framebuffer:GLFramebuffer):Bool { return context.isFramebuffer(framebuffer); } public static inline function isProgram(program:GLProgram):Bool { return context.isProgram(program); } public static inline function isQuery(query:GLQuery):Bool { return context.isQuery(query); } public static inline function isRenderbuffer(renderbuffer:GLRenderbuffer):Bool { return context.isRenderbuffer(renderbuffer); } public static inline function isSampler(sampler:GLSampler):Bool { return context.isSampler(sampler); } public static inline function isShader(shader:GLShader):Bool { return context.isShader(shader); } public static inline function isSync(sync:GLSync):Bool { return context.isSync(sync); } public static inline function isTexture(texture:GLTexture):Bool { return context.isTexture(texture); } public static inline function isTransformFeedback(transformFeedback:GLTransformFeedback):Bool { return context.isTransformFeedback(transformFeedback); } public static inline function isVertexArray(vertexArray:GLVertexArrayObject):Bool { return context.isVertexArray(vertexArray); } public static inline function lineWidth(width:Float):Void { context.lineWidth(width); } public static inline function linkProgram(program:GLProgram):Void { context.linkProgram(program); } #if (lime_opengl || lime_opengles) public static inline function mapBufferRange(target:Int, offset:DataPointer, length:Int, access:Int):DataPointer { return context.mapBufferRange(target, offset, length, access); } #end public static inline function pauseTransformFeedback():Void { context.pauseTransformFeedback(); } public static inline function pixelStorei(pname:Int, param:Int):Void { context.pixelStorei(pname, param); } public static inline function polygonOffset(factor:Float, units:Float):Void { context.polygonOffset(factor, units); } #if (lime_opengl || lime_opengles) public static inline function programBinary(program:GLProgram, binaryFormat:Int, binary:DataPointer, length:Int):Void { context.programBinary(program, binaryFormat, binary, length); } #end #if (lime_opengl || lime_opengles) public static inline function programParameteri(program:GLProgram, pname:Int, value:Int):Void { context.programParameteri(program, pname, value); } #end public static inline function readBuffer(src:Int):Void { context.readBuffer(src); } #if (lime_opengl || lime_opengles) public static inline function readPixels(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:BytePointer):Void { context.readPixels(x, y, width, height, format, type, pixels); } #end #if lime_webgl public static inline function readPixelsWEBGL(x:Int, y:Int, width:Int, height:Int, format:Int, type:Int, pixels:Dynamic, ?dstOffset:Int):Void { context.readPixels(x, y, width, height, format, type, pixels, dstOffset); } #end #if (lime_opengl || lime_opengles) public static inline function releaseShaderCompiler():Void { context.releaseShaderCompiler(); } #end public static inline function renderbufferStorage(target:Int, internalformat:Int, width:Int, height:Int):Void { context.renderbufferStorage(target, internalformat, width, height); } public static inline function renderbufferStorageMultisample(target:Int, samples:Int, internalformat:Int, width:Int, height:Int):Void { context.renderbufferStorageMultisample(target, samples, internalformat, width, height); } public static inline function resumeTransformFeedback():Void { context.resumeTransformFeedback(); } public static inline function sampleCoverage(value:Float, invert:Bool):Void { context.sampleCoverage(value, invert); } public static inline function samplerParameterf(sampler:GLSampler, pname:Int, param:Float):Void { context.samplerParameterf(sampler, pname, param); } public static inline function samplerParameteri(sampler:GLSampler, pname:Int, param:Int):Void { context.samplerParameteri(sampler, pname, param); } public static inline function scissor(x:Int, y:Int, width:Int, height:Int):Void { context.scissor(x, y, width, height); } #if (lime_opengl || lime_opengles) public static inline function shaderBinary(shaders:Array, binaryformat:Int, binary:DataPointer, length:Int):Void { context.shaderBinary(shaders, binaryformat, binary, length); } #end public static inline function shaderSource(shader:GLShader, source:String):Void { context.shaderSource(shader, source); } public static inline function stencilFunc(func:Int, ref:Int, mask:Int):Void { context.stencilFunc(func, ref, mask); } public static inline function stencilFuncSeparate(face:Int, func:Int, ref:Int, mask:Int):Void { context.stencilFuncSeparate(face, func, ref, mask); } public static inline function stencilMask(mask:Int):Void { context.stencilMask(mask); } public static inline function stencilMaskSeparate(face:Int, mask:Int):Void { context.stencilMaskSeparate(face, mask); } public static inline function stencilOp(fail:Int, zfail:Int, zpass:Int):Void { context.stencilOp(fail, zfail, zpass); } public static inline function stencilOpSeparate(face:Int, fail:Int, zfail:Int, zpass:Int):Void { context.stencilOpSeparate(face, fail, zfail, zpass); } #if (lime_opengl || lime_opengles) public static inline function texImage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Int, format:Int, type:Int, data:DataPointer):Void { context.texImage2D(target, level, internalformat, width, height, border, format, type, data); } #end #if lime_webgl public static inline function texImage2DWEBGL(target:Int, level:Int, internalformat:Int, width:Int, height:Int, border:Dynamic, ?format:Int, ?type:Int, ?srcData:Dynamic, ?srcOffset:Int):Void { context.texImage2D(target, level, internalformat, width, height, border, format, type, srcData, srcOffset); } #end #if (lime_opengl || lime_opengles) public static inline function texImage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, data:DataPointer):Void { context.texImage3D(target, level, internalformat, width, height, depth, border, format, type, data); } #end #if lime_webgl public static inline function texImage3DWEBGL(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, srcData:Dynamic, ?srcOffset:Int):Void { context.texImage3D(target, level, internalformat, width, height, depth, border, format, type, srcData, srcOffset); } #end public static inline function texStorage2D(target:Int, level:Int, internalformat:Int, width:Int, height:Int):Void { context.texStorage2D(target, level, internalformat, width, height); } public static inline function texStorage3D(target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int):Void { context.texStorage3D(target, level, internalformat, width, height, depth); } public static inline function texParameterf(target:Int, pname:Int, param:Float):Void { context.texParameterf(target, pname, param); } public static inline function texParameteri(target:Int, pname:Int, param:Int):Void { context.texParameteri(target, pname, param); } #if (lime_opengl || lime_opengles) public static inline function texSubImage2D(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Int, type:Int, pixels:ArrayBufferView):Void { context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); } #end #if lime_webgl public static inline function texSubImage2DWEBGL(target:Int, level:Int, xoffset:Int, yoffset:Int, width:Int, height:Int, format:Dynamic, ?type:Int, ?srcData:Dynamic, ?srcOffset:Int):Void { context.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, srcData, srcOffset); } #end #if (lime_opengl || lime_opengles) public static inline function texSubImage3D(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, data:DataPointer):Void { context.texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); } #end #if lime_webgl public static inline function texSubImage3DWEBGL(target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, source:Dynamic, ?srcOffset:Int):Void { context.texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, source, srcOffset); } #end public static inline function transformFeedbackVaryings(program:GLProgram, varyings:Array, bufferMode:Int):Void { context.transformFeedbackVaryings(program, varyings, bufferMode); } public static inline function uniform1f(location:GLUniformLocation, v0:Float):Void { context.uniform1f(location, v0); } #if (lime_opengl || lime_opengles) public static inline function uniform1fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform1fv(location, count, v); } #end #if lime_webgl public static inline function uniform1fvWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform1fv(location, data, srcOffset, srcLength); } #end public static inline function uniform1i(location:GLUniformLocation, v0:Int):Void { context.uniform1i(location, v0); } #if (lime_opengl || lime_opengles) public static inline function uniform1iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform1iv(location, count, v); } #end #if lime_webgl public static inline function uniform1ivWEBGL(location:GLUniformLocation, ?data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform1iv(location, data, srcOffset, srcLength); } #end public static inline function uniform1ui(location:GLUniformLocation, v0:Int):Void { context.uniform1ui(location, v0); } #if (lime_opengl || lime_opengles) public static inline function uniform1uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform1uiv(location, count, v); } #end #if lime_webgl public static inline function uniform1uivWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform1uiv(location, data, srcOffset, srcLength); } #end public static inline function uniform2f(location:GLUniformLocation, v0:Float, v1:Float):Void { context.uniform2f(location, v0, v1); } #if (lime_opengl || lime_opengles) public static inline function uniform2fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform2fv(location, count, v); } #end #if lime_webgl public static inline function uniform2fvWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform2fv(location, data, srcOffset, srcLength); } #end public static inline function uniform2i(location:GLUniformLocation, x:Int, y:Int):Void { context.uniform2i(location, x, y); } #if (lime_opengl || lime_opengles) public static inline function uniform2iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform2iv(location, count, v); } #end #if lime_webgl public static inline function uniform2ivWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform2iv(location, data, srcOffset, srcLength); } #end public static inline function uniform2ui(location:GLUniformLocation, x:Int, y:Int):Void { context.uniform2ui(location, x, y); } #if (lime_opengl || lime_opengles) public static inline function uniform2uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform2uiv(location, count, v); } #end #if lime_webgl public static inline function uniform2uivWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform2uiv(location, data, srcOffset, srcLength); } #end public static inline function uniform3f(location:GLUniformLocation, v0:Float, v1:Float, v2:Float):Void { context.uniform3f(location, v0, v1, v2); } #if (lime_opengl || lime_opengles) public static inline function uniform3fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform3fv(location, count, v); } #end #if lime_webgl public static inline function uniform3fvWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform3fv(location, data, srcOffset, srcLength); } #end public static inline function uniform3i(location:GLUniformLocation, v0:Int, v1:Int, v2:Int):Void { context.uniform3i(location, v0, v1, v2); } #if (lime_opengl || lime_opengles) public static inline function uniform3iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform3iv(location, count, v); } #end #if lime_webgl public static inline function uniform3ivWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform3iv(location, data, srcOffset, srcLength); } #end public static inline function uniform3ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int):Void { context.uniform3ui(location, v0, v1, v2); } #if (lime_opengl || lime_opengles) public static inline function uniform3uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform3uiv(location, count, v); } #end #if lime_webgl public static inline function uniform3uivWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform3uiv(location, data, srcOffset, srcLength); } #end public static inline function uniform4f(location:GLUniformLocation, v0:Float, v1:Float, v2:Float, v3:Float):Void { context.uniform4f(location, v0, v1, v2, v3); } #if (lime_opengl || lime_opengles) public static inline function uniform4fv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform4fv(location, count, v); } #end #if lime_webgl public static inline function uniform4fvWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform4fv(location, data, srcOffset, srcLength); } #end public static inline function uniform4i(location:GLUniformLocation, v0:Int, v1:Int, v2:Int, v3:Int):Void { context.uniform4i(location, v0, v1, v2, v3); } #if (lime_opengl || lime_opengles) public static inline function uniform4iv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform4iv(location, count, v); } #end #if lime_webgl public static inline function uniform4ivWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform4iv(location, data, srcOffset, srcLength); } #end public static inline function uniform4ui(location:GLUniformLocation, v0:Int, v1:Int, v2:Int, v3:Int):Void { context.uniform4ui(location, v0, v1, v2, v3); } #if (lime_opengl || lime_opengles) public static inline function uniform4uiv(location:GLUniformLocation, count:Int, v:DataPointer):Void { context.uniform4uiv(location, count, v); } #end #if lime_webgl public static inline function uniform4uivWEBGL(location:GLUniformLocation, data:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniform4uiv(location, data, srcOffset, srcLength); } #end public static inline function uniformBlockBinding(program:GLProgram, uniformBlockIndex:Int, uniformBlockBinding:Int):Void { context.uniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding); } #if (lime_opengl || lime_opengles) public static inline function uniformMatrix2fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { context.uniformMatrix2fv(location, count, transpose, v); } #end #if lime_webgl public static inline function uniformMatrix2fvWEBGL(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniformMatrix2fv(location, transpose, v, srcOffset, srcLength); } #end #if (lime_opengl || lime_opengles) public static inline function uniformMatrix2x3fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { context.uniformMatrix2x3fv(location, count, transpose, v); } #end #if lime_webgl public static inline function uniformMatrix2x3fvWEBGL(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniformMatrix2x3fv(location, transpose, v, srcOffset, srcLength); } #end #if (lime_opengl || lime_opengles) public static inline function uniformMatrix2x4fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { context.uniformMatrix2x4fv(location, count, transpose, v); } #end #if lime_webgl public static inline function uniformMatrix2x4fvWEBGL(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniformMatrix2x4fv(location, transpose, v, srcOffset, srcLength); } #end #if (lime_opengl || lime_opengles) public static inline function uniformMatrix3fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { context.uniformMatrix3fv(location, count, transpose, v); } #end #if lime_webgl public static inline function uniformMatrix3fvWEBGL(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniformMatrix3fv(location, transpose, v, srcOffset, srcLength); } #end #if (lime_opengl || lime_opengles) public static inline function uniformMatrix3x2fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { context.uniformMatrix3x2fv(location, count, transpose, v); } #end #if lime_webgl public static inline function uniformMatrix3x2fvWEBGL(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniformMatrix3x2fv(location, transpose, v, srcOffset, srcLength); } #end #if (lime_opengl || lime_opengles) public static inline function uniformMatrix3x4fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { context.uniformMatrix3x4fv(location, count, transpose, v); } #end #if lime_webgl public static inline function uniformMatrix3x4fvWEBGL(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniformMatrix3x4fv(location, transpose, v, srcOffset, srcLength); } #end #if (lime_opengl || lime_opengles) public static inline function uniformMatrix4fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { context.uniformMatrix4fv(location, count, transpose, v); } #end #if lime_webgl public static inline function uniformMatrix4fvWEBGL(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniformMatrix4fv(location, transpose, v, srcOffset, srcLength); } #end #if (lime_opengl || lime_opengles) public static inline function uniformMatrix4x2fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { context.uniformMatrix4x2fv(location, count, transpose, v); } #end #if lime_webgl public static inline function uniformMatrix4x2fvWEBGL(location:GLUniformLocation, transpose:Bool, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniformMatrix4x2fv(location, transpose, v, srcOffset, srcLength); } #end #if (lime_opengl || lime_opengles) public static inline function uniformMatrix4x3fv(location:GLUniformLocation, count:Int, transpose:Bool, v:DataPointer):Void { context.uniformMatrix4x3fv(location, count, transpose, v); } #end #if lime_webgl public static inline function uniformMatrix4x3fvWEBGL(location:GLUniformLocation, transpose:Dynamic, v:Dynamic, ?srcOffset:Int, ?srcLength:Int):Void { context.uniformMatrix4x3fv(location, transpose, v, srcOffset, srcLength); } #end #if (lime_opengl || lime_opengles) public static inline function unmapBuffer(target:Int):Bool { return context.unmapBuffer(target); } #end public static inline function useProgram(program:GLProgram):Void { context.useProgram(program); } public static inline function validateProgram(program:GLProgram):Void { context.validateProgram(program); } public static inline function vertexAttrib1f(index:Int, v0:Float):Void { context.vertexAttrib1f(index, v0); } public static inline function vertexAttrib1fv(index:Int, v:#if (!js || !html5 || doc_gen) DataPointer #else Dynamic #end):Void { #if !doc_gen context.vertexAttrib1fv(index, v); #end } #if lime_webgl public static inline function vertexAttrib1fvWEBGL(index:Int, v:Dynamic):Void { context.vertexAttrib1fv(index, v); } #end public static inline function vertexAttrib2f(index:Int, v0:Float, v1:Float):Void { context.vertexAttrib2f(index, v0, v1); } public static inline function vertexAttrib2fv(index:Int, v:#if (!js || !html5 || doc_gen) DataPointer #else Dynamic #end):Void { #if !doc_gen context.vertexAttrib2fv(index, v); #end } #if lime_webgl public static inline function vertexAttrib2fvWEBGL(index:Int, v:Dynamic):Void { context.vertexAttrib2fv(index, v); } #end public static inline function vertexAttrib3f(index:Int, v0:Float, v1:Float, v2:Float):Void { context.vertexAttrib3f(index, v0, v1, v2); } public static inline function vertexAttrib3fv(index:Int, v:#if (!js || !html5 || doc_gen) DataPointer #else Dynamic #end):Void { #if !doc_gen context.vertexAttrib3fv(index, v); #end } #if lime_webgl public static inline function vertexAttrib3fvWEBGL(index:Int, v:Dynamic):Void { context.vertexAttrib3fv(index, v); } #end public static inline function vertexAttrib4f(index:Int, v0:Float, v1:Float, v2:Float, v3:Float):Void { context.vertexAttrib4f(index, v0, v1, v2, v3); } public static inline function vertexAttrib4fv(index:Int, v:#if (!js || !html5 || doc_gen) DataPointer #else Dynamic #end):Void { #if !doc_gen context.vertexAttrib4fv(index, v); #end } #if lime_webgl public static inline function vertexAttrib4fvWEBGL(index:Int, v:Dynamic):Void { context.vertexAttrib4fv(index, v); } #end public static inline function vertexAttribDivisor(index:Int, divisor:Int):Void { context.vertexAttribDivisor(index, divisor); } public static inline function vertexAttribI4i(index:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void { context.vertexAttribI4i(index, v0, v1, v2, v3); } public static inline function vertexAttribI4iv(index:Int, v:#if (!js || !html5 || doc_gen) DataPointer #else Dynamic #end):Void { #if !doc_gen context.vertexAttribI4iv(index, v); #end } #if lime_webgl public static inline function vertexAttribI4ivWEBGL(index:Int, v:Dynamic):Void { context.vertexAttribI4iv(index, v); } #end public static inline function vertexAttribI4ui(index:Int, v0:Int, v1:Int, v2:Int, v3:Int):Void { context.vertexAttribI4ui(index, v0, v1, v2, v3); } public static inline function vertexAttribI4uiv(index:Int, v:#if (!js || !html5 || doc_gen) DataPointer #else Dynamic #end):Void { #if !doc_gen context.vertexAttribI4uiv(index, v); #end } #if lime_webgl public static inline function vertexAttribI4uivWEBGL(index:Int, v:Dynamic):Void { context.vertexAttribI4uiv(index, v); } #end public static inline function vertexAttribIPointer(index:Int, size:Int, type:Int, stride:Int, offset:DataPointer):Void { context.vertexAttribIPointer(index, size, type, stride, offset); } public static inline function vertexAttribPointer(index:Int, size:Int, type:Int, normalized:Bool, stride:Int, offset:DataPointer):Void { context.vertexAttribPointer(index, size, type, normalized, stride, offset); } public static inline function viewport(x:Int, y:Int, width:Int, height:Int):Void { context.viewport(x, y, width, height); } public static inline function waitSync(sync:GLSync, flags:Int, timeout:#if (!js || !html5 || doc_gen) Int64 #else Dynamic #end):Void { context.waitSync(sync, flags, timeout); } private static inline function __getObjectID(object:#if (!js || !html5 || doc_gen) GLObject #else Dynamic #end):Int { return (object == null) ? 0 : @:privateAccess object.id; } } #if (!js || !html5 || doc_gen) @:access(lime._internal.backend.native.NativeCFFI) #if hl @:keep #end @:dox(hide) @:noCompletion class GLObject { @:noCompletion private var id:Int; @:noCompletion private var ptr:#if (lime_cffi && (lime_opengl || lime_opengles) && !macro) CFFIPointer #else Dynamic #end; @:noCompletion private var refs:Array; @:noCompletion private function new(id:Int) { this.id = id; } public static function fromInt(type:GLObjectType, id:Int):GLObject { if (id == 0) return null; #if (lime_cffi && (lime_opengl || lime_opengles) && !macro) var object = NativeCFFI.lime_gl_object_from_id(id, type); if (object != null) { return object; } object = new GLObject(id); object.ptr = NativeCFFI.lime_gl_object_register(id, type, object); return object; #else return null; #end } } @:dox(hide) @:noCompletion #if (haxe_ver >= 4.0) enum #else @:enum #end abstract GLObjectType(Int) to Int { var UNKNOWN = 0; var PROGRAM = 1; var SHADER = 2; var BUFFER = 3; var TEXTURE = 4; var FRAMEBUFFER = 5; var RENDERBUFFER = 6; var VERTEX_ARRAY_OBJECT = 7; var QUERY = 8; var SAMPLER = 9; var SYNC = 10; var TRANSFORM_FEEDBACK = 11; } #end #end ================================================ FILE: src/lime/graphics/opengl/GLActiveInfo.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if (!lime_webgl || doc_gen) #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end typedef GLActiveInfo = { size:Int, type:Int, name:String } #else typedef GLActiveInfo = js.html.webgl.ActiveInfo; #end #end ================================================ FILE: src/lime/graphics/opengl/GLBuffer.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if ((lime_opengl || lime_opengles) && !doc_gen) import lime.graphics.opengl.GL; @:forward(id) abstract GLBuffer(GLObject) from GLObject to GLObject { @:from private static function fromInt(id:Int):GLBuffer { return GLObject.fromInt(BUFFER, id); } } #elseif (lime_webgl && !doc_gen) typedef GLBuffer = js.html.webgl.Buffer; #else typedef GLBuffer = Dynamic; #end #end ================================================ FILE: src/lime/graphics/opengl/GLContextAttributes.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if (!lime_webgl || doc_gen) #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end typedef GLContextAttributes = { alpha:Bool, depth:Bool, stencil:Bool, antialias:Bool, premultipliedAlpha:Bool, preserveDrawingBuffer:Bool } #else typedef GLContextAttributes = js.html.webgl.ContextAttributes; #end #end ================================================ FILE: src/lime/graphics/opengl/GLFramebuffer.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if ((lime_opengl || lime_opengles) && !doc_gen) import lime.graphics.opengl.GL; @:forward(id) abstract GLFramebuffer(GLObject) from GLObject to GLObject { @:from private static function fromInt(id:Int):GLFramebuffer { return GLObject.fromInt(FRAMEBUFFER, id); } } #elseif (lime_webgl && !doc_gen) typedef GLFramebuffer = js.html.webgl.Framebuffer; #else typedef GLFramebuffer = Dynamic; #end #end ================================================ FILE: src/lime/graphics/opengl/GLProgram.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if !doc_gen import lime.graphics.opengl.GL; import lime.graphics.opengl.GLShader; import lime.graphics.WebGLRenderContext; import lime.utils.Log; #if !lime_webgl @:forward(id, refs) abstract GLProgram(GLObject) from GLObject to GLObject { #else @:forward() abstract GLProgram(js.html.webgl.Program) from js.html.webgl.Program to js.html.webgl.Program { #end #if !lime_webgl @:from private static function fromInt(id:Int):GLProgram { return GLObject.fromInt(PROGRAM, id); } #end public static function fromSources(gl:WebGLRenderContext, vertexSource:String, fragmentSource:String):GLProgram { var vertexShader = GLShader.fromSource(gl, vertexSource, gl.VERTEX_SHADER); var fragmentShader = GLShader.fromSource(gl, fragmentSource, gl.FRAGMENT_SHADER); var program = gl.createProgram(); gl.attachShader(program, vertexShader); gl.attachShader(program, fragmentShader); gl.linkProgram(program); if (gl.getProgramParameter(program, GL.LINK_STATUS) == 0) { var message = "Unable to initialize the shader program"; message += "\n" + GL.getProgramInfoLog(program); Log.error(message); } return program; } } #else @:forward abstract GLProgram(Dynamic) from Dynamic to Dynamic { public static function fromSources(gl:Dynamic, vertexSource:String, fragmentSource:String):GLProgram { return null; } } #end #end ================================================ FILE: src/lime/graphics/opengl/GLQuery.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if ((lime_opengl || lime_opengles) && !doc_gen) import lime.graphics.opengl.GL; @:forward(id) abstract GLQuery(GLObject) from GLObject to GLObject { @:from private static function fromInt(id:Int):GLQuery { return GLObject.fromInt(QUERY, id); } } #elseif (lime_webgl && !doc_gen) @:native("WebGLQuery") extern class GLQuery {} #else typedef GLQuery = Dynamic; #end #end ================================================ FILE: src/lime/graphics/opengl/GLRenderbuffer.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if ((lime_opengl || lime_opengles) && !doc_gen) import lime.graphics.opengl.GL; @:forward(id) abstract GLRenderbuffer(GLObject) from GLObject to GLObject { @:from private static function fromInt(id:Int):GLRenderbuffer { return GLObject.fromInt(RENDERBUFFER, id); } } #elseif (lime_webgl && !doc_gen) typedef GLRenderbuffer = js.html.webgl.Renderbuffer; #else typedef GLRenderbuffer = Dynamic; #end #end ================================================ FILE: src/lime/graphics/opengl/GLSampler.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if ((lime_opengl || lime_opengles) && !doc_gen) import lime.graphics.opengl.GL; @:forward(id) abstract GLSampler(GLObject) from GLObject to GLObject { @:from private static function fromInt(id:Int):GLSampler { return GLObject.fromInt(SAMPLER, id); } } #elseif (lime_webgl && !doc_gen) @:native("WebGLSampler") extern class GLSampler {} #else typedef GLSampler = Dynamic; #end #end ================================================ FILE: src/lime/graphics/opengl/GLShader.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if !doc_gen import lime.graphics.opengl.GL; import lime.graphics.WebGLRenderContext; import lime.utils.Log; #if !lime_webgl @:forward(id) abstract GLShader(GLObject) from GLObject to GLObject { #else @:forward() abstract GLShader(js.html.webgl.Shader) from js.html.webgl.Shader to js.html.webgl.Shader { #end #if !lime_webgl @:from private static function fromInt(id:Int):GLShader { return GLObject.fromInt(SHADER, id); } #end public static function fromSource(gl:WebGLRenderContext, source:String, type:Int):GLShader { var shader = gl.createShader(type); gl.shaderSource(shader, source); gl.compileShader(shader); var shaderInfoLog = gl.getShaderInfoLog(shader); var compileStatus = gl.getShaderParameter(shader, gl.COMPILE_STATUS); if (shaderInfoLog != null || compileStatus == 0) { var message; if (compileStatus == 0) message = "Error "; else message = "Info "; if (type == gl.VERTEX_SHADER) message = "compiling vertex shader"; else if (type == gl.FRAGMENT_SHADER) message = "compiling fragment shader"; else message = "compiling unknown shader type"; message += "\n" + shaderInfoLog; if (compileStatus == 0) Log.error(message); else if (shaderInfoLog != null) Log.debug(message); } return shader; } } #else @:forward abstract GLShader(Dynamic) from Dynamic to Dynamic { public static function fromSources(gl:Dynamic, source:String, type:Int):GLShader { return null; } } #end #end ================================================ FILE: src/lime/graphics/opengl/GLShaderPrecisionFormat.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if (!lime_webgl || doc_gen) #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end typedef GLShaderPrecisionFormat = { rangeMin:Int, rangeMax:Int, precision:Int }; #else typedef GLShaderPrecisionFormat = js.html.webgl.ShaderPrecisionFormat; #end #end ================================================ FILE: src/lime/graphics/opengl/GLSync.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if ((lime_opengl || lime_opengles) && !doc_gen) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract GLSync(CFFIPointer) from CFFIPointer to CFFIPointer {} #elseif (lime_webgl && !doc_gen) @:native("WebGLSync") extern class GLSync {} #else typedef GLSync = Dynamic; #end #end ================================================ FILE: src/lime/graphics/opengl/GLTexture.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if ((lime_opengl || lime_opengles) && !doc_gen) import lime.graphics.opengl.GL; @:forward(id) abstract GLTexture(GLObject) from GLObject to GLObject { @:from private static function fromInt(id:Int):GLTexture { return GLObject.fromInt(TEXTURE, id); } } #elseif (lime_webgl && !doc_gen) typedef GLTexture = js.html.webgl.Texture; #else typedef GLTexture = Dynamic; #end #end ================================================ FILE: src/lime/graphics/opengl/GLTransformFeedback.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if ((lime_opengl || lime_opengles) && !doc_gen) import lime.graphics.opengl.GL; @:forward(id) abstract GLTransformFeedback(GLObject) from GLObject to GLObject { @:from private static function fromInt(id:Int):GLTransformFeedback { return GLObject.fromInt(TRANSFORM_FEEDBACK, id); } } #elseif (lime_webgl && !doc_gen) @:native("WebGLTransformFeedback") extern class GLTransformFeedback {} #else typedef GLTransformFeedback = Dynamic; #end #end ================================================ FILE: src/lime/graphics/opengl/GLUniformLocation.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if (!lime_webgl || doc_gen) typedef GLUniformLocation = Int; #else typedef GLUniformLocation = js.html.webgl.UniformLocation; #end #end ================================================ FILE: src/lime/graphics/opengl/GLVertexArrayObject.hx ================================================ package lime.graphics.opengl; #if (!lime_doc_gen || lime_opengl || lime_opengles || lime_webgl) #if ((lime_opengl || lime_opengles) && !doc_gen) import lime.graphics.opengl.GL; @:forward(id) abstract GLVertexArrayObject(GLObject) from GLObject to GLObject { @:from private static function fromInt(id:Int):GLVertexArrayObject { return GLObject.fromInt(VERTEX_ARRAY_OBJECT, id); } } #elseif (lime_webgl && !doc_gen) @:native("WebGLVertexArrayObject") extern class GLVertexArrayObject {} #else typedef GLVertexArrayObject = Dynamic; #end #end ================================================ FILE: src/lime/graphics/opengl/ext/AMD_compressed_3DC_texture.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class AMD_compressed_3DC_texture { public var _3DC_X_AMD = 0x87F9; public var _3DC_XY_AMD = 0x87FA; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/AMD_compressed_ATC_texture.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class AMD_compressed_ATC_texture { public var ATC_RGB_AMD = 0x8C92; public var ATC_RGBA_EXPLICIT_ALPHA_AMD = 0x8C93; public var ATC_RGBA_INTERPOLATED_ALPHA_AMD = 0x87EE; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/AMD_performance_monitor.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class AMD_performance_monitor { public var COUNTER_TYPE_AMD = 0x8BC0; public var COUNTER_RANGE_AMD = 0x8BC1; public var UNSIGNED_INT64_AMD = 0x8BC2; public var PERCENTAGE_AMD = 0x8BC3; public var PERFMON_RESULT_AVAILABLE_AMD = 0x8BC4; public var PERFMON_RESULT_SIZE_AMD = 0x8BC5; public var PERFMON_RESULT_AMD = 0x8BC6; @:noCompletion private function new() {} // public function getPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); // public function getPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); // public function getPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); // public function getPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); // public function getPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); // public function genPerfMonitorsAMD (GLsizei n, GLuint *monitors); // public function deletePerfMonitorsAMD (GLsizei n, GLuint *monitors); // public function selectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); // public function beginPerfMonitorAMD (GLuint monitor); // public function endPerfMonitorAMD (GLuint monitor); // public function getPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); } ================================================ FILE: src/lime/graphics/opengl/ext/AMD_program_binary_Z400.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class AMD_program_binary_Z400 { public var Z400_BINARY_AMD = 0x8740; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/ANGLE_framebuffer_blit.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class ANGLE_framebuffer_blit { public var READ_FRAMEBUFFER_ANGLE = 0x8CA8; public var DRAW_FRAMEBUFFER_ANGLE = 0x8CA9; public var DRAW_FRAMEBUFFER_BINDING_ANGLE = 0x8CA6; public var READ_FRAMEBUFFER_BINDING_ANGLE = 0x8CAA; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); } ================================================ FILE: src/lime/graphics/opengl/ext/ANGLE_framebuffer_multisample.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class ANGLE_framebuffer_multisample { public var RENDERBUFFER_SAMPLES_ANGLE = 0x8CAB; public var FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE = 0x8D56; public var MAX_SAMPLES_ANGLE = 0x8D57; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); } ================================================ FILE: src/lime/graphics/opengl/ext/ANGLE_instanced_arrays.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class ANGLE_instanced_arrays { public var VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x88FE; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); // GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); // GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); public function drawArraysInstancedANGLE(mode:Int, first:Int, count:Int, primcount:Int):Void {} public function drawElementsInstancedANGLE(mode:Int, count:Int, type:Int, offset:Int, primcount:Int):Void {} public function vertexAttribDivisorANGLE(index:Int, divisor:Int):Void {} } #else @:native("ANGLE_instanced_arrays") @:noCompletion extern class ANGLE_instanced_arrays { public var VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:Int; public function drawArraysInstancedANGLE(mode:Int, first:Int, count:Int, primcount:Int):Void; public function drawElementsInstancedANGLE(mode:Int, count:Int, type:Int, offset:Int, primcount:Int):Void; public function vertexAttribDivisorANGLE(index:Int, divisor:Int):Void; } #end ================================================ FILE: src/lime/graphics/opengl/ext/ANGLE_pack_reverse_row_order.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class ANGLE_pack_reverse_row_order { public var PACK_REVERSE_ROW_ORDER_ANGLE = 0x93A4; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/ANGLE_texture_compression_dxt3.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class ANGLE_texture_compression_dxt3 { public var COMPRESSED_RGBA_S3TC_DXT3_ANGLE = 0x83F2; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/ANGLE_texture_compression_dxt5.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class ANGLE_texture_compression_dxt5 { public var COMPRESSED_RGBA_S3TC_DXT5_ANGLE = 0x83F3; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/ANGLE_texture_usage.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class ANGLE_texture_usage { public var TEXTURE_USAGE_ANGLE = 0x93A2; public var FRAMEBUFFER_ATTACHMENT_ANGLE = 0x93A3; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/ANGLE_translated_shader_source.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class ANGLE_translated_shader_source { public var TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE = 0x93A0; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); } ================================================ FILE: src/lime/graphics/opengl/ext/APPLE_copy_texture_levels.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class APPLE_copy_texture_levels { @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); } ================================================ FILE: src/lime/graphics/opengl/ext/APPLE_framebuffer_multisample.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class APPLE_framebuffer_multisample { public var RENDERBUFFER_SAMPLES_APPLE = 0x8CAB; public var FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE = 0x8D56; public var MAX_SAMPLES_APPLE = 0x8D57; public var READ_FRAMEBUFFER_APPLE = 0x8CA8; public var DRAW_FRAMEBUFFER_APPLE = 0x8CA9; public var DRAW_FRAMEBUFFER_BINDING_APPLE = 0x8CA6; public var READ_FRAMEBUFFER_BINDING_APPLE = 0x8CAA; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum, GLsizei, GLenum, GLsizei, GLsizei); // GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); } ================================================ FILE: src/lime/graphics/opengl/ext/APPLE_rgb_422.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class APPLE_rgb_422 { public var RGB_422_APPLE = 0x8A1F; public var UNSIGNED_SHORT_8_8_APPLE = 0x85BA; public var UNSIGNED_SHORT_8_8_REV_APPLE = 0x85BB; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/APPLE_sync.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class APPLE_sync { public var SYNC_OBJECT_APPLE = 0x8A53; public var MAX_SERVER_WAIT_TIMEOUT_APPLE = 0x9111; public var OBJECT_TYPE_APPLE = 0x9112; public var SYNC_CONDITION_APPLE = 0x9113; public var SYNC_STATUS_APPLE = 0x9114; public var SYNC_FLAGS_APPLE = 0x9115; public var SYNC_FENCE_APPLE = 0x9116; public var SYNC_GPU_COMMANDS_COMPLETE_APPLE = 0x9117; public var UNSIGNALED_APPLE = 0x9118; public var SIGNALED_APPLE = 0x9119; public var ALREADY_SIGNALED_APPLE = 0x911A; public var TIMEOUT_EXPIRED_APPLE = 0x911B; public var CONDITION_SATISFIED_APPLE = 0x911C; public var WAIT_FAILED_APPLE = 0x911D; public var SYNC_FLUSH_COMMANDS_BIT_APPLE = 0x00000001; public var TIMEOUT_IGNORED_APPLE = 0xFFFFFFFF; // public var TIMEOUT_IGNORED_APPLE = 0xFFFFFFFFFFFFFFFFull; @:noCompletion private function new() {} // GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); // GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); // GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); // GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); // GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); // GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); // GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); } ================================================ FILE: src/lime/graphics/opengl/ext/APPLE_texture_format_BGRA8888.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class APPLE_texture_format_BGRA8888 { public var BGRA_EXT = 0x80E1; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/APPLE_texture_max_level.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class APPLE_texture_max_level { public var TEXTURE_MAX_LEVEL_APPLE = 0x813D; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/ARM_mali_program_binary.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class ARM_mali_program_binary { public var MALI_PROGRAM_BINARY_ARM = 0x8F61; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/ARM_mali_shader_binary.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class ARM_mali_shader_binary { public var MALI_SHADER_BINARY_ARM = 0x8F60; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/ARM_rgba8.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class ARM_rgba8 { @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/DMP_shader_binary.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class DMP_shader_binary { public var SHADER_BINARY_DMP = 0x9250; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_bgra.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_bgra { public var BGR_EXT = 0x80E0; public var BGRA_EXT = 0x80E1; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_blend_minmax.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class EXT_blend_minmax { public var MIN_EXT = 0x8007; public var MAX_EXT = 0x8008; @:noCompletion private function new() {} } #else @:native("ANGLE_instanced_arrays") @:noCompletion extern class EXT_blend_minmax { public var MIN_EXT:Int; public var MAX_EXT:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/EXT_color_buffer_float.hx ================================================ package lime.graphics.opengl.ext; #if (!js || !html5 || display) @:noCompletion class EXT_color_buffer_float { @:noCompletion private function new() {} } #else @:native("EXT_color_buffer_float") @:noCompletion extern class EXT_color_buffer_float {} #end ================================================ FILE: src/lime/graphics/opengl/ext/EXT_color_buffer_half_float.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class EXT_color_buffer_half_float { public var RGBA16F_EXT = 0x881A; public var RGB16F_EXT = 0x881B; #if (!js && !html5) public var RG16F_EXT = 0x822F; public var R16F_EXT = 0x822D; #end public var FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT = 0x8211; public var UNSIGNED_NORMALIZED_EXT = 0x8C17; @:noCompletion private function new() {} } #else @:native("EXT_color_buffer_half_float") @:noCompletion extern class EXT_color_buffer_half_float { public var RGBA16F_EXT:Int; public var RGB16F_EXT:Int; public var FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT:Int; public var UNSIGNED_NORMALIZED_EXT:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/EXT_debug_label.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_debug_label { public var PROGRAM_PIPELINE_OBJECT_EXT = 0x8A4F; public var PROGRAM_OBJECT_EXT = 0x8B40; public var SHADER_OBJECT_EXT = 0x8B48; public var BUFFER_OBJECT_EXT = 0x9151; public var QUERY_OBJECT_EXT = 0x9153; public var VERTEX_ARRAY_OBJECT_EXT = 0x9154; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); // GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_debug_marker.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class EXT_debug_marker { @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); // GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); // GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_discard_framebuffer.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_discard_framebuffer { public var COLOR_EXT = 0x1800; public var DEPTH_EXT = 0x1801; public var STENCIL_EXT = 0x1802; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_disjoint_timer_query.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("EXT_disjoint_timer_query") @:noCompletion extern class EXT_disjoint_timer_query { public var QUERY_COUNTER_BITS_EXT:Int; public var CURRENT_QUERY_EXT:Int; public var QUERY_RESULT_EXT:Int; public var QUERY_RESULT_AVAILABLE_EXT:Int; public var TIME_ELAPSED_EXT:Int; public var TIMESTAMP_EXT:Int; public var GPU_DISJOINT_EXT:Int; public function createQueryEXT():Dynamic; /*WebGLQuery*/ public function deleteQueryEXT(query:Dynamic /*WebGLQuery*/):Void; public function isQueryEXT(query:Dynamic /*WebGLQuery*/):Bool; public function beginQueryEXT(target:Int, query:Dynamic /*WebGLQuery*/):Void; public function endQueryEXT(target:Int):Void; public function queryCounterEXT(query:Dynamic /*WebGLQuery*/, target:Int):Void; public function getQueryEXT(target:Int, pname:Int):Dynamic; /*WebGLQuery or Int*/ public function getQueryObjectEXT(query:Dynamic /*WebGLQuery*/, pname:Int):Dynamic; } #end ================================================ FILE: src/lime/graphics/opengl/ext/EXT_frag_depth.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:native("EXT_frag_depth") @:noCompletion extern class EXT_frag_depth {} #end ================================================ FILE: src/lime/graphics/opengl/ext/EXT_map_buffer_range.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_map_buffer_range { public var MAP_READ_BIT_EXT = 0x0001; public var MAP_WRITE_BIT_EXT = 0x0002; public var MAP_INVALIDATE_RANGE_BIT_EXT = 0x0004; public var MAP_INVALIDATE_BUFFER_BIT_EXT = 0x0008; public var MAP_FLUSH_EXPLICIT_BIT_EXT = 0x0010; public var MAP_UNSYNCHRONIZED_BIT_EXT = 0x0020; @:noCompletion private function new() {} // GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); // GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_multi_draw_arrays.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class EXT_multi_draw_arrays { @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); // GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_multisampled_render_to_texture.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_multisampled_render_to_texture { public var FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT = 0x8D6C; public var RENDERBUFFER_SAMPLES_EXT = 0x8CAB; public var FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT = 0x8D56; public var MAX_SAMPLES_EXT = 0x8D57; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei); // GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_multiview_draw_buffers.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_multiview_draw_buffers { public var COLOR_ATTACHMENT_EXT = 0x90F0; public var MULTIVIEW_EXT = 0x90F1; public var DRAW_BUFFER_EXT = 0x0C01; public var READ_BUFFER_EXT = 0x0C02; public var MAX_MULTIVIEW_BUFFERS_EXT = 0x90F2; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); // GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); // GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_occlusion_query_boolean.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_occlusion_query_boolean { public var ANY_SAMPLES_PASSED_EXT = 0x8C2F; public var ANY_SAMPLES_PASSED_CONSERVATIVE_EXT = 0x8D6A; public var CURRENT_QUERY_EXT = 0x8865; public var QUERY_RESULT_EXT = 0x8866; public var QUERY_RESULT_AVAILABLE_EXT = 0x8867; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); // GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); // GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); // GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); // GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); // GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); // GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_packed_depth_stencil.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_packed_depth_stencil { public var DEPTH_STENCIL_EXT = 0x84F9; public var UNSIGNED_INT_24_8_EXT = 0x84FA; public var DEPTH24_STENCIL8_EXT = 0x88F0; public var TEXTURE_STENCIL_SIZE_EXT = 0x88F1; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_read_format_bgra.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_read_format_bgra { public var BGRA_EXT = 0x80E1; public var UNSIGNED_SHORT_4_4_4_4_REV_EXT = 0x8365; public var UNSIGNED_SHORT_1_5_5_5_REV_EXT = 0x8366; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_robustness.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_robustness { public var GUILTY_CONTEXT_RESET_EXT = 0x8253; public var INNOCENT_CONTEXT_RESET_EXT = 0x8254; public var UNKNOWN_CONTEXT_RESET_EXT = 0x8255; public var CONTEXT_ROBUST_ACCESS_EXT = 0x90F3; public var RESET_NOTIFICATION_STRATEGY_EXT = 0x8256; public var LOSE_CONTEXT_ON_RESET_EXT = 0x8252; public var NO_RESET_NOTIFICATION_EXT = 0x8261; @:noCompletion private function new() {} // GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); // GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); // GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, float *params); // GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_sRGB.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class EXT_sRGB { public var SRGB_EXT = 0x8C40; public var SRGB_ALPHA_EXT = 0x8C42; public var SRGB8_ALPHA8_EXT = 0x8C43; public var FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT = 0x8210; @:noCompletion private function new() {} } #else @:native("EXT_sRGB") @:noCompletion extern class EXT_sRGB { public var SRGB_EXT:Int; public var SRGB_ALPHA_EXT:Int; public var SRGB8_ALPHA8_EXT:Int; public var FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/EXT_separate_shader_objects.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_separate_shader_objects { public var VERTEX_SHADER_BIT_EXT = 0x00000001; public var FRAGMENT_SHADER_BIT_EXT = 0x00000002; public var ALL_SHADER_BITS_EXT = 0xFFFFFFFF; public var PROGRAM_SEPARABLE_EXT = 0x8258; public var ACTIVE_PROGRAM_EXT = 0x8259; public var PROGRAM_PIPELINE_BINDING_EXT = 0x825A; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); // GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); // GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); // GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); // GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); // GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); // GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); // GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); // GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); // GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); // GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); // GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); // GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); // GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); // GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); // GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); // GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); // GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); // GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); // GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); // GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); // GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); // GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); // GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); // GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); // GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); // GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); // GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); // GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); // GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_shader_framebuffer_fetch.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_shader_framebuffer_fetch { public var FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT = 0x8A52; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_shader_texture_lod.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class EXT_shader_texture_lod { @:noCompletion private function new() {} } #else @:native("EXT_shader_texture_lod") @:noCompletion extern class EXT_shader_texture_lod {} #end ================================================ FILE: src/lime/graphics/opengl/ext/EXT_shadow_samplers.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_shadow_samplers { public var TEXTURE_COMPARE_MODE_EXT = 0x884C; public var TEXTURE_COMPARE_FUNC_EXT = 0x884D; public var COMPARE_REF_TO_TEXTURE_EXT = 0x884E; public var SAMPLER_2D_SHADOW_EXT = 0x8B62; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_texture_compression_dxt1.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_texture_compression_dxt1 { public var COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0; public var COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_texture_compression_s3tc.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_texture_compression_s3tc { public var COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0; public var COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1; public var COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2; public var COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_texture_filter_anisotropic.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class EXT_texture_filter_anisotropic { public var TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE; public var MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF; @:noCompletion private function new() {} } #else @:native("EXT_texture_filter_anisotropic") @:noCompletion extern class EXT_texture_filter_anisotropic { public var TEXTURE_MAX_ANISOTROPY_EXT:Int; public var MAX_TEXTURE_MAX_ANISOTROPY_EXT:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/EXT_texture_format_BGRA8888.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_texture_format_BGRA8888 { public var BGRA_EXT = 0x80E1; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_texture_rg.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_texture_rg { public var RED_EXT = 0x1903; public var RG_EXT = 0x8227; public var R8_EXT = 0x8229; public var RG8_EXT = 0x822B; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_texture_storage.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_texture_storage { public var TEXTURE_IMMUTABLE_FORMAT_EXT = 0x912F; public var ALPHA8_EXT = 0x803C; public var LUMINANCE8_EXT = 0x8040; public var LUMINANCE8_ALPHA8_EXT = 0x8045; public var RGBA32F_EXT = 0x8814; public var RGB32F_EXT = 0x8815; public var ALPHA32F_EXT = 0x8816; public var LUMINANCE32F_EXT = 0x8818; public var LUMINANCE_ALPHA32F_EXT = 0x8819; public var RGBA16F_EXT = 0x881A; public var RGB16F_EXT = 0x881B; public var ALPHA16F_EXT = 0x881C; public var LUMINANCE16F_EXT = 0x881E; public var LUMINANCE_ALPHA16F_EXT = 0x881F; public var RGB10_A2_EXT = 0x8059; public var RGB10_EXT = 0x8052; public var BGRA8_EXT = 0x93A1; public var R8_EXT = 0x8229; public var RG8_EXT = 0x822B; public var R32F_EXT = 0x822E; public var RG32F_EXT = 0x8230; public var R16F_EXT = 0x822D; public var RG16F_EXT = 0x822F; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); // GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); // GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); // GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); // GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); // GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_texture_type_2_10_10_10_REV.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_texture_type_2_10_10_10_REV { public var UNSIGNED_INT_2_10_10_10_REV_EXT = 0x8368; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/EXT_unpack_subimage.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class EXT_unpack_subimage { public var UNPACK_ROW_LENGTH = 0x0CF2; public var UNPACK_SKIP_ROWS = 0x0CF3; public var UNPACK_SKIP_PIXELS = 0x0CF4; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/FJ_shader_binary_GCCSO.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class FJ_shader_binary_GCCSO { public var GCCSO_SHADER_BINARY_FJ = 0x9260; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/IMG_multisampled_render_to_texture.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class IMG_multisampled_render_to_texture { public var RENDERBUFFER_SAMPLES_IMG = 0x9133; public var FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG = 0x9134; public var MAX_SAMPLES_IMG = 0x9135; public var TEXTURE_SAMPLES_IMG = 0x9136; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum, GLsizei, GLenum, GLsizei, GLsizei); // GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); } ================================================ FILE: src/lime/graphics/opengl/ext/IMG_program_binary.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class IMG_program_binary { public var SGX_PROGRAM_BINARY_IMG = 0x9130; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/IMG_read_format.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class IMG_read_format { public var BGRA_IMG = 0x80E1; public var UNSIGNED_SHORT_4_4_4_4_REV_IMG = 0x8365; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/IMG_shader_binary.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class IMG_shader_binary { public var SGX_BINARY_IMG = 0x8C0A; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/IMG_texture_compression_pvrtc.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class IMG_texture_compression_pvrtc { public var COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00; public var COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01; public var COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02; public var COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/KHR_debug.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class KHR_debug { public var DEBUG_OUTPUT_SYNCHRONOUS = 0x8242; public var DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 0x8243; public var DEBUG_CALLBACK_FUNCTION = 0x8244; public var DEBUG_CALLBACK_USER_PARAM = 0x8245; public var DEBUG_SOURCE_API = 0x8246; public var DEBUG_SOURCE_WINDOW_SYSTEM = 0x8247; public var DEBUG_SOURCE_SHADER_COMPILER = 0x8248; public var DEBUG_SOURCE_THIRD_PARTY = 0x8249; public var DEBUG_SOURCE_APPLICATION = 0x824A; public var DEBUG_SOURCE_OTHER = 0x824B; public var DEBUG_TYPE_ERROR = 0x824C; public var DEBUG_TYPE_DEPRECATED_BEHAVIOR = 0x824D; public var DEBUG_TYPE_UNDEFINED_BEHAVIOR = 0x824E; public var DEBUG_TYPE_PORTABILITY = 0x824F; public var DEBUG_TYPE_PERFORMANCE = 0x8250; public var DEBUG_TYPE_OTHER = 0x8251; public var DEBUG_TYPE_MARKER = 0x8268; public var DEBUG_TYPE_PUSH_GROUP = 0x8269; public var DEBUG_TYPE_POP_GROUP = 0x826A; public var DEBUG_SEVERITY_NOTIFICATION = 0x826B; public var MAX_DEBUG_GROUP_STACK_DEPTH = 0x826C; public var DEBUG_GROUP_STACK_DEPTH = 0x826D; public var BUFFER = 0x82E0; public var SHADER = 0x82E1; public var PROGRAM = 0x82E2; public var QUERY = 0x82E3; public var SAMPLER = 0x82E6; public var MAX_LABEL_LENGTH = 0x82E8; public var MAX_DEBUG_MESSAGE_LENGTH = 0x9143; public var MAX_DEBUG_LOGGED_MESSAGES = 0x9144; public var DEBUG_LOGGED_MESSAGES = 0x9145; public var DEBUG_SEVERITY_HIGH = 0x9146; public var DEBUG_SEVERITY_MEDIUM = 0x9147; public var DEBUG_SEVERITY_LOW = 0x9148; public var DEBUG_OUTPUT = 0x92E0; public var CONTEXT_FLAG_DEBUG_BIT = 0x00000002; public var STACK_OVERFLOW = 0x0503; public var STACK_UNDERFLOW = 0x0504; @:noCompletion private function new() {} // public function debugMessageControl (source:Int, type:Int, severity:Int, count:Int, ids:Array, enabled:Bool):Void {} // public function debugMessageInsert (source:Int, type:Int, id:Int, severity:Int, message:String):Void {} // public function debugMessageCallback (callback:Dynamic, userParam:Dynamic):Void; // public function getDebugMessageLog (count:Int, sources:Array, types:Array, ids:Array, severities:Array, lengths:Array):String {} // public function pushDebugGroup (source:Int, id:Int, message:String):Void {} // public function popDebugGroup ():Void {} // public function objectLabel (identifier:Int, name:Int, label:String):Void {} // public function getObjectLabel (identifier:Int, name:Int):String {} // public function objectPtrLabel (ptr:Dynamic, label:String):Void {} // public function getObjectPtrLabel (ptr:Dynamic):String {} // public function getPointerv (pname:Int, params:Array):Void {} } ================================================ FILE: src/lime/graphics/opengl/ext/KHR_texture_compression_astc_ldr.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class KHR_texture_compression_astc_ldr { public var COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0; public var COMPRESSED_RGBA_ASTC_5x4_KHR = 0x93B1; public var COMPRESSED_RGBA_ASTC_5x5_KHR = 0x93B2; public var COMPRESSED_RGBA_ASTC_6x5_KHR = 0x93B3; public var COMPRESSED_RGBA_ASTC_6x6_KHR = 0x93B4; public var COMPRESSED_RGBA_ASTC_8x5_KHR = 0x93B5; public var COMPRESSED_RGBA_ASTC_8x6_KHR = 0x93B6; public var COMPRESSED_RGBA_ASTC_8x8_KHR = 0x93B7; public var COMPRESSED_RGBA_ASTC_10x5_KHR = 0x93B8; public var COMPRESSED_RGBA_ASTC_10x6_KHR = 0x93B9; public var COMPRESSED_RGBA_ASTC_10x8_KHR = 0x93BA; public var COMPRESSED_RGBA_ASTC_10x10_KHR = 0x93BB; public var COMPRESSED_RGBA_ASTC_12x10_KHR = 0x93BC; public var COMPRESSED_RGBA_ASTC_12x12_KHR = 0x93BD; public var COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x93D0; public var COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 0x93D1; public var COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 0x93D2; public var COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 0x93D3; public var COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 0x93D4; public var COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 0x93D5; public var COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 0x93D6; public var COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 0x93D7; public var COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 0x93D8; public var COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 0x93D9; public var COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 0x93DA; public var COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 0x93DB; public var COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 0x93DC; public var COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 0x93DD; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/NVX_gpu_memory_info.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class NVX_gpu_memory_info { public var GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX = 0x9047; public var GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX = 0x9048; public var GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX = 0x9049; public var GPU_MEMORY_INFO_EVICTION_COUNT_NVX = 0x904A; public var GPU_MEMORY_INFO_EVICTED_MEMORY_NVX = 0x904B; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/NV_coverage_sample.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class NV_coverage_sample { public var COVERAGE_COMPONENT_NV = 0x8ED0; public var COVERAGE_COMPONENT4_NV = 0x8ED1; public var COVERAGE_ATTACHMENT_NV = 0x8ED2; public var COVERAGE_BUFFERS_NV = 0x8ED3; public var COVERAGE_SAMPLES_NV = 0x8ED4; public var COVERAGE_ALL_FRAGMENTS_NV = 0x8ED5; public var COVERAGE_EDGE_FRAGMENTS_NV = 0x8ED6; public var COVERAGE_AUTOMATIC_NV = 0x8ED7; public var COVERAGE_BUFFER_BIT_NV = 0x8000; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); // GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); } ================================================ FILE: src/lime/graphics/opengl/ext/NV_depth_nonlinear.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class NV_depth_nonlinear { public var DEPTH_COMPONENT16_NONLINEAR_NV = 0x8E2C; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/NV_draw_buffers.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class NV_draw_buffers { public var MAX_DRAW_BUFFERS_NV = 0x8824; public var DRAW_BUFFER0_NV = 0x8825; public var DRAW_BUFFER1_NV = 0x8826; public var DRAW_BUFFER2_NV = 0x8827; public var DRAW_BUFFER3_NV = 0x8828; public var DRAW_BUFFER4_NV = 0x8829; public var DRAW_BUFFER5_NV = 0x882A; public var DRAW_BUFFER6_NV = 0x882B; public var DRAW_BUFFER7_NV = 0x882C; public var DRAW_BUFFER8_NV = 0x882D; public var DRAW_BUFFER9_NV = 0x882E; public var DRAW_BUFFER10_NV = 0x882F; public var DRAW_BUFFER11_NV = 0x8830; public var DRAW_BUFFER12_NV = 0x8831; public var DRAW_BUFFER13_NV = 0x8832; public var DRAW_BUFFER14_NV = 0x8833; public var DRAW_BUFFER15_NV = 0x8834; public var COLOR_ATTACHMENT0_NV = 0x8CE0; public var COLOR_ATTACHMENT1_NV = 0x8CE1; public var COLOR_ATTACHMENT2_NV = 0x8CE2; public var COLOR_ATTACHMENT3_NV = 0x8CE3; public var COLOR_ATTACHMENT4_NV = 0x8CE4; public var COLOR_ATTACHMENT5_NV = 0x8CE5; public var COLOR_ATTACHMENT6_NV = 0x8CE6; public var COLOR_ATTACHMENT7_NV = 0x8CE7; public var COLOR_ATTACHMENT8_NV = 0x8CE8; public var COLOR_ATTACHMENT9_NV = 0x8CE9; public var COLOR_ATTACHMENT10_NV = 0x8CEA; public var COLOR_ATTACHMENT11_NV = 0x8CEB; public var COLOR_ATTACHMENT12_NV = 0x8CEC; public var COLOR_ATTACHMENT13_NV = 0x8CED; public var COLOR_ATTACHMENT14_NV = 0x8CEE; public var COLOR_ATTACHMENT15_NV = 0x8CEF; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); } ================================================ FILE: src/lime/graphics/opengl/ext/NV_fbo_color_attachments.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class NV_fbo_color_attachments { public var MAX_COLOR_ATTACHMENTS_NV = 0x8CDF; public var COLOR_ATTACHMENT0_NV = 0x8CE0; public var COLOR_ATTACHMENT1_NV = 0x8CE1; public var COLOR_ATTACHMENT2_NV = 0x8CE2; public var COLOR_ATTACHMENT3_NV = 0x8CE3; public var COLOR_ATTACHMENT4_NV = 0x8CE4; public var COLOR_ATTACHMENT5_NV = 0x8CE5; public var COLOR_ATTACHMENT6_NV = 0x8CE6; public var COLOR_ATTACHMENT7_NV = 0x8CE7; public var COLOR_ATTACHMENT8_NV = 0x8CE8; public var COLOR_ATTACHMENT9_NV = 0x8CE9; public var COLOR_ATTACHMENT10_NV = 0x8CEA; public var COLOR_ATTACHMENT11_NV = 0x8CEB; public var COLOR_ATTACHMENT12_NV = 0x8CEC; public var COLOR_ATTACHMENT13_NV = 0x8CED; public var COLOR_ATTACHMENT14_NV = 0x8CEE; public var COLOR_ATTACHMENT15_NV = 0x8CEF; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/NV_fence.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class NV_fence { public var ALL_COMPLETED_NV = 0x84F2; public var FENCE_STATUS_NV = 0x84F3; public var FENCE_CONDITION_NV = 0x84F4; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); // GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei, GLuint *); // GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint); // GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint); // GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); // GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint); // GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint, GLenum); } ================================================ FILE: src/lime/graphics/opengl/ext/NV_read_buffer.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class NV_read_buffer { public var READ_BUFFER_NV = 0x0C02; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); } ================================================ FILE: src/lime/graphics/opengl/ext/NV_read_buffer_front.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class NV_read_buffer_front { @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/NV_read_depth.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class NV_read_depth { @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/NV_read_depth_stencil.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class NV_read_depth_stencil { @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/NV_read_stencil.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class NV_read_stencil { @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/NV_texture_compression_s3tc_update.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class NV_texture_compression_s3tc_update { @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/NV_texture_npot_2D_mipmap.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class NV_texture_npot_2D_mipmap { @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_EGL_image.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class OES_EGL_image { @:noCompletion private function new() {} // public function eglImageTargetTexture2DOES (target:Int, image:BytesPointer):Void {} // public function eglImageTargetRenderbufferStorageOES (target:Int, image:BytesPointer):Void {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_EGL_image_external.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_EGL_image_external { public var TEXTURE_EXTERNAL_OES = 0x8D65; public var SAMPLER_EXTERNAL_OES = 0x8D66; public var TEXTURE_BINDING_EXTERNAL_OES = 0x8D67; public var REQUIRED_TEXTURE_IMAGE_UNITS_OES = 0x8D68; @:noCompletion private function new() {} // public function eglImageTargetTexture2DOES (target:Int, image:BytesPointer):Void {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_compressed_ETC1_RGB8_texture.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_compressed_ETC1_RGB8_texture { public var ETC1_RGB8_OES = 0x8D64; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_compressed_paletted_texture.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_compressed_paletted_texture { public var PALETTE4_RGB8_OES = 0x8B90; public var PALETTE4_RGBA8_OES = 0x8B91; public var PALETTE4_R5_G6_B5_OES = 0x8B92; public var PALETTE4_RGBA4_OES = 0x8B93; public var PALETTE4_RGB5_A1_OES = 0x8B94; public var PALETTE8_RGB8_OES = 0x8B95; public var PALETTE8_RGBA8_OES = 0x8B96; public var PALETTE8_R5_G6_B5_OES = 0x8B97; public var PALETTE8_RGBA4_OES = 0x8B98; public var PALETTE8_RGB5_A1_OES = 0x8B99; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_depth24.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_depth24 { public var DEPTH_COMPONENT24_OES = 0x81A6; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_depth32.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_depth32 { public var DEPTH_COMPONENT32_OES = 0x81A7; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_depth_texture.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class OES_depth_texture { @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_element_index_uint.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class OES_element_index_uint { public var UNSIGNED_INT = 0x1405; @:noCompletion private function new() {} } #else @:native("OES_element_index_uint") @:noCompletion extern class OES_element_index_uint {} #end ================================================ FILE: src/lime/graphics/opengl/ext/OES_get_program_binary.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_get_program_binary { public var PROGRAM_BINARY_LENGTH_OES = 0x8741; public var NUM_PROGRAM_BINARY_FORMATS_OES = 0x87FE; public var PROGRAM_BINARY_FORMATS_OES = 0x87FF; @:noCompletion private function new() {} // public function getProgramBinaryOES (program:GLProgram, bufSize:Int, length:Int, binaryFormat:Int, binary:BytesPointer):Void {} // public function programBinaryOES (program:GLProgram, binaryFormat:Int, binary:BytesPointer, length:Int):Void {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_mapbuffer.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_mapbuffer { public var WRITE_ONLY_OES = 0x88B9; public var BUFFER_ACCESS_OES = 0x88BB; public var BUFFER_MAPPED_OES = 0x88BC; public var BUFFER_MAP_POINTER_OES = 0x88BD; @:noCompletion private function new() {} // public function mapBufferOES (target:Int, access:Int):Dynamic {} // public function unmapBufferOES (target:Int):Bool {} // public function getBufferPointervOES (target:Int, pname:Int):Dynamic {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_packed_depth_stencil.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_packed_depth_stencil { public var DEPTH_STENCIL_OES = 0x84F9; public var UNSIGNED_INT_24_8_OES = 0x84FA; public var DEPTH24_STENCIL8_OES = 0x88F0; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_required_internalformat.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_required_internalformat { public var ALPHA8_OES = 0x803C; public var DEPTH_COMPONENT16_OES = 0x81A5; public var DEPTH_COMPONENT24_OES = 0x81A6; public var DEPTH24_STENCIL8_OES = 0x88F0; public var DEPTH_COMPONENT32_OES = 0x81A7; public var LUMINANCE4_ALPHA4_OES = 0x8043; public var LUMINANCE8_ALPHA8_OES = 0x8045; public var LUMINANCE8_OES = 0x8040; public var RGBA4_OES = 0x8056; public var RGB5_A1_OES = 0x8057; public var RGB565_OES = 0x8D62; public var RGB8_OES = 0x8051; public var RGBA8_OES = 0x8058; public var RGB10_EXT = 0x8052; public var RGB10_A2_EXT = 0x8059; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_rgb8_rgba8.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_rgb8_rgba8 { public var RGB8_OES = 0x8051; public var RGBA8_OES = 0x8058; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_standard_derivatives.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class OES_standard_derivatives { public var FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B; @:noCompletion private function new() {} } #else @:native("OES_standard_derivatives") @:noCompletion extern class OES_standard_derivatives { public var FRAGMENT_SHADER_DERIVATIVE_HINT_OES:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/OES_stencil1.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_stencil1 { public var STENCIL_INDEX1_OES = 0x8D46; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_stencil4.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_stencil4 { public var STENCIL_INDEX4_OES = 0x8D47; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_surfaceless_context.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_surfaceless_context { public var FRAMEBUFFER_UNDEFINED_OES = 0x8219; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_texture_3D.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_texture_3D { public var TEXTURE_WRAP_R_OES = 0x8072; public var TEXTURE_3D_OES = 0x806F; public var TEXTURE_BINDING_3D_OES = 0x806A; public var MAX_3D_TEXTURE_SIZE_OES = 0x8073; public var SAMPLER_3D_OES = 0x8B5F; public var FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES = 0x8CD4; @:noCompletion private function new() {} // public function texImage3DOES (target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, format:Int, type:Int, pixels:BytesPointer):Void {} // public function texSubImage3DOES (target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, type:Int, pixels:BytesPointer):Void {} // public function copyTexSubImage3DOES (target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, x:Int, y:Int, width:Int, height:Int):Void {} // public function compressedTexImage3DOES (target:Int, level:Int, internalformat:Int, width:Int, height:Int, depth:Int, border:Int, imageSize:Int, data:BytesPointer):Void {} // public function compressedTexSubImage3DOES (target:Int, level:Int, xoffset:Int, yoffset:Int, zoffset:Int, width:Int, height:Int, depth:Int, format:Int, imageSize:Int, data:BytesPointer):Void {} // public function framebufferTexture3DOES (target:Int, attachment:Int, textarget:Int, texture:Int, level:Int, zoffset:Int):Void {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_texture_float.hx ================================================ package lime.graphics.opengl.ext; #if (!js || !html5 || display) @:noCompletion class OES_texture_float { @:noCompletion private function new() {} } #else @:native("OES_texture_float") @:noCompletion extern class OES_texture_float {} #end ================================================ FILE: src/lime/graphics/opengl/ext/OES_texture_float_linear.hx ================================================ package lime.graphics.opengl.ext; #if (!js || !html5 || display) @:noCompletion class OES_texture_float_linear { @:noCompletion private function new() {} } #else @:native("OES_texture_float_linear") @:noCompletion extern class OES_texture_float_linear {} #end ================================================ FILE: src/lime/graphics/opengl/ext/OES_texture_half_float.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class OES_texture_half_float { public var HALF_FLOAT_OES = 0x8D61; @:noCompletion private function new() {} } #else @:native("OES_texture_half_float") @:noCompletion extern class OES_texture_half_float { public var HALF_FLOAT_OES:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/OES_texture_half_float_linear.hx ================================================ package lime.graphics.opengl.ext; #if (!js || !html5 || display) @:noCompletion class OES_texture_half_float_linear { @:noCompletion private function new() {} } #else @:native("OES_texture_half_float_linear") @:noCompletion extern class OES_texture_half_float_linear {} #end ================================================ FILE: src/lime/graphics/opengl/ext/OES_texture_npot.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class OES_texture_npot { @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_vertex_array_object.hx ================================================ package lime.graphics.opengl.ext; @:keep #if (!js || !html5 || display) @:noCompletion class OES_vertex_array_object { public var VERTEX_ARRAY_BINDING_OES = 0x85B5; @:noCompletion private function new() {} public function createVertexArrayOES():Dynamic { return null; } /*WebGLVertexArrayObject*/ public function deleteVertexArrayOES(arrayObject:Dynamic /*WebGLVertexArrayObject*/):Void {} public function isVertexArrayOES(arrayObject:Dynamic /*WebGLVertexArrayObject*/):Bool { return false; } public function bindVertexArrayOES(arrayObject:Dynamic /*WebGLVertexArrayObject*/):Void {} // public function bindVertexArrayOES (array:Int):Void {} // public function deleteVertexArraysOES (n:Int, arrays:Array):Void {} // public function genVertexArraysOES (n:Int, arrays:Array):Void {} // public function isVertexArrayOES (array:Int):Bool; } #else @:native("OES_vertex_array_object") @:noCompletion extern class OES_vertex_array_object { public var VERTEX_ARRAY_BINDING_OES:Int; public function createVertexArrayOES():Dynamic; /*WebGLVertexArrayObject*/ public function deleteVertexArrayOES(arrayObject:Dynamic /*WebGLVertexArrayObject*/):Void; public function isVertexArrayOES(arrayObject:Dynamic /*WebGLVertexArrayObject*/):Bool; public function bindVertexArrayOES(arrayObject:Dynamic /*WebGLVertexArrayObject*/):Void; } #end ================================================ FILE: src/lime/graphics/opengl/ext/OES_vertex_half_float.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_vertex_half_float { public var HALF_FLOAT_OES = 0x8D61; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/OES_vertex_type_10_10_10_2.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class OES_vertex_type_10_10_10_2 { public var UNSIGNED_INT_10_10_10_2_OES = 0x8DF6; public var INT_10_10_10_2_OES = 0x8DF7; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/QCOM_alpha_test.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class QCOM_alpha_test { public var ALPHA_TEST_QCOM = 0x0BC0; public var ALPHA_TEST_FUNC_QCOM = 0x0BC1; public var ALPHA_TEST_REF_QCOM = 0x0BC2; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); } ================================================ FILE: src/lime/graphics/opengl/ext/QCOM_binning_control.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class QCOM_binning_control { public var BINNING_CONTROL_HINT_QCOM = 0x8FB0; public var CPU_OPTIMIZED_QCOM = 0x8FB1; public var GPU_OPTIMIZED_QCOM = 0x8FB2; public var RENDER_DIRECT_TO_FRAMEBUFFER_QCOM = 0x8FB3; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/QCOM_driver_control.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class QCOM_driver_control { @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); // GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); // GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); // GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); } ================================================ FILE: src/lime/graphics/opengl/ext/QCOM_extended_get.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class QCOM_extended_get { public var TEXTURE_WIDTH_QCOM = 0x8BD2; public var TEXTURE_HEIGHT_QCOM = 0x8BD3; public var TEXTURE_DEPTH_QCOM = 0x8BD4; public var TEXTURE_INTERNAL_FORMAT_QCOM = 0x8BD5; public var TEXTURE_FORMAT_QCOM = 0x8BD6; public var TEXTURE_TYPE_QCOM = 0x8BD7; public var TEXTURE_IMAGE_VALID_QCOM = 0x8BD8; public var TEXTURE_NUM_LEVELS_QCOM = 0x8BD9; public var TEXTURE_TARGET_QCOM = 0x8BDA; public var TEXTURE_OBJECT_VALID_QCOM = 0x8BDB; public var STATE_RESTORE = 0x8BDC; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); // GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); // GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); // GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); // GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); // GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); // GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); // GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); } ================================================ FILE: src/lime/graphics/opengl/ext/QCOM_extended_get2.hx ================================================ package lime.graphics.opengl.ext; @:noCompletion class QCOM_extended_get2 { @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); // GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); // GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); // GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); } ================================================ FILE: src/lime/graphics/opengl/ext/QCOM_perfmon_global_mode.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class QCOM_perfmon_global_mode { public var PERFMON_GLOBAL_MODE_QCOM = 0x8FA0; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/QCOM_tiled_rendering.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class QCOM_tiled_rendering { public var COLOR_BUFFER_BIT0_QCOM = 0x00000001; public var COLOR_BUFFER_BIT1_QCOM = 0x00000002; public var COLOR_BUFFER_BIT2_QCOM = 0x00000004; public var COLOR_BUFFER_BIT3_QCOM = 0x00000008; public var COLOR_BUFFER_BIT4_QCOM = 0x00000010; public var COLOR_BUFFER_BIT5_QCOM = 0x00000020; public var COLOR_BUFFER_BIT6_QCOM = 0x00000040; public var COLOR_BUFFER_BIT7_QCOM = 0x00000080; public var DEPTH_BUFFER_BIT0_QCOM = 0x00000100; public var DEPTH_BUFFER_BIT1_QCOM = 0x00000200; public var DEPTH_BUFFER_BIT2_QCOM = 0x00000400; public var DEPTH_BUFFER_BIT3_QCOM = 0x00000800; public var DEPTH_BUFFER_BIT4_QCOM = 0x00001000; public var DEPTH_BUFFER_BIT5_QCOM = 0x00002000; public var DEPTH_BUFFER_BIT6_QCOM = 0x00004000; public var DEPTH_BUFFER_BIT7_QCOM = 0x00008000; public var STENCIL_BUFFER_BIT0_QCOM = 0x00010000; public var STENCIL_BUFFER_BIT1_QCOM = 0x00020000; public var STENCIL_BUFFER_BIT2_QCOM = 0x00040000; public var STENCIL_BUFFER_BIT3_QCOM = 0x00080000; public var STENCIL_BUFFER_BIT4_QCOM = 0x00100000; public var STENCIL_BUFFER_BIT5_QCOM = 0x00200000; public var STENCIL_BUFFER_BIT6_QCOM = 0x00400000; public var STENCIL_BUFFER_BIT7_QCOM = 0x00800000; public var MULTISAMPLE_BUFFER_BIT0_QCOM = 0x01000000; public var MULTISAMPLE_BUFFER_BIT1_QCOM = 0x02000000; public var MULTISAMPLE_BUFFER_BIT2_QCOM = 0x04000000; public var MULTISAMPLE_BUFFER_BIT3_QCOM = 0x08000000; public var MULTISAMPLE_BUFFER_BIT4_QCOM = 0x10000000; public var MULTISAMPLE_BUFFER_BIT5_QCOM = 0x20000000; public var MULTISAMPLE_BUFFER_BIT6_QCOM = 0x40000000; public var MULTISAMPLE_BUFFER_BIT7_QCOM = 0x80000000; @:noCompletion private function new() {} // GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); // GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); } ================================================ FILE: src/lime/graphics/opengl/ext/QCOM_writeonly_rendering.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class QCOM_writeonly_rendering { public var WRITEONLY_RENDERING_QCOM = 0x8823; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/VIV_shader_binary.hx ================================================ package lime.graphics.opengl.ext; @:keep @:noCompletion class VIV_shader_binary { public var SHADER_BINARY_VIV = 0x8FC4; @:noCompletion private function new() {} } ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_color_buffer_float.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("WEBGL_color_buffer_float") @:noCompletion extern class WEBGL_color_buffer_float { public var RGBA32F_EXT:Int; public var RGB32F_EXT:Int; public var FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT:Int; public var UNSIGNED_NORMALIZED_EXT:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_compressed_texture_atc.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("WEBGL_compressed_texture_atc") @:noCompletion extern class WEBGL_compressed_texture_atc { public var COMPRESSED_RGB_ATC_WEBGL:Int; public var COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:Int; public var COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_compressed_texture_etc.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("WEBGL_compressed_texture_etc") @:noCompletion extern class WEBGL_compressed_texture_etc { public var COMPRESSED_R11_EAC:Int; public var COMPRESSED_SIGNED_R11_EAC:Int; public var COMPRESSED_RG11_EAC:Int; public var COMPRESSED_SIGNED_RG11_EAC:Int; public var COMPRESSED_RGB8_ETC2:Int; public var COMPRESSED_RGBA8_ETC2_EAC:Int; public var COMPRESSED_SRGB8_ETC2:Int; public var COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:Int; public var COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:Int; public var COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_compressed_texture_etc1.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("WEBGL_compressed_texture_etc1") @:noCompletion extern class WEBGL_compressed_texture_etc1 { public var COMPRESSED_RGB_ETC1_WEBGL:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_compressed_texture_pvrtc.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("WEBGL_compressed_texture_pvrtc") @:noCompletion extern class WEBGL_compressed_texture_pvrtc { public var COMPRESSED_RGB_PVRTC_4BPPV1_IMG:Int; public var COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:Int; public var COMPRESSED_RGB_PVRTC_2BPPV1_IMG:Int; public var COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_compressed_texture_s3tc.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("WEBGL_compressed_texture_s3tc") @:noCompletion extern class WEBGL_compressed_texture_s3tc { public var COMPRESSED_RGB_S3TC_DXT1_EXT:Int; public var COMPRESSED_RGBA_S3TC_DXT1_EXT:Int; public var COMPRESSED_RGBA_S3TC_DXT3_EXT:Int; public var COMPRESSED_RGBA_S3TC_DXT5_EXT:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_debug_renderer_info.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("WEBGL_debug_renderer_info") @:noCompletion extern class WEBGL_debug_renderer_info { public var UNMASKED_VENDOR_WEBGL:Int; public var UNMASKED_RENDERER_WEBGL:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_debug_shaders.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) import lime.graphics.opengl.GLShader; @:keep @:native("WEBGL_debug_shaders") @:noCompletion extern class WEBGL_debug_shaders { public function getTranslatedShaderSource(shader:GLShader):String; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_depth_texture.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) import lime.graphics.opengl.GLShader; @:keep @:native("WEBGL_depth_texture") @:noCompletion extern class WEBGL_depth_texture { public var UNSIGNED_INT_24_8_WEBGL:Int; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_draw_buffers.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("WEBGL_draw_buffers") @:noCompletion extern class WEBGL_draw_buffers { public var COLOR_ATTACHMENT0_WEBGL:Int; public var COLOR_ATTACHMENT1_WEBGL:Int; public var COLOR_ATTACHMENT2_WEBGL:Int; public var COLOR_ATTACHMENT3_WEBGL:Int; public var COLOR_ATTACHMENT4_WEBGL:Int; public var COLOR_ATTACHMENT5_WEBGL:Int; public var COLOR_ATTACHMENT6_WEBGL:Int; public var COLOR_ATTACHMENT7_WEBGL:Int; public var COLOR_ATTACHMENT8_WEBGL:Int; public var COLOR_ATTACHMENT9_WEBGL:Int; public var COLOR_ATTACHMENT10_WEBGL:Int; public var COLOR_ATTACHMENT11_WEBGL:Int; public var COLOR_ATTACHMENT12_WEBGL:Int; public var COLOR_ATTACHMENT13_WEBGL:Int; public var COLOR_ATTACHMENT14_WEBGL:Int; public var COLOR_ATTACHMENT15_WEBGL:Int; public var DRAW_BUFFER0_WEBGL:Int; public var DRAW_BUFFER1_WEBGL:Int; public var DRAW_BUFFER2_WEBGL:Int; public var DRAW_BUFFER3_WEBGL:Int; public var DRAW_BUFFER4_WEBGL:Int; public var DRAW_BUFFER5_WEBGL:Int; public var DRAW_BUFFER6_WEBGL:Int; public var DRAW_BUFFER7_WEBGL:Int; public var DRAW_BUFFER8_WEBGL:Int; public var DRAW_BUFFER9_WEBGL:Int; public var DRAW_BUFFER10_WEBGL:Int; public var DRAW_BUFFER11_WEBGL:Int; public var DRAW_BUFFER12_WEBGL:Int; public var DRAW_BUFFER13_WEBGL:Int; public var DRAW_BUFFER14_WEBGL:Int; public var DRAW_BUFFER15_WEBGL:Int; public var MAX_COLOR_ATTACHMENTS_WEBGL:Int; public var MAX_DRAW_BUFFERS_WEBGL:Int; public function drawBuffersWEBGL(buffers:Array):Void; } #end ================================================ FILE: src/lime/graphics/opengl/ext/WEBGL_lose_context.hx ================================================ package lime.graphics.opengl.ext; #if (js && html5) @:keep @:native("WEBGL_lose_context") @:noCompletion extern class WEBGL_lose_context { public function loseContext():Void; public function restoreContext():Void; } #end ================================================ FILE: src/lime/math/ARGB.hx ================================================ package lime.math; import lime.graphics.PixelFormat; import lime.utils.UInt32Array; import lime.utils.UInt8Array; /** A utility for storing, accessing and converting colors in an ARGB (alpha, red, green, blue) color format. ```haxe var color:ARGB = 0xFF883300; trace (color.a); // 0xFF trace (color.r); // 0x88 trace (color.g); // 0x33 trace (color.b); // 0x00 var convert:BGRA = color; // 0x003388FF ``` **/ @:transitive abstract ARGB(#if (flash && !lime_doc_gen) Int #else UInt #end) from Int to Int from UInt to UInt { private static var a16:Int; private static var unmult:Float; /** Accesses the alpha component of the color **/ public var a(get, set):Int; /** Accesses the blue component of the color **/ public var b(get, set):Int; /** Accesses the green component of the color **/ public var g(get, set):Int; /** Accesses the red component of the color **/ public var r(get, set):Int; /** Creates a new ARGB instance @param argb (Optional) An ARGB color value **/ public inline function new(argb:Int = 0) { this = argb; } /** Creates a new ARGB instance from component values @param a An alpha component value @param r A red component value @param g A green component value @param b A blue component value @return A new ARGB instance **/ public static inline function create(a:Int, r:Int, g:Int, b:Int):ARGB { var argb = new ARGB(); argb.set(a, r, g, b); return argb; } /** Multiplies the red, green and blue components by the current alpha component **/ public inline function multiplyAlpha():Void { if (a == 0) { this = 0; } else if (a != 0xFF) { a16 = RGBA.__alpha16[a]; set(a, (r * a16) >> 16, (g * a16) >> 16, (b * a16) >> 16); } } /** Reads a value from a `UInt8Array` into the current `ARGB` color @param data A `UInt8Array` instance @param offset An offset into the `UInt8Array` to read @param format (Optional) The `PixelFormat` represented by the `UInt8Array` data @param premultiplied (Optional) Whether the data is stored in premultiplied alpha format **/ public inline function readUInt8(data:UInt8Array, offset:Int, format:PixelFormat = RGBA32, premultiplied:Bool = false):Void { switch (format) { case BGRA32: set(data[offset + 1], data[offset], data[offset + 3], data[offset + 2]); case RGBA32: set(data[offset + 1], data[offset + 2], data[offset + 3], data[offset]); case ARGB32: set(data[offset + 2], data[offset + 3], data[offset], data[offset + 1]); } if (premultiplied) { unmultiplyAlpha(); } } /** Sets the current `ARGB` color to new component values @param a The alpha component value to set @param r The red component value to set @param g The green component value to set @param b The blue component vlaue to set **/ public inline function set(a:Int, r:Int, g:Int, b:Int):Void { this = ((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF); } /** Divides the current red, green and blue components by the alpha component **/ public inline function unmultiplyAlpha() { if (a != 0 && a != 0xFF) { unmult = 255.0 / a; set(a, RGBA.__clamp[Math.floor(r * unmult)], RGBA.__clamp[Math.floor(g * unmult)], RGBA.__clamp[Math.floor(b * unmult)]); } } /** Writes the current `ARGB` color into a `UInt8Array` @param data A `UInt8Array` instance @param offset An offset into the `UInt8Array` to write @param format (Optional) The `PixelFormat` represented by the `UInt8Array` data @param premultiplied (Optional) Whether the data is stored in premultiplied alpha format **/ public inline function writeUInt8(data:UInt8Array, offset:Int, format:PixelFormat = RGBA32, premultiplied:Bool = false):Void { if (premultiplied) { multiplyAlpha(); } switch (format) { case BGRA32: data[offset] = b; data[offset + 1] = g; data[offset + 2] = r; data[offset + 3] = a; case RGBA32: data[offset] = r; data[offset + 1] = g; data[offset + 2] = b; data[offset + 3] = a; case ARGB32: data[offset] = a; data[offset + 1] = r; data[offset + 2] = g; data[offset + 3] = b; } } @:from private static inline function __fromBGRA(bgra:BGRA):ARGB { return ARGB.create(bgra.a, bgra.r, bgra.g, bgra.b); } @:from private static inline function __fromRGBA(rgba:RGBA):ARGB { return ARGB.create(rgba.a, rgba.r, rgba.g, rgba.b); } // Get & Set Methods @:noCompletion private inline function get_a():Int { return (this >> 24) & 0xFF; } @:noCompletion private inline function set_a(value:Int):Int { set(value, r, g, b); return value; } @:noCompletion private inline function get_b():Int { return this & 0xFF; } @:noCompletion private inline function set_b(value:Int):Int { set(a, r, g, value); return value; } @:noCompletion private inline function get_g():Int { return (this >> 8) & 0xFF; } @:noCompletion private inline function set_g(value:Int):Int { set(a, r, value, b); return value; } @:noCompletion private inline function get_r():Int { return (this >> 16) & 0xFF; } @:noCompletion private inline function set_r(value:Int):Int { set(a, value, g, b); return value; } } ================================================ FILE: src/lime/math/BGRA.hx ================================================ package lime.math; import lime.graphics.PixelFormat; import lime.utils.UInt32Array; import lime.utils.UInt8Array; /** A utility for storing, accessing and converting colors in a BGRA (blue, green, red, alpha) color format. ```haxe var color:BGRA = 0x003388FF; trace (color.b); // 0x00 trace (color.g); // 0x33 trace (color.r); // 0x88 trace (color.a); // 0xFF var convert:ARGB = color; // 0xFF883300 ``` **/ @:transitive abstract BGRA(#if (flash && !lime_doc_gen) Int #else UInt #end) from Int to Int from UInt to UInt { private static var a16:Int; private static var unmult:Float; /** Accesses the alpha component of the color **/ public var a(get, set):Int; /** Accesses the blue component of the color **/ public var b(get, set):Int; /** Accesses the green component of the color **/ public var g(get, set):Int; /** Accesses the red component of the color **/ public var r(get, set):Int; /** Creates a new BGRA instance @param bgra (Optional) A BGRA color value **/ public inline function new(bgra:Int = 0) { this = bgra; } /** Creates a new BGRA instance from component values @param b A blue component value @param g A green component value @param r A red component value @param a An alpha component value @return A new BGRA instance **/ public static inline function create(b:Int, g:Int, r:Int, a:Int):BGRA { var bgra = new BGRA(); bgra.set(b, g, r, a); return bgra; } /** Multiplies the red, green and blue components by the current alpha component **/ public inline function multiplyAlpha() { if (a == 0) { this = 0; } else if (a != 0xFF) { a16 = RGBA.__alpha16[a]; set((b * a16) >> 16, (g * a16) >> 16, (r * a16) >> 16, a); } } /** Reads a value from a `UInt8Array` into the current `BGRA` color @param data A `UInt8Array` instance @param offset An offset into the `UInt8Array` to read @param format (Optional) The `PixelFormat` represented by the `UInt8Array` data @param premultiplied (Optional) Whether the data is stored in premultiplied alpha format **/ public inline function readUInt8(data:UInt8Array, offset:Int, format:PixelFormat = RGBA32, premultiplied:Bool = false):Void { switch (format) { case BGRA32: set(data[offset], data[offset + 1], data[offset + 2], data[offset + 3]); case RGBA32: set(data[offset + 2], data[offset + 1], data[offset], data[offset + 3]); case ARGB32: set(data[offset + 3], data[offset + 2], data[offset + 1], data[offset]); } if (premultiplied) { unmultiplyAlpha(); } } /** Sets the current `BGRA` color to new component values @param b The blue component vlaue to set @param g The green component value to set @param r The red component value to set @param a The alpha component value to set **/ public inline function set(b:Int, g:Int, r:Int, a:Int):Void { this = ((b & 0xFF) << 24) | ((g & 0xFF) << 16) | ((r & 0xFF) << 8) | (a & 0xFF); } /** Divides the current red, green and blue components by the alpha component **/ public inline function unmultiplyAlpha() { if (a != 0 && a != 0xFF) { unmult = 255.0 / a; set(RGBA.__clamp[Math.floor(b * unmult)], RGBA.__clamp[Math.floor(g * unmult)], RGBA.__clamp[Math.floor(r * unmult)], a); } } /** Writes the current `BGRA` color into a `UInt8Array` @param data A `UInt8Array` instance @param offset An offset into the `UInt8Array` to write @param format (Optional) The `PixelFormat` represented by the `UInt8Array` data @param premultiplied (Optional) Whether the data is stored in premultiplied alpha format **/ public inline function writeUInt8(data:UInt8Array, offset:Int, format:PixelFormat = RGBA32, premultiplied:Bool = false):Void { if (premultiplied) { multiplyAlpha(); } switch (format) { case BGRA32: data[offset] = b; data[offset + 1] = g; data[offset + 2] = r; data[offset + 3] = a; case RGBA32: data[offset] = r; data[offset + 1] = g; data[offset + 2] = b; data[offset + 3] = a; case ARGB32: data[offset] = a; data[offset + 1] = r; data[offset + 2] = g; data[offset + 3] = b; } } @:from private static inline function __fromARGB(argb:ARGB):BGRA { return BGRA.create(argb.b, argb.g, argb.r, argb.a); } @:from private static inline function __fromRGBA(rgba:RGBA):BGRA { return BGRA.create(rgba.b, rgba.g, rgba.r, rgba.a); } // Get & Set Methods @:noCompletion private inline function get_a():Int { return this & 0xFF; } @:noCompletion private inline function set_a(value:Int):Int { set(b, g, r, value); return value; } @:noCompletion private inline function get_b():Int { return (this >> 24) & 0xFF; } @:noCompletion private inline function set_b(value:Int):Int { set(value, g, r, a); return value; } @:noCompletion private inline function get_g():Int { return (this >> 16) & 0xFF; } @:noCompletion private inline function set_g(value:Int):Int { set(b, value, r, a); return value; } @:noCompletion private inline function get_r():Int { return (this >> 8) & 0xFF; } @:noCompletion private inline function set_r(value:Int):Int { set(b, g, value, a); return value; } } ================================================ FILE: src/lime/math/ColorMatrix.hx ================================================ package lime.math; import lime.utils.Float32Array; import lime.utils.UInt8Array; #if flash import flash.geom.ColorTransform; #end /** `ColorMatrix` is a 4x5 matrix containing color multiplication and offset values for tinting and other kinds of color manipulation. In addition to using the multiplier, offset and `color` properties, it can be edited directly as a `Float32Array` **/ abstract ColorMatrix(Float32Array) from Float32Array to Float32Array { private static var __alphaTable:UInt8Array; private static var __blueTable:UInt8Array; private static var __greenTable:UInt8Array; private static var __identity = [ 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ]; private static var __redTable:UInt8Array; /** The current alpha multiplication value (default is 1.0) **/ public var alphaMultiplier(get, set):Float; /** The current alpha offset value (default is 0) **/ public var alphaOffset(get, set):Float; /** The current blue multiplication value (default is 1.0) **/ public var blueMultiplier(get, set):Float; /** The current blue offset value (default is 0) **/ public var blueOffset(get, set):Float; /** Gets or sets a color offset for tinting. This will change the red, green and blue multipliers to zero, and affect the red, green and blue offset values. **/ public var color(get, set):Int; /** The current green multiplication value (default is 1.0) **/ public var greenMultiplier(get, set):Float; /** The current green offset value (default is 0) **/ public var greenOffset(get, set):Float; /** The current red multiplication value (default is 1.0) **/ public var redMultiplier(get, set):Float; /** The current red offset value (default is 0) **/ public var redOffset(get, set):Float; /** Creates a new `ColorMatrix` instance @param data (Optional) Initial `Float32Array` data to use **/ public function new(data:Float32Array = null) { if (data != null && data.length == 20) { this = data; } else { this = new Float32Array(__identity); } } /** Creates a duplicate of the current `ColorMatrix` instance @return A new `ColorMatrix` instance **/ public function clone():ColorMatrix { return new ColorMatrix(new Float32Array(this)); } /** Adds the color multipliers from a second `ColorMatrix` to the current one @param second The `ColorMatrix` to `concat` to the current one **/ public function concat(second:ColorMatrix):Void { redMultiplier += second.redMultiplier; greenMultiplier += second.greenMultiplier; blueMultiplier += second.blueMultiplier; alphaMultiplier += second.alphaMultiplier; } /** Sets the current `ColorMatrix` values to the same as another one @param other The `ColorMatrix` to copy from **/ public function copyFrom(other:ColorMatrix):Void { this.set(cast other); } /** Resets to default values **/ public function identity() { this[0] = 1; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = 0; this[6] = 1; this[7] = 0; this[8] = 0; this[9] = 0; this[10] = 0; this[11] = 0; this[12] = 1; this[13] = 0; this[14] = 0; this[15] = 0; this[16] = 0; this[17] = 0; this[18] = 1; this[19] = 0; } /** Returns a reference to a `UInt8Array` table for transforming alpha values using the current matrix. The table is 256 values in length, and includes values based on the `alphaMultipler` and `alphaOffset` values of the matrix. The values are constrained within 0 and 255. For example: ```haxe var colorMatrix = new ColorMatrix (); colorMatrix.alphaOffset = 12; var alphaTable = colorMatrix.getAlphaTable (); trace (alphaTable[0]); // 12 trace (alphaTable[1]); // 13 ``` **/ public function getAlphaTable():UInt8Array { if (__alphaTable == null) { __alphaTable = new UInt8Array(256); } var value:Int; __alphaTable[0] = 0; for (i in 1...256) { value = Math.floor(i * alphaMultiplier + alphaOffset); if (value > 0xFF) value = 0xFF; if (value < 0) value = 0; __alphaTable[i] = value; } return __alphaTable; } /** Returns a reference to a `UInt8Array` table for transforming blue values using the current matrix. The table is 256 values in length, and includes values based on the `blueMultiplier` and `blueOffset` values of the matrix. The values are constrained within 0 and 255. For example: ```haxe var colorMatrix = new ColorMatrix (); colorMatrix.blueOffset = 16; var blueTable = colorMatrix.getBlueTable (); trace (blueTable[0]); // 16 trace (blueTable[1]); // 17 ``` **/ public function getBlueTable():UInt8Array { if (__blueTable == null) { __blueTable = new UInt8Array(256); } var value:Int; for (i in 0...256) { value = Math.floor(i * blueMultiplier + blueOffset); if (value > 0xFF) value = 0xFF; if (value < 0) value = 0; __blueTable[i] = value; } return __blueTable; } /** Returns a reference to a `UInt8Array` table for transforming green values using the current matrix. The table is 256 values in length, and includes values based on the `greenMultiplier` and `greenOffset` values of the matrix. The values are constrained within 0 and 255. For example: ```haxe var colorMatrix = new ColorMatrix (); colorMatrix.greenOffset = 16; var greenTable = colorMatrix.getGreenTable (); trace (greenTable[0]); // 16 trace (greenTable[1]); // 17 ``` **/ public function getGreenTable():UInt8Array { if (__greenTable == null) { __greenTable = new UInt8Array(256); } var value:Int; for (i in 0...256) { value = Math.floor(i * greenMultiplier + greenOffset); if (value > 0xFF) value = 0xFF; if (value < 0) value = 0; __greenTable[i] = value; } return __greenTable; } /** Returns a reference to a `UInt8Array` table for transforming red values using the current matrix. The table is 256 values in length, and includes values based on the `redMultiplier` and `redOffset` values of the matrix. The values are constrained within 0 and 255. For example: ```haxe var colorMatrix = new ColorMatrix (); colorMatrix.redOffset = 16; var redTable = colorMatrix.getRedTable (); trace (redTable[0]); // 16 trace (redTable[1]); // 17 ``` **/ public function getRedTable():UInt8Array { if (__redTable == null) { __redTable = new UInt8Array(256); } var value:Int; for (i in 0...256) { value = Math.floor(i * redMultiplier + redOffset); if (value > 0xFF) value = 0xFF; if (value < 0) value = 0; __redTable[i] = value; } return __redTable; } @:noCompletion private function __toFlashColorTransform():#if flash ColorTransform #else Dynamic #end { #if flash return new ColorTransform(redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier, redOffset, greenOffset, blueOffset, alphaOffset); #else return null; #end } // Get & Set Methods @:noCompletion private inline function get_alphaMultiplier():Float { return this[18]; } @:noCompletion private inline function set_alphaMultiplier(value:Float):Float { return this[18] = value; } @:noCompletion private inline function get_alphaOffset():Float { return this[19] * 255; } @:noCompletion private inline function set_alphaOffset(value:Float):Float { return this[19] = value / 255; } @:noCompletion private inline function get_blueMultiplier():Float { return this[12]; } @:noCompletion private inline function set_blueMultiplier(value:Float):Float { return this[12] = value; } @:noCompletion private inline function get_blueOffset():Float { return this[14] * 255; } @:noCompletion private inline function set_blueOffset(value:Float):Float { return this[14] = value / 255; } @:noCompletion private function get_color():Int { return ((Std.int(redOffset) << 16) | (Std.int(greenOffset) << 8) | Std.int(blueOffset)); } @:noCompletion private function set_color(value:Int):Int { redOffset = (value >> 16) & 0xFF; greenOffset = (value >> 8) & 0xFF; blueOffset = value & 0xFF; redMultiplier = 0; greenMultiplier = 0; blueMultiplier = 0; return color; } @:noCompletion private inline function get_greenMultiplier():Float { return this[6]; } @:noCompletion private inline function set_greenMultiplier(value:Float):Float { return this[6] = value; } @:noCompletion private inline function get_greenOffset():Float { return this[9] * 255; } @:noCompletion private inline function set_greenOffset(value:Float):Float { return this[9] = value / 255; } @:noCompletion private inline function get_redMultiplier():Float { return this[0]; } @:noCompletion private inline function set_redMultiplier(value:Float):Float { return this[0] = value; } @:noCompletion private inline function get_redOffset():Float { return this[4] * 255; } @:noCompletion private inline function set_redOffset(value:Float):Float { return this[4] = value / 255; } @:dox(hide) @:noCompletion @:arrayAccess public function get(index:Int):Float { return this[index]; } @:dox(hide) @:noCompletion @:arrayAccess public function set(index:Int, value:Float):Float { return this[index] = value; } } ================================================ FILE: src/lime/math/Matrix3.hx ================================================ package lime.math; import lime.utils.Float32Array; /** `Matrix3` is a 3x3 transformation matrix particularly useful for two-dimensional transformation. It can be used for rotation, scale and skewing of a two-dimensional object. Although a 3x3 matrix is represented, configurable values can be considered as a 3x2 matrix: ``` [ a, c, tx ] [ b, d, ty ] [ 0, 0, 1 ] ``` Values are stored in column-major order for GLSL compatibility. **/ #if hl @:keep #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end abstract Matrix3(Float32Array) to Float32Array { /** The matrix a component, used in scaling and skewing (default is 1) **/ public var a(get, set):Float; /** The matrix b component, used in rotation and skewing (default is 0) **/ public var b(get, set):Float; /** The matrix c component, used in rotation and skewing (default is 0) **/ public var c(get, set):Float; /** The matrix d component, used in scaling and skewing (default is 1) **/ public var d(get, set):Float; /** The matrix tx component, used in translation (default is 0) **/ public var tx(get, set):Float; /** The matrix ty component, used in translation (default is 0) **/ public var ty(get, set):Float; /** Creates a new `Matrix` instance @param a (Optional) An initial a component value (default is 1) @param b (Optional) An initial b component value (default is 0) @param c (Optional) An initial c component value (default is 0) @param d (Optional) An initial d component value (default is 1) @param tx (Optional) An initial tx component value (default is 0) @param ty (Optional) An initial ty component value (default is 0) **/ public function new(a:Float = 1, b:Float = 0, c:Float = 0, d:Float = 1, tx:Float = 0, ty:Float = 0) { // Column-major order means adjacent values form a column, not a row. this = new Float32Array([ a, b, 0, // column 0 c, d, 0, // column 1 tx, ty, 1 // column 2 ]); } /** Creates a duplicate of the current `Matrix3` @return A duplicate `Matrix3` instance **/ public inline function clone():Matrix3 { return new Matrix3(a, b, c, d, tx, ty); } /** Concatenates the values of a second matrix to the current `Matrix3`, combining the effects of both. This is the same as matrix multiplication. The second matrix is not modified. @param m A second `Matrix3` to concatenate to the current instance **/ public function concat(m:Matrix3):Void { var a1 = a * m.a + b * m.c; b = a * m.b + b * m.d; a = a1; var c1 = c * m.a + d * m.c; d = c * m.b + d * m.d; c = c1; var tx1 = tx * m.a + ty * m.c + m.tx; ty = tx * m.b + ty * m.d + m.ty; tx = tx1; } /** Copies the `x` and `y` components from a `Vector4` instance to the `a`/`c`, `b`/`d` or the `tx`/`ty` column of the current matrix @param column The column to copy into (0, 1 or 2) @param vector4 The `Vector4` instance to copy from **/ public function copyColumnFrom(column:Int, vector4:Vector4):Void { if (column > 2) { throw "Column " + column + " out of bounds (2)"; } else if (column == 0) { a = vector4.x; b = vector4.y; } else if (column == 1) { c = vector4.x; d = vector4.y; } else { tx = vector4.x; ty = vector4.y; } } /** Copies a column of the current matrix into a `Vector4` instance. The `w` value will not be modified. @param column The column to copy from (0, 1 or 2) @param vector4 The `Vector4` instance to copy to **/ public function copyColumnTo(column:Int, vector4:Vector4):Void { if (column > 2) { throw "Column " + column + " out of bounds (2)"; } else if (column == 0) { vector4.x = a; vector4.y = b; vector4.z = 0; } else if (column == 1) { vector4.x = c; vector4.y = d; vector4.z = 0; } else { vector4.x = tx; vector4.y = ty; vector4.z = 1; } } /** Copies the values of another `Matrix3` and applies it to the current instance @param sourceMatrix3 The `Matrix3` to copy from **/ public function copyFrom(sourceMatrix3:Matrix3):Void { a = sourceMatrix3.a; b = sourceMatrix3.b; c = sourceMatrix3.c; d = sourceMatrix3.d; tx = sourceMatrix3.tx; ty = sourceMatrix3.ty; } /** Copies the values of a `Vector4` instance into a row of the current matrix @param row The row to copy into (0 or 1) @param vector4 The `Vector4` instance to copy from **/ public function copyRowFrom(row:Int, vector4:Vector4):Void { if (row > 2) { throw "Row " + row + " out of bounds (2)"; } else if (row == 0) { a = vector4.x; c = vector4.y; tx = vector4.z; } else if (row == 1) { b = vector4.x; d = vector4.y; ty = vector4.z; } } /** Copies a row of the current matrix into a `Vector4` instance. The `w` value will not be modified. @param row The row to copy into (0, 1 or 2) @param vector4 The `Vector4` instance to copy from **/ public function copyRowTo(row:Int, vector4:Vector4):Void { if (row > 2) { throw "Row " + row + " out of bounds (2)"; } else if (row == 0) { vector4.x = a; vector4.y = c; vector4.z = tx; } else if (row == 1) { vector4.x = b; vector4.y = d; vector4.z = ty; } else { vector4.setTo(0, 0, 1); } } /** Applies a two-dimensional transformation to the current matrix. This is the same as calling `identity()`, `rotate()`, `scale()` then `translate()` with these values. @param scaleX An x scale transformation value @param scaleY A y scale transformation value @param rotation (Optional) A rotation value (default is 0) @param xTranslate (Optional) A translate x value (default is 0) @param yTranslate (Optional) A translate y value (default is 0) **/ public function createBox(scaleX:Float, scaleY:Float, rotation:Float = 0, xTranslate:Float = 0, yTranslate:Float = 0):Void { if (rotation != 0) { var cos = Math.cos(rotation); var sin = Math.sin(rotation); a = cos * scaleX; b = sin * scaleY; c = -sin * scaleX; d = cos * scaleY; } else { a = scaleX; b = 0; c = 0; d = scaleY; } tx = xTranslate; ty = yTranslate; } /** Creates a matrix to use for a linear gradient fill @param width The width of the gradient fill @param height The height of the gradient fill @param rotation (Optional) A rotation for the gradient fill (default is 0) @param xTranslate (Optional) An x offset for the gradient fill (default is 0) @param yTranslate (Optional) A y offset for the gradient fill (default is 0) @return A new `Matrix` instance **/ public function createGradientBox(width:Float, height:Float, rotation:Float = 0, xTranslate:Float = 0, yTranslate:Float = 0):Void { a = width / 1638.4; d = height / 1638.4; // rotation is clockwise if (rotation != 0) { var cos = Math.cos(rotation); var sin = Math.sin(rotation); b = sin * d; c = -sin * a; a *= cos; d *= cos; } else { b = 0; c = 0; } tx = xTranslate + width / 2; ty = yTranslate + height / 2; } /** Check if two matrices have the same values @return Whether both matrices are equal **/ public function equals(matrix3:Matrix3):Bool { return (matrix3 != null && tx == matrix3.tx && ty == matrix3.ty && a == matrix3.a && b == matrix3.b && c == matrix3.c && d == matrix3.d); } /** Transforms a `Vector2` instance by the current matrix, without considering the `tx` and `ty` values of the matrix @param result (Optional) An existing `Vector2` instance to fill with the result @return A new `Vector2` instance representing the transformed values **/ public function deltaTransformVector(Vector2:Vector2, result:Vector2 = null):Vector2 { if (result == null) result = new Vector2(); result.x = Vector2.x * a + Vector2.y * c; result.y = Vector2.x * b + Vector2.y * d; return result; } @:from private static inline function fromCairoMatrix3(matrix:CairoMatrix3):Matrix3 { return new Matrix3(matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty); } @:from private static inline function fromFloat32Array(array:Float32Array):Matrix3 { if (array.length != 9) { throw "Expected array of length 9, got " + array.length; } return cast array; } /** Resets the matrix to default identity values **/ public function identity():Void { a = 1; b = 0; c = 0; d = 1; tx = 0; ty = 0; } /** Inverts the values of the current matrix @return The current matrix instance **/ public function invert():Matrix3 { var norm = a * d - b * c; if (norm == 0) { a = b = c = d = 0; tx = -tx; ty = -ty; } else { norm = 1.0 / norm; var a1 = d * norm; d = a * norm; a = a1; b *= -norm; c *= -norm; var tx1 = -a * tx - c * ty; ty = -b * tx - d * ty; tx = tx1; } return this; } /** Applies rotation to the current matrix @param theta A rotation value in degrees **/ public function rotate(theta:Float):Void { /* Rotate object "after" other transforms [ a c tx ][ ma mc mtx ] [ b d ty ][ mb md mty ] [ 0 0 1 ][ 0 0 1 ] ma = md = cos mb = sin mc = -sin mtx = my = 0 */ var cos = Math.cos(theta); var sin = Math.sin(theta); var a1 = a * cos - b * sin; b = a * sin + b * cos; a = a1; var c1 = c * cos - d * sin; d = c * sin + d * cos; c = c1; var tx1 = tx * cos - ty * sin; ty = tx * sin + ty * cos; tx = tx1; } /** Scales the current matrix @param sx The x scale to apply @param sy The y scale to apply **/ public function scale(sx:Float, sy:Float):Void { /* Scale object "after" other transforms [ a c tx ][ sx 0 0 ] [ b d ty ][ 0 sy 0 ] [ 0 0 1 ][ 0 0 1 ] */ a *= sx; b *= sy; c *= sx; d *= sy; tx *= sx; ty *= sy; } @:noCompletion private inline function setRotation(theta:Float, scale:Float = 1):Void { a = Math.cos(theta) * scale; c = Math.sin(theta) * scale; b = -c; d = a; } /** Sets the values of the current matrix @param a The new matrix a value @param b The new matrix b value @param c The new matrix c value @param d The new matrix d value @param tx The new matrix tx value @param ty The new matrix ty value **/ public #if !js inline #end function setTo(a:Float, b:Float, c:Float, d:Float, tx:Float, ty:Float):Void { set_a(a); set_b(b); set_c(c); set_d(d); set_tx(tx); set_ty(ty); } @:dox(hide) @:noCompletion @:to public inline function toCairoMatrix3():CairoMatrix3 { return new CairoMatrix3(a, b, c, d, tx, ty); } @:dox(hide) public inline function toString():String { return 'matrix($a, $b, $c, $d, $tx, $ty)'; } /** Transforms a `Rectangle` instance by the current matrix and returns `Rectangle` with the bounds of the transformed rectangle. @param transform A `Matrix3` instance to transform by @param result (Optional) A `Rectangle` instance to use for the result @return A `Rectangle` represented the transformed bounds **/ public function transformRect(rect:Rectangle, result:Rectangle = null):Rectangle { if (result == null) result = new Rectangle(); var tx0 = a * rect.x + c * rect.y; var tx1 = tx0; var ty0 = b * rect.x + d * rect.y; var ty1 = ty0; var tx = a * (rect.x + rect.width) + c * rect.y; var ty = b * (rect.x + rect.width) + d * rect.y; if (tx < tx0) tx0 = tx; if (ty < ty0) ty0 = ty; if (tx > tx1) tx1 = tx; if (ty > ty1) ty1 = ty; tx = a * (rect.x + rect.width) + c * (rect.y + rect.height); ty = b * (rect.x + rect.width) + d * (rect.y + rect.height); if (tx < tx0) tx0 = tx; if (ty < ty0) ty0 = ty; if (tx > tx1) tx1 = tx; if (ty > ty1) ty1 = ty; tx = a * rect.x + c * (rect.y + rect.height); ty = b * rect.x + d * (rect.y + rect.height); if (tx < tx0) tx0 = tx; if (ty < ty0) ty0 = ty; if (tx > tx1) tx1 = tx; if (ty > ty1) ty1 = ty; result.setTo(tx0 + tx, ty0 + ty, tx1 - tx0, ty1 - ty0); return result; } /** Transforms a `Vector2` instance by the current matrix @param result (Optional) An existing `Vector2` instance to fill with the result @return A new `Vector2` instance representing the transformed values **/ public function transformVector(pos:Vector2, result:Vector2 = null):Vector2 { if (result == null) result = new Vector2(); result.x = pos.x * a + pos.y * c + tx; result.y = pos.x * b + pos.y * d + ty; return result; } /** Adjusts the `tx` and `ty` of the current matrix @param dx The x amount to translate @param dy The y amount to translate **/ public inline function translate(dx:Float, dy:Float) { tx += dx; ty += dy; } inline function get_a():Float { return this[0]; } inline function set_a(value: Float):Float { return this[0] = value; } inline function get_b():Float { return this[1]; } inline function set_b(value: Float):Float { return this[1] = value; } inline function get_c():Float { return this[3]; } inline function set_c(value: Float):Float { return this[3] = value; } inline function get_d():Float { return this[4]; } inline function set_d(value: Float):Float { return this[4] = value; } inline function get_tx():Float { return this[6]; } inline function set_tx(value: Float):Float { return this[6] = value; } inline function get_ty():Float { return this[7]; } inline function set_ty(value: Float):Float { return this[7] = value; } @:dox(hide) @:noCompletion @:arrayAccess public function get(index:Int):Float { return this[index]; } @:dox(hide) @:noCompletion @:arrayAccess public function set(index:Int, value:Float):Float { this[index] = value; return value; } } /** An object with the same data as a `Matrix3`, in Cairo's expected format. **/ class CairoMatrix3 { public var a:Float; public var b:Float; public var c:Float; public var d:Float; public var tx:Float; public var ty:Float; public function new(a:Float = 1, b:Float = 0, c:Float = 0, d:Float = 1, tx:Float = 0, ty:Float = 0) { this.a = a; this.b = b; this.c = c; this.d = d; this.tx = tx; this.ty = ty; } } ================================================ FILE: src/lime/math/Matrix4.hx ================================================ package lime.math; import lime.utils.Float32Array; import lime.utils.Log; /** `Matrix4` is a 4x4 matrix, useful for 3D calculations **/ abstract Matrix4(Float32Array) from Float32Array to Float32Array { private static var __identity:Array = [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]; /** Gets the determinant of the matrix **/ public var determinant(get, never):Float; /** Gets or sets the position value of this matrix **/ public var position(get, set):Vector4; /** Creates a new matrix instance @param data (Optional) A `Float32Array` of 16 values to use for this matrix **/ public function new(data:Float32Array = null) { if (data != null && data.length == 16) { this = data; } else { this = new Float32Array(__identity); } } /** Appends a second matrix by multiplying its values against the current one @param lhs A second matrix instance **/ public function append(lhs:Matrix4):Void { var m111:Float = this[0], m121:Float = this[4], m131:Float = this[8], m141:Float = this[12], m112:Float = this[1], m122:Float = this[5], m132:Float = this[9], m142:Float = this[13], m113:Float = this[2], m123:Float = this[6], m133:Float = this[10], m143:Float = this[14], m114:Float = this[3], m124:Float = this[7], m134:Float = this[11], m144:Float = this[15], m211:Float = lhs[0], m221:Float = lhs[4], m231:Float = lhs[8], m241:Float = lhs[12], m212:Float = lhs[1], m222:Float = lhs[5], m232:Float = lhs[9], m242:Float = lhs[13], m213:Float = lhs[2], m223:Float = lhs[6], m233:Float = lhs[10], m243:Float = lhs[14], m214:Float = lhs[3], m224:Float = lhs[7], m234:Float = lhs[11], m244:Float = lhs[15]; this[0] = m111 * m211 + m112 * m221 + m113 * m231 + m114 * m241; this[1] = m111 * m212 + m112 * m222 + m113 * m232 + m114 * m242; this[2] = m111 * m213 + m112 * m223 + m113 * m233 + m114 * m243; this[3] = m111 * m214 + m112 * m224 + m113 * m234 + m114 * m244; this[4] = m121 * m211 + m122 * m221 + m123 * m231 + m124 * m241; this[5] = m121 * m212 + m122 * m222 + m123 * m232 + m124 * m242; this[6] = m121 * m213 + m122 * m223 + m123 * m233 + m124 * m243; this[7] = m121 * m214 + m122 * m224 + m123 * m234 + m124 * m244; this[8] = m131 * m211 + m132 * m221 + m133 * m231 + m134 * m241; this[9] = m131 * m212 + m132 * m222 + m133 * m232 + m134 * m242; this[10] = m131 * m213 + m132 * m223 + m133 * m233 + m134 * m243; this[11] = m131 * m214 + m132 * m224 + m133 * m234 + m134 * m244; this[12] = m141 * m211 + m142 * m221 + m143 * m231 + m144 * m241; this[13] = m141 * m212 + m142 * m222 + m143 * m232 + m144 * m242; this[14] = m141 * m213 + m142 * m223 + m143 * m233 + m144 * m243; this[15] = m141 * m214 + m142 * m224 + m143 * m234 + m144 * m244; } /** Appends rotation to the current matrix @param degrees A rotation value (in degrees) @param axis The coordinate position of the rotation axis @param pivotPoint (Optional) A pivot point to use in the rotation **/ public function appendRotation(degrees:Float, axis:Vector4, pivotPoint:Vector4 = null):Void { var m = __getAxisRotation(axis.x, axis.y, axis.z, degrees); if (pivotPoint != null) { var p = pivotPoint; m.appendTranslation(p.x, p.y, p.z); } append(m); } /** Appends a scale value to the current matrix @param xScale The x scale to append @param yScale The y scale to append @param zScale The z scale to append **/ public function appendScale(xScale:Float, yScale:Float, zScale:Float):Void { append(new Matrix4(new Float32Array([ xScale, 0.0, 0.0, 0.0, 0.0, yScale, 0.0, 0.0, 0.0, 0.0, zScale, 0.0, 0.0, 0.0, 0.0, 1.0 ]))); } /** Increases the position/translation of the current matrix @param x The x amount to offset the current position @param y The y amount to offset the current position @param z The z amount to offset the current position **/ public function appendTranslation(x:Float, y:Float, z:Float):Void { this[12] = this[12] + x; this[13] = this[13] + y; this[14] = this[14] + z; } /** Creates a duplicate of the current `Matrix4` @return A new `Matrix4` with the same values as the current matrix **/ public function clone():Matrix4 { return new Matrix4(new Float32Array(this)); } /** Copies a column of data from a `Vector4` instance into the values of this matrix @param column The column to copy into (0, 1, 2 or 3) @param vector The `Vector4` copy from **/ public function copyColumnFrom(column:Int, vector:Vector4):Void { switch (column) { case 0: this[0] = vector.x; this[1] = vector.y; this[2] = vector.z; this[3] = vector.w; case 1: this[4] = vector.x; this[5] = vector.y; this[6] = vector.z; this[7] = vector.w; case 2: this[8] = vector.x; this[9] = vector.y; this[10] = vector.z; this[11] = vector.w; case 3: this[12] = vector.x; this[13] = vector.y; this[14] = vector.z; this[15] = vector.w; default: Log.error("Column " + column + " out of bounds [0, ..., 3]"); } } /** Copies a column of data from the current matrix into a `Vector4` instance @param column The column to copy (0, 1, 2 or 3) @param vector The `Vector4` copy to **/ public function copyColumnTo(column:Int, vector:Vector4):Void { switch (column) { case 0: vector.x = this[0]; vector.y = this[1]; vector.z = this[2]; vector.w = this[3]; case 1: vector.x = this[4]; vector.y = this[5]; vector.z = this[6]; vector.w = this[7]; case 2: vector.x = this[8]; vector.y = this[9]; vector.z = this[10]; vector.w = this[11]; case 3: vector.x = this[12]; vector.y = this[13]; vector.z = this[14]; vector.w = this[15]; default: Log.error("Column " + column + " out of bounds [0, ..., 3]"); } } /** Copies the values of another `Matrix4` into the current matrix @param other A `Matrix4` instance to copy from **/ public function copyFrom(other:Matrix4):Void { this.set(cast other); } /** Copies a row of data from a `Vector4` instance into the values of this matrix @param row The row to copy into (0, 1, 2 or 3) @param vector The `Vector4` copy from **/ public function copyRowFrom(row:Int, vector:Vector4) { switch (row) { case 0: this[0] = vector.x; this[4] = vector.y; this[8] = vector.z; this[12] = vector.w; case 1: this[1] = vector.x; this[5] = vector.y; this[9] = vector.z; this[13] = vector.w; case 2: this[2] = vector.x; this[6] = vector.y; this[10] = vector.z; this[14] = vector.w; case 3: this[3] = vector.x; this[7] = vector.y; this[11] = vector.z; this[15] = vector.w; default: Log.error("Row " + row + " out of bounds [0, ..., 3]"); } } /** Copies a row of data from the current matrix into a `Vector4` instance @param column The row to copy (0, 1, 2 or 3) @param vector The `Vector4` copy to **/ public function copyRowTo(row:Int, vector:Vector4):Void { switch (row) { case 0: vector.x = this[0]; vector.y = this[4]; vector.z = this[8]; vector.w = this[12]; case 1: vector.x = this[1]; vector.y = this[5]; vector.z = this[9]; vector.w = this[13]; case 2: vector.x = this[2]; vector.y = this[6]; vector.z = this[10]; vector.w = this[14]; case 3: vector.x = this[3]; vector.y = this[7]; vector.z = this[11]; vector.w = this[15]; default: Log.error("Row " + row + " out of bounds [0, ..., 3]"); } } /** Resets the current matrix using two-dimensional transform values @param a A two-dimensional matrix a value @param b A two-dimensional matrix b value @param c A two-dimensional matrix c value @param d A two-dimensional matrix d value @param tx (Optional) A two-dimensional matrix tx value (default is 0) @param ty (Optional) A two-dimensional matrix ty value (default is 0) **/ public function create2D(a:Float, b:Float, c:Float, d:Float, tx:Float = 0, ty:Float = 0):Void { this[0] = a; this[1] = b; this[2] = 0; this[3] = 0; this[4] = c; this[5] = d; this[6] = 0; this[7] = 0; this[8] = 0; this[9] = 0; this[10] = 1; this[11] = 0; this[12] = tx; this[13] = ty; this[14] = 0; this[15] = 1; } /** Initializes this matrix with values for an orthographic projection, useful in rendering @param left The left (or x0) coordinate for the projection @param right The right (or x1) coordinate for the projection @param bottom The bottom (or y0) coordinate for the projection @param top The top (or y1) coordinate for the projection @param zNear The near depth-clipping plane position @param zFar The far depth-clipping plane position **/ public function createOrtho(left:Float, right:Float, bottom:Float, top:Float, zNear:Float, zFar:Float):Void { var sx = 1.0 / (right - left); var sy = 1.0 / (top - bottom); var sz = 1.0 / (zFar - zNear); this[0] = 2 * sx; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = 2 * sy; this[6] = 0; this[7] = 0; this[8] = 0; this[9] = 0; this[10] = -2 * sz; this[11] = 0; this[12] = -(left + right) * sx; this[13] = -(bottom + top) * sy; this[14] = -(zNear + zFar) * sz; this[15] = 1; } /** Initializes this matrix with values for a perspective projection @param fov The field of view @param aspect The aspect ratio @param zNear The near depth-clipping plane position @param zFar The far depth-clipping plane position **/ public function createPerspective(fov:Float, aspect:Float, zNear:Float, zFar:Float):Void { if (aspect > -0.0000001 && aspect < 0.0000001) { throw "Aspect ratio may not be 0"; } var top = fov * zNear; var bottom = -top; var right = top * aspect; var left = -right; this[0] = 2.0 * zNear / (right - left); this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = 2.0 * zNear / (top - bottom); this[6] = 0; this[7] = 0; this[8] = (right + left) / (right - left); this[9] = (top + bottom) / (top - bottom); this[10] = -(zFar + zNear) / (zFar - zNear); this[11] = -1.0; this[12] = 0; this[13] = 0; this[14] = -2 * zFar * zNear / (zFar - zNear); this[15] = 1; } /** * Returns the transformation matrix's translation, rotation, and scale settings as a Vector of three Vector4 objects. */ /*public function decompose(?orientationStyle:Orientation3D):Vector { if (orientationStyle==null) orientationStyle = Orientation3D.EULER_ANGLES; var vec = new Vector(); var m = clone(); var mr = m.copy(); var pos = new Vector4 (mr[12], mr[13], mr[14]); mr[12] = 0; mr[13] = 0; mr[14] = 0; var scale = new Vector4 (); scale.x = Math.sqrt(mr[0] * mr[0] + mr[1] * mr[1] + mr[2] * mr[2]); scale.y = Math.sqrt(mr[4] * mr[4] + mr[5] * mr[5] + mr[6] * mr[6]); scale.z = Math.sqrt(mr[8] * mr[8] + mr[9] * mr[9] + mr[10] * mr[10]); if (mr[0] * (mr[5] * mr[10] - mr[6] * mr[9]) - mr[1] * (mr[4] * mr[10] - mr[6] * mr[8]) + mr[2] * (mr[4] * mr[9] - mr[5] * mr[8]) < 0) { scale.z = -scale.z; } mr[0] /= scale.x; mr[1] /= scale.x; mr[2] /= scale.x; mr[4] /= scale.y; mr[5] /= scale.y; mr[6] /= scale.y; mr[8] /= scale.z; mr[9] /= scale.z; mr[10] /= scale.z; var rot = new Vector4 (); switch (orientationStyle) { case Orientation3D.AXIS_ANGLE: rot.w = Math.acos((mr[0] + mr[5] + mr[10] - 1) / 2); var len = Math.sqrt((mr[6] - mr[9]) * (mr[6] - mr[9]) + (mr[8] - mr[2]) * (mr[8] - mr[2]) + (mr[1] - mr[4]) * (mr[1] - mr[4])); rot.x = (mr[6] - mr[9]) / len; rot.y = (mr[8] - mr[2]) / len; rot.z = (mr[1] - mr[4]) / len; case Orientation3D.QUATERNION: var tr = mr[0] + mr[5] + mr[10]; if (tr > 0) { rot.w = Math.sqrt(1 + tr) / 2; rot.x = (mr[6] - mr[9]) / (4 * rot.w); rot.y = (mr[8] - mr[2]) / (4 * rot.w); rot.z = (mr[1] - mr[4]) / (4 * rot.w); } else if ((mr[0] > mr[5]) && (mr[0] > mr[10])) { rot.x = Math.sqrt(1 + mr[0] - mr[5] - mr[10]) / 2; rot.w = (mr[6] - mr[9]) / (4 * rot.x); rot.y = (mr[1] + mr[4]) / (4 * rot.x); rot.z = (mr[8] + mr[2]) / (4 * rot.x); } else if (mr[5] > mr[10]) { rot.y = Math.sqrt(1 + mr[5] - mr[0] - mr[10]) / 2; rot.x = (mr[1] + mr[4]) / (4 * rot.y); rot.w = (mr[8] - mr[2]) / (4 * rot.y); rot.z = (mr[6] + mr[9]) / (4 * rot.y); } else { rot.z = Math.sqrt(1 + mr[10] - mr[0] - mr[5]) / 2; rot.x = (mr[8] + mr[2]) / (4 * rot.z); rot.y = (mr[6] + mr[9]) / (4 * rot.z); rot.w = (mr[1] - mr[4]) / (4 * rot.z); } case Orientation3D.EULER_ANGLES: rot.y = Math.asin(-mr[2]); if (mr[2] != 1 && mr[2] != -1) { rot.x = Math.atan2(mr[6], mr[10]); rot.z = Math.atan2(mr[1], mr[0]); } else { rot.z = 0; rot.x = Math.atan2(mr[4], mr[5]); } } vec.push(pos); vec.push(rot); vec.push(scale); return vec; }*/ /** Transforms a vector using this matrix, ignoring the translation of the matrix @param result (Optional) An existing `Vector4` instance to fill with the result @param v A `Vector4` instance to transform **/ public function deltaTransformVector(v:Vector4, result:Vector4 = null):Vector4 { if (result == null) result = new Vector4(); var x = v.x, y = v.y, z = v.z; result.x = (x * this[0] + y * this[4] + z * this[8] + this[3]); result.y = (x * this[1] + y * this[5] + z * this[9] + this[7]); result.z = (x * this[2] + y * this[6] + z * this[10] + this[11]); return result; } @:from public static function fromMatrix3(matrix3:Matrix3):Matrix4 { var mat = new Matrix4(); mat.create2D(matrix3.a, matrix3.b, matrix3.c, matrix3.d, matrix3.tx, matrix3.ty); return mat; } /** Resets the current matrix using default identity values **/ public function identity():Void { this[0] = 1; this[1] = 0; this[2] = 0; this[3] = 0; this[4] = 0; this[5] = 1; this[6] = 0; this[7] = 0; this[8] = 0; this[9] = 0; this[10] = 1; this[11] = 0; this[12] = 0; this[13] = 0; this[14] = 0; this[15] = 1; } /** Interpolates from one `Matrix4` instance to another, given a percentage between the two @param thisMat The first `Matrix4` object to start from @param toMat The second `Matrix4` object to interpolate toward @param percent The percentage value to interpolate by @param result (Optional) A `Matrix4` instance to use when returning the result @return A `Matrix4` with the resulting value **/ public static function interpolate(thisMat:Matrix4, toMat:Matrix4, percent:Float, result:Matrix4 = null):Matrix4 { if (result == null) result = new Matrix4(); for (i in 0...16) { result[i] = thisMat[i] + (toMat[i] - thisMat[i]) * percent; } return result; } /** Interpolates the current matrix toward another matrix, resetting the values of the current matrix @param toMat The second `Matrix4` object to interpolate toward @param percetn The percentage value to interpolate by **/ public function interpolateTo(toMat:Matrix4, percent:Float):Void { for (i in 0...16) { this[i] = this[i] + (toMat[i] - this[i]) * percent; } } /** Attempts to invert the current matrix, so long as the determinant is greater than zero @return Whether the `invert` operation was successful **/ public function invert():Bool { var d = determinant; var invertable = Math.abs(d) > 0.00000000001; if (invertable) { d = 1 / d; var m11:Float = this[0]; var m21:Float = this[4]; var m31:Float = this[8]; var m41:Float = this[12]; var m12:Float = this[1]; var m22:Float = this[5]; var m32:Float = this[9]; var m42:Float = this[13]; var m13:Float = this[2]; var m23:Float = this[6]; var m33:Float = this[10]; var m43:Float = this[14]; var m14:Float = this[3]; var m24:Float = this[7]; var m34:Float = this[11]; var m44:Float = this[15]; this[0] = d * (m22 * (m33 * m44 - m43 * m34) - m32 * (m23 * m44 - m43 * m24) + m42 * (m23 * m34 - m33 * m24)); this[1] = -d * (m12 * (m33 * m44 - m43 * m34) - m32 * (m13 * m44 - m43 * m14) + m42 * (m13 * m34 - m33 * m14)); this[2] = d * (m12 * (m23 * m44 - m43 * m24) - m22 * (m13 * m44 - m43 * m14) + m42 * (m13 * m24 - m23 * m14)); this[3] = -d * (m12 * (m23 * m34 - m33 * m24) - m22 * (m13 * m34 - m33 * m14) + m32 * (m13 * m24 - m23 * m14)); this[4] = -d * (m21 * (m33 * m44 - m43 * m34) - m31 * (m23 * m44 - m43 * m24) + m41 * (m23 * m34 - m33 * m24)); this[5] = d * (m11 * (m33 * m44 - m43 * m34) - m31 * (m13 * m44 - m43 * m14) + m41 * (m13 * m34 - m33 * m14)); this[6] = -d * (m11 * (m23 * m44 - m43 * m24) - m21 * (m13 * m44 - m43 * m14) + m41 * (m13 * m24 - m23 * m14)); this[7] = d * (m11 * (m23 * m34 - m33 * m24) - m21 * (m13 * m34 - m33 * m14) + m31 * (m13 * m24 - m23 * m14)); this[8] = d * (m21 * (m32 * m44 - m42 * m34) - m31 * (m22 * m44 - m42 * m24) + m41 * (m22 * m34 - m32 * m24)); this[9] = -d * (m11 * (m32 * m44 - m42 * m34) - m31 * (m12 * m44 - m42 * m14) + m41 * (m12 * m34 - m32 * m14)); this[10] = d * (m11 * (m22 * m44 - m42 * m24) - m21 * (m12 * m44 - m42 * m14) + m41 * (m12 * m24 - m22 * m14)); this[11] = -d * (m11 * (m22 * m34 - m32 * m24) - m21 * (m12 * m34 - m32 * m14) + m31 * (m12 * m24 - m22 * m14)); this[12] = -d * (m21 * (m32 * m43 - m42 * m33) - m31 * (m22 * m43 - m42 * m23) + m41 * (m22 * m33 - m32 * m23)); this[13] = d * (m11 * (m32 * m43 - m42 * m33) - m31 * (m12 * m43 - m42 * m13) + m41 * (m12 * m33 - m32 * m13)); this[14] = -d * (m11 * (m22 * m43 - m42 * m23) - m21 * (m12 * m43 - m42 * m13) + m41 * (m12 * m23 - m22 * m13)); this[15] = d * (m11 * (m22 * m33 - m32 * m23) - m21 * (m12 * m33 - m32 * m13) + m31 * (m12 * m23 - m22 * m13)); } return invertable; } /** Sets the matrix values as a transformation orientated toward a certain vector position @param pos A target vector position in absolute coordinates @param at (Optional) A vector relative to this matrix which defines the current direction @param up (Optional) A vector relative to this matrix which defines the "up" direction **/ public function pointAt(pos:Vector4, at:Vector4 = null, up:Vector4 = null):Void { // TODO: This implementation is broken if (at == null) { at = new Vector4(0, 0, 1); } if (up == null) { up = new Vector4(0, 1, 0); } var dir = pos.subtract(at); var vup = up.clone(); var right:Vector4; dir.normalize(); vup.normalize(); var dir2 = dir.clone(); dir2.scaleBy(vup.dotProduct(dir)); vup = vup.subtract(dir2); if (vup.length > 0) { vup.normalize(); } else { if (dir.x != 0) { vup = new Vector4(-dir.y, dir.x, 0); } else { vup = new Vector4(1, 0, 0); } } right = vup.crossProduct(dir); right.normalize(); this[0] = right.x; this[4] = right.y; this[8] = right.z; this[12] = 0.0; this[1] = vup.x; this[5] = vup.y; this[9] = vup.z; this[13] = 0.0; this[2] = dir.x; this[6] = dir.y; this[10] = dir.z; this[14] = 0.0; this[3] = pos.x; this[7] = pos.y; this[11] = pos.z; this[15] = 1.0; } /** Prepends a right-hand matrix to the current matrix @param rhx A right-hand `Matrix4` to append **/ public function prepend(rhs:Matrix4):Void { var m111:Float = rhs[0], m121:Float = rhs[4], m131:Float = rhs[8], m141:Float = rhs[12], m112:Float = rhs[1], m122:Float = rhs[5], m132:Float = rhs[9], m142:Float = rhs[13], m113:Float = rhs[2], m123:Float = rhs[6], m133:Float = rhs[10], m143:Float = rhs[14], m114:Float = rhs[3], m124:Float = rhs[7], m134:Float = rhs[11], m144:Float = rhs[15], m211:Float = this[0], m221:Float = this[4], m231:Float = this[8], m241:Float = this[12], m212:Float = this[1], m222:Float = this[5], m232:Float = this[9], m242:Float = this[13], m213:Float = this[2], m223:Float = this[6], m233:Float = this[10], m243:Float = this[14], m214:Float = this[3], m224:Float = this[7], m234:Float = this[11], m244:Float = this[15]; this[0] = m111 * m211 + m112 * m221 + m113 * m231 + m114 * m241; this[1] = m111 * m212 + m112 * m222 + m113 * m232 + m114 * m242; this[2] = m111 * m213 + m112 * m223 + m113 * m233 + m114 * m243; this[3] = m111 * m214 + m112 * m224 + m113 * m234 + m114 * m244; this[4] = m121 * m211 + m122 * m221 + m123 * m231 + m124 * m241; this[5] = m121 * m212 + m122 * m222 + m123 * m232 + m124 * m242; this[6] = m121 * m213 + m122 * m223 + m123 * m233 + m124 * m243; this[7] = m121 * m214 + m122 * m224 + m123 * m234 + m124 * m244; this[8] = m131 * m211 + m132 * m221 + m133 * m231 + m134 * m241; this[9] = m131 * m212 + m132 * m222 + m133 * m232 + m134 * m242; this[10] = m131 * m213 + m132 * m223 + m133 * m233 + m134 * m243; this[11] = m131 * m214 + m132 * m224 + m133 * m234 + m134 * m244; this[12] = m141 * m211 + m142 * m221 + m143 * m231 + m144 * m241; this[13] = m141 * m212 + m142 * m222 + m143 * m232 + m144 * m242; this[14] = m141 * m213 + m142 * m223 + m143 * m233 + m144 * m243; this[15] = m141 * m214 + m142 * m224 + m143 * m234 + m144 * m244; } /** Prepends rotation to this matrix @param degrees The rotation amount in degrees @param axis The rotation axis @param pivotPoint (Optional) A pivot point for the rotation **/ public function prependRotation(degrees:Float, axis:Vector4, pivotPoint:Vector4 = null):Void { var m = __getAxisRotation(axis.x, axis.y, axis.z, degrees); if (pivotPoint != null) { var p = pivotPoint; m.appendTranslation(p.x, p.y, p.z); } prepend(m); } /** Prepends scale to this matrix @param xScale An x scale value @param yScale A y scale value @param zScale A z scale value **/ public function prependScale(xScale:Float, yScale:Float, zScale:Float):Void { prepend(new Matrix4(new Float32Array([ xScale, 0.0, 0.0, 0.0, 0.0, yScale, 0.0, 0.0, 0.0, 0.0, zScale, 0.0, 0.0, 0.0, 0.0, 1.0 ]))); } /** Prepends translation values to this matrix @param x An x translation value @param y A y translation value @param z A z translation value **/ public function prependTranslation(x:Float, y:Float, z:Float):Void { var m = new Matrix4(); m.position = new Vector4(x, y, z); prepend(m); } /*public function recompose (components:Vector, ?orientationStyle:Orientation3D ):Bool { if (components.length < 3 || components[2].x == 0 || components[2].y == 0 || components[2].z == 0) return false; if (orientationStyle == null) orientationStyle = Orientation3D.EULER_ANGLES; identity(); var scale = []; scale[0] = scale[1] = scale[2] = components[2].x; scale[4] = scale[5] = scale[6] = components[2].y; scale[8] = scale[9] = scale[10] = components[2].z; switch (orientationStyle) { case Orientation3D.EULER_ANGLES: var cx = Math.cos(components[1].x); var cy = Math.cos(components[1].y); var cz = Math.cos(components[1].z); var sx = Math.sin(components[1].x); var sy = Math.sin(components[1].y); var sz = Math.sin(components[1].z); this[0]=cy*cz*scale[0]; this[1]=cy*sz*scale[1]; this[2]=- sy*scale[2]; this[3]=0; this[4] = (sx*sy*cz-cx*sz)*scale[4]; this[5] = (sx*sy*sz+cx*cz)*scale[5]; this[6]=sx*cy*scale[6]; this[7]=0; this[8] = (cx*sy*cz+sx*sz)*scale[8]; this[9] = (cx*sy*sz-sx*cz)*scale[9]; this[10]=cx*cy*scale[10]; this[11]=0; this[12]=components[0].x; this[13]=components[0].y; this[14]=components[0].z; this[15]=1; default: var x = components[1].x; var y = components[1].y; var z = components[1].z; var w = components[1].w; if (Type.enumEq(orientationStyle, Orientation3D.AXIS_ANGLE)) { x *= Math.sin(w/2); y *= Math.sin(w/2); z *= Math.sin(w/2); w = Math.cos(w/2); } this[0] = (1-2*y*y-2*z*z)*scale[0]; this[1] = (2*x*y+2*w*z)*scale[1]; this[2] = (2*x*z-2*w*y)*scale[2]; this[3] = 0; this[4] = (2*x*y-2*w*z)*scale[4]; this[5] = (1-2*x*x-2*z*z)*scale[5]; this[6] = (2*y*z+2*w*x)*scale[6]; this[7] = 0; this[8] = (2*x*z+2*w*y)*scale[8]; this[9] = (2*y*z-2*w*x)*scale[9]; this[10] = (1-2*x*x-2*y*y)*scale[10]; this[11] = 0; this[12] = components[0].x; this[13] = components[0].y; this[14] = components[0].z; this[15] = 1; } if (components[2].x == 0) this[0] = 1e-15; if (components[2].y == 0) this[5] = 1e-15; if (components[2].z == 0) this[10] = 1e-15; return !(components[2].x == 0 || components[2].y == 0 || components[2].y == 0); }*/ /** Transforms a `Vector4` instance using the current matrix @param result (Optional) An existing `Vector2` instance to fill with the result @return The resulting `Vector4` instance **/ public function transformVector(v:Vector4, result:Vector4 = null):Vector4 { if (result == null) result = new Vector4(); var x = v.x, y = v.y, z = v.z; result.x = (x * this[0] + y * this[4] + z * this[8] + this[12]); result.y = (x * this[1] + y * this[5] + z * this[9] + this[13]); result.z = (x * this[2] + y * this[6] + z * this[10] + this[14]); result.w = (x * this[3] + y * this[7] + z * this[11] + this[15]); return result; } /** Transforms a series of [x, y, z] value pairs at once @param ain An input `Float32Array` to transform @param aout An output `Float32Array` to write to **/ public function transformVectors(ain:Float32Array, aout:Float32Array):Void { var i = 0; var x:Float, y:Float, z:Float; while (i + 3 <= ain.length) { x = ain[i]; y = ain[i + 1]; z = ain[i + 2]; aout[i] = x * this[0] + y * this[4] + z * this[8] + this[12]; aout[i + 1] = x * this[1] + y * this[5] + z * this[9] + this[13]; aout[i + 2] = x * this[2] + y * this[6] + z * this[10] + this[14]; i += 3; } } /** Transposes the current matrix **/ public function transpose():Void { __swap(1, 4); __swap(2, 8); __swap(3, 12); __swap(6, 9); __swap(7, 13); __swap(11, 14); } @:noCompletion private function __getAxisRotation(x:Float, y:Float, z:Float, degrees:Float):Matrix4 { var m = new Matrix4(); var a1 = new Vector4(x, y, z); var rad = -degrees * (Math.PI / 180); var c = Math.cos(rad); var s = Math.sin(rad); var t = 1.0 - c; m[0] = c + a1.x * a1.x * t; m[5] = c + a1.y * a1.y * t; m[10] = c + a1.z * a1.z * t; var tmp1 = a1.x * a1.y * t; var tmp2 = a1.z * s; m[4] = tmp1 + tmp2; m[1] = tmp1 - tmp2; tmp1 = a1.x * a1.z * t; tmp2 = a1.y * s; m[8] = tmp1 - tmp2; m[2] = tmp1 + tmp2; tmp1 = a1.y * a1.z * t; tmp2 = a1.x * s; m[9] = tmp1 + tmp2; m[6] = tmp1 - tmp2; return m; } @:noCompletion private inline function __swap(a:Int, b:Int):Void { var temp = this[a]; this[a] = this[b]; this[b] = temp; } // Getters & Setters @:noCompletion private function get_determinant():Float { return 1 * ((this[0] * this[5] - this[4] * this[1]) * (this[10] * this[15] - this[14] * this[11]) - (this[0] * this[9] - this[8] * this[1]) * (this[6] * this[15] - this[14] * this[7]) + (this[0] * this[13] - this[12] * this[1]) * (this[6] * this[11] - this[10] * this[7]) + (this[4] * this[9] - this[8] * this[5]) * (this[2] * this[15] - this[14] * this[3]) - (this[4] * this[13] - this[12] * this[5]) * (this[2] * this[11] - this[10] * this[3]) + (this[8] * this[13] - this[12] * this[9]) * (this[2] * this[7] - this[6] * this[3])); } @:noCompletion private function get_position():Vector4 { return new Vector4(this[12], this[13], this[14]); } @:noCompletion private function set_position(val:Vector4):Vector4 { this[12] = val.x; this[13] = val.y; this[14] = val.z; return val; } @:dox(hide) @:noCompletion @:arrayAccess public function get(index:Int):Float { return this[index]; } @:dox(hide) @:noCompletion @:arrayAccess public function set(index:Int, value:Float):Float { this[index] = value; return value; } } ================================================ FILE: src/lime/math/RGBA.hx ================================================ package lime.math; import lime.graphics.PixelFormat; import lime.utils.UInt32Array; import lime.utils.UInt8Array; /** A utility for storing, accessing and converting colors in an RGBA (red, green, blue, alpha) color format. ```haxe var color:RGBA = 0x883300FF; trace (color.r); // 0x88 trace (color.g); // 0x33 trace (color.b); // 0x00 trace (color.a); // 0xFF var convert:ARGB = color; // 0xFF883300 ``` **/ @:allow(lime.math) @:transitive abstract RGBA(#if (flash && !lime_doc_gen) Int #else UInt #end) from Int to Int from UInt to UInt { private static var __alpha16:UInt32Array; private static var __clamp:UInt8Array; private static var a16:Int; private static var unmult:Float; /** Accesses the alpha component of the color **/ public var a(get, set):Int; /** Accesses the blue component of the color **/ public var b(get, set):Int; /** Accesses the green component of the color **/ public var g(get, set):Int; /** Accesses the red component of the color **/ public var r(get, set):Int; private static function __init__():Void { #if (js && modular) __initColors(); #else __alpha16 = new UInt32Array(256); for (i in 0...256) { __alpha16[i] = Math.ceil((i) * ((1 << 16) / 0xFF)); } __clamp = new UInt8Array(0xFF + 0xFF + 1); for (i in 0...0xFF) { __clamp[i] = i; } for (i in 0xFF...(0xFF + 0xFF + 1)) { __clamp[i] = 0xFF; } #end } #if (js && modular) private static function __initColors() { __alpha16 = new UInt32Array(256); for (i in 0...256) { __alpha16[i] = Math.ceil((i) * ((1 << 16) / 0xFF)); } __clamp = new UInt8Array(0xFF + 0xFF); for (i in 0...0xFF) { __clamp[i] = i; } for (i in 0xFF...(0xFF + 0xFF + 1)) { __clamp[i] = 0xFF; } } #end /** Creates a new RGBA instance @param rgba (Optional) An RGBA color value **/ public inline function new(rgba:Int = 0) { this = rgba; } /** Creates a new RGBA instance from component values @param r A red component value @param g A green component value @param b A blue component value @param a An alpha component value @return A new RGBA instance **/ public static inline function create(r:Int, g:Int, b:Int, a:Int):RGBA { var rgba = new RGBA(); rgba.set(r, g, b, a); return rgba; } /** Multiplies the red, green and blue components by the current alpha component **/ public inline function multiplyAlpha() { if (a == 0) { if (this != 0) { this = 0; } } else if (a != 0xFF) { a16 = __alpha16[a]; set((r * a16) >> 16, (g * a16) >> 16, (b * a16) >> 16, a); } } /** Reads a value from a `UInt8Array` into the current `RGBA` color @param data A `UInt8Array` instance @param offset An offset into the `UInt8Array` to read @param format (Optional) The `PixelFormat` represented by the `UInt8Array` data @param premultiplied (Optional) Whether the data is stored in premultiplied alpha format **/ public inline function readUInt8(data:UInt8Array, offset:Int, format:PixelFormat = RGBA32, premultiplied:Bool = false):Void { switch (format) { case BGRA32: set(data[offset + 2], data[offset + 1], data[offset], data[offset + 3]); case RGBA32: set(data[offset], data[offset + 1], data[offset + 2], data[offset + 3]); case ARGB32: set(data[offset + 1], data[offset + 2], data[offset + 3], data[offset]); } if (premultiplied) { unmultiplyAlpha(); } } /** Sets the current `RGBA` color to new component values @param r The red component value to set @param g The green component value to set @param b The blue component vlaue to set @param a The alpha component value to set **/ public inline function set(r:Int, g:Int, b:Int, a:Int):Void { this = ((r & 0xFF) << 24) | ((g & 0xFF) << 16) | ((b & 0xFF) << 8) | (a & 0xFF); } /** Divides the current red, green and blue components by the alpha component **/ public inline function unmultiplyAlpha() { if (a != 0 && a != 0xFF) { unmult = 255.0 / a; set(__clamp[Math.round(r * unmult)], __clamp[Math.round(g * unmult)], __clamp[Math.round(b * unmult)], a); } } /** Writes the current `RGBA` color into a `UInt8Array` @param data A `UInt8Array` instance @param offset An offset into the `UInt8Array` to write @param format (Optional) The `PixelFormat` represented by the `UInt8Array` data @param premultiplied (Optional) Whether the data is stored in premultiplied alpha format **/ public inline function writeUInt8(data:UInt8Array, offset:Int, format:PixelFormat = RGBA32, premultiplied:Bool = false):Void { if (premultiplied) { multiplyAlpha(); } switch (format) { case BGRA32: data[offset] = b; data[offset + 1] = g; data[offset + 2] = r; data[offset + 3] = a; case RGBA32: data[offset] = r; data[offset + 1] = g; data[offset + 2] = b; data[offset + 3] = a; case ARGB32: data[offset] = a; data[offset + 1] = r; data[offset + 2] = g; data[offset + 3] = b; } } @:from private static inline function __fromARGB(argb:ARGB):RGBA { return RGBA.create(argb.r, argb.g, argb.b, argb.a); } @:from private static inline function __fromBGRA(bgra:BGRA):RGBA { return RGBA.create(bgra.r, bgra.g, bgra.b, bgra.a); } // Get & Set Methods @:noCompletion private inline function get_a():Int { return this & 0xFF; } @:noCompletion private inline function set_a(value:Int):Int { set(r, g, b, value); return value; } @:noCompletion private inline function get_b():Int { return (this >> 8) & 0xFF; } @:noCompletion private inline function set_b(value:Int):Int { set(r, g, value, a); return value; } @:noCompletion private inline function get_g():Int { return (this >> 16) & 0xFF; } @:noCompletion private inline function set_g(value:Int):Int { set(r, value, b, a); return value; } @:noCompletion private inline function get_r():Int { return (this >> 24) & 0xFF; } @:noCompletion private inline function set_r(value:Int):Int { set(value, g, b, a); return value; } } ================================================ FILE: src/lime/math/Rectangle.hx ================================================ package lime.math; #if flash import flash.geom.Rectangle as FlashRectangle; #end /** The `Rectangle` class provides a simple object for storing and manipulating a logical rectangle for calculations **/ #if hl @:keep #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Rectangle { /** Get or set the bottom (y + height) value of the `Rectangle` **/ public var bottom(get, set):Float; /** Get or set the bottom-right (x + width, y + height) as a `Vector2` **/ public var bottomRight(get, set):Vector2; /** Get or set the height of the rectangle **/ public var height:Float; /** Get or set the left (x) of the rectangle **/ public var left(get, set):Float; /** Get or set the right (x + width) of the rectangle **/ public var right(get, set):Float; /** Get or set the size (width, height) as a `Vector2` **/ public var size(get, set):Vector2; /** Get or set the top (y) of the rectangle **/ public var top(get, set):Float; /** Get or set the top-left (x, y) as a `Vector2` **/ public var topLeft(get, set):Vector2; /** Get or set the width of the rectangle **/ public var width:Float; /** Get or set the x of the rectangle **/ public var x:Float; /** Get or set the y of the rectangle **/ public var y:Float; /** Create a new `Rectangle` instance @param x (Optional) Initial x value (default is 0) @param y (Optional) Initial y value (default is 0) @param width (Optional) Initial width value (default is 0) @param height (Optional) Initial height value (default is 0) **/ public function new(x:Float = 0, y:Float = 0, width:Float = 0, height:Float = 0):Void { this.x = x; this.y = y; this.width = width; this.height = height; } /** Creates a clone of this `Rectangle` @return A new `Rectangle` instance **/ public function clone():Rectangle { return new Rectangle(x, y, width, height); } /** Returns whether this rectangle contains the specified (x, y) point @param x The x coordinate to test @param y The y coordinate to test @return Whether the point is contained in the rectangle **/ public function contains(x:Float, y:Float):Bool { return x >= this.x && y >= this.y && x < right && y < bottom; } @:dox(hide) @:noCompletion @:deprecated("Use containsVector") public function containsPoint(point:Vector2):Bool { return containsVector(point); } /** Returns whether this rectangle contains another rectangle This will return `false` if the second rectangle only overlaps but is not fully contained within the current rectangle @param rect A second `Rectangle` instance to test @return Whether the `rect` is contained within the current `Rectangle` **/ public function containsRect(rect:Rectangle):Bool { if (rect.width <= 0 || rect.height <= 0) { return rect.x > x && rect.y > y && rect.right < right && rect.bottom < bottom; } else { return rect.x >= x && rect.y >= y && rect.right <= right && rect.bottom <= bottom; } } /** Returns whether this rectangle contains the specified vector @param vector The vector to test @return Whether the vector is contained in the rectangle **/ public function containsVector(vector:Vector2):Bool { return contains(vector.x, vector.y); } /** Copies the x, y, width and height of another `Rectangle` @param sourceRect Another `Rectangle` instance **/ public function copyFrom(sourceRect:Rectangle):Void { x = sourceRect.x; y = sourceRect.y; width = sourceRect.width; height = sourceRect.height; } /** Checks whether the current `Rectangle` and another instance have equal values @param toCompare Another `Rectangle` to compare with @return Whether both rectangles are not `null` and have equal values **/ public function equals(toCompare:Rectangle):Bool { return toCompare != null && x == toCompare.x && y == toCompare.y && width == toCompare.width && height == toCompare.height; } /** Increases the size of the current rectangle by the given delta x and y values @param dx A delta x value to increase the size by @param dy A delta y value to increase the size by **/ public function inflate(dx:Float, dy:Float):Void { x -= dx; width += dx * 2; y -= dy; height += dy * 2; } /** Increases the size of the current rectangle by the given delta vector values @param vector A delta vector to increase the size by **/ public function inflateVector(vector:Vector2):Void { inflate(vector.x, vector.y); } /** Returns a new rectangle with the area where the current `Rectangle` and another `Rectangle` instance overlap. If they do not overlap, the returned `Rectangle` will be empty @param toIntersect Another `Rectangle` instance to intersect with @param result (Optional) A `Rectangle` instance to use for the result @return A `Rectangle` of the intersection area **/ public function intersection(toIntersect:Rectangle, result:Rectangle = null):Rectangle { if (result == null) result = new Rectangle(); var x0 = x < toIntersect.x ? toIntersect.x : x; var x1 = right > toIntersect.right ? toIntersect.right : right; if (x1 <= x0) { result.setEmpty(); return result; } var y0 = y < toIntersect.y ? toIntersect.y : y; var y1 = bottom > toIntersect.bottom ? toIntersect.bottom : bottom; if (y1 <= y0) { result.setEmpty(); return result; } result.x = x0; result.y = y0; result.width = x1 - x0; result.height = y1 - y0; return result; } /** Returns if the current `Rectangle` overlaps with another instance @param toIntersect Another `Rectangle` to compare with @return Whether the rectangles intersect **/ public function intersects(toIntersect:Rectangle):Bool { var x0 = x < toIntersect.x ? toIntersect.x : x; var x1 = right > toIntersect.right ? toIntersect.right : right; if (x1 <= x0) { return false; } var y0 = y < toIntersect.y ? toIntersect.y : y; var y1 = bottom > toIntersect.bottom ? toIntersect.bottom : bottom; return y1 > y0; } /** Whether this rectangle is empty @return `true` if the width or height is <= 0 **/ public function isEmpty():Bool { return (width <= 0 || height <= 0); } /** Moves the rectangle by offset x and values @param dx A delta x value @param dy A delta y value **/ public function offset(dx:Float, dy:Float):Void { x += dx; y += dy; } /** Moves the rectangle by the values of a `Vector2` @param dx A delta vector **/ public function offsetVector(vector:Vector2):Void { x += vector.x; y += vector.y; } /** Makes this rectangle empty **/ public function setEmpty():Void { x = y = width = height = 0; } /** Sets the values of this rectangle at once @param xa A new x value @param ya A new y value @param widtha A new width value @param heighta A new height value **/ public function setTo(xa:Float, ya:Float, widtha:Float, heighta:Float):Void { x = xa; y = ya; width = widtha; height = heighta; } /** Combines two rectangles together, returning the minimum `Rectangle` that contains both rectangles @param toUnion A second `Rectangle` to unify @param result (Optional) A `Rectangle` instance for the result @return A `Rectangle` that contains the dimensions of both rectangles **/ public function union(toUnion:Rectangle, result:Rectangle = null):Rectangle { if (result == null) result = new Rectangle(); if (width == 0 || height == 0) { result.copyFrom(toUnion); } else if (toUnion.width == 0 || toUnion.height == 0) { result.copyFrom(this); } else { var x0 = x > toUnion.x ? toUnion.x : x; var x1 = right < toUnion.right ? toUnion.right : right; var y0 = y > toUnion.y ? toUnion.y : y; var y1 = bottom < toUnion.bottom ? toUnion.bottom : bottom; result.setTo(x0, y0, x1 - x0, y1 - y0); } return result; } @:noCompletion private function __toFlashRectangle():#if flash FlashRectangle #else Dynamic #end { #if flash return new FlashRectangle(x, y, width, height); #else return null; #end } // Getters & Setters @:noCompletion private function get_bottom():Float { return y + height; } @:noCompletion private function set_bottom(b:Float):Float { height = b - y; return b; } @:noCompletion private function get_bottomRight():Vector2 { return new Vector2(x + width, y + height); } @:noCompletion private function set_bottomRight(p:Vector2):Vector2 { width = p.x - x; height = p.y - y; return p.clone(); } @:noCompletion private function get_left():Float { return x; } @:noCompletion private function set_left(l:Float):Float { width -= l - x; x = l; return l; } @:noCompletion private function get_right():Float { return x + width; } @:noCompletion private function set_right(r:Float):Float { width = r - x; return r; } @:noCompletion private function get_size():Vector2 { return new Vector2(width, height); } @:noCompletion private function set_size(p:Vector2):Vector2 { width = p.x; height = p.y; return p.clone(); } @:noCompletion private function get_top():Float { return y; } @:noCompletion private function set_top(t:Float):Float { height -= t - y; y = t; return t; } @:noCompletion private function get_topLeft():Vector2 { return new Vector2(x, y); } @:noCompletion private function set_topLeft(p:Vector2):Vector2 { x = p.x; y = p.y; return p.clone(); } } ================================================ FILE: src/lime/math/Vector2.hx ================================================ package lime.math; #if flash import flash.geom.Point; #end /** The `Vector2` class can be used for calculating math with basic (x, y) coordinates **/ #if hl @:keep #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Vector2 { /** Gets the length of this vector from (0, 0) to (x, y) **/ public var length(get, never):Float; /** Gets the square of the length of this vector, which avoids use of `Math.sqrt` for faster performance **/ public var lengthSquared(get, never):Float; /** The x coodinate for this vector **/ public var x:Float; /** The y coodinate for this vector **/ public var y:Float; /** Creates a new `Vector` instance @param x (Optional) An initial `x` value (default is 0) @param y (Optional) An initial `y` value (default is 0) **/ public function new(x:Float = 0, y:Float = 0) { this.x = x; this.y = y; } /** Adds the current vector to a second `Vector2` instance and returns the result @param v A `Vector2` instance to add @param result (Optional) A `Vector2` instance to store the result @return A `Vector2` instance that combines both vector values **/ public function add(v:Vector2, result:Vector2 = null):Vector2 { if (result == null) result = new Vector2(); result.setTo(v.x + x, v.y + y); return result; } /** Clones the current `Vector2` @return A new `Vector2` instance with the same values as the current one **/ public function clone():Vector2 { return new Vector2(x, y); } /** Calculates the distance between two `Vector2` points @param pt1 A `Vector2` instance @param pt2 A second `Vector2` instance @return The distance between each `Vector2` **/ public static function distance(pt1:Vector2, pt2:Vector2):Float { var dx = pt1.x - pt2.x; var dy = pt1.y - pt2.y; return Math.sqrt(dx * dx + dy * dy); } /** Whether this `Vector2` has the same values as another instance @param toCompare A `Vector2` instance to compare against @return Whether the values of each vector are equal **/ public function equals(toCompare:Vector2):Bool { return toCompare != null && toCompare.x == x && toCompare.y == y; } /** Interpolates between two points, given a specified percentage value @param pt1 A `Vector2` instance @param pt2 A second `Vector2` instance @param f A percentage value to interpolate @param result (Optional) A `Vector2` instance to use for the result @return A `Vector2` instance holding the interpolated value **/ public static function interpolate(pt1:Vector2, pt2:Vector2, f:Float, result:Vector2 = null):Vector2 { if (result == null) result = new Vector2(); result.setTo(pt2.x + f * (pt1.x - pt2.x), pt2.y + f * (pt1.y - pt2.y)); return result; } /** Normalizes this vector between the current length and a set scale value @param thickness The scaling value. . For example, if the current vector is `(0, 5)` and you normalize it to 1, the normalized value will be `(0, 1)` **/ public function normalize(thickness:Float):Void { if (x == 0 && y == 0) { return; } else { var norm = thickness / Math.sqrt(x * x + y * y); x *= norm; y *= norm; } } /** Offsets the current value of this vector @param dx An offset x value @param dy An offset y value **/ public function offset(dx:Float, dy:Float):Void { x += dx; y += dy; } /** Converts a polar coordinate to into a cartesian `Vector2` instance @param len The length of the polar value @param angle The angle of the polar value @param result (Optional) A `Vector2` instance to store the result @return A `Vector2` instance in cartesian coordinates **/ public static function polar(len:Float, angle:Float, result:Vector2 = null):Vector2 { if (result == null) result = new Vector2(); result.setTo(len * Math.cos(angle), len * Math.sin(angle)); return result; } /** Sets this `Vector2` to new values @param xa An `x` value @param ya A `y` value **/ public inline function setTo(xa:Float, ya:Float):Void { x = xa; y = ya; } /** Subtracts the current vector from another `Vector2` instance @param v A `Vector2` instance to subtract from the current vector @param result (Optional) A `Vector2` instance to store the result @return A `Vector2` instance containing the subtracted values **/ public function subtract(v:Vector2, result:Vector2 = null):Vector2 { if (result == null) result = new Vector2(); result.setTo(x - v.x, y - v.y); return result; } @:noCompletion private function __toFlashPoint():#if flash Point #else Dynamic #end { #if flash return new Point(x, y); #else return null; #end } // Getters & Setters @:noCompletion private function get_length():Float { return Math.sqrt(x * x + y * y); } @:noCompletion private function get_lengthSquared():Float { return (x * x + y * y); } } ================================================ FILE: src/lime/math/Vector4.hx ================================================ package lime.math; /** `Vector4` is a vector suitable for three-dimensional math, containing (x, y, z, w) components **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Vector4 { /** A constant representing the x axis (1, 0, 0) **/ public static var X_AXIS(get, never):Vector4; /** A constant representing the y axis (0, 1, 0) **/ public static var Y_AXIS(get, never):Vector4; /** A constant representing the z axis (0, 0, 1) **/ public static var Z_AXIS(get, never):Vector4; /** Get the length of this vector **/ public var length(get, never):Float; /** Get the squared length of this vector (avoiding the use of `Math.sqrt` for faster performance) **/ public var lengthSquared(get, never):Float; /** The w component value **/ public var w:Float; /** The x component value **/ public var x:Float; /** The y component value **/ public var y:Float; /** The z component value **/ public var z:Float; /** Creates a new `Vector4` instance @param x (Optional) An initial x value (default is 0) @param y (Optional) An initial y value (default is 0) @param z (Optional) An initial z value (default is 0) @param w (Optional) An initial w value (default is 0) **/ public function new(x:Float = 0., y:Float = 0., z:Float = 0., w:Float = 0.) { this.w = w; this.x = x; this.y = y; this.z = z; } /** Adds two `Vector4` instances together and returns the result @param a A `Vector4` instance to add to the current one @param result (Optional) A `Vector4` instance to store the result @return A `Vector4` instance with the added value **/ public inline function add(a:Vector4, result:Vector4 = null):Vector4 { if (result == null) result = new Vector4(); result.setTo(this.x + a.x, this.y + a.y, this.z + a.z); return result; } /** Calculates the angle between two `Vector4` coordinates @param a A `Vector4` instance @param b A second `Vector4` instance @return The calculated angle **/ public static inline function angleBetween(a:Vector4, b:Vector4):Float { var a0 = a.clone(); a0.normalize(); var b0 = b.clone(); b0.normalize(); return Math.acos(a0.dotProduct(b0)); } /** Creates a new `Vector4` instance with the same values as the current one @return A new `Vector4` instance with the same values **/ public inline function clone():Vector4 { return new Vector4(x, y, z, w); } /** Copies the x, y and z component values of another `Vector4` instance @param sourceVector4 A `Vector4` instance to copy from **/ public inline function copyFrom(sourceVector4:Vector4):Void { x = sourceVector4.x; y = sourceVector4.y; z = sourceVector4.z; } /** Performs vector multiplication between this vector and another `Vector4` instance @param a A `Vector4` instance to multiply by @param result (Optional) A `Vector4` to use for the result @return A `Vector4` instance with the result **/ public inline function crossProduct(a:Vector4, result:Vector4 = null):Vector4 { if (result == null) result = new Vector4(); result.setTo(y * a.z - z * a.y, z * a.x - x * a.z, x * a.y - y * a.x); result.w = 1; return result; } /** Decrements the x, y and z component values by those in another `Vector4` instance @param a A `Vector4` instance to decrement the current vector by **/ public inline function decrementBy(a:Vector4):Void { x -= a.x; y -= a.y; z -= a.z; } /** Calculates the distance between two vectors @param pt1 A `Vector4` instance @param pt2 A second `Vector4` instance @return The distance between each vector **/ public inline static function distance(pt1:Vector4, pt2:Vector4):Float { var x = pt2.x - pt1.x; var y = pt2.y - pt1.y; var z = pt2.z - pt1.z; return Math.sqrt(x * x + y * y + z * z); } /** Calculates the squared distance between two vectors, (avoids the use of `Math.sqrt` for faster performance) @param pt1 A `Vector4` instance @param pt2 A second `Vector4` instance @return The square of the distance between each vector **/ public inline static function distanceSquared(pt1:Vector4, pt2:Vector4):Float { var x = pt2.x - pt1.x; var y = pt2.y - pt1.y; var z = pt2.z - pt1.z; return x * x + y * y + z * z; } /** Calculates the dot product of the current vector with another `Vector4` instance @param a A `Vector4` instance to use in the dot product @return The calculated dot product value **/ public inline function dotProduct(a:Vector4):Float { return x * a.x + y * a.y + z * a.z; } /** Whether two `Vector4` instances have equal component values. Comparing the w component value is optional. @param toCompare A `Vector4` instance to compare against @param allFour (Optional) Whether to compare against the w component (default is false) @return Whether both instances have equal values **/ public inline function equals(toCompare:Vector4, ?allFour:Bool = false):Bool { return x == toCompare.x && y == toCompare.y && z == toCompare.z && (!allFour || w == toCompare.w); } /** Increments the x, y and z component values by those in a second `Vector4` instance @param a A `Vector4` instance to increment the current vector by **/ public inline function incrementBy(a:Vector4):Void { x += a.x; y += a.y; z += a.z; } /** Whether two `Vector4` instances have nearly equal component values. Comparison is performed within a given tolerance value. @param toCompare A `Vector4` instance to compare against @param tolerance A floating point value determining how near the values must be to be considered near equal @param allFour (Optional) Whether to compare against the w component (default is false) @return Whether both instances have equal values, within the given tolerance **/ public inline function nearEquals(toCompare:Vector4, tolerance:Float, ?allFour:Bool = false):Bool { return Math.abs(x - toCompare.x) < tolerance && Math.abs(y - toCompare.y) < tolerance && Math.abs(z - toCompare.z) < tolerance && (!allFour || Math.abs(w - toCompare.w) < tolerance); } /** Negates the x, y and z values of the current vector (multiplying each value by -1) **/ public inline function negate():Void { x *= -1; y *= -1; z *= -1; } /** Divides the x, y and z component values by the length of the vector **/ public inline function normalize():Float { var l = length; if (l != 0) { x /= l; y /= l; z /= l; } return l; } /** Divides the x, y and z component values by the w component value **/ public inline function project():Void { x /= w; y /= w; z /= w; } /** Scales the x, y and z component values by a scale value @param s The amount of scale to apply **/ public inline function scaleBy(s:Float):Void { x *= s; y *= s; z *= s; } /** Sets the x, y and z component values @param xa An x value @param ya A y value @param za A z value **/ public inline function setTo(xa:Float, ya:Float, za:Float):Void { x = xa; y = ya; z = za; } /** Subtracts the values of a second `Vector4` instance from the current one @param a A second `Vector4` instance to substract @param result (Optional) A `Vector4` instance to store the result @return A `Vector4` instance containing the subtracted value **/ public inline function subtract(a:Vector4, result:Vector4 = null):Vector4 { if (result == null) result = new Vector4(); result.setTo(x - a.x, y - a.y, z - a.z); return result; } @:dox(hide) public inline function toString():String { return "Vector4(" + x + ", " + y + ", " + z + ")"; } // Getters & Setters @:noCompletion private inline function get_length():Float { return Math.sqrt(x * x + y * y + z * z); } @:noCompletion private inline function get_lengthSquared():Float { return x * x + y * y + z * z; } private inline static function get_X_AXIS():Vector4 { return new Vector4(1, 0, 0); } private inline static function get_Y_AXIS():Vector4 { return new Vector4(0, 1, 0); } private inline static function get_Z_AXIS():Vector4 { return new Vector4(0, 0, 1); } } ================================================ FILE: src/lime/media/AudioBuffer.hx ================================================ package lime.media; import haxe.io.Bytes; import haxe.io.Path; import lime._internal.backend.native.NativeCFFI; import lime._internal.format.Base64; import lime.app.Future; import lime.app.Promise; import lime.media.openal.AL; import lime.media.openal.ALBuffer; import lime.media.vorbis.VorbisFile; import lime.net.HTTPRequest; import lime.utils.Log; import lime.utils.UInt8Array; #if lime_howlerjs import lime.media.howlerjs.Howl; #end #if (js && html5) import js.html.Audio; #elseif flash import flash.media.Sound; import flash.net.URLRequest; #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.utils.Assets) #if hl @:keep #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end /** The `AudioBuffer` class represents a buffer of audio data that can be played back using an `AudioSource`. It supports a variety of audio formats and platforms, providing a consistent API for loading and managing audio data. Depending on the platform, the audio backend may differ, but the class provides a unified interface for accessing audio data, whether it's stored in memory, loaded from a file, or streamed. @see lime.media.AudioSource **/ class AudioBuffer { /** The number of bits per sample in the audio data. **/ public var bitsPerSample:Int; /** The number of audio channels (e.g., 1 for mono, 2 for stereo). **/ public var channels:Int; /** The raw audio data stored as a `UInt8Array`. **/ public var data:UInt8Array; /** The sample rate of the audio data, in Hz. **/ public var sampleRate:Int; /** The source of the audio data. This can be an `Audio`, `Sound`, `Howl`, or other platform-specific object. **/ public var src(get, set):Dynamic; @:noCompletion private var __srcAudio:#if (js && html5) Audio #else Dynamic #end; @:noCompletion private var __srcBuffer:#if lime_cffi ALBuffer #else Dynamic #end; @:noCompletion private var __srcCustom:Dynamic; @:noCompletion private var __srcHowl:#if lime_howlerjs Howl #else Dynamic #end; @:noCompletion private var __srcSound:#if flash Sound #else Dynamic #end; @:noCompletion private var __srcVorbisFile:#if lime_vorbis VorbisFile #else Dynamic #end; #if commonjs private static function __init__() { var p = untyped AudioBuffer.prototype; untyped Object.defineProperties(p, { "src": {get: p.get_src, set: p.set_src} }); } #end /** Creates a new, empty `AudioBuffer` instance. **/ public function new() {} /** Disposes of the resources used by this `AudioBuffer`, such as unloading any associated audio data. **/ public function dispose():Void { #if (js && html5 && lime_howlerjs) __srcHowl.unload(); #end } /** Creates an `AudioBuffer` from a Base64-encoded string. @param base64String The Base64-encoded audio data. @return An `AudioBuffer` instance with the decoded audio data. **/ public static function fromBase64(base64String:String):AudioBuffer { if (base64String == null) return null; #if (js && html5 && lime_howlerjs) // if base64String doesn't contain codec data, add it. if (base64String.indexOf(",") == -1) { base64String = "data:" + __getCodec(Base64.decode(base64String)) + ";base64," + base64String; } var audioBuffer = new AudioBuffer(); audioBuffer.src = new Howl({src: [base64String], html5: true, preload: false}); return audioBuffer; #elseif (lime_cffi && !macro) #if !cs // if base64String contains codec data, strip it then decode it. var base64StringSplit = base64String.split(","); var base64StringNoEncoding = base64StringSplit[base64StringSplit.length - 1]; var bytes:Bytes = Base64.decode(base64StringNoEncoding); var audioBuffer = new AudioBuffer(); audioBuffer.data = new UInt8Array(Bytes.alloc(0)); return NativeCFFI.lime_audio_load_bytes(bytes, audioBuffer); #else // if base64String contains codec data, strip it then decode it. var base64StringSplit = base64String.split(","); var base64StringNoEncoding = base64StringSplit[base64StringSplit.length - 1]; var bytes:Bytes = Base64.decode(base64StringNoEncoding); var data:Dynamic = NativeCFFI.lime_audio_load_bytes(bytes, null); if (data != null) { var audioBuffer = new AudioBuffer(); audioBuffer.bitsPerSample = data.bitsPerSample; audioBuffer.channels = data.channels; audioBuffer.data = new UInt8Array(@:privateAccess new Bytes(data.data.length, data.data.b)); audioBuffer.sampleRate = data.sampleRate; return audioBuffer; } #end #end return null; } /** Creates an `AudioBuffer` from a `Bytes` object. @param bytes The `Bytes` object containing the audio data. @return An `AudioBuffer` instance with the decoded audio data. **/ public static function fromBytes(bytes:Bytes):AudioBuffer { if (bytes == null) return null; #if (js && html5 && lime_howlerjs) var audioBuffer = new AudioBuffer(); audioBuffer.src = new Howl({src: ["data:" + __getCodec(bytes) + ";base64," + Base64.encode(bytes)], html5: true, preload: false}); return audioBuffer; #elseif (lime_cffi && !macro) #if !cs var audioBuffer = new AudioBuffer(); audioBuffer.data = new UInt8Array(Bytes.alloc(0)); return NativeCFFI.lime_audio_load_bytes(bytes, audioBuffer); #else var data:Dynamic = NativeCFFI.lime_audio_load_bytes(bytes, null); if (data != null) { var audioBuffer = new AudioBuffer(); audioBuffer.bitsPerSample = data.bitsPerSample; audioBuffer.channels = data.channels; audioBuffer.data = new UInt8Array(@:privateAccess new Bytes(data.data.length, data.data.b)); audioBuffer.sampleRate = data.sampleRate; return audioBuffer; } #end #end return null; } /** Creates an `AudioBuffer` from a file. @param path The file path to the audio data. @return An `AudioBuffer` instance with the audio data loaded from the file. **/ public static function fromFile(path:String):AudioBuffer { if (path == null) return null; #if (js && html5 && lime_howlerjs) var audioBuffer = new AudioBuffer(); #if force_html5_audio audioBuffer.__srcHowl = new Howl({src: [path], html5: true, preload: false}); #else audioBuffer.__srcHowl = new Howl({src: [path], preload: false}); #end return audioBuffer; #elseif flash switch (Path.extension(path)) { case "ogg", "wav": return null; default: } var audioBuffer = new AudioBuffer(); audioBuffer.__srcSound = new Sound(new URLRequest(path)); return audioBuffer; #elseif (lime_cffi && !macro) #if !cs var audioBuffer = new AudioBuffer(); audioBuffer.data = new UInt8Array(Bytes.alloc(0)); return NativeCFFI.lime_audio_load_file(path, audioBuffer); #else var data:Dynamic = NativeCFFI.lime_audio_load_file(path, null); if (data != null) { var audioBuffer = new AudioBuffer(); audioBuffer.bitsPerSample = data.bitsPerSample; audioBuffer.channels = data.channels; audioBuffer.data = new UInt8Array(@:privateAccess new Bytes(data.data.length, data.data.b)); audioBuffer.sampleRate = data.sampleRate; return audioBuffer; } return null; #end #else return null; #end } /** Creates an `AudioBuffer` from an array of file paths. @param paths An array of file paths to search for audio data. @return An `AudioBuffer` instance with the audio data loaded from the first valid file found. **/ public static function fromFiles(paths:Array):AudioBuffer { #if (js && html5 && lime_howlerjs) var audioBuffer = new AudioBuffer(); #if force_html5_audio audioBuffer.__srcHowl = new Howl({src: paths, html5: true, preload: false}); #else audioBuffer.__srcHowl = new Howl({src: paths, preload: false}); #end return audioBuffer; #else var buffer = null; for (path in paths) { buffer = AudioBuffer.fromFile(path); if (buffer != null) break; } return buffer; #end } /** Creates an `AudioBuffer` from a `VorbisFile`. @param vorbisFile The `VorbisFile` object containing the audio data. @return An `AudioBuffer` instance with the decoded audio data. **/ #if lime_vorbis public static function fromVorbisFile(vorbisFile:VorbisFile):AudioBuffer { if (vorbisFile == null) return null; var info = vorbisFile.info(); var audioBuffer = new AudioBuffer(); audioBuffer.channels = info.channels; audioBuffer.sampleRate = info.rate; audioBuffer.bitsPerSample = 16; audioBuffer.__srcVorbisFile = vorbisFile; return audioBuffer; } #else public static function fromVorbisFile(vorbisFile:Dynamic):AudioBuffer { return null; } #end /** Asynchronously loads an `AudioBuffer` from a file. @param path The file path to the audio data. @return A `Future` that resolves to the loaded `AudioBuffer`. **/ public static function loadFromFile(path:String):Future { #if (flash || (js && html5)) var promise = new Promise(); var audioBuffer = AudioBuffer.fromFile(path); if (audioBuffer != null) { #if flash audioBuffer.__srcSound.addEventListener(flash.events.Event.COMPLETE, function(event) { promise.complete(audioBuffer); }); audioBuffer.__srcSound.addEventListener(flash.events.ProgressEvent.PROGRESS, function(event) { promise.progress(Std.int(event.bytesLoaded), Std.int(event.bytesTotal)); }); audioBuffer.__srcSound.addEventListener(flash.events.IOErrorEvent.IO_ERROR, promise.error); #elseif (js && html5 && lime_howlerjs) if (audioBuffer != null) { audioBuffer.__srcHowl.on("load", function() { promise.complete(audioBuffer); }); audioBuffer.__srcHowl.on("loaderror", function(id, msg) { promise.error(msg); }); audioBuffer.__srcHowl.load(); } #else promise.complete(audioBuffer); #end } else { promise.error(null); } return promise.future; #else // TODO: Streaming var request = new HTTPRequest(); return request.load(path).then(function(buffer) { if (buffer != null) { return Future.withValue(buffer); } else { return cast Future.withError(""); } }); #end } /** Asynchronously loads an `AudioBuffer` from multiple files. @param paths An array of file paths to search for audio data. @return A `Future` that resolves to the loaded `AudioBuffer`. **/ public static function loadFromFiles(paths:Array):Future { #if (js && html5 && lime_howlerjs) var promise = new Promise(); var audioBuffer = AudioBuffer.fromFiles(paths); if (audioBuffer != null) { audioBuffer.__srcHowl.on("load", function() { promise.complete(audioBuffer); }); audioBuffer.__srcHowl.on("loaderror", function() { promise.error(null); }); audioBuffer.__srcHowl.load(); } else { promise.error(null); } return promise.future; #else return new Future(fromFiles.bind(paths), true); #end } private static function __getCodec(bytes:Bytes):String { var signature:String = null; try { signature = bytes.getString(0, 4); } catch (e:Dynamic) { // if the bytes don't represent a valid UTF-8 string, getString() // may throw an exception. in that case, we expect to end up in // the default switch case below where it tries to detect MP3. } switch (signature) { case "OggS": return "audio/ogg"; case "fLaC": return "audio/flac"; case "RIFF" if (bytes.getString(8, 4) == "WAVE"): return "audio/wav"; default: switch ([bytes.get(0), bytes.get(1), bytes.get(2)]) { case [73, 68, 51] | [255, 251, _] | [255, 250, _] | [255, 243, _]: return "audio/mp3"; default: } } Log.error("Unsupported sound format"); return null; } // Get & Set Methods @:noCompletion private function get_src():Dynamic { #if (js && html5) #if lime_howlerjs return __srcHowl; #else return __srcAudio; #end #elseif flash return __srcSound; #elseif lime_vorbis return __srcVorbisFile; #else return __srcCustom; #end } @:noCompletion private function set_src(value:Dynamic):Dynamic { #if (js && html5) #if lime_howlerjs return __srcHowl = value; #else return __srcAudio = value; #end #elseif flash return __srcSound = value; #elseif lime_vorbis return __srcVorbisFile = value; #else return __srcCustom = value; #end } } ================================================ FILE: src/lime/media/AudioContext.hx ================================================ package lime.media; @:access(lime.media.FlashAudioContext) @:access(lime.media.HTML5AudioContext) @:access(lime.media.OpenALAudioContext) @:access(lime.media.WebAudioContext) class AudioContext { public var custom:Dynamic; #if (!lime_doc_gen || flash) public var flash(default, null):FlashAudioContext; #end #if (!lime_doc_gen || (js && html5)) public var html5(default, null):HTML5AudioContext; #end #if (!lime_doc_gen || lime_openal) public var openal(default, null):OpenALAudioContext; #end public var type(default, null):AudioContextType; #if (!lime_doc_gen || (js && html5)) public var web(default, null):WebAudioContext; #end public function new(type:AudioContextType = null) { if (type != CUSTOM) { #if (js && html5) if (type == null || type == WEB) { try { untyped #if haxe4 js.Syntax.code #else __js__ #end ("window.AudioContext = window.AudioContext || window.webkitAudioContext;"); web = cast untyped #if haxe4 js.Syntax.code #else __js__ #end ("new window.AudioContext ()"); this.type = WEB; } catch (e:Dynamic) {} } if (web == null && type != WEB) { html5 = new HTML5AudioContext(); this.type = HTML5; } #elseif flash flash = new FlashAudioContext(); this.type = FLASH; #else openal = new OpenALAudioContext(); this.type = OPENAL; #end } else { this.type = CUSTOM; } } } ================================================ FILE: src/lime/media/AudioContextType.hx ================================================ package lime.media; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract AudioContextType(String) from String to String { var FLASH = "flash"; var HTML5 = "html5"; var OPENAL = "openal"; var WEB = "web"; var CUSTOM = "custom"; } ================================================ FILE: src/lime/media/AudioManager.hx ================================================ package lime.media; import haxe.Timer; import lime._internal.backend.native.NativeCFFI; import lime.media.openal.AL; import lime.media.openal.ALC; import lime.media.openal.ALContext; import lime.media.openal.ALDevice; #if (js && html5) import js.Browser; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class AudioManager { public static var context:AudioContext; public static function init(context:AudioContext = null) { if (AudioManager.context == null) { if (context == null) { AudioManager.context = new AudioContext(); context = AudioManager.context; #if !lime_doc_gen if (context.type == OPENAL) { var alc = context.openal; var device = alc.openDevice(); if (device != null) { var ctx = alc.createContext(device); alc.makeContextCurrent(ctx); alc.processContext(ctx); } } #end } AudioManager.context = context; #if (lime_cffi && !macro && lime_openal && (ios || tvos || mac)) var timer = new Timer(100); timer.run = function() { NativeCFFI.lime_al_cleanup(); }; #end } } public static function resume():Void { #if !lime_doc_gen if (context != null && context.type == OPENAL) { var alc = context.openal; var currentContext = alc.getCurrentContext(); if (currentContext != null) { var device = alc.getContextsDevice(currentContext); alc.resumeDevice(device); alc.processContext(currentContext); } } #end } public static function shutdown():Void { #if !lime_doc_gen if (context != null && context.type == OPENAL) { var alc = context.openal; var currentContext = alc.getCurrentContext(); if (currentContext != null) { var device = alc.getContextsDevice(currentContext); alc.makeContextCurrent(null); alc.destroyContext(currentContext); if (device != null) { alc.closeDevice(device); } } } #end context = null; } public static function suspend():Void { #if !lime_doc_gen if (context != null && context.type == OPENAL) { var alc = context.openal; var currentContext = alc.getCurrentContext(); if (currentContext != null) { alc.suspendContext(currentContext); var device = alc.getContextsDevice(currentContext); if (device != null) { alc.pauseDevice(device); } } } #end } } ================================================ FILE: src/lime/media/AudioSource.hx ================================================ package lime.media; import lime.app.Event; import lime.media.openal.AL; import lime.media.openal.ALSource; import lime.math.Vector4; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end /** The `AudioSource` class provides a way to control audio playback in a Lime application. It allows for playing, pausing, and stopping audio, as well as controlling various audio properties such as gain, pitch, and looping. Depending on the platform, the audio backend may vary, but the API remains consistent. @see lime.media.AudioBuffer **/ class AudioSource { /** An event that is dispatched when the audio playback is complete. **/ public var onComplete = new EventVoid>(); /** The `AudioBuffer` associated with this `AudioSource`. **/ public var buffer:AudioBuffer; /** The current playback position of the audio, in milliseconds. **/ public var currentTime(get, set):Int; /** The gain (volume) of the audio. A value of `1.0` represents the default volume. **/ public var gain(get, set):Float; /** The length of the audio, in milliseconds. **/ public var length(get, set):Int; /** The number of times the audio will loop. A value of `0` means the audio will not loop. **/ public var loops(get, set):Int; /** The pitch of the audio. A value of `1.0` represents the default pitch. **/ public var pitch(get, set):Float; /** The offset within the audio buffer to start playback, in samples. **/ public var offset:Int; /** The 3D position of the audio source, represented as a `Vector4`. **/ public var position(get, set):Vector4; @:noCompletion private var __backend:AudioSourceBackend; /** Creates a new `AudioSource` instance. @param buffer The `AudioBuffer` to associate with this `AudioSource`. @param offset The starting offset within the audio buffer, in samples. @param length The length of the audio to play, in milliseconds. If `null`, the full buffer is used. @param loops The number of times to loop the audio. `0` means no looping. **/ public function new(buffer:AudioBuffer = null, offset:Int = 0, length:Null = null, loops:Int = 0) { this.buffer = buffer; this.offset = offset; __backend = new AudioSourceBackend(this); if (length != null && length != 0) { this.length = length; } this.loops = loops; if (buffer != null) { init(); } } /** Releases any resources used by this `AudioSource`. **/ public function dispose():Void { __backend.dispose(); } @:noCompletion private function init():Void { __backend.init(); } /** Starts or resumes audio playback. **/ public function play():Void { __backend.play(); } /** Pauses audio playback. **/ public function pause():Void { __backend.pause(); } /** Stops audio playback and resets the playback position to the beginning. **/ public function stop():Void { __backend.stop(); } // Get & Set Methods @:noCompletion private function get_currentTime():Int { return __backend.getCurrentTime(); } @:noCompletion private function set_currentTime(value:Int):Int { return __backend.setCurrentTime(value); } @:noCompletion private function get_gain():Float { return __backend.getGain(); } @:noCompletion private function set_gain(value:Float):Float { return __backend.setGain(value); } @:noCompletion private function get_length():Int { return __backend.getLength(); } @:noCompletion private function set_length(value:Int):Int { return __backend.setLength(value); } @:noCompletion private function get_loops():Int { return __backend.getLoops(); } @:noCompletion private function set_loops(value:Int):Int { return __backend.setLoops(value); } @:noCompletion private function get_pitch():Float { return __backend.getPitch(); } @:noCompletion private function set_pitch(value:Float):Float { return __backend.setPitch(value); } @:noCompletion private function get_position():Vector4 { return __backend.getPosition(); } @:noCompletion private function set_position(value:Vector4):Vector4 { return __backend.setPosition(value); } } #if flash @:noCompletion private typedef AudioSourceBackend = lime._internal.backend.flash.FlashAudioSource; #elseif (js && html5) @:noCompletion private typedef AudioSourceBackend = lime._internal.backend.html5.HTML5AudioSource; #else @:noCompletion private typedef AudioSourceBackend = lime._internal.backend.native.NativeAudioSource; #end ================================================ FILE: src/lime/media/FlashAudioContext.hx ================================================ package lime.media; #if (!lime_doc_gen || flash) #if flash import flash.media.Sound; #end class FlashAudioContext { @:noCompletion private function new() {} public function createBuffer(stream:Dynamic /*URLRequest*/ = null, context:Dynamic /*SoundLoaderContext*/ = null):AudioBuffer { #if flash var buffer = new AudioBuffer(); buffer.src = new Sound(stream, context); return buffer; #else return null; #end } public function getBytesLoaded(buffer:AudioBuffer):UInt { #if flash if (buffer.src != null) { return buffer.src.bytesLoaded; } #end return 0; } public function getBytesTotal(buffer:AudioBuffer):Int { #if flash if (buffer.src != null) { return buffer.src.bytesTotal; } #end return 0; } public function getID3(buffer:AudioBuffer):Dynamic /*ID3Info*/ { #if flash if (buffer.src != null) { return buffer.src.id3; } #end return null; } public function getIsBuffering(buffer:AudioBuffer):Bool { #if flash if (buffer.src != null) { return buffer.src.isBuffering; } #end return false; } public function getIsURLInaccessible(buffer:AudioBuffer):Bool { #if flash if (buffer.src != null) { return buffer.src.isURLInaccessible; } #end return false; } public function getLength(buffer:AudioBuffer):Float { #if flash if (buffer.src != null) { return buffer.src.length; } #end return 0; } public function getURL(buffer:AudioBuffer):String { #if flash if (buffer.src != null) { return buffer.src.url; } #end return null; } public function close(buffer:AudioBuffer):Void { #if flash if (buffer.src != null) { buffer.src.close(); } #end } public function extract(buffer:AudioBuffer, target:Dynamic /*flash.utils.ByteArray*/, length:Float, startPosition:Float = -1):Float { #if flash if (buffer.src != null) { return buffer.src.extract(target, length, startPosition); } #end return 0; } public function load(buffer:AudioBuffer, stream:Dynamic /*flash.net.URLRequest*/, context:Dynamic /*SoundLoaderContext*/ = null):Void { #if flash if (buffer.src != null) { buffer.src.load(stream, context); } #end } public function loadCompressedDataFromByteArray(buffer:AudioBuffer, bytes:Dynamic /*flash.utils.ByteArray*/, bytesLength:UInt):Void { #if flash11 if (buffer.src != null) { buffer.src.loadCompressedDataFromByteArray(bytes, bytesLength); } #end } public function loadPCMFromByteArray(buffer:AudioBuffer, bytes:Dynamic /*flash.utils.ByteArray*/, samples:UInt, format:String = null, stereo:Bool = true, sampleRate:Float = 44100):Void { #if flash11 if (buffer.src != null) { buffer.src.loadPCMFromByteArray(bytes, samples, format, stereo, sampleRate); } #end } public function play(buffer:AudioBuffer, startTime:Float = 0, loops:Int = 0, sndTransform:Dynamic /*SoundTransform*/ = null):Dynamic /*SoundChannel*/ { #if flash if (buffer.src != null) { return buffer.src.play(startTime, loops, sndTransform); } #end return null; } } #end ================================================ FILE: src/lime/media/HTML5AudioContext.hx ================================================ package lime.media; #if (!lime_doc_gen || (js && html5)) #if (js && html5) import js.html.Audio; #end @:access(lime.media.AudioBuffer) class HTML5AudioContext { public var HAVE_CURRENT_DATA:Int = 2; public var HAVE_ENOUGH_DATA:Int = 4; public var HAVE_FUTURE_DATA:Int = 3; public var HAVE_METADATA:Int = 1; public var HAVE_NOTHING:Int = 0; public var NETWORK_EMPTY:Int = 0; public var NETWORK_IDLE:Int = 1; public var NETWORK_LOADING:Int = 2; public var NETWORK_NO_SOURCE:Int = 3; @:noCompletion private function new() {} public function canPlayType(buffer:AudioBuffer, type:String):String { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.canPlayType(type); } #end return null; } public function createBuffer(urlString:String = null):AudioBuffer { #if (js && html5) var buffer = new AudioBuffer(); buffer.__srcAudio = new Audio(); buffer.__srcAudio.src = urlString; return buffer; #else return null; #end } public function getAutoplay(buffer:AudioBuffer):Bool { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.autoplay; } #end return false; } public function getBuffered(buffer:AudioBuffer):Dynamic /*TimeRanges*/ { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.buffered; } #end return null; } public function getCurrentSrc(buffer:AudioBuffer):String { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.currentSrc; } #end return null; } public function getCurrentTime(buffer:AudioBuffer):Float { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.currentTime; } #end return 0; } public function getDefaultPlaybackRate(buffer:AudioBuffer):Float { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.defaultPlaybackRate; } #end return 1; } public function getDuration(buffer:AudioBuffer):Float { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.duration; } #end return 0; } public function getEnded(buffer:AudioBuffer):Bool { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.ended; } #end return false; } public function getError(buffer:AudioBuffer):Dynamic /*MediaError*/ { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.error; } #end return null; } public function getLoop(buffer:AudioBuffer):Bool { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.loop; } #end return false; } public function getMuted(buffer:AudioBuffer):Bool { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.muted; } #end return false; } public function getNetworkState(buffer:AudioBuffer):Int { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.networkState; } #end return 0; } public function getPaused(buffer:AudioBuffer):Bool { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.paused; } #end return false; } public function getPlaybackRate(buffer:AudioBuffer):Float { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.playbackRate; } #end return 1; } public function getPlayed(buffer:AudioBuffer):Dynamic /*TimeRanges*/ { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.played; } #end return null; } public function getPreload(buffer:AudioBuffer):String { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.preload; } #end return null; } public function getReadyState(buffer:AudioBuffer):Int { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.readyState; } #end return 0; } public function getSeekable(buffer:AudioBuffer):Dynamic /*TimeRanges*/ { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.seekable; } #end return null; } public function getSeeking(buffer:AudioBuffer):Bool { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.seeking; } #end return false; } public function getSrc(buffer:AudioBuffer):String { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.src; } #end return null; } public function getStartTime(buffer:AudioBuffer):Float { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.playbackRate; } #end return 0; } public function getVolume(buffer:AudioBuffer):Float { #if (js && html5) if (buffer.__srcAudio != null) { return buffer.__srcAudio.volume; } #end return 1; } public function load(buffer:AudioBuffer):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.load(); } #end } public function pause(buffer:AudioBuffer):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.pause(); } #end } public function play(buffer:AudioBuffer):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.play(); } #end } public function setAutoplay(buffer:AudioBuffer, value:Bool):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.autoplay = value; } #end } public function setCurrentTime(buffer:AudioBuffer, value:Float):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.currentTime = value; } #end } public function setDefaultPlaybackRate(buffer:AudioBuffer, value:Float):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.defaultPlaybackRate = value; } #end } public function setLoop(buffer:AudioBuffer, value:Bool):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.loop = value; } #end } public function setMuted(buffer:AudioBuffer, value:Bool):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.muted = value; } #end } public function setPlaybackRate(buffer:AudioBuffer, value:Float):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.playbackRate = value; } #end } public function setPreload(buffer:AudioBuffer, value:String):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.preload = value; } #end } public function setSrc(buffer:AudioBuffer, value:String):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.src = value; } #end } public function setVolume(buffer:AudioBuffer, value:Float):Void { #if (js && html5) if (buffer.__srcAudio != null) { buffer.__srcAudio.volume = value; } #end } } #end ================================================ FILE: src/lime/media/OpenALAudioContext.hx ================================================ package lime.media; #if (!lime_doc_gen || lime_openal) import lime.media.openal.AL; import lime.media.openal.ALBuffer; import lime.media.openal.ALC; import lime.media.openal.ALContext; import lime.media.openal.ALDevice; import lime.media.openal.ALSource; import lime.utils.ArrayBufferView; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class OpenALAudioContext { public var NONE:Int = 0; public var FALSE:Int = 0; public var TRUE:Int = 1; public var SOURCE_RELATIVE:Int = 0x202; public var CONE_INNER_ANGLE:Int = 0x1001; public var CONE_OUTER_ANGLE:Int = 0x1002; public var PITCH:Int = 0x1003; public var POSITION:Int = 0x1004; public var DIRECTION:Int = 0x1005; public var VELOCITY:Int = 0x1006; public var LOOPING:Int = 0x1007; public var BUFFER:Int = 0x1009; public var GAIN:Int = 0x100A; public var MIN_GAIN:Int = 0x100D; public var MAX_GAIN:Int = 0x100E; public var ORIENTATION:Int = 0x100F; public var SOURCE_STATE:Int = 0x1010; public var INITIAL:Int = 0x1011; public var PLAYING:Int = 0x1012; public var PAUSED:Int = 0x1013; public var STOPPED:Int = 0x1014; public var BUFFERS_QUEUED:Int = 0x1015; public var BUFFERS_PROCESSED:Int = 0x1016; public var REFERENCE_DISTANCE:Int = 0x1020; public var ROLLOFF_FACTOR:Int = 0x1021; public var CONE_OUTER_GAIN:Int = 0x1022; public var MAX_DISTANCE:Int = 0x1023; public var SEC_OFFSET:Int = 0x1024; public var SAMPLE_OFFSET:Int = 0x1025; public var BYTE_OFFSET:Int = 0x1026; public var SOURCE_TYPE:Int = 0x1027; public var STATIC:Int = 0x1028; public var STREAMING:Int = 0x1029; public var UNDETERMINED:Int = 0x1030; public var FORMAT_MONO8:Int = 0x1100; public var FORMAT_MONO16:Int = 0x1101; public var FORMAT_STEREO8:Int = 0x1102; public var FORMAT_STEREO16:Int = 0x1103; public var FREQUENCY:Int = 0x2001; public var BITS:Int = 0x2002; public var CHANNELS:Int = 0x2003; public var SIZE:Int = 0x2004; public var NO_ERROR:Int = 0; public var INVALID_NAME:Int = 0xA001; public var INVALID_ENUM:Int = 0xA002; public var INVALID_VALUE:Int = 0xA003; public var INVALID_OPERATION:Int = 0xA004; public var OUT_OF_MEMORY:Int = 0xA005; public var VENDOR:Int = 0xB001; public var VERSION:Int = 0xB002; public var RENDERER:Int = 0xB003; public var EXTENSIONS:Int = 0xB004; public var DOPPLER_FACTOR:Int = 0xC000; public var SPEED_OF_SOUND:Int = 0xC003; public var DOPPLER_VELOCITY:Int = 0xC001; public var DISTANCE_MODEL:Int = 0xD000; public var INVERSE_DISTANCE:Int = 0xD001; public var INVERSE_DISTANCE_CLAMPED:Int = 0xD002; public var LINEAR_DISTANCE:Int = 0xD003; public var LINEAR_DISTANCE_CLAMPED:Int = 0xD004; public var EXPONENT_DISTANCE:Int = 0xD005; public var EXPONENT_DISTANCE_CLAMPED:Int = 0xD006; public var REFRESH:Int = 0x1008; public var SYNC:Int = 0x1009; public var MONO_SOURCES:Int = 0x1010; public var STEREO_SOURCES:Int = 0x1011; public var INVALID_DEVICE:Int = 0xA001; public var INVALID_CONTEXT:Int = 0xA002; public var ATTRIBUTES_SIZE:Int = 0x1002; public var ALL_ATTRIBUTES:Int = 0x1003; public var DEFAULT_DEVICE_SPECIFIER:Int = 0x1004; public var DEVICE_SPECIFIER:Int = 0x1005; public var ENUMERATE_ALL_EXT:Int = 1; public var DEFAULT_ALL_DEVICES_SPECIFIER:Int = 0x1012; public var ALL_DEVICES_SPECIFIER:Int = 0x1013; @:noCompletion private function new() {} public function bufferData(buffer:ALBuffer, format:Int, data:ArrayBufferView, size:Int, freq:Int):Void { AL.bufferData(buffer, format, data, size, freq); } public function buffer3f(buffer:ALBuffer, param:Int, value1:Float, value2:Float, value3:Float):Void { AL.buffer3f(buffer, param, value1, value2, value3); } public function buffer3i(buffer:ALBuffer, param:Int, value1:Int, value2:Int, value3:Int):Void { AL.buffer3i(buffer, param, value1, value2, value3); } public function bufferf(buffer:ALBuffer, param:Int, value:Float):Void { AL.bufferf(buffer, param, value); } public function bufferfv(buffer:ALBuffer, param:Int, values:Array):Void { AL.bufferfv(buffer, param, values); } public function bufferi(buffer:ALBuffer, param:Int, value:Int):Void { AL.bufferi(buffer, param, value); } public function bufferiv(buffer:ALBuffer, param:Int, values:Array):Void { AL.bufferiv(buffer, param, values); } public function closeDevice(device:ALDevice):Bool { return ALC.closeDevice(device); } public function createContext(device:ALDevice, attrlist:Array = null):ALContext { return ALC.createContext(device, attrlist); } public function createBuffer():ALBuffer { return AL.createBuffer(); } public function createSource():ALSource { return AL.createSource(); } public function deleteBuffer(buffer:ALBuffer):Void { AL.deleteBuffer(buffer); } public function deleteBuffers(buffers:Array):Void { AL.deleteBuffers(buffers); } public function deleteSource(source:ALSource):Void { AL.deleteSource(source); } public function deleteSources(sources:Array):Void { AL.deleteSources(sources); } public function destroyContext(context:ALContext):Void { if (context == null) return; ALC.destroyContext(context); } public function disable(capability:Int):Void { AL.disable(capability); } public function distanceModel(distanceModel:Int):Void { AL.distanceModel(distanceModel); } public function dopplerFactor(value:Float):Void { AL.dopplerFactor(value); } public function dopplerVelocity(value:Float):Void { AL.dopplerVelocity(value); } public function enable(capability:Int):Void { AL.enable(capability); } @:deprecated public function genSource():ALSource { return createSource(); } public function genSources(n:Int):Array { return AL.genSources(n); } @:deprecated public function genBuffer():ALBuffer { return createBuffer(); } public function genBuffers(n:Int):Array { return AL.genBuffers(n); } public function getBoolean(param:Int):Bool { return AL.getBoolean(param); } public function getBooleanv(param:Int, count:Int = 1):Array { return AL.getBooleanv(param, count); } public function getBuffer3f(buffer:ALBuffer, param:Int):Array { return AL.getBuffer3f(buffer, param); } public function getBuffer3i(buffer:ALBuffer, param:Int):Array { return AL.getBuffer3i(buffer, param); } public function getBufferf(buffer:ALBuffer, param:Int):Float { return AL.getBufferf(buffer, param); } public function getBufferfv(buffer:ALBuffer, param:Int, count:Int = 1):Array { return AL.getBufferfv(buffer, param, count); } public function getBufferi(buffer:ALBuffer, param:Int):Int { return AL.getBufferi(buffer, param); } public function getBufferiv(buffer:ALBuffer, param:Int, count:Int = 1):Array { return AL.getBufferiv(buffer, param, count); } public function getContextsDevice(context:ALContext):ALDevice { if (context == null) return null; return ALC.getContextsDevice(context); } public function getCurrentContext():ALContext { return ALC.getCurrentContext(); } public function getDouble(param:Int):Float { return AL.getDouble(param); } public function getDoublev(param:Int, count:Int = 1):Array { return AL.getDoublev(param, count); } public function getEnumValue(ename:String):Int { return AL.getEnumValue(ename); } public function getError(device:ALDevice = null):Int { if (device == null) { return AL.getError(); } else { return ALC.getError(device); } } public function getErrorString(device:ALDevice = null):String { if (device == null) { return AL.getErrorString(); } else { return ALC.getErrorString(device); } } public function getFloat(param:Int):Float { return AL.getFloat(param); } public function getFloatv(param:Int, count:Int = 1):Array { return AL.getFloatv(param, count); } public function getInteger(param:Int):Int { return AL.getInteger(param); } public function getIntegerv(param:Int, count:Int = 1, device:ALDevice = null):Array { if (device == null) { return AL.getIntegerv(param, count); } else { return ALC.getIntegerv(device, param, count); } } public function getListener3f(param:Int):Array { return AL.getListener3f(param); } public function getListener3i(param:Int):Array { return AL.getListener3i(param); } public function getListenerf(param:Int):Float { return AL.getListenerf(param); } public function getListenerfv(param:Int, count:Int = 1):Array { return AL.getListenerfv(param, count); } public function getListeneri(param:Int):Int { return AL.getListeneri(param); } public function getListeneriv(param:Int, count:Int = 1):Array { return AL.getListeneriv(param, count); } public function getProcAddress(fname:String):Dynamic { return AL.getProcAddress(fname); } public function getSource3f(source:ALSource, param:Int):Array { return AL.getSource3f(source, param); } public function getSourcef(source:ALSource, param:Int):Float { return AL.getSourcef(source, param); } public function getSource3i(source:ALSource, param:Int):Array { return AL.getSource3i(source, param); } public function getSourcefv(source:ALSource, param:Int, count:Int = 1):Array { return AL.getSourcefv(source, param); } public function getSourcei(source:ALSource, param:Int):Dynamic { return AL.getSourcei(source, param); } public function getSourceiv(source:ALSource, param:Int, count:Int = 1):Array { return AL.getSourceiv(source, param, count); } public function getString(param:Int, device:ALDevice = null):String { if (device == null) { return AL.getString(param); } else { return ALC.getString(device, param); } } public function isBuffer(buffer:ALBuffer):Bool { return AL.isBuffer(buffer); } public function isEnabled(capability:Int):Bool { return AL.isEnabled(capability); } public function isExtensionPresent(extname:String):Bool { return AL.isExtensionPresent(extname); } public function isSource(source:ALSource):Bool { return AL.isSource(source); } public function listener3f(param:Int, value1:Float, value2:Float, value3:Float):Void { AL.listener3f(param, value1, value2, value3); } public function listener3i(param:Int, value1:Int, value2:Int, value3:Int):Void { AL.listener3i(param, value1, value2, value3); } public function listenerf(param:Int, value:Float):Void { AL.listenerf(param, value); } public function listenerfv(param:Int, values:Array):Void { AL.listenerfv(param, values); } public function listeneri(param:Int, value:Int):Void { AL.listeneri(param, value); } public function listeneriv(param:Int, values:Array):Void { AL.listeneriv(param, values); } public function makeContextCurrent(context:ALContext):Bool { return ALC.makeContextCurrent(context); } public function openDevice(deviceName:String = null):ALDevice { return ALC.openDevice(deviceName); } public function pauseDevice(device:ALDevice):Void { ALC.pauseDevice(device); } public function processContext(context:ALContext):Void { ALC.processContext(context); } public function resumeDevice(device:ALDevice):Void { ALC.resumeDevice(device); } public function source3f(source:ALSource, param:Int, value1:Float, value2:Float, value3:Float):Void { AL.source3f(source, param, value1, value2, value3); } public function source3i(source:ALSource, param:Int, value1:Int, value2:Int, value3:Int):Void { AL.source3i(source, param, value1, value2, value3); } public function sourcef(source:ALSource, param:Int, value:Float):Void { AL.sourcef(source, param, value); } public function sourcefv(source:ALSource, param:Int, values:Array):Void { AL.sourcefv(source, param, values); } public function sourcei(source:ALSource, param:Int, value:Dynamic):Void { AL.sourcei(source, param, value); } public function sourceiv(source:ALSource, param:Int, values:Array):Void { AL.sourceiv(source, param, values); } public function sourcePlay(source:ALSource):Void { AL.sourcePlay(source); } public function sourcePlayv(sources:Array):Void { AL.sourcePlayv(sources); } public function sourceStop(source:ALSource):Void { AL.sourceStop(source); } public function sourceStopv(sources:Array):Void { AL.sourceStopv(sources); } public function sourceRewind(source:ALSource):Void { AL.sourceRewind(source); } public function sourceRewindv(sources:Array):Void { AL.sourceRewindv(sources); } public function sourcePause(source:ALSource):Void { AL.sourcePause(source); } public function sourcePausev(sources:Array):Void { AL.sourcePausev(sources); } public function sourceQueueBuffer(source:ALSource, buffer:ALBuffer):Void { AL.sourceQueueBuffer(source, buffer); } public function sourceQueueBuffers(source:ALSource, nb:Int, buffers:Array):Void { AL.sourceQueueBuffers(source, nb, buffers); } public function sourceUnqueueBuffer(source:ALSource):ALBuffer { return AL.sourceUnqueueBuffer(source); } public function sourceUnqueueBuffers(source:ALSource, nb:Int):Array { return AL.sourceUnqueueBuffers(source, nb); } public function speedOfSound(value:Float):Void { AL.speedOfSound(value); } public function suspendContext(context:ALContext):Void { ALC.suspendContext(context); } } #end ================================================ FILE: src/lime/media/WebAudioContext.hx ================================================ package lime.media; #if (!lime_doc_gen || (js && html5)) #if (!lime_doc_gen && (!js || !html5 || display)) class WebAudioContext { public var activeSourceCount(default, null):Int; public var currentTime(default, null):Float; public var destination(default, null):Dynamic /*AudioDestinationNode*/; public var listener(default, null):Dynamic /*AudioListener*/; public var oncomplete:Dynamic /*js.html.EventListener*/; public var sampleRate(default, null):Float; public function new() {} #if (haxe_ver >= 4.2) public function resume():Dynamic /*Promise*/ { return null; } #end public function createAnalyser():Dynamic /*AnalyserNode*/ { return null; } public function createBiquadFilter():Dynamic /*BiquadFilterNode*/ { return null; } @:overload(function(numberOfChannels:Int, numberOfFrames:Int, sampleRate:Float):Dynamic /*AudioBuffer*/ {}) public function createBuffer(buffer:Dynamic /*js.html.ArrayBuffer*/, mixToMono:Bool):Dynamic /*AudioBuffer*/ { return null; } public function createBufferSource():Dynamic /*AudioBufferSourceNode*/ { return null; } public function createChannelMerger(?numberOfInputs:Int):Dynamic /*ChannelMergerNode*/ { return null; } public function createChannelSplitter(?numberOfOutputs:Int):Dynamic /*ChannelSplitterNode*/ { return null; } public function createConvolver():Dynamic /*ConvolverNode*/ { return null; } public function createDelay(?maxDelayTime:Float):Dynamic /*DelayNode*/ { return null; } public function createDynamicsCompressor():Dynamic /*DynamicsCompressorNode*/ { return null; } public function createGain():Dynamic /*GainNode*/ { return null; } public function createMediaElementSource(mediaElement:Dynamic /*js.html.MediaElement*/):Dynamic /*MediaElementAudioSourceNode*/ { return null; } public function createMediaStreamSource(mediaStream:Dynamic /*js.html.rtc.MediaStream*/):Dynamic /*MediaStreamAudioSourceNode*/ { return null; } public function createOscillator():Dynamic /*OscillatorNode*/ { return null; } public function createPanner():Dynamic /*PannerNode*/ { return null; } public function createScriptProcessor(bufferSize:Int, ?numberOfInputChannels:Int, ?numberOfOutputChannels:Int):Dynamic /*ScriptProcessorNode*/ { return null; } public function createWaveShaper():Dynamic /*WaveShaperNode*/ { return null; } public function createWaveTable(real:Dynamic /*js.html.Float32Array*/, imag:Dynamic /*js.html.Float32Array*/):Dynamic /*WaveTable*/ { return null; } public function decodeAudioData(audioData:Dynamic /*js.html.ArrayBuffer*/, successCallback:Dynamic /*AudioBufferCallback*/, ?errorCallback:Dynamic /*AudioBufferCallback*/):Void {} public function startRendering():Void {} } #else typedef WebAudioContext = js.html.audio.AudioContext; #end #end ================================================ FILE: src/lime/media/howlerjs/Howl.hx ================================================ package lime.media.howlerjs; #if (!lime_doc_gen || lime_howlerjs) #if (!lime_howlerjs || display) import haxe.Constraints.Function; class Howl { public function new(options:HowlOptions) {} /** * Get the duration of this sound. Passing a sound id will return the sprite duration. * @param id The sound id to check. If none is passed, return full source duration. * @return Audio duration in seconds. */ public function duration(?id:Int):Int { return 0; } /** * Fade a currently playing sound between two volumes (if no id is passsed, all sounds will fade). * @param from The value to fade from (0.0 to 1.0). * @param to The volume to fade to (0.0 to 1.0). * @param len Time in milliseconds to fade. * @param id The sound id (omit to fade all sounds). * @return */ public function fade(from:Float, to:Float, len:Int, ?id:Int):Howl { return this; } /** * Load the audio file. * @return */ public function load():Howl { return this; } /** * Get/set the loop parameter on a sound. This method can optionally take 0, 1 or 2 arguments. * loop() -> Returns the group's loop value. * loop(id) -> Returns the sound id's loop value. * loop(loop) -> Sets the loop value for all sounds in this Howl group. * loop(loop, id) -> Sets the loop value of passed sound id. * @return Returns self or current loop value. */ public function loop(?loop:Dynamic, ?id:Int):Dynamic { return null; } /** * Mute/unmute a single sound or all sounds in this Howl group. * @param muted Set to true to mute and false to unmute. * @param id The sound ID to update (omit to mute/unmute all). * @return */ public function mute(muted:Bool, ?id:Int):Howl { return this; } /** * Remove a custom event. Call without parameters to remove all events. * @param event Event name. * @param fn Listener to remove. Leave empty to remove all. * @param id (optional) Only remove events for this sound. * @return */ public function off(event:String, fn:Function, ?id:Int):Howl { return this; } /** * Listen to a custom event. * @param event Event name. * @param fn Listener to call. * @param id (optional) Only listen to events for this sound. * @return */ public function on(event:String, fn:Function, ?id:Int):Howl { return this; } /** * Listen to a custom event and remove it once fired. * @param event Event name. * @param fn Listener to call. * @param id (optional) Only listen to events for this sound. * @return */ public function once(event:String, fn:Function, ?id:Int):Howl { return this; } /** * Pause playback and save current position. * @param id The sound ID (empty to pause all in group). * @return */ public function pause(?id:Int):Howl { return this; } /** * Play a sound or resume previous playback. * @param sprite Sprite name for sprite playback or sound id to continue previous. * @return Sound ID. */ public function play(?sprite:Dynamic):Int { return 0; } /** * Check if a specific sound is currently playing or not (if id is provided), or check if at least one of the sounds in the group is playing or not. * @param id The sound id to check. If none is passed, the whole sound group is checked. * @return True if playing and false if not. */ public function playing(?id:Int):Bool { return false; } /** * Get/set the playback rate of a sound. This method can optionally take 0, 1 or 2 arguments. * rate() -> Returns the first sound node's current playback rate. * rate(id) -> Returns the sound id's current playback rate. * rate(rate) -> Sets the playback rate of all sounds in this Howl group. * rate(rate, id) -> Sets the playback rate of passed sound id. * @return Returns self or the current playback rate. */ public function rate(?rate:Float, ?id:Int):Dynamic { return null; } /** * Get/set the seek position of a sound (in seconds). This method can optionally take 0, 1 or 2 arguments. * seek() -> Returns the first sound node's current seek position. * seek(id) -> Returns the sound id's current seek position. * seek(seek) -> Sets the seek position of the first sound node. * seek(seek, id) -> Sets the seek position of passed sound id. * @return Returns self or the current seek position. */ public function seek(?seek:Float, ?id:Int):Dynamic { return null; } /** * Returns the current loaded state of this Howl. * @return 'unloaded', 'loading', 'loaded' */ public function state():String { return null; } /** * Stop playback and reset to start. * @param id The sound ID (empty to stop all in group). * @return */ public function stop(?id:Int):Howl { return this; } /** * Unload and destroy the current Howl object. * This will immediately stop all sound instances attached to this group. */ public function unload():Void {} /** * Get/set the volume of this sound or of the Howl group. This method can optionally take 0, 1 or 2 arguments. * volume() -> Returns the group's volume value. * volume(id) -> Returns the sound id's current volume. * volume(vol) -> Sets the volume of all sounds in this Howl group. * volume(vol, id) -> Sets the volume of passed sound id. * @return Returns self or current volume. */ public function volume(?vol:Float, ?id:Int):Dynamic { return null; } /** * Get/set the 3D spatial position of the audio source for this sound or group relative to the global listener. * @param x The x-position of the audio source. * @param y The y-position of the audio source. * @param z The z-position of the audio source. * @param id The sound ID. If none is passed, all in group will be updated. * @return Returns self or the current 3D spatial position: [x, y, z]. */ public function pos(?x:Float, ?y:Float, ?z:Float, ?id:Int):Dynamic { return null; } /** * Get/set the stereo panning of the audio source for this sound or all in the group. * @param pan A value of -1.0 is all the way left and 1.0 is all the way right. * @param id (optional) The sound ID. If none is passed, all in group will be updated. * @return Returns self or the current stereo panning value. */ public function stereo(?pan:Float, ?id:Int):Dynamic { return null; } /** * Get/set the panner node's attributes for a sound or group of sounds. This method can optionally take 0, 1 or 2 arguments. * pannerAttr() -> Returns the group's values. * pannerAttr(id) -> Returns the sound id's values. * pannerAttr(o) -> Set's the values of all sounds in this Howl group. * pannerAttr(o, id) -> Set's the values of passed sound id. * * Attributes: * coneInnerAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees, * inside of which there will be no volume reduction. * coneOuterAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees, * outside of which the volume will be reduced to a constant value of coneOuterGain. * coneOuterGain - (0 by default) A parameter for directional audio sources, this is the gain outside of the * coneOuterAngle. It is a linear value in the range [0, 1]. * distanceModel - ('inverse' by default) Determines algorithm used to reduce volume as audio moves away from * listener. Can be linear, inverse or `exponential. * maxDistance - (10000 by default) The maximum distance between source and listener, after which the volume * will not be reduced any further. * refDistance - (1 by default) A reference distance for reducing volume as source moves further from the listener. * This is simply a variable of the distance model and has a different effect depending on which model * is used and the scale of your coordinates. Generally, volume will be equal to 1 at this distance. * rolloffFactor - (1 by default) How quickly the volume reduces as source moves from listener. This is simply a * variable of the distance model and can be in the range of [0, 1] with linear and [0, ∞] * with inverse and exponential. * panningModel - ('HRTF' by default) Determines which spatialization algorithm is used to position audio. * Can be HRTF or equalpower. * * @return Returns self or current panner attributes. */ public function pannerAttr(args:PannerAttr, ?id:Int):Howl { return this; } } #else import haxe.Constraints.Function; import haxe.extern.EitherType; #if commonjs @:jsRequire("howler", "Howl") #else @:native("Howl") #end extern class Howl { public function new(options:HowlOptions); public function duration(?id:Int):Int; public function fade(from:Float, to:Float, len:Int, ?id:Int):Howl; public function load():Howl; @:overload(function(id:Int):Bool {}) @:overload(function(loop:Bool):Howl {}) @:overload(function(loop:Bool, id:Int):Howl {}) public function loop():Bool; public function mute(muted:Bool, ?id:Int):Howl; public function off(event:String, fn:Function, ?id:Int):Howl; public function on(event:String, fn:Function, ?id:Int):Howl; public function once(event:String, fn:Function, ?id:Int):Howl; public function pause(?id:Int):Howl; @:overload(function(id:Int):Int {}) public function play(?sprite:String):Int; public function playing(?id:Int):Bool; @:overload(function(id:Int):Float {}) @:overload(function(rate:Float):Howl {}) @:overload(function(rate:Float, id:Int):Howl {}) public function rate():Float; public function state():String; @:overload(function(id:Int):Float {}) @:overload(function(seek:Float):Howl {}) @:overload(function(seek:Float, id:Int):Howl {}) public function seek():Float; public function stop(?id:Int):Howl; public function unload():Void; @:overload(function(id:Int):Float {}) @:overload(function(vol:Float):Howl {}) @:overload(function(vol:Float, id:Int):Howl {}) public function volume():Float; @:overload(function(pan:Float):Howl {}) @:overload(function(pan:Float, id:Int):Howl {}) public function stereo():Float; @:overload(function(x:Float):Howl {}) @:overload(function(x:Float, y:Float):Howl {}) @:overload(function(x:Float, y:Float, z:Float):Howl {}) @:overload(function(x:Float, y:Float, z:Float, id:Int):Howl {}) public function pos():Array; public function pannerAttr(args:PannerAttr, ?id:Int):Howl; } #end typedef HowlOptions = { src:Array, ?volume:Float, ?html5:Bool, ?loop:Bool, ?preload:Bool, ?autoplay:Bool, ?mute:Bool, ?sprite:Dynamic, ?rate:Float, ?pool:Float, ?format:Array, ?onload:Function, ?onloaderror:Function, ?onplay:Function, ?onend:Function, ?onpause:Function, ?onstop:Function, ?onmute:Function, ?onvolume:Function, ?onrate:Function, ?onseek:Function, ?onfade:Function } typedef PannerAttr = { ?coneInnerAngle:Float, ?coneOuterAngle:Float, ?coneOuterGain:Float, ?distanceModel:String, ?maxDistance:Float, ?refDistance:Float, ?rolloffFactor:Float, ?panningModel:String } #end ================================================ FILE: src/lime/media/howlerjs/Howler.hx ================================================ package lime.media.howlerjs; #if (!lime_doc_gen || lime_howlerjs) #if (!lime_howlerjs || display) class Howler { public static var autoSuspend:Bool; public static var ctx:WebAudioContext; public static var masterGain:Dynamic; public static var mobileAutoEnable:Bool; public static var noAudio:Bool; public static var usingWebAudio:Bool; /** * Check for codec support of specific extension. * @param ext Audio file extention. * @return */ public static function codecs(ext:String):Bool { return false; } /** * Handle muting and unmuting globally. * @param muted Is muted or not. */ public static function mute(muted:Bool):Class { return Howler; } /** * Unload and destroy all currently loaded Howl objects. * @return */ public static function unload():Class { return Howler; } /** * Get/set the global volume for all sounds. * @param vol Volume from 0.0 to 1.0. * @return Returns self or current volume. */ public static function volume(?vol:Float):Dynamic { if (vol != null) return Howler; return vol; } } #else import haxe.extern.EitherType; import js.html.audio.GainNode; import lime.media.WebAudioContext; #if commonjs @:jsRequire("howler") #else @:native("Howler") #end extern class Howler { public static var autoSuspend:Bool; public static var ctx:WebAudioContext; public static var masterGain:GainNode; public static var mobileAutoEnable:Bool; public static var noAudio:Bool; public static var usingWebAudio:Bool; public static function codecs(ext:String):Bool; public static function mute(muted:Bool):Howler; public static function unload():Howler; public static function volume(?vol:Float):EitherType; } #end #end ================================================ FILE: src/lime/media/openal/AL.hx ================================================ package lime.media.openal; #if (!lime_doc_gen || lime_openal) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFI; import lime.system.CFFIPointer; import lime.utils.ArrayBufferView; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class AL { public static inline var NONE:Int = 0; public static inline var FALSE:Int = 0; public static inline var TRUE:Int = 1; public static inline var SOURCE_RELATIVE:Int = 0x202; public static inline var CONE_INNER_ANGLE:Int = 0x1001; public static inline var CONE_OUTER_ANGLE:Int = 0x1002; public static inline var PITCH:Int = 0x1003; public static inline var POSITION:Int = 0x1004; public static inline var DIRECTION:Int = 0x1005; public static inline var VELOCITY:Int = 0x1006; public static inline var LOOPING:Int = 0x1007; public static inline var BUFFER:Int = 0x1009; public static inline var GAIN:Int = 0x100A; public static inline var MIN_GAIN:Int = 0x100D; public static inline var MAX_GAIN:Int = 0x100E; public static inline var ORIENTATION:Int = 0x100F; public static inline var SOURCE_STATE:Int = 0x1010; public static inline var INITIAL:Int = 0x1011; public static inline var PLAYING:Int = 0x1012; public static inline var PAUSED:Int = 0x1013; public static inline var STOPPED:Int = 0x1014; public static inline var BUFFERS_QUEUED:Int = 0x1015; public static inline var BUFFERS_PROCESSED:Int = 0x1016; public static inline var REFERENCE_DISTANCE:Int = 0x1020; public static inline var ROLLOFF_FACTOR:Int = 0x1021; public static inline var CONE_OUTER_GAIN:Int = 0x1022; public static inline var MAX_DISTANCE:Int = 0x1023; public static inline var SEC_OFFSET:Int = 0x1024; public static inline var SAMPLE_OFFSET:Int = 0x1025; public static inline var BYTE_OFFSET:Int = 0x1026; public static inline var SOURCE_TYPE:Int = 0x1027; public static inline var STATIC:Int = 0x1028; public static inline var STREAMING:Int = 0x1029; public static inline var UNDETERMINED:Int = 0x1030; public static inline var FORMAT_MONO8:Int = 0x1100; public static inline var FORMAT_MONO16:Int = 0x1101; public static inline var FORMAT_STEREO8:Int = 0x1102; public static inline var FORMAT_STEREO16:Int = 0x1103; public static inline var FREQUENCY:Int = 0x2001; public static inline var BITS:Int = 0x2002; public static inline var CHANNELS:Int = 0x2003; public static inline var SIZE:Int = 0x2004; public static inline var NO_ERROR:Int = 0; public static inline var INVALID_NAME:Int = 0xA001; public static inline var INVALID_ENUM:Int = 0xA002; public static inline var INVALID_VALUE:Int = 0xA003; public static inline var INVALID_OPERATION:Int = 0xA004; public static inline var OUT_OF_MEMORY:Int = 0xA005; public static inline var VENDOR:Int = 0xB001; public static inline var VERSION:Int = 0xB002; public static inline var RENDERER:Int = 0xB003; public static inline var EXTENSIONS:Int = 0xB004; public static inline var DOPPLER_FACTOR:Int = 0xC000; public static inline var SPEED_OF_SOUND:Int = 0xC003; public static inline var DOPPLER_VELOCITY:Int = 0xC001; public static inline var DISTANCE_MODEL:Int = 0xD000; public static inline var INVERSE_DISTANCE:Int = 0xD001; public static inline var INVERSE_DISTANCE_CLAMPED:Int = 0xD002; public static inline var LINEAR_DISTANCE:Int = 0xD003; public static inline var LINEAR_DISTANCE_CLAMPED:Int = 0xD004; public static inline var EXPONENT_DISTANCE:Int = 0xD005; public static inline var EXPONENT_DISTANCE_CLAMPED:Int = 0xD006; /* Listener properties. */ public static inline var METERS_PER_UNIT:Int = 0x20004; /* Source properties. */ public static inline var DIRECT_FILTER:Int = 0x20005; public static inline var AUXILIARY_SEND_FILTER:Int = 0x20006; public static inline var AIR_ABSORPTION_FACTOR:Int = 0x20007; public static inline var ROOM_ROLLOFF_FACTOR:Int = 0x20008; public static inline var CONE_OUTER_GAINHF:Int = 0x20009; public static inline var DIRECT_FILTER_GAINHF_AUTO:Int = 0x2000A; public static inline var AUXILIARY_SEND_FILTER_GAIN_AUTO:Int = 0x2000B; public static inline var AUXILIARY_SEND_FILTER_GAINHF_AUTO:Int = 0x2000C; /* Effect properties. */ /* Reverb effect parameters */ public static inline var REVERB_DENSITY:Int = 0x0001; public static inline var REVERB_DIFFUSION:Int = 0x0002; public static inline var REVERB_GAIN:Int = 0x0003; public static inline var REVERB_GAINHF:Int = 0x0004; public static inline var REVERB_DECAY_TIME:Int = 0x0005; public static inline var REVERB_DECAY_HFRATIO:Int = 0x0006; public static inline var REVERB_REFLECTIONS_GAIN:Int = 0x0007; public static inline var REVERB_REFLECTIONS_DELAY:Int = 0x0008; public static inline var REVERB_LATE_REVERB_GAIN:Int = 0x0009; public static inline var REVERB_LATE_REVERB_DELAY:Int = 0x000A; public static inline var REVERB_AIR_ABSORPTION_GAINHF:Int = 0x000B; public static inline var REVERB_ROOM_ROLLOFF_FACTOR:Int = 0x000C; public static inline var REVERB_DECAY_HFLIMIT:Int = 0x000D; /* EAX Reverb effect parameters */ // Windows only... ? public static inline var EAXREVERB_DENSITY:Int = 0x0001; public static inline var EAXREVERB_DIFFUSION:Int = 0x0002; public static inline var EAXREVERB_GAIN:Int = 0x0003; public static inline var EAXREVERB_GAINHF:Int = 0x0004; public static inline var EAXREVERB_GAINLF:Int = 0x0005; public static inline var EAXREVERB_DECAY_TIME:Int = 0x0006; public static inline var EAXREVERB_DECAY_HFRATIO:Int = 0x0007; public static inline var EAXREVERB_DECAY_LFRATIO:Int = 0x0008; public static inline var EAXREVERB_REFLECTIONS_GAIN:Int = 0x0009; public static inline var EAXREVERB_REFLECTIONS_DELAY:Int = 0x000A; public static inline var EAXREVERB_REFLECTIONS_PAN:Int = 0x000B; public static inline var EAXREVERB_LATE_REVERB_GAIN:Int = 0x000C; public static inline var EAXREVERB_LATE_REVERB_DELAY:Int = 0x000D; public static inline var EAXREVERB_LATE_REVERB_PAN:Int = 0x000E; public static inline var EAXREVERB_ECHO_TIME:Int = 0x000F; public static inline var EAXREVERB_ECHO_DEPTH:Int = 0x0010; public static inline var EAXREVERB_MODULATION_TIME:Int = 0x0011; public static inline var EAXREVERB_MODULATION_DEPTH:Int = 0x0012; public static inline var EAXREVERB_AIR_ABSORPTION_GAINHF:Int = 0x0013; public static inline var EAXREVERB_HFREFERENCE:Int = 0x0014; public static inline var EAXREVERB_LFREFERENCE:Int = 0x0015; public static inline var EAXREVERB_ROOM_ROLLOFF_FACTOR:Int = 0x0016; public static inline var EAXREVERB_DECAY_HFLIMIT:Int = 0x0017; /* Chorus effect parameters */ public static inline var CHORUS_WAVEFORM:Int = 0x0001; public static inline var CHORUS_PHASE:Int = 0x0002; public static inline var CHORUS_RATE:Int = 0x0003; public static inline var CHORUS_DEPTH:Int = 0x0004; public static inline var CHORUS_FEEDBACK:Int = 0x0005; public static inline var CHORUS_DELAY:Int = 0x0006; /* Distortion effect parameters */ public static inline var DISTORTION_EDGE:Int = 0x0001; public static inline var DISTORTION_GAIN:Int = 0x0002; public static inline var DISTORTION_LOWPASS_CUTOFF:Int = 0x0003; public static inline var DISTORTION_EQCENTER:Int = 0x0004; public static inline var DISTORTION_EQBANDWIDTH:Int = 0x0005; /* Echo effect parameters */ public static inline var ECHO_DELAY:Int = 0x0001; public static inline var ECHO_LRDELAY:Int = 0x0002; public static inline var ECHO_DAMPING:Int = 0x0003; public static inline var ECHO_FEEDBACK:Int = 0x0004; public static inline var ECHO_SPREAD:Int = 0x0005; /* Flanger effect parameters */ public static inline var FLANGER_WAVEFORM:Int = 0x0001; public static inline var FLANGER_PHASE:Int = 0x0002; public static inline var FLANGER_RATE:Int = 0x0003; public static inline var FLANGER_DEPTH:Int = 0x0004; public static inline var FLANGER_FEEDBACK:Int = 0x0005; public static inline var FLANGER_DELAY:Int = 0x0006; /* Frequency shifter effect parameters */ public static inline var FREQUENCY_SHIFTER_FREQUENCY:Int = 0x0001; public static inline var FREQUENCY_SHIFTER_LEFT_DIRECTION:Int = 0x0002; public static inline var FREQUENCY_SHIFTER_RIGHT_DIRECTION:Int = 0x0003; /* Vocal morpher effect parameters */ public static inline var VOCAL_MORPHER_PHONEMEA:Int = 0x0001; public static inline var VOCAL_MORPHER_PHONEMEA_COARSE_TUNING:Int = 0x0002; public static inline var VOCAL_MORPHER_PHONEMEB:Int = 0x0003; public static inline var VOCAL_MORPHER_PHONEMEB_COARSE_TUNING:Int = 0x0004; public static inline var VOCAL_MORPHER_WAVEFORM:Int = 0x0005; public static inline var VOCAL_MORPHER_RATE:Int = 0x0006; /* Pitchshifter effect parameters */ public static inline var PITCH_SHIFTER_COARSE_TUNE:Int = 0x0001; public static inline var PITCH_SHIFTER_FINE_TUNE:Int = 0x0002; /* Ringmodulator effect parameters */ public static inline var RING_MODULATOR_FREQUENCY:Int = 0x0001; public static inline var RING_MODULATOR_HIGHPASS_CUTOFF:Int = 0x0002; public static inline var RING_MODULATOR_WAVEFORM:Int = 0x0003; /* Autowah effect parameters */ public static inline var AUTOWAH_ATTACK_TIME:Int = 0x0001; public static inline var AUTOWAH_RELEASE_TIME:Int = 0x0002; public static inline var AUTOWAH_RESONANCE:Int = 0x0003; public static inline var AUTOWAH_PEAK_GAIN:Int = 0x0004; /* Compressor effect parameters */ public static inline var COMPRESSOR_ONOFF:Int = 0x0001; /* Equalizer effect parameters */ public static inline var EQUALIZER_LOW_GAIN:Int = 0x0001; public static inline var EQUALIZER_LOW_CUTOFF:Int = 0x0002; public static inline var EQUALIZER_MID1_GAIN:Int = 0x0003; public static inline var EQUALIZER_MID1_CENTER:Int = 0x0004; public static inline var EQUALIZER_MID1_WIDTH:Int = 0x0005; public static inline var EQUALIZER_MID2_GAIN:Int = 0x0006; public static inline var EQUALIZER_MID2_CENTER:Int = 0x0007; public static inline var EQUALIZER_MID2_WIDTH:Int = 0x0008; public static inline var EQUALIZER_HIGH_GAIN:Int = 0x0009; public static inline var EQUALIZER_HIGH_CUTOFF:Int = 0x000A; /* Effect type */ public static inline var EFFECT_FIRST_PARAMETER:Int = 0x0000; public static inline var EFFECT_LAST_PARAMETER:Int = 0x8000; public static inline var EFFECT_TYPE:Int = 0x8001; /* Effect types, used with the AL_EFFECT_TYPE property */ public static inline var EFFECT_NULL:Int = 0x0000; public static inline var EFFECT_EAXREVERB:Int = 0x8000; public static inline var EFFECT_REVERB:Int = 0x0001; public static inline var EFFECT_CHORUS:Int = 0x0002; public static inline var EFFECT_DISTORTION:Int = 0x0003; public static inline var EFFECT_ECHO:Int = 0x0004; public static inline var EFFECT_FLANGER:Int = 0x0005; public static inline var EFFECT_FREQUENCY_SHIFTER:Int = 0x0006; public static inline var EFFECT_VOCAL_MORPHER:Int = 0x0007; public static inline var EFFECT_PITCH_SHIFTER:Int = 0x0008; public static inline var EFFECT_RING_MODULATOR:Int = 0x0009; public static inline var FFECT_AUTOWAH:Int = 0x000A; // TODO: deprecate and remove public static inline var EFFECT_AUTOWAH:Int = 0x000A; public static inline var EFFECT_COMPRESSOR:Int = 0x000B; public static inline var EFFECT_EQUALIZER:Int = 0x000C; /* Auxiliary Effect Slot properties. */ public static inline var EFFECTSLOT_EFFECT:Int = 0x0001; public static inline var EFFECTSLOT_GAIN:Int = 0x0002; public static inline var EFFECTSLOT_AUXILIARY_SEND_AUTO:Int = 0x0003; /* NULL Auxiliary Slot ID to disable a source send. */ // public static inline var EFFECTSLOT_NULL:Int = 0x0000; //Use removeSend instead /* Filter properties. */ /* Lowpass filter parameters */ public static inline var LOWPASS_GAIN:Int = 0x0001; /*Not exactly a lowpass. Apparently it's a shelf*/ public static inline var LOWPASS_GAINHF:Int = 0x0002; /* Highpass filter parameters */ public static inline var HIGHPASS_GAIN:Int = 0x0001; public static inline var HIGHPASS_GAINLF:Int = 0x0002; /* Bandpass filter parameters */ public static inline var BANDPASS_GAIN:Int = 0x0001; public static inline var BANDPASS_GAINLF:Int = 0x0002; public static inline var BANDPASS_GAINHF:Int = 0x0003; /* Filter type */ public static inline var FILTER_FIRST_PARAMETER:Int = 0x0000; /*This is not even in the documentation*/ public static inline var FILTER_LAST_PARAMETER:Int = 0x8000; /*This one neither*/ public static inline var FILTER_TYPE:Int = 0x8001; /* Filter types, used with the AL_FILTER_TYPE property */ public static inline var FILTER_NULL:Int = 0x0000; public static inline var FILTER_LOWPASS:Int = 0x0001; public static inline var FILTER_HIGHPASS:Int = 0x0002; public static inline var FILTER_BANDPASS:Int = 0x0003; public static function removeDirectFilter(source:ALSource) { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_remove_direct_filter(source); #end } public static function removeSend(source:ALSource, index:Int) { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_remove_send(source, index); #end } public static function auxf(aux:CFFIPointer, param:Int, value:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_auxf(aux, param, value); #end } public static function auxfv(aux:CFFIPointer, param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_auxfv(aux, param, values); #end } public static function auxi(aux:CFFIPointer, param:Int, value:Dynamic):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_auxi(aux, param, value); #end } public static function auxiv(aux:CFFIPointer, param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_auxiv(aux, param, values); #end } public static function bufferData(buffer:ALBuffer, format:Int, data:ArrayBufferView, size:Int, freq:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_buffer_data(buffer, format, data, size, freq); #end } public static function buffer3f(buffer:ALBuffer, param:Int, value1:Float, value2:Float, value3:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_buffer3f(buffer, param, value1, value2, value3); #end } public static function buffer3i(buffer:ALBuffer, param:Int, value1:Int, value2:Int, value3:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_buffer3i(buffer, param, value1, value2, value3); #end } public static function bufferf(buffer:ALBuffer, param:Int, value:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_bufferf(buffer, param, value); #end } public static function bufferfv(buffer:ALBuffer, param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_bufferfv(buffer, param, values); #end } public static function bufferi(buffer:ALBuffer, param:Int, value:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_bufferi(buffer, param, value); #end } public static function bufferiv(buffer:ALBuffer, param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_bufferiv(buffer, param, values); #end } public static function createAux():ALAuxiliaryEffectSlot { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_gen_aux(); #else return null; #end } public static function createBuffer():ALBuffer { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_gen_buffer(); #else return null; #end } public static function createEffect():ALEffect { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_gen_effect(); #else return null; #end } public static function createFilter():ALFilter { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_gen_filter(); #else return null; #end } public static function createSource():ALSource { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_gen_source(); #else return null; #end } public static function deleteBuffer(buffer:ALBuffer):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_delete_buffer(buffer); #end } public static function deleteBuffers(buffers:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _buffers = new hl.NativeArray(buffers.length); for (i in 0...buffers.length) _buffers[i] = buffers[i]; var buffers = _buffers; #end NativeCFFI.lime_al_delete_buffers(buffers.length, buffers); #end } public static function deleteSource(source:ALSource):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_delete_source(source); #end } public static function deleteSources(sources:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _sources = new hl.NativeArray(sources.length); for (i in 0...sources.length) _sources[i] = sources[i]; var sources = _sources; #end NativeCFFI.lime_al_delete_sources(sources.length, sources); #end } public static function disable(capability:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_disable(capability); #end } public static function distanceModel(distanceModel:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_distance_model(distanceModel); #end } public static function dopplerFactor(value:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_doppler_factor(value); #end } public static function dopplerVelocity(value:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_doppler_velocity(value); #end } public static function effectf(effect:CFFIPointer, param:Int, value:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_effectf(effect, param, value); #end } public static function effectfv(effect:CFFIPointer, param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_effectfv(effect, param, values); #end } public static function effecti(effect:CFFIPointer, param:Int, value:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_effecti(effect, param, value); #end } public static function effectiv(effect:CFFIPointer, param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_effectiv(effect, param, values); #end } public static function enable(capability:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_enable(capability); #end } @:deprecated("genSource has been renamed to 'createSource' for consistency with OpenGL") public static function genSource():ALSource { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_gen_source(); #else return null; #end } public static function genSources(n:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_gen_sources(n); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } @:deprecated("genBuffer has been renamed to 'createBuffer' for consistency with OpenGL") public static function genBuffer():ALBuffer { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_gen_buffer(); #else return null; #end } public static function genBuffers(n:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_gen_buffers(n); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getBoolean(param:Int):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_boolean(param); #else return false; #end } public static function getBooleanv(param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_booleanv(param, 1); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getBuffer3f(buffer:ALBuffer, param:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_buffer3f(buffer, param); #if hl if (result == null) return []; var _result:Array = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getBuffer3i(buffer:ALBuffer, param:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_buffer3i(buffer, param); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getBufferf(buffer:ALBuffer, param:Int):Float { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_bufferf(buffer, param); #else return 0; #end } public static function getBufferfv(buffer:ALBuffer, param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_bufferfv(buffer, param, count); #if hl if (result == null) return []; var _result:Array = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getBufferi(buffer:ALBuffer, param:Int):Int { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_bufferi(buffer, param); #else return 0; #end } public static function getBufferiv(buffer:ALBuffer, param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_bufferiv(buffer, param, count); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getDouble(param:Int):Float { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_double(param); #else return 0; #end } public static function getDoublev(param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_doublev(param, count); #if hl if (result == null) return []; var _result:Array = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getEnumValue(ename:String):Int { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_enum_value(ename); #else return 0; #end } public static function getError():Int { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_error(); #else return 0; #end } public static function getErrorString():String { return switch (getError()) { case INVALID_NAME: "INVALID_NAME: Invalid parameter name"; case INVALID_ENUM: "INVALID_ENUM: Invalid enum value"; case INVALID_VALUE: "INVALID_VALUE: Invalid parameter value"; case INVALID_OPERATION: "INVALID_OPERATION: Illegal operation or call"; case OUT_OF_MEMORY: "OUT_OF_MEMORY: OpenAL has run out of memory"; default: ""; } } public static function getFilteri(filter:ALFilter, param:Int):Int { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_filteri(filter, param); #else return 0; #end } public static function getFloat(param:Int):Float { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_float(param); #else return 0; #end } public static function getFloatv(param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_floatv(param, count); #if hl if (result == null) return []; var _result:Array = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getInteger(param:Int):Int { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_integer(param); #else return 0; #end } public static function getIntegerv(param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_integerv(param, count); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getListener3f(param:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_listener3f(param); #if hl if (result == null) return []; var _result:Array = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getListener3i(param:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_listener3i(param); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getListenerf(param:Int):Float { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_listenerf(param); #else return 0; #end } public static function getListenerfv(param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_listenerfv(param, count); #if hl if (result == null) return []; var _result:Array = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getListeneri(param:Int):Int { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_listeneri(param); #else return 0; #end } public static function getListeneriv(param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_listeneriv(param, count); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } @:dox(hide) @:noCompletion public static function getParameter(param:Int):Dynamic { // TODO, return any type value (similar to WebGL getParameter) return null; } public static function getProcAddress(fname:String):Dynamic { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_proc_address(fname); #else return null; #end } public static function getSource3f(source:ALSource, param:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_source3f(source, param); #if hl if (result == null) return []; var _result:Array = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getSourcef(source:ALSource, param:Int):Float { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_sourcef(source, param); #else return 0; #end } public static function getSource3i(source:ALSource, param:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_source3i(source, param); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getSourcefv(source:ALSource, param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_sourcefv(source, param, count); #if hl if (result == null) return []; var _result:Array = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getSourcei(source:ALSource, param:Int):Dynamic { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_get_sourcei(source, param); #else return 0; #end } public static function getSourceiv(source:ALSource, param:Int, count:Int = 1):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_sourceiv(source, param, count); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getString(param:Int):String { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_get_string(param); return CFFI.stringValue(result); #else return null; #end } public static function isBuffer(buffer:ALBuffer):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_is_buffer(buffer); #else return false; #end } public static function isEnabled(capability:Int):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_is_enabled(capability); #else return false; #end } public static function isExtensionPresent(extname:String):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_is_extension_present(extname); #else return false; #end } public static function isAux(aux:ALAuxiliaryEffectSlot):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_is_aux(aux); #else return false; #end } public static function isEffect(effect:ALEffect):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_is_effect(effect); #else return false; #end } public static function isFilter(filter:ALFilter):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_is_filter(filter); #else return false; #end } public static function isSource(source:ALSource):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_al_is_source(source); #else return false; #end } public static function listener3f(param:Int, value1:Float, value2:Float, value3:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_listener3f(param, value1, value2, value3); #end } public static function listener3i(param:Int, value1:Int, value2:Int, value3:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_listener3i(param, value1, value2, value3); #end } public static function listenerf(param:Int, value:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_listenerf(param, value); #end } public static function listenerfv(param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_listenerfv(param, values); #end } public static function listeneri(param:Int, value:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_listeneri(param, value); #end } public static function listeneriv(param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_listeneriv(param, values); #end } public static function source3f(source:ALSource, param:Int, value1:Float, value2:Float, value3:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_source3f(source, param, value1, value2, value3); #end } public static function source3i(source:ALSource, param:Int, value1:Dynamic, value2:Int, value3:Int):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_source3i(source, param, value1, value2, value3); #end } public static function sourcef(source:ALSource, param:Int, value:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_sourcef(source, param, value); #end } public static function sourcefv(source:ALSource, param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_sourcefv(source, param, values); #end } public static function sourcei(source:ALSource, param:Int, value:Dynamic):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_sourcei(source, param, value); #end } public static function filteri(filter:ALFilter, param:Int, value:Dynamic):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_filteri(filter, param, value); #end } public static function filterf(filter:ALFilter, param:Int, value:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_filterf(filter, param, value); #end } public static function sourceiv(source:ALSource, param:Int, values:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _values = new hl.NativeArray(values.length); for (i in 0...values.length) _values[i] = values[i]; var values = _values; #end NativeCFFI.lime_al_sourceiv(source, param, values); #end } public static function sourcePlay(source:ALSource):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_source_play(source); #end } public static function sourcePlayv(sources:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _sources = new hl.NativeArray(sources.length); for (i in 0...sources.length) _sources[i] = sources[i]; var sources = _sources; #end NativeCFFI.lime_al_source_playv(sources.length, sources); #end } public static function sourceStop(source:ALSource):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_source_stop(source); #end } public static function sourceStopv(sources:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _sources = new hl.NativeArray(sources.length); for (i in 0...sources.length) _sources[i] = sources[i]; var sources = _sources; #end NativeCFFI.lime_al_source_stopv(sources.length, sources); #end } public static function sourceRewind(source:ALSource):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_source_rewind(source); #end } public static function sourceRewindv(sources:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _sources = new hl.NativeArray(sources.length); for (i in 0...sources.length) _sources[i] = sources[i]; var sources = _sources; #end NativeCFFI.lime_al_source_rewindv(sources.length, sources); #end } public static function sourcePause(source:ALSource):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_source_pause(source); #end } public static function sourcePausev(sources:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _sources = new hl.NativeArray(sources.length); for (i in 0...sources.length) _sources[i] = sources[i]; var sources = _sources; #end NativeCFFI.lime_al_source_pausev(sources.length, sources); #end } public static function sourceQueueBuffer(source:ALSource, buffer:ALBuffer):Void { #if (lime_cffi && lime_openal && !macro) #if hl var buffers:hl.NativeArray = new hl.NativeArray(1); buffers[0] = buffer; #else var buffers:Array = [buffer]; #end NativeCFFI.lime_al_source_queue_buffers(source, 1, buffers); #end } public static function sourceQueueBuffers(source:ALSource, nb:Int, buffers:Array):Void { #if (lime_cffi && lime_openal && !macro) #if hl var _buffers = new hl.NativeArray(buffers.length); for (i in 0...buffers.length) _buffers[i] = buffers[i]; var buffers = _buffers; #end NativeCFFI.lime_al_source_queue_buffers(source, nb, buffers); #end } public static function sourceUnqueueBuffer(source:ALSource):ALBuffer { #if (lime_cffi && lime_openal && !macro) var res = NativeCFFI.lime_al_source_unqueue_buffers(source, 1); return res[0]; #else return cast 0; #end } public static function sourceUnqueueBuffers(source:ALSource, nb:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_al_source_unqueue_buffers(source, nb); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function speedOfSound(value:Float):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_al_speed_of_sound(value); #end } } #end ================================================ FILE: src/lime/media/openal/ALAuxiliaryEffectSlot.hx ================================================ package lime.media.openal; #if (!lime_doc_gen || lime_openal) import lime.system.CFFIPointer; @:allow(lime.media.openal.AL) abstract ALAuxiliaryEffectSlot(CFFIPointer) from CFFIPointer to CFFIPointer { @:noCompletion private inline function new(handle:CFFIPointer) { this = handle; } } #end ================================================ FILE: src/lime/media/openal/ALBuffer.hx ================================================ package lime.media.openal; #if (!lime_doc_gen || lime_openal) import lime.system.CFFIPointer; @:allow(lime.media.openal.AL) @:transitive abstract ALBuffer(CFFIPointer) from CFFIPointer to CFFIPointer { @:noCompletion private inline function new(handle:CFFIPointer) { this = handle; } } #end ================================================ FILE: src/lime/media/openal/ALC.hx ================================================ package lime.media.openal; #if (!lime_doc_gen || lime_openal) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFI; import lime.system.CFFIPointer; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class ALC { public static inline var FALSE:Int = 0; public static inline var TRUE:Int = 1; public static inline var FREQUENCY:Int = 0x1007; public static inline var REFRESH:Int = 0x1008; public static inline var SYNC:Int = 0x1009; public static inline var MONO_SOURCES:Int = 0x1010; public static inline var STEREO_SOURCES:Int = 0x1011; public static inline var NO_ERROR:Int = 0; public static inline var INVALID_DEVICE:Int = 0xA001; public static inline var INVALID_CONTEXT:Int = 0xA002; public static inline var INVALID_ENUM:Int = 0xA003; public static inline var INVALID_VALUE:Int = 0xA004; public static inline var OUT_OF_MEMORY:Int = 0xA005; public static inline var ATTRIBUTES_SIZE:Int = 0x1002; public static inline var ALL_ATTRIBUTES:Int = 0x1003; public static inline var DEFAULT_DEVICE_SPECIFIER:Int = 0x1004; public static inline var DEVICE_SPECIFIER:Int = 0x1005; public static inline var EXTENSIONS:Int = 0x1006; public static inline var ENUMERATE_ALL_EXT:Int = 1; public static inline var DEFAULT_ALL_DEVICES_SPECIFIER:Int = 0x1012; public static inline var ALL_DEVICES_SPECIFIER:Int = 0x1013; public static function closeDevice(device:ALDevice):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_alc_close_device(device); #else return false; #end } public static function createContext(device:ALDevice, attrlist:Array = null):ALContext { #if (lime_cffi && lime_openal && !macro) #if hl var _attrlist = null; if (attrlist != null) { _attrlist = new hl.NativeArray(attrlist.length); for (i in 0...attrlist.length) _attrlist[i] = attrlist[i]; } var attrlist = _attrlist; #end var handle = NativeCFFI.lime_alc_create_context(device, attrlist); if (handle != null) { return new ALContext(handle); } #end return null; } public static function destroyContext(context:ALContext):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_alc_destroy_context(context); #end } public static function getContextsDevice(context:ALContext):ALDevice { #if (lime_cffi && lime_openal && !macro) var handle:Dynamic = NativeCFFI.lime_alc_get_contexts_device(context); if (handle != null) { return new ALDevice(handle); } #end return null; } public static function getCurrentContext():ALContext { #if (lime_cffi && lime_openal && !macro) var handle:Dynamic = NativeCFFI.lime_alc_get_current_context(); if (handle != null) { return new ALContext(handle); } #end return null; } public static function getError(device:ALDevice):Int { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_alc_get_error(device); #else return 0; #end } public static function getErrorString(device:ALDevice):String { return switch (getError(device)) { case INVALID_DEVICE: "INVALID_DEVICE: Invalid device (or no device?)"; case INVALID_CONTEXT: "INVALID_CONTEXT: Invalid context (or no context?)"; case INVALID_ENUM: "INVALID_ENUM: Invalid enum value"; case INVALID_VALUE: "INVALID_VALUE: Invalid param value"; case OUT_OF_MEMORY: "OUT_OF_MEMORY: OpenAL has run out of memory"; default: ""; } } public static function getIntegerv(device:ALDevice, param:Int, size:Int):Array { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_alc_get_integerv(device, param, size); #if hl if (result == null) return []; var _result = []; for (i in 0...result.length) _result[i] = result[i]; return _result; #else return result; #end #else return null; #end } public static function getString(device:ALDevice, param:Int):String { #if (lime_cffi && lime_openal && !macro) var result = NativeCFFI.lime_alc_get_string(device, param); return CFFI.stringValue(result); #else return null; #end } public static function makeContextCurrent(context:ALContext):Bool { #if (lime_cffi && lime_openal && !macro) return NativeCFFI.lime_alc_make_context_current(context); #else return false; #end } public static function openDevice(deviceName:String = null):ALDevice { #if (lime_cffi && lime_openal && !macro) var handle = NativeCFFI.lime_alc_open_device(deviceName); if (handle != null) { return new ALDevice(handle); } #end return null; } public static function pauseDevice(device:ALDevice):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_alc_pause_device(device); #end } public static function processContext(context:ALContext):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_alc_process_context(context); #end } public static function resumeDevice(device:ALDevice):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_alc_resume_device(device); #end } public static function suspendContext(context:ALContext):Void { #if (lime_cffi && lime_openal && !macro) NativeCFFI.lime_alc_suspend_context(context); #end } } #end ================================================ FILE: src/lime/media/openal/ALContext.hx ================================================ package lime.media.openal; #if (!lime_doc_gen || lime_openal) import lime.system.CFFIPointer; @:allow(lime.media.openal.AL) @:allow(lime.media.openal.ALC) abstract ALContext(CFFIPointer) from CFFIPointer to CFFIPointer { @:noCompletion private inline function new(handle:CFFIPointer) { this = handle; } } #end ================================================ FILE: src/lime/media/openal/ALDevice.hx ================================================ package lime.media.openal; #if (!lime_doc_gen || lime_openal) import lime.system.CFFIPointer; @:allow(lime.media.openal.AL) @:allow(lime.media.openal.ALC) abstract ALDevice(CFFIPointer) from CFFIPointer to CFFIPointer { @:noCompletion private inline function new(handle:CFFIPointer) { this = handle; } } #end ================================================ FILE: src/lime/media/openal/ALEffect.hx ================================================ package lime.media.openal; #if (!lime_doc_gen || lime_openal) import lime.system.CFFIPointer; @:allow(lime.media.openal.AL) abstract ALEffect(CFFIPointer) from CFFIPointer to CFFIPointer { @:noCompletion private inline function new(handle:CFFIPointer) { this = handle; } } #end ================================================ FILE: src/lime/media/openal/ALFilter.hx ================================================ package lime.media.openal; #if (!lime_doc_gen || lime_openal) import lime.system.CFFIPointer; @:allow(lime.media.openal.AL) abstract ALFilter(CFFIPointer) from CFFIPointer to CFFIPointer { @:noCompletion private inline function new(handle:CFFIPointer) { this = handle; } } #end ================================================ FILE: src/lime/media/openal/ALSource.hx ================================================ package lime.media.openal; #if (!lime_doc_gen || lime_openal) import lime.system.CFFIPointer; @:allow(lime.media.openal.AL) abstract ALSource(CFFIPointer) from CFFIPointer to CFFIPointer { @:noCompletion private inline function new(handle:CFFIPointer) { this = handle; } } #end ================================================ FILE: src/lime/media/vorbis/Vorbis.hx ================================================ package lime.media.vorbis; #if (!lime_doc_gen || lime_vorbis) @:headerCode(" #undef EFAULT #undef EINVAL ") class Vorbis { public static inline var FALSE = -1; public static inline var EOF = -2; public static inline var HOLE = -3; public static inline var EREAD = -128; public static inline var EFAULT = -129; public static inline var EIMPL = -130; public static inline var EINVAL = -131; public static inline var ENOTVORBIS = -132; public static inline var EBADHEADER = -133; public static inline var EVERSION = -134; public static inline var ENOTAUDIO = -135; public static inline var EBADPACKET = -136; public static inline var EBADLINK = -137; public static inline var ENOSEEK = -138; // TODO: Vorbis primitives } #end ================================================ FILE: src/lime/media/vorbis/VorbisComment.hx ================================================ package lime.media.vorbis; #if (!lime_doc_gen || lime_vorbis) class VorbisComment { public var userComments:Array; public var vendor:String; public function new() {} } #end ================================================ FILE: src/lime/media/vorbis/VorbisFile.hx ================================================ package lime.media.vorbis; #if (!lime_doc_gen || lime_vorbis) import haxe.Int64; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; #if hl @:keep #end @:access(lime._internal.backend.native.NativeCFFI) class VorbisFile { public var bitstream(default, null):Int; @:noCompletion private var handle:Dynamic; @:noCompletion private function new(handle:Dynamic) { this.handle = handle; } public function bitrate(bitstream:Int = -1):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_bitrate(handle, bitstream); #else return 0; #end } public function bitrateInstant():Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_bitrate_instant(handle); #else return 0; #end } public function clear():Void { #if (lime_cffi && lime_vorbis && !macro) NativeCFFI.lime_vorbis_file_clear(handle); #end } public function comment(bitstream:Int = -1):VorbisComment { #if (lime_cffi && lime_vorbis && !macro) var data = NativeCFFI.lime_vorbis_file_comment(handle, bitstream); if (data != null) { var comment = new VorbisComment(); comment.userComments = data.userComments; comment.vendor = data.vendor; return comment; } #end return null; } public function crosslap(other:VorbisFile):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_crosslap(handle, other.handle); #else return 0; #end } public static function fromBytes(bytes:Bytes):VorbisFile { #if (lime_cffi && lime_vorbis && !macro) var handle = NativeCFFI.lime_vorbis_file_from_bytes(bytes); if (handle != null) { return new VorbisFile(handle); } #end return null; } public static function fromFile(path:String):VorbisFile { #if (lime_cffi && lime_vorbis && !macro) var handle = NativeCFFI.lime_vorbis_file_from_file(path); if (handle != null) { return new VorbisFile(handle); } #end return null; } public function info(bitstream:Int = -1):VorbisInfo { #if (lime_cffi && lime_vorbis && !macro) var data = NativeCFFI.lime_vorbis_file_info(handle, bitstream); if (data != null) { var info = new VorbisInfo(); info.bitrateLower = data.bitrateLower; info.bitrateNominal = data.bitrateNominal; info.bitrateUpper = data.bitrateUpper; info.channels = data.channels; info.rate = data.rate; info.version = data.version; return info; } #end return null; } public function pcmSeek(pos:Int64):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_pcm_seek(handle, pos.low, pos.high); #else return 0; #end } public function pcmSeekLap(pos:Int64):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_pcm_seek_lap(handle, pos.low, pos.high); #else return 0; #end } public function pcmSeekPage(pos:Int64):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_pcm_seek_page(handle, pos.low, pos.high); #else return 0; #end } public function pcmSeekPageLap(pos:Int64):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_pcm_seek_page_lap(handle, pos.low, pos.high); #else return 0; #end } public function pcmTell():Int64 { #if (lime_cffi && lime_vorbis && !macro) var data = NativeCFFI.lime_vorbis_file_pcm_tell(handle); if (data != null) { return Int64.make(data.high, data.low); } #end return Int64.ofInt(0); } public function pcmTotal(bitstream:Int = -1):Int64 { #if (lime_cffi && lime_vorbis && !macro) var data = NativeCFFI.lime_vorbis_file_pcm_total(handle, bitstream); if (data != null) { return Int64.make(data.high, data.low); } #end return Int64.ofInt(0); } public function rawSeek(pos:Int64):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_raw_seek(handle, pos.low, pos.high); #else return 0; #end } public function rawSeekLap(pos:Int64):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_raw_seek_lap(handle, pos.low, pos.high); #else return 0; #end } public function rawTell():Int64 { #if (lime_cffi && lime_vorbis && !macro) var data = NativeCFFI.lime_vorbis_file_raw_tell(handle); if (data != null) { return Int64.make(data.high, data.low); } #end return Int64.ofInt(0); } public function rawTotal(bitstream:Int = -1):Int64 { #if (lime_cffi && lime_vorbis && !macro) var data = NativeCFFI.lime_vorbis_file_raw_total(handle, bitstream); if (data != null) { return Int64.make(data.high, data.low); } #end return Int64.ofInt(0); } public function read(buffer:Bytes, position:Int, length:Int = 4096, bigEndianPacking:Bool = false, wordSize:Int = 2, signed:Bool = true):Int { #if (lime_cffi && lime_vorbis && !macro) var data = NativeCFFI.lime_vorbis_file_read(handle, buffer, position, length, bigEndianPacking, wordSize, signed); if (data == null) return 0; bitstream = data.bitstream; return data.returnValue; #else return 0; #end } // public function readFilter (buffer:Bytes, length:Int = 4096, endianness:Endian = LITTLE_ENDIAN, wordSize:Int = 2, signed:Bool = true, bitstream:Int = 0, filter, filter_param public function readFloat(pcmChannels:Bytes, samples:Int):Int { #if (lime_cffi && lime_vorbis && !macro) var data = NativeCFFI.lime_vorbis_file_read_float(handle, pcmChannels, samples); if (data == null) return 0; bitstream = data.bitstream; return data.returnValue; #else return 0; #end } public function seekable():Bool { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_seekable(handle); #else return false; #end } public function serialNumber(bitstream:Int = -1):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_serial_number(handle, bitstream); #else return 0; #end } public function streams():Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_streams(handle); #else return 0; #end } public function timeSeek(s:Float):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_time_seek(handle, s); #else return 0; #end } public function timeSeekLap(s:Float):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_time_seek_lap(handle, s); #else return 0; #end } public function timeSeekPage(s:Float):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_time_seek_page(handle, s); #else return 0; #end } public function timeSeekPageLap(s:Float):Int { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_time_seek_page_lap(handle, s); #else return 0; #end } public function timeTell():Float { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_time_tell(handle); #else return 0; #end } public function timeTotal(bitstream:Int = -1):Float { #if (lime_cffi && lime_vorbis && !macro) return NativeCFFI.lime_vorbis_file_time_total(handle, bitstream); #else return 0; #end } } #end ================================================ FILE: src/lime/media/vorbis/VorbisInfo.hx ================================================ package lime.media.vorbis; #if (!lime_doc_gen || lime_vorbis) class VorbisInfo { public var bitrateLower:Int; public var bitrateNominal:Int; public var bitrateUpper:Int; // public var bitrateWindow:Int; public var channels:Int; public var rate:Int; public var version:Int; public function new() {} } #end ================================================ FILE: src/lime/net/HTTPRequest.hx ================================================ package lime.net; import haxe.io.Bytes; import haxe.macro.Compiler; import lime.app.Event; import lime.app.Future; import lime.app.Promise; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end #if doc_gen class HTTPRequest { #else #if !macro @:genericBuild(lime._internal.macros.HTTPRequestMacro.build()) #end class HTTPRequest extends AbstractHTTPRequest {} #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end private class AbstractHTTPRequest implements _IHTTPRequest { #end public var contentType:String; public var data:Bytes; public var enableResponseHeaders:Bool; public var followRedirects:Bool; public var formData:Map; public var headers:Array; public var method:HTTPRequestMethod; public var responseData:T; public var responseHeaders:Array; public var responseStatus:Int; public var timeout:Int; public var uri:String; public var userAgent:String; public var withCredentials:Bool; public var manageCookies:Bool; #if !doc_gen @:noCompletion private var __backend:HTTPRequestBackend; #end public function new(uri:String = null) { this.uri = uri; contentType = "application/x-www-form-urlencoded"; followRedirects = true; enableResponseHeaders = false; formData = new Map(); headers = []; method = GET; timeout = #if lime_default_timeout Std.parseInt(Compiler.getDefine("lime-default-timeout")) #else 30000 #end; withCredentials = false; manageCookies = true; #if !doc_gen __backend = new HTTPRequestBackend(); __backend.init(this); #end } public function cancel():Void { #if !doc_gen __backend.cancel(); #end } public function load(uri:String = null):Future { return null; } } #if !doc_gen #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:noCompletion class _HTTPRequest_Bytes extends AbstractHTTPRequest { public function new(uri:String = null) { super(uri); } @:noCompletion private function fromBytes(bytes:Bytes):T { return cast bytes; } public override function load(uri:String = null):Future { if (uri != null) { this.uri = uri; } var promise = new Promise(); var future = __backend.loadData(this.uri); future.onProgress(promise.progress); future.onError(function(errorResponse:_HTTPRequestErrorResponse) { responseData = errorResponse.responseData; promise.error(errorResponse.error); }); future.onComplete(function(bytes) { responseData = fromBytes(bytes); promise.complete(responseData); }); return promise.future; } } #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:noCompletion class _HTTPRequest_String extends AbstractHTTPRequest { public function new(uri:String = null) { super(uri); } public override function load(uri:String = null):Future { if (uri != null) { this.uri = uri; } var promise = new Promise(); var future = __backend.loadText(this.uri); future.onProgress(promise.progress); future.onError(function(errorResponse:_HTTPRequestErrorResponse) { responseData = errorResponse.responseData; promise.error(errorResponse.error); }); future.onComplete(function(text) { responseData = cast text; promise.complete(responseData); }); return promise.future; } } @:noCompletion class _HTTPRequestErrorResponse { public var error:Dynamic; public var responseData:T; public function new(error:Dynamic, responseData:T) { this.error = error; this.responseData = responseData; } } @:noCompletion interface _IHTTPRequest { public var contentType:String; public var data:haxe.io.Bytes; public var enableResponseHeaders:Bool; public var followRedirects:Bool; public var formData:Map; public var headers:Array; public var method:HTTPRequestMethod; // public var responseData:T; public var responseHeaders:Array; public var responseStatus:Int; public var timeout:Int; public var uri:String; public var userAgent:String; public var withCredentials:Bool; public var manageCookies:Bool; public function cancel():Void; } #if flash private typedef HTTPRequestBackend = lime._internal.backend.flash.FlashHTTPRequest; #elseif (js && html5) private typedef HTTPRequestBackend = lime._internal.backend.html5.HTML5HTTPRequest; #else private typedef HTTPRequestBackend = lime._internal.backend.native.NativeHTTPRequest; #end #end ================================================ FILE: src/lime/net/HTTPRequestHeader.hx ================================================ package lime.net; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class HTTPRequestHeader { public var name:String; public var value:String; public function new(name:String, value:String = "") { this.name = name; this.value = value; } } ================================================ FILE: src/lime/net/HTTPRequestMethod.hx ================================================ package lime.net; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract HTTPRequestMethod(String) from String to String { public var DELETE = "DELETE"; public var GET = "GET"; public var HEAD = "HEAD"; public var OPTIONS = "OPTIONS"; public var POST = "POST"; public var PUT = "PUT"; } ================================================ FILE: src/lime/net/URIParser.hx ================================================ package lime.net; /** Class used for parsing URIs and URLs. Based on http://blog.stevenlevithan.com/archives/parseuri **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class URIParser { public static var URI_REGEX = ~/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/; public static var QUERY_REGEX = ~/(?:^|&)([^&=]*)=?([^&]*)/; /** The original URI from the constructor if the parsing is successful. Otherwise `null`. **/ public var source:String; /** Protocol found in this URI. In `"https://example.com/page/index.html"` this would be `"https"`. `null` if unspecified or malformed. **/ public var protocol:String; /** Hostname and port along with the credentials found in this URI. In `"https://john:secret@example.com:443/page/index.html"` this would be `"john:secret@example.com:443"`. `null` if unspecified or malformed. **/ public var authority:String; /** Credentials found in this URI. In `"https://john:secret@example.com/page/index.html"` this would be `"john:secret"`. `null` if unspecified or malformed. **/ public var userInfo:String; /** Username found in this URI. In `"https://john:secret@example.com/index.html"` this would be `"john"`. `null` if unspecified or malformed. **/ public var user:String; /** Password found in this URI. In `"https://john:secret@example.com/index.html"` this would be `"secret"`. `null` if unspecified or malformed. **/ public var password:String; /** Hostname (domain/IP) found in this URI. In `"https://subdomain.example.com:443/index.html"` this would be `"subdomain.example.com"` `null` if unspecified or malformed. **/ public var host:String; /** Port used in this URI as **String**. In `"https://subdomain.example.com:443/index.html"` this would be `"443"`. `null` if unspecified or malformed. **/ public var port:String; /** Full path after the host with all the directories and parameters, starting with `/`. In `"https://subdomain.example.com/files/website/index.php?action=upload&token=12345#header"` this would be `"/files/website/index.php?action=upload&token=12345#header"`. `null` if unspecified or malformed. **/ public var relative:String; /** Full path after the domain with directories, starting with `/`, without parameters In `"https://subdomain.example.com/files/website/index.php?action=upload&token=12345#header"` this would be `"/files/website/index.php"`. `null` if unspecified or malformed. **/ public var path:String; /** Directory where the target file pointed by the URI is located. Starts and ends with `/`. In `"https://subdomain.example.com/files/website/index.php"` this would be `"/files/website/"`. `null` if unspecified or malformed. **/ public var directory:String; /** Name of the file pointed by the URI. In `"https://example.com/files/website/index.php?action=upload"` this would be `"index.php"`. `null` if unspecified or malformed. **/ public var file:String; /** Query string passed to the URI. In `"https://example.com/index.php?action=upload&token=12345#header"` this would be `"action=upload&token=12345"`. `null` if unspecified or malformed. **/ public var query:String; /** The "#hash" part of the URI. In `"https://example.com/index.php?action=upload&token=12345#header"` this would be `"header"`. In a more sophisicated example `"https://example.com/index.php?action=upload#header=/abc/1234"` that would be `"header=/abc/1234"`. `null` if unspecified or malformed. **/ public var anchor:String; /** Value from `query` returned as an array of key-value pairs. In `"https://example.com/index.php?action=upload&token=12345#header"` the array would be `[{k: "action", v: "upload"}, {k: "token", v: "12345"}]`. If query is not present or the URI is malformed, it is just an empty array. ```haxe var uri = new URIParser("https://example.com/index.php?action=upload&token=12345#header"); for( q in uri.queryArray ) trace( q.k + " = " + q.v); // action = upload // token = 12345 ``` **/ public var queryArray:Array; /** Parses the given URI with regular expression and stores its parts in class variables. If the URI is malformed and cannot be parsed, the values will be `null`. @param uri the URI to be parsed. **/ public function new(uri:String) { if (URI_REGEX.match(uri)) { source = uri; protocol = URI_REGEX.matched(1); authority = URI_REGEX.matched(2); userInfo = URI_REGEX.matched(3); user = URI_REGEX.matched(4); password = URI_REGEX.matched(5); host = URI_REGEX.matched(6); port = URI_REGEX.matched(7); relative = URI_REGEX.matched(8); path = URI_REGEX.matched(9); directory = URI_REGEX.matched(10); file = URI_REGEX.matched(11); query = URI_REGEX.matched(12); anchor = URI_REGEX.matched(13); if (query != null && query.length > 0) { queryArray = parseQuery(query); } } else { trace('URI "$uri" isn\'t well formed.'); } } public static function parseQuery(query:String):Array { var result:Array = []; for (str in query.split("&")) { if (QUERY_REGEX.match(str)) { result.push({k: QUERY_REGEX.matched(1), v: QUERY_REGEX.matched(2)}); } } return result; } } @:dox(hide) typedef KVPair = { k:String, v:String }; ================================================ FILE: src/lime/net/curl/CURL.hx ================================================ package lime.net.curl; #if (!lime_doc_gen || lime_curl) import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; import lime.system.CFFI; import lime.system.CFFIPointer; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class CURL { public static inline var GLOBAL_SSL:Int = 1 << 0; public static inline var GLOBAL_WIN32:Int = 1 << 1; public static inline var GLOBAL_ALL:Int = GLOBAL_SSL | GLOBAL_WIN32; public static inline var GLOBAL_NOTHING:Int = 0; public static inline var GLOBAL_DEFAULT:Int = GLOBAL_ALL; public static inline var GLOBAL_ACK_EINTR:Int = 1 << 2; @:noCompletion private var handle:CFFIPointer; @:noCompletion private var headerBytes:Bytes; @:noCompletion private var writeBytes:Bytes; public function new(handle:CFFIPointer = null) { if (handle != null) { this.handle = handle; } else { #if (lime_cffi && lime_curl && !macro) this.handle = NativeCFFI.lime_curl_easy_init(); #end } } public function cleanup():Void { #if (lime_cffi && lime_curl && !macro) NativeCFFI.lime_curl_easy_cleanup(handle); #end } public function clone():CURL { #if (lime_cffi && lime_curl && !macro) return new CURL(NativeCFFI.lime_curl_easy_duphandle(handle)); #else return null; #end } public function escape(url:String, length:Int):String { #if (lime_cffi && lime_curl && !macro) var result = NativeCFFI.lime_curl_easy_escape(handle, url, length); return CFFI.stringValue(result); #else return null; #end } public static function getDate(date:String, now:Int):Int { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_getdate(date, cast now); #else return 0; #end } public function getInfo(info:CURLInfo):Dynamic { #if (lime_cffi && lime_curl && !macro) return NativeCFFI.lime_curl_easy_getinfo(handle, cast(info, Int)); #else return null; #end } public static function globalCleanup():Void { #if (lime_cffi && lime_curl && !macro) NativeCFFI.lime_curl_global_cleanup(); #end } public static function globalInit(flags:Int):CURLCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_global_init(flags); #else return cast 0; #end } public function pause(bitMask:Int):CURLCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_easy_pause(handle, bitMask); #else return cast 0; #end } public function perform():CURLCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_easy_perform(handle); #else return cast 0; #end } /*public static function recv (handle:Dynamic):CURLCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_easy_perform (handle); #else return cast 0; #end }*/ public function reset():Void { #if (lime_cffi && lime_curl && !macro) NativeCFFI.lime_curl_easy_reset(handle); #end } /*public static function send (handle:Dynamic):CURLCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_easy_perform (handle); #else return cast 0; #end }*/ public function setOption(option:CURLOption, parameter:Dynamic):CURLCode { #if (lime_cffi && lime_curl && !macro) var bytes = null; switch (option) { case CURLOption.PROGRESSFUNCTION: var callback:CURL->Float->Float->Float->Float->Void = cast parameter; parameter = function(dltotal:Float, dlnow:Float, ultotal:Float, ulnow:Float) { callback(this, dltotal, dlnow, ultotal, ulnow); } case CURLOption.XFERINFOFUNCTION: var callback:CURL->Int->Int->Int->Int->Int = cast parameter; parameter = function(dltotal:Int, dlnow:Int, ultotal:Int, ulnow:Int):Int { return callback(this, dltotal, dlnow, ultotal, ulnow); } case CURLOption.WRITEFUNCTION: var callback:CURL->Bytes->Int = cast parameter; parameter = function(bytes:Bytes, length:Int):Int { var cacheLength = bytes.length; @:privateAccess bytes.length = length; var read = callback(this, bytes); @:privateAccess bytes.length = cacheLength; return read; } bytes = Bytes.alloc(0); // case CURLOption.READFUNCTION: // Impossible to support with GC blocking restrictions // TODO: Unsafe version? // return cast 0; case CURLOption.READDATA: bytes = parameter; case CURLOption.HEADERFUNCTION: var callback:CURL->String->Void = cast parameter; parameter = function(header) { callback(this, CFFI.stringValue(header)); } case CURLOption.HTTPHEADER: #if hl var headers:Array = cast parameter; var _headers = new hl.NativeArray(headers.length); for (i in 0...headers.length) _headers[i] = headers[i]; parameter = _headers; #end default: } return cast NativeCFFI.lime_curl_easy_setopt(handle, cast(option, Int), parameter, bytes); #else return cast 0; #end } public static function strerror(code:CURLCode):String { #if (lime_cffi && lime_curl && !macro) var result = NativeCFFI.lime_curl_easy_strerror(cast(code, Int)); return CFFI.stringValue(result); #else return null; #end } public function unescape(url:String, inLength:Int, outLength:Int):String { #if (lime_cffi && lime_curl && !macro) var result = NativeCFFI.lime_curl_easy_unescape(handle, url, inLength, outLength); return CFFI.stringValue(result); #else return null; #end } public static function version():String { #if (lime_cffi && lime_curl && !macro) var result = NativeCFFI.lime_curl_version(); return CFFI.stringValue(result); #else return null; #end } public static function versionInfo(type:CURLVersion):Dynamic { #if (lime_cffi && lime_curl && !macro) return NativeCFFI.lime_curl_version_info(cast(type, Int)); #else return null; #end } } #end ================================================ FILE: src/lime/net/curl/CURLCode.hx ================================================ package lime.net.curl; #if (!lime_doc_gen || lime_curl) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CURLCode(Int) from Int to Int from UInt to UInt { var OK = 0; var UNSUPPORTED_PROTOCOL = 1; var FAILED_INIT = 2; var URL_MALFORMAT = 3; var NOT_BUILT_IN = 4; var COULDNT_RESOLVE_PROXY = 5; var COULDNT_RESOLVE_HOST = 6; var COULDNT_CONNECT = 7; var WEIRD_SERVER_REPLY = 8; var REMOTE_ACCESS_DENIED = 9; var FTP_ACCEPT_FAILED = 10; var FTP_WEIRD_PASS_REPLY = 11; var FTP_ACCEPT_TIMEOUT = 12; var FTP_WEIRD_PASV_REPLY = 13; var FTP_WEIRD_227_FORMAT = 14; var FTP_CANT_GET_HOST = 15; var HTTP2 = 16; var FTP_COULDNT_SET_TYPE = 17; var PARTIAL_FILE = 18; var FTP_COULDNT_RETR_FILE = 19; // var OBSOLETE20 = 20; var QUOTE_ERROR = 21; var HTTP_RETURNED_ERROR = 22; var WRITE_ERROR = 23; // var OBSOLETE24 = 24; var UPLOAD_FAILED = 25; var READ_ERROR = 26; var OUT_OF_MEMORY = 27; var OPERATION_TIMEDOUT = 28; // var OBSOLETE29 = 29; var FTP_PORT_FAILED = 30; var FTP_COULDNT_USE_REST = 31; // var OBSOLETE32 = 32; var RANGE_ERROR = 33; var HTTP_POST_ERROR = 34; var SSL_CONNECT_ERROR = 35; var BAD_DOWNLOAD_RESUME = 36; var FILE_COULDNT_READ_FILE = 37; var LDAP_CANNOT_BIND = 38; var LDAP_SEARCH_FAILED = 39; // var OBSOLETE40 = 40; // var FUNCTION_NOT_FOUND = 41; var ABORTED_BY_CALLBACK = 42; var BAD_FUNCTION_ARGUMENT = 43; // var OBSOLETE44 = 44; var INTERFACE_FAILED = 45; // var OBSOLETE46 = 46; var TOO_MANY_REDIRECTS = 47; var UNKNOWN_OPTION = 48; var TELNET_OPTION_SYNTAX = 49; // var OBSOLETE50 = 50; var PEER_FAILED_VERIFICATION = 51; var GOT_NOTHING = 52; var SSL_ENGINE_NOTFOUND = 53; var SSL_ENGINE_SETFAILED = 54; var SEND_ERROR = 55; var RECV_ERROR = 56; // var OBSOLETE57 = 57; var SSL_CERTPROBLEM = 58; var SSL_CIPHER = 59; var SSL_CACERT = 60; var BAD_CONTENT_ENCODING = 61; var LDAP_INVALID_URL = 62; var FILESIZE_EXCEEDED = 63; var USE_SSL_FAILED = 64; var SEND_FAIL_REWIND = 65; var SSL_ENGINE_INITFAILED = 66; var LOGIN_DENIED = 67; var TFTP_NOTFOUND = 68; var TFTP_PERM = 69; var REMOTE_DISK_FULL = 70; var TFTP_ILLEGAL = 71; var TFTP_UNKNOWNID = 72; var REMOTE_FILE_EXISTS = 73; var TFTP_NOSUCHUSER = 74; var CONV_FAILED = 75; var CONV_REQD = 76; var SSL_CACERT_BADFILE = 77; var REMOTE_FILE_NOT_FOUND = 78; var SSH = 79; var SSL_SHUTDOWN_FAILED = 80; var AGAIN = 81; var SSL_CRL_BADFILE = 82; var SSL_ISSUER_ERROR = 83; var FTP_PRET_FAILED = 84; var RTSP_CSEQ_ERROR = 85; var RTSP_SESSION_ERROR = 86; var FTP_BAD_FILE_LIST = 87; var CHUNK_FAILED = 88; var NO_CONNECTION_AVAILABLE = 89; var SSL_PINNEDPUBKEYNOTMATCH = 90; var SSL_INVALIDCERTSTATUS = 91; var HTTP2_STREAM = 92; // var LAST = 93; } #end ================================================ FILE: src/lime/net/curl/CURLInfo.hx ================================================ package lime.net.curl; #if (!lime_doc_gen || lime_curl) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CURLInfo(Int) from Int to Int from UInt to UInt { var NONE = 0; var EFFECTIVE_URL = 0x100000 + 1; var RESPONSE_CODE = 0x200000 + 2; var TOTAL_TIME = 0x300000 + 3; var NAMELOOKUP_TIME = 0x300000 + 4; var CONNECT_TIME = 0x300000 + 5; var PRETRANSFER_TIME = 0x300000 + 6; var SIZE_UPLOAD = 0x300000 + 7; var SIZE_UPLOAD_T = 0x600000 + 7; var SIZE_DOWNLOAD = 0x300000 + 8; var SIZE_DOWNLOAD_T = 0x600000 + 8; var SPEED_DOWNLOAD = 0x300000 + 9; var SPEED_DOWNLOAD_T = 0x600000 + 9; var SPEED_UPLOAD = 0x300000 + 10; var SPEED_UPLOAD_T = 0x600000 + 10; var HEADER_SIZE = 0x200000 + 11; var REQUEST_SIZE = 0x200000 + 12; var SSL_VERIFYRESULT = 0x200000 + 13; var FILETIME = 0x200000 + 14; var CONTENT_LENGTH_DOWNLOAD = 0x300000 + 15; var CONTENT_LENGTH_DOWNLOAD_T = 0x600000 + 15; var CONTENT_LENGTH_UPLOAD = 0x300000 + 16; var CONTENT_LENGTH_UPLOAD_T = 0x300000 + 16; var STARTTRANSFER_TIME = 0x300000 + 17; var CONTENT_TYPE = 0x100000 + 18; var REDIRECT_TIME = 0x300000 + 19; var REDIRECT_COUNT = 0x200000 + 20; var PRIVATE = 0x100000 + 21; var HTTP_CONNECTCODE = 0x200000 + 22; var HTTPAUTH_AVAIL = 0x200000 + 23; var PROXYAUTH_AVAIL = 0x200000 + 24; var OS_ERRNO = 0x200000 + 25; var NUM_CONNECTS = 0x200000 + 26; var SSL_ENGINES = 0x400000 + 27; var COOKIELIST = 0x400000 + 28; var LASTSOCKET = 0x200000 + 29; var FTP_ENTRY_PATH = 0x100000 + 30; var REDIRECT_URL = 0x100000 + 31; var PRIMARY_IP = 0x100000 + 32; var APPCONNECT_TIME = 0x300000 + 33; var CERTINFO = 0x400000 + 34; var CONDITION_UNMET = 0x200000 + 35; var RTSP_SESSION_ID = 0x100000 + 36; var RTSP_CLIENT_CSEQ = 0x200000 + 37; var RTSP_SERVER_CSEQ = 0x200000 + 38; var RTSP_CSEQ_RECV = 0x200000 + 39; var PRIMARY_PORT = 0x200000 + 40; var LOCAL_IP = 0x100000 + 41; var LOCAL_PORT = 0x200000 + 42; var TLS_SESSION = 0x400000 + 43; var ACTIVESOCKET = 0x500000 + 44; var TLS_SSL_PTR = 0x400000 + 45; var HTTP_VERSION = 0x200000 + 46; var PROXY_SSL_VERIFYRESULT = 0x200000 + 47; var PROTOCOL = 0x200000 + 48; var SCHEME = 0x100000 + 49; } #end ================================================ FILE: src/lime/net/curl/CURLMulti.hx ================================================ package lime.net.curl; #if (!lime_doc_gen || lime_curl) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.net.curl.CURL) @:access(lime.net.curl.CURLMultiMessage) class CURLMulti { public var runningHandles(get, never):Int; @:noCompletion private var handle:CFFIPointer; #if hl @:noCompletion private var infoObject:CURLMultiMessage; #end public function new(handle:CFFIPointer = null) { if (handle != null) { this.handle = handle; } else { #if (lime_cffi && lime_curl && !macro) this.handle = NativeCFFI.lime_curl_multi_init(); #end } #if hl infoObject = new CURLMultiMessage(null, 0); #end } public function addHandle(curl:CURL):CURLMultiCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_multi_add_handle(handle, curl, curl.handle); #else return cast 0; #end } public function infoRead():CURLMultiMessage { #if (lime_cffi && lime_curl && !macro) var msg:Dynamic = NativeCFFI.lime_curl_multi_info_read(handle #if hl, infoObject #end); if (msg != null) { return new CURLMultiMessage(msg.curl, msg.result); } #end return null; } public function perform():CURLMultiCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_multi_perform(handle); #else return cast 0; #end } public function removeHandle(curl:CURL):CURLMultiCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_multi_remove_handle(handle, curl.handle); #else return cast 0; #end } public function setOption(option:CURLMultiOption, parameter:Dynamic):CURLMultiCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_multi_setopt(handle, option, parameter); #else return cast 0; #end } public function wait(timeoutMS:Int):CURLMultiCode { #if (lime_cffi && lime_curl && !macro) return cast NativeCFFI.lime_curl_multi_wait(handle, timeoutMS); #else return cast 0; #end } // Get & Set Methods @:noCompletion private function get_runningHandles():Int { #if (lime_cffi && lime_curl && !macro) return NativeCFFI.lime_curl_multi_get_running_handles(handle); #else return 0; #end } } #end ================================================ FILE: src/lime/net/curl/CURLMultiCode.hx ================================================ package lime.net.curl; #if (!lime_doc_gen || lime_curl) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CURLMultiCode(Int) from Int to Int from UInt /*to UInt*/ { /* please call curl_multi_perform() or curl_multi_socket*() soon */ var CALL_MULTI_PERFORM = -1; var OK = 0; /* the passed-in handle is not a valid CURLM handle */ var BAD_HANDLE = 1; /* an easy handle was not good/valid */ var BAD_EASY_HANDLE = 2; /* if you ever get this, you're in trouble */ var OUT_OF_MEMORY = 3; /* this is a libcurl bug */ var INTERNAL_ERROR = 4; /* the passed in socket argument did not match */ var BAD_SOCKET = 5; /* curl_multi_setopt() with unsupported option */ var UNKNOWN_OPTION = 6; /* an easy handle already added to a multi handle was attempted to get added - again */ var ADDED_ALREADY = 7; // LAST } #end ================================================ FILE: src/lime/net/curl/CURLMultiMessage.hx ================================================ package lime.net.curl; #if (!lime_doc_gen || lime_curl) class CURLMultiMessage { public var curl:CURL; public var result:CURLCode; @:noCompletion private function new(curl:CURL, result:CURLCode) { this.curl = curl; this.result = result; } } #end ================================================ FILE: src/lime/net/curl/CURLMultiOption.hx ================================================ package lime.net.curl; #if (!lime_doc_gen || lime_curl) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CURLMultiOption(Int) from Int to Int from UInt to UInt { /* This is the socket callback function pointer */ var SOCKETFUNCTION = 200001; /* This is the argument passed to the socket callback */ var SOCKETDATA = 100002; /* set to 1 to enable pipelining for this multi handle */ var PIPELINING = 3; /* This is the timer callback function pointer */ var TIMERFUNCTION = 20004; /* This is the argument passed to the timer callback */ var TIMERDATA = 10005; /* maximum number of entries in the connection cache */ var MAXCONNECTS = 6; /* maximum number of (pipelining) connections to one host */ var MAX_HOST_CONNECTIONS = 7; /* maximum number of requests in a pipeline */ var MAX_PIPELINE_LENGTH = 8; /* a connection with a content-length longer than this will not be considered for pipelining */ var CONTENT_LENGTH_PENALTY_SIZE = 30009; /* a connection with a chunk length longer than this will not be considered for pipelining */ var CHUNK_LENGTH_PENALTY_SIZE = 30010; /* a list of site names(+port) that are blacklisted from pipelining */ var PIPELINING_SITE_BL = 10011; /* a list of server types that are blacklisted from pipelining */ var PIPELINING_SERVER_BL = 10012; /* maximum number of open connections in total */ var MAX_TOTAL_CONNECTIONS = 13; /* This is the server push callback function pointer */ var PUSHFUNCTION = 20014; /* This is the argument passed to the server push callback */ var PUSHDATA = 10015; } #end ================================================ FILE: src/lime/net/curl/CURLOption.hx ================================================ package lime.net.curl; #if (!lime_doc_gen || lime_curl) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CURLOption(Int) from Int to Int from UInt to UInt { // var FILE = 10001; // var WRITEDATA = 10001; var URL = 10002; var PORT = 3; var PROXY = 10004; var USERPWD = 10005; var PROXYUSERPWD = 10006; var RANGE = 10007; var INFILE = 10009; var READDATA = 10009; var ERRORBUFFER = 10010; var WRITEFUNCTION = 20011; var READFUNCTION = 20012; var TIMEOUT = 13; var INFILESIZE = 14; var POSTFIELDS = 10015; var REFERER = 10016; var FTPPORT = 10017; var USERAGENT = 10018; var LOW_SPEED_LIMIT = 19; var LOW_SPEED_TIME = 20; var RESUME_FROM = 21; var COOKIE = 22; var HTTPHEADER = 10023; var RTSPHEADER = 10023; var HTTPPOST = 10024; var SSLCERT = 10025; var KEYPASSWD = 10026; var CRLF = 27; var QUOTE = 10028; var WRITEHEADER = 10029; var HEADERDATA = 10029; var COOKIEFILE = 10031; var SSLVERSION = 32; var TIMECONDITION = 33; var TIMEVALUE = 34; var CUSTOMREQUEST = 10036; var STDERR = 10037; var POSTQUOTE = 10039; var WRITEINFO = 10040; var VERBOSE = 41; var HEADER = 42; var NOPROGRESS = 43; var NOBODY = 44; var FAILONERROR = 45; var UPLOAD = 46; var POST = 47; var DIRLISTONLY = 48; var APPEND = 50; var NETRC = 51; var FOLLOWLOCATION = 52; var TRANSFERTEXT = 53; var PUT = 54; var PROGRESSFUNCTION = 20056; var PROGRESSDATA = 10057; var XFERINFODATA = 10057; var AUTOREFERER = 58; var PROXYPORT = 59; var POSTFIELDSIZE = 60; var HTTPPROXYTUNNEL = 61; var INTERFACE = 10062; var KRBLEVEL = 10063; var SSL_VERIFYPEER = 64; var CAINFO = 10065; var MAXREDIRS = 68; var FILETIME = 69; var TELNETOPTIONS = 10070; var MAXCONNECTS = 71; var CLOSEPOLICY = 72; var FRESH_CONNECT = 74; var FORBID_REUSE = 75; var RANDOM_FILE = 10076; var EGDSOCKET = 10077; var CONNECTTIMEOUT = 78; var HEADERFUNCTION = 20079; var HTTPGET = 80; var SSL_VERIFYHOST = 81; var COOKIEJAR = 10082; var SSL_CIPHER_LIST = 10083; var HTTP_VERSION = 84; var FTP_USE_EPSV = 85; var SSLCERTTYPE = 10086; var SSLKEY = 10087; var SSLKEYTYPE = 10088; var SSLENGINE = 10089; var SSLENGINE_DEFAULT = 90; var DNS_USE_GLOBAL_CACHE = 91; var DNS_CACHE_TIMEOUT = 92; var PREQUOTE = 10093; var DEBUGFUNCTION = 20094; var DEBUGDATA = 10095; var COOKIESESSION = 96; var CAPATH = 10097; var BUFFERSIZE = 98; var NOSIGNAL = 99; var SHARE = 10100; var PROXYTYPE = 101; var ACCEPT_ENCODING = 10102; var PRIVATE = 10103; var HTTP200ALIASES = 10104; var UNRESTRICTED_AUTH = 105; var FTP_USE_EPRT = 106; var HTTPAUTH = 107; var SSL_CTX_FUNCTION = 20108; var SSL_CTX_DATA = 10109; var FTP_CREATE_MISSING_DIRS = 110; var PROXYAUTH = 111; var FTP_RESPONSE_TIMEOUT = 112; var SERVER_RESPONSE_TIMEOUT = 112; var IPRESOLVE = 113; var MAXFILESIZE = 114; var INFILESIZE_LARGE = 30115; var RESUME_FROM_LARGE = 30116; var MAXFILESIZE_LARGE = 30117; var NETRC_FILE = 10118; var USE_SSL = 119; var POSTFIELDSIZE_LARGE = 30120; var TCP_NODELAY = 121; var FTPSSLAUTH = 129; var IOCTLFUNCTION = 20130; var IOCTLDATA = 10131; var FTP_ACCOUNT = 10134; var COOKIELIST = 10135; var IGNORE_CONTENT_LENGTH = 10136; var FTP_SKIP_PASV_IP = 137; var FTP_FILEMETHOD = 138; var LOCALPORT = 139; var LOCALPORTRANGE = 140; var CONNECT_ONLY = 141; var CONV_FROM_NETWORK_FUNCTION = 20142; var CONV_TO_NETWORK_FUNCTION = 20143; var CONV_FROM_UTF8_FUNCTION = 20144; var MAX_SEND_SPEED_LARGE = 30145; var MAX_RECV_SPEED_LARGE = 30146; var FTP_ALTERNATIVE_TO_USER = 10147; var SOCKOPTFUNCTION = 20148; var SOCKOPTDATA = 10149; var SSL_SESSIONID_CACHE = 150; var SSH_AUTH_TYPES = 151; var SSH_PUBLIC_KEYFILE = 10152; var SSH_PRIVATE_KEYFILE = 10153; var FTP_SSL_CCC = 154; var TIMEOUT_MS = 155; var CONNECTTIMEOUT_MS = 156; var HTTP_TRANSFER_DECODING = 157; var HTTP_CONTENT_DECODING = 158; var NEW_FILE_PERMS = 159; var NEW_DIRECTORY_PERMS = 160; var POSTREDIR = 161; var SSH_HOST_PUBLIC_KEY_MD5 = 10162; var OPENSOCKETFUNCTION = 20163; var OPENSOCKETDATA = 10164; var COPYPOSTFIELDS = 10165; var PROXY_TRANSFER_MODE = 166; var SEEKFUNCTION = 20167; var SEEKDATA = 10168; var CRLFILE = 10169; var ISSUERCERT = 10170; var ADDRESS_SCOPE = 171; var CERTINFO = 172; var USERNAME = 10173; var PASSWORD = 10174; var PROXYUSERNAME = 10175; var PROXYPASSWORD = 10176; var NOPROXY = 10177; var TFTP_BLKSIZE = 178; var SOCKS5_GSSAPI_SERVICE = 10179; var SOCKS5_GSSAPI_NEC = 180; var PROTOCOLS = 181; var REDIR_PROTOCOLS = 182; var SSH_KNOWNHOSTS = 10183; var SSH_KEYFUNCTION = 20184; var SSH_KEYDATA = 10185; var MAIL_FROM = 10186; var MAIL_RCPT = 10187; var FTP_USE_PRET = 188; var RTSP_REQUEST = 189; var RTSP_SESSION_ID = 10190; var RTSP_STREAM_URI = 10191; var RTSP_TRANSPORT = 10192; var RTSP_CLIENT_CSEQ = 193; var RTSP_SERVER_CSEQ = 194; var INTERLEAVEDATA = 10195; var INTERLEAVEFUNCTION = 20196; var WILDCARDMATCH = 197; var CHUNK_BGN_FUNCTION = 20198; var CHUNK_END_FUNCTION = 20199; var FNMATCH_FUNCTION = 20200; var CHUNK_DATA = 10201; var FNMATCH_DATA = 10202; var RESOLVE = 10203; var TLSAUTH_USERNAME = 10204; var TLSAUTH_PASSWORD = 10205; var TLSAUTH_TYPE = 10206; var TRANSFER_ENCODING = 207; var CLOSESOCKETFUNCTION = 20208; var CLOSESOCKETDATA = 10209; var GSSAPI_DELEGATION = 210; var DNS_SERVERS = 10211; var ACCEPTTIMEOUT_MS = 212; var TCP_KEEPALIVE = 213; var TCP_KEEPIDLE = 214; var TCP_KEEPINTVL = 215; var SSL_OPTIONS = 216; var MAIL_AUTH = 10217; var SASL_IR = 218; var XFERINFOFUNCTION = 20219; var XOAUTH2_BEARER = 10220; var DNS_INTERFACE = 10221; var DNS_LOCAL_IP4 = 10222; var DNS_LOCAL_IP6 = 10223; var LOGIN_OPTIONS = 10224; var SSL_ENABLE_NPN = 225; var SSL_ENABLE_ALPN = 226; var EXPECT_100_TIMEOUT_MS = 227; var PROXYHEADER = 10228; var HEADEROPT = 229; var PINNEDPUBLICKEY = 10230; var UNIX_SOCKET_PATH = 10231; var SSL_VERIFYSTATUS = 232; var SSL_FALSESTART = 233; var PATH_AS_IS = 234; var PROXY_SERVICE_NAME = 10235; var SERVICE_NAME = 10236; var PIPEWAIT = 237; var DEFAULT_PROTOCOL = 10238; var STREAM_WEIGHT = 239; var STREAM_DEPENDS = 10240; var STREAM_DEPENDS_E = 10241; var TFTP_NO_OPTIONS = 242; var CONNECT_TO = 243; var TCP_FASTOPEN = 244; var KEEP_SENDING_ON_ERROR = 245; var PROXY_CAINFO = 10246; var PROXY_CAPATH = 10247; var PROXY_SSL_VERIFYPEER = 248; var PROXY_SSL_VERIFYHOST = 249; var PROXY_SSLVERSION = 250; var PROXY_TLSAUTH_USERNAME = 10251; var PROXY_TLSAUTH_PASSWORD = 10252; var PROXY_TLSAUTH_TYPE = 10253; var PROXY_SSLCERT = 10254; var PROXY_SSLCERTTYPE = 10255; var PROXY_SSLKEY = 10256; var PROXY_SSLKEYTYPE = 10257; var PROXY_KEYPASSWD = 10258; var PROXY_SSL_CIPHER_LIST = 10259; var PROXY_CRLFILE = 10260; var PROXY_SSL_OPTIONS = 261; var PRE_PROXY = 10262; var PROXY_PINNEDPUBLICKEY = 10263; var ABSTRACT_UNIX_SOCKET = 10264; var SUPPRESS_CONNECT_HEADERS = 265; var REQUEST_TARGET = 10266; var SOCKS5_AUTH = 267; var SSH_COMPRESSION = 268; var MIMEPOST = 10269; } #end ================================================ FILE: src/lime/net/curl/CURLVersion.hx ================================================ package lime.net.curl; #if (!lime_doc_gen || lime_curl) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract CURLVersion(Int) from Int to Int from UInt to UInt { var FIRST = 0; var SECOND = 1; var THIRD = 2; var FOURTH = 3; // var LAST = 4; } #end ================================================ FILE: src/lime/net/oauth/OAuthClient.hx ================================================ package lime.net.oauth; import haxe.crypto.Sha1; // import lime.net.URLRequestMethod; // import lime.net.URLRequest; class OAuthClient { public var version:OAuthVersion; public var consumer:OAuthConsumer; public function new(version:OAuthVersion, consumer:OAuthConsumer) { this.version = version; this.consumer = consumer; } // public function createRequest (method:URLRequestMethod, url:String):URLRequest { // // var parameters = new Map(); // // parameters.set("oauth_version", Std.string(version)); // parameters.set("oauth_signature_method", Std.string(OAuthSignatureMethod.HMAC_SHA1)); // parameters.set("oauth_nonce", generateNonce ()); // parameters.set("oauth_timestamp", Std.string(Std.int(Date.now ().getTime () / 1000))); // parameters.set("oauth_consumer_key", consumer.key); // // var oauth = new OAuthRequest (version, method, url, parameters); // if(version == V1) oauth.sign (consumer, OAuthSignatureMethod.HMAC_SHA1); // oauth.request.requestHeaders.push(oauth.getHeader()); // return oauth.request; // // } public function generateNonce():String { return Sha1.encode(Std.string(Math.random())); } } ================================================ FILE: src/lime/net/oauth/OAuthConsumer.hx ================================================ package lime.net.oauth; class OAuthConsumer { public var key:String; public var secret:String; public function new(key:String, secret:String) { this.key = key; this.secret = secret; } } ================================================ FILE: src/lime/net/oauth/OAuthRequest.hx ================================================ package lime.net.oauth; // import haxe.crypto.Base64; // import haxe.crypto.Hmac; // import haxe.io.Bytes; // import lime.net.URLRequestMethod; // import lime.net.URLRequestHeader; // import lime.net.URLRequest; // import lime.net.URIParser; // import lime.net.oauth.OAuthToken; // // using StringTools; // // class OAuthRequest { // // public var version:OAuthVersion = V1; // public var parameters:Map; // public var request:URLRequest; // // private var uri:URIParser; // // // public function new (version:OAuthVersion = V1, method:URLRequestMethod, url:String, parameters:Map) { // // this.version = version; // request = new URLRequest(); // request.url = url; // request.method = cast method; // this.parameters = parameters; // // uri = new URIParser(url); // // } // // // public function getHeader ():URLRequestHeader { // // var result = ""; // // switch(version) { // // case V1: // result = "OAuth "; // // var keys = parameters.keys(); // for(key in keys) { // result += '${key.urlEncode()}="${parameters.get(key).urlEncode()}"'; // if(keys.hasNext()) { // result += ", "; // } // } // // case V2: //// TODO // } // // return new URLRequestHeader("Authorization", result); // // } // ///** //* Signs the petition, only for OAuth 1.0 //*/ // public function sign (consumer:OAuthConsumer, ?accessToken:OAuth1AccessToken, ?signatureMethod:OAuthSignatureMethod = HMAC_SHA1):Void { // // var key = consumer.secret.urlEncode() + "&"; // if(accessToken != null) { // key += accessToken.secret == null ? "" : accessToken.secret.urlEncode(); // } // var message = request.method + "&" + normalizeURI() + "&" + normalizeParameters(); // var hash = new Hmac (SHA1); // var bytes = hash.make (Bytes.ofString (key), Bytes.ofString (message)); // // parameters.set("oauth_signature", Base64.encode (bytes)); // } // //// SIGNING FUNCTIONS // ///** //* Prepares the message parameters for the signing process //*/ // private function normalizeParameters():String { // // var result = new Array(); // // if(uri.queryArray != null) { // result = result.concat(uri.queryArray); // } //// TODO add data if POST // // for(key in parameters.keys()) { // // if(key == "realm") continue; // result.push( { k: key, v: parameters.get(key) } ); // // } // // result.sort(OAuthSort); // // return result.map(function(p:KVPair) return p.k.urlEncode()+"="+p.v.urlEncode()).join("&").urlEncode(); // } // // private function normalizeURI():String { // var scheme = uri.protocol == null ? "https" : uri.protocol.toLowerCase(); // var authority = uri.authority.toLowerCase(); // var port = (scheme == "https" || scheme == "http") ? null : uri.port; // var path = uri.path; // var result = (scheme + "://" + authority + (port == null ? "" : ":" + port) + path); // return result.urlEncode(); // } // ///** //* Parameters are sorted by name, using lexicographical byte value ordering. //* If two or more parameters share the same name, they are sorted by their value. //*/ // private function OAuthSort(a:KVPair, b:KVPair) { // return if(a.k < b.k) -1 else if (a.k > b.k) 1 else if (a.v < b.v) -1 else 1; // } // // } // // // typedef KVPair = {k:String, v:String}; ================================================ FILE: src/lime/net/oauth/OAuthSignatureMethod.hx ================================================ package lime.net.oauth; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract OAuthSignatureMethod(String) { // var PLAINTEXT = "PLAINTEXT"; var HMAC_SHA1 = "HMAC-SHA1"; // var RSA_SHA1 = "RSA-SHA1"; } ================================================ FILE: src/lime/net/oauth/OAuthToken.hx ================================================ package lime.net.oauth; class RequestToken { public var token(default, null):String; public var secret(default, null):String; public function new(token:String, secret:String) { this.token = token; this.secret = secret; } } class AccessToken { public var token(default, null):String; public function new(token:String) { this.token = token; } } class OAuth1AccessToken extends AccessToken { public var secret(default, null):String; public function new(token:String, ?secret:String) { super(token); this.secret = secret; } } class OAuth2AccessToken extends AccessToken { public var expires(default, null):Int = -1; public function new(token:String, ?expires:Int) { super(token); this.expires = expires; } } class RefreshToken { public var token(default, null):String; public function new(token:String) { this.token = token; } } ================================================ FILE: src/lime/net/oauth/OAuthVersion.hx ================================================ package lime.net.oauth; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract OAuthVersion(String) { var V1 = "1.0"; var V2 = "2.0"; } ================================================ FILE: src/lime/system/BackgroundWorker.hx ================================================ package lime.system; import lime.app.Application; import lime.app.Event; #if sys #if haxe4 import sys.thread.Deque; import sys.thread.Thread; #elseif cpp import cpp.vm.Deque; import cpp.vm.Thread; #elseif neko import neko.vm.Deque; import neko.vm.Thread; #end #end /** A `BackgroundWorker` allows the execution of a function on a background thread, avoiding the blocking of the main thread. This is particularly useful for long-running operations like file I/O, network requests, or computationally intensive tasks. ### Notes: - **Thread Support:** Only system targets (such as C++, Neko) support threading. - **Events:** The class uses the `Event` class to dispatch completion, error, and progress notifications. @see `ThreadPool` for more advanced threading capabilities, including thread safety, HTML5 threads, and more robust handling of tasks. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class BackgroundWorker { private static var MESSAGE_COMPLETE = "__COMPLETE__"; private static var MESSAGE_ERROR = "__ERROR__"; /** Indicates whether the worker has been canceled. **/ public var canceled(default, null):Bool; /** Indicates whether the worker has completed its task. **/ public var completed(default, null):Bool; /** Dispatched when the worker is about to perform its task. The function to execute should be added as a listener to this event. **/ public var doWork = new EventVoid>(); /** Dispatched when the worker has successfully completed its task. **/ public var onComplete = new EventVoid>(); /** Dispatched if an error occurs during the execution of the worker's task. **/ public var onError = new EventVoid>(); /** Dispatched periodically during the worker's task to provide progress updates. **/ public var onProgress = new EventVoid>(); @:noCompletion private var __runMessage:Dynamic; #if (cpp || neko || (haxe4 && hl)) @:noCompletion private var __messageQueue:Deque; @:noCompletion private var __workerThread:Thread; #end /** Creates a new `BackgroundWorker` instance. **/ public function new() {} /** Cancels the worker's task if it is still running. This won't stop the thread immediately. **/ public function cancel():Void { canceled = true; #if (cpp || neko || (haxe4 && hl)) __workerThread = null; #end } /** Starts the worker's task, optionally passing a message to the task. @param message An optional message to pass to the worker's task. **/ public function run(message:Dynamic = null):Void { canceled = false; completed = false; __runMessage = message; #if (cpp || neko || (haxe4 && hl)) __messageQueue = new Deque(); __workerThread = Thread.create(__doWork); // TODO: Better way to do this if (Application.current != null) { Application.current.onUpdate.add(__update); } #else __doWork(); #end } /** Sends a completion message, indicating that the worker has finished its task. @param message An optional message to pass to the `onComplete` event. **/ public function sendComplete(message:Dynamic = null):Void { completed = true; #if (cpp || neko || (haxe4 && hl)) __messageQueue.add(MESSAGE_COMPLETE); __messageQueue.add(message); #else if (!canceled) { canceled = true; onComplete.dispatch(message); } #end } /** Sends an error message, indicating that an error occurred during the worker's task. @param message An optional message to pass to the `onError` event. **/ public function sendError(message:Dynamic = null):Void { #if (cpp || neko || (haxe4 && hl)) __messageQueue.add(MESSAGE_ERROR); __messageQueue.add(message); #else if (!canceled) { canceled = true; onError.dispatch(message); } #end } /** Sends a progress update message. @param message An optional message to pass to the `onProgress` event. **/ public function sendProgress(message:Dynamic = null):Void { #if (cpp || neko || (haxe4 && hl)) __messageQueue.add(message); #else if (!canceled) { onProgress.dispatch(message); } #end } @:noCompletion private function __doWork():Void { doWork.dispatch(__runMessage); // #if (cpp || neko) // // __messageQueue.add (MESSAGE_COMPLETE); // // #else // // if (!canceled) { // // canceled = true; // onComplete.dispatch (null); // // } // // #end } @:noCompletion private function __update(deltaTime:Int):Void { #if (cpp || neko || (haxe4 && hl)) var message = __messageQueue.pop(false); if (message != null) { if (message == MESSAGE_ERROR) { Application.current.onUpdate.remove(__update); if (!canceled) { canceled = true; onError.dispatch(__messageQueue.pop(false)); } } else if (message == MESSAGE_COMPLETE) { Application.current.onUpdate.remove(__update); if (!canceled) { canceled = true; onComplete.dispatch(__messageQueue.pop(false)); } } else { if (!canceled) { onProgress.dispatch(message); } } } #end } } ================================================ FILE: src/lime/system/CFFI.hx ================================================ package lime.system; #if (!lime_doc_gen || lime_cffi) import haxe.io.Path; import lime._internal.macros.CFFIMacro; #if (sys && !macro) import sys.io.Process; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class CFFI { @:noCompletion private static var __moduleNames:Map = null; #if neko private static var __loadedNekoAPI:Bool; #elseif nodejs private static var __nodeNDLLModule:Dynamic; #end public static var available:Bool; public static var enabled:Bool; private static function __init__():Void { #if lime_cffi available = true; enabled = #if disable_cffi false; #else true; #end #else available = false; enabled = false; #end } #if macro public static function build(defaultLibrary:String = "lime") { return CFFIMacro.build(defaultLibrary); } #end /** * Tries to load a native CFFI primitive on compatible platforms * @param library The name of the native library (such as "lime") * @param method The exported primitive method name * @param args The number of arguments * @param lazy Whether to load the symbol immediately, or to allow lazy loading * @return The loaded method */ public static function load(library:String, method:String, args:Int = 0, lazy:Bool = false):Dynamic { #if (disable_cffi || macro || hl) var enabled = false; #end #if optional_cffi if (library != "lime" || method != "neko_init") { lazy = true; } #end if (!enabled) { return Reflect.makeVarArgs(function(__) return {}); } var result:Dynamic = null; #if (!disable_cffi && !macro) #if (sys && !html5) if (__moduleNames == null) __moduleNames = new Map(); if (lazy) { __moduleNames.set(library, library); try { #if neko result = neko.Lib.loadLazy(library, method, args); #elseif java result = __loadJava(library, method, args); #elseif cpp result = cpp.Lib.loadLazy(library, method, args); #end } catch (e:Dynamic) {} } else { #if (cpp && (iphone || webassembly || android || static_link || tvos)) return cpp.Lib.load(library, method, args); #end if (__moduleNames.exists(library)) { #if cpp return cpp.Lib.load(__moduleNames.get(library), method, args); #elseif neko #if neko_cffi_trace var result:Dynamic = neko.Lib.load(__moduleNames.get(library), method, args); if (result == null) return null; return Reflect.makeVarArgs(function(args) { trace("Called " + library + "@" + method); return Reflect.callMethod(result, result, args); }); #else return neko.Lib.load(__moduleNames.get(library), method, args); #end #elseif nodejs return untyped __nodeNDLLModule.load_lib(__moduleNames.get(library), method, args); #elseif java result = __loadJava(__moduleNames.get(library), method, args); #elseif cs return untyped CSFunctionLoader.load(__moduleNames.get(library), method, args); #else return null; #end } #if waxe if (library == "lime") { flash.Lib.load("waxe", "wx_boot", 1); } #elseif nodejs if (__nodeNDLLModule == null) { __nodeNDLLModule = untyped require('ndll'); } #end __moduleNames.set(library, library); var programPath:String = "."; #if sys programPath = Path.directory(Sys.programPath()); #end result = __tryLoad(programPath + "/" + library, library, method, args); if (result == null) { result = __tryLoad(programPath + "\\" + library, library, method, args); } if (result == null) { result = __tryLoad(library, library, method, args); } if (result == null) { var ndllFolder = __findNDLLFolder(); if (ndllFolder != "") { result = __tryLoad(ndllFolder + __sysName() + "/" + library, library, method, args); if (result == null) { result = __tryLoad(ndllFolder + __sysName() + "64/" + library, library, method, args); } if (result == null) { result = __tryLoad(ndllFolder + __sysName() + "Arm64/" + library, library, method, args); } } } __loaderTrace("Result : " + result); } #if neko if (library == "lime" && method != "neko_init") { __loadNekoAPI(lazy); } #end #end #else result = function(_, _, _, _, _, _) { return {}; }; #end return result; } public static macro function loadPrime(library:String, method:String, signature:String, lazy:Bool = false):Dynamic { #if (!display && !macro && cpp && !disable_cffi) return cpp.Prime.load(library, method, signature, lazy); #else var args = signature.length - 1; if (args > 5) { args = -1; } return {call: CFFI.load(library, method, args, lazy)}; #end } @:dox(hide) #if !hl inline #end public static function stringValue(#if hl value:hl.Bytes #else value:String #end):String { #if hl return value != null ? @:privateAccess String.fromUTF8(value) : null; #else return value; #end } private static function __findNDLLFolder():String { #if (sys && !macro && !html5) var process = new Process("haxelib", ["path", "lime"]); try { while (true) { var line = StringTools.trim(process.stdout.readLine()); if (StringTools.startsWith(line, "-L ")) { process.close(); return Path.addTrailingSlash(line.substr(3)); } } } catch (e:Dynamic) {} process.close(); #end return ""; } private static function __loaderTrace(message:String) { #if (sys && !html5) // #if (haxe_ver < 3.4) // var get_env = cpp.Lib.load ("std", "get_env", 1); // var debug = (get_env ("OPENFL_LOAD_DEBUG") != null); // #else var debug = (Sys.getEnv("OPENFL_LOAD_DEBUG") != null); // #end if (debug) { Sys.println(message); } #end } #if java private static var __loadedLibraries = new Map(); private static function __loadJava(library:String, method:String, args:Int = 0) { if (!__loadedLibraries.exists(library)) { var extension = #if android ".so" #else ".ndll" #end; var path = Sys.getCwd() + "/" + library + extension; java.lang.System.load(path); __loadedLibraries.set(library, true); trace("load library: " + library); } return null; } #end #if neko private static function __loadNekoAPI(lazy:Bool):Void { if (!__loadedNekoAPI) { var init:Dynamic = null; var error:Dynamic = null; try { init = load("lime", "neko_init", 5); } catch (e:Dynamic) { error = e; } if (init != null) { __loaderTrace("Found nekoapi @ " + __moduleNames.get("lime")); init(function(s) return new String(s), function(len:Int) { var r = []; if (len > 0) r[len - 1] = null; return r; }, null, true, false); __loadedNekoAPI = true; } else if (!lazy) { var ndllFolder = __findNDLLFolder() + __sysName(); throw "Could not load lime.ndll. This file is provided with Lime's Haxelib releases, but not via Git. " + "Please copy it from Lime's latest Haxelib release into either " + ndllFolder + " or " + ndllFolder + "64, as appropriate for your system. " + "Advanced users may run `lime rebuild cpp` instead." + (error != null ? '\nInternal error: $error' : ""); } } } #end private static function __sysName():String { #if (sys && !html5) #if cpp var sys_string = cpp.Lib.load("std", "sys_string", 0); return sys_string(); #else return Sys.systemName(); #end #else return null; #end } private static function __tryLoad(name:String, library:String, func:String, args:Int):Dynamic { #if sys try { #if cpp var result = cpp.Lib.load(name, func, args); #elseif (neko) var result = neko.Lib.load(name, func, args); #elseif nodejs var result = untyped __nodeNDLLModule.load_lib(name, func, args); #elseif java var result = __loadJava(name, func, args); #elseif cs var result = CSFunctionLoader.load(name, func, args); #else var result = null; #end if (result != null) { __loaderTrace("Got result " + name); __moduleNames.set(library, name); return result; } } catch (e:Dynamic) { __loaderTrace("Failed to load : " + name); } #end return null; } } #if cs @:dox(hide) private class CSFunctionLoader { public static function load(name:String, func:String, args:Int):Dynamic { var func:cs.ndll.NDLLFunction = cs.ndll.NDLLFunction.Load(name, func, args); if (func == null) { return null; } if (args == -1) { var haxeFunc:Dynamic = function(args:Array):Dynamic { return func.CallMult(args); } return Reflect.makeVarArgs(haxeFunc); } else if (args == 0) { return function():Dynamic { return func.Call0(); } } else if (args == 1) { return function(arg1:Dynamic):Dynamic { return func.Call1(arg1); } } else if (args == 2) { return function(arg1:Dynamic, arg2:Dynamic):Dynamic { return func.Call2(arg1, arg2); } } else if (args == 3) { return function(arg1:Dynamic, arg2:Dynamic, arg3:Dynamic):Dynamic { return func.Call3(arg1, arg2, arg3); } } else if (args == 4) { return function(arg1:Dynamic, arg2:Dynamic, arg3:Dynamic, arg4:Dynamic):Dynamic { return func.Call4(arg1, arg2, arg3, arg4); } } else if (args == 5) { return function(arg1:Dynamic, arg2:Dynamic, arg3:Dynamic, arg4:Dynamic, arg5:Dynamic):Dynamic { return func.Call5(arg1, arg2, arg3, arg4, arg5); } } return null; } } #end #end ================================================ FILE: src/lime/system/CFFIPointer.hx ================================================ package lime.system; #if (!lime_doc_gen || lime_cffi) import lime._internal.backend.native.NativeCFFI; @:access(lime._internal.backend.native.NativeCFFI) abstract CFFIPointer(Dynamic) from Dynamic to Dynamic { public inline function new(handle:Dynamic) { this = handle; } public function get():Float { if (this != null) { #if (lime_cffi && !macro) return NativeCFFI.lime_cffi_get_native_pointer(this); #end } return 0; } @:noCompletion @:op(A == B) private static inline function equals(a:CFFIPointer, b:Int):Bool { return a.get() == b; } @:noCompletion @:op(A == B) private static inline function equalsPointer(a:CFFIPointer, b:CFFIPointer):Bool { return a.get() == b.get(); } @:noCompletion @:op(A > B) private static inline function greaterThan(a:CFFIPointer, b:Int):Bool { return a.get() > b; } @:noCompletion @:op(A > B) private static inline function greaterThanPointer(a:CFFIPointer, b:CFFIPointer):Bool { return a.get() > b.get(); } @:noCompletion @:op(A >= B) private static inline function greaterThanOrEqual(a:CFFIPointer, b:Int):Bool { return a.get() >= b; } @:noCompletion @:op(A >= B) private static inline function greaterThanOrEqualPointer(a:CFFIPointer, b:CFFIPointer):Bool { return a.get() >= b.get(); } @:noCompletion @:op(A < B) private static inline function lessThan(a:CFFIPointer, b:Int):Bool { return a.get() < b; } @:noCompletion @:op(A < B) private static inline function lessThanPointer(a:CFFIPointer, b:CFFIPointer):Bool { return a.get() < b.get(); } @:noCompletion @:op(A <= B) private static inline function lessThanOrEqual(a:CFFIPointer, b:Int):Bool { return a.get() <= b; } @:noCompletion @:op(A <= B) private static inline function lessThanOrEqualPointer(a:CFFIPointer, b:CFFIPointer):Bool { return a.get() <= b.get(); } @:noCompletion @:op(A != B) private static inline function notEquals(a:CFFIPointer, b:Int):Bool { return a.get() != b; } @:noCompletion @:op(A != B) private static inline function notEqualsPointer(a:CFFIPointer, b:CFFIPointer):Bool { return a.get() != b.get(); } } #end ================================================ FILE: src/lime/system/Clipboard.hx ================================================ package lime.system; import lime._internal.backend.native.NativeCFFI; import lime.app.Application; import lime.app.Event; import lime.system.CFFI; #if flash import flash.desktop.Clipboard as FlashClipboard; #elseif (js && html5) import lime._internal.backend.html5.HTML5Window; #end /** Reads and writes text on the system clipboard. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.ui.Window) class Clipboard { /** Dispatched when the clipboard text changes. **/ public static var onUpdate = new EventVoid>(); /** The text currently stored in the clipboard. **/ public static var text(get, set):String; private static var _text:String; @:noCompletion private static var __updated = false; private static function __update():Void { var cacheText = _text; _text = null; #if (lime_cffi && !macro) _text = CFFI.stringValue(NativeCFFI.lime_clipboard_get_text()); #elseif flash if (FlashClipboard.generalClipboard.hasFormat(TEXT_FORMAT)) { _text = FlashClipboard.generalClipboard.getData(TEXT_FORMAT); } #elseif (js || html5) _text = cacheText; #end __updated = true; if (_text != cacheText) { onUpdate.dispatch(); } } // Get & Set Methods private static function get_text():String { // On some native platforms, __update() is called automatically when the // native clipboard changes. On others, __update() needs to be called // manually. #if (flash || js || html5 || ios || tvos || android) __update(); #elseif linux // Xorg won't call __update until we call set_text at least once. // Details: SDL_x11clipboard.c calls X11_XSetSelectionOwner, // registering this app to receive clipboard events. if (_text == null) { __update(); // Call set_text while changing as little as possible. (Rich text // formatting will unavoidably be lost.) set_text(_text); } #elseif (windows || mac) if (!__updated) { // Lime listens for clipboard updates automatically, but if the // clipboard has never been updated since before the app started, // we need to populate the initial contents manually __update(); } #end return _text; } private static function set_text(value:String):String { var cacheText = _text; _text = value; #if (lime_cffi && !macro) NativeCFFI.lime_clipboard_set_text(value); #elseif flash FlashClipboard.generalClipboard.setData(TEXT_FORMAT, value); #elseif (js && html5) var window = Application.current.window; if (window != null) { window.__backend.setClipboard(value); } #end if (_text != cacheText) { onUpdate.dispatch(); } return value; } } ================================================ FILE: src/lime/system/Display.hx ================================================ package lime.system; import lime.math.Rectangle; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Display { /** * The desktop area represented by this display, with the upper-leftmost display at 0,0 **/ public var bounds(default, null):Rectangle; /** * The current display mode **/ public var currentMode(default, null):DisplayMode; public var id(default, null):Int; /** * Pixel density of the display */ public var dpi(default, null):Float; /** * Orientation of the display */ public var orientation(default, null):Orientation; /** * The name of the device, such as "Samsung SyncMaster P2350", "iPhone 6", "Oculus Rift DK2", etc. **/ public var name(default, null):String; /** * All of the display modes supported by this device **/ public var supportedModes(default, null):Array; /** The area within the display's `bounds` where it is safe to render content without being obscured by notches, holes, or other display cutouts. **/ public var safeArea(default, null):Rectangle; @:noCompletion private function new() {} } ================================================ FILE: src/lime/system/DisplayMode.hx ================================================ package lime.system; import lime.graphics.PixelFormat; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class DisplayMode { /** * vertical resolution **/ public var height(default, null):Int; /** * pixel format **/ public var pixelFormat(default, null):PixelFormat; /** * refresh rate in Hz **/ public var refreshRate(default, null):Int; /** * horizontal resolution **/ public var width(default, null):Int; @:noCompletion private function new(width:Int, height:Int, refreshRate:Int, pixelFormat:PixelFormat) { this.width = width; this.height = height; this.refreshRate = refreshRate; this.pixelFormat = pixelFormat; } } ================================================ FILE: src/lime/system/Endian.hx ================================================ package lime.system; enum Endian { LITTLE_ENDIAN; BIG_ENDIAN; } ================================================ FILE: src/lime/system/FileWatcher.hx ================================================ package lime.system; #if (!lime_doc_gen || lime_cffi) import lime._internal.backend.native.NativeCFFI; import lime.app.Application; import lime.app.Event; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class FileWatcher { public var onAdd = new EventVoid>(); public var onDelete = new EventVoid>(); public var onModify = new EventVoid>(); public var onMove = new EventString->Void>(); @:noCompletion private var handle:CFFIPointer; @:noCompletion private var __hasUpdate:Bool; @:noCompletion private var __ids:Map; public function new() { #if (lime_cffi && !macro) handle = NativeCFFI.lime_file_watcher_create(this_onChange); __ids = new Map(); #end } public function addDirectory(path:String, recursive:Bool = true):Bool { #if (lime_cffi && !macro) if (!__hasUpdate && Application.current != null) { Application.current.onUpdate.add(this_onUpdate); __hasUpdate = true; } var id:Int = NativeCFFI.lime_file_watcher_add_directory(handle, path, recursive); if (id >= 0) { __ids[path] = id; return true; } else { // throw error? // FileNotFound = -1, // FileRepeated = -2, // FileOutOfScope = -3, // FileNotReadable = -4, // FileRemote = -5, /** Directory in remote file system ( create a generic FileWatcher instance to watch this directory ). */ } #end return false; } @:noCompletion private function combine(directory:String, file:String):String { var trailingSlash = (directory.substr(-1) == "/" || directory.substr(-1) == "\\"); var startingSlash = (file.substr(0, 1) == "/" || file.substr(0, 1) == "\\"); var path; if (trailingSlash && startingSlash) { path = directory + file.substr(1); } else if (!trailingSlash && !startingSlash) { path = directory + #if windows "\\" #else "/" #end + file; } else { path = directory + file; } return path; } public function removeDirectory(path:String):Bool { #if (lime_cffi && !macro) if (__ids.exists(path)) { NativeCFFI.lime_file_watcher_remove_directory(handle, __ids[path]); __ids.remove(path); if (!__ids.keys().hasNext()) { Application.current.onUpdate.remove(this_onUpdate); __hasUpdate = false; } return true; } #end return false; } @:noCompletion private function this_onChange(directory:String, file:String, action:Int, oldFile:String):Void { var path = combine(directory, file); switch (action) { case 1: onAdd.dispatch(path); case 2: onDelete.dispatch(path); case 3: onModify.dispatch(path); case 4: onMove.dispatch(combine(directory, oldFile), path); } } @:noCompletion private function this_onUpdate(_):Void { #if (lime_cffi && !macro) NativeCFFI.lime_file_watcher_update(handle); #end } } #end ================================================ FILE: src/lime/system/JNI.hx ================================================ package lime.system; #if (!lime_doc_gen || android) #if macro import haxe.macro.Context; import haxe.macro.Expr; import haxe.macro.Type; #else import lime._internal.backend.native.NativeCFFI; #end #if !lime_doc_gen #if target.threaded import sys.thread.Thread; #elseif cpp import cpp.vm.Thread; #elseif neko import neko.vm.Thread; #end #end using StringTools; /** The Java Native Interface (JNI) allows C++ code to call Java functions, and vice versa. On Android, Haxe code compiles to C++, but only Java code can access the Android system API, so it's often necessary to use both. For a working example, run `lime create extension MyExtension`, then look at MyExtension.hx and MyExtension.java. You can pass Haxe objects to Java, much like any other data. In Java, they'll have type `org.haxe.lime.HaxeObject`, meaning the method that receives them might have signature `(Lorg/haxe/lime/HaxeObject;)V`. Once sent, the Java class can store the object and call its functions. Note that most Java code runs on a different thread than Haxe, meaning that you can get thread-related errors in both directions. Java functions can use `Extension.callbackHandler.post()` to switch to the UI thread, while Haxe code can avoid the problem using `lime.system.JNI.JNISafety`. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class JNI { private static var alreadyCreated = new Map(); private static var initialized = false; private static function transformClassName(className:String):String { var parts:Array = className.split("."); if (parts.length <= 1) return className; var nestedClassName:String = ""; if (~/^[A-Z]/.match(parts[parts.length - 2])) nestedClassName = "$" + parts.pop(); return parts.join("/") + nestedClassName; } public static function callMember(method:Dynamic, jobject:Dynamic, a:Array):Dynamic { return Reflect.callMethod(null, method, [jobject].concat(a)); } public static function callStatic(method:Dynamic, a:Array):Dynamic { return Reflect.callMethod(null, method, a); } /** @param className A string in the format `"com/package/ClassName"` or `"com/package/ClassName$NestedClass"`. If dots are used instead, `JNI` will attempt to replace them with the correct symbols. @param memberName The member field's name. @param signature A Java VM type signature. @see Java VM type signatures: https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp16432 **/ public static function createMemberField(className:String, memberName:String, signature:String):JNIMemberField { init(); #if (android && lime_cffi && !macro) className = transformClassName(className); return new JNIMemberField(NativeCFFI.lime_jni_create_field(className, memberName, signature, false)); #else return new JNIMemberField(null); #end } /** @param className A string in the format `"com/package/ClassName"` or `"com/package/ClassName$NestedClass"`. If dots are used instead, `JNI` will attempt to replace them with the correct symbols. @param memberName The member method's name. @param signature A Java VM type signature. @param useArray Set this to create a function that takes a single `Array` argument, instead of multiple `Dynamic` arguments. @param quietFail Set this to suppress the "method not found" error. @see Java VM type signatures: https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp16432 **/ public static function createMemberMethod(className:String, memberName:String, signature:String, useArray:Bool = false, quietFail:Bool = false):Dynamic { init(); #if (android && lime_cffi && !macro) className = transformClassName(className); var handle = NativeCFFI.lime_jni_create_method(className, memberName, signature, false, quietFail); if (handle == null) { if (quietFail) { return null; } throw "Could not find member function \"" + memberName + "\""; } var method = new JNIMethod(handle); return method.getMemberMethod(useArray); #else return null; #end } /** @param className A string in the format `"com/package/ClassName"` or `"com/package/ClassName$NestedClass"`. If dots are used instead, `JNI` will attempt to replace them with the correct symbols. @param memberName The static field's name. @param signature A Java VM type signature. @see Java VM type signatures: https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp16432 **/ public static function createStaticField(className:String, memberName:String, signature:String):JNIStaticField { init(); #if (android && lime_cffi && !macro) className = transformClassName(className); return new JNIStaticField(NativeCFFI.lime_jni_create_field(className, memberName, signature, true)); #else return new JNIStaticField(null); #end } /** @param className A string in the format `"com/package/ClassName"` or `"com/package/ClassName$NestedClass"`. If dots are used instead, `JNI` will attempt to replace them with the correct symbols. @param memberName The static method's name. To get a constructor, use `` as the method name. @param signature A Java VM type signature. To get a constructor, use `V` as the function's return value. @param useArray Set this to create a function that takes a single `Array` argument, instead of multiple `Dynamic` arguments. @param quietFail Set this to suppress the "method not found" error. @see Java VM type signatures: https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp16432 **/ public static function createStaticMethod(className:String, memberName:String, signature:String, useArray:Bool = false, quietFail:Bool = false):Dynamic { init(); #if (android && lime_cffi && !macro) className = transformClassName(className); var handle = NativeCFFI.lime_jni_create_method(className, memberName, signature, true, quietFail); if (handle == null) { if (quietFail) { return null; } throw "Could not find static function \"" + memberName + "\""; } var method = new JNIMethod(handle); return method.getStaticMethod(useArray); #else return null; #end } public static function getEnv():Dynamic { init(); #if (android && lime_cffi && !macro) return NativeCFFI.lime_jni_get_env(); #else return null; #end } private static function init():Void { if (!initialized) { initialized = true; #if (android && !macro) var method = System.load("lime", "lime_jni_init_callback", 1); method(onCallback); #end } } private static function onCallback(object:Dynamic, method:String, args:Array):Dynamic { var field = Reflect.field(object, method); if (field != null) { if (args == null) args = []; return Reflect.callMethod(object, field, args); } trace("onCallback - unknown field " + method); return null; } public static function postUICallback(callback:Void->Void):Void { // TODO: Rename this? #if (android && lime_cffi && !macro) NativeCFFI.lime_jni_post_ui_callback(callback); #else callback(); #end } } #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class JNIMemberField { @:noCompletion private var field:Dynamic; public function new(field:Dynamic) { this.field = field; } public function get(jobject:Dynamic):Dynamic { #if (android && lime_cffi && !macro) return NativeCFFI.lime_jni_get_member(field, jobject); #else return null; #end } public function set(jobject:Dynamic, value:Dynamic):Dynamic { #if (android && lime_cffi && !macro) NativeCFFI.lime_jni_set_member(field, jobject, value); #end return value; } } #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class JNIStaticField { @:noCompletion private var field:Dynamic; public function new(field:Dynamic) { this.field = field; } public function get():Dynamic { #if (android && lime_cffi && !macro) return NativeCFFI.lime_jni_get_static(field); #else return null; #end } public function set(value:Dynamic):Dynamic { #if (android && lime_cffi && !macro) NativeCFFI.lime_jni_set_static(field, value); #end return value; } } #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class JNIMethod { @:noCompletion private var method:Dynamic; public function new(method:Dynamic) { this.method = method; } public function callMember(args:Array):Dynamic { #if (android && lime_cffi && !macro) var jobject = args.shift(); return NativeCFFI.lime_jni_call_member(method, jobject, args); #else return null; #end } public function callStatic(args:Array):Dynamic { #if (android && lime_cffi && !macro) return NativeCFFI.lime_jni_call_static(method, args); #else return null; #end } public function getMemberMethod(useArray:Bool):Dynamic { if (useArray) { return callMember; } else { return Reflect.makeVarArgs(callMember); } } public function getStaticMethod(useArray:Bool):Dynamic { if (useArray) { return callStatic; } else { return Reflect.makeVarArgs(callStatic); } } } /** Most times a Java class calls a Haxe function, it does so on the UI thread, which can lead to thread-related errors. These errors can be avoided by switching back to the main thread before executing any code. Usage: ```haxe class MyClass implements JNISafety { @:runOnMainThread public function callbackFunction(data:Dynamic):Void { // Code here is guaranteed to run on Haxe's main thread. It's safe // to call `callbackFunction` via JNI. } public function notACallbackFunction():Void { // Code here will run on whichever thread calls the function. It may // not be safe to call `notACallbackFunction` via JNI. } } ``` **/ // Haxe 3 can't parse "target.threaded" inside parentheses. #if !(doc_gen || macro) #if target.threaded @:autoBuild(lime.system.JNI.JNISafetyTools.build()) #elseif (cpp || neko) @:autoBuild(lime.system.JNI.JNISafetyTools.build()) #end #end interface JNISafety {} #if !doc_gen class JNISafetyTools { #if target.threaded private static var mainThread:Thread = Thread.current(); #elseif (cpp || neko) private static var mainThread:Thread = Thread.current(); #end /** @return Whether the calling function is being run on the main thread. **/ public static inline function onMainThread():Bool { #if target.threaded return Thread.current() == mainThread; #elseif (cpp || neko) return Thread.current() == mainThread; #else return true; #end } public static macro function build():Array { var fields:Array = Context.getBuildFields(); #if macro for (field in fields) { // Don't modify constructors. if (field.name == "new") { continue; } // Don't modify functions lacking `@:runOnMainThread`. if (field.meta == null || !Lambda.exists(field.meta, function(meta) return meta.name == ":runOnMainThread")) { continue; } switch (field.kind) { case FFun(f): // The function needs to call itself and can't be inline. field.access.remove(AInline); // Make sure there's no return value. switch (f.ret) { case macro:Void: // Good to go. case null: f.ret = macro:Void; default: Context.error("Expected return type Void, got " + new haxe.macro.Printer().printComplexType(f.ret) + ".", field.pos); } var args:Array = []; for (arg in f.args) { args.push(macro $i{arg.name}); // Account for an unlikely edge case. if (arg.name == field.name) Context.error('${field.name}() should not take an argument named ${field.name}.', field.pos); } // Check the thread before running the function. f.expr = macro if (!lime.system.JNI.JNISafetyTools.onMainThread()) haxe.MainLoop.runInMainThread($i{field.name}.bind($a{args})) else ${f.expr}; default: } } #end return fields; } } #end #end ================================================ FILE: src/lime/system/Locale.hx ================================================ package lime.system; #if flash import flash.system.Capabilities; #end import lime.system.CFFI; import lime.system.JNI; abstract Locale(String) from String to String { @:isVar public static var currentLocale(get, set):Locale; public static var systemLocale(get, never):Locale; private static var __systemLocale:Locale; public var language(get, never):String; public var region(get, never):String; public function new(value:String) { this = value; } @:noCompletion @:op(A == B) private static function equals(a:Locale, b:Locale):Bool { var language = a.language; var region = a.region; var language2 = b.language; var region2 = b.region; var languageMatch = (language == language2); var regionMatch = (region == region2); if (!languageMatch && language != null && language2 != null) { languageMatch = (language.toLowerCase() == language2.toLowerCase()); } if (!regionMatch && region != null && region2 != null) { regionMatch = (region.toLowerCase() == region2.toLowerCase()); } return (languageMatch && regionMatch); } #if hl @:hlNative("lime", "hl_locale_get_system_locale") private static function lime_locale_get_system_locale():hl.Bytes { return null; } #end private static function __init():Void { if (__systemLocale == null) { var locale = null; #if flash locale = Capabilities.language; #elseif (js && html5) locale = untyped navigator.language; #elseif (android) var getDefault:Void->Dynamic = JNI.createStaticMethod("java/util/Locale", "getDefault", "()Ljava/util/Locale;"); var toString:Dynamic->String = JNI.createMemberMethod("java/util/Locale", "toString", "()Ljava/lang/String;"); locale = toString(getDefault()); #elseif (lime_cffi && !macro) #if hl locale = CFFI.stringValue(lime_locale_get_system_locale()); #else locale = CFFI.load("lime", "lime_locale_get_system_locale", 0)(); #end #end if (locale != null) { __systemLocale = locale; } else { __systemLocale = "en-US"; } currentLocale = __systemLocale; } } // Get & Set Methods @:noCompletion private function get_language():String { if (this != null) { var index = this.indexOf("_"); if (index > -1) { var dashIndex = this.indexOf("-"); if (dashIndex > -1 && dashIndex < index) index = dashIndex; return this.substring(0, index); } index = this.indexOf("-"); if (index > -1) { return this.substring(0, index); } } return this; } @:noCompletion private function get_region():String { if (this != null) { var underscoreIndex = this.indexOf("_"); var dotIndex = this.indexOf("."); var dashIndex = this.indexOf("-"); if (underscoreIndex > -1) { if (dotIndex > -1) { return this.substring(underscoreIndex + 1, dotIndex); } else { return this.substring(underscoreIndex + 1); } } else if (dashIndex > -1) { if (dotIndex > -1) { return this.substring(dashIndex + 1, dotIndex); } else { return this.substring(dashIndex + 1); } } } return null; } // Get & Set Methods private static function get_currentLocale():Locale { __init(); return currentLocale; } private static function set_currentLocale(value:Locale):Locale { __init(); return currentLocale = value; } private static function get_systemLocale():Locale { __init(); return __systemLocale; } } ================================================ FILE: src/lime/system/Orientation.hx ================================================ package lime.system; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract Orientation(Int) { var UNKNOWN = 0; var LANDSCAPE = 1; var LANDSCAPE_FLIPPED = 2; var PORTRAIT = 3; var PORTRAIT_FLIPPED = 4; } ================================================ FILE: src/lime/system/Sensor.hx ================================================ package lime.system; import lime.app.Event; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Sensor { private static var sensorByID = new Map(); private static var sensors = new Array(); public var id:Int; public var onUpdate = new EventFloat->Float->Void>(); public var type:SensorType; @:noCompletion private function new(type:SensorType, id:Int) { this.type = type; this.id = id; } public static function getSensors(type:SensorType = null):Array { if (type == null) { return sensors.copy(); } else { var result = []; for (sensor in sensors) { if (sensor.type == type) { result.push(sensor); } } return result; } } private static function registerSensor(type:SensorType, id:Int):Sensor { var sensor = new Sensor(type, id); sensors.push(sensor); sensorByID.set(id, sensor); return sensor; } } ================================================ FILE: src/lime/system/SensorType.hx ================================================ package lime.system; enum SensorType { ACCELEROMETER; } ================================================ FILE: src/lime/system/System.hx ================================================ package lime.system; import haxe.Constraints; import lime._internal.backend.native.NativeCFFI; import lime.app.Application; import lime.graphics.RenderContextAttributes; import lime.math.Rectangle; import lime.ui.WindowAttributes; import lime.utils.ArrayBuffer; import lime.utils.UInt8Array; import lime.utils.UInt16Array; #if flash import flash.net.URLRequest; import flash.system.Capabilities; import flash.Lib; #end #if air import flash.desktop.NativeApplication; #end #if ((js && html5) || electron) import js.html.Element; import js.Browser; #end #if sys import sys.io.Process; #end /** Access operating system level settings and operations. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.system.Display) @:access(lime.system.DisplayMode) #if (cpp && windows && !lime_disable_gpu_hint) @:cppFileCode(' #if defined(HX_WINDOWS) && !defined(__MINGW32__) extern "C" { _declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001; _declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; } #endif ') #end class System { /** Determines if the screen saver is allowed to start or not. **/ public static var allowScreenTimeout(get, set):Bool; /** The path to the directory where the application is installed, along with its supporting files. In many cases, this directory is read-only, and attempts to write to files, create new files, or delete files in this directory are likely fail. **/ public static var applicationDirectory(get, never):String; /** The application's dedicated storage directory, which unique to each application and user. Useful for storing settings on a user-specific and application-specific basis. This directory may or may not be removed when the application is uninstalled, and it depends on the platform and installer technology that is used. **/ public static var applicationStorageDirectory(get, never):String; /** The path to the directory containing the user's desktop. **/ public static var desktopDirectory(get, never):String; public static var deviceModel(get, never):String; public static var deviceVendor(get, never):String; public static var disableCFFI:Bool; /** The path to the directory containing the user's documents. **/ public static var documentsDirectory(get, never):String; /** The platform's default endianness for bytes. **/ public static var endianness(get, never):Endian; /** The path to the directory where fonts are installed. **/ public static var fontsDirectory(get, never):String; /** The number of available video displays. **/ public static var numDisplays(get, never):Int; public static var platformLabel(get, never):String; public static var platformName(get, never):String; public static var platformVersion(get, never):String; /** The path to the user's home directory. **/ public static var userDirectory(get, never):String; @:noCompletion private static var __applicationDirectory:String; @:noCompletion private static var __applicationEntryPoint:Map; @:noCompletion private static var __applicationStorageDirectory:String; @:noCompletion private static var __desktopDirectory:String; @:noCompletion private static var __deviceModel:String; @:noCompletion private static var __deviceVendor:String; @:noCompletion private static var __directories = new Map(); @:noCompletion private static var __documentsDirectory:String; @:noCompletion private static var __endianness:Endian; @:noCompletion private static var __fontsDirectory:String; @:noCompletion private static var __platformLabel:String; @:noCompletion private static var __platformName:String; @:noCompletion private static var __platformVersion:String; @:noCompletion private static var __userDirectory:String; #if (js && html5) @:keep @:expose("lime.embed") public static function embed(projectName:String, element:Dynamic, width:Null = null, height:Null = null, config:Dynamic = null):Void { if (__applicationEntryPoint == null) return; if (__applicationEntryPoint.exists(projectName)) { var htmlElement:Element = null; if ((element is String)) { htmlElement = cast Browser.document.getElementById(element); } else if (element == null) { htmlElement = cast Browser.document.createElement("div"); } else { htmlElement = cast element; } if (htmlElement == null) { Browser.window.console.log("[lime.embed] ERROR: Cannot find target element: " + element); return; } if (width == null) { width = 0; } if (height == null) { height = 0; } if (config == null) config = {}; if (Reflect.hasField(config, "background") && (config.background is String)) { var background = StringTools.replace(Std.string(config.background), "#", ""); if (background.indexOf("0x") > -1) { config.background = Std.parseInt(background); } else { config.background = Std.parseInt("0x" + background); } } config.element = htmlElement; config.width = width; config.height = height; __applicationEntryPoint[projectName](config); } } #end #if (!lime_doc_gen || sys) /** Attempts to exit the application. Dispatches `onExit`, and will not exit if the event is canceled. When exiting using this method, Lime will gracefully shut down a number of subsystems, including (but not limited to) audio, graphics, timers, and game controllers. To properly exit a Lime application, it's best to call Lime's `System.exit()` instead of calling Haxe's built-in `Sys.exit()`. When targeting native platforms especially, Lime's is built on C++ libraries that expose functions to clean up resources properly on exit. Haxe's `Sys.exit()` exits immediately without giving Lime a chance to clean things up. With that in mind, the proper and correct way to exit a Lime app is by calling `lime.system.System.exit()`, and to avoid using `Sys.exit()`. **/ public static function exit(code:Int):Void { var currentApp = Application.current; #if ((sys || (js && html5) || air) && !macro) if (currentApp != null) { currentApp.onExit.dispatch(code); if (currentApp.onExit.canceled) { return; } } #end #if sys Sys.exit(code); #elseif (js && html5) if (currentApp != null && currentApp.window != null) { currentApp.window.close(); } #elseif air NativeApplication.nativeApplication.exit(code); #end } #end /** Returns information about the video display with the specified ID. **/ public static function getDisplay(id:Int):Display { #if (lime_cffi && !macro) var displayInfo:Dynamic = NativeCFFI.lime_system_get_display(id); if (displayInfo != null) { var display = new Display(); display.id = id; display.name = CFFI.stringValue(displayInfo.name); display.bounds = new Rectangle(displayInfo.bounds.x, displayInfo.bounds.y, displayInfo.bounds.width, displayInfo.bounds.height); display.orientation = displayInfo.orientation; #if android var getDisplaySafeArea = JNI.createStaticMethod("org/haxe/lime/GameActivity", "getDisplaySafeAreaInsets", "()[I"); var result = getDisplaySafeArea(); display.safeArea = new Rectangle( display.bounds.x + result[0], display.bounds.y + result[1], display.bounds.width - result[0] - result[2], display.bounds.height - result[1] - result[3]); #else display.safeArea = new Rectangle( displayInfo.safeArea.x, displayInfo.safeArea.y, displayInfo.safeArea.width, displayInfo.safeArea.height); #end #if ios var tablet = NativeCFFI.lime_system_get_ios_tablet(); var scale = Application.current.window.scale; if (!tablet && scale > 2.46) { display.dpi = 401; // workaround for iPhone Plus } else { display.dpi = (tablet ? 132 : 163) * scale; } #elseif android var getDisplayDPI = JNI.createStaticMethod("org/haxe/lime/GameActivity", "getDisplayXDPI", "()D"); display.dpi = Math.round(getDisplayDPI()); #else display.dpi = displayInfo.dpi; #end display.supportedModes = []; var displayMode; #if hl var supportedModes:hl.NativeArray = displayInfo.supportedModes; #else var supportedModes:Array = displayInfo.supportedModes; #end for (mode in supportedModes) { displayMode = new DisplayMode(mode.width, mode.height, mode.refreshRate, mode.pixelFormat); display.supportedModes.push(displayMode); } var mode = displayInfo.currentMode; var currentMode = new DisplayMode(mode.width, mode.height, mode.refreshRate, mode.pixelFormat); for (mode in display.supportedModes) { if (currentMode.pixelFormat == mode.pixelFormat && currentMode.width == mode.width && currentMode.height == mode.height && currentMode.refreshRate == mode.refreshRate) { currentMode = mode; break; } } display.currentMode = currentMode; return display; } #elseif (flash || html5) if (id == 0) { var display = new Display(); display.id = 0; display.name = "Generic Display"; #if flash display.dpi = Capabilities.screenDPI; display.currentMode = new DisplayMode(Std.int(Capabilities.screenResolutionX), Std.int(Capabilities.screenResolutionY), 60, ARGB32); #if air switch (flash.Lib.current.stage.orientation) { case DEFAULT: display.orientation = PORTRAIT; case UPSIDE_DOWN: display.orientation = PORTRAIT_FLIPPED; case ROTATED_LEFT: display.orientation = LANDSCAPE_FLIPPED; case ROTATED_RIGHT: display.orientation = LANDSCAPE; default: display.orientation = UNKNOWN; } #else display.orientation = UNKNOWN; #end #elseif (js && html5) // var div = Browser.document.createElement ("div"); // div.style.width = "1in"; // Browser.document.body.appendChild (div); // var ppi = Browser.document.defaultView.getComputedStyle (div, null).getPropertyValue ("width"); // Browser.document.body.removeChild (div); // display.dpi = Std.parseFloat (ppi); display.dpi = 96 * Browser.window.devicePixelRatio; display.currentMode = new DisplayMode(Browser.window.screen.width, Browser.window.screen.height, 60, ARGB32); if (Browser.window.screen.orientation != null) { switch (Browser.window.screen.orientation.type) { case PORTRAIT_PRIMARY: display.orientation = PORTRAIT; case PORTRAIT_SECONDARY: display.orientation = PORTRAIT_FLIPPED; case LANDSCAPE_PRIMARY: display.orientation = LANDSCAPE; case LANDSCAPE_SECONDARY: display.orientation = LANDSCAPE_FLIPPED; default: display.orientation = UNKNOWN; } } else { display.orientation = UNKNOWN; } #end display.supportedModes = [display.currentMode]; display.bounds = new Rectangle(0, 0, display.currentMode.width, display.currentMode.height); display.safeArea = new Rectangle(0, 0, display.currentMode.width, display.currentMode.height); return display; } #end return null; } /** The number of milliseconds since the application was initialized. **/ public static function getTimer():Int { #if flash return flash.Lib.getTimer(); #elseif ((js && !nodejs) || electron) return Std.int(Browser.window.performance.now()); #elseif (lime_cffi && !macro) return cast NativeCFFI.lime_system_get_timer(); #elseif cpp return Std.int(untyped __global__.__time_stamp() * 1000); #elseif sys return Std.int(Sys.time() * 1000); #else return 0; #end } #if (!lime_doc_gen || lime_cffi) public static inline function load(library:String, method:String, args:Int = 0, lazy:Bool = false):Dynamic { #if !macro return CFFI.load(library, method, args, lazy); #else return null; #end } #end /** Opens a file with the system default application. In a web browser, opens a URL with target `_blank`. **/ public static function openFile(path:String):Void { if (path != null) { #if (sys && windows) Sys.command("start", ["", path]); #elseif mac Sys.command("/usr/bin/open", [path]); #elseif linux Sys.command("/usr/bin/xdg-open", [path]); #elseif (js && html5) Browser.window.open(path, "_blank"); #elseif flash Lib.getURL(new URLRequest(path), "_blank"); #elseif android var openFile = JNI.createStaticMethod("org/haxe/lime/GameActivity", "openFile", "(Ljava/lang/String;)V"); openFile(path); #elseif (lime_cffi && !macro) NativeCFFI.lime_system_open_file(path); #end } } /** Opens a URL with the specified target web browser window. **/ public static function openURL(url:String, target:String = "_blank"):Void { if (url != null) { #if desktop openFile(url); #elseif (js && html5) Browser.window.open(url, target); #elseif flash Lib.getURL(new URLRequest(url), target); #elseif android var openURL = JNI.createStaticMethod("org/haxe/lime/GameActivity", "openURL", "(Ljava/lang/String;Ljava/lang/String;)V"); openURL(url, target); #elseif (lime_cffi && !macro) NativeCFFI.lime_system_open_url(url, target); #end } } @:noCompletion private static function __copyMissingFields(target:Dynamic, source:Dynamic):Void { if (source == null || target == null) return; for (field in Reflect.fields(source)) { if (!Reflect.hasField(target, field)) { Reflect.setField(target, field, Reflect.field(source, field)); } } } @:noCompletion private static function __getDirectory(type:SystemDirectory):String { #if (lime_cffi && !macro) if (__directories.exists(type)) { return __directories.get(type); } else { var path:String; if (type == APPLICATION_STORAGE) { var company = "MyCompany"; var file = "MyApplication"; if (Application.current != null) { if (Application.current.meta.exists("company")) { company = Application.current.meta.get("company"); } if (Application.current.meta.exists("file")) { file = Application.current.meta.get("file"); } } path = CFFI.stringValue(NativeCFFI.lime_system_get_directory(type, company, file)); } else { path = CFFI.stringValue(NativeCFFI.lime_system_get_directory(type, null, null)); } #if windows var seperator = "\\"; #else var seperator = "/"; #end if (path != null && path.length > 0 && !StringTools.endsWith(path, seperator)) { path += seperator; } __directories.set(type, path); return path; } #elseif flash if (type != FONTS && Capabilities.playerType == "Desktop") { var propertyName = switch (type) { case APPLICATION: "applicationDirectory"; case APPLICATION_STORAGE: "applicationStorageDirectory"; case DESKTOP: "desktopDirectory"; case DOCUMENTS: "documentsDirectory"; default: "userDirectory"; } return Reflect.getProperty(Type.resolveClass("flash.filesystem.File"), propertyName).nativePath; } #end return null; } #if sys private static function __parseArguments(attributes:WindowAttributes):Void { // TODO: Handle default arguments, like --window-fps=60 var arguments = Sys.args(); var stripQuotes = ~/^['"](.*)['"]$/; var equals, argValue, parameters = null; var windowParamPrefix = "--window-"; if (arguments != null) { for (argument in arguments) { equals = argument.indexOf("="); if (equals > 0) { argValue = argument.substr(equals + 1); if (stripQuotes.match(argValue)) { argValue = stripQuotes.matched(1); } if (parameters == null) parameters = new Map(); parameters.set(argument.substr(0, equals), argValue); } } } if (parameters != null) { if (attributes.parameters == null) attributes.parameters = {}; if (attributes.context == null) attributes.context = {}; for (parameter in parameters.keys()) { argValue = parameters.get(parameter); if (#if lime_disable_window_override false && #end StringTools.startsWith(parameter, windowParamPrefix)) { switch (parameter.substr(windowParamPrefix.length)) { case "allow-high-dpi": attributes.allowHighDPI = __parseBool(argValue); case "always-on-top": attributes.alwaysOnTop = __parseBool(argValue); case "antialiasing": attributes.context.antialiasing = Std.parseInt(argValue); case "background": attributes.context.background = (argValue == "" || argValue == "null") ? null : Std.parseInt(argValue); case "borderless": attributes.borderless = __parseBool(argValue); case "colorDepth": attributes.context.colorDepth = Std.parseInt(argValue); case "depth", "depth-buffer": attributes.context.depth = __parseBool(argValue); // case "display": windowConfig.display = Std.parseInt (argValue); case "fullscreen": attributes.fullscreen = __parseBool(argValue); case "hardware": attributes.context.hardware = __parseBool(argValue); case "height": attributes.height = Std.parseInt(argValue); case "hidden": attributes.hidden = __parseBool(argValue); case "maximized": attributes.maximized = __parseBool(argValue); case "minimized": attributes.minimized = __parseBool(argValue); case "render-type", "renderer": attributes.context.type = argValue; case "render-version", "renderer-version": attributes.context.version = argValue; case "resizable": attributes.resizable = __parseBool(argValue); case "stencil", "stencil-buffer": attributes.context.stencil = __parseBool(argValue); // case "title": windowConfig.title = argValue; case "vsync": attributes.context.vsync = __parseBool(argValue); case "width": attributes.width = Std.parseInt(argValue); case "x": attributes.x = Std.parseInt(argValue); case "y": attributes.y = Std.parseInt(argValue); default: } } else if (!Reflect.hasField(attributes.parameters, parameter)) { Reflect.setField(attributes.parameters, parameter, argValue); } } } } #end @:noCompletion private static inline function __parseBool(value:String):Bool { return (value == "true"); } @:noCompletion private static function __registerEntryPoint(projectName:String, entryPoint:Function):Void { if (__applicationEntryPoint == null) { __applicationEntryPoint = new Map(); } __applicationEntryPoint[projectName] = entryPoint; } @:noCompletion private static function __runProcess(command:String, args:Array = null):String { #if sys try { if (args == null) args = []; var process = new Process(command, args); var value = StringTools.trim(process.stdout.readLine().toString()); process.close(); return value; } catch (e:Dynamic) {} #end return null; } // Get & Set Methods private static function get_allowScreenTimeout():Bool { #if (lime_cffi && !macro) return NativeCFFI.lime_system_get_allow_screen_timeout(); #else return true; #end } private static function set_allowScreenTimeout(value:Bool):Bool { #if (lime_cffi && !macro) return NativeCFFI.lime_system_set_allow_screen_timeout(value); #else return true; #end } private static function get_applicationDirectory():String { if (__applicationDirectory == null) { __applicationDirectory = __getDirectory(APPLICATION); } return __applicationDirectory; } private static function get_applicationStorageDirectory():String { if (__applicationStorageDirectory == null) { __applicationStorageDirectory = __getDirectory(APPLICATION_STORAGE); } return __applicationStorageDirectory; } private static function get_deviceModel():String { if (__deviceModel == null) { #if (lime_cffi && !macro && (windows || ios || tvos)) __deviceModel = CFFI.stringValue(NativeCFFI.lime_system_get_device_model()); #elseif android var manufacturer:String = JNI.createStaticField("android/os/Build", "MANUFACTURER", "Ljava/lang/String;").get(); var model:String = JNI.createStaticField("android/os/Build", "MODEL", "Ljava/lang/String;").get(); if (manufacturer != null && model != null) { if (StringTools.startsWith(model.toLowerCase(), manufacturer.toLowerCase())) { model = StringTools.trim(model.substr(manufacturer.length)); while (StringTools.startsWith(model, "-")) { model = StringTools.trim(model.substr(1)); } } __deviceModel = model; } #elseif mac __deviceModel = __runProcess("sysctl", ["-n", "hw.model"]); #elseif linux __deviceModel = __runProcess("cat", ["/sys/devices/virtual/dmi/id/sys_vendor"]); #end } return __deviceModel; } private static function get_deviceVendor():String { if (__deviceVendor == null) { #if (lime_cffi && !macro && windows && !html5) __deviceVendor = CFFI.stringValue(NativeCFFI.lime_system_get_device_vendor()); #elseif android var vendor:String = JNI.createStaticField("android/os/Build", "MANUFACTURER", "Ljava/lang/String;").get(); if (vendor != null) { __deviceVendor = vendor.charAt(0).toUpperCase() + vendor.substr(1); } #elseif (ios || mac || tvos) __deviceVendor = "Apple"; #elseif linux __deviceVendor = __runProcess("cat", ["/sys/devices/virtual/dmi/id/product_name"]); #end } return __deviceVendor; } private static function get_desktopDirectory():String { if (__desktopDirectory == null) { __desktopDirectory = __getDirectory(DESKTOP); } return __desktopDirectory; } private static function get_documentsDirectory():String { if (__documentsDirectory == null) { __documentsDirectory = __getDirectory(DOCUMENTS); } return __documentsDirectory; } private static function get_endianness():Endian { if (__endianness == null) { #if (ps3 || wiiu || flash) __endianness = BIG_ENDIAN; #else var arrayBuffer = new ArrayBuffer(2); var uint8Array = new UInt8Array(arrayBuffer); var uint16array = new UInt16Array(arrayBuffer); uint8Array[0] = 0xAA; uint8Array[1] = 0xBB; if (uint16array[0] == 0xAABB) __endianness = BIG_ENDIAN; else __endianness = LITTLE_ENDIAN; #end } return __endianness; } private static function get_fontsDirectory():String { if (__fontsDirectory == null) { __fontsDirectory = __getDirectory(FONTS); } return __fontsDirectory; } private static function get_numDisplays():Int { #if (lime_cffi && !macro) return NativeCFFI.lime_system_get_num_displays(); #else return 1; #end } private static function get_platformLabel():String { if (__platformLabel == null) { #if (lime_cffi && !macro && windows && !html5) var label:String = CFFI.stringValue(NativeCFFI.lime_system_get_platform_label()); if (label != null) __platformLabel = StringTools.trim(label); #elseif linux __platformLabel = __runProcess("lsb_release", ["-ds"]); #else var name = System.platformName; var version = System.platformVersion; if (name != null && version != null) __platformLabel = name + " " + version; else if (name != null) __platformLabel = name; #end } return __platformLabel; } private static function get_platformName():String { if (__platformName == null) { #if windows __platformName = "Windows"; #elseif mac __platformName = "macOS"; #elseif linux __platformName = __runProcess("lsb_release", ["-is"]); #elseif ios __platformName = "iOS"; #elseif android __platformName = "Android"; #elseif air __platformName = "AIR"; #elseif flash __platformName = "Flash Player"; #elseif tvos __platformName = "tvOS"; #elseif tizen __platformName = "Tizen"; #elseif blackberry __platformName = "BlackBerry"; #elseif firefox __platformName = "Firefox"; #elseif webos __platformName = "webOS"; #elseif nodejs __platformName = "Node.js"; #elseif js __platformName = "HTML5"; #end } return __platformName; } private static function get_platformVersion():String { if (__platformVersion == null) { #if (lime_cffi && !macro && windows && !html5) __platformVersion = CFFI.stringValue(NativeCFFI.lime_system_get_platform_version()); #elseif android var release = JNI.createStaticField("android/os/Build$VERSION", "RELEASE", "Ljava/lang/String;").get(); var api = JNI.createStaticField("android/os/Build$VERSION", "SDK_INT", "I").get(); if (release != null && api != null) __platformVersion = release + " (API " + api + ")"; #elseif (lime_cffi && !macro && (ios || tvos)) __platformVersion = NativeCFFI.lime_system_get_platform_version(); #elseif mac __platformVersion = __runProcess("sw_vers", ["-productVersion"]); #elseif linux __platformVersion = __runProcess("lsb_release", ["-rs"]); #elseif flash __platformVersion = Capabilities.version; #end } return __platformVersion; } private static function get_userDirectory():String { if (__userDirectory == null) { __userDirectory = __getDirectory(USER); } return __userDirectory; } } #if (haxe_ver >= 4.0) private enum #else @:enum private #end abstract SystemDirectory(Int) from Int to Int from UInt to UInt { var APPLICATION = 0; var APPLICATION_STORAGE = 1; var DESKTOP = 2; var DOCUMENTS = 3; var FONTS = 4; var USER = 5; } ================================================ FILE: src/lime/system/ThreadPool.hx ================================================ package lime.system; import lime.app.Application; import lime.app.Event; import lime.system.WorkOutput; import lime.utils.Log; #if target.threaded import sys.thread.Deque; import sys.thread.Thread; #elseif cpp import cpp.vm.Deque; import cpp.vm.Thread; #elseif neko import neko.vm.Deque; import neko.vm.Thread; #elseif html5 import lime._internal.backend.html5.HTML5Thread as Thread; import lime._internal.backend.html5.HTML5Thread.Transferable; #if lime_threads_deque #error "lime_threads_deque is not yet supported in HTML5" #end #end #if (haxe_ver >= 4.1) import haxe.Exception; #end /** A thread pool executes one or more functions asynchronously. In multi-threaded mode, jobs run on background threads. In HTML5, this means using web workers, which impose additional restrictions (see below). In single-threaded mode, jobs run between frames on the main thread. To avoid blocking, these jobs should only do a small amount of work at a time. In multi-threaded mode, the pool spins up new threads as jobs arrive (up to `maxThreads`). If too many jobs arrive at once, it places them in a queue to run when threads open up. If you run jobs frequently but not constantly, you can also set `minThreads` to keep a certain number of threads alive, avoiding the overhead of repeatedly spinning them up. Sample usage: var threadPool:ThreadPool = new ThreadPool(); threadPool.onComplete.add(onFileProcessed); threadPool.maxThreads = 3; for(url in urls) { threadPool.run(processFile, url); } Guidelines to make your code work on all targets and configurations: - For thread safety and web worker compatibility, your work function should only return data through the `WorkOutput` object it receives. - For web worker compatibility, you should only send data to your work function via the `State` object. But since this can be any object, you can put an arbitrary amount of data there. - For web worker compatibility, your work function must be static, and you can't `bind()` any extra arguments. - For single-threaded performance, your function should only do a small amount of work at a time. Store progress in the `State` object so you can pick up where you left off. You don't have to worry about timing: just aim to take a small fraction of the frame's time, and `ThreadPool` will keep running the function until enough time passes. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class ThreadPool extends WorkOutput { #if (haxe4 && lime_threads && !html5) /** A reference to the app's main thread, for use in `isMainThread()`. **/ private static var __mainThread:Thread = Thread.current(); #end /** A rough estimate of how much of the app's time should be spent on single-threaded jobs, across all active `ThreadPool`s. For instance, the default value of 1/2 means `ThreadPool`s will attempt to use about half the app's available time every frame. The accuracy of this estimate depends on how often your work functions return. If you find that a `ThreadPool` is taking longer than scheduled, try making the work function return more often. **/ public static var workLoad:Float = 1 / 2; /** __Access this only from the main thread.__ The sum of `workPriority` values from all pools with an ongoing single-threaded job. **/ private static var __totalWorkPriority:Float = 0; /** Returns whether the caller called this function from the main thread. **/ public static inline function isMainThread():Bool { #if (html5 && lime_threads) return !Thread.current().isWorker(); #elseif (haxe4 && lime_threads) return Thread.current() == __mainThread; #else return true; #end } /** The number of jobs actively being executed. **/ public var activeJobs(get, never):Int; /** The number of jobs currently running on a background thread. **/ public var activeThreads(default, null):Int = 0; /** The number of background threads in this pool, including both active and idle threads. Does not include threads that are shutting down. **/ public var currentThreads(get, never):Int; /** The number of background threads in this pool that are currently idle, neither working on a job nor shutting down. **/ public var idleThreads(get, never):Int; /** `idleThreads + __queuedExitEvents` **/ private var __idleThreads:Int = 0; /** __Set this only from the main thread.__ The maximum number of background threads this pool can have at once. If this value decreases, active jobs will still be allowed to finish. **/ public var maxThreads:Int; /** __Set this only from the main thread.__ The number of background threads that will be kept alive at all times, even if there's no work to do. Setting this won't immediately spin up new threads; you must still call `run()` to get them started. **/ public var minThreads:Int; /** Dispatched on the main thread when `doWork` calls `sendComplete()`. Dispatched at most once per job. **/ public var onComplete(default, null) = new EventVoid>(); /** Dispatched on the main thread when `doWork` calls `sendError()`. Dispatched at most once per job. **/ public var onError(default, null) = new EventVoid>(); /** Dispatched on the main thread when `doWork` calls `sendProgress()`. May be dispatched any number of times per job. **/ public var onProgress(default, null) = new EventVoid>(); /** Dispatched on the main thread when a new job begins. Dispatched exactly once per job. **/ public var onRun(default, null) = new EventVoid>(); #if (haxe_ver >= 4.1) /** Dispatched on the main thread when `doWork` throws an error. Dispatched at most once per job. If no listeners have been added, instead the error will be rethrown. **/ public var onUncaughtError(default, null) = new EventVoid>(); #end /** How important this pool's single-threaded jobs are, relative to other pools. Pools will be allocated a share of the time per frame (see `workLoad`) based on their importance. For instance, if all pools use the default priority of 1, they will all run for an approximately equal amount of time each frame. If one has a value of 2, it will run approximately twice as long as the others. **/ public var workPriority(default, set):Float = 1; @:deprecated("Instead pass the callback to ThreadPool.run().") @:noCompletion @:dox(hide) public var doWork(get, never):PseudoEvent; private var __doWork:WorkFunctionWorkOutput->Void>; #if lime_threads /** Jobs running or queued to run on a background thread. **/ private var __multiThreadedJobs:JobArray = new JobArray(); #if lime_threads_deque private var __multiThreadedQueue:JobQueue = new JobQueue(); private var __queuedWorkEvents:Int = 0; #end private var __queuedExitEvents:Int = 0; private var __threads:Array = []; #end /** Whether a job is running on the main thread, or will run during the next update. As long as this is true, this pool's `workPriority` will be included in `__totalWorkPriority`. **/ private var __singleThreadedJobRunning(default, set):Bool = false; /** Jobs running or queued to run on the main thread. **/ private var __singleThreadedJobs:JobArray = new JobArray(); /** __Call this only from the main thread.__ @param minThreads The number of threads that will be kept alive at all times, even if there's no work to do. The threads won't spin up immediately; only after enough calls to `run()`. @param maxThreads The maximum number of threads that will run at once. @param mode The mode jobs will run in by default. Defaults to `SINGLE_THREADED` in HTML5 for backwards compatibility. **/ public function new(minThreads:Int = 0, maxThreads:Int = 1, mode:ThreadMode = null) { if (!isMainThread()) { throw "Call new ThreadPool() only from the main thread."; } super(mode); this.minThreads = minThreads; this.maxThreads = maxThreads; } /** Cancels all active and queued jobs. Note: It isn't possible to terminate a job from the outside, so canceled jobs may continue to run for some time. However, any events they send will be ignored. @param error If not null, this error will be dispatched for each active or queued job. **/ public function cancel(error:Dynamic = null):Void { if (!isMainThread()) { throw "Call cancel() only from the main thread."; } #if lime_threads // Dispatch error events. if (error != null) { for (job in __multiThreadedJobs) { if (job.started) { job.duration = timestamp() - job.startTime; } activeJob = job; onError.dispatch(error); activeJob = null; } } __multiThreadedJobs.clear(); #if lime_threads_deque // Clear the queue, then replace the `EXIT` events. var queuedEvent:ThreadEvent = null; while ((queuedEvent = __multiThreadedQueue.pop(false)) != null) { if (queuedEvent.event == EXIT) { __queuedExitEvents--; } } __queuedWorkEvents = 0; while (currentThreads > minThreads) { __multiThreadedQueue.add({event: EXIT}); __queuedExitEvents++; } #end // Make all threads go idle. In `lime_threads_deque` mode, this will // make them check the queue. Otherwise, `__onThreadIdle()` will decide // which should be exited. for (threadID in 0...__threads.length) { var threadData:ThreadData = __threads[threadID]; if (threadData != null && threadData.jobID != null) { threadData.thread.sendMessage({event: IDLE}); } } #end // Clear single-threaded jobs. if (error != null) { for (job in __singleThreadedJobs) { activeJob = job; onError.dispatch(error); } } __singleThreadedJobs.clear(); __singleThreadedJobRunning = false; __jobComplete.value = false; activeJob = null; } /** Cancels one active or queued job. Does not dispatch an error event. Note: It isn't possible to terminate a job from the outside, so the job may continue to run for some time. However, any events it sends will be ignored. @return Whether a job was canceled. **/ public function cancelJob(jobID:Int):Bool { if (__singleThreadedJobs.removeJob(jobID) != null) { __singleThreadedJobRunning = __singleThreadedJobs.length > 0; return true; } #if lime_threads var job:JobData = __multiThreadedJobs.removeJob(jobID); if (job != null) { for (threadData in __threads) { if (threadData != null && threadData.jobID == jobID) { threadData.thread.sendMessage({event: IDLE}); break; } } return true; } #end return false; } /** Alias for `ThreadPool.run()`. **/ @:noCompletion public inline function queue(doWork:WorkFunctionWorkOutput->Void> = null, state:State = null):Int { return run(doWork, state); } /** Runs the given function asynchronously, or queues it for later if no more threads are available. @param doWork The function to run. For best results, see the guidelines in the `ThreadPool` class overview. In brief: `doWork` should be static, only access its arguments, and return often. @param state An object to pass to `doWork`. Consider passing a mutable object so that `doWork` can save its progress. @param mode Which mode to run the job in. If omitted, the pool's default mode will be used. @return The job's unique ID. **/ public function run(doWork:WorkFunctionWorkOutput->Void> = null, state:State = null, ?mode:ThreadMode = null):Int { if (!isMainThread()) { throw "Call run() only from the main thread."; } if (mode == null) { mode = this.mode; } if (doWork == null) { if (__doWork == null #if html5 || mode == MULTI_THREADED #end) { throw "run() requires doWork argument."; } else { doWork = __doWork; } } if (state == null) { state = {}; } var job:JobData = new JobData(doWork, state); #if lime_threads if (mode == MULTI_THREADED) { __multiThreadedJobs.push(job); __runMultiThreadedJob(job); } else #end { __singleThreadedJobs.push(job); __singleThreadedJobRunning = true; } if (Application.current != null && !Application.current.onUpdate.has(__update)) { Application.current.onUpdate.add(__update); } return job.id; } /** __Call this only from the main thread.__ Dispatches the given event immediately. **/ private function __dispatchJobOutput(event:ThreadEvent):Void { var oldActiveJob:Null = activeJob; activeJob = null; if (__singleThreadedJobs.length > 0 && event.jobID == __singleThreadedJobs.first().id) { activeJob = __singleThreadedJobs.first(); } #if lime_threads else if ((activeJob = __multiThreadedJobs.getJob(event.jobID)) != null) { if (activeJob.started) { activeJob.duration = timestamp() - activeJob.startTime; } if (event.event == COMPLETE || event.event == ERROR || event.event == UNCAUGHT_ERROR) { __multiThreadedJobs.removeJob(activeJob.id); } } #end else if (event.jobID != null) { #if (lime_threads && lime_threads_deque) // `cancelJob()` can't remove the job from the queue, so instead it // marks it to be canceled later. (And "later" is now.) if (event.event == WORK && event.threadID != null) { __threads[event.threadID].thread.sendMessage({event: IDLE}); __queuedWorkEvents--; } #end activeJob = oldActiveJob; return; } switch (event.event) { case PROGRESS: onProgress.dispatch(event.message); case COMPLETE: onComplete.dispatch(event.message); case ERROR: onError.dispatch(event.message); case UNCAUGHT_ERROR: var message:String; #if (haxe_ver >= 4.1) if (Std.isOfType(event.message, Exception)) { if (onUncaughtError.__listeners.length > 0) { onUncaughtError.dispatch(event.message); message = null; } else { message = (event.message:Exception).details(); } } else #end { message = Std.string(event.message); } if (message != null) { activeJob = null; Log.error(message); } case WORK: activeJob.startTime = timestamp(); onRun.dispatch(activeJob.state); #if lime_threads var threadData = __threads[event.threadID]; if (threadData.jobID == null) { __idleThreads--; activeThreads++; } threadData.jobID = event.jobID; #if lime_threads_deque __queuedWorkEvents--; #end #end #if lime_threads case IDLE: __onThreadIdle(event.threadID); case EXIT: var threadData:ThreadData = __threads[event.threadID]; if (threadData.jobID != null) activeThreads--; else __idleThreads--; __threads[event.threadID] = null; __queuedExitEvents--; #end default: } activeJob = oldActiveJob; } public override function sendComplete(message:Dynamic = null, transferList:Array = null) { if (__jobComplete.value) { return; } else if (isMainThread() && activeJob == __singleThreadedJobs.first()) { __jobComplete.value = true; __dispatchJobOutput({event: COMPLETE, message: message, jobID: activeJob.id}); } else { super.sendComplete(message, transferList); } } public override function sendError(message:Dynamic = null, transferList:Array = null) { if (__jobComplete.value) { return; } else if (isMainThread() && activeJob == __singleThreadedJobs.first()) { __jobComplete.value = true; __dispatchJobOutput({event: ERROR, message: message, jobID: activeJob.id}); } else { super.sendError(message, transferList); } } public override function sendProgress(message:Dynamic = null, transferList:Array = null) { if (__jobComplete.value) { return; } else if (isMainThread() && activeJob == __singleThreadedJobs.first()) { __dispatchJobOutput({event: PROGRESS, message: message, jobID: activeJob.id}); } else { super.sendProgress(message, transferList); } } #if lime_threads /** __Run this only on a background thread.__ Retrieves jobs using `Thread.readMessage()`, runs them until complete, and repeats. The first message must be `ThreadArguments`, and the rest must be `ThreadEvent`s. **/ private static function __executeThread():Void { // @formatter:off JSAsync.async({ var args:ThreadArguments = Thread.readMessage(true); var output:WorkOutput = #if html5 new WorkOutput(MULTI_THREADED) #else args.output #end; #if lime_threads_deque var jobQueue:JobQueue = args.queue; #end var event:ThreadEvent = null; var firstLoop:Bool = true; while (true) { // Get a job. if (event == null) { #if lime_threads_deque event = jobQueue.pop(false); #else event = Thread.readMessage(false); #end if (event == null && !firstLoop) { // Let the main thread know this thread is awaiting // work. Threads start out idle, so there's no need // during the first loop. output.sendThreadEvent({event: IDLE, threadID: args.threadID}); } while (event == null) { #if lime_threads_deque event = jobQueue.pop(true); #else event = Thread.readMessage(true); #end } #if lime_threads_deque // Any interruptions sent in `lime_threads_deque` mode are // simply to make the thread check `jobQueue`. If they // arrive while the thread is waiting for `jobQueue.pop()`, // then their job is already done and they can be ignored. while (Thread.readMessage(false) != null) {} #end output.resetJobProgress(); firstLoop = false; } if (event.event == EXIT) { // Quit working. output.sendThreadEvent({event: EXIT, threadID: args.threadID}); #if html5 Thread.current().destroy(); #end return; } if (event.event != WORK || event.doWork == null || event.jobID == null) { // Go idle. event = null; continue; } // Get to work. output.activeJob = new JobData(event.doWork, event.state, event.jobID); var interruption:ThreadEvent = null; try { while (!output.__jobComplete.value && (interruption = Thread.readMessage(false)) == null) { if (output.workIterations.value == 0) { output.sendThreadEvent({event: WORK, jobID: event.jobID, threadID: args.threadID}); } output.workIterations.value = output.workIterations.value + 1; event.doWork.dispatch(event.state, output); } } catch (e:#if (haxe_ver >= 4.1) Exception #else Dynamic #end) { output.sendUncaughtError(e); } output.activeJob = null; if (interruption == null || output.__jobComplete.value) { // Work is done; wait for more. event = interruption; } else { // Work on the new job. event = interruption; output.resetJobProgress(); } // Do it all again. } }); // @formatter:on } #end private static inline function timestamp():Float { #if sys return Sys.cpuTime(); #else return haxe.Timer.stamp(); #end } /** Processes the job queues, then processes incoming events. **/ private function __update(deltaTime:Int):Void { if (!isMainThread()) { return; } // Run single-threaded jobs. var endTime:Float = timestamp(); if (__totalWorkPriority > 0) { // Lime may be run without a window. var frameRate:Float = 60; if (Application.current.window != null) { frameRate = Application.current.window.frameRate; } // `workLoad / frameRate` is the total time that pools may use per frame. // `workPriority / __totalWorkPriority` is this pool's fraction of that total. // Multiply together to get how much time this pool can spend. endTime += workLoad * workPriority / (frameRate * __totalWorkPriority); } var jobStartTime:Float; while (__singleThreadedJobs.length > 0 && (jobStartTime = timestamp()) < endTime) { activeJob = __singleThreadedJobs.first(); if (!activeJob.started) { activeJob.startTime = jobStartTime; onRun.dispatch(activeJob.state); } __jobComplete.value = false; workIterations.value = 0; try { do { workIterations.value = workIterations.value + 1; activeJob.doWork.dispatch(activeJob.state, this); } while (!__jobComplete.value && timestamp() < endTime); } catch (e:#if (haxe_ver >= 4.1) Exception #else Dynamic #end) { __jobComplete.value = true; __dispatchJobOutput({event: UNCAUGHT_ERROR, message: e, jobID: activeJob.id}); } var jobEndTime:Float = timestamp(); activeJob.duration += jobEndTime - jobStartTime; activeJob = null; if (__jobComplete.value) { __singleThreadedJobs.shift(); __singleThreadedJobRunning = __singleThreadedJobs.length > 0; } } #if (lime_threads && !lime_threads_deque) __runMultiThreadedJobs(); #end // Process events. var threadEvent:ThreadEvent; while ((threadEvent = __jobOutput.pop(false)) != null) { __dispatchJobOutput(threadEvent); } if (activeJobs #if lime_threads + __queuedExitEvents #if lime_threads_deque + __queuedWorkEvents #end #end <= 0) { Application.current.onUpdate.remove(__update); } } #if lime_threads /** Handles a thread that just became idle. Depending on the circumstances, this may do one of three things: - Start the next queued job, adding it to `__multiThreadedJobs`. - Marks the thread as idle. - Exit the thread if it doesn't need to be kept. **/ private function __onThreadIdle(threadID:Int):Void { if (!isMainThread()) { throw "Call __onThreadIdle() only from the main thread."; } var threadData:ThreadData = __threads[threadID]; if (threadData == null) { return; } if (threadData.jobID != null) { threadData.jobID = null; activeThreads--; __idleThreads++; } #if lime_threads_deque if (idleThreads - __queuedWorkEvents > minThreads) { __multiThreadedQueue.add({event: EXIT}); __queuedExitEvents++; } #else __runMultiThreadedJobs(); if (idleThreads > minThreads) { #if html5 threadData.thread.destroy(); __threads[threadID] = null; __idleThreads--; #else threadData.thread.sendMessage({event: EXIT}); __queuedExitEvents++; #end } #end } private function __runMultiThreadedJob(job:JobData):Void { if (job.started) { throw "Job " + job.id + " was already started!"; } #if html5 job.doWork.makePortable(); #end var threadEvent:ThreadEvent = { event: WORK, jobID: job.id, doWork: job.doWork, state: job.state }; #if lime_threads_deque __multiThreadedQueue.add(threadEvent); __queuedWorkEvents++; if (idleThreads <= __queuedWorkEvents && currentThreads < maxThreads) { createThread(__executeThread); } #else var threadData:ThreadData = null; if (idleThreads > 0) { for (data in __threads) { if (data != null && data.jobID == null) { threadData = data; break; } } } if (threadData == null) { if (currentThreads >= maxThreads) { return; } var thread:Thread = createThread(__executeThread); for (data in __threads) { if (data.thread == thread) { threadData = data; break; } } if (threadData == null) { return; } } threadData.jobID = job.id; threadData.thread.sendMessage(threadEvent); __idleThreads--; activeThreads++; #end // Mark the job as started, even if it's only queued, to prevent // queueing it again. `startTime` will be updated again later, when // confirmation is received. job.startTime = 0; } #if !lime_threads_deque private function __runMultiThreadedJobs():Void { if (activeThreads >= maxThreads) { return; } for (job in __multiThreadedJobs) { if (!job.started) { __runMultiThreadedJob(job); if (activeThreads >= maxThreads) { break; } } } } #end private override function createThread(executeThread:WorkFunctionVoid>):Thread { var thread:Thread = super.createThread(executeThread); var index:Int = __threads.indexOf(null); if (index < 0) { index = __threads.length; } __threads[index] = {thread: thread, jobID: null}; __idleThreads++; thread.sendMessage({ #if !html5 output: this, #end #if lime_threads_deque queue: __multiThreadedQueue, #end threadID: index }); return thread; } #end // Getters & Setters private inline function get_activeJobs():Int { return activeThreads + (__singleThreadedJobs.length > 0 ? 1 : 0); } private inline function get_currentThreads():Int { return activeThreads + idleThreads; } private function get_doWork():PseudoEvent { return this; } private inline function get_idleThreads():Int { return __idleThreads #if lime_threads - __queuedExitEvents #end; } private inline function set___singleThreadedJobRunning(value:Bool):Bool { if (value != __singleThreadedJobRunning) { if (value) { __totalWorkPriority += workPriority; } else { __totalWorkPriority -= workPriority; } } return __singleThreadedJobRunning = value; } private function set_workPriority(value:Float):Float { if (__singleThreadedJobRunning) { __totalWorkPriority += value - workPriority; } return workPriority = value; } } @:access(lime.system.ThreadPool) private abstract PseudoEvent(ThreadPool) from ThreadPool { @:noCompletion @:dox(hide) public var __listeners(get, never):Array; private inline function get___listeners():Array { return []; }; @:noCompletion @:dox(hide) public var __repeat(get, never):Array; private inline function get___repeat():Array { return []; }; public function add(callback:Dynamic->Void):Void { function callCallback(state:State, output:WorkOutput):Void { callback(state); } #if (lime_threads && html5) this.__doWork = {func: callCallback}; #else this.__doWork = callCallback; #end } public inline function cancel():Void {} public inline function dispatch():Void {} public inline function has(callback:Dynamic->Void):Bool { return this.__doWork != null; } public inline function remove(callback:Dynamic->Void):Void { this.__doWork = null; } public inline function removeAll():Void { this.__doWork = null; } } private class JobArray { private var jobs:Array = []; public var length(get, never):Int; /** The first non-null index in `jobs`. **/ private var startIndex:Int = 0; public inline function new() {} public inline function clear():Void { #if haxe4 jobs.resize(0); #else jobs.splice(0, jobs.length); #end startIndex = 0; } public inline function first():JobData { return jobs[startIndex]; } public function getJob(id:Int):JobData { for (i in startIndex...jobs.length) { if (jobs[i].id == id) { return jobs[i]; } } return null; } private inline function get_length():Int { return jobs.length - startIndex; } public inline function iterator():JobArrayIterator { return new JobArrayIterator(jobs, startIndex); } public inline function push(job:JobData):Int { return jobs.push(job); } public function removeJob(id:Int):JobData { for (i in startIndex...jobs.length) { var job:JobData = jobs[i]; if (job.id != id) { continue; } if ((i - startIndex) * 2 <= length) { // Closer to the start; shift earlier entries +1. var j:Int = i; while (j > startIndex) { jobs[j] = jobs[j - 1]; j--; } shift(); } else { // Closer to the end; shift later entries -1. jobs.splice(i, 1); } return job; } return null; } public function shift():JobData { var job:JobData = jobs[startIndex]; jobs[startIndex] = null; startIndex++; if (startIndex >= jobs.length) { clear(); } else if (startIndex >= 100) { jobs.splice(0, startIndex); startIndex = 0; } return job; } } private class JobArrayIterator { private var index:Int; private var jobs:Array; public inline function new(jobs:Array, startIndex:Int) { this.jobs = jobs; index = startIndex; } public inline function hasNext():Bool { return index < jobs.length; } public inline function next():JobData { return jobs[index++]; } } #if lime_threads_deque @:forward private abstract JobQueue(Deque) from Deque { public inline function new() { this = new Deque(); } // Only allow adding to the end. public inline function push(event:ThreadEvent):Void { this.add(event); } } #end private typedef ThreadArguments = { #if !html5 var output:WorkOutput; #end #if lime_threads_deque var queue:JobQueue; #end var threadID:Int; }; #if lime_threads private typedef ThreadData = { var thread:Thread; @:optional var jobID:Int; }; #end ================================================ FILE: src/lime/system/WorkOutput.hx ================================================ package lime.system; #if target.threaded import sys.thread.Deque; import sys.thread.Thread; import sys.thread.Tls; #elseif cpp import cpp.vm.Deque; import cpp.vm.Thread; import cpp.vm.Tls; #elseif neko import neko.vm.Deque; import neko.vm.Thread; import neko.vm.Tls; #end #if html5 import lime._internal.backend.html5.HTML5Thread as Thread; import lime._internal.backend.html5.HTML5Thread.Transferable; #end #if macro import haxe.macro.Expr; using haxe.macro.Context; #end // In addition to `WorkOutput`, this module contains a number of small enums, // abstracts, and classes used by all of Lime's threading classes. /** Functions and variables available to the `doWork` function. For instance, the `sendProgress()`, `sendComplete()`, and `sendError()` functions allow returning output. `doWork` should exclusively use `WorkOutput` to communicate with the main thread. On many targets it's also possible to access static or instance variables, but this isn't thread safe and won't work in HTML5. **/ class WorkOutput { /** Thread-local storage. Tracks how many times `doWork` has been called for the current job, including (if applicable) the ongoing call. In single-threaded mode, it only counts the number of calls this frame. The lower the number, the less accurate `ThreadPool.workLoad` becomes, but the higher the number, the more overhead there is. As a ballpark estimate, aim for 10-100 iterations. **/ public var workIterations(default, null):Tls = new Tls(); /** The mode jobs will run in by default. If threads aren't available, jobs will always run in `SINGLE_THREADED` mode. **/ public var mode:ThreadMode; /** Messages sent by active jobs, received by the main thread. **/ private var __jobOutput:Deque = new Deque(); /** Thread-local storage. Tracks whether `sendError()` or `sendComplete()` was called by this job, or if the job threw an error. **/ private var __jobComplete:Tls = new Tls(); /** The job that is currently running on this thread, or the job that triggered the ongoing event (`onComplete`, `onProgress`, etc.). Will be null in all other cases. **/ public var activeJob(get, set):Null; @:noCompletion private var __activeJob:Tls = new Tls(); private inline function new(mode:Null) { workIterations.value = 0; __jobComplete.value = false; #if lime_threads this.mode = mode != null ? mode : #if html5 SINGLE_THREADED #else MULTI_THREADED #end; #end } /** Dispatches `onComplete` on the main thread, with the given message. `doWork` should return after calling this. If using web workers, you can also pass a list of transferable objects. @see https://developer.mozilla.org/en-US/docs/Glossary/Transferable_objects **/ public function sendComplete(message:Dynamic = null, transferList:Array = null):Void { if (!__jobComplete.value) { __jobComplete.value = true; sendThreadEvent({event: COMPLETE, message: message, jobID: activeJob.id}, transferList); } } /** Dispatches `onError` on the main thread, with the given message. `doWork` should return after calling this. If using web workers, you can also pass a list of transferable objects. @see https://developer.mozilla.org/en-US/docs/Glossary/Transferable_objects **/ public function sendError(message:Dynamic = null, transferList:Array = null):Void { if (!__jobComplete.value) { __jobComplete.value = true; sendThreadEvent({event: ERROR, message: message, jobID: activeJob.id}, transferList); } } /** Dispatches `onProgress` on the main thread, with the given message. This can be called any number of times per job. If using web workers, you can also pass a list of transferable objects. @see https://developer.mozilla.org/en-US/docs/Glossary/Transferable_objects **/ public function sendProgress(message:Dynamic = null, transferList:Array = null):Void { if (!__jobComplete.value) { sendThreadEvent({event: PROGRESS, message: message, jobID: activeJob.id}, transferList); } } private function sendUncaughtError(message:#if (haxe_ver >= 4.1) haxe.Exception #else Dynamic #end):Void { if (!__jobComplete.value) { __jobComplete.value = true; sendThreadEvent({event: UNCAUGHT_ERROR, message: message, jobID: activeJob.id}); } } private inline function sendThreadEvent(event:ThreadEvent, transferList:Array = null):Void { #if (lime_threads && html5) if (Thread.current().isWorker()) { Thread.returnMessage(event, transferList); } else #end __jobOutput.add(event); } private inline function resetJobProgress():Void { __jobComplete.value = false; workIterations.value = 0; } #if lime_threads private function createThread(executeThread:WorkFunctionVoid>):Thread { var thread:Thread = Thread.create(executeThread); #if html5 thread.onMessage.add(function(event:ThreadEvent) { __jobOutput.add(event); }); #end return thread; } #end // Getters & Setters private inline function get_activeJob():JobData { return __activeJob.value; } private inline function set_activeJob(value:JobData):JobData { return __activeJob.value = value; } } #if haxe4 enum #else @:enum #end abstract ThreadMode(Bool) { /** All work will be done on the main thread, during `Application.onUpdate`. To avoid lag spikes, `doWork` should return after completing a fraction of a frame's worth of work, storing its progress in `state`. It will be called again with the same `state` next frame, or this frame if there's still time. @see https://en.wikipedia.org/wiki/Green_threads @see https://en.wikipedia.org/wiki/Cooperative_multitasking **/ var SINGLE_THREADED = false; /** All work will be done on a background thread. Unlike single-threaded mode, there is no risk of causing lag spikes. Even so, `doWork` should return periodically, to allow canceling the thread. If not canceled, `doWork` will be called again immediately. In HTML5, web workers will be used to achieve this. This means `doWork` must be a static function, and you can't use `bind()`. Web workers also impose a longer delay each time `doWork` returns, so it shouldn't return as often in multi-threaded mode as in single-threaded mode. **/ var MULTI_THREADED = true; } /** A function that performs asynchronous work. This can either be work on another thread ("multi-threaded mode"), or it can represent a green thread ("single-threaded mode"). In single-threaded mode, the work function shouldn't complete the job all at once, as the main thread would lock up. Instead, it should perform a fraction of the job each time it's called. `ThreadPool` provides the function with a persistent `State` argument for tracking progress, which can be any object of your choice. Caution: if using multi-threaded mode in HTML5, this must be a static function and binding arguments is forbidden. Compile with `-Dlime-warn-portability` to highlight functions that won't work. **/ #if (lime_threads && html5) typedef WorkFunction = lime._internal.backend.html5.HTML5Thread.WorkFunction; #else abstract WorkFunction(T) from T to T { /** Executes this function with the given arguments. **/ public macro function dispatch(self:Expr, args:Array):Expr { switch (self.typeof().follow().toComplexType()) { case TPath({sub: "WorkFunction", params: [TPType(t)]}): return macro($self : $t)($a{args}); default: throw "Underlying function type not found."; } } } #end /** An argument of any type to pass to the `doWork` function. Though `doWork` only accepts a single argument, you can pass multiple values as part of an anonymous structure. (Or an array, or a class.) // Does not work: too many arguments. // threadPool.run(doWork, argument0, argument1, argument2); // Works: all arguments are combined into one `State` object. threadPool.run(doWork, { arg0: argument0, arg1: argument1, arg2: argument2 }); // Alternatives that also work, if everything is the correct type. threadPool.run(doWork, [argument0, argument1, argument2]); threadPool.run(doWork, new DoWorkArgs(argument0, argument1, argument2)); Any changes made to this object will persist if and when `doWork` is called again for the same job. (See `WorkFunction` for instructions on how to do this.) This is the recommended way to store `doWork`'s progress. Caution: after passing an object to `doWork`, avoid accessing or modifying that object from the main thread, and avoid passing it to other threads. Doing either may lead to race conditions. If you need to store an object, pass a clone of that object to `doWork`. **/ typedef State = Dynamic; class JobData { private static var nextID:Int = 0; /** `JobData` instances will regularly be copied in HTML5, so checking equality won't work. Instead, compare identifiers. **/ public var id(default, null):Int; /** The function responsible for carrying out the job. **/ public var doWork(default, null):WorkFunctionWorkOutput->Void>; /** The original `State` object passed to the job. Avoid modifying this object if the job is running in multi-threaded mode. **/ public var state(default, null):State; /** The total time spent on this job. In multi-threaded mode, this includes the overhead for sending messages, plus any time spent waiting for a canceled job to return. The latter delay can be reduced by returning at regular intervals. **/ @:allow(lime.system.WorkOutput) public var duration(default, null):Float = 0; public var started(get, never):Bool; @:allow(lime.system.WorkOutput) private var startTime:Float = -1; @:allow(lime.system.WorkOutput) private inline function new(doWork:WorkFunctionWorkOutput->Void>, state:State, ?id:Int) { this.id = id != null ? id : nextID++; this.doWork = doWork; this.state = state; } private inline function get_started():Bool { return startTime >= 0; } } #if haxe4 enum #else @:enum #end abstract ThreadEventType(String) { // Events sent from a worker to the main thread, in any mode var COMPLETE = "COMPLETE"; var ERROR = "ERROR"; var PROGRESS = "PROGRESS"; var UNCAUGHT_ERROR = "UNCAUGHT_ERROR"; // Commands sent from the main thread to a worker thread, and returned by // the worker to confirm the change of state, in multi-threaded mode only var WORK = "WORK"; var IDLE = "IDLE"; var EXIT = "EXIT"; } typedef ThreadEvent = { var event:ThreadEventType; @:optional var message:Dynamic; @:optional var jobID:Int; /** Required when a worker thread reports a state change (WORK, IDLE, EXIT). **/ @:optional var threadID:Int; // Only for WORK events sent by the main thread to a worker @:optional var doWork:WorkFunctionWorkOutput->Void>; @:optional var state:State; } class JSAsync { /** In JavaScript, runs the given block of code within an `async` function, enabling the `await` keyword. On other targets, runs the code normally. **/ public static macro function async(code:Expr):Expr { if (Context.defined("js")) { var jsCode:Expr = #if haxe4 macro js.Syntax.code #else macro untyped __js__ #end; return macro $jsCode("(async {0})()", function() $code); } else { return code; } } } // Define platform-specific types #if target.threaded // Haxe 3 compatibility: "target.threaded" can't go in parentheses. #elseif !(cpp || neko) @:forward(push, add) abstract Deque(List) from List to List { public inline function new() { this = new List(); } public inline function pop(block:Bool):Null { return this.pop(); } } class Tls { public var value:T; public inline function new() {} } #end #if !html5 typedef Transferable = Dynamic; #end ================================================ FILE: src/lime/text/Font.hx ================================================ package lime.text; import haxe.io.Bytes; import lime._internal.backend.native.NativeCFFI; import lime.app.Future; import lime.app.Promise; import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.math.Vector2; import lime.net.HTTPRequest; import lime.system.CFFI; import lime.system.System; import lime.utils.Assets; import lime.utils.Log; import lime.utils.UInt8Array; #if (js && html5) import js.html.CanvasElement; import js.html.CanvasRenderingContext2D; import js.html.SpanElement; import js.Browser; #end #if (lime_cffi && !macro) import haxe.io.Path; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end #if (!display && !flash && !nodejs && !macro) @:autoBuild(lime._internal.macros.AssetsMacro.embedFont()) #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.text.Glyph) class Font { /** * The ascender value of the font. */ public var ascender:Int; /** * The descender value of the font. */ public var descender:Int; /** * The height of the font. */ public var height:Int; /** * The name of the font. */ public var name(default, null):String; /** * The number of glyphs in the font. */ public var numGlyphs:Int; public var src:Dynamic; /** * The underline position of the font. */ public var underlinePosition:Int; /** * The underline thickness of the font. */ public var underlineThickness:Int; /** * The underline position of the font. */ public var strikethroughPosition:Int; /** * The underline thickness of the font. */ public var strikethroughThickness:Int; /** * The units per EM of the font. */ public var unitsPerEM:Int; @:noCompletion private var __fontID:String; @:noCompletion private var __fontPath:String; #if lime_cffi @:noCompletion private var __fontPathWithoutDirectory:String; #end @:noCompletion private var __init:Bool; /** * Creates a new instance of a Font object. * * @param name Optional name of the font. */ public function new(name:String = null) { if (name != null) { this.name = name; } if (!__init) { #if js if (ascender == untyped #if haxe4 js.Syntax.code #else __js__ #end ("undefined")) #end ascender = 0; #if js if (descender == untyped #if haxe4 js.Syntax.code #else __js__ #end ("undefined")) #end descender = 0; #if js if (height == untyped #if haxe4 js.Syntax.code #else __js__ #end ("undefined")) #end height = 0; #if js if (numGlyphs == untyped #if haxe4 js.Syntax.code #else __js__ #end ("undefined")) #end numGlyphs = 0; #if js if (underlinePosition == untyped #if haxe4 js.Syntax.code #else __js__ #end ("undefined")) #end underlinePosition = 0; #if js if (underlineThickness == untyped #if haxe4 js.Syntax.code #else __js__ #end ("undefined")) #end underlineThickness = 0; #if js if (unitsPerEM == untyped #if haxe4 js.Syntax.code #else __js__ #end ("undefined")) #end unitsPerEM = 0; if (__fontID != null) { if (Assets.isLocal(__fontID)) { __fromBytes(Assets.getBytes(__fontID)); } } else if (__fontPath != null) { __fromFile(__fontPath); } } } /** * Decomposes the font into outline data. * * @return An instance of `NativeFontData` that contains decomposed font outline information. */ public function decompose():NativeFontData { #if (lime_cffi && !macro) if (src == null) throw "Uninitialized font handle."; var data:Dynamic = NativeCFFI.lime_font_outline_decompose(src, 1024 * 20); #if hl if (data != null) { data.family_name = @:privateAccess String.fromUCS2(data.family_name); data.style_name = @:privateAccess String.fromUTF8(data.style_name); } #end return data; #else return null; #end } /** * Creates a Font instance from byte data. * * @param bytes The byte data containing the font. * @return A `Font` instance. */ public static function fromBytes(bytes:Bytes):Font { if (bytes == null) return null; var font = new Font(); font.__fromBytes(bytes); #if (lime_cffi && !macro) return (font.src != null) ? font : null; #else return font; #end } /** * Creates a Font instance from a file path. * * @param path The file path of the font. * @return A `Font` instance. */ public static function fromFile(path:String):Font { if (path == null) return null; var font = new Font(); font.__fromFile(path); #if (lime_cffi && !macro) return (font.src != null) ? font : null; #else return font; #end } /** * Loads a Font from byte data asynchronously. * * @param bytes The byte data containing the font. * @return A `Future` containing a `Font` instance. */ public static function loadFromBytes(bytes:Bytes):Future { return Future.withValue(fromBytes(bytes)); } /** * Loads a Font from a file path asynchronously. * * @param path The file path of the font. * @return A `Future` containing a `Font` instance. */ public static function loadFromFile(path:String):Future { var request = new HTTPRequest(); return request.load(path).then(function(font) { if (font != null) { return Future.withValue(font); } else { return cast Future.withError(""); } }); } /** * Loads a Font by its name asynchronously. * * @param path The name of the font. * @return A `Future` containing a `Font` instance. */ public static function loadFromName(path:String):Future { #if (js && html5) var font = new Font(); return font.__loadFromName(path); #else return cast Future.withError(""); #end } /** * Retrieves a glyph from the font by a character. * * @param character The character whose glyph to retrieve. * @return A `Glyph` instance representing the glyph of the character. */ public function getGlyph(character:String):Glyph { #if (lime_cffi && !macro) return NativeCFFI.lime_font_get_glyph_index(src, character); #else return -1; #end } /** * Retrieves an array of glyphs for a set of characters. * * @param characters The string containing characters to retrieve glyphs for. * @return An array of `Glyph` instances representing the glyphs of the characters. */ public function getGlyphs(characters:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^`'\"/\\&*()[]{}<>|:;_-+=?,. "):Array { #if (lime_cffi && !macro) #if hl return [for (index in NativeCFFI.lime_font_get_glyph_indices(src, characters)) new Glyph(index)]; #else return NativeCFFI.lime_font_get_glyph_indices(src, characters); #end #else return null; #end } /** * Retrieves metrics for a given glyph. * * @param glyph The glyph whose metrics to retrieve. * @return A `GlyphMetrics` instance containing the metrics of the glyph. */ public function getGlyphMetrics(glyph:Glyph):GlyphMetrics { #if (lime_cffi && !macro) var value:Dynamic = NativeCFFI.lime_font_get_glyph_metrics(src, glyph); var metrics = new GlyphMetrics(); metrics.advance = new Vector2(value.horizontalAdvance, value.verticalAdvance); metrics.height = value.height; metrics.horizontalBearing = new Vector2(value.horizontalBearingX, value.horizontalBearingY); metrics.verticalBearing = new Vector2(value.verticalBearingX, value.verticalBearingY); return metrics; #else return null; #end } /** * Renders a specific glyph to an image. * * @param glyph The glyph to render. * @param fontSize The size to render the glyph at. * @return An `Image` instance representing the rendered glyph. */ public function renderGlyph(glyph:Glyph, fontSize:Int):Image { #if (lime_cffi && !macro) __setSize(fontSize, 96); // Allocate an estimated buffer size - adjust if necessary var bytes:Bytes = Bytes.alloc(0); // Allocate some reasonable initial size // Call native function to render glyph and get byte data bytes = NativeCFFI.lime_font_render_glyph(src, glyph, bytes); if (bytes != null && bytes.length > 0) { var dataPosition = 0; // Extract glyph information from the byte array var index:Int = bytes.getInt32(dataPosition); dataPosition += 4; var width:Int = bytes.getInt32(dataPosition); dataPosition += 4; var height:Int = bytes.getInt32(dataPosition); dataPosition += 4; var x:Int = bytes.getInt32(dataPosition); dataPosition += 4; var y:Int = bytes.getInt32(dataPosition); dataPosition += 4; // Check if width and height are valid before proceeding if (width <= 0 || height <= 0) { return null; } // Extract pixel data from the byte array, accounting for 32-bit RGBA data var pitch = width * 4; // 32-bit color data // Create a new Bytes array to store the extracted bitmap data without padding var dataBytes = Bytes.alloc(width * height * 4); // Extract row by row to handle RGBA data for (i in 0...height) { dataBytes.blit(i * width * 4, bytes, dataPosition + (i * pitch), width * 4); } // Create ImageBuffer and Image from the extracted data var buffer = new ImageBuffer(new UInt8Array(dataBytes), width, height, 32); var image = new Image(buffer, 0, 0, width, height); image.x = x; image.y = y; return image; } #end return null; } /** * Renders a set of glyphs to images. * * @param glyphs The glyphs to render. * @param fontSize The size to render the glyphs at. * @return A `Map` containing glyphs mapped to their corresponding images. */ public function renderGlyphs(glyphs:Array, fontSize:Int):Map { #if (lime_cffi && !macro) var uniqueGlyphs = new Map(); for (glyph in glyphs) { uniqueGlyphs.set(glyph, true); } var glyphList = []; for (key in uniqueGlyphs.keys()) { glyphList.push(key); } #if hl var _glyphList = new hl.NativeArray(glyphList.length); for (i in 0...glyphList.length) { _glyphList[i] = glyphList[i]; } var glyphList = _glyphList; #end __setSize(fontSize, 96); var bytes = Bytes.alloc(0); bytes = NativeCFFI.lime_font_render_glyphs(src, glyphList, bytes); if (bytes != null && bytes.length > 0) { var bytesPosition = 0; var count = bytes.getInt32(bytesPosition); bytesPosition += 4; var bufferWidth = 128; var bufferHeight = 128; var offsetX = 0; var offsetY = 0; var maxRows = 0; var width:Int; var height:Int; var i = 0; while (i < count) { bytesPosition += 4; width = bytes.getInt32(bytesPosition); bytesPosition += 4; height = bytes.getInt32(bytesPosition); bytesPosition += 4; bytesPosition += (4 * 2) + width * height; if (offsetX + width > bufferWidth) { offsetY += maxRows + 1; offsetX = 0; maxRows = 0; } if (offsetY + height > bufferHeight) { if (bufferWidth < bufferHeight) { bufferWidth *= 2; } else { bufferHeight *= 2; } offsetX = 0; offsetY = 0; maxRows = 0; // TODO: make this better bytesPosition = 4; i = 0; continue; } offsetX += width + 1; if (height > maxRows) { maxRows = height; } i++; } var map = new Map(); var buffer = new ImageBuffer(null, bufferWidth, bufferHeight, 8); var dataPosition = 0; var data = Bytes.alloc(bufferWidth * bufferHeight); bytesPosition = 4; offsetX = 0; offsetY = 0; maxRows = 0; var index:Int; var x:Int; var y:Int; var image:Image; for (i in 0...count) { index = bytes.getInt32(bytesPosition); bytesPosition += 4; width = bytes.getInt32(bytesPosition); bytesPosition += 4; height = bytes.getInt32(bytesPosition); bytesPosition += 4; x = bytes.getInt32(bytesPosition); bytesPosition += 4; y = bytes.getInt32(bytesPosition); bytesPosition += 4; if (offsetX + width > bufferWidth) { offsetY += maxRows + 1; offsetX = 0; maxRows = 0; } for (i in 0...height) { dataPosition = ((i + offsetY) * bufferWidth) + offsetX; data.blit(dataPosition, bytes, bytesPosition, width); bytesPosition += width; } image = new Image(buffer, offsetX, offsetY, width, height); image.x = x; image.y = y; map.set(index, image); offsetX += width + 1; if (height > maxRows) { maxRows = height; } } #if js buffer.data = data.byteView; #else buffer.data = new UInt8Array(data); #end return map; } #end return null; } @:noCompletion private function __copyFrom(other:Font):Void { if (other != null) { ascender = other.ascender; descender = other.descender; height = other.height; name = other.name; numGlyphs = other.numGlyphs; src = other.src; underlinePosition = other.underlinePosition; underlineThickness = other.underlineThickness; unitsPerEM = other.unitsPerEM; __fontID = other.__fontID; __fontPath = other.__fontPath; #if lime_cffi __fontPathWithoutDirectory = other.__fontPathWithoutDirectory; #end __init = true; } } @:noCompletion private function __fromBytes(bytes:Bytes):Void { __fontPath = null; #if (lime_cffi && !macro) __fontPathWithoutDirectory = null; src = NativeCFFI.lime_font_load_bytes(bytes); __initializeSource(); #end } @:noCompletion private function __fromFile(path:String):Void { __fontPath = path; #if (lime_cffi && !macro) __fontPathWithoutDirectory = Path.withoutDirectory(__fontPath); src = NativeCFFI.lime_font_load_file(__fontPath); __initializeSource(); #end } @:noCompletion private function __initializeSource():Void { #if (lime_cffi && !macro) if (src != null) { if (name == null) { name = CFFI.stringValue(cast NativeCFFI.lime_font_get_family_name(src)); } ascender = NativeCFFI.lime_font_get_ascender(src); descender = NativeCFFI.lime_font_get_descender(src); height = NativeCFFI.lime_font_get_height(src); numGlyphs = NativeCFFI.lime_font_get_num_glyphs(src); underlinePosition = NativeCFFI.lime_font_get_underline_position(src); underlineThickness = NativeCFFI.lime_font_get_underline_thickness(src); strikethroughPosition = NativeCFFI.lime_font_get_strikethrough_position(src); strikethroughThickness = NativeCFFI.lime_font_get_strikethrough_thickness(src); unitsPerEM = NativeCFFI.lime_font_get_units_per_em(src); } #end __init = true; } @:noCompletion private function __loadFromName(name:String):Future { var promise = new Promise(); #if (js && html5) this.name = name; var userAgent = Browser.navigator.userAgent.toLowerCase(); var isSafari = (userAgent.indexOf(" safari/") >= 0 && userAgent.indexOf(" chrome/") < 0); var isUIWebView = ~/(iPhone|iPod|iPad).*AppleWebKit(?!.*Version)/i.match(userAgent); if (!isSafari && !isUIWebView && untyped (Browser.document).fonts && untyped (Browser.document).fonts.load) { untyped (Browser.document).fonts.load("1em '" + name + "'").then(function(_) { promise.complete(this); }, function(_) { Log.warn("Could not load web font \"" + name + "\""); promise.complete(this); }); } else { var node1 = __measureFontNode("'" + name + "', sans-serif"); var node2 = __measureFontNode("'" + name + "', serif"); var width1 = node1.offsetWidth; var width2 = node2.offsetWidth; var interval = -1; var timeout = 3000; var intervalLength = 50; var intervalCount = 0; var loaded:Bool; var timeExpired:Bool; var checkFont = function() { intervalCount++; loaded = (node1.offsetWidth != width1 || node2.offsetWidth != width2); timeExpired = (intervalCount * intervalLength >= timeout); if (loaded || timeExpired) { Browser.window.clearInterval(interval); node1.parentNode.removeChild(node1); node2.parentNode.removeChild(node2); node1 = null; node2 = null; if (timeExpired) { Log.warn("Could not load web font \"" + name + "\""); } promise.complete(this); } } interval = Browser.window.setInterval(checkFont, intervalLength); } #else promise.error(""); #end return promise.future; } #if (js && html5) private static function __measureFontNode(fontFamily:String):SpanElement { var node:SpanElement = cast Browser.document.createElement("span"); node.setAttribute("aria-hidden", "true"); var text = Browser.document.createTextNode("BESbswy"); node.appendChild(text); var style = node.style; style.display = "block"; style.position = "absolute"; style.top = "-9999px"; style.left = "-9999px"; style.fontSize = "300px"; style.width = "auto"; style.height = "auto"; style.lineHeight = "normal"; style.margin = "0"; style.padding = "0"; style.fontVariant = "normal"; style.whiteSpace = "nowrap"; style.fontFamily = fontFamily; Browser.document.body.appendChild(node); return node; } #end @:noCompletion private function __setSize(size:Int, dpi:Int = 72):Void { #if (lime_cffi && !macro) NativeCFFI.lime_font_set_size(src, size, dpi); #end } } /** * Represents decomposed font data, containing kerning information, glyphs, and other properties. */ typedef NativeFontData = { var has_kerning:Bool; var is_fixed_width:Bool; var has_glyph_names:Bool; var is_italic:Bool; var is_bold:Bool; var num_glyphs:Int; var family_name:String; var style_name:String; var em_size:Int; var ascend:Int; var descend:Int; var height:Int; var glyphs:Array; var kerning:Array; } /** * Represents data for an individual glyph, including dimensions and control points. */ typedef NativeGlyphData = { var char_code:Int; var advance:Int; var min_x:Int; var max_x:Int; var min_y:Int; var max_y:Int; var points:Array; } /** * Represents kerning information between two glyphs. */ typedef NativeKerningData = { var left_glyph:Int; var right_glyph:Int; var x:Int; var y:Int; } ================================================ FILE: src/lime/text/Glyph.hx ================================================ package lime.text; abstract Glyph(Int) from Int to Int from UInt to UInt { public function new(i:Int) { this = i; } } ================================================ FILE: src/lime/text/GlyphMetrics.hx ================================================ package lime.text; import lime.math.Vector2; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class GlyphMetrics { public var advance:Vector2; public var height:Int; public var horizontalBearing:Vector2; public var verticalBearing:Vector2; public function new() {} } ================================================ FILE: src/lime/text/UTF8String.hx ================================================ package lime.text; #if !haxe4 import haxe.Utf8; import lime._internal.unifill.Unifill; import lime._internal.unifill.CodePoint; import lime.system.Locale; abstract UTF8String(String) from String to String { #if sys private static var lowercaseMap:Map; private static var uppercaseMap:Map; #end /** The number of characters in `this` String. **/ public var length(get, never):Int; /** Creates a copy from a given String. **/ public function new(str:String) { this = new String(str); } /** Returns the character at position `index` of `this` String. If `index` is negative or exceeds `this.length`, the empty String `""` is returned. **/ public function charAt(index:Int):String { return Unifill.uCharAt(this, index); } /** Returns the character code at position `index` of `this` String. If `index` is negative or exceeds `this.length`, `null` is returned. To obtain the character code of a single character, `"x".code` can be used instead to inline the character code at compile time. Note that this only works on String literals of length 1. **/ public function charCodeAt(index:Int):Null { if (index < 0 || index >= Unifill.uLength(this)) return null; return Unifill.uCharCodeAt(this, index); } /** Returns the String corresponding to the character code `code`. If `code` is negative or has another invalid value, the result is unspecified. **/ public static function fromCharCode(code:Int):String { return CodePoint.fromInt(code); } /** Returns the string corresponding to the array of character codes `codes`. If #unifill is defined, these codes will be treated as UTF-8 code points, otherwise it will default to using String.fromCharCode() for each character **/ public static function fromCharCodes(codes:Array):String { var s = ""; for (code in codes) { s += CodePoint.fromInt(code); } return s; } /** Returns the position of the leftmost occurence of `str` within `this` String. If `startIndex` is given, the search is performed within the substring of `this` String starting from `startIndex`. Otherwise the search is performed within `this` String. In either case, the returned position is relative to the beginning of `this` String. If `str` cannot be found, -1 is returned. **/ public function indexOf(str:String, startIndex:Int = 0):Int { return Unifill.uIndexOf(this, str, startIndex); } /** Returns the position of the rightmost occurence of `str` within `this` String. If `startIndex` is given, the search is performed within the substring of `this` String from 0 to `startIndex`. Otherwise the search is performed within `this` String. In either case, the returned position is relative to the beginning of `this` String. If `str` cannot be found, -1 is returned. **/ public function lastIndexOf(str:String, ?startIndex:Int):Int { return Unifill.uLastIndexOf(this, str, startIndex); } /** Splits `this` String at each occurence of `delimiter`. If `this` String is the empty String `""`, the result is not consistent across targets and may either be `[]` (on Js, Cpp) or `[""]`. If `delimiter` is the empty String `""`, `this` String is split into an Array of `this.length` elements, where the elements correspond to the characters of `this` String. If `delimiter` is not found within `this` String, the result is an Array with one element, which equals `this` String. If `delimiter` is null, the result is unspecified. Otherwise, `this` String is split into parts at each occurence of `delimiter`. If `this` String starts (or ends) with `delimiter`, the result `Array` contains a leading (or trailing) empty String `""` element. Two subsequent delimiters also result in an empty String `""` element. **/ public function split(delimiter:String):Array { return Unifill.uSplit(this, delimiter); } /** Returns `len` characters of `this` String, starting at position `pos`. If `len` is omitted, all characters from position `pos` to the end of `this` String are included. If `pos` is negative, its value is calculated from the end of `this` String by `this.length + pos`. If this yields a negative value, 0 is used instead. If the calculated position + `len` exceeds `this.length`, the characters from that position to the end of `this` String are returned. If `len` is negative, the result is unspecified. **/ public function substr(pos:Int, ?len:Int):String { if (len == null) { len = (this : UTF8String).length - pos; } return Utf8.sub(this, pos, len); } /** Returns the part of `this` String from `startIndex` to but not including `endIndex`. If `startIndex` or `endIndex` are negative, 0 is used instead. If `startIndex` exceeds `endIndex`, they are swapped. If the (possibly swapped) `endIndex` is omitted or exceeds `this.length`, `this.length` is used instead. If the (possibly swapped) `startIndex` exceeds `this.length`, the empty String `""` is returned. **/ public function substring(startIndex:Int, ?endIndex:Int):String { return Unifill.uSubstring(this, startIndex, endIndex); } /** Returns a String where all characters of `this` String are lower case. Affects the characters `A-Z`. Other characters remain unchanged. If `language` is specified, language-specific casing rules will be followed. **/ public function toLowerCase(locale:Locale = null):String { #if sys if (lowercaseMap == null) { lowercaseMap = new Map(); Utf8Ext.fillUpperToLowerMap(lowercaseMap); } var r = new Utf8(); Utf8.iter(this, function(v) { if (locale != null) { var v2 = toLowerCaseLocaleFixes(v, locale); if (v2 != v) { r.addChar(v2); return; } } r.addChar(lowercaseMap.exists(v) ? lowercaseMap[v] : v); }); return r.toString(); #else return this.toLowerCase(); #end } private static function toLowerCaseLocaleFixes(v:Int, locale:Locale):Int { return switch (locale.language) { case "tr": switch (v) { case 0xC4B0: 0x69; // İ-->i (large dotted İ to small i) //probably redundant and can be removed, presented here for logical symmtery for when genuine cases are needed default: v; } default: v; } } /** Returns the String itself. **/ public function toString():String { return this; } /** Returns a String where all characters of `this` String are upper case. Affects the characters `a-z`. Other characters remain unchanged. If `language` is specified, language-specific casing rules will be followed. **/ public function toUpperCase(locale:Locale = null):String { #if sys if (uppercaseMap == null) { uppercaseMap = new Map(); Utf8Ext.fillLowerToUpperMap(uppercaseMap); } var r = new Utf8(); Utf8.iter(this, function(v) { if (locale != null) { var v2 = toUpperCaseLocaleFixes(v, locale); if (v2 != v) { r.addChar(v2); return; } } r.addChar(uppercaseMap.exists(v) ? uppercaseMap[v] : v); }); return r.toString(); #else return this.toUpperCase(); #end } private static function toUpperCaseLocaleFixes(v:Int, locale:Locale):Int { return switch (locale.language) { case "tr": switch (v) { case 0x69: 0xC4B0; // i-->İ (small i to large dotted İ) default: v; } default: v; } } @:op(A == B) private static function equals(a:UTF8String, b:UTF8String):Bool { if (a == null || b == null) return (a : String) == (b : String); return Unifill.uCompare(a, b) == 0; } @:op(A < B) private static function lt(a:UTF8String, b:UTF8String):Bool { if (b == null) return false; if (a == null) return true; return Unifill.uCompare(a, b) == -1; } @:op(A > B) private static function gt(a:UTF8String, b:UTF8String):Bool { if (a == null) return false; if (b == null) return true; return Unifill.uCompare(a, b) == 1; } @:op(A <= B) private static function lteq(a:UTF8String, b:UTF8String):Bool { if (b == null) return (a == null); if (a == null) return true; return Unifill.uCompare(a, b) != 1; } @:op(A >= B) private static function gteq(a:UTF8String, b:UTF8String):Bool { if (a == null) return (b == null); if (b == null) return true; return Unifill.uCompare(a, b) != -1; } @:op(A + B) private static function plus(a:UTF8String, b:UTF8String):UTF8String { if (a == null && b == null) return null; if (a == null) return b; if (b == null) return a; var sb = new StringBuf(); sb.add(Std.string(a)); sb.add(Std.string(b)); return sb.toString(); } @:from static function fromDynamic(value:Dynamic):UTF8String { return Std.string(value); } // Get & Set Methods @:noCompletion private function get_length():Int { return this == null ? 0 : Unifill.uLength(this); } } // generated from org.zamedev.lib.tools.CaseMapsGenerator private class Utf8Ext { public static function fillUpperToLowerMap(map:Map):Void { var i = 0; for (i in 0...26) map[0x41 + i] = 0x61 + i; for (i in 0...23) map[0xC0 + i] = 0xE0 + i; for (i in 0...7) map[0xD8 + i] = 0xF8 + i; while (i < 48) { map[0x100 + i] = 0x101 + i; i += 2; } i = 0; map[0x130] = 0x69; while (i < 6) { map[0x132 + i] = 0x133 + i; i += 2; } i = 0; while (i < 16) { map[0x139 + i] = 0x13A + i; i += 2; } i = 0; while (i < 46) { map[0x14A + i] = 0x14B + i; i += 2; } i = 0; map[0x178] = 0xFF; while (i < 6) { map[0x179 + i] = 0x17A + i; i += 2; } i = 0; map[0x181] = 0x253; while (i < 4) { map[0x182 + i] = 0x183 + i; i += 2; } i = 0; map[0x186] = 0x254; map[0x187] = 0x188; for (i in 0...2) map[0x189 + i] = 0x256 + i; map[0x18B] = 0x18C; map[0x18E] = 0x1DD; map[0x18F] = 0x259; map[0x190] = 0x25B; map[0x191] = 0x192; map[0x193] = 0x260; map[0x194] = 0x263; map[0x196] = 0x269; map[0x197] = 0x268; map[0x198] = 0x199; map[0x19C] = 0x26F; map[0x19D] = 0x272; map[0x19F] = 0x275; while (i < 6) { map[0x1A0 + i] = 0x1A1 + i; i += 2; } i = 0; map[0x1A6] = 0x280; map[0x1A7] = 0x1A8; map[0x1A9] = 0x283; map[0x1AC] = 0x1AD; map[0x1AE] = 0x288; map[0x1AF] = 0x1B0; for (i in 0...2) map[0x1B1 + i] = 0x28A + i; while (i < 4) { map[0x1B3 + i] = 0x1B4 + i; i += 2; } i = 0; map[0x1B7] = 0x292; map[0x1B8] = 0x1B9; map[0x1BC] = 0x1BD; map[0x1C4] = 0x1C6; map[0x1C7] = 0x1C9; map[0x1CA] = 0x1CC; while (i < 16) { map[0x1CD + i] = 0x1CE + i; i += 2; } i = 0; while (i < 18) { map[0x1DE + i] = 0x1DF + i; i += 2; } i = 0; map[0x1F1] = 0x1F3; map[0x1F4] = 0x1F5; map[0x1F6] = 0x195; map[0x1F7] = 0x1BF; while (i < 40) { map[0x1F8 + i] = 0x1F9 + i; i += 2; } i = 0; map[0x220] = 0x19E; while (i < 18) { map[0x222 + i] = 0x223 + i; i += 2; } i = 0; map[0x23A] = 0x2C65; map[0x23B] = 0x23C; map[0x23D] = 0x19A; map[0x23E] = 0x2C66; map[0x241] = 0x242; map[0x243] = 0x180; map[0x244] = 0x289; map[0x245] = 0x28C; while (i < 10) { map[0x246 + i] = 0x247 + i; i += 2; } i = 0; while (i < 4) { map[0x370 + i] = 0x371 + i; i += 2; } i = 0; map[0x376] = 0x377; map[0x37F] = 0x3F3; map[0x386] = 0x3AC; for (i in 0...3) map[0x388 + i] = 0x3AD + i; map[0x38C] = 0x3CC; for (i in 0...2) map[0x38E + i] = 0x3CD + i; for (i in 0...17) map[0x391 + i] = 0x3B1 + i; for (i in 0...9) map[0x3A3 + i] = 0x3C3 + i; map[0x3CF] = 0x3D7; while (i < 24) { map[0x3D8 + i] = 0x3D9 + i; i += 2; } i = 0; map[0x3F4] = 0x3B8; map[0x3F7] = 0x3F8; map[0x3F9] = 0x3F2; map[0x3FA] = 0x3FB; for (i in 0...3) map[0x3FD + i] = 0x37B + i; for (i in 0...16) map[0x400 + i] = 0x450 + i; for (i in 0...32) map[0x410 + i] = 0x430 + i; while (i < 34) { map[0x460 + i] = 0x461 + i; i += 2; } i = 0; while (i < 54) { map[0x48A + i] = 0x48B + i; i += 2; } i = 0; map[0x4C0] = 0x4CF; while (i < 14) { map[0x4C1 + i] = 0x4C2 + i; i += 2; } i = 0; while (i < 96) { map[0x4D0 + i] = 0x4D1 + i; i += 2; } i = 0; for (i in 0...38) map[0x531 + i] = 0x561 + i; for (i in 0...38) map[0x10A0 + i] = 0x2D00 + i; map[0x10C7] = 0x2D27; map[0x10CD] = 0x2D2D; for (i in 0...80) map[0x13A0 + i] = 0xAB70 + i; for (i in 0...6) map[0x13F0 + i] = 0x13F8 + i; while (i < 150) { map[0x1E00 + i] = 0x1E01 + i; i += 2; } i = 0; map[0x1E9E] = 0xDF; while (i < 96) { map[0x1EA0 + i] = 0x1EA1 + i; i += 2; } i = 0; for (i in 0...8) map[0x1F08 + i] = 0x1F00 + i; for (i in 0...6) map[0x1F18 + i] = 0x1F10 + i; for (i in 0...8) map[0x1F28 + i] = 0x1F20 + i; for (i in 0...8) map[0x1F38 + i] = 0x1F30 + i; for (i in 0...6) map[0x1F48 + i] = 0x1F40 + i; while (i < 8) { map[0x1F59 + i] = 0x1F51 + i; i += 2; } i = 0; for (i in 0...8) map[0x1F68 + i] = 0x1F60 + i; for (i in 0...2) map[0x1FB8 + i] = 0x1FB0 + i; for (i in 0...2) map[0x1FBA + i] = 0x1F70 + i; for (i in 0...4) map[0x1FC8 + i] = 0x1F72 + i; for (i in 0...2) map[0x1FD8 + i] = 0x1FD0 + i; for (i in 0...2) map[0x1FDA + i] = 0x1F76 + i; for (i in 0...2) map[0x1FE8 + i] = 0x1FE0 + i; for (i in 0...2) map[0x1FEA + i] = 0x1F7A + i; map[0x1FEC] = 0x1FE5; for (i in 0...2) map[0x1FF8 + i] = 0x1F78 + i; for (i in 0...2) map[0x1FFA + i] = 0x1F7C + i; map[0x2126] = 0x3C9; map[0x212A] = 0x6B; map[0x212B] = 0xE5; map[0x2132] = 0x214E; map[0x2183] = 0x2184; for (i in 0...47) map[0x2C00 + i] = 0x2C30 + i; map[0x2C60] = 0x2C61; map[0x2C62] = 0x26B; map[0x2C63] = 0x1D7D; map[0x2C64] = 0x27D; while (i < 6) { map[0x2C67 + i] = 0x2C68 + i; i += 2; } i = 0; map[0x2C6D] = 0x251; map[0x2C6E] = 0x271; map[0x2C6F] = 0x250; map[0x2C70] = 0x252; map[0x2C72] = 0x2C73; map[0x2C75] = 0x2C76; for (i in 0...2) map[0x2C7E + i] = 0x23F + i; while (i < 100) { map[0x2C80 + i] = 0x2C81 + i; i += 2; } i = 0; while (i < 4) { map[0x2CEB + i] = 0x2CEC + i; i += 2; } i = 0; map[0x2CF2] = 0x2CF3; while (i < 46) { map[0xA640 + i] = 0xA641 + i; i += 2; } i = 0; while (i < 28) { map[0xA680 + i] = 0xA681 + i; i += 2; } i = 0; while (i < 14) { map[0xA722 + i] = 0xA723 + i; i += 2; } i = 0; while (i < 62) { map[0xA732 + i] = 0xA733 + i; i += 2; } i = 0; while (i < 4) { map[0xA779 + i] = 0xA77A + i; i += 2; } i = 0; map[0xA77D] = 0x1D79; while (i < 10) { map[0xA77E + i] = 0xA77F + i; i += 2; } i = 0; map[0xA78B] = 0xA78C; map[0xA78D] = 0x265; while (i < 4) { map[0xA790 + i] = 0xA791 + i; i += 2; } i = 0; while (i < 20) { map[0xA796 + i] = 0xA797 + i; i += 2; } i = 0; map[0xA7AA] = 0x266; map[0xA7AB] = 0x25C; map[0xA7AC] = 0x261; map[0xA7AD] = 0x26C; map[0xA7AE] = 0x26A; map[0xA7B0] = 0x29E; map[0xA7B1] = 0x287; map[0xA7B2] = 0x29D; map[0xA7B3] = 0xAB53; while (i < 4) { map[0xA7B4 + i] = 0xA7B5 + i; i += 2; } i = 0; for (i in 0...26) map[0xFF21 + i] = 0xFF41 + i; for (i in 0...40) map[0x10400 + i] = 0x10428 + i; for (i in 0...36) map[0x104B0 + i] = 0x104D8 + i; for (i in 0...51) map[0x10C80 + i] = 0x10CC0 + i; for (i in 0...32) map[0x118A0 + i] = 0x118C0 + i; for (i in 0...34) map[0x1E900 + i] = 0x1E922 + i; } public static function fillLowerToUpperMap(map:Map):Void { var i = 0; for (i in 0...26) map[0x61 + i] = 0x41 + i; map[0xB5] = 0x39C; for (i in 0...23) map[0xE0 + i] = 0xC0 + i; for (i in 0...7) map[0xF8 + i] = 0xD8 + i; map[0xFF] = 0x178; while (i < 48) { map[0x101 + i] = 0x100 + i; i += 2; } i = 0; map[0x131] = 0x49; while (i < 6) { map[0x133 + i] = 0x132 + i; i += 2; } i = 0; while (i < 16) { map[0x13A + i] = 0x139 + i; i += 2; } i = 0; while (i < 46) { map[0x14B + i] = 0x14A + i; i += 2; } i = 0; while (i < 6) { map[0x17A + i] = 0x179 + i; i += 2; } i = 0; map[0x17F] = 0x53; map[0x180] = 0x243; while (i < 4) { map[0x183 + i] = 0x182 + i; i += 2; } i = 0; map[0x188] = 0x187; map[0x18C] = 0x18B; map[0x192] = 0x191; map[0x195] = 0x1F6; map[0x199] = 0x198; map[0x19A] = 0x23D; map[0x19E] = 0x220; while (i < 6) { map[0x1A1 + i] = 0x1A0 + i; i += 2; } i = 0; map[0x1A8] = 0x1A7; map[0x1AD] = 0x1AC; map[0x1B0] = 0x1AF; while (i < 4) { map[0x1B4 + i] = 0x1B3 + i; i += 2; } i = 0; map[0x1B9] = 0x1B8; map[0x1BD] = 0x1BC; map[0x1BF] = 0x1F7; map[0x1C6] = 0x1C4; map[0x1C9] = 0x1C7; map[0x1CC] = 0x1CA; while (i < 16) { map[0x1CE + i] = 0x1CD + i; i += 2; } i = 0; map[0x1DD] = 0x18E; while (i < 18) { map[0x1DF + i] = 0x1DE + i; i += 2; } i = 0; map[0x1F0] = 0x4A; map[0x1F3] = 0x1F1; map[0x1F5] = 0x1F4; while (i < 40) { map[0x1F9 + i] = 0x1F8 + i; i += 2; } i = 0; while (i < 18) { map[0x223 + i] = 0x222 + i; i += 2; } i = 0; map[0x23C] = 0x23B; for (i in 0...2) map[0x23F + i] = 0x2C7E + i; map[0x242] = 0x241; while (i < 10) { map[0x247 + i] = 0x246 + i; i += 2; } i = 0; map[0x250] = 0x2C6F; map[0x251] = 0x2C6D; map[0x252] = 0x2C70; map[0x253] = 0x181; map[0x254] = 0x186; for (i in 0...2) map[0x256 + i] = 0x189 + i; map[0x259] = 0x18F; map[0x25B] = 0x190; map[0x25C] = 0xA7AB; map[0x260] = 0x193; map[0x261] = 0xA7AC; map[0x263] = 0x194; map[0x265] = 0xA78D; map[0x266] = 0xA7AA; map[0x268] = 0x197; map[0x269] = 0x196; map[0x26A] = 0xA7AE; map[0x26B] = 0x2C62; map[0x26C] = 0xA7AD; map[0x26F] = 0x19C; map[0x271] = 0x2C6E; map[0x272] = 0x19D; map[0x275] = 0x19F; map[0x27D] = 0x2C64; map[0x280] = 0x1A6; map[0x283] = 0x1A9; map[0x287] = 0xA7B1; map[0x288] = 0x1AE; map[0x289] = 0x244; for (i in 0...2) map[0x28A + i] = 0x1B1 + i; map[0x28C] = 0x245; map[0x292] = 0x1B7; map[0x29D] = 0xA7B2; map[0x29E] = 0xA7B0; while (i < 4) { map[0x371 + i] = 0x370 + i; i += 2; } i = 0; map[0x377] = 0x376; for (i in 0...3) map[0x37B + i] = 0x3FD + i; map[0x390] = 0x3AA; map[0x3AC] = 0x386; for (i in 0...3) map[0x3AD + i] = 0x388 + i; map[0x3B0] = 0x3AB; for (i in 0...17) map[0x3B1 + i] = 0x391 + i; map[0x3C2] = 0x3A3; for (i in 0...9) map[0x3C3 + i] = 0x3A3 + i; map[0x3CC] = 0x38C; for (i in 0...2) map[0x3CD + i] = 0x38E + i; map[0x3D0] = 0x392; map[0x3D1] = 0x398; map[0x3D5] = 0x3A6; map[0x3D6] = 0x3A0; map[0x3D7] = 0x3CF; while (i < 24) { map[0x3D9 + i] = 0x3D8 + i; i += 2; } i = 0; map[0x3F0] = 0x39A; map[0x3F1] = 0x3A1; map[0x3F2] = 0x3F9; map[0x3F3] = 0x37F; map[0x3F5] = 0x395; map[0x3F8] = 0x3F7; map[0x3FB] = 0x3FA; for (i in 0...32) map[0x430 + i] = 0x410 + i; for (i in 0...16) map[0x450 + i] = 0x400 + i; while (i < 34) { map[0x461 + i] = 0x460 + i; i += 2; } i = 0; while (i < 54) { map[0x48B + i] = 0x48A + i; i += 2; } i = 0; while (i < 14) { map[0x4C2 + i] = 0x4C1 + i; i += 2; } i = 0; map[0x4CF] = 0x4C0; while (i < 96) { map[0x4D1 + i] = 0x4D0 + i; i += 2; } i = 0; for (i in 0...38) map[0x561 + i] = 0x531 + i; for (i in 0...6) map[0x13F8 + i] = 0x13F0 + i; map[0x1C80] = 0x412; map[0x1C81] = 0x414; map[0x1C82] = 0x41E; for (i in 0...2) map[0x1C83 + i] = 0x421 + i; map[0x1C85] = 0x422; map[0x1C86] = 0x42A; map[0x1C87] = 0x462; map[0x1C88] = 0xA64A; map[0x1D79] = 0xA77D; map[0x1D7D] = 0x2C63; while (i < 150) { map[0x1E01 + i] = 0x1E00 + i; i += 2; } i = 0; map[0x1E96] = 0x48; map[0x1E97] = 0x54; map[0x1E98] = 0x57; map[0x1E99] = 0x59; map[0x1E9B] = 0x1E60; while (i < 96) { map[0x1EA1 + i] = 0x1EA0 + i; i += 2; } i = 0; for (i in 0...8) map[0x1F00 + i] = 0x1F08 + i; for (i in 0...6) map[0x1F10 + i] = 0x1F18 + i; for (i in 0...8) map[0x1F20 + i] = 0x1F28 + i; for (i in 0...8) map[0x1F30 + i] = 0x1F38 + i; for (i in 0...6) map[0x1F40 + i] = 0x1F48 + i; map[0x1F50] = 0x3A5; map[0x1F51] = 0x1F59; map[0x1F52] = 0x3A5; map[0x1F53] = 0x1F5B; map[0x1F54] = 0x3A5; map[0x1F55] = 0x1F5D; map[0x1F56] = 0x3A5; map[0x1F57] = 0x1F5F; for (i in 0...8) map[0x1F60 + i] = 0x1F68 + i; for (i in 0...2) map[0x1F70 + i] = 0x1FBA + i; for (i in 0...4) map[0x1F72 + i] = 0x1FC8 + i; for (i in 0...2) map[0x1F76 + i] = 0x1FDA + i; for (i in 0...2) map[0x1F78 + i] = 0x1FF8 + i; for (i in 0...2) map[0x1F7A + i] = 0x1FEA + i; for (i in 0...2) map[0x1F7C + i] = 0x1FFA + i; for (i in 0...8) map[0x1F80 + i] = 0x1F88 + i; for (i in 0...8) map[0x1F90 + i] = 0x1F98 + i; for (i in 0...8) map[0x1FA0 + i] = 0x1FA8 + i; for (i in 0...3) map[0x1FB0 + i] = 0x1FB8 + i; map[0x1FB3] = 0x1FBC; map[0x1FB4] = 0x386; map[0x1FB6] = 0x391; map[0x1FB7] = 0x391; map[0x1FBE] = 0x399; map[0x1FC2] = 0x1FCA; map[0x1FC3] = 0x1FCC; map[0x1FC4] = 0x389; map[0x1FC6] = 0x397; map[0x1FC7] = 0x397; for (i in 0...2) map[0x1FD0 + i] = 0x1FD8 + i; map[0x1FD2] = 0x3AA; map[0x1FD3] = 0x3AA; map[0x1FD6] = 0x399; map[0x1FD7] = 0x3AA; for (i in 0...2) map[0x1FE0 + i] = 0x1FE8 + i; map[0x1FE2] = 0x3AB; map[0x1FE3] = 0x3AB; map[0x1FE4] = 0x3A1; map[0x1FE5] = 0x1FEC; map[0x1FE6] = 0x3A5; map[0x1FE7] = 0x3AB; map[0x1FF2] = 0x1FFA; map[0x1FF3] = 0x1FFC; map[0x1FF4] = 0x38F; map[0x1FF6] = 0x3A9; map[0x1FF7] = 0x3A9; map[0x214E] = 0x2132; map[0x2184] = 0x2183; for (i in 0...47) map[0x2C30 + i] = 0x2C00 + i; map[0x2C61] = 0x2C60; map[0x2C65] = 0x23A; map[0x2C66] = 0x23E; while (i < 6) { map[0x2C68 + i] = 0x2C67 + i; i += 2; } i = 0; map[0x2C73] = 0x2C72; map[0x2C76] = 0x2C75; while (i < 100) { map[0x2C81 + i] = 0x2C80 + i; i += 2; } i = 0; while (i < 4) { map[0x2CEC + i] = 0x2CEB + i; i += 2; } i = 0; map[0x2CF3] = 0x2CF2; for (i in 0...38) map[0x2D00 + i] = 0x10A0 + i; map[0x2D27] = 0x10C7; map[0x2D2D] = 0x10CD; while (i < 46) { map[0xA641 + i] = 0xA640 + i; i += 2; } i = 0; while (i < 28) { map[0xA681 + i] = 0xA680 + i; i += 2; } i = 0; while (i < 14) { map[0xA723 + i] = 0xA722 + i; i += 2; } i = 0; while (i < 62) { map[0xA733 + i] = 0xA732 + i; i += 2; } i = 0; while (i < 4) { map[0xA77A + i] = 0xA779 + i; i += 2; } i = 0; while (i < 10) { map[0xA77F + i] = 0xA77E + i; i += 2; } i = 0; map[0xA78C] = 0xA78B; while (i < 4) { map[0xA791 + i] = 0xA790 + i; i += 2; } i = 0; while (i < 20) { map[0xA797 + i] = 0xA796 + i; i += 2; } i = 0; while (i < 4) { map[0xA7B5 + i] = 0xA7B4 + i; i += 2; } i = 0; map[0xAB53] = 0xA7B3; for (i in 0...80) map[0xAB70 + i] = 0x13A0 + i; for (i in 0...26) map[0xFF41 + i] = 0xFF21 + i; for (i in 0...40) map[0x10428 + i] = 0x10400 + i; for (i in 0...36) map[0x104D8 + i] = 0x104B0 + i; for (i in 0...51) map[0x10CC0 + i] = 0x10C80 + i; for (i in 0...32) map[0x118C0 + i] = 0x118A0 + i; for (i in 0...34) map[0x1E922 + i] = 0x1E900 + i; } } #else typedef UTF8String = UnicodeString; #end ================================================ FILE: src/lime/text/harfbuzz/HB.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) import lime._internal.backend.native.NativeCFFI; @:access(lime._internal.backend.native.NativeCFFI) class HB { public static function shape(font:HBFont, buffer:HBBuffer, features:Array = null):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_shape(font, buffer, #if hl null #else features #end); #end } } #end ================================================ FILE: src/lime/text/harfbuzz/HBBlob.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; import lime.utils.DataPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract HBBlob(CFFIPointer) from CFFIPointer to CFFIPointer { public static var empty(get, never):HBBlob; public var data(get, never):DataPointer; public var dataWritable(get, never):DataPointer; public var immutable(get, never):Bool; public var length(get, never):Int; public function new(data:DataPointer, length:Int, memoryMode:Int) { #if (lime_cffi && lime_harfbuzz && !macro) this = NativeCFFI.lime_hb_blob_create(data, length, memoryMode); #else this = null; #end } public function createSubBlob(offset:Int, length:Int):HBBlob { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_blob_create_sub_blob(this, offset, length); #else return null; #end } public function makeImmutable():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_blob_make_immutable(this); #end } // Get & Set Methods @:noCompletion private inline function get_data():DataPointer { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_blob_get_data(this); #else return cast 0; #end } @:noCompletion private inline function get_dataWritable():DataPointer { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_blob_get_data_writable(this); #else return cast 0; #end } private static inline function get_empty():HBBlob { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_blob_get_empty(); #else return null; #end } @:noCompletion private inline function get_immutable():Bool { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_blob_is_immutable(this); #else return false; #end } @:noCompletion private inline function get_length():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_blob_get_length(this); #else return 0; #end } } #end ================================================ FILE: src/lime/text/harfbuzz/HBBuffer.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; import lime.utils.Bytes; import lime.utils.DataPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract HBBuffer(CFFIPointer) from CFFIPointer to CFFIPointer { public var allocationSuccessful(get, never):Bool; public var clusterLevel(get, set):HBBufferClusterLevel; public var contentType(get, set):HBBufferContentType; public var direction(get, set):HBDirection; public var flags(get, set):Int; public var language(get, set):HBLanguage; public var length(get, set):Int; public var replacementCodepoint(get, set):Int; public var script(get, set):HBScript; public var segmentProperties(get, set):HBSegmentProperties; public function new() { #if (lime_cffi && lime_harfbuzz && !macro) this = NativeCFFI.lime_hb_buffer_create(); #else this = null; #end } public function add(codepoint:Int, cluster:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_add(this, codepoint, cluster); #end } public function addString(text:String, itemOffset:Int, itemLength:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_add_hxstring(this, text, itemOffset, itemLength); #end } public function addCodepoints(text:DataPointer, textLength:Int, itemOffset:Int, itemLength:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_add_codepoints(this, text, textLength, itemOffset, itemLength); #end } public function addUTF8(text:String, itemOffset:Int, itemLength:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_add_utf8(this, text, itemOffset, itemLength); #end } public function addUTF16(text:DataPointer, textLength:Int, itemOffset:Int, itemLength:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_add_utf16(this, text, textLength, itemOffset, itemLength); #end } public function addUTF32(text:DataPointer, textLength:Int, itemOffset:Int, itemLength:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_add_utf32(this, text, textLength, itemOffset, itemLength); #end } public function clearContents():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_clear_contents(this); #end } public function getGlyphInfo():Array { #if (lime_cffi && lime_harfbuzz && !macro) var bytes = Bytes.alloc(0); bytes = NativeCFFI.lime_hb_buffer_get_glyph_infos(this, bytes); if (bytes == null) { return null; } else { var result = new Array(); var length = bytes.length; var position = 0, info; while (position < length) { info = new HBGlyphInfo(); info.codepoint = bytes.getInt32(position); position += 4; info.mask = bytes.getInt32(position); position += 4; info.cluster = bytes.getInt32(position); position += 4; result.push(info); } return result; } #else return null; #end } public function getGlyphPositions():Array { #if (lime_cffi && lime_harfbuzz && !macro) var bytes = Bytes.alloc(0); bytes = NativeCFFI.lime_hb_buffer_get_glyph_positions(this, bytes); if (bytes == null) { return null; } else { var result = new Array(); var length = bytes.length; var position = 0, glyphPosition; while (position < length) { glyphPosition = new HBGlyphPosition(); glyphPosition.xAdvance = bytes.getInt32(position); position += 4; glyphPosition.yAdvance = bytes.getInt32(position); position += 4; glyphPosition.xOffset = bytes.getInt32(position); position += 4; glyphPosition.yOffset = bytes.getInt32(position); position += 4; result.push(glyphPosition); } return result; } #else return null; #end } public function guessSegmentProperties():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_guess_segment_properties(this); #end } public function normalizeGlyphs():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_normalize_glyphs(this); #end } public function preallocate(size:Int):Bool { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_preallocate(this, size); #else return false; #end } public function reset():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_reset(this); #end } public function reverse():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_reverse(this); #end } public function reverseClusters():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_reverse_clusters(this); #end } // Get & Set Methods @:noCompletion private inline function get_allocationSuccessful():Bool { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_allocation_successful(this); #else return false; #end } @:noCompletion private inline function get_clusterLevel():HBBufferClusterLevel { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_get_cluster_level(this); #else return 0; #end } @:noCompletion private inline function set_clusterLevel(value:HBBufferClusterLevel):HBBufferClusterLevel { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_set_cluster_level(this, value); #end return value; } @:noCompletion private inline function get_contentType():HBBufferContentType { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_get_content_type(this); #else return 0; #end } @:noCompletion private inline function set_contentType(value:HBBufferContentType):HBBufferContentType { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_set_content_type(this, value); #end return value; } @:noCompletion private inline function get_direction():HBDirection { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_get_direction(this); #else return 0; #end } @:noCompletion private inline function set_direction(value:HBDirection):HBDirection { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_set_direction(this, value); #end return value; } private static inline function get_empty():HBBuffer { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_get_empty(); #else return null; #end } @:noCompletion private inline function get_flags():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_get_flags(this); #else return 0; #end } @:noCompletion private inline function set_flags(value:Int):Int { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_set_flags(this, value); #end return value; } @:noCompletion private inline function get_language():HBLanguage { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_get_language(this); #else return null; #end } @:noCompletion private inline function set_language(value:HBLanguage):HBLanguage { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_set_language(this, value); #end return value; } @:noCompletion private inline function get_length():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_get_length(this); #else return 0; #end } @:noCompletion private inline function set_length(value:Int):Int { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_set_length(this, value); #end return value; } @:noCompletion private inline function get_replacementCodepoint():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_get_replacement_codepoint(this); #else return 0; #end } @:noCompletion private inline function set_replacementCodepoint(value:Int):Int { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_set_replacement_codepoint(this, value); #end return value; } @:noCompletion private inline function get_script():HBScript { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_buffer_get_script(this); #else return cast 0; #end } @:noCompletion private inline function set_script(value:HBScript):HBScript { #if (lime_cffi && lime_harfbuzz && !macro) #if neko value = -1; #end NativeCFFI.lime_hb_buffer_set_script(this, value); #end return value; } @:noCompletion private inline function get_segmentProperties():HBSegmentProperties { #if (lime_cffi && lime_harfbuzz && !macro) return null; // return NativeCFFI.lime_hb_buffer_get_segment_properties (this); #else return null; #end } @:noCompletion private inline function set_segmentProperties(value:HBSegmentProperties):HBSegmentProperties { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_buffer_set_segment_properties(this, value); #end return value; } } #end ================================================ FILE: src/lime/text/harfbuzz/HBBufferClusterLevel.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract HBBufferClusterLevel(Int) from Int to Int { public var MONOTONE_GRAPHEMES = 0; public var MONOTONE_CHARACTERS = 1; public var CHARACTERS = 2; public var DEFAULT = 0; } #end ================================================ FILE: src/lime/text/harfbuzz/HBBufferContentType.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract HBBufferContentType(Int) from Int to Int { public var INVALID = 0; public var UNICODE = 1; public var GLYPHS = 2; } #end ================================================ FILE: src/lime/text/harfbuzz/HBBufferFlags.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract HBBufferFlags(Int) from Int to Int { public var DEFAULT = 0x00000000; public var BOT = 0x00000001; public var EOT = 0x00000002; public var PRESERVE_DEFAULT_IGNORABLES = 0x00000004; } #end ================================================ FILE: src/lime/text/harfbuzz/HBBufferSerializeFlags.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract HBBufferSerializeFlags(Int) from Int to Int { public var DEFAULT = 0x00000000; public var NO_CLUSTERS = 0x00000001; public var NO_POSITIONS = 0x00000002; public var NO_GLYPH_NAMES = 0x00000004; } #end ================================================ FILE: src/lime/text/harfbuzz/HBBufferSerializeFormat.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract HBBufferSerializeFormat(Int) from Int to Int { // public var HB_BUFFER_SERIALIZE_FORMAT_TEXT = HB_TAG('T', 'E', 'X', 'T'); // public var JSON = HB_TAG('J', 'S', 'O', 'N'); // public var INVALID = HB_TAG_NONE; // public static inline function fromString (str:String):HBBufferSerializeFormat { // // // // } } // @:cffi private static function lime_hb_buffer_serialize_format_from_string (str:String, len:Int):Int; // @:cffi private static function lime_hb_buffer_serialize_format_to_string (format:Int):CFFIPointer; // @:cffi private static function lime_hb_buffer_serialize_list_formats ():CFFIPointer; #end ================================================ FILE: src/lime/text/harfbuzz/HBDirection.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract HBDirection(Int) from Int to Int { public var INVALID = 0; public var LTR = 4; public var RTL = 5; public var TTB = 6; public var BTT = 7; } #end ================================================ FILE: src/lime/text/harfbuzz/HBFTFont.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; import lime.text.Font; @:forward @:access(lime._internal.backend.native.NativeCFFI) abstract HBFTFont(HBFont) to HBFont from CFFIPointer to CFFIPointer { public var loadFlags(get, set):Int; public function new(font:Font) { if (font.src != null) { #if (lime_cffi && lime_harfbuzz && !macro) // this = NativeCFFI.lime_hb_ft_font_create (font.src); this = NativeCFFI.lime_hb_ft_font_create_referenced(font.src); #else this = null; #end } else { this = null; } } // Get & Set Methods @:noCompletion private inline function get_loadFlags():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_ft_font_get_load_flags(this); #else return 0; #end } @:noCompletion private inline function set_loadFlags(value:Int):Int { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_ft_font_set_load_flags(this, value); #end return value; } } #end ================================================ FILE: src/lime/text/harfbuzz/HBFace.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFIPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract HBFace(CFFIPointer) from CFFIPointer to CFFIPointer { public static var empty(get, never):HBFace; public var glyphCount(get, set):Int; public var immutable(get, never):Bool; public var index(get, set):Int; public var upem(get, set):Int; public function new(blob:HBBlob, index:Int) { #if (lime_cffi && lime_harfbuzz && !macro) this = NativeCFFI.lime_hb_face_create(blob, index); #else this = null; #end } // Get & Set Methods private static inline function get_empty():HBFace { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_face_get_empty(); #else return null; #end } @:noCompletion private inline function get_glyphCount():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_face_get_glyph_count(this); #else return 0; #end } @:noCompletion private inline function set_glyphCount(value:Int):Int { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_face_set_glyph_count(this, value); #end return value; } @:noCompletion private inline function get_immutable():Bool { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_face_is_immutable(this); #else return false; #end } @:noCompletion private inline function get_index():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_face_get_index(this); #else return 0; #end } @:noCompletion private inline function set_index(value:Int):Int { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_face_set_index(this, value); #end return value; } @:noCompletion private inline function get_upem():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_face_get_upem(this); #else return 0; #end } @:noCompletion private inline function set_upem(value:Int):Int { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_face_set_upem(this, value); #end return value; } } #end ================================================ FILE: src/lime/text/harfbuzz/HBFeature.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) class HBFeature { public function new() {} } // @:cffi private static function lime_hb_feature_from_string (str:String):CFFIPointer; // @:cffi private static function lime_hb_feature_to_string (feature:CFFIPointer):CFFIPointer; #end ================================================ FILE: src/lime/text/harfbuzz/HBFont.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) import lime._internal.backend.native.NativeCFFI; import lime.math.Vector2; import lime.system.CFFI; import lime.system.CFFIPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract HBFont(CFFIPointer) from CFFIPointer to CFFIPointer { public static var empty(get, never):HBFont; public var face(get, never):HBFace; public var immutable(get, never):Bool; public var parent(get, never):HBFont; public var ppem(get, set):Vector2; public var scale(get, set):Vector2; public function new(face:HBFace) { #if (lime_cffi && lime_harfbuzz && !macro) this = NativeCFFI.lime_hb_font_create(face); #else this = null; #end } public function addGlyphOriginForDirection(glyph:Int, direction:HBDirection, x:Int, y:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_font_add_glyph_origin_for_direction(this, glyph, direction, x, y); #end } public function createSubFont():HBFont { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_create_sub_font(this); #else return null; #end } public function getGlyphAdvanceForDirection(glyph:Int, direction:HBDirection):Vector2 { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_get_glyph_advance_for_direction(this, glyph, direction #if hl, new Vector2() #end); #else return null; #end } public function getGlyphKerningForDirection(glyph:Int, firstGlyph:Int, secondGlyph:Int, direction:HBDirection):Vector2 { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_get_glyph_kerning_for_direction(this, firstGlyph, secondGlyph, direction #if hl, new Vector2() #end); #else return null; #end } public function getGlyphOriginForDirection(glyph:Int, direction:HBDirection):Vector2 { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_get_glyph_origin_for_direction(this, glyph, direction #if hl, new Vector2() #end); #else return null; #end } public function glyphFromString(s:String):Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_glyph_from_string(this, s); #else return 0; #end } public function glyphToString(codepoint:Int):String { #if (lime_cffi && lime_harfbuzz && !macro) var result = NativeCFFI.lime_hb_font_glyph_to_string(this, codepoint); return CFFI.stringValue(result); #else return null; #end } public function makeImmutable():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_font_make_immutable(this); #end } public function subtractGlyphOriginForDirection(glyph:Int, direction:HBDirection, x:Int, y:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_font_subtract_glyph_origin_for_direction(this, glyph, direction, x, y); #end } // Get & Set Methods private static inline function get_empty():HBFont { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_get_empty(); #else return null; #end } @:noCompletion private inline function get_face():HBFace { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_get_face(this); #else return null; #end } @:noCompletion private inline function get_immutable():Bool { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_is_immutable(this); #else return false; #end } @:noCompletion private inline function get_parent():HBFont { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_get_parent(this); #else return null; #end } @:noCompletion private inline function get_ppem():Vector2 { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_get_ppem(this #if hl, new Vector2() #end); #else return null; #end } @:noCompletion private inline function set_ppem(value:Vector2):Vector2 { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_font_set_ppem(this, Std.int(value.x), Std.int(value.y)); #end return value; } @:noCompletion private inline function get_scale():Vector2 { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_font_get_scale(this #if hl, new Vector2() #end); #else return null; #end } @:noCompletion private inline function set_scale(value:Vector2):Vector2 { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_font_set_scale(this, Std.int(value.x), Std.int(value.y)); #end return value; } } #end ================================================ FILE: src/lime/text/harfbuzz/HBGlyphExtents.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) class HBGlyphExtents { public function new() {} } #end ================================================ FILE: src/lime/text/harfbuzz/HBGlyphInfo.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) class HBGlyphInfo { public var codepoint:Int; public var mask:Int; public var cluster:Int; public function new() {} } #end ================================================ FILE: src/lime/text/harfbuzz/HBGlyphPosition.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) class HBGlyphPosition { public var xAdvance:Int; public var xOffset:Int; public var yAdvance:Int; public var yOffset:Int; public function new() {} } #end ================================================ FILE: src/lime/text/harfbuzz/HBLanguage.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) import lime._internal.backend.native.NativeCFFI; import lime.system.CFFI; import lime.system.CFFIPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract HBLanguage(CFFIPointer) from CFFIPointer to CFFIPointer { public function new(language:String = null) { #if (lime_cffi && lime_harfbuzz && !macro) if (language != null) { this = NativeCFFI.lime_hb_language_from_string(language); } else { this = NativeCFFI.lime_hb_language_get_default(); } #else this = null; #end } public function toString():String { #if (lime_cffi && lime_harfbuzz && !macro) if (this != null) { var result = NativeCFFI.lime_hb_language_to_string(this); return CFFI.stringValue(result); } #end return null; } @:from private static function fromString(value:String):HBLanguage { return new HBLanguage(value); } } #end ================================================ FILE: src/lime/text/harfbuzz/HBMemoryMode.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract HBMemoryMode(Int) from Int to Int { public var DUPLICATE = 0; public var READONLY = 1; public var WRITABLE = 2; public var READONLY_MAY_MAKE_WRITABLE = 3; } #end ================================================ FILE: src/lime/text/harfbuzz/HBScript.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract HBScript(Int) from Int to Int { public var COMMON = "Z".code << 24 | "y".code << 16 | "y".code << 8 | "y".code; public var INHERITED = "Z".code << 24 | "i".code << 16 | "n".code << 8 | "h".code; public var UNKNOWN = "Z".code << 24 | "z".code << 16 | "z".code << 8 | "z".code; public var ARABIC = "A".code << 24 | "r".code << 16 | "a".code << 8 | "b".code; public var ARMENIAN = "A".code << 24 | "r".code << 16 | "m".code << 8 | "n".code; public var BENGALI = "B".code << 24 | "e".code << 16 | "n".code << 8 | "g".code; public var CYRILLIC = "C".code << 24 | "y".code << 16 | "r".code << 8 | "l".code; public var DEVANAGARI = "D".code << 24 | "e".code << 16 | "v".code << 8 | "a".code; public var GEORGIAN = "G".code << 24 | "e".code << 16 | "o".code << 8 | "r".code; public var GREEK = "G".code << 24 | "r".code << 16 | "e".code << 8 | "k".code; public var GUJARATI = "G".code << 24 | "u".code << 16 | "j".code << 8 | "r".code; public var GURMUKHI = "G".code << 24 | "u".code << 16 | "r".code << 8 | "u".code; public var HANGUL = "H".code << 24 | "a".code << 16 | "n".code << 8 | "g".code; public var HAN = "H".code << 24 | "a".code << 16 | "n".code << 8 | "i".code; public var HEBREW = "H".code << 24 | "e".code << 16 | "b".code << 8 | "r".code; public var HIRAGANA = "H".code << 24 | "i".code << 16 | "r".code << 8 | "a".code; public var KANNADA = "K".code << 24 | "n".code << 16 | "d".code << 8 | "a".code; public var KATAKANA = "K".code << 24 | "a".code << 16 | "n".code << 8 | "a".code; public var LAO = "L".code << 24 | "a".code << 16 | "o".code << 8 | "o".code; public var LATIN = "L".code << 24 | "a".code << 16 | "t".code << 8 | "n".code; public var MALAYALAM = "M".code << 24 | "l".code << 16 | "y".code << 8 | "m".code; public var ORIYA = "O".code << 24 | "r".code << 16 | "y".code << 8 | "a".code; public var TAMIL = "T".code << 24 | "a".code << 16 | "m".code << 8 | "l".code; public var TELUGU = "T".code << 24 | "e".code << 16 | "l".code << 8 | "u".code; public var THAI = "T".code << 24 | "h".code << 16 | "a".code << 8 | "i".code; public var TIBETAN = "T".code << 24 | "i".code << 16 | "b".code << 8 | "t".code; public var BOPOMOFO = "B".code << 24 | "o".code << 16 | "p".code << 8 | "o".code; public var BRAILLE = "B".code << 24 | "r".code << 16 | "a".code << 8 | "i".code; public var CANADIAN_SYLLABICS = "C".code << 24 | "a".code << 16 | "n".code << 8 | "s".code; public var CHEROKEE = "C".code << 24 | "h".code << 16 | "e".code << 8 | "r".code; public var ETHIOPIC = "E".code << 24 | "t".code << 16 | "h".code << 8 | "i".code; public var KHMER = "K".code << 24 | "h".code << 16 | "m".code << 8 | "r".code; public var MONGOLIAN = "M".code << 24 | "o".code << 16 | "n".code << 8 | "g".code; public var MYANMAR = "M".code << 24 | "y".code << 16 | "m".code << 8 | "r".code; public var OGHAM = "O".code << 24 | "g".code << 16 | "a".code << 8 | "m".code; public var RUNIC = "R".code << 24 | "u".code << 16 | "n".code << 8 | "r".code; public var SINHALA = "S".code << 24 | "i".code << 16 | "n".code << 8 | "h".code; public var SYRIAC = "S".code << 24 | "y".code << 16 | "r".code << 8 | "c".code; public var THAANA = "T".code << 24 | "h".code << 16 | "a".code << 8 | "a".code; public var YI = "Y".code << 24 | "i".code << 16 | "i".code << 8 | "i".code; public var DESERET = "D".code << 24 | "s".code << 16 | "r".code << 8 | "t".code; public var GOTHIC = "G".code << 24 | "o".code << 16 | "t".code << 8 | "h".code; public var OLD_ITALIC = "I".code << 24 | "t".code << 16 | "a".code << 8 | "l".code; public var BUHID = "B".code << 24 | "u".code << 16 | "h".code << 8 | "d".code; public var HANUNOO = "H".code << 24 | "a".code << 16 | "n".code << 8 | "o".code; public var TAGALOG = "T".code << 24 | "g".code << 16 | "l".code << 8 | "g".code; public var TAGBANWA = "T".code << 24 | "a".code << 16 | "g".code << 8 | "b".code; public var CYPRIOT = "C".code << 24 | "p".code << 16 | "r".code << 8 | "t".code; public var LIMBU = "L".code << 24 | "i".code << 16 | "m".code << 8 | "b".code; public var LINEAR_B = "L".code << 24 | "i".code << 16 | "n".code << 8 | "b".code; public var OSMANYA = "O".code << 24 | "s".code << 16 | "m".code << 8 | "a".code; public var SHAVIAN = "S".code << 24 | "h".code << 16 | "a".code << 8 | "w".code; public var TAI_LE = "T".code << 24 | "a".code << 16 | "l".code << 8 | "e".code; public var UGARITIC = "U".code << 24 | "g".code << 16 | "a".code << 8 | "r".code; public var BUGINESE = "B".code << 24 | "u".code << 16 | "g".code << 8 | "i".code; public var COPTIC = "C".code << 24 | "o".code << 16 | "p".code << 8 | "t".code; public var GLAGOLITIC = "G".code << 24 | "l".code << 16 | "a".code << 8 | "g".code; public var KHAROSHTHI = "K".code << 24 | "h".code << 16 | "a".code << 8 | "r".code; public var NEW_TAI_LUE = "T".code << 24 | "a".code << 16 | "l".code << 8 | "u".code; public var OLD_PERSIAN = "X".code << 24 | "p".code << 16 | "e".code << 8 | "o".code; public var SYLOTI_NAGRI = "S".code << 24 | "y".code << 16 | "l".code << 8 | "o".code; public var TIFINAGH = "T".code << 24 | "f".code << 16 | "n".code << 8 | "g".code; public var BALINESE = "B".code << 24 | "a".code << 16 | "l".code << 8 | "i".code; public var CUNEIFORM = "X".code << 24 | "s".code << 16 | "u".code << 8 | "x".code; public var NKO = "N".code << 24 | "k".code << 16 | "o".code << 8 | "o".code; public var PHAGS_PA = "P".code << 24 | "h".code << 16 | "a".code << 8 | "g".code; public var PHOENICIAN = "P".code << 24 | "h".code << 16 | "n".code << 8 | "x".code; public var CARIAN = "C".code << 24 | "a".code << 16 | "r".code << 8 | "i".code; public var CHAM = "C".code << 24 | "h".code << 16 | "a".code << 8 | "m".code; public var KAYAH_LI = "K".code << 24 | "a".code << 16 | "l".code << 8 | "i".code; public var LEPCHA = "L".code << 24 | "e".code << 16 | "p".code << 8 | "c".code; public var LYCIAN = "L".code << 24 | "y".code << 16 | "c".code << 8 | "i".code; public var LYDIAN = "L".code << 24 | "y".code << 16 | "d".code << 8 | "i".code; public var OL_CHIKI = "O".code << 24 | "l".code << 16 | "c".code << 8 | "k".code; public var REJANG = "R".code << 24 | "j".code << 16 | "n".code << 8 | "g".code; public var SAURASHTRA = "S".code << 24 | "a".code << 16 | "u".code << 8 | "r".code; public var SUNDANESE = "S".code << 24 | "u".code << 16 | "n".code << 8 | "d".code; public var VAI = "V".code << 24 | "a".code << 16 | "i".code << 8 | "i".code; public var AVESTAN = "A".code << 24 | "v".code << 16 | "s".code << 8 | "t".code; public var BAMUM = "B".code << 24 | "a".code << 16 | "m".code << 8 | "u".code; public var EGYPTIAN_HIEROGLYPHS = "E".code << 24 | "g".code << 16 | "y".code << 8 | "p".code; public var IMPERIAL_ARAMAIC = "A".code << 24 | "r".code << 16 | "m".code << 8 | "i".code; public var INSCRIPTIONAL_PAHLAVI = "P".code << 24 | "h".code << 16 | "l".code << 8 | "i".code; public var INSCRIPTIONAL_PARTHIAN = "P".code << 24 | "r".code << 16 | "t".code << 8 | "i".code; public var JAVANESE = "J".code << 24 | "a".code << 16 | "v".code << 8 | "a".code; public var KAITHI = "K".code << 24 | "t".code << 16 | "h".code << 8 | "i".code; public var LISU = "L".code << 24 | "i".code << 16 | "s".code << 8 | "u".code; public var MEETEI_MAYEK = "M".code << 24 | "t".code << 16 | "e".code << 8 | "i".code; public var OLD_SOUTH_ARABIAN = "S".code << 24 | "a".code << 16 | "r".code << 8 | "b".code; public var OLD_TURKIC = "O".code << 24 | "r".code << 16 | "k".code << 8 | "h".code; public var SAMARITAN = "S".code << 24 | "a".code << 16 | "m".code << 8 | "r".code; public var TAI_THAM = "L".code << 24 | "a".code << 16 | "n".code << 8 | "a".code; public var TAI_VIET = "T".code << 24 | "a".code << 16 | "v".code << 8 | "t".code; public var BATAK = "B".code << 24 | "a".code << 16 | "t".code << 8 | "k".code; public var BRAHMI = "B".code << 24 | "r".code << 16 | "a".code << 8 | "h".code; public var MANDAIC = "M".code << 24 | "a".code << 16 | "n".code << 8 | "d".code; public var CHAKMA = "C".code << 24 | "a".code << 16 | "k".code << 8 | "m".code; public var MEROITIC_CURSIVE = "M".code << 24 | "e".code << 16 | "r".code << 8 | "c".code; public var MEROITIC_HIEROGLYPHS = "M".code << 24 | "e".code << 16 | "r".code << 8 | "o".code; public var MIAO = "P".code << 24 | "l".code << 16 | "r".code << 8 | "d".code; public var SHARADA = "S".code << 24 | "h".code << 16 | "r".code << 8 | "d".code; public var SORA_SOMPENG = "S".code << 24 | "o".code << 16 | "r".code << 8 | "a".code; public var TAKRI = "T".code << 24 | "a".code << 16 | "k".code << 8 | "r".code; public var BASSA_VAH = "B".code << 24 | "a".code << 16 | "s".code << 8 | "s".code; public var CAUCASIAN_ALBANIAN = "A".code << 24 | "g".code << 16 | "h".code << 8 | "b".code; public var DUPLOYAN = "D".code << 24 | "u".code << 16 | "p".code << 8 | "l".code; public var ELBASAN = "E".code << 24 | "l".code << 16 | "b".code << 8 | "a".code; public var GRANTHA = "G".code << 24 | "r".code << 16 | "a".code << 8 | "n".code; public var KHOJKI = "K".code << 24 | "h".code << 16 | "o".code << 8 | "j".code; public var KHUDAWADI = "S".code << 24 | "i".code << 16 | "n".code << 8 | "d".code; public var LINEAR_A = "L".code << 24 | "i".code << 16 | "n".code << 8 | "a".code; public var MAHAJANI = "M".code << 24 | "a".code << 16 | "h".code << 8 | "j".code; public var MANICHAEAN = "M".code << 24 | "a".code << 16 | "n".code << 8 | "i".code; public var MENDE_KIKAKUI = "M".code << 24 | "e".code << 16 | "n".code << 8 | "d".code; public var MODI = "M".code << 24 | "o".code << 16 | "d".code << 8 | "i".code; public var MRO = "M".code << 24 | "r".code << 16 | "o".code << 8 | "o".code; public var NABATAEAN = "N".code << 24 | "b".code << 16 | "a".code << 8 | "t".code; public var OLD_NORTH_ARABIAN = "N".code << 24 | "a".code << 16 | "r".code << 8 | "b".code; public var OLD_PERMIC = "P".code << 24 | "e".code << 16 | "r".code << 8 | "m".code; public var PAHAWH_HMONG = "H".code << 24 | "m".code << 16 | "n".code << 8 | "g".code; public var PALMYRENE = "P".code << 24 | "a".code << 16 | "l".code << 8 | "m".code; public var PAU_CIN_HAU = "P".code << 24 | "a".code << 16 | "u".code << 8 | "c".code; public var PSALTER_PAHLAVI = "P".code << 24 | "h".code << 16 | "l".code << 8 | "p".code; public var SIDDHAM = "S".code << 24 | "i".code << 16 | "d".code << 8 | "d".code; public var TIRHUTA = "T".code << 24 | "i".code << 16 | "r".code << 8 | "h".code; public var WARANG_CITI = "W".code << 24 | "a".code << 16 | "r".code << 8 | "a".code; public var AHOM = "A".code << 24 | "h".code << 16 | "o".code << 8 | "m".code; public var ANATOLIAN_HIEROGLYPHS = "H".code << 24 | "l".code << 16 | "u".code << 8 | "w".code; public var HATRAN = "H".code << 24 | "a".code << 16 | "t".code << 8 | "r".code; public var MULTANI = "M".code << 24 | "u".code << 16 | "l".code << 8 | "t".code; public var OLD_HUNGARIAN = "H".code << 24 | "u".code << 16 | "n".code << 8 | "g".code; public var SIGNWRITING = "S".code << 24 | "g".code << 16 | "n".code << 8 | "w".code; public var ADLAM = "A".code << 24 | "d".code << 16 | "l".code << 8 | "m".code; public var BHAIKSUKI = "B".code << 24 | "h".code << 16 | "k".code << 8 | "s".code; public var MARCHEN = "M".code << 24 | "a".code << 16 | "r".code << 8 | "c".code; public var OSAGE = "O".code << 24 | "s".code << 16 | "g".code << 8 | "e".code; public var TANGUT = "T".code << 24 | "a".code << 16 | "n".code << 8 | "g".code; public var NEWA = "N".code << 24 | "e".code << 16 | "w".code << 8 | "a".code; public var MASARAM_GONDI = "G".code << 24 | "o".code << 16 | "n".code << 8 | "m".code; public var NUSHU = "N".code << 24 | "s".code << 16 | "h".code << 8 | "u".code; public var SOYOMBO = "S".code << 24 | "o".code << 16 | "y".code << 8 | "o".code; public var ZANABAZAR_SQUARE = "Z".code << 24 | "a".code << 16 | "n".code << 8 | "b".code; public var DOGRA = "D".code << 24 | "o".code << 16 | "g".code << 8 | "r".code; public var GUNJALA_GONDI = "G".code << 24 | "o".code << 16 | "n".code << 8 | "g".code; public var HANIFI_ROHINGYA = "R".code << 24 | "o".code << 16 | "h".code << 8 | "g".code; public var MAKASAR = "M".code << 24 | "a".code << 16 | "k".code << 8 | "a".code; public var MEDEFAIDRIN = "M".code << 24 | "e".code << 16 | "d".code << 8 | "f".code; public var OLD_SOGDIAN = "S".code << 24 | "o".code << 16 | "g".code << 8 | "o".code; public var SOGDIAN = "S".code << 24 | "o".code << 16 | "g".code << 8 | "d".code; public var INVALID = 0; } #end ================================================ FILE: src/lime/text/harfbuzz/HBSegmentProperties.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) class HBSegmentProperties { public function new() {} // @:cffi private static function lime_hb_segment_properties_equal (a:CFFIPointer, b:CFFIPointer):Bool; // @:cffi private static function lime_hb_segment_properties_hash (p:CFFIPointer):Int; } #end ================================================ FILE: src/lime/text/harfbuzz/HBSet.hx ================================================ package lime.text.harfbuzz; #if (!lime_doc_gen || lime_harfbuzz) import lime._internal.backend.native.NativeCFFI; import lime.math.Vector2; import lime.system.CFFIPointer; @:access(lime._internal.backend.native.NativeCFFI) abstract HBSet(CFFIPointer) from CFFIPointer to CFFIPointer { public static var empty(get, never):HBSet; public var allocationSuccessful(get, never):Bool; public var isEmpty(get, never):Bool; public var max(get, never):Int; public var min(get, never):Int; public var population(get, never):Int; public function new() { #if (lime_cffi && lime_harfbuzz && !macro) this = NativeCFFI.lime_hb_set_create(); #else this = null; #end } public function add(codepoint:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_add(this, codepoint); #end } public function addRange(first:Int, last:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_add_range(this, first, last); #end } public function clear():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_clear(this); #end } public function del(codepoint:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_del(this, codepoint); #end } public function delRange(first:Int, last:Int):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_del_range(this, first, last); #end } public function has(codepoint:Int):Bool { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_has(this, codepoint); #else return false; #end } public function intersect(other:HBSet):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_intersect(this, other); #end } public function invert():Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_invert(this); #end } public function isEqual(other:HBSet):Bool { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_is_equal(this, other); #else return false; #end } public function next():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_next(this); #else return 0; #end } public function nextRange():Vector2 { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_next_range(this #if hl, new Vector2() #end); #else return null; #end } public function set(other:HBSet):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_set(this, other); #end } public function subtract(other:HBSet):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_subtract(this, other); #end } public function symmetricDifference(other:HBSet):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_symmetric_difference(this, other); #end } public function union(other:HBSet):Void { #if (lime_cffi && lime_harfbuzz && !macro) NativeCFFI.lime_hb_set_union(this, other); #end } // Get & Set Methods @:noCompletion private inline function get_allocationSuccessful():Bool { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_allocation_successful(this); #else return false; #end } private static inline function get_empty():HBSet { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_get_empty(); #else return null; #end } @:noCompletion private inline function get_isEmpty():Bool { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_is_empty(this); #else return false; #end } @:noCompletion private inline function get_max():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_get_max(this); #else return 0; #end } @:noCompletion private inline function get_min():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_get_min(this); #else return 0; #end } @:noCompletion private inline function get_population():Int { #if (lime_cffi && lime_harfbuzz && !macro) return NativeCFFI.lime_hb_set_get_population(this); #else return 0; #end } } #end ================================================ FILE: src/lime/tools/AIRHelper.hx ================================================ package lime.tools; import hxp.*; import sys.FileSystem; class AIRHelper { public static function build(project:HXProject, workingDirectory:String, targetPlatform:Platform, targetPath:String, applicationXML:String, files:Array, fileDirectory:String = null):String { // var airTarget = "air"; // var extension = ".air"; var airTarget = "bundle"; var extension = ""; switch (targetPlatform) { case MAC: if (airTarget == "bundle") { extension = ".app"; } case IOS: if (project.targetFlags.exists("simulator")) { if (project.debug) { airTarget = "ipa-debug-interpreter-simulator"; } else { airTarget = "ipa-test-interpreter-simulator"; } } else { var supportedExportMethods = ["adhoc", "appstore"]; var exportMethod:String = null; for (m in supportedExportMethods) { if (project.targetFlags.exists(m)) { if (exportMethod != null) { Log.error("Must not specify multiple export methods. Found: " + exportMethod + " and " + m); } exportMethod = m; } } if (exportMethod == null && project.targetFlags.exists("final")) { exportMethod = "appstore"; } if (project.debug) { if (exportMethod != null) { Log.error("Must not specify export method for a debug build. Found: " + exportMethod); } airTarget = "ipa-debug"; } else { switch (exportMethod) { case "appstore": airTarget = "ipa-app-store"; case "adhoc": airTarget = "ipa-ad-hoc"; default: airTarget = "ipa-test"; } } } // extension = ".ipa"; case ANDROID: if (project.debug) { airTarget = "apk-debug"; } else { airTarget = "apk"; } // extension = ".apk"; default: } var signingOptions:Array = []; if (project.keystore != null) { var keystoreType = project.keystore.type != null ? project.keystore.type : "pkcs12"; signingOptions.push("-storetype"); signingOptions.push(keystoreType); if (project.keystore.path != null) { var keystore = Path.tryFullPath(project.keystore.path); signingOptions.push("-keystore"); signingOptions.push(keystore); } if (project.keystore.alias != null) { signingOptions.push("-alias"); signingOptions.push(project.keystore.alias); } if (project.keystore.password != null) { signingOptions.push("-storepass"); signingOptions.push(project.keystore.password); } if (project.keystore.aliasPassword != null) { signingOptions.push("-keypass"); signingOptions.push(project.keystore.aliasPassword); } } else { signingOptions.push("-storetype"); signingOptions.push("pkcs12"); signingOptions.push("-keystore"); signingOptions.push(System.findTemplate(project.templatePaths, "air/debug.pfx")); signingOptions.push("-storepass"); signingOptions.push("samplePassword"); } if (project.config.exists("air.tsa")) { signingOptions.push("-tsa"); signingOptions.push(project.config.getString("air.tsa")); } var args = ["-package"]; // TODO: Is this an old workaround fixed in newer AIR SDK? if (airTarget == "air" || airTarget == "bundle") { args = args.concat(signingOptions); args.push("-target"); args.push(airTarget); } else { args.push("-target"); args.push(airTarget); if (project.debug) { if (project.config.exists("air.connect")) { args.push("-connect"); args.push(project.config.getString("air.connect")); } else if (project.config.exists("air.listen")) { args.push("-listen"); args.push(project.config.getString("air.listen")); } else { args.push("-connect"); } } args = args.concat(signingOptions); } if (targetPlatform == IOS) { var provisioningProfile = IOSHelper.getProvisioningFile(project); if (provisioningProfile != "") { args.push("-provisioning-profile"); args.push(provisioningProfile); } } args = args.concat([targetPath + extension, applicationXML]); if (targetPlatform == IOS && System.hostPlatform == MAC && project.targetFlags.exists("simulator")) { args.push("-platformsdk"); args.push(IOSHelper.getSDKDirectory(project)); } if (fileDirectory != null && fileDirectory != "") { args.push("-C"); args.push(fileDirectory); } args = args.concat(files); var extDirs:Array = getExtDirs(project); if (extDirs.length > 0) { args.push("-extdir"); for (extDir in extDirs) { args.push(extDir); } } if (targetPlatform == ANDROID) { Sys.putEnv("AIR_NOANDROIDFLAIR", "true"); } if (targetPlatform == IOS && System.hostPlatform == MAC) { var simulatorName = XCodeHelper.getSimulatorName(project); if (simulatorName == null) { Log.warn("Skipping AIR_IOS_SIMULATOR_DEVICE environment variable because default simulator not found"); } else { Sys.putEnv("AIR_IOS_SIMULATOR_DEVICE", simulatorName); } } System.runCommand(workingDirectory, project.defines.get("AIR_SDK") + "/bin/adt", args); return targetPath + extension; } public static function getExtDirs(project:HXProject):Array { var extDirs:Array = []; for (dependency in project.dependencies) { var extDir:String = FileSystem.fullPath(Path.directory(dependency.path)); if (StringTools.endsWith(dependency.path, ".ane") && extDirs.indexOf(extDir) == -1) { extDirs.push(extDir); } } return extDirs; } public static function run(project:HXProject, workingDirectory:String, targetPlatform:Platform, applicationXML:String, rootDirectory:String = null):Void { var runInAdl = true; if (targetPlatform == ANDROID && !project.targetFlags.exists("air-simulator")) { runInAdl = false; AndroidHelper.initialize(project); AndroidHelper.install(project, FileSystem.fullPath(workingDirectory) + "/" + (rootDirectory != null ? rootDirectory + "/" : "") + project.app.file + ".apk"); AndroidHelper.run(project.meta.packageName + "/.AppEntry"); } else if (targetPlatform == IOS && !project.targetFlags.exists("air-simulator")) { runInAdl = false; var args = ["-platform", "ios"]; if (project.targetFlags.exists("simulator")) { args.push("-device"); args.push("ios-simulator"); args.push("-platformsdk"); args.push(IOSHelper.getSDKDirectory(project)); System.runCommand("", "killall", ["iPhone Simulator"], true, true); } System.runCommand(workingDirectory, project.defines.get("AIR_SDK") + "/bin/adt", ["-uninstallApp"].concat(args).concat(["-appid", project.meta.packageName]), true, true); System.runCommand(workingDirectory, project.defines.get("AIR_SDK") + "/bin/adt", ["-installApp"].concat(args).concat(["-package", FileSystem.fullPath(workingDirectory) + "/" + (rootDirectory != null ? rootDirectory + "/" : "") + project.app.file + ".ipa"])); System.runCommand(workingDirectory, project.defines.get("AIR_SDK") + "/bin/adt", ["-launchApp"].concat(args).concat(["-appid", project.meta.packageName]), true, true); if (project.targetFlags.exists("simulator")) { var simulatorAppPath:String = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/"; if (!FileSystem.exists(simulatorAppPath)) { simulatorAppPath = "/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/"; } System.runCommand("", "open", [simulatorAppPath]); } } if (runInAdl) { var extDirs:Array = getExtDirs(project); var profile:String; if (project.config.exists("air.profile")) { profile = project.config.getString("air.profile"); } else if (targetPlatform == ANDROID) { profile = "mobileDevice"; } else if (targetPlatform == IOS) { profile = "mobileDevice"; } else { profile = extDirs.length > 0 ? "extendedDesktop" : "desktop"; } var args = ["-profile", profile]; if (targetPlatform == ANDROID || targetPlatform == IOS) { args.push("-XscreenDPI"); if (project.config.exists("air.screenDPI")) { var screenDPI = project.config.getString("air.screenDPI"); args.push(screenDPI); } else { args.push("252"); } args.push("-screensize"); if (project.config.exists("air.screensize")) { var screensize = project.config.getString("air.screensize"); args.push(screensize); } else { // these are just generic default dimensions that are a bit // larger than AIR's defaults for the simulator args.push("480x762:480x800"); } } if (targetPlatform == ANDROID) { args.push("-XversionPlatform"); args.push("AND"); } else if (targetPlatform == IOS) { args.push("-XversionPlatform"); args.push("IOS"); } if (!project.debug) { args.push("-nodebug"); } if (extDirs.length > 0) { args.push("-extdir"); for (extDir in extDirs) { if (!FileSystem.exists(extDir + "/adl")) { Log.error("Create " + extDir + "/adl directory, and extract your ANE files to .ane directories."); } args.push(extDir + "/adl"); } } args.push(applicationXML); if (rootDirectory != null && rootDirectory != "") { args.push(rootDirectory); } System.runCommand(workingDirectory, project.defines.get("AIR_SDK") + "/bin/adl", args); } } public static function trace(project:HXProject, workingDirectory:String, targetPlatform:Platform, applicationXML:String, rootDirectory:String = null) { if (targetPlatform == ANDROID && !project.targetFlags.exists("air-simulator")) { AndroidHelper.initialize(project); var deviceID:String = null; var adbFilter:String = null; // if (!Log.verbose) { if (project.debug) { adbFilter = project.meta.packageName + ":I ActivityManager:I *:S"; } else { adbFilter = project.meta.packageName + ":I *:S"; } // } AndroidHelper.trace(project, project.debug, deviceID, adbFilter); } } public static function uninstall(project:HXProject, workingDirectory:String, targetPlatform:Platform, applicationXML:String, rootDirectory:String = null) { if (targetPlatform == ANDROID) { AndroidHelper.initialize(project); var deviceID:String = null; AndroidHelper.uninstall(project.meta.packageName, deviceID); } } } ================================================ FILE: src/lime/tools/AndroidHelper.hx ================================================ package lime.tools; import hxp.*; import sys.io.File; import sys.FileSystem; class AndroidHelper { private static var adbName:String; private static var adbPath:String; private static var emulatorName:String; private static var emulatorPath:String; public static function build(project:HXProject, projectDirectory:String):Void { if (project.environment.exists("ANDROID_SDK")) { Sys.putEnv("ANDROID_SDK", project.environment.get("ANDROID_SDK")); } var task = "assembleDebug"; if (project.keystore != null) { task = "assembleRelease"; } if (project.environment.exists("ANDROID_GRADLE_TASK")) { task = project.environment.get("ANDROID_GRADLE_TASK"); } var args = task.split(" "); // args.push ("--stacktrace"); // args.push ("--debug"); if (Log.verbose) { args.push("--info"); } if (System.hostPlatform != WINDOWS) { System.runCommand("", "chmod", ["755", Path.combine(projectDirectory, "gradlew")]); System.runCommand(projectDirectory, "./gradlew", args); } else { System.runCommand(projectDirectory, "gradlew", args); } } private static function connect(deviceID:String):Void { if (deviceID != null && deviceID != "" && deviceID.indexOf("emulator") == -1) { if (deviceID.indexOf(":") > 0) { deviceID = deviceID.substr(0, deviceID.indexOf(":")); } System.runCommand(adbPath, adbName, ["connect", deviceID]); } } public static function getBuildToolsVersion(project:HXProject):String { var buildToolsPath = Path.combine(project.environment.get("ANDROID_SDK"), "build-tools/"); var version = ~/^(\d+)\.(\d+)\.(\d+)$/i; var current = {major: 0, minor: 0, micro: 0}; if (!FileSystem.exists(buildToolsPath)) { Log.error("Cannot find directory \"" + buildToolsPath + "\""); } for (buildTool in FileSystem.readDirectory(buildToolsPath)) { // gradle only likes simple version numbers (x.y.z) if (!version.match(buildTool)) { continue; } var newVersion = { major: Std.parseInt(version.matched(1)), minor: Std.parseInt(version.matched(2)), micro: Std.parseInt(version.matched(3)) }; if (newVersion.major != current.major) { if (newVersion.major > current.major) { current = newVersion; } } else if (newVersion.minor != current.minor) { if (newVersion.minor > current.minor) { current = newVersion; } } else { if (newVersion.micro > current.micro) { current = newVersion; } } } return '${current.major}.${current.minor}.${current.micro}'; } public static function getDeviceSDKVersion(deviceID:String):Int { var devices = listDevices(); if (devices.length > 0) { var tempFile = System.getTemporaryFile(); var args = ["wait-for-device", "shell", "getprop", "ro.build.version.sdk", ">", tempFile]; if (deviceID != null && deviceID != "") { args.unshift(deviceID); args.unshift("-s"); // connect (deviceID); } if (System.hostPlatform == MAC) { System.runCommand(adbPath, "perl", ["-e", 'alarm shift @ARGV; exec @ARGV', "3", adbName].concat(args), true, true); } else { System.runCommand(adbPath, adbName, args, true, true); } if (FileSystem.exists(tempFile)) { var output = File.getContent(tempFile); FileSystem.deleteFile(tempFile); return Std.parseInt(output); } } return 0; } public static function initialize(project:HXProject):Void { adbPath = project.environment.get("ANDROID_SDK") + "/platform-tools/"; emulatorPath = project.environment.get("ANDROID_SDK") + "/emulator/"; adbName = "adb"; emulatorName = "emulator"; if (System.hostPlatform == WINDOWS) { adbName += ".exe"; emulatorName += ".exe"; } if (!FileSystem.exists(adbPath + adbName)) { // in older SDKs, adb was located in /tools/ adbPath = project.environment.get("ANDROID_SDK") + "/tools/"; } if (!FileSystem.exists(emulatorPath + emulatorName)) { // in older SDKs, emulator was located in /tools/ emulatorPath = project.environment.get("ANDROID_SDK") + "/tools/"; } if (System.hostPlatform != WINDOWS) { adbName = "./" + adbName; emulatorName = "./" + emulatorName; } if (project.environment.exists("JAVA_HOME")) { var javaHome = project.environment.get("JAVA_HOME"); if (!FileSystem.exists(javaHome)) { Log.error("The path specified for JAVA_HOME does not exist: " + javaHome); Sys.exit(1); } if (!FileSystem.isDirectory(javaHome)) { Log.error("The path specified for JAVA_HOME must be a directory: " + javaHome); Sys.exit(1); } Sys.putEnv("JAVA_HOME", project.environment.get("JAVA_HOME")); } } public static function install(project:HXProject, targetPath:String, deviceID:String = null):String { if (!FileSystem.exists(adbPath + adbName)) { Log.error("adb not found in Android SDK: " + project.environment.get("ANDROID_SDK")); } if (project.targetFlags.exists("emulator") || project.targetFlags.exists("simulator")) { if (!FileSystem.exists(emulatorPath + emulatorName)) { Log.error("emulator not found in Android SDK: " + project.environment.get("ANDROID_SDK")); } Log.info("", "Searching for Android emulator"); var devices = listDevices(); for (device in devices) { if (device.indexOf("emulator") > -1) { deviceID = device; } } // TODO: Check emulator capabilities, if it is GPU enabled and if API LEVEL >15 (http://developer.android.com/tools/devices/emulator.html) if (deviceID == null) { var avds = listAVDs(); if (avds.length == 0) { Log.error("Cannot find emulator, please use AVD manager to create one"); } Log.info("Starting AVD: " + avds[0]); System.runProcess(emulatorPath, emulatorName, ["-avd", avds[0], "-gpu", "on"], false); while (deviceID == null) { devices = listDevices(); for (device in devices) { if (device.indexOf("emulator") > -1) { deviceID = device; } } if (deviceID == null) { Sys.sleep(3); if (!Log.verbose) { Sys.print("."); } } else { Sys.println(""); } } } System.runCommand(adbPath, adbName, ["-s", deviceID, "shell", "input", "keyevent", "82"]); } var args = ["install", "-r"]; // if (getDeviceSDKVersion (deviceID) > 16) { args.push("-d"); // } args.push(targetPath); if (deviceID != null && deviceID != "") { args.unshift(deviceID); args.unshift("-s"); connect(deviceID); } System.runCommand(adbPath, adbName, args); return deviceID; } public static function listAVDs():Array { var avds = new Array(); var output = System.runProcess(emulatorPath, emulatorName, ["-list-avds"]); if (output != null && output != "") { // -list-avds returns only the avd names, separated by line breaks for (line in output.split("\n")) { avds.push(StringTools.trim(line)); } } return avds; } public static function listDevices():Array { var devices = new Array(); var output = ""; if (System.hostPlatform != WINDOWS) { /* * using System.runProcess on *NIX platforms for `adb devices` usually * hangs when adb also starts the server. * To avoid this, we start the server beforehand */ System.runCommand(adbPath, adbName, ["start-server"], true); } output = System.runProcess(adbPath, adbName, ["devices"], true, true); if (output != null && output != "") { for (line in output.split("\n")) { if (line.indexOf("device") > -1 && line.indexOf("attached") == -1) { devices.push(StringTools.trim(line.substr(0, line.indexOf("device")))); } } } return devices; } public static function run(activityName:String, deviceID:String = null):Void { var args = ["shell", "am", "start", "-a", "android.intent.action.MAIN", "-n", activityName]; if (deviceID != null && deviceID != "") { args.unshift(deviceID); args.unshift("-s"); connect(deviceID); } System.runCommand(adbPath, adbName, args); } public static function trace(project:HXProject, debug:Bool, deviceID:String = null, customFilter:String = null):Void { if (!FileSystem.exists(adbPath + adbName)) { Log.error("adb not found in Android SDK: " + project.environment.get("ANDROID_SDK")); } // Use -DFULL_LOGCAT or if you do not want to filter log messages var args = ["logcat"]; if (deviceID != null && deviceID != "") { args.unshift(deviceID); args.unshift("-s"); connect(deviceID); } if (customFilter != null) { System.runCommand(adbPath, adbName, args.concat([customFilter])); } else if (project.environment.exists("FULL_LOGCAT") || Log.verbose) { System.runCommand(adbPath, adbName, args.concat(["-c"])); System.runCommand(adbPath, adbName, args); } else if (debug) { var filter = "*:E"; var includeTags = [ "lime", "Lime", "Main", "GameActivity", "SDLActivity", "GLThread", "trace", "Haxe" ]; for (tag in includeTags) { filter += " " + tag + ":D"; } Sys.println(filter); System.runCommand(adbPath, adbName, args.concat([filter])); } else { System.runCommand(adbPath, adbName, args.concat(["*:S trace:I"])); } } public static function uninstall(packageName:String, deviceID:String = null):Void { if (!FileSystem.exists(adbPath + adbName)) { Log.error("adb not found in Android SDK"); } var args = ["uninstall", packageName]; if (deviceID != null && deviceID != "") { args.unshift(deviceID); args.unshift("-s"); connect(deviceID); } System.runCommand(adbPath, adbName, args); } } ================================================ FILE: src/lime/tools/ApplicationData.hx ================================================ package lime.tools; @:forward abstract ApplicationData({ @:optional var file:String; @:optional var init:String; @:optional var main:String; @:optional var path:String; @:optional var preloader:String; @:optional var swfVersion:Float; @:optional var url:String; }) from Dynamic { @:noCompletion public static var expectedFields:ApplicationData = { file: "", init: "", main: "", path: "", preloader: "", swfVersion: 0.0, url: "" }; } ================================================ FILE: src/lime/tools/Architecture.hx ================================================ package lime.tools; enum Architecture { ARMV5; ARMV6; ARMV7; ARMV7S; ARM64; X86; X64; MIPS; MIPSEL; } ================================================ FILE: src/lime/tools/Asset.hx ================================================ package lime.tools; import hxp.*; import lime.tools.AssetType; import sys.FileSystem; @:access(lime.tools.AssetHelper) class Asset { public var data:Dynamic; public var embed:Null; public var encoding:AssetEncoding; public var flatName:String; public var format:String; public var glyphs:String; public var id:String; public var library:String; // public var path:String; // public var rename:String; public var resourceName:String; public var sourcePath:String; public var targetPath:String; public var type:AssetType; public function new(path:String = "", rename:String = "", type:AssetType = null, embed:Null = null, setDefaults:Bool = true) { if (!setDefaults) return; this.embed = embed; sourcePath = Path.standardize(path); if (rename == "") { targetPath = path; } else { targetPath = rename; } id = targetPath; resourceName = targetPath; flatName = StringTools.getFlatName(targetPath); format = Path.extension(path).toLowerCase(); glyphs = "32-255"; if (type == null) { var extension = Path.extension(path); if (extension != null) extension = extension.toLowerCase(); if (AssetHelper.knownExtensions.exists(extension)) { this.type = AssetHelper.knownExtensions.get(extension); } else { switch (extension) { case "bundle": this.type = AssetType.MANIFEST; case "ogg", "m4a": if (FileSystem.exists(path)) { var stat = FileSystem.stat(path); // if (stat.size > 1024 * 128) { if (stat.size > 1024 * 1024) { this.type = AssetType.MUSIC; } else { this.type = AssetType.SOUND; } } else { this.type = AssetType.SOUND; } default: if (path != "" && System.isText(path)) { this.type = AssetType.TEXT; } else { this.type = AssetType.BINARY; } } } } else { this.type = type; } } public function clone():Asset { var asset = new Asset("", "", null, null, false); asset.data = data; asset.embed = embed; asset.encoding = encoding; asset.flatName = flatName; asset.format = format; asset.glyphs = glyphs; asset.id = id; asset.library = library; asset.resourceName = resourceName; asset.sourcePath = sourcePath; asset.targetPath = targetPath; asset.type = type; // ObjectTools.copyFields (this, asset); return asset; } } ================================================ FILE: src/lime/tools/AssetEncoding.hx ================================================ package lime.tools; enum AssetEncoding { NONE; BASE64; } ================================================ FILE: src/lime/tools/AssetHelper.hx ================================================ package lime.tools; #if lime import haxe.io.Bytes as HaxeBytes; import haxe.Serializer; import haxe.Unserializer; import hxp.*; import lime._internal.format.Base64; import lime.tools.AssetType; import lime.tools.Asset; import lime.tools.HXProject; import lime.tools.Library; import lime.utils.AssetManifest; import lime.utils.Bytes; import sys.io.File; import sys.io.FileOutput; import sys.FileSystem; class AssetHelper { private static var DEFAULT_LIBRARY_NAME = "default"; private static var knownExtensions:Map; private static function __init__():Void { knownExtensions = [ "jpg" => IMAGE, "jpeg" => IMAGE, "png" => IMAGE, "gif" => IMAGE, "webp" => IMAGE, "bmp" => IMAGE, "tiff" => IMAGE, "jfif" => IMAGE, "otf" => FONT, "ttf" => FONT, "wav" => SOUND, "wave" => SOUND, "mp3" => MUSIC, "mp2" => MUSIC, "exe" => BINARY, "bin" => BINARY, "so" => BINARY, "pch" => BINARY, "dll" => BINARY, "zip" => BINARY, "tar" => BINARY, "gz" => BINARY, "fla" => BINARY, "swf" => BINARY, "atf" => BINARY, "psd" => BINARY, "awd" => BINARY, "txt" => TEXT, "text" => TEXT, "xml" => TEXT, "java" => TEXT, "hx" => TEXT, "cpp" => TEXT, "c" => TEXT, "h" => TEXT, "cs" => TEXT, "js" => TEXT, "mm" => TEXT, "hxml" => TEXT, "html" => TEXT, "json" => TEXT, "css" => TEXT, "gpe" => TEXT, "pbxproj" => TEXT, "plist" => TEXT, "properties" => TEXT, "ini" => TEXT, "hxproj" => TEXT, "nmml" => TEXT, "lime" => TEXT, "svg" => TEXT, ]; } public static function copyAsset(asset:Asset, destination:String, context:Dynamic = null) { if (asset.sourcePath != "") { System.copyFile(asset.sourcePath, destination, context, asset.type == TEMPLATE); } else { try { if (asset.encoding == AssetEncoding.BASE64) { File.saveBytes(destination, Base64.decode(asset.data)); } else if ((asset.data is HaxeBytes)) { File.saveBytes(destination, cast asset.data); } else { File.saveContent(destination, Std.string(asset.data)); } } catch (e:Dynamic) { Log.error("Cannot write to file \"" + destination + "\""); } } } public static function copyAssetIfNewer(asset:Asset, destination:String) { if (asset.sourcePath != "") { if (System.isNewer(asset.sourcePath, destination)) { System.copyFile(asset.sourcePath, destination, null, asset.type == TEMPLATE); } } else { System.mkdir(Path.directory(destination)); Log.info("", " - \x1b[1mWriting file:\x1b[0m " + destination); try { if (asset.encoding == AssetEncoding.BASE64) { File.saveBytes(destination, Base64.decode(asset.data)); } else if ((asset.data is HaxeBytes)) { File.saveBytes(destination, cast asset.data); } else { File.saveContent(destination, Std.string(asset.data)); } } catch (e:Dynamic) { Log.error("Cannot write to file \"" + destination + "\""); } } } public static function createManifest(project:HXProject, library:String = null, targetPath:String = null):AssetManifest { var manifest = new AssetManifest(); var pathGroups = new Map>(); var libraries = new Map(); if (library == null) library = DEFAULT_LIBRARY_NAME; for (lib in project.libraries) { libraries[lib.name] = lib; } var assetData:Dynamic; for (asset in project.assets) { assetData = getAssetData(project, pathGroups, libraries, library, asset); if (assetData != null) { manifest.assets.push(assetData); } } if (targetPath != null) { System.mkdir(Path.directory(targetPath)); Log.info("", " - \x1b[1mWriting asset manifest:\x1b[0m " + targetPath); File.saveContent(targetPath, manifest.serialize()); } return manifest; } public static function createManifests(project:HXProject, targetDirectory:String = null):Array { var libraryNames = new Map(); var hasManifest = new Map(); for (asset in project.assets) { if (asset.library != null && !libraryNames.exists(asset.library)) { libraryNames[asset.library] = true; } if (asset.type == MANIFEST) { hasManifest.set(asset.library != null ? asset.library : DEFAULT_LIBRARY_NAME, true); } } var manifest:AssetManifest = null; var manifests:Array = []; if (!hasManifest.exists(DEFAULT_LIBRARY_NAME)) { manifest = createManifest(project); manifest.name = DEFAULT_LIBRARY_NAME; manifests.push(manifest); } for (library in libraryNames.keys()) { if (!hasManifest.exists(library)) { manifest = createManifest(project, library); manifest.name = library; manifests.push(manifest); } } if (targetDirectory != null) { System.mkdir(targetDirectory); var targetPath:String; for (manifest in manifests) { targetPath = Path.combine(targetDirectory, manifest.name + ".json"); Log.info("", " - \x1b[1mWriting asset manifest:\x1b[0m " + targetPath); File.saveContent(targetPath, manifest.serialize()); } } return manifests; } private static function getAssetData(project:HXProject, pathGroups:Map>, libraries:Map, library:String, asset:Asset):Dynamic { if ((asset.library != null && asset.library != library) || asset.type == TEMPLATE) return null; if (asset.library == null && library != DEFAULT_LIBRARY_NAME) return null; var size = 100; if (FileSystem.exists(asset.sourcePath)) { size = FileSystem.stat(asset.sourcePath).size; } var assetData:Dynamic = { id: asset.id, size: size, type: Std.string(asset.type) }; if (project.target == FLASH || project.target == AIR) { if (asset.embed != false || asset.type == FONT) { assetData.className = "__ASSET__" + asset.flatName; } else { assetData.path = asset.resourceName; } if (asset.embed == false && asset.library != null && libraries.exists(asset.library)) { assetData.preload = libraries[asset.library].preload; } } else if (project.target == HTML5) { if (asset.type == FONT) { assetData.className = "__ASSET__" + asset.flatName; assetData.preload = true; } else { assetData.path = asset.resourceName; if (asset.embed != false || (asset.library != null && libraries.exists(asset.library) && libraries[asset.library].preload)) { assetData.preload = true; } if (asset.type == MUSIC || asset.type == SOUND) { var soundName = Path.withoutExtension(assetData.path); if (!pathGroups.exists(soundName)) { pathGroups.set(soundName, [assetData.path]); } else { pathGroups[soundName].push(assetData.path); Reflect.deleteField(assetData, "preload"); } Reflect.deleteField(assetData, "path"); assetData.pathGroup = pathGroups[soundName]; } } } else { if (project.target == WEB_ASSEMBLY && (asset.embed != false || (asset.library != null && libraries.exists(asset.library) && libraries[asset.library].preload))) { assetData.preload = true; } if (asset.embed == true || asset.type == FONT) { assetData.className = "__ASSET__" + asset.flatName; } else { assetData.path = asset.resourceName; } } return assetData; } private static function getPackedAssetData(project:HXProject, output:FileOutput, pathGroups:Map>, libraries:Map, library:Library, asset:Asset):Dynamic { if (project.target == HTML5 && (asset.type == MUSIC || asset.type == SOUND || asset.type == FONT)) { return getAssetData(project, pathGroups, libraries, library.name, asset); } if (asset.type == TEMPLATE) return null; if (asset.library == library.name || (asset.library == null && library.name == DEFAULT_LIBRARY_NAME)) { if (output.tell() == 0) { // write some dummy text at the start of the packed asset file just to prevent // the file from beginning with a packed file header. output.writeString("lime-asset-pack"); } var assetData:Dynamic = { id: asset.id, size: 0, type: Std.string(asset.type), position: output.tell() }; if (project.target == HTML5 && asset.type == FONT) { assetData.className = "__ASSET__" + asset.flatName; assetData.preload = true; } else { switch (library.type) { case "deflate", "zip": if (asset.data != null) { var bytes:Bytes = asset.data; bytes = bytes.compress(DEFLATE); output.writeBytes(bytes, 0, bytes.length); } else if (asset.sourcePath != null) { var tempBytes:Bytes = File.getBytes(asset.sourcePath); tempBytes = tempBytes.compress(DEFLATE); output.writeBytes(tempBytes, 0, tempBytes.length); } case "gzip": if (asset.data != null) { var bytes:Bytes = asset.data; bytes = bytes.compress(GZIP); output.writeBytes(bytes, 0, asset.data.length); } else if (asset.sourcePath != null) { var tempBytes:Bytes = File.getBytes(asset.sourcePath); tempBytes = tempBytes.compress(GZIP); output.writeBytes(tempBytes, 0, tempBytes.length); } default: if (asset.data != null) { output.writeBytes(asset.data, 0, asset.data.length); } else if (asset.sourcePath != null) { var input = File.read(asset.sourcePath, true); output.writeInput(input); input.close(); } } } if (project.target == HTML5 && asset.type == IMAGE) { assetData.preload = true; } var position = output.tell(); assetData.length = position - assetData.position; asset.library = library.name; // asset.sourcePath = ""; if (project.target != HTML5 || asset.type != FONT) { asset.targetPath = null; } asset.data = null; return assetData; } else { return null; } } private static function isPackedLibrary(project:HXProject, library:Library) { if (project.target == FLASH && library.embed != false) return false; return switch (library.type) { case "pak", "pack", "gzip", "zip", "deflate": true; default: false; } } public static function processLibraries(project:HXProject, targetDirectory:String = null):Void { var hasManifest = new Map(); var libraryMap = new Map(); for (library in project.libraries) { libraryMap[library.name] = true; } var library:Library; for (asset in project.assets) { if (asset.library != null && asset.library != DEFAULT_LIBRARY_NAME && !libraryMap.exists(asset.library)) { library = new Library(null, asset.library); project.libraries.push(library); libraryMap[asset.library] = true; } if (asset.type == MANIFEST) { hasManifest.set(asset.library != null ? asset.library : DEFAULT_LIBRARY_NAME, true); } } if (project.assets.length > 0 && !libraryMap.exists(DEFAULT_LIBRARY_NAME)) { library = new Library(null, DEFAULT_LIBRARY_NAME); project.libraries.push(library); } var handlers = new Array(); var hasPackedLibraries = false; var type:String; for (library in project.libraries) { type = library.type; if (library.sourcePath != null || type != null) { if (type == null) { type = Path.extension(library.sourcePath).toLowerCase(); } if (project.libraryHandlers.exists(type)) { var handler = project.libraryHandlers.get(type); handlers.remove(handler); handlers.push(handler); library.type = type; } else if (isPackedLibrary(project, library)) { hasPackedLibraries = true; } } } if (handlers.length > 0) { var projectData = Serializer.run(project); var temporaryFile = System.getTemporaryFile(); File.saveContent(temporaryFile, projectData); for (handler in handlers) { var outputFile = System.getTemporaryFile(); var args = ["run", handler, "process", temporaryFile, outputFile]; if (Log.verbose) { args.push("-verbose"); } if (targetDirectory != null) { args.push("--targetDirectory=" + Path.tryFullPath(targetDirectory)); } try { Haxelib.runCommand("", args, false); } catch (e:Dynamic) { var types:Array = []; for (library in project.libraries) { if (library.type != null && project.libraryHandlers.exists(library.type) && project.libraryHandlers.get(library.type) == handler) { types.push(library.type); } } Log.error("Could not process asset libraries (" + types.join(", ") + ")"); } if (FileSystem.exists(outputFile)) { try { var output = File.getContent(outputFile); var data:HXProject = Unserializer.run(output); project.merge(data); } catch (e:Dynamic) { Log.error(e); } try { FileSystem.deleteFile(outputFile); } catch (e:Dynamic) {} } } try { FileSystem.deleteFile(temporaryFile); } catch (e:Dynamic) {} } if (hasPackedLibraries) { processPackedLibraries(project, targetDirectory); } if (project.assets.length == 0) { project.haxedefs.set("disable_preloader_assets", "1"); } var manifest:AssetManifest; var embed:Bool; var asset:Asset; for (library in project.libraries) { if (library.type == null || (project.target == FLASH && library.embed != false && ["pak", "pack", "gzip", "zip", "deflate"].indexOf(library.type) > -1)) { if (library.name == DEFAULT_LIBRARY_NAME) { library.preload = true; } if (!hasManifest.exists(library.name)) { manifest = createManifest(project, library.name != DEFAULT_LIBRARY_NAME ? library.name : null); embed = false; if (manifest.assets.length == 0 || (project.target == HTML5 && library.name == DEFAULT_LIBRARY_NAME)) { embed = true; } else { // TODO: Make this assumption elsewhere? var allEmbedded = true; for (childAsset in manifest.assets) { if (!Reflect.hasField(childAsset, "className") || childAsset.className == null) { allEmbedded = false; break; } } if (allEmbedded) embed = true; } asset = new Asset("", "manifest/" + library.name + ".json", AssetType.MANIFEST); if (embed) { asset.embed = true; } else { asset.embed = false; manifest.rootPath = "../"; } asset.library = library.name; asset.data = manifest.serialize(); project.assets.push(asset); } } } } public static function processPackedLibraries(project:HXProject, targetDirectory:String = null):Void { var type:String; var cacheAvailable:Bool; var cacheDirectory:String; var filename:String; var output, manifest, position, assetData:Dynamic, input; var embeddedLibrary = false; var pathGroups = new Map>(); var libraries = new Map(); for (lib in project.libraries) { libraries[lib.name] = lib; } for (library in project.libraries) { type = library.type; if (isPackedLibrary(project, library)) { // TODO #if !nodejs if (type == "zip") type = "deflate"; // TODO: Support library.embed=true by embedding all the assets instead of packing cacheAvailable = false; cacheDirectory = null; if (targetDirectory != null) { manifest = new AssetManifest(); cacheDirectory = targetDirectory + "/obj/libraries/"; filename = library.name + ".pak"; // TODO: Support caching System.mkdir(cacheDirectory); if (FileSystem.exists(cacheDirectory + filename)) { FileSystem.deleteFile(cacheDirectory + filename); } output = File.write(cacheDirectory + filename, true); position = 0; try { var assetData:Dynamic; for (asset in project.assets) { assetData = getPackedAssetData(project, output, pathGroups, libraries, library, asset); if (assetData != null) { manifest.assets.push(assetData); } } } catch (e:Dynamic) { output.close(); FileSystem.deleteFile(cacheDirectory + filename); #if neko neko.Lib.rethrow(e); #end } output.close(); var libraryAsset = new Asset(cacheDirectory + filename, "lib/" + filename, AssetType.BINARY); libraryAsset.library = library.name; project.assets.push(libraryAsset); var data = new Asset("", "manifest/" + library.name + ".json", AssetType.MANIFEST); data.library = library.name; manifest.libraryType = "lime.utils.PackedAssetLibrary"; manifest.libraryArgs = ["lib/" + filename, type]; // manifest.rootPath = "../"; data.data = manifest.serialize(); data.embed = true; project.assets.push(data); embeddedLibrary = true; } if (library.name == DEFAULT_LIBRARY_NAME) { library.preload = true; } #end } } if (embeddedLibrary) { project.haxeflags.push("lime.utils.PackedAssetLibrary"); } } } #end ================================================ FILE: src/lime/tools/AssetType.hx ================================================ package lime.tools; enum AssetType { BINARY; BUNDLE; FONT; IMAGE; MANIFEST; MOVIE_CLIP; MUSIC; SOUND; TEMPLATE; TEXT; } ================================================ FILE: src/lime/tools/CLICommand.hx ================================================ package lime.tools; // "Command-Line Interface Command" class CLICommand { public var command:String; public var args:Array; public function new(command:String, args:Array = null) { this.command = command; this.args = args != null ? args : new Array(); } } ================================================ FILE: src/lime/tools/CLIHelper.hx ================================================ package lime.tools; import haxe.io.Eof; import hxp.*; class CLIHelper { public static function ask(question:String, options:Array = null):Answer { if (options == null) { options = ["y", "n", "a"]; } while (true) { Log.print(Log.accentColor + question + "\x1b[0m \x1b[3;37m[" + options.join("/") + "]\x1b[0m ? "); try { switch (readLine()) { case "n": return NO; case "y": return YES; case "a": return ALWAYS; case _ => x if (options.indexOf(x) > -1): return CUSTOM(x); } } catch (e:Dynamic) { Sys.exit(0); } } return null; } public static inline function getChar():Int { return Sys.getChar(false); } public static function param(name:String, passwd:Bool = false):String { Log.print(name + ": "); if (passwd) { var s = new StringBuf(); var c:Int; while ((c = getChar()) != 13) s.addChar(c); Log.print(""); Log.println(""); return s.toString(); } try { return readLine(); } catch (e:Eof) { return ""; } } public static function progress(prefix:String, now:Int, total:Int):Void { var percent = Math.floor((now / total) * 100); Log.print('\r$prefix $now/$total ($percent%)'); } public static inline function readLine():String { return Sys.stdin().readLine(); } } enum Answer { YES; NO; ALWAYS; CUSTOM(answer:String); } ================================================ FILE: src/lime/tools/CPPHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.HXProject; import lime.tools.Platform; import sys.io.File; import sys.FileSystem; class CPPHelper { private static var rebuiltLibraries = new Map(); private static var rebuiltPaths = new Map(); public static function compile(project:HXProject, path:String, flags:Array = null, buildFile:String = "Build.xml"):Void { if (project.config.getBool("cpp.requireBuild", true)) { var args = ["run", project.config.getString("cpp.buildLibrary", "hxcpp"), buildFile]; var foundOptions = false; try { var options = Path.combine(path, "Options.txt"); if (FileSystem.exists(options)) { args.push("-options"); args.push(Path.tryFullPath(options)); // var list; // var input = File.read (options, false); // var text = input.readLine (); // if (StringTools.startsWith (text, " -D")) { // list = text.split (" "); // } else { // list = [ "-D" + StringTools.trim (text) ]; // while (!input.eof ()) { // list.push ("-D" + StringTools.trim (input.readLine ())); // } // list.pop (); // } // for (option in list) { // if (option != "" && !StringTools.startsWith (option, "-Dno_compilation") && !StringTools.startsWith (option, "-Dno-compilation")) { // args.push (option); // } // } foundOptions = true; } } catch (e:Dynamic) {} if (flags != null) { args = args.concat(flags); } if (!foundOptions) { for (key in project.haxedefs.keys()) { var value = project.haxedefs.get(key); if (value == null || value == "") { args.push("-D" + key); } else { args.push("-D" + key + "=" + value); } } } if (project.debug) { args.push("-debug"); } if (Log.verbose) { args.push("-verbose"); } if (!Log.enableColor) { // args.push ("-nocolor"); Sys.putEnv("HXCPP_NO_COLOR", ""); } if (System.hostPlatform == WINDOWS && !project.environment.exists("HXCPP_COMPILE_THREADS")) { var threads = 1; if (System.processorCores > 1) { threads = System.processorCores - 1; } Sys.putEnv("HXCPP_COMPILE_THREADS", Std.string(threads)); } Sys.putEnv("HXCPP_EXIT_ON_ERROR", ""); var code = Haxelib.runCommand(path, args); if (code != 0) { Sys.exit(code); } } } public static function rebuild(project:HXProject, commands:Array>, path:String = null, buildFile:String = null):Void { var buildRelease = (!project.targetFlags.exists("debug")); var buildDebug = (project.targetFlags.exists("debug") || (!project.targetFlags.exists("rebuild") && !project.targetFlags.exists("release") && !project.targetFlags.exists("final") && project.config.exists("project.rebuild.fulldebug"))); for (haxelib in project.haxelibs) { if (!rebuiltLibraries.exists(haxelib.name)) { var defines = MapTools.copy(project.defines); defines.set("rebuild", "1"); var haxelibProject = HXProject.fromHaxelib(haxelib, defines); if (haxelibProject == null) { haxelibProject = new HXProject(); haxelibProject.config.set("project.rebuild.path", Path.combine(Haxelib.getPath(haxelib), "project")); } MapTools.copyKeys(project.targetFlags, haxelibProject.targetFlags); rebuiltLibraries.set(haxelib.name, true); if (!rebuiltPaths.exists(haxelibProject.config.get("project.rebuild.path"))) { rebuiltPaths.set(haxelibProject.config.get("project.rebuild.path"), true); rebuild(haxelibProject, commands); } } } if (project.targetFlags.exists("clean")) { if (buildRelease) { for (command in commands) { rebuildSingle(project, command.concat(["clean"]), path, buildFile); } } if (buildDebug) { for (command in commands) { rebuildSingle(project, command.concat(["-Ddebug", "-Dfulldebug", "clean"]), path, buildFile); } } } for (command in commands) { if (buildRelease) { rebuildSingle(project, command, path, buildFile); } if (buildDebug) { rebuildSingle(project, command.concat(["-Ddebug", "-Dfulldebug"]), path, buildFile); } } } public static function rebuildSingle(project:HXProject, flags:Array = null, path:String = null, buildFile:String = null):Void { if (path == null) { path = project.config.get("project.rebuild.path"); } if (path == null) { return; } if (!FileSystem.exists(path)) { Log.warn("Skipping rebuild. Path not found: " + path + "\nIf you are using a release from Haxelib, source code for native binaries may not be bundled. To rebuild, you may need to check out the full repository."); return; } if (buildFile == null && project.config.exists("project.rebuild.file")) { buildFile = project.config.get("project.rebuild.file"); } if (buildFile == null) buildFile = "Build.xml"; if (!FileSystem.exists(Path.combine(path, buildFile))) { Log.warn("Skipping rebuild. Path not found: " + path + "\nIf you are using a release from Haxelib, source code for native binaries may not be bundled. To rebuild, you may need to check out the full repository."); return; } var args = ["run", project.config.getString("cpp.buildLibrary", "hxcpp"), buildFile]; if (flags != null) { args = args.concat(flags); } for (key in project.haxedefs.keys()) { var value = project.haxedefs.get(key); if (value == null || value == "") { args.push("-D" + key); } else { args.push("-D" + key + "=" + value); } } /*if (project.debug) { args.push ("-Ddebug"); }*/ if (project.targetFlags.exists("static")) { args.push("-Dstatic_link"); } if (Log.verbose) { args.push("-verbose"); } if (!Log.enableColor) { // args.push ("-nocolor"); Sys.putEnv("HXCPP_NO_COLOR", ""); } if (System.hostPlatform == WINDOWS && !project.environment.exists("HXCPP_COMPILE_THREADS")) { var threads = 1; if (System.processorCores > 1) { threads = System.processorCores - 1; } Sys.putEnv("HXCPP_COMPILE_THREADS", Std.string(threads)); } Sys.putEnv("HXCPP_EXIT_ON_ERROR", ""); Haxelib.runCommand(path, args); } } ================================================ FILE: src/lime/tools/CSHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.Architecture; import lime.tools.HXProject; import sys.io.File; import sys.FileSystem; using StringTools; class CSHelper { public static var ndllSourceFiles:Array = [ "cs.ndll.NDLLFunction", "cs.ndll.CFFICSLoader", "cs.ndll.CSAbstract", "cs.ndll.CSHandleContainer", "cs.ndll.CSHandleScope", "cs.ndll.CSPersistent", "cs.ndll.DelegateConverter", "cs.ndll.HandleUtils", "cs.ndll.NativeMethods", "cs.ndll.NDLLFunction", ]; private static function getAndroidABIName(arch:Architecture):String { var name = switch (arch) { case ARMV5: "armeabi"; case ARMV7: "armeabi-v7a"; case ARM64: "arm64-v8a"; case X86: "x86"; case X64: "x86_64"; case _: null; } if (name == null) { throw "Unsupported architecture:" + arch; } return name; } public static function getAndroidABINames(architectures:Array):String { var result = ""; var first = true; for (arch in architectures) { if (first) { first = false; } else { result += ","; } var archName = getAndroidABIName(arch); result += archName; } return result; } public static function getAndroidNativeLibraryPaths(libPath:String, libraries:Array, architectures:Array):Array { var paths:Array = []; for (arch in architectures) { var archName = getAndroidABIName(arch); for (lib in libraries) { paths.push(FileSystem.absolutePath(libPath + "/" + archName + "/" + "lib" + lib.name + ".so").replace("/", "\\")); } } return paths; } public static function copySourceFiles(templatePaths:Array, targetPath:String) { System.recursiveCopyTemplate(templatePaths, "cs/src", targetPath); } public static function addSourceFiles(txtPath:String, sourceFiles:Array) { if (sourceFiles.length == 0) { return; } var file = File.append(txtPath, false); file.writeString('\nbegin modules\n'); for (fileName in sourceFiles) { file.writeString('M $fileName\nC $fileName\n'); } file.writeString('end modules\n'); file.close(); } public static function addAndroidResources(txtPath:String, resources:Array) { if (resources.length == 0) { return; } var file = File.append(txtPath, false); file.writeString('\nbegin android_resources\n'); for (resource in resources) { file.writeString('$resource\n'); } file.writeString('end android_resources\n'); file.close(); } public static function addAssemblies(txtPath:String, assemblies:Array) { if (assemblies.length == 0) { return; } var file = File.append(txtPath, false); file.writeString('\nbegin libs\n'); for (assembly in assemblies) { file.writeString(assembly.replace("/", "\\") + '\n'); } file.writeString('end libs\n'); file.close(); } public static function addNativeLibraries(txtPath:String, libPath:String, libraries:Array, architectures:Array) { if (libraries.length == 0) { return; } var file = File.append(txtPath, false); file.writeString('\nbegin native_libs\n'); for (arch in architectures) { var archName = getAndroidABIName(arch); for (lib in libraries) { file.writeString(FileSystem.absolutePath(libPath + "/" + archName + "/" + "lib" + lib.name + ".so").replace("/", "\\") + '\n'); } } file.writeString('end native_libs\n'); file.close(); } public static function addAndroidABIs(txtPath:String, architectures:Array) { if (architectures.length == 0) { return; } var file = File.append(txtPath, false); file.writeString('\nbegin android_abis\n'); for (arch in architectures) { var archName = getAndroidABIName(arch); file.writeString(archName + '\n'); } file.writeString('end android_abis\n'); file.close(); } public static function addAssets(txtPath:String, assets:Array) { if (assets.length == 0) { return; } var file = File.append(txtPath, false); file.writeString('\nbegin android_assets\n'); for (asset in assets) { file.writeString(FileSystem.absolutePath(asset).replace("/", "\\") + '\n'); } file.writeString('end android_assets\n'); file.close(); } public static function addGUID(txtPath:String, guid:String) { var file = File.append(txtPath, false); file.writeString('\nbegin guid\n'); file.writeString('$guid\n'); file.writeString('end guid\n'); file.close(); } public static function compile(project:HXProject, path:String, outPath:String, arch:String, platform:String, buildFile:String = "hxcs_build.txt", noCompile:Bool = false) { var args = [ "run", project.config.getString("cs.buildLibrary", "hxcs"), buildFile, "--arch", arch, "--platform", platform, "--out", outPath, "--unsafe" ]; if (noCompile) args.push("--no-compile"); var code = Haxelib.runCommand(path, args); if (code != 0) { Sys.exit(code); } } public static function buildGradleProj(path:String) { var gradlePath = FileSystem.absolutePath(path + "/" + "gradlew"); System.runCommand(path, gradlePath, ["build", "assembleRelease"]); } inline public static function buildSln(path:String, slnPath:String, task:String = null) { buildCSProj(path, slnPath, task); } public static function buildCSProj(path:String, csprojPath:String, task:String = null) { var msBuildPath = "C:/Program Files (x86)/MSBuild/14.0/Bin/MSBuild.exe"; var absCSProjPath = FileSystem.absolutePath(csprojPath); var args = [absCSProjPath, "/p:Configuration=Release"]; if (task != null) { args.push("/t:" + task); } System.runCommand(path, msBuildPath, args); } } ================================================ FILE: src/lime/tools/Command.hx ================================================ package lime.tools; enum Command { BUILD; CLEAN; CONFIG; DEPLOY; DISPLAY; UPDATE; RUN; TEST; TRACE; PUBLISH; REBUILD; } ================================================ FILE: src/lime/tools/CommandHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.CLICommand; import lime.tools.Platform; class CommandHelper { public static function executeCommands(commands:Array):Void { for (c in commands) { Sys.command(c.command, c.args); } } public static function openFile(file:String):CLICommand { if (System.hostPlatform == WINDOWS) { return new CLICommand("start", [file]); } else if (System.hostPlatform == MAC) { return new CLICommand("/usr/bin/open", [file]); } else { return new CLICommand("/usr/bin/xdg-open", [file]); } } public static function interpretHaxe(mainFile:String):CLICommand { return new CLICommand("haxe", ["-main", mainFile, "--interp"]); } public static function fromSingleString(command:String):CLICommand { var args:Array = command.split(" "); command = args.shift(); return new CLICommand(command, args); } } ================================================ FILE: src/lime/tools/ConfigData.hx ================================================ package lime.tools; import hxp.*; #if (haxe_ver >= 4) import haxe.xml.Access; #else import haxe.xml.Fast as Access; #end abstract ConfigData(Dynamic) to Dynamic from Dynamic { private static inline var ARRAY:String = "___array"; public function new() { this = {}; } private function addBucket(bucket:String, parent:Dynamic):Dynamic { if (!Reflect.hasField(parent, bucket)) { log("config data > adding a bucketType " + bucket); Reflect.setField(parent, bucket, {}); } return Reflect.field(parent, bucket); } public function clone():ConfigData { return ObjectTools.deepCopy(this); } public function exists(id:String):Bool { return get(id) != null; } public function get(id:String):ConfigData { var tree = id.split("."); var current = this; for (leaf in tree) { current = Reflect.field(current, leaf); if (current == null) { return null; } } return current; } public function getArray(id:String, defaultValue:Array = null):Array { var tree = id.split("."); var array:Array = null; var current = this; var field = tree.pop(); for (leaf in tree) { current = Reflect.field(current, leaf); if (current == null) { break; } } if (current != null) { array = Reflect.field(current, field + ARRAY); if (array == null && Reflect.hasField(current, field)) { array = [Reflect.field(current, field)]; } } if (array != null) { return array; } if (defaultValue == null) { defaultValue = []; } return defaultValue; } public function getArrayString(id:String, childField:String = null, defaultValue:Array = null):Array { var array = getArray(id); if (array.length > 0) { var value:Array = []; if (childField == null) { for (item in array) { value.push(Std.string(item)); } } else { for (item in array) { value.push(Std.string(Reflect.field(item, childField))); } } return value; } if (defaultValue == null) { defaultValue = []; } return defaultValue; } public function getBool(id:String, defaultValue:Bool = true):Bool { if (exists(id)) { return get(id) == "true"; } return defaultValue; } public function getInt(id:String, defaultValue:Int = 0):Int { if (exists(id)) { return Std.parseInt(Std.string(get(id))); } return defaultValue; } public function getFloat(id:String, defaultValue:Float = 0):Float { if (exists(id)) { return Std.parseFloat(Std.string(get(id))); } return defaultValue; } public function getString(id:String, defaultValue:String = ""):String { if (exists(id)) { return Std.string(get(id)); } return defaultValue; } public function getKeyValueArray(id:String, defaultValues:Dynamic = null):Array<{ key:String, value:Dynamic }> { var values = {}; if (defaultValues != null) { ObjectTools.copyFields(defaultValues, values); } var data = get(id); for (key in Reflect.fields(data)) { if (!StringTools.endsWith (key, ARRAY)) { Reflect.setField(values, key, Reflect.field(data, key)); } } var pairs:Array<{ key:String, value:Dynamic }> = []; for (key in Reflect.fields(values)) { pairs.push({ key: key, value: Reflect.field(values, key) }); } return pairs; } private function log(v:Dynamic):Void { if (Log.verbose) { // Log.println (v); } } public function merge(other:ConfigData):Void { if (other != null) { mergeValues(other, this); } } private function mergeValues(source:T, destination:T):Void { for (field in Reflect.fields(source)) { if (StringTools.endsWith(field, ARRAY)) { continue; } var doCopy = true; var exists = Reflect.hasField(destination, field); var typeDest:String = null; if (exists) { var valueSource = Reflect.field(source, field); var valueDest = Reflect.field(destination, field); var typeSource = Type.typeof(valueSource).getName(); typeDest = Type.typeof(valueDest).getName(); // if trying to copy a non object over an object, don't if (typeSource != "TObject" && typeDest == "TObject") { doCopy = false; // if (Log.verbose) { // // Log.println (field + " not merged by preference"); // // } } if (doCopy && Reflect.field(source, field) != Reflect.field(destination, field) && typeSource != "TObject") { if (!Reflect.hasField(destination, field + ARRAY)) { Reflect.setField(destination, field + ARRAY, [ObjectTools.deepCopy(Reflect.field(destination, field))]); } var array:Array = Reflect.field(destination, field + ARRAY); if (Reflect.hasField(source, field + ARRAY)) { array = array.concat(Reflect.field(source, field + ARRAY)); Reflect.setField(destination, field + ARRAY, array); } else { array.push(Reflect.field(source, field)); } Reflect.setField(destination, field, Reflect.field(source, field)); doCopy = false; } } if (doCopy) { if (typeDest == "TObject") { mergeValues(Reflect.field(source, field), Reflect.field(destination, field)); } else { Reflect.setField(destination, field, Reflect.field(source, field)); if (Reflect.hasField(source, field + ARRAY)) { Reflect.setField(destination, field + ARRAY, Reflect.field(source, field + ARRAY)); } } } } } public function parse(elem:Access, substitute:String->String = null):Void { var bucket = this; var bucketType = ""; if (StringTools.startsWith(elem.name, "config:")) { var items = elem.name.split(":"); bucketType = items[1]; } if (elem.has.type) { bucketType = elem.att.type; } if (bucketType != "") { bucket = addBucket(bucketType, this); } parseAttributes(elem, bucket, substitute); parseChildren(elem, bucket, 0, substitute); log("> current config : " + this); } private function parseAttributes(elem:Access, bucket:Dynamic, substitute:String->String = null):Void { for (attrName in elem.x.attributes()) { if (attrName != "type") { var attrValue = elem.x.get(attrName); if (substitute != null) attrValue = substitute(attrValue); setNode(bucket, attrName, attrValue); } } } private function parseChildren(elem:Access, bucket:Dynamic, depth:Int = 0, substitute:String->String = null):Void { for (child in elem.elements) { if (child.name != "config") { // log("config data > child : " + child.name); var d = depth + 1; var hasChildren = child.x.elements().hasNext(); var hasAttributes = child.x.attributes().hasNext(); if (Reflect.hasField(bucket, child.name)) { var array:Array = Reflect.field(bucket, child.name + ARRAY); if (array == null) { array = [ObjectTools.deepCopy(Reflect.field(bucket, child.name))]; Reflect.setField(bucket, child.name + ARRAY, array); } var arrayBucket = {}; array.push(arrayBucket); if (hasAttributes) { parseAttributes(child, arrayBucket, substitute); } if (hasChildren) { parseChildren(child, arrayBucket, d, substitute); } if (!hasChildren && !hasAttributes) { parseValue(child, arrayBucket, substitute); } } if (!hasChildren && !hasAttributes) { parseValue(child, bucket, substitute); } else { var childBucket = addBucket(child.name, bucket); if (hasAttributes) { parseAttributes(child, childBucket, substitute); } if (hasChildren) { parseChildren(child, childBucket, d, substitute); } } } } } private function parseValue(elem:Access, bucket:Dynamic, substitute:String->String = null):Void { if (elem.innerHTML != "") { var value = elem.innerHTML; if (substitute != null) value = substitute(value); setNode(bucket, elem.name, value); } } public function push(id:String, value:Dynamic, ?unique:Bool = false):Void { var tree = id.split("."); var current = this; var field = tree.pop(); for (leaf in tree) { if (!Reflect.hasField(current, leaf)) { Reflect.setField(current, leaf, {}); current = Reflect.field(current, leaf); } else { current = Reflect.field(current, leaf); if (current == null) { return; } } } if (Reflect.hasField(current, field)) { var array:Array = Reflect.field(current, field + ARRAY); if (array == null) { array = [ObjectTools.deepCopy(Reflect.field(current, field))]; Reflect.setField(current, field + ARRAY, array); } if (!unique || array.indexOf(value) == -1) { array.push(value); } } Reflect.setField(current, field, value); } public function set(id:String, value:Dynamic):Void { var tree = id.split("."); var current = this; var field = tree.pop(); for (leaf in tree) { if (!Reflect.hasField(current, leaf)) { Reflect.setField(current, leaf, {}); current = Reflect.field(current, leaf); } else { current = Reflect.field(current, leaf); if (current == null) { return; } } } Reflect.setField(current, field, value); } private function setNode(bucket:Dynamic, node:String, value:Dynamic):Void { // log("config data > setting a node " + node + " to " + value + " on " + bucket); var doCopy = true; var exists = Reflect.hasField(bucket, node); if (exists) { var valueDest = Reflect.field(bucket, node); var typeSource = Type.typeof(value).getName(); var typeDest = Type.typeof(valueDest).getName(); // trace (node + " / existed in dest as " + typeDest + " / " + typeSource ); if (typeSource != "TObject" && typeDest == "TObject") { doCopy = false; log(node + " not merged by preference over object"); } if (doCopy) { if (typeSource != "TObject") { var array:Array = Reflect.field(bucket, node + ARRAY); if (array == null) { array = [ObjectTools.deepCopy(Reflect.field(bucket, node))]; Reflect.setField(bucket, node + ARRAY, array); } array.push(value); } Reflect.setField(bucket, node, value); } } else { Reflect.setField(bucket, node, value); } } } ================================================ FILE: src/lime/tools/ConfigHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.HXProject; import lime.tools.Platform; import lime.tools.ProjectXMLParser; import sys.io.File; import sys.FileSystem; class ConfigHelper { private static var backedUpConfig:Bool = false; private static var configPath:String = null; public static function getConfig():HXProject { var config = getConfigPath(); if (FileSystem.exists(config)) { Log.info("", Log.accentColor + "Reading Lime config: " + config + Log.resetColor); return new ProjectXMLParser(config); } else { Log.warn("", "Could not read Lime config: " + config); } return null; } public static function getConfigPath():String { if (configPath == null) { var environment = Sys.environment(); if (environment.exists("LIME_CONFIG")) { configPath = environment.get("LIME_CONFIG"); } else { var home = ""; if (environment.exists("HOME")) { home = environment.get("HOME"); } else if (environment.exists("USERPROFILE")) { home = environment.get("USERPROFILE"); } else { Log.warn("Lime config might be missing (Environment has no \"HOME\" variable)"); return null; } configPath = home + "/.lime/config.xml"; if (System.hostPlatform == WINDOWS) { configPath = configPath.split("/").join("\\"); } if (!FileSystem.exists(configPath)) { System.mkdir(Path.directory(configPath)); var hxcppConfig:String = null; if (environment.exists("HXCPP_CONFIG")) { hxcppConfig = environment.get("HXCPP_CONFIG"); } else { hxcppConfig = home + "/.hxcpp_config.xml"; } if (FileSystem.exists(hxcppConfig)) { var vars = new ProjectXMLParser(hxcppConfig); for (key in vars.defines.keys()) { if (key != key.toUpperCase()) { vars.defines.remove(key); } } writeConfig(configPath, vars.defines); } else { writeConfig(configPath, new Map()); } } Sys.putEnv("LIME_CONFIG", configPath); } } return configPath; } public static function getConfigValue(name:String):String { var config = getConfig(); if (config.defines.exists(name)) { return config.defines.get(name); } return null; } public static function removeConfigValue(name:String):Void { var path = getConfigPath(); if (FileSystem.exists(path)) { var configText = File.getContent(path); var lines = configText.split("\n"); var findSet = " -1) { found = true; lines.splice(i, 1); continue; } if ((index = line.indexOf(findSetenv)) > -1) { found = true; lines.splice(i, 1); continue; } if ((index = line.indexOf(findDefine)) > -1) { found = true; lines.splice(i, 1); continue; } i++; } var content = lines.join("\n"); File.saveContent(path, content); if (found) { Log.info("Removed define \"" + name + "\""); } else { Log.info("There is no define \"" + name + "\""); } } else { Log.error("Cannot find \"" + path + "\""); } } private static function stripQuotes(path:String):String { if (path != null) { return path.split("\"").join(""); } return path; } public static function writeConfig(path:String, defines:Map):Void { var newContent = ""; var definesText = ""; var env = Sys.environment(); for (key in defines.keys()) { if (key != "LIME_CONFIG" && key != "LIME_CONFIG" && (!env.exists(key) || env.get(key) != defines.get(key))) { definesText += "\t\t\n"; } } if (FileSystem.exists(path)) { var input = File.read(path, false); var bytes = input.readAll(); input.close(); if (!backedUpConfig) { try { var backup = File.write(path + ".bak", false); backup.writeBytes(bytes, 0, bytes.length); backup.close(); } catch (e:Dynamic) {} backedUpConfig = true; } var content = bytes.getString(0, bytes.length); var startIndex = content.indexOf("
    "); var endIndex = content.indexOf("
    ", startIndex); newContent += content.substr(0, startIndex) + "
    \n\t\t\n"; newContent += definesText; newContent += "\t\t\n\t" + content.substr(endIndex); } else { newContent += "\n"; newContent += "\n\t\n"; newContent += "\t
    \n\t\t\n"; newContent += definesText; newContent += "\t\t\n\t
    \n\t\n
    "; } var output = File.write(path, false); output.writeString(newContent); output.close(); if (backedUpConfig) { try { FileSystem.deleteFile(path + ".bak"); } catch (e:Dynamic) {} } } public static function writeConfigValue(name:String, value:String):Void { var path = getConfigPath(); try { if (!FileSystem.exists(value) && FileSystem.exists(Path.expand(value))) { value = Path.expand(value); } } catch (e:Dynamic) {} if (FileSystem.exists(path)) { var configText = File.getContent(path); var lines = configText.split("\n"); var findSet = " -1) { found = true; lines[i] = line.substr(0, index) + ""; } if ((index = line.indexOf(findSetenv)) > -1) { found = true; lines[i] = line.substr(0, index) + ""; } if ((index = line.indexOf(findDefine)) > -1) { found = true; lines[i] = line.substr(0, index) + ""; } i++; } if (!found && lines.length > 2) { var insertPoint = lines.length - 3; if (StringTools.trim(lines[lines.length - 1]) == "") { insertPoint--; } if (StringTools.trim(lines[insertPoint + 1]) != "") { lines.insert(insertPoint + 1, "\t"); } lines.insert(insertPoint + 1, "\t"); } var content = lines.join("\n"); File.saveContent(path, content); Log.info("Set \x1b[1m" + name + "\x1b[0m to \x1b[1m" + value + "\x1b[0m"); } else { Log.error("Cannot find \"" + path + "\""); } } } ================================================ FILE: src/lime/tools/Dependency.hx ================================================ package lime.tools; class Dependency { // TODO: Is "forceLoad" the best name? Implement "whole-archive" on GCC public var embed:Bool; public var forceLoad:Bool; public var allowWebWorkers:Bool; public var name:String; public var path:String; public function new(name:String, path:String) { this.name = name; this.path = path; } public function clone():Dependency { var dependency = new Dependency(name, path); dependency.embed = embed; dependency.forceLoad = forceLoad; return dependency; } } ================================================ FILE: src/lime/tools/DeploymentHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.HXProject; class DeploymentHelper { public static function deploy(project:HXProject, targetFlags:Map, targetDirectory:String, targetName:String) { var name = project.meta.title + " (" + project.meta.version + " build " + project.meta.buildNumber + ") (" + targetName + ").zip"; var targetPath = Path.combine(targetDirectory + "/dist", name); System.compress(Path.combine(targetDirectory, "bin"), targetPath); if (targetFlags.exists("gdrive")) { var parent = targetFlags.get("parent"); var args = ["upload", "-f", targetPath]; if (targetFlags.exists("config")) { args.push("--config"); args.push(targetFlags.get("config")); } if (parent != null && parent != "") { args.push("-p"); args.push(parent); } System.runCommand("", "drive", args); } } } ================================================ FILE: src/lime/tools/ElectronHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.HXProject; class ElectronHelper { public static function launch(project:HXProject, path:String, ?npx:Bool):Void { if (npx) { System.runCommand("", "npx", ["electron", path]); return; } var electronPath = project.defines.get("ELECTRON_PATH"); if (electronPath == null || electronPath == "") { electronPath = "electron"; } else { electronPath = Path.combine(electronPath, "electron"); } System.runCommand("", electronPath, [path]); } } ================================================ FILE: src/lime/tools/FlashHelper.hx ================================================ package lime.tools; // import openfl.text.Font; // import openfl.utils.ByteArray; import sys.io.FileInput; import haxe.io.Bytes; import hxp.*; import lime._internal.format.Base64; import lime.tools.Asset; import lime.tools.AssetEncoding; import lime.tools.AssetType; import lime.tools.HXProject; #if (lime && lime_cffi && !macro) import lime.text.Font; #end import sys.io.File; import sys.FileSystem; import sys.io.FileSeek; #if format import format.swf.Data; import format.swf.Constants; import format.swf.Reader; import format.swf.Writer; import format.wav.Data; #end class FlashHelper { private static var swfAssetID = 1000; #if format private static function embedAsset(inAsset:Asset, packageName:String, outTags:Array) { var embed = inAsset.embed; var path = inAsset.sourcePath; var type = inAsset.type; var flatName = inAsset.flatName; var ext = inAsset.format; var name = (path == null || path == "") ? inAsset.targetPath : path; if (embed == false) { return false; } Log.info("", " - \x1b[1mEmbedding asset:\x1b[0m \x1b[3;37m(" + type + ")\x1b[0m " + name); var cid = nextAssetID(); if (type == AssetType.MUSIC || type == AssetType.SOUND) { var src = path; if (ext != "mp3" && ext != "wav") { for (e in ["wav", "mp3"]) { src = path.substr(0, path.length - ext.length) + e; if (FileSystem.exists(src)) { break; } } } if (!FileSystem.exists(src)) { Sys.println("Warning: Could not embed unsupported audio file \"" + name + "\", embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } var input = File.read(src, true); if (ext == "mp3") { var reader = new mpeg.audio.MpegAudioReader(input); var frameDataWriter = new haxe.io.BytesOutput(); var totalLengthSamples = 0; var samplingFrequency = -1; var isStereo:Null = null; var encoderDelay = 0; var endPadding = 0; var decoderDelay = 529; // This is a constant delay caused by the Fraunhofer MP3 Decoder used in Flash Player. while (true) { switch (reader.readNext()) { case Frame(frame): if (frame.header.layer != mpeg.audio.Layer.Layer3) { Sys.println("Warning: Could not embed \"" + name + "\" (Flash only supports Layer-III MP3 files, but file is " + frame.header.layer + "), embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } var frameSamplingFrequency = frame.header.samplingFrequency; if (samplingFrequency == -1) { samplingFrequency = frameSamplingFrequency; } else if (frameSamplingFrequency != samplingFrequency) { Sys.println("Warning: Could not embed \"" + name + "\" (Flash does not support MP3 audio with variable sampling frequencies), embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } var frameIsStereo = frame.header.mode != mpeg.audio.Mode.SingleChannel; if (isStereo == null) { isStereo = frameIsStereo; } else if (frameIsStereo != isStereo) { Sys.println("Warning: Could not embed \"" + name + "\" (Flash does not support MP3 audio with mixed mono and stero frames), embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } frameDataWriter.write(frame.frameData); totalLengthSamples += mpeg.audio.Utils.lookupSamplesPerFrame(frame.header.version, frame.header.layer); case GaplessInfo(giEncoderDelay, giEndPadding): encoderDelay = giEncoderDelay; endPadding = giEndPadding; case Info(_): // ignore case Unknown(_): // ignore case End: break; } } if (totalLengthSamples == 0) { Sys.println("Warning: Could not embed \"" + name + "\" (Could not find any valid MP3 audio data), embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } var flashSamplingFrequency = switch (samplingFrequency) { case 11025: SR11k; case 22050: SR22k; case 44100: SR44k; default: null; } if (flashSamplingFrequency == null) { Sys.println("Warning: Could not embed \"" + name + "\" (Flash supports 11025, 22050 and 44100kHz MP3 files, but file is " + samplingFrequency + "kHz), embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } var frameData = frameDataWriter.getBytes(); var snd:format.swf.Data.Sound = { sid: cid, format: SFMP3, rate: flashSamplingFrequency, is16bit: true, isStereo: isStereo, samples: totalLengthSamples - endPadding - encoderDelay, data: SDMp3(encoderDelay + decoderDelay, frameData) }; outTags.push(TSound(snd)); } else { var header = input.readString(4); if (ext == "ogg" || header == "OggS") { Sys.println("Warning: Skipping unsupported OGG file \"" + name + "\", embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } else if (header != "RIFF") { Sys.println("Warning: Could not embed unrecognized WAV file \"" + name + "\", embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } else { input.close(); input = File.read(src, true); var r = new format.wav.Reader(input); var wav = r.read(); var hdr = wav.header; if (hdr.format != WF_PCM) { Sys.println("Warning: Could not embed \"" + name + "\" (Only PCM uncompressed WAV files are currently supported), embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } // Check sampling rate var flashRate = switch (hdr.samplingRate) { case 5512: SR5k; case 11025: SR11k; case 22050: SR22k; case 44100: SR44k; default: null; } if (flashRate == null) { Sys.println("Warning: Could not embed \"" + name + "\" (Flash supports 5512, 11025, 22050 and 44100kHz WAV files, but file is " + hdr.samplingRate + "kHz), embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } var isStereo = switch (hdr.channels) { case 1: false; case 2: true; default: throw "Number of channels should be 1 or 2, but for '" + src + "' it is " + hdr.channels; } var is16bit = switch (hdr.bitsPerSample) { case 8: false; case 16: true; default: throw "Bits per sample should be 8 or 16, but for '" + src + "' it is " + hdr.bitsPerSample; } if (wav.data != null) { var sampleCount = Std.int(wav.data.length / (hdr.bitsPerSample / 8)); var snd:format.swf.Data.Sound = { sid: cid, format: SFLittleEndianUncompressed, rate: flashRate, is16bit: is16bit, isStereo: isStereo, samples: sampleCount, data: SDRaw(wav.data) } outTags.push(TSound(snd)); } else { Sys.println("Warning: Could not embed WAV file \"" + name + "\", the file may be corrupted, embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } } } input.close(); } else if (type == AssetType.IMAGE) { if (inAsset.data != null) { if (inAsset.encoding == AssetEncoding.BASE64) { outTags.push(TBitsJPEG(cid, JDJPEG2(Base64.decode(inAsset.data)))); } else { outTags.push(TBitsJPEG(cid, JDJPEG2(inAsset.data))); } } else { var src = path; if (ext == "jpg" || ext == "jpeg" || ext == "png" || ext == "gif") { if (!FileSystem.exists(src)) { Sys.println("Warning: Could not find image path \"" + src + "\""); } else { var bytes = File.getBytes(src); outTags.push(TBitsJPEG(cid, JDJPEG2(bytes))); } } else { Sys.println("Warning: Could not embed image file \"" + name + "\", unknown image type, embedding as binary"); inAsset.type = BINARY; return embedAsset(inAsset, packageName, outTags); } } } else if (type == AssetType.FONT) { // More code ripped off from "samhaxe" #if (lime && lime_cffi && !macro) var src = path; var face = Font.fromFile(src); var font = face.decompose(); var font_name = font.family_name; // fallback for font name is case no one could be found.. if (font_name == null || font_name.length == 0) font_name = Path.withoutExtension(name).split("/").pop().split("\\").pop(); var glyphs = new Array(); var glyph_layout = new Array(); for (native_glyph in font.glyphs) { if (native_glyph.char_code > 65535) { Sys.println("Warning: glyph with character code greater than 65535 encountered (" + native_glyph.char_code + "). Skipping..."); continue; } var shapeRecords = new Array(); var i:Int = 0; var styleChanged:Bool = false; var dx = 0; var dy = 0; while (i < native_glyph.points.length) { var type = native_glyph.points[i++]; switch (type) { case 1: // Move dx = native_glyph.points[i++]; dy = native_glyph.points[i++]; shapeRecords.push(SHRChange( { moveTo: {dx: dx, dy: -dy}, // Set fill style to 1 in first style change record // Required by DefineFontX fillStyle0: if (!styleChanged) {idx: 1} else null, fillStyle1: null, lineStyle: null, newStyles: null })); styleChanged = true; case 2: // LineTo dx = native_glyph.points[i++]; dy = native_glyph.points[i++]; shapeRecords.push(SHREdge(dx, -dy)); case 3: // CurveTo var cdx = native_glyph.points[i++]; var cdy = native_glyph.points[i++]; dx = native_glyph.points[i++]; dy = native_glyph.points[i++]; shapeRecords.push(SHRCurvedEdge(cdx, -cdy, dx, -dy)); case 4: // CubicCurveTo var p1x = native_glyph.points[i++]; var p1y = native_glyph.points[i++]; var p2x = native_glyph.points[i++]; var p2y = native_glyph.points[i++]; var p3x = native_glyph.points[i++]; var p3y = native_glyph.points[i++]; // Get original points var cp1x = p1x + dx; var cp1y = p1y + dy; var cp2x = p2x + cp1x; var cp2y = p2y + cp1y; var endx = p3x + cp2x; var endy = p3y + cp2y; // Convert to quadratic var cpx = Std.int((-0.25 * dx) + (0.75 * cp1x) + (0.75 * cp2x) + (-0.25 * endx)); var cpy = Std.int((-0.25 * dy) + (0.75 * cp1y) + (0.75 * cp2y) + (-0.25 * endy)); // Offset again var cdx = cpx - dx; var cdy = cpy - dy; dx = endx - cpx; dy = endy - cpy; shapeRecords.push(SHRCurvedEdge(cdx, -cdy, dx, -dy)); default: throw "Invalid control point type encountered! (" + type + ")"; } } shapeRecords.push(SHREnd); glyphs.push( { charCode: native_glyph.char_code, shape: { shapeRecords: shapeRecords } }); glyph_layout.push( { advance: native_glyph.advance, bounds: { left: native_glyph.min_x, right: native_glyph.max_x, top: -native_glyph.max_y, bottom: -native_glyph.min_y, } }); } var kerning = new Array(); if (font.kerning != null) { var length = font.kerning.length; if (length > 0xFFFF) length = 0xFFFF; var k:NativeKerningData; for (i in 0...length) { k = font.kerning[i]; kerning.push( { charCode1: k.left_glyph, charCode2: k.right_glyph, adjust: k.x, }); } } var swf_em = 1024 * 20; var ascent = Math.round(Math.abs(font.ascend * swf_em / font.em_size)); var descent = Math.round(Math.abs((font.descend) * swf_em / font.em_size)); var leading = Math.round((font.height - font.ascend + font.descend) * swf_em / font.em_size); var language = LangCode.LCNone; outTags.push(TFont(cid, FDFont3( { shiftJIS: false, isSmall: false, isANSI: false, isItalic: font.is_italic, isBold: font.is_bold, language: language, name: font_name, glyphs: glyphs, layout: { ascent: ascent, descent: descent, leading: leading, glyphs: glyph_layout, kerning: kerning } }))); #end } else { var bytes:Bytes = null; if (inAsset.data != null) { if (inAsset.encoding == AssetEncoding.BASE64) { bytes = Base64.decode(inAsset.data); } else if ((inAsset.data is Bytes)) { bytes = cast inAsset.data; } else { bytes = Bytes.ofString(Std.string(inAsset.data)); } } if (bytes == null) { bytes = File.getBytes(path); } outTags.push(TBinaryData(cid, bytes)); } outTags.push(TSymbolClass([ {cid: cid, className: packageName + "__ASSET__" + flatName}])); return true; } #end /*public static function embedAssets (targetPath:String, assets:Array, packageName:String = ""):Void { try { var input = File.read (targetPath, true); if (input != null) { var reader = new Reader (input); var swf = reader.read (); input.close(); var new_tags = new Array (); var inserted = false; for (tag in swf.tags) { var name = Type.enumConstructor (tag); if (name == "TShowFrame" && !inserted && assets.length > 0) { new_tags.push (TShowFrame); for (asset in assets) { try { if (asset.type != AssetType.TEMPLATE && embedAsset (asset, packageName, new_tags)) { inserted = true; } } catch (e:Dynamic) { Sys.println ("Error embedding \"" + asset.sourcePath + "\": " + e); } } } new_tags.push (tag); } if (inserted) { swf.tags = new_tags; var output = File.write (targetPath, true); var writer = new Writer (output); writer.write (swf); output.close (); } } else { trace ("Embedding assets failed! We encountered an error. Does '" + targetPath + "' exist?"); } } catch (e:Dynamic) { trace ("Embedding assets failed! We encountered an error accessing '" + targetPath + "': " + e); } }*/ public static function enableLogging():Void { try { var path = switch (System.hostPlatform) { case WINDOWS: Sys.getEnv("HOMEDRIVE") + "/" + Sys.getEnv("HOMEPATH") + "/mm.cfg"; // case MAC: "/Library/Application Support/Macromedia/mm.cfg"; default: Sys.getEnv("HOME") + "/mm.cfg"; } if (!FileSystem.exists(path)) { File.saveContent(path, "ErrorReportingEnable=1\nTraceOutputFileEnable=1\nMaxWarnings=50"); } } catch (e:Dynamic) {} } private static function compileSWC(project:HXProject, assets:Array, id:Int, destination:String):Void { #if format destination = destination + "/obj"; System.mkdir(destination); var label = (id > 0 ? Std.string(id + 1) : ""); var swfVersions = [ 9, 10, /*10.1,*/ 10.2, 10.3, 11, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7, 11.8, 12, 13, 14 ]; var flashVersion = 9; if (project.app.swfVersion > 14) { flashVersion += Std.int((swfVersions.length - 1) + (project.app.swfVersion - 14)); } else { for (swfVersion in swfVersions) { if (project.app.swfVersion > swfVersion) { flashVersion++; } } } var header:SWFHeader = { version: flashVersion, compressed: true, width: (project.window.width == 0 ? 800 : project.window.width), height: (project.window.height == 0 ? 500 : project.window.height), fps: project.window.fps * 256, nframes: project.target == AIR ? 1 : 2 }; var tags = new Array(); var packageName = ""; var inserted = false; tags.push(TBackgroundColor(project.window.background & 0xFFFFFF)); if (project.target != AIR) { tags.push(TShowFrame); } // Might generate ABC later, so we don't need the @:bind calls in DefaultAssetLibrary? /*var abc = new haxe.io.BytesOutput (); var abcWriter = new format.abc.Writer (abc); for (asset in assets) { var classDef:ClassDef = { var name : packageName + "__ASSET__" + asset.flatName; var superclass : asset.flashClass; var interfaces : []]; var constructor : null; var fields : []; var namespace : null; var isSealed : false; var isFinal : false; var isInterface : false; var statics : []; var staticFields : []; } abcWriter.writeClass (classDef); }*/ for (asset in assets) { #if format try { if (asset.type != AssetType.TEMPLATE && embedAsset(asset, packageName, tags)) { inserted = true; } } catch (e:Dynamic) { Sys.println("Error embedding \"" + asset.sourcePath + "\": " + e); } #end } tags.push(TShowFrame); if (inserted) { var swf:SWF = {header: header, tags: tags}; var output = File.write(destination + "/assets.swf", true); var writer = new Writer(output); writer.write(swf); output.close(); } #end } /*private static function compileSWC (project:HXProject, embed:String, id:Int):Void { var destination = project.app.path + "/flash/obj"; System.mkdir (destination); var label = (id > 0 ? Std.string (id + 1) : ""); File.saveContent (destination + "/EmbeddedAssets.hx", embed); var args = [ "EmbeddedAssets", "-cp", destination, "-D", "swf-preloader-frame", "-swf", destination + "/assets.swf" ]; if (id == 0) { var header = args.push ("-swf-header"); args.push ((project.window.width == 0 ? 800 : project.window.width) + ":" + (project.window.height == 0 ? 500 : project.window.height) + ":" + project.window.fps + ":" + StringTools.hex (project.window.background, 6)); } else { if (FileSystem.exists (destination + "/assets.swf")) { System.copyFile (destination + "/assets.swf", destination + "/.assets.swf"); } // Have to daisy-chain it to fix Haxe compiler issue args.push ("-swf-lib"); args.push (destination + "/.assets.swf"); args.push ("-D"); args.push ("flash-use-stage"); } System.runCommand ("", "haxe", args); if (FileSystem.exists (destination + "/.assets.swf")) { try { FileSystem.deleteFile (destination + "/.assets.swf"); } catch (e:Dynamic) {} } }*/ public static function embedAssets(project:HXProject, targetDirectory:String):Bool { var embed = ""; var assets:Array = []; var maxSize = 1024 * 1024 * 16; var currentSize = 0; var id = 0; var tempFiles:Array = []; for (asset in project.assets) { if (asset.embed == null || asset.embed == true) { // Log.info ("", " - \x1b[1mEmbedding asset:\x1b[0m \x1b[3;37m(" + asset.type + ")\x1b[0m " + asset.sourcePath); var flashClass = switch (asset.type) { case MUSIC: "flash.media.Sound"; case SOUND: "flash.media.Sound"; case IMAGE: "flash.display.BitmapData"; case FONT: "flash.text.Font"; default: "flash.utils.ByteArray"; } var tagName = switch (asset.type) { case MUSIC: "@:sound"; case SOUND: "@:sound"; case IMAGE: "@:bitmap"; case FONT: "@:font"; default: "@:file"; } var ignoreAsset = false; var sourcePath:String = null; if (asset.data != null) { sourcePath = System.getTemporaryFile(); tempFiles.push(sourcePath); if (asset.encoding == AssetEncoding.BASE64) { File.saveBytes(sourcePath, Base64.decode(asset.data)); } else if ((asset.data is Bytes)) { File.saveBytes(sourcePath, asset.data); } else { File.saveContent(sourcePath, Std.string(asset.data)); } } else { sourcePath = asset.sourcePath; } try { var stat = FileSystem.stat(sourcePath); if (stat.size >= maxSize) { Sys.println("Warning: Cannot embed large file \"" + sourcePath + "\" (>16MB)"); ignoreAsset = true; } else { /*if (currentSize + stat.size >= maxSize) { //compileSWC (project, embed, id); compileSWC (project, assets, id); id++; currentSize = 0; embed = ""; assets = []; }*/ currentSize += stat.size; } } catch (e:Dynamic) { Sys.println("Warning: Could not access \"" + sourcePath + "\", does the file exist?"); ignoreAsset = true; } if (ignoreAsset) { embed += "@:keep class __ASSET__" + asset.flatName + " extends " + flashClass + " { }\n"; } else { assets.push(asset); if (asset.type == IMAGE) { embed += "@:keep " + tagName + "('" + sourcePath + "') class __ASSET__" + asset.flatName + " extends " + flashClass + " { public function new () { super (0, 0, true, 0); } }\n"; } else { embed += "@:keep " + tagName + "('" + sourcePath + "') class __ASSET__" + asset.flatName + " extends " + flashClass + " { }\n"; } } } } if (embed != "") { // compileSWC (project, embed, id); compileSWC(project, assets, id, targetDirectory); } for (tempFile in tempFiles) { try { FileSystem.deleteFile(tempFile); } catch (e:Dynamic) {} } if (assets.length > 0) { project.haxeflags.push("-cp " + targetDirectory); project.haxeflags.push("-swf-lib obj/assets.swf"); project.haxedefs.set("flash-use-stage", ""); return true; } return false; } public static function getLogLength():Int { try { var path = switch (System.hostPlatform) { case WINDOWS: Path.escape(Sys.getEnv("APPDATA") + "/Macromedia/Flash Player/Logs/flashlog.txt"); case MAC: Sys.getEnv("HOME") + "/Library/Preferences/Macromedia/Flash Player/Logs/flashlog.txt"; default: Sys.getEnv("HOME") + "/.macromedia/Flash_Player/Logs/flashlog.txt"; } if (FileSystem.exists(path)) { return FileSystem.stat(path).size; } } catch (e:Dynamic) {} return 0; } private static function nextAssetID() { return swfAssetID++; } public static function run(project:HXProject, workingDirectory:String, targetPath:String):Void { var player:String = null; if (!StringTools.endsWith(targetPath, ".html")) { if (project.environment.exists("SWF_PLAYER")) { player = project.environment.get("SWF_PLAYER"); } else { player = Sys.getEnv("FLASH_PLAYER_EXE"); } } System.openFile(workingDirectory, targetPath, player); } public static function tailLog(start:Int = 0, clear:Bool = true):Void { try { var path = switch (System.hostPlatform) { case WINDOWS: Sys.getEnv("APPDATA") + "/Macromedia/Flash Player/Logs/flashlog.txt"; case MAC: Sys.getEnv("HOME") + "/Library/Preferences/Macromedia/Flash Player/Logs/flashlog.txt"; default: Sys.getEnv("HOME") + "/.macromedia/Flash_Player/Logs/flashlog.txt"; } var position = start; if (FileSystem.exists(path)) { if (clear) { try { File.saveContent(path, ""); position = 0; } catch (e:Dynamic) {} } while (true) { var input:FileInput = null; try { input = File.read(path, false); input.seek(position, FileSeek.SeekBegin); if (!input.eof()) { var bytes = input.readAll(); position = input.tell(); if (bytes.length > 0) { Sys.print(bytes.getString(0, bytes.length)); } } input.close(); } catch (e:Dynamic) { if (input != null) { input.close(); } } Sys.sleep(0.3); } } } catch (e:Dynamic) {} } } ================================================ FILE: src/lime/tools/GUID.hx ================================================ package lime.tools; import haxe.crypto.Sha1; import haxe.io.Bytes; import haxe.crypto.Crc32; // https://groups.google.com/d/msg/haxelang/N03kf5WSrTU/KU8nmsaqfIIJ class GUID { inline public static function randomIntegerWithinRange(min:Int, max:Int, ?seeded:Bool = false):Int { return seeded ? Math.floor(GUID.seededRandom() * (1 + max - min) + min) : Math.floor(Math.random() * (1 + max - min) + min); } public static function createRandomIdentifier(length:Int, radix:Int = 61, ?seeded:Bool = false):String { var characters = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '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', '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' ]; var id:Array = new Array(); radix = (radix > 61) ? 61 : radix; while (length-- > 0) { id.push(characters[GUID.randomIntegerWithinRange(0, radix, seeded)]); } return id.join(''); } public static function uuid(?seeded:Bool = false):String { var specialChars = ['8', '9', 'A', 'B']; return "{" + GUID.createRandomIdentifier(8, 15, seeded) + '-' + GUID.createRandomIdentifier(4, 15, seeded) + '-4' + GUID.createRandomIdentifier(3, 15, seeded) + '-' + specialChars[GUID.randomIntegerWithinRange(0, 3, seeded)] + GUID.createRandomIdentifier(3, 15, seeded) + '-' + GUID.createRandomIdentifier(12, 15, seeded) + "}"; } private static var seed:Int = 0; private static function setSeed(input:String):Int { var inputBytes = Bytes.ofString(input); var hashedBytes = Sha1.make(inputBytes); return GUID.seed = Crc32.make(hashedBytes); } private static function seededRandom():Float { GUID.seed++; var x = Math.sin(GUID.seed) * 10000; return x - Math.floor(x); } public static function seededUuid(seed:String):String { GUID.setSeed(seed); return uuid(true); } } ================================================ FILE: src/lime/tools/HTML5Helper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.Architecture; import lime.tools.Asset; import lime.tools.HXProject; import lime.tools.Platform; import sys.FileSystem; import sys.io.File; #if neko import neko.vm.Thread; #elseif cpp import cpp.vm.Thread; #end class HTML5Helper { public static function encodeSourceMappingURL(sourceFile:String) { // This is only required for projects with url-unsafe characters built with a Haxe version prior to 4.0.0 var filename = Path.withoutDirectory(sourceFile); if (filename != StringTools.urlEncode(filename)) { var output = System.runProcess("", "haxe", ["-version"], true, true, true, false, true); var haxeVer:Version = StringTools.trim(output); if (haxeVer < ("4.0.0":Version)) { var replaceString = "//# sourceMappingURL=" + filename + ".map"; var replacement = "//# sourceMappingURL=" + StringTools.urlEncode(filename) + ".map"; System.replaceText(sourceFile, replaceString, replacement); } } } // public static function generateFontData (project:HXProject, font:Asset):String { // var sourcePath = font.sourcePath; // if (!FileSystem.exists (FileSystem.fullPath (sourcePath) + ".hash")) { // var templatePaths = [ Path.combine (Haxelib.getPath (new Haxelib (#if lime "lime" #else "hxp" #end)), "templates") ].concat (project.templatePaths); // System.runCommand (Path.directory (sourcePath), "neko", [ System.findTemplate (templatePaths, "bin/hxswfml.n"), "ttf2hash2", Path.withoutDirectory (sourcePath), FileSystem.fullPath (sourcePath) + ".hash", "-glyphs", font.glyphs ]); // } // return "-resource " + FileSystem.fullPath (sourcePath) + ".hash@__ASSET__" + font.flatName; // } public static function generateWebfonts(project:HXProject, font:Asset):Void { var suffix = switch (System.hostPlatform) { case WINDOWS: "-windows.exe"; case MAC: "-mac"; case LINUX: "-linux"; default: return; } if (suffix == "-linux") { if (System.hostArchitecture == X86) { suffix += "32"; } else { suffix += "64"; } } var templatePaths = [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), #if lime "templates" #else "" #end) ].concat(project.templatePaths); var webify = System.findTemplate(templatePaths, "bin/webify" + suffix); if (System.hostPlatform != WINDOWS) { Sys.command("chmod", ["+x", webify]); } if (Log.verbose) { System.runCommand("", webify, [FileSystem.fullPath(font.sourcePath)]); } else { System.runProcess("", webify, [FileSystem.fullPath(font.sourcePath)], true, true, true); } } public static function launch(project:HXProject, path:String, port:Int = 0):Void { if (project.app.url != null && project.app.url != "") { System.openURL(project.app.url); } else { var suffix = switch (System.hostPlatform) { case WINDOWS: "-windows.exe"; case MAC: "-mac"; case LINUX: "-linux"; default: return; } if (suffix == "-linux") { if (System.hostArchitecture == X86) { suffix += "32"; } else if( System.hostArchitecture == ARMV7) { suffix += "Arm"; } else if( System.hostArchitecture == ARM64) { suffix += "Arm64"; } else { suffix += "64"; } } var templatePaths = [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), #if lime "templates" #else "" #end) ].concat(project.templatePaths); var node = System.findTemplate(templatePaths, "bin/node/node" + suffix); var server = System.findTemplate(templatePaths, "bin/node/http-server/bin/http-server"); if (System.hostPlatform != WINDOWS) { Sys.command("chmod", ["+x", node]); } var args = [server, path, "-c-1", "--cors"]; if (project.targetFlags.exists("port")) { port = Std.parseInt(project.targetFlags.get("port")); } if (port != 0) { args.push("-p"); args.push(Std.string(port)); Log.info("", "\x1b[1mStarting local web server:\x1b[0m http://localhost:" + port); } else { Log.info("", "\x1b[1mStarting local web server:\x1b[0m http://localhost:[3000*]"); } if (!project.targetFlags.exists("nolaunch")) { args.push("-o"); } if (!Log.verbose) { args.push("--silent"); } System.runCommand("", node, args); } } public static function minify(project:HXProject, sourceFile:String):Bool { if (FileSystem.exists(sourceFile)) { var tempFile = System.getTemporaryFile(".js"); if (project.targetFlags.exists("terser")) { var executable = "npx"; var terser = "terser"; if (!project.targetFlags.exists("npx")) { var suffix = switch (System.hostPlatform) { case WINDOWS: "-windows.exe"; case MAC: "-mac"; case LINUX: "-linux"; default: return false; } if (suffix == "-linux") { if (System.hostArchitecture == X86) { suffix += "32"; } else { suffix += "64"; } } var templatePaths = [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), #if lime "templates" #else "" #end) ].concat(project.templatePaths); executable = System.findTemplate(templatePaths, "bin/node/node" + suffix); terser = System.findTemplate(templatePaths, "bin/node/terser/bin/terser"); if (System.hostPlatform != WINDOWS) { Sys.command("chmod", ["+x", executable]); } } var args = [ terser, sourceFile, "-c", "-m", "-o", tempFile ]; if (FileSystem.exists(sourceFile + ".map")) { args.push("--source-map"); args.push('content=\'${sourceFile}.map\''); } System.runCommand("", executable, args); } else if (project.targetFlags.exists("yui")) { var templatePaths = [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), #if lime "templates" #else "" #end) ].concat(project.templatePaths); System.runCommand("", "java", [ "-Dapple.awt.UIElement=true", "-jar", System.findTemplate(templatePaths, "bin/yuicompressor-2.4.7.jar"), "-o", tempFile, sourceFile ]); } else { var executable:String; var args:Array; if (project.targetFlags.exists("npx")) { executable = "npx"; args = [ "google-closure-compiler" ]; } else { executable = "java"; var templatePaths = [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), #if lime "templates" #else "" #end) ].concat(project.templatePaths); args = [ "-Dapple.awt.UIElement=true", "-jar", System.findTemplate(templatePaths, "bin/compiler.jar"), ]; } args.push("--strict_mode_input"); args.push("false"); args.push("--js"); args.push(sourceFile); args.push("--js_output_file"); args.push(tempFile); if (project.targetFlags.exists("advanced")) { args.push("--compilation_level"); args.push("ADVANCED_OPTIMIZATIONS"); } if (FileSystem.exists(sourceFile + ".map") || project.targetFlags.exists("source-map")) { // if an input .js.map exists closure automatically detects it (from sourceMappingURL) // --source_map_location_mapping adds file:// to paths (similarly to haxe's .js.map) args.push("--create_source_map"); args.push(tempFile + ".map"); args.push("--source_map_location_mapping"); args.push("/|file:///"); } if (!Log.verbose) { args.push("--jscomp_off=uselessCode"); args.push("--jscomp_off=suspiciousCode"); // avoid warnings caused by the embedded minified libraries } System.runCommand("", executable, args); if (FileSystem.exists(tempFile + ".map")) { // closure does not include a sourceMappingURL in the created .js, we do it here #if !nodejs var f = File.append(tempFile); f.writeString("//# sourceMappingURL=" + StringTools.urlEncode(Path.withoutDirectory(sourceFile)) + ".map"); f.close(); #end File.copy(tempFile + ".map", sourceFile + ".map"); FileSystem.deleteFile(tempFile + ".map"); } } FileSystem.deleteFile(sourceFile); File.copy(tempFile, sourceFile); FileSystem.deleteFile(tempFile); return true; } return false; } } ================================================ FILE: src/lime/tools/HXProject.hx ================================================ package lime.tools; import haxe.io.Eof; import haxe.Json; import haxe.Serializer; import haxe.Unserializer; import hxp.*; import lime.tools.Architecture; import lime.tools.AssetType; import lime.tools.Platform; import sys.FileSystem; import sys.io.File; import sys.io.Process; #if (haxe_ver >= 4) import haxe.xml.Access; #else import haxe.xml.Fast as Access; #end #if (lime && lime_cffi && !macro) import lime.text.Font; @:access(lime.text.Font) #end class HXProject extends Script { public var app:ApplicationData; public var architectures:Array; public var assets:Array; // public var command:String; public var config:ConfigData; public var debug:Bool; // public var defines:Map; public var dependencies:Array; public var environment:Map; public var excludeArchitectures:Array; public var haxedefs:Map; public var haxeflags:Array; public var haxelibs:Array; public var host(get, null):Platform; public var icons:Array; public var javaPaths:Array; public var keystore:Keystore; public var languages:Array; public var launchStoryboard:LaunchStoryboard; public var libraries:Array; public var libraryHandlers:Map; public var meta:MetaData; public var modules:Map; public var ndlls:Array; public var platformType:PlatformType; public var postBuildCallbacks:Array; public var preBuildCallbacks:Array; public var samplePaths:Array; public var sources:Array; public var splashScreens:Array; public var target:Platform; public var targetFlags:Map; public var targetHandlers:Map; public var templateContext(get, null):Dynamic; public var templatePaths:Array; @:isVar public var window(get, set):WindowData; public var windows:Array; public var projectFilePath:String; private var needRerun:Bool; public static var _command:String; public static var _debug:Bool; public static var _environment:Map; public static var _target:Platform; public static var _targetFlags:Map; public static var _templatePaths:Array; public static var _userDefines:Map; private static var initialized:Bool; public static function main() { var args = Sys.args(); if (args.length < 2) { return; } var inputData = Unserializer.run(File.getContent(args[0])); var outputFile = args[1]; HXProject._command = inputData.command; HXProject._target = inputData.target; HXProject._debug = inputData.debug; HXProject._targetFlags = inputData.targetFlags; HXProject._templatePaths = inputData.templatePaths; HXProject._userDefines = inputData.userDefines; HXProject._environment = inputData.environment; Log.verbose = inputData.logVerbose; Log.enableColor = inputData.logEnableColor; #if lime System.dryRun = inputData.processDryRun; #end Haxelib.debug = inputData.haxelibDebug; initializeStatics(); var classRef = Type.resolveClass(inputData.name); if (classRef == null) { Log.error('Unable to find class ${ inputData.name } in ${ inputData.projectFile }'); return; } var instance = Type.createInstance(classRef, []); var serializer = new Serializer(); serializer.useCache = true; serializer.serialize(instance); File.saveContent(outputFile, serializer.toString()); } public function new(defines:Map = null) { super(); initializeStatics(); command = _command; config = new ConfigData(); debug = _debug; target = _target; targetFlags = MapTools.copy(_targetFlags); templatePaths = _templatePaths.copy(); platformType = PlatformType.DESKTOP; architectures = []; excludeArchitectures = []; platformType = switch (target) { case AIR if (targetFlags.exists("ios") || targetFlags.exists("android")): PlatformType.MOBILE; case FLASH, HTML5, FIREFOX, WEB_ASSEMBLY: PlatformType.WEB; case ANDROID, BLACKBERRY, IOS, TIZEN, WEBOS, TVOS: PlatformType.MOBILE; case WINDOWS, MAC, LINUX, AIR: PlatformType.DESKTOP; default: // TODO: Better handling of platform type for pluggable targets PlatformType.CONSOLE; } if (target == WINDOWS && targetFlags.exists("uwp") || targetFlags.exists("winjs")) { targetFlags.set("uwp", ""); targetFlags.set("winjs", ""); } meta = {}; app = {}; window = {}; windows = [window]; assets = new Array(); if (defines != null) { this.defines = MapTools.copy(defines); } else if (_userDefines != null) { this.defines = MapTools.copy(_userDefines); } else { this.defines = new Map(); } dependencies = new Array(); if (_environment != null) { environment = _environment; } else { environment = Sys.environment(); for (conflict in ["air", "android", "cpp", "flash", "hl", "html5", "ios", "linux", "mac", "neko", "webassembly", "windows"]) { environment.remove(conflict); } } haxedefs = new Map(); haxeflags = new Array(); haxelibs = new Array(); icons = new Array(); javaPaths = new Array(); languages = new Array(); libraries = new Array(); libraryHandlers = new Map(); modules = new Map(); ndlls = new Array(); postBuildCallbacks = new Array(); preBuildCallbacks = new Array(); sources = new Array(); samplePaths = new Array(); splashScreens = new Array(); targetHandlers = new Map(); initializeDefines(); } public function clone():HXProject { var project = new HXProject(); ObjectTools.copyFields(app, project.app); project.architectures = architectures.copy(); project.assets = assets.copy(); for (i in 0...assets.length) { project.assets[i] = assets[i].clone(); } project.command = command; project.config = config.clone(); project.debug = debug; for (key in defines.keys()) { project.defines.set(key, defines.get(key)); } for (dependency in dependencies) { project.dependencies.push(dependency.clone()); } for (key in environment.keys()) { project.environment.set(key, environment.get(key)); } project.excludeArchitectures = excludeArchitectures.copy(); for (key in haxedefs.keys()) { project.haxedefs.set(key, haxedefs.get(key)); } project.haxeflags = haxeflags.copy(); for (haxelib in haxelibs) { project.haxelibs.push(haxelib.clone()); } for (icon in icons) { project.icons.push(icon.clone()); } project.javaPaths = javaPaths.copy(); if (keystore != null) { project.keystore = keystore.clone(); } project.languages = languages.copy(); if (launchStoryboard != null) { project.launchStoryboard = launchStoryboard.clone(); } for (library in libraries) { project.libraries.push(library.clone()); } for (key in libraryHandlers.keys()) { project.libraryHandlers.set(key, libraryHandlers.get(key)); } ObjectTools.copyFields(meta, project.meta); for (key in modules.keys()) { project.modules.set(key, modules.get(key).clone()); } for (ndll in ndlls) { project.ndlls.push(ndll.clone()); } project.platformType = platformType; project.postBuildCallbacks = postBuildCallbacks.copy(); project.preBuildCallbacks = preBuildCallbacks.copy(); project.samplePaths = samplePaths.copy(); project.sources = sources.copy(); for (splashScreen in splashScreens) { project.splashScreens.push(splashScreen.clone()); } project.target = target; for (key in targetFlags.keys()) { project.targetFlags.set(key, targetFlags.get(key)); } for (key in targetHandlers.keys()) { project.targetHandlers.set(key, targetHandlers.get(key)); } project.templatePaths = templatePaths.copy(); for (i in 0...windows.length) { project.windows[i] = (ObjectTools.copyFields(windows[i], {})); } return project; } private function filter(text:String, include:Array = null, exclude:Array = null):Bool { if (include == null) { include = ["*"]; } if (exclude == null) { exclude = []; } for (filter in exclude) { if (filter != "") { filter = StringTools.replace(filter, ".", "\\."); filter = StringTools.replace(filter, "*", ".*"); var regexp = new EReg("^" + filter + "$", "i"); if (regexp.match(text)) { return false; } } } for (filter in include) { if (filter != "") { filter = StringTools.replace(filter, ".", "\\."); filter = StringTools.replace(filter, "*", ".*"); var regexp = new EReg("^" + filter, "i"); if (regexp.match(text)) { return true; } } } return false; } public static function fromFile(projectFile:String, userDefines:Map = null, includePaths:Array = null):HXProject { var project:HXProject = null; var path = FileSystem.fullPath(Path.withoutDirectory(projectFile)); var name = Path.withoutDirectory(Path.withoutExtension(projectFile)); name = name.charAt(0).toUpperCase() + name.substr(1); var tempDirectory = FileSystem.fullPath(System.getTemporaryDirectory()); var classFile = Path.combine(tempDirectory, name + ".hx"); System.copyFile(path, classFile); var args = [ name, #if lime "-lib", "lime", "-lib", "hxp", #end "-cp", tempDirectory, "-cp", Path.combine(Haxelib.getPath(new Haxelib("hxp")), "src") ]; var input = File.read(classFile, false); var tag = "@:compiler("; try { while (true) { var line = input.readLine(); if (StringTools.startsWith(line, tag)) { args.push(line.substring(tag.length + 1, line.length - 2)); } } } catch (ex:Eof) {} input.close(); var cacheDryRun = System.dryRun; System.dryRun = false; var inputFile = Path.combine(tempDirectory, "input.dat"); var outputFile = Path.combine(tempDirectory, "output.dat"); var inputData = Serializer.run( { command: HXProject._command, name: name, target: HXProject._target, debug: HXProject._debug, projectFile: projectFile, targetFlags: HXProject._targetFlags, templatePaths: HXProject._templatePaths, userDefines: HXProject._userDefines, environment: HXProject._environment, logVerbose: Log.verbose, logEnableColor: Log.enableColor, processDryRun: cacheDryRun, haxelibDebug: Haxelib.debug }); File.saveContent(inputFile, inputData); try { #if (lime && !eval) var nekoOutput = Path.combine(tempDirectory, name + ".n"); System.runCommand("", "haxe", args.concat(["-main", "lime.tools.HXProject", "-neko", nekoOutput])); System.runCommand("", "neko", [nekoOutput, inputFile, outputFile]); #else System.runCommand("", "haxe", args.concat(["--run", "lime.tools.HXProject", inputFile, outputFile])); #end } catch (e:Dynamic) { Log.error(Std.string(e)); FileSystem.deleteFile(inputFile); Sys.exit(1); } System.dryRun = cacheDryRun; var tPaths:Array = []; try { FileSystem.deleteFile(inputFile); var outputPath = Path.combine(tempDirectory, "output.dat"); if (FileSystem.exists(outputPath)) { var output = File.getContent(outputPath); var unserializer = new Unserializer(output); unserializer.setResolver(cast {resolveEnum: Type.resolveEnum, resolveClass: resolveClass}); project = unserializer.unserialize(); // Because the project file template paths need to take priority, // Add them after loading template paths from haxelibs below tPaths = project.templatePaths; project.templatePaths = []; FileSystem.deleteFile(outputPath); } } catch (e:Dynamic) {} System.removeDirectory(tempDirectory); if (project != null) { for (key in project.environment.keys()) { Sys.putEnv(key, project.environment[key]); } var defines = MapTools.copyDynamic(userDefines); MapTools.copyKeys(project.defines, defines); processHaxelibs(project, defines); // Adding template paths from the Project file project.templatePaths = ArrayTools.concatUnique(project.templatePaths, tPaths, true); } return project; } public static function fromHaxelib(haxelib:Haxelib, userDefines:Map = null, clearCache:Bool = false):HXProject { if (haxelib.name == null || haxelib.name == "") { return null; } var path = Haxelib.getPath(haxelib, false, clearCache); if (path == null || path == "") { return null; } // if (!userDefines.exists (haxelib.name)) { // // userDefines.set (haxelib.name, Haxelib.getVersion (haxelib)); // // } return HXProject.fromPath(path, userDefines); } public static function fromPath(directory:String, userDefines:Map = null):HXProject { if (!FileSystem.exists(directory) || !FileSystem.isDirectory(directory)) { return null; } var files = ["include.lime", "include.nmml", "include.xml", "include.hxp"]; var projectFile:String = null; for (file in files) { if (FileSystem.exists(Path.combine(directory, file))) { projectFile = Path.combine(directory, file); break; } } var project:HXProject = null; if (projectFile != null) { if (StringTools.endsWith(projectFile, ".hxp")) { var cwd = Sys.getCwd(); Sys.setCwd(directory); project = HXProject.fromFile(projectFile, userDefines); Sys.setCwd(cwd); } else { project = new ProjectXMLParser(projectFile, userDefines); } if (project.config.get("project.rebuild.path") == null) { project.config.set("project.rebuild.path", Path.combine(directory, "project")); } } return project; } private function getHaxelibVersion(haxelib:Haxelib):String { var version = haxelib.version; if (version == "" || version == null) { var haxelibPath = Haxelib.getPath(haxelib); var jsonPath = Path.combine(haxelibPath, "haxelib.json"); try { if (FileSystem.exists(jsonPath)) { var json = Json.parse(File.getContent(jsonPath)); version = json.version; } } catch (e:Dynamic) {} } return version; } public function include(path:String):Void { // extend project file somehow? } public function includeAssets(path:String, rename:String = null, include:Array = null, exclude:Array = null):Void { if (include == null) { include = ["*"]; } if (exclude == null) { exclude = []; } exclude = exclude.concat([".*", "cvs", "thumbs.db", "desktop.ini", "*.hash"]); if (path == "") { return; } var targetPath = ""; if (rename != null) { targetPath = rename; } else { targetPath = path; } if (!FileSystem.exists(path)) { Log.error("Could not find asset path \"" + path + "\""); return; } var files = FileSystem.readDirectory(path); if (targetPath != "") { targetPath += "/"; } for (file in files) { if (FileSystem.isDirectory(path + "/" + file)) { if (filter(file, ["*"], exclude)) { includeAssets(path + "/" + file, targetPath + file, include, exclude); } } else { if (filter(file, include, exclude)) { assets.push(new Asset(path + "/" + file, targetPath + file)); } } } } // #if lime public function includeXML(xml:String):Void { var projectXML = new ProjectXMLParser(); @:privateAccess projectXML.parseXML(new Access(Xml.parse(xml).firstElement()), ""); merge(projectXML); } // #end private function initializeDefines():Void { switch (platformType) { case MOBILE: defines.set("platformType", "mobile"); defines.set("mobile", "1"); case DESKTOP: defines.set("platformType", "desktop"); defines.set("desktop", "1"); case WEB: defines.set("platformType", "web"); defines.set("web", "1"); case CONSOLE: defines.set("platformType", "console"); defines.set("console", "1"); } if (targetFlags.exists("neko")) { defines.set("targetType", "neko"); defines.set("native", "1"); defines.set("neko", "1"); } else if (targetFlags.exists("hl")) { defines.set("targetType", "hl"); defines.set("native", "1"); defines.set("hl", "1"); if (targetFlags.exists("hlc")) { defines.set("hlc", "1"); } } else if (targetFlags.exists("java")) { defines.set("targetType", "java"); defines.set("native", "1"); defines.set("java", "1"); } else if (targetFlags.exists("nodejs")) { defines.set("targetType", "nodejs"); defines.set("native", "1"); defines.set("nodejs", "1"); } else if (targetFlags.exists("cs")) { defines.set("targetType", "cs"); defines.set("native", "1"); defines.set("cs", "1"); } else if (target == Platform.FIREFOX) { defines.set("targetType", "js"); defines.set("html5", "1"); } else if (target == Platform.AIR) { defines.set("targetType", "swf"); defines.set("flash", "1"); if (targetFlags.exists("ios")) defines.set("ios", "1"); if (targetFlags.exists("android")) defines.set("android", "1"); } else if (target == Platform.WINDOWS && (targetFlags.exists("uwp") || targetFlags.exists("winjs"))) { targetFlags.set("uwp", ""); targetFlags.set("winjs", ""); defines.set("targetType", "js"); defines.set("html5", "1"); defines.set("uwp", "1"); defines.set("winjs", "1"); } else if (platformType == DESKTOP && target != System.hostPlatform) { defines.set("native", "1"); if (target == Platform.LINUX && targetFlags.exists("cpp")) { defines.set("targetType", "cpp"); defines.set("cpp", "1"); } else if (target == Platform.WINDOWS && (targetFlags.exists("cpp") || targetFlags.exists("mingw"))) { defines.set("targetType", "cpp"); defines.set("cpp", "1"); defines.set("mingw", "1"); } else { targetFlags.set("neko", "1"); defines.set("targetType", "neko"); defines.set("neko", "1"); } } else if (target == Platform.WEB_ASSEMBLY) { defines.set("webassembly", "1"); defines.set("wasm", "1"); defines.set("emscripten", "1"); defines.set("targetType", "cpp"); defines.set("native", "1"); defines.set("cpp", "1"); } else if (targetFlags.exists("cpp") || ((platformType != PlatformType.WEB) && !targetFlags.exists("html5"))) { defines.set("targetType", "cpp"); defines.set("native", "1"); defines.set("cpp", "1"); } else if (target == Platform.FLASH) { defines.set("targetType", "swf"); } if (debug) { defines.set("buildType", "debug"); defines.set("debug", "1"); } else if (targetFlags.exists("final")) { defines.set("buildType", "final"); defines.set("final", "1"); } else { defines.set("buildType", "release"); defines.set("release", "1"); } if (targetFlags.exists("static")) { defines.set("static_link", "1"); } if (defines.exists("SWF_PLAYER")) { environment.set("SWF_PLAYER", defines.get("SWF_PLAYER")); } defines.set(Std.string(target).toLowerCase(), "1"); defines.set("target", Std.string(target).toLowerCase()); defines.set("platform", defines.get("target")); switch (System.hostPlatform) { case WINDOWS: defines.set("host", "windows"); case MAC: defines.set("host", "mac"); case LINUX: defines.set("host", "linux"); default: defines.set("host", "unknown"); } #if lime defines.set("lime-tools", "1"); #end defines.set("hxp", "1"); // TODO: Version? } private static function initializeStatics():Void { if (!initialized) { if (_target == null) { _target = System.hostPlatform; } if (_targetFlags == null) { _targetFlags = new Map(); } if (_templatePaths == null) { _templatePaths = new Array(); } initialized = true; } } public function merge(project:HXProject):Void { if (project != null) { ObjectTools.copyFields(project.meta, meta); ObjectTools.copyFields(project.app, app); for (i in 0...project.windows.length) { if (i < windows.length) { ObjectTools.copyFields(project.windows[i], windows[i]); } else { windows.push(ObjectTools.copyFields(project.windows[i], {})); } } MapTools.copyUniqueKeys(project.defines, defines); MapTools.copyUniqueKeys(project.environment, environment); MapTools.copyUniqueKeysDynamic(project.haxedefs, haxedefs); MapTools.copyUniqueKeys(project.libraryHandlers, libraryHandlers); MapTools.copyUniqueKeys(project.targetFlags, targetFlags); MapTools.copyUniqueKeys(project.targetHandlers, targetHandlers); config.merge(project.config); architectures = ArrayTools.concatUnique(architectures, project.architectures); assets = ArrayTools.concatUnique(assets, project.assets); dependencies = ArrayTools.concatUnique(dependencies, project.dependencies, true); excludeArchitectures = ArrayTools.concatUnique(excludeArchitectures, project.excludeArchitectures); haxeflags = ArrayTools.concatUnique(haxeflags, project.haxeflags); haxelibs = ArrayTools.concatUnique(haxelibs, project.haxelibs, true, "name"); icons = ArrayTools.concatUnique(icons, project.icons); javaPaths = ArrayTools.concatUnique(javaPaths, project.javaPaths, true); if (keystore == null) { keystore = project.keystore; } else { keystore.merge(project.keystore); } if (launchStoryboard == null) { launchStoryboard = project.launchStoryboard; } else { launchStoryboard.merge(project.launchStoryboard); } if (projectFilePath == null) { projectFilePath = project.projectFilePath; } languages = ArrayTools.concatUnique(languages, project.languages, true); libraries = ArrayTools.concatUnique(libraries, project.libraries, true); for (key in project.modules.keys()) { if (modules.exists(key)) { modules.get(key).merge(project.modules.get(key)); } else { modules.set(key, project.modules.get(key)); } } ndlls = ArrayTools.concatUnique(ndlls, project.ndlls); postBuildCallbacks = postBuildCallbacks.concat(project.postBuildCallbacks); preBuildCallbacks = preBuildCallbacks.concat(project.preBuildCallbacks); samplePaths = ArrayTools.concatUnique(samplePaths, project.samplePaths, true); sources = ArrayTools.concatUnique(sources, project.sources, true); splashScreens = ArrayTools.concatUnique(splashScreens, project.splashScreens); templatePaths = ArrayTools.concatUnique(templatePaths, project.templatePaths, true); } } public function path(value:String):Void { if (host == Platform.WINDOWS) { setenv("PATH", value + ";" + Sys.getEnv("PATH")); } else { setenv("PATH", value + ":" + Sys.getEnv("PATH")); } } // #if lime @:noCompletion private static function processHaxelibs(project:HXProject, userDefines:Map):Void { var haxelibs = project.haxelibs.copy(); project.haxelibs = []; for (haxelib in haxelibs) { var validatePath = Haxelib.getPath(haxelib, true); project.haxelibs.push(haxelib); var includeProject = HXProject.fromHaxelib(haxelib, userDefines); if (includeProject != null) { for (ndll in includeProject.ndlls) { if (ndll.haxelib == null) { ndll.haxelib = haxelib; } } project.merge(includeProject); } } } @:noCompletion private static function resolveClass(name:String):Class { var type = Type.resolveClass(name); if (type == null) { return HXProject; } else { return type; } } // #end public function setenv(name:String, value:String):Void { if (value == null) { environment.remove(name); value = ""; } if (name == "HAXELIB_PATH") { var currentPath = Haxelib.getRepositoryPath(); Sys.putEnv(name, value); var newPath = Haxelib.getRepositoryPath(true); if (currentPath != newPath) { var valid = try { (newPath != null && newPath != "" && FileSystem.exists(FileSystem.fullPath(newPath))); } catch (e:Dynamic) { false; } if (!valid) { Log.error("The specified haxelib repository path \"" + value + "\" does not exist"); } else { needRerun = true; } } } else { Sys.putEnv(name, value); } if (value != "") { environment.set(name, value); } } // Getters & Setters private function get_host():Platform { return System.hostPlatform; } private function get_templateContext():Dynamic { var context:Dynamic = {}; if (app == null) app = {}; if (meta == null) meta = {}; if (window == null) { window = {}; windows = [window]; } // config.populate (); for (field in Reflect.fields(app)) { Reflect.setField(context, "APP_" + StringTools.formatUppercaseVariable(field), Reflect.field(app, field)); } context.BUILD_DIR = app.path; for (key in environment.keys()) { Reflect.setField(context, "ENV_" + key, environment.get(key)); } context.meta = meta; for (field in Reflect.fields(meta)) { Reflect.setField(context, "APP_" + StringTools.formatUppercaseVariable(field), Reflect.field(meta, field)); Reflect.setField(context, "META_" + StringTools.formatUppercaseVariable(field), Reflect.field(meta, field)); } context.APP_PACKAGE = context.META_PACKAGE = meta.packageName; for (field in Reflect.fields(windows[0])) { Reflect.setField(context, "WIN_" + StringTools.formatUppercaseVariable(field), Reflect.field(windows[0], field)); Reflect.setField(context, "WINDOW_" + StringTools.formatUppercaseVariable(field), Reflect.field(windows[0], field)); } if (windows[0].orientation == Orientation.LANDSCAPE || windows[0].orientation == Orientation.PORTRAIT) { context.WIN_ORIENTATION = Std.string(windows[0].orientation).toLowerCase(); context.WINDOW_ORIENTATION = Std.string(windows[0].orientation).toLowerCase(); } else { context.WIN_ORIENTATION = "auto"; context.WINDOW_ORIENTATION = "auto"; } context.windows = windows; for (i in 0...windows.length) { for (field in Reflect.fields(windows[i])) { Reflect.setField(context, "WINDOW_" + StringTools.formatUppercaseVariable(field) + "_" + i, Reflect.field(windows[i], field)); } if (windows[i].orientation == Orientation.LANDSCAPE || windows[i].orientation == Orientation.PORTRAIT) { Reflect.setField(context, "WINDOW_ORIENTATION_" + i, Std.string(windows[i].orientation).toLowerCase()); } else { Reflect.setField(context, "WINDOW_ORIENTATION_" + i, ""); } if (windows[i].title == "") windows[i].title = meta.title; } for (haxeflag in haxeflags) { if (StringTools.startsWith(haxeflag, "-lib")) { Reflect.setField(context, "LIB_" + StringTools.formatUppercaseVariable(haxeflag.substr(5)), "true"); } } context.assets = new Array(); for (asset in assets) { if (asset.type != AssetType.TEMPLATE) { var embeddedAsset:Dynamic = {}; ObjectTools.copyFields(asset, embeddedAsset); embeddedAsset.sourcePath = Path.standardize(asset.sourcePath); if (asset.embed == null) { embeddedAsset.embed = (platformType == PlatformType.WEB || target == AIR); } embeddedAsset.type = Std.string(asset.type).toLowerCase(); #if (lime && lime_cffi && !macro) if (asset.type == FONT) { try { var font = Font.fromFile(asset.sourcePath); embeddedAsset.fontName = font.name; Log.info("", " - \x1b[1mDetecting font name:\x1b[0m " + asset.sourcePath + " \x1b[3;37m->\x1b[0m \"" + font.name + "\""); } catch (e:Dynamic) {} } #end context.assets.push(embeddedAsset); } } context.languages = (languages.length > 0) ? languages : null; context.libraries = new Array(); var embeddedLibraries = new Map(); for (library in libraries) { var embeddedLibrary:Dynamic = {}; ObjectTools.copyFields(library, embeddedLibrary); context.libraries.push(embeddedLibrary); embeddedLibraries[library.name] = embeddedLibrary; } for (asset in assets) { if (asset.library != null && !embeddedLibraries.exists(asset.library)) { var embeddedLibrary:Dynamic = {}; embeddedLibrary.name = asset.library; context.libraries.push(embeddedLibrary); embeddedLibraries[asset.library] = embeddedLibrary; } } context.ndlls = new Array(); for (ndll in ndlls) { var templateNDLL:Dynamic = {}; ObjectTools.copyFields(ndll, templateNDLL); templateNDLL.nameSafe = StringTools.replace(ndll.name, "-", "_"); context.ndlls.push(templateNDLL); } // Reflect.setField (context, "ndlls", ndlls); // Reflect.setField (context, "sslCaCert", sslCaCert); context.sslCaCert = ""; var compilerFlags:Array = []; for (haxelib in haxelibs) { var name = haxelib.name; // TODO: Handle real version when better/smarter haxelib available var version = haxelib.version; // var version = Haxelib.getVersion (haxelib); if (version != null && version != "") { name += ":" + version; } // #if lime if (Haxelib.pathOverrides.exists(name)) { var path = Haxelib.pathOverrides.get(name); var jsonPath = Path.combine(path, "haxelib.json"); var added = false; try { if (FileSystem.exists(jsonPath)) { var json = Json.parse(File.getContent(jsonPath)); if (Reflect.hasField(json, "classPath")) { path = Path.combine(path, json.classPath); } var haxelibName = json.name; compilerFlags = ArrayTools.concatUnique(compilerFlags, ["-D " + haxelibName + "=" + json.version], true); } } catch (e:Dynamic) {} var param = "-cp " + path; compilerFlags.remove(param); compilerFlags.push(param); } else { var cache = Log.verbose; Log.verbose = Haxelib.debug; var output = Haxelib.runProcess("", ["path", name], true, true, true); Log.verbose = cache; var split = output != null ? output.split("\n") : []; var haxelibName:String = null; for (arg in split) { arg = StringTools.trim(arg); if (arg != "") { if (StringTools.startsWith(arg, "Error: ")) { Log.error(arg.substr(7)); } else if (!StringTools.startsWith(arg, "-")) { var path = Path.standardize(arg); if (path != null && StringTools.trim(path) != "" && !StringTools.startsWith(StringTools.trim(path), "#")) { var param = "-cp " + path; compilerFlags.remove(param); compilerFlags.push(param); } var version = "0.0.0"; var jsonPath = Path.combine(path, "haxelib.json"); try { if (FileSystem.exists(jsonPath)) { var json = Json.parse(File.getContent(jsonPath)); haxelibName = json.name; compilerFlags = ArrayTools.concatUnique(compilerFlags, ["-D " + haxelibName + "=" + json.version], true); } } catch (e:Dynamic) {} } else { if (StringTools.startsWith(arg, "-D ") && arg.indexOf("=") == -1) { var name = arg.substr(3); if (name != haxelibName) { compilerFlags = ArrayTools.concatUnique(compilerFlags, ["-D " + name], true); } /*var haxelib = new Haxelib (arg.substr (3)); var path = Haxelib.getPath (haxelib); var version = getHaxelibVersion (haxelib); if (path != null) { CompatibilityHelper.patchProject (this, haxelib, version); compilerFlags = ArrayTools.concatUnique (compilerFlags, [ "-D " + haxelib.name + "=" + version ], true); }*/ } else if (!StringTools.startsWith(arg, "-L")) { compilerFlags = ArrayTools.concatUnique(compilerFlags, [arg], true); } } } } } // #else // compilerFlags.push ("-lib " + name); // #end Reflect.setField(context, "LIB_" + StringTools.formatUppercaseVariable(haxelib.name), true); if (name == "nme") { context.EMBED_ASSETS = false; } } for (source in sources) { if (source != null && StringTools.trim(source) != "") { compilerFlags.push("-cp " + source); } } for (key in defines.keys()) { var value = defines.get(key); if (value == null || value == "") { Reflect.setField(context, "SET_" + StringTools.formatUppercaseVariable(key), true); } else { Reflect.setField(context, "SET_" + StringTools.formatUppercaseVariable(key), value); } } for (key in haxedefs.keys()) { var value = haxedefs.get(key); if (value == null || value == "") { compilerFlags.push("-D " + key); Reflect.setField(context, "DEFINE_" + StringTools.formatUppercaseVariable(key), true); } else { compilerFlags.push("-D " + key + "=" + value); Reflect.setField(context, "DEFINE_" + StringTools.formatUppercaseVariable(key), value); } } if (target != Platform.FLASH) { compilerFlags.push("-D " + Std.string(target).toLowerCase()); } compilerFlags.push("-D " + Std.string(platformType).toLowerCase()); compilerFlags = compilerFlags.concat(haxeflags); if (compilerFlags.length == 0) { context.HAXE_FLAGS = ""; } else { context.HAXE_FLAGS = "\n" + compilerFlags.join("\n"); } var main = app.main; if (main == null) { main = "Main"; } var indexOfPeriod = main.lastIndexOf("."); context.APP_MAIN_PACKAGE = main.substr(0, indexOfPeriod + 1); context.APP_MAIN_CLASS = main.substr(indexOfPeriod + 1); var type = "release"; if (debug) { type = "debug"; } else if (targetFlags.exists("final")) { type = "final"; } var hxml = Std.string(target).toLowerCase() + "/hxml/" + type + ".hxml"; for (templatePath in templatePaths) { var path = Path.combine(templatePath, hxml); if (FileSystem.exists(path)) { context.HXML_PATH = path; } } context.RELEASE = (type == "release"); context.DEBUG = debug; context.FINAL = (type == "final"); context.SWF_VERSION = app.swfVersion; context.PRELOADER_NAME = app.preloader; if (keystore != null) { if (keystore.path != null) { context.KEY_STORE = Path.tryFullPath(keystore.path); } if (keystore.password != null) { context.KEY_STORE_PASSWORD = keystore.password; } if (keystore.alias != null) { context.KEY_STORE_ALIAS = keystore.alias; } else if (keystore.path != null) { context.KEY_STORE_ALIAS = Path.withoutExtension(Path.withoutDirectory(keystore.path)); } if (keystore.aliasPassword != null) { context.KEY_STORE_ALIAS_PASSWORD = keystore.aliasPassword; } else if (keystore.password != null) { context.KEY_STORE_ALIAS_PASSWORD = keystore.password; } } context.config = config; return context; } private function get_window():WindowData { if (windows != null) { return windows[0]; } else { return window; } } private function set_window(value:WindowData):WindowData { if (windows != null) { return windows[0] = window = value; } else { return window = value; } } } ================================================ FILE: src/lime/tools/HashlinkHelper.hx ================================================ package lime.tools; import hxp.Haxelib; import hxp.Log; import sys.FileSystem; import lime.tools.ConfigHelper; import lime.tools.HXProject; import lime.tools.Platform; import hxp.Path; import hxp.System; class HashlinkHelper { public static inline var BUNDLED_HL_VER = "1.14.0"; public static function copyHashlink(project:HXProject, targetDirectory:String, applicationDirectory:String, executablePath:String, ?is64 = true) { var platform = project.target; var bindir = switch project.target { case LINUX: "Linux"; case MAC: "Mac"; case WINDOWS: "Windows"; default: Log.error('HashLink is not supported on ${project.target} (Supported: Windows, Mac and Linux)'); Sys.exit(1); ""; }; if(is64) { bindir += "64"; } var hlPath = ConfigHelper.getConfigValue("HL_PATH"); if (hlPath == null) { System.recursiveCopyTemplate(project.templatePaths, 'bin/hl/$bindir', applicationDirectory); System.renameFile(Path.combine(applicationDirectory, "hl" + (project.target == WINDOWS ? ".exe" : "")), executablePath); if (project.targetFlags.exists("hlc")) { var limeDirectory = Haxelib.getPath(new Haxelib("lime"), true); var includeDirectory = sys.FileSystem.exists(Path.combine(limeDirectory, "project")) ? Path.combine(limeDirectory, "project/lib/hashlink/src") : Path.combine(limeDirectory, "templates/bin/hl/include"); System.copyFile(Path.combine(includeDirectory, "hlc.h"), Path.combine(targetDirectory, "obj/hlc.h"), null, false); System.copyFile(Path.combine(includeDirectory, "hl.h"), Path.combine(targetDirectory, "obj/hl.h"), null, false); System.copyFile(Path.combine(includeDirectory, "hlc_main.c"), Path.combine(targetDirectory, "obj/hlc_main.c"), null, false); } } else { if (!project.targetFlags.exists("hlc")) { System.copyFile(Path.combine(hlPath, "hl" + (platform == WINDOWS ? ".exe" : "")), executablePath); } if (platform == WINDOWS) { System.copyFile(Path.combine(hlPath, "libhl.dll"), Path.combine(applicationDirectory, "libhl.dll")); var msvcrPath = Path.combine(hlPath, "msvcr120.dll"); if (FileSystem.exists(msvcrPath)) { System.copyFile(msvcrPath, Path.combine(applicationDirectory, "msvcr120.dll")); } var vcruntimePath = Path.combine(hlPath, "vcruntime140.dll"); if (FileSystem.exists(vcruntimePath)) { System.copyFile(vcruntimePath, Path.combine(applicationDirectory, "vcruntime140.dll")); } } else if (platform == MAC || platform == IOS) { System.copyFile(Path.combine(hlPath, "libhl.dylib"), Path.combine(applicationDirectory, "libhl.dylib")); } else { System.copyFile(Path.combine(hlPath, "libhl.so"), Path.combine(applicationDirectory, "libhl.so")); } for (file in System.readDirectory(hlPath) .filter(function(f) return Path.extension(f) == "hdll" && Path.withoutDirectory(f) != "sdl.hdll" && Path.withoutDirectory(f) != "openal.hdll")) { System.copyFile(file, Path.combine(applicationDirectory, Path.withoutDirectory(file))); } if (project.targetFlags.exists("hlc")) { for (file in System.readDirectory(Path.combine(hlPath, "include"))) { System.copyFile(file, Path.combine(targetDirectory, Path.combine("obj", Path.withoutDirectory(file)))); } } } // make sure no hxcpp hash files or MSVC build artifacts remain for (file in System.readDirectory(applicationDirectory)) { switch Path.extension(file) { case "hash", "pdb", "ilk", "exp": System.deleteFile(file); case "lib": if (platform != WINDOWS) { System.deleteFile(file); } default: } } if (project.targetFlags.exists("hlc")) { if (sys.FileSystem.exists(executablePath)) { System.deleteFile(executablePath); } var appMainCPath = Path.combine(targetDirectory, "obj/ApplicationMain.c"); var appMainCText = System.readText(appMainCPath); var index = appMainCText.indexOf("#ifndef HL_MAKE"); appMainCText = appMainCText.substr(0, index) + " // --------- START LIME HL/C INJECTED CODE --------- // // undefine things to avoid Haxe field name conflicts #undef BIG_ENDIAN #undef LITTLE_ENDIAN #undef TRUE #undef FALSE #undef BOOLEAN #undef ERROR #undef NO_ERROR #undef DELETE #undef OPTIONS #undef IN #undef OUT #undef ALTERNATE #undef OPTIONAL #undef DOUBLE_CLICK #undef DIFFERENCE #undef POINT #undef RECT #undef OVERFLOW #undef UNDERFLOW #undef DOMAIN #undef TRANSPARENT #undef CONST #undef CopyFile #undef COLOR_HIGHLIGHT #undef __valid #undef WAIT_FAILED // ---------- END LIME HL/C INJECTED CODE ---------- // " + appMainCText.substr(index); System.writeText(appMainCText, appMainCPath); } else { System.copyFile(Path.combine(targetDirectory, "obj/ApplicationMain.hl"), Path.combine(applicationDirectory, "hlboot.dat")); } } } ================================================ FILE: src/lime/tools/IOSHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.Platform; import lime.tools.HXProject; import sys.io.Process; import sys.FileSystem; class IOSHelper { private static var initialized = false; public static function build(project:HXProject, workingDirectory:String, additionalArguments:Array = null):Void { initialize(project); var commands = getXCodeArgs(project); if (project.targetFlags.exists("archive")) { var configuration = project.environment.get("CONFIGURATION"); var platformName = project.environment.get("PLATFORM_NAME"); commands.push("archive"); commands.push("-scheme"); commands.push(project.app.file); commands.push("-archivePath"); commands.push(Path.combine("build", Path.combine(configuration + "-" + platformName, project.app.file))); } else { commands.push("build"); if (project.targetFlags.exists("nosign")) { commands.push("CODE_SIGN_IDENTITY=\"\""); commands.push("CODE_SIGNING_REQUIRED=\"NO\""); commands.push("CODE_SIGN_ENTITLEMENTS=\"\""); commands.push("CODE_SIGNING_ALLOWED=\"NO\""); } } if (additionalArguments != null) { commands = commands.concat(additionalArguments); } System.runCommand(workingDirectory, "xcodebuild", commands); } public static function deploy(project:HXProject, workingDirectory:String):Void { initialize(project); var commands = getXCodeArgs(project); var archiveCommands = commands.concat([]); // generate xcarchive var configuration = project.environment.get("CONFIGURATION"); var platformName = project.environment.get("PLATFORM_NAME"); archiveCommands.push("archive"); archiveCommands.push("-scheme"); archiveCommands.push(project.app.file); archiveCommands.push("-archivePath"); archiveCommands.push(Path.combine("build", Path.combine(configuration + "-" + platformName, project.app.file))); System.runCommand(workingDirectory, "xcodebuild", archiveCommands); var supportedExportMethods = ["adhoc", "development", "enterprise", "appstore"]; var exportMethods:Array = []; for (m in supportedExportMethods) { if (project.targetFlags.exists(m)) { exportMethods.push(m); } } if (exportMethods.length == 0) { exportMethods.push("appstore"); } for (exportMethod in exportMethods) { // generate IPA from xcarchive var exportCommands = commands.concat([]); exportCommands.push("-exportArchive"); exportCommands.push("-archivePath"); exportCommands.push(Path.combine("build", Path.combine(configuration + "-" + platformName, project.app.file + ".xcarchive"))); exportCommands.push("-exportOptionsPlist"); exportCommands.push(Path.combine(project.app.file, "exportOptions-" + exportMethod + ".plist")); exportCommands.push("-exportPath"); exportCommands.push(Path.combine("dist", exportMethod)); System.runCommand(workingDirectory, "xcodebuild", exportCommands); } } private static function getXCodeArgs(project:HXProject):Array { var platformName = "iphoneos"; var iphoneVersion = project.environment.get("IPHONE_VER"); if (project.targetFlags.exists("simulator")) { platformName = "iphonesimulator"; } var configuration = "Release"; if (project.debug) { configuration = "Debug"; } project.setenv("PLATFORM_NAME", platformName); project.setenv("CONFIGURATION", configuration); // setting CONFIGURATION and PLATFORM_NAME in project.environment doesn't set them for xcodebuild so also pass via command line var commands = [ "-configuration", configuration, "PLATFORM_NAME=" + platformName, "SDKROOT=" + platformName + iphoneVersion ]; if (project.targetFlags.exists("simulator")) { if (project.targetFlags.exists("i386") || project.targetFlags.exists("32") || project.targetFlags.exists("x86_32")) { commands.push("-arch"); commands.push("i386"); } else { commands.push("-arch"); commands.push("x86_64"); } } else if (project.targetFlags.exists("armv7")) { commands.push("-arch"); commands.push("armv7"); } else if (project.targetFlags.exists("armv7s")) { commands.push("-arch"); commands.push("armv7s"); } else if (project.targetFlags.exists("arm64")) { commands.push("-arch"); commands.push("arm64"); } commands.push("-project"); commands.push(project.app.file + ".xcodeproj"); var xcodeVersions = getXcodeVersion().split(".").map(function(i:String) { var ver = Std.parseInt(i); return ver != null ? ver : 0; }); if (xcodeVersions[0] >= 9) { if (project.config.getBool('ios.allow-provisioning-updates', true)) { commands.push("-allowProvisioningUpdates"); } if (project.config.getBool('ios.allow-provisioning-device-registration', true)) { commands.push("-allowProvisioningDeviceRegistration"); } } return commands; } public static function getSDKDirectory(project:HXProject):String { initialize(project); var platformName = "iPhoneOS"; if (project.targetFlags.exists("simulator")) { platformName = "iPhoneSimulator"; } var process = new Process("xcode-select", ["--print-path"]); var directory = process.stdout.readLine(); process.close(); if (directory == "" || directory.indexOf("Run xcode-select") > -1) { directory = "/Applications/Xcode.app/Contents/Developer"; } directory += "/Platforms/" + platformName + ".platform/Developer/SDKs/" + platformName + project.environment.get("IPHONE_VER") + ".sdk"; return directory; } public static function getIOSVersion(project:HXProject):Void { if (!project.environment.exists("IPHONE_VER") || project.environment.get("IPHONE_VER") == "4.2") { if (!project.environment.exists("DEVELOPER_DIR") && System.hostPlatform == MAC) { var process = new Process("xcode-select", ["--print-path"]); var developerDir = process.stdout.readLine(); process.close(); project.environment.set("DEVELOPER_DIR", developerDir); } var devPath = project.environment.get("DEVELOPER_DIR") + "/Platforms/iPhoneOS.platform/Developer/SDKs"; if (FileSystem.exists(devPath)) { var files = FileSystem.readDirectory(devPath); var extractVersion = ~/^iPhoneOS(.*).sdk$/; var best = "0", version; for (file in files) { if (extractVersion.match(file)) { version = extractVersion.matched(1); if (Std.parseFloat(version) > Std.parseFloat(best)) { best = version; } } } if (best != "") { project.environment.set("IPHONE_VER", best); } } } } private static function getOSXVersion():String { var output = System.runProcess("", "sw_vers", ["-productVersion"]); return StringTools.trim(output); } public static function getProvisioningFile(project:HXProject = null):String { if (project != null && project.config.exists("ios.provisioning-profile")) { return Path.tryFullPath(project.config.getString("ios.provisioning-profile")); } else if (System.hostPlatform == MAC) { var path = Path.expand("~/Library/MobileDevice/Provisioning Profiles"); var files = FileSystem.readDirectory(path); for (file in files) { if (Path.extension(file) == "mobileprovision") { return path + "/" + file; } } } return ""; } private static function getXcodeVersion():String { var output = System.runProcess("", "xcodebuild", ["-version"]); var firstLine = output.split("\n").shift(); return StringTools.trim(firstLine.substring("Xcode".length, firstLine.length)); } private static function initialize(project:HXProject):Void { if (!initialized) { getIOSVersion(project); initialized = true; } } public static function launch(project:HXProject, workingDirectory:String):Void { initialize(project); var configuration = "Release"; if (project.debug) { configuration = "Debug"; } if (project.targetFlags.exists("simulator")) { var applicationPath = ""; if (Path.extension(workingDirectory) == "app" || Path.extension(workingDirectory) == "ipa") { applicationPath = workingDirectory; } else { applicationPath = workingDirectory + "/build/" + configuration + "-iphonesimulator/" + project.app.file + ".app"; } var currentDeviceID = XCodeHelper.getSimulatorID(project); if (Log.verbose) { var currentSimulatorName = XCodeHelper.getSimulatorName(project); Log.info("Using iOS simulator: " + currentSimulatorName); } try { System.runProcess("", "open", ["-Ra", "iOS Simulator"], true, false); System.runCommand("", "open", ["-a", "iOS Simulator", "--args", "-CurrentDeviceUDID", currentDeviceID]); } catch (e:Dynamic) { System.runCommand("", "open", ["-a", "Simulator", "--args", "-CurrentDeviceUDID", currentDeviceID]); } waitForDeviceState("xcrun", ["simctl", "boot", currentDeviceID]); waitForDeviceState("xcrun", ["simctl", "uninstall", currentDeviceID, project.meta.packageName]); waitForDeviceState("xcrun", ["simctl", "install", currentDeviceID, applicationPath]); waitForDeviceState("xcrun", ["simctl", "launch", currentDeviceID, project.meta.packageName]); System.runCommand("", "tail", ["-F", "$HOME/Library/Logs/CoreSimulator/" + currentDeviceID + "/system.log"]); } else { var applicationPath = ""; if (Path.extension(workingDirectory) == "app" || Path.extension(workingDirectory) == "ipa") { applicationPath = workingDirectory; } else { applicationPath = workingDirectory + "/build/" + configuration + "-iphoneos/" + project.app.file + ".app"; } var requireIPad = project.config.getString("ios.device", "universal") == "ipad"; var requireIPhone = project.config.getString("ios.device", "universal") == "iphone"; var xcodeVersion = Std.parseFloat(getXcodeVersion()); if (!Math.isNaN(xcodeVersion) && xcodeVersion >= 16) { // ios-deploy doesn't work with newer iOS SDKs where it can't // find DeveloperDiskImage.dmg. however, Xcode 16 adds new // commands for installing and launching apps on connected // devices, so we'll prefer those, if available. var deviceUUID:String = null; // we'll try various combinations of the following filters to // select an iOS device. there may be multiple devices to choose // from, so these filters help us figure out the best one. var filterPlatformIOS = "Platform == 'iOS'"; // includes iPadOS var filterDeveloperModeEnabled = "deviceProperties.developerModeStatus == 'enabled'"; var filterStateConnected = "State == 'connected'"; var filterStateAvailable = "State == 'available (paired)'"; var filterTransportTypeWired = "connectionProperties.transportType == 'wired'"; var filterTransportTypeLocalNetwork = "connectionProperties.transportType == 'localNetwork'"; var filterDeviceTypeIPhone = "hardwareProperties.deviceType == 'iPhone'"; var filterDeviceTypeIPad = "hardwareProperties.deviceType == 'iPad'"; // first, some strictly required filters: // 1. the platform must always be iOS (which includes iPadOS). // 2. the device must be in developer mode. // 3. if required by the project config, limit to iPhone or iPad only var baseFilters = [ filterPlatformIOS, filterDeveloperModeEnabled, ]; if (requireIPad) { baseFilters.push(filterDeviceTypeIPad); } else if (requireIPhone) { baseFilters.push(filterDeviceTypeIPhone); } // after that, we have the following preferences, in order: // 1. state: "connected" preferred over "available (paired)" // 2. transportType: "wired" preferred over "localNetwork" var stateFilters = [filterStateConnected, filterStateAvailable]; var transportTypeFilters = [filterTransportTypeWired, filterTransportTypeLocalNetwork]; for (stateFilter in stateFilters) { for (transportTypeFilter in transportTypeFilters) { deviceUUID = findDeviceUUIDWithFilters(baseFilters.concat([ stateFilter, transportTypeFilter ])); if (deviceUUID != null && deviceUUID.length > 0) { break; } } if (deviceUUID != null && deviceUUID.length > 0) { break; } } if (deviceUUID == null || deviceUUID.length == 0) { // devices running iOS 16 and older don't support // xcrun devicectl, so if no device was found, try falling // back to ios-deploy fallbackLaunch(project, applicationPath); // Log.error("No device connected"); return; } if (Log.verbose) { Log.info("Detected iOS device UUID: " + deviceUUID); } System.runCommand("", "xcrun", ["devicectl", "device", "install", "app", "--device", deviceUUID, FileSystem.fullPath(applicationPath)]); System.runCommand("", "xcrun", ["devicectl", "device", "process", "launch", "--console", "--device", deviceUUID, project.meta.packageName]); } else { // continue using ios-deploy if Xcode version is 15 or older fallbackLaunch(project, applicationPath); } } } private static function findDeviceUUIDWithFilters(filters:Array):String { var listDevicesOutput = System.runProcess("", "xcrun", [ "devicectl", "list", "devices", "--hide-default-columns", "--columns", "Identifier", "--filter", filters.join(" AND ") ]); var ready = false; for (line in listDevicesOutput.split("\n")) { if (!ready) { ready = StringTools.startsWith(line, "----"); continue; } return line; } return null; } private static function fallbackLaunch(project:HXProject, applicationPath:String):Void { var templatePaths = [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), #if lime "templates" #else "" #end) ].concat(project.templatePaths); var launcher = System.findTemplate(templatePaths, "bin/ios-deploy"); Sys.command("chmod", ["+x", launcher]); System.runCommand("", launcher, [ "install", "--noninteractive", "--debug", "--bundle", FileSystem.fullPath(applicationPath) ]); } public static function sign(project:HXProject, workingDirectory:String):Void { initialize(project); var configuration = "Release"; if (project.debug) { configuration = "Debug"; } var identity = project.config.getString("ios.identity", "iPhone Developer"); var commands = ["-s", identity, "CODE_SIGN_IDENTITY=" + identity]; if (project.config.exists("ios.provisioning-profile")) { commands.push("PROVISIONING_PROFILE=" + project.config.getString("ios.provisioning-profile")); } var applicationPath = "build/" + configuration + "-iphoneos/" + project.app.file + ".app"; commands.push(applicationPath); System.runCommand(workingDirectory, "codesign", commands, true, true); } private static function waitForDeviceState(command:String, args:Array):Void { var output:String; while (true) { output = System.runProcess("", command, args, true, true, true); if (output != null && output.toLowerCase().indexOf("invalid device state") > -1) { Sys.sleep(3); } else { break; } } } } ================================================ FILE: src/lime/tools/Icon.hx ================================================ package lime.tools; class Icon { public var height:Int; public var path:String; public var size:Int; public var width:Int; public var priority:Int; public function new(path:String, size:Int = 0, priority:Int = 0) { this.path = path; this.size = height = width = size; this.priority = priority; } public function clone():Icon { var icon = new Icon(path); icon.size = size; icon.width = width; icon.height = height; return icon; } } ================================================ FILE: src/lime/tools/IconHelper.hx ================================================ package lime.tools; // import openfl.display.Bitmap; // import openfl.display.BitmapData; // import openfl.display.Shape; // import openfl.geom.Rectangle; // import openfl.utils.ByteArray; // import format.SVG; import haxe.io.Bytes; import haxe.io.BytesOutput; import hxp.*; import lime.tools.ImageHelper; #if (lime && lime_cffi && !macro) import lime.graphics.Image; import lime.math.Rectangle; #end import lime.tools.Icon; import sys.io.File; import sys.FileSystem; class IconHelper { private static function canUseCache(targetPath:String, icons:Array):Bool { if (FileSystem.exists(targetPath)) { var cacheTime = System.getLastModified(targetPath); for (icon in icons) { if (System.getLastModified(icon.path) > cacheTime) { return false; } } return true; } return false; } public static function createIcon(icons:Array, width:Int, height:Int, targetPath:String):Bool { #if (lime && lime_cffi && !macro) var icon = findMatch(icons, width, height); if (icon != null && icon.size > 0 && Path.extension(icon.path) == "png") { if (canUseCache(targetPath, [icon])) { return true; } System.mkdir(Path.directory(targetPath)); System.copyFile(icon.path, targetPath); return true; } else { if (canUseCache(targetPath, icons)) { return true; } var image = getIconImage(icons, width, height); if (image != null) { var bytes = image.encode(PNG); if (bytes != null) { System.mkdir(Path.directory(targetPath)); File.saveBytes(targetPath, bytes); return true; } } } #end return false; } public static function createMacIcon(icons:Array, targetPath:String):Bool { #if (lime && lime_cffi && !macro) if (canUseCache(targetPath, icons)) { return true; } var out = new BytesOutput(); out.bigEndian = true; // Not sure why the 128x128 icon is not saving properly. Disabling for now for (i in 0...3) { var s = ([16, 32, 48, 128])[i]; var code = (["is32", "il32", "ih32", "it32"])[i]; var image = getIconImage(icons, s, s); if (image != null) { for (c in 0...4) out.writeByte(code.charCodeAt(c)); var n = s * s; var pixels = image.getPixels(new Rectangle(0, 0, s, s), ARGB32); var bytes_r = packBits(pixels, 1, s * s); var bytes_g = packBits(pixels, 2, s * s); var bytes_b = packBits(pixels, 3, s * s); out.writeInt32(bytes_r.length + bytes_g.length + bytes_b.length + 8); out.writeBytes(bytes_r, 0, bytes_r.length); out.writeBytes(bytes_g, 0, bytes_g.length); out.writeBytes(bytes_b, 0, bytes_b.length); var code = (["s8mk", "l8mk", "h8mk", "t8mk"])[i]; for (c in 0...4) out.writeByte(code.charCodeAt(c)); var bytes_a = extractBits(pixels, 0, s * s); out.writeInt32(bytes_a.length + 8); out.writeBytes(bytes_a, 0, bytes_a.length); } } for (i in 0...5) { var s = ([32, 64, 256, 512, 1024])[i]; var code = (["ic11", "ic12", "ic08", "ic09", "ic10"])[i]; var image = getIconImage(icons, s, s); if (image != null) { var bytes = image.encode(PNG); if (bytes != null) { for (c in 0...4) out.writeByte(code.charCodeAt(c)); out.writeInt32(bytes.length + 8); out.writeBytes(bytes, 0, bytes.length); } } } var bytes = out.getBytes(); if (bytes.length > 0) { var file = File.write(targetPath, true); file.bigEndian = true; for (c in 0...4) file.writeByte("icns".charCodeAt(c)); file.writeInt32(bytes.length + 8); file.writeBytes(bytes, 0, bytes.length); file.close(); return true; } #end return false; } public static function createWindowsIcon(icons:Array, targetPath:String):Bool { #if (lime && lime_cffi && !macro) if (canUseCache(targetPath, icons)) { return true; } var sizes = [16, 24, 32, 40, 48, 64, 96, 128, 256, 512, 768]; var images = new Array(); var imageData = new Array(); for (size in sizes) { var image = getIconImage(icons, size, size); if (image != null) { var data:Bytes = null; if (size < 256) { data = lime._internal.format.BMP.encode(image, ICO); } else { data = image.encode(PNG); } if (data != null) { imageData.push(data); images.push(image); } } } var length = 6 + (16 * images.length); for (data in imageData) { length += data.length; } var icon = Bytes.alloc(length); var position = 0; icon.setUInt16(position, 0); position += 2; icon.setUInt16(position, 1); position += 2; icon.setUInt16(position, images.length); position += 2; var dataOffset = 6 + (16 * images.length); for (i in 0...images.length) { var size = images[i].width; icon.set(position++, size > 255 ? 0 : size); icon.set(position++, size > 255 ? 0 : size); icon.set(position++, 0); icon.set(position++, 0); icon.setUInt16(position, 1); position += 2; icon.setUInt16(position, 32); position += 2; icon.setInt32(position, imageData[i].length); position += 4; icon.setInt32(position, dataOffset); position += 4; dataOffset += imageData[i].length; } for (data in imageData) { icon.blit(position, data, 0, data.length); position += data.length; } if (images.length > 0) { File.saveBytes(targetPath, icon); return true; } #end return false; } private static function extractBits(data:Bytes, offset:Int, len:Int):Bytes { var out = new BytesOutput(); for (i in 0...len) { out.writeByte(data.get(i * 4 + offset)); } return out.getBytes(); } public static function findMatch(icons:Array, width:Int, height:Int):Icon { var match:Icon = null; for (icon in icons) { if (icon.width == width && icon.height == height && (match == null || match.priority <= icon.priority)) { match = icon; } } return match; } public static function findNearestMatch(icons:Array, width:Int, height:Int, ?acceptSmaller:Bool = false):Icon { var match:Icon = null; var matchDifference = Math.POSITIVE_INFINITY; for (icon in icons) { var iconDifference = icon.width - width + icon.height - height; // If size is unspecified, accept it as an almost-perfect match if (icon.width == 0 && icon.height == 0) { iconDifference = 1; } if (iconDifference < 0 && !acceptSmaller) { continue; } if (Math.abs(iconDifference) < Math.abs(matchDifference) || iconDifference == matchDifference && icon.priority >= match.priority) { match = icon; matchDifference = iconDifference; } } if (match == null && !acceptSmaller) { // Try again but accept any icon return findNearestMatch(icons, width, height, true); } else { return match; } } private static function getIconImage(icons:Array, width:Int, height:Int, backgroundColor:Int = null):#if (lime && lime_cffi && !macro) Image #else Dynamic #end { var icon = findMatch(icons, width, height); if (icon == null) { icon = findNearestMatch(icons, width, height); } if (icon == null) { return null; } if (icon.path == null || !FileSystem.exists(icon.path)) { Log.warn("Could not find icon path: " + icon.path); return null; } var extension = Path.extension(icon.path); #if (lime && lime_cffi && !macro) var image:Image = null; switch (extension) { case "png", "jpg", "jpeg": image = ImageHelper.resizeImage(Image.fromFile(icon.path), width, height); case "svg": // image = ImageHelper.rasterizeSVG (null /*new SVG (File.getContent (icon.path))*/, width, height, backgroundColor); image = ImageHelper.rasterizeSVG(icon.path, width, height, backgroundColor); } return image; #else return null; #end } private static function packBits(data:Bytes, offset:Int, len:Int):Bytes { var out = new BytesOutput(); var idx = 0; while (idx < len) { var val = data.get(idx * 4 + offset); var same = 1; /* Hmmmm... while( ((idx+same) < len) && (data[ (idx+same)*4 + offset ]==val) && (same < 2) ) same++; */ if (same == 1) { var raw = idx + 120 < len ? 120 : len - idx; out.writeByte(raw - 1); for (i in 0...raw) { out.writeByte(data.get(idx * 4 + offset)); idx++; } } else { out.writeByte(257 - same); out.writeByte(val); idx += same; } } return out.getBytes(); } } ================================================ FILE: src/lime/tools/ImageHelper.hx ================================================ package lime.tools; import hxp.*; #if (lime && lime_cffi && !macro) import lime.graphics.Image; import lime.graphics.ImageBuffer; import lime.utils.UInt8Array; #end import lime.tools.Platform; import sys.io.File; import sys.io.FileSeek; import sys.FileSystem; class ImageHelper { public static function rasterizeSVG(path:String, width:Int, height:Int, backgroundColor:Int = null):#if (lime && lime_cffi && !macro) Image #else Dynamic #end { // public static function rasterizeSVG (svg:Dynamic /*SVG*/, width:Int, height:Int, backgroundColor:Int = null):Image { #if (lime && lime_cffi && !macro) if (path == null) return null; var temp = System.getTemporaryFile(".png"); try { System.runCommand("", "neko", [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), "svg.n"), "process", path, Std.string(width), Std.string(height), temp ], true, true); if (FileSystem.exists(temp)) { var image = Image.fromFile(temp); try { FileSystem.deleteFile(temp); } catch (e:Dynamic) {} if (image.buffer != null) { return image; } } } catch (e:Dynamic) {} var rasterizer = Haxelib.getPath(new Haxelib("lime")) + "/templates/bin/batik/batik-rasterizer.jar"; var args = [ "-Dapple.awt.UIElement=true", "-jar", rasterizer, "-d", temp, "-w", Std.string(width), "-h", Std.string(height) ]; if (backgroundColor != null) { var a:Int = ((backgroundColor >> 24) & 0xFF); var r:Int = ((backgroundColor >> 16) & 0xFF); var g:Int = ((backgroundColor >> 8) & 0xFF); var b:Int = (backgroundColor & 0xFF); args.push("-bg"); args.push(a + "." + r + "." + g + "." + b); } args.push(path); if (System.hostPlatform == MAC) { try { var found = false; if (FileSystem.exists("/System/Library/Java/JavaVirtualMachines")) { found = (FileSystem.readDirectory("/System/Library/Java/JavaVirtualMachines").length > 0); } if (!found && FileSystem.exists("/Library/Java/JavaVirtualMachines")) { found = (FileSystem.readDirectory("/Library/Java/JavaVirtualMachines").length > 0); } if (!found) { if (Log.verbose) Log.warn("Skipping SVG to PNG rasterization step, no Java runtime detected"); return null; } } catch (e:Dynamic) {} } if (Log.verbose) { System.runCommand("", "java", args, true, true); } else { System.runProcess("", "java", args, true, true, true); } if (FileSystem.exists(temp)) { var image = Image.fromFile(temp); try { FileSystem.deleteFile(temp); } catch (e:Dynamic) {} if (image.buffer != null) { return image; } } #end return null; } public static function readPNGImageSize(path:String) { var toReturn = {width: 0, height: 0}; var fileInput = File.read(path); var header = (fileInput.readByte() << 8) | fileInput.readByte(); if (header == 0x8950) { fileInput.seek(8 + 4 + 4, FileSeek.SeekBegin); var width = (fileInput.readByte() << 24) | (fileInput.readByte() << 16) | (fileInput.readByte() << 8) | fileInput.readByte(); var height = (fileInput.readByte() << 24) | (fileInput.readByte() << 16) | (fileInput.readByte() << 8) | fileInput.readByte(); toReturn = { width: width, height: height }; } fileInput.close(); return toReturn; } public static function resizeImage(image:#if (lime && lime_cffi && !macro) Image #else Dynamic #end, width:Int, height:Int):#if (lime && lime_cffi && !macro) Image #else Dynamic #end { #if (lime && lime_cffi && !macro) if (image == null) return null; if (image.width == width && image.height == height) { return image; } image.resize(width, height); #end return image; } } ================================================ FILE: src/lime/tools/JavaHelper.hx ================================================ package lime.tools; import hxp.*; import sys.io.File; class JavaHelper { public static function copyLibraries(templatePaths:Array, platformName:String, targetPath:String) { System.recursiveCopyTemplate(templatePaths, "java/ndll/" + platformName, targetPath); } } ================================================ FILE: src/lime/tools/Keystore.hx ================================================ package lime.tools; class Keystore { public var alias:String; public var aliasPassword:String; public var password:String; public var path:String; public var type:String; public function new(path:String = null, password:String = null, alias:String = null, aliasPassword:String = null) { this.path = path; this.password = password; this.alias = alias; this.aliasPassword = aliasPassword; } public function clone():Keystore { return new Keystore(path, password, alias, aliasPassword); } public function merge(keystore:Keystore):Void { if (keystore != null) { if (keystore.path != null && keystore.path != "") path = keystore.path; if (keystore.password != null) password = keystore.password; if (keystore.alias != null) alias = keystore.alias; if (keystore.aliasPassword != null) aliasPassword = keystore.aliasPassword; } } } ================================================ FILE: src/lime/tools/LaunchStoryboard.hx ================================================ package lime.tools; import hxp.ObjectTools; class LaunchStoryboard { public var assetsPath:String; public var assets:Array; public var path:String; public var template:String; public var templateContext:Dynamic; public function new() { assets = []; templateContext = {}; } public function clone():LaunchStoryboard { var launchStoryboard = new LaunchStoryboard(); launchStoryboard.assetsPath = assetsPath; launchStoryboard.assets = assets.copy(); launchStoryboard.path = path; launchStoryboard.template = template; launchStoryboard.templateContext = ObjectTools.copyFields(templateContext, {}); return launchStoryboard; } public function merge(launchStoryboard:LaunchStoryboard):Void { if (launchStoryboard != null) { if (launchStoryboard.assetsPath != null) assetsPath = launchStoryboard.assetsPath; if (launchStoryboard.assets != null) assets = launchStoryboard.assets; if (launchStoryboard.path != null) path = launchStoryboard.path; if (launchStoryboard.template != null) template = launchStoryboard.template; if (launchStoryboard.templateContext != null) templateContext = launchStoryboard.templateContext; } } } class LaunchStoryboardAsset { public var type:String; public function new(type:String) { this.type = type; } } class ImageSet extends LaunchStoryboardAsset { public var name:String; public var width = 0; public var height = 0; public function new(name:String) { super("imageset"); this.name = name; } } ================================================ FILE: src/lime/tools/Library.hx ================================================ package lime.tools; import hxp.Path; class Library { public var embed:Null; public var generate:Null; public var name:String; public var prefix:String; public var preload:Null; public var sourcePath:String; public var type:String; public function new(sourcePath:String, name:String = "", type:String = null, embed:Null = null, preload:Null = null, generate:Null = null, prefix:String = "") { this.sourcePath = sourcePath; if (name == "") { this.name = Path.withoutDirectory(Path.withoutExtension(sourcePath)); } else { this.name = name; } this.type = type; this.embed = embed; this.preload = preload; this.generate = generate; this.prefix = prefix; } public function clone():Library { return new Library(sourcePath, name, type, embed, preload, generate, prefix); } } ================================================ FILE: src/lime/tools/MetaData.hx ================================================ package lime.tools; @:forward abstract MetaData({ @:optional var buildNumber:String; @:optional var company:String; @:optional var companyId:String; @:optional var companyUrl:String; @:optional var description:String; @:optional var packageName:String; @:optional var title:String; @:optional var version:String; @:optional var copyrightYears:String; }) from Dynamic { @:noCompletion public static var expectedFields:MetaData = { buildNumber: "", company: "", companyId: "", companyUrl: "", description: "", packageName: "", title: "", version: "", copyrightYears: "" }; } ================================================ FILE: src/lime/tools/ModuleData.hx ================================================ package lime.tools; import hxp.*; class ModuleData { public var classNames:Array; public var excludeTypes:Array; public var haxeflags:Array; public var includeTypes:Array; public var name:String; public function new(name:String) { this.name = name; classNames = []; excludeTypes = []; haxeflags = []; includeTypes = []; } public function clone():ModuleData { var copy = new ModuleData(name); copy.classNames = classNames.copy(); copy.excludeTypes = excludeTypes.copy(); copy.haxeflags = haxeflags.copy(); copy.includeTypes = includeTypes.copy(); return copy; } public function merge(other:ModuleData):Bool { if (other.name == name) { classNames = ArrayTools.concatUnique(classNames, other.classNames); excludeTypes = ArrayTools.concatUnique(excludeTypes, other.excludeTypes); haxeflags = ArrayTools.concatUnique(haxeflags, other.haxeflags); includeTypes = ArrayTools.concatUnique(includeTypes, other.includeTypes); return true; } return false; } } ================================================ FILE: src/lime/tools/ModuleHelper.hx ================================================ package lime.tools; #if !macro import hxp.*; import lime.tools.Dependency; import lime.tools.HXProject; import lime.tools.ModuleData; import sys.io.File; import sys.FileSystem; class ModuleHelper { public static function addModuleSource(source:String, moduleData:ModuleData, include:Array, exclude:Array, packageName:String = null) { if (!FileSystem.exists(source)) { Log.error("Could not find module source \"" + source + "\""); return; } moduleData.haxeflags.push("-cp " + source); var path = source; if (packageName != null && packageName.length > 0) { path = Path.combine(source, StringTools.replace(packageName, ".", "/")); } parseModuleSource(source, moduleData, include, exclude, path); } public static function buildModules(project:HXProject, tempDirectory:String, outputDirectory:String):Void { tempDirectory = Path.combine(tempDirectory, "lib"); outputDirectory = Path.combine(outputDirectory, "lib"); System.mkdir(tempDirectory); System.mkdir(outputDirectory); var importName:String; var hxmlPath:String; var importPath:String; var outputPath:String; var moduleImport:String; var hxml:String; for (module in project.modules) { if (module.classNames.length > 0) { importName = "Module" + module.name.charAt(0).toUpperCase() + module.name.substr(1); hxmlPath = Path.combine(tempDirectory, module.name + ".hxml"); importPath = Path.combine(tempDirectory, importName + ".hx"); if (project.targetFlags.exists("final")) { outputPath = Path.combine(outputDirectory, module.name + ".min.js"); } else { outputPath = Path.combine(outputDirectory, module.name + ".js"); } moduleImport = "package;\n\nimport " + module.classNames.join(";\nimport ") + ";"; hxml = "-cp " + tempDirectory; hxml += "\n" + module.haxeflags.join("\n"); for (haxelib in project.haxelibs) { hxml += "\n-cp " + Haxelib.getPath(haxelib); } for (key in project.haxedefs.keys()) { if (key != "no-compilation") { var value = project.haxedefs.get(key); if (value == null || value == "") { hxml += "\n-D " + key; } else { hxml += "\n-D " + key + "=" + value; } } } hxml += "\n-D html5"; hxml += "\n-D html"; hxml += "\n--no-inline"; hxml += "\n-dce no"; hxml += "\n-js " + outputPath; var includeTypes = module.classNames.concat(module.includeTypes); var excludeTypes = module.excludeTypes; for (otherModule in project.modules) { if (otherModule != module) { excludeTypes = excludeTypes.concat(ArrayTools.getUnique(includeTypes, otherModule.classNames)); excludeTypes = excludeTypes.concat(ArrayTools.getUnique(includeTypes, otherModule.includeTypes)); } } if (excludeTypes.length > 0) { // order by short filters first, so they match earlier haxe.ds.ArraySort.sort(excludeTypes, shortFirst); hxml += "\n--macro lime.tools.ModuleHelper.exclude(['" + excludeTypes.join("','") + "'])"; } // order by short filters first, so they match earlier haxe.ds.ArraySort.sort(includeTypes, shortFirst); hxml += "\n--macro lime.tools.ModuleHelper.expose(['" + includeTypes.join("','") + "'])"; // hxml += "\n--macro lime.tools.ModuleHelper.generate()"; hxml += "\n" + importName; File.saveContent(importPath, moduleImport); File.saveContent(hxmlPath, hxml); System.runCommand("", "haxe", [hxmlPath]); patchFile(outputPath); if (project.targetFlags.exists("final")) { HTML5Helper.minify(project, outputPath); } } } } private static function parseModuleSource(source:String, moduleData:ModuleData, include:Array, exclude:Array, currentPath:String):Void { var files = FileSystem.readDirectory(currentPath); var filePath:String, className:String, packageName:String; for (file in files) { filePath = Path.combine(currentPath, file); if (FileSystem.isDirectory(filePath)) { packageName = StringTools.replace(filePath, source, ""); packageName = StringTools.replace(packageName, "\\", "/"); while (StringTools.startsWith(packageName, "/")) packageName = packageName.substr(1); packageName = StringTools.replace(packageName, "/", "."); if (StringTools.filter(packageName, include, exclude)) { parseModuleSource(source, moduleData, include, exclude, filePath); } } else { if (Path.extension(file) != "hx") continue; className = StringTools.replace(filePath, source, ""); className = StringTools.replace(className, "\\", "/"); while (StringTools.startsWith(className, "/")) className = className.substr(1); className = StringTools.replace(className, "/", "."); className = StringTools.replace(className, ".hx", ""); if (StringTools.filter(className, include, exclude)) { moduleData.classNames.push(className); } } } } public static function patchFile(outputPath:String):Void { var replaceString = "var $hxClasses = {}"; var replacement = "if (!$hx_exports.$hxClasses) $hx_exports.$hxClasses = {};\nvar $hxClasses = $hx_exports.$hxClasses"; System.replaceText(outputPath, replaceString, replacement); } public static function updateProject(project:HXProject):Void { var excludeTypes = []; var suffix = (project.targetFlags.exists("final") ? ".min" : "") + ".js"; var hasModules = false; for (module in project.modules) { project.dependencies.push(new Dependency("./lib/" + module.name + suffix, null)); excludeTypes = ArrayTools.concatUnique(excludeTypes, module.classNames); excludeTypes = ArrayTools.concatUnique(excludeTypes, module.excludeTypes); excludeTypes = ArrayTools.concatUnique(excludeTypes, module.includeTypes); hasModules = true; } if (excludeTypes.length > 0) { // order by short filters first, so they match earlier haxe.ds.ArraySort.sort(excludeTypes, shortFirst); project.haxeflags.push("--macro lime.tools.ModuleHelper.exclude(['" + excludeTypes.join("','") + "'])"); } // if (hasModules) { // // project.haxeflags.push ("--macro lime.tools.ModuleHelper.generate()"); // // } } public static function shortFirst(a, b):Int { if (a.length < b.length) return -1; else if (a.length > b.length) return 1; return 0; } } #else import haxe.macro.Compiler; import haxe.macro.Context; import haxe.macro.Type; import haxe.macro.Expr; import haxe.macro.JSGenApi; using haxe.macro.Tools; using Lambda; using StringTools; class ModuleHelper { public static function exclude(types:Array):Void { for (type in types) { Compiler.exclude(type); Compiler.addMetadata("@:native(\"$hx_exports." + type + "\")", type); } } public static function expose(classNames:Array):Void { for (className in classNames) { Compiler.addMetadata("@:expose('" + className + "')", className); } } public static function generate() { // Compiler.setCustomJSGenerator(function(api) new Generator(api).generate()); } } class Generator { var api:JSGenApi; var buf:StringBuf; var inits:List; var statics:List<{c:ClassType, f:ClassField}>; var packages:haxe.ds.StringMap; var forbidden:haxe.ds.StringMap; var jsModern:Bool; var jsFlatten:Bool; var dce:Bool; var indentLevel = 0; var genExtend = false; var genExpose = false; var iRE = ~/^(.*)$/gm; public function new(api) { this.api = api; buf = new StringBuf(); inits = new List(); statics = new List(); packages = new haxe.ds.StringMap(); forbidden = new haxe.ds.StringMap(); jsModern = !Context.defined("js-classic"); jsFlatten = !Context.defined("js-unflatten"); dce = Context.definedValue("dce") != "no"; for (x in ["prototype", "__proto__", "constructor"]) forbidden.set(x, true); api.setTypeAccessor(getType); for (t in api.types) { switch (t) { case TInst(c, _): if (!c.get().isExtern && c.get().superClass != null) genExtend = true; if (c.get().meta.has(":expose")) genExpose = true; if (genExtend && genExpose) break; case _: } } } function getType(t:Type) { return switch (t) { case TInst(c, _): getPath(c.get()); case TEnum(e, _): getPath(e.get()); case TAbstract(a, _): getPath(a.get()); default: throw "assert"; }; } inline function indent(str:String, level = 0, notFirst = false):String { var first = true; var lines = str.split("\n"); var nstr = ""; for (i in 0...lines.length) { var s = lines[i]; if (first && notFirst) { first = false; nstr += s; } else { for (i in 0...level) { nstr += '\t'; } nstr += '$s'; } if (i < lines.length - 1) nstr += "\n"; } return nstr; } inline function print(str) { printi(str, indentLevel); } inline function printi(str, level = 0, notFirst = false) { buf.add(indent(str, level, notFirst)); } inline function println(s:String = "") { print(s); newline(); } inline function printn(s:String = "") print('$s\n'); inline function printin(str, level = 0, notFirst = false) buf.add(indent(str, level, notFirst) + "\n"); function printif(f:String, s:String) { if (api.hasFeature(f)) println(s); } inline function newline() { buf.add(";\n"); } function field(p, staticField = true) { if (staticField) return api.isKeyword(p) ? '["$p"]' : '.$p'; else return api.isKeyword(p) ? '\'$p\'' : p; } function genPackage(p:Array) { if (p.length == 0) print("var "); var full:String = null; for (x in p) { var prev = full; if (full == null) full = x; else full += "." + x; if (packages.exists(full)) continue; packages.set(full, true); if (prev == null) println('var $x = ' + (jsModern ? "{}" : '$x || {}')); else { var p = prev + field(x); println((jsModern ? '' : 'if(!$p) ') + '$p = {}'); } } } function getPath(t:BaseType) { return packClass(t.pack, t.name); } function getDotPath(t:BaseType) { return (t.pack.length == 0) ? t.name : t.pack.join('.') + '.' + t.name; } function packClass(p:Array, name:String) { if (jsFlatten) { var r = ''; for (i in p) { r += i.replace("_", "_$") + '_'; } return r + name.replace("_", "_$"); } return (p.length == 0) ? name : p.join('.') + '.' + name; } function checkFieldName(c:ClassType, f:ClassField) { if (forbidden.exists(f.name)) Context.error("The field " + f.name + " is not allowed in JS", c.pos); } function genClassField(c:ClassType, p:String, f:ClassField, first:Bool) { checkFieldName(c, f); var field = field(f.name, false); var e = f.expr(); if (e != null) { printin((first ? "" : ",") + '$field: ' + api.generateValue(e), indentLevel, false); return false; } else if (!dce && (f.kind.match(FVar(AccNormal, AccNormal) | FMethod(_)) || f.meta.has(":isVar"))) { printin((first ? "" : ",") + '$field: null', indentLevel, false); return false; } return first; } function genStaticField(c:ClassType, p:String, f:ClassField) { checkFieldName(c, f); var field = field(f.name); var e = f.expr(); if (e != null) { switch (f.kind) { case FMethod(_): print('$p$field = '); println(api.generateValue(e)); default: statics.add({c: c, f: f}); } } else { if (!dce && (f.kind.match(FVar(AccNormal, AccNormal) | FMethod(_)) || f.meta.has(":isVar"))) println('$p$field = null'); } } function getProperties(fields:Array):String { var properties:Array = []; for (f in fields) { switch (f.kind) { case FVar(g, s): { if (g == AccCall) properties.push('get_${f.name}:"get_${f.name}"'); if (s == AccCall) properties.push('set_${f.name}:"set_${f.name}"'); } case _: } } return (properties.length > 0) ? ('{' + properties.join(",") + '}') : ""; } function genClass(c:ClassType) { api.setCurrentClass(c); var hxClasses = api.hasFeature("Type.resolveClass"); var p = getPath(c); var pn = getDotPath(c); if (jsFlatten) print("var "); else genPackage(c.pack); if (hxClasses && !jsModern) print('$p = $$hxClasses["$pn"] = '); else print('$p = ' + (c.meta.has(":expose") ? '$$hx_exports.$p = ' : '')); if (c.constructor != null) print(api.generateValue(c.constructor.get().expr())); else print("function() { }"); newline(); if (hxClasses && jsModern) println('$$hxClasses["$pn"] = $p'); var name = pn.split(".").map(api.quoteString).join(","); if (api.hasFeature("js.Boot.isClass")) { if (api.hasFeature("Type.getClassName")) println('$p.__name__ = [$name]'); else println('$p.__name__ = true'); } if (c.interfaces.length > 0) { var me = this; var inter = c.interfaces.map(function(i) return me.getPath(i.t.get())).join(","); print('$p.__interfaces__ = [$inter]'); newline(); } var has_property_reflection = api.hasFeature("Reflect.getProperty") || api.hasFeature("Reflect.setProperty"); if (has_property_reflection) { var staticProperties = getProperties(c.statics.get()); if (staticProperties.length > 0) printn('$p.__properties__ = $staticProperties'); } for (f in c.statics.get()) genStaticField(c, p, f); var has_class = api.hasFeature("js.Boot.getClass") && (c.superClass != null || c.fields.get().length > 0 || c.constructor != null); var has_prototype = has_class || c.superClass != null || c.fields.get().length > 0; if (has_prototype) { if (c.superClass != null) { var psup = getPath(c.superClass.t.get()); println('$p.__super__ = $psup'); printn('$p.prototype = $$extend($psup.prototype,{'); } else { printn('$p.prototype = {'); } indentLevel++; var first = true; for (f in c.fields.get()) { switch (f.kind) { case FVar(r, _): if (r == AccResolve) continue; default: } first = genClassField(c, p, f, first); } if (has_class) { if (!first) print(","); printi('__class__: $p\n'); } if (has_property_reflection) { var properties = getProperties(c.fields.get()); if (properties.length > 0) if (c.superClass != null) { var psup = getPath(c.superClass.t.get()); printn((first ? "" : ",") + '__properties__: $$extend($psup.prototype.__properties__,$properties)'); } else printn((first ? "" : ",") + '__properties__: $properties'); } indentLevel--; if (c.superClass != null) printin("});", 0); else printin("};", 0); } } function genEnum(e:EnumType) { var p = getPath(e); var pn = getDotPath(e); var names = pn.split(".").map(api.quoteString).join(","); var constructs = e.names.map(api.quoteString).join(","); var hxClasses = api.hasFeature("Type.resolveEnum"); if (jsFlatten) print("var "); else genPackage(e.pack); if (hxClasses) print('$p = $$hxClasses["$pn"] = {'); else print('$p = {'); if (api.hasFeature("js.Boot.isEnum")) if (api.hasFeature("Type.getEnumName")) print(' __ename__ : [$names],'); else print(' __ename__ : true,'); println(' __constructs__ : [$constructs] }'); for (c in e.constructs.keys()) { var c = e.constructs.get(c); var f = field(c.name); print('$p$f = '); switch (c.type) { case TFun(args, _): var sargs = args.map(function(a) return a.name).join(","); print('function($sargs) { var $$x = ["${c.name}",${c.index},$sargs]; $$x.__enum__ = $p; $$x.toString = $$estr; return $$x; }'); default: println("[" + api.quoteString(c.name) + "," + c.index + "]"); if (api.hasFeature("may_print_enum")) println('$p$f.toString = $$estr'); print('$p$f.__enum__ = $p'); } newline(); } if (api.hasFeature("Type.allEnums")) { var ec = Lambda.fold(e.constructs, function(c:EnumField, r:Array) { if (!c.type.match(TFun(_, _))) r.push('$p.${c.name}'); return r; }, []); if (ec.length > 0) println('$p.__empty_constructs__ = [' + ec.join(",") + ']'); } var meta = api.buildMetaData(e); if (meta != null) { print('$p.__meta__ = '); println(api.generateValue(meta)); } } function genType(t:Type) { switch (t) { case TInst(c, _): var c = c.get(); if (c.init != null) inits.add(c.init); if (!c.isExtern) genClass(c); case TEnum(r, _): var e = r.get(); if (!e.isExtern) genEnum(e); default: } } public function generate() { if (jsModern) println('(function (' + (genExpose ? "$hx_exports" : "") + ", $global) { \"use strict\""); if (jsModern) println("if (!$hx_exports.$hxClasses) $hx_exports.$hxClasses = {}"); var vars = []; if (api.hasFeature("Type.resolveClass") || api.hasFeature("Type.resolveEnum")) // vars.push("$hxClasses = " + (jsModern? "{}" : "$hxClasses || {}")); vars.push("$hxClasses = " + (jsModern ? "$hx_exports.$hxClasses" : "$hxClasses || {}")); if (api.hasFeature("may_print_enum")) vars.push("$estr = function() { return " + packClass(["js"], "Boot") + ".__string_rec(this,''); }"); if (vars.length > 0) println("var " + vars.join(",")); if (genExtend) print("function $extend(from, fields) { function Inherit() {} Inherit.prototype = from; var proto = new Inherit(); for (var name in fields) proto[name] = fields[name]; if( fields.toString !== Object.prototype.toString ) proto.toString = fields.toString; return proto; }\n"); for (t in api.types) genType(t); if (api.hasFeature("use.$iterator")) { api.addFeature("use.$bind"); printn("function $iterator(o) { if( o instanceof Array ) return function() { return HxOverrides.iter(o); }; return typeof(o.iterator) == 'function' ? $bind(o,o.iterator) : o.iterator; }"); } if (api.hasFeature("use.$bind")) { println("var $_, $fid = 0"); printn("function $bind(o,m) { if( m == null ) return null; if( m.__id__ == null ) m.__id__ = $fid++; var f; if( o.hx__closures__ == null ) o.hx__closures__ = {}; else f = o.hx__closures__[m.__id__]; if( f == null ) { f = function(){ return f.method.apply(f.scope, arguments); }; f.scope = o; f.method = m; o.hx__closures__[m.__id__] = f; } return f; }"); } for (e in inits) genInit(e); for (s in statics) println(getPath(s.c) + field(s.f.name) + ' = ' + api.generateValue(s.f.expr())); if (api.main != null) println(api.generateValue(api.main)); if (jsModern) print('})(' + (genExpose ? 'typeof exports != "undefined" ? exports : typeof window != "undefined" ? window : typeof self != "undefined" ? self : this, ' : '') + 'typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this);\n'); sys.io.File.saveContent(api.outputFile, buf.toString()); } function genInit(e:TypedExpr) { var code = api.generateStatement(e); // cosmetic only var colon = ';'; for (l in code.split('\n')) { if (l == "{" || l == "}") { colon = ''; continue; } printn(l.replace("\t", "") + colon); } } } #end ================================================ FILE: src/lime/tools/NekoHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.Platform; import sys.FileSystem; import sys.io.File; class NekoHelper { public static function copyLibraries(templatePaths:Array, platformName:String, targetPath:String) { // System.recursiveCopyTemplate (templatePaths, "neko/ndll/" + platformName, targetPath); } public static function createExecutable(templatePaths:Array, platformName:String, source:String, target:String, iconPath:String = null):Void { /*var executablePath = System.findTemplate (templatePaths, "neko/bin/neko-" + platformName); var executable = File.getBytes (executablePath); var sourceContents = File.getBytes (source); var output = File.write (target, true); output.write (executable); output.write (sourceContents); output.writeString ("NEKO"); output.writeInt32 (executable.length); output.close (); */ var path = Path.tryFullPath(source); var file = Path.withoutDirectory(path); var dir = Path.directory(path); System.runCommand(dir, "nekotools", ["boot", file]); var path = Path.withoutExtension(source); if (System.hostPlatform == WINDOWS) { path += ".exe"; } System.copyFile(path, target); } public static function createWindowsExecutable(templatePaths:Array, source:String, target:String, iconPath:String):Void { /*var executablePath = System.findTemplate (templatePaths, "neko/bin/neko-windows"); var executable = File.getBytes (executablePath); var sourceContents = File.getBytes (source); var output = File.write (target, true); output.write (executable); output.close (); if (iconPath != null && System.hostPlatform == WINDOWS) { var templates = [ Haxelib.getPath (new Haxelib (#if lime "lime" #else "hxp" #end)) + "/templates" ].concat (templatePaths); System.runCommand ("", System.findTemplate (templates, "bin/ReplaceVistaIcon.exe"), [ target, iconPath, "1" ], true, true); } var executable = File.getBytes (target); var output = File.write (target, true); output.write (executable); output.write (sourceContents); output.writeString ("NEKO"); output.writeInt32 (executable.length); output.close (); */ createExecutable(templatePaths, null, source, target, iconPath); } } ================================================ FILE: src/lime/tools/NodeJSHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.Architecture; import lime.tools.HXProject; import lime.tools.Platform; class NodeJSHelper { public static function run(project:HXProject, modulePath:String, args:Array = null):Void { /*var suffix = switch (System.hostPlatform) { case Platform.WINDOWS: "-windows.exe"; case Platform.MAC: "-mac"; case Platform.LINUX: "-linux"; default: return; } if (suffix == "-linux") { if (System.hostArchitecture == X86) { suffix += "32"; } else { suffix += "64"; } } var templatePaths = [ Path.combine (Haxelib.getPath (new Haxelib (#if lime "lime" #else "hxp" #end)), "templates") ].concat (project.templatePaths); var node = System.findTemplate (templatePaths, "bin/node/node" + suffix); if (System.hostPlatform != WINDOWS) { Sys.command ("chmod", [ "+x", node ]); } if (args == null) { args = []; }*/ args.unshift(Path.withoutDirectory(modulePath)); System.runCommand(Path.directory(modulePath), "node", args); } } ================================================ FILE: src/lime/tools/Orientation.hx ================================================ package lime.tools; enum Orientation { PORTRAIT; LANDSCAPE; ALL; AUTO; } ================================================ FILE: src/lime/tools/Platform.hx ================================================ package lime.tools; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract Platform(String) from hxp.HostPlatform { var AIR = "air"; var ANDROID = "android"; var BLACKBERRY = "blackberry"; var CONSOLE_PC = "console-pc"; var FIREFOX = "firefox"; var FLASH = "flash"; var HTML5 = "html5"; var IOS = "ios"; var LINUX = "linux"; var MAC = "mac"; var PS3 = "ps3"; var PS4 = "ps4"; var TIZEN = "tizen"; var VITA = "vita"; var WEB_ASSEMBLY = "webassembly"; var WINDOWS = "windows"; var WEBOS = "webos"; var WIIU = "wiiu"; var XBOX1 = "xbox1"; var EMSCRIPTEN = "emscripten"; var TVOS = "tvos"; var CUSTOM = null; @:op(A == B) @:commutative private inline function equalsHostPlatform(hostPlatform:hxp.HostPlatform):Bool { return this == hostPlatform; } } ================================================ FILE: src/lime/tools/PlatformTarget.hx ================================================ package lime.tools; import haxe.rtti.Meta; import hxp.*; import lime.tools.AssetHelper; import lime.tools.CommandHelper; import sys.FileSystem; import sys.io.File; class PlatformTarget { public var additionalArguments:Array; public var buildType:String; public var command:String; public var noOutput:Bool; public var project:HXProject; public var targetDirectory:String; public var targetFlags:Map; public var traceEnabled = true; public function new(command:String = null, project:HXProject = null, targetFlags:Map = null) { this.command = command; this.project = project; this.targetFlags = targetFlags; buildType = "release"; if (project != null) { if (project.debug) { buildType = "debug"; } else if (project.targetFlags.exists("final")) { buildType = "final"; } } for (haxeflag in project.haxeflags) { if (haxeflag == "--no-output") { noOutput = true; } } } public function execute(additionalArguments:Array):Void { // Log.info ("", Log.accentColor + "Using target platform: " + Std.string (project.target).toUpperCase () + Log.resetColor); this.additionalArguments = additionalArguments; var metaFields = Meta.getFields(Type.getClass(this)); // known issue: this may not log in `-eval` mode on Linux inline function logCommand(command:String):Void { if (!Reflect.hasField(metaFields, command) || !Reflect.hasField(Reflect.field(metaFields, command), "ignore")) { Log.info("", "\n" + Log.accentColor + "Running command: " + command.toUpperCase() + Log.resetColor); } } if (project.targetFlags.exists("watch")) { Log.info("", "\n" + Log.accentColor + "Running command: WATCH" + Log.resetColor); watch(); return; } if (command == "display") { display(); } // if (command == "clean" || project.targetFlags.exists ("clean")) { if (command == "clean" || (project.targetFlags.exists("clean") && (command == "update" || command == "build" || command == "test"))) { logCommand("CLEAN"); clean(); } if (command == "rebuild" || project.targetFlags.exists("rebuild")) { logCommand("REBUILD"); // hack for now, need to move away from project.rebuild.path, probably if (project.targetFlags.exists("rebuild")) { project.config.set("project.rebuild.path", null); } rebuild(); } if (command == "update" || command == "build" || command == "test") { logCommand("update"); _touchedFiles = []; update(); deleteStaleFiles(_touchedFiles); _touchedFiles = null; } if (command == "build" || command == "test") { CommandHelper.executeCommands(project.preBuildCallbacks); logCommand("build"); build(); CommandHelper.executeCommands(project.postBuildCallbacks); } if (command == "deploy") { logCommand("deploy"); deploy(); } if (command == "install" || command == "run" || command == "test") { logCommand("install"); install(); } if (command == "run" || command == "rerun" || command == "test") { logCommand("run"); run(); } if ((command == "test" || command == "trace" || command == "run" || command == "rerun") && (traceEnabled || command == "trace")) { logCommand("trace"); this.trace(); } if (command == "uninstall") { logCommand("UNINSTALL"); uninstall(); } } @ignore public function build():Void {} @ignore public function clean():Void {} @ignore public function deploy():Void {} @ignore public function display():Void {} @ignore public function install():Void {} @ignore public function rebuild():Void {} @ignore public function run():Void {} @ignore public function trace():Void {} @ignore public function uninstall():Void {} @ignore public function update():Void {} @ignore public function watch():Void {} // Functions to track and delete stale files /** Files that were copied into the output directory due to something in project.xml, but which might not be included next time. `PlatformTarget` will handle assets and templates, but subclasses are responsible for adding any other files they copy (e.g., dependencies). **/ private var _touchedFiles:Array = null; /** Calls `System.copyIfNewer()` with the given arguments, then records the file in `_touchedFiles`. See `_touchedFiles` for information about what needs to be recorded. **/ private function copyIfNewer(source:String, destination:String):Void { System.copyIfNewer(source, destination); if (_touchedFiles != null) { _touchedFiles.push(destination); } } private function deleteStaleFiles(touchedFiles:Array):Void { if (project.defines.exists("lime-ignore-stale-files")) return; for (asset in project.assets) { touchedFiles.push(targetDirectory + "/bin/" + asset.targetPath); } var record:String = targetDirectory + "/.files"; if (FileSystem.exists(record)) { for (oldFile in File.getContent(record).split("\n")) { if (oldFile.length > 0 && touchedFiles.indexOf(oldFile) < 0) { System.deleteFile(oldFile); } } } File.saveContent(record, touchedFiles.join("\n")); } /** Calls `System.recursiveCopy()` with the given arguments, then records the files in `_touchedFiles`. See `_touchedFiles` for information about what needs to be recorded. **/ private function recursiveCopy(source:String, destination:String, context:Dynamic = null, process:Bool = true):Void { System.recursiveCopy(source, destination, context, process); if (_touchedFiles == null || !FileSystem.exists(source)) return; function recurse(source:String, destination:String):Void { for (file in FileSystem.readDirectory(source)) { if (file.charAt(0) == ".") continue; if (FileSystem.isDirectory(source + "/" + file)) { recurse(source + "/" + file, destination + "/" + file); } else { _touchedFiles.push(destination + "/" + file); } } } recurse(source, destination); } } ================================================ FILE: src/lime/tools/PlatformTargetMain.hx ================================================ package lime.tools; import haxe.Unserializer; import hxp.*; import lime.tools.Architecture; import lime.tools.HXProject; import lime.tools.Platform; import sys.io.File; import sys.io.Process; import sys.FileSystem; class PlatformTargetMain { private static var additionalArguments = new Array(); private static var targetFlags = new Map(); private static var traceEnabled:Bool = true; public static function main() { var arguments = Sys.args(); var runFromHaxelib = false; if (arguments.length > 0) { // When the command-line tools are called from haxelib, // the last argument is the project directory and the // path to Lime is the current working directory var lastArgument = ""; for (i in 0...arguments.length) { lastArgument = arguments.pop(); if (lastArgument.length > 0) break; } lastArgument = new Path(lastArgument).toString(); if (((StringTools.endsWith(lastArgument, "/") && lastArgument != "/") || StringTools.endsWith(lastArgument, "\\")) && !StringTools.endsWith(lastArgument, ":\\")) { lastArgument = lastArgument.substr(0, lastArgument.length - 1); } if (FileSystem.exists(lastArgument) && FileSystem.isDirectory(lastArgument)) { Sys.setCwd(lastArgument); runFromHaxelib = true; } else { arguments.push(lastArgument); } } if (!runFromHaxelib) { if (FileSystem.exists("tools.n")) { Haxelib.setOverridePath(new Haxelib("lime"), Path.combine(Sys.getCwd(), "../")); } else if (FileSystem.exists("run.n")) { Haxelib.setOverridePath(new Haxelib("lime"), Sys.getCwd()); } } var additionalArguments:Array = []; var catchArguments = false; var className = ""; var command = ""; var words:Array = []; for (argument in arguments) { var equals = argument.indexOf("="); if (catchArguments) { additionalArguments.push(argument); } else if (argument == "-v" || argument == "-verbose") { Log.verbose = true; } else if (argument == "-args") { catchArguments = true; } else if (argument == "-notrace") { traceEnabled = false; } else if (argument == "-debug") { // debug = true; } else if (argument == "-nocolor") { Log.enableColor = false; } else if (className.length == 0) { className = argument; } else if (command.length == 0) { command = argument; } else { words.push(argument); } } if (words.length > 0) { try { var classRef = Type.resolveClass(className); if (classRef == null) throw "Cannot find class name \"" + className + "\""; var inputPath = words[0]; var projectData = File.getContent(inputPath); var unserializer = new Unserializer(projectData); unserializer.setResolver(cast {resolveEnum: Type.resolveEnum, resolveClass: resolveClass}); var project:HXProject = unserializer.unserialize(); var platform = Type.createInstance(classRef, [command, project, project.targetFlags]); platform.traceEnabled = traceEnabled; platform.execute(additionalArguments); } catch (e:Dynamic) { Log.error(e); } } } private static function resolveClass(name:String):Class { var result = Type.resolveClass(name); if (result == null) { result = HXProject; } return result; } } ================================================ FILE: src/lime/tools/PlatformType.hx ================================================ package lime.tools; enum PlatformType { DESKTOP; MOBILE; WEB; CONSOLE; } ================================================ FILE: src/lime/tools/ProjectHelper.hx ================================================ package lime.tools; import hxp.*; import sys.io.File; import sys.FileSystem; #if neko import neko.Lib; #elseif cpp import cpp.Lib; #end class ProjectHelper { // private static var doubleVarMatch = new EReg ("\\$\\${(.*?)}", ""); private static var varMatch = new EReg("{{(.*?)}}", ""); public static function copyLibrary(project:HXProject, ndll:NDLL, directoryName:String, namePrefix:String, nameSuffix:String, targetDirectory:String, allowDebug:Bool = false, targetSuffix:String = null) { var path = NDLL.getLibraryPath(ndll, directoryName, namePrefix, nameSuffix, allowDebug); if (FileSystem.exists(path)) { var targetPath = Path.combine(targetDirectory, namePrefix + ndll.name); if (targetSuffix != null) { targetPath += targetSuffix; } else { targetPath += nameSuffix; } if (project.config.getBool("tools.copy-ndlls")) { Log.info("", " - \x1b[1mCopying library file:\x1b[0m " + path + " \x1b[3;37m->\x1b[0m " + targetPath); System.mkdir(targetDirectory); try { File.copy(path, targetPath); } catch (e:Dynamic) { Log.error("Cannot copy to \"" + targetPath + "\", is the file in use?"); } } else { Log.info("", " - \x1b[1mSkipping library file:\x1b[0m " + path + " \x1b[3;37m->\x1b[0m " + targetPath); } } else { Log.error("Source path \"" + path + "\" does not exist"); } } public static function getCurrentCommand():String { var args = Sys.args(); args.remove("-watch"); if (Haxelib.pathOverrides.exists("lime-tools")) { var tools = Haxelib.pathOverrides.get("lime-tools"); return "neko " + tools + "/tools.n " + args.join(" "); } else { args.pop(); return "lime " + args.join(" "); } } public static function recursiveSmartCopyTemplate(project:HXProject, source:String, destination:String, context:Dynamic = null, process:Bool = true, warnIfNotFound:Bool = true) { var destinations:Array = []; var paths = System.findTemplateRecursive(project.templatePaths, source, warnIfNotFound, destinations); if (paths != null) { System.mkdir(destination); var itemDestination:String; for (i in 0...paths.length) { itemDestination = Path.combine(destination, ProjectHelper.substitutePath(project, destinations[i])); System.copyFile(paths[i], itemDestination, context, process); } } } public static function replaceVariable(project:HXProject, string:String):String { if (string.substr(0, 8) == "haxelib:") { var path = Haxelib.getPath(new Haxelib(string.substr(8)), true); return Path.standardize(path); } else if (project.defines.exists(string)) { return project.defines.get(string); } else if (project.environment != null && project.environment.exists(string)) { return project.environment.get(string); } // TODO: Should we start phasing this out? else if (string == "projectDirectory") { Log.info("", "Consider using ${project.workingDirectory} instead of ${projectDirectory}."); return project.workingDirectory; } else { var substring = StringTools.replace(string, " ", ""); var index:Int; var value:String; if (substring.indexOf("==") > -1) { index = substring.indexOf("=="); value = ProjectHelper.replaceVariable(project, substring.substr(0, index)); return Std.string(value == substring.substr(index + 2)); } else if (substring.indexOf("!=") > -1) { index = substring.indexOf("!="); value = ProjectHelper.replaceVariable(project, substring.substr(0, index)); return Std.string(value != substring.substr(index + 2)); } else if (substring.indexOf("<=") > -1) { index = substring.indexOf("<="); value = ProjectHelper.replaceVariable(project, substring.substr(0, index)); return Std.string(value <= substring.substr(index + 2)); } else if (substring.indexOf("<") > -1) { index = substring.indexOf("<"); value = ProjectHelper.replaceVariable(project, substring.substr(0, index)); return Std.string(value < substring.substr(index + 1)); } else if (substring.indexOf(">=") > -1) { index = substring.indexOf(">="); value = ProjectHelper.replaceVariable(project, substring.substr(0, index)); return Std.string(value >= substring.substr(index + 2)); } else if (substring.indexOf(">") > -1) { index = substring.indexOf(">"); value = ProjectHelper.replaceVariable(project, substring.substr(0, index)); return Std.string(value > substring.substr(index + 1)); } else if (substring.indexOf(".") > -1) { var fields = substring.split("."); if (fields[0] == "project") fields.shift(); var object:Dynamic = project; while (object != null && fields.length > 0) { object = Reflect.getProperty(object, fields.shift()); } if (object != null && object != project) { return Std.string(object); } } } return string; } public static function substitutePath(project:HXProject, path:String):String { var newString = path; // while (doubleVarMatch.match (newString)) { // newString = doubleVarMatch.matchedLeft () + "${" + ProjectHelper.replaceVariable (this, doubleVarMatch.matched (1)) + "}" + doubleVarMatch.matchedRight (); // } while (varMatch.match(newString)) { newString = varMatch.matchedLeft() + ProjectHelper.replaceVariable(project, varMatch.matched(1)) + varMatch.matchedRight(); } return newString; } } ================================================ FILE: src/lime/tools/ProjectXMLParser.hx ================================================ package lime.tools; import hxp.*; import lime.tools.CommandHelper; import lime.tools.ModuleHelper; import lime.tools.Asset; import lime.tools.AssetType; import lime.tools.Dependency; import lime.tools.HXProject; #if lime import lime.utils.AssetManifest; #end import sys.io.File; import sys.FileSystem; #if (haxe_ver >= 4) import haxe.xml.Access; #else import haxe.xml.Fast as Access; #end class ProjectXMLParser extends HXProject { public var includePaths:Array; private static var doubleVarMatch = new EReg("\\$\\${(.*?)}", ""); private static var varMatch = new EReg("\\${(.*?)}", ""); public function new(path:String = "", defines:Map = null, includePaths:Array = null, useExtensionPath:Bool = false) { super(defines); if (includePaths != null) { this.includePaths = includePaths; } else { this.includePaths = new Array(); } if (path != "") { process(path, useExtensionPath); } } private function isValidElement(element:Access, section:String):Bool { if (element.x.get("if") != null) { var value = element.x.get("if"); var optionalDefines = value.split("||"); var matchOptional = false; for (optional in optionalDefines) { optional = substitute(optional); var requiredDefines = optional.split(" "); var matchRequired = true; for (required in requiredDefines) { required = substitute(required); var check = StringTools.trim(required); if (check == "false") { matchRequired = false; } else if (check != "" && check != "true" && !defines.exists(check) && (environment == null || !environment.exists(check)) && check != command) { matchRequired = false; } } if (matchRequired) { matchOptional = true; } } if (optionalDefines.length > 0 && !matchOptional) { return false; } } if (element.has.unless) { var value = substitute(element.att.unless); var optionalDefines = value.split("||"); var matchOptional = false; for (optional in optionalDefines) { optional = substitute(optional); var requiredDefines = optional.split(" "); var matchRequired = true; for (required in requiredDefines) { required = substitute(required); var check = StringTools.trim(required); if (check == "false") { matchRequired = false; } else if (check != "" && check != "true" && !defines.exists(check) && (environment == null || !environment.exists(check)) && check != command) { matchRequired = false; } } if (matchRequired) { matchOptional = true; } } if (optionalDefines.length > 0 && matchOptional) { return false; } } if (section != "") { if (element.name != "section") { return false; } if (!element.has.id) { return false; } if (substitute(element.att.id) != section) { return false; } } return true; } private function findIncludeFile(base:String):String { if (base == "") { return ""; } if (base.substr(0, 1) != "/" && base.substr(0, 1) != "\\" && base.substr(1, 1) != ":" && base.substr(0, 1) != "." && !FileSystem.exists(base)) { for (path in includePaths) { var includePath = path + "/" + base; if (FileSystem.exists(includePath)) { if (FileSystem.exists(includePath + "/include.lime")) { return includePath + "/include.lime"; } else if (FileSystem.exists(includePath + "/include.nmml")) { return includePath + "/include.nmml"; } else if (FileSystem.exists(includePath + "/include.xml")) { return includePath + "/include.xml"; } else { return includePath; } } } } else { if (base.substr(-1, 1) == "/") { base = base.substr(0, base.length - 1); } else if (base.substr(-1, 1) == "\\") { base = base.substring(0, base.length - 1); } if (FileSystem.exists(base)) { if (FileSystem.exists(base + "/include.lime")) { return base + "/include.lime"; } else if (FileSystem.exists(base + "/include.nmml")) { return base + "/include.nmml"; } else if (FileSystem.exists(base + "/include.xml")) { return base + "/include.xml"; } else { return base; } } } return ""; } private function formatAttributeName(name:String):String { var segments = name.toLowerCase().split("-"); for (i in 1...segments.length) { segments[i] = segments[i].substr(0, 1).toUpperCase() + segments[i].substr(1); } return segments.join(""); } public static function fromFile(path:String, defines:Map = null, includePaths:Array = null, useExtensionPath:Bool = false):ProjectXMLParser { if (path == null) return null; if (FileSystem.exists(path)) { return new ProjectXMLParser(path, defines, includePaths, useExtensionPath); } return null; } private function parseAppElement(element:Access, extensionPath:String):Void { for (attribute in element.x.attributes()) { switch (attribute) { case "path": app.path = Path.combine(extensionPath, substitute(element.att.path)); case "min-swf-version": var version = Std.parseFloat(substitute(element.att.resolve("min-swf-version"))); if (version > app.swfVersion) { app.swfVersion = version; } case "swf-version": app.swfVersion = Std.parseFloat(substitute(element.att.resolve("swf-version"))); case "preloader": app.preloader = substitute(element.att.preloader); default: // if we are happy with this spec, we can tighten up this parsing a bit, later var name = formatAttributeName(attribute); var value = substitute(element.att.resolve(attribute)); if (attribute == "package") { name = "packageName"; } if (Reflect.hasField(ApplicationData.expectedFields, name)) { Reflect.setField(app, name, value); } else if (Reflect.hasField(MetaData.expectedFields, name)) { Reflect.setField(meta, name, value); } } } } private function parseAssetsElement(element:Access, basePath:String = "", isTemplate:Bool = false):Void { var path = ""; var embed:Null = null; var library:String = null; var targetPath = ""; var glyphs:String = null; var type:AssetType = null; if (element.has.path) { path = Path.combine(basePath, substitute(element.att.path)); } if (element.has.embed) { embed = parseBool(element.att.embed); } if (element.has.rename) { targetPath = substitute(element.att.rename); } else if (element.has.path) { targetPath = substitute(element.att.path); } if (element.has.library) { library = substitute(element.att.library); } if (element.has.glyphs) { glyphs = substitute(element.att.glyphs); } if (isTemplate) { type = AssetType.TEMPLATE; } else if (element.has.type) { var typeName = substitute(element.att.type); if (Reflect.hasField(AssetType, typeName.toUpperCase())) { type = Reflect.field(AssetType, typeName.toUpperCase()); } else if (typeName == "bytes") { type = AssetType.BINARY; } else { Log.warn("Ignoring unknown asset type \"" + typeName + "\""); } } if (path == "" && (element.has.include || element.has.exclude || type != null)) { Log.error("In order to use 'include' or 'exclude' on nodes, you must specify also specify a 'path' attribute"); return; } else if (!element.elements.hasNext()) { // Empty element if (path == "") { return; } if (!FileSystem.exists(path)) { Log.error("Could not find asset path \"" + path + "\""); return; } if (!FileSystem.isDirectory(path)) { var asset = new Asset(path, targetPath, type, embed); asset.library = library; if (element.has.id) { asset.id = substitute(element.att.id); } if (glyphs != null) { asset.glyphs = glyphs; } assets.push(asset); } else if (Path.extension(path) == "bundle") { parseAssetsElementLibrary(path, targetPath, "*", "", type, embed, library, glyphs, true); } else { var exclude = ".*|cvs|thumbs.db|desktop.ini|*.fla|*.hash"; var include = ""; if (element.has.exclude) { exclude += "|" + substitute(element.att.exclude); } if (element.has.include) { include = substitute(element.att.include); } else { // if (type == null) { include = "*"; /*} else { switch (type) { case IMAGE: include = "*.jpg|*.jpeg|*.png|*.gif"; case SOUND: include = "*.wav|*.ogg"; case MUSIC: include = "*.mp2|*.mp3|*.ogg"; case FONT: include = "*.otf|*.ttf"; case TEMPLATE: include = "*"; default: include = "*"; } }*/ } parseAssetsElementDirectory(path, targetPath, include, exclude, type, embed, library, glyphs, true); } } else { if (path != "") { path += "/"; } if (targetPath != "") { targetPath += "/"; } for (childElement in element.elements) { var isValid = isValidElement(childElement, ""); if (isValid) { var childPath = substitute(childElement.has.name ? childElement.att.name : childElement.att.path); var childTargetPath = childPath; var childEmbed:Null = embed; var childLibrary = library; var childType = type; var childGlyphs = glyphs; if (childElement.has.rename) { childTargetPath = substitute(childElement.att.rename); } if (childElement.has.embed) { childEmbed = parseBool(childElement.att.embed); } if (childElement.has.library) { childLibrary = substitute(childElement.att.library); } if (childElement.has.glyphs) { childGlyphs = substitute(childElement.att.glyphs); } switch (childElement.name) { case "image", "sound", "music", "font", "template": childType = Reflect.field(AssetType, childElement.name.toUpperCase()); case "library", "manifest": childType = AssetType.MANIFEST; default: if (childElement.has.type) { childType = Reflect.field(AssetType, substitute(childElement.att.type).toUpperCase()); } } var asset = new Asset(path + childPath, targetPath + childTargetPath, childType, childEmbed); asset.library = childLibrary; if (childElement.has.id) { asset.id = substitute(childElement.att.id); } else if (childElement.has.name) { asset.id = substitute(childElement.att.name); } if (childGlyphs != null) { asset.glyphs = childGlyphs; } assets.push(asset); } } } } private function parseAssetsElementDirectory(path:String, targetPath:String, include:String, exclude:String, type:AssetType, embed:Null, library:String, glyphs:String, recursive:Bool):Void { var files = FileSystem.readDirectory(path); if (targetPath != "") { targetPath += "/"; } for (file in files) { if (FileSystem.exists(path + "/" + file) && FileSystem.isDirectory(path + "/" + file)) { if (Path.extension(file) == "bundle") { parseAssetsElementLibrary(path + "/" + file, targetPath + file, include, exclude, type, embed, library, glyphs, true); } else if (recursive) { if (filter(file, ["*"], exclude.split("|"))) { parseAssetsElementDirectory(path + "/" + file, targetPath + file, include, exclude, type, embed, library, glyphs, true); } } } else { if (filter(file, include.split("|"), exclude.split("|"))) { var asset = new Asset(path + "/" + file, targetPath + file, type, embed); asset.library = library; if (glyphs != null) { asset.glyphs = glyphs; } assets.push(asset); } } } } private function parseAssetsElementLibrary(path:String, targetPath:String, include:String, exclude:String, type:AssetType, embed:Null, library:String, glyphs:String, recursive:Bool):Void { var includePath = findIncludeFile(path); if (includePath != null && includePath != "" && FileSystem.exists(includePath) && !FileSystem.isDirectory(includePath)) { var includeProject = new ProjectXMLParser(includePath, defines); merge(includeProject); } var processedLibrary = false; var jsonPath = Path.combine(path, "library.json"); if (FileSystem.exists(jsonPath)) { #if lime try { var manifest = AssetManifest.fromFile(jsonPath); if (manifest != null) { library = targetPath; var asset = new Asset(jsonPath, Path.combine(targetPath, "library.json"), AssetType.MANIFEST); asset.id = "libraries/" + library + ".json"; asset.library = library; asset.data = manifest.serialize(); asset.embed = embed; assets.push(asset); for (manifestAsset in manifest.assets) { if (Reflect.hasField(manifestAsset, "path")) { var asset = new Asset(Path.combine(path, manifestAsset.path), Path.combine(targetPath, manifestAsset.path), type, embed); asset.id = manifestAsset.id; asset.library = library; asset.embed = embed; assets.push(asset); } } processedLibrary = true; } } catch (e:Dynamic) {} #end } if (!processedLibrary) { parseAssetsElementDirectory(path, targetPath, include, exclude, type, embed, library, glyphs, true); } } private function parseBool(attribute:String):Bool { return substitute(attribute) == "true"; } private function parseCommandElement(element:Access, commandList:Array):Void { var command:CLICommand = null; if (element.has.haxe) { command = CommandHelper.interpretHaxe(substitute(element.att.haxe)); } if (element.has.open) { command = CommandHelper.openFile(substitute(element.att.open)); } if (element.has.command) { command = CommandHelper.fromSingleString(substitute(element.att.command)); } if (element.has.cmd) { command = CommandHelper.fromSingleString(substitute(element.att.cmd)); } if (command != null) { for (arg in element.elements) { if (arg.name == "arg") { command.args.push(arg.innerData); } } commandList.push(command); } } private function parseMetaElement(element:Access):Void { for (attribute in element.x.attributes()) { switch (attribute) { case "title", "description", "package", "version", "company", "company-id", "build-number", "company-url", "copyright-years": var value = substitute(element.att.resolve(attribute)); defines.set("APP_" + StringTools.replace(attribute, "-", "_").toUpperCase(), value); var name = formatAttributeName(attribute); if (attribute == "package") { name = "packageName"; } if (Reflect.hasField(MetaData.expectedFields, name)) { Reflect.setField(meta, name, value); } } } } private function parseModuleElement(element:Access, basePath:String = "", moduleData:ModuleData = null):Void { var topLevel = (moduleData == null); var exclude = ""; var include = "*"; if (element.has.include) { include = substitute(element.att.include); } if (element.has.exclude) { exclude = substitute(element.att.exclude); } if (moduleData == null) { var name = substitute(element.att.name); if (modules.exists(name)) { moduleData = modules.get(name); } else { moduleData = new ModuleData(name); modules.set(name, moduleData); } } switch (element.name) { case "module" | "source": var sourceAttribute = (element.name == "module" ? "source" : "path"); if (element.has.resolve(sourceAttribute)) { var source = Path.combine(basePath, substitute(element.att.resolve(sourceAttribute))); var packageName = ""; if (element.has.resolve("package")) { packageName = element.att.resolve("package"); } ModuleHelper.addModuleSource(source, moduleData, include.split("|"), exclude.split("|"), packageName); } case "class": if (element.has.remove) { moduleData.classNames.remove(substitute(element.att.remove)); } else { moduleData.classNames.push(substitute(element.att.name)); } case "haxedef": var value = substitute(element.att.name); if (element.has.value) { value += "=" + substitute(element.att.value); } moduleData.haxeflags.push("-D " + value); case "haxeflag": var flag = substitute(element.att.name); if (element.has.value) { flag += " " + substitute(element.att.value); } moduleData.haxeflags.push(substitute(flag)); case "include": moduleData.includeTypes.push(substitute(element.att.type)); case "exclude": moduleData.excludeTypes.push(substitute(element.att.type)); } if (topLevel) { for (childElement in element.elements) { if (isValidElement(childElement, "")) { parseModuleElement(childElement, basePath, moduleData); } } } } private function parseOutputElement(element:Access, extensionPath:String):Void { if (element.has.name) { app.file = substitute(element.att.name); } if (element.has.path) { app.path = Path.combine(extensionPath, substitute(element.att.path)); } if (element.has.resolve("swf-version")) { app.swfVersion = Std.parseFloat(substitute(element.att.resolve("swf-version"))); } } private function parseXML(xml:Access, section:String, extensionPath:String = ""):Void { for (element in xml.elements) { if (!isValidElement(element, section)) continue; switch (element.name) { case "set": var name = element.att.name; var value = ""; if (element.has.value) { value = substitute(element.att.value); } switch (name) { case "BUILD_DIR": app.path = value; case "SWF_VERSION": app.swfVersion = Std.parseFloat(value); case "PRERENDERED_ICON": config.set("ios.prerenderedIcon", value); case "ANDROID_INSTALL_LOCATION": config.set("android.install-location", value); } defines.set(name, value); environment.set(name, value); case "unset": defines.remove(element.att.name); environment.remove(element.att.name); case "define": var name = element.att.name; var value = ""; if (element.has.value) { value = substitute(element.att.value); } defines.set(name, value); haxedefs.set(name, value); environment.set(name, value); case "undefine": defines.remove(element.att.name); haxedefs.remove(element.att.name); environment.remove(element.att.name); case "setenv": var value = ""; if (element.has.value) { value = substitute(element.att.value); } else { value = "1"; } var name = substitute(element.att.name); defines.set(name, value); environment.set(name, value); setenv(name, value); if (needRerun) return; case "error": Log.error(substitute(element.att.value)); case "echo": if (command != "display") { Log.println(substitute(element.att.value)); } case "log": var verbose = ""; if (element.has.verbose) { verbose = substitute(element.att.verbose); } if (element.has.error) { Log.error(substitute(element.att.error), verbose); } else if (command != "display") { if (element.has.warn) { Log.warn(substitute(element.att.warn), verbose); } else if (element.has.info) { Log.info(substitute(element.att.info), verbose); } else if (element.has.value) { Log.info(substitute(element.att.value), verbose); } else if (verbose != "") { Log.info("", verbose); } } case "path": var value = ""; if (element.has.value) { value = substitute(element.att.value); } else { value = substitute(element.att.name); } path(value); case "include": var path = ""; var addSourcePath = true; var haxelib:Haxelib = null; if (element.has.haxelib) { haxelib = new Haxelib(substitute(element.att.haxelib)); path = findIncludeFile(Haxelib.getPath(haxelib, true)); addSourcePath = false; } else if (element.has.path) { var subPath = substitute(element.att.path); if (subPath == "") subPath = element.att.path; path = findIncludeFile(Path.combine(extensionPath, subPath)); } else { path = findIncludeFile(Path.combine(extensionPath, substitute(element.att.name))); } if (path != null && path != "" && FileSystem.exists(path) && !FileSystem.isDirectory(path)) { var includeProject = new ProjectXMLParser(path, defines); if (includeProject != null && haxelib != null) { for (ndll in includeProject.ndlls) { if (ndll.haxelib == null) { ndll.haxelib = haxelib; } } } if (addSourcePath) { var dir = Path.directory(path); if (dir != "") { includeProject.sources.unshift(dir); } } merge(includeProject); } else if (!element.has.noerror) { if (path == "" || FileSystem.isDirectory(path)) { var errorPath = ""; if (element.has.path) { errorPath = element.att.path; } else if (element.has.name) { errorPath = element.att.name; } else { errorPath = Std.string(element); } Log.error("\"" + errorPath + "\" does not appear to be a valid path"); } else { Log.error("Could not find include file \"" + path + "\""); } } case "meta": parseMetaElement(element); case "app": parseAppElement(element, extensionPath); case "java": javaPaths.push(Path.combine(extensionPath, substitute(element.att.path))); case "language": languages.push(element.att.name); case "haxelib": if (element.has.repository) { setenv("HAXELIB_PATH", Path.combine(Sys.getCwd(), element.att.repository)); if (needRerun) return; continue; } var name = substitute(element.att.name); var version = ""; var optional = false; var path:String = null; if (element.has.version) { version = substitute(element.att.version); } if (element.has.optional) { optional = parseBool(element.att.optional); } if (element.has.path) { path = Path.combine(extensionPath, substitute(element.att.path)); } var haxelib = new Haxelib(name, version); if (version != "" && defines.exists(name) && !haxelib.versionMatches(defines.get(name))) { Log.warn("Ignoring requested haxelib \"" + name + "\" version \"" + version + "\" (version \"" + defines.get(name) + "\" was already included)"); continue; } if (path == null) { if (defines.exists("setup")) { path = Haxelib.getPath(haxelib); } else { path = Haxelib.getPath(haxelib, !optional); if (optional && path == "") { continue; } } } else { path = Path.tryFullPath(Path.combine(extensionPath, path)); if (version != "") { Haxelib.pathOverrides.set(name + ":" + version, path); } else { Haxelib.pathOverrides.set(name, path); } } if (!defines.exists(haxelib.name)) { defines.set(haxelib.name, Std.string(Haxelib.getVersion(haxelib))); } haxelibs.push(haxelib); var includeProject = HXProject.fromHaxelib(haxelib, defines); if (includeProject != null) { for (ndll in includeProject.ndlls) { if (ndll.haxelib == null) { ndll.haxelib = haxelib; } } merge(includeProject); } case "ndll": var name = substitute(element.att.name); var haxelib:Haxelib = null; var staticLink:Null = null; var registerStatics = true; var subdirectory:String = null; if (element.has.haxelib) { haxelib = new Haxelib(substitute(element.att.haxelib)); } if (element.has.dir) { subdirectory = substitute(element.att.dir); } if (haxelib == null && (name == "std" || name == "regexp" || name == "zlib")) { haxelib = new Haxelib(config.getString("cpp.buildLibrary", "hxcpp")); } if (element.has.type) { var typeString = substitute(element.att.type).toLowerCase(); if (typeString == "static") staticLink = true; if (typeString == "dynamic") staticLink = false; } if (element.has.register) { registerStatics = parseBool(element.att.register); } var ndll = new NDLL(name, haxelib, staticLink, registerStatics); ndll.extensionPath = extensionPath; ndll.subdirectory = subdirectory; ndlls.push(ndll); case "architecture": if (element.has.name) { var name = substitute(element.att.name); if (Reflect.hasField(Architecture, name.toUpperCase())) { ArrayTools.addUnique(architectures, Reflect.field(Architecture, name.toUpperCase())); } else { Log.warn("Ignoring unknown architecture: " + name); } } if (element.has.exclude) { var exclude = substitute(element.att.exclude); if (Reflect.hasField(Architecture, exclude.toUpperCase())) { ArrayTools.addUnique(excludeArchitectures, Reflect.field(Architecture, exclude.toUpperCase())); } else { Log.warn("Ignoring unknown architecture: " + exclude); } } case "launchImage", "splashscreen", "splashScreen": var path = ""; if (element.has.path) { path = Path.combine(extensionPath, substitute(element.att.path)); } else { path = Path.combine(extensionPath, substitute(element.att.name)); } var splashScreen = new SplashScreen(path); if (element.has.width) { var parsedValue = Std.parseInt(substitute(element.att.width)); if (parsedValue == null) { Log.warn("Ignoring unknown width=\"" + element.att.width + "\""); } else { splashScreen.width = parsedValue; } } if (element.has.height) { var parsedValue = Std.parseInt(substitute(element.att.height)); if (parsedValue == null) { Log.warn("Ignoring unknown height=\"" + element.att.height + "\""); } else { splashScreen.height = parsedValue; } } splashScreens.push(splashScreen); case "launchStoryboard": if (launchStoryboard == null) { launchStoryboard = new LaunchStoryboard(); } if (element.has.path) { launchStoryboard.path = Path.combine(extensionPath, substitute(element.att.path)); } else if (element.has.name) { launchStoryboard.path = Path.combine(extensionPath, substitute(element.att.name)); } else if (element.has.template) { launchStoryboard.template = substitute(element.att.template); launchStoryboard.templateContext = {}; for (attr in element.x.attributes()) { if (attr == "assetsPath") continue; var valueType = "String"; var valueName = attr; if (valueName.indexOf("-") != -1) { valueType = valueName.substring(valueName.lastIndexOf("-") + 1); valueName = valueName.substring(0, valueName.lastIndexOf("-")); } else if (valueName.indexOf(":") != -1) { valueType = valueName.substring(valueName.lastIndexOf(":") + 1); valueName = valueName.substring(0, valueName.lastIndexOf(":")); } var stringValue = element.x.get(attr); var value:Dynamic; switch (valueType) { case "Int": value = Std.parseInt(stringValue); case "RGB": var rgb:lime.math.ARGB = Std.parseInt(stringValue); value = {r: rgb.r / 255, g: rgb.g / 255, b: rgb.b / 255}; case "String": value = stringValue; default: Log.warn("Ignoring unknown value type \"" + valueType + "\" in storyboard configuration."); value = ""; } Reflect.setField(launchStoryboard.templateContext, valueName, value); } } if (element.has.assetsPath) { launchStoryboard.assetsPath = Path.combine(extensionPath, substitute(element.att.assetsPath)); } for (childElement in element.elements) { if (!isValidElement(childElement, "")) continue; if (childElement.name == "imageset") { var name = substitute(childElement.att.name); var imageset = new LaunchStoryboard.ImageSet(name); if (childElement.has.width) { var parsedValue = Std.parseInt(substitute(childElement.att.width)); if (parsedValue == null) { Log.warn("Ignoring unknown width=\"" + element.att.width + "\""); } else { imageset.width = parsedValue; } } if (childElement.has.height) { var parsedValue = Std.parseInt(substitute(childElement.att.height)); if (parsedValue == null) { Log.warn("Ignoring unknown height=\"" + element.att.height + "\""); } else { imageset.height = parsedValue; } } launchStoryboard.assets.push(imageset); } } case "icon": var path = ""; if (element.has.path) { path = Path.combine(extensionPath, substitute(element.att.path)); } else { path = Path.combine(extensionPath, substitute(element.att.name)); } var icon = new Icon(path); if (element.has.size) { var parsedValue = Std.parseInt(substitute(element.att.size)); if (parsedValue == null) { Log.warn("Ignoring unknown size=\"" + element.att.size + "\""); } else { icon.size = icon.width = icon.height = parsedValue; } } if (element.has.width) { var parsedValue = Std.parseInt(substitute(element.att.width)); if (parsedValue == null) { Log.warn("Ignoring unknown width=\"" + element.att.width + "\""); } else { icon.width = parsedValue; } } if (element.has.height) { var parsedValue = Std.parseInt(substitute(element.att.height)); if (parsedValue == null) { Log.warn("Ignoring unknown height=\"" + element.att.height + "\""); } else { icon.height = parsedValue; } } if (element.has.priority) { var parsedValue = Std.parseInt(substitute(element.att.priority)); if (parsedValue == null) { Log.warn("Ignoring unknown priority=\"" + element.att.priority + "\""); } else { icon.priority = parsedValue; } } icons.push(icon); case "source", "classpath": var path = ""; if (element.has.path) { path = Path.combine(extensionPath, substitute(element.att.path)); } else { path = Path.combine(extensionPath, substitute(element.att.name)); } sources.push(path); case "extension": // deprecated case "haxedef": if (element.has.remove) { haxedefs.remove(substitute(element.att.remove)); } else { var name = substitute(element.att.name); var value = ""; if (element.has.value) { value = substitute(element.att.value); } haxedefs.set(name, value); } case "haxeflag", "compilerflag": var flag = substitute(element.att.name); if (element.has.value) { flag += " " + substitute(element.att.value); } haxeflags.push(substitute(flag)); case "window": parseWindowElement(element); case "assets": parseAssetsElement(element, extensionPath); case "library", "swf": if (element.has.handler) { if (element.has.type) { libraryHandlers.set(substitute(element.att.type), substitute(element.att.handler)); } } else { var path:String = null; var name = ""; var type:String = null; var embed:Null = null; var preload = false; var generate = false; var prefix = ""; if (element.has.path) { path = Path.combine(extensionPath, substitute(element.att.path)); } if (element.has.name) { name = substitute(element.att.name); } if (element.has.id) { name = substitute(element.att.id); } if (element.has.type) { type = substitute(element.att.type); } if (element.has.embed) { embed = parseBool(element.att.embed); } if (element.has.preload) { preload = parseBool(element.att.preload); } if (element.has.generate) { generate = parseBool(element.att.generate); } if (element.has.prefix) { prefix = substitute(element.att.prefix); } libraries.push(new Library(path, name, type, embed, preload, generate, prefix)); } case "module": parseModuleElement(element, extensionPath); case "ssl": // if (wantSslCertificate()) // parseSsl (element); case "sample": samplePaths.push(Path.combine(extensionPath, substitute(element.att.path))); case "target": if (element.has.handler) { if (element.has.name) { targetHandlers.set(substitute(element.att.name), substitute(element.att.handler)); } } else if (element.has.path) { if (element.has.name) { targetHandlers.set(substitute(element.att.name), Path.combine(extensionPath, substitute(element.att.path))); } } case "template": if (element.has.path) { if (element.has.haxelib) { var haxelibPath = Haxelib.getPath(new Haxelib(substitute(element.att.haxelib)), true); var path = Path.combine(haxelibPath, substitute(element.att.path)); templatePaths.push(path); } else { var path = Path.combine(extensionPath, substitute(element.att.path)); if (FileSystem.exists(path) && !FileSystem.isDirectory(path)) { parseAssetsElement(element, extensionPath, true); } else { templatePaths.push(path); } } } else { parseAssetsElement(element, extensionPath, true); } case "templatePath": templatePaths.push(Path.combine(extensionPath, substitute(element.att.name))); case "preloader": // deprecated app.preloader = substitute(element.att.name); case "output": // deprecated parseOutputElement(element, extensionPath); case "section": parseXML(element, "", extensionPath); case "certificate": if (element.has.path || element.has.type) { keystore = new Keystore(); } if (keystore != null) { if (element.has.path) { keystore.path = Path.combine(extensionPath, substitute(element.att.path)); } else if (element.has.keystore) { keystore.path = Path.combine(extensionPath, substitute(element.att.keystore)); } if (element.has.type) { keystore.type = substitute(element.att.type); } if (element.has.password) { keystore.password = substitute(element.att.password); } if (element.has.alias) { keystore.alias = substitute(element.att.alias); } if (element.has.resolve("alias-password")) { keystore.aliasPassword = substitute(element.att.resolve("alias-password")); } else if (element.has.alias_password) { keystore.aliasPassword = substitute(element.att.alias_password); } } if (element.has.identity) { config.set("ios.identity", element.att.identity); config.set("tvos.identity", element.att.identity); } if (element.has.resolve("team-id")) { config.set("ios.team-id", element.att.resolve("team-id")); config.set("tvos.team-id", element.att.resolve("team-id")); } case "dependency": var name = ""; var path = ""; if (element.has.path) { path = Path.combine(extensionPath, substitute(element.att.path)); } if (element.has.name) { var foundName = substitute(element.att.name); if (StringTools.endsWith(foundName, ".a") || StringTools.endsWith(foundName, ".dll")) { path = Path.combine(extensionPath, foundName); } else { name = foundName; } } var dependency = new Dependency(name, path); if (element.has.embed) { dependency.embed = parseBool(element.att.embed); } if (element.has.resolve("force-load")) { dependency.forceLoad = parseBool(element.att.resolve("force-load")); } if (element.has.resolve("allow-web-workers")) { dependency.allowWebWorkers = parseBool(element.att.resolve("allow-web-workers")); } var i = dependencies.length; while (i-- > 0) { if ((name != "" && dependencies[i].name == name) || (path != "" && dependencies[i].path == path)) { dependencies.splice(i, 1); } } dependencies.push(dependency); case "android": // deprecated for (attribute in element.x.attributes()) { var name = attribute; var value = substitute(element.att.resolve(attribute)); switch (name) { case "minimum-sdk-version": var parsedValue = Std.parseInt(value); if (parsedValue == null) { Log.warn("Ignoring unknown " + name + "=\"" + value + "\""); } else { config.set("android.minimum-sdk-version", parsedValue); } case "target-sdk-version": var parsedValue = Std.parseInt(value); if (parsedValue == null) { Log.warn("Ignoring unknown " + name + "=\"" + value + "\""); } else { config.set("android.target-sdk-version", parsedValue); } case "install-location": config.set("android.install-location", value); case "extension": var extensions = config.getArrayString("android.extension"); if (extensions == null || extensions.indexOf(value) == -1) { config.push("android.extension", value); } case "permission": var permissions = config.getArrayString("android.permission"); if (permissions == null || permissions.indexOf(value) == -1) { config.push("android.permission", value); } case "gradle-version": config.set("android.gradle-version", value); case "gradle-plugin": config.set("android.gradle-plugin", value); default: name = formatAttributeName(attribute); } } case "cpp": // deprecated for (attribute in element.x.attributes()) { var name = attribute; var value = substitute(element.att.resolve(attribute)); switch (name) { case "build-library": config.set("cpp.buildLibrary", value); default: name = formatAttributeName(attribute); } } case "ios": // deprecated if (target != Platform.IOS) continue; if (element.has.deployment) { var deployment = Std.parseFloat(substitute(element.att.deployment)); // If it is specified, assume the dev knows what he is doing! config.set("ios.deployment", deployment); } if (element.has.binaries) { var binaries = substitute(element.att.binaries); switch (binaries) { case "fat": ArrayTools.addUnique(architectures, Architecture.ARMV6); ArrayTools.addUnique(architectures, Architecture.ARMV7); case "armv6": ArrayTools.addUnique(architectures, Architecture.ARMV6); architectures.remove(Architecture.ARMV7); case "armv7": ArrayTools.addUnique(architectures, Architecture.ARMV7); architectures.remove(Architecture.ARMV6); } } if (element.has.devices) { config.set("ios.device", substitute(element.att.devices).toLowerCase()); } if (element.has.compiler) { config.set("ios.compiler", substitute(element.att.compiler)); } if (element.has.resolve("prerendered-icon")) { config.set("ios.prerenderedIcon", substitute(element.att.resolve("prerendered-icon"))); } if (element.has.resolve("linker-flags")) { config.push("ios.linker-flags", substitute(element.att.resolve("linker-flags"))); } case "tvos": // deprecated if (target != Platform.TVOS) continue; if (element.has.deployment) { var deployment = Std.parseFloat(substitute(element.att.deployment)); // If it is specified, assume the dev knows what he is doing! config.set("tvos.deployment", deployment); } if (element.has.binaries) { var binaries = substitute(element.att.binaries); switch (binaries) { case "arm64": ArrayTools.addUnique(architectures, Architecture.ARM64); } } if (element.has.devices) { config.set("tvos.device", substitute(element.att.devices).toLowerCase()); } if (element.has.compiler) { config.set("tvos.compiler", substitute(element.att.compiler)); } if (element.has.resolve("prerendered-icon")) { config.set("tvos.prerenderedIcon", substitute(element.att.resolve("prerendered-icon"))); } if (element.has.resolve("linker-flags")) { config.push("tvos.linker-flags", substitute(element.att.resolve("linker-flags"))); } case "config": config.parse(element, substitute); case "prebuild": parseCommandElement(element, preBuildCallbacks); case "postbuild": parseCommandElement(element, postBuildCallbacks); default: if (StringTools.startsWith(element.name, "config:")) { config.parse(element, substitute); } } } } private function parseWindowElement(element:Access):Void { var id = 0; if (element.has.id) { var parsedValue = Std.parseInt(substitute(element.att.id)); if (parsedValue == null) { Log.warn("Ignoring unknown id=\"" + element.att.id + "\""); } else { id = parsedValue; } } while (id >= windows.length) { windows.push({}); } for (attribute in element.x.attributes()) { var name = attribute; var value = substitute(element.att.resolve(attribute)); switch (name) { case "background": value = StringTools.replace(value, "#", ""); if (value == "null" || value == "transparent" || value == "") { windows[id].background = null; } else { if (value.indexOf("0x") == -1) value = "0x" + value; if (value.length == 10 && StringTools.startsWith(value, "0x00")) { windows[id].background = null; } else { var parsedValue = Std.parseInt(value); if (parsedValue == null) { Log.warn("Ignoring unknown " + name + "=\"" + value + "\""); } else { windows[id].background = parsedValue; } } } case "orientation": var orientation = Reflect.field(Orientation, Std.string(value).toUpperCase()); if (orientation != null) { windows[id].orientation = orientation; } case "height", "width", "fps", "antialiasing": var parsedValue = Std.parseInt(value); if (parsedValue == null) { Log.warn("Ignoring unknown " + name + "=\"" + value + "\""); } else { Reflect.setField(windows[id], name, parsedValue); } case "parameters", "title": Reflect.setField(windows[id], name, Std.string(value)); case "allow-high-dpi": Reflect.setField(windows[id], "allowHighDPI", value == "true"); case "color-depth": var parsedValue = Std.parseInt(value); if (parsedValue == null) { Log.warn("Ignoring unknown " + name + "=\"" + value + "\""); } else { Reflect.setField(windows[id], "colorDepth", parsedValue); } default: if (Reflect.hasField(WindowData.expectedFields, name)) { Reflect.setField(windows[id], name, value == "true"); } else if (Reflect.hasField(WindowData.expectedFields, formatAttributeName(name))) { Reflect.setField(windows[id], formatAttributeName(name), value == "true"); } } } } public function process(projectFile:String, useExtensionPath:Bool):Void { var xml:Access = null; var extensionPath = ""; try { xml = new Access(Xml.parse(File.getContent(projectFile)).firstElement()); extensionPath = Path.directory(projectFile); } catch (e:Dynamic) { Log.error("\"" + projectFile + "\" contains invalid XML data", e); } parseXML(xml, "", extensionPath); } private function substitute(string:String):String { var newString = string; while (doubleVarMatch.match(newString)) { newString = doubleVarMatch.matchedLeft() + "${" + ProjectHelper.replaceVariable(this, doubleVarMatch.matched(1)) + "}" + doubleVarMatch.matchedRight(); } while (varMatch.match(newString)) { newString = varMatch.matchedLeft() + ProjectHelper.replaceVariable(this, varMatch.matched(1)) + varMatch.matchedRight(); } return newString; } } ================================================ FILE: src/lime/tools/SplashScreen.hx ================================================ package lime.tools; class SplashScreen { public var height:Int; public var path:String; public var width:Int; public function new(path:String, width:Int = 0, height:Int = 0) { this.path = path; this.width = width; this.height = height; } public function clone():SplashScreen { var splashScreen = new SplashScreen(path); splashScreen.width = width; splashScreen.height = height; return splashScreen; } } ================================================ FILE: src/lime/tools/TVOSHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.HXProject; import sys.io.Process; import sys.FileSystem; class TVOSHelper { private static var initialized = false; public static function build(project:HXProject, workingDirectory:String, additionalArguments:Array = null):Void { initialize(project); var commands = getXCodeArgs(project); if (project.targetFlags.exists("archive")) { var configuration = project.environment.get("CONFIGURATION"); var platformName = project.environment.get("PLATFORM_NAME"); commands.push("archive"); commands.push("-scheme"); commands.push(project.app.file); commands.push("-archivePath"); commands.push(Path.combine("build", Path.combine(configuration + "-" + platformName, project.app.file))); } if (additionalArguments != null) { commands = commands.concat(additionalArguments); } System.runCommand(workingDirectory, "xcodebuild", commands); } public static function deploy(project:HXProject, workingDirectory:String):Void { initialize(project); var commands = getXCodeArgs(project); var archiveCommands = commands.concat([]); // generate xcarchive var configuration = project.environment.get("CONFIGURATION"); var platformName = project.environment.get("PLATFORM_NAME"); archiveCommands.push("archive"); archiveCommands.push("-scheme"); archiveCommands.push(project.app.file); archiveCommands.push("-archivePath"); archiveCommands.push(Path.combine("build", Path.combine(configuration + "-" + platformName, project.app.file))); System.runCommand(workingDirectory, "xcodebuild", archiveCommands); // generate IPA from xcarchive var exportCommands = commands.concat([]); var exportMethod = project.targetFlags.exists("adhoc") ? "adhoc" : project.targetFlags.exists("development") ? "development" : project.targetFlags.exists("enterprise") ? "enterprise" : "appstore"; exportCommands.push("-exportArchive"); exportCommands.push("-archivePath"); exportCommands.push(Path.combine("build", Path.combine(configuration + "-" + platformName, project.app.file + ".xcarchive"))); exportCommands.push("-exportOptionsPlist"); exportCommands.push(Path.combine(project.app.file, "exportOptions-" + exportMethod + ".plist")); exportCommands.push("-exportPath"); exportCommands.push(Path.combine("dist", exportMethod)); System.runCommand(workingDirectory, "xcodebuild", exportCommands); } private static function getXCodeArgs(project:HXProject):Array { var platformName = "appletvos"; if (project.targetFlags.exists("simulator")) { platformName = "appletvsimulator"; } var configuration = "Release"; if (project.debug) { configuration = "Debug"; } var iphoneVersion = project.environment.get("TVOS_VER"); var commands = [ "-configuration", configuration, "PLATFORM_NAME=" + platformName, "SDKROOT=" + platformName + iphoneVersion ]; if (project.targetFlags.exists("simulator")) { commands.push("-arch"); commands.push("x86_64"); } project.setenv("PLATFORM_NAME", platformName); project.setenv("CONFIGURATION", configuration); // setting CONFIGURATION and PLATFORM_NAME in project.environment doesn't set them for xcodebuild so also pass via command line var commands = [ "-configuration", configuration, "PLATFORM_NAME=" + platformName, "SDKROOT=" + platformName + iphoneVersion ]; if (project.targetFlags.exists("simulator")) { commands.push("-arch"); commands.push("x86_64"); } commands.push("-project"); commands.push(project.app.file + ".xcodeproj"); var xcodeVersions = getXcodeVersion().split(".").map(function(i:String) { var ver = Std.parseInt(i); return ver != null ? ver : 0; }); if (xcodeVersions[0] >= 9) { if (project.config.getBool('ios.allow-provisioning-updates', true)) { commands.push("-allowProvisioningUpdates"); } if (project.config.getBool('ios.allow-provisioning-device-registration', true)) { commands.push("-allowProvisioningDeviceRegistration"); } } return commands; } private static function getIOSVersion(project:HXProject):Void { if (!project.environment.exists("TVOS_VER")) { if (!project.environment.exists("DEVELOPER_DIR")) { var proc = new Process("xcode-select", ["--print-path"]); var developer_dir = proc.stdout.readLine(); proc.close(); project.environment.set("DEVELOPER_DIR", developer_dir); } var dev_path = project.environment.get("DEVELOPER_DIR") + "/Platforms/AppleTVOS.platform/Developer/SDKs"; if (FileSystem.exists(dev_path)) { var best = ""; var files = FileSystem.readDirectory(dev_path); var extract_version = ~/^AppleTVOS(.*).sdk$/; for (file in files) { if (extract_version.match(file)) { var ver = extract_version.matched(1); if (ver > best) { best = ver; } } } if (best != "") { project.environment.set("TVOS_VER", best); } } } } private static function getOSXVersion():String { var output = System.runProcess("", "sw_vers", ["-productVersion"]); return StringTools.trim(output); } public static function getProvisioningFile():String { var path = Path.expand("~/Library/MobileDevice/Provisioning Profiles"); var files = FileSystem.readDirectory(path); for (file in files) { if (Path.extension(file) == "mobileprovision") { return path + "/" + file; } } return ""; } public static function getSDKDirectory(project:HXProject):String { initialize(project); var platformName = "AppleTVOS"; if (project.targetFlags.exists("simulator")) { platformName = "AppleTVSimulator"; } var process = new Process("xcode-select", ["--print-path"]); var directory = process.stdout.readLine(); process.close(); if (directory == "" || directory.indexOf("Run xcode-select") > -1) { directory = "/Applications/Xcode.app/Contents/Developer"; } directory += "/Platforms/" + platformName + ".platform/Developer/SDKs/" + platformName + project.environment.get("TVOS_VER") + ".sdk"; Log.info(directory); return directory; } private static function getXcodeVersion():String { var output = System.runProcess("", "xcodebuild", ["-version"]); var firstLine = output.split("\n").shift(); return StringTools.trim(firstLine.substring("Xcode".length, firstLine.length)); } private static function initialize(project:HXProject):Void { if (!initialized) { getIOSVersion(project); initialized = true; } } public static function launch(project:HXProject, workingDirectory:String):Void { initialize(project); var configuration = "Release"; if (project.debug) { configuration = "Debug"; } if (project.targetFlags.exists("simulator")) { var applicationPath = ""; if (Path.extension(workingDirectory) == "app" || Path.extension(workingDirectory) == "ipa") { applicationPath = workingDirectory; } else { applicationPath = workingDirectory + "/build/" + configuration + "-appletvsimulator/" + project.app.file + ".app"; } var templatePaths = [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), #if lime "templates" #else "" #end) ].concat(project.templatePaths); var launcher = System.findTemplate(templatePaths, "bin/ios-sim"); Sys.command("chmod", ["+x", launcher]); // device config var defaultDevice = "apple-tv-1080p"; var devices:Array = ["apple-tv-1080p"]; var oldDevices:Map = ["appletv" => "apple-tv-1080p"]; var deviceFlag:String = null; var deviceTypeID:String = null; // check if old device flag and convert to current for (key in oldDevices.keys()) { if (project.targetFlags.exists(key)) { deviceFlag = oldDevices[key]; break; } } // check known device in command line args if (deviceFlag == null) { for (i in 0...devices.length) { if (project.targetFlags.exists(devices[i])) { deviceFlag = devices[i]; break; } } } // default to iphone 6 if (deviceFlag == null) { deviceFlag = defaultDevice; } // check if device is available // $ ios-sim showdevicetypes var devicesOutput:String = System.runProcess("", launcher, ["showdevicetypes"]); var deviceTypeList:Array = devicesOutput.split("\n"); for (i in 0...deviceTypeList.length) { var r = new EReg(deviceFlag + ",", "i"); if (r.match(deviceTypeList[i])) { deviceTypeID = deviceTypeList[i]; break; } } if (deviceTypeID == null) { Log.warn("Device \"" + deviceFlag + "\" was not found"); } else { Log.info("Launch app on \"" + deviceTypeID + "\""); } // run command with --devicetypeid if exists if (deviceTypeID != null) { System.runCommand("", launcher, [ "launch", FileSystem.fullPath(applicationPath), /*"--sdk", project.environment.get ("IPHONE_VER"),*/ "--devicetypeid", deviceTypeID, "--timeout", "60" ]); } else { System.runCommand("", launcher, [ "launch", FileSystem.fullPath(applicationPath), /*"--sdk", project.environment.get ("IPHONE_VER"), "--devicetypeid", deviceTypeID,*/ "--timeout", "60" ]); } } else { var applicationPath = ""; if (Path.extension(workingDirectory) == "app" || Path.extension(workingDirectory) == "ipa") { applicationPath = workingDirectory; } else { applicationPath = workingDirectory + "/build/" + configuration + "-appletvos/" + project.app.file + ".app"; } var templatePaths = [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), #if lime "templates" #else "" #end) ].concat(project.templatePaths); var launcher = System.findTemplate(templatePaths, "bin/ios-deploy"); Sys.command("chmod", ["+x", launcher]); var xcodeVersion = getXcodeVersion(); System.runCommand("", launcher, [ "install", "--noninteractive", "--debug", "--timeout", "5", "--bundle", FileSystem.fullPath(applicationPath) ]); } } public static function sign(project:HXProject, workingDirectory:String):Void { initialize(project); var configuration = "Release"; if (project.debug) { configuration = "Debug"; } var identity = project.config.getString("tvos.identity", "tvOS Developer"); var commands = ["-s", identity, "CODE_SIGN_IDENTITY=" + identity]; if (project.config.exists("tvos.provisioning-profile")) { commands.push("PROVISIONING_PROFILE=" + project.config.getString("tvos.provisioning-profile")); } var applicationPath = "build/" + configuration + "-appletvos/" + project.app.file + ".app"; commands.push(applicationPath); System.runCommand(workingDirectory, "codesign", commands, true, true); } } ================================================ FILE: src/lime/tools/TizenHelper.hx ================================================ package lime.tools; import haxe.crypto.Crc32; import haxe.io.Bytes; import haxe.io.Eof; import hxp.*; import lime.tools.HXProject; import lime.tools.Platform; import sys.FileSystem; class TizenHelper { private static var cacheID:String = null; private static var cacheUUID:String = null; public static function createPackage(project:HXProject, workingDirectory:String, targetPath:String):Void { var keystore:String = null; var password:String = null; if (project.keystore != null) { keystore = Path.tryFullPath(project.keystore.path); password = project.keystore.password; if (password == null) { password = prompt("Keystore password", true); Sys.println(""); } } if (keystore == null) { var templatePaths = [ Path.combine(Haxelib.getPath(new Haxelib(#if lime "lime" #else "hxp" #end)), #if lime "templates" #else "" #end) ].concat(project.templatePaths); keystore = System.findTemplate(templatePaths, "bin/debug.p12"); password = "1234"; } var packageName = getUUID(project) + "-" + project.meta.version + "-"; if (project.targetFlags.exists("simulator")) { packageName += "i386"; } else { packageName += "arm"; } packageName += ".tpk"; if (FileSystem.exists(Path.combine(workingDirectory, packageName))) { try { FileSystem.deleteFile((Path.combine(workingDirectory, packageName))); } catch (e:Dynamic) {} } runCommand(project, workingDirectory, "native-packaging", ["--sign-author-key", keystore, "--sign-author-pwd", password]); } public static function getUUID(project:HXProject):String { if (cacheID != project.meta.packageName) { if (project.meta.packageName != null || project.meta.packageName.length == 10 || project.meta.packageName.indexOf(".") == -1) { var bytes = Bytes.ofString(project.meta.packageName); var crc = Crc32.make(bytes); cacheUUID = StringTools.generateUUID(10, null, crc); } else { cacheUUID = project.meta.packageName; } cacheID = project.meta.packageName; } return cacheUUID; } public static function install(project:HXProject, workingDirectory:String):Void { var packageName = getUUID(project) + "-" + project.meta.version + "-"; if (project.targetFlags.exists("simulator")) { packageName += "i386"; } else { packageName += "arm"; } packageName += ".tpk"; runCommand(project, "", "native-install", ["--package", FileSystem.fullPath(workingDirectory + "/" + packageName)]); } public static function launch(project:HXProject):Void { runCommand(project, "", "native-run", ["--package", getUUID(project)]); } private static function prompt(name:String, ?passwd:Bool):String { Sys.print(name + ": "); if (passwd) { var s = new StringBuf(); var c:Int; while ((c = Sys.getChar(false)) != 13) s.addChar(c); return s.toString(); } try { return Sys.stdin().readLine(); } catch (e:Eof) { return ""; } } private static function runCommand(project:HXProject, workingDirectory:String, command:String, args:Array):Void { var sdkDirectory = ""; if (project.environment.exists("TIZEN_SDK")) { sdkDirectory = project.environment.get("TIZEN_SDK"); } else { if (System.hostPlatform == WINDOWS) { sdkDirectory = "C:\\Development\\Tizen\\tizen-sdk"; } else { sdkDirectory = "~/Development/Tizen/tizen-sdk"; } } System.runCommand(workingDirectory, Path.combine(sdkDirectory, "tools/ide/bin/" + command), args); } public static function trace(project:HXProject, follow:Bool = true):Void { /*var args:Array = []; if (follow) { args.push ("-f"); } args.push (project.meta.packageName); runPalmCommand (project, "", "log", args); */ var sdkDirectory = ""; if (project.environment.exists("TIZEN_SDK")) { sdkDirectory = project.environment.get("TIZEN_SDK"); } else { if (System.hostPlatform == WINDOWS) { sdkDirectory = "C:\\Development\\Tizen\\tizen-sdk"; } else { sdkDirectory = "~/Development/Tizen/tizen-sdk"; } } // var args = [ "--package", project.meta.packageName ]; // var args = [ "dlog", project.meta.packageName + ":V", "*:E" ]; var args = ["dlog", project.app.file + ":V", "*:F"]; System.runCommand("", Path.combine(sdkDirectory, "tools/sdb"), ["dlog", "-c"]); System.runCommand("", Path.combine(sdkDirectory, "tools/sdb"), args); // runCommand (project, "", "native-debug", [ "-p", project.meta.packageName ]); } } ================================================ FILE: src/lime/tools/WindowData.hx ================================================ package lime.tools; @:forward abstract WindowData({ @:optional var width:Int; @:optional var height:Int; @:optional var x:Float; @:optional var y:Float; @:optional var background:Null; @:optional var parameters:String; @:optional var fps:Int; @:optional var hardware:Bool; @:optional var display:Int; @:optional var resizable:Bool; @:optional var borderless:Bool; @:optional var vsync:Bool; @:optional var fullscreen:Bool; @:optional var allowHighDPI:Bool; @:optional var alwaysOnTop:Bool; @:optional var antialiasing:Int; @:optional var orientation:Orientation; @:optional var allowShaders:Bool; @:optional var requireShaders:Bool; @:optional var depthBuffer:Bool; @:optional var stencilBuffer:Bool; @:optional var title:String; #if (js && html5) @:optional var element:js.html.Element; #end @:optional var colorDepth:Int; @:optional var minimized:Bool; @:optional var maximized:Bool; @:optional var hidden:Bool; }) from Dynamic { @:noCompletion public static var expectedFields:WindowData = { width: 0, height: 0, x: 0.0, y: 0.0, background: 0, parameters: "", fps: 0, hardware: false, display: 0, resizable: false, borderless: false, vsync: false, fullscreen: false, allowHighDPI: false, alwaysOnTop: false, antialiasing: 0, orientation: Orientation.AUTO, allowShaders: false, requireShaders: false, depthBuffer: false, stencilBuffer: false, title: "", #if (js && html5) element: null, #end colorDepth: 0, minimized: false, maximized: false, hidden: false }; } ================================================ FILE: src/lime/tools/XCodeHelper.hx ================================================ package lime.tools; import hxp.*; import lime.tools.HXProject; class XCodeHelper { // different computers may have different sets of simulators installed // so there isn't necessarily a reasonable default for ipads private static var DEFAULT_IPAD_SIMULATOR_NAMES = [ "ipad", "ipad-air" ]; private static var DEFAULT_IPAD_AIR_SIMULATOR_FALLBACK_REGEX = ~/ipad-air-.+/g; private static var DEFAULT_IPAD_SIMULATOR_FALLBACK_REGEX = ~/ipad-.+/g; // this should be a standard iPhone of a particular generation private static var DEFAULT_IPHONE_SIMULATOR_REGEX = ~/iphone-\d+/g; private static var DEFAULT_IPHONE_SIMULATOR_FALLBACK_REGEX = ~/iphone-.+/g; private static function extractSimulatorFlagName(line:String):String { var device = line.substring(0, line.indexOf("(") - 1); device = device.toLowerCase(); device = StringTools.replace(device, " ", "-"); return device; } private static function extractSimulatorFullName(line:String):String { var name = ""; if (line.indexOf("inch") > -1 || line.indexOf("generation") > -1) { name = line.substring(0, line.indexOf(")") + 1); } else { name = line.substring(0, line.indexOf("(") - 1); } return name; } private static function extractSimulatorID(line:String):String { var id = line.substring(line.indexOf("(") + 1, line.indexOf(")")); if (id.indexOf("inch") > -1 || id.indexOf("generation") > -1) { var startIndex = line.indexOf(")") + 2; id = line.substring(line.indexOf("(", startIndex) + 1, line.indexOf(")", startIndex)); } return id; } public static function getSelectedSimulator(project:HXProject):SimulatorInfo { var output = getSimulators(); var lines = output.split("\n"); var foundSection = false; var device = ""; var deviceID = ""; var deviceName = ""; var devices = new Map(); var currentDevice:SimulatorInfo = null; for (line in lines) { if (StringTools.startsWith(line, "--")) { if (line.indexOf("Unavailable") > -1) { foundSection = false; } else if (line.indexOf("iOS") > -1) { foundSection = true; } else if (foundSection) { break; } } else if (foundSection) { deviceName = extractSimulatorFullName(StringTools.trim(line)); deviceID = extractSimulatorID(StringTools.trim(line)); device = extractSimulatorFlagName(StringTools.trim(line)); devices.set(device, {id: deviceID, name: deviceName}); if (project.targetFlags.exists(device)) { currentDevice = devices.get(device); break; } } } if (currentDevice == null) { if (project.targetFlags.exists("ipad") || project.config.getString("ios.device", "universal") == "ipad") { for (device in DEFAULT_IPAD_SIMULATOR_NAMES) { // try to find a relatively standard ipad simulator currentDevice = devices.get(device); if (currentDevice != null) { break; } } // if we couldn't find one of the default names, let's try to // find any iPad Air, which should be a reasonable default if (currentDevice == null) { for (device in devices.keys()) { if (DEFAULT_IPAD_AIR_SIMULATOR_FALLBACK_REGEX.match(device)) { currentDevice = devices.get(device); break; } } } // worst case, if we still haven't found a good name, choose the // first ipad that we find. it could be a mini or pro, which // might not necessarily be ideal, but it's better than nothing. if (currentDevice == null) { for (device in devices.keys()) { if (DEFAULT_IPAD_SIMULATOR_FALLBACK_REGEX.match(device)) { currentDevice = devices.get(device); break; } } } } else { for (device in devices.keys()) { // try to find a standard iphone, which should have an name // like iphone-15 or iphone-16 if (DEFAULT_IPHONE_SIMULATOR_REGEX.match(device)) { currentDevice = devices.get(device); break; } } // of we can't find a standard iphone for some reason, choose // the first iphone- name that we find. it could be a plus, pro, // se, or something that might not necessarily be ideal, but // it's better than nothing at all. if (currentDevice == null) { for (device in devices.keys()) { if (DEFAULT_IPHONE_SIMULATOR_FALLBACK_REGEX.match(device)) { currentDevice = devices.get(device); break; } } } } } return currentDevice; } public static function getSimulatorID(project:HXProject):String { var simulator = getSelectedSimulator(project); if (simulator == null) { return null; } return simulator.id; } public static function getSimulatorName(project:HXProject):String { var simulator = getSelectedSimulator(project); if (simulator == null) { return null; } return simulator.name; } private static function getSimulators():String { return System.runProcess("", "xcrun", ["simctl", "list", "devices"]); } } private typedef SimulatorInfo = { public var id:String; public var name:String; } ================================================ FILE: src/lime/ui/FileDialog.hx ================================================ package lime.ui; import haxe.io.Bytes; import haxe.io.Path; import lime._internal.backend.native.NativeCFFI; import lime.app.Event; import lime.graphics.Image; import lime.system.CFFI; import lime.system.ThreadPool; import lime.utils.ArrayBuffer; import lime.utils.Resource; #if hl import hl.Bytes as HLBytes; import hl.NativeArray; #end #if sys import sys.FileSystem; import sys.io.File; #end #if (js && html5) import js.html.Blob; #end /** Simple file dialog used for asking user where to save a file, or select files to open. Example usage: ```haxe var fileDialog = new FileDialog(); fileDialog.onCancel.add( () -> trace("Canceled.") ); fileDialog.onSave.add( path -> trace("File saved in " + path) ); fileDialog.onOpen.add( res -> trace("Size of the file = " + (res:haxe.io.Bytes).length) ); if ( fileDialog.open("jpg", null, "Load file") ) trace("File dialog opened, waiting for selection..."); else trace("This dialog is unsupported."); ``` Availability note: most file dialog operations are only available on desktop targets, though `save()` is also available in HTML5. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.graphics.Image) class FileDialog { /** Triggers when the user clicks "Cancel" during any operation, or when a function is unsupported (such as `open()` on HTML5). **/ public var onCancel = new EventVoid>(); /** Triggers when `open()` is successful. The `lime.utils.Resource` contains the file's data, and can be implicitly cast to `haxe.io.Bytes`. **/ public var onOpen = new EventVoid>(); /** Triggers when `save()` is successful. The `String` is the path to the saved file. **/ public var onSave = new EventVoid>(); /** Triggers when `browse()` is successful and `type` is anything other than `FileDialogType.OPEN_MULTIPLE`. The `String` is the path to the selected file. **/ public var onSelect = new EventVoid>(); /** Triggers when `browse()` is successful and `type` is `FileDialogType.OPEN_MULTIPLE`. The `Array` contains all selected file paths. **/ public var onSelectMultiple = new Event->Void>(); public function new() {} /** Opens a file selection dialog. If successful, either `onSelect` or `onSelectMultiple` will trigger with the result(s). This function only works on desktop targets, and will return `false` otherwise. @param type Type of the file dialog: `OPEN`, `SAVE`, `OPEN_DIRECTORY` or `OPEN_MULTIPLE`. @param filter A filter to use when browsing. Asterisks are treated as wildcards. For example, `"*.jpg"` will match any file ending in `.jpg`. @param defaultPath The directory in which to start browsing and/or the default filename to suggest. Defaults to `Sys.getCwd()`, with no default filename. @param title The title to give the dialog window. @return Whether `browse()` is supported on this target. **/ public function browse(type:FileDialogType = null, filter:String = null, defaultPath:String = null, title:String = null):Bool { if (type == null) type = FileDialogType.OPEN; #if sys if (defaultPath != null && defaultPath.length > 0 && FileSystem.exists(defaultPath) && FileSystem.isDirectory(defaultPath)) { // if the default path is a directory, and the default path doesn't // end with a separator, tiny file dialogs may open its parent // directory instead. var lastChar = defaultPath.charAt(defaultPath.length - 1); #if windows if (lastChar != "/" && lastChar != "\\") { defaultPath = defaultPath + "\\"; } #else if (lastChar != "/") { defaultPath = defaultPath + "/"; } #end } #end #if desktop var worker = new ThreadPool(#if windows SINGLE_THREADED #end); worker.onComplete.add(function(result) { switch (type) { case OPEN, OPEN_DIRECTORY, SAVE: var path:String = cast result; if (path != null) { // Makes sure the filename ends with extension if (type == SAVE && filter != null && path.indexOf(".") == -1) { path += "." + filter; } onSelect.dispatch(path); } else { onCancel.dispatch(); } case OPEN_MULTIPLE: var paths:Array = cast result; if (paths != null && paths.length > 0) { onSelectMultiple.dispatch(paths); } else { onCancel.dispatch(); } } }); worker.run(function(_, __) { switch (type) { case OPEN: #if linux if (title == null) title = "Open File"; #end var path = null; #if (!macro && lime_cffi) trace(defaultPath); path = CFFI.stringValue(NativeCFFI.lime_file_dialog_open_file(title, filter, defaultPath)); #end worker.sendComplete(path); case OPEN_MULTIPLE: #if linux if (title == null) title = "Open Files"; #end var paths = null; #if (!macro && lime_cffi) #if hl var bytes:NativeArray = cast NativeCFFI.lime_file_dialog_open_files(title, filter, defaultPath); if (bytes != null) { paths = []; for (i in 0...bytes.length) { paths[i] = CFFI.stringValue(bytes[i]); } } #else paths = NativeCFFI.lime_file_dialog_open_files(title, filter, defaultPath); #end #end worker.sendComplete(paths); case OPEN_DIRECTORY: #if linux if (title == null) title = "Open Directory"; #end var path = null; #if (!macro && lime_cffi) path = CFFI.stringValue(NativeCFFI.lime_file_dialog_open_directory(title, filter, defaultPath)); #end worker.sendComplete(path); case SAVE: #if linux if (title == null) title = "Save File"; #end var path = null; #if (!macro && lime_cffi) path = CFFI.stringValue(NativeCFFI.lime_file_dialog_save_file(title, filter, defaultPath)); #end worker.sendComplete(path); } }); return true; #else onCancel.dispatch(); return false; #end } /** Shows an open file dialog. If successful, `onOpen` will trigger with the file contents. This function only works on desktop targets, and will return `false` otherwise. @param filter A filter to use when browsing. Asterisks are treated as wildcards. For example, `"*.jpg"` will match any file ending in `.jpg`. @param defaultPath The directory in which to start browsing and/or the default filename to suggest. Defaults to `Sys.getCwd()`, with no default filename. @param title The title to give the dialog window. @return Whether `open()` is supported on this target. **/ public function open(filter:String = null, defaultPath:String = null, title:String = null):Bool { #if (desktop && sys) var worker = new ThreadPool(#if windows SINGLE_THREADED #end); worker.onComplete.add(function(path:String) { if (path != null) { try { var data = File.getBytes(path); onOpen.dispatch(data); return; } catch (e:Dynamic) {} } onCancel.dispatch(); }); worker.run(function(_, __) { #if linux if (title == null) title = "Open File"; #end var path = null; #if (!macro && lime_cffi) path = CFFI.stringValue(NativeCFFI.lime_file_dialog_open_file(title, filter, defaultPath)); #end worker.sendComplete(path); }); return true; #else onCancel.dispatch(); return false; #end } /** Shows an open file dialog. If successful, `onSave` will trigger with the selected path. This function only works on desktop and HMTL5 targets, and will return `false` otherwise. @param data The file contents, in `haxe.io.Bytes` format. (Implicit casting possible.) @param filter A filter to use when browsing. Asterisks are treated as wildcards. For example, `"*.jpg"` will match any file ending in `.jpg`. Used only if targeting deskop. @param defaultPath The directory in which to start browsing and/or the default filename to suggest. When targeting destkop, this defaults to `Sys.getCwd()` with no default filename. When targeting HTML5, this defaults to the browser's download directory, with a default filename based on the MIME type. @param title The title to give the dialog window. @param type The default MIME type of the file, in case the type can't be determined from the file data. Used only if targeting HTML5. @return Whether `save()` is supported on this target. **/ public function save(data:Resource, filter:String = null, defaultPath:String = null, title:String = null, type:String = "application/octet-stream"):Bool { if (data == null) { onCancel.dispatch(); return false; } #if (desktop && sys) var worker = new ThreadPool(#if windows SINGLE_THREADED #end); worker.onComplete.add(function(path:String) { if (path != null) { try { File.saveBytes(path, data); onSave.dispatch(path); return; } catch (e:Dynamic) {} } onCancel.dispatch(); }); worker.run(function(_, __) { #if linux if (title == null) title = "Save File"; #end var path = null; #if (!macro && lime_cffi) path = CFFI.stringValue(NativeCFFI.lime_file_dialog_save_file(title, filter, defaultPath)); #end worker.sendComplete(path); }); return true; #elseif (js && html5) // TODO: Cleaner API for mimeType detection var defaultExtension = ""; if (Image.__isPNG(data)) { type = "image/png"; defaultExtension = ".png"; } else if (Image.__isJPG(data)) { type = "image/jpeg"; defaultExtension = ".jpg"; } else if (Image.__isGIF(data)) { type = "image/gif"; defaultExtension = ".gif"; } else if (Image.__isWebP(data)) { type = "image/webp"; defaultExtension = ".webp"; } var path = defaultPath != null ? Path.withoutDirectory(defaultPath) : "download" + defaultExtension; var buffer = (data : Bytes).getData(); buffer = buffer.slice(0, (data : Bytes).length); #if commonjs untyped #if haxe4 js.Syntax.code #else __js__ #end ("require ('file-saver')")(new Blob([buffer], {type: type}), path, true); #else untyped window.saveAs(new Blob([buffer], {type: type}), path, true); #end onSave.dispatch(path); return true; #else onCancel.dispatch(); return false; #end } } ================================================ FILE: src/lime/ui/FileDialogType.hx ================================================ package lime.ui; enum FileDialogType { OPEN; OPEN_MULTIPLE; SAVE; OPEN_DIRECTORY; } ================================================ FILE: src/lime/ui/Gamepad.hx ================================================ package lime.ui; import lime._internal.backend.native.NativeCFFI; import lime.app.Event; import lime.system.CFFI; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.ui.Joystick) class Gamepad { public static var devices = new Map(); public static var onConnect = new EventVoid>(); public var connected(default, null):Bool; public var guid(get, never):String; public var id(default, null):Int; public var name(get, never):String; public var onAxisMove = new EventFloat->Void>(); public var onButtonDown = new EventVoid>(); public var onButtonUp = new EventVoid>(); public var onDisconnect = new EventVoid>(); #if (js && html5) private var __jsGamepad:js.html.Gamepad; #end public function new(id:Int) { this.id = id; connected = true; #if (js && html5) var devices = Joystick.__getDeviceData(); __jsGamepad = devices[this.id]; #end } public static function addMappings(mappings:Array):Void { #if (lime_cffi && !macro) #if hl var _mappings = new hl.NativeArray(mappings.length); for (i in 0...mappings.length) _mappings[i] = mappings[i]; var mappings = _mappings; #end NativeCFFI.lime_gamepad_add_mappings(mappings); #end } /** @param lowFrequencyRumble The intensity of the low frequency (strong) rumble motor, from 0 to 1. @param highFrequencyRumble The intensity of the high frequency (weak) rumble motor, from 0 to 1. Will be ignored in situations where only one motor is available. @param duration The duration of the rumble effect, in milliseconds. **/ public inline function rumble(lowFrequencyRumble:Float, highFrequencyRumble:Float, duration:Int):Void { #if (lime_cffi && !macro) NativeCFFI.lime_gamepad_rumble(this.id, lowFrequencyRumble, highFrequencyRumble, duration); #elseif (js && html5) var actuator:Dynamic = (untyped __jsGamepad.vibrationActuator) ? untyped __jsGamepad.vibrationActuator : (untyped __jsGamepad.hapticActuators) ? untyped __jsGamepad.hapticActuators[0] : null; if (actuator == null) return; if (untyped actuator.playEffect) { untyped actuator.playEffect("dual-rumble", { duration: duration, strongMagnitude: lowFrequencyRumble, weakMagnitude: highFrequencyRumble }); } else if (untyped actuator.pulse) { untyped actuator.pulse(lowFrequencyRumble, duration); } #else return; #end } @:noCompletion private static function __connect(id:Int):Void { if (!devices.exists(id)) { var gamepad = new Gamepad(id); devices.set(id, gamepad); onConnect.dispatch(gamepad); } } @:noCompletion private static function __disconnect(id:Int):Void { var gamepad = devices.get(id); if (gamepad != null) gamepad.connected = false; devices.remove(id); if (gamepad != null) gamepad.onDisconnect.dispatch(); } // Get & Set Methods @:noCompletion private inline function get_guid():String { #if (lime_cffi && !macro) return CFFI.stringValue(NativeCFFI.lime_gamepad_get_device_guid(this.id)); #elseif (js && html5) return __jsGamepad.id; #else return null; #end } @:noCompletion private inline function get_name():String { #if (lime_cffi && !macro) return CFFI.stringValue(NativeCFFI.lime_gamepad_get_device_name(this.id)); #elseif (js && html5) return __jsGamepad.id; #else return null; #end } } ================================================ FILE: src/lime/ui/GamepadAxis.hx ================================================ package lime.ui; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract GamepadAxis(Int) from Int to Int from UInt to UInt { var LEFT_X = 0; var LEFT_Y = 1; var RIGHT_X = 2; var RIGHT_Y = 3; var TRIGGER_LEFT = 4; var TRIGGER_RIGHT = 5; public inline function toString():String { return switch (this) { case LEFT_X: "LEFT_X"; case LEFT_Y: "LEFT_Y"; case RIGHT_X: "RIGHT_X"; case RIGHT_Y: "RIGHT_Y"; case TRIGGER_LEFT: "TRIGGER_LEFT"; case TRIGGER_RIGHT: "TRIGGER_RIGHT"; default: "UNKNOWN (" + this + ")"; } } } ================================================ FILE: src/lime/ui/GamepadButton.hx ================================================ package lime.ui; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract GamepadButton(Int) from Int to Int from UInt to UInt { var A = 0; var B = 1; var X = 2; var Y = 3; var BACK = 4; var GUIDE = 5; var START = 6; var LEFT_STICK = 7; var RIGHT_STICK = 8; var LEFT_SHOULDER = 9; var RIGHT_SHOULDER = 10; var DPAD_UP = 11; var DPAD_DOWN = 12; var DPAD_LEFT = 13; var DPAD_RIGHT = 14; public inline function toString():String { return switch (this) { case A: "A"; case B: "B"; case X: "X"; case Y: "Y"; case BACK: "BACK"; case GUIDE: "GUIDE"; case START: "START"; case LEFT_STICK: "LEFT_STICK"; case RIGHT_STICK: "RIGHT_STICK"; case LEFT_SHOULDER: "LEFT_SHOULDER"; case RIGHT_SHOULDER: "RIGHT_SHOULDER"; case DPAD_UP: "DPAD_UP"; case DPAD_DOWN: "DPAD_DOWN"; case DPAD_LEFT: "DPAD_LEFT"; case DPAD_RIGHT: "DPAD_RIGHT"; default: "UNKNOWN (" + this + ")"; } } } ================================================ FILE: src/lime/ui/Haptic.hx ================================================ package lime.ui; import lime._internal.backend.native.NativeCFFI; import lime.system.JNI; import lime.utils.Log; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class Haptic { #if android private static var lime_haptic_vibrate:Int->Int->Void; #end public static function vibrate(period:Int, duration:Int):Void { #if android if (lime_haptic_vibrate == null) { lime_haptic_vibrate = JNI.createStaticMethod("org/haxe/lime/GameActivity", "vibrate", "(II)V"); } try { lime_haptic_vibrate(period, duration); } catch (e:Dynamic) { Log.warn("Haptic.vibrate is not available (the VIBRATE permission may be missing)"); } #elseif (js && html5) var pattern = []; if (period == 0) { pattern = [duration]; } else { var periodMS = Std.int(Math.ceil(period / 2)); var count = Std.int(Math.ceil((duration / period) * 2)); pattern = [0]; // w3c spec says to vibrate on even elements of the pattern and android waits on even elements. This line makes the Navigator.vibrate match android behavior. https://w3c.github.io/vibration/ vs https://developer.android.com/reference/android/os/Vibrator.html#vibrate(long[],%20int) for (i in 0...count) { pattern.push(periodMS); } } try { if (!js.Browser.navigator.vibrate(pattern)) { Log.verbose("Navigator.vibrate() returned false."); } } catch (e:Dynamic) { Log.verbose("Navigator.vibrate() threw an error (it might be Internet Explorer or Edge not supporting the feature)"); } #elseif (lime_cffi && !macro) NativeCFFI.lime_haptic_vibrate(period, duration); #end } } ================================================ FILE: src/lime/ui/Joystick.hx ================================================ package lime.ui; import lime._internal.backend.native.NativeCFFI; import lime.app.Event; import lime.system.CFFI; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime._internal.backend.native.NativeCFFI) class Joystick { public static var devices = new Map(); public static var onConnect = new EventVoid>(); public var connected(default, null):Bool; public var guid(get, never):String; public var id(default, null):Int; public var name(get, never):String; public var numAxes(get, never):Int; public var numButtons(get, never):Int; public var numHats(get, never):Int; public var onAxisMove = new EventFloat->Void>(); public var onButtonDown = new EventVoid>(); public var onButtonUp = new EventVoid>(); public var onDisconnect = new EventVoid>(); public var onHatMove = new EventJoystickHatPosition->Void>(); public function new(id:Int) { this.id = id; connected = true; } @:noCompletion private static function __connect(id:Int):Void { if (!devices.exists(id)) { var joystick = new Joystick(id); devices.set(id, joystick); onConnect.dispatch(joystick); } } @:noCompletion private static function __disconnect(id:Int):Void { var joystick = devices.get(id); if (joystick != null) joystick.connected = false; devices.remove(id); if (joystick != null) joystick.onDisconnect.dispatch(); } #if (js && html5) @:noCompletion private static function __getDeviceData():Array { var res:Array = null; try { res = (untyped navigator.getGamepads) ? untyped navigator.getGamepads() : (untyped navigator.webkitGetGamepads) ? untyped navigator.webkitGetGamepads() : null; } catch (err:Dynamic) { // if something went wrong, treat it the same as when navigator.getGamepads doesn't exist // we probably don't have permission to use this feature } return res; } #end // Get & Set Methods @:noCompletion private inline function get_guid():String { #if (lime_cffi && !macro) return CFFI.stringValue(NativeCFFI.lime_joystick_get_device_guid(this.id)); #elseif (js && html5) var devices = __getDeviceData(); return devices[this.id].id; #else return null; #end } @:noCompletion private inline function get_name():String { #if (lime_cffi && !macro) return CFFI.stringValue(NativeCFFI.lime_joystick_get_device_name(this.id)); #elseif (js && html5) var devices = __getDeviceData(); return devices[this.id].id; #else return null; #end } @:noCompletion private inline function get_numAxes():Int { #if (lime_cffi && !macro) return NativeCFFI.lime_joystick_get_num_axes(this.id); #elseif (js && html5) var devices = __getDeviceData(); return devices[this.id].axes.length; #else return 0; #end } @:noCompletion private inline function get_numButtons():Int { #if (lime_cffi && !macro) return NativeCFFI.lime_joystick_get_num_buttons(this.id); #elseif (js && html5) var devices = __getDeviceData(); return devices[this.id].buttons.length; #else return 0; #end } @:noCompletion private inline function get_numHats():Int { #if (lime_cffi && !macro) return NativeCFFI.lime_joystick_get_num_hats(this.id); #else return 0; #end } } ================================================ FILE: src/lime/ui/JoystickHatPosition.hx ================================================ package lime.ui; abstract JoystickHatPosition(Int) from Int to Int from UInt to UInt { public static inline var CENTER:JoystickHatPosition = 0x00; public static inline var DOWN:JoystickHatPosition = 0x04; public static inline var LEFT:JoystickHatPosition = 0x08; public static inline var RIGHT:JoystickHatPosition = 0x02; public static inline var UP:JoystickHatPosition = 0x01; public static inline var DOWN_LEFT:JoystickHatPosition = (0x04 | 0x08); public static inline var DOWN_RIGHT:JoystickHatPosition = (0x04 | 0x02); public static inline var UP_LEFT:JoystickHatPosition = (0x01 | 0x08); public static inline var UP_RIGHT:JoystickHatPosition = (0x01 | 0x02); public var center(get, set):Bool; public var down(get, set):Bool; public var left(get, set):Bool; public var right(get, set):Bool; public var up(get, set):Bool; public function new(value:Int) { this = value; } @:noCompletion private function get_center():Bool { return (this == 0); } @:noCompletion private inline function set_center(value:Bool):Bool { if (value) { this = 0; } return value; } @:noCompletion private function get_down():Bool { return (this & DOWN > 0); } @:noCompletion private inline function set_down(value:Bool):Bool { if (value) { this |= DOWN; } else { this &= 0xFFFFFFF - DOWN; } return value; } @:noCompletion private function get_left():Bool { return (this & LEFT > 0); } @:noCompletion private inline function set_left(value:Bool):Bool { if (value) { this |= LEFT; } else { this &= 0xFFFFFFF - LEFT; } return value; } @:noCompletion private function get_right():Bool { return (this & RIGHT > 0); } @:noCompletion private inline function set_right(value:Bool):Bool { if (value) { this |= RIGHT; } else { this &= 0xFFFFFFF - RIGHT; } return value; } @:noCompletion private function get_up():Bool { return (this & UP > 0); } @:noCompletion private inline function set_up(value:Bool):Bool { if (value) { this |= UP; } else { this &= 0xFFFFFFF - UP; } return value; } } ================================================ FILE: src/lime/ui/KeyCode.hx ================================================ package lime.ui; import lime._internal.backend.native.NativeCFFI; /** Used by keyboard event listeners to identify which key was pressed down or released. @see `lime.ui.Window.onKeyDown` @see `lime.ui.Window.onKeyUp` @see `lime.ui.ScanCode` **/ @:access(lime._internal.backend.native.NativeCFFI) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract KeyCode(Int) from Int to Int from UInt to UInt { var UNKNOWN = 0x00; var BACKSPACE = 0x08; var TAB = 0x09; var RETURN = 0x0D; var ESCAPE = 0x1B; var SPACE = 0x20; var EXCLAMATION = 0x21; var QUOTE = 0x22; var HASH = 0x23; var DOLLAR = 0x24; var PERCENT = 0x25; var AMPERSAND = 0x26; var SINGLE_QUOTE = 0x27; var LEFT_PARENTHESIS = 0x28; var RIGHT_PARENTHESIS = 0x29; var ASTERISK = 0x2A; var PLUS = 0x2B; var COMMA = 0x2C; var MINUS = 0x2D; var PERIOD = 0x2E; var SLASH = 0x2F; var NUMBER_0 = 0x30; var NUMBER_1 = 0x31; var NUMBER_2 = 0x32; var NUMBER_3 = 0x33; var NUMBER_4 = 0x34; var NUMBER_5 = 0x35; var NUMBER_6 = 0x36; var NUMBER_7 = 0x37; var NUMBER_8 = 0x38; var NUMBER_9 = 0x39; var COLON = 0x3A; var SEMICOLON = 0x3B; var LESS_THAN = 0x3C; var EQUALS = 0x3D; var GREATER_THAN = 0x3E; var QUESTION = 0x3F; var AT = 0x40; var LEFT_BRACKET = 0x5B; var BACKSLASH = 0x5C; var RIGHT_BRACKET = 0x5D; var CARET = 0x5E; var UNDERSCORE = 0x5F; var GRAVE = 0x60; var A = 0x61; var B = 0x62; var C = 0x63; var D = 0x64; var E = 0x65; var F = 0x66; var G = 0x67; var H = 0x68; var I = 0x69; var J = 0x6A; var K = 0x6B; var L = 0x6C; var M = 0x6D; var N = 0x6E; var O = 0x6F; var P = 0x70; var Q = 0x71; var R = 0x72; var S = 0x73; var T = 0x74; var U = 0x75; var V = 0x76; var W = 0x77; var X = 0x78; var Y = 0x79; var Z = 0x7A; var DELETE = 0x7F; var CAPS_LOCK = 0x40000039; var F1 = 0x4000003A; var F2 = 0x4000003B; var F3 = 0x4000003C; var F4 = 0x4000003D; var F5 = 0x4000003E; var F6 = 0x4000003F; var F7 = 0x40000040; var F8 = 0x40000041; var F9 = 0x40000042; var F10 = 0x40000043; var F11 = 0x40000044; var F12 = 0x40000045; var PRINT_SCREEN = 0x40000046; var SCROLL_LOCK = 0x40000047; var PAUSE = 0x40000048; var INSERT = 0x40000049; var HOME = 0x4000004A; var PAGE_UP = 0x4000004B; var END = 0x4000004D; var PAGE_DOWN = 0x4000004E; var RIGHT = 0x4000004F; var LEFT = 0x40000050; var DOWN = 0x40000051; var UP = 0x40000052; var NUM_LOCK = 0x40000053; var NUMPAD_DIVIDE = 0x40000054; var NUMPAD_MULTIPLY = 0x40000055; var NUMPAD_MINUS = 0x40000056; var NUMPAD_PLUS = 0x40000057; var NUMPAD_ENTER = 0x40000058; var NUMPAD_1 = 0x40000059; var NUMPAD_2 = 0x4000005A; var NUMPAD_3 = 0x4000005B; var NUMPAD_4 = 0x4000005C; var NUMPAD_5 = 0x4000005D; var NUMPAD_6 = 0x4000005E; var NUMPAD_7 = 0x4000005F; var NUMPAD_8 = 0x40000060; var NUMPAD_9 = 0x40000061; var NUMPAD_0 = 0x40000062; var NUMPAD_PERIOD = 0x40000063; var APPLICATION = 0x40000065; var POWER = 0x40000066; var NUMPAD_EQUALS = 0x40000067; var F13 = 0x40000068; var F14 = 0x40000069; var F15 = 0x4000006A; var F16 = 0x4000006B; var F17 = 0x4000006C; var F18 = 0x4000006D; var F19 = 0x4000006E; var F20 = 0x4000006F; var F21 = 0x40000070; var F22 = 0x40000071; var F23 = 0x40000072; var F24 = 0x40000073; var EXECUTE = 0x40000074; var HELP = 0x40000075; var MENU = 0x40000076; var SELECT = 0x40000077; var STOP = 0x40000078; var AGAIN = 0x40000079; var UNDO = 0x4000007A; var CUT = 0x4000007B; var COPY = 0x4000007C; var PASTE = 0x4000007D; var FIND = 0x4000007E; var MUTE = 0x4000007F; var VOLUME_UP = 0x40000080; var VOLUME_DOWN = 0x40000081; var NUMPAD_COMMA = 0x40000085; // var NUMPAD_EQUALS_AS400 = 0x40000086; var ALT_ERASE = 0x40000099; var SYSTEM_REQUEST = 0x4000009A; var CANCEL = 0x4000009B; var CLEAR = 0x4000009C; var PRIOR = 0x4000009D; var RETURN2 = 0x4000009E; var SEPARATOR = 0x4000009F; var OUT = 0x400000A0; var OPER = 0x400000A1; var CLEAR_AGAIN = 0x400000A2; var CRSEL = 0x400000A3; var EXSEL = 0x400000A4; var NUMPAD_00 = 0x400000B0; var NUMPAD_000 = 0x400000B1; var THOUSAND_SEPARATOR = 0x400000B2; var DECIMAL_SEPARATOR = 0x400000B3; var CURRENCY_UNIT = 0x400000B4; var CURRENCY_SUBUNIT = 0x400000B5; var NUMPAD_LEFT_PARENTHESIS = 0x400000B6; var NUMPAD_RIGHT_PARENTHESIS = 0x400000B7; var NUMPAD_LEFT_BRACE = 0x400000B8; var NUMPAD_RIGHT_BRACE = 0x400000B9; var NUMPAD_TAB = 0x400000BA; var NUMPAD_BACKSPACE = 0x400000BB; var NUMPAD_A = 0x400000BC; var NUMPAD_B = 0x400000BD; var NUMPAD_C = 0x400000BE; var NUMPAD_D = 0x400000BF; var NUMPAD_E = 0x400000C0; var NUMPAD_F = 0x400000C1; var NUMPAD_XOR = 0x400000C2; var NUMPAD_POWER = 0x400000C3; var NUMPAD_PERCENT = 0x400000C4; var NUMPAD_LESS_THAN = 0x400000C5; var NUMPAD_GREATER_THAN = 0x400000C6; var NUMPAD_AMPERSAND = 0x400000C7; var NUMPAD_DOUBLE_AMPERSAND = 0x400000C8; var NUMPAD_VERTICAL_BAR = 0x400000C9; var NUMPAD_DOUBLE_VERTICAL_BAR = 0x400000CA; var NUMPAD_COLON = 0x400000CB; var NUMPAD_HASH = 0x400000CC; var NUMPAD_SPACE = 0x400000CD; var NUMPAD_AT = 0x400000CE; var NUMPAD_EXCLAMATION = 0x400000CF; var NUMPAD_MEM_STORE = 0x400000D0; var NUMPAD_MEM_RECALL = 0x400000D1; var NUMPAD_MEM_CLEAR = 0x400000D2; var NUMPAD_MEM_ADD = 0x400000D3; var NUMPAD_MEM_SUBTRACT = 0x400000D4; var NUMPAD_MEM_MULTIPLY = 0x400000D5; var NUMPAD_MEM_DIVIDE = 0x400000D6; var NUMPAD_PLUS_MINUS = 0x400000D7; var NUMPAD_CLEAR = 0x400000D8; var NUMPAD_CLEAR_ENTRY = 0x400000D9; var NUMPAD_BINARY = 0x400000DA; var NUMPAD_OCTAL = 0x400000DB; var NUMPAD_DECIMAL = 0x400000DC; var NUMPAD_HEXADECIMAL = 0x400000DD; var LEFT_CTRL = 0x400000E0; var LEFT_SHIFT = 0x400000E1; var LEFT_ALT = 0x400000E2; var LEFT_META = 0x400000E3; var RIGHT_CTRL = 0x400000E4; var RIGHT_SHIFT = 0x400000E5; var RIGHT_ALT = 0x400000E6; var RIGHT_META = 0x400000E7; var MODE = 0x40000101; var AUDIO_NEXT = 0x40000102; var AUDIO_PREVIOUS = 0x40000103; var AUDIO_STOP = 0x40000104; var AUDIO_PLAY = 0x40000105; var AUDIO_MUTE = 0x40000106; var MEDIA_SELECT = 0x40000107; var WWW = 0x40000108; var MAIL = 0x40000109; var CALCULATOR = 0x4000010A; var COMPUTER = 0x4000010B; var APP_CONTROL_SEARCH = 0x4000010C; var APP_CONTROL_HOME = 0x4000010D; var APP_CONTROL_BACK = 0x4000010E; var APP_CONTROL_FORWARD = 0x4000010F; var APP_CONTROL_STOP = 0x40000110; var APP_CONTROL_REFRESH = 0x40000111; var APP_CONTROL_BOOKMARKS = 0x40000112; var BRIGHTNESS_DOWN = 0x40000113; var BRIGHTNESS_UP = 0x40000114; var DISPLAY_SWITCH = 0x40000115; var BACKLIGHT_TOGGLE = 0x40000116; var BACKLIGHT_DOWN = 0x40000117; var BACKLIGHT_UP = 0x40000118; var EJECT = 0x40000119; var SLEEP = 0x4000011A; @:from public static function fromScanCode(scanCode:ScanCode):KeyCode { #if (lime_cffi && !macro) var code:Int = scanCode; return NativeCFFI.lime_key_code_from_scan_code(code); #else return KeyCode.UNKNOWN; #end } private static function toScanCode(keyCode:KeyCode):ScanCode { #if (lime_cffi && !macro) var code:Int = keyCode; return NativeCFFI.lime_key_code_to_scan_code(code); #else return ScanCode.UNKNOWN; #end } @:op(A > B) private static inline function gt(a:KeyCode, b:KeyCode):Bool { return (a : Int) > (b : Int); } @:op(A >= B) private static inline function gte(a:KeyCode, b:KeyCode):Bool { return (a : Int) >= (b : Int); } @:op(A < B) private static inline function lt(a:KeyCode, b:KeyCode):Bool { return (a : Int) < (b : Int); } @:op(A <= B) private static inline function lte(a:KeyCode, b:KeyCode):Bool { return (a : Int) <= (b : Int); } @:op(A + B) private static inline function plus(a:KeyCode, b:Int):KeyCode { return (a : Int) + b; } } ================================================ FILE: src/lime/ui/KeyModifier.hx ================================================ package lime.ui; abstract KeyModifier(Int) from Int to Int from UInt to UInt { public static inline var NONE:KeyModifier = 0x0000; public static inline var LEFT_SHIFT:KeyModifier = 0x0001; public static inline var RIGHT_SHIFT:KeyModifier = 0x0002; public static inline var LEFT_CTRL:KeyModifier = 0x0040; public static inline var RIGHT_CTRL:KeyModifier = 0x0080; public static inline var LEFT_ALT:KeyModifier = 0x0100; public static inline var RIGHT_ALT:KeyModifier = 0x0200; public static inline var LEFT_META:KeyModifier = 0x0400; public static inline var RIGHT_META:KeyModifier = 0x0800; public static inline var NUM_LOCK:KeyModifier = 0x1000; public static inline var CAPS_LOCK:KeyModifier = 0x2000; public static inline var MODE:KeyModifier = 0x4000; public static inline var CTRL:KeyModifier = (0x0040 | 0x0080); public static inline var SHIFT:KeyModifier = (0x001 | 0x0002); public static inline var ALT:KeyModifier = (0x0100 | 0x0200); public static inline var META:KeyModifier = (0x0400 | 0x0800); public var altKey(get, set):Bool; public var capsLock(get, set):Bool; public var ctrlKey(get, set):Bool; public var metaKey(get, set):Bool; public var numLock(get, set):Bool; public var shiftKey(get, set):Bool; @:noCompletion private function get_altKey():Bool { return (this & LEFT_ALT > 0) || (this & RIGHT_ALT > 0); } @:noCompletion private inline function set_altKey(value:Bool):Bool { if (value) { this |= ALT; } else { this &= 0xFFFFFFF - ALT; } return value; } @:noCompletion private function get_capsLock():Bool { return (this & CAPS_LOCK > 0) || (this & CAPS_LOCK > 0); } @:noCompletion private inline function set_capsLock(value:Bool):Bool { if (value) { this |= CAPS_LOCK; } else { this &= 0xFFFFFFF - CAPS_LOCK; } return value; } @:noCompletion private function get_ctrlKey():Bool { return (this & LEFT_CTRL > 0) || (this & RIGHT_CTRL > 0); } @:noCompletion private inline function set_ctrlKey(value:Bool):Bool { if (value) { this |= CTRL; } else { this &= 0xFFFFFFF - CTRL; } return value; } @:noCompletion private function get_metaKey():Bool { return (this & LEFT_META > 0) || (this & RIGHT_META > 0); } @:noCompletion private inline function set_metaKey(value:Bool):Bool { if (value) { this |= META; } else { this &= 0xFFFFFFF - META; } return value; } @:noCompletion private function get_numLock():Bool { return (this & NUM_LOCK > 0) || (this & NUM_LOCK > 0); } @:noCompletion private inline function set_numLock(value:Bool):Bool { if (value) { this |= NUM_LOCK; } else { this &= 0xFFFFFFF - NUM_LOCK; } return value; } @:noCompletion private function get_shiftKey():Bool { return (this & LEFT_SHIFT > 0) || (this & RIGHT_SHIFT > 0); } @:noCompletion private inline function set_shiftKey(value:Bool):Bool { if (value) { this |= SHIFT; } else { this &= 0xFFFFFFF - SHIFT; } return value; } } ================================================ FILE: src/lime/ui/MouseButton.hx ================================================ package lime.ui; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract MouseButton(Int) from Int to Int { var LEFT = 0; var MIDDLE = 1; var RIGHT = 2; } ================================================ FILE: src/lime/ui/MouseCursor.hx ================================================ package lime.ui; enum MouseCursor { ARROW; CROSSHAIR; DEFAULT; MOVE; POINTER; RESIZE_NESW; RESIZE_NS; RESIZE_NWSE; RESIZE_WE; TEXT; WAIT; WAIT_ARROW; CUSTOM; } ================================================ FILE: src/lime/ui/MouseWheelMode.hx ================================================ package lime.ui; enum MouseWheelMode { PIXELS; LINES; PAGES; UNKNOWN; } ================================================ FILE: src/lime/ui/ScanCode.hx ================================================ package lime.ui; import lime._internal.backend.native.NativeCFFI; /** May be used to identify the scan code associated with the `KeyCode` passed to keyboard event listeners. @see `lime.ui.Window.onKeyDown` @see `lime.ui.Window.onKeyUp` @see `lime.ui.KeyCode` **/ @:access(lime._internal.backend.native.NativeCFFI) @:access(lime.ui.KeyCode) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract ScanCode(Int) from Int to Int from UInt to UInt { var UNKNOWN = 0; var BACKSPACE = 42; var TAB = 43; var RETURN = 40; var ESCAPE = 41; var SPACE = 44; // var EXCLAMATION = 0x21; // var QUOTE = 0x22; // var HASH = 0x23; // var DOLLAR = 0x24; // var PERCENT = 0x25; // var AMPERSAND = 0x26; var SINGLE_QUOTE = 52; // var LEFT_PARENTHESIS = 0x28; // var RIGHT_PARENTHESIS = 0x29; // var ASTERISK = 0x2A; // var PLUS = 0x2B; var COMMA = 54; var MINUS = 45; var PERIOD = 55; var SLASH = 56; var NUMBER_0 = 39; var NUMBER_1 = 30; var NUMBER_2 = 31; var NUMBER_3 = 32; var NUMBER_4 = 33; var NUMBER_5 = 34; var NUMBER_6 = 35; var NUMBER_7 = 36; var NUMBER_8 = 37; var NUMBER_9 = 38; // var COLON = 0x3A; var SEMICOLON = 51; // var LESS_THAN = 0x3C; var EQUALS = 46; // var GREATER_THAN = 0x3E; // var QUESTION = 0x3F; // var AT = 0x40; var LEFT_BRACKET = 47; var BACKSLASH = 49; var RIGHT_BRACKET = 48; // var CARET = 0x5E; // var UNDERSCORE = 0x5F; var GRAVE = 53; var A = 4; var B = 5; var C = 6; var D = 7; var E = 8; var F = 9; var G = 10; var H = 11; var I = 12; var J = 13; var K = 14; var L = 15; var M = 16; var N = 17; var O = 18; var P = 19; var Q = 20; var R = 21; var S = 22; var T = 23; var U = 24; var V = 25; var W = 26; var X = 27; var Y = 28; var Z = 29; var DELETE = 76; var CAPS_LOCK = 57; var F1 = 58; var F2 = 59; var F3 = 60; var F4 = 61; var F5 = 62; var F6 = 63; var F7 = 64; var F8 = 65; var F9 = 66; var F10 = 67; var F11 = 68; var F12 = 69; var PRINT_SCREEN = 70; var SCROLL_LOCK = 71; var PAUSE = 72; var INSERT = 73; var HOME = 74; var PAGE_UP = 75; var END = 77; var PAGE_DOWN = 78; var RIGHT = 79; var LEFT = 80; var DOWN = 81; var UP = 82; var NUM_LOCK = 83; var NUMPAD_DIVIDE = 84; var NUMPAD_MULTIPLY = 85; var NUMPAD_MINUS = 86; var NUMPAD_PLUS = 87; var NUMPAD_ENTER = 88; var NUMPAD_1 = 89; var NUMPAD_2 = 90; var NUMPAD_3 = 91; var NUMPAD_4 = 92; var NUMPAD_5 = 93; var NUMPAD_6 = 94; var NUMPAD_7 = 95; var NUMPAD_8 = 96; var NUMPAD_9 = 97; var NUMPAD_0 = 98; var NUMPAD_PERIOD = 99; var APPLICATION = 101; var POWER = 102; var NUMPAD_EQUALS = 103; var F13 = 104; var F14 = 105; var F15 = 106; var F16 = 107; var F17 = 108; var F18 = 109; var F19 = 110; var F20 = 111; var F21 = 112; var F22 = 113; var F23 = 114; var F24 = 115; var EXECUTE = 116; var HELP = 117; var MENU = 118; var SELECT = 119; var STOP = 120; var AGAIN = 121; var UNDO = 122; var CUT = 123; var COPY = 124; var PASTE = 125; var FIND = 126; var MUTE = 127; var VOLUME_UP = 128; var VOLUME_DOWN = 129; var NUMPAD_COMMA = 133; // var NUMPAD_EQUALS_AS400 = 134; var ALT_ERASE = 153; var SYSTEM_REQUEST = 154; var CANCEL = 155; var CLEAR = 156; var PRIOR = 157; var RETURN2 = 158; var SEPARATOR = 159; var OUT = 160; var OPER = 161; var CLEAR_AGAIN = 162; var CRSEL = 163; var EXSEL = 164; var NUMPAD_00 = 176; var NUMPAD_000 = 177; var THOUSAND_SEPARATOR = 178; var DECIMAL_SEPARATOR = 179; var CURRENCY_UNIT = 180; var CURRENCY_SUBUNIT = 181; var NUMPAD_LEFT_PARENTHESIS = 182; var NUMPAD_RIGHT_PARENTHESIS = 183; var NUMPAD_LEFT_BRACE = 184; var NUMPAD_RIGHT_BRACE = 185; var NUMPAD_TAB = 186; var NUMPAD_BACKSPACE = 187; var NUMPAD_A = 188; var NUMPAD_B = 189; var NUMPAD_C = 190; var NUMPAD_D = 191; var NUMPAD_E = 192; var NUMPAD_F = 193; var NUMPAD_XOR = 194; var NUMPAD_POWER = 195; var NUMPAD_PERCENT = 196; var NUMPAD_LESS_THAN = 197; var NUMPAD_GREATER_THAN = 198; var NUMPAD_AMPERSAND = 199; var NUMPAD_DOUBLE_AMPERSAND = 200; var NUMPAD_VERTICAL_BAR = 201; var NUMPAD_DOUBLE_VERTICAL_BAR = 202; var NUMPAD_COLON = 203; var NUMPAD_HASH = 204; var NUMPAD_SPACE = 205; var NUMPAD_AT = 206; var NUMPAD_EXCLAMATION = 207; var NUMPAD_MEM_STORE = 208; var NUMPAD_MEM_RECALL = 209; var NUMPAD_MEM_CLEAR = 210; var NUMPAD_MEM_ADD = 211; var NUMPAD_MEM_SUBTRACT = 212; var NUMPAD_MEM_MULTIPLY = 213; var NUMPAD_MEM_DIVIDE = 214; var NUMPAD_PLUS_MINUS = 215; var NUMPAD_CLEAR = 216; var NUMPAD_CLEAR_ENTRY = 217; var NUMPAD_BINARY = 218; var NUMPAD_OCTAL = 219; var NUMPAD_DECIMAL = 220; var NUMPAD_HEXADECIMAL = 221; var LEFT_CTRL = 224; var LEFT_SHIFT = 225; var LEFT_ALT = 226; var LEFT_META = 227; var RIGHT_CTRL = 228; var RIGHT_SHIFT = 229; var RIGHT_ALT = 230; var RIGHT_META = 231; var MODE = 257; var AUDIO_NEXT = 258; var AUDIO_PREVIOUS = 259; var AUDIO_STOP = 260; var AUDIO_PLAY = 261; var AUDIO_MUTE = 262; var MEDIA_SELECT = 263; var WWW = 264; var MAIL = 265; var CALCULATOR = 266; var COMPUTER = 267; var APP_CONTROL_SEARCH = 268; var APP_CONTROL_HOME = 269; var APP_CONTROL_BACK = 270; var APP_CONTROL_FORWARD = 271; var APP_CONTROL_STOP = 272; var APP_CONTROL_REFRESH = 273; var APP_CONTROL_BOOKMARKS = 274; var BRIGHTNESS_DOWN = 275; var BRIGHTNESS_UP = 276; var DISPLAY_SWITCH = 277; var BACKLIGHT_TOGGLE = 278; var BACKLIGHT_DOWN = 279; var BACKLIGHT_UP = 280; var EJECT = 281; var SLEEP = 282; @:from public static function fromKeyCode(keyCode:KeyCode):ScanCode { return KeyCode.toScanCode(keyCode); } private static function toKeyCode(scanCode:ScanCode):KeyCode { return KeyCode.fromScanCode(scanCode); } @:op(A > B) private static inline function gt(a:ScanCode, b:ScanCode):Bool { return (a : Int) > (b : Int); } @:op(A >= B) private static inline function gte(a:ScanCode, b:ScanCode):Bool { return (a : Int) >= (b : Int); } @:op(A < B) private static inline function lt(a:ScanCode, b:ScanCode):Bool { return (a : Int) < (b : Int); } @:op(A <= B) private static inline function lte(a:ScanCode, b:ScanCode):Bool { return (a : Int) <= (b : Int); } @:op(A + B) private static inline function plus(a:ScanCode, b:Int):ScanCode { return (a : Int) + b; } } ================================================ FILE: src/lime/ui/Touch.hx ================================================ package lime.ui; import lime.app.Event; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Touch { public static var onCancel = new EventVoid>(); public static var onEnd = new EventVoid>(); public static var onMove = new EventVoid>(); public static var onStart = new EventVoid>(); public var device:Int; public var dx:Float; public var dy:Float; public var id:Int; public var pressure:Float; public var x:Float; public var y:Float; public function new(x:Float, y:Float, id:Int, dx:Float, dy:Float, pressure:Float, device:Int) { this.x = x; this.y = y; this.id = id; this.dx = dx; this.dy = dy; this.pressure = pressure; this.device = device; } } ================================================ FILE: src/lime/ui/Window.hx ================================================ package lime.ui; import lime.app.Application; import lime.app.Event; import lime.graphics.Image; import lime.graphics.RenderContext; import lime.graphics.RenderContextAttributes; import lime.math.Rectangle; import lime.system.Display; import lime.system.DisplayMode; #if (js && html5) import js.html.Element; #end #if openfl import openfl.display.Stage; #elseif flash import flash.display.Stage; #else typedef Stage = Dynamic; #end #if hl @:keep #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Window { public var application(default, null):Application; public var borderless(get, set):Bool; public var context(default, null):RenderContext; public var cursor(get, set):MouseCursor; public var display(get, null):Display; public var displayMode(get, set):DisplayMode; #if (!lime_doc_gen || (js && html5)) public var element(default, null):#if (js && html5) Element #else Dynamic #end; #end /** * The current frame rate (measured in frames-per-second) of the window. * * On some platforms, a frame rate of 60 or greater may imply vsync, which will * perform more quickly on displays with a higher refresh rate **/ public var frameRate(get, set):Float; public var fullscreen(get, set):Bool; public var height(get, set):Int; public var hidden(get, null):Bool; public var id(default, null):Int; public var maxHeight(get, set):Int; public var maximized(get, set):Bool; public var maxWidth(get, set):Int; public var minHeight(get, set):Int; public var minimized(get, set):Bool; public var minWidth(get, set):Int; public var mouseLock(get, set):Bool; public var onActivate(default, null) = new EventVoid>(); public var onClose(default, null) = new EventVoid>(); public var onDeactivate(default, null) = new EventVoid>(); public var onDropFile(default, null) = new EventVoid>(); public var onEnter(default, null) = new EventVoid>(); public var onExpose(default, null) = new EventVoid>(); public var onFocusIn(default, null) = new EventVoid>(); public var onFocusOut(default, null) = new EventVoid>(); public var onFullscreen(default, null) = new EventVoid>(); public var onHide(default, null) = new EventVoid>(); /** Fired when the user presses a key down when this window has focus. **/ public var onKeyDown(default, null) = new EventKeyModifier->Void>(); /** Fired when the user releases a key that was down. **/ public var onKeyUp(default, null) = new EventKeyModifier->Void>(); public var onLeave(default, null) = new EventVoid>(); /** Fired when the window is maximized. **/ public var onMaximize(default, null) = new EventVoid>(); /** Fired when the window is minimized. **/ public var onMinimize(default, null) = new EventVoid>(); /** Fired when the user pressed a mouse button down. **/ public var onMouseDown(default, null) = new EventFloat->MouseButton->Void>(); /** Fired when the mouse is moved over the window. **/ public var onMouseMove(default, null) = new EventFloat->Void>(); public var onMouseMoveRelative(default, null) = new EventFloat->Void>(); /** Fired when the user releases a mouse button that was pressed down. **/ public var onMouseUp(default, null) = new EventFloat->Int->Void>(); /** Fired when the user interacts with the mouse wheel. **/ public var onMouseWheel(default, null) = new EventFloat->MouseWheelMode->Void>(); /** Fired when the window is moved to a new position. **/ public var onMove(default, null) = new EventFloat->Void>(); public var onRender(default, null) = new EventVoid>(); public var onRenderContextLost(default, null) = new EventVoid>(); public var onRenderContextRestored(default, null) = new EventVoid>(); /** Fired when the window is resized with new dimensions. **/ public var onResize(default, null) = new EventInt->Void>(); public var onRestore(default, null) = new EventVoid>(); public var onShow(default, null) = new EventVoid>(); public var onTextEdit(default, null) = new EventInt->Int->Void>(); public var onTextInput(default, null) = new EventVoid>(); public var opacity(get, set):Float; public var parameters:Dynamic; public var resizable(get, set):Bool; public var scale(get, null):Float; #if (!lime_doc_gen || flash || openfl) public var stage(default, null):Stage; #end public var textInputEnabled(get, set):Bool; public var title(get, set):String; public var visible(get, set):Bool; public var width(get, set):Int; public var x(get, set):Int; public var y(get, set):Int; @:allow(openfl.display.Stage) @:allow(lime.app.Application) @:allow(lime._internal.backend.html5.HTML5Window) private var clickCount:Int = 0; @:noCompletion private var __attributes:WindowAttributes; @:noCompletion private var __backend:WindowBackend; @:noCompletion private var __borderless:Bool; @:noCompletion private var __fullscreen:Bool; @:noCompletion private var __height:Int; @:noCompletion private var __hidden:Bool; @:noCompletion private var __maximized:Bool; @:noCompletion private var __minimized:Bool; @:noCompletion private var __resizable:Bool; @:noCompletion private var __scale:Float; @:noCompletion private var __title:String; @:noCompletion private var __width:Int; @:noCompletion private var __x:Int; @:noCompletion private var __y:Int; @:noCompletion private var __minWidth:Int = 0; @:noCompletion private var __minHeight:Int = 0; @:noCompletion private var __maxWidth:Int = 0x7FFFFFFF; @:noCompletion private var __maxHeight:Int = 0x7FFFFFFF; #if commonjs private static function __init__() { var p = untyped Window.prototype; untyped Object.defineProperties(p, { "borderless": {get: p.get_borderless, set: p.set_borderless}, "cursor": {get: p.get_cursor, set: p.set_cursor}, "display": {get: p.get_display}, "displayMode": {get: p.get_displayMode, set: p.set_displayMode}, "frameRate": {get: p.get_frameRate, set: p.set_frameRate}, "fullscreen": {get: p.get_fullscreen, set: p.set_fullscreen}, "height": {get: p.get_height, set: p.set_height}, "maxHeight": {get: p.get_maxHeight, set: p.set_maxHeight}, "maximized": {get: p.get_maximized, set: p.set_maximized}, "maxWidth": {get: p.get_maxWidth, set: p.set_maxWidth}, "minHeight": {get: p.get_minHeight, set: p.set_minHeight}, "minimized": {get: p.get_minimized, set: p.set_minimized}, "minWidth": {get: p.get_minWidth, set: p.set_minWidth}, "mouseLock": {get: p.get_mouseLock, set: p.set_mouseLock}, "resizable": {get: p.get_resizable, set: p.set_resizable}, "scale": {get: p.get_scale}, "textInputEnabled": {get: p.get_textInputEnabled, set: p.set_textInputEnabled}, "title": {get: p.get_title, set: p.set_title}, "visible": {get: p.get_visible, set: p.set_visible}, "width": {get: p.get_width, set: p.set_width}, "x": {get: p.get_x, set: p.set_y}, "y": {get: p.get_x, set: p.set_y} }); } #end @:noCompletion private function new(application:Application, attributes:WindowAttributes) { this.application = application; __attributes = attributes != null ? attributes : {}; if (Reflect.hasField(__attributes, "parameters")) parameters = __attributes.parameters; __width = 0; __height = 0; __fullscreen = false; __scale = 1; __x = 0; __y = 0; __title = Reflect.hasField(__attributes, "title") ? __attributes.title : ""; __hidden = false; __borderless = Reflect.hasField(__attributes, "borderless") ? __attributes.borderless : false; __resizable = Reflect.hasField(__attributes, "resizable") ? __attributes.resizable : false; __maximized = Reflect.hasField(__attributes, "maximized") ? __attributes.maximized : false; __minimized = Reflect.hasField(__attributes, "minimized") ? __attributes.minimized : false; id = -1; __backend = new WindowBackend(this); #if windows var mappings = [ "8f0e1200000000000000504944564944,Acme,platform:Windows,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2", "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows", "ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows", "6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows", "0d0f6e00000000000000504944564944,HORIPAD 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows", "6d0419c2000000000000504944564944,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows", "88880803000000000000504944564944,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows", "4c056802000000000000504944564944,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows", "25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows", "4c05c405000000000000504944564944,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows", "4c05cc09000000000000504944564944,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows", "4c05a00b000000000000504944564944,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows", "6d0418c2000000000000504944564944,Logitech RumblePad 2 USB,platform:Windows,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3", "36280100000000000000504944564944,OUYA Controller,platform:Windows,a:b0,b:b3,y:b2,x:b1,start:b14,guide:b15,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b8,dpleft:b10,dpdown:b9,dpright:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b12,righttrigger:b13", "4f0400b3000000000000504944564944,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Windows", "00f00300000000000000504944564944,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows", "00f0f100000000000000504944564944,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows", "28040140000000000000504944564944,GamePad Pro USB,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7", "ff113133000000000000504944564944,SVEN X-PAD,platform:Windows,a:b2,b:b3,y:b1,x:b0,start:b5,back:b4,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b8,righttrigger:b9", "8f0e0300000000000000504944564944,Piranha xtreme,platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2", "8f0e0d31000000000000504944564944,Multilaser JS071 USB,platform:Windows,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", "10080300000000000000504944564944,PS2 USB,platform:Windows,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a4,righty:a2,lefttrigger:b4,righttrigger:b5", "79000600000000000000504944564944,G-Shark GS-GP702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Windows", "4b12014d000000000000504944564944,NYKO AIRFLO,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftstick:a0,rightstick:a2,leftshoulder:a3,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:h0.6,lefty:h0.12,rightx:h0.9,righty:h0.4,lefttrigger:b6,righttrigger:b7,platform:Windows", "d6206dca000000000000504944564944,PowerA Pro Ex,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows", "a3060cff000000000000504944564944,Saitek P2500,a:b2,b:b3,y:b1,x:b0,start:b4,guide:b10,back:b5,leftstick:b8,rightstick:b9,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows", "4f0415b3000000000000504944564944,Thrustmaster Dual Analog 3.2,platform:Windows,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3", "6f0e1e01000000000000504944564944,Rock Candy Gamepad for PS3,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2", "83056020000000000000504944564944,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,y:b2,x:b3,start:b7,back:b6,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Windows", "10080100000000000000504944564944,PS1 USB,platform:Windows,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2", "49190204000000000000504944564944,Ipega PG-9023,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b8,righttrigger:b9,platform:Windows", "4f0423b3000000000000504944564944,Dual Trigger 3-in-1,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Windows", "0d0f4900000000000000504944564944,Hatsune Miku Sho Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows", "79004318000000000000504944564944,Mayflash GameCube Controller Adapter,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b0,start:b9,guide:b0,leftshoulder:b4,rightshoulder:b7,leftstick:b0,rightstick:b0,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2", "79000018000000000000504944564944,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows", "2509e803000000000000504944564944,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows", "300f1001000000000000504944564944,Saitek P480 Rumble Pad,a:b2,b:b3,x:b0,y:b1,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b5,righttrigger:b7,platform:Windows", "10280900000000000000504944564944,8Bitdo SFC30 GamePad,a:b1,b:b0,y:b3,x:b4,start:b11,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,platform:Windows", "63252305000000000000504944564944,USB Vibration Joystick (BM),platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3", "20380900000000000000504944564944,8Bitdo NES30 PRO Wireless,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8", "02200090000000000000504944564944,8Bitdo NES30 PRO USB,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8", "ff113133000000000000504944564944,Gembird JPD-DualForce,platform:Windows,a:b2,b:b3,x:b0,y:b1,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,leftstick:b10,rightstick:b11", "341a0108000000000000504944564944,EXEQ RF USB Gamepad 8206,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,leftstick:b8,rightstick:b7,back:b8,start:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows", "c0111352000000000000504944564944,Battalife Joystick,platform:Windows,x:b4,a:b6,b:b7,y:b5,back:b2,start:b3,leftshoulder:b0,rightshoulder:b1,leftx:a0,lefty:a1", "100801e5000000000000504944564944,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Windows", "79000600000000000000504944564944,NGS Phantom,a:b2,b:b3,y:b1,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Windows" ]; Gamepad.addMappings(mappings); #elseif mac var mappings = [ "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X", "6d0400000000000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X", "6d0400000000000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X", "6d040000000000001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X", "6d0400000000000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X", "4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X", "4c05000000000000c405000000000000,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Mac OS X", "4c05000000000000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Mac OS X", "5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X", "891600000000000000fd000000000000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Mac OS X", "4f0400000000000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Mac OS X", "8f0e0000000000000300000000000000,Piranha xtreme,platform:Mac OS X,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2", "0d0f0000000000004d00000000000000,HORI Gem Pad 3,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", "79000000000000000600000000000000,G-Shark GP-702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Mac OS X", "4f0400000000000015b3000000000000,Thrustmaster Dual Analog 3.2,platform:Mac OS X,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3", "AD1B00000000000001F9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X", "050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,y:b9,x:b10,start:b6,guide:b8,back:b7,dpup:b2,dpleft:b0,dpdown:b3,dpright:b1,leftx:a0,lefty:a1,lefttrigger:b12,righttrigger:,leftshoulder:b11,platform:Mac OS X", "83050000000000006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X", "bd1200000000000015d0000000000000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X", "79000000000000001100000000000000,Retrolink Classic Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a3,lefty:a4,platform:Mac OS X", "5e04000000000000dd02000000000000,Xbox One Wired Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4", "5e04000000000000ea02000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4", "5e04000000000000e002000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b10,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4", "050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,x:b18,y:b17,back:b7,guide:b8,start:b6,leftstick:b23,rightstick:b24,leftshoulder:b19,rightshoulder:b20,dpup:b11,dpdown:b12,dpleft:b13,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b21,righttrigger:b22,platform:Mac OS X", "79000000000000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,x:b0,y:b12,back:b32,start:b36,leftstick:b40,rightstick:b44,leftshoulder:b16,rightshoulder:b20,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a4,rightx:a8,righty:a12,lefttrigger:b24,righttrigger:b28,platform:Mac OS X", "2509000000000000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X", "351200000000000021ab000000000000,SFC30 Joystick,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X", "b4040000000000000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,x:b3,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X", "81170000000000007e05000000000000,Sega Saturn,x:b0,a:b2,b:b4,y:b6,start:b13,dpleft:b15,dpdown:b16,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,lefttrigger:b10,rightshoulder:b9,righttrigger:a4,righttrigger:b11,leftx:a0,lefty:a2,platform:Mac OS X", "10280000000000000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X", "d814000000000000cecf000000000000,MC Cthulhu,platform:Mac OS X,leftx:,lefty:,rightx:,righty:,lefttrigger:b6,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,righttrigger:b7", "0d0f0000000000006600000000000000,HORIPAD FPS PLUS 4,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:a4" ]; Gamepad.addMappings(mappings); #elseif linux var mappings = [ "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux", "03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux", "030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux", "030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux", "030000006d04000016c2000011010000,Logitech F310 Gamepad (DInput),x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Linux", "030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux", "030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux", "030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux", "030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux", "030000004c050000c405000011010000,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux", "050000004c050000c405000000010000,Sony DualShock 4 BT,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux", "030000004c050000cc09000011010000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux", "050000004c050000cc09000000010000,Sony DualShock 4 V2 BT,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux", "030000004c050000a00b000011010000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux", "030000006f0e00003001000001010000,EA Sports PS3 Controller,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", "03000000de280000ff11000001000000,Valve Streaming Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux", "030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux", "030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux", "030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux", "03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,y:b0,x:b3,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux", "03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Linux", "030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,y:b3,x:b1,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux", "030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a5", "030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2", "030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2", "030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux", "030000006d04000016c2000010010000,Logitech Logitech Dual Action,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3", "03000000260900008888000000010000,GameCube {WiseGroup USB box},a:b0,b:b2,y:b3,x:b1,start:b7,leftshoulder:,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,rightstick:,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Linux", "030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,y:b4,x:b3,start:b8,guide:b5,back:b2,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b9,righttrigger:b10,platform:Linux", "030000006d04000018c2000010010000,Logitech Logitech RumblePad 2 USB,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3", "05000000d6200000ad0d000001000000,Moga Pro,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4", "030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", "030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7", "0300000000f000000300000000010000,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux", "0300000000f00000f100000000010000,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux", "030000006f0e00001f01000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4", "03000000280400000140000000010000,Gravis GamePad Pro USB ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftx:a0,lefty:a1", "030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4", "030000005e0400008502000000010000,Microsoft X-Box pad (Japan),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4", "030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2", "03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,platform:Linux,a:b2,b:b1,y:b0,x:b3,start:b8,back:b9,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5", "030000008916000000fd000024010000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux", "030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux", "03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux", "060000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux", "050000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux", "03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick ,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a3,rightx:a1,righty:a4", "03000000666600000488000000010000,Super Joy Box 5 Pro,platform:Linux,a:b2,b:b1,x:b3,y:b0,back:b9,start:b8,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,dpup:b12,dpleft:b15,dpdown:b14,dpright:b13", "05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2", "05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2", "030000008916000001fd000024010000,Razer Onza Classic Edition,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:b11,dpdown:b14,dpright:b12,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4", "030000005e040000d102000001010000,Microsoft X-Box One pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4", "030000005e040000dd02000003020000,Microsoft X-Box One pad v2,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux", "03000000790000001100000010010000,RetroLink Saturn Classic Controller,platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1", "050000007e0500003003000001000000,Nintendo Wii U Pro Controller,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b8,start:b9,guide:b10,leftshoulder:b4,rightshoulder:b5,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:b13,dpleft:b15,dpdown:b14,dpright:b16", "030000005e0400008e02000004010000,Microsoft X-Box 360 pad,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2", "030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1", "030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7", "03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3", "0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b7,back:b6,guide:b8,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,lefttrigger:a5,righttrigger:a4,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a2,righty:a3", "03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux", "030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4", "030000006f0e00001304000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:a0,rightstick:a3,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4", "03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4", "03000000830500006020000010010000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux", "03000000bd12000015d0000010010000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux", "03000000790000001100000010010000,Retrolink Classic Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux", "03000000c9110000f055000011010000,HJC Game GAMEPAD,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:h0.8,lefttrigger:b6,x:b2,dpup:h0.1,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:h0.2,righttrigger:b7,b:b1,platform:Linux", "03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux", "03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,y:b3,x:b0,start:b9,guide:,back:,leftstick:,rightstick:,leftshoulder:,dpleft:b15,dpdown:b14,dpright:b13,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,rightshoulder:b7,dpup:b12,platform:Linux", "030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,platform:Linux,x:b0,a:b2,b:b3,y:b1,back:b10,guide:b12,start:b11,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3", "030000006f0e00004601000001010000,Rock Candy Wired Controller for Xbox One,platform:Linux,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,guide:b8,leftstick:b9,rightstick:b10,lefttrigger:a2,righttrigger:a5,leftx:a0,lefty:a1,rightx:a3,righty:a4", "03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4", "030000006f0e00003901000020060000,Afterglow Wired Controller for Xbox One,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux", "030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,platform:Linux,a:b0,b:b2,x:b1,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7", "05000000102800000900000000010000,8Bitdo SFC30 GamePad,platform:Linux,x:b4,a:b1,b:b0,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1", "03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftshoulder:b4,rightshoulder:b5,lefttrigger:b6,righttrigger:b7,leftx:a0,lefty:a1", "030000000d0f00000d00000000010000,hori,platform:Linux,a:b0,b:b6,y:b2,x:b1,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,start:b9,guide:b10,back:b8,leftshoulder:b3,rightshoulder:b7,leftx:b4,lefty:b5", "03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5", "03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,platform:Linux,a:b0,b:b1,y:b2,x:b3,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7", "03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),platform:Linux,a:b3,b:b4,y:b1,x:b0,start:b7,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5", "05000000010000000100000003000000,Nintendo Wiimote,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b9,guide:b10,back:b8,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", "030000005e0400008e02000062230000,Microsoft X-Box 360 pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4", "03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,y:b1,x:b0,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b6,righttrigger:b7,platform:Linux", "030000006f0e00000103000000020000,Logic3 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4", "05000000380700006652000025010000,Mad Catz C.T.R.L.R ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3", "030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4", "03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:a2,righttrigger:a5", "05000000a00500003232000001000000,8Bitdo Zero GamePad,platform:Linux,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1", "030000001008000001e5000010010000,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Linux", "03000000100800000300000010010000,USB Gamepad,platform:Linux,a:b2,b:b1,x:b3,y:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5", "05000000ac0500003232000001000000,VR-BOX,platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5", "03000000780000000600000010010000,Microntek USB Joystick,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftx:a0,lefty:a1" ]; Gamepad.addMappings(mappings); #elseif (ios || tvos) var mappings = [ "4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,", "4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,", "4d466947616d65706164030000000000,MFi Apple TV Remote,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,", ]; Gamepad.addMappings(mappings); #end } public function alert(message:String = null, title:String = null):Void { __backend.alert(message, title); } public function close():Void { __backend.close(); } public function focus():Void { __backend.focus(); } public function move(x:Int, y:Int):Void { __backend.move(x, y); __x = x; __y = y; } public function readPixels(rect:Rectangle = null):Image { return __backend.readPixels(rect); } public function resize(width:Int, height:Int):Void { if (width < __minWidth) { width = __minWidth; } else if (width > __maxWidth) { width = __maxWidth; } if (height < __minHeight) { height = __minHeight; } else if (height > __maxHeight) { height = __maxHeight; } __backend.resize(width, height); __width = width; __height = height; } public function setMinSize(width:Int, height:Int):Void { __backend.setMinSize(width, height); __minWidth = width; __minHeight = height; if (__width < __minWidth || __height < __minHeight) { resize(__width, __height); } } public function setMaxSize(width:Int, height:Int):Void { __backend.setMaxSize(width, height); __maxWidth = width; __maxHeight = height; if (__width > __maxWidth || __height > __maxHeight) { resize(__width, __height); } } public function setIcon(image:Image):Void { if (image == null) { return; } __backend.setIcon(image); } public function toString():String { return "[object Window]"; } public function warpMouse(x:Int, y:Int):Void { __backend.warpMouse(x, y); } // Get & Set Methods @:noCompletion private function get_cursor():MouseCursor { return __backend.getCursor(); } @:noCompletion private function set_cursor(value:MouseCursor):MouseCursor { return __backend.setCursor(value); } @:noCompletion private function get_display():Display { return __backend.getDisplay(); } @:noCompletion private function get_displayMode():DisplayMode { return __backend.getDisplayMode(); } @:noCompletion private function set_displayMode(value:DisplayMode):DisplayMode { return __backend.setDisplayMode(value); } @:noCompletion private inline function get_borderless():Bool { return __borderless; } @:noCompletion private function set_borderless(value:Bool):Bool { return __borderless = __backend.setBorderless(value); } @:noCompletion private inline function get_frameRate():Float { return __backend.getFrameRate(); } @:noCompletion private inline function set_frameRate(value:Float):Float { return __backend.setFrameRate(value); } @:noCompletion private inline function get_fullscreen():Bool { return __fullscreen; } @:noCompletion private function set_fullscreen(value:Bool):Bool { return __fullscreen = __backend.setFullscreen(value); } @:noCompletion private inline function get_height():Int { return __height; } @:noCompletion private function set_height(value:Int):Int { resize(__width, value); return __height; } @:noCompletion private inline function get_hidden():Bool { return __hidden; } @:noCompletion private inline function get_maxHeight():Int { return __maxHeight; } @:noCompletion private function set_maxHeight(value:Int):Int { setMaxSize(__maxWidth, value); return __maxHeight; } @:noCompletion private inline function get_maximized():Bool { return __maximized; } @:noCompletion private inline function set_maximized(value:Bool):Bool { __minimized = false; return __maximized = __backend.setMaximized(value); } @:noCompletion private inline function get_maxWidth():Int { return __maxWidth; } @:noCompletion private function set_maxWidth(value:Int):Int { setMinSize(value, __maxHeight); return __maxWidth; } @:noCompletion private inline function get_minHeight():Int { return __minHeight; } @:noCompletion private function set_minHeight(value:Int):Int { setMinSize(__minWidth, value); return __minHeight; } @:noCompletion private inline function get_minimized():Bool { return __minimized; } @:noCompletion private function set_minimized(value:Bool):Bool { __maximized = false; return __minimized = __backend.setMinimized(value); } @:noCompletion private inline function get_minWidth():Int { return __minWidth; } @:noCompletion private function set_minWidth(value:Int):Int { setMinSize(value, __minHeight); return __minWidth; } @:noCompletion private function get_mouseLock():Bool { return __backend.getMouseLock(); } @:noCompletion private function set_mouseLock(value:Bool):Bool { __backend.setMouseLock(value); return value; } @:noCompletion private function get_opacity():Float { return __backend.getOpacity(); } @:noCompletion private function set_opacity(value:Float):Float { __backend.setOpacity(value); return value; } @:noCompletion private inline function get_resizable():Bool { return __resizable; } @:noCompletion private function set_resizable(value:Bool):Bool { __resizable = __backend.setResizable(value); return __resizable; } @:noCompletion private inline function get_scale():Float { return __scale; } @:noCompletion private inline function get_textInputEnabled():Bool { return __backend.getTextInputEnabled(); } @:noCompletion private inline function set_textInputEnabled(value:Bool):Bool { return __backend.setTextInputEnabled(value); } public function setTextInputRect(value:Rectangle):Rectangle { return __backend.setTextInputRect(value); } @:noCompletion private inline function get_title():String { return __title; } @:noCompletion private function set_title(value:String):String { return __title = __backend.setTitle(value); } @:noCompletion private inline function get_visible():Bool { return !__hidden; } @:noCompletion private function set_visible(value:Bool):Bool { __hidden = !__backend.setVisible(value); return !__hidden; } @:noCompletion private inline function get_width():Int { return __width; } @:noCompletion private function set_width(value:Int):Int { resize(value, __height); return __width; } @:noCompletion private inline function get_x():Int { return __x; } @:noCompletion private function set_x(value:Int):Int { move(value, __y); return __x; } @:noCompletion private inline function get_y():Int { return __y; } @:noCompletion private function set_y(value:Int):Int { move(__x, value); return __y; } } #if air @:noCompletion private typedef WindowBackend = lime._internal.backend.air.AIRWindow; #elseif flash @:noCompletion private typedef WindowBackend = lime._internal.backend.flash.FlashWindow; #elseif (js && html5) @:noCompletion private typedef WindowBackend = lime._internal.backend.html5.HTML5Window; #else @:noCompletion private typedef WindowBackend = lime._internal.backend.native.NativeWindow; #end ================================================ FILE: src/lime/ui/WindowAttributes.hx ================================================ package lime.ui; import lime.graphics.RenderContextAttributes; typedef WindowAttributes = { @:optional public var allowHighDPI:Bool; @:optional public var alwaysOnTop:Bool; @:optional public var borderless:Bool; @:optional public var context:RenderContextAttributes; // @:optional public var display:Int; @:optional public var element:#if (js && html5 && !doc_gen) js.html.Element #else Dynamic #end; @:optional public var frameRate:Float; @:optional public var fullscreen:Bool; @:optional public var height:Int; @:optional public var hidden:Bool; @:optional public var maximized:Bool; @:optional public var minimized:Bool; @:optional public var parameters:Dynamic; @:optional public var resizable:Bool; @:optional public var title:String; @:optional public var width:Int; @:optional public var x:Int; @:optional public var y:Int; } ================================================ FILE: src/lime/utils/ArrayBuffer.hx ================================================ package lime.utils; #if (js && !doc_gen) typedef ArrayBuffer = #if haxe4 js.lib.ArrayBuffer #else js.html.ArrayBuffer #end; #else import haxe.io.Bytes; @:forward @:transitive abstract ArrayBuffer(Bytes) from Bytes to Bytes #if doc_gen from Dynamic to Dynamic #end { public var byteLength(get, never):Int; private inline function get_byteLength() { return this.length; } public inline function new(byteLength:Int) { this = Bytes.alloc(byteLength); } public static inline function isView(arg:Dynamic):Bool { return (arg != null && (arg is ArrayBufferView)); } public inline function slice(begin:Int, end:Null = null) { if (end == null) end = this.length; if (begin < 0) begin = 0; if (end > this.length) end = this.length; var length = end - begin; if (begin < 0 || length <= 0) { return new ArrayBuffer(0); } else { var bytes = Bytes.alloc(length); bytes.blit(0, this, begin, length); return cast bytes; } } } #end // !js ================================================ FILE: src/lime/utils/ArrayBufferView.hx ================================================ package lime.utils; #if (js && !doc_gen) typedef ArrayBufferView = #if haxe4 js.lib.ArrayBufferView #else js.html.ArrayBufferView #end; #else import lime.system.System; import lime.system.Endian; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class ArrayBufferView { public var type = TypedArrayType.None; public var buffer:ArrayBuffer; public var byteOffset:Int; public var byteLength:Int; public var length:Int; // internal for avoiding switching on types var bytesPerElement(default, null):Int = 0; @:allow(lime.utils) #if !no_typedarray_inline inline #end function new(elements:Null = null, in_type:TypedArrayType) { type = in_type; bytesPerElement = bytesForType(type); // other constructor types use // the init calls below if (elements != null && elements != 0) { if (elements < 0) elements = 0; // :note:spec: also has, platform specific max int? // elements = min(elements,maxint); byteOffset = 0; byteLength = toByteLength(elements); buffer = new ArrayBuffer(byteLength); length = elements; } } // new // Constructor helpers @:allow(lime.utils) #if !no_typedarray_inline inline #end function initTypedArray(view:ArrayBufferView) { var srcData = view.buffer; var srcLength = view.length; var srcByteOffset = view.byteOffset; var srcElementSize = view.bytesPerElement; var elementSize = bytesPerElement; // same species, so just blit the data // in other words, it shares the same bytes per element etc if (view.type == type) { cloneBuffer(srcData, srcByteOffset); } else { // see :note:1: below use FPHelper! throw("unimplemented"); } byteLength = bytesPerElement * srcLength; byteOffset = 0; length = srcLength; return this; } // (typedArray) @:allow(lime.utils) #if !no_typedarray_inline inline #end function initBuffer(in_buffer:ArrayBuffer, in_byteOffset:Int = 0, len:Null = null) { if (in_byteOffset < 0) throw TAError.RangeError; if (in_byteOffset % bytesPerElement != 0) throw TAError.RangeError; var bufferByteLength = in_buffer.length; var elementSize = bytesPerElement; var newByteLength = bufferByteLength; if (len == null) { newByteLength = bufferByteLength - in_byteOffset; if (bufferByteLength % bytesPerElement != 0) throw TAError.RangeError; if (newByteLength < 0) throw TAError.RangeError; } else { newByteLength = len * bytesPerElement; var newRange = in_byteOffset + newByteLength; if (newRange > bufferByteLength) throw TAError.RangeError; } buffer = in_buffer; byteOffset = in_byteOffset; byteLength = newByteLength; length = Std.int(newByteLength / bytesPerElement); return this; } // (buffer [, byteOffset [, length]]) @:allow(lime.utils) #if !no_typedarray_inline inline #end function initArray(array:Array) { byteOffset = 0; length = array.length; byteLength = toByteLength(length); buffer = new ArrayBuffer(byteLength); copyFromArray(cast array); return this; } // Public shared APIs // T is required because it can translate [0,0] as Int array #if !no_typedarray_inline inline #end public function set(view:ArrayBufferView = null, array:Array = null, offset:Int = 0):Void { if (view != null && array == null) { if (offset + view.length > this.length) { throw TAError.RangeError; } if (bytesPerElement == view.bytesPerElement) { buffer.blit(toByteLength(offset), view.buffer, view.byteOffset, view.byteLength); } else { for (i in 0...view.length) { transferElement(view, i, this, offset + i); } } } else if (array != null && view == null) { copyFromArray(cast array, offset); } else { throw "Invalid .set call. either view, or array must be not-null."; } } // Internal TypedArray api #if !no_typedarray_inline inline #end function cloneBuffer(src:ArrayBuffer, srcByteOffset:Int = 0) { var srcLength = src.length; var cloneLength = srcLength - srcByteOffset; buffer = new ArrayBuffer(cloneLength); buffer.blit(0, src, srcByteOffset, cloneLength); } @:generic @:allow(lime.utils) #if !no_typedarray_inline inline #end function subarray(begin:Int, end:Null = null):T_subarray { if (end == null) end = length; var len = end - begin; if (len < 0) len = 0; if (len > this.length) len = this.length; var byte_offset = toByteLength(begin) + byteOffset; var view:ArrayBufferView = switch (type) { case Int8: new Int8Array(buffer, byte_offset, len); case Int16: new Int16Array(buffer, byte_offset, len); case Int32: new Int32Array(buffer, byte_offset, len); case Uint8: new UInt8Array(buffer, byte_offset, len); case Uint8Clamped: new UInt8ClampedArray(buffer, byte_offset, len); case Uint16: new UInt16Array(buffer, byte_offset, len); case Uint32: new UInt32Array(buffer, byte_offset, len); case Float32: new Float32Array(buffer, byte_offset, len); case Float64: new Float64Array(buffer, byte_offset, len); case None: throw "subarray on a blank ArrayBufferView"; } return cast view; } #if !no_typedarray_inline inline #end function bytesForType(type:TypedArrayType):Int { return switch (type) { case Int8: Int8Array.BYTES_PER_ELEMENT; case Uint8: UInt8Array.BYTES_PER_ELEMENT; case Uint8Clamped: UInt8ClampedArray.BYTES_PER_ELEMENT; case Int16: Int16Array.BYTES_PER_ELEMENT; case Uint16: UInt16Array.BYTES_PER_ELEMENT; case Int32: Int32Array.BYTES_PER_ELEMENT; case Uint32: UInt32Array.BYTES_PER_ELEMENT; case Float32: Float32Array.BYTES_PER_ELEMENT; case Float64: Float64Array.BYTES_PER_ELEMENT; case _: 1; } } #if !no_typedarray_inline inline #end function toString() { var name = switch (type) { case Int8: 'Int8Array'; case Uint8: 'UInt8Array'; case Uint8Clamped: 'UInt8ClampedArray'; case Int16: 'Int16Array'; case Uint16: 'UInt16Array'; case Int32: 'Int32Array'; case Uint32: 'UInt32Array'; case Float32: 'Float32Array'; case Float64: 'Float64Array'; case _: 'ArrayBufferView'; } return name + ' [byteLength:${this.byteLength}, length:${this.length}]'; } // toString #if !no_typedarray_inline inline #end function toByteLength(elemCount:Int):Int { return elemCount * bytesPerElement; } // Non-spec #if !no_typedarray_inline #end function copyFromArray(array:Array<#if hl Dynamic #else Float #end>, offset:Int = 0) { // Ideally, native semantics could be used, like cpp.NativeArray.blit var i = 0, len = array.length; if (offset + len > this.length) { throw TAError.RangeError; } switch (type) { case Int8: while (i < len) { var pos = (offset + i) * bytesPerElement; #if neko var value = array[i]; if (value == null) value = 0; ArrayBufferIO.setInt8(buffer, pos, Std.int(value)); #else ArrayBufferIO.setInt8(buffer, pos, Std.int(array[i])); #end ++i; } case Int16: while (i < len) { var pos = (offset + i) * bytesPerElement; #if neko var value = array[i]; if (value == null) value = 0; ArrayBufferIO.setInt16(buffer, pos, Std.int(value)); #else ArrayBufferIO.setInt16(buffer, pos, Std.int(array[i])); #end ++i; } case Int32: while (i < len) { var pos = (offset + i) * bytesPerElement; #if neko var value = array[i]; if (value == null) value = 0; ArrayBufferIO.setInt32(buffer, pos, Std.int(value)); #else ArrayBufferIO.setInt32(buffer, pos, Std.int(array[i])); #end ++i; } case Uint8: while (i < len) { var pos = (offset + i) * bytesPerElement; #if neko var value = array[i]; if (value == null) value = 0; ArrayBufferIO.setUint8(buffer, pos, Std.int(value)); #else ArrayBufferIO.setUint8(buffer, pos, Std.int(array[i])); #end ++i; } case Uint16: while (i < len) { var pos = (offset + i) * bytesPerElement; #if neko var value = array[i]; if (value == null) value = 0; ArrayBufferIO.setUint16(buffer, pos, Std.int(value)); #else ArrayBufferIO.setUint16(buffer, pos, Std.int(array[i])); #end ++i; } case Uint32: while (i < len) { var pos = (offset + i) * bytesPerElement; #if neko var value = array[i]; if (value == null) value = 0; ArrayBufferIO.setUint32(buffer, pos, Std.int(value)); #else ArrayBufferIO.setUint32(buffer, pos, Std.int(array[i])); #end ++i; } case Uint8Clamped: while (i < len) { var pos = (offset + i) * bytesPerElement; #if neko var value = array[i]; if (value == null) value = 0; ArrayBufferIO.setUint8Clamped(buffer, pos, Std.int(value)); #else ArrayBufferIO.setUint8Clamped(buffer, pos, Std.int(array[i])); #end ++i; } case Float32: while (i < len) { var pos = (offset + i) * bytesPerElement; ArrayBufferIO.setFloat32(buffer, pos, array[i]); ++i; } case Float64: while (i < len) { var pos = (offset + i) * bytesPerElement; ArrayBufferIO.setFloat64(buffer, pos, array[i]); ++i; } case None: throw "copyFromArray on a base type ArrayBuffer"; } } static function transferElement(fromView:ArrayBufferView, fromIndex:Int, toView:ArrayBufferView, toIndex:Int):Void { var fromValue:Dynamic = null; var fromPos = fromView.byteOffset + (fromIndex * fromView.bytesPerElement); switch (fromView.type) { case Int8: fromValue = ArrayBufferIO.getInt8(fromView.buffer, fromPos); case Int16: fromValue = ArrayBufferIO.getInt16(fromView.buffer, fromPos); case Int32: fromValue = ArrayBufferIO.getInt32(fromView.buffer, fromPos); case Uint8: fromValue = ArrayBufferIO.getUint8(fromView.buffer, fromPos); case Uint16: fromValue = ArrayBufferIO.getUint16(fromView.buffer, fromPos); case Uint32: fromValue = ArrayBufferIO.getUint32(fromView.buffer, fromPos); case Uint8Clamped: fromValue = ArrayBufferIO.getUint8(fromView.buffer, fromPos); case Float32: fromValue = ArrayBufferIO.getFloat32(fromView.buffer, fromPos); case Float64: fromValue = ArrayBufferIO.getFloat64(fromView.buffer, fromPos); case None: throw "transferElement on a base type ArrayBuffer"; } var toPos = toView.byteOffset + (toIndex * toView.bytesPerElement); switch (toView.type) { case Int8: ArrayBufferIO.setInt8(toView.buffer, toPos, fromValue); case Int16: ArrayBufferIO.setInt16(toView.buffer, toPos, fromValue); case Int32: ArrayBufferIO.setInt32(toView.buffer, toPos, fromValue); case Uint8: ArrayBufferIO.setUint8(toView.buffer, toPos, fromValue); case Uint16: ArrayBufferIO.setUint16(toView.buffer, toPos, fromValue); case Uint32: ArrayBufferIO.setUint32(toView.buffer, toPos, fromValue); case Uint8Clamped: ArrayBufferIO.setUint8Clamped(toView.buffer, toPos, fromValue); case Float32: ArrayBufferIO.setFloat32(toView.buffer, toPos, fromValue); case Float64: ArrayBufferIO.setFloat64(toView.buffer, toPos, fromValue); case None: throw "transferElement on a base type ArrayBuffer"; } } } // ArrayBufferView #end // !js @:noCompletion @:dox(hide) enum TAError { RangeError; } @:noCompletion @:dox(hide) #if (haxe_ver >= 4.0) enum #else @:enum #end abstract TypedArrayType(Int) from Int to Int { var None = 0; var Int8 = 1; var Int16 = 2; var Int32 = 3; var Uint8 = 4; var Uint8Clamped = 5; var Uint16 = 6; var Uint32 = 7; var Float32 = 8; var Float64 = 9; } #if (!js || doc_gen) @:noCompletion @:dox(hide) class ArrayBufferIO { // 8 #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getInt8(buffer:ArrayBuffer, byteOffset:Int):Int { #if cpp var val:Int = untyped __global__.__hxcpp_memory_get_byte(buffer.getData(), byteOffset) & 0xFF; return ((val & 0x80) != 0) ? (val - 0x100) : val; #else var val:Int = buffer.get(byteOffset); return ((val & 0x80) != 0) ? (val - 0x100) : val; #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setInt8(buffer:ArrayBuffer, byteOffset:Int, value:Int) { #if cpp untyped __global__.__hxcpp_memory_set_byte(buffer.getData(), byteOffset, value & 0xFF); #elseif neko if (value == null) value = 0; untyped __dollar__sset(buffer.b, byteOffset, value & 0xFF); #else buffer.set(byteOffset, value); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getUint8(buffer:ArrayBuffer, byteOffset:Int):Null { #if cpp return untyped __global__.__hxcpp_memory_get_byte(buffer.getData(), byteOffset) & 0xFF; #else return buffer.get(byteOffset); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setUint8Clamped(buffer:ArrayBuffer, byteOffset:Int, value:UInt) { setUint8(buffer, byteOffset, _clamp(value)); } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setUint8(buffer:ArrayBuffer, byteOffset:Int, value:UInt) { #if cpp untyped __global__.__hxcpp_memory_set_byte(buffer.getData(), byteOffset, value & 0xFF); #else #if neko if (value == null) value = 0; #end buffer.set(byteOffset, value); #end } // 16 public static function getInt16(buffer:ArrayBuffer, byteOffset:Int):Int { #if cpp untyped return __global__.__hxcpp_memory_get_i16(buffer.getData(), byteOffset); #else var ch1 = buffer.get(byteOffset); var ch2 = buffer.get(byteOffset + 1); var val = ((ch2 << 8) | ch1); return ((val & 0x8000) != 0) ? (val - 0x10000) : (val); #end } public static function getInt16_BE(buffer:ArrayBuffer, byteOffset:Int):Int { #if cpp var bufferData = buffer.getData(); var ch1:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset) & 0xFF; var ch2:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset + 1) & 0xFF; var val = ((ch1 << 8) | ch2); return ((val & 0x8000) != 0) ? (val - 0x10000) : (val); #else var ch1 = buffer.get(byteOffset); var ch2 = buffer.get(byteOffset + 1); var val = ((ch1 << 8) | ch2); return ((val & 0x8000) != 0) ? (val - 0x10000) : (val); #end } public static function setInt16(buffer:ArrayBuffer, byteOffset:Int, value:Int) { #if cpp untyped __global__.__hxcpp_memory_set_i16(buffer.getData(), byteOffset, value); #elseif neko if (value == null) value = 0; untyped var b = buffer.b; untyped __dollar__sset(b, byteOffset, (value) & 0xFF); untyped __dollar__sset(b, byteOffset + 1, (value >> 8) & 0xFF); #else buffer.set(byteOffset, (value) & 0xFF); buffer.set(byteOffset + 1, (value >> 8) & 0xFF); #end } public static function setInt16_BE(buffer:ArrayBuffer, byteOffset:Int, value:Int) { #if cpp var bufferData = buffer.getData(); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset, (value >> 8) & 0xFF); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset + 1, value & 0xFF); #elseif neko if (value == null) value = 0; untyped var b = buffer.b; untyped __dollar__sset(b, byteOffset, (value >> 8) & 0xFF); untyped __dollar__sset(b, byteOffset + 1, (value) & 0xFF); #else buffer.set(byteOffset, (value >> 8) & 0xFF); buffer.set(byteOffset + 1, (value) & 0xFF); #end } // setInt16_BE #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getUint16(buffer:ArrayBuffer, byteOffset:Int):Null { #if cpp untyped return __global__.__hxcpp_memory_get_ui16(buffer.getData(), byteOffset) & 0xFFFF; #else var ch1 = buffer.get(byteOffset); var ch2 = buffer.get(byteOffset + 1); return ((ch2 << 8) | ch1); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getUint16_BE(buffer:ArrayBuffer, byteOffset:Int):Null { #if cpp var bufferData = buffer.getData(); var ch1:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset) & 0xFF; var ch2:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset + 1) & 0xFF; return ((ch1 << 8) | ch2); #else var ch1 = buffer.get(byteOffset); var ch2 = buffer.get(byteOffset + 1); return ((ch1 << 8) | ch2); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setUint16(buffer:ArrayBuffer, byteOffset:Int, value:UInt) { #if cpp untyped __global__.__hxcpp_memory_set_ui16(buffer.getData(), byteOffset, value); #else setInt16(buffer, byteOffset, value); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setUint16_BE(buffer:ArrayBuffer, byteOffset:Int, value:UInt) { #if cpp var bufferData = buffer.getData(); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset, (value >> 8) & 0xFF); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset + 1, value & 0xFF); #elseif neko if (value == null) value = 0; untyped var b = buffer.b; untyped __dollar__sset(b, byteOffset, (value >> 8) & 0xFF); untyped __dollar__sset(b, byteOffset + 1, (value) & 0xFF); #else buffer.set(byteOffset, (value >> 8) & 0xFF); buffer.set(byteOffset + 1, (value) & 0xFF); #end } // 32 #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getInt32(buffer:ArrayBuffer, byteOffset:Int):Int { #if cpp untyped return __global__.__hxcpp_memory_get_i32(buffer.getData(), byteOffset); #else return buffer.getInt32(byteOffset); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getInt32_BE(buffer:ArrayBuffer, byteOffset:Int):Int { #if cpp var bufferData = buffer.getData(); var ch1:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset) & 0xFF; var ch2:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset + 1) & 0xFF; var ch3:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset + 2) & 0xFF; var ch4:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset + 3) & 0xFF; return (ch1 << 24) | (ch2 << 16) | (ch3 << 8) | ch4; #else var ch1 = buffer.get(byteOffset); var ch2 = buffer.get(byteOffset + 1); var ch3 = buffer.get(byteOffset + 2); var ch4 = buffer.get(byteOffset + 3); return (ch1 << 24) | (ch2 << 16) | (ch3 << 8) | ch4; #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setInt32(buffer:ArrayBuffer, byteOffset:Int, value:Int) { #if cpp untyped __global__.__hxcpp_memory_set_i32(buffer.getData(), byteOffset, value); #else #if neko if (value == null) value = 0; #end buffer.setInt32(byteOffset, value); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setInt32_BE(buffer:ArrayBuffer, byteOffset:Int, value:Int) { #if cpp var bufferData = buffer.getData(); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset, (value >> 24) & 0xFF); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset + 1, (value >> 16) & 0xFF); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset + 2, (value >> 8) & 0xFF); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset + 3, value & 0xFF); #elseif neko if (value == null) value = 0; untyped var b = buffer.b; untyped __dollar__sset(b, byteOffset, (value >> 24) & 0xFF); untyped __dollar__sset(b, byteOffset + 1, (value >> 16) & 0xFF); untyped __dollar__sset(b, byteOffset + 2, (value >> 8) & 0xFF); untyped __dollar__sset(b, byteOffset + 3, value & 0xFF); #else buffer.set(byteOffset, (value >> 24) & 0xFF); buffer.set(byteOffset + 1, (value >> 16) & 0xFF); buffer.set(byteOffset + 2, (value >> 8) & 0xFF); buffer.set(byteOffset + 3, value & 0xFF); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getUint32(buffer:ArrayBuffer, byteOffset:Int):Null { #if cpp untyped return __global__.__hxcpp_memory_get_ui32(buffer.getData(), byteOffset); #else var ch1:Int = buffer.get(byteOffset); var ch2:Int = buffer.get(byteOffset + 1); var ch3:Int = buffer.get(byteOffset + 2); var ch4:Int = buffer.get(byteOffset + 3); return ch1 | (ch2 << 8) | (ch3 << 16) | (ch4 << 24); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getUint32_BE(buffer:ArrayBuffer, byteOffset:Int):Null { #if cpp var bufferData = buffer.getData(); var ch1:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset) & 0xFF; var ch2:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset + 1) & 0xFF; var ch3:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset + 2) & 0xFF; var ch4:Int = untyped __global__.__hxcpp_memory_get_byte(bufferData, byteOffset + 3) & 0xFF; return (ch1 << 24) | (ch2 << 16) | (ch3 << 8) | ch4; #else var ch1 = buffer.get(byteOffset); var ch2 = buffer.get(byteOffset + 1); var ch3 = buffer.get(byteOffset + 2); var ch4 = buffer.get(byteOffset + 3); return (ch1 << 24) | (ch2 << 16) | (ch3 << 8) | ch4; #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setUint32(buffer:ArrayBuffer, byteOffset:Int, value:UInt) { #if cpp untyped __global__.__hxcpp_memory_set_ui32(buffer.getData(), byteOffset, value); #else setInt32(buffer, byteOffset, value); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setUint32_BE(buffer:ArrayBuffer, byteOffset:Int, value:UInt):Void { #if cpp var bufferData = buffer.getData(); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset, (value >> 24) & 0xFF); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset + 1, (value >> 16) & 0xFF); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset + 2, (value >> 8) & 0xFF); untyped __global__.__hxcpp_memory_set_byte(bufferData, byteOffset + 3, value & 0xFF); #elseif neko if (value == null) value = 0; untyped var b = buffer.b; untyped __dollar__sset(b, byteOffset, (value >> 24) & 0xFF); untyped __dollar__sset(b, byteOffset + 1, (value >> 16) & 0xFF); untyped __dollar__sset(b, byteOffset + 2, (value >> 8) & 0xFF); untyped __dollar__sset(b, byteOffset + 3, value & 0xFF); #else buffer.set(byteOffset, (value >> 24) & 0xFF); buffer.set(byteOffset + 1, (value >> 16) & 0xFF); buffer.set(byteOffset + 2, (value >> 8) & 0xFF); buffer.set(byteOffset + 3, value & 0xFF); #end } // Float #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getFloat32(buffer:ArrayBuffer, byteOffset:Int):Float { #if cpp untyped return __global__.__hxcpp_memory_get_float(buffer.getData(), byteOffset); #else return buffer.getFloat(byteOffset); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getFloat32_BE(buffer:ArrayBuffer, byteOffset:Int):Float { #if cpp untyped return __global__.__hxcpp_memory_get_float(buffer.getData(), byteOffset); #else return buffer.getFloat(byteOffset); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setFloat32(buffer:ArrayBuffer, byteOffset:Int, value:Float) { #if cpp untyped __global__.__hxcpp_memory_set_float(buffer.getData(), byteOffset, value); #else #if neko if (value == null) value = 0; #end buffer.setFloat(byteOffset, value); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setFloat32_BE(buffer:ArrayBuffer, byteOffset:Int, value:Float) { #if cpp untyped __global__.__hxcpp_memory_set_float(buffer.getData(), byteOffset, value); #else #if neko if (value == null) value = 0; #end buffer.setFloat(byteOffset, value); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getFloat64(buffer:ArrayBuffer, byteOffset:Int):Float { #if cpp untyped return __global__.__hxcpp_memory_get_double(buffer.getData(), byteOffset); #else return buffer.getDouble(byteOffset); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function getFloat64_BE(buffer:ArrayBuffer, byteOffset:Int):Float { #if cpp untyped return __global__.__hxcpp_memory_get_double(buffer.getData(), byteOffset); #else return buffer.getDouble(byteOffset); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setFloat64(buffer:ArrayBuffer, byteOffset:Int, value:Float) { #if cpp untyped __global__.__hxcpp_memory_set_double(buffer.getData(), byteOffset, value); #else #if neko if (value == null) value = 0; #end buffer.setDouble(byteOffset, value); #end } #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end public static function setFloat64_BE(buffer:ArrayBuffer, byteOffset:Int, value:Float) { #if cpp untyped __global__.__hxcpp_memory_set_double(buffer.getData(), byteOffset, value); #else #if neko if (value == null) value = 0; #end buffer.setDouble(byteOffset, value); #end } // Internal #if !no_typedarray_inline #if (haxe_ver >= 4.0) extern #else @:extern #end inline #end // clamp a Int to a 0-255 Uint8 (for Uint8Clamped array) static function _clamp(_in:Float):Int { var _out = Std.int(_in); _out = _out > 255 ? 255 : _out; return _out < 0 ? 0 : _out; } // _clamp } #else // #error "ArrayBufferIO is not used on js target, use DataView instead" #end // !js ================================================ FILE: src/lime/utils/AssetBundle.hx ================================================ package lime.utils; import haxe.io.Bytes; import haxe.io.BytesInput; import haxe.io.Input; import haxe.zip.Reader; import lime.app.Future; import lime.utils.Bytes as LimeBytes; #if sys import sys.io.File; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class AssetBundle { public var data:Map; public var paths:Array; public function new() { // compressed = new Map(); data = new Map(); paths = new Array(); } public static function fromBytes(bytes:Bytes):AssetBundle { var input = new BytesInput(bytes); return __extractBundle(input); } public static function fromFile(path:String):AssetBundle { #if sys var input = File.read(path); return __extractBundle(input); #else return null; #end } public static function loadFromBytes(bytes:Bytes):Future { return Future.withValue(fromBytes(bytes)); } public static function loadFromFile(path:String):Future { return LimeBytes.loadFromFile(path).then(loadFromBytes); } @:noCompletion private static function __extractBundle(input:Input):AssetBundle { var entries = Reader.readZip(input); var bundle = new AssetBundle(); for (entry in entries) { if (entry.compressed) { var bytes:LimeBytes = entry.data; bundle.data.set(entry.fileName, bytes.decompress(DEFLATE)); } else { bundle.data.set(entry.fileName, entry.data); } bundle.paths.push(entry.fileName); } return bundle; } } ================================================ FILE: src/lime/utils/AssetCache.hx ================================================ package lime.utils; import haxe.macro.Compiler; import lime.media.AudioBuffer; import lime.graphics.Image; #if !(macro || commonjs) import lime._internal.macros.AssetsMacro; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class AssetCache { public var audio:Map; public var enabled:Bool = true; public var image:Map; public var font:Map; public var version:Int; public function new() { audio = new Map(); font = new Map(); image = new Map(); #if (macro || commonjs || lime_disable_assets_version) version = 0; #elseif lime_assets_version version = Std.parseInt(Compiler.getDefine("lime-assets-version")); #else version = AssetsMacro.cacheVersion(); #end } public function exists(id:String, ?type:AssetType):Bool { if (type == AssetType.IMAGE || type == null) { if (image.exists(id)) return true; } if (type == AssetType.FONT || type == null) { if (font.exists(id)) return true; } if (type == AssetType.SOUND || type == AssetType.MUSIC || type == null) { if (audio.exists(id)) return true; } return false; } public function set(id:String, type:AssetType, asset:Dynamic):Void { switch (type) { case FONT: font.set(id, asset); case IMAGE: if (!(asset is Image)) throw "Cannot cache non-Image asset: " + asset + " as Image"; image.set(id, asset); case SOUND, MUSIC: if (!(asset is AudioBuffer)) throw "Cannot cache non-AudioBuffer asset: " + asset + " as AudioBuffer"; audio.set(id, asset); default: throw type + " assets are not cachable"; } } public function clear(prefix:String = null):Void { if (prefix == null) { audio = new Map(); font = new Map(); image = new Map(); } else { var keys = audio.keys(); for (key in keys) { if (StringTools.startsWith(key, prefix)) { audio.remove(key); } } var keys = font.keys(); for (key in keys) { if (StringTools.startsWith(key, prefix)) { font.remove(key); } } var keys = image.keys(); for (key in keys) { if (StringTools.startsWith(key, prefix)) { image.remove(key); } } } } } ================================================ FILE: src/lime/utils/AssetLibrary.hx ================================================ package lime.utils; import haxe.io.Path; import lime.app.Event; import lime.app.Future; import lime.app.Promise; import lime.media.AudioBuffer; import lime.graphics.Image; import lime.net.HTTPRequest; import lime.text.Font; import lime.utils.AssetType; #if flash import flash.display.BitmapData; import flash.media.Sound; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime.text.Font) @:access(lime.utils.Assets) class AssetLibrary { public var onChange = new EventVoid>(); @:noCompletion private var assetsLoaded:Int; @:noCompletion private var assetsTotal:Int; @:noCompletion private var bytesLoaded:Int; @:noCompletion private var bytesLoadedCache:Map; @:noCompletion private var bytesTotal:Int; @:noCompletion private var cachedAudioBuffers = new Map(); @:noCompletion private var cachedBytes = new Map(); @:noCompletion private var cachedFonts = new Map(); @:noCompletion private var cachedImages = new Map(); @:noCompletion private var cachedText = new Map(); @:noCompletion private var classTypes = new Map>(); @:noCompletion private var loaded:Bool; @:noCompletion private var pathGroups = new Map>(); @:noCompletion private var paths = new Map(); @:noCompletion private var preload = new Map(); @:noCompletion private var promise:Promise; @:noCompletion private var sizes = new Map(); @:noCompletion private var types = new Map(); public function new() { bytesLoaded = 0; bytesTotal = 0; } public function exists(id:String, type:String):Bool { var requestedType = type != null ? cast(type, AssetType) : null; var assetType = types.get(id); if (assetType != null) { if (assetType == requestedType || ((requestedType == SOUND || requestedType == MUSIC) && (assetType == MUSIC || assetType == SOUND))) { return true; } #if flash if (requestedType == BINARY && (assetType == BINARY || assetType == TEXT || assetType == IMAGE)) { return true; } else if (requestedType == TEXT && assetType == BINARY) { return true; } else if (requestedType == null || paths.exists(id)) { return true; } #else if (requestedType == BINARY || requestedType == null || (assetType == BINARY && requestedType == TEXT)) { return true; } #end } return false; } public static function fromBytes(bytes:Bytes, rootPath:String = null):AssetLibrary { return fromManifest(AssetManifest.fromBytes(bytes, rootPath)); } public static function fromFile(path:String, rootPath:String = null):AssetLibrary { return fromManifest(AssetManifest.fromFile(path, rootPath)); } public static function fromBundle(bundle:AssetBundle):AssetLibrary { if (bundle.data.exists("library.json")) { var manifest = AssetManifest.fromBytes(bundle.data.get("library.json")); if (manifest != null) { var library:AssetLibrary = null; if (manifest.libraryType == null) { library = new AssetLibrary(); } else { var libraryClass = Type.resolveClass(manifest.libraryType); if (libraryClass != null) { library = Type.createInstance(libraryClass, manifest.libraryArgs); } else { Log.warn("Could not find library type: " + manifest.libraryType); return null; } } library.__fromBundle(bundle, manifest); return library; } } else { var library = new AssetLibrary(); library.__fromBundle(bundle); return library; } return null; } public static function fromManifest(manifest:AssetManifest):AssetLibrary { if (manifest == null) return null; var library:AssetLibrary = null; if (manifest.libraryType == null) { library = new AssetLibrary(); } else { var libraryClass = Type.resolveClass(manifest.libraryType); if (libraryClass != null) { library = Type.createInstance(libraryClass, manifest.libraryArgs); } else { Log.warn("Could not find library type: " + manifest.libraryType); return null; } } library.__fromManifest(manifest); return library; } public function getAsset(id:String, type:String):Dynamic { return switch (type) { case BINARY: getBytes(id); case FONT: getFont(id); case IMAGE: getImage(id); case MUSIC, SOUND: getAudioBuffer(id); case TEXT: getText(id); case TEMPLATE: throw "Not sure how to get template: " + id; default: throw "Unknown asset type: " + type; } } public function getAudioBuffer(id:String):AudioBuffer { if (cachedAudioBuffers.exists(id)) { return cachedAudioBuffers.get(id); } else if (classTypes.exists(id)) { #if flash var buffer = new AudioBuffer(); buffer.src = cast(Type.createInstance(classTypes.get(id), []), Sound); return buffer; #else return AudioBuffer.fromBytes(cast(Type.createInstance(classTypes.get(id), []), Bytes)); #end } else { return AudioBuffer.fromFile(getPath(id)); } } public function getBytes(id:String):Bytes { if (cachedBytes.exists(id)) { return cachedBytes.get(id); } else if (cachedText.exists(id)) { var bytes = Bytes.ofString(cachedText.get(id)); cachedBytes.set(id, bytes); return bytes; } else if (classTypes.exists(id)) { #if flash var data = Type.createInstance(classTypes.get(id), []); switch (types.get(id)) { case TEXT, BINARY: return Bytes.ofData(cast(Type.createInstance(classTypes.get(id), []), flash.utils.ByteArray)); case IMAGE: var bitmapData = cast(Type.createInstance(classTypes.get(id), []), BitmapData); return Bytes.ofData(bitmapData.getPixels(bitmapData.rect)); default: return null; } #else return cast(Type.createInstance(classTypes.get(id), []), Bytes); #end } else { return Bytes.fromFile(getPath(id)); } } public function getFont(id:String):Font { if (cachedFonts.exists(id)) { return cachedFonts.get(id); } else if (classTypes.exists(id)) { #if flash var src = Type.createInstance(classTypes.get(id), []); var font = new Font(src.fontName); font.src = src; return font; #else return cast(Type.createInstance(classTypes.get(id), []), Font); #end } else { return Font.fromFile(getPath(id)); } } public function getImage(id:String):Image { if (cachedImages.exists(id)) { return cachedImages.get(id); } else if (classTypes.exists(id)) { #if flash return Image.fromBitmapData(cast(Type.createInstance(classTypes.get(id), []), BitmapData)); #else return cast(Type.createInstance(classTypes.get(id), []), Image); #end } else { return Image.fromFile(getPath(id)); } } public function getPath(id:String):String { if (paths.exists(id)) { return paths.get(id); } else if (pathGroups.exists(id)) { return pathGroups.get(id)[0]; } else { return null; } } public function getText(id:String):String { if (cachedText.exists(id)) { return cachedText.get(id); } else { var bytes = getBytes(id); if (bytes == null) { return null; } else { return bytes.getString(0, bytes.length); } } } public function isLocal(id:String, type:String):Bool { #if sys return true; #else if (classTypes.exists(id)) { return true; } return switch (cast(type, AssetType)) { case null: cachedBytes.exists(id) || cachedText.exists(id) || cachedImages.exists(id) || cachedAudioBuffers.exists(id) || cachedFonts.exists(id); case IMAGE: cachedImages.exists(id); case MUSIC, SOUND: cachedAudioBuffers.exists(id); case FONT: cachedFonts.exists(id); default: cachedBytes.exists(id) || cachedText.exists(id); } #end } public function list(type:String):Array { var requestedType = type != null ? cast(type, AssetType) : null; var items = []; for (id in types.keys()) { if (requestedType == null || exists(id, type)) { items.push(id); } } return items; } public function loadAsset(id:String, type:String):Future { return switch (type) { case BINARY: loadBytes(id); case FONT: loadFont(id); case IMAGE: loadImage(id); case MUSIC, SOUND: loadAudioBuffer(id); case TEXT: loadText(id); case TEMPLATE: throw "Not sure how to load template: " + id; default: throw "Unknown asset type: " + type; } } public function load():Future { if (loaded) { return Future.withValue(this); } if (promise == null) { promise = new Promise(); bytesLoadedCache = new Map(); assetsLoaded = 0; assetsTotal = 1; for (id in preload.keys()) { if (!preload.get(id)) continue; Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); switch (types.get(id)) { case BINARY: assetsTotal++; var future = loadBytes(id); future.onProgress(load_onProgress.bind(id)); future.onError(load_onError.bind(id)); future.onComplete(loadBytes_onComplete.bind(id)); case FONT: assetsTotal++; var future = loadFont(id); future.onProgress(load_onProgress.bind(id)); future.onError(load_onError.bind(id)); future.onComplete(loadFont_onComplete.bind(id)); case IMAGE: assetsTotal++; var future = loadImage(id); future.onProgress(load_onProgress.bind(id)); future.onError(load_onError.bind(id)); future.onComplete(loadImage_onComplete.bind(id)); case MUSIC, SOUND: assetsTotal++; var future = loadAudioBuffer(id); future.onProgress(load_onProgress.bind(id)); future.onError(loadAudioBuffer_onError.bind(id)); future.onComplete(loadAudioBuffer_onComplete.bind(id)); case TEXT: assetsTotal++; var future = loadText(id); future.onProgress(load_onProgress.bind(id)); future.onError(load_onError.bind(id)); future.onComplete(loadText_onComplete.bind(id)); default: } } __assetLoaded(null); } return promise.future; } public function loadAudioBuffer(id:String):Future { if (cachedAudioBuffers.exists(id)) { return Future.withValue(cachedAudioBuffers.get(id)); } else if (classTypes.exists(id)) { return Future.withValue(AudioBuffer.fromBytes(cast(Type.createInstance(classTypes.get(id), []), Bytes))); } else { if (pathGroups.exists(id)) { return AudioBuffer.loadFromFiles(pathGroups.get(id)); } else { return AudioBuffer.loadFromFile(paths.get(id)); } } } public function loadBytes(id:String):Future { if (cachedBytes.exists(id)) { return Future.withValue(cachedBytes.get(id)); } else if (classTypes.exists(id)) { #if flash return Future.withValue(Bytes.ofData(Type.createInstance(classTypes.get(id), []))); #else return Future.withValue(Type.createInstance(classTypes.get(id), [])); #end } else { return Bytes.loadFromFile(getPath(id)); } } public function loadFont(id:String):Future { if (cachedFonts.exists(id)) { return Future.withValue(cachedFonts.get(id)); } else if (classTypes.exists(id)) { var font:Font = Type.createInstance(classTypes.get(id), []); #if (js && html5) return font.__loadFromName(font.name); #else return Future.withValue(font); #end } else { #if (js && html5) return Font.loadFromName(getPath(id)); #else return Font.loadFromFile(getPath(id)); #end } } public static function loadFromBytes(bytes:Bytes, rootPath:String = null):Future { return AssetManifest.loadFromBytes(bytes, rootPath).then(function(manifest) { return loadFromManifest(manifest); }); } public static function loadFromFile(path:String, rootPath:String = null):Future { return AssetManifest.loadFromFile(path, rootPath).then(function(manifest) { return loadFromManifest(manifest); }); } public static function loadFromManifest(manifest:AssetManifest):Future { var library = fromManifest(manifest); if (library != null) { return library.load(); } else { return cast Future.withError("Could not load asset manifest"); } } public function loadImage(id:String):Future { if (cachedImages.exists(id)) { return Future.withValue(cachedImages.get(id)); } else if (classTypes.exists(id)) { return Future.withValue(Type.createInstance(classTypes.get(id), [])); } else if (cachedBytes.exists(id)) { return Image.loadFromBytes(cachedBytes.get(id)).then(function(image) { cachedBytes.remove(id); cachedImages.set(id, image); return Future.withValue(image); }); } else { return Image.loadFromFile(getPath(id)); } } public function loadText(id:String):Future { if (cachedText.exists(id)) { return Future.withValue(cachedText.get(id)); } else if (cachedBytes.exists(id) || classTypes.exists(id)) { var bytes = getBytes(id); if (bytes == null) { return cast Future.withValue(null); } else { var text = bytes.getString(0, bytes.length); cachedText.set(id, text); return Future.withValue(text); } } else { var request = new HTTPRequest(); return request.load(getPath(id)); } } public function unload():Void { #if haxe4 cachedBytes.clear(); cachedFonts.clear(); cachedImages.clear(); cachedAudioBuffers.clear(); cachedText.clear(); #else cachedBytes = new Map(); cachedFonts = new Map(); cachedImages = new Map(); cachedText = new Map(); classTypes = new Map>(); #end } @:noCompletion private function __assetLoaded(id:String):Void { assetsLoaded++; if (id != null) { Log.verbose("Loaded asset: " + id + " [" + types.get(id) + "] (" + (assetsLoaded - 1) + "/" + (assetsTotal - 1) + ")"); } if (id != null) { var size = sizes.exists(id) ? sizes.get(id) : 0; if (!bytesLoadedCache.exists(id)) { bytesLoaded += size; } else { var cache = bytesLoadedCache.get(id); if (cache < size) { bytesLoaded += (size - cache); } } bytesLoadedCache.set(id, size); } if (assetsLoaded < assetsTotal) { promise.progress(bytesLoaded, bytesTotal); } else { loaded = true; promise.progress(bytesTotal, bytesTotal); promise.complete(this); } } @:noCompletion private function __cacheBreak(path:String):String { return Assets.__cacheBreak(path); } @:noCompletion private function __fromBundle(bundle:AssetBundle, manifest:AssetManifest = null):Void { if (manifest != null) { var id, data, type:AssetType; for (asset in manifest.assets) { id = Reflect.hasField(asset, "id") ? asset.id : asset.path; data = bundle.data.get(asset.path); if (Reflect.hasField(asset, "type")) { type = asset.type; switch (type) { #if !web case IMAGE: cachedImages.set(id, Image.fromBytes(data)); case MUSIC, SOUND: cachedAudioBuffers.set(id, AudioBuffer.fromBytes(data)); case FONT: cachedFonts.set(id, Font.fromBytes(data)); #end case TEXT: cachedText.set(id, data != null ? Std.string(data) : null); default: cachedBytes.set(id, data); } types.set(id, asset.type); } else { cachedBytes.set(id, data); types.set(id, BINARY); } } } else { for (path in bundle.paths) { cachedBytes.set(path, bundle.data.get(path)); types.set(path, BINARY); } } } @:noCompletion private function __fromManifest(manifest:AssetManifest):Void { var hasSize = (manifest.version >= 2); var size, id, pathGroup:Array, classRef; var basePath = manifest.rootPath; if (basePath == null) basePath = ""; if (basePath != "") basePath += "/"; for (asset in manifest.assets) { size = hasSize && Reflect.hasField(asset, "size") ? asset.size : 100; id = Reflect.hasField(asset, "id") ? asset.id : asset.path; if (Reflect.hasField(asset, "path")) { paths.set(id, __cacheBreak(__resolvePath(basePath + Reflect.field(asset, "path")))); } if (Reflect.hasField(asset, "pathGroup")) { pathGroup = Reflect.field(asset, "pathGroup"); for (i in 0...pathGroup.length) { pathGroup[i] = __cacheBreak(__resolvePath(basePath + pathGroup[i])); } pathGroups.set(id, pathGroup); } sizes.set(id, size); types.set(id, asset.type); if (Reflect.hasField(asset, "preload")) { preload.set(id, Reflect.field(asset, "preload")); } if (Reflect.hasField(asset, "className")) { classRef = Type.resolveClass(Reflect.field(asset, "className")); #if (js && html5 && modular) if (classRef == null) { classRef = untyped $hx_exports[asset.className]; } #end classTypes.set(id, classRef); } } bytesTotal = 0; for (asset in manifest.assets) { id = Reflect.hasField(asset, "id") ? asset.id : asset.path; if (preload.exists(id) && preload.get(id) && sizes.exists(id)) { bytesTotal += sizes.get(id); } } } @:noCompletion private function __resolvePath(path:String):String { path = StringTools.replace(path, "\\", "/"); var colonIdx:Int = path.indexOf(":"); if (StringTools.startsWith(path, "http") && colonIdx > 0) { var lastSlashIdx:Int = colonIdx + 3; var httpSection:String = path.substr(0, lastSlashIdx); path = httpSection + StringTools.replace(path.substr(lastSlashIdx), "//", "/"); } else { path = StringTools.replace(path, "//", "/"); } #if android if (StringTools.startsWith(path, "./")) { path = path.substr(2); } #end if (path.indexOf("./") > -1) { var split = path.split("/"); var newPath = []; for (i in 0...split.length) { if (split[i] == "..") { if (i == 0 || newPath[i - 1] == "..") { newPath.push(".."); } else { newPath.pop(); } } else if (split[i] == ".") { if (i == 0) { newPath.push("."); } } else { newPath.push(split[i]); } } path = newPath.join("/"); } return path; } // Event Handlers @:noCompletion private function loadAudioBuffer_onComplete(id:String, audioBuffer:AudioBuffer):Void { cachedAudioBuffers.set(id, audioBuffer); if (pathGroups.exists(id)) { var pathGroup = pathGroups.get(id); for (otherID in pathGroups.keys()) { if (otherID == id) continue; for (path in pathGroup) { if (pathGroups.get(otherID).indexOf(path) > -1) { cachedAudioBuffers.set(otherID, audioBuffer); break; } } } } __assetLoaded(id); } @:noCompletion private function loadAudioBuffer_onError(id:String, message:Dynamic):Void { #if (js && html5) if (message != null && message != "") { Log.warn("Could not load \"" + id + "\": " + Std.string(message)); } else { Log.warn("Could not load \"" + id + "\""); } loadAudioBuffer_onComplete(id, new AudioBuffer()); #else load_onError(id, message); #end } @:noCompletion private function loadBytes_onComplete(id:String, bytes:Bytes):Void { cachedBytes.set(id, bytes); __assetLoaded(id); } @:noCompletion private function loadFont_onComplete(id:String, font:Font):Void { cachedFonts.set(id, font); __assetLoaded(id); } @:noCompletion private function loadImage_onComplete(id:String, image:Image):Void { cachedImages.set(id, image); __assetLoaded(id); } @:noCompletion private function loadText_onComplete(id:String, text:String):Void { cachedText.set(id, text); __assetLoaded(id); } @:noCompletion private function load_onError(id:String, message:Dynamic):Void { if (message != null && message != "") { promise.error("Error loading asset \"" + id + "\": " + Std.string(message)); } else { promise.error("Error loading asset \"" + id + "\""); } } @:noCompletion private function load_onProgress(id:String, bytesLoaded:Int, bytesTotal:Int):Void { if (bytesLoaded > 0) { var size = sizes.get(id); var percent; if (bytesTotal > 0) { // Use a ratio in case the real bytesTotal is different than our precomputed total percent = (bytesLoaded / bytesTotal); if (percent > 1) percent = 1; bytesLoaded = Math.floor(percent * size); } else if (bytesLoaded > size) { bytesLoaded = size; } if (bytesLoadedCache.exists(id)) { var cache = bytesLoadedCache.get(id); if (bytesLoaded != cache) { this.bytesLoaded += (bytesLoaded - cache); } } else { this.bytesLoaded += bytesLoaded; } bytesLoadedCache.set(id, bytesLoaded); promise.progress(this.bytesLoaded, this.bytesTotal); } } } ================================================ FILE: src/lime/utils/AssetManifest.hx ================================================ package lime.utils; import haxe.io.Path; import haxe.Serializer; import haxe.Unserializer; import lime.app.Future; import lime.utils.Bytes; #if !macro import haxe.Json; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class AssetManifest { public var assets:Array; public var libraryArgs:Array; public var libraryType:String; public var name:String; public var rootPath:String; public var version:Int; public function new() { assets = []; libraryArgs = []; version = 2; } public static function fromBytes(bytes:Bytes, rootPath:String = null):AssetManifest { if (bytes != null) { return parse(bytes.getString(0, bytes.length), rootPath); } else { return null; } } public static function fromFile(path:String, rootPath:String = null):AssetManifest { path = __resolvePath(path); rootPath = __resolveRootPath(rootPath, path); if (path == null) return null; return fromBytes(Bytes.fromFile(path), rootPath); } public static function loadFromBytes(bytes:Bytes, rootPath:String = null):Future { return Future.withValue(fromBytes(bytes, rootPath)); } public static function loadFromFile(path:String, rootPath:String = null):Future { path = __resolvePath(path); rootPath = __resolveRootPath(rootPath, path); if (path == null) return null; return Bytes.loadFromFile(path).then(function(bytes) { return Future.withValue(fromBytes(bytes, rootPath)); }); } public static function parse(data:String, rootPath:String = null):AssetManifest { if (data == null || data == "") return null; #if !macro var manifestData = Json.parse(data); var manifest = new AssetManifest(); if (Reflect.hasField(manifestData, "name")) { manifest.name = manifestData.name; } if (Reflect.hasField(manifestData, "libraryType")) { manifest.libraryType = manifestData.libraryType; } if (Reflect.hasField(manifestData, "libraryArgs")) { manifest.libraryArgs = manifestData.libraryArgs; } if (Reflect.hasField(manifestData, "assets")) { var assets:Dynamic = manifestData.assets; if (Reflect.hasField(manifestData, "version") && manifestData.version <= 2) { manifest.assets = Unserializer.run(assets); } else { manifest.assets = assets; } } if (Reflect.hasField(manifestData, "rootPath")) { manifest.rootPath = manifestData.rootPath; } if (rootPath != null && rootPath != "") { if (manifest.rootPath == null || manifest.rootPath == "") { manifest.rootPath = rootPath; } else { manifest.rootPath = rootPath + "/" + manifest.rootPath; } } return manifest; #else return null; #end } public function serialize():String { #if !macro var manifestData:Dynamic = {}; manifestData.version = version; manifestData.libraryType = libraryType; manifestData.libraryArgs = libraryArgs; manifestData.name = name; manifestData.assets = Serializer.run(assets); manifestData.rootPath = rootPath; return Json.stringify(manifestData); #else return null; #end } private static function __resolvePath(path:String):String { if (path == null) return null; var queryIndex = path.indexOf("?"); var basePath; if (queryIndex > -1) { basePath = path.substr(0, queryIndex); } else { basePath = path; } basePath = StringTools.replace(basePath, "\\", "/"); while (StringTools.endsWith(basePath, "/")) { basePath = basePath.substr(0, basePath.length - 1); } if (StringTools.endsWith(basePath, ".bundle")) { if (queryIndex > -1) { return basePath + "/library.json" + path.substr(queryIndex); } else { return basePath + "/library.json"; } } else { return path; } } private static function __resolveRootPath(rootPath:String, path:String):String { if (rootPath != null) return rootPath; var queryIndex = path.indexOf("?"); if (queryIndex > -1) { rootPath = path.substr(0, queryIndex); } else { rootPath = path; } rootPath = StringTools.replace(rootPath, "\\", "/"); while (StringTools.endsWith(rootPath, "/")) { if (rootPath == "/") return rootPath; rootPath = rootPath.substr(0, rootPath.length - 1); } if (StringTools.endsWith(rootPath, ".bundle")) { return rootPath; } else { return Path.directory(rootPath); } return rootPath; } } ================================================ FILE: src/lime/utils/AssetType.hx ================================================ package lime.utils; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract AssetType(String) to String { var BINARY = "BINARY"; var FONT = "FONT"; var IMAGE = "IMAGE"; var MANIFEST = "MANIFEST"; var MUSIC = "MUSIC"; var SOUND = "SOUND"; var TEMPLATE = "TEMPLATE"; var TEXT = "TEXT"; } ================================================ FILE: src/lime/utils/Assets.hx ================================================ package lime.utils; import haxe.io.Path; import haxe.CallStack; import haxe.Unserializer; import lime.app.Application; import lime.app.Event; import lime.app.Promise; import lime.app.Future; import lime.media.AudioBuffer; import lime.graphics.Image; import lime.text.Font; import lime.utils.Bytes; import lime.utils.Log; #if !macro import haxe.Json; #end /** *

    The Assets class provides a cross-platform interface to access * embedded images, fonts, sounds and other resource files.

    * *

    The contents are populated automatically when an application * is compiled using the Lime command-line tools, based on the * contents of the project file.

    * *

    For most platforms, the assets are included in the same directory * or package as the application, and the paths are handled * automatically. For web content, the assets are preloaded before * the start of the rest of the application.

    */ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:access(lime.utils.AssetLibrary) class Assets { public static var cache:AssetCache = new AssetCache(); public static var onChange = new EventVoid>(); private static var bundlePaths = new Map(); private static var libraries(default, null) = new Map(); private static var libraryPaths = new Map(); public static function exists(id:String, type:AssetType = null):Bool { #if (tools && !display) if (type == null) { type = BINARY; } var symbol = new LibrarySymbol(id); if (symbol.library != null) { return symbol.exists(type); } #end return false; } /** * Gets an instance of a cached or embedded asset * @usage var sound = Assets.getAsset("sound.wav", SOUND); * @param id The ID or asset path for the asset * @return An Asset object, or null. */ public static function getAsset(id:String, type:AssetType, useCache:Bool):Dynamic { #if (tools && !display) if (useCache && cache.enabled) { switch (type) { case BINARY, TEXT: // Not cached useCache = false; case FONT: var font = cache.font.get(id); if (font != null) { return font; } case IMAGE: var image = cache.image.get(id); if (isValidImage(image)) { return image; } case MUSIC, SOUND: var audio = cache.audio.get(id); if (isValidAudio(audio)) { return audio; } case TEMPLATE: throw "Not sure how to get template: " + id; default: return null; } } var symbol = new LibrarySymbol(id); if (symbol.library != null) { if (symbol.exists(type)) { if (symbol.isLocal(type)) { var asset = symbol.library.getAsset(symbol.symbolName, type); if (useCache && cache.enabled) { cache.set(id, type, asset); } return asset; } else { Log.error(type + " asset \"" + id + "\" exists, but only asynchronously"); } } else { Log.error("There is no " + type + " asset with an ID of \"" + id + "\""); } } else { Log.error(__libraryNotFound(symbol.libraryName)); } #end return null; } /** * Gets an instance of an embedded sound * @usage var sound = Assets.getAudioBuffer ("sound.wav"); * @param id The ID or asset path for the sound * @return A new Sound object */ public static function getAudioBuffer(id:String, useCache:Bool = true):AudioBuffer { return cast getAsset(id, SOUND, useCache); } /** * Gets an instance of an embedded binary asset * @usage var bytes = Assets.getBytes("file.zip"); * @param id The ID or asset path for the file * @return A new Bytes object */ public static function getBytes(id:String):Bytes { return cast getAsset(id, BINARY, false); } /** * Gets an instance of an embedded font * @usage var fontName = Assets.getFont("font.ttf").fontName; * @param id The ID or asset path for the font * @return A new Font object */ public static function getFont(id:String, useCache:Bool = true):Font { return getAsset(id, FONT, useCache); } /** * Gets an instance of an embedded bitmap. * * _Note:_ This method may behave differently, depending on the target * platform. On targets that can quickly create a new image synchronously, * every call to `Assets.getImage()` with the same ID will return a new * `Image` instance. However, on other targets where creating images * synchronously is unacceptably slow, or where images may not be created * synchronously and must be created asynchronously, every call to * `Assets.getImage()` with the same ID may return a single, shared `Image` * instance. * * With that in mind, modifying or disposing the contents of the `Image` * returned by `Assets.getImage()` may affect the results of future calls to * Assets.getImage()` on some targets. To access an `Image` instance that * may be modified without affecting future calls to `Assets.getImage()`, * call the `Image` instance's `clone()` method to manually create a copy. * * @usage var bitmap = new Bitmap(Assets.getBitmapData("image.jpg")); * @param id The ID or asset path for the bitmap * @param useCache (Optional) Whether to use BitmapData from the cache(Default: true) * @return A new BitmapData object */ public static function getImage(id:String, useCache:Bool = true):Image { return getAsset(id, IMAGE, useCache); } public static function getLibrary(name:String):AssetLibrary { if (name == null || name == "") { name = "default"; } return libraries.get(name); } /** * Gets the file path (if available) for an asset * @usage var path = Assets.getPath("image.jpg"); * @param id The ID or asset path for the asset * @return The path to the asset (or null) */ public static function getPath(id:String):String { #if (tools && !display) var symbol = new LibrarySymbol(id); if (symbol.library != null) { if (symbol.exists()) { return symbol.library.getPath(symbol.symbolName); } else { Log.error("There is no asset with an ID of \"" + id + "\""); } } else { Log.error(__libraryNotFound(symbol.libraryName)); } #end return null; } /** * Gets an instance of an embedded text asset * @usage var text = Assets.getText("text.txt"); * @param id The ID or asset path for the file * @return A new String object */ public static function getText(id:String):String { return getAsset(id, TEXT, false); } public static function hasLibrary(name:String):Bool { if (name == null || name == "") { name = "default"; } return libraries.exists(name); } public static function isLocal(id:String, type:AssetType = null, useCache:Bool = true):Bool { #if (tools && !display) if (useCache && cache.enabled) { if (cache.exists(id, type)) return true; } var symbol = new LibrarySymbol(id); return symbol.library != null && symbol.isLocal(type); #else return false; #end } private static function isValidAudio(buffer:AudioBuffer):Bool { // TODO: Check disposed return buffer != null; } private static function isValidImage(image:Image):Bool { // TODO: Check disposed return (image != null && image.buffer != null); } public static function list(type:AssetType = null):Array { var items = []; for (library in libraries) { var libraryItems = library.list(type); if (libraryItems != null) { items = items.concat(libraryItems); } } return items; } public static function loadAsset(id:String, type:AssetType, useCache:Bool):Future { #if (tools && !display) if (useCache && cache.enabled) { switch (type) { case BINARY, TEXT: // Not cached useCache = false; case FONT: var font = cache.font.get(id); if (font != null) { return Future.withValue(font); } case IMAGE: var image = cache.image.get(id); if (isValidImage(image)) { return Future.withValue(image); } case MUSIC, SOUND: var audio = cache.audio.get(id); if (isValidAudio(audio)) { return Future.withValue(audio); } case TEMPLATE: throw "Not sure how to get template: " + id; default: return null; } } var symbol = new LibrarySymbol(id); if (symbol.library != null) { if (symbol.exists(type)) { var future = symbol.library.loadAsset(symbol.symbolName, type); if (useCache && cache.enabled) { future.onComplete(function(asset) cache.set(id, type, asset)); } return future; } else { return Future.withError("There is no " + type + " asset with an ID of \"" + id + "\""); } } else { return Future.withError(__libraryNotFound(symbol.libraryName)); } #else return null; #end } public static function loadAudioBuffer(id:String, useCache:Bool = true):Future { return cast loadAsset(id, SOUND, useCache); } public static function loadBytes(id:String):Future { return cast loadAsset(id, BINARY, false); } public static function loadFont(id:String, useCache:Bool = true):Future { return cast loadAsset(id, FONT, useCache); } public static function loadImage(id:String, useCache:Bool = true):Future { return cast loadAsset(id, IMAGE, useCache); } public static function loadLibrary(id:String):Future { var promise = new Promise(); #if (tools && !display && !macro) var library = getLibrary(id); if (library != null) { return library.load(); } var path = id; var rootPath = null; if (bundlePaths.exists(id)) { AssetBundle.loadFromFile(bundlePaths.get(id)).onComplete(function(bundle) { if (bundle == null) { promise.error("Cannot load bundle for library \"" + id + "\""); return; } var library = AssetLibrary.fromBundle(bundle); if (library == null) { promise.error("Cannot open library \"" + id + "\""); } else { libraries.set(id, library); library.onChange.add(onChange.dispatch); promise.completeWith(library.load()); } }).onError(function(_) { promise.error("There is no asset library with an ID of \"" + id + "\""); }); } else { if (libraryPaths.exists(id)) { path = libraryPaths[id]; rootPath = Path.directory(path); } else { if (StringTools.endsWith(path, ".bundle")) { rootPath = path; path += "/library.json"; } else { rootPath = Path.directory(path); } path = __cacheBreak(path); } AssetManifest.loadFromFile(path, rootPath).onComplete(function(manifest) { if (manifest == null) { promise.error("Cannot parse asset manifest for library \"" + id + "\""); return; } var library = AssetLibrary.fromManifest(manifest); if (library == null) { promise.error("Cannot open library \"" + id + "\""); } else { libraries.set(id, library); library.onChange.add(onChange.dispatch); promise.completeWith(library.load()); } }).onError(function(_) { promise.error("There is no asset library with an ID of \"" + id + "\""); }); } #end return promise.future; } public static function loadText(id:String):Future { return cast loadAsset(id, TEXT, false); } public static function registerLibrary(name:String, library:AssetLibrary):Void { if (name == null || name == "") { name = "default"; } if (libraries.exists(name)) { if (libraries.get(name) == library) { return; } else { unloadLibrary(name); } } if (library != null) { library.onChange.add(library_onChange); } libraries.set(name, library); } public static function unloadLibrary(name:String):Void { removeLibrary(name, true); } public static function removeLibrary(name:String, unload:Bool = true):Void { #if (tools && !display) if (name == null || name == "") { name = "default"; } var library = libraries.get(name); if (library != null) { cache.clear(name + ":"); library.onChange.remove(library_onChange); if (unload) { library.unload(); } } libraries.remove(name); #end } @:noCompletion private static function __cacheBreak(path:String):String { #if web if (cache.version > 0) { if (path.indexOf("?") > -1) { path += "&" + cache.version; } else { path += "?" + cache.version; } } #end return path; } @:noCompletion private static function __libraryNotFound(name:String):String { if (name == null || name == "") { name = "default"; } if (Application.current != null && Application.current.preloader != null && !Application.current.preloader.complete) { return "There is no asset library named \"" + name + "\", or it is not yet preloaded"; } else { return "There is no asset library named \"" + name + "\""; } } // Event Handlers @:noCompletion private static function library_onChange():Void { cache.clear(); onChange.dispatch(); } } #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end private class LibrarySymbol { public var library(default, null):AssetLibrary; public var libraryName(default, null):String; public var symbolName(default, null):String; public inline function new(id:String) { var colonIndex = id.indexOf(":"); libraryName = id.substring(0, colonIndex); symbolName = id.substring(colonIndex + 1); library = Assets.getLibrary(libraryName); } public inline function isLocal(?type) return library.isLocal(symbolName, type); public inline function exists(?type) return library.exists(symbolName, type); } ================================================ FILE: src/lime/utils/BytePointer.hx ================================================ package lime.utils; import haxe.io.BytesData; import haxe.io.Bytes; import lime.utils.Bytes as LimeBytes; @:access(haxe.io.Bytes) @:access(lime.utils.BytePointerData) @:forward() @:transitive abstract BytePointer(BytePointerData) from BytePointerData to BytePointerData { public inline function new(bytes:Bytes = null, offset:Int = 0):Void { this = new BytePointerData(bytes, offset); } public function set(?bytes:Bytes, ?bufferView:ArrayBufferView, ?buffer:ArrayBuffer, ?offset:Int):Void { if (buffer != null) { #if js bytes = Bytes.ofData(cast buffer); #else bytes = buffer; #end } if (bytes != null || bufferView == null) { this.bytes = bytes; this.offset = offset != null ? offset : 0; } else { #if js this.bytes = Bytes.ofData(cast bufferView.buffer); #else this.bytes = bufferView.buffer; #end this.offset = offset != null ? bufferView.byteOffset + offset : bufferView.byteOffset; } } @:arrayAccess @:noCompletion private inline function __arrayGet(index:Int):Int { return (this.bytes != null) ? this.bytes.get(index + this.offset) : 0; } @:arrayAccess @:noCompletion private inline function __arraySet(index:Int, value:Int):Int { if (this.bytes == null) this.bytes.set(index + this.offset, value); return value; } @:from @:noCompletion public static function fromArrayBufferView(arrayBufferView:ArrayBufferView):BytePointer { if (arrayBufferView == null) return null; #if (js && !doc_gen) return new BytePointerData(Bytes.ofData(arrayBufferView.buffer), arrayBufferView.byteOffset); #else return new BytePointerData((arrayBufferView.buffer : Bytes), arrayBufferView.byteOffset); #end } @:from @:noCompletion public static function fromArrayBuffer(buffer:ArrayBuffer):BytePointer { if (buffer == null) return null; #if (js && !doc_gen) return new BytePointerData(Bytes.ofData(buffer), 0); #else return new BytePointerData((buffer : Bytes), 0); #end } @:from @:noCompletion public static function fromBytes(bytes:Bytes):BytePointer { return new BytePointerData(bytes, 0); } @:from @:noCompletion public static function fromBytesData(bytesData:BytesData):BytePointer { if (bytesData == null) return new BytePointerData(null, 0); else return new BytePointerData(Bytes.ofData(bytesData), 0); } public static function fromFile(path:String):BytePointer { return new BytePointerData(LimeBytes.fromFile(path), 0); } @:from @:noCompletion public static function fromLimeBytes(bytes:LimeBytes):BytePointer { return new BytePointerData(bytes, 0); } @:to @:noCompletion public static function toUInt8Array(bytePointer:BytePointer):UInt8Array { #if (js && !doc_gen) return new UInt8Array(bytePointer.bytes.getData(), Std.int(bytePointer.offset / 8)); #else return new UInt8Array(bytePointer.bytes, Std.int(bytePointer.offset / 8)); #end } @:to @:noCompletion public static function toUInt8ClampedArray(bytePointer:BytePointer):UInt8ClampedArray { if (bytePointer == null || bytePointer.bytes == null) return null; #if (js && !doc_gen) return new UInt8ClampedArray(bytePointer.bytes.getData(), Std.int(bytePointer.offset / 8)); #else return new UInt8ClampedArray(bytePointer.bytes, Std.int(bytePointer.offset / 8)); #end } @:to @:noCompletion public static function toInt8Array(bytePointer:BytePointer):Int8Array { if (bytePointer == null || bytePointer.bytes == null) return null; #if (js && !doc_gen) return new Int8Array(bytePointer.bytes.getData(), Std.int(bytePointer.offset / 8)); #else return new Int8Array(bytePointer.bytes, Std.int(bytePointer.offset / 8)); #end } @:to @:noCompletion public static function toUInt16Array(bytePointer:BytePointer):UInt16Array { if (bytePointer == null || bytePointer.bytes == null) return null; #if (js && !doc_gen) return new UInt16Array(bytePointer.bytes.getData(), Std.int(bytePointer.offset / 16)); #else return new UInt16Array(bytePointer.bytes, Std.int(bytePointer.offset / 16)); #end } @:to @:noCompletion public static function toInt16Array(bytePointer:BytePointer):Int16Array { if (bytePointer == null || bytePointer.bytes == null) return null; #if (js && !doc_gen) return new Int16Array(bytePointer.bytes.getData(), Std.int(bytePointer.offset / 16)); #else return new Int16Array(bytePointer.bytes, Std.int(bytePointer.offset / 16)); #end } @:to @:noCompletion public static function toUInt32Array(bytePointer:BytePointer):UInt32Array { if (bytePointer == null || bytePointer.bytes == null) return null; #if (js && !doc_gen) return new UInt32Array(bytePointer.bytes.getData(), Std.int(bytePointer.offset / 32)); #else return new UInt32Array(bytePointer.bytes, Std.int(bytePointer.offset / 32)); #end } @:to @:noCompletion public static function toInt32Array(bytePointer:BytePointer):Int32Array { if (bytePointer == null || bytePointer.bytes == null) return null; #if (js && !doc_gen) return new Int32Array(bytePointer.bytes.getData(), Std.int(bytePointer.offset / 32)); #else return new Int32Array(bytePointer.bytes, Std.int(bytePointer.offset / 32)); #end } @:to @:noCompletion public static function toFloat32Array(bytePointer:BytePointer):Float32Array { if (bytePointer == null || bytePointer.bytes == null) return null; #if (js && !doc_gen) return new Float32Array(bytePointer.bytes.getData(), Std.int(bytePointer.offset / 32)); #else return new Float32Array(bytePointer.bytes, Std.int(bytePointer.offset / 32)); #end } @:to @:noCompletion public static function toFloat64Array(bytePointer:BytePointer):Float64Array { if (bytePointer == null || bytePointer.bytes == null) return null; #if (js && !doc_gen) return new Float64Array(bytePointer.bytes.getData(), Std.int(bytePointer.offset / 64)); #else return new Float64Array(bytePointer.bytes, Std.int(bytePointer.offset / 64)); #end } } @:noCompletion @:dox(hide) class BytePointerData { public var bytes:Bytes; public var offset:Int; public function new(bytes:Bytes, offset:Int) { this.bytes = bytes; this.offset = offset; } } ================================================ FILE: src/lime/utils/Bytes.hx ================================================ package lime.utils; import haxe.io.Bytes as HaxeBytes; import haxe.io.BytesData; import lime._internal.backend.native.NativeCFFI; import lime._internal.format.Deflate; import lime._internal.format.GZip; import lime._internal.format.LZMA; import lime._internal.format.Zlib; import lime.app.Future; import lime.net.HTTPRequest; @:access(haxe.io.Bytes) @:access(lime._internal.backend.native.NativeCFFI) @:forward() @:transitive abstract Bytes(HaxeBytes) from HaxeBytes to HaxeBytes { public function new(length:Int, bytesData:BytesData) { #if js this = new HaxeBytes(bytesData); // bytesData may have extra bytes. See https://github.com/HaxeFoundation/haxe/issues/8974 this.length = length; #elseif hl this = new HaxeBytes(bytesData, length); #else this = new HaxeBytes(length, bytesData); #end } public static function alloc(length:Int):Bytes { #if hl if (length == 0) return new Bytes(0, null); #end return HaxeBytes.alloc(length); } public function compress(algorithm:CompressionAlgorithm):Bytes { switch (algorithm) { case DEFLATE: return Deflate.compress(this); case GZIP: return GZip.compress(this); case LZMA: return LZMA.compress(this); case ZLIB: return Zlib.compress(this); default: return null; } } public function decompress(algorithm:CompressionAlgorithm):Bytes { switch (algorithm) { case DEFLATE: return Deflate.decompress(this); case GZIP: return GZip.decompress(this); case LZMA: return LZMA.decompress(this); case ZLIB: return Zlib.decompress(this); default: return null; } } public static inline function fastGet(b:BytesData, pos:Int):Int { return HaxeBytes.fastGet(b, pos); } public static function fromBytes(bytes:haxe.io.Bytes):Bytes { if (bytes == null) return null; return new Bytes(bytes.length, bytes.getData()); } public static function fromFile(path:String):Bytes { #if (sys && lime_cffi && !macro) #if !cs var bytes = Bytes.alloc(0); NativeCFFI.lime_bytes_read_file(path, bytes); if (bytes.length > 0) return bytes; #else var data:Dynamic = NativeCFFI.lime_bytes_read_file(path, null); if (data != null) return new Bytes(data.length, data.b); #end #end return null; } public static function loadFromBytes(bytes:haxe.io.Bytes):Future { return Future.withValue(fromBytes(bytes)); } public static function loadFromFile(path:String):Future { var request = new HTTPRequest(); return request.load(path); } public static function ofData(b:BytesData):Bytes { var bytes = HaxeBytes.ofData(b); return new Bytes(bytes.length, bytes.getData()); } public static function ofString(s:String):Bytes { var bytes = HaxeBytes.ofString(s); return new Bytes(bytes.length, bytes.getData()); } #if (lime_cffi && !macro) public static function __fromNativePointer(data:Dynamic, length:Int):Bytes { var bytes = Bytes.alloc(0); return NativeCFFI.lime_bytes_from_data_pointer(data, length, bytes); } #end } ================================================ FILE: src/lime/utils/CompressionAlgorithm.hx ================================================ package lime.utils; enum CompressionAlgorithm { DEFLATE; GZIP; LZMA; ZLIB; } ================================================ FILE: src/lime/utils/DataPointer.hx ================================================ package lime.utils; import haxe.io.BytesData; import haxe.io.Bytes; import lime.system.CFFIPointer; import lime.utils.Bytes as LimeBytes; #if cpp import cpp.Char; import cpp.Pointer; import cpp.UInt8; #end #if (lime_cffi && !macro) import lime._internal.backend.native.NativeCFFI; @:access(lime._internal.backend.native.NativeCFFI) #end @:access(haxe.io.Bytes) @:transitive abstract DataPointer(DataPointerType) to DataPointerType { @:noCompletion private function new(data:#if !doc_gen DataPointerType #else Dynamic #end) { this = data; } #if (lime_cffi && !js && !doc_gen) @:from @:noCompletion private static function fromInt(value:Int):DataPointer { #if (lime_cffi && !macro) var float:Float = value; return new DataPointer(float); #else return cast value; #end } #else @:from @:noCompletion private static function fromFloat(value:Float):DataPointer { return cast value; } #end #if (cpp && !cppia && !doc_gen) #if (haxe_ver < 4) @:from @:noCompletion public static inline function fromCharPointer(pointer:Pointer):DataPointer { return untyped __cpp__('(uintptr_t){0}', pointer.ptr); } @:from @:noCompletion public static inline function fromUint8Pointer(pointer:Pointer):DataPointer { return untyped __cpp__('(uintptr_t){0}', pointer.ptr); } #end @:generic @:from @:noCompletion public static inline function fromPointer(pointer:Pointer):DataPointer { return untyped __cpp__('(uintptr_t){0}', pointer.ptr); } #end @:from @:noCompletion public static function fromBytesPointer(pointer:BytePointer):DataPointer { #if (cpp && !doc_gen) if (pointer == null || pointer.bytes == null) return cast 0; return Pointer.arrayElem(pointer.bytes.b, 0).add(pointer.offset); #elseif (lime_cffi && !macro) if (pointer == null || pointer.bytes == null) return cast 0; var data:Float = NativeCFFI.lime_bytes_get_data_pointer_offset(pointer.bytes, pointer.offset); return new DataPointer(data); #else return 0; #end } @:from @:noCompletion public static function fromArrayBufferView(arrayBufferView:ArrayBufferView):DataPointer { #if (cpp && !doc_gen) if (arrayBufferView == null) return cast 0; return Pointer.arrayElem(arrayBufferView.buffer.b, 0).add(arrayBufferView.byteOffset); #elseif (lime_cffi && !js && !macro) if (arrayBufferView == null) return cast 0; var data:Float = NativeCFFI.lime_bytes_get_data_pointer_offset(arrayBufferView.buffer, arrayBufferView.byteOffset); return new DataPointer(data); #else return 0; #end } @:from @:noCompletion public static function fromArrayBuffer(buffer:ArrayBuffer):DataPointer { #if (lime_cffi && !macro) if (buffer == null) return cast 0; return fromBytes(buffer); #else return 0; #end } @:from @:noCompletion public static function fromBytes(bytes:Bytes):DataPointer { #if (cpp && !doc_gen) if (bytes == null) return cast 0; return Pointer.arrayElem(bytes.b, 0); #elseif (lime_cffi && !macro) if (bytes == null) return cast 0; var data:Float = NativeCFFI.lime_bytes_get_data_pointer(bytes); return new DataPointer(data); #else return 0; #end } @:from @:noCompletion public static function fromBytesData(bytesData:BytesData):DataPointer { #if (lime_cffi && !macro) if (bytesData == null) return cast 0; return fromBytes(Bytes.ofData(bytesData)); #else return 0; #end } @:from @:noCompletion public static function fromLimeBytes(bytes:LimeBytes):DataPointer { return fromBytes(bytes); } #if !lime_doc_gen @:from @:noCompletion public static function fromCFFIPointer(pointer:CFFIPointer):DataPointer { #if (lime_cffi && !macro) if (pointer == null) return cast 0; return new DataPointer(pointer.get()); #else return 0; #end } #end public static function fromFile(path:String):DataPointer { #if (lime_cffi && !macro) return fromBytes(LimeBytes.fromFile(path)); #else return 0; #end } private static function __withOffset(data:DataPointer, offset:Int):DataPointer { #if (lime_cffi && !macro) if (data == 0) return cast 0; var data:Float = NativeCFFI.lime_data_pointer_offset(data, offset); return new DataPointer(data); #else return 0; #end } @:noCompletion @:op(A == B) private static inline function equals(a:DataPointer, b:Int):Bool { return (a : Float) == b; } @:noCompletion @:op(A == B) private static inline function equalsPointer(a:DataPointer, b:DataPointer):Bool { return (a : Float) == (b : Float); } @:noCompletion @:op(A > B) private static inline function greaterThan(a:DataPointer, b:Int):Bool { return (a : Float) > b; } #if !lime_doc_gen @:noCompletion @:op(A > B) private static inline function greaterThanPointer(a:DataPointer, b:CFFIPointer):Bool { return (a : Float) > b; } #end @:noCompletion @:op(A >= B) private static inline function greaterThanOrEqual(a:DataPointer, b:Int):Bool { return (a : Float) >= b; } #if !lime_doc_gen @:noCompletion @:op(A >= B) private static inline function greaterThanOrEqualPointer(a:DataPointer, b:CFFIPointer):Bool { return (a : Float) >= b; } #end @:noCompletion @:op(A < B) private static inline function lessThan(a:DataPointer, b:Int):Bool { return (a : Float) < b; } #if !lime_doc_gen @:noCompletion @:op(A < B) private static inline function lessThanPointer(a:DataPointer, b:CFFIPointer):Bool { return (a : Float) < b; } #end @:noCompletion @:op(A <= B) private static inline function lessThanOrEqual(a:DataPointer, b:Int):Bool { return (a : Float) <= b; } #if !lime_doc_gen @:noCompletion @:op(A <= B) private static inline function lessThanOrEqualPointer(a:DataPointer, b:CFFIPointer):Bool { return (a : Float) <= b; } #end @:noCompletion @:op(A != B) private static inline function notEquals(a:DataPointer, b:Int):Bool { return (a : Float) != b; } @:noCompletion @:op(A != B) private static inline function notEqualsPointer(a:DataPointer, b:DataPointer):Bool { return (a : Float) != (b : Float); } @:noCompletion @:op(A + B) private static inline function plus(a:DataPointer, b:Int):DataPointer { return __withOffset(a, b); } @:noCompletion @:op(A + B) private static inline function plusPointer(a:DataPointer, b:DataPointer):DataPointer { return __withOffset(a, Std.int((b : Float))); } @:noCompletion @:op(A - B) private static inline function minus(a:DataPointer, b:Int):DataPointer { return __withOffset(a, -b); } @:noCompletion @:op(A - B) private static inline function minusPointer(a:DataPointer, b:DataPointer):DataPointer { return __withOffset(a, -Std.int((b : Float))); } } #if (lime_cffi && !js) private typedef DataPointerType = Float; #else private typedef DataPointerType = Int; #end ================================================ FILE: src/lime/utils/DataView.hx ================================================ package lime.utils; import lime.utils.ArrayBufferView; #if (js && !doc_gen) #if haxe4 import js.lib.DataView as JSDataView; #else import js.html.DataView as JSDataView; #end @:forward abstract DataView(JSDataView) from JSDataView to JSDataView to ArrayBufferView { public inline function new(buffer:ArrayBuffer, byteOffset:Null = null, byteLength:Null = null) { if (byteOffset != null && byteLength == null) this = new JSDataView(buffer, byteOffset); else if (byteOffset != null && byteLength != null) this = new JSDataView(buffer, byteOffset, byteLength); else this = new JSDataView(buffer); } #if !no_typedarray_inline inline #end public function getInt8(byteOffset:Int):Int { return this.getInt8(byteOffset); } #if !no_typedarray_inline inline #end public function getInt16(byteOffset:Int, ?littleEndian:Bool = true):Int { return this.getInt16(byteOffset, littleEndian); } #if !no_typedarray_inline inline #end public function getInt32(byteOffset:Int, ?littleEndian:Bool = true):Int { return this.getInt32(byteOffset, littleEndian); } #if !no_typedarray_inline inline #end public function getUint8(byteOffset:Int):UInt { return this.getUint8(byteOffset); } #if !no_typedarray_inline inline #end public function getUint16(byteOffset:Int, ?littleEndian:Bool = true):UInt { return this.getUint16(byteOffset, littleEndian); } #if !no_typedarray_inline inline #end public function getUint32(byteOffset:Int, ?littleEndian:Bool = true):UInt { return this.getUint32(byteOffset, littleEndian); } #if !no_typedarray_inline inline #end public function getFloat32(byteOffset:Int, ?littleEndian:Bool = true):Float { return this.getFloat32(byteOffset, littleEndian); } #if !no_typedarray_inline inline #end public function getFloat64(byteOffset:Int, ?littleEndian:Bool = true):Float { return this.getFloat64(byteOffset, littleEndian); } #if !no_typedarray_inline inline #end public function setInt8(byteOffset:Int, value:Int) { this.setInt8(byteOffset, value); } #if !no_typedarray_inline inline #end public function setInt16(byteOffset:Int, value:Int, ?littleEndian:Bool = true) { this.setInt16(byteOffset, value, littleEndian); } #if !no_typedarray_inline inline #end public function setInt32(byteOffset:Int, value:Int, ?littleEndian:Bool = true) { this.setInt32(byteOffset, value, littleEndian); } #if !no_typedarray_inline inline #end public function setUint8(byteOffset:Int, value:UInt) { this.setUint8(byteOffset, value); } #if !no_typedarray_inline inline #end public function setUint16(byteOffset:Int, value:UInt, ?littleEndian:Bool = true) { this.setUint16(byteOffset, value, littleEndian); } #if !no_typedarray_inline inline #end public function setUint32(byteOffset:Int, value:UInt, ?littleEndian:Bool = true) { this.setUint32(byteOffset, value, littleEndian); } #if !no_typedarray_inline inline #end public function setFloat32(byteOffset:Int, value:Float, ?littleEndian:Bool = true) { this.setFloat32(byteOffset, value, littleEndian); } #if !no_typedarray_inline inline #end public function setFloat64(byteOffset:Int, value:Float, ?littleEndian:Bool = true) { this.setFloat64(byteOffset, value, littleEndian); } } #else import lime.utils.ArrayBuffer; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class DataView { public var buffer:ArrayBuffer; public var byteLength:Int; public var byteOffset:Int; #if !no_typedarray_inline inline #end public function new(buffer:ArrayBuffer, byteOffset:Int = 0, byteLength:Null = null) { if (byteOffset < 0) throw TAError.RangeError; var bufferByteLength = buffer.length; var viewByteLength = bufferByteLength - byteOffset; if (byteOffset > bufferByteLength) throw TAError.RangeError; if (byteLength != null) { if (byteLength < 0) throw TAError.RangeError; viewByteLength = byteLength; if (byteOffset + viewByteLength > bufferByteLength) throw TAError.RangeError; } this.buffer = buffer; this.byteLength = viewByteLength; this.byteOffset = byteOffset; } #if !no_typedarray_inline inline #end public function getInt8(byteOffset:Int):Int { return ArrayBufferIO.getInt8(buffer, byteOffset); } #if !no_typedarray_inline inline #end public function getInt16(byteOffset:Int, ?littleEndian:Bool = true):Int { return littleEndian ? ArrayBufferIO.getInt16(buffer, byteOffset) : // little endian ArrayBufferIO.getInt16_BE(buffer, byteOffset); // big endian } #if !no_typedarray_inline inline #end public function getInt32(byteOffset:Int, ?littleEndian:Bool = true):Int { return littleEndian ? ArrayBufferIO.getInt32(buffer, byteOffset) : // little endian ArrayBufferIO.getInt32_BE(buffer, byteOffset); // big endian } #if !no_typedarray_inline inline #end public function getUint8(byteOffset:Int):UInt { return ArrayBufferIO.getUint8(buffer, byteOffset); } #if !no_typedarray_inline inline #end public function getUint16(byteOffset:Int, ?littleEndian:Bool = true):UInt { return littleEndian ? ArrayBufferIO.getUint16(buffer, byteOffset) : // little endian ArrayBufferIO.getUint16_BE(buffer, byteOffset); // big endian } #if !no_typedarray_inline inline #end public function getUint32(byteOffset:Int, ?littleEndian:Bool = true):UInt { return littleEndian ? ArrayBufferIO.getUint32(buffer, byteOffset) : // little endian ArrayBufferIO.getUint32_BE(buffer, byteOffset); // big endian } #if !no_typedarray_inline inline #end public function getFloat32(byteOffset:Int, ?littleEndian:Bool = true):Float { return littleEndian ? ArrayBufferIO.getFloat32(buffer, byteOffset) : // little endian ArrayBufferIO.getFloat32_BE(buffer, byteOffset); // big endian } #if !no_typedarray_inline inline #end public function getFloat64(byteOffset:Int, ?littleEndian:Bool = true):Float { return littleEndian ? ArrayBufferIO.getFloat64(buffer, byteOffset) : // little endian ArrayBufferIO.getFloat64_BE(buffer, byteOffset); // big endian } #if !no_typedarray_inline inline #end public function setInt8(byteOffset:Int, value:Int) { ArrayBufferIO.setInt8(buffer, byteOffset, value); } #if !no_typedarray_inline inline #end public function setInt16(byteOffset:Int, value:Int, ?littleEndian:Bool = true) { littleEndian ? ArrayBufferIO.setInt16(buffer, byteOffset, value) : ArrayBufferIO.setInt16_BE(buffer, byteOffset, value); } #if !no_typedarray_inline inline #end public function setInt32(byteOffset:Int, value:Int, ?littleEndian:Bool = true) { littleEndian ? ArrayBufferIO.setInt32(buffer, byteOffset, value) : ArrayBufferIO.setInt32_BE(buffer, byteOffset, value); } #if !no_typedarray_inline inline #end public function setUint8(byteOffset:Int, value:UInt) { ArrayBufferIO.setUint8(buffer, byteOffset, value); } #if !no_typedarray_inline inline #end public function setUint16(byteOffset:Int, value:UInt, ?littleEndian:Bool = true) { littleEndian ? ArrayBufferIO.setUint16(buffer, byteOffset, value) : ArrayBufferIO.setUint16_BE(buffer, byteOffset, value); } #if !no_typedarray_inline inline #end public function setUint32(byteOffset:Int, value:UInt, ?littleEndian:Bool = true) { littleEndian ? ArrayBufferIO.setUint32(buffer, byteOffset, value) : ArrayBufferIO.setUint32_BE(buffer, byteOffset, value); } #if !no_typedarray_inline inline #end public function setFloat32(byteOffset:Int, value:Float, ?littleEndian:Bool = true) { littleEndian ? ArrayBufferIO.setFloat32(buffer, byteOffset, value) : ArrayBufferIO.setFloat32_BE(buffer, byteOffset, value); } #if !no_typedarray_inline inline #end public function setFloat64(byteOffset:Int, value:Float, ?littleEndian:Bool = true) { littleEndian ? ArrayBufferIO.setFloat64(buffer, byteOffset, value) : ArrayBufferIO.setFloat64_BE(buffer, byteOffset, value); } } #end // !js ================================================ FILE: src/lime/utils/Float32Array.hx ================================================ package lime.utils; #if (js && !doc_gen) #if haxe4 import js.lib.Float32Array as JSFloat32Array; import js.lib.Uint8Array as JSUInt8Array; #else import js.html.Float32Array as JSFloat32Array; import js.html.Uint8Array as JSUInt8Array; #end @:forward @:arrayAccess @:transitive abstract Float32Array(JSFloat32Array) from JSFloat32Array to JSFloat32Array { @:to function toArrayBufferView():ArrayBufferView return this; public inline static var BYTES_PER_ELEMENT:Int = 4; @:generic public inline function new(?elements:Int, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?buffer:ArrayBuffer, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new JSFloat32Array(elements); } else if (array != null) { this = new JSFloat32Array(untyped array); #if (openfl && commonjs) } else if (vector != null) { this = new JSFloat32Array(untyped (vector)); #elseif openfl } else if (vector != null) { this = new JSFloat32Array(untyped untyped (vector).__array); #end } else if (view != null) { this = new JSFloat32Array(untyped view); } else if (buffer != null) { if (len == null) { this = new JSFloat32Array(buffer, byteoffset); } else { this = new JSFloat32Array(buffer, byteoffset, len); } } else { this = null; } } @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __set(idx:Int, val:Float):Float return this[idx] = val; @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __get(idx:Int):Float return this[idx]; // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Float32Array { if (byteOffset == null) return new JSFloat32Array(cast bytes.getData()); if (len == null) return new JSFloat32Array(cast bytes.getData(), byteOffset); return new JSFloat32Array(cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return @:privateAccess new haxe.io.Bytes(cast new JSUInt8Array(this.buffer)); } inline function toString() return this != null ? 'Float32Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #else import lime.utils.ArrayBuffer; import lime.utils.ArrayBufferView; @:transitive @:forward abstract Float32Array(ArrayBufferView) from ArrayBufferView to ArrayBufferView { public inline static var BYTES_PER_ELEMENT:Int = 4; public var length(get, never):Int; #if (haxe_ver < 4.2) @:generic #end public inline function new(?elements:Int, ?buffer:ArrayBuffer, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new ArrayBufferView(elements, Float32); } else if (array != null) { this = new ArrayBufferView(0, Float32).initArray(array); #if openfl } else if (vector != null) { this = new ArrayBufferView(0, Float32).initArray(untyped (vector).__array); #end } else if (view != null) { this = new ArrayBufferView(0, Float32).initTypedArray(view); } else if (buffer != null) { this = new ArrayBufferView(0, Float32).initBuffer(buffer, byteoffset, len); } else { throw "Invalid constructor arguments for Float32Array"; } } // Public API public inline function subarray(begin:Int, end:Null = null):Float32Array return this.subarray(begin, end); // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Float32Array { return new Float32Array(bytes, byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return this.buffer; } // Internal inline function toString() return this != null ? 'Float32Array [byteLength:${this.byteLength}, length:${this.length}]' : null; #if (haxe_ver >= 4.0) extern #else @:extern #end inline function get_length() return this.length; @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __get(idx:Int):Float { return ArrayBufferIO.getFloat32(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT)); } @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __set(idx:Int, val:Float):Float { ArrayBufferIO.setFloat32(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT), val); return val; } } #end // !js ================================================ FILE: src/lime/utils/Float64Array.hx ================================================ package lime.utils; #if (js && !doc_gen) #if haxe4 import js.lib.Float64Array as JSFloat64Array; import js.lib.Uint8Array as JSUInt8Array; #else import js.html.Float64Array as JSFloat64Array; import js.html.Uint8Array as JSUInt8Array; #end @:forward @:transitive abstract Float64Array(JSFloat64Array) from JSFloat64Array to JSFloat64Array { @:to inline function toArrayBufferView():ArrayBufferView return this; public inline static var BYTES_PER_ELEMENT:Int = 8; @:generic public inline function new(?elements:Int, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?buffer:ArrayBuffer, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new JSFloat64Array(elements); } else if (array != null) { this = new JSFloat64Array(untyped array); #if (openfl && commonjs) } else if (vector != null) { this = new JSFloat64Array(untyped (vector)); #elseif openfl } else if (vector != null) { this = new JSFloat64Array(untyped untyped (vector).__array); #end } else if (view != null) { this = new JSFloat64Array(untyped view); } else if (buffer != null) { if (len == null) { this = new JSFloat64Array(buffer, byteoffset); } else { this = new JSFloat64Array(buffer, byteoffset, len); } } else { this = null; } } @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __set(idx:Int, val:Float):Float return this[idx] = val; @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __get(idx:Int):Float return this[idx]; // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Float64Array { if (byteOffset == null) return new JSFloat64Array(cast bytes.getData()); if (len == null) return new JSFloat64Array(cast bytes.getData(), byteOffset); return new JSFloat64Array(cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return @:privateAccess new haxe.io.Bytes(cast new JSUInt8Array(this.buffer)); } function toString() return this != null ? 'Float64Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #else import lime.utils.ArrayBufferView; @:transitive @:forward abstract Float64Array(ArrayBufferView) from ArrayBufferView to ArrayBufferView { public inline static var BYTES_PER_ELEMENT:Int = 8; public var length(get, never):Int; #if (haxe_ver < 4.2) @:generic #end public inline function new(?elements:Int, ?buffer:ArrayBuffer, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new ArrayBufferView(elements, Float64); } else if (array != null) { this = new ArrayBufferView(0, Float64).initArray(array); #if openfl } else if (vector != null) { this = new ArrayBufferView(0, Float64).initArray(untyped (vector).__array); #end } else if (view != null) { this = new ArrayBufferView(0, Float64).initTypedArray(view); } else if (buffer != null) { this = new ArrayBufferView(0, Float64).initBuffer(buffer, byteoffset, len); } else { throw "Invalid constructor arguments for Float64Array"; } } // Public API public inline function subarray(begin:Int, end:Null = null):Float64Array return this.subarray(begin, end); // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Float64Array { return new Float64Array(bytes, byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return this.buffer; } // Internal inline function get_length() return this.length; @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __get(idx:Int):Float { return ArrayBufferIO.getFloat64(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT)); } @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __set(idx:Int, val:Float):Float { ArrayBufferIO.setFloat64(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT), val); return val; } inline function toString() return this != null ? 'Float64Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #end // !js ================================================ FILE: src/lime/utils/Int16Array.hx ================================================ package lime.utils; #if (js && !doc_gen) #if haxe4 import js.lib.Int16Array as JSInt16Array; import js.lib.Uint8Array as JSUInt8Array; #else import js.html.Int16Array as JSInt16Array; import js.html.Uint8Array as JSUInt8Array; #end @:forward @:transitive abstract Int16Array(JSInt16Array) from JSInt16Array to JSInt16Array { @:to inline function toArrayBufferView():ArrayBufferView return this; public inline static var BYTES_PER_ELEMENT:Int = 2; @:generic public inline function new(?elements:Int, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?buffer:ArrayBuffer, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new JSInt16Array(elements); } else if (array != null) { this = new JSInt16Array(untyped array); #if (openfl && commonjs) } else if (vector != null) { this = new JSInt16Array(untyped (vector)); #elseif openfl } else if (vector != null) { this = new JSInt16Array(untyped untyped (vector).__array); #end } else if (view != null) { this = new JSInt16Array(untyped view); } else if (buffer != null) { if (len == null) { this = new JSInt16Array(buffer, byteoffset); } else { this = new JSInt16Array(buffer, byteoffset, len); } } else { this = null; } } @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __set(idx:Int, val:Int):Int return this[idx] = val; @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __get(idx:Int):Int return this[idx]; // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Int16Array { if (byteOffset == null) return new JSInt16Array(cast bytes.getData()); if (len == null) return new JSInt16Array(cast bytes.getData(), byteOffset); return new JSInt16Array(cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return @:privateAccess new haxe.io.Bytes(cast new JSUInt8Array(this.buffer)); } inline function toString() return this != null ? 'Int16Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #else import lime.utils.ArrayBufferView; @:transitive @:forward abstract Int16Array(ArrayBufferView) from ArrayBufferView to ArrayBufferView { public inline static var BYTES_PER_ELEMENT:Int = 2; public var length(get, never):Int; #if (haxe_ver < 4.2) @:generic #end public inline function new(?elements:Int, ?buffer:ArrayBuffer, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new ArrayBufferView(elements, Int16); } else if (array != null) { this = new ArrayBufferView(0, Int16).initArray(array); #if openfl } else if (vector != null) { this = new ArrayBufferView(0, Int16).initArray(untyped (vector).__array); #end } else if (view != null) { this = new ArrayBufferView(0, Int16).initTypedArray(view); } else if (buffer != null) { this = new ArrayBufferView(0, Int16).initBuffer(buffer, byteoffset, len); } else { throw "Invalid constructor arguments for Int16Array"; } } // Public API public inline function subarray(begin:Int, end:Null = null):Int16Array return this.subarray(begin, end); // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Int16Array { return new Int16Array(bytes, byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return this.buffer; } // Internal inline function get_length() return this.length; @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __get(idx:Int) { return ArrayBufferIO.getInt16(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT)); } @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __set(idx:Int, val:Int) { ArrayBufferIO.setInt16(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT), val); return val; } inline function toString() return this != null ? 'Int16Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #end // !js ================================================ FILE: src/lime/utils/Int32Array.hx ================================================ package lime.utils; #if (js && !doc_gen) #if haxe4 import js.lib.Int32Array as JSInt32Array; import js.lib.Uint8Array as JSUInt8Array; #else import js.html.Int32Array as JSInt32Array; import js.html.Uint8Array as JSUInt8Array; #end @:forward @:transitive abstract Int32Array(JSInt32Array) from JSInt32Array to JSInt32Array { @:to inline function toArrayBufferView():ArrayBufferView return this; public inline static var BYTES_PER_ELEMENT:Int = 4; @:generic public inline function new(?elements:Int, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?buffer:ArrayBuffer, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new JSInt32Array(elements); } else if (array != null) { this = new JSInt32Array(untyped array); #if (openfl && commonjs) } else if (vector != null) { this = new JSInt32Array(untyped (vector)); #elseif openfl } else if (vector != null) { this = new JSInt32Array(untyped untyped (vector).__array); #end } else if (view != null) { this = new JSInt32Array(untyped view); } else if (buffer != null) { if (len == null) { this = new JSInt32Array(buffer, byteoffset); } else { this = new JSInt32Array(buffer, byteoffset, len); } } else { this = null; } } @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __set(idx:Int, val:Int):Int return this[idx] = val; @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __get(idx:Int):Int return this[idx]; // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Int32Array { if (byteOffset == null) return new JSInt32Array(cast bytes.getData()); if (len == null) return new JSInt32Array(cast bytes.getData(), byteOffset); return new JSInt32Array(cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return @:privateAccess new haxe.io.Bytes(cast new JSUInt8Array(this.buffer)); } inline function toString() return this != null ? 'Int32Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #else import lime.utils.ArrayBufferView; @:transitive @:forward abstract Int32Array(ArrayBufferView) from ArrayBufferView to ArrayBufferView { public inline static var BYTES_PER_ELEMENT:Int = 4; public var length(get, never):Int; #if (haxe_ver < 4.2) @:generic #end public inline function new(?elements:Int, ?buffer:ArrayBuffer, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new ArrayBufferView(elements, Int32); } else if (array != null) { this = new ArrayBufferView(0, Int32).initArray(array); #if openfl } else if (vector != null) { this = new ArrayBufferView(0, Int32).initArray(untyped (vector).__array); #end } else if (view != null) { this = new ArrayBufferView(0, Int32).initTypedArray(view); } else if (buffer != null) { this = new ArrayBufferView(0, Int32).initBuffer(buffer, byteoffset, len); } else { throw "Invalid constructor arguments for Int32Array"; } } // Public API public inline function subarray(begin:Int, end:Null = null):Int32Array return this.subarray(begin, end); // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Int32Array { return new Int32Array(bytes, byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return this.buffer; } // Internal inline function get_length() return this.length; @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __get(idx:Int) { return ArrayBufferIO.getInt32(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT)); } @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __set(idx:Int, val:Int) { ArrayBufferIO.setInt32(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT), val); return val; } inline function toString() return this != null ? 'Int32Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #end // !js ================================================ FILE: src/lime/utils/Int8Array.hx ================================================ package lime.utils; #if (js && !doc_gen) #if haxe4 import js.lib.Int8Array as JSInt8Array; import js.lib.Uint8Array as JSUInt8Array; #else import js.html.Int8Array as JSInt8Array; import js.html.Uint8Array as JSUInt8Array; #end @:forward @:transitive abstract Int8Array(JSInt8Array) from JSInt8Array to JSInt8Array { @:to inline function toArrayBufferView():ArrayBufferView return this; public inline static var BYTES_PER_ELEMENT:Int = 1; @:generic public inline function new(?elements:Int, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?buffer:ArrayBuffer, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new JSInt8Array(elements); } else if (array != null) { this = new JSInt8Array(untyped array); #if (openfl && commonjs) } else if (vector != null) { this = new JSInt8Array(untyped (vector)); #elseif openfl } else if (vector != null) { this = new JSInt8Array(untyped untyped (vector).__array); #end } else if (view != null) { this = new JSInt8Array(untyped view); } else if (buffer != null) { if (len == null) { this = new JSInt8Array(buffer, byteoffset); } else { this = new JSInt8Array(buffer, byteoffset, len); } } else { this = null; } } @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __set(idx:Int, val:Int):Int return this[idx] = val; @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __get(idx:Int):Int return this[idx]; // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Int8Array { return new JSInt8Array(cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return @:privateAccess new haxe.io.Bytes(cast new JSUInt8Array(this.buffer)); } inline function toString() return this != null ? 'Int8Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #else import lime.utils.ArrayBufferView; @:transitive @:forward abstract Int8Array(ArrayBufferView) from ArrayBufferView to ArrayBufferView { public inline static var BYTES_PER_ELEMENT:Int = 1; public var length(get, never):Int; #if (haxe_ver < 4.2) @:generic #end public inline function new(?elements:Int, ?buffer:ArrayBuffer, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new ArrayBufferView(elements, Int8); } else if (array != null) { this = new ArrayBufferView(0, Int8).initArray(array); #if openfl } else if (vector != null) { this = new ArrayBufferView(0, Int8).initArray(untyped (vector).__array); #end } else if (view != null) { this = new ArrayBufferView(0, Int8).initTypedArray(view); } else if (buffer != null) { this = new ArrayBufferView(0, Int8).initBuffer(buffer, byteoffset, len); } else { throw "Invalid constructor arguments for Int8Array"; } } // Public API public inline function subarray(begin:Int, end:Null = null):Int8Array return this.subarray(begin, end); // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):Int8Array { if (byteOffset == null) return new Int8Array(null, null, cast bytes.getData()); if (len == null) return new Int8Array(null, null, cast bytes.getData(), byteOffset); return new Int8Array(null, null, cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return this.buffer; } // Internal inline function get_length() return this.length; @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __get(idx:Int) { return ArrayBufferIO.getInt8(this.buffer, this.byteOffset + idx); } @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __set(idx:Int, val:Int) { ArrayBufferIO.setInt8(this.buffer, this.byteOffset + idx, val); return val; } inline function toString() return this != null ? 'Int8Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #end // !js ================================================ FILE: src/lime/utils/Log.hx ================================================ package lime.utils; import haxe.PosInfos; #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Log { public static var level:LogLevel; public static var throwErrors:Bool = true; public static function debug(message:Dynamic, ?info:PosInfos):Void { if (level >= LogLevel.DEBUG) { #if js untyped #if haxe4 js.Syntax.code #else __js__ #end ("console").debug("[" + info.className + "] " + message); #else println("[" + info.className + "] " + Std.string(message)); #end } } public static function error(message:Dynamic, ?info:PosInfos):Void { if (level >= LogLevel.ERROR) { var message = "[" + info.className + "] ERROR: " + message; if (throwErrors) { #if webassembly println(message); #end throw message; } else { #if js untyped #if haxe4 js.Syntax.code #else __js__ #end ("console").error(message); #else println(message); #end } } } public static function info(message:Dynamic, ?info:PosInfos):Void { if (level >= LogLevel.INFO) { #if js untyped #if haxe4 js.Syntax.code #else __js__ #end ("console").info("[" + info.className + "] " + message); #else println("[" + info.className + "] " + Std.string(message)); #end } } public static inline function print(message:Dynamic):Void { #if sys Sys.print(Std.string(message)); #elseif flash untyped __global__["trace"](Std.string(message)); #elseif js untyped #if haxe4 js.Syntax.code #else __js__ #end ("console").log(message); #else trace(message); #end } public static inline function println(message:Dynamic):Void { #if sys Sys.println(Std.string(message)); #elseif flash untyped __global__["trace"](Std.string(message)); #elseif js untyped #if haxe4 js.Syntax.code #else __js__ #end ("console").log(message); #else trace(Std.string(message)); #end } public static function verbose(message:Dynamic, ?info:PosInfos):Void { if (level >= LogLevel.VERBOSE) { println("[" + info.className + "] " + message); } } public static function warn(message:Dynamic, ?info:PosInfos):Void { if (level >= LogLevel.WARN) { #if js untyped #if haxe4 js.Syntax.code #else __js__ #end ("console").warn("[" + info.className + "] WARNING: " + message); #else println("[" + info.className + "] WARNING: " + Std.string(message)); #end } } private static function __init__():Void { #if no_traces level = NONE; #elseif verbose level = VERBOSE; #else #if sys var args = Sys.args(); if (args.indexOf("-v") > -1 || args.indexOf("-verbose") > -1) { level = VERBOSE; } else #end { #if debug level = DEBUG; #else level = INFO; #end } #end #if js if (untyped #if haxe4 js.Syntax.code #else __js__ #end ("typeof console") == "undefined") { untyped #if haxe4 js.Syntax.code #else __js__ #end ("console = {}"); } if (untyped #if haxe4 js.Syntax.code #else __js__ #end ("console").log == null) { untyped #if haxe4 js.Syntax.code #else __js__ #end ("console").log = function() {}; } #end } } ================================================ FILE: src/lime/utils/LogLevel.hx ================================================ package lime.utils; #if (haxe_ver >= 4.0) enum #else @:enum #end abstract LogLevel(Int) from Int to Int from UInt to UInt { var NONE = 0; var ERROR = 1; var WARN = 2; var INFO = 3; var DEBUG = 4; var VERBOSE = 5; @:op(A > B) private static inline function gt(a:LogLevel, b:LogLevel):Bool { return (a : Int) > (b : Int); } @:op(A >= B) private static inline function gte(a:LogLevel, b:LogLevel):Bool { return (a : Int) >= (b : Int); } @:op(A < B) private static inline function lt(a:LogLevel, b:LogLevel):Bool { return (a : Int) < (b : Int); } @:op(A <= B) private static inline function lte(a:LogLevel, b:LogLevel):Bool { return (a : Int) <= (b : Int); } } ================================================ FILE: src/lime/utils/ObjectPool.hx ================================================ package lime.utils; import haxe.ds.ObjectMap; /** A generic object pool for reusing objects. **/ #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end #if !js @:generic #end class ObjectPool { /** The number of active objects in the pool. **/ public var activeObjects(default, null):Int; /** The number of inactive objects in the pool. **/ public var inactiveObjects(default, null):Int; /** The total size of the object pool (both active and inactive objects). **/ public var size(get, set):Null; @:noCompletion private var __inactiveObject0:T; @:noCompletion private var __inactiveObject1:T; @:noCompletion private var __inactiveObjectList:List; @:noCompletion private var __pool:Map; @:noCompletion private var __size:Null; /** Creates a new ObjectPool instance. @param create A function that creates a new instance of type T. @param clean A function that cleans up an instance of type T before it is reused. @param size The maximum size of the object pool. **/ public function new(create:Void->T = null, clean:T->Void = null, size:Null = null) { __pool = cast new ObjectMap(); activeObjects = 0; inactiveObjects = 0; __inactiveObject0 = null; __inactiveObject1 = null; __inactiveObjectList = new List(); if (create != null) { this.create = create; } if (clean != null) { this.clean = clean; } if (size != null) { this.size = size; } } /** Adds an object to the object pool. @param object The object to add to the pool. **/ public function add(object:T):Void { if (object != null && !__pool.exists(object)) { __pool.set(object, false); clean(object); __addInactive(object); } } /** Dynamic function. Cleans up an object before returning it to the pool. @param object The object to clean up. **/ public dynamic function clean(object:T):Void {} /** Clears the object pool, removing all objects. **/ public function clear():Void { __pool = cast new ObjectMap(); activeObjects = 0; inactiveObjects = 0; __inactiveObject0 = null; __inactiveObject1 = null; __inactiveObjectList.clear(); } /** Dynamic function. Creates a new Object. **/ public dynamic function create():T { return null; } /** Creates a new object and adds it to the pool, or returns an existing inactive object from the pool. @return The object retrieved from the pool, or null if the pool is full and no new objects can be created. **/ public function get():T { var object = null; if (inactiveObjects > 0) { object = __getInactive(); } else if (__size == null || activeObjects < __size) { object = create(); if (object != null) { __pool.set(object, true); activeObjects++; } } return object; } /** Releases an active object back into the pool. @param object The object to release. **/ public function release(object:T):Void { #if debug if (object == null || !__pool.exists(object)) { Log.error("Object is not a member of the pool"); } else if (!__pool.get(object)) { Log.error("Object has already been released"); } #end activeObjects--; if (__size == null || activeObjects + inactiveObjects < __size) { clean(object); __addInactive(object); } else { __pool.remove(object); } } /** Removes an object from the pool. @param object The object to remove from the pool. **/ public function remove(object:T):Void { if (object != null && __pool.exists(object)) { __pool.remove(object); if (__inactiveObject0 == object) { __inactiveObject0 = null; inactiveObjects--; } else if (__inactiveObject1 == object) { __inactiveObject1 = null; inactiveObjects--; } else if (__inactiveObjectList.remove(object)) { inactiveObjects--; } else { activeObjects--; } } } @:noCompletion private inline function __addInactive(object:T):Void { #if debug __pool.set(object, false); #end if (__inactiveObject0 == null) { __inactiveObject0 = object; } else if (__inactiveObject1 == null) { __inactiveObject1 = object; } else { __inactiveObjectList.add(object); } inactiveObjects++; } @:noCompletion private inline function __getInactive():T { var object = null; if (__inactiveObject0 != null) { object = __inactiveObject0; __inactiveObject0 = null; } else if (__inactiveObject1 != null) { object = __inactiveObject1; __inactiveObject1 = null; } else { object = __inactiveObjectList.pop(); if (__inactiveObjectList.length > 0) { __inactiveObject0 = __inactiveObjectList.pop(); } if (__inactiveObjectList.length > 0) { __inactiveObject1 = __inactiveObjectList.pop(); } } #if debug __pool.set(object, true); #end inactiveObjects--; activeObjects++; return object; } @:noCompletion private function __removeInactive(count:Int):Void { if (count <= 0 || inactiveObjects == 0) return; if (__inactiveObject0 != null) { __pool.remove(__inactiveObject0); __inactiveObject0 = null; inactiveObjects--; count--; } if (count == 0 || inactiveObjects == 0) return; if (__inactiveObject1 != null) { __pool.remove(__inactiveObject1); __inactiveObject1 = null; inactiveObjects--; count--; } if (count == 0 || inactiveObjects == 0) return; for (object in __inactiveObjectList) { __pool.remove(object); __inactiveObjectList.remove(object); inactiveObjects--; count--; if (count == 0 || inactiveObjects == 0) return; } } // Get & Set Methods @:noCompletion private function get_size():Null { return __size; } @:noCompletion private function set_size(value:Null):Null { if (value == null) { __size = null; } else { var current = inactiveObjects + activeObjects; __size = value; if (current > value) { __removeInactive(current - value); } else if (value > current) { var object; for (i in 0...(value - current)) { object = create(); if (object != null) { __pool.set(object, false); __inactiveObjectList.add(object); inactiveObjects++; } else { break; } } } } return value; } } ================================================ FILE: src/lime/utils/PackedAssetLibrary.hx ================================================ package lime.utils; import haxe.io.Bytes; import haxe.io.Path; import lime.app.Event; import lime.app.Future; import lime.app.Promise; import lime.media.AudioBuffer; import lime.graphics.Image; import lime.net.HTTPRequest; import lime.text.Font; import lime.utils.AssetType; import lime.utils.Bytes; #if flash import flash.display.BitmapData; import flash.media.Sound; #end #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end @:keep class PackedAssetLibrary extends AssetLibrary { @:noCompletion private var id:String; @:noCompletion private var lengths = new Map(); @:noCompletion private var packedData:Bytes; @:noCompletion private var positions = new Map(); @:noCompletion private var type:String; @:noCompletion private var rootPath:String; public function new(id:String, type:String) { super(); this.id = id; this.type = type; } public static function fromBytes(bytes:Bytes, rootPath:String = null):PackedAssetLibrary { return cast fromManifest(AssetManifest.fromBytes(bytes, rootPath)); } public static function fromFile(path:String, rootPath:String = null):PackedAssetLibrary { return cast fromManifest(AssetManifest.fromFile(path, rootPath)); } public static function fromManifest(manifest:AssetManifest):PackedAssetLibrary { return cast AssetLibrary.fromManifest(manifest); } public override function getAudioBuffer(id:String):AudioBuffer { #if (js && html5) return super.getAudioBuffer(id); #else if (cachedAudioBuffers.exists(id)) { return cachedAudioBuffers.get(id); } else { // TODO: More efficient method var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return AudioBuffer.fromBytes(bytes); } #end } public override function getBytes(id:String):Bytes { if (cachedBytes.exists(id)) { return cachedBytes.get(id); } else if (cachedText.exists(id)) { var bytes = Bytes.ofString(cachedText.get(id)); cachedBytes.set(id, bytes); return bytes; } else { var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return bytes; } } public override function getFont(id:String):Font { #if (js && html5) return super.getFont(id); #else if (cachedFonts.exists(id)) { return cachedFonts.get(id); } else { // TODO: More efficient method var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return Font.fromBytes(bytes); } #end } public override function getImage(id:String):Image { if (cachedImages.exists(id)) { return cachedImages.get(id); } else { // TODO: More efficient method var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return Image.fromBytes(bytes); } } public override function getText(id:String):String { if (cachedText.exists(id)) { return cachedText.get(id); } else if (type == "gzip" || type == "zip" || type == "deflate") { var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return bytes.getString(0, bytes.length); } else { return packedData.getString(positions[id], lengths[id]); } } public override function isLocal(id:String, type:String):Bool { return true; } public override function load():Future { if (loaded) { return Future.withValue(cast this); } if (promise == null) { promise = new Promise(); bytesLoadedCache = new Map(); // TODO: Handle `preload` for individual assets // TODO: Do not preload bytes on native, if we can read from it instead (all non-Android targets?) assetsLoaded = 0; assetsTotal = 2; //for our initial __assetLoaded(null) call and __assetLoaded(this.id) for (id in preload.keys()) { if (!preload.get(id)) continue; switch (types.get(id)) { case BINARY, FONT, IMAGE, TEXT: assetsTotal++; case MUSIC, SOUND: Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); assetsTotal++; var future = loadAudioBuffer(id); future.onProgress(load_onProgress.bind(id)); future.onError(loadAudioBuffer_onError.bind(id)); future.onComplete(loadAudioBuffer_onComplete.bind(id)); default: } } var packedData_onComplete = function(data:Bytes) { cachedBytes.set(id, data); packedData = data; __assetLoaded(this.id); for (id in preload.keys()) { if (!preload.get(id)) continue; switch (types.get(id)) { case BINARY: Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); var future = loadBytes(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadBytes_onComplete.bind(id)); case FONT: Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); var future = loadFont(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadFont_onComplete.bind(id)); case IMAGE: Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); var future = loadImage(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadImage_onComplete.bind(id)); case TEXT: Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); var future = loadText(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadText_onComplete.bind(id)); default: } } }; __assetLoaded(null); if (cachedBytes.exists(id)) { packedData_onComplete(cachedBytes.get(id)); } else { var basePath = rootPath == null || rootPath == "" ? "" : Path.addTrailingSlash(rootPath); var libPath = getPath(id); if (libPath == null) libPath = id; var path = Path.join([basePath, libPath]); path = __cacheBreak(path); var packedData_onProgress = load_onProgress.bind(this.id); Bytes.loadFromFile(path).onProgress(packedData_onProgress).onError(promise.error).onComplete(packedData_onComplete); } } return promise.future; } public override function loadAudioBuffer(id:String):Future { #if (js && html5) return super.loadAudioBuffer(id); #else if (cachedAudioBuffers.exists(id)) { return Future.withValue(cachedAudioBuffers.get(id)); } else { // TODO: More efficient method, use `loadFromBytes` method var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return Future.withValue(AudioBuffer.fromBytes(bytes)); } #end } public override function loadBytes(id:String):Future { if (cachedBytes.exists(id)) { return Future.withValue(cachedBytes.get(id)); } else { // TODO: More efficient method var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return Future.withValue(bytes); } } public override function loadFont(id:String):Future { #if (js && html5) return super.loadFont(id); #else if (cachedFonts.exists(id)) { return Future.withValue(cachedFonts.get(id)); } else { // TODO: More efficient method var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return Font.loadFromBytes(bytes); } #end } public static function loadFromBytes(bytes:Bytes, rootPath:String = null):Future { return AssetLibrary.loadFromBytes(bytes, rootPath).then(function(library) { var assetLibrary:PackedAssetLibrary = cast library; return Future.withValue(assetLibrary); }); } public static function loadFromFile(path:String, rootPath:String = null):Future { return AssetLibrary.loadFromFile(path, rootPath).then(function(library) { var assetLibrary:PackedAssetLibrary = cast library; return Future.withValue(assetLibrary); }); } public static function loadFromManifest(manifest:AssetManifest):Future { return AssetLibrary.loadFromManifest(manifest).then(function(library) { var assetLibrary:PackedAssetLibrary = cast library; return Future.withValue(assetLibrary); }); } public override function loadImage(id:String):Future { if (cachedImages.exists(id)) { return Future.withValue(cachedImages.get(id)); } else { // TODO: More efficient method var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return Image.loadFromBytes(bytes); } } public override function loadText(id:String):Future { if (cachedText.exists(id)) { return Future.withValue(cachedText.get(id)); } else if (cachedBytes.exists(id)) { var bytes = getBytes(id); if (bytes == null) { return cast Future.withValue(null); } else { var text = bytes.getString(0, bytes.length); cachedText.set(id, text); return Future.withValue(text); } } else if (type == "gzip" || type == "deflate") { var bytes = Bytes.alloc(lengths[id]); bytes.blit(0, packedData, positions[id], lengths[id]); if (type == "gzip") bytes = bytes.decompress(GZIP); else if (type == "zip" || type == "deflate") bytes = bytes.decompress(DEFLATE); return Future.withValue(bytes.getString(0, bytes.length)); } else { return Future.withValue(packedData.getString(positions[id], lengths[id])); } } public override function unload():Void {} @:noCompletion private override function __fromManifest(manifest:AssetManifest):Void { rootPath = manifest.rootPath; super.__fromManifest(manifest); var packedBytesTotal = 0; bytesTotal = 0; for (asset in manifest.assets) { var id = asset.id; if (Reflect.hasField(asset, "position")) { positions.set(id, Reflect.field(asset, "position")); } if (Reflect.hasField(asset, "length")) { var length = Reflect.field(asset, "length"); lengths.set(id, length); //for individual packed assets, the size represents the work done unpacking them //since this is likely to be much faster than downloading, set it to something //small like the packed length / 10. sizes.set(id, Math.floor(length / 10)); packedBytesTotal += length; } if (preload.exists(id) && preload.get(id) && sizes.exists(id)) { bytesTotal += sizes.get(id); } } sizes.set(this.id, packedBytesTotal); bytesTotal += packedBytesTotal; } @:noCompletion private override function __assetLoaded(id:String):Void { assetsLoaded++; if (id != null) { Log.verbose("Loaded asset: " + id + " [" + types.get(id) + "] (" + (assetsLoaded - 1) + "/" + (assetsTotal - 1) + ")"); } if (id != null) { var size = sizes.exists(id) ? sizes.get(id) : 0; if (!bytesLoadedCache.exists(id)) { bytesLoaded += size; } else { var cache = bytesLoadedCache.get(id); if (cache < size) { bytesLoaded += (size - cache); } } bytesLoadedCache.set(id, size); } if (assetsLoaded < assetsTotal) { promise.progress(bytesLoaded, bytesTotal); } else { loaded = true; promise.progress(bytesTotal, bytesTotal); promise.complete(this); } } } ================================================ FILE: src/lime/utils/Preloader.hx ================================================ package lime.utils; import haxe.ds.ObjectMap; import haxe.io.Bytes; import haxe.io.Path; import haxe.macro.Compiler; import haxe.Timer; import lime.app.Event; import lime.media.AudioBuffer; import lime.system.System; import lime.utils.AssetLibrary; import lime.utils.Assets; import lime.utils.AssetType; import lime.utils.Log; #if (js && html5) import js.html.Image; import js.html.SpanElement; import js.Browser; import lime.net.HTTPRequest; #elseif flash import flash.display.LoaderInfo; import flash.display.Sprite; import flash.events.ProgressEvent; import flash.Lib; #end @:access(lime.utils.AssetLibrary) #if !lime_debug @:fileXml('tags="haxe,release"') @:noDebug #end class Preloader #if flash extends Sprite #end { public var complete(default, null):Bool; public var onComplete = new EventVoid>(); public var onProgress = new EventInt->Void>(); @:noCompletion private var bytesLoaded:Int; @:noCompletion private var bytesLoadedCache = new ObjectMap<#if !disable_preloader_assets AssetLibrary #else Dynamic #end, Int>(); @:noCompletion private var bytesLoadedCache2 = new Map(); @:noCompletion private var bytesTotal:Int; @:noCompletion private var bytesTotalCache = new Map(); @:noCompletion private var initLibraryNames:Bool; @:noCompletion private var libraries:Array<#if !disable_preloader_assets AssetLibrary #else Dynamic #end>; @:noCompletion private var libraryNames:Array; @:noCompletion private var loadedLibraries:Int; @:noCompletion private var loadedStage:Bool; @:noCompletion private var preloadComplete:Bool; @:noCompletion private var preloadStarted:Bool; @:noCompletion private var simulateProgress:Bool; public function new() { // TODO: Split out core preloader support from generic Preloader type #if flash super(); #end bytesLoaded = 0; bytesTotal = 0; libraries = new Array<#if !disable_preloader_assets AssetLibrary #else Dynamic #end>(); libraryNames = new Array(); onProgress.add(update); #if simulate_preloader var preloadTime = Std.parseInt(Compiler.getDefine("simulate_preloader")); if (preloadTime == 1) { preloadTime = 3000; } var startTime = System.getTimer(); var currentTime = 0; var timeStep = Std.int(1000 / 60); var timer = new Timer(timeStep); simulateProgress = true; timer.run = function() { currentTime = System.getTimer() - startTime; if (currentTime > preloadTime) currentTime = preloadTime; onProgress.dispatch(currentTime, preloadTime); if (currentTime >= preloadTime) { timer.stop(); simulateProgress = false; start(); } }; #end #if flash Lib.current.addChild(this); Lib.current.loaderInfo.addEventListener(flash.events.Event.COMPLETE, loaderInfo_onComplete); Lib.current.loaderInfo.addEventListener(flash.events.Event.INIT, loaderInfo_onInit); Lib.current.loaderInfo.addEventListener(ProgressEvent.PROGRESS, loaderInfo_onProgress); Lib.current.addEventListener(flash.events.Event.ENTER_FRAME, current_onEnter); #end } public function addLibrary(library:#if !disable_preloader_assets AssetLibrary #else Dynamic #end):Void { libraries.push(library); } public function addLibraryName(name:String):Void { if (libraryNames.indexOf(name) == -1) { libraryNames.push(name); } } public function load():Void { for (library in libraries) { bytesTotal += library.bytesTotal; } loadedLibraries = -1; preloadStarted = false; for (library in libraries) { Log.verbose("Preloading asset library"); library.load() .onProgress(function(loaded, total) { if (!bytesLoadedCache.exists(library)) { bytesLoaded += loaded; } else { bytesLoaded += loaded - bytesLoadedCache.get(library); } bytesLoadedCache.set(library, loaded); if (!simulateProgress) { onProgress.dispatch(bytesLoaded, bytesTotal); } }) .onComplete(function(_) { if (!bytesLoadedCache.exists(library)) { bytesLoaded += library.bytesTotal; } else { bytesLoaded += Std.int(library.bytesTotal) - bytesLoadedCache.get(library); } loadedAssetLibrary(); }) .onError(function(e) { Log.error(e); }); } // TODO: Handle bytes total better for (name in libraryNames) { bytesTotal += 200; } loadedLibraries++; preloadStarted = true; updateProgress(); } @:noCompletion private function loadedAssetLibrary(name:String = null):Void { loadedLibraries++; var current = loadedLibraries; if (!preloadStarted) current++; var totalLibraries = libraries.length + libraryNames.length; if (name != null) { Log.verbose("Loaded asset library: " + name + " [" + current + "/" + totalLibraries + "]"); } else { Log.verbose("Loaded asset library [" + current + "/" + totalLibraries + "]"); } updateProgress(); } @:noCompletion private function start():Void { if (complete || simulateProgress || !preloadComplete) return; complete = true; #if flash if (Lib.current.contains(this)) { Lib.current.removeChild(this); } #end onComplete.dispatch(); } @:noCompletion private function update(loaded:Int, total:Int):Void {} @:noCompletion private function updateProgress():Void { if (!simulateProgress) { onProgress.dispatch(bytesLoaded, bytesTotal); } #if !disable_preloader_assets if (#if flash loadedStage && #end loadedLibraries == libraries.length && !initLibraryNames) { initLibraryNames = true; for (name in libraryNames) { Log.verbose("Preloading asset library: " + name); Assets.loadLibrary(name) .onProgress(function(loaded, total) { if (total > 0) { if (!bytesTotalCache.exists(name)) { bytesTotalCache.set(name, total); bytesTotal += (total - 200); } if (loaded > total) loaded = total; if (!bytesLoadedCache2.exists(name)) { bytesLoaded += loaded; } else { bytesLoaded += loaded - bytesLoadedCache2.get(name); } bytesLoadedCache2.set(name, loaded); if (!simulateProgress) { onProgress.dispatch(bytesLoaded, bytesTotal); } } }) .onComplete(function(library) { var total = 200; if (bytesTotalCache.exists(name)) { total = bytesTotalCache.get(name); } if (!bytesLoadedCache2.exists(name)) { bytesLoaded += total; } else { bytesLoaded += total - bytesLoadedCache2.get(name); } loadedAssetLibrary(name); }) .onError(function(e) { Log.error(e); }); } } #end if (!simulateProgress #if flash && loadedStage #end && loadedLibraries == (libraries.length + libraryNames.length)) { if (!preloadComplete) { preloadComplete = true; Log.verbose("Preload complete"); } start(); } } #if flash @:noCompletion private function current_onEnter(event:flash.events.Event):Void { if (!loadedStage && Lib.current.loaderInfo.bytesLoaded == Lib.current.loaderInfo.bytesTotal) { loadedStage = true; if (bytesTotalCache["_root"] > 0) { var loaded = Lib.current.loaderInfo.bytesLoaded; bytesLoaded += loaded - bytesLoadedCache2["_root"]; bytesLoadedCache2["_root"] = loaded; updateProgress(); } } if (loadedStage) { Lib.current.removeEventListener(flash.events.Event.ENTER_FRAME, current_onEnter); Lib.current.loaderInfo.removeEventListener(flash.events.Event.COMPLETE, loaderInfo_onComplete); Lib.current.loaderInfo.removeEventListener(flash.events.Event.INIT, loaderInfo_onInit); Lib.current.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, loaderInfo_onProgress); updateProgress(); } } @:noCompletion private function loaderInfo_onComplete(event:flash.events.Event):Void { // loadedStage = true; if (bytesTotalCache["_root"] > 0) { var loaded = Lib.current.loaderInfo.bytesLoaded; bytesLoaded += loaded - bytesLoadedCache2["_root"]; bytesLoadedCache2["_root"] = loaded; updateProgress(); } } @:noCompletion private function loaderInfo_onInit(event:flash.events.Event):Void { bytesTotal += Lib.current.loaderInfo.bytesTotal; bytesTotalCache["_root"] = Lib.current.loaderInfo.bytesTotal; if (bytesTotalCache["_root"] > 0) { var loaded = Lib.current.loaderInfo.bytesLoaded; bytesLoaded += loaded; bytesLoadedCache2["_root"] = loaded; updateProgress(); } } @:noCompletion private function loaderInfo_onProgress(event:flash.events.ProgressEvent):Void { if (bytesTotalCache["_root"] > 0) { var loaded = Lib.current.loaderInfo.bytesLoaded; bytesLoaded += loaded - bytesLoadedCache2["_root"]; bytesLoadedCache2["_root"] = loaded; updateProgress(); } } #end } ================================================ FILE: src/lime/utils/Resource.hx ================================================ package lime.utils; import haxe.io.Bytes; @:transitive abstract Resource(Bytes) from Bytes to Bytes { public function new(size:Int = 0) { this = Bytes.alloc(size); } @:from private static inline function __fromString(value:String):Resource { return Bytes.ofString(value); } @:to private static inline function __toString(value:Resource):String { return (value : Bytes).toString(); } } ================================================ FILE: src/lime/utils/UInt16Array.hx ================================================ package lime.utils; #if (js && !doc_gen) #if haxe4 import js.lib.Uint8Array as JSUInt8Array; import js.lib.Uint16Array as JSUInt16Array; #else import js.html.Uint8Array as JSUInt8Array; import js.html.Uint16Array as JSUInt16Array; #end @:forward @:transitive abstract UInt16Array(JSUInt16Array) from JSUInt16Array to JSUInt16Array { @:to inline function toArrayBufferView():ArrayBufferView return this; public inline static var BYTES_PER_ELEMENT:Int = 2; @:generic public inline function new(?elements:Int, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?buffer:ArrayBuffer, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new JSUInt16Array(elements); } else if (array != null) { this = new JSUInt16Array(untyped array); #if (openfl && commonjs) } else if (vector != null) { this = new JSUInt16Array(untyped (vector)); #elseif openfl } else if (vector != null) { this = new JSUInt16Array(untyped untyped (vector).__array); #end } else if (view != null) { this = new JSUInt16Array(untyped view); } else if (buffer != null) { if (len == null) { this = new JSUInt16Array(buffer, byteoffset); } else { this = new JSUInt16Array(buffer, byteoffset, len); } } else { this = null; } } @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __set(idx:Int, val:UInt):UInt return this[idx] = val; @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __get(idx:Int):UInt return this[idx]; // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):UInt16Array { if (byteOffset == null) return new JSUInt16Array(cast bytes.getData()); if (len == null) return new JSUInt16Array(cast bytes.getData(), byteOffset); return new JSUInt16Array(cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return @:privateAccess new haxe.io.Bytes(cast new JSUInt8Array(this.buffer)); } inline function toString() return this != null ? 'UInt16Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #else import lime.utils.ArrayBufferView; @:transitive @:forward abstract UInt16Array(ArrayBufferView) from ArrayBufferView to ArrayBufferView { public inline static var BYTES_PER_ELEMENT:Int = 2; public var length(get, never):Int; #if (haxe_ver < 4.2) @:generic #end public inline function new(?elements:Int, ?buffer:ArrayBuffer, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new ArrayBufferView(elements, Uint16); } else if (array != null) { this = new ArrayBufferView(0, Uint16).initArray(array); #if openfl } else if (vector != null) { this = new ArrayBufferView(0, Uint16).initArray(untyped (vector).__array); #end } else if (view != null) { this = new ArrayBufferView(0, Uint16).initTypedArray(view); } else if (buffer != null) { this = new ArrayBufferView(0, Uint16).initBuffer(buffer, byteoffset, len); } else { throw "Invalid constructor arguments for UInt16Array"; } } // Public API public inline function subarray(begin:Int, end:Null = null):UInt16Array return this.subarray(begin, end); // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):UInt16Array { return new UInt16Array(bytes, byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return this.buffer; } // Internal inline function get_length() return this.length; @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __get(idx:Int) { return ArrayBufferIO.getUint16(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT)); } @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __set(idx:Int, val:UInt) { ArrayBufferIO.setUint16(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT), val); return val; } inline function toString() return this != null ? 'UInt16Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #end // !js ================================================ FILE: src/lime/utils/UInt32Array.hx ================================================ package lime.utils; #if (js && !doc_gen) #if haxe4 import js.lib.Uint8Array as JSUInt8Array; import js.lib.Uint32Array as JSUInt32Array; #else import js.html.Uint8Array as JSUInt8Array; import js.html.Uint32Array as JSUInt32Array; #end @:forward @:transitive abstract UInt32Array(JSUInt32Array) from JSUInt32Array to JSUInt32Array { @:to inline function toArrayBufferView():ArrayBufferView return this; public inline static var BYTES_PER_ELEMENT:Int = 4; @:generic public inline function new(?elements:Int, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?buffer:ArrayBuffer, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new JSUInt32Array(elements); } else if (array != null) { this = new JSUInt32Array(untyped array); #if (openfl && commonjs) } else if (vector != null) { this = new JSUInt32Array(untyped (vector)); #elseif openfl } else if (vector != null) { this = new JSUInt32Array(untyped untyped (vector).__array); #end } else if (view != null) { this = new JSUInt32Array(untyped view); } else if (buffer != null) { if (len == null) { this = new JSUInt32Array(buffer, byteoffset); } else { this = new JSUInt32Array(buffer, byteoffset, len); } } else { this = null; } } @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __set(idx:Int, val:UInt):UInt return this[idx] = val; @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __get(idx:Int):UInt return this[idx]; // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):UInt32Array { if (byteOffset == null) return new JSUInt32Array(cast bytes.getData()); if (len == null) return new JSUInt32Array(cast bytes.getData(), byteOffset); return new JSUInt32Array(cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return @:privateAccess new haxe.io.Bytes(cast new JSUInt8Array(this.buffer)); } inline function toString() return this != null ? 'UInt32Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #else import lime.utils.ArrayBufferView; @:transitive @:forward abstract UInt32Array(ArrayBufferView) from ArrayBufferView to ArrayBufferView { public inline static var BYTES_PER_ELEMENT:Int = 4; public var length(get, never):Int; #if (haxe_ver < 4.2) @:generic #end public inline function new(?elements:Int, ?buffer:ArrayBuffer, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new ArrayBufferView(elements, Uint32); } else if (array != null) { this = new ArrayBufferView(0, Uint32).initArray(array); #if openfl } else if (vector != null) { this = new ArrayBufferView(0, Uint32).initArray(untyped (vector).__array); #end } else if (view != null) { this = new ArrayBufferView(0, Uint32).initTypedArray(view); } else if (buffer != null) { this = new ArrayBufferView(0, Uint32).initBuffer(buffer, byteoffset, len); } else { throw "Invalid constructor arguments for UInt32Array"; } } // Public API public inline function subarray(begin:Int, end:Null = null):UInt32Array return this.subarray(begin, end); // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):UInt32Array { return new UInt32Array(bytes, byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return this.buffer; } // Internal inline function get_length() return this.length; @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __get(idx:Int) { return ArrayBufferIO.getUint32(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT)); } @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __set(idx:Int, val:UInt) { ArrayBufferIO.setUint32(this.buffer, this.byteOffset + (idx * BYTES_PER_ELEMENT), val); return val; } inline function toString() return this != null ? 'UInt32Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #end // !js ================================================ FILE: src/lime/utils/UInt8Array.hx ================================================ package lime.utils; #if (js && !doc_gen) #if haxe4 import js.lib.Uint8Array as JSUInt8Array; #else import js.html.Uint8Array as JSUInt8Array; #end @:forward @:transitive abstract UInt8Array(JSUInt8Array) from JSUInt8Array to JSUInt8Array { @:to inline function toArrayBufferView():ArrayBufferView return this; public inline static var BYTES_PER_ELEMENT:Int = 1; @:generic public inline function new(?elements:Int, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?buffer:ArrayBuffer, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new JSUInt8Array(elements); } else if (array != null) { this = new JSUInt8Array(untyped array); #if (openfl && commonjs) } else if (vector != null) { this = new JSUInt8Array(untyped (vector)); #elseif openfl } else if (vector != null) { this = new JSUInt8Array(untyped untyped (vector).__array); #end } else if (view != null) { this = new JSUInt8Array(untyped view); } else if (buffer != null) { if (len == null) { this = new JSUInt8Array(buffer, byteoffset); } else { this = new JSUInt8Array(buffer, byteoffset, len); } } else { this = null; } } @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __set(idx:Int, val:UInt):UInt return this[idx] = val; @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __get(idx:Int):UInt return this[idx]; // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int, ?len:Int):UInt8Array { if (byteOffset == null) return new JSUInt8Array(cast bytes.getData()); if (len == null) return new JSUInt8Array(cast bytes.getData(), byteOffset); return new JSUInt8Array(cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return @:privateAccess new haxe.io.Bytes(cast new JSUInt8Array(this.buffer)); } inline function toString() return this != null ? 'UInt8Array [byteLength:${this.byteLength}, length:${this.length}]' : null; } #else import lime.utils.ArrayBufferView; @:transitive @:forward abstract UInt8Array(ArrayBufferView) from ArrayBufferView to ArrayBufferView { public inline static var BYTES_PER_ELEMENT:Int = 1; public var length(get, never):Int; #if (haxe_ver < 4.2) @:generic #end public inline function new(?elements:Int, ?buffer:ArrayBuffer, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new ArrayBufferView(elements, Uint8); } else if (array != null) { this = new ArrayBufferView(0, Uint8).initArray(array); #if openfl } else if (vector != null) { this = new ArrayBufferView(0, Uint8).initArray(untyped (vector).__array); #end } else if (view != null) { this = new ArrayBufferView(0, Uint8).initTypedArray(view); } else if (buffer != null) { this = new ArrayBufferView(0, Uint8).initBuffer(buffer, byteoffset, len); } else { throw "Invalid constructor arguments for UInt8Array"; } } // Public API public inline function subarray(begin:Int, end:Null = null):UInt8Array return this.subarray(begin, end); // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):UInt8Array { return new UInt8Array(bytes, byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return this.buffer; } // Internal inline function toString() return this != null ? 'UInt8Array [byteLength:${this.byteLength}, length:${this.length}]' : null; inline function get_length() return this.length; @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __get(idx:Int) { return ArrayBufferIO.getUint8(this.buffer, this.byteOffset + idx); } @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __set(idx:Int, val:UInt) { ArrayBufferIO.setUint8(this.buffer, this.byteOffset + idx, val); return val; } } #end // !js ================================================ FILE: src/lime/utils/UInt8ClampedArray.hx ================================================ package lime.utils; #if (js && !doc_gen) #if haxe4 import js.lib.Uint8Array as JSUInt8Array; import js.lib.Uint8ClampedArray as JSUInt8ClampedArray; #else import js.html.Uint8Array as JSUInt8Array; import js.html.Uint8ClampedArray as JSUInt8ClampedArray; #end @:forward @:transitive abstract UInt8ClampedArray(JSUInt8ClampedArray) from JSUInt8ClampedArray to JSUInt8ClampedArray { @:to inline function toArrayBufferView():ArrayBufferView return this; public inline static var BYTES_PER_ELEMENT:Int = 1; @:generic public inline function new(?elements:Int, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?buffer:ArrayBuffer, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new JSUInt8ClampedArray(elements); } else if (array != null) { this = new JSUInt8ClampedArray(untyped array); #if (openfl && commonjs) } else if (vector != null) { this = new JSUInt8ClampedArray(untyped (vector)); #elseif openfl } else if (vector != null) { this = new JSUInt8ClampedArray(untyped untyped (vector).__array); #end } else if (view != null) { this = new JSUInt8ClampedArray(untyped view); } else if (buffer != null) { if (len == null) { this = new JSUInt8ClampedArray(buffer, byteoffset); } else { this = new JSUInt8ClampedArray(buffer, byteoffset, len); } } else { this = null; } } @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __set(idx:Int, val:UInt):UInt return this[idx] = _clamp(val); @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end inline function __get(idx:Int):UInt return this[idx]; // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):UInt8ClampedArray { if (byteOffset == null) return new JSUInt8ClampedArray(cast bytes.getData()); if (len == null) return new JSUInt8ClampedArray(cast bytes.getData(), byteOffset); return new JSUInt8ClampedArray(cast bytes.getData(), byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return @:privateAccess new haxe.io.Bytes(cast new JSUInt8Array(this.buffer)); } inline function toString() return this != null ? 'UInt8ClampedArray [byteLength:${this.byteLength}, length:${this.length}]' : null; // internal // clamp a Int to a 0-255 Uint8 static function _clamp(_in:Float):Int { var _out = Std.int(_in); _out = _out > 255 ? 255 : _out; return _out < 0 ? 0 : _out; } // _clamp } #else import lime.utils.ArrayBufferView; @:transitive @:forward @:arrayAccess abstract UInt8ClampedArray(ArrayBufferView) from ArrayBufferView to ArrayBufferView { public inline static var BYTES_PER_ELEMENT:Int = 1; public var length(get, never):Int; #if (haxe_ver < 4.2) @:generic #end public inline function new(?elements:Int, ?buffer:ArrayBuffer, ?array:Array, #if openfl ?vector:openfl.Vector, #end ?view:ArrayBufferView, ?byteoffset:Int = 0, ?len:Null) { if (elements != null) { this = new ArrayBufferView(elements, Uint8Clamped); } else if (array != null) { this = new ArrayBufferView(0, Uint8Clamped).initArray(array); #if openfl } else if (vector != null) { this = new ArrayBufferView(0, Uint8Clamped).initArray(untyped (vector).__array); #end } else if (view != null) { this = new ArrayBufferView(0, Uint8Clamped).initTypedArray(view); } else if (buffer != null) { this = new ArrayBufferView(0, Uint8Clamped).initBuffer(buffer, byteoffset, len); } else { throw "Invalid constructor arguments for UInt8ClampedArray"; } } // Public API public inline function subarray(begin:Int, end:Null = null):UInt8ClampedArray return this.subarray(begin, end); // non spec haxe conversions inline public static function fromBytes(bytes:haxe.io.Bytes, ?byteOffset:Int = 0, ?len:Int):UInt8ClampedArray { return new UInt8ClampedArray(bytes, byteOffset, len); } inline public function toBytes():haxe.io.Bytes { return this.buffer; } // Internal inline function get_length() return this.length; @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __get(idx:Int) { return ArrayBufferIO.getUint8(this.buffer, this.byteOffset + idx); } @:noCompletion @:arrayAccess #if (haxe_ver >= 4.0) extern #else @:extern #end public inline function __set(idx:Int, val:UInt) { ArrayBufferIO.setUint8Clamped(this.buffer, this.byteOffset + idx, val); return val; } inline function toString() return this != null ? 'UInt8ClampedArray [byteLength:${this.byteLength}, length:${this.length}]' : null; } #end // !js ================================================ FILE: templates/air/hxml/debug.hxml ================================================ -main ApplicationMain ::HAXE_FLAGS:: -swf-version ::SWF_VERSION:: -swf ::OUTPUT_DIR::/bin/::APP_FILE::.swf -swf-header ::if (WIN_WIDTH == "0")::800::else::::WIN_WIDTH::::end:::::if (WIN_HEIGHT == "0")::500::else::::WIN_HEIGHT::::end:::::WIN_FPS:::::WIN_FLASHBACKGROUND:: -cp ::OUTPUT_DIR::/haxe -debug -D air ================================================ FILE: templates/air/hxml/final.hxml ================================================ -main ApplicationMain ::HAXE_FLAGS:: -swf-version ::SWF_VERSION:: -swf ::OUTPUT_DIR::/bin/::APP_FILE::.swf -swf-header ::if (WIN_WIDTH == "0")::800::else::::WIN_WIDTH::::end:::::if (WIN_HEIGHT == "0")::500::else::::WIN_HEIGHT::::end:::::WIN_FPS:::::WIN_FLASHBACKGROUND:: -cp ::OUTPUT_DIR::/haxe -D final -D air ================================================ FILE: templates/air/hxml/release.hxml ================================================ -main ApplicationMain ::HAXE_FLAGS:: -swf-version ::SWF_VERSION:: -swf ::OUTPUT_DIR::/bin/::APP_FILE::.swf -swf-header ::if (WIN_WIDTH == "0")::800::else::::WIN_WIDTH::::end:::::if (WIN_HEIGHT == "0")::500::else::::WIN_HEIGHT::::end:::::WIN_FPS:::::WIN_FLASHBACKGROUND:: -cp ::OUTPUT_DIR::/haxe -D air ================================================ FILE: templates/air/template/application.xml ================================================ ::APP_PACKAGE:: ::APP_VERSION:: ::APP_BUILD_NUMBER_SPLIT:: ::APP_FILE:: ::APP_TITLE:: ::APP_DESCRIPTION:: ::APP_TITLE:: ::APP_FILE::.swf ::if (WIN_BORDERLESS)::none::else::standard::end:: false ::if (LIB_MUNIT)::false::else::::if (WIN_HIDDEN)::false::else::true::end::::end:: true true ::WIN_RESIZABLE:: ::if (WIN_WIDTH != 0)::::WIN_WIDTH::::end:: ::if (WIN_HEIGHT != 0)::::WIN_HEIGHT::::end:: ::if (WIN_HARDWARE)::direct::else::cpu::end:: ::if (WIN_ORIENTATION == "auto"):: true any ::else:: false ::if (WIN_ORIENTATION == "portrait")::portrait::else::landscape::end:: ::end:: ::WIN_FULLSCREEN:: ::if (WIN_HARDWARE)::true::end:: ::if WIN_ALLOW_HIGH_DPI::high::end:: ::if (APP_COMPANY != "")::::APP_COMPANY::/::APP_TITLE::::else::::APP_TITLE::::end:: ::APP_TITLE:: ::if (icons != null)::::foreach icons:: ::path::::end:: ::end:: ::if (languages != null)::::foreach languages::::__current__:: ::end::::end:: false false ]]> UIDeviceFamily ::foreach IOS_TARGET_DEVICES:: ::__current__::::end:: ::end:: ]]> ::if WIN_ALLOW_HIGH_DPI::high::else::standard::end:: ::if (extensions != null)::::foreach extensions:: ::name::::end:: ::end:: ================================================ FILE: templates/android/MainActivity.java ================================================ package ::APP_PACKAGE::; import android.os.Bundle; public class MainActivity extends org.haxe.lime.GameActivity { } ================================================ FILE: templates/android/hxml/debug.hxml ================================================ -main ApplicationMain ::HAXE_FLAGS:: -cp ::OUTPUT_DIR::/haxe -cpp ::CPP_DIR:: --macro keep("::APP_MAIN::") -D android -D android-9 -debug ================================================ FILE: templates/android/hxml/final.hxml ================================================ -main ApplicationMain ::HAXE_FLAGS:: -cp ::OUTPUT_DIR::/haxe -cpp ::CPP_DIR:: --macro keep("::APP_MAIN::") -D android -D android-9 -D final ================================================ FILE: templates/android/hxml/release.hxml ================================================ -main ApplicationMain ::HAXE_FLAGS:: -cp ::OUTPUT_DIR::/haxe -cpp ::CPP_DIR:: --macro keep("::APP_MAIN::") -D android -D android-9 ================================================ FILE: templates/android/template/app/build.gradle ================================================ import groovy.swing.SwingBuilder import java.awt.GridBagLayout import java.awt.GridBagConstraints import javax.swing.border.EmptyBorder apply plugin: 'com.android.application' System.setProperty('java.awt.headless','false') //Uncomment to debug deprecation warnings. /* tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" } */ android { namespace "::APP_PACKAGE::" compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION) buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION ::if (ANDROID_GRADLE_PLUGIN>="4.0")::ndkPath '::ANDROID_NDK_ROOT_ESCAPED::'::end:: ::if (ANDROID_NDK_VERSION)::ndkVersion '::ANDROID_NDK_VERSION::'::end:: defaultConfig { applicationId "::META_PACKAGE_NAME::" minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION) targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION) versionCode Integer.parseInt(project.VERSION_CODE) versionName project.VERSION_NAME ::if (languages != null)::resConfigs ::foreach languages::"::__current__::", ::end::""::end:: } ::if KEY_STORE:: signingConfigs { if (project.KEY_STORE_PASSWORD == 'null') { def keyStoreFile = project.KEY_STORE.split('/') keyStoreFile = keyStoreFile[keyStoreFile.length - 1] project.KEY_STORE_PASSWORD = getPassword('\nPlease enter key password for ' + keyStoreFile + ':'); } if (project.KEY_STORE_ALIAS_PASSWORD == 'null') { project.KEY_STORE_ALIAS_PASSWORD = getPassword("\nPlease enter key alias password for alias " + project.KEY_STORE_ALIAS + ":") } release { storeFile file(project.KEY_STORE) storePassword project.KEY_STORE_PASSWORD keyAlias project.KEY_STORE_ALIAS keyPassword project.KEY_STORE_ALIAS_PASSWORD } } ::else:: File signingFile = file('signing.properties') if(signingFile.exists()) { Properties signing = new Properties() signing.load(new FileInputStream(signingFile)) signingConfigs { release { storeFile file(signing["KEY_STORE"]) storePassword signing["KEY_STORE_PASSWORD"] keyAlias signing["KEY_STORE_ALIAS"] keyPassword signing["KEY_STORE_ALIAS_PASSWORD"] } } } else { signingConfigs { release } } ::end:: buildTypes { release { minifyEnabled false signingConfig signingConfigs.release } } android.applicationVariants.all { variant -> variant.outputs.all { output -> if (outputFileName != null && outputFileName.endsWith('.apk')) { outputFileName = "::APP_FILE::-" + variant.buildType.name + ".apk" } } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) ::if (ANDROID_LIBRARY_PROJECTS)::::foreach (ANDROID_LIBRARY_PROJECTS)::implementation project(':deps:::name::') ::end::::end:: } def getPassword(message) { def password = ''; if (System.console() == null) { new SwingBuilder().edt { dialog( title: 'Enter password', alwaysOnTop: true, size: [350, 150], resizable: false, locationRelativeTo: null, pack: true, modal: true, show: true ) { lookAndFeel('system') panel(border: new EmptyBorder(10, 10, 10, 10)) { gridBagLayout() def gbc = new GridBagConstraints(); gbc.gridx = 0 gbc.gridy = 0 gbc.fill = GridBagConstraints.HORIZONTAL gbc.insets = [0, 0, 10, 0] label( text: '' + '' + message + '' + '', constraints: gbc) gbc.gridy = 1 input = passwordField(constraints: gbc) gbc.gridy = 2 gbc.fill = GridBagConstraints.NONE gbc.insets = [0, 0, 0, 0] gbc.ipadx = 50 button = button( defaultButton: true, text: 'OK', actionPerformed: { password = input.password dispose() }, constraints: gbc) } } } } else { password = System.console().readPassword(message) } return new String(password) } ================================================ FILE: templates/android/template/app/libs/readme.txt ================================================ place JAR files here ================================================ FILE: templates/android/template/app/src/main/AndroidManifest.xml ================================================ ::foreach ANDROID_PERMISSIONS:: ::end:: ::if (WIN_ORIENTATION=="portrait"):: ::elseif (WIN_ORIENTATION=="landscape"):: ::end:: ::foreach ANDROID_ACCEPT_FILE_INTENT:: ::end:: ================================================ FILE: templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java ================================================ package org.haxe.lime; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.VibrationEffect; import android.os.Vibrator; import android.view.DisplayCutout; import android.util.DisplayMetrics; import android.util.Log; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.OrientationEventListener; import android.view.View; import android.view.WindowInsets; import android.view.WindowManager; import android.webkit.MimeTypeMap; import android.Manifest; import org.haxe.extension.Extension; import org.libsdl.app.SDLActivity; import java.io.File; import java.util.ArrayList; import java.util.List; public class GameActivity extends SDLActivity { private static AssetManager assetManager; private static List extensions; private static DisplayMetrics metrics; private static DisplayCutout displayCutout; private static Vibrator vibrator; private static OrientationEventListener orientationListener; private static HaxeObject deviceOrientationListener; private static int deviceOrientation = SDL_ORIENTATION_UNKNOWN; public Handler handler; public static void setDeviceOrientationListener (HaxeObject object) { deviceOrientationListener = object; if (deviceOrientationListener != null) { deviceOrientationListener.call1("onOrientationChanged", deviceOrientation); } } public static double getDisplayXDPI () { if (metrics == null) { metrics = Extension.mainContext.getResources ().getDisplayMetrics (); } return metrics.xdpi; } public static int[] getDisplaySafeAreaInsets () { if (displayCutout == null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { WindowInsets windowInsets = ((GameActivity)Extension.mainContext).getWindow().getDecorView().getRootWindowInsets(); if (windowInsets != null) { displayCutout = windowInsets.getDisplayCutout(); } } } int[] result = {0, 0, 0, 0}; if (displayCutout != null) { result[0] = displayCutout.getSafeInsetLeft(); result[1] = displayCutout.getSafeInsetTop(); result[2] = displayCutout.getSafeInsetRight(); result[3] = displayCutout.getSafeInsetBottom(); } return result; } protected String[] getLibraries () { return new String[] { ::foreach ndlls::"::name::", ::end::"ApplicationMain" }; } @Override protected String getMainSharedObject () { return "libApplicationMain.so"; } @Override protected String getMainFunction () { return "hxcpp_main"; } @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { for (Extension extension : extensions) { if (!extension.onActivityResult (requestCode, resultCode, data)) { return; } } super.onActivityResult (requestCode, resultCode, data); } @Override public void onBackPressed () { for (Extension extension : extensions) { if (!extension.onBackPressed ()) { return; } } super.onBackPressed (); } protected void onCreate (Bundle state) { super.onCreate (state); orientationListener = new OrientationEventListener(this) { public void onOrientationChanged(int degrees) { int orientation = SDL_ORIENTATION_UNKNOWN; if (degrees >= 315 || (degrees >= 0 && degrees < 45)) { orientation = SDL_ORIENTATION_PORTRAIT; } else if (degrees >= 45 && degrees < 135) { orientation = SDL_ORIENTATION_LANDSCAPE_FLIPPED; } else if (degrees >= 135 && degrees < 225) { orientation = SDL_ORIENTATION_PORTRAIT_FLIPPED; } else if (degrees >= 225 && degrees < 315) { orientation = SDL_ORIENTATION_LANDSCAPE; } if (deviceOrientation != orientation) { deviceOrientation = orientation; if (deviceOrientationListener != null) { deviceOrientationListener.call1("onOrientationChanged", deviceOrientation); } } } }; assetManager = getAssets (); if (checkSelfPermission(Manifest.permission.VIBRATE) == PackageManager.PERMISSION_GRANTED) { vibrator = (Vibrator)mSingleton.getSystemService (Context.VIBRATOR_SERVICE); } handler = new Handler (Looper.getMainLooper ()); Extension.assetManager = assetManager; Extension.callbackHandler = handler; Extension.mainActivity = this; Extension.mainContext = this; Extension.mainView = mLayout; Extension.packageName = getApplicationContext ().getPackageName (); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { switch ("::ANDROID_DISPLAY_CUTOUT::") { case "always": getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; break; case "never": getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; break; case "shortEdges": getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; break; case "default": getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT; break; default: getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT; break; } } if (extensions == null) { extensions = new ArrayList (); ::if (ANDROID_EXTENSIONS != null)::::foreach ANDROID_EXTENSIONS:: extensions.add (new ::__current__:: ());::end::::end:: } for (Extension extension : extensions) { extension.onCreate (state); } } @Override protected void onDestroy () { for (Extension extension : extensions) { extension.onDestroy (); } super.onDestroy (); } @Override public void onLowMemory () { super.onLowMemory (); for (Extension extension : extensions) { extension.onLowMemory (); } } @Override protected void onNewIntent (final Intent intent) { for (Extension extension : extensions) { extension.onNewIntent (intent); } super.onNewIntent (intent); } @Override protected void onPause () { if (vibrator != null) { vibrator.cancel (); } orientationListener.disable(); super.onPause (); for (Extension extension : extensions) { extension.onPause (); } } ::if (ANDROID_TARGET_SDK_VERSION >= 23):: @Override public void onRequestPermissionsResult (int requestCode, String permissions[], int[] grantResults) { for (Extension extension : extensions) { if (!extension.onRequestPermissionsResult (requestCode, permissions, grantResults)) { return; } } super.onRequestPermissionsResult (requestCode, permissions, grantResults); } ::end:: @Override protected void onRestart () { super.onRestart (); for (Extension extension : extensions) { extension.onRestart (); } } @Override protected void onResume () { super.onResume (); orientationListener.enable(); for (Extension extension : extensions) { extension.onResume (); } } @Override protected void onRestoreInstanceState (Bundle savedState) { super.onRestoreInstanceState (savedState); for (Extension extension : extensions) { extension.onRestoreInstanceState (savedState); } } @Override protected void onSaveInstanceState (Bundle outState) { super.onSaveInstanceState (outState); for (Extension extension : extensions) { extension.onSaveInstanceState (outState); } } @Override protected void onStart () { super.onStart (); for (Extension extension : extensions) { extension.onStart (); } } @Override protected void onStop () { super.onStop (); for (Extension extension : extensions) { extension.onStop (); } } ::if (ANDROID_TARGET_SDK_VERSION >= 14):: @Override public void onTrimMemory (int level) { if (Build.VERSION.SDK_INT >= 14) { super.onTrimMemory (level); for (Extension extension : extensions) { extension.onTrimMemory (level); } } } ::end:: public static void openFile (String path) { try { String extension = path; int index = path.lastIndexOf ('.'); if (index > 0) { extension = path.substring (index + 1); } String mimeType = MimeTypeMap.getSingleton ().getMimeTypeFromExtension (extension); File file = new File (path); Intent intent = new Intent (); intent.setAction (Intent.ACTION_VIEW); intent.setDataAndType (Uri.fromFile (file), mimeType); Extension.mainActivity.startActivity (intent); } catch (Exception e) { Log.e ("GameActivity", e.toString ()); return; } } public static void openURL (String url, String target) { Intent browserIntent = new Intent (Intent.ACTION_VIEW).setData (Uri.parse (url)); try { Extension.mainActivity.startActivity (browserIntent); } catch (Exception e) { Log.e ("GameActivity", e.toString ()); return; } } public static void postUICallback (final long handle) { Extension.callbackHandler.post (new Runnable () { @Override public void run () { Lime.onCallback (handle); } }); } public static void vibrate (int period, int duration) { if (vibrator == null || !vibrator.hasVibrator () || period < 0 || duration <= 0) { return; } if (period == 0) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { vibrator.vibrate (VibrationEffect.createOneShot (duration, VibrationEffect.DEFAULT_AMPLITUDE)); } else { vibrator.vibrate (duration); } } else { // each period has two halves (vibrator off/vibrator on), and each half requires a separate entry in the array int periodMS = (int)Math.ceil (period / 2.0); int count = (int)Math.ceil (duration / (double) periodMS); long[] pattern = new long[count]; // the first entry is the delay before vibration starts, so leave it as 0 for (int i = 1; i < count; i++) { pattern[i] = periodMS; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { vibrator.vibrate (VibrationEffect.createWaveform (pattern, -1)); } else { vibrator.vibrate (pattern, -1); } } } } ================================================ FILE: templates/android/template/app/src/main/java/org/libsdl/app/HIDDevice.java ================================================ package org.libsdl.app; import android.hardware.usb.UsbDevice; interface HIDDevice { public int getId(); public int getVendorId(); public int getProductId(); public String getSerialNumber(); public int getVersion(); public String getManufacturerName(); public String getProductName(); public UsbDevice getDevice(); public boolean open(); public int sendFeatureReport(byte[] report); public int sendOutputReport(byte[] report); public boolean getFeatureReport(byte[] report); public void setFrozen(boolean frozen); public void close(); public void shutdown(); } ================================================ FILE: templates/android/template/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java ================================================ package org.libsdl.app; import android.content.Context; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCallback; import android.bluetooth.BluetoothGattCharacteristic; import android.bluetooth.BluetoothGattDescriptor; import android.bluetooth.BluetoothManager; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothGattService; import android.hardware.usb.UsbDevice; import android.os.Handler; import android.os.Looper; import android.util.Log; import android.os.*; //import com.android.internal.util.HexDump; import java.lang.Runnable; import java.util.Arrays; import java.util.LinkedList; import java.util.UUID; class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDevice { private static final String TAG = "hidapi"; private HIDDeviceManager mManager; private BluetoothDevice mDevice; private int mDeviceId; private BluetoothGatt mGatt; private boolean mIsRegistered = false; private boolean mIsConnected = false; private boolean mIsChromebook = false; private boolean mIsReconnecting = false; private boolean mFrozen = false; private LinkedList mOperations; GattOperation mCurrentOperation = null; private Handler mHandler; private static final int TRANSPORT_AUTO = 0; private static final int TRANSPORT_BREDR = 1; private static final int TRANSPORT_LE = 2; private static final int CHROMEBOOK_CONNECTION_CHECK_INTERVAL = 10000; static public final UUID steamControllerService = UUID.fromString("100F6C32-1735-4313-B402-38567131E5F3"); static public final UUID inputCharacteristic = UUID.fromString("100F6C33-1735-4313-B402-38567131E5F3"); static public final UUID reportCharacteristic = UUID.fromString("100F6C34-1735-4313-B402-38567131E5F3"); static private final byte[] enterValveMode = new byte[] { (byte)0xC0, (byte)0x87, 0x03, 0x08, 0x07, 0x00 }; static class GattOperation { private enum Operation { CHR_READ, CHR_WRITE, ENABLE_NOTIFICATION } Operation mOp; UUID mUuid; byte[] mValue; BluetoothGatt mGatt; boolean mResult = true; private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid) { mGatt = gatt; mOp = operation; mUuid = uuid; } private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid, byte[] value) { mGatt = gatt; mOp = operation; mUuid = uuid; mValue = value; } public void run() { // This is executed in main thread BluetoothGattCharacteristic chr; switch (mOp) { case CHR_READ: chr = getCharacteristic(mUuid); //Log.v(TAG, "Reading characteristic " + chr.getUuid()); if (!mGatt.readCharacteristic(chr)) { Log.e(TAG, "Unable to read characteristic " + mUuid.toString()); mResult = false; break; } mResult = true; break; case CHR_WRITE: chr = getCharacteristic(mUuid); //Log.v(TAG, "Writing characteristic " + chr.getUuid() + " value=" + HexDump.toHexString(value)); chr.setValue(mValue); if (!mGatt.writeCharacteristic(chr)) { Log.e(TAG, "Unable to write characteristic " + mUuid.toString()); mResult = false; break; } mResult = true; break; case ENABLE_NOTIFICATION: chr = getCharacteristic(mUuid); //Log.v(TAG, "Writing descriptor of " + chr.getUuid()); if (chr != null) { BluetoothGattDescriptor cccd = chr.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); if (cccd != null) { int properties = chr.getProperties(); byte[] value; if ((properties & BluetoothGattCharacteristic.PROPERTY_NOTIFY) == BluetoothGattCharacteristic.PROPERTY_NOTIFY) { value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE; } else if ((properties & BluetoothGattCharacteristic.PROPERTY_INDICATE) == BluetoothGattCharacteristic.PROPERTY_INDICATE) { value = BluetoothGattDescriptor.ENABLE_INDICATION_VALUE; } else { Log.e(TAG, "Unable to start notifications on input characteristic"); mResult = false; return; } mGatt.setCharacteristicNotification(chr, true); cccd.setValue(value); if (!mGatt.writeDescriptor(cccd)) { Log.e(TAG, "Unable to write descriptor " + mUuid.toString()); mResult = false; return; } mResult = true; } } } } public boolean finish() { return mResult; } private BluetoothGattCharacteristic getCharacteristic(UUID uuid) { BluetoothGattService valveService = mGatt.getService(steamControllerService); if (valveService == null) return null; return valveService.getCharacteristic(uuid); } static public GattOperation readCharacteristic(BluetoothGatt gatt, UUID uuid) { return new GattOperation(gatt, Operation.CHR_READ, uuid); } static public GattOperation writeCharacteristic(BluetoothGatt gatt, UUID uuid, byte[] value) { return new GattOperation(gatt, Operation.CHR_WRITE, uuid, value); } static public GattOperation enableNotification(BluetoothGatt gatt, UUID uuid) { return new GattOperation(gatt, Operation.ENABLE_NOTIFICATION, uuid); } } public HIDDeviceBLESteamController(HIDDeviceManager manager, BluetoothDevice device) { mManager = manager; mDevice = device; mDeviceId = mManager.getDeviceIDForIdentifier(getIdentifier()); mIsRegistered = false; mIsChromebook = mManager.getContext().getPackageManager().hasSystemFeature("org.chromium.arc.device_management"); mOperations = new LinkedList(); mHandler = new Handler(Looper.getMainLooper()); mGatt = connectGatt(); // final HIDDeviceBLESteamController finalThis = this; // mHandler.postDelayed(new Runnable() { // @Override // public void run() { // finalThis.checkConnectionForChromebookIssue(); // } // }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL); } public String getIdentifier() { return String.format("SteamController.%s", mDevice.getAddress()); } public BluetoothGatt getGatt() { return mGatt; } // Because on Chromebooks we show up as a dual-mode device, it will attempt to connect TRANSPORT_AUTO, which will use TRANSPORT_BREDR instead // of TRANSPORT_LE. Let's force ourselves to connect low energy. private BluetoothGatt connectGatt(boolean managed) { if (Build.VERSION.SDK_INT >= 23 /* Android 6.0 (M) */) { try { return mDevice.connectGatt(mManager.getContext(), managed, this, TRANSPORT_LE); } catch (Exception e) { return mDevice.connectGatt(mManager.getContext(), managed, this); } } else { return mDevice.connectGatt(mManager.getContext(), managed, this); } } private BluetoothGatt connectGatt() { return connectGatt(false); } protected int getConnectionState() { Context context = mManager.getContext(); if (context == null) { // We are lacking any context to get our Bluetooth information. We'll just assume disconnected. return BluetoothProfile.STATE_DISCONNECTED; } BluetoothManager btManager = (BluetoothManager)context.getSystemService(Context.BLUETOOTH_SERVICE); if (btManager == null) { // This device doesn't support Bluetooth. We should never be here, because how did // we instantiate a device to start with? return BluetoothProfile.STATE_DISCONNECTED; } return btManager.getConnectionState(mDevice, BluetoothProfile.GATT); } public void reconnect() { if (getConnectionState() != BluetoothProfile.STATE_CONNECTED) { mGatt.disconnect(); mGatt = connectGatt(); } } protected void checkConnectionForChromebookIssue() { if (!mIsChromebook) { // We only do this on Chromebooks, because otherwise it's really annoying to just attempt // over and over. return; } int connectionState = getConnectionState(); switch (connectionState) { case BluetoothProfile.STATE_CONNECTED: if (!mIsConnected) { // We are in the Bad Chromebook Place. We can force a disconnect // to try to recover. Log.v(TAG, "Chromebook: We are in a very bad state; the controller shows as connected in the underlying Bluetooth layer, but we never received a callback. Forcing a reconnect."); mIsReconnecting = true; mGatt.disconnect(); mGatt = connectGatt(false); break; } else if (!isRegistered()) { if (mGatt.getServices().size() > 0) { Log.v(TAG, "Chromebook: We are connected to a controller, but never got our registration. Trying to recover."); probeService(this); } else { Log.v(TAG, "Chromebook: We are connected to a controller, but never discovered services. Trying to recover."); mIsReconnecting = true; mGatt.disconnect(); mGatt = connectGatt(false); break; } } else { Log.v(TAG, "Chromebook: We are connected, and registered. Everything's good!"); return; } break; case BluetoothProfile.STATE_DISCONNECTED: Log.v(TAG, "Chromebook: We have either been disconnected, or the Chromebook BtGatt.ContextMap bug has bitten us. Attempting a disconnect/reconnect, but we may not be able to recover."); mIsReconnecting = true; mGatt.disconnect(); mGatt = connectGatt(false); break; case BluetoothProfile.STATE_CONNECTING: Log.v(TAG, "Chromebook: We're still trying to connect. Waiting a bit longer."); break; } final HIDDeviceBLESteamController finalThis = this; mHandler.postDelayed(new Runnable() { @Override public void run() { finalThis.checkConnectionForChromebookIssue(); } }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL); } private boolean isRegistered() { return mIsRegistered; } private void setRegistered() { mIsRegistered = true; } private boolean probeService(HIDDeviceBLESteamController controller) { if (isRegistered()) { return true; } if (!mIsConnected) { return false; } Log.v(TAG, "probeService controller=" + controller); for (BluetoothGattService service : mGatt.getServices()) { if (service.getUuid().equals(steamControllerService)) { Log.v(TAG, "Found Valve steam controller service " + service.getUuid()); for (BluetoothGattCharacteristic chr : service.getCharacteristics()) { if (chr.getUuid().equals(inputCharacteristic)) { Log.v(TAG, "Found input characteristic"); // Start notifications BluetoothGattDescriptor cccd = chr.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); if (cccd != null) { enableNotification(chr.getUuid()); } } } return true; } } if ((mGatt.getServices().size() == 0) && mIsChromebook && !mIsReconnecting) { Log.e(TAG, "Chromebook: Discovered services were empty; this almost certainly means the BtGatt.ContextMap bug has bitten us."); mIsConnected = false; mIsReconnecting = true; mGatt.disconnect(); mGatt = connectGatt(false); } return false; } ////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// private void finishCurrentGattOperation() { GattOperation op = null; synchronized (mOperations) { if (mCurrentOperation != null) { op = mCurrentOperation; mCurrentOperation = null; } } if (op != null) { boolean result = op.finish(); // TODO: Maybe in main thread as well? // Our operation failed, let's add it back to the beginning of our queue. if (!result) { mOperations.addFirst(op); } } executeNextGattOperation(); } private void executeNextGattOperation() { synchronized (mOperations) { if (mCurrentOperation != null) return; if (mOperations.isEmpty()) return; mCurrentOperation = mOperations.removeFirst(); } // Run in main thread mHandler.post(new Runnable() { @Override public void run() { synchronized (mOperations) { if (mCurrentOperation == null) { Log.e(TAG, "Current operation null in executor?"); return; } mCurrentOperation.run(); // now wait for the GATT callback and when it comes, finish this operation } } }); } private void queueGattOperation(GattOperation op) { synchronized (mOperations) { mOperations.add(op); } executeNextGattOperation(); } private void enableNotification(UUID chrUuid) { GattOperation op = HIDDeviceBLESteamController.GattOperation.enableNotification(mGatt, chrUuid); queueGattOperation(op); } public void writeCharacteristic(UUID uuid, byte[] value) { GattOperation op = HIDDeviceBLESteamController.GattOperation.writeCharacteristic(mGatt, uuid, value); queueGattOperation(op); } public void readCharacteristic(UUID uuid) { GattOperation op = HIDDeviceBLESteamController.GattOperation.readCharacteristic(mGatt, uuid); queueGattOperation(op); } ////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////// BluetoothGattCallback overridden methods ////////////////////////////////////////////////////////////////////////////////////////////////////// public void onConnectionStateChange(BluetoothGatt g, int status, int newState) { //Log.v(TAG, "onConnectionStateChange status=" + status + " newState=" + newState); mIsReconnecting = false; if (newState == 2) { mIsConnected = true; // Run directly, without GattOperation if (!isRegistered()) { mHandler.post(new Runnable() { @Override public void run() { mGatt.discoverServices(); } }); } } else if (newState == 0) { mIsConnected = false; } // Disconnection is handled in SteamLink using the ACTION_ACL_DISCONNECTED Intent. } public void onServicesDiscovered(BluetoothGatt gatt, int status) { //Log.v(TAG, "onServicesDiscovered status=" + status); if (status == 0) { if (gatt.getServices().size() == 0) { Log.v(TAG, "onServicesDiscovered returned zero services; something has gone horribly wrong down in Android's Bluetooth stack."); mIsReconnecting = true; mIsConnected = false; gatt.disconnect(); mGatt = connectGatt(false); } else { probeService(this); } } } public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { //Log.v(TAG, "onCharacteristicRead status=" + status + " uuid=" + characteristic.getUuid()); if (characteristic.getUuid().equals(reportCharacteristic) && !mFrozen) { mManager.HIDDeviceFeatureReport(getId(), characteristic.getValue()); } finishCurrentGattOperation(); } public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { //Log.v(TAG, "onCharacteristicWrite status=" + status + " uuid=" + characteristic.getUuid()); if (characteristic.getUuid().equals(reportCharacteristic)) { // Only register controller with the native side once it has been fully configured if (!isRegistered()) { Log.v(TAG, "Registering Steam Controller with ID: " + getId()); mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0, 0, 0, 0); setRegistered(); } } finishCurrentGattOperation(); } public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { // Enable this for verbose logging of controller input reports //Log.v(TAG, "onCharacteristicChanged uuid=" + characteristic.getUuid() + " data=" + HexDump.dumpHexString(characteristic.getValue())); if (characteristic.getUuid().equals(inputCharacteristic) && !mFrozen) { mManager.HIDDeviceInputReport(getId(), characteristic.getValue()); } } public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { //Log.v(TAG, "onDescriptorRead status=" + status); } public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) { BluetoothGattCharacteristic chr = descriptor.getCharacteristic(); //Log.v(TAG, "onDescriptorWrite status=" + status + " uuid=" + chr.getUuid() + " descriptor=" + descriptor.getUuid()); if (chr.getUuid().equals(inputCharacteristic)) { boolean hasWrittenInputDescriptor = true; BluetoothGattCharacteristic reportChr = chr.getService().getCharacteristic(reportCharacteristic); if (reportChr != null) { Log.v(TAG, "Writing report characteristic to enter valve mode"); reportChr.setValue(enterValveMode); gatt.writeCharacteristic(reportChr); } } finishCurrentGattOperation(); } public void onReliableWriteCompleted(BluetoothGatt gatt, int status) { //Log.v(TAG, "onReliableWriteCompleted status=" + status); } public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) { //Log.v(TAG, "onReadRemoteRssi status=" + status); } public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { //Log.v(TAG, "onMtuChanged status=" + status); } ////////////////////////////////////////////////////////////////////////////////////////////////////// //////// Public API ////////////////////////////////////////////////////////////////////////////////////////////////////// @Override public int getId() { return mDeviceId; } @Override public int getVendorId() { // Valve Corporation final int VALVE_USB_VID = 0x28DE; return VALVE_USB_VID; } @Override public int getProductId() { // We don't have an easy way to query from the Bluetooth device, but we know what it is final int D0G_BLE2_PID = 0x1106; return D0G_BLE2_PID; } @Override public String getSerialNumber() { // This will be read later via feature report by Steam return "12345"; } @Override public int getVersion() { return 0; } @Override public String getManufacturerName() { return "Valve Corporation"; } @Override public String getProductName() { return "Steam Controller"; } @Override public UsbDevice getDevice() { return null; } @Override public boolean open() { return true; } @Override public int sendFeatureReport(byte[] report) { if (!isRegistered()) { Log.e(TAG, "Attempted sendFeatureReport before Steam Controller is registered!"); if (mIsConnected) { probeService(this); } return -1; } // We need to skip the first byte, as that doesn't go over the air byte[] actual_report = Arrays.copyOfRange(report, 1, report.length - 1); //Log.v(TAG, "sendFeatureReport " + HexDump.dumpHexString(actual_report)); writeCharacteristic(reportCharacteristic, actual_report); return report.length; } @Override public int sendOutputReport(byte[] report) { if (!isRegistered()) { Log.e(TAG, "Attempted sendOutputReport before Steam Controller is registered!"); if (mIsConnected) { probeService(this); } return -1; } //Log.v(TAG, "sendFeatureReport " + HexDump.dumpHexString(report)); writeCharacteristic(reportCharacteristic, report); return report.length; } @Override public boolean getFeatureReport(byte[] report) { if (!isRegistered()) { Log.e(TAG, "Attempted getFeatureReport before Steam Controller is registered!"); if (mIsConnected) { probeService(this); } return false; } //Log.v(TAG, "getFeatureReport"); readCharacteristic(reportCharacteristic); return true; } @Override public void close() { } @Override public void setFrozen(boolean frozen) { mFrozen = frozen; } @Override public void shutdown() { close(); BluetoothGatt g = mGatt; if (g != null) { g.disconnect(); g.close(); mGatt = null; } mManager = null; mIsRegistered = false; mIsConnected = false; mOperations.clear(); } } ================================================ FILE: templates/android/template/app/src/main/java/org/libsdl/app/HIDDeviceManager.java ================================================ package org.libsdl.app; import android.app.Activity; import android.app.AlertDialog; import android.app.PendingIntent; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothManager; import android.bluetooth.BluetoothProfile; import android.os.Build; import android.util.Log; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.hardware.usb.*; import android.os.Handler; import android.os.Looper; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; public class HIDDeviceManager { private static final String TAG = "hidapi"; private static final String ACTION_USB_PERMISSION = "org.libsdl.app.USB_PERMISSION"; private static HIDDeviceManager sManager; private static int sManagerRefCount = 0; public static HIDDeviceManager acquire(Context context) { if (sManagerRefCount == 0) { sManager = new HIDDeviceManager(context); } ++sManagerRefCount; return sManager; } public static void release(HIDDeviceManager manager) { if (manager == sManager) { --sManagerRefCount; if (sManagerRefCount == 0) { sManager.close(); sManager = null; } } } private Context mContext; private HashMap mDevicesById = new HashMap(); private HashMap mBluetoothDevices = new HashMap(); private int mNextDeviceId = 0; private SharedPreferences mSharedPreferences = null; private boolean mIsChromebook = false; private UsbManager mUsbManager; private Handler mHandler; private BluetoothManager mBluetoothManager; private List mLastBluetoothDevices; private final BroadcastReceiver mUsbBroadcast = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); handleUsbDeviceAttached(usbDevice); } else if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) { UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); handleUsbDeviceDetached(usbDevice); } else if (action.equals(HIDDeviceManager.ACTION_USB_PERMISSION)) { UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); handleUsbDevicePermission(usbDevice, intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)); } } }; private final BroadcastReceiver mBluetoothBroadcast = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); // Bluetooth device was connected. If it was a Steam Controller, handle it if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.d(TAG, "Bluetooth device connected: " + device); if (isSteamController(device)) { connectBluetoothDevice(device); } } // Bluetooth device was disconnected, remove from controller manager (if any) if (action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.d(TAG, "Bluetooth device disconnected: " + device); disconnectBluetoothDevice(device); } } }; private HIDDeviceManager(final Context context) { mContext = context; HIDDeviceRegisterCallback(); mSharedPreferences = mContext.getSharedPreferences("hidapi", Context.MODE_PRIVATE); mIsChromebook = mContext.getPackageManager().hasSystemFeature("org.chromium.arc.device_management"); // if (shouldClear) { // SharedPreferences.Editor spedit = mSharedPreferences.edit(); // spedit.clear(); // spedit.commit(); // } // else { mNextDeviceId = mSharedPreferences.getInt("next_device_id", 0); } } public Context getContext() { return mContext; } public int getDeviceIDForIdentifier(String identifier) { SharedPreferences.Editor spedit = mSharedPreferences.edit(); int result = mSharedPreferences.getInt(identifier, 0); if (result == 0) { result = mNextDeviceId++; spedit.putInt("next_device_id", mNextDeviceId); } spedit.putInt(identifier, result); spedit.commit(); return result; } private void initializeUSB() { mUsbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE); if (mUsbManager == null) { return; } /* // Logging for (UsbDevice device : mUsbManager.getDeviceList().values()) { Log.i(TAG,"Path: " + device.getDeviceName()); Log.i(TAG,"Manufacturer: " + device.getManufacturerName()); Log.i(TAG,"Product: " + device.getProductName()); Log.i(TAG,"ID: " + device.getDeviceId()); Log.i(TAG,"Class: " + device.getDeviceClass()); Log.i(TAG,"Protocol: " + device.getDeviceProtocol()); Log.i(TAG,"Vendor ID " + device.getVendorId()); Log.i(TAG,"Product ID: " + device.getProductId()); Log.i(TAG,"Interface count: " + device.getInterfaceCount()); Log.i(TAG,"---------------------------------------"); // Get interface details for (int index = 0; index < device.getInterfaceCount(); index++) { UsbInterface mUsbInterface = device.getInterface(index); Log.i(TAG," ***** *****"); Log.i(TAG," Interface index: " + index); Log.i(TAG," Interface ID: " + mUsbInterface.getId()); Log.i(TAG," Interface class: " + mUsbInterface.getInterfaceClass()); Log.i(TAG," Interface subclass: " + mUsbInterface.getInterfaceSubclass()); Log.i(TAG," Interface protocol: " + mUsbInterface.getInterfaceProtocol()); Log.i(TAG," Endpoint count: " + mUsbInterface.getEndpointCount()); // Get endpoint details for (int epi = 0; epi < mUsbInterface.getEndpointCount(); epi++) { UsbEndpoint mEndpoint = mUsbInterface.getEndpoint(epi); Log.i(TAG," ++++ ++++ ++++"); Log.i(TAG," Endpoint index: " + epi); Log.i(TAG," Attributes: " + mEndpoint.getAttributes()); Log.i(TAG," Direction: " + mEndpoint.getDirection()); Log.i(TAG," Number: " + mEndpoint.getEndpointNumber()); Log.i(TAG," Interval: " + mEndpoint.getInterval()); Log.i(TAG," Packet size: " + mEndpoint.getMaxPacketSize()); Log.i(TAG," Type: " + mEndpoint.getType()); } } } Log.i(TAG," No more devices connected."); */ // Register for USB broadcasts and permission completions IntentFilter filter = new IntentFilter(); filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); filter.addAction(HIDDeviceManager.ACTION_USB_PERMISSION); mContext.registerReceiver(mUsbBroadcast, filter); for (UsbDevice usbDevice : mUsbManager.getDeviceList().values()) { handleUsbDeviceAttached(usbDevice); } } UsbManager getUSBManager() { return mUsbManager; } private void shutdownUSB() { try { mContext.unregisterReceiver(mUsbBroadcast); } catch (Exception e) { // We may not have registered, that's okay } } private boolean isHIDDeviceInterface(UsbDevice usbDevice, UsbInterface usbInterface) { if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_HID) { return true; } if (isXbox360Controller(usbDevice, usbInterface) || isXboxOneController(usbDevice, usbInterface)) { return true; } return false; } private boolean isXbox360Controller(UsbDevice usbDevice, UsbInterface usbInterface) { final int XB360_IFACE_SUBCLASS = 93; final int XB360_IFACE_PROTOCOL = 1; // Wired final int XB360W_IFACE_PROTOCOL = 129; // Wireless final int[] SUPPORTED_VENDORS = { 0x0079, // GPD Win 2 0x044f, // Thrustmaster 0x045e, // Microsoft 0x046d, // Logitech 0x056e, // Elecom 0x06a3, // Saitek 0x0738, // Mad Catz 0x07ff, // Mad Catz 0x0e6f, // PDP 0x0f0d, // Hori 0x1038, // SteelSeries 0x11c9, // Nacon 0x12ab, // Unknown 0x1430, // RedOctane 0x146b, // BigBen 0x1532, // Razer Sabertooth 0x15e4, // Numark 0x162e, // Joytech 0x1689, // Razer Onza 0x1949, // Lab126, Inc. 0x1bad, // Harmonix 0x20d6, // PowerA 0x24c6, // PowerA 0x2c22, // Qanba 0x2dc8, // 8BitDo 0x9886, // ASTRO Gaming }; if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC && usbInterface.getInterfaceSubclass() == XB360_IFACE_SUBCLASS && (usbInterface.getInterfaceProtocol() == XB360_IFACE_PROTOCOL || usbInterface.getInterfaceProtocol() == XB360W_IFACE_PROTOCOL)) { int vendor_id = usbDevice.getVendorId(); for (int supportedVid : SUPPORTED_VENDORS) { if (vendor_id == supportedVid) { return true; } } } return false; } private boolean isXboxOneController(UsbDevice usbDevice, UsbInterface usbInterface) { final int XB1_IFACE_SUBCLASS = 71; final int XB1_IFACE_PROTOCOL = 208; final int[] SUPPORTED_VENDORS = { 0x03f0, // HP 0x044f, // Thrustmaster 0x045e, // Microsoft 0x0738, // Mad Catz 0x0b05, // ASUS 0x0e6f, // PDP 0x0f0d, // Hori 0x10f5, // Turtle Beach 0x1532, // Razer Wildcat 0x20d6, // PowerA 0x24c6, // PowerA 0x2dc8, // 8BitDo 0x2e24, // Hyperkin 0x3537, // GameSir }; if (usbInterface.getId() == 0 && usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC && usbInterface.getInterfaceSubclass() == XB1_IFACE_SUBCLASS && usbInterface.getInterfaceProtocol() == XB1_IFACE_PROTOCOL) { int vendor_id = usbDevice.getVendorId(); for (int supportedVid : SUPPORTED_VENDORS) { if (vendor_id == supportedVid) { return true; } } } return false; } private void handleUsbDeviceAttached(UsbDevice usbDevice) { connectHIDDeviceUSB(usbDevice); } private void handleUsbDeviceDetached(UsbDevice usbDevice) { List devices = new ArrayList(); for (HIDDevice device : mDevicesById.values()) { if (usbDevice.equals(device.getDevice())) { devices.add(device.getId()); } } for (int id : devices) { HIDDevice device = mDevicesById.get(id); mDevicesById.remove(id); device.shutdown(); HIDDeviceDisconnected(id); } } private void handleUsbDevicePermission(UsbDevice usbDevice, boolean permission_granted) { for (HIDDevice device : mDevicesById.values()) { if (usbDevice.equals(device.getDevice())) { boolean opened = false; if (permission_granted) { opened = device.open(); } HIDDeviceOpenResult(device.getId(), opened); } } } private void connectHIDDeviceUSB(UsbDevice usbDevice) { synchronized (this) { int interface_mask = 0; for (int interface_index = 0; interface_index < usbDevice.getInterfaceCount(); interface_index++) { UsbInterface usbInterface = usbDevice.getInterface(interface_index); if (isHIDDeviceInterface(usbDevice, usbInterface)) { // Check to see if we've already added this interface // This happens with the Xbox Series X controller which has a duplicate interface 0, which is inactive int interface_id = usbInterface.getId(); if ((interface_mask & (1 << interface_id)) != 0) { continue; } interface_mask |= (1 << interface_id); HIDDeviceUSB device = new HIDDeviceUSB(this, usbDevice, interface_index); int id = device.getId(); mDevicesById.put(id, device); HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), usbInterface.getId(), usbInterface.getInterfaceClass(), usbInterface.getInterfaceSubclass(), usbInterface.getInterfaceProtocol()); } } } } private void initializeBluetooth() { Log.d(TAG, "Initializing Bluetooth"); if (Build.VERSION.SDK_INT >= 31 /* Android 12 */ && mContext.getPackageManager().checkPermission(android.Manifest.permission.BLUETOOTH_CONNECT, mContext.getPackageName()) != PackageManager.PERMISSION_GRANTED) { Log.d(TAG, "Couldn't initialize Bluetooth, missing android.permission.BLUETOOTH_CONNECT"); return; } if (Build.VERSION.SDK_INT <= 30 /* Android 11.0 (R) */ && mContext.getPackageManager().checkPermission(android.Manifest.permission.BLUETOOTH, mContext.getPackageName()) != PackageManager.PERMISSION_GRANTED) { Log.d(TAG, "Couldn't initialize Bluetooth, missing android.permission.BLUETOOTH"); return; } if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE) || (Build.VERSION.SDK_INT < 18 /* Android 4.3 (JELLY_BEAN_MR2) */)) { Log.d(TAG, "Couldn't initialize Bluetooth, this version of Android does not support Bluetooth LE"); return; } // Find bonded bluetooth controllers and create SteamControllers for them mBluetoothManager = (BluetoothManager)mContext.getSystemService(Context.BLUETOOTH_SERVICE); if (mBluetoothManager == null) { // This device doesn't support Bluetooth. return; } BluetoothAdapter btAdapter = mBluetoothManager.getAdapter(); if (btAdapter == null) { // This device has Bluetooth support in the codebase, but has no available adapters. return; } // Get our bonded devices. for (BluetoothDevice device : btAdapter.getBondedDevices()) { Log.d(TAG, "Bluetooth device available: " + device); if (isSteamController(device)) { connectBluetoothDevice(device); } } // NOTE: These don't work on Chromebooks, to my undying dismay. IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); mContext.registerReceiver(mBluetoothBroadcast, filter); if (mIsChromebook) { mHandler = new Handler(Looper.getMainLooper()); mLastBluetoothDevices = new ArrayList(); // final HIDDeviceManager finalThis = this; // mHandler.postDelayed(new Runnable() { // @Override // public void run() { // finalThis.chromebookConnectionHandler(); // } // }, 5000); } } private void shutdownBluetooth() { try { mContext.unregisterReceiver(mBluetoothBroadcast); } catch (Exception e) { // We may not have registered, that's okay } } // Chromebooks do not pass along ACTION_ACL_CONNECTED / ACTION_ACL_DISCONNECTED properly. // This function provides a sort of dummy version of that, watching for changes in the // connected devices and attempting to add controllers as things change. public void chromebookConnectionHandler() { if (!mIsChromebook) { return; } ArrayList disconnected = new ArrayList(); ArrayList connected = new ArrayList(); List currentConnected = mBluetoothManager.getConnectedDevices(BluetoothProfile.GATT); for (BluetoothDevice bluetoothDevice : currentConnected) { if (!mLastBluetoothDevices.contains(bluetoothDevice)) { connected.add(bluetoothDevice); } } for (BluetoothDevice bluetoothDevice : mLastBluetoothDevices) { if (!currentConnected.contains(bluetoothDevice)) { disconnected.add(bluetoothDevice); } } mLastBluetoothDevices = currentConnected; for (BluetoothDevice bluetoothDevice : disconnected) { disconnectBluetoothDevice(bluetoothDevice); } for (BluetoothDevice bluetoothDevice : connected) { connectBluetoothDevice(bluetoothDevice); } final HIDDeviceManager finalThis = this; mHandler.postDelayed(new Runnable() { @Override public void run() { finalThis.chromebookConnectionHandler(); } }, 10000); } public boolean connectBluetoothDevice(BluetoothDevice bluetoothDevice) { Log.v(TAG, "connectBluetoothDevice device=" + bluetoothDevice); synchronized (this) { if (mBluetoothDevices.containsKey(bluetoothDevice)) { Log.v(TAG, "Steam controller with address " + bluetoothDevice + " already exists, attempting reconnect"); HIDDeviceBLESteamController device = mBluetoothDevices.get(bluetoothDevice); device.reconnect(); return false; } HIDDeviceBLESteamController device = new HIDDeviceBLESteamController(this, bluetoothDevice); int id = device.getId(); mBluetoothDevices.put(bluetoothDevice, device); mDevicesById.put(id, device); // The Steam Controller will mark itself connected once initialization is complete } return true; } public void disconnectBluetoothDevice(BluetoothDevice bluetoothDevice) { synchronized (this) { HIDDeviceBLESteamController device = mBluetoothDevices.get(bluetoothDevice); if (device == null) return; int id = device.getId(); mBluetoothDevices.remove(bluetoothDevice); mDevicesById.remove(id); device.shutdown(); HIDDeviceDisconnected(id); } } public boolean isSteamController(BluetoothDevice bluetoothDevice) { // Sanity check. If you pass in a null device, by definition it is never a Steam Controller. if (bluetoothDevice == null) { return false; } // If the device has no local name, we really don't want to try an equality check against it. if (bluetoothDevice.getName() == null) { return false; } return bluetoothDevice.getName().equals("SteamController") && ((bluetoothDevice.getType() & BluetoothDevice.DEVICE_TYPE_LE) != 0); } private void close() { shutdownUSB(); shutdownBluetooth(); synchronized (this) { for (HIDDevice device : mDevicesById.values()) { device.shutdown(); } mDevicesById.clear(); mBluetoothDevices.clear(); HIDDeviceReleaseCallback(); } } public void setFrozen(boolean frozen) { synchronized (this) { for (HIDDevice device : mDevicesById.values()) { device.setFrozen(frozen); } } } ////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////// private HIDDevice getDevice(int id) { synchronized (this) { HIDDevice result = mDevicesById.get(id); if (result == null) { Log.v(TAG, "No device for id: " + id); Log.v(TAG, "Available devices: " + mDevicesById.keySet()); } return result; } } ////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// JNI interface functions ////////////////////////////////////////////////////////////////////////////////////////////////////// public boolean initialize(boolean usb, boolean bluetooth) { Log.v(TAG, "initialize(" + usb + ", " + bluetooth + ")"); if (usb) { initializeUSB(); } if (bluetooth) { initializeBluetooth(); } return true; } public boolean openDevice(int deviceID) { Log.v(TAG, "openDevice deviceID=" + deviceID); HIDDevice device = getDevice(deviceID); if (device == null) { HIDDeviceDisconnected(deviceID); return false; } // Look to see if this is a USB device and we have permission to access it UsbDevice usbDevice = device.getDevice(); if (usbDevice != null && !mUsbManager.hasPermission(usbDevice)) { HIDDeviceOpenPending(deviceID); try { final int FLAG_MUTABLE = 0x02000000; // PendingIntent.FLAG_MUTABLE, but don't require SDK 31 int flags; if (Build.VERSION.SDK_INT >= 31 /* Android 12.0 (S) */) { flags = FLAG_MUTABLE; } else { flags = 0; } if (Build.VERSION.SDK_INT >= 33 /* Android 14.0 (U) */) { Intent intent = new Intent(HIDDeviceManager.ACTION_USB_PERMISSION); intent.setPackage(mContext.getPackageName()); mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, intent, flags)); } else { mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), flags)); } } catch (Exception e) { Log.v(TAG, "Couldn't request permission for USB device " + usbDevice); HIDDeviceOpenResult(deviceID, false); } return false; } try { return device.open(); } catch (Exception e) { Log.e(TAG, "Got exception: " + Log.getStackTraceString(e)); } return false; } public int sendOutputReport(int deviceID, byte[] report) { try { //Log.v(TAG, "sendOutputReport deviceID=" + deviceID + " length=" + report.length); HIDDevice device; device = getDevice(deviceID); if (device == null) { HIDDeviceDisconnected(deviceID); return -1; } return device.sendOutputReport(report); } catch (Exception e) { Log.e(TAG, "Got exception: " + Log.getStackTraceString(e)); } return -1; } public int sendFeatureReport(int deviceID, byte[] report) { try { //Log.v(TAG, "sendFeatureReport deviceID=" + deviceID + " length=" + report.length); HIDDevice device; device = getDevice(deviceID); if (device == null) { HIDDeviceDisconnected(deviceID); return -1; } return device.sendFeatureReport(report); } catch (Exception e) { Log.e(TAG, "Got exception: " + Log.getStackTraceString(e)); } return -1; } public boolean getFeatureReport(int deviceID, byte[] report) { try { //Log.v(TAG, "getFeatureReport deviceID=" + deviceID); HIDDevice device; device = getDevice(deviceID); if (device == null) { HIDDeviceDisconnected(deviceID); return false; } return device.getFeatureReport(report); } catch (Exception e) { Log.e(TAG, "Got exception: " + Log.getStackTraceString(e)); } return false; } public void closeDevice(int deviceID) { try { Log.v(TAG, "closeDevice deviceID=" + deviceID); HIDDevice device; device = getDevice(deviceID); if (device == null) { HIDDeviceDisconnected(deviceID); return; } device.close(); } catch (Exception e) { Log.e(TAG, "Got exception: " + Log.getStackTraceString(e)); } } ////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////// Native methods ////////////////////////////////////////////////////////////////////////////////////////////////////// private native void HIDDeviceRegisterCallback(); private native void HIDDeviceReleaseCallback(); native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number, int interface_class, int interface_subclass, int interface_protocol); native void HIDDeviceOpenPending(int deviceID); native void HIDDeviceOpenResult(int deviceID, boolean opened); native void HIDDeviceDisconnected(int deviceID); native void HIDDeviceInputReport(int deviceID, byte[] report); native void HIDDeviceFeatureReport(int deviceID, byte[] report); } ================================================ FILE: templates/android/template/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java ================================================ package org.libsdl.app; import android.hardware.usb.*; import android.os.Build; import android.util.Log; import java.util.Arrays; class HIDDeviceUSB implements HIDDevice { private static final String TAG = "hidapi"; protected HIDDeviceManager mManager; protected UsbDevice mDevice; protected int mInterfaceIndex; protected int mInterface; protected int mDeviceId; protected UsbDeviceConnection mConnection; protected UsbEndpoint mInputEndpoint; protected UsbEndpoint mOutputEndpoint; protected InputThread mInputThread; protected boolean mRunning; protected boolean mFrozen; public HIDDeviceUSB(HIDDeviceManager manager, UsbDevice usbDevice, int interface_index) { mManager = manager; mDevice = usbDevice; mInterfaceIndex = interface_index; mInterface = mDevice.getInterface(mInterfaceIndex).getId(); mDeviceId = manager.getDeviceIDForIdentifier(getIdentifier()); mRunning = false; } public String getIdentifier() { return String.format("%s/%x/%x/%d", mDevice.getDeviceName(), mDevice.getVendorId(), mDevice.getProductId(), mInterfaceIndex); } @Override public int getId() { return mDeviceId; } @Override public int getVendorId() { return mDevice.getVendorId(); } @Override public int getProductId() { return mDevice.getProductId(); } @Override public String getSerialNumber() { String result = null; if (Build.VERSION.SDK_INT >= 21 /* Android 5.0 (LOLLIPOP) */) { try { result = mDevice.getSerialNumber(); } catch (SecurityException exception) { //Log.w(TAG, "App permissions mean we cannot get serial number for device " + getDeviceName() + " message: " + exception.getMessage()); } } if (result == null) { result = ""; } return result; } @Override public int getVersion() { return 0; } @Override public String getManufacturerName() { String result = null; if (Build.VERSION.SDK_INT >= 21 /* Android 5.0 (LOLLIPOP) */) { result = mDevice.getManufacturerName(); } if (result == null) { result = String.format("%x", getVendorId()); } return result; } @Override public String getProductName() { String result = null; if (Build.VERSION.SDK_INT >= 21 /* Android 5.0 (LOLLIPOP) */) { result = mDevice.getProductName(); } if (result == null) { result = String.format("%x", getProductId()); } return result; } @Override public UsbDevice getDevice() { return mDevice; } public String getDeviceName() { return getManufacturerName() + " " + getProductName() + "(0x" + String.format("%x", getVendorId()) + "/0x" + String.format("%x", getProductId()) + ")"; } @Override public boolean open() { mConnection = mManager.getUSBManager().openDevice(mDevice); if (mConnection == null) { Log.w(TAG, "Unable to open USB device " + getDeviceName()); return false; } // Force claim our interface UsbInterface iface = mDevice.getInterface(mInterfaceIndex); if (!mConnection.claimInterface(iface, true)) { Log.w(TAG, "Failed to claim interfaces on USB device " + getDeviceName()); close(); return false; } // Find the endpoints for (int j = 0; j < iface.getEndpointCount(); j++) { UsbEndpoint endpt = iface.getEndpoint(j); switch (endpt.getDirection()) { case UsbConstants.USB_DIR_IN: if (mInputEndpoint == null) { mInputEndpoint = endpt; } break; case UsbConstants.USB_DIR_OUT: if (mOutputEndpoint == null) { mOutputEndpoint = endpt; } break; } } // Make sure the required endpoints were present if (mInputEndpoint == null || mOutputEndpoint == null) { Log.w(TAG, "Missing required endpoint on USB device " + getDeviceName()); close(); return false; } // Start listening for input mRunning = true; mInputThread = new InputThread(); mInputThread.start(); return true; } @Override public int sendFeatureReport(byte[] report) { int res = -1; int offset = 0; int length = report.length; boolean skipped_report_id = false; byte report_number = report[0]; if (report_number == 0x0) { ++offset; --length; skipped_report_id = true; } res = mConnection.controlTransfer( UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_OUT, 0x09/*HID set_report*/, (3/*HID feature*/ << 8) | report_number, mInterface, report, offset, length, 1000/*timeout millis*/); if (res < 0) { Log.w(TAG, "sendFeatureReport() returned " + res + " on device " + getDeviceName()); return -1; } if (skipped_report_id) { ++length; } return length; } @Override public int sendOutputReport(byte[] report) { int r = mConnection.bulkTransfer(mOutputEndpoint, report, report.length, 1000); if (r != report.length) { Log.w(TAG, "sendOutputReport() returned " + r + " on device " + getDeviceName()); } return r; } @Override public boolean getFeatureReport(byte[] report) { int res = -1; int offset = 0; int length = report.length; boolean skipped_report_id = false; byte report_number = report[0]; if (report_number == 0x0) { /* Offset the return buffer by 1, so that the report ID will remain in byte 0. */ ++offset; --length; skipped_report_id = true; } res = mConnection.controlTransfer( UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_IN, 0x01/*HID get_report*/, (3/*HID feature*/ << 8) | report_number, mInterface, report, offset, length, 1000/*timeout millis*/); if (res < 0) { Log.w(TAG, "getFeatureReport() returned " + res + " on device " + getDeviceName()); return false; } if (skipped_report_id) { ++res; ++length; } byte[] data; if (res == length) { data = report; } else { data = Arrays.copyOfRange(report, 0, res); } mManager.HIDDeviceFeatureReport(mDeviceId, data); return true; } @Override public void close() { mRunning = false; if (mInputThread != null) { while (mInputThread.isAlive()) { mInputThread.interrupt(); try { mInputThread.join(); } catch (InterruptedException e) { // Keep trying until we're done } } mInputThread = null; } if (mConnection != null) { UsbInterface iface = mDevice.getInterface(mInterfaceIndex); mConnection.releaseInterface(iface); mConnection.close(); mConnection = null; } } @Override public void shutdown() { close(); mManager = null; } @Override public void setFrozen(boolean frozen) { mFrozen = frozen; } protected class InputThread extends Thread { @Override public void run() { int packetSize = mInputEndpoint.getMaxPacketSize(); byte[] packet = new byte[packetSize]; while (mRunning) { int r; try { r = mConnection.bulkTransfer(mInputEndpoint, packet, packetSize, 1000); } catch (Exception e) { Log.v(TAG, "Exception in UsbDeviceConnection bulktransfer: " + e); break; } if (r < 0) { // Could be a timeout or an I/O error } if (r > 0) { byte[] data; if (r == packetSize) { data = packet; } else { data = Arrays.copyOfRange(packet, 0, r); } if (!mFrozen) { mManager.HIDDeviceInputReport(mDeviceId, data); } } } } } } ================================================ FILE: templates/android/template/app/src/main/java/org/libsdl/app/SDL.java ================================================ package org.libsdl.app; import android.content.Context; import java.lang.Class; import java.lang.reflect.Method; /** SDL library initialization */ public class SDL { // This function should be called first and sets up the native code // so it can call into the Java classes public static void setupJNI() { SDLActivity.nativeSetupJNI(); SDLAudioManager.nativeSetupJNI(); SDLControllerManager.nativeSetupJNI(); } // This function should be called each time the activity is started public static void initialize() { setContext(null); SDLActivity.initialize(); SDLAudioManager.initialize(); SDLControllerManager.initialize(); } // This function stores the current activity (SDL or not) public static void setContext(Context context) { SDLAudioManager.setContext(context); mContext = context; } public static Context getContext() { return mContext; } public static void loadLibrary(String libraryName) throws UnsatisfiedLinkError, SecurityException, NullPointerException { loadLibrary(libraryName, mContext); } public static void loadLibrary(String libraryName, Context context) throws UnsatisfiedLinkError, SecurityException, NullPointerException { if (libraryName == null) { throw new NullPointerException("No library name provided."); } try { // Let's see if we have ReLinker available in the project. This is necessary for // some projects that have huge numbers of local libraries bundled, and thus may // trip a bug in Android's native library loader which ReLinker works around. (If // loadLibrary works properly, ReLinker will simply use the normal Android method // internally.) // // To use ReLinker, just add it as a dependency. For more information, see // https://github.com/KeepSafe/ReLinker for ReLinker's repository. // Class relinkClass = context.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker"); Class relinkListenerClass = context.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker$LoadListener"); Class contextClass = context.getClassLoader().loadClass("android.content.Context"); Class stringClass = context.getClassLoader().loadClass("java.lang.String"); // Get a 'force' instance of the ReLinker, so we can ensure libraries are reinstalled if // they've changed during updates. Method forceMethod = relinkClass.getDeclaredMethod("force"); Object relinkInstance = forceMethod.invoke(null); Class relinkInstanceClass = relinkInstance.getClass(); // Actually load the library! Method loadMethod = relinkInstanceClass.getDeclaredMethod("loadLibrary", contextClass, stringClass, stringClass, relinkListenerClass); loadMethod.invoke(relinkInstance, context, libraryName, null, null); } catch (final Throwable e) { // Fall back try { System.loadLibrary(libraryName); } catch (final UnsatisfiedLinkError ule) { throw ule; } catch (final SecurityException se) { throw se; } } } protected static Context mContext; } ================================================ FILE: templates/android/template/app/src/main/java/org/libsdl/app/SDLActivity.java ================================================ package org.libsdl.app; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.UiModeManager; import android.content.ClipboardManager; import android.content.ClipData; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.hardware.Sensor; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.InputType; import android.text.Selection; import android.util.DisplayMetrics; import android.util.Log; import android.util.SparseArray; import android.view.Display; import android.view.Gravity; import android.view.InputDevice; import android.view.KeyEvent; import android.view.PointerIcon; import android.view.Surface; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import java.util.Hashtable; import java.util.Locale; /** SDL Activity */ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityChangeListener { private static final String TAG = "SDL"; private static final int SDL_MAJOR_VERSION = 2; private static final int SDL_MINOR_VERSION = 30; private static final int SDL_MICRO_VERSION = 12; /* // Display InputType.SOURCE/CLASS of events and devices // // SDLActivity.debugSource(device.getSources(), "device[" + device.getName() + "]"); // SDLActivity.debugSource(event.getSource(), "event"); public static void debugSource(int sources, String prefix) { int s = sources; int s_copy = sources; String cls = ""; String src = ""; int tst = 0; int FLAG_TAINTED = 0x80000000; if ((s & InputDevice.SOURCE_CLASS_BUTTON) != 0) cls += " BUTTON"; if ((s & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) cls += " JOYSTICK"; if ((s & InputDevice.SOURCE_CLASS_POINTER) != 0) cls += " POINTER"; if ((s & InputDevice.SOURCE_CLASS_POSITION) != 0) cls += " POSITION"; if ((s & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) cls += " TRACKBALL"; int s2 = s_copy & ~InputDevice.SOURCE_ANY; // keep class bits s2 &= ~( InputDevice.SOURCE_CLASS_BUTTON | InputDevice.SOURCE_CLASS_JOYSTICK | InputDevice.SOURCE_CLASS_POINTER | InputDevice.SOURCE_CLASS_POSITION | InputDevice.SOURCE_CLASS_TRACKBALL); if (s2 != 0) cls += "Some_Unknown"; s2 = s_copy & InputDevice.SOURCE_ANY; // keep source only, no class; if (Build.VERSION.SDK_INT >= 23) { tst = InputDevice.SOURCE_BLUETOOTH_STYLUS; if ((s & tst) == tst) src += " BLUETOOTH_STYLUS"; s2 &= ~tst; } tst = InputDevice.SOURCE_DPAD; if ((s & tst) == tst) src += " DPAD"; s2 &= ~tst; tst = InputDevice.SOURCE_GAMEPAD; if ((s & tst) == tst) src += " GAMEPAD"; s2 &= ~tst; if (Build.VERSION.SDK_INT >= 21) { tst = InputDevice.SOURCE_HDMI; if ((s & tst) == tst) src += " HDMI"; s2 &= ~tst; } tst = InputDevice.SOURCE_JOYSTICK; if ((s & tst) == tst) src += " JOYSTICK"; s2 &= ~tst; tst = InputDevice.SOURCE_KEYBOARD; if ((s & tst) == tst) src += " KEYBOARD"; s2 &= ~tst; tst = InputDevice.SOURCE_MOUSE; if ((s & tst) == tst) src += " MOUSE"; s2 &= ~tst; if (Build.VERSION.SDK_INT >= 26) { tst = InputDevice.SOURCE_MOUSE_RELATIVE; if ((s & tst) == tst) src += " MOUSE_RELATIVE"; s2 &= ~tst; tst = InputDevice.SOURCE_ROTARY_ENCODER; if ((s & tst) == tst) src += " ROTARY_ENCODER"; s2 &= ~tst; } tst = InputDevice.SOURCE_STYLUS; if ((s & tst) == tst) src += " STYLUS"; s2 &= ~tst; tst = InputDevice.SOURCE_TOUCHPAD; if ((s & tst) == tst) src += " TOUCHPAD"; s2 &= ~tst; tst = InputDevice.SOURCE_TOUCHSCREEN; if ((s & tst) == tst) src += " TOUCHSCREEN"; s2 &= ~tst; if (Build.VERSION.SDK_INT >= 18) { tst = InputDevice.SOURCE_TOUCH_NAVIGATION; if ((s & tst) == tst) src += " TOUCH_NAVIGATION"; s2 &= ~tst; } tst = InputDevice.SOURCE_TRACKBALL; if ((s & tst) == tst) src += " TRACKBALL"; s2 &= ~tst; tst = InputDevice.SOURCE_ANY; if ((s & tst) == tst) src += " ANY"; s2 &= ~tst; if (s == FLAG_TAINTED) src += " FLAG_TAINTED"; s2 &= ~FLAG_TAINTED; if (s2 != 0) src += " Some_Unknown"; Log.v(TAG, prefix + "int=" + s_copy + " CLASS={" + cls + " } source(s):" + src); } */ public static boolean mIsResumedCalled, mHasFocus; public static final boolean mHasMultiWindow = (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */); // Cursor types // private static final int SDL_SYSTEM_CURSOR_NONE = -1; private static final int SDL_SYSTEM_CURSOR_ARROW = 0; private static final int SDL_SYSTEM_CURSOR_IBEAM = 1; private static final int SDL_SYSTEM_CURSOR_WAIT = 2; private static final int SDL_SYSTEM_CURSOR_CROSSHAIR = 3; private static final int SDL_SYSTEM_CURSOR_WAITARROW = 4; private static final int SDL_SYSTEM_CURSOR_SIZENWSE = 5; private static final int SDL_SYSTEM_CURSOR_SIZENESW = 6; private static final int SDL_SYSTEM_CURSOR_SIZEWE = 7; private static final int SDL_SYSTEM_CURSOR_SIZENS = 8; private static final int SDL_SYSTEM_CURSOR_SIZEALL = 9; private static final int SDL_SYSTEM_CURSOR_NO = 10; private static final int SDL_SYSTEM_CURSOR_HAND = 11; protected static final int SDL_ORIENTATION_UNKNOWN = 0; protected static final int SDL_ORIENTATION_LANDSCAPE = 1; protected static final int SDL_ORIENTATION_LANDSCAPE_FLIPPED = 2; protected static final int SDL_ORIENTATION_PORTRAIT = 3; protected static final int SDL_ORIENTATION_PORTRAIT_FLIPPED = 4; protected static int mCurrentOrientation; protected static Locale mCurrentLocale; // Handle the state of the native layer public enum NativeState { INIT, RESUMED, PAUSED } public static NativeState mNextNativeState; public static NativeState mCurrentNativeState; /** If shared libraries (e.g. SDL or the native application) could not be loaded. */ public static boolean mBrokenLibraries = true; // Main components protected static SDLActivity mSingleton; protected static SDLSurface mSurface; protected static DummyEdit mTextEdit; protected static boolean mScreenKeyboardShown; protected static ViewGroup mLayout; protected static SDLClipboardHandler mClipboardHandler; protected static Hashtable mCursors; protected static int mLastCursorID; protected static SDLGenericMotionListener_API12 mMotionListener; protected static HIDDeviceManager mHIDDeviceManager; // This is what SDL runs in. It invokes SDL_main(), eventually protected static Thread mSDLThread; protected static SDLGenericMotionListener_API12 getMotionListener() { if (mMotionListener == null) { if (Build.VERSION.SDK_INT >= 26 /* Android 8.0 (O) */) { mMotionListener = new SDLGenericMotionListener_API26(); } else if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) { mMotionListener = new SDLGenericMotionListener_API24(); } else { mMotionListener = new SDLGenericMotionListener_API12(); } } return mMotionListener; } /** * This method returns the name of the shared object with the application entry point * It can be overridden by derived classes. */ protected String getMainSharedObject() { String library; String[] libraries = SDLActivity.mSingleton.getLibraries(); if (libraries.length > 0) { library = "lib" + libraries[libraries.length - 1] + ".so"; } else { library = "libmain.so"; } return getContext().getApplicationInfo().nativeLibraryDir + "/" + library; } /** * This method returns the name of the application entry point * It can be overridden by derived classes. */ protected String getMainFunction() { return "SDL_main"; } /** * This method is called by SDL before loading the native shared libraries. * It can be overridden to provide names of shared libraries to be loaded. * The default implementation returns the defaults. It never returns null. * An array returned by a new implementation must at least contain "SDL2". * Also keep in mind that the order the libraries are loaded may matter. * @return names of shared libraries to be loaded (e.g. "SDL2", "main"). */ protected String[] getLibraries() { return new String[] { "SDL2", // "SDL2_image", // "SDL2_mixer", // "SDL2_net", // "SDL2_ttf", "main" }; } // Load the .so public void loadLibraries() { for (String lib : getLibraries()) { SDL.loadLibrary(lib, this); } } /** * This method is called by SDL before starting the native application thread. * It can be overridden to provide the arguments after the application name. * The default implementation returns an empty array. It never returns null. * @return arguments for the native application. */ protected String[] getArguments() { return new String[0]; } public static void initialize() { // The static nature of the singleton and Android quirkyness force us to initialize everything here // Otherwise, when exiting the app and returning to it, these variables *keep* their pre exit values mSingleton = null; mSurface = null; mTextEdit = null; mLayout = null; mClipboardHandler = null; mCursors = new Hashtable(); mLastCursorID = 0; mSDLThread = null; mIsResumedCalled = false; mHasFocus = true; mNextNativeState = NativeState.INIT; mCurrentNativeState = NativeState.INIT; } protected SDLSurface createSDLSurface(Context context) { return new SDLSurface(context); } // Setup @Override protected void onCreate(Bundle savedInstanceState) { Log.v(TAG, "Device: " + Build.DEVICE); Log.v(TAG, "Model: " + Build.MODEL); Log.v(TAG, "onCreate()"); super.onCreate(savedInstanceState); try { Thread.currentThread().setName("SDLActivity"); } catch (Exception e) { Log.v(TAG, "modify thread properties failed " + e.toString()); } // Load shared libraries String errorMsgBrokenLib = ""; try { loadLibraries(); mBrokenLibraries = false; /* success */ } catch(UnsatisfiedLinkError e) { System.err.println(e.getMessage()); mBrokenLibraries = true; errorMsgBrokenLib = e.getMessage(); } catch(Exception e) { System.err.println(e.getMessage()); mBrokenLibraries = true; errorMsgBrokenLib = e.getMessage(); } if (!mBrokenLibraries) { String expected_version = String.valueOf(SDL_MAJOR_VERSION) + "." + String.valueOf(SDL_MINOR_VERSION) + "." + String.valueOf(SDL_MICRO_VERSION); String version = nativeGetVersion(); if (!version.equals(expected_version)) { mBrokenLibraries = true; errorMsgBrokenLib = "SDL C/Java version mismatch (expected " + expected_version + ", got " + version + ")"; } } if (mBrokenLibraries) { mSingleton = this; AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); dlgAlert.setMessage("An error occurred while trying to start the application. Please try again and/or reinstall." + System.getProperty("line.separator") + System.getProperty("line.separator") + "Error: " + errorMsgBrokenLib); dlgAlert.setTitle("SDL Error"); dlgAlert.setPositiveButton("Exit", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int id) { // if this button is clicked, close current activity SDLActivity.mSingleton.finish(); } }); dlgAlert.setCancelable(false); dlgAlert.create().show(); return; } // Set up JNI SDL.setupJNI(); // Initialize state SDL.initialize(); // So we can call stuff from static callbacks mSingleton = this; SDL.setContext(this); mClipboardHandler = new SDLClipboardHandler(); mHIDDeviceManager = HIDDeviceManager.acquire(this); // Set up the surface mSurface = createSDLSurface(this); mLayout = new RelativeLayout(this); mLayout.addView(mSurface); // Get our current screen orientation and pass it down. mCurrentOrientation = SDLActivity.getCurrentOrientation(); // Only record current orientation SDLActivity.onNativeOrientationChanged(mCurrentOrientation); try { if (Build.VERSION.SDK_INT < 24 /* Android 7.0 (N) */) { mCurrentLocale = getContext().getResources().getConfiguration().locale; } else { mCurrentLocale = getContext().getResources().getConfiguration().getLocales().get(0); } } catch(Exception ignored) { } setContentView(mLayout); setWindowStyle(false); getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(this); // Get filename from "Open with" of another application Intent intent = getIntent(); if (intent != null && intent.getData() != null) { String filename = intent.getData().getPath(); if (filename != null) { Log.v(TAG, "Got filename: " + filename); SDLActivity.onNativeDropFile(filename); } } } protected void pauseNativeThread() { mNextNativeState = NativeState.PAUSED; mIsResumedCalled = false; if (SDLActivity.mBrokenLibraries) { return; } SDLActivity.handleNativeState(); } protected void resumeNativeThread() { mNextNativeState = NativeState.RESUMED; mIsResumedCalled = true; if (SDLActivity.mBrokenLibraries) { return; } SDLActivity.handleNativeState(); } // Events @Override protected void onPause() { Log.v(TAG, "onPause()"); super.onPause(); if (mHIDDeviceManager != null) { mHIDDeviceManager.setFrozen(true); } if (!mHasMultiWindow) { pauseNativeThread(); } } @Override protected void onResume() { Log.v(TAG, "onResume()"); super.onResume(); if (mHIDDeviceManager != null) { mHIDDeviceManager.setFrozen(false); } if (!mHasMultiWindow) { resumeNativeThread(); } } @Override protected void onStop() { Log.v(TAG, "onStop()"); super.onStop(); if (mHasMultiWindow) { pauseNativeThread(); } } @Override protected void onStart() { Log.v(TAG, "onStart()"); super.onStart(); if (mHasMultiWindow) { resumeNativeThread(); } } public static int getCurrentOrientation() { int result = SDL_ORIENTATION_UNKNOWN; Activity activity = (Activity)getContext(); if (activity == null) { return result; } Display display = activity.getWindowManager().getDefaultDisplay(); switch (display.getRotation()) { case Surface.ROTATION_0: result = SDL_ORIENTATION_PORTRAIT; break; case Surface.ROTATION_90: result = SDL_ORIENTATION_LANDSCAPE; break; case Surface.ROTATION_180: result = SDL_ORIENTATION_PORTRAIT_FLIPPED; break; case Surface.ROTATION_270: result = SDL_ORIENTATION_LANDSCAPE_FLIPPED; break; } return result; } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); Log.v(TAG, "onWindowFocusChanged(): " + hasFocus); if (SDLActivity.mBrokenLibraries) { return; } mHasFocus = hasFocus; if (hasFocus) { mNextNativeState = NativeState.RESUMED; SDLActivity.getMotionListener().reclaimRelativeMouseModeIfNeeded(); SDLActivity.handleNativeState(); nativeFocusChanged(true); } else { nativeFocusChanged(false); if (!mHasMultiWindow) { mNextNativeState = NativeState.PAUSED; SDLActivity.handleNativeState(); } } } @Override public void onLowMemory() { Log.v(TAG, "onLowMemory()"); super.onLowMemory(); if (SDLActivity.mBrokenLibraries) { return; } SDLActivity.nativeLowMemory(); } @Override public void onConfigurationChanged(Configuration newConfig) { Log.v(TAG, "onConfigurationChanged()"); super.onConfigurationChanged(newConfig); if (SDLActivity.mBrokenLibraries) { return; } if (mCurrentLocale == null || !mCurrentLocale.equals(newConfig.locale)) { mCurrentLocale = newConfig.locale; SDLActivity.onNativeLocaleChanged(); } } @Override protected void onDestroy() { Log.v(TAG, "onDestroy()"); if (mHIDDeviceManager != null) { HIDDeviceManager.release(mHIDDeviceManager); mHIDDeviceManager = null; } SDLAudioManager.release(this); if (SDLActivity.mBrokenLibraries) { super.onDestroy(); return; } if (SDLActivity.mSDLThread != null) { // Send Quit event to "SDLThread" thread SDLActivity.nativeSendQuit(); // Wait for "SDLThread" thread to end try { SDLActivity.mSDLThread.join(); } catch(Exception e) { Log.v(TAG, "Problem stopping SDLThread: " + e); } } SDLActivity.nativeQuit(); super.onDestroy(); } @Override public void onBackPressed() { // Check if we want to block the back button in case of mouse right click. // // If we do, the normal hardware back button will no longer work and people have to use home, // but the mouse right click will work. // boolean trapBack = SDLActivity.nativeGetHintBoolean("SDL_ANDROID_TRAP_BACK_BUTTON", false); if (trapBack) { // Exit and let the mouse handler handle this button (if appropriate) return; } // Default system back button behavior. if (!isFinishing()) { super.onBackPressed(); } } // Called by JNI from SDL. public static void manualBackButton() { mSingleton.pressBackButton(); } // Used to get us onto the activity's main thread public void pressBackButton() { runOnUiThread(new Runnable() { @Override public void run() { if (!SDLActivity.this.isFinishing()) { SDLActivity.this.superOnBackPressed(); } } }); } // Used to access the system back behavior. public void superOnBackPressed() { super.onBackPressed(); } @Override public boolean dispatchKeyEvent(KeyEvent event) { if (SDLActivity.mBrokenLibraries) { return false; } int keyCode = event.getKeyCode(); // Ignore certain special keys so they're handled by Android if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_CAMERA || keyCode == KeyEvent.KEYCODE_ZOOM_IN || /* API 11 */ keyCode == KeyEvent.KEYCODE_ZOOM_OUT /* API 11 */ ) { return false; } return super.dispatchKeyEvent(event); } /* Transition to next state */ public static void handleNativeState() { if (mNextNativeState == mCurrentNativeState) { // Already in same state, discard. return; } // Try a transition to init state if (mNextNativeState == NativeState.INIT) { mCurrentNativeState = mNextNativeState; return; } // Try a transition to paused state if (mNextNativeState == NativeState.PAUSED) { if (mSDLThread != null) { nativePause(); } if (mSurface != null) { mSurface.handlePause(); } mCurrentNativeState = mNextNativeState; return; } // Try a transition to resumed state if (mNextNativeState == NativeState.RESUMED) { if (mSurface.mIsSurfaceReady && mHasFocus && mIsResumedCalled) { if (mSDLThread == null) { // This is the entry point to the C app. // Start up the C app thread and enable sensor input for the first time // FIXME: Why aren't we enabling sensor input at start? mSDLThread = new Thread(new SDLMain(), "SDLThread"); mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true); mSDLThread.start(); // No nativeResume(), don't signal Android_ResumeSem } else { nativeResume(); } mSurface.handleResume(); mCurrentNativeState = mNextNativeState; } } } // Messages from the SDLMain thread static final int COMMAND_CHANGE_TITLE = 1; static final int COMMAND_CHANGE_WINDOW_STYLE = 2; static final int COMMAND_TEXTEDIT_HIDE = 3; static final int COMMAND_SET_KEEP_SCREEN_ON = 5; protected static final int COMMAND_USER = 0x8000; protected static boolean mFullscreenModeActive; /** * This method is called by SDL if SDL did not handle a message itself. * This happens if a received message contains an unsupported command. * Method can be overwritten to handle Messages in a different class. * @param command the command of the message. * @param param the parameter of the message. May be null. * @return if the message was handled in overridden method. */ protected boolean onUnhandledMessage(int command, Object param) { return false; } /** * A Handler class for Messages from native SDL applications. * It uses current Activities as target (e.g. for the title). * static to prevent implicit references to enclosing object. */ protected static class SDLCommandHandler extends Handler { @Override public void handleMessage(Message msg) { Context context = SDL.getContext(); if (context == null) { Log.e(TAG, "error handling message, getContext() returned null"); return; } switch (msg.arg1) { case COMMAND_CHANGE_TITLE: if (context instanceof Activity) { ((Activity) context).setTitle((String)msg.obj); } else { Log.e(TAG, "error handling message, getContext() returned no Activity"); } break; case COMMAND_CHANGE_WINDOW_STYLE: if (Build.VERSION.SDK_INT >= 19 /* Android 4.4 (KITKAT) */) { if (context instanceof Activity) { Window window = ((Activity) context).getWindow(); if (window != null) { if ((msg.obj instanceof Integer) && ((Integer) msg.obj != 0)) { int flags = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE; window.getDecorView().setSystemUiVisibility(flags); window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); SDLActivity.mFullscreenModeActive = true; } else { int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_VISIBLE; window.getDecorView().setSystemUiVisibility(flags); window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); SDLActivity.mFullscreenModeActive = false; } } } else { Log.e(TAG, "error handling message, getContext() returned no Activity"); } } break; case COMMAND_TEXTEDIT_HIDE: if (mTextEdit != null) { // Note: On some devices setting view to GONE creates a flicker in landscape. // Setting the View's sizes to 0 is similar to GONE but without the flicker. // The sizes will be set to useful values when the keyboard is shown again. mTextEdit.setLayoutParams(new RelativeLayout.LayoutParams(0, 0)); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0); mScreenKeyboardShown = false; mSurface.requestFocus(); } break; case COMMAND_SET_KEEP_SCREEN_ON: { if (context instanceof Activity) { Window window = ((Activity) context).getWindow(); if (window != null) { if ((msg.obj instanceof Integer) && ((Integer) msg.obj != 0)) { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } else { window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } } } break; } default: if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) { Log.e(TAG, "error handling message, command is " + msg.arg1); } } } } // Handler for the messages Handler commandHandler = new SDLCommandHandler(); // Send a message from the SDLMain thread boolean sendCommand(int command, Object data) { Message msg = commandHandler.obtainMessage(); msg.arg1 = command; msg.obj = data; boolean result = commandHandler.sendMessage(msg); if (Build.VERSION.SDK_INT >= 19 /* Android 4.4 (KITKAT) */) { if (command == COMMAND_CHANGE_WINDOW_STYLE) { // Ensure we don't return until the resize has actually happened, // or 500ms have passed. boolean bShouldWait = false; if (data instanceof Integer) { // Let's figure out if we're already laid out fullscreen or not. Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); DisplayMetrics realMetrics = new DisplayMetrics(); display.getRealMetrics(realMetrics); boolean bFullscreenLayout = ((realMetrics.widthPixels == mSurface.getWidth()) && (realMetrics.heightPixels == mSurface.getHeight())); if ((Integer) data == 1) { // If we aren't laid out fullscreen or actively in fullscreen mode already, we're going // to change size and should wait for surfaceChanged() before we return, so the size // is right back in native code. If we're already laid out fullscreen, though, we're // not going to change size even if we change decor modes, so we shouldn't wait for // surfaceChanged() -- which may not even happen -- and should return immediately. bShouldWait = !bFullscreenLayout; } else { // If we're laid out fullscreen (even if the status bar and nav bar are present), // or are actively in fullscreen, we're going to change size and should wait for // surfaceChanged before we return, so the size is right back in native code. bShouldWait = bFullscreenLayout; } } if (bShouldWait && (SDLActivity.getContext() != null)) { // We'll wait for the surfaceChanged() method, which will notify us // when called. That way, we know our current size is really the // size we need, instead of grabbing a size that's still got // the navigation and/or status bars before they're hidden. // // We'll wait for up to half a second, because some devices // take a surprisingly long time for the surface resize, but // then we'll just give up and return. // synchronized (SDLActivity.getContext()) { try { SDLActivity.getContext().wait(500); } catch (InterruptedException ie) { ie.printStackTrace(); } } } } } return result; } // C functions we call public static native String nativeGetVersion(); public static native int nativeSetupJNI(); public static native int nativeRunMain(String library, String function, Object arguments); public static native void nativeLowMemory(); public static native void nativeSendQuit(); public static native void nativeQuit(); public static native void nativePause(); public static native void nativeResume(); public static native void nativeFocusChanged(boolean hasFocus); public static native void onNativeDropFile(String filename); public static native void nativeSetScreenResolution(int surfaceWidth, int surfaceHeight, int deviceWidth, int deviceHeight, float rate); public static native void onNativeResize(); public static native void onNativeKeyDown(int keycode); public static native void onNativeKeyUp(int keycode); public static native boolean onNativeSoftReturnKey(); public static native void onNativeKeyboardFocusLost(); public static native void onNativeMouse(int button, int action, float x, float y, boolean relative); public static native void onNativeTouch(int touchDevId, int pointerFingerId, int action, float x, float y, float p); public static native void onNativeAccel(float x, float y, float z); public static native void onNativeClipboardChanged(); public static native void onNativeSurfaceCreated(); public static native void onNativeSurfaceChanged(); public static native void onNativeSurfaceDestroyed(); public static native String nativeGetHint(String name); public static native boolean nativeGetHintBoolean(String name, boolean default_value); public static native void nativeSetenv(String name, String value); public static native void onNativeOrientationChanged(int orientation); public static native void nativeAddTouch(int touchId, String name); public static native void nativePermissionResult(int requestCode, boolean result); public static native void onNativeLocaleChanged(); /** * This method is called by SDL using JNI. */ public static boolean setActivityTitle(String title) { // Called from SDLMain() thread and can't directly affect the view return mSingleton.sendCommand(COMMAND_CHANGE_TITLE, title); } /** * This method is called by SDL using JNI. */ public static void setWindowStyle(boolean fullscreen) { // Called from SDLMain() thread and can't directly affect the view mSingleton.sendCommand(COMMAND_CHANGE_WINDOW_STYLE, fullscreen ? 1 : 0); } /** * This method is called by SDL using JNI. * This is a static method for JNI convenience, it calls a non-static method * so that is can be overridden */ public static void setOrientation(int w, int h, boolean resizable, String hint) { if (mSingleton != null) { mSingleton.setOrientationBis(w, h, resizable, hint); } } /** * This can be overridden */ public void setOrientationBis(int w, int h, boolean resizable, String hint) { int orientation_landscape = -1; int orientation_portrait = -1; /* If set, hint "explicitly controls which UI orientations are allowed". */ if (hint.contains("LandscapeRight") && hint.contains("LandscapeLeft")) { orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; } else if (hint.contains("LandscapeLeft")) { orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; } else if (hint.contains("LandscapeRight")) { orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; } /* exact match to 'Portrait' to distinguish with PortraitUpsideDown */ boolean contains_Portrait = hint.contains("Portrait ") || hint.endsWith("Portrait"); if (contains_Portrait && hint.contains("PortraitUpsideDown")) { orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT; } else if (contains_Portrait) { orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; } else if (hint.contains("PortraitUpsideDown")) { orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; } boolean is_landscape_allowed = (orientation_landscape != -1); boolean is_portrait_allowed = (orientation_portrait != -1); int req; /* Requested orientation */ /* No valid hint, nothing is explicitly allowed */ if (!is_portrait_allowed && !is_landscape_allowed) { if (resizable) { /* All orientations are allowed, respecting user orientation lock setting */ req = ActivityInfo.SCREEN_ORIENTATION_FULL_USER; } else { /* Fixed window and nothing specified. Get orientation from w/h of created window */ req = (w > h ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); } } else { /* At least one orientation is allowed */ if (resizable) { if (is_portrait_allowed && is_landscape_allowed) { /* hint allows both landscape and portrait, promote to full user */ req = ActivityInfo.SCREEN_ORIENTATION_FULL_USER; } else { /* Use the only one allowed "orientation" */ req = (is_landscape_allowed ? orientation_landscape : orientation_portrait); } } else { /* Fixed window and both orientations are allowed. Choose one. */ if (is_portrait_allowed && is_landscape_allowed) { req = (w > h ? orientation_landscape : orientation_portrait); } else { /* Use the only one allowed "orientation" */ req = (is_landscape_allowed ? orientation_landscape : orientation_portrait); } } } Log.v(TAG, "setOrientation() requestedOrientation=" + req + " width=" + w +" height="+ h +" resizable=" + resizable + " hint=" + hint); mSingleton.setRequestedOrientation(req); } /** * This method is called by SDL using JNI. */ public static void minimizeWindow() { if (mSingleton == null) { return; } Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mSingleton.startActivity(startMain); } /** * This method is called by SDL using JNI. */ public static boolean shouldMinimizeOnFocusLoss() { /* if (Build.VERSION.SDK_INT >= 24) { if (mSingleton == null) { return true; } if (mSingleton.isInMultiWindowMode()) { return false; } if (mSingleton.isInPictureInPictureMode()) { return false; } } return true; */ return false; } /** * This method is called by SDL using JNI. */ public static boolean isScreenKeyboardShown() { if (mTextEdit == null) { return false; } if (!mScreenKeyboardShown) { return false; } InputMethodManager imm = (InputMethodManager) SDL.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); return imm.isAcceptingText(); } /** * This method is called by SDL using JNI. */ public static boolean supportsRelativeMouse() { // DeX mode in Samsung Experience 9.0 and earlier doesn't support relative mice properly under // Android 7 APIs, and simply returns no data under Android 8 APIs. // // This is fixed in Samsung Experience 9.5, which corresponds to Android 8.1.0, and // thus SDK version 27. If we are in DeX mode and not API 27 or higher, as a result, // we should stick to relative mode. // if (Build.VERSION.SDK_INT < 27 /* Android 8.1 (O_MR1) */ && isDeXMode()) { return false; } return SDLActivity.getMotionListener().supportsRelativeMouse(); } /** * This method is called by SDL using JNI. */ public static boolean setRelativeMouseEnabled(boolean enabled) { if (enabled && !supportsRelativeMouse()) { return false; } return SDLActivity.getMotionListener().setRelativeMouseEnabled(enabled); } /** * This method is called by SDL using JNI. */ public static boolean sendMessage(int command, int param) { if (mSingleton == null) { return false; } return mSingleton.sendCommand(command, param); } /** * This method is called by SDL using JNI. */ public static Context getContext() { return SDL.getContext(); } /** * This method is called by SDL using JNI. */ public static boolean isAndroidTV() { UiModeManager uiModeManager = (UiModeManager) getContext().getSystemService(UI_MODE_SERVICE); if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) { return true; } if (Build.MANUFACTURER.equals("MINIX") && Build.MODEL.equals("NEO-U1")) { return true; } if (Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.equals("X96-W")) { return true; } return Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.startsWith("TV"); } public static double getDiagonal() { DisplayMetrics metrics = new DisplayMetrics(); Activity activity = (Activity)getContext(); if (activity == null) { return 0.0; } activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); double dWidthInches = metrics.widthPixels / (double)metrics.xdpi; double dHeightInches = metrics.heightPixels / (double)metrics.ydpi; return Math.sqrt((dWidthInches * dWidthInches) + (dHeightInches * dHeightInches)); } /** * This method is called by SDL using JNI. */ public static boolean isTablet() { // If our diagonal size is seven inches or greater, we consider ourselves a tablet. return (getDiagonal() >= 7.0); } /** * This method is called by SDL using JNI. */ public static boolean isChromebook() { if (getContext() == null) { return false; } return getContext().getPackageManager().hasSystemFeature("org.chromium.arc.device_management"); } /** * This method is called by SDL using JNI. */ public static boolean isDeXMode() { if (Build.VERSION.SDK_INT < 24 /* Android 7.0 (N) */) { return false; } try { final Configuration config = getContext().getResources().getConfiguration(); final Class configClass = config.getClass(); return configClass.getField("SEM_DESKTOP_MODE_ENABLED").getInt(configClass) == configClass.getField("semDesktopModeEnabled").getInt(config); } catch(Exception ignored) { return false; } } /** * This method is called by SDL using JNI. */ public static DisplayMetrics getDisplayDPI() { return getContext().getResources().getDisplayMetrics(); } /** * This method is called by SDL using JNI. */ public static boolean getManifestEnvironmentVariables() { try { if (getContext() == null) { return false; } ApplicationInfo applicationInfo = getContext().getPackageManager().getApplicationInfo(getContext().getPackageName(), PackageManager.GET_META_DATA); Bundle bundle = applicationInfo.metaData; if (bundle == null) { return false; } String prefix = "SDL_ENV."; final int trimLength = prefix.length(); for (String key : bundle.keySet()) { if (key.startsWith(prefix)) { String name = key.substring(trimLength); String value = bundle.get(key).toString(); nativeSetenv(name, value); } } /* environment variables set! */ return true; } catch (Exception e) { Log.v(TAG, "exception " + e.toString()); } return false; } // This method is called by SDLControllerManager's API 26 Generic Motion Handler. public static View getContentView() { return mLayout; } static class ShowTextInputTask implements Runnable { /* * This is used to regulate the pan&scan method to have some offset from * the bottom edge of the input region and the top edge of an input * method (soft keyboard) */ static final int HEIGHT_PADDING = 15; public int x, y, w, h; public ShowTextInputTask(int x, int y, int w, int h) { this.x = x; this.y = y; this.w = w; this.h = h; /* Minimum size of 1 pixel, so it takes focus. */ if (this.w <= 0) { this.w = 1; } if (this.h + HEIGHT_PADDING <= 0) { this.h = 1 - HEIGHT_PADDING; } } @Override public void run() { RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(w, h + HEIGHT_PADDING); params.leftMargin = x; params.topMargin = y; if (mTextEdit == null) { mTextEdit = new DummyEdit(SDL.getContext()); mLayout.addView(mTextEdit, params); } else { mTextEdit.setLayoutParams(params); } mTextEdit.setVisibility(View.VISIBLE); mTextEdit.requestFocus(); InputMethodManager imm = (InputMethodManager) SDL.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mTextEdit, 0); mScreenKeyboardShown = true; } } /** * This method is called by SDL using JNI. */ public static boolean showTextInput(int x, int y, int w, int h) { // Transfer the task to the main thread as a Runnable return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h)); } public static boolean isTextInputEvent(KeyEvent event) { // Key pressed with Ctrl should be sent as SDL_KEYDOWN/SDL_KEYUP and not SDL_TEXTINPUT if (event.isCtrlPressed()) { return false; } return event.isPrintingKey() || event.getKeyCode() == KeyEvent.KEYCODE_SPACE; } public static boolean handleKeyEvent(View v, int keyCode, KeyEvent event, InputConnection ic) { int deviceId = event.getDeviceId(); int source = event.getSource(); if (source == InputDevice.SOURCE_UNKNOWN) { InputDevice device = InputDevice.getDevice(deviceId); if (device != null) { source = device.getSources(); } } // if (event.getAction() == KeyEvent.ACTION_DOWN) { // Log.v("SDL", "key down: " + keyCode + ", deviceId = " + deviceId + ", source = " + source); // } else if (event.getAction() == KeyEvent.ACTION_UP) { // Log.v("SDL", "key up: " + keyCode + ", deviceId = " + deviceId + ", source = " + source); // } // Dispatch the different events depending on where they come from // Some SOURCE_JOYSTICK, SOURCE_DPAD or SOURCE_GAMEPAD are also SOURCE_KEYBOARD // So, we try to process them as JOYSTICK/DPAD/GAMEPAD events first, if that fails we try them as KEYBOARD // // Furthermore, it's possible a game controller has SOURCE_KEYBOARD and // SOURCE_JOYSTICK, while its key events arrive from the keyboard source // So, retrieve the device itself and check all of its sources if (SDLControllerManager.isDeviceSDLJoystick(deviceId)) { // Note that we process events with specific key codes here if (event.getAction() == KeyEvent.ACTION_DOWN) { if (SDLControllerManager.onNativePadDown(deviceId, keyCode) == 0) { return true; } } else if (event.getAction() == KeyEvent.ACTION_UP) { if (SDLControllerManager.onNativePadUp(deviceId, keyCode) == 0) { return true; } } } if ((source & InputDevice.SOURCE_MOUSE) == InputDevice.SOURCE_MOUSE) { // on some devices key events are sent for mouse BUTTON_BACK/FORWARD presses // they are ignored here because sending them as mouse input to SDL is messy if ((keyCode == KeyEvent.KEYCODE_BACK) || (keyCode == KeyEvent.KEYCODE_FORWARD)) { switch (event.getAction()) { case KeyEvent.ACTION_DOWN: case KeyEvent.ACTION_UP: // mark the event as handled or it will be handled by system // handling KEYCODE_BACK by system will call onBackPressed() return true; } } } if (event.getAction() == KeyEvent.ACTION_DOWN) { if (isTextInputEvent(event)) { if (ic != null) { ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1); } else { SDLInputConnection.nativeCommitText(String.valueOf((char) event.getUnicodeChar()), 1); } } onNativeKeyDown(keyCode); return true; } else if (event.getAction() == KeyEvent.ACTION_UP) { onNativeKeyUp(keyCode); return true; } return false; } /** * This method is called by SDL using JNI. */ public static Surface getNativeSurface() { if (SDLActivity.mSurface == null) { return null; } return SDLActivity.mSurface.getNativeSurface(); } // Input /** * This method is called by SDL using JNI. */ public static void initTouch() { int[] ids = InputDevice.getDeviceIds(); for (int id : ids) { InputDevice device = InputDevice.getDevice(id); /* Allow SOURCE_TOUCHSCREEN and also Virtual InputDevices because they can send TOUCHSCREEN events */ if (device != null && ((device.getSources() & InputDevice.SOURCE_TOUCHSCREEN) == InputDevice.SOURCE_TOUCHSCREEN || device.isVirtual())) { int touchDevId = device.getId(); /* * Prevent id to be -1, since it's used in SDL internal for synthetic events * Appears when using Android emulator, eg: * adb shell input mouse tap 100 100 * adb shell input touchscreen tap 100 100 */ if (touchDevId < 0) { touchDevId -= 1; } nativeAddTouch(touchDevId, device.getName()); } } } // Messagebox /** Result of current messagebox. Also used for blocking the calling thread. */ protected final int[] messageboxSelection = new int[1]; /** * This method is called by SDL using JNI. * Shows the messagebox from UI thread and block calling thread. * buttonFlags, buttonIds and buttonTexts must have same length. * @param buttonFlags array containing flags for every button. * @param buttonIds array containing id for every button. * @param buttonTexts array containing text for every button. * @param colors null for default or array of length 5 containing colors. * @return button id or -1. */ public int messageboxShowMessageBox( final int flags, final String title, final String message, final int[] buttonFlags, final int[] buttonIds, final String[] buttonTexts, final int[] colors) { messageboxSelection[0] = -1; // sanity checks if ((buttonFlags.length != buttonIds.length) && (buttonIds.length != buttonTexts.length)) { return -1; // implementation broken } // collect arguments for Dialog final Bundle args = new Bundle(); args.putInt("flags", flags); args.putString("title", title); args.putString("message", message); args.putIntArray("buttonFlags", buttonFlags); args.putIntArray("buttonIds", buttonIds); args.putStringArray("buttonTexts", buttonTexts); args.putIntArray("colors", colors); // trigger Dialog creation on UI thread runOnUiThread(new Runnable() { @Override public void run() { messageboxCreateAndShow(args); } }); // block the calling thread synchronized (messageboxSelection) { try { messageboxSelection.wait(); } catch (InterruptedException ex) { ex.printStackTrace(); return -1; } } // return selected value return messageboxSelection[0]; } protected void messageboxCreateAndShow(Bundle args) { // TODO set values from "flags" to messagebox dialog // get colors int[] colors = args.getIntArray("colors"); int backgroundColor; int textColor; int buttonBorderColor; int buttonBackgroundColor; int buttonSelectedColor; if (colors != null) { int i = -1; backgroundColor = colors[++i]; textColor = colors[++i]; buttonBorderColor = colors[++i]; buttonBackgroundColor = colors[++i]; buttonSelectedColor = colors[++i]; } else { backgroundColor = Color.TRANSPARENT; textColor = Color.TRANSPARENT; buttonBorderColor = Color.TRANSPARENT; buttonBackgroundColor = Color.TRANSPARENT; buttonSelectedColor = Color.TRANSPARENT; } // create dialog with title and a listener to wake up calling thread final AlertDialog dialog = new AlertDialog.Builder(this).create(); dialog.setTitle(args.getString("title")); dialog.setCancelable(false); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface unused) { synchronized (messageboxSelection) { messageboxSelection.notify(); } } }); // create text TextView message = new TextView(this); message.setGravity(Gravity.CENTER); message.setText(args.getString("message")); if (textColor != Color.TRANSPARENT) { message.setTextColor(textColor); } // create buttons int[] buttonFlags = args.getIntArray("buttonFlags"); int[] buttonIds = args.getIntArray("buttonIds"); String[] buttonTexts = args.getStringArray("buttonTexts"); final SparseArray]]> /// The BackButton control itself /// The Back Arrow glyph /// /// BackButton: _Base.Namespace._lazy(function () { // Statics var strings = { get ariaLabel() { return _Resources._getWinJSString("ui/backbuttonarialabel").value; }, get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; }, get badButtonElement() { return "Invalid argument: For a button, toggle, or flyout command, the element must be null or a button element"; } }; var BackButton = _Base.Class.define(function BackButton_ctor(element, options) { /// /// /// Creates a new BackButton control /// /// /// The DOM element that will host the control. If this parameter is null, this constructor creates one for you. /// /// /// An object that contains one or more property/value pairs to apply to the new control. Each property of the options object corresponds to /// one of the control's properties or events. /// /// /// A BackButton control. /// /// /// // Check to make sure we weren't duplicated if (element && element.winControl) { throw new _ErrorFromName("WinJS.UI.BackButton.DuplicateConstruction", strings.duplicateConstruction); } this._element = element || _Global.document.createElement("button"); options = options || {}; this._initializeButton(); // This will also set the aria-label and tooltip this._disposed = false; // Remember ourselves this._element.winControl = this; _Control.setOptions(this, options); // Add event handlers for this back button instance this._buttonClickHandler = this._handleBackButtonClick.bind(this); this._element.addEventListener('click', this._buttonClickHandler, false); this._navigatedHandler = this._handleNavigatedEvent.bind(this); Navigation.addEventListener('navigated', this._navigatedHandler, false); // Increment reference count / manage add global event handlers singleton.addRef(); }, { /// element: { get: function () { return this._element; } }, dispose: function () { /// /// /// Disposes this control. /// /// /// if (this._disposed) { return; } this._disposed = true; // Mark this control as disposed. // Remove 'navigated' eventhandler for this BackButton Navigation.removeEventListener('navigated', this._navigatedHandler, false); singleton.release(); // Decrement reference count. }, refresh: function () { /// /// /// Sets the 'disabled' attribute to correct the value based on the current navigation history stack. /// /// /// if (Navigation.canGoBack) { this._element.disabled = false; } else { this._element.disabled = true; } }, _initializeButton: function () { //Final EN-US HTML should be: // //Button will automatically be disabled if WinJS.Navigation.history.canGoBack is false. // Verify the HTML is a button if (this._element.tagName !== "BUTTON") { throw new _ErrorFromName("WinJS.UI.BackButton.BadButtonElement", strings.badButtonElement); } // Attach our css classes _ElementUtilities.addClass(this._element, navigationBackButtonClass); // Attach disposable class. _ElementUtilities.addClass(this._element, "win-disposable"); // Create inner glyph element this._element.innerHTML = ''; // Set the 'disabled' property to the correct value based on the current navigation history stack. this.refresh(); // Set Aria-label and native tooltip to the same localized string equivalent of "Back" this._element.setAttribute("aria-label", strings.ariaLabel); this._element.setAttribute("title", strings.ariaLabel); // Explicitly set type attribute to avoid the default '; this._headerTabStopElement = this._headerElement.firstElementChild; // The purpose of headerWrapperElement is to lay out its children in a flexbox. Ideally, this flexbox would // be on headerTabStopElement. However, firefox lays out flexboxes with display:flex differently. // Firefox bug 1014285 (Button with display:inline-flex doesn't layout properly) // https://bugzilla.mozilla.org/show_bug.cgi?id=1014285 this._headerWrapperElement = this._headerTabStopElement.firstElementChild; this._headerContentElement = this._headerWrapperElement.firstElementChild; this._headerChevronElement = this._headerWrapperElement.lastElementChild; element.appendChild(this._headerElement); this._winKeyboard = new _KeyboardBehavior._WinKeyboard(this._headerElement); this._contentElement = _Global.document.createElement("DIV"); this._contentElement.className = HubSection._ClassName.hubSectionContent; this._contentElement.style.visibility = "hidden"; element.appendChild(this._contentElement); // Reparent any existing elements inside the new hub section content element. var elementToMove = this.element.firstChild; while (elementToMove !== this._headerElement) { var nextElement = elementToMove.nextSibling; this._contentElement.appendChild(elementToMove); elementToMove = nextElement; } this._processors = [ControlProcessor.processAll]; _Control.setOptions(this, options); }, { /// element: { get: function () { return this._element; } }, /// /// Gets or sets a value that specifies whether the header is static. Set this value to true to disable clicks and other interactions. /// /// isHeaderStatic: { get: function () { return this._isHeaderStatic; }, set: function (value) { this._isHeaderStatic = value; if (!this._isHeaderStatic) { this._headerTabStopElement.setAttribute("role", "link"); _ElementUtilities.addClass(this._headerTabStopElement, HubSection._ClassName.hubSectionInteractive); } else { this._headerTabStopElement.setAttribute("role", "heading"); _ElementUtilities.removeClass(this._headerTabStopElement, HubSection._ClassName.hubSectionInteractive); } } }, /// /// Gets the DOM element that hosts the HubSection's content. /// /// contentElement: { get: function () { return this._contentElement; } }, /// /// Get or set the HubSection's header. After you set this property, the Hub renders the header again. /// /// header: { get: function () { return this._header; }, set: function (value) { // Render again even if it is equal to itself. this._header = value; this._renderHeader(); } }, _setHeaderTemplate: function HubSection_setHeaderTemplate(template) { this._template = _ElementUtilities._syncRenderer(template); this._renderHeader(); }, _renderHeader: function HubSection_renderHeader() { if (this._template) { _Dispose._disposeElement(this._headerContentElement); _ElementUtilities.empty(this._headerContentElement); this._template(this, this._headerContentElement); } }, _process: function HubSection_process() { var that = this; this._processed = (this._processors || []).reduce(function (promise, processor) { return promise.then(function () { return processor(that.contentElement); }); }, this._processed || Promise.as()); this._processors = null; return this._processed; }, dispose: function HubSection_dispose() { /// /// /// Disposes this control. /// /// /// if (this._disposed) { return; } this._disposed = true; this._processors = null; _Dispose._disposeElement(this._headerContentElement); _Dispose.disposeSubTree(this.contentElement); } }, { // Names of classes used by the HubSection. _ClassName: { hubSection: "win-hub-section", hubSectionHeader: "win-hub-section-header", hubSectionHeaderTabStop: "win-hub-section-header-tabstop", hubSectionHeaderWrapper: "win-hub-section-header-wrapper", hubSectionInteractive: "win-hub-section-header-interactive", hubSectionHeaderContent: "win-hub-section-header-content", hubSectionHeaderChevron: "win-hub-section-header-chevron", hubSectionContent: "win-hub-section-content" }, isDeclarativeControlContainer: _BaseUtils.markSupportedForProcessing(function (section, callback) { if (callback === ControlProcessor.processAll) { return; } section._processors = section._processors || []; section._processors.push(callback); // Once processed the first time synchronously queue up new processors as they come in if (section._processed) { section._process(); } }) }); return HubSection; }) }); }); define('require-style!less/styles-hub',[],function(){}); define('require-style!less/colors-hub',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/Hub',[ '../Core/_Global', '../Core/_Base', '../Core/_BaseUtils', '../Core/_ErrorFromName', '../Core/_Events', '../Core/_Log', '../Core/_Resources', '../Core/_WriteProfilerMark', '../_Accents', '../Animations', '../Animations/_TransitionAnimation', '../BindingList', '../ControlProcessor', '../Promise', '../_Signal', '../Scheduler', '../Utilities/_Control', '../Utilities/_ElementUtilities', '../Utilities/_Hoverable', '../Utilities/_UI', './Hub/_Section', 'require-style!less/styles-hub', 'require-style!less/colors-hub' ], function hubInit(_Global, _Base, _BaseUtils, _ErrorFromName, _Events, _Log, _Resources, _WriteProfilerMark, _Accents, Animations, _TransitionAnimation, BindingList, ControlProcessor, Promise, _Signal, Scheduler, _Control, _ElementUtilities, _Hoverable, _UI, _Section) { "use strict"; _Accents.createAccentRule( ".win-semanticzoom-zoomedoutview .win-hub-section-header-interactive .win-hub-section-header-content,\ .win-hub-section-header-interactive .win-hub-section-header-chevron", [{ name: "color", value: _Accents.ColorTypes.accent }]); _Base.Namespace.define("WinJS.UI", { /// /// /// Displays sections of content. /// /// /// /// /// /// ///
    HubSection Content
    /// ]]>
    /// Raised when the Hub is about to play an entrance or a transition animation. /// Raised when a header is invoked. /// Raised when the loading state changes. /// The entire Hub control. /// The progress indicator for the Hub. /// The viewport of the Hub. /// The scrollable region of the Hub. /// /// Hub: _Base.Namespace._lazy(function () { var Key = _ElementUtilities.Key; function hubDefaultHeaderTemplate(section) { var element = _Global.document.createTextNode(typeof section.header === "object" ? JSON.stringify(section.header) : ('' + section.header)); return element; } var createEvent = _Events._createEventProperty; var eventNames = { contentAnimating: "contentanimating", headerInvoked: "headerinvoked", loadingStateChanged: "loadingstatechanged" }; // Delay time before progress dots are shown when loading hub section(s) on screen. var progressDelay = 500; var verticalNames = { scrollPos: "scrollTop", scrollSize: "scrollHeight", offsetPos: "offsetTop", offsetSize: "offsetHeight", oppositeOffsetSize: "offsetWidth", marginStart: "marginTop", marginEnd: "marginBottom", borderStart: "borderTopWidth", borderEnd: "borderBottomWidth", paddingStart: "paddingTop", paddingEnd: "paddingBottom" }; var rtlHorizontalNames = { scrollPos: "scrollLeft", scrollSize: "scrollWidth", offsetPos: "offsetLeft", offsetSize: "offsetWidth", oppositeOffsetSize: "offsetHeight", marginStart: "marginRight", marginEnd: "marginLeft", borderStart: "borderRightWidth", borderEnd: "borderLeftWidth", paddingStart: "paddingRight", paddingEnd: "paddingLeft" }; var ltrHorizontalNames = { scrollPos: "scrollLeft", scrollSize: "scrollWidth", offsetPos: "offsetLeft", offsetSize: "offsetWidth", oppositeOffsetSize: "offsetHeight", marginStart: "marginLeft", marginEnd: "marginRight", borderStart: "borderLeftWidth", borderEnd: "borderRightWidth", paddingStart: "paddingLeft", paddingEnd: "paddingRight" }; var Hub = _Base.Class.define(function Hub_ctor(element, options) { /// /// /// Creates a new Hub control. /// /// /// The DOM element that hosts the Hub control. /// /// /// An object that contains one or more property/value pairs to apply to the new control. /// Each property of the options object corresponds to one of the control's properties or events. /// Event names must begin with "on". For example, to provide a handler for the contentanimating event, /// add a property named "oncontentanimating" to the options object and set its value to the event handler. /// /// /// The new Hub. /// /// /// element = element || _Global.document.createElement("DIV"); options = options || {}; if (element.winControl) { throw new _ErrorFromName("WinJS.UI.Hub.DuplicateConstruction", strings.duplicateConstruction); } this._id = element.id || _ElementUtilities._uniqueID(element); this._writeProfilerMark("constructor,StartTM"); this._windowKeyDownHandlerBound = this._windowKeyDownHandler.bind(this); _Global.addEventListener('keydown', this._windowKeyDownHandlerBound); // Attaching JS control to DOM element element.winControl = this; this._element = element; _ElementUtilities.addClass(this.element, Hub._ClassName.hub); _ElementUtilities.addClass(this.element, "win-disposable"); this._viewportElement = _Global.document.createElement("DIV"); this._viewportElement.className = Hub._ClassName.hubViewport; this._element.appendChild(this._viewportElement); this._viewportElement.setAttribute("role", "group"); this._viewportElement.setAttribute("aria-label", strings.hubViewportAriaLabel); this._surfaceElement = _Global.document.createElement("DIV"); this._surfaceElement.className = Hub._ClassName.hubSurface; this._viewportElement.appendChild(this._surfaceElement); // Start invisible so that you do not see the content loading until the sections are ready. this._visible = false; this._viewportElement.style.opacity = 0; if (!options.orientation) { this._orientation = _UI.Orientation.horizontal; _ElementUtilities.addClass(this.element, Hub._ClassName.hubHorizontal); } this._fireEntrance = true; this._animateEntrance = true; this._loadId = 0; this.runningAnimations = new Promise.wrap(); this._currentIndexForSezo = 0; // This internally assigns this.sections which causes section to be used (even from options) before // scrollPosition or sectionOnScreen. this._parse(); _Control.setOptions(this, options); _ElementUtilities._addEventListener(this.element, "focusin", this._focusin.bind(this), false); this.element.addEventListener("keydown", this._keyDownHandler.bind(this)); this.element.addEventListener("click", this._clickHandler.bind(this)); this._resizeHandlerBound = this._resizeHandler.bind(this); this.element.addEventListener("mselementresize", this._resizeHandlerBound); _ElementUtilities._resizeNotifier.subscribe(this.element, this._resizeHandlerBound); this._viewportElement.addEventListener("scroll", this._scrollHandler.bind(this)); this._surfaceElement.addEventListener("mselementresize", this._contentResizeHandler.bind(this)); this._handleSectionChangedBind = this._handleSectionChanged.bind(this); this._handleSectionInsertedBind = this._handleSectionInserted.bind(this); this._handleSectionMovedBind = this._handleSectionMoved.bind(this); this._handleSectionRemovedBind = this._handleSectionRemoved.bind(this); this._handleSectionReloadBind = this._handleSectionReload.bind(this); this._refresh(); this._writeProfilerMark("constructor,StopTM"); }, { /// element: { get: function () { return this._element; } }, /// /// Gets or sets the orientation of sections within the Hub. /// /// orientation: { get: function () { return this._orientation; }, set: function (value) { if (value === this._orientation) { return; } this._measured = false; // clear existing scroll before we switch orientation if (this._names) { // handle setting orientation before we measure var newScrollPos = {}; newScrollPos[this._names.scrollPos] = 0; _ElementUtilities.setScrollPosition(this._viewportElement, newScrollPos); } if (value === _UI.Orientation.vertical) { _ElementUtilities.removeClass(this.element, Hub._ClassName.hubHorizontal); _ElementUtilities.addClass(this.element, Hub._ClassName.hubVertical); } else { value = _UI.Orientation.horizontal; _ElementUtilities.removeClass(this.element, Hub._ClassName.hubVertical); _ElementUtilities.addClass(this.element, Hub._ClassName.hubHorizontal); } this._orientation = value; Scheduler.schedule(this._updateSnapList.bind(this), Scheduler.Priority.idle); } }, /// /// Gets or sets the WinJS.Binding.List of HubSection objects that belong to this Hub. /// /// sections: { get: function () { if (this._pendingSections) { return this._pendingSections; } return this._sections; }, set: function (value) { var resetScrollPosition = !this._pendingSections; this._pendingSections = value; this._refresh(); if (resetScrollPosition) { this.scrollPosition = 0; } } }, /// /// Gets or sets the WinJS.Binding.Template or template function that creates the DOM elements /// which represent the header for each HubSection. Each header can /// contain multiple DOM elements, but we recommend that it have a single /// root element. /// /// headerTemplate: { get: function () { if (this._pendingHeaderTemplate) { return this._pendingHeaderTemplate; } if (!this._headerTemplate) { this._headerTemplate = hubDefaultHeaderTemplate; } return this._headerTemplate; }, set: function (value) { this._pendingHeaderTemplate = value || hubDefaultHeaderTemplate; this._refresh(); } }, /// /// Gets or sets the position of the Hub's scrollbar. /// /// scrollPosition: { get: function () { if (+this._pendingScrollLocation === this._pendingScrollLocation) { return this._pendingScrollLocation; } this._measure(); return this._scrollPosition; }, set: function (value) { value = Math.max(0, value); if (this._pendingRefresh) { // Unable to constrain length because sections may have changed. this._pendingScrollLocation = value; this._pendingSectionOnScreen = null; } else { this._measure(); var targetScrollPos = Math.max(0, Math.min(this._scrollLength - this._viewportSize, value)); this._scrollPosition = targetScrollPos; var newScrollPos = {}; newScrollPos[this._names.scrollPos] = targetScrollPos; _ElementUtilities.setScrollPosition(this._viewportElement, newScrollPos); } } }, /// /// Gets or sets the index of first section in view. This property is useful for restoring a previous view when your app launches or resumes. /// /// sectionOnScreen: { get: function () { if (+this._pendingSectionOnScreen === this._pendingSectionOnScreen) { return this._pendingSectionOnScreen; } this._measure(); for (var i = 0; i < this._sectionSizes.length; i++) { var sectionSize = this._sectionSizes[i]; if ((sectionSize.offset + sectionSize.size - sectionSize.borderEnd - sectionSize.paddingEnd) > (this._scrollPosition + this._startSpacer + sectionSize.borderStart + sectionSize.paddingStart)) { return i; } } return -1; }, set: function (value) { value = Math.max(0, value); if (this._pendingRefresh) { this._pendingSectionOnScreen = value; this._pendingScrollLocation = null; } else { this._measure(); if (value >= 0 && value < this._sectionSizes.length) { this._scrollToSection(value); } } } }, /// /// Gets or sets the index of first section at least partially in view. Use for animations. /// /// indexOfFirstVisible: { get: function () { this._measure(); for (var i = 0; i < this._sectionSizes.length; i++) { var sectionSize = this._sectionSizes[i]; if ((sectionSize.offset + sectionSize.size - sectionSize.borderEnd - sectionSize.paddingEnd) > this._scrollPosition) { return i; } } return -1; } }, /// /// Gets or sets the index of last section at least partially in view. Use for animations. /// /// indexOfLastVisible: { get: function () { this._measure(); for (var i = this._sectionSizes.length - 1; i >= 0; i--) { var sectionSize = this._sectionSizes[i]; if ((sectionSize.offset + sectionSize.paddingStart + sectionSize.borderStart) < (this._scrollPosition + this._viewportSize)) { return i; } } return -1; } }, /// /// Raised when the user clicks on an interactive header. /// /// onheaderinvoked: createEvent(eventNames.headerInvoked), /// /// Raised when the loadingState of the Hub changes. /// /// onloadingstatechanged: createEvent(eventNames.loadingStateChanged), /// /// Raised when Hub is about to play entrance, contentTransition, insert, or remove animations. /// /// oncontentanimating: createEvent(eventNames.contentAnimating), _refresh: function hub_refresh() { if (this._pendingRefresh) { return; } this._loadId++; this._setState(Hub.LoadingState.loading); // This is to coalesce property setting operations such as sections and scrollPosition. this._pendingRefresh = true; Scheduler.schedule(this._refreshImpl.bind(this), Scheduler.Priority.high); }, _refreshImpl: function hub_refreshImpl() { if (this._disposed) { return; } var fadeOutAnimation = Promise.wrap(); if (this._pendingSections) { this._animateEntrance = true; this._fireEntrance = !this._visible; if (!this._fireEntrance) { this._visible = false; this._viewportElement.style.opacity = 0; if (_TransitionAnimation.isAnimationEnabled()) { var animateTransition = this._fireEvent(Hub._EventName.contentAnimating, { type: Hub.AnimationType.contentTransition }); if (animateTransition) { this._viewportElement.style["-ms-overflow-style"] = "none"; fadeOutAnimation = Animations.fadeOut(this._viewportElement).then(function () { this._viewportElement.style["-ms-overflow-style"] = ""; }.bind(this)); } this._animateEntrance = animateTransition; } } } fadeOutAnimation.done(this._applyProperties.bind(this)); }, _applyProperties: function hub_applyProperties() { if (this._disposed) { return; } this._pendingRefresh = false; var needsToLoadSections = false; if (this._pendingSections) { needsToLoadSections = true; this._updateEvents(this._sections, this._pendingSections); this._sections = this._pendingSections; this._pendingSections = null; // Remove any declaratively specified hub sections before attachSections. while (this.element.firstElementChild !== this._viewportElement) { var toRemove = this.element.firstElementChild; toRemove.parentNode.removeChild(toRemove); } _ElementUtilities.empty(this._surfaceElement); } if (this._pendingHeaderTemplate) { this._headerTemplate = this._pendingHeaderTemplate; this._pendingHeaderTemplate = null; } this._assignHeaderTemplate(); if (needsToLoadSections) { this._attachSections(); } // Scroll after headers are rendered and sections are attached so the scroll thumb is correct. if (+this._pendingSectionOnScreen === this._pendingSectionOnScreen) { // If there are both pending section on screen and scroll location use section on screen. this.sectionOnScreen = this._pendingSectionOnScreen; } else if (+this._pendingScrollLocation === this._pendingScrollLocation) { this.scrollPosition = this._pendingScrollLocation; } else { // Sections reset without sectionOnScreen or scrollPosition APIs. this.scrollPosition = 0; } this._pendingSectionOnScreen = null; this._pendingScrollLocation = null; // Using current (or new) scroll location load the sections this._setState(Hub.LoadingState.loading); this._loadSections(); }, _handleSectionChanged: function hub_handleSectionChanged(ev) { // Change is triggered by binding list setAt() API. if (this._pendingSections) { return; } var newSection = ev.detail.newValue; var oldSection = ev.detail.oldValue; newSection._setHeaderTemplate(this.headerTemplate); if (newSection.element !== oldSection.element) { if (newSection.element.parentNode === this._surfaceElement) { throw new _ErrorFromName("WinJS.UI.Hub.DuplicateSection", strings.duplicateSection); } this._surfaceElement.insertBefore(newSection.element, oldSection.element); this._surfaceElement.removeChild(oldSection.element); this._measured = false; this._setState(Hub.LoadingState.loading); this._loadSections(); } }, _handleSectionInserted: function hub_handleSectionInserted(ev) { // Insert is triggered by binding list insert APIs such as splice(), push(), and unshift(). if (this._pendingSections) { return; } var index = ev.detail.index; var section = ev.detail.value; if (section._animation) { section._animation.cancel(); } var animation; var result = this._fireEvent(Hub._EventName.contentAnimating, { type: Hub.AnimationType.insert, index: index, section: section }); if (result) { var affectedElements = []; for (var i = index + 1; i < this.sections.length; i++) { affectedElements.push(this.sections.getAt(i).element); } animation = new Animations._createUpdateListAnimation([section.element], [], affectedElements); } if (section.element.parentNode === this._surfaceElement) { throw new _ErrorFromName("WinJS.UI.Hub.DuplicateSection", strings.duplicateSection); } section._setHeaderTemplate(this.headerTemplate); if (index < this.sections.length - 1) { this._surfaceElement.insertBefore(section.element, this.sections.getAt(index + 1).element); } else { this._surfaceElement.appendChild(section.element); } this._measured = false; if (animation) { var insertAnimation = animation.execute(); this.runningAnimations = Promise.join([this.runningAnimations, insertAnimation]); } this._setState(Hub.LoadingState.loading); this._loadSections(); }, _handleSectionMoved: function hub_handleSectionMoved(ev) { // Move is triggered by binding list move() API. if (this._pendingSections) { return; } var newIndex = ev.detail.newIndex; var section = ev.detail.value; if (newIndex < this.sections.length - 1) { this._surfaceElement.insertBefore(section.element, this.sections.getAt(newIndex + 1).element); } else { this._surfaceElement.appendChild(section.element); } this._measured = false; this._setState(Hub.LoadingState.loading); this._loadSections(); }, _handleSectionRemoved: function hub_handleSectionRemoved(ev) { // Removed is triggered by binding list removal APIs such as splice(), pop(), and shift(). if (this._pendingSections) { return; } var section = ev.detail.value; var index = ev.detail.index; var animationPromise = Promise.wrap(); var result = this._fireEvent(Hub._EventName.contentAnimating, { type: Hub.AnimationType.remove, index: index, section: section }); if (result) { var affectedElements = []; for (var i = index; i < this.sections.length; i++) { affectedElements.push(this.sections.getAt(i).element); } var animation = new Animations._createUpdateListAnimation([], [section.element], affectedElements); this._measure(); var offsetTop = section.element.offsetTop; var offsetLeft = section.element.offsetLeft; section.element.style.position = "absolute"; section.element.style.top = offsetTop; section.element.style.left = offsetLeft; section.element.style.opacity = 0; this._measured = false; animationPromise = animation.execute().then(function () { section.element.style.position = ""; section.element.style.top = ""; section.element.style.left = ""; section.element.style.opacity = 1; }.bind(this)); } animationPromise.done(function () { if (!this._disposed) { this._surfaceElement.removeChild(section.element); this._measured = false; } }.bind(this)); // Store animation promise in case it is inserted before remove animation finishes. section._animation = animationPromise; this.runningAnimations = Promise.join([this.runningAnimations, animationPromise]); this._setState(Hub.LoadingState.loading); this._loadSections(); }, _handleSectionReload: function hub_handleSectionReload() { // Reload is triggered by large operations on the binding list such as reverse(). This causes // _pendingSections to be true which ignores future insert/remove/modified/moved events until the new // sections list is applied. this.sections = this.sections; }, _updateEvents: function hub_updateEvents(oldSections, newSections) { if (oldSections) { oldSections.removeEventListener("itemchanged", this._handleSectionChangedBind); oldSections.removeEventListener("iteminserted", this._handleSectionInsertedBind); oldSections.removeEventListener("itemmoved", this._handleSectionMovedBind); oldSections.removeEventListener("itemremoved", this._handleSectionRemovedBind); oldSections.removeEventListener("reload", this._handleSectionReloadBind); } if (newSections) { newSections.addEventListener("itemchanged", this._handleSectionChangedBind); newSections.addEventListener("iteminserted", this._handleSectionInsertedBind); newSections.addEventListener("itemmoved", this._handleSectionMovedBind); newSections.addEventListener("itemremoved", this._handleSectionRemovedBind); newSections.addEventListener("reload", this._handleSectionReloadBind); } }, _attachSections: function hub_attachSections() { this._measured = false; for (var i = 0; i < this.sections.length; i++) { var section = this._sections.getAt(i); if (section._animation) { section._animation.cancel(); } if (section.element.parentNode === this._surfaceElement) { throw new _ErrorFromName("WinJS.UI.Hub.DuplicateSection", strings.duplicateSection); } this._surfaceElement.appendChild(section.element); } }, _assignHeaderTemplate: function hub_assignHeaderTemplate() { this._measured = false; for (var i = 0; i < this.sections.length; i++) { var section = this._sections.getAt(i); section._setHeaderTemplate(this.headerTemplate); } }, _loadSection: function hub_loadSection(index) { var section = this._sections.getAt(index); return section._process().then(function resetVisibility() { var style = section.contentElement.style; if (style.visibility !== "") { style.visibility = ""; } }); }, _loadSections: function hub_loadSections() { // Used to know if another load has interrupted this one. this._loadId++; var loadId = this._loadId; var that = this; var onScreenItemsAnimatedPromise = Promise.wrap(); var sectionIndicesToLoad = []; var allSectionsLoadedPromise = Promise.wrap(); function loadNextSectionAfterPromise(promise) { promise.then(function () { Scheduler.schedule(loadNextSection, Scheduler.Priority.idle); }); } function loadNextSection() { if (loadId === that._loadId && !that._disposed) { if (sectionIndicesToLoad.length) { var index = sectionIndicesToLoad.shift(); var loadedPromise = that._loadSection(index); loadNextSectionAfterPromise(loadedPromise); } else { allSectionsLoadedSignal.complete(); } } } if (!this._showProgressPromise) { this._showProgressPromise = Promise.timeout(progressDelay).then(function () { if (this._disposed) { return; } if (!this._progressBar) { this._progressBar = _Global.document.createElement("progress"); _ElementUtilities.addClass(this._progressBar, Hub._ClassName.hubProgress); this._progressBar.max = 100; } if (!this._progressBar.parentNode) { this.element.insertBefore(this._progressBar, this._viewportElement); } this._showProgressPromise = null; }.bind(this), function () { this._showProgressPromise = null; }.bind(this)); } if (this.sections.length) { var allSectionsLoadedSignal = new _Signal(); allSectionsLoadedPromise = allSectionsLoadedSignal.promise; // Synchronously load the sections on screen. var synchronousProcessPromises = []; var start = Math.max(0, this.indexOfFirstVisible); var end = Math.max(0, this.indexOfLastVisible); for (var i = start; i <= end; i++) { synchronousProcessPromises.push(this._loadSection(i)); } // Determine the order to load the rest of the sections. start--; end++; while (start >= 0 || end < this.sections.length) { if (end < this.sections.length) { sectionIndicesToLoad.push(end); end++; } if (start >= 0) { sectionIndicesToLoad.push(start); start--; } } var onScreenSectionsLoadedPromise = Promise.join(synchronousProcessPromises); // In case there are overlapping load calls onScreenSectionsLoadedPromise.done(function () { if (loadId === this._loadId && !that._disposed) { if (this._showProgressPromise) { this._showProgressPromise.cancel(); } if (this._progressBar && this._progressBar.parentNode) { this._progressBar.parentNode.removeChild(this._progressBar); } Scheduler.schedule(function Hub_entranceAnimation() { if (loadId === this._loadId && !that._disposed) { if (!this._visible) { this._visible = true; this._viewportElement.style.opacity = 1; if (this._animateEntrance && _TransitionAnimation.isAnimationEnabled()) { var eventDetail = { type: Hub.AnimationType.entrance }; if (!this._fireEntrance || this._fireEvent(Hub._EventName.contentAnimating, eventDetail)) { this._viewportElement.style["-ms-overflow-style"] = "none"; onScreenItemsAnimatedPromise = Animations.enterContent(this._viewportElement).then(function () { this._viewportElement.style["-ms-overflow-style"] = ""; }.bind(this)); } } if (this._element === _Global.document.activeElement) { this._moveFocusIn(this.sectionOnScreen); } } } }, Scheduler.Priority.high, this, "WinJS.UI.Hub.entranceAnimation"); } }.bind(this)); loadNextSectionAfterPromise(onScreenSectionsLoadedPromise); } else { if (this._showProgressPromise) { this._showProgressPromise.cancel(); } if (this._progressBar && this._progressBar.parentNode) { this._progressBar.parentNode.removeChild(this._progressBar); } } Promise.join([this.runningAnimations, onScreenItemsAnimatedPromise, allSectionsLoadedPromise]).done(function () { if (loadId === this._loadId && !that._disposed) { this.runningAnimations = Promise.wrap(); if (this._measured && this._scrollLength !== this._viewportElement[this._names.scrollSize]) { // A section changed size during processing. Invalidate the Hub's measurements so that its // API's work correctly within the loadingState=complete handler. this._measured = false; } this._setState(Hub.LoadingState.complete); Scheduler.schedule(this._updateSnapList.bind(this), Scheduler.Priority.idle); } }.bind(this)); }, /// loadingState: { get: function () { return this._loadingState; } }, _setState: function Hub_setState(state) { if (state !== this._loadingState) { this._writeProfilerMark("loadingStateChanged:" + state + ",info"); this._loadingState = state; var eventObject = _Global.document.createEvent("CustomEvent"); eventObject.initCustomEvent(Hub._EventName.loadingStateChanged, true, false, { loadingState: state }); this._element.dispatchEvent(eventObject); } }, _parse: function hub_parse() { var hubSections = []; var hubSectionEl = this.element.firstElementChild; while (hubSectionEl !== this._viewportElement) { ControlProcessor.processAll(hubSectionEl); var hubSectionContent = hubSectionEl.winControl; if (hubSectionContent) { hubSections.push(hubSectionContent); } else { throw new _ErrorFromName("WinJS.UI.Hub.InvalidContent", strings.invalidContent); } var nextSectionEl = hubSectionEl.nextElementSibling; hubSectionEl = nextSectionEl; } this.sections = new BindingList.List(hubSections); }, _fireEvent: function hub_fireEvent(type, detail) { // Returns true if ev.preventDefault() was not called var event = _Global.document.createEvent("CustomEvent"); event.initCustomEvent(type, true, true, detail); return this.element.dispatchEvent(event); }, _findHeaderTabStop: function hub_findHeaderTabStop(element) { if (element.parentNode) { if (_ElementUtilities._matchesSelector(element, ".win-hub-section-header-tabstop, .win-hub-section-header-tabstop *")) { while (!_ElementUtilities.hasClass(element, "win-hub-section-header-tabstop")) { element = element.parentElement; } return element; } } return null; }, _isInteractive: function hub_isInteractive(element) { // Helper method to skip keyboarding and clicks while (element && element !== _Global.document.body) { if (element.classList.contains("win-interactive")) { return true; } element = element.parentElement; } return false; }, _clickHandler: function hub_clickHandler(ev) { var headerTabStopElement = this._findHeaderTabStop(ev.target); if (headerTabStopElement && !this._isInteractive(ev.target)) { var section = headerTabStopElement.parentElement.parentElement.winControl; if (!section.isHeaderStatic) { var sectionIndex = this.sections.indexOf(section); this._fireEvent(Hub._EventName.headerInvoked, { index: sectionIndex, section: section }); } } }, _resizeHandler: function hub_resizeHandler() { // Viewport needs to be measured this._measured = false; Scheduler.schedule(this._updateSnapList.bind(this), Scheduler.Priority.idle); }, _contentResizeHandler: function hub_contentResizeHandler() { // Sections and scroll length need to be measured this._measured = false; Scheduler.schedule(this._updateSnapList.bind(this), Scheduler.Priority.idle); }, _scrollHandler: function hub_scrollHandler() { // Scroll location needs to be retrieved this._measured = false; if (this._pendingSections) { return; } // Scroll events caused by users overwrite pending API modifications to scrollposition. this._pendingScrollLocation = null; this._pendingSectionOnScreen = null; if (!this._pendingScrollHandler) { this._pendingScrollHandler = _BaseUtils._requestAnimationFrame(function () { this._pendingScrollHandler = null; if (this._pendingSections) { return; } if (this.loadingState !== Hub.LoadingState.complete) { this._loadSections(); } }.bind(this)); } }, _measure: function hub_measure() { // Any time a size changes (section growing, window resizing, etc) cachedSizes should be set to false // and any time the variables need to be read again we should measure the variables. To avoid a lot of // seperate layouts we measure the variables in a single batch. if (!this._measured || this._scrollLength === 0) { this._writeProfilerMark("measure,StartTM"); this._measured = true; this._rtl = _Global.getComputedStyle(this._element, null).direction === "rtl"; if (this.orientation === _UI.Orientation.vertical) { this._names = verticalNames; } else { if (this._rtl) { this._names = rtlHorizontalNames; } else { this._names = ltrHorizontalNames; } } this._viewportSize = this._viewportElement[this._names.offsetSize]; this._viewportOppositeSize = this._viewportElement[this._names.oppositeOffsetSize]; this._scrollPosition = _ElementUtilities.getScrollPosition(this._viewportElement)[this._names.scrollPos]; this._scrollLength = this._viewportElement[this._names.scrollSize]; var surfaceElementComputedStyle = _Global.getComputedStyle(this._surfaceElement); this._startSpacer = parseFloat(surfaceElementComputedStyle[this._names.marginStart]) + parseFloat(surfaceElementComputedStyle[this._names.borderStart]) + parseFloat(surfaceElementComputedStyle[this._names.paddingStart]); this._endSpacer = parseFloat(surfaceElementComputedStyle[this._names.marginEnd]) + parseFloat(surfaceElementComputedStyle[this._names.borderEnd]) + parseFloat(surfaceElementComputedStyle[this._names.paddingEnd]); this._sectionSizes = []; for (var i = 0; i < this.sections.length; i++) { var section = this.sections.getAt(i); var computedSectionStyle = _Global.getComputedStyle(section.element); this._sectionSizes[i] = { offset: section.element[this._names.offsetPos], // Reminder: offsetWidth doesn't include margins and also rounds. size: section.element[this._names.offsetSize], marginStart: parseFloat(computedSectionStyle[this._names.marginStart]), marginEnd: parseFloat(computedSectionStyle[this._names.marginEnd]), borderStart: parseFloat(computedSectionStyle[this._names.borderStart]), borderEnd: parseFloat(computedSectionStyle[this._names.borderEnd]), paddingStart: parseFloat(computedSectionStyle[this._names.paddingStart]), paddingEnd: parseFloat(computedSectionStyle[this._names.paddingEnd]) }; if (this._rtl && this.orientation === _UI.Orientation.horizontal) { this._sectionSizes[i].offset = this._viewportSize - (this._sectionSizes[i].offset + this._sectionSizes[i].size); } } this._writeProfilerMark("measure,StopTM"); } }, _updateSnapList: function hub_updateSnapList() { this._writeProfilerMark("updateSnapList,StartTM"); this._measure(); var snapList = "snapList("; for (var i = 0; i < this._sectionSizes.length; i++) { if (i > 0) { snapList += ","; } var sectionSize = this._sectionSizes[i]; snapList += (sectionSize.offset - sectionSize.marginStart - this._startSpacer) + "px"; } snapList += ")"; var snapListY = ""; var snapListX = ""; if (this.orientation === _UI.Orientation.vertical) { snapListY = snapList; } else { snapListX = snapList; } if (this._lastSnapPointY !== snapListY) { this._lastSnapPointY = snapListY; this._viewportElement.style['-ms-scroll-snap-points-y'] = snapListY; } if (this._lastSnapPointX !== snapListX) { this._lastSnapPointX = snapListX; this._viewportElement.style['-ms-scroll-snap-points-x'] = snapListX; } this._writeProfilerMark("updateSnapList,StopTM"); }, _scrollToSection: function Hub_scrollToSection(index, withAnimation) { this._measure(); var sectionSize = this._sectionSizes[index]; var scrollPositionToShowStartMargin = Math.min(this._scrollLength - this._viewportSize, sectionSize.offset - sectionSize.marginStart - this._startSpacer); this._scrollTo(scrollPositionToShowStartMargin, withAnimation); }, _ensureVisible: function hub_ensureVisible(index, withAnimation) { this._measure(); var targetScrollPos = this._ensureVisibleMath(index, this._scrollPosition); this._scrollTo(targetScrollPos, withAnimation); }, _ensureVisibleMath: function hub_ensureVisibleMath(index, targetScrollPos) { this._measure(); var sectionSize = this._sectionSizes[index]; var scrollPositionToShowStartMargin = Math.min(this._scrollLength - this._viewportSize, sectionSize.offset - sectionSize.marginStart - this._startSpacer); var scrollPositionToShowEndMargin = Math.max(0, sectionSize.offset + sectionSize.size + sectionSize.marginEnd + this._endSpacer - this._viewportSize + 1); if (targetScrollPos > scrollPositionToShowStartMargin) { targetScrollPos = scrollPositionToShowStartMargin; } else if (targetScrollPos < scrollPositionToShowEndMargin) { targetScrollPos = Math.min(scrollPositionToShowStartMargin, scrollPositionToShowEndMargin); } return targetScrollPos; }, _scrollTo: function hub_scrollTo(scrollPos, withAnimation) { this._scrollPosition = scrollPos; if (withAnimation) { if (this.orientation === _UI.Orientation.vertical) { _ElementUtilities._zoomTo(this._viewportElement, { contentX: 0, contentY: this._scrollPosition, viewportX: 0, viewportY: 0 }); } else { _ElementUtilities._zoomTo(this._viewportElement, { contentX: this._scrollPosition, contentY: 0, viewportX: 0, viewportY: 0 }); } } else { var newScrollPos = {}; newScrollPos[this._names.scrollPos] = this._scrollPosition; _ElementUtilities.setScrollPosition(this._viewportElement, newScrollPos); } }, _windowKeyDownHandler: function hub_windowKeyDownHandler(ev) { // Include tab and shift tab. Note: Alt Key + Tab and Windows Key + Tab do not fire keydown with ev.key === "Tab". if (ev.keyCode === Key.tab) { this._tabSeenLast = true; var that = this; _BaseUtils._yieldForEvents(function () { that._tabSeenLast = false; }); } }, _focusin: function hub_focusin(ev) { // On focus we call ensureVisible to handle the tab or shift/tab to header. However if the // focus was caused by a pointer down event we skip the focus. if (this._tabSeenLast) { var headerTabStopElement = this._findHeaderTabStop(ev.target); if (headerTabStopElement && !this._isInteractive(ev.target)) { var sectionIndex = this.sections.indexOf(headerTabStopElement.parentElement.parentElement.winControl); if (sectionIndex > -1) { this._ensureVisible(sectionIndex, true); } } } // Always remember the focused section for SemanticZoom. var sectionElement = ev.target; while (sectionElement && !_ElementUtilities.hasClass(sectionElement, _Section.HubSection._ClassName.hubSection)) { sectionElement = sectionElement.parentElement; } if (sectionElement) { var sectionIndex = this.sections.indexOf(sectionElement.winControl); if (sectionIndex > -1) { this._currentIndexForSezo = sectionIndex; } } if (ev.target === this.element) { var indexToFocus; if (+this._sectionToFocus === this._sectionToFocus && this._sectionToFocus >= 0 && this._sectionToFocus < this.sections.length) { indexToFocus = this._sectionToFocus; this._sectionToFocus = null; } else { indexToFocus = this.sectionOnScreen; } this._moveFocusIn(indexToFocus); } }, _moveFocusIn: function hub_moveFocusIn(indexToFocus) { if (indexToFocus >= 0) { for (var i = indexToFocus; i < this.sections.length; i++) { var section = this.sections.getAt(i); var focusAttempt = _ElementUtilities._trySetActive(section._headerTabStopElement, this._viewportElement); if (focusAttempt) { return; } if (_ElementUtilities._setActiveFirstFocusableElement(section.contentElement, this._viewportElement)) { return; } } for (var i = indexToFocus - 1; i >= 0; i--) { var section = this.sections.getAt(i); if (_ElementUtilities._setActiveFirstFocusableElement(section.contentElement, this._viewportElement)) { return; } var focusAttempt = _ElementUtilities._trySetActive(section._headerTabStopElement, this._viewportElement); if (focusAttempt) { return; } } } }, _keyDownHandler: function hub_keyDownHandler(ev) { if (this._isInteractive(ev.target) || _ElementUtilities._hasCursorKeysBehaviors(ev.target)) { return; } var leftKey = this._rtl ? Key.rightArrow : Key.leftArrow; var rightKey = this._rtl ? Key.leftArrow : Key.rightArrow; if (ev.keyCode === Key.upArrow || ev.keyCode === Key.downArrow || ev.keyCode === Key.leftArrow || ev.keyCode === Key.rightArrow || ev.keyCode === Key.pageUp || ev.keyCode === Key.pageDown) { var headerTabStopElement = this._findHeaderTabStop(ev.target); if (headerTabStopElement) { var currentSection = this.sections.indexOf(headerTabStopElement.parentElement.parentElement.winControl); var targetSectionIndex; var useEnsureVisible = false; // Page up/down go to the next/previous header and line it up with the app header. Up/Right/Down/Left // move focus to the next/previous header and move it on screen (app header distance from either edge). if (ev.keyCode === Key.pageDown || (this.orientation === _UI.Orientation.horizontal && ev.keyCode === rightKey) || (this.orientation === _UI.Orientation.vertical && ev.keyCode === Key.downArrow)) { // Do not include hidden headers. for (var i = currentSection + 1; i < this.sections.length; i++) { if (this._tryFocus(i)) { targetSectionIndex = i; break; } } } else if (ev.keyCode === Key.pageUp || (this.orientation === _UI.Orientation.horizontal && ev.keyCode === leftKey) || (this.orientation === _UI.Orientation.vertical && ev.keyCode === Key.upArrow)) { // Do not include hidden headers. for (var i = currentSection - 1; i >= 0; i--) { if (this._tryFocus(i)) { targetSectionIndex = i; break; } } } if (ev.keyCode === Key.upArrow || ev.keyCode === Key.downArrow || ev.keyCode === Key.leftArrow || ev.keyCode === Key.rightArrow) { useEnsureVisible = true; } if (+targetSectionIndex === targetSectionIndex) { if (useEnsureVisible) { this._ensureVisible(targetSectionIndex, true); } else { this._scrollToSection(targetSectionIndex, true); } ev.preventDefault(); } } } else if (ev.keyCode === Key.home || ev.keyCode === Key.end) { // Home/End scroll to start/end and leave focus where it is. this._measure(); var maxScrollPos = Math.max(0, this._scrollLength - this._viewportSize); this._scrollTo(ev.keyCode === Key.home ? 0 : maxScrollPos, true); ev.preventDefault(); } }, _tryFocus: function hub_tryFocus(index) { var targetSection = this.sections.getAt(index); _ElementUtilities._setActive(targetSection._headerTabStopElement, this._viewportElement); return _Global.document.activeElement === targetSection._headerTabStopElement; }, /// /// Gets a ZoomableView. This API supports the SemanticZoom infrastructure /// and is not intended to be used directly from your code. /// /// zoomableView: { get: function zoomableView_get() { if (!this._zoomableView) { this._zoomableView = new ZoomableView(this); } return this._zoomableView; } }, _getPanAxis: function hub_getPanAxis() { return this.orientation === _UI.Orientation.horizontal ? "horizontal" : "vertical"; }, _configureForZoom: function hub_configureForZoom() { // Nothing to configure. }, _setCurrentItem: function hub_setCurrentItem(x, y) { var offset; if (this.orientation === _UI.Orientation.horizontal) { offset = x; } else { offset = y; } this._measure(); offset = offset + this._scrollPosition; this._currentIndexForSezo = this._sectionSizes.length - 1; for (var i = 1; i < this._sectionSizes.length; i++) { var sectionSize = this._sectionSizes[i]; if (sectionSize.offset - sectionSize.marginStart > offset) { this._currentIndexForSezo = i - 1; break; } } }, _getCurrentItem: function hub_getCurrentItem() { var itemPosition; if (this._sectionSizes.length > 0) { this._measure(); var index = Math.max(0, Math.min(this._currentIndexForSezo, this._sectionSizes.length)); var sectionSize = this._sectionSizes[index]; if (this.orientation === _UI.Orientation.horizontal) { itemPosition = { left: Math.max(0, sectionSize.offset - sectionSize.marginStart - this._scrollPosition), top: 0, width: sectionSize.size, height: this._viewportOppositeSize }; } else { itemPosition = { left: 0, top: Math.max(0, sectionSize.offset - sectionSize.marginStart - this._scrollPosition), width: this._viewportOppositeSize, height: sectionSize.size, }; } var section = this.sections.getAt(index); // BUGBUG: 53301 ListView and Hub should document what they expect to be returned from the // getCurrentItem so that positionItem apis line up. ListView zoomed out expects an object with // groupIndexHint, groupKey, or groupDescription. Hub expects an object with index. return Promise.wrap({ item: { data: section, index: index, groupIndexHint: index }, position: itemPosition }); } }, _beginZoom: function hub_beginZoom() { // Hide scroll thumb. this._viewportElement.style["-ms-overflow-style"] = "none"; }, _positionItem: function hub_positionItem(item, position) { if (item.index >= 0 && item.index < this._sectionSizes.length) { this._measure(); var sectionSize = this._sectionSizes[item.index]; var offsetFromViewport; if (this.orientation === _UI.Orientation.horizontal) { offsetFromViewport = position.left; } else { offsetFromViewport = position.top; } this._sectionToFocus = item.index; var targetScrollPosition = sectionSize.offset - offsetFromViewport; // clamp section: var targetScrollPosition = this._ensureVisibleMath(item.index, targetScrollPosition); this._scrollPosition = targetScrollPosition; var newScrollPos = {}; newScrollPos[this._names.scrollPos] = this._scrollPosition; _ElementUtilities.setScrollPosition(this._viewportElement, newScrollPos); } }, _endZoom: function hub_endZoom() { // Show scroll thumb. this._viewportElement.style["-ms-overflow-style"] = ""; }, _writeProfilerMark: function hub_writeProfilerMark(text) { var message = "WinJS.UI.Hub:" + this._id + ":" + text; _WriteProfilerMark(message); _Log.log && _Log.log(message, null, "hubprofiler"); }, dispose: function hub_dispose() { /// /// /// Disposes this control. /// /// /// if (this._disposed) { return; } this._disposed = true; _Global.removeEventListener('keydown', this._windowKeyDownHandlerBound); _ElementUtilities._resizeNotifier.unsubscribe(this.element, this._resizeHandlerBound); this._updateEvents(this._sections); for (var i = 0; i < this.sections.length; i++) { this.sections.getAt(i).dispose(); } } }, { /// /// Specifies whether the Hub animation is an entrance animation or a transition animation. /// /// AnimationType: { /// /// The animation plays when the Hub is first displayed. /// /// entrance: "entrance", /// /// The animation plays when the Hub is changing its content. /// /// contentTransition: "contentTransition", /// /// The animation plays when a section is inserted into the Hub. /// /// insert: "insert", /// /// The animation plays when a section is removed into the Hub. /// /// remove: "remove", }, /// /// Gets the current loading state of the Hub. /// /// LoadingState: { /// /// The Hub is loading sections. /// /// loading: "loading", /// /// All sections are loaded and animations are complete. /// /// complete: "complete" }, // Names of classes used by the Hub. _ClassName: { hub: "win-hub", hubSurface: "win-hub-surface", hubProgress: "win-hub-progress", hubViewport: "win-hub-viewport", hubVertical: "win-hub-vertical", hubHorizontal: "win-hub-horizontal", }, // Names of events fired by the Hub. _EventName: { contentAnimating: eventNames.contentAnimating, headerInvoked: eventNames.headerInvoked, loadingStateChanged: eventNames.loadingStateChanged }, }); _Base.Class.mix(Hub, _Control.DOMEventMixin); var ZoomableView = _Base.Class.define(function ZoomableView_ctor(hub) { this._hub = hub; }, { getPanAxis: function () { return this._hub._getPanAxis(); }, configureForZoom: function (isZoomedOut, isCurrentView, triggerZoom, prefetchedPages) { this._hub._configureForZoom(isZoomedOut, isCurrentView, triggerZoom, prefetchedPages); }, setCurrentItem: function (x, y) { this._hub._setCurrentItem(x, y); }, getCurrentItem: function () { return this._hub._getCurrentItem(); }, beginZoom: function () { this._hub._beginZoom(); }, positionItem: function (item, position) { return this._hub._positionItem(item, position); }, endZoom: function (isCurrentView) { this._hub._endZoom(isCurrentView); } }); var strings = { get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; }, get duplicateSection() { return "Hub duplicate sections: Each HubSection must be unique"; }, get invalidContent() { return "Invalid content: Hub content must be made up of HubSections."; }, get hubViewportAriaLabel() { return _Resources._getWinJSString("ui/hubViewportAriaLabel").value; } }; return Hub; }) }); }); define('require-style!less/styles-lightdismissservice',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; define('WinJS/_LightDismissService',["require", "exports", './Application', './Core/_Base', './Core/_BaseUtils', './Utilities/_ElementUtilities', './Core/_Global', './Utilities/_KeyboardBehavior', './Core/_Log', './Core/_Resources'], function (require, exports, Application, _Base, _BaseUtils, _ElementUtilities, _Global, _KeyboardBehavior, _Log, _Resources) { require(["require-style!less/styles-lightdismissservice"]); "use strict"; var baseZIndex = 1000; var Strings = { get closeOverlay() { return _Resources._getWinJSString("ui/closeOverlay").value; } }; exports._ClassNames = { _clickEater: "win-clickeater" }; var EventNames = { requestingFocusOnKeyboardInput: "requestingfocusonkeyboardinput" }; exports.LightDismissalReasons = { tap: "tap", lostFocus: "lostFocus", escape: "escape", hardwareBackButton: "hardwareBackButton", windowResize: "windowResize", windowBlur: "windowBlur" }; // Built-in implementations of ILightDismissable's onShouldLightDismiss. exports.DismissalPolicies = { light: function LightDismissalPolicies_light_onShouldLightDismiss(info) { switch (info.reason) { case exports.LightDismissalReasons.tap: case exports.LightDismissalReasons.escape: if (info.active) { return true; } else { info.stopPropagation(); return false; } break; case exports.LightDismissalReasons.hardwareBackButton: if (info.active) { info.preventDefault(); // prevent backwards navigation in the app return true; } else { info.stopPropagation(); return false; } break; case exports.LightDismissalReasons.lostFocus: case exports.LightDismissalReasons.windowResize: case exports.LightDismissalReasons.windowBlur: return true; } }, modal: function LightDismissalPolicies_modal_onShouldLightDismiss(info) { // Light dismiss cues should not be seen by dismissables behind the modal info.stopPropagation(); switch (info.reason) { case exports.LightDismissalReasons.tap: case exports.LightDismissalReasons.lostFocus: case exports.LightDismissalReasons.windowResize: case exports.LightDismissalReasons.windowBlur: return false; break; case exports.LightDismissalReasons.escape: return info.active; break; case exports.LightDismissalReasons.hardwareBackButton: info.preventDefault(); // prevent backwards navigation in the app return info.active; break; } }, sticky: function LightDismissalPolicies_sticky_onShouldLightDismiss(info) { info.stopPropagation(); return false; } }; var KeyboardInfoType = { keyDown: "keyDown", keyUp: "keyUp", keyPress: "keyPress" }; var AbstractDismissableElement = (function () { function AbstractDismissableElement(args) { this.element = args.element; this.element.tabIndex = args.tabIndex; this.onLightDismiss = args.onLightDismiss; // Allow the caller to override the default implementations of our ILightDismissable methods. if (args.onTakeFocus) { this.onTakeFocus = args.onTakeFocus; } if (args.onShouldLightDismiss) { this.onShouldLightDismiss = args.onShouldLightDismiss; } this._ldeOnKeyDownBound = this._ldeOnKeyDown.bind(this); this._ldeOnKeyUpBound = this._ldeOnKeyUp.bind(this); this._ldeOnKeyPressBound = this._ldeOnKeyPress.bind(this); } AbstractDismissableElement.prototype.restoreFocus = function () { var activeElement = _Global.document.activeElement; if (activeElement && this.containsElement(activeElement)) { this._ldeCurrentFocus = activeElement; return true; } else { // If the last input type was keyboard, use focus() so a keyboard focus visual is drawn. // Otherwise, use setActive() so no focus visual is drawn. var useSetActive = !_KeyboardBehavior._keyboardSeenLast; return this._ldeCurrentFocus && this.containsElement(this._ldeCurrentFocus) && _ElementUtilities._tryFocusOnAnyElement(this._ldeCurrentFocus, useSetActive); } }; AbstractDismissableElement.prototype._ldeOnKeyDown = function (eventObject) { this._ldeService.keyDown(this, eventObject); }; AbstractDismissableElement.prototype._ldeOnKeyUp = function (eventObject) { this._ldeService.keyUp(this, eventObject); }; AbstractDismissableElement.prototype._ldeOnKeyPress = function (eventObject) { this._ldeService.keyPress(this, eventObject); }; // ILightDismissable // AbstractDismissableElement.prototype.setZIndex = function (zIndex) { this.element.style.zIndex = zIndex; }; AbstractDismissableElement.prototype.getZIndexCount = function () { return 1; }; AbstractDismissableElement.prototype.containsElement = function (element) { return this.element.contains(element); }; AbstractDismissableElement.prototype.onTakeFocus = function (useSetActive) { this.restoreFocus() || _ElementUtilities._focusFirstFocusableElement(this.element, useSetActive) || _ElementUtilities._tryFocusOnAnyElement(this.element, useSetActive); }; AbstractDismissableElement.prototype.onFocus = function (element) { this._ldeCurrentFocus = element; }; AbstractDismissableElement.prototype.onShow = function (service) { this._ldeService = service; this.element.addEventListener("keydown", this._ldeOnKeyDownBound); this.element.addEventListener("keyup", this._ldeOnKeyUpBound); this.element.addEventListener("keypress", this._ldeOnKeyPressBound); }; AbstractDismissableElement.prototype.onHide = function () { this._ldeCurrentFocus = null; this._ldeService = null; this.element.removeEventListener("keydown", this._ldeOnKeyDownBound); this.element.removeEventListener("keyup", this._ldeOnKeyUpBound); this.element.removeEventListener("keypress", this._ldeOnKeyPressBound); }; // Concrete subclasses are expected to implement these. AbstractDismissableElement.prototype.onKeyInStack = function (info) { }; AbstractDismissableElement.prototype.onShouldLightDismiss = function (info) { return false; }; // Consumers of concrete subclasses of AbstractDismissableElement are expected to // provide these as parameters to the constructor. AbstractDismissableElement.prototype.onLightDismiss = function (info) { }; return AbstractDismissableElement; })(); var LightDismissableElement = (function (_super) { __extends(LightDismissableElement, _super); function LightDismissableElement() { _super.apply(this, arguments); } LightDismissableElement.prototype.onKeyInStack = function (info) { }; LightDismissableElement.prototype.onShouldLightDismiss = function (info) { return exports.DismissalPolicies.light(info); }; return LightDismissableElement; })(AbstractDismissableElement); exports.LightDismissableElement = LightDismissableElement; var ModalElement = (function (_super) { __extends(ModalElement, _super); function ModalElement() { _super.apply(this, arguments); } ModalElement.prototype.onKeyInStack = function (info) { // stopPropagation so that none of the app's other event handlers will see the event. // Don't preventDefault so that the browser's hotkeys will still work. info.stopPropagation(); }; ModalElement.prototype.onShouldLightDismiss = function (info) { return exports.DismissalPolicies.modal(info); }; return ModalElement; })(AbstractDismissableElement); exports.ModalElement = ModalElement; // An implementation of ILightDismissable that represents the HTML body element. It can never be dismissed. The // service should instantiate one of these to act as the bottommost light dismissable at all times (it isn't expected // for anybody else to instantiate one). It takes care of restoring focus when the last dismissable is dismissed. var LightDismissableBody = (function () { function LightDismissableBody() { } LightDismissableBody.prototype.setZIndex = function (zIndex) { }; LightDismissableBody.prototype.getZIndexCount = function () { return 1; }; LightDismissableBody.prototype.containsElement = function (element) { return _Global.document.body.contains(element); }; LightDismissableBody.prototype.onTakeFocus = function (useSetActive) { this.currentFocus && this.containsElement(this.currentFocus) && _ElementUtilities._tryFocusOnAnyElement(this.currentFocus, useSetActive); }; LightDismissableBody.prototype.onFocus = function (element) { this.currentFocus = element; }; LightDismissableBody.prototype.onShow = function (service) { }; LightDismissableBody.prototype.onHide = function () { this.currentFocus = null; }; LightDismissableBody.prototype.onKeyInStack = function (info) { }; LightDismissableBody.prototype.onShouldLightDismiss = function (info) { return false; }; LightDismissableBody.prototype.onLightDismiss = function (info) { }; return LightDismissableBody; })(); ; var LightDismissService = (function () { function LightDismissService() { this._debug = false; // Disables dismiss due to window blur. Useful during debugging. this._clients = []; this._notifying = false; this._bodyClient = new LightDismissableBody(); // State private to _updateDom. No other method should make use of it. this._updateDom_rendered = { serviceActive: false }; this._clickEaterEl = this._createClickEater(); this._onBeforeRequestingFocusOnKeyboardInputBound = this._onBeforeRequestingFocusOnKeyboardInput.bind(this); this._onFocusInBound = this._onFocusIn.bind(this); this._onKeyDownBound = this._onKeyDown.bind(this); this._onWindowResizeBound = this._onWindowResize.bind(this); this._onClickEaterPointerUpBound = this._onClickEaterPointerUp.bind(this); this._onClickEaterPointerCancelBound = this._onClickEaterPointerCancel.bind(this); // Register for infrequent events. Application.addEventListener("backclick", this._onBackClick.bind(this)); // Focus handlers generally use _ElementUtilities._addEventListener with focusout/focusin. This // uses the browser's blur event directly beacuse _addEventListener doesn't support focusout/focusin // on window. _Global.window.addEventListener("blur", this._onWindowBlur.bind(this)); this.shown(this._bodyClient); } // Dismissables should call this as soon as they are ready to be shown. More specifically, they should call this: // - After they are in the DOM and ready to receive focus (e.g. style.display cannot = "none") // - Before their entrance animation is played LightDismissService.prototype.shown = function (client) { var index = this._clients.indexOf(client); if (index === -1) { this._clients.push(client); client.onShow(this); this._updateDom(); } }; // Dismissables should call this when they are done being dismissed (i.e. after their exit animation has finished) LightDismissService.prototype.hidden = function (client) { var index = this._clients.indexOf(client); if (index !== -1) { this._clients.splice(index, 1); client.setZIndex(""); client.onHide(); this._updateDom(); } }; // Dismissables should call this when their state has changed such that it'll affect the behavior of some method // in its ILightDismissable interface. For example, if the dismissable was altered such that getZIndexCount will // now return 2 instead of 1, that dismissable should call *updated* so the LightDismissService can find out about // this change. LightDismissService.prototype.updated = function (client) { this._updateDom(); }; LightDismissService.prototype.keyDown = function (client, eventObject) { if (eventObject.keyCode === _ElementUtilities.Key.escape) { this._escapePressed(eventObject); } else { this._dispatchKeyboardEvent(client, KeyboardInfoType.keyDown, eventObject); } }; LightDismissService.prototype.keyUp = function (client, eventObject) { this._dispatchKeyboardEvent(client, KeyboardInfoType.keyUp, eventObject); }; LightDismissService.prototype.keyPress = function (client, eventObject) { this._dispatchKeyboardEvent(client, KeyboardInfoType.keyPress, eventObject); }; LightDismissService.prototype.isShown = function (client) { return this._clients.indexOf(client) !== -1; }; LightDismissService.prototype.isTopmost = function (client) { return client === this._clients[this._clients.length - 1]; }; // Disables dismiss due to window blur. Useful during debugging. LightDismissService.prototype._setDebug = function (debug) { this._debug = debug; }; LightDismissService.prototype._updateDom = function (options) { options = options || {}; var activeDismissableNeedsFocus = !!options.activeDismissableNeedsFocus; var rendered = this._updateDom_rendered; if (this._notifying) { return; } var serviceActive = this._clients.length > 1; if (serviceActive !== rendered.serviceActive) { // Unregister/register for events that occur frequently. if (serviceActive) { Application.addEventListener("beforerequestingfocusonkeyboardinput", this._onBeforeRequestingFocusOnKeyboardInputBound); _ElementUtilities._addEventListener(_Global.document.documentElement, "focusin", this._onFocusInBound); _Global.document.documentElement.addEventListener("keydown", this._onKeyDownBound); _Global.window.addEventListener("resize", this._onWindowResizeBound); this._bodyClient.currentFocus = _Global.document.activeElement; _Global.document.body.appendChild(this._clickEaterEl); } else { Application.removeEventListener("beforerequestingfocusonkeyboardinput", this._onBeforeRequestingFocusOnKeyboardInputBound); _ElementUtilities._removeEventListener(_Global.document.documentElement, "focusin", this._onFocusInBound); _Global.document.documentElement.removeEventListener("keydown", this._onKeyDownBound); _Global.window.removeEventListener("resize", this._onWindowResizeBound); var parent = this._clickEaterEl.parentNode; parent && parent.removeChild(this._clickEaterEl); } rendered.serviceActive = serviceActive; } var zIndexGap = 0; var lastUsedZIndex = baseZIndex + 1; this._clients.forEach(function (c, i) { var currentZIndex = lastUsedZIndex + zIndexGap; c.setZIndex("" + currentZIndex); lastUsedZIndex = currentZIndex; // count + 1 so that there's an unused zIndex between each pair of // dismissables that can be used by the click eater. zIndexGap = c.getZIndexCount() + 1; }); if (serviceActive) { this._clickEaterEl.style.zIndex = "" + (lastUsedZIndex - 1); } var activeDismissable = this._clients.length > 0 ? this._clients[this._clients.length - 1] : null; if (this._activeDismissable !== activeDismissable) { this._activeDismissable = activeDismissable; activeDismissableNeedsFocus = true; } if (activeDismissableNeedsFocus) { // If the last input type was keyboard, use focus() so a keyboard focus visual is drawn. // Otherwise, use setActive() so no focus visual is drawn. var useSetActive = !_KeyboardBehavior._keyboardSeenLast; this._activeDismissable && this._activeDismissable.onTakeFocus(useSetActive); } }; LightDismissService.prototype._dispatchKeyboardEvent = function (client, keyboardInfoType, eventObject) { var index = this._clients.indexOf(client); if (index !== -1) { var info = { type: keyboardInfoType, keyCode: eventObject.keyCode, propagationStopped: false, stopPropagation: function () { this.propagationStopped = true; eventObject.stopPropagation(); } }; var clients = this._clients.slice(0, index + 1); for (var i = clients.length - 1; i >= 0 && !info.propagationStopped; i--) { clients[i].onKeyInStack(info); } } }; LightDismissService.prototype._dispatchLightDismiss = function (reason, clients, options) { if (this._notifying) { _Log.log && _Log.log('_LightDismissService ignored dismiss trigger to avoid re-entrancy: "' + reason + '"', "winjs _LightDismissService", "warning"); return; } clients = clients || this._clients.slice(0); if (clients.length === 0) { return; } this._notifying = true; var lightDismissInfo = { // Which of the LightDismissalReasons caused this event to fire? reason: reason, // Is this dismissable currently the active dismissable? active: false, _stop: false, stopPropagation: function () { this._stop = true; }, _doDefault: true, preventDefault: function () { this._doDefault = false; } }; for (var i = clients.length - 1; i >= 0 && !lightDismissInfo._stop; i--) { lightDismissInfo.active = this._activeDismissable === clients[i]; if (clients[i].onShouldLightDismiss(lightDismissInfo)) { clients[i].onLightDismiss(lightDismissInfo); } } this._notifying = false; this._updateDom(options); return lightDismissInfo._doDefault; }; LightDismissService.prototype._onBeforeRequestingFocusOnKeyboardInput = function (eventObject) { // Suppress the requestingFocusOnKeyboardInput event. return true; }; // // Light dismiss triggers // // Called by tests. LightDismissService.prototype._clickEaterTapped = function () { this._dispatchLightDismiss(exports.LightDismissalReasons.tap); }; LightDismissService.prototype._onFocusIn = function (eventObject) { var target = eventObject.target; for (var i = this._clients.length - 1; i >= 0; i--) { if (this._clients[i].containsElement(target)) { break; } } if (i !== -1) { this._clients[i].onFocus(target); } if (i + 1 < this._clients.length) { this._dispatchLightDismiss(exports.LightDismissalReasons.lostFocus, this._clients.slice(i + 1), { activeDismissableNeedsFocus: true }); } }; LightDismissService.prototype._onKeyDown = function (eventObject) { if (eventObject.keyCode === _ElementUtilities.Key.escape) { this._escapePressed(eventObject); } }; LightDismissService.prototype._escapePressed = function (eventObject) { eventObject.preventDefault(); eventObject.stopPropagation(); this._dispatchLightDismiss(exports.LightDismissalReasons.escape); }; // Called by tests. LightDismissService.prototype._onBackClick = function (eventObject) { var doDefault = this._dispatchLightDismiss(exports.LightDismissalReasons.hardwareBackButton); return !doDefault; // Returns whether or not the event was handled. }; LightDismissService.prototype._onWindowResize = function (eventObject) { this._dispatchLightDismiss(exports.LightDismissalReasons.windowResize); }; LightDismissService.prototype._onWindowBlur = function (eventObject) { if (this._debug) { return; } // Want to trigger a light dismiss on window blur. // We get blur if we click off the window, including into an iframe within our window. // Both blurs call this function, but fortunately document.hasFocus is true if either // the document window or our iframe window has focus. if (!_Global.document.hasFocus()) { // The document doesn't have focus, so they clicked off the app, so light dismiss. this._dispatchLightDismiss(exports.LightDismissalReasons.windowBlur); } else { // We were trying to unfocus the window, but document still has focus, // so make sure the iframe that took the focus will check for blur next time. var active = _Global.document.activeElement; if (active && active.tagName === "IFRAME" && !active["msLightDismissBlur"]) { // - This will go away when the IFRAME goes away, and we only create one. // - This only works in IE because other browsers don't fire focus events on iframe elements. // - Can't use _ElementUtilities._addEventListener's focusout because it doesn't fire when an // iframe loses focus due to changing windows. active.addEventListener("blur", this._onWindowBlur.bind(this), false); active["msLightDismissBlur"] = true; } } }; LightDismissService.prototype._createClickEater = function () { var clickEater = _Global.document.createElement("section"); clickEater.className = exports._ClassNames._clickEater; _ElementUtilities._addEventListener(clickEater, "pointerdown", this._onClickEaterPointerDown.bind(this), true); clickEater.addEventListener("click", this._onClickEaterClick.bind(this), true); // Tell Aria that it's clickable clickEater.setAttribute("role", "menuitem"); clickEater.setAttribute("aria-label", Strings.closeOverlay); // Prevent CED from removing any current selection clickEater.setAttribute("unselectable", "on"); return clickEater; }; LightDismissService.prototype._onClickEaterPointerDown = function (eventObject) { eventObject.stopPropagation(); eventObject.preventDefault(); this._clickEaterPointerId = eventObject.pointerId; if (!this._registeredClickEaterCleanUp) { _ElementUtilities._addEventListener(_Global.window, "pointerup", this._onClickEaterPointerUpBound); _ElementUtilities._addEventListener(_Global.window, "pointercancel", this._onClickEaterPointerCancelBound); this._registeredClickEaterCleanUp = true; } }; LightDismissService.prototype._onClickEaterPointerUp = function (eventObject) { var _this = this; eventObject.stopPropagation(); eventObject.preventDefault(); if (eventObject.pointerId === this._clickEaterPointerId) { this._resetClickEaterPointerState(); var element = _Global.document.elementFromPoint(eventObject.clientX, eventObject.clientY); if (element === this._clickEaterEl) { this._skipClickEaterClick = true; _BaseUtils._yieldForEvents(function () { _this._skipClickEaterClick = false; }); this._clickEaterTapped(); } } }; LightDismissService.prototype._onClickEaterClick = function (eventObject) { eventObject.stopPropagation(); eventObject.preventDefault(); if (!this._skipClickEaterClick) { // Handle the UIA invoke action on the click eater. this._skipClickEaterClick is false which tells // us that we received a click event without an associated PointerUp event. This means that the click // event was triggered thru UIA rather than thru the GUI. this._clickEaterTapped(); } }; LightDismissService.prototype._onClickEaterPointerCancel = function (eventObject) { if (eventObject.pointerId === this._clickEaterPointerId) { this._resetClickEaterPointerState(); } }; LightDismissService.prototype._resetClickEaterPointerState = function () { if (this._registeredClickEaterCleanUp) { _ElementUtilities._removeEventListener(_Global.window, "pointerup", this._onClickEaterPointerUpBound); _ElementUtilities._removeEventListener(_Global.window, "pointercancel", this._onClickEaterPointerCancelBound); } this._clickEaterPointerId = null; this._registeredClickEaterCleanUp = false; }; return LightDismissService; })(); var service = new LightDismissService(); exports.shown = service.shown.bind(service); exports.hidden = service.hidden.bind(service); exports.updated = service.updated.bind(service); exports.isShown = service.isShown.bind(service); exports.isTopmost = service.isTopmost.bind(service); exports.keyDown = service.keyDown.bind(service); exports.keyUp = service.keyUp.bind(service); exports.keyPress = service.keyPress.bind(service); exports._clickEaterTapped = service._clickEaterTapped.bind(service); exports._onBackClick = service._onBackClick.bind(service); exports._setDebug = service._setDebug.bind(service); _Base.Namespace.define("WinJS.UI._LightDismissService", { shown: exports.shown, hidden: exports.hidden, updated: exports.updated, isShown: exports.isShown, isTopmost: exports.isTopmost, keyDown: exports.keyDown, keyUp: exports.keyUp, keyPress: exports.keyPress, _clickEaterTapped: exports._clickEaterTapped, _onBackClick: exports._onBackClick, _setDebug: exports._setDebug, LightDismissableElement: LightDismissableElement, DismissalPolicies: exports.DismissalPolicies, LightDismissalReasons: exports.LightDismissalReasons, _ClassNames: exports._ClassNames, _service: service }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/_LegacyAppBar/_Constants',[ 'exports', '../../Core/_Base', ], function appBarConstantsInit(exports, _Base) { "use strict"; _Base.Namespace._moduleDefine(exports, null, { // AppBar class names. appBarClass: "win-navbar", firstDivClass: "win-firstdiv", finalDivClass: "win-finaldiv", invokeButtonClass: "win-navbar-invokebutton", ellipsisClass: "win-navbar-ellipsis", primaryCommandsClass: "win-primarygroup", secondaryCommandsClass: "win-secondarygroup", commandLayoutClass: "win-commandlayout", menuLayoutClass: "win-menulayout", topClass: "win-top", bottomClass: "win-bottom", showingClass : "win-navbar-opening", shownClass : "win-navbar-opened", hidingClass : "win-navbar-closing", hiddenClass: "win-navbar-closed", compactClass: "win-navbar-compact", minimalClass: "win-navbar-minimal", menuContainerClass: "win-navbar-menu", // Constants for AppBar placement appBarPlacementTop: "top", appBarPlacementBottom: "bottom", // Constants for AppBar layouts appBarLayoutCustom: "custom", appBarLayoutCommands: "commands", appBarLayoutMenu: "menu", // Constant for AppBar invokebutton width appBarInvokeButtonWidth: 32, // Constants for Commands typeSeparator: "separator", typeContent: "content", typeButton: "button", typeToggle: "toggle", typeFlyout: "flyout", appBarCommandClass: "win-command", appBarCommandGlobalClass: "win-global", appBarCommandSelectionClass: "win-selection", sectionSelection: "selection", /* deprecated, use sectionSecondary */ sectionGlobal: "global", /* deprecated, use sectionPrimary */ sectionPrimary: "primary", sectionSecondary: "secondary", // Constants for Menus menuCommandClass: "win-command", menuCommandButtonClass: "win-command-button", menuCommandToggleClass: "win-command-toggle", menuCommandFlyoutClass: "win-command-flyout", menuCommandFlyoutActivatedClass: "win-command-flyout-activated", menuCommandSeparatorClass: "win-command-separator", _menuCommandInvokedEvent: "_invoked", // Private event menuClass: "win-menu", menuContainsToggleCommandClass: "win-menu-containstogglecommand", menuContainsFlyoutCommandClass: "win-menu-containsflyoutcommand", menuMouseSpacingClass: "win-menu-mousespacing", menuTouchSpacingClass: "win-menu-touchspacing", menuCommandHoverDelay: 400, // Other class names overlayClass: "win-overlay", flyoutClass: "win-flyout", flyoutLightClass: "win-ui-light", settingsFlyoutClass: "win-settingsflyout", scrollsClass: "win-scrolls", pinToRightEdge: -1, pinToBottomEdge: -1, // Constants for AppBarCommand full-size widths. separatorWidth: 34, buttonWidth: 68, narrowClass: "win-narrow", wideClass: "win-wide", _visualViewportClass: "win-visualviewport-space", // Event names commandPropertyMutated: "_commandpropertymutated", commandVisibilityChanged: "commandvisibilitychanged", }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// define('WinJS/Utilities/_KeyboardInfo',["require", "exports", '../Core/_BaseCoreUtils', '../Core/_Global', '../Core/_WinRT'], function (require, exports, _BaseCoreUtils, _Global, _WinRT) { "use strict"; var _Constants = { visualViewportClass: "win-visualviewport-space", scrollTimeout: 150, }; // This private module provides accurate metrics for the Visual Viewport and WWA's IHM offsets in Win10 WWA // where "-ms-device-fixed" CSS positioning is supported. WinJS controls will also use this module for // positoning themselves relative to the viewport in a web browser outside of WWA. Their preference is still // to rely on "-ms-device-fixed" positioning, but currently fallback to "fixed" positioning in enviornments where // "-ms-device-fixed" is not supported. exports._KeyboardInfo; // WWA Soft Keyboard offsets exports._KeyboardInfo = { // Determine if the keyboard is visible or not. get _visible() { try { return (_WinRT.Windows.UI.ViewManagement.InputPane && _WinRT.Windows.UI.ViewManagement.InputPane.getForCurrentView().occludedRect.height > 0); } catch (e) { return false; } }, // See if we have to reserve extra space for the IHM get _extraOccluded() { var occluded = 0; // Controls using -ms-device-fixed positioning only need to reposition themselves to remain visible // If the IHM has not resized the viewport. if (!exports._KeyboardInfo._isResized && _WinRT.Windows.UI.ViewManagement.InputPane) { occluded = _WinRT.Windows.UI.ViewManagement.InputPane.getForCurrentView().occludedRect.height; } return occluded; }, // See if the view has been resized to fit a keyboard get _isResized() { // Compare ratios. Very different includes IHM space. var heightRatio = _Global.document.documentElement.clientHeight / _Global.innerHeight, widthRatio = _Global.document.documentElement.clientWidth / _Global.innerWidth; // If they're nearly identical, then the view hasn't been resized for the IHM // Only check one bound because we know the IHM will make it shorter, not skinnier. return (widthRatio / heightRatio < 0.99); }, // Get the bottom of the visible area, relative to the top edge of the visible area. get _visibleDocBottom() { return exports._KeyboardInfo._visibleDocTop + exports._KeyboardInfo._visibleDocHeight; }, // Get the height of the visible area, e.g. the height of the visual viewport minus any IHM occlusion. get _visibleDocHeight() { return exports._KeyboardInfo._visualViewportHeight - exports._KeyboardInfo._extraOccluded; }, // Get the top offset of our visible area, aka the top of the visual viewport. // This is always 0 when elements use -ms-device-fixed positioning. get _visibleDocTop() { return 0; }, // Get the offset for, and relative to, the bottom edge of the visual viewport plus any IHM occlusion. get _visibleDocBottomOffset() { // For -ms-device-fixed positioned elements, the bottom is just 0 when there's no IHM. // When the IHM appears, the text input that invoked it may be in a position on the page that is occluded by the IHM. // In that instance, the default browser behavior is to resize the visual viewport and scroll the input back into view. // However, if the viewport resize is prevented by an IHM event listener, the keyboard will still occlude // -ms-device-fixed elements, so we adjust the bottom offset of the appbar by the height of the occluded rect of the IHM. return exports._KeyboardInfo._extraOccluded; }, // Get the visual viewport height. window.innerHeight doesn't return floating point values which are present with high DPI. get _visualViewportHeight() { var boundingRect = exports._KeyboardInfo._visualViewportSpace; return boundingRect.height; }, // Get the visual viewport width. window.innerWidth doesn't return floating point values which are present with high DPI. get _visualViewportWidth() { var boundingRect = exports._KeyboardInfo._visualViewportSpace; return boundingRect.width; }, // The visual viewport space element is hidden given -ms-device-fixed positioning and used to calculate // the 4 edges of the visual viewport with floating point precision. get _visualViewportSpace() { var visualViewportSpace = _Global.document.body.querySelector("." + _Constants.visualViewportClass); if (!visualViewportSpace) { visualViewportSpace = _Global.document.createElement("DIV"); visualViewportSpace.className = _Constants.visualViewportClass; _Global.document.body.appendChild(visualViewportSpace); } return visualViewportSpace.getBoundingClientRect(); }, // Get total length of the IHM showPanel animation get _animationShowLength() { if (_BaseCoreUtils.hasWinRT) { if (_WinRT.Windows.UI.Core.AnimationMetrics) { // Desktop exposes the AnimationMetrics API that allows us to look up the relevant IHM animation metrics. var a = _WinRT.Windows.UI.Core.AnimationMetrics, animationDescription = new a.AnimationDescription(a.AnimationEffect.showPanel, a.AnimationEffectTarget.primary); var animations = animationDescription.animations; var max = 0; for (var i = 0; i < animations.size; i++) { var animation = animations[i]; max = Math.max(max, animation.delay + animation.duration); } return max; } else { // Phone platform does not yet expose the Animation Metrics API. // Hard code the correct values for the time being. // https://github.com/winjs/winjs/issues/1060 var animationDuration = 300; var animationDelay = 50; return animationDelay + animationDuration; } } else { return 0; } }, // Padding for IHM timer to allow for first scroll event. Tpyically used in conjunction with the // _animationShowLength to determine the length of time in which a showing IHM would have triggered // a window resize to occur. get _scrollTimeout() { return _Constants.scrollTimeout; }, // _layoutViewportCoords is used with elements that use position:fixed instead of position:-ms-device-fixed get _layoutViewportCoords() { var topOffset = _Global.window.pageYOffset - _Global.document.documentElement.scrollTop; var bottomOffset = _Global.document.documentElement.clientHeight - (topOffset + this._visibleDocHeight); return { visibleDocTop: topOffset, visibleDocBottom: bottomOffset }; } }; }); define('require-style!less/styles-overlay',[],function(){}); define('require-style!less/colors-overlay',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// animatable,appbar,appbars,divs,Flyout,Flyouts,iframe,Statics,unfocus,unselectable define('WinJS/Controls/Flyout/_Overlay',[ 'exports', '../../Core/_Global', '../../Core/_WinRT', '../../Core/_Base', '../../Core/_BaseUtils', '../../Core/_ErrorFromName', '../../Core/_Events', '../../Core/_Resources', '../../Core/_WriteProfilerMark', '../../_Accents', '../../Animations', '../../Application', '../../ControlProcessor', '../../Promise', '../../Scheduler', '../../Utilities/_Control', '../../Utilities/_ElementUtilities', '../../Utilities/_KeyboardInfo', '../_LegacyAppBar/_Constants', 'require-style!less/styles-overlay', 'require-style!less/colors-overlay' ], function overlayInit(exports, _Global, _WinRT, _Base, _BaseUtils, _ErrorFromName, _Events, _Resources, _WriteProfilerMark, _Accents, Animations, Application, ControlProcessor, Promise, Scheduler, _Control, _ElementUtilities, _KeyboardInfo, _Constants) { "use strict"; _Accents.createAccentRule( "button[aria-checked=true].win-command:before,\ .win-menu-containsflyoutcommand button.win-command-flyout-activated:before", [ { name: "background-color", value: _Accents.ColorTypes.accent }, { name: "border-color", value: _Accents.ColorTypes.accent }, ]); _Accents.createAccentRule(".win-flyout, .win-settingsflyout", [{ name: "border-color", value: _Accents.ColorTypes.accent }]); _Base.Namespace._moduleDefine(exports, "WinJS.UI", { _Overlay: _Base.Namespace._lazy(function () { // Helper for Global Event listeners. Invokes the specified callback member function on each _Overlay in the DOM. function _allOverlaysCallback(event, nameOfFunctionCall, stopImmediatePropagationWhenHandled) { var elements = _Global.document.querySelectorAll("." + _Constants.overlayClass); if (elements) { var len = elements.length; for (var i = 0; i < len; i++) { var element = elements[i]; var overlay = element.winControl; if (!overlay._disposed) { if (overlay) { var handled = overlay[nameOfFunctionCall](event); if (stopImmediatePropagationWhenHandled && handled) { // The caller has indicated we should exit as soon as the event is handled. return handled; } } } } } } // _Overlay Global Events Listener Class. We hang a singleton instance of this class off of a static _Overlay property. var _GlobalListener = _Base.Class.define(function _GlobalListener_ctor() { this._currentState = _GlobalListener.states.off; this._inputPaneShowing = this._inputPaneShowing.bind(this); this._inputPaneHiding = this._inputPaneHiding.bind(this); this._documentScroll = this._documentScroll.bind(this); this._windowResized = this._windowResized.bind(this); }, { initialize: function _GlobalListener_initialize() { this._toggleListeners(_GlobalListener.states.on); }, // Expose this for unit tests. reset: function _GlobalListener_reset() { this._toggleListeners(_GlobalListener.states.off); this._toggleListeners(_GlobalListener.states.on); }, _inputPaneShowing: function _GlobalListener_inputePaneShowing(event) { _WriteProfilerMark(_GlobalListener.profilerString + "_showingKeyboard,StartTM"); _allOverlaysCallback(event, "_showingKeyboard"); _WriteProfilerMark(_GlobalListener.profilerString + "_showingKeyboard,StopTM"); }, _inputPaneHiding: function _GlobalListener_inputPaneHiding(event) { _WriteProfilerMark(_GlobalListener.profilerString + "_hidingKeyboard,StartTM"); _allOverlaysCallback(event, "_hidingKeyboard"); _WriteProfilerMark(_GlobalListener.profilerString + "_hidingKeyboard,StopTM"); }, _documentScroll: function _GlobalListener_documentScroll(event) { _WriteProfilerMark(_GlobalListener.profilerString + "_checkScrollPosition,StartTM"); _allOverlaysCallback(event, "_checkScrollPosition"); _WriteProfilerMark(_GlobalListener.profilerString + "_checkScrollPosition,StopTM"); }, _windowResized: function _GlobalListener_windowResized(event) { _WriteProfilerMark(_GlobalListener.profilerString + "_baseResize,StartTM"); _allOverlaysCallback(event, "_baseResize"); _WriteProfilerMark(_GlobalListener.profilerString + "_baseResize,StopTM"); }, _toggleListeners: function _GlobalListener_toggleListeners(newState) { // Add/Remove global event listeners for all _Overlays var listenerOperation; if (this._currentState !== newState) { if (newState === _GlobalListener.states.on) { listenerOperation = "addEventListener"; } else if (newState === _GlobalListener.states.off) { listenerOperation = "removeEventListener"; } if (_WinRT.Windows.UI.ViewManagement.InputPane) { // React to Soft Keyboard events var inputPane = _WinRT.Windows.UI.ViewManagement.InputPane.getForCurrentView(); inputPane[listenerOperation]("showing", this._inputPaneShowing, false); inputPane[listenerOperation]("hiding", this._inputPaneHiding, false); _Global.document[listenerOperation]("scroll", this._documentScroll, false); } // Window resize event _Global.addEventListener("resize", this._windowResized, false); this._currentState = newState; } }, }, { // Statics profilerString: { get: function () { return "WinJS.UI._Overlay Global Listener:"; } }, states: { get: function () { return { off: 0, on: 1, }; }, }, }); // Helper to get DOM elements from input single object or array or IDs/toolkit/dom elements function _resolveElements(elements) { // No input is just an empty array if (!elements) { return []; } // Make sure it's in array form. if (typeof elements === "string" || !elements || !elements.length) { elements = [elements]; } // Make sure we have a DOM element for each one, (could be string id name or toolkit object) var i, realElements = []; for (i = 0; i < elements.length; i++) { if (elements[i]) { if (typeof elements[i] === "string") { var element = _Global.document.getElementById(elements[i]); if (element) { realElements.push(element); } } else if (elements[i].element) { realElements.push(elements[i].element); } else { realElements.push(elements[i]); } } } return realElements; } var strings = { get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; }, get mustContainCommands() { return "Invalid HTML: AppBars/Menus must contain only AppBarCommands/MenuCommands"; }, get closeOverlay() { return _Resources._getWinJSString("ui/closeOverlay").value; }, }; var _Overlay = _Base.Class.define(function _Overlay_ctor(element, options) { /// /// /// Constructs the Overlay control and associates it with the underlying DOM element. /// /// /// The DOM element to be associated with the Overlay control. /// /// /// The set of options to be applied initially to the Overlay control. /// /// A fully constructed Overlay control. /// this._baseOverlayConstructor(element, options); }, { // Functions/properties _baseOverlayConstructor: function _Overlay_baseOverlayConstructor(element, options) { this._disposed = false; // Make sure there's an input element if (!element) { element = _Global.document.createElement("div"); } // Check to make sure we weren't duplicated var overlay = element.winControl; if (overlay) { throw new _ErrorFromName("WinJS.UI._Overlay.DuplicateConstruction", strings.duplicateConstruction); } if (!this._element) { this._element = element; } if (!this._element.hasAttribute("tabIndex")) { this._element.tabIndex = -1; } this._sticky = false; this._doNext = ""; this._element.style.visibility = "hidden"; this._element.style.opacity = 0; // Remember ourselves element.winControl = this; // Attach our css class _ElementUtilities.addClass(this._element, _Constants.overlayClass); _ElementUtilities.addClass(this._element, "win-disposable"); // We don't want to be selectable, set UNSELECTABLE var unselectable = this._element.getAttribute("unselectable"); if (unselectable === null || unselectable === undefined) { this._element.setAttribute("unselectable", "on"); } // Base animation is popIn/popOut this._currentAnimateIn = this._baseAnimateIn; this._currentAnimateOut = this._baseAnimateOut; this._animationPromise = Promise.as(); // Command Animations to Queue this._queuedToShow = []; this._queuedToHide = []; this._queuedCommandAnimation = false; if (options) { _Control.setOptions(this, options); } // Make sure _Overlay event handlers are hooked up (this aids light dismiss) _Overlay._globalEventListeners.initialize(); }, /// element: { get: function () { return this._element; } }, dispose: function () { /// /// /// Disposes this Overlay. /// /// if (this._disposed) { return; } this._disposed = true; this._dispose(); }, _dispose: function _Overlay_dispose() { // To be overridden by subclasses }, _show: function _Overlay_show() { // We call our base _baseShow because AppBar may need to override show this._baseShow(); }, _hide: function _Overlay_hide() { // We call our base _baseHide because AppBar may need to override hide this._baseHide(); }, // Is the overlay "hidden"? /// hidden: { get: function () { return (this._element.style.visibility === "hidden" || this._element.winAnimating === "hiding" || this._doNext === "hide"); }, set: function (hidden) { var currentlyHidden = this.hidden; if (!hidden && currentlyHidden) { this._show(); } else if (hidden && !currentlyHidden) { this._hide(); } } }, addEventListener: function (type, listener, useCapture) { /// /// /// Add an event listener to the DOM element for this Overlay /// /// Required. Event type to add, "beforehide", "afterhide", "beforeshow", or "aftershow" /// Required. The event handler function to associate with this event. /// Optional. True, register for the event capturing phase. False for the event bubbling phase. /// return this._element.addEventListener(type, listener, useCapture); }, removeEventListener: function (type, listener, useCapture) { /// /// /// Remove an event listener to the DOM element for this Overlay /// /// Required. Event type to remove, "beforehide", "afterhide", "beforeshow", or "aftershow" /// Required. The event handler function to associate with this event. /// Optional. True, register for the event capturing phase. False for the event bubbling phase. /// return this._element.removeEventListener(type, listener, useCapture); }, _baseShow: function _Overlay_baseShow() { // If we are already animating, just remember this for later if (this._animating || this._needToHandleHidingKeyboard) { this._doNext = "show"; return false; } if (this._element.style.visibility !== "visible") { // Let us know we're showing. this._element.winAnimating = "showing"; // Hiding, but not none this._element.style.display = ""; this._element.style.visibility = "hidden"; // In case their event is going to manipulate commands, see if there are // any queued command animations we can handle while we're still hidden. if (this._queuedCommandAnimation) { this._showAndHideFast(this._queuedToShow, this._queuedToHide); this._queuedToShow = []; this._queuedToHide = []; } // Send our "beforeShow" event this._sendEvent(_Overlay.beforeShow); // Need to measure this._findPosition(); // Make sure it's visible, and fully opaque. // Do the popup thing, sending event afterward. var that = this; this._animationPromise = this._currentAnimateIn(). then(function () { that._baseEndShow(); }, function () { that._baseEndShow(); }); return true; } return false; }, // Flyout in particular will need to measure our positioning. _findPosition: function _Overlay_findPosition() { }, _baseEndShow: function _Overlay_baseEndShow() { if (this._disposed) { return; } // Make sure it's visible after showing this._element.setAttribute("aria-hidden", "false"); this._element.winAnimating = ""; // Do our derived classes show stuff this._endShow(); // We're shown now if (this._doNext === "show") { this._doNext = ""; } // After showing, send the after showing event this._sendEvent(_Overlay.afterShow); this._writeProfilerMark("show,StopTM"); // Overlay writes the stop profiler mark for all of its derived classes. // If we had something queued, do that Scheduler.schedule(this._checkDoNext, Scheduler.Priority.normal, this, "WinJS.UI._Overlay._checkDoNext"); }, _endShow: function _Overlay_endShow() { // Nothing by default }, _baseHide: function _Overlay_baseHide() { // If we are already animating, just remember this for later if (this._animating) { this._doNext = "hide"; return false; } // In the unlikely event we're between the hiding keyboard and the resize events, just snap it away: if (this._needToHandleHidingKeyboard) { // use the "uninitialized" flag this._element.style.visibility = ""; } if (this._element.style.visibility !== "hidden") { // Let us know we're hiding, accessibility as well. this._element.winAnimating = "hiding"; this._element.setAttribute("aria-hidden", "true"); // Send our "beforeHide" event this._sendEvent(_Overlay.beforeHide); // If our visibility is empty, then this is the first time, just hide it if (this._element.style.visibility === "") { // Initial hiding, just hide it this._element.style.opacity = 0; this._baseEndHide(); } else { // Make sure it's hidden, and fully transparent. var that = this; this._animationPromise = this._currentAnimateOut(). then(function () { that._baseEndHide(); }, function () { that._baseEndHide(); }); } return true; } return false; }, _baseEndHide: function _Overlay_baseEndHide() { if (this._disposed) { return; } // Do our derived classes hide stuff this._beforeEndHide(); // Make sure animation is finished. this._element.style.visibility = "hidden"; this._element.style.display = "none"; this._element.winAnimating = ""; // In case their event is going to manipulate commands, see if there // are any queued command animations we can handle now we're hidden. if (this._queuedCommandAnimation) { this._showAndHideFast(this._queuedToShow, this._queuedToHide); this._queuedToShow = []; this._queuedToHide = []; } // We're hidden now if (this._doNext === "hide") { this._doNext = ""; } // After hiding, send our "afterHide" event this._sendEvent(_Overlay.afterHide); this._writeProfilerMark("hide,StopTM"); // Overlay writes the stop profiler mark for all of its derived classes. // If we had something queued, do that. This has to be after // the afterHide event in case it triggers a show() and they // have something to do in beforeShow that requires afterHide first. Scheduler.schedule(this._checkDoNext, Scheduler.Priority.normal, this, "WinJS.UI._Overlay._checkDoNext"); }, // Called after the animation but while the Overlay is still visible. It's // important that this runs while the Overlay is visible because hiding // a DOM element (e.g. visibility="hidden", display="none") while it contains // focus has the side effect of moving focus to the body or null and triggering // focus move events. _beforeEndHide is a good hook for the Overlay to move focus // elsewhere before its DOM element gets hidden. _beforeEndHide: function _Overlay_beforeEndHide() { // Nothing by default }, _checkDoNext: function _Overlay_checkDoNext() { // Do nothing if we're still animating if (this._animating || this._needToHandleHidingKeyboard || this._disposed) { return; } if (this._doNext === "hide") { // Do hide first because animating commands would be easier this._hide(); this._doNext = ""; } else if (this._queuedCommandAnimation) { // Do queued commands before showing if possible this._showAndHideQueue(); } else if (this._doNext === "show") { // Show last so that we don't unnecessarily animate commands this._show(); this._doNext = ""; } }, // Default animations _baseAnimateIn: function _Overlay_baseAnimateIn() { this._element.style.opacity = 0; this._element.style.visibility = "visible"; // touch opacity so that IE fades from the 0 we just set to 1 _Global.getComputedStyle(this._element, null).opacity; return Animations.fadeIn(this._element); }, _baseAnimateOut: function _Overlay_baseAnimateOut() { this._element.style.opacity = 1; // touch opacity so that IE fades from the 1 we just set to 0 _Global.getComputedStyle(this._element, null).opacity; return Animations.fadeOut(this._element); }, _animating: { get: function _Overlay_animating_get() { // Ensure it's a boolean because we're using the DOM element to keep in-sync return !!this._element.winAnimating; } }, // Send one of our events _sendEvent: function _Overlay_sendEvent(eventName, detail) { if (this._disposed) { return; } var event = _Global.document.createEvent("CustomEvent"); event.initEvent(eventName, true, true, (detail || {})); this._element.dispatchEvent(event); }, // Show commands _showCommands: function _Overlay_showCommands(commands, immediate) { var showHide = this._resolveCommands(commands); this._showAndHideCommands(showHide.commands, [], immediate); }, // Hide commands _hideCommands: function _Overlay_hideCommands(commands, immediate) { var showHide = this._resolveCommands(commands); this._showAndHideCommands([], showHide.commands, immediate); }, // Hide commands _showOnlyCommands: function _Overlay_showOnlyCommands(commands, immediate) { var showHide = this._resolveCommands(commands); this._showAndHideCommands(showHide.commands, showHide.others, immediate); }, _showAndHideCommands: function _Overlay_showAndHideCommands(showCommands, hideCommands, immediate) { // Immediate is "easy" if (immediate || (this.hidden && !this._animating)) { // Immediate mode (not animated) this._showAndHideFast(showCommands, hideCommands); // Need to remove them from queues, but others could be queued this._removeFromQueue(showCommands, this._queuedToShow); this._removeFromQueue(hideCommands, this._queuedToHide); } else { // Queue Commands this._updateAnimateQueue(showCommands, this._queuedToShow, this._queuedToHide); this._updateAnimateQueue(hideCommands, this._queuedToHide, this._queuedToShow); } }, _removeFromQueue: function _Overlay_removeFromQueue(commands, queue) { // remove commands from queue. var count; for (count = 0; count < commands.length; count++) { // Remove if it was in queue var countQ; for (countQ = 0; countQ < queue.length; countQ++) { if (queue[countQ] === commands[count]) { queue.splice(countQ, 1); break; } } } }, _updateAnimateQueue: function _Overlay_updateAnimateQueue(addCommands, toQueue, fromQueue) { if (this._disposed) { return; } // Add addCommands to toQueue and remove addCommands from fromQueue. var count; for (count = 0; count < addCommands.length; count++) { // See if it's already in toQueue var countQ; for (countQ = 0; countQ < toQueue.length; countQ++) { if (toQueue[countQ] === addCommands[count]) { break; } } if (countQ === toQueue.length) { // Not found, add it toQueue[countQ] = addCommands[count]; } // Remove if it was in fromQueue for (countQ = 0; countQ < fromQueue.length; countQ++) { if (fromQueue[countQ] === addCommands[count]) { fromQueue.splice(countQ, 1); break; } } } // If we haven't queued the actual animation if (!this._queuedCommandAnimation) { // If not already animating, we'll need to call _checkDoNext if (!this._animating) { Scheduler.schedule(this._checkDoNext, Scheduler.Priority.normal, this, "WinJS.UI._Overlay._checkDoNext"); } this._queuedCommandAnimation = true; } }, // show/hide commands without doing any animation. _showAndHideFast: function _Overlay_showAndHideFast(showCommands, hideCommands) { var count; var command; for (count = 0; count < showCommands.length; count++) { command = showCommands[count]; if (command && command.style) { command.style.visibility = ""; command.style.display = ""; } } for (count = 0; count < hideCommands.length; count++) { command = hideCommands[count]; if (command && command.style) { command.style.visibility = "hidden"; command.style.display = "none"; } } this._commandsUpdated(); }, // show and hide the queued commands, perhaps animating if overlay isn't hidden. _showAndHideQueue: function _Overlay_showAndHideQueue() { // Only called if not currently animating. // We'll be done with the queued stuff when we return. this._queuedCommandAnimation = false; // Shortcut if hidden if (this.hidden) { this._showAndHideFast(this._queuedToShow, this._queuedToHide); // Might be something else to do Scheduler.schedule(this._checkDoNext, Scheduler.Priority.normal, this, "WinJS.UI._Overlay._checkDoNext"); } else { // Animation has 3 parts: "hiding", "showing", and "moving" // PVL has "addToList" and "deleteFromList", both of which allow moving parts. // So we'll set up "add" for showing, and use "delete" for "hiding" + moving, // then trigger both at the same time. var showCommands = this._queuedToShow; var hideCommands = this._queuedToHide; var siblings = this._findSiblings(showCommands.concat(hideCommands)); // Filter out the commands queued for animation that don't need to be animated. var count; for (count = 0; count < showCommands.length; count++) { // If this one's not real or not attached, skip it if (!showCommands[count] || !showCommands[count].style || !_Global.document.body.contains(showCommands[count])) { // Not real, skip it showCommands.splice(count, 1); count--; } else if (showCommands[count].style.visibility !== "hidden" && showCommands[count].style.opacity !== "0") { // Don't need to animate showing this one, already visible, so now it's a sibling siblings.push(showCommands[count]); showCommands.splice(count, 1); count--; } } for (count = 0; count < hideCommands.length; count++) { // If this one's not real or not attached, skip it if (!hideCommands[count] || !hideCommands[count].style || !_Global.document.body.contains(hideCommands[count]) || hideCommands[count].style.visibility === "hidden" || hideCommands[count].style.opacity === "0") { // Don't need to animate hiding this one, not real, or it's hidden, // so don't even need it as a sibling. hideCommands.splice(count, 1); count--; } } // Start command animations. var commandsAnimationPromise = this._baseBeginAnimateCommands(showCommands, hideCommands, siblings); // Hook end animations var that = this; if (commandsAnimationPromise) { // Needed to animate commandsAnimationPromise.done( function () { that._baseEndAnimateCommands(hideCommands); }, function () { that._baseEndAnimateCommands(hideCommands); } ); } else { // Already positioned correctly Scheduler.schedule(function Overlay_async_baseEndAnimationCommands() { that._baseEndAnimateCommands([]); }, Scheduler.Priority.normal, null, "WinJS.UI._Overlay._endAnimateCommandsWithoutAnimation"); } } // Done, clear queues this._queuedToShow = []; this._queuedToHide = []; }, _baseBeginAnimateCommands: function _Overlay_baseBeginAnimateCommands(showCommands, hideCommands, siblings) { // The parameters are 3 mutually exclusive arrays of win-command elements contained in this Overlay. // 1) showCommands[]: All of the HIDDEN win-command elements that ARE scheduled to show. // 2) hideCommands[]: All of the VISIBLE win-command elements that ARE shceduled to hide. // 3) siblings[]: i. All VISIBLE win-command elements that ARE NOT scheduled to hide. // ii. All HIDDEN win-command elements that ARE NOT scheduled to hide OR show. this._beginAnimateCommands(showCommands, hideCommands, this._getVisibleCommands(siblings)); var showAnimated = null, hideAnimated = null; // Hide commands first, with siblings if necessary, // so that the showing commands don't disrupt the hiding commands position. if (hideCommands.length > 0) { hideAnimated = Animations.createDeleteFromListAnimation(hideCommands, showCommands.length === 0 ? siblings : undefined); } if (showCommands.length > 0) { showAnimated = Animations.createAddToListAnimation(showCommands, siblings); } // Update hiding commands for (var count = 0, len = hideCommands.length; count < len; count++) { // Need to fix our position var rectangle = hideCommands[count].getBoundingClientRect(), style = _Global.getComputedStyle(hideCommands[count]); // Use the bounding box, adjusting for margins hideCommands[count].style.top = (rectangle.top - parseFloat(style.marginTop)) + "px"; hideCommands[count].style.left = (rectangle.left - parseFloat(style.marginLeft)) + "px"; hideCommands[count].style.opacity = 0; hideCommands[count].style.position = "fixed"; } // Mark as animating this._element.winAnimating = "rearranging"; // Start hiding animations // Hide needs extra cleanup when done var promise = null; if (hideAnimated) { promise = hideAnimated.execute(); } // Update showing commands, // After hiding commands so that the hiding ones fade in the right place. for (count = 0; count < showCommands.length; count++) { showCommands[count].style.visibility = ""; showCommands[count].style.display = ""; showCommands[count].style.opacity = 1; } // Start showing animations if (showAnimated) { var newPromise = showAnimated.execute(); if (promise) { promise = Promise.join([promise, newPromise]); } else { promise = newPromise; } } return promise; }, _beginAnimateCommands: function _Overlay_beginAnimateCommands() { // Nothing by default }, _getVisibleCommands: function _Overlay_getVisibleCommands(commandSubSet) { var command, commands = commandSubSet, visibleCommands = []; if (!commands) { // Crawl the inner HTML for the commands. commands = this.element.querySelectorAll(".win-command"); } for (var i = 0, len = commands.length; i < len; i++) { command = commands[i].winControl || commands[i]; if (!command.hidden) { visibleCommands.push(command); } } return visibleCommands; }, // Once animation is complete, ensure that the commands are display:none // and check if there's another animation to start. _baseEndAnimateCommands: function _Overlay_baseEndAnimateCommands(hideCommands) { if (this._disposed) { return; } // Update us var count; for (count = 0; count < hideCommands.length; count++) { // Force us back into our appbar so that we can show again correctly hideCommands[count].style.position = ""; hideCommands[count].style.top = ""; hideCommands[count].style.left = ""; hideCommands[count].getBoundingClientRect(); // Now make us really hidden hideCommands[count].style.visibility = "hidden"; hideCommands[count].style.display = "none"; hideCommands[count].style.opacity = 1; } // Done animating this._element.winAnimating = ""; this._endAnimateCommands(); // Might be something else to do this._checkDoNext(); }, _endAnimateCommands: function _Overlay_endAnimateCommands() { // Nothing by default }, // Resolves our commands _resolveCommands: function _Overlay_resolveCommands(commands) { // First make sure they're all DOM elements. commands = _resolveElements(commands); // Now make sure they're all in this container var result = {}; result.commands = []; result.others = []; var allCommands = this.element.querySelectorAll(".win-command"); var countAll, countIn; for (countAll = 0; countAll < allCommands.length; countAll++) { var found = false; for (countIn = 0; countIn < commands.length; countIn++) { if (commands[countIn] === allCommands[countAll]) { result.commands.push(allCommands[countAll]); commands.splice(countIn, 1); found = true; break; } } if (!found) { result.others.push(allCommands[countAll]); } } return result; }, // Find siblings, all DOM elements now. // Returns all .win-commands in this Overlay that are NOT in the passed in 'commands' array. _findSiblings: function _Overlay_findSiblings(commands) { // Now make sure they're all in this container var siblings = []; var allCommands = this.element.querySelectorAll(".win-command"); var countAll, countIn; for (countAll = 0; countAll < allCommands.length; countAll++) { var found = false; for (countIn = 0; countIn < commands.length; countIn++) { if (commands[countIn] === allCommands[countAll]) { commands.splice(countIn, 1); found = true; break; } } if (!found) { siblings.push(allCommands[countAll]); } } return siblings; }, _baseResize: function _Overlay_baseResize(event) { // Call specific resize this._resize(event); }, _hideOrDismiss: function _Overlay_hideOrDismiss() { var element = this._element; if (element && _ElementUtilities.hasClass(element, _Constants.settingsFlyoutClass)) { this._dismiss(); } else if (element && _ElementUtilities.hasClass(element, _Constants.appBarClass)) { this.close(); } else { this.hide(); } }, _resize: function _Overlay_resize() { // Nothing by default }, _commandsUpdated: function _Overlay_commandsUpdated() { // Nothing by default }, _checkScrollPosition: function _Overlay_checkScrollPosition() { // Nothing by default }, _showingKeyboard: function _Overlay_showingKeyboard() { // Nothing by default }, _hidingKeyboard: function _Overlay_hidingKeyboard() { // Nothing by default }, // Verify that this HTML AppBar only has AppBar/MenuCommands. _verifyCommandsOnly: function _Overlay_verifyCommandsOnly(element, type) { var children = element.children; var commands = new Array(children.length); for (var i = 0; i < children.length; i++) { // If constructed they have win-command class, otherwise they have data-win-control if (!_ElementUtilities.hasClass(children[i], "win-command") && children[i].getAttribute("data-win-control") !== type) { // Wasn't tagged with class or AppBar/MenuCommand, not an AppBar/MenuCommand throw new _ErrorFromName("WinJS.UI._Overlay.MustContainCommands", strings.mustContainCommands); } else { // Instantiate the commands. ControlProcessor.processAll(children[i]); commands[i] = children[i].winControl; } } return commands; }, // Sets focus on what we think is the last tab stop. If nothing is focusable will // try to set focus on itself. _focusOnLastFocusableElementOrThis: function _Overlay_focusOnLastFocusableElementOrThis() { if (!this._focusOnLastFocusableElement()) { // Nothing is focusable. Set focus to this. _Overlay._trySetActive(this._element); } }, // Sets focus to what we think is the last tab stop. This element must have // a firstDiv with tabIndex equal to the lowest tabIndex in the element // and a finalDiv with tabIndex equal to the highest tabIndex in the element. // Also the firstDiv must be its first child and finalDiv be its last child. // Returns true if successful, false otherwise. _focusOnLastFocusableElement: function _Overlay_focusOnLastFocusableElement() { if (this._element.firstElementChild) { var oldFirstTabIndex = this._element.firstElementChild.tabIndex; var oldLastTabIndex = this._element.lastElementChild.tabIndex; this._element.firstElementChild.tabIndex = -1; this._element.lastElementChild.tabIndex = -1; var tabResult = _ElementUtilities._focusLastFocusableElement(this._element); if (tabResult) { _Overlay._trySelect(_Global.document.activeElement); } this._element.firstElementChild.tabIndex = oldFirstTabIndex; this._element.lastElementChild.tabIndex = oldLastTabIndex; return tabResult; } else { return false; } }, // Sets focus on what we think is the first tab stop. If nothing is focusable will // try to set focus on itself. _focusOnFirstFocusableElementOrThis: function _Overlay_focusOnFirstFocusableElementOrThis() { if (!this._focusOnFirstFocusableElement()) { // Nothing is focusable. Set focus to this. _Overlay._trySetActive(this._element); } }, // Sets focus to what we think is the first tab stop. This element must have // a firstDiv with tabIndex equal to the lowest tabIndex in the element // and a finalDiv with tabIndex equal to the highest tabIndex in the element. // Also the firstDiv must be its first child and finalDiv be its last child. // Returns true if successful, false otherwise. _focusOnFirstFocusableElement: function _Overlay__focusOnFirstFocusableElement(useSetActive, scroller) { if (this._element.firstElementChild) { var oldFirstTabIndex = this._element.firstElementChild.tabIndex; var oldLastTabIndex = this._element.lastElementChild.tabIndex; this._element.firstElementChild.tabIndex = -1; this._element.lastElementChild.tabIndex = -1; var tabResult = _ElementUtilities._focusFirstFocusableElement(this._element, useSetActive, scroller); if (tabResult) { _Overlay._trySelect(_Global.document.activeElement); } this._element.firstElementChild.tabIndex = oldFirstTabIndex; this._element.lastElementChild.tabIndex = oldLastTabIndex; return tabResult; } else { return false; } }, _writeProfilerMark: function _Overlay_writeProfilerMark(text) { _WriteProfilerMark("WinJS.UI._Overlay:" + this._id + ":" + text); } }, { // Statics _isFlyoutVisible: function () { var flyouts = _Global.document.querySelectorAll("." + _Constants.flyoutClass); for (var i = 0; i < flyouts.length; i++) { var flyoutControl = flyouts[i].winControl; if (flyoutControl && !flyoutControl.hidden) { return true; } } return false; }, // Try to set us as active _trySetActive: function (element, scroller) { if (!element || !_Global.document.body || !_Global.document.body.contains(element)) { return false; } if (!_ElementUtilities._setActive(element, scroller)) { return false; } return (element === _Global.document.activeElement); }, // Try to select the text so keyboard can be used. _trySelect: function (element) { try { if (element && element.select) { element.select(); } } catch (e) { } }, _sizeOfDocument: function () { return { width: _Global.document.documentElement.offsetWidth, height: _Global.document.documentElement.offsetHeight, }; }, _getParentControlUsingClassName: function (element, className) { while (element && element !== _Global.document.body) { if (_ElementUtilities.hasClass(element, className)) { return element.winControl; } element = element.parentNode; } return null; }, // Static controller for _Overlay global events registering/unregistering. _globalEventListeners: new _GlobalListener(), // Show/Hide all bars _hideAppBars: function _Overlay_hideAppBars(bars, keyboardInvoked) { var allBarsAnimationPromises = bars.map(function (bar) { bar.close(); return bar._animationPromise; }); return Promise.join(allBarsAnimationPromises); }, _showAppBars: function _Overlay_showAppBars(bars, keyboardInvoked) { var allBarsAnimationPromises = bars.map(function (bar) { bar._show(); return bar._animationPromise; }); return Promise.join(allBarsAnimationPromises); }, // WWA Soft Keyboard offsets _keyboardInfo: _KeyboardInfo._KeyboardInfo, // Padding for IHM timer to allow for first scroll event _scrollTimeout: _KeyboardInfo._KeyboardInfo._scrollTimeout, // Events beforeShow: "beforeshow", beforeHide: "beforehide", afterShow: "aftershow", afterHide: "afterhide", commonstrings: { get cannotChangeCommandsWhenVisible() { return "Invalid argument: You must call hide() before changing {0} commands"; }, get cannotChangeHiddenProperty() { return "Unable to set hidden property while parent {0} is visible."; } }, }); _Base.Class.mix(_Overlay, _Control.DOMEventMixin); return _Overlay; }) }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// appbar,Flyout,Flyouts,Statics define('WinJS/Controls/Flyout',[ 'exports', '../Core/_Global', '../Core/_Base', '../Core/_BaseUtils', '../Core/_ErrorFromName', '../Core/_Events', '../Core/_Log', '../Core/_Resources', '../Core/_WriteProfilerMark', '../Animations', '../_Signal', '../_LightDismissService', '../Utilities/_Dispose', '../Utilities/_ElementUtilities', '../Utilities/_KeyboardBehavior', '../Utilities/_Hoverable', './_LegacyAppBar/_Constants', './Flyout/_Overlay' ], function flyoutInit(exports, _Global, _Base, _BaseUtils, _ErrorFromName, _Events, _Log, _Resources, _WriteProfilerMark, Animations, _Signal, _LightDismissService, _Dispose, _ElementUtilities, _KeyboardBehavior, _Hoverable, _Constants, _Overlay) { "use strict"; _Base.Namespace._moduleDefine(exports, "WinJS.UI", { /// /// /// Displays lightweight UI that is either informational, or requires user interaction. /// Unlike a dialog, a Flyout can be light dismissed by clicking or tapping off of it. /// /// /// /// Flyout /// /// /// ]]> /// Raised just before showing a flyout. /// Raised immediately after a flyout is fully shown. /// Raised just before hiding a flyout. /// Raised immediately after a flyout is fully hidden. /// The Flyout control itself. /// /// Flyout: _Base.Namespace._lazy(function () { var Key = _ElementUtilities.Key; function getDimension(element, property) { return _ElementUtilities.convertToPixels(element, _Global.getComputedStyle(element, null)[property]); } var strings = { get ariaLabel() { return _Resources._getWinJSString("ui/flyoutAriaLabel").value; }, get noAnchor() { return "Invalid argument: Flyout anchor element not found in DOM."; }, get badPlacement() { return "Invalid argument: Flyout placement should be 'top' (default), 'bottom', 'left', 'right', 'auto', 'autohorizontal', or 'autovertical'."; }, get badAlignment() { return "Invalid argument: Flyout alignment should be 'center' (default), 'left', or 'right'."; } }; var createEvent = _Events._createEventProperty; // _LightDismissableLayer is an ILightDismissable which manages a set of ILightDismissables. // It acts as a proxy between the LightDismissService and the light dismissables it manages. // It enables multiple dismissables to be above the click eater at the same time. var _LightDismissableLayer = _Base.Class.define(function _LightDismissableLayer_ctor(onLightDismiss) { this._onLightDismiss = onLightDismiss; this._currentlyFocusedClient = null; this._clients = []; // Array of ILightDismissables }, { // Dismissables should call this as soon as they are ready to be shown. More specifically, they should call this: // - After they are in the DOM and ready to receive focus (e.g. style.display cannot be "none") // - Before their entrance animation is played shown: function _LightDismissableLayer_shown(client /*: ILightDismissable */) { client._focusable = true; var index = this._clients.indexOf(client); if (index === -1) { this._clients.push(client); client.onShow(this); if (!_LightDismissService.isShown(this)) { _LightDismissService.shown(this); } else { _LightDismissService.updated(this); this._activateTopFocusableClientIfNeeded(); } } }, // Dismissables should call this at the start of their exit animation. A "hiding", // dismissable will still be rendered with the proper z-index but it will no // longer be given focus. Also, focus is synchronously moved out of this dismissable. hiding: function _LightDismissableLayer_hiding(client /*: ILightDismissable */) { var index = this._clients.indexOf(client); if (index !== -1) { this._clients[index]._focusable = false; this._activateTopFocusableClientIfNeeded(); } }, // Dismissables should call this when they are done being dismissed (i.e. after their exit animation has finished) hidden: function _LightDismissableLayer_hidden(client /*: ILightDismissable */) { var index = this._clients.indexOf(client); if (index !== -1) { this._clients.splice(index, 1); client.setZIndex(""); client.onHide(); if (this._clients.length === 0) { _LightDismissService.hidden(this); } else { _LightDismissService.updated(this); this._activateTopFocusableClientIfNeeded(); } } }, keyDown: function _LightDismissableLayer_keyDown(client /*: ILightDismissable */, eventObject) { _LightDismissService.keyDown(this, eventObject); }, keyUp: function _LightDismissableLayer_keyUp(client /*: ILightDismissable */, eventObject) { _LightDismissService.keyUp(this, eventObject); }, keyPress: function _LightDismissableLayer_keyPress(client /*: ILightDismissable */, eventObject) { _LightDismissService.keyPress(this, eventObject); }, // Used by tests. clients: { get: function _LightDismissableLayer_clients_get() { return this._clients; } }, _clientForElement: function _LightDismissableLayer_clientForElement(element) { for (var i = this._clients.length - 1; i >= 0; i--) { if (this._clients[i].containsElement(element)) { return this._clients[i]; } } return null; }, _focusableClientForElement: function _LightDismissableLayer_focusableClientForElement(element) { for (var i = this._clients.length - 1; i >= 0; i--) { if (this._clients[i]._focusable && this._clients[i].containsElement(element)) { return this._clients[i]; } } return null; }, _getTopmostFocusableClient: function _LightDismissableLayer_getTopmostFocusableClient() { for (var i = this._clients.length - 1; i >= 0; i--) { var client = this._clients[i]; if (client && client._focusable) { return client; } } return null; }, _activateTopFocusableClientIfNeeded: function _LightDismissableLayer_activateTopFocusableClientIfNeeded() { var topClient = this._getTopmostFocusableClient(); if (topClient && _LightDismissService.isTopmost(this)) { // If the last input type was keyboard, use focus() so a keyboard focus visual is drawn. // Otherwise, use setActive() so no focus visual is drawn. var useSetActive = !_KeyboardBehavior._keyboardSeenLast; topClient.onTakeFocus(useSetActive); } }, // ILightDismissable // setZIndex: function _LightDismissableLayer_setZIndex(zIndex) { this._clients.forEach(function (client, index) { client.setZIndex(zIndex + index); }, this); }, getZIndexCount: function _LightDismissableLayer_getZIndexCount() { return this._clients.length; }, containsElement: function _LightDismissableLayer_containsElement(element) { return !!this._clientForElement(element); }, onTakeFocus: function _LightDismissableLayer_onTakeFocus(useSetActive) { // Prefer the client that has focus var client = this._focusableClientForElement(_Global.document.activeElement); if (!client && this._clients.indexOf(this._currentlyFocusedClient) !== -1 && this._currentlyFocusedClient._focusable) { // Next try the client that had focus most recently client = this._currentlyFocusedClient; } if (!client) { // Finally try the client at the top of the stack client = this._getTopmostFocusableClient(); } this._currentlyFocusedClient = client; client && client.onTakeFocus(useSetActive); }, onFocus: function _LightDismissableLayer_onFocus(element) { this._currentlyFocusedClient = this._clientForElement(element); this._currentlyFocusedClient && this._currentlyFocusedClient.onFocus(element); }, onShow: function _LightDismissableLayer_onShow(service /*: ILightDismissService */) { }, onHide: function _LightDismissableLayer_onHide() { this._currentlyFocusedClient = null; }, onKeyInStack: function _LightDismissableLayer_onKeyInStack(info /*: IKeyboardInfo*/) { // A keyboard event occurred in the light dismiss stack. Notify the flyouts to // give them the opportunity to handle this evnet. var index = this._clients.indexOf(this._currentlyFocusedClient); if (index !== -1) { var clients = this._clients.slice(0, index + 1); for (var i = clients.length - 1; i >= 0 && !info.propagationStopped; i--) { if (clients[i]._focusable) { clients[i].onKeyInStack(info); } } } }, onShouldLightDismiss: function _LightDismissableLayer_onShouldLightDismiss(info) { return _LightDismissService.DismissalPolicies.light(info); }, onLightDismiss: function _LightDismissableLayer_onLightDismiss(info) { this._onLightDismiss(info); } }); // Singleton class for managing cascading flyouts var _CascadeManager = _Base.Class.define(function _CascadeManager_ctor() { var that = this; this._dismissableLayer = new _LightDismissableLayer(function _CascadeManager_onLightDismiss(info) { if (info.reason === _LightDismissService.LightDismissalReasons.escape) { that.collapseFlyout(that.getAt(that.length - 1)); } else { that.collapseAll(); } }); this._cascadingStack = []; this._handleKeyDownInCascade_bound = this._handleKeyDownInCascade.bind(this); this._inputType = null; }, { appendFlyout: function _CascadeManager_appendFlyout(flyoutToAdd) { // PRECONDITION: flyoutToAdd must not already be in the cascade. _Log.log && this.indexOf(flyoutToAdd) >= 0 && _Log.log('_CascadeManager is attempting to append a Flyout that is already in the cascade.', "winjs _CascadeManager", "error"); // PRECONDITION: this.reentrancyLock must be false. appendFlyout should only be called from baseFlyoutShow() which is the function responsible for preventing reentrancy. _Log.log && this.reentrancyLock && _Log.log('_CascadeManager is attempting to append a Flyout through reentrancy.', "winjs _CascadeManager", "error"); // IF the anchor element for flyoutToAdd is contained within another flyout, // && that flyout is currently in the cascadingStack, consider that flyout to be the parent of flyoutToAdd: // Remove from the cascadingStack, any subflyout descendants of the parent flyout. // ELSE flyoutToAdd isn't anchored to any of the Flyouts in the existing cascade // Collapse the entire cascadingStack to start a new cascade. // FINALLY: // add flyoutToAdd to the end of the cascading stack. Monitor it for events. var indexOfParentFlyout = this.indexOfElement(flyoutToAdd._currentAnchor); if (indexOfParentFlyout >= 0) { this.collapseFlyout(this.getAt(indexOfParentFlyout + 1)); } else { this.collapseAll(); } flyoutToAdd.element.addEventListener("keydown", this._handleKeyDownInCascade_bound, false); this._cascadingStack.push(flyoutToAdd); this._dismissableLayer.shown(flyoutToAdd._dismissable); }, collapseFlyout: function _CascadeManager_collapseFlyout(flyout) { // Removes flyout param and its subflyout descendants from the _cascadingStack. if (!this.reentrancyLock && flyout && this.indexOf(flyout) >= 0) { this.reentrancyLock = true; var signal = new _Signal(); this.unlocked = signal.promise; var subFlyout; while (this.length && flyout !== subFlyout) { subFlyout = this._cascadingStack.pop(); subFlyout.element.removeEventListener("keydown", this._handleKeyDownInCascade_bound, false); subFlyout._hide(); // We use the reentrancyLock to prevent reentrancy here. } if (this._cascadingStack.length === 0) { // The cascade is empty so clear the input type. This gives us the opportunity // to recalculate the input type when the next cascade starts. this._inputType = null; } this.reentrancyLock = false; this.unlocked = null; signal.complete(); } }, flyoutHiding: function _CascadeManager_flyoutHiding(flyout) { this._dismissableLayer.hiding(flyout._dismissable); }, flyoutHidden: function _CascadeManager_flyoutHidden(flyout) { this._dismissableLayer.hidden(flyout._dismissable); }, collapseAll: function _CascadeManager_collapseAll() { // Empties the _cascadingStack and hides all flyouts. var headFlyout = this.getAt(0); if (headFlyout) { this.collapseFlyout(headFlyout); } }, indexOf: function _CascadeManager_indexOf(flyout) { return this._cascadingStack.indexOf(flyout); }, indexOfElement: function _CascadeManager_indexOfElement(el) { // Returns an index cooresponding to the Flyout in the cascade whose element contains the element in question. // Returns -1 if the element is not contained by any Flyouts in the cascade. var indexOfAssociatedFlyout = -1; for (var i = 0, len = this.length; i < len; i++) { var currentFlyout = this.getAt(i); if (currentFlyout.element.contains(el)) { indexOfAssociatedFlyout = i; break; } } return indexOfAssociatedFlyout; }, length: { get: function _CascadeManager_getLength() { return this._cascadingStack.length; } }, getAt: function _CascadeManager_getAt(index) { return this._cascadingStack[index]; }, handleFocusIntoFlyout: function _CascadeManager_handleFocusIntoFlyout(event) { // When a flyout in the cascade recieves focus, we close all subflyouts beneath it. var index = this.indexOfElement(event.target); if (index >= 0) { var subFlyout = this.getAt(index + 1); this.collapseFlyout(subFlyout); } }, // Compute the input type that is associated with the cascading stack on demand. Allows // each Flyout in the cascade to adjust its sizing based on the current input type // and to do it in a way that is consistent with the rest of the Flyouts in the cascade. inputType: { get: function _CascadeManager_inputType_get() { if (!this._inputType) { this._inputType = _KeyboardBehavior._lastInputType; } return this._inputType; } }, // Used by tests. dismissableLayer: { get: function _CascadeManager_dismissableLayer_get() { return this._dismissableLayer; } }, _handleKeyDownInCascade: function _CascadeManager_handleKeyDownInCascade(event) { var rtl = _Global.getComputedStyle(event.target).direction === "rtl", leftKey = rtl ? Key.rightArrow : Key.leftArrow, target = event.target; if (event.keyCode === leftKey) { // Left key press in a SubFlyout will close that subFlyout and any subFlyouts cascading from it. var index = this.indexOfElement(target); if (index >= 1) { var subFlyout = this.getAt(index); this.collapseFlyout(subFlyout); // Prevent document scrolling event.preventDefault(); } } else if (event.keyCode === Key.alt || event.keyCode === Key.F10) { this.collapseAll(); } } }); var AnimationOffsets = { top: { top: "50px", left: "0px", keyframe: "WinJS-showFlyoutTop" }, bottom: { top: "-50px", left: "0px", keyframe: "WinJS-showFlyoutBottom" }, left: { top: "0px", left: "50px", keyframe: "WinJS-showFlyoutLeft" }, right: { top: "0px", left: "-50px", keyframe: "WinJS-showFlyoutRight" }, }; var Flyout = _Base.Class.derive(_Overlay._Overlay, function Flyout_ctor(element, options) { /// /// /// Creates a new Flyout control. /// /// /// The DOM element that hosts the control. /// /// /// The set of properties and values to apply to the new Flyout. /// /// The new Flyout control. /// /// // Simplify checking later options = options || {}; // Make sure there's an input element this._element = element || _Global.document.createElement("div"); this._id = this._element.id || _ElementUtilities._uniqueID(this._element); this._writeProfilerMark("constructor,StartTM"); this._baseFlyoutConstructor(this._element, options); var _elms = this._element.getElementsByTagName("*"); var firstDiv = this._addFirstDiv(); firstDiv.tabIndex = _ElementUtilities._getLowestTabIndexInList(_elms); var finalDiv = this._addFinalDiv(); finalDiv.tabIndex = _ElementUtilities._getHighestTabIndexInList(_elms); // Handle "esc" & "tab" key presses this._element.addEventListener("keydown", this._handleKeyDown, true); this._writeProfilerMark("constructor,StopTM"); return this; }, { _lastMaxHeight: null, _baseFlyoutConstructor: function Flyout_baseFlyoutContstructor(element, options) { // Flyout constructor // We have some options with defaults this._placement = "auto"; this._alignment = "center"; // Call the base overlay constructor helper this._baseOverlayConstructor(element, options); // Start flyouts hidden this._element.style.visibilty = "hidden"; this._element.style.display = "none"; // Attach our css class _ElementUtilities.addClass(this._element, _Constants.flyoutClass); var that = this; // Each flyout has an ILightDismissable that is managed through the // CascasdeManager rather than by the _LightDismissService directly. this._dismissable = new _LightDismissService.LightDismissableElement({ element: this._element, tabIndex: this._element.hasAttribute("tabIndex") ? this._element.tabIndex : -1, onLightDismiss: function () { that.hide(); }, onTakeFocus: function (useSetActive) { if (!that._dismissable.restoreFocus()) { if (!_ElementUtilities.hasClass(that.element, _Constants.menuClass)) { // Put focus on the first child in the Flyout that._focusOnFirstFocusableElementOrThis(); } else { // Make sure the menu has focus, but don't show a focus rect _Overlay._Overlay._trySetActive(that._element); } } } }); // Make sure we have an ARIA role var role = this._element.getAttribute("role"); if (role === null || role === "" || role === undefined) { if (_ElementUtilities.hasClass(this._element, _Constants.menuClass)) { this._element.setAttribute("role", "menu"); } else { this._element.setAttribute("role", "dialog"); } } var label = this._element.getAttribute("aria-label"); if (label === null || label === "" || label === undefined) { this._element.setAttribute("aria-label", strings.ariaLabel); } // Base animation is popIn, but our flyout has different arguments this._currentAnimateIn = this._flyoutAnimateIn; this._currentAnimateOut = this._flyoutAnimateOut; _ElementUtilities._addEventListener(this.element, "focusin", this._handleFocusIn.bind(this), false); }, /// /// Gets or sets the Flyout control's anchor. The anchor element is the HTML element which the Flyout originates from and is positioned relative to. /// (This setting can be overridden when you call the show method.) /// /// anchor: { get: function () { return this._anchor; }, set: function (value) { this._anchor = value; } }, /// /// Gets or sets the default placement of this Flyout. (This setting can be overridden when you call the show method.) /// /// placement: { get: function () { return this._placement; }, set: function (value) { if (value !== "top" && value !== "bottom" && value !== "left" && value !== "right" && value !== "auto" && value !== "autohorizontal" && value !== "autovertical") { // Not a legal placement value throw new _ErrorFromName("WinJS.UI.Flyout.BadPlacement", strings.badPlacement); } this._placement = value; } }, /// /// Gets or sets the default alignment for this Flyout. (This setting can be overridden when you call the show method.) /// /// alignment: { get: function () { return this._alignment; }, set: function (value) { if (value !== "right" && value !== "left" && value !== "center") { // Not a legal alignment value throw new _ErrorFromName("WinJS.UI.Flyout.BadAlignment", strings.badAlignment); } this._alignment = value; } }, /// Disable a Flyout, setting or getting the HTML disabled attribute. When disabled the Flyout will no longer display with show(), and will hide if currently visible. disabled: { get: function () { // Ensure it's a boolean because we're using the DOM element to keep in-sync return !!this._element.disabled; }, set: function (value) { // Force this check into a boolean because our current state could be a bit confused since we tie to the DOM element value = !!value; var oldValue = !!this._element.disabled; if (oldValue !== value) { this._element.disabled = value; if (!this.hidden && this._element.disabled) { this.hide(); } } } }, /// /// Occurs immediately before the control is shown. /// onbeforeshow: createEvent(_Overlay._Overlay.beforeShow), /// /// Occurs immediately after the control is shown. /// onaftershow: createEvent(_Overlay._Overlay.afterShow), /// /// Occurs immediately before the control is hidden. /// onbeforehide: createEvent(_Overlay._Overlay.beforeHide), /// /// Occurs immediately after the control is hidden. /// onafterhide: createEvent(_Overlay._Overlay.afterHide), _dispose: function Flyout_dispose() { _Dispose.disposeSubTree(this.element); this._hide(); Flyout._cascadeManager.flyoutHidden(this); this.anchor = null; }, show: function (anchor, placement, alignment) { /// /// /// Shows the Flyout, if hidden, regardless of other states. /// /// /// The DOM element, or ID of a DOM element to anchor the Flyout, overriding the anchor property for this time only. /// /// /// The placement of the Flyout to the anchor: 'auto' (default), 'top', 'bottom', 'left', or 'right'. This parameter overrides the placement property for this show only. /// /// /// For 'top' or 'bottom' placement, the alignment of the Flyout to the anchor's edge: 'center' (default), 'left', or 'right'. /// This parameter overrides the alignment property for this show only. /// /// /// this._writeProfilerMark("show,StartTM"); // The corresponding "stop" profiler mark is handled in _Overlay._baseEndShow(). this._show(anchor, placement, alignment); }, _show: function Flyout_show(anchor, placement, alignment) { this._baseFlyoutShow(anchor, placement, alignment); }, hide: function () { /// /// /// Hides the Flyout, if visible, regardless of other states. /// /// /// // Just wrap the private one, turning off keyboard invoked flag this._writeProfilerMark("hide,StartTM"); // The corresponding "stop" profiler mark is handled in _Overlay._baseEndHide(). this._hide(); }, _hide: function Flyout_hide() { // First close all subflyout descendants in the cascade. // Any calls to collapseFlyout through reentrancy should nop. Flyout._cascadeManager.collapseFlyout(this); if (this._baseHide()) { Flyout._cascadeManager.flyoutHiding(this); } }, _beforeEndHide: function Flyout_beforeEndHide() { Flyout._cascadeManager.flyoutHidden(this); }, _baseFlyoutShow: function Flyout_baseFlyoutShow(anchor, placement, alignment) { if (this.disabled || this._disposed) { // Don't do anything. return; } // Pick up defaults if (!anchor) { anchor = this._anchor; } if (!placement) { placement = this._placement; } if (!alignment) { alignment = this._alignment; } // Dereference the anchor if necessary if (typeof anchor === "string") { anchor = _Global.document.getElementById(anchor); } else if (anchor && anchor.element) { anchor = anchor.element; } // We expect an anchor if (!anchor) { // If we have _nextLeft, etc., then we were continuing an old animation, so that's OK if (!this._reuseCurrent) { throw new _ErrorFromName("WinJS.UI.Flyout.NoAnchor", strings.noAnchor); } // Last call was incomplete, so reuse the previous _current values. this._reuseCurrent = null; } else { // Remember the anchor so that if we lose focus we can go back this._currentAnchor = anchor; // Remember current values this._currentPlacement = placement; this._currentAlignment = alignment; } // If we're animating (eg baseShow is going to fail), or the cascadeManager is in the middle of a updating the cascade, // then don't mess up our current state. if (this._element.winAnimating) { this._reuseCurrent = true; // Queue us up to wait for the current animation to finish. // _checkDoNext() is always scheduled after the current animation completes. this._doNext = "show"; } else if (Flyout._cascadeManager.reentrancyLock) { this._reuseCurrent = true; // Queue us up to wait for the current animation to finish. // Schedule a call to _checkDoNext() for when the cascadeManager unlocks. this._doNext = "show"; var that = this; Flyout._cascadeManager.unlocked.then(function () { that._checkDoNext(); }); } else { // We call our base _baseShow to handle the actual animation if (this._baseShow()) { // (_baseShow shouldn't ever fail because we tested winAnimating above). if (!_ElementUtilities.hasClass(this.element, "win-menu")) { // Verify that the firstDiv is in the correct location. // Move it to the correct location or add it if not. var _elms = this._element.getElementsByTagName("*"); var firstDiv = this.element.querySelectorAll(".win-first"); if (this.element.children.length && !_ElementUtilities.hasClass(this.element.children[0], _Constants.firstDivClass)) { if (firstDiv && firstDiv.length > 0) { firstDiv.item(0).parentNode.removeChild(firstDiv.item(0)); } firstDiv = this._addFirstDiv(); } firstDiv.tabIndex = _ElementUtilities._getLowestTabIndexInList(_elms); // Verify that the finalDiv is in the correct location. // Move it to the correct location or add it if not. var finalDiv = this.element.querySelectorAll(".win-final"); if (!_ElementUtilities.hasClass(this.element.children[this.element.children.length - 1], _Constants.finalDivClass)) { if (finalDiv && finalDiv.length > 0) { finalDiv.item(0).parentNode.removeChild(finalDiv.item(0)); } finalDiv = this._addFinalDiv(); } finalDiv.tabIndex = _ElementUtilities._getHighestTabIndexInList(_elms); } Flyout._cascadeManager.appendFlyout(this); } } }, _lightDismiss: function Flyout_lightDismiss() { Flyout._cascadeManager.collapseAll(); }, // Find our new flyout position. _findPosition: function Flyout_findPosition() { this._adjustedHeight = 0; this._nextTop = 0; this._nextLeft = 0; this._keyboardMovedUs = false; this._doesScroll = false; // Make sure menu commands display correctly if (this._checkMenuCommands) { this._checkMenuCommands(); } // Remove old height restrictions and scrolling. this._clearAdjustedStyles(); this._setAlignment(this._currentAlignment); // Set up the new position, and prep the offset for showPopup. this._getTopLeft(); // Adjust position if (this._nextTop < 0) { // Overran bottom, attach to bottom. this._element.style.bottom = _Overlay._Overlay._keyboardInfo._visibleDocBottomOffset + "px"; this._element.style.top = "auto"; } else { // Normal, set top this._element.style.top = this._nextTop + "px"; this._element.style.bottom = "auto"; } if (this._nextLeft < 0) { // Overran right, attach to right this._element.style.right = "0px"; this._element.style.left = "auto"; } else { // Normal, set left this._element.style.left = this._nextLeft + "px"; this._element.style.right = "auto"; } // Adjust height/scrollbar if (this._doesScroll) { _ElementUtilities.addClass(this._element, _Constants.scrollsClass); this._lastMaxHeight = this._element.style.maxHeight; this._element.style.maxHeight = this._adjustedHeight + "px"; } // May need to adjust if the IHM is showing. if (_Overlay._Overlay._keyboardInfo._visible) { // Use keyboard logic this._checkKeyboardFit(); if (this._keyboardMovedUs) { this._adjustForKeyboard(); } } }, // This determines our positioning. We have 8 modes, the 1st four are explicit, the last 4 are automatic: // * top - position explicitly on the top of the anchor, shrinking and adding scrollbar as needed. // * bottom - position explicitly below the anchor, shrinking and adding scrollbar as needed. // * left - position left of the anchor, shrinking and adding a vertical scrollbar as needed. // * right - position right of the anchor, shrinking and adding a vertical scroolbar as needed. // * auto - Automatic placement. // * autohorizontal - Automatic placement (only left or right). // * autovertical - Automatic placement (only top or bottom). // * _cascasde - Private placement used by MenuCommand._activateFlyoutCommand // Auto tests the height of the anchor and the flyout. For consistency in orientation, we imagine // that the anchor is placed in the vertical center of the display. If the flyout would fit above // that centered anchor, then we will place the flyout vertically in relation to the anchor, otherwise // placement will be horizontal. // Vertical auto or autovertical placement will be positioned on top of the anchor if room, otherwise below the anchor. // - this is because touch users would be more likely to obscure flyouts below the anchor. // Horizontal auto or autohorizontal placement will be positioned to the left of the anchor if room, otherwise to the right. // - this is because right handed users would be more likely to obscure a flyout on the right of the anchor. // All three auto placements will add a vertical scrollbar if necessary. // _getTopLeft: function Flyout_getTopLeft() { var that = this; function configureVerticalWithScroll(anchor) { // Won't fit top or bottom. Pick the one with the most space and add a scrollbar. if (topHasMoreRoom(anchor)) { // Top that._adjustedHeight = spaceAbove(anchor) - that._verticalMarginBorderPadding; that._nextTop = _Overlay._Overlay._keyboardInfo._visibleDocTop; that._nextAnimOffset = AnimationOffsets.top; } else { // Bottom that._adjustedHeight = spaceBelow(anchor) - that._verticalMarginBorderPadding; that._nextTop = _Constants.pinToBottomEdge; that._nextAnimOffset = AnimationOffsets.bottom; } that._doesScroll = true; } // If the anchor is centered vertically, would the flyout fit above it? function fitsVerticallyWithCenteredAnchor(anchor, flyout) { // Returns true if the flyout would always fit at least top // or bottom of its anchor, regardless of the position of the anchor, // as long as the anchor never changed its height, nor did the height of // the visualViewport change. return ((_Overlay._Overlay._keyboardInfo._visibleDocHeight - anchor.height) / 2) >= flyout.totalHeight; } function spaceAbove(anchor) { return anchor.top - _Overlay._Overlay._keyboardInfo._visibleDocTop; } function spaceBelow(anchor) { return _Overlay._Overlay._keyboardInfo._visibleDocBottom - anchor.bottom; } function topHasMoreRoom(anchor) { return spaceAbove(anchor) > spaceBelow(anchor); } // See if we can fit in various places, fitting in the main view, // ignoring viewport changes, like for the IHM. function fitTop(bottomConstraint, flyout) { that._nextTop = bottomConstraint - flyout.totalHeight; that._nextAnimOffset = AnimationOffsets.top; return (that._nextTop >= _Overlay._Overlay._keyboardInfo._visibleDocTop && that._nextTop + flyout.totalHeight <= _Overlay._Overlay._keyboardInfo._visibleDocBottom); } function fitBottom(topConstraint, flyout) { that._nextTop = topConstraint; that._nextAnimOffset = AnimationOffsets.bottom; return (that._nextTop >= _Overlay._Overlay._keyboardInfo._visibleDocTop && that._nextTop + flyout.totalHeight <= _Overlay._Overlay._keyboardInfo._visibleDocBottom); } function fitLeft(leftConstraint, flyout) { that._nextLeft = leftConstraint - flyout.totalWidth; that._nextAnimOffset = AnimationOffsets.left; return (that._nextLeft >= 0 && that._nextLeft + flyout.totalWidth <= _Overlay._Overlay._keyboardInfo._visualViewportWidth); } function fitRight(rightConstraint, flyout) { that._nextLeft = rightConstraint; that._nextAnimOffset = AnimationOffsets.right; return (that._nextLeft >= 0 && that._nextLeft + flyout.totalWidth <= _Overlay._Overlay._keyboardInfo._visualViewportWidth); } function centerVertically(anchor, flyout) { that._nextTop = anchor.top + anchor.height / 2 - flyout.totalHeight / 2; if (that._nextTop < _Overlay._Overlay._keyboardInfo._visibleDocTop) { that._nextTop = _Overlay._Overlay._keyboardInfo._visibleDocTop; } else if (that._nextTop + flyout.totalHeight >= _Overlay._Overlay._keyboardInfo._visibleDocBottom) { // Flag to pin to bottom edge of visual document. that._nextTop = _Constants.pinToBottomEdge; } } function alignHorizontally(anchor, flyout, alignment) { if (alignment === "center") { that._nextLeft = anchor.left + anchor.width / 2 - flyout.totalWidth / 2; } else if (alignment === "left") { that._nextLeft = anchor.left; } else if (alignment === "right") { that._nextLeft = anchor.right - flyout.totalWidth; } else { throw new _ErrorFromName("WinJS.UI.Flyout.BadAlignment", strings.badAlignment); } if (that._nextLeft < 0) { that._nextLeft = 0; } else if (that._nextLeft + flyout.totalWidth >= _Overlay._Overlay._keyboardInfo._visualViewportWidth) { // Flag to pin to right edge of visible document. that._nextLeft = _Constants.pinToRightEdge; } } var anchorRawRectangle, flyout = {}, anchor = {}; try { anchorRawRectangle = this._currentAnchor.getBoundingClientRect(); } catch (e) { throw new _ErrorFromName("WinJS.UI.Flyout.NoAnchor", strings.noAnchor); } // Adjust for the anchor's margins. anchor.top = anchorRawRectangle.top; anchor.bottom = anchorRawRectangle.bottom; anchor.left = anchorRawRectangle.left; anchor.right = anchorRawRectangle.right; anchor.height = anchor.bottom - anchor.top; anchor.width = anchor.right - anchor.left; // Get our flyout and margins, note that getDimension calls // window.getComputedStyle, which ensures layout is updated. flyout.marginTop = getDimension(this._element, "marginTop"); flyout.marginBottom = getDimension(this._element, "marginBottom"); flyout.marginLeft = getDimension(this._element, "marginLeft"); flyout.marginRight = getDimension(this._element, "marginRight"); flyout.totalWidth = _ElementUtilities.getTotalWidth(this._element); flyout.totalHeight = _ElementUtilities.getTotalHeight(this._element); flyout.contentWidth = _ElementUtilities.getContentWidth(this._element); flyout.contentHeight = _ElementUtilities.getContentHeight(this._element); this._verticalMarginBorderPadding = (flyout.totalHeight - flyout.contentHeight); this._adjustedHeight = flyout.contentHeight; // Check fit for requested this._currentPlacement, doing fallback if necessary switch (this._currentPlacement) { case "top": if (!fitTop(anchor.top, flyout)) { // Didn't fit, needs scrollbar this._nextTop = _Overlay._Overlay._keyboardInfo._visibleDocTop; this._doesScroll = true; this._adjustedHeight = spaceAbove(anchor) - this._verticalMarginBorderPadding; } alignHorizontally(anchor, flyout, this._currentAlignment); break; case "bottom": if (!fitBottom(anchor.bottom, flyout)) { // Didn't fit, needs scrollbar this._nextTop = _Constants.pinToBottomEdge; this._doesScroll = true; this._adjustedHeight = spaceBelow(anchor) - this._verticalMarginBorderPadding; } alignHorizontally(anchor, flyout, this._currentAlignment); break; case "left": if (!fitLeft(anchor.left, flyout)) { // Didn't fit, just shove it to edge this._nextLeft = 0; } centerVertically(anchor, flyout); break; case "right": if (!fitRight(anchor.right, flyout)) { // Didn't fit, just shove it to edge this._nextLeft = _Constants.pinToRightEdge; } centerVertically(anchor, flyout); break; case "autovertical": if (!fitTop(anchor.top, flyout)) { // Didn't fit above (preferred), so go below. if (!fitBottom(anchor.bottom, flyout)) { // Didn't fit, needs scrollbar configureVerticalWithScroll(anchor); } } alignHorizontally(anchor, flyout, this._currentAlignment); break; case "autohorizontal": if (!fitLeft(anchor.left, flyout)) { // Didn't fit left (preferred), so go right. if (!fitRight(anchor.right, flyout)) { // Didn't fit,just shove it to edge this._nextLeft = _Constants.pinToRightEdge; } } centerVertically(anchor, flyout); break; case "auto": // Auto, if the anchor was in the vertical center of the display would we fit above it? if (fitsVerticallyWithCenteredAnchor(anchor, flyout)) { // It will fit above or below the anchor if (!fitTop(anchor.top, flyout)) { // Didn't fit above (preferred), so go below. fitBottom(anchor.bottom, flyout); } alignHorizontally(anchor, flyout, this._currentAlignment); } else { // Won't fit above or below, try a side if (!fitLeft(anchor.left, flyout) && !fitRight(anchor.right, flyout)) { // Didn't fit left or right either configureVerticalWithScroll(anchor); alignHorizontally(anchor, flyout, this._currentAlignment); } else { centerVertically(anchor, flyout); } } break; case "_cascade": // Align vertically // PREFERRED: When there is enough room to align a subMenu to either the top or the bottom of its // anchor element, the subMenu prefers to be top aligned. // FALLBACK: When there is enough room to bottom align a subMenu but not enough room to top align it, // then the subMenu will align to the bottom of its anchor element. // LASTRESORT: When there is not enough room to top align or bottom align the subMenu to its anchor, // then the subMenu will be center aligned to it's anchor's vertical midpoint. if (!fitBottom(anchor.top - flyout.marginTop, flyout) && !fitTop(anchor.bottom + flyout.marginBottom, flyout)) { centerVertically(anchor, flyout); } // Determine horizontal direction // PREFERRED: When there is enough room to fit a subMenu on either side of the anchor, // the subMenu prefers to go on the right hand side. // FALLBACK: When there is only enough room to fit a subMenu on the left side of the anchor, // the subMenu is placed to the left of the parent menu. // LASTRESORT: When there is not enough room to fit a subMenu on either side of the anchor, // the subMenu is pinned to the right edge of the window. var rtl = _Global.getComputedStyle(this._element).direction === "rtl"; // Cascading Menus should overlap their ancestor menu by 4 pixels and we have a unit test to // verify that behavior. Because we don't have access to the ancestor flyout we need to specify // the overlap in terms of our anchor element. There is a 1px border around the menu that // contains our anchor we need to overlap our anchor by 3px to ensure that we overlap the containing // Menu by 4px. var pixelsToOverlapAnchor = 3; var beginRight = anchor.right - flyout.marginLeft - pixelsToOverlapAnchor; var beginLeft = anchor.left + flyout.marginRight + pixelsToOverlapAnchor; if (rtl) { if (!fitLeft(beginLeft, flyout) && !fitRight(beginRight, flyout)) { // Doesn't fit on either side, pin to the left edge. that._nextLeft = 0; that._nextAnimOffset = AnimationOffsets.left; } } else { if (!fitRight(beginRight, flyout) && !fitLeft(beginLeft, flyout)) { // Doesn't fit on either side, pin to the right edge of the visible document. that._nextLeft = _Constants.pinToRightEdge; that._nextAnimOffset = AnimationOffsets.right; } } break; default: // Not a legal this._currentPlacement value throw new _ErrorFromName("WinJS.UI.Flyout.BadPlacement", strings.badPlacement); } }, _clearAdjustedStyles: function Flyout_clearAdjustedStyles() { // Move to 0,0 in case it is off screen, so that it lays out at a reasonable size this._element.style.top = "0px"; this._element.style.bottom = "auto"; this._element.style.left = "0px"; this._element.style.right = "auto"; // Clear height restrictons and scrollbar class _ElementUtilities.removeClass(this._element, _Constants.scrollsClass); if (this._lastMaxHeight !== null) { this._element.style.maxHeight = this._lastMaxHeight; this._lastMaxHeight = null; } // Clear Alignment _ElementUtilities.removeClass(this._element, "win-rightalign"); _ElementUtilities.removeClass(this._element, "win-leftalign"); }, _setAlignment: function Flyout_setAlignment(alignment) { // Alignment switch (alignment) { case "left": _ElementUtilities.addClass(this._element, "win-leftalign"); break; case "right": _ElementUtilities.addClass(this._element, "win-rightalign"); break; case "center": case "none": break; } }, _showingKeyboard: function Flyout_showingKeyboard(event) { if (this.hidden) { return; } // The only way that we can be showing a keyboard when a flyout is up is because the input was // in the flyout itself, in which case we'll be moving ourselves. There is no practical way // for the application to override this as the focused element is in our flyout. event.ensuredFocusedElementInView = true; // See if the keyboard is going to force us to move this._checkKeyboardFit(); if (this._keyboardMovedUs) { // Pop out immediately, then move to new spot this._element.style.opacity = 0; var that = this; _Global.setTimeout(function () { that._adjustForKeyboard(); that._baseAnimateIn(); }, _Overlay._Overlay._keyboardInfo._animationShowLength); } }, _resize: function Flyout_resize() { // If hidden and not busy animating, then nothing to do if (!this.hidden || this._animating) { // This should only happen if the IHM is dismissing, // the only other way is for viewstate changes, which // would dismiss any flyout. if (this._needToHandleHidingKeyboard) { // Hiding keyboard, update our position, giving the anchor a chance to update first. var that = this; _BaseUtils._setImmediate(function () { if (!that.hidden || that._animating) { that._findPosition(); } }); this._needToHandleHidingKeyboard = false; } } }, // If you were not pinned to the bottom, you might have to be now. _checkKeyboardFit: function Flyout_checkKeyboardFit() { // Special Flyout positioning rules to determine if the Flyout needs to adjust its // position because of the IHM. If the Flyout needs to adjust for the IHM, it will reposition // itself to be pinned to either the top or bottom edge of the visual viewport. // - Too Tall, above top, or below bottom. var keyboardMovedUs = false; var viewportHeight = _Overlay._Overlay._keyboardInfo._visibleDocHeight; var adjustedMarginBoxHeight = this._adjustedHeight + this._verticalMarginBorderPadding; if (adjustedMarginBoxHeight > viewportHeight) { // The Flyout is now too tall to fit in the viewport, pin to top and adjust height. keyboardMovedUs = true; this._nextTop = _Constants.pinToBottomEdge; this._adjustedHeight = viewportHeight - this._verticalMarginBorderPadding; this._doesScroll = true; } else if (this._nextTop >= 0 && this._nextTop + adjustedMarginBoxHeight > _Overlay._Overlay._keyboardInfo._visibleDocBottom) { // Flyout clips the bottom of the viewport. Pin to bottom. this._nextTop = _Constants.pinToBottomEdge; keyboardMovedUs = true; } else if (this._nextTop === _Constants.pinToBottomEdge) { // We were already pinned to the bottom, so our position on screen will change keyboardMovedUs = true; } // Signals use of basic fadein animation this._keyboardMovedUs = keyboardMovedUs; }, _adjustForKeyboard: function Flyout_adjustForKeyboard() { // Keyboard moved us, update our metrics as needed if (this._doesScroll) { // Add scrollbar if we didn't already have scrollsClass if (!this._lastMaxHeight) { _ElementUtilities.addClass(this._element, _Constants.scrollsClass); this._lastMaxHeight = this._element.style.maxHeight; } // Adjust height this._element.style.maxHeight = this._adjustedHeight + "px"; } // Update top/bottom this._checkScrollPosition(true); }, _hidingKeyboard: function Flyout_hidingKeyboard() { // If we aren't visible and not animating, or haven't been repositioned, then nothing to do // We don't know if the keyboard moved the anchor, so _keyboardMovedUs doesn't help here if (!this.hidden || this._animating) { // Snap to the final position // We'll either just reveal the current space or resize the window if (_Overlay._Overlay._keyboardInfo._isResized) { // Flag resize that we'll need an updated position this._needToHandleHidingKeyboard = true; } else { // Not resized, update our final position, giving the anchor a chance to update first. var that = this; _BaseUtils._setImmediate(function () { if (!that.hidden || that._animating) { that._findPosition(); } }); } } }, _checkScrollPosition: function Flyout_checkScrollPosition(showing) { if (this.hidden && !showing) { return; } // May need to adjust top by viewport offset if (this._nextTop < 0) { // Need to attach to bottom this._element.style.bottom = _Overlay._Overlay._keyboardInfo._visibleDocBottomOffset + "px"; this._element.style.top = "auto"; } else { // Normal, attach to top this._element.style.top = this._nextTop + "px"; this._element.style.bottom = "auto"; } }, // AppBar flyout animations _flyoutAnimateIn: function Flyout_flyoutAnimateIn() { if (this._keyboardMovedUs) { return this._baseAnimateIn(); } else { this._element.style.opacity = 1; this._element.style.visibility = "visible"; return Animations.showPopup(this._element, this._nextAnimOffset); } }, _flyoutAnimateOut: function Flyout_flyoutAnimateOut() { if (this._keyboardMovedUs) { return this._baseAnimateOut(); } else { this._element.style.opacity = 0; return Animations.hidePopup(this._element, this._nextAnimOffset); } }, // Hide all other flyouts besides this one _hideAllOtherFlyouts: function Flyout_hideAllOtherFlyouts(thisFlyout) { var flyouts = _Global.document.querySelectorAll("." + _Constants.flyoutClass); for (var i = 0; i < flyouts.length; i++) { var flyoutControl = flyouts[i].winControl; if (flyoutControl && !flyoutControl.hidden && (flyoutControl !== thisFlyout)) { flyoutControl.hide(); } } }, _handleKeyDown: function Flyout_handleKeyDown(event) { if ((event.keyCode === Key.space || event.keyCode === Key.enter) && (this === _Global.document.activeElement)) { event.preventDefault(); event.stopPropagation(); this.winControl.hide(); } else if (event.shiftKey && event.keyCode === Key.tab && this === _Global.document.activeElement && !event.altKey && !event.ctrlKey && !event.metaKey) { event.preventDefault(); event.stopPropagation(); this.winControl._focusOnLastFocusableElementOrThis(); } }, _handleFocusIn: function Flyout_handleFocusIn(event) { if (!this.element.contains(event.relatedTarget)) { Flyout._cascadeManager.handleFocusIntoFlyout(event); } // Else focus is only moving between elements in the flyout. // Doesn't need to be handled by cascadeManager. }, // Create and add a new first div as the first child _addFirstDiv: function Flyout_addFirstDiv() { var firstDiv = _Global.document.createElement("div"); firstDiv.className = _Constants.firstDivClass; firstDiv.style.display = "inline"; firstDiv.setAttribute("role", "menuitem"); firstDiv.setAttribute("aria-hidden", "true"); // add to beginning if (this._element.children[0]) { this._element.insertBefore(firstDiv, this._element.children[0]); } else { this._element.appendChild(firstDiv); } var that = this; _ElementUtilities._addEventListener(firstDiv, "focusin", function () { that._focusOnLastFocusableElementOrThis(); }, false); return firstDiv; }, // Create and add a new final div as the last child _addFinalDiv: function Flyout_addFinalDiv() { var finalDiv = _Global.document.createElement("div"); finalDiv.className = _Constants.finalDivClass; finalDiv.style.display = "inline"; finalDiv.setAttribute("role", "menuitem"); finalDiv.setAttribute("aria-hidden", "true"); this._element.appendChild(finalDiv); var that = this; _ElementUtilities._addEventListener(finalDiv, "focusin", function () { that._focusOnFirstFocusableElementOrThis(); }, false); return finalDiv; }, _writeProfilerMark: function Flyout_writeProfilerMark(text) { _WriteProfilerMark("WinJS.UI.Flyout:" + this._id + ":" + text); } }, { _cascadeManager: new _CascadeManager(), }); return Flyout; }) }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/CommandingSurface/_Constants',["require", "exports"], function (require, exports) { // CommandingSurface class names exports.ClassNames = { controlCssClass: "win-commandingsurface", disposableCssClass: "win-disposable", actionAreaCssClass: "win-commandingsurface-actionarea", actionAreaContainerCssClass: "win-commandingsurface-actionareacontainer", overflowButtonCssClass: "win-commandingsurface-overflowbutton", spacerCssClass: "win-commandingsurface-spacer", ellipsisCssClass: "win-commandingsurface-ellipsis", overflowAreaCssClass: "win-commandingsurface-overflowarea", overflowAreaContainerCssClass: "win-commandingsurface-overflowareacontainer", contentFlyoutCssClass: "win-commandingsurface-contentflyout", emptyCommandingSurfaceCssClass: "win-commandingsurface-empty", menuCssClass: "win-menu", menuContainsToggleCommandClass: "win-menu-containstogglecommand", openedClass: "win-commandingsurface-opened", closingClass: "win-commandingsurface-closing", closedClass: "win-commandingsurface-closed", noneClass: "win-commandingsurface-closeddisplaynone", minimalClass: "win-commandingsurface-closeddisplayminimal", compactClass: "win-commandingsurface-closeddisplaycompact", fullClass: "win-commandingsurface-closeddisplayfull", overflowTopClass: "win-commandingsurface-overflowtop", overflowBottomClass: "win-commandingsurface-overflowbottom", }; exports.EventNames = { beforeOpen: "beforeopen", afterOpen: "afteropen", beforeClose: "beforeclose", afterClose: "afterclose", commandPropertyMutated: "_commandpropertymutated", }; exports.actionAreaCommandWidth = 68; exports.actionAreaSeparatorWidth = 34; exports.actionAreaOverflowButtonWidth = 32; exports.overflowCommandHeight = 44; exports.overflowSeparatorHeight = 12; exports.controlMinWidth = exports.actionAreaOverflowButtonWidth; exports.overflowAreaMaxWidth = 480; exports.heightOfMinimal = 24; exports.heightOfCompact = 48; exports.contentMenuCommandDefaultLabel = "Custom content"; exports.defaultClosedDisplayMode = "compact"; exports.defaultOpened = false; exports.defaultOverflowDirection = "bottom"; // Constants for commands exports.typeSeparator = "separator"; exports.typeContent = "content"; exports.typeButton = "button"; exports.typeToggle = "toggle"; exports.typeFlyout = "flyout"; exports.commandSelector = ".win-command"; exports.primaryCommandSection = "primary"; exports.secondaryCommandSection = "secondary"; }); define('WinJS/Controls/ToolBar/_Constants',["require", "exports", "../CommandingSurface/_Constants"], function (require, exports, _CommandingSurfaceConstants) { // toolbar class names exports.ClassNames = { controlCssClass: "win-toolbar", disposableCssClass: "win-disposable", actionAreaCssClass: "win-toolbar-actionarea", overflowButtonCssClass: "win-toolbar-overflowbutton", spacerCssClass: "win-toolbar-spacer", ellipsisCssClass: "win-toolbar-ellipsis", overflowAreaCssClass: "win-toolbar-overflowarea", contentFlyoutCssClass: "win-toolbar-contentflyout", emptytoolbarCssClass: "win-toolbar-empty", menuCssClass: "win-menu", menuContainsToggleCommandClass: "win-menu-containstogglecommand", openedClass: "win-toolbar-opened", closedClass: "win-toolbar-closed", compactClass: "win-toolbar-closeddisplaycompact", fullClass: "win-toolbar-closeddisplayfull", overflowTopClass: "win-toolbar-overflowtop", overflowBottomClass: "win-toolbar-overflowbottom", placeHolderCssClass: "win-toolbar-placeholder", }; exports.EventNames = { beforeOpen: "beforeopen", afterOpen: "afteropen", beforeClose: "beforeclose", afterClose: "afterclose" }; exports.OverflowDirection = { top: "top", bottom: "bottom", }; exports.overflowAreaMaxWidth = _CommandingSurfaceConstants.overflowAreaMaxWidth; exports.controlMinWidth = _CommandingSurfaceConstants.controlMinWidth; exports.defaultClosedDisplayMode = "compact"; exports.defaultOpened = false; // Constants for commands exports.typeSeparator = "separator"; exports.typeContent = "content"; exports.typeButton = "button"; exports.typeToggle = "toggle"; exports.typeFlyout = "flyout"; exports.commandSelector = ".win-command"; exports.primaryCommandSection = "primary"; exports.secondaryCommandSection = "secondary"; }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. // Glyph Enumeration /// Segoe define('WinJS/Controls/AppBar/_Icon',[ 'exports', '../../Core/_Base', '../../Core/_Resources' ], function appBarIconInit(exports, _Base, _Resources) { "use strict"; var glyphs = ["previous", "next", "play", "pause", "edit", "save", "clear", "delete", "remove", "add", "cancel", "accept", "more", "redo", "undo", "home", "up", "forward", "right", "back", "left", "favorite", "camera", "settings", "video", "sync", "download", "mail", "find", "help", "upload", "emoji", "twopage", "leavechat", "mailforward", "clock", "send", "crop", "rotatecamera", "people", "closepane", "openpane", "world", "flag", "previewlink", "globe", "trim", "attachcamera", "zoomin", "bookmarks", "document", "protecteddocument", "page", "bullets", "comment", "mail2", "contactinfo", "hangup", "viewall", "mappin", "phone", "videochat", "switch", "contact", "rename", "pin", "musicinfo", "go", "keyboard", "dockleft", "dockright", "dockbottom", "remote", "refresh", "rotate", "shuffle", "list", "shop", "selectall", "orientation", "import", "importall", "browsephotos", "webcam", "pictures", "savelocal", "caption", "stop", "showresults", "volume", "repair", "message", "page2", "calendarday", "calendarweek", "calendar", "characters", "mailreplyall", "read", "link", "accounts", "showbcc", "hidebcc", "cut", "attach", "paste", "filter", "copy", "emoji2", "important", "mailreply", "slideshow", "sort", "manage", "allapps", "disconnectdrive", "mapdrive", "newwindow", "openwith", "contactpresence", "priority", "uploadskydrive", "gototoday", "font", "fontcolor", "contact2", "folder", "audio", "placeholder", "view", "setlockscreen", "settile", "cc", "stopslideshow", "permissions", "highlight", "disableupdates", "unfavorite", "unpin", "openlocal", "mute", "italic", "underline", "bold", "movetofolder", "likedislike", "dislike", "like", "alignright", "aligncenter", "alignleft", "zoom", "zoomout", "openfile", "otheruser", "admin", "street", "map", "clearselection", "fontdecrease", "fontincrease", "fontsize", "cellphone", "reshare", "tag", "repeatone", "repeatall", "outlinestar", "solidstar", "calculator", "directions", "target", "library", "phonebook", "memo", "microphone", "postupdate", "backtowindow", "fullscreen", "newfolder", "calendarreply", "unsyncfolder", "reporthacked", "syncfolder", "blockcontact", "switchapps", "addfriend", "touchpointer", "gotostart", "zerobars", "onebar", "twobars", "threebars", "fourbars", "scan", "preview", "hamburger"]; // Provide properties to grab resources for each of the icons /// /// The AppBarIcon enumeration provides a set of glyphs for use with the AppBarCommand icon property. /// var icons = glyphs.reduce(function (fixedIcons, item) { fixedIcons[item] = { get: function () { return _Resources._getWinJSString("ui/appBarIcons/" + item).value; } }; return fixedIcons; }, {}); _Base.Namespace._moduleDefine(exports, "WinJS.UI.AppBarIcon", icons); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. // AppBarCommand /// appbar,appbars,Flyout,Flyouts,onclick,Statics define('WinJS/Controls/AppBar/_Command',[ 'exports', '../../Core/_Global', '../../Core/_WinRT', '../../Core/_Base', "../../Core/_BaseUtils", '../../Core/_ErrorFromName', "../../Core/_Events", '../../Core/_Resources', '../../Utilities/_Control', '../../Utilities/_Dispose', '../../Utilities/_ElementUtilities', '../Flyout/_Overlay', '../Tooltip', '../_LegacyAppBar/_Constants', './_Icon' ], function appBarCommandInit(exports, _Global, _WinRT, _Base, _BaseUtils, _ErrorFromName, _Events, _Resources, _Control, _Dispose, _ElementUtilities, _Overlay, Tooltip, _Constants, _Icon) { "use strict"; _Base.Namespace._moduleDefine(exports, "WinJS.UI", { /// /// /// Represents a command to display in an AppBar. /// /// /// /// /// ]]> /// Raised after the hidden property has been programmatically changed. /// The AppBarCommand control itself. /// The AppBarCommand's icon box. /// The AppBarCommand's icon's image formatting. /// The AppBarCommand's label /// /// AppBarCommand: _Base.Namespace._lazy(function () { function _handleClick(event) { /*jshint validthis: true */ var command = this.winControl; if (command) { if (command._type === _Constants.typeToggle) { command.selected = !command.selected; } else if (command._type === _Constants.typeFlyout && command._flyout) { var flyout = command._flyout; // Flyout may not have processAll'd, so this may be a DOM object if (typeof flyout === "string") { flyout = _Global.document.getElementById(flyout); } if (!flyout.show) { flyout = flyout.winControl; } if (flyout && flyout.show) { flyout.show(this, "autovertical"); } } if (command.onclick) { command.onclick(event); } } } // Used by AppBarCommands to notify listeners that a property has changed. var PropertyMutations = _Base.Class.define(function PropertyMutations_ctor() { this._observer = _BaseUtils._merge({}, _Events.eventMixin); }, { bind: function (callback) { this._observer.addEventListener(_Constants.commandPropertyMutated, callback); }, unbind: function (callback) { this._observer.removeEventListener(_Constants.commandPropertyMutated, callback); }, dispatchEvent: function (type, detail) { this._observer.dispatchEvent(type, detail); }, }); var strings = { get ariaLabel() { return _Resources._getWinJSString("ui/appBarCommandAriaLabel").value; }, get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; }, get badClick() { return "Invalid argument: The onclick property for an {0} must be a function"; }, get badDivElement() { return "Invalid argument: For a content command, the element must be null or a div element"; }, get badHrElement() { return "Invalid argument: For a separator, the element must be null or an hr element"; }, get badButtonElement() { return "Invalid argument: For a button, toggle, or flyout command, the element must be null or a button element"; }, get badPriority() { return "Invalid argument: the priority of an {0} must be a non-negative integer"; } }; var AppBarCommand = _Base.Class.define(function AppBarCommand_ctor(element, options) { /// /// /// Creates a new AppBarCommand control. /// /// /// The DOM element that will host the control. AppBarCommand will create one if null. /// /// /// The set of properties and values to apply to the new AppBarCommand. /// /// /// The new AppBarCommand control. /// /// // Check to make sure we weren't duplicated if (element && element.winControl) { throw new _ErrorFromName("WinJS.UI.AppBarCommand.DuplicateConstruction", strings.duplicateConstruction); } this._disposed = false; // Don't blow up if they didn't pass options if (!options) { options = {}; } // Need a type before we can create our element if (!options.type) { this._type = _Constants.typeButton; } options.section = options.section || _Constants.sectionPrimary; // Go ahead and create it, separator and content types look different than buttons // Don't forget to use passed in element if one was provided. this._element = element; if (options.type === _Constants.typeContent) { this._createContent(); } else if (options.type === _Constants.typeSeparator) { this._createSeparator(); } else { // This will also set the icon & label this._createButton(); } _ElementUtilities.addClass(this._element, "win-disposable"); // Remember ourselves this._element.winControl = this; // Attach our css class _ElementUtilities.addClass(this._element, _Constants.appBarCommandClass); if (options.onclick) { this.onclick = options.onclick; } // We want to handle some clicks options.onclick = _handleClick; _Control.setOptions(this, options); if (this._type === _Constants.typeToggle && !options.selected) { this.selected = false; } // Set up pointerdown handler and clean up ARIA if needed if (this._type !== _Constants.typeSeparator) { // Make sure we have an ARIA role var role = this._element.getAttribute("role"); if (role === null || role === "" || role === undefined) { if (this._type === _Constants.typeToggle) { role = "menuitemcheckbox"; } else if (this._type === _Constants.typeContent) { role = "group"; } else { role = "menuitem"; } this._element.setAttribute("role", role); if (this._type === _Constants.typeFlyout) { this._element.setAttribute("aria-haspopup", true); } } // Label should've been set by label, but if it was missed for some reason: var label = this._element.getAttribute("aria-label"); if (label === null || label === "" || label === undefined) { this._element.setAttribute("aria-label", strings.ariaLabel); } } this._propertyMutations = new PropertyMutations(); var that = this; ObservablePropertyWhiteList.forEach(function (propertyName) { makeObservable(that, propertyName); }); }, { /// /// Gets or sets the ID of the AppBarCommand. /// id: { get: function () { return this._element.id; }, set: function (value) { // we allow setting first time only. otherwise we ignore it. if (value && !this._element.id) { this._element.id = value; } } }, /// /// Gets or sets the type of the AppBarCommand. Possible values are "button", "toggle", "flyout", "content" or "separator". /// type: { get: function () { return this._type; }, set: function (value) { // we allow setting first time only. otherwise we ignore it. if (!this._type) { if (value !== _Constants.typeContent && value !== _Constants.typeFlyout && value !== _Constants.typeToggle && value !== _Constants.typeSeparator) { this._type = _Constants.typeButton; } else { this._type = value; } } } }, /// /// Gets or sets the label of the AppBarCommand. /// label: { get: function () { return this._label; }, set: function (value) { this._label = value; if (this._labelSpan) { this._labelSpan.textContent = this.label; } // Ensure that we have a tooltip, by updating already-constructed tooltips. Separators won't have these: if (!this.tooltip && this._tooltipControl) { this._tooltip = this.label; this._tooltipControl.innerHTML = this.label; } // Update aria-label this._element.setAttribute("aria-label", this.label); // Check if we need to suppress the tooltip this._testIdenticalTooltip(); } }, /// /// Gets or sets the icon of the AppBarCommand. /// icon: { get: function () { return this._icon; }, set: function (value) { this._icon = _Icon[value] || value; if (this._imageSpan) { // If the icon's a single character, presume a glyph if (this._icon && this._icon.length === 1) { // Set the glyph this._imageSpan.textContent = this._icon; this._imageSpan.style.backgroundImage = ""; this._imageSpan.style.msHighContrastAdjust = ""; _ElementUtilities.addClass(this._imageSpan, "win-commandglyph"); } else { // Must be an image, set that this._imageSpan.textContent = ""; this._imageSpan.style.backgroundImage = this._icon; this._imageSpan.style.msHighContrastAdjust = "none"; _ElementUtilities.removeClass(this._imageSpan, "win-commandglyph"); } } } }, /// /// Gets or sets the function to invoke when the command is clicked. /// onclick: { get: function () { return this._onclick; }, set: function (value) { if (value && typeof value !== "function") { throw new _ErrorFromName("WinJS.UI.AppBarCommand.BadClick", _Resources._formatString(strings.badClick, "AppBarCommand")); } this._onclick = value; } }, /// /// Gets or sets the priority of the command /// priority: { get: function () { return this._priority; }, set: function (value) { if (value === undefined || (typeof value === "number" && value >= 0)) { this._priority = value; } else { throw new _ErrorFromName("WinJS.UI.AppBarCommand.BadPriority", _Resources._formatString(strings.badPriority, "AppBarCommand")); } } }, /// /// For flyout-type AppBarCommands, this property returns the WinJS.UI.Flyout that this command invokes. /// When setting this property, you may also use the String ID of the flyout to invoke, the DOM object /// for the flyout, or the WinJS.UI.Flyout object itself. /// If the value is set to the String ID of the flyout to invoke, or the DOM object for the flyout, but this /// has not been processed yet, the getter will return the DOM object until it is processed, and /// subsequently return a flyout. /// flyout: { get: function () { // Resolve it to the flyout var flyout = this._flyout; if (typeof flyout === "string") { flyout = _Global.document.getElementById(flyout); } // If it doesn't have a .element, then we need to getControl on it if (flyout && !flyout.element && flyout.winControl) { flyout = flyout.winControl; } return flyout; }, set: function (value) { // Need to update aria-owns with the new ID. var id = value; if (id && typeof id !== "string") { // Our controls have .element properties if (id.element) { id = id.element; } // Hope it's a DOM element, get ID from DOM element if (id) { if (id.id) { id = id.id; } else { // No id, have to fake one id.id = _ElementUtilities._uniqueID(id); id = id.id; } } } if (typeof id === "string") { this._element.setAttribute("aria-owns", id); } // Remember it this._flyout = value; } }, /// /// Gets or sets the section that the AppBarCommand is in. Possible values are "secondary" and "primary". /// section: { get: function () { return this._section; }, set: function (value) { // we allow settings section only one time if (!this._section || _WinRT.Windows.ApplicationModel.DesignMode.designModeEnabled) { this._setSection(value); } } }, /// Gets or sets the tooltip text of the AppBarCommand. tooltip: { get: function () { return this._tooltip; }, set: function (value) { this._tooltip = value; // Update already-constructed tooltips. Separators and content commands won't have these: if (this._tooltipControl) { this._tooltipControl.innerHTML = this._tooltip; } // Check if we need to suppress the tooltip this._testIdenticalTooltip(); } }, /// Set or get the selected state of a toggle button. selected: { get: function () { // Ensure it's a boolean because we're using the DOM element to keep in-sync return this._element.getAttribute("aria-checked") === "true"; }, set: function (value) { this._element.setAttribute("aria-checked", value); } }, /// element: { get: function () { return this._element; } }, /// /// Gets or sets a value that indicates whether the AppBarCommand is disabled. A value of true disables the AppBarCommand, and a value of false enables it. /// disabled: { get: function () { // Ensure it's a boolean because we're using the DOM element to keep in-sync return !!this._element.disabled; }, set: function (value) { this._element.disabled = value; } }, /// hidden: { get: function () { // Ensure it's a boolean because we're using the DOM element to keep in-sync return this._element.style.visibility === "hidden"; }, set: function (value) { if (value === this.hidden) { // No changes to make. return; } var style = this._element.style; var originalVisibility = style.visibility; var originalDisplay = style.display; if (value) { style.visibility = "hidden"; style.display = "none"; } else { style.visibility = ""; style.display = "inline-block"; } if (!this._sendEvent(_Constants.commandVisibilityChanged)) { style.visibility = originalVisibility; style.display = originalDisplay; } } }, /// /// Gets or sets the HTMLElement within a "content" type AppBarCommand that should receive focus whenever focus moves via Home or the arrow keys, /// from the previous AppBarCommand to the this AppBarCommand. Returns the AppBarCommand object's host element by default. /// firstElementFocus: { get: function () { return this._firstElementFocus || this._lastElementFocus || this._element; }, set: function (element) { // Arguments of null and this.element should treated the same to ensure that this.element is never a tabstop when either focus property has been set. this._firstElementFocus = (element === this.element) ? null : element; this._updateTabStop(); } }, /// /// Gets or sets the HTMLElement within a "content" type AppBarCommand that should receive focus whenever focus would move, via End or arrow keys, /// from the next AppBarCommand to this AppBarCommand. Returns this AppBarCommand object's host element by default. /// lastElementFocus: { get: function () { return this._lastElementFocus || this._firstElementFocus || this._element; }, set: function (element) { // Arguments of null and this.element should treated the same to ensure that this.element is never a tabstop when either focus property has been set. this._lastElementFocus = (element === this.element) ? null : element; this._updateTabStop(); } }, dispose: function () { /// /// /// Disposes this control. /// /// if (this._disposed) { return; } this._disposed = true; if (this._tooltipControl) { this._tooltipControl.dispose(); } if (this._type === _Constants.typeContent) { _Dispose.disposeSubTree(this.element); } }, addEventListener: function (type, listener, useCapture) { /// /// /// Registers an event handler for the specified event. /// /// /// Required. The name of the event to register. /// /// Required. The event handler function to associate with this event. /// /// Optional. Set to true to register the event handler for the capturing phase; otherwise, set to false to register the event handler for the bubbling phase. /// /// return this._element.addEventListener(type, listener, useCapture); }, removeEventListener: function (type, listener, useCapture) { /// /// /// Removes an event handler that the addEventListener method registered. /// /// Required. The name of the event to remove. /// Required. The event handler function to remove. /// /// Optional. Set to true to remove the capturing phase event handler; otherwise, set to false to remove the bubbling phase event handler. /// /// return this._element.removeEventListener(type, listener, useCapture); }, /// Adds an extra CSS class during construction. extraClass: { get: function () { return this._extraClass; }, set: function (value) { if (this._extraClass) { _ElementUtilities.removeClass(this._element, this._extraClass); } this._extraClass = value; _ElementUtilities.addClass(this._element, this._extraClass); } }, // Private _testIdenticalTooltip: function AppBarCommand_testIdenticalToolTip() { this._hideIfFullSize = (this._label === this._tooltip); }, _createContent: function AppBarCommand_createContent() { // Make sure there's an element if (!this._element) { this._element = _Global.document.createElement("div"); } else { // Verify the element was a div if (this._element.tagName !== "DIV") { throw new _ErrorFromName("WinJS.UI.AppBarCommand.BadDivElement", strings.badDivElement); } } // If a tabIndex isnt set, default to 0; if (parseInt(this._element.getAttribute("tabIndex"), 10) !== this._element.tabIndex) { this._element.tabIndex = 0; } }, _createSeparator: function AppBarCommand_createSeparator() { // Make sure there's an element if (!this._element) { this._element = _Global.document.createElement("hr"); } else { // Verify the element was an hr if (this._element.tagName !== "HR") { throw new _ErrorFromName("WinJS.UI.AppBarCommand.BadHrElement", strings.badHrElement); } } }, _createButton: function AppBarCommand_createButton() { // Make sure there's an element if (!this._element) { this._element = _Global.document.createElement("button"); } else { // Verify the element was a button if (this._element.tagName !== "BUTTON") { throw new _ErrorFromName("WinJS.UI.AppBarCommand.BadButtonElement", strings.badButtonElement); } // Make sure it has a type="button" var type = this._element.getAttribute("type"); if (type === null || type === "" || type === undefined) { this._element.setAttribute("type", "button"); } this._element.innerHTML = ""; } // AppBarCommand buttons need to look like this: //// this._element.type = "button"; this._iconSpan = _Global.document.createElement("span"); this._iconSpan.setAttribute("aria-hidden", "true"); this._iconSpan.className = "win-commandicon"; this._iconSpan.tabIndex = -1; this._element.appendChild(this._iconSpan); this._imageSpan = _Global.document.createElement("span"); this._imageSpan.setAttribute("aria-hidden", "true"); this._imageSpan.className = "win-commandimage"; this._imageSpan.tabIndex = -1; this._iconSpan.appendChild(this._imageSpan); this._labelSpan = _Global.document.createElement("span"); this._labelSpan.setAttribute("aria-hidden", "true"); this._labelSpan.className = "win-label"; this._labelSpan.tabIndex = -1; this._element.appendChild(this._labelSpan); // 'win-global' or 'win-selection' are added later by caller. // Label and icon are added later by caller. // Attach a tooltip - Note: we're going to stomp on it's setControl so we don't have to make another DOM element to hang it off of. // This private _tooltipControl attribute is used by other pieces, changing the name could break them. this._tooltipControl = new Tooltip.Tooltip(this._element); var that = this; this._tooltipControl.addEventListener("beforeopen", function () { if (that._hideIfFullSize && !_Overlay._Overlay._getParentControlUsingClassName(that._element.parentElement, _Constants.reducedClass)) { that._tooltipControl.close(); } }, false); }, _setSection: function AppBarCommand_setSection(section) { if (!section) { section = _Constants.sectionPrimary; } // _Constants.sectionSelection and _Constants.sectionGlobal are deprecated, so we will continue // adding/removing its corresponding CSS class for app compat. // _Constants.sectionPrimary and _Constants.sectionSecondary no longer apply CSS classes to the // commands. if (this._section) { // Remove the old section class if (this._section === _Constants.sectionGlobal) { _ElementUtilities.removeClass(this._element, _Constants.appBarCommandGlobalClass); } else if (this.section === _Constants.sectionSelection) { _ElementUtilities.removeClass(this._element, _Constants.appBarCommandSelectionClass); } } // Add the new section class this._section = section; if (section === _Constants.sectionGlobal) { _ElementUtilities.addClass(this._element, _Constants.appBarCommandGlobalClass); } else if (section === _Constants.sectionSelection) { _ElementUtilities.addClass(this._element, _Constants.appBarCommandSelectionClass); } }, _updateTabStop: function AppBarCommand_updateTabStop() { // Whenever the firstElementFocus or lastElementFocus properties are set for content type AppBarCommands, // the containing command element is no longer a tabstop. if (this._firstElementFocus || this._lastElementFocus) { this.element.tabIndex = -1; } else { this.element.tabIndex = 0; } }, _isFocusable: function AppBarCommand_isFocusable() { return (!this.hidden && this._type !== _Constants.typeSeparator && !this.element.disabled && (this.firstElementFocus.tabIndex >= 0 || this.lastElementFocus.tabIndex >= 0)); }, _sendEvent: function AppBarCommand_sendEvent(eventName, detail) { if (this._disposed) { return; } var event = _Global.document.createEvent("CustomEvent"); event.initCustomEvent(eventName, true, true, (detail || {})); return this._element.dispatchEvent(event); }, }); // The list of AppBarCommand properties that we care about firing an event // for, whenever they are changed after initial construction. var ObservablePropertyWhiteList = [ "label", "disabled", "flyout", "extraClass", "selected", "onclick", "hidden", ]; function makeObservable(command, propertyName) { // Make a pre-existing AppBarCommand property observable by firing the "_commandpropertymutated" // event whenever its value changes. // Preserve initial value in JS closure variable var _value = command[propertyName]; // Preserve original getter/setter if they exist, else use inline proxy functions. var proto = command.constructor.prototype; var originalDesc = getPropertyDescriptor(proto, propertyName) || {}; var getter = originalDesc.get.bind(command) || function getterProxy() { return _value; }; var setter = originalDesc.set.bind(command) || function setterProxy(value) { _value = value; }; // Define new observable Get/Set for propertyName on the command instance Object.defineProperty(command, propertyName, { get: function observable_get() { return getter(); }, set: function observable_set(value) { var oldValue = getter(); // Process value through the original setter & getter before deciding to send an event. setter(value); var newValue = getter(); if (!this._disposed && oldValue !== value && oldValue !== newValue && !command._disposed) { command._propertyMutations.dispatchEvent( _Constants.commandPropertyMutated, { command: command, propertyName: propertyName, oldValue: oldValue, newValue: newValue, }); } } }); } function getPropertyDescriptor(obj, propertyName) { // Returns a matching property descriptor, or null, // if no matching descriptor is found. var desc = null; while (obj && !desc) { desc = Object.getOwnPropertyDescriptor(obj, propertyName); obj = Object.getPrototypeOf(obj); // Walk obj's prototype chain until we find a match. } return desc; } return AppBarCommand; }) }); _Base.Namespace._moduleDefine(exports, "WinJS.UI", { Command: _Base.Namespace._lazy(function () { return exports.AppBarCommand; }) }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. // Menu Command /// appbar,appbars,Flyout,Flyouts,onclick,Statics define('WinJS/Controls/Menu/_Command',[ 'exports', '../../Core/_Global', '../../Core/_Base', '../../Core/_ErrorFromName', '../../Core/_Resources', '../../Promise', '../../Utilities/_Control', '../../Utilities/_ElementUtilities', '../_LegacyAppBar/_Constants', '../Flyout/_Overlay' ], function menuCommandInit(exports, _Global, _Base, _ErrorFromName, _Resources, Promise, _Control, _ElementUtilities, _Constants, _Overlay) { "use strict"; _Base.Namespace._moduleDefine(exports, "WinJS.UI", { /// /// /// Represents a command to be displayed in a Menu. MenuCommand objects provide button, toggle button, flyout button, /// or separator functionality for Menu controls. /// /// /// /// /// /// ]]> /// The MenuCommand control itself /// /// MenuCommand: _Base.Namespace._lazy(function () { var strings = { get ariaLabel() { return _Resources._getWinJSString("ui/menuCommandAriaLabel").value; }, get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; }, get badClick() { return "Invalid argument: The onclick property for an {0} must be a function"; }, get badHrElement() { return "Invalid argument: For a separator, the element must be null or an hr element"; }, get badButtonElement() { return "Invalid argument: For a button, toggle, or flyout command, the element must be null or a button element"; } }; var MenuCommand = _Base.Class.define(function MenuCommand_ctor(element, options) { /// /// /// Creates a new MenuCommand object. /// /// /// The DOM element that will host the control. /// /// /// The set of properties and values to apply to the new MenuCommand. /// /// /// A MenuCommand control. /// /// /// // Check to make sure we weren't duplicated if (element && element.winControl) { throw new _ErrorFromName("WinJS.UI.MenuCommand.DuplicateConstruction", strings.duplicateConstruction); } this._disposed = false; // Don't blow up if they didn't pass options if (!options) { options = {}; } // Need a type before we can create our element if (!options.type) { this._type = _Constants.typeButton; } // Go ahead and create it, separator types look different than buttons // Don't forget to use passed in element if one was provided. this._element = element; if (options.type === _Constants.typeSeparator) { this._createSeparator(); } else { // This will also set the icon & label this._createButton(); } _ElementUtilities.addClass(this._element, "win-disposable"); // Remember ourselves this._element.winControl = this; // Attach our css class _ElementUtilities.addClass(this._element, _Constants.menuCommandClass); if (!options.selected && options.type === _Constants.typeToggle) { // Make sure toggle's have selected false for CSS this.selected = false; } if (options.onclick) { this.onclick = options.onclick; } options.onclick = this._handleClick.bind(this); _Control.setOptions(this, options); // Set our options if (this._type !== _Constants.typeSeparator) { // Make sure we have an ARIA role var role = this._element.getAttribute("role"); if (role === null || role === "" || role === undefined) { role = "menuitem"; if (this._type === _Constants.typeToggle) { role = "menuitemcheckbox"; } this._element.setAttribute("role", role); if (this._type === _Constants.typeFlyout) { this._element.setAttribute("aria-haspopup", true); } } var label = this._element.getAttribute("aria-label"); if (label === null || label === "" || label === undefined) { this._element.setAttribute("aria-label", strings.ariaLabel); } } }, { /// /// Gets the ID of the MenuCommand. /// /// id: { get: function () { return this._element.id; }, set: function (value) { // we allow setting first time only. otherwise we ignore it. if (!this._element.id) { this._element.id = value; } } }, /// /// Gets the type of the MenuCommand. Possible values are "button", "toggle", "flyout", or "separator". /// /// type: { get: function () { return this._type; }, set: function (value) { // we allow setting first time only. otherwise we ignore it. if (!this._type) { if (value !== _Constants.typeButton && value !== _Constants.typeFlyout && value !== _Constants.typeToggle && value !== _Constants.typeSeparator) { value = _Constants.typeButton; } this._type = value; if (value === _Constants.typeButton) { _ElementUtilities.addClass(this.element, _Constants.menuCommandButtonClass); } else if (value === _Constants.typeFlyout) { _ElementUtilities.addClass(this.element, _Constants.menuCommandFlyoutClass); this.element.addEventListener("keydown", this._handleKeyDown.bind(this), false); } else if (value === _Constants.typeSeparator) { _ElementUtilities.addClass(this.element, _Constants.menuCommandSeparatorClass); } else if (value === _Constants.typeToggle) { _ElementUtilities.addClass(this.element, _Constants.menuCommandToggleClass); } } } }, /// /// The label of the MenuCommand /// /// label: { get: function () { return this._label; }, set: function (value) { this._label = value || ""; if (this._labelSpan) { this._labelSpan.textContent = this.label; } // Update aria-label this._element.setAttribute("aria-label", this.label); } }, /// /// Gets or sets the function to invoke when the command is clicked. /// /// onclick: { get: function () { return this._onclick; }, set: function (value) { if (value && typeof value !== "function") { throw new _ErrorFromName("WinJS.UI.MenuCommand.BadClick", _Resources._formatString(strings.badClick, "MenuCommand")); } this._onclick = value; } }, /// /// For flyout type MenuCommands, this property returns the WinJS.UI.Flyout that this command invokes. When setting this property, you can set /// it to the string ID of the Flyout, the DOM object that hosts the Flyout, or the Flyout object itself. /// /// flyout: { get: function () { // Resolve it to the flyout var flyout = this._flyout; if (typeof flyout === "string") { flyout = _Global.document.getElementById(flyout); } // If it doesn't have a .element, then we need to getControl on it if (flyout && !flyout.element) { flyout = flyout.winControl; } return flyout; }, set: function (value) { // Need to update aria-owns with the new ID. var id = value; if (id && typeof id !== "string") { // Our controls have .element properties if (id.element) { id = id.element; } // Hope it's a DOM element, get ID from DOM element if (id) { if (id.id) { id = id.id; } else { // No id, have to fake one id.id = _ElementUtilities._uniqueID(id); id = id.id; } } } if (typeof id === "string") { this._element.setAttribute("aria-owns", id); } if (this._flyout !== value) { MenuCommand._deactivateFlyoutCommand(this); } // Remember it this._flyout = value; } }, /// /// Gets or sets the selected state of a toggle button. This property is true if the toggle button is selected; otherwise, it's false. /// /// selected: { get: function () { // Ensure it's a boolean because we're using the DOM element to keep in-sync return this._element.getAttribute("aria-checked") === "true"; }, set: function (value) { this._element.setAttribute("aria-checked", !!value); } }, /// element: { get: function () { return this._element; } }, /// /// Gets or sets a value that indicates whether the MenuCommand is disabled. This value is true if the MenuCommand is disabled; otherwise, false. /// /// disabled: { get: function () { // Ensure it's a boolean because we're using the DOM element to keep in-sync return !!this._element.disabled; }, set: function (value) { value = !!value; if (value && this.type === _Constants.typeFlyout) { MenuCommand._deactivateFlyoutCommand(this); } this._element.disabled = value; } }, /// hidden: { get: function () { // Ensure it's a boolean because we're using the DOM element to keep in-sync return this._element.style.visibility === "hidden"; }, set: function (value) { var menuControl = _Overlay._Overlay._getParentControlUsingClassName(this._element, _Constants.menuClass); if (menuControl && !menuControl.hidden) { throw new _ErrorFromName("WinJS.UI.MenuCommand.CannotChangeHiddenProperty", _Resources._formatString(_Overlay._Overlay.commonstrings.cannotChangeHiddenProperty, "Menu")); } var style = this._element.style; if (value) { if (this.type === _Constants.typeFlyout) { MenuCommand._deactivateFlyoutCommand(this); } style.visibility = "hidden"; style.display = "none"; } else { style.visibility = ""; style.display = "block"; } } }, /// /// Gets or sets the extra CSS class that is applied to the host DOM element. /// /// extraClass: { get: function () { return this._extraClass; }, set: function (value) { if (this._extraClass) { _ElementUtilities.removeClass(this._element, this._extraClass); } this._extraClass = value; _ElementUtilities.addClass(this._element, this._extraClass); } }, dispose: function () { /// /// /// Disposes this control. /// /// /// if (this._disposed) { return; } this._disposed = true; }, addEventListener: function (type, listener, useCapture) { /// /// /// Registers an event handler for the specified event. /// /// The name of the event to register. /// The function that handles the event. /// /// Set to true to register the event handler for the capturing phase; otherwise, set to false to register the event handler for the bubbling phase. /// /// /// return this._element.addEventListener(type, listener, useCapture); }, removeEventListener: function (type, listener, useCapture) { /// /// /// Removes the specified event handler that the addEventListener method registered. /// /// The name of the event to remove. /// The event handler function to remove. /// /// Set to true to remove the capturing phase event handler; set to false to remove the bubbling phase event handler. /// /// /// return this._element.removeEventListener(type, listener, useCapture); }, // Private properties _createSeparator: function MenuCommand_createSeparator() { // Make sure there's an input element if (!this._element) { this._element = _Global.document.createElement("hr"); } else { // Verify the input was an hr if (this._element.tagName !== "HR") { throw new _ErrorFromName("WinJS.UI.MenuCommand.BadHrElement", strings.badHrElement); } } }, _createButton: function MenuCommand_createButton() { // Make sure there's an element if (!this._element) { this._element = _Global.document.createElement("button"); } else { // Verify the input was a button if (this._element.tagName !== "BUTTON") { throw new _ErrorFromName("WinJS.UI.MenuCommand.BadButtonElement", strings.badButtonElement); } } // Create our inner HTML. We will set aria values on the button itself further down in the constructor. this._element.innerHTML = '
    ' + '' + '' + '' + '
    '; this._element.type = "button"; // The purpose of menuCommandLiner is to lay out the MenuCommand's children in a flexbox. Ideally, this flexbox would // be on MenuCommand.element. However, firefox lays out buttons with display:flex differently. // Firefox bug 1014285 (Button with display:inline-flex doesn't layout properly) // https://bugzilla.mozilla.org/show_bug.cgi?id=1014285 this._menuCommandLiner = this._element.firstElementChild; this._toggleSpan = this._menuCommandLiner.firstElementChild; this._labelSpan = this._toggleSpan.nextElementSibling; this._flyoutSpan = this._labelSpan.nextElementSibling; }, _sendEvent: function MenuCommand_sendEvent(eventName, detail) { if (!this._disposed) { var event = _Global.document.createEvent("CustomEvent"); event.initCustomEvent(eventName, true, true, (detail || {})); this._element.dispatchEvent(event); } }, _invoke: function MenuCommand_invoke(event) { if (!this.hidden && !this.disabled && !this._disposed) { if (this._type === _Constants.typeToggle) { this.selected = !this.selected; } else if (this._type === _Constants.typeFlyout) { MenuCommand._activateFlyoutCommand(this); } if (event && event.type === "click" && this.onclick) { this.onclick(event); } // Bubble private 'invoked' event to Menu this._sendEvent(_Constants._menuCommandInvokedEvent, { command: this }); } }, _handleClick: function MenuCommand_handleClick(event) { this._invoke(event); }, _handleKeyDown: function MenuCommand_handleKeyDown(event) { var Key = _ElementUtilities.Key, rtl = _Global.getComputedStyle(this.element).direction === "rtl", rightKey = rtl ? Key.leftArrow : Key.rightArrow; if (event.keyCode === rightKey && this.type === _Constants.typeFlyout) { this._invoke(event); // Prevent the page from scrolling event.preventDefault(); } }, }, { // Statics _activateFlyoutCommand: function MenuCommand_activateFlyoutCommand(menuCommand) { // Activates the associated Flyout command and returns a promise once complete. // A command is considered to be activated once the proper CSS class has been applied and its associated flyout has finished showing. return new Promise(function (c, e) { menuCommand = menuCommand.winControl || menuCommand; var subFlyout = menuCommand.flyout; // Flyout may not have processAll'd, so this may be a DOM object if (subFlyout && subFlyout.hidden && subFlyout.show) { _ElementUtilities.addClass(menuCommand.element, _Constants.menuCommandFlyoutActivatedClass); // Remove activation class from the command if the flyout is ever hidden. subFlyout.addEventListener("beforehide", function beforeHide() { subFlyout.removeEventListener("beforehide", beforeHide, false); _ElementUtilities.removeClass(menuCommand.element, _Constants.menuCommandFlyoutActivatedClass); }, false); subFlyout.addEventListener("aftershow", function afterShow() { subFlyout.removeEventListener("aftershow", afterShow, false); // We are considered activated once we start showing the flyout. c(); }, false); subFlyout.show(menuCommand, "_cascade"); } else { // Could not change command to activated state. e(); } }); }, _deactivateFlyoutCommand: function MenuCommand_deactivateFlyoutCommand(menuCommand) { // Deactivates the associated Flyout command and returns a promise once complete. // A command is considered to be deactivated once the proper CSS class has been applied and its associated flyout has finished hiding. return new Promise(function (c) { menuCommand = menuCommand.winControl || menuCommand; _ElementUtilities.removeClass(menuCommand.element, _Constants.menuCommandFlyoutActivatedClass); var subFlyout = menuCommand.flyout; // Flyout may not have processAll'd, so this may be a DOM object if (subFlyout && !subFlyout.hidden && subFlyout.hide) { subFlyout.addEventListener("afterhide", function afterHide() { subFlyout.removeEventListener("afterhide", afterHide, false); c(); }, false); subFlyout.hide(); } else { // subFlyout does not need to be hidden. c(); } }); }, }); return MenuCommand; }) }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; define('WinJS/Controls/CommandingSurface/_MenuCommand',["require", "exports", "../Menu/_Command"], function (require, exports, _MenuCommandBase) { var _MenuCommand = (function (_super) { __extends(_MenuCommand, _super); function _MenuCommand(element, options) { if (options && options.beforeInvoke) { this._beforeInvoke = options.beforeInvoke; } _super.call(this, element, options); } _MenuCommand.prototype._invoke = function (event) { this._beforeInvoke && this._beforeInvoke(event); _super.prototype._invoke.call(this, event); }; return _MenuCommand; })(_MenuCommandBase.MenuCommand); exports._MenuCommand = _MenuCommand; }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// define('WinJS/Utilities/_OpenCloseMachine',["require", "exports", '../Core/_Global', '../Promise', '../_Signal'], function (require, exports, _Global, Promise, _Signal) { "use strict"; // This module provides a state machine which is designed to be used by controls which need to // open, close, and fire related events (e.g. beforeopen, afterclose). The state machine handles // many edge cases. For example, what happens if: // - open is called when we're already opened? // - close is called while we're in the middle of opening? // - dispose is called while we're in the middle of firing beforeopen? // The state machine takes care of all of these edge cases so that the control doesn't have to. // The control is responible for knowing how to play its open/close animations and update its DOM. // The state machine is responsible for ensuring that these things happen at the appropriate times. // This module is broken up into 3 major pieces: // - OpenCloseMachine: Controls should instantiate one of these. The machine keeps track of the // current state and has methods for forwarding calls to the current state. // - IOpenCloseControl: Controls must provide an object which implements this interface. The // interface gives the machine hooks for invoking the control's open and close animations. // - States: The various states (e.g. Closed, Opened, Opening) that the machine can be in. Each // implements IOpenCloseState. // Example usage: // class MyControl { // element: HTMLElement; // private _machine: OpenCloseMachine; // // constructor(element?: HTMLElement, options: any = {}) { // this.element = element || document.createElement("div"); // // // Create the machine. // this._machine = new OpenCloseMachine({ // eventElement: this.element, // onOpen: (): Promise => { // // Do the work to render the contol in its opened state with an animation. // // Return the animation promise. // }, // onClose: (): Promise => { // // Do the work to render the contol in its closed state with an animation. // // Return the animation promise. // }, // onUpdateDom() { // // Do the work to render the internal state of the control to the DOM. If a // // control restricts all its DOM modifications to onUpdateDom, the state machine // // can guarantee that the control won't modify its DOM while it is animating. // }, // onUpdateDomWithIsOpened: (isOpened: boolean ) => { // // Do the same work as onUpdateDom but ensure that the DOM is rendered with either // // the opened or closed visual as dictacted by isOpened. The control should have some // // internal state to track whether it is currently opened or closed. Treat this as a // // cue to mutate that internal state to reflect the value of isOpened. // }, // }); // // // Initialize the control. During this time, the machine will not ask the control to // // play any animations or update its DOM. // this.opened = true; // _Control.setOptions(this, options); // // // Tell the machine the control is initialized. After this, the machine will start asking // // the control to play animations and update its DOM as appropriate. // this._machine.exitInit(); // } // // get opened() { // return this._machine.opened; // } // set opened(value: boolean) { // this._machine.opened = value; // } // open() { // this._machine.open(); // } // close() { // this._machine.close(); // } // forceLayout() { // this._machine.updateDom(); // } // dispose() { // this._machine.dispose(); // } // } var EventNames = { beforeOpen: "beforeopen", afterOpen: "afteropen", beforeClose: "beforeclose", afterClose: "afterclose", // Private events // Indicates that the OpenCloseMachine has settled either into the Opened state // or Closed state. This is more comprehensive than the "afteropen" and "afterclose" // events because it fires even if the machine has reached the state due to: // - Exiting the Init state // - The beforeopen/beforeclose events being canceled _openCloseStateSettled: "_openCloseStateSettled" }; // // OpenCloseMachine // var OpenCloseMachine = (function () { // // Methods called by the control // // When the machine is created, it sits in the Init state. When in the Init state, calls to // updateDom will be postponed until the machine exits the Init state. Consequently, while in // this state, the control can feel free to call updateDom as many times as it wants without // worrying about it being expensive due to updating the DOM many times. The control should call // *exitInit* to move the machine out of the Init state. function OpenCloseMachine(args) { this._control = args; this._initializedSignal = new _Signal(); this._disposed = false; this._setState(States.Init); } // Moves the machine out of the Init state and into the Opened or Closed state depending on whether // open or close was called more recently. OpenCloseMachine.prototype.exitInit = function () { this._initializedSignal.complete(); }; // These method calls are forwarded to the current state. OpenCloseMachine.prototype.updateDom = function () { this._state.updateDom(); }; OpenCloseMachine.prototype.open = function () { this._state.open(); }; OpenCloseMachine.prototype.close = function () { this._state.close(); }; Object.defineProperty(OpenCloseMachine.prototype, "opened", { get: function () { return this._state.opened; }, set: function (value) { if (value) { this.open(); } else { this.close(); } }, enumerable: true, configurable: true }); // Puts the machine into the Disposed state. OpenCloseMachine.prototype.dispose = function () { this._setState(States.Disposed); this._disposed = true; this._control = null; }; // // Methods called by states // OpenCloseMachine.prototype._setState = function (NewState, arg0) { if (!this._disposed) { this._state && this._state.exit(); this._state = new NewState(); this._state.machine = this; this._state.enter(arg0); } }; // Triggers arbitrary app code OpenCloseMachine.prototype._fireEvent = function (eventName, options) { options = options || {}; var detail = options.detail || null; var cancelable = !!options.cancelable; var eventObject = _Global.document.createEvent("CustomEvent"); eventObject.initCustomEvent(eventName, true, cancelable, detail); return this._control.eventElement.dispatchEvent(eventObject); }; // Triggers arbitrary app code OpenCloseMachine.prototype._fireBeforeOpen = function () { return this._fireEvent(EventNames.beforeOpen, { cancelable: true }); }; // Triggers arbitrary app code OpenCloseMachine.prototype._fireBeforeClose = function () { return this._fireEvent(EventNames.beforeClose, { cancelable: true }); }; return OpenCloseMachine; })(); exports.OpenCloseMachine = OpenCloseMachine; // // States (each implements IOpenCloseState) // // WinJS animation promises always complete successfully. This // helper allows an animation promise to complete in the canceled state // so that the success handler can be skipped when the animation is // interrupted. function cancelablePromise(animationPromise) { return Promise._cancelBlocker(animationPromise, function () { animationPromise.cancel(); }); } // Noop function, used in the various states to indicate that they don't support a given // message. Named with the somewhat cute name '_' because it reads really well in the states. function _() { } // Implementing the control as a state machine helps us correctly handle: // - re-entrancy while firing events // - calls into the control during asynchronous operations (e.g. animations) // // Many of the states do their "enter" work within a promise chain. The idea is that if // the state is interrupted and exits, the rest of its work can be skipped by canceling // the promise chain. // An interesting detail is that anytime the state may trigger app code (e.g. due to // firing an event), the current promise must end and a new promise must be chained off of it. // This is necessary because the app code may interact with the control and cause it to // change states. If we didn't create a new promise, then the very next line of code that runs // after triggering app code may not be valid because the state may have exited. Starting a // new promise after each triggering of app code prevents us from having to worry about this // problem. In this configuration, when a promise's success handler runs, it guarantees that // the state hasn't exited. // For similar reasons, each of the promise chains created in "enter" starts off with a _Signal // which is completed at the end of the "enter" function (this boilerplate is abstracted away by // the "interruptible" function). The reason is that we don't want any of the code in "enter" // to run until the promise chain has been stored in a variable. If we didn't do this (e.g. instead, // started the promise chain with Promise.wrap()), then the "enter" code could trigger the "exit" // function (via app code) before the promise chain had been stored in a variable. Under these // circumstances, the promise chain would be uncancelable and so the "enter" work would be // unskippable. This wouldn't be good when we needed the state to exit early. // These two functions manage interruptible work promises (one creates them the other cancels // them). They communicate with each other thru the _interruptibleWorkPromises property which // "interruptible" creates on your object. function interruptible(object, workFn) { object["_interruptibleWorkPromises"] = object["_interruptibleWorkPromises"] || []; var workStoredSignal = new _Signal(); object["_interruptibleWorkPromises"].push(workFn(workStoredSignal.promise)); workStoredSignal.complete(); } function cancelInterruptibles() { (this["_interruptibleWorkPromises"] || []).forEach(function (workPromise) { workPromise.cancel(); }); } // Transitions: // When created, the state machine will take one of the following initialization // transitions depending on how the machines's APIs have been used by the time // exitInit() is called on it: // Init -> Closed // Init -> Opened // Following that, the life of the machine will be dominated by the following // sequences of transitions. In geneneral, these sequences are uninterruptible. // Closed -> BeforeOpen -> Closed (when preventDefault is called on beforeopen event) // Closed -> BeforeOpen -> Opening -> Opened // Opened -> BeforeClose -> Opened (when preventDefault is called on beforeclose event) // Opened -> BeforeClose -> Closing -> Closed // However, any state can be interrupted to go to the Disposed state: // * -> Disposed var States; (function (States) { function updateDomImpl() { this.machine._control.onUpdateDom(); } // Initial state. Gives the control the opportunity to initialize itself without // triggering any animations or DOM modifications. When done, the control should // call *exitInit* to move the machine to the next state. var Init = (function () { function Init() { this.name = "Init"; this.exit = cancelInterruptibles; this.updateDom = _; // Postponed until immediately before we switch to another state } Init.prototype.enter = function () { var _this = this; interruptible(this, function (ready) { return ready.then(function () { return _this.machine._initializedSignal.promise; }).then(function () { _this.machine._control.onUpdateDomWithIsOpened(_this._opened); _this.machine._setState(_this._opened ? Opened : Closed); }); }); }; Object.defineProperty(Init.prototype, "opened", { get: function () { return this._opened; }, enumerable: true, configurable: true }); Init.prototype.open = function () { this._opened = true; }; Init.prototype.close = function () { this._opened = false; }; return Init; })(); States.Init = Init; // A rest state. The control is closed and is waiting for the app to call open. var Closed = (function () { function Closed() { this.name = "Closed"; this.exit = _; this.opened = false; this.close = _; this.updateDom = updateDomImpl; } Closed.prototype.enter = function (args) { args = args || {}; if (args.openIsPending) { this.open(); } this.machine._fireEvent(EventNames._openCloseStateSettled); }; Closed.prototype.open = function () { this.machine._setState(BeforeOpen); }; return Closed; })(); // An event state. The control fires the beforeopen event. var BeforeOpen = (function () { function BeforeOpen() { this.name = "BeforeOpen"; this.exit = cancelInterruptibles; this.opened = false; this.open = _; this.close = _; this.updateDom = updateDomImpl; } BeforeOpen.prototype.enter = function () { var _this = this; interruptible(this, function (ready) { return ready.then(function () { return _this.machine._fireBeforeOpen(); // Give opportunity for chain to be canceled when triggering app code }).then(function (shouldOpen) { if (shouldOpen) { _this.machine._setState(Opening); } else { _this.machine._setState(Closed); } }); }); }; return BeforeOpen; })(); // An animation/event state. The control plays its open animation and fires afteropen. var Opening = (function () { function Opening() { this.name = "Opening"; this.exit = cancelInterruptibles; this.updateDom = _; // Postponed until immediately before we switch to another state } Opening.prototype.enter = function () { var _this = this; interruptible(this, function (ready) { return ready.then(function () { _this._closeIsPending = false; return cancelablePromise(_this.machine._control.onOpen()); }).then(function () { _this.machine._fireEvent(EventNames.afterOpen); // Give opportunity for chain to be canceled when triggering app code }).then(function () { _this.machine._control.onUpdateDom(); _this.machine._setState(Opened, { closeIsPending: _this._closeIsPending }); }); }); }; Object.defineProperty(Opening.prototype, "opened", { get: function () { return !this._closeIsPending; }, enumerable: true, configurable: true }); Opening.prototype.open = function () { this._closeIsPending = false; }; Opening.prototype.close = function () { this._closeIsPending = true; }; return Opening; })(); // A rest state. The control is opened and is waiting for the app to call close. var Opened = (function () { function Opened() { this.name = "Opened"; this.exit = _; this.opened = true; this.open = _; this.updateDom = updateDomImpl; } Opened.prototype.enter = function (args) { args = args || {}; if (args.closeIsPending) { this.close(); } this.machine._fireEvent(EventNames._openCloseStateSettled); }; Opened.prototype.close = function () { this.machine._setState(BeforeClose); }; return Opened; })(); // An event state. The control fires the beforeclose event. var BeforeClose = (function () { function BeforeClose() { this.name = "BeforeClose"; this.exit = cancelInterruptibles; this.opened = true; this.open = _; this.close = _; this.updateDom = updateDomImpl; } BeforeClose.prototype.enter = function () { var _this = this; interruptible(this, function (ready) { return ready.then(function () { return _this.machine._fireBeforeClose(); // Give opportunity for chain to be canceled when triggering app code }).then(function (shouldClose) { if (shouldClose) { _this.machine._setState(Closing); } else { _this.machine._setState(Opened); } }); }); }; return BeforeClose; })(); // An animation/event state. The control plays the close animation and fires the afterclose event. var Closing = (function () { function Closing() { this.name = "Closing"; this.exit = cancelInterruptibles; this.updateDom = _; // Postponed until immediately before we switch to another state } Closing.prototype.enter = function () { var _this = this; interruptible(this, function (ready) { return ready.then(function () { _this._openIsPending = false; return cancelablePromise(_this.machine._control.onClose()); }).then(function () { _this.machine._fireEvent(EventNames.afterClose); // Give opportunity for chain to be canceled when triggering app code }).then(function () { _this.machine._control.onUpdateDom(); _this.machine._setState(Closed, { openIsPending: _this._openIsPending }); }); }); }; Object.defineProperty(Closing.prototype, "opened", { get: function () { return this._openIsPending; }, enumerable: true, configurable: true }); Closing.prototype.open = function () { this._openIsPending = true; }; Closing.prototype.close = function () { this._openIsPending = false; }; return Closing; })(); var Disposed = (function () { function Disposed() { this.name = "Disposed"; this.enter = _; this.exit = _; this.opened = false; this.open = _; this.close = _; this.updateDom = _; } return Disposed; })(); States.Disposed = Disposed; })(States || (States = {})); }); define('require-style!less/styles-commandingsurface',[],function(){}); define('require-style!less/colors-commandingsurface',[],function(){}); define('WinJS/Controls/CommandingSurface/_CommandingSurface',["require", "exports", "../../Animations", "../../Core/_Base", "../../Core/_BaseUtils", "../../BindingList", "../../ControlProcessor", "../CommandingSurface/_Constants", "../AppBar/_Command", "../CommandingSurface/_MenuCommand", "../../Utilities/_Control", "../../Utilities/_Dispose", "../../Utilities/_ElementUtilities", "../../Core/_ErrorFromName", '../../Core/_Events', "../../Controls/Flyout", "../../Core/_Global", "../../Utilities/_Hoverable", "../../Utilities/_KeyboardBehavior", '../../Core/_Log', '../../Promise', "../../Core/_Resources", "../../Scheduler", '../../Utilities/_OpenCloseMachine', '../../_Signal', "../../Core/_WriteProfilerMark"], function (require, exports, Animations, _Base, _BaseUtils, BindingList, ControlProcessor, _Constants, _Command, _CommandingSurfaceMenuCommand, _Control, _Dispose, _ElementUtilities, _ErrorFromName, _Events, _Flyout, _Global, _Hoverable, _KeyboardBehavior, _Log, Promise, _Resources, Scheduler, _OpenCloseMachine, _Signal, _WriteProfilerMark) { require(["require-style!less/styles-commandingsurface"]); require(["require-style!less/colors-commandingsurface"]); "use strict"; var strings = { get overflowButtonAriaLabel() { return _Resources._getWinJSString("ui/commandingSurfaceOverflowButtonAriaLabel").value; }, get badData() { return "Invalid argument: The data property must an instance of a WinJS.Binding.List"; }, get mustContainCommands() { return "The commandingSurface can only contain WinJS.UI.Command or WinJS.UI.AppBarCommand controls"; }, get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; } }; var CommandLayoutPipeline = { newDataStage: 3, measuringStage: 2, layoutStage: 1, idle: 0, }; var OverflowDirection = { /// The _CommandingSurface expands towards the bottom of the screen when opened and the overflow area renders below the actionarea. bottom: "bottom", /// The _CommandingSurface expands towards the top of the screen when opened and the overflow area renders above the actionarea. top: "top", }; var overflowDirectionClassMap = {}; overflowDirectionClassMap[OverflowDirection.top] = _Constants.ClassNames.overflowTopClass; overflowDirectionClassMap[OverflowDirection.bottom] = _Constants.ClassNames.overflowBottomClass; var ClosedDisplayMode = { /// When the _CommandingSurface is closed, the actionarea is not visible and doesn't take up any space. none: "none", /// When the _CommandingSurface is closed, the height of the actionarea is reduced to the minimal height required to display only the actionarea overflowbutton. All other content in the actionarea is not displayed. minimal: "minimal", /// When the _CommandingSurface is closed, the height of the actionarea is reduced such that button commands are still visible, but their labels are hidden. compact: "compact", /// When the _CommandingSurface is closed, the height of the actionarea is always sized to content and does not change between opened and closed states. full: "full", }; var closedDisplayModeClassMap = {}; closedDisplayModeClassMap[ClosedDisplayMode.none] = _Constants.ClassNames.noneClass; closedDisplayModeClassMap[ClosedDisplayMode.minimal] = _Constants.ClassNames.minimalClass; closedDisplayModeClassMap[ClosedDisplayMode.compact] = _Constants.ClassNames.compactClass; closedDisplayModeClassMap[ClosedDisplayMode.full] = _Constants.ClassNames.fullClass; // Versions of add/removeClass that are no ops when called with falsy class names. function addClass(element, className) { className && _ElementUtilities.addClass(element, className); } function removeClass(element, className) { className && _ElementUtilities.removeClass(element, className); } function diffElements(lhs, rhs) { // Subtract array rhs from array lhs. // Returns a new Array containing the subset of elements in lhs that are not also in rhs. return lhs.filter(function (commandElement) { return rhs.indexOf(commandElement) < 0; }); } /// Represents an apaptive surface for displaying commands. var _CommandingSurface = (function () { function _CommandingSurface(element, options) { /// Creates a new CommandingSurface control. /// @param element: The DOM element that will host the control. /// @param options: The set of properties and values to apply to the new CommandingSurface control. /// @return: The new CommandingSurface control. var _this = this; if (options === void 0) { options = {}; } this._hoverable = _Hoverable.isHoverable; /* force dependency on hoverable module */ this._dataChangedEvents = ["itemchanged", "iteminserted", "itemmoved", "itemremoved", "reload"]; // State private to _updateDomImpl_renderDisplayMode. No other method should make use of it. // // Nothing has been rendered yet so these are all initialized to undefined. Because // they are undefined, the first time _updateDomImpl is called, they will all be // rendered. this._updateDomImpl_renderedState = { closedDisplayMode: undefined, isOpenedMode: undefined, overflowDirection: undefined, overflowAlignmentOffset: undefined, }; this._writeProfilerMark("constructor,StartTM"); // Check to make sure we weren't duplicated if (element && element["winControl"]) { throw new _ErrorFromName("WinJS.UI._CommandingSurface.DuplicateConstruction", strings.duplicateConstruction); } this._initializeDom(element || _Global.document.createElement("div")); this._machine = options.openCloseMachine || new _OpenCloseMachine.OpenCloseMachine({ eventElement: this._dom.root, onOpen: function () { _this.synchronousOpen(); return Promise.wrap(); }, onClose: function () { _this.synchronousClose(); return Promise.wrap(); }, onUpdateDom: function () { _this.updateDomImpl(); }, onUpdateDomWithIsOpened: function (isOpened) { if (isOpened) { _this.synchronousOpen(); } else { _this.synchronousClose(); } } }); // Initialize private state. this._disposed = false; this._primaryCommands = []; this._secondaryCommands = []; this._refreshBound = this._refresh.bind(this); this._resizeHandlerBound = this._resizeHandler.bind(this); this._winKeyboard = new _KeyboardBehavior._WinKeyboard(this._dom.root); this._refreshPending = false; this._rtl = false; this._initializedSignal = new _Signal(); this._nextLayoutStage = CommandLayoutPipeline.idle; this._isOpenedMode = _Constants.defaultOpened; this._menuCommandProjections = []; // Initialize public properties. this.overflowDirection = _Constants.defaultOverflowDirection; this.closedDisplayMode = _Constants.defaultClosedDisplayMode; this.opened = this._isOpenedMode; if (!options.data) { // Shallow copy object so we can modify it. options = _BaseUtils._shallowCopy(options); // Set default data options.data = options.data || this._getDataFromDOMElements(); } _Control.setOptions(this, options); // Event handlers _ElementUtilities._resizeNotifier.subscribe(this._dom.root, this._resizeHandlerBound); this._dom.root.addEventListener('keydown', this._keyDownHandler.bind(this)); // Exit the Init state. _ElementUtilities._inDom(this._dom.root).then(function () { _this._rtl = _Global.getComputedStyle(_this._dom.root).direction === 'rtl'; if (!options.openCloseMachine) { // We should only call exitInit on the machine when we own the machine. _this._machine.exitInit(); } _this._initializedSignal.complete(); _this._writeProfilerMark("constructor,StopTM"); }); } Object.defineProperty(_CommandingSurface.prototype, "element", { /// Gets the DOM element that hosts the CommandingSurface. get: function () { return this._dom.root; }, enumerable: true, configurable: true }); Object.defineProperty(_CommandingSurface.prototype, "data", { /// Gets or sets the Binding List of WinJS.UI.Command for the CommandingSurface. get: function () { return this._data; }, set: function (value) { this._writeProfilerMark("set_data,info"); if (value !== this.data) { if (!(value instanceof BindingList.List)) { throw new _ErrorFromName("WinJS.UI._CommandingSurface.BadData", strings.badData); } if (this._data) { this._removeDataListeners(); } this._data = value; this._addDataListeners(); this._dataUpdated(); } }, enumerable: true, configurable: true }); Object.defineProperty(_CommandingSurface.prototype, "closedDisplayMode", { /// Gets or sets the closedDisplayMode for the CommandingSurface. Values are "none", "minimal", "compact", and "full". get: function () { return this._closedDisplayMode; }, set: function (value) { this._writeProfilerMark("set_closedDisplayMode,info"); var isChangingState = (value !== this._closedDisplayMode); if (ClosedDisplayMode[value] && isChangingState) { this._closedDisplayMode = value; this._machine.updateDom(); } }, enumerable: true, configurable: true }); Object.defineProperty(_CommandingSurface.prototype, "overflowDirection", { /// Gets or sets which direction the commandingSurface overflows when opened. Values are "top" and "bottom" for. get: function () { return this._overflowDirection; }, set: function (value) { var isChangingState = (value !== this._overflowDirection); if (OverflowDirection[value] && isChangingState) { this._overflowDirection = value; this._machine.updateDom(); } }, enumerable: true, configurable: true }); Object.defineProperty(_CommandingSurface.prototype, "opened", { /// Gets or sets whether the _CommandingSurface is currently opened. get: function () { return this._machine.opened; }, set: function (value) { this._machine.opened = value; }, enumerable: true, configurable: true }); _CommandingSurface.prototype.open = function () { /// Opens the _CommandingSurface's actionarea and overflowarea this._machine.open(); }; _CommandingSurface.prototype.close = function () { /// Closes the _CommandingSurface's actionarea and overflowarea this._machine.close(); }; _CommandingSurface.prototype.dispose = function () { /// Disposes this CommandingSurface. if (this._disposed) { return; } this._disposed = true; this._machine.dispose(); _ElementUtilities._resizeNotifier.unsubscribe(this._dom.root, this._resizeHandlerBound); if (this._contentFlyout) { this._contentFlyout.dispose(); this._contentFlyout.element.parentNode.removeChild(this._contentFlyout.element); } _Dispose.disposeSubTree(this._dom.root); }; _CommandingSurface.prototype.forceLayout = function () { /// Forces the CommandingSurface to update its layout. Use this function when the window did not change /// size, but the container of the CommandingSurface changed size. this._meaurementsDirty(); this._machine.updateDom(); }; _CommandingSurface.prototype.getBoundingRects = function () { return { commandingSurface: this._dom.root.getBoundingClientRect(), overflowArea: this._dom.overflowArea.getBoundingClientRect(), }; }; _CommandingSurface.prototype.getCommandById = function (id) { if (this._data) { for (var i = 0, len = this._data.length; i < len; i++) { var command = this._data.getAt(i); if (command.id === id) { return command; } } } return null; }; _CommandingSurface.prototype.showOnlyCommands = function (commands) { if (this._data) { for (var i = 0, len = this._data.length; i < len; i++) { this._data.getAt(i).hidden = true; } for (var i = 0, len = commands.length; i < len; i++) { // The array passed to showOnlyCommands can contain either command ids, or the commands themselves. var command = (typeof commands[i] === "string" ? this.getCommandById(commands[i]) : commands[i]); if (command) { command.hidden = false; } } } }; _CommandingSurface.prototype.deferredDomUpate = function () { // Notify the machine that an update has been requested. this._machine.updateDom(); }; _CommandingSurface.prototype.createOpenAnimation = function (closedHeight) { // createOpenAnimation should only be called when the commanding surface is in a closed state. The control using the commanding surface is expected // to call createOpenAnimation() before it opens the surface, then open the commanding surface, then call .execute() to start the animation. // This function is overridden by our unit tests. if (_Log.log) { this._updateDomImpl_renderedState.isOpenedMode && _Log.log("The CommandingSurface should only attempt to create an open animation when it's not already opened"); } var that = this; return { execute: function () { var boundingRects = that.getBoundingRects(); // The overflowAreaContainer has no size by default. Measure the overflowArea's size and apply it to the overflowAreaContainer before animating that._dom.overflowAreaContainer.style.width = boundingRects.overflowArea.width + "px"; that._dom.overflowAreaContainer.style.height = boundingRects.overflowArea.height + "px"; return Animations._commandingSurfaceOpenAnimation({ actionAreaClipper: that._dom.actionAreaContainer, actionArea: that._dom.actionArea, overflowAreaClipper: that._dom.overflowAreaContainer, overflowArea: that._dom.overflowArea, oldHeight: closedHeight, newHeight: boundingRects.commandingSurface.height, overflowAreaHeight: boundingRects.overflowArea.height, menuPositionedAbove: (that.overflowDirection === OverflowDirection.top), }).then(function () { that._clearAnimation(); }); } }; }; _CommandingSurface.prototype.createCloseAnimation = function (closedHeight) { // createCloseAnimation should only be called when the commanding surface is in an opened state. The control using the commanding surface is expected // to call createCloseAnimation() before it closes the surface, then call execute() to let the animation run. Once the animation finishes, the control // should close the commanding surface. // This function is overridden by our unit tests. if (_Log.log) { !this._updateDomImpl_renderedState.isOpenedMode && _Log.log("The CommandingSurface should only attempt to create an closed animation when it's not already closed"); } var openedHeight = this.getBoundingRects().commandingSurface.height, overflowAreaOpenedHeight = this._dom.overflowArea.offsetHeight, oldOverflowTop = this._dom.overflowArea.offsetTop, that = this; return { execute: function () { _ElementUtilities.addClass(that.element, _Constants.ClassNames.closingClass); return Animations._commandingSurfaceCloseAnimation({ actionAreaClipper: that._dom.actionAreaContainer, actionArea: that._dom.actionArea, overflowAreaClipper: that._dom.overflowAreaContainer, overflowArea: that._dom.overflowArea, oldHeight: openedHeight, newHeight: closedHeight, overflowAreaHeight: overflowAreaOpenedHeight, menuPositionedAbove: (that.overflowDirection === OverflowDirection.top), }).then(function () { _ElementUtilities.removeClass(that.element, _Constants.ClassNames.closingClass); that._clearAnimation(); }); } }; }; Object.defineProperty(_CommandingSurface.prototype, "initialized", { get: function () { return this._initializedSignal.promise; }, enumerable: true, configurable: true }); _CommandingSurface.prototype._writeProfilerMark = function (text) { _WriteProfilerMark("WinJS.UI._CommandingSurface:" + this._id + ":" + text); }; _CommandingSurface.prototype._initializeDom = function (root) { var _this = this; this._writeProfilerMark("_intializeDom,info"); // Attaching JS control to DOM element root["winControl"] = this; this._id = root.id || _ElementUtilities._uniqueID(root); if (!root.hasAttribute("tabIndex")) { root.tabIndex = -1; } _ElementUtilities.addClass(root, _Constants.ClassNames.controlCssClass); _ElementUtilities.addClass(root, _Constants.ClassNames.disposableCssClass); var actionArea = _Global.document.createElement("div"); _ElementUtilities.addClass(actionArea, _Constants.ClassNames.actionAreaCssClass); _ElementUtilities._reparentChildren(root, actionArea); var actionAreaContainer = _Global.document.createElement("div"); _ElementUtilities.addClass(actionAreaContainer, _Constants.ClassNames.actionAreaContainerCssClass); actionAreaContainer.appendChild(actionArea); root.appendChild(actionAreaContainer); var spacer = _Global.document.createElement("div"); _ElementUtilities.addClass(spacer, _Constants.ClassNames.spacerCssClass); actionArea.appendChild(spacer); var overflowButton = _Global.document.createElement("button"); overflowButton.tabIndex = 0; overflowButton.innerHTML = ""; _ElementUtilities.addClass(overflowButton, _Constants.ClassNames.overflowButtonCssClass); actionArea.appendChild(overflowButton); overflowButton.addEventListener("click", function () { _this.opened = !_this.opened; }); var overflowArea = _Global.document.createElement("div"); _ElementUtilities.addClass(overflowArea, _Constants.ClassNames.overflowAreaCssClass); _ElementUtilities.addClass(overflowArea, _Constants.ClassNames.menuCssClass); var overflowAreaContainer = _Global.document.createElement("div"); _ElementUtilities.addClass(overflowAreaContainer, _Constants.ClassNames.overflowAreaContainerCssClass); overflowAreaContainer.appendChild(overflowArea); root.appendChild(overflowAreaContainer); this._dom = { root: root, actionArea: actionArea, actionAreaContainer: actionAreaContainer, spacer: spacer, overflowButton: overflowButton, overflowArea: overflowArea, overflowAreaContainer: overflowAreaContainer }; }; _CommandingSurface.prototype._getFocusableElementsInfo = function () { var _this = this; var focusableCommandsInfo = { elements: [], focusedIndex: -1 }; var elementsInReach = Array.prototype.slice.call(this._dom.actionArea.children); var elementsInReach = Array.prototype.slice.call(this._dom.actionArea.children); if (this._dom.overflowArea.style.display !== "none") { elementsInReach = elementsInReach.concat(Array.prototype.slice.call(this._dom.overflowArea.children)); } elementsInReach.forEach(function (element) { if (_this._isElementFocusable(element)) { focusableCommandsInfo.elements.push(element); if (element.contains(_Global.document.activeElement)) { focusableCommandsInfo.focusedIndex = focusableCommandsInfo.elements.length - 1; } } }); return focusableCommandsInfo; }; _CommandingSurface.prototype._dataUpdated = function () { var _this = this; this._primaryCommands = []; this._secondaryCommands = []; if (this.data.length > 0) { this.data.forEach(function (command) { if (command.section === "secondary") { _this._secondaryCommands.push(command); } else { _this._primaryCommands.push(command); } }); } this._dataDirty(); this._machine.updateDom(); }; _CommandingSurface.prototype._refresh = function () { var _this = this; if (!this._refreshPending) { this._refreshPending = true; // Batch calls to _dataUpdated Scheduler.schedule(function () { if (_this._refreshPending && !_this._disposed) { _this._refreshPending = false; _this._dataUpdated(); } }, Scheduler.Priority.high, null, "WinJS.UI._CommandingSurface._refresh"); } }; _CommandingSurface.prototype._addDataListeners = function () { var _this = this; this._dataChangedEvents.forEach(function (eventName) { _this._data.addEventListener(eventName, _this._refreshBound, false); }); }; _CommandingSurface.prototype._removeDataListeners = function () { var _this = this; this._dataChangedEvents.forEach(function (eventName) { _this._data.removeEventListener(eventName, _this._refreshBound, false); }); }; _CommandingSurface.prototype._isElementFocusable = function (element) { var focusable = false; if (element) { var command = element["winControl"]; if (command) { focusable = command.element.style.display !== "none" && command.type !== _Constants.typeSeparator && !command.hidden && !command.disabled && (!command.firstElementFocus || command.firstElementFocus.tabIndex >= 0 || command.lastElementFocus.tabIndex >= 0); } else { // e.g. the overflow button focusable = element.style.display !== "none" && getComputedStyle(element).visibility !== "hidden" && element.tabIndex >= 0; } } return focusable; }; _CommandingSurface.prototype._isCommandInActionArea = function (element) { // Returns true if the element is a command in the actionarea, false otherwise return element && element["winControl"] && element.parentElement === this._dom.actionArea; }; _CommandingSurface.prototype._getLastElementFocus = function (element) { if (this._isCommandInActionArea(element)) { // Only commands in the actionarea support lastElementFocus return element["winControl"].lastElementFocus; } else { return element; } }; _CommandingSurface.prototype._getFirstElementFocus = function (element) { if (this._isCommandInActionArea(element)) { // Only commands in the actionarea support firstElementFocus return element["winControl"].firstElementFocus; } else { return element; } }; _CommandingSurface.prototype._keyDownHandler = function (ev) { if (!ev.altKey) { if (_ElementUtilities._matchesSelector(ev.target, ".win-interactive, .win-interactive *")) { return; } var Key = _ElementUtilities.Key; var focusableElementsInfo = this._getFocusableElementsInfo(); var targetCommand; if (focusableElementsInfo.elements.length) { switch (ev.keyCode) { case (this._rtl ? Key.rightArrow : Key.leftArrow): case Key.upArrow: var index = Math.max(0, focusableElementsInfo.focusedIndex - 1); targetCommand = this._getLastElementFocus(focusableElementsInfo.elements[index % focusableElementsInfo.elements.length]); break; case (this._rtl ? Key.leftArrow : Key.rightArrow): case Key.downArrow: var index = Math.min(focusableElementsInfo.focusedIndex + 1, focusableElementsInfo.elements.length - 1); targetCommand = this._getFirstElementFocus(focusableElementsInfo.elements[index]); break; case Key.home: var index = 0; targetCommand = this._getFirstElementFocus(focusableElementsInfo.elements[index]); break; case Key.end: var index = focusableElementsInfo.elements.length - 1; targetCommand = this._getLastElementFocus(focusableElementsInfo.elements[index]); break; } } if (targetCommand && targetCommand !== _Global.document.activeElement) { targetCommand.focus(); ev.preventDefault(); } } }; _CommandingSurface.prototype._getDataFromDOMElements = function () { this._writeProfilerMark("_getDataFromDOMElements,info"); ControlProcessor.processAll(this._dom.actionArea, true); var commands = []; var childrenLength = this._dom.actionArea.children.length; var child; for (var i = 0; i < childrenLength; i++) { child = this._dom.actionArea.children[i]; if (child["winControl"] && child["winControl"] instanceof _Command.AppBarCommand) { commands.push(child["winControl"]); } else if (child !== this._dom.overflowButton && child !== this._dom.spacer) { throw new _ErrorFromName("WinJS.UI._CommandingSurface.MustContainCommands", strings.mustContainCommands); } } return new BindingList.List(commands); }; _CommandingSurface.prototype._resizeHandler = function () { if (this._dom.root.offsetWidth) { var currentActionAreaWidth = _ElementUtilities._getPreciseContentWidth(this._dom.actionArea); if (this._cachedMeasurements && this._cachedMeasurements.actionAreaContentBoxWidth !== currentActionAreaWidth) { this._cachedMeasurements.actionAreaContentBoxWidth = currentActionAreaWidth; this._layoutDirty(); this._machine.updateDom(); } } }; _CommandingSurface.prototype._dataDirty = function () { this._nextLayoutStage = Math.max(CommandLayoutPipeline.newDataStage, this._nextLayoutStage); }; _CommandingSurface.prototype._meaurementsDirty = function () { this._nextLayoutStage = Math.max(CommandLayoutPipeline.measuringStage, this._nextLayoutStage); }; _CommandingSurface.prototype._layoutDirty = function () { this._nextLayoutStage = Math.max(CommandLayoutPipeline.layoutStage, this._nextLayoutStage); }; _CommandingSurface.prototype.synchronousOpen = function () { this._overflowAlignmentOffset = 0; this._isOpenedMode = true; this.updateDomImpl(); this._overflowAlignmentOffset = this._computeAdjustedOverflowAreaOffset(); this.updateDomImpl(); }; _CommandingSurface.prototype._computeAdjustedOverflowAreaOffset = function () { // Returns any negative offset needed to prevent the shown overflowarea from clipping outside of the viewport. // This function should only be called when CommandingSurface has been rendered in the opened state with // an overflowAlignmentOffset of 0. if (_Log.log) { !this._updateDomImpl_renderedState.isOpenedMode && _Log.log("The CommandingSurface should only attempt to compute adjusted overflowArea offset " + " when it has been rendered opened"); this._updateDomImpl_renderedState.overflowAlignmentOffset !== 0 && _Log.log("The CommandingSurface should only attempt to compute adjusted overflowArea offset " + " when it has been rendered with an overflowAlignementOffset of 0"); } var overflowArea = this._dom.overflowArea, boundingClientRects = this.getBoundingRects(), adjustedOffset = 0; if (this._rtl) { // In RTL the left edge of overflowarea prefers to align to the LEFT edge of the commandingSurface. // Make sure we avoid clipping through the RIGHT edge of the viewport var viewportRight = window.innerWidth, rightOffsetFromViewport = boundingClientRects.overflowArea.right; adjustedOffset = Math.min(viewportRight - rightOffsetFromViewport, 0); } else { // In LTR the right edge of overflowarea prefers to align to the RIGHT edge of the commandingSurface. // Make sure we avoid clipping through the LEFT edge of the viewport. var leftOffsetFromViewport = boundingClientRects.overflowArea.left; adjustedOffset = Math.min(0, leftOffsetFromViewport); } return adjustedOffset; }; _CommandingSurface.prototype.synchronousClose = function () { this._isOpenedMode = false; this.updateDomImpl(); }; _CommandingSurface.prototype.updateDomImpl = function () { this._updateDomImpl_renderDisplayMode(); this._updateDomImpl_updateCommands(); }; _CommandingSurface.prototype._updateDomImpl_renderDisplayMode = function () { var rendered = this._updateDomImpl_renderedState; if (rendered.isOpenedMode !== this._isOpenedMode) { if (this._isOpenedMode) { // Render opened removeClass(this._dom.root, _Constants.ClassNames.closedClass); addClass(this._dom.root, _Constants.ClassNames.openedClass); } else { // Render closed removeClass(this._dom.root, _Constants.ClassNames.openedClass); addClass(this._dom.root, _Constants.ClassNames.closedClass); } rendered.isOpenedMode = this._isOpenedMode; } if (rendered.closedDisplayMode !== this.closedDisplayMode) { removeClass(this._dom.root, closedDisplayModeClassMap[rendered.closedDisplayMode]); addClass(this._dom.root, closedDisplayModeClassMap[this.closedDisplayMode]); rendered.closedDisplayMode = this.closedDisplayMode; } if (rendered.overflowDirection !== this.overflowDirection) { removeClass(this._dom.root, overflowDirectionClassMap[rendered.overflowDirection]); addClass(this._dom.root, overflowDirectionClassMap[this.overflowDirection]); rendered.overflowDirection = this.overflowDirection; } if (this._overflowAlignmentOffset !== rendered.overflowAlignmentOffset) { var offsetProperty = (this._rtl ? "left" : "right"); var offsetTextValue = this._overflowAlignmentOffset + "px"; this._dom.overflowAreaContainer.style[offsetProperty] = offsetTextValue; } }; _CommandingSurface.prototype._updateDomImpl_updateCommands = function () { this._writeProfilerMark("_updateDomImpl_updateCommands,info"); var nextStage = this._nextLayoutStage; while (nextStage !== CommandLayoutPipeline.idle) { var currentStage = nextStage; var okToProceed = false; switch (currentStage) { case CommandLayoutPipeline.newDataStage: nextStage = CommandLayoutPipeline.measuringStage; okToProceed = this._processNewData(); break; case CommandLayoutPipeline.measuringStage: nextStage = CommandLayoutPipeline.layoutStage; okToProceed = this._measure(); break; case CommandLayoutPipeline.layoutStage: nextStage = CommandLayoutPipeline.idle; okToProceed = this._layoutCommands(); break; } if (!okToProceed) { // If a stage fails, exit the loop and track that stage // to be restarted the next time _updateCommands is run. nextStage = currentStage; break; } } this._nextLayoutStage = nextStage; if (nextStage === CommandLayoutPipeline.idle) { // Callback for unit tests. this._layoutCompleteCallback && this._layoutCompleteCallback(); } }; _CommandingSurface.prototype._getDataChangeInfo = function () { var i = 0, len = 0; var added = []; var deleted = []; var affected = []; var currentShown = []; var currentElements = []; var newShown = []; var newHidden = []; var newElements = []; Array.prototype.forEach.call(this._dom.actionArea.querySelectorAll(_Constants.commandSelector), function (commandElement) { if (commandElement.style.display !== "none") { currentShown.push(commandElement); } currentElements.push(commandElement); }); this.data.forEach(function (command) { if (command.element.style.display !== "none") { newShown.push(command.element); } else { newHidden.push(command.element); } newElements.push(command.element); }); deleted = diffElements(currentShown, newShown); affected = diffElements(currentShown, deleted); // "added" must also include the elements from "newHidden" to ensure that we continue // to animate any command elements that have underflowed back into the actionarea // as a part of this data change. added = diffElements(newShown, currentShown).concat(newHidden); return { newElements: newElements, currentElements: currentElements, added: added, deleted: deleted, affected: affected, }; }; _CommandingSurface.prototype._processNewData = function () { var _this = this; this._writeProfilerMark("_processNewData,info"); var changeInfo = this._getDataChangeInfo(); // Take a snapshot of the current state var updateCommandAnimation = Animations._createUpdateListAnimation(changeInfo.added, changeInfo.deleted, changeInfo.affected); // Unbind property mutation event listener from deleted IObservableCommands changeInfo.deleted.forEach(function (deletedElement) { var command = (deletedElement['winControl']); if (command && command['_propertyMutations']) { command._propertyMutations.unbind(_this._refreshBound); } }); // Bind property mutation event listener to added IObservable commands. changeInfo.added.forEach(function (deletedElement) { var command = (deletedElement['winControl']); if (command && command['_propertyMutations']) { command._propertyMutations.bind(_this._refreshBound); } }); // Remove current ICommand elements changeInfo.currentElements.forEach(function (element) { if (element.parentElement) { element.parentElement.removeChild(element); } }); // Add new ICommand elements in the right order. changeInfo.newElements.forEach(function (element) { _this._dom.actionArea.appendChild(element); }); // Ensure that the overflow button is always the last element in the actionarea this._dom.actionArea.appendChild(this._dom.overflowButton); if (this.data.length > 0) { _ElementUtilities.removeClass(this._dom.root, _Constants.ClassNames.emptyCommandingSurfaceCssClass); } else { _ElementUtilities.addClass(this._dom.root, _Constants.ClassNames.emptyCommandingSurfaceCssClass); } // Execute the animation. updateCommandAnimation.execute(); // Indicate processing was successful. return true; }; _CommandingSurface.prototype._measure = function () { var _this = this; this._writeProfilerMark("_measure,info"); var canMeasure = (_Global.document.body.contains(this._dom.root) && this._dom.actionArea.offsetWidth > 0); if (canMeasure) { var overflowButtonWidth = _ElementUtilities._getPreciseTotalWidth(this._dom.overflowButton), actionAreaContentBoxWidth = _ElementUtilities._getPreciseContentWidth(this._dom.actionArea), separatorWidth = 0, standardCommandWidth = 0, contentCommandWidths = {}; this._primaryCommands.forEach(function (command) { // Ensure that the element we are measuring does not have display: none (e.g. it was just added, and it // will be animated in) var originalDisplayStyle = command.element.style.display; command.element.style.display = ""; if (command.type === _Constants.typeContent) { // Measure each 'content' command type that we find contentCommandWidths[_this._commandUniqueId(command)] = _ElementUtilities._getPreciseTotalWidth(command.element); } else if (command.type === _Constants.typeSeparator) { // Measure the first 'separator' command type we find. if (!separatorWidth) { separatorWidth = _ElementUtilities._getPreciseTotalWidth(command.element); } } else { // Button, toggle, 'flyout' command types have the same width. Measure the first one we find. if (!standardCommandWidth) { standardCommandWidth = _ElementUtilities._getPreciseTotalWidth(command.element); } } // Restore the original display style command.element.style.display = originalDisplayStyle; }); this._cachedMeasurements = { contentCommandWidths: contentCommandWidths, separatorWidth: separatorWidth, standardCommandWidth: standardCommandWidth, overflowButtonWidth: overflowButtonWidth, actionAreaContentBoxWidth: actionAreaContentBoxWidth, }; // Indicate measure was successful return true; } else { // Indicate measure was unsuccessful return false; } }; _CommandingSurface.prototype._layoutCommands = function () { var _this = this; this._writeProfilerMark("_layoutCommands,StartTM"); // // Filter commands that will not be visible in the actionarea // this._primaryCommands.forEach(function (command) { command.element.style.display = (command.hidden ? "none" : ""); }); var primaryCommandsLocation = this._getVisiblePrimaryCommandsLocation(); this._hideSeparatorsIfNeeded(primaryCommandsLocation.actionArea); // Primary commands that will be mirrored in the overflow area should be hidden so // that they are not visible in the actionarea. primaryCommandsLocation.overflowArea.forEach(function (command) { command.element.style.display = "none"; }); // The secondary commands in the actionarea should be hidden since they are always // mirrored as new elements in the overflow area. this._secondaryCommands.forEach(function (command) { command.element.style.display = "none"; }); var overflowCommands = primaryCommandsLocation.overflowArea; var showOverflowButton = (overflowCommands.length > 0 || this._secondaryCommands.length > 0); this._dom.overflowButton.style.display = showOverflowButton ? "" : "none"; // Set up a custom content flyout if there will be "content" typed commands in the overflowarea. var isCustomContent = function (command) { return command.type === _Constants.typeContent; }; var hasCustomContent = overflowCommands.some(isCustomContent) || this._secondaryCommands.some(isCustomContent); if (hasCustomContent && !this._contentFlyout) { this._contentFlyoutInterior = _Global.document.createElement("div"); _ElementUtilities.addClass(this._contentFlyoutInterior, _Constants.ClassNames.contentFlyoutCssClass); this._contentFlyout = new _Flyout.Flyout(); this._contentFlyout.element.appendChild(this._contentFlyoutInterior); _Global.document.body.appendChild(this._contentFlyout.element); this._contentFlyout.onbeforeshow = function () { _ElementUtilities.empty(_this._contentFlyoutInterior); _ElementUtilities._reparentChildren(_this._chosenCommand.element, _this._contentFlyoutInterior); }; this._contentFlyout.onafterhide = function () { _ElementUtilities._reparentChildren(_this._contentFlyoutInterior, _this._chosenCommand.element); }; } // // Project overflowing and secondary commands into the overflowArea as MenuCommands // // Clean up previous MenuCommand projections _ElementUtilities.empty(this._dom.overflowArea); this._menuCommandProjections.map(function (menuCommand) { if (_this._contentFlyout && menuCommand.flyout === _this._contentFlyout) { // Prevent our _contentFlyout from being disposed with the MenuCommand. menuCommand.flyout = null; } menuCommand.dispose(); }); var hasToggleCommands = false, menuCommandProjections = []; // Add primary commands that have overflowed. overflowCommands.forEach(function (command) { if (command.type === _Constants.typeToggle) { hasToggleCommands = true; } menuCommandProjections.push(_this._projectAsMenuCommand(command)); }); // Add separator between primary and secondary command if applicable var secondaryCommandsLength = this._secondaryCommands.length; if (overflowCommands.length > 0 && secondaryCommandsLength > 0) { var separator = new _CommandingSurfaceMenuCommand._MenuCommand(null, { type: _Constants.typeSeparator }); menuCommandProjections.push(separator); } // Add secondary commands this._secondaryCommands.forEach(function (command) { if (!command.hidden) { if (command.type === _Constants.typeToggle) { hasToggleCommands = true; } menuCommandProjections.push(_this._projectAsMenuCommand(command)); } }); this._hideSeparatorsIfNeeded(menuCommandProjections); menuCommandProjections.forEach(function (command) { _this._dom.overflowArea.appendChild(command.element); }); this._menuCommandProjections = menuCommandProjections; _ElementUtilities[hasToggleCommands ? "addClass" : "removeClass"](this._dom.overflowArea, _Constants.ClassNames.menuContainsToggleCommandClass); this._writeProfilerMark("_layoutCommands,StopTM"); // Indicate layout was successful. return true; }; _CommandingSurface.prototype._commandUniqueId = function (command) { return _ElementUtilities._uniqueID(command.element); }; _CommandingSurface.prototype._getVisiblePrimaryCommandsInfo = function () { var width = 0; var commands = []; var priority = 0; var currentAssignedPriority = 0; for (var i = this._primaryCommands.length - 1; i >= 0; i--) { var command = this._primaryCommands[i]; if (!command.hidden) { if (command.priority === undefined) { priority = currentAssignedPriority--; } else { priority = command.priority; } width = (command.element.style.display === "none" ? 0 : this._getCommandWidth(command)); commands.unshift({ command: command, width: width, priority: priority }); } } return commands; }; _CommandingSurface.prototype._getVisiblePrimaryCommandsLocation = function () { this._writeProfilerMark("_getVisiblePrimaryCommandsLocation,info"); var actionAreaCommands = []; var overflowAreaCommands = []; var overflowButtonSpace = 0; var hasSecondaryCommands = this._secondaryCommands.length > 0; var commandsInfo = this._getVisiblePrimaryCommandsInfo(); var sortedCommandsInfo = commandsInfo.slice(0).sort(function (commandInfo1, commandInfo2) { return commandInfo1.priority - commandInfo2.priority; }); var maxPriority = Number.MAX_VALUE; var availableWidth = this._cachedMeasurements.actionAreaContentBoxWidth; for (var i = 0, len = sortedCommandsInfo.length; i < len; i++) { availableWidth -= sortedCommandsInfo[i].width; // The overflow button needs space if there are secondary commands, or we are not evaluating the last command. overflowButtonSpace = (hasSecondaryCommands || (i < len - 1) ? this._cachedMeasurements.overflowButtonWidth : 0); if (availableWidth - overflowButtonSpace < 0) { maxPriority = sortedCommandsInfo[i].priority - 1; break; } } commandsInfo.forEach(function (commandInfo) { if (commandInfo.priority <= maxPriority) { actionAreaCommands.push(commandInfo.command); } else { overflowAreaCommands.push(commandInfo.command); } }); return { actionArea: actionAreaCommands, overflowArea: overflowAreaCommands }; }; _CommandingSurface.prototype._getCommandWidth = function (command) { if (command.type === _Constants.typeContent) { return this._cachedMeasurements.contentCommandWidths[this._commandUniqueId(command)]; } else if (command.type === _Constants.typeSeparator) { return this._cachedMeasurements.separatorWidth; } else { return this._cachedMeasurements.standardCommandWidth; } }; _CommandingSurface.prototype._projectAsMenuCommand = function (originalCommand) { var _this = this; var menuCommand = new _CommandingSurfaceMenuCommand._MenuCommand(null, { label: originalCommand.label, type: (originalCommand.type === _Constants.typeContent ? _Constants.typeFlyout : originalCommand.type) || _Constants.typeButton, disabled: originalCommand.disabled, flyout: originalCommand.flyout, beforeInvoke: function () { // Save the command that was selected _this._chosenCommand = (menuCommand["_originalICommand"]); // If this WinJS.UI.MenuCommand has type: toggle, we should also toggle the value of the original WinJS.UI.Command if (_this._chosenCommand.type === _Constants.typeToggle) { _this._chosenCommand.selected = !_this._chosenCommand.selected; } } }); if (originalCommand.selected) { menuCommand.selected = true; } if (originalCommand.extraClass) { menuCommand.extraClass = originalCommand.extraClass; } if (originalCommand.type === _Constants.typeContent) { if (!menuCommand.label) { menuCommand.label = _Constants.contentMenuCommandDefaultLabel; } menuCommand.flyout = this._contentFlyout; } else { menuCommand.onclick = originalCommand.onclick; } menuCommand["_originalICommand"] = originalCommand; return menuCommand; }; _CommandingSurface.prototype._hideSeparatorsIfNeeded = function (commands) { var prevType = _Constants.typeSeparator; var command; // Hide all leading or consecutive separators var commandsLength = commands.length; commands.forEach(function (command) { if (command.type === _Constants.typeSeparator && prevType === _Constants.typeSeparator) { command.element.style.display = "none"; } prevType = command.type; }); for (var i = commandsLength - 1; i >= 0; i--) { command = commands[i]; if (command.type === _Constants.typeSeparator) { command.element.style.display = "none"; } else { break; } } }; _CommandingSurface.prototype._clearAnimation = function () { var transformScriptName = _BaseUtils._browserStyleEquivalents["transform"].scriptName; this._dom.actionAreaContainer.style[transformScriptName] = ""; this._dom.actionArea.style[transformScriptName] = ""; this._dom.overflowAreaContainer.style[transformScriptName] = ""; this._dom.overflowArea.style[transformScriptName] = ""; }; /// Display options for the actionarea when the _CommandingSurface is closed. _CommandingSurface.ClosedDisplayMode = ClosedDisplayMode; /// Display options used by the _Commandingsurface to determine which direction it should expand when opening. _CommandingSurface.OverflowDirection = OverflowDirection; _CommandingSurface.supportedForProcessing = true; return _CommandingSurface; })(); exports._CommandingSurface = _CommandingSurface; _Base.Class.mix(_CommandingSurface, _Events.createEventProperties(_Constants.EventNames.beforeOpen, _Constants.EventNames.afterOpen, _Constants.EventNames.beforeClose, _Constants.EventNames.afterClose)); // addEventListener, removeEventListener, dispatchEvent _Base.Class.mix(_CommandingSurface, _Control.DOMEventMixin); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// define('WinJS/Controls/CommandingSurface',["require", "exports"], function (require, exports) { var module = null; function getModule() { if (!module) { require(["./CommandingSurface/_CommandingSurface"], function (m) { module = m; }); } return module._CommandingSurface; } var publicMembers = Object.create({}, { _CommandingSurface: { get: function () { return getModule(); } } }); return publicMembers; }); define('require-style!less/styles-toolbar',[],function(){}); define('WinJS/Controls/ToolBar/_ToolBar',["require", "exports", "../../Core/_Base", "../ToolBar/_Constants", "../CommandingSurface", "../../Utilities/_Control", "../../Utilities/_Dispose", "../../Utilities/_ElementUtilities", "../../Core/_ErrorFromName", '../../Core/_Events', "../../Core/_Global", '../../_LightDismissService', "../../Core/_Resources", '../../Utilities/_OpenCloseMachine', "../../Core/_WriteProfilerMark"], function (require, exports, _Base, _Constants, _CommandingSurface, _Control, _Dispose, _ElementUtilities, _ErrorFromName, _Events, _Global, _LightDismissService, _Resources, _OpenCloseMachine, _WriteProfilerMark) { require(["require-style!less/styles-toolbar"]); "use strict"; var strings = { get ariaLabel() { return _Resources._getWinJSString("ui/toolbarAriaLabel").value; }, get overflowButtonAriaLabel() { return _Resources._getWinJSString("ui/toolbarOverflowButtonAriaLabel").value; }, get mustContainCommands() { return "The toolbar can only contain WinJS.UI.Command or WinJS.UI.AppBarCommand controls"; }, get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; } }; var ClosedDisplayMode = { /// /// When the ToolBar is closed, the height of the ToolBar is reduced such that button commands are still visible, but their labels are hidden. /// compact: "compact", /// /// When the ToolBar is closed, the height of the ToolBar is always sized to content. /// full: "full", }; var closedDisplayModeClassMap = {}; closedDisplayModeClassMap[ClosedDisplayMode.compact] = _Constants.ClassNames.compactClass; closedDisplayModeClassMap[ClosedDisplayMode.full] = _Constants.ClassNames.fullClass; // Versions of add/removeClass that are no ops when called with falsy class names. function addClass(element, className) { className && _ElementUtilities.addClass(element, className); } function removeClass(element, className) { className && _ElementUtilities.removeClass(element, className); } /// /// /// Displays ICommands within the flow of the app. Use the ToolBar around other statically positioned app content. /// /// /// /// /// /// /// ]]> /// The entire ToolBar control. /// The toolbar overflow button. /// The container for toolbar commands that overflow. /// /// var ToolBar = (function () { function ToolBar(element, options) { /// /// /// Creates a new ToolBar control. /// /// /// The DOM element that will host the control. /// /// /// The set of properties and values to apply to the new ToolBar control. /// /// /// The new ToolBar control. /// /// var _this = this; if (options === void 0) { options = {}; } // State private to the _updateDomImpl family of method. No other methods should make use of it. // // Nothing has been rendered yet so these are all initialized to undefined. Because // they are undefined, the first time _updateDomImpl is called, they will all be // rendered. this._updateDomImpl_renderedState = { isOpenedMode: undefined, closedDisplayMode: undefined, prevInlineWidth: undefined, }; this._writeProfilerMark("constructor,StartTM"); // Check to make sure we weren't duplicated if (element && element["winControl"]) { throw new _ErrorFromName("WinJS.UI.ToolBar.DuplicateConstruction", strings.duplicateConstruction); } this._initializeDom(element || _Global.document.createElement("div")); var stateMachine = new _OpenCloseMachine.OpenCloseMachine({ eventElement: this.element, onOpen: function () { var openAnimation = _this._commandingSurface.createOpenAnimation(_this._getClosedHeight()); _this._synchronousOpen(); return openAnimation.execute(); }, onClose: function () { var closeAnimation = _this._commandingSurface.createCloseAnimation(_this._getClosedHeight()); return closeAnimation.execute().then(function () { _this._synchronousClose(); }); }, onUpdateDom: function () { _this._updateDomImpl(); }, onUpdateDomWithIsOpened: function (isOpened) { _this._isOpenedMode = isOpened; _this._updateDomImpl(); } }); // Events this._handleShowingKeyboardBound = this._handleShowingKeyboard.bind(this); _ElementUtilities._inputPaneListener.addEventListener(this._dom.root, "showing", this._handleShowingKeyboardBound); // Initialize private state. this._disposed = false; this._cachedClosedHeight = null; this._commandingSurface = new _CommandingSurface._CommandingSurface(this._dom.commandingSurfaceEl, { openCloseMachine: stateMachine }); addClass(this._dom.commandingSurfaceEl.querySelector(".win-commandingsurface-actionarea"), _Constants.ClassNames.actionAreaCssClass); addClass(this._dom.commandingSurfaceEl.querySelector(".win-commandingsurface-overflowarea"), _Constants.ClassNames.overflowAreaCssClass); addClass(this._dom.commandingSurfaceEl.querySelector(".win-commandingsurface-overflowbutton"), _Constants.ClassNames.overflowButtonCssClass); addClass(this._dom.commandingSurfaceEl.querySelector(".win-commandingsurface-ellipsis"), _Constants.ClassNames.ellipsisCssClass); this._isOpenedMode = _Constants.defaultOpened; this._dismissable = new _LightDismissService.LightDismissableElement({ element: this._dom.root, tabIndex: this._dom.root.hasAttribute("tabIndex") ? this._dom.root.tabIndex : -1, onLightDismiss: function () { _this.close(); } }); // Initialize public properties. this.closedDisplayMode = _Constants.defaultClosedDisplayMode; this.opened = this._isOpenedMode; _Control.setOptions(this, options); // Exit the Init state. _ElementUtilities._inDom(this.element).then(function () { return _this._commandingSurface.initialized; }).then(function () { stateMachine.exitInit(); _this._writeProfilerMark("constructor,StopTM"); }); } Object.defineProperty(ToolBar.prototype, "element", { /// get: function () { return this._dom.root; }, enumerable: true, configurable: true }); Object.defineProperty(ToolBar.prototype, "data", { /// /// Gets or sets the Binding List of WinJS.UI.Command for the ToolBar. /// get: function () { return this._commandingSurface.data; }, set: function (value) { this._commandingSurface.data = value; }, enumerable: true, configurable: true }); Object.defineProperty(ToolBar.prototype, "closedDisplayMode", { /// /// Gets or sets the closedDisplayMode for the ToolBar. Values are "compact" and "full". /// get: function () { return this._commandingSurface.closedDisplayMode; }, set: function (value) { if (ClosedDisplayMode[value]) { this._commandingSurface.closedDisplayMode = value; this._cachedClosedHeight = null; } }, enumerable: true, configurable: true }); Object.defineProperty(ToolBar.prototype, "opened", { /// get: function () { return this._commandingSurface.opened; }, set: function (value) { this._commandingSurface.opened = value; }, enumerable: true, configurable: true }); ToolBar.prototype.open = function () { /// /// /// Opens the ToolBar /// /// this._commandingSurface.open(); }; ToolBar.prototype.close = function () { /// /// /// Closes the ToolBar /// /// this._commandingSurface.close(); }; ToolBar.prototype.dispose = function () { /// /// /// Disposes this ToolBar. /// /// if (this._disposed) { return; } this._disposed = true; _LightDismissService.hidden(this._dismissable); // Disposing the _commandingSurface will trigger dispose on its OpenCloseMachine and synchronously complete any animations that might have been running. this._commandingSurface.dispose(); // If page navigation is happening, we don't want the ToolBar left behind in the body. // Synchronoulsy close the ToolBar to force it out of the body and back into its parent element. this._synchronousClose(); _ElementUtilities._inputPaneListener.removeEventListener(this._dom.root, "showing", this._handleShowingKeyboardBound); _Dispose.disposeSubTree(this.element); }; ToolBar.prototype.forceLayout = function () { /// /// /// Forces the ToolBar to update its layout. Use this function when the window did not change size, but the container of the ToolBar changed size. /// /// this._commandingSurface.forceLayout(); }; ToolBar.prototype.getCommandById = function (id) { /// /// /// Retrieves the command with the specified ID from this ToolBar. /// If more than one command is found, this method returns the first command found. /// /// Id of the command to return. /// /// The command found, or null if no command is found. /// /// return this._commandingSurface.getCommandById(id); }; ToolBar.prototype.showOnlyCommands = function (commands) { /// /// /// Show the specified commands, hiding all of the others in the ToolBar. /// /// /// An array of the commands to show. The array elements may be Command objects, or the string identifiers (IDs) of commands. /// /// return this._commandingSurface.showOnlyCommands(commands); }; ToolBar.prototype._writeProfilerMark = function (text) { _WriteProfilerMark("WinJS.UI.ToolBar:" + this._id + ":" + text); }; ToolBar.prototype._initializeDom = function (root) { this._writeProfilerMark("_intializeDom,info"); // Attaching JS control to DOM element root["winControl"] = this; this._id = root.id || _ElementUtilities._uniqueID(root); _ElementUtilities.addClass(root, _Constants.ClassNames.controlCssClass); _ElementUtilities.addClass(root, _Constants.ClassNames.disposableCssClass); // Make sure we have an ARIA role var role = root.getAttribute("role"); if (!role) { root.setAttribute("role", "menubar"); } var label = root.getAttribute("aria-label"); if (!label) { root.setAttribute("aria-label", strings.ariaLabel); } // Create element for commandingSurface and reparent any declarative Commands. // The CommandingSurface constructor will parse child elements as AppBarCommands. var commandingSurfaceEl = document.createElement("DIV"); _ElementUtilities._reparentChildren(root, commandingSurfaceEl); root.appendChild(commandingSurfaceEl); // While the ToolBar is open, it will place itself in the so it can become a light dismissible // overlay. It leaves the placeHolder element behind as stand in at the ToolBar's original DOM location // to avoid reflowing surrounding app content and create the illusion that the ToolBar hasn't moved along // the x or y planes. var placeHolder = _Global.document.createElement("DIV"); _ElementUtilities.addClass(placeHolder, _Constants.ClassNames.placeHolderCssClass); // If the ToolBar's original HTML parent node is disposed while the ToolBar is open and repositioned as // a temporary child of the , make sure that calling dispose on the placeHolder element will trigger // dispose on the ToolBar as well. _Dispose.markDisposable(placeHolder, this.dispose.bind(this)); this._dom = { root: root, commandingSurfaceEl: commandingSurfaceEl, placeHolder: placeHolder, }; }; ToolBar.prototype._handleShowingKeyboard = function (event) { // Because the ToolBar takes up layout space and is not an overlay, it doesn't have the same expectation // to move itself to get out of the way of a showing IHM. Instsead we just close the ToolBar to avoid // scenarios where the ToolBar is occluded, but the click-eating-div is still present since it may seem // strange to end users that an occluded ToolBar (out of sight, out of mind) is still eating their first // click. // Mitigation: // Because (1) custom content in a ToolBar can only be included as a 'content' type command, because (2) // the ToolBar only supports closedDisplayModes 'compact' and 'full', and because (3) 'content' type // commands in the overflowarea use a separate contentflyout to display their contents: // Interactable custom content contained within the ToolBar actionarea or overflowarea, will remain // visible and interactable even when showing the IHM closes the ToolBar. this.close(); }; ToolBar.prototype._synchronousOpen = function () { this._isOpenedMode = true; this._updateDomImpl(); }; ToolBar.prototype._synchronousClose = function () { this._isOpenedMode = false; this._updateDomImpl(); }; ToolBar.prototype._updateDomImpl = function () { var rendered = this._updateDomImpl_renderedState; if (rendered.isOpenedMode !== this._isOpenedMode) { if (this._isOpenedMode) { this._updateDomImpl_renderOpened(); } else { this._updateDomImpl_renderClosed(); } rendered.isOpenedMode = this._isOpenedMode; } if (rendered.closedDisplayMode !== this.closedDisplayMode) { removeClass(this._dom.root, closedDisplayModeClassMap[rendered.closedDisplayMode]); addClass(this._dom.root, closedDisplayModeClassMap[this.closedDisplayMode]); rendered.closedDisplayMode = this.closedDisplayMode; } this._commandingSurface.updateDomImpl(); }; ToolBar.prototype._getClosedHeight = function () { if (this._cachedClosedHeight === null) { var wasOpen = this._isOpenedMode; if (this._isOpenedMode) { this._synchronousClose(); } this._cachedClosedHeight = this._commandingSurface.getBoundingRects().commandingSurface.height; if (wasOpen) { this._synchronousOpen(); } } return this._cachedClosedHeight; }; ToolBar.prototype._updateDomImpl_renderOpened = function () { var _this = this; // Measure closed state. this._updateDomImpl_renderedState.prevInlineWidth = this._dom.root.style.width; var closedBorderBox = this._dom.root.getBoundingClientRect(); var closedContentWidth = _ElementUtilities._getPreciseContentWidth(this._dom.root); var closedContentHeight = _ElementUtilities._getPreciseContentHeight(this._dom.root); var closedStyle = getComputedStyle(this._dom.root); var closedPaddingTop = _ElementUtilities._convertToPrecisePixels(closedStyle.paddingTop); var closedBorderTop = _ElementUtilities._convertToPrecisePixels(closedStyle.borderTopWidth); var closedMargins = _ElementUtilities._getPreciseMargins(this._dom.root); var closedContentBoxTop = closedBorderBox.top + closedBorderTop + closedPaddingTop; var closedContentBoxBottom = closedContentBoxTop + closedContentHeight; // Size our placeHolder. Set height and width to match borderbox of the closed ToolBar. // Copy ToolBar margins to the placeholder. var placeHolder = this._dom.placeHolder; var placeHolderStyle = placeHolder.style; placeHolderStyle.width = closedBorderBox.width + "px"; placeHolderStyle.height = closedBorderBox.height + "px"; placeHolderStyle.marginTop = closedMargins.top + "px"; placeHolderStyle.marginRight = closedMargins.right + "px"; placeHolderStyle.marginBottom = closedMargins.bottom + "px"; placeHolderStyle.marginLeft = closedMargins.left + "px"; _ElementUtilities._maintainFocus(function () { // Move ToolBar element to the body in preparation of becoming a light dismissible. Leave an equal sized placeHolder element // at our original DOM location to avoid reflowing surrounding app content. _this._dom.root.parentElement.insertBefore(placeHolder, _this._dom.root); _Global.document.body.appendChild(_this._dom.root); // Position the ToolBar to completely cover the same region as the placeholder element. _this._dom.root.style.width = closedContentWidth + "px"; _this._dom.root.style.left = closedBorderBox.left - closedMargins.left + "px"; // Determine which direction to expand the CommandingSurface elements when opened. The overflow area will be rendered at the corresponding edge of // the ToolBar's content box, so we choose the direction that offers the most space between that edge and the corresponding edge of the viewport. // This is to reduce the chance that the overflow area might clip through the edge of the viewport. var topOfViewport = 0; var bottomOfViewport = _Global.innerHeight; var distanceFromTop = closedContentBoxTop - topOfViewport; var distanceFromBottom = bottomOfViewport - closedContentBoxBottom; if (distanceFromTop > distanceFromBottom) { // CommandingSurface is going to expand updwards. _this._commandingSurface.overflowDirection = _Constants.OverflowDirection.top; // Position the bottom edge of the ToolBar marginbox over the bottom edge of the placeholder marginbox. _this._dom.root.style.bottom = (bottomOfViewport - closedBorderBox.bottom) - closedMargins.bottom + "px"; } else { // CommandingSurface is going to expand downwards. _this._commandingSurface.overflowDirection = _Constants.OverflowDirection.bottom; // Position the top edge of the ToolBar marginbox over the top edge of the placeholder marginbox. _this._dom.root.style.top = (topOfViewport + closedBorderBox.top) - closedMargins.top + "px"; } // Render opened state _ElementUtilities.addClass(_this._dom.root, _Constants.ClassNames.openedClass); _ElementUtilities.removeClass(_this._dom.root, _Constants.ClassNames.closedClass); }); this._commandingSurface.synchronousOpen(); _LightDismissService.shown(this._dismissable); // Call at the start of the open animation }; ToolBar.prototype._updateDomImpl_renderClosed = function () { var _this = this; _ElementUtilities._maintainFocus(function () { if (_this._dom.placeHolder.parentElement) { // Restore our placement in the DOM var placeHolder = _this._dom.placeHolder; placeHolder.parentElement.insertBefore(_this._dom.root, placeHolder); placeHolder.parentElement.removeChild(placeHolder); } // Render Closed _this._dom.root.style.top = ""; _this._dom.root.style.right = ""; _this._dom.root.style.bottom = ""; _this._dom.root.style.left = ""; _this._dom.root.style.width = _this._updateDomImpl_renderedState.prevInlineWidth; _ElementUtilities.addClass(_this._dom.root, _Constants.ClassNames.closedClass); _ElementUtilities.removeClass(_this._dom.root, _Constants.ClassNames.openedClass); }); this._commandingSurface.synchronousClose(); _LightDismissService.hidden(this._dismissable); // Call after the close animation }; /// /// Display options for the actionarea when the ToolBar is closed. /// ToolBar.ClosedDisplayMode = ClosedDisplayMode; ToolBar.supportedForProcessing = true; return ToolBar; })(); exports.ToolBar = ToolBar; _Base.Class.mix(ToolBar, _Events.createEventProperties(_Constants.EventNames.beforeOpen, _Constants.EventNames.afterOpen, _Constants.EventNames.beforeClose, _Constants.EventNames.afterClose)); // addEventListener, removeEventListener, dispatchEvent _Base.Class.mix(ToolBar, _Control.DOMEventMixin); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// define('WinJS/Controls/ToolBar',["require", "exports", '../Core/_Base'], function (require, exports, _Base) { var module = null; _Base.Namespace.define("WinJS.UI", { ToolBar: { get: function () { if (!module) { require(["./ToolBar/_ToolBar"], function (m) { module = m; }); } return module.ToolBar; } } }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/_LegacyAppBar/_Layouts',[ 'exports', '../../Animations/_TransitionAnimation', '../../BindingList', '../../Core/_BaseUtils', '../../Core/_Global', '../../Core/_Base', '../../Core/_ErrorFromName', '../../Core/_Resources', '../../Core/_WriteProfilerMark', '../../Controls/ToolBar', '../../Controls/ToolBar/_Constants', '../../Promise', '../../Scheduler', '../../Utilities/_Control', '../../Utilities/_Dispose', '../../Utilities/_ElementUtilities', '../AppBar/_Command', './_Constants' ], function appBarLayoutsInit(exports, _TransitionAnimation, BindingList, _BaseUtils, _Global, _Base, _ErrorFromName, _Resources, _WriteProfilerMark, ToolBar, _ToolBarConstants, Promise, Scheduler, _Control, _Dispose, _ElementUtilities, _Command, _Constants) { "use strict"; // AppBar will use this when AppBar.layout property is set to "custom" _Base.Namespace._moduleDefine(exports, "WinJS.UI", { _AppBarBaseLayout: _Base.Namespace._lazy(function () { var baseType = _Constants.appBarLayoutCustom; var strings = { get nullCommand() { return "Invalid argument: command must not be null"; } }; var _AppBarBaseLayout = _Base.Class.define(function _AppBarBaseLayout_ctor(appBarEl, options) { this._disposed = false; options = options || {}; _Control.setOptions(this, options); if (appBarEl) { this.connect(appBarEl); } }, { // Members className: { get: function _AppBarBaseLayout_get_className() { return this._className; }, }, type: { get: function _AppBarBaseLayout_get_className() { return this._type || baseType; }, }, commandsInOrder: { get: function _AppBarBaseLayout_get_commandsInOrder() { // Get a DOM ordered collection of the AppBarCommand elements in the AppBar. var commandElements = this.appBarEl.querySelectorAll("." + _Constants.appBarCommandClass); // Return an array of AppBarCommand objects. return Array.prototype.map.call(commandElements, function (commandElement) { return commandElement.winControl; }); } }, connect: function _AppBarBaseLayout_connect(appBarEl) { if (this.className) { _ElementUtilities.addClass(appBarEl, this.className); } this.appBarEl = appBarEl; }, disconnect: function _AppBarBaseLayout_disconnect() { if (this.className) { _ElementUtilities.removeClass(this.appBarEl, this.className); } this.appBarEl = null; this.dispose(); }, layout: function _AppBarBaseLayout_layout(commands) { // Append commands to the DOM. var len = commands.length; for (var i = 0; i < len; i++) { var command = this.sanitizeCommand(commands[i]); this.appBarEl.appendChild(command._element); } }, showCommands: function _AppBarBaseLayout_showCommands(commands) { // Use the default overlay showCommands implementation this.appBarEl.winControl._showCommands(commands); }, showOnlyCommands: function _AppBarBaseLayout_showOnlyCommands(commands) { // Use the default overlay _showOnlyCommands implementation this.appBarEl.winControl._showOnlyCommands(commands); }, hideCommands: function _AppBarBaseLayout_hideCommands(commands) { // Use the default overlay _hideCommands implementation this.appBarEl.winControl._hideCommands(commands); }, sanitizeCommand: function _AppBarBaseLayout_sanitizeCommand(command) { if (!command) { throw new _ErrorFromName("WinJS.UI.AppBar.NullCommand", strings.nullCommand); } // See if it's a command already command = command.winControl || command; if (!command._element) { // Not a command, so assume it is options for the command's constructor. command = new _Command.AppBarCommand(null, command); } // If we were attached somewhere else, detach us if (command._element.parentElement) { command._element.parentElement.removeChild(command._element); } return command; }, dispose: function _AppBarBaseLayout_dispose() { this._disposed = true; }, disposeChildren: function _AppBarBaseLayout_disposeChildren() { var appBarFirstDiv = this.appBarEl.querySelectorAll("." + _Constants.firstDivClass); appBarFirstDiv = appBarFirstDiv.length >= 1 ? appBarFirstDiv[0] : null; var appBarFinalDiv = this.appBarEl.querySelectorAll("." + _Constants.finalDivClass); appBarFinalDiv = appBarFinalDiv.length >= 1 ? appBarFinalDiv[0] : null; var children = this.appBarEl.children; var length = children.length; for (var i = 0; i < length; i++) { var element = children[i]; if (element === appBarFirstDiv || element === appBarFinalDiv) { continue; } else { _Dispose.disposeSubTree(element); } } }, handleKeyDown: function _AppBarBaseLayout_handleKeyDown() { // NOP }, commandsUpdated: function _AppBarBaseLayout_commandsUpdated() { // NOP }, beginAnimateCommands: function _AppBarBaseLayout_beginAnimateCommands() { // The parameters are 3 mutually exclusive arrays of win-command elements contained in this Overlay. // 1) showCommands[]: All of the HIDDEN win-command elements that ARE scheduled to show. // 2) hideCommands[]: All of the VISIBLE win-command elements that ARE scheduled to hide. // 3) otherVisibleCommands[]: All VISIBLE win-command elements that ARE NOT scheduled to hide. // NOP }, endAnimateCommands: function _AppBarBaseLayout_endAnimateCommands() { // NOP }, scale: function _AppBarBaseLayout_scale() { // NOP }, resize: function _AppBarBaseLayout_resize() { // NOP }, positionChanging: function _AppBarBaseLayout_positionChanging(fromPosition, toPosition) { // NOP return Promise.wrap(); }, setFocusOnShow: function _AppBarBaseLayout_setFocusOnShow() { this.appBarEl.winControl._setFocusToAppBar(); } }); return _AppBarBaseLayout; }), }); // AppBar will use this when AppBar.layout property is set to "commands" _Base.Namespace._moduleDefine(exports, "WinJS.UI", { _AppBarCommandsLayout: _Base.Namespace._lazy(function () { var layoutClassName = _Constants.commandLayoutClass; var layoutType = _Constants.appBarLayoutCommands; var _AppBarCommandsLayout = _Base.Class.derive(exports._AppBarBaseLayout, function _AppBarCommandsLayout_ctor(appBarEl) { exports._AppBarBaseLayout.call(this, appBarEl, { _className: layoutClassName, _type: layoutType }); this._commandLayoutsInit(appBarEl); }, { commandsInOrder: { get: function _AppBarCommandsLayout_get_commandsInOrder() { return this._originalCommands.filter(function (command) { // Make sure the element is still in the AppBar. return this.appBarEl.contains(command.element); }, this); } }, layout: function _AppBarCommandsLayout_layout(commands) { // Insert commands and other layout specific DOM into the AppBar element. // Empty our tree. _ElementUtilities.empty(this._primaryCommands); _ElementUtilities.empty(this._secondaryCommands); // Keep track of the order we receive the commands in. this._originalCommands = []; // Layout commands for (var i = 0, len = commands.length; i < len; i++) { var command = this.sanitizeCommand(commands[i]); this._originalCommands.push(command); if ("primary" === command.section || "global" === command.section) { this._primaryCommands.appendChild(command._element); } else { this._secondaryCommands.appendChild(command._element); } } // Append layout containers to AppBar element. // Secondary Commands should come first in Tab Order. this.appBarEl.appendChild(this._secondaryCommands); this.appBarEl.appendChild(this._primaryCommands); // Need to measure all content commands after they have been added to the AppBar to make sure we allow // user defined CSS rules based on the ancestor of the content command to take affect. this._needToMeasureNewCommands = true; // In case this is called from the constructor before the AppBar element has been appended to the DOM, // we schedule the initial scaling of commands, with the expectation that the element will be added // synchronously, in the same block of code that called the constructor. Scheduler.schedule(function () { if (this._needToMeasureNewCommands && !this._disposed) { this.scale(); } }.bind(this), Scheduler.Priority.idle, this, "WinJS._commandLayoutsMixin._scaleNewCommands"); }, disposeChildren: function _AppBarCommandsLayout_disposeChildren() { _Dispose.disposeSubTree(this._primaryCommands); _Dispose.disposeSubTree(this._secondaryCommands); }, handleKeyDown: function _AppBarCommandsLayout_handleKeyDown(event) { var Key = _ElementUtilities.Key; if (_ElementUtilities._matchesSelector(event.target, ".win-interactive, .win-interactive *")) { return; // Ignore left, right, home & end keys if focused element has win-interactive class. } var rtl = _Global.getComputedStyle(this.appBarEl).direction === "rtl"; var leftKey = rtl ? Key.rightArrow : Key.leftArrow; var rightKey = rtl ? Key.leftArrow : Key.rightArrow; if (event.keyCode === leftKey || event.keyCode === rightKey || event.keyCode === Key.home || event.keyCode === Key.end) { var globalCommandHasFocus = this._primaryCommands.contains(_Global.document.activeElement); var focusableCommands = this._getFocusableCommandsInLogicalOrder(globalCommandHasFocus); var targetCommand; if (focusableCommands.length) { switch (event.keyCode) { case leftKey: // Arrowing past the last command wraps back around to the first command. var index = Math.max(-1, focusableCommands.focusedIndex - 1) + focusableCommands.length; targetCommand = focusableCommands[index % focusableCommands.length].winControl.lastElementFocus; break; case rightKey: // Arrowing previous to the first command wraps back around to the last command. var index = focusableCommands.focusedIndex + 1 + focusableCommands.length; targetCommand = focusableCommands[index % focusableCommands.length].winControl.firstElementFocus; break; case Key.home: var index = 0; targetCommand = focusableCommands[index].winControl.firstElementFocus; break; case Key.end: var index = focusableCommands.length - 1; targetCommand = focusableCommands[index].winControl.lastElementFocus; break; } } if (targetCommand && targetCommand !== _Global.document.activeElement) { targetCommand.focus(); // Prevent default so that the browser doesn't also evaluate the keydown event on the newly focused element. event.preventDefault(); } } }, commandsUpdated: function _AppBarCommandsLayout_commandsUpdated(newSetOfVisibleCommands) { // Whenever new commands are set or existing commands are hiding/showing in the AppBar, this // function is called to update the cached width measurement of all visible AppBarCommands. var visibleCommands = (newSetOfVisibleCommands) ? newSetOfVisibleCommands : this.commandsInOrder.filter(function (command) { return !command.hidden; }); this._fullSizeWidthOfLastKnownVisibleCommands = this._getWidthOfFullSizeCommands(visibleCommands); }, beginAnimateCommands: function _AppBarCommandsLayout_beginAnimateCommands(showCommands, hideCommands, otherVisibleCommands) { // The parameters are 3 mutually exclusive arrays of win-command elements contained in this Overlay. // 1) showCommands[]: All of the HIDDEN win-command elements that ARE scheduled to show. // 2) hideCommands[]: All of the VISIBLE win-command elements that ARE scheduled to hide. // 3) otherVisibleCommands[]: All VISIBLE win-command elements that ARE NOT scheduled to hide. this._scaleAfterAnimations = false; // Determine if the overall width of visible commands in the primary row will be increasing OR decreasing. var changeInWidth = this._getWidthOfFullSizeCommands(showCommands) - this._getWidthOfFullSizeCommands(hideCommands); if (changeInWidth > 0) { // Width of contents is going to increase, update our command counts now, to what they will be after we complete the animations. var visibleCommandsAfterAnimations = otherVisibleCommands.concat(showCommands); this.commandsUpdated(visibleCommandsAfterAnimations); // Make sure we will have enough room to fit everything on a single row. this.scale(); } else if (changeInWidth < 0) { // Width of contents is going to decrease. Once animations are complete, check if // there is enough available space to make the remaining commands full size. this._scaleAfterAnimations = true; } }, endAnimateCommands: function _AppBarCommandsLayout_endAnimateCommands() { if (this._scaleAfterAnimations) { this.commandsUpdated(); this.scale(); } }, resize: function _AppBarCommandsLayout_resize() { if (!this._disposed) { // Check for horizontal window resizes. this._appBarTotalKnownWidth = null; if (this.appBarEl.winControl.opened) { this.scale(); } } }, disconnect: function _AppBarCommandsLayout_disconnect() { exports._AppBarBaseLayout.prototype.disconnect.call(this); }, _getWidthOfFullSizeCommands: function _AppBarCommandsLayout_getWidthOfFullSizeCommands(commands) { // Commands layout puts primary commands and secondary commands into the primary row. // Return the total width of all visible primary and secondary commands as if they were full-size. // Perform any pending measurements on "content" type AppBarCommands. if (this._needToMeasureNewCommands) { this._measureContentCommands(); } var accumulatedWidth = 0; var separatorsCount = 0; var buttonsCount = 0; if (!commands) { // Return the cached full size width of the last known visible commands in the AppBar. return this._fullSizeWidthOfLastKnownVisibleCommands; } else { // Return the width of the specified commands. var command; for (var i = 0, len = commands.length; i < len; i++) { command = commands[i].winControl || commands[i]; if (command._type === _Constants.typeSeparator) { separatorsCount++; } else if (command._type !== _Constants.typeContent) { // button, toggle, and flyout types all have the same width. buttonsCount++; } else { accumulatedWidth += command._fullSizeWidth; } } } return accumulatedWidth += (separatorsCount * _Constants.separatorWidth) + (buttonsCount * _Constants.buttonWidth); }, _getFocusableCommandsInLogicalOrder: function _AppBarCommandsLayout_getCommandsInLogicalOrder() { // Function returns an array of all the contained AppBarCommands which are reachable by left/right arrows. var secondaryCommands = this._secondaryCommands.children, primaryCommands = this._primaryCommands.children, focusedIndex = -1; var getFocusableCommandsHelper = function (commandsInReach) { var focusableCommands = []; for (var i = 0, len = commandsInReach.length; i < len; i++) { var element = commandsInReach[i]; if (_ElementUtilities.hasClass(element, _Constants.appBarCommandClass) && element.winControl) { var containsFocus = element.contains(_Global.document.activeElement); // With the inclusion of content type commands, it may be possible to tab to elements in AppBarCommands that are not reachable by arrow keys. // Regardless, when an AppBarCommand contains the element with focus, we just include the whole command so that we can determine which // commands are adjacent to it when looking for the next focus destination. if (element.winControl._isFocusable() || containsFocus) { focusableCommands.push(element); if (containsFocus) { focusedIndex = focusableCommands.length - 1; } } } } return focusableCommands; }; // Determines which set of commands the user could potentially reach through Home, End, and arrow keys. // All commands in the commands layout AppBar, from left to right are in reach. Secondary (previously known as Selection) // then Primary (previously known as Global). var commandsInReach = Array.prototype.slice.call(secondaryCommands).concat(Array.prototype.slice.call(primaryCommands)); var focusableCommands = getFocusableCommandsHelper(commandsInReach); focusableCommands.focusedIndex = focusedIndex; return focusableCommands; }, _commandLayoutsInit: function _AppBarCommandsLayout_commandLayoutsInit() { // Create layout infrastructure this._primaryCommands = _Global.document.createElement("DIV"); this._secondaryCommands = _Global.document.createElement("DIV"); _ElementUtilities.addClass(this._primaryCommands, _Constants.primaryCommandsClass); _ElementUtilities.addClass(this._secondaryCommands, _Constants.secondaryCommandsClass); }, _scaleHelper: function _AppBarCommandsLayout_scaleHelper() { // This exists as a single line function so that unit tests can // overwrite it since they can't resize the WWA window. // It is expected that AppBar is an immediate child of the and will have 100% width. // We measure the clientWidth of the documentElement so that we can scale the AppBar lazily // even while its element is display: 'none' var extraPadding = this.appBarEl.winControl.closedDisplayMode === "minimal" ? _Constants.appBarInvokeButtonWidth : 0; return _Global.document.documentElement.clientWidth - extraPadding; }, _measureContentCommands: function _AppBarCommandsLayout_measureContentCommands() { // AppBar measures the width of content commands when they are first added // and then caches that value to avoid additional layouts in the future. // Can't measure unless We're in the document body if (_Global.document.body.contains(this.appBarEl)) { this._needToMeasureNewCommands = false; var hadHiddenClass = _ElementUtilities.hasClass(this.appBarEl, "win-navbar-closed"); _ElementUtilities.removeClass(this.appBarEl, "win-navbar-closed"); // Make sure AppBar and children have width dimensions. var prevAppBarDisplay = this.appBarEl.style.display; this.appBarEl.style.display = ""; var prevCommandDisplay; var contentElements = this.appBarEl.querySelectorAll("div." + _Constants.appBarCommandClass); var element; for (var i = 0, len = contentElements.length; i < len; i++) { element = contentElements[i]; if (element.winControl && element.winControl._type === _Constants.typeContent) { // Make sure command has width dimensions before we measure. prevCommandDisplay = element.style.display; element.style.display = ""; element.winControl._fullSizeWidth = _ElementUtilities.getTotalWidth(element) || 0; element.style.display = prevCommandDisplay; } } // Restore state to AppBar. this.appBarEl.style.display = prevAppBarDisplay; if (hadHiddenClass) { _ElementUtilities.addClass(this.appBarEl, "win-navbar-closed"); } this.commandsUpdated(); } }, }); return _AppBarCommandsLayout; }), }); _Base.Namespace._moduleDefine(exports, "WinJS.UI", { _AppBarMenuLayout: _Base.Namespace._lazy(function () { var layoutClassName = _Constants.menuLayoutClass; var layoutType = _Constants.appBarLayoutMenu; // // Resize animation // The resize animation requires 2 animations to run simultaneously in sync with each other. It's implemented // without PVL because PVL doesn't provide a way to guarantee that 2 animations will start at the same time. // var transformNames = _BaseUtils._browserStyleEquivalents["transform"]; function transformWithTransition(element, transition) { // transition's properties: // - duration: Number representing the duration of the animation in milliseconds. // - timing: String representing the CSS timing function that controls the progress of the animation. // - to: The value of *element*'s transform property after the animation. var duration = transition.duration * _TransitionAnimation._animationFactor; var transitionProperty = _BaseUtils._browserStyleEquivalents["transition"].scriptName; element.style[transitionProperty] = duration + "ms " + transformNames.cssName + " " + transition.timing; element.style[transformNames.scriptName] = transition.to; var finish; return new Promise(function (c) { var onTransitionEnd = function (eventObject) { if (eventObject.target === element && eventObject.propertyName === transformNames.cssName) { finish(); } }; var didFinish = false; finish = function () { if (!didFinish) { _Global.clearTimeout(timeoutId); element.removeEventListener(_BaseUtils._browserEventEquivalents["transitionEnd"], onTransitionEnd); element.style[transitionProperty] = ""; didFinish = true; } c(); }; // Watch dog timeout var timeoutId = _Global.setTimeout(function () { timeoutId = _Global.setTimeout(finish, duration); }, 50); element.addEventListener(_BaseUtils._browserEventEquivalents["transitionEnd"], onTransitionEnd); }, function () { finish(); // On cancelation, complete the promise successfully to match PVL }); } // See resizeTransition's comment for documentation on *args*. function growTransition(elementClipper, element, args) { var diff = args.anchorTrailingEdge ? args.to.total - args.from.total : args.from.total - args.to.total; var translate = args.dimension === "width" ? "translateX" : "translateY"; var size = args.dimension; var duration = args.duration || 367; var timing = args.timing || "cubic-bezier(0.1, 0.9, 0.2, 1)"; // Set up elementClipper.style[size] = args.to.total + "px"; elementClipper.style[transformNames.scriptName] = translate + "(" + diff + "px)"; element.style[size] = args.to.content + "px"; element.style[transformNames.scriptName] = translate + "(" + -diff + "px)"; // Resolve styles _Global.getComputedStyle(elementClipper).opacity; _Global.getComputedStyle(element).opacity; // Animate var transition = { duration: duration, timing: timing, to: "" }; return Promise.join([ transformWithTransition(elementClipper, transition), transformWithTransition(element, transition) ]); } // See resizeTransition's comment for documentation on *args*. function shrinkTransition(elementClipper, element, args) { var diff = args.anchorTrailingEdge ? args.from.total - args.to.total : args.to.total - args.from.total; var translate = args.dimension === "width" ? "translateX" : "translateY"; var duration = args.duration || 367; var timing = args.timing || "cubic-bezier(0.1, 0.9, 0.2, 1)"; // Set up elementClipper.style[transformNames.scriptName] = ""; element.style[transformNames.scriptName] = ""; // Resolve styles _Global.getComputedStyle(elementClipper).opacity; _Global.getComputedStyle(element).opacity; // Animate var transition = { duration: duration, timing: timing }; var clipperTransition = _BaseUtils._merge(transition, { to: translate + "(" + diff + "px)" }); var elementTransition = _BaseUtils._merge(transition, { to: translate + "(" + -diff + "px)" }); return Promise.join([ transformWithTransition(elementClipper, clipperTransition), transformWithTransition(element, elementTransition) ]); } // Plays an animation which makes an element look like it is resizing in 1 dimension. Arguments: // - elementClipper: The parent of *element*. It shouldn't have any margin, border, or padding and its // size should match element's size. Its purpose is to clip *element* during the animation to give // it the illusion that it is resizing. // - element: The element that should look like it's resizing. // - args: An object with the following required properties: // - from: An object representing the old width/height of the element. // - to: An object representing the new width/height of the element. // from/to are objects of the form { content: number; total: number; }. "content" is the // width/height of *element*'s content box (e.g. getContentWidth). "total" is the width/height // of *element*'s margin box (e.g. getTotalWidth). // - duration: The CSS transition duration property. // - timing: The CSS transition timing property. // - dimension: The dimension on which *element* is resizing. Either "width" or "height". // - anchorTrailingEdge: During the resize animation, one edge will move and the other edge will // remain where it is. This flag specifies which edge is anchored (i.e. won't move). // function resizeTransition(elementClipper, element, args) { if (args.to.total > args.from.total) { return growTransition(elementClipper, element, args); } else if (args.to.total < args.from.total) { return shrinkTransition(elementClipper, element, args); } else { return Promise.as(); } } var _AppBarMenuLayout = _Base.Class.derive(exports._AppBarBaseLayout, function _AppBarMenuLayout_ctor(appBarEl) { exports._AppBarBaseLayout.call(this, appBarEl, { _className: layoutClassName, _type: layoutType }); this._tranformNames = _BaseUtils._browserStyleEquivalents["transform"]; this._animationCompleteBound = this._animationComplete.bind(this); this._positionToolBarBound = this._positionToolBar.bind(this); }, { commandsInOrder: { get: function _AppBarMenuLayout_get_commandsInOrder() { return this._originalCommands; } }, layout: function _AppBarMenuLayout_layout(commands) { this._writeProfilerMark("layout,info"); commands = commands || []; this._originalCommands = []; var that = this; commands.forEach(function (command) { that._originalCommands.push(that.sanitizeCommand(command)); }); this._displayedCommands = this._originalCommands.slice(0); if (this._menu) { _ElementUtilities.empty(this._menu); } else { this._menu = _Global.document.createElement("div"); _ElementUtilities.addClass(this._menu, _Constants.menuContainerClass); } this.appBarEl.appendChild(this._menu); this._toolbarEl = _Global.document.createElement("div"); this._menu.appendChild(this._toolbarEl); this._createToolBar(commands); }, showCommands: function _AppBarMenuLayout_showCommands(commands) { var elements = this._getCommandsElements(commands); var data = []; var newDisplayedCommands = []; var that = this; this._originalCommands.forEach(function (command) { if (elements.indexOf(command.element) >= 0 || that._displayedCommands.indexOf(command) >= 0) { newDisplayedCommands.push(command); data.push(command); } }); this._displayedCommands = newDisplayedCommands; this._updateData(data); }, showOnlyCommands: function _AppBarMenuLayout_showOnlyCommands(commands) { this._displayedCommands = []; this.showCommands(commands); }, hideCommands: function _AppBarMenuLayout_hideCommands(commands) { var elements = this._getCommandsElements(commands); var data = []; var newDisplayedCommands = []; var that = this; this._originalCommands.forEach(function (command) { if (elements.indexOf(command.element) === -1 && that._displayedCommands.indexOf(command) >= 0) { newDisplayedCommands.push(command); data.push(command); } }); this._displayedCommands = newDisplayedCommands; this._updateData(data); }, connect: function _AppBarMenuLayout_connect(appBarEl) { this._writeProfilerMark("connect,info"); exports._AppBarBaseLayout.prototype.connect.call(this, appBarEl); this._id = _ElementUtilities._uniqueID(appBarEl); }, resize: function _AppBarMenuLayout_resize() { this._writeProfilerMark("resize,info"); if (this._initialized) { this._forceLayoutPending = true; } }, positionChanging: function _AppBarMenuLayout_positionChanging(fromPosition, toPosition) { this._writeProfilerMark("positionChanging from:" + fromPosition + " to: " + toPosition + ",info"); this._animationPromise = this._animationPromise || Promise.wrap(); if (this._animating) { this._animationPromise.cancel(); } this._animating = true; if (toPosition === "shown" || (fromPosition !== "shown" && toPosition === "compact")) { this._positionToolBar(); this._animationPromise = this._animateToolBarEntrance(); } else { if (fromPosition === "minimal" || fromPosition === "compact" || fromPosition === "hidden") { this._animationPromise = Promise.wrap(); } else { this._animationPromise = this._animateToolBarExit(); } } this._animationPromise.then(this._animationCompleteBound, this._animationCompleteBound); return this._animationPromise; }, disposeChildren: function _AppBarMenuLayout_disposeChildren() { this._writeProfilerMark("disposeChildren,info"); if (this._toolbar) { _Dispose.disposeSubTree(this._toolbarEl); } this._originalCommands = []; this._displayedCommands = []; }, setFocusOnShow: function _AppBarMenuLayout_setFocusOnShow() { // Make sure the menu (used for clipping during the resize animation) // doesn't scroll when we give focus to the AppBar. this.appBarEl.winControl._setFocusToAppBar(true, this._menu); }, _updateData: function _AppBarMenuLayout_updateData(data) { var hadHiddenClass = _ElementUtilities.hasClass(this.appBarEl, "win-navbar-closed"); var hadShownClass = _ElementUtilities.hasClass(this.appBarEl, "win-navbar-opened"); _ElementUtilities.removeClass(this.appBarEl, "win-navbar-closed"); // Make sure AppBar and children have width dimensions. var prevAppBarDisplay = this.appBarEl.style.display; this.appBarEl.style.display = ""; this._toolbar.data = new BindingList.List(data); if (hadHiddenClass) { this._positionToolBar(); } // Restore state to AppBar. this.appBarEl.style.display = prevAppBarDisplay; if (hadHiddenClass) { _ElementUtilities.addClass(this.appBarEl, "win-navbar-closed"); } if (hadShownClass) { this._positionToolBar(); this._animateToolBarEntrance(); } }, _getCommandsElements: function _AppBarMenuLayout_getCommandsElements(commands) { if (!commands) { return []; } if (typeof commands === "string" || !commands || !commands.length) { commands = [commands]; } var elements = []; for (var i = 0, len = commands.length; i < len; i++) { if (commands[i]) { if (typeof commands[i] === "string") { var element = _Global.document.getElementById(commands[i]); if (element) { elements.push(element); } else { // Check in the list we are tracking, since it might not be in the DOM yet for (var j = 0, len2 = this._originalCommands.length; j < len2; j++) { var element = this._originalCommands[j].element; if (element.id === commands[i]) { elements.push(element); } } } } else if (commands[i].element) { elements.push(commands[i].element); } else { elements.push(commands[i]); } } } return elements; }, _animationComplete: function _AppBarMenuLayout_animationComplete() { if (!this._disposed) { this._animating = false; } }, _createToolBar: function _AppBarMenuLayout_createToolBar(commands) { this._writeProfilerMark("_createToolBar,info"); var hadHiddenClass = _ElementUtilities.hasClass(this.appBarEl, "win-navbar-closed"); _ElementUtilities.removeClass(this.appBarEl, "win-navbar-closed"); // Make sure AppBar and children have width dimensions. var prevAppBarDisplay = this.appBarEl.style.display; this.appBarEl.style.display = ""; this._toolbar = new ToolBar.ToolBar(this._toolbarEl, { data: new BindingList.List(this._originalCommands), shownDisplayMode: 'full', }); var that = this; this._appbarInvokeButton = this.appBarEl.querySelector("." + _Constants.invokeButtonClass); this._overflowButton = this._toolbarEl.querySelector("." + _ToolBarConstants.overflowButtonCssClass); this._overflowButton.addEventListener("click", function () { that._appbarInvokeButton.click(); }); this._positionToolBar(); // Restore state to AppBar. this.appBarEl.style.display = prevAppBarDisplay; if (hadHiddenClass) { _ElementUtilities.addClass(this.appBarEl, "win-navbar-closed"); } }, _positionToolBar: function _AppBarMenuLayout_positionToolBar() { if (!this._disposed) { this._writeProfilerMark("_positionToolBar,info"); this._initialized = true; } }, _animateToolBarEntrance: function _AppBarMenuLayout_animateToolBarEntrance() { this._writeProfilerMark("_animateToolBarEntrance,info"); if (this._forceLayoutPending) { this._forceLayoutPending = false; this._toolbar.forceLayout(); this._positionToolBar(); } var heightVisible = this._isMinimal() ? 0 : this.appBarEl.offsetHeight; if (this._isBottom()) { // Bottom AppBar Animation var offsetTop = this._menu.offsetHeight - heightVisible; return this._executeTranslate(this._menu, "translateY(" + -offsetTop + "px)"); } else { // Top AppBar Animation return resizeTransition(this._menu, this._toolbarEl, { from: { content: heightVisible, total: heightVisible }, to: { content: this._menu.offsetHeight, total: this._menu.offsetHeight }, dimension: "height", duration: 400, timing: "ease-in", }); } }, _animateToolBarExit: function _AppBarMenuLayout_animateToolBarExit() { this._writeProfilerMark("_animateToolBarExit,info"); var heightVisible = this._isMinimal() ? 0 : this.appBarEl.offsetHeight; if (this._isBottom()) { return this._executeTranslate(this._menu, "none"); } else { // Top AppBar Animation return resizeTransition(this._menu, this._toolbarEl, { from: { content: this._menu.offsetHeight, total: this._menu.offsetHeight }, to: { content: heightVisible, total: heightVisible }, dimension: "height", duration: 400, timing: "ease-in", }); } }, _executeTranslate: function _AppBarMenuLayout_executeTranslate(element, value) { return _TransitionAnimation.executeTransition(element, { property: this._tranformNames.cssName, delay: 0, duration: 400, timing: "ease-in", to: value }); }, _isMinimal: function _AppBarMenuLayout_isMinimal() { return this.appBarEl.winControl.closedDisplayMode === "minimal"; }, _isBottom: function _AppBarMenuLayout_isBottom() { return this.appBarEl.winControl.placement === "bottom"; }, _writeProfilerMark: function _AppBarMenuLayout_writeProfilerMark(text) { _WriteProfilerMark("WinJS.UI._AppBarMenuLayout:" + this._id + ":" + text); } }); return _AppBarMenuLayout; }), }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. // _LegacyAppBar /// appbar,appBars,Flyout,Flyouts,iframe,Statics,unfocus,WinJS define('WinJS/Controls/_LegacyAppBar',[ 'exports', '../Core/_Global', '../Core/_WinRT', '../Core/_Base', '../Core/_BaseUtils', '../Core/_ErrorFromName', '../Core/_Events', '../Core/_Resources', '../Core/_WriteProfilerMark', '../Animations', '../Promise', '../Scheduler', '../_LightDismissService', '../Utilities/_Control', '../Utilities/_Dispose', '../Utilities/_ElementUtilities', '../Utilities/_Hoverable', '../Utilities/_KeyboardBehavior', './_LegacyAppBar/_Constants', './_LegacyAppBar/_Layouts', './AppBar/_Command', './AppBar/_Icon', './Flyout/_Overlay', '../Application' ], function appBarInit(exports, _Global, _WinRT, _Base, _BaseUtils, _ErrorFromName, _Events, _Resources, _WriteProfilerMark, Animations, Promise, Scheduler, _LightDismissService, _Control, _Dispose, _ElementUtilities, _Hoverable, _KeyboardBehavior, _Constants, _Layouts, _Command, _Icon, _Overlay, Application) { "use strict"; _Base.Namespace._moduleDefine(exports, "WinJS.UI", { /// /// /// Represents an application toolbar for display commands. /// /// /// /// /// /// /// ]]> /// Raised just before showing the _LegacyAppBar. /// Raised immediately after the _LegacyAppBar is fully shown. /// Raised just before hiding the _LegacyAppBar. /// Raised immediately after the _LegacyAppBar is fully hidden. /// The _LegacyAppBar control itself. /// Style for a custom layout _LegacyAppBar. /// /// _LegacyAppBar: _Base.Namespace._lazy(function () { var EVENTS = { beforeOpen: "beforeopen", afterOpen: "afteropen", beforeClose: "beforeclose", afterClose: "afterclose", }; var createEvent = _Events._createEventProperty; // Enum of known constant pixel values for display modes. var knownVisibleHeights = { none: 0, hidden: 0, minimal: 25, compact: 48 }; // Maps each notion of a display modes to the corresponding visible position var displayModeVisiblePositions = { none: "hidden", hidden: "hidden", minimal: "minimal", shown: "shown", compact: "compact" }; // Enum of closedDisplayMode constants var closedDisplayModes = { none: "none", minimal: "minimal", compact: "compact" }; // Constants shown/hidden states var appbarShownState = "shown", appbarHiddenState = "hidden"; // Hook into event var globalEventsInitialized = false; function _allManipulationChanged(event) { var elements = _Global.document.querySelectorAll("." + _Constants.appBarClass); if (elements) { var len = elements.length; for (var i = 0; i < len; i++) { var element = elements[i]; var appbar = element.winControl; if (appbar && !element.disabled) { appbar._manipulationChanged(event); } } } } var strings = { get ariaLabel() { return _Resources._getWinJSString("ui/appBarAriaLabel").value; }, get requiresCommands() { return "Invalid argument: commands must not be empty"; }, get cannotChangePlacementWhenVisible() { return "Invalid argument: The placement property cannot be set when the AppBar is visible, call hide() first"; }, get cannotChangeLayoutWhenVisible() { return "Invalid argument: The layout property cannot be set when the AppBar is visible, call hide() first"; } }; var _LegacyAppBar = _Base.Class.derive(_Overlay._Overlay, function _LegacyAppBar_ctor(element, options) { /// /// /// Creates a new _LegacyAppBar control. /// /// /// The DOM element that will host the control. /// /// /// The set of properties and values to apply to the new _LegacyAppBar control. /// /// /// The new _LegacyAppBar control. /// /// this._initializing = true; // Simplify checking later options = options || {}; // Make sure there's an element this._element = element || _Global.document.createElement("div"); this._id = this._element.id || _ElementUtilities._uniqueID(this._element); this._writeProfilerMark("constructor,StartTM"); // Attach our css class. _ElementUtilities.addClass(this._element, _Constants.appBarClass); var that = this; this._dismissable = new _LightDismissService.LightDismissableElement({ element: this._element, tabIndex: this._element.hasAttribute("tabIndex") ? this._element.tabIndex : -1, onLightDismiss: function () { that.close(); }, onTakeFocus: function (useSetActive) { if (!that._dismissable.restoreFocus()) { that._layoutImpl.setFocusOnShow(); } }, }); // Make sure we have an ARIA role var role = this._element.getAttribute("role"); if (!role) { this._element.setAttribute("role", "menubar"); } var label = this._element.getAttribute("aria-label"); if (!label) { this._element.setAttribute("aria-label", strings.ariaLabel); } // Call the _Overlay constructor helper to finish setting up our element. // Don't pass constructor options, _LegacyAppBar needs to set those itself specific order. this._baseOverlayConstructor(this._element); // Start off hidden this._lastPositionVisited = displayModeVisiblePositions.none; _ElementUtilities.addClass(this._element, _Constants.hiddenClass); // Add Invoke button. this._invokeButton = _Global.document.createElement("button"); this._invokeButton.tabIndex = 0; this._invokeButton.setAttribute("type", "button"); this._invokeButton.innerHTML = ""; _ElementUtilities.addClass(this._invokeButton, _Constants.invokeButtonClass); this._element.appendChild(this._invokeButton); this._invokeButton.addEventListener("click", function () { if (that.opened) { that._hide(); } else { that._show(); } }, false); // Run layout setter immediately. We need to know our layout in order to correctly // position any commands that may be getting set through the constructor. this._layout = _Constants.appBarLayoutCustom; delete options._layout; // Need to set placement before closedDisplayMode, closedDisplayMode sets our starting position, which is dependant on placement. this.placement = options.placement || _Constants.appBarPlacementBottom; this.closedDisplayMode = options.closedDisplayMode || closedDisplayModes.compact; _Control.setOptions(this, options); var commandsUpdatedBound = this._commandsUpdated.bind(this); this._element.addEventListener(_Constants.commandVisibilityChanged, function (ev) { if (that._disposed) { return; } if (that.opened) { ev.preventDefault(); } commandsUpdatedBound(); }); this._initializing = false; this._setFocusToAppBarBound = this._setFocusToAppBar.bind(this); // Handle key down (left & right) this._element.addEventListener("keydown", this._handleKeyDown.bind(this), false); // Attach global event handlers if (!globalEventsInitialized) { // Need to know if the IHM is done scrolling _Global.document.addEventListener("MSManipulationStateChanged", _allManipulationChanged, false); globalEventsInitialized = true; } if (this.closedDisplayMode === closedDisplayModes.none && this.layout === _Constants.appBarLayoutCommands) { // Remove the commands layout _LegacyAppBar from the layout tree at this point so we don't cause unnecessary layout costs whenever // the window resizes or when CSS changes are applied to the commands layout _LegacyAppBar's parent element. this._element.style.display = "none"; } this._winKeyboard = new _KeyboardBehavior._WinKeyboard(this._element); this._writeProfilerMark("constructor,StopTM"); return this; }, { // Public Properties /// The placement of the _LegacyAppBar on the display. Values are "top" or "bottom". placement: { get: function _LegacyAppBar_get_placement() { return this._placement; }, set: function _LegacyAppBar_set_placement(value) { // In designer we may have to move it var wasShown = false; if (_WinRT.Windows.ApplicationModel.DesignMode.designModeEnabled) { this._hide(); wasShown = true; } if (this.opened) { throw new _ErrorFromName("WinJS.UI._LegacyAppBar.CannotChangePlacementWhenVisible", strings.cannotChangePlacementWhenVisible); } // Set placement, coerce invalid values to 'bottom' this._placement = (value === _Constants.appBarPlacementTop) ? _Constants.appBarPlacementTop : _Constants.appBarPlacementBottom; // Clean up win-top, win-bottom styles if (this._placement === _Constants.appBarPlacementTop) { _ElementUtilities.addClass(this._element, _Constants.topClass); _ElementUtilities.removeClass(this._element, _Constants.bottomClass); } else if (this._placement === _Constants.appBarPlacementBottom) { _ElementUtilities.removeClass(this._element, _Constants.topClass); _ElementUtilities.addClass(this._element, _Constants.bottomClass); } // Update our position on screen. this._ensurePosition(); if (wasShown) { // Show again if we hid ourselves for the designer this._show(); } } }, _layout: { get: function _LegacyAppBar_get_layout() { return this._layoutImpl.type; }, set: function (layout) { if (layout !== _Constants.appBarLayoutCommands && layout !== _Constants.appBarLayoutCustom && layout !== _Constants.appBarLayoutMenu) { } // In designer we may have to redraw it var wasShown = false; if (_WinRT.Windows.ApplicationModel.DesignMode.designModeEnabled) { this._hide(); wasShown = true; } if (this.opened) { throw new _ErrorFromName("WinJS.UI._LegacyAppBar.CannotChangeLayoutWhenVisible", strings.cannotChangeLayoutWhenVisible); } var commands; if (!this._initializing) { // Gather commands in preparation for hand off to new layout. // We expect prev layout to return commands in the order they were set in, // not necessarily the current DOM order the layout is using. commands = this._layoutImpl.commandsInOrder; this._layoutImpl.disconnect(); } // Set layout if (layout === _Constants.appBarLayoutCommands) { this._layoutImpl = new _Layouts._AppBarCommandsLayout(); } else if (layout === _Constants.appBarLayoutMenu) { this._layoutImpl = new _Layouts._AppBarMenuLayout(); } else { // Custom layout uses Base _LegacyAppBar Layout class. this._layoutImpl = new _Layouts._AppBarBaseLayout(); } this._layoutImpl.connect(this._element); if (commands && commands.length) { // Reset _LegacyAppBar since layout changed. this._layoutCommands(commands); } // Show again if we hid ourselves for the designer if (wasShown) { this._show(); } }, configurable: true }, /// /// Sets the AppBarCommands in the _LegacyAppBar. This property accepts an array of AppBarCommand objects. /// commands: { set: function _LegacyAppBar_set_commands(commands) { // Fail if trying to set when shown if (this.opened) { throw new _ErrorFromName("WinJS.UI._LegacyAppBar.CannotChangeCommandsWhenVisible", _Resources._formatString(_Overlay._Overlay.commonstrings.cannotChangeCommandsWhenVisible, "_LegacyAppBar")); } // Dispose old commands before tossing them out. if (!this._initializing) { // AppBarCommands defined in markup don't want to be disposed during initialization. this._disposeChildren(); } this._layoutCommands(commands); } }, _layoutCommands: function _LegacyAppBar_layoutCommands(commands) { // Function precondition: _LegacyAppBar must not be shown. // Empties _LegacyAppBar HTML and repopulates with passed in commands. _ElementUtilities.empty(this._element); this._element.appendChild(this._invokeButton); // Keep our Show/Hide button. // In case they had only one command to set... if (!Array.isArray(commands)) { commands = [commands]; } this._layoutImpl.layout(commands); }, /// /// Gets/Sets how _LegacyAppBar will display itself while hidden. Values are "none", "minimal" and '"compact". /// closedDisplayMode: { get: function _LegacyAppBar_get_closedDisplayMode() { return this._closedDisplayMode; }, set: function _LegacyAppBar_set_closedDisplayMode(value) { var oldValue = this._closedDisplayMode; if (oldValue !== value) { // Determine if the visible position is changing. This can be used to determine if we need to delay updating closedDisplayMode related CSS classes // to avoid affecting the animation. var changeVisiblePosition = _ElementUtilities.hasClass(this._element, _Constants.hiddenClass) || _ElementUtilities.hasClass(this._element, _Constants.hidingClass); if (value === closedDisplayModes.none) { this._closedDisplayMode = closedDisplayModes.none; if (!changeVisiblePosition || !oldValue) { _ElementUtilities.removeClass(this._element, _Constants.minimalClass); _ElementUtilities.removeClass(this._element, _Constants.compactClass); } } else if (value === closedDisplayModes.minimal) { this._closedDisplayMode = closedDisplayModes.minimal; if (!changeVisiblePosition || !oldValue || oldValue === closedDisplayModes.none) { _ElementUtilities.addClass(this._element, _Constants.minimalClass); _ElementUtilities.removeClass(this._element, _Constants.compactClass); } } else { // Compact is default fallback. this._closedDisplayMode = closedDisplayModes.compact; _ElementUtilities.addClass(this._element, _Constants.compactClass); _ElementUtilities.removeClass(this._element, _Constants.minimalClass); } // The invoke button has changed the amount of available space in the _LegacyAppBar. Layout might need to scale. this._layoutImpl.resize(); if (changeVisiblePosition) { // If the value is being set while we are not showing, change to our new position. this._changeVisiblePosition(displayModeVisiblePositions[this._closedDisplayMode]); } } }, }, /// opened: { get: function () { // Returns true if _LegacyAppBar is not 'hidden'. return !_ElementUtilities.hasClass(this._element, _Constants.hiddenClass) && !_ElementUtilities.hasClass(this._element, _Constants.hidingClass) && this._doNext !== displayModeVisiblePositions.minimal && this._doNext !== displayModeVisiblePositions.compact && this._doNext !== displayModeVisiblePositions.none; }, set: function (opened) { var currentlyOpen = this.opened; if (opened && !currentlyOpen) { this._show(); } else if (!opened && currentlyOpen) { this._hide(); } } }, /// /// Occurs immediately before the control is opened. /// onbeforeopen: createEvent(EVENTS.beforeOpen), /// /// Occurs immediately after the control is opened. /// onafteropen: createEvent(EVENTS.afterOpen), /// /// Occurs immediately before the control is closed. /// onbeforeclose: createEvent(EVENTS.beforeClose), /// /// Occurs immediately after the control is closed. /// onafterclose: createEvent(EVENTS.afterClose), getCommandById: function (id) { /// /// /// Retrieves the command with the specified ID from this _LegacyAppBar. /// If more than one command is found, this method returns them all. /// /// Id of the command to return. /// /// The command found, an array of commands if more than one have the same ID, or null if no command is found. /// /// var commands = this._layoutImpl.commandsInOrder.filter(function (command) { return command.id === id || command.element.id === id; }); if (commands.length === 1) { return commands[0]; } else if (commands.length === 0) { return null; } return commands; }, showCommands: function (commands) { /// /// /// Show the specified commands of the _LegacyAppBar. /// /// /// An array of the commands to show. The array elements may be AppBarCommand objects, or the string identifiers (IDs) of commands. /// /// if (!commands) { throw new _ErrorFromName("WinJS.UI._LegacyAppBar.RequiresCommands", strings.requiresCommands); } this._layoutImpl.showCommands(commands); }, hideCommands: function (commands) { /// /// /// Hides the specified commands of the _LegacyAppBar. /// /// Required. Command or Commands to hide, either String, DOM elements, or WinJS objects. /// if (!commands) { throw new _ErrorFromName("WinJS.UI._LegacyAppBar.RequiresCommands", strings.requiresCommands); } this._layoutImpl.hideCommands(commands); }, showOnlyCommands: function (commands) { /// /// /// Show the specified commands, hiding all of the others in the _LegacyAppBar. /// /// /// An array of the commands to show. The array elements may be AppBarCommand objects, or the string identifiers (IDs) of commands. /// /// if (!commands) { throw new _ErrorFromName("WinJS.UI._LegacyAppBar.RequiresCommands", strings.requiresCommands); } this._layoutImpl.showOnlyCommands(commands); }, open: function () { /// /// /// Opens the _LegacyAppBar, if closed and not disabled, regardless of other state. /// /// // Just wrap the private one, turning off keyboard invoked flag this._writeProfilerMark("show,StartTM"); this._show(); }, _show: function _LegacyAppBar_show() { var toPosition = displayModeVisiblePositions.shown; var showing = null; // If we're already shown, we are just going to animate our position, not fire events or manage focus. if (!this.disabled && (_ElementUtilities.hasClass(this._element, _Constants.hiddenClass) || _ElementUtilities.hasClass(this._element, _Constants.hidingClass))) { showing = appbarShownState; } this._changeVisiblePosition(toPosition, showing); if (showing) { // Clean up tabbing behavior by making sure first and final divs are correct after showing. this._updateFirstAndFinalDiv(); _LightDismissService.shown(this._dismissable); } }, close: function () { /// /// /// Closes the _LegacyAppBar. /// /// // Just wrap the private one this._writeProfilerMark("hide,StartTM"); this._hide(); }, _hide: function _LegacyAppBar_hide(toPosition) { var toPosition = toPosition || displayModeVisiblePositions[this.closedDisplayMode]; var hiding = null; // If were already hidden, we are just going to animate our position, not fire events or manage focus again. if (!_ElementUtilities.hasClass(this._element, _Constants.hiddenClass) && !_ElementUtilities.hasClass(this._element, _Constants.hidingClass)) { hiding = appbarHiddenState; } this._changeVisiblePosition(toPosition, hiding); }, _dispose: function _LegacyAppBar_dispose() { _Dispose.disposeSubTree(this.element); _LightDismissService.hidden(this._dismissable); this._layoutImpl.dispose(); this.disabled = true; this.close(); }, _disposeChildren: function _LegacyAppBar_disposeChildren() { // Be purposeful about what we dispose. this._layoutImpl.disposeChildren(); }, _handleKeyDown: function _LegacyAppBar_handleKeyDown(event) { // On Left/Right arrow keys, moves focus to previous/next AppbarCommand element. // If the current active element isn't an intrinsic part of the _LegacyAppBar, // Layout might want to handle additional keys. if (!this._invokeButton.contains(_Global.document.activeElement)) { this._layoutImpl.handleKeyDown(event); } }, _visiblePixels: { get: function () { // Returns object containing pixel height of each visible position return { hidden: knownVisibleHeights.hidden, minimal: knownVisibleHeights.minimal, compact: Math.max(this._heightWithoutLabels || 0, knownVisibleHeights.compact), // Element can change size as content gets added or removed or if it // experinces style changes. We have to look this up at run time. shown: this._element.offsetHeight, }; } }, _visiblePosition: { // Returns string value of our nearest, stationary, visible position. get: function () { // If we're animating into a new posistion, return the position we're animating into. if (this._animating && displayModeVisiblePositions[this._element.winAnimating]) { return this._element.winAnimating; } else { return this._lastPositionVisited; } } }, _visible: { // Returns true if our visible position is not completely hidden, else false. get: function () { return (this._visiblePosition !== displayModeVisiblePositions.none); } }, _changeVisiblePosition: function (toPosition, newState) { /// /// /// Changes the visible position of the _LegacyAppBar. /// /// /// Name of the visible position we want to move to. /// /// /// Name of the state we are entering. Values can be "showing", "hiding" or null. /// If the value is null, then we are not changing states, only changing visible position. /// /// if ((this._visiblePosition === toPosition && !this._keyboardObscured) || (this.disabled && toPosition !== displayModeVisiblePositions.disabled)) { // If we want to go where we already are, or we're disabled, return false. this._afterPositionChange(null); } else if (this._animating || this._needToHandleShowingKeyboard || this._needToHandleHidingKeyboard) { // Only do one thing at a time. If we are already animating, // or the IHM is animating, schedule this for later. this._doNext = toPosition; this._afterPositionChange(null); } else { // Begin position changing sequence. // Set the animating flag to block any queued position changes until we're done. this._element.winAnimating = toPosition; var performAnimation = this._initializing ? false : true; // Assume we are animating from the last position visited. var fromPosition = this._lastPositionVisited; // We'll need to measure our element to determine how far we need to animate. // Make sure we have accurate dimensions. this._element.style.display = ""; // Are we hiding completely, or about to become visible? var hidingCompletely = (toPosition === displayModeVisiblePositions.hidden); if (this._keyboardObscured) { // We're changing position while covered by the IHM. if (hidingCompletely) { // If we're covered by the IHM we already look hidden. // We can skip our animation and just hide. performAnimation = false; } else { // Some portion of the _LegacyAppBar should be visible to users after its position changes. // Un-obscure ourselves and become visible to the user again. // Need to animate to our desired position as if we were coming up from behind the keyboard. fromPosition = displayModeVisiblePositions.hidden; } this._keyboardObscured = false; } // Fire "before" event if we are changing state. if (newState === appbarShownState) { this._beforeShow(); } else if (newState === appbarHiddenState) { this._beforeHide(); } // Position our element into the correct "end of animation" position, // also accounting for any viewport scrolling or soft keyboard positioning. this._ensurePosition(); this._element.style.opacity = 1; this._element.style.visibility = "visible"; this._animationPromise = (performAnimation) ? this._animatePositionChange(fromPosition, toPosition) : Promise.wrap(); this._animationPromise.then( function () { this._afterPositionChange(toPosition, newState); }.bind(this), function () { this._afterPositionChange(toPosition, newState); }.bind(this) ); } }, _afterPositionChange: function _LegacyAppBar_afterPositionChange(newPosition, newState) { // Defines body of work to perform after changing positions. if (this._disposed) { return; } if (newPosition) { // Update closedDisplayMode related CSS classes, which were delayed from the closedDisplayMode setter to avoid affecting the animation if (newPosition === displayModeVisiblePositions.minimal) { _ElementUtilities.addClass(this._element, _Constants.minimalClass); _ElementUtilities.removeClass(this._element, _Constants.compactClass); } if (newPosition === displayModeVisiblePositions.hidden && this.closedDisplayMode === closedDisplayModes.none) { _ElementUtilities.removeClass(this._element, _Constants.minimalClass); _ElementUtilities.removeClass(this._element, _Constants.compactClass); } // Clear animation flag and record having visited this position. this._element.winAnimating = ""; this._lastPositionVisited = newPosition; if (this._doNext === this._lastPositionVisited) { this._doNext = ""; } if (newState === appbarHiddenState) { _LightDismissService.hidden(this._dismissable); } if (newPosition === displayModeVisiblePositions.hidden) { // Make sure animation is finished. this._element.style.visibility = "hidden"; this._element.style.display = "none"; } // Clean up animation transforms. var transformProperty = _BaseUtils._browserStyleEquivalents["transform"].scriptName; this._element.style[transformProperty] = ""; // Fire "after" event if we changed state. if (newState === appbarShownState) { this._afterShow(); } else if (newState === appbarHiddenState) { this._afterHide(); } // If we had something queued, do that Scheduler.schedule(this._checkDoNext, Scheduler.Priority.normal, this, "WinJS.UI._LegacyAppBar._checkDoNext"); } this._afterPositionChangeCallBack(); }, _afterPositionChangeCallBack: function () { // Leave this blank for unit tests to overwrite. }, _beforeShow: function _LegacyAppBar_beforeShow() { // In case their event 'beforeopen' event listener is going to manipulate commands, // first see if there are any queued command animations we can handle while we're still hidden. if (this._queuedCommandAnimation) { this._showAndHideFast(this._queuedToShow, this._queuedToHide); this._queuedToShow = []; this._queuedToHide = []; } // Make sure everything fits before showing this._layoutImpl.scale(); if (this.closedDisplayMode === closedDisplayModes.compact) { this._heightWithoutLabels = this._element.offsetHeight; } _ElementUtilities.removeClass(this._element, _Constants.hiddenClass); _ElementUtilities.addClass(this._element, _Constants.showingClass); // Send our "beforeopen" event this._sendEvent(EVENTS.beforeOpen); }, _afterShow: function _LegacyAppBar_afterShow() { _ElementUtilities.removeClass(this._element, _Constants.showingClass); _ElementUtilities.addClass(this._element, _Constants.shownClass); // Send our "afteropen" event this._sendEvent(EVENTS.afterOpen); this._writeProfilerMark("show,StopTM"); }, _beforeHide: function _LegacyAppBar_beforeHide() { _ElementUtilities.removeClass(this._element, _Constants.shownClass); _ElementUtilities.addClass(this._element, _Constants.hidingClass); // Send our "beforeclose" event this._sendEvent(EVENTS.beforeClose); }, _afterHide: function _LegacyAppBar_afterHide() { // In case their 'afterclose' event handler is going to manipulate commands, // first see if there are any queued command animations we can handle now we're hidden. if (this._queuedCommandAnimation) { this._showAndHideFast(this._queuedToShow, this._queuedToHide); this._queuedToShow = []; this._queuedToHide = []; } _ElementUtilities.removeClass(this._element, _Constants.hidingClass); _ElementUtilities.addClass(this._element, _Constants.hiddenClass); // Send our "afterclose" event this._sendEvent(EVENTS.afterClose); this._writeProfilerMark("hide,StopTM"); }, _animatePositionChange: function _LegacyAppBar_animatePositionChange(fromPosition, toPosition) { // Determines and executes the proper transition between visible positions var layoutElementsAnimationPromise = this._layoutImpl.positionChanging(fromPosition, toPosition), appBarElementAnimationPromise; // Get values in terms of pixels to perform animation. var beginningVisiblePixelHeight = this._visiblePixels[fromPosition], endingVisiblePixelHeight = this._visiblePixels[toPosition], distance = Math.abs(endingVisiblePixelHeight - beginningVisiblePixelHeight), offsetTop = (this._placement === _Constants.appBarPlacementTop) ? -distance : distance; if ((this._placement === _Constants.appBarPlacementTop) && ((fromPosition === displayModeVisiblePositions.shown && toPosition === displayModeVisiblePositions.compact) || (fromPosition === displayModeVisiblePositions.compact && toPosition === displayModeVisiblePositions.shown))) { // Command icons remain in the same location on a top appbar // when going from compact > shown or shown > compact. offsetTop = 0; } // Animate if (endingVisiblePixelHeight > beginningVisiblePixelHeight) { var fromOffset = { top: offsetTop + "px", left: "0px" }; appBarElementAnimationPromise = Animations.showEdgeUI(this._element, fromOffset, { mechanism: "transition" }); } else { var toOffset = { top: offsetTop + "px", left: "0px" }; appBarElementAnimationPromise = Animations.hideEdgeUI(this._element, toOffset, { mechanism: "transition" }); } return Promise.join([layoutElementsAnimationPromise, appBarElementAnimationPromise]); }, _checkDoNext: function _LegacyAppBar_checkDoNext() { // Do nothing if we're still animating if (this._animating || this._needToHandleShowingKeyboard || this._needToHandleHidingKeyboard || this._disposed) { return; } if (this._doNext === displayModeVisiblePositions.disabled || this._doNext === displayModeVisiblePositions.hidden || this._doNext === displayModeVisiblePositions.minimal || this._doNext === displayModeVisiblePositions.compact) { // Do hide first because animating commands would be easier this._hide(this._doNext); this._doNext = ""; } else if (this._queuedCommandAnimation) { // Do queued commands before showing if possible this._showAndHideQueue(); } else if (this._doNext === displayModeVisiblePositions.shown) { // Show last so that we don't unnecessarily animate commands this._show(); this._doNext = ""; } }, // Set focus to the passed in _LegacyAppBar _setFocusToAppBar: function _LegacyAppBar_setFocusToAppBar(useSetActive, scroller) { if (!this._focusOnFirstFocusableElement(useSetActive, scroller)) { // No first element, set it to appbar itself _Overlay._Overlay._trySetActive(this._element, scroller); } }, _commandsUpdated: function _LegacyAppBar_commandsUpdated() { // If we are still initializing then we don't have a layout yet so it doesn't need updating. if (!this._initializing) { this._layoutImpl.commandsUpdated(); this._layoutImpl.scale(); } }, _beginAnimateCommands: function _LegacyAppBar_beginAnimateCommands(showCommands, hideCommands, otherVisibleCommands) { // The parameters are 3 mutually exclusive arrays of win-command elements contained in this Overlay. // 1) showCommands[]: All of the HIDDEN win-command elements that ARE scheduled to show. // 2) hideCommands[]: All of the VISIBLE win-command elements that ARE scheduled to hide. // 3) otherVisibleCommands[]: All VISIBLE win-command elements that ARE NOT scheduled to hide. this._layoutImpl.beginAnimateCommands(showCommands, hideCommands, otherVisibleCommands); }, _endAnimateCommands: function _LegacyAppBar_endAnimateCommands() { this._layoutImpl.endAnimateCommands(); this._endAnimateCommandsCallBack(); }, _endAnimateCommandsCallBack: function _LegacyAppBar_endAnimateCommandsCallBack() { // Leave this blank for unit tests to overwrite. }, // Get the top offset for top appbars. _getTopOfVisualViewport: function _LegacyAppBar_getTopOfVisualViewPort() { return _Overlay._Overlay._keyboardInfo._visibleDocTop; }, // Get the bottom offset for bottom appbars. _getAdjustedBottom: function _LegacyAppBar_getAdjustedBottom() { // Need the distance the IHM moved as well. return _Overlay._Overlay._keyboardInfo._visibleDocBottomOffset; }, _showingKeyboard: function _LegacyAppBar_showingKeyboard(event) { // Remember keyboard showing state. this._keyboardObscured = false; this._needToHandleHidingKeyboard = false; // If we're already moved, then ignore the whole thing if (_Overlay._Overlay._keyboardInfo._visible && this._alreadyInPlace()) { return; } this._needToHandleShowingKeyboard = true; // If focus is in the appbar, don't cause scrolling. if (this.opened && this._element.contains(_Global.document.activeElement)) { event.ensuredFocusedElementInView = true; } // Check if appbar moves or if we're ok leaving it obscured instead. if (this._visible && this._placement !== _Constants.appBarPlacementTop && _Overlay._Overlay._isFlyoutVisible()) { // Remember that we're obscured this._keyboardObscured = true; } else { // Don't be obscured, clear _scrollHappened flag to give us inference later on when to re-show ourselves. this._scrollHappened = false; } // Also set timeout regardless, so we can clean up our _keyboardShowing flag. var that = this; _Global.setTimeout(function (e) { that._checkKeyboardTimer(e); }, _Overlay._Overlay._keyboardInfo._animationShowLength + _Overlay._Overlay._scrollTimeout); }, _hidingKeyboard: function _LegacyAppBar_hidingKeyboard() { // We'll either just reveal the current space under the IHM or restore the window height. // We won't be obscured this._keyboardObscured = false; this._needToHandleShowingKeyboard = false; this._needToHandleHidingKeyboard = true; // We'll either just reveal the current space or resize the window if (!_Overlay._Overlay._keyboardInfo._isResized) { // If we're not completely hidden, only fake hiding under keyboard, or already animating, // then snap us to our final position. if (this._visible || this._animating) { // Not resized, update our final position immediately this._checkScrollPosition(); this._element.style.display = ""; } this._needToHandleHidingKeyboard = false; } // Else resize should clear keyboardHiding. }, _resize: function _LegacyAppBar_resize(event) { // If we're hidden by the keyboard, then hide bottom appbar so it doesn't pop up twice when it scrolls if (this._needToHandleShowingKeyboard) { // Top is allowed to scroll off the top, but we don't want bottom to peek up when // scrolled into view since we'll show it ourselves and don't want a stutter effect. if (this._visible) { if (this._placement !== _Constants.appBarPlacementTop && !this._keyboardObscured) { // If viewport doesn't match window, need to vanish momentarily so it doesn't scroll into view, // however we don't want to toggle the visibility="hidden" hidden flag. this._element.style.display = "none"; } } // else if we're top we stay, and if there's a flyout, stay obscured by the keyboard. } else if (this._needToHandleHidingKeyboard) { this._needToHandleHidingKeyboard = false; if (this._visible || this._animating) { // Snap to final position this._checkScrollPosition(); this._element.style.display = ""; } } // Make sure everything still fits. if (!this._initializing) { this._layoutImpl.resize(event); } }, _checkKeyboardTimer: function _LegacyAppBar_checkKeyboardTimer() { if (!this._scrollHappened) { this._mayEdgeBackIn(); } }, _manipulationChanged: function _LegacyAppBar_manipulationChanged(event) { // See if we're at the not manipulating state, and we had a scroll happen, // which is implicitly after the keyboard animated. if (event.currentState === 0 && this._scrollHappened) { this._mayEdgeBackIn(); } }, _mayEdgeBackIn: function _LegacyAppBar_mayEdgeBackIn() { // May need to react to IHM being resized event if (this._needToHandleShowingKeyboard) { // If not top appbar or viewport isn't still at top, then need to show again this._needToHandleShowingKeyboard = false; // If obscured (IHM + flyout showing), it's ok to stay obscured. // If bottom we have to move, or if top scrolled off screen. if (!this._keyboardObscured && (this._placement !== _Constants.appBarPlacementTop || _Overlay._Overlay._keyboardInfo._visibleDocTop !== 0)) { var toPosition = this._visiblePosition; this._lastPositionVisited = displayModeVisiblePositions.hidden; this._changeVisiblePosition(toPosition, false); } else { // Ensure any animations dropped during the showing keyboard are caught up. this._checkDoNext(); } } this._scrollHappened = false; }, _ensurePosition: function _LegacyAppBar_ensurePosition() { // Position the _LegacyAppBar element relative to the top or bottom edge of the visible // document, based on the the visible position we think we need to be in. var offSet = this._computePositionOffset(); this._element.style.bottom = offSet.bottom; this._element.style.top = offSet.top; }, _computePositionOffset: function _LegacyAppBar_computePositionOffset() { // Calculates and returns top and bottom offsets for the _LegacyAppBar element, relative to the top or bottom edge of the visible // document. var positionOffSet = {}; if (this._placement === _Constants.appBarPlacementBottom) { // If the IHM is open, the bottom of the visual viewport may or may not be obscured // Use _getAdjustedBottom to account for the IHM if it is covering the bottom edge. positionOffSet.bottom = this._getAdjustedBottom() + "px"; positionOffSet.top = ""; } else if (this._placement === _Constants.appBarPlacementTop) { positionOffSet.bottom = ""; positionOffSet.top = this._getTopOfVisualViewport() + "px"; } return positionOffSet; }, _checkScrollPosition: function _LegacyAppBar_checkScrollPosition() { // If IHM has appeared, then remember we may come in if (this._needToHandleShowingKeyboard) { // Tag that it's OK to edge back in. this._scrollHappened = true; return; } // We only need to update if we're not completely hidden. if (this._visible || this._animating) { this._ensurePosition(); // Ensure any animations dropped during the showing keyboard are caught up. this._checkDoNext(); } }, _alreadyInPlace: function _LegacyAppBar_alreadyInPlace() { // See if we're already where we're supposed to be. var offSet = this._computePositionOffset(); return (offSet.top === this._element.style.top && offSet.bottom === this._element.style.bottom); }, // If there is a shown non-sticky _LegacyAppBar then it sets the firstDiv tabIndex to // the minimum tabIndex found in the _LegacyAppBars and finalDiv to the max found. // Otherwise sets their tabIndex to -1 so they are not tab stops. _updateFirstAndFinalDiv: function _LegacyAppBar_updateFirstAndFinalDiv() { var appBarFirstDiv = this._element.querySelectorAll("." + _Constants.firstDivClass); appBarFirstDiv = appBarFirstDiv.length >= 1 ? appBarFirstDiv[0] : null; var appBarFinalDiv = this._element.querySelectorAll("." + _Constants.finalDivClass); appBarFinalDiv = appBarFinalDiv.length >= 1 ? appBarFinalDiv[0] : null; // Remove the firstDiv & finalDiv if they are not at the appropriate locations if (appBarFirstDiv && (this._element.children[0] !== appBarFirstDiv)) { appBarFirstDiv.parentNode.removeChild(appBarFirstDiv); appBarFirstDiv = null; } if (appBarFinalDiv && (this._element.children[this._element.children.length - 1] !== appBarFinalDiv)) { appBarFinalDiv.parentNode.removeChild(appBarFinalDiv); appBarFinalDiv = null; } // Create and add the firstDiv & finalDiv if they don't already exist if (!appBarFirstDiv) { // Add a firstDiv that will be the first child of the appBar. // On focus set focus to the last element of the AppBar. appBarFirstDiv = _Global.document.createElement("div"); // display: inline is needed so that the div doesn't take up space and cause the page to scroll on focus appBarFirstDiv.style.display = "inline"; appBarFirstDiv.className = _Constants.firstDivClass; appBarFirstDiv.tabIndex = -1; appBarFirstDiv.setAttribute("aria-hidden", "true"); _ElementUtilities._addEventListener(appBarFirstDiv, "focusin", this._focusOnLastFocusableElementOrThis.bind(this), false); // add to beginning if (this._element.children[0]) { this._element.insertBefore(appBarFirstDiv, this._element.children[0]); } else { this._element.appendChild(appBarFirstDiv); } } if (!appBarFinalDiv) { // Add a finalDiv that will be the last child of the appBar. // On focus set focus to the first element of the AppBar. appBarFinalDiv = _Global.document.createElement("div"); // display: inline is needed so that the div doesn't take up space and cause the page to scroll on focus appBarFinalDiv.style.display = "inline"; appBarFinalDiv.className = _Constants.finalDivClass; appBarFinalDiv.tabIndex = -1; appBarFinalDiv.setAttribute("aria-hidden", "true"); _ElementUtilities._addEventListener(appBarFinalDiv, "focusin", this._focusOnFirstFocusableElementOrThis.bind(this), false); this._element.appendChild(appBarFinalDiv); } // invokeButton should be the second to last element in the _LegacyAppBar's tab order. Second to the finalDiv. if (this._element.children[this._element.children.length - 2] !== this._invokeButton) { this._element.insertBefore(this._invokeButton, appBarFinalDiv); } var elms = this._element.getElementsByTagName("*"); var highestTabIndex = _ElementUtilities._getHighestTabIndexInList(elms); this._invokeButton.tabIndex = highestTabIndex; // Update the tabIndex of the firstDiv & finalDiv if (appBarFirstDiv) { appBarFirstDiv.tabIndex = _ElementUtilities._getLowestTabIndexInList(elms); } if (appBarFinalDiv) { appBarFinalDiv.tabIndex = highestTabIndex; } }, _writeProfilerMark: function _LegacyAppBar_writeProfilerMark(text) { _WriteProfilerMark("WinJS.UI._LegacyAppBar:" + this._id + ":" + text); } }, { // Statics _Events: EVENTS, }); return _LegacyAppBar; }) }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. // Menu /// Menu,Menus,Flyout,Flyouts,Statics define('WinJS/Controls/Menu',[ 'exports', '../Core/_Global', '../Core/_Base', '../Core/_BaseUtils', '../Core/_ErrorFromName', '../Core/_Resources', '../Core/_WriteProfilerMark', '../Promise', '../Utilities/_ElementUtilities', '../Utilities/_Hoverable', '../Utilities/_KeyboardBehavior', './_LegacyAppBar/_Constants', './Flyout', './Flyout/_Overlay', './Menu/_Command' ], function menuInit(exports, _Global, _Base, _BaseUtils, _ErrorFromName, _Resources, _WriteProfilerMark, Promise, _ElementUtilities, _Hoverable, _KeyboardBehavior, _Constants, Flyout, _Overlay, _Command) { "use strict"; _Base.Namespace._moduleDefine(exports, "WinJS.UI", { /// /// Represents a menu flyout for displaying commands. /// /// /// Menu /// /// /// /// /// ]]> /// Raised just before showing a menu. /// Raised immediately after a menu is fully shown. /// Raised just before hiding a menu. /// Raised immediately after a menu is fully hidden. /// The Menu control itself /// /// Menu: _Base.Namespace._lazy(function () { var Key = _ElementUtilities.Key; var strings = { get ariaLabel() { return _Resources._getWinJSString("ui/menuAriaLabel").value; }, get requiresCommands() { return "Invalid argument: commands must not be empty"; }, get nullCommand() { return "Invalid argument: command must not be null"; }, }; function isCommandInMenu(object) { // Verifies that we have a menuCommand element and that it is in a Menu. var element = object.element || object; return _ElementUtilities._matchesSelector(element, "." + _Constants.menuClass + " " + "." + _Constants.menuCommandClass); } var Menu = _Base.Class.derive(Flyout.Flyout, function Menu_ctor(element, options) { /// /// /// Creates a new Menu control. /// /// /// The DOM element that will host the control. /// /// /// The set of properties and values to apply to the control. /// /// The new Menu control. /// /// // We need to be built on top of a Flyout, so stomp on the user's input options = options || {}; // Make sure there's an input element this._element = element || _Global.document.createElement("div"); this._id = this._element.id || _ElementUtilities._uniqueID(this._element); this._writeProfilerMark("constructor,StartTM"); // validate that if they didn't set commands, in which // case any HTML only contains commands. Do this first // so that we don't leave partial Menus in the DOM. if (!options.commands && this._element) { // Shallow copy object so we can modify it. options = _BaseUtils._shallowCopy(options); options.commands = this._verifyCommandsOnly(this._element, "WinJS.UI.MenuCommand"); } // Remember aria role in case base constructor changes it var role = this._element ? this._element.getAttribute("role") : null; var label = this._element ? this._element.getAttribute("aria-label") : null; // Call the base overlay constructor helper this._baseFlyoutConstructor(this._element, options); // Make sure we have an ARIA role if (role === null || role === "" || role === undefined) { this._element.setAttribute("role", "menu"); } if (label === null || label === "" || label === undefined) { this._element.setAttribute("aria-label", strings.ariaLabel); } // Handle "esc" & "up/down" key presses this._element.addEventListener("keydown", this._handleKeyDown.bind(this), true); this._element.addEventListener(_Constants._menuCommandInvokedEvent, this._handleCommandInvoked.bind(this), false); this._element.addEventListener("mouseover", this._handleMouseOver.bind(this), false); this._element.addEventListener("mouseout", this._handleMouseOut.bind(this), false); // Attach our css class _ElementUtilities.addClass(this._element, _Constants.menuClass); this._winKeyboard = new _KeyboardBehavior._WinKeyboard(this._element); // Need to set our commands, making sure we're hidden first this.hide(); this._writeProfilerMark("constructor,StopTM"); }, { // Public Properties /// /// Sets the MenuCommand objects that appear in the Menu. You can set this to a single MenuCommand or an array of MenuCommand objects. /// /// commands: { set: function (value) { // Fail if trying to set when visible if (!this.hidden) { throw new _ErrorFromName("WinJS.UI.Menu.CannotChangeCommandsWhenVisible", _Resources._formatString(_Overlay._Overlay.commonstrings.cannotChangeCommandsWhenVisible, "Menu")); } // Start from scratch _ElementUtilities.empty(this._element); // In case they had only one... if (!Array.isArray(value)) { value = [value]; } // Add commands var len = value.length; for (var i = 0; i < len; i++) { this._addCommand(value[i]); } } }, getCommandById: function (id) { /// /// /// Retrieve the command with the specified ID from this Menu. If more than one command is found, all are returned. /// /// The ID of the command to find. /// /// The command found, an array of commands if more than one have the same ID, or null if no command is found. /// /// /// var commands = this.element.querySelectorAll("#" + id); var newCommands = []; for (var count = 0, len = commands.length; count < len; count++) { if (commands[count].winControl) { newCommands.push(commands[count].winControl); } } if (newCommands.length === 1) { return newCommands[0]; } else if (newCommands.length === 0) { return null; } return newCommands; }, showCommands: function (commands) { /// /// /// Shows the specified commands of the Menu. /// /// /// The commands to show. The array elements may be Menu objects, or the string identifiers (IDs) of commands. /// /// /// if (!commands) { throw new _ErrorFromName("WinJS.UI.Menu.RequiresCommands", strings.requiresCommands); } this._showCommands(commands, true); }, hideCommands: function (commands) { /// /// /// Hides the Menu. /// /// /// Required. Command or Commands to hide, either String, DOM elements, or WinJS objects. /// /// /// if (!commands) { throw new _ErrorFromName("WinJS.UI.Menu.RequiresCommands", strings.requiresCommands); } this._hideCommands(commands, true); }, showOnlyCommands: function (commands) { /// /// /// Shows the specified commands of the Menu while hiding all other commands. /// /// /// The commands to show. The array elements may be MenuCommand objects, or the string identifiers (IDs) of commands. /// /// /// if (!commands) { throw new _ErrorFromName("WinJS.UI.Menu.RequiresCommands", strings.requiresCommands); } this._showOnlyCommands(commands, true); }, show: function (anchor, placement, alignment) { /// /// /// Shows the Menu, if hidden, regardless of other states. /// /// /// The DOM element, or ID of a DOM element, to anchor the Menu. This parameter overrides the anchor property for this method call only. /// /// /// The placement of the Menu to the anchor: 'auto' (default), 'autohorizontal', 'autovertical', 'top', 'bottom', 'left', or 'right'. This parameter overrides the placement /// property for this method call only. /// /// /// For 'top' or 'bottom' placement, the alignment of the Menu to the anchor's edge: 'center' (default), 'left', or 'right'. This parameter /// overrides the alignment property for this method call only. /// /// /// // Just call private version to make appbar flags happy this._writeProfilerMark("show,StartTM"); // The corresponding "stop" profiler mark is handled in _Overlay._baseEndShow(). this._show(anchor, placement, alignment); }, _show: function Menu_show(anchor, placement, alignment) { if (!_ElementUtilities.hasClass(this.element, _Constants.menuMouseSpacingClass) && !_ElementUtilities.hasClass(this.element, _Constants.menuTouchSpacingClass)) { // The Menu's spacing shouldn't change while it is already shown. Only // add a spacing class if it doesn't already have one. It will get // removed after the Menu hides. _ElementUtilities.addClass( this.element, Flyout.Flyout._cascadeManager.inputType === _KeyboardBehavior._InputTypes.mouse || Flyout.Flyout._cascadeManager.inputType === _KeyboardBehavior._InputTypes.keyboard ? _Constants.menuMouseSpacingClass : _Constants.menuTouchSpacingClass ); } // Call flyout show this._baseFlyoutShow(anchor, placement, alignment); // Menu will need to adjust MenuCommand layouts based on the various // types of commands visible in our Menu, but only after we send the beforeshow // event, so the developer has a chance to show or hide more commands. // Flyout's _findPosition will make that call. }, _hide: function Menu_hide() { if (this._hoverPromise) { this._hoverPromise.cancel(); } Flyout.Flyout.prototype._hide.call(this); }, _beforeEndHide: function Menu_beforeEndHide() { _ElementUtilities.removeClass(this.element, _Constants.menuMouseSpacingClass); _ElementUtilities.removeClass(this.element, _Constants.menuTouchSpacingClass); Flyout.Flyout.prototype._beforeEndHide.call(this); }, _addCommand: function Menu_addCommand(command) { if (!command) { throw new _ErrorFromName("WinJS.UI.Menu.NullCommand", strings.nullCommand); } // See if it's a command already if (!command._element) { // Not a command, so assume it's options for a command command = new _Command.MenuCommand(null, command); } // If we were attached somewhere else, detach us if (command._element.parentElement) { command._element.parentElement.removeChild(command._element); } // Reattach us this._element.appendChild(command._element); }, _dispose: function Menu_dispose() { if (this._hoverPromise) { this._hoverPromise.cancel(); } Flyout.Flyout.prototype._dispose.call(this); }, _commandsUpdated: function Menu_commandsUpdated() { if (!this.hidden) { this._checkMenuCommands(); } }, // Called when we show/hide commands or by flyout's _findPosition when the Menu is showing. _checkMenuCommands: function Menu_checkMenuCommands() { var menuCommands = this._element.querySelectorAll(".win-command"), hasToggleCommands = false, hasFlyoutCommands = false; if (menuCommands) { for (var i = 0, len = menuCommands.length; i < len; i++) { var menuCommand = menuCommands[i].winControl; if (menuCommand && !menuCommand.hidden) { if (!hasToggleCommands && menuCommand.type === _Constants.typeToggle) { hasToggleCommands = true; } if (!hasFlyoutCommands && menuCommand.type === _Constants.typeFlyout) { hasFlyoutCommands = true; } } } } _ElementUtilities[hasToggleCommands ? 'addClass' : 'removeClass'](this._element, _Constants.menuContainsToggleCommandClass); _ElementUtilities[hasFlyoutCommands ? 'addClass' : 'removeClass'](this._element, _Constants.menuContainsFlyoutCommandClass); }, _handleKeyDown: function Menu_handleKeyDown(event) { if (event.keyCode === Key.upArrow) { Menu._focusOnPreviousElement(this.element); // Prevent the page from scrolling event.preventDefault(); } else if (event.keyCode === Key.downArrow) { Menu._focusOnNextElement(this.element); // Prevent the page from scrolling event.preventDefault(); } else if ((event.keyCode === Key.space || event.keyCode === Key.enter) && (this.element === _Global.document.activeElement)) { event.preventDefault(); this.hide(); } else if (event.keyCode === Key.tab) { event.preventDefault(); } }, _handleFocusIn: function Menu_handleFocusIn(event) { // Menu focuses commands on mouseover. We need to handle cases involving activated flyout commands // to ensure that mousing over different commands in a menu closes that command's sub flyout. var target = event.target; if (isCommandInMenu(target)) { var command = target.winControl; if (_ElementUtilities.hasClass(command.element, _Constants.menuCommandFlyoutActivatedClass)) { // If it's an activated 'flyout' typed command, move focus onto the command's subFlyout. // We expect this will collapse all decendant Flyouts of the subFlyout from the cascade. command.flyout.element.focus(); } else { // Deactivate any currently activated command in the Menu to subsequently trigger all subFlyouts descendants to collapse. var activatedSiblingCommand = this.element.querySelector("." + _Constants.menuCommandFlyoutActivatedClass); if (activatedSiblingCommand) { _Command.MenuCommand._deactivateFlyoutCommand(activatedSiblingCommand); } } } else if (target === this.element) { // The Menu itself is receiving focus. Rely on the Flyout base implementation to notify the cascadeManager. // We expect this will only happen when other Menu event handling code causes the Menu to focus itself. Flyout.Flyout.prototype._handleFocusIn.call(this, event); } }, _handleCommandInvoked: function Menu_handleCommandInvoked(event) { // Cascading Menus hide when invoking a command commits an action, not when invoking a command opens a subFlyout. if (this._hoverPromise) { // Prevent pending duplicate invoke triggered via hover. this._hoverPromise.cancel(); } var command = event.detail.command; if (command._type !== _Constants.typeFlyout && command._type !== _Constants.typeSeparator) { this._lightDismiss(); // Collapse all Menus/Flyouts. } }, _hoverPromise: null, _handleMouseOver: function Menu_handleMouseOver(event) { var target = event.target; if (isCommandInMenu(target)) { var command = target.winControl, that = this; if (target.focus) { target.focus(); // remove keyboard focus rect since focus has been triggered by mouse over. _ElementUtilities.removeClass(target, "win-keyboard"); if (command.type === _Constants.typeFlyout && command.flyout && command.flyout.hidden) { this._hoverPromise = this._hoverPromise || Promise.timeout(_Constants.menuCommandHoverDelay).then( function () { if (!that.hidden && !that._disposed) { command._invoke(event); } that._hoverPromise = null; }, function () { that._hoverPromise = null; }); } } } }, _handleMouseOut: function Menu_handleMouseOut(event) { var target = event.target; if (isCommandInMenu(target) && !target.contains(event.relatedTarget)) { if (target === _Global.document.activeElement) { // Menu gives focus to the menu itself this.element.focus(); } if (this._hoverPromise) { this._hoverPromise.cancel(); } } }, _writeProfilerMark: function Menu_writeProfilerMark(text) { _WriteProfilerMark("WinJS.UI.Menu:" + this._id + ":" + text); } }); // Statics // Set focus to next focusable element in the menu (loop if necessary). // Note: The loop works by first setting focus to the menu itself. If the menu is // what had focus before, then we break. Otherwise we try the first child next. // Focus remains on the menu if nothing is focusable. Menu._focusOnNextElement = function (menu) { var _currentElement = _Global.document.activeElement; do { if (_currentElement === menu) { _currentElement = _currentElement.firstElementChild; } else { _currentElement = _currentElement.nextElementSibling; } if (_currentElement) { _currentElement.focus(); } else { _currentElement = menu; } } while (_currentElement !== _Global.document.activeElement); }; // Set focus to previous focusable element in the menu (loop if necessary). // Note: The loop works by first setting focus to the menu itself. If the menu is // what had focus before, then we break. Otherwise we try the last child next. // Focus remains on the menu if nothing is focusable. Menu._focusOnPreviousElement = function (menu) { var _currentElement = _Global.document.activeElement; do { if (_currentElement === menu) { _currentElement = _currentElement.lastElementChild; } else { _currentElement = _currentElement.previousElementSibling; } if (_currentElement) { _currentElement.focus(); } else { _currentElement = menu; } } while (_currentElement !== _Global.document.activeElement); }; return Menu; }) }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/AutoSuggestBox/_SearchSuggestionManagerShim',[ 'exports', '../../_Signal', '../../Core/_Base', '../../Core/_BaseUtils', '../../Core/_Events', '../../BindingList', ], function SearchSuggestionManagerShimInit(exports, _Signal, _Base, _BaseUtils, _Events, BindingList) { "use strict"; var CollectionChange = { reset: 0, itemInserted: 1, itemRemoved: 2, itemChanged: 3 }; var SearchSuggestionKind = { Query: 0, Result: 1, Separator: 2 }; var SuggestionVectorShim = _Base.Class.derive(Array, function SuggestionVectorShim_ctor() { }, { reset: function () { this.length = 0; this.dispatchEvent("vectorchanged", { collectionChange: CollectionChange.reset, index: 0 }); }, insert: function (index, data) { this.splice(index, 0, data); this.dispatchEvent("vectorchanged", { collectionChange: CollectionChange.itemInserted, index: index }); }, remove: function (index) { this.splice(index, 1); this.dispatchEvent("vectorchanged", { collectionChange: CollectionChange.itemRemoved, index: index }); }, }); _Base.Class.mix(SuggestionVectorShim, _Events.eventMixin); var SearchSuggestionCollectionShim = _Base.Class.define(function SearchSuggestionCollectionShim_ctor() { this._data = []; }, { size: { get: function () { return this._data.length; } }, appendQuerySuggestion: function (text) { this._data.push({ kind: SearchSuggestionKind.Query, text: text }); }, appendQuerySuggestions: function (suggestions) { suggestions.forEach(this.appendQuerySuggestion.bind(this)); }, appendResultSuggestion: function (text, detailText, tag, imageUrl, imageAlternateText) { // 'image' must be null (not undefined) for SearchBox to fallback to use imageUrl instead this._data.push({ kind: SearchSuggestionKind.Result, text: text, detailText: detailText, tag: tag, imageUrl: imageUrl, imageAlternateText: imageAlternateText, image: null }); }, appendSearchSeparator: function (label) { this._data.push({ kind: SearchSuggestionKind.Separator, text: label }); } }); var SuggestionsRequestedEventArgShim = _Base.Class.define(function SuggestionsRequestedEventArgShim_ctor(queryText, language, linguisticDetails) { this._queryText = queryText; this._language = language; this._linguisticDetails = linguisticDetails; this._searchSuggestionCollection = new SearchSuggestionCollectionShim(); }, { language: { get: function () { return this._language; } }, linguisticDetails: { get: function () { return this._linguisticDetails; } }, queryText: { get: function () { return this._queryText; } }, searchSuggestionCollection: { get: function () { return this._searchSuggestionCollection; } }, getDeferral: function () { return this._deferralSignal || (this._deferralSignal = new _Signal()); }, _deferralSignal: null, }); var SearchSuggestionManagerShim = _Base.Class.define(function SearchSuggestionManagerShim_ctor() { this._updateVector = this._updateVector.bind(this); this._suggestionVector = new SuggestionVectorShim(); this._query = ""; this._history = { "": [] }; this._dataSource = []; this.searchHistoryContext = ""; this.searchHistoryEnabled = true; }, { addToHistory: function (queryText /*, language */) { if (!queryText || !queryText.trim()) { return; } var history = this._history[this.searchHistoryContext]; var dupeIndex = -1; for (var i = 0, l = history.length; i < l; i++) { var item = history[i]; if (item.text.toLowerCase() === queryText.toLowerCase()) { dupeIndex = i; break; } } if (dupeIndex >= 0) { history.splice(dupeIndex, 1); } history.splice(0, 0, { text: queryText, kind: SearchSuggestionKind.Query }); this._updateVector(); }, clearHistory: function () { this._history[this.searchHistoryContext] = []; this._updateVector(); }, setLocalContentSuggestionSettings: function (settings) { }, setQuery: function (queryText) { var that = this; function update(arr) { that._dataSource = arr; that._updateVector(); } this._query = queryText; var arg = new SuggestionsRequestedEventArgShim(queryText); this.dispatchEvent("suggestionsrequested", { request: arg }); if (arg._deferralSignal) { arg._deferralSignal.promise.then(update.bind(this, arg.searchSuggestionCollection._data)); } else { update(arg.searchSuggestionCollection._data); } }, searchHistoryContext: { get: function () { return "" + this._searchHistoryContext; }, set: function (value) { value = "" + value; if (!this._history[value]) { this._history[value] = []; } this._searchHistoryContext = value; } }, searchHistoryEnabled: { get: function () { return this._searchHistoryEnabled; }, set: function (value) { this._searchHistoryEnabled = value; } }, suggestions: { get: function () { return this._suggestionVector; } }, _updateVector: function () { // Can never clear the entire suggestions list or it will cause a visual flash because // the SearchBox control removes the suggestions list UI when the SSM fires vectorChanged // with size === 0, then re-renders it when the first suggestion is added. // Workaround is to insert a dummy entry, remove all old entries, add the new set of // eligible suggestions, then remove the dummy entry. this.suggestions.insert(this.suggestions.length, { text: "", kind: SearchSuggestionKind.Query }); while (this.suggestions.length > 1) { this.suggestions.remove(0); } var index = 0; var added = {}; if (this.searchHistoryEnabled) { var q = this._query.toLowerCase(); this._history[this.searchHistoryContext].forEach(function (item) { var text = item.text.toLowerCase(); if (text.indexOf(q) === 0) { this.suggestions.insert(index, item); added[text] = true; index++; } }, this); } this._dataSource.forEach(function (item) { if (item.kind === SearchSuggestionKind.Query) { if (!added[item.text.toLowerCase()]) { this.suggestions.insert(index, item); index++; } } else { this.suggestions.insert(index, item); index++; } }, this); this.suggestions.remove(this.suggestions.length - 1); }, }); _Base.Class.mix(SearchSuggestionManagerShim, _Events.eventMixin); _Base.Namespace._moduleDefine(exports, null, { _CollectionChange: CollectionChange, _SearchSuggestionKind: SearchSuggestionKind, _SearchSuggestionManagerShim: SearchSuggestionManagerShim, }); }); define('require-style!less/styles-autosuggestbox',[],function(){}); define('require-style!less/colors-autosuggestbox',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/AutoSuggestBox',[ "exports", "../Core/_Global", "../Core/_WinRT", "../Core/_Base", "../Core/_ErrorFromName", "../Core/_Events", "../Core/_Resources", "../Utilities/_Control", "../Utilities/_ElementListUtilities", "../Utilities/_ElementUtilities", '../Utilities/_Hoverable', "../_Accents", "../Animations", "../BindingList", "../Promise", "./Repeater", "./AutoSuggestBox/_SearchSuggestionManagerShim", "require-style!less/styles-autosuggestbox", "require-style!less/colors-autosuggestbox" ], function autoSuggestBoxInit(exports, _Global, _WinRT, _Base, _ErrorFromName, _Events, _Resources, _Control, _ElementListUtilities, _ElementUtilities, _Hoverable, _Accents, Animations, BindingList, Promise, Repeater, _SuggestionManagerShim) { "use strict"; _Accents.createAccentRule("html.win-hoverable .win-autosuggestbox .win-autosuggestbox-suggestion-selected:hover", [{ name: "background-color", value: _Accents.ColorTypes.listSelectHover }]); _Accents.createAccentRule(".win-autosuggestbox .win-autosuggestbox-suggestion-selected", [{ name: "background-color", value: _Accents.ColorTypes.listSelectRest }]); _Accents.createAccentRule(".win-autosuggestbox .win-autosuggestbox-suggestion-selected.win-autosuggestbox-suggestion-selected:hover:active", [{ name: "background-color", value: _Accents.ColorTypes.listSelectPress }]); var ClassNames = { asb: "win-autosuggestbox", asbDisabled: "win-autosuggestbox-disabled", asbFlyout: "win-autosuggestbox-flyout", asbFlyoutAbove: "win-autosuggestbox-flyout-above", asbBoxFlyoutHighlightText: "win-autosuggestbox-flyout-highlighttext", asbHitHighlightSpan: "win-autosuggestbox-hithighlight-span", asbInput: "win-autosuggestbox-input", asbInputFocus: "win-autosuggestbox-input-focus", asbSuggestionQuery: "win-autosuggestbox-suggestion-query", asbSuggestionResult: "win-autosuggestbox-suggestion-result", asbSuggestionResultText: "win-autosuggestbox-suggestion-result-text", asbSuggestionResultDetailedText: "win-autosuggestbox-suggestion-result-detailed-text", asbSuggestionSelected: "win-autosuggestbox-suggestion-selected", asbSuggestionSeparator: "win-autosuggestbox-suggestion-separator", }; _Base.Namespace._moduleDefine(exports, "WinJS.UI", { /// /// /// A rich input box that provides suggestions as the user types. /// /// /// /// /// /// ]]> /// Raised when user or app changes the query text. /// Raised when user presses Enter. /// Raised when user clicks one of the displayed suggestions. /// Raised when the system requests suggestions from this app. /// Styles the entire Auto Suggest Box control. /// Styles the query input box. /// Styles the result suggestions flyout. /// Styles the query type suggestion. /// Styles the result type suggestion. /// Styles the currently selected suggestion. /// Styles the separator type suggestion. /// /// AutoSuggestBox: _Base.Namespace._lazy(function () { var Key = _ElementUtilities.Key; var EventNames = { querychanged: "querychanged", querysubmitted: "querysubmitted", resultsuggestionchosen: "resultsuggestionchosen", suggestionsrequested: "suggestionsrequested" }; var Strings = { get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; }, get invalidSuggestionKind() { return "Error: Invalid suggestion kind."; }, get ariaLabel() { return _Resources._getWinJSString("ui/autoSuggestBoxAriaLabel").value; }, get ariaLabelInputNoPlaceHolder() { return _Resources._getWinJSString("ui/autoSuggestBoxAriaLabelInputNoPlaceHolder").value; }, get ariaLabelInputPlaceHolder() { return _Resources._getWinJSString("ui/autoSuggestBoxAriaLabelInputPlaceHolder").value; }, get ariaLabelQuery() { return _Resources._getWinJSString("ui/autoSuggestBoxAriaLabelQuery").value; }, get ariaLabelResult() { return _Resources._getWinJSString("ui/autoSuggestBoxAriaLabelResult").value; }, get ariaLabelSeparator() { return _Resources._getWinJSString("ui/autoSuggestBoxAriaLabelSeparator").value; }, }; var AutoSuggestBox = _Base.Class.define(function asb_ctor(element, options) { /// /// /// Creates a new AutoSuggestBox. /// /// /// The DOM element that hosts the AutoSuggestBox. /// /// /// An object that contains one or more property/value pairs to apply to the new control. /// Each property of the options object corresponds to one of the control's properties or events. /// Event names must begin with "on". For example, to provide a handler for the querychanged event, /// add a property named "onquerychanged" to the options object and set its value to the event handler. /// This parameter is optional. /// /// /// The new AutoSuggestBox. /// /// /// element = element || _Global.document.createElement("div"); options = options || {}; if (element.winControl) { throw new _ErrorFromName("WinJS.UI.AutoSuggestBox.DuplicateConstruction", Strings.duplicateConstruction); } this._suggestionsChangedHandler = this._suggestionsChangedHandler.bind(this); this._suggestionsRequestedHandler = this._suggestionsRequestedHandler.bind(this); this._element = element; element.winControl = this; element.classList.add(ClassNames.asb); element.classList.add("win-disposable"); this._setupDOM(); this._setupSSM(); this._chooseSuggestionOnEnter = false; this._currentFocusedIndex = -1; this._currentSelectedIndex = -1; this._flyoutOpenPromise = Promise.wrap(); this._lastKeyPressLanguage = ""; this._prevLinguisticDetails = this._getLinguisticDetails(); this._prevQueryText = ""; _Control.setOptions(this, options); this._hideFlyout(); }, { /// /// Raised when user clicks on one of the suggestions displayed. /// /// onresultsuggestionchosen: _Events._createEventProperty(EventNames.resultsuggestionchosen), /// /// Raised when user or app changes the query text. /// /// onquerychanged: _Events._createEventProperty(EventNames.querychanged), /// /// Raised when user submits the current query. /// /// onquerysubmitted: _Events._createEventProperty(EventNames.querysubmitted), /// /// Raised when Windows requests search suggestions from the app. /// /// onsuggestionsrequested: _Events._createEventProperty(EventNames.suggestionsrequested), /// element: { get: function () { return this._element; } }, /// /// Gets or sets whether the first suggestion is chosen when the user presses Enter. When set to true, as the user types in the input box, a /// focus rectangle is drawn on the first suggestion (if present and no IME composition in progress). Pressing enter will behave the same as /// if clicked on the focused suggestion, and the down arrow key press will put real focus to the second suggestion and the up arrow key will /// remove focus. /// /// chooseSuggestionOnEnter: { get: function () { return this._chooseSuggestionOnEnter; }, set: function (value) { this._chooseSuggestionOnEnter = !!value; } }, /// /// Gets or sets a value that specifies whether the AutoSuggestBox is disabled. /// /// disabled: { get: function () { return this._inputElement.disabled; }, set: function (value) { if (this._inputElement.disabled === !!value) { return; } if (!value) { this._enableControl(); } else { this._disableControl(); } } }, /// /// Gets or sets the placeholder text for the AutoSuggestBox. This text is displayed if there is no other text in the input box. /// /// placeholderText: { get: function () { return this._inputElement.placeholder; }, set: function (value) { this._inputElement.placeholder = value; this._updateInputElementAriaLabel(); } }, /// /// Gets or sets the query text for the AutoSuggestBox. /// /// queryText: { get: function () { return this._inputElement.value; }, set: function (value) { this._inputElement.value = ""; // This finalizes the IME composition this._inputElement.value = value; } }, /// /// Gets or sets a value that specifies whether history is disabled for the AutoSuggestBox. The default value is false. /// /// searchHistoryDisabled: { get: function () { return !this._suggestionManager.searchHistoryEnabled; }, set: function (value) { this._suggestionManager.searchHistoryEnabled = !value; } }, /// /// Gets or sets the search history context for the AutoSuggestBox. The search history context string is used as a secondary key for storing search history. /// (The primary key is the AppId.) An app can use the search history context string to store different search histories based on the context of the application. /// If you don't set this property, the system assumes that all searches in your app occur in the same context. /// If you update this property while the search pane is open with suggestions showing, the changes won't take effect until the user enters the next character. /// /// searchHistoryContext: { get: function () { return this._suggestionManager.searchHistoryContext; }, set: function (value) { this._suggestionManager.searchHistoryContext = value; } }, dispose: function asb_dispose() { /// /// /// Disposes this control. /// /// /// if (this._disposed) { return; } // Cancel pending promises. this._flyoutOpenPromise.cancel(); this._suggestions.removeEventListener("vectorchanged", this._suggestionsChangedHandler); this._suggestionManager.removeEventListener("suggestionsrequested", this._suggestionsRequestedHandler); this._suggestionManager = null; this._suggestions = null; this._hitFinder = null; this._disposed = true; }, setLocalContentSuggestionSettings: function asb_setLocalContentSuggestionSettings(settings) { /// /// /// Specifies whether suggestions based on local files are automatically displayed in the input field, and defines the criteria that /// the system uses to locate and filter these suggestions. /// /// /// The new settings for local content suggestions. /// /// /// this._suggestionManager.setLocalContentSuggestionSettings(settings); }, // Constructor Helpers _setupDOM: function asb_setupDOM() { var flyoutPointerReleasedHandler = this._flyoutPointerReleasedHandler.bind(this); var inputOrImeChangeHandler = this._inputOrImeChangeHandler.bind(this); // Root element if (!this._element.getAttribute("aria-label")) { this._element.setAttribute("aria-label", Strings.ariaLabel); } this._element.setAttribute("role", "group"); // Input element this._inputElement = _Global.document.createElement("input"); this._inputElement.autocorrect = "off"; this._inputElement.type = "search"; this._inputElement.classList.add(ClassNames.asbInput); this._inputElement.classList.add("win-textbox"); this._inputElement.setAttribute("role", "textbox"); this._inputElement.addEventListener("keydown", this._keyDownHandler.bind(this)); this._inputElement.addEventListener("keypress", this._keyPressHandler.bind(this)); this._inputElement.addEventListener("keyup", this._keyUpHandler.bind(this)); this._inputElement.addEventListener("focus", this._inputFocusHandler.bind(this)); this._inputElement.addEventListener("blur", this._inputBlurHandler.bind(this)); this._inputElement.addEventListener("input", inputOrImeChangeHandler); this._inputElement.addEventListener("compositionstart", inputOrImeChangeHandler); this._inputElement.addEventListener("compositionupdate", inputOrImeChangeHandler); this._inputElement.addEventListener("compositionend", inputOrImeChangeHandler); _ElementUtilities._addEventListener(this._inputElement, "pointerdown", this._inputPointerDownHandler.bind(this)); this._updateInputElementAriaLabel(); this._element.appendChild(this._inputElement); var context = this._tryGetInputContext(); if (context) { context.addEventListener("MSCandidateWindowShow", this._msCandidateWindowShowHandler.bind(this)); context.addEventListener("MSCandidateWindowHide", this._msCandidateWindowHideHandler.bind(this)); } // Flyout element this._flyoutElement = _Global.document.createElement("div"); this._flyoutElement.classList.add(ClassNames.asbFlyout); this._flyoutElement.addEventListener("blur", this._flyoutBlurHandler.bind(this)); _ElementUtilities._addEventListener(this._flyoutElement, "pointerup", flyoutPointerReleasedHandler); _ElementUtilities._addEventListener(this._flyoutElement, "pointercancel", flyoutPointerReleasedHandler); _ElementUtilities._addEventListener(this._flyoutElement, "pointerout", flyoutPointerReleasedHandler); _ElementUtilities._addEventListener(this._flyoutElement, "pointerdown", this._flyoutPointerDownHandler.bind(this)); this._element.appendChild(this._flyoutElement); // Repeater var that = this; function repeaterTemplate(suggestion) { return that._renderSuggestion(suggestion); } this._suggestionsData = new BindingList.List(); this._repeaterElement = _Global.document.createElement("div"); this._repeater = new Repeater.Repeater(this._repeaterElement, { data: this._suggestionsData, template: repeaterTemplate, }); _ElementUtilities._ensureId(this._repeaterElement); this._repeaterElement.setAttribute("role", "listbox"); this._repeaterElement.setAttribute("aria-live", "polite"); this._flyoutElement.appendChild(this._repeaterElement); }, _setupSSM: function asb_setupSSM() { // Get the search suggestion provider if it is available this._suggestionManager = new _SuggestionManagerShim._SearchSuggestionManagerShim(); this._suggestions = this._suggestionManager.suggestions; this._suggestions.addEventListener("vectorchanged", this._suggestionsChangedHandler); this._suggestionManager.addEventListener("suggestionsrequested", this._suggestionsRequestedHandler); }, // Flyout functions _hideFlyout: function asb_hideFlyout() { if (this._isFlyoutShown()) { this._flyoutElement.style.display = "none"; } }, _showFlyout: function asb_showFlyout() { var prevNumSuggestions = this._prevNumSuggestions || 0; this._prevNumSuggestions = this._suggestionsData.length; if (this._isFlyoutShown() && prevNumSuggestions === this._suggestionsData.length) { return; } if (this._suggestionsData.length === 0) { return; } this._flyoutElement.style.display = "block"; var inputRect = this._inputElement.getBoundingClientRect(); var flyoutRect = this._flyoutElement.getBoundingClientRect(); var documentClientWidth = _Global.document.documentElement.clientWidth; // Display above vs below - the ASB flyout always opens in the direction where there is more space var spaceAbove = inputRect.top; var spaceBelow = _Global.document.documentElement.clientHeight - inputRect.bottom; this._flyoutBelowInput = spaceBelow >= spaceAbove; if (this._flyoutBelowInput) { this._flyoutElement.classList.remove(ClassNames.asbFlyoutAbove); this._flyoutElement.scrollTop = 0; } else { this._flyoutElement.classList.add(ClassNames.asbFlyoutAbove); this._flyoutElement.scrollTop = this._flyoutElement.scrollHeight - this._flyoutElement.clientHeight; } this._addFlyoutIMEPaddingIfRequired(); // Align left vs right edge var alignRight; if (_Global.getComputedStyle(this._flyoutElement).direction === "rtl") { // RTL: Align to the right edge if there is enough space to the left of the control's // right edge, or if there is not enough space to fit the flyout aligned to either edge. alignRight = ((inputRect.right - flyoutRect.width) >= 0) || ((inputRect.left + flyoutRect.width) > documentClientWidth); } else { // LTR: Align to the right edge if there isn't enough space to the right of the control's // left edge, but there is enough space to the left of the control's right edge. alignRight = ((inputRect.left + flyoutRect.width) > documentClientWidth) && ((inputRect.right - flyoutRect.width) >= 0); } if (alignRight) { this._flyoutElement.style.left = (inputRect.width - flyoutRect.width - this._element.clientLeft) + "px"; } else { this._flyoutElement.style.left = "-" + this._element.clientLeft + "px"; } // ms-scroll-chaining:none will still chain scroll parent element if child div does // not have a scroll bar. Prevent this by setting and updating touch action this._flyoutElement.style.touchAction = this._flyoutElement.scrollHeight > flyoutRect.height ? "pan-y" : "none"; this._flyoutOpenPromise.cancel(); var animationKeyframe = this._flyoutBelowInput ? "WinJS-flyoutBelowASB-showPopup" : "WinJS-flyoutAboveASB-showPopup"; this._flyoutOpenPromise = Animations.showPopup(this._flyoutElement, { top: "0px", left: "0px", keyframe: animationKeyframe }); }, _addFlyoutIMEPaddingIfRequired: function asb_addFlyoutIMEPaddingIfRequired() { // Check if we have InputContext APIs var context = this._tryGetInputContext(); if (!context) { return; } // Check if flyout is visible and below input if (!this._isFlyoutShown() || !this._flyoutBelowInput) { return; } // Check if IME is occluding flyout var flyoutRect = this._flyoutElement.getBoundingClientRect(); var imeRect = context.getCandidateWindowClientRect(); var inputRect = this._inputElement.getBoundingClientRect(); var flyoutTop = inputRect.bottom; var flyoutBottom = inputRect.bottom + flyoutRect.height; if (imeRect.top > flyoutBottom || imeRect.bottom < flyoutTop) { return; } // Shift the flyout down or to the right depending on IME/ASB width ratio. // When the IME width is less than 45% of the ASB's width, the flyout gets // shifted right, otherwise shifted down. var animation = Animations.createRepositionAnimation(this._flyoutElement); if (imeRect.width < (inputRect.width * 0.45)) { this._flyoutElement.style.marginLeft = imeRect.width + "px"; } else { this._flyoutElement.style.marginTop = (imeRect.bottom - imeRect.top + 4) + "px"; } animation.execute(); }, _findNextSuggestionElementIndex: function asb_findNextSuggestionElementIndex(curIndex) { // Returns -1 if there are no focusable elements after curIndex // Returns first element if curIndex < 0 var startIndex = curIndex < 0 ? 0 : curIndex + 1; for (var i = startIndex; i < this._suggestionsData.length; i++) { if ((this._repeater.elementFromIndex(i)) && (this._isSuggestionSelectable(this._suggestionsData.getAt(i)))) { return i; } } return -1; }, _findPreviousSuggestionElementIndex: function asb_findPreviousSuggestionElementIndex(curIndex) { // Returns -1 if there are no focusable elements before curIndex // Returns last element if curIndex >= suggestionsdata.length var startIndex = curIndex >= this._suggestionsData.length ? this._suggestionsData.length - 1 : curIndex - 1; for (var i = startIndex; i >= 0; i--) { if ((this._repeater.elementFromIndex(i)) && (this._isSuggestionSelectable(this._suggestionsData.getAt(i)))) { return i; } } return -1; }, _isFlyoutShown: function asb_isFlyoutShown() { return (this._flyoutElement.style.display !== "none"); }, _isSuggestionSelectable: function asb_isSuggestionSelectable(suggestion) { return ((suggestion.kind === _SuggestionManagerShim._SearchSuggestionKind.Query) || (suggestion.kind === _SuggestionManagerShim._SearchSuggestionKind.Result)); }, _processSuggestionChosen: function asb_processSuggestionChosen(item, event) { this.queryText = item.text; if (item.kind === _SuggestionManagerShim._SearchSuggestionKind.Query) { this._submitQuery(item.text, false /*fillLinguisticDetails*/, event); // force empty linguistic details since explicitly chosen suggestion from list } else if (item.kind === _SuggestionManagerShim._SearchSuggestionKind.Result) { this._fireEvent(EventNames.resultsuggestionchosen, { tag: item.tag, keyModifiers: getKeyModifiers(event), storageFile: null }); } this._hideFlyout(); }, _selectSuggestionAtIndex: function asb_selectSuggestionAtIndex(indexToSelect) { var that = this; function scrollToView(targetElement) { var popupHeight = that._flyoutElement.getBoundingClientRect().bottom - that._flyoutElement.getBoundingClientRect().top; if ((targetElement.offsetTop + targetElement.offsetHeight) > (that._flyoutElement.scrollTop + popupHeight)) { // Element to scroll is below popup visible area var scrollDifference = (targetElement.offsetTop + targetElement.offsetHeight) - (that._flyoutElement.scrollTop + popupHeight); _ElementUtilities._zoomTo(that._flyoutElement, { contentX: 0, contentY: (that._flyoutElement.scrollTop + scrollDifference), viewportX: 0, viewportY: 0 }); } else if (targetElement.offsetTop < that._flyoutElement.scrollTop) { // Element to scroll is above popup visible area _ElementUtilities._zoomTo(that._flyoutElement, { contentX: 0, contentY: targetElement.offsetTop, viewportX: 0, viewportY: 0 }); } } // Sets focus on the specified element and removes focus from others. // Clears selection if index is outside of suggestiondata index range. var curElement = null; for (var i = 0; i < this._suggestionsData.length; i++) { curElement = this._repeater.elementFromIndex(i); if (i !== indexToSelect) { curElement.classList.remove(ClassNames.asbSuggestionSelected); curElement.setAttribute("aria-selected", "false"); } else { curElement.classList.add(ClassNames.asbSuggestionSelected); scrollToView(curElement); curElement.setAttribute("aria-selected", "true"); } } this._currentSelectedIndex = indexToSelect; if (curElement) { this._inputElement.setAttribute("aria-activedescendant", this._repeaterElement.id + indexToSelect); } else if (this._inputElement.hasAttribute("aria-activedescendant")) { this._inputElement.removeAttribute("aria-activedescendant"); } }, _updateFakeFocus: function asb_updateFakeFocus() { var firstElementIndex; if (this._isFlyoutShown() && (this._chooseSuggestionOnEnter)) { firstElementIndex = this._findNextSuggestionElementIndex(-1); } else { // This will clear the fake focus. firstElementIndex = -1; } this._selectSuggestionAtIndex(firstElementIndex); }, _updateQueryTextWithSuggestionText: function asb_updateQueryTextWithSuggestionText(suggestionIndex) { if ((suggestionIndex >= 0) && (suggestionIndex < this._suggestionsData.length)) { this.queryText = this._suggestionsData.getAt(suggestionIndex).text; } }, // Helpers _disableControl: function asb_disableControl() { if (this._isFlyoutShown()) { this._hideFlyout(); } this._element.disabled = true; this._element.classList.add(ClassNames.asbDisabled); this._inputElement.disabled = true; }, _enableControl: function asb_enableControl() { this._element.disabled = false; this._element.classList.remove(ClassNames.asbDisabled); this._inputElement.disabled = false; if (_Global.document.activeElement === this._element) { _ElementUtilities._setActive(this._inputElement); } }, _fireEvent: function asb_fireEvent(type, detail) { // Returns true if ev.preventDefault() was not called var event = _Global.document.createEvent("CustomEvent"); event.initCustomEvent(type, true, true, detail); return this._element.dispatchEvent(event); }, _getLinguisticDetails: function asb_getLinguisticDetails(useCache, createFilled) { // createFilled=false always creates an empty linguistic details object, otherwise generate it or use the cache function createQueryLinguisticDetails(compositionAlternatives, compositionStartOffset, compositionLength, queryTextPrefix, queryTextSuffix) { var linguisticDetails = null; // The linguistic alternatives we receive are only for the composition string being composed. We need to provide the linguistic alternatives // in the form of the full query text with alternatives embedded. var fullCompositionAlternatives = []; for (var i = 0; i < compositionAlternatives.length; i++) { fullCompositionAlternatives[i] = queryTextPrefix + compositionAlternatives[i] + queryTextSuffix; } if (_WinRT.Windows.ApplicationModel.Search.SearchQueryLinguisticDetails) { try { linguisticDetails = new _WinRT.Windows.ApplicationModel.Search.SearchQueryLinguisticDetails(fullCompositionAlternatives, compositionStartOffset, compositionLength); } catch (e) { // WP10 currently exposes SQLD API but throws on instantiation. } } if (!linguisticDetails) { // If we're in web compartment, create a script version of the WinRT SearchQueryLinguisticDetails object linguisticDetails = { queryTextAlternatives: fullCompositionAlternatives, queryTextCompositionStart: compositionStartOffset, queryTextCompositionLength: compositionLength }; } return linguisticDetails; } var linguisticDetails = null; if ((this._inputElement.value === this._prevQueryText) && useCache && this._prevLinguisticDetails && createFilled) { linguisticDetails = this._prevLinguisticDetails; } else { var compositionAlternatives = []; var compositionStartOffset = 0; var compositionLength = 0; var queryTextPrefix = ""; var queryTextSuffix = ""; if (createFilled) { var context = this._tryGetInputContext(); if (context && context.getCompositionAlternatives) { compositionAlternatives = context.getCompositionAlternatives(); compositionStartOffset = context.compositionStartOffset; compositionLength = context.compositionEndOffset - context.compositionStartOffset; if ((this._inputElement.value !== this._prevQueryText) || (this._prevCompositionLength === 0) || (compositionLength > 0)) { queryTextPrefix = this._inputElement.value.substring(0, compositionStartOffset); queryTextSuffix = this._inputElement.value.substring(compositionStartOffset + compositionLength); } else { // composition ended, but alternatives have been kept, need to reuse the previous query prefix/suffix, but still report to the client that the composition has ended (start & length of composition of 0) queryTextPrefix = this._inputElement.value.substring(0, this._prevCompositionStart); queryTextSuffix = this._inputElement.value.substring(this._prevCompositionStart + this._prevCompositionLength); } } } linguisticDetails = createQueryLinguisticDetails(compositionAlternatives, compositionStartOffset, compositionLength, queryTextPrefix, queryTextSuffix); } return linguisticDetails; }, _isElementInSearchControl: function asb_isElementInSearchControl(targetElement) { return this.element.contains(targetElement) || (this.element === targetElement); }, _renderSuggestion: function asb_renderSuggestion(suggestion) { var root = null; if (!suggestion) { return root; } if (suggestion.kind === _SuggestionManagerShim._SearchSuggestionKind.Query) { root = querySuggestionRenderer(this, suggestion); } else if (suggestion.kind === _SuggestionManagerShim._SearchSuggestionKind.Separator) { root = separatorSuggestionRenderer(suggestion); } else if (suggestion.kind === _SuggestionManagerShim._SearchSuggestionKind.Result) { root = resultSuggestionRenderer(this, suggestion); } else { throw new _ErrorFromName("WinJS.UI.AutoSuggestBox.invalidSuggestionKind", Strings.invalidSuggestionKind); } return root; }, _shouldIgnoreInput: function asb_shouldIgnoreInput() { var processingIMEFocusLossKey = this._isProcessingDownKey || this._isProcessingUpKey || this._isProcessingTabKey || this._isProcessingEnterKey; return processingIMEFocusLossKey || this._isFlyoutPointerDown; }, _submitQuery: function asb_submitQuery(queryText, fillLinguisticDetails, event) { if (this._disposed) { return; } // get the most up to date value of the input langauge from WinRT if available if (_WinRT.Windows.Globalization.Language) { this._lastKeyPressLanguage = _WinRT.Windows.Globalization.Language.currentInputMethodLanguageTag; } this._fireEvent(EventNames.querysubmitted, { language: this._lastKeyPressLanguage, linguisticDetails: this._getLinguisticDetails(true /*useCache*/, fillLinguisticDetails), // allow caching, but generate empty linguistic details if suggestion is used queryText: queryText, keyModifiers: getKeyModifiers(event) }); if (this._suggestionManager) { this._suggestionManager.addToHistory(this._inputElement.value, this._lastKeyPressLanguage); } }, _tryGetInputContext: function asb_tryGetInputContext() { // On WP, msGetInputContext is defined but throws when invoked if (this._inputElement.msGetInputContext) { try { return this._inputElement.msGetInputContext(); } catch (e) { return null; } } return null; }, _updateInputElementAriaLabel: function asb_updateInputElementAriaLabel() { this._inputElement.setAttribute("aria-label", this._inputElement.placeholder ? _Resources._formatString(Strings.ariaLabelInputPlaceHolder, this._inputElement.placeholder) : Strings.ariaLabelInputNoPlaceHolder ); }, // Event Handlers _flyoutBlurHandler: function asb_flyoutBlurHandler(event) { if (this._isElementInSearchControl(_Global.document.activeElement)) { this._internalFocusMove = true; } else { this._element.classList.remove(ClassNames.asbInputFocus); this._hideFlyout(); } }, _flyoutPointerDownHandler: function asb_flyoutPointerDownHandler(ev) { var that = this; var srcElement = ev.target; function findSuggestionElementIndex() { if (srcElement) { for (var i = 0; i < that._suggestionsData.length; i++) { if (that._repeater.elementFromIndex(i) === srcElement) { return i; } } } return -1; } this._isFlyoutPointerDown = true; while (srcElement && (srcElement.parentNode !== this._repeaterElement)) { srcElement = srcElement.parentNode; } var index = findSuggestionElementIndex(); if ((index >= 0) && (index < this._suggestionsData.length) && (this._currentFocusedIndex !== index)) { if (this._isSuggestionSelectable(this._suggestionsData.getAt(index))) { this._currentFocusedIndex = index; this._selectSuggestionAtIndex(index); this._updateQueryTextWithSuggestionText(this._currentFocusedIndex); } } // Prevent default so focus does not leave input element. ev.preventDefault(); }, _flyoutPointerReleasedHandler: function asb_flyoutPointerReleasedHandler() { this._isFlyoutPointerDown = false; if (this._reflowImeOnPointerRelease) { this._reflowImeOnPointerRelease = false; var animation = Animations.createRepositionAnimation(this._flyoutElement); this._flyoutElement.style.marginTop = ""; this._flyoutElement.style.marginLeft = ""; animation.execute(); } }, _inputBlurHandler: function asb_inputBlurHandler(event) { // Hide flyout if focus is leaving the control if (!this._isElementInSearchControl(_Global.document.activeElement)) { this._element.classList.remove(ClassNames.asbInputFocus); this._hideFlyout(); } this.queryText = this._prevQueryText; // Finalize IME composition this._isProcessingDownKey = false; this._isProcessingUpKey = false; this._isProcessingTabKey = false; this._isProcessingEnterKey = false; }, _inputFocusHandler: function asb_inputFocusHandler(event) { // Refresh hit highlighting if text has changed since focus was present // This can happen if the user committed a suggestion previously. if (this._inputElement.value !== this._prevQueryText) { if (_WinRT.Windows.Data.Text.SemanticTextQuery) { if (this._inputElement.value !== "") { this._hitFinder = new _WinRT.Windows.Data.Text.SemanticTextQuery(this._inputElement.value, this._inputElement.lang); } else { this._hitFinder = null; } } } // If focus is returning to the input box from outside the control, show the flyout and refresh the suggestions if (event.target === this._inputElement && !this._internalFocusMove) { this._showFlyout(); if (this._currentFocusedIndex !== -1) { // Focus is not in input this._selectSuggestionAtIndex(this._currentFocusedIndex); } else { this._updateFakeFocus(); } this._suggestionManager.setQuery( this._inputElement.value, this._lastKeyPressLanguage, this._getLinguisticDetails(true /*useCache*/, true /*createFilled*/) ); } this._internalFocusMove = false; this._element.classList.add(ClassNames.asbInputFocus); }, _inputOrImeChangeHandler: function asb_inputImeChangeHandler() { var that = this; function hasLinguisticDetailsChanged(newLinguisticDetails) { var hasLinguisticDetailsChanged = false; if ((that._prevLinguisticDetails.queryTextCompositionStart !== newLinguisticDetails.queryTextCompositionStart) || (that._prevLinguisticDetails.queryTextCompositionLength !== newLinguisticDetails.queryTextCompositionLength) || (that._prevLinguisticDetails.queryTextAlternatives.length !== newLinguisticDetails.queryTextAlternatives.length)) { hasLinguisticDetailsChanged = true; } that._prevLinguisticDetails = newLinguisticDetails; return hasLinguisticDetailsChanged; } // swallow the IME change event that gets fired when composition is ended due to keyboarding down to the suggestion list & mouse down on the button if (!this._shouldIgnoreInput()) { var linguisticDetails = this._getLinguisticDetails(false /*useCache*/, true /*createFilled*/); // never cache on explicit user changes var hasLinguisticDetailsChanged = hasLinguisticDetailsChanged(linguisticDetails); // updates this._prevLinguisticDetails // Keep the previous composition cache up to date, execpt when composition ended with no text change and alternatives are kept. // In that case, we need to use the cached values to correctly generate the query prefix/suffix for substituting alternatives, but still report to the client that the composition has ended (via start & length of composition of 0) if ((this._inputElement.value !== this._prevQueryText) || (this._prevCompositionLength === 0) || (linguisticDetails.queryTextCompositionLength > 0)) { this._prevCompositionStart = linguisticDetails.queryTextCompositionStart; this._prevCompositionLength = linguisticDetails.queryTextCompositionLength; } if ((this._prevQueryText === this._inputElement.value) && !hasLinguisticDetailsChanged) { // Sometimes the input change is fired even if there is no change in input. // Swallow event in those cases. return; } this._prevQueryText = this._inputElement.value; // get the most up to date value of the input langauge from WinRT if available if (_WinRT.Windows.Globalization.Language) { this._lastKeyPressLanguage = _WinRT.Windows.Globalization.Language.currentInputMethodLanguageTag; } if (_WinRT.Windows.Data.Text.SemanticTextQuery) { if (this._inputElement.value !== "") { this._hitFinder = new _WinRT.Windows.Data.Text.SemanticTextQuery(this._inputElement.value, this._lastKeyPressLanguage); } else { this._hitFinder = null; } } this._fireEvent(EventNames.querychanged, { language: this._lastKeyPressLanguage, queryText: this._inputElement.value, linguisticDetails: linguisticDetails }); this._suggestionManager.setQuery( this._inputElement.value, this._lastKeyPressLanguage, linguisticDetails ); } }, _inputPointerDownHandler: function asb_inputPointerDownHandler() { if ((_Global.document.activeElement === this._inputElement) && (this._currentSelectedIndex !== -1)) { this._currentFocusedIndex = -1; this._selectSuggestionAtIndex(this._currentFocusedIndex); } }, _keyDownHandler: function asb_keyDownHandler(event) { var that = this; function setSelection(index) { that._currentFocusedIndex = index; that._selectSuggestionAtIndex(index); event.preventDefault(); event.stopPropagation(); } this._lastKeyPressLanguage = event.locale; if (event.keyCode === Key.tab) { this._isProcessingTabKey = true; } else if (event.keyCode === Key.upArrow) { this._isProcessingUpKey = true; } else if (event.keyCode === Key.downArrow) { this._isProcessingDownKey = true; } else if ((event.keyCode === Key.enter) && (event.locale === "ko")) { this._isProcessingEnterKey = true; } // Ignore keys handled by ime. if (event.keyCode !== Key.IME) { if (event.keyCode === Key.tab) { var closeFlyout = true; if (event.shiftKey) { if (this._currentFocusedIndex !== -1) { // Focus is not in input setSelection(-1); closeFlyout = false; } } else if (this._currentFocusedIndex === -1) { this._currentFocusedIndex = this._flyoutBelowInput ? this._findNextSuggestionElementIndex(this._currentFocusedIndex) : this._findPreviousSuggestionElementIndex(this._suggestionsData.length); if (this._currentFocusedIndex !== -1) { // Found a selectable element setSelection(this._currentFocusedIndex); this._updateQueryTextWithSuggestionText(this._currentFocusedIndex); closeFlyout = false; } } if (closeFlyout) { this._hideFlyout(); } } else if (event.keyCode === Key.escape) { if (this._currentFocusedIndex !== -1) { // Focus is not in input this.queryText = this._prevQueryText; setSelection(-1); } else if (this.queryText !== "") { this.queryText = ""; this._inputOrImeChangeHandler(null); event.preventDefault(); event.stopPropagation(); } } else if ((this._flyoutBelowInput && event.keyCode === Key.upArrow) || (!this._flyoutBelowInput && event.keyCode === Key.downArrow)) { var prevIndex; if (this._currentSelectedIndex !== -1) { prevIndex = this._findPreviousSuggestionElementIndex(this._currentSelectedIndex); // Restore user entered query when user navigates back to input. if (prevIndex === -1) { this.queryText = this._prevQueryText; } } else { prevIndex = this._findPreviousSuggestionElementIndex(this._suggestionsData.length); } setSelection(prevIndex); this._updateQueryTextWithSuggestionText(this._currentFocusedIndex); } else if ((this._flyoutBelowInput && event.keyCode === Key.downArrow) || (!this._flyoutBelowInput && event.keyCode === Key.upArrow)) { var nextIndex = this._findNextSuggestionElementIndex(this._currentSelectedIndex); // Restore user entered query when user navigates back to input. if ((this._currentSelectedIndex !== -1) && (nextIndex === -1)) { this.queryText = this._prevQueryText; } setSelection(nextIndex); this._updateQueryTextWithSuggestionText(this._currentFocusedIndex); } else if (event.keyCode === Key.enter) { if (this._currentSelectedIndex === -1) { this._submitQuery(this._inputElement.value, true /*fillLinguisticDetails*/, event); } else { this._processSuggestionChosen(this._suggestionsData.getAt(this._currentSelectedIndex), event); } this._hideFlyout(); } } }, _keyUpHandler: function asb_keyUpHandler(event) { if (event.keyCode === Key.tab) { this._isProcessingTabKey = false; } else if (event.keyCode === Key.upArrow) { this._isProcessingUpKey = false; } else if (event.keyCode === Key.downArrow) { this._isProcessingDownKey = false; } else if (event.keyCode === Key.enter) { this._isProcessingEnterKey = false; } }, _keyPressHandler: function asb_keyPressHandler(event) { this._lastKeyPressLanguage = event.locale; }, _msCandidateWindowHideHandler: function asb_msCandidateWindowHideHandler() { if (!this._isFlyoutPointerDown) { var animation = Animations.createRepositionAnimation(this._flyoutElement); this._flyoutElement.style.marginTop = ""; this._flyoutElement.style.marginLeft = ""; animation.execute(); } else { this._reflowImeOnPointerRelease = true; } }, _msCandidateWindowShowHandler: function asb_msCandidateWindowShowHandler() { this._addFlyoutIMEPaddingIfRequired(); this._reflowImeOnPointerRelease = false; }, _suggestionsChangedHandler: function asb_suggestionsChangedHandler(event) { var collectionChange = event.collectionChange || event.detail.collectionChange; var changeIndex = (+event.index === event.index) ? event.index : event.detail.index; var ChangeEnum = _SuggestionManagerShim._CollectionChange; if (collectionChange === ChangeEnum.reset) { if (this._isFlyoutShown()) { this._hideFlyout(); } this._suggestionsData.splice(0, this._suggestionsData.length); } else if (collectionChange === ChangeEnum.itemInserted) { var suggestion = this._suggestions[changeIndex]; this._suggestionsData.splice(changeIndex, 0, suggestion); this._showFlyout(); } else if (collectionChange === ChangeEnum.itemRemoved) { if ((this._suggestionsData.length === 1)) { _ElementUtilities._setActive(this._inputElement); this._hideFlyout(); } this._suggestionsData.splice(changeIndex, 1); } else if (collectionChange === ChangeEnum.itemChanged) { var suggestion = this._suggestions[changeIndex]; if (suggestion !== this._suggestionsData.getAt(changeIndex)) { this._suggestionsData.setAt(changeIndex, suggestion); } else { // If the suggestions manager gives us an identical item, it means that only the hit highlighted text has changed. var existingElement = this._repeater.elementFromIndex(changeIndex); if (_ElementUtilities.hasClass(existingElement, ClassNames.asbSuggestionQuery)) { addHitHighlightedText(existingElement, suggestion, suggestion.text); } else { var resultSuggestionDiv = existingElement.querySelector("." + ClassNames.asbSuggestionResultText); if (resultSuggestionDiv) { addHitHighlightedText(resultSuggestionDiv, suggestion, suggestion.text); var resultSuggestionDetailDiv = existingElement.querySelector("." + ClassNames.asbSuggestionResultDetailedText); if (resultSuggestionDetailDiv) { addHitHighlightedText(resultSuggestionDetailDiv, suggestion, suggestion.detailText); } } } } } if (_Global.document.activeElement === this._inputElement) { this._updateFakeFocus(); } }, _suggestionsRequestedHandler: function asb_suggestionsRequestedHandler(event) { // get the most up to date value of the input langauge from WinRT if available if (_WinRT.Windows.Globalization.Language) { this._lastKeyPressLanguage = _WinRT.Windows.Globalization.Language.currentInputMethodLanguageTag; } var request = event.request || event.detail.request; var deferral; this._fireEvent(EventNames.suggestionsrequested, { setPromise: function (promise) { deferral = request.getDeferral(); promise.then(function () { deferral.complete(); }); }, searchSuggestionCollection: request.searchSuggestionCollection, language: this._lastKeyPressLanguage, linguisticDetails: this._getLinguisticDetails(true /*useCache*/, true /*createFilled*/), queryText: this._inputElement.value }); }, }, { createResultSuggestionImage: function asb_createResultSuggestionImage(url) { /// /// /// Creates the image argument for SearchSuggestionCollection.appendResultSuggestion. /// /// /// The url of the image. /// /// /// if (_WinRT.Windows.Foundation.Uri && _WinRT.Windows.Storage.Streams.RandomAccessStreamReference) { return _WinRT.Windows.Storage.Streams.RandomAccessStreamReference.createFromUri(new _WinRT.Windows.Foundation.Uri(url)); } return url; }, _EventNames: EventNames, _sortAndMergeHits: function asb_sortAndMergeHits(hitsProvided) { function hitStartPositionAscendingSorter(firstHit, secondHit) { var returnValue = 0; if (firstHit.startPosition < secondHit.startPosition) { returnValue = -1; } else if (firstHit.startPosition > secondHit.startPosition) { returnValue = 1; } return returnValue; } function hitIntersectionReducer(reducedHits, nextHit, currentIndex) { if (currentIndex === 0) { reducedHits.push(nextHit); } else { var curHit = reducedHits[reducedHits.length - 1]; var curHitEndPosition = curHit.startPosition + curHit.length; if (nextHit.startPosition <= curHitEndPosition) { // The next hit intersects or is next to current hit. Merge it. var nextHitEndPosition = nextHit.startPosition + nextHit.length; if (nextHitEndPosition > curHitEndPosition) { curHit.length = nextHitEndPosition - curHit.startPosition; } } else { // No intersection, simply add to reduced list. reducedHits.push(nextHit); } } return reducedHits; } var reducedHits = []; if (hitsProvided) { // Copy hitsprovided array as winrt objects are immutable. var hits = new Array(hitsProvided.length); for (var i = 0; i < hitsProvided.length; i++) { hits.push({ startPosition: hitsProvided[i].startPosition, length: hitsProvided[i].length }); } hits.sort(hitStartPositionAscendingSorter); hits.reduce(hitIntersectionReducer, reducedHits); } return reducedHits; } }); function addHitHighlightedText(element, item, text, hitFinder) { function addNewSpan(element, textContent, insertBefore) { // Adds new span element with specified inner text as child to element, placed before insertBefore var spanElement = _Global.document.createElement("span"); spanElement.textContent = textContent; spanElement.setAttribute("aria-hidden", "true"); spanElement.classList.add(ClassNames.asbHitHighlightSpan); element.insertBefore(spanElement, insertBefore); return spanElement; } if (text) { // Remove any existing hit highlighted text spans _ElementListUtilities.query("." + ClassNames.asbHitHighlightSpan, element).forEach(function (childElement) { childElement.parentNode.removeChild(childElement); }); // Insert spans at the front of element var firstChild = element.firstChild; var hitsProvided = item.hits; if ((!hitsProvided) && (hitFinder) && (item.kind !== _SuggestionManagerShim._SearchSuggestionKind.Separator)) { hitsProvided = hitFinder.find(text); } var hits = AutoSuggestBox._sortAndMergeHits(hitsProvided); var lastPosition = 0; for (var i = 0; i < hits.length; i++) { var hit = hits[i]; // Add previous normal text addNewSpan(element, text.substring(lastPosition, hit.startPosition), firstChild); lastPosition = hit.startPosition + hit.length; // Add hit highlighted text var spanHitHighlightedText = addNewSpan(element, text.substring(hit.startPosition, lastPosition), firstChild); _ElementUtilities.addClass(spanHitHighlightedText, ClassNames.asbBoxFlyoutHighlightText); } // Add final normal text if (lastPosition < text.length) { addNewSpan(element, text.substring(lastPosition), firstChild); } } } function getKeyModifiers(ev) { // Returns the same value as https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.system.virtualkeymodifiers var VirtualKeys = { ctrlKey: 1, altKey: 2, shiftKey: 4 }; var keyModifiers = 0; if (ev.ctrlKey) { keyModifiers |= VirtualKeys.ctrlKey; } if (ev.altKey) { keyModifiers |= VirtualKeys.altKey; } if (ev.shiftKey) { keyModifiers |= VirtualKeys.shiftKey; } return keyModifiers; } function resultSuggestionRenderer(asb, item) { function handleInvoke(e) { asb._internalFocusMove = true; asb._inputElement.focus(); asb._processSuggestionChosen(item, e); } var root = _Global.document.createElement("div"); var image = new _Global.Image(); image.style.opacity = 0; var loadImage = function (url) { function onload() { image.removeEventListener("load", onload, false); Animations.fadeIn(image); } image.addEventListener("load", onload, false); image.src = url; }; if (item.image !== null) { item.image.openReadAsync().then(function (streamWithContentType) { if (streamWithContentType !== null) { loadImage(_Global.URL.createObjectURL(streamWithContentType, { oneTimeOnly: true })); } }); } else if (item.imageUrl !== null) { loadImage(item.imageUrl); } image.setAttribute("aria-hidden", "true"); root.appendChild(image); var divElement = _Global.document.createElement("div"); _ElementUtilities.addClass(divElement, ClassNames.asbSuggestionResultText); addHitHighlightedText(divElement, item, item.text); divElement.title = item.text; divElement.setAttribute("aria-hidden", "true"); root.appendChild(divElement); var brElement = _Global.document.createElement("br"); divElement.appendChild(brElement); var divDetailElement = _Global.document.createElement("span"); _ElementUtilities.addClass(divDetailElement, ClassNames.asbSuggestionResultDetailedText); addHitHighlightedText(divDetailElement, item, item.detailText); divDetailElement.title = item.detailText; divDetailElement.setAttribute("aria-hidden", "true"); divElement.appendChild(divDetailElement); _ElementUtilities.addClass(root, ClassNames.asbSuggestionResult); _ElementUtilities._addEventListener(root, "click", function (e) { if (!asb._isFlyoutPointerDown) { handleInvoke(e); } }); _ElementUtilities._addEventListener(root, "pointerup", handleInvoke); root.setAttribute("role", "option"); var ariaLabel = _Resources._formatString(Strings.ariaLabelResult, item.text, item.detailText); root.setAttribute("aria-label", ariaLabel); return root; } function querySuggestionRenderer(asb, item) { function handleInvoke(e) { asb._internalFocusMove = true; asb._inputElement.focus(); asb._processSuggestionChosen(item, e); } var root = _Global.document.createElement("div"); addHitHighlightedText(root, item, item.text); root.title = item.text; root.classList.add(ClassNames.asbSuggestionQuery); _ElementUtilities._addEventListener(root, "click", function (e) { if (!asb._isFlyoutPointerDown) { handleInvoke(e); } }); _ElementUtilities._addEventListener(root, "pointerup", handleInvoke); var ariaLabel = _Resources._formatString(Strings.ariaLabelQuery, item.text); root.setAttribute("role", "option"); root.setAttribute("aria-label", ariaLabel); return root; } function separatorSuggestionRenderer(item) { var root = _Global.document.createElement("div"); if (item.text.length > 0) { var textElement = _Global.document.createElement("div"); textElement.textContent = item.text; textElement.title = item.text; textElement.setAttribute("aria-hidden", "true"); root.appendChild(textElement); } root.insertAdjacentHTML("beforeend", "
    "); _ElementUtilities.addClass(root, ClassNames.asbSuggestionSeparator); root.setAttribute("role", "separator"); var ariaLabel = _Resources._formatString(Strings.ariaLabelSeparator, item.text); root.setAttribute("aria-label", ariaLabel); return root; } _Base.Class.mix(AutoSuggestBox, _Control.DOMEventMixin); return AutoSuggestBox; }) }); exports.ClassNames = ClassNames; }); define('require-style!less/styles-searchbox',[],function(){}); define('require-style!less/colors-searchbox',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/SearchBox',[ '../Core/_Global', '../Core/_WinRT', '../Core/_Base', '../Core/_ErrorFromName', '../Core/_Events', '../Core/_Resources', './AutoSuggestBox', '../_Accents', '../Utilities/_Control', '../Utilities/_ElementUtilities', './AutoSuggestBox/_SearchSuggestionManagerShim', '../Application', 'require-style!less/styles-searchbox', 'require-style!less/colors-searchbox' ], function searchboxInit(_Global, _WinRT, _Base, _ErrorFromName, _Events, _Resources, AutoSuggestBox, _Accents, _Control, _ElementUtilities, _SuggestionManagerShim, Application) { "use strict"; _Accents.createAccentRule("html.win-hoverable .win-searchbox-button:not(.win-searchbox-button-disabled):hover", [{ name: "color", value: _Accents.ColorTypes.accent }, ]); _Accents.createAccentRule(".win-searchbox-button.win-searchbox-button:not(.win-searchbox-button-disabled):hover:active", [{ name: "background-color", value: _Accents.ColorTypes.accent }, ]); _Base.Namespace.define("WinJS.UI", { /// /// /// Enables the user to perform search queries and select suggestions. /// /// /// /// /// /// ]]> /// /// Raised when the app automatically redirects focus to the search box. This event can only be raised when the focusOnKeyboardInput property is set to true. /// /// Styles the entire Search box control. /// Styles the query input box. /// Styles the search button. /// Styles the result suggestions flyout. /// Styles the result type suggestion. /// Styles the query type suggestion. /// /// Styles the separator type suggestion. /// /// /// Styles the currently selected suggestion. /// /// /// SearchBox: _Base.Namespace._lazy(function () { // Enums var ClassName = { searchBox: "win-searchbox", searchBoxDisabled: "win-searchbox-disabled", searchBoxInput: "win-searchbox-input", searchBoxInputFocus: "win-searchbox-input-focus", searchBoxButton: "win-searchbox-button", searchBoxFlyout: "win-searchbox-flyout", searchBoxFlyoutHighlightText: "win-searchbox-flyout-highlighttext", searchBoxHitHighlightSpan: "win-searchbox-hithighlight-span", searchBoxSuggestionResult: "win-searchbox-suggestion-result", searchBoxSuggestionResultText: "win-searchbox-suggestion-result-text", searchBoxSuggestionResultDetailedText: "win-searchbox-suggestion-result-detailed-text", searchBoxSuggestionSelected: "win-searchbox-suggestion-selected", searchBoxSuggestionQuery: "win-searchbox-suggestion-query", searchBoxSuggestionSeparator: "win-searchbox-suggestion-separator", searchBoxButtonInputFocus: "win-searchbox-button-input-focus", searchBoxButtonDisabled: "win-searchbox-button-disabled" }; var EventName = { receivingfocusonkeyboardinput: "receivingfocusonkeyboardinput" }; var strings = { get invalidSearchBoxSuggestionKind() { return "Error: Invalid search suggestion kind."; }, get ariaLabel() { return _Resources._getWinJSString("ui/searchBoxAriaLabel").value; }, get ariaLabelInputNoPlaceHolder() { return _Resources._getWinJSString("ui/searchBoxAriaLabelInputNoPlaceHolder").value; }, get ariaLabelInputPlaceHolder() { return _Resources._getWinJSString("ui/searchBoxAriaLabelInputPlaceHolder").value; }, get searchBoxDeprecated() { return "SearchBox is deprecated and may not be available in future releases. Instead use AutoSuggestBox."; } }; var SearchBox = _Base.Class.derive(AutoSuggestBox.AutoSuggestBox, function SearchBox_ctor(element, options) { /// /// /// Creates a new SearchBox. /// /// /// The DOM element that hosts the SearchBox. /// /// /// An object that contains one or more property/value pairs to apply to the new control. /// Each property of the options object corresponds to one of the control's properties or events. /// Event names must begin with "on". For example, to provide a handler for the querychanged event, /// add a property named "onquerychanged" to the options object and set its value to the event handler. /// This parameter is optional. /// /// /// The new SearchBox. /// /// /// SearchBox is deprecated and may not be available in future releases. Instead use AutoSuggestBox. /// /// /// _ElementUtilities._deprecated(strings.searchBoxDeprecated); this._requestingFocusOnKeyboardInputHandlerBind = this._requestingFocusOnKeyboardInputHandler.bind(this); // Elements this._buttonElement = _Global.document.createElement("div"); // Variables this._focusOnKeyboardInput = false; // Calling the super constructor - since the super constructor processes the options, // any property setter at this point must be functional. AutoSuggestBox.AutoSuggestBox.call(this, element, options); // Add SearchBox classes to DOM elements this.element.classList.add(ClassName.searchBox); this._flyoutElement.classList.add(ClassName.searchBoxFlyout); this._inputElement.classList.add(ClassName.searchBoxInput); this._inputElement.addEventListener("blur", this._searchboxInputBlurHandler.bind(this)); this._inputElement.addEventListener("focus", this._searchboxInputFocusHandler.bind(this)); this._buttonElement.tabIndex = -1; this._buttonElement.classList.add(ClassName.searchBoxButton); this._buttonElement.addEventListener("click", this._buttonClickHandler.bind(this)); _ElementUtilities._addEventListener(this._buttonElement, "pointerdown", this._buttonPointerDownHandler.bind(this)); this.element.appendChild(this._buttonElement); }, { /// /// Enable automatically focusing the search box when the user types into the app window (off by default) While this is enabled, /// input on the current thread will be intercepted and redirected to the search box. Only textual input will trigger the search box to focus. /// The caller will continue to receive non-text keys (such as arrows, tab, etc /// This will also not affect WIN/CTRL/ALT key combinations (except for Ctrl-V for paste). /// If the client needs more to happen than just set focus in the box (make control visible, etc.), they will need to handle the event. /// If enabled, the app must be sure to disable this if the user puts focus in some other edit field. /// /// focusOnKeyboardInput: { get: function () { return this._focusOnKeyboardInput; }, set: function (value) { if (this._focusOnKeyboardInput && !value) { Application._applicationListener.removeEventListener(this.element, "requestingfocusonkeyboardinput", this._requestingFocusOnKeyboardInputHandlerBind); } else if (!this._focusOnKeyboardInput && !!value) { Application._applicationListener.addEventListener(this.element, "requestingfocusonkeyboardinput", this._requestingFocusOnKeyboardInputHandlerBind); } this._focusOnKeyboardInput = !!value; } }, // Methods dispose: function SearchBox() { /// /// /// Disposes this control. /// /// /// if (this._disposed) { return; } AutoSuggestBox.AutoSuggestBox.prototype.dispose.call(this); if (this._focusOnKeyboardInput) { Application._applicationListener.removeEventListener(this.element, "requestingfocusonkeyboardinput", this._requestingFocusOnKeyboardInputHandlerBind); } }, // Private methods _disableControl: function SearchBox_disableControl() { AutoSuggestBox.AutoSuggestBox.prototype._disableControl.call(this); this._buttonElement.disabled = true; this._buttonElement.classList.add(ClassName.searchBoxButtonDisabled); this.element.classList.add(ClassName.searchBoxDisabled); }, _enableControl: function SearchBox_enableControl() { AutoSuggestBox.AutoSuggestBox.prototype._enableControl.call(this); this._buttonElement.disabled = false; this._buttonElement.classList.remove(ClassName.searchBoxButtonDisabled); this.element.classList.remove(ClassName.searchBoxDisabled); }, _renderSuggestion: function SearchBox_renderSuggestion(suggestion) { // Overrides base class var render = AutoSuggestBox.AutoSuggestBox.prototype._renderSuggestion.call(this, suggestion); if (suggestion.kind === _SuggestionManagerShim._SearchSuggestionKind.Query) { render.classList.add(ClassName.searchBoxSuggestionQuery); } else if (suggestion.kind === _SuggestionManagerShim._SearchSuggestionKind.Separator) { render.classList.add(ClassName.searchBoxSuggestionSeparator); } else { render.classList.add(ClassName.searchBoxSuggestionResult); var resultText = render.querySelector("." + AutoSuggestBox.ClassNames.asbSuggestionResultText); resultText.classList.add(ClassName.searchBoxSuggestionResultText); var resultDetailText = render.querySelector("." + AutoSuggestBox.ClassNames.asbSuggestionResultDetailedText); resultDetailText.classList.add(ClassName.searchBoxSuggestionResultDetailedText); var spans = render.querySelectorAll("." + AutoSuggestBox.ClassNames.asbHitHighlightSpan); for (var i = 0, len = spans.length; i < len; i++) { spans[i].classList.add(ClassName.searchBoxHitHighlightSpan); } var highlightTexts = render.querySelectorAll("." + AutoSuggestBox.ClassNames.asbBoxFlyoutHighlightText); for (var i = 0, len = highlightTexts.length; i < len; i++) { highlightTexts[i].classList.add(ClassName.searchBoxFlyoutHighlightText); } } return render; }, _selectSuggestionAtIndex: function SearchBox_selectSuggestionAtIndex(indexToSelect) { // Overrides base class AutoSuggestBox.AutoSuggestBox.prototype._selectSuggestionAtIndex.call(this, indexToSelect); var currentSelected = this.element.querySelector("." + ClassName.searchBoxSuggestionSelected); currentSelected && currentSelected.classList.remove(ClassName.searchBoxSuggestionSelected); var newSelected = this.element.querySelector("." + AutoSuggestBox.ClassNames.asbSuggestionSelected); newSelected && newSelected.classList.add(ClassName.searchBoxSuggestionSelected); }, _shouldIgnoreInput: function SearchBox_shouldIgnoreInput() { // Overrides base class var shouldIgnore = AutoSuggestBox.AutoSuggestBox.prototype._shouldIgnoreInput(); var isButtonDown = _ElementUtilities._matchesSelector(this._buttonElement, ":active"); return shouldIgnore || isButtonDown; }, _updateInputElementAriaLabel: function SearchBox_updateInputElementAriaLabel() { // Override base class this._inputElement.setAttribute("aria-label", this._inputElement.placeholder ? _Resources._formatString(strings.ariaLabelInputPlaceHolder, this._inputElement.placeholder) : strings.ariaLabelInputNoPlaceHolder ); }, // Event Handlers _buttonPointerDownHandler: function SearchBox_buttonPointerDownHandler(e) { this._inputElement.focus(); e.preventDefault(); }, _buttonClickHandler: function SearchBox_buttonClickHandler(event) { this._inputElement.focus(); this._submitQuery(this._inputElement.value, true /*fillLinguisticDetails*/, event); this._hideFlyout(); }, _searchboxInputBlurHandler: function SearchBox_inputBlurHandler() { _ElementUtilities.removeClass(this.element, ClassName.searchBoxInputFocus); _ElementUtilities.removeClass(this._buttonElement, ClassName.searchBoxButtonInputFocus); }, _searchboxInputFocusHandler: function SearchBox_inputFocusHandler() { _ElementUtilities.addClass(this.element, ClassName.searchBoxInputFocus); _ElementUtilities.addClass(this._buttonElement, ClassName.searchBoxButtonInputFocus); }, // Type to search helpers _requestingFocusOnKeyboardInputHandler: function SearchBox_requestingFocusOnKeyboardInputHandler() { this._fireEvent(EventName.receivingfocusonkeyboardinput, null); if (_Global.document.activeElement !== this._inputElement) { try { this._inputElement.focus(); } catch (e) { } } } }, { createResultSuggestionImage: function SearchBox_createResultSuggestionImage(url) { /// /// /// Creates the image argument for SearchSuggestionCollection.appendResultSuggestion. /// /// /// The url of the image. /// /// /// if (_WinRT.Windows.Foundation.Uri && _WinRT.Windows.Storage.Streams.RandomAccessStreamReference) { return _WinRT.Windows.Storage.Streams.RandomAccessStreamReference.createFromUri(new _WinRT.Windows.Foundation.Uri(url)); } return url; }, _getKeyModifiers: function SearchBox_getKeyModifiers(ev) { // Returns the same value as https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.system.virtualkeymodifiers var VirtualKeys = { ctrlKey: 1, altKey: 2, shiftKey: 4 }; var keyModifiers = 0; if (ev.ctrlKey) { keyModifiers |= VirtualKeys.ctrlKey; } if (ev.altKey) { keyModifiers |= VirtualKeys.altKey; } if (ev.shiftKey) { keyModifiers |= VirtualKeys.shiftKey; } return keyModifiers; }, _isTypeToSearchKey: function searchBox__isTypeToSearchKey(event) { if (event.shiftKey || event.ctrlKey || event.altKey) { return false; } return true; } }); _Base.Class.mix(SearchBox, _Control.DOMEventMixin); return SearchBox; }) }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// appbar,Flyout,Flyouts,registeredforsettings,SettingsFlyout,Statics,Syriac define('WinJS/Controls/SettingsFlyout',[ '../Core/_Global', '../Core/_WinRT', '../Core/_Base', '../Core/_BaseUtils', '../Core/_ErrorFromName', '../Core/_Events', '../Core/_Resources', '../Core/_WriteProfilerMark', '../Animations', '../Pages', '../Promise', '../_LightDismissService', '../Utilities/_Dispose', '../Utilities/_ElementUtilities', '../Utilities/_ElementListUtilities', '../Utilities/_Hoverable', './_LegacyAppBar/_Constants', './Flyout/_Overlay' ], function settingsFlyoutInit(_Global, _WinRT, _Base, _BaseUtils, _ErrorFromName, _Events, _Resources, _WriteProfilerMark, Animations, Pages, Promise, _LightDismissService, _Dispose, _ElementUtilities, _ElementListUtilities, _Hoverable, _Constants, _Overlay) { "use strict"; _Base.Namespace.define("WinJS.UI", { /// /// Provides users with fast, in-context access to settings that affect the current app. /// /// /// Settings Flyout /// /// /// ///
    /// ///
    Custom Settings
    ///
    ///
    /// {Your Content Here} ///
    /// ]]>
    /// Raised just before showing a SettingsFlyout. /// Raised immediately after a SettingsFlyout is fully shown. /// Raised just before hiding a SettingsFlyout. /// Raised immediately after a SettingsFlyout is fully hidden. /// The SettingsFlyout control itself. /// /// SettingsFlyout: _Base.Namespace._lazy(function () { var Key = _ElementUtilities.Key; var createEvent = _Events._createEventProperty; var settingsPageIsFocusedOnce; // Constants for width var settingsNarrow = "narrow", settingsWide = "wide"; // Determine if the settings pane (system language) is RTL or not. function _shouldAnimateFromLeft() { if (_WinRT.Windows.UI.ApplicationSettings.SettingsEdgeLocation) { var appSettings = _WinRT.Windows.UI.ApplicationSettings; return (appSettings.SettingsPane.edge === appSettings.SettingsEdgeLocation.left); } else { return false; } } // Get the settings control by matching the settingsCommandId // if no match we'll try to match element id function _getChildSettingsControl(parentElement, id) { var settingElements = parentElement.querySelectorAll("." + _Constants.settingsFlyoutClass); var retValue, control; for (var i = 0; i < settingElements.length; i++) { control = settingElements[i].winControl; if (control) { if (control.settingsCommandId === id) { retValue = control; break; } if (settingElements[i].id === id) { retValue = retValue || control; } } } return retValue; } var SettingsFlyout = _Base.Class.derive(_Overlay._Overlay, function SettingsFlyout_ctor(element, options) { /// /// Creates a new SettingsFlyout control. /// /// The DOM element that will host the control. /// /// /// The set of properties and values to apply to the new SettingsFlyout. /// /// The new SettingsFlyout control. /// /// SettingsFlyout is deprecated and may not be available in future releases. Instead, put /// settings on their own page within the app. /// /// /// _ElementUtilities._deprecated(strings.settingsFlyoutIsDeprecated); // Make sure there's an input element this._element = element || _Global.document.createElement("div"); this._id = this._element.id || _ElementUtilities._uniqueID(this._element); this._writeProfilerMark("constructor,StartTM"); // Call the base overlay constructor helper this._baseOverlayConstructor(this._element, options); this._addFirstDiv(); this._addFinalDiv(); // Handle "esc" & "tab" key presses this._element.addEventListener("keydown", this._handleKeyDown, true); // Start settings hidden this._element.style.visibilty = "hidden"; this._element.style.display = "none"; // Attach our css class _ElementUtilities.addClass(this._element, _Constants.settingsFlyoutClass); var that = this; this._dismissable = new _LightDismissService.LightDismissableElement({ element: this._element, tabIndex: this._element.hasAttribute("tabIndex") ? this._element.tabIndex : -1, onLightDismiss: function () { that.hide(); }, onTakeFocus: function (useSetActive) { if (!that._dismissable.restoreFocus()) { var firstDiv = that.element.querySelector("." + _Constants.firstDivClass); if (firstDiv) { if (!firstDiv.msSettingsFlyoutFocusOut) { _ElementUtilities._addEventListener(firstDiv, "focusout", function () { settingsPageIsFocusedOnce = 1; }, false); firstDiv.msSettingsFlyoutFocusOut = true; } settingsPageIsFocusedOnce = 0; _ElementUtilities._tryFocus(firstDiv, useSetActive); } } }, }); // apply the light theme styling to the win-content elements inside the SettingsFlyout _ElementListUtilities.query("div.win-content", this._element). forEach(function (e) { if (!_ElementUtilities._matchesSelector(e, '.win-ui-dark, .win-ui-dark *')){ _ElementUtilities.addClass(e, _Constants.flyoutLightClass); } }); // Make sure we have an ARIA role var role = this._element.getAttribute("role"); if (role === null || role === "" || role === undefined) { this._element.setAttribute("role", "dialog"); } var label = this._element.getAttribute("aria-label"); if (label === null || label === "" || label === undefined) { this._element.setAttribute("aria-label", strings.ariaLabel); } // Make sure animations are hooked up this._currentAnimateIn = this._animateSlideIn; this._currentAnimateOut = this._animateSlideOut; this._writeProfilerMark("constructor,StopTM"); }, { // Public Properties /// /// Width of the SettingsFlyout, "narrow", or "wide". /// /// SettingsFlyout.width may be altered or unavailable in future versions. Instead, style the CSS width property on elements with the .win-settingsflyout class. /// /// /// width: { get: function () { return this._width; }, set: function (value) { _ElementUtilities._deprecated(strings.widthDeprecationMessage); if (value === this._width) { return; } // Get rid of old class if (this._width === settingsNarrow) { _ElementUtilities.removeClass(this._element, _Constants.narrowClass); } else if (this._width === settingsWide) { _ElementUtilities.removeClass(this._element, _Constants.wideClass); } this._width = value; // Attach our new css class if (this._width === settingsNarrow) { _ElementUtilities.addClass(this._element, _Constants.narrowClass); } else if (this._width === settingsWide) { _ElementUtilities.addClass(this._element, _Constants.wideClass); } } }, /// /// Define the settings command Id for the SettingsFlyout control. /// /// settingsCommandId: { get: function () { return this._settingsCommandId; }, set: function (value) { this._settingsCommandId = value; } }, /// Disable SettingsFlyout, setting or getting the HTML disabled attribute. When disabled the SettingsFlyout will no longer display with show(), and will hide if currently visible. disabled: { get: function () { // Ensure it's a boolean because we're using the DOM element to keep in-sync return !!this._element.disabled; }, set: function (value) { // Force this check into a boolean because our current state could be a bit confused since we tie to the DOM element value = !!value; var oldValue = !!this._element.disabled; if (oldValue !== value) { this._element.disabled = value; if (!this.hidden && this._element.disabled) { this._dismiss(); } } } }, /// /// Occurs immediately before the control is shown. /// onbeforeshow: createEvent(_Overlay._Overlay.beforeShow), /// /// Occurs immediately after the control is shown. /// onaftershow: createEvent(_Overlay._Overlay.afterShow), /// /// Occurs immediately before the control is hidden. /// onbeforehide: createEvent(_Overlay._Overlay.beforeHide), /// /// Occurs immediately after the control is hidden. /// onafterhide: createEvent(_Overlay._Overlay.afterHide), show: function () { /// /// /// Shows the SettingsFlyout, if hidden. /// /// /// // Just call private version to make appbar flags happy // Don't do anything if disabled if (this.disabled) { return; } this._writeProfilerMark("show,StartTM"); // The corresponding "stop" profiler mark is handled in _Overlay._baseEndShow(). this._show(); }, _dispose: function SettingsFlyout_dispose() { _LightDismissService.hidden(this._dismissable); _Dispose.disposeSubTree(this.element); this._dismiss(); }, _show: function SettingsFlyout_show() { // We call our base "_baseShow" because SettingsFlyout overrides show if (this._baseShow()) { // Verify that the firstDiv and finalDiv are in the correct location. // Move them to the correct location or add them if they are not. if (!_ElementUtilities.hasClass(this.element.children[0], _Constants.firstDivClass)) { var firstDiv = this.element.querySelectorAll("." + _Constants.firstDivClass); if (firstDiv && firstDiv.length > 0) { firstDiv.item(0).parentNode.removeChild(firstDiv.item(0)); } this._addFirstDiv(); } if (!_ElementUtilities.hasClass(this.element.children[this.element.children.length - 1], _Constants.finalDivClass)) { var finalDiv = this.element.querySelectorAll("." + _Constants.finalDivClass); if (finalDiv && finalDiv.length > 0) { finalDiv.item(0).parentNode.removeChild(finalDiv.item(0)); } this._addFinalDiv(); } this._setBackButtonsAriaLabel(); _LightDismissService.shown(this._dismissable); } }, _setBackButtonsAriaLabel: function SettingsFlyout_setBackButtonsAriaLabel() { var backbuttons = this.element.querySelectorAll(".win-backbutton"); var label; for (var i = 0; i < backbuttons.length; i++) { label = backbuttons[i].getAttribute("aria-label"); if (label === null || label === "" || label === undefined) { backbuttons[i].setAttribute("aria-label", strings.backbuttonAriaLabel); } } }, hide: function () { /// /// /// Hides the SettingsFlyout, if visible, regardless of other state. /// /// /// // Just call private version to make appbar flags happy this._writeProfilerMark("hide,StartTM"); // The corresponding "stop" profiler mark is handled in _Overlay._baseEndHide(). this._hide(); }, _hide: function SettingsFlyout_hide() { this._baseHide(); }, _beforeEndHide: function SettingsFlyout_beforeEndHide() { _LightDismissService.hidden(this._dismissable); }, // SettingsFlyout animations _animateSlideIn: function SettingsFlyout_animateSlideIn() { var animateFromLeft = _shouldAnimateFromLeft(); var offset = animateFromLeft ? "-100px" : "100px"; _ElementListUtilities.query("div.win-content", this._element). forEach(function (e) { Animations.enterPage(e, { left: offset }); }); var where, width = this._element.offsetWidth; // Slide in from right side or left side? if (animateFromLeft) { // RTL where = { top: "0px", left: "-" + width + "px" }; this._element.style.right = "auto"; this._element.style.left = "0px"; } else { // From right side where = { top: "0px", left: width + "px" }; this._element.style.right = "0px"; this._element.style.left = "auto"; } this._element.style.opacity = 1; this._element.style.visibility = "visible"; return Animations.showPanel(this._element, where); }, _animateSlideOut: function SettingsFlyout_animateSlideOut() { var where, width = this._element.offsetWidth; if (_shouldAnimateFromLeft()) { // RTL where = { top: "0px", left: width + "px" }; this._element.style.right = "auto"; this._element.style.left = "-" + width + "px"; } else { // From right side where = { top: "0px", left: "-" + width + "px" }; this._element.style.right = "-" + width + "px"; this._element.style.left = "auto"; } return Animations.showPanel(this._element, where); }, _fragmentDiv: { get: function SettingsFlyout_fragmentDiv_get() { return this._fragDiv; }, set: function SettingsFlyout_fragmentDiv_set(value) { this._fragDiv = value; } }, _unloadPage: function SettingsFlyout_unloadPage(event) { var settingsControl = event.currentTarget.winControl; settingsControl.removeEventListener(_Overlay._Overlay.afterHide, this._unloadPage, false); Promise.as().then(function () { if (settingsControl._fragmentDiv) { _Global.document.body.removeChild(settingsControl._fragmentDiv); settingsControl._fragmentDiv = null; } }); }, _dismiss: function SettingsFlyout_dismiss() { this.addEventListener(_Overlay._Overlay.afterHide, this._unloadPage, false); this._hide(); }, _handleKeyDown: function SettingsFlyout_handleKeyDown(event) { if ((event.keyCode === Key.space || event.keyCode === Key.enter) && (this.children[0] === _Global.document.activeElement)) { event.preventDefault(); event.stopPropagation(); this.winControl._dismiss(); } else if (event.shiftKey && event.keyCode === Key.tab && this.children[0] === _Global.document.activeElement) { event.preventDefault(); event.stopPropagation(); var _elms = this.getElementsByTagName("*"); for (var i = _elms.length - 2; i >= 0; i--) { _elms[i].focus(); if (_elms[i] === _Global.document.activeElement) { break; } } } }, _focusOnLastFocusableElementFromParent: function SettingsFlyout_focusOnLastFocusableElementFromParent() { var active = _Global.document.activeElement; if (!settingsPageIsFocusedOnce || !active || !_ElementUtilities.hasClass(active, _Constants.firstDivClass)) { return; } var _elms = this.parentElement.getElementsByTagName("*"); // There should be at least 1 element in addition to the firstDiv & finalDiv if (_elms.length <= 2) { return; } // Get the tabIndex set to the finalDiv (which is the highest) var _highestTabIndex = _elms[_elms.length - 1].tabIndex; // If there are positive tabIndices, set focus to the element with the highest tabIndex. // Otherwise set focus to the last focusable element in DOM order. var i; if (_highestTabIndex) { for (i = _elms.length - 2; i > 0; i--) { if (_elms[i].tabIndex === _highestTabIndex) { _elms[i].focus(); break; } } } else { for (i = _elms.length - 2; i > 0; i--) { // Skip
    with undefined tabIndex (To work around Win8 bug #622245) if ((_elms[i].tagName !== "DIV") || (_elms[i].getAttribute("tabIndex") !== null)) { _elms[i].focus(); if (_elms[i] === _Global.document.activeElement) { break; } } } } }, _focusOnFirstFocusableElementFromParent: function SettingsFlyout_focusOnFirstFocusableElementFromParent() { var active = _Global.document.activeElement; if (!active || !_ElementUtilities.hasClass(active, _Constants.finalDivClass)) { return; } var _elms = this.parentElement.getElementsByTagName("*"); // There should be at least 1 element in addition to the firstDiv & finalDiv if (_elms.length <= 2) { return; } // Get the tabIndex set to the firstDiv (which is the lowest) var _lowestTabIndex = _elms[0].tabIndex; // If there are positive tabIndices, set focus to the element with the lowest tabIndex. // Otherwise set focus to the first focusable element in DOM order. var i; if (_lowestTabIndex) { for (i = 1; i < _elms.length - 1; i++) { if (_elms[i].tabIndex === _lowestTabIndex) { _elms[i].focus(); break; } } } else { for (i = 1; i < _elms.length - 1; i++) { // Skip
    with undefined tabIndex (To work around Win8 bug #622245) if ((_elms[i].tagName !== "DIV") || (_elms[i].getAttribute("tabIndex") !== null)) { _elms[i].focus(); if (_elms[i] === _Global.document.activeElement) { break; } } } } }, // Create and add a new first div to the beginning of the list _addFirstDiv: function SettingsFlyout_addFirstDiv() { var _elms = this._element.getElementsByTagName("*"); var _minTab = 0; for (var i = 0; i < _elms.length; i++) { if ((0 < _elms[i].tabIndex) && (_minTab === 0 || _elms[i].tabIndex < _minTab)) { _minTab = _elms[i].tabIndex; } } var firstDiv = _Global.document.createElement("div"); firstDiv.className = _Constants.firstDivClass; firstDiv.style.display = "inline"; firstDiv.setAttribute("role", "menuitem"); firstDiv.setAttribute("aria-hidden", "true"); firstDiv.tabIndex = _minTab; _ElementUtilities._addEventListener(firstDiv, "focusin", this._focusOnLastFocusableElementFromParent, false); // add to beginning if (this._element.children[0]) { this._element.insertBefore(firstDiv, this._element.children[0]); } else { this._element.appendChild(firstDiv); } }, // Create and add a new final div to the end of the list _addFinalDiv: function SettingsFlyout_addFinalDiv() { var _elms = this._element.getElementsByTagName("*"); var _maxTab = 0; for (var i = 0; i < _elms.length; i++) { if (_elms[i].tabIndex > _maxTab) { _maxTab = _elms[i].tabIndex; } } var finalDiv = _Global.document.createElement("div"); finalDiv.className = _Constants.finalDivClass; finalDiv.style.display = "inline"; finalDiv.setAttribute("role", "menuitem"); finalDiv.setAttribute("aria-hidden", "true"); finalDiv.tabIndex = _maxTab; _ElementUtilities._addEventListener(finalDiv, "focusin", this._focusOnFirstFocusableElementFromParent, false); this._element.appendChild(finalDiv); }, _writeProfilerMark: function SettingsFlyout_writeProfilerMark(text) { _WriteProfilerMark("WinJS.UI.SettingsFlyout:" + this._id + ":" + text); } }); // Statics SettingsFlyout.show = function () { /// /// /// Shows the SettingsPane UI, if hidden, regardless of other states. /// /// /// /// Show the main settings pane if (_WinRT.Windows.UI.ApplicationSettings.SettingsPane) { _WinRT.Windows.UI.ApplicationSettings.SettingsPane.show(); } // And hide the WWA one var elements = _Global.document.querySelectorAll('div[data-win-control="WinJS.UI.SettingsFlyout"]'); var len = elements.length; for (var i = 0; i < len; i++) { var settingsFlyout = elements[i].winControl; if (settingsFlyout) { settingsFlyout._dismiss(); } } }; var _settingsEvent = { event: undefined }; SettingsFlyout.populateSettings = function (e) { /// /// /// Loads a portion of the SettingsFlyout. Your app calls this when the user invokes a settings command and the WinJS.Application.onsettings event occurs. /// /// /// An object that contains information about the event, received from the WinJS.Application.onsettings event. The detail property of this object contains /// the applicationcommands sub-property that you set to an array of settings commands. /// /// /// _settingsEvent.event = e.detail; if (_settingsEvent.event.applicationcommands) { var n = _WinRT.Windows.UI.ApplicationSettings; Object.keys(_settingsEvent.event.applicationcommands).forEach(function (name) { var setting = _settingsEvent.event.applicationcommands[name]; if (!setting.title) { setting.title = name; } var command = new n.SettingsCommand(name, setting.title, SettingsFlyout._onSettingsCommand); _settingsEvent.event.e.request.applicationCommands.append(command); }); } }; SettingsFlyout._onSettingsCommand = function (command) { var id = command.id; if (_settingsEvent.event.applicationcommands && _settingsEvent.event.applicationcommands[id]) { SettingsFlyout.showSettings(id, _settingsEvent.event.applicationcommands[id].href); } }; SettingsFlyout.showSettings = function (id, path) { /// /// /// Show the SettingsFlyout using the settings element identifier (ID) and the path of the page that contains the settings element. /// /// /// The ID of the settings element. /// /// /// The path of the page that contains the settings element. /// /// /// var control = _getChildSettingsControl(_Global.document, id); if (control) { control.show(); } else if (path) { var divElement = _Global.document.createElement("div"); divElement = _Global.document.body.appendChild(divElement); Pages.render(path, divElement).then(function () { control = _getChildSettingsControl(divElement, id); if (control) { control._fragmentDiv = divElement; control.show(); } else { _Global.document.body.removeChild(divElement); } }); } else { throw new _ErrorFromName("WinJS.UI.SettingsFlyout.BadReference", strings.badReference); } }; var strings = { get ariaLabel() { return _Resources._getWinJSString("ui/settingsFlyoutAriaLabel").value; }, get badReference() { return "Invalid argument: Invalid href to settings flyout fragment"; }, get backbuttonAriaLabel() { return _Resources._getWinJSString("ui/backbuttonarialabel").value; }, get widthDeprecationMessage() { return "SettingsFlyout.width may be altered or unavailable in future versions. Instead, style the CSS width property on elements with the .win-settingsflyout class."; }, get settingsFlyoutIsDeprecated() { return "SettingsFlyout is deprecated and may not be available in future releases. Instead, put settings on their own page within the app."; } }; return SettingsFlyout; }) }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/NavBar/_Command',[ 'exports', '../../Core/_Global', '../../Core/_Base', '../../Core/_ErrorFromName', '../../Core/_Resources', '../../ControlProcessor', '../../Navigation', '../../Utilities/_Control', '../../Utilities/_ElementUtilities', '../AppBar/_Icon' ], function NavBarCommandInit(exports, _Global, _Base, _ErrorFromName, _Resources, ControlProcessor, Navigation, _Control, _ElementUtilities, _Icon) { "use strict"; _Base.Namespace._moduleDefine(exports, "WinJS.UI", { _WinPressed: _Base.Namespace._lazy(function () { var WinPressed = _Base.Class.define(function _WinPressed_ctor(element) { // WinPressed is the combination of :hover:active // :hover is delayed by trident for touch by 300ms so if you want :hover:active to work quickly you need to // use this behavior. // :active does not bubble to its parent like :hover does so this is also useful for that scenario. this._element = element; _ElementUtilities._addEventListener(this._element, "pointerdown", this._MSPointerDownButtonHandler.bind(this)); }, { _MSPointerDownButtonHandler: function _WinPressed_MSPointerDownButtonHandler(ev) { if (!this._pointerUpBound) { this._pointerUpBound = this._MSPointerUpHandler.bind(this); this._pointerCancelBound = this._MSPointerCancelHandler.bind(this); this._pointerOverBound = this._MSPointerOverHandler.bind(this); this._pointerOutBound = this._MSPointerOutHandler.bind(this); } if (ev.isPrimary) { if (this._pointerId) { this._resetPointer(); } if (!_ElementUtilities._matchesSelector(ev.target, ".win-interactive, .win-interactive *")) { this._pointerId = ev.pointerId; _ElementUtilities._addEventListener(_Global, "pointerup", this._pointerUpBound, true); _ElementUtilities._addEventListener(_Global, "pointercancel", this._pointerCancelBound), true; _ElementUtilities._addEventListener(this._element, "pointerover", this._pointerOverBound, true); _ElementUtilities._addEventListener(this._element, "pointerout", this._pointerOutBound, true); _ElementUtilities.addClass(this._element, WinPressed.winPressed); } } }, _MSPointerOverHandler: function _WinPressed_MSPointerOverHandler(ev) { if (this._pointerId === ev.pointerId) { _ElementUtilities.addClass(this._element, WinPressed.winPressed); } }, _MSPointerOutHandler: function _WinPressed_MSPointerOutHandler(ev) { if (this._pointerId === ev.pointerId) { _ElementUtilities.removeClass(this._element, WinPressed.winPressed); } }, _MSPointerCancelHandler: function _WinPressed_MSPointerCancelHandler(ev) { if (this._pointerId === ev.pointerId) { this._resetPointer(); } }, _MSPointerUpHandler: function _WinPressed_MSPointerUpHandler(ev) { if (this._pointerId === ev.pointerId) { this._resetPointer(); } }, _resetPointer: function _WinPressed_resetPointer() { this._pointerId = null; _ElementUtilities._removeEventListener(_Global, "pointerup", this._pointerUpBound, true); _ElementUtilities._removeEventListener(_Global, "pointercancel", this._pointerCancelBound, true); _ElementUtilities._removeEventListener(this._element, "pointerover", this._pointerOverBound, true); _ElementUtilities._removeEventListener(this._element, "pointerout", this._pointerOutBound, true); _ElementUtilities.removeClass(this._element, WinPressed.winPressed); }, dispose: function _WinPressed_dispose() { if (this._disposed) { return; } this._disposed = true; this._resetPointer(); } }, { winPressed: "win-pressed" }); return WinPressed; }), /// /// /// Represents a navigation command in an NavBarContainer. /// /// /// /// /// ///
    ]]> /// Styles the entire NavBarCommand control. /// Styles the main button in a NavBarCommand. /// Styles the split button in a NavBarCommand /// Styles the icon in the main button of a NavBarCommand. /// Styles the label in the main button of a NavBarCommand. /// /// NavBarCommand: _Base.Namespace._lazy(function () { var Key = _ElementUtilities.Key; var strings = { get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; } }; var NavBarCommand = _Base.Class.define(function NavBarCommand_ctor(element, options) { /// /// /// Creates a new NavBarCommand. /// /// /// The DOM element that will host the new NavBarCommand control. /// /// /// An object that contains one or more property/value pairs to apply to the new control. /// Each property of the options object corresponds to one of the control's properties or events. /// Event names must begin with "on". /// /// /// The new NavBarCommand. /// /// /// element = element || _Global.document.createElement("DIV"); options = options || {}; if (element.winControl) { throw new _ErrorFromName("WinJS.UI.NavBarCommand.DuplicateConstruction", strings.duplicateConstruction); } // Attaching JS control to DOM element element.winControl = this; this._element = element; _ElementUtilities.addClass(this.element, NavBarCommand._ClassName.navbarcommand); _ElementUtilities.addClass(this.element, "win-disposable"); this._tooltip = null; this._splitOpened = false; this._buildDom(); element.addEventListener('keydown', this._keydownHandler.bind(this)); _Control.setOptions(this, options); }, { /// element: { get: function () { return this._element; } }, /// /// Gets or sets the label of the NavBarCommand. /// /// label: { get: function () { return this._label; }, set: function (value) { this._label = value; this._labelEl.textContent = value; } }, /// /// Gets or sets the tooltip of the NavBarCommand. /// /// tooltip: { get: function () { return this._tooltip; }, set: function (value) { this._tooltip = value; if (this._tooltip || this._tooltip === "") { this._element.setAttribute('title', this._tooltip); } else { this._element.removeAttribute('title'); } } }, /// /// Gets or sets the icon of the NavBarCommand. This value is either one of the values of the AppBarIcon enumeration or the path of a custom PNG file. /// /// icon: { get: function () { return this._icon; }, set: function (value) { this._icon = (_Icon[value] || value); // If the icon's a single character, presume a glyph if (this._icon && this._icon.length === 1) { // Set the glyph this._imageSpan.textContent = this._icon; this._imageSpan.style.backgroundImage = ""; this._imageSpan.style.msHighContrastAdjust = ""; this._imageSpan.style.display = ""; } else if (this._icon && this._icon.length > 1) { // Must be an image, set that this._imageSpan.textContent = ""; this._imageSpan.style.backgroundImage = this._icon; this._imageSpan.style.msHighContrastAdjust = "none"; this._imageSpan.style.display = ""; } else { this._imageSpan.textContent = ""; this._imageSpan.style.backgroundImage = ""; this._imageSpan.style.msHighContrastAdjust = ""; this._imageSpan.style.display = "none"; } } }, /// /// Gets or sets the command's target location. /// /// location: { get: function () { return this._location; }, set: function (value) { this._location = value; } }, /// /// Gets or sets the state value used for navigation. The command passes this object to the WinJS.Navigation.navigate function. /// /// state: { get: function () { return this._state; }, set: function (value) { this._state = value; } }, /// /// Gets or sets a value that specifies whether the NavBarCommand has a split button. /// /// splitButton: { get: function () { return this._split; }, set: function (value) { this._split = value; if (this._split) { this._splitButtonEl.style.display = ""; } else { this._splitButtonEl.style.display = "none"; } } }, /// splitOpened: { get: function () { return this._splitOpened; }, set: function (value) { if (this._splitOpened !== !!value) { this._toggleSplit(); } } }, _toggleSplit: function NavBarCommand_toggleSplit() { this._splitOpened = !this._splitOpened; if (this._splitOpened) { _ElementUtilities.addClass(this._splitButtonEl, NavBarCommand._ClassName.navbarcommandsplitbuttonopened); this._splitButtonEl.setAttribute("aria-expanded", "true"); } else { _ElementUtilities.removeClass(this._splitButtonEl, NavBarCommand._ClassName.navbarcommandsplitbuttonopened); this._splitButtonEl.setAttribute("aria-expanded", "false"); } this._fireEvent(NavBarCommand._EventName._splitToggle); }, _rtl: { get: function () { return _Global.getComputedStyle(this.element).direction === "rtl"; } }, _keydownHandler: function NavBarCommand_keydownHandler(ev) { if (_ElementUtilities._matchesSelector(ev.target, ".win-interactive, .win-interactive *")) { return; } var leftStr = this._rtl ? Key.rightArrow : Key.leftArrow; var rightStr = this._rtl ? Key.leftArrow : Key.rightArrow; if (!ev.altKey && (ev.keyCode === leftStr || ev.keyCode === Key.home || ev.keyCode === Key.end) && ev.target === this._splitButtonEl) { _ElementUtilities._setActive(this._buttonEl); if (ev.keyCode === leftStr) { ev.stopPropagation(); } ev.preventDefault(); } else if (!ev.altKey && ev.keyCode === rightStr && this.splitButton && (ev.target === this._buttonEl || this._buttonEl.contains(ev.target))) { _ElementUtilities._setActive(this._splitButtonEl); if (ev.keyCode === rightStr) { ev.stopPropagation(); } ev.preventDefault(); } else if ((ev.keyCode === Key.space || ev.keyCode === Key.enter) && (ev.target === this._buttonEl || this._buttonEl.contains(ev.target))) { if (this.location) { Navigation.navigate(this.location, this.state); } this._fireEvent(NavBarCommand._EventName._invoked); } else if ((ev.keyCode === Key.space || ev.keyCode === Key.enter) && ev.target === this._splitButtonEl) { this._toggleSplit(); } }, _getFocusInto: function NavBarCommand_getFocusInto(keyCode) { var leftStr = this._rtl ? Key.rightArrow : Key.leftArrow; if ((keyCode === leftStr) && this.splitButton) { return this._splitButtonEl; } else { return this._buttonEl; } }, _buildDom: function NavBarCommand_buildDom() { var markup = '' + ''; this.element.insertAdjacentHTML("afterBegin", markup); this._buttonEl = this.element.firstElementChild; this._buttonPressedBehavior = new exports._WinPressed(this._buttonEl); this._contentEl = this._buttonEl.firstElementChild; this._imageSpan = this._contentEl.firstElementChild; this._imageSpan.style.display = "none"; this._labelEl = this._imageSpan.nextElementSibling; this._splitButtonEl = this._buttonEl.nextElementSibling; this._splitButtonPressedBehavior = new exports._WinPressed(this._splitButtonEl); this._splitButtonEl.style.display = "none"; _ElementUtilities._ensureId(this._buttonEl); this._splitButtonEl.setAttribute("aria-labelledby", this._buttonEl.id); this._buttonEl.addEventListener("click", this._handleButtonClick.bind(this)); var mutationObserver = new _ElementUtilities._MutationObserver(this._splitButtonAriaExpandedPropertyChangeHandler.bind(this)); mutationObserver.observe(this._splitButtonEl, { attributes: true, attributeFilter: ["aria-expanded"] }); this._splitButtonEl.addEventListener("click", this._handleSplitButtonClick.bind(this)); // reparent any other elements. var tempEl = this._splitButtonEl.nextSibling; while (tempEl) { this._buttonEl.insertBefore(tempEl, this._contentEl); if (tempEl.nodeName !== "#text") { ControlProcessor.processAll(tempEl); } tempEl = this._splitButtonEl.nextSibling; } }, _handleButtonClick: function NavBarCommand_handleButtonClick(ev) { var srcElement = ev.target; if (!_ElementUtilities._matchesSelector(srcElement, ".win-interactive, .win-interactive *")) { if (this.location) { Navigation.navigate(this.location, this.state); } this._fireEvent(NavBarCommand._EventName._invoked); } }, _splitButtonAriaExpandedPropertyChangeHandler: function NavBarCommand_splitButtonAriaExpandedPropertyChangeHandler() { if ((this._splitButtonEl.getAttribute("aria-expanded") === "true") !== this._splitOpened) { this._toggleSplit(); } }, _handleSplitButtonClick: function NavBarCommand_handleSplitButtonClick() { this._toggleSplit(); }, _fireEvent: function NavBarCommand_fireEvent(type, detail) { var event = _Global.document.createEvent("CustomEvent"); event.initCustomEvent(type, true, false, detail); this.element.dispatchEvent(event); }, dispose: function NavBarCommand_dispose() { /// /// /// Disposes this control. /// /// /// if (this._disposed) { return; } this._disposed = true; this._buttonPressedBehavior.dispose(); this._splitButtonPressedBehavior.dispose(); } }, { _ClassName: { navbarcommand: "win-navbarcommand", navbarcommandbutton: "win-navbarcommand-button", navbarcommandbuttoncontent: "win-navbarcommand-button-content", navbarcommandsplitbutton: "win-navbarcommand-splitbutton", navbarcommandsplitbuttonopened: "win-navbarcommand-splitbutton-opened", navbarcommandicon: "win-navbarcommand-icon", navbarcommandlabel: "win-navbarcommand-label" }, _EventName: { _invoked: "_invoked", _splitToggle: "_splittoggle" } }); _Base.Class.mix(NavBarCommand, _Control.DOMEventMixin); return NavBarCommand; }) }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/NavBar/_Container',[ 'exports', '../../Core/_Global', '../../Core/_Base', '../../Core/_BaseUtils', '../../Core/_ErrorFromName', '../../Core/_Events', '../../Core/_Log', '../../Core/_Resources', '../../Core/_WriteProfilerMark', '../../Animations', '../../Animations/_TransitionAnimation', '../../BindingList', '../../ControlProcessor', '../../Navigation', '../../Promise', '../../Scheduler', '../../Utilities/_Control', '../../Utilities/_ElementUtilities', '../../Utilities/_KeyboardBehavior', '../../Utilities/_UI', '../_LegacyAppBar/_Constants', '../Repeater', './_Command' ], function NavBarContainerInit(exports, _Global, _Base, _BaseUtils, _ErrorFromName, _Events, _Log, _Resources, _WriteProfilerMark, Animations, _TransitionAnimation, BindingList, ControlProcessor, Navigation, Promise, Scheduler, _Control, _ElementUtilities, _KeyboardBehavior, _UI, _Constants, Repeater, _Command) { "use strict"; function nobodyHasFocus() { return _Global.document.activeElement === null || _Global.document.activeElement === _Global.document.body; } _Base.Namespace._moduleDefine(exports, "WinJS.UI", { /// /// /// Contains a group of NavBarCommand objects in a NavBar. /// /// /// /// /// /// ///
    ///
    ]]> /// Raised when a NavBarCommand is invoked. /// Raised when the split button on a NavBarCommand is toggled. /// Styles the entire NavBarContainer control. /// /// Styles the page indication for the NavBarContainer. /// /// Styles the page indication for each page. /// /// Styles the indication of the current page. /// /// Styles the area that contains items for the NavBarContainer. /// Styles left and right navigation arrows. /// Styles the left navigation arrow. /// Styles the right navigation arrow. /// /// NavBarContainer: _Base.Namespace._lazy(function () { var Key = _ElementUtilities.Key; var buttonFadeDelay = 3000; var PT_TOUCH = _ElementUtilities._MSPointerEvent.MSPOINTER_TYPE_TOUCH || "touch"; var MS_MANIPULATION_STATE_STOPPED = 0; var createEvent = _Events._createEventProperty; var eventNames = { invoked: "invoked", splittoggle: "splittoggle" }; var strings = { get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; }, get navBarContainerViewportAriaLabel() { return _Resources._getWinJSString("ui/navBarContainerViewportAriaLabel").value; } }; var NavBarContainer = _Base.Class.define(function NavBarContainer_ctor(element, options) { /// /// /// Creates a new NavBarContainer. /// /// /// The DOM element that will host the NavBarContainer control. /// /// /// An object that contains one or more property/value pairs to apply to the new control. /// Each property of the options object corresponds to one of the control's properties or events. /// Event names must begin with "on". /// /// /// The new NavBarContainer. /// /// /// element = element || _Global.document.createElement("DIV"); this._id = element.id || _ElementUtilities._uniqueID(element); this._writeProfilerMark("constructor,StartTM"); options = options || {}; if (element.winControl) { throw new _ErrorFromName("WinJS.UI.NavBarContainer.DuplicateConstruction", strings.duplicateConstruction); } // Attaching JS control to DOM element element.winControl = this; this._element = element; _ElementUtilities.addClass(this.element, NavBarContainer._ClassName.navbarcontainer); _ElementUtilities.addClass(this.element, "win-disposable"); if (!element.getAttribute("tabIndex")) { element.tabIndex = -1; } this._focusCurrentItemPassivelyBound = this._focusCurrentItemPassively.bind(this); this._closeSplitAndResetBound = this._closeSplitAndReset.bind(this); this._currentManipulationState = MS_MANIPULATION_STATE_STOPPED; this._panningDisabled = !_ElementUtilities._supportsSnapPoints; this._fixedSize = false; this._maxRows = 1; this._sizes = {}; this._setupTree(); this._duringConstructor = true; this._dataChangingBound = this._dataChanging.bind(this); this._dataChangedBound = this._dataChanged.bind(this); Navigation.addEventListener('navigated', this._closeSplitAndResetBound); // Don't use set options for the properties so we can control the ordering to avoid rendering multiple times. this.layout = options.layout || _UI.Orientation.horizontal; if (options.maxRows) { this.maxRows = options.maxRows; } if (options.template) { this.template = options.template; } if (options.data) { this.data = options.data; } if (options.fixedSize) { this.fixedSize = options.fixedSize; } // Events only _Control._setOptions(this, options, true); this._duringConstructor = false; if (options.currentIndex) { this.currentIndex = options.currentIndex; } this._updatePageUI(); Scheduler.schedule(function NavBarContainer_async_initialize() { this._updateAppBarReference(); }, Scheduler.Priority.normal, this, "WinJS.UI.NavBarContainer_async_initialize"); this._writeProfilerMark("constructor,StopTM"); }, { /// element: { get: function () { return this._element; } }, /// /// Gets or sets a Template or custom rendering function that defines the HTML of each item within the NavBarContainer. /// /// template: { get: function () { return this._template; }, set: function (value) { this._template = value; if (this._repeater) { var hadFocus = this.element.contains(_Global.document.activeElement); if (!this._duringConstructor) { this._closeSplitIfOpen(); } // the repeater's template is wired up to this._render() so just resetting it will rebuild the tree. this._repeater.template = this._repeater.template; if (!this._duringConstructor) { this._measured = false; this._sizes.itemMeasured = false; this._reset(); if (hadFocus) { this._keyboardBehavior._focus(0); } } } } }, _render: function NavBarContainer_render(item) { var navbarCommandEl = _Global.document.createElement('div'); var template = this._template; if (template) { if (template.render) { template.render(item, navbarCommandEl); } else if (template.winControl && template.winControl.render) { template.winControl.render(item, navbarCommandEl); } else { navbarCommandEl.appendChild(template(item)); } } // Create the NavBarCommand after calling render so that the reparenting in navbarCommand works. var navbarCommand = new _Command.NavBarCommand(navbarCommandEl, item); return navbarCommand._element; }, /// /// Gets or sets the WinJS.Binding.List that provides the NavBarContainer with items to display. /// /// data: { get: function () { return this._repeater && this._repeater.data; }, set: function (value) { if (!value) { value = new BindingList.List(); } if (!this._duringConstructor) { this._closeSplitIfOpen(); } this._removeDataChangingEvents(); this._removeDataChangedEvents(); var hadFocus = this.element.contains(_Global.document.activeElement); if (!this._repeater) { this._surfaceEl.innerHTML = ""; this._repeater = new Repeater.Repeater(this._surfaceEl, { template: this._render.bind(this) }); } this._addDataChangingEvents(value); this._repeater.data = value; this._addDataChangedEvents(value); if (!this._duringConstructor) { this._measured = false; this._sizes.itemMeasured = false; this._reset(); if (hadFocus) { this._keyboardBehavior._focus(0); } } } }, /// /// Gets or sets the number of rows allowed to be used before items are placed on additional pages. /// /// maxRows: { get: function () { return this._maxRows; }, set: function (value) { value = (+value === value) ? value : 1; this._maxRows = Math.max(1, value); if (!this._duringConstructor) { this._closeSplitIfOpen(); this._measured = false; this._reset(); } } }, /// /// Gets or sets a value that specifies whether the NavBarContainer has a horizontal or vertical layout. The default is "horizontal". /// /// layout: { get: function () { return this._layout; }, set: function (value) { if (value === _UI.Orientation.vertical) { this._layout = _UI.Orientation.vertical; _ElementUtilities.removeClass(this.element, NavBarContainer._ClassName.horizontal); _ElementUtilities.addClass(this.element, NavBarContainer._ClassName.vertical); } else { this._layout = _UI.Orientation.horizontal; _ElementUtilities.removeClass(this.element, NavBarContainer._ClassName.vertical); _ElementUtilities.addClass(this.element, NavBarContainer._ClassName.horizontal); } this._viewportEl.style.msScrollSnapType = ""; this._zooming = false; if (!this._duringConstructor) { this._measured = false; this._sizes.itemMeasured = false; this._ensureVisible(this._keyboardBehavior.currentIndex, true); this._updatePageUI(); this._closeSplitIfOpen(); } } }, /// currentIndex: { get: function () { return this._keyboardBehavior.currentIndex; }, set: function (value) { if (value === +value) { var hadFocus = this.element.contains(_Global.document.activeElement); this._keyboardBehavior.currentIndex = value; this._ensureVisible(this._keyboardBehavior.currentIndex, true); if (hadFocus) { this._keyboardBehavior._focus(); } } } }, /// /// Gets or sets a value that specifies whether child NavBarCommand objects should be a fixed width when there are multiple pages. A value of true indicates /// that the NavBarCommand objects use a fixed width; a value of false indicates that they use a dynamic width. /// /// fixedSize: { get: function () { return this._fixedSize; }, set: function (value) { this._fixedSize = !!value; if (!this._duringConstructor) { this._closeSplitIfOpen(); if (!this._measured) { this._measure(); } else if (this._surfaceEl.children.length > 0) { this._updateGridStyles(); } } } }, /// /// Raised when a NavBarCommand has been invoked. /// /// oninvoked: createEvent(eventNames.invoked), /// /// Raised when the split button on a NavBarCommand is toggled. /// /// onsplittoggle: createEvent(eventNames.splittoggle), forceLayout: function NavBarContainer_forceLayout() { /// /// /// Forces the NavBarContainer to update scroll positions and if the NavBar has changed size, it will also re-measure. /// Use this function when making the NavBarContainer visible again after you set its style.display property to "none". /// /// /// this._resizeHandler(); if (this._measured) { this._scrollPosition = _ElementUtilities.getScrollPosition(this._viewportEl)[(this.layout === _UI.Orientation.horizontal ? "scrollLeft" : "scrollTop")]; } this._duringForceLayout = true; this._ensureVisible(this._keyboardBehavior.currentIndex, true); this._updatePageUI(); this._duringForceLayout = false; }, _updateAppBarReference: function NavBarContainer_updateAppBarReference() { if (!this._appBarEl || !this._appBarEl.contains(this.element)) { if (this._appBarEl) { this._appBarEl.removeEventListener('beforeopen', this._closeSplitAndResetBound); this._appBarEl.removeEventListener('beforeopen', this._resizeImplBound); this._appBarEl.removeEventListener('afteropen', this._focusCurrentItemPassivelyBound); } var appBarEl = this.element.parentNode; while (appBarEl && !_ElementUtilities.hasClass(appBarEl, _Constants.appBarClass)) { appBarEl = appBarEl.parentNode; } this._appBarEl = appBarEl; if (this._appBarEl) { this._appBarEl.addEventListener('beforeopen', this._closeSplitAndResetBound); this._appBarEl.addEventListener('afteropen', this._focusCurrentItemPassivelyBound); } } }, _closeSplitAndReset: function NavBarContainer_closeSplitAndReset() { this._closeSplitIfOpen(); this._reset(); }, _dataChanging: function NavBarContainer_dataChanging(ev) { // Store the element that was active so that we can detect // if the focus went away because of the data change. this._elementHadFocus = _Global.document.activeElement; if (this._currentSplitNavItem && this._currentSplitNavItem.splitOpened) { if (ev.type === "itemremoved") { if (this._surfaceEl.children[ev.detail.index].winControl === this._currentSplitNavItem) { this._closeSplitIfOpen(); } } else if (ev.type === "itemchanged") { if (this._surfaceEl.children[ev.detail.index].winControl === this._currentSplitNavItem) { this._closeSplitIfOpen(); } } else if (ev.type === "itemmoved") { if (this._surfaceEl.children[ev.detail.oldIndex].winControl === this._currentSplitNavItem) { this._closeSplitIfOpen(); } } else if (ev.type === "reload") { this._closeSplitIfOpen(); } } }, _dataChanged: function NavBarContainer_dataChanged(ev) { this._measured = false; if (ev.type === "itemremoved") { if (ev.detail.index < this._keyboardBehavior.currentIndex) { this._keyboardBehavior.currentIndex--; } else if (ev.detail.index === this._keyboardBehavior.currentIndex) { // This clamps if the item being removed was the last item in the list this._keyboardBehavior.currentIndex = this._keyboardBehavior.currentIndex; if (nobodyHasFocus() && this._elementHadFocus) { this._keyboardBehavior._focus(); } } } else if (ev.type === "itemchanged") { if (ev.detail.index === this._keyboardBehavior.currentIndex) { if (nobodyHasFocus() && this._elementHadFocus) { this._keyboardBehavior._focus(); } } } else if (ev.type === "iteminserted") { if (ev.detail.index <= this._keyboardBehavior.currentIndex) { this._keyboardBehavior.currentIndex++; } } else if (ev.type === "itemmoved") { if (ev.detail.oldIndex === this._keyboardBehavior.currentIndex) { this._keyboardBehavior.currentIndex = ev.detail.newIndex; if (nobodyHasFocus() && this._elementHadFocus) { this._keyboardBehavior._focus(); } } } else if (ev.type === "reload") { this._keyboardBehavior.currentIndex = 0; if (nobodyHasFocus() && this._elementHadFocus) { this._keyboardBehavior._focus(); } } this._ensureVisible(this._keyboardBehavior.currentIndex, true); this._updatePageUI(); }, _focusCurrentItemPassively: function NavBarContainer_focusCurrentItemPassively() { if (this.element.contains(_Global.document.activeElement)) { this._keyboardBehavior._focus(); } }, _reset: function NavBarContainer_reset() { this._keyboardBehavior.currentIndex = 0; if (this.element.contains(_Global.document.activeElement)) { this._keyboardBehavior._focus(0); } this._viewportEl.style.msScrollSnapType = ""; this._zooming = false; this._ensureVisible(0, true); this._updatePageUI(); }, _removeDataChangedEvents: function NavBarContainer_removeDataChangedEvents() { if (this._repeater) { this._repeater.data.removeEventListener("itemchanged", this._dataChangedBound); this._repeater.data.removeEventListener("iteminserted", this._dataChangedBound); this._repeater.data.removeEventListener("itemmoved", this._dataChangedBound); this._repeater.data.removeEventListener("itemremoved", this._dataChangedBound); this._repeater.data.removeEventListener("reload", this._dataChangedBound); } }, _addDataChangedEvents: function NavBarContainer_addDataChangedEvents() { if (this._repeater) { this._repeater.data.addEventListener("itemchanged", this._dataChangedBound); this._repeater.data.addEventListener("iteminserted", this._dataChangedBound); this._repeater.data.addEventListener("itemmoved", this._dataChangedBound); this._repeater.data.addEventListener("itemremoved", this._dataChangedBound); this._repeater.data.addEventListener("reload", this._dataChangedBound); } }, _removeDataChangingEvents: function NavBarContainer_removeDataChangingEvents() { if (this._repeater) { this._repeater.data.removeEventListener("itemchanged", this._dataChangingBound); this._repeater.data.removeEventListener("iteminserted", this._dataChangingBound); this._repeater.data.removeEventListener("itemmoved", this._dataChangingBound); this._repeater.data.removeEventListener("itemremoved", this._dataChangingBound); this._repeater.data.removeEventListener("reload", this._dataChangingBound); } }, _addDataChangingEvents: function NavBarContainer_addDataChangingEvents(bindingList) { bindingList.addEventListener("itemchanged", this._dataChangingBound); bindingList.addEventListener("iteminserted", this._dataChangingBound); bindingList.addEventListener("itemmoved", this._dataChangingBound); bindingList.addEventListener("itemremoved", this._dataChangingBound); bindingList.addEventListener("reload", this._dataChangingBound); }, _mouseleave: function NavBarContainer_mouseleave() { if (this._mouseInViewport) { this._mouseInViewport = false; this._updateArrows(); } }, _MSPointerDown: function NavBarContainer_MSPointerDown(ev) { if (ev.pointerType === PT_TOUCH) { if (this._mouseInViewport) { this._mouseInViewport = false; this._updateArrows(); } } }, _MSPointerMove: function NavBarContainer_MSPointerMove(ev) { if (ev.pointerType !== PT_TOUCH) { if (!this._mouseInViewport) { this._mouseInViewport = true; this._updateArrows(); } } }, _setupTree: function NavBarContainer_setupTree() { this._animateNextPreviousButtons = Promise.wrap(); this._element.addEventListener('mouseleave', this._mouseleave.bind(this)); _ElementUtilities._addEventListener(this._element, 'pointerdown', this._MSPointerDown.bind(this)); _ElementUtilities._addEventListener(this._element, 'pointermove', this._MSPointerMove.bind(this)); _ElementUtilities._addEventListener(this._element, "focusin", this._focusHandler.bind(this), false); this._pageindicatorsEl = _Global.document.createElement('div'); _ElementUtilities.addClass(this._pageindicatorsEl, NavBarContainer._ClassName.pageindicators); this._element.appendChild(this._pageindicatorsEl); this._ariaStartMarker = _Global.document.createElement("div"); this._element.appendChild(this._ariaStartMarker); this._viewportEl = _Global.document.createElement('div'); _ElementUtilities.addClass(this._viewportEl, NavBarContainer._ClassName.viewport); this._element.appendChild(this._viewportEl); this._viewportEl.setAttribute("role", "group"); this._viewportEl.setAttribute("aria-label", strings.navBarContainerViewportAriaLabel); this._boundResizeHandler = this._resizeHandler.bind(this); _ElementUtilities._resizeNotifier.subscribe(this._element, this._boundResizeHandler); this._viewportEl.addEventListener("mselementresize", this._resizeHandler.bind(this)); this._viewportEl.addEventListener("scroll", this._scrollHandler.bind(this)); this._viewportEl.addEventListener("MSManipulationStateChanged", this._MSManipulationStateChangedHandler.bind(this)); this._ariaEndMarker = _Global.document.createElement("div"); this._element.appendChild(this._ariaEndMarker); this._surfaceEl = _Global.document.createElement('div'); _ElementUtilities.addClass(this._surfaceEl, NavBarContainer._ClassName.surface); this._viewportEl.appendChild(this._surfaceEl); this._surfaceEl.addEventListener("_invoked", this._navbarCommandInvokedHandler.bind(this)); this._surfaceEl.addEventListener("_splittoggle", this._navbarCommandSplitToggleHandler.bind(this)); _ElementUtilities._addEventListener(this._surfaceEl, "focusin", this._itemsFocusHandler.bind(this), false); this._surfaceEl.addEventListener("keydown", this._keyDownHandler.bind(this)); // Reparent NavBarCommands which were in declarative markup var tempEl = this.element.firstElementChild; while (tempEl !== this._pageindicatorsEl) { this._surfaceEl.appendChild(tempEl); ControlProcessor.process(tempEl); tempEl = this.element.firstElementChild; } this._leftArrowEl = _Global.document.createElement('div'); _ElementUtilities.addClass(this._leftArrowEl, NavBarContainer._ClassName.navleftarrow); _ElementUtilities.addClass(this._leftArrowEl, NavBarContainer._ClassName.navarrow); this._element.appendChild(this._leftArrowEl); this._leftArrowEl.addEventListener('click', this._goLeft.bind(this)); this._leftArrowEl.style.opacity = 0; this._leftArrowEl.style.visibility = 'hidden'; this._leftArrowFadeOut = Promise.wrap(); this._rightArrowEl = _Global.document.createElement('div'); _ElementUtilities.addClass(this._rightArrowEl, NavBarContainer._ClassName.navrightarrow); _ElementUtilities.addClass(this._rightArrowEl, NavBarContainer._ClassName.navarrow); this._element.appendChild(this._rightArrowEl); this._rightArrowEl.addEventListener('click', this._goRight.bind(this)); this._rightArrowEl.style.opacity = 0; this._rightArrowEl.style.visibility = 'hidden'; this._rightArrowFadeOut = Promise.wrap(); this._keyboardBehavior = new _KeyboardBehavior._KeyboardBehavior(this._surfaceEl, { scroller: this._viewportEl }); this._winKeyboard = new _KeyboardBehavior._WinKeyboard(this._surfaceEl); }, _goRight: function NavBarContainer_goRight() { if (this._sizes.rtl) { this._goPrev(); } else { this._goNext(); } }, _goLeft: function NavBarContainer_goLeft() { if (this._sizes.rtl) { this._goNext(); } else { this._goPrev(); } }, _goNext: function NavBarContainer_goNext() { this._measure(); var itemsPerPage = this._sizes.rowsPerPage * this._sizes.columnsPerPage; var targetPage = Math.min(Math.floor(this._keyboardBehavior.currentIndex / itemsPerPage) + 1, this._sizes.pages - 1); this._keyboardBehavior.currentIndex = Math.min(itemsPerPage * targetPage, this._surfaceEl.children.length); this._keyboardBehavior._focus(); }, _goPrev: function NavBarContainer_goPrev() { this._measure(); var itemsPerPage = this._sizes.rowsPerPage * this._sizes.columnsPerPage; var targetPage = Math.max(0, Math.floor(this._keyboardBehavior.currentIndex / itemsPerPage) - 1); this._keyboardBehavior.currentIndex = Math.max(itemsPerPage * targetPage, 0); this._keyboardBehavior._focus(); }, _currentPage: { get: function () { if (this.layout === _UI.Orientation.horizontal) { this._measure(); if (this._sizes.viewportOffsetWidth > 0) { return Math.min(this._sizes.pages - 1, Math.round(this._scrollPosition / this._sizes.viewportOffsetWidth)); } } return 0; } }, _resizeHandler: function NavBarContainer_resizeHandler() { if (this._disposed) { return; } if (!this._measured) { return; } var viewportResized = this.layout === _UI.Orientation.horizontal ? this._sizes.viewportOffsetWidth !== parseFloat(_Global.getComputedStyle(this._viewportEl).width) : this._sizes.viewportOffsetHeight !== parseFloat(_Global.getComputedStyle(this._viewportEl).height); if (!viewportResized) { return; } this._measured = false; if (!this._pendingResize) { this._pendingResize = true; this._resizeImplBound = this._resizeImplBound || this._resizeImpl.bind(this); this._updateAppBarReference(); if (this._appBarEl && this._appBarEl.winControl && !this._appBarEl.winControl.opened) { // Do resize lazily. Scheduler.schedule(this._resizeImplBound, Scheduler.Priority.idle, null, "WinJS.UI.NavBarContainer._resizeImpl"); this._appBarEl.addEventListener('beforeopen', this._resizeImplBound); } else { // Do resize now this._resizeImpl(); } } }, _resizeImpl: function NavBarContainer_resizeImpl() { if (!this._disposed && this._pendingResize) { this._pendingResize = false; if (this._appBarEl) { this._appBarEl.removeEventListener('beforeopen', this._resizeImplBound); } this._keyboardBehavior.currentIndex = 0; if (this.element.contains(_Global.document.activeElement)) { this._keyboardBehavior._focus(this._keyboardBehavior.currentIndex); } this._closeSplitIfOpen(); this._ensureVisible(this._keyboardBehavior.currentIndex, true); this._updatePageUI(); } }, _keyDownHandler: function NavBarContainer_keyDownHandler(ev) { var keyCode = ev.keyCode; if (!ev.altKey && (keyCode === Key.pageUp || keyCode === Key.pageDown)) { var srcElement = ev.target; if (_ElementUtilities._matchesSelector(srcElement, ".win-interactive, .win-interactive *")) { return; } var index = this._keyboardBehavior.currentIndex; this._measure(); var sizes = this._sizes; var page = Math.floor(index / (sizes.columnsPerPage * sizes.rowsPerPage)); var scrollPositionTarget = null; if (keyCode === Key.pageUp) { if (this.layout === _UI.Orientation.horizontal) { var indexOfFirstItemOnPage = page * sizes.columnsPerPage * sizes.rowsPerPage; if (index === indexOfFirstItemOnPage && this._surfaceEl.children[index].winControl._buttonEl === _Global.document.activeElement) { // First item on page so go back 1 page. index = index - sizes.columnsPerPage * sizes.rowsPerPage; } else { // Not first item on page so go to the first item on page. index = indexOfFirstItemOnPage; } } else { var currentItem = this._surfaceEl.children[index]; var top = currentItem.offsetTop; var bottom = top + currentItem.offsetHeight; var scrollPosition = this._zooming ? this._zoomPosition : this._scrollPosition; if (top >= scrollPosition && bottom < scrollPosition + sizes.viewportOffsetHeight) { // current item is fully on screen. while (index > 0 && this._surfaceEl.children[index - 1].offsetTop > scrollPosition) { index--; } } if (this._keyboardBehavior.currentIndex === index) { var scrollPositionForOnePageAboveItem = bottom - sizes.viewportOffsetHeight; index = Math.max(0, index - 1); while (index > 0 && this._surfaceEl.children[index - 1].offsetTop > scrollPositionForOnePageAboveItem) { index--; } if (index > 0) { scrollPositionTarget = this._surfaceEl.children[index].offsetTop - this._sizes.itemMarginTop; } else { scrollPositionTarget = 0; } } } index = Math.max(index, 0); this._keyboardBehavior.currentIndex = index; var element = this._surfaceEl.children[index].winControl._buttonEl; if (scrollPositionTarget !== null) { this._scrollTo(scrollPositionTarget); } _ElementUtilities._setActive(element, this._viewportEl); } else { if (this.layout === _UI.Orientation.horizontal) { var indexOfLastItemOnPage = (page + 1) * sizes.columnsPerPage * sizes.rowsPerPage - 1; if (index === indexOfLastItemOnPage) { // Last item on page so go forward 1 page. index = index + sizes.columnsPerPage * sizes.rowsPerPage; } else { // Not Last item on page so go to last item on page. index = indexOfLastItemOnPage; } } else { var currentItem = this._surfaceEl.children[this._keyboardBehavior.currentIndex]; var top = currentItem.offsetTop; var bottom = top + currentItem.offsetHeight; var scrollPosition = this._zooming ? this._zoomPosition : this._scrollPosition; if (top >= scrollPosition && bottom < scrollPosition + sizes.viewportOffsetHeight) { // current item is fully on screen. while (index < this._surfaceEl.children.length - 1 && this._surfaceEl.children[index + 1].offsetTop + this._surfaceEl.children[index + 1].offsetHeight < scrollPosition + sizes.viewportOffsetHeight) { index++; } } if (index === this._keyboardBehavior.currentIndex) { var scrollPositionForOnePageBelowItem = top + sizes.viewportOffsetHeight; index = Math.min(this._surfaceEl.children.length - 1, index + 1); while (index < this._surfaceEl.children.length - 1 && this._surfaceEl.children[index + 1].offsetTop + this._surfaceEl.children[index + 1].offsetHeight < scrollPositionForOnePageBelowItem) { index++; } if (index < this._surfaceEl.children.length - 1) { scrollPositionTarget = this._surfaceEl.children[index + 1].offsetTop - this._sizes.viewportOffsetHeight; } else { scrollPositionTarget = this._scrollLength - this._sizes.viewportOffsetHeight; } } } index = Math.min(index, this._surfaceEl.children.length - 1); this._keyboardBehavior.currentIndex = index; var element = this._surfaceEl.children[index].winControl._buttonEl; if (scrollPositionTarget !== null) { this._scrollTo(scrollPositionTarget); } try { _ElementUtilities._setActive(element, this._viewportEl); } catch (e) { } } } }, _focusHandler: function NavBarContainer_focusHandler(ev) { var srcElement = ev.target; if (!this._surfaceEl.contains(srcElement)) { // Forward focus from NavBarContainer, viewport or surface to the currentIndex. this._skipEnsureVisible = true; this._keyboardBehavior._focus(this._keyboardBehavior.currentIndex); } }, _itemsFocusHandler: function NavBarContainer_itemsFocusHandler(ev) { // Find the item which is being focused and scroll it to view. var srcElement = ev.target; if (srcElement === this._surfaceEl) { return; } while (srcElement.parentNode !== this._surfaceEl) { srcElement = srcElement.parentNode; } var index = -1; while (srcElement) { index++; srcElement = srcElement.previousSibling; } if (this._skipEnsureVisible) { this._skipEnsureVisible = false; } else { this._ensureVisible(index); } }, _ensureVisible: function NavBarContainer_ensureVisible(index, withoutAnimation) { this._measure(); if (this.layout === _UI.Orientation.horizontal) { var page = Math.floor(index / (this._sizes.rowsPerPage * this._sizes.columnsPerPage)); this._scrollTo(page * this._sizes.viewportOffsetWidth, withoutAnimation); } else { var element = this._surfaceEl.children[index]; var maxScrollPosition; if (index > 0) { maxScrollPosition = element.offsetTop - this._sizes.itemMarginTop; } else { maxScrollPosition = 0; } var minScrollPosition; if (index < this._surfaceEl.children.length - 1) { minScrollPosition = this._surfaceEl.children[index + 1].offsetTop - this._sizes.viewportOffsetHeight; } else { minScrollPosition = this._scrollLength - this._sizes.viewportOffsetHeight; } var newScrollPosition = this._zooming ? this._zoomPosition : this._scrollPosition; newScrollPosition = Math.max(newScrollPosition, minScrollPosition); newScrollPosition = Math.min(newScrollPosition, maxScrollPosition); this._scrollTo(newScrollPosition, withoutAnimation); } }, _scrollTo: function NavBarContainer_scrollTo(targetScrollPosition, withoutAnimation) { this._measure(); if (this.layout === _UI.Orientation.horizontal) { targetScrollPosition = Math.max(0, Math.min(this._scrollLength - this._sizes.viewportOffsetWidth, targetScrollPosition)); } else { targetScrollPosition = Math.max(0, Math.min(this._scrollLength - this._sizes.viewportOffsetHeight, targetScrollPosition)); } if (withoutAnimation) { if (Math.abs(this._scrollPosition - targetScrollPosition) > 1) { this._zooming = false; this._scrollPosition = targetScrollPosition; this._updatePageUI(); if (!this._duringForceLayout) { this._closeSplitIfOpen(); } var newScrollPos = {}; newScrollPos[(this.layout === _UI.Orientation.horizontal ? "scrollLeft" : "scrollTop")] = targetScrollPosition; _ElementUtilities.setScrollPosition(this._viewportEl, newScrollPos); } } else { if ((!this._zooming && Math.abs(this._scrollPosition - targetScrollPosition) > 1) || (this._zooming && Math.abs(this._zoomPosition - targetScrollPosition) > 1)) { this._zoomPosition = targetScrollPosition; this._zooming = true; if (this.layout === _UI.Orientation.horizontal) { this._viewportEl.style.msScrollSnapType = "none"; _ElementUtilities._zoomTo(this._viewportEl, { contentX: targetScrollPosition, contentY: 0, viewportX: 0, viewportY: 0 }); } else { _ElementUtilities._zoomTo(this._viewportEl, { contentX: 0, contentY: targetScrollPosition, viewportX: 0, viewportY: 0 }); } this._closeSplitIfOpen(); } } }, _MSManipulationStateChangedHandler: function NavBarContainer_MSManipulationStateChangedHandler(e) { this._currentManipulationState = e.currentState; if (e.currentState === e.MS_MANIPULATION_STATE_ACTIVE) { this._viewportEl.style.msScrollSnapType = ""; this._zooming = false; } _Global.clearTimeout(this._manipulationStateTimeoutId); // The extra stop event is firing when an zoomTo is called during another zoomTo and // also the first zoomTo after a resize. if (e.currentState === e.MS_MANIPULATION_STATE_STOPPED) { this._manipulationStateTimeoutId = _Global.setTimeout(function () { this._viewportEl.style.msScrollSnapType = ""; this._zooming = false; this._updateCurrentIndexIfPageChanged(); }.bind(this), 100); } }, _scrollHandler: function NavBarContainer_scrollHandler() { if (this._disposed) { return; } this._measured = false; if (!this._checkingScroll) { var that = this; this._checkingScroll = _BaseUtils._requestAnimationFrame(function () { if (that._disposed) { return; } that._checkingScroll = null; var newScrollPosition = _ElementUtilities.getScrollPosition(that._viewportEl)[(that.layout === _UI.Orientation.horizontal ? "scrollLeft" : "scrollTop")]; if (newScrollPosition !== that._scrollPosition) { that._scrollPosition = newScrollPosition; that._closeSplitIfOpen(); } that._updatePageUI(); if (!that._zooming && that._currentManipulationState === MS_MANIPULATION_STATE_STOPPED) { that._updateCurrentIndexIfPageChanged(); } }); } }, _updateCurrentIndexIfPageChanged: function NavBarContainer_updateCurrentIndexIfPageChanged() { // If you change pages via pagination arrows, mouse wheel, or panning we need to update the current // item to be the first item on the new page. if (this.layout === _UI.Orientation.horizontal) { this._measure(); var currentPage = this._currentPage; var firstIndexOnPage = currentPage * this._sizes.rowsPerPage * this._sizes.columnsPerPage; var lastIndexOnPage = (currentPage + 1) * this._sizes.rowsPerPage * this._sizes.columnsPerPage - 1; if (this._keyboardBehavior.currentIndex < firstIndexOnPage || this._keyboardBehavior.currentIndex > lastIndexOnPage) { // Page change occurred. this._keyboardBehavior.currentIndex = firstIndexOnPage; if (this.element.contains(_Global.document.activeElement)) { this._keyboardBehavior._focus(this._keyboardBehavior.currentIndex); } } } }, _measure: function NavBarContainer_measure() { if (!this._measured) { this._resizeImpl(); this._writeProfilerMark("measure,StartTM"); var sizes = this._sizes; sizes.rtl = _Global.getComputedStyle(this._element).direction === "rtl"; var itemCount = this._surfaceEl.children.length; if (itemCount > 0) { if (!this._sizes.itemMeasured) { this._writeProfilerMark("measureItem,StartTM"); var elementToMeasure = this._surfaceEl.firstElementChild; // Clear inline margins set by NavBarContainer before measuring. elementToMeasure.style.margin = ""; elementToMeasure.style.width = ""; var elementComputedStyle = _Global.getComputedStyle(elementToMeasure); sizes.itemOffsetWidth = parseFloat(_Global.getComputedStyle(elementToMeasure).width); if (elementToMeasure.offsetWidth === 0) { sizes.itemOffsetWidth = 0; } sizes.itemMarginLeft = parseFloat(elementComputedStyle.marginLeft); sizes.itemMarginRight = parseFloat(elementComputedStyle.marginRight); sizes.itemWidth = sizes.itemOffsetWidth + sizes.itemMarginLeft + sizes.itemMarginRight; sizes.itemOffsetHeight = parseFloat(_Global.getComputedStyle(elementToMeasure).height); if (elementToMeasure.offsetHeight === 0) { sizes.itemOffsetHeight = 0; } sizes.itemMarginTop = parseFloat(elementComputedStyle.marginTop); sizes.itemMarginBottom = parseFloat(elementComputedStyle.marginBottom); sizes.itemHeight = sizes.itemOffsetHeight + sizes.itemMarginTop + sizes.itemMarginBottom; if (sizes.itemOffsetWidth > 0 && sizes.itemOffsetHeight > 0) { sizes.itemMeasured = true; } this._writeProfilerMark("measureItem,StopTM"); } sizes.viewportOffsetWidth = parseFloat(_Global.getComputedStyle(this._viewportEl).width); if (this._viewportEl.offsetWidth === 0) { sizes.viewportOffsetWidth = 0; } sizes.viewportOffsetHeight = parseFloat(_Global.getComputedStyle(this._viewportEl).height); if (this._viewportEl.offsetHeight === 0) { sizes.viewportOffsetHeight = 0; } if (sizes.viewportOffsetWidth === 0 || sizes.itemOffsetHeight === 0) { this._measured = false; } else { this._measured = true; } if (this.layout === _UI.Orientation.horizontal) { this._scrollPosition = _ElementUtilities.getScrollPosition(this._viewportEl).scrollLeft; sizes.leadingEdge = this._leftArrowEl.offsetWidth + parseInt(_Global.getComputedStyle(this._leftArrowEl).marginLeft) + parseInt(_Global.getComputedStyle(this._leftArrowEl).marginRight); var usableSpace = sizes.viewportOffsetWidth - sizes.leadingEdge * 2; sizes.maxColumns = sizes.itemWidth ? Math.max(1, Math.floor(usableSpace / sizes.itemWidth)) : 1; sizes.rowsPerPage = Math.min(this.maxRows, Math.ceil(itemCount / sizes.maxColumns)); sizes.columnsPerPage = Math.min(sizes.maxColumns, itemCount); sizes.pages = Math.ceil(itemCount / (sizes.columnsPerPage * sizes.rowsPerPage)); sizes.trailingEdge = sizes.leadingEdge; sizes.extraSpace = usableSpace - (sizes.columnsPerPage * sizes.itemWidth); this._scrollLength = sizes.viewportOffsetWidth * sizes.pages; this._keyboardBehavior.fixedSize = sizes.rowsPerPage; this._keyboardBehavior.fixedDirection = _KeyboardBehavior._KeyboardBehavior.FixedDirection.height; this._surfaceEl.style.height = (sizes.itemHeight * sizes.rowsPerPage) + "px"; this._surfaceEl.style.width = this._scrollLength + "px"; } else { this._scrollPosition = this._viewportEl.scrollTop; sizes.leadingEdge = 0; sizes.rowsPerPage = itemCount; sizes.columnsPerPage = 1; sizes.pages = 1; sizes.trailingEdge = 0; // Reminder there is margin collapsing so just use scrollHeight instead of itemHeight * itemCount this._scrollLength = this._viewportEl.scrollHeight; this._keyboardBehavior.fixedSize = sizes.columnsPerPage; this._keyboardBehavior.fixedDirection = _KeyboardBehavior._KeyboardBehavior.FixedDirection.width; this._surfaceEl.style.height = ""; this._surfaceEl.style.width = ""; } this._updateGridStyles(); } else { sizes.pages = 1; this._hasPreviousContent = false; this._hasNextContent = false; this._surfaceEl.style.height = ""; this._surfaceEl.style.width = ""; } this._writeProfilerMark("measure,StopTM"); } }, _updateGridStyles: function NavBarContainer_updateGridStyles() { var sizes = this._sizes; var itemCount = this._surfaceEl.children.length; for (var index = 0; index < itemCount; index++) { var itemEl = this._surfaceEl.children[index]; var marginRight; var marginLeft; var width = ""; if (this.layout === _UI.Orientation.horizontal) { var column = Math.floor(index / sizes.rowsPerPage); var isFirstColumnOnPage = column % sizes.columnsPerPage === 0; var isLastColumnOnPage = column % sizes.columnsPerPage === sizes.columnsPerPage - 1; var extraTrailingMargin = sizes.trailingEdge; if (this.fixedSize) { extraTrailingMargin += sizes.extraSpace; } else { var spaceToDistribute = sizes.extraSpace - (sizes.maxColumns - sizes.columnsPerPage) * sizes.itemWidth; width = (sizes.itemOffsetWidth + (spaceToDistribute / sizes.maxColumns)) + "px"; } var extraMarginRight; var extraMarginLeft; if (sizes.rtl) { extraMarginRight = (isFirstColumnOnPage ? sizes.leadingEdge : 0); extraMarginLeft = (isLastColumnOnPage ? extraTrailingMargin : 0); } else { extraMarginRight = (isLastColumnOnPage ? extraTrailingMargin : 0); extraMarginLeft = (isFirstColumnOnPage ? sizes.leadingEdge : 0); } marginRight = extraMarginRight + sizes.itemMarginRight + "px"; marginLeft = extraMarginLeft + sizes.itemMarginLeft + "px"; } else { marginRight = ""; marginLeft = ""; } if (itemEl.style.marginRight !== marginRight) { itemEl.style.marginRight = marginRight; } if (itemEl.style.marginLeft !== marginLeft) { itemEl.style.marginLeft = marginLeft; } if (itemEl.style.width !== width) { itemEl.style.width = width; } } }, _updatePageUI: function NavBarContainer_updatePageUI() { this._measure(); var currentPage = this._currentPage; this._hasPreviousContent = (currentPage !== 0); this._hasNextContent = (currentPage < this._sizes.pages - 1); this._updateArrows(); // Always output the pagination indicators so they reserves up space. if (this._indicatorCount !== this._sizes.pages) { this._indicatorCount = this._sizes.pages; this._pageindicatorsEl.innerHTML = new Array(this._sizes.pages + 1).join(''); } for (var i = 0; i < this._pageindicatorsEl.children.length; i++) { if (i === currentPage) { _ElementUtilities.addClass(this._pageindicatorsEl.children[i], NavBarContainer._ClassName.currentindicator); } else { _ElementUtilities.removeClass(this._pageindicatorsEl.children[i], NavBarContainer._ClassName.currentindicator); } } if (this._sizes.pages > 1) { this._viewportEl.style.overflowX = this._panningDisabled ? "hidden" : ""; this._pageindicatorsEl.style.visibility = ""; } else { this._viewportEl.style.overflowX = "hidden"; this._pageindicatorsEl.style.visibility = "hidden"; } if (this._sizes.pages <= 1 || this._layout !== _UI.Orientation.horizontal) { this._ariaStartMarker.removeAttribute("aria-flowto"); this._ariaEndMarker.removeAttribute("x-ms-aria-flowfrom"); } else { var firstIndexOnCurrentPage = currentPage * this._sizes.rowsPerPage * this._sizes.columnsPerPage; var firstItem = this._surfaceEl.children[firstIndexOnCurrentPage].winControl._buttonEl; _ElementUtilities._ensureId(firstItem); this._ariaStartMarker.setAttribute("aria-flowto", firstItem.id); var lastIndexOnCurrentPage = Math.min(this._surfaceEl.children.length - 1, (currentPage + 1) * this._sizes.rowsPerPage * this._sizes.columnsPerPage - 1); var lastItem = this._surfaceEl.children[lastIndexOnCurrentPage].winControl._buttonEl; _ElementUtilities._ensureId(lastItem); this._ariaEndMarker.setAttribute("x-ms-aria-flowfrom", lastItem.id); } }, _closeSplitIfOpen: function NavBarContainer_closeSplitIfOpen() { if (this._currentSplitNavItem) { if (this._currentSplitNavItem.splitOpened) { this._currentSplitNavItem._toggleSplit(); } this._currentSplitNavItem = null; } }, _updateArrows: function NavBarContainer_updateArrows() { var hasLeftContent = this._sizes.rtl ? this._hasNextContent : this._hasPreviousContent; var hasRightContent = this._sizes.rtl ? this._hasPreviousContent : this._hasNextContent; var that = this; // Previous and next are the arrows, not states. On mouse hover the arrows fade in immediately. If you // mouse out the arrows fade out after a delay. When you reach the last/first page, the corresponding // arrow fades out immediately as well. if ((this._mouseInViewport || this._panningDisabled) && hasLeftContent) { this._leftArrowWaitingToFadeOut && this._leftArrowWaitingToFadeOut.cancel(); this._leftArrowWaitingToFadeOut = null; this._leftArrowFadeOut && this._leftArrowFadeOut.cancel(); this._leftArrowFadeOut = null; this._leftArrowEl.style.visibility = ''; this._leftArrowFadeIn = this._leftArrowFadeIn || Animations.fadeIn(this._leftArrowEl); } else { if (hasLeftContent) { // If we need a delayed fade out and we are already running a delayed fade out just use that one, don't extend it. // Otherwise create a delayed fade out. this._leftArrowWaitingToFadeOut = this._leftArrowWaitingToFadeOut || Promise.timeout(_TransitionAnimation._animationTimeAdjustment(buttonFadeDelay)); } else { // If we need a immediate fade out and already have a delayed fade out cancel that one and create an immediate one. this._leftArrowWaitingToFadeOut && this._leftArrowWaitingToFadeOut.cancel(); this._leftArrowWaitingToFadeOut = Promise.wrap(); } this._leftArrowWaitingToFadeOut.then(function () { // After the delay cancel any fade in if running. If we already were fading out continue it otherwise start the fade out. this._leftArrowFadeIn && this._leftArrowFadeIn.cancel(); this._leftArrowFadeIn = null; this._leftArrowFadeOut = this._leftArrowFadeOut || Animations.fadeOut(this._leftArrowEl).then(function () { that._leftArrowEl.style.visibility = 'hidden'; }); }.bind(this)); } // Same pattern for Next arrow. if ((this._mouseInViewport || this._panningDisabled) && hasRightContent) { this._rightArrowWaitingToFadeOut && this._rightArrowWaitingToFadeOut.cancel(); this._rightArrowWaitingToFadeOut = null; this._rightArrowFadeOut && this._rightArrowFadeOut.cancel(); this._rightArrowFadeOut = null; this._rightArrowEl.style.visibility = ''; this._rightArrowFadeIn = this._rightArrowFadeIn || Animations.fadeIn(this._rightArrowEl); } else { if (hasRightContent) { this._rightArrowWaitingToFadeOut = this._rightArrowWaitingToFadeOut || Promise.timeout(_TransitionAnimation._animationTimeAdjustment(buttonFadeDelay)); } else { this._rightArrowWaitingToFadeOut && this._rightArrowWaitingToFadeOut.cancel(); this._rightArrowWaitingToFadeOut = Promise.wrap(); } this._rightArrowWaitingToFadeOut.then(function () { this._rightArrowFadeIn && this._rightArrowFadeIn.cancel(); this._rightArrowFadeIn = null; this._rightArrowFadeOut = this._rightArrowFadeOut || Animations.fadeOut(this._rightArrowEl).then(function () { that._rightArrowEl.style.visibility = 'hidden'; }); }.bind(this)); } }, _navbarCommandInvokedHandler: function NavBarContainer_navbarCommandInvokedHandler(ev) { var srcElement = ev.target; var index = -1; while (srcElement) { index++; srcElement = srcElement.previousSibling; } this._fireEvent(NavBarContainer._EventName.invoked, { index: index, navbarCommand: ev.target.winControl, data: this._repeater ? this._repeater.data.getAt(index) : null }); }, _navbarCommandSplitToggleHandler: function NavBarContainer_navbarCommandSplitToggleHandler(ev) { var srcElement = ev.target; var index = -1; while (srcElement) { index++; srcElement = srcElement.previousSibling; } var navbarCommand = ev.target.winControl; this._closeSplitIfOpen(); if (navbarCommand.splitOpened) { this._currentSplitNavItem = navbarCommand; } this._fireEvent(NavBarContainer._EventName.splitToggle, { opened: navbarCommand.splitOpened, index: index, navbarCommand: navbarCommand, data: this._repeater ? this._repeater.data.getAt(index) : null }); }, _fireEvent: function NavBarContainer_fireEvent(type, detail) { var event = _Global.document.createEvent("CustomEvent"); event.initCustomEvent(type, true, false, detail); this.element.dispatchEvent(event); }, _writeProfilerMark: function NavBarContainer_writeProfilerMark(text) { var message = "WinJS.UI.NavBarContainer:" + this._id + ":" + text; _WriteProfilerMark(message); _Log.log && _Log.log(message, null, "navbarcontainerprofiler"); }, dispose: function NavBarContainer_dispose() { /// /// /// Disposes this control. /// /// /// if (this._disposed) { return; } this._disposed = true; if (this._appBarEl) { this._appBarEl.removeEventListener('beforeopen', this._closeSplitAndResetBound); this._appBarEl.removeEventListener('beforeopen', this._resizeImplBound); } Navigation.removeEventListener('navigated', this._closeSplitAndResetBound); this._leftArrowWaitingToFadeOut && this._leftArrowWaitingToFadeOut.cancel(); this._leftArrowFadeOut && this._leftArrowFadeOut.cancel(); this._leftArrowFadeIn && this._leftArrowFadeIn.cancel(); this._rightArrowWaitingToFadeOut && this._rightArrowWaitingToFadeOut.cancel(); this._rightArrowFadeOut && this._rightArrowFadeOut.cancel(); this._rightArrowFadeIn && this._rightArrowFadeIn.cancel(); _ElementUtilities._resizeNotifier.unsubscribe(this._element, this._boundResizeHandler); this._removeDataChangingEvents(); this._removeDataChangedEvents(); } }, { // Names of classes used by the NavBarContainer. _ClassName: { navbarcontainer: "win-navbarcontainer", pageindicators: "win-navbarcontainer-pageindicator-box", indicator: "win-navbarcontainer-pageindicator", currentindicator: "win-navbarcontainer-pageindicator-current", vertical: "win-navbarcontainer-vertical", horizontal: "win-navbarcontainer-horizontal", viewport: "win-navbarcontainer-viewport", surface: "win-navbarcontainer-surface", navarrow: "win-navbarcontainer-navarrow", navleftarrow: "win-navbarcontainer-navleft", navrightarrow: "win-navbarcontainer-navright" }, _EventName: { invoked: eventNames.invoked, splitToggle: eventNames.splittoggle } }); _Base.Class.mix(NavBarContainer, _Control.DOMEventMixin); return NavBarContainer; }) }); }); define('require-style!less/styles-navbar',[],function(){}); define('require-style!less/colors-navbar',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/NavBar',[ '../Core/_Global', '../Core/_WinRT', '../Core/_Base', '../Core/_BaseUtils', '../Core/_Events', '../Core/_WriteProfilerMark', '../Promise', '../Scheduler', '../Utilities/_ElementUtilities', '../Utilities/_Hoverable', "../_Accents", './_LegacyAppBar', './NavBar/_Command', './NavBar/_Container', 'require-style!less/styles-navbar', 'require-style!less/colors-navbar' ], function NavBarInit(_Global,_WinRT, _Base, _BaseUtils, _Events, _WriteProfilerMark, Promise, Scheduler, _ElementUtilities, _Hoverable, _Accents, _LegacyAppBar, _Command, _Container) { "use strict"; _Accents.createAccentRule("html.win-hoverable .win-navbarcommand-splitbutton.win-navbarcommand-splitbutton-opened:hover", [{ name: "background-color", value: _Accents.ColorTypes.listSelectHover }]); _Accents.createAccentRule("html.win-hoverable .win-navbarcommand-splitbutton.win-navbarcommand-splitbutton-opened:hover.win-pressed", [{ name: "background-color", value: _Accents.ColorTypes.listSelectPress }]); _Accents.createAccentRule(".win-navbarcommand-splitbutton.win-navbarcommand-splitbutton-opened", [{ name: "background-color", value: _Accents.ColorTypes.listSelectRest }]); _Accents.createAccentRule(".win-navbarcommand-splitbutton.win-navbarcommand-splitbutton-opened.win-pressed", [{ name: "background-color", value: _Accents.ColorTypes.listSelectPress }]); var customLayout = "custom"; _Base.Namespace.define("WinJS.UI", { /// /// /// Displays navigation commands in a toolbar that the user can open or close. /// /// /// /// /// /// ///
    ///
    ///
    /// ]]>
    /// Raised just before opening the NavBar. /// Raised immediately after an NavBar is fully opened. /// Raised just before closing the NavBar. /// Raised immediately after the NavBar is fully closed. /// Fired when children of NavBar control have been processed from a WinJS.UI.processAll call. /// Styles the entire NavBar. /// /// NavBar: _Base.Namespace._lazy(function () { var childrenProcessedEventName = "childrenprocessed"; var createEvent = _Events._createEventProperty; var NavBar = _Base.Class.derive(_LegacyAppBar._LegacyAppBar, function NavBar_ctor(element, options) { /// /// /// Creates a new NavBar. /// /// /// The DOM element that will host the new NavBar control. /// /// /// An object that contains one or more property/value pairs to apply to the new control. Each property of the options object corresponds to one of the control's /// properties or events. /// /// /// The new NavBar control. /// /// /// options = options || {}; // Shallow copy object so we can modify it. options = _BaseUtils._shallowCopy(options); // Default to Placement = Top and Layout = Custom options.placement = options.placement || "top"; options.layout = customLayout; options.closedDisplayMode = options.closedDisplayMode || "minimal"; _LegacyAppBar._LegacyAppBar.call(this, element, options); this._element.addEventListener("beforeopen", this._handleBeforeShow.bind(this)); _ElementUtilities.addClass(this.element, NavBar._ClassName.navbar); if (_WinRT.Windows.ApplicationModel.DesignMode.designModeEnabled) { this._processChildren(); } else { Scheduler.schedule(this._processChildren.bind(this), Scheduler.Priority.idle, null, "WinJS.UI.NavBar.processChildren"); } }, { // Restrict values of closedDisplayMode to 'none' or 'minimal' /// /// Gets/Sets how NavBar will display itself while hidden. Values are "none" and "minimal". /// closedDisplayMode: { get: function () { return this._closedDisplayMode; }, set: function (value) { var newValue = (value === "none" ? "none" : "minimal"); Object.getOwnPropertyDescriptor(_LegacyAppBar._LegacyAppBar.prototype, "closedDisplayMode").set.call(this, newValue); this._closedDisplayMode = newValue; }, }, /// /// Raised when children of NavBar control have been processed by a WinJS.UI.processAll call. /// /// onchildrenprocessed: createEvent(childrenProcessedEventName), _processChildren: function NavBar_processChildren() { // The NavBar control schedules processAll on its children at idle priority to avoid hurting startup // performance. If the NavBar is shown before the scheduler gets to the idle job, the NavBar will // immediately call processAll on its children. If your app needs the children to be processed before // the scheduled job executes, you may call processChildren to force the processAll call. if (!this._processed) { this._processed = true; this._writeProfilerMark("processChildren,StartTM"); var that = this; var processed = Promise.as(); if (this._processors) { this._processors.forEach(function (processAll) { for (var i = 0, len = that.element.children.length; i < len; i++) { (function (child) { processed = processed.then(function () { processAll(child); }); }(that.element.children[i])); } }); } return processed.then( function () { that._writeProfilerMark("processChildren,StopTM"); that._fireEvent(NavBar._EventName.childrenProcessed); }, function () { that._writeProfilerMark("processChildren,StopTM"); that._fireEvent(NavBar._EventName.childrenProcessed); } ); } return Promise.wrap(); }, _show: function NavBar_show() { // Override _show to call processChildren first. // if (this.disabled) { return; } var that = this; this._processChildren().then(function () { _LegacyAppBar._LegacyAppBar.prototype._show.call(that); }); }, _handleBeforeShow: function NavBar_handleBeforeShow() { // Navbar needs to ensure its elements to have their correct height and width after _LegacyAppBar changes display="none" // to display="" and _LegacyAppBar needs the elements to have their final height before it measures its own element height // to do the slide in animation over the correct amount of pixels. if (this._disposed) { return; } var navbarcontainerEls = this.element.querySelectorAll('.win-navbarcontainer'); for (var i = 0; i < navbarcontainerEls.length; i++) { navbarcontainerEls[i].winControl.forceLayout(); } }, _fireEvent: function NavBar_fireEvent(type, detail) { var event = _Global.document.createEvent("CustomEvent"); event.initCustomEvent(type, true, false, detail || {}); this.element.dispatchEvent(event); }, _writeProfilerMark: function NavBar_writeProfilerMark(text) { _WriteProfilerMark("WinJS.UI.NavBar:" + this._id + ":" + text); } }, { _ClassName: { navbar: "win-navbar" }, _EventName: { childrenProcessed: childrenProcessedEventName }, isDeclarativeControlContainer: _BaseUtils.markSupportedForProcessing(function (navbar, callback) { if (navbar._processed) { for (var i = 0, len = navbar.element.children.length; i < len; i++) { callback(navbar.element.children[i]); } } else { navbar._processors = navbar._processors || []; navbar._processors.push(callback); } }) }); return NavBar; }) }); }); define('require-style!less/styles-viewbox',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. // ViewBox control define('WinJS/Controls/ViewBox',[ '../Core/_Global', '../Core/_Base', '../Core/_BaseUtils', '../Core/_ErrorFromName', '../Core/_Resources', '../Scheduler', '../Utilities/_Control', '../Utilities/_Dispose', '../Utilities/_ElementUtilities', '../Utilities/_Hoverable', 'require-style!less/styles-viewbox' ], function viewboxInit(_Global, _Base, _BaseUtils, _ErrorFromName, _Resources, Scheduler, _Control, _Dispose, _ElementUtilities, _Hoverable) { "use strict"; _Base.Namespace.define("WinJS.UI", { /// /// /// Scales a single child element to fill the available space without /// resizing it. This control reacts to changes in the size of the container as well as /// changes in size of the child element. For example, a media query may result in /// a change in aspect ratio. /// /// /// View Box /// /// ///
    ViewBox
    ]]>
    /// /// ViewBox: _Base.Namespace._lazy(function () { var strings = { get invalidViewBoxChildren() { return "ViewBox expects to only have one child element"; }, }; function onresize(control) { if (control && !control._resizing) { control._resizing = control._resizing || 0; control._resizing++; try { control._updateLayout(); } finally { control._resizing--; } } } function onresizeBox(ev) { if (ev.target) { onresize(ev.target.winControl); } } function onresizeSizer(ev) { if (ev.target) { onresize(ev.target.parentElement.winControl); } } var ViewBox = _Base.Class.define(function ViewBox_ctor(element) { /// /// Initializes a new instance of the ViewBox control /// /// The DOM element that functions as the scaling box. This element fills 100% of the width and height allotted to it. /// /// /// The set of options to be applied initially to the ViewBox control. /// /// A constructed ViewBox control. /// this._disposed = false; this._element = element || _Global.document.createElement("div"); var box = this.element; box.winControl = this; _ElementUtilities.addClass(box, "win-disposable"); _ElementUtilities.addClass(box, "win-viewbox"); this.forceLayout(); }, { _sizer: null, _element: null, /// element: { get: function () { return this._element; } }, _rtl: { get: function () { return _Global.getComputedStyle(this.element).direction === "rtl"; } }, _initialize: function () { var box = this.element; if (box.firstElementChild !== this._sizer) { if (_BaseUtils.validation) { if (box.childElementCount !== 1) { throw new _ErrorFromName("WinJS.UI.ViewBox.InvalidChildren", strings.invalidViewBoxChildren); } } if (this._sizer) { this._sizer.onresize = null; } var sizer = box.firstElementChild; this._sizer = sizer; if (sizer) { _ElementUtilities._resizeNotifier.subscribe(box, onresizeBox); box.addEventListener("mselementresize", onresizeBox); _ElementUtilities._resizeNotifier.subscribe(sizer, onresizeSizer); sizer.addEventListener("mselementresize", onresizeSizer); } if (box.clientWidth === 0 && box.clientHeight === 0) { var that = this; // Wait for the viewbox to get added to the DOM. It should be added // in the synchronous block in which _initialize was called. Scheduler.schedule(function ViewBox_async_initialize() { that._updateLayout(); }, Scheduler.Priority.normal, null, "WinJS.UI.ViewBox._updateLayout"); } } }, _updateLayout: function () { var sizer = this._sizer; if (sizer) { var box = this.element; var w = sizer.clientWidth; var h = sizer.clientHeight; var bw = box.clientWidth; var bh = box.clientHeight; var wRatio = bw / w; var hRatio = bh / h; var mRatio = Math.min(wRatio, hRatio); var transX = Math.abs(bw - (w * mRatio)) / 2; var transY = Math.abs(bh - (h * mRatio)) / 2; var rtl = this._rtl; this._sizer.style[_BaseUtils._browserStyleEquivalents["transform"].scriptName] = "translate(" + (rtl ? "-" : "") + transX + "px," + transY + "px) scale(" + mRatio + ")"; this._sizer.style[_BaseUtils._browserStyleEquivalents["transform-origin"].scriptName] = rtl ? "top right" : "top left"; } }, dispose: function () { /// /// /// Disposes this ViewBox. /// /// if (this._disposed) { return; } if (this.element) { _ElementUtilities._resizeNotifier.unsubscribe(this.element, onresizeBox); } if (this._sizer) { _ElementUtilities._resizeNotifier.unsubscribe(this._sizer, onresizeSizer); } this._disposed = true; _Dispose.disposeSubTree(this._element); }, forceLayout: function () { this._initialize(); this._updateLayout(); } }); _Base.Class.mix(ViewBox, _Control.DOMEventMixin); return ViewBox; }) }); }); define('require-style!less/styles-contentdialog',[],function(){}); define('require-style!less/colors-contentdialog',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('WinJS/Controls/ContentDialog',[ '../Application', '../Utilities/_Dispose', '../_Accents', '../Promise', '../_Signal', '../_LightDismissService', '../Core/_BaseUtils', '../Core/_Global', '../Core/_WinRT', '../Core/_Base', '../Core/_Events', '../Core/_ErrorFromName', '../Core/_Resources', '../Utilities/_Control', '../Utilities/_ElementUtilities', '../Utilities/_Hoverable', '../Animations', 'require-style!less/styles-contentdialog', 'require-style!less/colors-contentdialog' ], function contentDialogInit(Application, _Dispose, _Accents, Promise, _Signal, _LightDismissService, _BaseUtils, _Global, _WinRT, _Base, _Events, _ErrorFromName, _Resources, _Control, _ElementUtilities, _Hoverable, _Animations) { "use strict"; _Accents.createAccentRule(".win-contentdialog-dialog", [{ name: "outline-color", value: _Accents.ColorTypes.accent }]); _Base.Namespace.define("WinJS.UI", { /// /// /// Displays a modal dialog which can display arbitrary HTML content. /// /// /// /// /// ]]> /// Raised just before showing a dialog. Call preventDefault on this event to stop the dialog from being shown. /// Raised immediately after a dialog is fully shown. /// Raised just before hiding a dialog. Call preventDefault on this event to stop the dialog from being hidden. /// Raised immediately after a dialog is fully hidden. /// The entire ContentDialog control. /// The full screen element which dims the content that is behind the dialog. /// The main element of the dialog which holds the dialog's title, content, and commands. /// The element which displays the dialog's title. /// The element which contains the dialog's custom content. /// The element which contains the dialog's primary and secondary commands. /// The dialog's primary button. /// The dialog's secondary button. /// /// ContentDialog: _Base.Namespace._lazy(function () { var Strings = { get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; }, get controlDisposed() { return "Cannot interact with the control after it has been disposed"; }, get contentDialogAlreadyShowing() { return "Cannot show a ContentDialog if there is already a ContentDialog that is showing"; } }; var DismissalResult = { /// /// The dialog was dismissed without the user selecting any of the commands. The user may have /// dismissed the dialog by hitting the escape key or pressing the hardware back button. /// none: "none", /// /// The user dismissed the dialog by pressing the primary command. /// primary: "primary", /// /// The user dismissed the dialog by pressing the secondary command. /// secondary: "secondary" }; var ClassNames = { contentDialog: "win-contentdialog", backgroundOverlay: "win-contentdialog-backgroundoverlay", dialog: "win-contentdialog-dialog", title: "win-contentdialog-title", content: "win-contentdialog-content", commands: "win-contentdialog-commands", primaryCommand: "win-contentdialog-primarycommand", secondaryCommand: "win-contentdialog-secondarycommand", _verticalAlignment: "win-contentdialog-verticalalignment", _scroller: "win-contentdialog-scroller", _column0or1: "win-contentdialog-column0or1", _visible: "win-contentdialog-visible", _tabStop: "win-contentdialog-tabstop", _commandSpacer: "win-contentdialog-commandspacer" }; var EventNames = { beforeShow: "beforeshow", afterShow: "aftershow", beforeHide: "beforehide", afterHide: "afterhide", }; var minContentHeightWithInputPane = 96; // WinJS animation promises always complete successfully. This // helper allows an animation promise to complete in the canceled state // so that the success handler can be skipped when the animation is // interrupted. function cancelablePromise(animationPromise) { return Promise._cancelBlocker(animationPromise, function () { animationPromise.cancel(); }); } function onInputPaneShown(eventObject) { /*jshint validthis: true */ eventObject.ensuredFocusedElementInView = true; this.dialog._renderForInputPane(eventObject.occludedRect.height); } function onInputPaneHidden() { /*jshint validthis: true */ this.dialog._clearInputPaneRendering(); } // Noop function, used in the various states to indicate that they don't support a given // message. Named with the somewhat cute name '_' because it reads really well in the states. function _() { } // Implementing the control as a state machine helps us correctly handle: // - re-entrancy while firing events // - calls into the control during asynchronous operations (e.g. animations) // // Many of the states do their "enter" work within a promise chain. The idea is that if // the state is interrupted and exits, the rest of its work can be skipped by canceling // the promise chain. // An interesting detail is that anytime the state may call into app code (e.g. due to // firing an event), the current promise must end and a new promise must be chained off of it. // This is necessary because the app code may interact with the ContentDialog and cause it to // change states. If we didn't create a new promise, then the very next line of code that runs // after calling into app code may not be valid because the state may have exited. Starting a // new promise after each call into app code prevents us from having to worry about this // problem. In this configuration, when a promise's success handler runs, it guarantees that // the state hasn't exited. // For similar reasons, each of the promise chains created in "enter" starts off with a _Signal // which is completed at the end of the "enter" function (this boilerplate is abstracted away by // the "interruptible" function). The reason is that we don't want any of the code in "enter" // to run until the promise chain has been stored in a variable. If we didn't do this (e.g. instead, // started the promise chain with Promise.wrap()), then the "enter" code could trigger the "exit" // function (via app code) before the promise chain had been stored in a variable. Under these // circumstances, the promise chain would be uncancelable and so the "enter" work would be // unskippable. This wouldn't be good when we needed the state to exit early. // These two functions manage interruptible work promises (one creates them the other cancels // them). They communicate with each other thru the _interruptibleWorkPromises property which // "interruptible" creates on your object. function interruptible(object, workFn) { object._interruptibleWorkPromises = object._interruptibleWorkPromises || []; var workStoredSignal = new _Signal(); object._interruptibleWorkPromises.push(workFn(object, workStoredSignal.promise)); workStoredSignal.complete(); } function cancelInterruptibles() { /*jshint validthis: true */ (this._interruptibleWorkPromises || []).forEach(function (workPromise) { workPromise.cancel(); }); } // Transitions: // When created, the control will take the following initialization transition: // Init -> Hidden // Following that, the life of the dialog will be dominated by the following 3 // sequences of transitions. In geneneral, these sequences are uninterruptible. // Hidden -> BeforeShow -> Hidden (when preventDefault is called on beforeshow event) // Hidden -> BeforeShow -> Showing -> Shown // Shown -> BeforeHide -> Hiding -> Hidden // Shown -> BeforeHide -> Shown (when preventDefault is called on beforehide event) // However, any state can be interrupted to go to the Disposed state: // * -> Disposed // // interface IContentDialogState { // // Debugging // name: string; // // State lifecycle // enter(arg0); // exit(); // // ContentDialog's public API surface // hidden: boolean; // show(); // hide(dismissalResult); // // Events // onCommandClicked(dismissalResult); // onInputPaneShown(eventObject); // onInputPaneHidden(); // // Provided by _setState for use within the state // dialog: WinJS.UI.ContentDialog; // } var States = { // Initial state. Initializes state on the dialog shared by the various states. Init: _Base.Class.define(null, { name: "Init", hidden: true, enter: function ContentDialog_InitState_enter() { var dialog = this.dialog; dialog._dismissable = new _LightDismissService.ModalElement({ element: dialog._dom.root, tabIndex: dialog._dom.root.hasAttribute("tabIndex") ? dialog._dom.root.tabIndex : -1, onLightDismiss: function () { dialog.hide(DismissalResult.none); }, onTakeFocus: function (useSetActive) { dialog._dismissable.restoreFocus() || _ElementUtilities._focusFirstFocusableElement(dialog._dom.content) || _ElementUtilities._tryFocusOnAnyElement(dialog._dom.dialog, useSetActive); } }); this.dialog._dismissedSignal = null; // The signal will be created on demand when show() is called this.dialog._setState(States.Hidden, false); }, exit: _, show: function ContentDialog_InitState_show() { throw "It's illegal to call show on the Init state"; }, hide: _, onCommandClicked: _, onInputPaneShown: _, onInputPaneHidden: _ }), // A rest state. The dialog is hidden and is waiting for the app to call show. Hidden: _Base.Class.define(null, { name: "Hidden", hidden: true, enter: function ContentDialog_HiddenState_enter(showIsPending) { if (showIsPending) { this.show(); } }, exit: _, show: function ContentDialog_HiddenState_show() { var dismissedSignal = this.dialog._dismissedSignal = new _Signal(); // save the signal in case it changes when switching states this.dialog._setState(States.BeforeShow); return dismissedSignal.promise; }, hide: _, onCommandClicked: _, onInputPaneShown: _, onInputPaneHidden: _ }), // An event state. The dialog fires the beforeshow event. BeforeShow: _Base.Class.define(null, { name: "BeforeShow", hidden: true, enter: function ContentDialog_BeforeShowState_enter() { interruptible(this, function (that, ready) { return ready.then(function () { return that.dialog._fireBeforeShow(); // Give opportunity for chain to be canceled when calling into app code }).then(function (shouldShow) { if (!shouldShow) { that.dialog._cancelDismissalPromise(null); // Give opportunity for chain to be canceled when calling into app code } return shouldShow; }).then(function (shouldShow) { if (shouldShow) { that.dialog._setState(States.Showing); } else { that.dialog._setState(States.Hidden, false); } }); }); }, exit: cancelInterruptibles, show: function ContentDialog_BeforeShowState_show() { return Promise.wrapError(new _ErrorFromName("WinJS.UI.ContentDialog.ContentDialogAlreadyShowing", Strings.contentDialogAlreadyShowing)); }, hide: _, onCommandClicked: _, onInputPaneShown: _, onInputPaneHidden: _ }), // An animation/event state. The dialog plays its entrance animation and fires aftershow. Showing: _Base.Class.define(null, { name: "Showing", hidden: { get: function ContentDialog_ShowingState_hidden_get() { return !!this._pendingHide; } }, enter: function ContentDialog_ShowingState_enter() { interruptible(this, function (that, ready) { return ready.then(function () { that._pendingHide = null; _ElementUtilities.addClass(that.dialog._dom.root, ClassNames._visible); that.dialog._addExternalListeners(); if (_WinRT.Windows.UI.ViewManagement.InputPane) { var inputPaneHeight = _WinRT.Windows.UI.ViewManagement.InputPane.getForCurrentView().occludedRect.height; if (inputPaneHeight > 0) { that.dialog._renderForInputPane(inputPaneHeight); } } _LightDismissService.shown(that.dialog._dismissable); return that.dialog._playEntranceAnimation(); }).then(function () { that.dialog._fireEvent(EventNames.afterShow); // Give opportunity for chain to be canceled when calling into app code }).then(function () { that.dialog._setState(States.Shown, that._pendingHide); }); }); }, exit: cancelInterruptibles, show: function ContentDialog_ShowingState_show() { if (this._pendingHide) { var dismissalResult = this._pendingHide.dismissalResult; this._pendingHide = null; return this.dialog._resetDismissalPromise(dismissalResult, new _Signal()).promise; } else { return Promise.wrapError(new _ErrorFromName("WinJS.UI.ContentDialog.ContentDialogAlreadyShowing", Strings.contentDialogAlreadyShowing)); } }, hide: function ContentDialog_ShowingState_hide(dismissalResult) { this._pendingHide = { dismissalResult: dismissalResult }; }, onCommandClicked: _, onInputPaneShown: onInputPaneShown, onInputPaneHidden: onInputPaneHidden }), // A rest state. The dialog is shown and is waiting for the user or the app to trigger hide. Shown: _Base.Class.define(null, { name: "Shown", hidden: false, enter: function ContentDialog_ShownState_enter(pendingHide) { if (pendingHide) { this.hide(pendingHide.dismissalResult); } }, exit: _, show: function ContentDialog_ShownState_show() { return Promise.wrapError(new _ErrorFromName("WinJS.UI.ContentDialog.ContentDialogAlreadyShowing", Strings.contentDialogAlreadyShowing)); }, hide: function ContentDialog_ShownState_hide(dismissalResult) { this.dialog._setState(States.BeforeHide, dismissalResult); }, onCommandClicked: function ContentDialog_ShownState_onCommandClicked(dismissalResult) { this.hide(dismissalResult); }, onInputPaneShown: onInputPaneShown, onInputPaneHidden: onInputPaneHidden }), // An event state. The dialog fires the beforehide event. BeforeHide: _Base.Class.define(null, { name: "BeforeHide", hidden: false, enter: function ContentDialog_BeforeHideState_enter(dismissalResult) { interruptible(this, function (that, ready) { return ready.then(function () { return that.dialog._fireBeforeHide(dismissalResult); // Give opportunity for chain to be canceled when calling into app code }).then(function (shouldHide) { if (shouldHide) { that.dialog._setState(States.Hiding, dismissalResult); } else { that.dialog._setState(States.Shown, null); } }); }); }, exit: cancelInterruptibles, show: function ContentDialog_BeforeHideState_show() { return Promise.wrapError(new _ErrorFromName("WinJS.UI.ContentDialog.ContentDialogAlreadyShowing", Strings.contentDialogAlreadyShowing)); }, hide: _, onCommandClicked: _, onInputPaneShown: onInputPaneShown, onInputPaneHidden: onInputPaneHidden }), // An animation/event state. The dialog plays the exit animation and fires the afterhide event. Hiding: _Base.Class.define(null, { name: "Hiding", hidden: { get: function ContentDialog_HidingState_hidden_get() { return !this._showIsPending; } }, enter: function ContentDialog_HidingState_enter(dismissalResult) { interruptible(this, function (that, ready) { return ready.then(function () { that._showIsPending = false; that.dialog._resetDismissalPromise(dismissalResult, null); // Give opportunity for chain to be canceled when calling into app code }).then(function () { return that.dialog._playExitAnimation(); }).then(function () { that.dialog._removeExternalListeners(); _LightDismissService.hidden(that.dialog._dismissable); _ElementUtilities.removeClass(that.dialog._dom.root, ClassNames._visible); that.dialog._clearInputPaneRendering(); that.dialog._fireAfterHide(dismissalResult); // Give opportunity for chain to be canceled when calling into app code }).then(function () { that.dialog._setState(States.Hidden, that._showIsPending); }); }); }, exit: cancelInterruptibles, show: function ContentDialog_HidingState_show() { if (this._showIsPending) { return Promise.wrapError(new _ErrorFromName("WinJS.UI.ContentDialog.ContentDialogAlreadyShowing", Strings.contentDialogAlreadyShowing)); } else { this._showIsPending = true; this.dialog._dismissedSignal = new _Signal(); return this.dialog._dismissedSignal.promise; } }, hide: function ContentDialog_HidingState_hide(dismissalResult) { if (this._showIsPending) { this._showIsPending = false; this.dialog._resetDismissalPromise(dismissalResult, null); } }, onCommandClicked: _, onInputPaneShown: _, onInputPaneHidden: _ }), Disposed: _Base.Class.define(null, { name: "Disposed", hidden: true, enter: function ContentDialog_DisposedState_enter() { _LightDismissService.hidden(this.dialog._dismissable); this.dialog._removeExternalListeners(); if (this.dialog._dismissedSignal) { this.dialog._dismissedSignal.error(new _ErrorFromName("WinJS.UI.ContentDialog.ControlDisposed", Strings.controlDisposed)); } }, exit: _, show: function ContentDialog_DisposedState_show() { return Promise.wrapError(new _ErrorFromName("WinJS.UI.ContentDialog.ControlDisposed", Strings.controlDisposed)); }, hide: _, onCommandClicked: _, onInputPaneShown: _, onInputPaneHidden: _ }), }; var ContentDialog = _Base.Class.define(function ContentDialog_ctor(element, options) { /// /// /// Creates a new ContentDialog control. /// /// /// The DOM element that hosts the ContentDialog control. /// /// /// An object that contains one or more property/value pairs to apply to the new control. /// Each property of the options object corresponds to one of the control's properties or events. /// Event names must begin with "on". For example, to provide a handler for the beforehide event, /// add a property named "onbeforehide" to the options object and set its value to the event handler. /// /// /// The new ContentDialog. /// /// // Check to make sure we weren't duplicated if (element && element.winControl) { throw new _ErrorFromName("WinJS.UI.ContentDialog.DuplicateConstruction", Strings.duplicateConstruction); } options = options || {}; this._onInputPaneShownBound = this._onInputPaneShown.bind(this); this._onInputPaneHiddenBound = this._onInputPaneHidden.bind(this); this._disposed = false; this._resizedForInputPane = false; this._currentFocus = null; this._initializeDom(element || _Global.document.createElement("div")); this._setState(States.Init); this.title = ""; this.primaryCommandText = ""; this.primaryCommandDisabled = false; this.secondaryCommandText = ""; this.secondaryCommandDisabled = false; _Control.setOptions(this, options); }, { /// element: { get: function ContentDialog_element_get() { return this._dom.root; } }, /// /// The text displayed as the title of the dialog. /// title: { get: function ContentDialog_title_get() { return this._title; }, set: function ContentDialog_title_set(value) { value = value || ""; if (this._title !== value) { this._title = value; this._dom.title.textContent = value; this._dom.title.style.display = value ? "" : "none"; } } }, /// /// The text displayed on the primary command's button. /// primaryCommandText: { get: function ContentDialog_primaryCommandText_get() { return this._primaryCommandText; }, set: function ContentDialog_primaryCommandText_set(value) { value = value || ""; if (this._primaryCommandText !== value) { this._primaryCommandText = value; this._dom.commands[0].textContent = value; this._updateCommandsUI(); } } }, /// /// The text displayed on the secondary command's button. /// secondaryCommandText: { get: function ContentDialog_secondaryCommandText_get() { return this._secondaryCommandText; }, set: function ContentDialog_secondaryCommandText_set(value) { value = value || ""; if (this._secondaryCommandText !== value) { this._secondaryCommandText = value; this._dom.commands[1].textContent = value; this._updateCommandsUI(); } } }, /// /// Indicates whether the button representing the primary command is currently disabled. /// primaryCommandDisabled: { get: function ContentDialog_primaryCommandDisabled_get() { return this._primaryCommandDisabled; }, set: function ContentDialog_primaryCommandDisabled_set(value) { value = !!value; if (this._primaryCommandDisabled !== value) { this._primaryCommandDisabled = value; this._dom.commands[0].disabled = value; } } }, /// /// Indicates whether the button representing the secondary command is currently disabled. /// secondaryCommandDisabled: { get: function ContentDialog_secondaryCommandDisabled_get() { return this._secondaryCommandDisabled; }, set: function ContentDialog_secondaryCommandDisabled_set(value) { value = !!value; if (this._secondaryCommandDisabled !== value) { this._secondaryCommandDisabled = value; this._dom.commands[1].disabled = value; } } }, /// hidden: { get: function ContentDialog_hidden_get() { return this._state.hidden; }, set: function ContentDialog_hidden_set(hidden) { if (!hidden && this._state.hidden) { var nop = function () { }; // Show returns a promise. If hidden is set while the ContentDialog is disposed, show will return a promise // error which will be impossible to handle and it'll cause the app to terminate. We'll eat the promise returned by show // to stop that from happening. this.show().done(nop, nop); } else if (hidden && !this._state.hidden) { this.hide(DismissalResult.none); } } }, dispose: function ContentDialog_dispose() { /// /// /// Disposes this control. /// /// if (this._disposed) { return; } this._setState(States.Disposed); this._disposed = true; _Dispose._disposeElement(this._dom.content); }, show: function ContentDialog_show() { /// /// /// Shows the ContentDialog. Only one ContentDialog may be shown at a time. If another /// ContentDialog is already shown, this ContentDialog will remain hidden. /// /// /// A promise which is successfully fulfilled when the dialog is dismissed. The /// completion value indicates the dialog's dismissal result. This may /// be 'primary', 'secondary', 'none', or whatever custom value was passed to hide. /// If this ContentDialog cannot be shown because a ContentDialog is already showing /// or the ContentDialog is disposed, then the return value is a promise which is in /// an error state. If preventDefault() is called on the beforeshow event, then this /// promise will be canceled. /// /// return this._state.show(); }, hide: function ContentDialog_hide(result) { /// /// /// Hides the ContentDialog. /// /// /// A value indicating why the dialog is being hidden. The promise returned /// by show will be fulfilled with this value. /// /// this._state.hide(result === undefined ? DismissalResult.none : result); }, _initializeDom: function ContentDialog_initializeDom(root) { // Reparent the children of the root element into the content element. var contentEl = _Global.document.createElement("div"); contentEl.className = ClassNames.content; _ElementUtilities._reparentChildren(root, contentEl); root.winControl = this; _ElementUtilities.addClass(root, ClassNames.contentDialog); _ElementUtilities.addClass(root, ClassNames._verticalAlignment); _ElementUtilities.addClass(root, "win-disposable"); root.innerHTML = '
    ' + '
    ' + '' + '
    ' + '
    '; var dom = {}; dom.root = root; dom.backgroundOverlay = dom.root.firstElementChild; dom.startBodyTab = dom.backgroundOverlay.nextElementSibling; dom.dialog = dom.startBodyTab.nextElementSibling; dom.title = dom.dialog.firstElementChild; dom.scroller = dom.title.nextElementSibling; dom.commandContainer = dom.scroller.nextElementSibling; dom.commandSpacer = dom.commandContainer.firstElementChild; dom.commands = []; dom.commands.push(dom.commandSpacer.nextElementSibling); dom.commands.push(dom.commands[0].nextElementSibling); dom.endBodyTab = dom.dialog.nextElementSibling; dom.content = contentEl; this._dom = dom; // Put the developer's content into the scroller dom.scroller.appendChild(dom.content); _ElementUtilities._ensureId(dom.title); _ElementUtilities._ensureId(dom.startBodyTab); _ElementUtilities._ensureId(dom.endBodyTab); dom.dialog.setAttribute("aria-labelledby", dom.title.id); dom.startBodyTab.setAttribute("x-ms-aria-flowfrom", dom.endBodyTab.id); dom.endBodyTab.setAttribute("aria-flowto", dom.startBodyTab.id); this._updateTabIndices(); dom.root.addEventListener("keydown", this._onKeyDownEnteringElement.bind(this), true); _ElementUtilities._addEventListener(dom.root, "pointerdown", this._onPointerDown.bind(this)); _ElementUtilities._addEventListener(dom.root, "pointerup", this._onPointerUp.bind(this)); dom.root.addEventListener("click", this._onClick.bind(this)); _ElementUtilities._addEventListener(dom.startBodyTab, "focusin", this._onStartBodyTabFocusIn.bind(this)); _ElementUtilities._addEventListener(dom.endBodyTab, "focusin", this._onEndBodyTabFocusIn.bind(this)); dom.commands[0].addEventListener("click", this._onCommandClicked.bind(this, DismissalResult.primary)); dom.commands[1].addEventListener("click", this._onCommandClicked.bind(this, DismissalResult.secondary)); }, _updateCommandsUI: function ContentDialog_updateCommandsUI() { this._dom.commands[0].style.display = this.primaryCommandText ? "" : "none"; this._dom.commands[1].style.display = this.secondaryCommandText ? "" : "none"; // commandSpacer's purpose is to ensure that when only 1 button is shown, that button takes up half // the width of the dialog and is right-aligned. It works by: // - When only one command is shown: // - Coming before the other command in the DOM (so the other command will look right-aligned) // - Having the same flex-grow as the other command (so it occupies half of the space) // - Having visibility: hidden (so it's invisible but it takes up space) // - When both commands are shown: // - Having display: none (so it doesn't occupy any space and the two shown commands each take up half the dialog) // - When 0 commands are shown: // - Having display: none (so the commands area takes up no space) this._dom.commandSpacer.style.display = this.primaryCommandText && !this.secondaryCommandText || !this.primaryCommandText && this.secondaryCommandText ? "" : "none"; }, // _updateTabIndices and _updateTabIndicesImpl are used in tests _updateTabIndices: function ContentDialog_updateTabIndices() { if (!this._updateTabIndicesThrottled) { this._updateTabIndicesThrottled = _BaseUtils._throttledFunction(100, this._updateTabIndicesImpl.bind(this)); } this._updateTabIndicesThrottled(); }, _updateTabIndicesImpl: function ContentDialog_updateTabIndicesImpl() { var tabIndex = _ElementUtilities._getHighAndLowTabIndices(this._dom.content); this._dom.startBodyTab.tabIndex = tabIndex.lowest; this._dom.commands[0].tabIndex = tabIndex.highest; this._dom.commands[1].tabIndex = tabIndex.highest; this._dom.endBodyTab.tabIndex = tabIndex.highest; }, _elementInDialog: function ContentDialog_elementInDialog(element) { return this._dom.dialog.contains(element) || element === this._dom.startBodyTab || element === this._dom.endBodyTab; }, _onCommandClicked: function ContentDialog_onCommandClicked(dismissalResult) { this._state.onCommandClicked(dismissalResult); }, _onPointerDown: function ContentDialog_onPointerDown(eventObject) { eventObject.stopPropagation(); if (!this._elementInDialog(eventObject.target)) { eventObject.preventDefault(); } }, _onPointerUp: function ContentDialog_onPointerUp(eventObject) { eventObject.stopPropagation(); if (!this._elementInDialog(eventObject.target)) { eventObject.preventDefault(); } }, _onClick: function ContentDialog_onClick(eventObject) { eventObject.stopPropagation(); if (!this._elementInDialog(eventObject.target)) { eventObject.preventDefault(); } }, _onKeyDownEnteringElement: function ContentDialog_onKeyDownEnteringElement(eventObject) { if (eventObject.keyCode === _ElementUtilities.Key.tab) { this._updateTabIndices(); } }, _onStartBodyTabFocusIn: function ContentDialog_onStartBodyTabFocusIn() { _ElementUtilities._focusLastFocusableElement(this._dom.dialog); }, _onEndBodyTabFocusIn: function ContentDialog_onEndBodyTabFocusIn() { _ElementUtilities._focusFirstFocusableElement(this._dom.dialog); }, _onInputPaneShown: function ContentDialog_onInputPaneShown(eventObject) { this._state.onInputPaneShown(eventObject.detail.originalEvent); }, _onInputPaneHidden: function ContentDialog_onInputPaneHidden() { this._state.onInputPaneHidden(); }, // // Methods called by states // _setState: function ContentDialog_setState(NewState, arg0) { if (!this._disposed) { this._state && this._state.exit(); this._state = new NewState(); this._state.dialog = this; this._state.enter(arg0); } }, // Calls into arbitrary app code _resetDismissalPromise: function ContentDialog_resetDismissalPromise(dismissalResult, newSignal) { var dismissedSignal = this._dismissedSignal; var newDismissedSignal = this._dismissedSignal = newSignal; dismissedSignal.complete({ result: dismissalResult }); return newDismissedSignal; }, // Calls into arbitrary app code _cancelDismissalPromise: function ContentDialog_cancelDismissalPromise(newSignal) { var dismissedSignal = this._dismissedSignal; var newDismissedSignal = this._dismissedSignal = newSignal; dismissedSignal.cancel(); return newDismissedSignal; }, // Calls into arbitrary app code _fireEvent: function ContentDialog_fireEvent(eventName, options) { options = options || {}; var detail = options.detail || null; var cancelable = !!options.cancelable; var eventObject = _Global.document.createEvent("CustomEvent"); eventObject.initCustomEvent(eventName, true, cancelable, detail); return this._dom.root.dispatchEvent(eventObject); }, // Calls into arbitrary app code _fireBeforeShow: function ContentDialog_fireBeforeShow() { return this._fireEvent(EventNames.beforeShow, { cancelable: true }); }, // Calls into arbitrary app code _fireBeforeHide: function ContentDialog_fireBeforeHide(dismissalResult) { return this._fireEvent(EventNames.beforeHide, { detail: { result: dismissalResult }, cancelable: true }); }, // Calls into arbitrary app code _fireAfterHide: function ContentDialog_fireAfterHide(dismissalResult) { this._fireEvent(EventNames.afterHide, { detail: { result: dismissalResult } }); }, _playEntranceAnimation: function ContentDialog_playEntranceAnimation() { return cancelablePromise(_Animations.fadeIn(this._dom.root)); }, _playExitAnimation: function ContentDialog_playExitAnimation() { return cancelablePromise(_Animations.fadeOut(this._dom.root)); }, _addExternalListeners: function ContentDialog_addExternalListeners() { _ElementUtilities._inputPaneListener.addEventListener(this._dom.root, "showing", this._onInputPaneShownBound); _ElementUtilities._inputPaneListener.addEventListener(this._dom.root, "hiding", this._onInputPaneShownBound); }, _removeExternalListeners: function ContentDialog_removeExternalListeners() { _ElementUtilities._inputPaneListener.removeEventListener(this._dom.root, "showing", this._onInputPaneShownBound); _ElementUtilities._inputPaneListener.removeEventListener(this._dom.root, "hiding", this._onInputPaneShownBound); }, _renderForInputPane: function ContentDialog_renderForInputPane(inputPaneHeight) { this._clearInputPaneRendering(); var dialog = this._dom.dialog; var style = dialog.style; var left = dialog.offsetLeft; var top = dialog.offsetTop; var height = dialog.offsetHeight; var bottom = top + height; var visibleBottom = this._dom.root.offsetHeight - inputPaneHeight; var titleHeight = _ElementUtilities.getTotalHeight(this._dom.title); var commandsHeight = _ElementUtilities.getTotalHeight(this._dom.commandContainer); if (bottom > visibleBottom) { var newHeight = height - (bottom - visibleBottom); if (newHeight - titleHeight - commandsHeight < minContentHeightWithInputPane) { // Put title into scroller so there's more screen real estate for the content this._dom.scroller.insertBefore(this._dom.title, this._dom.content); } this._dom.root.style.display = "block"; style.height = newHeight + "px"; style.position = "absolute"; style.left = left + "px"; style.top = top + "px"; style.minHeight = 0; this._resizedForInputPane = true; _Global.document.activeElement.focus(); // Ensure activeElement is scrolled into view } }, _clearInputPaneRendering: function ContentDialog_clearInputPaneRendering() { if (this._resizedForInputPane) { if (this._dom.title.parentNode !== this._dom.dialog) { // Make sure the title isn't in the scroller this._dom.dialog.insertBefore(this._dom.title, this._dom.scroller); } var style = this._dom.dialog.style; this._dom.root.style.display = ""; style.height = ""; style.position = ""; style.left = ""; style.top = ""; style.minHeight = ""; this._resizedForInputPane = false; } } }, { /// /// Specifies the result of dismissing the ContentDialog. /// DismissalResult: DismissalResult, _ClassNames: ClassNames }); _Base.Class.mix(ContentDialog, _Events.createEventProperties( "beforeshow", "aftershow", "beforehide", "afterhide" )); _Base.Class.mix(ContentDialog, _Control.DOMEventMixin); return ContentDialog; }) }); }); define('require-style!less/styles-splitview',[],function(){}); define('require-style!less/colors-splitview',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// define('WinJS/Controls/SplitView/_SplitView',["require", "exports", '../../Animations', '../../Core/_Base', '../../Core/_BaseUtils', '../../Utilities/_Control', '../../Utilities/_Dispose', '../../Utilities/_ElementUtilities', '../../Core/_ErrorFromName', '../../Core/_Events', '../../Core/_Global', '../../_LightDismissService', '../../Utilities/_OpenCloseMachine'], function (require, exports, Animations, _Base, _BaseUtils, _Control, _Dispose, _ElementUtilities, _ErrorFromName, _Events, _Global, _LightDismissService, _OpenCloseMachine) { require(["require-style!less/styles-splitview"]); require(["require-style!less/colors-splitview"]); "use strict"; var transformNames = _BaseUtils._browserStyleEquivalents["transform"]; var Strings = { get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; } }; var ClassNames = { splitView: "win-splitview", pane: "win-splitview-pane", content: "win-splitview-content", // closed/opened paneClosed: "win-splitview-pane-closed", paneOpened: "win-splitview-pane-opened", _panePlaceholder: "win-splitview-paneplaceholder", _paneWrapper: "win-splitview-panewrapper", _contentWrapper: "win-splitview-contentwrapper", // placement _placementLeft: "win-splitview-placementleft", _placementRight: "win-splitview-placementright", _placementTop: "win-splitview-placementtop", _placementBottom: "win-splitview-placementbottom", // closed display mode _closedDisplayNone: "win-splitview-closeddisplaynone", _closedDisplayInline: "win-splitview-closeddisplayinline", // opened display mode _openedDisplayInline: "win-splitview-openeddisplayinline", _openedDisplayOverlay: "win-splitview-openeddisplayoverlay" }; var EventNames = { beforeOpen: "beforeopen", afterOpen: "afteropen", beforeClose: "beforeclose", afterClose: "afterclose" }; var Dimension = { width: "width", height: "height" }; var ClosedDisplayMode = { /// /// When the pane is closed, it is not visible and doesn't take up any space. /// none: "none", /// /// When the pane is closed, it occupies space leaving less room for the SplitView's content. /// inline: "inline" }; var OpenedDisplayMode = { /// /// When the pane is open, it occupies space leaving less room for the SplitView's content. /// inline: "inline", /// /// When the pane is open, it doesn't take up any space and it is light dismissable. /// overlay: "overlay" }; var PanePlacement = { /// /// Pane is positioned left of the SplitView's content. /// left: "left", /// /// Pane is positioned right of the SplitView's content. /// right: "right", /// /// Pane is positioned above the SplitView's content. /// top: "top", /// /// Pane is positioned below the SplitView's content. /// bottom: "bottom" }; var closedDisplayModeClassMap = {}; closedDisplayModeClassMap[ClosedDisplayMode.none] = ClassNames._closedDisplayNone; closedDisplayModeClassMap[ClosedDisplayMode.inline] = ClassNames._closedDisplayInline; var openedDisplayModeClassMap = {}; openedDisplayModeClassMap[OpenedDisplayMode.overlay] = ClassNames._openedDisplayOverlay; openedDisplayModeClassMap[OpenedDisplayMode.inline] = ClassNames._openedDisplayInline; var panePlacementClassMap = {}; panePlacementClassMap[PanePlacement.left] = ClassNames._placementLeft; panePlacementClassMap[PanePlacement.right] = ClassNames._placementRight; panePlacementClassMap[PanePlacement.top] = ClassNames._placementTop; panePlacementClassMap[PanePlacement.bottom] = ClassNames._placementBottom; // Versions of add/removeClass that are no ops when called with falsy class names. function addClass(element, className) { className && _ElementUtilities.addClass(element, className); } function removeClass(element, className) { className && _ElementUtilities.removeClass(element, className); } function rectToThickness(rect, dimension) { return (dimension === Dimension.width) ? { content: rect.contentWidth, total: rect.totalWidth } : { content: rect.contentHeight, total: rect.totalHeight }; } /// /// /// Displays a SplitView which renders a collapsable pane next to arbitrary HTML content. /// /// /// /// /// ]]> /// Raised just before opening the pane. Call preventDefault on this event to stop the pane from opening. /// Raised immediately after the pane is fully opened. /// Raised just before closing the pane. Call preventDefault on this event to stop the pane from closing. /// Raised immediately after the pane is fully closed. /// The entire SplitView control. /// The element which hosts the SplitView's pane. /// The element which hosts the SplitView's content. /// /// var SplitView = (function () { function SplitView(element, options) { /// /// /// Creates a new SplitView control. /// /// /// The DOM element that hosts the SplitView control. /// /// /// An object that contains one or more property/value pairs to apply to the new control. /// Each property of the options object corresponds to one of the control's properties or events. /// Event names must begin with "on". For example, to provide a handler for the beforeclose event, /// add a property named "onbeforeclose" to the options object and set its value to the event handler. /// /// /// The new SplitView. /// /// var _this = this; if (options === void 0) { options = {}; } // State private to _updateDomImpl. No other method should make use of it. // // Nothing has been rendered yet so these are all initialized to undefined. Because // they are undefined, the first time _updateDomImpl is called, they will all be // rendered. this._updateDomImpl_rendered = { paneIsFirst: undefined, isOpenedMode: undefined, closedDisplayMode: undefined, openedDisplayMode: undefined, panePlacement: undefined, panePlaceholderWidth: undefined, panePlaceholderHeight: undefined, isOverlayShown: undefined }; // Check to make sure we weren't duplicated if (element && element["winControl"]) { throw new _ErrorFromName("WinJS.UI.SplitView.DuplicateConstruction", Strings.duplicateConstruction); } this._initializeDom(element || _Global.document.createElement("div")); this._machine = new _OpenCloseMachine.OpenCloseMachine({ eventElement: this._dom.root, onOpen: function () { _this._cachedHiddenPaneThickness = null; var hiddenPaneThickness = _this._getHiddenPaneThickness(); _this._isOpenedMode = true; _this._updateDomImpl(); return _this._playShowAnimation(hiddenPaneThickness); }, onClose: function () { return _this._playHideAnimation(_this._getHiddenPaneThickness()).then(function () { _this._isOpenedMode = false; _this._updateDomImpl(); }); }, onUpdateDom: function () { _this._updateDomImpl(); }, onUpdateDomWithIsOpened: function (isOpened) { _this._isOpenedMode = isOpened; _this._updateDomImpl(); } }); // Initialize private state. this._disposed = false; this._dismissable = new _LightDismissService.LightDismissableElement({ element: this._dom.paneWrapper, tabIndex: -1, onLightDismiss: function () { _this.closePane(); }, onTakeFocus: function (useSetActive) { _this._dismissable.restoreFocus() || _ElementUtilities._tryFocusOnAnyElement(_this._dom.pane, useSetActive); } }); this._cachedHiddenPaneThickness = null; // Initialize public properties. this.paneOpened = false; this.closedDisplayMode = ClosedDisplayMode.inline; this.openedDisplayMode = OpenedDisplayMode.overlay; this.panePlacement = PanePlacement.left; _Control.setOptions(this, options); // Exit the Init state. _ElementUtilities._inDom(this._dom.root).then(function () { _this._rtl = _Global.getComputedStyle(_this._dom.root).direction === 'rtl'; _this._machine.exitInit(); }); } Object.defineProperty(SplitView.prototype, "element", { /// get: function () { return this._dom.root; }, enumerable: true, configurable: true }); Object.defineProperty(SplitView.prototype, "paneElement", { /// get: function () { return this._dom.pane; }, enumerable: true, configurable: true }); Object.defineProperty(SplitView.prototype, "contentElement", { /// get: function () { return this._dom.content; }, enumerable: true, configurable: true }); Object.defineProperty(SplitView.prototype, "closedDisplayMode", { /// /// Gets or sets the display mode of the SplitView's pane when it is hidden. /// get: function () { return this._closedDisplayMode; }, set: function (value) { if (ClosedDisplayMode[value] && this._closedDisplayMode !== value) { this._closedDisplayMode = value; this._cachedHiddenPaneThickness = null; this._machine.updateDom(); } }, enumerable: true, configurable: true }); Object.defineProperty(SplitView.prototype, "openedDisplayMode", { /// /// Gets or sets the display mode of the SplitView's pane when it is open. /// get: function () { return this._openedDisplayMode; }, set: function (value) { if (OpenedDisplayMode[value] && this._openedDisplayMode !== value) { this._openedDisplayMode = value; this._cachedHiddenPaneThickness = null; this._machine.updateDom(); } }, enumerable: true, configurable: true }); Object.defineProperty(SplitView.prototype, "panePlacement", { /// /// Gets or sets the placement of the SplitView's pane. /// get: function () { return this._panePlacement; }, set: function (value) { if (PanePlacement[value] && this._panePlacement !== value) { this._panePlacement = value; this._cachedHiddenPaneThickness = null; this._machine.updateDom(); } }, enumerable: true, configurable: true }); Object.defineProperty(SplitView.prototype, "paneOpened", { /// get: function () { return this._machine.opened; }, set: function (value) { this._machine.opened = value; }, enumerable: true, configurable: true }); SplitView.prototype.dispose = function () { /// /// /// Disposes this control. /// /// if (this._disposed) { return; } this._disposed = true; this._machine.dispose(); _LightDismissService.hidden(this._dismissable); _Dispose._disposeElement(this._dom.pane); _Dispose._disposeElement(this._dom.content); }; SplitView.prototype.openPane = function () { /// /// /// Opens the SplitView's pane. /// /// this._machine.open(); }; SplitView.prototype.closePane = function () { /// /// /// Closes the SplitView's pane. /// /// this._machine.close(); }; SplitView.prototype._initializeDom = function (root) { // The first child is the pane var paneEl = root.firstElementChild || _Global.document.createElement("div"); _ElementUtilities.addClass(paneEl, ClassNames.pane); if (!paneEl.hasAttribute("tabIndex")) { paneEl.tabIndex = -1; } // All other children are members of the content var contentEl = _Global.document.createElement("div"); _ElementUtilities.addClass(contentEl, ClassNames.content); var child = paneEl.nextSibling; while (child) { var sibling = child.nextSibling; contentEl.appendChild(child); child = sibling; } // paneWrapper's purpose is to clip the pane during the pane resize animation var paneWrapperEl = _Global.document.createElement("div"); paneWrapperEl.className = ClassNames._paneWrapper; paneWrapperEl.appendChild(paneEl); var panePlaceholderEl = _Global.document.createElement("div"); panePlaceholderEl.className = ClassNames._panePlaceholder; // contentWrapper is an extra element we need to allow heights to be specified as percentages (e.g. height: 100%) // for elements within the content area. It works around this Chrome bug: // Issue 428049: 100% height doesn't work on child of a definite-flex-basis flex item (in vertical flex container) // https://code.google.com/p/chromium/issues/detail?id=428049 // The workaround is that putting a position: absolute element (_dom.content) within the flex item (_dom.contentWrapper) // allows percentage heights to work within the absolutely positioned element (_dom.content). var contentWrapperEl = _Global.document.createElement("div"); contentWrapperEl.className = ClassNames._contentWrapper; contentWrapperEl.appendChild(contentEl); root["winControl"] = this; _ElementUtilities.addClass(root, ClassNames.splitView); _ElementUtilities.addClass(root, "win-disposable"); this._dom = { root: root, pane: paneEl, paneWrapper: paneWrapperEl, panePlaceholder: panePlaceholderEl, content: contentEl, contentWrapper: contentWrapperEl }; }; SplitView.prototype._measureElement = function (element) { var style = getComputedStyle(element); var position = _ElementUtilities._getPositionRelativeTo(element, this._dom.root); var marginLeft = parseInt(style.marginLeft, 10); var marginTop = parseInt(style.marginTop, 10); return { left: position.left - marginLeft, top: position.top - marginTop, contentWidth: _ElementUtilities.getContentWidth(element), contentHeight: _ElementUtilities.getContentHeight(element), totalWidth: _ElementUtilities.getTotalWidth(element), totalHeight: _ElementUtilities.getTotalHeight(element) }; }; SplitView.prototype._setContentRect = function (contentRect) { var contentWrapperStyle = this._dom.contentWrapper.style; contentWrapperStyle.left = contentRect.left + "px"; contentWrapperStyle.top = contentRect.top + "px"; contentWrapperStyle.height = contentRect.contentHeight + "px"; contentWrapperStyle.width = contentRect.contentWidth + "px"; }; // Overridden by tests. SplitView.prototype._prepareAnimation = function (paneRect, contentRect) { var paneWrapperStyle = this._dom.paneWrapper.style; paneWrapperStyle.position = "absolute"; paneWrapperStyle.left = paneRect.left + "px"; paneWrapperStyle.top = paneRect.top + "px"; paneWrapperStyle.height = paneRect.totalHeight + "px"; paneWrapperStyle.width = paneRect.totalWidth + "px"; var contentWrapperStyle = this._dom.contentWrapper.style; contentWrapperStyle.position = "absolute"; this._setContentRect(contentRect); }; // Overridden by tests. SplitView.prototype._clearAnimation = function () { var paneWrapperStyle = this._dom.paneWrapper.style; paneWrapperStyle.position = ""; paneWrapperStyle.left = ""; paneWrapperStyle.top = ""; paneWrapperStyle.height = ""; paneWrapperStyle.width = ""; paneWrapperStyle[transformNames.scriptName] = ""; var contentWrapperStyle = this._dom.contentWrapper.style; contentWrapperStyle.position = ""; contentWrapperStyle.left = ""; contentWrapperStyle.top = ""; contentWrapperStyle.height = ""; contentWrapperStyle.width = ""; contentWrapperStyle[transformNames.scriptName] = ""; var paneStyle = this._dom.pane.style; paneStyle.height = ""; paneStyle.width = ""; paneStyle[transformNames.scriptName] = ""; }; SplitView.prototype._getHiddenContentRect = function (shownContentRect, hiddenPaneThickness, shownPaneThickness) { if (this.openedDisplayMode === OpenedDisplayMode.overlay) { return shownContentRect; } else { var placementRight = this._rtl ? PanePlacement.left : PanePlacement.right; var multiplier = this.panePlacement === placementRight || this.panePlacement === PanePlacement.bottom ? 0 : 1; var paneDiff = { content: shownPaneThickness.content - hiddenPaneThickness.content, total: shownPaneThickness.total - hiddenPaneThickness.total }; return this._horizontal ? { left: shownContentRect.left - multiplier * paneDiff.total, top: shownContentRect.top, contentWidth: shownContentRect.contentWidth + paneDiff.content, contentHeight: shownContentRect.contentHeight, totalWidth: shownContentRect.totalWidth + paneDiff.total, totalHeight: shownContentRect.totalHeight } : { left: shownContentRect.left, top: shownContentRect.top - multiplier * paneDiff.total, contentWidth: shownContentRect.contentWidth, contentHeight: shownContentRect.contentHeight + paneDiff.content, totalWidth: shownContentRect.totalWidth, totalHeight: shownContentRect.totalHeight + paneDiff.total }; } }; Object.defineProperty(SplitView.prototype, "_horizontal", { get: function () { return this.panePlacement === PanePlacement.left || this.panePlacement === PanePlacement.right; }, enumerable: true, configurable: true }); SplitView.prototype._getHiddenPaneThickness = function () { if (this._cachedHiddenPaneThickness === null) { if (this._closedDisplayMode === ClosedDisplayMode.none) { this._cachedHiddenPaneThickness = { content: 0, total: 0 }; } else { if (this._isOpenedMode) { _ElementUtilities.removeClass(this._dom.root, ClassNames.paneOpened); _ElementUtilities.addClass(this._dom.root, ClassNames.paneClosed); } var size = this._measureElement(this._dom.pane); this._cachedHiddenPaneThickness = rectToThickness(size, this._horizontal ? Dimension.width : Dimension.height); if (this._isOpenedMode) { _ElementUtilities.removeClass(this._dom.root, ClassNames.paneClosed); _ElementUtilities.addClass(this._dom.root, ClassNames.paneOpened); } } } return this._cachedHiddenPaneThickness; }; // Should be called while SplitView is rendered in its opened mode // Overridden by tests. SplitView.prototype._playShowAnimation = function (hiddenPaneThickness) { var _this = this; var dim = this._horizontal ? Dimension.width : Dimension.height; var shownPaneRect = this._measureElement(this._dom.pane); var shownContentRect = this._measureElement(this._dom.content); var shownPaneThickness = rectToThickness(shownPaneRect, dim); var hiddenContentRect = this._getHiddenContentRect(shownContentRect, hiddenPaneThickness, shownPaneThickness); this._prepareAnimation(shownPaneRect, hiddenContentRect); var playPaneAnimation = function () { var placementRight = _this._rtl ? PanePlacement.left : PanePlacement.right; // What percentage of the size change should be skipped? (e.g. let's do the first // 30% of the size change instantly and then animate the other 70%) var animationOffsetFactor = 0.3; var from = hiddenPaneThickness.total + animationOffsetFactor * (shownPaneThickness.total - hiddenPaneThickness.total); return Animations._resizeTransition(_this._dom.paneWrapper, _this._dom.pane, { from: from, to: shownPaneThickness.total, actualSize: shownPaneThickness.total, dimension: dim, anchorTrailingEdge: _this.panePlacement === placementRight || _this.panePlacement === PanePlacement.bottom }); }; var playShowAnimation = function () { if (_this.openedDisplayMode === OpenedDisplayMode.inline) { _this._setContentRect(shownContentRect); } return playPaneAnimation(); }; return playShowAnimation().then(function () { _this._clearAnimation(); }); }; // Should be called while SplitView is rendered in its opened mode // Overridden by tests. SplitView.prototype._playHideAnimation = function (hiddenPaneThickness) { var _this = this; var dim = this._horizontal ? Dimension.width : Dimension.height; var shownPaneRect = this._measureElement(this._dom.pane); var shownContentRect = this._measureElement(this._dom.content); var shownPaneThickness = rectToThickness(shownPaneRect, dim); var hiddenContentRect = this._getHiddenContentRect(shownContentRect, hiddenPaneThickness, shownPaneThickness); this._prepareAnimation(shownPaneRect, shownContentRect); var playPaneAnimation = function () { var placementRight = _this._rtl ? PanePlacement.left : PanePlacement.right; // What percentage of the size change should be skipped? (e.g. let's do the first // 30% of the size change instantly and then animate the other 70%) var animationOffsetFactor = 0.3; var from = shownPaneThickness.total - animationOffsetFactor * (shownPaneThickness.total - hiddenPaneThickness.total); return Animations._resizeTransition(_this._dom.paneWrapper, _this._dom.pane, { from: from, to: hiddenPaneThickness.total, actualSize: shownPaneThickness.total, dimension: dim, anchorTrailingEdge: _this.panePlacement === placementRight || _this.panePlacement === PanePlacement.bottom }); }; var playHideAnimation = function () { if (_this.openedDisplayMode === OpenedDisplayMode.inline) { _this._setContentRect(hiddenContentRect); } return playPaneAnimation(); }; return playHideAnimation().then(function () { _this._clearAnimation(); }); }; SplitView.prototype._updateDomImpl = function () { var rendered = this._updateDomImpl_rendered; var paneShouldBeFirst = this.panePlacement === PanePlacement.left || this.panePlacement === PanePlacement.top; if (paneShouldBeFirst !== rendered.paneIsFirst) { // TODO: restore focus if (paneShouldBeFirst) { this._dom.root.appendChild(this._dom.panePlaceholder); this._dom.root.appendChild(this._dom.paneWrapper); this._dom.root.appendChild(this._dom.contentWrapper); } else { this._dom.root.appendChild(this._dom.contentWrapper); this._dom.root.appendChild(this._dom.paneWrapper); this._dom.root.appendChild(this._dom.panePlaceholder); } } rendered.paneIsFirst = paneShouldBeFirst; if (rendered.isOpenedMode !== this._isOpenedMode) { if (this._isOpenedMode) { _ElementUtilities.removeClass(this._dom.root, ClassNames.paneClosed); _ElementUtilities.addClass(this._dom.root, ClassNames.paneOpened); } else { _ElementUtilities.removeClass(this._dom.root, ClassNames.paneOpened); _ElementUtilities.addClass(this._dom.root, ClassNames.paneClosed); } } rendered.isOpenedMode = this._isOpenedMode; if (rendered.panePlacement !== this.panePlacement) { removeClass(this._dom.root, panePlacementClassMap[rendered.panePlacement]); addClass(this._dom.root, panePlacementClassMap[this.panePlacement]); rendered.panePlacement = this.panePlacement; } if (rendered.closedDisplayMode !== this.closedDisplayMode) { removeClass(this._dom.root, closedDisplayModeClassMap[rendered.closedDisplayMode]); addClass(this._dom.root, closedDisplayModeClassMap[this.closedDisplayMode]); rendered.closedDisplayMode = this.closedDisplayMode; } if (rendered.openedDisplayMode !== this.openedDisplayMode) { removeClass(this._dom.root, openedDisplayModeClassMap[rendered.openedDisplayMode]); addClass(this._dom.root, openedDisplayModeClassMap[this.openedDisplayMode]); rendered.openedDisplayMode = this.openedDisplayMode; } var isOverlayShown = this._isOpenedMode && this.openedDisplayMode === OpenedDisplayMode.overlay; // panePlaceholder's purpose is to take up the amount of space occupied by the // hidden pane while the pane is shown in overlay mode. Without this, the content // would shift as the pane shows and hides in overlay mode. var width, height; if (isOverlayShown) { var hiddenPaneThickness = this._getHiddenPaneThickness(); if (this._horizontal) { width = hiddenPaneThickness.total + "px"; height = ""; } else { width = ""; height = hiddenPaneThickness.total + "px"; } } else { width = ""; height = ""; } if (rendered.panePlaceholderWidth !== width || rendered.panePlaceholderHeight !== height) { var style = this._dom.panePlaceholder.style; style.width = width; style.height = height; rendered.panePlaceholderWidth = width; rendered.panePlaceholderHeight = height; } if (rendered.isOverlayShown !== isOverlayShown) { if (isOverlayShown) { _LightDismissService.shown(this._dismissable); } else { _LightDismissService.hidden(this._dismissable); } rendered.isOverlayShown = isOverlayShown; } }; /// /// Display options for a SplitView's pane when it is closed. /// SplitView.ClosedDisplayMode = ClosedDisplayMode; /// /// Display options for a SplitView's pane when it is open. /// SplitView.OpenedDisplayMode = OpenedDisplayMode; /// /// Placement options for a SplitView's pane. /// SplitView.PanePlacement = PanePlacement; SplitView.supportedForProcessing = true; SplitView._ClassNames = ClassNames; return SplitView; })(); exports.SplitView = SplitView; _Base.Class.mix(SplitView, _Events.createEventProperties(EventNames.beforeOpen, EventNames.afterOpen, EventNames.beforeClose, EventNames.afterClose)); _Base.Class.mix(SplitView, _Control.DOMEventMixin); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// define('WinJS/Controls/SplitView',["require", "exports", '../Core/_Base'], function (require, exports, _Base) { var module = null; _Base.Namespace.define("WinJS.UI", { SplitView: { get: function () { if (!module) { require(["./SplitView/_SplitView"], function (m) { module = m; }); } return module.SplitView; } } }); }); define('require-style!less/styles-splitviewpanetoggle',[],function(){}); define('require-style!less/colors-splitviewpanetoggle',[],function(){}); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// define('WinJS/Controls/SplitViewPaneToggle/_SplitViewPaneToggle',["require", "exports", '../../Core/_Base', '../../Utilities/_Control', '../../Utilities/_ElementUtilities', '../../Core/_ErrorFromName', '../../Core/_Events', '../../Core/_Global', '../../Utilities/_KeyboardBehavior', '../../Utilities/_Hoverable'], function (require, exports, _Base, _Control, _ElementUtilities, _ErrorFromName, _Events, _Global, _KeyboardBehavior, _Hoverable) { _Hoverable.isHoverable; // Force dependency on the hoverable module require(["require-style!less/styles-splitviewpanetoggle"]); require(["require-style!less/colors-splitviewpanetoggle"]); "use strict"; // This control has 2 modes depending on whether or not the app has provided a SplitView: // - SplitView not provided // SplitViewPaneToggle provides button visuals and fires the invoked event. The app // intends to do everything else: // - Handle the invoked event // - Handle the SplitView opening and closing // - Handle aria-expanded being mutated by UIA (i.e. screen readers) // - Keep the aria-controls attribute, aria-expanded attribute, and SplitView in sync // - SplitView is provided via splitView property // SplitViewPaneToggle keeps the SplitView, the aria-controls attribute, and the // aria-expands attribute in sync. In this use case, apps typically won't listen // to the invoked event (but it's still fired). var ClassNames = { splitViewPaneToggle: "win-splitviewpanetoggle" }; var EventNames = { // Fires when the user invokes the button with mouse/keyboard/touch. Does not // fire if the SplitViewPaneToggle's state changes due to UIA (i.e. aria-expanded // being set) or due to the SplitView pane opening/closing. invoked: "invoked" }; var Strings = { get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; }, get badButtonElement() { return "Invalid argument: The SplitViewPaneToggle's element must be a button element"; } }; // The splitViewElement may not have a winControl associated with it yet in the case // that the SplitViewPaneToggle was constructed before the SplitView. This may happen // when WinJS.UI.processAll is used to construct the controls because the order of construction // depends on the order in which the SplitView and SplitViewPaneToggle appear in the DOM. function getSplitViewControl(splitViewElement) { return (splitViewElement && splitViewElement["winControl"]); } function getPaneOpened(splitViewElement) { var splitViewControl = getSplitViewControl(splitViewElement); return splitViewControl ? splitViewControl.paneOpened : false; } /// /// /// Displays a button which is used for opening and closing a SplitView's pane. /// /// /// /// /// ]]> /// The SplitViewPaneToggle control itself. /// /// var SplitViewPaneToggle = (function () { function SplitViewPaneToggle(element, options) { /// /// /// Creates a new SplitViewPaneToggle control. /// /// /// The DOM element that hosts the SplitViewPaneToggle control. /// /// /// An object that contains one or more property/value pairs to apply to the new control. /// Each property of the options object corresponds to one of the control's properties or events. /// Event names must begin with "on". For example, to provide a handler for the invoked event, /// add a property named "oninvoked" to the options object and set its value to the event handler. /// /// /// The new SplitViewPaneToggle. /// /// if (options === void 0) { options = {}; } // State private to _updateDom. No other method should make use of it. // // Nothing has been rendered yet so these are all initialized to undefined. Because // they are undefined, the first time _updateDom is called, they will all be // rendered. this._updateDom_rendered = { splitView: undefined }; // Check to make sure we weren't duplicated if (element && element["winControl"]) { throw new _ErrorFromName("WinJS.UI.SplitViewPaneToggle.DuplicateConstruction", Strings.duplicateConstruction); } this._onPaneStateSettledBound = this._onPaneStateSettled.bind(this); this._ariaExpandedMutationObserver = new _ElementUtilities._MutationObserver(this._onAriaExpandedPropertyChanged.bind(this)); this._initializeDom(element || _Global.document.createElement("button")); // Private state this._disposed = false; // Default values this.splitView = null; _Control.setOptions(this, options); this._initialized = true; this._updateDom(); } Object.defineProperty(SplitViewPaneToggle.prototype, "element", { /// get: function () { return this._dom.root; }, enumerable: true, configurable: true }); Object.defineProperty(SplitViewPaneToggle.prototype, "splitView", { /// get: function () { return this._splitView; }, set: function (splitView) { this._splitView = splitView; if (splitView) { this._opened = getPaneOpened(splitView); } this._updateDom(); }, enumerable: true, configurable: true }); SplitViewPaneToggle.prototype.dispose = function () { /// /// /// Disposes this control. /// /// if (this._disposed) { return; } this._disposed = true; this._splitView && this._removeListeners(this._splitView); }; SplitViewPaneToggle.prototype._initializeDom = function (root) { if (root.tagName !== "BUTTON") { throw new _ErrorFromName("WinJS.UI.SplitViewPaneToggle.BadButtonElement", Strings.badButtonElement); } root["winControl"] = this; _ElementUtilities.addClass(root, ClassNames.splitViewPaneToggle); _ElementUtilities.addClass(root, "win-disposable"); if (!root.hasAttribute("type")) { root.type = "button"; } new _KeyboardBehavior._WinKeyboard(root); root.addEventListener("click", this._onClick.bind(this)); this._dom = { root: root }; }; SplitViewPaneToggle.prototype._updateDom = function () { if (!this._initialized || this._disposed) { return; } var rendered = this._updateDom_rendered; if (this._splitView !== rendered.splitView) { if (rendered.splitView) { this._dom.root.removeAttribute("aria-controls"); this._removeListeners(rendered.splitView); } if (this._splitView) { _ElementUtilities._ensureId(this._splitView); this._dom.root.setAttribute("aria-controls", this._splitView.id); this._addListeners(this._splitView); } rendered.splitView = this._splitView; } // When no SplitView is provided, it's up to the app to manage aria-expanded. if (this._splitView) { // Always update aria-expanded and don't cache its most recently rendered value // in _updateDom_rendered. The reason is that we're not the only ones that update // aria-expanded. aria-expanded may be changed thru UIA APIs. Consequently, if we // cached the last value we set in _updateDom_rendered, it may not reflect the current // value in the DOM. var expanded = this._opened ? "true" : "false"; _ElementUtilities._setAttribute(this._dom.root, "aria-expanded", expanded); // The splitView element may not have a winControl associated with it yet in the case // that the SplitViewPaneToggle was constructed before the SplitView. This may happen // when WinJS.UI.processAll is used to construct the controls because the order of construction // depends on the order in which the SplitView and SplitViewPaneToggle appear in the DOM. var splitViewControl = getSplitViewControl(this._splitView); if (splitViewControl) { splitViewControl.paneOpened = this._opened; } } }; SplitViewPaneToggle.prototype._addListeners = function (splitViewElement) { splitViewElement.addEventListener("_openCloseStateSettled", this._onPaneStateSettledBound); this._ariaExpandedMutationObserver.observe(this._dom.root, { attributes: true, attributeFilter: ["aria-expanded"] }); }; SplitViewPaneToggle.prototype._removeListeners = function (splitViewElement) { splitViewElement.removeEventListener("_openCloseStateSettled", this._onPaneStateSettledBound); this._ariaExpandedMutationObserver.disconnect(); }; SplitViewPaneToggle.prototype._fireEvent = function (eventName) { var eventObject = _Global.document.createEvent("CustomEvent"); eventObject.initCustomEvent(eventName, true, false, null); return this._dom.root.dispatchEvent(eventObject); }; // Inputs that change the SplitViewPaneToggle's state // SplitViewPaneToggle.prototype._onPaneStateSettled = function (eventObject) { if (eventObject.target === this._splitView) { this._opened = getPaneOpened(this._splitView); this._updateDom(); } }; // Called by tests. SplitViewPaneToggle.prototype._onAriaExpandedPropertyChanged = function (mutations) { var ariaExpanded = this._dom.root.getAttribute("aria-expanded") === "true"; this._opened = ariaExpanded; this._updateDom(); }; SplitViewPaneToggle.prototype._onClick = function (eventObject) { this._invoked(); }; // Called by tests. SplitViewPaneToggle.prototype._invoked = function () { if (this._disposed) { return; } if (this._splitView) { this._opened = !this._opened; this._updateDom(); } this._fireEvent(EventNames.invoked); }; SplitViewPaneToggle._ClassNames = ClassNames; SplitViewPaneToggle.supportedForProcessing = true; return SplitViewPaneToggle; })(); exports.SplitViewPaneToggle = SplitViewPaneToggle; _Base.Class.mix(SplitViewPaneToggle, _Events.createEventProperties(EventNames.invoked)); _Base.Class.mix(SplitViewPaneToggle, _Control.DOMEventMixin); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// define('WinJS/Controls/SplitViewPaneToggle',["require", "exports", '../Core/_Base'], function (require, exports, _Base) { var module = null; _Base.Namespace.define("WinJS.UI", { SplitViewPaneToggle: { get: function () { if (!module) { require(["./SplitViewPaneToggle/_SplitViewPaneToggle"], function (m) { module = m; }); } return module.SplitViewPaneToggle; } } }); }); define('WinJS/Controls/AppBar/_Constants',["require", "exports", "../CommandingSurface/_Constants"], function (require, exports, _CommandingSurfaceConstants) { // appbar class names exports.ClassNames = { controlCssClass: "win-appbar", disposableCssClass: "win-disposable", actionAreaCssClass: "win-appbar-actionarea", overflowButtonCssClass: "win-appbar-overflowbutton", spacerCssClass: "win-appbar-spacer", ellipsisCssClass: "win-appbar-ellipsis", overflowAreaCssClass: "win-appbar-overflowarea", contentFlyoutCssClass: "win-appbar-contentflyout", emptyappbarCssClass: "win-appbar-empty", menuCssClass: "win-menu", menuContainsToggleCommandClass: "win-menu-containstogglecommand", openedClass: "win-appbar-opened", closedClass: "win-appbar-closed", noneClass: "win-appbar-closeddisplaynone", minimalClass: "win-appbar-closeddisplayminimal", compactClass: "win-appbar-closeddisplaycompact", fullClass: "win-appbar-closeddisplayfull", placementTopClass: "win-appbar-top", placementBottomClass: "win-appbar-bottom", }; exports.EventNames = { // AppBar beforeOpen: "beforeopen", afterOpen: "afteropen", beforeClose: "beforeclose", afterClose: "afterclose", // AppBarCommand commandPropertyMutated: "_commandpropertymutated", }; exports.controlMinWidth = _CommandingSurfaceConstants.controlMinWidth; exports.defaultClosedDisplayMode = "compact"; exports.defaultOpened = false; exports.defaultPlacement = "bottom"; // Constants for commands exports.typeSeparator = "separator"; exports.typeContent = "content"; exports.typeButton = "button"; exports.typeToggle = "toggle"; exports.typeFlyout = "flyout"; exports.commandSelector = ".win-command"; exports.primaryCommandSection = "primary"; exports.secondaryCommandSection = "secondary"; }); define('require-style!less/styles-appbar',[],function(){}); define('WinJS/Controls/AppBar/_AppBar',["require", "exports", "../../Core/_Base", "../AppBar/_Constants", "../CommandingSurface", "../../Utilities/_Control", "../../Utilities/_Dispose", "../../Utilities/_ElementUtilities", "../../Core/_ErrorFromName", '../../Core/_Events', "../../Core/_Global", '../../Utilities/_KeyboardInfo', '../../_LightDismissService', '../../Promise', "../../Core/_Resources", '../../Utilities/_OpenCloseMachine', "../../Core/_WriteProfilerMark"], function (require, exports, _Base, _Constants, _CommandingSurface, _Control, _Dispose, _ElementUtilities, _ErrorFromName, _Events, _Global, _KeyboardInfo, _LightDismissService, Promise, _Resources, _OpenCloseMachine, _WriteProfilerMark) { require(["require-style!less/styles-appbar"]); "use strict"; var keyboardInfo = _KeyboardInfo._KeyboardInfo; var strings = { get ariaLabel() { return _Resources._getWinJSString("ui/appBarAriaLabel").value; }, get overflowButtonAriaLabel() { return _Resources._getWinJSString("ui/appBarOverflowButtonAriaLabel").value; }, get mustContainCommands() { return "The AppBar can only contain WinJS.UI.Command or WinJS.UI.AppBarCommand controls"; }, get duplicateConstruction() { return "Invalid argument: Controls may only be instantiated one time for each DOM element"; } }; var ClosedDisplayMode = { /// /// When the AppBar is closed, it is not visible and doesn't take up any space. /// none: "none", /// /// When the AppBar is closed, its height is reduced to the minimal height required to display only its overflowbutton. All other content in the AppBar is not displayed. /// minimal: "minimal", /// /// When the AppBar is closed, its height is reduced such that button commands are still visible, but their labels are hidden. /// compact: "compact", /// /// When the AppBar is closed, its height is always sized to content. /// full: "full", }; var closedDisplayModeClassMap = {}; closedDisplayModeClassMap[ClosedDisplayMode.none] = _Constants.ClassNames.noneClass; closedDisplayModeClassMap[ClosedDisplayMode.minimal] = _Constants.ClassNames.minimalClass; closedDisplayModeClassMap[ClosedDisplayMode.compact] = _Constants.ClassNames.compactClass; closedDisplayModeClassMap[ClosedDisplayMode.full] = _Constants.ClassNames.fullClass; var Placement = { /// /// The AppBar appears at the top of the main view /// top: "top", /// /// The AppBar appears at the bottom of the main view /// bottom: "bottom", }; var placementClassMap = {}; placementClassMap[Placement.top] = _Constants.ClassNames.placementTopClass; placementClassMap[Placement.bottom] = _Constants.ClassNames.placementBottomClass; // Versions of add/removeClass that are no ops when called with falsy class names. function addClass(element, className) { className && _ElementUtilities.addClass(element, className); } function removeClass(element, className) { className && _ElementUtilities.removeClass(element, className); } /// /// /// Represents an appbar for displaying commands. /// /// /// /// /// /// /// ]]> /// The entire AppBar control. /// The appbar overflow button. /// The container for appbar commands that overflow. /// /// var AppBar = (function () { function AppBar(element, options) { /// /// /// Creates a new AppBar control. /// /// /// The DOM element that will host the control. /// /// /// The set of properties and values to apply to the new AppBar control. /// /// /// The new AppBar control. /// /// var _this = this; if (options === void 0) { options = {}; } // State private to the _updateDomImpl family of method. No other methods should make use of it. // // Nothing has been rendered yet so these are all initialized to undefined. Because // they are undefined, the first time _updateDomImpl is called, they will all be // rendered. this._updateDomImpl_renderedState = { isOpenedMode: undefined, placement: undefined, closedDisplayMode: undefined, adjustedOffsets: { top: undefined, bottom: undefined }, }; this._writeProfilerMark("constructor,StartTM"); // Check to make sure we weren't duplicated if (element && element["winControl"]) { throw new _ErrorFromName("WinJS.UI.AppBar.DuplicateConstruction", strings.duplicateConstruction); } this._initializeDom(element || _Global.document.createElement("div")); var stateMachine = new _OpenCloseMachine.OpenCloseMachine({ eventElement: this.element, onOpen: function () { var openAnimation = _this._commandingSurface.createOpenAnimation(_this._getClosedHeight()); // We're temporarily setting the AppBar's style from position=-ms-device-fixed to fixed to work around an animations bug in IE, // where two AppBars will end up being rendered when animating instead of one. // We need to recalculate our offsets relative to the top and bottom of the visible document because position fixed elements use layout viewport coordinates // while position -ms-device-fixed use visual viewport coordinates.This difference in coordinate systems is especially pronounced if the IHM has caused the visual viewport to resize. _this.element.style.position = "fixed"; if (_this._placement === AppBar.Placement.top) { _this.element.style.top = _KeyboardInfo._KeyboardInfo._layoutViewportCoords.visibleDocTop + "px"; } else { _this.element.style.bottom = _KeyboardInfo._KeyboardInfo._layoutViewportCoords.visibleDocBottom + "px"; } _this._synchronousOpen(); return openAnimation.execute().then(function () { _this.element.style.position = ""; _this.element.style.top = _this._adjustedOffsets.top; _this.element.style.bottom = _this._adjustedOffsets.bottom; }); }, onClose: function () { var closeAnimation = _this._commandingSurface.createCloseAnimation(_this._getClosedHeight()); // We're temporarily setting the AppBar's style from position=-ms-device-fixed to fixed to work around an animations bug in IE, // where two AppBars will end up being rendered when animating instead of one. // We need to recalculate our offsets relative to the top and bottom of the visible document because position fixed elements use layout viewport coordinates // while position -ms-device-fixed use visual viewport coordinates.This difference in coordinate systems is especially pronounced if the IHM has caused the visual viewport to resize. _this.element.style.position = "fixed"; if (_this._placement === AppBar.Placement.top) { _this.element.style.top = _KeyboardInfo._KeyboardInfo._layoutViewportCoords.visibleDocTop + "px"; } else { _this.element.style.bottom = _KeyboardInfo._KeyboardInfo._layoutViewportCoords.visibleDocBottom + "px"; } return closeAnimation.execute().then(function () { _this._synchronousClose(); _this.element.style.position = ""; _this.element.style.top = _this._adjustedOffsets.top; _this.element.style.bottom = _this._adjustedOffsets.bottom; }); }, onUpdateDom: function () { _this._updateDomImpl(); }, onUpdateDomWithIsOpened: function (isOpened) { _this._isOpenedMode = isOpened; _this._updateDomImpl(); } }); // Events this._handleShowingKeyboardBound = this._handleShowingKeyboard.bind(this); this._handleHidingKeyboardBound = this._handleHidingKeyboard.bind(this); _ElementUtilities._inputPaneListener.addEventListener(this._dom.root, "showing", this._handleShowingKeyboardBound); _ElementUtilities._inputPaneListener.addEventListener(this._dom.root, "hiding", this._handleHidingKeyboardBound); // Initialize private state. this._disposed = false; this._cachedClosedHeight = null; this._commandingSurface = new _CommandingSurface._CommandingSurface(this._dom.commandingSurfaceEl, { openCloseMachine: stateMachine }); addClass(this._dom.commandingSurfaceEl.querySelector(".win-commandingsurface-actionarea"), _Constants.ClassNames.actionAreaCssClass); addClass(this._dom.commandingSurfaceEl.querySelector(".win-commandingsurface-overflowarea"), _Constants.ClassNames.overflowAreaCssClass); addClass(this._dom.commandingSurfaceEl.querySelector(".win-commandingsurface-overflowbutton"), _Constants.ClassNames.overflowButtonCssClass); addClass(this._dom.commandingSurfaceEl.querySelector(".win-commandingsurface-ellipsis"), _Constants.ClassNames.ellipsisCssClass); this._isOpenedMode = _Constants.defaultOpened; this._dismissable = new _LightDismissService.LightDismissableElement({ element: this._dom.root, tabIndex: this._dom.root.hasAttribute("tabIndex") ? this._dom.root.tabIndex : -1, onLightDismiss: function () { _this.close(); } }); // Initialize public properties. this.closedDisplayMode = _Constants.defaultClosedDisplayMode; this.placement = _Constants.defaultPlacement; this.opened = this._isOpenedMode; _Control.setOptions(this, options); // Exit the Init state. _ElementUtilities._inDom(this.element).then(function () { return _this._commandingSurface.initialized; }).then(function () { stateMachine.exitInit(); _this._writeProfilerMark("constructor,StopTM"); }); } Object.defineProperty(AppBar.prototype, "element", { /// get: function () { return this._dom.root; }, enumerable: true, configurable: true }); Object.defineProperty(AppBar.prototype, "data", { /// /// Gets or sets the Binding List of WinJS.UI.Command for the AppBar. /// get: function () { return this._commandingSurface.data; }, set: function (value) { this._commandingSurface.data = value; }, enumerable: true, configurable: true }); Object.defineProperty(AppBar.prototype, "closedDisplayMode", { /// /// Gets or sets the closedDisplayMode for the AppBar. Values are "none", "minimal", "compact" and "full". /// get: function () { return this._commandingSurface.closedDisplayMode; }, set: function (value) { if (ClosedDisplayMode[value]) { this._commandingSurface.closedDisplayMode = value; this._cachedClosedHeight = null; } }, enumerable: true, configurable: true }); Object.defineProperty(AppBar.prototype, "placement", { /// get: function () { return this._placement; }, set: function (value) { if (Placement[value] && this._placement !== value) { this._placement = value; switch (value) { case Placement.top: this._commandingSurface.overflowDirection = "bottom"; break; case Placement.bottom: this._commandingSurface.overflowDirection = "top"; break; } this._adjustedOffsets = this._computeAdjustedOffsets(); this._commandingSurface.deferredDomUpate(); } }, enumerable: true, configurable: true }); Object.defineProperty(AppBar.prototype, "opened", { /// get: function () { return this._commandingSurface.opened; }, set: function (value) { this._commandingSurface.opened = value; }, enumerable: true, configurable: true }); AppBar.prototype.open = function () { /// /// /// Opens the AppBar /// /// this._commandingSurface.open(); }; AppBar.prototype.close = function () { /// /// /// Closes the AppBar /// /// this._commandingSurface.close(); }; AppBar.prototype.dispose = function () { /// /// /// Disposes this AppBar. /// /// if (this._disposed) { return; } this._disposed = true; _LightDismissService.hidden(this._dismissable); // Disposing the _commandingSurface will trigger dispose on its OpenCloseMachine // and synchronously complete any animations that might have been running. this._commandingSurface.dispose(); _ElementUtilities._inputPaneListener.removeEventListener(this._dom.root, "showing", this._handleShowingKeyboardBound); _ElementUtilities._inputPaneListener.removeEventListener(this._dom.root, "hiding", this._handleHidingKeyboardBound); _Dispose.disposeSubTree(this.element); }; AppBar.prototype.forceLayout = function () { /// /// /// Forces the AppBar to update its layout. Use this function when the window did not change size, but the container of the AppBar changed size. /// /// this._commandingSurface.forceLayout(); }; AppBar.prototype.getCommandById = function (id) { /// /// /// Retrieves the command with the specified ID from this AppBar. /// If more than one command is found, this method returns the first command found. /// /// Id of the command to return. /// /// The command found, or null if no command is found. /// /// return this._commandingSurface.getCommandById(id); }; AppBar.prototype.showOnlyCommands = function (commands) { /// /// /// Show the specified commands, hiding all of the others in the AppBar. /// /// /// An array of the commands to show. The array elements may be Command objects, or the string identifiers (IDs) of commands. /// /// return this._commandingSurface.showOnlyCommands(commands); }; AppBar.prototype._writeProfilerMark = function (text) { _WriteProfilerMark("WinJS.UI.AppBar:" + this._id + ":" + text); }; AppBar.prototype._initializeDom = function (root) { this._writeProfilerMark("_intializeDom,info"); // Attaching JS control to DOM element root["winControl"] = this; this._id = root.id || _ElementUtilities._uniqueID(root); _ElementUtilities.addClass(root, _Constants.ClassNames.controlCssClass); _ElementUtilities.addClass(root, _Constants.ClassNames.disposableCssClass); // Make sure we have an ARIA role var role = root.getAttribute("role"); if (!role) { root.setAttribute("role", "menubar"); } var label = root.getAttribute("aria-label"); if (!label) { root.setAttribute("aria-label", strings.ariaLabel); } // Create element for commandingSurface and reparent any declarative Commands. // commandingSurface will parse child elements as AppBarCommands. var commandingSurfaceEl = document.createElement("DIV"); _ElementUtilities._reparentChildren(root, commandingSurfaceEl); root.appendChild(commandingSurfaceEl); this._dom = { root: root, commandingSurfaceEl: commandingSurfaceEl, }; }; AppBar.prototype._handleShowingKeyboard = function (event) { // If the IHM resized the window, we can rely on -ms-device-fixed positioning to remain visible. // If the IHM does not resize the window we will need to adjust our offsets to avoid being occluded // The IHM does not cause a window resize to happen right away, set a timeout to check if the viewport // has been resized after enough time has passed for both the IHM animation, and scroll-into-view, to // complete. var _this = this; // If focus is in the AppBar, tell the platform we will move ourselves. if (this._dom.root.contains(_Global.document.activeElement)) { var inputPaneEvent = event.detail.originalEvent; inputPaneEvent.ensuredFocusedElementInView = true; } var duration = keyboardInfo._animationShowLength + keyboardInfo._scrollTimeout; // Returns a promise for unit tests to verify the correct behavior after the timeout. return Promise.timeout(duration).then(function () { if (_this._shouldAdjustForShowingKeyboard() && !_this._disposed) { _this._adjustedOffsets = _this._computeAdjustedOffsets(); _this._commandingSurface.deferredDomUpate(); } }); }; AppBar.prototype._shouldAdjustForShowingKeyboard = function () { // Overwriteable for unit tests // Determines if an AppBar needs to adjust its position to move in response to a shown IHM, or if it can // just ride the bottom of the visual viewport to remain visible. The latter requires that the IHM has // caused the viewport to resize. return keyboardInfo._visible && !keyboardInfo._isResized; }; AppBar.prototype._handleHidingKeyboard = function () { // Make sure AppBar has the correct offsets since it could have been displaced by the IHM. this._adjustedOffsets = this._computeAdjustedOffsets(); this._commandingSurface.deferredDomUpate(); }; AppBar.prototype._computeAdjustedOffsets = function () { // Position the AppBar element relative to the top or bottom edge of the visible // document. var offsets = { top: "", bottom: "" }; if (this._placement === Placement.bottom) { // If the IHM is open, the bottom of the visual viewport may or may not be occluded offsets.bottom = keyboardInfo._visibleDocBottomOffset + "px"; } else if (this._placement === Placement.top) { offsets.top = keyboardInfo._visibleDocTop + "px"; } return offsets; }; AppBar.prototype._synchronousOpen = function () { this._isOpenedMode = true; this._updateDomImpl(); }; AppBar.prototype._synchronousClose = function () { this._isOpenedMode = false; this._updateDomImpl(); }; AppBar.prototype._updateDomImpl = function () { var rendered = this._updateDomImpl_renderedState; if (rendered.isOpenedMode !== this._isOpenedMode) { if (this._isOpenedMode) { this._updateDomImpl_renderOpened(); } else { this._updateDomImpl_renderClosed(); } rendered.isOpenedMode = this._isOpenedMode; } if (rendered.placement !== this.placement) { removeClass(this._dom.root, placementClassMap[rendered.placement]); addClass(this._dom.root, placementClassMap[this.placement]); rendered.placement = this.placement; } if (rendered.closedDisplayMode !== this.closedDisplayMode) { removeClass(this._dom.root, closedDisplayModeClassMap[rendered.closedDisplayMode]); addClass(this._dom.root, closedDisplayModeClassMap[this.closedDisplayMode]); rendered.closedDisplayMode = this.closedDisplayMode; } if (rendered.adjustedOffsets.top !== this._adjustedOffsets.top) { this._dom.root.style.top = this._adjustedOffsets.top; rendered.adjustedOffsets.top = this._adjustedOffsets.top; } if (rendered.adjustedOffsets.bottom !== this._adjustedOffsets.bottom) { this._dom.root.style.bottom = this._adjustedOffsets.bottom; rendered.adjustedOffsets.bottom = this._adjustedOffsets.bottom; } this._commandingSurface.updateDomImpl(); }; AppBar.prototype._getClosedHeight = function () { if (this._cachedClosedHeight === null) { var wasOpen = this._isOpenedMode; if (this._isOpenedMode) { this._synchronousClose(); } this._cachedClosedHeight = this._commandingSurface.getBoundingRects().commandingSurface.height; if (wasOpen) { this._synchronousOpen(); } } return this._cachedClosedHeight; }; AppBar.prototype._updateDomImpl_renderOpened = function () { addClass(this._dom.root, _Constants.ClassNames.openedClass); removeClass(this._dom.root, _Constants.ClassNames.closedClass); this._commandingSurface.synchronousOpen(); _LightDismissService.shown(this._dismissable); // Call at the start of the open animation }; AppBar.prototype._updateDomImpl_renderClosed = function () { addClass(this._dom.root, _Constants.ClassNames.closedClass); removeClass(this._dom.root, _Constants.ClassNames.openedClass); this._commandingSurface.synchronousClose(); _LightDismissService.hidden(this._dismissable); // Call after the close animation }; /// /// Display options for the AppBar when closed. /// AppBar.ClosedDisplayMode = ClosedDisplayMode; /// /// Display options for AppBar placement in relation to the main view. /// AppBar.Placement = Placement; AppBar.supportedForProcessing = true; return AppBar; })(); exports.AppBar = AppBar; _Base.Class.mix(AppBar, _Events.createEventProperties(_Constants.EventNames.beforeOpen, _Constants.EventNames.afterOpen, _Constants.EventNames.beforeClose, _Constants.EventNames.afterClose)); // addEventListener, removeEventListener, dispatchEvent _Base.Class.mix(AppBar, _Control.DOMEventMixin); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. /// define('WinJS/Controls/AppBar',["require", "exports", '../Core/_Base'], function (require, exports, _Base) { var module = null; _Base.Namespace.define("WinJS.UI", { AppBar: { get: function () { if (!module) { require(["./AppBar/_AppBar"], function (m) { module = m; }); } return module.AppBar; } } }); }); // Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. define('ui',[ 'WinJS/Core/_WinJS', 'WinJS/VirtualizedDataSource', 'WinJS/Controls/IntrinsicControls', 'WinJS/Controls/ListView', 'WinJS/Controls/FlipView', 'WinJS/Controls/ItemContainer', 'WinJS/Controls/Repeater', 'WinJS/Controls/DatePicker', 'WinJS/Controls/TimePicker', 'WinJS/Controls/BackButton', 'WinJS/Controls/Rating', 'WinJS/Controls/ToggleSwitch', 'WinJS/Controls/SemanticZoom', 'WinJS/Controls/Pivot', 'WinJS/Controls/Hub', 'WinJS/Controls/Flyout', 'WinJS/Controls/_LegacyAppBar', 'WinJS/Controls/Menu', 'WinJS/Controls/SearchBox', 'WinJS/Controls/SettingsFlyout', 'WinJS/Controls/NavBar', 'WinJS/Controls/Tooltip', 'WinJS/Controls/ViewBox', 'WinJS/Controls/ContentDialog', 'WinJS/Controls/SplitView', 'WinJS/Controls/SplitViewPaneToggle', 'WinJS/Controls/ToolBar', 'WinJS/Controls/AppBar', ], function (_WinJS) { "use strict"; return _WinJS; }); require(['WinJS/Core/_WinJS', 'ui'], function (_WinJS) { // WinJS always publishes itself to global globalObject.WinJS = _WinJS; if (typeof module !== 'undefined') { // This is a CommonJS context so publish to exports module.exports = _WinJS; } }); return globalObject.WinJS; })); }()); ================================================ FILE: templates/winjs/template/source/package.appxmanifest ================================================ ::APP_TITLE:: ::APP_COMPANY:: images\storelogo.png ================================================ FILE: templates/winjs/template/source/uwp-project.jsproj ================================================ Debug AnyCPU Debug ARM Debug x64 Debug x86 Release AnyCPU Release ARM true Release x64 true Release x86 true e9d48192-1008-49be-8a59-932a3ef1a1ca 14.0 UAP 10.0.15063.0 10.0.10586.0 $(VersionNumberMajor).$(VersionNumberMinor) en-US ::APP_FILE::_TemporaryKey.pfx Designer ================================================ FILE: templates/winjs/template/uwp-project.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.26430.16 MinimumVisualStudioVersion = 10.0.40219.1 Project("{262852C6-CD72-467D-83FE-5EEB1973A190}") = "::APP_FILE::", "source\::APP_FILE::.jsproj", "{E9D48192-1008-49BE-8A59-932A3EF1A1CA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|ARM = Debug|ARM Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|ARM = Release|ARM Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|ARM.ActiveCfg = Debug|ARM {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|ARM.Build.0 = Debug|ARM {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|ARM.Deploy.0 = Debug|ARM {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|x64.ActiveCfg = Debug|x64 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|x64.Build.0 = Debug|x64 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|x64.Deploy.0 = Debug|x64 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|x86.ActiveCfg = Debug|x86 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|x86.Build.0 = Debug|x86 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Debug|x86.Deploy.0 = Debug|x86 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|Any CPU.Build.0 = Release|Any CPU {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|Any CPU.Deploy.0 = Release|Any CPU {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|ARM.ActiveCfg = Release|ARM {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|ARM.Build.0 = Release|ARM {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|ARM.Deploy.0 = Release|ARM {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|x64.ActiveCfg = Release|x64 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|x64.Build.0 = Release|x64 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|x64.Deploy.0 = Release|x64 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|x86.ActiveCfg = Release|x86 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|x86.Build.0 = Release|x86 {E9D48192-1008-49BE-8A59-932A3EF1A1CA}.Release|x86.Deploy.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: templates/winrt/appx/AppxManifest.xml ================================================ ::meta.title:: ::meta.company:: assetspkg\StoreLogo.png ================================================ FILE: templates/winrt/hxml/debug.hxml ================================================ -main ApplicationMain ::HAXE_FLAGS:: -cpp ::CPP_DIR:: -cp ::OUTPUT_DIR::/haxe --macro keep("::APP_MAIN::") -D winrt -debug ================================================ FILE: templates/winrt/hxml/final.hxml ================================================ -main ApplicationMain ::HAXE_FLAGS:: -cp ::OUTPUT_DIR::/haxe -cpp ::CPP_DIR:: --macro keep("::APP_MAIN::") -D winrt -D final ================================================ FILE: templates/winrt/hxml/release.hxml ================================================ -main ApplicationMain ::HAXE_FLAGS:: -cp ::OUTPUT_DIR::/haxe -cpp ::CPP_DIR:: --macro keep("::APP_MAIN::") -D winrt ================================================ FILE: templates/winrt/scripts/newcertificate.ps1 ================================================ Get-ChildItem cert:\LocalMachine\My | Where-Object { $_.Subject -match "CN=::if APP_COMPANYID::APP_COMPANYID::else::OpenFL_Example::end::" } | Remove-Item New-SelfSignedCertificate -Type Custom -Subject "CN=::if APP_COMPANYID::APP_COMPANYID::else::OpenFL_Example::end::" -KeyUsage DigitalSignature -FriendlyName OpenFLDisplayingCert -CertStoreLocation "Cert:\LocalMachine\My" #Get-ChildItem cert:\LocalMachine\My | Where-Object { $_.Subject -match "CN=::if APP_COMPANYID::APP_COMPANYID::else::OpenFL_Example::end::" } $pwd = ConvertTo-SecureString -String ::if APP_CERTIFICATE_PWD::APP_CERTIFICATE_PWD::else::"openflexample"::end:: -Force -AsPlainText $thumbprint=(dir cert:\localmachine\My -recurse | where {$_.Subject -match "CN=::if APP_COMPANYID::APP_COMPANYID::else::OpenFL_Example::end::"} ).Thumbprint; Export-PfxCertificate -cert "Cert:\LocalMachine\My\$thumbprint" -FilePath ::APP_FILE::.pfx -Password $pwd ================================================ FILE: templates/winrt/static/BuildMain.xml ================================================ ::foreach ndlls:: ::end::
    ================================================ FILE: templates/winrt/static/Main.cpp ================================================ #include #define DECLSPEC __declspec(dllexport) #define SDLCALL __cdecl #ifdef _MSC_VER #pragma warning(disable:4103) #pragma warning(disable:4447) #endif #pragma pack(push,8) extern "C" { extern DECLSPEC int SDLCALL SDL_WinRTRunApp(int (*mainFunction)(int, char **), void * reserved); } #pragma pack(pop) #include #include #ifdef main #undef main #endif #ifndef __WINRT__ #define __WINRT__ #endif #ifndef SDL_BUILDING_WINRT #define SDL_BUILDING_WINRT 1 #endif #define LIME_SDL #define LIME_OPENGL #define LIME_CAIRO #define NATIVE_TOOLKIT_SDL_ANGLE #ifndef SDL_WINRT_METADATA_FILE_AVAILABLE #ifndef __cplusplus_winrt #error Main.cpp must be compiled with /ZW, otherwise build errors due to missing .winmd files can occur. #endif #endif #ifdef _MSC_VER #pragma comment(lib, "runtimeobject.lib") #endif #define DEBUG_PRINTF #ifdef DEBUG_PRINTF # ifdef UNICODE # define DLOG(fmt, ...) {wchar_t buf[1024];swprintf(buf,L"****LOG: %s(%d): %s \n [" fmt "]\n",__FILE__,__LINE__,__FUNCTION__, __VA_ARGS__);OutputDebugString(buf);} # else # define DLOG(fmt, ...) {char buf[1024];sprintf(buf,"****LOG: %s(%d): %s \n [" fmt "]\n",__FILE__,__LINE__,__FUNCTION__, __VA_ARGS__);OutputDebugString(buf);} # endif #else # define DLOG(fmt, ...) {} #endif extern "C" const char *hxRunLibrary (); extern "C" void hxcpp_set_top_of_stack (); extern "C" int zlib_register_prims (); extern "C" int lime_cairo_register_prims (); ::foreach ndlls::::if (registerStatics):: extern "C" int ::nameSafe::_register_prims ();::end::::end:: int _main(int argc, char *argv[]) { //DLOG("HELLO WORLD"); //Sleep(10000); //uncomment to attach here in debugger //DLOG("HELLO WORLD2"); try { hxcpp_set_top_of_stack (); zlib_register_prims (); lime_cairo_register_prims (); ::foreach ndlls::::if (registerStatics):: ::nameSafe::_register_prims ();::end::::end:: const char *err = NULL; err = hxRunLibrary (); if (err) { DLOG("Error: %s\n", err); } } catch (Dynamic e) { DLOG("Main Error\n",); // __hx_dump_stack(); return -1; } return 0; } int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { SDL_WinRTRunApp(_main, NULL); return 0; } ================================================ FILE: templates/winrt/temp/embed.resfiles ================================================ ================================================ FILE: templates/winrt/temp/layout.resfiles ================================================ //generate this file ================================================ FILE: templates/winrt/temp/pri.resfiles ================================================ ================================================ FILE: templates/winrt/temp/priconfig.xml ================================================  ================================================ FILE: templates/winrt/temp/resources.resfiles ================================================ ================================================ FILE: tests/runtime/.gitignore ================================================ build report src test/ExampleTest.hx test/TestMain.hx test/TestSuite.hx ================================================ FILE: tests/runtime/.munit ================================================ version=src src=test bin=build report=report hxml=test.hxml classPaths=src ================================================ FILE: tests/runtime/README.md ================================================ Install ------- git clone https://github.com/openfl/openfl-validation haxelib dev openfl-validation openfl-validation haxelib install munit Testing ------------- First, change to the openfl-validation directory: cd openfl-validation Next, you can test HTML5 and Flash using munit: haxelib run munit test Other targets can be tested using the normal OpenFL test commands: lime test windows lime test windows -neko lime test mac lime test mac -neko lime test linux lime test linux -neko lime test ios lime test ios -simulator lime test android lime test blackberry lime test blackberry -simulator Contributing ------------- If you would like to contribute a test, create a fork of the repository, then make a pull request with your addition. Tests are organized based upon the class, then the method or property which has been tested. This will help us validate across the full API, and when there are problems, will help identify exactly which property or method needs to be improved for the specific target. Remember to remove @Ignore when you finish a test. ================================================ FILE: tests/runtime/project.xml ================================================ ================================================ FILE: tests/runtime/run.sh ================================================ #!/bin/sh haxelib run munit gen lime test neko lime test cpp haxelib run munit test ================================================ FILE: tests/runtime/test/lime/WindowTest.hx ================================================ package lime; import lime.app.Application; import lime.ui.Window; import massive.munit.Assert; class WindowTest { private var app:Application; @BeforeClass public function beforeClass():Void { app = new Application(); app.create(null); } @Test public function createEmptyWindow():Void { Assert.isNull(app.window); Assert.areEqual(0, app.windows.length); var window = new Window(); Assert.isNull(window.renderer); Assert.isNull(window.config); Assert.isFalse(window.fullscreen); Assert.areEqual(0, window.height); Assert.areEqual(0, window.width); Assert.areEqual(0, window.x); Assert.areEqual(0, window.y); app.createWindow(window); Assert.isNotNull(window.renderer); Assert.isNull(window.config); #if !html5 // TODO: standardize the behavior of a 0 x 0 window Assert.isFalse(window.fullscreen); // Assert.areEqual (0, window.height); // Assert.areEqual (0, window.width); // Assert.areEqual (0, window.x); // Assert.areEqual (0, window.y); #end window.close(); Assert.isNull(app.window); Assert.areEqual(0, app.windows.length); } @Test public function createBasicWindow():Void { Assert.isNull(app.window); Assert.areEqual(0, app.windows.length); var window = new Window(); window.width = 400; window.height = 300; Assert.isNull(window.renderer); Assert.isNull(window.config); Assert.isFalse(window.fullscreen); Assert.areEqual(300, window.height); Assert.areEqual(400, window.width); Assert.areEqual(0, window.x); Assert.areEqual(0, window.y); app.createWindow(window); Assert.isNotNull(window.renderer); Assert.isNull(window.config); Assert.isFalse(window.fullscreen); Assert.areEqual(300, window.height); Assert.areEqual(400, window.width); // Assert.areEqual (0, window.x); // Assert.areEqual (0, window.y); window.close(); Assert.isNull(app.window); Assert.areEqual(0, app.windows.length); } @Test public function createEmptyWindowFromConfig():Void { Assert.isNull(app.window); Assert.areEqual(0, app.windows.length); var config = {}; var window = new Window(config); Assert.isNull(window.renderer); Assert.areEqual(config, window.config); Assert.isFalse(window.fullscreen); Assert.areEqual(0, window.height); Assert.areEqual(0, window.width); Assert.areEqual(0, window.x); Assert.areEqual(0, window.y); app.createWindow(window); Assert.isNotNull(window.renderer); Assert.areEqual(config, window.config); #if !html5 Assert.isFalse(window.fullscreen); // Assert.areEqual (0, window.height); // Assert.areEqual (0, window.width); // Assert.areEqual (0, window.x); // Assert.areEqual (0, window.y); #end window.close(); Assert.isNull(app.window); Assert.areEqual(0, app.windows.length); } @Test public function createBasicWindowFromConfig():Void { Assert.isNull(app.window); Assert.areEqual(0, app.windows.length); var config = {width: 400, height: 300}; var window = new Window(config); Assert.isNull(window.renderer); Assert.areEqual(config, window.config); Assert.isFalse(window.fullscreen); Assert.areEqual(300, window.height); Assert.areEqual(400, window.width); Assert.areEqual(0, window.x); Assert.areEqual(0, window.y); app.createWindow(window); Assert.isNotNull(window.renderer); Assert.areEqual(config, window.config); Assert.isFalse(window.fullscreen); Assert.areEqual(300, window.height); Assert.areEqual(400, window.width); // Assert.areEqual (0, window.x); // Assert.areEqual (0, window.y); window.close(); Assert.isNull(app.window); Assert.areEqual(0, app.windows.length); } @AfterClass public function afterClass():Void { app = null; } } ================================================ FILE: tests/runtime/test.hxml ================================================ ## Flash 9+ -main TestMain -lib munit -lib hamcrest -lib mlib -lib lime -D web -cp test -swf-version 11.3 -swf build/as3_test.swf # Trick munit into building our app -cmd haxelib run lime build html5 #-cmd openfl build neko #-cmd mv build/linux64/neko/obj/ApplicationMain.n build/linux64/neko/bin/Validation.n #-cmd lime update linux --next ## JavaScript -js build/html5/bin/TestMain.js --no-output --next ## Neko #-neko build/linux64/neko/bin/Validation.n #--no-output #--next ## C++ #-main ApplicationMain #-cp build/linux64/cpp/haxe #-cp test #-lib openfl #-lib munit #-lib hamcrest #-lib mlib #-lib openfl-native #-D linux #-D desktop #-D HXCPP_M64 #-D display #-cpp build/linux64/cpp/bin #--remap flash:flash #--no-output ================================================ FILE: tests/unit/project.xml ================================================